Oggのマルチストリーム その2

やっとOggRFCを半分くらい訳しました。
ストリームの多重化に関しては大体理解できました。
Oggには二種類のストリーム多重化があります。

同時多重化(グループ化)
複数のストリームを交互に混ぜる
逐次多重化(チェイン化)
ストリームを単純に連結する

Oggを繋げるだけでマルチストリームになるという話は聞いたことがあったんですが、試しに同じファイルを二つ繋いだところogginfo.exeに壊れているといわれて、あきらめていました。
この原因もようやく理解できました。
一つの物理ビットストリーム(Oggファイル)に含まれる論理ビットストリームは一意なシリアル番号を設定する必要があります。
前に試したときは同じファイルを繋いだため、このシリアル番号が重複していたのでした。
試しに異なるOggファイルを連結してWinampで再生したところきちんと再生できました。


マルチストリームのOggファイルを準備できたところで、Hamigaki.Audioのvorbis_file_sourceでデコードしてみました。
vorbisfileのAPIはチェイン化された全てのストリームを一つのストリームとして扱えるため、一見動いているように見えます。
しかし、個々のストリームは別々のオーディオフォーマットを持つことができるので、例えば22kHzと44kHzのストリームが連結されている場合、後半の再生がおかしくなります。(Winampではきちんと動作します)
vorbis_file_sourceはアーカイバのように複数ストリームを意識したインタフェースに変更する必要がありますね。