とある科学の備忘録

とある科学の備忘録

CやPythonのプログラミング、Arduino等を使った電子工作をメインに書いています。また、木製CNCやドローンの自作製作記も更新中です。たまに機械学習とかもやってます。

【Python】Pyaudioで.wavファイルを読み込みグラフに表示(FFTもやってみた)

今回は、Pythonを使って.wavファイルの波形表示をしてみます。

サンプルプログラム

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

def ReadWavFile(FileName = "sample.wav"):
    try:
        wr = wave.open(FileName, "r")
    except FileNotFoundError: #ファイルが存在しなかった場合
        print("[Error 404] No such file or directory: " + FileName)
        return 0
    data = wr.readframes(wr.getnframes())
    wr.close()
    x = np.frombuffer(data, dtype="int16") / float((2^15))

    #音声波形表示
    plt.figure(figsize=(15,3))
    plt.plot(x)
    plt.show()
    

    #--------------------------------------------------------------------------
    #        おまけ:numpyで高速フーリエ変換して、グラフ表示
    #--------------------------------------------------------------------------
    x = np.fft.fft(np.frombuffer(data, dtype="int16"))
    plt.figure(figsize=(15,3))
    plt.plot(x.real[:int(len(x)/2)])
    plt.show()
    
if __name__ is "__main__":
    ReadWavFile("sample.wav") 



実行結果

このような波形が表示されます。

音声波形
f:id:pythonjacascript:20181231150132j:plain

高速フーリエ変換した波形
f:id:pythonjacascript:20181231150125j:plain