Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.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:在SoundPool中无限播放声音不会';停止后,不要再玩了_Java_Android_Soundpool - Fatal编程技术网

Java Android:在SoundPool中无限播放声音不会';停止后,不要再玩了

Java Android:在SoundPool中无限播放声音不会';停止后,不要再玩了,java,android,soundpool,Java,Android,Soundpool,我正试图通过声音池播放两种声音 下面的测试代码使第二个剧本没有声音。 只有在我的HTC Hero设备和模拟器上以无限方式播放声音时,才会出现这种情况。我使用的是安卓1.6 ... SoundPool soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0); int soundId1 = soundPool.load(getApplicationContext(), R.raw.sound1, 1); int soundId2 = s

我正试图通过
声音池
播放两种声音

下面的测试代码使第二个剧本没有声音。 只有在我的HTC Hero设备和模拟器上以无限方式播放声音时,才会出现这种情况。我使用的是安卓1.6

...
SoundPool soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
int soundId1 = soundPool.load(getApplicationContext(), R.raw.sound1, 1);
int soundId2 = soundPool.load(getApplicationContext(), R.raw.sound2, 1);

// the first one plays
int streamId = soundPool.play(soundId1, 1.0f, 1.0f, 1, -1, 1.0f);
try {
    Thread.sleep(3000);
} catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
soundPool.stop(streamId);

// the second one doesn't play
streamId = soundPool.play(soundId2, 1.0f, 1.0f, 1, -1, 1.0f);
try {
    Thread.sleep(3000);
} catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
soundPool.stop(streamId);
...

查看代码中这一行的第一个声音

int streamId=soundPool.play(声音1,1.0f,1.0f,1,-1,1.0f)

,第5个参数定义循环模式0表示无循环,或-1表示永久循环。您的代码显示-1,因此第一个声音将永远循环,因此第二个声音不会播放。尝试将第一个声音的循环模式更改为无循环,即0

编辑:我想我知道你的问题。当您尝试播放声音时,样本尚未准备就绪,因此,您需要实现一个onLoadCompleteListener,以便在样本准备就绪时播放它们。例如

SoundPool soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {

        @Override
        public void onLoadComplete(SoundPool soundPool, int sampleId,
                            int arg2) {
                streamId = soundPool.play(sampleId, 1.0f, 1.0f, 1, -1, 1.0f);
               }

        });
    int soundId1 = soundPool.load(getApplicationContext(), R.raw.tick, 1);      
    int soundId2 = soundPool.load(getApplicationContext(), R.raw.tock, 1);
现在,加载这些声音后,将播放它们。我已经测试了这两种声音,因为监听器确保在播放之前加载它们


将此代码集成到您的代码中,它将解决问题。如果没有,请告诉我,我会尝试找到另一个解决方案:)

你是什么意思?虽然第一个声音以无限循环播放,但我在播放第二个声音之前停止了它。请看代码。@goryachev好的,别担心,这个怎么样。android文档说play方法的第一个参数必须是load方法返回的参数。在您的代码中,
soundId1
soundId2
是您应该在播放功能中使用的变量,但您使用的是
sound1
和sound2`。。。还是只是一个打字错误?是的,这是一个打字错误。谢谢更新了问题。