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