가상 수신기에서 직접 ".monitor"를 가져올 수 없는 거의 모든 응용 프로그램에서 허용되는 마이크를 가질 수 있도록 몇 가지 가상 소스를 만들려고 합니다.
기본적으로 제가 만들 계획은 다음과 같습니다.
For System Audio recording :
Any Application Audio -> PulseEffects(apps) -> A_SINK -> alsa-card......
A virtual mic so I can pass an output as a input :
FFMPEG -> MIC_IN -> MIC_OUT
Combined
A_SINK ==========\
|=> Mixed -> Mixed_OUT
MIC_OUT =========/
지금까지는 매우 좋았습니다. 몇 가지 테스트를 거친 후 다음과 같은 결과를 얻었습니다.
For System Audio recording :
Application -> module-null-sink("TIRTAGT_SINK") -> module-loopback("alsa_output.pci.analog-stereo")
For virtual mic :
FFMPEG -> module-null-sink("TIRTAGT_MIC_IN") -> module-remap-source(master="TIRTAGT_MIC_IN.monitor", source_name="TIRTAGT_MIC_OUT")
For Combined Mic and System Audio :
module-loopback(source="TIRTAGT_SINK.monitor") =====\
|==> module-null-sink("TIRTAGT_Mixed")
module-loopback(source="TIRTAGT_MIC_OUT") ==========/ ||
\/
module-remap-source(master="TIRTAGT_Mixed.monitor" source_name="TIRTAGT_Mixed_OUT")
/home/matthewtirta/.config/pulse/default.pa
모든 것이 잘 작동했기 때문에 파일 끝에 다음 줄을 추가하도록 수정했습니다 .
### Import addon for additional configuration
.nofail
.include /home/matthewtirta/.config/pulse/presets
그리고 해당 명령을 디렉토리에 넣었습니다 /home/matthewtirta/.config/pulse/presets
.
- 시스템 오디오 녹음(00-TIRTAGT_SINK.pa):
load-module module-null-sink sink_name='TIRTAGT_SINK' sink_properties=device.description='TIRTAGT_SINK'
load-module module-loopback source="TIRTAGT_SINK.monitor" sink="alsa_output.pci-0000_05_00.6.analog-stereo" latency_msec=25
set-default-sink TIRTAGT_SINK
- 가상 마이크의 경우:
load-module module-null-sink sink_name="TIRTAGT_MIC_IN" sink_properties=device.description='TIRTAGT_MIC_IN'
load-module module-remap-source master="TIRTAGT_MIC_IN.monitor" source_name="TIRTAGT_MIC_OUT" source_properties=device.description='TIRTAGT_MIC_OUT'
set-default-source TIRTAGT_MIC_OUT
- 결합된 마이크 및 시스템 오디오의 경우(02-TIRTAGT_Mixed.pa):
load-module module-null-sink sink_name="TIRTAGT_Mixed" sink_properties=device.description='TIRTAGT_Mixed'
load-module module-loopback source="TIRTAGT_SINK.monitor" sink="TIRTAGT_Mixed" latency_msec=25
load-module module-loopback source="TIRTAGT_MIC_OUT" sink="TIRTAGT_Mixed" latency_msec=25
load-module module-remap-source master="TIRTAGT_Mixed.monitor" source_name="TIRTAGT_Mixed_OUT" source_properties=device.description='TIRTAGT_Mixed_OUT'
pulseaudio -k
테스트를 위해 일반 사용자로 실행하여 pulseaudio 서버를 중지했습니다. 이 시점에서 pulseaudio는 관리되는 systemd에 의해 중지되었다가 다시 시작됩니다 pulseaudio.socket
. 그런 다음 실행하면 pavucontrol
다음과 같은 결과가 나타납니다.
load module 명령이 구성한 내용이 잘못된 것 같습니다.
그러나 나는 결과를 보는 데 너무 관심이 있었기 때문에 pavucontrol이 루프백과 리맵이 예상한 방향을 가리키지 않는 것으로 나타났음에도 불구하고 어쨌든 테스트를 시작했습니다.
이 경험은 매우 실망스러웠습니다. 이제 가상 마이크 출력(TIRTAGT_MIC_OUT)이 내 스피커에서 들립니다. 이는 어떻게든 TIRTAGT_SINK로 루핑/리디렉션되고 있음을 의미합니다... 그런 다음 다시 살펴보니 pavucontrol
실제로 TIRTAGT_SINK로 리디렉션된 것 같습니다.
그래서 재부팅을 다시 시도해보고 싶었습니다 pulseaudio -k
. 그 시점에서 systemd는 즉시 pulseaudio 서버를 다시 시작했습니다.
불행히도 같은 결과입니다.
그래서 이번에는... systemctl --user stop pulseaudio.socket pulseaudio.service
. Pulseaudio가 작동을 멈춘 것 같습니다. 그러나 실행되고 있지 않은지 확인하기 위해 다른 하나를 실행 pulseaudio -k
한 다음 수동으로 시작했습니다 pulseaudio -D
.
이제 아래와 같이 Pulseaudio가 다시 실행됩니다 pavucontrol
.
*평판이 10 미만인 사람은 최대 8개의 링크를 가질 수 있기 때문에 탭 2개를 생략했지만 이는 systemd 시나리오와 완전히 동일합니다.
루프백과 재매핑이 제 눈에는 정확해 보였기 때문에 다시 테스트하기로 결정했고 예상한 대로 정확하게 작동했습니다. 이제 FFMPEG를 실행하고 수신기를 가리키면서 데스크톱 오디오를 녹음할 수 있습니다 TIRTAGT_MIC_IN
.
스크린 레코더 캡처 TIRTAGT_Mixed_OUT
, 모든 것이 잘 작동합니다!
pulseaudio -D &
그래서 나는 systemd를 비활성화된 상태로 유지하고 세션 로그인 시 pulseaudio를 시작하기 위해 내 파일을 넣자고 생각했습니다 ~/.xsession
.
그런 다음 컴퓨터를 종료했다가 다시 시작했고 상단 패널의 xfce4-pulseaudio-plugin을 보면 pulseaudio가 온라인 상태였으므로 다시 테스트를 시작했습니다!
놀랍게도 이제 터미널에서 시작할 때 했던 작업 대신 systemd가 펄스 오디오를 시작하는 것처럼 모든 것이 엉망이 되었습니다.
여기서 무슨 일이 일어나고 있는지 잘 모르겠습니다. 도움을 주시면 대단히 감사하겠습니다!
글쎄, pulseaudio -D &
세션이 시작될 때마다 실제로 명령을 입력할 수 있지만 실제로 가능하다면 수동으로 입력하지 않는 것이 좋습니다.