[P&AM Lab] ALSA API

LonelyRuyK Lonely.RuyK на mail.ru
Вт Ноя 22 03:55:44 MSK 2011


Здравствуйте.
Столкнулся с проблемой при написании программы использующей библиотеку alsa.

Программа должна в реальном времени воспроизводить в колонках те 
звуки, которые идут на микрофон

Схематично всё выглядит так:
snd_pcm_open(&pcm_c, name, SND_PCM_STREAM_CAPTURE, 0);
snd_pcm_open(&pcm_p, name, SND_PCM_STREAM_PLAYBACK, 0);

.../* Now set params */

while(loops > 0) {
	snd_pcm_readi(pcm_c, ibuff, frames);

	snd_pcm_writei(pcm_p, obuff, frames);

}
snd_pcm_drain(pcm_c);
snd_pcm_drain(pcm_p);

snd_pcm_close(pcm_c);
snd_pcm_close(pcm_p);

Вместо того чтобы проигрывать переданные snd_pcm_writei сэмплы сразу, 
приложение ждёт когда 
выполнится snd_pcm_drain(pcm_p); и уже потом проигрывает всё то что пришло на 
микрофон. Т.е. вместо воспроизведения в реальном времени приложение сначала 
записывает данные, а уже потом воспроизводит всё то что пришло.

Не могу понять как заставить проигрываться короткие размеры сэмплов.
Пытался найти в интернете решение, ничего путного не обнаружил.
Кто-нибудь знает как решить эту проблему?


Подробная информация о списке рассылки Lab