Android提供了对常用音频和视频格式的支持,它所支持的音频格式有MP3(.mp3)、3GPP(.3gp)等,支持视频格式有3GPP和MPEG-4等。
在Android中,提供了MediaPlayer类来播放音频。使用MediaPlayer类播放音频比较简单,只需要创建该类对象,并为其指定要播放的音频文件,然后调用该类的start()方法播放。MediaPlayer类中有许多方法,如
1.创建MediaPlayer对象并装载音频文件
(1) 使用create()方法创建MediaPlayer对象加载音频文件
MediaPlayer提供的create()常用语法格式有以下两种:
//音频资源res\raw\d.wav
MediaPlayer player = new MediaPlayer.create(this,R.raw.d);
指定URI来装载音频.
MediaPlayer player = new MediaPlayer.create(this,Uri.parse("http://"));
在访问网络中的资源时,要在AndroidManifest.xml文件中授予网络的权限.
(2) 通过无参的构造函数创建MediaPlayer并加载资源.
MediaPlayer player = new Mediaplayer();
try{
player.setDataSource("/sdcard/music.mp3");
player.prepare();
}catch(Exception e){
e.printStackTrace();
}
说明:
播放
player.start(); //开始或恢复
player.stop(); //停止播放
player.pause(); //暂停播放
可以同时播放多个短小的音频,而且占用资源较少.
一、创建SoundPool对象
SoundPool(int maxStreams,int streamType int srcQuality);
//容纳多少音频,指定声音类型,通常用STREAM_MUSIC.
//srcQuality音频品质,默认为0
java方法:
二、加载所要播放的音频
创建对象后,调用load()对象加载播放的音频。
public int load(Context context,int resID,int priority); //context一般this,表示该活动,resID资源ID,priority优先级
例如,通过资源ID来加载音频文件ding.wav
soundpool.load(this,R.raw.ding,1); //Context,resID,priority
为了更好的管理所加载的每个音频,一般使用HashMap
HashMap<Integer,Integer> soundmap = new HashMap<Integer,Integer>();
soundmap.put(1,soundpool.load(this,R.raw.chims,1));
三、播放音频
play(int soundID,float leftVolume,float rightVolume,int priority,int loop,float rate)
//ID,播放的音频,一般是一个soundpool对象,通过load加载,左右音量,优先级,循环次数,指定速率,正常为1
实例:
模仿手机选择铃声:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listview = (ListView) findViewById(R.id.listView); //获取列表视图
String[] title = new String[]{"布谷鸟叫声", "风铃声", "门铃声", "电话声", "鸟叫声",
"水流声", "公鸡叫声"}; // 定义并初始化保存列表项文字的数组
List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>(); //创建一个list集合
//通过for循环将列表项文字放到Map中,并添加到list集合中
for (int i = 0; i < title.length; i++) {
Map<String, Object> map = new HashMap<String, Object>(); //实例化Map对象
map.put("name", title[i]);
listItems.add(map); //将map对象添加到List集合中
}
AudioAttributes attr = new AudioAttributes.Builder() //设置音效相关属性
.setUsage(AudioAttributes.USAGE_GAME) // 设置音效使用场景
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) // 设置音效的类型
.build();
final SoundPool soundpool = new SoundPool.Builder() // 创建SoundPool对象
.setAudioAttributes(attr) // 设置音效池的属性
.setMaxStreams(10) // 设置最多可容纳10个音频流,
.build();
//创建一个HashMap对象,将要播放的音频流保存到HashMap对象中
final HashMap<Integer, Integer> soundmap = new HashMap<Integer, Integer>();
soundmap.put(0, soundpool.load(this, R.raw.cuckoo, 1));
soundmap.put(1, soundpool.load(this, R.raw.chimes, 1));
soundmap.put(2, soundpool.load(this, R.raw.notify, 1));
soundmap.put(3, soundpool.load(this, R.raw.ringout, 1));
soundmap.put(4, soundpool.load(this, R.raw.bird, 1));
soundmap.put(5, soundpool.load(this, R.raw.water, 1));
soundmap.put(6, soundpool.load(this, R.raw.cock, 1));
//创建SimpleAdapter适配器并将适配器与ListView关联
SimpleAdapter adapter = new SimpleAdapter(this, listItems,
R.layout.main, new String[]{"name",}, new int[]{
R.id.title}); // 创建SimpleAdapter
listview.setAdapter(adapter); // 将适配器与ListView关联
//为ListView设置事件监听器,为每个选项设置所对应要播放的音频
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//获取选项的值,可以显示点击的目标
Map<String, Object> map = (Map<String, Object>) parent.getItemAtPosition(position);
soundpool.play(soundmap.get(position), 1, 1, 0, 0, 1); //播放所选音频
}
});
}
}