শেল থেকে পালস অডিও ইনপুট / আউটপুট পরিবর্তন করবেন?


38

আমার স্পিকার এবং সাধারণ মাইক্রোফোন ছাড়াও আমি মাঝে মাঝে ব্যবহার করি দুর্দান্ত ওয়্যারলেস হেডফোন।

আমি একটি ইনপুট এবং আউটপুট উত্স এবং অন্যটির মধ্যে স্যুইচ করার জন্য একটি স্ক্রিপ্ট লিখতে চাই, মূলত আমার হেডফোন এবং আমার স্পিকার + মাইক্রোফোনের মধ্যে একটি স্যুইচ।

আমি এর মধ্যে পরিবর্তন করতে চাই:

...এবং এই:

দু'টি ইনপুট এবং আউটপুটগুলির মধ্যে স্থানান্তরের স্ক্রিপ্টের কী উপায় আছে? মূলত আমি এর মতো কিছু খুঁজছি:

CURRENT_INPUT="$(get-current-input-name)"
CURRENT_OUTPUT="$(get-current-output-name)"

if [ "$CURRENT_INPUT" == "Vengeance 2000" ]; then
    set-current-input "HD Pro Webcam C920"
else 
    set-current-input "Vengeance 2000"
fi

if ["$CURRENT_OUTPUT" == "Vengeance 2000" ]; then
    set-current-output "Built-in Audio"
else
    set-current-output "Vengeance 2000"
fi

এটির স্ক্রিপ্ট করার কোনও উপায় আছে কি?


3
আপনার man pactlপালস অডিও কমান্ড লাইন বিকল্পগুলির জন্য এক নজর থাকতে পারে ।
তেরেসা ই জুনিয়র

অফ-টপিক: জিইউআই অ্যাপ্লিকেশনটি কী সেই স্ক্রিনশটগুলিতে?
নটহাগো

এটি প্রাথমিকের সিস্টেম সেটিংস।
নাফটুলি কে

উত্তর:


53

@ টেরেসা-এ-জুনিয়র হিসাবে নির্দেশিতটি pactlহ'ল ব্যবহারের সরঞ্জাম:

সবার আগে আমরা আমাদের পিএ ডুবে যাওয়ার আইডি পেতে চাই। আমার সিস্টেমে এটি আমি পাই:

$ pactl list short sinks
0       alsa_output.pci-0000_01_00.1.hdmi-surround      module-alsa-card.c      s16le 6ch 44100Hz  SUSPENDED
1       alsa_output.pci-0000_00_1b.0.analog-stereo      module-alsa-card.c      s16le 2ch 44100Hz  RUNNING

সিঙ্ক 1 বর্তমানে আমার ডিফল্ট সিঙ্ক।
তবে এখন আমি চাই যে আমার সমস্ত বর্তমান এবং ভবিষ্যতের স্ট্রিমগুলি এইচডিএমআইয়ের (অর্থাৎ ডুবন্ত 0) মাধ্যমে প্লে করা উচিত।

পালস অডিওর জন্য ডিফল্ট সিঙ্ক সেট করার জন্য একটি কমান্ড রয়েছে, তবে এটি আমার পিসিতে কোনও প্রভাব ফেলবে বলে মনে হয় না:

$ pacmd set-default-sink 0 #doesn't work on my PC :(

পরিবর্তে, নতুন স্ট্রিমগুলি সিঙ্কের সাথে সংযুক্ত রয়েছে বলে মনে হচ্ছে যে একটি স্রোত সম্প্রতি সরে গেছে।

সুতরাং চলুন প্যাকটেলকে বলি যে বর্তমানে চলমান সমস্ত স্ট্রিমগুলি ডুবতে সরাতে 0। আমাদের প্রথমে তাদের তালিকাভুক্ত করা দরকার:

$ pactl list short sink-inputs
290     1       176     protocol-native.c       float32le 2ch 44100Hz
295     1       195     protocol-native.c       float32le 2ch 44100Hz

ঠিক আছে, আমরা দুটি স্ট্রিম পেয়েছি (আইডি 290 এবং 295) যা উভয়ই ডুবির সাথে সংযুক্ত 1
আসুন তাদের ডুবে যেতে 0:

$ pactl move-sink-input 290 0
$ pactl move-sink-input 295 0

সুতরাং, এটি হওয়া উচিত। এখন আমাদের কেবল একটি স্ক্রিপ্ট তৈরি করতে হবে যা আমাদের পক্ষে কাজ করে:

#!/bin/bash

if [ -z "$1" ]; then
    echo "Usage: $0 <sinkId/sinkName>" >&2
    echo "Valid sinks:" >&2
    pactl list short sinks >&2
    exit 1
fi

newSink="$1"

pactl list short sink-inputs|while read stream; do
    streamId=$(echo $stream|cut '-d ' -f1)
    echo "moving stream $streamId"
    pactl move-sink-input "$streamId" "$newSink"
done

আপনি এটি একটি সিঙ্ক আইডি বা প্যারামিটার হিসাবে একটি সিঙ্ক নাম দিয়ে কল করতে পারেন (যেমন হয় হয় 0বা অন্য কিছু alsa_output.pci-0000_01_00.1.hdmi-surround)।

এখন আপনি এই স্ক্রিপ্টটি কোনও উদেব ইভেন্ট বা কী শর্টকাটে সংযুক্ত করতে পারেন।


1
অান্তরিক ধন্যবাদ! আমি এটিকে পাইথন স্ক্রিপ্টে পরিণত করেছি যা এটির সাথে কাজ করা সহজ এবং সহজ করে তোলে, এটি এখানে উপলভ্য ।
নাফটুলি কে


1
@ নাফতুলিজভিকে: আপনার স্ক্রিপ্টটি আর উপলভ্য নয়। যদি এখনও তা থেকে থাকে তবে [গিটহাব গিস্ট] (গিস্ট.github.com) এ পোস্ট করা বিবেচনা করুন।
ডেনিলসন সা মায়া

আর কী হলে 0 sink input(s) available.? কিন্তু সেই ছিটে ফ্ল্যাশ প্লেয়ারটি এখনও অডিও চালাচ্ছে? এবং আমি client(s) logged inবিভাগে ফ্ল্যাশ প্লেয়ারটি দেখতে পাইpacmd list
ঝিগালিন

1
$ pacmd set-default-sink INDEXএখনও আমার স্ক্রিপ্টের জন্য প্রয়োজনীয় অন্যথায় ভলিউম পরিবর্তন করার জন্য কীবোর্ড কমান্ডগুলি পুরানো সিঙ্ক উত্সটি ব্যবহার অবিরত রাখে।
মায়ল

9

নিম্নলিখিত কমান্ডগুলি পালস অডিও সাউন্ড সার্ভারটি পরিচালনা করতে ব্যবহার করা হয়েছে:

pacmd - Used to reconfigure a PulseAudio sound server during runtime.
pactl - Used to control a running PulseAudio sound server.

তারা কীভাবে কাজ করে তার কয়েকটি উদাহরণ এখানে।

pacmd list-sinks:: সম্ভাব্য ডুবির তালিকা বা সূচী সংখ্যা

pacmd set-default-sink [sinkname]:: ডিফল্ট আউটপুট সিঙ্ক সেট করুন

pacmd set-default-source [sourcename]:: ডিফল্ট ইনপুট সেট করুন

pacmd set-sink-volume [index] [volume]:: সিঙ্ক ভলিউম সেট করুন

pacmd set-source-volume index volume:: ভলিউম নিয়ন্ত্রণ পরিসীমা 0 - 65536 (ভলিউমের সংখ্যার কম সংখ্যা)

এগুলি কেবলমাত্র আমি উইকি ও ম্যান পৃষ্ঠা থেকে বের করেছি। রেফারেন্স এই আরো বিস্তারিত তথ্যের জন্য। অথবা আপনি কমান্ড --helpবা manপৃষ্ঠা দেখতে পারেন ।

ইতিমধ্যে একটি কমান্ড লাইন সরঞ্জাম রয়েছে যা এই উদ্দেশ্যে কাজ করে। এটির নাম পমনিক্স । এটি পালস অডিওর জন্য একটি কমান্ড লাইন মিক্সার। প্রদত্ত লিঙ্কটি প্রকল্পগুলি গিথুব। এটি একটি বন্ধু এবং সহযোগী আর্চ লিনাক্স বিশ্বস্ত ব্যবহারকারী / বিকাশকারী দ্বারা বিকাশ করা হয়েছে। আপনি যদি আর্চটি চালাচ্ছেন না তবে আপনি উত্সটি ব্যবহার করে makeএবং এটি থেকে কেবল এটি সংকলন করতে পারেন sudo make install

$ ponymix --help
    usage: ponymix [options] <command>... 
Options:
 -h, --help              display this help and exit    
 -c, --card CARD         target card (index or name)
 -d, --device DEVICE     target device (index or name)
 -t, --devtype TYPE      device type
 -N, --notify            use libnotify to announce volume changes
     --source            alias to -t source
     --input             alais to -t source
     --sink              alias to -t sink
     --output            alias to -t sink
     --sink-input        alias to -t sink-input
     --source-output     alias to -t source-output
Device Commands:
  help                   display this message
  defaults               list default devices (default command)
  set-default            set default device by ID
  list                   list available devices
  list-short             list available devices (short form)
  list-cards             list available cards
  list-cards-short       list available cards (short form)
  get-volume             get volume for device
  set-volume VALUE       set volume for device
  get-balance            get balance for device
  set-balance VALUE      set balance for device
  adj-balance VALUE      increase or decrease balance for device
  increase VALUE         increase volume
  decrease VALUE         decrease volume
  mute                   mute device
  unmute                 unmute device
  toggle                 toggle mute
  is-muted               check if muted
Application Commands:
  move DEVICE            move target device to DEVICE
  kill DEVICE            kill target DEVICE
Card Commands:
  list-profiles          list available profiles for a card
  list-profiles-short    list available profiles for a card(short form)
  get-profile            get active profile for card
  set-profile PROFILE    set profile for a card

আরে এই উত্তরের জন্য আপনাকে ধন্যবাদ! এটি আমাকে এটির সাথে সম্পর্কিত একটি সমস্যা সহ একটি টন সহায়তা করেছিল ।
KlaymenDK

5

ফেডোরা 20 চলমান আমার ল্যাপটপে, এইচডিএমআই আউটপুটটি ডিফল্ট প্রোফাইলে ডুবন্ত হিসাবে তালিকাভুক্ত নয় , তবে নিজেই আলাদা প্রোফাইল হিসাবে রয়েছে ।

আমার মতো এই মাত্র 1 টি ডুব আছে, আমার ল্যাপটপ স্পিকারগুলিতে দুর্দান্ত সঙ্গীত বাজছে:

$ pactl list short sinks
8   alsa_output.pci-0000_00_1b.0.analog-stereo  module-alsa-card.c  s16le 2ch 44100Hz   RUNNING

আমি যদি চালনা করি pactl set-card-profile 0 output:hdmi-stereoতবে HDMI এর মাধ্যমে দুর্দান্ত সংগীত বাজছে। আমি পাই:

$ pactl list short sinks
14  alsa_output.pci-0000_00_1b.0.hdmi-stereo    module-alsa-card.c  s16le 2ch 44100Hz   RUNNING

ডিফল্ট ফিরে পেতে আমি কেবল চালানো pactl set-card-profile 0 output:analog-stereo+input:analog-stereo। আমি যদি বুবুট করি তবে যে কোনও উপায়ে আবার ডিফল্ট থাকে।

আমার কার্ডের প্রোফাইলগুলির তালিকা pactl list cardsআউটপুটটিতে কোথাও is


এই তথ্যটি ইতিমধ্যে গৃহীত উত্তরের দ্বারা সরবরাহ করা হয়েছিল। আপনার কাছে যুক্ত করার মতো আরও কিছু না থাকলে দয়া করে অন্য ব্যবহারকারীর উত্তরগুলি অনুলিপি করবেন না। এটি কেবলমাত্র অন্য উত্তরকে পুনরায় চাপ দেয় এবং নতুন বা দরকারী কিছুই সরবরাহ করে না!
slm

5
set-card-profileআগে উল্লেখ করা হয়নি, এবং এটি এই উত্তরের সবচেয়ে গুরুত্বপূর্ণ তথ্য।
স্পাইডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.