Hi! It's funny how things tend to turn around and (usually) break down as soon as you make some plans - especially if you happen to mention anything to anyone. I'm officially switching to the Debian Release Policy for all my Free/Open Source projects from now on. Oh well.. Scripting (EEL, Lua etc) ------------------------ Latest news is "no real news for now". That is, I'm going to stick with EEL for the time being, and do some more work on it. Lua, though fast, small and generally nice, isn't a perfect match, and most importantly, it's not (yet) hard real time safe. (It's closer than EEL, but it needs a new GC.) Further, I have yet to find a good reason to *actually* run scripts in real time, as opposed to viewing scripts as DSP network descriptions. Given the right DSP operators, the latter can be functionally equivalent to the former, and the implementation gets cleaner and simpler. No stack, no dynamic memory allocation beyond voice allocation and similar low level engine stuff, and flow control is pretty much reduced to running fixed graphs. EEL used this way - though in itself still a simple procedural language - will look and feel a lot like a functional programming language with a built-in macro preprocessor. I believe this is an easier and safer way to program, and real time performance can be optimal without the need for a full blown hard real time VM. Since EEL has run-time assignable operators, it could easilly be made to turn arbitrary expressions into chains of DSP/event operators, so there's really no useful functionality to lose, I think. Effects & integer processing ---------------------------- I snatched the C version of Jezar's Freeverb, and the chorus effect, from FluidSynth. Dunno about the quality of the chorus yet, but the reverb is a great deal better than my old feedback delay. I might try to hack a "lo-fi" version as well, for scalability, but I don't know if it's really needed. Other stuff ----------- If you *really* don't have anything useful to do, here's the ChangeLog for Audiality 0.1.1, so far: *** I looked at Masanao Izumo's original sound SFX player for XKobo, and failed to find any traces of it in the current Audiality code. All of it has been either removed or rewritten at least once by now. As a result, and because I have not been able to contact Izumo for a comment, I've decided to remove the copyright and the GPL from the affected files. Audiality is now entirety LGPL. * Added ady_mixer_connect_cc(). * Added sample accurate timing to "midisock" and the MIDI loader/player. * Made the patch plugins fully sample accurate. * Implemented the LFOs in the AGW modulators. * Added internal "long time" unique IDs to EEL scripts, to tell different scripts loaded at the same slot apart. (Only for figuring out when to print the "in file ..." line of error messages so far.) * Implemented ALSA rawmidi and sequencer I/O. (Write is TODO though, as we need to hook up another midisock for that.) Thanks to Phil Kerr for the ALSA sequencer code examples! * AGW and WCA naming fix: All modulator related calls/operators are now named wca_mod_*() or w_mod_*, for consistency. *_mod is now called *_mod_lfo, which is more descriptive. * Implemented wca_env_taper() and AGW op w_env_taper. * Implemented wca_mix() and AGW op w_wix. * Added w_free AGW operator. * Removed the fixed point crap from the API. * Reviewed, rearranged and cleaned up the TODO. * Renamed the old "reverb" xdelay. (The name delay is reserved for a simpler, pure feedback delay effect.) * Started playing with a "real" reverb, based on multiple feedback delays. * Added 'effects', 'drivers' and 'misc' subdirs, and moved stuff into them. It's getting crowded in that engine dir... * Subsystem open/close now named *_open_module() and *_close_module(), to avoid confusion with object oriented open()/close() calls. For now, this also covers modules that are effectively singletons, but most of these will have to be converted to proper OO style eventually. * Polling mode removed for now. * a_midi.[ch] turned into a generic raw MIDI parser with midisock output. * The new SDL audio driver supports 8 and 16 bits, mono and stereo. * Implemented a new I/O framework to make it easier to add and maintain support for various audio and control I/O APIs. * Added ADY_REALTIME, which runs the audio thread as SCHED_FIFO, if possible. * Patch closure removed from the channel struct, since no one seems to need it. Hoping that no patch plugins will need per-channel run-time storage, as that would be a major PITA when dealing with patch maps. * IRAMP events now assume that you're at the previous sample until processing actually starts - which means that a duration of 1 means the next sample will be halfway to the target. * Voice resamplers now apply ramped control deltas *first*, to eliminate the 1 sample delay. * Removed ISET event for interpolated controls. All you need is IRAMP! :-) * Number of stages per bus is now unlimited. * Number of busses increased from 8 to 16. * Polyphony changed from 32 to 128 voices. * Master volume and reverb crap removed. * Added Unified Control Events macros to events.h. * Switched to Uint32 for VVID entries. * Added cookie and VVID fields to events. (They're still 32 bytes even with 64 bit pointers...) * a_mixers.h renamed a_resample.h. * a_bus.[ch] renamed a_mixer.[ch], because that's what it is. The files cover the mixer as a whole; not just the bus object. * Send bus selection moved to NRPNs 32..37. * Implemented user defined CC -> mixer control mapping, for fast and easy real time control. * Replaced the CC mixer control interface with an NRPN based interface. * Major mixer rewrite. Introduced Bus Stages, for more flexible routing and more efficient processing. * Implemented RPNs Pitch Bend Range, Master Fine Tuning and Master Coarse Tuning. (If they *work* is another matter... ;-) * Implemented RPN and NRPN parsing. * Mono/poly switching turns all notes off. * "All Controllers Off" no longer resets mono/poly mode, since that's not intended by the standard. * Insert FX structs are now cleared and re- initialized properly when plugins are removed. * Another stupid bug: Controls were not delivered to insert plugins because of an indexing error. * Added "wah" FX plugin. (Resonant filter with auto + manual sweeping.) * Ultra stoopid envelope bug removed: Timestamps were quantized to block resolution. This is what caused fast ramps to fail and IRAMP followed by ISET to click. DOH! * Poly and mono Patch Plugins now initialize the primary output and send busses for voices. (So *that's* why my mixes broke... Oops!) * LINEAR_2X zone removed from the VHQ mode. It's LINEAR_4X from 1.5 x fs and up. Better, but still sucks for waveforms with lots of energy near Nyqvist... * Ditched [ind-1] special case for cubic. Broken, and it wasn't much point anyway. Short loops should have envelopes and longer waveforms should start "nicely"... (Note that attack-loop-release looping, multiloops and the like can't be done right this way! Need more "special case" samples.) * Added Virtual Voice ID manager, a_vvid.[ch]. * From now on, friends may call Audiality Ady. ;-) What this actually means is that: * API calls are named ady_some_func(). * API types are named ADY_some_type. * Internal functions and variables are still named a_some_fun() or a_some_var, or use subsystem specific prefixes. * Internal types are named A_some_type. * Static functions and variables have no prefixes at all. Obviously, this breaks both binary and source compatibility! * Moved the AGW documentation into EEL_AGW.txt. * a_wave_get() is now internal, as is the A_wave struct type. (Who wants to mess with *that*!? ;-) * API header file names now have no prefixes, as they're installed in a directory of their own. Note that API headers don't have to be in any special directory! All headers without prefixes should be installed. * Started separating API stuff from internal stuff in the headers. API headers must not contain any internal types, calls or variables. (In fact, the API must not contain any variables at all!) * Removed the unused engine locking code. * Threw a rudimentary Cooledit/MidnightCommander syntax highlighting definition in the docs dir. * The mixers in a_tools.h now test for the zero samples in debug builds. * Added quick hack disk writer output driver. (For off-line rendering only, so far.) * Added check for pthreads. //David Olofson - Programmer, Composer, Open Source Advocate .- Audiality -----------------------------------------------. | Free/Open Source audio engine for games and multimedia. | | MIDI, modular synthesis, real time effects, scripting,... | `-----------------------------------> http://audiality.org -' --- http://olofson.net --- http://www.reologica.se --- --------------------------------------------------------------------------- The Audiality Audio Engine mailing list. Home: http://audiality.org Archive: //www.freelists.org/archives/audiality Unsubscribe: Email audiality-request@xxxxxxxxxxxxx w/ subject "unsubscribe" ---------------------------------------------------------------------------