このコードを実行すると:
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つとして戻ってきます。
次に、MIXERCONTROL_CONTROLTYPE_VOLUMEコントロールを取得して、サポートされている各チャンネルの音量を設定し、スピーカー間で音楽を前後にパンするように(左から右に)、音量コントロールをさまざまなチャンネルのさまざまなレベルに設定しています。
明らかに、Vistaでは、チャネルが1つしかないため、このアプローチは機能しません。音量を設定できますが、両方のチャンネルに同時に設定できます。
このデバイスのMIXERCONTROL_CONTROLTYPE_PANを取得しようとしましたが、それは有効なコントロールではありませんでした。
したがって、MMSystemの専門家全員にとっての質問は、これです。左右のバランスを調整するには、どのタイプの制御を取得する必要がありますか?あるいは、もっと良い方法はありますか?XPとVistaの両方で動作するソリューションが欲しいのですが。
コンピューターの詳細:VistaUltimta32ビットSP1およびすべての最新パッチを実行しています。オーディオは、Vistaのサウンドパネルを介してすべて適切にアドレス指定(制御)できる4つのスピーカーが接続されたCreative Audigy2ZSカードによって提供されます。ドライバーはCreativeのサイト(SBAX_PCDRV_LB_2_18_0001)で最新です。Vistaのサウンドはモノラルに設定されておらず、すべてのチャンネルがサウンドパネルから表示および制御できます。
「XP互換モード」でプログラムを実行しても、この問題の動作は変わりません。