cell
Cellular Automaton
Plugin opcode in cellular
One-Dimensional Cellular Automaton. This opcode is the modified version of vcella by Gabriel Maldonado.
Syntax
cell ktrig, kreinit, ioutFunc, initStateFunc, iRuleFunc, ielements
Initialization
ioutFunc -- number of the table where the state of each cell is stored.
initStateFunc -- number of the table containing the inital states of cells.
iRuleFunc -- number of a lookup table containing the 8-bit rule.
ielements -- total number of cells in a row.
ktri -- trigger signal. Each time it is non-zero, a new generation of cells is evaluated.
kreinit -- reset signal. Each time it is non-zero, state of all cells is forced to be that of initStateFunc.
cell models a classical 1D cellular automaton and stores the state of each cell in the table identified by ioutFunc.
initStateFunc is an input vector containing the inital value of the row of cells, while iRuleFunc is an input vector containing the chosen rule in the binary form (least significant bit first).
A new generation of cells is evaluated each time ktrig contains a non-zero value. Also the status of all cells can be forced to assume the status corresponding to the contents of initStateFunc each time kreinit contains a non-zero value.
Note that each cell is supposed to be in one of two possible states (1 = "alive", 0 = "dead"), although fractional values should work too, because truncation is used.
Examples
Here is a simple example of the cell opcode. It uses the file
cell.csd.
A simple example of the cell opcode. |
---|
| <CsoundSynthesizer>
<CsOptions>
; 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
</CsOptions>
<CsInstruments>
; 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
</CsInstruments>
<CsScore>
; 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
</CsScore>
</CsoundSynthesizer>
|
See Also
Models and Emulations
Credits
Author: Gleb Rogozinsky
October 2011
New in Csound version 5.16.6