[audiality] Status report

  • From: David Olofson <david@xxxxxxxxxxx>
  • To: audiality@xxxxxxxxxxxxx
  • Date: Wed, 26 Nov 2003 23:12:45 +0100

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"
---------------------------------------------------------------------------

Other related posts:

  • » [audiality] Status report