続 pcm_formatの分解

実際にpcm_formatのメンバを分割しようとして、いきなり詰まりました。
DirectSoundの場合、フォーマットの取得/設定はPCWAVEFORMATEX単位で行います。
チャネル数やサンプリングレートの取得はPCWAVEFORMATEXから必要なメンバのみ読み出せばよいのですが、設定はそうはいきません。
取得は各パラメータをバラバラに読み出して、設定はpcm_formatで一括して行うという方法もありますが、入出力のインタフェースが非対称になってしまいます。
また、一旦現在の設定値を取得してから変更したいメンバだけ書き換えて設定する方法もありますが、全メンバを設定したい場合には無駄が多くなります。
やはり、各デバイスで自然なインタフェースを持たせたほうが良いでしょう。


そうすると、pcm_formatでアクセスするデバイスや、pcm_format::data_typeでアクセスするデバイスなどインタフェースの統一されていないデバイスを扱うことになります。
ここは、Boost.Iostreamsのオペレーション関数のようにカスタマイズ可能な関数テンプレートを介してアクセスすることにします。