🎙️

マイク入力ボリュームが自動で変わる autoGainControl を無効にしたい

2024/06/28に公開

TL;DR

以下のように audio.autoGainControl オプションを指定することで、マイク入力のボリュームが自動で調整されます。
audio.autoGainControl は、audio: true と指定した場合にも、デフォルトで true になっています。

navigator.mediaDevices.getUserMedia({ audio: { autoGainControl: true } }); // or { audio: true }

無効にするためには、以下のように autoGainControl: false を指定します。

navigator.mediaDevices.getUserMedia({ audio: { autoGainControl: false } });

もしくは、chrome://flags/#enable-webrtc-allow-input-volume-adjustment を無効にすることで、autoGainControl を無効にすることができます。

Allow WebRTC to adjust the input volume.

対象読者

  • ブラウザでマイクを使う際に、マイクのボリュームが自動で調整されるのが気になる
  • マイクを使う Web アプリケーションの開発者

はじめに

こんにちは。クラウドエース バックエンドエンジニアリング部 の伊藝です。

みなさんは、ブラウザでマイクを使ったことがありますか?

自分は、Google Meet や Discord などでマイクを使うことが多いです。

そんなとき、マイクのボリュームが大きくなったり小さくなったりと、自動で調整されていることに気づいたことがありますか?

自分は、この現象の影響でマイクのボリュームが過度に小さく設定されてしまい、他の参加者から「なんか声小さくない?」と言われ、手動でマイクのボリュームを調整し直すことがよくあります。

Auto gain control

この記事では、ブラウザでマイクを使う際に、マイクのボリュームが自動で調整される原因について調査しました。

原因

Media Capture and Streams API の、MediaTrackSettings の autoGainControl が原因です。

https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackSettings/autoGainControl

navigator.mediaDevices.getUserMedia() はマイクやカメラなどのメディアデバイスを取得するための API です。

アプリケーション側で以下のようなコードが書かれている場合、マイクのボリュームが自動で調整されます。

navigator.mediaDevices.getUserMedia({ audio: { autoGainControl: true } }); // or { audio: true }

これを無効にすることで、マイクのボリュームが自動で調整されなくなります。

navigator.mediaDevices.getUserMedia({ audio: { autoGainControl: false } });

しかし、この設定はアプリケーションの開発者が指定するものであり、ユーザーが設定することはできません。

対策

Chrome では、chrome://flags/#enable-webrtc-allow-input-volume-adjustment を無効にすることで、autoGainControl を無効にすることができます。

chrome://flags/#enable-webrtc-allow-input-volume-adjustment

Allow WebRTC to adjust the input volume.

WebRTC と言われているのは、Media Capture and Streams API が WebRTC 関連の API であるためです。

まとめ

ブラウザでマイクを使う際に、マイクのボリュームが自動で調整される原因と対策について説明しました。

マイクのボリュームが自動で調整されることで、ユーザーがマイクのボリュームを手動で調整する必要がなくなりますが、ユーザーがマイクのボリュームを手動で調整したい場合は、autoGainControl を無効にすることで対応できます。

また、Chrome では、chrome://flags/#enable-webrtc-allow-input-volume-adjustment を無効にすることで、autoGainControl を無効にすることができます。

参考

https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackSettings/autoGainControl

https://support.google.com/chrome/thread/7542181

https://github.com/joeywatts/disable-autogain-control-extension

Discussion