2012-04-18 1 views
0

Я разрабатываю приложение, которое будет генерировать аудиопоток (PCM) на основе входной последовательности. Этот звук (аудиопоток) будет воспроизводиться от начала и до конца. Я хочу, чтобы некоторые уведомления о позиции в входной последовательности при воспроизведении сгенерированного звука.Аудиопоток с уведомлением о позиции

Пример:

У меня есть входные данные как «ABC» и генерируемого звука соответствует 3-х секунд для буквы А, 2 секунд для буквы B и 2 секунды для буквы С ---> в общей сложности 7 секунд (3 + 2 + 2). Уведомление означает, что через 3 секунды выдается сообщение о 'Передано', через 2 секунды после этого отправляется событие о 'B, переданное', и через 2 секунды отправляется сообщение «C, переданное».

Есть ли классический способ сделать это, или это особенно важно для каждой проблемы? (Я использую C/C++ с фреймворком portaudio)

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

ПРИМЕЧАНИЕ. Я знаю, как отправлять асинхронные события между потоками и межпоточную связь. Меня просто интересует, есть ли у этого способ classic.

Благодаря

ответ

1

Portaudio не имеет механизма, чтобы уведомить вас, когда конкретное событие воспроизводится через звуковое устройство, или когда определенное время прошло. Если вам необходимо знать, когда определенный объем данных прошел через устройство, вам необходимо опросить устройство, используя Pa_GetStreamTime.

Часто, особенно при настройках с малой задержкой, достаточно знать, что данные записаны и будут воспроизведены. В этом случае будет выполняться стандартная (без блокировки) межпоточная связь.