Изменить ввод /вывод PulseAudio от Shell?

У меня есть набор приятных беспроводных наушников, которые я использую время от времени, помимо моих динамиков и обычного микрофона.

Я бы хотел написать сценарий для переключения между одним источником входного и выходного сигналов и другим, по существу, переключателем между моими наушниками и моими динамиками + микрофон.

Я хочу изменить это:

... и это:

Есть ли способ для меня сценария передачи между двумя входами и выходами? По сути, я ищу что-то вроде этого:

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

Есть ли способ сделать это?

26 голосов | спросил Naftuli Kay 19 FebruaryEurope/MoscowbTue, 19 Feb 2013 02:23:15 +0400000000amTue, 19 Feb 2013 02:23:15 +040013 2013, 02:23:15

3 ответа


34

Как сказал @ Teresa-e-Junior pactl - это инструмент для использования:

Прежде всего, мы можем захотеть получить идентификаторы наших приемников PA. В моей системе это то, что я получаю:

$ 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

Sink 1 в настоящее время является моим дефолтом по умолчанию.
Но теперь я хочу, чтобы все мои текущие и будущие потоки воспроизводились через HDMI (т. Е. Раковина 0).

Существует команда для установки приемника по умолчанию для PulseAudio, но, похоже, это не влияет на мой компьютер:

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

Вместо этого новые потоки, похоже, подключены к раковине, в которой недавно был перенесен поток.

Итак, давайте скажем pactl переместить все текущие воспроизводимые потоки, чтобы потопить 0. Сначала нам нужно их перечислить:

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

Хорошо, у нас есть два потока (ID 290 и 295), которые оба прикреплены к sink 1.
Давайте переместим их, чтобы потопить 0:

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

Итак, это должно быть так. Теперь нам просто нужно создать скрипт, который сделает для нас работу:

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

Вы можете вызвать его либо с идентификатором приемника, либо с именем раковины в качестве параметра (т.е. либо 0 или что-то вроде alsa_output.pci-0000_01_00.1.hdmi-surround)

Теперь вы можете прикрепить этот скрипт к событию udev или ключевому ярлыку.

ответил mreithub 9 MarpmSat, 09 Mar 2013 17:15:23 +04002013-03-09T17:15:23+04:0005 2013, 17:15:23
8

Для управления звуковым сервером PulseAudio используются следующие команды:

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

Вот несколько примеров того, как они функционируют.

pacmd list-sinks :: имя списка или номер индекса возможных приемников

pacmd set-default-sink [sinkname] :: установить вывод по умолчанию раковина

pacmd set-default-source [sourcename] :: установить ввод по умолчанию

pacmd set-sink-volume [index] [volume] :: установить сток том

pacmd set-source-volume index volume :: регулятор громкости диапазон 0 - 65536 (чем ниже число, тем ниже громкость)

Это лишь некоторые из них, которые я вытащил из wiki & справочная страница. Ссылка это для получения более подробной информации. Или вы можете просмотреть либо команды --help, либо man страница.

Существует также инструмент командной строки, который уже используется для этой цели. Это имя ponymix . Это микшер для командной строки для PulseAudio. Ссылка предоставлена ​​для проектов github. Он разработан другом и коллегой Arch Linux Trusted User /Developer. Если вы не используете Arch, вы можете просто скомпилировать его из источника, используя make и 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
ответил cinelli 11 MaramMon, 11 Mar 2013 09:24:23 +04002013-03-11T09:24:23+04:0009 2013, 09:24:23
5

На моем ноутбуке, работающем на Fedora 20, выход HDMI не отображается в виде sink в профиле по умолчанию, а в качестве другого профиля .

У меня только 1 раковина, как это, хорошая музыка, играющая на ноутбуках:

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

Если я запустил pactl set-card-profile 0 output:hdmi-stereo, то приятная музыка воспроизводится через HDMI. Я получаю:

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

Чтобы вернуться к умолчанию, я просто запустил pactl set-card-profile 0 output:analog-stereo+input:analog-stereo. В любом случае значение по умолчанию снова появляется, если я перезагружаюсь.

Список профилей для моей карты находится где-то на выходе pactl list cards.

ответил RubenCaro 27 FriEurope/Moscow2013-12-27T23:44:18+04:00Europe/Moscow12bEurope/MoscowFri, 27 Dec 2013 23:44:18 +0400 2013, 23:44:18

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132