অডিও আউটপুট ডিভাইস, দ্রুত সুইচ?


19

পরিস্থিতির উপর নির্ভর করে আমি আমার স্পিকার বা আমার হেডসেটটি অডিও আউটপুটের জন্য ব্যবহার করি। দেওয়া হয়েছে যে আমার হেডসেটটি একটি ইউএসবি হেডসেট এটি এর নিজস্ব অডিও ডিভাইস হিসাবে আচরণ করে।

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

আমার ইউএসবি হেডসেটে পিছনে পিছনে স্যুইচ করার কিছু সহজ / দ্রুততর উপায় থাকতে পারে তবে আমি অবাক হওয়ার কি? সম্ভবত কোনও ডেডিকেটেড ট্রে আইকন, একটি কী ম্যাপিং, বা তাই?

আমি ডিফল্ট জিনোম ডেস্কটপ সহ উবুন্টু 10.04 চালাচ্ছি।

উত্তর:


11

কমান্ড লাইন থেকে ডিফল্ট অডিও আউটপুট ডিভাইসটি পরিবর্তন করতে, আপনি pacmdপালস অডিও কমান্ড-লাইন ইউটিলিটিটি ব্যবহার করতে পারেন ।

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

#!/usr/bin/env bash

sinks=($(pacmd list-sinks | grep index | \
    awk '{ if ($1 == "*") print "1",$3; else print "0",$2 }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))

[[ ${sinks[0]} = 0 ]] && swap=${sinks[1]} || swap=${sinks[3]}

pacmd set-default-sink $swap &> /dev/null
for i in ${inputs[*]}; do pacmd move-sink-input $i $swap &> /dev/null; done

মন্তব্য:

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

7

ঠিক আছে, আপনি ইনস্টল করতে পারেন pavucontrol, এটি প্রথম ট্যাবে সাউন্ড ডিভাইস নির্বাচনের সাথে অ্যাপ্লিকেশনগুলি দেখায়, এটি আপনাকে কিছু প্রচেষ্টা বাঁচাবে। তবে আপনি যা সত্যিই আমার মনে করেন তা হ'ল আপনাকে ইউএসবি হেডসেটটি ডিফল্ট ডিভাইস হিসাবে চিহ্নিত করা উচিত, তারপরে আপনি যখনই সমস্ত শব্দে এটি প্লাগ করেন ততবারে এটি পুনঃনির্দেশিত করা হবে, এবং আপনি যখন এটি প্লাগ আউট করবেন - এটি স্পিকারগুলিতে ফিরে আসবে। নিরলস, সত্যই।


2
আপনি কীভাবে উবুন্টু যথার্থে ডিফল্ট ডিভাইস সেট করবেন?
নীল রঙের

3

প্রশ্নটি বেশ পুরানো তবে আমার উত্তরটি এখনও জিনোম 2 ব্যবহারকারীদের জন্য কার্যকর হতে পারে। আমি এখানে বর্ণিত সঠিক সমস্যার জন্য পালস অডিও মিক্সার অ্যাপলেট ব্যবহার করেছি। আপনি ঠিক প্যানেল মেনুতে ইনপুট এবং আউটপুট ডিভাইস পরিবর্তন করতে পারেন। এটি আমার সর্বাধিক সুবিধাজনক উপায়।


3

অবশ্যই অ্যাপলেট ব্যবহার করে ডিভাইসগুলি স্যুইচ করাও ঠিকঠাক কাজ করছে। তবে স্ক্রিপ্ট লেখার বিষয়ে দুর্দান্ত জিনিসটি হ'ল এটি অত্যন্ত দ্রুত। আমি উদাহরণস্বরূপ কীবোর্ড শর্টকাট Alt + s এ রাখি। সুতরাং যখন আমি হেডফোনগুলি থেকে স্পিকারগুলিতে স্যুইচ করতে চাই তখন আমাকে কেবল Alt + s টিপতে হবে।

যাই হোক। অ্যান্ড্রু বলেছেন:

আপনার যদি দুটিরও বেশি অডিও ডিভাইস থাকে এবং কোনও আলাদাতে বদলাতে চান, আপনার 7 লাইন যুক্তিকে কিছু শর্তসাপেক্ষে প্রতিস্থাপন করতে হবে।

এটাই আমি করেছি। আমি এটি ভাগ করে নিই, যদি কারওর সাথে এটির ঝামেলা থাকে:

#!/usr/bin/env bash

#sinks=($(pacmd list-sinks | grep index | \
#    awk '{ if ($1 == "*") print "1",$3; else print "0",$2 }'))
sinks=($(pacmd list-sinks | grep index | \
    awk '{ if ($1 == "*") print "1"; else print "0" }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))

#find active sink
active=0
for i in ${sinks[*]}
do
    if [ $i -eq 0 ]
        then active=$((active+1))
        else break
    fi
done

#switch to next sink
swap=$(((active+1)%${#sinks[@]}))

pacmd set-default-sink $swap &> /dev/null
for i in ${inputs[*]}; do pacmd move-sink-input $i $swap &> /dev/null; done

আমি যা আলাদাভাবে করেছি তা হ'ল) ​​ক লুপের জন্য সক্রিয় সিঙ্কটি সন্ধান করুন। এবং খ) সূচকটি 1 দ্বারা পরবর্তী সিঙ্কে স্যুইচ করুন 1 তারপরে আমি ফলাফলকে ডুবিয়ে সংখ্যা মোডুলু করি। এটি আশ্বাস দেয় যে উদাহরণস্বরূপ 3 ডুবে যাওয়ার পরে (2 + 1)% 3 = 0। সুতরাং সিঙ্ক সূচক 2 থেকে আমরা সিংক সূচক 0 এ স্যুইচ করব।

এইভাবে স্যুইচটি উপলব্ধ ডুব দিয়ে উপরের দিকে যেতে সাহায্য করে।


2

স্ক্রিপ্টগুলির জন্য ধন্যবাদ! ইনপুট (মাইক্রোফোন) এর জন্য আমি একটি অংশ যুক্ত করেছি পাশাপাশি যদি কেউ এটি ব্যবহার করতে চায় তবে:

while read line ; do
  case $line in 
    *\*\ index*) x=1 ;;
    index*) x=0 ;;
    name*) 
      source=$(echo $line | sed -e "s/.*<//;s/>.*//")
      if [[ $x = "0" ]] ; then
        pacmd set-default-source $source &> /dev/null
      fi ;;
  esac
done < <(pacmd list-sources | grep -e alsa_input -e index)

2

আপনার সাউন্ড ডিভাইসগুলির তালিকাটি ঘুরে দেখার জন্য, নিম্নলিখিত স্ক্রিপ্টটি ব্যবহার করুন:

#!/bin/bash

declare -i sinks=(`pacmd list-sinks | sed -n -e 's/\**[[:space:]]index:[[:space:]]\([[:digit:]]\)/\1/p'`)
declare -i sinks_count=${#sinks[*]}
declare -i active_sink_index=`pacmd list-sinks | sed -n -e 's/\*[[:space:]]index:[[:space:]]\([[:digit:]]\)/\1/p'`
declare -i next_sink_index=${sinks[0]}

#find the next sink (not always the next index number)
declare -i ord=0
while [ $ord -lt $sinks_count ];
do
echo ${sinks[$ord]}
if [ ${sinks[$ord]} -gt $active_sink_index ] ; then
    next_sink_index=${sinks[$ord]}
    break
fi
let ord++
done

#change the default sink
pacmd "set-default-sink ${next_sink_index}"

#move all inputs to the new sink
for app in $(pacmd list-sink-inputs | sed -n -e 's/index:[[:space:]]\([[:digit:]]\)/\1/p');
do
pacmd "move-sink-input $app $next_sink_index"
done

#display notification
declare -i ndx=0
pacmd list-sinks | sed -n -e 's/device.description[[:space:]]=[[:space:]]"\(.*\)"/\1/p' | while read line;
do
if [ $(( $ord % $sinks_count )) -eq $ndx ] ; then
    notify-send -i notification-audio-volume-high --hint=string:x-canonical-private-    synchronous: "Sound output switched to" "$line"
    exit
fi
let ndx++
done;

সমস্ত কৃতিত্ব উবুন্টু ফোরাম থেকে স্ব্বেস্তানের কাছে যায় ।


1

আমি আমার ল্যাপটপের অভ্যন্তরীণ স্পিকার এবং একটি অ্যাপল বিমানবন্দর বেস স্টেশন যা আমার স্টেরিওতে প্লাগ করা আছে তার মধ্যে স্যুইচ করার জন্য এটি করার একটি উপায় খুঁজছিলাম । আমি হটকিগুলি স্যুইচ করার জন্য বরাদ্দ করার সিদ্ধান্ত নিয়েছি। আমি চেয়েছিলাম যে অডিও পছন্দগুলি উইন্ডোটি সেকেন্ডের জন্য স্যুইচটির একটি ভিজ্যুয়াল কনফার্মেশন দিতে পপ আপ করবে এবং উইন্ডোটি বন্ধ করার জন্য wmctrl ব্যবহার করবে।

(আমি ল্যাপটপে এই কীগুলির Fn ফাংশনটি ভলিউম বৃদ্ধি এবং হ্রাস করার জন্য হটকি হিসাবে আমি সিটিআরএল + এফ 8 এবং সিআরটিএল + এফ 9 ব্যবহার করেছি যাতে সিআরটিএল ফাংশনগুলি অডিও আউটপুট পরিবর্তন করতে পারে বলে মনে হয়))

আমি নিম্নলিখিত 2 (প্রায় অভিন্ন) স্ক্রিপ্ট ব্যবহার করেছি:

#! /bin/bash
gnome-volume-control -p output &
sleep .7 
pacmd set-default-sink 1
sleep .8 
wmctrl -c "Sound Preferences"
exit

#! /bin/bash
gnome-volume-control -p output &
sleep .7 
pacmd set-default-sink 0
sleep .8 
wmctrl -c "Sound Preferences"
exit

অ্যাপল বেস স্টেশনটিতে প্রথম পরিবর্তন (যা আমি সিটিআরএল + এফ 9 দিয়েছি) এবং দ্বিতীয়টি অভ্যন্তরীণ স্পিকারগুলিতে ফিরে আসে (সিআরটিএল + এফ 8)। এটি ধরে নিয়েছে যে এগুলি কেবলমাত্র 2 টি আউটপুট ডিভাইস ইনস্টল করা আছে।


1

আমি এন্ড্রুজ স্ক্রিপ্টের উপর এটি তৈরি করে বিজ্ঞপ্তি-ওএসডি ব্যবহার করে এটি কী করেছে তা ঘোষণা করে just আপনার প্রয়োজনের পরে নামের সাথে লাইনগুলি সম্পাদনা করুন।

#!/usr/bin/env bash

sinks=($(pacmd list-sinks | grep index | \
    awk '{ if ($1 == "*") print "1",$3; else print "0",$2 }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))

[[ ${sinks[0]} = 0 ]] && swap=${sinks[1]} || swap=${sinks[3]}

pacmd set-default-sink $swap 

for i in ${inputs[*]}; do pacmd move-sink-input $i $swap &> /dev/null; done

if [ "$swap" = "0" ]; then
notify-send -u normal -i audio-volume-medium-symbolic "Sound output changed. Now using: Corsair 2.1 Speakers!" 

else
notify-send -u normal -i audio-volume-medium-symbolic "Sound output changed. Now using: Logitech G930 Headset!" 

fi


0

এখানে একটি ছোট স্ক্রিপ্ট যা বর্তমানে ফোকাসযুক্ত উইন্ডোটির জন্য অডিওটিকে ডুবিয়েছে: https://gist.github.com/rif/01ffb5e3eb45d2e4e6ebb4652b3b19ce

প্যাকএমডি এবং এক্সডটুল প্রয়োজন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.