Java ルーキーでも大丈夫!

勝手に作ろう!
第 iアプリで iメロディーを奏でよう！

4 回

木寺祥友 + 株式会社エル・カミノ・リアル
www.ecreal.co.jp

音楽を使う際のポイントはデータ形式と機種依存
今月はi アプリで音楽を奏でる方法につい次に注意すべきは、DoJa はi メロディーをて解説する。これを使えばアクションやイベ再生できないという点だ。先ほどiメロディーントに対応して音楽を使えるため、単なるウを用意しようと書いたが、DoJa でi アプリをェブブラウジングでは実現できないアプリケー

事前にテストする場合は、音楽データはMIDIションならではの表現ができるはずだ。

形式でなくてはならない。それに合わせてソ実際にソースをどのように記述するかなどースも書き直して、コンパイルしておこう。のくわしい説明は解説のなかで述べるとして、注意点の3つ目は機種依存だ。端末によっ

ここではiアプリで音楽を扱ううえでの注意点ては指定したパートの音楽に対応していないを挙げておこう。

ため、思ったとおりの音色が出ない可能性がまず1つ目は音楽のデータ形式だ。iアプリ
ではi メロディーというi アプリ専用の音楽デある。実際に作成してから自分の端末などで確認してもらいたい。

ータ形式しか使えない。そのためiメロディー以上のことを注意すれば、音楽を奏でるこの作成は、下で解説している「PS-PLAYER」と自体はさほど難しいことではない。解説をなどの変換ソフトを利用する必要がある。

読んだうえでチャレンジしてみよう。

P S - P L A Y E R で i メロディーに変 換 しよう

PS-PLAYER
www.asahi-net.or.jp/~wj3a-fji/phs/program/
ここでiメロディーを作成するうえで便利なフリーウェアソフト「PS-PLAYER」を紹介しよう。
このソフトはNTT ドコモやJ-フォンなど各社の携帯やPHS用の着メロデータを読み込んでパソコン上で再生できるオーディオプレイヤーで、MIDIから各着メロデータに変換できるコンバーター機能が付いている。これを使えばMIDI からi メロディーを簡単に作成できる。また、このソフトは単純に変換するたけでなく次のような機能が使えるのが便利だ。

286 INTERNET magazine 2001/10

1 開始位置と終了位置とを指定することで部分的な変換ができるため、ファイルサイズを自分でコントロールできる。
2 先頭に休符があるMIDI ファイルでも、先頭休符をカットして変換できるため音の頭が無音にならない。

フリーなうえに185K バイトと軽量で気軽に使える。さっそく「今月のオマケ！」にあるカップメンタイマーの音楽をカスタマイズするのに使ってみてはいかがだろうか。

インターネットマガジン／株式会社インプレスR&D

ブラウジング：データファイルの中身を読んでいくこと。ウェブページのハイパーリンクをとおして、次々とページを開いてデータを読んでいくときなどに使われる。

©1994-2007 Impress R&D

i メロディーを再生するプレイヤーを用意しよう
iメロディーを奏でるうえで主役となるのがAudioPresenterクラスとMediaSoundクラスだ。ここのソースは一見難しそうだが、それぞれのクラスの機能を具体的なものに置き換えて考えれば、それほど難しくはないだろう。
TopFrm.java
41// 変数42

private ButtonbtnOpn;// オープニングボタン

43

private Button

btnPro;■ AudioPresenter と MediaSound のイメージ【41-45 行目】// プロフィールボタン

44

private AudioPresenteraudio;// AudioPresenter

45

private MediaSoundsound;// サウンドデータ

ここでは、iメロディーに関連するAudioPresenterクラスとMediaSound

46

クラスをTopFrm クラス全体の変数として定義している。これらのクラス

47/**の関係は、下のように音楽CDをCDプレイヤーの関係にたとえられる。

48* 初期化を行うコンストラクタ

AudioPresenter ・・・＞

CDプレイヤー49*/MediaSound

音楽CD

50

public TopFrm()

この関係を頭に入れたうえで以下の解説を読めば理解しやすいだろう。具

51{

体的なi メロディーを演奏させる手順は、TopFrm.java の124 行目から52・・・＞

136行目までの部分になる。それぞれの手順を見ていこう。
（中略）■プレイヤーを準備する【126 行目】
最初の手順では、AudioPresenter クラスのgetAudioPresenter メソッ

121// サウンドの準備ドを使ってAudioPresenter（のインスタンス）を準備している。これは、

122

try

CDプレイヤーの電源を入れているようなものだ。

123{// --- Sound を AudioPresenter に設定し、124再生できるようにする ---■音源を用意する【130 行目】
次の手順は、MediaManager クラスのgetSound メソッドを使ってMediaSound クラス（のインスタンス）を準備している。これは、音楽CDをCDラックから取り出しているようなものだ。このMyIntroでは、iメロディーのデータをいったんスクラッチパッドにダウンロードしてから使っているため、getSoundの引数にスクラッチパッド内のiメロディーの位置を指定している。もちろんリソースファイル名やネット上にあるファイルを直接指定することもできる。

■音源を使用可能する【132 行目】
次の手順はMediaSound クラスのuse メソッドを使って音源を使用可能

125// オーディオ制御を行えるようにする

126audio = AudioPresenter.getAudioPresenter();127// メディアリスナを登録する

128

audio.setMediaListener( this );129// サウンドをリソースから読み込む

130sound = MediaManager.getSound131// サウンドを使用可能にする

132

sound.use();( "scratchpad:///0;pos=" + pMd );133// サウンドをオーディオプレゼンターに設定する

134

audio.setSound( sound );な状態にしている。音楽CD をケースから取り出すといった感じだ。余計135// サウンドの再生な手順と感じるかもしれないが、iメロディーを使うには必要な手順だ。忘136

audio.play();

れないようにしよう。

137

}

138

catch( Exception e )■演奏を開始する【134 行目】

139{

次の手順は、AudioPresenter クラスのsetSound メソッドを使って

140

MyIntro.dlg( Dialog.DIALOG_ERROR, "エラー", "サウンAudioPresenter にMediaSound をセットしている。これはプレイヤーに音楽CDを入れているようなものだ。

ドの設定に失敗しました。" );
141}

142

■演奏を開始する【136 行目】

143}

実際のCDプレイヤーでは再生ボタンを押すと音楽が流れるが、iアプリの再生ボタンを押す行為に当たるのがAudioPresenter のplay メソッドだ。
これによってiメロディーが奏でられるのだ。

■：変数名■：コメント ■：外部ファイル名やカスタマイズ可能なところ

インターネットマガジン／株式会社インプレスR&D

スクラッチパッド（ScratchPad）：携帯電話上にアプリケーションで使用するデータを保存する記憶領域。電源が切られても、そのデータは保持される。記憶領域は各アプリごとに割り当てられる。
©1994-2007 Impress R&D

INTERNET magazine 2001/10287

勝手に作ろう!

iアプリ

i メロディーをループで再生させよう
前のページで説明した方法では、iメロディーの演奏が1回終了するとそのまま終了してしまう。もしiメロディーを繰り返して演奏させたい場合には、ループの仕掛けが必要だ。ここではメディアリスナーを使ってループさせる方法を解説しよう。

TopFrm.java
13 /**
14 * トップパネル
15 */16 class TopFrm extends Panel implements SoftKeyListener,ComponentListener, MediaListener
17 {
（中略）

145
146
147
148
149

■メディアリスナー/*** ソフトキーが押された時に呼ばれる*/
public void softKeyPressed( int softKey ){メディアリスナーとは、前月号で紹介したイベント（中略）リスナーの1つでマルチメディア関係のイベントが発生したときに処理をする。ループ再生を行う具体的ソッドに知らされるようになる。

156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180

■演奏が終了したら再び再生する【212-222 行目】

181
182
183

な方法としては、「i メロディーの再生が終了した」というイベントが起きた際に、再び再生を指示すればよい。

■ TopFrm に MediaListener 機能を持たせる【16 行目】
クラス宣 言 の部 分 の i m p l e m e n t s 以 降 にM e d i a L i s t e n e r を付 け加 える。 これで、 このTopFrm クラスのmediaActionメソッドでマルチメディア関係のイベントを受け取る準備ができたことになる。

■メディアリスナーを登録する【128 行目（前ページ）】
この部分でaudio から発生したイベントをこのクラス（TopFrm クラス）で受け取るように指定している。これで、「i メロディーの再生が終了した」というイベントがこのTopFrmクラスのmediaActionメi メロディーの演奏が終了すると、mediaAction メソッドにイベントが通知される。
「演奏の終了」を

184
185// ソフトキー２
if ( Frame.SOFT_KEY_2 == softKey ){// 更新// 背景を赤く
setBackground( Graphics.getColorOfName( Graphics.RED ) );// サウンドの破棄
audio.stop();sound.dispose();// データの更新
loadData();readScratch();// パネル準備
MyIntro.iniProF();// サウンドの準備
try{
sound = MediaManager.getSound( "scratchpad:///0;pos=" + pMd );sound.use();audio.setSound( sound );audio.play();}
catch( Exception e ){MyIntro.dlg( Dialog.DIALOG_ERROR, "エラー", "サウンドの設定に失敗しました。" );}// 背景を戻す
setBackground( Graphics.getColorOfRGB( BG_P[ 0 ], BG_P[ 1 ],BG_P[ 2 ] ) );}}表 すイベントには、 引 数 の t y p e に（中略）AudioPresenter.AUDIO̲COMPLETE が設定されているため、if 文を使って、演奏完了の場合に再びplayメソッドで再生を開始している。これで、ループ再生を実現しているのだ。

■：変数名 ■：コメント■：外部ファイル名やカスタマイズ可能なところ

288 INTERNET magazine 2001/10

212
213
214
215
216
217
218
219
220
221
222/*** メディアプレゼンタから通知を受けたときに呼ばれる*/
public void mediaAction( MediaPresenter source, int type,int param ){// 曲をループ再生させるために、play()を呼ぶ
if( type == AudioPresenter.AUDIO_COMPLETE ){audio.play();}}インターネットマガジン／株式会社インプレスR&Dイベントリスナー：プログラミング用語。ある特定のイベントが発生したことを知らせる通知を受けてから動くメソッド。

©1994-2007 Impress R&D

i メロディーを更新するまえに後始末をしよう
新しいCDを聞こうとするとき、それ以前にプレイヤーに入れてい■演奏の停止【163行目】

たCDを取り出す必要がある。これと同じで iメロディーでも新し

ここではCD プレイヤーの停止ボタンを押しているのと同じだ。AudioPresenter

い音楽をダウンロードしようとする場合には、その前に再生してクラスのstopメソッドを使って演奏を停止させている。

いた音楽を片付ける必要がある。曲を変えるときには忘れずに行■音源の破棄【164行目】っておこう。

MediaSound クラスのdispose メソッドを使って、音源を破棄している。音楽
CDをプレイヤーから取り出しているのをイメージすればよい。

今月のオ

マケ!

3 分で完成するオリジナル i アプリ「 オリジナルメロディーのタイマーをつくろう 」
ここでは、ちょっとした変更だけで作れる自分だけの i アプリを紹介していく。
今月は自分で用意した音楽を流せるタイマー「カップメンタイマー」だ。

1 ダウンロードしよう

3 ソースを書き換えよう

2 MIDIデータを用意しよう

まずはカップラーメンタイマーをダウンロードしよう。インターネット
マガジンのサイト内にあるi アプリのコーナーからダウンロードしよう。
internet.impress.co.jp/iappli/

5 DoJaでテストをしよう
それでは実際にDoJa で実行してみよう。用意したMIDI データが再生されたら成功だ。

それではsrc フォルダーにあるP.java のソースを変更しよう。21 行目にある「mld.mld」というファイル名を先ほどRES フォルダーに入れたMIDI データに書き換えればよい。この際、拡張子もMIDI データの.mid にするのを忘れないように。

それでは実際にタイマーで鳴らす音楽をMIDI で用意して、RES フォルダーに入れておこう。この際 MIDI データを入れるのは、 本 文 中 でも触 れたように、DoJaがiメロディーに対応していないので、MIDI でないとテストできないためだ。ちなみにMIDI のサイズはi メロディーにしたとき8084 バイト以内に収まる程度にしておこう。

4 ビルドしよう
ソースを書き換えたらビルドしなおそう。その際、ファイルの属性が「読み取り専用」だとエラーになる。
ビルドする前にはずしておこう。

6 完成!
成功したら、MIDI データをi メロディーデータにコンバートして、先ほどのソースもそれに合わせて書き直そう。これでホームページサーバーを経由して携帯電話にダウンロードすればよい。

もっと知りたいキミにはコレ！
『 今すぐできる i アプリプログラミング』
小社発行 本体価格2,400円
来月なんて待ってられない、もっとくわしくいろいろと知りたい!と思っている君にはコレがオススメ。本連載の木寺氏が執筆しているため、ここで取り上げているiアプリについて、もっとくわしく解説している。一緒に読んでいけば、理解が深まるぞ。

インターネットマガジン／株式会社インプレスR&D

MIDI ：音楽の情報（楽器の種類や音の高さ、長さなど）を電子的に記録する方法を定めた統一規格。MIDI ファイルをブラウザーで聴くには、専用のプラグインソフトが必要だが、最近のブラウザー（IE3.01以上など）には、標準でメディアプレイヤーなどのプラグインソフトが添付されているため、基本的にはそのままでOK。
©1994-2007 Impress R&D

INTERNET magazine 2001/10289

［インターネットマガジン バックナンバーアーカイブ］ ご利用上の注意
この PDF ファイルは、株式会社インプレス R&D（株式会社インプレスから分割）が 1994 年～2006 年まで発行した月刊誌『インターネットマガジン』の誌面を PDF 化し、「インターネットマガジン バックナンバーアーカイブ」として以下のウェブサイト「All-in-One INTERNET magazine 2.0」で公開しているものです。

http://i.impressRD.jp/bn
このファイルをご利用いただくにあたり、下記の注意事項を必ずお読みください。
z 記載されている内容（技術解説、URL、団体・企業名、商品名、価格、プレゼント募集、アンケートなど）は発行当時のものです。
z 収録されている内容は著作権法上の保護を受けています。著作権はそれぞれの記事の著作者（執筆者、写真の撮影者、イラストの作成者、編集部など）が保持しています。
z 著作者から許諾が得られなかった著作物は収録されていない場合があります。
z このファイルやその内容を改変したり、商用を目的として再利用することはできません。あくまで個人や企業の非商用利用での閲覧、複製、送信に限られます。
z 収録されている内容を何らかの媒体に引用としてご利用する際は、出典として媒体名および月号、該当ページ番号、発行元（株式会社インプレス R&D）、コピーライトなどの情報をご明記ください。
z オリジナルの雑誌の発行時点では、株式会社インプレス R&D（当時は株式会社インプレス）と著作権者は内容が正確なものであるように最大限に努めましたが、すべての情報が完全に正確であることは保証できません。このファイルの内容に起因する直接的および間接的な損害に対して、一切の責任を負いません。お客様個人の責任においてご利用ください。

このファイルに関するお問い合わせ先
All-in-One INTERNET magazine 編集部
im-info@impress.co.jp
Copyright © 1994-2007 Impress R&D, an Impress Group company. All rights reserved.