Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

musical transposition in javascript

Name: Anonymous 2010-06-10 13:34

I'm trying to make a transposer in JavaScript..
Give it a key and a scale/mode and it will generate it for you
For instance
C Lydian (WWWHWWH) is C D E F# G A B
C Aeolian (WHWWHWW) is C D Eb F G Ab Bb
I cannot for the life of me figure out how to accomplish this.
Thoughts?
>inb4 SICP

Name: Anonymous 2010-06-10 14:49

I've just knocked something up in C to do this. Not well tested.

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int maj[7] = {2,2,1,2,2,2,1};
int min[7] = {2,1,2,2,1,2,2};

char *N = "ABCDEFGABCDEFG";

void printscale(char k, char a, int s[7],char *d) {
    int i;
    char *p = strchr(N,k);
    printf("%s: %c%c",d,k,a);
    for(i=0;i<7;i++) {
        p++;
        switch(a) {
            case 'b': if(s[i]==3) a = ' '; break;
            case ' ': if(s[i]==1) a = 'b'; break;
            case '#': if(s[i]==1) a = ' '; break;
        }
        if(*p=='C'||*p=='F') {
            switch(a) {
                case 'b': a = ' '; break;
                case ' ': a = '#'; break;
                case '#': a = 'b'; p++; break;
            }
        }
        printf(" %c%c",*p,a);
    }
    printf("\n");
}

int main(int argc, char **argv) {
    char k='C',a=' ';

    if(argv[1]) {
        k = argv[1][0];
        if(islower(k))
            k = toupper(k);
        if(!strchr(N,k)) {
            printf("error: invalid key\n");
            return 1;
        }
        a = argv[1][1];
        if(!(a==0||a=='#'||a=='b')) {
            printf("error: invalid key\n");
            return 1;
        } else if(a==0)
            a = ' ';
    }

    printf("key: %c%c\n",k,a);

    printscale(k,a,maj,"major");
    printscale(k,a,min,"minor");

    return 0;
}

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List