Команда aplay

Команда aplay предназначена для задействования одноименной утилиты, осуществляющей проигрывание несжатых звуковых файлов посредством стандартной аудиоподсистемы Linux под названием ALSA. По сути данная утилита представляет собой консольный аудиоплеер, воспроизводящий ограниченный спектр форматов. Нередко она используется в сценариях командной оболочки или даже приложениях с графическим интерфейсом для вывода звуковых уведомлений. Разумеется, утилита позволяет выбрать необходимую аудиокарту, конфигурацию аудиовыходов и параметры воспроизводимых аудиопотоков. При этом она способна читать заголовок звукового файла и определять параметры аудиопотока самостоятельно.

Примечание: следует отдельно пояснить, что под несжатыми звуковыми файлами имеются в виду файлы с расширениями WAV и PCM значительного объема, в которых не применяется каких-либо алгоритмов компрессии аудиопотока (даже ADPCM). В большинстве инструкций демонстрируются примеры проигрывания с помощью рассматриваемой утилиты файлов с расширением MP3, что не корректно.

Базовый синтаксис команды выглядит следующим образом:

$ aplay [параметры] файл1 ...

Обычно утилита используется для проигрывания отдельных файлов без каких-либо параметров. Параметр -l позволяет вывести список всех доступных аудиокарт, параметр -L — вывести список доступных конфигураций аудиовыходов, параметр -D — выбрать аудиокарту, параметр -c — указать количество каналов аудиопотока от 1 до 32, параметр -f — указать формат сэмплов аудиопотока, параметр -r — указать частоту дискретизации аудиопотока, параметр -d — указать длительность проигрывания файла в секундах, параметр -s — указать длительность проигрывания файла в сэмплах, параметр -M — активировать режим отображения файла в память, параметр -N — активировать режим ввода/вывода без блокировок. Утилита поддерживает большое количество других специфических параметров, которые едва ли понадобятся рядовому пользователю.

Примеры использования

Получение списка аудиокарт и аудиовыходов

Для получения списка аудиокарт достаточно использовать утилиту с параметром -l:

$ aplay -l
**** Список PLAYBACK устройств ****
карта 0: HDMI [HDA ATI HDMI], устройство 3: HDMI 0 [HDMI 0]
 Подустройства: 1/1
 Подустройство №0: subdevice #0
карта 1: CA0106 [CA0106], устройство 0: ca0106 [CA0106]
 Подустройства: 0/1
 Подустройство №0: subdevice #0
карта 1: CA0106 [CA0106], устройство 1: ca0106 [CA0106]
 Подустройства: 1/1
 Подустройство №0: subdevice #0
карта 1: CA0106 [CA0106], устройство 2: ca0106 [CA0106]
 Подустройства: 1/1
 Подустройство №0: subdevice #0
карта 1: CA0106 [CA0106], устройство 3: ca0106 [CA0106]
 Подустройства: 1/1
 Подустройство №0: subdevice #0

Для получения списка доступных аудиовыходов следует использовать параметр -L рассматриваемой утилиты:

$ aplay -L
null
    Discard all samples (playback) or generate zero samples (capture)
default
    Playback/recording through the PulseAudio sound server
samplerate
    Rate Converter Plugin Using Samplerate Library
speexrate
    Rate Converter Plugin Using Speex Resampler
jack
    JACK Audio Connection Kit
oss
    Open Sound System
pulse
    PulseAudio Sound Server
upmix
    Plugin for channel upmix (4,6,8)
vdownmix
    Plugin for channel downmix (stereo) with a simple spacialization
hw:CARD=HDMI,DEV=3
    HDA ATI HDMI, HDMI 0
    Direct hardware device without any conversions
plughw:CARD=HDMI,DEV=3
    HDA ATI HDMI, HDMI 0
    Hardware device with all software conversions
hdmi:CARD=HDMI,DEV=0
    HDA ATI HDMI, HDMI 0
    HDMI Audio Output
dmix:CARD=HDMI,DEV=3
    HDA ATI HDMI, HDMI 0
    Direct sample mixing device
usbstream:CARD=HDMI
    HDA ATI HDMI
    USB Stream Output
hw:CARD=CA0106,DEV=0
    CA0106, CA0106
    Direct hardware device without any conversions
hw:CARD=CA0106,DEV=1
    CA0106, CA0106
    Direct hardware device without any conversions
hw:CARD=CA0106,DEV=2
    CA0106, CA0106
    Direct hardware device without any conversions
hw:CARD=CA0106,DEV=3
    CA0106, CA0106
    Direct hardware device without any conversions
plughw:CARD=CA0106,DEV=0
    CA0106, CA0106
    Hardware device with all software conversions
plughw:CARD=CA0106,DEV=1
    CA0106, CA0106
    Hardware device with all software conversions
plughw:CARD=CA0106,DEV=2
    CA0106, CA0106
    Hardware device with all software conversions
plughw:CARD=CA0106,DEV=3
    CA0106, CA0106
    Hardware device with all software conversions
sysdefault:CARD=CA0106
    CA0106, CA0106
    Default Audio Device
front:CARD=CA0106,DEV=0
    CA0106, CA0106
    Front output / input
rear:CARD=CA0106,DEV=0
    CA0106, CA0106
    Rear speakers
center_lfe:CARD=CA0106,DEV=0
    CA0106, CA0106
    Center and Subwoofer speakers
side:CARD=CA0106,DEV=0
    CA0106, CA0106
    Side speakers
surround21:CARD=CA0106,DEV=0
    CA0106, CA0106
    2.1 Surround output to Front and Subwoofer speakers
surround40:CARD=CA0106,DEV=0
    CA0106, CA0106
    4.0 Surround output to Front and Rear speakers
surround41:CARD=CA0106,DEV=0
    CA0106, CA0106
    4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=CA0106,DEV=0
    CA0106, CA0106
    5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=CA0106,DEV=0
    CA0106, CA0106
    5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=CA0106,DEV=0
    CA0106, CA0106
    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=CA0106,DEV=0
    CA0106, CA0106
    IEC958 (S/PDIF) Digital Audio Output
dmix:CARD=CA0106,DEV=0
    CA0106, CA0106
    Direct sample mixing device
dmix:CARD=CA0106,DEV=1
    CA0106, CA0106
    Direct sample mixing device
dmix:CARD=CA0106,DEV=2
    CA0106, CA0106
    Direct sample mixing device
dmix:CARD=CA0106,DEV=3
    CA0106, CA0106
    Direct sample mixing device
usbstream:CARD=CA0106
    CA0106
    USB Stream Output

По сути, для проигрывания звука через определенное устройство вам понадобится второй список.

Проигрывание звукового файла

Как говорилось ранее, утилита может работать лишь с несжатыми звуковыми файлами, поэтому для ее использования придется либо найти такой файл, либо осуществить декомпрессию сжатого файла. В данном случае будет осуществлена декомпрессия файла с помощью утилиты ffmpeg. Для начала обратим внимание на размер сжатого с помощью кодека MP3 файла «01 #endless summer.mp3» (Альбом Endless Summer исполнителя gegekit был выпущен на лэйбле Hand Craft records и распространяется в соответствии с условиями лицензии Creative Commons BY 3.0):

$ ls -al
итого 54752
drwxrwxr-x 2  alex alex      184 авг 29 18:25 .
drwx--x--x 42 alex alex     4096 авг 29 17:37 ..
-rw-rw-r-- 1  alex alex 12326324 авг 20 2012 '01 #endless summer.mp3'
-rw-rw-r-- 1  alex alex  9637802 авг 20 2012 '02 #mind.mp3'
-rw-rw-r-- 1  alex alex 18726324 авг 20 2012 '03 #sidewalk.mp3'
-rw-rw-r-- 1  alex alex 12632074 авг 18 2012 '04 #winter seed.mp3'
-rw-rw-r-- 1  alex alex     2483 окт  7 2013 AlbumArtSmall.jpg
-rw-rw-r-- 1  alex alex    10545 окт  7 2013 Folder.jpg
-rw-rw-r-- 1  alex alex     2340 авг  5 2014 info.rtf
-rw-rw-r-- 1  alex alex  2708915 авг 18 2012 jacket.png

Файл занимает чуть больше 12 Мб дискового пространства. Теперь осуществим его декомпрессию с помощью ffmpeg:

$ ffmpeg -hide_banner -loglevel error -i "01 #endless summer.mp3" "01 #endless summer.wav"

Параметры -hide_banner и -loglevel error предназначены для сокрытия не актуального в нашем случае отладочного вывода утилиты ffmpeg. Теперь оценим объем несжатого файла:

$ ls -al
итого 96108
drwxrwxr-x  2 alex alex      214 авг 29 18:27  .
drwx--x--x 42 alex alex     4096 авг 29 17:37  ..
-rw-rw-r--  1 alex alex 12326324 авг 20 2012  '01 #endless summer.mp3'
-rw-rw-r--  1 alex alex 42347694 авг 29 18:27 '01 #endless summer.wav'
-rw-rw-r--  1 alex alex  9637802 авг 20 2012  '02 #mind.mp3'
-rw-rw-r--  1 alex alex 18726324 авг 20 2012  '03 #sidewalk.mp3'
-rw-rw-r--  1 alex alex 12632074 авг 18 2012  '04 #winter seed.mp3'
-rw-rw-r--  1 alex alex     2483 окт  7 2013  AlbumArtSmall.jpg
-rw-rw-r--  1 alex alex    10545 окт  7 2013  Folder.jpg
-rw-rw-r--  1 alex alex     2340 авг  5 2014  info.rtf
-rw-rw-r--  1 alex alex  2708915 авг 18 2012  jacket.png

Несжатый файл занимает более 42 Мб дискового пространства. Для проигрывания достаточно передать утилите имя результирующего файла:

$ aplay "01 #endless summer.wav"
Воспроизведение WAVE '01 #endless summer.wav' : Signed 16 bit Little Endian, Частота 44100 Гц, Стерео

Чтобы прервать воспроизведение, следует использовать сочетание клавиш Ctrl+C.

Для вывода звука через определенное устройство следует использовать параметр -D:

$ aplay -D hw:CARD=CA0106,DEV=0 "01 #endless summer.wav"
aplay: main:831: ошибка открытия аудио-устройства: Устройство или ресурс занято

Из-за PulseAudio невозможно использовать устройство напрямую. Впрочем, утилита отлично работает посредством данного аудиосервера:

$ aplay -D pulse "01 #endless summer.wav"
Воспроизведение WAVE '01 #endless summer.wav' : Signed 16 bit Little Endian, Частота 44100 Гц, Стерео
^CПрервано сигналом Прерывание...
aplay: pcm_write:2127: ошибка записи: Прерван системный вызов