Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Soundboard一次只能播放一种声音_Java_Android_Android Mediaplayer - Fatal编程技术网

Java Android Soundboard一次只能播放一种声音

Java Android Soundboard一次只能播放一种声音,java,android,android-mediaplayer,Java,Android,Android Mediaplayer,我正在尝试编写一个带有多个按钮的Android音板。每个按钮应播放不同的声音 我在每个按钮上都有一个OnClick Listener: buttonAlan.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { playSound("alan"); } }); 每个按钮都在调用以下函数 private void playS

我正在尝试编写一个带有多个按钮的Android音板。每个按钮应播放不同的声音

我在每个按钮上都有一个OnClick Listener:

    buttonAlan.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            playSound("alan");
        }
    });
每个按钮都在调用以下函数

private void playSound(String sound) {

    int path = getResources().getIdentifier(sound, "raw", getPackageName());
    mediaplayer = MediaPlayer.create(this, path);


    try {
        mediaplayer.prepare();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    mediaplayer.start();
}
音板可以工作,但每次你点击一个按钮,它就会一遍又一遍地播放声音。我需要mediaplayer停止播放,但每次我编写mediaplayer.stop()之类的内容时,应用程序都无法运行。
有什么建议我应该修改我的函数/代码吗?

我用一个声音池解决了这个问题,在那里你也可以同时播放多个声音。 我首先初始化它并在构造函数中加载所需的声音

SoundPool soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
int gameOverSound = soundPool.load(context, R.raw.gameover, 1);
然后你可以这样玩:

public void playSound(int soundId) {
      soundPool.play(soundId, 1.0f, 1.0f, 0, 0, 1);
}
编辑: 关于mediaplayer,在开始播放另一种声音之前,必须调用stop()和release()。 你也可以设置

mPlayer.setLooping(false);

你能告诉我“上下文”是什么吗?它与我的MainActivity的名称有什么关系吗?简单地说:。如果你在一个活动中,你可以使用“this”或“getContext()”作为上下文,如果你将它移动到其他类中,你必须传递调用活动的上下文(这是访问资源所必需的),非常感谢!这就成功了。现在,只要按下按钮,我就必须停止声音池的播放。音板现在正在工作,但所有声音都会在大约6秒钟后停止。经过一些研究,我来到这个网站,它说声音文件需要是.ogg格式,带有特定的位和采样器。有没有办法继续播放Mp3文件?发现了一个类似的问题: