QVorbis (0.9.2) | 2009-09-09 12:00 |
QAXDecoder は、QAX/QAS ファイルファイルのデコードライブラリである。 QVorbis ライブラリを、Vorbis ストリームデコードライブラリとして使用している。 実装言語は、C++ で、Windows API に依存している。提供 API は、C++ クラスとして 公開される。
API の使用方法としては、libvorbis の vorbisfile API と類似しており、比較的容易に 移行が可能である。
ライブラリが提供するコンポーネントクラスの基底クラス
Release() メソッドで、コンポーネントを解放する。COM インターフェイスとは異なり、 参照カウンターを管理しないので、呼び出しにより直ちに解放される。
QAX ファイルにアクセスするために、メモリマップドファイル読み込み機能を提供する。
ファイル読み込みのカスタマイズを行わない場合は、特に考慮する必要はない。
MapViewOfFile() API で読み込みビューを割り当てる。
UnmapViewOfFile() API で読み込みビューの割り当てを解除する。
デコーダーコンポーネントを作成するためのコンポーネント。
ライブラリ内部で使用されるコンポーネントなので、使用者側では特に考慮する必要はない。
- // QItem
- struct QItem {
- std::string Type;
- std::string Name;
- }; // QItem
- // QDecoder
- class QDecoder : public QComponent {
- public:
- virtual QDecoderOutput* STDCALL CreateOutput(
- const char* name) = 0;
- virtual INT32 STDCALL GetItemCount() = 0;
- virtual QItem STDCALL GetItem(
- INT32 index) = 0;
- }; // QDecoder
QAX ファイルのデコードを行うコンポーネント
指定された名前 (name) のデータを検索し、該当する出力コンポーネントを作成する。 該当するデータがない場合は、0 を返す。
QAX ファイル内に含まれるデータアイテム数を返す。
データアイテムの 名前 (Name) タイプ (Type) を返す。 現在タイプには 'vorbis' のみが定義されている。
- // QDecoderSpec
- struct QDecoderSpec {
- INT32 Channels;
- INT32 SamplingRate;
- UINT64 Samples;
- }; // QDecoderSpec
- // QDecoderOutput
- class QDecoderOutput : public QComponent {
- public:
- virtual QDecoderSpec STDCALL GetDecoderSpec() = 0;
- virtual UINT32 STDCALL Decode(
- VOID* buffer,
- UINT32 samples) = 0;
- virtual void STDCALL Seek(
- UINT64 sample) = 0;
- virtual std::string STDCALL QueryProperty(
- const char* name) = 0;
- }; // QDecoderOutput
ストリームのデコード結果を出力するコンポーネント
ストリームのパラメータを返す。
チャンネル数 (Channels), サンプリングレート (SamplingRate), 全サンプル数 (Samples)
ストリームのデコードを行い最大 1 フレーム分の PCM データの出力を行う。PCM フォーマットは、16 bit 符号つき整数、 リトルエンディアンである。
samples には、バッファの最大サンプル数を与える。 buffer として必要なメモリ量は、2 * チャンネル数 * samples (Byte) となるので、注意が必要。
戻り値は、出力されたサンプル数である。0 が返った場合は、ストリームの終端に達したことを表す。
ストリームの指定されたサンプル位置 (sample) へ移動する。
移動は、サンプル単位で正確に処理される。
ストリームに関連付けられたプロパティ値を問い合わせる。
プロパティ値は、QAX ファイル作成ツール QAXMaker で指定することができる。ループポイントの位置など、 アプリケーションで利用できる任意の情報を設定可能。
ライブラリ初期化のため、プロセス開始時に一度のみ呼び出す。
QVorbis ライブラリの初期化も内部で行う。
- API_EXTERN QFileMapping* STDCALL QFileMappingCreate(
- LPCWSTR path);
- API_EXTERN QDecoderFactory* STDCALL QDecoderFactoryCreate();
- API_EXTERN QDecoder* STDCALL QDecoderCreate(
- QDecoderFactory* pFactory,
- QFileMapping* pFileMapping);
- API_EXTERN IStream* STDCALL StreamReaderCreate(
- LPCWSTR path);
- API_EXTERN QDecoderOutput* STDCALL QASDecoderOutputCreate(
- QDecoderFactory* pFactory,
- IStream* pStream);
path で指定されたファイルのファイルマッピングコンポーネントを作成する。
QAX ファイルのオープンに使用する。
デコーダーファクトリーコンポーネントを作成する。
デコーダーファクトリーコンポーネントとファイルマッピングコンポーネントを指定して、デコーダー コンポーネントを作成する。
path で指定されたファイルを読み込む、IStream COM インターフェイスを作成する。
QAS ファイルのオープンに使用できる。
デコーダーファクトリーコンポーネントと読み込み用 IStream インターフェイスを指定して、 QAS ファイル出力コンポーネントを作成する。
QAXDecoder ライブラリでは、エラー時には例外を送出する。
例外安全性を確保するため、すべての API 呼び出しコードにおいて、try, catch 文で例外を捕捉する 必要がある。
QAXDecoder ライブラリで送出するすべての例外クラスの基底クラス
ToString() メソッドで、追加情報を取得できる。
実際に送出される、派生例外クラスは以下の通り。
[PageInfo]
LastUpdate: 2008-12-18 12:18:51, ModifiedBy: noumiakira
[License]
GNU Free Documentation License
[Permissions]
view:all, edit:members, delete/config:members