技術ブログのはずが初投稿はちょいネタだった。
TL; DR
Windows ユーザーの場合
SteelSeries GG Sonar の AI ノイズキャンセリング機能を使いましょう
macOS ユーザーの場合
対象読者
本記事が特に役立つのは
をすべて満たす人。
それ以外の人でも、各種 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 の場合や、月額費用が許容できる場合、素直にアプリを使った方がいいかと。
- Windows なら SteelSeries GG Sonar が無料かつ高機能でおすすめ。
- macOS で有料 OK なら Krisp の PRO プランを利用。
これらのツールは導入設定もかんたんで情報量も多いので説明は省略します。
macOS の無料でできるノイズ対策
ここからようやく本題です。 使用するソフトウェアは次の3つです。
導入は各サイトからダウンロードするか Homebrew を使って
brew install obs-studio tdr-nova blackhole-16ch
でサクッと。
やることをざっくり書くと
- OBS で音声処理を行う
- 加工した音声入力を BlackHole でモニタリング(音を受け取る)
- 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 を指定
- 出力 : 普段使っているイヤホン等(任意)
- 入力 : BlackHole 16ch
会議・通話アプリ側では、入出力ともに既定のデバイスにする(もちろん明示的に指定しても OK)。
そして、会議・通話する際は OBS を起動しておくことで、
マイク → OBS → BlackHole → 会議・通話アプリ という流れが完成します。
以上、めでたし。
そもそも Krisp にお金払えるよということであればこんな苦労は必要ないです。
とはいえ色々と手間がかかるのは最初だけで、一度整えてしまえば「マイク使う時は OBS 起動する」で済みます。
SteelSeries GG Sonar や NVIDIA Broadcast が macOS に対応してれば良かったのになーと思ったりもする。