我正在尝试使用wave模块在 python 中读取 wav 文件。
我的应用程序不典型的是我没有使用文件或文件名来读取 wav 文件,而是将 wav 文件放在缓冲区中。
这就是我正在做的
import StringIO
buffer = StringIO.StringIO()
buffer.output(wav_buffer)
file = wave.open(buffer, 'r')
但是EOFError
当我运行它时我得到了...
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/wave.py", line 493, in open
return Wave_read(f)
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/wave.py", line 163, in __init__
self.initfp(f)
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/wave.py", line 128, in initfp
self._file = Chunk(file, bigendian = 0)
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/chunk.py", line 63, in __init__
raise EOFError
我知道这些StringIO
东西适用于创建 wav 文件,我尝试了以下方法并且它有效
import StringIO
buffer = StringIO.StringIO()
audio_out = wave.open(buffer, 'w')
audio_out.setframerate(m.getRate())
audio_out.setsampwidth(2)
audio_out.setcomptype('NONE', 'not compressed')
audio_out.setnchannels(1)
audio_out.writeframes(raw_audio)
audio_out.close()
buffer.flush()
# these lines do not work...
# buffer.output(wav_buffer)
# file = wave.open(buffer, 'r')
# this file plays out fine in VLC
file = open(FILE_NAME + ".wav", 'w')
file.write(buffer.getvalue())
file.close()
buffer.close()