This looks really nice, I think I can use this for music boxes or something
I've been using this version of Soundly with some tests and it suits its purpose. However, I'd like to ultimately build Soundly into a LWJGL (rather than Slick-based) audio engine.
My ambitious todo list... Ultimately I would like to see this workable with Slick, JMonkeyEngine, etc.
- "sound definition" files: simple scripts to define a mix, sound or group
- deferred loading
- reverb, delay, highpass/lowpass, etc. through EFX
- remove the emphasis on "2D sounds", make it all 3D (better suited with LWJGL and "2D sounds" doesn't make sense anyways)
- support OpenAL listener orientation, attenuation, etc.
- basic ADSR envelopes (attack, decay, sustain, release)
- simple dynamic music support (start/end times, tempos, patterns)
- completely remove dependency on SoundStore (and in turn StreamSound, MODSound, NullAudio, etc.)
Edit: Been doing some more work on it.
I've reworked Soundly to use Paul Lamb's SoundSystem as a base instead of slick-util: this means you can pick and choose which libraries to use (LWJGL, JavaSound, JOAL) as well as which codecs (JOrbis, JOgg, Wav, IBXM). And while slick-util only supported OGG streaming, you can now stream with any supported codec.
It also opens the doors to reverb/lowpass/etc. on Mac OSX -- while EFX (OpenAL effects) is not supported, JavaSound should work fine.
I'm planning on using XML to parse sound definitions, it might look something like this:
<!-- Temporary sounds are not held in memory after they have finished playing -->
<Sound id="boom" ref="explosion.ogg" temporary="true">
A chain of effects, triggered every time the sound is played and
updated along with the sound.
<!-- When played, randomize the volume and pitch between the two values. -->
<fx.Random.Volume low="0.9" high="1.2" />
<fx.Random.Pitch low="0.9" high="1.2" />
<!-- Add a reverb effect to the sound -->
<fx.Reverb size="100" wet="50" />
Pan the sound from left to right over 1000 ms
Animate will also work on Volume/Reverb/Lowpass/Hipass/etc.
<fx.Animate.Pan start="0.5" end="1.5" time="1000" />
<!-- Have the sound fade out 1000 ms from the end. -->
<fx.FadeOut time="1000" />