From c6da424a1508eae4538244b4d00ddf1f0436b1b7 Mon Sep 17 00:00:00 2001 From: tobigun Date: Sat, 10 May 2008 12:28:56 +0000 Subject: Volumes are floating point values (single) now. The range changed from [0 .. 100] to [0.0 .. 1.0] git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@1081 b956fd51-792f-4845-bead-9b4dfca2ff2c --- Game/Code/Classes/UAudioInput_Bass.pas | 16 ++++---- Game/Code/Classes/UAudioInput_Portaudio.pas | 23 ++++------- Game/Code/Classes/UAudioPlaybackBase.pas | 10 ++--- Game/Code/Classes/UAudioPlayback_Bass.pas | 28 +++++++------- Game/Code/Classes/UAudioPlayback_SDL.pas | 8 ++-- Game/Code/Classes/UAudioPlayback_SoftMixer.pas | 53 +++++++++++++------------- Game/Code/Classes/UMedia_dummy.pas | 12 +++--- Game/Code/Classes/UMusic.pas | 14 +++---- Game/Code/Classes/URecord.pas | 10 ++--- Game/Code/Screens/UScreenCredits.pas | 2 +- Game/Code/Screens/UScreenEditSub.pas | 4 +- Game/Code/Screens/UScreenOptionsRecord.pas | 20 ++++++---- Game/Code/Screens/UScreenSong.pas | 25 +++++++----- 13 files changed, 113 insertions(+), 112 deletions(-) diff --git a/Game/Code/Classes/UAudioInput_Bass.pas b/Game/Code/Classes/UAudioInput_Bass.pas index b4d0e52b..d086a23a 100644 --- a/Game/Code/Classes/UAudioInput_Bass.pas +++ b/Game/Code/Classes/UAudioInput_Bass.pas @@ -52,8 +52,8 @@ type function Start(): boolean; override; function Stop(): boolean; override; - function GetVolume(): integer; override; - procedure SetVolume(Volume: integer); override; + function GetVolume(): single; override; + procedure SetVolume(Volume: single); override; end; var @@ -270,7 +270,7 @@ begin RecordStream := 0; end; -function TBassInputDevice.GetVolume(): integer; +function TBassInputDevice.GetVolume(): single; var SourceIndex: integer; lVolume: Single; @@ -291,10 +291,10 @@ begin Log.LogError('BASS_RecordGetInput: ' + AudioCore.ErrorGetString() , 'TBassInputDevice.GetVolume'); Exit; end; - Result := Round(lVolume * 100); + Result := lVolume; end; -procedure TBassInputDevice.SetVolume(Volume: integer); +procedure TBassInputDevice.SetVolume(Volume: single); var SourceIndex: integer; begin @@ -308,12 +308,12 @@ begin end; // clip volume to valid range - if (Volume > 100) then - Volume := 100 + if (Volume > 1.0) then + Volume := 1.0 else if (Volume < 0) then Volume := 0; - if (not BASS_RecordSetInput(SourceIndex, 0, Volume/100)) then + if (not BASS_RecordSetInput(SourceIndex, 0, Volume)) then begin Log.LogError('BASS_RecordSetInput: ' + AudioCore.ErrorGetString() , 'TBassInputDevice.SetVolume'); end; diff --git a/Game/Code/Classes/UAudioInput_Portaudio.pas b/Game/Code/Classes/UAudioInput_Portaudio.pas index 183c482d..50543e17 100644 --- a/Game/Code/Classes/UAudioInput_Portaudio.pas +++ b/Game/Code/Classes/UAudioInput_Portaudio.pas @@ -51,8 +51,8 @@ type function Start(): boolean; override; function Stop(): boolean; override; - function GetVolume(): integer; override; - procedure SetVolume(Volume: integer); override; + function GetVolume(): single; override; + procedure SetVolume(Volume: single); override; end; function MicrophoneCallback(input: Pointer; output: Pointer; frameCount: Longword; @@ -214,33 +214,26 @@ begin RecordStream := nil; end; -function TPortaudioInputDevice.GetVolume(): integer; +function TPortaudioInputDevice.GetVolume(): single; begin Result := 0; {$IFDEF UsePortmixer} if (Mixer <> nil) then - begin - Result := Round(Px_GetInputVolume(Mixer) * 100); - // clip to valid range - if (Result > 100) then - Result := 100 - else if (Result < 0) then - Result := 0; - end; + Result := Px_GetInputVolume(Mixer); {$ENDIF} end; -procedure TPortaudioInputDevice.SetVolume(Volume: integer); +procedure TPortaudioInputDevice.SetVolume(Volume: single); begin {$IFDEF UsePortmixer} if (Mixer <> nil) then begin // clip to valid range - if (Volume > 100) then - Volume := 100 + if (Volume > 1.0) then + Volume := 1.0 else if (Volume < 0) then Volume := 0; - Px_SetInputVolume(Mixer, Volume / 100); + Px_SetInputVolume(Mixer, Volume); end; {$ENDIF} end; diff --git a/Game/Code/Classes/UAudioPlaybackBase.pas b/Game/Code/Classes/UAudioPlaybackBase.pas index f1fe26f9..0251b8e8 100644 --- a/Game/Code/Classes/UAudioPlaybackBase.pas +++ b/Game/Code/Classes/UAudioPlaybackBase.pas @@ -28,7 +28,7 @@ type procedure Play; procedure Pause; procedure Stop; - procedure FadeIn(Time: real; TargetVolume: integer); + procedure FadeIn(Time: real; TargetVolume: single); procedure SetPosition(Time: real); function GetPosition: real; @@ -39,8 +39,8 @@ type // function SetOutputDevice(Device: TAudioOutputDevice): boolean; function GetOutputDeviceList(): TAudioOutputDeviceList; - procedure SetAppVolume(Volume: integer); virtual; abstract; - procedure SetVolume(Volume: integer); + procedure SetAppVolume(Volume: single); virtual; abstract; + procedure SetVolume(Volume: single); procedure SetLoop(Enabled: boolean); procedure Rewind; @@ -149,13 +149,13 @@ begin Result := true; end; -procedure TAudioPlaybackBase.SetVolume(Volume: Integer); +procedure TAudioPlaybackBase.SetVolume(Volume: single); begin if assigned(MusicStream) then MusicStream.Volume := Volume; end; -procedure TAudioPlaybackBase.FadeIn(Time: real; TargetVolume: integer); +procedure TAudioPlaybackBase.FadeIn(Time: real; TargetVolume: single); begin if assigned(MusicStream) then MusicStream.FadeIn(Time, TargetVolume); diff --git a/Game/Code/Classes/UAudioPlayback_Bass.pas b/Game/Code/Classes/UAudioPlayback_Bass.pas index 2667bf6f..53fbd921 100644 --- a/Game/Code/Classes/UAudioPlayback_Bass.pas +++ b/Game/Code/Classes/UAudioPlayback_Bass.pas @@ -38,7 +38,7 @@ type procedure Play(); override; procedure Pause(); override; procedure Stop(); override; - procedure FadeIn(Time: real; TargetVolume: integer); override; + procedure FadeIn(Time: real; TargetVolume: single); override; procedure Close(); override; @@ -46,8 +46,8 @@ type procedure SetLoop(Enabled: boolean); override; function GetLength(): real; override; function GetStatus(): TStreamStatus; override; - function GetVolume(): integer; override; - procedure SetVolume(volume: integer); override; + function GetVolume(): single; override; + procedure SetVolume(volume: single); override; procedure AddSoundEffect(effect: TSoundEffect); override; procedure RemoveSoundEffect(effect: TSoundEffect); override; @@ -83,7 +83,7 @@ type function GetName: String; override; function InitializePlayback(): boolean; override; function FinalizePlayback: boolean; override; - procedure SetAppVolume(Volume: integer); override; + procedure SetAppVolume(Volume: single); override; end; TBassOutputDevice = class(TAudioOutputDevice) @@ -132,13 +132,13 @@ begin BASS_ChannelPlay(Handle, restart); end; -procedure TBassPlaybackStream.FadeIn(Time: real; TargetVolume: integer); +procedure TBassPlaybackStream.FadeIn(Time: real; TargetVolume: single); begin // start stream BASS_ChannelPlay(Handle, true); // start fade-in: slide from fadeStart- to fadeEnd-volume in FadeInTime - BASS_ChannelSlideAttribute(Handle, BASS_ATTRIB_VOL, TargetVolume/100, Trunc(Time * 1000)); + BASS_ChannelSlideAttribute(Handle, BASS_ATTRIB_VOL, TargetVolume, Trunc(Time * 1000)); end; procedure TBassPlaybackStream.Pause(); @@ -156,7 +156,7 @@ begin Reset(); end; -function TBassPlaybackStream.GetVolume(): integer; +function TBassPlaybackStream.GetVolume(): single; var lVolume: single; begin @@ -167,18 +167,18 @@ begin Result := 0; Exit; end; - Result := Round(lVolume * 100); + Result := Round(lVolume); end; -procedure TBassPlaybackStream.SetVolume(volume: integer); +procedure TBassPlaybackStream.SetVolume(volume: single); begin // clamp volume if volume < 0 then volume := 0; - if volume > 100 then - volume := 100; + if volume > 1.0 then + volume := 1.0; // set volume - BASS_ChannelSetAttribute(Handle, BASS_ATTRIB_VOL, volume/100); + BASS_ChannelSetAttribute(Handle, BASS_ATTRIB_VOL, volume); end; function TBassPlaybackStream.GetPosition: real; @@ -576,10 +576,10 @@ begin end; end; -procedure TAudioPlayback_Bass.SetAppVolume(Volume: integer); +procedure TAudioPlayback_Bass.SetAppVolume(Volume: single); begin // Sets Volume only for this Application (now ranges from 0..10000) - BASS_SetConfig(BASS_CONFIG_GVOL_STREAM, Volume*100); + BASS_SetConfig(BASS_CONFIG_GVOL_STREAM, Round(Volume*10000)); end; diff --git a/Game/Code/Classes/UAudioPlayback_SDL.pas b/Game/Code/Classes/UAudioPlayback_SDL.pas index ed5a208b..39ecc72f 100644 --- a/Game/Code/Classes/UAudioPlayback_SDL.pas +++ b/Game/Code/Classes/UAudioPlayback_SDL.pas @@ -34,7 +34,7 @@ type function FinalizeAudioPlaybackEngine(): boolean; override; public function GetName: String; override; - procedure MixBuffers(dst, src: PChar; size: Cardinal; volume: Integer); override; + procedure MixBuffers(dst, src: PChar; size: Cardinal; volume: Single); override; end; var @@ -134,11 +134,9 @@ begin Result := true; end; -procedure TAudioPlayback_SDL.MixBuffers(dst, src: PChar; size: Cardinal; volume: Integer); +procedure TAudioPlayback_SDL.MixBuffers(dst, src: PChar; size: Cardinal; volume: Single); begin - // Note: (volume * SDL_MIX_MAXVOLUME) may exceed High(Integer) - // if SDL_MIX_MAXVOLUME (=128 at the moment) changes - SDL_MixAudio(PUInt8(dst), PUInt8(src), size, volume * SDL_MIX_MAXVOLUME div 100); + SDL_MixAudio(PUInt8(dst), PUInt8(src), size, Round(volume * SDL_MIX_MAXVOLUME)); end; diff --git a/Game/Code/Classes/UAudioPlayback_SoftMixer.pas b/Game/Code/Classes/UAudioPlayback_SoftMixer.pas index 431653d0..714e19ae 100644 --- a/Game/Code/Classes/UAudioPlayback_SoftMixer.pas +++ b/Game/Code/Classes/UAudioPlayback_SoftMixer.pas @@ -32,14 +32,15 @@ type Status: TStreamStatus; Loop: boolean; - _volume: integer; InternalLock: PSDL_Mutex; SoundEffects: TList; + _volume: single; + FadeInStartTime, FadeInTime: cardinal; - FadeInStartVolume, FadeInTargetVolume: integer; + FadeInStartVolume, FadeInTargetVolume: single; procedure Reset(); @@ -57,14 +58,14 @@ type procedure Play(); override; procedure Pause(); override; procedure Stop(); override; - procedure FadeIn(Time: real; TargetVolume: integer); override; + procedure FadeIn(Time: real; TargetVolume: single); override; procedure Close(); override; function GetLength(): real; override; function GetStatus(): TStreamStatus; override; - function GetVolume(): integer; override; - procedure SetVolume(Volume: integer); override; + function GetVolume(): single; override; + procedure SetVolume(Volume: single); override; function GetLoop(): boolean; override; procedure SetLoop(Enabled: boolean); override; function GetPosition: real; override; @@ -87,13 +88,13 @@ type mixerBuffer: PChar; internalLock: PSDL_Mutex; - appVolume: integer; + appVolume: single; procedure Lock(); {$IFDEF HasInline}inline;{$ENDIF} procedure Unlock(); {$IFDEF HasInline}inline;{$ENDIF} - function GetVolume(): integer; - procedure SetVolume(volume: integer); + function GetVolume(): single; + procedure SetVolume(volume: single); public constructor Create(Engine: TAudioPlayback_SoftMixer); destructor Destroy(); override; @@ -101,7 +102,7 @@ type procedure RemoveStream(stream: TAudioPlaybackStream); function ReadData(Buffer: PChar; BufSize: integer): integer; - property Volume: integer READ GetVolume WRITE SetVolume; + property Volume: single READ GetVolume WRITE SetVolume; end; TAudioPlayback_SoftMixer = class(TAudioPlaybackBase) @@ -122,12 +123,12 @@ type function InitializePlayback(): boolean; override; function FinalizePlayback: boolean; override; - procedure SetAppVolume(Volume: integer); override; + procedure SetAppVolume(Volume: single); override; function GetMixer(): TAudioMixerStream; {$IFDEF HasInline}inline;{$ENDIF} function GetAudioFormatInfo(): TAudioFormatInfo; - procedure MixBuffers(dst, src: PChar; size: Cardinal; volume: Integer); virtual; + procedure MixBuffers(dst, src: PChar; size: Cardinal; volume: Single); virtual; end; implementation @@ -150,7 +151,7 @@ begin activeStreams := TList.Create; internalLock := SDL_CreateMutex(); - appVolume := 100; + appVolume := 1.0; end; destructor TAudioMixerStream.Destroy(); @@ -172,14 +173,14 @@ begin SDL_mutexV(internalLock); end; -function TAudioMixerStream.GetVolume(): integer; +function TAudioMixerStream.GetVolume(): single; begin Lock(); result := appVolume; Unlock(); end; -procedure TAudioMixerStream.SetVolume(volume: integer); +procedure TAudioMixerStream.SetVolume(volume: single); begin Lock(); appVolume := volume; @@ -257,7 +258,7 @@ begin begin // mix stream-data with mixer-buffer // Note: use Self.appVolume instead of Self.Volume to prevent recursive locking - Engine.MixBuffers(Buffer, mixerBuffer, size, appVolume * stream.Volume div 100); + Engine.MixBuffers(Buffer, mixerBuffer, size, appVolume * stream.Volume); end; end; @@ -388,7 +389,7 @@ begin if not InitFormatConversion() then Exit; - _volume := 100; + _volume := 1.0; result := true; end; @@ -415,7 +416,7 @@ begin mixer.AddStream(Self); end; -procedure TGenericPlaybackStream.FadeIn(Time: real; TargetVolume: integer); +procedure TGenericPlaybackStream.FadeIn(Time: real; TargetVolume: single); begin FadeInTime := Trunc(Time * 1000); FadeInStartTime := SDL_GetTicks(); @@ -726,7 +727,7 @@ begin DecodeStream.Position := Time; end; -function TGenericPlaybackStream.GetVolume(): integer; +function TGenericPlaybackStream.GetVolume(): single; var FadeAmount: Single; begin @@ -745,7 +746,7 @@ begin else begin // fading in progress - _volume := Trunc(FadeAmount*FadeInTargetVolume + (1-FadeAmount)*FadeInStartVolume); + _volume := FadeAmount*FadeInTargetVolume + (1-FadeAmount)*FadeInStartVolume; end; end; // return current volume @@ -753,14 +754,14 @@ begin Unlock(); end; -procedure TGenericPlaybackStream.SetVolume(volume: integer); +procedure TGenericPlaybackStream.SetVolume(volume: single); begin Lock(); // stop fading FadeInTime := 0; // clamp volume - if (volume > 100) then - _volume := 100 + if (volume > 1.0) then + _volume := 1.0 else if (volume < 0) then _volume := 0 else @@ -850,13 +851,13 @@ begin result := playbackStream; end; -procedure TAudioPlayback_SoftMixer.SetAppVolume(Volume: integer); +procedure TAudioPlayback_SoftMixer.SetAppVolume(Volume: single); begin // sets volume only for this application MixerStream.Volume := Volume; end; -procedure TAudioPlayback_SoftMixer.MixBuffers(dst, src: PChar; size: Cardinal; volume: Integer); +procedure TAudioPlayback_SoftMixer.MixBuffers(dst, src: PChar; size: Cardinal; volume: Single); var SampleIndex: Cardinal; SampleInt: Integer; @@ -872,7 +873,7 @@ begin while (SampleIndex < size) do begin // apply volume and sum with previous mixer value - SampleInt := PSmallInt(@dst[SampleIndex])^ + PSmallInt(@src[SampleIndex])^ * volume div 100; + SampleInt := PSmallInt(@dst[SampleIndex])^ + Round(PSmallInt(@src[SampleIndex])^ * volume); // clip result if (SampleInt > High(SmallInt)) then SampleInt := High(SmallInt) @@ -889,7 +890,7 @@ begin while (SampleIndex < size) do begin // apply volume and sum with previous mixer value - SampleFlt := PSingle(@dst[SampleIndex])^ + PSingle(@src[SampleIndex])^ * volume/100; + SampleFlt := PSingle(@dst[SampleIndex])^ + PSingle(@src[SampleIndex])^ * volume; // clip result if (SampleFlt > 1.0) then SampleFlt := 1.0 diff --git a/Game/Code/Classes/UMedia_dummy.pas b/Game/Code/Classes/UMedia_dummy.pas index ad3aa94e..bb25a0aa 100644 --- a/Game/Code/Classes/UMedia_dummy.pas +++ b/Game/Code/Classes/UMedia_dummy.pas @@ -65,9 +65,9 @@ type function FinalizePlayback: boolean; function GetOutputDeviceList(): TAudioOutputDeviceList; - procedure FadeIn(Time: real; TargetVolume: integer); - procedure SetAppVolume(Volume: integer); - procedure SetVolume(Volume: integer); + procedure FadeIn(Time: real; TargetVolume: single); + procedure SetAppVolume(Volume: single); + procedure SetVolume(Volume: single); procedure SetLoop(Enabled: boolean); procedure Rewind; @@ -182,11 +182,11 @@ begin Result := DummyOutputDeviceList; end; -procedure Tmedia_dummy.SetAppVolume(Volume: integer); +procedure Tmedia_dummy.SetAppVolume(Volume: single); begin end; -procedure Tmedia_dummy.SetVolume(Volume: integer); +procedure Tmedia_dummy.SetVolume(Volume: single); begin end; @@ -194,7 +194,7 @@ procedure Tmedia_dummy.SetLoop(Enabled: boolean); begin end; -procedure Tmedia_dummy.FadeIn(Time: real; TargetVolume: integer); +procedure Tmedia_dummy.FadeIn(Time: real; TargetVolume: single); begin end; diff --git a/Game/Code/Classes/UMusic.pas b/Game/Code/Classes/UMusic.pas index 9977661f..9c029acd 100644 --- a/Game/Code/Classes/UMusic.pas +++ b/Game/Code/Classes/UMusic.pas @@ -148,15 +148,15 @@ type procedure SetPosition(Time: real); virtual; abstract; function GetLength(): real; virtual; abstract; function GetStatus(): TStreamStatus; virtual; abstract; - function GetVolume(): integer; virtual; abstract; - procedure SetVolume(Volume: integer); virtual; abstract; + function GetVolume(): single; virtual; abstract; + procedure SetVolume(Volume: single); virtual; abstract; function GetLoop(): boolean; virtual; abstract; procedure SetLoop(Enabled: boolean); virtual; abstract; public procedure Play(); virtual; abstract; procedure Pause(); virtual; abstract; procedure Stop(); virtual; abstract; - procedure FadeIn(Time: real; TargetVolume: integer); virtual; abstract; + procedure FadeIn(Time: real; TargetVolume: single); virtual; abstract; procedure GetFFTData(var data: TFFTData); virtual; abstract; function GetPCMData(var data: TPCMData): Cardinal; virtual; abstract; @@ -167,7 +167,7 @@ type property Length: real READ GetLength; property Position: real READ GetPosition WRITE SetPosition; property Status: TStreamStatus READ GetStatus; - property Volume: integer READ GetVolume WRITE SetVolume; + property Volume: single READ GetVolume WRITE SetVolume; property Loop: boolean READ GetLoop WRITE SetLoop; end; @@ -237,10 +237,10 @@ type function FinalizePlayback: boolean; function GetOutputDeviceList(): TAudioOutputDeviceList; - procedure SetAppVolume(Volume: integer); - procedure SetVolume(Volume: integer); + procedure SetAppVolume(Volume: single); + procedure SetVolume(Volume: single); procedure SetLoop(Enabled: boolean); - procedure FadeIn(Time: real; TargetVolume: integer); + procedure FadeIn(Time: real; TargetVolume: single); procedure Rewind; function Finished: boolean; diff --git a/Game/Code/Classes/URecord.pas b/Game/Code/Classes/URecord.pas index 55dedd1f..6d24e0f4 100644 --- a/Game/Code/Classes/URecord.pas +++ b/Game/Code/Classes/URecord.pas @@ -85,8 +85,8 @@ type function Start(): boolean; virtual; abstract; function Stop(): boolean; virtual; abstract; - function GetVolume(): integer; virtual; abstract; - procedure SetVolume(Volume: integer); virtual; abstract; + function GetVolume(): single; virtual; abstract; + procedure SetVolume(Volume: single); virtual; abstract; end; TAudioInputProcessor = class @@ -247,10 +247,10 @@ end; procedure TCaptureBuffer.AnalyzeBuffer; var - Volume: real; - MaxVolume: real; + Volume: single; + MaxVolume: single; SampleIndex: integer; - Threshold: real; + Threshold: single; begin ToneValid := false; ToneAbs := -1; diff --git a/Game/Code/Screens/UScreenCredits.pas b/Game/Code/Screens/UScreenCredits.pas index ce3b6046..f7f1fca7 100644 --- a/Game/Code/Screens/UScreenCredits.pas +++ b/Game/Code/Screens/UScreenCredits.pas @@ -1309,7 +1309,7 @@ Log.LogStatus('',' JB-4'); CTime_hold:=0; AudioPlayback.Stop; AudioPlayback.Open(soundpath + 'credits-outro-tune.mp3'); - AudioPlayback.SetVolume(20); + AudioPlayback.SetVolume(0.2); AudioPlayback.SetLoop(True); AudioPlayback.Play; end; diff --git a/Game/Code/Screens/UScreenEditSub.pas b/Game/Code/Screens/UScreenEditSub.pas index 0a80af8b..3bf57692 100644 --- a/Game/Code/Screens/UScreenEditSub.pas +++ b/Game/Code/Screens/UScreenEditSub.pas @@ -1174,7 +1174,7 @@ begin Lines[0].Line[0].Note[0].Color := 1; AudioPlayback.Open(CurrentSong.Path + CurrentSong.Mp3); //Set Down Music Volume for Better hearability of Midi Sounds - //Music.SetVolume(40); + //Music.SetVolume(0.4); Lyric.Clear; Lyric.X := 400; @@ -1315,7 +1315,7 @@ begin MidiOut.Close; MidiOut.Free; {$ENDIF} - //Music.SetVolume(100); + //Music.SetVolume(1.0); end; function TScreenEditSub.GetNoteName(Note: Integer): String; diff --git a/Game/Code/Screens/UScreenOptionsRecord.pas b/Game/Code/Screens/UScreenOptionsRecord.pas index 8e3d0f67..8db5ede9 100644 --- a/Game/Code/Screens/UScreenOptionsRecord.pas +++ b/Game/Code/Screens/UScreenOptionsRecord.pas @@ -64,7 +64,7 @@ type procedure StartPreview; procedure StopPreview; procedure UpdateInputDevice; - procedure ChangeVolume(VolumeChange: integer); + procedure ChangeVolume(VolumeChange: single); procedure DrawVolume(x, y, Width, Height: single); procedure DrawVUMeter(const State: TDrawState; x, y, Width, Height: single); procedure DrawPitch(const State: TDrawState; x, y, Width, Height: single); @@ -119,13 +119,13 @@ begin begin // FIXME: add a nice volume-slider instead // or at least provide visualization and acceleration if the user holds the key pressed. - ChangeVolume(2); + ChangeVolume(0.02); end; '-': begin // FIXME: add a nice volume-slider instead // or at least provide visualization and acceleration if the user holds the key pressed. - ChangeVolume(-2); + ChangeVolume(-0.02); end; 'T': begin @@ -203,6 +203,8 @@ begin PreviewDeviceIndex := -1; + WidgetYPos := 0; + // init sliders if at least one device was detected if (Length(AudioInputProcessor.DeviceList) > 0) then begin @@ -292,7 +294,9 @@ begin // add Exit-button ButtonTheme := Theme.OptionsRecord.ButtonExit; - ButtonTheme.Y := WidgetYPos; + // adjust button position + if (WidgetYPos <> 0) then + ButtonTheme.Y := WidgetYPos; AddButton(ButtonTheme); if (Length(Button[0].Text) = 0) then AddButtonText(14, 20, Theme.Options.Description[7]); @@ -372,10 +376,10 @@ begin StartPreview(); end; -procedure TScreenOptionsRecord.ChangeVolume(VolumeChange: integer); +procedure TScreenOptionsRecord.ChangeVolume(VolumeChange: single); var InputDevice: TAudioInputDevice; - Volume: integer; + Volume: single; begin // validate CurrentDeviceIndex if ((CurrentDeviceIndex < 0) or @@ -391,7 +395,7 @@ begin // set new volume Volume := InputDevice.GetVolume() + VolumeChange; InputDevice.SetVolume(Volume); - //DebugWriteln('Volume: ' + inttostr(InputDevice.GetVolume)); + //DebugWriteln('Volume: ' + floattostr(InputDevice.GetVolume)); // volume must be polled again NextVolumePollTime := 0; @@ -700,7 +704,7 @@ begin if (SDL_GetTicks() >= NextVolumePollTime) then begin NextVolumePollTime := SDL_GetTicks() + 500; // next poll in 500ms - SourceVolume := Device.GetVolume()/100; + SourceVolume := Device.GetVolume(); end; // get source select slide diff --git a/Game/Code/Screens/UScreenSong.pas b/Game/Code/Screens/UScreenSong.pas index 82d5100a..06314bcd 100644 --- a/Game/Code/Screens/UScreenSong.pas +++ b/Game/Code/Screens/UScreenSong.pas @@ -1497,17 +1497,21 @@ end; procedure TScreenSong.onHide; begin - //When Music Fading is activated, Turn Music to 100 % - If (Ini.PreviewVolume <> 100) or (Ini.PreviewFading <> 0) then - AudioPlayback.SetVolume(100); + // if music fading is activated, turn music to 100% + If (IPreviewVolumeVals[Ini.PreviewVolume] <> 1.0) or (Ini.PreviewFading <> 0) then + AudioPlayback.SetVolume(1.0); - //If Preview is deactivated: Load MUsicfile now - If (Ini.PreviewVolume = 0) then + // if preview is deactivated: load musicfile now + If (IPreviewVolumeVals[Ini.PreviewVolume] = 0) then AudioPlayback.Open(CatSongs.Song[Interaction].Path + CatSongs.Song[Interaction].Mp3); - //When hide then Stop Music (For Party Mode Popup on Exit) - if (Display.NextScreen <> @ScreenSing) and (Display.NextScreen <> @ScreenSingModi) and (AudioPlayback <> nil) then - AudioPlayback.Stop; + // if hide then stop music (for party mode popup on exit) + if (Display.NextScreen <> @ScreenSing) and + (Display.NextScreen <> @ScreenSingModi) then + begin + if (AudioPlayback <> nil) then + AudioPlayback.Stop; + end; end; procedure TScreenSong.DrawExtensions; @@ -1613,6 +1617,7 @@ begin DrawExtensions; + Result := true; end; procedure TScreenSong.SelectNext; @@ -1701,14 +1706,14 @@ begin if (Ini.PreviewFading = 0) then begin // music fade disabled: start with full volume - AudioPlayback.SetVolume(Ini.PreviewVolume * 10); + AudioPlayback.SetVolume(IPreviewVolumeVals[Ini.PreviewVolume]); AudioPlayback.Play() end else begin // music fade enabled: start muted and fade-in AudioPlayback.SetVolume(0); - AudioPlayback.FadeIn(Ini.PreviewFading, Ini.PreviewVolume * 10); + AudioPlayback.FadeIn(Ini.PreviewFading, IPreviewVolumeVals[Ini.PreviewVolume]); end; end; end; -- cgit v1.2.3