কমান্ডলাইন থেকে পালসওডিও ভলিউম পড়ুন? (আমি চাই: "প্যাকটেল জিইটি-সিঙ্ক-ভলিউম")


25

আমি যে ভলিউম স্তরটি সেট করতে পারি তা পড়তে চাই

pactl set-sink-volume $SINK $VOLUME

এটি করার কোন সহজ উপায় আছে? অনুমানের মতোই সহজ

pactl get-sink-volume $SINK

?

(আমি যা করার চেষ্টা করছি? আমি ভলিউম সেট করার জন্য প্যাকটেল ব্যবহার করি এবং এটি আমাকে ভলিউমটি 100% এর চেয়ে বেশি সেট করতে দেয় যা একটি খারাপ ধারণা (শব্দটির গুণমান হ্রাস পায়), তাই আমি একটি ছোট স্ক্রিপ্ট লিখতে যাচ্ছি যা আমি লিখব ১০০% এর উপরে যাবেন না it এটি পড়ুন res কিছু প্রান্তিকের উপরে? ১০০% সেট করুন ow নীচে? ১% যুক্ত করুন that যদি এটি করার অন্য কোনও উপায় থাকে তবে দুর্দান্ত, আমাকে বলুন! সবচেয়ে পরিষ্কার সমাধানটি সম্ভবত ডালকে কেবল থামানোর জন্য বলবে? 100% এ। তবে মূল প্রশ্নটি রয়ে গেছে, অবশ্যই কিছু উপায় থাকতে হবে ..)

আমি যদি দেবিয়ানে আছি তবে তাতে যদি কোনও পার্থক্য আসে।


pactl list sinksআপনাকে ভলিউম দেয়, তবে সেট-সিঙ্ক-ভলিউমের মতো সুন্দর কোনও সহজ বিন্যাসে নয়।
ডারোবার্ট

2
এর জিজ্ঞাসা উবুন্টুতে একটি উত্তর রয়েছে যার সাথে এর ভলিউমটি পার্স করার জন্য একটি চমৎকার পার্ল-অনেলাইনার দিয়েছেন।
Andreas Wiese

@ডারবার্ট ধন্যবাদ, আমি কেবল গ্রেপ করব এবং / বা সেখান থেকে সরিয়ে দেব!
হিগমামারু

@ আন্ড্রেসওয়েজ ধন্যবাদ, এটি দেখেনি। পার্ল কোডটিতে আমি তাত্ক্ষণিক নজর রাখলাম তবে আমি অনুমান করি যে আমি কেবল আমার নিজের নোংরা ছোট্ট স্ক্রিপ্টটি লিখব। ;-)
হিগমামারু

উত্তর:


19
pactl list sinks | grep '^[[:space:]]Volume:' | \
    head -n $(( $SINK + 1 )) | tail -n 1 | sed -e 's,.* \([0-9][0-9]*\)%.*,\1,'

আমার যা আছে তাই এটি ঝরঝরে নয়, তবে এটি আমার ব্যবহারের জন্য যথেষ্ট ছিল। আমি এটি করার উপায় খুঁজে পাইনি । pactlমাত্র এক শুধুমাত্র ডুবা জন্য তালিকা পেয়ে এই কোন উপায় আছে বলে মনে হচ্ছে না, কিন্তু তারা অর্ডার আরোহী ছাপা হয়। সুতরাং যে নির্বাচন n তম লাইন ব্যবহার tailএবং head। লক্ষ্য করুন যে ভলিউম লাইনে ডান এবং বাম চ্যানেলের জন্য পৃথক ভলিউম থাকতে পারে এবং sedবিকল্পটি কেবল প্রথমটিকে বেছে নেয়, কারণ আমার কেবল এটির প্রয়োজন ছিল।

রেকর্ডের জন্য, আমি pactl list sinks shortআমার সক্রিয় সিঙ্ক নম্বর পেতে এটি ব্যবহার করি :

pactl list short | grep RUNNING | sed -e 's,^\([0-9][0-9]*\)[^0-9].*,\1,'

সম্পাদনা 2017-10-05: পালসওডিওতে পরিবর্তনের কারণে আমাকে সেগুলি কিছুটা মুছে ফেলা হয়েছিল। আমার এখন যা আছে তা এখানে:

SINK=$( pactl list short sinks | sed -e 's,^\([0-9][0-9]*\)[^0-9].*,\1,' | head -n 1 )
NOW=$( pactl list sinks | grep '^[[:space:]]Volume:' | head -n $(( $SINK + 1 )) | tail -n 1 | sed -e 's,.* \([0-9][0-9]*\)%.*,\1,' )

আমি MOD+10 বা -10 এ সেট করেছি এবং আমি কিছু বাউন্ডারি চেক তৈরি করেছি এবং শেষ পর্যন্ত:

pactl set-sink-volume $SINK ${MOD}%

1
ধন্যবাদ! অ্যাক্টিভ সিঙ্ক নম্বর পেতে, আমাকে ব্যবহার করতে হবে pactl list sinks short | grep RUNNING | sed -e 's,^\([0-9][0-9]*\)[^0-9].*,\1,'- sinkspactl listshort
কুশিকের

দৃust়তার জন্য আমি পরামর্শ দেব LC_ALL=C pactl list sinks | grepকারণ "ভলিউম:" পাঠ্যটি ব্যবহারকারীর ভাষায় স্থানীয়করণ করা যেতে পারে।
মারিয়াস গেডমিনাস

যেহেতু আমার কেবল একটি ডুব আছে, এটি আমার জন্য একটি বাশ লিপিতে কাজ করেছে:volume=$(pactl list sinks | grep Volume | head -n1 | awk '{print $5}')
ম্যাথিয়াস ব্রাউন

11

আপনার যদি অন্য কোনও প্রোগ্রাম ব্যবহারের সীমাবদ্ধতা না থাকে তবে তা রয়েছে pamixer

আপনি এর সাথে ভলিউমটি পেতে পারেন:

$ pamixer --get-volume

4
ডেবিয়ানে, আপনি pulsemixerপ্যাকেজটি ব্যবহার করতে পারেন । এটি একই সম্পর্কে দেখায়।
জোসেফ কুফনার 21

8

নোট করুন যে টমমি কিন্টোলার উত্তরটি ডুবন্ত ব্যবহারের জন্য নির্ভর করে যাতে আপনি প্রকৃতপক্ষে সিঙ্ক নম্বরটি পেতে পারেন।

এটিও নোট করুন যে এটি নাম্বারিত সিঙ্ক সূচকগুলিতে গণনা সূচক হিসাবে একই হতে পারে । ধরা যাক, উদাহরণস্বরূপ, আমাদের কাছে 3, 1, 2 এবং 3 সিঙ্ক রয়েছে এবং এটি 3 আমাদের নির্বাচিত সিঙ্ক, আমরা তখন 2 নম্বরটি সংযোগ বিচ্ছিন্ন করে আমাদের 1 এবং 3 দিয়ে রেখেছি Now pactl list sinks | grep "^[[:space:]]Volume:"কেবলমাত্র 2 ভলিউম ক্ষেত্র আউটপুট দেবে, সুতরাং $SINK + 1'ম লাইকটি কার্যকর হবে না তার জন্য মাথা / লেজকে পাইপিং করা হবে (

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

#!/bin/sh

# Get the index of the selected sink:
getsink() {
    pacmd list-sinks |
        awk '/index:/{i++} /* index:/{print i; exit}'
}

# Get the selected sink volume
getvolume() {
    pacmd list-sinks |
        awk '/^\svolume:/{i++} i=='$(getsink)'{print $5; exit}'
}

getvolume

দ্রষ্টব্য: ভলিউম ক্ষেত্রগুলি পৃথক কিনা তা আমার জানা নেই, আমার দেখতে (দেখতে pacmd list-sinks) এর মতো দেখাচ্ছে :

volume: front-left: 42706 /  65% / -11.16 dB,   front-right: 42706 /  65% / -11.16 dB

এছাড়াও আমি কেবলমাত্র প্রথম চ্যানেলের ভলিউম পাচ্ছি (সামনের-বাম) শতাংশ ফরম্যাটে (অর্থাত্ ফিল্ড 5), আপনার চ্যানেলগুলি বিভিন্ন স্তরে থাকতে পারে।


সম্পাদনা করুন:

দ্বিতীয় ভাবাতে আপনি সম্ভবত pacmd statকম সংশ্লেষিত সমাধানের জন্য সম্ভবত ডিফল্ট সিঙ্কের নামটি পেতে চান :

#/bin/sh
getdefaultsinkname() {
    pacmd stat | awk -F": " '/^Default sink name: /{print $2}'
}

getdefaultsinkvol() {
    pacmd list-sinks |
        awk '/^\s+name: /{indefault = $2 == "<'$(getdefaultsinkname)'>"}
            /^\s+volume: / && indefault {print $5; exit}'

}

setdefaulsinkvol() {
    pactl $(getdefaultsinkname) $1
}

ধন্যবাদ! আপনার দ্বিতীয় সমাধান দুর্দান্ত কাজ করে। যাইহোক, আমি মনে করি সেটডেফুলসিংকভোল () হওয়া দরকারpactl set-sink-volume $(getdefaultsinkname) "$1"
মনিকা সেলিও

4

ভলিউম পাওয়ার জন্য আমি এটি চেষ্টা করছি:

echo `(pactl list sinks | grep "Volume: 0:")| awk '{print $3}'`

3
দ্রষ্টব্য: 'ভলিউম' স্থানীয় ভাষায় অনূদিত, সুতরাং এটি কেবল ইংরেজী সিস্টেমের জন্যই কাজ করবে।

3
আপনার যদি একাধিক সিঙ্ক থাকে তবে এটি একাধিক লাইন আউটপুট দেবে।
কাঁপানো

4

বহুভাষিক রূপ:

pactl list sink-inputs | \
grep -A15 -P "(\#|№)$SINK" | \
grep -P "\d+\s*\/\s*\d+\%" | \
head -1 | \
awk "{print \$5}"

প্যাকটেল 5.0 এ পরীক্ষিত


আপনি একটি ব্যাখ্যা যোগ করতে পারেন?
কোড বিলিং

4

যেহেতু আমি এখনও মন্তব্য করতে পারি না (@ জে জিআর এর উত্তর উন্নত করার জন্য বিশেষভাবে সাইন আপ করেছেন), আপনার ডিফল্ট সিঙ্কটি যে কোনও প্লাগইন হিসাবে রয়েছে (যে কোনও সংখ্যক লাডস্পা প্লাগইন রয়েছে) তার সম্পাদনা সমাধান XX% প্রত্যাবর্তন করবে, (পিছনের কমাটি নোট করুন ), সুতরাং এটি এর চেয়ে কিছুটা ভাল কাজ করে। দুঃখিত, আমার আঁতক-ফু খুব প্রাথমিক, আমি নিশ্চিত এটি করার আরও ভাল উপায় আছে।

পরিবর্তিত সমাধানটি '%' কে বাদ দেয় কারণ এটি রাখার মূল বিষয়টি আমি দেখতে পাই না, এবং আমরা যদি অঙ্কটি ফিরে পাই তবে আমরা গণিতে এটি ব্যবহার করতে পারি। সেটভল কেসটিও ঠিক করে দেওয়া হয়েছে, যার ক্ষেত্রে আমার ক্ষেত্রে সুনির্দিষ্ট নির্দেশাবলীর প্রয়োজন।

#/bin/sh
getdefaultsinkname() {
    pacmd stat | awk -F": " '/^Default sink name: /{print $2}'
}

getdefaultsinkvol() {
    pacmd list-sinks |
        awk '/^\s+name: /{indefault = $2 == "<'$(getdefaultsinkname)'>"}
            /^\s+volume: / && indefault {print $5; exit}' |
        awk -F"%" '{print $1}'
}

setdefaultsinkvol() {
    pactl -- set-sink-volume $(getdefaultsinkname) $1
}

2

আপনি amixerএই জাতীয় মিশ্রণকারী বিকল্পটি ব্যবহার করে পালসওডিও ভলিউমটি পড়তে পারেন।

$ amixer -c $CARD -M -D $MIXER get $SCONTROL
# CARD is your sound card number, mixer is either alsa or pulse and scontrol is the alsa device name, Master if you want to use pulse.
$ amixer -c 1 -M -D pulse get Master

Simple mixer control 'Master',0
  Capabilities: pvolume pswitch pswitch-joined
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 65536
  Mono:
  Front Left: Playback 27662 [42%] [on]
  Front Right: Playback 27662 [42%] [on]

এখন আমরা ব্যবহার করে এটি পার্স করতে grepবা sedবা perl

$ amixer -c 1 -M -D pulse get Master | grep -o -E [[:digit:]]+%
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.