android 3d游戏研究(一)(边学边写,多谢高手指正,鞠躬) :声音
很久以前就想学习3d的,但一直没有时间,最近能闲点,所以开始学习3d的;
今天先写声音:
游戏中的声音可以分为两种,背景音乐和动作音乐;
他们有什么区别:背景音乐,相对与动作音乐它的存在时间要长,所以按这样的方式我将其引用分为两种:一般音乐播放(背景音乐),池播放(动作音乐)
(1)池播放:
代码实现:
SoundPool sp; //得到一个声音池引用
HashMap<Integer,Integer> spMap; //得到一个map的引用
//初始化
sp=new SoundPool(
5, //maxStreams参数,该参数为设置同时能够播放多少音效
AudioManager.STREAM_MUSIC, //streamType参数,该参数设置音频类型,在游戏中通常设置为:STREAM_MUSIC
0 //srcQuality参数,该参数设置音频文件的质量,目前还没有效果,设置为0为默认值。
);
spMap=new HashMap<Integer,Integer>();
spMap.put(1, sp.load(this, R.raw.attack02, 1));
spMap.put(2, sp.load(this, R.raw.attack14, 1));
//音乐播放
public void playSound(int sound,int number){ //播放声音,参数sound是播放音效的id,参数number是播放音效的次数
AudioManager am=(AudioManager)this.getSystemService(this.AUDIO_SERVICE);//实例化AudioManager对象
float audioMaxVolumn=am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); //返回当前AudioManager对象的最大音量值
float audioCurrentVolumn=am.getStreamVolume(AudioManager.STREAM_MUSIC);//返回当前AudioManager对象的音量值
float volumnRatio=audioCurrentVolumn/audioMaxVolumn;
sp.play(
spMap.get(sound), //播放的音乐id
volumnRatio, //左声道音量
volumnRatio, //右声道音量
1, //优先级,0为最低
number, //循环次数,0无不循环,-1无永远循环
1 //回放速度 ,该值在0.5-2.0之间,1为正常速度
);
}
//事件的引用:
playSound(1,1); //播放第一首音效,循环一遍
sp.pause(spMap.get(1)); // 暂停第一首音效
sp.stop(spMap.get(1));// 停止第一首音效
好了,以上为池播放的简单使用;
(2) 一般播放
MediaPlayer mp; //MediaPlayer引用
AudioManager am; //AudioManager引用
//初始化音频
mp=new MediaPlayer();
//在第一次播放前,必须
try{
mp.setDataSource("/sdcard/dl.mid"); //加载音频,进入Initialized状态。
}catch(Exception e){e.printStackTrace();}
try{
mp.prepare(); //进入prepared状态。
}catch(Exception e){e.printStackTrace();}
//事件的引用: www.zzzyk.com
mp.start(); //播放音乐
mp.pause(); //暂停音乐
mp.stop(); //停止音乐
//mp.isPlaying();//判断是否为播放状态
//初始化音量
am=(AudioManager) this.getSystemService(this.AUDIO_SERVICE);
am.adjustVolume(AudioManager.ADJUST_RAISE, 0); //增大音量
am.adjustVolume(AudioManager.ADJUST_LOWER, 0); //减小音量
好的,以上为声音的简单调度;
补充:移动开发 , Android ,