Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow changing audio output device by updating OpenAL Soft #1841

Open
wants to merge 14 commits into
base: 9.0.0-dev
Choose a base branch
from

Conversation

ACrazyTown
Copy link
Contributor

@ACrazyTown ACrazyTown commented Sep 23, 2024

This PR adds bindings and implements OpenAL Soft's ALC_SOFT_reopen_device and ALC_SOFT_system_events extensions. In order to take advantage of this functionality, I had to update OpenAL Soft, which requires using latest hxcpp (git, until there's a new stable release). New versions of OpenAL Soft require the C++17 standard and the current release of hxcpp doesn't seem to have an official way to use it. (Maybe it could be done via compilerflags in the Build.xml?)

With these changes, Lime will register a callback that gets called every time there's a new event related to audio devices. If the default audio device is changed, Lime will seamlessly switch all audio sources to play on the new audio device. As a side effect, this also resolves the issue where if the current audio device is disabled (eg. unplugged) all audio sources stop playing.

Closes #1515, openfl/openfl#2642

@player-03
Copy link
Contributor

I've also had it working on Hashlink but ever since I've merged this change into 9.0.0-dev I keep getting a strange and seemingly unrelated error: FATAL ERROR : Invalid signature for function lime@hl_cairo_get_matrix : PDOiOiB_iiii__OiOiB_iiii_ required but PDOdddddd__Odddddd_ found in hdll

Try lime rebuild hl to bring your hdll up to date.

@ACrazyTown
Copy link
Contributor Author

Try lime rebuild hl to bring your hdll up to date.

I've done that, tried doing a clean rebuild of both lime and my testing project. I keep getting the same error. Could this commit 71442d0 be related? It doesn't seem to be in 9.0 branch

@player-03
Copy link
Contributor

player-03 commented Sep 23, 2024

Oh yeah, if you don't have that merged, you'll need it. Edit: ok, merged into 9.0.0-Dev. You can pull from there.

@ACrazyTown
Copy link
Contributor Author

Okay, I think I did the merge right. Hashlink seems to be fixed and working fine now!

@ACrazyTown
Copy link
Contributor Author

I've gotten Mac to build and work!

I only have Linux, Android & Neko left to figure out, though CI for them will always fail because it uses an older hxcpp version

@ACrazyTown
Copy link
Contributor Author

Tested out Linux & it seems to work. I assume Android would also work with just an updated config but I don't know how I'd even test that... Neko seems to crash whenever it tries to dispatch the callback, I'm assuming it's threading related. I'm not sure what the alternative to hxcpp's gc_set_top_of_stack and hl's hl_register_thread would be on Neko.

@ACrazyTown ACrazyTown force-pushed the feat/openal-update_audio-output-switch branch from 682d3d3 to dd2d512 Compare November 7, 2024 10:41
@ACrazyTown
Copy link
Contributor Author

ACrazyTown commented Dec 10, 2024

I'll undraft this PR now as I think it should be pretty much ready to go except for a few concerns:

  1. Neko support - Neko is crashing when the callback is supposed to be dispatched, probably because of threading? I assume to fix it I'd use neko_thread_register() but I can't figure out how to call functions from the Neko API in the C++ code as I can't seem to include the neko_vm.h header.

  2. Callback userParam - Not sure how to tackle this. When setting a callback OpenAL Soft keeps a reference to a user specified value. Seems like it's not possible to directly set a Haxe value here because it may get collected by the GC before the callback gets dispatched causing issues when sending it back as it would point to invalid memory.

  3. Failing Android CI - Android CI was failing on my fork because the compiler version it uses seems to have a bug. This was resolved in a newer commit of OpenAL Soft but it isn't in a stable release yet. Lime seems to only use stable releases so I don't know if its cool to use the commit with the fix EDIT: This was fixed with 4270cfd

@ACrazyTown ACrazyTown marked this pull request as ready for review December 10, 2024 20:24
@ACrazyTown ACrazyTown changed the title Update OpenAL Soft and allow seamless changing of the output device Allow changing audio output device by updating OpenAL Soft Dec 11, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants