Изменить ввод / вывод 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 

Есть ли способ создать сценарий?

3 Solutions collect form web for “Изменить ввод / вывод PulseAudio от Shell?”

Как сказал @ 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 

Раковина 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), которые оба прикреплены к приемнику 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 или ключевому ярлыку.

Для управления звуковым сервером 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-sink [sinkname] по умолчанию

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

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

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

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

Существует также инструмент командной строки, который уже используется для этой цели. Это имя – 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 

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

У меня только 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 .

  • Ввод Linux SPDIF не работает
  • Поток аудио системы на другие устройства по сети
  • Приложения, захватывающие ALSA исключительно
  • gentoo alsa pulseaudio - alsa mixer работает; aplay прямо к hw: 1,0 работ; aplay для любого из настроенных PCM не работает
  • Микрофон НЕ работает на Ubuntu 16.04.02TLS GNOME
  • Запись источника монитора (выходной микс) другого компьютера с использованием PulseAudio
  • FFmpeg не распознает мои аудиоисточники
  • Создание аудиозаписывающего устройства Linux на ПК под управлением Windows 7 по сети
  • Должны быть усилены задние громкоговорители с импульсным звуком?
  • удалить раковину по умолчанию
  • pulse-audio не распознает мой микрофон Logitech и микрофон веб-камеры
  • Linux и Unix - лучшая ОС в мире.