Определить, когда буфер был воспроизведен без опроса источника в OpenAL

Это вообще возможно? Было бы очень круто, если бы мне каким-то образом удавалось вызывать функцию каждый раз, когда обрабатывается буфер. Любые другие идеи, кроме опроса источника, приветствуются: D


person Valentin Radu    schedule 04.04.2011    source источник
comment
Вы имели в виду опрос источника?   -  person geofftnz    schedule 05.04.2011
comment
+1 Действительно, извините, я отредактировал вопрос   -  person Valentin Radu    schedule 05.04.2011
comment
Вот что-то похожее: stackoverflow.com/questions/1046315/   -  person geofftnz    schedule 05.04.2011
comment
и это, которое, кажется, говорит нет: opensource.creative.com/pipermail /openal/2009-April/011616.html   -  person geofftnz    schedule 05.04.2011
comment
Да, я думаю, что это невозможно, но все же интересно, будет ли это ресурсоемко по сравнению с опросом?   -  person Valentin Radu    schedule 05.04.2011


Ответы (1)


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

Если вы чувствуете себя очень бесстрашным, вы можете взломать исходный код OpenAL-soft. Судя по коду, вы поместите изменение в mixer.c в самый конец файла, где-то ближе к концу функции MixSource().

Помня, конечно, что OpenAL-soft — это лицензия LGPL; поэтому вам нужно будет выпустить/сделать доступными любые изменения, которые вы внесли в саму библиотеку.

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

person JCooper    schedule 05.04.2011
comment
Я думаю, что понимаю, что вы говорите, JCooper, однако я не знаю, смогу ли я коснуться этой реализации OpenAL (iOS). Если бы я мог, помогло бы мне знание частоты дискретизации и количества выборок в каждом буфере, если фактическая обработка зависит от процессора? (можно больше или меньше). - person Valentin Radu; 05.04.2011
comment
Я сомневаюсь, что вы можете изменить версию OpenAL для iOS, но я думаю, что вы можете заставить ее использовать OpenAL-soft в качестве плагина или что-то в этом роде. Я не уверен, что вы имеете в виду с остальной частью вашего комментария. Продолжительность обработки звукового буфера должна быть более или менее независимой от процессора. - person JCooper; 05.04.2011
comment
Я выбираю ваш ответ, потому что даже если для iOS это не сработает (в итоге я опрашиваю источник), возможно, это поможет кому-то еще, кто работает на другой платформе! Спасибо! - person Valentin Radu; 05.04.2011