diff --git a/mic.py b/mic.py new file mode 100644 index 0000000..9b518f3 --- /dev/null +++ b/mic.py @@ -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