创建SoundPool对象
// 参数一:最多同时播放多少个音频。
// 参数二:音频类型,有STREAM_MUSIC等,用于区分音量控制。
// 参数三:采样率转换品质,不起作用,传入0。
SoundPool soundPool = new SoundPool(/* 数字 */, AudioManager.STREAM_MUSIC, 0);
加载音频
private void load(Sound sound) throws IOException {
// openFd可能会抛出异常
AssetFileDescriptor assetFileDescriptor = mAssetManager.openFd(/* 相对于Assets文件路径的文件路径(包含文件名字和拓展名) */);
// 获取音频Id,音频Id用于播放
int soundId = mSoundPool.load(assetFileDescriptor, /* 暂时没有作用,传入1用于未来的兼容 */);
sound.setSoundId(soundId);
}
播放音频
if (soundId == null) {
return;
}
// 参数1:音频ID
// 参数2、3:左右音量,(range = 0.0 to 1.0)
// 参数4:优先级,无作用传入1,用于未来兼容
// 参数5:循环模式,(0 = no loop, -1 = loop forever)
// 参数6:播放速率,(1.0 = normal playback, range 0.5 to 2.0)
mSoundPool.play(soundId, 1.0f, 1.0f, 1, 0, 1.0f);
释放SoundPool
使用完SoundPool
后需要释放。
BeatBox.java
public void release() {
mSoundPool.release();
}
BeatBoxFragment.java
@Override
public void onDestroy() {
super.onDestroy();
mBeatBox.release();
}