Làm cách nào để chuyển đổi âm thanh với amixer?


48

Bao gồm cả Natty tôi luôn có thể chuyển đổi (tắt / bật tiếng) âm lượng âm thanh 'Master' với

amixer sset Master toggle

lệnh mà tôi đã liên kết với một ràng buộc cạnh trong CompizConfig-Manager.

Bây giờ sau khi cài đặt Oneiric, lệnh chỉ tắt âm thanh nhưng không tắt tiếng. Tôi thậm chí đã thử nó trong Terminal nhưng nó cũng không hoạt động. Nó thay đổi ' Mono: Phát lại 68 [78%] [-14,25dB] [tắt] ' thành '... [bật]' nhưng âm thanh vẫn bị tắt để tôi phải bật tiếng qua 'chỉ báo âm thanh' trong bảng điều khiển.

Làm thế nào tôi có thể làm việc này một lần nữa? Điều gì đã thay đổi kể từ Natty? Có ai biết lệnh 'chỉ báo âm thanh' sử dụng để chuyển âm lượng âm thanh không?


Và để làm cho nó thậm chí còn kỳ lạ hơn: trên máy tính xách tay khác của tôi, nơi tôi đã nâng cấp từ Natty lên Oneiric thay vì cài đặt mới, nó vẫn hoạt động.
joschi

Câu trả lời:


51

Điều này làm việc cho tôi vào ngày 13.04, cả tắt tiếng và bật tiếng:

amixer -D pulse set Master 1+ toggle

Nó chỉ định âm thanh xung để đảm bảo bật tiếng, tắt tiếng mọi thứ.


Đã làm việc trên Lubfox 13.10. Đã tìm kiếm điều này cho WEEKS!
luisgonzalez

1
EDIT: Nó chỉ hoạt động khi chạy như một lệnh trong thiết bị đầu cuối. Nhưng khi tôi cố gắng định cấu hình làm ràng buộc khóa tôi nhận được: Thư mục chính không thể truy cập: Quyền bị từ chối ALSA lib xung.c: 243: (Pulse_connect) PulseAudio: Không thể kết nối: Kết nối bị từ chối amixer: Lỗi kết nối bị lỗi: Kết nối bị từ chối
luisgonzalez

5
Nó hoạt động thậm chí còn tốt hơn mà không cần 1+tham số.
J. Katzwinkel

3
Vẫn hoạt động trong 17.10 (nghệ thuật). Tôi đang sử dụng điều này cho các ràng buộc truyền thông i3:bindsym XF86AudioMute exec --no-startup-id amixer -D pulse set Master 1+ toggle
Joel

2
Lý do cho 1+ là gì?
Gayan Weerakutti

16

Tôi đang sử dụng tập lệnh này như một cách giải quyết:

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

Tôi đã làm một điều khác biệt amixer scontentstrước khi gọi amixer set Master mutevà sau khi gọi nó và tắt tiếng mọi thứ bằng GUI để tìm ra những gì cần phải được tắt tiếng.


  1. Với loại âm thanh amixer scontents > ~/before(bạn sẽ nhận được một tệp có trạng thái của tất cả các kênh âm thanh)
  2. Sau đó chuyển đổi âm lượng với amixer set Master toggle
  3. Tạo một tệp trạng thái chanel thứ hai với amixer scontents > ~/after
  4. Chuyển đổi âm thanh một lần nữa với amixer set Master togglenhiệm vụ biến âm lượng trở lại mức trước lệnh chuyển đổi đầu tiên
  5. Tạo một tập tin thứ ba với amixer scontents > ~/afterafter

Bây giờ bạn có ba tệp cho bạn biết trạng thái của các kênh âm thanh được sử dụng cho âm thanh bình thường, bị tắt tiếng amixer set Master togglevà không được bật lại bằng cách tắt tiếng với cùng một lệnh.

Để dễ dàng so sánh các tệp và xem sự khác biệt (các kênh bị tắt tiếng và sẽ không bật tiếng sau đó), bạn có thể sử dụng meldtừ Trung tâm phần mềm. Bắt đầu nó, mở ba tệp và trên thanh cuộn, bạn có thể thấy nơi có sự khác biệt giữa các tệp. Sử dụng tên chanel được tìm thấy để thêm chúng vào tập lệnh được mô tả ở trên.


Thật không may, kịch bản chỉ tắt âm thanh nhưng không bật tiếng
joschi

Điều đó có thể là do những thứ của bạn cần được tắt tiếng không được gọi là "Mặt trước" và "Tai nghe" giống như chúng có trên hệ thống của tôi.
Jim Hunziker

Tôi cũng đã làm một khác biệt và tìm ra những gì còn thiếu để kịch bản hoạt động trên máy tính của tôi, bây giờ nó hoạt động. Cảm ơn rất nhiều.
joschi

5

Tôi không thể tắt âm thanh để chuyển đổi chính xác. Cho dù tôi đã sử dụng CLI và gõ vào Amixer sset Master toggle hoặc nhấn phím chuyển đổi phương tiện truyền thông HP, tôi sẽ nhận được kết quả tương tự: Nếu âm thanh được bật và hoạt động, nó sẽ tự động tắt kênh Master VÀ kênh PCM. Sau đó, khi tôi nhấn nút bật lại (cli hoặc phím), LUÔN LUÔN bật Master, nhưng tắt PCM. Đối với thiết bị của tôi (HP Pavilion DV6 chạy Xubfox Oneric), điều này có nghĩa là âm thanh bị tắt ngay cả khi bật chế độ chính. Khi chạy từ CLI - kết quả tương tự. Nếu, với cli, tôi bật PCM, nó cũng tắt kênh chính và một lần nữa sẽ không bật lại, mặc dù nó bật PCM chính xác.

Kịch bản hoạt động là:

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

Sau đó, tôi đã sử dụng các phím bấm Xubfox (cài đặt> trình quản lý cài đặt> bàn phím> phím tắt ứng dụng) để duyệt đến tập lệnh (tôi gọi nó là sndfx.sh và đặt nó để thực thi bằng cách nhấp chuột phải vào thunar và dưới quyền được đánh dấu để thực thi). Sau đó, tôi đã gán phím nhanh HP Pavilion cho nó bằng cách nhấn phím đó. Bây giờ, nó bật chính xác - Tuyệt vời. Hy vọng điều này sẽ giúp người khác.

Sự thanh bình


2

Nếu tôi không nhầm, đó là một lỗi khiến các kênh trộn khác bị tắt tiếng và bật tiếng. Để tắt tiếng, thử

bộ trộn được đặt 0;

Để bật tiếng thử

bộ trộn được đặt 1% ​​+; bộ trộn được đặt Master 7dB +;


Các lệnh này hoạt động, nhưng chúng không cho phép tôi chuyển đổi âm lượng bằng một lệnh duy nhất mà tôi có thể kết hợp với ràng buộc cạnh.
joschi

1
Nếu bất cứ ai quan tâm đến báo cáo lỗi liên quan xem tại đây .
joschi


1

Nếu bạn muốn thay thế amixer trong .lircrc để remotecontrol của bạn hoạt động với lirc, bạn có thể thử các dòng sau. Hãy chắc chắn đã cài đặt xmacro. Điều khiển âm lượng bây giờ hoạt động trở lại.

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

Mẹo nhỏ là làm cho trạng thái loa hoặc tai nghe tuân theo trạng thái của kênh chính tùy thuộc vào việc bạn có cắm tai nghe hay không. Kịch bản này thực hiện nó cho tôi trên máy tính xách tay Dell Latitude cổ của tôi:

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

Bạn có thể cần kiểm tra các kênh của mình bằng bộ trộn trên máy tính và thay đổi định nghĩa SLAVE cho phù hợp. Ngoài ra, chuỗi grep "Tai nghe \ Jack" trong định nghĩa HEADPHONES_PLUGGED có thể cần phải là một cái gì đó khác.


-1

Lực lượng vũ phu unmute:

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

2
Tôi không nghĩ việc tắt tiếng 80 thiết bị trở lên là một ý tưởng hay. Điều này bao gồm micro, có thể dẫn đến các vòng phản hồi không mong muốn. làm một for i in $(amixer |grep -o \'.*\'); do echo amixer set $i unmute; donetrước, để xem những gì sẽ được thực hiện.
người dùng không xác định
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.