Android播放音频

来源:互联网 发布:英伟达优化软件 编辑:程序博客网 时间:2024/06/06 00:20

Android播放音频常用3种:

MediaPlayer:一般用来播放较大的音频如SD卡上保存的,网络音频.

SoundPool:一般用来播放音效(很多情况伴随动画效果和游戏爆炸等音效)

Opensl ES:全称是(Open Sound Library For Embedded Systems),是跨平台,根据嵌入式系统的硬件音频加速API.是在NDK环境进行开发,减少拷贝直接在native层进行解码,从而效率会高一些,这里就了解一下.


一.MediaPlayer

首先介绍一下MediaPlayer常用API:

setDataSource():方法是重载的,这里就不一一列举了,主要是设置数据源,SD卡路径或者网络路径.

start():开始播放

pause():暂停

prepare():缓冲,写入内存,同步方法会挂起,一般用来加载本地较小的音频.

prepareAsync():这个和上个对应是用于播放网络视频或较大的音频,使用这个方法后需要设置一个监听.

setOnPreparedListener(OnPreparedListener):使用prepareAsync()时程序会一直往下走,这时就需要设置这个监听监听已经加载完成可以播放了,在监听中调用start()方法.还有各种setOnxxxxxxListener这个就自己写时候看吧反正什么错误啊,播放完成啊等都有.

release():页面销毁时记得调用释放,不然有可能出现内存溢出

getDuration(),getCurrentPosition(),seekTo(int)等等都不一一叙述了都是获取和设置一些信息.

代码示例:

(1)播放资源文件

MediaPlayer mediaPlayer = new MediaPlayer.create(context,R.raw.xxx);

mediaPlayer.start();

(2)播放SD卡,网络视频

MediaPlayer mediaPlayer = new MediaPlayer.create();

mediaPlayer.setDataSource(SD卡路径或网络路径);

mediaPlayer.setOnPreparedListener(new OnPreparedListener(){

@override

public void onPrepared(MediaPlayer m){

mediaPlayer.start();

}

});

mediaPlayer.prepareAsync();


二.SoundPool

这个东西可以实现多个音频一起播放,实现爆炸一般的音效 Boom..SHA.KA.!!

代码示例:

SoundPool.Builder builder = new SoundPool.Builder();

builder.setMaxStreams(2); 设置最多容纳的音频数量

AudioAttributes.Builder attr = new AudioAttributes.Builder(); // 这是一个封装了音频的属性的东西

builder.setAudioAttributes(attr.build()); //加载attr

SoundPool soundPool = builder.build();

   soundPool.load(context,R.raw.xxx,int);//第一个参数Context,第二个资源文件,第三个是优先级,返回参数是个SoundId 播放多个时候可以使用HashMap保存.

soundPool.play(int soundId,float leftVolume,float rightVolume,int priority, int loop,float rate);

//这么多参数,一个一个来

//soundId. 上面Load过的返回值

//leftVolume.左声道音量大小 取值范围0.0f-1.0f之间,0.6f就是最大音量的百分之60

//rightVolume.右声道同上

//priority.优先级,谁大谁先来

//loop.循环,负数无限循环,0的话就不循环只播放一次

//rate.播放速率,取值0.5f-2.0f  1.0f是正常速率