Esercizi 2

  1. Codice di Bryan Christophe Green (da sccode)

    // 1) Boot del Server
    // 2) Selezionare il blocco di codice ed eseguire
    // 3) Muovere il mouse sull'interfaccia per modificare il suono
    // 4) Cmd + '.' per fermare il suono e distruggere l'interfaccia
    
    s.boot;
    
    (
    m = m ? 0.8; 
    f = 0.8;                                  
    Ndef(\pul, {arg freq=80, rq=0.001, amp = 0.91; 
    	        var freqa = #[110,212], 
    	            f     = 0.3; 
    	RLPF.ar(
    		Pulse.ar(freqa,0.5,0.1),               
    		freq: freq,                            
    		rq: rq,
    		mul: amp
    	)
    	+ (DelayC.ar(Ndef(\pul).ar) * f)         
    }).play;                                      
    w = Window("Pulse",                           
    	       Rect(100,Window.screenBounds.height - 400, 300, 300));
    w.view.decorator = FlowLayout(w.view.bounds);
    t = Slider2D(w, Rect(0, 0,292, 292))
        .y_(1)
        .x_(0)
    	.background_(Color.rand)
    	.knobColor_(Color.rand)
    	.action_({arg pos;
    		Ndef(\pul).set(
    		     \freq, pos.x.linexp(0,1.0, 80, 8000),
    		     \rq, pos.y.linlin(0, 1.0, 0.001, 1.0))
    });
    w.front;
    CmdPeriod.doOnce({w.close; Ndef(\pul).clear(4)});
    )
    

    Rispondere alle seguenti domande:

    • riga 7 e 8: m e f che tipo di variabili sono?
    • riga 9: a che riga si chiude la parentesi tonda che si apre in questa riga?
    • riga 9: \pul che tipo di dato è?
    • riga 10 e 11: che tipo di variabili sono frequa e f?
    • riga 10 e 11: sono computate da SuperCollider come una sola riga o due?
    • riga 10 e 11: qualunque sia la risposta precedente, perchè?
    • riga 13: Pulse che tipo di oggetto è?
    • riga 14: freq: è una stringa?
    • riga 18: Ndef che tipo di oggetto è?
    • riga 18: che valore assume in questo punto la variabile f?
    • riga 20: Pulse che tipo di oggetto è?
  2. Realizzare in SuperCollider le seguenti funzioni riportandone il risultato finale.

    image not found

    image not found

    image not found

  3. Riscrivere due volte il codice seguente di all4natural (da sccode).

    • tutto in Functional notation (con la sola eccezione del metodo .ar)
    • tutto in Receiver notation.
    // 1) boot server
    // 2) eseguire il codice
    
    (
    {
    b = fork{
             loop{h = [40,45,52].choose.midicps;
             play{Splay.ar({SinOsc.ar(exprand(h,h+(h/64)),0,0.2)
                  }!16) * LFGauss.ar(9,1/4,0,0,2)
                  };
                  4.wait}
             };
    { 
     5.do{[[72,69,64], 
           [70,64,62], 
           [67,60,70], 
           [65,60,69], 
           [64,60,67],
           [65,60,69]].do{|i| x = i.postln;
                              10.wait;}};
     10.wait;
     c.stop;
     4.wait;
     b.stop;
    }.fork;
    0.1.wait;
    c = fork{loop{h = x.choose.midicps;
                  play{Splay.ar({SinOsc.ar(exprand(h-(h/128),h+(h/128)),0,0.1)
                                 }!16) * LFGauss.ar(6,1/4,0,0,2)
                       };
                  0.5.wait;}
             };
    }.fork;
    )