複数マイクで録音したWAVの音ズレ解消
複数のマイクで録音した音源を後で重ねたくなったので、pythonでDTW(伸縮させてないよ)したことをまとめた。
結果は・・・聞きやすくなるといったところか(少し処理に時間がかかるが)
今回の問題の要点は
・人の声がメイン
・人の声がメインだが、一定区間誰も喋らないときもある
・ 録音したWAV1とWAV2のデータがあるが、録音開始時間がズレていてかつ、録音内容は被っている。
・同じ音でもWAV1で音が大きくて、WAV2で音が小さい場合もある。
・全体的にも計測でき、局所的にも音ズレ計測を可能にしたい。
こういう場合に
こうしたい
fastDTWライブラリを使用させてもらった。
fastdtw([1,2,3],[2,4,6])とすると、
1 + 4+ 9 = 13→距離が13ある!
みたいな感じに計算してくれる。
2つのWAVをそれぞれ千切ってfastdtwで比べて、一番小さいところを把握するとズレがわかりそう。しかし全部計算していると小さなシャ〜という音を比べることになり、dtwしてもうまくいかないことがわかった。録音マイクの位置が離れていたりすると、デシベル単位にごにょごにょ、周波数にしたりとか面倒くさそうだったので、切り取った部分同士をRMS計算し、minmaxで規格化してDTWすることにした。他にもルールをいくつか設けた。以下まとめ
ルール
・ 全体の音圧75%以上のラインより上であれば人が喋っている区間に近いとみなし、そこを計算する。細かい音は気にしない
np.percentile(librosa.feature.rms(y=wav, frame_length=int(4096)), [75])
・ 比べる音声チャンクrmsリスト両方min_max規格化
・ 音ズレの誤検出に対する耐性をつける
・前後何秒分までズレを調べるか決めておく。(prev_seconds, next_seconds)
といったルールや仕組みでざっくりコーディングしてみた。結果。。。まぁまぁうまくいった。。。
Colabにまとめておいたよ
https://colab.research.google.com/drive/1TJIS-iH4NG7y8Klnkj_2UBy1kkTSufhM
この記事が気に入ったらサポートをしてみませんか?