ฉันจะสลับเสียงด้วย amixer ได้อย่างไร


48

รวมถึง Natty ฉันสามารถสลับ (ปิดเสียง / เปิดเสียง) ระดับเสียงด้วย 'Master' ได้ตลอดเวลา

amixer sset Master toggle

คำสั่งที่ฉันเชื่อมโยงกับการผูกขอบใน CompizConfig-Manager

ตอนนี้หลังจากติดตั้ง Oneiric คำสั่งจะปิดเสียง แต่ไม่เปิดเสียง ฉันลองมันใน Terminal แต่มันก็ไม่ทำงาน มันเปลี่ยน ' Mono: Playback 68 [78%] [-14.25dB] [off] ' เป็น '... [on]' แต่เสียงยังคงปิดเสียงอยู่ดังนั้นฉันจะต้องเปิดเสียงผ่าน 'ตัวบ่งชี้เสียง' ใน แผงหน้าปัด.

ฉันจะทำให้เรื่องนี้ทำงานอีกครั้งได้อย่างไร อะไรเปลี่ยนแปลงไปตั้งแต่ Natty ไม่มีใครรู้ว่าคำสั่ง 'ตัวบ่งชี้เสียง' ใช้เพื่อสลับระดับเสียงหรือไม่


และเพื่อทำให้มันแปลกยิ่งกว่าเดิม: บนแล็ปท็อปอื่นของฉันที่ฉันอัพเกรดจาก Natty เป็น Oneiric แทนที่จะติดตั้งใหม่มันก็ยังใช้งานได้
joschi

คำตอบ:


51

สิ่งนี้ใช้ได้กับฉันในวันที่ 13.04 ทั้งแบบปิดเสียงและเปิดเสียง:

amixer -D pulse set Master 1+ toggle

มันระบุชีพจรเสียงเพื่อให้แน่ใจว่าเปิดเสียงเปิดเสียงทุกอย่าง


ทำงานบน lubuntu 13.10 เคยมองหาสิ่งนี้เพื่อ WEEKS!
luisgonzalez

1
แก้ไข: มันจะทำงานเฉพาะเมื่อทำงานเป็นคำสั่งใน terminal แต่เมื่อฉันพยายามที่จะกำหนดค่าเป็นสำคัญผูกพันฉันได้รับ: ไดเรกทอรีบ้านไม่สามารถเข้าถึงการอนุญาตปฏิเสธ ALSA lib pulse.c: 243: (pulse_connect) PulseAudio: ไม่สามารถเชื่อมต่อ: เชื่อมต่อถูกปฏิเสธ amixer: ผสมแนบข้อผิดพลาดการเต้นของชีพจร: เชื่อมต่อถูกปฏิเสธ
luisgonzalez

5
มันทำงานได้ดียิ่งขึ้นโดยไม่มี1+พารามิเตอร์
J. Katzwinkel

3
ยังคงใช้งานได้ใน 17.10 (เก่ง) ฉันใช้นี้ผูกสื่อ i3:bindsym XF86AudioMute exec --no-startup-id amixer -D pulse set Master 1+ toggle
โจเอล

2
อะไรคือสาเหตุของ 1+?
Gayan Weerakutti

16

ฉันใช้สคริปต์นี้เป็นวิธีแก้ปัญหา:

#!/bin/bash

CURRENT_STATE=`amixer get Master | egrep 'Playback.*?\[o' | egrep -o '\[o.+\]'`

if [[ $CURRENT_STATE == '[on]' ]]; then
    amixer set Master mute
else
    amixer set Master unmute
    amixer set Front unmute
    amixer set Headphone unmute
fi

ฉันทำสิ่งที่แตกต่างamixer scontentsก่อนโทรออกamixer set Master muteและหลังจากโทรแล้วและยกเลิกการปิดเสียงทุกอย่างโดยใช้ GUI เพื่อหาสิ่งที่จำเป็นในการยกเลิกการปิดเสียง


  1. ด้วยประเภทเสียงamixer scontents > ~/before(คุณจะได้รับไฟล์ที่มีสถานะของช่องเสียงทั้งหมด)
  2. จากนั้นสลับระดับเสียงด้วย amixer set Master toggle
  3. สร้างไฟล์สถานะชาแนลที่สองด้วย amixer scontents > ~/after
  4. สลับเสียงอีกครั้งamixer set Master toggleซึ่งควรจะปรับระดับเสียงกลับไปที่ระดับก่อนคำสั่งสลับแรก
  5. สร้างไฟล์ที่สามด้วย amixer scontents > ~/afterafter

ตอนนี้คุณมีไฟล์สามไฟล์ที่บอกคุณว่าสถานะของช่องเสียงที่ใช้สำหรับเสียงปกตินั้นถูกปิดด้วยเสียงamixer set Master toggleและไฟล์ใดที่ไม่ได้เปิดอีกครั้ง

ในการเปรียบเทียบไฟล์อย่างง่ายดายและดูความแตกต่าง (ช่องที่ปิดเสียงและไม่เปิดเสียงหลังจากนั้น) คุณสามารถใช้meldจาก Software Center เริ่มต้นจากนั้นเปิดไฟล์ทั้งสามและบนแถบเลื่อนคุณจะเห็นว่ามีความแตกต่างระหว่างไฟล์ใดบ้าง ใช้ชื่อชาแนลที่พบเพื่อเพิ่มลงในสคริปต์ที่อธิบายไว้ข้างต้น


น่าเสียดายที่สคริปต์ปิดเสียง แต่ไม่ได้เปิดเสียง
joschi

นั่นอาจเป็นเพราะสิ่งที่คุณต้องได้รับการเปิดเสียงไม่ได้เรียกว่า "ด้านหน้า" และ "หูฟัง" เหมือนอยู่ในระบบของฉัน
Jim Hunziker

ฉันยังทำสิ่งที่แตกต่างและพบว่าสิ่งที่ขาดหายไปสำหรับสคริปต์เพื่อทำงานบนคอมพิวเตอร์ของฉันตอนนี้ก็ใช้ได้ ขอบคุณมาก.
joschi

5

ฉันไม่สามารถปิดเสียงได้เพื่อสลับอย่างถูกต้อง ไม่ว่าฉันจะใช้ CLI และพิมพ์ใน Amixer sset Master toggle หรือกดปุ่ม toggle ของ HP pavillion ฉันจะได้รับผลลัพธ์เดียวกัน: หากเปิดใช้งานเสียงอยู่มันจะปิด Master channel และ PCM channel โดยอัตโนมัติ จากนั้นเมื่อฉันกดปุ่มสลับอีกครั้ง (cli หรือคีย์) มันจะเปลี่ยนเป็น Master เสมอ แต่ให้ PCM ปิดเสียงอยู่ สำหรับอุปกรณ์ของฉัน (HP Pavilion DV6 ที่ใช้ Xubuntu Oneric) นี่หมายความว่าเสียงจะปิดแม้จะเปิดเครื่องอยู่ เมื่อเรียกใช้จาก CLI - ผลลัพธ์เดียวกัน ถ้าด้วย cli ฉันสลับ PCM ก็จะปิดช่องทางหลักและอีกครั้งจะไม่เปิดอีกครั้งแม้ว่ามันจะสลับ PCM อย่างถูกต้อง

สคริปต์ที่ทำงานคือ:

#!/bin/bash
    if amixer -c 0 get Master | grep -q off
then
    amixer set Master unmute
    amixer set PCM unmute

else
    amixer set Master mute
fi

จากนั้นฉันใช้ Xubuntu keybindings (การตั้งค่า> ตัวจัดการการตั้งค่า> แป้นพิมพ์> ทางลัดแอปพลิเคชัน) เพื่อเรียกดูสคริปต์ (ฉันเรียกมันว่า sndfx.sh และตั้งค่าให้สามารถเรียกใช้งานได้โดยการคลิกขวาที่ thunar จากนั้นฉันก็กำหนดปุ่มลัด HP Pavilion ให้กับมันโดยแตะปุ่มนั้น ตอนนี้มันสลับอย่างถูกต้อง - ยอดเยี่ยม หวังว่านี่จะช่วยคนอื่นได้

ความสงบ


2

หากฉันไม่เข้าใจผิดมันเป็นข้อผิดพลาดที่ทำให้ช่องทางผสมอื่น ๆ ปิดเสียงและเปิดเสียง หากต้องการปิดเสียงให้ลอง

amixer ตั้งค่า Master 0;

ลองเปิดเสียง

amixer ตั้งค่า Master 1% +; amixer ตั้งค่า Master 7dB +;


คำสั่งเหล่านี้ทำงานได้ แต่พวกเขาไม่ให้ฉันสลับระดับเสียงด้วยคำสั่งเดียวที่ฉันสามารถรวมกับการผูกขอบ
joschi

1
ถ้าใครมีความสนใจในรายงานข้อผิดพลาดที่เกี่ยวข้องดูที่นี่
joschi

2

ลองสคริปท์ส่วนนี้ ... ใช้งานได้

https://wiki.archlinux.org/index.php/PulseAudio#volume_control


ฉันยืนยันว่ามันใช้งานได้ในการตั้งค่าของฉันคุณสามารถเขียนขั้นตอนในการใช้งานนี้ในรูปแบบปัจจุบันที่ผู้ใช้รายอื่นไม่ได้ใช้
Mateo

1

หากคุณต้องการแทนที่ amixer ใน. lircrc สำหรับ remotecontrol ของคุณที่ทำงานกับ lirc คุณสามารถลองบรรทัดต่อไปนี้ ต้องแน่ใจว่าได้ติดตั้ง xmacro การควบคุมระดับเสียงใช้งานได้อีกครั้งในขณะนี้

begin
        prog = irexec
        button = KEY_VOLUMEUP
        repeat = 1
        delay = 2
        config = echo KeyStrPress XF86AudioRaiseVolume KeyStrRelease XF86AudioRaiseVolume | xmacroplay $DISPLAY
end
begin
        prog = irexec
        button = KEY_VOLUMEDOWN
        repeat = 1
        delay = 2
        config = echo KeyStrPress XF86AudioLowerVolume KeyStrRelease XF86AudioLowerVolume | xmacroplay $DISPLAY
end
begin
        prog = irexec
        button = KEY_MUTE
        config = echo KeyStrPress XF86AudioMute KeyStrRelease XF86AudioMute | xmacroplay $DISPLAY
end

0

เคล็ดลับคือการทำให้สถานะของลำโพงหรือหูฟังเป็นไปตามสถานะของช่องสัญญาณหลักขึ้นอยู่กับว่าคุณได้เสียบหูฟังหรือไม่ สคริปต์นี้ใช้กับแล็ปท็อป Dell Latitude รุ่นเก่าของฉัน:

#!/bin/bash

amixer -q sset Master toggle

MASTER_STATE=`amixer get Master | awk -F"dB] " 'NR == 5 {print $2;}'`
HEADPHONES_PLUGGED=`amixer contents | grep -A 2 Headphone\ Jack | awk -F"=" 'NR == 3 {print $2;}'`

if [[ $HEADPHONES_PLUGGED == 'on' ]]; then
    SLAVE="Headphone"
else
    SLAVE="Speaker+LO"
fi

if [[ $MASTER_STATE == '[on]' ]]; then
    amixer -q sset $SLAVE unmute
else
    amixer -q sset $SLAVE mute
fi

คุณอาจต้องตรวจสอบช่องของคุณด้วย amixer บนคอมพิวเตอร์ของคุณและเปลี่ยนคำจำกัดความ SLAVE ตามนั้น นอกจากนี้สตริง grep "Headphone \ Jack" ในคำจำกัดความ HEADPHONES_PLUGGED อาจต้องเป็นอย่างอื่น


-1

กำลังดุร้ายเปิดเสียง:

for i in $(amixer |grep -o \'.*\'); do amixer set $i unmute; done

2
ฉันไม่คิดว่าจะปิดเสียง 80 และอุปกรณ์อื่น ๆ เป็นความคิดที่ดี ซึ่งรวมถึงไมโครโฟนซึ่งสามารถนำไปสู่ลูปการตอบกลับที่ไม่ต้องการ ทำfor i in $(amixer |grep -o \'.*\'); do echo amixer set $i unmute; doneก่อนเพื่อดูว่าจะทำอะไร
ผู้ใช้ที่ไม่รู้จัก
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.