Linux
pulseaudio

Linuxで4chのサウンドカードを2chにダウンミックスする

環境

  • elementary OS 0.4.1 Loki (Ubuntu 16.04.3 LTS)

困ったこと

LinuxでUSB接続でRoland Quad Captureから音声を出力する際、デフォルトだと4チャンネルの出力かつリア(後ろ)2つのスピーカーから出力するサラウンド設定になっており、またフロントのスピーカーからは出力されない設定になっている。
この時Linux版Steamの一部ゲーム (Steam Playで開始したゲーム) で音声を出力しようとするとフロント側2チャンネルから音声を出力しようとするため音声が出力されない場合があった。(ゲームによってリア側スピーカーでも出力する場合もあった)

やったこと

サウンドカードの出力を4チャンネル→2チャンネルにダウンミックスしたらSteamからno soundな状態を解決出来るんじゃないかと推測し設定を変更したところ正常に音声が出力されるようになった。

設定方法

PulseAudioの設定を変更

出力用のオーディオデバイスを確認する 

$ pacmd list-sinks | grep name:

    name: <alsa_output.pci-0000_09_00.1.hdmi-stereo-extra2>
    name: <alsa_output.usb-Roland_QUAD-CAPTURE_00009AA969A6A699620D9B2B2B8A81D8-00.analog-surround-40>
    name: <alsa_output.pci-0000_0b_00.3.analog-stereo>

上記で出力されたものの中からミックスダウンしたいデバイスのnameをコピーしておく

masterで先程取得したnameを指定しremapする (指定されたオーディオデバイスを元に新しい設定でコピーするイメージ)

# channels=2でチャンネルの数を2チャンネルに変更した別のoutputデバイスを作成
$ pacmd load-module module-remap-sink sink_name=quad-capture-stereo master=alsa_output.usb-Roland_QUAD-CAPTURE_00009AA969A6A699620D9B2B2B8A81D8-00.analog-surround-40 channels=2 channel_map=front-left,front-right

# Windowsで言うデフォルトのサウンドデバイスとして先程 sink_name で指定した出力先を指定
$ pacmd set-default-sink quad-capture-stereo

pacmdはランタイムの一時的な設定の変更をするだけなので再起動したら元に戻る。
永続化するには /etc/pulse/default.pa に先程の load-moduleset-default-sink コマンドを書き込む

$ sudo vim /etc/pulse/default.pa
〜中略〜
load-module module-remap-sink sink_name=quad-capture-stereo master=alsa_output.usb-Roland_QUAD-CAPTURE_00009AA969A6A699620D9B2B2B8A81D8-00.analog-surround-40 channels=2 channel_map=front-left,front-right
set-default-sink quad-capture-stereo