arbitrary_positional_facade::close()
arbitrary_positional_facadeはバッファリングすることで位置復元ストリームを任意位置ストリームとして扱います。このバッファはSinkがclose()された際に空でない場合がありえます。
オーディオストリームだけを考えると、
- 何もしない(バッファに残ったデータを単に捨てる)
- 例外を投げる
ぐらいしか対処法はなさそうですが、より一般化するとBase64のように、
- 余ったデータを特殊な形式で出力する
という選択肢も必要になるでしょう。
前の2つは最後の例の特殊な形と考えることができるので、実際には、
- バッファに残ったデータを処理する関数
- 実際にデバイスを閉じる関数
の2つからclose()を導出することができます。関数の名前は考え中です。
また、今回のテストにBase64は都合が良いので、フィルタでなくデバイスとして実装してみます。