TL;DR
タイトルの通りです。
この記事は何
PlaywrightでE2Eテストを書く中で、マイク入力を伴う処理のテストケースを書く場面がありました。
実装をする中ではまりポイントがあったのでTipsとしてまとめます。
起こったこと
PlaywrightなどでE2Eテストを書く際、ブラウザとしてChromiumを用いることで音声ファイルを用いたマイク入力の検証が可能です。(逆にChrome以外でマイク入力をモックするのは難しそうです)
実際の音声ファイルを入力として扱う方法は以下の記事などでも紹介されています。
この機能を使ってマイク入力のテストを行おうとしたのですが、意図した挙動になりませんでした。
実際の挙動としては以下のような状況でした。
- テスト自体は問題なく動作する
- 音声の入力自体はされている(入力された音声のBlobのサイズを確認)
- 入力された音声データを書き出すと、無音
つまり状況としてはマイク自体は問題なく動作しているものの、音声ファイルが正しく認識されていませんでした。
パスの間違いなども疑ったのですが、パスは正しく指定されており、問題がわからない状況が続きました。
原因
実装は
の通り、--use-file-for-fake-audio-capture
というオプションを用いて行なっていました。
--use-file-for-fake-audio-capture
のオプションについて調べてみたところ
に以下のようにこのオプションについて説明されていました。
Flag that stored MyFiles folder inside the user data directory. $HOME/Downloads is used as MyFiles folder for ease access to local files for debugging when running on Linux. By setting this flag, /MyFiles is used even on Linux.
List of Chromium Command Line Switches « Peter Beverloo より引用
説明を日本語に翻訳すると以下の通りです。
.wav ファイルをマイクとして再生します。 WebRTC 呼び出しの場合、ビットはマイクからのものであるかのように扱われることに注意してください。つまり、音声処理を無効にする必要があります (音声ファイルが歪んで再生されないようにするため)。入力ファイルは必要に応じて Chrome のオーディオ バスに合わせて変換されるため、ほとんどの正常な .wav ファイルが機能するはずです。 を渡してファイルをループ再生するか、%noloop を渡してファイルを最後まで再生した後に停止できます。 kDisableAudioInput または kUseFakeDeviceForMediaStream とも使用する必要があります。
当時音声入力ファイルにはmp3ファイルを指定していました。
このmp3ファイルをwavファイルに変更したところ、意図した通りの挙動で動くようになりました。
まとめ
--use-file-for-fake-audio-capture
に指定するファイル形式はwav
にしましょう。