S.F. Page

Programming,Music,etc...

Windows Audio Session API

ミニタイマーのアラーム音だが、今はMessageBeepである。次にSIDエミュレータを使って音を鳴らしてみようとしている。SIDエミュレータはreSIDをベースにして、それを鳴らすためのWASAPIのラッパーの構造をどうしようかといろいろなソースコードを見ているところだ。

MSDNのサンプルと、PlayPcmWinJUCEの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に対応しているようだしコードを読んでみるかな。。