android 游戏中的声音

来源:互联网 发布:怎么找文献的数据 编辑:程序博客网 时间:2024/05/01 14:32

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

一、 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 工程, 示意图如下:

原创粉丝点击