@@ -80,15 +80,15 @@ static rg_audio_sample_t *currentAudioBuffer;
8080static rg_task_t * audio_task_handle ;
8181#endif
8282
83- static bool apu_enabled = true;
83+ static bool sound_enabled = true;
8484static bool lowpass_filter = false;
8585
8686static int keymap_id = 0 ;
8787static keymap_t keymap ;
8888
8989static const char * SETTING_KEYMAP = "keymap" ;
90- static const char * SETTING_APU_EMULATION = "apu" ;
91- static const char * SETTING_APU_FILTER = "filter" ;
90+ static const char * SETTING_SOUND_EMULATION = "apu" ;
91+ static const char * SETTING_SOUND_FILTER = "filter" ;
9292// --- MAIN
9393
9494static void update_keymap (int id )
@@ -115,6 +115,8 @@ static bool load_state_handler(const char *filename)
115115static bool reset_handler (bool hard )
116116{
117117 S9xReset ();
118+ memset (audioBuffers [0 ], 0 , AUDIO_BUFFER_LENGTH * 4 );
119+ memset (audioBuffers [1 ], 0 , AUDIO_BUFFER_LENGTH * 4 );
118120 return true;
119121}
120122
@@ -130,12 +132,11 @@ static rg_gui_event_t apu_toggle_cb(rg_gui_option_t *option, rg_gui_event_t even
130132{
131133 if (event == RG_DIALOG_PREV || event == RG_DIALOG_NEXT )
132134 {
133- apu_enabled = !apu_enabled ;
134- rg_settings_set_number (NS_APP , SETTING_APU_EMULATION , apu_enabled );
135+ sound_enabled = !sound_enabled ;
136+ rg_settings_set_number (NS_APP , SETTING_SOUND_EMULATION , sound_enabled );
135137 }
136138
137- strcpy (option -> value , apu_enabled ? _ ("On" ) : _ ("Off" ));
138-
139+ strcpy (option -> value , sound_enabled ? _ ("On" ) : _ ("Off" ));
139140 return RG_DIALOG_VOID ;
140141}
141142
@@ -144,11 +145,10 @@ static rg_gui_event_t lowpass_filter_cb(rg_gui_option_t *option, rg_gui_event_t
144145 if (event == RG_DIALOG_PREV || event == RG_DIALOG_NEXT )
145146 {
146147 lowpass_filter = !lowpass_filter ;
147- rg_settings_set_number (NS_APP , SETTING_APU_FILTER , lowpass_filter );
148+ rg_settings_set_number (NS_APP , SETTING_SOUND_FILTER , lowpass_filter );
148149 }
149150
150151 strcpy (option -> value , lowpass_filter ? _ ("On" ) : _ ("Off" ));
151-
152152 return RG_DIALOG_VOID ;
153153}
154154
@@ -304,7 +304,8 @@ static void audio_task(void *arg)
304304 {
305305 if (msg .type == RG_TASK_MSG_STOP )
306306 break ;
307- mix_samples (AUDIO_BUFFER_LENGTH << 1 );
307+ if (msg .type != 0 )
308+ mix_samples (AUDIO_BUFFER_LENGTH << 1 );
308309 rg_audio_submit (currentAudioBuffer , AUDIO_BUFFER_LENGTH );
309310 }
310311}
@@ -331,8 +332,8 @@ void snes_main(void)
331332 app = rg_system_reinit (AUDIO_SAMPLE_RATE , & handlers , NULL );
332333
333334 // Load settings
334- apu_enabled = rg_settings_get_number (NS_APP , SETTING_APU_EMULATION , 1 );
335- lowpass_filter = rg_settings_get_number (NS_APP , SETTING_APU_FILTER , 0 );
335+ sound_enabled = rg_settings_get_number (NS_APP , SETTING_SOUND_EMULATION , 1 );
336+ lowpass_filter = rg_settings_get_number (NS_APP , SETTING_SOUND_FILTER , 0 );
336337 update_keymap (rg_settings_get_number (NS_APP , SETTING_KEYMAP , 0 ));
337338
338339 // Allocate surfaces and audio buffers
@@ -347,10 +348,10 @@ void snes_main(void)
347348 currentUpdate = updates [0 ];
348349
349350#ifdef AUDIO_DOUBLE_BUFFERING
350- audioBuffers [0 ] = (rg_audio_sample_t * )malloc (AUDIO_BUFFER_LENGTH * 4 );
351- audioBuffers [1 ] = (rg_audio_sample_t * )malloc (AUDIO_BUFFER_LENGTH * 4 );
351+ audioBuffers [0 ] = (rg_audio_sample_t * )calloc (AUDIO_BUFFER_LENGTH , 4 );
352+ audioBuffers [1 ] = (rg_audio_sample_t * )calloc (AUDIO_BUFFER_LENGTH , 4 );
352353#else
353- audioBuffers [0 ] = (rg_audio_sample_t * )malloc (AUDIO_BUFFER_LENGTH * 4 );
354+ audioBuffers [0 ] = (rg_audio_sample_t * )calloc (AUDIO_BUFFER_LENGTH , 4 );
354355 audioBuffers [1 ] = audioBuffers [0 ];
355356#endif
356357 currentAudioBuffer = audioBuffers [0 ];
@@ -432,6 +433,8 @@ void snes_main(void)
432433 else if (joystick & RG_KEY_OPTION )
433434 {
434435 rg_gui_options_menu ();
436+ memset (audioBuffers [0 ], 0 , AUDIO_BUFFER_LENGTH * 4 );
437+ memset (audioBuffers [1 ], 0 , AUDIO_BUFFER_LENGTH * 4 );
435438 }
436439
437440 menuPressed = joystick & RG_KEY_MENU ;
@@ -451,11 +454,8 @@ void snes_main(void)
451454 S9xMainLoop ();
452455
453456 #ifdef USE_AUDIO_TASK
454- if (apu_enabled )
455- {
456- rg_task_msg_t msg = {0 };
457- rg_task_send (audio_task_handle , & msg );
458- }
457+ rg_task_msg_t msg = {.type = (int )sound_enabled };
458+ rg_task_send (audio_task_handle , & msg );
459459 #endif
460460
461461 if (drawFrame )
@@ -466,16 +466,10 @@ void snes_main(void)
466466 }
467467
468468 #ifndef USE_AUDIO_TASK
469- if (apu_enabled )
470- {
469+ if (sound_enabled )
471470 mix_samples (AUDIO_BUFFER_LENGTH << 1 );
472- rg_system_tick (rg_system_timer () - startTime );
473- rg_audio_submit (currentAudioBuffer , AUDIO_BUFFER_LENGTH );
474- }
475- else
476- {
477- rg_system_tick (rg_system_timer () - startTime );
478- }
471+ rg_system_tick (rg_system_timer () - startTime );
472+ rg_audio_submit (currentAudioBuffer , AUDIO_BUFFER_LENGTH );
479473 #else
480474 rg_system_tick (rg_system_timer () - startTime );
481475 #endif
0 commit comments