aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordavidus01 <davidus01@b956fd51-792f-4845-bead-9b4dfca2ff2c>2010-07-03 00:34:03 +0000
committerdavidus01 <davidus01@b956fd51-792f-4845-bead-9b4dfca2ff2c>2010-07-03 00:34:03 +0000
commit0ab45e4c4c5bfebd97a44264c1cd47cf0b6709ba (patch)
tree7cf32c8c6079667567a3cf2a42385993690bd1c3
parent44a4f320c0597b8a222e75b1b548d26260165abb (diff)
downloadusdx-0ab45e4c4c5bfebd97a44264c1cd47cf0b6709ba.tar.gz
usdx-0ab45e4c4c5bfebd97a44264c1cd47cf0b6709ba.tar.xz
usdx-0ab45e4c4c5bfebd97a44264c1cd47cf0b6709ba.zip
editor: mouse support to move notes
left click & motion to move note right click & motion to move note with rest notes editor: Line and Note as button editor: PlayOne - variable to play only one note git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/branches/experimental@2569 b956fd51-792f-4845-bead-9b4dfca2ff2c
-rw-r--r--us_maker_edition/game/languages/English.ini2
-rw-r--r--us_maker_edition/game/languages/Polish.ini2
-rw-r--r--us_maker_edition/game/themes/Deluxe.ini47
-rw-r--r--us_maker_edition/game/themes/Verdure.ini47
-rw-r--r--us_maker_edition/src/base/UMain.pas20
-rw-r--r--us_maker_edition/src/base/UThemes.pas5
-rw-r--r--us_maker_edition/src/screens/UScreenEditSub.pas132
7 files changed, 223 insertions, 32 deletions
diff --git a/us_maker_edition/game/languages/English.ini b/us_maker_edition/game/languages/English.ini
index 9617f7b2..132e0863 100644
--- a/us_maker_edition/game/languages/English.ini
+++ b/us_maker_edition/game/languages/English.ini
@@ -441,6 +441,8 @@ INFO_DIVIDED_BPM=BPM Divided
INFO_MULTIPLIED_BPM=BPM Multiplied
INFO_PLAY_SONG=Play song
INFO_PLAY_SENTENCE=Play sentence
+INFO_CURRENT_LINE=Line:
+INFO_CURRENT_NOTE=Note:
ERROR_SAVE_FILE_FAILED=Couldn''t save file
ERROR_FILE_NOT_FOUND=File not found
diff --git a/us_maker_edition/game/languages/Polish.ini b/us_maker_edition/game/languages/Polish.ini
index d31fd30e..9c7c0880 100644
--- a/us_maker_edition/game/languages/Polish.ini
+++ b/us_maker_edition/game/languages/Polish.ini
@@ -417,6 +417,8 @@ INFO_DIVIDED_BPM=Podzielono BPM
INFO_MULTIPLIED_BPM=Pomożono BPM
INFO_PLAY_SONG=Odegranie piosenki
INFO_PLAY_SENTENCE=Odegranie obecnej linii
+INFO_CURRENT_LINE=Linia:
+INFO_CURRENT_NOTE=Nuta:
ERROR_SAVE_FILE_FAILED=Nie mogę zapisać pliku
ERROR_FILE_NOT_FOUND=Plik nieznaleziony
diff --git a/us_maker_edition/game/themes/Deluxe.ini b/us_maker_edition/game/themes/Deluxe.ini
index 623d6519..ed957d76 100644
--- a/us_maker_edition/game/themes/Deluxe.ini
+++ b/us_maker_edition/game/themes/Deluxe.ini
@@ -9085,3 +9085,50 @@ Tex = prevbackground
Type = Transparent
Reflection = 0
ReflectionSpacing = 22
+
+[EditSubButtonCurrentLine]
+X = 20
+Y = 10
+Z = 0.97
+W = 110
+H = 20
+Size = 20
+Font = 1
+Align = 1
+Color = ColorLight
+DColor = ColorLight
+Tex = Leiste1
+Type = Colorized
+Texts = 1
+
+[EditSubButtonCurrentLineText1]
+X = 55
+Y = 2
+Color = White
+Font = 1
+Size = 18
+Align = 1
+
+[EditSubButtonCurrentNote]
+X = 140
+Y = 10
+Z = 0.97
+W = 110
+H = 20
+Size = 20
+Font = 1
+Align = 1
+Color = ColorLight
+DColor = ColorLight
+Tex = Leiste1
+Type = Colorized
+Texts = 1
+
+[EditSubButtonCurrentNoteText1]
+X = 55
+Y = 2
+Color = White
+Font = 1
+Size = 18
+Align = 1
+
diff --git a/us_maker_edition/game/themes/Verdure.ini b/us_maker_edition/game/themes/Verdure.ini
index 1e225675..1aa7d135 100644
--- a/us_maker_edition/game/themes/Verdure.ini
+++ b/us_maker_edition/game/themes/Verdure.ini
@@ -9383,3 +9383,50 @@ Tex = prevbackground
Type = Transparent
Reflection = 0
ReflectionSpacing = 22
+
+[EditSubButtonCurrentLine]
+X = 20
+Y = 10
+Z = 0.97
+W = 110
+H = 20
+Size = 20
+Font = 1
+Align = 1
+Color = ColorLight
+DColor = ColorLight
+Tex = Leiste1
+Type = Colorized
+Texts = 1
+
+[EditSubButtonCurrentLineText1]
+X = 55
+Y = 2
+Color = White
+Font = 1
+Size = 18
+Align = 1
+
+[EditSubButtonCurrentNote]
+X = 140
+Y = 10
+Z = 0.97
+W = 110
+H = 20
+Size = 20
+Font = 1
+Align = 1
+Color = ColorLight
+DColor = ColorLight
+Tex = Leiste1
+Type = Colorized
+Texts = 1
+
+[EditSubButtonCurrentNoteText1]
+X = 55
+Y = 2
+Color = White
+Font = 1
+Size = 18
+Align = 1
+
diff --git a/us_maker_edition/src/base/UMain.pas b/us_maker_edition/src/base/UMain.pas
index 174ef162..c1e45c03 100644
--- a/us_maker_edition/src/base/UMain.pas
+++ b/us_maker_edition/src/base/UMain.pas
@@ -36,6 +36,8 @@ interface
uses
SysUtils,
SDL;
+var
+ CheckMouseButton: boolean; // for checking mouse motion
procedure Main;
procedure MainLoop;
@@ -425,16 +427,12 @@ begin
if (Ini.Mouse > 0) then
begin
case Event.type_ of
- SDL_MOUSEMOTION:
- begin
- mouseDown := false;
- mouseBtn := 0;
- end;
+
SDL_MOUSEBUTTONDOWN:
begin
mouseDown := true;
mouseBtn := Event.button.button;
-
+ CheckMouseButton := true;
if (mouseBtn = SDL_BUTTON_LEFT) or (mouseBtn = SDL_BUTTON_RIGHT) then
Display.OnMouseButton(true);
end;
@@ -442,10 +440,18 @@ begin
begin
mouseDown := false;
mouseBtn := Event.button.button;
-
+ CheckMouseButton := false;
if (mouseBtn = SDL_BUTTON_LEFT) or (mouseBtn = SDL_BUTTON_RIGHT) then
Display.OnMouseButton(false);
end;
+ SDL_MOUSEMOTION:
+ begin
+ if (CheckMouseButton) then
+ mouseDown := true
+ else
+ mouseDown := false;
+ mouseBtn := 0;
+ end;
end;
Display.MoveCursor(Event.button.X * 800 * Screens / ScreenW,
diff --git a/us_maker_edition/src/base/UThemes.pas b/us_maker_edition/src/base/UThemes.pas
index de569b97..49340038 100644
--- a/us_maker_edition/src/base/UThemes.pas
+++ b/us_maker_edition/src/base/UThemes.pas
@@ -508,6 +508,8 @@ type
TThemeEditSub = class(TThemeBasic)
//in editor - headers
BackgroundImage: TThemeStatic;
+ ButtonCurrentLine: TThemeButton;
+ ButtonCurrentNote: TThemeButton;
SlideTitle: TThemeSelectSlide;
SlideArtist: TThemeSelectSlide;
SlideMP3: TThemeSelectSlide;
@@ -1407,6 +1409,9 @@ begin
// editor
ThemeLoadBasic (EditSub, 'EditSub');
ThemeLoadStatic(EditSub.BackgroundImage, 'EditSubBackgroundImage');
+ // current position in editor
+ ThemeLoadButton(EditSub.ButtonCurrentLine, 'EditSubButtonCurrentLine');
+ ThemeLoadButton(EditSub.ButtonCurrentNote, 'EditSubButtonCurrentNote');
ThemeLoadSelectSlide(EditSub.SlideTitle, 'EditSubTitle');
ThemeLoadSelectSlide(EditSub.SlideArtist, 'EditSubArtist');
ThemeLoadSelectSlide(EditSub.SlideMP3, 'EditSubMP3');
diff --git a/us_maker_edition/src/screens/UScreenEditSub.pas b/us_maker_edition/src/screens/UScreenEditSub.pas
index 2cbb027e..9b838a39 100644
--- a/us_maker_edition/src/screens/UScreenEditSub.pas
+++ b/us_maker_edition/src/screens/UScreenEditSub.pas
@@ -92,6 +92,7 @@ type
TextNText: integer;}
CurrentNote: integer;
PlaySentence: boolean;
+ PlayOne: boolean;
PlaySentenceMidi: boolean;
PlayVideo: boolean;
PlayStopTime: real;
@@ -109,6 +110,11 @@ type
MidiPos: real;
MidiLastNote: integer;
+ //for mouse move
+ LastPressedMouseButton: boolean;
+ LastPressedMouseType: integer;
+ LastPressedNote: integer;
+
TextPosition: integer;
TextEditMode: boolean;
TitleEditMode: boolean;
@@ -191,11 +197,17 @@ type
VolumeClick: array of UTF8String;
// background image & video preview
BackgroundImageId: integer;
+ Empty: array of UTF8String; //temporary variable to initialize slide - todo change
+ // background for notes to posibility move note
+// NotesBackgroundId: integer;
// player static picture
playerIconId: array[1..2] of integer;
// currentX, CurrentY
CurrentX: integer;
CurrentY: integer;
+ LastX: integer;
+ LastY: integer;
+
Lyric: TEditorLyrics;
//undo declaration
@@ -757,7 +769,8 @@ begin
begin
// Play Sentence
PlaySentenceMidi := false; // stop midi
- PlaySentence := true;
+ PlaySentence := false;
+ PlayOne := true;
PlayVideo := false;
StopVideoPreview;
Click := false;
@@ -774,8 +787,8 @@ begin
if (SDL_ModState = KMOD_LSHIFT) or (SDL_ModState = KMOD_LSHIFT or KMOD_LCTRL) then
begin
// Play Midi
- PlaySentenceMidi := true;
-
+ PlaySentenceMidi := false;
+ PlayOne := true;
MidiTime := USTime.GetTime;
MidiStart := GetTimeFromBeat(Lines[0].Line[Lines[0].Current].Note[CurrentNote].Start);
MidiStop := GetTimeFromBeat(
@@ -788,7 +801,7 @@ begin
SDLK_RETURN:
begin
- if Interaction = TitleSlideId then
+ if Interaction = 2 then //TitleSlideId
begin
BackupEditText := CurrentSong.Title;
CurrentEditText := BackupEditText;
@@ -797,7 +810,7 @@ begin
TextPosition := LengthUTF8(BackupEditText);
TitleEditMode := true;
end;
- if Interaction = ArtistSlideId then
+ if Interaction = 3 then //ArtistSlideId
begin
BackupEditText := CurrentSong.Artist;
CurrentEditText := BackupEditText;
@@ -807,7 +820,7 @@ begin
ArtistEditMode := true;
end;
- if Interaction = LyricSlideId then
+ if Interaction = 4 then //LyricSlideId
begin
BackupEditText := Lines[0].Line[Lines[0].Current].Note[CurrentNote].Text;
CurrentEditText := BackupEditText;
@@ -827,7 +840,7 @@ begin
Lines[0].Current := i;
ShowInteractiveBackground;
currentnote := 0;
- Lines[0].Line[Lines[0].Current].Note[CurrentNote].Color := 2;
+ Lines[0].Line[Lines[0].Current].Note[CurrentNote].Color := 2;
end;
end;
@@ -852,8 +865,9 @@ begin
currentnote := i;
Lines[0].Line[Lines[0].Current].Note[CurrentNote].Color := 2;
Lyric.Selected := CurrentNote;
- //play curren note
- PlaySentence := true;
+ //play current note
+ PlaySentence := false;
+ PlayOne := true;
Click := false;
AudioPlayback.Stop;
AudioPlayback.Position := GetTimeFromBeat(Lines[0].Line[Lines[0].Current].Note[CurrentNote].Start);
@@ -893,6 +907,7 @@ begin
begin
AudioPlayback.Stop;
PlaySentence := false;
+ PlayOne := false;
PlayVideo := false;
{$IFDEF UseMIDIPort}
MidiOut.PutShort($B1, $7, floor(1.27*SelectsS[VolumeMidiSlideId].SelectedOption));
@@ -961,6 +976,7 @@ begin
begin
AudioPlayback.Stop;
PlaySentence := false;
+ PlayOne := false;
PlayVideo := false;
{$IFDEF UseMIDIPort}
MidiOut.PutShort($B1, $7, floor(1.27*SelectsS[VolumeMidiSlideId].SelectedOption));
@@ -1034,6 +1050,7 @@ begin
MidiOut.PutShort($B1, $7, floor(1.27*SelectsS[VolumeMidiSlideId].SelectedOption));
MidiOut.PutShort(MIDI_NOTEOFF or 1, Lines[0].Line[Lines[0].Current].Note[MidiLastNote].Tone + 60, 127);
PlaySentenceMidi := false;
+ PlayOne := false;
{$ENDIF}
Lines[0].Line[Lines[0].Current].Note[CurrentNote].Color := 1;
@@ -1069,6 +1086,7 @@ begin
AudioPlayback.Stop;
PlayVideo := false;
PlaySentence := false;
+ PlayOne := false;
{$IFDEF UseMIDIPort}
MidiOut.PutShort(MIDI_NOTEOFF or 1, $7, floor(1.27*SelectsS[VolumeMidiSlideId].SelectedOption));
MidiOut.PutShort($81, Lines[0].Line[Lines[0].Current].Note[MidiLastNote].Tone + 60, 127);
@@ -1235,6 +1253,8 @@ function TScreenEditSub.ParseMouse(MouseButton: integer; BtnDown: boolean; X, Y:
var
nBut: integer;
Action: TMouseClickAction;
+ tempR: real;
+ i: integer;
begin
// transfer mousecords to the 800x600 raster we use to draw
X := Round((X / (ScreenW / Screens)) * RenderW);
@@ -1258,6 +1278,13 @@ begin
if (BtnDown) then
begin
+
+ if (MouseButton = SDL_BUTTON_RIGHT) then
+ begin
+ LastPressedMouseType := MouseButton;
+ LastX := CurrentX;
+ LastY := CurrentY;
+ end;
if (MouseButton = SDL_BUTTON_LEFT) then
begin
//click button or SelectS
@@ -1267,7 +1294,55 @@ begin
end
else
Action := maReturn;
+ LastPressedMouseType := MouseButton;
+ LastX := CurrentX;
+ LastY := CurrentY;
end;
+ // move notes by mouse move
+ tempR := 720 / (Lines[0].Line[Lines[0].Current].End_ - Lines[0].Line[Lines[0].Current].Note[0].Start);
+ if (MouseButton = 0) and (LastPressedMouseType = SDL_BUTTON_RIGHT) then
+ begin
+ if (Floor((CurrentX-40)/tempr) > Floor((LastX-40)/tempr)) or (Floor((CurrentX-40)/tempr) < Floor((LastX-40)/tempr)) then
+ begin
+ CopyToUndo;
+ MoveAllToEnd(floor((CurrentX-40)/(720 / (Lines[0].Line[Lines[0].Current].End_ + floor((CurrentX-40)/tempr - Floor((LastX-40)/tempr)) - Lines[0].Line[Lines[0].Current].Note[0].Start)) - Floor((LastX-40)/tempr)));
+ LastX := CurrentX;
+ GoldenRec.KillAll;
+ ShowInteractiveBackground;
+ end;
+ end;
+ //move one note by mouse move
+ if (MouseButton = 0) and (LastPressedMouseType = SDL_BUTTON_LEFT) then
+ begin
+ if (Floor((CurrentX-40)/tempr) > Floor((LastX-40)/tempr)) or (Floor((CurrentX-40)/tempr) < Floor((LastX-40)/tempr)) then
+ begin
+ CopyToUndo;
+ // move
+ if Floor((CurrentX-40)/tempr) > Floor((LastX-40)/tempr) then
+ begin
+ Inc(Lines[0].Line[Lines[0].Current].Note[CurrentNote].Start);
+ if CurrentNote = 0 then
+ begin
+ Inc(Lines[0].Line[Lines[0].Current].Start);
+ end;
+ if CurrentNote = Lines[0].Line[Lines[0].Current].HighNote then
+ Inc(Lines[0].Line[Lines[0].Current].End_);
+ end
+ else
+ begin
+ Dec(Lines[0].Line[Lines[0].Current].Note[CurrentNote].Start);
+ if CurrentNote = 0 then
+ Dec(Lines[0].Line[Lines[0].Current].Start);
+ if CurrentNote = Lines[0].Line[Lines[0].Current].HighNote then
+ Dec(Lines[0].Line[Lines[0].Current].End_);
+ end;
+ LastX := CurrentX;
+ GoldenRec.KillAll;
+ ShowInteractiveBackground;
+ end;
+
+ end;
+
end;
// changed cover
if ((CoverSlideId = Interactions[nBut].Num) and (Action = maLeft) and (SelectsS[Interactions[nBut].Num].SelectedOption > 0)) then
@@ -1613,10 +1688,9 @@ var
tempR: real;
begin
C := Lines[0].Current;
-
tempR := 720 / (Lines[0].Line[Lines[0].Current].End_ - Lines[0].Line[Lines[0].Current].Note[0].Start);
- if doubleclick then
+ if (doubleclick) and (InteractAt(currentX, CurrentY) > 0) then
wherecutting := Round((currentX - button[Interactions[InteractAt(currentX, CurrentY)].Num].X) / tempR)
else
wherecutting := 1;
@@ -1967,7 +2041,6 @@ begin
Lines[0].Line[I].Note[J].Length := UndoLines[CurrentUndoLines].Line[I].Note[J].Length;
Lines[0].Line[I].Note[J].Tone := UndoLines[CurrentUndoLines].Line[I].Note[J].Tone;
Lines[0].Line[I].Note[J].Text := UndoLines[CurrentUndoLines].Line[I].Note[J].Text;
- log.LogError(Lines[0].Line[I].Note[J].Text);
Lines[0].Line[I].Note[J].NoteType := UndoLines[CurrentUndoLines].Line[I].Note[J].NoteType;
end; //for J
end; //for I
@@ -2053,7 +2126,7 @@ begin
glEnd;}
// Line
- glColor4f(0.9, 0.9, 0.9, 1);
+{ glColor4f(0.9, 0.9, 0.9, 1);
x := 20;
y := 5;
w := 200;
@@ -2075,7 +2148,7 @@ begin
glVertex2f(x, y+h);
glVertex2f(x+w, y+h);
glVertex2f(x+w, y);
- glEnd;
+ glEnd;}
// some borders
x := 20;
@@ -2206,7 +2279,7 @@ begin
for line := 0 to numLines - 1 do
begin
- if (line = Lines[currentLines].Current) and not (PlaySentence or PlaySentenceMidi) then
+ if (line = Lines[currentLines].Current) and not (PlaySentence or PlaySentenceMidi or PlayOne) then
glColor4f(0.4, 0.4, 0, 1)
else
glColor4f(1, 0.6, 0, 1);
@@ -2233,7 +2306,7 @@ begin
glEnd;
end;
- if(PlaySentence or PlaySentenceMidi) then
+ if(PlaySentence or PlaySentenceMidi or PlayOne) then
begin
glColor4f(0, 0, 0, 0.5);
pos := 0;
@@ -2343,6 +2416,7 @@ begin
SetLength(TransparentNoteButtonId, Length(TransparentNoteButtonId)+1);
TransparentNoteButtonId[Length(TransparentNoteButtonId)-1] := AddButton(0, 0, 0, 0,PATH_NONE);
InteractiveNoteId[Length(InteractiveNoteId)-1] := length(Interactions)-1;
+
end;
TempR := 720 / (Lines[0].Line[Lines[0].Current].End_ - Lines[0].Line[Lines[0].Current].Note[0].Start);
for i := 0 to Lines[0].Line[Lines[0].Current].HighNote do
@@ -2389,6 +2463,8 @@ begin
end;
constructor TScreenEditSub.Create;
+var
+i: integer;
begin
inherited Create;
LoadFromTheme(Theme.EditSub);
@@ -2417,13 +2493,14 @@ begin
SetLength(TransparentLineButtonId, 0);
// line
- AddText(40, 11, 1, 30, 0, 0, 0, 'Line:');
- TextSentence := AddText(110, 11, 1, 30, 0, 0, 0, '0 / 0');
-
+ // AddText(40, 11, 1, 20, 0, 0, 0, 'Line:');
+ TextSentence := AddButton(Theme.EditSub.ButtonCurrentLine);
+// TextSentence := AddText(110, 11, 1, 20, 0, 0, 0, '0 / 0');
// Note
- AddText(282, 11, 1, 30, 0, 0, 0, 'Note:');
- TextNote := AddText(360, 11, 1, 30, 0, 0, 0, '0 / 0');
+// AddText(282, 11, 1, 20, 0, 0, 0, 'Note:');
+ TextNote := AddButton(Theme.EditSub.ButtonCurrentNote);
+// TextNote := AddText(360, 11, 1, 20, 0, 0, 0, '0 / 0');
// file info
// AddText(30, 65, 0, 24, 0, 0, 0, 'Title:');
@@ -2488,6 +2565,7 @@ begin
// background image & preview
BackgroundImageId := AddStatic(Theme.EditSub.BackgroundImage);
+
// TextTitle := AddText(180, 65, 0, 24, 0, 0, 0, 'a');
// TextArtist := AddText(180, 90, 0, 24, 0, 0, 0, 'b');
// TextMp3 := AddText(180, 115, 0, 24, 0, 0, 0, 'c');
@@ -2525,6 +2603,8 @@ begin
// debug
TextDebug := AddText(30, 550, 0, 27, 0, 0, 0, '');
+ // in notes place -> for move notes by mouse
+// NotesBackgroundId := AddSelectSlide(Theme.EditSub.NotesBackground, i, Empty);
end;
@@ -2539,6 +2619,7 @@ begin
fCurrentVideo := nil;
AudioPlayback.Stop;
PlaySentence := false;
+ PlayOne := false;
PlaySentenceMidi := false;
Text[TextDebug].Text := '';
Log.LogStatus('Initializing', 'TEditScreen.OnShow');
@@ -2838,7 +2919,7 @@ begin
end; // if PlaySentenceMidi
// move "cursor"
- if (PlaySentence or PlaySentenceMidi or PlayVideo) then //and Not (PlayNote) then
+ if (PlaySentence or PlaySentenceMidi or PlayVideo) and not (PlayOne) then //and Not (PlayNote) then
begin
if (PlaySentence or PlayVideo) then
AktBeat := Floor(GetMidBeat(AudioPlayback.Position - (CurrentSong.GAP) / 1000));
@@ -2874,13 +2955,14 @@ begin
end; //end move cursor
// mp3 music
- if (PlaySentence or PlayVideo) then
+ if (PlaySentence or PlayVideo or PlayOne) then
begin
// stop the music
if (AudioPlayback.Position > PlayStopTime) then
begin
AudioPlayback.Stop;
PlaySentence := false;
+ PlayOne := false;
PlayVideo := false;
StopVideoPreview;
end;
@@ -2905,8 +2987,8 @@ begin
end; // if PlaySentence
- Text[TextSentence].Text := IntToStr(Lines[0].Current + 1) + ' / ' + IntToStr(Lines[0].Number);
- Text[TextNote].Text := IntToStr(CurrentNote + 1) + ' / ' + IntToStr(Lines[0].Line[Lines[0].Current].HighNote + 1);
+ Button[TextSentence].Text[0].Text := Language.Translate('INFO_CURRENT_LINE') + ' ' + IntToStr(Lines[0].Current + 1) + ' / ' + IntToStr(Lines[0].Number);
+ Button[TextNote].Text[0].Text := Language.Translate('INFO_CURRENT_NOTE') + ' ' + IntToStr(CurrentNote + 1) + ' / ' + IntToStr(Lines[0].Line[Lines[0].Current].HighNote + 1);
// Song info
//Text[TextBPM].Text := FloatToStr(CurrentSong.BPM[0].BPM / 4);