2010-10-25 74 views
1

我创建了一个应用程序,该应用程序在单击按钮时使用MediaPlayer播放随机(短)声音。声音在Android设备< 2.2上正确播放。这是负责播放声音的代码。Mediaplayer在Android 2.2上播放奇怪的声音

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,但他们根本不会玩。我在做一些非常错误的事情,还是2.2 bug中的MediaPlayer?任何人都有这个问题,并知道修复?请记住,在Android版本低于2.2的所有其他设备上,声音都可以正常播放。

+0

我在这里有同样的问题。有没有必要重新采样wav文件? – StefanMK 2011-01-31 15:17:22

回答

0

似乎有一个问题,即2.2框架令人不悦的mp3采样率。我通过在一个声音编辑器中打开声音来对其进行修复,重新采样它们并在声音的第一个和最后一个声音中添加静音。

0

我认为你不应该为MediaPlayer创建一个ArrayList。相反,您只使用MediaPlayer对象和ArrayList来包含所有音乐资源。

当你下一首其他歌曲时,只更新MediaPlayer的信息。例如, 释放以前的MediaPlayer对象。 创建其他MediaPlayer对象 最后,开始播放这首歌曲

+1

我在一般基础上同意你的观点,但这些短音的准备工作需要很短的时间。它应该是一个随机的即时声音,当用户点击一个按钮。无论如何,只使用一个MediaPlayer并不能解决Android 2.2上的声音变形问题。 但是我找到了解决方案,我将作为答案发布。 – AmITheRWord 2011-01-07 20:25:48