オープンアプリ・ゲームコンテスト
コンテスト概要 応募方法 応募作で遊ぼう アプリ開発講座 Special Special

アプリ開発講座

講座スケジュール
第1回 オープンアプリ(Java)とJava実行環境
line
第2回 はじめてのオープンアプリ(Java)の作成
line
第3回 イメージの描画
line
第4回 キー入力の処理
line
第5回 オープンアプリ(Java)への移植
line
第6回 ゲームの作成
line第7回 端末へのデータ保存
line第8回 サウンドの再生
line
第9回 バイブレーションとブラウザ起動
line 最終回 HTTPによる通信
line

開発講座TOPへ



講師プロフィール
株式会社ユビキタスエンターテインメント 布留川英一

1999年のJavaMEの仕様公開を期に「JAVA PRESS(技術評論社)」にてライターとしての活動をはじめ、2000年の503iシリーズの発売を期にドワンゴへ移り、携帯アプリの研究開発を行う。2005年に独立し、ユビキタスエンターテインメントにて次世代コンテンツを作成中。
【著書】
MIDP 2.0 携帯Javaアプリ開発ハンドブック
iアプリゲーム開発テキストブック
ActionScript 3.0 ゲームプログラミングブック
他6冊

 

 

第8回 
サウンドの再生


第8回の今回は、サウンドの再生について解説します。前回作成した弾幕避けゲームにBGMとSEを追加します。
[サンプルプログラムのダウンロード]

プログラムは、次の2つのクラスで構成されています。

  • DanmakuGameクラス(DanmakuGameEx.java)
  • DanmakuCanvasクラス(DanmakuCanvas.java)

プロジェクト名「DanmakuGame3」とクラス名「DanmakuGame」でプロジェクトを作成してください。

サウンドファイルの準備

今回使用するサウンドファイルは次の2つです。プロジェクトのresフォルダに置いてください。

  • bgm.mid
  • se.wav

オープンアプリ(Java)で利用できるサウンドのファイル形式は「MIDI(audio/midi)」と「WAVE(audio/x-wav)」と「Tone Sequence (audio/x-tone-seq)」です。また、同時再生可能な数は、MIDIとWAVEは4つまで、Tone Sequenceは同時に1つまで、同時生成数は最大64個となっています。

サウンドファイルの読み込み

DanmakuCanvasクラスに追加したサウンドファイルの読み込み部分は次の通りです。

DanmakuCanvas.javaの一部
        InputStream in;
        try {
            //MIDI
            in=getClass().getResourceAsStream("/bgm.mid");
            player[0]=Manager.createPlayer(in,"audio/midi");
            player[0].setLoopCount(-1);
            player[0].prefetch();

            //WAVE
            in=getClass().getResourceAsStream("/se.wav");
            player[1]=Manager.createPlayer(in,"audio/x-wav");
            player[1].prefetch();
        } catch (Exception e) {
            System.out.println(e.toString());
        }

JARファイルに含まれているファイルを読み込むには、入力ストリームを使います。入力ストリームを開くには、ClassクラスのgetResourceAsStream()メソッドを使います。

[Classクラス]
InputStream getResourceAsStream(name)
source 読み込み先:String型
戻り値 InputStreamオブジェクト:InputStream型
リソースを読み込む。

読み込み先は「/ファイル名」の書式で指定します。

次に「javax.microedition.media.Player」クラスを使います。createPlayer()メソッドでPlayerオブジェクトを生成して下さい。

[Playerクラス]
static Player createPlayer(stream,type)
in 入力ストリーム:InputStream型
type コンテントタイプ:String型
Playerオブジェクトを生成する。

引数のコンテントタイプにはMIDIファイルを再生するには"audio/midi"、WAVEファイルを再生するには"audio/x-wav"を指定します。

Playerオブジェクトには

  • UNREALIZED - 初期状態
  • REALIZED - サウンドデータ取得に必要な情報保持
  • PREFETCHED - 再生準備完了
  • STARTED - 再生中
  • CLOSED - 破棄状態

の5つの状態があります。


「UNREALIZED状態」を「REALIZED状態」に遷移させるにはrealize()メソッド、「REALIZED状態」を「PREFETCHED状態」に遷移させるにはprefetch()メソッドを使います。

入力ストリームを渡したPlayerオブジェクトは、サウンドデータ取得に必要な情報を持っているので「REALIZED状態」です。そこで、prefetch()メソッドを呼んで「PREFETCHED状態」に遷移させます。

[Playerクラス]
void prefetch()
PREFETCHED状態へ遷移。

サウンドのループ回数を指定するにはsetLoopCount()メソッドを使います。

[Playerクラス]
void setLoopCount(count)
count ループ回数:int型
ループ回数を指定する。

ループ回数に-1を指定すると無限ループします。0は指定できません。「STARTED状態」「CLOSED状態」の時に呼ぶと例外を投げます。

サウンドの再生

DanmakuCanvasクラスに追加したサウンドを再生する部分は次の通りです。

DanmakuCanvas.javaの一部
    //サウンドの再生【追加】
    private void playSound(int idx) {
        try {
            player[idx].setMediaTime(0);
            player[idx].start();
        } catch (Exception e) {
        }
    }

サウンドの再生開始位置を指定するにはsetMediaTime()メソッドを使います。

[Playerクラス]
long setMediaTime(now)
now 再生開始位置(ミリ秒):long型
戻り値 実際の再生位置(ミリ秒):long型
サウンド停止。

サウンドファイルを再生させるにはstart()メソッドを呼びます。

[Playerクラス]
void start()
サウンド再生。

今回は使ってませんが、プレイヤーを破棄してメモリ解放するにはclose()メソッドを呼びます。

[Playerクラス]
void close()
メモリ解放する。

サウンドの停止

サウンドファイルを再生させるにはstart()メソッド、停止させるにはstop()メソッドを呼びます。

[Playerクラス]
void stop()
サウンド停止。

DanmakuCanvasクラスに追加したサウンドを停止する部分は次の通りです。

DanmakuCanvas.javaの一部
    //サウンドの停止【追加】
    private void stopSound(int idx) {
        try {
            player[idx].stop();
        } catch (Exception e) {
        }
    }

おわりに

今回はこれでおしまいです。次回は「バイブレーションとブラウザ起動」について解説します。



ページ先頭へ


  Copyright(C) Spicysoft Corporation All rights reserved.
 
アプリゲット