Бесшовные зацикливание с SoundPool на Android? - PullRequest
12 голосов
/ 26 декабря 2011

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

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

Спасибо!

Ответы [ 3 ]

4 голосов
/ 03 мая 2012

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

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 мс, и он работает нормально. Я должен согласиться, что это далеко не идеальное и безобразное решение, но, по крайней мере, оно выполняет свою работу.

1 голос
/ 17 марта 2015

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

afd = assetManager.openFd(nameSound);

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

Вам нужно только определить продолжительность на 1000 (1 мс) вместо общей продолжительности. Да, это проблема, проблема resuelto !!!!

0 голосов
/ 21 января 2015

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

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

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

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

...