2010-08-29 103 views
1

我有一个的Soundpool目的和几个声音,但一旦创建我无法改变的声音回放,无论如何,如循环的数量,体积,停止等的Soundpool声音不改变

声明代码:

public SoundPool sounds; 
public HashMap<Integer, Integer> soundmap = new HashMap<Integer, Integer>(); 
static final public int UFO=3; 
static final public int PlayerDeath=3; 
static final public int InvaderDeath=2; 
static final public int PlayerFire=1; 

声音指定代码:

sounds = new SoundPool(10,AudioManager.STREAM_MUSIC,0); 
soundmap.put(PlayerDeath,sounds.load(getContext(), R.raw.explosion, 1)); 
soundmap.put(InvaderDeath,sounds.load(getContext(), R.raw.invaderkilled, 1)); 
soundmap.put(PlayerFire,sounds.load(getContext(),R.raw.shoot, 1)); 
soundmap.put(UFO,sounds.load(getContext(),R.raw.ufo, 1)); 

开始/停止代码:

public void PlayUFOMusic() 
{ 
    sounds.play(soundmap.get(UFO),0.8F,0.8F,1,2000,1);  
} 

public void StopUFOMusic() 
{ 
    sounds.stop(soundmap.get(UFO)); 
} 

我知道这些函数被调用,但没有什么会导致它改变。我也试过setLoop,setVolume,暂停和卸载,这些都没有工作。

任何想法?

回答

2

这里是播放()语法:

public final int play (int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate) 

所以应该不会是:

sounds.play(soundmap.get(UFO),0.8F,0.8F,1,-1, 1); 

使声音永远循环下去?

编辑:阅读这个问题有点快,但如果你使用这个播放功能,它会循环吗?

+0

啊,对不起,原本是-1,但我改成了2000,看看它是否永久循环就是问题所在。它确实循环,但这并不是问题。 – 2010-08-30 06:40:18

+1

所以问题是你不能改变播放期间的声音?如果是这种情况,则不会事件保留对从play()函数返回的streamID的引用。这就是你运行setLoop()和其他方法的id。如果这对你没有帮助,请更好地解释你的问题。 – softarn 2010-08-30 08:40:43

+0

嗯谢谢你,我认为被load加载的id被用来控制它,事后看来它显然不起作用。 – 2010-08-30 08:59:08