PulseAudio で、ふたつの 3.5mm ミニジャックから front speaker 信号が同時に出力されるようにしたい。フロントスピーカーに加えて、サブウーファーからも音を出したいからだ。

使用中のマザーボード MSI MPG X570 GAMING PLUS についているオンボードサウンドカードは、出力が Lineout (Front Speaker), Rear Speaker と Center Speaker、入力が Mic. In と Linein しかなく、サブウーファーに使用したい LFE ポートがついていない。Windows を使っている分には、 Realtek のマネージャによって比較的かんたんに remap ができるが、Linux を使うときは頑張って pulseaudio のモジュールを使わなければならなかったので、記録しておく。

概要としては、module-remap-sink というそのままのモジュールがあるので、これが Rear Speaker (Center でもよい) 端子 に Front Speaker 信号を route させる。

コマンド

pacmd load-module module-remap-sink sink_name=woofers sink_properties="device.description='Woofers'" remix=no master=alsa_output.pci-0000_2f_00.4.analog-surround-51 channels=2 master_channel_map=rear-left,rear-right channel_map=front-left,front-right

sink_name, sink_properties は (おそらく) なんでもいい。remixマニュアルを見ればわかる。僕はわからなかったが

but probably you want to set this to “no”.

と書いてあったので no にした。

master はリマップするポートがある sink の名前を指定する。sink というのは出力サウンドカードという理解で多分合っている。調べるには、まず default sink & profile を指定し (今期待する出力先 (e.g. フロントスピーカー) から音が出るのであれば何もせず)

pacmd list-sinks

を実行すれば、sink の一覧が出てくので、その name のアイテムを書く。例:

1 sink(s) available.
  * index: 2
        name: <alsa_output.pci-0000_2f_00.4.analog-surround-51>
        driver: <module-alsa-card.c>
        flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY
        state: RUNNING
        suspend cause: (none)
        priority: 9039

このときは、alsa_output.pci-0000_2f_00.4.analog-surround-51master に指定する。書き忘れていたが、事前に pavucontrol などで 5.1ch の設定をしておき、名前の suffix が -51 等自分のサウンドカードに合う channel になっていたほうがよい。

channels は、リマップするポートの数。front left と front right を rear right と rear left にマップするので、2 と数える。

master_channel_map は信号の destination で、 channel_map は信号の source。この名前はチャンネルの設定 (5.1ch 等) で決まり、

pacmd list-sinks

の volume 欄等から確認できる。