pythonによる信号処理です。今回は音声信号から音量波形を求めます。
音声信号の音量の変化を見たい時はたまにあると思います。
計算には二乗平均平方根(RMS: root mean square)を用います。
音声信号をある程度の範囲で区切り、その部分部分でRMSを計算することで音量の変化を見ていきます。
音源はESC-50というデータセットからお借りしました。
データセットのリポジトリはこちら➡https://github.com/karolpiczak/ESC-50
hen(めんどり)のタグがついたファイルを借りました➡1-5996-A-6.wav
librosaを用いた音量計算
librosaの音量を計算する関数librosa.feature.rmsを用います。
rmsの引数を変更することでrmsを求める区間等を変更できます。
今回はデフォルトのままやっています。
1 2 3 4 5 6 7 8 9 |
import librosa import matplotlib.pyplot as plt if __name__ == "__main__": wave, fs = wav_read(path_to_wavefile) rms = librosa.feature.rms(y=wave) #音量の計算 times = librosa.times_like(rms, sr=fs) #時間軸の生成 plt.plot(times, rms[0]*2**(1/2)) #rms➡振幅に変換 plt.show() plt.close() |
結果は下のグラフです。
音量の変化が求められています。
また、人の音量の知覚は振幅の対数に比例するため、デシベルに変換したものもよく用いられます。
1 |
volume_db = 20 * np.log10(volume) |
こちらは以下のグラフのようになります。
音源を聞いてみると分かりますが直観的に感じます。
コメント