aboutsummaryrefslogtreecommitdiff
path: root/mic.py
blob: 9b518f3c9d28e5d36b5b33f42f8710b088fbb0ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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