import javax.microedition.lcdui.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;
//ビープ音を鳴らす(キャンバス)
public class ToneCanvas extends Canvas {
static final int NOTE[]={//鍵盤(0:白,1:黒)
0,1,0,1,0,0,1,0,1,0,1,0,0};
int notePos;//鍵盤位置
Player player; //プレイヤー
//コンストラクタ
ToneCanvas() {
//シーケンス
byte[] sequence=new byte[]{
ToneControl.VERSION,1, //バージョン
ToneControl.TEMPO,22, //テンポ
60,16,62,16,64,16,65,16,64,16,62,16,60,16,//ドレミファミレド
ToneControl.SILENCE,16,
64,16,65,16,67,16,69,16,67,16,65,16,64,16,//ミファソラソファミ
ToneControl.SILENCE,16};
try {
//トーンシーケンスを使ったプレイヤーの生成
player=Manager.createPlayer(
Manager.TONE_DEVICE_LOCATOR);
player.realize();
ToneControl tc=(ToneControl)
player.getControl("ToneControl");
tc.setSequence(sequence);
} catch (Exception e) {
e.printStackTrace();
}
}
//描画
public void paint(Graphics g) {
int x;
//背景描画
g.setColor(255,255,255);
g.fillRect(0,0,getWidth(),getHeight());
//ピアノ描画
x=0;
g.setColor(0,0,0);
for (int i=0;i<NOTE.length;i++) {
if (NOTE[i]==0) {
x+=16;
g.drawRect(x-8,16,16,100);
} else {
g.fillRect(x+3,16,10,70);
}
}
//カーソル描画
x=0;
g.setColor(255,100,255);
for (int i=0;i<NOTE.length;i++) {
if (NOTE[i]==0) {
x+=16;
if (i==notePos) g.fillArc(x-8+8-5,103,10,10,0,360);
} else {
if (i==notePos) g.fillArc(x+3,73,10,10,0,360);
}
}
//文字列描画
g.setColor(0,0,0);
g.drawString("*キー:オート",8,120,g.LEFT|g.TOP);
}
//キーイベント
protected void keyPressed(int keyCode) {
switch (getGameAction(keyCode)) {
//左
case LEFT:
if (notePos>0) notePos--;
repaint();
break;
//右
case RIGHT:
if (notePos<12) notePos++;
repaint();
break;
//トーン再生
case FIRE:
try {
Manager.playTone(notePos+60,100,100);
} catch (Exception e) {
}
break;
}
//トーンシーケンス再生
if (keyCode==KEY_STAR) {
try {
player.setMediaTime(0);
player.start();
} catch (Exception e) {
}
}
}
}
|