Vista版AVStream MiniDriverでアプリからのプロセスが来ない

はじめまして、smiley0825です。

現在AVStreamのMiniDriverとしてUSBAudioドライバを作成しております。

MSのDoc、並びにMSへ問い合わせた結果、XPとVistaでのアーキテクチャの
変更はなく、DriverとしてOSの違い(Audio全般の構成の変更)を意識する
必要はないとのことでしたので、XPとVistaを同じDriverとして作成しております。

機能としては、Wave IN/OUT, MIDI IN/OUTを考えており、
それぞれPINを一つのFilterに作るようにしております。

XPでは現状問題なく動作させることができました。
ただし、Vistaでは一部動作しておりません。
ちなみに、VistaはHome Premium (SP1) 32bitです。

[動作状況]
・デバイスは認識している。
・ASIOの規格に則ったASIO Driver(User Mode Driver)を経由して、
アプリからKS(Kernel Stream)をダイレクトにアクセスするようにすると、
WaveのIN/OUTは正常に動作しております。(正常に音が出力される。)
・KsStudioでは、Wave OUTで正常に音が出力されている。
・対象のデバイスを規定のデバイスに設定し、WindowsMediaPlayerからWavファイルを再生すると、
正常に動作せず、音が出力されません。
⇒Pin-Centricで作っており、PinのDispatherにProcessのコールバックを登録しているのですが、転送開始時に一度
コールされますが、その後USBでの転送完了により、KSのCloneポインタをすべて削除しても次のProcessのコールバック
が一向に呼ばれません。
XPでは、Processのコールバックが呼ばれ続けております。
MediaPlayer以外に、コントロールパネルのサウンド、オーディオデバイスの設定から、デバイスのテストを実施した際も
同様の動作となります。

MSサポートによると、XPで顕在化されていなかった問題がVistaで出たのではないかと伺ったのですが、
どなたか、Vista対応として注意すべき点、Processが呼ばれない点などに心当たりなどあるかたはいらっしゃいませんでしょうか?

お願いします。

書かれているような

書かれているような症状の経験が無いので、良くはわからないのですが...

>MSのDoc、並びにMSへ問い合わせた結果、XPとVistaでのアーキテクチャの
>変更はなく、DriverとしてOSの違い(Audio全般の構成の変更)を意識する
>必要はないとのことでしたので、XPとVistaを同じDriverとして作成しております。

そうでしょうか。
Vistaでは確か全体構成は同じでもAC97等のインハウスのサウンドドライバの構成が変わったので、XPで動いたのにVistaでは動かないということはあります。状況は違うのですが、RealtekのAC97のXP用ドライバがVistaにインストールできず、半年ぐらいしてVista対応ドライバが出るまではずっと「?」状態でした。

ところで、こんな事例もあります。
> Windows Vista Service Pack 1 をインストールするとサウンドに関する問題が発生する
http://support.microsoft.com/kb/948481/ja

> BPQA000171 Windows Vistaで、サウンドドライバを再インストール (再検出) する方法
http://h50222.www5.hp.com/support/RE594AA/os/77236.html

これらを参考にして、再インストールしてみてはいかがでしょうか。

それから、KsStudioで検証しているとのことで可能性は少ないですが、もしもインハウスのドライバが影響しているとすれば、オンボードのデバイスとの競合が疑わしいです。BIOSのサウンド設定を変えてみるとか、別のオンボード・サウンド・コントローラのマシンでテストしてみる、とかではいかがでしょう。

hidaka

KSPROPERTY_AUDIO_POSITIONを

KSPROPERTY_AUDIO_POSITIONをサポートしていなかったのが、原因だったようです。

現在サポートしてみて、再生デバイスの「テスト」で音が出力されるようになりました。
MediaPlayerでも、音が出力されるようになりましたが、一時停止操作をした際にフリーズしたり、
曲の再生が終了した際にブルースクリーンになったりと、まだ問題がありそうです。。。

KSPROPERTY_AUDIO_POSITIONに設定する、PlayOffsetとWriteOffsetですが、Pinのステートが
PAUSEになった時に、同じ値でないと音が出力されないのですが、そういった仕様なのでしょうか?