Domingo de La menor

.

Este mes las ideas fluyen más fácilmente. El resultado de mi tesis era un programa/sistema que servía para analizar armonías musicales, ahora estoy dandole la vuelta y ese mismo código lo intento utilizar para crear una serie de piezas o estudios algorítmicos. En este caso, resultó algo que suena algo minimalista, pero me parece que bonito. Me gustaría saber que opinan y si tienen alguna sugerencia o petición musical ={D  De nuevo, en el espíritu de Música y Software Libre que compartimos en Armstrong Liberado, les adjunto el código de SC para los más tecnológicos.


/*
Domingo de la menor
2015-09-19
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");
100.do({
 if(0.5.coin,{
 "terceras".postln;
 ~arms.add(~t.getArmonia3(6.rand).notasArmonia!4);
 ~arms.postln;
 },{
 ~arms.add( ~t.getArmonia7(6.rand).notasArmonia!4);
 "septs".postln;
 });
});
~arms=~arms.flat+60;
)
~arms.size
(
// Violin
~notasV = ~arms+12;
~dursV = ([0.25]/2).stutter(3000);
~ampV =Pbrown(0.6, 1.0, 0.1, inf).asStream.nextN(10000);

// Piano
~notasP = ~arms;
~dursP = ([0.25]/2).stutter(3000);
~ampP = Pbrown(0.3, 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];
//


//=================================================

~partituraEventos= Array.new(20000);
~vocesEventos = Array.fill(~notasTotales.size,{Array.new(20000)});
~vocesNotas = ~notasTotales;
~vocesDurs = ~dursTotales;
~vocesAmps = ~ampsTotales;
~tiempo = 0;

//=============================================================
//=============================================================
// Exportar eventos
~notasTotales.size.do({arg voz;
 "Voz ".postln;
 voz.postln;
 ~vocesNotas[voz].collect({|nota, item|
 var dur;
 dur = ~vocesDurs[voz][item];
 ~vocesEventos[voz] =~vocesEventos[voz].add((
 \type: \midi,
 \midicmd: \noteOn,
 \midiout: ~mid, // MIDI target
 \chan: voz,
 'midinote': nota,
 'time': ~tiempo,
 'dur': dur,
 \amp: ~vocesAmps[voz][item],
 'voice':(voz+1)
 )).flatten;
 ~tiempo=~tiempo+dur;
 });
 ~tiempo = 0;
 ~partituraEventos.add(~vocesEventos[voz]);
});

~partituraEventos=~partituraEventos.flatten;

~rutinas = Array.new(2);
~notasTotales.size.do({arg i;
 ~rutinas.add(
 Routine({
 ~vocesEventos[i][0].time.wait;
 ~vocesEventos[i].collect({|val|
 // val.postln;
 val.play;
 (val.dur/2).wait;
// 0.5.wait;

 });
 };);
 );
});


~notasTotales.size.do({arg i;
 ~rutinas[i].play;
});
(
f = Fomus();
f.put(~partituraEventos);
f.xml;
)



Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s