Oggのマルチストリーム その2
やっとOggのRFCを半分くらい訳しました。
ストリームの多重化に関しては大体理解できました。
Oggには二種類のストリーム多重化があります。
- 同時多重化(グループ化)
- 複数のストリームを交互に混ぜる
- 逐次多重化(チェイン化)
- ストリームを単純に連結する
Oggを繋げるだけでマルチストリームになるという話は聞いたことがあったんですが、試しに同じファイルを二つ繋いだところogginfo.exeに壊れているといわれて、あきらめていました。
この原因もようやく理解できました。
一つの物理ビットストリーム(Oggファイル)に含まれる論理ビットストリームは一意なシリアル番号を設定する必要があります。
前に試したときは同じファイルを繋いだため、このシリアル番号が重複していたのでした。
試しに異なるOggファイルを連結してWinampで再生したところきちんと再生できました。
マルチストリームのOggファイルを準備できたところで、Hamigaki.Audioのvorbis_file_sourceでデコードしてみました。
vorbisfileのAPIはチェイン化された全てのストリームを一つのストリームとして扱えるため、一見動いているように見えます。
しかし、個々のストリームは別々のオーディオフォーマットを持つことができるので、例えば22kHzと44kHzのストリームが連結されている場合、後半の再生がおかしくなります。(Winampではきちんと動作します)
vorbis_file_sourceはアーカイバのように複数ストリームを意識したインタフェースに変更する必要がありますね。