📻

【後編】社内ラジオはいいぞ! - 社内ラジオを支える技術たち

2024/12/12に公開

こんにちは!こんにちは!
Magic Moment フロントエンドエンジニアの @morishin です。

この記事は、Magic Moment Advent Calendar 2024 9 日目の記事です。

はじめに

以前、弊社の取り組みである社内ラジオ (通称: Tech ラジオ) について紹介させて頂きました。

あれからちょうど 1 年 9 ヶ月 (640 日) 経った今、後編の記事を書くに至りました。
今回は社内ラジオ運営の裏側ということで、利用しているツールや設定を紹介していけたらと思います。

BGM を流しながら話したい!

ラジオといえば忘れちゃいけないのが BGM。

トークがメインなら必ずしも要るものではないかもしれません。
しかし、まだラジオで話すことに慣れていない場合、無音・無言の時間があるとツライものです。
そんなとき、ほのかに流れる BGM が一服と清涼剤になってくれます。多分。
BGM があることで、ゲストの方も無意識に「砕けた空間なんだ」「堅苦しくならなくても良いんだ」と感じ、自然と話しやすくなります。

さて、PC 1 台でラジオをしていると基本的にはマイクが 1 つしかありません。
弊社は Gather 上でラジオを放送していますが、マイクデバイスは 1 つしか選択できません。
他の多くのコミュニケーションツールやアプリでも同様でしょう。

gather-mic
マイクは 1 つしか選べない

スマホなどで音楽を流しながら話せば、一応声と BGM の両方を入れられます。
ですが環境音なども混じってしまうため、やはり直接入力にしたいところ。

そこで、物理マイクが 1 つしかない環境でも、声と BGM を綺麗に入れる方法を初心者向けに紹介します。
(当方も、別に音響のプロとかではなくて初心者です!)

仮想オーディオデバイス + 仮想オーディオミキサー

結論から書きます。
仮想オーディオデバイスと仮想オーディオミキサーを使います。

具体的には、私の環境 (MacBook Air (M1) / Sequoia 15.0) だと仮想オーディオデバイスに BlackHole、仮想オーディオミキサーに LadioCast をそれぞれ使用しています。

「はー、なるほどね」と思った方はこれより下は読む必要がありません。
ご一読頂き有難う御座いました。
でも最後までお付き合い頂けると嬉しいです。

正直言ってナンノコッチャな方。
詳しく説明しますのでご安心下さい。

かそうおーでぃおでばいす?

オーディオデバイスとは文字通り音響機器です。
マイクとかスピーカーとかヘッドンホホとかをイメージしてもらえれば良くて、通常は物理的な (ハードウェアの) デバイスとしてこの世界に顕現しています。

これと同等のものをソフトウェアで、仮想的に実現するのが仮想オーディオデバイスです。
コンピュータの中だけで存在する音響機器だと思って頂ければ間違いないです。

何故これが必要なのか。
声は物理マイクから入れられますが、BGM は直接入力するので BGM 用のマイクが必要です。
これを仮想オーディオデバイスが担ってくれます。

ちなみにマイクのような "話す担当" は、音の入力を担うので入力機器 (インプットデバイス)。
スピーカーのような "聴く担当" は、音の出力を担うので出力機器 (アウトプットデバイス) と呼びます。
仮想オーディオデバイスもこれと同じで、入力と出力の 2 つがあることを覚えておいて下さい。

かそうおーでぃおみきさー??

オーディオミキサーとは音と音をミックスするデバイス (mix-er) です。
音楽ライブやクラブなんかで見かけたことがあるかもしれませんが、音響スタッフとか DJ とかの前に置いてある、ツマミがたくさん付いたアレです。
よく分からない身としては、なんか威圧感があってコワいですね。

audio-mixer
弊社イベントスペースの物理ミキサー

audio-mixer-back
裏側の配線 (一度抜いたが最後、絶対に元に戻せない自信がある)

これを仮想的に実現するのが仮想オーディオミキサーです。
やることはシンプルで、複数の入力を 1 つの出力にまとめたり、逆に 1 つの入力を複数の出力に分配したりします。

何故これが必要なのか。
前述の仮想オーディオデバイスで声用のマイクと BGM 用のマイクの両方を用意できました。
しかし Gather をはじめ殆どのコミュニケーションツールでは、入力デバイスは 1 つしか選べません。
これをミキサーで 1 つにまとめて更に別の仮想デバイスに出力し、出力された音を Gather から流す (1 つにまとまったものを入力デバイスとして選択する) ことで、「BGM を流しながら話したい!」という願いを叶えられるのです。

ミキサーがなくても、OS デフォルトの機能で音声を統合する (機器セットを作成しておく) こともできます。
ですがリアルタイムに素早く切り替えたりするのには不向きなので、やはりミキサーを用意しておいた方が何かと便利です。

How to セットアップ

ここからようやくテックブログっぽい内容です。
といっても難しくはないのでサクッと行きます。

仮想オーディオデバイスのセットアップ

私の今の環境が Mac なので Mac 向けの説明になりますが、BlackHole をインストールします。

brew install --cask blackhole-2ch blackhole-16ch blackhole-64ch

おしまい。簡単ですね。

2ch、16ch、64ch の 3 つの BlackHole をインストールしました。
3 つの違いはスピーカー数の上限ですが、今は気にしなくて大丈夫です。
システム設定や Audio MIDI 設定を見るとインストールされていることが確認できます。

os-audio
システム設定 -> サウンド

audio-midi
Audio MIDI 設定

brew を使っていない人は公式サイトからメールアドレスを登録し、送られてきたダウンロードリンクからアプリをダウンロード・インストールして下さい。

自宅の Windows PC がぶっ壊れてしまっているので今は確認できませんが、確か VB-CABLE を使っていた気がします。
多分これが一番メジャーだと思います。[1]

仮想オーディオミキサーのセットアップ

Mac の方は LadioCast を入れます。
AppStore のページ に行ってインストールして下さい。
(brew は探しましたが残念ながら無さそうです)

Windows なら VoiceMeeter Banana がオススメです。
VoiceMeeter はいくつか種類があるのですが、気になる方は調べてみて下さい。[3]

ミキサーをインストールできたら起動し、以下のように設定します。

  • 入力
    • 入力 1: MacBook Air のマイク (向き先: 出力 Aux 1)
    • 入力 2: BlackHole 2ch (向き先: 出力メインおよび出力 Aux 1)
  • 出力
    • 出力 メイン: MacBook Air のスピーカー
    • 出力 Aux 1: BlackHole 16ch

ladiocast-min
LadioCast

物理デバイスは環境によって異なると思うので適宜読み替えて下さい。

入力 1 は自分の声を拾う物理マイク。入力 2 は音楽プレーヤーから BGM が出力される (それを入力として受け付ける) 予定の仮想デバイスです。
出力メインは自分が音を聴くための物理デバイス。出力 Aux 1 は声と BGM が合成された音が出力される仮想デバイスです。
入力 2 の向き先として出力 Aux 1 だけではなくメインも指定しているのは、流している BGM を自分も聴こえるようにするためです。

音楽プレーヤーのセットアップ

前提として、出力デバイスを選択できるものをお使い下さい。
例えば、Mac にプリインストールされている QuickTime Player は出力先が OS の設定に依存しており、アプリ側では個別に変更できません。

私の場合、元々 recordbox という DJ ソフトを使っていたので、ラジオを始めたての頃はそれを転用していました。

dj
調子に乗って DJ コントローラまで繋げたりしていた

ただ、複数のアプリと一緒に立ち上げるとどうしても重くなるので、最近は rekordbox は使っていません。

ChatGPT にも聞いてみたところ、軽くて使いやすいとなると、お馴染みの VLC Player や Cog といったプレーヤーがオススメとのことです。
ちなみにどちらも brew cask でインストールできます。ラクですね。
参考まで。

chatgpt-q
chatgpt-a
ChatGPT からの回答

プレーヤーを用意できたら、出力デバイスとして BlackHole 2ch を指定して下さい。
正しく設定できていれば、プレーヤーから楽曲を再生するとミキサーの音量ゲージがビクビクしていると思います。
また、物理デバイスからも楽曲が流れ、自分の耳にも届くはずです。

cog
Cog の出力デバイス設定

コミュニケーションツールの設定

ここまで来ればあと少し。

Gather のマイクを BlackHole 16ch に設定しましょう。
これで自分の声と BGM 用の楽曲を統合したものが Gather に流れます。
ちなみにスピーカー側の設定は普段通りものから変える必要はありません。

gather
Gather のマイクを BlackHole 16ch に設定

Gather 以外の、例えば ovice や discord、Slack ハドルなどでも同様の設定が行えますので、そちらをお使いの方は設定を探して試してみて下さい。

トラブルシューティング

音が出ない / 聴こえない

耳にバナナが入っていないか確認して下さい。
大抵の場合、入出力デバイスの設定ミスが原因です。
落ち着いて順番に確かめましょう。

  • OS のデバイス設定は正しいですか?
  • ミキサーのデバイス設定は正しいですか?
  • 音楽プレーヤーのデバイス設定は正しいですか?
  • コミュニケーションツールのデバイス設定は正しいですか?

意外と盲点なのが物理的な問題によるもので、例えば外部マイクや外部スピーカーを使っている場合に、線が抜けていた or 断線していたというパターン。
昔、Cisco のネットワーク研修で「問題があったときは OSI 参照モデルの物理層から原因を探りましょう」と教わりましたが、あれは侮れません。
確認しましょう。

これと近いもので、そもそもマイクやスピーカーをミュートにしていたというパターンもよく見かけます。
確認しましょう。

また、デバイス設定自体は正しいがどこかで音量が 0 になっているパターンなどもあるあるです。
特に BGM をフェードアウトさせた場合などに起きがち。
確認しましょう。

各デバイスに音が来ているかは LadioCast の UI で分かるので、どこまで音が来ていてどこから音が来ていないのか、順番に辿って一つ一つ原因を切り分けましょう。
頭の中で考えていると混乱するので、慣れないうちはミキシングの図を描くと良いです。

上手くミキサーが動かない (絶対に設定は間違っていない、はず)

デバイスを選択し直すか、アプリを再起動してみましょう。
以前、LadioCast を 2 時間くらいずっとつけっぱなしにしていると動かなくなるという事象に遭いました。
なので、私はラジオ開始前の準備時にいったん再起動するようにしています。

Bluetooth デバイスを利用している場合、LadioCast を立ち上げてから Bluetooth を接続すると、見た目上はデバイスが選択されているように見えて裏では選択されていないときがあります。
手動で選択し直すと良いです。

仮想オーディオデバイスが壊れている可能性もあるので、別のオーディオデバイスも試してみて下さい。
16ch を使っていて駄目だったら 64ch に変えてみるとか。

それでもダメなら OS ごと再起動しましょう。
最強です。

音量が上手く調節できない

ミキサーでデバイスごとに音量設定を変えましょう。
また、自分の環境での聴こえ方とオーディエンスの聴こえ方は異なるので、別の誰かにお願いして事前に音量チェックに付き合ってもらうのが確実です。

ハウリングする

音声入力 (マイク) と音声出力 (スピーカーなど) が近いと起きます。
スピーカーやから出た音をマイクで拾い直している可能性があるので、スピーカーではなくイヤホンやヘッドホンに変えてみて下さい。

声の音質を良くしたい

ノイズキャンセリング機能を使いましょう。

最近はコミュニケーションツールにデフォルトでノイズキャンセリング機能がついていたりします。
ですがこれを使うと BGM ごとノイズキャンセリングされてしまい、「声はよく聞こえるようになったが今度は BGM が聴こえない」といったことになります。

なのでコミュニケーションツール付属のノイズキャンセリング機能はオフにした上で、PC 側でノイズキャンセリングツールを使うようにします。
私は Krisp を使っています。
AI の謎の技術のお陰でかなり精度が高く、かつ 1 日 90 分までなら無料で使えるので、普段の業務利用にもオススメです。
(自分が話すときだけオンにしてそれ以外のときはオフにすれば、意外と 1 日持ちこたえられます。切り忘れ注意。)

ミキサーと組み合わせる場合、入力側で物理マイクを直接指定していたところを Krisp のマイクに変更します。
その上で、Krisp 側で物理マイクを選択するようにします。

ladiocast-with-krisp
LadioCast から Krisp を指定

krisp
Krisp から物理デバイスを指定

異音がする

(ここまで来るともはやラジオと関係ない気がしますが) 大抵は物理層の問題です。

ホワイトノイズ (「サーッ」) の場合、機器に熱が加わっていたり、いずれかのデバイスの音量が不必要に大きく設定されていたりしませんか。
物理的な環境や音量設定を見直してみて下さい。

ハムノイズ (「ヴーッ」) の場合、ケーブルが断線していたり接触不良になっていたりすることがあります。
別のケーブルに変えてみたり、挿し直したりしてみて下さい。

もし仮に、PC 自体をシャットダウンしても異音が聞こえるという方は、お近くの耳鼻科を受診することを勧めます。

おわりに

気軽に書き始めましたが、気付いたら結構な文量になってしまいました。

色んな技術を紹介する予定でしたが音声ミキシングの話だけになってしまい申し訳ないです。
本当はずんだもんの音声によるアナウンス方法とか、無料でできるバ美肉の方法とか、ツール・設定紹介以外のラジオ運営 tips とかも書きたかったのですが、あまりにも長くなってしまうので今回は割愛します。
もし興が乗れば、別の機会に番外編として書きたいと思います。

他にも「もっとこうすると良いよ」「うちはこんなやり方しているよ」などありましたらコメント等でご教示頂けますと幸いです。

ちなみに...
これだけ長々と書いておいてアレなのですが、実は 2024 年 12 月 12 日現在、社内ラジオ企画は実施しておりません。

前編にも書かれていた通り、弊社の社内ラジオは元々、新しくチームにジョインされた方を知ってもらうことが目的でした。
あれからも色んな方がジョインされたり (去っていったり) しましたが、既存メンバーも含めて一通り紹介しきってしまいました。
したがって、今年の夏頃に惜しまれつつもいったんの最終回を迎えた形です。

しかし好評だったのもあって、第 2 弾をやるか、社内ラジオとはまた似て非なる別のものをやるか、と前向きに企画・検討中です。
こちらも進展があればまたテックブログで紹介できればと思います。


さて、次回のアドベントカレンダーは 「Go で gRPC の metadata を使う」です。
お楽しみに!


脚注
  1. 仮想オーディオデバイス「VB-CABLE」の使い方(と OBS の関係)
    https://www.monoists.com/entry/how-to-use-vb-cable ↩︎

  2. M1 MacBook Air で録音ソフト Soundflower は使えるのか試してみた
    https://www.mimi-blog.info/2022/02/m1mac-soundflower-not.html ↩︎

  3. VoiceMeeter の種類とインストール方法
    https://blog.isarver.com/howtovoicemeeter-ch-installationandtype/ ↩︎

  4. 社内ラジオでは音楽は使用できない?著作権はどうなる?
    https://office-ennichi.com/is-music-not-allowed-on-the-company-radio-what-about-copyright/ ↩︎

Discussion