이전에 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] }'
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_FL과 playback_FR에 virtual 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