शॉर्टकट स्टीरियो आउटपुट और एचडीएमआई ऑडियो आउटपुट के बीच स्विच करने के लिए शॉर्टकट


18

एचडीएमआई ऑडियो आउटपुट (मॉनिटर के) और सामान्य ऑडियो आउटपुट से सिस्टम ऑडियो जैक (हेडफ़ोन के लिए, जैसे मेरे मॉनिटर में ऑडियो आउट नहीं है) पर स्विच करने के लिए, मैं खुद को ध्वनि वरीयताओं को खोलना और हर बार सही चैनल का चयन करना चाहता हूं। क्या कोई ऐसा तरीका है जिससे मैं पैनल में टॉगल बटन बना सकता हूं या स्विचिंग के बाद से कुछ शॉर्टकट कुंजी असाइन कर सकता हूं क्योंकि मैं इतनी बार स्विचिंग करता हूं।

:aplay -l 
**** List of PLAYBACK Hardware Devices ****
card 0: Intel [HDA Intel], device 0: STAC92xx Analog [STAC92xx Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 3: HDMI 0 [HDMI 0]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 7: STAC92xx Digital [STAC92xx Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

यहाँ छवि विवरण दर्ज करें


1
+1 यह बहुत अच्छा होगा यदि मैं एक एचडीएमआई में सही एचडीएमआई डिस्प्ले आउटपुट मोड और साउंड मोड पर स्विच कर सकता हूं।
किट मेनके

क्या बेहतर होगा अभी तक अगर यह एचडीएमआई / डिस्प्ले पोर्ट ऑडियो चैनल का पता लगाता है तो यह अपने आप स्विच हो जाएगा। यह डॉकिंग के लिए है। मुझे कुछ समय पहले कुछ डॉकिंग कोड याद आ रहे हैं जो कुछ हार्डवेयर आईडी (मैक) के आधार पर कॉन्फ़िगरेशन को बदल देंगे। किसी को पता है कि फिर से क्या कहा जाता है?
एलिजा लिन

जवाबों:


10

Pulseaudio के साथ हम कमांड लाइन से आउटपुट सिंक का चयन करने में सक्षम हैं:

pacmd set-default-sink "SINKNAME"

इस कमांड का उपयोग लॉन्चर, स्क्रिप्ट या यहां तक ​​कि विभिन्न सिंक के बीच तेजी से स्विच करने के लिए कीबोर्ड शॉर्टकट को सौंपा जा सकता है। कृपया "SINKNAME" को अपने इच्छित सिंक के नाम या संख्या से बदलें। उनके संबंधित नंबरों और नामों के साथ ज्ञात सिंक की एक सूची कमांड द्वारा दी गई है:

pacmd list-sinks

नोट: कमांड लाइन इंटरफेस के माध्यम से आउटपुट सिंक को बदलना केवल तभी प्रभावी हो सकता है जब स्ट्रीम लक्ष्य डिवाइस रीडिंग अक्षम हो। यह करने के लिए संगत लाइन संपादन द्वारा किया जा सकता है /etc/pulse/default.pa:

load-module module-stream-restore restore_device=false

वैकल्पिक रूप से हम आंतरिक ऑडियो डिवाइस में ध्वनि को एक साथ आउटपुट करने के लिए pulseaudio चला सकते हैं, और वर्चुअल आउटपुट डिवाइस को जोड़ने के विकल्प के साथ paprefs चलाकर hdmi- डिवाइस पर ले जा सकते हैं:

paprefs


2
pacmd set-default-sink "alsa_output.pci-0000_00_1b.0.analog-stereo"और pacmd set-default-sink "alsa_output.pci-0000_00_1b.0.hdmi-stereo"ध्वनि वरीयता में संबंधित प्रोफाइल का चयन करने के बाद ही काम करता है। अगर मैं एचडीएमआई सेट कर रहा हूं और मैं एनालॉग स्टीरियो के लिए pacmd कमांड चलाता हूं, Sink alsa_output.pci-0000_00_1b.0.analog-stereo does not exist.तो मुझे एरोर मिल रहा है, लेकिन अगर मैं साउंड प्रेफरेंस जीयूआई से प्रोफाइल का चयन करता हूं और उसी कमांड को चलाता हूं, तो मुझे त्रुटि नहीं मिल रही है। तो यह स्विच करने में मदद नहीं कर रहा है।
21:39

@iJeeves: अपडेट के लिए संपादन देखें।
तक़ात

इसी तरह का मुद्दा। अगर मैं कमांड चलाता हूं तो वह इसे GUI में बदल देगा लेकिन ध्वनि पुनर्निर्देशित नहीं होती है। मुझे इसे काम करने के लिए GUI में मैन्युअल रूप से टॉगल करना होगा। कोई विचार?
एलिजा लिन

1
@ एलाइजालेन: आपको स्ट्रीम को आगे भी बढ़ाना पड़ सकता है: askubuntu.com/questions/71863/…
Takkat

@ टुकटकट: मैंने अभी तक इसकी कोशिश नहीं की थी लेकिन लगता है कि ठीक वही मुद्दा है जो मैं कर रहा था। बहुत बहुत धन्यवाद!
एलिय्याह लिन

7

मैंने खुद को बहुत परेशान किया और आउटपुट को टॉगल करने के लिए एक स्क्रिप्ट लिखी:

#!/bin/bash

CURRENT_PROFILE=$(pacmd list-cards | grep "active profile" | cut -d ' ' -f 3-)

if [ "$CURRENT_PROFILE" = "<output:hdmi-stereo+input:analog-stereo>" ] ; then
        pacmd set-card-profile 0 "output:analog-stereo+input:analog-stereo"
else 
        pacmd set-card-profile 0 "output:hdmi-stereo+input:analog-stereo"        
fi

और फिर इसे निष्पादित करने के लिए मेरे कीबोर्ड पर एक अप्रयुक्त कुंजी को बाध्य करें ( कीबोर्ड शॉर्टकट के लिए कस्टम कमांड को कैसे बांधें? )


यद्यपि आपने 18 महीनों में साइन इन नहीं किया था, आपको यह बताना चाहता था कि यह सबसे अच्छा उत्तर है IMO +1
WinEunuuchs2Unix

अगर मुझे दो कार्डों के बीच स्विच करने की आवश्यकता है तो मैं यह कैसे कर सकता हूं, केवल एक कार्ड के दो प्रोफाइल नहीं?
Oebele

2

फिर भी एक और सिंक स्विचर स्क्रिप्ट

Ubuntu 16.04 पर परीक्षण किया गया


लेकिन यह आपको केवल आपके इच्छित एप्लिकेशन के ऑडियो को स्विच करने देता है।

उपयोग: उस एप्लिकेशन पर ध्यान केंद्रित करें, जिसे आप इसके सिंक को बदलना चाहते हैं और इस स्क्रिप्ट को चलाना चाहते हैं। बस!!!

यह स्क्रिप्ट उस एप्लिकेशन का पता लगाती है जो फ़ोकस पर है, सभी ऑडियोज़ को इससे खेलते हुए पाता है, और उन्हें अगले उपलब्ध सिंक पर स्विच करता है।

https://gist.github.com/madacol/1a0d8569166886d2d98f073f7f5c5fe3

स्क्रिप्ट की व्याख्या करते हुए

हमें फोकस पर एप्लिकेशन के पीआईडी ​​को खोजने की आवश्यकता है

लेकिन पहले हमें xid की आवश्यकता है

xprop -root _NET_ACTIVE_WINDOW 

फिर $xidआवेदन की पाइड प्राप्त करने के लिए इसे यहां डालें

xprop -id $xid _NET_WM_PID

अब हमें उस PID से संबंधित सिंक-इनपुट की आवश्यकता है

पहले pacmd list-sink-inputsएक पंक्ति में एक सिंक-इनपुट को सूचीबद्ध करने के लिए कमांड के आउटपुट को रैखिक करें , उसी लाइन पर अपना इंडेक्स, सिंक और पिड दिखाते हुए

pacmd list-sink-inputs | grep -E 'index:|sink:|process.id' | tr '\n' ' ' | tr -d '"' | sed -e 's/index:/\n/g' | tail -n +2

आइए इसका विश्लेषण चरण दर चरण करें:

grep -E 'index:|sink:|process.idकेवल उन पंक्तियों को रखें जिनमें शामिल हैं index:, sink:याprocess.id

tr '\n' ' ' सभी लाइनों में मिलती है

tr -d '"'सभी "वर्णों को निकालता है । उद्धरण के बिना पिड प्राप्त करने के लिए आवश्यक है

sed -e 's/index:/\n/g'index:एक नई पंक्ति वर्ण के साथ सभी घटनाओं को प्रतिस्थापित करता है\n

tail -n +2 खाली होने के कारण पहली पंक्ति निकालता है

और परिणाम कुछ इस प्रकार है:

  180 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 3521
  181 sink: 1 <alsa_output.pci-0000_00_01.0.analog-stereo> application.process.id = 2733
  182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752

आइए एक पंक्ति का विश्लेषण करें कि इसका क्या अर्थ है:

  # 182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752

182सिंक-इनपुट इंडेक्स है, 0सिंक इंडेक्स है, और 13752अंत में, संबंधित एप्लिकेशन का पाइड है

फिर हम प्रत्येक पंक्ति के माध्यम से पुनरावृति करते हैं

... | while IFS= read -r line || [ -n "$line" ]; do
  sink_input_pid=$(echo $line | awk '{print $NF}')

और अंत में केवल सिंक-इनपुट के पीआईडी ​​को फ़िल्टर करें जो फ़ोकस किए गए ऐप के पीआईडी ​​से मेल खाता है

  if [ $sink_input_pid = $app_pid ]; then

डेटा निकालना

साथ awkहम तत्वों प्राप्त कर सकते हैं हम जरूरत

sink_input_index=$(echo $sink_input | awk '{print $1}')
current_sink_index=$(echo $sink_input | awk '{print $3}')

सिंक की संख्या प्राप्त करें, यह जानने के लिए कि सिंक के रोटेशन को 0 से फिर से शुरू करना चाहिए।

sink_list_size=${#sink_list_array[@]}

अगला सिंक ढूंढते हुए, हमें सिंक की सूची के माध्यम से पुनरावृति करनी है, यह जानने के लिए कि कौन सी वर्तमान_sink_index से मेल खाती है और अगले सिंक का सूचकांक जानने के लिए।

i=0
for sink in "${sink_list_array[@]}"; do
  i=$((($i+1)%sink_list_size))  # i++ mod(#sinks)
  if [ $sink = $current_sink_index ]; then
    next_sink_index=${sink_list_array[i]}
    break
  fi
done

और अंत में, हम नेक्स -इनपुट को next_sink_index में चलाने के लिए स्थानांतरित करते हैं

pacmd move-sink-input $sink_input_index $next_sink_index

Ubuntu 16.04 पर ध्यान दें:

शॉर्टकट कुंजी को कॉन्फ़िगर करते समय, मैं इसे ubuntu के शॉर्टकट मैनेजर के साथ काम नहीं कर सका। इसलिए मुझे compizconfig-settings-manager स्थापित करना पड़ा

sudo apt-get install compizconfig-settings-manager

नए उपयोगकर्ता के रूप में महान पहले उत्तर के लिए +1। चूंकि मूल प्रश्न उबंटू 11.04 के लिए था, इसलिए आपको यह बताना चाहिए कि किस संस्करण के साथ परीक्षण किया गया था।
विनयुनुच्स

@ WinEunuuchs2Unix वाह! धन्यवाद :)। मैंने शीर्षक के नीचे उबंटू का संस्करण जोड़ा।
मदाकॉल

1

यदि आप एकता के बजाय सूक्ति शैल का उपयोग कर रहे हैं, तो आप नीचे दिए गए एक्सटेंशन को स्थापित कर सकते हैं। फिर आप शीर्ष पैनल में वॉल्यूम शॉर्ट-कट से स्विच करने में सक्षम होंगे। https://extensions.gnome.org/extension/142/output-device-chooser-on-volume-menu/


1

चूंकि स्क्रीनशॉट में केवल एक साउंडकार्ड दिखाई देता है, मुझे लगता है कि इस साउंडकार्ड के आउटपुट को स्विच किया जाना चाहिए।

उदाहरण के लिए: मेरे पास एक एकीकृत साउंडकार्ड के साथ एक नोटबुक है, लेकिन डॉक होने पर इसका डिजिटल आउटपुट (एसपीडीआईएफ) है।

तो मैं जो करना चाहता था वह सक्रिय आउटपुट या "प्रोफ़ाइल" को pulseaudio में स्विच करना है।

मुझे यह आज्ञा मिली कि ऐसा बिल्कुल करें:

pacmd set-card-profile 0 output:analog-stereo
pacmd set-card-profile 0 output:iec958-stereo+input:analog-stereo

मैंने अपने वांछित आउटपुट-सेटिंग के लिए सही नाम प्राप्त करने के लिए क्या किया - यहाँ, डिजिटल आउटपुट, लेकिन एनालॉग (माइक्रो) इनपुट - था:

pacmd list | grep output

1

मैं इस समस्या का हल खोजने की कोशिश कर रहा हूं। उबंटू 11.04 के रूप में यह सीधे संभव नहीं लगता है, मैंने केवल एचडीएमआई और एनालॉग दोनों को अलग-अलग आउटपुट के रूप में जोड़ने के लिए इस गाइड को पाया, इसलिए pacmd अब 3 सिंक दिखाता है। फिर उपरोक्त आदेशों का उपयोग करके सिंक के बीच स्विच करना संभव है। ( यह भी देखें )

लेकिन जाहिर तौर पर उबंटू 11.11 में जैक डिटेक्शन सिस्टम के साथ पल्सएडियो मिलेगा। नीचे दी गई वेबसाइट के अनुसार, डेविड हेनिंगसन ने udv के माध्यम से एक डिटेक्शन को कोडित किया है ताकि पल्स ऑडियो स्वचालित रूप से अंतिम जोड़े गए आउटपुट पर स्विच हो जाए, जिसमें एक ही साउंडकार्ड के विभिन्न प्रोफाइलों के बीच स्विच करना शामिल है (जैसा कि आपके और मेरे सेटअप के साथ होता है)। ( यहां देखें )

इसलिए मुझे उम्मीद है कि यह काम करेगा, जब मैं अगले शुक्रवार को अंतिम संस्करण की कोशिश करूंगा।


1

पिछले उत्तरों में से कई के आधार पर, मैंने एक स्क्रिप्ट लिखी जो उपलब्ध लोगों के बीच वैकल्पिक रूप से प्लेबैक सिंक सेट करती है।

इसका उपयोग करने का सबसे अच्छा तरीका इसे चलाने के लिए एक कीबोर्ड शॉर्टकट बनाकर है, इसलिए हर बार जब आप उस कुंजी संयोजन को दबाते हैं तो ऑडियो अगले उपलब्ध सिंक पर पुनर्निर्देशित हो जाता है।

कोड यहाँ उपलब्ध है: https://gist.github.com/germank/7fa2fb07d45a838bf890addad8bea8c


0

मेरे मामले में एनालॉग विकल्प जहां सूची में नहीं हैं। Pavucontrol स्थापित करें: sudo apt install pavucontrol

आवेदन शुरू करके समस्या को ठीक कर सकता है:

  1. टर्मिनल के माध्यम से एप्लिकेशन प्रारंभ करें, दर्ज करके: pavucontrol(दर्ज करें)
  2. 'कॉन्फ़िगरेशन' टैब पर जाएं।
  3. इंटर्न साउंड पर एनालॉग स्टीरियो आउटपुट प्रोफाइल का चयन करें

यहाँ छवि विवरण दर्ज करें

अब मैं यहां ध्वनि कर सकता हूं और अलग-अलग प्रोफाइल (लिनक्स मिंट के तहत) चुन सकता हूं:

यहाँ छवि विवरण दर्ज करें


0

साउंड स्विचर इंडिकेटर (जिसमें पीपीए जोड़ने की आवश्यकता होती है) का एक विकल्प एक कमांड (या स्क्रिप्ट) बनाना है और इसे शॉर्टकट के साथ कॉल करना है:

मेरे मामले में hdmi-stereo-extra1+inputप्रोफ़ाइल थी, इसलिए एक पंक्ति में होगा:

[[ $(pacmd list-cards | grep "active profile" | cut -d " " -f 3-) = "<output:hdmi-stereo-extra1+input:analog-stereo>" ]] && \
     pacmd set-card-profile 0 "output:analog-stereo+input:analog-stereo" || \
     pacmd set-card-profile 0 "output:hdmi-stereo-extra1+input:analog-stereo"

आप इसे निष्पादित करने के लिए एक कस्टम शॉर्टकट ( gnome-control-center keyboard) का उपयोग कर सकते हैं ( bash -cअन्य शॉर्टकट के साथ कोई संघर्ष होने पर आपको चेतावनी देगा):

स्क्रीनशॉट

स्क्रीनशॉट

मैं उपयोग करता हूं:

  • Super + Alt + o: हेडफोन और एचडीएमआई के बीच आउटपुट को टॉगल करें।
  • Super + Alt + Up: वॉल अप
  • Super + Alt + Down: वॉल्यूम नीचे

इसके अलावा, आप एक जोड़ सकते हैं aliasआपके लिए .bashrc

Ubuntu 16.04 और 18.04 पर परीक्षण किया गया


यदि आप किसी स्क्रिप्ट पर व्यवहार से ऊपर नहीं हैं, तो मैंने @ user829996 उत्तर के आधार पर कुछ बदलाव किए हैं:

#!/bin/bash
set -euo pipefail # strict mode

activeProfile() { pacmd list-cards | grep "active profile" | cut -d " " -f 3-; }
CURRENT_PROFILE="$(eval activeProfile)"

# If it doesn't work run  pacmd list-cards  and try the other outputs from profile section
ANALOG_PROFILE="output:analog-stereo+input:analog-stereo"
HDMI_PROFILE="output:hdmi-stereo-extra1+input:analog-stereo"

if [ "$CURRENT_PROFILE" = "<output:hdmi-stereo-extra1+input:analog-stereo>" ] ; then
  pacmd set-card-profile 0 "$ANALOG_PROFILE"
else
    pacmd set-card-profile 0 "$HDMI_PROFILE"
fi

activeProfile

0

क्या कोई ऐसा तरीका है जिससे मैं पैनल में टॉगल बटन बना सकता हूं

मैंने एक संकेतक एप्लेट लिखा है जो आपको ध्वनि आउटपुट स्विच करने देता है।


उबंटू पूछने के लिए आपका स्वागत है! जब भी यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, तो उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर होगा
वॉरेन हिल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.