游戏中的声音播放(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) {
     
    }
  }
}

 
目录
相关文章
|
7月前
文字转语音后的音频结束以后,再播放一段时间的背景音乐。什么方案能实现
【2月更文挑战第13天】文字转语音后的音频结束以后,再播放一段时间的背景音乐。什么方案能实现
67 2
|
图形学
Unity——音乐、音效
Unity——音乐、音效
|
编解码
vlc可以播放这个m3u8但是LivePlayer只有声音没画面
vlc可以播放这个m3u8但是LivePlayer只有声音没画面
1660 0
将手机声音用电脑播放的方法
本文介绍基于Bluetooth Audio Receiver软件实现用电脑播放手机声音,且与电脑自身声音不冲突同时播放的方法~
1262 1
将手机声音用电脑播放的方法
LabVIEW播放提示声音或者音乐
使用LabVIEW播放提示声音或者音乐,可在LabVIEW中右键鼠标:函数→声音→输出,选择相应的函数,如下图所示:
|
Windows
电脑音视频暂停再继续,声音突然变大
电脑音视频暂停再继续,声音突然变大
219 2
为什么游戏流畅需要60帧,而电影流畅只需要24帧?
平时我们看的电影,大都是 24 帧,偶尔有几部大制作电影,帧数才会达到 48 或者 60。那么,为什么电影 24 帧就很流畅,而我们玩电脑游戏就要 60 帧起步才算流畅呢?
459 0
为什么游戏流畅需要60帧,而电影流畅只需要24帧?
|
存储 Web App开发
视频编辑,4k播放,3D游戏, 阿里云图形工作站,了解一下?
设计师小哥哥,小姐姐们,还在用MacBook Pro做视频编辑? 还在一直为长时间的图形渲染占据电脑资源而无休止的等待?还在为大量的素材文件拷贝共享而犯愁? 爱玩游戏的兄弟姐妹们,还在打开电器商城在精挑细选一款适合玩游戏的笔记本? 现在,您无须在本地做视频编辑而担心效率。
2541 0
几个鸟叫的声音
http://files.cnblogs.com/jyk/111.rar
668 0
声音的录制
声音的录制 (一) —— 使用AVAudioRecorder进行录制(一)
999 0