cell — Cellular Automaton

One-Dimensional Cellular Automaton. This opcode is the
modified version of *vcella* by Gabriel Maldonado.

*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.

Here is a simple example of the cell opcode. It uses the file
*cell.csd*.

**Example 104. A simple example of the cell opcode.**

See the sections *Real-time Audio* and *Command Line Flags* for more information on using command line flags.

<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>