@@ -151,28 +151,38 @@ int MinxAudio_SaveStateStream(memstream_t *stream)
151
151
POKESAVESS_END (32 );
152
152
}
153
153
154
+ static int16_t MinxAudio_AudioProcessDirectPWM (void )
155
+ {
156
+ uint32_t Pwm = 0 ;
157
+ uint16_t TmrCnt = (MinxTimers .Tmr3CntA >> 24 ) | ((MinxTimers .Tmr3CntB >> 24 ) << 8 );
158
+ uint16_t TmrPre = (MinxTimers .Tmr3PreA >> 24 ) | ((MinxTimers .Tmr3PreB >> 24 ) << 8 );
159
+
160
+ // Affect sound based of PWM
161
+ if (TmrPre )
162
+ Pwm = MinxTimers .Timer3Piv * MINX_AUDIO_PWM_RAG / TmrPre ;
163
+ if (Pwm > MINX_AUDIO_PWM_RAG )
164
+ Pwm = MINX_AUDIO_PWM_RAG - 1 ; // Avoid clipping
165
+ if (TmrPre < 128 )
166
+ TmrCnt = 0 ; // Avoid high hizz
167
+
168
+ // Output
169
+ if (TmrCnt <= MinxTimers .Timer3Piv )
170
+ return MinxAudio .Volume + Pwm * MinxAudio .PWMMul ;
171
+ return MINX_AUDIO_SILENCE + Pwm * MinxAudio .PWMMul ;
172
+ }
173
+
174
+
154
175
void MinxAudio_ChangeEngine (int engine )
155
176
{
156
177
if (PokeMini_Flags & POKEMINI_GENSOUND )
157
178
engine = engine ? 1 : 0 ;
158
179
SoundEngine = engine ;
159
180
switch (engine ) {
160
- case MINX_AUDIO_GENERATED :
161
- RequireSoundSync = 0 ;
162
- MinxAudio_AudioProcess = NULL ;
163
- break ;
164
- case MINX_AUDIO_DIRECT :
165
- RequireSoundSync = 1 ;
166
- MinxAudio_AudioProcess = MinxAudio_AudioProcessDirect ;
167
- break ;
168
- case MINX_AUDIO_EMULATED :
169
- RequireSoundSync = 1 ;
170
- MinxAudio_AudioProcess = MinxAudio_AudioProcessEmulated ;
171
- break ;
172
181
case MINX_AUDIO_DIRECTPWM :
173
182
RequireSoundSync = 1 ;
174
183
MinxAudio_AudioProcess = MinxAudio_AudioProcessDirectPWM ;
175
184
break ;
185
+ case MINX_AUDIO_GENERATED :
176
186
default :
177
187
RequireSoundSync = 0 ;
178
188
MinxAudio_AudioProcess = NULL ;
@@ -304,57 +314,6 @@ static void MinxAudio_GetEmulated(int *Sound_Frequency, int *Pulse_Width)
304
314
}
305
315
}
306
316
307
- int16_t MinxAudio_AudioProcessDirect (void )
308
- {
309
- uint16_t TmrCnt = (MinxTimers .Tmr3CntA >> 24 ) | ((MinxTimers .Tmr3CntB >> 24 ) << 8 );
310
-
311
- if (TmrCnt <= MinxTimers .Timer3Piv )
312
- return MinxAudio .Volume ;
313
- return MINX_AUDIO_SILENCE ;
314
- }
315
-
316
- int16_t MinxAudio_AudioProcessEmulated (void )
317
- {
318
- int Sound_Frequency , Pulse_Width ;
319
- MinxAudio_GetEmulated (& Sound_Frequency , & Pulse_Width );
320
- // Silence
321
- if (Sound_Frequency < 50 )
322
- return MINX_AUDIO_SILENCE ;
323
- else if (Sound_Frequency < 20000 )
324
- {
325
- // Normal
326
- MinxAudio .AudioSCnt -= Sound_Frequency * MINX_AUDIOCONV ;
327
- if ((MinxAudio .AudioSCnt & 0xFFF00000 )
328
- >= (Pulse_Width << 20 ))
329
- return MinxAudio .Volume ;
330
- return MINX_AUDIO_SILENCE ;
331
- }
332
- // PWM
333
- if (Pulse_Width > 4095 )
334
- Pulse_Width = 4095 ;
335
- return MINX_AUDIO_SILENCE + (Pulse_Width << 2 ) * MinxAudio .PWMMul ;
336
- }
337
-
338
- int16_t MinxAudio_AudioProcessDirectPWM (void )
339
- {
340
- uint32_t Pwm = 0 ;
341
- uint16_t TmrCnt = (MinxTimers .Tmr3CntA >> 24 ) | ((MinxTimers .Tmr3CntB >> 24 ) << 8 );
342
- uint16_t TmrPre = (MinxTimers .Tmr3PreA >> 24 ) | ((MinxTimers .Tmr3PreB >> 24 ) << 8 );
343
-
344
- // Affect sound based of PWM
345
- if (TmrPre )
346
- Pwm = MinxTimers .Timer3Piv * MINX_AUDIO_PWM_RAG / TmrPre ;
347
- if (Pwm > MINX_AUDIO_PWM_RAG )
348
- Pwm = MINX_AUDIO_PWM_RAG - 1 ; // Avoid clipping
349
- if (TmrPre < 128 )
350
- TmrCnt = 0 ; // Avoid high hizz
351
-
352
- // Output
353
- if (TmrCnt <= MinxTimers .Timer3Piv )
354
- return MinxAudio .Volume + Pwm * MinxAudio .PWMMul ;
355
- return MINX_AUDIO_SILENCE + Pwm * MinxAudio .PWMMul ;
356
- }
357
-
358
317
int16_t MinxAudio_PiezoFilter (int32_t Sample )
359
318
{
360
319
int32_t HP_pCoeff = 40960 ;
@@ -502,11 +461,3 @@ void MinxAudio_GetSamplesS16Ch(int16_t *soundout,
502
461
}
503
462
}
504
463
}
505
-
506
- int MinxAudio_SyncWithAudio (void )
507
- {
508
- if (!RequireSoundSync )
509
- return 0 ;
510
- return MinxAudio_iSamplesInBuffer () >= MinxAudio_FIFOThreshold ;
511
- }
512
-
0 commit comments