Werde es mal testen Danke.
EDIT:
Nein Funktioniert nicht deine Auslegung ist auf 1 Kanal beschränkt.
Es ändert sich nur der Linke Kanal.
Wenn die Trackbar zentriert ist soll die erste Hälfte für den Linken Kanal
und die andere für den Rechten zuständig sein.
Aber du darfst es gerne selbst nochmal testen.
Delphi-Quellcode:
procedure TAudioVolume.tbMasterBalanceChange(Sender: TObject);
var
Balance: single;
Chans: UINT;
Channels: TChannels;
MasterVol: single;
HR: HResult;
BalanceOffset: Single;
function CheckValue(const aValue: Single): Single;
begin
Result := aValue;
if Result > 1.0 then Result := 1.0 else
if Result < 0 then Result := 0;
end;
begin
if AudioEndpointVolume = nil then
exit;
HR := AudioEndpointVolume.GetChannelCount(Chans);
if HR = S_OK then
begin
if Chans < 2 then
exit;
end else
exit;
MasterVol := GetMasterVolume();
Channels.LeftVol := MasterVol;
Channels.RightVol := MasterVol;
BalanceOffset := tbMasterBalance.Position * 0.01;
if BalanceOffset < 0 then
Channels.RightVol := CheckValue(MasterVol + BalanceOffset)
else
if BalanceOffset > 0 then
Channels.LeftVol := CheckValue(MasterVol - BalanceOffset);
AudioEndpointVolume.SetChannelVolumeLevelScalar(0, Channels.LeftVol, @GUID_TAudioVolume);
AudioEndpointVolume.SetChannelVolumeLevelScalar(1, Channels.RightVol, @GUID_TAudioVolume);
end;
gruss