WASAPI 排他モード・共有モードを切り替えられるようにした。

公開:2011-10-10 10:06
更新:2020-02-15 04:36
カテゴリ:wasapi,c++,dawもどきの作成,windows,audio,windows api

聴き比べがしたくなって、WASAPI排他モード・共有モードを切り替えられるようにした。

ソースコード

共有モード・排他モードを聴き比べてみると

聴き比べた結果だがほとんど差を感じなかった。なんとなく共有モードだと音量が補正されているような気もするが、気のせいかもしれない。

基底クラスでの凡ミス

切り替えられるように、基底クラス(sf::audio_base)を作って純粋仮想関数を定義し、排他・共有それぞれ実装クラス(wasapi_exclusive_timer,wasapi_shared_timer)にした。コントロールは基底クラスのスマートポインタで行う。

排他・共有を切り替えるときに既存のインスタンスをDelete(reset)して、新規にNewするのであるがその際「WASAPI Audio Clientはまだ使用中です。」というエラーが出る。各実装クラスではきちっとWASAPIインターフェースをReleaseしているのにも関わらずである。

ソースコードをよくみたら、基底クラスで仮想デストラクタを定義するのを忘れていた。なので実装クラスのデストラクタが呼ばれないのだった。凡ミスだ。。