Я пробовал OpenSL в течение нескольких недель. Я пытаюсь получить доступ к буферу при воспроизведении файла на SD-карте через SL_DATALOCATOR_URI в качестве источника. Я хочу написать несколько собственных эффектов и мне нужен буфер.
В настоящее время в коде я создаю два аудиоплеера. Один читает файл в буфер, другой записывает буфер в выходной файл. Когда я тестирую код с микрофоном (диктофоном), все в порядке. Звук на входе-выходе работает как положено.
Когда я переключаю рекордер с аудиоплеером uri, очередь выходит из строя. Стриминг не прослушивает блокировки потоков (происходит асинхронно как я понял) и вызовы буфера не корректно фаерятся, время летит незаметно.
Я поставил журналы для каждого метода, поэтому результат выглядит примерно так:
V/PDecoder( 1292): Position : 15023
V/PDecoder( 1292): Position : 16044
V/PDecoder( 1292): Position : 17043
V/PDecoder Native PL1( 1292): bqPlayerCallback
V/PDecoder Native PL1( 1292): Notify thread lock
V/PDecoder Native PL1( 1292): android_AudioIn 32768
V/PDecoder Native PL1( 1292): Wait thread lock
V/PDecoder Native PL1( 1292): android_AudioOut 32768
V/PDecoder Native PL1( 1292): android_AudioIn 32768
V/PDecoder Native PL1( 1292): android_AudioOut 32768
V/PDecoder Native PL1( 1292): Wait thread lock
V/PDecoder Native PL1( 1292): bqRecorderCallback
V/PDecoder Native PL1( 1292): Notify thread lock
V/PDecoder( 1708): Position : 18041
V/PDecoder( 1708): Position : 19040
V/PDecoder( 1708): Position : 20038
Секунды улетают еще до того, как сработают обратные вызовы очереди.
Так вот вопрос, как исправить эту проблему? Есть ли способ для аудиоплеера > буфера > выходного решения для воспроизведения uri? Что я делаю неправильно? Если кто-то может указать мне правильное направление, это очень ценится.
Код немного длинный для вставки сюда, так что вот суть