
Android的音频播放常见的有MediaPlayer 和 Soundpool(相对轻量级一点,一般用来播放短小的铃声之类的音乐)
最近项目用到播放铃声问题,使用soundpool比较方便,需要在活动启动时候就响铃;
private AssetManager aManager;//数据访问,不需要可以不写
private SoundPool mSoundPool ; //定义初始化
private HashMap soundID = new HashMap(); //可以用来存放多个音频
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
aManager = getAssets();
//设置最多可容纳10个音频流,音频的品质为5
mSoundPool = new SoundPool(10, AudioManager.STREAM_SYSTEM, 5); //初始化需要时间,这个时间还不算短
soundID.put(1, mSoundPool.load(this, R.raw.aaa, 1)); //把音频放进去
soundID.put(2, mSoundPool.load(this, R.raw.bbb, 1));
soundID.put(3, mSoundPool.load(this, R.raw.ccc, 1));
mSoundPool.play(soundID.get(1), 1, 1, 0, 0, 1);
//播放音频依次参数为
(放进去的音频号,
左声道音量设置,
右声道音量设置,
指定播放声音的优先级数值越高优先级越大,
-1表示无限循环 0表示不循环 其他值表示要重复播放的次数,
指定播放速率(0.5~2.0) 1.0为原始 2.0为频率的两倍播放)
}
//写到这基本就可以了,但是这么写肯定不行,因为mSoundPool 的初始化需要时间,直接在活动这么写不会有声音的
//如果要活动启动就播放声音可以添加一个监听,把播放声音写到监听里面,完成以后播放。
mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
//文件加载完毕,播放声音
mSoundPool.play(soundID.get(1), 1, 1, 0, 0, 1); //可以选择播放存进去的哪一个声音
}
});
//使用完以后,别忘了回收资源
//释放SoundPool,执行过后无法在播放音乐,必须从新加载
mSoundPool.release();