0

このコードを実行すると:

MIXERLINE MixerLine;
memset( &MixerLine, 0, sizeof(MIXERLINE) );
MixerLine.cbStruct = sizeof(MIXERLINE);
MixerLine.dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT;
mmResult = mixerGetLineInfo( (HMIXEROBJ)m_dwMixerHandle, &MixerLine, MIXER_GETLINEINFOF_COMPONENTTYPE );

XP MixerLine.cChannelsでは、サウンドカードがサポートするチャンネル数として返されます。多くの場合2、最近はもっと多くの場合。

Vistaの場合、MixerLine.cChannelsは1つとして戻ってきます。

次に、MIXERC​​ONTROL_CONTROLTYPE_VOLUMEコントロールを取得して、サポートされている各チャンネルの音量を設定し、スピーカー間で音楽を前後にパンするように(左から右に)、音量コントロールをさまざまなチャンネルのさまざまなレベルに設定しています。

明らかに、Vistaでは、チャネルが1つしかないため、このアプローチは機能しません。音量を設定できますが、両方のチャンネルに同時に設定できます。

このデバイスのMIXERC​​ONTROL_CONTROLTYPE_PANを取得しようとしましたが、それは有効なコントロールではありませんでした。

したがって、MMSystemの専門家全員にとっての質問は、これです。左右のバランスを調整するには、どのタイプの制御を取得する必要がありますか?あるいは、もっと良い方法はありますか?XPとVistaの両方で動作するソリューションが欲しいのですが。

コンピューターの詳細:VistaUltimta32ビットSP1およびすべての最新パッチを実行しています。オーディオは、Vistaのサウンドパネルを介してすべて適切にアドレス指定(制御)できる4つのスピーカーが接続されたCreative Audigy2ZSカードによって提供されます。ドライバーはCreativeのサイト(SBAX_PCDRV_LB_2_18_0001)で最新です。Vistaのサウンドはモノラルに設定されておらず、すべてのチャンネルがサウンドパネルから表示および制御できます。

「XP互換モード」でプログラムを実行しても、この問題の動作は変わりません。

4

2 に答える 2

1

アプリケーションを「XP 互換性」モードで実行すると、ミキサー API は XP での動作に非常に近くなるはずです。

XP モードで実行していない場合、ミキサー API はミックス形式を反映します。PC のオーディオ ソリューションがモノラル用に構成されている場合は、1 つのチャネルのみが表示されますが、マシンがマルチチャネル出力用に構成されている場合は、ミキサー API はそれを反映する必要があります。

スピーカー チューニング ウィザードを実行して、オーディオ ソリューション用に構成されたチャンネル数を決定できます。

于 2008-10-22T16:28:01.587 に答える
0

Microsoftieに長年携わっている Larry Osterman は、Vista ですべてのオーディオ関連の作業をやり直したチームに所属していたため、このような問題について議論するブログを持っています。

このブログ投稿へのコメントで、彼は、アプリケーションで制御されたバランスは、彼らが必要としているものではないことを示しているようです。

CN さん、実際には、アプリケーションがそのバランスを制御することが適切な状況を認識していません。そうは言っても、アプリケーションの個々のチャネル ボリュームをサポートしていますが、アプリでそれを使用しないことを強くお勧めします。

彼はまた、サウンドを片側から反対側にパンすることもできるが、それはハードウェアがサポートしているかどうかに依存することを示しています:

Joku、オーディオ ソリューションが実装するボリューム コントロールを公開しています。パンを実行できる場合は、パンを実行します (実際には、左右のチャンネルに個別のスライダーを公開します)。

これで、MIXERCONTROL_CONTROLTYPE_PAN失敗した理由が説明されました。システムのオーディオ ハードウェアがサポートしていません。

于 2008-10-22T15:09:55.130 に答える