В своем приложении для Android я использую библиотеку Oboe и библиотеку Vorbisfile для извлечения, обработки и перенаправления аудиосэмплов на аудиовыход.
Для простоты, вот краткий обзор того, что я делал (на примере hello-oboe здесь ):
oboe::DataCallbackResult PlayAudioEngine::onAudioReady(oboe::AudioStream *audioStream, void *audioData, int32_t numFrames)
{
// init:
if (mBufferSizeSelection != kBufferSizeAutomatic && audioStream->getBufferSizeInFrames() != mBufferSizeSelection * mFramesPerBurst)
{
audioStream->setBufferSizeInFrames(mBufferSizeSelection * mFramesPerBurst);
}
// audio extraction:
if (audioStream->getFormat() == oboe::AudioFormat::Float)
{
// extract audio samples using vorbisfile...
// put the extracted audio samples in audioData...
}
else
{
// extract audio samples using vorbisfile...
// put the extracted audio samples in audioData...
}
return oboe::DataCallbackResult::Continue;
}
Этот код работает как чудо на большинстве устройств (я тестировал его на 10+ устройствах, в том числе бюджетных устройствах, таких как Galaxy S3 mini или Nokia 1), без каких-либо задержек.
Проблема заключается в следующем: На некоторых устройствах (Archos 55 Cobalt (API 23) и OnePlus One (API 23)) звук довольно медленный, особенно если я извлекаю 2 аудиофайла одновременно (так что я могу играть их одновременно), , в то время как тот же код работает без проблем на менее мощных устройствах, таких как Nokia 1 .
Я также пытался установить для mBufferSizeSelection
значение 4 или даже 8, но никаких изменений не произошло.
Кто-нибудь испытывал нечто подобное? Я что-то пропустил?
Спасибо за вашу помощь.