[PD-cvs] externals/frankenstein Makefile, 1.5, 1.6 chords_memory.c, 1.4, 1.5 common.c, 1.10, 1.11 common.h, 1.10, 1.11

dmorelli morellid at users.sourceforge.net
Tue Dec 6 13:08:30 CET 2005


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

Modified Files:
	Makefile chords_memory.c common.c common.h 
Log Message:
added simpler functions to manage the rhythms memory

Index: Makefile
===================================================================
RCS file: /cvsroot/pure-data/externals/frankenstein/Makefile,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** Makefile	6 Dec 2005 00:34:07 -0000	1.5
--- Makefile	6 Dec 2005 12:08:28 -0000	1.6
***************
*** 2,7 ****
  #VC="C:\Programmi\Microsoft Visual Studio .NET\Vc7"
  VC="C:\Programmi\Microsoft Visual Studio .NET\Vc7"
! PDPATH="H:\PureData\pd-0.38-3.msw\pd"
! #PDPATH="C:\Documents and Settings\Davide\Documenti\personali\pd-0.38-3.msw\pd"
  
  
--- 2,7 ----
  #VC="C:\Programmi\Microsoft Visual Studio .NET\Vc7"
  VC="C:\Programmi\Microsoft Visual Studio .NET\Vc7"
! #PDPATH="H:\PureData\pd-0.38-3.msw\pd"
! PDPATH="C:\Documents and Settings\Davide\Documenti\personali\pd-0.38-3.msw\pd"
  
  

Index: common.h
===================================================================
RCS file: /cvsroot/pure-data/externals/frankenstein/common.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -d -r1.10 -r1.11
*** common.h	6 Dec 2005 00:34:07 -0000	1.10
--- common.h	6 Dec 2005 12:08:28 -0000	1.11
***************
*** 83,86 ****
--- 83,90 ----
  // the minimum percentage for a beat to be considered part of the main rhythm
  #define min_to_be_main_rhythm_beat 0.7
+ // minimum value to be considered a subrhythm of this rhythm
+ #define min_to_be_same_rhythm 0.7
+ // minimum percentage to be considered this exact rhythm
+ #define min_to_be_same_subrhythm 0.9
  
  // this defines a space for rhythms, variations, transitions and representations
***************
*** 159,163 ****
  // add a new rhythm in the list of similar rhythms related to one main rhythm
  // the sub id is auto-generated and returned
! unsigned short int add_similar_rhythm(t_rhythm_memory_representation *this_rep, t_rhythm_event *new_rhythm);
  
  // free the list of representations
--- 163,167 ----
  // add a new rhythm in the list of similar rhythms related to one main rhythm
  // the sub id is auto-generated and returned
! unsigned short int add_t_rhythm_memory_element(t_rhythm_memory_representation *this_rep, t_rhythm_event *new_rhythm);
  
  // free the list of representations
***************
*** 184,187 ****
--- 188,265 ----
  						 );
  
+ // the following are the functions that externals should use
+ /* usage:
+ 
+ 	// first of all declare a pointer for the memory
+ 	t_rhythm_memory_representation *rhythms_memory;
+ 	// then each time you get a rhythm let the memory evaluate it and
+ 	// tell you if is a new rhythm or a old one
+ 	float root_closeness, sub_closeness;
+ 	unsigned short int id, subid, is_it_a_new_rhythm;
+ 	rhythm_memory_evaluate(rhythms_memory, rhythm, &is_it_a_new_rhythm,
+ 							&id, &subid, &root_closeness, &sub_closeness);
+ 	if (is_it_a_new_rhythm==1)
+ 	{
+ 		// it was a completely new rhythm
+ 		// id tells us new id assigned
+ 		// and subid tells us the new sub id assigned
+ 	}
+ 	if (is_it_a_new_rhythm==2)
+ 	{
+ 		// it was a new sub-rhythm of a known rhythm
+ 		// id tells us rht root rhythm id
+ 		// and subid tells us the new sub id assigned
+ 	}
+ 	if (is_it_a_new_rhythm==0)
+ 	{
+ 		// it was a known rhythm and subrhythm
+ 		// id and subid tell us the identificator
+ 	}
+ 	// i can also use root_closeness and sub_closeness and is_it_a_new_rhythm
+ 	// to know how much novelty there was in this rhythm
+ 
+ 	// i can ask the memory to give me back a specific rhythm
+ 	t_rhythm_event *wanted_rhythm
+ 	int rhythm_found = rhythm_memory_get_rhythm(rhythms_memory,
+ 							  wanted_rhythm,
+ 							  id, // the id of the main rhythm wanted
+ 							  sub_id // the sub-id of the sub-rhythm wanted
+ 							  );
+ 	if (rhythm_found == 0)
+ 	{
+ 		// that rhythm was not present!
+ 	}
+ 
+ 	// when i am ready I should free the memory
+ 	rhythm_memory_free(rhythms_memory);
+ */
+ 
+ 
+ // create a new memory for rhythms
+ void rhythm_memory_create(t_rhythm_memory_representation **this_rep);
+ // free the space 
+ void rhythm_memory_free(t_rhythm_memory_representation *rep_list);
+ // evaluate this rhythm and add it to the memory if is new
+ void rhythm_memory_evaluate(t_rhythm_memory_representation *rep_list, // the memory
+ 							t_rhythm_event *src_rhythm, // the rhythm to evaluate
+ 							// is it a new rhythm? (0 if no, 1 if new main rhythm, 2 if new subrhythm)
+ 							unsigned short int *new_rhythm,
+ 							// the id of the closest rhythm or the new id assigned
+ 							unsigned short int *id, 
+ 							// the sub-id of the closest sub-rhythm or the new sub-id assigned
+ 							unsigned short int *sub_id,
+ 							// how much this rhythm is close to the root (1=identical, 0=nothing common)
+ 							float *root_closeness,
+ 							// how much this rhythm is close to the closest sub-rhythm (1=identical, 0=nothing common)
+ 							float *sub_closeness 
+ 							);
+ // return 0 if failed finding the rhythm, 1 if the rhythm was found
+ int rhythm_memory_get_rhythm(t_rhythm_memory_representation *rep_list, // the memory
+ 							  t_rhythm_event *out_rhythm, // a pointer to the returned rhythm
+ 							  // the id of the main rhythm wanted
+ 							  unsigned short int id, 
+ 							  // the sub-id of the sub-rhythm wanted
+ 							  unsigned short int sub_id);
+ 
  // -------- notes manipulation functions
  

Index: common.c
===================================================================
RCS file: /cvsroot/pure-data/externals/frankenstein/common.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -d -r1.10 -r1.11
*** common.c	6 Dec 2005 00:34:07 -0000	1.10
--- common.c	6 Dec 2005 12:08:28 -0000	1.11
***************
*** 539,542 ****
--- 539,693 ----
  
  
+ // create a new memory for rhythms
+ void rhythm_memory_create(t_rhythm_memory_representation **this_rep)
+ {
+ 	create_rhythm_memory_representation(this_rep, 0);
+ }
+ 
+ // free the space 
+ void rhythm_memory_free(t_rhythm_memory_representation *rep_list)
+ {
+ 	t_rhythm_memory_representation *curr, *next;
+ 	next = rep_list;
+ 	while (next)
+ 	{
+ 		curr = next;
+ 		next = curr->next;
+ 		free_memory_representations(curr);
+ 	}
+ }
+ // evaluate this rhythm and add it to the memory if is new
+ void rhythm_memory_evaluate(t_rhythm_memory_representation *rep_list, // the memory
+ 							t_rhythm_event *src_rhythm, // the rhythm to evaluate
+ 							// is it a new rhythm? (0 if no, 1 if new main rhythm, 2 if new subrhythm)
+ 							unsigned short int *new_rhythm,
+ 							// the id of the closest rhythm or the new id assigned
+ 							unsigned short int *id, 
+ 							// the sub-id of the closest sub-rhythm or the new sub-id assigned
+ 							unsigned short int *sub_id,
+ 							// how much this rhythm is close to the root (1=identical, 0=nothing common)
+ 							float *root_closeness,
+ 							// how much this rhythm is close to the closest sub-rhythm (1=identical, 0=nothing common)
+ 							float *sub_closeness 
+ 							)
+ {
+ 	float root_closeness_found, sub_closeness_found;
+ 	unsigned short int id_found, sub_id_found, new_id;
+ 	t_rhythm_memory_representation *curr, *newRep, *lastRep;
+ 	int found;
+ 
+ 	// look for the closest main rhythm and subrhythm
+ 	find_rhythm_in_memory(rep_list, 
+ 						 src_rhythm, // the src rhythm 
+ 						 &id_found, // the id of the closest rhythm
+ 						 &sub_id_found, // the sub-id of the closest sub-rhythm 
+ 						 &root_closeness_found, // how much this rhythm is close to the root (1=identical, 0=nothing common)
+ 						 &sub_closeness_found // how much this rhythm is close to the closest sub-rhythm (1=identical, 0=nothing common)
+ 						 );
+ 
+ 	// decide if add to the memory or if return the closest
+ 
+ 	if (root_closeness_found>=min_to_be_same_rhythm)
+ 	{
+ 		// is close enough to be considered a subrhythm
+ 		*new_rhythm = 0;
+ 		*id = id_found;
+ 		*root_closeness = root_closeness_found;
+ 		if (sub_closeness_found>=min_to_be_same_subrhythm)
+ 		{
+ 			// this is a known subrhythm
+ 			*sub_id = sub_id_found;
+ 			*sub_closeness = sub_closeness_found;
+ 		} else
+ 		{
+ 			// add this rhythm as a new subrhythm
+ 			curr = rep_list;
+ 			found = 0;
+ 			while (curr && !found)
+ 			{
+ 				if (curr->id == id_found)
+ 				{
+ 					// i've found the rhythm
+ 					found = 1;
+ 				} else
+ 				{
+ 					curr = curr->next;
+ 				}
+ 			}
+ 
+ 			sub_id_found = add_t_rhythm_memory_element(curr, src_rhythm);
+ 			sub_closeness_found = 1;
+ 			*sub_id = sub_id_found;
+ 			*sub_closeness = sub_closeness_found;
+ 			*new_rhythm = 2;
+ 		}
+ 	} else
+ 	{
+ 		// this is a completely new rhythm!
+ 		// find the last id and representation
+ 		curr = rep_list;
+ 		new_id = 0;
+ 		lastRep = 0;
+ 		while (curr)
+ 		{
+ 			new_id = curr->id;
+ 			lastRep = curr;
+ 			curr = curr->next;
+ 		}	
+ 		// create a new representation with a new id
+ 		new_id++;
+ 		create_rhythm_memory_representation(&newRep, new_id);
+ 		// link the representations
+ 		lastRep->next = newRep;
+ 		// add the rhythm as subrhythm
+ 		sub_id_found = add_t_rhythm_memory_element(newRep, src_rhythm);
+ 		sub_closeness_found = 1;
+ 		*sub_id = sub_id_found;
+ 		*sub_closeness = sub_closeness_found;
+ 		*id = new_id;
+ 		*root_closeness = 1;
+ 		*new_rhythm = 1;
+ 	}
+ 
+ }
+ // return 0 if failed finding the rhythm, 1 if the rhythm was found
+ int rhythm_memory_get_rhythm(t_rhythm_memory_representation *rep_list, // the memory
+ 							  t_rhythm_event *out_rhythm, // a pointer to the returned rhythm
+ 							  // the id of the main rhythm wanted
+ 							  unsigned short int id, 
+ 							  // the sub-id of the sub-rhythm wanted
+ 							  unsigned short int sub_id)
+ {
+ 	// look for this id and subid in memory and return that subrhythm
+ 	t_rhythm_memory_representation *curr;
+ 	t_rhythm_memory_element *curr2;
+ 	curr = rep_list;
+ 	while (curr)
+ 	{
+ 		if (curr->id == id)
+ 		{
+ 			// this is the right main rhythm
+ 			// now look for the correct subid
+ 			curr2 = curr->rhythms;
+ 			while (curr2)
+ 			{
+ 				if (curr2->id == sub_id)
+ 				{
+ 					// i've found the rhythm!
+ 					out_rhythm=curr2->rhythm;
+ 					return 1;
+ 				}
+ 				curr2 = curr2->next;
+ 			}
+ 
+ 		}
+ 
+ 		curr = curr->next;
+ 	}
+ 	// if i am here then i didn't find the rhythm
+ 	return 0;
+ }
+ 
+ 
  // ------------------- themes manipulation functions
  

Index: chords_memory.c
===================================================================
RCS file: /cvsroot/pure-data/externals/frankenstein/chords_memory.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** chords_memory.c	5 Dec 2005 21:05:34 -0000	1.4
--- chords_memory.c	6 Dec 2005 12:08:28 -0000	1.5
***************
*** 126,135 ****
  			kHalfDim7=9,
  			//pland adding 9ths 30.11.05 and beyond
! 			kDomb9=10
! 			kMaj9=11
! 			kDom9=12
! 			kMin9=13
! 			kHalfDim9=14
! 			kMinMaj9=15
  			kDimMaj9=16	
  			} chord_type_t;
--- 126,135 ----
  			kHalfDim7=9,
  			//pland adding 9ths 30.11.05 and beyond
! 			kDomb9=10,
! 			kMaj9=11,
! 			kDom9=12,
! 			kMin9=13,
! 			kHalfDim9=14,
! 			kMinMaj9=15,
  			kDimMaj9=16	
  			} chord_type_t;





More information about the Pd-cvs mailing list