1. gzyueqian
      18529173453
      首頁 > 新聞中心 > > 正文

      詳細介紹手機游戲中的聲音處理

      更新時間: 2007-05-16 13:49:22來源: 粵嵌教育瀏覽量:737


      詳細介紹聲音處理
      /**
      * 作者 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

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 日本手机精品视频在线 | 日韩欧美国产一区二区 | 在线观看国产不卡秒播AV | 伊人网中文字幕 | 日本三级香港三级人妇电影99 | 先锋影音资源影音中在线不卡 |