音声ファイルの周波数を解析し、平均と全体の分散を求めたいのですが、正しい平均の求め方がわかりません。
現在は周波数*振幅の平均を取る形で行なっているのですが、正しいのでしょうか?
python
1sound = AudioSegment.from_file(audio_path, format='mp3') 2 3# 情報の取得 4time = sound.duration_seconds # 再生時間(秒) 5rate = sound.frame_rate # サンプリングレート(Hz) 6channel = sound.channels # チャンネル:mono(1)/stereo(2) 7 8 9# 曲の最初4秒を切り取る 10stime=0 11etime=seg_point_list[0]*4+4 12 13sound1 = sound[stime*1000:etime*1000] 14sound1.export("tmp.wav", format="wav") 15 16 17data,rate = librosa.load('tmp.wav') 18 19 20#(振幅)の配列を作成 21data = data / 32768 22 23##### 周波数成分を表示する ##### 24#縦軸:dataを高速フーリエ変換する(時間領域から周波数領域に変換する) 25fft_data = np.abs(np.fft.fft(data)) 26#横軸:周波数の取得 #np.fft.fftfreq(データ点数, サンプリング周期) 27freqList = np.fft.fftfreq(data.shape[0], d=1.0/rate) 28#データプロット 29plt.plot(freqList, fft_data) 30plt.xlim(0, 8000) #0~8000Hzまで表示 31plt.show() 32 33 34positive_freq = freqList[:44100] 35positive_fft = fft_data[:44100] 36 37 38mean = statistics.mean(positive_freq*positive_fft) 39mean 40#OUT:0.16214748943907212
また現在ほとんど鳴っていない周波数域の値も利用しているのですが、閾値を設けて鳴っている周波数のみを利用した方がよろしいのでしょうか?
あなたの回答
tips
プレビュー