0

Python で Wave ファイルを書き込もうとして何時間も無駄にしました

私は Debian jessie を使用しており、両方のバージョンの Python がインストールされています。コマンドプロンプトに「python」と書くだけで、python 2.7.9が起動します

私がテストしていたコードはこれでした:

import wave

frame_rate = 44100
bit_depth = 16
bits_per_byte = 8
num_channels = 2

wOut = wave.open("out.wav","w")
wOut.setparams((num_channels, (bit_depth / bits_per_byte), frame_rate, (frame_rate * duration), 'NONE', 'not compressed'))

wOut.close()

そのコードを python 2.7.9 で実行すると、wave ヘッダーだけの健全な wav ファイルが得られます。Python 3.4.2 で同じコードを実行すると、次のエラーが発生します。

File "/usr/lib/python3.4/wave.py", line 433, in close
    self._ensure_header_written(0)
  File "/usr/lib/python3.4/wave.py", line 455, in _ensure_header_written
    self._write_header(datasize)
  File "/usr/lib/python3.4/wave.py", line 472, in _write_header
    self._sampwidth * 8, b'data'))
struct.error: required argument is not an integer

また、wave ファイルにはヘッダーの最初の 4 バイトのみが含まれます。

これがpython 3.4の問題であることを示すドキュメントをオンラインで見つけていないので、マルチバージョンのpythonインストールの問題であると推測しています。

多分私が持っているウェーブモジュールはpython 2.7専用ですか?この種の問題はこれが初めてではないと思います.2.7でのみ作業することを考えていますが、したくありません.

どんなヒットでも大歓迎です

4

2 に答える 2

2

sample_width を(bit_depth / bits_per_byte)Python 2 では整数、Python 3 では float に設定します。

Python 2 と 3 の両方で整数除算を使用するには、次を使用します。(bit_depth // bits_per_byte)

于 2015-12-19T19:09:45.887 に答える
2

デフォルトでfloordiv , (bit_depth // bits_per_byte), python2 フロアが必要です.floatint

wOut.setparams((num_channels, (bit_depth // bits_per_byte), frame_rate, (frame_rate * 12), 'NONE', 'not compressed'))
于 2015-12-19T19:10:11.430 に答える