使用MediaPlayer播放音频
介绍
使用MediaPlayer播放的音频格式:.mp3(常用), .ogg(完全免费),.3gp(文件体积小,移动性强),.wav(高音质)
MediaPlayer是Android提供的用来控制音频/视频文件或流播放的类。
使用步骤
通过创建MediaPlayer对象来装载音频文件。其中有两种方法:第一种是通过create方法,而create方法有两种重载形式,一种是通过指定的资源文件来装载音频,另一种是通过指定的Uri来装载音频;第二种是通过无参的构造方法,通过setDataSource来指定装载的音频。
1、开始播放还需要通过start方法来开始播放
2、暂停播放需要调用pause方法
3、停止播放需要调用stop方法
通过create方法创建,已加载了要播放的音频,适用于播放单独的音频文件;
通过无参构造方法创建,需要单独指定要播放的音频,适用于连续播放多个音频文件
mediaPlayer.isPlaying可以判断音频是否处于播放状态。
在停止播放后,如果想继续播放
首先设置一个完成事件监听器,在重写的onCompletion方法中,定义重新播放方法:
最后记得释放资源:重写onDestroy方法
特点
MediaPlayer:延迟长,且占用资源多;不支持同时播放多个音频
SoundPool:延迟短,占用资源少;支持多个音频同时播放;但是只能播放短促的音频
使用SoundPool播放音频
SoundPool(音效池):管理多个短促的音效
使用步骤
1、创建一个SoundPool(构造函数)
public SoundPool(int maxStream, int streamType, int srcQuality)
---------第一个参数是:在声音池中允许同时存在的声音数量。当池子中的声音数量超过这个数量时,优先级最低或最早进入的声音会被移除。这个数字不是越大越好,因为会造成浪费空间
---------第二个参数是:声音流的类型,有STREAM_RING、STREAM_MUSIC,一般使用后者。
---------第三个参数没有什么意义,建议为0。
例如:
public SoundPool soundpool= new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
2、加载音频资源
SoundPool有四种方法加载音频资源(即四种重载的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 对应的文件去加载声音
(一般都用第一个方法)
上面四个方法中都有priority参数,现在还没有用处,Android建议参数设为1,来保持和未来的兼容性。
load方法返回该声音的ID,以后我们可以通过该声音的ID来播放声音。
3、播放控制
播放指定音频的音效,并返回一个streamID
final int play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)
--------priority —— 流的优先级,值越大优先级高,影响当同时播放数量超出了最大支持数时SoundPool对该流的处理;
--------loop —— 循环播放的次数,0为值播放一次,-1为无限循环,其他值为播放loop+1次(例如,3为一共播放4次).
--------rate —— 播放的速率,范围0.5-2.0(0.5为一半速率,1.0为正常速率,2.0为两倍速率)
暂停指定播放流的音效(streamID 应通过play()返回)。
final void pause(int streamID)
继续播放指定播放流的音效(streamID 应通过play()返回)。
final void resume(int streamID)
终止指定播放流的音效(streamID 应通过play()返回)。
final void stop(int streamID)
4、可操作的函数有:
final boolean unload(int soundID)
卸载一个指定的音频资源.
final void release()
释放SoundPool中的所有音频资源.