|
02. サウンドを鳴らす |
|
ezplus版は早速サウンド再生です。
なぜかと言うとMIDP互換なので標準描画はJ-PHONEと共通です。
ですから描画関連はJ-PHONEの方をご覧ください。(^^;手抜きとも言う。
音楽再生はMIDPでは実装されていませんので
J-PHONEもauも独自拡張となっています。
しかしJ-PHONEの方は音声を重ねた多重再生も出来ますが
auの方は単独再生しかできません。
auで再生する音楽形式はいくつかあります。
C-MIDI形式が標準です。
しかしC-MIDIにも種類があります。
C-MIDI3.0:16和音+ボイス+アニメ+テキスト+下位互換
C-MIDI2.0:16和音+PNG+テキスト+下位互換
C-MIDI1.0:3和音
ezplusが実行可能な機種はC-MIDI2.0以上ですので
C-MIDI2.0にあわせて開発すれば全機種対応になります。
/*=============================================================================
sample2 サウンド再生
-----------------------------------------------------------------------------*/
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import com.kddi.media.*;//KDDI拡張命令を使います
/*=============================================================================
メインクラス
-----------------------------------------------------------------------------*/
public class sample2 extends MIDlet
{
/*========== アプリの開始 ==========*/
public void startApp() {
sample2Canvas canvas=new sample2Canvas();
Display.getDisplay(this).setCurrent(canvas);
//スレッド
Thread thread=new Thread(canvas);
thread.start();
}
/*========== アプリの一時停止 ==========*/
public void pauseApp() {
}
/*========== アプリの終了 ==========*/
public void destroyApp(boolean unconditional) {
}
}
/*=============================================================================
キャンバスクラス
-----------------------------------------------------------------------------*/
final class sample2Canvas extends Canvas
implements Runnable,MediaEventListener//イベントリスナ受け付ける為
{
MediaPlayerBox player = null;//この二つが必要
MediaResource resource = null;
public void run() {
while (true) {
repaint();
try {
Thread.sleep(100);
}catch (Exception e) {
}
}
}
/*=========================================================================
コンストラクタ
-------------------------------------------------------------------------*/
sample2Canvas()
{
//再生するデータを指定します。
resource = new MediaResource("resource:///sample.pmd");
//再生するモードを指定します。
player = new MediaPlayerBox(MediaPlayerBox.BACKGROUND);
//プレイヤーにファイルを関連付けます。
player.setResource(resource);
//イベントリスナに登録します。
player.addMediaEventListener(this);
//再生します。
player.play();
}
/*=========================================================================
描画
-------------------------------------------------------------------------*/
public void paint(Graphics g)
{
g.drawString("音楽再生サンプル",getWidth()/2,getHeight()/2,g.HCENTER|g.TOP);
}
/*=========================================================================
イベントリスナの通知をここで受ける
-------------------------------------------------------------------------*/
public void stateChanged(MediaPlayerBox source,int type,int option)
{
if(type==MediaPlayerBox.STOP){//音楽が止まるとここにくる。
player.play();//再度再生
}
}
}
イベントリスナとはWindwosで言うメッセージみたいなものです。
(Windowsを知らない人に説明すると,何か起こった事を知らせてくれる仕組みのことです)
受け取るクラスのの宣言時にimplementsをしています。
ここにMediaEventListenerを追加することによりこのイベントを
受け取ることが出来るようになります。