shingoushori's dialy

音信号処理を専ら研究していた元博士後期課程の学生によるメモ

Web Audio API を使用した音声を埋もれさせない音信号混合法の簡易実装

Web Audio APIはてなブログに埋め込むテスト

Web Audio API を使用した 音声を埋もれさせない音信号混合法の簡易実装 です。

WAV+WAV or WAV+マイク を、WAVに書き出します。マイクはFirefoxのみ。

前回からの進展として、"音声を埋もれさせない音信号混合法" の簡易実装をやってみました。
スペクトルは ↓こちら↓ を元に作成しました。
Web Audio API 解説 - 12.アナライザーの使い方 | g200kg Music & Software
FFT点数は1024で、低い方から256ビン表示しています。
埋もれさせたくない音声をFile0側にセットしてください。File0とFile1のどちらかを空にしておくと、空にした側をマイクからとれます。ただしFirefoxのみ。

"音声を埋もれさせない音信号混合法" とは、音声とBGMを混ぜた時に音声が埋もれて聞こえなくなるのは残念なので、そうならないような調整を自動的にやってくれるミキサーがあると便利では?という提案、 およびそのアルゴリズムの提案などなどです。
発表題目として現れる最初の発表はこちら
今回のコンテンツとしては、Web Audio APIにあるNodeを使っての簡易実装です。
"音声を埋もれさせない音信号混合法"として提案されている内容では、上位概念の提案も兼ねられています。 それは、時間周波数平面同士の重ね合わせをゴリゴリ行う、リッチなミキサーの構成法です。
本ブログの当初は、そのリッチなミキサーの構成法のWeb Audio APIでの実現を検討してきました。 やはりパフォーマンスの面で問題がありました。
そこで今回、発想を変えました。"音声を埋めさせない音信号混合法"の名の下、リッチなミキサーの構成法を用いての知見から、Web Audio APIで実現できる程度の簡易実装で効果が出せるかを検討しました。 知見の出所はこちら

File0
File1

 mixing result :                   

 mixing source0 :                   
 mixing source1 :                   

 mixing result2 :                   

 

Analyser

SmoothingTimeConstant :
MinDecibels :
MaxDecibels :

 

mixed
audio0
audio1
result2

 

チェックボックス"spectrogram"と"source rec"は、それぞれスペクトログラムとFile1およびFile2のミキシング結果と同じ時区間での切り出しです。
再生時間が5分の楽曲をフルでミキシングしたところ、処理落ちと思われるガタガタが発生しました。このため、一部の機能にon/offをつけてみました。
この辺りはWeb Audio APIの弱点なのかなと、同一ブラウザで複数タブを開きまくれたりしますので。

なお、このコンテンツについては日本音響学会2019年春季研究発表会にて発表します。
処理の中身であるとか、レジュメで引き合いに出した一般的なミキシング手法であるマルチバンドダッカー、ミラードイコライゼーションなどについては、また別の記事で。
別記事に仕切り直しする理由としては、パフォーマンス面が主です。 レジュメを書いた時に組んだローカルホストでのコンテンツで、 6秒 程度のサンプルデータでやる分には、マルチバンドダッカー、ミラードイコライゼーションについても問題なく処理できました。
ところが、はてなブログに埋め込んで、普通にwebコンテンツとして動かしてみたところ、先述の通りパフォーマンス問題が発生しました。調子に乗って、5分の楽曲をフルでミキシングしたからかもしれませんが。
その上に、マルチバンドダッカー、ミラードイコライゼーションを載せるのは、あまり有用とも思えませんでした。
その前にJavaScriptとWebAudioAPIをもっとちゃんと勉強して、パフォーマンス改善に取り組みたいところ。その実、廃止が謳われているScriptNodeに頼っていますので、AudioWorklet移植が必要です。なんということだ。