Estudio algorítmico No.1 para cuarteto de cuerdas

La primer pieza de este año. Hoy sigo experimentando con SuperCollider + Fomus + Ableton + MuseScore. Quiero hacer un cuarteto de cuerdas más adelante, pero por lo pronto estoy experimentando con diferentes formas de ensamblar y armar partituras de forma automática. Aquí les comparto el audio y la partitura. Aprovecho para agradecer al Dr. Roberto Morales Manzanares por todas las enseñanzas musicales y programáticas.

Saludos a todos y buena semana! ={D

estudiBlog.PNG

Ver partitura: Estudio_No.1-Cuarteto

Advertisements

Coquí

Estaba inspirado y me puse a improvisar con la compu,  me recodró al sonido del Coquí puertoriqueño, una ranita o sapito que canta en coro de miles todas las noches, de hecho creí que no me dejaría dormir de tan fuerte que es su sonido, pero en realidad terminó arrullandome. Le dedico estos sonidos a la Sra. Wanda González, que va en nuestro corazón todos los días.

1-a_PuertoRico (260)

L-Chiptune

Tenía tiempo que quería hacer algo con sonido de 8 bits, tipo videojuego de los ochentas, mi amigo Daniel Daowz me dio unos buenos consejos y me animé a hacer una impro. Aprovechando la clase con el Dr. Roberto Morales y su plática de los sistemas L, preparé una improvización donde las melodías van cambiando por niveles que se comportan de forma autosimilar. Aquí la parte ganadora del código es “Prewrite”, se los paso para que lo prueben.  Para el sonido tipo 8 bits con ondas utilicé el NES VST 1.28BPimage2015101918429391068


MIDIClient.init;
~mid = MIDIOut(2);

(
~d = Dictionary[
0 ->#[0,5,1],
1 ->#[7,\r,2],
2 ->#[3,0],
5 ->#[6,1],
\r -> #[\r,\r]
];

)

(
Pdef(\a,
Pbind(
\type, \midi,
\midicmd, \noteOn,
\midiout, ~mid, // MIDI target
\scale, Scale.aeolian,
\chan, 0,
\degree, 0+Prewrite(0,~d,60).trace,
\dur, 0.5,
\amp,Pbrown(0.2,1,0.1,inf)
)
).play;
)
(
Pdef(\b,
Pbind(
\type, \midi,
\midicmd, \noteOn,
\midiout, ~mid, // MIDI target
\chan, 1,
\scale, Scale.aeolian,
\degree, 4+Prewrite(0,~d,60).trace,
\dur, 1,
\amp,Pbrown(0.2,1,0.1,inf)
)
).play;
)
(
Pdef(\c,
Pbind(
\type, \midi,
\midicmd, \noteOn,
\midiout, ~mid, // MIDI target
\chan, 2,
\scale, Scale.aeolian,
\degree, (-7)+Prewrite(0,~d,60).trace,
\dur, 0.25,
\amp,Pbrown(0.2,1,0.1,inf)
)
).play;
)
(
Pdef(\e,
Pbind(
\type, \midi,
\midicmd, \noteOn,
\midiout, ~mid, // MIDI target
\chan, 3,
\scale, Scale.aeolian,
\degree, (-14)+Prewrite(0,~d,60).trace,
\dur, 1.5,
\amp,0.5
)
).stop;

)

Ejercicio de arpegios No. 2

Hola!

Tengo el proposito de publicar una pequeña pieza/ejercicio cada semana. Para explorar cómo hacer música algorítmica. La de hoy consiste en una serie de arpegios alternando con acordes de doble dominante, saludos y les paso el código también.

codigoArpegios


/*
Dominates secundarios
Copyright (C) 2015 Cristian Bañuelos

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>
*/
MIDIClient.init;
~mid = MIDIOut(2);

(
~arms = Array.new(1000);
~t=Tonalidad(0,"M");

~listaAcordes = Array.new(100);
~acord = Array.new(1000);
~listaAcordes.add(~t.getArmonia(0,"3").notasArmonia+24);
6.do({arg i;
 ~listaAcordes.add(~t.getArmonia(6-i,"DD").notasArmonia+24);
 ~listaAcordes.add(~t.getArmonia(6-i,"3").notasArmonia+24);
});
~listaAcordes.add(~t.getArmonia(0,"3").notasArmonia+24);
~listaAcordes.add(~t.getArmonia(0,"3").notasArmonia+24);
~listaAcordes.add(~t.getArmonia(0,"3").notasArmonia+24);
~listaAcordes.add(~t.getArmonia(0,"3").notasArmonia+24);

// ~listaAcordes.add(~t.getArmonia3(0).notasArmonia+24);
// ~listaAcordes.add(~t.getArmonia3(4).notasArmonia+24);
// ~listaAcordes.add(~t.getArmonia3(2).notasArmonia+24);
// ~listaAcordes.add(~t.getArmonia7(5).notasArmonia+24);
// ~listaAcordes.add(~t.getArmonia3(0).notasArmonia+24);

// Hacer concatenación de arpegios

~arms.add(~listaAcordes[0]+12);
~listaAcordes.collect({|acorde, idx|
 4.do({arg i;// octavas
 var ac =(acorde[1..acorde.size]+12)+(12*(i));
 acorde.postln;
 ~arms.add(ac)
 });
 3.do({arg i;
 var ac =(~listaAcordes[idx][1..~acord.size]+36)+(12*(i));
 ~arms.add(ac)
 });
});
~arms=~arms.flatten;
~arms=~arms.add(~arms.reverse[1..~arms.size]).flatten;


// 2.do({~arms=~arms.add(~arms[1..~arms.size]).flatten;});

// ~arms2=Array.new(1000);
// ~arms.collect({|nota, idx|
// ~arms2.add([nota, nota+[0,5,12].choose]);
// });



// Violin
~notasV = ~arms;
~dursV = ([0.3]).stutter(3000);
~ampV =Pbrown(0.5, 1.0, 0.1, inf).asStream.nextN(10000);

// Piano
~notasP = ~arms;
~dursP = ([0.3]).stutter(3000);
~ampP = Pbrown(0.5, 1.0, 0.1, inf).asStream.nextN(10000);


//Esto que sea la entrada de una funcion
~notasTotales=[~notasP,~notasV];
~dursTotales=[~dursP,~dursV];
~ampsTotales=[~ampP,~ampV];

// Play Score
("funcion.scd").loadRelative;
)

(
f = Fomus();
f.put(~partituraEventos);
f.xml;
)

~notasP.size

Película de acción

.

La impro de esta semana terminó sonando como una película de acción o algo así. Aquí se las comparto. Saludos y bonita semana!

PARTITURA

SONY DSC

/*
Película de acción accidental
Copyright (C) 2015 Cristian Bañuelos
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;
*/
MIDIClient.init;
~mid = MIDIOut(2);
(
~arms = Array.new(1000);
~t=Tonalidad(0,"m");
~listaAcordes = Array.new(100);
~acord = Array.new(1000);
~listaAcordes.add(~t.getArmonia3(0).notasArmonia+24);
~listaAcordes.add(~t.getArmonia3(4).notasArmonia+24);
~listaAcordes.add(~t.getArmonia3(2).notasArmonia+24);
~listaAcordes.add(~t.getArmonia7(5).notasArmonia+24);
~listaAcordes.add(~t.getArmonia3(0).notasArmonia+24);
// Hacer concatenación de arpegios
~arms.add(~listaAcordes[0]+12);
~listaAcordes.collect({|acorde, idx|
4.do({arg i;// octavas
var ac =(acorde[1..acorde.size]+12)+(12*(i));
acorde.postln;
if(0.8.coin,{
~arms.add(acorde)
},{
~arms.add(ac)
});
});
1.do({arg i;
var ac =(~listaAcordes[idx][1..~acord.size]+36)+(12*(i));
~arms.add(ac)
});
});
~arms=~arms.flatten;
~arms=~arms.add(~arms.reverse[1..~arms.size]).flatten;
2.do({~arms=~arms.add(~arms[1..~arms.size]).flatten;});
~arms2=Array.new(1000);
~arms.collect({|nota, idx|
~arms2.add([nota, nota+[0,5,12].choose]);
});
// Violin
~notasV = ~arms2;
~dursV = ([0.25]).stutter(3000);
~ampV =Pbrown(0.6, 1.0, 0.1, inf).asStream.nextN(10000);
// Piano
~notasP = ~arms2;
~dursP = ([0.25]).stutter(3000);
~ampP = Pbrown(0.7, 1.0, 0.1, inf).asStream.nextN(10000);
//Esto que sea la entrada de una funcion
~notasTotales=[~notasP,~notasV];
~dursTotales=[~dursP,~dursV];
~ampsTotales=[~ampP,~ampV];