再次按下按钮时声音停止

时间:2017-01-12 15:40:36

标签: java android audio

我试图制作一个Android音板。当我触摸任何按钮时它会产生声音但是当我再次触摸它时,不仅声音停止,而且其他按钮都没有工作。我希望它一次播放一个声音。这里。是我主要的活动,我在按钮上调用播放功能。

create unique index [name_unique] on [dbo].[Table]([Name], [SecondName], [Type])
    where ( (AxisType & 8) > 0);

2 个答案:

答案 0 :(得分:0)

此示例取自您的上一个方法:

public void playchup(View view) {
    if (cry.isPlaying())
        cry.stop();
    if (whine.isPlaying())
        whine.stop();
    if (weed.isPlaying())
        weed.stop();
    chup.start();
}

如果查看最后三个if语句,可以看到停止声音。如果正在播放任何声音,则在按下按钮时会停止播放。

让我进一步解释一下:

  1. 按下按钮
  2. 调用四种方法之一(play())
  3. 你停止其他声音
  4. 播放相关方法的声音
  5. 可能的问题

    理论上,当播放MediaPLayer时,您必须重新创建它。请参阅this question,了解如何循环播放声音,而不必每次都重新创建媒体播放器。

    意味着您的代码应该如下所示:

    whine = MediaPlayer.create(this, R.raw.gone);
    cry = MediaPlayer.create(this, R.raw.mock);
    weed = MediaPlayer.create(this, R.raw.phen);
    chup = MediaPlayer.create(this, R.raw.rg);
    
    whine.setLooping(true);
    cry.setLooping(true);
    weed.setLooping(true);
    chup.setLooping(true);
    

    如果您不想在按下一个按钮时停止其他所有声音,则必须删除if语句,以检查是否正在播放其他声音并停止播放。

    替代MediaPlayer

    如果您正在处理多种声音,可以使用SoundPool,因为它可以同时处理多个声音和重叠声音。

答案 1 :(得分:0)

因为您正在创建MusicPlayer个对象,而不是发布它们

声明一个界面并覆盖 setOnCompletion来调用release()方法。

示例

 private class musicCompletionListener implements MediaPlayer.OnCompletionListener {
        @Override
        public void onCompletion(MediaPlayer mediaPlayer) {
            mediaPlayer.release();
        }
    }

然后为每个 mediaPlayer 对象设置setOnCompletion侦听器。

public void playwhine(View view) {
    if (cry.isPlaying())
        cry.stop();
    if (weed.isPlaying())
        weed.stop();
    if (chup.isPlaying())
        chup.stop();
whine.setOnCompletionListener(new musicCompletionListener());
    whine.start();
}

public void playcry(View view) {
    if (whine.isPlaying())
        whine.stop();
    if (weed.isPlaying())
        weed.stop();
    if (chup.isPlaying())
        chup.stop();
cry.setOnCompletionListener(new musicCompletionListener());
    cry.start();
}

public void playweed(View view) {
    if (cry.isPlaying())
        cry.stop();
    if (whine.isPlaying())
        whine.stop();
    if (chup.isPlaying())
        chup.stop();
weed.setOnCompletionListener(new musicCompletionListener());
    weed.start();
}

public void playchup(View view) {
    if (cry.isPlaying())
        cry.stop();
    if (whine.isPlaying())
        whine.stop();
    if (weed.isPlaying())
        weed.stop();
chup.setOnCompletionListener(new musicCompletionListener());
    chup.start();
}