From 84cff02e8cf3b773d2370d8020b8d1f4b95bcda9 Mon Sep 17 00:00:00 2001 From: Davide Morelli Date: Wed, 30 Nov 2005 17:31:33 +0000 Subject: going little further with common functions svn path=/trunk/externals/frankenstein/; revision=4091 --- Makefile | 10 +++--- common.c | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- common.h | 32 +++++++++++++++++--- 3 files changed, 132 insertions(+), 14 deletions(-) diff --git a/Makefile b/Makefile index b294eaf..86a00d2 100755 --- a/Makefile +++ b/Makefile @@ -1,13 +1,13 @@ # customize here ! #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" +#PDPATH="H:\PureData\pd-0.38-3.msw\pd" +PDPATH="C:\Documents and Settings\Davide\Documenti\personali\pd-0.38-3.msw\pd" current: pd_nt distclean -pd_nt: chord_melo.dll chords_memory.dll harmonizer.dll GArhythm.dll ritmo1.dll +pd_nt: chord_melo.dll chords_memory.dll harmonizer.dll GArhythm.dll ritmo1.dll test.dll .SUFFIXES: .dll @@ -22,8 +22,8 @@ PDNTLIB = $(PDNTLDIR)\libc.lib \ $(PDPATH)\bin\pd.lib .c.dll: - cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c $*.c - link /dll /export:$*_setup $*.obj $(PDNTLIB) + cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c common.c $*.c + link /dll /export:$*_setup $*.obj common.obj $(PDNTLIB) diff --git a/common.c b/common.c index 1eb896f..6f82204 100755 --- a/common.c +++ b/common.c @@ -1,21 +1,27 @@ #include "common.h" +#include +#include + +#include "m_pd.h" // to post errors and debug messages + t_duration int2duration(int n) { t_duration dur; - int curr, i, j, ok; + int curr, i, j, ok, currden; curr=0; ok=0; for (i=0; iprevious = 0; + newElement->next = 0; + newElement->voice=voice; + newElement->duration.numerator = res.numerator; + newElement->duration.denominator = res.denominator; + *firstEvent = newElement; +} + +void concatenateBeat(t_rhythm_event *currentEvent, unsigned short int voice, float fduration) +{ + t_duration res; + t_rhythm_event *newElement, *lastElement; + lastElement = currentEvent; + while(lastElement->next) + lastElement = lastElement->next; + // convert from float to duration + res = float2duration(fduration); + // allocate a new element of the list + newElement = (t_rhythm_event *) malloc(sizeof(t_rhythm_event)); + // set the pointers + newElement->previous = lastElement; + newElement->next = 0; + lastElement->next = newElement; + newElement->voice=voice; + newElement->duration.numerator = res.numerator; + newElement->duration.denominator = res.denominator; + +} + +void freeBeats(t_rhythm_event *currentEvent) +{ + t_rhythm_event *prev; + t_rhythm_event *next; + + // go to the first element of the list + while(currentEvent->previous) + currentEvent = currentEvent->previous; + + // now free each element + next=currentEvent->next; + do + { + prev = currentEvent; + next = currentEvent->next; + free(currentEvent); + } while(next); + } \ No newline at end of file diff --git a/common.h b/common.h index 07b15e1..0c50210 100755 --- a/common.h +++ b/common.h @@ -37,13 +37,14 @@ typedef struct _note_event // data structures -typedef struct _rhythm_event +typedef struct t_rhythm_event t_rhythm_event; +struct t_rhythm_event { unsigned short int voice; t_duration duration; - struct t_rhythm_event *previous; // this is a list, link to the previous element - struct t_rhythm_event *next; // this is a list, link to the next element -} t_rhythm_event; + t_rhythm_event *previous; // this is a list, link to the previous element + t_rhythm_event *next; // this is a list, link to the next element +}; // rhythms memory graph @@ -67,10 +68,17 @@ typedef struct _rhythm_memory_node // with a table // simpler and most of all non recursive when searching nodes! #define num_possible_denominators 11 -unsigned short int possible_denominators[] = {1,2,3,4,6,8,12,16,18,24,32}; +static unsigned short int possible_denominators[] = {1,2,3,4,6,8,12,16,18,24,32}; + // functions needed to fill and use the memory table + +// converts from integer to duration: used to know this table index +// what corresponds in terms of duration t_duration int2duration(int n); +// converts from duration to integer: used to know this duration +// what corresponds in terms table index unsigned short int duration2int(t_duration dur); +// tells you how many durations there are int possible_durations(); // manipolation functions @@ -79,3 +87,17 @@ int possible_durations(); // - from data structures to lists of numbers and vice versa // - from a (voice, duration) representation to (voice, start, duration) and viceversa +// converts from float (0-1) to duration. it performs quantization +t_duration float2duration(float fduration); + +// converts from numerator/denominator to a float (0-1) +float duration2float(t_duration duration); + +// set the first beat of a sequence +void setFirstBeat(t_rhythm_event **firstEvent, unsigned short int voice, float fduration); + +//adds a beat at the end of this list +void concatenateBeat(t_rhythm_event *currentEvent, unsigned short int voice, float fduration); + +// used to free the memory allocated by this list +void freeBeats(t_rhythm_event *currentEvent); \ No newline at end of file -- cgit v1.2.1