Android SoundPool声音播放时断时续
Android SoundPool sound playback intermittent
我有几个 GridView
项目在被选中时播放一个小的 .ogg 文件。它们是使用 SoundPool
class 播放的,但是这个 class 似乎非常断断续续 - 有时播放声音,有时不播放;这没有模式,所以我很难弄清楚它为什么这样做。
这是我的代码:
public void playSelectionSound(){
SoundPool sp = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
int soundId = sp.load(this, R.raw.char_select, 1);
sp.play(soundId, 1, 1, 0, 0, 1);
}
您不应尝试在加载后立即播放它,因为加载可能需要一些时间。相反,您应该使用 SoundPool.OnLoadCompleteListener() 并在该回调中播放它。到这里就可以确定soundpool加载成功了。
我最终改用 MediaPlayer 而不是 SoundPool:
MediaPlayer mp = MediaPlayer.create(this, R.raw.char_select); //open media player
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});
mp.start(); //play the sound
每次都有效。
我有几个 GridView
项目在被选中时播放一个小的 .ogg 文件。它们是使用 SoundPool
class 播放的,但是这个 class 似乎非常断断续续 - 有时播放声音,有时不播放;这没有模式,所以我很难弄清楚它为什么这样做。
这是我的代码:
public void playSelectionSound(){
SoundPool sp = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
int soundId = sp.load(this, R.raw.char_select, 1);
sp.play(soundId, 1, 1, 0, 0, 1);
}
您不应尝试在加载后立即播放它,因为加载可能需要一些时间。相反,您应该使用 SoundPool.OnLoadCompleteListener() 并在该回调中播放它。到这里就可以确定soundpool加载成功了。
我最终改用 MediaPlayer 而不是 SoundPool:
MediaPlayer mp = MediaPlayer.create(this, R.raw.char_select); //open media player
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});
mp.start(); //play the sound
每次都有效。