snd_pcm_read()

Передача PCM данных из канала захвата

Прототип:

#include <sys/asoundlib.h>
ssize_t snd_pcm_read( snd_pcm_t *handle,
void *buffer,
size_t size );

Аргументы:

handle
Дескриптор PCM устройства, созданный с помощью snd_pcm_open() или snd_pcm_open_preferred().
buffer
Указатель на буфер для заполнения.
size
Размер буфера в байтах.

Библиотека:

libasound

Описание:

Функция snd_pcm_read() считывает сэмплы из устройства, определяемого дескриптором handle. Формат сэмплов должен быть задан через snd_pcm_channel_prepare() или snd_pcm_capture_prepare().

Функция может приостановить выполнение приложения, если блокирующие операции активны (см. snd_pcm_nonblock_mode()) и нет готовых к чтению данных.

Если субустройство находится в блокирующем режиме (SND_PCM_MODE_BLOCK), количество прочитанных данных должно соответствовать выражению N × fragment-size, где N > 0.

Если формат потока не является черезстрочным (поле interleave структуры snd_pcm_format_t не установлено), тогда драйвер вернет отдельные блоки для каждого голоса, инкапсулированные во фрагменте. Допустим, что имеется два голоса и размер фрагмента равен 512 байтам. Число байт данных для каждого голоса равно 256. Драйвер возвращает первые 256 байт, которые содержат сэмплы для первого голоса и вторые 256 байт фрагмента, которые содержат сэмплы второго голоса.

Возвращаемое значение:

>=0
Число успешно считанных из устройства данных в байтах, если захват был успешным.
-EAGAIN
Субустройство открыто в неблокирующем режиме и не имеет доступных данных, следует попробовать позднее.
-EFAULT
Ошибка копирования данных.
-EINVAL
Некорректный аргумент handle; указатель на данные равен NULL, но size не рпвен 0 или является отрицательным.
-EIO
Канал не находится в состояниях prepared или running.

Классификация:

ЗОСРВ «Нейтрино»

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

snd_pcm_capture_prepare(), snd_pcm_channel_prepare(), snd_pcm_format_t, snd_pcm_plugin_read(), snd_pcm_write()




Предыдущий раздел: Библиотека libasound