aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavide Morelli <morellid@users.sourceforge.net>2006-01-21 02:23:16 +0000
committerDavide Morelli <morellid@users.sourceforge.net>2006-01-21 02:23:16 +0000
commit8bda90bf0ab202a9916ecabbc9372000642c3be7 (patch)
tree8e4b050bb2b524bf4a1d75834d727a36467507c8
parent33c37365934be52da44e8b70f6282a1bdf4b64ce (diff)
added all maxlib chords
svn path=/trunk/externals/frankenstein/; revision=4458
-rwxr-xr-xchords_memory.c68
-rwxr-xr-xcommon.c28
-rwxr-xr-xharmonizer.c71
3 files changed, 151 insertions, 16 deletions
diff --git a/chords_memory.c b/chords_memory.c
index 1905eba..0c3d53a 100755
--- a/chords_memory.c
+++ b/chords_memory.c
@@ -100,7 +100,7 @@ there are plenty of such algos, we must just copy them down.
#include "common.h"
-#define DEBUG 0 // messaggi di debug
+#define DEBUG 1 // messaggi di debug
#define DEBUG_VERBOSE 0 // messaggi di debug
// is this system Little Endian? (thanks to Mathieu Bouchard)
@@ -227,6 +227,7 @@ void chords_memory_chord2string(t_chords_memory *x, char *string, chord_t chord)
}
switch (chord.mode)
{
+ case kUnison: strcat(string, "unison"); break;
case kMaj: strcat(string, "major"); break;
case kMin: strcat(string, "minor"); break;
case kDim: strcat(string, "diminished"); break;
@@ -238,8 +239,71 @@ void chords_memory_chord2string(t_chords_memory *x, char *string, chord_t chord)
case kHalfDim7: strcat(string, "half diminished 7th"); break;
case kDim7: strcat(string, "diminished 7th"); break;
case kMinMaj7: strcat(string, "minor/major 7th"); break;
+
+ case kMaj7s5: strcat(string, "major 7th #5"); break;
+ case kMaj7b5: strcat(string, "major 7th b5"); break;
+ case kDom7s5: strcat(string, "dominant 7th #5"); break;
+ case kDom7b5: strcat(string, "dominant 7th b5"); break;
case kDomb9: strcat(string, "dominant b9"); break;
+ case kMaj9: strcat(string, "major 9th"); break;
+ case kDom9: strcat(string, "dominant 9th"); break;
+ case kMin9: strcat(string, "minor 9th"); break;
+ case kHalfDim9: strcat(string, "half diminished 9th"); break;
+ case kMinMaj9: strcat(string, "minor major 9th"); break;
+ case kDimMaj9: strcat(string, "diminished major 9th");break;
+ case kMaj9b5: strcat(string, "major 9th b5"); break;
+ case kDom9b5: strcat(string, "dominant 9th b5"); break;
+ case kDom9b13: strcat(string, "dominant 9th b13"); break;
+ case kMin9s11: strcat(string, "minor 9th #11"); break;
+ case kmM9b11: strcat(string, "minor/maj 9th b11"); break;
+
+ case kMaj7b9: strcat(string, "major 7th b9"); break;
+ case kMaj7s5b9: strcat(string, "major 7th #5 b9"); break;
+ case kDom7b9: strcat(string, "dominant 7th b9"); break;
+ case kMin7b9: strcat(string, "minor 7th b9"); break;
+ case kMinb9s11: strcat(string, "minor b9 #11"); break;
+ case kHalfDimb9:strcat(string, "half diminished b9"); break;
+ case kDim7b9: strcat(string, "diminished b9"); break;
+ case kMinMajb9: strcat(string, "minor/major b9"); break;
+ case kDimMajb9: strcat(string, "diminished M7 b9"); break;
+
+ case kMaj7s9: strcat(string, "major 7th #9"); break;
+ case kDom7s9: strcat(string, "dominant #9"); break;
+ case kMaj7s11: strcat(string, "major 7th #11"); break;
+ case kMaj9s13: strcat(string, "major 9th #13"); break;
+ case kMs9s11: strcat(string, "major #9 #11"); break;
+ case kHDimb11: strcat(string, "half diminished b11"); break;
+
+ case kMaj11: strcat(string, "major 11th"); break;
+ case kDom11: strcat(string, "dominant 11th"); break;
+ case kMin11: strcat(string, "minor 11th"); break;
+ case kHalfDim11:strcat(string, "half diminished 11th");break;
+ case kDim11: strcat(string, "diminished 11th"); break;
+ case kMinMaj11: strcat(string, "minor/major 11th"); break;
+ case kDimMaj11: strcat(string, "diminished maj 11th"); break;
+
+ case kMaj11b5: strcat(string, "major 11th b5"); break;
+ case kMaj11s5: strcat(string, "major 11th #5"); break;
+ case kMaj11b9: strcat(string, "major 11th b9"); break;
+ case kMaj11s9: strcat(string, "major 11th #9"); break;
+ case kMaj11b13: strcat(string, "major 11th b13"); break;
+ case kMaj11s13: strcat(string, "major 11th #13"); break;
+ case kM11b5b9: strcat(string, "major 11th b5 b9"); break;
+ case kDom11b5: strcat(string, "dominant 11th b5"); break;
+ case kDom11b9: strcat(string, "dominant 11th b9"); break;
+ case kDom11s9: strcat(string, "dominant 11th #9"); break;
+ case kHalfDim11b9:strcat(string, "half dim 11th b9"); break;
+ case kDom7s11: strcat(string, "dominant #11"); break;
+ case kMin7s11: strcat(string, "minor 7th #11"); break;
+
+ case kDom13s11: strcat(string, "dominant 13th #11"); break;
+ case kM7b913: strcat(string, "major 7 b9 13"); break;
+ case kMaj7s13: strcat(string, "major 7th #13"); break;
+ case kM7b9s13: strcat(string, "major 7 b9 #13"); break;
+ case kDom7b13: strcat(string, "dominant 7th b13"); break;
+ case kChrom: strcat(string, "chromatic"); break;
+
}
}
@@ -298,7 +362,7 @@ chord_t chords_memory_string2chord(t_chords_memory *x, char *string)
absnote = from_string_to_abs_tone(substr);
interval = clean_note(absnote - x->fundamental_note);
chord.note = interval;
- chord.mode=from_string_to_type(substr);
+ chord.mode=string2mode(substr);
if (DEBUG)
post("chords_memory_string2chord: chord.note=%i chord.mode=%i",chord.note, chord.mode);
return chord;
diff --git a/common.c b/common.c
index 9f9fc35..5abfd38 100755
--- a/common.c
+++ b/common.c
@@ -837,7 +837,7 @@ abs_note_t from_string_to_abs_tone(const char *substr)
return B;
return C;
}
-
+/*
chord_type_t from_string_to_type(const char *substr)
{
if (strstr(substr, "minor/major 7th"))
@@ -880,7 +880,7 @@ chord_type_t from_string_to_type(const char *substr)
// put shorter names at end of this function!
return C;
}
-
+*/
// find the tonality mode in this string
modes_t from_string_to_mode(const char *substr)
{
@@ -929,6 +929,14 @@ chord_type_t string2mode(const char *substr)
// put shorter names at end of this function!
if (strstr(substr, "unison"))
return kUnison;
+ if (strstr(substr, "major 7 b9 13"))
+ return kM7b913;
+ if (strstr(substr, "major 7th #13"))
+ return kMaj7s13;
+ if (strstr(substr, "major 7 b9 #13"))
+ return kM7b9s13;
+ if (strstr(substr, "dominant 7th b13"))
+ return kDom7b13;
if (strstr(substr, "major 7th #5"))
return kMaj7s5;
if (strstr(substr, "major 7th b5"))
@@ -1025,14 +1033,6 @@ chord_type_t string2mode(const char *substr)
return kMin7s11;
if (strstr(substr, "dominant 13th #11"))
return kDom13s11;
- if (strstr(substr, "major 7 b9 13"))
- return kM7b913;
- if (strstr(substr, "major 7th #13"))
- return kMaj7s13;
- if (strstr(substr, "major 7 b9 #13"))
- return kM7b9s13;
- if (strstr(substr, "dominant 7th b13"))
- return kDom7b13;
if (strstr(substr, "chromatic"))
return kChrom;
if (strstr(substr, "dominant b9"))
@@ -1047,16 +1047,16 @@ chord_type_t string2mode(const char *substr)
return kMinMaj7;
if (strstr(substr, "major 7th"))
return kMaj7;
+ if (strstr(substr, "half diminished 7th"))
+ return kHalfDim7;
+ if (strstr(substr, "diminished 7th"))
+ return kDim7;
if (strstr(substr, "major"))
return kMaj;
if (strstr(substr, "minor 7th"))
return kMin7;
if (strstr(substr, "minor"))
return kMin;
- if (strstr(substr, "half diminished 7th"))
- return kHalfDim7;
- if (strstr(substr, "diminished 7th"))
- return kDim7;
if (strstr(substr, "diminished"))
return kDim;
if (strstr(substr, "augmented"))
diff --git a/harmonizer.c b/harmonizer.c
index 39c74b6..27afb8f 100755
--- a/harmonizer.c
+++ b/harmonizer.c
@@ -111,6 +111,77 @@ void build_possible_notes_table(t_harmonizer *x)
case kHalfDim7: n2=3; n3=6; n4=10;n5=0;break;
case kDim7: n2=3; n3=6; n4=9;n5=0;break;
case kMinMaj7: n2=4; n3=7; n4=11;n5=0;break;
+
+ case kMaj7b9: n2=4; n3=7; n4=11;n5=1;break;
+ case kMaj9: n2=4; n3=7; n4=11;n5=2;break;
+ //case kMinMaj7: n2=4; n3=7; n4=11;n5=3;break;
+ //case kMaj7: n2=4; n3=7; n4=11;n5=4;break;
+ case kDom7s11: n2=4; n3=7; n4=10;n5=6;break;
+ case kDomb9: n2=4; n3=7; n4=10;n5=1;break;
+ case kMaj7s5: n2=4; n3=8; n4=11;n5=0;break;
+ case kMin9: n2=3; n3=7; n4=2;n5=0;break;
+
+ case kDom9: n2=4; n3=7; n4=10;n5=2;break;
+
+ case kM7b9s13: n2=1; n3=10; n4=11;n5=4;break;
+ case kMinMajb9: n2=1; n3=3; n4=11;n5=7;break;
+ case kDimMajb9: n2=3; n3=6; n4=11;n5=1;break;
+
+ case kMinMaj9: n2=3; n3=7; n4=11;n5=2;break;
+ case kHalfDimb9: n2=3; n3=6; n4=1;n5=10;break;
+ case kDim7b9: n2=3; n3=6; n4=1;n5=9;break;
+ case kMaj7s9: n2=3; n3=4; n4=7;n5=11;break;
+ case kDom7s9: n2=3; n3=4; n4=7;n5=10;break;
+ case kMaj11: n2=4; n3=5; n4=7;n5=11;break;
+ case kMaj7b5: n2=4; n3=6; n4=11;n5=0;break;
+ case kMaj7s13: n2=4; n3=7; n4=11;n5=10;break;
+
+ case kUnison: n2=0; n3=0; n4=0;n5=0;break;
+
+
+ case kDom7b5: n2=4; n3=6; n4=10;n5=0;break;
+
+ case kHalfDim9: n2=3; n3=6; n4=10;n5=2;break;
+
+ case kMaj9b5: n2=4; n3=6; n4=11;n5=2;break;
+ case kDom9b5: n2=4; n3=6; n4=10;n5=2;break;
+ case kDom9b13: n2=4; n3=2; n4=8;n5=10;break;
+ case kMin9s11: n2=2; n3=3; n4=6;n5=7;break;
+ case kmM9b11: n2=3; n3=11; n4=2;n5=4;break;
+
+ case kMaj7s5b9: n2=2; n3=4; n4=8;n5=11;break;
+ case kDom7b9: n2=1; n3=4; n4=7;n5=10;break;
+ case kMin7b9: n2=1; n3=3; n4=7;n5=10;break;
+ case kMinb9s11: n2=1; n3=3; n4=7;n5=6;break;
+
+ case kMaj7s11: n2=4; n3=6; n4=7;n5=11;break;
+ case kMs9s11 : n2=3; n3=4; n4=6;n5=7;break;
+ case kHDimb11 : n2=3; n3=6; n4=10;n5=4;break;
+
+ case kDom11 : n2=4; n3=7; n4=10;n5=5;break;
+ case kMin11 : n2=3; n3=7; n4=5;n5=0;break;
+ case kHalfDim11 : n2=3; n3=6; n4=10;n5=5;break;
+ case kDim11 : n2=3; n3=6; n4=9;n5=5;break;
+ case kMinMaj11 : n2=3; n3=7; n4=11;n5=5;break;
+ case kDimMaj11 : n2=3; n3=6; n4=11;n5=5;break;
+ case kMaj11b5 : n2=4; n3=6; n4=5;n5=0;break;
+ case kMaj11s5 : n2=4; n3=5; n4=8;n5=0;break;
+ case kMaj11b9 : n2=4; n3=5; n4=7;n5=1;break;
+ case kMaj11s9 : n2=4; n3=5; n4=7;n5=3;break;
+ case kMaj11b13 : n2=4; n3=5; n4=7;n5=8;break;
+ case kMaj11s13 : n2=4; n3=5; n4=10;n5=11;break;
+ case kM11b5b9 : n2=4; n3=6; n4=1;n5=11;break;
+ case kDom11b5 : n2=4; n3=6; n4=10;n5=5;break;
+ case kDom11b9 : n2=4; n3=5; n4=10;n5=1;break;
+ case kDom11s9 : n2=4; n3=5; n4=10;n5=3;break;
+ case kHalfDim11b9 : n2=3; n3=6; n4=5;n5=1;break;
+ case kMin7s11 : n2=3; n3=7; n4=10;n5=6;break; // is it correct?
+ case kDom13s11 : n2=4; n3=10; n4=6;n5=9;break; // is it correct ?
+ case kM7b913 : n2=4; n3=10; n4=1;n5=9;break;
+ case kMaj9s13 : n2=2; n3=4; n4=11;n5=9;break;
+ case kDom7b13 : n2=4; n3=10; n4=9;n5=7;break;
+ case kChrom : n2=1; n3=2; n4=3;n5=4;break;
+
}
if (DEBUG_VERBOSE)
post("build_possible_notes_table n2=%i n3=%i n4=%i", n2, n3, n4);