@@ -284,12 +284,13 @@ void paulaSetPeriod(int32_t ch, uint16_t period)
284
284
v -> dOldVoiceDeltaMul = 1.0 / v -> dOldVoiceDelta ;
285
285
}
286
286
287
+ // to be read on next sampling step
287
288
v -> AUD_PER_delta = v -> dOldVoiceDelta ;
288
-
289
+ v -> AUD_PER_deltamul = v -> dOldVoiceDeltaMul ;
290
+
289
291
// set BLEP stuff
290
- v -> dDeltaMul = v -> dOldVoiceDeltaMul ;
291
- if (v -> dLastDelta == 0.0 )
292
- v -> dLastDelta = v -> AUD_PER_delta ;
292
+ if (v -> dLastDelta == 0.0 ) v -> dLastDelta = v -> AUD_PER_delta ;
293
+ if (v -> dLastDeltaMul == 0.0 ) v -> dLastDeltaMul = v -> AUD_PER_deltamul ;
293
294
}
294
295
295
296
void paulaSetVolume (int32_t ch , uint16_t vol )
@@ -385,8 +386,10 @@ void paulaStartDMA(int32_t ch)
385
386
v -> sampleCounter -- ;
386
387
387
388
// set BLEP stuff
389
+ v -> dDeltaMul = v -> AUD_PER_deltamul ;
388
390
v -> dLastPhase = 0.0 ;
389
391
v -> dLastDelta = v -> dDelta ;
392
+ v -> dLastDeltaMul = v -> dDeltaMul ;
390
393
v -> dBlepOffset = 0.0 ;
391
394
392
395
v -> dPhase = 0.0 ;
@@ -473,8 +476,15 @@ void mixChannels(int32_t numSamples)
473
476
{
474
477
v -> dPhase -= 1.0 ;
475
478
479
+ // set BLEP stuff
480
+ v -> dLastPhase = v -> dPhase ;
481
+ v -> dLastDelta = v -> dDelta ;
482
+ v -> dLastDeltaMul = v -> dDeltaMul ;
483
+ v -> dBlepOffset = v -> dLastPhase * v -> dLastDeltaMul ;
484
+
476
485
// Paula only updates period (delta) during period refetching (this stage)
477
486
v -> dDelta = v -> AUD_PER_delta ;
487
+ v -> dDeltaMul = v -> AUD_PER_deltamul ;
478
488
479
489
if (v -> sampleCounter == 0 )
480
490
{
@@ -495,18 +505,13 @@ void mixChannels(int32_t numSamples)
495
505
/* Pre-compute current sample point.
496
506
** Output volume is only read from AUDxVOL at this stage,
497
507
** and we don't emulate volume PWM anyway, so we can
498
- ** pre-multiply by volume at this point .
508
+ ** pre-multiply by volume here .
499
509
*/
500
510
v -> dSample = v -> AUD_DAT [0 ] * v -> AUD_VOL ; // -128..127 * 0.0 .. 1.0
501
511
502
512
// progress AUD_DAT buffer
503
513
v -> AUD_DAT [0 ] = v -> AUD_DAT [1 ];
504
514
v -> sampleCounter -- ;
505
-
506
- // setup BLEP stuff
507
- v -> dBlepOffset = v -> dPhase * v -> dDeltaMul ;
508
- v -> dLastPhase = v -> dPhase ;
509
- v -> dLastDelta = v -> dDelta ;
510
515
}
511
516
}
512
517
}
0 commit comments