android音频的播放

Android提供了常见的音频、视频的编码、解码机制。

Android支持MP3,WAV和3PG等格式的音频,通常使用MediaPlayer或者SoundPool来播放音频,

他们2者之间的区别是:

MediaPlayer资源占用较高,延迟时间较长,不支持多个音频文件同时播放,适合播放重复性

不高,时间长的音频;而SoundPool主要用于播放一些较短的声音片段,SoundPool还支持自行

设置声音的品质、音量、播放比率等参数。

1.播放应用的资源文件

一般应用的音频资源文件都放在工程的res/raw目录下,播放应用的资源文件只需要2步:

MediaPlayer mp = MediaPlayer.create(this, R.raw.startsucess);
// mp.prepare();  //在create 里已经调用过prepare方法了,重复调用会报IllegalStateException异常
mp.start();

2.播放应用的原始资源文件

原始资源文件一般放在assert文件夹下

AssetManager am = getAssets();
//打开指定的资源文件
AssetFileDescriptor afd = am.openFd(“music.wav”);
MediaPlayer mPlayer = new MediaPlayer();
mPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
//准备声音
mPlayer.prepare();
//播放声音
mPlayer.start();

3.播放外部存储器上的音频文件

MediaPlayer mPlayer = new MediaPlayer();

mPlayer.setDataSource(“/mnt/sdcard/music.wav”);

//准备声音
mPlayer.prepare();
//播放声音
mPlayer.start();

4.播放来自网络的音频文件

Uri uri = Uri.parse(“http://www.betterbing.com/music.wav”);

MediaPlayer mPlayer = new MediaPlayer();

mPlayer.setDataSource(this,uri);

//准备声音
mPlayer.prepare();
//播放声音
mPlayer.start();

5.使用SoundPool播放音频

private SoundPool soundpool;

//存放音频池中的key-value(音频ID)
HashMap<Integer,Integer> audioMap = new HashMap<Integer,Integer> ();

//初始化音频池

soundpool = new SoundPool(2,AudioManager.STREAM_SYSTEM,5);

audioMap.put(1, soundpool.load(this, R.raw.startsucess, 5));
audioMap.put(2,soundpool.load(this, R.raw.stopsuccess, 5));

//播放

soundpool.play(audioMap.get(1), 1, 1, 0, 0, 1);