自己写了一个小的demo,使用soundpool播放音视频。简单说一下soundpool和MediaPlayer播放音视频的区别
一 MediaPlayer 适合播放比较长的音频,如游戏中的背景音乐。
private MediaPlayer mPlayer = null;
mPlayer = MediaPlayer.create(this,R.raw.music);
mPlayer.setLooping(true);
mPlayer.start();
二 soundpool 通常都是播放短音效,比如枪声或者水滴声。
播放音频使用soundpool的原因是因为它播放的速度快,但是缺点就是在刚开始的时候必须预加载音频,所以
* soundpool记载的音频都有自己的interger类型的id
/**
* 预加载音视频
* @return
*/
private void load(Sounds sounds){
try {
AssetFileDescriptor afd=mAssetManager.openFd(sounds.getAssetPath());
//soundpool加载音频返回id
int soundId=mSoundPool.load(afd,1);
sounds.setAssetId(soundId);
} catch (IOException e) {
e.printStackTrace();
}
}
public void play(Sounds sounds){
Integer soundId=sounds.getAssetId();
if(soundId==null){
return;
}
//参数依次是 音频id 左音量,右音量,优先级,是否循环,播放速率
// 注:如果想无限循环传入-1
mSoundPool.play(soundId,1.0f,1.0f,1,0,1.0f);
}
把预先下载的MP3文件放到asset文件中,注意:播放音视频的地址一定要对应
resource资源可以存储声音文件,比如放到res/raw中,可以通过id获取他,这是针对数量较少的声音文件而言,
可以想象一下如果涉及20个声音文件,如果使用Android资源系统一个个处理,效率会降低很多,,所以考虑到要把
这些文件全放到一个目录中随着应用打包就可以了,assets可以看做随应用打包的微型文件系统,支持任意 层次的文件
目录结构,类似游戏这样需要加载大量的图片和声音资源通常使用assets