ミニタイマーのアラーム音だが、今はMessageBeepである。次にSIDエミュレータを使って音を鳴らしてみようとしている。SIDエミュレータはreSIDをベースにして、それを鳴らすためのWASAPIのラッパーの構造をどうしようかといろいろなソースコードを見ているところだ。
MSDNのサンプルと、PlayPcmWin・JUCEのWASAPI部分を今まで何度となく読んできたが、何故かあまり記憶に残っていなくて、再度読み直しているのである。
話は少し変わるが、PlayPcmWinのWASAPI情報の中に、
Windows7で、サンプリングレート変換を行うAPIが新設されましたが、完成度がいまいちです。PlayPcmWinのWASAPI共有モードでは、このWindows7の新機能を使用してサンプリングレート変換を行っています
という記述があって、そんなのあったっけと思いMSDNのチェックしたらIAudioClockAdjustmentがそうだった。IAudioClockAdjustmentはIAudioClient::Initializeメソッドの第二引数にAUDCLNT_STREAMFLAGS_RATEADJUSTを指定して初期化した後、IAudioClient::GetService()で取得できる。 このインターフェースのSetSampleRateメソッドで指定すると、もとのサンプルレートで書きこめば変換されるようである。そのあたりのPlayPcmWinのソースコードは下記である。
ただし変換品質はあまり良くないらしい。
http://61.115.203.100/mypage/entry/2721/20101016/
私はIAudioRenderClientのみしかいじってなかったし、WASAPIはその他多くのインターフェースが用意されているがほとんど知らない(IAudioSessionXXX系など全く)ので、WASAPIのMSDNドキュメントをもう一度よく読もうと思った次第である。
話はもとにもどるが、ラッパーの構造はまだモヤッとした感じであり、まとまっていない。ミニタイマーで使うだけなら共有モードでいいのだけれど、汎用性を持たせようと考えているので。もう少しWASAPIの理解度を深めて、いろいろなソースコードを読んでからにする。PsycleもWASAPIに対応しているようだしコードを読んでみるかな。。