Android Soundpool синхронизации - PullRequest
       3

Android Soundpool синхронизации

3 голосов
/ 08 сентября 2010

Есть ли надежный способ предотвращения обрезания звуков в саундпуле?У меня был некоторый успех с функцией sleep () между звуками, но они все еще иногда пропускают последний бит звука перед тем, как начать другой звук.Мое приложение воспроизводит короткие звуки в последовательности.Джерри

Ответы [ 2 ]

5 голосов
/ 29 февраля 2012

Хотя это старый вопрос, я думал, что выложу что-нибудь здесь, так как не мог найти решение этой проблемы в Интернете, но нашел какое-то решение ...

Я получаю продолжительность каждого звука (используя MediaPlayer) при запуске моего приложения и сохраняю значение R.id.sound_name и продолжительность вместе. Затем я могу воспроизводить звуки с помощью SoundPool.

Код для получения продолжительности:

private long getSoundDuration(int rawId){
  MediaPlayer player = MediaPlayer.create(context, rawId);
  int duration = player.getDuration();
  return duration;
}

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

Кажется, работает хорошо. Дает мне преимущества малой задержки от SoundPool, а также возможность связывать вещи.

Пара вещей на заметку:

  • Не получайте длительность каждый раз, так как создание MediaPlayer связано с накладными расходами.
  • Длительности взяты из метаданных файла - работа ogg отлично подходит для меня, но я не могу поручиться за что-либо еще.
3 голосов
/ 12 октября 2010

Убедитесь, что у вас достаточно потоков. в конструкторе SoundPool первым аргументом является MaxStreams. Установите это на то, что вы считаете нужным. 8 или около того должно быть достаточно, я думаю ... но вам может понадобиться больше, в зависимости от вашего звука.

...