見出し画像

複数マイクで録音したWAVの音ズレ解消

複数のマイクで録音した音源を後で重ねたくなったので、pythonでDTW(伸縮させてないよ)したことをまとめた。

結果は・・・聞きやすくなるといったところか(少し処理に時間がかかるが)

今回の問題の要点は
・人の声がメイン
・人の声がメインだが、一定区間誰も喋らないときもある
・ 録音したWAV1とWAV2のデータがあるが、録音開始時間がズレていてかつ、録音内容は被っている。
・同じ音でもWAV1で音が大きくて、WAV2で音が小さい場合もある。
・全体的にも計測でき、局所的にも音ズレ計測を可能にしたい。

画像1

こういう場合に

画像2

こうしたい

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

この記事が気に入ったらサポートをしてみませんか?