PulseAudio में प्रोग्राम के लिए उपकरण सेट करें?


10

कंप्यूटर में मेरे पास 2 साउंड डिवाइस हैं।

जब मैं कुछ प्रोग्राम चलाता हूं (आइए स्काइप कहते हैं) मैं ("प्यूकोवंट्रोल" - "पल्सऑडियो वॉल्यूम कंट्रोल") सेटअप का उपयोग कर सकता हूं ताकि यह एप्लिकेशन प्लेबैक या रिकॉर्डिंग के लिए दिए गए डिवाइस का उपयोग करेगा।

लेकिन - प्लेबैक / रिकॉर्डिंग टैब में एप्लिकेशन तभी दिखाई देता है, जब वह वर्तमान में कुछ (प्लेबैक या रिकॉर्डिंग) कर रहा हो।

मैं प्रति एप्लिकेशन डिवाइस कैसे सेट कर सकता हूं, लेकिन इससे पहले कि एप्लिकेशन रिकॉर्डिंग शुरू कर दे या ध्वनियां न बजाए?

जवाबों:


9

मुझे नहीं पता कि इसके लिए कहीं कोई सेटिंग या कॉन्फ़िगरेशन फ़ाइल है या नहीं, लेकिन इसे पर्यावरण चर के साथ किया जा सकता है। मैंने रिकॉर्डिंग स्रोत सेट करने के बारे में PulseAudio FAQ में इस प्रविष्टि पर अपना उत्तर आधारित किया है । मैंने इसे आउटपुट (पल्सएडियो में एक सिंक) के साथ आज़माया है, लेकिन इसे इनपुट और ouput दोनों के लिए काम करना चाहिए।

पहला कदम स्रोत का आंतरिक नाम प्राप्त करना है और सिंक जिसे आप उपयोग करना चाहते हैं। ऐसा करने के लिए आपको pactl listकमांड का उपयोग करने की आवश्यकता है । वह आदेश डेटा का ढेर लौटाएगा, लेकिन निम्नलिखित केवल स्रोत नामों को सूचीबद्ध करेगा:

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

उस सूची में संभवतः नियमित स्रोतों और पल्सएडियो के मॉनिटर स्रोतों के लिए नाम शामिल होंगे (जो कि मेरे सिस्टम में नाम में "मॉनिटर" है)। आप उस उपकरण के नियमित स्रोत नाम का उपयोग करना चाहेंगे जिसे आप लक्षित करना चाहते हैं।

सिंक नाम पाने के लिए आप एक ही काम कर सकते हैं:

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>

आंतरिक नाम खोजने के लिए आज्ञाओं का प्यारा सा सेट, ता !!
विक्स

2

आपको इस तरह चर को निर्यात और असाइन करने की आवश्यकता है:

#! / Bin / श 
निर्यात PULSE_SINK = "सिंक_नाम" 
निर्यात PULSE_SOURCE = "source_name" 
command_to_run_skype

0

मैंने एक पर्ल मॉड्यूल लिखा है जो यह 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 के उत्तर के समान विचार पर काम करता है, सिवाय इसके कि आप अपना स्वयं का पार्सिंग करने के बजाय एक पर्ल लाइब्रेरी का उपयोग करते हैं। यह कुछ अन्य निफ्टी फीचर्स भी प्रदान करता है।

मेरे पॉडकास्ट शो के लिए, मैं वास्तव में स्काइप लॉन्च करने के लिए इसका उपयोग करता हूं।

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

( btrlistener*Skype नाम blogtalkradio के लिए हैं)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.