ตั้งค่าอุปกรณ์สำหรับโปรแกรมใน PulseAudio หรือไม่


10

ในคอมพิวเตอร์ฉันมี 2 อุปกรณ์เสียง

เมื่อฉันเรียกใช้บางโปรแกรม (สมมติว่า Skype) ฉันสามารถ (โดยใช้ "pavucontrol" -> "PulseAudio Volume Control") การตั้งค่าเพื่อให้แอปพลิเคชันนี้จะใช้อุปกรณ์ที่กำหนดสำหรับการเล่นหรือบันทึก

แต่ - ในแอปพลิเคชันเล่น / บันทึกแท็บจะปรากฏให้เห็นเฉพาะในขณะที่มันกำลังทำอะไรบางอย่าง (เล่นหรือบันทึก)

ฉันจะตั้งค่าอุปกรณ์ต่อแอพพลิเคชั่นได้อย่างไร แต่ก่อนที่แอพพลิเคชั่นจะเริ่มบันทึกหรือเล่นเสียง?

คำตอบ:


9

ฉันไม่ทราบว่ามีการตั้งค่าหรือไฟล์การกำหนดค่าสำหรับที่ใดก็ได้ แต่สามารถทำได้ด้วยตัวแปรสภาพแวดล้อม ฉันใช้คำตอบของฉันในรายการนี้ใน PulseAudio FAQเกี่ยวกับการตั้งค่าแหล่งบันทึก ฉันได้ลองกับ output (sink ใน PulseAudio) แต่มันควรจะใช้ได้ทั้ง input และ ouput

ขั้นตอนแรกคือรับชื่อภายในของแหล่งที่มาและซิงค์ที่คุณต้องการใช้ ในการทำเช่นนั้นคุณต้องใช้pactl listคำสั่ง คำสั่งนั้นจะส่งคืนกองข้อมูล แต่ต่อไปนี้จะแสดงเพียงชื่อแหล่งที่มา:

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

รายการนั้นอาจรวมถึงชื่อสำหรับทั้งแหล่งข้อมูลปกติและแหล่งที่มาของจอภาพของ PulseAudio (ซึ่งในระบบของฉันมี "มอนิเตอร์" ในชื่อ) คุณจะต้องการใช้ชื่อแหล่งที่มาปกติของอุปกรณ์ที่คุณต้องการกำหนดเป้าหมาย

คุณสามารถทำสิ่งเดียวกันเพื่อรับชื่อ sink:

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>

ชุดคำสั่งเล็ก ๆ ที่น่ารักเพื่อค้นหาชื่อภายในตา !!
Vix

2

คุณต้องส่งออกและกำหนดตัวแปรเช่นนี้

#! / bin / ดวลจุดโทษ 
ส่งออก PULSE_SINK = "sink_name" 
ส่งออก PULSE_SOURCE = "source_name" 
command_to_run_skype

0

ฉันเขียนโมดูล Perl ที่ทำPulseAudio.pmนี้

อนุญาตให้คุณใช้ไวยากรณ์เช่นนี้

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 ยกเว้นว่าจะใช้ห้องสมุด Perl แทนที่จะบังคับให้คุณทำการแยกวิเคราะห์เอง นอกจากนี้ยังมีคุณสมบัติที่ดีอื่น ๆ

สำหรับการแสดงพอดคาสต์ของฉันฉันใช้มันเพื่อเปิดใช้งาน Skype ด้วยเช่นกัน

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

( btrlistener*ชื่อ Skype ใช้สำหรับ blogtalkradio)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.