Skip to content

Библиотека для амплитудного анализа звука на Arduino

License

Notifications You must be signed in to change notification settings

GyverLibs/VolAnalyzer

Repository files navigation

latest PIO Foo Foo Foo

Foo

VolAnalyzer

Библиотека для амплитудного анализа звука на 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
  • Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
  • Какой код загружался, какая работа от него ожидалась и как он работает в реальности
  • В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код

About

Библиотека для амплитудного анализа звука на Arduino

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages