初期化

(C)Copyright 2000 NTT Cyber Space Laboratories

# エンコーダ初期化マニュアル

初期化は、TwinVQ エンコーダプログラムを動作させる前に必ず行う必要があります。初期化の手順は、

1. プログラムセットアップ情報の取得
2. エンコーダの初期化

の２つの手順で行います。

## 1. プログラムセットアップ情報の取得

エンコーダの初期化に先立ち、エンコーダモジュールの初期化に必要な情報の取得と、入出力インターフェース (サンプルプログラムでは、ファイル) の指定を行います。

### 1.1 エンコーダセットアップ情報の取得

エンコーダモジュールの初期化に先だって、符号化条件などのエンコーダセットアップ情報を取得する必要があります。エンコーダセットアップ情報は、構造体 `headerInfo` と、`encSpecificInfo` のメンバに格納します。`headerInfo` には、エンコーダ・デコーダ共通のセットアップ情報、`encSpecificInfo` には、エンコーダ特有のセットアップ情報が格納されます。 headerInfo 構造体のメンバ構成はこちらを参照ください。encSpecificInfo 構造体のメンバ構成は下の通りです：

`typedef struct{ int N_CAN_GLOBAL; /* VQモジュールの予備選択数、 */ /* 値が小さいほど高速 */ /* 値が大きいほど高音質 */ } encSpecificInfo;`

サポートされている各要素の値の組み合わせは、こちらを参照ください。

サンプルプログラムでは、プログラムの引数リストからセットアップ情報を取得しています。また、サンプリング周波数やチャネル数などのオーディオ信号に関するパラメータは、WAVE ファイルのヘッダから取得しています。

### 1.2 データ入出力の指定

次に、データの入出力インタフェースを指定します。サンプルプログラムでは、16 bit PCM ファイルからデータを入力し、ビットストリームファイルに出力しますので、これらのファイル名を取得します。

## 2. TwinVQ エンコーダの初期化

セットアップ情報を取得したら、次に TwinVQ エンコーダを初期化します。エンコーダの初期化は次の順序で行います。

### 2.1 TwinVQエンコーダモジュールの初期化

`TvqEncInitialize()` 関数を使って TwinVQ エンコーダモジュールを初期化します。

### 2.2 ビットストリーム書き込みモジュールの初期化

`TvqInitBsWriter()` 関数を使ってビットストリーム書き込みモジュールを初期化します。

### 2.3 オーディオデータ入力部の初期化

入力オーディオデータ配列として、 {フレームあたりのサンプル数}×{チャネル数} の大きさだけメモリを確保する必要があります。

`TvqEncGetFrameSize()` 関数と `TvqEncGetNumChannels()` 関数を使って TwinVQ DLL モジュールにフレームサイズとチャネル数を問い合わせた後、その値を使ってメモリアロケーションを行います。

また、サンプルプログラムでは、ファイル出力を行っているので、出力ファイルをオープンします。

### 2.4 ビットストリームヘッダオブジェクトの作成

TvqCreateHeaderChunk() 関数を使ってビットストリームヘッダオブジェクトを生成します。この関数は、ビットストリームヘッダの生成を支援する ChunkHelper.cxx に置かれています。TvqCreateHeaderChunk() 関数では、標準ヘッダ情報は、`headerInfo` 構造体から取得し、拡張ヘッダ情報は設定ファイルから取得します。

### 2.5 ビットストリームヘッダの書き込み

作成したビットストリームヘッダオブジェクトの内容を、ビットストリームヘッダに書き込みます。TvqPutBsHeaderInfo() 関数が使われます。