Android ——SoundPool播放音频

Android ——SoundPool播放音频,第1张

概述SoundPool载入音乐文件使用了独立的线程,不会阻塞UI主线程的 *** 作。但是这里如果音效文件过大没有载入完成,我们调用play方法时可能产生严重的后果,这里AndroidSDK提供了一个SoundPool.OnLoadCompleteListener类来帮助我们了解媒体文件是否载入完成,我们重载onLoadComplete(Sound

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播放音频所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/999588.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存