arbitrary_positional_facade::close()

arbitrary_positional_facadeはバッファリングすることで位置復元ストリームを任意位置ストリームとして扱います。このバッファはSinkがclose()された際に空でない場合がありえます。
オーディオストリームだけを考えると、

  • 何もしない(バッファに残ったデータを単に捨てる)
  • 例外を投げる

ぐらいしか対処法はなさそうですが、より一般化するとBase64のように、

  • 余ったデータを特殊な形式で出力する

という選択肢も必要になるでしょう。
前の2つは最後の例の特殊な形と考えることができるので、実際には、

  • バッファに残ったデータを処理する関数
  • 実際にデバイスを閉じる関数

の2つからclose()を導出することができます。関数の名前は考え中です。
また、今回のテストにBase64は都合が良いので、フィルタでなくデバイスとして実装してみます。