音声を可視化したい(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(静かな場合)。