第七天 声音

 今天偷个懒, 整理一下声音。

声音是非常重要的。CLDC中声音一样可以为game增色不少,

播放声音使用的是import javax.microedition.media 包中的Player和Manager, 可以很方便的播放多种媒体类型的声音,具体的类型和参数字符串,请查看帮助,和有关说明。需要注意的呢, 控制好开缓存的时机, 因为本身没有同步机制,所以要手写一些同步事件和状态标示。多种类型声音的混用应该没有问题。仅仅测试了一下同步播放tone。

 

大部分代码没有变, 所以只列出更改部分的:

public class BackCanvas extends GameCanvas {

     .....
     public  VoiceCtr Voice_Sore;

.

.

.


protected void keyPressed(int keyCode){
     .......   

   switch (keyCode) {
   case -1:{
    Manager.playTone(69, 1000, 200);
    if (scence.screenY>scence.unitHeight) scence.screenY=scence.screenY-scence.unitHeight; break;
   }

   ..........
    case -5:{
     Voice_Sore = new VoiceCtr(this);Voice_Sore.setPriority(1);Voice_Sore.start();
      ani= new SpeakAni(this);ani.setPriority(1); ani.start(); //过高的线程优先级会导致线程sleep 也优先执行。
   }
在两个按键触发声音播放。

 

新增加的声音播放线程:

import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.media.Player;
import javax.microedition.media.Manager;
import java.io.InputStream;

public class VoiceCtr extends Thread {
 private GameCanvas owner;
 private InputStream is_Sore;
 public Player player;
 
 public VoiceCtr(GameCanvas creater){
  owner=creater;
  is_Sore = getClass().getResourceAsStream("/test.wav");
  if (is_Sore== null) {
   System.out.println("读取文件错误。");}
  try {
   player = Manager.createPlayer(is_Sore,"audio/x-wav");
  }
  catch (Exception e){
   System.out.println("建立播放器错误");
   e.printStackTrace();
  }
 }
 
 public void run(){
  try{
   player.start();
  }
  catch (Exception pe){
   pe.printStackTrace();
  }
 }
}

 

配合一下画面:

import javax.microedition.media.Player;

public class SpeakAni extends Thread {
 private BackCanvas bc;
 private int frameIndex;
 private int maxFrameIndex;
 
 public SpeakAni (BackCanvas creater){
  bc=creater;
  frameIndex=0;
  maxFrameIndex=bc.Sore.getRawFrameCount()-1;
 }
 
 public void  run(){
  boolean saying=true;
  while (saying){
   while (frameIndex<=maxFrameIndex){
    bc.Sore.setFrame(frameIndex);
    frameIndex=frameIndex+1;
    bc.repaint();
    try{
     sleep(50);
     System.out.println("changeing...");
    }
    catch (Exception e)
    {
     ;
    }
   }
   frameIndex=0;
   if (bc.Voice_Sore.player.getState()!=Player.STARTED) saying=false;
  }
 }
}

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值