QVorbis API

概要

QVorbis は、Vorbis オーディオストリームのデコードコアライブラリである。 C 言語で記述され、C 関数 API を提供する。 QVorbis ライブラリでは、純粋に Vorbis ストリームのみを扱い、Ogg コンテナフォーマット を取り扱う機能はサポートしていない。

Vorbis ストリームをデコードする低水準機能のみを提供するため、より高水準なライブラリを 使用する場合は、このレベルの API を使用する必要はない。

API

初期化

  1. BOOL QV_Initialize(void);
  2. BOOL QV_SetEnableSSE2(BOOL b);

QV_Initialize()

ライブラリ初期化のため、プロセス開始時に一度だけ呼び出す。

QV_SetEnableSSE2()

SSE2 拡張ルーチンを使用するかどうかを変更する。使用 CPU によって QV_Initialize() 関数が 自動的に設定するため、テスト以外の用途では呼び出す必要はない。

デコーダーセットアップ

  1. struct QVorbisDecoderSetup;
  2. typedef struct QVorbisDecoderSetup QVorbisDecoderSetup_t;
  3. QVorbisDecoderSetup_t* QV_CreateDecoderSetup(void);
  4. void QV_ReleaseDecoderSetup(QVorbisDecoderSetup_t* setup);
  5. BOOL QV_SetupDecoderSetup(
  6. QVorbisDecoderSetup_t* setup,
  7. const VOID* id_packet,
  8. SIZE_T id_size,
  9. const VOID* setup_packet,
  10. SIZE_T setup_size);
  11. INT32 QV_GetDecoderSetupChannels(
  12. QVorbisDecoderSetup_t* setup);
  13. INT32 QV_GetDecoderSetupSamplingRate(
  14. QVorbisDecoderSetup_t* setup);

QV_CreateDecoderSetup()

デコーダーセットアップオブジェクトを作成する。

QV_ReleaseDecoderSetup()

デコーダーセットアップオブジェクトを解放する。

QV_SetupDecoderSetup()

Vorbis の Identification header および Setup header を入力して、 デコーダーセットアップを準備する。 セットアップデーターが不正な場合は、エラーとして、FALSE を返す。

QV_GetDecoderSetupChannels()

Vorbis ストリームのオーディオチャンネル数を返す。

QV_GetDecoderSetupSamplingRate()

Vorbis ストリームのオーディオサンプリングレートを返す。(Hz)

デコーダー

  1. struct QVorbisDecoder;
  2. typedef struct QVorbisDecoder QVorbisDecoder_t;
  3. QVorbisDecoder_t* QV_CreateDecoder(void);
  4. void QV_ReleaseDecoder(QVorbisDecoder_t* d);
  5. BOOL QV_SetupDecoder(
  6. QVorbisDecoder_t* d,
  7. QVorbisDecoderSetup_t* setup,
  8. SIZE_T size);
  9. struct QV_Output {
  10. INT32 Channels;
  11. INT32 Length;
  12. const FLOAT* Output[2];
  13. };
  14. typedef struct QV_Output QV_Output_t;
  15. BOOL QV_DecodeFrame(
  16. QVorbisDecoder_t* d,
  17. const VOID* packet,
  18. SIZE_T size,
  19. QV_Output_t* output);
  20. void QV_ResetDecoder(
  21. QVorbisDecoder_t* d);

QV_CreateDecoder()

デコーダーオブジェクトを作成する。

QV_ReleaseDecoder()

デコーダーオブジェクトを解放する。

QV_SetupDecoder()

デコーダーオブジェクトを準備する。

setup には、セットアップオブジェクトを指定する。 単一のセットアップオブジェクトから、複数のデコーダーを準備することも可能である。

size には、内部で確保されるビットストリームバッファの容量を指定する。(Byte)

QV_DecodeFrame()

1 フレーム分のビットストリームをデコードし、PCM サンプルを返す。

packet, size には、1 フレーム分の入力ビットストリームを指定する。 size は、QV_SetupDecoder() で指定したサイズを超えてはならない。 (1 フレームごとのパケット化は、上位のコンテナフォーマットで処理される。)

output へ、出力結果が返される。

1 フレームに含まれるサンプル数 (Length) は、可変である。また、最初にデコードされる フレームの出力サンプル数は、Vorbis 仕様により 0 となる。

Output には、32 bit 浮動小数点サンプルが格納される。サンプル実体は、デコーダーの内部ワーク へ格納されているため、呼び出し側でデータをコピーしてから、次のデコード処理を呼び出すこと。

QV_ResetDecoder()

シーク処理などのために、デコーダーをリセットする。

デコーダー補助

  1. struct QV_Convert {
  2. const INT16* Sample;
  3. INT32 Samples;
  4. };
  5. typedef struct QV_Convert QV_Convert_t;
  6. BOOL QV_ConvertFrame(
  7. QVorbisDecoder_t* d,
  8. const QV_Output_t* output,
  9. QV_Convert_t* convert);
  10. void QV_ResetDecoderChecker(
  11. QVorbisDecoder_t* d);
  12. BOOL QV_CheckDecoderChecker(
  13. QVorbisDecoder_t* d,
  14. const VOID* packet,
  15. SIZE_T size,
  16. INT32* samples);

QV_ConvertFrame()

デコーダーで出力される 32 bit 浮動小数点サンプルを 16 bit 符号付き整数サンプルへ変換する。

Sample が指すバッファーは、デコーダー内部ワークのため、呼び出し側でコピーして、次の処理を行うこと。

QV_ResetDecoderChecker()

サンプル数チェッカーをリセットする。

QV_CheckDecoderChecker()

フレームデータの出力サンプル数を、デコード処理を行うことなく算出する。 Vorbis 仕様では、1 フレームあたりのサンプル数が可変なので、出力サンプル数を高速に求めたい場合に使用する。

サンプルチェッカー

  1. struct QVorbisSamplesChecker;
  2. typedef struct QVorbisSamplesChecker QVorbisSamplesChecker_t;
  3. QVorbisSamplesChecker_t* QV_CreateSamplesChecker(void);
  4. void QV_ReleaseSamplesChecker(QVorbisSamplesChecker_t* t);
  5. BOOL QV_SetupSamplesChecker(
  6. QVorbisSamplesChecker_t* t,
  7. QVorbisDecoderSetup_t* setup);
  8. void QV_ResetSamplesChecker(QVorbisSamplesChecker_t* t);
  9. BOOL QV_CheckSamplesChecker(
  10. QVorbisSamplesChecker_t* t,
  11. const VOID* packet,
  12. SIZE_T size,
  13. INT32* samples);

サンプルチェッカーは、Vorbis ストリームのインデックス化を行うツール用の機能である。

QV_CreateSamplesChecker()

サンプルチェッカーオブジェクトを作成する。

QV_ReleaseSamplesChecker()

サンプルチェッカーオブジェクトを解放する。

QV_SetupSamplesChecker()

サンプルチェッカーオブジェクトを準備する。

QV_ResetSamplesChecker()

サンプルチェッカーオブジェクトをリセットする。

QV_CheckSamplesChecker()

フレーム内のサンプル数を算出する。