blog.stackframe.dev

[PulseAudio] 소리 출력을 입력으로 리다이렉트하는 방법

브라우저에서 나는 소리를 그대로 채팅 프로그램의 입력으로 보내고 싶은 경우가 있을 것이다. 단순히 스피커 앞에 마이크를 두는 방법도 있지만 음질 열화가 심하다. 리눅스에서는 PulseAudio 설정을 조금 만져주면 쉽게 가능하다.

현재 리눅스 유저랜드 사운드 처리는 대부분 PulseAudio를 거치게 되어있다. DE에 로그인하면 자동으로 PulseAudio 서버가 실행되고 현재 컴퓨터에 설치된 장치들을 가져온다. 이후에 사운드 입출력이 필요한 프로그램들이 PulseAudio를 통해 작동한다. 그러므로 PulseAudio에 가상 출력 장치를 하나 만들어서 여기로 들어오는 모든 소리를 또다른 가상 입력 장치로 매핑한다면 이 가상 입력 장치를 사용하는 프로그램은 마이크가 아닌 프로그램의 출력을 입력으로 사용하게 될 것이다.

이 설정을 하기 위해서 pactl 명령이 필요하다. Arch Linux는 libpulse 패키지에 포함되어 기본적으로 설치된다. 먼저 가상 출력 장치를 만들어야 한다:

$ pactl load-module module-null-sink sink_name=virmic_output sink_properties=device.description=virmic_output

이렇게 실행하면 DE의 사운드 장치에 virmic_output이란 이름의 장치가 하나 생성되었을 것이다.

KDE Plasma 시스템 트레이의 소리 설정. virmic_output이 생겼다.

이번엔 위에서 만든 장치의 출력을 입력으로 매핑한다:

$ pactl load-module module-remap-source master=virmic_output.monitor source_name=virmic_input source_properties=device.description=virmic_input

PulseAudio는 자동으로 .monitor가 이름 뒤에 붙은 sink 장치의 출력을 입력으로 하는 모니터 장치를 만든다. 이걸 사용하여 virmic_input이란 입력 장치를 생성한다.

virmic_input이란 장치가 생겼다.

이제 virmic_output으로 출력을 한다면 자동으로 virmic_input에 입력으로 되돌아온다.

약간의 딜레이가 보이지만 어쨌든 출력이 입력으로 돌아온다.

한 예시로 브라우저에 유튜브를 켜고 브라우저의 출력을 virmic_output으로 하고 디스코드의 녹음장치를 virmic_input으로 해보자.

KDE plasma는 이렇게 쉽게 프로그램마다 출력 장치를 다르게 할 수 있다.

브라우저 출력이 디스코드의 입력으로 사용된다.

이 설정의 한가지 문제점은 내가 브라우저의 소리를 들을 수 없다는 점이다. 이걸 해결하는 방법은 다음 글에서 설명할 예정이다.

댓글