Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/base/UIni.pas
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,7 @@ TIni = class

AudioVolume: integer;
VocalsVolume: integer;
LastPartialVocalsVolume: integer;
SfxVolume: integer;
BackgroundMusicVolume: integer;

Expand Down Expand Up @@ -1631,6 +1632,7 @@ procedure TIni.Load();

AudioVolume := ReadVolumePercent('Sound', 'AudioVolume', 100);
VocalsVolume := ReadVolumePercent('Sound', 'VocalsVolume', 100);
LastPartialVocalsVolume := ReadVolumePercent('Sound', 'LastPartialVocalsVolume', 0);
SfxVolume := ReadVolumePercent('Sound', 'SfxVolume', 100);
PreviewVolume := ReadVolumePercent('Sound', 'PreviewVolume', 30);
BackgroundMusicVolume := ReadVolumePercent('Sound', 'BackgroundMusicVolume', 40);
Expand Down Expand Up @@ -1951,6 +1953,7 @@ procedure TIni.Save;
// Volume Settings
IniFile.WriteInteger('Sound', 'AudioVolume', AudioVolume);
IniFile.WriteInteger('Sound', 'VocalsVolume', VocalsVolume);
IniFile.WriteInteger('Sound', 'LastPartialVocalsVolume', LastPartialVocalsVolume);
IniFile.WriteInteger('Sound', 'SfxVolume', SfxVolume);
IniFile.WriteInteger('Sound', 'BackgroundMusicVolume', BackgroundMusicVolume);
IniFile.WriteInteger('Sound', 'PreviewVolume', PreviewVolume);
Expand Down
31 changes: 29 additions & 2 deletions src/base/UMusic.pas
Original file line number Diff line number Diff line change
Expand Up @@ -666,7 +666,8 @@ function AudioInput(): IAudioInput;
function AudioDecoders(): TInterfaceList;

procedure SetAudioVolumePercent(Value: integer);
procedure SetVocalsVolumePercent(Value: integer);
procedure SetVocalsVolumePercent(Value: integer; UpdatePartialVolume: boolean = false);
procedure ToggleVocalsVolume;
procedure SetSfxVolumePercent(Value: integer);
procedure SetPreviewVolumePercent(Value: integer);
procedure SetBackgroundMusicVolumePercent(Value: integer);
Expand Down Expand Up @@ -815,7 +816,7 @@ procedure SetAudioVolumePercent(Value: integer);
Playback.SetVolume(Clamped / 100);
end;

procedure SetVocalsVolumePercent(Value: integer);
procedure SetVocalsVolumePercent(Value: integer; UpdatePartialVolume: boolean);
var
Clamped: integer;
Playback: IAudioPlayback;
Expand All @@ -828,11 +829,37 @@ procedure SetVocalsVolumePercent(Value: integer);
Clamped := Value;

Ini.VocalsVolume := Clamped;
if UpdatePartialVolume then
Ini.LastPartialVocalsVolume := Clamped;

Playback := AudioPlayback();
if assigned(Playback) then
Playback.SetVocalsBalance(Clamped / 100);
end;

procedure ToggleVocalsVolume;
var
TargetPercent: integer;
VolumeChanged: boolean;
begin
if Ini.VocalsVolume >= 100 then
begin
TargetPercent := Ini.LastPartialVocalsVolume;
if (TargetPercent <= 0) or (TargetPercent >= 100) then
TargetPercent := 0;
end
else if Ini.VocalsVolume > 0 then
TargetPercent := 0
else
TargetPercent := 100;

VolumeChanged := Ini.VocalsVolume <> TargetPercent;
SetVocalsVolumePercent(TargetPercent, false);

if VolumeChanged then
Ini.Save;
end;

procedure SetSfxVolumePercent(Value: integer);
var
Clamped: integer;
Expand Down
18 changes: 1 addition & 17 deletions src/media/UAudioPlaybackBase.pas
Original file line number Diff line number Diff line change
Expand Up @@ -349,24 +349,8 @@ procedure TAudioPlaybackBase.Pause;
end;

procedure TAudioPlaybackBase.ToggleKaraoke;
var
TargetPercent: integer;
VolumeChanged: boolean;
begin
if not assigned(KaraokeMusicStream) then
Exit;

if FVocalsShare > 0.5 then
TargetPercent := 0
else
TargetPercent := 100;

VolumeChanged := Ini.VocalsVolume <> TargetPercent;
Ini.VocalsVolume := TargetPercent;
SetVocalsBalance(TargetPercent / 100);

if VolumeChanged then
Ini.Save;
ToggleVocalsVolume;
end;

procedure TAudioPlaybackBase.Stop;
Expand Down
1 change: 1 addition & 0 deletions src/media/UMedia_dummy.pas
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ procedure TAudio_Dummy.Play;

procedure TAudio_Dummy.ToggleKaraoke;
begin
ToggleVocalsVolume;
end;

procedure TAudio_Dummy.Pause;
Expand Down
24 changes: 19 additions & 5 deletions src/screens/UScreenOptionsSound.pas
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ TScreenOptionsSound = class(TOptionsMenu)
SfxVolumeSelectId: integer;
PreviewVolumeSelectId: integer;
function AddVolumeSlider(const Text: UTF8String; var Data: integer): integer;
procedure ApplyRealtimeSoundSettings;
procedure ApplyRealtimeSoundSettings(UpdatePartialVocalsVolume: boolean = false);
function IsVolumeSlider(SelectId: integer): boolean;
function CurrentVolumeSelectId: integer;
function StepVolumeSlider(Delta: integer): boolean;
Expand Down Expand Up @@ -115,8 +115,12 @@ procedure EnsureVolumePercentOptions;

function TScreenOptionsSound.ParseInput(PressedKey: cardinal;
CharCode: UCS4Char; PressedDown: boolean): boolean;
var
PrevVocalsVolume: integer;
begin
Result := true;
PrevVocalsVolume := Ini.VocalsVolume;

if (PressedDown) then
begin // Key Down
case PressedKey of
Expand All @@ -139,6 +143,13 @@ function TScreenOptionsSound.ParseInput(PressedKey: cardinal;
begin
ScreenPopupHelp.ShowPopup();
end;
SDLK_K:
begin
ToggleVocalsVolume;
AudioPlayback.PlaySound(SoundLib.Option);
SyncVolumeSlidersFromIni;
Exit;
end;
SDLK_RETURN:
begin
if SelInteraction = ord(iBackButton) then
Expand Down Expand Up @@ -182,14 +193,17 @@ function TScreenOptionsSound.ParseInput(PressedKey: cardinal;
end;
end;

ApplyRealtimeSoundSettings;
ApplyRealtimeSoundSettings(Ini.VocalsVolume <> PrevVocalsVolume);
SyncVolumeSlidersFromIni;
end;

function TScreenOptionsSound.ParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: integer): boolean;
var
PrevVocalsVolume: integer;
begin
PrevVocalsVolume := Ini.VocalsVolume;
Result := inherited ParseMouse(MouseButton, BtnDown, X, Y);
ApplyRealtimeSoundSettings;
ApplyRealtimeSoundSettings(Ini.VocalsVolume <> PrevVocalsVolume);
SyncVolumeSlidersFromIni;
end;

Expand Down Expand Up @@ -332,13 +346,13 @@ function TScreenOptionsSound.StepVolumeSlider(Delta: integer): boolean;
Result := true;
end;

procedure TScreenOptionsSound.ApplyRealtimeSoundSettings;
procedure TScreenOptionsSound.ApplyRealtimeSoundSettings(UpdatePartialVocalsVolume: boolean);
var
MusicOptionValue: integer;
begin
SetAudioVolumePercent(Ini.AudioVolume);

SetVocalsVolumePercent(Ini.VocalsVolume);
SetVocalsVolumePercent(Ini.VocalsVolume, UpdatePartialVocalsVolume);

SetSfxVolumePercent(Ini.SfxVolume);

Expand Down
7 changes: 5 additions & 2 deletions src/screens/UScreenPopup.pas
Original file line number Diff line number Diff line change
Expand Up @@ -1617,7 +1617,10 @@ function TScreenPopupHelp.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; P
SDLK_K:
begin
ApplyVolumeChanges(PrevAudio, PrevVocals, PrevSfx, PrevPreview);
ShowPopup(ResumeSingAfterPopup);
ToggleVocalsVolume;
SyncVolumeSliders;
if ScreenOptionsSound <> nil then
ScreenOptionsSound.SyncVolumeSlidersFromIni;
Exit;
end;

Expand Down Expand Up @@ -1959,7 +1962,7 @@ procedure TScreenPopupHelp.ApplyVolumeChanges(const PrevAudio, PrevVocals, PrevS

if VolumeVocalsIndex <> PrevVocals then
begin
SetVocalsVolumePercent(EnsureRange(VolumeVocalsIndex, 0, 100));
SetVocalsVolumePercent(EnsureRange(VolumeVocalsIndex, 0, 100), true);
VolumeChanged := true;
end;

Expand Down
Loading