Som-A is a programming language for additive synthesis. Its interpreter executes score files referred to as spectral charts.
A spectral chart is a score file that contains an "orchestra" of synthesis instruments and an ordered list of notes. A synthesis instrument may be requested by different voices at the same time.
There is no limitation to the number of spectral components in any instrument and an instrument may be defined as a subset of another instrument.
Som-A has only five elements in its instruction set and its notation resembles Lisp programming. Its simple but effective approach to additive synthesis programming makes Som-A extremely attractive to composers.
(INS 10 MIR (5 90 ((0 0) (600 120) (500 380) (0 511)) 1) (8 270 ((0 0) (800 200) (0 511)) 0.2) )Note that the instrument will be dismantled at t=10 seconds.
Several EXE commands can be specified in a spectral chart. Each of them will generate disjointed and independent polyphonic segments.
Example:
If one wishes to use the instrument MIR to play a three note sequence with durations equal to 2, 1 and 1 seconds, frequencies at 400, 500 and 600 Hz, and amplitudes equal to 10, 12 and 15, respectively, a score, say, MINOR.CAR, could be created as follows:
(VAL 0 4 12000)
(INS 4 MIR
(5 90 ((0 0) (600 120) (500 380) (0 511)) 1)
(8 270 ((0 0) (800 200) (0 511)) 0.2)
)
(EXE 0 4)
(MIR 0 2 400 10)
(MIR 2 1 500 12)
(MIR 3 1 600 15)
(STP)
(FIM)
Note that the highest frequency in this signal will be 4800 Hz because the highest fundamental frequency is equal to 600 Hz and the highest partial is the 8th harmonic. In this case, the sampling rate must be above 9600 Hz in order to avoid Nyquist distortion.
Writing note lists
A note command activates a given instrument, starting at a given time, for a given duration, at a given frequency, and at a given amplitude. A note command is specified as list of 5 elements as follows:
(<instrument>
<starting time>
<duration>
<frequency in Hertz>
<amplitude>)
Full instrument and sub-instrument
The term <instrument> in a note statement has the form <instrument-name> <sub-instrument list>; that is, it can be an atom (e.g. MIR), or a 3 element list.
<list of sub-instruments> =
( <macro-instrument-name>
<(n1 n2 ... nj)>
< life span of sub-instrument>)
The first element of the list is an atom that represents a (macro) instrument, the second element is a list of numbers that specifies a subset of H-units from the macro instrument and the third element is the life span of this sub-instrument.
(VAL 0 1.6 10000 1 1 1 925) (INS 1.6 I1 (10 0 ((0 0) (30000 385) (4000 343) (0 925)) 0) (12 90 ((0 0) (7500 385) (0 925)) 0) (15 180 ((0 0) (3500 385) (0 925)) 0) ) (EXE 0 1.6) ((I1 (1)) 0.0 0.2 10 1) ((I1 (2)) 0.2 0.2 10 1) ((I1 (3)) 0.4 0.2 10 1) ((I1 (1)) 0.6 0.2 10 1) ((I1 (1 2)) 0.8 0.2 10 0.6) ((I1 (1 2 3)) 1.0 0.2 10 0.4) (I1 1.4 0.2 10 0.25) (STP) (FIM)
The first note requests an instrument derived from I1, such that all its H-units are discarded except the first one.The fifth note requests a sub-instrument with two H-units, the components 1 and 2 of I1. The note before the last one requests all its components.