98138a02e3
* audioreactive driver update - Better handling of PDM and I2S Line-in - Bugfixes for ES7243 (allocateMultiplePins) - More error messages for ES7243 - sample scaling (needed for sources that use full scale of samples) * audiorective update * align SR_DEBUG with WLED_DEBUG * optional bandpass filter (needed for PDM mics) * sample scaling for PDM and Line-In * small improvements for analog input * bugfixes and small performance improvements * code for FFT task refactored, for better readablity. Introduces separate functions for filtering and post-processing * small improvement for beat detection * default mic settings can be configured at compile time * correct mic type if MCU does not support PDM or ADC * hide analog PIN config if not supported by MCU * audioreactive updates - minor updates to source code (see discussion in PR #2907) - usermod readme improvements * small readme update * one think I overlooked * ok, another edit. Now its final. Hopefully. * small upps wrong parameter order in debug message.
74 lines
5.0 KiB
Markdown
74 lines
5.0 KiB
Markdown
# Audioreactive usermod
|
|
|
|
This usermod allows controlling LEDs using audio input. Audio input can be either microphone or analog-in (AUX) using appropriate adapter.
|
|
Supported microphones range from cheap analog (MAX4466, MAX9814, ...) to high quality digital (INMP441, ICS-43434, ...) and dgital Line-In.
|
|
|
|
The usermod does audio processing and provides data structure that specially written effect can use.
|
|
|
|
The usermod **does not** provide effects or draws anything to LED strip/matrix.
|
|
|
|
## Additional Documentation
|
|
This usermod is an evolution of [SR-WLED](https://github.com/atuline/WLED), and a lot of documentation and information can be found in the [SR-WLED wiki](https://github.com/atuline/WLED/wiki):
|
|
* [getting started with audio](https://github.com/atuline/WLED/wiki/First-Time-Setup#sound)
|
|
* [Sound settings](https://github.com/atuline/WLED/wiki/Sound-Settings) - similar to options on the usemod settings page in WLED.
|
|
* [Digital Audio](https://github.com/atuline/WLED/wiki/Digital-Microphone-Hookup)
|
|
* [Analog Audio](https://github.com/atuline/WLED/wiki/Analog-Audio-Input-Options)
|
|
* [UDP Sound sync](https://github.com/atuline/WLED/wiki/UDP-Sound-Sync)
|
|
|
|
|
|
## Supported MCUs
|
|
This audioreactive usermod works best on "classic ESP32" (dual core), and on ESP32-S3 which also has dual core and hardware floating point support.
|
|
|
|
It will compile succesfully for ESP32-S2 and ESP32-C3, however might not work well, as other WLED functions will become slow. Audio processing requires a lot of computing power, which can be problematic on smaller MCUs like -S2 and -C3.
|
|
|
|
Analog audio is only possible on "classic" ESP32, but not on other MCUs like ESP32-S3.
|
|
|
|
Currently ESP8266 is not supported, due to low speed and small RAM of this chip.
|
|
There are however plans to create a lightweight audioreactive for the 8266, with reduced features.
|
|
## Installation
|
|
|
|
### using customised _arduinoFFT_ library for use with this usermod
|
|
Add `-D USERMOD_AUDIOREACTIVE` to your PlatformIO environment `build_flags`, as well as `https://github.com/blazoncek/arduinoFFT.git` to your `lib_deps`.
|
|
If you are not using PlatformIO (which you should) try adding `#define USERMOD_AUDIOREACTIVE` to *my_config.h* and make sure you have _arduinoFFT_ library downloaded and installed.
|
|
|
|
Customised _arduinoFFT_ library for use with this usermod can be found at https://github.com/blazoncek/arduinoFFT.git
|
|
|
|
### using latest (develop) _arduinoFFT_ library
|
|
Alternatively, you can use the latest arduinoFFT development version.
|
|
ArduinoFFT `develop` library is slightly more accurate, and slighly faster than our customised library, however also needs additional 2kB RAM.
|
|
|
|
* `build_flags` = `-D USERMOD_AUDIOREACTIVE` `-D UM_AUDIOREACTIVE_USE_NEW_FFT`
|
|
* `lib_deps`= `https://github.com/kosme/arduinoFFT#develop @ 1.9.2`
|
|
|
|
## Configuration
|
|
|
|
All parameters are runtime configurable though some may require hard boot after change (I2S microphone or selected GPIOs).
|
|
|
|
If you want to define default GPIOs during compile time use the following addtional build_flags (default values in parentheses):
|
|
|
|
- `-D SR_DMTYPE=x` : defines digital microphone type: 0=analog, 1=generic I2S (default), 2=ES7243 I2S, 3=SPH0645 I2S, 4=generic I2S with master clock, 5=PDM I2S
|
|
- `-D AUDIOPIN=x` : GPIO for analog microphone/AUX-in (36)
|
|
- `-D I2S_SDPIN=x` : GPIO for SD pin on digital microphone (32)
|
|
- `-D I2S_WSPIN=x` : GPIO for WS pin on digital microphone (15)
|
|
- `-D I2S_CKPIN=x` : GPIO for SCK pin on digital microphone (14)
|
|
- `-D MCLK_PIN=x` : GPIO for master clock pin on digital Line-In boards (-1)
|
|
- `-D ES7243_SDAPIN` : GPIO for I2C SDA pin on ES7243 microphone (-1)
|
|
- `-D ES7243_SCLPIN` : GPIO for I2C SCL pin on ES7243 microphone (-1)
|
|
|
|
**NOTE** Due to the fact that usermod uses I2S peripherial for analog audio sampling, use of analog *buttons* (i.e. potentiometers) is disabled while running this usermod with analog microphone.
|
|
|
|
### Advanced Compile-Time Options
|
|
You can use the following additional flags in your `build_flags`
|
|
* `-D SR_SQUELCH=x` : Default "squelch" setting (10)
|
|
* `-D SR_GAIN=x` : Default "gain" setting (60)
|
|
* `-D I2S_USE_RIGHT_CHANNEL`: Use RIGHT instead of LEFT channel (not recommended unless you strictly need this).
|
|
* `-D I2S_USE_16BIT_SAMPLES`: Use 16bit instead of 32bit for internal sample buffers. Reduces sampling quality, but frees some RAM ressources (not recommended unless you absolutely need this).
|
|
* `-D I2S_GRAB_ADC1_COMPLETELY`: Experimental: continously sample analog ADC microphone. Only effective on ESP32. WARNING this _will_ cause conflicts(lock-up) with any analogRead() call.
|
|
* `-D MIC_LOGGER` : (debugging) Logs samples from the microphone to serial USB. Use with serial plotter (Arduino IDE)
|
|
* `-D SR_DEBUG` : (debugging) Additional error diagnostics and debug info on serial USB.
|
|
|
|
## Release notes
|
|
|
|
* 2022-06 Ported from [soundreactive WLED](https://github.com/atuline/WLED) - by @blazoncek (AKA Blaz Kristan) and the [SR-WLED team](https://github.com/atuline/WLED/wiki#sound-reactive-wled-fork-team).
|
|
* 2022-11 Updated to align with "[MoonModules/WLED](https://amg.wled.me)" audioreactive usermod - by @softhack007 (AKA Frank Möhle).
|