(C)Copyright 2000 NTT Cyber Space Laboratories
TwinVQ Ver. 2.3
平成12年10月4日
パッケージに入っているファイルは以下のとおりです。
●TwinVQ DLL 利用に必要なファイル:TwinVQ デコーダは、圧縮された TwinVQ データ(ビットストリーム)を解凍し、オーディオデータを出力するプログラムです。
TwinVQ データの入力デバイスと、オーディオデータの出力デバイスは、決められたインタフェースに従った入出力ができれば何であってもかまいません。サンプルプログラムでは、入力も出力もファイルに対して行っています。
TwinVQ データの形式はあらかじめ決まっており、図1のようにヘッダ部とオーディオデータ部を持っています。オーディオデータ部には、圧縮されたオーディオ信号が記録されています。ヘッダ部には、オーディオデータを解凍するのに必要なパラメータや、曲名などの、補助情報が記録されています。
図1: TwinVQ データの基本構造
なお、TwinVQ データ形式についての詳細については、TwinVQ データフォーマット説明書をご覧ください。
TwinVQ デコーダプログラムは図2のように、5つのモジュールで構成します。モジュール間では、様々な形式でデータがやり取りされます。データの流れのうち、緑色の線で書かれたものは、入出力デバイスの種類によってインタフェースが変わります。サンプルプログラムでは、入力側も出力側もファイル入出力と標準出力のインタフェースを使っています。
図2:TwinVQ デコーダプログラムの構成
デコーダを動作させる手順の概要は以下のとおりです。
{ <初期化> while( <ビットストリームのフレームごとの読出し> ){ <デコード処理> <出力処理> } <終了処理> }
この手順はデコーダメインプログラムに持たせます。詳しくは、サンプルプログラムの main() (decoder.cxx) 関数を参照してください。
以降のセクションでは、上の手順の各ブロックについての説明をします。
初期化は、TwinVQ デコーダプログラムを動作させる前に必ず行う必要があります。
初期化ブロックでは、TwinVQ を構成する全モジュールの初期化を行います。
初期化は、TwinVQデコーダモジュールとビットストリーム読出しモジュールの両方について行います。また、オーディオデータ出力用の float 配列のメモリアロケーションを行っておく必要があります(TvqDecodeFrame() のマニュアル参照)。
これらの初期化処理は次の順序で行ってください。詳しくは、サンプルプログラム中
InitializeDecoder()
(decoder.cxx) を参照してください。
CHeaderManager::Create()
TvqGetStandardChunkInfo()
なお、初期化後には、ヘッダマネージャにアクセスすることにより、ヘッダ情報を表示することができます。詳しくは、サンプルプログラムのメインプログラム中の
message()
関数を参照してください。
ビットストリームの読出しは、フレームごとに行います。添付のサンプルプログラムでは、TvqReadBsFrame() 関数がソースコードで用意されています。この関数は、ビットストリームを解読し、TwinVQデコーダモジュールに入力できる符号化インデックス (INDEX) 形式に変換します。
デコード処理では、INDEX 形式のビットストリーム情報を解凍してオーディオ信号を出力します。TvqDecodeFrame() 関数を使います。
フレームごとに、オーディオデータを書き込みます。サンプルプログラムでは、frtobuf()
関数を使って TwinVQ の出力オーディオフレームを
16 bit PCM データに変換しています。この PCM
データを fwrite()
関数を使ってファイルに出力します。
終了処理は、一つのビットストリームをデコードした後に必ず行う必要があります。終了処理として、以下の項目を行う必要があります。順序の制約はありません。
パッケージには、コンパイル済みの実行ファイル TestDec.exe がすでに入っていますが、改めてコンパイルする場合には、Visual C++ 6.0 用のワークスペース TestDec.dsw または ModEnc.dsw を使ってビルドしてください。Linux システムでお使いの場合には、ModEnc ディレクトリ上で、make してください。
DOS プロンプト(Windows NT の場合はコマンドプロンプト)から実行します。
> TestDec <ビットストリームファイル名> <出力オーディオファイル名> [ff | rew]
で実行できます。
サポートしている出力オーディオファイルの形式は、*.wav
形式またはヘッダなし 符号つき 16 bit PCM
です。1サンプルは 2Byte データで格納されています。ステレオの場合は、L,
R, L, R の順でサンプルが並んでいます。
引数リストに ff または rew を入れると、FF
または REW 再生のデモンストレーションモードになります。
なお、デコーダサンプルプログラム decoder.cxx の他に、TwinVQ デコーダを最小限に構成する simple_dec.cxx が収納されています。このプログラムは decoder.cxx と差し替えて利用することができます。
TwinVQ デコーダモジュールは、デコーダ DLL から提供されています。デコーダ DLL 関数は、次の3つのカテゴリーに分けられます。
使用できるデコーダ DLL 関数は以下の表のとおりです。
カテゴリ | 関数名 | 必須 | 概要 |
初期化/終了処理用関数 | TvqInitialize() | ○ | TwinVQ デコーダモジュールを初期化する。 |
---|---|---|---|
TvqTerminate() | ○ | TwinVQ デコーダモジュールの終了処理をする。 | |
TvqGetVectorInfo() | ○ | VQ ビット情報を初期化する。ビットストリーム読み出しモジュールのサブプログラム。 | |
TvqResetFrameCounter() | フレームカウンタをリセットする。 | ||
デコード処理用関数 | TvqDecodeFrame() | ○ | フレームごとにデコード処理をする |
TvqWtypeToBtype() | ○ | ウィンドウタイプをブロックタイプに翻訳する。ビットストリーム読み出しモジュールのサブプログラム。 | |
TvqUpdateVectorInfo() | ○ | VQ ビット情報を更新する。ビットストリーム読み出しモジュールのサブプログラム。 | |
TvqSetFrameCounter() | フレームカウンタを任意の値にセットする。 | ||
問い合わせ関数 | TvqCheckVersion() | ○ | バージョン ID 番号 |
TvqGetSetupInfo() | セットアップ情報 | ||
TvqGetConfInfo() | ○ | TwinVQ モジュールの設定パラメータ | |
TvqGetFrameSize() | ○ | フレームサイズ | |
TvqGetNumChannels() | ○ | チャネル数 | |
TvqGetBitRate() | ビットレート | ||
TvqGetSamplingRate() | サンプリング周波数 | ||
TvqGetNumFixedBitsPerFrame() | ○ | 1フレームあたりのビット数 | |
TvqGetNumFrames() | フレームカウンタの値 | ||
TvqGetModuleVersion() | TwinVQ デコーダモジュールのバージョン |
カテゴリ | 関数名 | 必須 | 概要 |
初期化用 | TvqGetBsHeaderInfo() |
○ | ビットストリームヘッダの読み取り |
TvqinitBsReader() |
○ | ビットストリーム読み出しモジュールの初期化 | |
提供機能 | TvqReadBsFrame() |
○ | ビットストリームのフレーム単位の読み取り |
TvqSkipFrame() |
ビットストリームのフレーム単位のスキップ | ||
TvqGetBsFramePoint() |
ビットストリームの現在位置をフレーム番号で返す |
CHeaderManager
クラスとして用意されています。
frtobuf()