hideb

多分技術系の話をするところ。

Web会議やボイスチャットでの音声入力(マイク)をイイ感じにする

技術ブログのはずが初投稿はちょいネタだった。

TL; DR

Windows ユーザーの場合

SteelSeries GG Sonar の AI ノイズキャンセリング機能を使いましょう

macOS ユーザーの場合

  • 月額費用がかかってもいい → Krisp を使いましょう
  • 月額費用をかけたくない → OSS の組み合わせで何とかします。本文を参照

対象読者

本記事が特に役立つのは

  1. macOS ユーザーであり
  2. Google Meet を頻繁に使うことがあり
  3. Krisp の PRO プランを購読していない or したくない

をすべて満たす人。

それ以外の人でも、各種 Web 会議アプリのノイキャン情報や、 OBS の設定は参考になるかも。

はじめに

ノイキャンに手を伸ばす前に、知っておきたいポイントをいくつか。

  • ノート PC 本体の組み込みマイクや、 Web カメラのマイク、イヤホンのインラインマイクなどは無指向性(全指向性)が多く、ノイズが入りやすいので避けたい。
  • 最近の Web 会議 / ボイスチャットアプリには、ソフトウェア側でノイキャンが組み込まれている。
  • 大抵の場合、マイク入力側のノイキャンと、会議アプリ側のノイキャン機能は重複させないほうがよい(どちらか一方のみを使う)。

これらは OS や会議アプリを問わず共通の留意ポイントとなります。


次に、主な会議アプリとそれぞれのノイキャン搭載状況は次の通り。

製品 デスクトップアプリ版 Web ブラウザ版
Discord
Slack ハドル
Zoom 🔺
Teams
Google Meet -

※ 2つのウィンドウで同じ会議に参加して、片方をミュートにして喋り、実際に聞こえた音声の様子から判断してます。

✅ がついてるものは AI ノイズキャンセリングと思われるもので、タイピング音やマウスクリック音、ファンノイズ、ドア音などの騒音を区別して抑制し、話し声はそのまま通します。

Zoom Web ブラウザ版の 🔺 はノイズゲート方式と思われ、音の大きさや周波数の閾値に基づいて、一定範囲外のものを一律で消音します。

ノイズゲート方式は、話していない時のホワイトノイズや遠くの騒音、小さな騒音などは消えますが、話している最中は音声入力が開かれたままになるため騒音もそのまま入ってしまいます。
例えば、議事録をとりながら話したりするとタイピング音が入るでしょう。

Google Meet のノイキャンはやや難があるようで 会話に悪影響が出ることを確認してます。(2023/05執筆現在)

うまくノイキャンされるときは AI ノイズキャンセリングのような聞こえ方ですが、加えて強めのノイズゲートがかかっているような感じです。 具体的には話し始め・話し終わりが途切れたり、大きい声でハキハキと話さないと拾ってくれなかったり、音がこもったりといったことが多発します。

家族がいる空間でリモートワークしていたり、アパート等で大声を出しにくい場合は困ると思うので、できるだけマイク入力側で対策して Meet 側のノイキャン機能は無効にするのがおすすめです。


ここまでを踏まえてまとめると、アプリ別に以下のような対策をとることになります。

Discord / Zoom / Teams

アプリ版を使うようにして、組み込みのノイキャン機能を有効にする。やむを得ず Web ブラウザ版を使う場合は、マイク入力側で対策しましょう。

ちなみに Discord のノイキャンには Krisp が使用されており、非常に優秀です。

Slack ハドル

アプリ版でも Web 版でも、組み込みのノイズ抑制機能を有効にする。

Slack は今回調査した中で唯一 Web ブラウザ版にも高品質なノイキャンが効いていました。

Google Meet

前述の通り マイク入力側で対策しましょう。


マイク入力側でのノイズ対策

Windows の場合や、月額費用が許容できる場合、素直にアプリを使った方がいいかと。

これらのツールは導入設定もかんたんで情報量も多いので説明は省略します。


macOS の無料でできるノイズ対策

ここからようやく本題です。 使用するソフトウェアは次の3つです。

導入は各サイトからダウンロードするか Homebrew を使って

brew install obs-studio tdr-nova blackhole-16ch

でサクッと。

やることをざっくり書くと

  1. OBS で音声処理を行う
  2. 加工した音声入力を BlackHole でモニタリング(音を受け取る)
  3. BlackHole を会議アプリからマイクとして指定する

という音声経路を構築し、ノイキャンを効かせた状態で喋りたいときは OBS を起動するようにします。


設定手順

1. OBS でマイクと音声処理の設定

まずは音声モニタリングを行うデバイスに、普段使っているイヤホンやヘッドセットを指定します。

OBS を起動して + , で設定を開き、「音声」→「詳細設定」にある「モニタリングデバイス」にヘッドセットなどを設定して適用。

今ここで指定するのは「声が相手にどう聞こえるか」を確かめる目的で聞くデバイスなので、スピーカーではなくイヤホンやヘッドセットをおすすめします。


続けて OBS に音声入力デバイス(マイク)を追加します。

メイン画面左下の「ソース」の + ボタンから「音声入力キャプチャ」を選択し、適当な名前をつけます。

そして、この音声入力ソースがどのデバイスからの音声を受け取るか選択します。

バイスのリストから使いたいマイクを指定します。

これで、追加した音声入力キャプチャソースが、ソース一覧と音声ミキサーに表示されます。
ソースを選択すると、上で指定したマイクが「デバイス」のリストで選択されていることがわかります。


次に、音声ミキサー下部にあるギアボタンで「オーディオの詳細プロパティ」を開き、先程追加した音声入力ソースの「音声モニタリング」を「モニターと出力」に変更します。

これでマイクに向かって話すと、同じ音が「モニタリングデバイス」で指定したイヤホン等から再生されるはずです。

この状態で声を確認しながら音声加工を行い、すべてが完了したら BlackHole につなげるように変更します(後述)。


それでは音声を加工していきます。

ソースを右クリックして「フィルタ」を開きます。

左下の + ボタンから、次の通りにフィルタを追加します。名前はリスト上の区別をつけるためのものなので一例です。

フィルタ 名前(任意)
ノイズ抑制 ノイズ抑制
VST 2.x プラグイン ローカット
エキスパンダー エキスパンダー hard
エキスパンダー エキスパンダー soft
コンプレッサー コンプレッサー hard
コンプレッサー コンプレッサー soft
ゲイン ゲイン
リミッター リミッター

こんな状態になります。フィルタは上から順番に適用されます。

実は「ノイズ抑制」と「ゲイン」だけで最低限の処理は済んでますが、他のフィルタも設定すると驚くほど音質が向上するので、ぜひ設定しましょう。

設定内容は以下の通り。

ノイズ抑制

「RNNoise (高品質、CPU使用率高め)」を選択。

ローカット

フィルタ一覧で選択して「プラグインインターフェイスを開く」を押すと TDR Nova の設定画面が表示されるので、画像のように左下の部分を設定します。

HP, LP のボタンを押してアクティブにし、 FREQ, SLOPE を次のとおりに設定。

項目
(HP) FREQ 60 Hz
(HP) SLOPE 72dB/oct
(LP) FREQ 18.0 kHz
(LP) SLOPE 72dB/oct

人間の可聴域外の音を減衰するようにしています。

エキスパンダー hard

項目
比率 4.00 : 1
しきい値 -60.00 dB
アタックタイム 10 ms
リリースタイム 50 ms
出力ゲイン 0.00 dB
検出 RMS

小さい音をさらに小さくする設定です。

エキスパンダー soft

項目
比率 1.50 : 1
しきい値 -45.00 dB
アタックタイム 10 ms
リリースタイム 50 ms
出力ゲイン 0.00 dB
検出 RMS

「前項の hard のターゲットよりは大きいが、しかし小さい音」を、やや小さくする設定です。

同じ目的のフィルタでも2段階に分けてかけることで、音の変化が自然になります。

コンプレッサー hard

項目
比率 8.00 : 1
しきい値 -20.00 dB
アタックタイム 6 ms
リリースタイム 60 ms
出力ゲイン 0.00 dB
サイドチェイン/ダッキングソース 未設定

大きい音を抑える設定です。

コンプレッサー soft

項目
比率 1.50 : 1
しきい値 -30.00 dB
アタックタイム 6 ms
リリースタイム 60 ms
出力ゲイン 0.00 dB
サイドチェイン/ダッキングソース 未設定

「前項の hard のターゲットよりは小さいが、しかし大きい音」を、やや小さくする設定です。

2段階かける理由はエキスパンダーと同様。

ゲイン

だいたい 4.0 dB 〜 10.0 dB 前後。

ここはマイクの感度にも依存するので、これといった推奨値がありません。マイクの感度が高い場合はゲインフィルターの値は 0 dB でも良いこともあります。

目安として、音声ミキサーを見ながら実際に会議するくらいの調子で声を出してみて、話している最中のメーターが黄色の -20 〜 -15 前後になっていれば丁度良いと思います。

メーターがこの辺りを前後してれば適切な音量

リミッター

項目
しきい値 -11.00 dB
リリースタイム 60 ms

音が大きくなりすぎないように音量の制限をかける設定です。

2. BlackHole に流す

OBS の「モニターデバイス」(マイクに喋った声を確認するための出力機器)に BlackHole 16ch を指定すれば OK

3. デフォルトのサウンド入力に BlackHole を指定

macOS の既定のサウンドバイスを次のようにします。

Option キー ⌥ を押しながらサウンドメニューを開くと入力も変更できる

  • 出力 : 普段使っているイヤホン等(任意)
  • 入力 : BlackHole 16ch

会議・通話アプリ側では、入出力ともに既定のデバイスにする(もちろん明示的に指定しても OK)。

そして、会議・通話する際は OBS を起動しておくことで、

マイク → OBS → BlackHole → 会議・通話アプリ という流れが完成します。


以上、めでたし。

そもそも Krisp にお金払えるよということであればこんな苦労は必要ないです。

とはいえ色々と手間がかかるのは最初だけで、一度整えてしまえば「マイク使う時は OBS 起動する」で済みます。

SteelSeries GG SonarNVIDIA Broadcast が macOS に対応してれば良かったのになーと思ったりもする。