mirror of https://github.com/bsnes-emu/bsnes.git
Update to bsnes v027r02? release.
Okay, here's the deal with sound. wertigon's initial OpenAL driver was incomplete and produced no audio, and _willow_'s had some Windows-specific bindings. So, Nach took those, some OpenAL sample code, and some other application's OpenAL code and produced a working driver for it. Then Nach and I refined the driver -- I got rid of the crashing on exit and frequency changing, and both of us wrote new sample() functions. Nach's is vastly superior on CPU resources, so we'll probably go with that one. That code can be found here: http://byuu.cinnamonpirate.com/temp/audio.openal.cpp This code wouldn't be possible without the help from wertigon, _willow_ _and_ Nach, so many thanks to everyone, and I'm sorry I wasn't able to go directly with anyone's specific OpenAL driver. Linux compatibility was a big concern here. You'll all be getting full credit in the source and documentation for bsnes v0.028. --- Now, as for the driver itself. It should work on Windows now with the sample() and init() corrections, but maybe not. I don't have the means at the moment to build a Windows binary with it, but maybe I can in the future. But anyway, I don't intend to compile in OpenAL/Win support by default with bsnes, but rather leave it as an option for those who compile it themselves. Why? Because Windows does not come with alut.dll and OpenAL32.dll. I don't want to require another download to use bsnes, and I don't want to package an extra 300kb of DLLs with it either. Plus, it doesn't seem to be working too well for most people anyway thus far. Windows does come with DX9, and basically nobody has problems with DirectSound. It's great, it has very low latency, and it seems to work on everyone's sound cards, unlike the OpenAL stuff. So it's really not needed for Windows. --- However, on Linux, OpenAL has a lot of good points. Unlike with Linux/OSS3, OpenAL backends to ALSA which supports software mixing. Meaning audacious and bsnes can run at the same time. And OpenAL has much lower latency than libao, as well as the ability to disable speed throttling when necessary. But! The OSS4 driver, with SND_DSP_COOKEDMODE, absolutely _destroys_ even the OpenAL driver. In fact, it's even twice as good as the DirectSound driver on Windows! No joke! From http://wiki.freebsd.org/RyanBeasley/ioctlref : > ... this ioctl is meant to give processes direct access to the > hardware buffer, giving the application the most control possible > (ex: minimizing latency by avoiding in-kernel processing). With this, I get roughly ~15-20ms latency, at the very most, with bsnes. It skips kernel processing entirely! It's hard to even describe such a low latency. I've never heard Link's sword sound effect start so quickly. It's really quite impressive. Remember when kode54 was talking about ASIO or kmixer or whatever? That super low latency kernel-level audio setup that bypasses the kernel and goes directly to the sound card? This is it, but for Linux. It's that good. But the problem, of course, is Linux' obsession with ALSA, even though OSS4 is GPLv2 now (and not to mention portable). ALSA is, of course, total garbage. Anyone who's programmed for it knows that. It's very easy to install OSS4, download a DEB package, double click it, hit install and reboot. But the problem is, many Linux distros try their best to kill OSS now. Lots of apps are compiled by Linux distro vendors to only support ALSA, so it does cause some problems, and you have to reconfigure many apps to use OSS afterwards, so it's not a very good solution to make bsnes default to the OSS driver. Further, because ALSA is so terrible, it causes the OpenAL driver (which is really just a wrapper to ALSA here) to suck, and it causes lots of static in the sound. And ALSA's OSS emulation causes severe video lag -- bizarre, but it has something to do with the blocking mechanism in ALSA. Only installing OSS4 fixes this. For both drivers, in fact. So, because of ALSA's pathetically poor emulation of both OSS and OpenAL, I can't default bsnes to either of these drivers. Therefore, I have to leave the libao driver as the default, but I really recommend the installation of OSS4 (if you haven't gotten that hint already) if you really want the best audio possible, and don't mind losing a couple of your favorite ALSA-only apps. If installing OSS4 is too much of a plunge, then I still recommend experimenting with the OpenAL and OSS (in that order) drivers under ALSA. If they work good, great. If not, sorry, it isn't a problem with the bsnes drivers. You'll have to stick with libao and it's terrible latency and forced blocking. Unless someone else wants to write an ALSA driver. I have no intentions of programming for yet another single-platform API, myself. --- With all of that said, I have a new WIP up. I'll send the link to any Linux users who want to test it, as well. Feel free to ask. This WIP is source code _only_ (nothing changed on Windows), and has both the new OpenAL and OSS drivers. Testing would be greatly appreciated. [No archive available]
This commit is contained in:
parent
161366df9b
commit
c32195cbd6