From ae67336fe2a0184a69662b29607ce48fd01cf52e Mon Sep 17 00:00:00 2001 From: Davide Morelli Date: Thu, 1 Dec 2005 12:09:05 +0000 Subject: going on with functions svn path=/trunk/externals/frankenstein/; revision=4098 --- common.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ common.h | 21 ++++++++++++------- 2 files changed, 84 insertions(+), 7 deletions(-) diff --git a/common.c b/common.c index 6f82204..fb5d3fb 100755 --- a/common.c +++ b/common.c @@ -156,4 +156,74 @@ void freeBeats(t_rhythm_event *currentEvent) free(currentEvent); } while(next); +} + + +// set the first note of a sequence +void setFirstNote(t_note_event **firstEvent, unsigned short int voice, float fduration, t_note note) +{ + t_duration res; + t_note_event *newElement; + // convert from float to duration + res = float2duration(fduration); + // allocate a new element of the list + newElement = malloc(sizeof(t_note_event)); + // set the pointers + newElement->previous = 0; + newElement->next = 0; + newElement->voice=voice; + newElement->note.played = note.played; + newElement->note.chord = note.chord; + newElement->note.diatonic = note.diatonic; + newElement->note.interval = note.interval; + newElement->duration.numerator = res.numerator; + newElement->duration.denominator = res.denominator; + *firstEvent = newElement; +} + +//adds a note at the end of this list +void concatenateNote(t_note_event *currentEvent, unsigned short int voice, float fduration, t_note note) +{ + t_duration res; + t_note_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_note_event)); + // set the pointers + newElement->previous = lastElement; + newElement->next = 0; + lastElement->next = newElement; + newElement->voice=voice; + newElement->note.played = note.played; + newElement->note.chord = note.chord; + newElement->note.diatonic = note.diatonic; + newElement->note.interval = note.interval; + newElement->duration.numerator = res.numerator; + newElement->duration.denominator = res.denominator; + +} + +// used to free the memory allocated by this list +void freeNotes(t_note_event *currentEvent) +{ + t_note_event *prev; + t_note_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 0c50210..4aa6314 100755 --- a/common.h +++ b/common.h @@ -27,11 +27,6 @@ typedef struct _note_event struct t_note_event *next; // this is a list, link to the next element } t_note_event; -// manipolation functions - -// TODO: -// - from data structures to lists of numbers and vice versa -// - from a (voice, rest, duration) representation to (voice, start, duration) and viceversa // --------- rhythm notation @@ -81,7 +76,7 @@ unsigned short int duration2int(t_duration dur); // tells you how many durations there are int possible_durations(); -// manipolation functions +// ----------- rhythm manipolation functions // TODO: // - from data structures to lists of numbers and vice versa @@ -100,4 +95,16 @@ void setFirstBeat(t_rhythm_event **firstEvent, unsigned short int voice, float f 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 +void freeBeats(t_rhythm_event *currentEvent); + +// -------- notes manipulation functions + +// set the first beat of a sequence +void setFirstNote(t_note_event **firstEvent, unsigned short int voice, float fduration, t_note note); + +//adds a beat at the end of this list +void concatenateNote(t_note_event *currentEvent, unsigned short int voice, float fduration, t_note note); + +// used to free the memory allocated by this list +void freeNotes(t_note_event *currentEvent); + -- cgit v1.2.1