聴き比べがしたくなって、WASAPI排他モード・共有モードを切り替えられるようにした。
共有モード・排他モードを聴き比べてみると
聴き比べた結果だがほとんど差を感じなかった。なんとなく共有モードだと音量が補正されているような気もするが、気のせいかもしれない。
基底クラスでの凡ミス
切り替えられるように、基底クラス(sf::audio_base)を作って純粋仮想関数を定義し、排他・共有それぞれ実装クラス(wasapi_exclusive_timer,wasapi_shared_timer)にした。コントロールは基底クラスのスマートポインタで行う。
排他・共有を切り替えるときに既存のインスタンスをDelete(reset)して、新規にNewするのであるがその際「WASAPI Audio Clientはまだ使用中です。」というエラーが出る。各実装クラスではきちっとWASAPIインターフェースをReleaseしているのにも関わらずである。
ソースコードをよくみたら、基底クラスで仮想デストラクタを定義するのを忘れていた。なので実装クラスのデストラクタが呼ばれないのだった。凡ミスだ。。