Передача PCM данных в канал воспроизведения
#include <sys/asoundlib.h>ssize_t snd_pcm_write( snd_pcm_t *handle,const void *buffer,size_t size );
libasound
Функция snd_pcm_write() записывает сэмплы в устройство, определяемое дескриптором handle. Формат сэмплов должен быть задан через snd_pcm_channel_prepare() или snd_pcm_playback_prepare().
Функция может приостановить выполнение приложения, если блокирующие операции активны (см. snd_pcm_nonblock_mode()) и нет места в буферах устройства.
Если субустройство находится в блокирующем режиме (SND_PCM_MODE_BLOCK
), количество записываемых данных должно соответствовать выражению N × fragment-size, где N > 0
.
Если формат потока не является черезстрочным (поле interleave структуры snd_pcm_format_t не установлено), тогда драйвер ожидает отдельные блоки для каждого голоса, инкапсулированные во фрагменте. Допустим, что имеется два голоса и размер фрагмента равен 512 байтам. Число байт данных для каждого голоса равно 256. Драйвер ожидает первые 256 байт, которые содержат сэмплы для первого голоса и вторые 256 байт фрагмента, которые содержат сэмплы второго голоса.
NULL
, но size больше 0
. SND_PCM_MODE_BLOCK
, size не является кратным значению поля frag_size структуры snd_pcm_channel_setup_t. ЗОСРВ «Нейтрино»
snd_pcm_channel_prepare(), snd_pcm_playback_prepare(), snd_pcm_plugin_write()
Предыдущий раздел: Библиотека libasound