Hello, a bunch of questions here.
Background:
I've been working on an advanced 3D sound engine since last year. (Advanced here means users have full control of all sound buffers, lots of classes are available for audio buffer manipulation, and i like to implement composing tools later on). I went for portability and used libsndfile, PortAudio and a lot of Boost internally. At the moment the library works on windows, mac and linux.
But now that i try to port it to Android it turns out that not everything was a portable as I thought it would be. Mainly libsndfile is giving me trouble, but in general setting up a toolchain to build all dependencies for Android turns out te be quite daunting. And then I discovered JUCE! So I wonder if switching to JUCE might be a lot easier to maintain and have others compile the thing as well (it is an open source project).
Questions:
- license: I use the Eclipse public license at the moment. The engine is open source, but commercial projects should also be able to use it. Is this still possible if I use JUCE in the library? (I'm not talking about the core, but the audio classes.)
- pointer containers: I can use OwnedArray instead of boost::ptr_vector and boost::ptr_list, but is there a class that can replace boost::ptr_map? (I can work without, but it would be handy.)
- loading files in memory: I see AudioSource normally uses a callback to read the next block of data. Can I abuse that to load the entire file to an internal buffer or is there another class to do so? (I haven't discovered one yet, and loading buffer by buffer is not efficient for multiple sources playing the same file.)
- IO callbacks: One thing i didn't find are callbacks for file IO. Libsndfile had some function pointers available for tell, read, seek, write and length with which i could pass handlers for custom filesystems. This is important because most game engines work with data packs instead of separate sound files. Am I overlooking those or do they simply not exist?
- audio devices: It looks like i need to create all available audio devices to access most information about them (like available channels, latency...) I would like to give the engine users that information. It is ok to create all available device on startup, or would you advice against that?
That's it for now. Thanks for your time and JUCE in general.
Regards,
yvan
Edit: corrected spelling of JUCE :-S