SoundPool载入音乐文件使用了独立的线程,不会阻塞UI主线程的 *** 作。但是这里如果音效文件过大没有载入完成,我们调用play方法时可能产生严重的后果,这里AndroID SDK提供了一个SoundPool.OnLoadCompleteListener类来帮助我们了解媒体文件是否载入完成,我们重载 onl oadComplete(SoundPool soundPool, int sampleID, int status) 方法即可获得。
从上面的onLoadComplete方法可以看出该类有很多参数,比如类似ID,是的SoundPool在load时可以处理多个媒体一次初始化并放入内存中,这里效率比MediaPlayer高了很多。
SoundPool类支持同时播放多个音效,这对于游戏来说是十分必要的,而MediaPlayer类是同步执行的只能一个文件一个文件的播放。
import androID.content.Context;import androID.media.AudioManager;import androID.media.soundPool;import androID.media.soundPool.OnLoadCompleteListener; public class SoundPoolUtil { private static SoundPool mSoundPool; public static SoundPool create(Context context, int resID) { /** * 初始化声音池 * 参数1:在声音池中最大的数量 * 参数2:流类型 默认使用AudioManager.STREAM_MUSIC * 参数3:质量 默认为0 这个值暂时没影响 */ if (mSoundPool == null) { mSoundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0); } /** * load加载声音 * 参数1:上下文 * 参数2:音频文件 * 参数3:优先级 默认1 暂时没影响 */ final int soundID = mSoundPool.load(context, resID, 1); mSoundPool.setonLoadCompleteListener(new onl oadCompleteListener() { @OverrIDe public voID onl oadComplete(SoundPool soundPool, int sampleID, int status) { /** * 参数1:加载返回的声音ID * 参数2:左声道 * 参数3:右声道 * 参数4:优先级 * 参数5:是否循环播放 0:不循环 -1:循环 * 参数6:速率 0.5--2.0 */ soundPool.play(soundID, 1.0f, 0.5f, 1, 0, 1.0f); } }); return mSoundPool; } /** * @Title: dismisSoundPool @Description: 释放播放池 @param 设定文件 @return voID * 返回类型 @throws */ public static voID dismisSoundPool() { if (mSoundPool != null) { mSoundPool.release(); mSoundPool = null; } } } 音频文件放在res/raw目录下面 test.wav调用 : SoundPoolUtil.create(MainActivity.this, R.raw.test);
总结
以上是内存溢出为你收集整理的Android ——SoundPool播放音频全部内容,希望文章能够帮你解决Android ——SoundPool播放音频所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)