[PD-cvs] externals/frankenstein Makefile, 1.1, 1.2 common.c, 1.1, 1.2 common.h, 1.1, 1.2
dmorelli
morellid at users.sourceforge.net
Wed Nov 30 18:31:35 CET 2005
Update of /cvsroot/pure-data/externals/frankenstein
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10282
Modified Files:
Makefile common.c common.h
Log Message:
going little further with common functions
Index: Makefile
===================================================================
RCS file: /cvsroot/pure-data/externals/frankenstein/Makefile,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** Makefile 18 Oct 2005 23:10:53 -0000 1.1
--- Makefile 30 Nov 2005 17:31:33 -0000 1.2
***************
*** 2,12 ****
#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"
current: pd_nt distclean
! pd_nt: chord_melo.dll chords_memory.dll harmonizer.dll GArhythm.dll ritmo1.dll
.SUFFIXES: .dll
--- 2,12 ----
#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"
current: pd_nt distclean
! pd_nt: chord_melo.dll chords_memory.dll harmonizer.dll GArhythm.dll ritmo1.dll test.dll
.SUFFIXES: .dll
***************
*** 23,28 ****
.c.dll:
! cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c $*.c
! link /dll /export:$*_setup $*.obj $(PDNTLIB)
--- 23,28 ----
.c.dll:
! cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c common.c $*.c
! link /dll /export:$*_setup $*.obj common.obj $(PDNTLIB)
Index: common.h
===================================================================
RCS file: /cvsroot/pure-data/externals/frankenstein/common.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** common.h 29 Nov 2005 18:04:09 -0000 1.1
--- common.h 30 Nov 2005 17:31:33 -0000 1.2
***************
*** 38,48 ****
// 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
--- 38,49 ----
// data structures
! typedef struct t_rhythm_event t_rhythm_event;
! struct t_rhythm_event
{
unsigned short int voice;
t_duration duration;
! 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
***************
*** 68,75 ****
// 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();
--- 69,83 ----
// simpler and most of all non recursive when searching nodes!
#define num_possible_denominators 11
! 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();
***************
*** 80,81 ****
--- 88,103 ----
// - 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
Index: common.c
===================================================================
RCS file: /cvsroot/pure-data/externals/frankenstein/common.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** common.c 29 Nov 2005 18:04:08 -0000 1.1
--- common.c 30 Nov 2005 17:31:33 -0000 1.2
***************
*** 2,20 ****
#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;
--- 2,26 ----
#include "common.h"
+ #include <math.h>
+ #include <stdlib.h>
+
+ #include "m_pd.h" // to post errors and debug messages
+
t_duration int2duration(int n)
{
t_duration dur;
! int curr, i, j, ok, currden;
curr=0;
ok=0;
for (i=0; i<num_possible_denominators; i++)
{
! currden = possible_denominators[i];
! for (j=0; j<currden; j++)
{
if (curr==n)
{
dur.numerator=j;
! dur.denominator=currden;
! j=currden;
i=num_possible_denominators;
ok=1;
***************
*** 61,63 ****
--- 67,159 ----
ris += 1;
return ris;
+ }
+
+ t_duration float2duration(float fduration)
+ {
+ float minDiff, currfduration, currDiff;
+ int i, maxi;
+ t_duration currDur, bestDur;
+
+ bestDur.numerator=1;
+ bestDur.denominator=1;
+ minDiff = 1;
+ maxi = possible_durations();
+ for (i=0; i<maxi; i++)
+ {
+ // post("i=%i", i);
+ currDur = int2duration(i);
+ // post("currDur=%i/%i", currDur.numerator, currDur.denominator);
+ currfduration = duration2float(currDur);
+ // post("currfduration=%f", currfduration);
+ currDiff = (float) fabs(fduration - currfduration);
+ if (currDiff<=minDiff)
+ {
+ minDiff = currDiff;
+ bestDur = currDur;
+ }
+ }
+ return bestDur;
+ }
+
+ float duration2float(t_duration duration)
+ {
+ return (float) (((float)duration.numerator) / ((float)duration.denominator));
+ }
+
+ void setFirstBeat(t_rhythm_event **firstEvent, unsigned short int voice, float fduration)
+ {
+ t_duration res;
+ t_rhythm_event *newElement;
+ // convert from float to duration
+ res = float2duration(fduration);
+ // allocate a new element of the list
+ newElement = malloc(sizeof(t_rhythm_event));
+ // set the pointers
+ newElement->previous = 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
More information about the Pd-cvs
mailing list