@@ -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); |