Библиотека для амплитудного анализа звука на Arduino
- Хитрый адаптивный алгоритм
- Встроенные фильтры для плавного потока значений
- Получение громкости в указанном диапазоне независимо от диапазона входного сигнала
- Получение сигнала на резкие изменения звука
- Работа в режиме виртуального анализатора (без привязки к АЦП МК)
Совместима со всеми Arduino платформами (используются Arduino-функции)
- Библиотеку можно найти по названию VolAnalyzer и установить через менеджер библиотек в:
- Arduino IDE
- Arduino IDE v2
- PlatformIO
- Скачать библиотеку .zip архивом для ручной установки:
- Распаковать и положить в C:\Program Files (x86)\Arduino\libraries (Windows x64)
- Распаковать и положить в C:\Program Files\Arduino\libraries (Windows x32)
- Распаковать и положить в Документы/Arduino/libraries/
- (Arduino IDE) автоматическая установка из .zip: Скетч/Подключить библиотеку/Добавить .ZIP библиотеку… и указать скачанный архив
- Читай более подробную инструкцию по установке библиотек здесь
- Рекомендую всегда обновлять библиотеку: в новых версиях исправляются ошибки и баги, а также проводится оптимизация и добавляются новые фичи
- Через менеджер библиотек IDE: найти библиотеку как при установке и нажать "Обновить"
- Вручную: удалить папку со старой версией, а затем положить на её место новую. "Замену" делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!
VolAnalyzer analyzer(A0); // указать пин
VolAnalyzer analyzer; // "виртуальный" анализатор
// =========================== TICK ===========================
// опрашивать как можно чаще. Может принимать значение, если это виртуальный анализатор
// вернёт true при окончании анализа выборки
bool tick(int read = -1);
// ========================== SETTINGS ==========================
void setPin(int8_t pin); // указать пин АЦП
void setDt(uint16_t dt); // установить время между опросами АЦП (мкс) (по умолч. 500)
void setWindow(uint8_t window); // установка ширины окна выборки (по умолч. 20)
void setTrsh(uint16_t trsh); // установить порог громкости в единицах АЦП (умолч 40)
// ========================== VOLUME ==========================
void setVolDt(uint8_t dt); // установить период фильтрации громкости (умолч 20)
void setVolK(uint8_t vk); // установить коэффициент плавности громкости 0-31 (умолч 25)
uint16_t getVol(); // получить громкость в пределах setVolMin.. setVolMax
void setVolMin(uint8_t vol); // установить минимальную величину громкости (умолч 0)
void setVolMax(uint8_t vol); // установить максимальную величину громкости (умолч 100)
// ========================= AMPLITUDE =========================
void setAmpliDt(uint8_t dt); // установить период фильтрации амплитудных огибающих
void setAmpliK(uint8_t rk); // установить коэффициент плавности амплитуды 0-31 (умолч 31)
uint16_t getMin(); // получить текущее значение огибающей минимумов (с v1.5 - 0)
uint16_t getMax(); // получить текущее значение огибающей максимумов
// =========================== PULSE ===========================
void setPulseMax(uint8_t maxV); // верхний порог срабатывания пульса (по шкале громкости)
void setPulseMin(uint8_t minV); // нижний порог перезагрузки пульса (по шкале громкости)
void setPulseTimeout(uint16_t tout); // таймаут пульса, мс
bool pulse(); // резкий скачок громкости (true)
// ========================== RAW DATA ===========================
uint16_t getRaw(); // получить значение сырого сигнала за выборку
uint16_t getTrsh(); // получить порог громкости в единицах АЦП
// амплитудный анализ звука
#include "VolAnalyzer.h"
VolAnalyzer analyzer(A0);
void setup() {
Serial.begin(115200);
analyzer.setVolK(20);
analyzer.setTrsh(10);
analyzer.setVolMin(10);
analyzer.setVolMax(100);
}
void loop() {
if (analyzer.tick()) {
//Serial.print(analyzer.getVol());
//Serial.print(',');
Serial.print(analyzer.getRaw());
Serial.print(',');
Serial.print(analyzer.getMin());
Serial.print(',');
Serial.println(analyzer.getMax());
}
}
- v1.0
- v1.1 - более резкое падение при пропадании звука
- v1.2 - +совместимость. Вернул плавное падение звука
- v1.3 - новый обработчик импульсов
- v1.4 - улучшение алгоритма
- v1.5 - сильное облегчение и улучшение алгоритма
- v1.6 - более резкая реакция на звук
- v1.7 - исключено деление на 0 в map
- v1.8 - теперь работает с 12 бит АЦП
- v1.9 - облегчил SRAM
При нахождении багов создавайте Issue, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request'ов!
При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:
- Версия библиотеки
- Какой используется МК
- Версия SDK (для ESP)
- Версия Arduino IDE
- Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
- Какой код загружался, какая работа от него ожидалась и как он работает в реальности
- В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код