kcat / openal-soft

OpenAL Soft is a software implementation of the OpenAL 3D audio API.
Other
2.16k stars 522 forks source link

[Question]Obtaining Ambisonic output in Windows #984

Closed alex-schroedsen closed 4 months ago

alex-schroedsen commented 5 months ago

Channel configuration switching unpredictable.

I first want to thank you: kcat, threedeejay and everyone who has worked on this program for your work on such a revolutionary utility in presenting hundreds of games with massively improved audio functionality/versatility.

System Specs: OS Name Microsoft Windows Embedded 8.1 Industry Pro Version 6.3.9600 Build 9600 OS Manufacturer Microsoft Corporation System Manufacturer Dell Inc. System Model Precision Tower 5810 System Type x64-based PC System SKU 0617 Processor Intel(R) Xeon(R) CPU E5-1630 v4 @ 3.70GHz, 3701 Mhz, 4 Core(s), 8 Logical Processor(s) BIOS Version/Date Dell Inc. A34, 10/19/2020 Windows Directory C:\Windows System Directory C:\Windows\system32 Hardware Abstraction Layer Version = "6.3.9600.17031" Installed Physical Memory (RAM) 32.0 GB Total Physical Memory 31.9 GB Available Physical Memory 27.9 GB Total Virtual Memory 36.7 GB Available Virtual Memory 31.2 GB

I have ensured that OpenAL Soft 1.23.1 is the only version being used by the following method. Testing program is Amnesia The Dark Descent version 1.3.

Creative Labs OpenAL files have been renamed and replaced in the following locations created 1.23.1 32-bit at %WINDOWS%\sysWOW64\OpenAL32.DLL renamed/disabled %WINDOWS%\sysWOW64\wrap_oal.DLL to wrap_oal_disabled.DLL created 1.23.1 32-bit at %WINDOWS%\system32\OpenAL32.DLL renamed/disabled %WINDOWS%\system32\wrap_oal.DLL to wrap_oal_disabled.DLL created 1.23.1 32-bit at %steamapps%\Amnesia The Dark Descent\OpenAL32.DLL renamed/disabled %steamapps%\Amnesia The Dark Descent\wrap_oal.DLL to wrap_oal_disabled.DLL renamed/disabled %steamapps%\Amnesia The Dark Descent\soft_oal.DLL to soft_oal_disabled.DLL

I first disabled all these file locations in order to completely disable OpenAL on the system. Once I received an error on startup of Launcher.exe that OpenAL was not installed, I created a instance of 1.23.1 in three locations. The sysWOW64,system32 and Amnesia directories. Creative Alchemy is also disabled for Amnesia as well, no dsound.dll file is located in the Amnesia directory. I ensured that Amnesia is using the OpenAL Soft sound device on my primary windows output device.

I use the VB-Cable (https://vb-audio.com/Cable/index.htm) driver to loopback my system audio into Blue Cat's Patchwork 2.67 x64 (https://www.bluecataudio.com/Products/Product_PatchWork/). I use the WDM-KS driver to pull 8 channels from the loopback interface, I've been monitoring the output in Blue Cat's Patchwork. I have a 5.1.2 surround system that operates on a 8 channel LPCM stream with 7 and 8 being side height left and right. I have been trying to reproduce reliable switching between Stereo, 7.1 and ambi1 through edits to alsoft.ini in %appdata%. I have also ensured that the only instance of alsoft.ini resides in %appdata%. I have used both alsoft-config and manually editing the verbose file included with the compiled binaries.

The three configurations I've tried switching are:

START CONFIG ONE

[General]\ sample-type=float32\ channels=ambi1\ frequency=48000\ ambi-format=ambix\ stereo-mode=speakers

[decoder]\ hq-mode=true\

END CONFIG ONE

START CONFIG TWO

[General]\ sample-type=float32\ channels=stereo\ frequency=48000\ ambi-format=ambix\ stereo-mode=speakers

[decoder]\ hq-mode=true\

END CONFIG TWO

START CONFIG THREE

[General]\ sample-type=float32\ channels=surround71\ frequency=48000\ ambi-format=ambix\ stereo-mode=speakers

[decoder]\ hq-mode=true\

END CONFIG THREE

I figure that the ambi-format parameter only applies when an ambi* channel format is set. Unfortunately channel formats seem to stick even after editing the alsoft.ini file. Sometimes I'll copy alsoft.ini into the Amnesia folder and that sometimes gets the channel config to switch, but not consistently. I ensure that the Amnesia directory copy of alsoft.ini is deleted every time I change the config. The audio device that OpenAL Soft outputs to is consistently set to 7.1 in the windows manage audio devices control panel.

I'm looking for an answer to couple questions:

  1. Does OpenAL Soft 1.23.1 32-bit always override the settings in %appdata%\alsoft.ini with the alsoft.ini file in the game directory?

  2. Does OpenAL Soft 1.23.1 32-bit ever override the {channels} setting declared in alsoft.ini with a channel configuration that it sees from the Windows audio device?

Before I start troubleshooting how ambisonic content is output, I want to confirm that I can consistently know that the channel config for output is being set for ambi1. That is the purpose of this question/issue.

kcat commented 5 months ago

On Windows, the ambi* channel output modes are unlikely to work. Since the system's audio APIs provide the labels that define what each channel is, OpenAL Soft won't output the ambisonic buffer itself since it won't match what the channels are. It also doesn't make any sense to use if it's not outputting to an ambisonic decoder, the ambisonic channels aren't intended to be played directly on speakers as they don't correlated to physical speaker locations. Instead, OpenAL Soft renders to an ambisonic buffer internally and decodes it to the configured channel output (the ambi* modes essentially just skip the decode step and outputs the internal buffer). You're right that ambi-format doesn't do anything when not outputting one of the ambi* modes.

If the requested output mode can't be used, another one is autoselected instead so the device will still work, which is typically based on what the system reports the device's default format is.

You can set the ALSOFT_LOGLEVEL environment variable to 3 to have OpenAL Soft print a log to stderr, which should provide information about the config settings it sees and what it tries to set and detect from the system. Setting the ALSOFT_LOGFILE environment variable to a path+filename will have it write the log to the named file instead.

alex-schroedsen commented 5 months ago

Thanks for your prompt response and for the explanation of how the format selection works. In the past, I used the "Quadraphonic" configuration for the loopback interface when I was trying to get an ambix configured 4-channel first order B-format signal.

The plugin that has worked for getting positionally accurate audio is Soundfield by RODE (https://rode.com/en-us/apps/soundfield-by-rode) on the NT-SF1 input format. It does not correctly decode the ambix configured first order b-format when set to the FUMA or AMBIX input format settings. I put together a few custom stories in amnesia to test the positional accuracy. While the Soundfield plugin creates a euphonic experience in pretty much all cases, I'm guessing that it is doing UHJ stereo decoding rather than decoding the whole 4-channel B-format.

Other decoders I've tried are

IEM Suite's SimpleDecoder with custom AllRAD profile https://plugins.iem.at/

The ambiX suite https://github.com/kronihias/ambix/releases

ab Decoder Suite by Audio Brewers https://www.audiobrewers.com/plugins/p/ab-dec-suite

HOA Library VST https://github.com/CICM/HoaLibrary/releases/tag/v0.1-beta

These all have the same behavior in audio output. They output audio that is panned to the left. I was able to rotate the output, but the spacial queues were clearly very wrong.

Good to know regarding the system audio APIs labelling the channels and that clashing with OpenAL Soft wanting to output to a certain labelled channel configuration for ambi1. Would it be doable to create a force-channels=true|false entry in alsoft.ini to ignore the system reporting and just output the first 4 channels to the first 4 available channels on the device?

Thank you so much for your time and effort! It is seriously an honor to be able to communicate with you, the creator of this awesome program and learn more about it, make requests.

I may also dig into the logging function to see what is going on, but it seems like it could be futile with the channel labelling you mentioned.

alex-schroedsen commented 5 months ago

I tried the logging that you had talked about and the situation was exactly as you expected. OpenAL Soft tries to open the Windows device as Ambisonic 3D and it fails to open the device with that format, falling back to stereo.

[ALSOFT] (EE) Failed to set Ambisonic 3D, got Stereo instead

I am wondering if you can create a force-channels=true|false function to send the requested channels over the current speaker configuration. I also sent you an email as I am interested in compensating you for adding this function.

In the meantime I have tried using the following windows versions of these audio APIs.

https://jackaudio.org/faq/jack_on_windows.html Including using the JACK_PROMISCUOUS_SERVER environment variable and drivers=jack in alsoft.ini to try to get the jack default device to show. No luck with that so far.

Jack for Windows uses PortAudio to interface with the windows sound system, allowing for DirectSound, WASAPI, ASIO and WDM-KS devices. I noticed that portaudio.dll was the file noted in the source. So I pasted a 32-bit build of portaudio into the system32 and sysWOW64 directories (renamed to portaudio.dll) next to my existing OpenAL Soft installations from here https://github.com/adfernandes/precompiled-portaudio-windows/tree/master. I tried drivers=portaudio in alsoft.ini and no luck with that either.

I know I'm shooting in the dark with these. I just hope that you don't mind helping me out in getting the ambisonic output working with one of these APIs. Portaudio would actually be great. That way I'm guessing I could use 3rd order ambisonics on windows via ASIO into the VST host that I use.

kcat commented 5 months ago

I'd be interested in seeing the alsoft log when trying to use WASAPI with ambisonic output. If you have a virtual audio device that can accept ambisonic audio and decode it to speaker output, it would be useful to see what it reports for its mix format and channel configuration when OpenAL Soft tries to play on it, so I can try to make it work with it.

As for PortAudio, the drivers name for that is port. Although it won't work either with the current release, the PortAudio backend only supports mono and stereo output. But the good news is the latest Git versions should support ambisonic (and other) output channel configurations with PortAudio.

I'm not familiar with using JACK on Windows, so unfortunately I can't help with that. Make sure you have a build of OpenAL Soft with it enabled. The premade binaries don't support JACK (or PortAudio), you'll need to make a build yourself with the appropriate SDKs installed (cmake will say which backends are enabled when configuring).

alex-schroedsen commented 5 months ago

I have a log file of the main windows Build of OpenAL Soft 1.23.1. I used the launcher for Amensia because it tests that the device is working same as the actual game would. Below that I have exciting news! The version I compiled with JACK is functional for sending Ambisonic 3D audio to Windows. I will post the log of the successful version and a link to the files I used.

STEREO FALLBACK LOG START

[ALSOFT] (II) Initializing library v1.23.1-d3875f33 master [ALSOFT] (II) Supported backends: wasapi, dsound, winmm, null, wave [ALSOFT] (II) Loading config C:\Users\Alex\AppData\Roaming\alsoft.ini... [ALSOFT] (II) Got binary: G:\SteamLibrary\steamapps\common\Amnesia The Dark Descent, Launcher.exe [ALSOFT] (II) Loading config G:\SteamLibrary\steamapps\common\Amnesia The Dark Descent\alsoft.ini... [ALSOFT] (II) found 'sample-type' = 'float32' [ALSOFT] (II) found 'channels' = 'ambi1' [ALSOFT] (II) found 'frequency' = '48000' [ALSOFT] (II) Key disable-cpu-exts not found [ALSOFT] (II) Vendor ID: "" [ALSOFT] (II) Name: "Intel(R) Xeon(R) CPU E5-1630 v4 @ 3.70GHz" [ALSOFT] (II) Extensions: +SSE +SSE2 +SSE3 +SSE4.1 [ALSOFT] (II) Key rt-prio not found [ALSOFT] (II) Key rt-time-limit not found [ALSOFT] (II) Key game_compat/enable-sub-data-ext not found [ALSOFT] (II) Key game_compat/reverse-x not found [ALSOFT] (II) Key game_compat/reverse-y not found [ALSOFT] (II) Key game_compat/reverse-z not found [ALSOFT] (II) Key game_compat/nfc-scale not found [ALSOFT] (II) Key resampler not found [ALSOFT] (II) Key uhj/decode-filter not found [ALSOFT] (II) Key uhj/filter not found [ALSOFT] (II) Key uhj/encode-filter not found [ALSOFT] (II) Key trap-al-error not found [ALSOFT] (II) Key trap-alc-error not found [ALSOFT] (II) Key reverb/boost not found [ALSOFT] (II) Key drivers not found [ALSOFT] (II) Initialized backend "wasapi" [ALSOFT] (II) Added "wasapi" for playback [ALSOFT] (II) Added "wasapi" for capture [ALSOFT] (II) Key excludefx not found [ALSOFT] (II) Key default-reverb not found [ALSOFT] (II) Key eax/enable not found [ALSOFT] (II) Starting message thread [ALSOFT] (II) Starting message loop [ALSOFT] (II) Got message "Enumerate Playback" (0x0005, this=00000000, param=00000000) [ALSOFT] (II) Got device "CABLE Input (VB-Audio Virtual Cable)", "{37725D8B-CAB5-47DA-BBC3-6784C92B84FA}", "{0.0.0.00000000}.{37725d8b-cab5-47da-bbc3-6784c92b84fa}" [ALSOFT] (II) Got device "Speakers (USBStreamer Multi-channels)", "{58E5908F-D867-4D75-BED8-24C1EBB23324}", "{0.0.0.00000000}.{58e5908f-d867-4d75-bed8-24c1ebb23324}" [ALSOFT] (II) Message loop finished [ALSOFT] (WW) Querying error state on null context (implicitly 0xa004) [ALSOFT] (II) Opening playback device "OpenAL Soft on CABLE Input (VB-Audio Virtual Cable)" [ALSOFT] (II) Starting message thread [ALSOFT] (II) Starting message loop [ALSOFT] (II) Got message "Open Device" (0x0000, this=00f7ed38, param=06389747) [ALSOFT] (II) Created device 02f45240, "OpenAL Soft on CABLE Input (VB-Audio Virtual Cable)" [ALSOFT] (II) Found frequency = "48000" [ALSOFT] (II) Key period_size not found [ALSOFT] (II) Key periods not found [ALSOFT] (II) Found sample-type = "float32" [ALSOFT] (II) Found channels = "ambi1" [ALSOFT] (II) Key ambi-format not found [ALSOFT] (II) Key hrtf not found [ALSOFT] (II) Key stereo-encoding not found [ALSOFT] (II) ALC_FREQUENCY = 44100 [ALSOFT] (II) ALC_MONO_SOURCES = 256 [ALSOFT] (II) ALC_STEREO_SOURCES = 0 [ALSOFT] (II) ALC_MAX_AUXILIARY_SENDS = 4 [ALSOFT] (II) Pre-reset: Ambisonic 3D, Float32, *44100hz, 882 / 2646 buffer [ALSOFT] (II) Got message "Reset Device" (0x0001, this=00f7ed38, param=00000000) [ALSOFT] (II) Device mix format: FormatTag = 0xfffe Channels = 4 SamplesPerSec = 48000 AvgBytesPerSec = 768000 BlockAlign = 16 BitsPerSample = 32 Size = 22 Samples = 32 ChannelMask = 0x33 SubFormat = {00000003-0000-0010-8000-00aa00389b71} [ALSOFT] (II) Requesting playback format: FormatTag = 0xfffe Channels = 2 SamplesPerSec = 44100 AvgBytesPerSec = 352800 BlockAlign = 8 BitsPerSample = 32 Size = 22 Samples = 32 ChannelMask = 0x3 SubFormat = {00000003-0000-0010-8000-00aa00389b71} [ALSOFT] (II) Got playback format: FormatTag = 0xfffe Channels = 4 SamplesPerSec = 48000 AvgBytesPerSec = 768000 BlockAlign = 16 BitsPerSample = 32 Size = 22 Samples = 32 ChannelMask = 0x33 SubFormat = {00000003-0000-0010-8000-00aa00389b71} [ALSOFT] (II) Key wasapi/allow-resampler not found [ALSOFT] (II) Created converter for Stereo/Float32 format, dst: 48000hz (960), src: 44100hz (882) [ALSOFT] (EE) Failed to set Ambisonic 3D, got Stereo instead [ALSOFT] (II) Post-reset: Stereo, Float32, 44100hz, 882 / 2646 buffer [ALSOFT] (II) Key stereo-mode not found [ALSOFT] (II) Key cf_level not found [ALSOFT] (II) Stereo rendering [ALSOFT] (II) Channel config, Main: 3, Real: 2 [ALSOFT] (II) Allocating 5 channels, 20480 bytes [ALSOFT] (II) Enabling single-band first-order ambisonic decoder [ALSOFT] (II) Key sources not found [ALSOFT] (II) Key sends not found [ALSOFT] (II) Max sources: 256 (256 + 0), effect slots: 64, sends: 4 [ALSOFT] (II) Key dither not found [ALSOFT] (II) Key dither-depth not found [ALSOFT] (II) Dithering disabled [ALSOFT] (II) Key output-limiter not found [ALSOFT] (II) Output limiter disabled [ALSOFT] (II) Fixed device latency: 0ns [ALSOFT] (II) Got message "Start Device" (0x0002, this=00f7ed38, param=00000000) [ALSOFT] (II) Post-start: Stereo, Float32, 44100hz, 882 / 2646 buffer [ALSOFT] (II) Increasing allocated voices to 256 [ALSOFT] (II) Key volume-adjust not found [ALSOFT] (II) Created context 02f6ca30 [ALSOFT] (II) Got message "Enumerate Playback" (0x0005, this=00000000, param=00000000) [ALSOFT] (II) Got device "CABLE Input (VB-Audio Virtual Cable)", "{37725D8B-CAB5-47DA-BBC3-6784C92B84FA}", "{0.0.0.00000000}.{37725d8b-cab5-47da-bbc3-6784c92b84fa}" [ALSOFT] (II) Got device "Speakers (USBStreamer Multi-channels)", "{58E5908F-D867-4D75-BED8-24C1EBB23324}", "{0.0.0.00000000}.{58e5908f-d867-4d75-bed8-24c1ebb23324}" [ALSOFT] (II) Got message "Stop Device" (0x0003, this=00f7ed38, param=00000000) [ALSOFT] (II) Freeing context 02f6ca30 [ALSOFT] (II) Freed 2 context property objects [ALSOFT] (II) Freed 0 AuxiliaryEffectSlot property objects [ALSOFT] (II) Freeing device 02f45240 [ALSOFT] (II) Got message "Close Device" (0x0004, this=00f7ed38, param=00000000) [ALSOFT] (II) Message loop finished

STEREO FALLBACK LOG END

Next is the log for the version that is currently working for passing first order ambisonics to Windows.

AMBISONIC LOG START

[ALSOFT] (II) Initializing library v1.23.1-unknown UNKNOWN [ALSOFT] (II) Supported backends: jack, null [ALSOFT] (II) Loading config C:\Users\Alex\AppData\Roaming\alsoft.ini... [ALSOFT] (II) Got binary: H:\SteamLibrary\steamapps\common\Doom 3, Doom3.exe [ALSOFT] (II) Loading config H:\SteamLibrary\steamapps\common\Doom 3\alsoft.ini... [ALSOFT] (II) setting 'sample-type' = 'float32' [ALSOFT] (II) setting 'channels' = 'ambi1' [ALSOFT] (II) setting 'frequency' = '48000' [ALSOFT] (II) setting 'drivers' = 'jack' [ALSOFT] (II) Vendor ID: "" [ALSOFT] (II) Name: "Intel(R) Xeon(R) CPU E5-1630 v4 @ 3.70GHz" [ALSOFT] (II) Extensions: +SSE +SSE2 +SSE3 +SSE4.1 [ALSOFT] (II) Found option drivers = "jack" [ALSOFT] (II) Initialized backend "jack" [ALSOFT] (II) Added "jack" for playback [ALSOFT] (WW) No capture backend available! [ALSOFT] (II) Opening default playback device [ALSOFT] (II) Got device: system = system: [ALSOFT] (II) Created device 080A0070, "system" [ALSOFT] (II) Found option frequency = "48000" [ALSOFT] (II) Found option sample-type = "float32" [ALSOFT] (II) Found option channels = "ambi1" [ALSOFT] (II) Pre-reset: Ambisonic 3D, Float32, *48000hz, 960 / 2880 buffer [ALSOFT] (II) Post-reset: Ambisonic 3D, Float32, 48000hz, 128 / 256 buffer [ALSOFT] (II) Channel config, Main: 4, Real: 0 [ALSOFT] (II) Allocating 4 channels, 16384 bytes [ALSOFT] (II) Max sources: 256 (255 + 1), effect slots: 64, sends: 4 [ALSOFT] (II) Dithering disabled [ALSOFT] (II) Output limiter disabled [ALSOFT] (II) Fixed device latency: 0ns [ALSOFT] (II) Post-start: Ambisonic 3D, Float32, 48000hz, 128 / 256 buffer [ALSOFT] (II) Increasing allocated voices to 256 [ALSOFT] (II) Created context 04CB0750 [ALSOFT] (II) Increasing allocated context properties to 2 [ALSOFT] (II) Increasing allocated effect slots to 4 [ALSOFT] (II) Increasing allocated voice properties to 32 [ALSOFT] (II) Increasing allocated effect slot properties to 4 [ALSOFT] (II) Increasing allocated effect slot properties to 8 [ALSOFT] (II) Increasing allocated voice properties to 64 [ALSOFT] (II) Freeing context 04CB0750 [ALSOFT] (II) Freeing device 080A0070

AMBISONIC LOG END

The files I used are here, including source codes and links to the repositories in the Readme OpenAL Soft 1.23.1 5b6e0df JACK-release-lib+bin+src.zip

This works reasonably well at low latencies (128 sample buffer in jack) though there is occasional crackling that can be eliminated by giving the jackd.exe process affinity on a different processor thread (I used 7) and setting a higher latency.

The only stopping issue I’ve had is that the DirectSound3D apps I've tried with DSOAL have reported that there is no available sound device or just crashed as soon as they try to play a sound. The games I've tried are Portal 2 with the “snd_legacy_surround 1” command line option and Silent Hill 2, 3, 4 on PC. Anything native OpenAL has worked swimmingly. I can later get the log for the crashing games so we can see when they crashed.

I'm curious to know if OpenAL Soft supports 16 channel output for 3rd order Ambisonics.

kcat commented 5 months ago

So it seems the device is reported as a standard quad speaker setup, and expects the app to provide a B-Format signal regardless of the specified speaker layout.

What ChannelMask is listed for the device mix format in the log when the virtual device set to accept second-order (9 channels) and third-order (16 channels) ambisonics?

The only stopping issue I’ve had is that the DirectSound3D apps I've tried with DSOAL have reported that there is no available sound device or just crashed as soon as they try to play a sound.

Unfortunately DSOAL relies on being able to specify stingified GUIDs when opening devices, since DSOAL ultimately uses WASAPI to enumerate devices for the app to select from, and passes that to OpenAL to tell it which device to open. That's something the WASAPI backend supports since it needs to know the GUIDs of devices anyway, but other backends like JACK and PortAudio don't recognize GUIDs since they're abstracted away, so will fail to open audio devices.

I'm curious to know if OpenAL Soft supports 16 channel output for 3rd order Ambisonics.

It should yes, by specifying channels=ambi3 (3rd order is currently the highest supported).

alex-schroedsen commented 5 months ago

Unfortunately once we pass first order Ambisonics, WASAPI seems to become useless as it has only revealed 8 channel endpoints even on a 16-channel interface such as the LYNX AES16.

I experimented with the JACK-router ASIO driver and was able to get 3rd order Ambisonics working in DOOM 3 (and Amnesia) no-problem. I think JACK will be my go-to solution on this, ASIO end-to-end outside of the JACK driver connections and a user-definable number of channels available in JACK-router.

OpenAL Soft 1.23.1 5b6e0df JACK-release-lib+bin+src.zip

3rd-order-ambisonics-jack-doom3

Thank you again for teaching me/guiding me to learn so much about audio APIs and for your engagement on this issue. The logs you requested are below. The last thing I'm wondering is if spoofing a generic WASAPI GUID would make the old DirectSound 3D games happy when they access OpenAL Soft through DSOAL. Is there some other solution you can think of for allowing DirectSound 3D applications to work when using DSOAL with OpenAL Soft using the JACK driver?

START oalsoft_log_wasapi_ambi2.log

[ALSOFT] (II) Initializing library v1.23.1-d3875f33 master [ALSOFT] (II) Supported backends: wasapi, dsound, winmm, null, wave [ALSOFT] (II) Loading config C:\Users\Alex\AppData\Roaming\alsoft.ini... [ALSOFT] (II) Got binary: G:\SteamLibrary\steamapps\common\Amnesia The Dark Descent, Launcher.exe [ALSOFT] (II) Loading config G:\SteamLibrary\steamapps\common\Amnesia The Dark Descent\alsoft.ini... [ALSOFT] (II) found 'sample-type' = 'float32' [ALSOFT] (II) found 'channels' = 'ambi2' [ALSOFT] (II) found 'frequency' = '48000' [ALSOFT] (II) Key disable-cpu-exts not found [ALSOFT] (II) Vendor ID: "" [ALSOFT] (II) Name: "Intel(R) Xeon(R) CPU E5-1630 v4 @ 3.70GHz" [ALSOFT] (II) Extensions: +SSE +SSE2 +SSE3 +SSE4.1 [ALSOFT] (II) Key rt-prio not found [ALSOFT] (II) Key rt-time-limit not found [ALSOFT] (II) Key game_compat/enable-sub-data-ext not found [ALSOFT] (II) Key game_compat/reverse-x not found [ALSOFT] (II) Key game_compat/reverse-y not found [ALSOFT] (II) Key game_compat/reverse-z not found [ALSOFT] (II) Key game_compat/nfc-scale not found [ALSOFT] (II) Key resampler not found [ALSOFT] (II) Key uhj/decode-filter not found [ALSOFT] (II) Key uhj/filter not found [ALSOFT] (II) Key uhj/encode-filter not found [ALSOFT] (II) Key trap-al-error not found [ALSOFT] (II) Key trap-alc-error not found [ALSOFT] (II) Key reverb/boost not found [ALSOFT] (II) Key drivers not found [ALSOFT] (II) Initialized backend "wasapi" [ALSOFT] (II) Added "wasapi" for playback [ALSOFT] (II) Added "wasapi" for capture [ALSOFT] (II) Key excludefx not found [ALSOFT] (II) Key default-reverb not found [ALSOFT] (II) Key eax/enable not found [ALSOFT] (II) Starting message thread [ALSOFT] (II) Starting message loop [ALSOFT] (II) Got message "Enumerate Playback" (0x0005, this=00000000, param=00000000) [ALSOFT] (II) Got device "Speakers (Lynx AES16)", "{9D52251C-1B3D-4B2B-B53D-58B824C8B6D0}", "{0.0.0.00000000}.{9d52251c-1b3d-4b2b-b53d-58b824c8b6d0}" [ALSOFT] (II) Message loop finished [ALSOFT] (WW) Querying error state on null context (implicitly 0xa004) [ALSOFT] (II) Opening playback device "OpenAL Soft on Speakers (Lynx AES16)" [ALSOFT] (II) Starting message thread [ALSOFT] (II) Starting message loop [ALSOFT] (II) Got message "Open Device" (0x0000, this=00caec08, param=083dd42f) [ALSOFT] (II) Created device 03453f30, "OpenAL Soft on Speakers (Lynx AES16)" [ALSOFT] (II) Found frequency = "48000" [ALSOFT] (II) Key period_size not found [ALSOFT] (II) Key periods not found [ALSOFT] (II) Found sample-type = "float32" [ALSOFT] (II) Found channels = "ambi2" [ALSOFT] (II) Key ambi-format not found [ALSOFT] (II) Key hrtf not found [ALSOFT] (II) Key stereo-encoding not found [ALSOFT] (II) ALC_FREQUENCY = 44100 [ALSOFT] (II) ALC_MONO_SOURCES = 256 [ALSOFT] (II) ALC_STEREO_SOURCES = 0 [ALSOFT] (II) ALC_MAX_AUXILIARY_SENDS = 4 [ALSOFT] (II) Pre-reset: Ambisonic 3D, Float32, *44100hz, 882 / 2646 buffer [ALSOFT] (II) Got message "Reset Device" (0x0001, this=00caec08, param=00000000) [ALSOFT] (II) Device mix format: FormatTag = 0xfffe Channels = 8 SamplesPerSec = 44100 AvgBytesPerSec = 1411200 BlockAlign = 32 BitsPerSample = 32 Size = 22 Samples = 32 ChannelMask = 0x63f SubFormat = {00000003-0000-0010-8000-00aa00389b71} [ALSOFT] (II) Requesting playback format: FormatTag = 0xfffe Channels = 2 SamplesPerSec = 44100 AvgBytesPerSec = 352800 BlockAlign = 8 BitsPerSample = 32 Size = 22 Samples = 32 ChannelMask = 0x3 SubFormat = {00000003-0000-0010-8000-00aa00389b71} [ALSOFT] (II) Got playback format: FormatTag = 0xfffe Channels = 8 SamplesPerSec = 44100 AvgBytesPerSec = 1411200 BlockAlign = 32 BitsPerSample = 32 Size = 22 Samples = 32 ChannelMask = 0x63f SubFormat = {00000003-0000-0010-8000-00aa00389b71} [ALSOFT] (II) Key wasapi/allow-resampler not found [ALSOFT] (EE) Failed to set Ambisonic 3D, got Stereo instead [ALSOFT] (II) Post-reset: Stereo, Float32, 44100hz, 1024 / 2646 buffer [ALSOFT] (II) Key stereo-mode not found [ALSOFT] (II) Key cf_level not found [ALSOFT] (II) Stereo rendering [ALSOFT] (II) Channel config, Main: 3, Real: 2 [ALSOFT] (II) Allocating 5 channels, 20480 bytes [ALSOFT] (II) Enabling single-band first-order ambisonic decoder [ALSOFT] (II) Key sources not found [ALSOFT] (II) Key sends not found [ALSOFT] (II) Max sources: 256 (256 + 0), effect slots: 64, sends: 4 [ALSOFT] (II) Key dither not found [ALSOFT] (II) Key dither-depth not found [ALSOFT] (II) Dithering disabled [ALSOFT] (II) Key output-limiter not found [ALSOFT] (II) Output limiter disabled [ALSOFT] (II) Fixed device latency: 0ns [ALSOFT] (II) Got message "Start Device" (0x0002, this=00caec08, param=00000000) [ALSOFT] (II) Post-start: Stereo, Float32, 44100hz, 1024 / 2646 buffer [ALSOFT] (II) Increasing allocated voices to 256 [ALSOFT] (II) Key volume-adjust not found [ALSOFT] (II) Created context 03475a70 [ALSOFT] (II) Got message "Enumerate Playback" (0x0005, this=00000000, param=00000000) [ALSOFT] (II) Got device "Speakers (Lynx AES16)", "{9D52251C-1B3D-4B2B-B53D-58B824C8B6D0}", "{0.0.0.00000000}.{9d52251c-1b3d-4b2b-b53d-58b824c8b6d0}" [ALSOFT] (II) Got message "Stop Device" (0x0003, this=00caec08, param=00000000) [ALSOFT] (II) Freeing context 03475a70 [ALSOFT] (II) Freed 2 context property objects [ALSOFT] (II) Freed 0 AuxiliaryEffectSlot property objects [ALSOFT] (II) Freeing device 03453f30 [ALSOFT] (II) Got message "Close Device" (0x0004, this=00caec08, param=00000000) [ALSOFT] (II) Message loop finished

END oalsoft_log_wasapi_ambi2.log

START oalsoft_log_wasapi_ambi3.log

[ALSOFT] (II) Initializing library v1.23.1-d3875f33 master [ALSOFT] (II) Supported backends: wasapi, dsound, winmm, null, wave [ALSOFT] (II) Loading config C:\Users\Alex\AppData\Roaming\alsoft.ini... [ALSOFT] (II) Got binary: G:\SteamLibrary\steamapps\common\Amnesia The Dark Descent, Launcher.exe [ALSOFT] (II) Loading config G:\SteamLibrary\steamapps\common\Amnesia The Dark Descent\alsoft.ini... [ALSOFT] (II) found 'sample-type' = 'float32' [ALSOFT] (II) found 'channels' = 'ambi3' [ALSOFT] (II) found 'frequency' = '48000' [ALSOFT] (II) Key disable-cpu-exts not found [ALSOFT] (II) Vendor ID: "" [ALSOFT] (II) Name: "Intel(R) Xeon(R) CPU E5-1630 v4 @ 3.70GHz" [ALSOFT] (II) Extensions: +SSE +SSE2 +SSE3 +SSE4.1 [ALSOFT] (II) Key rt-prio not found [ALSOFT] (II) Key rt-time-limit not found [ALSOFT] (II) Key game_compat/enable-sub-data-ext not found [ALSOFT] (II) Key game_compat/reverse-x not found [ALSOFT] (II) Key game_compat/reverse-y not found [ALSOFT] (II) Key game_compat/reverse-z not found [ALSOFT] (II) Key game_compat/nfc-scale not found [ALSOFT] (II) Key resampler not found [ALSOFT] (II) Key uhj/decode-filter not found [ALSOFT] (II) Key uhj/filter not found [ALSOFT] (II) Key uhj/encode-filter not found [ALSOFT] (II) Key trap-al-error not found [ALSOFT] (II) Key trap-alc-error not found [ALSOFT] (II) Key reverb/boost not found [ALSOFT] (II) Key drivers not found [ALSOFT] (II) Initialized backend "wasapi" [ALSOFT] (II) Added "wasapi" for playback [ALSOFT] (II) Added "wasapi" for capture [ALSOFT] (II) Key excludefx not found [ALSOFT] (II) Key default-reverb not found [ALSOFT] (II) Key eax/enable not found [ALSOFT] (II) Starting message thread [ALSOFT] (II) Starting message loop [ALSOFT] (II) Got message "Enumerate Playback" (0x0005, this=00000000, param=00000000) [ALSOFT] (II) Got device "Speakers (Lynx AES16)", "{9D52251C-1B3D-4B2B-B53D-58B824C8B6D0}", "{0.0.0.00000000}.{9d52251c-1b3d-4b2b-b53d-58b824c8b6d0}" [ALSOFT] (II) Message loop finished [ALSOFT] (WW) Querying error state on null context (implicitly 0xa004) [ALSOFT] (II) Opening playback device "OpenAL Soft on Speakers (Lynx AES16)" [ALSOFT] (II) Starting message thread [ALSOFT] (II) Starting message loop [ALSOFT] (II) Got message "Open Device" (0x0000, this=01afec08, param=08a2d34f) [ALSOFT] (II) Created device 03903f30, "OpenAL Soft on Speakers (Lynx AES16)" [ALSOFT] (II) Found frequency = "48000" [ALSOFT] (II) Key period_size not found [ALSOFT] (II) Key periods not found [ALSOFT] (II) Found sample-type = "float32" [ALSOFT] (II) Found channels = "ambi3" [ALSOFT] (II) Key ambi-format not found [ALSOFT] (II) Key hrtf not found [ALSOFT] (II) Key stereo-encoding not found [ALSOFT] (II) ALC_FREQUENCY = 44100 [ALSOFT] (II) ALC_MONO_SOURCES = 256 [ALSOFT] (II) ALC_STEREO_SOURCES = 0 [ALSOFT] (II) ALC_MAX_AUXILIARY_SENDS = 4 [ALSOFT] (II) Pre-reset: Ambisonic 3D, Float32, *44100hz, 882 / 2646 buffer [ALSOFT] (II) Got message "Reset Device" (0x0001, this=01afec08, param=00000000) [ALSOFT] (II) Device mix format: FormatTag = 0xfffe Channels = 8 SamplesPerSec = 44100 AvgBytesPerSec = 1411200 BlockAlign = 32 BitsPerSample = 32 Size = 22 Samples = 32 ChannelMask = 0x63f SubFormat = {00000003-0000-0010-8000-00aa00389b71} [ALSOFT] (II) Requesting playback format: FormatTag = 0xfffe Channels = 2 SamplesPerSec = 44100 AvgBytesPerSec = 352800 BlockAlign = 8 BitsPerSample = 32 Size = 22 Samples = 32 ChannelMask = 0x3 SubFormat = {00000003-0000-0010-8000-00aa00389b71} [ALSOFT] (II) Got playback format: FormatTag = 0xfffe Channels = 8 SamplesPerSec = 44100 AvgBytesPerSec = 1411200 BlockAlign = 32 BitsPerSample = 32 Size = 22 Samples = 32 ChannelMask = 0x63f SubFormat = {00000003-0000-0010-8000-00aa00389b71} [ALSOFT] (II) Key wasapi/allow-resampler not found [ALSOFT] (EE) Failed to set Ambisonic 3D, got Stereo instead [ALSOFT] (II) Post-reset: Stereo, Float32, 44100hz, 1024 / 2646 buffer [ALSOFT] (II) Key stereo-mode not found [ALSOFT] (II) Key cf_level not found [ALSOFT] (II) Stereo rendering [ALSOFT] (II) Channel config, Main: 3, Real: 2 [ALSOFT] (II) Allocating 5 channels, 20480 bytes [ALSOFT] (II) Enabling single-band first-order ambisonic decoder [ALSOFT] (II) Key sources not found [ALSOFT] (II) Key sends not found [ALSOFT] (II) Max sources: 256 (256 + 0), effect slots: 64, sends: 4 [ALSOFT] (II) Key dither not found [ALSOFT] (II) Key dither-depth not found [ALSOFT] (II) Dithering disabled [ALSOFT] (II) Key output-limiter not found [ALSOFT] (II) Output limiter disabled [ALSOFT] (II) Fixed device latency: 0ns [ALSOFT] (II) Got message "Start Device" (0x0002, this=01afec08, param=00000000) [ALSOFT] (II) Post-start: Stereo, Float32, 44100hz, 1024 / 2646 buffer [ALSOFT] (II) Increasing allocated voices to 256 [ALSOFT] (II) Key volume-adjust not found [ALSOFT] (II) Created context 03925c90 [ALSOFT] (II) Got message "Enumerate Playback" (0x0005, this=00000000, param=00000000) [ALSOFT] (II) Got device "Speakers (Lynx AES16)", "{9D52251C-1B3D-4B2B-B53D-58B824C8B6D0}", "{0.0.0.00000000}.{9d52251c-1b3d-4b2b-b53d-58b824c8b6d0}" [ALSOFT] (II) Got message "Stop Device" (0x0003, this=01afec08, param=00000000) [ALSOFT] (II) Freeing context 03925c90 [ALSOFT] (II) Freed 2 context property objects [ALSOFT] (II) Freed 0 AuxiliaryEffectSlot property objects [ALSOFT] (II) Freeing device 03903f30 [ALSOFT] (II) Got message "Close Device" (0x0004, this=01afec08, param=00000000) [ALSOFT] (II) Message loop finished

END oalsoft_log_wasapi_ambi3.log

kcat commented 5 months ago

The last thing I'm wondering is if spoofing a generic WASAPI GUID would make the old DirectSound 3D games happy when they access OpenAL Soft through DSOAL. Is there some other solution you can think of for allowing DirectSound 3D applications to work when using DSOAL with OpenAL Soft using the JACK driver?

DSOAL gets the GUIDs directly from WASAPI, which the JACK backend can't influence. The best I can think to do would be to have either the JACK backend or DSOAL itself ignore GUIDs it can't recognize or open, and open a default instead. Both options are rather hacky.

Though with the JACK backend, you have the option of making a custom device with a name that matches a GUID. If you make an alsoft.ini and add in something like:

[jack]
custom-devices = {9D52251C-1B3D-4B2B-B53D-58B824C8B6D0}=system:

And place the ini either next to the executable, or in %AppData%. That would add a device named {9D52251C-1B3D-4B2B-B53D-58B824C8B6D0} to JACK's enumerated device list, which connects to port names that start with system:. That should make the stringified GUID be recognized by JACK (the GUID may need to be lower-cased, I'm not sure if the stringified GUID is upper or lower case; and obviously it will need to be changed if the GUID DSOAL tries to use changes).

alex-schroedsen commented 4 months ago

Exciting news! Your suggestion worked and I was able to get Silent Hill 4 working with the setup! I decided to use VB Audio Cable as the decoy sound interface because I’m guessing that its GUID will be replicable on other machines for other users. I have included for curiosity and anyone following this path, the log used for grabbing VB Cable’s GUID and the log of Silent Hill 4 successfully working with OpenAL Soft and DSOAL to output a 3rd order ambisonic signal.

I also want to note that for anyone following this path and wanting a free alternative to Blue Cat's Patchwork, vsthost is available here https://www.hermannseib.com/english/vsthost.htm

ambisonics-directsound3d-working

My next goal is to cross-compile the old XACT libraries (xaudio2_7.dll etc.) from Wine 4.20 using mingw-w64 hopefully allowing OpenAL Soft to mix for compatible XAudio2 games alike how it works with DSOAL. I am also working on researching how/when FMOD and WWISE might fall back to XAudio2 for mixing, further expanding the list of supported games.

Article on cross-compiling WINE binaries to Windows https://wiki.winehq.org/Cygwin_and_More#Cross-compiling_with_mingw-w64

Article announcing XAudio2 implementation via OpenAL Soft https://news.softpedia.com/news/wine-1-7-51-adds-xaudio2-implementation-via-openal-soft-sonic-generations-bugfixes-490932.shtml

START oalsoft_log_DS3D_SH4.log

[ALSOFT] (II) Initializing library v1.23.1-unknown UNKNOWN [ALSOFT] (II) Supported backends: jack, null [ALSOFT] (II) Loading config C:\Users\Alex\AppData\Roaming\alsoft.ini... [ALSOFT] (II) Got binary: H:\GOG Games\Silent Hill 4, SILENT HILL 4.exe [ALSOFT] (II) Loading config H:\GOG Games\Silent Hill 4\alsoft.ini... [ALSOFT] (II) setting 'sample-type' = 'float32' [ALSOFT] (II) setting 'channels' = 'ambi3' [ALSOFT] (II) setting 'frequency' = '48000' [ALSOFT] (II) setting 'drivers' = 'jack' [ALSOFT] (II) setting 'jack/custom-devices' = '{37725D8B-CAB5-47DA-BBC3-6784C92B84FA}=system:' [ALSOFT] (II) Vendor ID: "" [ALSOFT] (II) Name: "Intel(R) Xeon(R) CPU E5-1630 v4 @ 3.70GHz" [ALSOFT] (II) Extensions: +SSE +SSE2 +SSE3 +SSE4.1 [ALSOFT] (II) Found option drivers = "jack" [ALSOFT] (II) Initialized backend "jack" [ALSOFT] (II) Added "jack" for playback [ALSOFT] (WW) No capture backend available! [ALSOFT] (II) Opening playback device "{37725D8B-CAB5-47DA-BBC3-6784C92B84FA}" [ALSOFT] (II) Got device: system = system: [ALSOFT] (II) Got device: Blue Cat's PatchWork = Blue Cat's PatchWork: [ALSOFT] (II) Found option jack/custom-devices = "{37725D8B-CAB5-47DA-BBC3-6784C92B84FA}=system:" [ALSOFT] (II) Customized device name: {37725D8B-CAB5-47DA-BBC3-6784C92B84FA} = system: [ALSOFT] (II) Created device 1122DC40, "{37725D8B-CAB5-47DA-BBC3-6784C92B84FA}" [ALSOFT] (II) Found option frequency = "48000" [ALSOFT] (II) Found option sample-type = "float32" [ALSOFT] (II) Found option channels = "ambi3" [ALSOFT] (II) ALC_MONO_SOURCES = 1024 [ALSOFT] (II) ALC_STEREO_SOURCES = 0 [ALSOFT] (II) Pre-reset: Ambisonic 3D, Float32, *48000hz, 960 / 2880 buffer [ALSOFT] (II) Post-reset: Ambisonic 3D, Float32, 48000hz, 128 / 256 buffer [ALSOFT] (II) Channel config, Main: 16, Real: 0 [ALSOFT] (II) Allocating 16 channels, 65536 bytes [ALSOFT] (II) Max sources: 1024 (1024 + 0), effect slots: 64, sends: 4 [ALSOFT] (II) Dithering disabled [ALSOFT] (II) Output limiter disabled [ALSOFT] (II) Fixed device latency: 0ns [ALSOFT] (EE) No physical playback port for "SILENT HILL 4.exe:channel_9" [ALSOFT] (II) Post-start: Ambisonic 3D, Float32, 48000hz, 128 / 256 buffer [ALSOFT] (II) Increasing allocated voices to 256 [ALSOFT] (II) Created context 04E907B0 [ALSOFT] (II) Increasing allocated context properties to 2 [ALSOFT] (II) Increasing allocated effect slots to 4 [ALSOFT] (II) Increasing allocated effect slot properties to 4 [ALSOFT] (II) Increasing allocated voice properties to 32 [ALSOFT] (II) Freeing context 04E907B0 [ALSOFT] (II) Freeing device 1122DC40

END oalsoft_log_DS3D_SH4.log

START oalsoft_log_VBCABLE_GUID.log

[ALSOFT] (II) Initializing library v1.23.1-d3875f3 HEAD [ALSOFT] (II) Supported backends: wasapi, dsound, winmm, null, wave [ALSOFT] (II) Loading config C:\Users\Alex\AppData\Roaming\alsoft.ini... [ALSOFT] (II) Got binary: H:\GOG Games\Silent Hill 4, SILENT HILL 4.exe [ALSOFT] (II) Loading config H:\GOG Games\Silent Hill 4\alsoft.ini... [ALSOFT] (II) Key disable-cpu-exts not found [ALSOFT] (II) Vendor ID: "" [ALSOFT] (II) Name: "Intel(R) Xeon(R) CPU E5-1630 v4 @ 3.70GHz" [ALSOFT] (II) Extensions: +SSE +SSE2 +SSE3 +SSE4.1 [ALSOFT] (II) Key rt-prio not found [ALSOFT] (II) Key rt-time-limit not found [ALSOFT] (II) Key game_compat/enable-sub-data-ext not found [ALSOFT] (II) Key game_compat/reverse-x not found [ALSOFT] (II) Key game_compat/reverse-y not found [ALSOFT] (II) Key game_compat/reverse-z not found [ALSOFT] (II) Key game_compat/nfc-scale not found [ALSOFT] (II) Key resampler not found [ALSOFT] (II) Key uhj/decode-filter not found [ALSOFT] (II) Key uhj/filter not found [ALSOFT] (II) Key uhj/encode-filter not found [ALSOFT] (II) Key trap-al-error not found [ALSOFT] (II) Key trap-alc-error not found [ALSOFT] (II) Key reverb/boost not found [ALSOFT] (II) Key drivers not found [ALSOFT] (II) Initialized backend "wasapi" [ALSOFT] (II) Added "wasapi" for playback [ALSOFT] (II) Added "wasapi" for capture [ALSOFT] (II) Key excludefx not found [ALSOFT] (II) Key default-reverb not found [ALSOFT] (II) Key eax/enable not found [ALSOFT] (II) Opening playback device "{37725D8B-CAB5-47DA-BBC3-6784C92B84FA}" [ALSOFT] (II) Starting message thread [ALSOFT] (II) Starting message loop [ALSOFT] (II) Got message "Enumerate Playback" (0x0005, this=048A3B78, param=00000000) [ALSOFT] (II) Got device "CABLE Input (VB-Audio Virtual Cable)", "{37725D8B-CAB5-47DA-BBC3-6784C92B84FA}", "{0.0.0.00000000}.{37725d8b-cab5-47da-bbc3-6784c92b84fa}" [ALSOFT] (II) Got message "Open Device" (0x0000, this=048A3B78, param=0018FC90) [ALSOFT] (II) Created device 074C0050, "OpenAL Soft on CABLE Input (VB-Audio Virtual Cable)" [ALSOFT] (II) Key frequency not found [ALSOFT] (II) Key period_size not found [ALSOFT] (II) Key periods not found [ALSOFT] (II) Key sample-type not found [ALSOFT] (II) Key channels not found [ALSOFT] (II) Key ambi-format not found [ALSOFT] (II) Key hrtf not found [ALSOFT] (II) Key stereo-encoding not found [ALSOFT] (II) ALC_MONO_SOURCES = 1024 [ALSOFT] (II) ALC_STEREO_SOURCES = 0 [ALSOFT] (II) Pre-reset: Stereo, Float32, 48000hz, 960 / 2880 buffer [ALSOFT] (II) Got message "Reset Device" (0x0001, this=048A3B78, param=00000000) [ALSOFT] (II) Device mix format: FormatTag = 0xfffe Channels = 8 SamplesPerSec = 48000 AvgBytesPerSec = 1536000 BlockAlign = 32 BitsPerSample = 32 Size = 22 Samples = 32 ChannelMask = 0x63f SubFormat = {00000003-0000-0010-8000-00aa00389b71} [ALSOFT] (II) Requesting playback format: FormatTag = 0xfffe Channels = 8 SamplesPerSec = 48000 AvgBytesPerSec = 1536000 BlockAlign = 32 BitsPerSample = 32 Size = 22 Samples = 32 ChannelMask = 0x63f SubFormat = {00000003-0000-0010-8000-00aa00389b71} [ALSOFT] (II) Post-reset: 7.1 Surround, Float32, 48000hz, 960 / 2880 buffer [ALSOFT] (II) Key stereo-mode not found [ALSOFT] (II) Key decoder/surround71 not found [ALSOFT] (II) Key front-stablizer not found [ALSOFT] (II) Key decoder/hq-mode not found [ALSOFT] (II) Channel config, Main: 5, Real: 8 [ALSOFT] (II) Allocating 13 channels, 53248 bytes [ALSOFT] (II) Enabling dual-band second-order ambisonic decoder [ALSOFT] (II) Key sources not found [ALSOFT] (II) Key sends not found [ALSOFT] (II) Max sources: 1024 (1024 + 0), effect slots: 64, sends: 4 [ALSOFT] (II) Key dither not found [ALSOFT] (II) Key dither-depth not found [ALSOFT] (II) Dithering disabled [ALSOFT] (II) Key output-limiter not found [ALSOFT] (II) Output limiter disabled [ALSOFT] (II) Fixed device latency: 0ns [ALSOFT] (II) Got message "Start Device" (0x0002, this=048A3B78, param=00000000) [ALSOFT] (II) Post-start: 7.1 Surround, Float32, 48000hz, 960 / 2880 buffer [ALSOFT] (II) Increasing allocated voices to 256 [ALSOFT] (II) Key volume-adjust not found [ALSOFT] (II) Created context 06A9D370 [ALSOFT] (II) Increasing allocated effect slots to 4 [ALSOFT] (II) Increasing allocated voice properties to 32 [ALSOFT] (II) Got message "Stop Device" (0x0003, this=048A3B78, param=00000000) [ALSOFT] (II) Freeing context 06A9D370 [ALSOFT] (II) Freed unapplied AuxiliaryEffectSlot update 0752F340 [ALSOFT] (II) Freed unapplied AuxiliaryEffectSlot update 069EC638 [ALSOFT] (II) Freed unapplied AuxiliaryEffectSlot update 0686A528 [ALSOFT] (II) Freed unapplied AuxiliaryEffectSlot update 0691F748 [ALSOFT] (II) Freed 2 context property objects [ALSOFT] (II) Freed 0 AuxiliaryEffectSlot property objects [ALSOFT] (II) Freeing device 074C0050 [ALSOFT] (II) Got message "Close Device" (0x0004, this=048A3B78, param=00000000) [ALSOFT] (II) Message loop finished

END oalsoft_log_VBCABLE_GUID.log

kcat commented 4 months ago

If you want DSOAL to connect to a different device when using the GUIDs, you can set a different target for the custom device:

custom-devices = {37725D8B-CAB5-47DA-BBC3-6784C92B84FA}=Blue Cat's PatchWork:

will make it connect to the input ports of Blue Cat's PatchWork, instead of system for the system audio output (so you won't have to do any manual reconnections to feed OpenAL Soft's ambisonic output to the decoder).

alex-schroedsen commented 4 months ago

I'm am excited to say that your suggestion worked perfectly for getting DSOAL to grab the Blue Cat's Patchwork JACK device automatically. Thank you for bringing that to attention!

Now I'm wondering if you can think of a solution for native OpenAL applications to auto-select a device other than "system:".

In other news, progress is being made in crosscompiling the wine-4.2 DLLs for XAudio2 to OpenAL Soft translation. I've successfully configured for make compilation. New topic here https://github.com/kcat/openal-soft/issues/997

One more topic, I'm very excited to see your new spatial-api flag under the wasapi backend config. I'll give it a try and report back. I have a Dolby Atmos capable processor as well as the discrete 5.1.2 signal path.

kcat commented 4 months ago

Now I'm wondering if you can think of a solution for native OpenAL applications to auto-select a device other than "system:".

Not currently. OpenAL Soft gets a list of devices from JACK by checking the names of all available ports that take audio samples. Whichever is listed first ends up as the default device, since JACK doesn't otherwise specify a default. If the app doesn't have an option to select a device, that's what will get used. I would have to add an option to the JACK backend to manually specify a different default.

One more topic, I'm very excited to see your new spatial-api flag under the wasapi backend config. I'll give it a try and report back. I have a Dolby Atmos capable processor as well as the discrete 5.1.2 signal path.

Be aware the spatial-api option doesn't currently support ambisonic output (I've noticed references to it in the API, but I haven't found enough information about how to use it, yet), so it outputs discrete channel feeds that get virtualized/downmixed as needed by the processor. To make use of a with-height setup, you'll need to use the surround714 configuration for 7.1.4, which hopefully the processor can downmix to 5.1.2. OpenAL Soft's 7.1.4 output is also somewhat "raw"; it's basically the result of the Ambisonic Decoder Toolbox's "AllRad" decoder generator, which has some odd minor asymmetry in the speaker responses and lacks the shelf filters. It should be an okay starting point, but it definitely has room to improve.