Передача PCM данных из канала захвата (плагино-зависимая функция)
#include <sys/asoundlib.h>ssize_t snd_pcm_plugin_read( snd_pcm_t *handle,void *buffer,size_t size );
libasound
Функция snd_pcm_plugin_read() считывает сэмплы из устройства, определяемого дескриптором handle. Формат сэмплов должен быть задан через snd_pcm_plugin_params().
Аргументы handle и buffer должны быть корректными. |
Функция может приостановить выполнение приложения, если блокирующие операции активны (см. snd_pcm_nonblock_mode()) и нет готовых к чтению данных.
Если считывается менее чем размер фрагмента, не будет возвращен статус -EFAULT или -EIO до тех пор, пока не будет считано ровно столько данных, каков размер фрагмента. Это связано с логикой работы плагина буферизации (см. snd_pcm_plugin_set_disable()). При накоплении полного фрагмента генерируется сообщение менеджеру io-audio (получить код ошибки до поступления сообщения в io-audio невозможно). |
ЗОСРВ «Нейтрино»
Функция является плагино-зависимым аналогом snd_pcm_read(). Следует убедиться, что плагино-зависимый и независимый вызовы не смешиваются в приложении. В противном случае поведение будет непредсказуемым.
Плагино-зависмые версии вызово чтения и записи не требуют того, чтобы операции производитись с данными, кратными размеру фрагмента (в отличие от плагино-независимых вызовов). Это связано с логикой работы плагина буферизации (см. snd_pcm_plugin_set_disable()). Отключить его можно с помощью бита PLUGIN_DISABLE_BUFFER_PARTIAL_BLOCKS
параметра функции snd_pcm_plugin_set_disable(). В этом случае плагино-зависимые функции буду возвращать ошибку при попытке работы с данными не кратными размеру фрагмента.
В любом случае чредующиеся стерео данные должны быть выровнены по размеру сэмплов (по числу каналов). Например, каждая запись должна иметь такое же число сэмплов для левого и правого каналов.
snd_pcm_plugin_set_disable(), snd_pcm_plugin_write(), snd_pcm_read()
Предыдущий раздел: Библиотека libasound