Tag Archiv: звук

Разложение многоканального звука на 6 отдельных монодорожек при помощи mplayer (на примере ac-3 (E-AC-3 / Dolby Digital Plus))

При обработке многоканального звука возникает потребность располагать отдельно всеми моноканалами в PCM (WAV) — формате.
В подобной ситуации можно воспользоваться mplayer с фильтром pan.
В первую очередь, укажем, что нам нужен шестиканальный звук, из которого мы и будем отбирать по одной дорожке параметром -channels 6 .

Запись вывода в wav-файл будет осуществляться опцией -ao pcm:file=имя_файла

Аудиофильтр pan указывает на расположение и силу каналов. Параметры записываются через двоеточие: первый параметр указывает на число каналов (в нашем случае 1), а в последующих — сила каждого из исходных каналов в получаемом.
Для нашей ситуации такую операцию придется провести 6 раз, для каждого из моноканалов в отдельности. 
Например, для surround left канала, настройки pan будут выглядеть так: 

pan=1:0:0:1:0:0:0

В результате получилось

mplayer /media/m/1.ac3 -ao pcm:file=/media/video/l.wav -channels 6 -af  pan=1:1:0:0:0:0:0 && mplayer /media/m/1.ac3 -ao pcm:file=/media/video/r.wav -channels 6 -af  pan=1:0:1:0:0:0:0 && mplayer /media/m/1.ac3 -ao pcm:file=/media/video/sl.wav -channels 6 -af  pan=1:0:0:1:0:0:0 && mplayer /media/m/1.ac3 -ao pcm:file=/media/video/lfe.wav -channels 6 -sr  pan=1:0:0:0:1:0:0 && mplayer /media/m/1.ac3 -ao pcm:file=/media/video/c.wav -channels 6 -af  pan=1:0:0:0:0:1:0 && mplayer /media/m/1.ac3 -ao pcm:file=/media/video/lfe.wav -channels 6 -af  pan=1:0:0:0:0:0:1

где /media/m/1.ac3 — исходный файл.

Один из 6 результатов выполнения команды выглядит так: 

malky@malky-desktop:~$ mplayer /media/m/1.ac3 -ao pcm:file=/media/video/lfe.wav -channels 6 -af  pan=1:0:0:0:0:0:1
mplayer: Symbol `ff_codec_bmp_tags’ has different size in shared object, consider re-linking
MPlayer SVN-r33713-4.6.1 (C) 2000-2011 MPlayer Team
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.

Playing /media/m/1.ac3.
libavformat file format detected.
[eac3 @ 0x20bc480] max_analyze_duration reached
[eac3 @ 0x20bc480] Estimating duration from bitrate, this may be inaccurate
[lavf] stream 0: audio (eac3), -aid 0
Load subtitles in /media/m/
==========================================================================
Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
AUDIO: 48000 Hz, 6 ch, s16le, 1536.0 kbit/33.33% (ratio: 192000->576000)
Selected audio codec: [ffeac3] afm: ffmpeg (FFmpeg E-AC-3)
==========================================================================
[AO PCM] File: /media/video/lfe.wav (WAVE)
PCM: Samplerate: 48000Hz Channels: Mono Format floatle
[AO PCM] Info: Faster dumping is achieved with -benchmark -vc null -vo null -ao pcm:fast
[AO PCM] Info: To write WAVE files use -ao pcm:waveheader (default).
AO: [pcm] 48000Hz 1ch floatle (4 bytes per sample)
Video: no video
Starting playback…
A:8751.5 ( 2:25:51.5) of 8751.5 ( 2:25:51.5)  1.0%

Exiting… (End of file)

Следует отметить, что похожая операция должна быть удачной для любого многоканального аудиофайла, который может быть воспроизведен с помощью mplayer. Также возможно извлекать звук и из видеофайла, при этом необходимо будет добавить опции -vo null -vc null и, при необходимости, указать порядковый номер аудиодорожки, если их больше 1, параметром -aid номер (следует отметить, что для DVD-video нумерация начинается от 128, для TS контейнеров также начало нумерации может отличаться от 0).

Asus Xonar DG в Ubuntu 11.04

Любителям качественной музыки рано или поздно становится недостаточно интегрированной аудиокарты, какой бы качественной она не была. Хотя спрос на дискретный аудиокарты весьма незначительный по сравнению с объемами десятилетней давности, он существует и довольно стабилен.

 

Но если до недавних пор выбора производителей практически не было — Creative властвовал безраздельно, то сейчас весьма ощутимую конкуренцию продукции Сreative составляет Asus со своей линейкой Xonar.

Следует отметить, что вся линейка ASUS Xonar, включая даже младшую модель, идёт в коробочной поставке, включая 8 см планку для Low-Profile плат, что упрощает установку в небольшие HTPC-корпуса.

Представленная в этом обзоре младшая модель линейки — Asus Xonar DG — поддерживает вывод звука в формате 5.1, а также оснащена встроенным усилителем для наушников.

На задней панели платы находится три аналоговых (mini-jack 3,5mm) разъема для вывода звука 5.1, один из которых  (фронтальный) поддерживает работу с наушниками. Кроме того, плата оснащена также совмещенным аналоговым входом для микрофона или линейного входа, и цифровым оптическим выходом. На самой плате есть разъем для подключения фронтальной панели корпуса (наушники + микрофон), выход цифрового звука для подключения к видеокартам с HMDI, а также такой анахронизм, как Aux-In (для подключения вывода аналогового звука с  других внутренних устройств, например, ТВ-тюнеров).

К сожалению, до недавнего времени, поддержка звуковых карт Asus  в Linux была проблемной. Ситуация должна была измениться в Ubuntu 11.04 ( благодаря ядру 2.6.38 / ALSA 1.0.24).  Сейчас разработчика ALSA предупреждают о том, что, к сожалению, фронтальная панель и усилитель наушников пока не поддерживается. Кроме того, не рекомендуется использовать и ALSA в чистом виде по причине того, что у карты нет аппаратного регулятора громкости, т.о. необходимо использоваться PulseAudio.

После установки аудиокарты в слот PCI и загрузки операционной системы, Ubuntu без проблем обнаружила устройство и обеспечила его работу.  Утилита lspci определяет карту следующим образом:

03:07.0 Multimedia audio controller: C-Media Electronics Inc CMI8788 [Oxygen HD Audio]

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

В свойствах устройства в параметрах PulseAudio возможно выбрать различные варианты вывода звука (колонки, фронтальные наушники, наушники на задней панели). Хотя фронтальная панель в данный момент не работает, при переключении из корпуса отчётливо слышен щелчок переключения выхода. Звук весьма качественный, однако, как было сказано выше, усилитель наушников пока не функционирует, поэтому между выбором Speaker и Headphones 2 разницы не замечено.

К сожалению, с использованием PulseAudio у меня не получилось добиться работоспособности аудиовхода. Возможно, он будет функционировать под «чистым» ALSA, однако в этом случае возникает проблема с регулировкой громкости.

В целом, выводы несколько неоднозначные: с одной стороны, мы получаем качественную LowProfile-аудиокарту  формата 5.1 для установки в HTPC (и не только) за весьма умеренную цену, с другой стороны — значительная часть  функций в Linux пока не доступна. Карту можно смело посоветовать тем, кто хочет получить качественный звук и ничего кроме за небольшие деньги (так, в качестве аудиовхода для VoIP можно использовать интегрированную карту), а всем прочим я бы посоветовал дождаться  более полной поддержки со стороны ALSA (благо, разработчики о недоработках знают).

Выбор устройства вывода звука в PulseAudio и переключение мониторов

Уже длительное время для просмотра видео на домашнем компьютере я использую отдельно подключенный через HDMI-выход телевизор. Т.к. при работе и запуске некоторых игр второй монитор иногда может стать помехой, то подключение второго монитора я уже давно делаю при помощи одной команды с xrandr. Вместе с этим мне приходилось переключать выход аудио с обычного аналогового на HDMI
К сожалению, до сегодняшнего дня я не мог найти иного решения, чем переключения устройства через GUI, что меня не вполне устраивало.

Вопросы о переключении вывода для pulseaudio на форумах почему-то не получали ответа. К счастью, сегодня я случайно наткнулся на отличный обзор по управлению pulseaudio, в котором нашел решение для своей проблемы, а также еще много интересной и полезной информации, с которой будет небезынтересно ознакомиться, если вы нуждаетесь в переназначении выводов звуковой карты, усилении звука для отдельных приложений и т.п. Я остановлюсь лишь на необходимом мне, но все же настоятельно рекомендую при наличие свободного времени обратить внимание на вышеупомянутую публикацию.
Итак, прежде чем осуществлять переключение, нам необходимо узнать, какой «сток» (sink) отвечает за вывод для первого и второго случая. Для этого воспользуемся командой

pactl list | more

и, пролистывая, обнаружим подобную информацию:

 

Как мы видим, за вывод на аналоговый выход отвечает Sink #1, а за выход на HDMI — Sink #0.
Следовательно, команды переключения вывода примут такой вид:
pacmd set-default-sink ‘0’  — вывод на HDMI
pacmd set-default-sink ‘1’  — вывод по аналоговому выходу

Управление мониторами я осуществлял следующим способом. Активация ТВ-выхода, для вывода через HDMI:

xrandr —output DFP2 —mode 1280×720 —pos 1280×0

Я не буду здесь останавливаться на подробном описании xrandr, которое вы можете получить при помощи команды man xrandr, а лишь прокомментирую приведенную выше команду.

—output DFP2 — указывает на то, что команда касается цифрового подключения (напоминаю, у меня ТВ подключен по HDMI, а монитор по обычному D-sub);

—mode 1280×720 — разрешение ТВ (у меня HDReady — 720p, поэтому для меня целесообразно такое);

—pos 1280×0 — указывает, с какой позиции будет начинаться вывод на второй экран. Разрешение основного монитора 1280х1024, поэтому ТВ-экран будет размещен «справа» от монитора (после 1280й позиции по Х-координате) и сразу от верхней границы экрана, без отступа (отступ по Y — 0). Это позволяет перетаскивать мышью окна за правую границу основного монитора, тем самым перемещая их на ТВ.

Для обратного переключения на один монитор выполняется команда

xrandr —output DFP2 —off

В результате  у меня есть два скриптовых файла с двумя командами в каждом из них

pacmd set-default-sink ‘0’ и xrandr —output DFP2 —mode 1280×720 —pos 1280×0 в одном, а также xrandr —output DFP2 —off и pacmd set-default-sink ‘1’ во втором.

Выполнение этих скриптовых файлов мы можете реализовать через кнопку запуска на панели или рабочем столе, или же через клавиатурные комбинации (подробнее здесь) — как вам будет удобнее.