Intereting Posts
Фатальное исключение: org.apache.http.impl.conn.SingleClientConnManager.finalize () истекает через 10 секунд Добавить новый элемент в значок на кнопке – Android Исключение в потоке «main» java.lang.NoClassDefFoundError: junit / textui / ResultPrinter После обновления до Yosemite Могу ли я нажимать кнопку программно для предопределенного намерения? Как правильно настроить syncAdapter? Скрытие ресурсов android.R в Android Studio 1.3+ автозаполнения Как проверить, включен ли NFC или нет в Android? У меня есть файл хранилища ключей, как мне предоставить keyManagers sslContext в приложении для Android? Android Использование только ViewPager из библиотеки поддержки Как найти название страны из названия города в Java? Получение координат GPS быстрее программно без Интернета, но с использованием сетевого провайдера и мобильного GPS Что-то похожее на Cocoa Pods и Bundler для Android (для зависимостей)? Xamarin.Android – делает сборку собственного кода сделать реинжиниринг сложнее? Android – исключая ключ api из github, где хранить ключ api в коде? API USB-аксессуаров на Samsung Galaxy S2 Android

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

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

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

Благодаря!

Solutions Collecting From Web of "Бесшовные петли с SoundPool на Android?"

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

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

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

 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 !!!!

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

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

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

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