Получение аудиоданных каждые 20 миллисекунд в ALSA?

Я хотел бы вызвать snd_pcm_readi() и получать АУДИО-ДАННЫЕ каждые 20 мс или каждые 40 мс. Я хочу знать, как синхронно получать мои данные... то есть каждые X мс...

Спасибо за любые ответы.


person Xofo    schedule 09.10.2010    source источник
comment
Я должен был добавить ... как ПРАВИЛЬНО сделать это в ALSA ... или мне нужно использовать сон или какой-то pthread_cond_timed_wait или что-то в этом роде ...   -  person Xofo    schedule 09.10.2010


Ответы (1)


для чтения или воспроизведения звука в реальном времени вы обычно создаете выделенный рабочий поток с высоким приоритетом для вызова, а затем используете несколько кольцевых буферов. ваша нить должна избегать блокировки.

альса примеры:

http://www.alsa-project.org/alsa-doc/alsa-lib/_2test_2latency_8c-example.html#a36

http://www.alsa-project.org/alsa-doc/alsa-lib/_2test_2pcm_8c-example.html

если вы просто читаете с диска, вам понадобится достаточно буфера, затем просто проснитесь и посмотрите, нужно ли вам читать больше, прежде чем вы проснетесь в следующий раз (учитывая общую задержку).

person justin    schedule 09.10.2010
comment
Является ли snd_pcm_wait() функцией, которую мне нужно вызвать? Я все еще не так ясно? - person Xofo; 09.10.2010
comment
@Xofo извините, вопрос слишком широк для меня, чтобы ответить в разумные сроки (или кратко) - я даже не знаю, что вы делаете со звуком (заполнение/копирование, генерация, обработка, чтение с диска, чтение из ряда других источников). это помогло бы добавить много деталей к вашему сообщению. документы могут ответить на некоторые из ваших вопросов высокого уровня (с примечаниями об уведомлениях и о том, как alsa обрабатывает обмен данными - snd_pcm_wait может быть тем, что вам нужно, если вам нужна только процедура опроса в простой программе): alsa-project.org/alsa-doc/alsa-lib/pcm.html - person justin; 10.10.2010