From 8bda90bf0ab202a9916ecabbc9372000642c3be7 Mon Sep 17 00:00:00 2001 From: Davide Morelli Date: Sat, 21 Jan 2006 02:23:16 +0000 Subject: added all maxlib chords svn path=/trunk/externals/frankenstein/; revision=4458 --- chords_memory.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- common.c | 28 +++++++++++------------ harmonizer.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 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); -- cgit v1.2.1