android 游戏中的声音

游戏中的声音, 可分为音乐和音效, 较长的音乐可作为游戏的背景音乐,迅即的音效,时间短但要求反应迅速.

一、 android  中,迅即的音效采用 android.media.SoundPool 实现, 该类将声音文件加载到内存中,出于性能考虑, 一般只将短于7秒的声音文件用它播放.

1. 加载声音文件 通过 load(Context c, int resId,  int  priority) 方法

2.  播放声音文件通过 play(int sundID,  float leftVolume,  float  rightVolume,  int  priority,  int  loop,  float   rate)  方法,这里soundID: 播放的音乐ID, leftVolume: 左声道音量, rightVolume:  右声道音道, priority:  优先级,0为最低, loop: 循环次数,0 不循环,-1 为永远循环, rate: 回放速度, 取值在0.5~2.0 之间, 1为正常速度.

      暂停 为pause( int  streamID) 方法.

-----------------------------------------------------

以下为一个SoundPool 示例,主要代码为:

public void initSoundPool() { // 初始化声音池
	  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为正常速度
	  );
 }
 
  b1.setOnClickListener(new View.OnClickListener() {
	   @Override
	   public void onClick(View v) {
		playSound(1, 1); // 播放第一首音效,循环一遍
		Toast.makeText(MyActivity.this, "播放音效1", Toast.LENGTH_SHORT)
		  .show();
	   }
  });
  b1Pause.setOnClickListener(new View.OnClickListener() {
	   @Override
	   public void onClick(View v) {
		sp.pause(spMap.get(1));
		Toast.makeText(MyActivity.this, "暂停音效1", Toast.LENGTH_SHORT)
		  .show();
	   }
  });

具体代码请参见  SoundPool_3_1   工程

示意图:

 二、背景音乐播放技术

 背景音乐通常播放时间较长,文件 占用空间大, 通常使用MediaPlayer类, 及声音控制类 AudioManager

 MediaPlayer 类是Android 用来控制音频、视频的类. 它有一个状态图,如下所示,Idle状态为 空闲状态,当加载了音频资源后进入Initialized 状态,之后调用prepare() 进入prepared 状态. 至于其他状态这里不多介绍了,可自行查阅 API.

 相关示例代码请参见   Audio_3_2 工程, 示意图如下:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值