import numpy as np import pyaudio from requests import get audio = pyaudio.PyAudio() stream = audio.open( format = pyaudio.paInt16, channels = 1, rate=200000, 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-python playingfreq = 0 lastfreq = 0 while True: chunk = stream.read(10000) w = np.fft.fft(list(chunk))[10:200] f = np.fft.fftfreq(20000) i = 10+np.argmax(np.abs(w)) mag = abs(w[i-10]) freq = abs(2 * f[i] * 200000) if mag <= 200000: freq = 0 print(freq) if playingfreq != 0 and abs(freq-playingfreq) > 20 and abs(lastfreq-playingfreq) > 20: # Stop playing print('Stopping', playingfreq) get('http://10.242.6.228:5000/stopfreq/' + str(playingfreq)) playingfreq = 0 if freq != 0 and playingfreq == 0 and abs(freq-lastfreq) <= 20: # Nothing playing and freq matches last freq print('Starting', freq) get('http://10.242.6.228:5000/startfreq/' + str(freq)) playingfreq = freq lastfreq = freq