2010-12-06 11 views
6

私はポートミキサーを中心としたAudacityのバグを修正しようとしています。出力/入力レベルは、portmixerのmacバージョンを使用して設定できますが、必ずしもそうではありません。私はportmixerのウィンドウコードをデバッグしてそこで動作させようとしています。IAudioEndpointVolume :: SetMasterVolumeLevelScalarでUSB/Firewireオーディオインターフェイスのマスターボリュームを設定できないのはなぜですか?

IAudioEndpointVolume :: SetMasterVolumeLevelScalarを使用してマスターボリュームを設定すると、オンボードサウンドは正常に動作しますが、RME Fireface 400などの外部USBまたはFirewireインターフェイスを使用すると、ウィンドウのサウンドコントロールに反映されますが、出力ボリュームは変更されませんそのデバイス用のパネル、およびシステムミキサーにも表示されます。

また、システムミキサー(タスクバー内)のマスタースライダーを変更しても効果はありません。サウンドカードは、システムが指示するレベルに関係なく、同じ(フル)レベルを出力します。出力レベルを変更する唯一の方法は、ハードウェア開発者がカードに与えるカスタムアプリケーションを使用することです。

IAudioEndpointVolume :: QueryHardwareSupport関数はENDPOINT_HARDWARE_SUPPORT_VOLUMEを返すので、これを実行できるはずです。

この動作は、多くのデバイスで入力と出力の両方に発生します。

これはおそらくウィンドウのバグですか?

これを回避するには、出力をエミュレート(スケーリング)することができますが、機能的には同じではないため好ましくありません。オーディオインターフェイスにスケーリングを行う方がよい。

+0

おそらく、このデバイスは標準のWindowsメソッドを実際に実装していないのかもしれません。ベンダーのアプリケーションをデバッグし、それが何をしているのかを調べることができます。おそらくカスタムコマンドなどを送信している可能性があります。 – Luke

+0

これはデバイス間で再現可能ですか?これは、1つのデバイスにのみ固有のハードウェアのバグかもしれません。 – blueberryfields

+0

はい、この影響を受けるデバイスが多数あり、その動作は再現可能です。 –

答えて

0

あなたが話すカードのように、RMEのように、マスターやその他のレベルをソフトウェアで設定することは簡単ではありません。これはWindowsのバグではありません。 ENDPOINT_HARDWARE_SUPPORT_VOLUMEを返すことはバグですが、それはおそらくWindows自体ではなく、ドライバレベルからのものだと主張することができます。

私が今までに見つけた唯一の解決策は、ベンダが提供するソフトウェアにデバッガを接続(またはdllフックを追加)して、DeviceIOControlの呼び出し(ハードウェアとの会話に使用されるもの)を調べることですベンダーソフトウェアのボリューム。すべての単一のカードのためにこれを行うにはかなり難しいが、おそらくプロカードのカップルのために行う価値がある。特にAudacityの場合、オープンソースのオーディオソフトウェアの場合、実際にはそれほど悪くはないので、カードの音量をそれで設定できれば、本当に満足している人もいると思います。 (私たちがRME Multifaceを独占的に使用していた時、私はDeviceIOControlの呼び出しを理解するのにかなりの時間を費やしましたが、最終的には、マトリックスの任意の点についてdBで音量を設定できるので確かに価値がありました)

関連する問題