SuperCollider : OrdreExecution

SuperCollider :: Categories :: PageIndex :: RecentChanges :: RecentlyCommented :: Login/Register
Passage de Message < Index > Bus


ordre d'exécution






source -> effect

Notes sur les Serveurs et le Cibles (Targets)




// exécuter ce qui suit et regarder la console
s === Server.default;
s === Server.local;
Server.default = Server.internal;
s === Server.default;
Server.default = Server.local; // return it to the local server



Contrôle de l'ordre d'exécution


trois manières:


Add actions



alternative : méthodes sur la classe Synth

    Synth.head(cible, nomDuDef, arguments) //en tête
    Synth.tail(cible, nomDuDef, arguments) //en queue


    Synth.before(cible, nomDuDef, argument)
    Synth.after(cible, nomDuDef, argument)
    Synth.replace(cible, nomDuDef, argument )



Déplacement des Nodes:



.moveBefore
.moveAfter
.moveToHead
.moveToTail


    ~fx = Synth.tail(s, "fx");
    ~src = Synth.tail(s, "src");  // l'effet est inactif,il est avant la source
    ~src.moveBefore(~fx);   // placement de l'effet **après** la source


Groups


Group 1 -> Group 2
  • Dans la configuration ci-dessus, tous les synths de Group1 s'éxécutent avant ceux de Group2
  • permet un contrôle plus facile de l'ordre
  • structure

    configuration courante

    [groupe de Synths] - > effet -> sortie principale

    devient

    Group ( [groupe de Synths] ) -> Group ( effet) -> sortie


    Exemple

    s.boot;

    (
    l = Bus.control(s, 1);  // control bus pour LFO
    b = Bus.audio(s, 2);    // sépare la chaine src->fx d'autres chaînes similaires

    ~synthgroup = Group.tail(s);
    ~fxgroup = Group.tail(s);

    // synthgroup --> fxgroup, depuis le group par défaut de **s**

    // quelques Synthdef
    SynthDef("order-of-ex-dist", { arg bus, preGain, postGain;
        var sig;
        sig = In.ar(bus, 2);
        sig = (sig * preGain).distort;
        ReplaceOut.ar(bus, sig * postGain);
    }).send(s);

    SynthDef("order-of-ex-pulse", { arg freq, bus, ffreq, pan, lfobus;
        var sig, noteLen;
        noteLen = In.kr(lfobus, 1);
        sig = RLPF.ar(Pulse.ar(freq, 0.2, 0.5), ffreq, 0.3);
        Out.ar(bus, Pan2.ar(sig, pan)
            * EnvGen.kr(Env.perc(0.1, 1), timeScale: noteLen, doneAction: 2));
    }).send(s);

    SynthDef("LFNoise1", { arg freq, mul, add, bus;
        Out.kr(bus, LFNoise1.kr(freq, mul:mul, add:add));
    }).send(s);
    )

    // Placement du LFO

    ~lfo = Synth.head(s, "LFNoise1", [\freq, 0.3, \mul, 0.68, \add, 0.7, \bus, l.index]);

    // Placement des effets

    ~dist = Synth.tail(~fxgroup, "order-of-ex-dist", [\bus, b.index, \preGain, 8, \postGain, 0.6]);

    // transfert de l'ensemble vers la sortie principale, avec mise à niveau
    // exécution à la queue du groupe défaut de **s** (noter que Function.play peut prendre l'argument *addAction*)

    ~xfer = { Out.ar(0, 0.25 * In.ar(b.index, 2)) }.play(s, addAction: \addToTail);  

    //Démarrage de la routine:

    (
    r = Routine({
        {
            Synth.tail(~synthgroup, "order-of-ex-pulse",
                [\freq, rrand(200, 800), \ffreq, rrand(1000, 15000), \pan, 1.0.rand2,
                 \bus, b.index, \lfobus, l.index]);
            0.07.wait;
        }.loop;
    }).play(SystemClock);
    )

    ~dist.run(false);   //vérification de l'effet
    ~dist.run(true);

    //nettoyage
    (
    r.stop;
    [~synthgroup, ~fxgroup, b, l, ~lfo, ~xfer].do({ arg x; x.free });
    currentEnvironment.clear; // nettoyage des variable d'environnement
    )

    représentation graphique de cet exemple:
    orderOfExecution


    Messaging Style



    Passage de Message < Index > Bus

    There are no comments on this page. [Add comment]

    Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by Wikka Wakka Wiki 1.1.6.3
    Page was generated in 0.1583 seconds