多次播放WAV文件

时间:2012-05-20 06:26:07

标签: android

每次用户按下一个按钮时,我需要播放相同的短wav文件(1秒)。我有以下代码,适用于大约30次点击,然后应用程序“强制关闭”在设备上。我认为正在发生的是媒体播放器的新实例正在创建,然后实例建立(大约30次点击)并且应用程序崩溃。所以我然后添加了“发布”实例,希望按下按钮点击wav会播放,然后媒体播放器将被释放。但是,它不会那样工作。使用mp.release()没有播放声音,因为medaiplayer很快就会释放,让用户听到声音?

任何人都有一个很好的建议,以帮助我让这个工作?非常感谢你们。

按钮button2 =(按钮)findViewById(R.id.button10);        button2.setOnClickListener(new View.OnClickListener(){

      public void onClick(View v) {
            // Perform action on click
            MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.clicker);
            mp.start();
            mp.release();

3 个答案:

答案 0 :(得分:1)

它的简单只需创建一次MediaPlayer,并随着时间的推移播放。

 private MediaPlayer mp;
 public void onClick(View v) {
            // Perform action on click
            if (mp == null){
                 mp = MediaPlayer.create(getApplicationContext(), R.raw.clicker);
            }
            mp.start();
 }

答案 1 :(得分:1)

为什么使用MediaPlayer,SoundPool更适合小型音频文件?作为基础,你可以使用它:

this.setVolumeControlStream(AudioManager.STREAM_MUSIC);


soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 70);

final HashMap<Integer, Integer>  soundPoolMap = new HashMap<Integer, Integer>();

final int soundID = 4;
soundPoolMap.put(soundID, soundPool.load(this, R.raw.wav_sound, 4));

soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() 
{
    public void onLoadComplete(SoundPool soundPool, int sampleId, int status) 
    {
        if (sampleId == 4)
        {
            soundPool.play(4, 50, 50, 1, 0, 1f);                                
        }
    }
});

答案 2 :(得分:0)

以下是可行的简单解决方案

MediaPlayer mp;
mp = MediaPlayer.create(getApplicationContext(), R.raw.clicker);

 public void onClick(View v) {
            // Perform action on click
            if(mp.isPlaying())
                {
                mp.stop();
                mp.reset();
                mp.release();
                }
                mp = MediaPlayer.create(getApplicationContext(), R.raw.clicker);
                mp.start();

这将检查媒体播放器是否已经播放..如果播放器已经播放,它将停止并释放它,然后初始化该媒体播放器(mp)对象并启动媒体播放器。

如果没有播放,它将在if语句后执行代码,并在初始化mediaplayer对象后启动媒体播放器(在本例中为mp)

要了解有关MediaPlayer的更多信息,请参阅http://developer.android.com/reference/android/media/MediaPlayer.html。研究Mediaplayer生命周期