PulseAudio Giriş / Çıkış Kabuğunu değiştir?


38

Hoparlörlerime ve normal mikrofonuma ek olarak zaman zaman kullandığım bir dizi güzel kablosuz kulaklığım var.

Bir giriş ve çıkış kaynağı ile diğeri arasında geçiş yapmak için bir komut dosyası yazmak istiyorum, esas olarak kulaklıklarım ve mikrofonlarım + mikrofonum arasında bir geçiş.

Bunun arasında değiştirmek istiyorum:

...ve bu:

İki giriş ve çıkış arasında bir komut dosyası transfer etmenin bir yolu var mı? Temelde böyle bir şey arıyorum:

CURRENT_INPUT="$(get-current-input-name)"
CURRENT_OUTPUT="$(get-current-output-name)"

if [ "$CURRENT_INPUT" == "Vengeance 2000" ]; then
    set-current-input "HD Pro Webcam C920"
else 
    set-current-input "Vengeance 2000"
fi

if ["$CURRENT_OUTPUT" == "Vengeance 2000" ]; then
    set-current-output "Built-in Audio"
else
    set-current-output "Vengeance 2000"
fi

Bunu yazmanın bir yolu var mı?


3
man pactlPulseAudio komut satırı seçeneklerine bakabilirsiniz .
Teresa e Junior

Konu Dışı: Bu ekran görüntülerinde hangi GUI uygulaması var?
WhyNotHugo

İlkenin Sistem Ayarları.
Naftuli Kay,

Yanıtlar:


53

@ Teresa-e-Junior'ın belirttiği gibi pactlkullanılacak araç:

Her şeyden önce, KA lavabolarımızın kimliklerini almak isteyebiliriz. Benim sistemimde bu ne elde edilir:

$ pactl list short sinks
0       alsa_output.pci-0000_01_00.1.hdmi-surround      module-alsa-card.c      s16le 6ch 44100Hz  SUSPENDED
1       alsa_output.pci-0000_00_1b.0.analog-stereo      module-alsa-card.c      s16le 2ch 44100Hz  RUNNING

Lavabo 1 şu anda benim varsayılan lavabo.
Ancak şimdi tüm mevcut ve gelecekteki akışlarımın HDMI üzerinden çalınmasını istiyorum (örn. Lavabo 0).

PulseAudio için varsayılan havuzu ayarlama komutu var, ancak bilgisayarımda herhangi bir etkisi görünmüyor:

$ pacmd set-default-sink 0 #doesn't work on my PC :(

Bunun yerine, yeni akışlar, en son bir akıntının kendisine taşındığı lavaboya bağlı görünüyor.

Öyleyse pactl’a şu anda çalmakta olan tüm akıntıları batması için hareket ettirelim 0. Önce onları listelememiz gerekecek:

$ pactl list short sink-inputs
290     1       176     protocol-native.c       float32le 2ch 44100Hz
295     1       195     protocol-native.c       float32le 2ch 44100Hz

Tamam, her ikisi de lavaboya bağlı iki akışımız (ID 290 ve 295) var 1.
Onları batırmaya taşıyalım 0:

$ pactl move-sink-input 290 0
$ pactl move-sink-input 295 0

Yani, bu olmalı. Şimdi sadece bizim için işi yapan bir senaryo yazmamız gerekiyor:

#!/bin/bash

if [ -z "$1" ]; then
    echo "Usage: $0 <sinkId/sinkName>" >&2
    echo "Valid sinks:" >&2
    pactl list short sinks >&2
    exit 1
fi

newSink="$1"

pactl list short sink-inputs|while read stream; do
    streamId=$(echo $stream|cut '-d ' -f1)
    echo "moving stream $streamId"
    pactl move-sink-input "$streamId" "$newSink"
done

Parametre olarak bir lavabo kimliği veya bir lavabo adı ile çağırabilirsiniz (yani ya 0da benzeri bir şey alsa_output.pci-0000_01_00.1.hdmi-surround).

Şimdi bu betiği bir udev olayına veya anahtar kısayoluna ekleyebilirsiniz.


1
Müthiş, teşekkürler! Bunu, çalışmayı kolaylaştıran ve kolaylaştıran bir Python komut dosyasına dönüştürdüm, burada bulunuyor .
Naftuli Kay


1
@NaftuliTzviKay: Komut dosyanız artık mevcut değil. Hala sahipseniz, [GitHub Gist] (gist.github.com) adresine göndermeyi düşünün.
Denilson Sá Maia

Peki ya 0 sink input(s) available.? Ama bu boktan flash player hala ses mi oynuyor? Ve client(s) logged inbölümünde flash player görüyorumpacmd list
Zhigalin

1
$ pacmd set-default-sink INDEXbetiğim için hala gerekli, aksi takdirde ses seviyesini değiştirmek için klavye komutları eski havuz kaynağını kullanmaya devam eder.
myol

9

PulseAudio ses sunucusunu değiştirmek için aşağıdaki komutlar kullanılır:

pacmd - Used to reconfigure a PulseAudio sound server during runtime.
pactl - Used to control a running PulseAudio sound server.

İşte nasıl çalıştıklarına dair bazı örnekler.

pacmd list-sinks:: olası lavaboların liste adı veya indeks numarası

pacmd set-default-sink [sinkname]:: varsayılan çıkış havuzunu ayarla

pacmd set-default-source [sourcename]:: varsayılan girişi ayarla

pacmd set-sink-volume [index] [volume]:: lavabo hacmini ayarlayın

pacmd set-source-volume index volume:: Ses seviyesi kontrol aralığı 0 - 65536 (sayı ne kadar düşükse ses o kadar düşük olur)

Bunlar sadece wiki ve man sayfasından çıkardığım birkaçı. Referans Bu daha ayrıntılı bilgi için. Veya komutları --helpveya mansayfayı görüntüleyebilirsiniz.

Zaten bu amaca hizmet eden bir komut satırı aracı da var. Adı ponymix . PulseAudio için bir komut satırı karıştırıcısı. Sağlanan bağlantı github projeleridir. Bir arkadaş ve diğer arkadaşı tarafından geliştirilen Arch Linux Trusted User / Developer. Eğer Arch yayınlamıyorsanız sadece kullanılarak kaynağından derlemek olabilir makeve sudo make install.

$ ponymix --help
    usage: ponymix [options] <command>... 
Options:
 -h, --help              display this help and exit    
 -c, --card CARD         target card (index or name)
 -d, --device DEVICE     target device (index or name)
 -t, --devtype TYPE      device type
 -N, --notify            use libnotify to announce volume changes
     --source            alias to -t source
     --input             alais to -t source
     --sink              alias to -t sink
     --output            alias to -t sink
     --sink-input        alias to -t sink-input
     --source-output     alias to -t source-output
Device Commands:
  help                   display this message
  defaults               list default devices (default command)
  set-default            set default device by ID
  list                   list available devices
  list-short             list available devices (short form)
  list-cards             list available cards
  list-cards-short       list available cards (short form)
  get-volume             get volume for device
  set-volume VALUE       set volume for device
  get-balance            get balance for device
  set-balance VALUE      set balance for device
  adj-balance VALUE      increase or decrease balance for device
  increase VALUE         increase volume
  decrease VALUE         decrease volume
  mute                   mute device
  unmute                 unmute device
  toggle                 toggle mute
  is-muted               check if muted
Application Commands:
  move DEVICE            move target device to DEVICE
  kill DEVICE            kill target DEVICE
Card Commands:
  list-profiles          list available profiles for a card
  list-profiles-short    list available profiles for a card(short form)
  get-profile            get active profile for card
  set-profile PROFILE    set profile for a card

Hey bu cevap için teşekkür ederim! Bana bununla ilgili bir konuda bir ton yardımcı oldu .
KlaymenDK

5

Fedora 20 çalıştıran dizüstü bilgisayarımda, HDMI çıkışı varsayılan profilde bir lavabo değil, farklı bir profil olarak listeleniyor .

Dizüstü bilgisayar hoparlörlerimde böyle tek bir lavabo var.

$ pactl list short sinks
8   alsa_output.pci-0000_00_1b.0.analog-stereo  module-alsa-card.c  s16le 2ch 44100Hz   RUNNING

Eğer pactl set-card-profile 0 output:hdmi-stereokoşarsam, güzel müzik HDMI ile çalıyor. Alırım:

$ pactl list short sinks
14  alsa_output.pci-0000_00_1b.0.hdmi-stereo    module-alsa-card.c  s16le 2ch 44100Hz   RUNNING

Varsayılana geri dönmek için sadece koşuyorum pactl set-card-profile 0 output:analog-stereo+input:analog-stereo. Her iki durumda da, yeniden başlattığımda varsayılan ayar yine orada.

Kartımın profil listesi pactl list cardsçıktıda bir yerde .


Bu bilgi kabul edilen cevap tarafından zaten sağlandı. Ekleyeceğiniz başka bir şey yoksa, lütfen diğer kullanıcıların cevaplarını kopyalamayın. Bu sadece diğer cevabı yeniden şekillendirir ve yeni ya da kullanışlı bir şey sağlamaz!
slm

5
set-card-profiledaha önce bahsedilmedi ve bu cevaptaki en önemli bilgi bu.
Spidey
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.