libretro / RetroArch

Cross-platform, sophisticated frontend for the libretro API. Licensed GPLv3.
http://www.libretro.com
GNU General Public License v3.0
10.27k stars 1.83k forks source link

Audio crackling if RA running NOT in fullspeed #5325

Closed ofry closed 6 months ago

ofry commented 7 years ago

First and foremost consider this:

Description

Audio crackling if RA running NOT in fullspeed.

For example, full speed = 60 FPS. If game runs on speed near 45 FPS (if I turned on too many or too heavy shaders...) audio is bad crackling.

Expected behavior

Audio should go by same speed as video (same slowness rate), without crackling. Example - DesMuMe standalone, ePSXe with heavy software renderer video plugins etc.

I think it's on all versions of RA now. I use latest RA nightly: 6d32929

hizzlekizzle commented 7 years ago

Pretty sure this is a "won't fix" situation, as the crackling is just what happens when the audio buffer empties. You can greatly increase the audio_rate_control_delta and it will resample the audio on-the-fly to avoid crackling but will sound very strange.

andres-asm commented 7 years ago

This would only be fixable in cases were the CPU is running full speed but the video renderer can't cope... which is probably not that often nowdays.

On Thu, Aug 17, 2017 at 9:19 PM, hizzlekizzle notifications@github.com wrote:

Pretty sure this is a "won't fix" situation, as the crackling is just what happens when the audio buffer empties. You can greatly increase the audio_rate_control_delta and it will resample the audio on-the-fly to avoid crackling but will sound very strange.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/libretro/RetroArch/issues/5325#issuecomment-323242025, or mute the thread https://github.com/notifications/unsubscribe-auth/ABpC0AcnAkqnXoXkOTYai486iysuLIw7ks5sZPTDgaJpZM4O6-KS .

ofry commented 7 years ago

Hm... I think I have THAT case.

My CPU: Intel i7 3930K. I think it's enough for it. I can make "stress test":

1) Set Windowed mode RA. 2) Open Task Manager. 3) See CPU load.

ofry commented 7 years ago

2017-08-18 07 27 32

Beetle PSX HW options:


beetle_psx_hw_renderer = "opengl"
beetle_psx_hw_renderer_software_fb = "enabled"
beetle_psx_hw_adaptive_smoothing = "enabled"
beetle_psx_hw_filter = "SABR"
beetle_psx_hw_internal_resolution = "4x"
beetle_psx_hw_internal_color_depth = "32bpp"
beetle_psx_hw_wireframe = "disabled"
beetle_psx_hw_display_vram = "disabled"
beetle_psx_hw_pgxp_mode = "memory only"
beetle_psx_hw_pgxp_caching = "enabled"
beetle_psx_hw_pgxp_texture = "enabled"
beetle_psx_hw_dither_mode = "internal resolution"
beetle_psx_hw_scale_dither = "enabled"
beetle_psx_hw_initial_scanline = "0"
beetle_psx_hw_last_scanline = "239"
beetle_psx_hw_initial_scanline_pal = "0"
beetle_psx_hw_last_scanline_pal = "287"
beetle_psx_hw_frame_duping_enable = "enabled"
beetle_psx_hw_widescreen_hack = "disabled"
beetle_psx_hw_crop_overscan = "enabled"
beetle_psx_hw_image_crop = "disabled"
beetle_psx_hw_image_offset = "disabled"
beetle_psx_hw_display_internal_framerate = "disabled"
beetle_psx_hw_analog_calibration = "disabled"
beetle_psx_hw_analog_toggle = "disabled"
beetle_psx_hw_enable_multitap_port1 = "disabled"
beetle_psx_hw_enable_multitap_port2 = "disabled"
beetle_psx_hw_cpu_overclock = "enabled"
beetle_psx_hw_cdimagecache = "enabled"
beetle_psx_hw_skipbios = "disabled"
beetle_psx_hw_use_mednafen_memcard0_method = "libretro"
beetle_psx_hw_enable_memcard1 = "enabled"
beetle_psx_hw_shared_memory_cards = "disabled"

Shader options:


shaders = "5"
shader0 = "C:\retroarch\shaders\shaders_glsl\xbr\shaders\super-xbr\super-4xbr-3d-pass0.glsl"
filter_linear0 = "false"
wrap_mode0 = "clamp_to_border"
mipmap_input0 = "false"
alias0 = ""
float_framebuffer0 = "false"
srgb_framebuffer0 = "false"
scale_type_x0 = "source"
scale_x0 = "1.000000"
scale_type_y0 = "source"
scale_y0 = "1.000000"
shader1 = "C:\retroarch\shaders\shaders_glsl\xbr\shaders\super-xbr\super-4xbr-3d-pass1.glsl"
filter_linear1 = "false"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = ""
float_framebuffer1 = "false"
srgb_framebuffer1 = "false"
scale_type_x1 = "source"
scale_x1 = "1.000000"
scale_type_y1 = "source"
scale_y1 = "1.000000"
shader2 = "C:\retroarch\shaders\shaders_glsl\xbr\shaders\super-xbr\super-4xbr-3d-pass2.glsl"
filter_linear2 = "false"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = ""
float_framebuffer2 = "false"
srgb_framebuffer2 = "false"
scale_type_x2 = "source"
scale_x2 = "1.000000"
scale_type_y2 = "source"
scale_y2 = "1.000000"
shader3 = "C:\retroarch\shaders\shaders_glsl\xbr\shaders\super-xbr\super-4xbr-3d-pass3.glsl"
filter_linear3 = "false"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "false"
alias3 = ""
float_framebuffer3 = "false"
srgb_framebuffer3 = "false"
scale_type_x3 = "source"
scale_x3 = "1.000000"
scale_type_y3 = "source"
scale_y3 = "1.000000"
shader4 = "C:\retroarch\shaders\shaders_glsl\xbr\shaders\super-xbr\custom-jinc2-sharper.glsl"
filter_linear4 = "false"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "false"
alias4 = ""
float_framebuffer4 = "false"
srgb_framebuffer4 = "false"
parameters = "XBR_EDGE_STR;XBR_WEIGHT;XBR_ANTI_RINGING;JINC2_WINDOW_SINC;JINC2_SINC;JINC2_AR_STRENGTH"
XBR_EDGE_STR = "0.600000"
XBR_WEIGHT = "1.000000"
XBR_ANTI_RINGING = "1.000000"
JINC2_WINDOW_SINC = "0.420000"
JINC2_SINC = "0.920000"
JINC2_AR_STRENGTH = "1.000000"
ofry commented 7 years ago

XBR-family shaders gives very good image, but very slow... so it can be issue.

ofry commented 7 years ago

So CPU load was 8% only...

ofry commented 7 years ago

@hizzlekizzle Why it's "won't fix" situation?

I mean smth better "audio sync" option, so audio speed can be same as video speed and without crackling.

ghost commented 7 years ago

@ofry It's possible your GPU is the bottleneck here, with that complex shader chain blocking the CPU while waiting on it and thus lowering the framerate without using much CPU.

ofry commented 5 years ago

I think it's related: https://github.com/libretro/RetroArch/issues/5916#issuecomment-440486210

RobLoach commented 6 months ago

Update the core, and check your vsync settings. There are a few different cores for you to try out too.