Mobile:NEWS |
2003年12月19日 01:39 PM 更新
|
BREW プログラミング入門(9)
音を出してみよう(1/3)
前回はファイルシステムについて解説しました。今回はBREWで音を出す方法を解説します。
前回はファイルシステムについて解説しました。今回はBREWで音を出す方法を解説します。
BREWで再生できるメディア データ
BREW 2.1では、次のような形式のメディア データ (オーディオ、サウンド、動画などのデータ) を再生できます。
- MP3形式
- MIDI形式
- QCP形式 (Qualcomm Pure Voice形式)
- PMD形式 (WebAudio形式)
- MMF形式 (SMAF形式)
- MPEG4形式
- Phrase形式
- AAC形式
しかし、実際にこれらのデータ形式を再生できるかどうかは携帯電話端末の機種に依存しますので、注意してください。端末がサポートしていないデータ形式は、再生することはできません。
音を出すためのインタフェース
BREWで音を出すためには、IMediaインタフェースを使用します。IMediaインタフェースは、MP3やMIDIなどのさまざまなメディア データを再生するためのインタフェースです。
しかし、IMediaインタフェースは、それ自体では各種データ形式の再生機能をもちません。具体的に各種データ形式の再生機能をもつのは、IMediaMP3、IMediaMIDIなどの、"IMedia派生インタフェース" と呼ばれるインタフェースです。
派生インタフェース
"派生インタフェース" について説明しましょう。あるインタフェースIFooとIFooBarがあって、IFooのすべてのインタフェース関数を IFooBarが持ち合わせているとき、IFooBarはIFooの派生インタフェースであるといいます。
※正確には、同じ関数をもつだけでだけでなく、同じ関数の並び順をもつ必要があるのですが、今回はあまり深くは立ち入らないことにします。
この説明では抽象的すぎるので、もう少し具体例をあげましょう。これまでBREWのインタフェースがいくつか出てきましたね。IShell、IDisplay、IGraphics、IFileなどなど。これらのインタフェースは、必ず AddRef(), Release() というインタフェース関数をもつことも学びました。
ここで「BREW APIリファレンス」を開いて、IBaseインタフェースという項目を調べてみてください。このインタフェースは、IBASE_AddRef(), IBASE_Release() という2つだけの関数をもつのが分かります。
つまり、これまで説明してきたBREWのインタフェースは、「IBaseインタフェースの派生インタフェースである」といえるのです。
※IBaseインタフェースは何に使うの?と疑問をもった方がおられるでしょう。あんまり深く考えないでください。IBaseは何の役にも立ちません。これは審美的な理由で存在する飾りのようなものです。BREWプログラミングに熟達すれば、利用方法が見つかるかも知れませんが……
IMediaMP3の例
例えば、MP3の音声ファイルを再生するためのインタフェースであるIMediaMP3は、IMediaインタフェースとまったく同じ関数をもちます。「BREW APIリファレンス」で、IMediaMP3インタフェースを調べてみますと、次のように記述があります。
このインタフェースはMP3形式の再生を処理します。
この形式のインタフェースに関連付けられた関数はありません。 |
|
これは、IMediaMP3インタフェースがインタフェース関数をまったくもたないという意味ではありません(もしそうだとしたら、そんなインタフェースに何の価値があるんだ?)。IMediaMP3はIMediaと同じインタフェース関数をもちますが、それに加えて新たな関数はもたない、という意味です。
ですから、IMediaMP3インタフェースでは、次のようなコードを書くことができます。IMEDIA_GetVolume() は、IMediaインタフェースの関数であり、IMediaMP3 インタフェースの関数ではありませんが、IMediaMP3 は IMedia の派生インタフェースですので、このような記述をすることができます。
IMedia* media;
IMediaMP3* mp3;
uint16 volume;
ISHELL_CreateInstance(shell, AEECLAID_MEDIAMP3, &mp3);
IMEDIA_GetVolume(mp3, &volume);
media = (IMedia*) mp3; // IMediaMP3 を IMedia にキャストしてもよい。
IMEDIA_Release((IMedia*) mp3);
IBASE_Release((IBase*) mp3); // ちなみにこんなコードを書いてもOK |
|
[倉谷智尋, ITmedia]
Copyright © ITmedia, Inc. All Rights Reserved.
前のページ | 1/3 | 次のページ