Может кто-нибудь объяснить, как snd_pcm_writei
snd_pcm_sframes_t snd_pcm_writei(snd_pcm_t *pcm, const void *buffer,
snd_pcm_uframes_t size)
работает?
Я использовал это так:
for (int i = 0; i < 1; i++) {
f = snd_pcm_writei(handle, buffer, frames);
...
}
Полный исходный код на http://pastebin.com/m2f28b578
Значит ли это, что я должен snd_pcm_writei()
указывать не количество всех кадров в buffer
, а только
частота_выборки * задержка = frames
?
Итак, если я, например. есть: sample_rate = 44100 задержка = 0,5 [с] all_frames = 100000
Количество кадров, которые я должен дать snd_pcm_writei()
, будет
Sample_rate * задержка = кадры 44100 * 0,5 = 22050
и количество итераций цикла for?:
(целое) 100000/22050 = 4; с кадрами=22050
и один дополнительный, но только с
100000 по модулю 22050 = 11800
кадры?
Так это работает?
Луиза
http://www.alsa-project.org/alsa-doc/alsa-lib/group___p_c_m.html#gf13067c0ebde29118ca05af76e5b17a9