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);