Pythonでwavファイルを読み込む

PythonでSciPyを使って音声ファイル(wavファイル)を読み込んでみます。読み込んだデータはnumpy.arrayになります。

目次

  1. scipy.io.wavfile.readメソッド
  2. wavファイル読み込み例

scipy.io.wavfile.readメソッド

from scipy.io.wavfile import read

rate, data = read(filename, [mmap])
変数 内容
filename ファイル名。
mmap 省略可。規定値はFalse。
rate 音声データのサンプリング周波数。int。
data 音声データとデータタイプのnumpy.array。

読み込んだデータのデータタイプは、元の音声ファイルのフォーマットによって変わります。 例えば、CDなどで使われる16bit PCMを読み込んだ場合はint16になります。

wavファイル読み込み例

GarageBandで適当に作ったwavファイルがあります。音声データのフォーマットは、44.1kHzの16 bit PCMです。いわゆる一般的なCD音質です。

この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)
>>>

警告が出てます。SciPyがwavファイルのチャンク読み取れなくて、スキップしたようです。データじゃないようなので、大丈夫かな?

サンプリング周波数は44100Hz、つまり44.1kHzですね。データはdtype=int16のarrayになっています。

読み込んだデータを表示してみましょう。

>>> from matplotlib import pyplot as plt
>>> plt.plot(data)
[<matplotlib.lines.Line2D object at 0x11e974390>, <matplotlib.lines.Line2D object at 0x11e974550>]
>>> plt.show()
音声データの図

こんな感じで読み込まれています。

広告

Pythonカテゴリの投稿