TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
MIDP 2.0手机支持的常见音频MIME类型:
. audio/x-tone-seq 单个的音符和音符序列
. audio/x-wav 声波声音
. audio/mid MIMD 声乐
. audio/mpeg MP3 音频 Player接口中提供了一些重要的方法来播放和控制声音播放 . realize():实现没有获取音频资源的播放器
. prefetch():获取音频资源以减少播放滞后
. getState():获取播放器的状态
. setLoopCount():设置声音的循环次数
. start():开始播放一个声音
. stop():停止播放一个声音
. getDuration():获取声音总的播放时间(毫秒)
. getMediaTime():获取当前的播放点(毫秒),声音已经播放了多久
. setMediaTime():设置当前的播放点(毫秒)
. close():关闭播放器
一、从一个jar文件中播放 try {
Player musicPlayer;
InputStream is = getClass().getResourceAsStream("/Music.mid");
musicPlayer = Manager.createPlayer(is, "audio/midi");//创建播放器
musicPlayer.prefetch();//确保声音已经准备好以最小的滞后播放。
musicPlayer.start();//开始播放
} catch (IOException ioe) { }
catch (MediaException me) { } 二、播放来自url的音乐 try {
Player musicPlayer;
musicPlayer = Manager.createPlayer("http://yourserver/Music.mid");
musicPlayer.prefetch();
musicPlayer.start();
}
catch (IOException ioe) {
}
catch (MediaException me) {
}
- 三、声音演示程序:小鸡过街,来自《J2ME手机游戏编程入门》
- [img]http://img.javaxxz.com/2014/10/11/015806718.jpg[/img]
- 1、HCanvas.java
- import javax.microedition.lcdui.*;
- import javax.microedition.lcdui.game.*;
- import java.util.*;
- import java.io.*;
- import javax.microedition.media.*;
- import javax.microedition.media.control.*;
- public class HCanvas extends GameCanvas implements Runnable {
- private Display display;
- private boolean sleeping;
- private long frameDelay;
- private int inputDelay;
- private Random rand;
- private Image background;
- private Image chickenHead;
- private Sprite chickenSprite;//小鸡
- private Sprite[] carSprite = new Sprite[4];//四个汽车
- private int[] carYSpeed = new int[4];//汽车在y方向上的速度
- private boolean gameOver;
- private int numLives;//开始时的小鸡数
- private int score;
- private Player musicPlayer;//背景音乐播放器
- private Player celebratePlayer;//
- private Player squishPlayer;
- private Player gameoverPlayer;
- public HCanvas(Display d) {
- super(true);
- display = d;
- // 设置帧速率(30 帧每秒)
- frameDelay = 33;
- // 清除输入延迟
- inputDelay = 0;
- }
-
- public void start() {
- // 把canvas设置为当前屏幕
- display.setCurrent(this);
-
- rand = new Random();
-
- gameOver = false;
- numLives = 3;
- score = 0;
- //初始化背景图像,小鸡和汽车精灵
- try {
- background = Image.createImage("/Highway.png");
- chickenHead = Image.createImage("/ChickenHead.png");
- chickenSprite = new Sprite(Image.createImage("/Chicken.png"), 22, 22);
- chickenSprite.setPosition(2, 77);
- carSprite[0] = new Sprite(Image.createImage("/Car1.png"));
- carSprite[0].setPosition(27, 0);
- carYSpeed[0] = 3;
- carSprite[1] = new Sprite(Image.createImage("/Car2.png"));
- carSprite[1].setPosition(62, 0);
- carYSpeed[1] = 1;
- carSprite[2] = new Sprite(Image.createImage("/Car3.png"));
- carSprite[2].setPosition(93, 67);
- carYSpeed[2] = -2;
- carSprite[3] = new Sprite(Image.createImage("/Car4.png"));
- carSprite[3].setPosition(128, 64);
- carYSpeed[3] = -5;//最后一辆汽车最快
- }
- catch (IOException e) {
- System.err.println("Failed loading images!");
- }
- // 初始化声音和播放器
- try {
- InputStream is = getClass().getResourceAsStream("/Music.mid");//重复的背景音乐
- musicPlayer = Manager.createPlayer(is, "audio/midi");
- musicPlayer.prefetch();
- is = getClass().getResourceAsStream("/Celebrate.wav");//小鸡过街后的庆祝声
- celebratePlayer = Manager.createPlayer(is, "audio/X-wav");
- celebratePlayer.prefetch();
- is = getClass().getResourceAsStream("/Squish.wav");//小鸡被汽车压扁声
- squishPlayer = Manager.createPlayer(is, "audio/X-wav");
- squishPlayer.prefetch();
- is = getClass().getResourceAsStream("/GameOver.wav");//游戏结束
- gameoverPlayer = Manager.createPlayer(is, "audio/X-wav");
- gameoverPlayer.prefetch();
- }
- catch (IOException ioe) {
- }
- catch (MediaException me) {
- }
- // 开始背景音乐
- try {
- musicPlayer.setLoopCount(-1);//-1表示无限次重复
- musicPlayer.start();
- }
- catch (MediaException me) {
- }
-
- sleeping = false;
- Thread t = new Thread(this);
- t.start();
- }
-
- public void stop() {
- // 关闭音乐和播放器
- musicPlayer.close();
- celebratePlayer.close();
- squishPlayer.close();
- gameoverPlayer.close();
- // 停止动画
- sleeping = true;
- }
-
- public void run() {
- Graphics g = getGraphics();
-
- // 游戏的主循环
- while (!sleeping) {
- update();
- draw(g);
- try {
- Thread.sleep(frameDelay);
- }
- catch (InterruptedException ie) {}
- }
- }
- private void update() {
- // 游戏是否重新开始
- if (gameOver) {
- int keyState = getKeyStates();
- if ((keyState & FIRE_PRESSED) != 0) {
-
- try {
- musicPlayer.setMediaTime(0);
- musicPlayer.start();
- }
- catch (MediaException me) {
- }
- chickenSprite.setPosition(2, 77);
- gameOver = false;
- score = 0;
- numLives = 3;
- }
- // 游戏已结束,不必作任何更新
- return;
- }
- // 处理用户输入以移动小鸡
- if (++inputDelay > 2) {
- int keyState = getKeyStates();
- if ((keyState & LEFT_PRESSED) != 0) {
- chickenSprite.move(-6, 0);
- chickenSprite.nextFrame();
- }
- else if ((keyState & RIGHT_PRESSED) != 0) {
- chickenSprite.move(6, 0);
- chickenSprite.nextFrame();
- }
- if ((keyState & UP_PRESSED) != 0) {
- chickenSprite.move(0, -6);
- chickenSprite.nextFrame();
- }
- else if ((keyState & DOWN_PRESSED) != 0) {
- chickenSprite.move(0, 6);
- chickenSprite.nextFrame();
- }
- checkBounds(chickenSprite, false);
- // 重置输入延迟,这个变量用来调整按键的响应
- inputDelay = 0;
- }
- // 小鸡是否通过
- if (chickenSprite.getX() > 154) {
- // 放庆祝声
- try {
- celebratePlayer.start();
- }
- catch (MediaException me) {
- }
- //重置小鸡位置并加分
- chickenSprite.setPosition(2, 77);
- score += 25;
- }
- // 更新汽车
- for (int i = 0; i < 4; i++) {
- // 移动汽车
- carSprite[i].move(0, carYSpeed[i]);
- checkBounds(carSprite[i], true);
- // 检查小鸡和汽车是不有冲突
- if (chickenSprite.collidesWith(carSprite[i], true)) {
- // 放小鸡被压扁的声音
- try {
- squishPlayer.start();
- }
- catch (MediaException me) {
- }
- // 检查游戏是否结束
- if (--numLives == 0) {
- // 停止背景音乐并放游戏结束的声音
- try {
- musicPlayer.stop();
- gameoverPlayer.start();
- }
- catch (MediaException me) {
- }
- gameOver = true;
- } else {
- // 重轩小鸡
- chickenSprite.setPosition(2, 77);
- }
-
- break;
- }
- }
- }
- private void draw(Graphics g) {
- // 绘制背景公路
- g.drawImage(background, 0, 0, Graphics.TOP | Graphics.LEFT);
-
- // 绘制剩下的小鸡数目
- for (int i = 0; i < numLives; i++)
- g.drawImage(chickenHead, 180 - ((i + 1) * 8), 170, Graphics.TOP | Graphics.LEFT);
- // 绘小鸡
- chickenSprite.paint(g);
- // 绘汽车
- for (int i = 0; i < 4; i++)
- carSprite[i].paint(g);
-
- if (gameOver) {
- // 绘游戏结束信息
- g.setColor(255, 255, 255); // white
- g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_LARGE));
- g.drawString("GAME OVER", 90, 40, Graphics.TOP | Graphics.HCENTER);
- g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_MEDIUM));
- g.drawString("You scored " + score + " points.", 90, 70, Graphics.TOP |
- Graphics.HCENTER);
- }
- // 刷新屏外图形缓冲
- flushGraphics();
- }
- private void checkBounds(Sprite sprite, boolean wrap) {
- // 检查精灵是否到达边界,如有必要,折返或停止精灵
- if (wrap) {
- // Wrap the sprite around the edges of the screen
- if (sprite.getX() < -sprite.getWidth())
- sprite.setPosition(getWidth(), sprite.getY());
- else if (sprite.getX() > getWidth())
- sprite.setPosition(-sprite.getWidth(), sprite.getY());
- if (sprite.getY() < -sprite.getHeight())
- sprite.setPosition(sprite.getX(), getHeight());
- else if (sprite.getY() > getHeight())
- sprite.setPosition(sprite.getX(), -sprite.getHeight());
- }
- else {
-
- if (sprite.getX() < 0)
- sprite.setPosition(0, sprite.getY());
- else if (sprite.getX() > (getWidth() - sprite.getWidth()))
- sprite.setPosition(getWidth() - sprite.getWidth(), sprite.getY());
- if (sprite.getY() < 0)
- sprite.setPosition(sprite.getX(), 0);
- else if (sprite.getY() > (getHeight() - sprite.getHeight()))
- sprite.setPosition(sprite.getX(), getHeight() - sprite.getHeight());
- }
- }
- }
- 2、HenwayMIDlet.java
- import javax.microedition.midlet.*;
- import javax.microedition.lcdui.*;
- public class HenwayMIDlet extends MIDlet implements CommandListener {
- private HCanvas canvas;
-
- public void startApp() {
- if (canvas == null) {
- canvas = new HCanvas(Display.getDisplay(this));
- Command exitCommand = new Command("Exit", Command.EXIT, 0);
- canvas.addCommand(exitCommand);
- canvas.setCommandListener(this);
- }
-
- // Start up the canvas
- canvas.start();
- }
-
- public void pauseApp() {}
-
- public void destroyApp(boolean unconditional) {
- canvas.stop();
- }
- public void commandAction(Command c, Displayable s) {
- if (c.getCommandType() == Command.EXIT) {
- destroyApp(true);
- notifyDestroyed();
- }
- }
- }
-
复制代码
源码下载:http://203.93.208.26/kj/cwb/dir7/Henway2.zip |
|