ALSA: как временно сменить устройство вывода

15

Я хочу сделать в ALSA простейшую вещь: заставить USB-наушники воспроизводить звук вместо внутреннего динамика моего планшета. Я не хочу изменять конфигурационные файлы, такие как asound.rcили alsa.confили, asound.confи постоянно устанавливать наушники в качестве устройства вывода по умолчанию, меняя порядок устройств, мне нужен временный эффект, пока я не отключу наушники. Странно, я не могу гуглить ответ. alsamixerСпособен ли это сделать (кажется, нет)?

В Gnome вы можете легко выбрать текущее устройство вывода с помощью PulseAudioлибо в графическом интерфейсе, либо в интерфейсе CLI, но оно PulseAudioсамо по себе работает поверх ALSA! Вот мне и интересно, как это заставляет ALSA менять устройство вывода?

Борис Бурков
источник
alsamixerв интерфейсе есть опция «Выбрать звуковую карту», ​​хотя я не знаю, настраивает ли это устройство вывода.
Златовласка
1
нет, к сожалению, он просто отображает параметры этой звуковой карты и позволяет настраивать их, но не перенаправляет вывод на нее
Борис Бурков
Здравствуйте, вы можете попробовать exec alsamixerиз терминала и нажать F6для выбора другой звуковой карты. :)
slackmart
@sgmart Привет, sgmart, я сделал именно это, но он не передает звук на это устройство, он просто выбирает это устройство для настройки его параметров, а не выводит на него потоки.
Борис Бурков
4
Утилита alsamixer имеет несколько элементов управления: Master, PCI и так далее. Проверьте, есть ли MMметка (MM = mute), поэтому используйте Mклавишу на клавиатуре, чтобы включить звук.
slackmart

Ответы:

4

Если устройство USB указано в качестве звуковой карты в системе, вы можете проверить man amixerи использовать этот unmuteпараметр.

amixer -c 1 set Master playback 100% unmute

Проверьте также другие каналы (PCM и т. Д.). Примеры из руководства:

   amixer -c 1 sset Line,0 80%,40% unmute cap
          will set the second soundcard's left line input volume to 80% and right line
          input to 40%, unmute it, and select it as a source for capture (recording).

   amixer -c 1 -- sset Master playback -20dB
          will set the master volume of the second card to -20dB.  If the  master  has
          multiple channels, all channels are set to the same value.

   amixer -c 1 set PCM 2dB+
          will  increase  the PCM volume of the second card with 2dB.  When both play‐
          back and capture volumes exist, this is applied to both volumes.

   amixer -c 2 cset iface=MIXER,name='Line Playback Volume",index=1 40%
          will set the third soundcard's second line playback volume(s) to 40%

   amixer -c 2 cset numid=34 40%
          will set the 34th soundcard element to 40%
Яри ​​Лааманен
источник
Спасибо, Яри, это работает. Я читал руководства по ALSA и у меня возник вопрос: устройства, перечисленные amixer и alsamixer, на самом деле не аппаратные устройства, а устройства ALSA, созданные плагинами alsa в /usr/share/alsa/alsa.conf и друзьями? Я в основном понимаю синтаксис этих плагинов, но не могу найти определения самых фундаментальных ключевых слов, таких как «pcm» или «ctl» или «type». Мне не удалось найти какой-либо список ключевых слов в документации doxygen: alsa-project.org/alsa-doc/alsa-lib, alsa-project.org/alsa-doc/alsa-lib/conf.html. Знаете ли вы какой-либо источник информации о них?
Борис Бурков
8
Это на самом деле не решает первоначальный вопрос. Вы можете установить параметры, но это не изменит карту, через которую выводится звук.
себя
2
Если это действительно отвечает на первоначальный вопрос, необходим полный пример. Как это делает то, что alsamixer не может сделать? Очевидно, что alsamixer не может переключиться на выход через другую звуковую карту. Или, в моем случае, я также хотел выводить через ту же звуковую карту, но через HDMI вместо колонок / наушников. Pulseaudio делает эти вещи, но как? Примеры от начала до конца необходимы, чтобы сделать это хорошим ответом.
Колин Кинан
1
Питти это было выбрано в качестве ответа - вопрос именно то, что я ищу: как временно сменить карту, используемую для вывода. Однако, как уже отметил @oneself, этот ответ на самом деле не объясняет, как это сделать. Задание нового вопроса с почти таким же названием теперь может быть повторено.
Домссон
1
@domsson просто свяжись с этим и объясни, что ответ не решил твою проблему. Это должно гарантировать, что это не закрыто как обман.
Тердон
0

IIUC вы можете обновить .asoundrcили /etc/asound.confдинамически. Так что должно быть возможно иметь два файла headphones.confиfront.conf которые устанавливают свои устройства по умолчанию в соответствующие hw:channel,deviceчисла , а затем переключаться между ними на «Гнездо ACPI / наушников разъем наушников» событие. Я собираюсь попробовать это, используя «ln» для ссылки /etc/asound.confна один из/etc/sounds/{headphones,front}.conf

AntisocialNetworker
источник