41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
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
|