ウェブ会議を録音する

コロナ禍で急増したウェブ会議。諸事情あって録音したいんですよ。終わった後その会議録みたいなものを作らないといけないので。PCで録音するだけなので簡単!と思っていたら大間違いでした。

自分の声がまったく録音されない・・・

pavucontrolの設定をいじれば自分の声を一緒に録音できるだろっ!っと思って,設定をいろいろいじってみたけれども,無理・・・

どうやったら自分の声を入れて録音できるのか検索しても一向に答えは見つからず。しかし,諦めきれずに思い出しては検索して,情報ない〜とうなだれること繰り返すこと数ヶ月。

そして,遂に!それらしき情報に出くわしました!

chienomi.org

Web会議の録音することが書かれているんじゃなくて,どうやったら複数の音源をミックスして出力するか?(=どうやったらソフトウェア的にPCをミキサーにするか??)ということが書かれてます。おそらくこれでウェブ会議の音声と自分の声を両方録音できるはず!

しかし,そこに書かれていることが理解できないっ!!!

書かれていることをよくよく反芻し,丸1日かけてようやくなんとなく書かれていることがわかったような気がして,Web会議の録音にも成功(正確にいうとブラウザで再生するYoutubeの音とマイクからの自分の声の録音に成功)したのでご披露します。

以下,上のウェブサイトの注釈みたいなもんです。

なお,Linux + pulseaudio +Audacity での話です。

1.ウェブ会議の音声とマイクで拾った自分の声をミックスしたものを出力する仮想出力を作る

pavucontrolの出力デバイスのところを見ると,自分のPCに取り付けられたサウンドカードなどのハードウェア出力装置が並んでいます。これらはハードウェア出力装置。そこにウェブ会議のアプリやウェブブラウザから流れてくる音声と,マイクから拾った自分の音声を合成したものをミックスして出力する出口となる仮想出力を作ります。この出力を録音アプリケーションのAudacityに渡してあげればいいわけですね。

pacmd load-module module-null-sink sink_name=mixmic

これが,その仮想出力を作るコマンド。

pacmdって,pulseaudio commandってところでしょうかね。pulseaudioをいじるコマンドのようです(この程度の理解でもまぁ何とかできたw)。load-moduleってもモジュールをロードせえということでしょうな。module-null-sinkは,sinkってのが出力のことだそうで,null-sinkで仮想出力っぽい感じですねw sink_nameがこの仮想出力を識別する名前とのこと。

pavucontrolを立ち上げて,出力デバイスタブを表示させておくと分かりますが,このコマンドを実行すると,Null出力という仮想出力装置が出現します。これでは何のことか分かりにくいので,このNull出力にmixmicという名前をつけます。

pacmd update-sink-proplist mixmic device.description=mixmic

これでNull出力がmixmicという名前に変わります。

そして,このmixmicなる仮想出力を音源(ソース)としてAudacityに渡してあげたいわけですが,出てきた出力を入力とするのが入力としての「モニター」です。pavucontrolの入力タブで入力デバイスを「監視」(モニター)だけ表示させると,Monitor of うんちゃらという入力デバイスが表示されると思います。出力はすべて自動でMonitor of うんちゃらという入力デバイスになるのではないかと思います。このmixmicの出力のモニターの方も名前をつけて上げないとMonitor of Null出力となってしまうので,これにも名前をつけます。

pacmd update-source-proplist mixmic.monitor device.description=Monitor_of_mixmic

このコマンドを実行すると,Monitor of Null出力という表示がMonitor_of_mixmicにかわります。

これで,仮想出力の入れ物はできました。次は音声をミックスして流し込む方です。

2. combine-sink

次に,combine-sinkを作ります。sinkは出力のことだったので,combine-sinkも出力デバイスの一種ということになりますね。combineって混ぜるという意味?名詞だとcombinationコンビネーションですね。このcombine-sinkってのは,とある入力の出力先にこのcombine-sinkを指定と,束ねられた複数のデバイスから出力される,ってもののようです。再生タブに現れるアプリケーションの音声の出力先にcombine-sinkを指定すると,束ねられた複数の出力へ出力されます。

そこで,ウェブ会議の音声を聞いているスピーカーやヘッドセットを鳴らしているサウンドカードやUSBデバイスの出力と,さっき作ったmixmicを束ねるcombine-sinkを作ります。

なんでそんなことをするかというと,ウェブ会議の音声は,実際にスピーカー・ヘッドセットで聞きつつ,録音するAudacityへも渡してあげなければいけません。Audacityへ渡す出力がmixmicでした。なので,ウェブ会議の音声を普通のサウンドカードとmixmicの2つへ出力する必要があるのです。

まず,

pacmd list-sinks | grep -F "name: "

のコマンドを実行して,出力デバイスのリストからデバイスの名前の行だけ表示させます。

私の出力例

$ pacmd list-sinks | grep name:
    name: <alsa_output.pci-0000_07_00.1.hdmi-stereo>
    name: <alsa_output.pci-0000_07_00.6.analog-stereo>
    name: <alsa_output.platform-snd_aloop.0.analog-stereo>

私の場合,PCのサウンドカードの普通のアナログ出力でウェブ会議の音声をききますので,alsa_output.pci-0000_07_00.6.analog-stereoとmixmicを束ねます。

pacmd load-module module-combine-sink sink_name=combined slaves=alsa_output.pci-0000_07_00.6.analog-stereo,mixmic

このコマンドを実行すると,pavucontrolの出力デバイスにSimultaneous output to 私のサウンドカード,mixmic という仮想出力デバイスが出現します。

これで,Web会議の音声をmixmicに出力する出力デバイスができました。次は,音声をmixmicに流します。

3. loopback

このloopbackの本当のところは理解してませんが,自分の声を拾った音声入力をそのまんまmixmicに流れるようにするもの?程度の理解です。

まず,自分の声を拾う入力デバイスを探します。

pacmd list-sources | grep -F name: | grep -F -v .monitor

以下は,私の出力例。

$ pacmd list-sources | grep -F name: | grep -F -v .monitor
    name: <alsa_input.usb-SD_webcam_5160_SD_webcam_5160-02.mono-fallback>
    name: <alsa_input.pci-0000_07_00.6.analog-stereo>
    name: <alsa_input.platform-snd_aloop.0.analog-stereo>

ここも,普通のサウンドカードの入力を使うので(ヘッドセットのマイクジャックをPCのマイク端子にぶっこんでる),alsa_input.pci-0000_07_00.6.analog-stereoを使います。このソースをmixmicの出力へループバックさせます。

pacmd load-module module-loopback source=alsa_input.pci-0000_07_00.6.analog-stereo sink=mixmic

これで準備は完了しました。次は,pavucontorolの設定です。

4. pavucontrolの設定

出力デバイスタブ

全体像としては,ウェブ会議の音声をcombine-sinkに流して,自分のスピーカー・ヘッドセットの出力デバイスとmixmicに流し,マイクの音声もまたmixmicに流して,mixmicで合成された音声をAudacityに食わせる,ということです。

なので,出力デバイスのフォールバックはcombine-sinkにします。マウスオーバーすると「代替に設定」とヒントが表示されるボタンを押すってことです。pavuvontrolにはSimultaneous output to (サウンドカードの名前),mixmicと表示されています。その右側の☑をオンにします。

入力デバイスタブ

入力は自分の声を拾うマイクのデバイスの右側の☑をオンにします。

再生タブ

ウェブ会議のアプリで何か音を鳴らしましょう。私はChrome上でWebExのウェブアプリを使用するのですが,WebExのテストミーティングで音を鳴らす方法が分からないので,Youtubeで代用です。音を鳴らすとChrome:playbackが出現します。これをSimultaneous output to (サウンドカードの名前),mixmicにします。これでウェブ会議の音がサウンドカードとmixmicの仮想出力の2つの出力に流れます。

loopback from (自分の声を拾う入力デバイス)をmixmicにします。これで自分の声もmixmicに流れます。

あと2つ,Simultaneous output on ・・・というのが,サウンドカードの分とmixmicの分と2つ表示されていると思います。ここはそれぞれの出力デバイスを指定しておけばよいのだろうと思います。

録音タブ

Audacityを立ち上げて,録音を始め,ポーズにしてください。

Loopback to mixmic から,は音を拾うマイクの入力デバイス

現れているはずのALSA plugin [Audacity] : ALSA Capture,はMonitor of mixmic

にします。mixmicの出力をAudacityのソースにせえということなので,Monitor of mixmcなのですね。

これでAudacityで録音できるはずです。

なお,当方archlinuxですが,pulseaudio-alsaパッケージをインストールしないとaudacityで録音できませんでした。

 

以上で,念願のWeb会議の録音,成功です!!!