All Projects → bobh → ESP32AudioFramework

bobh / ESP32AudioFramework

Licence: MIT License
Dual core concurrent multi-task processing of continuous real-time audio on the ESP-32

Programming Languages

C++
36643 projects - #6 most used programming language

Projects that are alternatives of or similar to ESP32AudioFramework

OneWire
Library for Dallas/Maxim 1-Wire Chips
Stars: ✭ 32 (-8.57%)
Mutual labels:  esp32, esp32-arduino
esp32-internet-ota
ESP32 + GitHub Actions + Husarnet. A boilerplate project for ESP32 allowing in-field firmware update using GitHub Actions workflow.
Stars: ✭ 28 (-20%)
Mutual labels:  esp32, esp32-arduino
OctoWifi-LEDs-Controller
LEDs driver for ESP32 ( support ART-NET, RGB888, RGB565, Z888 )
Stars: ✭ 16 (-54.29%)
Mutual labels:  esp32, esp32-arduino
ESP DoubleResetDetector
ESP_DoubleResetDetector is a library for the ESP32/ESP8266 Arduino platform to enable trigger configure mode by resetting twice.
Stars: ✭ 34 (-2.86%)
Mutual labels:  esp32, esp32-arduino
M5Stack-Air-Quality-ESPHome
ESPHome configuration for M5Stack's PM2.5 Air Quality Kit with the PMSA003 particulate matter sensor and the SHT20 temperature and humidity sensor
Stars: ✭ 19 (-45.71%)
Mutual labels:  esp32, esp32-arduino
esp32-i2s-mems
Using an I2S MEMS microphone on an ESP32
Stars: ✭ 103 (+194.29%)
Mutual labels:  esp32, esp32-arduino
NeoGB-Printer
An open-source and standalone Gameboy Printer emulator 100% compatible with all officially released games (110 in total) that support the accessory. Just print and save the images as BMP
Stars: ✭ 61 (+74.29%)
Mutual labels:  esp32, esp32-arduino
esp32WS2811
Arduino library for ESP32 to drive WS2811 LEDs using the RMT peripheral
Stars: ✭ 22 (-37.14%)
Mutual labels:  esp32, esp32-arduino
TinyPixelMapper
a Pixelmapping software for the ESP32 and ESP8266 for addressible LED Strips, with a OSC controll interface and FFT
Stars: ✭ 22 (-37.14%)
Mutual labels:  esp32, esp32-arduino
esp32FOTA
Experiments in firmware OTA updates for ESP32 dev boards
Stars: ✭ 185 (+428.57%)
Mutual labels:  esp32, esp32-arduino
ESP-Alerts-for-Android
Send Android Notifications to an ESP32 with OLED display
Stars: ✭ 42 (+20%)
Mutual labels:  esp32, esp32-arduino
esp-rgb-led-matrix
Full RGB LED matrix, based on an ESP32 and WS2812B LEDs.
Stars: ✭ 91 (+160%)
Mutual labels:  esp32, esp32-arduino
ESP-StepperMotor-Server
Turn your ESP32 into a complete stepper motor control server with web UI, REST API and serial control interface
Stars: ✭ 133 (+280%)
Mutual labels:  esp32, esp32-arduino
esptool
esptool.py replacement written in #golang
Stars: ✭ 18 (-48.57%)
Mutual labels:  esp32, esp32-arduino
ReactESP
An asynchronous programming library for the ESP32 and other microcontrollers using the Arduino framework.
Stars: ✭ 26 (-25.71%)
Mutual labels:  esp32, esp32-arduino
wifiaudio-tx-firmware
ESP32 based wifi auio transmitter firmware
Stars: ✭ 31 (-11.43%)
Mutual labels:  esp32, esp32-arduino
ESPHome-Air-Quality-Monitor
ESPHome configuration for a DIY indoor air quality monitor for CO₂ concentration, PM2.5 and PM10 concentrations, and temperature, humidity and pressure
Stars: ✭ 42 (+20%)
Mutual labels:  esp32, esp32-arduino
esp32cam-ready
Plug and Play firmware for the esp32cam. Flash, provision and connect to rtsp.
Stars: ✭ 67 (+91.43%)
Mutual labels:  esp32, esp32-arduino
Farm-Data-Relay-System
A system that uses ESP-NOW, LoRa, and other protocols to transport sensor data in remote areas without relying on WiFi.
Stars: ✭ 97 (+177.14%)
Mutual labels:  esp32, esp32-arduino
chat21-ionic
A ionic v5 and Angular 8 desktop and mobile chat
Stars: ✭ 69 (+97.14%)
Mutual labels:  realtime

Dual Core Audio Framework for ESP32

Proof Of Concept Demos: Dual core concurrent multi-task processing of continuous real-time audio on the ESP-32.

Tested on Espressif ESP32 Dev board Rev. 1 silicon

Arduino IDE with the ESP32 core from espressif

ADC/DAC sample processing at 8Ksps for voice audio range (< 4KHz). Not suitable for music as is.

Core 1 -- Sample Service

Core 0 -- Application Processor

Cores use alternating ping-pong buffers to pass samples between them every N samples. Tasks synchronize on a "FrameAvailable" semaphore.

Frame processing runs every N samples on the Application Processor. The Frame processing technique introduces latency delay (audio input to output).

Concurrency examples include:

  • Continuous sine wave
  • Dual tone (frequencies re-create old telephone dial tone)
  • Continuous phase frequency sweep test signal (300--3000 Hz in 5 sec.,repeated)
  • Microphone talk-through
  • Pink Noise example from portaudio.com
  • Voice Alert Example

I'll add more Digital Signal Processing examples to test the limits of this framework. And maybe find some optimizations.

bobolink twitter: @wm6h


ref: esp32 arduino ide https://github.com/espressif/arduino-esp32

Sensorsslot's ESP32 Arduino IDE Dual core multi-tasking intro: YouTube video: https://www.youtube.com/watch?v=k_D_Qu0cgu8 http://esp32.info/docs/esp_idf/html/dd/d3c/group__xTaskCreate.html

some watchdog info: https://github.com/espressif/arduino-esp32/issues/595

You can do Digital Filtering with a MCU YouTube https://www.youtube.com/watch?v=k0LHp6jtHA8

High-Voltage Signal Conditioning for Low-Voltage ADCs http://www.ti.com/lit/an/sboa097b/sboa097b.pdf

Audio Out Circuit.

The PAM 8403 uses 5VDC from the ESP-32 Dev Board. Output is on DAC1 GPIO pin 25 of the ESP32 No DAC re-construction filter is used. Some aliasing on the sweep app is heard at high volume. Maybe a re-construction at the DAC output would help.

Audio In circuit: SparkFun Electret Microphone Breakout BOB-12758 https://www.sparkfun.com/products/12758 It has a freq. response to 10KHz and we sample at 8Ksps so a pole is added to its response to turn it into a 1st order (20 dB/Decade power drop-off) anti-aliasing filter (LPF) with 4KHz cutoff Add a 47pF cap across R5 (820K). From JP1-3 to U1-4 is easier. We would like a 2nd order filter here (40 dB/Decade power drop-off). https://cdn.sparkfun.com/datasheets/BreakoutBoards/Electret_Microphone_Breakout_v20.pdf

note: this circuit could be avoided by sampling at 16Ksps

mic audio is on analogRead(34) ADC_WIDTH_9Bit to more or less match the DAC 8 bits. An ADC_ATTEN_11db pad is set in order to run the mic at 3.3 Volts

3/10/18 Pink Noise example from portaudio.com modified for ESP32 Audio Framework. Statistics haven't been verified with spectrum analyzer.

3/15/18 modified sine generator with nkolban's BLE library. Select freq of sine over BLE (30-3000 Hz UTF-8 unsigned int string < 5 chars). https://youtu.be/MGNU7COFlT4

3/21/18 Voice Alert example. Audio samples stored as an array in the source. File edited in Audacity (Audacity.com) and saved as mono, 8Ksps, signed 16-bit PCM Microsoft WAV file. Converted to C source with xxd -i fn.wav fn.c

3/24/18 Project completed and Summary.md posted.

BlockDiagram

ESP32_AudioFramework

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].