読者です 読者をやめる 読者になる 読者になる

pythonでwaveファイルを扱おう

python signal processing

今回は音声ファイルの王道のwaveファイルをpythonで扱ってみましょう。
早速コードを見ながら行きましょう。

#waveファイルを扱うためのモジュールをimport
import wave

#音声ファイルを開く
fWave = wave.open('filename.wav', 'rb') #'rb'は読み込み専用

#音声ファイルのプロパティーを取得
fs = fWave.getframerate()      #フレームレート
n = fWave.getnframes()         #総フレーム数
channel = fWave.getnchannels() #チャンネル数

#データを取得するスタート時間と何秒分取得するかを指定
start = 100  #100秒をスタート時間とする
length = 200 #200秒間

#スタート時間からスタートフレームを計算し、その位置へ移動
n_frames = int(start * fs)
fWave.setpos(n_frames)

#データの取得
n_frames = int(length * fs)
Data = fWave.readframes(n_frames)

#データの型を変換する
import numpy as np
Data = np.frombuffer(Data, dtype='int16') / 32768.0 #-1.0 ~ 1.0に正規化する

以上のような感じでwaveファイルを読み込むことができます。
簡単に説明すると、wavファイルを読み書きする専用のwaveというモジュールがあります。
データを取得するときは最初の位置とどのくらいの長さの音声データを取得するかを与えれば、データを取得できます。
またそのデータはバイナリで書かれているので、実際にデータを扱う際は、データの型を変換してあげる必要があります。
もしスタート位置を指定しなければ、スタート位置はデフォルトで0に設定され、データを取得した分だけ、スタート位置がずれていくようになっています。