Медиаплеер воспроизводит странные звуки на Android 2.2 - PullRequest
2 голосов
/ 25 октября 2010

Я создал приложение, которое использует MediaPlayer для воспроизведения случайного (короткого) звука при нажатии кнопки.Звук воспроизводится правильно на устройствах Android <2.2.Это код, отвечающий за воспроизведение звуков. </p>

r = new Random();
sounds = new ArrayList<MediaPlayer>();
sounds.add(MediaPlayer.create(this, R.raw.sound1));
sounds.add(MediaPlayer.create(this, R.raw.sound2));
sounds.add(MediaPlayer.create(this, R.raw.sound3));
sounds.add(MediaPlayer.create(this, R.raw.sound4));
sounds.add(MediaPlayer.create(this, R.raw.sound5));

theButton.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
        playSound();
    }
});

private void playSound() {
    Thread thread = new Thread() {
        public void run() {
            MediaPlayer soundPlayer = sounds.get(r.nextInt(sounds.size()));
            while (soundPlayer.isPlaying())
            {
                soundPlayer = sounds.get(r.nextInt(sounds.size()));
            }
            soundPlayer.seekTo(0);
            soundPlayer.start();
        }
    };
    thread.start();
}

Звуки - это все файлы .wav.Я попытался преобразовать их в .mp3, но тогда они не играли бы вообще.Я делаю что-то крайне неправильно, или MediaPlayer в 2.2 глючит?Кто-нибудь еще имел эту проблему и знает, как исправить?Имейте в виду, что звуки воспроизводятся нормально на всех других устройствах с версией Android ниже 2.2.

Ответы [ 2 ]

0 голосов
/ 07 января 2011

Кажется, была проблема с частотой дискретизации mp3, которую не одобрила 2.2 Framework.Я исправил это, открыв звуки в звуковом редакторе, пересэмплировав их и добавив тишину к первой и последней секундам звуков.

0 голосов
/ 01 января 2011

Я думаю, вам не следует создавать ArrayList для MediaPlayer. Вместо этого вы используете только объект MediaPlayer и ArrayList для хранения всех музыкальных ресурсов.

При следующей песне вы обновляете только информацию MediaPlayer. Например, Отпустите предыдущий объект MediaPlayer. Создать другой объект MediaPlayer Наконец, запустите эту песню

...