
私はFedora 38(6.5.6-200.fc38.x86_64)wireplumberを使用しています:libwireplumber 0.4.14でコンパイル済みPipewire:libpipewire 0.3.81でコンパイルされました
それで、同じサウンドカードの複数の受信機に同時に出力してみました。次の記事を見つけました。https://wiki.archlinux.org/title/WirePlumber 私のシナリオは2.6(同じサウンドカードの複数の受信機に同時出力)で説明されています。 (私の考えでは…)だから試してみました。しかし、うまくいきません。 (接続されており、選択した受信機は1つだけ鳴ります。)
説明されたシナリオを実行する前に、pavucontrolで1つの受信機しか選択できませんでした。それ以降のすべての受信機はオプションでした。 ->進行状況ですが、予想していたものとは異なります。もっと深く掘り下げたところ、Wiki文書に何かが間違って説明されているか、正しく理解していないようです。
output-mappings = analog-stereo hdmi-stereo
ウィキで説明した内容ではないようです。 「出力マップの複数記述レシーバー」の他のソースが見つかりません。一方、これは受信機を接続するのではなく、属性を定義するALSAカードプロファイルプロファイルです。
それで、もう少し深く掘り下げたら、配管工がこれを行うべきだと思います。インターネット検索でうまくいかなかった後、chatgptに依頼しました。彼のアイデアは、フローを受信機にルーティングするワイヤマン戦略でした。
しかし、うまくいかないか、正しく実行しません。文書も私には役に立ちませんでした。
いくつかの技術的な部分を見てみましょう。
まず、出力がカーネル側で動作していることを確認します。
aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC233 Analog [ALC233 Analog]
Subdevices: 0/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [VSEVEN]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 7: HDMI 1 [TD1655]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 8: HDMI 2 [HDMI 2]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 9: HDMI 3 [HDMI 3]
Subdevices: 1/1
Subdevice #0: subdevice #0
systemctl --user mask pipewire{,-pulse} wireplumber --no
speaker-test -Dhw:0,0 -c2 => works! headphone jack
speaker-test -Dhw:0,3 -c2 => works! displayport Port
speaker-test -Dhw:0,7 -c2 => works! hdmi(2) Port
systemctl --user unmask pipewire{,-pulse} wireplumber --no
alsaとwireplumumberの調整(archwikiの2.6)
vim /usr/share/alsa-card-profile/mixer/profile-sets/multiple.conf
次に追加:
[General]
auto-profiles = no
[Mapping analog-stereo]
device-strings = front:%f
channel-map = left,right
paths-output = analog-output analog-output-lineout analog-output-speaker analog-output-headphones analog-output-headphones-2
paths-input = analog-input-front-mic analog-input-rear-mic analog-input-internal-mic analog-input-dock-mic analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line analog-input-headphone-mic analog-input-headset-mic
priority = 15
[Mapping hdmi-stereo]
description = Digital Stereo (HDMI)
device-strings = hdmi:%f
paths-output = hdmi-output-0
channel-map = left,right
priority = 9
direction = output
[Profile multiple]
description = Output to All
output-mappings = analog-stereo hdmi-stereo
vim /usr/share/wireplumber/main.lua.d/51-alsa-custom.lua
rule = {
matches = {
{
{ "device.nick", "matches", "HDA Intel PCH" },
},
},
apply_properties = {
["api.alsa.use-acp"] = true,
["api.acp.auto-profile"] = false,
["api.acp.auto-port"] = false,
["device.profile-set"] = "multiple.conf",
["device.profile"] = "multiple",
},
}
table.insert(alsa_monitor.rules,rule)
配線担当者を確認してください(今シンクが2つすべてある場合)。
wpctl status
Audio
├─ Devices:
│ 40. Built-in Audio [alsa]
│
├─ Sinks:
│ * 41. Built-in Audio Analog Stereo [vol: 0.79 MUTED]
│ 42. Built-in Audio Digital Stereo (HDMI) [vol: 0.72]
│
├─ Sink endpoints:
│
├─ Sources:
│
├─ Source endpoints:
│
└─ Streams:
53. Chromium
54. output_FL > ALC233 Analog:playback_FL [active]
55. output_FR > ALC233 Analog:playback_FR [active]
2つの受信機を使用できます(上記の3番目の受信機はテスト目的で接続されていません)。
上記の手順を実行する前に、wpctl状態で1つの受信機しか表示できませんでした。
オペレータポリシーの作成
注:正しいメディア名とノード名を確認し、pactl list sinks
いくつかのバリエーションも試しました。
vim /usr/share/wireplumber/policy.lua.d/15-chromium-sink.lua
policy = {
{
{
matches = {
{
{ "media.name", "==", "Playback" }
}
},
actions = {
{ type = "route", path = "alsa_output.pci-0000_00_1f.3.analog-stereo" },
{ type = "route", path = "alsa_output.pci-0000_00_1f.3.hdmi-stereo" }
}
}
}
}
WirePlumber(およびChrome)を今後またはすぐに再起動しますsystemctl --user restart wireplumber
が、機能しません。 (1つの受信機からのみ出力)
オペレータエラーログ
私のポリシーに関連するログが見つかりません。
このポリシーが使用されているのか、それとも正しいのかわかりません...
wireplumberサービスが再起動した後、Journalctlが表示されます。
Oct 13 10:38:48 xxx wireplumber[907]: stopped by signal: Terminated
Oct 13 10:38:48 xxx systemd[896]: Stopping wireplumber.service - Multimedia Service Session Manager...
Oct 13 10:38:48 xxx wireplumber[907]: disconnected from pipewire
Oct 13 10:38:48 xxx systemd[896]: Stopped wireplumber.service - Multimedia Service Session Manager.
Oct 13 10:38:48 xxx systemd[896]: Started wireplumber.service - Multimedia Service Session Manager.
Oct 13 10:38:48 xxx wireplumber[2059]: SPA handle 'api.libcamera.enum.manager' could not be loaded; is it installed?
Oct 13 10:38:48 xxx wireplumber[2059]: PipeWire's libcamera SPA missing or broken. libcamera not supported.
Oct 13 10:38:48 xxx wireplumber[2059]: GetManagedObjects() failed: org.freedesktop.DBus.Error.NameHasNoOwner
Oct 13 10:38:48 xxx wireplumber[2059]: <WpSiAudioAdapter:0x558c5887c3c0> Object activation aborted: proxy destroyed
Oct 13 10:38:48 xxx wireplumber[2059]: <WpSiAudioAdapter:0x558c5887c3c0> failed to activate item: Object activation aborted: proxy destroyed
回避策テスト1
pactl load-module module-combine-sink
組み合わせシンクを作成するために使用されます。手動でChromiumを対応するシンクに設定し、pavucontrol
すべてのデバイスに出力する場合。しかし、wireplumberを使ってそれを直接自動化する方法は何ですか?
解決策テスト2
ここで述べたようにhttps://discussion.fedoraproject.org/t/configure-audio-for-simultaneous-output/74946/7
pactl load-module module-null-sink media.class=Audio/Sink sink_name=my-combined-sink channel_map=stereo
qjackctl
「ダイアグラム」で接続を開始して接続します。この変更を永久に適用する方法はまだ知られていません。
これはWireplumumberと直接作業する必要があります。そうですか?右? ;)