I’ve noticed that using “alsathread” instead of “alsa” driver in RetroArch leads better audio sync and frame smoothing on non-native screen framerates (f.e. playing 59.94 fps games on 50 Hz or 60.00 Hz displays). Also it gives less sound cracks and lags on low-performace games/cores.
Speaking of RetroArch syncing and performance too (just not to create new thread):
Setting “video_refresh_rate” to display’s working framerate along with “threaded video” before launching game greatly helps in some cases to fix frame tearing, frame time consistency, and incorrect game speed with sound stretching. For myself I did it in libretroConfig.py this way:
if gameResolution["width"] > 701 and gameResolution["width"] <= 720:
if gameResolution["height"] == 576: # this is PAL TV, use 50 fps
retroarchConfig['video_refresh_rate'] = '50.00'
elif gameResolution["height"] == 480: # this is NTSC TV, use 59.94 fps
retroarchConfig['video_refresh_rate'] = '59.94'
I don’t know which param is used to transfer current display framerate to this script, so I used resolution to “detect” it, but you developers might do it with more correct way…
Also low screen resolutions (like SDTV) requires set “menu_scale_factor” to 1.50 and font size to “24” to fix menus and notifications readability.