cell — Automate cellulaire
Opcode du greffon cellular.
Automate cellulaire à une dimension. Cet opcode est une version modifiée de vcella par Gabriel Maldonado.
ioutFunc -- numéro de la table dans laquelle l'état de chaque cellule est stocké.
initStateFunc -- numéro de la table contenant l'état initial des cellules.
iRuleFunc -- numéro de la table contenant la règle sur 8 bit.
ielements -- nombre total de cellules dans une ligne.
ktrig -- signal de déclenchement. Chaque fois qu'il est différent de zéro, une nouvelle génération de cellules est évaluée.
kreinit -- signal de réinitialisation. Chaque fois qu'il est différent de zéro, toutes les cellules sont mises dans l'état correspondant de initStateFunc.
cell modélise un automate cellulaire classique à une dimension et stocke l'état de chaque cellule dans une table identifiée par ioutFunc.
initStateFunc est un vecteur d'entrée contenant l'état initial de la ligne de cellules, tandis que iRuleFunc est un vecteur d'entrée contenant la règle choisie dans sa forme binaire (bit de moindre poids en premier).
Une nouvelle génération de cellules est évaluée chaque fois que ktrig contient une valeur non nulle. On peut aussi forcer l'état de toutes les cellules à l'état correspondant dans initStateFunc chaque fois que kreinit contient une valeur non nulle.
Noter que l'on suppose que chaque cellule peut être dans un état parmi deux (1="vivante", 0="morte"), bien que des valeurs fractionnaires peuvent également fonctionner, car elles sont tronquées.
Voici un exemple simple de l'opcode cell. Il utilise le fichier cell.csd.
Exemple 123. Un exemple simple de l'opcode cell.
Voir les sections Audio en Temps Réel et Options de la Ligne de Commande pour plus d'information sur l'utilisation des options de la ligne de commande.
<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>