Unofficial
"CLDC 1.1
+ MIDP 2.0"
API Reference.
(日本語版)

パッケージ javax.microedition.media

MIDP 2.0 メディア API は、モバイル・メディア API(JSR-135)仕様の直接のビルディング・ブロック(部分構造)互換です。

参照先:
          説明

インタフェースの概要
Control Control オブジェクトは、いくつかのメディア処理機能を制御するために使用します。
Controllable ControllablePlayer のようなオブジェクトから Control を入手するためのインタフェースを提供します。
Player Player は時間ベースのメディア・データのレンダリングを制御します。
PlayerListener PlayerListenerPlayer で発生した非同期イベントを受け取るためのインタフェースです。
 

クラスの概要
Manager Manager は、マルチメディア処理のための Player といった、システム依存のリソースへのアクセス・ポイントです。
 

例外の概要
MediaException MediaException はメソッドで予期していないエラー状況が起こったことを示します。
 

パッケージ javax.microedition.media の説明

MIDP 2.0 メディア API は、モバイル・メディア API(JSR-135)仕様の直接のビルディング・ブロック(部分構造)互換です。 このビルディング・ブロックの使用は、完全なマルチメディア API への上方互換性(=下位互換性)を維持したまま、仕様にサウンドのサポートを含むことを目指す J2METM プロファイルのために意図されたものです。 そのような仕様の例は MIDP 2.0(JSR-118)です。 J2METM 適用範囲のデバイスを横断する同じ方針の API を用い、これら2つの操作を共通の API で、サウンドおよびマルチメディア・コンテンツの作成をシームレスに開発可能にします。

はじめに

J2METM デバイスは高度なオーディオとビデオ・レンダリング能力がある PDA や Web タブレットからシンプルな音源を持つ携帯電話にまで及びます。 様々な構成とマルチメディア処理能力に順応するために API には高い抽象度が求められます。 MMAPI Expert Group の作業目標は、この広い応用分野を扱うことであり、作業の結果2つの API セットの提案をしました:

前者の API は、例えばパワフルな携帯電話、PDA およびセットトップ・ボックスを含む、高度なサウンドとマルチメディア能力を備えた J2METM デバイスのためを意図しています。 後者の API は、マルチメディア API の直接の互換性を持つサブセットであり、大量販売用のモバイル機器のようにリソースに制約のあるデバイスを意図しています。 その上、サウンドのサポートを必要とするその他の J2METM プロファイルにこのサブセット API を採用することができます。 以下では、背景のより詳細な説明とビルディング・ブロック API の要求事項を挙げます。

メディア API の背景

J2METM デバイスによってはリソースに大きな制約があります。 デバイスが最大限のマルチメディア・タイプをサポートすることは、いくつかの携帯電話におけるビデオのように不可能かもしれません。 このため、全てのデバイスが、カスタム・プロトコルと Content Type のサポートする拡張性などのような、マルチメディア API の完全な汎用性をサポートすることが必要というわけではありません。

提案されたビルディング・ブロック・サブセット API は、上記の制約条件を満たすように設計されています。 この提案されたビルディング・ブロックは MIDP 2.0 Expert Group による要求事項一式を履行します。 これらの要求事項は:

このサブセットは以下の点で完全なモバイル・メディア API と異なります:

MIDP 2.0 で使用するビルディング・ブロックのサブセットは完全なモバイル・メディア API の真部分集合であり、完全に上方互換性があることに注目することが大切です。 完全なモバイル・メディア API の機能性を得るために、MIDP 2.0 に1つ要求されるのは、その API からの追加クラスとメソッドを実装するだけである必要があります。

基本概念

提案されたオーディオ・ビルディング・ブロック・システムは3つのメイン・パーツからなります。

Manager はオーディオ・リソースの最上位コントローラです。 アプリケーションは Player の要求およびサポートする Content Type およびプロトコルのプロパティの問い合わせのために Manager を使用します。 また、マネージャは単純な音を演奏するメソッドを含みます。

Player はマルチメディア・コンテンツの再生を行います。 アプリケーションはロケータ文字列を Manager に与えることによって Player を入手します。

ControlPlayer が持っているかもしれない全ての異なる制御を実装するために使用するインタフェースです。 アプリケーションは、それがサポートする制御について Player に問い合わせを行い、次に特定の Control、例えばボリュームをコントロールする VolumeControl を求めることができます。

API の詳細

createPlayer メソッドは API への最上位エントリポイントです:

Player Manager.createPlayer(String url)

url はデータの内容とプロトコルを完全に指定します。

<protocol>:<content location>

ManagerURL を解析し、データのプレゼンテーションをハンドリングするために Content Type を認識し、Player を作成します。 アプリケーションが使用するための Player を結果として返します。 createPlayer によって作成された接続は、Generic Connection フレームワークの規則と方針に従います。

Player はデータ・フローとプレゼンテーションを制御する一般的なメソッドを提供します。例えば:

Player.realize()
Player.prefetch()
Player.start()

細かい粒度の制御は API の重要な特徴です; このため、各 Player は併せて getControlsgetControl メソッドをタイプ特有の制御のために提供します。

Control[] Player.getControls()
Control Player.getControl(int controlType)

異なるタイプのメディアが対応する Player は異なるタイプのコントロールを提供するため、getControlsgetControl メソッドは特定のメディア・タイプに特有のフィーチャを提供することができます。

音源

ゲームと他のオーディオ・アプリケーションにとって、音源は重要です。 非常に小さなデバイスでは、その能力がサポートする唯一のマルチメディア表現である傾向があるため、それは特に重要です。 最も簡単な表現では、音源は単一のブザーか何らかの簡単なモノラル音源にまで限定されます。 Manager クラスは、この単純表現の単音音源を扱う最上位メソッドを提供します:

Manager.playTone(int note, int duration, int volume)

実装は、最も早く反応する音波生成を行うために、音源ハードウェア・デバイスを直接割り当てることができます。

またさらに、API はトーン・シーケンスを編成するために Player の特定のタイプを作成する手段を提供します。

Player p = Manager.createPlayer(Manager.TONE_DEVICE_LOCATOR)

作成された Player は、トーン・シーケンスをプログラムするために使用できる Control の特別なタイプである ToneControl を提供します。 これは多少パワフルなデバイスのためにより高度なアプリケーションを書くことを可能にします。

用法シナリオ

このセクションでは、私達が4つの共通するシナリオでどのように API を使用することができるかをデモンストレーションします。

シナリオ1:単音生成

try {
    Manager.playTone(ToneControl.C4, 5000 /* ms */, 100 /* 最大音量 */);
} catch (MediaException e) { }

シナリオ2:ループのある簡単なメディア再生

MIDP 2.0 では、デバイスがサンプリング・オーディオをサポートする場合に限り、wav フォーマットが不可欠である点に注目してください。

try {
    Player p = Manager.createPlayer("http://webserver/music.wav");
    p.setLoopCount(5);
    p.start();
} catch (IOException ioe) {
} catch (MediaException me) { }

シナリオ3: JAR に格納されたメディアの再生

MIDP 2.0 では、デバイスがサンプリング・オーディオをサポートする場合に限り、wav フォーマットが不可欠である点に注目してください。

try {
    InputStream is = getClass().getResourceAsStream("music.wav");
    Player p = Manager.createPlayer(is, "audio/X-wav");
    p.start();
} catch (IOException ioe) {
} catch (MediaException me) { }

シナリオ4:トーン・シーケンスの生成

/**
 * "メリーさんの羊"は、"ABAC"構造です。
 * "A"セクションのブロック・リピートを使用します。
 */
byte tempo = 30; // テンポ 120
byte d = 8;      // 八分音符

byte C4 = ToneControl.C4; // (ト音記号オクターブ4ド)
byte D4 = (byte)(C4 + 2); // (ト音記号オクターブ4レ)
byte E4 = (byte)(C4 + 4); // (ト音記号オクターブ4ミ)
byte G4 = (byte)(C4 + 7); // (ト音記号オクターブ4ソ)
byte rest = ToneControl.SILENCE; // 休符

byte[] mySequence = {
    ToneControl.VERSION, 1,   // バージョン 1
    ToneControl.TEMPO, tempo, // テンポ設定
    ToneControl.BLOCK_START, 0,   // "A"セクション定義開始
    E4,d, D4,d, C4,d, E4,d,       // "A"セクションの内容
    E4,d, E4,d, E4,d, rest,d,
    ToneControl.BLOCK_END, 0,     // "A"セクション定義終了
    ToneControl.PLAY_BLOCK, 0,    // "A"セクション再生
    D4,d, D4,d, D4,d, rest,d,     // "B"セクション再生
    E4,d, G4,d, G4,d, rest,d,
    ToneControl.PLAY_BLOCK, 0,    // "A"セクション・リピート
    D4,d, D4,d, E4,d, D4,d, C4,d  // "C"セクション再生
};

try{
    Player p = Manager.createPlayer(Manager.TONE_DEVICE_LOCATOR);
    p.realize();
    ToneControl c = (ToneControl)p.getControl("ToneControl");
    c.setSequence(mySequence);
    p.start();
} catch (IOException ioe) {
} catch (MediaException me) { }
導入されたバージョン:
MIDP 2.0


Unofficial
"CLDC 1.1
+ MIDP 2.0"
API Reference.
(日本語版)

公式仕様書原文の著作権表記等(※):

Mobile Information Device Profile Specification ("Specification")
Version: 2.0
Status: FCS
Release: November 5, 2002

Copyright 2002 Sun Microsystems, Inc. and Motorola, Inc.
All rights reserved.
※ただしこの API リファレンスは英語仕様を一語一句正確に翻訳したものではなく、一度私が英語の仕様原文を読んだ上で元の意味と構造をなるべく保つように書き起こしたものです。このため一部は完全に異なる説明となっています。また CLDC 1.1 部分は同仕様の範囲外であるため、まったく参考とはしていません。

※仕様書のライセンス上、問題は無いと考えておりますが、万が一問題があるとお考えの関係者の方がいらっしゃいましたらメールにて連絡をいただけると幸いに存じます(第一言語に日本語、第二言語に英語を希望しますが、返信は基本的に日本語で行います)。

この API リファレンスは仕様書の日本語版という位置づけでは作成していませんし、仕様書ほど厳格でもありません。MUST、SHOULD、MAY などの仕様の条件を強調する文を維持していません(反映すらしていない個所もあります)。仮想マシンおよび MIDP の実装のために使用することは避けてください。そのような用途には必ず公式仕様書原文そのものを用いるべきです。
この API リファレンスに記載されている内容は"さかきけい"が Sun Microsystems, Inc や Motorola, Inc、Java Community Process が公開している各種公式資料を元に、独自に調査・編集したものであり、Sun Microsystems, Inc や Motorola, Inc、Java Community Process 等とは一切関係ありません。したがってこの API リファレンスに関する問い合わせを関係各社等に対して行うことを固く禁じます。
また、記載された内容には既知か否かに関らず誤りが含まれる可能性があり、一切保証はありません。本 API リファレンスを使用した結果、不利益が生じたとしても"さかきけい"は一切の責任を負いません。
許可無く公開/非公開および Internet/Intranet/LAN を問わず他サイトに転載すること、複写および複製すること、ローカル・ファイル等に保存することを禁じます。


Copyright© 2001-2002,2005-2009,2011 by KEI SAKAKI.
ALL RIGHTS RESERVED.
無断転載を禁じます。

Unofficial "CLDC 1.0 + MIDP 1.0" API Reference はこちらです。