ぼちぼちと実装を見直しつつ行っている。
IAudioClientにはIsFormatSupported メソッドがある。
HRESULT IsFormatSupported(
[in] AUDCLNT_SHAREMODE ShareMode,
[in] const WAVEFORMATEX pFormat,
[out] WAVEFORMATEX *ppClosestMatch
);
1つ目のパラメータは共有モードの指定、2つ目は確認したいフォーマット、3つ目は指定したWAVEFORMATはサポートしていないが、近いものを探してあった場合APIが返すフォーマットポインタのアドレスを指定する。
この3つ目のパラメータだが、共有モードでしか有効でない。排他モードだとかならずNULLが入り、HRESULTにAUDCLNT_E_UNSUPPORTED_FORMATが入る仕様となっている。排他モードだと相変わらず片っ端からサポートしているフォーマットをチェックしていかなくてはいけないのだろうか。ちょっとというか、かなり面倒臭い。