특정 프로세스의 오디오를 특정 오디오 장치 또는 채널로 리디렉션

특정 프로세스의 오디오를 특정 오디오 장치 또는 채널로 리디렉션

하나의 프로세스(또는 상위 프로세스 ID를 알고 있는 프로세스 그룹)에서 생성된 오디오를 PulseAudio로 리디렉션한 다음 특정 오디오 하드웨어(또는 특정 채널)로 리디렉션하려면 어떻게 해야 합니까?

PulseAudio의 최소 구성은 어떻게 되어야 합니까?

예를 들어 사인파를 생성하는 Python 스크립트가 있는데 해당 사운드를 서브우퍼로 리디렉션하고 싶습니다(5.1 오디오 시스템이 있습니다). 저는 단지 그 과정에서 생성되는 모든 소리를 포착하고 싶었을 뿐입니다.

답변1

다음은 몇 가지 질문입니다. :-)

1a) 일반적으로 Pulseaudio용 사운드를 생성하는 응용 프로그램은 이름으로 Pulseaudio 서버에 자신을 식별하고 해당 이름을 사용하여 식별하면 오디오 스트림을 특정 하드웨어 수신기로 리디렉션할 수 있습니다.

1b) 프로세스에서 stdout일부 형식이나 이와 유사한 형식으로 작성하여 사운드를 생성하는 경우 이를 파이프로 연결 paplay한 다음 마치 Pulseaudio 애플리케이션에서 나온 것처럼 처리할 수 있습니다. -n프로세스에 특정한 클라이언트 이름을 지정하려면 이 옵션을 사용하십시오 (예 paplay -n "sinusoid generator": ).

1c) 프로세스에서 ALSA를 사용하여 사운드를 생성하는 경우 pulse다음에서 기본 장치를 선택합니다 .asoundrc.

pcm.!default pulse
ctl.!default pulse

이렇게 하면 호환성 레이어가 추가되고 사운드가 Pulseaudio로 전달되며, 여기에서 특정 이름을 가진 응용 프로그램으로 다시 표시됩니다.

1d) 프로세스에서 소리가 다르게 생성되는 경우 자세한 내용을 알려주셔야 합니다.

2a) GUI를 사용하여 애플리케이션의 Pulseaudio 사운드 출력을 특정 수신기로 리디렉션할 수 있습니다 pavucontrol. 표준 Pulseaudio 설정에는 어떤 응용 프로그램이 어떤 수신기를 사용하는지 기억하고 다음에 응용 프로그램이 시작될 때 이러한 할당을 자동으로 복원하는 모듈이 포함되어 있습니다. 따라서 이 작업은 한 번만 수행하면 됩니다.

2b) 명령줄에서 pacmd move-sink-inputother pacmd및 after를 사용하여 grep원하는 이름을 얻을 수도 있습니다. 그러나 GUI를 사용하는 것이 더 쉽습니다.

3a) 채널이 아닌 전체 오디오 스트림만 이동할 수 있습니다. 그러나 하나의 수신기에서 여러 스트림을 동시에 재생할 수 있으므로 사인파 발생기가 서브우퍼 채널에서만 5.1 오디오를 생성하고 사인파가 서브우퍼 채널에서만 재생되는 경우 동시에 5.1 다른 사운드가 재생되는 시간 오디오 시스템에서.

paplay3b) (sa)를 사용하면 사인 곡선이 서브우퍼 채널에서 재생되는지 확인할 --channels수 있습니다. 자세히보다.--channel-mapman paplay

3c) 위의 방법 중 어느 것도 효과가 없으면 하드웨어 수신기 위에 추가(가상) 수신기를 만들고 채널을 다시 매핑할 수 있습니다(예: 단일 모노 수신기 입력 -> 서브우퍼 채널 출력).

4) 대부분의 배포판에서 사용되는 표준 Pulseaudio 구성이면 충분합니다. 사용하지 않을 모듈과 패키지를 식별하고 제거하여 더 최소화하는 것은 가능하지만 상당한 작업이 필요합니다(물론 배포판에 따라 다름).

관련 정보