pcm_formatの修正
float/double対応のため、pcm_formatを変更しました。
struct pcm_format { enum pcm_type { uint_8, int8, int_le16, int_be16, int_le24, int_be24, int_le32, int_be32, float_le32, float_be32, float_le64, float_be64, }; pcm_type type; unsigned rate; unsigned channels; };
typeに応じて処理を変えざるを得ず、仮想関数で表現したいところですが、種々のデバイスにフォーマットを設定する必要があるため、どのフォーマットを使用しているか判断する必要があり、結局列挙値を用いるのが無難な方法となります。
各デバイスにpcm_format形式でフォーマットを取得する関数を用意し、その値に応じてfloatに変換するアダプタを用意することにします。(文字型が変わるため、フィルタでは表現できません。)
fstreamのようにfstream<char>とfstream<wchar_t>といったものは用意せず、charストリームだけ用意してfloatで扱う場合にアダプタを使用します。(floatのみのデバイスもあります。)
この辺りは二転三転していますが、書いて動かして直しての繰り返しなので、また変わるかもしれません。