游戏中的声音播放(1)

简介: 好的游戏,一定离不开美妙的音乐支持,但是每款机型对声音的支持能力多有所不同,因此可以在使用之前先探测一下该款手机支持的多媒体格式,当然这个步骤不是必须的。      下面的代码是针对E680i编写的,并且在真机运行成功,程序首先探测了E680i的多媒体支持能力,并且把所有支持的格式显示到屏幕,由于不能一屏完全显示,因此设置了滚动;当滚动到底部或者顶部时,会播放一段乐音序列。
好的游戏,一定离不开美妙的音乐支持,但是每款机型对声音的支持能力多有所不同,因此可以在使用之前先探测一下该款手机支持的多媒体格式,当然这个步骤不是必须的。
      下面的代码是针对E680i编写的,并且在真机运行成功,程序首先探测了E680i的多媒体支持能力,并且把所有支持的格式显示到屏幕,由于不能一屏完全显示,因此设置了滚动;当滚动到底部或者顶部时,会播放一段乐音序列。
      该程序可以作为学习声音的入门参考。

/*
 * MainCanvas.java
 *
 * Created on 2006年8月18日, 下午3:28
 *
 */

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.media.Manager;
import javax.microedition.media.Player;
import javax.microedition.media.control.ToneControl;

/**
 *
 * @author mydeman
 */
public class MainCanvas extends Canvas{
 
  private Midlet midlet;
  private int index = 0;
  private int line = 0;
  //每行字体的高度
  private static int lineHeight = Font.getDefaultFont().getHeight();
  //所有支持的类型
  private static String[] allTypes;
  //音调
  private static byte C4 = ToneControl.C4;
  private static byte E4 = (byte)(C4 + 2);
  private static byte D4 = (byte)(C4 + 1);
  private static byte G4 = (byte)(C4 + 4);
  private static byte rest = ToneControl.SILENCE;
  //播放器
  private static Player player;
 
  //声明声音序列,该序列出自《J2ME手机游戏编程入门》
  private static byte[] marylambSequence = {
    ToneControl.VERSION, 1,
    ToneControl.TEMPO, 30,
    ToneControl.BLOCK_START, 0,
    E4,8, D4,8, C4,8, D4,8,
    E4,8, E4,8, E4,8, rest, 8,
    ToneControl.BLOCK_END, 0,
    ToneControl.PLAY_BLOCK, 0,
    D4,8, D4,8, D4,8, rest,8,
    E4,8, G4,8, G4,8, rest,8,
    ToneControl.PLAY_BLOCK, 0,
    D4,8, D4,8, E4,8, D4,8, C4,8
  };
 
  /** Creates a new instance of MainCanvas */
  public MainCanvas(Midlet midlet) {
    this.midlet = midlet;
    setFullScreenMode(true);
    init();
  }
 
  private void init() {
    try {
      //初始化播放器
      player = Manager.createPlayer(Manager.TONE_DEVICE_LOCATOR);
      player.realize();
      //创建播放序列
      ToneControl toneControl = (ToneControl)player.getControl("ToneControl");
      toneControl.setSequence(marylambSequence);
    } catch (Exception e) {
    }
   
    //得到总行数和所有支持的类型
    line = 310 / lineHeight;
    allTypes = Manager.getSupportedContentTypes(null);
  }
 
  /**
   * 绘制屏幕
   */
  protected void paint(Graphics g) {
    //绘制背景
    g.setColor(0, 0, 0);
    g.fillRect(0, 0, 240, 320);
   
    //绘制当前屏幕上的支持类型
    g.setColor(0, 255, 0);
    for(int i = 0; i < line; i++) {
      g.drawString(allTypes[i + index], 10, i * lineHeight + 10,
        Graphics.TOP|Graphics.LEFT);
    }
  }
 
  /**
   * 按键事件处理
   */
  public void keyPressed(int keyCode) {
    switch(getGameAction(keyCode)) {
      //如果按键为A,则退出程序
      case Canvas.GAME_A :
        player.close();
        midlet.notifyDestroyed();
        break;
      //如果按键为UP,则向上滚动
      case Canvas.UP :
        scroll(1);
        break;
      //如果按键为DOWN,则向下滚动
      case Canvas.DOWN :
        scroll(-1);
        break;
    }
  }
 
  /**
   * 设置屏幕滚动
   */
  private void scroll(int i) {
    //设置索引
    index += i;
    //判断索引的大小,如果已经到达了底部或者顶部,则
    //播放预先定义好的乐音序列
    if(index < 0) {
      index = 0;
      playSound();
    } else if(index + line > allTypes.length) {
      index -= i;
      playSound();
    }
    //重绘屏幕
    repaint();
    serviceRepaints();
  }
 
  /**
   * 播放声音
   */
  private void playSound() {
    try {
      player.start();
    } catch(Exception e) {
     
    }
  }
}

 
目录
相关文章
|
SQL 分布式计算 运维
如何对付一个耗时6h+的ODPS任务:慢节点优化实践
本文描述了大数据处理任务(特别是涉及大量JOIN操作的任务)中遇到的性能瓶颈问题及其优化过程。
|
机器学习/深度学习 人工智能 算法
人工智能的伦理困境与未来挑战
【8月更文挑战第13天】 本文旨在探讨人工智能技术发展过程中所面临的伦理问题和未来的挑战。随着AI技术的不断进步,其在社会中的作用日益重要,但同时也引发了一系列伦理问题,如隐私保护、自动化失业、算法偏见等。文章将分析这些伦理问题的具体表现,并讨论如何在技术创新的同时,确保AI的发展能够符合社会伦理标准,促进人类社会的和谐发展。
247 0
|
Android开发 芯片 异构计算
Android图形显示系统——下层显示4:图层合成下(硬件合成器)
硬件合成器-HwComposer 使用3D合成,需要大面积的像素混合计算和大量的内存传输(GPU读写GraphicBuffer所需),对GPU和DDR来说是一个巨大的负担。在GPU/DDR重度使用的场景(比如玩游戏),会造成发热、卡顿等。 为了提升性能,减少功耗,可以将合成这个过程交由另一个芯片完成,减轻GPU负担。进一步,直接让这个芯片连LCD,在LCD需要显示某一行时
7079 0
|
存储 缓存 Oracle
|
计算机视觉 Python
yolov5+deepsort目标检测与跟踪(毕业设计+代码)
yolov5+deepsort目标检测与跟踪(毕业设计+代码)
|
6月前
|
人工智能 IDE Devops
通义灵码编程智能体,上线!
近期,Qwen3正式发布并开源8款“混合推理模型”,参数量235B,激活仅需22B,性能超越多个国际顶尖模型。通义灵码全面支持Qwen3,上线编程智能体,具备工程级变更、自动感知、工具使用和终端命令执行四大能力。插件集成魔搭MCP广场2400+服务,大幅提升开发效率。目前,通义灵码插件下载超1500万,生成代码超30亿行,服务上万家企业。
|
6月前
|
Kubernetes Cloud Native 区块链
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
220 0
|
9月前
|
敏捷开发 监控 数据可视化
产品开发为什么需要看板管理?掌握这些技巧提高效率!
在数字化时代,产品开发是企业创新与竞争的关键。本文探讨了产品开发的核心流程、敏捷管理方法及高效工具的应用,如板栗看板,以优化团队协作和资源配置,加速产品上市并提升市场竞争力。核心流程涵盖市场调研、规划设计、研发迭代、测试优化、上线推广及持续改进。敏捷开发强调短周期迭代、跨团队协作和数据驱动决策。可视化工具如板栗看板能有效提升任务透明度和协作效率,确保产品按时高质量交付。
|
SQL 机器学习/深度学习 数据库
SQL与Python集成:数据库操作无缝衔接
1. Python与SQL集成的关键步骤 在开始之前,确保你已经安装了必要的Python库,如`sqlite3`(用于SQLite数据库)或`psycopg2`(用于PostgreSQL数据库)。这些库提供了Python与SQL数据库之间的接口。
|
消息中间件 Oracle 关系型数据库
实时计算 Flink版操作报错之连接外部kafka本地执行测试代码报错如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。

热门文章

最新文章