[PD-cvs] externals/frankenstein common.c,1.7,1.8 common.h,1.7,1.8

dmorelli morellid at users.sourceforge.net
Mon Dec 5 13:57:41 CET 2005


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

Modified Files:
	common.c common.h 
Log Message:
almost ready with common functions for rhythms

Index: common.h
===================================================================
RCS file: /cvsroot/pure-data/externals/frankenstein/common.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** common.h	4 Dec 2005 02:03:40 -0000	1.7
--- common.h	5 Dec 2005 12:57:39 -0000	1.8
***************
*** 1,2 ****
--- 1,3 ----
+ 
  // here i put common data structures and functions
  
***************
*** 89,103 ****
  	t_rhythm_event *rhythm; // this rhythm
  	t_rhythm_memory_element *next; // next element of the list
  } ;
  // a rhythm in memory, each rhythm is :
- // - a main rhythm
  // - its probability transition table
  // - similar rhythms played
  struct t_rhythm_memory_representation
  {
- 	t_rhythm_memory_element *main_rhythm;
  	t_rhythm_memory_node *transitions;
  	unsigned short int max_weight;
! 	t_rhythm_memory_element *similar_rhythms;
  } ;
  
--- 90,108 ----
  	t_rhythm_event *rhythm; // this rhythm
  	t_rhythm_memory_element *next; // next element of the list
+ 	unsigned short int id; // its sub id
  } ;
  // a rhythm in memory, each rhythm is :
  // - its probability transition table
  // - similar rhythms played
+ // - each one has its main id and each different played rhythm its sub-id
  struct t_rhythm_memory_representation
  {
  	t_rhythm_memory_node *transitions;
  	unsigned short int max_weight;
! 	t_rhythm_memory_element *rhythms;
! 	unsigned short int id; // its main id
! 	unsigned short int last_sub_id; // last sub assigned
! 	// I can express a list of representations with this data structure
! 	t_rhythm_memory_representation *next;
  } ;
  
***************
*** 140,155 ****
  
  // create and initialize this representation, allocate memory for the pointers
! void create_rhythm_memory_representation(t_rhythm_memory_representation **this_rep);
  
  // add a new rhythm in the list of similar rhythms related to one main rhythm
! void add_similar_rhythm(t_rhythm_memory_representation *this_rep, t_rhythm_event *new_rhythm);
  
! // free the array with pointers and lists
! void free_memory_representation(t_rhythm_memory_representation *this_rep);
  
  // compares this rhythm to this representation
  // and tells you how close it is to it
! // TODO !!!!!!!!!!!!!!!!!!
  
  
  // -------- notes manipulation functions
--- 145,180 ----
  
  // create and initialize this representation, allocate memory for the pointers
! // I must pass its id also
! void create_rhythm_memory_representation(t_rhythm_memory_representation **this_rep, unsigned short int id);
! 
! // define a return value to express "rhythm not found in this representation"
! #define INVALID_RHYTHM 65535
  
  // 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
! void free_memory_representations(t_rhythm_memory_representation *this_rep);
  
  // compares this rhythm to this representation
  // and tells you how close it is to it
! // I return values using pointers
! // the unsigned short and the 2 floats should be already allocated
! void find_similar_rhythm_in_memory(t_rhythm_memory_representation *this_rep, 
! 						 t_rhythm_event *src_rhythm, // the src rhythm 
! 						 unsigned short int *sub_id, // the sub-id of the closest sub-rhythm 
! 						 float *root_closeness, // how much this rhythm is close to the root (1=identical, 0=nothing common)
! 						 float *sub_closeness // how much this rhythm is close to the closest sub-rhythm (1=identical, 0=nothing common)
! 						 );
  
+ // same as before but search all available representations
+ void find_rhythm_in_memory(t_rhythm_memory_representation *rep_list, 
+ 						 t_rhythm_event *src_rhythm, // the src rhythm 
+ 						 unsigned short int *id, // the id of the closest rhythm
+ 						 unsigned short int *sub_id, // the sub-id of the closest sub-rhythm 
+ 						 float *root_closeness, // how much this rhythm is close to the root (1=identical, 0=nothing common)
+ 						 float *sub_closeness // how much this rhythm is close to the closest sub-rhythm (1=identical, 0=nothing common)
+ 						 );
  
  // -------- notes manipulation functions

Index: common.c
===================================================================
RCS file: /cvsroot/pure-data/externals/frankenstein/common.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** common.c	4 Dec 2005 02:03:40 -0000	1.7
--- common.c	5 Dec 2005 12:57:38 -0000	1.8
***************
*** 189,193 ****
  
  // initialize this representation, allocates memory for the pointers
! void create_rhythm_memory_representation(t_rhythm_memory_representation **this_rep)
  {
  	int i;
--- 189,193 ----
  
  // initialize this representation, allocates memory for the pointers
! void create_rhythm_memory_representation(t_rhythm_memory_representation **this_rep, unsigned short int id)
  {
  	int i;
***************
*** 203,212 ****
  		(*this_rep)->transitions[i].arcs=0;
  	}
! 	(*this_rep)->main_rhythm = 0;
! 	(*this_rep)->similar_rhythms = 0;
  }
  
  // add a new rhythm in the list of similar thythms related to one main rhythm
! void add_t_rhythm_memory_element(t_rhythm_memory_representation *this_rep, t_rhythm_event *new_rhythm)
  {
  	t_rhythm_memory_element *curr;
--- 203,214 ----
  		(*this_rep)->transitions[i].arcs=0;
  	}
! 	(*this_rep)->rhythms = 0;
! 	// the naming variables
! 	(*this_rep)->id = id; // the main id
! 	(*this_rep)->last_sub_id = 0; // the sub id
  }
  
  // add a new rhythm in the list of similar thythms related to one main rhythm
! unsigned short int add_t_rhythm_memory_element(t_rhythm_memory_representation *this_rep, t_rhythm_event *new_rhythm)
  {
  	t_rhythm_memory_element *curr;
***************
*** 214,218 ****
  	t_rhythm_event *currEvent;
  	t_rhythm_memory_arc *currArc, *newArc, *prevArc;
! 	unsigned short int last;
  	int i, arcFound;
  	// creates a new element of the list of similar rhythms
--- 216,220 ----
  	t_rhythm_event *currEvent;
  	t_rhythm_memory_arc *currArc, *newArc, *prevArc;
! 	unsigned short int last, sub_id;
  	int i, arcFound;
  	// creates a new element of the list of similar rhythms
***************
*** 220,225 ****
  	newElement->rhythm = new_rhythm;
  	newElement->next = 0;
  	// finds the last element and adds itself
! 	curr = this_rep->similar_rhythms;
  	if (curr)
  	{
--- 222,230 ----
  	newElement->rhythm = new_rhythm;
  	newElement->next = 0;
+ 	sub_id = this_rep->last_sub_id;
+ 	newElement->id = sub_id;
+ 	this_rep->last_sub_id++;
  	// finds the last element and adds itself
! 	curr = this_rep->rhythms;
  	if (curr)
  	{
***************
*** 230,234 ****
  	} else
  	{
! 		this_rep->similar_rhythms = newElement;
  	}
  	// now update the transition table..
--- 235,239 ----
  	} else
  	{
! 		this_rep->rhythms = newElement;
  	}
  	// now update the transition table..
***************
*** 288,332 ****
  		currEvent = currEvent->next;
  	}
  }
  
! void free_memory_representation(t_rhythm_memory_representation *this_rep)
  {
  	int i, maxi;
  	t_rhythm_memory_element *currElement, *tmpElement;
  	t_rhythm_memory_arc *currArc, *tmpArc;
! 	// free the main rhythm
! 	if (this_rep->main_rhythm)
  	{
! 		freeBeats(this_rep->main_rhythm->rhythm);
! 		free(this_rep->main_rhythm);
! 	}
  
! 	// free the table
! 	maxi = possible_durations();
! 	for (i=0; i<maxi; i++)
! 	{
! 		currArc = this_rep->transitions[i].arcs;
! 		while (currArc)
  		{
! 			tmpArc = currArc;
! 			currArc = currArc->next_arc;
! 			free(tmpArc);
  		}
  	}
- 	free(this_rep->transitions);
  
! 	// free the list of similar rhythms
! 	currElement = this_rep->similar_rhythms;
! 	while (currElement)
  	{
! 		freeBeats(currElement->rhythm);
! 		tmpElement = currElement;
! 		currElement = currElement->next;
! 		free(tmpElement);
  	}
  
  
  }
  
  // ------------------- themes manipulation functions
  
--- 293,394 ----
  		currEvent = currEvent->next;
  	}
+ 	return sub_id;
  }
  
! // free the list of representations
! void free_memory_representations(t_rhythm_memory_representation *this_rep)
  {
  	int i, maxi;
+ 	t_rhythm_memory_representation *currRep, *oldRep;
  	t_rhythm_memory_element *currElement, *tmpElement;
  	t_rhythm_memory_arc *currArc, *tmpArc;
! 	currRep = this_rep;
! 	while(currRep)
  	{
! 		// free the table
! 		maxi = possible_durations();
! 		for (i=0; i<maxi; i++)
! 		{
! 			currArc = currRep->transitions[i].arcs;
! 			while (currArc)
! 			{
! 				tmpArc = currArc;
! 				currArc = currArc->next_arc;
! 				free(tmpArc);
! 			}
! 		}
! 		free(currRep->transitions);
  
! 		// free the list of similar rhythms
! 		currElement = currRep->rhythms;
! 		while (currElement)
  		{
! 			freeBeats(currElement->rhythm);
! 			tmpElement = currElement;
! 			currElement = currElement->next;
! 			free(tmpElement);
  		}
+ 		oldRep = currRep;
+ 		currRep = currRep->next;
+ 		free(oldRep);
  	}
  
! }
! 
! // compares this rhythm to this representation
! // and tells you how close it is to it
! void find_similar_rhythm_in_memory(t_rhythm_memory_representation *this_rep, 
! 						 t_rhythm_event *src_rhythm, // the src rhythm 
! 						 unsigned short int *sub_id, // the sub-id of the closest sub-rhythm 
! 						 float *root_closeness, // how much this rhythm is close to the root (1=identical, 0=nothing common)
! 						 float *sub_closeness // how much this rhythm is close to the closest sub-rhythm (1=identical, 0=nothing common)
! 						 )
! {
! 	// check that the return values have been allocated
! 	if ((sub_id==0)||(root_closeness==0)||(sub_closeness==0))
  	{
! 		post("error in find_similar_rhythm(): return values not allocated");
! 		return;
  	}
  
+ 	// look the main table for closeness to the main rhythm
+ 
+ 	// TODO
+ 
+ 	// for each rhythm in the list
+ 	// count the number of identical nodes
+ 	// cound thenumber of different nodes
+ 
+ 	// TODO
+ 
+ 	// return the better matching rhythm id
+ 	// and the closeness floats
+ 
+ 	// TODO
+ }
+ 
+ void find_rhythm_in_memory(t_rhythm_memory_representation *rep_list, 
+ 						 t_rhythm_event *src_rhythm, // the src rhythm 
+ 						 unsigned short int *id, // the id of the closest rhythm
+ 						 unsigned short int *sub_id, // the sub-id of the closest sub-rhythm 
+ 						 float *root_closeness, // how much this rhythm is close to the root (1=identical, 0=nothing common)
+ 						 float *sub_closeness // how much this rhythm is close to the closest sub-rhythm (1=identical, 0=nothing common)
+ 						 )
+ {
+ 	// for each element of the rep_list
+ 
+ 	// TODO
+ 
+ 	// invoke find_similar_rhythm_in_memory
+ 
+ 	// TODO
+ 
+ 	// return the cosest representation with its subrhythm and closeness values
+ 	
+ 	// TODO
  
  }
  
+ 
  // ------------------- themes manipulation functions
  





More information about the Pd-cvs mailing list