Commit 03a9b00

Nick committed on
Add interpolation
commit 03a9b00fd75aa138802f3b9bcd0b85e1e5d3788b parent 5d94e6a
5 changed files +75−18
ModifiedGBEmu.lpi +1−1
@@ -292,7 +292,7 @@
292 <Unit23> 292 <Unit23>
293 <Filename Value="htwavewriter.pas"/> 293 <Filename Value="htwavewriter.pas"/>
294 <IsPartOfProject Value="True"/> 294 <IsPartOfProject Value="True"/>
295 <UnitName Value="htWavWriter"/> 295 <UnitName Value="htWaveWriter"/>
296 </Unit23> 296 </Unit23>
297 </Units> 297 </Units>
298 </ProjectOptions> 298 </ProjectOptions>
Modifiedtracker.lfm +25−17
@@ -1,7 +1,7 @@
1 object frmTracker: TfrmTracker 1 object frmTracker: TfrmTracker
2 Left = 2081 2 Left = 2040
3 Height = 714 3 Height = 714
4 Top = 140 4 Top = 149
5 Width = 1181 5 Width = 1181
6 Caption = 'hUGETracker' 6 Caption = 'hUGETracker'
7 ClientHeight = 694 7 ClientHeight = 694
@@ -906,16 +906,16 @@ object frmTracker: TfrmTracker
906 end 906 end
907 object WavesTabSheet: TTabSheet 907 object WavesTabSheet: TTabSheet
908 Caption = 'Waves' 908 Caption = 'Waves'
909 ClientHeight = 777 909 ClientHeight = 435
910 ClientWidth = 1712 910 ClientWidth = 975
911 ParentFont = False 911 ParentFont = False
912 object WaveEditPaintBox: TPaintBox 912 object WaveEditPaintBox: TPaintBox
913 AnchorSideTop.Control = WaveEditGroupBox 913 AnchorSideTop.Control = WaveEditGroupBox
914 AnchorSideTop.Side = asrBottom 914 AnchorSideTop.Side = asrBottom
915 Left = 0 915 Left = 0
916 Height = 497 916 Height = 275
917 Top = 280 917 Top = 160
918 Width = 1712 918 Width = 975
919 Align = alBottom 919 Align = alBottom
920 Anchors = [akTop, akLeft, akRight, akBottom] 920 Anchors = [akTop, akLeft, akRight, akBottom]
921 BorderSpacing.Top = 13 921 BorderSpacing.Top = 13
@@ -937,16 +937,16 @@ object frmTracker: TfrmTracker
937 TabOrder = 0 937 TabOrder = 0
938 object Label20: TLabel 938 object Label20: TLabel
939 Left = 16 939 Left = 16
940 Height = 30 940 Height = 15
941 Top = 16 941 Top = 16
942 Width = 51 942 Width = 29
943 Caption = 'Wave' 943 Caption = 'Wave'
944 ParentColor = False 944 ParentColor = False
945 ParentFont = False 945 ParentFont = False
946 end 946 end
947 object WaveEditNumberSpinner: TSpinEdit 947 object WaveEditNumberSpinner: TSpinEdit
948 Left = 64 948 Left = 64
949 Height = 38 949 Height = 23
950 Top = 8 950 Top = 8
951 Width = 80 951 Width = 80
952 MaxValue = 15 952 MaxValue = 15
@@ -980,17 +980,17 @@ object frmTracker: TfrmTracker
980 end 980 end
981 object CommentsTabSheet: TTabSheet 981 object CommentsTabSheet: TTabSheet
982 Caption = 'Comments' 982 Caption = 'Comments'
983 ClientHeight = 777 983 ClientHeight = 435
984 ClientWidth = 1712 984 ClientWidth = 975
985 ParentFont = False 985 ParentFont = False
986 object CommentMemo: TMemo 986 object CommentMemo: TMemo
987 AnchorSideTop.Control = Label17 987 AnchorSideTop.Control = Label17
988 AnchorSideTop.Side = asrBottom 988 AnchorSideTop.Side = asrBottom
989 Left = 0 989 Left = 0
990 Height = 710 990 Height = 399
991 Hint = 'The comments section for your song. Greetings/links/etc' 991 Hint = 'The comments section for your song. Greetings/links/etc'
992 Top = 67 992 Top = 36
993 Width = 1712 993 Width = 975
994 Align = alBottom 994 Align = alBottom
995 Anchors = [akTop, akLeft, akRight, akBottom] 995 Anchors = [akTop, akLeft, akRight, akBottom]
996 BorderSpacing.Top = 13 996 BorderSpacing.Top = 13
@@ -1000,9 +1000,9 @@ object frmTracker: TfrmTracker
1000 end 1000 end
1001 object Label17: TLabel 1001 object Label17: TLabel
1002 Left = 8 1002 Left = 8
1003 Height = 30 1003 Height = 15
1004 Top = 8 1004 Top = 8
1005 Width = 587 1005 Width = 333
1006 Caption = 'This is an area to write comments for anyone editing your tune.' 1006 Caption = 'This is an area to write comments for anyone editing your tune.'
1007 ParentColor = False 1007 ParentColor = False
1008 ParentFont = False 1008 ParentFont = False
@@ -4956,6 +4956,14 @@ object frmTracker: TfrmTracker
4956 ShortCut = 24641 4956 ShortCut = 24641
4957 OnClick = TrackerPopupTransposeOctaveDownClick 4957 OnClick = TrackerPopupTransposeOctaveDownClick
4958 end 4958 end
4959 object MenuItem32: TMenuItem
4960 Caption = '-'
4961 end
4962 object MenuItem31: TMenuItem
4963 Caption = 'Interpolate'
4964 ShortCut = 16459
4965 OnClick = MenuItem31Click
4966 end
4959 object MenuItem30: TMenuItem 4967 object MenuItem30: TMenuItem
4960 Caption = '-' 4968 Caption = '-'
4961 end 4969 end
Modifiedtracker.pas +8−0
@@ -35,6 +35,8 @@ type
35 MenuItem26: TMenuItem; 35 MenuItem26: TMenuItem;
36 MenuItem27: TMenuItem; 36 MenuItem27: TMenuItem;
37 MenuItem28: TMenuItem; 37 MenuItem28: TMenuItem;
38 MenuItem31: TMenuItem;
39 MenuItem32: TMenuItem;
38 NoiseVisualizer: TPaintBox; 40 NoiseVisualizer: TPaintBox;
39 Panel6: TPanel; 41 Panel6: TPanel;
40 WavSaveDialog: TSaveDialog; 42 WavSaveDialog: TSaveDialog;
@@ -252,6 +254,7 @@ type
252 procedure MenuItem22Click(Sender: TObject); 254 procedure MenuItem22Click(Sender: TObject);
253 procedure FontSizeToggleMenuItemClick(Sender: TObject); 255 procedure FontSizeToggleMenuItemClick(Sender: TObject);
254 procedure MenuItem26Click(Sender: TObject); 256 procedure MenuItem26Click(Sender: TObject);
257 procedure MenuItem31Click(Sender: TObject);
255 procedure MenuItem5Click(Sender: TObject); 258 procedure MenuItem5Click(Sender: TObject);
256 procedure MenuItem8Click(Sender: TObject); 259 procedure MenuItem8Click(Sender: TObject);
257 procedure NoiseVisualizerPaint(Sender: TObject); 260 procedure NoiseVisualizerPaint(Sender: TObject);
@@ -1431,6 +1434,11 @@ begin
1431 OptionsFile.WriteInteger('hUGETracker', 'fontsize', TrackerGrid.FontSize); 1434 OptionsFile.WriteInteger('hUGETracker', 'fontsize', TrackerGrid.FontSize);
1432 end; 1435 end;
1433 1436
1437 procedure TfrmTracker.MenuItem31Click(Sender: TObject);
1438 begin
1439 TrackerGrid.InterpolateSelection;
1440 end;
1441
1434 procedure TfrmTracker.MenuItem5Click(Sender: TObject); 1442 procedure TfrmTracker.MenuItem5Click(Sender: TObject);
1435 begin 1443 begin
1436 frmAboutHugetracker.Show; 1444 frmAboutHugetracker.Show;
Modifiedtrackergrid.pas +35−0
@@ -137,6 +137,7 @@ type
137 procedure DoRedo; 137 procedure DoRedo;
138 procedure DoRepeatPaste; 138 procedure DoRepeatPaste;
139 procedure TransposeSelection(Semitones: Integer); 139 procedure TransposeSelection(Semitones: Integer);
140 procedure InterpolateSelection;
140 procedure OpenEffectEditor; 141 procedure OpenEffectEditor;
141 142
142 constructor Create( 143 constructor Create(
@@ -578,6 +579,40 @@ begin
578 SaveUndoState; 579 SaveUndoState;
579 end; 580 end;
580 581
582 procedure TTrackerGrid.InterpolateSelection;
583 var
584 S, E, Len: Integer;
585 Pos: TSelectionPos;
586 StartCell: TCell;
587 begin
588 NormalizeCursors;
589
590 if Cursor.Y = Other.Y then Exit;
591
592 if Cursor.SelectedPart = cpEffectCode then begin
593 Cursor.SelectedPart := cpEffectParams;
594 Other.SelectedPart := cpEffectParams;
595 end;
596
597 StartCell := Patterns[Cursor.x]^[Cursor.Y];
598
599 S := GetAt(Cursor);
600 E := GetAt(Other);
601 Len := Other.Y - Cursor.Y;
602
603 Pos := Cursor;
604 while Pos.Y <= Other.Y do begin
605 SetAt(Pos, Trunc(Lerp(S, E, ((Pos.Y - Cursor.Y) / Len))));
606
607 if Pos.SelectedPart = cpEffectParams then
608 Patterns[Pos.X]^[Pos.Y].EffectCode := StartCell.EffectCode;
609
610 Inc(Pos.Y)
611 end;
612
613 Invalidate
614 end;
615
581 procedure TTrackerGrid.OpenEffectEditor; 616 procedure TTrackerGrid.OpenEffectEditor;
582 begin 617 begin
583 inherited DblClick; 618 inherited DblClick;
Modifiedutils.pas +6−0
@@ -16,6 +16,7 @@ type
16 function MaxKey: Integer; 16 function MaxKey: Integer;
17 end; 17 end;
18 18
19 function Lerp(v0, v1, t: Double): Double;
19 function ConvertWaveform(Waveform: TWave): T4bitWave; 20 function ConvertWaveform(Waveform: TWave): T4bitWave;
20 procedure BlankPattern(Pat: PPattern); 21 procedure BlankPattern(Pat: PPattern);
21 procedure BlankCell(var Cell: TCell); 22 procedure BlankCell(var Cell: TCell);
@@ -56,6 +57,11 @@ begin
56 Inc(Result); 57 Inc(Result);
57 end; 58 end;
58 59
60 function Lerp(v0, v1, t: Double): Double;
61 begin
62 Result := ((1 - t) * v0) + (t * v1);
63 end;
64
59 function ConvertWaveform(Waveform: TWave): T4bitWave; 65 function ConvertWaveform(Waveform: TWave): T4bitWave;
60 var 66 var
61 I: Integer; 67 I: Integer;