Update of /cvsroot/pure-data/externals/frankenstein In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11636
Added Files: common.c common.h Log Message: adding shared functions
--- NEW FILE: common.h --- // here i put common data structures and functions
// --------- theme notation
// data structures
typedef struct _note { unsigned short int played; // 0 if is a rest, 1 if played unsigned short int chord; // 0 if is not a chord (strong) note, 1 if it is unsigned short int diatonic; // 0 if is a note not belonging to this tonality int interval; // semitones from prefious note } t_note;
typedef struct _duration { int numerator; // like in music notation: in a 1/4 note the numerator is 1 int denominator; // like in music notation: in a 1/4 note the denominator is 4 } t_duration;
typedef struct _note_event { unsigned short int voice; t_note note; t_duration duration; struct t_note_event *previous; // this is a list, link to the previous element 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
// data structures
typedef struct _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;
// rhythms memory graph
/* // list implementation // this implements a graph that stores the memory of the current rhythm sub-elements // list of links typedef struct _rhythm_memory_arc { float weight; struct t_rhythm_memory_node *to_node; // the target of this link (arc) struct t_rhythm_memory_arc *next_arc; // next link in the list } t_rhythm_memory_arc; // graph node typedef struct _rhythm_memory_node { t_duration duration; struct t_rhythm_memory_arc *arcs; // the list of arcs to other nodes } t_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}; // functions needed to fill and use the memory table t_duration int2duration(int n); unsigned short int duration2int(t_duration dur); int possible_durations();
// manipolation functions
// TODO: // - from data structures to lists of numbers and vice versa // - from a (voice, duration) representation to (voice, start, duration) and viceversa
--- NEW FILE: common.c ---
#include "common.h"
t_duration int2duration(int n) { t_duration dur; int curr, i, j, ok; curr=0; ok=0; for (i=0; i<num_possible_denominators; i++) { for (j=0; j<i; j++) { if (curr==n) { dur.numerator=j; dur.denominator=i; j=i; i=num_possible_denominators; ok=1; } else curr++; } } if (ok) return dur; else { dur.numerator=1; dur.denominator=1; return dur; } }
unsigned short int duration2int(t_duration dur) { unsigned short int curr, i, j; curr=0; for (i=0; i<num_possible_denominators; i++) { for (j=0; j<i; j++) { if ((dur.numerator==j) && (dur.denominator==i)) { return curr; } else curr++; } } return curr+1; }
int possible_durations() { int ris, i; ris = 0; for (i=0; i<num_possible_denominators; i++) { ris += possible_denominators[i]-1; } ris += 1; return ris; }