
저는 블루투스 스피커 한 쌍과 라인인 스피커 한 쌍을 가지고 있는데 두 개를 동시에 재생하려고 합니다. 두 게임 모두 연결하고 플레이하는 데 문제가 없었지만 연결하면 많은 문제가 발생했습니다. 또한 블루투스 스피커 설정이 뒤집어져서 올바른 위치에 맞게 다시 매핑하고 있습니다.
나는 pulseaudio를 사용하여 스피커를 뒤집고 module-remap-sink
콤보 스피커를 사용하는 방법을 설명하는 여러 스레드를 보았습니다 module-combine-sink
. 또한 Bluetooth 대기 시간을 고려하여 유선 스피커에 지연을 추가하고 싶었기 때문에 하나를 추가 module-null-sink
하고 청취 소스를 유선 수신기에 루프시켜 이 지연을 얻었습니다. 내 네 가지 명령이 아래에 나열되어 있습니다.
참고: 서식 지정을 위해 여기에서는 긴 줄을 백슬래시로 구분합니다. 각 명령은 실제 코드의 한 줄입니다.
pacmd load-module module-null-sink sink_name=delayed_speakers \
sink_properties=device.description=DelayedSpeakers
pacmd load-module module-remap-sink sink_name=remapped_bluetooth \
master=bluez_sink.EC_81_93_5A_66_BB.a2dp_sink channels=2 \
master_channel_map=front-left,front-right channel_map=rear-right,rear-left remix=no
pacmd load-module module-loopback latency_msec=80 source=delayed_speakers.monitor \
sink=alsa_output.usb-Generic_USB_Audio-00.analog-stereo
pacmd load-module module-combine-sink slaves=remapped_bluetooth,delayed_speakers \
sink_name=CombinedSink sink_properties=device.description=CombinedSpeakers \
channel_map=front-left,front-right,rear-left,rear-right
이 일련의 명령은 bash 터미널에서 각 명령을 하나씩 실행할 때 잘 작동하지만 시작할 때 실행되도록 설정하고 싶어서 이 줄을 포함하는 bash 스크립트를 작성했습니다. bash 스크립트를 실행하면 CombinedSpeakers 수신기가 로드되지 않습니다. 이를 조사하기 위해 해당 행을 주석 처리하고 각 delayed_speakers
행을 개별적으로 테스트했습니다 remapped_bluetooth
. module-loopback 앞에 module-remap-sink를 넣으면 하드와이어 오디오는 출력 (올바른 재매핑 포함)을 delayed_speakers
수신 합니다. remapped_bluetooth
이 라인의 순서를 바꾸면 블루투스 스피커가 두 라인의 출력을 모두 수신합니다. 각 모듈 로드 사이에 10초의 절전 모드를 추가하려고 시도했지만 문제도 해결되지 않았습니다. 아래에 스크립트를 포함시켰습니다.
#!/bin/bash
echo "Loading null sink";
pacmd load-module module-null-sink sink_name=delayed_speakers \
sink_properties=device.description=DelayedSpeakers
sleep 10
echo "Loading remap sink"
pacmd load-module module-remap-sink sink_name=remapped_bluetooth \
master=bluez_sink.EC_81_93_5A_66_BB.a2dp_sink channels=2 \
master_channel_map=front-left,front-right channel_map=rear-right,rear-left \
remix=no
sleep 10
echo "Loading delayed speakers loopback"
pacmd load-module module-loopback latency_msec=80 source=delayed_speakers.monitor \
sink=alsa_output.usb-Generic_USB_Audio-00.analog-stereo
sleep 10
echo "Loading combined sink"
pacmd load-module module-combine-sink slaves=remapped_bluetooth,delayed_speakers \
sink_name=CombinedSink sink_properties=device.description=CombinedSpeakers \
channel_map=front-left,front-right,rear-left,rear-right
pulseaudio 로그를 확인하면 systemctl --user status pulseaudio
100개 이상의 메시지
pulseaudio[7998]: q overrun, queuing locally
와 하나의 메시지가 표시됩니다
No remapping configured, proceeding nonetheless!
. 그 후에 는 pulseaudio를 사용하여 pulseaudio를 다시 시작할 때까지 더 이상 pactl
또는 명령을 실행할 수 없습니다 .pacmd
sudo pkill -9 pulseaudio
편집: default.pa 파일에 모듈 로딩을 추가할 수 있다는 것을 알고 있지만 파일이 실행될 때 블루투스 스피커가 연결되지 않아 모듈 로딩이 실패하기 때문에 제 경우에는 작동하지 않습니다.
답변1
나는 이것을 알아 냈습니다. 결과적으로 실패는 대본이 아니라 우연의 일치였습니다. module-remap-sink
기본 수신기에서 사용 하려고 할 때마다 결함이 발생합니다. 이 실패는 자동으로 발생하며 pacmd는 정상적으로 존재합니다. set-default
새로 매핑된 수신기를 사용하거나 이를 포함하는 결합된 수신기를 생성하려고 할 때만 펄스 오디오가 응답하지 않게 됩니다.
해결 방법: pacmd set-default-sink 0
사용하기 전에 사용하십시오 module-remap-sink
(해당 수신기가 수신기 0인 경우 다른 인덱스를 사용하십시오). 문제의 수신기가 유일한 수신기인 경우 를 사용하여 더미 수신기를 생성하고 pacmd load-module module-null-sink
, 해당 수신기로 전환하고, 다시 매핑을 구성하고, 마지막으로 더미 수신기를 삭제할 수 있습니다.
답변2
참고로 싱크 대신 소스를 다시 매핑하려고 하면 똑같은 문제가 발생합니다.
소스로 동일한 작업을 수행하면 잘 작동합니다.
pactl load-module module-null-source source_name=dummy-temp-source
pactl set-default-source dummy-temp-source
그런 다음 모든 소스 재매핑 명령을 실행합니다. 중간에 추가 수면을 취할 필요가 없습니다!
마지막으로 생성한 소스 중 하나로 전환합니다.
pactl set-default-source my-newly-created-source
임시 삭제하고
pactl unload-module module-null-source
참고: 이 모듈 module-null-source
은펄스 오디오 모듈 문서. 이유가 궁금했는데 쉘에서 명령줄 완성 기능을 사용하니 가능한 완성 항목에 나열이 되네요... 시도해 보니 예상대로 작동하더군요...
평판이 부족해서 투표할 수 없지만 @scott-driggers에게 정말 감사드립니다! 뭔가가 셸에서 작동하지만 스크립트의 컨텍스트에서는 작동하지 않고 잠을 추가하는 어리석은 방법을 겪고 있다는 사실이 정말 혼란스럽습니다...