6

portmixer に関連する Audacity のバグを修正しようとしています。出力/入力レベルは Mac バージョンの portmixer を使用して設定できますが、Windows では常にではありません。portmixer のウィンドウ コードをデバッグして、そこで動作するようにしています。

IAudioEndpointVolume::SetMasterVolumeLevelScalar を使用してマスター ボリュームを設定すると、オンボード サウンドには問題なく機能しますが、RME Fireface 400 のようなプロ用外部 USB または Firewire インターフェイスを使用すると、そのデバイスの Windows のサウンド コントロール パネルに反映されますが、出力ボリュームは変化しません。 、およびシステムミキサーでも。

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

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

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

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

出力をエミュレート (スケーリング) することでこれを回避することは可能ですが、機能的に同一ではないため、これは好ましくありません。オーディオ インターフェイスにスケーリングを行わせることをお勧めします (特に入力にプリアンプが含まれる場合)。

4

1 に答える 1

0

あなたが話しているカード(RMEのようなもの)は、ソフトウェアを介したマスターまたはその他のレベルの設定をサポートしていないだけで、それについてできることはあまりありません。これは Windows のバグではありません。ENDPOINT_HARDWARE_SUPPORT_VOLUME を戻すことはバグであると主張する人もいるかもしれませんが、それは Windows 自体ではなく、ドライバー レベルに起因する可能性があります。

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

于 2011-09-21T08:50:33.713 に答える