zoukankan      html  css  js  c++  java
  • 完美解决Java程序在 MOTO E680i 中声音文件播放

    这几天一直在用MOTO SDK来开发一款用于Moto E680i的JAVA游戏,利用BLOG发表一些心得:

    MOTO系列手机中JAVA程序播放一个声音文件比较简单,但是用于交互式音效时就有问题了。

    根据MOTO的一些资料显示,在MOTO手机中播放声音有下面几条约束:

    除了同时播放一个MIDI和一个WAV以外,MOTO手机无法同时播放多个声音,而且必须是先播放MIDI然后播放WAV;

    除了MIDI或音阶序列以外,不能同时实现player的多个实例进入prefetched状态(预读取声音流);

    播放新的声音之前,前一个player必须停止并释放资源(stop();deallocate())。

    如果你遇到以下问题,可以试试我的解决方法:

    1)只能播一次,或几次,接着就无法发出声音;

    2)播放新的声音时,总是会多播放一次前一个声音;

    3)或者其他奇怪的问题。

    我的代码:

    //引用以下
    import javax.microedition.media.Player;
    import javax.microedition.media.PlayerListener;

    //定义多个声效及声音文件的类型
     private String[] arrSoundFile = {"start.mid","right.wav","wrong.wav","help.wav","end.wav"};
     private String[] arrSoundType = {"audio/x-midi","audio/x-wav","audio/x-wav","audio/x-wav","audio/x-wav"};

    //定义播放器实例
     public Player player;

    //定义一个变量,控制是否发声
      public boolean isSoundOpen = false;

    //播放声音主过程,参数为前面定义的声音数组的索引号
      public void playMedia(int iKey) throws Exception {

        // 创建实例
        player = Manager.createPlayer(
            getClass().getResourceAsStream("/midi/"+arrSoundFile[iKey]), arrSoundType[iKey]);

        // 绑定状态更新事件过程
        player.addPlayerListener(this);

        //播放声音
        player.setLoopCount(1); 
        player.prefetch(); // prefetch
        player.realize(); // realize
        player.start(); // and start
      }

    // 播放器状态更新事件过程
     public void playerUpdate(Player player, String event, Object eventData) {

        //调试 跟踪过程
        //    System.err.println("event:" + event);

        //如果播放结束,就释放和关闭播放器实例
        if (event.equals("endOfMedia")) {
        player.deallocate();
        player.close();
        }
    }

    //播放声音调用过程
     public void playSound(int iKey) {
       if(isSoundOpen)
      {
           try {
              playMedia(iKey);
            } catch (Exception e) {
              System.err.println("Unable to play: " + e);
              e.printStackTrace();
            }
          }
    }

    /*
    欢迎转载,请保留以下版权说明
    ========================
      风雨雷电堂在学J2ME
    ========================
    不保留以上版权说,说明你很差
    */

    大家可以在MOTO的机子上测试。

  • 相关阅读:
    tile38 复制配置
    The Guardian’s Migration from MongoDB to PostgreSQL on Amazon RDS
    tile38 一款开源的geo 数据库
    sqler sql 转rest api 的docker 镜像构建(续)使用源码编译
    sqler sql 转rest api javascript 试用
    sqler sql 转rest api redis 接口使用
    sqler sql 转rest api 的docker image
    sqler sql 转rest api 的工具试用
    apache geode 试用
    benthos v1 的一些新功能
  • 原文地址:https://www.cnblogs.com/gpwzw/p/12147505.html
Copyright © 2011-2022 走看看