/* automusicscales.c */ /* Copyright 1990 Thomas E. Janzen All Rights Reserved */ /* ** FACILITY: ** ** AlgoRhythms music improviser on Commodore (TM) Amiga (TM) ** compiled with Lattice (TM) C 5.05 ** ** ABSTRACT: ** ** Algorhythms improvises music over the MIDI serial port. ** ** AUTHORS: Thomas E. Janzen ** ** CREATION DATE: 26-MAR-1990 ** ** MODIFICATION HISTORY: ** DATE NAME DESCRIPTION **-- */ #include "math.h" #define CHROMATIC (1) #define SHORTPENTATONIC (2) #define HIRA (3) #define KUMOI (4) #define KOKIN (5) #define WHOLETONE (6) #define DIATONIC (7) #define HARMONIC (8) #define HUNGARIAN (9) #define DIMINISHED (10) #define LONGPENTATONIC (11) int InstallScale(const int Select, int scale[]) { const int hira[12]= {57,59,60,64,65,69,71,72,76,77,81,83}; /*hira joshi koto*/ const int kumoi[12]= {57,58,62,64,65,69,70,74,76,77,81,83};/*kumoi joshi koto*/ const int kokin[11]= {59,62,64,65,69,71,74,76,77,81,83}; /*kokin joshi koto*/ const int chromatic[12]={0,1,2,3,4,5,6,7,8,9,10,11}; /*chromatic*/ const int lucy[13]={48,50,53,55,58,60,62,65,67,70,72,74,77}; const int Diatonic[7]={0,2,4,5,7,9,11}; const int HarmMinor[7]={0,2,3,5,7,8,11}; const int HungMinor[7]={0,2,3,6,7,8,11}; const int diminished[8]={0,2,3,5,6,8,9,11}; const int pentatonic[5]={0,2,4,7,9}; const int wholetone[6]={0,2,4,6,8,10}; /*whole tone scale*/ register int i; register int oct; switch(Select) { case CHROMATIC: /*chromatic*/ for (oct=0; oct<7; oct++) { for (i=0; i<7; i++) { scale[i+(oct*12)]= chromatic[i]+((oct+2)*12); } } return 84; break; case SHORTPENTATONIC: /*Pentatonic (Lucy) */ for (i=0; i<13; i++) { scale[i] = lucy[i]; } return 13; break; case HIRA: for (i=0; i<12; i++) { scale[i]=hira[i]; } return 12; break; case KUMOI: for (i=0; i<12; i++) { scale[i]=kumoi[i]; } return 12; break; case KOKIN: for (i=0; i<11; i++) { scale[i]=kokin[i]; } return 11; break; case WHOLETONE: /*whole tone*/ for (oct=0; oct<7; oct++) { for (i=0; i<7; i++) { scale[i+(oct*6)]= wholetone[i]+((oct+2)*12); } } return 42; break; case DIATONIC: /*diatonic*/ for (oct=0; oct<7; oct++) { for (i=0; i<7; i++) { scale[i+(oct*7)]= Diatonic[i]+((oct+2)*12); } } return 49; break; case HARMONIC: /* harmonic minor */ for (oct=0; oct<7; oct++) { for (i=0; i<7; i++) { scale[i+(oct*7)]= HarmMinor[i]+((oct+2)*12); } } return 49; break; case HUNGARIAN: /* hungarian minor */ for (oct=0; oct<7; oct++) { for (i=0; i<7; i++) { scale[i+(oct*7)]= HungMinor[i]+((oct+2)*12); } } return 49; break; case DIMINISHED: /*diminished scale */ for (oct=0; oct<7; oct++) { for(i=0; i<8; i++) { scale[i+(oct*8)]= diminished[i]+((oct+2)*12); } } return 56; break; case LONGPENTATONIC: /*long pentatonic scale */ for (oct=0; oct<7; oct++) { for(i=0; i<5; i++) { scale[i+(oct*5)]= pentatonic[i]+((oct+2)*12); } } return 35; break; default: for (i=0; i<13; i++) { scale[i] = lucy[i]; } return 13; break; } } void TransposeScale(const int transpose, int *scale, const int range) { register int i; if (abs(transpose)<12) { for(i=0;i