diff --git a/experimental-audio.diff b/experimental-audio.diff new file mode 100644 index 0000000000..7697070fb2 --- /dev/null +++ b/experimental-audio.diff @@ -0,0 +1,97 @@ +diff --git a/audio/audio_driver.c b/audio/audio_driver.c +index 3209354b19..caf10dbed2 100644 +--- a/audio/audio_driver.c ++++ b/audio/audio_driver.c +@@ -606,7 +606,6 @@ static void audio_driver_flush(const int16_t *data, size_t samples) + src_data.data_in = audio_driver_input_data; + src_data.input_frames = samples >> 1; + +- + if (audio_driver_dsp) + { + struct retro_dsp_data dsp_data; +@@ -722,6 +721,19 @@ void audio_driver_sample(int16_t left, int16_t right) + audio_driver_data_ptr = 0; + } + ++void audio_driver_menu_sample(void) ++{ ++ static unsigned count = 0; ++ audio_driver_output_samples_conv_buf[count++] = 0; ++ audio_driver_output_samples_conv_buf[count++] = 0; ++ ++ if (audio_driver_data_ptr < audio_driver_chunk_size) ++ return; ++ ++ audio_driver_flush(audio_driver_output_samples_conv_buf, ++ count); ++} ++ + /** + * audio_driver_sample_batch: + * @data : pointer to audio buffer. +diff --git a/audio/audio_driver.h b/audio/audio_driver.h +index 6dfacaa89f..e5c37a344c 100644 +--- a/audio/audio_driver.h ++++ b/audio/audio_driver.h +@@ -271,6 +271,8 @@ bool audio_driver_deinit(void); + + bool audio_driver_init(void); + ++void audio_driver_menu_sample(void); ++ + bool audio_driver_mixer_add_stream(audio_mixer_stream_params_t *params); + + enum resampler_quality audio_driver_get_resampler_quality(void); +diff --git a/menu/menu_driver.c b/menu/menu_driver.c +index 45580c12f5..894cbf56bc 100644 +--- a/menu/menu_driver.c ++++ b/menu/menu_driver.c +@@ -1683,8 +1683,10 @@ static void menu_driver_toggle(bool on) + /* Stop all rumbling before entering the menu. */ + command_event(CMD_EVENT_RUMBLE_STOP, NULL); + ++#if 0 + if (pause_libretro) + command_event(CMD_EVENT_AUDIO_STOP, NULL); ++#endif + + /* Override keyboard callback to redirect to menu instead. + * We'll use this later for something ... */ +@@ -1702,8 +1704,10 @@ static void menu_driver_toggle(bool on) + if (!rarch_ctl(RARCH_CTL_IS_SHUTDOWN, NULL)) + driver_set_nonblock_state(); + ++#if 0 + if (pause_libretro) + command_event(CMD_EVENT_AUDIO_START, NULL); ++#endif + + /* Restore libretro keyboard callback. */ + if (key_event && frontend_key_event) +diff --git a/retroarch.c b/retroarch.c +index 537ed82f37..29df4434b0 100644 +--- a/retroarch.c ++++ b/retroarch.c +@@ -2608,6 +2608,7 @@ static enum runloop_state runloop_check_state( + + retro_ctx.poll_cb(); + ++ + { + enum menu_action action; + bool focused = false; +@@ -2627,10 +2628,13 @@ static enum runloop_state runloop_check_state( + rarch_menu_running_finished(); + + if (focused || !runloop_idle) ++ { + menu_driver_render(runloop_idle, rarch_is_inited, + (current_core_type == CORE_TYPE_DUMMY) + ) + ; ++ audio_driver_menu_sample(); ++ } + + old_input = current_input; +