Commit 244ad91

Nick committed on
Refactor sound rendering
commit 244ad91ba400982dfa79b28bd3d842e28fb878b5 parent 3a61fb4
1 changed files +36−42
Modifiedrendertowave.pas +36−42
@@ -52,8 +52,10 @@ type
52 52
53 procedure UpdateButtonEnabledStates; 53 procedure UpdateButtonEnabledStates;
54 54
55 procedure ExportWaveToFile(Filename: String; Seconds: Integer); overload; 55 procedure ExportWaveToFile(Filename: String); overload;
56 procedure ExportWaveToFile(Filename: String; OrderNum: Integer; Loops: Integer); overload; 56
57 procedure RenderSeconds(Seconds: Integer);
58 procedure RenderLoops(TargetOrder: Integer; Loops: Integer);
57 59
58 procedure OrderCheckFD; 60 procedure OrderCheckFD;
59 public 61 public
@@ -83,10 +85,11 @@ begin
83 UpdateButtonEnabledStates; 85 UpdateButtonEnabledStates;
84 86
85 try 87 try
86 if RadioGroup1.ItemIndex = 0 then 88 ExportWaveToFile(FileNameEdit1.FileName);
89 {if RadioGroup1.ItemIndex = 0 then
87 ExportWaveToFile(FileNameEdit1.FileName, SecondsSpinEdit.Value) 90 ExportWaveToFile(FileNameEdit1.FileName, SecondsSpinEdit.Value)
88 else 91 else
89 ExportWaveToFile(FileNameEdit1.FileName, OrderSpinEdit.Value, LoopTimesSpinEdit.Value); 92 ExportWaveToFile(FileNameEdit1.FileName, OrderSpinEdit.Value, LoopTimesSpinEdit.Value);}
90 except 93 except
91 on E: Exception do begin 94 on E: Exception do begin
92 MessageDlg('Error!', 'Couldn''t write ' + FileNameEdit1.FileName + ' !' + LineEnding + 95 MessageDlg('Error!', 'Couldn''t write ' + FileNameEdit1.FileName + ' !' + LineEnding +
@@ -140,14 +143,11 @@ begin
140 CancelButton.Enabled := Rendering and not CancelRequested; 143 CancelButton.Enabled := Rendering and not CancelRequested;
141 end; 144 end;
142 145
143 procedure TfrmRenderToWave.ExportWaveToFile(Filename: String; Seconds: Integer); 146 procedure TfrmRenderToWave.ExportWaveToFile(Filename: String);
144 var 147 var
145 CompletedCycles: QWord = 0;
146 CyclesToDo: QWord;
147 OutStream: TStream; 148 OutStream: TStream;
148 Proc: TProcess; 149 Proc: TProcess;
149 begin 150 begin
150 CyclesToDo := (70224*60)*Seconds;
151 ProgressBar1.Position := 0; 151 ProgressBar1.Position := 0;
152 152
153 z80_reset; 153 z80_reset;
@@ -177,10 +177,10 @@ begin
177 try 177 try
178 BeginWritingSoundToStream(OutStream); 178 BeginWritingSoundToStream(OutStream);
179 179
180 while (CompletedCycles < CyclesToDo) and not CancelRequested do begin 180 // Choose which rendering time strategy to use
181 Inc(CompletedCycles, z80_decode); 181 case RadioGroup1.ItemIndex of
182 ProgressBar1.Position := Trunc((CompletedCycles / CyclesToDo)*100); 182 0: RenderSeconds(SecondsSpinEdit.Value);
183 if Random(500) = 1 then Application.ProcessMessages; 183 1: RenderLoops(OrderSpinEdit.Value, LoopTimesSpinEdit.Value);
184 end; 184 end;
185 185
186 if CancelRequested then Exit; 186 if CancelRequested then Exit;
@@ -204,43 +204,37 @@ begin
204 end; 204 end;
205 end; 205 end;
206 206
207 procedure TfrmRenderToWave.ExportWaveToFile(Filename: String; 207 procedure TfrmRenderToWave.RenderSeconds(Seconds: Integer);
208 OrderNum: Integer; Loops: Integer);
209 var 208 var
210 TimesToSeePattern: Integer; 209 CompletedCycles: QWord = 0;
210 CyclesToDo: QWord;
211 begin 211 begin
212 RenderButton.Enabled:=False; 212 CyclesToDo := (70224*60)*Seconds;
213 213 while (CompletedCycles < CyclesToDo) and not CancelRequested do begin
214 TimesToSeePattern := (LoopTimesSpinEdit.Value+1); 214 Inc(CompletedCycles, z80_decode);
215 TimesSeenTargetPattern := 0; 215 ProgressBar1.Position := Trunc((CompletedCycles / CyclesToDo)*100);
216 CurrentSeenPattern := -1; 216 if Random(500) = 1 then Application.ProcessMessages;
217 217 end;
218 z80_reset; 218 end;
219 ResetSound;
220 enablesound;
221
222 //BeginWritingSoundToStream(Filename);
223 219
220 procedure TfrmRenderToWave.RenderLoops(TargetOrder: Integer; Loops: Integer);
221 var
222 TimesToSeePattern: Integer;
223 OldFD: TFDCallback;
224 begin
225 OldFD := FDCallback;
224 FDCallback := @OrderCheckFD; 226 FDCallback := @OrderCheckFD;
225 227
226 load('hUGEDriver/preview.gb'); 228 CurrentSeenPattern := -1;
227 SymbolTable := ParseSymFile('hUGEDriver/preview.sym'); 229 TimesSeenTargetPattern := 0;
228 230 TimesToSeePattern := (LoopTimesSpinEdit.Value+1);
229 try 231 while (TimesSeenTargetPattern < TimesToSeePattern) and not CancelRequested do begin
230 while TimesSeenTargetPattern < TimesToSeePattern do begin 232 z80_decode;
231 z80_decode; 233 ProgressBar1.Position := Trunc((TimesSeenTargetPattern / TimesToSeePattern)*100);
232 ProgressBar1.Position := Trunc((TimesSeenTargetPattern / TimesToSeePattern)*100); 234 if Random(500) = 1 then Application.ProcessMessages;
233 if Random(500) = 1 then Application.ProcessMessages;
234 end;
235 except
236 on E: EHaltingProblem do begin
237 MessageDlg('Error!', E.Message, mtError, [mbOK], '');
238 end;
239 end; 235 end;
240 236
241 EndWritingSoundToStream; 237 FDCallback := OldFD;
242
243 RenderButton.Enabled:=True;
244 end; 238 end;
245 239
246 procedure TfrmRenderToWave.OrderCheckFD; 240 procedure TfrmRenderToWave.OrderCheckFD;