Подтвердить что ты не робот

Бесшовные петли с SoundPool на Android?

Я пытаюсь использовать короткие (20kb), беззеркальные ogg файлы со классом SoundPool и не могу получить согласованные результаты при тестировании на аппаратном обеспечении. Он всегда отлично воспроизводится с использованием эмулятора, но когда я тестирую Nexus 1 или на Samsumg Galaxy Tab 10.1, в каждой точке цикла появляются звуковые щелчки или клики. Что очень странно, так это то, что в то время как последовательное приложение запускалось, клики немного отличаются при каждом перезапуске приложения и в редких случаях (чаще на планшете) цикл воспроизводится правильно.

Результаты не улучшаются с помощью MediaPlayer. Неразумно ли ожидать беспроблемного воспроизведения звуковых контуров на андроиде? Неужели кто-то имеет аналогичную функциональность, работающую должным образом? Если это так, я хотел бы увидеть пример того, как это работает.

Спасибо!

4b9b3361

Ответ 1

Я использовал хак, который отлично работает для отдельных файлов:

HACK_loopTimer = new Timer();
HACK_loopTask = new TimerTask() {               
    @Override public void run() {
        mMediaPlayer.seekTo(0);
    }
};
long waitingTime = mMediaPlayer.getDuration()-mHackLoopingPreview;
HACK_loopTimer.schedule(HACK_loopTask, waitingTime, waitingTime);

Просто установите mHackLoopingPreview на разумную сумму; Я использую 100 мс, и он работает нормально. Я должен согласиться с тем, что это менее идеальное и уродливое решение, но, по крайней мере, оно выполняет свою работу.

Ответ 2

Я нашел другое решение:

afd = assetManager.openFd(nameSound);

player.setDataSource(afd.getFileDescriptor(),
                     afd.getStartOffset(), afd.getLength() - 1000);
afd.close();
player.prepare();
player.setLooping(true);
player.start();

Вам нужно определить длительность 1000 (1 мс) меньше, чем общая продолжительность. Y eso es todo, problema resuelto!!!!

Ответ 3

Это может звучать как коп, но есть две вещи, которые вы можете попробовать, первая из которых сработала для меня.

  • Сделайте аудиоформаты ogg с частотой дискретизации 48 кГц и 48 Кбит/с (это сработало для меня)

  • Вы можете создать 2 объекта MediaPlayer и (как и ответ @Beowulf Bjornson) приблизительно <= 100ms запустить MediaPlayer # 2 непосредственно перед тем, как MediaPlayer # 1 закончится и чередуется между целым временем.

Надеюсь, что люди, которые приходят сюда, пробуют то, что я сказал, потому что я потратил около 3 дней, пытаясь понять это, только чтобы быть удивленным, что нет возможности использовать это без ошибок.