floatストリームの設計

floatストリームの方針を決めるため、デバイス毎の要素型を表にしてみました。

バイス
asio char
wave_file char
pcm_device char
direct_sound char
vorbis_file float
sine_wave float

vorbis_fileは通常charストリームで扱いますが、ネイティブな型はfloatで、ライブラリの中でバイト列への変換が行われています。
sine_waveも現在はcharストリームで扱っていますが、同じような変換を内部で行っています。
こういった変換をデバイスから切り離し、何度も変換を繰り返すことを防ぐことが今回の一つの目標です。


その一方で、wave_file_sourceのようにヘッダ情報からフォーマットを判別できる場合は、

basic_wave_file_source<char> cw("a.wav");   // バイト列として扱う(無変換)
basic_wave_file_source<float> fw("b.wav");  // 自動的にfloatに変換して扱う

のようにコンバータをデバイスに内蔵したいですね。
もちろん、コンバータは一つのクラスに統一して、デバイスの内外を問わず使えるようにしようと思います。