openal-soft icon indicating copy to clipboard operation
openal-soft copied to clipboard

Add reference to Binaural Audio database

Open ThreeDeeJay opened this issue 1 year ago • 18 comments

There's an ongoing effort to document the best known configurations to get 3D/spatial audio and virtual surround in games/apps so I figured it'd be helpful to have the filtered view that only shows relevant (OpenAL Soft) configurations in the ReadMe so people can find it more easily.

ThreeDeeJay avatar Mar 12 '23 08:03 ThreeDeeJay

Maybe this would be better suited for the wiki pages?

mirh avatar May 19 '23 13:05 mirh

Ohh that's right. Though I'm not quite sure how Wiki suggestions/PRs work, or if people actually read it cuz hell, even I had never clicked/read it and just found out there's an official user guide 🤯 But anyhow, as long as some people can find the information, I'm cool with posting it wherever so I guess it's up to @kcat 👀

ThreeDeeJay avatar May 20 '23 03:05 ThreeDeeJay

To be honest, that page looks a little dense with information, and it's hard to read. A number of columns seem unnecessary, and I'd prefer to keep it to games/apps that use OpenAL natively (without a third-party wrapper like DSOAL). The instructions for setting HRTF should largely be the same regardless of the app; if the app has an HRTF option, use it, otherwise, set a config entry either with the app (an alsoft.ini/conf next to the executable), or with a user config file.

kcat avatar May 20 '23 15:05 kcat

Agreed; the spreadsheet view really is a bit overwhelming 😅 though it's fully customizable and I can create new individual views with their own removed/added/reordered columns as well as filters, so for example in this new one, DSOAL configurations are hidden: https://airtable.com/shrFuXB7rQYET9H1J image

And yeah, to us, setting up OpenAL Soft in OpenAL games is a piece of cake, though the goal of the database is to be thorough yet easy enough that someone not familiar with it can do it, especially for specific cases where there are extra steps required like editing a game config, installing a fix/mod, changing some setting in Windows, etc., and also to have a complete-ish list of games that are at least potentially compatible, especially if they've been tested.

I'm open to suggestions to improve database viewing/navigation. That's why I've been playing with a few alternatives:

  • Airtable interface: my personal favorite since it's the most intuitive, though it requires a (free) account to view, but I think they're gonna remove that requirement. firefox_NbxIg5cH8G

  • Airtable web designer app: similar to interface and doesn't require a login but it downloads the whole database before showing anything, which can take really long. firefox_UBw22CqXqk

  • Airtable search app: same as above, except it searches for the base game and then it shows the available configurations for each. firefox_NKxQXKutob

They all have pros and cons, so I'm hoping to find a better all-around, no-compromise method soon. 🤞

ThreeDeeJay avatar May 20 '23 17:05 ThreeDeeJay

Actually, couldn't there some sort of actual built-in defaults file? Somewhat like proton, mesa or dxvk have.

I'm not really sure if this could apply to openal-soft (in fact, now that I think to it, I don't even know what the list is useful for if just about every fix is simply "install the dll, and maybe HRIR") but with dsoal you certainly would like to know and handle at least when games have inverted axes.

mirh avatar May 20 '23 21:05 mirh

Actually, the database doubles as a downloadable profile configuration sheet. I was working on a tool that downloads a CSV (or at least attempts, since airscraper breaks every other day so you can download and copy it manually), then matches games/apps' executables to the best profile in the database and attempt to install all the required files. I never had a chance to finish and release it, but it's somewhat functional: it can install stuff like HeSuVi, DSOAL, OpenAL Soft, X3DAudio HRTF, some A3D wrappers, etc. as well as the selected HRTF just by dragging and dropping an executable (or selecting the plugin to install manually) though it might glitch out here and there. cmd_IRaPLn07Ew I've been meaning to finish it, but I'm not sure if I should continue with batch spaghetti or learn a better language to implement a proper, nicer-looking GUI and stuff from the ground up🤔

Also, some native OpenAL games also require some tweaks, including flipping axes which doesn't only happen DSOAL 😅 image

ThreeDeeJay avatar May 21 '23 05:05 ThreeDeeJay

Yeah, I don't use OpenALSoft but even I agree that it's just too much data. It's hard to tell what each column is for or what columns are important, so I'm struggling to figure out what I need to keep and what to get rid of just for HRTF/configurations in general. Of course, it doesn't help that the HRIRs are all in the "guide" column from what I can tell (I created a JSON dump of the CSV via Pandas), which makes doing something like downloading all the projects, or providing a list or something, rather tricky.

ethindp avatar May 21 '23 07:05 ethindp

I find it particularly odd that every openal game with problems, is FOSS or basically a super indie one... Anyway I guess that still does answer my question.

I think only [game_compat] settings (and maybe eax version, slots and sources, if the best general defaults were ever confirmed to be mutually incompatible with a certain game?) should be part of the database though. Everything else is just too subjective and debatable otherwise.

mirh avatar May 22 '23 00:05 mirh

Yeah, I don't use OpenALSoft but even I agree that it's just too much data. It's hard to tell what each column is for or what columns are important, so I'm struggling to figure out what I need to keep and what to get rid of just for HRTF/configurations in general. Of course, it doesn't help that the HRIRs are all in the "guide" column from what I can tell (I created a JSON dump of the CSV via Pandas), which makes doing something like downloading all the projects, or providing a list or something, rather tricky.

@ethindp This is still the tip of the iceberg. The database contains 10 tables, and the table shown above is the Profiles (configuration report instances) table, which has over 200 fields, I kid you not 😅. But links are shared views, which are meant to show only information that's important/relevant for a specific case and in a certain way, as a subset of the table (individual sorts, filters, groups, etc.), so it really depends on what each person wants to get out of the database at a given moment. Like the Settings field above is only intended to be read by my tool to perform file edits so the user doesn't have to, while the Specific steps is stuff for the user to do. However, I don't know if non-contributors can create/save their own views, though the Interface does update the (shareable) link when you use filters like this. And for example, here's a view if just want guides for OpenAL Soft (expand with spacebar or click blue arrows). The reason why I usually add more fields is because they're useful if you wanna sort/filter out unwanted attributes like non-Windows, non-spatial (virtual surround/stereo), broken configurations and so on.

I think only [game_compat] settings (and maybe eax version, slots and sources, if the best general defaults were ever confirmed to be mutually incompatible with a certain game?) should be part of the database though. Everything else is just too subjective and debatable otherwise.

There's a database entry submission form that's been generalized enough to encompass other HRTF software/platforms, so anyone can add settings into the Manual Steps or just pick a Manual fix (stuff like run as admin/XP, flip axes, adjust reverb, etc. that many games use). My tool pre-fills a link to submit configurations easily so the user just has to specify whether it works and add any more relevant details like this.

And to answer to some questions, the fields are usually self-explanatory, otherwise you can hover the cursor over the little ℹ️ next to them for a description. also I prefer to record as many technical details as we reasonably/conveniently can now so that we can use/hide certain info down the road.

So @kcat let me know how (or if) you'd like the database information shown. Like which fields, sorting, filtering would you recommend? anything other than the profile title and guide fields (which includes extra steps/settings, if any)?

With all that in mind, I should point out that the database is still a work in progress so there's some stuff that needs updating. So any feedback/help is always appreciated. 👍

ThreeDeeJay avatar May 22 '23 06:05 ThreeDeeJay

I meant, database to ship within the dll. That table you have there should be just a link somewhere instead.

mirh avatar May 22 '23 13:05 mirh

Ah, I see now. If kcat's or any other devs are interested, I'd be willing to accommodate a view with relevant/important database attributes to facilitate an implementation into the DLL itself, since OpenAL Soft knows the executable's filename and path which could be used to link them to a profile, kinda like how SuperDepth3D (a ReShade addon) does. image

ThreeDeeJay avatar May 24 '23 01:05 ThreeDeeJay

I don't see much that a database built into the DLL would be useful for. At best I could see some workarounds for various quirks some apps have, or perhaps default NFC or distance scales for apps that don't/can't set them itself, but that would need to be coded in by hand rather than extracting some values from a database (and I'm not sure the executable name is always the best to base detection on, since sometimes quirks or behaviors can be specific to certain app versions, some apps can have multiple executable names (especially crossplatform apps), and some apps may not have their own executable, e.g. Java apps point to the Java executable rather than the .jar file that is the app).

kcat avatar May 24 '23 16:05 kcat

The database view I use for my tool already includes multiple executable filenames as well as other methods to match games/apps to profiles, like parent folders, Steam/Ubisoft/GOG/Epic/etc IDs, versions, launch parameters and I could always add more if needed. But I take it there's not enough interest in using those directly in OpenAL Soft at the moment.

In any case, to go back to the main subject, do we still want a link to a list of games/apps compatible with OpenAL Soft in case the database contains crucial information that's not as obvious as the DLL swap? If so, let me know what type of view you'd want from the options I mentioned in https://github.com/kcat/openal-soft/pull/835#issuecomment-1555957101, what fields/information you'd like to be included (Perhaps something simple à la Dolphin/RPCS3 compatibility list with links to game profile-specific details) and how I should submit the PR (readme edit, wiki section, etc).

ThreeDeeJay avatar May 24 '23 17:05 ThreeDeeJay

In any case, to go back to the main subject, do we still want a link to a list of games/apps compatible with OpenAL Soft in case the database contains crucial information that's not as obvious as the DLL swap?

It could be useful. The columns I'd expect to be desirable would be, obviously the name, platforms the game supports natively, whether it uses EAX/EFX and the version of such, and whatever errata there is if the game or OpenAL Soft needs some tweaks (which should be reflective of the latest OpenAL Soft release). Perhaps also a column indicating if the game was designed to use OpenAL Soft natively or just uses OpenAL generally, though the games may not provide that information for it to be reliable. And also whether it does full 3D audio or virtualized speaker output (though I don't suspect many things do the latter, aside from things like mpv or other media players).

kcat avatar May 24 '23 20:05 kcat

That's simple enough: https://airtable.com/shrFuXB7rQYET9H1J Now this view link only includes the following fields:

Also, added this mostly pre-filled form for people to add new ones easily.

ThreeDeeJay avatar May 24 '23 22:05 ThreeDeeJay

At best I could see some workarounds for various quirks some apps have

What I said/meant. Just game_compat stuff (which I'm skeptical is gonna change between game versions, unless eventually fixed.. but you could use hashes in the worst case scenario)

mirh avatar May 25 '23 00:05 mirh

It would be nice if the page could separate them into separate lists (names starting with 0-9 as one, A as a second, B for a third, etc). Maybe having each list on a separate page, with the main page linking to them, to avoid having ~3000 entries all in one page. And to make the columns more readable; they currently have a fixed size and will cut off whatever's there if it doesn't fit, with no easy way to see it all (you can drag to widen the column, but that then takes away from other columns and still might not have enough room anyway; or you can click it, but then it overlays and obscures the surrounding cells, and still may not show it all).

Some of the notes are also a bit vague and confusing. "OpenAL is DS3D wrapper"? "Citation needed"? "OpenAL maps sound to SDL"? It's also odd to see "❌ Game comes with generic OpenAL, but replacing the DLL with OpenAL Soft's didn't work even tho BattleEye didn't block it" in a list that purports to be games that work with OpenAL Soft.

The Platform column seems to be somewhat weird, as sometimes a game will be listed once, e.g. with Windows+Linux, and other times a game is listed multiple times with Windows on one and Linux on another, with no apparent difference. It also seems to list platforms that an app emulates instead of just what it runs on, e.g. Dolphin lists Nintendo Wii + Nintendo GameCube + Nintendo64 + Windows when it runs on Windows + Linux (+ OSX?) (it also lists Dolby Surround and Dolby Pro Logic II under Features, which don't have anything to do with OpenAL/OpenAL Soft).

A number of games also seem to be listed multiple times, particularly the ones using GZDoom (e.g. there's Doom II Hell on Earth GZDoom and GZDoom Doom II Hell on Earth GZDoom).

kcat avatar May 25 '23 01:05 kcat

It would be nice if the page could separate them into separate lists (names starting with 0-9 as one, A as a second, B for a third, etc).

Done. Now they're grouped by the title's initial character. You can right click > Collapse all to fold all groups if needed.: https://airtable.com/shrFuXB7rQYET9H1J

Maybe having each list on a separate page, with the main page linking to them, to avoid having ~3000 entries all in one page

While it has all entries in 1 page, it only loads as many as it can display at one time, so unlike the apps I mentioned earlier, the spreadsheet views don't load the entire database all at once, so it's fairly efficient.

And to make the columns more readable; they currently have a fixed size and will cut off whatever's there if it doesn't fit, with no easy way to see it all (you can drag to widen the column, but that then takes away from other columns and still might not have enough room anyway; or you can click it, but then it overlays and obscures the surrounding cells, and still may not show it all).

Yeah, the full view is a compromise between data priority/preview and screen space. But I think it's best to just filter by Profile/Title or Ctrl+F to search, then click a row and press Spacebar/blue arrows to expand/see all the details of a specific profile at once, then you can click the up/down arrows at the top to cycle through adjacent profiles.

Some of the notes are also a bit vague and confusing. "OpenAL is DS3D wrapper"? "Citation needed"? "OpenAL maps sound to SDL"? It's also odd to see

Yeah, in those cases, I just copied the notes from the original sources for completeness. In this case, this OpenAL list. "OpenAL is DS3D wrapper" = OpenAL game comes with Creative's OpenAL to DirectSound3D wrapper (wrap_oal), so it can probably be used with DSOAL instead. "Citation needed" = someone reported it without providing evidence "OpenAL maps sound to SDL" = I think these are Linux games using Source/Miles Sound System where SDL is used for mixing, but the stereo/surround mix is sent to OpenAL (/Soft) for playback, so chances are we'd only get virtual surround (if we're lucky). I'm not 100% sure because even on Windows I haven't been able to get Source/MSS games to output anything better than 5.1/6 speaker channels even on Windows XP with an X-Fi.

"❌ Game comes with generic OpenAL, but replacing the DLL with OpenAL Soft's didn't work even tho BattleEye didn't block it" in a list that purports to be games that work with OpenAL Soft.

Ahh, yes. In that case, that profile's status was set to Audio unchanged (not working) so that people know they might not even want to bother replacing the built-in OpenAL library with OpenAL Soft. But if you want, I can also hide the profiles that aren't flagged as Playable.

The Platform column seems to be somewhat weird, as sometimes a game will be listed once, e.g. with Windows+Linux, and other times a game is listed multiple times with Windows on one and Linux on another, with no apparent difference

Yeah, I dumped sources like PCGamingWiki, which lists multiple OSs for its entry so it's hard to determine if the HRTF/spatial/surround stuff applies to all or some platforms. That's why those are usually marked as Untested, so that people can review or duplicate the profile and and specify a particular OS. In other cases, only a single platform was specified, which is what I prefer, so I'll probably end up splitting the former by platform eventually.

It also seems to list platforms that an app emulates instead of just what it runs on, e.g. Dolphin lists Nintendo Wii + Nintendo GameCube + Nintendo64 + Windows when it runs on Windows + Linux (+ OSX?)

I think I did it this way to be able to differentiate e.g. native Windows games from say, console games emulated on Windows (since the database also includes console games natively like for PS5 3D audio) and which specific console, but I've been rethinking this since I usually specify the emulator alongside the base game in those profiles.

it also lists Dolby Surround and Dolby Pro Logic II under Features, which don't have anything to do with OpenAL/OpenAL Soft

IIRC Dolphin uses a custom implementation of FreeSurround, which can decode Dolby Surround and Dolby Pro Logic II, but for some reason that's only available for some audio backends like cubeb and OpenAL (/Soft) even though they don't do the surround decoding themselves.

A number of games also seem to be listed multiple times, particularly the ones using GZDoom (e.g. there's Doom II Hell on Earth GZDoom and GZDoom Doom II Hell on Earth GZDoom).

Good catch. there are still some kinks to iron out and the game variations (base, expansion pack, mod, remakes, open source reimplementations) can make things harder to categorize but those are easy to fix once I find them.

Airtable makes it easy to edit even thousands of profiles at once, so my rule of thumb is to keep as much data from the source so I can mass-edit based on a common denominator if needed, and of course only show what's needed for a particular purpose/case👍

ThreeDeeJay avatar May 25 '23 02:05 ThreeDeeJay