Orchestras have instruments. Instruments have units. Units typically have many inputs and one output. An argument is an expression which either tells an input from where it should draw data or tells an output to where it should transmit data. Each argument of a unit links to some conduit.
Data conduits are the means of directing data between the various signal-processing components that make up an orchestra. The scope of a data conduit identifies which orchestral components can access information from the conduit. The Sound engine implements three levels of scope:
Depending on its type, a conduit may hold either a single double-precision value or a sequence of double-precision values. Single-valued conduits include constants and variables. These are sometimes known (e.g. by Barry Vercoe) as scalars. Multivalued conduits are most commonly known as signals; but are also known as vectors as vectors. Within the Sound engine, contours are to signals what constants are to variables.
A word about “control-rate” signals and why I chose not to implement them within the Sound engine.
Control-rate signals were implemented by Barry Vercoe's
Music11, and have since carried over into
Control-rate signals act functionally like audio-rate signals, but their values are calculated at a much slower rate.
When I attended Vercoe's summer workshop in 1978 I thought control-rate processing was a really neat idea.
I effused about it to Vercoe, but Vercoe cooled me down for this reason:
Control values (for example in envelopes) change in small steps, and each step introduces a small discontinuity (i.e. click) into the
generated output. So ultimately when you go about generating your finished wave file, you end up bumping the control rate
up to the audio rate.
Constants are read-only and local to unit arguments. Constants are explicit double-precision values. A unit may never output to a constant.
System variables are single read-only values of global scope. System variables access values from the Sound engine. Seven system variables are presently defined:
Variables are single read/write values scoped to instruments. Variables must be calculated by one unit for use by later units in the same instrument. Two conditions apply:
Instrument Signals are read/write value sequences scoped to instruments. Two conditions apply:
Voice Signals are read/write value sequences scoped to voices. A target note can only receive information from a source note through a voice-level signal if certain conditions are met.
If an instrument consumes a voice-level signal that was not previously the output of an earlier process, then the values in the signal default to zero.
The note-list compiler presently does not detect unconsumed voice-level signals, but such is clearly not good practice.
Contours are read-only value sequences scoped to voices.
Contour values are drawn from
ramp statements in a note list.
A note can only receive information from a contour if the note references the voice to which the signal belongs.
A unit may never output to a contour.
|© Charles Ames||Page created: 2014-03-06||Last updated: 2017-08-15|