ゲーム等の録画/配信をする時、他のソフトでBGMを聞いていたりDiscord等でVCしていたりするかもしれません。そのような時にBGMやVCの音声が録画/配信に入ってしまうのを避けたい場合はあると思います。私の場合はVCでわいわいしながらFF14のくじテンダー配信をしたかったので、ゲーム音だけを配信できるように設定を整えました。今回はその方法を紹介したいと思います。
今回紹介する方法では以下のことが可能です。
- ゲーム音を配信と自分の環境両方に出力可能
- 配信するゲーム音と自分に聞こえるゲーム音の音量を独立して調整可能
今回使用したソフト等は以下のとおりです。
方法の選択
今回の目的を達成する方法としてはいくつかあります。
pulseaudio
で音の出力先を制御する- ゲーム音を
null sink
に出力し、それをOBSでキャプチャする - ゲーム音を
combined sink
に出力し、それをOBSでキャプチャする
- ゲーム音を
- Jack Audio Connection Kit (
jack
) で音の出力先を制御するWineASIO
を導入してWine上のゲーム音をjack
に出力する
上記3通り全て試しましたが、汎用性・安定性の面から1.1.
の方法がおすすめです。今回はこの方法のやり方を紹介します。
PulseAudioとpavucontrolのインストール
最近のほとんどのディストリ/デスクトップ環境では特に設定してなくてもpulseaudio
が音声制御に使われているはずなので、インストール等は不要なはずです。入ってない方はインストールして設定等いい感じにしておいてください。
pulseaudio
の出力制御等をGUIから行うため、pavucontrol
をインストールしておきます。
sudo pacman -S pavucontrol
次に、pulseaudio
の設定を行います。今回の方法ではnull sink
という仮想出力を使用します。この仮想出力は本来入力された音声を全てドロップしてしまうのですが、モニター出力もあるのでそこからOBSや通常の出力(今回はUSB DAC)に音声を出力することができます。今回はその機能を使います。
デフォルトの出力先の確認
まずデフォルトの出力先を確認しておきます。
ターミナルから以下のコマンドを実行することで、利用可能な出力先の一覧が取得できます。
pacmd list-sinks
コマンドを実行すると以下のような出力が得られるはずです:
2 sink(s) available. * index: 0 name: <alsa_output.usb-LUXMAN_USB_D_A_CONVERTER_DA-200-01.iec958-stereo> driver: <module-alsa-card.c> flags: HARDWARE DECIBEL_VOLUME LATENCY DYNAMIC_LATENCY state: RUNNING suspend cause: (none) priority: 9048 volume: front-left: 65536 / 100% / 0.00 dB, front-right: 65536 / 100% / 0.00 dB balance 0.00 base volume: 65536 / 100% / 0.00 dB volume steps: 65537 muted: no current latency: 11.39 ms max request: 4 KiB max rewind: 4 KiB monitor source: 0 sample spec: s24le 2ch 96000Hz channel map: front-left,front-right Stereo used by: 2 linked by: 3 configured latency: 8.00 ms; range is 8.00 .. 1820.44 ms card: 1 <alsa_card.usb-LUXMAN_USB_D_A_CONVERTER_DA-200-01> module: 7 properties: (以下略)
何個かindex: <番号>
という行が表示されていると思うので、そのすぐ下のname: <名前>
から目的の出力先の名前をメモしておきます。私の場合はalsa_output.usb-LUXMAN_USB_D_A_CONVERTER_DA-200-01.iec958-stereo
となります。(indexでの指定は変わる可能性があるので名前を使います。)
default.paの設定
pulseaudio
の設定はシステム全体とユーザー個別の設定があるのですが、今回はユーザー個別の設定を利用します。
pulseaudio
は起動時に$HOME/.config/pulse/default.pa
というファイルから設定を読み込みます。なければ作りましょう。
default.pa
に以下のように記述します。
# システムのデフォルト設定の読み込み # ディストリによってはデフォルトの設定ファイルが違う場所にあるかもしれないので要確認 .include /etc/pulse/default.pa # null-sinkの有効化 # sink_nameは自由 load-module module-null-sink sink_name=OBSSink # null-sink に名前をつける # 第一引数には先程と同じsink_nameを使う update-sink-proplist OBSSink device.description=OBSSink # loopback moduleでnull-sinkの出力をデフォルトの出力先に設定 # souceには上で作ったnull-sinkのsink_nameに.monitorを付けた値を指定 # sinkには先程調べた出力先の名前を指定 # adjust_timeは0(無効)にしておく(重要) # latency_msecは最小値の1を指定(デフォルトだと200ミリ秒の遅延が入ってしまう) load-module module-loopback source=OBSSink.monitor sink=alsa_output.usb-LUXMAN_USB_D_A_CONVERTER_DA-200-01.iec958-stereo adjust_time=0 latency_msec=1
以上のようにファイルを作って記述したら、pulseaudio
を一旦再起動します。
pulseaudio -k
通常は上記のコマンドでpulseaudio
のプロセスを終了させると自動的に再起動するはずですが、起動しない場合(pavucontrol
で確認可能)は以下のコマンドで起動させます。
pulseaudio --start
設定ファイルにミスがなければ起動できるはずです。
この状態でpavucontrol
を起動すると、「Playback」タブに「Loopback from Monitor for Null Output on」といった出力が追加されているはずです。表示されていない場合は一番下の「Show:」となっているところが「All Streams」になっているか確認してください。
また、loopback
の出力先が先程設定ファイルで指定した出力先に設定されているかも確認しておいてください。
ゲーム音の出力先設定
この状態でゲームを起動します。今回はWine上でのFF14を例にとります。
参考: WineでFF14を動かす方法はこちら
ゲームを起動すると先程のpavucontrol
の「Playback」タブに新しくゲームの出力が表示されるはずです。ゲーム名(FINAL FANTASY XIV)の右横に出力先の選択があるので、これを先程設定ファイルで作ったnull sink
の名前に指定します。上記の設定ファイルをそのまま使った場合はOBSSink
が選択可能になっているはずです。
ここまできちんと設定できていればゲーム音の出力先を変更してもゲーム音が聞こえるはずです。
また、ここで他のアプリケーション等の出力がOBSSink
になっていないことを確認しておきます。(なっていると配信に音が入ってしまいます)。アプリ版のDiscordは独自に設定を行っているようなので、使っている場合はDiscordの設定から出力先をOBSSink
以外にしておきます。
ここまで設定が終わるとpavucontrol
の画面は次のようになっているはずです。
OBSの設定
OBSでゲームをキャプチャする設定の方法は省きますが、「Sources」で「Window capture」を追加してゲーム画面を選択すればキャプチャできるはずです。
デフォルトではOBSはデスクトップの音を全てキャプチャしてしまうのでこれをミュートしておきます。「Mixer」のところに「Desktop Audio」というのがデフォルトで設定してあるはずなので、これのスピーカーアイコンをクリックしてミュートしておきます。
次に、OBSでゲーム音をキャプチャするように設定します。「Sources」で「Audio Output Capture (PulseAudio)」を追加できるはずなので追加し、「Create New」を選択して適当に名前を付けておきます。するとデバイスの選択画面になるはずなので、ここで先程追加したnull sink
の名前(ここではOBSSink
)を選択します。すると「Mixer」のところに指定した名前で新しいサウンドのキャプチャが追加されるはずです。
ここまでできればゲーム音だけを配信することができているはずです。実際に配信/録画する等して確認してみてください。OBSを使った配信や録画の方法は調べればたくさん出てくるので省略します。Windowsと同じ方法で大丈夫です。
(おまけ)配信するゲームの音量と自分で聞くゲームの音量を独立に調整する
おまけです。この方法ではpavucontrol
を使って配信するゲームの音量と自分で聞くゲームの音量を独立に調整することが可能です。
個人的には、配信を聞く人は音量を下げることはできても上げることはできないので、ゲーム(FF14)の音量は設定で大きくしておきそのままOBSに流し、自分で聞く音量を下げておくのがいいのではないかと思っています。
これは簡単で、ゲームを起動している状態でpavucontrol
を開き、「Playback」タブの「Loopback from Monitor of Null Output」の音量をpavucontrol
上で変更するだけです。自分で聞くゲーム音をミュートしたい時はここをミュートします。
おわりに
以上でpulseaudio
の設定及び配信/録画の設定は終わりです。null sink
への入出力を色々変えることで他の用途にも使えると思いますので、ぜひ色々試してみてください。