1

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

任何人都有一个很好的提示来帮助我让它工作吗?非常感谢大家。

按钮 button2 = (Button) 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();
4

3 回答 3

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();
 }
于 2012-05-20T06:29:44.410 回答
1

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

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);                                
        }
    }
});
于 2012-05-20T12:55:15.063 回答
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 生命周期

于 2012-05-20T09:28:10.157 回答