PythonのWaveモジュールを使ってwavファイルを編集するの記事の以下のコードをコピペしたら、エラーが出てしまいました。
pywave.py
import wave
import struct
from scipy import fromstring, int16
# ファイルを読み出し
wavf = '/data/input/test.wav'
wr = wave.open(wavf, 'r')
# waveファイルが持つ性質を取得
ch = wr.getnchannels()
width = wr.getsampwidth()
fr = wr.getframerate()
fn = wr.getnframes()
print("Channel: ", ch)
print("Sample width: ", width)
print("Frame Rate: ", fr)
print("Frame num: ", fn)
print("Params: ", wr.getparams())
print("Total time: ", 1.0 * fn / fr)
# waveの実データを取得し、数値化
data = wr.readframes(wr.getnframes())
wr.close()
X = fromstring(data, dtype=int16)
threshold.py:25: DeprecationWarning: The binary mode of fromstring is deprecated, as it behaves surprisingly on unicode inputs. Use frombuffer instead
X = fromstring(data, dtype=int16)
fromstringはunicode入力のときに何かすごい挙動するからやめて、みたいな事のようです。そして、frombufferを使え、と。
調べてみると、frombufferはnumpyのメソッド(?)のようなので、importにnumpyを入れて、fromstringはnp.frombufferにします。
pywave.py
import numpy as np
import wave
import struct
# ファイルを読み出し
wavf = 'test.wav'
wr = wave.open(wavf, 'r')
# waveファイルが持つ性質を取得
ch = wr.getnchannels()
width = wr.getsampwidth()
fr = wr.getframerate()
fn = wr.getnframes()
print("Channel: ", ch)
print("Sample width: ", width)
print("Frame Rate: ", fr)
print("Frame num: ", fn)
print("Params: ", wr.getparams())
print("Total time: ", 1.0 * fn / fr)
# waveの実データを取得し、数値化
data = wr.readframes(wr.getnframes())
wr.close()
X = np.frombuffer(data, dtype=np.int16)
これで無事動きました。