android学习日记11--音频播放类
2014-03-02 16:28
351 查看
一、android 音频播放类
MediaPlayer和SoundPool都可以用来播放音频。
区别是MediaPlayer占用资源高,延迟时间高,播放长音乐的,并且不能同时播放多个音乐,
而SoundPool占用资源较少,没什么延迟,但要提前加载,只能播放1M以下的音频文件,能同时播放多个音乐
因此MediaPlayer一般用来播放背景音乐,而SoundPool主要用来播放游戏音效。
1、MediaPlayer
注:pause()和stop(),主要的区别在于:暂停播放后可以调用start()继续播放,停止音乐播放后,需要调用prepare()再调用start()进行播放音乐。
当然不得不提AudioManager(音乐管理类,可以获取当前音乐大小以及最大音量)
2、SoundPool
获取实例:
常用方法:
3、基于MediaPlayer的简单播放器
导入drawable-mdpi(我一般是传入这个drawable文件夹的) 三张播放、暂停、停止的图片,res下新建raw文件夹并导入ten_year.mp3文件,注意Android的资源文件都不能中文和大写字母命名。
Activity主要代码:
View Code
由于游戏画面经常会有按钮点击关闭音效,这里的flag 参数主要用于控制是否播放。播放时调用
GameSoundPool.playSound(key, 0,soundFlag); 即可,key是定义具体的音效id,当然我们也可以为了代码可读行写成静态全局变量传进来。
MediaPlayer和SoundPool都可以用来播放音频。
区别是MediaPlayer占用资源高,延迟时间高,播放长音乐的,并且不能同时播放多个音乐,
而SoundPool占用资源较少,没什么延迟,但要提前加载,只能播放1M以下的音频文件,能同时播放多个音乐
因此MediaPlayer一般用来播放背景音乐,而SoundPool主要用来播放游戏音效。
1、MediaPlayer
//获取实例: MediaPlayer.create(Context context,int resId); //参数一:上下文对象,参数二:音乐资源ID,一般放在raw文件夹下。如果没有raw就自己创建一个 //常用方法: prepare();//为播放音乐文件做准备工作 start();//播放音乐 pause();//暂停音乐播放 stop();//停止音乐播放 //MediaPlayer其它常用函数 setLooping(boolean looping);//设置音乐是否循环播放,true为循环播放 seekTo(int msec);//将音乐播放跳转到某一时间点,以毫秒为单位 getDuration();//获取播放的音乐文件总时间长度 getCurrentPosition();//获取当前播放音乐时间点
注:pause()和stop(),主要的区别在于:暂停播放后可以调用start()继续播放,停止音乐播放后,需要调用prepare()再调用start()进行播放音乐。
当然不得不提AudioManager(音乐管理类,可以获取当前音乐大小以及最大音量)
// 获取实例 AudioManager am = new AudioManager(); //常用方法: setStreamVolume(imt streamType,int index,int flags) ;//设置音量大小,参数一:音乐类型(AudioManager.STREAM_MUSIC),参数二:音量大小,参数三:设置一个或者多个标志 getStreamVolume(int streamType);//获取当前音量大小,参数 获取音量大小类型 getStreamMaxVolume(int streamType);// 获取当前音量最大值,参数获取音量大小的类型
2、SoundPool
获取实例:
//参数一:允许同时播放的声音最大值,参数二:声音类型,参数三:声音品质 new SoundPool(int maxStreams,int streamType,int srcQuality);
常用方法:
//加载音乐文件,返回音乐ID(音乐流文件数据) 参数一:Context实例,参数二:音乐文件ID, //参数三:标志优先考虑的声音。目前使用没有任何效果,只是具备兼容性价值。一般写个1就可以。 int load(Context context,int resId,int priority); //音乐播放,播放失败返回0,正常则返回非0值,参数一:加载后得到的音乐文件,参数二:音量的左声道 范围0.0~1.0 参数三:音量的右声道,范围 0.0~1.0 //参数四:音乐流的优先级,0为最低优先级,参数五:音乐播放次数,-1表示无限循环,0表示正常一次,大于0则表示循环次数, //参数六:播放速率,取值范围:0.5~2.0,1.0表示正常播放。 int play(int soundId,float leftVolume,float rightVolume,int proority,int loop,float rate); pause(int streamID); //暂停音乐播放 ,参数:音乐文件加载后的流ID stop(int streamID) ; //结束音乐播放 参数:音乐文件加载后的流ID release(); //释放SoundPool的资源 setLoop(int streamID,int loop); //设置循环次数 参数一:音乐文件加载后的流ID,参数二:循环次数 setReat(int streamID); //设置播放速率 setVolume(int streamID,float leftVolume,float rightVolume); //设置音量大小,参数二:左声道音量,参数三:右声道音量 setPriority(int streamID,int priority); //设置流的优先级,参数二:优先级值。
3、基于MediaPlayer的简单播放器
导入drawable-mdpi(我一般是传入这个drawable文件夹的) 三张播放、暂停、停止的图片,res下新建raw文件夹并导入ten_year.mp3文件,注意Android的资源文件都不能中文和大写字母命名。
Activity主要代码:
public class GameSoundPool { private MainActivity mainActivity; private SoundPool soundPool; private HashMap<Integer,Integer> map; public GameSoundPool(MainActivity mainActivity){ this.mainActivity = mainActivity; map = new HashMap<Integer,Integer>(); soundPool = new SoundPool(8,AudioManager.STREAM_MUSIC,0); } public void initGameSound(){ map.put(1, soundPool.load(mainActivity, R.raw.shoot, 1)); map.put(2, soundPool.load(mainActivity, R.raw.explosion, 1)); map.put(3, soundPool.load(mainActivity, R.raw.explosion2, 1)); map.put(4, soundPool.load(mainActivity, R.raw.explosion3, 1)); map.put(5, soundPool.load(mainActivity, R.raw.bigexplosion, 1)); map.put(6, soundPool.load(mainActivity, R.raw.get_goods, 1)); map.put(7, soundPool.load(mainActivity, R.raw.button, 1)); } //播放音效 public void playSound(int sound,int loop,boolean flag){ AudioManager am = (AudioManager)mainActivity.getSystemService(Context.AUDIO_SERVICE); float stramVolumeCurrent = am.getStreamVolume(AudioManager.STREAM_MUSIC); float stramMaxVolumeCurrent = am.getStreamVolume(AudioManager.STREAM_MUSIC); float volume = stramVolumeCurrent/stramMaxVolumeCurrent; if(flag) { soundPool.play(map.get(sound), volume, volume, 1, loop, 1.0f); } } }
View Code
由于游戏画面经常会有按钮点击关闭音效,这里的flag 参数主要用于控制是否播放。播放时调用
GameSoundPool.playSound(key, 0,soundFlag); 即可,key是定义具体的音效id,当然我们也可以为了代码可读行写成静态全局变量传进来。
相关文章推荐
- android成长日记 11.详细学习了数据存储相关基础知识
- Android学习日记——安全
- android学习日记:手机主界面背景的修改
- android多媒体部分学习笔记六----音频录制 mediaRecorder
- 视音频播放(Android学习随笔七)
- android学习日记之fragment
- android学习日记-1 从android 到apk的过程
- android学习日记(Android当中的常见控件)
- android学习日记(1) -- Activity生存周期
- 1.26Android 学习+进度之二十六-音频聊天
- android学习日记(五):ViewPager详解上
- Android学习一、MediaPlayer播放音频
- Android学习(6)音频管理AudioManager-3
- Android多媒体学习九:利用MediaRecorder类实现自己的音频录制程序
- Android多媒体学习七:调用Android自带的音频录制程序,实现录制
- Android 中打印日记的妙用(转发:供以后学习)
- Android开发学习笔记(11):Android问题解决对策集(更新中...)
- <React Native> 学习日记(1) 成功运行、编译RN-android的爬坑记录
- 11、ffmpeg学习笔记—ffmpeg源码编译-Android
- android学习日记:返璞归真的android-APIdemo