Android 播放音频一般有两种方式:ps:这里只介绍基本使用,后续会详细介绍
权限:<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
1、MediaPlayer播放器(同时只能播放一个音乐. 可以播放大文件. 播放背景音乐)
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(context,R.raw.test);
mediaPlayer.prepare(); // 准备.
mediaPlayer.start(); //播放
或者
/**
*无需mediaPlayer.prepare()源码已调用
*/
MediaPlayer mediaPlayer = MediaPlayer.create(context,R.raw.test);
mediaPlayer.start();
2、SoundPool 声音池(同时播放多个声音(混合音效). 只允许申请1M的内存空间.)
①、获取SoundPool对象
Android 5.0之前
/*
第一个参数maxStreams: 设置最大声音流
第二参数streamType: 设置音频播放类型
铃声音量 AudioManager.STREAM_RING
通话音量 AudioManager.STREAM_VOICE_CALL
系统音量 AudioManager.STREAM_SYSTEM
音乐音量 AudioManager.STREAM_MUSIC
提示声音音量 AudioManager.STREAM_ALARM
第三参数srcQuality: 一般默认值为0就可以
*/
SoundPool mSoundPoll = new SoundPool(BaseConstantValue.GAME_VOICE, AudioManager.STREAM_MUSIC, 0);
Android 5.0之后
AudioAttributes abs = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA) //音乐播放模式(媒体播放)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) //音乐播放模式(媒体播放)
.build();
SoundPool mSoundPoll = new SoundPool.Builder()
.setMaxStreams(BaseConstantValue.GAME_VOICE) //设置允许同时播放的流的最大值
.setAudioAttributes(abs)
.build();
mSoundPoll.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
try {
/*
*播放
*
* 第一参数:音频资源
* 第二参数:左音量值 默认给1
* 第三参数:右音量值 默认给1
* 第四参数:优先级 默认给1
* 第五参数:0:表示无循环 -1:无限循环
* 第六参数: 播放速率 1:正常 (0.5-2.0)
*/
soundPool.play(sampleId, 1, 1, 1, 0, 1);
} catch (Exception e) {
e.printStackTrace();
}
}
});
/*
*加载资源
resId:资源id
*/
mSoundPoll.load(context, resId, 1);
3、释放资源:mSoundPoll.release();