我有一个输入溢出的问题,但我不知道如何处理它。下面是我的代码和解释:
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT, channels=1, rate=SAMPLERATE, input_device_index=chosen_device_index, input=True, frames_per_buffer=CHUNK)
frames = []
for i in range(0, int(SAMPLERATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
decoded = np.frombuffer(data, 'int16')
mfcc_feat = mfcc(decoded, samplerate=SAMPLERATE/3, winlen=WINDOW_SIZE, winstep=WINDOW_STEP, nfft=NFFT)
if len(frames) < 299:
frames.append(mfcc_feat)
elif len(frames) >= 299:
predict_test = tf.convert_to_tensor(frames)
result = model.predict(predict_test)
frames = []
frames.append(mfcc_feat)
stream.stop_stream()
stream.close()
p.terminate()
基本上,我的操作是使用已训练的tensorflow模型对实时生成的音频特征进行预测。
首先我打开一个流。然后我使用for循环在该流中读取音频数据。当采样率为48000且块大小为192时,每秒恰好250次发生此情况。 因此,每秒钟我会读入下一个块,使用
numpy.frombuffer
解码它,然后计算特征。特征存储在数组frames
中。每次frames
数组的长度都为299
,我将使用此数组进行预测。这里的问题是:
由于
for
循环每秒迭代250次,每次迭代有0.004
秒的时间来完成,否则,流的输入将溢出(data = stream.read(CHUNK)
)。当我只在每个迭代中计算特征时,这比0.004秒更快,并且输入不会溢出。由于模型预测需要超过0.004秒,因此输入会溢出。我该怎么做才能使我的模型预测在每299个迭代步骤中完成,而不让下一个for循环迭代等待呢?