8


Mobile Media API の使用法

JSR 135 「Mobile Media API」 (MMAPI) は、オーディオやビデオなどの時間ベースのメディアの描画や取り込みを行う標準 API です。この API は、さまざまなデバイスでサポートされているメディア形式、プロトコル、および機能に対して柔軟性を持つように設計されています。MMAPI を使用したプログラミングについては、次の記事を参照してください。

http://developers.sun.com/techtopics/mobility/apis/articles/mmapi_overview/
http://developers.sun.com/techtopics/mobility/midp/articles/mmapioverview/


8.1 サポートされている形式とプロトコル

エミュレータの MMAPI 実装では、次のメディア形式がサポートされます。


表 8-1 サポートされている MMAPI メディア形式

MIME タイプ

説明

audio/amr

Adaptive Multi-Rate

audio/midi

MIDI ファイル

audio/sp-midi

Scalable Polyphony MIDI

audio/x-tone-seq

MIDP 2.0 トーンシーケンス

audio/x-wav

WAV PCM サンプリングオーディオ

image/gif

GIF 89a (アニメーション GIF)

video/mpeg

MPEG ビデオ

video/vnd.sun.rgb565

ビデオの取り込み


 


8.2 Adaptive Multi-Rate (AMR) コンテンツ

Sun JavaTM Wireless Toolkit for CLDC では、Adaptive Multi-Rate (AMR) コンテンツ (http://www.ietf.org/rfc/rfc3267.txt) のサポートがシミュレートされます。ツールキットは AMR コンテンツをデコードできませんが、要求時には AMR コンテンツ用のプレーヤーを返します。

8.2.1 Windows

Windows では、AMR ファイルは通常の WAVE ファイルに変換され、Qsound に渡されます。Windows バージョンは 3GPP 実装とやり取りを行うため、AMR ファイルを再生するために必要な操作はありません。

8.2.2 Linux

Linux の AMR サポートは、3GPP AMR Narrow Band (AMR-NB) リファレンス実装のデコーダーと、SOX オーディオプロセッサに基づきます。AMR Wide Band はサポートされません。

8.2.2.1 AMR サポートの有効化

AMR サポートを有効にするには、次の手順に従います。

1. 3GPP から提供されている AMR-NB リファレンス実装を入手します。

利用可能なバージョンがいくつかあります。次のサイトでも入手できます。

http://www.3gpp.org/ftp/Specs/archive/26_series/26.073/26073-530.zip

2. パッケージに含まれている makefile を開きます。

「CFLAGS =」で始まる行を探します。

a. DMMS_IO オプションを追加します。

b. pedantic-errors オプションを削除します。

保存してコンパイルします。問題が発生する場合は、O3 (または O2) 最適化フラグも削除してみてください。バイナリのサイズは約 2 倍になります。

3. リファレンス実装をビルドするには、make VAD=VAD1 と入力します。

コンパイルが完了したら、decoder という名前のバイナリファイルが生成されているはずです。これが AMR-NB デコーダーです。

4. 環境変数 AMR_DECODER に、デコーダーのパスを設定します。

たとえば、デコーダーのパスが ~/amr の場合は、次のように指定します。

export AMR_DECODER=~/amr/decoder

5. decoder ファイルの実行アクセス権を設定します。

デコーダーと同じディレクトリで、次のように入力します。

chmod 555 ./decoder

6. デコーダーを次のようにテストします。

A.13, MobileMediaAPIで説明しているように、MobileMediaAPI デモの Simple Player を実行します。メインメニューから「Simple Player」を選択し、次に「AMR Narrow Band [jar]」を選択します。必ずスピーカーをオンにしてください。

8.2.2.2 AMR 形式のサポート

AMR-NB の複製の一部で問題が発生する場合もあります。AMR-NB コーデックデータには、少なくとも次の 2 つのファイル形式があります。

これは、draft-ietf-avt-rtp-amr-10.txt の Sec. 6.2 で仕様化されています。この形式は、Ericsson AMR 変換ツールに含まれています。ドラフトは、RFC 3267 の初期の形式です。これらのファイルは、Ericsson AMR ツールと Nokia Series 60 の電話機で処理されます。この形式には、#!AMR\n のヘッダーがあり、ビッグエンディアンでエンコードされています。

この形式は、3GPP TS 26.101 の Appendix A で仕様化されています。これらは、3GPP TS 26.104 浮動小数点リファレンスコーデックソースパッケージによりエンコードおよびデコードされます。これらのファイルにはヘッダーがなく、リトルエンディアンでエンコードされます。

これらの形式を相互に変換するには、次の Python スクリプトを使用してください。

http://www.connactivity.com/~eaw/amrwork/amrconv.py


8.3 MediaControlSkin の使用

Sun JavaTM Wireless Toolkit for CLDC には、MediaControlSkin というエミュレータスキンが付属しています。このスキンは主に、マルチメディアの再生と制御に使用されます。このスキンのボタンには、再生、停止、音量増、音量減などのコマンドを表す記号が付いています。MediaControlSkin がどのように役立つかを確認するには、MobileMediaAPI デモアプリケーションで使用してみてください。


8.4 メディアの取り込み

Sun JavaTM Wireless Toolkit for CLDC のエミュレータでは、オーディオとビデオの取り込みがサポートされています。オーディオの取り込みには、エミュレータを実行しているシステムの取り込み機能が使用されます。

ビデオの取り込みには、シミュレートされたカメラ入力が使用されます。

オーディオとビデオの取り込み方法を示す MobileMediaAPI デモアプリケーションで、詳細とソースコードを確認してください。


8.5 正常に動作する MIDlet

MIDlet には、MIDP の仕様で定義されたライフサイクルがあります。MIDlet は、着信などのイベントによって一時停止することもあります。正常に動作する MIDlet は、一時停止したときに重要なデバイスリソースを解放し、MIDlet が再開されたときにこのリソースを再度割り当てるか、再起動します。MMAPI の領域では、MIDlet が一時停止したときに、コンテンツを描画している Player を停止します。

MIDlet を一時停止したときに、実行中の Player が停止されないと、Sun JavaTM Wireless Toolkit for CLDC からコンソールにメッセージが出力されます。この機能は、MobileMediaAPI デモアプリケーションの Pausing Audio Test MIDlet を使用してテストできます。詳細は、付録 Aを参照してください。

実行中のエミュレータごとに、警告メッセージが 1 度だけ出力されます。


8.6 着信音

A.13.1, Simple Tonesおよび A.13.2, Simple Playerで説明するように、MMAPI を使用して着信音を再生できます。複数の着信音の形式が一般的に使用されています。着信音は、ダウンロードまたは自作できます。

8.6.1 着信音のダウンロード

着信音ファイルは、多くのインターネットサイトからダウンロードできます。次に例を示します。

8.6.2 着信音の形式

この節では、いくつかの形式の例を示します。

http://www.convertyourtone.com/rtttl.html

ベートーベンの交響曲第 9 番は、Nokia Composer 形式では次のようになります。

16g1,16g1,16g1,4#d1,16f1,16f1,16f1,4d1,16g1,16g1,16g1,16#d1,

16#g1,16#g1,16#g1,16g1,16#d2,16#d2,16#d2,4c2,16g1,16g1,16g1,

16d1,16#g1,16#g1,16#g1, 16g1,16f2,16f2,16f2,4d2

ベートーベンのメヌエット ト長調は次のようになります。

a b + c b + c b + c b + C p + d a B p + c g A

p f g a g a g a g A p b f G p a e F

ベートーベンの交響曲第 9 番の主題は次のようになります。

f f f # C # d # d # d C p f f f # c # f #f # f f +# c + # c + # c # A ff f c # f # f # f f + # d + # d + # d

ガジェット警部のテーマは次のようになります。

C2(1/8) D2(1/16) Dis2(1/8) F2(1/16) G2(1/8)

P(1/16) Dis2(1/8) P(1/16) Fis2(1/8) P(1/16)

D2(1/8) P(1/16) F2(1/8) P(1/16) Dis2(1/8)

P(1/16) C2(1/8) D2(1/16) Dis2(1/8) F2(1/16)

G2(1/8) P(1/16) C3(1/8) P(1/16) B2(1/2) P(1/4)

C2(1/8) D2(1/16) Dis2(1/8) F2(1/16) G2(1/8) P(1/16)

Dis2(1/8) P(1/16) Fis2(1/8) P(1/16) D2(1/8) P(1/16)

F2(1/8) P(1/16) Dis2(1/8) P(1/16) C3(1/8) B2(1/16)

Ais2(1/8) A2(1/16) Gis2(1/2) G2(1/8) P(1/16) C3(1/2)

ベートーベンの交響曲第 9 番は次のようになります。

4 F2 F2 F2 C#4 D#2 D#2 D#2 C4 R2 F2 F2 F2 C#2 F#2 F#2

F#2 F2 C#+2 C#+2 C#+2 A#4 F2 F2 F2 C2 F#2 F#2 F#2 F2

D#+2 D#+2 D#+2

ベートーベンの交響曲第 9 番は次のようになります。

444** 444** 444** 1111* 4444** 4444** 4444** 111*

0** 444** 444** 444** 1111** 4444** 4444** 4444**

444** 11** 11** 11** 6666* 444** 444** 444** 111**

4444** 4444** 4444** 444** 22** 22** 22**

ベートーベンの交響曲第 9 番は次のようになります。

444****444****444****111#*****444#****444#****444#****

111*****(JD)0000444****444****444****111#****444#****

444#****444#****444****11#****11#****11#****666#*****

444****444****444****111****444#****444#****

444#****444****22#****22#****22#****