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