JorenSix / Olaf

Olaf: Overly Lightweight Acoustic Fingerprinting is a portable acoustic fingerprinting system.
GNU Affero General Public License v3.0
326 stars 33 forks source link

ESP32 I2S Wifi Michropohne #55

Open galzoltan42 opened 2 months ago

galzoltan42 commented 2 months ago

My respect! You have this great project: https://0110.be/posts/ESP32_I2S_WiFi_Microphone , and I would like to ask if it is possible to do continuous reading of a UDP microphone in python? The code below does not work: (The phenomenon: a strong humming sound, the hum is stronger during speech)

`def udp_pcm_to_audio(data):

wav_io = io.BytesIO()
with wave.open(wav_io, 'wb') as wav_file:
    wav_file.setnchannels(1) 
    wav_file.setsampwidth(2) 
    wav_file.setframerate(44100) 
    wav_file.writeframes(data)
wav_io.seek(0)
return wav_io`

This works perfectly, so all ESP32, microphone, UDP settings are good: nc -l -u 3000 | ffmpeg -y -f f32le -ar 16000 -ac 1 -i pipe: microphone.wav

Thank you very much for your help!

JorenSix commented 1 month ago

Good to hear you find some use for it!

For the Python implementation you may need to make sure the correct wav format is used: in this case 16kHz, 32bit float samples, mono. Especially the 32bit float samples are a bit uncommon so this needs to be specified explicitly, otherwise a 32bit int might be used.

In your code you set the sample rate to 44.1kHz while it should be 16kHz. Also the sample format should be checked: make sure you use 32bit float with the wave.open API.