diff options
author | Anthony Wang | 2022-10-03 13:56:46 -0400 |
---|---|---|
committer | Anthony Wang | 2022-10-03 13:56:46 -0400 |
commit | 62ceacf10980ef96b1a227d76cdf3e7db82fd4de (patch) | |
tree | c49f911292581748753f86cfa0230cf81d9d7cff | |
parent | b18d63a602010fb81b14b53f1bac26af42a0155e (diff) |
Add mic to beeper script
-rw-r--r-- | mic.py | 40 |
1 files changed, 40 insertions, 0 deletions
@@ -0,0 +1,40 @@ +import numpy as np +import pyaudio +from requests import get + +audio = pyaudio.PyAudio() +stream = audio.open( + format = pyaudio.paInt16, + channels = 1, + rate=44100, + input=True +) + +# https://stackoverflow.com/questions/45908268/how-to-know-the-frequency-of-audio-from-microphone +# https://stackoverflow.com/questions/3694918/how-to-extract-frequency-associated-with-fft-values-in-pytho +curfreq = 0 +stop = False + +while True: + chunk = stream.read(2048) + w = np.fft.fft(list(chunk))[10:100] + f = np.fft.fftfreq(4196) + i = 10+np.argmax(np.abs(w)) + mag = abs(w[i-10]) + freq = abs(2 * f[i] * 44100) + + if mag > 50000 and curfreq == 0: + # Detected mic input + # Start new freq + stop = False + curfreq = freq + print('Starting', curfreq) + get('http://10.242.6.228:5000/startfreq/' + str(curfreq)) + elif mag <= 50000 or abs(curfreq-freq) > 20: + if stop and curfreq != 0: + print('Stopping', curfreq) + get('http://10.242.6.228:5000/stopfreq/' + str(curfreq)) + curfreq = 0 + else: + # Stop next round + stop = True |