Tag Archiv: audio

Разложение многоканального звука на 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).

Слушаем интернет-радио

Радио — замечательное изобретение, 
позволяющее людям, которым нечего сказать,
сказать это людям, которые их не слушают.
Сегодняшние тарифы на интернет довольно низки, а ширина каналов уже вызывают замешательство, чем бы их загрузить во время простоя. В тоже время, обширные музыкальные коллекции и доступность материала на треккере все-равно рано или поздно могут наскучить, и захочется чего-то нового. FM-приемники, часто будучи составной частью магнитол, уже спрятаны куда-то подальше, да и не обеспечивают необходимого удобства, качества звука и ассортимента радиостанций. Здесь на помощь и приходят интернет-радиостанции.  
Мы не будем рассматривать сейчас перечень радиостанций — их с легкостью можно найти в интернете или на сайтах оффлайновых FM-станций. Само собой, поддержка потоковых трансляций есть практически в каждом современном медиа-плеере. 

Но не все знают, что есть весьма удобная и простая в использовании утилита RadioTray, которая помещается на панели и делает лишь то, что ей положено — проигрывает интернет-радиостанции. 

Установить её просто 
sudo aptitude install radiotray
Значок программы находится на панели — левая кнопка мыши позволяет выбрать нужную радиостанцию из списка или же отключить вообще, а правая — дает доступ к настройкам программы (фактически, просто списку онлайн-радиостанций). Кроме того, в области уведомлений системы появляются периодически сообщения радиостанции о транслируемых песнях и другая информация от радиостанций.

Надеюсь, программа придётся по душе и вам.

Выбор устройства вывода звука в 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’ во втором.

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