blog.stackframe.dev

PipeWire에서 소리 출력을 입력으로 리다이렉트하는 방법

이전에 PulseAudio를 사용하여 출력을 입력으로 리다이렉트하는 방법에 대한 글을 썼었다. 그런데 최근에는 PulseAudio를 대체할 PipeWire가 대세가 되고 있으므로 PipeWire에서 출력을 입력으로 리다이렉트하는 방법도 설명하려 한다.

사실 PipeWire에서 PulseAudio 인터페이스를 지원하고 있으므로 배포판에 따라서 추가 패키지를 설치한다면 이전 글에서 사용했던 명령을 그대로 입력해도 동작한다. 그래도 새로운 프레임워크를 사용하는데 이전 인터페이스를 그대로 사용하는건 썩 마음에 들지 않고, 언젠가 PulseAudio에서 PipeWire로 완전히 전환되면 사용할 수 없어지므로 순수히 PipeWire에 포함된 명령만 사용하는 방법을 알아볼 것이다.

PulseAudio 때와 마찬가지로 가상 출력 장치와 가상 입력 장치를 생성해야 한다. 아래의 명령을 실행하면 virtual capture, virtual input 인터페이스가 생성된다:

$ pw-cli create-node adapter '{
    factory.name=support.null-audio-sink
    node.name=virtual-capture
    node.description="virtual capture"
    object.linger=true
    media.class=Audio/Sink
    audio.position=[FL FR]
    }'

$ pw-cli create-node adapter '{
    factory.name=support.null-audio-sink
    node.name=virtual-input
    node.description="virtual input"
    media.class=Audio/Source/Virtual
    object.linger=true
    audio.position=[FL FR]
    }'

virtual capture 장치와 virtual input 장치가 생성되었다.

pactl 명령에서는 매핑할 때 자동으로 장치가 생성되었지만 PipeWire는 장치를 먼저 만들고 채널을 각각 연결해줘야 한다. 아래의 명령을 실행하면 virtual capture 장치의 FL(Front Left), FR(Front Right) 출력 채널을 각각 virtual input 장치의 입력으로 연결한다:

$ pw-link virtual-capture:monitor_FL virtual-input:input_FL
$ pw-link virtual-capture:monitor_FR virtual-input:input_FR

이제 virtual capture로 소리를 출력하면 virtual input으로 들어온다.

출력이 입력으로 되돌아온다.

여기까지만 한다면 PulseAudio 첫 번 째 글과 같이 출력되는 소리가 내 컴퓨터의 하드웨어 장치로 가지 않으므로 내게는 들리지 않는다. 나도 들으면서 입력으로 사용하고 싶다면 virtual capture의 출력을 내 컴퓨터의 하드웨어 출력 장치로 연결하면 된다. 먼저 pw-link -i를 실행하여 하드웨어 출력 장치의 입력 부분을 찾는다:

$ pw-link -i
Midi-Bridge:Midi Through:(playback_0) Midi Through Port-0
alsa_output.pci-0000_00_1f.3.analog-stereo:playback_FL
alsa_output.pci-0000_00_1f.3.analog-stereo:playback_FR
virtual-capture:playback_FL
virtual-capture:playback_FR
virtual-input:input_FL
virtual-input:input_FR

alsa_output.pci-0000_00_1f.3.analog-stereo가 하드웨어 출력 장치이다. 이 장치의 playback_FLplayback_FRvirtual capture의 출력을 입력한다면 소리가 하드웨어로 들어가서 들리게 된다:

$ pw-link virtual-capture:monitor_FL alsa_output.pci-0000_00_1f.3.analog-stereo:playback_FL
$ pw-link virtual-capture:monitor_FR alsa_output.pci-0000_00_1f.3.analog-stereo:playback_FR

댓글