Android游戏音效和音乐的实现
前言
对于使用过Android系统的人来说,打开图库App就能看见手机里面所有的图片,打开音乐App就听到所有的音乐,而且这个过程不是很慢。以前没有深入的去思考这个事情,直到最近看了些别人的代码查了查API才觉得原来这么简单。就是利用MediaStore类。MediaStore
什么是MediaStore?官方的API给了详细的描述和解释。 其中包含了三个内部类: * MediaStore.Audio * MediaStore.Image * MediaStore.Video 从名字就可以看出来分别对应的是音频,图片和视频。这三个内部类又有好多的内部类,详情可以看文档。 通过ContentProvider的数据共享机制,将多媒体文件共享出来,以便其他的应用程序可以使用。 但是套用在我的小程序里面,我觉得还是有点大题小做,所以,我得尝试着用用我上篇文章中,背景音乐和音效中说的方法试试看。如何来构建这样一个Unity
第一反应肯定是利用Java的封装特性,将我们需要的功能给封装出合适的接口,同时能方便我们很好的调用。- 利用AudioManager的实例化对象来获取系统当前的声音对象。
AudioManager audiomanage = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
- 通过设置标志位来控制音乐和音效
// 媒体播放控制开关 private static boolean musicRunning = true; // 声音池播放开关 private static boolean soundRunning = true;
- 需要注意的是,Soundpool存放的是键值对,因此我们需要将其定义成Map型
// 声音池键值对 声音资源ID与 private static Map<Integer, Integer> soundPoolMap; // 音乐资源ID数组 private static final int musicId[] = { R.raw.backgroung };
- 接下来进行初始化,同时获取上下文对象
// 初始化资源 public static void init(Context context) { mContext = context; initMusic(); initSoundPool(); } // 初始化music public static void initMusic() { mMediaPlayer = MediaPlayer.create(mContext, musicId[0]); mMediaPlayer.setLooping(true); } // 初始化音效池 public static void initSoundPool() { mgr = (AudioManager) mContext.getSystemService(Context.AUDIOSERVICE); soundPool = new SoundPool(10, AudioManager.STREAMMUSIC, 100); soundPoolMap = new HashMap<Integer, Integer>(); soundPoolMap.put(R.raw.btns, soundPool.load(mContext, R.raw.btns, 1)); }
- 最后在各自的函数里,写好相应的调用函数就ok了。MediaPlayer的调用方法及其流程,上篇文章中,背景音乐和音效中我也写过了,忘记的可以再去看看。主要就写写Soundpool的调用方法,由于它是短音效,是在按键或者其他条件达成时候才进行播放,所以不用设置暂停和停止。
最后就是,留出适合你的API,供你的程序调用就好了。public static void PlaySoundPool(int resid) { if (soundRunning == false) { return; } Integer soundId = soundPoolMap.get(resid); if (soundId != null && soundRunning) { soundPool .play(soundId, mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC), mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 1, 0, 1f); System.out.println("1--->" + resid); } }
下文与技术无关,技术人员可以Ctrl+w了。
- 今天确定好了毕业设计的任务书,紧接着而来的就是为期3个月的毕业设计。每天四次签到加一篇毕业设计报告,累也罢苦也罢,都是一种经历,何况这样的结束,也不枉来到大学为了计算机奋斗四年。
- 若有闲时间,我希望能在我再开设一个电影专栏,写写我对于深爱的每一部影片的见解,以及那些深深打动我的镜头。like this: 图片来自2013年的一部电影,自己截图,有人能猜到是什么名字吗?
- 无意中找到我的一张照片 很好的展示出兴趣和爱,才是人类进步和发展的源泉。