Commit b4979c2

Nick committed on
Start implementation of nosie macro editor
commit b4979c23b984ae46c1ada82e992fcb9762910c6a parent 7e92e3a
5 changed files +134−197
ModifiedhUGEDriver +1−1
@@ -1 +1 @@
1 Subproject commit 9abc50175246ac84a8e39455678291c97d3d8853 1 Subproject commit 0f3e04839b0970add9a5008e5a48ec034773b348
Modifiedinstruments.pas +1−1
@@ -14,7 +14,7 @@ type
14 TStepWidth = (swFifteen, swSeven); 14 TStepWidth = (swFifteen, swSeven);
15 TEnvelopeVolume = 0..15; 15 TEnvelopeVolume = 0..15;
16 TEnvelopeSweepAmount = 0..7; 16 TEnvelopeSweepAmount = 0..7;
17 TNoiseMacro = array[0..5] of Byte; 17 TNoiseMacro = array[0..5] of -31..32;
18 18
19 TInstrument = packed record 19 TInstrument = packed record
20 Type_: TInstrumentType; 20 Type_: TInstrumentType;
Modifiedtracker.lfm +59−137
@@ -1,12 +1,12 @@
1 object frmTracker: TfrmTracker 1 object frmTracker: TfrmTracker
2 Left = 433 2 Left = 402
3 Height = 687 3 Height = 806
4 Top = 190 4 Top = 115
5 Width = 1145 5 Width = 1270
6 AllowDropFiles = True 6 AllowDropFiles = True
7 Caption = 'hUGETracker' 7 Caption = 'hUGETracker'
8 ClientHeight = 667 8 ClientHeight = 786
9 ClientWidth = 1145 9 ClientWidth = 1270
10 KeyPreview = True 10 KeyPreview = True
11 Menu = MainMenu1 11 Menu = MainMenu1
12 OnCloseQuery = FormCloseQuery 12 OnCloseQuery = FormCloseQuery
@@ -20,7 +20,7 @@ object frmTracker: TfrmTracker
20 LCLVersion = '2.0.9.0' 20 LCLVersion = '2.0.9.0'
21 object TreeView1: TTreeView 21 object TreeView1: TTreeView
22 Left = 0 22 Left = 0
23 Height = 555 23 Height = 669
24 Top = 89 24 Top = 89
25 Width = 193 25 Width = 193
26 Align = alLeft 26 Align = alLeft
@@ -41,26 +41,26 @@ object frmTracker: TfrmTracker
41 end 41 end
42 object Splitter1: TSplitter 42 object Splitter1: TSplitter
43 Left = 193 43 Left = 193
44 Height = 555 44 Height = 669
45 Top = 89 45 Top = 89
46 Width = 5 46 Width = 5
47 end 47 end
48 object Panel1: TPanel 48 object Panel1: TPanel
49 Left = 198 49 Left = 198
50 Height = 555 50 Height = 669
51 Top = 89 51 Top = 89
52 Width = 947 52 Width = 1072
53 Align = alClient 53 Align = alClient
54 BevelOuter = bvNone 54 BevelOuter = bvNone
55 ClientHeight = 555 55 ClientHeight = 669
56 ClientWidth = 947 56 ClientWidth = 1072
57 ParentFont = False 57 ParentFont = False
58 TabOrder = 2 58 TabOrder = 2
59 object PageControl1: TPageControl 59 object PageControl1: TPageControl
60 Left = 0 60 Left = 0
61 Height = 555 61 Height = 669
62 Top = 0 62 Top = 0
63 Width = 947 63 Width = 1072
64 ActivePage = InstrumentTabSheet 64 ActivePage = InstrumentTabSheet
65 Align = alClient 65 Align = alClient
66 ParentFont = False 66 ParentFont = False
@@ -68,8 +68,8 @@ object frmTracker: TfrmTracker
68 TabOrder = 0 68 TabOrder = 0
69 object GeneralTabSheet: TTabSheet 69 object GeneralTabSheet: TTabSheet
70 Caption = 'General' 70 Caption = 'General'
71 ClientHeight = 527 71 ClientHeight = 641
72 ClientWidth = 939 72 ClientWidth = 1064
73 ParentFont = False 73 ParentFont = False
74 object SongInformationGroupbox: TGroupBox 74 object SongInformationGroupbox: TGroupBox
75 Left = 8 75 Left = 8
@@ -289,18 +289,18 @@ object frmTracker: TfrmTracker
289 end 289 end
290 object InstrumentTabSheet: TTabSheet 290 object InstrumentTabSheet: TTabSheet
291 Caption = 'Instruments' 291 Caption = 'Instruments'
292 ClientHeight = 527 292 ClientHeight = 641
293 ClientWidth = 939 293 ClientWidth = 1064
294 ParentFont = False 294 ParentFont = False
295 object PaintBox1: TPaintBox 295 object PaintBox1: TPaintBox
296 AnchorSideTop.Control = FlowPanel1 296 AnchorSideTop.Control = FlowPanel1
297 AnchorSideTop.Side = asrBottom 297 AnchorSideTop.Side = asrBottom
298 AnchorSideBottom.Side = asrBottom 298 AnchorSideBottom.Side = asrBottom
299 Left = 0 299 Left = 0
300 Height = 35 300 Height = 149
301 Hint = 'Preview of how the resulting waveform will look with envelope applied' 301 Hint = 'Preview of how the resulting waveform will look with envelope applied'
302 Top = 492 302 Top = 492
303 Width = 939 303 Width = 1064
304 Align = alClient 304 Align = alClient
305 Color = clBlack 305 Color = clBlack
306 ParentColor = False 306 ParentColor = False
@@ -312,7 +312,7 @@ object frmTracker: TfrmTracker
312 Left = 0 312 Left = 0
313 Height = 492 313 Height = 492
314 Top = 0 314 Top = 0
315 Width = 939 315 Width = 1064
316 Align = alTop 316 Align = alTop
317 AutoSize = True 317 AutoSize = True
318 BevelOuter = bvNone 318 BevelOuter = bvNone
@@ -834,7 +834,7 @@ object frmTracker: TfrmTracker
834 Left = 651 834 Left = 651
835 Height = 223 835 Height = 223
836 Top = 262 836 Top = 262
837 Width = 264 837 Width = 397
838 Anchors = [] 838 Anchors = []
839 BorderSpacing.Left = 7 839 BorderSpacing.Left = 7
840 BorderSpacing.Top = 7 840 BorderSpacing.Top = 7
@@ -842,14 +842,14 @@ object frmTracker: TfrmTracker
842 BorderSpacing.Bottom = 7 842 BorderSpacing.Bottom = 7
843 Caption = 'Noise' 843 Caption = 'Noise'
844 ClientHeight = 203 844 ClientHeight = 203
845 ClientWidth = 260 845 ClientWidth = 393
846 ParentFont = False 846 ParentFont = False
847 TabOrder = 4 847 TabOrder = 4
848 object SevenBitCounterCheckbox: TCheckBox 848 object SevenBitCounterCheckbox: TCheckBox
849 Left = 8 849 Left = 8
850 Height = 19 850 Height = 19
851 Hint = 'Select LFSR width. When checked, output will sound like a tone rather than noise' 851 Hint = 'Select LFSR width. When checked, output will sound like a tone rather than noise'
852 Top = 80 852 Top = 8
853 Width = 215 853 Width = 215
854 Alignment = taLeftJustify 854 Alignment = taLeftJustify
855 Caption = '7 bit counter (more tone-like output)' 855 Caption = '7 bit counter (more tone-like output)'
@@ -857,120 +857,42 @@ object frmTracker: TfrmTracker
857 ParentFont = False 857 ParentFont = False
858 TabOrder = 0 858 TabOrder = 0
859 end 859 end
860 object Label14: TLabel 860 object Panel6: TPanel
861 Left = 9 861 Left = 8
862 Height = 15 862 Height = 152
863 Top = 51 863 Top = 40
864 Width = 71 864 Width = 376
865 Caption = 'Dividing ratio' 865 BevelOuter = bvLowered
866 ParentColor = False 866 ClientHeight = 152
867 ParentFont = False 867 ClientWidth = 376
868 end
869 object RandomizeNoiseButton: TButton
870 Left = 9
871 Height = 25
872 Hint = 'Randomize the noise instrument parameters to get a random drum-like sound'
873 Top = 112
874 Width = 242
875 Caption = 'Randomize'
876 OnClick = RandomizeNoiseButtonClick
877 ParentFont = False
878 TabOrder = 1 868 TabOrder = 1
879 end 869 object NoiseMacroPaintbox: TPaintBox
880 object Label25: TLabel 870 Left = 1
881 Left = 9 871 Height = 150
882 Height = 15 872 Top = 1
883 Top = 16 873 Width = 374
884 Width = 86 874 Align = alClient
885 Caption = 'Shift clock mask' 875 OnMouseDown = NoiseMacroPaintboxMouseDown
886 ParentColor = False 876 OnMouseMove = NoiseMacroPaintboxMouseMove
887 ParentFont = False 877 OnMouseUp = NoiseMacroPaintboxMouseUp
888 end 878 OnPaint = NoiseMacroPaintboxPaint
889 object ShiftClockTrackbar: TTrackBar 879 end
890 Left = 110
891 Height = 25
892 Top = 16
893 Width = 146
894 Max = 15
895 OnChange = ShiftClockSpinnerChange
896 Position = 0
897 ParentFont = False
898 TabOrder = 2
899 end
900 object DivRatioTrackbar: TTrackBar
901 Left = 110
902 Height = 25
903 Top = 51
904 Width = 146
905 Max = 7
906 OnChange = DivRatioSpinnerChange
907 Position = 0
908 ParentFont = False
909 TabOrder = 3
910 end
911 object Edit1: TEdit
912 Left = 9
913 Height = 23
914 Top = 144
915 Width = 80
916 OnChange = Edit1Change
917 TabOrder = 4
918 end
919 object Edit2: TEdit
920 Left = 96
921 Height = 23
922 Top = 144
923 Width = 80
924 OnChange = Edit1Change
925 TabOrder = 5
926 end
927 object Edit3: TEdit
928 Left = 184
929 Height = 23
930 Top = 144
931 Width = 80
932 OnChange = Edit1Change
933 TabOrder = 6
934 end
935 object Edit4: TEdit
936 Left = 9
937 Height = 23
938 Top = 176
939 Width = 80
940 OnChange = Edit1Change
941 TabOrder = 7
942 end
943 object Edit5: TEdit
944 Left = 96
945 Height = 23
946 Top = 176
947 Width = 80
948 OnChange = Edit1Change
949 TabOrder = 8
950 end
951 object Edit6: TEdit
952 Left = 184
953 Height = 23
954 Top = 176
955 Width = 80
956 OnChange = Edit1Change
957 TabOrder = 9
958 end 880 end
959 end 881 end
960 end 882 end
961 end 883 end
962 object WavesTabSheet: TTabSheet 884 object WavesTabSheet: TTabSheet
963 Caption = 'Waves' 885 Caption = 'Waves'
964 ClientHeight = 502 886 ClientHeight = 641
965 ClientWidth = 939 887 ClientWidth = 1064
966 ParentFont = False 888 ParentFont = False
967 object WaveEditPaintBox: TPaintBox 889 object WaveEditPaintBox: TPaintBox
968 AnchorSideTop.Control = WaveEditGroupBox 890 AnchorSideTop.Control = WaveEditGroupBox
969 AnchorSideTop.Side = asrBottom 891 AnchorSideTop.Side = asrBottom
970 Left = 0 892 Left = 0
971 Height = 342 893 Height = 481
972 Top = 160 894 Top = 160
973 Width = 939 895 Width = 1064
974 Align = alBottom 896 Align = alBottom
975 Anchors = [akTop, akLeft, akRight, akBottom] 897 Anchors = [akTop, akLeft, akRight, akBottom]
976 BorderSpacing.Top = 13 898 BorderSpacing.Top = 13
@@ -1638,11 +1560,11 @@ object frmTracker: TfrmTracker
1638 Left = 0 1560 Left = 0
1639 Height = 64 1561 Height = 64
1640 Top = 25 1562 Top = 25
1641 Width = 1145 1563 Width = 1270
1642 Align = alTop 1564 Align = alTop
1643 BevelOuter = bvNone 1565 BevelOuter = bvNone
1644 ClientHeight = 64 1566 ClientHeight = 64
1645 ClientWidth = 1145 1567 ClientWidth = 1270
1646 ParentFont = False 1568 ParentFont = False
1647 TabOrder = 3 1569 TabOrder = 3
1648 object LEDMeter1: TLEDMeter 1570 object LEDMeter1: TLEDMeter
@@ -1650,7 +1572,7 @@ object frmTracker: TfrmTracker
1650 Left = 0 1572 Left = 0
1651 Height = 32 1573 Height = 32
1652 Top = 32 1574 Top = 32
1653 Width = 357 1575 Width = 482
1654 Anchors = [akTop, akLeft, akRight] 1576 Anchors = [akTop, akLeft, akRight]
1655 BevelStyle = bvLowered 1577 BevelStyle = bvLowered
1656 Colors.Border = 2168839 1578 Colors.Border = 2168839
@@ -1673,7 +1595,7 @@ object frmTracker: TfrmTracker
1673 Left = 0 1595 Left = 0
1674 Height = 32 1596 Height = 32
1675 Top = 0 1597 Top = 0
1676 Width = 357 1598 Width = 482
1677 Anchors = [akTop, akLeft, akRight] 1599 Anchors = [akTop, akLeft, akRight]
1678 BevelStyle = bvLowered 1600 BevelStyle = bvLowered
1679 Colors.Border = 2168839 1601 Colors.Border = 2168839
@@ -1692,7 +1614,7 @@ object frmTracker: TfrmTracker
1692 Section3Value = 48 1614 Section3Value = 48
1693 end 1615 end
1694 object Duty1Visualizer: TPaintBox 1616 object Duty1Visualizer: TPaintBox
1695 Left = 357 1617 Left = 482
1696 Height = 64 1618 Height = 64
1697 Top = 0 1619 Top = 0
1698 Width = 197 1620 Width = 197
@@ -1702,7 +1624,7 @@ object frmTracker: TfrmTracker
1702 OnPaint = Duty1VisualizerPaint 1624 OnPaint = Duty1VisualizerPaint
1703 end 1625 end
1704 object Duty2Visualizer: TPaintBox 1626 object Duty2Visualizer: TPaintBox
1705 Left = 554 1627 Left = 679
1706 Height = 64 1628 Height = 64
1707 Top = 0 1629 Top = 0
1708 Width = 197 1630 Width = 197
@@ -1712,7 +1634,7 @@ object frmTracker: TfrmTracker
1712 OnPaint = Duty2VisualizerPaint 1634 OnPaint = Duty2VisualizerPaint
1713 end 1635 end
1714 object WaveVisualizer: TPaintBox 1636 object WaveVisualizer: TPaintBox
1715 Left = 751 1637 Left = 876
1716 Height = 64 1638 Height = 64
1717 Top = 0 1639 Top = 0
1718 Width = 197 1640 Width = 197
@@ -1722,7 +1644,7 @@ object frmTracker: TfrmTracker
1722 OnPaint = WaveVisualizerPaint 1644 OnPaint = WaveVisualizerPaint
1723 end 1645 end
1724 object NoiseVisualizer: TPaintBox 1646 object NoiseVisualizer: TPaintBox
1725 Left = 948 1647 Left = 1073
1726 Height = 64 1648 Height = 64
1727 Top = 0 1649 Top = 0
1728 Width = 197 1650 Width = 197
@@ -1734,9 +1656,9 @@ object frmTracker: TfrmTracker
1734 end 1656 end
1735 object StatusBar1: TStatusBar 1657 object StatusBar1: TStatusBar
1736 Left = 0 1658 Left = 0
1737 Height = 23 1659 Height = 28
1738 Top = 644 1660 Top = 758
1739 Width = 1145 1661 Width = 1270
1740 AutoHint = True 1662 AutoHint = True
1741 Panels = < 1663 Panels = <
1742 item 1664 item
@@ -1757,7 +1679,7 @@ object frmTracker: TfrmTracker
1757 Left = 0 1679 Left = 0
1758 Height = 25 1680 Height = 25
1759 Top = 0 1681 Top = 0
1760 Width = 1145 1682 Width = 1270
1761 AutoSize = True 1683 AutoSize = True
1762 Caption = 'ToolBar1' 1684 Caption = 'ToolBar1'
1763 EdgeBorders = [ebBottom] 1685 EdgeBorders = [ebBottom]
Modifiedtracker.pas +61−58
@@ -16,12 +16,6 @@ type
16 { TfrmTracker } 16 { TfrmTracker }
17 17
18 TfrmTracker = class(TForm) 18 TfrmTracker = class(TForm)
19 Edit1: TEdit;
20 Edit2: TEdit;
21 Edit3: TEdit;
22 Edit4: TEdit;
23 Edit5: TEdit;
24 Edit6: TEdit;
25 IncrementCurrentInstrumentAction: TAction; 19 IncrementCurrentInstrumentAction: TAction;
26 DecrementCurrentInstrumentAction: TAction; 20 DecrementCurrentInstrumentAction: TAction;
27 GotoGeneralAction: TAction; 21 GotoGeneralAction: TAction;
@@ -35,6 +29,8 @@ type
35 InsertRowForAllAction: TAction; 29 InsertRowForAllAction: TAction;
36 InsertRowAction: TAction; 30 InsertRowAction: TAction;
37 MenuItem39: TMenuItem; 31 MenuItem39: TMenuItem;
32 NoiseMacroPaintbox: TPaintBox;
33 Panel6: TPanel;
38 StopAction: TAction; 34 StopAction: TAction;
39 PlayOrderAction: TAction; 35 PlayOrderAction: TAction;
40 PlayCursorAction: TAction; 36 PlayCursorAction: TAction;
@@ -54,7 +50,6 @@ type
54 ImageList2: TImageList; 50 ImageList2: TImageList;
55 GBSaveDialog: TSaveDialog; 51 GBSaveDialog: TSaveDialog;
56 Label13: TLabel; 52 Label13: TLabel;
57 Label25: TLabel;
58 MenuItem10: TMenuItem; 53 MenuItem10: TMenuItem;
59 MenuItem16: TMenuItem; 54 MenuItem16: TMenuItem;
60 MenuItem23: TMenuItem; 55 MenuItem23: TMenuItem;
@@ -107,8 +102,6 @@ type
107 TrackerGridPopup: TPopupMenu; 102 TrackerGridPopup: TPopupMenu;
108 StartVolTrackbar: TTrackBar; 103 StartVolTrackbar: TTrackBar;
109 EnvChangeTrackbar: TTrackBar; 104 EnvChangeTrackbar: TTrackBar;
110 ShiftClockTrackbar: TTrackBar;
111 DivRatioTrackbar: TTrackBar;
112 LengthTrackbar: TTrackBar; 105 LengthTrackbar: TTrackBar;
113 SweepSizeTrackbar: TTrackBar; 106 SweepSizeTrackbar: TTrackBar;
114 ToolButton5: TToolButton; 107 ToolButton5: TToolButton;
@@ -194,7 +187,6 @@ type
194 SongInformationGroupbox: TGroupBox; 187 SongInformationGroupbox: TGroupBox;
195 Label15: TLabel; 188 Label15: TLabel;
196 Label16: TLabel; 189 Label16: TLabel;
197 RandomizeNoiseButton: TButton;
198 SevenBitCounterCheckbox: TCheckBox; 190 SevenBitCounterCheckbox: TCheckBox;
199 SweepTimeCombobox: TComboBox; 191 SweepTimeCombobox: TComboBox;
200 RoutineSynedit: TSynEdit; 192 RoutineSynedit: TSynEdit;
@@ -210,7 +202,6 @@ type
210 Label10: TLabel; 202 Label10: TLabel;
211 Label11: TLabel; 203 Label11: TLabel;
212 Label12: TLabel; 204 Label12: TLabel;
213 Label14: TLabel;
214 Label7: TLabel; 205 Label7: TLabel;
215 Label8: TLabel; 206 Label8: TLabel;
216 Label9: TLabel; 207 Label9: TLabel;
@@ -255,7 +246,6 @@ type
255 procedure DeleteRowForAllActionExecute(Sender: TObject); 246 procedure DeleteRowForAllActionExecute(Sender: TObject);
256 procedure DeleteRowForAllActionUpdate(Sender: TObject); 247 procedure DeleteRowForAllActionUpdate(Sender: TObject);
257 procedure Duty1VisualizerClick(Sender: TObject); 248 procedure Duty1VisualizerClick(Sender: TObject);
258 procedure Edit1Change(Sender: TObject);
259 procedure FileSaveAs1BeforeExecute(Sender: TObject); 249 procedure FileSaveAs1BeforeExecute(Sender: TObject);
260 procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); 250 procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
261 procedure FormDropFiles(Sender: TObject; const FileNames: array of String); 251 procedure FormDropFiles(Sender: TObject; const FileNames: array of String);
@@ -273,6 +263,13 @@ type
273 procedure InsertRowForAllActionUpdate(Sender: TObject); 263 procedure InsertRowForAllActionUpdate(Sender: TObject);
274 procedure MenuItem37Click(Sender: TObject); 264 procedure MenuItem37Click(Sender: TObject);
275 procedure MenuItem38Click(Sender: TObject); 265 procedure MenuItem38Click(Sender: TObject);
266 procedure NoiseMacroPaintboxMouseDown(Sender: TObject;
267 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
268 procedure NoiseMacroPaintboxMouseMove(Sender: TObject; Shift: TShiftState;
269 X, Y: Integer);
270 procedure NoiseMacroPaintboxMouseUp(Sender: TObject; Button: TMouseButton;
271 Shift: TShiftState; X, Y: Integer);
272 procedure NoiseMacroPaintboxPaint(Sender: TObject);
276 procedure PlayCursorActionExecute(Sender: TObject); 273 procedure PlayCursorActionExecute(Sender: TObject);
277 procedure PlayOrderActionExecute(Sender: TObject); 274 procedure PlayOrderActionExecute(Sender: TObject);
278 procedure ScrollBox1MouseWheelDown(Sender: TObject; Shift: TShiftState; 275 procedure ScrollBox1MouseWheelDown(Sender: TObject; Shift: TShiftState;
@@ -297,7 +294,6 @@ type
297 procedure ArtistEditChange(Sender: TObject); 294 procedure ArtistEditChange(Sender: TObject);
298 procedure CommentMemoChange(Sender: TObject); 295 procedure CommentMemoChange(Sender: TObject);
299 procedure DirectionComboBoxChange(Sender: TObject); 296 procedure DirectionComboBoxChange(Sender: TObject);
300 procedure DivRatioSpinnerChange(Sender: TObject);
301 procedure DutyComboboxChange(Sender: TObject); 297 procedure DutyComboboxChange(Sender: TObject);
302 procedure EnvChangeSpinnerChange(Sender: TObject); 298 procedure EnvChangeSpinnerChange(Sender: TObject);
303 procedure EnvelopePaintboxPaint(Sender: TObject); 299 procedure EnvelopePaintboxPaint(Sender: TObject);
@@ -353,7 +349,6 @@ type
353 procedure OctaveSpinEditChange(Sender: TObject); 349 procedure OctaveSpinEditChange(Sender: TObject);
354 procedure RoutineNumberSpinnerChange(Sender: TObject); 350 procedure RoutineNumberSpinnerChange(Sender: TObject);
355 procedure RoutineSyneditChange(Sender: TObject); 351 procedure RoutineSyneditChange(Sender: TObject);
356 procedure ShiftClockSpinnerChange(Sender: TObject);
357 procedure PlayStartActionExecute(Sender: TObject); 352 procedure PlayStartActionExecute(Sender: TObject);
358 procedure StepSpinEditChange(Sender: TObject); 353 procedure StepSpinEditChange(Sender: TObject);
359 procedure StopActionExecute(Sender: TObject); 354 procedure StopActionExecute(Sender: TObject);
@@ -385,7 +380,6 @@ type
385 procedure WaveEditPaintBoxMouseUp(Sender: TObject; Button: TMouseButton; 380 procedure WaveEditPaintBoxMouseUp(Sender: TObject; Button: TMouseButton;
386 Shift: TShiftState; X, Y: Integer); 381 Shift: TShiftState; X, Y: Integer);
387 procedure WaveEditPaintBoxPaint(Sender: TObject); 382 procedure WaveEditPaintBoxPaint(Sender: TObject);
388 procedure RandomizeNoiseButtonClick(Sender: TObject);
389 procedure InstrumentTypeComboboxChange(Sender: TObject); 383 procedure InstrumentTypeComboboxChange(Sender: TObject);
390 procedure LengthEnabledCheckboxChange(Sender: TObject); 384 procedure LengthEnabledCheckboxChange(Sender: TObject);
391 procedure PaintBox1Paint(Sender: TObject); 385 procedure PaintBox1Paint(Sender: TObject);
@@ -407,7 +401,7 @@ type
407 LoadedFileName: String; 401 LoadedFileName: String;
408 402
409 PreviewingInstrument: Integer; 403 PreviewingInstrument: Integer;
410 DrawingWave: Boolean; 404 DrawingWave, DrawingMacro: Boolean;
411 Playing: Boolean; 405 Playing: Boolean;
412 LoadingFile: Boolean; 406 LoadingFile: Boolean;
413 SaveSucceeded: Boolean; 407 SaveSucceeded: Boolean;
@@ -1069,7 +1063,7 @@ begin
1069 end; 1063 end;
1070 1064
1071 itNoise: begin 1065 itNoise: begin
1072 ShiftClockTrackbar.Position := CI^.ShiftClockFreq; 1066 {ShiftClockTrackbar.Position := CI^.ShiftClockFreq;
1073 DivRatioTrackbar.Position := CI^.DividingRatio; 1067 DivRatioTrackbar.Position := CI^.DividingRatio;
1074 SevenBitCounterCheckbox.Checked := CI^.CounterStep = swSeven; 1068 SevenBitCounterCheckbox.Checked := CI^.CounterStep = swSeven;
1075 1069
@@ -1078,7 +1072,7 @@ begin
1078 Edit3.Text := IntToStr(CI^.NoiseMacro[2]); 1072 Edit3.Text := IntToStr(CI^.NoiseMacro[2]);
1079 Edit4.Text := IntToStr(CI^.NoiseMacro[3]); 1073 Edit4.Text := IntToStr(CI^.NoiseMacro[3]);
1080 Edit5.Text := IntToStr(CI^.NoiseMacro[4]); 1074 Edit5.Text := IntToStr(CI^.NoiseMacro[4]);
1081 Edit6.Text := IntToStr(CI^.NoiseMacro[5]); 1075 Edit6.Text := IntToStr(CI^.NoiseMacro[5]);}
1082 end; 1076 end;
1083 end; 1077 end;
1084 1078
@@ -1202,18 +1196,6 @@ begin
1202 LoadInstrument(CurrentInstrumentBank, InstrumentNumberSpinner.Value); 1196 LoadInstrument(CurrentInstrumentBank, InstrumentNumberSpinner.Value);
1203 end; 1197 end;
1204 1198
1205 procedure TfrmTracker.RandomizeNoiseButtonClick(Sender: TObject);
1206 begin
1207 ShiftClockTrackbar.Position := 0;
1208 DivRatioTrackbar.Position := Random(Round(DivRatioTrackbar.Max));
1209 SevenBitCounterCheckbox.Checked := Random <= 0.5;
1210 LengthEnabledCheckbox.Checked := Random <= 0.5;
1211 LengthTrackbar.Position := Random(Round(LengthTrackbar.Max));
1212
1213 PreviewInstrument(NotesToFreqs.KeyData[RandomRange(LOWEST_NOTE, HIGHEST_NOTE)],
1214 UnmodInst(CurrentInstrumentBank, InstrumentNumberSpinner.Value));
1215 end;
1216
1217 procedure TfrmTracker.FormCreate(Sender: TObject); 1199 procedure TfrmTracker.FormCreate(Sender: TObject);
1218 var 1200 var
1219 PUI: PtrUint; 1201 PUI: PtrUint;
@@ -1644,6 +1626,55 @@ begin
1644 HexWaveEditEditingDone(nil); 1626 HexWaveEditEditingDone(nil);
1645 end; 1627 end;
1646 1628
1629 procedure TfrmTracker.NoiseMacroPaintboxMouseDown(Sender: TObject;
1630 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
1631 begin
1632 DrawingMacro := True;
1633 end;
1634
1635 procedure TfrmTracker.NoiseMacroPaintboxMouseMove(Sender: TObject;
1636 Shift: TShiftState; X, Y: Integer);
1637 var
1638 MacroIdx, Val: Integer;
1639 begin
1640 if DrawingMacro then begin
1641 MacroIdx := EnsureRange(Trunc((X/NoiseMacroPaintbox.Width) * 6), 0, 5);
1642 Val := EnsureRange(Floor((Y/NoiseMacroPaintbox.Height) * 63), 0, 63) - 31;
1643
1644 CurrentInstrument^.NoiseMacro[MacroIdx] := Val;
1645 NoiseMacroPaintbox.Invalidate;
1646 end;
1647 end;
1648
1649 procedure TfrmTracker.NoiseMacroPaintboxMouseUp(Sender: TObject;
1650 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
1651 begin
1652 DrawingMacro := False;
1653 end;
1654
1655 procedure TfrmTracker.NoiseMacroPaintboxPaint(Sender: TObject);
1656 var
1657 BarWidth, BarStep: Double;
1658 I: Integer;
1659 begin
1660 BarWidth := (NoiseMacroPaintbox.Width / 6); // TODO: change this constant?
1661 BarStep := (NoiseMacroPaintbox.Height / 63);
1662 with NoiseMacroPaintbox.Canvas do begin
1663 Brush.Color := clGameboyBlack;
1664 Clear;
1665
1666 for I := Low(TNoiseMacro) to High(TNoiseMacro) do begin
1667 Brush.Color := clGameboyMidGreen;
1668 FillRect(
1669 Trunc(I*BarWidth),
1670 NoiseMacroPaintbox.Height div 2,
1671 Trunc((I+1)*BarWidth),
1672 Ceil((NoiseMacroPaintbox.Height / 2) + (CurrentInstrument^.NoiseMacro[I] * BarStep))
1673 );
1674 end;
1675 end;
1676 end;
1677
1647 procedure TfrmTracker.PlayCursorActionExecute(Sender: TObject); 1678 procedure TfrmTracker.PlayCursorActionExecute(Sender: TObject);
1648 begin 1679 begin
1649 if GetPreviewReady then begin 1680 if GetPreviewReady then begin
@@ -1746,24 +1777,6 @@ begin
1746 snd[Section.OriginalIndex+1].ChannelOFF := Section.ImageIndex = 0; 1777 snd[Section.OriginalIndex+1].ChannelOFF := Section.ImageIndex = 0;
1747 end; 1778 end;
1748 1779
1749 procedure TfrmTracker.Edit1Change(Sender: TObject);
1750 begin
1751 if Sender = Edit1 then
1752 CurrentInstrument^.NoiseMacro[0] := StrToInt(Edit1.Text)
1753 else if Sender = Edit2 then
1754 CurrentInstrument^.NoiseMacro[1] := StrToInt(Edit2.Text)
1755 else if Sender = Edit3 then
1756 CurrentInstrument^.NoiseMacro[2] := StrToInt(Edit3.Text)
1757 else if Sender = Edit4 then
1758 CurrentInstrument^.NoiseMacro[3] := StrToInt(Edit4.Text)
1759 else if Sender = Edit5 then
1760 CurrentInstrument^.NoiseMacro[4] := StrToInt(Edit5.Text)
1761 else if Sender = Edit6 then
1762 CurrentInstrument^.NoiseMacro[5] := StrToInt(Edit6.Text)
1763 else
1764 ShowMessage('couldnt assign macro value');
1765 end;
1766
1767 procedure TfrmTracker.PasteActionExecute(Sender: TObject); 1780 procedure TfrmTracker.PasteActionExecute(Sender: TObject);
1768 begin 1781 begin
1769 PostMessage(Screen.ActiveControl.Handle, LM_PASTE, 0, 0); 1782 PostMessage(Screen.ActiveControl.Handle, LM_PASTE, 0, 0);
@@ -1784,11 +1797,6 @@ begin
1784 Song.Routines[RoutineNumberSpinner.Value] := RoutineSynedit.Text; 1797 Song.Routines[RoutineNumberSpinner.Value] := RoutineSynedit.Text;
1785 end; 1798 end;
1786 1799
1787 procedure TfrmTracker.ShiftClockSpinnerChange(Sender: TObject);
1788 begin
1789 CurrentInstrument^.ShiftClockFreq := Round(ShiftClockTrackbar.Position);
1790 end;
1791
1792 procedure TfrmTracker.PlayStartActionExecute(Sender: TObject); 1800 procedure TfrmTracker.PlayStartActionExecute(Sender: TObject);
1793 begin 1801 begin
1794 if GetPreviewReady then begin 1802 if GetPreviewReady then begin
@@ -1808,11 +1816,6 @@ begin
1808 HaltPlayback; 1816 HaltPlayback;
1809 end; 1817 end;
1810 1818
1811 procedure TfrmTracker.DivRatioSpinnerChange(Sender: TObject);
1812 begin
1813 CurrentInstrument^.DividingRatio := Round(DivRatioTrackbar.Position);
1814 end;
1815
1816 procedure TfrmTracker.DutyComboboxChange(Sender: TObject); 1819 procedure TfrmTracker.DutyComboboxChange(Sender: TObject);
1817 begin 1820 begin
1818 CurrentInstrument^.Duty := DutyComboBox.ItemIndex; 1821 CurrentInstrument^.Duty := DutyComboBox.ItemIndex;
Modifiedutils.pas +12−0
@@ -30,6 +30,8 @@ type
30 end; 30 end;
31 31
32 function Lerp(v0, v1, t: Double): Double; 32 function Lerp(v0, v1, t: Double): Double;
33 function ReMap(Value, Istart, Istop, Ostart, Ostop: Double): Double;
34 function IntReMap(Value, Istart, Istop, Ostart, Ostop: Integer): Integer;
33 function ConvertWaveform(Waveform: TWave): T4bitWave; 35 function ConvertWaveform(Waveform: TWave): T4bitWave;
34 procedure BlankPattern(Pat: PPattern); 36 procedure BlankPattern(Pat: PPattern);
35 procedure BlankCell(var Cell: TCell); 37 procedure BlankCell(var Cell: TCell);
@@ -57,6 +59,16 @@ begin
57 Result := ((1 - t) * v0) + (t * v1); 59 Result := ((1 - t) * v0) + (t * v1);
58 end; 60 end;
59 61
62 function ReMap(Value, Istart, Istop, Ostart, Ostop: Double): Double;
63 begin
64 Result := ostart + ((ostop - ostart) * ((value - istart) / (istop - istart)));
65 end;
66
67 function IntReMap(Value, Istart, Istop, Ostart, Ostop: Integer): Integer;
68 begin
69 Result := Trunc(ReMap(Value, Istart, Istop, Ostart, Ostop));
70 end;
71
60 function ConvertWaveform(Waveform: TWave): T4bitWave; 72 function ConvertWaveform(Waveform: TWave): T4bitWave;
61 var 73 var
62 I: Integer; 74 I: Integer;