見出し画像

ZOOMで参加者音声、配信者音声、デスクトップ音声を配信PCできれいにLOOPBACKさせたい

どうもこんにちは。馬場です。かれこれオンライン授業をはじめて一年になろうとしているのですが、最近になってようやく馬場の授業時における音声セッティングの正解を見つけたような気がするので忘備録的に記事を書いておこうとおもいます。タイトルはこの辺に悩んでいない人にとってはなにをいってんの?みたいな文言でございます。

いや、特に必要ないんじゃないの?と思ったそこのあなた。そうなんですよ。普通に使えばいいだけなんですが、このご時世、プロトタイプしまくるのが試作の流儀で、試作の刃なわけです。この一年間を通じて実はいろんな試みをしていて、結構そのなかで音声が鍵だなってことに気づいたんですね。

具体的に実際に授業運営のために馬場が試作して実際に継続して利用しているシステムは次のとおりです。

1.  jsWritableTimer: https://github.com/TetsuakiBaba/jsWritableTimer
2. Commentable: https://github.com/TetsuakiBaba/commentable
3. Challengeable: https://github.com/TetsuakiBaba/challengeable
4. Zoom自動翻訳(こちらまだ公開していません)

これらに関してはまだ記事を残していないのでまた改めて記述してみようとおもいます。例えば4では、学生側からの音声を使う仕様になっています。これはZOOMで喋った内容がGoogle翻訳でZOOMの字幕にリアルタイム表示されるものです。ADADA2020という国際会議でGeneral Chairをした際にこの機能を利用して母国語セッションを行ってみました。この他デスクトップでなる音のキャプチャ処理をしないといけないなど、音声共有をどのようにまとめるかでいろいろ悩みました。

やりたいことをまとめますと、
1.  画面共有オプションの音声共有機能を使うことなくデスクトップ出力音声をZOOMの参加者に流したい
2. ZOOM参加者(自分も含めて)音声を別途自作アプリでキャプチャしたい。

この2つの条件ってそれぞれを解決するのは簡単なんですが、共存させるのが難しかったんです。まずは1,2それぞれの解決方法をまとめます。

画面共有オプションの音声共有機能を使うことなくデスクトップ出力音声をZOOMの参加者に流すには

一番簡単なのは、ハードウェアで解決することです。YAMAHA AG03TASCAM MiNiSTUDIO CREATOR US-42を使えば最初からloopback機能がついているので、デスクトップでなっている音声を簡単にオーディオインタフェース出力に全部まとめることができます。もともとの需要はDAWを立ち上げて一緒に演奏をする場合です。これを利用すればZOOMの画面共有機能を利用せずとも自分のPCでなっている音をZOOM参加者に送ることができます。またPCの音声出力をケーブルでオーディオ・インタフェースにつないでも良いでしょう。しかしこれらの場合では参加者がしゃべると配信者側でloopbackされてしまうため、参加者からすると自分が喋った音声が1秒位遅れてもう一度聞こえてしまします。この問題に関しては例えばYAMAHA AG03のヘルプページでも紹介されており、基本的には解決策はないので双方向の音声入力がある場合はloopback機能を使わないでください。というアナウンスになっています。

物理オーディオデバイスを使わなくても仮想オーディオデバイスを利用することでもloopback機能は実現できます。無料でサクッとやるのであればMacは soundflower や LadioCast がいいですね。例えばzoomの音声出力と入力をsoundflowerに合わせて、デスクトップ出力やマイク入力をsoundflowerにしてあげればOKです。もちろんこれでも先程と同様の問題に直面します。

実はZOOMは音声周りが結構優秀なので、「オリジナルサウンドをON」にしない限りは上記の自分の音声が1秒くらいおくれて聞こえるトラブルは起こりません。実際に試してみるとわかると思いますが、配信PC側としては、音声波形が即座にマイクとスピーカー両方に入力されてしまうため、通常の音声設定であればこの入力はキャンセルされるため、参加者側にloopbackした音声が届くことはないです。たまにこのキャンセリングに失敗してちょと聞こえたりすることはありますが。

さて、「じゃあ、問題解決じゃん」と思うかもしれません。はい、たしかにこれでもある程度は問題ないです。馬場もこの設定で1年間普通に授業をしていました。運用的にも問題はそれほど感じませんでした。ただ学生が喋った音声と、私が喋った音声が同じタイミングだった場合、この設定だと学生が喋っている間は配信側からの音声出力にキャンセリング処理がかかるため、結果として同時に配信者が喋った場合や、音楽を流していたりするとそれらも一緒にキャンセリングされてしまうため、活発に会話をするときにはこの設定はあまりおすすめできません。一方的に教員が話すだけだったら問題はないですが。

ZOOM参加者(自分も含めて)音声を別途自作アプリでキャプチャしたい

今度は参加者の入力音声をPC側で処理したい場合です。馬場の場合は学生の入力を音声認識に回したりするのでその用途がほとんどです。解決方法は先に示したやり方で同様に解決できますが、問題はやはり参加者側からの音声入力のloopbackとなります。また、音楽を流しながら話をしている場合なんかは、音声とデスクトップ音声を別々にしないといけないため、単純にvirtualデバイスの音声をまとめるだけではうまく認識してくれなくなってしまいます。

解決方法

いよいよ本題です。この問題を解決するために馬場が取ったやり方は Loopback(ソフトウェア名です)を利用して、音声入力と出力用にそれぞれ別の仮想デバイスを作成する。というやり方にしました。これをすることでZoom参加者からのオーディオをキャプチャしながらもloopbackさせずに環境構築ができました。ポイントはLoopbackを利用して mic for ZOOMとspeaker for ZOOM の2つの仮想デバイス(名前は任意)を作成します。今回の馬場の環境ではオーディオ・インタフェースにKomplete Audio6を利用していますが、ここはご自身の利用インタフェースで読み替えてください。以下がそれぞれの設定です。Mac miniのスピーカーというのは単純なモニターとして入れているだけなので無視してください。

スクリーンショット 2021-02-19 12.24.47

スクリーンショット 2021-02-19 12.25.19

デスクトップ音声出力:mic for ZOOM
デスクトップ音声入力:speaker for ZOOM(音声認識やchallengeable用途)
ZOOMマイク:mic for ZOOM
ZOOMスピーカー:speaker for ZOOM

Output channelsを2つ用意して、モニタリング用と音声出力用の2つを分けているのもポイントです。これをやらないと自分の喋った音声がループバックして喋りづらくなるためです。以上で参加者の音声ループバックをきれいになくすことができました。ちなみにLoopbackソフトウェアは1万くらいするのですが、今回のこの仕様をみたすのは、いまのところLoopbackを使うか、ハードウェア機材を増やすの2択しかないのではと思っています。机が広いひとはハードウェア機材で解決してもいいかもしれませんね。

この記事が気に入ったらサポートをしてみませんか?