Pythonでwavファイルを書き出す

PythonでSciPyを使ってwavファイルを書き出してみます。元のデータはnumpy.arrayです。

目次

  1. scipy.io.wavfile.writeメソッド
  2. wavファイルの書き出し例

scipy.io.wavfile.writeメソッド

from scipy.io.wavfile import write

write(filename, rate, data)
変数 内容
filename stringまたは開いたファイル 出力先のファイル。
rate int サンプリング周波数。
data ndarray 音声データ。

ndarrayのdtypeによって、出力するwavデータのフォーマットが変わります。例えば、int16なら16bitのPCMになります。

wavファイルの書き出し例

GarageBandで作った適当な音声データ(ステレオ)のwavファイルを読み込んで、片側のチャンネルの出力を0にしたwavファイルを作ってみます。

まずは、加工の元になるデータを読み込みます。

>>>from scipy.io.wavfile import read
>>> rate, data = read('test.wav')
/usr/local/var/pyenv/versions/3.6.5/lib/python3.6/site-packages/scipy/io/wavfile.py:273: WavFileWarning: Chunk (non-data) not understood, skipping it.  WavFileWarning)
>>> rate
44100
>>> data
array([[ 7812,  7812],
       [14819, 14819],
       [20809, 20809],
       ...,
       [    0,     0],
       [    0,     0],
       [    0,     0]], dtype=int16)

警告は無視します。

rateという変数にサンプリング周波数が、dataという変数にデータが読み込まれました。

読み込んだデータは書き込み禁止になっているので、arrayの属性を書き込み可に変更します。それから、2列目の要素の値を全てゼロにします。

>>> data.flags.writeable = True
>>> data[:,1] = 0
>>> data
array([[ 7812,     0],
       [14819,     0],
       [20809,     0],
       ...,
       [    0,     0],
       [    0,     0],
       [    0,     0]], dtype=int16)

各行の2列目の要素が、全て0になりました。

このデータをout.wavというファイルに書き出します。

>>> from scipy.io.wavfile import write
>>> write('out.wav', rate, data)

これでout.wavというファイルが出力されます。

このout.wavというファイルをPCで再生すると、左側のスピーカーだけから音声が出力されます。

広告

Pythonカテゴリの投稿