您的位置:首页 > 移动开发 > Android开发

Android - API - android.media.SoundPool (专用于播放音效)

2013-04-15 15:00 489 查看
[b]概述:[/b]
     在android里有一个MediaPlayer多媒体类可以播放音频文件,可是MediaPlayer占用资源较多并且,只适用于播放时间长,对加载时间没有过高要求的环境;而游戏里资源相对紧张,并且音效需要的音频文件非常短,同时要求要瞬间加载,显然MediaPlayer并不符合要求。于是就出现了SoundPool!
     注意:请不要用SoundPool去加载较大的音频文件,因为可能会造成堆溢出!

构造函数:
     SoundPool(int maxStreams, int streamType, int srcQuality)
               maxStreams:最多同时播放maxStreams个音效。
               streamType :音频类型,其取值为AudioManager中以STREAM_开头的静态字段,在游戏中通常设为STREAM_MUSIC。
               srcQuality      : 该参数设置音频文件的质量,目前还没有实际效果,设置为默认值0即可。
方法:
     autoPause()
          暂停所有的音频流。
     autoResume()
          重新播放所有的音频流。
     load(AssetFileDescriptor afd, int priority)
          加载afd表示的音频资源文件。
               afd        :资源文件。
               priority:优先级,0为最低。
          int:返回一个资源ID,可以使用这个ID去播放此ID代表的音频文件,也可在音频池里删掉此ID代表的音频文件
     load(Context context, int resId, int priority)
          加载apk文件中ID为resId的音频资源。
               context:上下文对象,也就是调用这个方法的Activite,也可理解为是这个方法的调用者。
               resId     :要加载的音频资源的ID。
               priority :优先级,0为最低。
          int:返回一个资源ID,可以使用这个ID去播放此ID代表的音频文件,也可在音频池里删掉此ID代表的音频文件
     load(String path, int priority)
          加载path指向的SD卡中或机身中的音频文件
               path     :音频文件的绝对路径。
               priority:优先级,0为最低。
          int:返回一个资源ID,可以使用这个ID去播放此ID代表的音频文件,也可在音频池里删掉此ID代表的音频文件
     load(FileDescriptor fd, long offset, long length, int priority)
          加载fd表示的音频文件中从offset开始的length个字节的数据。
               fd          :资源文件对象。
               offset   :开始位置。
               length  :个数。
               priority:优先级,0为最低。
          int:返回一个资源ID,可以使用这个ID去播放此ID代表的音频文件,也可在音频池里删掉此ID代表的音频文件
     pause(int streamID)
          暂停音频池中ID为streamID的音频流
               streamID:音频池中音频流的ID。
     play(int soundID, float leftVolume, float rightVolume,
int priority, int loop, float rate)

          播放音频池中ID为soundID的音频流。
               soundID        :音频池中音频流的ID,就是load方法返回的值。
               leftVolume   :左声道音量。
               rightVolume:右声道音量。
               priority         :优先级,0为最低。
               loop              :循环次数,0为不循环;-1为永远循环。
               rate               :播放速度,该值在0.5-2.0之间,1为正常速度。
          int:当返回0时,表示播放失败;非0时,播放成功。
     release()
          释放所有的资源。
     resume(int streamID)
          重新播放音频池中ID为streamID的音频流。
               streamID:音频池中音频流的ID
     setLoop(int streamID, int loop)
          设置音频池中ID为streamID的音频流的循环次数为loop。
               streamID:音频池中音频流的ID。
               loop        :循环次数,0为不循环;-1为永远循环。
     setOnLoadCompleteListener(SoundPool.OnLoadCompleteListener
listener)

          设置完全卸载一个音频流时的监听函数。
               listener:卸载音频流的监听。
     setPriority(int streamID, int priority)
          设置音频池中ID为streanID的音频流的优先级为priority。
               streamID:音频池中音频流的ID。
               priority   :优先级,0为最低。
     setRate(int streamID, float rate)
          设置音频池中ID为streamID的音频流的播放速度为rate。
               streamID:音频池中音频流的ID。
               rate         :播放速度,该值在0.5-2.0之间,1为正常速度。
     setVolume(int streamID, float leftVolume, float rightVolume)
          设置音频池中ID为streamID的音频流的左声道音量为leftVolume,右声道音量为rightVolume。
               streamID       :音频池中音频流的ID。
               leftVolume   :左声道音量。
               rightVolume:右声道音量。
     stop(int streamID)
          停止音频池中ID为streamID的音频流。
               streamID:音频池中音频流的ID。
     unload(int soundID)
          卸载音频池中ID为soundID的音频流。
               soundID:音频池中音频流的ID,就是load方法返回的值。
          boolean:true:卸载成功;false:已经被卸载或不存在。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android SoundPool