OSError: [Errno -9981] Переполненный входной поток pyaudio - PullRequest
0 голосов
/ 29 октября 2019

У меня есть живой микрофон с использованием pyaudio, который я использую в модели машинного обучения. Он принимает входной сигнал с микрофона, преобразует его в мельспектрограмму и сохраняет снимок мельспектрограммы после нескольких кадров в виде JPG, который затем отправляется через модель ML.

Я могу только заставить программу посылать 1 jpg через модель до остановки потока.

Как я могу делать это постоянно?

rate = 32000
CHUNK = rate // 4

def Processing(stream):

frames = []

fig = plt.figure(figsize=(10, 4))
do_melspec = librosa.feature.melspectrogram
pwr_to_db = librosa.core.power_to_db


while True:

    start = time.time()
    data = stream.read(CHUNK)
    data = np.fromstring(data, dtype=np.float32)

    melspec = do_melspec(y=data, sr=rate, n_mels=256, fmax=16000)
    norm_melspec = pwr_to_db(melspec, ref=np.max) 
    frames.append(norm_melspec)

    if len(frames) == 20:
    #converts to mel spectrogram then JPG then JPG through model

if __name__=="__main__":
    p=pyaudio.PyAudio()
stream=p.open(format=pyaudio.paFloat32,channels=1,
rate=rate,input=True,
              output=True, 
input_device_index=0,frames_per_buffer=CHUNK)
for i in range(sys.maxsize**10):
    Processing(stream)
stream.stop_stream()
stream.close()
p.terminate()
...