PythonでWAVファイルを読み込む
音声信号処理を行う場合、大抵、数値列をWAVファイルから読み込むことになると思います。Python でそれを行う方法を2つ紹介します。
waveモジュールを使う
wave モジュールはその名の通り、WAVファイルを扱うためのモジュールです。WAVファイルの読み込みはこんな感じにします。# -*- coding: utf-8 -*- import wave from scipy import fromstring, int16 wavfile = "./test.wav" # WAVファイルを開く wr = wave.open(wavfile, "rb") # WAVファイルの情報を表示(別にいらん) print "Channel num : ", wr.getnchannels() print "Sample size : ", wr.getsampwidth() print "Sampling rate : ", wr.getframerate() print "Frame num : ", wr.getnframes() print "Prams : ", wr.getparams() print "Sec : ", float(wr.getnframes()) / wr.getframerate() # データの読み込み data = wr.readframes(wr.getnframes()) # 文字型から数値型に num_data = fromstring(data, dtype = int16) if (wr.getnchannels() == 2): # 左チャンネル left = num_data[::2] # 右チャンネル right = num_data[1::2] wr.close()
データを読み込んだら文字型で返ってくるので、数値に変換しています。
ステレオの場合、数値列は左右左右左右・・・みたいに左右チャンネルが交互に入ってるので、1つ置きに数値を取り出しています。
WAVファイルの情報を色々取ったりしています。
SciPyを使う
SciPy を使うとさらにシンプルにいけます。(上のもSciPy使ってるけど・。)自分はいつもこっちを使います。なんだかごちゃごちゃしていないので・・。# -*- coding: utf-8 -*- from scipy.io.wavfile import read wavfile = "./test.wav" fs, data = read(wavfile) print "Sampling rate :", fs if (data.shape[1] == 2): left = data[:, 0] right = data[:, 1]
ふむ、シンプル。