Bagaimana cara beralih suara dengan amixer?


48

Termasuk Natty, saya selalu dapat beralih (mute / unmute) volume suara 'Master' dengan

amixer sset Master toggle

perintah yang saya tautkan ke tepi yang mengikat di CompizConfig-Manager.

Sekarang setelah menginstal Oneiric, perintah hanya mematikan suara tetapi tidak mengaktifkan suaranya. Saya bahkan mencobanya di Terminal tetapi juga tidak berhasil. Itu berubah ' Mono: Playback 68 [78%] [-14.25dB] [off] ' ke '... [on]' tetapi suaranya tetap tidak terdengar sehingga saya harus membunyikan suaranya melalui 'indikator suara' di panel.

Bagaimana saya bisa membuatnya bekerja lagi? Apa yang berubah sejak Natty? Adakah yang tahu perintah yang digunakan 'indikator suara' untuk mengganti volume suara?


Dan untuk membuatnya lebih aneh: di laptop saya yang lain, di mana saya memutakhirkan dari Natty ke Oneiric alih-alih pemasangan yang baru, tetap berfungsi.
joschi

Jawaban:


51

Ini berfungsi untuk saya pada 13,04, bisu dan bersuara:

amixer -D pulse set Master 1+ toggle

Ini menentukan audio pulsa untuk memastikan bersuara, menyuarakan segalanya.


Bekerja pada lubuntu 13.10. Sedang mencari ini untuk MINGGU!
luisgonzalez

1
EDIT: Ini hanya berfungsi saat dijalankan sebagai perintah di terminal. Tetapi ketika saya mencoba mengonfigurasi sebagai pengikatan kunci, saya mendapatkan: Direktori rumah tidak dapat diakses: Izin ditolak ALSA lib pulse.c: 243: (pulse_connect) PulseAudio: Tidak dapat terhubung: Sambungan ditolak amixer: Kesalahan pemasangan lampiran pulsa: Sambungan ditolak
luisgonzalez

5
Ini bekerja lebih baik tanpa 1+parameter.
J. Katzwinkel

3
Masih bekerja di 17.10 (berseni). Saya menggunakan ini untuk binding media i3:bindsym XF86AudioMute exec --no-startup-id amixer -D pulse set Master 1+ toggle
Joel

2
Apa alasan untuk 1+?
Gayan Weerakutti

16

Saya menggunakan skrip ini sebagai solusinya:

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

Saya melakukan diff amixer scontentssebelum memanggil amixer set Master mutedan setelah memanggilnya dan menghilangkan suara semuanya menggunakan GUI untuk mencari tahu apa yang perlu dibunyikan.


  1. Dengan jenis suara amixer scontents > ~/before(Anda akan mendapatkan file dengan status semua saluran suara)
  2. Kemudian matikan volume dengan amixer set Master toggle
  3. Buat file status chanel kedua dengan amixer scontents > ~/after
  4. Toggle sound lagi dengan amixer set Master toggleyang seharusnya mengubah volume kembali ke level sebelum perintah toggle pertama
  5. Buat file ketiga dengan amixer scontents > ~/afterafter

Sekarang Anda memiliki tiga file yang memberi tahu Anda tentang status saluran suara yang digunakan untuk suara normal, yang dibisukan oleh amixer set Master toggledan yang tidak dinyalakan lagi dengan lagi membisukan dengan perintah yang sama.

Untuk membandingkan file dengan mudah dan melihat perbedaan (saluran yang dibisukan dan tidak akan bersuara setelahnya), Anda dapat menggunakan melddari Pusat Perangkat Lunak. Mulai saja, buka tiga file dan pada scrollbar Anda dapat melihat di mana ada perbedaan antara file. Gunakan nama chanel yang ditemukan untuk menambahkannya ke skrip yang dijelaskan di atas.


Sayangnya skrip hanya membisukan suara tetapi tidak mengaktifkan
suaranya

Itu mungkin karena barang-barang Anda yang perlu dibisukan tidak disebut "Depan" dan "Headphone" seperti yang ada di sistem saya.
Jim Hunziker

Saya juga melakukan diff dan menemukan apa yang hilang agar skrip berfungsi di komputer saya, sekarang berfungsi. Terima kasih banyak.
joschi

5

Saya tidak dapat mematikan suara untuk beralih dengan benar. Apakah saya menggunakan CLI dan mengetik Amixer sset Master toggle atau menekan tombol beralih HP pavillion media, saya mendapatkan hasil yang sama: Jika suara menyala dan berfungsi, maka secara otomatis akan mematikan saluran Master dan saluran PCM. Kemudian ketika saya menekan toggle lagi (cli atau kunci) SELALU menyala pada Master, tetapi PCM diam. Untuk rig saya (HP Pavilion DV6 menjalankan Xubuntu Oneric), ini berarti suara tidak aktif bahkan saat master menyala. Saat dijalankan dari CLI - hasil yang sama. Jika, dengan cli, saya mengaktifkan PCM, itu juga mematikan saluran induk dan sekali lagi tidak akan menyalakannya kembali, meskipun itu mematikan PCM dengan benar.

Script yang berfungsi adalah:

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

Kemudian saya menggunakan keybindings Xubuntu (pengaturan> pengaturan manajer> keyboard> pintasan aplikasi) untuk menjelajah ke skrip (saya menyebutnya sndfx.sh dan mengaturnya untuk dieksekusi dengan mengklik kanan pada thunar dan di bawah izin yang dicentang membuat dapat dieksekusi). Lalu saya menetapkan quickkey HP Pavilion dengan mengetuk tombol itu. Sekarang, ini beralih dengan benar - Keren. Semoga ini bisa membantu orang lain.

Perdamaian


2

Jika saya tidak salah, itu adalah bug yang menyebabkan saluran mixer lain membisu dan tidak bersuara. Untuk menonaktifkan, coba

satu set Master 0;

Untuk mengaktifkan kembali coba

amixer menetapkan Master 1% +; amixer mengatur Master 7dB +;


Perintah-perintah ini berfungsi, tetapi mereka tidak membiarkan saya mengaktifkan volume dengan satu perintah yang dapat saya gabungkan dengan pengikatan tepi.
joschi

1
Jika ada yang tertarik dengan laporan bug terkait lihat di sini .
joschi


1

Jika Anda ingin mengganti amixer di .lircrc agar remotecontrol Anda berfungsi dengan lirc, Anda dapat mencoba baris berikut. Pastikan xmacro sudah diinstal. Kontrol volume sekarang berfungsi lagi.

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

Caranya adalah dengan membuat negara speaker atau headphone mengikuti keadaan saluran master tergantung pada apakah Anda memiliki headphone terpasang atau tidak. Skrip ini melakukannya untuk saya di laptop Dell Latitude lama:

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

Anda mungkin perlu memeriksa saluran Anda dengan amixer di komputer Anda dan mengubah definisi SLAVE yang sesuai. Juga string grep "Headphone \ Jack" dalam definisi HEADPHONES_PLUGGED mungkin perlu sesuatu yang lain.


-1

Brute force unmute:

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

2
Saya pikir unmuting 80 dan lebih banyak perangkat adalah ide yang bagus. Ini termasuk mikrofon, yang dapat menyebabkan loop umpan balik yang tidak diinginkan. lakukan for i in $(amixer |grep -o \'.*\'); do echo amixer set $i unmute; donesebelumnya, untuk melihat apa yang akan dilakukan.
pengguna tidak diketahui
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.