[PD-cvs] externals/frankenstein GArhythm.c, 1.1, 1.2 chords_memory.c, 1.5, 1.6 harmonizer.c, 1.1, 1.2 rhythms_memory.c, 1.3, 1.4

dmorelli morellid at users.sourceforge.net
Thu Dec 8 17:31:13 CET 2005


Update of /cvsroot/pure-data/externals/frankenstein
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21083

Modified Files:
	GArhythm.c chords_memory.c harmonizer.c rhythms_memory.c 
Log Message:
fixing things

Index: harmonizer.c
===================================================================
RCS file: /cvsroot/pure-data/externals/frankenstein/harmonizer.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** harmonizer.c	18 Oct 2005 23:10:53 -0000	1.1
--- harmonizer.c	8 Dec 2005 16:31:10 -0000	1.2
***************
*** 264,268 ****
  					// i go up
  					rnd = rand()/((double)RAND_MAX + 1);
! 					steps = rnd * 5; // how many step (good notes) will I ignore?
  					note = insertpoint + steps;
  					if (note >= POSSIBLE_NOTES)
--- 264,268 ----
  					// i go up
  					rnd = rand()/((double)RAND_MAX + 1);
! 					steps = rnd * 5; // how many steps (good notes) will I ignore?
  					note = insertpoint + steps;
  					if (note >= POSSIBLE_NOTES)
***************
*** 273,277 ****
  					// i go down
  					rnd = rand()/((double)RAND_MAX + 1);
! 					steps = rnd * 5; // how many step (good notes) will I ignore?
  					note = insertpoint - steps;
  					if (note < 0)
--- 273,277 ----
  					// i go down
  					rnd = rand()/((double)RAND_MAX + 1);
! 					steps = rnd * 5; // how many steps (good notes) will I ignore?
  					note = insertpoint - steps;
  					if (note < 0)
***************
*** 296,299 ****
--- 296,301 ----
  {
  	int i, j, tmp, res, last, avgHI, avgLOW;
+ 	short int chord_notes[4];
+ 	short int chord_notes_ok[4];
  	short int transitions[VOICES];
  	short int directions[VOICES];
***************
*** 435,438 ****
--- 437,475 ----
  	
  	// TODO: is a complete chord?
+ 	// does this voicing have all 5 notes?
+ 	// first build a table for comparision
+ 	for (i=0; i<4; i++)
+ 	{
+ 		chord_notes[i] = (x->target_notes[i]) % 12;
+ 		chord_notes_ok[i] = 0;
+ 	}
+ 	for (i=0; i<VOICES; i++)
+ 	{
+ 		tmp = notes[i] % 12;
+ 		for (j=0; j<4; j++)
+ 		{
+ 			if (chord_notes[j] == tmp)
+ 				chord_notes_ok[j]++;
+ 		}
+ 	}
+ 	// now in chord_notes_ok i have the number of times each note is present
+ 	if (chord_notes_ok[0] == 0)
+ 	{
+ 		// no fundamental! this is bad!!
+ 		res -= 5;
+ 	}
+ 	if ((chord_notes_ok[0] != 0) &&
+ 		(chord_notes_ok[2] != 0) &&
+ 		(chord_notes_ok[3] != 0) && 
+ 		(chord_notes_ok[4] != 0))
+ 	{
+ 		// complete chord! this is good
+ 		res += 5;
+ 	}
+ 	for (j=0; j<4; j++)
+ 	{
+ 		res -= 2^chord_notes_ok[j];
+ 	}
+ 	res += 2*VOICES;
  
  	// penalize too many basses
***************
*** 452,455 ****
--- 489,493 ----
  	}
  
+ 
  	if (DEBUG_VERBOSE)
  		post("fitness is %i", res);

Index: rhythms_memory.c
===================================================================
RCS file: /cvsroot/pure-data/externals/frankenstein/rhythms_memory.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** rhythms_memory.c	8 Dec 2005 01:29:55 -0000	1.3
--- rhythms_memory.c	8 Dec 2005 16:31:10 -0000	1.4
***************
*** 183,187 ****
  	time_t a;
      t_rhythms_memory *x = (t_rhythms_memory *)pd_new(rhythms_memory_class);
! 	x->l_out = outlet_new(&x->x_obj, "list");
  	
  	x->seq_initialized = 0;
--- 183,187 ----
  	time_t a;
      t_rhythms_memory *x = (t_rhythms_memory *)pd_new(rhythms_memory_class);
! 	x->l_out = outlet_new(&x->x_obj, &s_list);
  	
  	x->seq_initialized = 0;

Index: GArhythm.c
===================================================================
RCS file: /cvsroot/pure-data/externals/frankenstein/GArhythm.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** GArhythm.c	18 Oct 2005 23:10:53 -0000	1.1
--- GArhythm.c	8 Dec 2005 16:31:10 -0000	1.2
***************
*** 42,46 ****
  	float prob_mutation;
  	char last[BUFFER_LENGHT];
! 
  } t_GArhythm;
  
--- 42,47 ----
  	float prob_mutation;
  	char last[BUFFER_LENGHT];
! 	int reinsert_src;
! 	int reinsert_last;
  } t_GArhythm;
  
***************
*** 73,76 ****
--- 74,144 ----
  				); 
  	}
+ 	
+ }
+ 
+ void GArhythm_reinit_pop(t_GArhythm *x)
+ {
+ 	int i, j, vecsize, ntot, tmp, me;
+ 	float prob, variatore;
+ 	t_garray *arysrc_strum1;
+ 	t_garray *arysrc_strum2;
+ 	t_garray *arysrc_strum3;
+ 	t_garray *arysrc_strum4;
+ 	t_float *vecsrc_strum1;
+ 	t_float *vecsrc_strum2;
+ 	t_float *vecsrc_strum3;
+ 	t_float *vecsrc_strum4;
+ 
+ 	// load tables
+ 
+ 	if (!(arysrc_strum1 = (t_garray *)pd_findbyclass(x->x_arrayname_src_strum1, garray_class)))
+ 	{
+         pd_error(x, "%s: no such array", x->x_arrayname_src_strum1->s_name);
+ 	}
+     else if (!garray_getfloatarray(arysrc_strum1, &vecsize, &vecsrc_strum1))
+ 	{
+ 		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_strum1->s_name);
+ 	} 
+ 	else if (!(arysrc_strum2 = (t_garray *)pd_findbyclass(x->x_arrayname_src_strum2, garray_class)))
+ 	{
+         pd_error(x, "%s: no such array", x->x_arrayname_src_strum2->s_name);
+ 	}
+     else if (!garray_getfloatarray(arysrc_strum2, &vecsize, &vecsrc_strum2))
+ 	{
+ 		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_strum2->s_name);
+ 	}
+ 	else if (!(arysrc_strum3 = (t_garray *)pd_findbyclass(x->x_arrayname_src_strum3, garray_class)))
+ 	{
+         pd_error(x, "%s: no such array", x->x_arrayname_src_strum3->s_name);
+ 	}
+     else if (!garray_getfloatarray(arysrc_strum3, &vecsize, &vecsrc_strum3))
+ 	{
+ 		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_strum3->s_name);
+ 	}
+ 	else if (!(arysrc_strum4 = (t_garray *)pd_findbyclass(x->x_arrayname_src_strum4, garray_class)))
+ 	{
+         pd_error(x, "%s: no such array", x->x_arrayname_src_strum4->s_name);
+ 	}
+     else if (!garray_getfloatarray(arysrc_strum4, &vecsize, &vecsrc_strum4))
+ 	{
+ 		pd_error(x, "%s: bad template for tabwrite", x->x_arrayname_src_strum4->s_name);
+ 	}
+ 	
+ 	for (i=0; i<MAX_POPULATION; i++)
+ 		{
+ 			for (j=0; j<BUFFER_LENGHT; j++)
+ 			{
+ 				char c = 0x00;
+ 				if (vecsrc_strum1[j])
+ 					c = c | 0x01;
+ 				if (vecsrc_strum2[j])
+ 					c = c | (0x01 << 1);
+ 				if (vecsrc_strum3[j])
+ 					c = c | (0x01 << 2);
+ 				if (vecsrc_strum4[j])
+ 					c = c | (0x01 << 3);
+ 				x->population[i][j]=c;
+ 			}
+ 		}
  }
  
***************
*** 317,321 ****
  	
  		// uccido a caso REINSERT_SRC elementi e inserisco il ritmo src al loro posto
! 		for (i=0; i<REINSERT_SRC; i++)
  		{
  			rnd = rand()/((double)RAND_MAX + 1);
--- 385,389 ----
  	
  		// uccido a caso REINSERT_SRC elementi e inserisco il ritmo src al loro posto
! 		for (i=0; i<x->reinsert_src; i++)
  		{
  			rnd = rand()/((double)RAND_MAX + 1);
***************
*** 336,340 ****
  		}
  		// uccido a caso REINSERT_LAST elementi e inserisco il last al loro posto
! 		for (i=0; i<REINSERT_LAST; i++)
  		{
  			rnd = rand()/((double)RAND_MAX + 1);
--- 404,408 ----
  		}
  		// uccido a caso REINSERT_LAST elementi e inserisco il last al loro posto
! 		for (i=0; i<x->reinsert_last; i++)
  		{
  			rnd = rand()/((double)RAND_MAX + 1);
***************
*** 479,482 ****
--- 547,601 ----
  }
  
+ static void GArhythm_reinsert_src_set(t_GArhythm *x, t_floatarg f)
+ {
+ 	if (f>=0)
+ 		x->reinsert_src = (int) f;
+ }
+ 
+ static void GArhythm_reinsert_last_set(t_GArhythm *x, t_floatarg f)
+ {
+ 	if (f>=0)
+ 		x->reinsert_last = (int) f;
+ }
+ 
+ static void GArhythm_prob_crossover_set(t_GArhythm *x, t_floatarg f)
+ {
+ 	if (f<=1 && f>=0)
+ 		x->prob_crossover = f;
+ }
+ 
+ static void GArhythm_prob_mutation_set(t_GArhythm *x, t_floatarg f)
+ {
+ 	if (f<=1 && f>=0) 
+ 		x->prob_mutation = f;
+ }
+ 
+ static void GArhythm_help(t_GArhythm *x)
+ {
+ 	post("");
+ 	post("");
+ 	post("GArhythm");
+ 	post("");
+ 	post("a rhythm generator/variatior that uses co-evolving Genetic Algorithms");
+ 	post("at the moment it only works with 16 step measure, 1 measure rhythms, it needs 4 arrays as input rhythms and outputs its rhythms on 4 arrays");
+ 	post("");
+ 
+ 	post("global usage hints");
+ 	post("you must provide 8 arguments: the first 4 are the names of arrays with src rhythms, the second 4 are names of arrays where GArhythm will put its output");
+ 	post("send a bang each time you want a new population (and a new rhythm) to be evaluated");
+ 	post("");
+ 	post("available commands");
+ 	post("reinit: initialize the population with the content of the src arrays");
+ 	post("variazione float: sets the index of wanted variation between the last proposed rhythm and the next one (from 0 to 1)");
+ 	post("aderenza float: sets the index of wanted closeness between the current src rhythm and proposed one (from 0 to 1)");
+ 	post("riempimento float: set 0 if you want sparse rhythms, 1 if you want a rhythm full of events");
+ 	post("reinsert_src int: how many times the src rhythms will be randomly copied in the population before breeding");
+ 	post("reinsert_last int: how many times the last rhythms will be randomly copied in the population before breeding");
+ 	post("prob_crossover float: sets the crossover probability. default is %f", DEF_PROB_CROSSOVER);
+ 	post("prob_mutation float: sets the mutation probability, default is %f", DEF_PROB_MUTATION);
+ 
+ }
+ 
+ 
  static void *GArhythm_new(t_symbol *s, int argc, t_atom *argv)
  {
***************
*** 490,493 ****
--- 609,614 ----
  	x->prob_crossover = DEF_PROB_CROSSOVER;
  	x->prob_mutation = DEF_PROB_MUTATION;
+ 	x->reinsert_src=REINSERT_SRC;
+ 	x->reinsert_last=REINSERT_LAST;
  
  
***************
*** 537,539 ****
--- 658,666 ----
  	class_addmethod(GArhythm_class, (t_method)GArhythm_riempimento_set, gensym("riempimento"), A_DEFFLOAT, 0);
  	class_addmethod(GArhythm_class, (t_method)GArhythm_aderenza_set, gensym("aderenza"), A_DEFFLOAT, 0);
+ 	class_addmethod(GArhythm_class, (t_method)GArhythm_reinit_pop, gensym("reinit"), 0, 0);
+ 	class_addmethod(GArhythm_class, (t_method)GArhythm_reinsert_src_set, gensym("reinsert_src"), A_DEFFLOAT, 0);
+ 	class_addmethod(GArhythm_class, (t_method)GArhythm_reinsert_last_set, gensym("reinsert_last"), A_DEFFLOAT, 0);
+ 	class_addmethod(GArhythm_class, (t_method)GArhythm_prob_crossover_set, gensym("prob_crossover"), A_DEFFLOAT, 0);
+ 	class_addmethod(GArhythm_class, (t_method)GArhythm_prob_mutation_set, gensym("prob_mutation"), A_DEFFLOAT, 0);
+ 	class_addmethod(GArhythm_class, (t_method)GArhythm_help, gensym("help"), 0, 0);
  }

Index: chords_memory.c
===================================================================
RCS file: /cvsroot/pure-data/externals/frankenstein/chords_memory.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** chords_memory.c	6 Dec 2005 12:08:28 -0000	1.5
--- chords_memory.c	8 Dec 2005 16:31:10 -0000	1.6
***************
*** 100,104 ****
  
  
! #define DEBUG 1 // messaggi di debug
  #define DEBUG_VERBOSE 0 // messaggi di debug
  
--- 100,104 ----
  
  
! #define DEBUG 0 // messaggi di debug
  #define DEBUG_VERBOSE 0 // messaggi di debug
  





More information about the Pd-cvs mailing list