1.開発の準備
(8)ソフトキーとサウンド
//クラスライブラリの組み込み
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.midlet.*;
import javax.microedition.media.*;
import java.io.*;
///////////////////////////////////////////////////////////////////////// オープンアプリの起動クラス
public class GameSamp03 extends MIDlet implements CommandListener{
Command cmd1 = new Command("再生",Command.EXIT,0); //左ソフトキーの定義
Command cmd2 = new Command("停止",Command.EXIT,0); //左ソフトキーの定義
Command cmd3 = new Command("SE",Command.EXIT,0); //右ソフトキーの定義
Byoga b;
public GameSamp03() {
b = new Byoga();
b.addCommand(cmd1); //左ソフトキーの追加
b.addCommand(cmd3); //右ソフトキーの追加
b.setCommandListener(this); //ソフトキーのイベント指定
Display.getDisplay(this).setCurrent(b);
Thread th = new Thread(b);
th.start();
}
public void startApp(){}
public void pauseApp(){}
public void destroyApp(boolean flag){}
////////// ソフトキーのイベント処理
public void commandAction(Command c,Displayable disp){
if(c==cmd1){
Byoga.soundFlg=1; //MIDI再生
//メニューを停止に変更
b.removeCommand(cmd1); //すでにあるソフトキーを一旦削除
b.removeCommand(cmd3);
b.addCommand(cmd2); //再びソフトキーを追加
b.addCommand(cmd3);
}
if(c==cmd2){
Byoga.soundFlg=2; //MIDI停止
//メニューを再生に変更
b.removeCommand(cmd2);
b.removeCommand(cmd3);
b.addCommand(cmd1);
b.addCommand(cmd3);
}
if(c==cmd3)Byoga.soundFlg=3; //SE再生
}
}
//////////////////////////////////////////////////////////////////////// 画面描画に関するクラス
class Byoga extends GameCanvas implements Runnable {
public static int soundFlg; //サウンドフラグ
public void run() {
Graphics g=getGraphics(); //Graphicsオブジェクト
InputStream in; //サウンドファイルの読み込み用
Player[] player=new Player[2]; //サウンド生成プレイヤー
soundFlg=0;
try {
//MIDIの準備
in=getClass().getResourceAsStream("/bgm.mid");
player[0]=Manager.createPlayer(in,"audio/midi");
player[0].setLoopCount(-1); //再生回数。-1は無限再生
player[0].prefetch();
//WAVEの準備
in=getClass().getResourceAsStream("/se.wav");
player[1]=Manager.createPlayer(in,"audio/x-wav");
player[1].prefetch();
} catch (Exception e) {}
while(true){
switch(soundFlg){
case 1: //MIDI再生
try {
player[0].start();
} catch (Exception e) {}
soundFlg=0;
break;
case 2: //MIDI停止
try {
player[0].stop();
} catch (Exception e) {}
soundFlg=0;
break;
case 3: //WAVE再生
try {
player[1].start();
} catch (Exception e) {}
soundFlg=0;
break;
}
flushGraphics(); //画面再描画
try{Thread.sleep(10);} //10ミリ秒停止
catch (Exception e) {}
}
}
/////////////////////////////////////////////////////////////////////// その他の処理
//コンストラクタ(通常はこのまま)
Byoga() {
super(false);
}
}