Pintasan untuk beralih antara output Stereo Analog & output audio HDMI


18

Untuk beralih ke output audio HDMI (monitor) dan kembali ke output audio normal dari jack audio sistem (untuk headphone, karena monitor saya tidak memiliki audio keluar), saya menemukan diri saya membuka preferensi suara dan memilih saluran yang tepat setiap kali. Apakah ada cara saya dapat membuat tombol toggle di panel atau menetapkan beberapa tombol cara pintas untuk beralih karena saya sering melakukan switching.

:aplay -l 
**** List of PLAYBACK Hardware Devices ****
card 0: Intel [HDA Intel], device 0: STAC92xx Analog [STAC92xx Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 3: HDMI 0 [HDMI 0]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 7: STAC92xx Digital [STAC92xx Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

masukkan deskripsi gambar di sini


1
+1 Akan luar biasa jika saya bisa beralih ke mode output display HDMI yang benar dan mode suara dalam satu penekanan tombol.
Kit Menke

Apa yang akan lebih baik adalah jika ketika mendeteksi saluran audio HDMI / Display Port ini akan beralih secara otomatis. Ini adalah tujuan dari docking. Saya sepertinya ingat beberapa kode docking beberapa waktu lalu yang akan mengubah konfigurasi berdasarkan ID perangkat keras tertentu (MAC). Adakah yang tahu apa itu namanya lagi?
Elijah Lynn

Jawaban:


10

Dengan pulseaudio kami dapat memilih keluaran dari baris perintah:

pacmd set-default-sink "SINKNAME"

Perintah ini dapat digunakan dalam peluncur, skrip atau bahkan ditugaskan untuk pintasan keyboard untuk beralih cepat antara sink yang berbeda. Silakan ganti "SINKNAME" dengan nama atau nomor wastafel yang Anda inginkan. Daftar sink yang diketahui dengan nomor dan namanya yang terkait diberikan oleh perintah:

pacmd list-sinks

Catatan: Mengubah wastafel keluaran melalui antarmuka baris perintah hanya dapat berlaku jika pembacaan perangkat target stream dinonaktifkan. Ini dapat dilakukan dengan mengedit baris yang sesuai di /etc/pulse/default.pa:

load-module module-stream-restore restore_device=false

Atau kita dapat menjalankan pulseaudio untuk secara bersamaan mengeluarkan suara ke perangkat audio internal, dan ke perangkat HDMI dengan menjalankan paprefs dengan opsi untuk menambahkan perangkat output virtual:

paprefs


2
pacmd set-default-sink "alsa_output.pci-0000_00_1b.0.analog-stereo"dan pacmd set-default-sink "alsa_output.pci-0000_00_1b.0.hdmi-stereo"hanya berfungsi setelah memilih profil yang sesuai di Preferensi Suara. Jika saya memiliki HDMI yang diatur dan saya menjalankan perintah pacmd untuk stereo analog, saya mendapatkan eror Sink alsa_output.pci-0000_00_1b.0.analog-stereo does not exist.Tetapi jika saya secara manual memilih profil dari GUI Preferensi Suara dan menjalankan perintah yang sama, saya tidak mendapatkan kesalahan. Jadi tidak membantu untuk beralih.
iJeeves

@ iJeeves: lihat edit untuk pembaruan.
Takkat

Masalah serupa. Jika saya menjalankan perintah itu secara visual akan mengubahnya di GUI tetapi suara tidak mengarahkan. Saya harus secara manual beralih di GUI agar berfungsi. Ada ide?
Elijah Lynn

1
@ElijahLynn: Anda mungkin juga harus memindahkan aliran: askubuntu.com/questions/71863/…
Takkat

@Takkat: Saya belum mencobanya tapi sepertinya itu masalah persis yang saya alami. Terima kasih banyak!
Elijah Lynn

7

Saya menemukan ini sangat mengganggu diri saya sendiri dan menulis skrip untuk beralih output:

#!/bin/bash

CURRENT_PROFILE=$(pacmd list-cards | grep "active profile" | cut -d ' ' -f 3-)

if [ "$CURRENT_PROFILE" = "<output:hdmi-stereo+input:analog-stereo>" ] ; then
        pacmd set-card-profile 0 "output:analog-stereo+input:analog-stereo"
else 
        pacmd set-card-profile 0 "output:hdmi-stereo+input:analog-stereo"        
fi

dan kemudian ikat kunci yang tidak digunakan pada keyboard saya untuk menjalankannya (lihat Bagaimana cara mengikat perintah kustom ke pintasan keyboard? )


Meskipun Anda belum masuk dalam 18 bulan hanya ingin memberi tahu Anda ini adalah jawaban terbaik IMO +1
WinEunuuchs2Unix

Bagaimana saya bisa melakukan ini jika saya perlu beralih di antara dua kartu, bukan hanya dua profil dari satu kartu?
Oebele

2

Namun Script Sink Switcher Lain

diuji pada Ubuntu 16.04


Tetapi yang ini memungkinkan Anda untuk hanya beralih audio dari aplikasi yang Anda inginkan.

PENGGUNAAN: Fokuskan aplikasi yang Anda ingin ubah wastafelnya dan jalankan skrip ini. Itu dia!!!

Script ini mendeteksi aplikasi yang sedang dalam fokus, menemukan semua audio yang diputar darinya, dan mengalihkannya ke bak cuci berikutnya yang tersedia.

https://gist.github.com/madacol/1a0d8569166886d2d98f073f7f5c5fe3

Menjelaskan naskahnya

Kita perlu menemukan PID aplikasi pada fokus

Tetapi pertama-tama kita membutuhkan xid

xprop -root _NET_ACTIVE_WINDOW 

Kemudian masukkan di sini $xiduntuk mendapatkan pid aplikasi

xprop -id $xid _NET_WM_PID

Sekarang kita perlu menemukan input wastafel terkait dengan PID itu

Pertama mari kita linearkan output dari perintah pacmd list-sink-inputsuntuk daftar satu input-tenggelam per baris, menunjukkan indeksnya, tenggelam dan pid pada baris yang sama

pacmd list-sink-inputs | grep -E 'index:|sink:|process.id' | tr '\n' ' ' | tr -d '"' | sed -e 's/index:/\n/g' | tail -n +2

mari kita analisa langkah demi langkah:

grep -E 'index:|sink:|process.idhanya pertahankan baris yang berisi index:, sink:atauprocess.id

tr '\n' ' ' bergabung dengan semua lini

tr -d '"'menghapus semua "karakter. Diperlukan untuk mendapatkan pid tanpa tanda kutip

sed -e 's/index:/\n/g'mengganti semua index:kemunculan dengan karakter baris baru\n

tail -n +2 menghapus baris pertama karena kosong

Dan hasilnya adalah seperti ini:

  180 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 3521
  181 sink: 1 <alsa_output.pci-0000_00_01.0.analog-stereo> application.process.id = 2733
  182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752

Mari kita menganalisis satu baris untuk memahami apa artinya:

  # 182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752

182adalah indeks input-sink, 0adalah indeks sink, dan 13752pada akhirnya, adalah pid dari aplikasi yang dimiliki

Kemudian kita beralih melalui setiap baris

... | while IFS= read -r line || [ -n "$line" ]; do
  sink_input_pid=$(echo $line | awk '{print $NF}')

Dan akhirnya hanya filter pid-input wastafel yang cocok dengan pid aplikasi yang difokuskan

  if [ $sink_input_pid = $app_pid ]; then

Mengekstrak data

Dengan awkkita bisa mendapatkan elemen yang kita butuhkan

sink_input_index=$(echo $sink_input | awk '{print $1}')
current_sink_index=$(echo $sink_input | awk '{print $3}')

Dapatkan jumlah sink, untuk mengetahui kapan rotasi sink harus dimulai lagi dari 0.

sink_list_size=${#sink_list_array[@]}

Menemukan bak cuci berikutnya, kita harus beralih melalui daftar bak cuci, untuk mengetahui mana yang cocok dengan current_sink_index dan untuk mengetahui indeks bak cuci berikutnya.

i=0
for sink in "${sink_list_array[@]}"; do
  i=$((($i+1)%sink_list_size))  # i++ mod(#sinks)
  if [ $sink = $current_sink_index ]; then
    next_sink_index=${sink_list_array[i]}
    break
  fi
done

Dan akhirnya, kami memindahkan input wastafel untuk diputar di next_sink_index

pacmd move-sink-input $sink_input_index $next_sink_index

Catatan di Ubuntu 16.04:

Saat mengonfigurasi tombol pintasan, saya tidak bisa membuatnya berfungsi dengan pengelola pintasan ubuntu. Jadi saya harus menginstal compizconfig-settings-manager

sudo apt-get install compizconfig-settings-manager

+1 untuk jawaban pertama yang bagus sebagai pengguna baru. Karena pertanyaan aslinya adalah untuk Ubuntu 11.04 Anda harus menunjukkan versi apa yang diuji.
WinEunuuchs2Unix

@ WinEunuuchs2Unix Wow! Terima kasih :). Saya menambahkan versi Ubuntu di bawah judul.
Madacol


1

Karena hanya ada satu kartu suara yang terlihat di tangkapan layar, saya pikir output kartu suara ini harus diaktifkan.

Sebagai contoh: Saya memiliki Notebook dengan satu kartu suara terintegrasi, tetapi memiliki output digital (SPDIF) ketika merapat.

Jadi yang ingin saya lakukan adalah mengganti output aktif atau "Profil" di pulseaudio.

Saya menemukan perintah yang melakukan hal itu:

pacmd set-card-profile 0 output:analog-stereo
pacmd set-card-profile 0 output:iec958-stereo+input:analog-stereo

Apa yang saya lakukan untuk mendapatkan nama yang benar untuk pengaturan keluaran yang saya inginkan - di sini, keluaran digital, tetapi input analog (mikro) - adalah:

pacmd list | grep output

1

Saya sudah mencoba mencari solusi untuk masalah ini juga. Pada Ubuntu 11.04 ini tampaknya tidak mungkin secara langsung, saya hanya menemukan panduan ini untuk menambahkan HDMI dan Analog sebagai output terpisah, sehingga pacmd menunjukkan 3 sink sekarang. Maka dimungkinkan untuk beralih antar sink menggunakan perintah di atas. ( lihat juga )

Namun ternyata Ubuntu 11.11 akan mendapatkan PulseAudio dengan sistem deteksi jack. Menurut situs web di bawah ini, David Henningsson telah membuat kode deteksi melalui udev sehingga audio pulsa secara otomatis beralih ke output tambahan terakhir, termasuk beralih di antara profil berbeda dari kartu suara yang sama (seperti halnya dengan pengaturan Anda dan saya). (lihat disini )

Jadi saya berharap ini akan berhasil, ketika saya mencoba versi final Jumat depan.


1

Berdasarkan banyak jawaban sebelumnya, saya menulis sebuah skrip yang mengatur bak pemutaran bergantian di antara yang tersedia.

Cara terbaik untuk menggunakannya adalah dengan membuat pintasan keyboard untuk menjalankannya, jadi setiap kali Anda menekan kombinasi tombol, audio dialihkan ke bak cuci berikutnya yang tersedia.

Kode tersedia di sini: https://gist.github.com/germank/7fa2fb07d45a838bf890addadd8bea8c


0

Dalam kasus saya opsi analog di mana tidak ada dalam daftar. Instal pavucontrol: sudo apt install pavucontrol

Dapat memperbaiki masalah ini, dengan memulai aplikasi:

  1. Mulai aplikasi melalui terminal, dengan memasukkan: pavucontrol(masukkan)
  2. Buka tab 'Konfigurasi'.
  3. Pilih profil output stereo Analoge di Intern Sound

masukkan deskripsi gambar di sini

Sekarang saya dapat membuat dan memilih profil yang berbeda (di bawah Linux Mint):

masukkan deskripsi gambar di sini


0

Alternatif untuk Sound Switcher Indicator (yang meminta menambahkan PPA) adalah dengan membuat perintah (atau skrip) dan menyebutnya dengan pintasan:

Dalam kasus saya adalah hdmi-stereo-extra1+inputprofil, jadi dalam satu baris adalah:

[[ $(pacmd list-cards | grep "active profile" | cut -d " " -f 3-) = "<output:hdmi-stereo-extra1+input:analog-stereo>" ]] && \
     pacmd set-card-profile 0 "output:analog-stereo+input:analog-stereo" || \
     pacmd set-card-profile 0 "output:hdmi-stereo-extra1+input:analog-stereo"

Anda dapat menggunakan pintasan khusus ( gnome-control-center keyboard) untuk menjalankannya bash -c(akan memperingatkan Anda jika ada konflik dengan pintasan lainnya):

tangkapan layar

tangkapan layar

Saya menggunakan:

  • Super + Alt + o: Beralih keluaran antara headphone dan HDMI.
  • Super + Alt + Up: Vol Up
  • Super + Alt + Down: Vol Down

Anda juga dapat menambahkan aliaske .bashrc.

Diuji pada Ubuntu 16.04 dan 18.04


Jika Anda tidak ingin perilaku di atas pada skrip, saya membuat beberapa perubahan berdasarkan @ user829996 jawaban:

#!/bin/bash
set -euo pipefail # strict mode

activeProfile() { pacmd list-cards | grep "active profile" | cut -d " " -f 3-; }
CURRENT_PROFILE="$(eval activeProfile)"

# If it doesn't work run  pacmd list-cards  and try the other outputs from profile section
ANALOG_PROFILE="output:analog-stereo+input:analog-stereo"
HDMI_PROFILE="output:hdmi-stereo-extra1+input:analog-stereo"

if [ "$CURRENT_PROFILE" = "<output:hdmi-stereo-extra1+input:analog-stereo>" ] ; then
  pacmd set-card-profile 0 "$ANALOG_PROFILE"
else
    pacmd set-card-profile 0 "$HDMI_PROFILE"
fi

activeProfile

0

Apakah ada cara saya bisa membuat tombol toggle di panel

Saya menulis applet indikator yang memungkinkan Anda mengganti output suara.


Selamat Datang di Tanya Ubuntu! Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
Warren Hill
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.