网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > J2EE/J2ME
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.再议j2me进度条与线程化模型.
.演示SessionAttributeListener的.
.类似卫星扫描效果.
.EnterpriseJavaBeansDistilled...
.调整压力测试工具.
.J2ME中访问手机本地电话本.
.基于Java的Web服务器工作原理(二.
.使用JSR-238更快地全球化您的应用.
.Java远程方法调用(二).
.IntroductionofStruts.
.在J2ME编程中使用 Nokia 的中文模.
.Web服务器和应用程序服务器有什么.
.j2me网络实战指南.
.Axis2 中的工具wsdl2Java 的使用.
.配置Eclipse进行远程调试.
.使用j2meunit进行游戏测试.
.J2EE架构的6个最佳实践.
.JNDI 常见问题.
.JavaMail快速入门-1.
.Redhat下安装Tomcat.

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

发表日期:2007-12-23



  详细介绍声音处理
  /**
   *    作者 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

(出处:)


上一篇:优化J2ME程序大小 人气:798
下一篇:在resin-ee-2.1.5上构建j2ee应用服务 人气:694
浏览全部J2EE/J2ME的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐