axfer-transfer - передача кадра аудиоданных для звуковых устройств и узлов.
axfer transfer direction [ common-options ] [ backend-options ] [ filepath ]
axfer transfer direction [ common-options ] [ backend-options ] -I | --separate-channels filepath ...
direction = capture | playback
common-options = ( read OPTIONS section )
backend-options = ( read OPTIONS section )
filepaths = ( read OPTIONS section )
Подкоманда transfer команды axfer выполняет передачу кадров аудиоданных для устройств, доступных в поддерживаемых бэкендах. Эта программа по существу предназначена для использования API-интерфейсов alsa-lib (базовая часть libasound) для обработки звуковых устройств, поддерживаемых звуковой подсистемой Linux (ALSA).
Работает для захвата передачи.
Работает для передачи воспроизведения.
Путь к файлу обрабатывается как путь относительно текущего рабочего каталога среды выполнения, если это не полный путь от корневого каталога.
Стандартный ввод или вывод используется, если путь к файлу не указан или задан как '-' .
Для передачи воспроизведения формат контейнера заданного filepath определяется автоматически, и метаданные используются для параметров формата выборки, каналов, скорости, продолжительности. Если ничего не обнаружено, содержимое заданного пути к файлу обрабатывается как необработанные данные. В этом случае параметры должны быть указаны как опции.
Допускается использование нескольких путей к файлам с -I | Опция --separate-channels. В этом случае стандартный ввод и вывод недоступны. Один и тот же filepath не допускается, за исключением путей, перечисленных ниже: - /dev/null - /dev/zero - /dev/full - /dev/random - /dev/urandom
Распечатайте справочные сообщения и завершите работу.
Бесшумный режим. Подавить сообщения (не звук :))
Подробный режим. Среда выполнения выводит дополнительную информацию в соответствии с номером этой опции, заданным в командной строке.
Прервать через # секунды. Нулевое значение означает бесконечность. Значение по умолчанию равно нулю, поэтому, если этот параметр опущен, процесс передачи будет выполняться до тех пор, пока он не будет остановлен. Доступна только опция -d или -s.
Прерывание после передачи # кадров данных. Нулевое значение означает бесконечность. Значение по умолчанию равно нулю, поэтому, если этот параметр опущен, процесс передачи будет выполняться до тех пор, пока он не будет остановлен. Доступна только опция -d или -s.
Укажите формат аудиосэмпла. Это требуется для передачи захвата или передачи воспроизведения файлов, содержащих необработанные аудиоданные.
Доступный пример формата указан ниже: - [S8|U8|S16|U16|S32|U32][_LE|_BE] - [S24|U24][_LE|_BE] - FLOAT[_LE|_BE] - FLOAT64[_LE|_BE ] - IEC958_SUBFRAME[_LE|_BE] - MU_LAW - A_LAW - [S20|U20][_LE|_BE] - [S24|U24][_3LE|_3BE] - [S20|U20][_3LE|_3BE] - [S18|U18 ][_3LE|_3BE] - DSD_U8 - DSD_[U16|U32][_LE|_BE]
Если endian-ness опущен, используется host-endian-ness.
Доступны некоторые специальные форматы: - cd (16 бит с прямым порядком байтов, 44100, стерео) [= -f S16_LE -c 2 -r 44100] - cdr (16 бит с прямым порядком байтов, 44100, стерео) [= -f S16_BE -c 2 -f 44100] - dat (16 бит с прямым порядком байтов, 48000, стерео) [= -f S16_LE -c 2 -r 48000]
Если этот параметр опущен, по умолчанию используется U8. Фактические доступные форматы ограничены каждым сервером передачи.
Недоступный образец формата указан ниже. Этот формат имеет размер фрейма данных, не выровненный по байтовой единице.
- IMA_ADPCM - MPEG - GSM - СПЕЦИАЛЬНЫЙ - G723_24 - G723_24_1B - G723_40 - G723_40_1B
Укажите количество выборок аудиоданных на кадр. Это требуется для передачи захвата или передачи воспроизведения файлов, содержащих необработанные аудиоданные. Значение должно находиться в диапазоне от 1 до 256 . Если этот параметр опущен, по умолчанию используется 1.
Укажите количество кадров аудиоданных в секунду. Это требуется для передачи захвата или передачи воспроизведения файлов, содержащих необработанные аудиоданные. Если значение меньше 1000 , оно интерпретируется в единицах кГц. Значение должно быть между 2000 и 192000 . Если этот параметр опущен, по умолчанию используется 8000.
Укажите тип файла. Это необходимо для передачи захвата. Доступные типы перечислены ниже: - wav: формат Microsoft/IBM RIFF/Wave - au, sparc: формат Sparc AU - voc: Creative Tech. голосовой формат - необработанный: необработанные данные
Когда ничего не указано, для передачи захвата тип определяется в соответствии с суффиксом filepath , а тип raw используется для отката.
Укажите эту опцию, если нужно обработать несколько файлов. Для передачи захвата, если один путь к файлу задан как filepath , список filepath генерируется по формуле '
Сброс параметров оборудования и завершение времени выполнения, если серверная часть поддерживает это.
Выберите серверную часть передачи из списка ниже. По умолчанию используется libasound.
- libasound - libffado (необязательно, если компилируется)
Эта опция используется для выбора узла PCM в пространстве конфигурации libasound. Доступные узлы перечислены операцией pcm подкоманды list.
С этой опцией подпоток PCM открывается в неблокирующем режиме. Когда кадр аудиоданных недоступен в буфере субпотока ИКМ, операция ввода-вывода немедленно возвращается без процесса блокировки. Этот параметр также неявно использует параметр --waiter-type, чтобы предотвратить чрезмерное потребление процессорного времени.
С этой опцией кадр аудиоданных обрабатывается непосредственно в буфере субпотока ИКМ, если выбранный узел поддерживает эту операцию. Без опции временные буферы используются для копирования кадра аудиоданных для буфера субпотока ИКМ. Этот параметр также неявно использует параметр --waiter-type, чтобы предотвратить чрезмерное потребление процессорного времени.
Эта опция настраивает данное значение для аппаратного параметра period_size подпотока PCM. Параметр указывает количество кадров аудиоданных за период в буфере субпотока ИКМ. Фактическое количество определяется в результате взаимодействия между каждой реализацией подключаемого модуля PCM, связанного с выбранным узлом PCM, и встроенным драйвером или подключаемыми модулями ввода-вывода PCM.
В идеале за одну операцию ввода-вывода должно обрабатываться такое же количество кадров аудиоданных, как и значение. На самом деле это не так, в зависимости от реализации подключаемых модулей PCM, драйвера ядра, подключаемых модулей ввода-вывода PCM и модели планирования. Для модуля «hw» PCM в модели планирования «irq» значение используется для определения интервалов аппаратного прерывания, таким образом, для одной операции ввода-вывода будет доступно такое же количество кадров аудиоданных, как и значение.
Эта опция настраивает данное значение для аппаратного параметра period_time подпотока PCM. Этот параметр аналогичен параметру --period-size, однако его единицей измерения является микросекунда.
Эта опция настраивает данное значение для аппаратного параметра buffer_size субпотока PCM. Параметр указывает номер кадра аудиоданных в буфере субпотока ИКМ. Фактическое количество определяется в результате взаимодействия между каждой реализацией подключаемого модуля PCM, связанного с выбранным узлом PCM, и встроенным драйвером или подключаемыми модулями ввода-вывода PCM.
В идеале это число кратно количеству кадров аудиоданных за период, т. е. размеру периода. На самом деле это не так, в зависимости от реализации подключаемых модулей PCM, встроенного драйвера и подключаемых модулей ввода/вывода PCM.
Эта опция настраивает данное значение для аппаратного параметра buffer_time подпотока PCM. Этот параметр аналогичен параметру --buffer-size, однако его единицей измерения является микросекунда.
Эта опция указывает тип ожидания для уведомления о событии. В настоящее время доступны четыре типа; по умолчанию , выбрать , опрос и epoll . С типом по умолчанию используется 'snd_pcm_wait()'. С типом select используется системный вызов select(2). С типом poll используется системный вызов 'poll(2)'. С типом epoll используется специфичный для Linux системный вызов epoll(7).
Эта опция должна соответствовать одной из опций --nonblock или --mmap или значению timer --sched-model вариант. Ни эта опция, ни --test-nowait не доступны одновременно.
Эта опция выбирает модель планирования для процесса этой программы. Доступен один из IRQ или таймер. Подробно ознакомьтесь с разделом «МОДЕЛЬ РАСПИСАНИЯ».
Если ничего не указано, используется модель irq.
Эта опция настраивает заданное значение для параметра программного обеспечения avail-min субпотока PCM. В режиме блокировки это значение используется в качестве порога количества доступных кадров аудиоданных в буфере субпотока ИКМ для пробуждения процесса, заблокированного операцией ввода-вывода. В неблокирующем режиме любая операция ввода-вывода возвращает -EAGAIN до тех пор, пока доступное количество кадров аудиоданных не достигнет порогового значения.
Этот параметр действует в случаях, когда не используется ни значение --mmap, ни значение timer для параметра --sched-model.
Эта опция настраивает данное значение для параметра программного обеспечения start_threshold подпотока PCM. Это значение используется в качестве порога для автоматического запуска подпотока ИКМ. В настоящее время эта опция работает в случаях, когда не используется ни значение --mmap, ни значение timer для опции --sched-model.
Для передачи воспроизведения, когда количество накопленных кадров аудиоданных в буфере подпотока ИКМ, в который эта программа записывает, достигает порогового значения, подпоток ИКМ запускается автоматически без явного вызова snd_pcm_start() в ИКМ. подпоток.
Для передачи захвата эта опция бесполезна. Количество накопленных кадров аудиоданных не увеличивается без явного вызова snd_pcm_start() для субпотока ИКМ.
Этот параметр действует в случаях, когда не используется ни значение --mmap, ни значение timer для параметра --sched-model.
Эта опция настраивает заданное значение для stop_threshold параметра программного обеспечения подпотока PCM. Это значение используется в качестве порога для автоматической остановки подпотока ИКМ. В настоящее время эта опция работает в случаях, когда не используется ни значение --mmap, ни значение timer для опции --sched-model.
Для передачи захвата, когда количество накопленных кадров аудиоданных в буфере подпотока PCM, в который записываются драйвер или подключаемые модули PCM alsa-lib, достигает порогового значения, подпоток PCM автоматически останавливается без явного вызова snd_pcm_stop() в субпоток PCM. Это случай, когда эта программа оставляет кадры аудиоданных без чтения на некоторое время.
Для передачи воспроизведения, когда количество доступных кадров аудиоданных в буфере подпотока PCM, из которого считываются драйвер или подключаемые модули PCM alsa-lib, достигает порогового значения, подпоток PCM автоматически останавливается без явного вызова snd_pcm_stop() в подпоток PCM. Это тот случай, когда эта программа оставляет фреймы аудиоданных без записи на некоторое время.
Этот параметр действует в случаях, когда не используется ни значение --mmap, ни значение timer для параметра --sched-model.
Эта опция влияет на подключаемый модуль в alsa-lib, чтобы подавить преобразование частоты дискретизации для кадра аудиоданных.
Эта опция имеет эффект для подключаемого модуля в alsa-lib, чтобы подавить преобразование каналов для фрейма аудиоданных.
Этот параметр имеет эффект для подключаемого модуля в alsa-lib, чтобы подавить преобразование формата образца для фрейма аудиоданных.
Эта опция влияет на плагин 'softvol' в alsa-lib, чтобы подавить преобразование семплов для фрейма аудиоданных с помощью дополнительного элемента управления.
Эта опция подавляет операцию восстановления из состояния XRUN работающего подпотока PCM, после чего процесс этой программы завершается как обычно.
Этот параметр отключает любой ожидающий уведомления о событии ввода-вывода. Операции ввода-вывода повторяются до тех пор, пока не станет доступным какой-либо кадр аудиоданных. Опция приносит большую нагрузку в потреблении процессорного времени.
Этот бэкенд автоматически становится доступным, когда скрипт configure обнаруживает символ ffado_streaming_init() в общем объекте libffado.
Эта опция использует заданное значение, чтобы решить, какой контроллер 1394 OHCI используется для связи. Если в системе Linux есть два контроллера 1394 OHCI, доступны 0 или 1. Ни эта опция, ни -g недоступны одновременно. Если ничего не указано, libffado выполняет связь с устройствами на шине IEEE 1394, управляемой всеми контроллерами 1394 OHCI, доступными в системе Linux.
Эта опция использует заданное значение, чтобы решить, какое устройство используется для связи. Для этого параметра требуется параметр -p, чтобы указать, какой контроллер 1394 OHCI используется для связи с указанным устройством.
Эта опция использует заданное значение, чтобы определить целевое устройство для связи. Значение должно иметь префикс «0x» и состоять из шестнадцатеричных букв (0–9, a–f, A–F). Ни эта опция, ни -p не доступны одновременно. Если ничего не указано, libffado выполняет связь с устройствами на шине IEEE 1394, управляемой всеми контроллерами 1394 OHCI, доступными в системе Linux.
Эта опция использует заданное значение для определения количества кадров аудиоданных в одной операции чтения/записи. Операция блокируется до тех пор, пока количество доступных кадров аудиоданных не превысит заданное значение. По умолчанию используется 512 кадров аудиоданных.
Эта опция использует заданное значение для определения размера промежуточного буфера между этой программой и libffado. По умолчанию используется 2 периода на буфер.
Эта опция позволяет этой программе работать в ведомом режиме. В этом режиме libffado добавляет каталог устройства в конфигурационное ПЗУ контроллера 1394 OHCI, на котором работает система Linux. Каталог модуля может быть найден другим узлом на той же шине. Система Linux, работающая на узле, может передавать изохронный пакет с кадром аудиоданных на устройство. Эта программа может получить пакет и демультиплексировать кадр аудиоданных.
Эта опция позволяет этой программе работать в режиме отслеживания. В этом режиме libffado прослушивает изохронные каналы, на которые устройство передает изохронный пакет. Когда изохронная связь запускается любым устройством на той же шине, эта программа может обрабатывать пакеты.
Этот параметр выполняет pthread_setschedparam() при вызове ffado_streaming_init() для настройки политики планирования и заданного значения в качестве приоритета для потоков, связанных с изохронной связью. Заданное значение должно находиться в пределах параметра RLIMIT_RTPRIO процесса. Подробности см. в разделе getrlimit(2).
Во время передачи SIGINT и SIGTERM закроют обработанные файлы и подпоток PCM, чтобы закончить время выполнения.
SIGTSTP приостановит субпоток PCM, а SIGCONT возобновит его. Никаких XRUN не ожидается. С бэкендом libffado приостановка/возобновление не поддерживается, и выполнение немедленно прерывается.
Другие сигналы выполняют поведение по умолчанию.
$ axfer transfer playback -d 1 something
Вышеприведенное передаст кадр аудиоданных в файл «что-то» для воспроизведения в течение 1 секунды. Образец формата определяется автоматически в результате анализа «чего-то», если он соответствует одному из Microsoft/IBM RIFF/Wave, Sparc AU, Creative Tech. голосовые форматы. Если ничего не обнаружено, следует указать -r , -c и -f или -f со специальным форматом.
$ axfer transfer playback -r 22050 -c 1 -f S16_LE -t raw something
Вышеупомянутое будет передавать кадр аудиоданных в «что-то» файле, не включая информацию о формате образца, в качестве формата образца 22050 Гц, монофонический, подписанный 16-битный PCM с прямым порядком байтов для воспроизведения. Передача продолжается до перехвата SIGINT с клавиатуры или SIGTERM с помощью kill(1) .
$ axfer transfer capture -d 10 -f cd something.wav
Вышеупомянутое перенесет кадр аудиоданных в файл 'something.wav' в качестве примера формата 44,1 кГц, 2 канала, подписанный 16-битный PCM с прямым порядком байтов, в течение 10 секунд. Формат файла — Microsoft/IBM RIFF/Wave в соответствии с суффиксом заданного filepath .
$ axfer transfer capture -s 1024 -r 48000 -c 2 -f S32_BE -I -t au channels
Вышеупомянутый кадр аудиоданных будет передан в формате образца 48,0 кГц, 2 канала, подписанный 32-битный код PCM с прямым порядком байтов для 1024 кадров данных в файлы с именами «channels-1.au» и «channels-2.au».
В конструкции ядра ALSA PCM среда выполнения подпотока PCM поддерживает два режима; пробуждение по периоду и пробуждение без периода. Эти два режима предназначены для разных моделей планирования.
По умолчанию используется режим периодного пробуждения. В этом режиме встроенные в ядро драйверы должны использовать аппаратное обеспечение для генерации периодического уведомления о передаче кадра аудиоданных. Интервал уведомления эквивалентен тому же объему кадра аудиоданных, что и один период буфера, относительно фактического времени.
В обработчике, назначенном уведомлению, вызывается вспомогательная функция ядра ALSA PCM, чтобы обновить позицию до начала аппаратной передачи, затем сравнить ее с позицией до начала операции приложения, чтобы определить превышение/недополнение (XRUN) и активировать заблокированные процессы.
Для этой цели обычно используется аппаратный IRQ контроллера для последовательной звуковой шины, такой как звук Inter-IC. В этом случае контроллер генерирует IRQ в соответствии с передачей по последовательной аудиошине. В обработчике, назначенном для IRQ, запрашивается передача прямого доступа к среде (DMA) между выделенной памятью хоста и памятью устройства.
Если целевое оборудование не поддерживает такой механизм, периодическое уведомление должно эмулироваться любым таймером; например hrtimer, таймер ядра. Внешние подключаемые модули PCM, сгенерированные SDK подключаемых модулей PCM в alsa-lib, также должны эмулировать описанное выше поведение.
В этом режиме приложения PCM программируются в соответствии с типичным способом операций ввода/вывода. Они выполняют блокирующие системные вызовы для чтения/записи фрейма аудиоданных в буфер субпотока ИКМ или блокирующие системные вызовы для ожидания, пока не будет доступен любой фрейм аудиоданных. В axfer это называется моделью планирования на основе IRQ и поведением по умолчанию. Пользователи могут явно настроить этот режим, используя параметр --sched-model со значением irq.
Режим no-period-wakeup является необязательным режимом работы подпотока ИКМ. Режим предполагает специфику аппаратного обеспечения и помощь встроенного в ядро драйвера и приложений PCM. В этом режиме встроенные в ядро драйверы не используют оборудование для создания периодического уведомления о передаче кадра аудиоданных. Аппаратное обеспечение должно автоматически продолжать передачу кадра аудиоданных без периодического срабатывания драйверов; например в соответствии с автоматически инициируемой передачей DMA, цепочкой зарегистрированных дескрипторов.
В этом режиме ничто не будит заблокированные процессы, поэтому приложения PCM следует программировать без какой-либо блокирующей операции. По этой причине этот режим включается, когда приложения PCM явно настраивают аппаратный параметр на время выполнения подпотока PCM, чтобы предотвратить нарушение работы существующих приложений. Кроме того, ничто не поддерживает синхронизацию для передачи кадра аудиоданных, поэтому приложения ИКМ должны добровольно обрабатывать любой таймер для постановки в очередь кадра аудиоданных в буфере подпотока ИКМ на истечение времени. Кроме того, вместо драйвера приложение PCM должно вызывать вспомогательную функцию ядра ALSA PCM для обновления позиции в начале аппаратной передачи и проверки XRUN.
В axfer это называется моделью планирования на основе таймера и доступна до тех пор, пока оборудование/драйвер поддерживает среду выполнения без периода пробуждения. Пользователи должны явно установить этот режим, используя параметр --sched-model со значением timer.
В модели планирования приложения PCM должны заботиться о доступном пространстве в буфере PCM по прошествии времени, как правило, уступая ЦП и ожидая повторного планирования. Для получения тайм-аут рассчитывается для предпочтительного количества кадров PCM для обработки. Это удобно для таких приложений, как звуковые серверы. когда поток ввода-вывода сервера ожидает истечения времени ожидания, другие потоки могут обрабатывать кадры аудиоданных для клиентов сервера. Кроме того, с использованием перемотки назад/вперед приложения могут добиться малой задержки между позицией передачи и позицией обработки, даже если они используют буферы ИКМ большого размера.
В идеале модель планирования на основе таймера имеет некоторые преимущества по сравнению с моделью планирования на основе IRQ. Сначала для подпотока ИКМ не выполняется контекст прерывания. Подпоток ИКМ обрабатывается только в контексте любого процесса. Нет необходимости заботиться о состоянии гонки между IRQ и контекстами процесса. Это снижает некоторые опасения некоторых разработчиков драйверов и приложений. Во-вторых, процессорное время не используется для обработчиков контекста прерывания. Время ЦП может быть выделено для других задач. Это хорошо с точки зрения системы разделения времени. В-третьих, аппаратное обеспечение не настроено на генерацию прерываний. Это хорошо с точки зрения возможного снижения общего энергопотребления.
В любой модели планирования аппаратное обеспечение должно позволять драйверам считывать количество кадров аудиоданных, переданных между выделенной памятью и памятью устройства для последовательной аудиошины. Однако в модели планирования, основанной на таймере, важна высокая степень детализации и точность значения. На самом деле аппаратное обеспечение выполняет передачу между выделенной памятью и памятью устройства для небольшого пакета кадров аудиоданных или байтов. С точки зрения приложений ИКМ требуется степень детализации текущей передачи, чтобы определить правильный тайм-аут для каждой операции ввода-вывода. Начиная с ядра Linux версии 4.21, интерфейс ALSA PCM между ядром и пользовательским пространством не имеет возможности сообщать об этом.
Подкоманда transfer команды axfer предназначена для обеспечения совместимости с aplay(1). Однако некоторые опции ниже несовместимы по ряду технических причин.
Эта опция поддерживается только для файлов для хранения кадров аудиоданных, соответствующих каждому каналу. В реализации aplay(1) эта опция имеет дополнительный эффект использования буфера PCM, выровненного в порядке без чередования, если целевое устройство поддерживает. По состоянию на 2018 год буфер PCM нечередующегося порядка практически не используется звуковыми устройствами.
Эта опция указывает порог для пробуждения заблокированного процесса в единице кадра аудиоданных. В реализации aplay(1) этот параметр не действует с параметром --mmap, а также с параметром timer для параметра --sched-model.
Эта опция указывает порог для запуска подготовленного подпотока ИКМ в единице кадра аудиоданных. В реализации aplay(1) этот параметр не действует с параметром --mmap, а также с параметром timer для параметра --sched-model.
Эта опция указывает пороговое значение для прекращения выполнения субпотока ИКМ в единице кадра аудиоданных. В реализации aplay(1) этот параметр не действует с параметром --mmap, а также с параметром timer для параметра --sched-model.
Этот вариант не поддерживается. В реализации aplay(1) опция имеет эффект для передачи захвата, чтобы сохранить файлы до того количества кадров данных, которое задано значением второго блока, или максимальное количество кадров данных, поддерживаемое используемым форматом файла. При достижении ограничения используемый файл закрывается, затем открывается новый файл и записываются кадры аудиоданных. Однако эта опция требует дополнительной обработки файлов и усложняет основной цикл axfer.
Этот вариант не поддерживается. В реализации aplay(1) эта опция влияет на передачу захвата для создания путей к файлам в соответствии с заданным форматом, в котором доступны некоторые дополнительные форматы, а также форматами, поддерживаемыми strftime(3). Однако эта опция требует дополнительной обработки строк для путей к файлам и утомительна, если написана на языке C.
Этот вариант не поддерживается. В реализации aplay(1) опция создает файл для заданного значения и записывает в него идентификатор процесса. Этот файл позволяет пользователям получить идентификатор процесса и отправить любой сигнал POSIX процессу aplay. Однако у этой идеи есть некоторые проблемы с блокировкой файлов, когда несколько процессов aplay запускаются с одним и тем же файлом.
В настоящее время этот параметр не поддерживается. В реализации aplay(1) эта опция приводит к тому, что стандартный вывод занимает некоторые управляющие символы терминала и отображает вуметр для монофонических и стереоканалов. Однако есть некоторые проблемы; эта функция предназначена только для кадров аудиоданных в формате PCM, эта функция приводит к нарушению работы терминала после прерывания, стандартный вывод недоступен для конвейера.
В настоящее время этот параметр не поддерживается. В реализации aplay(1) эта опция позволяет занять стандартный ввод для ввода с клавиатуры и приостановить/возобновить подпоток PCM в соответствии с нажатой клавишей ввода. Однако эта функция требует дополнительной обработки ввода в основном цикле и оставляет утомительную операцию для поддержки подпотока ИКМ.
Ядро ALSA PCM и ядро управления не поддерживают эту функцию, поэтому переназначение должно выполняться в пользовательском пространстве. Это приводит к накладным расходам на выравнивание кадров аудиоданных, особенно для операции mmap. Кроме того, начиная с alsa-lib v1.1.8, некоторые плагины не поддерживают эту функцию ожидаемо, таким образом, эта опция является отсутствием прозрачной работы. В настоящее время эта опция пока не поддерживается, чтобы не путать пользователей.
Это выполняет приостановку/возобновление субпотока ИКМ. В реализации aplay(1) эти операции передают состояние XRUN в подпоток, а приостановка/возобновление выполняется в интерактивном режиме, как описано выше. Некоторые разработчики используют сигнал для теста восстановления от XRUN. В настоящее время альтернатива тесту не поддерживается.
Это не поддерживается. В реализации aplay(1) этот сигнал назначается обработчику для закрытия текущего файла для сохранения кадра аудиоданных и открытия нового файла для продолжения обработки. Однако, как и опция --max-file-time, эта опция должна увеличить сложность основного цикла axfer.
Эта программа состоит из трех модулей; xfer , сопоставитель и контейнер . Каждый модуль имеет уровень абстракции, обеспечивающий фактическую реализацию.
-------- ---------- -------------
device <-> | xfer | <-> | mapper | <-> | container | <-> file
-------- ---------- -------------
libasound single wav
libffado multiple au
voc
raw
Модуль xfer выполняет фактическую передачу на устройства и узлы. Модуль может иметь несколько серверных частей передачи. В качестве серверной части по умолчанию для выполнения передачи через API alsa-lib используется серверная часть libasound. Модуль позволяет каждому бэкэнду анализировать собственные параметры командной строки.
Модуль контейнера выполняет чтение/запись кадра аудиоданных через дескриптор файла/потока мультимедийного контейнера или необработанных данных. Модуль автоматически определяет тип мультимедийного контейнера и анализирует параметры в его метаданных заголовка данных. В настоящее время поддерживаются три типа мультимедийных контейнеров; Microsoft/IBM RIFF/Wave ( wav ), Sparc AU ( au ) и голос Creative Technology ( voc ). Дополнительно подготовлен специальный контейнер для необработанных аудиоданных ( raw ).
Модуль mapper управляет расположением и выравниванием буфера для передачи кадра аудиоданных. Модуль имеет две реализации; один и несколько . Единый бэкэнд использует один контейнер для создания буфера. В множественном бэкэнде используется несколько контейнеров для его создания.
Между модулем xfer и модулем mapper передается указатель на буфер, включающий кадры аудиоданных. Этот буфер имеет две формы для порядка с чередованием и без чередования. В первом случае указатель указывает на один буфер. Для последнего указатель указывает на массив, в котором каждый элемент указывает на один буфер. Между модулем mapper и модулем container передается указатель на один буфер, поскольку поддерживаемые медиаконтейнеры, включая необработанный тип, хранят кадры аудиоданных в чередующемся порядке.
При передаче кадра аудиоданных между модулями axfer запрограммирован так, чтобы максимально избегать копирования между буфером в другой буфер. Например, в некоторых приведенных ниже сценариях копирование между модулями не происходит.
- xfer (mmap/чередование), mapper (один), контейнер (любой) - xfer (mmap/без чередования), mapper (несколько), контейнеры (любой)
Для каждого из модулей mapper и container доступен модульный тест. Чтобы запустить тесты, выполните следующую команду:
$ make test
Каждый тест повторяет запись в файл и чтение в файл много раз, и для завершения требуется много времени. Пожалуйста, позаботьтесь о времени выполнения, если вы работаете в любой среде CI.
axfer(1), axfer-list(1), alsamixer(1), amixer(1)
Такаши Сакамото o-takashi@sakamocchi.jp