Я создаю приложение, которое будет генерировать звук (на данный момент это в основном экспериментальный) и воспроизводить его на телефоне Android.Воспроизведение генеративного звука с помощью OpenSL
На данный момент я пытаюсь воспроизвести простой синусоидальный звук (440 Гц) и сначала попытался с помощью Audiotrack, но испытал некоторый перебор буфера. Поэтому я решил взглянуть на OpenSL.
Теперь я прочитал много учебников и сообщений в блоге об этом и, наконец, сделал свою собственную реализацию, используя OpenSL-модуль с простой буфером для Android.
Теперь в обратном вызове буфера я генерирую новые данные буфера и добавляю его в очередь, но тогда задержка намного хуже, чем звуковая дорожка (я могу слышать промежутки между буферами).
Мой вопрос: что такое лучшая практика/архитектура для генерируемых звуков в OpenSL? Должен ли я заполнять буфер в альтернативном потоке (тогда нужен какой-то процесс синхронизации с обратным вызовом буфера)?
Я еще не нашел учебники по OpenSL ES для сгенерированных звуков (большинство из них воспроизводят аудиофайлы или перенаправляют аудио вход на аудиовыход).
_ «Задержка намного хуже, чем звуковая дорожка (я слышу пробелы между буферами)» _. Звучит для меня так, как будто вы описываете переполнение буфера (буферы помещаются в очередь, не заполняя их полностью). Если вы не останавливаете и не перезапускаете свой игровой объект между каждым буфером, между буферами не должно быть задержек; только начальный при первом запуске объекта игрока. Что касается вашего вопроса; Я просто использую обратный вызов очереди буфера для размещения очередного буфера, но мне пришлось попробовать разные размеры буфера, прежде чем я нашел тот, который работал. – Michael