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

このエントリーをはてなブックマークに追加
はてなブックマーク - WASAPI 排他モード・共有モードを切り替えられるようにした。
Share on Facebook
Bookmark this on Yahoo Bookmark

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

ソースコード

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

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

基底クラスでの凡ミス

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

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

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

関連記事:

  1. WASAPI – About the Windows Core Audio APIs
  2. WASAPI – About the Windows Core Audio APIs(2)
  3. WASAPI 排他モードサンプル(タイマモード)

コメントを残す

メールアドレスが公開されることはありません。


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>