WEB开发网
开发学院软件开发Java 详细介绍手机游戏中的声音处理 阅读

详细介绍手机游戏中的声音处理

 2007-12-23 12:28:11 来源:WEB开发网   
核心提示:详细介绍声音处理 /** *作者 colicoEmail:colico@163.com *http://blog.csdn.net/colico *http://colico.ys168.com * 注:此为 我是小o 原创,需要转载请附上以上信息,详细介绍手机游戏中的声音处理, * */本文是在同一个游戏中移植在不

  详细介绍声音处理
 /**
  *  作者 colico  Email:colico@163.com
  *  http://blog.csdn.net/colico
  *  http://colico.ys168.com
  *  注:此为 我是小o 原创,需要转载请附上以上信息。
  *
  */

本文是在同一个游戏中移植在不同机型时所做的对声音的处理,考虑到性能的要求,对每种类型的手机做了一定的要求

s40 中的声音处理:

1) import com.nokia.mid.sound.*;  

2)

 Sound soundPlayer;
 void initSound(){
  soundPlayer = new Sound(b_main,1);
  if(m_playSound == 1){
   soundPlayer.play(0);
  }
 }

3) 
 byte[] b_main = {
   (byte)0x02,(byte)0x4a,(byte)0x3a,(byte)0x40,
   (byte)0x04,(byte)0x01,(byte)0x1f,(byte)0x1e,
   (byte)0x54,(byte)0x88,(byte)0x38,(byte)0x84,
   (byte)0x44,(byte)0xbc,(byte)0x4a,(byte)0xc4,
   (byte)0xa0,(byte)0xa9,(byte)0x0b,(byte)0x91,
   (byte)0x27,(byte)0x22,(byte)0xa2,(byte)0xb1,
   (byte)0x31,(byte)0x13,(byte)0x88,(byte)0x00,
 };

4)
 static int m_playSound = 1;

5) 在程序中对声音的控制
       m_playSound = (byte)(1 - m_playSound);
       if(m_playSound == 1){
        try{
         soundPlayer.play(0);
        } catch(Exception e){}
       }
       if(m_playSound == 0){
        try{
         soundPlayer.stop();
        } catch(Exception e){}
       }

//----------------------------------------------------

使用 ott 文件 在nokia 40或 60中

1) 定义数据结构
public class EMSound
{
  public int type;
  public byte[] data;

  public EMSound(byte[] data, int type)
  {
    this.type = type;
    this.data = data;
  }
}

2)
import com.nokia.mid.ui.*;
import com.nokia.mid.sound.*;
3)
 Sound soundPlayer;
 SoundListener soundListener = new EMSoundListener();

 EMSound currentSound = null;
 boolean soundPlaying = false;
 boolean soundEnable = true;

 class EMSoundListener
   implements SoundListener {
  public void soundStateChanged(Sound sound, int event) {
   switch (event) {
    case Sound.SOUND_STOPPED:
     soundPlaying = false;
     break;
    case Sound.SOUND_PLAYING:
     soundPlaying = true;
   }
  }
 }

 public EMSound loadSound(String resfile, int resID) {
  EMSound sound;
  try {
   InputStream is = getClass().getResourceAsStream(resfile + "/" + resID +
     ".ott");
   int len = (int) is.skip(10000);
   is.close();
   is = getClass().getResourceAsStream(resfile + "/" + resID + ".ott");
   byte[] barr = new byte[len];
   is.read(barr);
   is.close();
   sound = new EMSound(barr, Sound.FORMAT_TONE);
  }
  catch (Exception ex) {
   sound = null;
  }
  return sound;
 }

 public void playSound(EMSound sound, int count) {
  if (!soundEnable) {
   return;
  }
  try { //colico
   if (soundPlaying) {
    stopSound();
   }
   if (soundPlayer == null) {
    soundPlayer = new Sound(sound.data, sound.type);
    soundPlayer.setSoundListener(soundListener);
    currentSound = null;
   }
   if (sound != currentSound) {
    soundPlayer.release();
    soundPlayer.init(sound.data, sound.type);
    currentSound = sound;
   }

   soundPlayer.play(count);
  }
  catch (Exception ex) {
   soundPlaying = false;
  }
 }

  Sound[] soundPlayers;
  public void playSound( EMSound sound[], int loc)
  {
    if (!soundEnable) { return; }

    try {
      if (soundPlaying) stopSound();
      if (soundPlayers == null) {
        soundPlayers = new Sound[sound.length];
        System.out.PRintln("Sounds == null");
        for (int i=0; i<sound.length ; i++ ){
        soundPlayers[i] = new Sound( sound[i].data, sound[i].type );
        soundPlayers[i].setSoundListener( soundListener );
        soundPlayers[i].init(sound[i].data, sound[i].type);
        }
      }

      long now = System.currentTimeMillis();
      soundPlayers[loc].play(1);
      System.out.println("playing Sounds");
      System.out.println("playing Sounds time"+(System.currentTimeMillis()-now) );
    } catch(Exception ex) {
      soundPlaying = false;
    }
  }

 public void stopSound() {
  if (!soundEnable) {
   return;
  }
  if (soundPlayer != null) { //colico
   soundPlayer.stop();
  }
 }

 public boolean isSoundPlaying() {
  return soundPlaying;
 }

 public boolean isSoundEnable() {
  return soundEnable;
 }

 public void setSoundEnable(boolean e) {
  if (!e) {
   stopSound();
  }
  soundEnable = e;
 }

在V300中
1).
public class EMSound
{
 public String type;
 public byte[] data;

 public EMSound(byte[] data, String type)
 {
   this.type = type;
   this.data = data;
 }

}

2).

import javax.microedition.media.Player;
import javax.microedition.media.PlayerListener;
import javax.microedition.media.Manager;
import javax.microedition.media.Control.*;

3). //Sound soundPlayer;
 PlayerListener soundListener = new EMSoundListener();
 Player soundPlayer;
 EMSound currentSound = null;
 boolean soundPlaying = false;
 boolean soundEnable = true;

 class EMSoundListener
   implements PlayerListener {

  public void playerUpdate(Player player, String event, Object eventData) { //soundStateChanged(int event)
   if (event == PlayerListener.STOPPED) {
    soundPlaying = false;
   }
   if (event == PlayerListener.STARTED) {
    soundPlaying = true;
   }
  }
 }

 public EMSound loadSound(String resfile, int resID) {
  EMSound sound;
  try {
   InputStream is = getClass().getResourceAsStream(resfile + "/" + resID +
     ".mid");
   int len = (int) is.skip(10000);
   is.close();
   is = getClass().getResourceAsStream(resfile + "/" + resID + ".mid");
   byte[] barr = new byte[len];
   is.read(barr);
   is.close();
   sound = new EMSound(barr, "audio/midi");
  }
  catch (Exception ex) {
   sound = null;
  }
  return sound;
 }

 public void playSound(EMSound sound, int count) {
  if (!soundEnable) {
   return;
  }
  try {
   if (soundPlaying) {
    stopSound();
   }
   if (soundPlayer == null) {
    soundPlayer = Manager.createPlayer(new ByteArrayInputStream(sound.data),
                      sound.type);
    soundPlayer.addPlayerListener(soundListener);
    currentSound = null;
   }
   if (sound != currentSound) {
    soundPlayer.close();
    soundPlayer = Manager.createPlayer(new ByteArrayInputStream(sound.data),
                      sound.type);
    currentSound = sound;
   }
   soundPlayer.start();
  }
  catch (Exception ex) {
   soundPlaying = false;
   System.out.println(ex.toString());
  }
 }

 public void stopSound() {
  if (!soundEnable) {
   return;
  }
  if (soundPlayer != null) {
   try {
    soundPlayer.stop();
   }
   catch (Exception e) {
    System.out.print(e.toString());
   }
  }
 }

 public boolean isSoundPlaying() {
  return soundPlaying;
 }

 public boolean isSoundEnable() {
  return soundEnable;
 }

3.读取mid文件

1)
import javax.microedition.media.*;

2)

 Player player;
 void initSound() {
  try {
   player = Manager.createPlayer(getStream("/sound/b_main.mid"),
                  "audio/midi");
   player.realize();
   player.setLoopCount(100000);
  }
  catch (Exception e) {
   e.printStackTrace();
  }

 }

3) //在程序中对声音的控制

       m_playSound = (byte) (1 - m_playSound);
       if (m_playSound == 1) {
        try {
         player.start();
        }
        catch (Exception e) {}
       }
       if (m_playSound == 0) {
        try {
         player.stop();

        }

        catch (Exception e) {}
       }

///---------------end

(出处:http://www.cncms.com)


Tags:详细 介绍 手机游戏

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接