(C)Copyright 2000 NTT Cyber Space Laboratories
初期化は、TwinVQ エンコーダプログラムを動作させる前に必ず行う必要があります。初期化の手順は、
の2つの手順で行います。
エンコーダモジュールの初期化に先だって、符号化条件などのエンコーダセットアップ情報を取得する必要があります。エンコーダセットアップ情報は、構造体 headerInfo と、encSpecificInfo のメンバに格納します。headerInfo には、エンコーダ・デコーダ共通のセットアップ情報、encSpecificInfo には、エンコーダ特有のセットアップ情報が格納されます。 headerInfo 構造体のメンバ構成はこちらを参照ください。encSpecificInfo 構造体のメンバ構成は下の通りです:
typedef struct{ int N_CAN_GLOBAL; /* VQモジュールの予備選択数、 */ /* 値が小さいほど高速 */ /* 値が大きいほど高音質 */ } encSpecificInfo; |
サポートされている各要素の値の組み合わせは、こちらを参照ください。
サンプルプログラムでは、プログラムの引数リストからセットアップ情報を取得しています。また、サンプリング周波数やチャネル数などのオーディオ信号に関するパラメータは、WAVE ファイルのヘッダから取得しています。
次に、データの入出力インタフェースを指定します。サンプルプログラムでは、16 bit PCM ファイルからデータを入力し、ビットストリームファイルに出力しますので、これらのファイル名を取得します。
セットアップ情報を取得したら、次に TwinVQ エンコーダを初期化します。エンコーダの初期化は次の順序で行います。
TvqEncInitialize()
関数を使って TwinVQ エンコーダモジュールを初期化します。
TvqInitBsWriter()
関数を使ってビットストリーム書き込みモジュールを初期化します。
入力オーディオデータ配列として、 {フレームあたりのサンプル数}×{チャネル数} の大きさだけメモリを確保する必要があります。
TvqEncGetFrameSize() 関数と TvqEncGetNumChannels() 関数を使って TwinVQ DLL モジュールにフレームサイズとチャネル数を問い合わせた後、その値を使ってメモリアロケーションを行います。
また、サンプルプログラムでは、ファイル出力を行っているので、出力ファイルをオープンします。
TvqCreateHeaderChunk() 関数を使ってビットストリームヘッダオブジェクトを生成します。この関数は、ビットストリームヘッダの生成を支援する
ChunkHelper.cxx に置かれています。TvqCreateHeaderChunk()
関数では、標準ヘッダ情報は、headerInfo
構造体から取得し、拡張ヘッダ情報は設定ファイルから取得します。
作成したビットストリームヘッダオブジェクトの内容を、ビットストリームヘッダに書き込みます。TvqPutBsHeaderInfo() 関数が使われます。