То, что я хотел бы сделать, сделать запись голоса, обработать его как добавление некоторого эффекта к зарегистрированному аудио, и затем переиграть его максимально быстро использующий opensl. Я испытываю затруднения при нахождении информации о сети о выполнении чего-то вроде этого, таким образом, у меня на самом деле есть пара вопросов.
Я посмотрел на аудиосэмпл уроженца андроида и книгу, начинающую андроид ndk, который начал меня с opensl, но они действительно не помогли мне понять запись очень хорошо.
1) Таким образом, сначала, чтобы немедленно воспроизвести зарегистрированное аудио, я был бы в состоянии прочитать буфер от нити, которая играет аудио, в то время как то же самое время нить записи пишет буферу? Я знаю, что кто-то, вероятно, сойдет с ума об этой идее, потому что идея получить доступ к некоторому объекту в памяти двумя различными нитями в то же время могла привести к проблемам, но если нить записи удостоверена, чтобы всегда написать памяти только перед нитью аудио игры, то это было бы возможным правом?
2) Или воспроизвести в режиме реального времени, я буду использовать буферную очередь с двумя или тремя очень маленькими буферами и отзыв, который называют каждый раз, когда каждый переполнен, затем играйте тот буфер, в то время как следующий буфер заполнен нитью аудио записи? но я читал, и кто-то сказал, что отзывы не всегда называют (самая полезная связь, которую я нашел об этом: https://groups.google.com/forum/#! message/android-ndk/hLSygQrmcPI/qtwB76JNa_EJ). также, это означает, что разница во времени между зарегистрированным аудио и воспроизведенным аудио была бы размером буфера плюс время, которое требуется для отзыва, чтобы сообщить объекту записи начать делать запись использования следующего буфера. Я думаю, что был бы промежуток между тем, когда рекордер прекращает делать запись и когда это начинает делать запись снова.
3) Андроид, делающий запись буферной очереди, также, где у меня есть проблемы при понимании. Я должен использовать буферную очередь в андроиде, чтобы сделать запись аудио? или действительно ли возможно сделать запись непосредственно к буферу, не используя буферную очередь? У меня есть проблемы с этим, потому что четкий метод SLAndroidSimpleBufferQueueItf
, на самом деле кажется, не работает. по-видимому, это - ошибка. и я, может казаться, не делаю запись по буферу после его уже бывший заполненный данными. так как четкий метод, кажется, не работает, как я могу сказать рекордер, который буферизуют в очереди, чтобы сделать запись к?
Я знаю, что это - своего рода партия, чтобы спросить, и я не сказал все, что я попробовал, но я надеялся, что кто-то имеет некоторый опыт с этим и может пролить некоторый свет для меня и кого-либо еще, у которого есть проблема при воспроизведении зарегистрированного аудио, в режиме реального времени используя opensl.