[chuck] Classic scales and note frequencies

Mikael Johansson mikael at johanssons.org
Sun Oct 24 10:42:33 EDT 2004


Just as a little benefit to everyone out there (and mainly because I 
myself grew annoyed), I looked up the frequencies for a welltempered 
scale, hacked out the ChucK commands assigning those frequencies to names 
I could cope with, looked up a list of MANY canonical scales, hacked that 
to a format I liked, and produced a small example ChucK script that will 
play a mandolin tune in any "cultural" melodic context you want. =)

By the way. I WANT arrays. This'd be SO much easier with arrays!

Enjoy:

<<<<<<<< ChucK definitions for "common" note names >>>>>>>>
55.000=>float A0;
110.000=>float A1;
220.000=>float A2;
440.000=>float A3;
880.000=> float A4;
1760.000=>float A5;

58.270 =>float Bb0;
116.541 =>float Bb1;
233.082 =>float Bb2;
466.164 =>float Bb3;
932.328 =>float Bb4;
1864.655=>float Bb5;

61.735 	=>float B0;
123.471=> float B1;
246.942=> float B2;
493.883=> float B3;
987.767=> float B4;
1975.533=>float B5;

65.406 =>float C0;
130.813 =>float C1;
261.626 =>float C2;
523.251 =>float C3;
1046.502 =>float C4;
2093.005=>float C5;

69.296 =>float Db0;
138.591 =>float Db1;
277.183 =>float Db2;
554.365 =>float Db3;
1108.731 =>float Db4;
2217.461=> float Db5;

73.416 =>float D0;
146.832 =>float D1;
293.665 =>float D2;
587.330 =>float D3;
1174.659 =>float D4;
2349.318=> float D5;

77.782 =>float Eb0;
155.563 =>float Eb1;
311.127 =>float Eb2;
622.254 =>float Eb3;
1244.508 =>float Eb4;
2489.016=>float Eb5;

82.407 =>float E0;
164.814 =>float E1;
329.628 =>float E2;
659.255 =>float E3;
1318.510 =>float E4;
2637.020=>float E5;

87.307 =>float F0;
174.614 =>float F1;
349.228 =>float F2;
698.456 =>float F3;
1396.913 =>float F4;
2793.826=>float F5;

92.499 =>float Gb0;
184.997 =>float Gb1;
369.994 =>float Gb2;
739.989 =>float Gb3;
1479.978 =>float Gb4;
2959.955=>float Gb5;

97.999 =>float G0;
195.998 =>float G1;
391.995 =>float G2;
783.991 =>float G3;
1567.982 =>float G4;
3135.963=>float G5;

103.826 =>float Ab0;
207.652 =>float Ab1;
415.305 =>float Ab2;
830.609 =>float Ab3;
1661.219 =>float Ab4;
3322.438=>float Ab5;
<<<<<<<< >>>>>>>>>

<<<<<<<< Commented list of scales >>>>>>>
// Scale references
//             1  2 3 4  5 6  7 8  9 10 11 12 13
// Chromatic   C Db D Eb E F Gb G Ab A  Bb B  C

// Spanish 8 Tone  C Db Eb E F Gb Ab Bb C
// Flamenco        C Db Eb E F G Ab Bb C
// Symmetrical     C Db Eb E Gb G A Bb C
// Diminished      C D Eb F Gb Ab A B C
// Whole Tone      C D E Gb Ab Bb C
// Augmented       C Eb E G Ab B C
// 3 semitone      C Eb Gb A C
// 4 semitone      C E Ab C
// 
// Ultra Locrian   C Db Eb E Gb Ab A C
// Super Locrian   C Db Eb E Gb Ab Bb C                    (Ravel)
// Indian-ish*     C Db Eb E G Ab Bb C
// Locrian         C Db Eb F Gb Ab Bb C
// Phrygian        C Db Eb F G  Ab Bb C 
// Neapolitan Min  C Db Eb F G Ab B C
// Javanese        C Db Eb F G A Bb C
// Neapolitan Maj  C Db Eb F G A B C
// Todi (Indian)   C Db Eb Gb G Ab B C
// Persian         C Db E F Gb Ab B C
// Oriental        C Db E F Gb A Bb C
// Maj.Phryg. (Dom)C Db E F G Ab Bb C                      Spanish/ Jewish
// Double Harmonic C Db E F G Ab B C                       Gypsy/ 
Byzantine/ Charhargah
// Marva (Indian)  C Db E Gb G A B C
// Enigmatic       C Db E Gb Ab Bb B C
// 
// Locrian Natural 2nd  C D Eb F Gb Ab Bb C
// Minor (natural)      C D Eb F G Ab Bb C                 Aeolian/ 
Algerian (oct2)
// Harmonic Minor       C D Eb F G Ab B C                  Mohammedan
// Dorian               C D Eb F G A Bb C
// Melodic Minor (Asc)  C D Eb F G A B C                   Hawaiian
// Hungarian Gypsy      C D Eb Gb G Ab Bb C
// Hungarian Minor      C D Eb Gb G Ab B C                 Algerian (oct1)
// Romanian             C D Eb Gb G A Bb C
// 
// Maj. Locrian         C  D  E  F  Gb Ab Bb C  Arabian
// Hindu                C  D  E  F  G  Ab Bb C  -
// Ethiopian            C  D  E  F  G 	Ab B  C 	
// Mixolydian           C  D  E  F  G  A  Bb C  -
// Major                C  D  E  F  G  A  B  C  Ionian
// Mixolydian Aug.      C  D  E  F  Ab A  Bb C  -
// Harmonic Major       C  D  E  F  Ab A  B  C  -
// Lydian Min.          C  D  E  Gb G  Ab Bb C  -
// Lydian Dominant      C  D  E  Gb G  A  Bb C  Overtone
// Lydian               C  D  E  Gb G  A  B  C  -
// Lydian Aug.          C  D  E  Gb Ab A  Bb C  -
// Leading Whole Tone   C  D  E  Gb Ab Bb B  C  -
// Bluesy R&R*          C  Eb E  F  G  A  Bb C  -
// Hungarian Major      C  Eb E  Gb G  A  Bb C  Lydian sharp2nd
// 
// "pB"                 C  Db Eb Gb Ab C  -
// Balinechuck at lists.cs.princeton.eduse 1           C  Db Eb G  Ab C  "pE"
// Pelog (Balinese)     C  Db Eb G  Bb C  -
// Iwato (Japanese)     C  Db F  Gb Bb C  -
// Japanese 1           C  Db F  G  Ab C  Kumoi
// Hirajoshi (Japanese) C  D  Eb G  Ab C  "pA"
// "pD"                 C  D  Eb G  A  C  -
// Pentatonic Major     C  D  E  G  A  C  Chinese 1/ Mongolian/ "pFCG"
// Egyptian             C  D  F  G  Bb C  -
// Pentatonic Minor     C  Eb F  G  Bb C  -
// Chinese 2            C  E  Gb G  B  C  -

<<<<<<<< ChucK script that, given the notes above, plays a tune in a 
specified scale >>>>>>>
75::ms => dur T;

Mandolin s => Echo e => NRev r => dac;

0.2 => r.mix;
2::T => e.delay;
1 => int m;
0 => int tone;
2 => int octave;
5 => int n_tones;
while(true) {
    if(m%2==0) tone+1 => tone;
    if(m%3==0) tone-2 => tone;
    if(m%5==0) tone+3 => tone;
    if(m%7==0) tone-4 => tone;
    if(m%11==0) tone+5 => tone;
    std.rand2(0,3)+tone => tone;
    while(tone<0) { tone+n_tones => tone; octave-1=>octave; }
    while(tone>=n_tones) {tone-n_tones => tone; octave+1 => octave; }
// Egyptian             C  D  F  G  Bb C  -
    if(tone==0)
      C2 => s.freq;
    if(tone==1)
      D2 => s.freq;
    if(tone==2)
      E2 => s.freq;
    if(tone==3)
      G2 => s.freq;
    if(tone==4)
      A2 => s.freq;
    if(tone==5)
      A2 => s.freq;
    if(tone==6)
      Bb2 => s.freq;
    if(tone==7)
      Bb2 => s.freq;
    m+1 => m;
    1.0 => s.pluck;
    std.rand2f(0.9,1.0)::T => now;
    0.8 => s.pluck;
    std.rand2f(0.9,1.0)::T => now;
    0.9 => s.pluck;
    std.rand2f(0.9,1.0)::T => now;
    0.7 => s.pluck;
    std.rand2f(0.9,1.0)::T => now;
//    5::T => now;
}
<<<<<<< >>>>>>>

-- 
Mikael Johansson                  To see the world in a grain of sand
mikael at johanssons.org              And heaven in a wild flower
http://www.mikael.johanssons.org  To hold infinity in the palm of your hand
http://blog.mikael.johanssons.org   And eternity for an hour



More information about the chuck mailing list