Skip to content

Commit

Permalink
Version 1.7.1, Library Update
Browse files Browse the repository at this point in the history
Updated Volume Popup with more information, Added Audio Mute support, Updated Dependencies Libraries and fixed bug which caused the music to resume on seek
  • Loading branch information
Codrax committed Sep 28, 2023
1 parent 1ffda5a commit 60addd8
Show file tree
Hide file tree
Showing 22 changed files with 3,764 additions and 1,286 deletions.
289 changes: 289 additions & 0 deletions Dependencies/Cod.ArrayHelpers.pas
Original file line number Diff line number Diff line change
@@ -0,0 +1,289 @@
{***********************************************************}
{ Codruts Variabile Helpers }
{ }
{ version 0.2 }
{ ALPHA }
{ }
{ }
{ }
{ }
{ }
{ -- WORK IN PROGRESS -- }
{***********************************************************}

{$SCOPEDENUMS ON}

unit Cod.ArrayHelpers;

interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, IdHTTP,
VCL.Graphics, Winapi.ActiveX, Winapi.URLMon, IOUtils, System.Generics.Collections,
Cod.ColorUtils, System.Generics.Defaults, Vcl.Imaging.pngimage,
WinApi.GdipObj, WinApi.GdipApi, Win.Registry, Cod.GDI, Cod.Types,
DateUtils;

type
// TArray colection
TArrayUtils<T> = class
public
class function Contains(const x : T; const anArray : array of T) : boolean;
class function GetIndex(const x : T; const anArray : array of T) : integer;
end;

// TArray generic types
TArrayArray = TArray<TArray>;
TArrayArrayHelper = record helper for TArrayArray
public
function Count: integer; overload; inline;
procedure SetToLength(ALength: integer);
end;

TStringArray = TArray<string>;
TStringArrayHelper = record helper for TStringArray
public
function AddValue(Value: string): integer;
procedure Insert(Index: integer; Value: string);
procedure Delete(Index: integer);
function Count: integer; overload; inline;
function Find(Value: string): integer;
procedure SetToLength(ALength: integer);
end;

TIntArray = TArray<integer>;
TIntegerArrayHelper = record helper for TIntArray
public
function AddValue(Value: integer): integer;
procedure Insert(Index: integer; Value: integer);
procedure Delete(Index: integer);
function Count: integer; overload; inline;
function Find(Value: integer): integer;
procedure SetToLength(ALength: integer);
end;

TRealArray = TArray<real>;
TRealArrayHelper = record helper for TRealArray
public
function AddValue(Value: real): integer;
procedure Insert(Index: integer; Value: real);
procedure Delete(Index: integer);
function Count: integer; overload; inline;
function Find(Value: real): integer;
procedure SetToLength(ALength: integer);
end;

implementation

{ TArrayUtils<T> }

class function TArrayUtils<T>.Contains(const x: T; const anArray: array of T): boolean;
var
y : T;
lComparer: IEqualityComparer<T>;
begin
lComparer := TEqualityComparer<T>.Default;
for y in anArray do
begin
if lComparer.Equals(x, y) then
Exit(True);
end;
Exit(False);
end;

class function TArrayUtils<T>.GetIndex(const x : T; const anArray : array of T) : integer;
var
I: Integer;
y: T;
lComparer: IEqualityComparer<T>;
begin
lComparer := TEqualityComparer<T>.Default;
for I := Low(anArray) to High(anArray) do
begin
y := anArray[I];

if lComparer.Equals(x, y) then
Exit(I);
end;
Exit(-1);
end;

// TArray Generic Helpers
function TArrayArrayHelper.Count: integer;
begin
Result := length(Self);
end;

function TStringArrayHelper.Count: integer;
begin
Result := length(Self);
end;

function TIntegerArrayHelper.Count: integer;
begin
Result := length(Self);
end;

function TRealArrayHelper.Count: integer;
begin
Result := length(Self);
end;

procedure TArrayArrayHelper.SetToLength(ALength: integer);
begin
SetLength(Self, ALength);
end;

procedure TStringArrayHelper.SetToLength(ALength: integer);
begin
SetLength(Self, ALength);
end;

procedure TIntegerArrayHelper.SetToLength(ALength: integer);
begin
SetLength(Self, ALength);
end;

procedure TRealArrayHelper.SetToLength(ALength: integer);
begin
SetLength(Self, ALength);
end;

function TStringArrayHelper.AddValue(Value: string): integer;
var
AIndex: integer;
begin
AIndex := Length(Self);
SetLength(Self, AIndex + 1);
Self[AIndex] := Value;
Result := AIndex;
end;

function TIntegerArrayHelper.AddValue(Value: integer): integer;
var
AIndex: integer;
begin
AIndex := Length(Self);
SetLength(Self, AIndex + 1);
Self[AIndex] := Value;
Result := AIndex;
end;

function TRealArrayHelper.AddValue(Value: real): integer;
var
AIndex: integer;
begin
AIndex := Length(Self);
SetLength(Self, AIndex + 1);
Self[AIndex] := Value;
Result := AIndex;
end;

procedure TStringArrayHelper.Insert(Index: integer; Value: string);
var
Size: integer;
I: Integer;
begin
Size := Length(Self);
SetLength(Self, Size+1);

for I := Size downto Index+1 do
Self[I] := Self[I-1];
Self[Index] := Value;
end;

procedure TIntegerArrayHelper.Insert(Index: integer; Value: integer);
var
Size: integer;
I: Integer;
begin
Size := Length(Self);
SetLength(Self, Size+1);

for I := Size downto Index+1 do
Self[I] := Self[I-1];
Self[Index] := Value;
end;

procedure TRealArrayHelper.Insert(Index: integer; Value: real);
var
Size: integer;
I: Integer;
begin
Size := Length(Self);
SetLength(Self, Size+1);

for I := Size downto Index+1 do
Self[I] := Self[I-1];
Self[Index] := Value;
end;

procedure TStringArrayHelper.Delete(Index: integer);
var
I: Integer;
begin
if Index <> -1 then
begin
for I := Index to High(Self)-1 do
Self[I] := Self[I+1];

SetToLength(Length(Self)-1);
end;
end;

procedure TIntegerArrayHelper.Delete(Index: integer);
var
I: Integer;
begin
if Index <> -1 then
begin
for I := Index to High(Self)-1 do
Self[I] := Self[I+1];

SetToLength(Length(Self)-1);
end;
end;

procedure TRealArrayHelper.Delete(Index: integer);
var
I: Integer;
begin
if Index <> -1 then
begin
for I := Index to High(Self)-1 do
Self[I] := Self[I+1];

SetToLength(Length(Self)-1);
end;
end;

function TStringArrayHelper.Find(Value: string): integer;
var
I: integer;
begin
Result := -1;
for I := Low(Self) to High(Self) do
if Self[I] = Value then
Exit(I);
end;

function TIntegerArrayHelper.Find(Value: integer): integer;
var
I: integer;
begin
Result := -1;
for I := Low(Self) to High(Self) do
if Self[I] = Value then
Exit(I);
end;

function TRealArrayHelper.Find(Value: real): integer;
var
I: integer;
begin
Result := -1;
for I := Low(Self) to High(Self) do
if Self[I] = Value then
Exit(I);
end;

end.
15 changes: 14 additions & 1 deletion Dependencies/Cod.Audio.pas
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, IOUtils,
Math,

(* Bass Library *)
Bass;
Expand Down Expand Up @@ -108,9 +109,21 @@ TAudioPlayer = class(TObject)
destructor Destroy; override;
end;

// Audio Utilities
function GetSystemVolume: Cardinal;
procedure SetSystemVolume(Value: Cardinal);

implementation

function GetSystemVolume: Cardinal;
begin
Result := Round(Power(BASS_GetVolume, 1 / 1.9) * 100);
end;

procedure SetSystemVolume(Value: Cardinal);
begin
BASS_SetVolume(Value / 100);
end;

{ TAudioPlayer }

Expand Down Expand Up @@ -303,7 +316,7 @@ procedure TAudioPlayer.SetPlayStauts(AStatus: TPlayStatus);
begin
case AStatus of
psStopped: BASS_ChannelStop( FStream );
psPlaying: BASS_ChannelPlay( FStream, true );
psPlaying: BASS_ChannelPlay( FStream, false );
psPaused: BASS_ChannelPause( FStream );
end;
end;
Expand Down
Loading

0 comments on commit 60addd8

Please sign in to comment.