Download Descargar Documento
Document related concepts
no text concepts found
Transcript
Pbind Esta clase es mejor explicarla con ejemplos: // en este primer caso, Pbind va a tomar todos sus valores // del prototipo 'default' de la clase Event // // una secuencia infinita de la nota Do (60.midicps) Pbind.new.play Pbind.new.play \midinote // sustituimos el valor 'default' del parámetro midinote. todos los // otros parámetros (\amp, \dur, etc.) seguirán utilizando los valores // en el prototipo 'default' de la clase Event Pbind.new(\midinote, 61).play Pbind(\midinote, 71).play Pbind(\midinote, Pseq([ 61, 71 ], inf)).play \dur Pbind.new.play Pbind(\dur, 0.25).play Pbind(\dur, 0.5).play Pbind(\dur, Pseq([ 0.25, 0.5, 0.25], inf)).play \amp Pbind.new.play Pbind(\amp, 0.3).play Pbind(\amp, 0.01).play ( Pbind(\midinote, Pseq([ 61, 71 ], inf), \dur, Pseq([ 0.25, 0.5, 0.25] * 0.25, inf), \amp, Pwrand([ 0.01, 0.1 ], [ 0.9, 0.1 ], inf)).play ) \pan Pbind.new.play Pbind(\pan, -1).play Pbind(\pan, 1).play ( Pbind(\pan, Pseq([-1, 0, 1], inf), \midinote, Pseq([ 61, 71 ], inf), \dur, Pseq([ 0.25, 0.5, 0.25] * 0.0625, inf), \amp, Pwrand([ 0.01, 0.1 ], [ 0.9, 0.1 ], inf)).play ) modelado de frecuencia Event.default implementa un modelo multi nivel para la especificación de la altura de las notas. Este modelo permite componer utilizando escalas, modos, distintas divisiones de la octava, números de nota MIDI o frecuencias en Hertz. Todas estas diferentes formas de especificar la altura de las notas pueden ser utilizadas de forma intercambiable. \freq Especificamos la altura en Hertz: ( Pbind(\dur, 0.1, \freq, Pseq([ 100, 200, 300, 400, 500, 600, 700 ], inf) ).play ) \detune (en Hertz) Desafinamos en Hertz la altura que haya sido especificada: ( Pbind(\dur, 0.1, \detune, -50, \freq, Pseq([ 100, 200, 300, 400, 500, 600, 700 ], inf) ).play ) \midinote Especificamos la altura en número de nota MIDI: ( Pbind( \dur, 0.2, \midinote, Pseq([ Pshuf([60, 61, 62, 63, 64, 65, 66, 67], 3) ], inf) ).play ) \note Especificamos el número de nota dentro de una octava: ( Pbind( \dur, 0.2, \note, Pseq([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ], inf) ).play ) \octave Especificamos el número de octava: ( Pbind( \dur, 0.2, \octave, 5, \note, Pseq([ 0, 2,3,4 ], inf) ).play ) ( Pbind( \dur, 0.2, \octave, 8, \note, Pseq([ 0, 3 ], inf) ).play ) ( Pbind( \dur, 0.2, \octave, Pseq([ 3, 4, 5, 6, 7, 8, 9 ], inf), \note, 0 ).play ) \stepsPerOctave También podemos dividir la octava en cualquier número de partes, no sólo en doce: http://en.wikipedia.org/wiki/Equal_temperame nt ( Pbind( \dur, 0.2, \stepsPerOctave, 31, \note, Pseq((0..31), inf) ).play ) ( Pbind( \dur, 0.5, \stepsPerOctave, 12, \note, Pseq((0..5), inf) ).play ) ( Pbind( \dur, 0.4, \stepsPerOctave, 13, \note, Pseq((0..13), inf) ).play ) ( Pbind( \dur, 0.5, \stepsPerOctave, 100, \note, Pseq((0..100), inf) ).play ) \scale \degree Con \scale podemos especificar una escala. Y con \degree especificamos qué grados de esta escala queremos utilizar: ( Pbind( \dur, 0.2, \scale, [0, 2, 3, 5, 7, 9, 11], //una escala menor armónica \degree, Pseq([ 0, 1, 2, 3, 4, 5, 6 ], inf) ).play ) ( // una escala hecha a partir de una serie números primos, // dentro de una octava dividida en 19 partes iguales Pbind( \dur, Pwrand([ 0.1, Prand([ 1, 2, 3, 4]) ], [ 0.95, 0.05 ], inf), \scale, [0, 3, 5, 7, 11, 13, 17, 19], \stepsPerOctave, 19, \degree, Prand([ 0, 1, 2, 3, 4, 5, 6 ], inf) ).play ) modelado de duracion \dur (en beats) ( Pbind(\dur, Pseq([Pgeom(0.05, 1.1, 24), Pgeom(0.5, 0.909, 24)], inf)).play ) \legato El valor que hayamos especificado en \dur es multiplicado por el valor que pongamos en \legato: Pbind(\dur, 1, \legato, 0.01, \midinote, Pseq([ 80, 79 ], inf)).play Pbind(\dur, 1, \legato, 0.5, \midinote, Pseq([ 80, 79 ], inf)).play Pbind(\dur, 1, \legato, 1, \midinote, Pseq([ 80, 79 ], inf)).play Pbind(\dur, 1, \legato, 1.5, \midinote, Pseq([ 80, 79 ], inf)).play ( Pbind(\dur, 0.5, \legato, Pseq([ Pgeom(0.1, 1.18, 15), Pgeom(1.015, 1.18.reciprocal, 15) ], inf), \midinote, Pseq([ 80, 79 ], inf) ).play ) \tempo Especificamos el tempo en número de pulsos por segundo: ( Pbind(\tempo, 180/60, \dur, Pseq([1, 0.5, 0.5 ], inf), \midinote, Pseq([ 36, 84, 83.5 ], inf)).play ) ( Pbind(\tempo, 30/60, \dur, Pseq([1, 0.5, 0.5 ], inf), \midinote, Pseq([ 36, 84, 83.5 ], inf)).play ) ( Pbind(\tempo, 60/60, \dur, Pseq([1, 0.5, 0.5 ], inf), \midinote, Pseq([ 36, 84, 83.5 ], inf)).play ) \instrument Hasta ahora sólo hemos utilizado la SynthDef 'default' del prototipo 'default', pero con la llave \instrument podemos especificar cualquier SynthDef como instrumento. Sólo hay un requisito: - mandar el mensaje .store a la SynthDef, en vez de .load o .send ( SynthDef("sine", { | out, freq=500, amp, pan, gate = 1 | var signal, env; signal 1.01 ], 0.5pi, 0.5)); env = Mix(SinOsc.ar([ freq.midicps, freq.midicps * = EnvGen.kr(Env.asr(0.001, amp, 0.3), gate, doneAction: 2); Out.ar(out, Pan2.ar(signal * env, pan))}).store ) Pbind(\instrument, \sine).play ( p = Pbind(\instrument, \sine, \tempo, 180/60, \dur, 0.5, \legato, 0.5, \midinote, Pn(Pshuf([ 40, 42, 43, 45, 46 ], 2), inf), \amp, Pwrand([ 0.1, 0.7 ], [ 0.8, 0.2 ], inf), \pan, Pseq([ -1, -0.5, 0, 0.5, 1 ], inf) ).play ) p.mute // sigue tocando, pero sustituye las alturas por silencios p.unmute p.pause // pausamos el Pbind p.resume // quitamos la pause //////////////////////////////////////////// //////////////////////////////////////////// /////////// ( SynthDef("acid", { arg out, freq = 1000, gate = 1, pan = 1, cut = 4000, rez = 0.8, amp = 1; var sen,env; sen=Pan2.ar(RLPF.ar(Pulse.ar(freq,0.05),c ut, rez),pan)*amp ; env= EnvGen.kr(Env.linen(0.06, 0.4, 0.3), gate, doneAction:2); Out.ar(0,sen*env) }).store; ) ( Pbind(\instrument,\acid, \dur,Pseq([0.25,0.5,0.25],inf), \root,-12, \degree,Pseq([0,3,5,7,9,11,5,1],inf), \pan,Pfunc({1.0.rand2}), \cut,Pxrand([1000,500,2000,300],inf), \rez,Pfunc({0.7.rand +0.3}), \amp,Pfunc({0.2.rand}) ).play; )