QTTA API

概要

QTTA は、TTA オーディオストリームのデコードコアライブラリである。 C 言語で記述され、C 関数 API を提供する。

純粋に TTA パケットデータのみをデコードする低水準デコーダー API と、TTA コンテナ フォーマットからデコードを行うリーダー API が用意されている。

TTA ファイルをデコードする場合は、高水準のリーダー API のみを用いればよい。

リーダー API

  1. struct QTTA_Reader;
  2. typedef struct QTTA_Reader QTTA_Reader_t;
  3. QTTA_Reader_t* QTTA_CreateReader(void);
  4. void QTTA_ReleaseReader(QTTA_Reader_t* t);
  5. BOOL QTTA_OpenReader(
  6. QTTA_Reader_t* t,
  7. const WCHAR* path);
  8. BOOL QTTA_OpenReader_IStream(
  9. QTTA_Reader_t* t,
  10. IStream* p);
  11. const QTTA_Format_t* QTTA_GetFormat(
  12. QTTA_Reader_t* t);
  13. BOOL QTTA_Seek(
  14. QTTA_Reader_t* t,
  15. INT64 sample);
  16. BOOL QTTA_Decode(
  17. QTTA_Reader_t* t,
  18. VOID* buffer,
  19. INT32 samples,
  20. INT32* output);

QTTA_CreateReader()

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

QTTA_ReleaseReader()

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

QTTA_OpenReader()

ローカルファイルから TTA ストリームを読みだす。

QTTA_OpenReader_IStream()

Windows IStream COM インターフェイスから TTA ストリームを読みだす。

QTTA_GetFormat()

オーディオフォーマットを取得する。

QTTA_Seek()

シークを実行する。シーク先は、サンプル位置を指定する。

QTTA_Decode()

ストリームをデコードし、PCM サンプルを取り出す。

PCM データは、16bit 符号つき整数で出力される。

samples は、デコードする最大サンプル数。

output は、実際にデコードされたサンプル数を返す。0 を返した場合は、ストリーム の終了を表す。最大値は、samples と同じとなるが、必ずしも最大値で返るわけではない。

buffer に用意すべきサイズは、samples * 2 * チャンネル数 (Byte) である。

QTTA_Format 構造体

  1. struct QTTA_Format {
  2. INT32 SamplingRate;
  3. INT32 Channels;
  4. INT64 Duration;
  5. }; /* QTTA_Format */
  6. typedef struct QTTA_Format QTTA_Format_t;

SamplingRate サンプリングレート (Hz)

Channels チャンネル数 (1 or 2)

Duration ストリーム長 (サンプル数)

デコーダー API

  1. struct QTTADecoder;
  2. typedef struct QTTADecoder QTTADecoder_t;
  3. QTTADecoder_t* QT_CreateDecoder(void);
  4. void QT_ReleaseDecoder(QTTADecoder_t* d);
  5. BOOL QT_SetupDecoder(
  6. QTTADecoder_t* d,
  7. INT32 channels,
  8. INT32 samples);

QT_CreateDecoder()

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

QT_ReleaseDecoder()

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

QT_SetupDecoder()

デコーダーを初期化する。

channels チャンネル数 (1 or 2)

samples 1フレームあたりのサンプル数

  1. struct QT_Output {
  2. INT32 Channels;
  3. INT32 Length;
  4. const INT16* Sample;
  5. };
  6. typedef struct QT_Output QT_Output_t;
  7. BOOL QT_DecodeFrame(
  8. QTTADecoder_t* d,
  9. const VOID* packet,
  10. SIZE_T size,
  11. QT_Output_t* output);

QT_DecodeFrame()

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

packet, size には、1 フレーム分の入力ビットストリームを指定する。 (1 フレームごとのパケット化は、上位のコンテナフォーマットで処理される。)

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

チャンネル数 (Channels)、1 フレームに含まれるサンプル数 (Length) は、デコーダー初期化時に設定した値となる。

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