অ্যানালগ স্টেরিও আউটপুট এবং এইচডিএমআই অডিও আউটপুট এর মধ্যে স্যুইচ করতে শর্টকাট


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 যদি আমি একটি কিপ্রেসে সঠিক HDMI ডিসপ্লে আউটপুট মোড এবং শব্দ মোডে স্যুইচ করতে পারি তবে এটি দুর্দান্ত।
কিট মেনকে

এর চেয়ে ভাল আর কী হতে পারে যদি এটি এই এইচডিএমআই / ডিসপ্লে পোর্ট অডিও চ্যানেলটি সনাক্ত করে তবে এটি এটিকে স্বয়ংক্রিয়ভাবে স্যুইচ করবে। এটিই ডকিংয়ের জন্য। আমি কিছুক্ষণ আগে কিছু ডকিং কোড মনে করেছি যা নির্দিষ্ট হার্ডওয়্যার আইডি (ম্যাক) এর ভিত্তিতে কনফিগারেশন পরিবর্তন করবে will যে আবার কি বলা হয় কেউ জানেন?
লেন

উত্তর:


10

সঙ্গে pulseaudio আমরা কম্যান্ড লাইন থেকে আউটপুট বেসিনে নির্বাচন করতে পারবেন:

pacmd set-default-sink "SINKNAME"

এই কমান্ডটি একটি লঞ্চ, স্ক্রিপ্ট বা এমনকি বিভিন্ন সিঙ্কের মধ্যে দ্রুত স্যুইচিংয়ের জন্য একটি কীবোর্ড শর্টকাটে বরাদ্দ করা যেতে পারে। আপনার পছন্দসই সিঙ্কের নাম বা সংখ্যা দ্বারা দয়া করে "SINKNAME" প্রতিস্থাপন করুন। কমান্ড দ্বারা তাদের সম্পর্কিত সংখ্যা এবং নামের সাথে পরিচিত ডুবগুলির একটি তালিকা দেওয়া হয়েছে:

pacmd list-sinks

দ্রষ্টব্য: কমান্ড লাইন ইন্টারফেসের মাধ্যমে আউটপুট সিঙ্ক পরিবর্তন করা কেবল তখনই কার্যকর হবে যদি স্ট্রিম টার্গেট ডিভাইস পড়ানো অক্ষম থাকে। এতে করপোরেশন লাইনটি সম্পাদনা করে এটি করা যেতে পারে /etc/pulse/default.pa:

load-module module-stream-restore restore_device=false

বিকল্পভাবে আমরা একযোগে আউটপুট শব্দ অভ্যন্তরীণ অডিও ডিভাইস, এবং HDMI-ডিভাইস চলমান দ্বারা করতে pulseaudio চালাতে পারে paprefs একটি ভার্চুয়াল আউটপুট ডিভাইস যোগ করার বিকল্প:

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"সাউন্ড পছন্দগুলিতে সম্পর্কিত প্রোফাইল নির্বাচন করার পরে কেবল কাজ করে। যদি আমার এইচডিএমআই সেট থাকে এবং আমি এনালগ স্টেরিওর জন্য প্যাকএমডি কমান্ডটি চালনা করি তবে আমি ইরার পাচ্ছি Sink alsa_output.pci-0000_00_1b.0.analog-stereo does not exist.তবে আমি যদি সাউন্ড প্রফারেন্সস জিইউআই থেকে ম্যানুয়ালি প্রোফাইলটি নির্বাচন করি এবং একই কমান্ডটি চালাই তবে আমি ত্রুটি পাচ্ছি না। সুতরাং এটি স্যুইচ করতে সাহায্য করছে না।
আইজিভস

@ আইজিভস: আপডেটের জন্য সম্পাদনা দেখুন।
তাকত

অনুরূপ ইস্যু। আমি যদি কমান্ডটি চালিত করি তবে এটি দৃশ্যত এটি জিইউআইতে পরিবর্তন করবে তবে শব্দটি পুনঃনির্দেশ করে না। এটি কাজ করার জন্য আমাকে জিইউআইতে ম্যানুয়ালি টগল করতে হবে। কোন ধারনা?
এলিজা লিন

1
@ এলিজাহলিন: আপনারও এই স্ট্রিমটি সরাতে হতে পারে: আসুবুন্টু.com
18১6363

@ তক্কাত: আমি এখনও চেষ্টা করে দেখিনি তবে এটাই মনে হচ্ছে যে আমার সঠিক সমস্যাটি ছিল। অনেক ধন্যবাদ!
এলিজা লিন

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

আমার যদি কেবল একটি কার্ডের দুটি প্রোফাইল না হয়ে দুটি কার্ডের মধ্যে স্যুইচ করতে হয় তবে আমি কীভাবে এটি করতে পারি?
ওবেলে

2

তবুও অন্য সিঙ্ক সুইচার স্ক্রিপ্ট

উবুন্টু 16.04 এ পরীক্ষা করা হয়েছে


তবে এটি আপনাকে যে অ্যাপ্লিকেশনটি চায় তার কেবল অডিওটি স্যুইচ করতে দেয়।

ব্যবহার: আপনি যে অ্যাপ্লিকেশনটির সিংক পরিবর্তন করতে চান এবং এই স্ক্রিপ্টটি চালাতে চান তাতে ফোকাস দিন। এটাই!!!

এই স্ক্রিপ্টটি এমন অ্যাপ্লিকেশনটি সনাক্ত করে যা ফোকাসে রয়েছে, এটি থেকে সমস্ত অডিও খেলছে এবং তাদের পরবর্তী উপলব্ধ সিঙ্কে স্যুইচ করে।

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

স্ক্রিপ্ট ব্যাখ্যা

ফোকাসে আমাদের অ্যাপ্লিকেশনটির পিআইডি সন্ধান করতে হবে

তবে প্রথমে আমাদের জিড দরকার

xprop -root _NET_ACTIVE_WINDOW 

তারপরে $xidঅ্যাপ্লিকেশনটির পিড পেতে এটি এখানে .োকান

xprop -id $xid _NET_WM_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[@]}

পরবর্তী সিঙ্কটি সন্ধান করে আমাদের ডুবে যাওয়া তালিকার মধ্য দিয়ে পুনরাবৃত্তি করতে হবে, কারটি কারেন্ট_সিন্ক_ইন্ডেক্সের সাথে মেলে এবং পরবর্তী সিঙ্কের সূচিটি জানতে হবে।

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

এবং অবশেষে, আমরা পরবর্তী_সিংক_ইন্ডেক্সে খেলতে সিঙ্ক-ইনপুটটি সরিয়ে নিয়েছি

pacmd move-sink-input $sink_input_index $next_sink_index

উবুন্টু 16.04 এ নোট:

শর্টকাট কীটি কনফিগার করার সময়, আমি এটি উবুন্টুর শর্টকাট পরিচালক দিয়ে কাজ করতে পারি না make সুতরাং আমি compizconfig- সেটিংস-পরিচালক ইনস্টল করতে হবে

sudo apt-get install compizconfig-settings-manager

নতুন ব্যবহারকারী হিসাবে দুর্দান্ত প্রথম উত্তরের জন্য +1। যেহেতু মূল প্রশ্নটি উবুন্টু ১১.০৪ এর জন্য ছিল আপনার কোন সংস্করণটি পরীক্ষা করা হয়েছিল তা নির্দেশ করা উচিত।
WinEunuuchs2Unix

@ WinEunuuchs2 ইউনিক্স বাহ! ধন্যবাদ :). আমি শিরোনামের নীচে উবুন্টুর সংস্করণ যুক্ত করেছি।
ম্যাডাকল

1

আপনি যদি ইউনিটির পরিবর্তে জিনোম শেল ব্যবহার করেন তবে আপনি নীচের এক্সটেনশনটি ইনস্টল করতে পারেন। তারপরে আপনি শীর্ষ প্যানেলে ভলিউম শর্ট-কাট থেকে স্যুইচ করতে সক্ষম হবেন। https://extensions.gnome.org/extension/142/output-device-chooser-on-volume-menu/


1

যেহেতু স্ক্রিনশটে কেবলমাত্র একটি সাউন্ডকার্ড দৃশ্যমান, তাই আমি মনে করি যে এই সাউন্ডকার্ডের আউটপুটটি পরিবর্তন করা উচিত।

উদাহরণস্বরূপ: আমার একটি ইন্টিগ্রেটেড সাউন্ডকার্ড সহ একটি নোটবুক রয়েছে, তবে ডক হওয়ার সময় এটিতে একটি ডিজিটাল আউটপুট (এসপিডিআইএফ) থাকে।

সুতরাং আমি যা করতে চেয়েছিলাম তা হল সক্রিয় আউটপুট বা পালসোডিওতে "প্রোফাইল" স্যুইচ করা।

আমি সেই আদেশগুলি পেয়েছি যা ঠিক এটি করে:

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

আমার কাঙ্ক্ষিত আউটপুট-সেটিং - এখানে ডিজিটাল আউটপুট, তবে এনালগ (মাইক্রো) ইনপুট - এর সঠিক নামগুলি পেতে আমি যা করেছি তা ছিল:

pacmd list | grep output

1

আমিও এই সমস্যার সমাধান খুঁজতে চেষ্টা করেছি। উবুন্টু ১১.০৪ হিসাবে এটি সরাসরি সম্ভব বলে মনে হচ্ছে না, কেবলমাত্র এইচডিএমআই এবং অ্যানালগ উভয়ই আলাদা আউটপুট হিসাবে যুক্ত করার জন্য আমি এই গাইডটি পেয়েছি, সুতরাং প্যাকএমডি এখন 3 সিঙ্ক দেখায়। তারপরে উপরের কমান্ডগুলি ব্যবহার করে সিঙ্কের মধ্যে স্যুইচ করা সম্ভব। ( আরও দেখুন )

তবে আপাতদৃষ্টিতে উবুন্টু 11.11 জ্যাক সনাক্তকরণ সিস্টেমের সাথে একটি পালস অডিও পাবে। নীচের ওয়েবসাইট অনুসারে, ডেভিড হেনিংসন উদেবের মাধ্যমে একটি সনাক্তকরণ কোডিং করেছেন যাতে পালস অডিও স্বয়ংক্রিয়ভাবে একই সাউন্ডকার্ডের বিভিন্ন প্রোফাইলের মধ্যে স্যুইচ করা সহ শেষ যুক্ত হওয়া আউটপুটটিতে স্যুইচ হয়ে যায় (যেমনটি আপনার এবং আমার সেটআপের ক্ষেত্রে রয়েছে)। ( এখানে দেখুন )

সুতরাং আমি আশা করি এটি কাজ করবে, যখন আমি পরের শুক্রবার চূড়ান্ত সংস্করণটি চেষ্টা করব।


1

পূর্ববর্তী অনেক উত্তরের উপর ভিত্তি করে, আমি একটি স্ক্রিপ্ট লিখেছিলাম যা উপলভ্য উত্তরগুলির মধ্যে প্লেব্যাক সিংকে বিকল্প করে দেয়।

এটি ব্যবহারের সর্বোত্তম উপায় হ'ল এটি চালানোর জন্য কীবোর্ড শর্টকাট তৈরি করা, সুতরাং আপনি যখনই এই কী সংমিশ্রণটি টিপেন তখন অডিওটি পরবর্তী উপলব্ধ সিঙ্কে পুনঃনির্দেশিত হয়।

কোডটি এখানে উপলভ্য: https://gist.github.com/germank/7fa2fb07d45a838bf890adddd8bea8c


0

আমার ক্ষেত্রে এনালগ বিকল্পগুলি যেখানে তালিকায় নেই। প্যাভুকন্ট্রোল ইনস্টল করুন: 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

উবুন্টু 16.04 এবং 18.04 এ পরীক্ষিত


যদি আপনি কোনও স্ক্রিপ্টে আচরণের উপরে না যেতে চান তবে আমি @ ব্যবহারকারী 829996 উত্তরের উপর ভিত্তি করে কিছু পরিবর্তন করেছি:

#!/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

প্যানেলে কোনও টগল বোতাম তৈরি করতে পারে এমন কোনও উপায় আছে কি?

আমি একটি সূচক অ্যাপলেট লিখেছিলাম যা আপনাকে সাউন্ড আউটপুট স্যুইচ করতে দেয়।


উবুন্টুকে জিজ্ঞাসা করুন স্বাগতম! যতক্ষণ এই তাত্ত্বিক প্রশ্নের উত্তর হতে পারে, এটা বাঞ্ছনীয় হবে উত্তর অপরিহার্য অংশের এখানে অন্তর্ভুক্ত করা, এবং রেফারেন্স এর জন্য লিঙ্ক প্রদান।
ওয়ারেন হিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.