Siren Design Notes

There are several elements to Siren:
the Smoke music representation language
(music magnitudes, events, event lists, generators, functions, and sounds);
voices, schedulers and I/O drivers
(real-time and file-based voices, sound and MIDI I/O);
user interface components for musical applications
(extended graphics framework, layout managers, UI tools and widgets); and
several built-in applications
(editors and browsers for Siren objects).

These subsystems use a number of design patterns, implementing visitors, adaptors, double-dispatching, MVC, and others.

The Siren Class Categories

Music-Models-Representation -- basic MM models
Music-Models-Implementation -- MM implementation classes
Music-Events -- Events, EventLists
Music-EventGenerators -- EGs
Music-EventModifiers -- EMs
Music-Functions -- functions
Music-Sound -- Sound classes
Music-Support -- Scheduler, Utility

MusicIO-External -- External interfaces to PortAudio, PortMIDI, etc.
MusicIO-MIDI -- MIDI voices and devices
MusicIO-OSC -- OSC streams
MusicIO-Sound -- Sound ports
MusicIO-Voices -- Voice hierarchy

MusicUI-DisplayLists -- Core display items and list
MusicUI-DisplayListViews -- Basic DL views
MusicUI-Editors -- Music editors and support
MusicUI-Functions -- Function editor
MusicUI-Layout -- Layout managers
MusicUI-Sound -- Sound view

The primary class hierarchies of Siren are given below grouped into categories. The text indentation signifies sub/super-class relationships, and instances variable names are shown.

Music Magnitude Models

   Magnitude
      MusicMagnitude -- value
         MusicModel
            Chroma
               ModeMember
               Pitch
            Chronos
               Duration
               Meter
            Ergon
               Amplitude
            Positus
               Directionality
               Position
               Spatialization

Music Magnitude Implementations

   Magnitude
      MusicMagnitude -- value
         ConditionalDuration
         NominalMagnitude
            SymbolicLoudness
            SymbolicPitch
         NumericalMagnitude
            HertzPitch
            IntervalMagnitude
               MIDIPitch
               MIDIVelocity
            MSecondDuration
               SecondDuration
            RatioMagnitude -- relative
               RatioDuration
               RatioLoudness
                  DBLoudness
               RatioPitch
         OrdinalMagnitude -- table
            Length
            Sharpness
         PField -- name field

Events

   AbstractEvent -- properties
      DurationEvent -- duration
         ActionEvent -- action
         MusicEvent -- pitch loudness voice
            EventList -- events index startedAt
            MixElement

EventLists

   AbstractEvent -- properties
      DurationEvent -- duration
         MusicEvent -- pitch loudness voice
            EventList -- events index startedAt
               EventGenerator
                  Cloud -- density
                     DynamicCloud
                     SelectionCloud
                        DynamicSelectionCloud
                  Cluster
                     Chord -- root inversion
                        Arpeggio -- delay
                     Roll -- number delta noteDuration
                        Trill
                  Ostinato -- list playing process
                     MIDIEcho
               Mix -- output clipped rate channels

Functions

   AbstractEvent -- properties
      DurationEvent -- duration
         Function -- data range domain
            FourierSummation -- myForm myArray
            LinearFunction
               ExponentialFunction
               SplineFunction -- linSeg
            Sound
               GranularSound -- grains
               StoredSound -- samplesInMemory firstIndex changed
                  FloatSound
                  Mu8Sound
                  VirtualSound -- source
                     CompositeSound -- components
                     GapSound -- cutList
                  WordSound

Voices
   Model -- dependents
      Voice -- name instrument stream
         MIDIFileVoice -- fileType tracks ppq tempo
         MIDIVoice -- currentTime
         NotelistVoice -- parameterMap
            CmixVoice
            CmusicVoice
            CsoundVoice
         SoundVoice