Re: Question about distributing modifications to open-al

Robert McIntyre <[email protected]> Thu, 20 Oct 2011 16:45:34 -0700
Newsgroups gmane.comp.lib.openal
Message-ID <CABqqNd0ctWHJ1iqdKQ2O=EtiKgVndn_hohXXUWCdoY84wkj4YA@mail.gmail.com>
Those links should be
http://aurellem.com/audio-send/html/send.html

for the code and

http://aurellem.com/audio-send/html/add-new-device.html

for the steps to add a new device.

sorry about that,
--Robert McIntyre


On Thu, Oct 20, 2011 at 8:56 AM, Robert McIntyre <[email protected]> wrote:

> My name is Robert McIntyre. I am seeking help packaging some changes
> I've made to open-al.
>
> * tl;dr how do I distribute changes to open-al which involve adding a
>   new device?
>
> * Background / Motivation
>
> I'm working on an AI simulation involving multiple listeners, where
> each listener is a separate AI entity.  Since each AI entity can move
> independently, I needed to add multiple listener functionality to
> open-al. Furthermore, my entire simulation allows time to dilate
> depending on how hard the entities are collectively "thinking," so
> that the entities can keep up with the simulation.  Therefore, I
> needed to have a system that renders sound on-demand instead of trying
> to render in real time as open-al does.
>
> I don't need any of the more advanced effects, just 3D positioning,
> and I'm only using open-al from jMonkeyEngine3 that uses the LWJGL
> bindings that importantly only allow access to one and only one
> context.
>
> Under these constraints, I made a new device which renders sound in
> small, user-defined increments.  It must be explicitly told to render
> sound or it won't do anything.  It maintains a separate "auxiliary
> context" for every additional listener, and syncs the sources from the
> LWJGL context whenever it is about to render samples.  I've tested it
> and it works quite well for my purposes.  So far, I've gotten 1,000
> separate listeners to work in a single simulation easily.
>
> The code is here:
> http://aurellem.localhost/audio-send/html/send.html
> No criticism is too harsh!
>
> Note that the java JNI bindings that are part of the device code right
> now would be moved to a separate file the the same way that LWJGL does
> it. I left them there for now to show how the device might be used.
>
> Although I made this for my own AI work, it's ideal for recording
> perfect audio from a video game to create trailers/demos, since the
> computer doesn't have to try to record the sound in real time.  This
> device could be used to record audio in any system that wraps open-al
> and only exposes one context, which is what many wrappers do.
>
>
> * Actual Question
>
> My question is about packaging --- how do you recommend I distribute
> my new device?  I got it to work by just grafting it on the open-al's
> primitive object system, but this requires quite a few changes to main
> open-al source files, and as far as I can tell requires me to
> recompile open-al against my new device.
>
> I also don't want the user to be able to hide my devices presence
> using their ~/.alsoftrc file, since that gets in the way of easy
> recording when the system is wrapped several layers deep, and they've
> already implicitly requested my device anyway by using my code in the
> first place.
>
> The options I have thought of so far are:
>
> 1.) Create my own C-artifact, compiled against open-al, which somehow
> "hooks in" my device to open-al and forces open-al to use it to the
> exclusion of all other devices.  This new artifact would have bindings
> for java, etc.  I don't know how to do this, since there doesn't seem
> to be any way to access the list of devices in Alc/ALc.c for example.
> In order to add a new device to open-al I had to modify 5 separate
> files, documented here:
>
> http://aurellem.localhost/audio-send/html/add-new-device.html
>
> and there doesn't seem to be a way to get the same effect
> programmatically.
>
> 2.) Strip down open-al to a minimal version that only has my device
> and deal with selecting the right open-al library at a higher level,
> depending on whether the user wants to record sound or actually hear
> it.  I don't like this because I can't easily benefit from
> improvements in the main open-al distribution. It also would involve
> more significant modification to jMonkeyEngine3's logic which selects
> the appropriate C-artifact at runtime.
>
> 3.) Get this new device added to open-al, and provide a java wrapper
> for it in a separate artifact. Problem here is that this device does
> not have the same semantics as the other devices --- it must be told
> to render sound, doesn't support multiple user-created contexts, and
> it exposes extra functions for retrieving the rendered sounds. It also
> might be too "niche" for open-al proper.
>
> 4.) Maybe abandon the device metaphor and use something better suited
> to my problem that /can/ be done as in (1)?
>
>
> I'm sure someone here knows enough about open-al's devices to give me
> a better solution than these 4!  All help would be most appreciated.
>
> sincerely,
> --Robert McIntyre
>
>

_______________________________________________
Openal mailing list
[email protected]
http://opensource.creative.com/mailman/listinfo/openal