; Select audio/midi flags here according to platform
;-odac -iadc ;;;RT audio I/O
; For Non-realtime ouput leave only the line below:
; -o cell.wav -W ;;; for file output any platform
; cell.csd by Gleb Rogozinsky
sr = 44100
kr = 4410
ksmps = 10
nchnls = 1
0dbfs = 1
; Cellular automaton-driven synthesis in spectral domain
instr 1
iatt = p4 ; envelope attack time
isus = p5 ; envelope sustain time
irel = p6 ; envelope release time
ivol = p7 ; overall volume
; create some white noise
asig rand 0.8
; spectral analysis of asig
fsig pvsanal asig, 2048, 1024, 2048, 0 ; get a vector of magnitudes
; calculate cellular automaton state
kfreq line 50, 5, 1 ; variable CA triggering frequency
ktrig metro kfreq ; trigger the CA to update cells
cell ktrig, 0, 3, 1, 2, 2048 ; cells are written into ftable 3
; use current row of cells in spectral domain
fmas pvstencil fsig, 0, 1, 3 ; apply spectral mask
aout pvsynth fmas ; reconstruct time signal
; apply envelope and out signal
kenv expseg .001, iatt, 1, isus, 1, irel, .001
out aout*kenv*ivol
endin
; This example uses one-dimensional cellular automaton
; to produce structures in spectral domain
; We have to prepare initial row of cells.
; One alive cell is enough to produce a simple fractal,
; so two alivee cells will make structure more sophisticated
f1 0 2048 7 0 150 0 0 1 1 1 0 0 45 0 0 1 1 1 0 0
; The CA rule is used as follows:
; the states (values) of each cell are summed with their neighboring cells.
; Each sum is used as an index to read a next state of cell
; from the rule table.
; Let us try rule # 129 (LSB binary 1 0 0 0 0 0 0 1).
; This rule will produce a fractal structure for single active cell
; For more rules see http://mathworld.wolfram.com/ElementaryCellularAutomaton.html
f2 0 8 -2 1 0 0 0 0 0 0 1
; Try some different rules i.E. 254 (0 1 1 1 1 1 1 1) or 169 (1 0 0 1 0 1 0 1)
; Prepare the output table of ielements size
f3 0 2048 10 0
; Time to make it sound!
i1 0 13 0.3 7 3 1
e