「蒼弓ノート」 別館 libvorbis
※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

libvorbisソースコードの解説

libvorbisは(Ogg)Vorbisのエンコードとデコードのための統合ライブラリ。現状のソースコード(Xiph.Org libvorbis1.2.0)にあるファイルについて述べる。これらの説明は適切でない部分もあるかも知れない。私自身も全てを正確に理解している訳ではないので、その辺はご了承願いたい。なにか間違いなどあれば、上記のメニューより連絡されたし。
以下は私的なメモより抜粋したものを修正・加筆したものである。このページがlibvorbisに興味がある方々の参考になれば幸いである。

\lib

analysis.c

一つのブロックを分析する時に使う。詳細は不明。

backends.h

residueやmappingのバックエンド周りの定義。

barkmel.c

bark melなどの心理聴覚モデルのための単位変換。実際のエンコード処理には使われない。

bitrate.c

ビットレートのトラッキングとマネージメント。主にマネージメントモード用。

bitrate.h

bitrate.cのヘッダファイル。

block.c

ブロック周りの処理、初期化、開放、エンコード・デコード処理を含む。

codebook.c

コードブックのエンコード・デコード処理。

codebook.h

codebook.cのヘッダファイル。

codec_internal.h

全体で使われる構造体などの定義。

envelope.c

ブロックスイッチングのための分析処理。

envelope.h

envelope.cのヘッダファイル。

floor0.c

floor0のデコード処理。

floor1.c

floor1のエンコード・デコード処理。

info.c

ヘッダの処理(Vorbisコメントなど)

lookup.c

ルックアップ参照元関数定義。

lookup.h

loockup.cのヘッダファイル。

lookup_data.h

lookup.cで使われるテーブル。

lpc.c

LPC処理。floor0で使われる。

lpc.h

lpc.cのヘッダファイル。

lsp.c

LSP(LSF)変換処理。floor0で使われる。

mapping0.c

ブロック毎のエンコード・デコードのメインシーケンスとして使われる。mappingは本来、特定のステレオマッピングを表すが、現状mapping0しか存在しない(mono/stereo)。

masking.h

ATH/Masking(tone)パラメータ定義。

mdct.c

直交変換。

misc.h

メモリ確保周りの定義など。

os.h

処理系依存の定義。

psy.c

ビットレート割り当てや心理聴覚モデルの肝。

psy.h

psy.cのヘッダファイル。

psytune.c

チューニングに使われるもので実際には使用されない。

registry.c

floor/residue/mapping(channel)バックエンド処理のためのレジストリ。

registry.h

registry.cのヘッダファイル。

res0.c

residueのpack/unpack処理。

scales.h

スケール変換関連。

sharedbook.c

shared codebookのエンコード・デコード処理。

smallft.c

fft処理。tone maskingカーブ作成に使われる。

synthesis.c

デコードのための下位API。

tone.c

テスト用。

vorbisenc.c

エンコードのためのAPI及び、セットアップ処理。

vorbisfile.c

デコードのための上位API(フロントエンド)がある。

window.c

PCMデータに窓処理をする。

window.h

window.cのヘッダファイル。

lib\books 以下

各種コードブック。

lib\modes 以下

セットアップパラメータ・チューニングパラメータ群。

floor_all.h

floorのセットアップ。使用するハフマンコードブックやfloorカーブの設定などを行う。

psych_*.h

心理聴覚モデルのパラメータ群。

residue_*.h

residueのセットアップ。使用するコードブック(ハフマン、ベクトル)の設定を行う。

setup_*.h

変数類をtemplateにセットする。




用語関連

ブロック

処理する単位。VorbisにおけるブロックサイズはWindowサイズと一致する。周波数分解能はブロックサイズの半分である。

floor(カーブ)

大体のオーディオスペクトルを表す。常にチャンネル毎に符号化される。

residue

オーディオスペクトルからfloorカーブ分を取り去った残り。オーディオの詳細を表す。