我有一个二进制格式的.wav文件列表(这些文件来自websocket),我想把它们合并成一个单一的二进制.wav文件,然后对其进行语音识别。我已经使用以下代码使其正常工作:
audio = [binary_wav1, binary_wav2,..., binary_wavN] # a list of .wav binary files coming from a socket
audio = [io.BytesIO(x) for x in audio]
# Join wav files
with wave.open('/tmp/input.wav', 'wb') as temp_input:
params_set = False
for audio_file in audio:
with wave.open(audio_file, 'rb') as w:
if not params_set:
temp_input.setparams(w.getparams())
params_set = True
temp_input.writeframes(w.readframes(w.getnframes()))
# Do speech recognition
binary_audio = open('/tmp/input.wav', 'rb').read())
ASR(binary_audio)
问题在于我不想在磁盘上写入文件
'/tmp/input.wav'
。有没有任何方法可以在不在磁盘上写入任何文件的情况下完成此操作?谢谢。
wave.open
可以接受文件路径或类文件对象。由于您已经导入了BytesIO
,因此只需将其中一种用作文件缓冲区即可。这里有一个人用gzip
做了基本上相同的事情(注意略有不同的参数名称)。 - Aaron