音声を可視化したい(3)

通勤途中に録音した、道路沿いの音をグラフにしてみる。
トラックが頻繁に通っているとき(サンプル1)と、車の音がほとんど聞こえない公園内(サンプル2)の音を記録した。携帯で録音するとamrという拡張子の音声ファイルになる。このファイルをwavファイルに変換した。

Pythonのwaveモジュールで音声ファイルを読み込んで、matplotlibでグラフにする。スクリプトは以下の通り。

import numpy as np
import matplotlib.pyplot as plt
import wave

wf1 = wave.open("noise01.wav", "r")
wf2 = wave.open("noise02.wav", "r")
nframe1 = wf1.getnframes()
rframe1 = wf1.getframerate()
nframe2 = wf2.getnframes()
rframe2 = wf2.getframerate()

buf1 = wf1.readframes(nframe1)
buf2 = wf2.readframes(nframe2)

y1 = np.frombuffer(buf1, dtype="int16")
t1 = np.arange(0, len(y1)) / float(rframe1)
y2 = np.frombuffer(buf2, dtype="int16")
t2 = np.arange(0, len(y2)) / float(rframe2)

plt.subplot(211)
plt.plot(t1, y1, 'r')
plt.xlabel('Time [sec]')
plt.axis([0, 20, -4000, 4000])

plt.subplot(212)
plt.plot(t2, y2, 'r')
plt.xlabel('Time [sec]')
plt.axis([0, 20, -4000, 4000])

plt.show()

wf1.close()
wf2.close()

readframesしたとき何が返るのか悩みつつ、試行錯誤の末、両サンプルのグラフが描けた。横軸は秒。

上がサンプル1(うるさい場合)。下がサンプル2(静かな場合)。