5

私は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()
4

2 に答える 2

2

これを試して:

import StringIO

buffer = StringIO.StringIO(wav_buffer)
file = wave.open(buffer, 'r')
于 2010-06-16T08:56:17.997 に答える
2
buffer = StringIO.StringIO()
buffer.output(wav_buffer)

StringIO はそのようには機能しません。それ自体に接続されているのはパイプでread()はありませんwrite()。(output()そのような方法はないので、私が推測しているのはミスペーストであることを気にしないでください。)

代わりに、別個の読み取りパイプと書き込みパイプとして機能します。返されるコンテンツread()は、コンストラクターで渡されます。

buffer = StringIO.StringIO(wav_buffer)
file = wave.open(buffer, 'rb')

から収集されたコンテンツは、write()を通じて読み取ることができますgetvalue()

(これが起こっているため、バイナリ読み取りモードを使用しましたが、モジュールはモードをwave黙って変換します。)rrb

于 2010-06-16T08:57:23.247 に答える