PulseAudio에서 프로그램 용 장치를 설정 하시겠습니까?


10

컴퓨터에는 2 개의 사운드 장치가 있습니다.

일부 프로그램을 실행하면 (Skype이라고 말하면)이 응용 프로그램이 지정된 장치를 사용하여 재생 또는 녹음 할 수 있도록 ( "pavucontrol"-> "PulseAudio Volume Control"사용) 설정할 수 있습니다.

그러나-재생 / 녹음 탭 응용 프로그램은 현재 무언가를하고있는 경우에만 (재생 또는 녹음 중) 표시됩니다.

응용 프로그램별로 장치를 설정하는 방법은 있지만 응용 프로그램에서 사운드 녹음 또는 재생을 시작하기 전에 어떻게해야합니까?

답변:


9

어디서나이 설정 또는 구성 파일이 있는지는 모르지만 환경 변수로 수행 할 수 있습니다. 레코딩 소스 설정 에 대한 PulseAudio FAQ 의이 항목에 대한 답변을 바탕으로 합니다. 출력 (PulseAudio의 싱크)으로 이것을 시도했지만 입력과 출력 모두에서 작동해야합니다.

첫 번째 단계는 사용하려는 소스 및 싱크의 내부 이름을 얻는 것입니다. 그렇게하려면 pactl list명령 을 사용해야합니다 . 이 명령은 데이터 더미를 반환하지만 다음은 소스 이름 만 나열합니다.

LANG=C pactl list | grep -A2 'Source #' | grep 'Name: ' | cut -d" " -f2

이 목록에는 일반 소스와 PulseAudio의 모니터 소스 (내 시스템의 이름에 "모니터"가 있음)의 이름이 포함될 수 있습니다. 타겟팅하려는 장치의 일반 소스 이름을 사용하려고합니다.

싱크대 이름을 얻기 위해 동일한 작업을 수행 할 수 있습니다.

LANG=C pactl list | grep -A2 'Sink #' | grep 'Name: ' | cut -d" " -f2

일단 이름이 있으면 터미널에서 다음과 같은 것을 실행할 수 있습니다.

PULSE_SINK=<sink_name> PULSE_SOURCE=<source_name> <command_to_run_skype>

물론 메뉴에서 이것을 실행하려면 셸 스크립트를 작성하고 기본 명령 대신 스크립트를 사용해야 할 것입니다. 이와 같은 것이 작동해야합니다.

#!/bin/sh
set PULSE_SINK <sink_name>
set PULSE_SOURCE <source_name>
<command_to_run_skype>

내부 이름을 찾기위한 사랑스러운 작은 명령 세트, ta !!
Vix

2

다음과 같이 변수를 내보내고 할당해야합니다.

#! / bin / sh 
PULSE_SINK = "sink_name"내보내기 
PULSE_SOURCE = "source_name"내보내기 
command_to_run_skype

0

PulseAudio.pm 을 수행하는 perl 모듈을 작성했습니다 .

다음과 같은 구문을 사용할 수 있습니다.

use PulseAudio;
use constant TRACKIN  => 'pci-0000:00:1d.7-usb-0:2.3:1.0'

my $pa = PulseAudio->new;

my $sink   = $pa->get_sink_by([qw/properties device.bus_path/] => TRACKIN );
my $source = $pa->get_source_by(
  [qw/properties device.bus_path/] => TRACKIN
  , [qw/properties device.profile.name/] => 'analog-stereo'
);
$pa->exec({
  sink      => $sink
  , source  => $source
  , prog    => '/usr/bin/audacity'
});

물론 get_sink_by및의 모든 기준을 사용할 수 있습니다 get_source_by. 에서 읽습니다 pacmd info. 이것은 @moberley의 대답과 동일한 아이디어에서 작동합니다. 또한 다른 멋진 기능도 제공합니다.

내 팟 캐스트 쇼의 경우 실제로 이것을 사용하여 Skype도 시작합니다.

$pa->exec({
  sink      => $sink
  , source  => $source
  , prog    => '/usr/bin/skype'
  , args    => ['--callto','btrlistener021']
});

합니다 ( btrlistener*스카이프 이름은 blogtalkradio위한 것입니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.