mirror of https://github.com/bsnes-emu/bsnes.git
Update to bsnes v034r04 release.
14 hours of straight programming brings you this: http://byuu.cinnamonpirate.com/temp/bsnes_v034_wip04.zip Windows binary and source included, binary does not have ZIP+JMA support enabled, as it's a WIP release. Yes, vsync works both on Windows and Linux. In fact, it actually seems to work better on Linux, in that it requires lower audio latencies and has no troubles at full 5x scale on my 1920x1200 monitor. Overview of new features: Most importantly, I've added a new menu group to the settings menu group, "Synchronize", containing "Synchronize Video" and "Synchronize Audio" checkboxes. You can have neither, one or both checked. Up to you. That made the "Uncapped" speed setting redundant, so that was removed. Next, there's a new audio configuration panel with lots of new goodies. Volume lets you scale audio from 10% to 200%. Note that going over 100% will obviously cause aliasing. It's a much better idea to turn up your speakers first. But who knows, it could come in handy. On one machine with OSS4, I couldn't adjust volume in Audacious, and it always bothered me that it was so much louder than bsnes, so I saw no reason to cap the volume to 100% here. Latency lets you control the number of milliseconds between adding data to the sound buffer and it being played. Note that this is _not_ the absolute latency. Any sound servers and resamplers will obviously add to this. It increments in steps of 5ms, because I don't want people wasting their time trying to get it absolutely perfect. 5ms is a small enough increment that no human being will notice. I also have to re-create all the buffers and/or device itself when that changes, so I want to keep it from changing too frequently. Not that there's a memory / resource leak, but just in case. PC output frequency let's you control the master frequency for the sound card output. You can set this to 22050hz (not a good idea, loses precision, there as a last resort), 32000hz (for purists), 44100hz (for most cards), 48000hz (for higher end cards -- set as default because it's a nicer multiple of 32000 than 44100 is) and, yes, 96000hz. And I'm sure all the audiophiles will remark how much better it sounds, right? Believe it or not, there's actually some value to higher frequencies for the vsync. Higher rates lower the rounding errors with interpolation and such, so you can use lower SNES input rates. And speaking of which ... SNES input frequency is what the base SNES input is skewed to. The basic idea is that you want to get the value as low as possible without sound crackling. The lower it is, the less video frames duplicated, the less jerkiness of the video. The higher it is, the less likely an audio breakup is. Once again, Linux seems to come out on top here. Because of it's non- ring buffer approach to audio, both ALSA and OpenAL can insert blank samples in a way that DirectSound simply cannot. Whatever it does to BS underflows, it works really well, because you can barely even notice it. The default is a tad on the dangerous side. If anything, you may need to increase it. Get the right values for everything, and you can easily play games and never notice any video tearing or audio crackling whatsoever. Lastly, I removed the "Show Statusbar" option from the misc menu, per FitzRoy. Oh, also note that with Linux (both for OpenGL and Xv) and Win/OpenGL, you have to toggle the vsync enable in your video driver's control panel. Pain in the ass, that. Linux/SDL and Win/GDI do not vsync. No, I'm not even going to bother trying to add that to them. My settings: Hardware: nVidia 8800 GTS 320, Intel HDA audio, 24" LG @ 1920x1200x24bpp@60hz Windows: Direct3D, DirectSound, Latency = 120ms, PC freq = 48000hz, SNES freq = 32050hz; 4x scale always works, 5x scale misses vblank every few seconds Linux: OpenGL, ALSA, Latency = 60ms, PC freq = 48000hz, SNES freq = 32050hz; 4x and 5x scale always works I'd be interested in hearing what works best for you guys. I'm especially interested in how PAL works on a monitor running at 50hz. I don't have any that can handle that resolution, nor 100hz. I don't expect scrolling to look great at 100/120hz, as I have no special handling for it. > Even if it is wondows-only, you may want to add the option of using > a short sleep in the advanced options panel. No, I really can't :P I tried just to see what would happen, calling Sleep(1) a single time is enough to jump over the entire vblank period. In the worst case scenario, you get stuck in a loop, never hitting vblank, and the framerate drops to 1fps. Trust me, you don't want a sleep in there. Now, I know you're thinking, "why not let the video card do the sync for you?" -- well, one, some drivers still eat up all the CPU time in their loops, and two, by polling the vblank status repeatedly, I actually get better results with 5x scale in D3D on my system. And I don't have to destroy the video device to toggle the video sync enable. [No archive available]
This commit is contained in:
parent
f529a84fd1
commit
8e4f1be189