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のみのデバイスもあります。)
この辺りは二転三転していますが、書いて動かして直しての繰り返しなので、また変わるかもしれません。