Python 音声ファイルの周波数を取得する
前回はUSBマイクで録音した音声をwavファイルに保存したので今回はwavファイルの音声から周波数を取得します
こちらの記事をコピペ
Pythonで、Wave音源の周波数と音量(デシベル)を取得する方法[python音声解析 フーリエ変換 FFT]
import sys import wave import numpy as np import math # wavファイルを読み込む FLAME_SIZE = 100 wf = wave.open('./voice.wav', 'rb') frames = wf.getnframes() # フレーム数(サンプリング周波数*録音時間) framerate = wf.getframerate() # サンプリング周波数(今回は44.2kHz) wf.setpos(int(frames/2)) # 全フレームの真ん中に位置を移動 buf = wf.readframes(FLAME_SIZE) # セットした位置からFLAME_SIZEフレームを取得 wf.close() # 周波数を取得 data = np.frombuffer(buf, dtype= "int16") / 32768.0 spectrum = np.fft.fft(data) maxvalue = 0 maxidx = 0 tmpvalue = 0 flist = np.fft.fftfreq(FLAME_SIZE, d=1.0/44200) for j in range( int( len(spectrum) / 2 ) ): tmpvalue = spectrum[j] if tmpvalue > maxvalue: maxvalue = tmpvalue maxidx = j print( str(int(flist[maxidx])) + "Hz" )
FRAME_SIZE
は周波数を取得する音声データの範囲だと思うのですが、今回は442HzのAをハミングした音声を読み込んだのでどの範囲でも同じはず!
実行すると以下のように周波数が表示されます!こちらでチューニングして録音したのでピッタリですね!!
チューニングなしで録音したら1,768Hz(3オクターヴ上!?)と表示されてそんなテクニックはないので正確さには欠けるかもですね。。