Mobile:NEWS 2003年12月19日 01:39 PM 更新

BREW プログラミング入門(9)
音を出してみよう(2/3)


前のページ

IMediaQCPの例

 別の例として、QCP形式の音声ファイルを再生するためのインタフェースであるIMediaQCPを「BREW API リファレンス」で調べてみましょう。次のような記述がありますね。

このインタフェースはQCP(PureVoice)形式の再生と記録を処理します。 通常は、このインタフェースのAPIを直接使用する必要はなく、代わりにIMedia APIを使用してください。 このインタフェースのAPIは、そのインタフェースに特有の操作が必要な場合にのみ使用します。 

このインタフェースには以下の関数が含まれます。 
IMEDIAQCP_SetFormat()
IMEDIAQCP_GetFormat()

 これは、IMediaQCPインタフェースでは、IMediaインタフェースが提供するインタフェース関数を使用できますが、それに加えて、IMEDIAQCP_SetFormat() と IMEDIAQCP_GetFormat() という二つの関数も使用できる、という説明です。

 このように、「IMediaから派生したインタフェース」は、IMediaと同じインタフェース関数をもち、それに加えて独自の関数をもつことができます。

インタフェースの階層構造

 インタフェースの派生関係は、すべてのBREWインタフェースの間に存在し、1つの階層構造を形成しています。BREWインタフェースの階層構造については、「BREW APIリファレンスの」の左のメニューから「BREW SDK AEE階層チャート」を選択しますと、見ることができます。

 なぜこのようなややこしい構造になっているのでしょうか。MP3を再生するためのインタフェースも、MIDIを再生するためのインタフェースも、同じインタフェースとして扱えると便利だからです。

 MP3もMIDIも音声データであるということは同じで、ただデータ形式が違うというだけですので、BREW開発者から見れば、再生するための関数は同じであってほしいものです。

 このように、どんなデータ形式の音声ファイルでも統一的にプログラミングできるようにするために、IMediaインタフェースという "抽象的なインタフェース" を定義しています。

 このようなインタフェースの階層構造はC++のようなオブジェクト指向言語と高い親和性をもちますので、C言語でのBREWプログラミングに慣れましたら、C++言語についても学習されるとよいでしょう。

インタフェースの派生は、C++やJavaのクラスの派生と同じものです。BREWのインタフェース関数は、C++やJavaの仮想関数にあたります。

※IMediaのように、それ自体機能をもたず、派生インタフェースで具体的な機能をもたせることを前提としたインタフェースのことを「抽象インタフェース」と呼ぶことがあります。

音声再生の方法

 音声再生の方法にはいくつかありますが、最も簡単な方法として、今回は三通りの方法を解説します。

方法1:IMediaUtil を使用して再生

 BREW 2.1には、簡単にメディアデータを再生するためのIMediaUtil というインタフェースが用意されています。

 このインタフェースは、再生対象のメディアデータが何であるかを自動的に判別し、対応する IMedia 派生インタフェースを作成して返してくれます。

 IMediaUtil を使う場合の再生手順は次のようになります。

  1. ISHELL_CreateInstance() でIMediaUtilインタフェースを取得する。
  2. IMediaUtil_CreateMedia() を呼び出してIMedia派生インタフェースを作成する。
  3. IMedia_Play() で再生する。

方法2:IMedia派生インタフェースを作成してファイルを再生

 こちらの方法は、メディア形式に応じたインタフェーイスを作成した上で、そのインタフェーイスが再生可能なメディア ファイルを読み取らせることで、再生を行います。

  1. ISHELL_CreateInstance() でIMedia派生インタフェースを作成する。
  2. IMedia_SetMediaData() で、メディアデータのファイル名をセットアップする。
  3. IMedia_Play() で再生する。

方法3:IMedia 派生インタフェースを作成し、メディアデータを格納したバッファを再生

 IMedia の再生データとして任意のバッファを指定できます。この方法ですと、メディアデータを必ずしも通常のメディアファイル (MP3ファイル、MIDIファイルなど)として格納しておく必要はありませんので、データソースの自由度が高くなります。

  1. IFileMgr, IFile を使用して、ファイルからメディアデータを読み取り、バッファに格納する。
  2. ISHELL_CreateInstance() で IMedia派生インタフェースを作成する。
  3. IMedia_SetMediaData() で、メディアデータを格納したバッファをセットアップする。
  4. IMedia_Play() で再生する。

    [倉谷智尋, ITmedia]

    Copyright © ITmedia, Inc. All Rights Reserved.

    前のページ | 2/3 | 次のページ



モバイルショップ

最新CPU搭載パソコンはドスパラで!!
第3世代インテルCoreプロセッサー搭載PC ドスパラはスピード出荷でお届けします!!

最新スペック搭載ゲームパソコン
高性能でゲームが快適なのは
ドスパラゲームパソコンガレリア!