Citazione
Non è proprio esatto, MaxMSP effettivamete è più "scomodo" rispetto ad altri linguaggi nella gestione della polifonia, replicare più volte la stessa abstraction o lo stesso external.
Nel primo caso si può fare utilizzando l'oggetto poly~, pensato per la gestione di instanze polifoniche ma utile anche ad altri scopi, il cui utilizzo consiste solamente nel richiamare al suo interno un'abstraction di nostra fattura contenente l'oggetto thispoly~.
Se invece si vuole duplicare un'abstraction o un externals n volte, in MaxMSP come in Pd, è possibile ricorrere allo "scripting" interno, controllabile su max tramite l'oggetto thispatcher o via javascript, in pd semplicemente con il messaggio ;pd seguito dagli argomenti desiderati simili a quelli presenti in max
Nel primo caso si può fare utilizzando l'oggetto poly~, pensato per la gestione di instanze polifoniche ma utile anche ad altri scopi, il cui utilizzo consiste solamente nel richiamare al suo interno un'abstraction di nostra fattura contenente l'oggetto thispoly~.
Se invece si vuole duplicare un'abstraction o un externals n volte, in MaxMSP come in Pd, è possibile ricorrere allo "scripting" interno, controllabile su max tramite l'oggetto thispatcher o via javascript, in pd semplicemente con il messaggio ;pd seguito dagli argomenti desiderati simili a quelli presenti in max
mi riferivo non tanto alla polifonia quanto a fare copia e incolla di un abstraction con, poniamo, 2 inlet e 2 outlet, da attaccare ad un modulo con 16 inlet: copio e incollo 8 volte (vabbè, copio e incollo la prima volta 1 abstraction e ne ottengo 2, copio e incollo queste due e ne ottengo 4, copio e incollo queste 4 e ne ho 8, copio e incollo queste 8 e ne ho 16 con 4 copia e incolla ma il succo è questo).
comunque, semplicemente, ogni software è meglio per alcune cose e peggio per altre. sc è più orientato alla creazione di musica composta algoritmicamente, attraverso mutazioni che sono solo parzialmente sotto il controllo dell'utente e ciò - la facilità (forse meglio la sveltezza) con cui lo si fa non che si possa fare solo con sc, eh - lo rende musicale in senso naturale. in questo l'utente aledl ha ragione. È però possibile anche fare sequencing in sc, sfruttando le capacità algoritmiche a livello micro (singoli eventi sonori) piuttosto che macro (sequenze di note, accordi, etc…).
un esempio del secondo tipo:
Codice:
a = Buffer.read(s, "/Users/Corrado/SUONI/NewDm/Akai_XR-10 Folder/Akai XR-10/XR10bd01.wav"); // carica 4 campioni (MONO) di batteria a tua scelta nella ram; Cassa
b = Buffer.read(s, "/Users/Corrado/SUONI/NewDm/Akai_XR-10 Folder/Akai XR-10/XR10bd02.wav"); // Cassa
c = Buffer.read(s, "/Users/Corrado/SUONI/NewDm/Akai_XR-10 Folder/Akai XR-10/XR10bd03.wav"); // Cassa
d = Buffer.read(s, "/Users/Corrado/SUONI/NewDm/Akai_XR-10 Folder/Akai XR-10/XR10sd01.wav"); // Rullante
( // carica lo strumento per usarlo con i pattern
SynthDef(\play,{ arg out=0,bufnum=0, r=1.0, amp=0.1;
var playbuf;
playbuf = PlayBuf.ar(1, bufnum, BufRateScale.kr(bufnum) * r ) ! 2;
FreeSelfWhenDone.kr(playbuf);
Out.ar(out, playbuf * amp);
}).memStore;
)
TempoClock.default.tempo_(1.11) // tempo
Pdef(\qwerty).play; // crea un pattern vuoto e lo avvia
( // definisce il pattern
Pdef(\qwerty, Ptpar([
0.0, Pbind(
\instrument, \play,
\bufnum, Prand([a, b, c].collect(_.bufnum), inf),
\dur, PdurStutter(
Pn(Pshuf([ Prand([1, 2, 4, 8], 1), 4, 2, Prand([1, 3, 6, 0, 4, 2], 1), 1 ], 1), inf), Pseq([0.5, 0.25, 0.25, 0.75, 0.25], inf)
)
),
0.25, Pbind(
\instrument, \play,
\bufnum, d.bufnum,
\dur, 1
)
], inf)))
Pdef(\qwerty).stop; // ferma
b = Buffer.read(s, "/Users/Corrado/SUONI/NewDm/Akai_XR-10 Folder/Akai XR-10/XR10bd02.wav"); // Cassa
c = Buffer.read(s, "/Users/Corrado/SUONI/NewDm/Akai_XR-10 Folder/Akai XR-10/XR10bd03.wav"); // Cassa
d = Buffer.read(s, "/Users/Corrado/SUONI/NewDm/Akai_XR-10 Folder/Akai XR-10/XR10sd01.wav"); // Rullante
( // carica lo strumento per usarlo con i pattern
SynthDef(\play,{ arg out=0,bufnum=0, r=1.0, amp=0.1;
var playbuf;
playbuf = PlayBuf.ar(1, bufnum, BufRateScale.kr(bufnum) * r ) ! 2;
FreeSelfWhenDone.kr(playbuf);
Out.ar(out, playbuf * amp);
}).memStore;
)
TempoClock.default.tempo_(1.11) // tempo
Pdef(\qwerty).play; // crea un pattern vuoto e lo avvia
( // definisce il pattern
Pdef(\qwerty, Ptpar([
0.0, Pbind(
\instrument, \play,
\bufnum, Prand([a, b, c].collect(_.bufnum), inf),
\dur, PdurStutter(
Pn(Pshuf([ Prand([1, 2, 4, 8], 1), 4, 2, Prand([1, 3, 6, 0, 4, 2], 1), 1 ], 1), inf), Pseq([0.5, 0.25, 0.25, 0.75, 0.25], inf)
)
),
0.25, Pbind(
\instrument, \play,
\bufnum, d.bufnum,
\dur, 1
)
], inf)))
Pdef(\qwerty).stop; // ferma
Alla fine tutto si basa sulla cellula ritmica [0.5, 0.25, 0.25, 0.75, 0.25], però, insomma, ha la sua varietà;
e uno del primo:
Codice:
(
{
var freq = 220;
var saw = SinOsc.ar(freq);
var mouseX = LFNoise2.kr([1, 0.8], 0.99, 1);
var mouseY = LFNoise1.kr([0.97, 1.1], 0.9, 1);
var filtsaw = BLowPass4.ar(saw, freq * 0.49, 1.0) * ((freq.reciprocal * 0.499)*mouseX) + ((freq.reciprocal) * mouseY);
var comb = Out.ar(0, LeakDC.ar(CombC.ar(saw, 1, filtsaw, 2, 0.01).minNyquist));
comb
}.play
)
{
var freq = 220;
var saw = SinOsc.ar(freq);
var mouseX = LFNoise2.kr([1, 0.8], 0.99, 1);
var mouseY = LFNoise1.kr([0.97, 1.1], 0.9, 1);
var filtsaw = BLowPass4.ar(saw, freq * 0.49, 1.0) * ((freq.reciprocal * 0.499)*mouseX) + ((freq.reciprocal) * mouseY);
var comb = Out.ar(0, LeakDC.ar(CombC.ar(saw, 1, filtsaw, 2, 0.01).minNyquist));
comb
}.play
)
CIAO
OT: ascolto Echus Chasma intanto.






