位置復元可能ストリーム再考

id:Cryolite:20060709 さんのFilterのBlocking-Preserving関連。
似たような状況は位置復元可能ストリームでも起きます。(位置復元可能ストリームについては id:hamigaki:20060210 参照)
入出力は適切なバイト区切り(ブロック、フレーム)単位で行う必要があるので、これをBlockingにするにはバッファリングが必要になります。
逆に言えば、適切なブロック単位で読み書きする限りはバッファリングは必要ありません。
これまではこのような入出力を前提としてバッファリングをしていませんでしたが、wide_adaptorの登場により事情が少し変わってきました。
wide_adaptorはPCMのフォーマット情報からブロックサイズを判断し、必ずこのブロックサイズ単位で入出力を行います。一旦、ワイドストリームにしてしまえば、1文字単位で入出力を行えるため、デバイスはBlockingになります。
当然、vorbis_file_sourceのように始めからワイドストリームである場合もBlockingですし、wave_file_sourceのように生のデータを直接扱う場合はブロックサイズに縛られないためBlockingにすることができます。
そうなると、位置復元可能ストリームになる箇所はますます少なくなります。
そういうわけで、低コストでバッファリングする方法やバッファリングのオン/オフを切り替えられるようにすることを検討中です。