Android 音频的播放之一

SoundPool简介


Android 中除了 MediaPlayer 播放音频之外还提供了 SoundPool 来播放音效, SoundPool 使用音效池的概念来管理多个短促的音效,例如它可以开始就加载 20 个音效,以后在程序中按音效的 ID 进行播放。
一、SoundPool的特点


SoundPool 主要用于播放一些较短的声音片段,与 MediaPlayer 相比, SoundPool 的优势在于 CPU 资源占用量低和反应延迟小。另外, SoundPool 还支持自行设置声音的品质、音量、 播放比率等参数。


SoundPool 提供了一个构造器, 该构造器可以指定它总共支持多少个声音(也就是池的大小)、声音的品质等。构造器如下 :


SoundPool(int maxStreams, int streamType, int srcQuality) :第一个参数指定支持多少个声音;第二个参数指定声音类型:第三个参数指定声音品质。


二、SoundPool的初始化
一旦得到了 SoundPool 对象之后,接下来就可调用 SoundPool 的多个重载的 load 方法来加载声音了 。


SoundPool 提供了如下 4 个 load 方法:


int load(Context context, int resld, int priority) :从 resld 所对应的资源加载声音。


int load(FileDescriptor fd, long offset, long length, int priority ) :加载 fd 所对应的文件的 offset 开始、长度为 length 的声音。


int load(AssetFileDescriptor afd, int priority) :从 afd 所对应的文件中加载声音。


int load(String path, int priority ) :从 path 对应的文件去加载声音。


上面 4 个方法中都有一个 priority 参数,该参数目前还没有任何作用, Android 建议将该 参数设为 1 ,保持和未来的兼容性。


上面 4 个方法加载声音之后,都会返回该声音的的 ID ,以后程序就可以通过该声音的 ID 来播放指定声音。




三、SoundPool播放指定声音的方法:


int play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate) :该方法的第一个参数指定播放哪个声音; leftVolume 、 rightVolume 指定左、右的音量: priority 指定播放声音的优先级,数值越大,优先级越高; loop 指定是否循环, 0 为不循环, -1 为循环; rate 指定播放的比率,数值可从 0.5 到 2 , 1 为正常比率。


为了更好地管理 SoundPool 所加载的每个声音的 1D ,程序一般会使用一个 HashMap<Integer , Integer> 对象来管理声音。


归纳起来,使用 SoundPool 播放声音的步骤如下:


1、调用 SoundPool 的构造器创建 SoundPool 的对象。


2、调用 SoundPool 对象的 load() 方法从指定资源、文件中加载声音。最好使用 HashMap< Integer, Integer> 来管理所加载的声音。


3、调用 SoundPool 的 play 方法播放声音。


下面的程序示范了如何使用 SoundPool 来播放音效。


程序代码如下:

//声明变量
    	 SoundPool mSoundPool;
    	 //播放动作声音id
         int mPlaySound;
         //停止动作播放声音id
         int mPauseSound;
         //实例化SoundPool
    	 mSoundPool = new SoundPool(5, AudioManager.STREAM_SYSTEM, 5);
    	 //初始化播放动作音频
         mPlaySound = mSoundPool.load("/system/media/audio/ui/SoundRecorderPlay.ogg", 1);
         //初始化停止播放动作音频
         mPauseSound = mSoundPool.load("/system/media/audio/ui/SoundRecorderPause.ogg", 1);
         
         //播放 播放动作音频
         mSoundPool.play(mPlaySound, 1.0f, 1.0f, 0, 0, 1);
         //播放 停止播放动作音频
         mSoundPool.play(mPauseSound, 1.0f, 1.0f, 0, 0, 1);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值