Commit 5319254

Nick committed on
Implement #6
commit 531925471f1bd30dc136feae6315c937151e3685 parent 87a755a
2 changed files +52−17
Modifiedtracker.lfm +11−3
@@ -60,7 +60,7 @@ object frmTracker: TfrmTracker
60 Height = 480 60 Height = 480
61 Top = 0 61 Top = 0
62 Width = 982 62 Width = 982
63 ActivePage = InstrumentTabSheet 63 ActivePage = WavesTabSheet
64 Align = alClient 64 Align = alClient
65 ParentFont = False 65 ParentFont = False
66 TabIndex = 3 66 TabIndex = 3
@@ -911,8 +911,8 @@ object frmTracker: TfrmTracker
911 end 911 end
912 object WavesTabSheet: TTabSheet 912 object WavesTabSheet: TTabSheet
913 Caption = 'Waves' 913 Caption = 'Waves'
914 ClientHeight = 414 914 ClientHeight = 452
915 ClientWidth = 960 915 ClientWidth = 974
916 ParentFont = False 916 ParentFont = False
917 object WaveEditPaintBox: TPaintBox 917 object WaveEditPaintBox: TPaintBox
918 AnchorSideTop.Control = WaveEditGroupBox 918 AnchorSideTop.Control = WaveEditGroupBox
@@ -997,6 +997,14 @@ object frmTracker: TfrmTracker
997 Caption = 'Hex representation' 997 Caption = 'Hex representation'
998 ParentColor = False 998 ParentColor = False
999 end 999 end
1000 object PlayWaveWhileDrawingCheckbox: TCheckBox
1001 Left = 176
1002 Height = 19
1003 Top = 40
1004 Width = 149
1005 Caption = 'Play wave while drawing'
1006 TabOrder = 4
1007 end
1000 end 1008 end
1001 end 1009 end
1002 object CommentsTabSheet: TTabSheet 1010 object CommentsTabSheet: TTabSheet
Modifiedtracker.pas +41−14
@@ -17,6 +17,7 @@ type
17 17
18 TfrmTracker = class(TForm) 18 TfrmTracker = class(TForm)
19 Button1: TButton; 19 Button1: TButton;
20 PlayWaveWhileDrawingCheckbox: TCheckBox;
20 Duty1Visualizer: TPaintBox; 21 Duty1Visualizer: TPaintBox;
21 Duty2Visualizer: TPaintBox; 22 Duty2Visualizer: TPaintBox;
22 HexWaveEdit: TEdit; 23 HexWaveEdit: TEdit;
@@ -391,6 +392,7 @@ type
391 procedure ReloadPatterns; 392 procedure ReloadPatterns;
392 procedure CopyOrderGridToOrderMatrix; 393 procedure CopyOrderGridToOrderMatrix;
393 procedure CopyOrderMatrixToOrderGrid; 394 procedure CopyOrderMatrixToOrderGrid;
395 procedure CopyWaveIntoWaveRam(Wave: Integer);
394 function PreparePreview: Boolean; 396 function PreparePreview: Boolean;
395 procedure ResetEmulationThread; 397 procedure ResetEmulationThread;
396 398
@@ -407,7 +409,8 @@ type
407 procedure DrawWaveform(PB: TPaintBox; Wave: TWave); 409 procedure DrawWaveform(PB: TPaintBox; Wave: TWave);
408 procedure DrawVizualizer(PB: TPaintBox; Channel: Integer); 410 procedure DrawVizualizer(PB: TPaintBox; Channel: Integer);
409 411
410 procedure PreviewInstrument(Freq: Integer; Instr: Integer); 412 procedure PreviewInstrument(Freq: Integer; Instr: Integer); overload;
413 procedure PreviewInstrument(Freq: Integer; Instr: TInstrument); overload;
411 procedure PreviewC5; 414 procedure PreviewC5;
412 procedure Panic; 415 procedure Panic;
413 public 416 public
@@ -446,7 +449,6 @@ begin
446 RecreateTrackerGrid; 449 RecreateTrackerGrid;
447 CopyOrderMatrixToOrderGrid; 450 CopyOrderMatrixToOrderGrid;
448 451
449 // PLACEHOLDER
450 while InstrumentComboBox.Items.Count > 1 do 452 while InstrumentComboBox.Items.Count > 1 do
451 InstrumentComboBox.Items.Delete(1); 453 InstrumentComboBox.Items.Delete(1);
452 454
@@ -575,19 +577,22 @@ begin
575 end; 577 end;
576 578
577 procedure TfrmTracker.PreviewInstrument(Freq: Integer; Instr: Integer); 579 procedure TfrmTracker.PreviewInstrument(Freq: Integer; Instr: Integer);
580 begin
581 PreviewInstrument(Freq, Song.Instruments.All[Instr]);
582 end;
583
584 procedure TfrmTracker.PreviewInstrument(Freq: Integer; Instr: TInstrument);
578 var 585 var
579 Regs: TRegisters; 586 Regs: TRegisters;
580 I: Integer;
581 NewWaveform: T4bitWave;
582 begin 587 begin
583 // TODO: Find some way to synchronize with the playback thread, so it doesn't 588 // TODO: Find some way to synchronize with the playback thread, so it doesn't
584 // fail sometimes. 589 // fail sometimes.
585 590
586 with Song.Instruments.All[Instr] do //PLACEHOLDER 591 with Instr do
587 begin 592 begin
588 case Type_ of 593 case Type_ of
589 itSquare: begin 594 itSquare: begin
590 Regs := SquareInstrumentToRegisters(Freq, True, Song.Instruments.All[Instr]); 595 Regs := SquareInstrumentToRegisters(Freq, True, Instr);
591 Spokeb(NR10, Regs.NR10); 596 Spokeb(NR10, Regs.NR10);
592 Spokeb(NR11, Regs.NR11); 597 Spokeb(NR11, Regs.NR11);
593 Spokeb(NR12, Regs.NR12); 598 Spokeb(NR12, Regs.NR12);
@@ -595,12 +600,8 @@ begin
595 Spokeb(NR14, Regs.NR14); 600 Spokeb(NR14, Regs.NR14);
596 end; 601 end;
597 itWave: begin 602 itWave: begin
598 NewWaveform := ConvertWaveform(Song.Waves[Waveform]); 603 CopyWaveIntoWaveRam(Waveform);
599 // Fill itWave RAM with the waveform 604 Regs := WaveInstrumentToRegisters(Freq, True, Instr);
600 for I := Low(NewWaveform) to High(NewWaveform) do
601 Spokeb(AUD3_WAVE_RAM+I, NewWaveform[I]);
602
603 Regs := WaveInstrumentToRegisters(Freq, True, Song.Instruments.All[Instr]);
604 605
605 Spokeb(NR30, Regs.NR30); 606 Spokeb(NR30, Regs.NR30);
606 Spokeb(NR31, Regs.NR31); 607 Spokeb(NR31, Regs.NR31);
@@ -609,7 +610,7 @@ begin
609 Spokeb(NR34, Regs.NR34) 610 Spokeb(NR34, Regs.NR34)
610 end; 611 end;
611 itNoise: begin 612 itNoise: begin
612 Regs := NoiseInstrumentToRegisters(Freq, True, Song.Instruments.All[Instr]); 613 Regs := NoiseInstrumentToRegisters(Freq, True, Instr);
613 Spokeb(NR41, Regs.NR41); 614 Spokeb(NR41, Regs.NR41);
614 Spokeb(NR42, Regs.NR42); 615 Spokeb(NR42, Regs.NR42);
615 Spokeb(NR43, Regs.NR43); 616 Spokeb(NR43, Regs.NR43);
@@ -748,6 +749,16 @@ begin
748 OrderEditStringGrid.Cells[C, R] := '0'; 749 OrderEditStringGrid.Cells[C, R] := '0';
749 end; 750 end;
750 751
752 procedure TfrmTracker.CopyWaveIntoWaveRam(Wave: Integer);
753 var
754 NewWaveform: T4bitWave;
755 I: Integer;
756 begin
757 NewWaveform := ConvertWaveform(Song.Waves[Wave]);
758 for I := Low(NewWaveform) to High(NewWaveform) do
759 Spokeb(AUD3_WAVE_RAM+I, NewWaveform[I]);
760 end;
761
751 function TfrmTracker.PreparePreview: Boolean; 762 function TfrmTracker.PreparePreview: Boolean;
752 var 763 var
753 I: Integer; 764 I: Integer;
@@ -2032,8 +2043,21 @@ end;
2032 2043
2033 procedure TfrmTracker.WaveEditPaintBoxMouseDown(Sender: TObject; 2044 procedure TfrmTracker.WaveEditPaintBoxMouseDown(Sender: TObject;
2034 Button: TMouseButton; Shift: TShiftState; X, Y: Integer); 2045 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
2035 begin 2046 var
2047 TestInstrument: TInstrument;
2048 begin
2049 TestInstrument := Default(TInstrument);
2050 with TestInstrument do begin
2051 Type_ := itWave;
2052 OutputLevel := 1;
2053 Waveform := WaveEditNumberSpinner.Value;
2054 Length := 0;
2055 LengthEnabled := False;
2056 end;
2057
2036 DrawingWave := True; 2058 DrawingWave := True;
2059 if PlayWaveWhileDrawingCheckbox.Checked then
2060 PreviewInstrument(NotesToFreqs.Data[C_5], TestInstrument);
2037 end; 2061 end;
2038 2062
2039 procedure TfrmTracker.WaveEditPaintBoxMouseMove(Sender: TObject; 2063 procedure TfrmTracker.WaveEditPaintBoxMouseMove(Sender: TObject;
@@ -2048,6 +2072,8 @@ begin
2048 CurrentWave^[Idx] := EnsureRange(Trunc((Y / WaveEditPaintBox.Height)*$F), 0, $F); 2072 CurrentWave^[Idx] := EnsureRange(Trunc((Y / WaveEditPaintBox.Height)*$F), 0, $F);
2049 UpdateHexWaveTextbox; 2073 UpdateHexWaveTextbox;
2050 WaveEditPaintBox.Invalidate; 2074 WaveEditPaintBox.Invalidate;
2075 if PlayWaveWhileDrawingCheckbox.Checked then
2076 CopyWaveIntoWaveRam(WaveEditNumberSpinner.Value);
2051 end; 2077 end;
2052 end; 2078 end;
2053 2079
@@ -2055,6 +2081,7 @@ procedure TfrmTracker.WaveEditPaintBoxMouseUp(Sender: TObject;
2055 Button: TMouseButton; Shift: TShiftState; X, Y: Integer); 2081 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
2056 begin 2082 begin
2057 DrawingWave := False; 2083 DrawingWave := False;
2084 Panic;
2058 end; 2085 end;
2059 2086
2060 procedure TfrmTracker.WaveEditPaintBoxPaint(Sender: TObject); 2087 procedure TfrmTracker.WaveEditPaintBoxPaint(Sender: TObject);