Commit dde3998

Nick committed on
Cleaned up BASS stuff fixed memory leak in sound.pas
commit dde3998f09d133fe63e069083ef78bb67903c710 parent f1c8545
2 changed files +47−68
ModifiedGBEmu.lps +32−32
@@ -106,8 +106,8 @@
106 <IsPartOfProject Value="True"/> 106 <IsPartOfProject Value="True"/>
107 <IsVisibleTab Value="True"/> 107 <IsVisibleTab Value="True"/>
108 <EditorIndex Value="2"/> 108 <EditorIndex Value="2"/>
109 <TopLine Value="213"/> 109 <TopLine Value="148"/>
110 <CursorPos X="72" Y="225"/> 110 <CursorPos X="31" Y="164"/>
111 <UsageCount Value="67"/> 111 <UsageCount Value="67"/>
112 <Loaded Value="True"/> 112 <Loaded Value="True"/>
113 <DefaultSyntaxHighlighter Value="Delphi"/> 113 <DefaultSyntaxHighlighter Value="Delphi"/>
@@ -281,123 +281,123 @@
281 <JumpHistory Count="30" HistoryIndex="29"> 281 <JumpHistory Count="30" HistoryIndex="29">
282 <Position1> 282 <Position1>
283 <Filename Value="Sound\sound.pas"/> 283 <Filename Value="Sound\sound.pas"/>
284 <Caret Line="169" Column="16" TopLine="153"/> 284 <Caret Line="191" Column="24" TopLine="173"/>
285 </Position1> 285 </Position1>
286 <Position2> 286 <Position2>
287 <Filename Value="Sound\sound.pas"/> 287 <Filename Value="Sound\sound.pas"/>
288 <Caret Line="168" Column="48" TopLine="164"/> 288 <Caret Line="228" TopLine="201"/>
289 </Position2> 289 </Position2>
290 <Position3> 290 <Position3>
291 <Filename Value="Sound\sound.pas"/> 291 <Filename Value="Sound\sound.pas"/>
292 <Caret Line="177" Column="4" TopLine="167"/> 292 <Caret Line="230" Column="33" TopLine="202"/>
293 </Position3> 293 </Position3>
294 <Position4> 294 <Position4>
295 <Filename Value="Sound\sound.pas"/> 295 <Filename Value="Sound\sound.pas"/>
296 <Caret Line="161" Column="51" TopLine="152"/> 296 <Caret Line="165" Column="5" TopLine="153"/>
297 </Position4> 297 </Position4>
298 <Position5> 298 <Position5>
299 <Filename Value="Sound\sound.pas"/> 299 <Filename Value="Sound\sound.pas"/>
300 <Caret Line="179" TopLine="168"/> 300 <Caret Line="213" Column="93" TopLine="204"/>
301 </Position5> 301 </Position5>
302 <Position6> 302 <Position6>
303 <Filename Value="Sound\sound.pas"/> 303 <Filename Value="Sound\sound.pas"/>
304 <Caret Line="16" Column="6"/> 304 <Caret Line="216" Column="42" TopLine="196"/>
305 </Position6> 305 </Position6>
306 <Position7> 306 <Position7>
307 <Filename Value="Sound\sound.pas"/> 307 <Filename Value="Sound\sound.pas"/>
308 <Caret Line="183" Column="3" TopLine="166"/> 308 <Caret Line="211" Column="8" TopLine="199"/>
309 </Position7> 309 </Position7>
310 <Position8> 310 <Position8>
311 <Filename Value="Sound\sound.pas"/> 311 <Filename Value="Sound\sound.pas"/>
312 <Caret Line="185" Column="68" TopLine="167"/> 312 <Caret Line="216" Column="42" TopLine="201"/>
313 </Position8> 313 </Position8>
314 <Position9> 314 <Position9>
315 <Filename Value="Sound\sound.pas"/> 315 <Filename Value="Sound\sound.pas"/>
316 <Caret Line="165" Column="34" TopLine="157"/> 316 <Caret Line="214" Column="11" TopLine="199"/>
317 </Position9> 317 </Position9>
318 <Position10> 318 <Position10>
319 <Filename Value="Sound\sound.pas"/> 319 <Filename Value="Sound\sound.pas"/>
320 <Caret Line="189" Column="10" TopLine="171"/> 320 <Caret Line="205" Column="21" TopLine="197"/>
321 </Position10> 321 </Position10>
322 <Position11> 322 <Position11>
323 <Filename Value="Sound\sound.pas"/> 323 <Filename Value="Sound\sound.pas"/>
324 <Caret Line="570" Column="33" TopLine="558"/> 324 <Caret Line="297" Column="49" TopLine="276"/>
325 </Position11> 325 </Position11>
326 <Position12> 326 <Position12>
327 <Filename Value="Sound\sound.pas"/> 327 <Filename Value="Sound\sound.pas"/>
328 <Caret Line="16" Column="5" TopLine="26"/> 328 <Caret Line="286" TopLine="280"/>
329 </Position12> 329 </Position12>
330 <Position13> 330 <Position13>
331 <Filename Value="Sound\sound.pas"/> 331 <Filename Value="Sound\sound.pas"/>
332 <Caret Line="171" Column="32" TopLine="167"/> 332 <Caret Line="16" Column="6"/>
333 </Position13> 333 </Position13>
334 <Position14> 334 <Position14>
335 <Filename Value="Sound\sound.pas"/> 335 <Filename Value="Sound\sound.pas"/>
336 <Caret Line="198" TopLine="190"/> 336 <Caret Line="222" Column="7" TopLine="209"/>
337 </Position14> 337 </Position14>
338 <Position15> 338 <Position15>
339 <Filename Value="Sound\sound.pas"/> 339 <Filename Value="Sound\sound.pas"/>
340 <Caret Line="229" Column="73" TopLine="217"/> 340 <Caret Line="165" Column="34" TopLine="151"/>
341 </Position15> 341 </Position15>
342 <Position16> 342 <Position16>
343 <Filename Value="Sound\sound.pas"/> 343 <Filename Value="Sound\sound.pas"/>
344 <Caret Line="191" Column="24" TopLine="173"/> 344 <Caret Line="161" Column="4" TopLine="150"/>
345 </Position16> 345 </Position16>
346 <Position17> 346 <Position17>
347 <Filename Value="Sound\sound.pas"/> 347 <Filename Value="Sound\sound.pas"/>
348 <Caret Line="228" TopLine="201"/> 348 <Caret Line="181" Column="16" TopLine="157"/>
349 </Position17> 349 </Position17>
350 <Position18> 350 <Position18>
351 <Filename Value="Sound\sound.pas"/> 351 <Filename Value="Sound\sound.pas"/>
352 <Caret Line="230" Column="33" TopLine="202"/> 352 <Caret Line="210" Column="18" TopLine="194"/>
353 </Position18> 353 </Position18>
354 <Position19> 354 <Position19>
355 <Filename Value="Sound\sound.pas"/> 355 <Filename Value="Sound\sound.pas"/>
356 <Caret Line="165" Column="5" TopLine="153"/> 356 <Caret Line="209" Column="39" TopLine="192"/>
357 </Position19> 357 </Position19>
358 <Position20> 358 <Position20>
359 <Filename Value="Sound\sound.pas"/> 359 <Filename Value="Sound\sound.pas"/>
360 <Caret Line="213" Column="93" TopLine="204"/> 360 <Caret Line="240" Column="13" TopLine="157"/>
361 </Position20> 361 </Position20>
362 <Position21> 362 <Position21>
363 <Filename Value="Sound\sound.pas"/> 363 <Filename Value="Sound\sound.pas"/>
364 <Caret Line="216" Column="42" TopLine="196"/> 364 <Caret Line="571" Column="5" TopLine="33"/>
365 </Position21> 365 </Position21>
366 <Position22> 366 <Position22>
367 <Filename Value="Sound\sound.pas"/> 367 <Filename Value="Sound\sound.pas"/>
368 <Caret Line="211" Column="8" TopLine="199"/> 368 <Caret Line="203" Column="51" TopLine="212"/>
369 </Position22> 369 </Position22>
370 <Position23> 370 <Position23>
371 <Filename Value="Sound\sound.pas"/> 371 <Filename Value="Sound\sound.pas"/>
372 <Caret Line="216" Column="42" TopLine="201"/> 372 <Caret Line="377" Column="13" TopLine="360"/>
373 </Position23> 373 </Position23>
374 <Position24> 374 <Position24>
375 <Filename Value="Sound\sound.pas"/> 375 <Filename Value="Sound\sound.pas"/>
376 <Caret Line="214" Column="11" TopLine="199"/> 376 <Caret Line="169" Column="23" TopLine="155"/>
377 </Position24> 377 </Position24>
378 <Position25> 378 <Position25>
379 <Filename Value="Sound\sound.pas"/> 379 <Filename Value="Sound\sound.pas"/>
380 <Caret Line="205" Column="21" TopLine="197"/> 380 <Caret Line="352" Column="26" TopLine="335"/>
381 </Position25> 381 </Position25>
382 <Position26> 382 <Position26>
383 <Filename Value="Sound\sound.pas"/> 383 <Filename Value="Sound\sound.pas"/>
384 <Caret Line="297" Column="49" TopLine="276"/> 384 <Caret Line="353" Column="13" TopLine="337"/>
385 </Position26> 385 </Position26>
386 <Position27> 386 <Position27>
387 <Filename Value="Sound\sound.pas"/> 387 <Filename Value="Sound\sound.pas"/>
388 <Caret Line="286" TopLine="280"/> 388 <Caret Line="352" Column="26" TopLine="336"/>
389 </Position27> 389 </Position27>
390 <Position28> 390 <Position28>
391 <Filename Value="Sound\sound.pas"/> 391 <Filename Value="Sound\sound.pas"/>
392 <Caret Line="16" Column="6"/> 392 <Caret Line="374" Column="26" TopLine="358"/>
393 </Position28> 393 </Position28>
394 <Position29> 394 <Position29>
395 <Filename Value="Sound\sound.pas"/> 395 <Filename Value="Sound\sound.pas"/>
396 <Caret Line="222" Column="7" TopLine="209"/> 396 <Caret Line="375" Column="13" TopLine="359"/>
397 </Position29> 397 </Position29>
398 <Position30> 398 <Position30>
399 <Filename Value="Sound\sound.pas"/> 399 <Filename Value="Sound\sound.pas"/>
400 <Caret Line="165" Column="34" TopLine="151"/> 400 <Caret Line="374" Column="26" TopLine="358"/>
401 </Position30> 401 </Position30>
402 </JumpHistory> 402 </JumpHistory>
403 </ProjectSession> 403 </ProjectSession>
ModifiedSound/sound.pas +15−36
@@ -156,39 +156,33 @@ implementation
156 uses vars; 156 uses vars;
157 157
158 const 158 const
159 curBlock: longint = 0;
160 sampleCycles: longint = (8192 * 1024) div 22050; 159 sampleCycles: longint = (8192 * 1024) div 22050;
161 160
162 var 161 var
163 cs: TRTLCriticalSection;
164 bufs: array[0..1] of Pointer;
165 bufPtr: array[0..1] of pointer;
166
167 ready: integer; 162 ready: integer;
168 bufPos, bufCycles, bufLVal, bufRVal: integer; 163 bufPos, bufCycles, bufLVal, bufRVal: integer;
169
170 var
171 sndEv: array[0..1] of THANDLE;
172 buf: array[0..2047] of byte; 164 buf: array[0..2047] of byte;
173 bufIndx: word = 0;
174 playing, left: integer;
175 165
176 procedure EnableSound; 166 procedure EnableSound;
177 var
178 p: pointer;
179 begin 167 begin
180 if soundEnable then 168 if soundEnable then
181 exit; 169 exit;
182 170
171 BASS_Init(-1, 22050, 0, 0, nil);
172 PlayStream := BASS_StreamCreate(
173 22050,
174 2,
175 BASS_SAMPLE_8BITS,
176 StreamProc(STREAMPROC_PUSH),
177 nil);
178 BASS_ChannelPlay(PlayStream, True);
179
183 soundEnable := True; 180 soundEnable := True;
184 ready := 3; 181 ready := 3;
185 bufPos := 0; 182 bufPos := 0;
186 bufCycles := 0; 183 bufCycles := 0;
187 bufLVal := 0; 184 bufLVal := 0;
188 bufRVal := 0; 185 bufRVal := 0;
189
190 bufs[curBlock] := GetMem(2048); //GlobalAlloc(GMEM_MOVEABLE, 2048);
191 bufPtr[curBlock] := bufs[curBlock]; //GlobalLock(bufs[curBlock]);
192 end; 186 end;
193 187
194 procedure DisableSound; 188 procedure DisableSound;
@@ -196,32 +190,28 @@ begin
196 if not soundEnable then 190 if not soundEnable then
197 exit; 191 exit;
198 192
193 BASS_Free;
194
199 soundEnable := False; 195 soundEnable := False;
200 end; 196 end;
201 197
202 procedure SoundDoOut(l, r: byte; cycles: integer); 198 procedure SoundDoOut(l, r: byte; cycles: integer);
203 var
204 Idx: Integer;
205 begin 199 begin
206 Inc(bufLVal, l * cycles); 200 Inc(bufLVal, l * cycles);
207 Inc(bufRVal, r * cycles); 201 Inc(bufRVal, r * cycles);
208 Inc(bufCycles, cycles); 202 Inc(bufCycles, cycles);
209 if bufCycles >= sampleCycles then 203 if bufCycles >= sampleCycles then
210 begin 204 begin
211 byte(PChar(bufPtr[curBlock])[bufPos]) := bufRVal div sampleCycles; 205 buf[bufPos] := bufRVal div sampleCycles;
212 byte(PChar(bufPtr[curBlock])[bufPos + 1]) := bufLVal div sampleCycles; 206 buf[bufPos + 1] := bufLVal div sampleCycles;
213 bufCycles := 0; 207 bufCycles := 0;
214 Inc(bufPos, 2); 208 Inc(bufPos, 2);
215 bufLVal := 0; 209 bufLVal := 0;
216 bufRVal := 0; 210 bufRVal := 0;
217 if bufPos >= 2048 then 211 if bufPos >= 2048 then
218 begin 212 begin
219 BASS_StreamPutData(PlayStream, bufPtr[curBlock], 2048); 213 BASS_StreamPutData(PlayStream, @buf, 2048);
220 Dec(ready); 214 Dec(ready);
221
222 curBlock := (curBlock + 1) and 1;
223 bufs[curBlock] := GetMem(2048); //GlobalAlloc(GMEM_MOVEABLE, 2048);
224 bufPtr[curBlock] := bufs[curBlock]; //GlobalLock(bufs[curBlock]);
225 bufPos := 0; 215 bufPos := 0;
226 end; 216 end;
227 end; 217 end;
@@ -258,7 +248,7 @@ procedure SoundUpdate(cycles: integer);
258 var 248 var
259 n, stage: integer; 249 n, stage: integer;
260 begin 250 begin
261 if (not soundEnable) or (bufPtr[0] = nil) then 251 if (not soundEnable) then
262 exit; 252 exit;
263 if sndRegChange then 253 if sndRegChange then
264 begin 254 begin
@@ -582,15 +572,4 @@ begin
582 sampleCycles := n; 572 sampleCycles := n;
583 end; 573 end;
584 574
585 begin
586 BASS_Init(-1, 22050, 0, 0, nil);
587 PlayStream := BASS_StreamCreate(
588 22050,
589 2,
590 BASS_SAMPLE_8BITS,
591 StreamProc(STREAMPROC_PUSH),
592 nil);
593 BASS_ChannelPlay(PlayStream, True);
594 //Assign(MyFile, 'outf2.pcm');
595 //Rewrite(MyFile);
596 end. 575 end.