0000: 54 65 6f 72 69 61 2e 6a 73 0a 3d 3d 3d 3d 3d 3d Teoria.js.======
0010: 3d 3d 3d 0a 0a 54 65 6f 72 69 61 2e 6a 73 20 69 ===..Teoria.js i
0020: 73 20 61 20 6c 69 67 68 74 77 65 69 67 68 74 20 s a lightweight
0030: 61 6e 64 20 66 61 73 74 20 4a 61 76 61 53 63 72 and fast JavaScr
0040: 69 70 74 20 6c 69 62 72 61 72 79 0a 66 6f 72 20 ipt library.for
0050: 6d 75 73 69 63 20 74 68 65 6f 72 79 2c 20 62 6f music theory, bo
0060: 74 68 20 4a 61 7a 7a 20 61 6e 64 20 43 6c 61 73 th Jazz and Clas
0070: 73 69 63 61 6c 2e 20 49 74 20 61 69 6d 73 20 61 sical. It aims a
0080: 74 20 70 72 6f 76 69 64 69 6e 67 20 61 6e 20 69 t providing an i
0090: 6e 74 75 69 74 69 76 65 0a 70 72 6f 67 72 61 6d ntuitive.program
00a0: 6d 69 6e 67 20 69 6e 74 65 72 66 61 63 65 20 66 ming interface f
00b0: 6f 72 20 6d 75 73 69 63 20 73 6f 66 74 77 61 72 or music softwar
00c0: 65 20 28 73 75 63 68 20 61 73 20 53 68 65 65 74 e (such as Sheet
00d0: 20 52 65 61 64 65 72 73 2c 0a 53 68 65 65 74 20 Readers,.Sheet
00e0: 57 72 69 74 65 72 73 2c 20 4d 49 44 49 20 50 6c Writers, MIDI Pl
00f0: 61 79 65 72 73 20 65 74 63 2e 29 2e 0a 0a 46 65 ayers etc.)...Fe
0100: 61 74 75 72 65 73 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d atures.---------
0110: 0a 0a 20 2d 20 41 20 6e 6f 74 65 20 6f 62 6a 65 .. - A note obje
0120: 63 74 20 28 60 74 65 6f 72 69 61 2e 4e 6f 74 65 ct (`teoria.Note
0130: 60 29 2c 20 77 68 69 63 68 20 75 6e 64 65 72 73 `), which unders
0140: 74 61 6e 64 73 20 61 6c 74 65 72 61 74 69 6f 6e tands alteration
0150: 73 2c 20 6f 63 74 61 76 65 73 2c 0a 20 6b 65 79 s, octaves,. key
0160: 20 6e 75 6d 62 65 72 2c 20 66 72 65 71 75 65 6e number, frequen
0170: 63 79 20 61 6e 64 20 65 74 63 2e 20 61 6e 64 20 cy and etc. and
0180: 48 65 6c 6d 68 6f 6c 74 7a 20 6e 6f 74 61 74 69 Helmholtz notati
0190: 6f 6e 0a 0a 20 2d 20 41 20 63 68 6f 72 64 20 6f on.. - A chord o
01a0: 62 6a 65 63 74 20 28 60 74 65 6f 72 69 61 2e 43 bject (`teoria.C
01b0: 68 6f 72 64 60 29 2c 20 77 68 69 63 68 20 75 6e hord`), which un
01c0: 64 65 72 73 74 61 6e 64 73 20 65 76 65 72 79 74 derstands everyt
01d0: 68 69 6e 67 0a 20 66 72 6f 6d 20 73 69 6d 70 6c hing. from simpl
01e0: 65 20 6d 61 6a 6f 72 2f 6d 69 6e 6f 72 20 63 68 e major/minor ch
01f0: 6f 72 64 73 20 74 6f 20 61 64 76 61 6e 63 65 64 ords to advanced
0200: 20 4a 61 7a 7a 20 63 68 6f 72 64 73 20 28 41 62 Jazz chords (Ab
0210: 23 35 62 39 2c 20 46 28 23 31 31 29 20 61 6e 64 #5b9, F(#11) and
0220: 20 73 75 63 68 29 0a 0a 20 2d 20 41 20 73 63 61 such).. - A sca
0230: 6c 65 20 6f 62 6a 65 63 74 20 28 60 74 65 6f 72 le object (`teor
0240: 69 61 2e 53 63 61 6c 65 60 29 2c 20 54 68 65 20 ia.Scale`), The
0250: 73 63 61 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 scale object is
0260: 61 20 70 6f 77 65 72 66 75 6c 20 70 72 65 73 65 a powerful prese
0270: 6e 74 61 74 69 6f 6e 20 6f 66 0a 20 61 20 73 63 ntation of. a sc
0280: 61 6c 65 2c 20 77 68 69 63 68 20 73 75 70 70 6f ale, which suppo
0290: 72 74 73 20 71 75 69 74 65 20 61 20 66 65 77 20 rts quite a few
02a0: 68 61 6e 64 79 20 6d 65 74 68 6f 64 73 2e 20 41 handy methods. A
02b0: 20 73 63 61 6c 65 20 63 61 6e 20 65 69 74 68 65 scale can eithe
02c0: 72 20 62 65 0a 20 63 6f 6e 73 74 72 75 63 74 65 r be. constructe
02d0: 64 20 66 72 6f 6d 20 74 68 65 20 70 72 65 64 65 d from the prede
02e0: 66 69 6e 65 64 20 73 63 61 6c 65 73 2c 20 77 68 fined scales, wh
02f0: 69 63 68 20 62 79 20 64 65 66 61 75 6c 74 20 63 ich by default c
0300: 6f 6e 74 61 69 6e 73 20 74 68 65 20 37 20 6d 6f ontains the 7 mo
0310: 64 65 73 0a 20 28 49 6f 6e 69 61 6e 2c 20 44 6f des. (Ionian, Do
0320: 72 69 61 6e 2c 20 50 68 72 79 67 69 61 6e 20 65 rian, Phrygian e
0330: 74 63 2e 29 20 61 20 6d 61 6a 6f 72 20 61 6e 64 tc.) a major and
0340: 20 6d 69 6e 6f 72 20 70 65 6e 74 61 74 6f 6e 69 minor pentatoni
0350: 63 20 61 6e 64 20 74 68 65 20 68 61 72 6d 6f 6e c and the harmon
0360: 69 63 0a 20 63 68 72 6f 6d 61 74 69 63 20 73 63 ic. chromatic sc
0370: 61 6c 65 20 6f 72 20 66 72 6f 6d 20 61 6e 20 61 ale or from an a
0380: 72 62 69 74 72 61 72 79 20 61 72 72 61 79 20 6f rbitrary array o
0390: 66 20 69 6e 74 65 72 76 61 6c 73 2e 20 54 68 65 f intervals. The
03a0: 20 73 63 61 6c 65 20 6f 62 6a 65 63 74 0a 20 61 scale object. a
03b0: 6c 73 6f 20 73 75 70 70 6f 72 74 73 20 73 6f 6c lso supports sol
03c0: 66 c3 a8 67 65 2c 20 77 68 69 63 68 20 6d 61 6b f..ge, which mak
03d0: 65 73 20 69 74 20 70 65 72 66 65 63 74 20 66 6f es it perfect fo
03e0: 72 20 74 75 74 6f 72 69 61 6c 73 20 6f 6e 20 73 r tutorials on s
03f0: 69 67 68 74 2d 72 65 61 64 69 6e 67 2e 0a 0a 20 ight-reading...
0400: 2d 20 41 6e 20 69 6e 74 65 72 76 61 6c 20 6f 62 - An interval ob
0410: 6a 65 63 74 20 28 60 74 65 6f 72 69 61 2e 49 6e ject (`teoria.In
0420: 74 65 72 76 61 6c 60 29 2c 20 77 68 69 63 68 20 terval`), which
0430: 6d 61 6b 65 73 20 69 74 20 65 61 73 79 20 74 6f makes it easy to
0440: 20 66 69 6e 64 20 74 68 65 0a 20 69 6e 74 65 72 find the. inter
0450: 76 61 6c 20 62 65 74 77 65 65 6e 20 74 77 6f 20 val between two
0460: 6e 6f 74 65 73 2c 20 6f 72 20 66 69 6e 64 20 61 notes, or find a
0470: 20 6e 6f 74 65 20 74 68 61 74 20 69 73 20 61 20 note that is a
0480: 67 69 76 65 6e 20 69 6e 74 65 72 76 61 6c 20 66 given interval f
0490: 72 6f 6d 20 61 20 6e 6f 74 65 2e 0a 20 54 68 65 rom a note.. The
04a0: 72 65 27 73 20 61 6c 73 6f 20 73 75 70 70 6f 72 re's also suppor
04b0: 74 20 66 6f 72 20 63 6f 75 6e 74 69 6e 67 20 74 t for counting t
04c0: 68 65 20 69 6e 74 65 72 76 61 6c 20 73 70 61 6e he interval span
04d0: 20 69 6e 20 73 65 6d 69 74 6f 6e 65 73 20 61 6e in semitones an
04e0: 64 20 69 6e 76 65 72 74 69 6e 67 20 74 68 65 0a d inverting the.
04f0: 20 69 6e 74 65 72 76 61 6c 2e 0a 0a 55 73 61 67 interval...Usag
0500: 65 0a 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 20 20 20 20 e.--------..
0510: 24 20 6e 70 6d 20 69 6e 73 74 61 6c 6c 20 74 65 $ npm install te
0520: 6f 72 69 61 0a 0a 43 61 6e 20 62 65 20 75 73 65 oria..Can be use
0530: 64 20 77 69 74 68 20 62 6f 74 68 20 4e 6f 64 65 d with both Node
0540: 20 61 6e 64 20 42 72 6f 77 73 65 72 69 66 79 2f and Browserify/
0550: 77 65 62 70 61 63 6b 2f 65 74 63 2e 0a 0a 23 23 webpack/etc...##
0560: 23 20 2e 2e 2e 20 6f 72 20 6c 65 73 73 20 70 72 # ... or less pr
0570: 65 66 65 72 61 62 6c 65 0a 0a 49 6e 63 6c 75 64 eferable..Includ
0580: 65 20 74 68 65 20 62 75 6e 64 6c 65 64 20 62 75 e the bundled bu
0590: 69 6c 64 20 66 69 6c 65 2c 20 60 74 65 6f 72 69 ild file, `teori
05a0: 61 2e 6a 73 60 20 66 72 6f 6d 20 74 68 69 73 20 a.js` from this
05b0: 72 65 70 6f 73 69 74 6f 72 79 2c 20 64 69 72 65 repository, dire
05c0: 63 74 6c 79 3a 0a 60 60 60 68 74 6d 6c 0a 3c 73 ctly:.```html.<s
05d0: 63 72 69 70 74 20 73 72 63 3d 22 70 61 74 68 2f cript src="path/
05e0: 74 6f 2f 74 65 6f 72 69 61 2e 6a 73 22 3e 3c 2f to/teoria.js"></
05f0: 73 63 72 69 70 74 3e 0a 60 60 60 0a 53 79 6e 74 script>.```.Synt
0600: 61 78 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 54 68 ax.---------..Th
0610: 69 73 20 69 73 20 6a 75 73 74 20 61 20 73 68 6f is is just a sho
0620: 72 74 20 69 6e 74 72 6f 64 75 63 74 69 6f 6e 20 rt introduction
0630: 74 6f 20 77 68 61 74 20 74 65 6f 72 69 61 2d 63 to what teoria-c
0640: 6f 64 65 20 6c 6f 6f 6b 73 20 6c 69 6b 65 2c 0a ode looks like,.
0650: 66 6f 72 20 61 20 74 65 63 68 6e 69 63 61 6c 20 for a technical
0660: 6c 69 62 72 61 72 79 20 72 65 66 65 72 65 6e 63 library referenc
0670: 65 2c 20 6c 6f 6f 6b 20 66 75 72 74 68 65 72 20 e, look further
0680: 64 6f 77 6e 20 74 68 69 73 20 64 6f 63 75 6d 65 down this docume
0690: 6e 74 2e 0a 0a 60 60 60 6a 61 76 61 73 63 72 69 nt...```javascri
06a0: 70 74 0a 0a 2f 2f 20 43 72 65 61 74 65 20 6e 6f pt..// Create no
06b0: 74 65 73 3a 0a 76 61 72 20 61 34 20 3d 20 74 65 tes:.var a4 = te
06c0: 6f 72 69 61 2e 6e 6f 74 65 28 27 61 34 27 29 3b oria.note('a4');
06d0: 20 20 20 20 20 20 20 2f 2f 20 53 63 69 65 6e 74 // Scient
06e0: 69 66 69 63 20 6e 6f 74 61 74 69 6f 6e 0a 76 61 ific notation.va
06f0: 72 20 67 35 20 3d 20 74 65 6f 72 69 61 2e 6e 6f r g5 = teoria.no
0700: 74 65 28 22 67 27 27 22 29 3b 20 20 20 20 20 20 te("g''");
0710: 2f 2f 20 48 65 6c 6d 68 6f 6c 74 7a 20 6e 6f 74 // Helmholtz not
0720: 61 74 69 6f 6e 0a 76 61 72 20 63 33 20 3d 20 74 ation.var c3 = t
0730: 65 6f 72 69 61 2e 6e 6f 74 65 2e 66 72 6f 6d 4b eoria.note.fromK
0740: 65 79 28 32 38 29 3b 20 2f 2f 20 46 72 6f 6d 20 ey(28); // From
0750: 61 20 70 69 61 6e 6f 20 6b 65 79 20 6e 75 6d 62 a piano key numb
0760: 65 72 0a 0a 2f 2f 20 46 69 6e 64 20 61 6e 64 20 er..// Find and
0770: 63 72 65 61 74 65 20 6e 6f 74 65 73 20 62 61 73 create notes bas
0780: 65 64 20 6f 6e 20 69 6e 74 65 72 76 61 6c 73 0a ed on intervals.
0790: 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 teoria.interval(
07a0: 61 34 2c 20 67 35 29 3b 20 20 20 20 2f 2f 20 52 a4, g5); // R
07b0: 65 74 75 72 6e 73 20 61 20 49 6e 74 65 72 76 61 eturns a Interva
07c0: 6c 20 6f 62 6a 65 63 74 20 72 65 70 72 65 73 65 l object represe
07d0: 6e 74 69 6e 67 20 61 20 6d 69 6e 6f 72 20 73 65 nting a minor se
07e0: 76 65 6e 74 68 0a 74 65 6f 72 69 61 2e 69 6e 74 venth.teoria.int
07f0: 65 72 76 61 6c 28 61 34 2c 20 27 4d 36 27 29 3b erval(a4, 'M6');
0800: 20 20 2f 2f 20 52 65 74 75 72 6e 73 20 61 20 4e // Returns a N
0810: 6f 74 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 ote representing
0820: 20 46 23 35 0a 61 34 2e 69 6e 74 65 72 76 61 6c F#5.a4.interval
0830: 28 27 6d 33 27 29 3b 20 20 20 20 20 20 20 20 20 ('m3');
0840: 20 2f 2f 20 52 65 74 75 72 6e 73 20 61 20 4e 6f // Returns a No
0850: 74 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 te representing
0860: 43 23 34 0a 61 34 2e 69 6e 74 65 72 76 61 6c 28 C#4.a4.interval(
0870: 67 35 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 g5);
0880: 2f 2f 20 52 65 74 75 72 6e 73 20 61 20 49 6e 74 // Returns a Int
0890: 65 72 76 61 6c 20 6f 62 6a 65 63 74 20 72 65 70 erval object rep
08a0: 72 65 73 65 6e 74 69 6e 67 20 61 20 6d 69 6e 6f resenting a mino
08b0: 72 20 73 65 76 65 6e 74 68 0a 61 34 2e 69 6e 74 r seventh.a4.int
08c0: 65 72 76 61 6c 28 74 65 6f 72 69 61 2e 6e 6f 74 erval(teoria.not
08d0: 65 28 27 62 62 35 27 29 29 2e 69 6e 76 65 72 74 e('bb5')).invert
08e0: 28 29 3b 20 2f 2f 20 52 65 74 75 72 6e 73 20 61 (); // Returns a
08f0: 20 49 6e 74 65 72 76 61 6c 20 72 65 70 72 65 73 Interval repres
0900: 65 6e 74 69 6e 67 20 61 20 6d 61 6a 6f 72 20 73 enting a major s
0910: 65 76 65 6e 74 68 0a 0a 2f 2f 20 43 72 65 61 74 eventh..// Creat
0920: 65 20 73 63 61 6c 65 73 2c 20 62 61 73 65 64 20 e scales, based
0930: 6f 6e 20 6e 6f 74 65 73 2e 0a 61 34 2e 73 63 61 on notes..a4.sca
0940: 6c 65 28 27 6d 69 78 6f 6c 79 64 69 61 6e 27 29 le('mixolydian')
0950: 2e 73 69 6d 70 6c 65 28 29 3b 20 20 2f 2f 20 52 .simple(); // R
0960: 65 74 75 72 6e 73 3a 20 5b 22 61 22 2c 20 22 62 eturns: ["a", "b
0970: 22 2c 20 22 63 23 22 2c 20 22 64 22 2c 20 22 65 ", "c#", "d", "e
0980: 22 2c 20 22 66 23 22 2c 20 22 67 22 5d 0a 61 34 ", "f#", "g"].a4
0990: 2e 73 63 61 6c 65 28 27 61 65 6f 6c 69 61 6e 27 .scale('aeolian'
09a0: 29 2e 73 69 6d 70 6c 65 28 29 3b 20 20 20 20 20 ).simple();
09b0: 2f 2f 20 52 65 74 75 72 6e 73 3a 20 5b 22 61 22 // Returns: ["a"
09c0: 2c 20 22 62 22 2c 20 22 63 22 2c 20 22 64 22 2c , "b", "c", "d",
09d0: 20 22 65 22 2c 20 22 66 22 2c 20 22 67 22 5d 0a "e", "f", "g"].
09e0: 67 35 2e 73 63 61 6c 65 28 27 69 6f 6e 69 61 6e g5.scale('ionian
09f0: 27 29 2e 73 69 6d 70 6c 65 28 29 3b 20 20 20 20 ').simple();
0a00: 20 20 2f 2f 20 52 65 74 75 72 6e 73 3a 20 5b 22 // Returns: ["
0a10: 67 22 2c 20 22 61 22 2c 20 22 62 22 2c 20 22 63 g", "a", "b", "c
0a20: 22 2c 20 22 64 22 2c 20 22 65 22 2c 20 22 66 23 ", "d", "e", "f#
0a30: 22 5d 0a 67 35 2e 73 63 61 6c 65 28 27 64 6f 72 "].g5.scale('dor
0a40: 69 61 6e 27 29 3b 20 20 20 20 20 20 20 20 20 20 ian');
0a50: 20 20 20 20 20 2f 2f 20 52 65 74 75 72 6e 73 20 // Returns
0a60: 61 20 53 63 61 6c 65 20 6f 62 6a 65 63 74 0a 0a a Scale object..
0a70: 2f 2f 20 43 72 65 61 74 65 20 63 68 6f 72 64 73 // Create chords
0a80: 20 77 69 74 68 20 74 68 65 20 70 6f 77 65 72 66 with the powerf
0a90: 75 6c 20 63 68 6f 72 64 20 70 61 72 73 65 72 0a ul chord parser.
0aa0: 61 34 2e 63 68 6f 72 64 28 27 73 75 73 32 27 29 a4.chord('sus2')
0ab0: 2e 6e 61 6d 65 3b 20 20 20 20 2f 2f 20 52 65 74 .name; // Ret
0ac0: 75 72 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 urns the name of
0ad0: 20 74 68 65 20 63 68 6f 72 64 3a 20 27 41 73 75 the chord: 'Asu
0ae0: 73 32 27 0a 63 33 2e 63 68 6f 72 64 28 27 6d 27 s2'.c3.chord('m'
0af0: 29 2e 6e 61 6d 65 3b 20 20 20 20 20 20 20 2f 2f ).name; //
0b00: 20 52 65 74 75 72 6e 73 20 27 43 6d 27 0a 74 65 Returns 'Cm'.te
0b10: 6f 72 69 61 2e 63 68 6f 72 64 28 27 41 62 23 35 oria.chord('Ab#5
0b20: 62 39 27 29 3b 20 20 20 2f 2f 20 52 65 74 75 72 b9'); // Retur
0b30: 6e 73 20 61 20 43 68 6f 72 64 20 6f 62 6a 65 63 ns a Chord objec
0b40: 74 2c 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 t, representing
0b50: 61 20 41 62 23 35 62 39 20 63 68 6f 72 64 0a 67 a Ab#5b9 chord.g
0b60: 35 2e 63 68 6f 72 64 28 27 64 69 6d 27 29 3b 20 5.chord('dim');
0b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 74 75 // Retu
0b80: 72 6e 73 20 61 20 43 68 6f 72 64 20 6f 62 6a 65 rns a Chord obje
0b90: 63 74 2c 20 72 65 70 72 65 73 65 6e 74 69 6e 67 ct, representing
0ba0: 20 61 20 47 64 69 6d 20 63 68 6f 72 64 0a 0a 2f a Gdim chord../
0bb0: 2f 20 43 61 6c 63 75 6c 61 74 65 20 6e 6f 74 65 / Calculate note
0bc0: 20 66 72 65 71 75 65 6e 63 69 65 73 20 6f 72 20 frequencies or
0bd0: 66 69 6e 64 20 74 68 65 20 6e 6f 74 65 20 63 6f find the note co
0be0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 61 rresponding to a
0bf0: 20 66 72 65 71 75 65 6e 63 79 0a 74 65 6f 72 69 frequency.teori
0c00: 61 2e 6e 6f 74 65 2e 66 72 6f 6d 46 72 65 71 75 a.note.fromFrequ
0c10: 65 6e 63 79 28 34 36 37 29 3b 20 2f 2f 20 52 65 ency(467); // Re
0c20: 74 75 72 6e 73 3a 20 7b 27 6e 6f 74 65 27 3a 7b turns: {'note':{
0c30: 2e 2e 2e 7d 2c 27 63 65 6e 74 73 27 3a 33 2e 31 ...},'cents':3.1
0c40: 30 32 38 33 31 7d 20 2d 3e 20 41 34 23 20 61 20 02831} -> A4# a
0c50: 6c 69 74 74 6c 65 20 6f 75 74 20 6f 66 20 74 75 little out of tu
0c60: 6e 65 2e 0a 61 34 2e 66 71 28 29 3b 20 2f 2f 20 ne..a4.fq(); //
0c70: 4f 75 74 70 75 74 73 20 34 34 30 0a 67 35 2e 66 Outputs 440.g5.f
0c80: 71 28 29 3b 20 2f 2f 20 4f 75 74 70 75 74 73 20 q(); // Outputs
0c90: 37 38 33 2e 39 39 30 38 37 31 39 36 33 34 39 38 783.990871963498
0ca0: 35 0a 0a 2f 2f 20 74 65 6f 72 69 61 20 61 6c 6c 5..// teoria all
0cb0: 6f 77 73 20 66 6f 72 20 63 72 61 7a 79 20 63 68 ows for crazy ch
0cc0: 61 69 6e 69 6e 67 3a 0a 74 65 6f 72 69 61 2e 6e aining:.teoria.n
0cd0: 6f 74 65 28 27 61 27 29 20 20 20 20 2f 2f 20 43 ote('a') // C
0ce0: 72 65 61 74 65 20 61 20 6e 6f 74 65 2c 20 41 33 reate a note, A3
0cf0: 0a 20 20 2e 73 63 61 6c 65 28 27 6c 79 64 69 61 . .scale('lydia
0d00: 6e 27 29 20 20 2f 2f 20 43 72 65 61 74 65 20 61 n') // Create a
0d10: 20 6c 79 64 69 61 6e 20 73 63 61 6c 65 20 77 69 lydian scale wi
0d20: 74 68 20 74 68 61 74 20 6e 6f 74 65 20 61 73 20 th that note as
0d30: 72 6f 6f 74 20 28 41 20 6c 79 64 69 61 6e 29 0a root (A lydian).
0d40: 20 20 2e 69 6e 74 65 72 76 61 6c 28 27 4d 32 27 .interval('M2'
0d50: 29 20 20 20 2f 2f 20 54 72 61 6e 73 70 6f 73 65 ) // Transpose
0d60: 20 74 68 65 20 77 68 6f 6c 65 20 73 63 61 6c 65 the whole scale
0d70: 20 61 20 6d 61 6a 6f 72 20 73 65 63 6f 6e 64 20 a major second
0d80: 75 70 20 28 42 20 6c 79 64 69 61 6e 29 0a 20 20 up (B lydian).
0d90: 2e 67 65 74 28 27 74 68 69 72 64 27 29 20 20 20 .get('third')
0da0: 20 20 2f 2f 20 47 65 74 20 74 68 65 20 74 68 69 // Get the thi
0db0: 72 64 20 6e 6f 74 65 20 6f 66 20 74 68 65 20 73 rd note of the s
0dc0: 63 61 6c 65 20 28 44 23 34 29 0a 20 20 2e 63 68 cale (D#4). .ch
0dd0: 6f 72 64 28 27 6d 61 6a 39 27 29 20 20 20 20 2f ord('maj9') /
0de0: 2f 20 43 72 65 61 74 65 20 61 20 6d 61 6a 39 20 / Create a maj9
0df0: 63 68 6f 72 64 20 77 69 74 68 20 74 68 61 74 20 chord with that
0e00: 6e 6f 74 65 20 61 73 20 72 6f 6f 74 20 28 44 23 note as root (D#
0e10: 6d 61 6a 39 29 0a 20 20 2e 74 6f 53 74 72 69 6e maj9). .toStrin
0e20: 67 28 29 3b 20 20 20 20 20 20 2f 2f 20 4d 61 6b g(); // Mak
0e30: 65 20 61 20 73 74 72 69 6e 67 20 72 65 70 72 65 e a string repre
0e40: 73 65 6e 74 61 74 69 6f 6e 3a 20 27 44 23 6d 61 sentation: 'D#ma
0e50: 6a 39 27 0a 60 60 60 0a 0a 44 6f 63 75 6d 65 6e j9'.```..Documen
0e60: 74 61 74 69 6f 6e 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d tation.---------
0e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a ---------------.
0e80: 0a 23 23 20 74 65 6f 72 69 61 2e 6e 6f 74 65 20 .## teoria.note
0e90: 28 6e 61 6d 65 20 7c 20 63 6f 6f 72 64 5b 2c 20 (name | coord[,
0ea0: 64 75 72 61 74 69 6f 6e 5d 29 0a 0a 2a 6e 61 6d duration])..*nam
0eb0: 65 2a 20 2d 20 54 68 65 20 6e 61 6d 65 20 61 72 e* - The name ar
0ec0: 67 75 6d 65 6e 74 20 69 73 20 74 68 65 20 6e 6f gument is the no
0ed0: 74 65 20 6e 61 6d 65 20 61 73 20 61 20 73 74 72 te name as a str
0ee0: 69 6e 67 2e 20 54 68 65 20 6e 6f 74 65 20 63 61 ing. The note ca
0ef0: 6e 20 62 6f 74 68 0a 62 65 20 65 78 70 72 65 73 n both.be expres
0f00: 73 65 64 20 69 6e 20 73 63 69 65 6e 74 69 66 69 sed in scientifi
0f10: 63 20 61 6e 64 20 48 65 6c 6d 68 6f 6c 74 7a 20 c and Helmholtz
0f20: 6e 6f 74 61 74 69 6f 6e 2e 0a 53 6f 6d 65 20 65 notation..Some e
0f30: 78 61 6d 70 6c 65 73 20 6f 66 20 76 61 6c 69 64 xamples of valid
0f40: 20 6e 6f 74 65 20 6e 61 6d 65 73 3a 20 60 45 62 note names: `Eb
0f50: 34 60 2c 20 60 43 23 2c 2c 60 2c 20 60 43 34 60 4`, `C#,,`, `C4`
0f60: 2c 20 60 64 23 27 27 60 2c 20 60 41 62 32 60 0a , `d#''`, `Ab2`.
0f70: 0a 2a 63 6f 6f 72 64 2a 20 2d 20 49 66 20 74 68 .*coord* - If th
0f80: 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 e first argument
0f90: 20 69 73 6e 27 74 20 61 20 73 74 72 69 6e 67 2c isn't a string,
0fa0: 20 62 75 74 20 61 20 63 6f 6f 72 64 20 61 72 72 but a coord arr
0fb0: 61 79 2c 0a 69 74 20 77 69 6c 6c 20 69 6e 73 74 ay,.it will inst
0fc0: 61 6e 74 69 61 74 65 20 61 20 60 4e 6f 74 65 60 antiate a `Note`
0fd0: 20 69 6e 73 74 61 6e 63 65 2e 0a 0a 2a 64 75 72 instance...*dur
0fe0: 61 74 69 6f 6e 2a 20 2d 20 54 68 65 20 64 75 72 ation* - The dur
0ff0: 61 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 69 ation argument i
1000: 73 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 60 6f s an optional `o
1010: 62 6a 65 63 74 60 20 61 72 67 75 6d 65 6e 74 2e bject` argument.
1020: 0a 54 68 65 20 6f 62 6a 65 63 74 20 68 61 73 20 .The object has
1030: 74 77 6f 20 61 6c 73 6f 20 6f 70 74 69 6f 6e 61 two also optiona
1040: 6c 20 70 61 72 61 6d 65 74 65 72 73 3a 0a 0a 20 l parameters:..
1050: 2d 20 60 76 61 6c 75 65 60 20 2d 20 41 20 60 6e - `value` - A `n
1060: 75 6d 62 65 72 60 20 63 6f 72 72 65 73 70 6f 6e umber` correspon
1070: 64 69 6e 67 20 74 6f 20 74 68 65 20 76 61 6c 75 ding to the valu
1080: 65 20 6f 66 20 74 68 65 20 64 75 72 61 74 69 6f e of the duratio
1090: 6e 2c 20 73 75 63 68 20 74 68 61 74 3a 0a 60 31 n, such that:.`1
10a0: 20 3d 20 77 68 6f 6c 65 60 2c 20 60 32 20 3d 20 = whole`, `2 =
10b0: 68 61 6c 66 20 28 6d 69 6e 69 6d 29 60 2c 20 60 half (minim)`, `
10c0: 34 20 3d 20 71 75 61 72 74 65 72 60 2c 20 60 38 4 = quarter`, `8
10d0: 20 3d 20 65 69 67 68 74 60 0a 0a 20 2d 20 60 64 = eight`.. - `d
10e0: 6f 74 73 60 20 2d 20 54 68 65 20 6e 75 6d 62 65 ots` - The numbe
10f0: 72 20 6f 66 20 64 6f 74 73 20 61 74 74 61 63 68 r of dots attach
1100: 65 64 20 74 6f 20 74 68 65 20 6e 6f 74 65 2e 20 ed to the note.
1110: 44 65 66 61 75 6c 74 73 20 74 6f 20 60 30 60 2e Defaults to `0`.
1120: 0a 0a 23 23 23 20 74 65 6f 72 69 61 2e 6e 6f 74 ..### teoria.not
1130: 65 2e 66 72 6f 6d 4b 65 79 28 6b 65 79 29 0a 41 e.fromKey(key).A
1140: 20 73 74 61 74 69 63 20 6d 65 74 68 6f 64 20 74 static method t
1150: 68 61 74 20 72 65 74 75 72 6e 73 20 61 6e 20 69 hat returns an i
1160: 6e 73 74 61 6e 63 65 20 6f 66 20 4e 6f 74 65 20 nstance of Note
1170: 73 65 74 20 74 6f 20 74 68 65 20 6e 6f 74 65 0a set to the note.
1180: 61 74 20 74 68 65 20 67 69 76 65 6e 20 70 69 61 at the given pia
1190: 6e 6f 20 6b 65 79 2c 20 77 68 65 72 65 20 41 30 no key, where A0
11a0: 20 69 73 20 6b 65 79 20 6e 75 6d 62 65 72 20 31 is key number 1
11b0: 2e 0a 53 65 65 20 5b 57 69 6b 69 70 65 64 69 61 ..See [Wikipedia
11c0: 27 73 20 70 69 61 6e 6f 20 6b 65 79 20 61 72 74 's piano key art
11d0: 69 63 6c 65 5d 28 68 74 74 70 3a 2f 2f 65 6e 2e icle](http://en.
11e0: 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 wikipedia.org/wi
11f0: 6b 69 2f 50 69 61 6e 6f 5f 6b 65 79 5f 66 72 65 ki/Piano_key_fre
1200: 71 75 65 6e 63 69 65 73 29 0a 66 6f 72 20 6d 6f quencies).for mo
1210: 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a re information..
1220: 0a 23 23 23 20 74 65 6f 72 69 61 2e 6e 6f 74 65 .### teoria.note
1230: 2e 66 72 6f 6d 46 72 65 71 75 65 6e 63 79 28 66 .fromFrequency(f
1240: 71 29 0a 41 20 73 74 61 74 69 63 20 6d 65 74 68 q).A static meth
1250: 6f 64 20 72 65 74 75 72 6e 73 20 61 6e 20 6f 62 od returns an ob
1260: 6a 65 63 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 ject containing
1270: 74 77 6f 20 65 6c 65 6d 65 6e 74 73 3a 0a 0a 2a two elements:..*
1280: 6e 6f 74 65 2a 20 2d 20 41 20 60 4e 6f 74 65 60 note* - A `Note`
1290: 20 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f 6e which correspon
12a0: 64 73 20 74 6f 20 74 68 65 20 63 6c 6f 73 65 73 ds to the closes
12b0: 74 20 6e 6f 74 65 20 77 69 74 68 20 74 68 65 20 t note with the
12c0: 67 69 76 65 6e 20 66 72 65 71 75 65 6e 63 79 0a given frequency.
12d0: 0a 2a 63 65 6e 74 73 2a 20 2d 20 41 20 6e 75 6d .*cents* - A num
12e0: 62 65 72 20 76 61 6c 75 65 20 6f 66 20 68 6f 77 ber value of how
12f0: 20 6d 61 6e 79 20 63 65 6e 74 73 20 74 68 65 20 many cents the
1300: 6e 6f 74 65 20 69 73 20 6f 75 74 20 6f 66 20 74 note is out of t
1310: 75 6e 65 0a 0a 23 23 23 20 74 65 6f 72 69 61 2e une..### teoria.
1320: 6e 6f 74 65 2e 66 72 6f 6d 4d 49 44 49 28 6e 6f note.fromMIDI(no
1330: 74 65 29 0a 20 2d 20 52 65 74 75 72 6e 73 20 61 te). - Returns a
1340: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 4e 6f n instance of No
1350: 74 65 20 73 65 74 20 74 6f 20 74 68 65 20 63 6f te set to the co
1360: 72 72 65 73 70 6f 6e 64 69 6e 67 20 4d 49 44 49 rresponding MIDI
1370: 20 6e 6f 74 65 20 76 61 6c 75 65 2e 0a 0a 2a 6e note value...*n
1380: 6f 74 65 2a 20 2d 20 41 20 6e 75 6d 62 65 72 20 ote* - A number
1390: 72 61 6e 67 69 6e 67 20 66 72 6f 6d 20 30 2d 31 ranging from 0-1
13a0: 32 37 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 27 representing
13b0: 61 20 4d 49 44 49 20 6e 6f 74 65 20 76 61 6c 75 a MIDI note valu
13c0: 65 0a 0a 23 23 23 20 74 65 6f 72 69 61 2e 6e 6f e..### teoria.no
13d0: 74 65 2e 66 72 6f 6d 53 74 72 69 6e 67 28 6e 6f te.fromString(no
13e0: 74 65 29 0a 20 2d 20 52 65 74 75 72 6e 73 20 61 te). - Returns a
13f0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 4e 6f n instance of No
1400: 74 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 te representing
1410: 74 68 65 20 6e 6f 74 65 20 6e 61 6d 65 0a 0a 2a the note name..*
1420: 6e 6f 74 65 2a 20 2d 20 54 68 65 20 6e 61 6d 65 note* - The name
1430: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 74 68 65 argument is the
1440: 20 6e 6f 74 65 20 6e 61 6d 65 20 61 73 20 61 20 note name as a
1450: 73 74 72 69 6e 67 2e 20 54 68 65 20 6e 6f 74 65 string. The note
1460: 20 63 61 6e 20 62 6f 74 68 0a 62 65 20 65 78 70 can both.be exp
1470: 72 65 73 73 65 64 20 69 6e 20 73 63 69 65 6e 74 ressed in scient
1480: 69 66 69 63 20 61 6e 64 20 48 65 6c 6d 68 6f 6c ific and Helmhol
1490: 74 7a 20 6e 6f 74 61 74 69 6f 6e 2e 0a 53 6f 6d tz notation..Som
14a0: 65 20 65 78 61 6d 70 6c 65 73 20 6f 66 20 76 61 e examples of va
14b0: 6c 69 64 20 6e 6f 74 65 20 6e 61 6d 65 73 3a 20 lid note names:
14c0: 60 45 62 34 60 2c 20 60 43 23 2c 2c 60 2c 20 60 `Eb4`, `C#,,`, `
14d0: 43 34 60 2c 20 60 64 23 27 27 60 2c 20 60 41 62 C4`, `d#''`, `Ab
14e0: 32 60 0a 0a 23 23 23 23 20 4e 6f 74 65 2e 6e 61 2`..#### Note.na
14f0: 6d 65 28 29 0a 20 2d 20 54 68 65 20 6e 61 6d 65 me(). - The name
1500: 20 6f 66 20 74 68 65 20 6e 6f 74 65 2c 20 69 6e of the note, in
1510: 20 6c 6f 77 65 72 63 61 73 65 20 6c 65 74 74 65 lowercase lette
1520: 72 20 28 2a 6f 6e 6c 79 2a 20 74 68 65 20 6e 61 r (*only* the na
1530: 6d 65 2c 20 6e 6f 74 20 74 68 65 0a 20 61 63 63 me, not the. acc
1540: 69 64 65 6e 74 61 6c 20 73 69 67 6e 73 29 0a 0a idental signs)..
1550: 23 23 23 23 20 4e 6f 74 65 2e 6f 63 74 61 76 65 #### Note.octave
1560: 28 29 0a 20 2d 20 54 68 65 20 6e 75 6d 65 72 69 (). - The numeri
1570: 63 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f c value of the o
1580: 63 74 61 76 65 20 6f 66 20 74 68 65 20 6e 6f 74 ctave of the not
1590: 65 0a 0a 23 23 23 23 20 4e 6f 74 65 2e 64 75 72 e..#### Note.dur
15a0: 61 74 69 6f 6e 0a 20 2d 20 54 68 65 20 64 75 72 ation. - The dur
15b0: 61 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61 73 20 ation object as
15c0: 64 65 73 63 72 69 62 65 64 20 69 6e 20 74 68 65 described in the
15d0: 20 63 6f 6e 73 74 72 75 63 74 6f 72 20 66 6f 72 constructor for
15e0: 20 4e 6f 74 65 0a 0a 23 23 23 23 20 4e 6f 74 65 Note..#### Note
15f0: 2e 61 63 63 69 64 65 6e 74 61 6c 28 29 0a 20 2d .accidental(). -
1600: 20 52 65 74 75 72 6e 73 20 74 68 65 20 73 74 72 Returns the str
1610: 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 6f 66 20 ing symbolic of
1620: 74 68 65 20 61 63 63 69 64 65 6e 74 61 6c 20 73 the accidental s
1630: 69 67 6e 20 28 60 78 60 2c 20 60 23 60 2c 20 60 ign (`x`, `#`, `
1640: 62 60 20 6f 72 20 60 62 62 60 29 0a 0a 23 23 23 b` or `bb`)..###
1650: 23 20 4e 6f 74 65 2e 61 63 63 69 64 65 6e 74 61 # Note.accidenta
1660: 6c 56 61 6c 75 65 28 29 0a 20 2d 20 52 65 74 75 lValue(). - Retu
1670: 72 6e 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20 rns the numeric
1680: 76 61 6c 75 65 20 28 6d 6f 73 74 6c 79 20 75 73 value (mostly us
1690: 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 29 20 6f ed internally) o
16a0: 66 20 74 68 65 20 73 69 67 6e 3a 0a 60 78 20 3d f the sign:.`x =
16b0: 20 32 2c 20 23 20 3d 20 31 2c 20 62 20 3d 20 2d 2, # = 1, b = -
16c0: 31 2c 20 62 62 20 3d 20 2d 32 60 0a 0a 23 23 23 1, bb = -2`..###
16d0: 23 20 4e 6f 74 65 23 6b 65 79 28 5b 77 68 69 74 # Note#key([whit
16e0: 65 6e 6f 74 65 73 5d 29 0a 20 2d 20 52 65 74 75 enotes]). - Retu
16f0: 72 6e 73 20 74 68 65 20 70 69 61 6e 6f 20 6b 65 rns the piano ke
1700: 79 20 6e 75 6d 62 65 72 2e 20 45 2e 67 2e 20 41 y number. E.g. A
1710: 34 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 20 34 4 would return 4
1720: 39 0a 0a 2a 77 68 69 74 65 6e 6f 74 65 73 2a 20 9..*whitenotes*
1730: 2d 20 49 66 20 74 68 69 73 20 70 61 72 61 6d 65 - If this parame
1740: 74 65 72 20 69 73 20 73 65 74 20 74 6f 20 60 74 ter is set to `t
1750: 72 75 65 60 20 6f 6e 6c 79 20 74 68 65 20 77 68 rue` only the wh
1760: 69 74 65 20 6b 65 79 73 20 77 69 6c 6c 0a 62 65 ite keys will.be
1770: 20 63 6f 75 6e 74 65 64 20 77 68 65 6e 20 66 69 counted when fi
1780: 6e 64 69 6e 67 20 74 68 65 20 6b 65 79 20 6e 75 nding the key nu
1790: 6d 62 65 72 2e 20 54 68 69 73 20 69 73 20 6d 6f mber. This is mo
17a0: 73 74 6c 79 20 66 6f 72 20 69 6e 74 65 72 6e 61 stly for interna
17b0: 6c 20 75 73 65 2e 0a 0a 23 23 23 23 20 4e 6f 74 l use...#### Not
17c0: 65 23 6d 69 64 69 28 29 0a 20 2d 20 52 65 74 75 e#midi(). - Retu
17d0: 72 6e 73 20 61 20 6e 75 6d 62 65 72 20 72 61 6e rns a number ran
17e0: 67 69 6e 67 20 66 72 6f 6d 20 30 2d 31 32 37 20 ging from 0-127
17f0: 72 65 70 72 65 73 65 6e 74 69 6e 67 20 61 20 4d representing a M
1800: 49 44 49 20 6e 6f 74 65 20 76 61 6c 75 65 0a 0a IDI note value..
1810: 23 23 23 23 20 4e 6f 74 65 23 66 71 28 5b 63 6f #### Note#fq([co
1820: 6e 63 65 72 74 50 69 74 63 68 5d 29 0a 20 2d 20 ncertPitch]). -
1830: 43 61 6c 63 75 6c 61 74 65 73 20 61 6e 64 20 72 Calculates and r
1840: 65 74 75 72 6e 73 20 74 68 65 20 66 72 65 71 75 eturns the frequ
1850: 65 6e 63 79 20 6f 66 20 74 68 65 20 6e 6f 74 65 ency of the note
1860: 2e 0a 0a 2a 63 6f 6e 63 65 72 74 50 69 74 63 68 ...*concertPitch
1870: 2a 20 2d 20 49 66 20 73 75 70 70 6c 69 65 64 20 * - If supplied
1880: 74 68 69 73 20 6e 75 6d 62 65 72 20 77 69 6c 6c this number will
1890: 20 62 65 20 75 73 65 64 20 69 6e 73 74 65 61 64 be used instead
18a0: 20 6f 66 20 74 68 65 20 6e 6f 72 6d 61 6c 0a 63 of the normal.c
18b0: 6f 6e 63 65 72 74 20 70 69 74 63 68 20 77 68 69 oncert pitch whi
18c0: 63 68 20 69 73 20 34 34 30 68 7a 2e 20 54 68 69 ch is 440hz. Thi
18d0: 73 20 69 73 20 75 73 65 66 75 6c 20 66 6f 72 20 s is useful for
18e0: 73 6f 6d 65 20 63 6c 61 73 73 69 63 61 6c 20 6d some classical m
18f0: 75 73 69 63 2e 0a 0a 23 23 23 23 20 4e 6f 74 65 usic...#### Note
1900: 23 63 68 72 6f 6d 61 28 29 0a 20 2d 20 52 65 74 #chroma(). - Ret
1910: 75 72 6e 73 20 74 68 65 20 70 69 74 63 68 20 63 urns the pitch c
1920: 6c 61 73 73 20 28 69 6e 64 65 78 29 20 6f 66 20 lass (index) of
1930: 74 68 65 20 6e 6f 74 65 2e 0a 0a 54 68 69 73 20 the note...This
1940: 61 6c 6c 6f 77 73 20 66 6f 72 20 65 61 73 79 20 allows for easy
1950: 65 6e 68 61 72 6d 6f 6e 69 63 20 63 68 65 63 6b enharmonic check
1960: 69 6e 67 3a 0a 0a 20 20 20 20 74 65 6f 72 69 61 ing:.. teoria
1970: 2e 6e 6f 74 65 28 27 65 27 29 2e 63 68 72 6f 6d .note('e').chrom
1980: 61 28 29 20 3d 3d 3d 20 74 65 6f 72 69 61 2e 6e a() === teoria.n
1990: 6f 74 65 28 27 66 62 27 29 2e 63 68 72 6f 6d 61 ote('fb').chroma
19a0: 28 29 3b 0a 0a 54 68 65 20 63 68 72 6f 6d 61 20 ();..The chroma
19b0: 6e 75 6d 62 65 72 20 69 73 20 72 61 6e 67 69 6e number is rangin
19c0: 67 20 66 72 6f 6d 20 70 69 74 63 68 20 63 6c 61 g from pitch cla
19d0: 73 73 20 43 20 77 68 69 63 68 20 69 73 20 30 20 ss C which is 0
19e0: 74 6f 20 31 31 20 77 68 69 63 68 20 69 73 20 42 to 11 which is B
19f0: 0a 0a 23 23 23 23 20 4e 6f 74 65 23 73 63 61 6c ..#### Note#scal
1a00: 65 28 73 63 61 6c 65 4e 61 6d 65 29 0a 20 2d 20 e(scaleName). -
1a10: 52 65 74 75 72 6e 73 20 61 6e 20 69 6e 73 74 61 Returns an insta
1a20: 6e 63 65 20 6f 66 20 53 63 61 6c 65 2c 20 77 69 nce of Scale, wi
1a30: 74 68 20 74 68 65 20 74 6f 6e 69 63 2f 72 6f 6f th the tonic/roo
1a40: 74 20 73 65 74 20 74 6f 20 74 68 69 73 20 6e 6f t set to this no
1a50: 74 65 2e 0a 0a 2a 73 63 61 6c 65 4e 61 6d 65 2a te...*scaleName*
1a60: 20 2d 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 - The name of t
1a70: 68 65 20 73 63 61 6c 65 20 74 6f 20 62 65 20 72 he scale to be r
1a80: 65 74 75 72 6e 65 64 2e 20 60 27 6d 69 6e 6f 72 eturned. `'minor
1a90: 27 60 2c 0a 60 27 63 68 72 6f 6d 61 74 69 63 27 '`,.`'chromatic'
1aa0: 60 2c 20 60 27 69 6f 6e 69 61 6e 27 60 20 61 6e `, `'ionian'` an
1ab0: 64 20 6f 74 68 65 72 73 20 61 72 65 20 76 61 6c d others are val
1ac0: 69 64 20 73 63 61 6c 65 20 6e 61 6d 65 73 2e 0a id scale names..
1ad0: 0a 23 23 23 23 20 4e 6f 74 65 23 69 6e 74 65 72 .#### Note#inter
1ae0: 76 61 6c 28 69 6e 74 65 72 76 61 6c 29 0a 20 2d val(interval). -
1af0: 20 41 20 73 75 67 61 72 20 66 75 6e 63 74 69 6f A sugar functio
1b00: 6e 20 66 6f 72 20 63 61 6c 6c 69 6e 67 20 74 65 n for calling te
1b10: 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 6e 6f oria.interval(no
1b20: 74 65 2c 20 69 6e 74 65 72 76 61 6c 29 3b 0a 0a te, interval);..
1b30: 4c 6f 6f 6b 20 61 74 20 74 68 65 20 64 6f 63 75 Look at the docu
1b40: 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 60 74 mentation for `t
1b50: 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 60 0a eoria.interval`.
1b60: 0a 23 23 23 23 20 4e 6f 74 65 23 74 72 61 6e 73 .#### Note#trans
1b70: 70 6f 73 65 28 69 6e 74 65 72 76 61 6c 29 0a 20 pose(interval).
1b80: 2d 20 4c 69 6b 65 20 74 68 65 20 60 23 69 6e 74 - Like the `#int
1b90: 65 72 76 61 6c 60 20 6d 65 74 68 6f 64 2c 20 62 erval` method, b
1ba0: 75 74 20 63 68 61 6e 67 65 73 20 60 74 68 69 73 ut changes `this
1bb0: 60 20 6e 6f 74 65 2c 20 69 6e 73 74 65 61 64 20 ` note, instead
1bc0: 6f 66 20 72 65 74 75 72 6e 69 6e 67 20 61 20 6e of returning a n
1bd0: 65 77 0a 0a 23 23 23 23 20 4e 6f 74 65 23 63 68 ew..#### Note#ch
1be0: 6f 72 64 28 5b 6e 61 6d 65 5d 29 0a 20 2d 20 52 ord([name]). - R
1bf0: 65 74 75 72 6e 73 20 61 6e 20 69 6e 73 74 61 6e eturns an instan
1c00: 63 65 20 6f 66 20 43 68 6f 72 64 2c 20 77 69 74 ce of Chord, wit
1c10: 68 20 72 6f 6f 74 20 6e 6f 74 65 20 73 65 74 20 h root note set
1c20: 74 6f 20 74 68 69 73 20 6e 6f 74 65 0a 0a 2a 6e to this note..*n
1c30: 61 6d 65 2a 20 2d 20 54 68 65 20 6e 61 6d 65 20 ame* - The name
1c40: 61 74 74 72 69 62 75 74 65 20 69 73 20 74 68 65 attribute is the
1c50: 20 6c 61 73 74 20 70 61 72 74 20 6f 66 20 74 68 last part of th
1c60: 65 20 63 68 6f 72 64 20 73 79 6d 62 6f 6c 2e 0a e chord symbol..
1c70: 45 78 61 6d 70 6c 65 73 3a 20 60 27 6d 37 27 60 Examples: `'m7'`
1c80: 2c 20 60 27 23 35 62 39 27 60 2c 20 60 27 6d 61 , `'#5b9'`, `'ma
1c90: 6a 6f 72 27 60 2e 20 49 66 20 74 68 65 20 6e 61 jor'`. If the na
1ca0: 6d 65 20 70 61 72 61 6d 65 74 65 72 0a 69 73 6e me parameter.isn
1cb0: 27 74 20 73 65 74 2c 20 61 20 73 74 61 6e 64 61 't set, a standa
1cc0: 72 64 20 6d 61 6a 6f 72 20 63 68 6f 72 64 20 77 rd major chord w
1cd0: 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 2e ill be returned.
1ce0: 0a 0a 23 23 23 23 20 4e 6f 74 65 23 68 65 6c 6d ..#### Note#helm
1cf0: 68 6f 6c 74 7a 28 29 0a 20 2d 20 52 65 74 75 72 holtz(). - Retur
1d00: 6e 73 20 74 68 65 20 6e 6f 74 65 20 6e 61 6d 65 ns the note name
1d10: 20 66 6f 72 6d 61 74 74 65 64 20 69 6e 20 48 65 formatted in He
1d20: 6c 6d 68 6f 6c 74 7a 20 6e 6f 74 61 74 69 6f 6e lmholtz notation
1d30: 2e 0a 0a 45 78 61 6d 70 6c 65 3a 20 60 74 65 6f ...Example: `teo
1d40: 72 69 61 2e 6e 6f 74 65 28 27 41 35 27 29 2e 68 ria.note('A5').h
1d50: 65 6c 6d 68 6f 6c 74 7a 28 29 20 2d 3e 20 22 61 elmholtz() -> "a
1d60: 27 27 22 60 0a 0a 23 23 23 23 20 4e 6f 74 65 23 ''"`..#### Note#
1d70: 73 63 69 65 6e 74 69 66 69 63 28 29 0a 20 2d 20 scientific(). -
1d80: 52 65 74 75 72 6e 73 20 74 68 65 20 6e 6f 74 65 Returns the note
1d90: 20 6e 61 6d 65 20 66 6f 72 6d 61 74 74 65 64 20 name formatted
1da0: 69 6e 20 73 63 69 65 6e 74 69 66 69 63 20 6e 6f in scientific no
1db0: 74 61 74 69 6f 6e 2e 0a 0a 45 78 61 6d 70 6c 65 tation...Example
1dc0: 3a 20 60 74 65 6f 72 69 61 2e 6e 6f 74 65 28 22 : `teoria.note("
1dd0: 61 62 27 22 29 2e 73 63 69 65 6e 74 69 66 69 63 ab'").scientific
1de0: 28 29 20 2d 3e 20 22 41 62 34 22 60 0a 0a 23 23 () -> "Ab4"`..##
1df0: 23 23 20 4e 6f 74 65 23 65 6e 68 61 72 6d 6f 6e ## Note#enharmon
1e00: 69 63 73 28 6f 6e 65 41 63 63 69 64 65 6e 74 61 ics(oneAccidenta
1e10: 6c 29 0a 20 2d 20 52 65 74 75 72 6e 73 20 61 6c l). - Returns al
1e20: 6c 20 6e 6f 74 65 73 20 74 68 61 74 20 61 72 65 l notes that are
1e30: 20 65 6e 68 61 72 6d 6f 6e 69 63 20 77 69 74 68 enharmonic with
1e40: 20 74 68 65 20 6e 6f 74 65 0a 0a 2a 6f 6e 65 41 the note..*oneA
1e50: 63 63 69 64 65 6e 74 61 6c 2a 20 2d 20 42 6f 6f ccidental* - Boo
1e60: 6c 65 61 6e 2c 20 69 66 20 73 65 74 20 74 6f 20 lean, if set to
1e70: 74 72 75 65 2c 20 6f 6e 6c 79 20 65 6e 68 61 72 true, only enhar
1e80: 6d 6f 6e 69 63 20 6e 6f 74 65 73 20 77 69 74 68 monic notes with
1e90: 20 6f 6e 65 0a 61 63 63 69 64 65 6e 74 61 6c 20 one.accidental
1ea0: 69 73 20 72 65 74 75 72 6e 65 64 2e 20 45 2e 67 is returned. E.g
1eb0: 2e 20 72 65 73 75 6c 74 73 20 73 75 63 68 20 61 . results such a
1ec0: 73 20 27 65 62 27 20 61 6e 64 20 27 63 23 27 20 s 'eb' and 'c#'
1ed0: 62 75 74 20 6e 6f 74 20 27 65 62 62 27 20 61 6e but not 'ebb' an
1ee0: 64 20 27 63 78 27 0a 0a 60 60 60 6a 61 76 61 73 d 'cx'..```javas
1ef0: 63 72 69 70 74 0a 74 65 6f 72 69 61 2e 6e 6f 74 cript.teoria.not
1f00: 65 28 27 63 27 29 2e 65 6e 68 61 72 6d 6f 6e 69 e('c').enharmoni
1f10: 63 73 28 29 2e 74 6f 53 74 72 69 6e 67 28 29 3b cs().toString();
1f20: 0a 2f 2f 20 2d 3e 20 27 64 62 62 2c 20 62 23 27 .// -> 'dbb, b#'
1f30: 0a 0a 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 63 ..teoria.note('c
1f40: 27 29 2e 65 6e 68 61 72 6d 6f 6e 69 63 73 28 74 ').enharmonics(t
1f50: 72 75 65 29 2e 74 6f 53 74 72 69 6e 67 28 29 3b rue).toString();
1f60: 0a 2f 2f 20 2d 3e 20 27 62 23 27 0a 60 60 60 0a .// -> 'b#'.```.
1f70: 0a 23 23 23 23 20 4e 6f 74 65 23 64 75 72 61 74 .#### Note#durat
1f80: 69 6f 6e 49 6e 53 65 63 6f 6e 64 73 28 62 70 6d ionInSeconds(bpm
1f90: 2c 20 62 65 61 74 55 6e 69 74 29 0a 20 2d 20 52 , beatUnit). - R
1fa0: 65 74 75 72 6e 73 20 74 68 65 20 64 75 72 61 74 eturns the durat
1fb0: 69 6f 6e 20 6f 66 20 74 68 65 20 6e 6f 74 65 2c ion of the note,
1fc0: 20 67 69 76 65 6e 20 61 20 74 65 6d 70 6f 20 28 given a tempo (
1fd0: 69 6e 20 62 70 6d 29 20 61 6e 64 20 61 20 62 65 in bpm) and a be
1fe0: 61 74 20 75 6e 69 74 0a 20 28 74 68 65 20 6c 6f at unit. (the lo
1ff0: 77 65 72 20 6e 75 6d 65 72 61 6c 20 6f 66 20 74 wer numeral of t
2000: 68 65 20 74 69 6d 65 20 73 69 67 6e 61 74 75 72 he time signatur
2010: 65 29 0a 0a 23 23 23 23 20 4e 6f 74 65 23 73 6f e)..#### Note#so
2020: 6c 66 65 67 65 28 73 63 61 6c 65 2c 20 73 68 6f lfege(scale, sho
2030: 77 4f 63 74 61 76 65 73 29 0a 20 2d 20 52 65 74 wOctaves). - Ret
2040: 75 72 6e 73 20 74 68 65 20 73 6f 6c 66 65 67 65 urns the solfege
2050: 20 73 74 65 70 20 69 6e 20 74 68 65 20 67 69 76 step in the giv
2060: 65 6e 20 73 63 61 6c 65 20 63 6f 6e 74 65 78 74 en scale context
2070: 0a 0a 2a 73 63 61 6c 65 2a 20 2d 20 41 6e 20 69 ..*scale* - An i
2080: 6e 73 74 61 6e 63 65 20 6f 66 20 60 53 63 61 6c nstance of `Scal
2090: 65 60 2c 20 77 68 69 63 68 20 69 73 20 74 68 65 e`, which is the
20a0: 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 20 context of the
20b0: 73 6f 6c 66 65 67 65 20 73 74 65 70 20 6d 65 61 solfege step mea
20c0: 73 75 72 69 6e 67 0a 0a 2a 73 68 6f 77 4f 63 74 suring..*showOct
20d0: 61 76 65 73 2a 20 2d 20 41 20 62 6f 6f 6c 65 61 aves* - A boolea
20e0: 6e 2e 20 49 66 20 73 65 74 20 74 6f 20 74 72 75 n. If set to tru
20f0: 65 2c 20 61 20 22 48 65 6c 6d 68 6f 6c 74 7a 2d e, a "Helmholtz-
2100: 6c 69 6b 65 22 20 6e 6f 74 61 74 69 6f 6e 20 77 like" notation w
2110: 69 6c 6c 20 62 65 0a 75 73 65 64 20 69 66 20 74 ill be.used if t
2120: 68 65 72 65 27 73 20 62 69 67 67 65 72 20 69 6e here's bigger in
2130: 74 65 72 76 61 6c 73 20 74 68 61 6e 20 61 6e 20 tervals than an
2140: 6f 63 74 61 76 65 0a 0a 23 23 23 23 20 4e 6f 74 octave..#### Not
2150: 65 23 64 75 72 61 74 69 6f 6e 4e 61 6d 65 28 29 e#durationName()
2160: 0a 20 2d 20 52 65 74 75 72 6e 73 20 74 68 65 20 . - Returns the
2170: 64 75 72 61 74 69 6f 6e 20 6e 61 6d 65 2e 0a 0a duration name...
2180: 45 78 61 6d 70 6c 65 73 3a 20 60 74 65 6f 72 69 Examples: `teori
2190: 61 2e 6e 6f 74 65 28 27 41 27 2c 20 38 29 2e 64 a.note('A', 8).d
21a0: 75 72 61 74 69 6f 6e 4e 61 6d 65 28 29 20 2d 3e urationName() ->
21b0: 20 27 65 69 67 68 74 68 27 60 2c 0a 60 74 65 6f 'eighth'`,.`teo
21c0: 72 69 61 2e 6e 6f 74 65 28 27 43 27 2c 20 31 36 ria.note('C', 16
21d0: 29 2e 64 75 72 61 74 69 6f 6e 4e 61 6d 65 28 29 ).durationName()
21e0: 20 2d 3e 20 27 73 69 78 74 65 65 6e 74 68 27 60 -> 'sixteenth'`
21f0: 0a 0a 23 23 23 23 20 4e 6f 74 65 23 73 63 61 6c ..#### Note#scal
2200: 65 44 65 67 72 65 65 28 73 63 61 6c 65 29 0a 20 eDegree(scale).
2210: 2d 20 52 65 74 75 72 6e 73 20 74 68 69 73 20 6e - Returns this n
2220: 6f 74 65 27 73 20 64 65 67 72 65 65 20 69 6e 20 ote's degree in
2230: 61 20 67 69 76 65 6e 20 73 63 61 6c 65 20 28 53 a given scale (S
2240: 63 61 6c 65 29 2e 20 46 6f 72 20 65 78 61 6d 70 cale). For examp
2250: 6c 65 20 61 0a 20 60 44 60 20 69 6e 20 61 20 43 le a. `D` in a C
2260: 20 6d 61 6a 6f 72 20 73 63 61 6c 65 20 77 69 6c major scale wil
2270: 6c 20 72 65 74 75 72 6e 20 60 32 60 20 61 73 20 l return `2` as
2280: 69 74 20 69 73 20 74 68 65 20 73 65 63 6f 6e 64 it is the second
2290: 20 64 65 67 72 65 65 20 6f 66 20 74 68 61 74 20 degree of that
22a0: 73 63 61 6c 65 2e 0a 20 49 66 20 68 6f 77 65 76 scale.. If howev
22b0: 65 72 20 74 68 65 20 6e 6f 74 65 20 2a 69 73 6e er the note *isn
22c0: 27 74 2a 20 61 20 70 61 72 74 20 6f 66 20 74 68 't* a part of th
22d0: 65 20 73 63 61 6c 65 2c 20 74 68 65 20 64 65 67 e scale, the deg
22e0: 72 65 65 20 72 65 74 75 72 6e 65 64 20 77 69 6c ree returned wil
22f0: 6c 20 62 65 0a 20 60 30 60 2c 20 6d 65 61 6e 69 l be. `0`, meani
2300: 6e 67 20 74 68 61 74 20 74 68 65 20 64 65 67 72 ng that the degr
2310: 65 65 20 64 6f 65 73 6e 27 74 20 65 78 69 73 74 ee doesn't exist
2320: 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 74 68 . This allows th
2330: 69 73 20 6d 65 74 68 6f 64 20 74 6f 20 62 65 20 is method to be
2340: 62 6f 74 68 0a 20 61 20 73 63 61 6c 65 20 64 65 both. a scale de
2350: 67 72 65 65 20 69 6e 64 65 78 20 66 69 6e 64 65 gree index finde
2360: 72 20 2a 61 6e 64 2a 20 61 6e 20 22 69 73 4e 6f r *and* an "isNo
2370: 74 65 49 6e 53 63 61 6c 65 22 20 6d 65 74 68 6f teInScale" metho
2380: 64 2e 0a 0a 2a 73 63 61 6c 65 2a 20 2d 20 41 6e d...*scale* - An
2390: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 60 53 63 instance of `Sc
23a0: 61 6c 65 60 20 77 68 69 63 68 20 69 73 20 74 68 ale` which is th
23b0: 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 e context of the
23c0: 20 64 65 67 72 65 65 20 6d 65 61 73 75 72 69 6e degree measurin
23d0: 67 0a 0a 23 23 23 23 20 4e 6f 74 65 23 74 6f 53 g..#### Note#toS
23e0: 74 72 69 6e 67 28 5b 64 6f 6e 74 53 68 6f 77 5d tring([dontShow]
23f0: 29 0a 20 2d 20 55 73 61 62 69 6c 69 74 79 20 66 ). - Usability f
2400: 75 6e 63 74 69 6f 6e 20 66 6f 72 20 72 65 74 75 unction for retu
2410: 72 6e 69 6e 67 20 74 68 65 20 6e 6f 74 65 20 61 rning the note a
2420: 73 20 61 20 73 74 72 69 6e 67 0a 0a 2a 64 6f 6e s a string..*don
2430: 74 53 68 6f 77 2a 20 2d 20 49 66 20 73 65 74 20 tShow* - If set
2440: 74 6f 20 60 74 72 75 65 60 20 74 68 65 20 6f 63 to `true` the oc
2450: 74 61 76 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 tave will not be
2460: 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 included in the
2470: 20 72 65 74 75 72 6e 65 64 20 73 74 72 69 6e 67 returned string
2480: 2e 0a 0a 23 23 20 43 68 6f 72 64 28 72 6f 6f 74 ...## Chord(root
2490: 2c 20 63 68 6f 72 64 29 0a 20 2d 20 41 20 63 68 , chord). - A ch
24a0: 6f 72 64 20 63 6c 61 73 73 20 77 69 74 68 20 61 ord class with a
24b0: 20 6c 6f 74 20 6f 66 20 66 75 6e 63 74 69 6f 6e lot of function
24c0: 61 6c 69 74 79 20 74 6f 20 61 6c 74 65 72 20 61 ality to alter a
24d0: 6e 64 20 61 6e 61 6c 79 7a 65 20 74 68 65 20 63 nd analyze the c
24e0: 68 6f 72 64 2e 0a 0a 2a 72 6f 6f 74 2a 20 2d 20 hord...*root* -
24f0: 41 20 60 4e 6f 74 65 60 20 69 6e 73 74 61 6e 63 A `Note` instanc
2500: 65 20 77 68 69 63 68 20 69 73 20 74 6f 20 62 65 e which is to be
2510: 20 74 68 65 20 72 6f 6f 74 20 6f 66 20 74 68 65 the root of the
2520: 20 63 68 6f 72 64 0a 0a 2a 63 68 6f 72 64 2a 20 chord..*chord*
2530: 2d 20 41 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 - A string conta
2540: 69 6e 69 6e 67 20 74 68 65 20 63 68 6f 72 64 20 ining the chord
2550: 73 79 6d 62 6f 6c 2e 20 54 68 69 73 20 63 61 6e symbol. This can
2560: 20 62 65 20 61 6e 79 74 68 69 6e 67 20 66 72 6f be anything fro
2570: 6d 0a 73 69 6d 70 6c 65 20 63 68 6f 72 64 73 2c m.simple chords,
2580: 20 74 6f 20 73 75 70 65 72 2d 61 64 76 61 6e 63 to super-advanc
2590: 65 64 20 6a 61 7a 7a 20 63 68 6f 72 64 73 20 74 ed jazz chords t
25a0: 68 61 6e 6b 73 20 74 6f 20 74 68 65 20 64 65 74 hanks to the det
25b0: 61 69 6c 65 64 20 61 6e 64 0a 72 6f 62 75 73 74 ailed and.robust
25c0: 20 63 68 6f 72 64 20 70 61 72 73 65 72 20 65 6e chord parser en
25d0: 67 69 6e 65 2e 20 45 78 61 6d 70 6c 65 20 76 61 gine. Example va
25e0: 6c 75 65 73 3a 0a 60 27 6d 27 60 2c 20 60 27 6d lues:.`'m'`, `'m
25f0: 37 27 60 2c 20 60 27 23 35 62 39 27 60 2c 20 60 7'`, `'#5b9'`, `
2600: 27 39 73 75 73 34 60 20 61 6e 64 20 60 27 23 31 '9sus4` and `'#1
2610: 31 62 35 23 39 27 60 0a 0a 23 23 23 20 74 65 6f 1b5#9'`..### teo
2620: 72 69 61 2e 63 68 6f 72 64 28 6e 61 6d 65 20 7c ria.chord(name |
2630: 7c 20 6e 6f 74 65 5b 2c 20 6f 63 74 61 76 65 20 | note[, octave
2640: 7c 7c 20 73 79 6d 62 6f 6c 5d 29 0a 20 2d 20 41 || symbol]). - A
2650: 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e simple function
2660: 20 66 6f 72 20 67 65 74 74 69 6e 67 20 74 68 65 for getting the
2670: 20 6e 6f 74 65 73 2c 20 6e 6f 20 6d 61 74 74 65 notes, no matte
2680: 72 20 74 68 65 20 6f 63 74 61 76 65 2c 20 69 6e r the octave, in
2690: 20 61 20 63 68 6f 72 64 0a 0a 2a 6e 61 6d 65 2a a chord..*name*
26a0: 20 2d 20 41 20 73 74 72 69 6e 67 20 63 6f 6e 74 - A string cont
26b0: 61 69 6e 69 6e 67 20 74 68 65 20 66 75 6c 6c 20 aining the full
26c0: 63 68 6f 72 64 20 73 79 6d 62 6f 6c 2c 20 77 69 chord symbol, wi
26d0: 74 68 20 6e 6f 74 65 20 6e 61 6d 65 2e 20 45 78 th note name. Ex
26e0: 61 6d 70 6c 65 73 3a 0a 60 27 41 62 37 27 60 2c amples:.`'Ab7'`,
26f0: 20 60 27 46 23 28 23 31 31 62 35 29 27 60 0a 0a `'F#(#11b5)'`..
2700: 2a 6e 6f 74 65 2a 20 2d 20 49 6e 73 74 65 61 64 *note* - Instead
2710: 20 6f 66 20 73 75 70 70 6c 79 69 6e 67 20 61 20 of supplying a
2720: 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e string containin
2730: 67 20 74 68 65 20 66 75 6c 6c 20 63 68 6f 72 64 g the full chord
2740: 20 73 79 6d 62 6f 6c 2c 0a 6f 6e 65 20 63 61 6e symbol,.one can
2750: 20 70 61 73 73 20 61 20 60 4e 6f 74 65 60 20 6f pass a `Note` o
2760: 62 6a 65 63 74 20 69 6e 73 74 65 61 64 2e 20 54 bject instead. T
2770: 68 65 20 6e 6f 74 65 20 77 69 6c 6c 20 62 65 20 he note will be
2780: 63 6f 6e 73 69 64 65 72 65 64 20 72 6f 6f 74 20 considered root
2790: 69 6e 0a 74 68 65 20 6e 65 77 20 63 68 6f 72 64 in.the new chord
27a0: 20 6f 62 6a 65 63 74 0a 0a 2a 6f 63 74 61 76 65 object..*octave
27b0: 2a 20 2d 20 49 66 20 74 68 65 20 66 69 72 73 74 * - If the first
27c0: 20 61 72 67 75 6d 65 6e 74 20 6f 66 20 74 68 65 argument of the
27d0: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 63 function is a c
27e0: 68 6f 72 64 20 6e 61 6d 65 20 28 60 74 79 70 65 hord name (`type
27f0: 6f 66 20 22 73 74 72 69 6e 67 22 60 29 2c 0a 74 of "string"`),.t
2800: 68 65 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 61 hen the second a
2810: 72 67 75 6d 65 6e 74 20 69 73 20 61 6e 20 6f 70 rgument is an op
2820: 74 69 6f 6e 61 6c 20 6f 63 74 61 76 65 20 6e 75 tional octave nu
2830: 6d 62 65 72 20 28 60 74 79 70 65 6f 66 20 22 6e mber (`typeof "n
2840: 75 6d 62 65 72 22 60 29 20 6f 66 20 74 68 65 20 umber"`) of the
2850: 72 6f 6f 74 2e 0a 0a 2a 73 79 6d 62 6f 6c 2a 20 root...*symbol*
2860: 2d 20 41 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 - A string conta
2870: 69 6e 69 6e 67 20 74 68 65 20 63 68 6f 72 64 20 ining the chord
2880: 73 79 6d 62 6f 6c 20 28 65 78 63 6c 75 64 69 6e symbol (excludin
2890: 67 20 74 68 65 20 6e 6f 74 65 20 6e 61 6d 65 29 g the note name)
28a0: 0a 0a 23 23 23 23 20 43 68 6f 72 64 2e 6e 61 6d ..#### Chord.nam
28b0: 65 0a 20 2d 20 48 6f 6c 64 73 20 74 68 65 20 66 e. - Holds the f
28c0: 75 6c 6c 20 63 68 6f 72 64 20 73 79 6d 62 6f 6c ull chord symbol
28d0: 2c 20 69 6e 63 6c 75 73 69 76 65 20 74 68 65 20 , inclusive the
28e0: 72 6f 6f 74 20 6e 61 6d 65 2e 0a 0a 23 23 23 23 root name...####
28f0: 20 43 68 6f 72 64 2e 72 6f 6f 74 0a 20 2d 20 48 Chord.root. - H
2900: 6f 6c 64 73 20 74 68 65 20 60 4e 6f 74 65 60 20 olds the `Note`
2910: 74 68 61 74 20 69 73 20 74 68 65 20 72 6f 6f 74 that is the root
2920: 20 6f 66 20 74 68 65 20 63 68 6f 72 64 2e 0a 0a of the chord...
2930: 23 23 23 23 20 43 68 6f 72 64 23 6e 6f 74 65 73 #### Chord#notes
2940: 28 29 0a 20 2d 20 52 65 74 75 72 6e 73 20 61 6e (). - Returns an
2950: 20 61 72 72 61 79 20 6f 66 20 60 4e 6f 74 65 60 array of `Note`
2960: 73 20 74 68 61 74 20 74 68 65 20 63 68 6f 72 64 s that the chord
2970: 20 63 6f 6e 73 69 73 74 73 20 6f 66 2e 0a 0a 23 consists of...#
2980: 23 23 23 20 43 68 6f 72 64 23 73 69 6d 70 6c 65 ### Chord#simple
2990: 28 29 0a 20 2d 20 52 65 74 75 72 6e 73 20 61 6e (). - Returns an
29a0: 20 60 41 72 72 61 79 60 20 6f 66 20 6f 6e 6c 79 `Array` of only
29b0: 20 74 68 65 20 6e 6f 74 65 73 27 20 6e 61 6d 65 the notes' name
29c0: 73 2c 20 6e 6f 74 20 74 68 65 20 66 75 6c 6c 20 s, not the full
29d0: 60 4e 6f 74 65 60 20 6f 62 6a 65 63 74 73 2e 0a `Note` objects..
29e0: 0a 23 23 23 23 20 43 68 6f 72 64 23 62 61 73 73 .#### Chord#bass
29f0: 28 29 0a 20 2d 20 52 65 74 75 72 6e 73 20 74 68 (). - Returns th
2a00: 65 20 62 61 73 73 20 6e 6f 74 65 20 6f 66 20 74 e bass note of t
2a10: 68 65 20 63 68 6f 72 64 20 28 54 68 65 20 6e 6f he chord (The no
2a20: 74 65 20 76 6f 69 63 65 64 20 74 68 65 20 6c 6f te voiced the lo
2a30: 77 65 73 74 29 0a 0a 23 23 23 23 20 43 68 6f 72 west)..#### Chor
2a40: 64 23 76 6f 69 63 69 6e 67 28 5b 76 6f 69 63 69 d#voicing([voici
2a50: 6e 67 5d 29 0a 20 2d 20 57 6f 72 6b 73 20 62 6f ng]). - Works bo
2a60: 74 68 20 61 73 20 61 20 73 65 74 74 65 72 20 61 th as a setter a
2a70: 6e 64 20 67 65 74 74 65 72 2e 20 49 66 20 6e 6f nd getter. If no
2a80: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 73 75 parameter is su
2a90: 70 70 6c 69 65 64 20 74 68 65 0a 20 63 75 72 72 pplied the. curr
2aa0: 65 6e 74 20 76 6f 69 63 69 6e 67 20 69 73 20 72 ent voicing is r
2ab0: 65 74 75 72 6e 65 64 20 61 73 20 61 6e 20 61 72 eturned as an ar
2ac0: 72 61 79 20 6f 66 20 60 49 6e 74 65 72 76 61 6c ray of `Interval
2ad0: 60 73 0a 0a 2a 76 6f 69 63 69 6e 67 2a 20 2d 20 `s..*voicing* -
2ae0: 41 6e 20 6f 70 74 69 6f 6e 61 6c 20 61 72 72 61 An optional arra
2af0: 79 20 6f 66 20 69 6e 74 65 72 76 61 6c 73 20 69 y of intervals i
2b00: 6e 20 73 69 6d 70 6c 65 2d 66 6f 72 6d 61 74 0a n simple-format.
2b10: 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 that represents
2b20: 74 68 65 20 63 75 72 72 65 6e 74 20 76 6f 69 63 the current voic
2b30: 69 6e 67 20 6f 66 20 74 68 65 20 63 68 6f 72 64 ing of the chord
2b40: 2e 0a 0a 48 65 72 65 27 73 20 61 6e 20 65 78 61 ...Here's an exa
2b50: 6d 70 6c 65 3a 0a 60 60 60 6a 61 76 61 73 63 72 mple:.```javascr
2b60: 69 70 74 0a 76 61 72 20 62 62 6d 61 6a 20 3d 20 ipt.var bbmaj =
2b70: 74 65 6f 72 69 61 2e 63 68 6f 72 64 28 27 42 62 teoria.chord('Bb
2b80: 6d 61 6a 37 27 29 3b 0a 2f 2f 20 44 65 66 61 75 maj7');.// Defau
2b90: 6c 74 20 76 6f 69 63 69 6e 67 3a 0a 62 62 6d 61 lt voicing:.bbma
2ba0: 6a 2e 76 6f 69 63 69 6e 67 28 29 3b 20 20 2f 2f j.voicing(); //
2bb0: 20 23 2d 3e 20 5b 27 50 31 27 2c 20 27 4d 33 27 #-> ['P1', 'M3'
2bc0: 2c 20 27 50 35 27 2c 20 27 4d 37 27 5d 3b 0a 62 , 'P5', 'M7'];.b
2bd0: 62 6d 61 6a 2e 6e 6f 74 65 73 28 29 3b 20 20 20 bmaj.notes();
2be0: 20 2f 2f 20 23 2d 3e 20 5b 27 62 62 27 2c 20 27 // #-> ['bb', '
2bf0: 64 27 2c 20 27 66 27 2c 20 27 61 27 5d 3b 0a 0a d', 'f', 'a'];..
2c00: 2f 2f 20 4e 65 77 20 76 6f 69 63 69 6e 67 0a 62 // New voicing.b
2c10: 62 6d 61 6a 2e 76 6f 69 63 69 6e 67 28 5b 27 50 bmaj.voicing(['P
2c20: 31 27 2c 20 27 50 35 27 2c 20 27 4d 37 27 2c 20 1', 'P5', 'M7',
2c30: 27 4d 31 30 27 5d 29 3b 0a 62 62 6d 61 6a 2e 6e 'M10']);.bbmaj.n
2c40: 6f 74 65 73 28 29 3b 20 20 20 20 2f 2f 20 23 2d otes(); // #-
2c50: 3e 20 5b 27 62 62 27 2c 20 27 66 27 2c 20 27 61 > ['bb', 'f', 'a
2c60: 27 2c 20 27 64 27 5d 3b 0a 60 60 60 0a 2a 4e 42 ', 'd'];.```.*NB
2c70: 3a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 62 6f :* Note that abo
2c80: 76 65 20 72 65 74 75 72 6e 65 64 20 72 65 73 75 ve returned resu
2c90: 6c 74 73 20 61 72 65 20 70 73 65 75 64 6f 2d 72 lts are pseudo-r
2ca0: 65 73 75 6c 74 73 2c 20 61 73 20 74 68 65 79 20 esults, as they
2cb0: 77 69 6c 6c 20 62 65 0a 72 65 74 75 72 6e 65 64 will be.returned
2cc0: 20 77 72 61 70 70 65 64 20 69 6e 20 60 49 6e 74 wrapped in `Int
2cd0: 65 72 76 61 6c 60 20 61 6e 64 20 60 4e 6f 74 65 erval` and `Note
2ce0: 60 20 6f 62 6a 65 63 74 73 2e 0a 0a 23 23 23 23 ` objects...####
2cf0: 20 43 68 6f 72 64 23 71 75 61 6c 69 74 79 28 29 Chord#quality()
2d00: 0a 20 2d 20 52 65 74 75 72 6e 73 20 61 20 73 74 . - Returns a st
2d10: 72 69 6e 67 20 77 68 69 63 68 20 68 6f 6c 64 73 ring which holds
2d20: 20 74 68 65 20 71 75 61 6c 69 74 79 20 6f 66 20 the quality of
2d30: 74 68 65 20 63 68 6f 72 64 2c 20 60 27 6d 61 6a the chord, `'maj
2d40: 6f 72 27 60 2c 20 60 27 6d 69 6e 6f 72 27 60 2c or'`, `'minor'`,
2d50: 0a 20 60 27 61 75 67 6d 65 6e 74 65 64 27 60 2c . `'augmented'`,
2d60: 20 60 27 64 69 6d 69 6e 69 73 68 65 64 27 60 2c `'diminished'`,
2d70: 20 60 27 68 61 6c 66 2d 64 69 6d 69 6e 69 73 68 `'half-diminish
2d80: 65 64 27 60 2c 20 60 27 64 6f 6d 69 6e 61 6e 74 ed'`, `'dominant
2d90: 27 60 20 6f 72 20 60 75 6e 64 65 66 69 6e 65 64 '` or `undefined
2da0: 60 0a 0a 23 23 23 23 20 43 68 6f 72 64 23 67 65 `..#### Chord#ge
2db0: 74 28 69 6e 74 65 72 76 61 6c 29 0a 20 2d 20 52 t(interval). - R
2dc0: 65 74 75 72 6e 73 20 74 68 65 20 6e 6f 74 65 20 eturns the note
2dd0: 61 74 20 61 20 67 69 76 65 6e 20 69 6e 74 65 72 at a given inter
2de0: 76 61 6c 20 69 6e 20 74 68 65 20 63 68 6f 72 64 val in the chord
2df0: 2c 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a , if it exists..
2e00: 0a 2a 69 6e 74 65 72 76 61 6c 2a 20 2d 20 41 20 .*interval* - A
2e10: 73 74 72 69 6e 67 20 6e 61 6d 65 20 6f 66 20 61 string name of a
2e20: 6e 20 69 6e 74 65 72 76 61 6c 2c 20 66 6f 72 20 n interval, for
2e30: 65 78 61 6d 70 6c 65 20 60 27 74 68 69 72 64 27 example `'third'
2e40: 60 2c 20 60 27 66 69 66 74 68 27 60 2c 20 60 27 `, `'fifth'`, `'
2e50: 6e 69 6e 74 68 27 60 2e 0a 0a 23 23 23 23 20 43 ninth'`...#### C
2e60: 68 6f 72 64 23 64 6f 6d 69 6e 61 6e 74 28 5b 61 hord#dominant([a
2e70: 64 64 69 74 69 6f 6e 61 6c 5d 29 0a 20 2d 20 52 dditional]). - R
2e80: 65 74 75 72 6e 73 20 74 68 65 20 6e 61 c3 af 76 eturns the na..v
2e90: 65 6c 79 20 63 68 6f 73 65 6e 20 64 6f 6d 69 6e ely chosen domin
2ea0: 61 6e 74 20 77 68 69 63 68 20 69 73 20 61 20 70 ant which is a p
2eb0: 65 72 66 65 63 74 20 66 69 66 74 68 20 61 77 61 erfect fifth awa
2ec0: 79 2e 0a 0a 2a 61 64 64 69 74 69 6f 6e 61 6c 2a y...*additional*
2ed0: 20 2d 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 68 - Additional ch
2ee0: 6f 72 64 20 65 78 74 65 6e 73 69 6f 6e 2c 20 66 ord extension, f
2ef0: 6f 72 20 65 78 61 6d 70 6c 65 3a 20 60 27 62 39 or example: `'b9
2f00: 27 60 20 6f 72 20 60 27 23 35 27 60 0a 0a 23 23 '` or `'#5'`..##
2f10: 23 23 20 43 68 6f 72 64 23 73 75 62 64 6f 6d 69 ## Chord#subdomi
2f20: 6e 61 6e 74 28 5b 61 64 64 69 74 69 6f 6e 61 6c nant([additional
2f30: 5d 29 0a 20 2d 20 52 65 74 75 72 6e 73 20 74 68 ]). - Returns th
2f40: 65 20 6e 61 c3 af 76 65 6c 79 20 63 68 6f 73 65 e na..vely chose
2f50: 6e 20 73 75 62 64 6f 6d 69 6e 61 6e 74 20 77 68 n subdominant wh
2f60: 69 63 68 20 69 73 20 61 20 70 65 72 66 65 63 74 ich is a perfect
2f70: 20 66 6f 75 72 74 68 20 61 77 61 79 2e 0a 0a 2a fourth away...*
2f80: 61 64 64 69 74 69 6f 6e 61 6c 2a 20 2d 20 4c 69 additional* - Li
2f90: 6b 65 20 74 68 65 20 64 6f 6d 69 6e 61 6e 74 27 ke the dominant'
2fa0: 73 2e 0a 0a 23 23 23 23 20 43 68 6f 72 64 23 70 s...#### Chord#p
2fb0: 61 72 61 6c 6c 65 6c 28 5b 61 64 64 69 74 69 6f arallel([additio
2fc0: 6e 61 6c 5d 29 0a 20 2d 20 52 65 74 75 72 6e 73 nal]). - Returns
2fd0: 20 74 68 65 20 70 61 72 61 6c 6c 65 6c 20 63 68 the parallel ch
2fe0: 6f 72 64 20 66 6f 72 20 6d 61 6a 6f 72 20 61 6e ord for major an
2ff0: 64 20 6d 69 6e 6f 72 20 74 72 69 61 64 73 0a 0a d minor triads..
3000: 2a 61 64 64 69 74 69 6f 6e 61 6c 2a 20 2d 20 4c *additional* - L
3010: 69 6b 65 20 74 68 65 20 64 6f 6d 69 6e 61 6e 74 ike the dominant
3020: 27 73 0a 0a 23 23 23 23 20 43 68 6f 72 64 23 63 's..#### Chord#c
3030: 68 6f 72 64 54 79 70 65 28 29 0a 20 2d 20 52 65 hordType(). - Re
3040: 74 75 72 6e 73 20 74 68 65 20 74 79 70 65 20 6f turns the type o
3050: 66 20 74 68 65 20 63 68 6f 72 64 3a 20 60 27 64 f the chord: `'d
3060: 79 61 64 27 60 2c 20 60 27 74 72 69 61 64 27 60 yad'`, `'triad'`
3070: 2c 20 60 27 74 72 69 63 68 6f 72 64 27 60 2c 0a , `'trichord'`,.
3080: 20 60 27 74 65 74 72 61 64 27 60 20 6f 72 20 60 `'tetrad'` or `
3090: 27 75 6e 6b 6e 6f 77 6e 27 60 2e 0a 0a 23 23 23 'unknown'`...###
30a0: 23 20 43 68 6f 72 64 23 69 6e 74 65 72 76 61 6c # Chord#interval
30b0: 28 69 6e 74 65 72 76 61 6c 29 0a 20 2d 20 52 65 (interval). - Re
30c0: 74 75 72 6e 73 20 74 68 65 20 73 61 6d 65 20 63 turns the same c
30d0: 68 6f 72 64 2c 20 61 20 60 69 6e 74 65 72 76 61 hord, a `interva
30e0: 6c 60 20 61 77 61 79 0a 0a 23 23 23 23 20 43 68 l` away..#### Ch
30f0: 6f 72 64 23 74 72 61 6e 73 70 6f 73 65 28 69 6e ord#transpose(in
3100: 74 65 72 76 61 6c 29 0a 20 2d 20 4c 69 6b 65 20 terval). - Like
3110: 74 68 65 20 60 23 69 6e 74 65 72 76 61 6c 60 20 the `#interval`
3120: 6d 65 74 68 6f 64 2c 20 65 78 63 65 70 74 20 69 method, except i
3130: 74 27 73 20 60 74 68 69 73 60 20 63 68 6f 72 64 t's `this` chord
3140: 20 74 68 61 74 20 67 65 74 73 20 63 68 61 6e 67 that gets chang
3150: 65 64 20 69 6e 73 74 65 61 64 20 6f 66 0a 20 72 ed instead of. r
3160: 65 74 75 72 6e 69 6e 67 20 61 20 6e 65 77 20 63 eturning a new c
3170: 68 6f 72 64 2e 0a 0a 23 23 23 23 20 43 68 6f 72 hord...#### Chor
3180: 64 23 74 6f 53 74 72 69 6e 67 28 29 0a 20 2d 20 d#toString(). -
3190: 53 69 6d 70 6c 65 20 75 73 61 62 69 6c 69 74 79 Simple usability
31a0: 20 66 75 6e 63 74 69 6f 6e 20 77 68 69 63 68 20 function which
31b0: 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 is an alias for
31c0: 43 68 6f 72 64 2e 6e 61 6d 65 0a 0a 0a 23 23 20 Chord.name...##
31d0: 53 63 61 6c 65 28 74 6f 6e 69 63 2c 20 73 63 61 Scale(tonic, sca
31e0: 6c 65 29 0a 20 2d 20 54 68 65 20 74 65 6f 72 69 le). - The teori
31f0: 61 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e a representation
3200: 20 6f 66 20 61 20 73 63 61 6c 65 2c 20 77 69 74 of a scale, wit
3210: 68 20 61 20 67 69 76 65 6e 20 74 6f 6e 69 63 2e h a given tonic.
3220: 0a 0a 2a 74 6f 6e 69 63 2a 20 2d 20 41 20 60 4e ..*tonic* - A `N
3230: 6f 74 65 60 20 77 68 69 63 68 20 69 73 20 74 6f ote` which is to
3240: 20 62 65 20 74 68 65 20 74 6f 6e 69 63 20 6f 66 be the tonic of
3250: 20 74 68 65 20 73 63 61 6c 65 0a 0a 2a 73 63 61 the scale..*sca
3260: 6c 65 2a 20 2d 20 43 61 6e 20 65 69 74 68 65 72 le* - Can either
3270: 20 62 65 20 61 20 6e 61 6d 65 20 6f 66 20 61 20 be a name of a
3280: 73 63 61 6c 65 20 28 73 74 72 69 6e 67 29 2c 20 scale (string),
3290: 6f 72 20 61 6e 20 61 72 72 61 79 20 6f 66 0a 61 or an array of.a
32a0: 62 73 6f 6c 75 74 65 20 69 6e 74 65 72 76 61 6c bsolute interval
32b0: 73 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 s that defines t
32c0: 68 65 20 73 63 61 6c 65 2e 20 54 68 65 20 73 63 he scale. The sc
32d0: 61 6c 65 73 20 73 75 70 70 6f 72 74 65 64 20 62 ales supported b
32e0: 79 20 64 65 66 61 75 6c 74 20 61 72 65 3a 0a 0a y default are:..
32f0: 20 2d 20 6d 61 6a 6f 72 0a 20 2d 20 6d 69 6e 6f - major. - mino
3300: 72 0a 20 2d 20 69 6f 6e 69 61 6e 20 28 41 6c 69 r. - ionian (Ali
3310: 61 73 20 66 6f 72 20 6d 61 6a 6f 72 29 0a 20 2d as for major). -
3320: 20 64 6f 72 69 61 6e 0a 20 2d 20 70 68 72 79 67 dorian. - phryg
3330: 69 61 6e 0a 20 2d 20 6c 79 64 69 61 6e 0a 20 2d ian. - lydian. -
3340: 20 6d 69 78 6f 6c 79 64 69 61 6e 0a 20 2d 20 61 mixolydian. - a
3350: 65 6f 6c 69 61 6e 20 28 41 6c 69 61 73 20 66 6f eolian (Alias fo
3360: 72 20 6d 69 6e 6f 72 29 0a 20 2d 20 6c 6f 63 72 r minor). - locr
3370: 69 61 6e 0a 20 2d 20 6d 61 6a 6f 72 70 65 6e 74 ian. - majorpent
3380: 61 74 6f 6e 69 63 0a 20 2d 20 6d 69 6e 6f 72 70 atonic. - minorp
3390: 65 6e 74 61 74 6f 6e 69 63 0a 20 2d 20 63 68 72 entatonic. - chr
33a0: 6f 6d 61 74 69 63 0a 20 2d 20 68 61 72 6d 6f 6e omatic. - harmon
33b0: 69 63 63 68 72 6f 6d 61 74 69 63 20 28 41 6c 69 icchromatic (Ali
33c0: 61 73 20 66 6f 72 20 63 68 72 6f 6d 61 74 69 63 as for chromatic
33d0: 29 0a 20 2d 20 62 6c 75 65 73 0a 20 2d 20 64 6f ). - blues. - do
33e0: 75 62 6c 65 68 61 72 6d 6f 6e 69 63 0a 20 2d 20 ubleharmonic. -
33f0: 66 6c 61 6d 65 6e 63 6f 0a 20 2d 20 68 61 72 6d flamenco. - harm
3400: 6f 6e 69 63 6d 69 6e 6f 72 0a 20 2d 20 6d 65 6c onicminor. - mel
3410: 6f 64 69 63 6d 69 6e 6f 72 0a 20 2d 20 77 68 6f odicminor. - who
3420: 6c 65 74 6f 6e 65 0a 0a 23 23 23 20 74 65 6f 72 letone..### teor
3430: 69 61 2e 73 63 61 6c 65 28 74 6f 6e 69 63 2c 20 ia.scale(tonic,
3440: 73 63 61 6c 65 29 0a 20 2d 20 53 75 67 61 72 20 scale). - Sugar
3450: 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 63 6f 6e function for con
3460: 73 74 72 75 63 74 69 6e 67 20 61 20 6e 65 77 20 structing a new
3470: 60 53 63 61 6c 65 60 20 6f 62 6a 65 63 74 0a 0a `Scale` object..
3480: 23 23 23 23 20 74 65 6f 72 69 61 2e 53 63 61 6c #### teoria.Scal
3490: 65 2e 4b 4e 4f 57 4e 5f 53 43 41 4c 45 53 0a 20 e.KNOWN_SCALES.
34a0: 2d 20 41 6e 20 61 72 72 61 79 20 6f 66 20 61 6c - An array of al
34b0: 6c 20 74 68 65 20 73 63 61 6c 65 20 49 44 27 73 l the scale ID's
34c0: 20 74 68 61 74 20 63 6f 6d 65 73 20 77 69 74 68 that comes with
34d0: 20 74 65 6f 72 69 61 0a 0a 23 23 23 23 20 53 63 teoria..#### Sc
34e0: 61 6c 65 2e 6e 61 6d 65 0a 20 2d 20 54 68 65 20 ale.name. - The
34f0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63 61 6c name of the scal
3500: 65 20 28 69 66 20 61 76 61 69 6c 61 62 6c 65 29 e (if available)
3510: 2e 20 54 79 70 65 20 60 73 74 72 69 6e 67 60 20 . Type `string`
3520: 6f 72 20 60 75 6e 64 65 66 69 6e 65 64 60 0a 0a or `undefined`..
3530: 23 23 23 23 20 53 63 61 6c 65 2e 74 6f 6e 69 63 #### Scale.tonic
3540: 0a 20 2d 20 54 68 65 20 60 4e 6f 74 65 60 20 77 . - The `Note` w
3550: 68 69 63 68 20 69 73 20 74 68 65 20 73 63 61 6c hich is the scal
3560: 65 27 73 20 74 6f 6e 69 63 0a 0a 23 23 23 23 20 e's tonic..####
3570: 53 63 61 6c 65 23 6e 6f 74 65 73 28 29 0a 20 2d Scale#notes(). -
3580: 20 52 65 74 75 72 6e 73 20 61 6e 20 61 72 72 61 Returns an arra
3590: 79 20 6f 66 20 60 4e 6f 74 65 60 73 20 77 68 69 y of `Note`s whi
35a0: 63 68 20 69 73 20 74 68 65 20 73 63 61 6c 65 27 ch is the scale'
35b0: 73 20 6e 6f 74 65 73 0a 0a 23 23 23 23 20 53 63 s notes..#### Sc
35c0: 61 6c 65 23 73 69 6d 70 6c 65 28 29 0a 20 2d 20 ale#simple(). -
35d0: 52 65 74 75 72 6e 73 20 61 6e 20 60 41 72 72 61 Returns an `Arra
35e0: 79 60 20 6f 66 20 6f 6e 6c 79 20 74 68 65 20 6e y` of only the n
35f0: 6f 74 65 73 27 20 6e 61 6d 65 73 2c 20 6e 6f 74 otes' names, not
3600: 20 74 68 65 20 66 75 6c 6c 20 60 4e 6f 74 65 60 the full `Note`
3610: 20 6f 62 6a 65 63 74 73 2e 0a 0a 23 23 23 23 20 objects...####
3620: 53 63 61 6c 65 23 74 79 70 65 28 29 0a 20 2d 20 Scale#type(). -
3630: 52 65 74 75 72 6e 73 20 74 68 65 20 74 79 70 65 Returns the type
3640: 20 6f 66 20 74 68 65 20 73 63 61 6c 65 2c 20 64 of the scale, d
3650: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 epending on the
3660: 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 74 65 73 2e number of notes.
3670: 0a 20 41 20 73 63 61 6c 65 20 6f 66 20 6c 65 6e . A scale of len
3680: 67 74 68 20 78 20 67 69 76 65 73 20 79 3a 0a 20 gth x gives y:.
3690: 20 2d 20 32 20 67 69 76 65 73 20 27 64 69 74 6f - 2 gives 'dito
36a0: 6e 69 63 27 0a 20 20 2d 20 33 20 67 69 76 65 73 nic'. - 3 gives
36b0: 20 27 74 72 69 74 6f 6e 69 63 27 0a 20 20 2d 20 'tritonic'. -
36c0: 34 20 67 69 76 65 73 20 27 74 65 74 72 61 74 6f 4 gives 'tetrato
36d0: 6e 69 63 27 0a 20 20 2d 20 35 20 67 69 76 65 73 nic'. - 5 gives
36e0: 20 27 70 65 6e 74 61 74 6f 6e 69 63 27 0a 20 20 'pentatonic'.
36f0: 2d 20 36 20 67 69 76 65 73 20 27 68 65 78 61 74 - 6 gives 'hexat
3700: 6f 6e 69 63 27 2c 0a 20 20 2d 20 37 20 67 69 76 onic',. - 7 giv
3710: 65 73 20 27 68 65 70 74 61 74 6f 6e 69 63 27 2c es 'heptatonic',
3720: 0a 20 20 2d 20 38 20 67 69 76 65 73 20 27 6f 63 . - 8 gives 'oc
3730: 74 61 74 6f 6e 69 63 27 0a 0a 23 23 23 23 20 53 tatonic'..#### S
3740: 63 61 6c 65 23 67 65 74 28 69 6e 64 65 78 29 0a cale#get(index).
3750: 20 2d 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e - Returns the n
3760: 6f 74 65 20 61 74 20 74 68 65 20 67 69 76 65 6e ote at the given
3770: 20 73 63 61 6c 65 20 69 6e 64 65 78 0a 0a 2a 69 scale index..*i
3780: 6e 64 65 78 2a 20 2d 20 43 61 6e 20 62 65 20 61 ndex* - Can be a
3790: 20 6e 75 6d 62 65 72 20 72 65 66 65 72 72 69 6e number referrin
37a0: 67 20 74 6f 20 74 68 65 20 73 63 61 6c 65 20 73 g to the scale s
37b0: 74 65 70 2c 20 6f 72 20 74 68 65 20 6e 61 6d 65 tep, or the name
37c0: 20 28 73 74 72 69 6e 67 29 20 6f 66 20 74 68 65 (string) of the
37d0: 0a 73 63 61 6c 65 20 73 74 65 70 2e 20 45 2e 67 .scale step. E.g
37e0: 2e 20 27 66 69 72 73 74 27 2c 20 27 73 65 63 6f . 'first', 'seco
37f0: 6e 64 27 2c 20 27 66 6f 75 72 74 68 27 2c 20 27 nd', 'fourth', '
3800: 73 65 76 65 6e 74 68 27 2e 0a 0a 23 23 23 23 20 seventh'...####
3810: 53 63 61 6c 65 23 73 6f 6c 66 65 67 65 28 69 6e Scale#solfege(in
3820: 64 65 78 2c 20 73 68 6f 77 4f 63 74 61 76 65 73 dex, showOctaves
3830: 29 0a 20 2d 20 52 65 74 75 72 6e 73 20 74 68 65 ). - Returns the
3840: 20 73 6f 6c 66 65 67 65 20 6e 61 6d 65 20 6f 66 solfege name of
3850: 20 74 68 65 20 67 69 76 65 6e 20 73 63 61 6c 65 the given scale
3860: 20 73 74 65 70 0a 0a 2a 69 6e 64 65 78 2a 20 53 step..*index* S
3870: 61 6d 65 20 61 73 20 60 53 63 61 6c 65 23 67 65 ame as `Scale#ge
3880: 74 60 0a 0a 2a 73 68 6f 77 4f 63 74 61 76 65 73 t`..*showOctaves
3890: 2a 20 2d 20 41 20 62 6f 6f 6c 65 61 6e 20 6d 65 * - A boolean me
38a0: 61 6e 69 6e 67 20 74 68 65 20 73 61 6d 65 20 61 aning the same a
38b0: 73 20 60 73 68 6f 77 4f 63 74 61 76 65 73 60 20 s `showOctaves`
38c0: 69 6e 20 60 4e 6f 74 65 23 73 6f 6c 66 65 67 65 in `Note#solfege
38d0: 60 0a 0a 0a 23 23 20 74 65 6f 72 69 61 2e 69 6e `...## teoria.in
38e0: 74 65 72 76 61 6c 28 66 72 6f 6d 2c 20 74 6f 29 terval(from, to)
38f0: 0a 20 2d 20 41 20 73 75 67 61 72 20 66 75 6e 63 . - A sugar func
3900: 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 60 23 66 tion for the `#f
3910: 72 6f 6d 60 20 61 6e 64 20 60 23 62 65 74 77 65 rom` and `#betwe
3920: 65 6e 60 20 6d 65 74 68 6f 64 73 20 6f 66 20 74 en` methods of t
3930: 68 65 20 73 61 6d 65 20 6e 61 6d 65 73 70 61 63 he same namespac
3940: 65 20 61 6e 64 0a 20 66 6f 72 20 63 72 65 61 74 e and. for creat
3950: 69 6e 67 20 60 49 6e 74 65 72 76 61 6c 60 20 6f ing `Interval` o
3960: 62 6a 65 63 74 73 2e 0a 0a 23 23 23 23 20 74 65 bjects...#### te
3970: 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 60 73 oria.interval(`s
3980: 74 72 69 6e 67 60 3a 20 66 72 6f 6d 29 0a 20 2d tring`: from). -
3990: 20 41 20 73 75 67 61 72 20 6d 65 74 68 6f 64 20 A sugar method
39a0: 66 6f 72 20 74 68 65 20 60 49 6e 74 65 72 76 61 for the `Interva
39b0: 6c 2e 74 6f 43 6f 6f 72 64 60 20 66 75 6e 63 74 l.toCoord` funct
39c0: 69 6f 6e 0a 0a 23 23 23 23 20 74 65 6f 72 69 61 ion..#### teoria
39d0: 2e 69 6e 74 65 72 76 61 6c 28 60 4e 6f 74 65 60 .interval(`Note`
39e0: 3a 20 66 72 6f 6d 2c 20 60 73 74 72 69 6e 67 60 : from, `string`
39f0: 3a 20 74 6f 29 0a 20 2d 20 41 20 73 75 67 61 72 : to). - A sugar
3a00: 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 65 20 method for the
3a10: 60 49 6e 74 65 72 76 61 6c 2e 66 72 6f 6d 60 20 `Interval.from`
3a20: 66 75 6e 63 74 69 6f 6e 0a 0a 23 23 23 23 20 74 function..#### t
3a30: 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 60 eoria.interval(`
3a40: 4e 6f 74 65 60 3a 20 66 72 6f 6d 2c 20 60 49 6e Note`: from, `In
3a50: 74 65 72 76 61 6c 60 3a 20 74 6f 29 0a 20 2d 20 terval`: to). -
3a60: 4c 69 6b 65 20 61 62 6f 76 65 2c 20 62 75 74 20 Like above, but
3a70: 77 69 74 68 20 61 20 60 49 6e 74 65 72 76 61 6c with a `Interval
3a80: 60 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 73 ` instead of a s
3a90: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 tring representa
3aa0: 74 69 6f 6e 20 6f 66 0a 20 74 68 65 20 69 6e 74 tion of. the int
3ab0: 65 72 76 61 6c 0a 0a 23 23 23 23 20 74 65 6f 72 erval..#### teor
3ac0: 69 61 2e 69 6e 74 65 72 76 61 6c 28 60 4e 6f 74 ia.interval(`Not
3ad0: 65 60 3a 20 66 72 6f 6d 2c 20 60 4e 6f 74 65 60 e`: from, `Note`
3ae0: 3a 20 74 6f 29 0a 20 2d 20 41 20 73 75 67 61 72 : to). - A sugar
3af0: 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 65 20 method for the
3b00: 60 49 6e 74 65 72 76 61 6c 2e 62 65 74 77 65 65 `Interval.betwee
3b10: 6e 60 20 66 75 6e 63 74 69 6f 6e 0a 0a 23 23 23 n` function..###
3b20: 23 23 20 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 ## teoria.interv
3b30: 61 6c 2e 66 72 6f 6d 20 2d 3e 20 49 6e 74 65 72 al.from -> Inter
3b40: 76 61 6c 2e 66 72 6f 6d 0a 23 23 23 23 23 20 74 val.from.##### t
3b50: 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 2e 62 eoria.interval.b
3b60: 65 74 77 65 65 6e 20 2d 3e 20 49 6e 74 65 72 76 etween -> Interv
3b70: 61 6c 2e 62 65 74 77 65 65 6e 0a 23 23 23 23 23 al.between.#####
3b80: 20 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c teoria.interval
3b90: 2e 69 6e 76 65 72 74 20 2d 3e 20 49 6e 74 65 72 .invert -> Inter
3ba0: 76 61 6c 2e 69 6e 76 65 72 74 0a 23 23 23 23 23 val.invert.#####
3bb0: 20 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c teoria.interval
3bc0: 2e 74 6f 43 6f 6f 72 64 20 2d 3e 20 49 6e 74 65 .toCoord -> Inte
3bd0: 72 76 61 6c 2e 74 6f 43 6f 6f 72 64 0a 0a 0a 23 rval.toCoord...#
3be0: 23 20 49 6e 74 65 72 76 61 6c 28 63 6f 6f 72 64 # Interval(coord
3bf0: 29 0a 20 2d 20 41 20 72 65 70 72 65 73 65 6e 74 ). - A represent
3c00: 61 74 69 6f 6e 20 6f 66 20 61 20 6d 75 73 69 63 ation of a music
3c10: 20 69 6e 74 65 72 76 61 6c 0a 0a 23 23 23 20 49 interval..### I
3c20: 6e 74 65 72 76 61 6c 2e 74 6f 43 6f 6f 72 64 28 nterval.toCoord(
3c30: 73 69 6d 70 6c 65 49 6e 74 65 72 76 61 6c 29 0a simpleInterval).
3c40: 20 2d 20 52 65 74 75 72 6e 73 20 61 20 60 49 6e - Returns a `In
3c50: 74 65 72 76 61 6c 60 20 72 65 70 72 65 73 65 6e terval` represen
3c60: 74 69 6e 67 20 74 68 65 20 69 6e 74 65 72 76 61 ting the interva
3c70: 6c 20 65 78 70 72 65 73 73 65 64 20 69 6e 20 73 l expressed in s
3c80: 74 72 69 6e 67 20 66 6f 72 6d 2e 0a 0a 23 23 23 tring form...###
3c90: 20 49 6e 74 65 72 76 61 6c 2e 66 72 6f 6d 28 66 Interval.from(f
3ca0: 72 6f 6d 2c 20 74 6f 29 0a 20 2d 20 52 65 74 75 rom, to). - Retu
3cb0: 72 6e 73 20 61 20 6e 6f 74 65 20 77 68 69 63 68 rns a note which
3cc0: 20 69 73 20 61 20 67 69 76 65 6e 20 69 6e 74 65 is a given inte
3cd0: 72 76 61 6c 20 61 77 61 79 20 66 72 6f 6d 20 61 rval away from a
3ce0: 20 72 6f 6f 74 20 6e 6f 74 65 2e 0a 0a 2a 66 72 root note...*fr
3cf0: 6f 6d 2a 20 2d 20 54 68 65 20 60 4e 6f 74 65 60 om* - The `Note`
3d00: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 72 6f which is the ro
3d10: 6f 74 20 6f 66 20 74 68 65 20 6d 65 61 73 75 72 ot of the measur
3d20: 69 6e 67 0a 0a 2a 74 6f 2a 20 2d 20 41 20 60 49 ing..*to* - A `I
3d30: 6e 74 65 72 76 61 6c 60 0a 0a 23 23 23 20 49 6e nterval`..### In
3d40: 74 65 72 76 61 6c 2e 62 65 74 77 65 65 6e 28 66 terval.between(f
3d50: 72 6f 6d 2c 20 74 6f 29 0a 20 2d 20 52 65 74 75 rom, to). - Retu
3d60: 72 6e 73 20 61 6e 20 69 6e 74 65 72 76 61 6c 20 rns an interval
3d70: 6f 62 6a 65 63 74 20 77 68 69 63 68 20 72 65 70 object which rep
3d80: 72 65 73 65 6e 74 73 20 74 68 65 20 69 6e 74 65 resents the inte
3d90: 72 76 61 6c 20 62 65 74 77 65 65 6e 20 74 77 6f rval between two
3da0: 20 6e 6f 74 65 73 2e 0a 0a 2a 66 72 6f 6d 2a 20 notes...*from*
3db0: 61 6e 64 20 2a 74 6f 2a 20 61 72 65 20 74 77 6f and *to* are two
3dc0: 20 60 4e 6f 74 65 60 73 20 77 68 69 63 68 20 61 `Note`s which a
3dd0: 72 65 20 74 68 65 20 6e 6f 74 65 73 20 74 68 61 re the notes tha
3de0: 74 20 74 68 65 0a 69 6e 74 65 72 76 61 6c 20 69 t the.interval i
3df0: 73 20 6d 65 61 73 75 72 65 64 20 66 72 6f 6d 2e s measured from.
3e00: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 69 66 20 For example if
3e10: 27 61 27 20 61 6e 64 20 27 63 27 20 61 72 65 20 'a' and 'c' are
3e20: 67 69 76 65 6e 2c 20 74 68 65 20 72 65 73 75 6c given, the resul
3e30: 74 69 6e 67 0a 69 6e 74 65 72 76 61 6c 20 6f 62 ting.interval ob
3e40: 6a 65 63 74 20 77 6f 75 6c 64 20 72 65 70 72 65 ject would repre
3e50: 73 65 6e 74 20 61 20 6d 69 6e 6f 72 20 74 68 69 sent a minor thi
3e60: 72 64 2e 0a 0a 60 60 60 6a 61 76 61 73 63 72 69 rd...```javascri
3e70: 70 74 0a 49 6e 74 65 72 76 61 6c 2e 62 65 74 77 pt.Interval.betw
3e80: 65 65 6e 28 74 65 6f 72 69 61 2e 6e 6f 74 65 28 een(teoria.note(
3e90: 22 61 22 29 2c 20 74 65 6f 72 69 61 2e 6e 6f 74 "a"), teoria.not
3ea0: 65 28 22 63 27 22 29 29 20 2d 3e 20 74 65 6f 72 e("c'")) -> teor
3eb0: 69 61 2e 69 6e 74 65 72 76 61 6c 28 27 6d 33 27 ia.interval('m3'
3ec0: 29 0a 60 60 60 0a 0a 23 23 23 20 49 6e 74 65 72 ).```..### Inter
3ed0: 76 61 6c 2e 69 6e 76 65 72 74 28 73 69 6d 70 6c val.invert(simpl
3ee0: 65 49 6e 74 65 72 76 61 6c 29 0a 20 2d 20 52 65 eInterval). - Re
3ef0: 74 75 72 6e 73 20 74 68 65 20 69 6e 76 65 72 73 turns the invers
3f00: 69 6f 6e 20 6f 66 20 74 68 65 20 69 6e 74 65 72 ion of the inter
3f10: 76 61 6c 20 70 72 6f 76 69 64 65 64 0a 0a 2a 73 val provided..*s
3f20: 69 6d 70 6c 65 49 6e 74 65 72 76 61 6c 2a 20 2d impleInterval* -
3f30: 20 41 6e 20 69 6e 74 65 72 76 61 6c 20 72 65 70 An interval rep
3f40: 72 65 73 65 6e 74 65 64 20 69 6e 20 73 69 6d 70 resented in simp
3f50: 6c 65 20 73 74 72 69 6e 67 20 66 6f 72 6d 2e 20 le string form.
3f60: 45 78 61 6d 70 6c 65 73 3a 0a 0a 20 2d 20 27 6d Examples:.. - 'm
3f70: 33 27 20 3d 20 6d 69 6e 6f 72 20 74 68 69 72 64 3' = minor third
3f80: 0a 20 2d 20 27 50 34 27 20 3d 20 70 65 72 66 65 . - 'P4' = perfe
3f90: 63 74 20 66 6f 75 72 74 68 0a 20 2d 20 27 41 34 ct fourth. - 'A4
3fa0: 27 20 3d 20 61 75 67 6d 65 6e 74 65 64 20 66 69 ' = augmented fi
3fb0: 66 74 68 0a 20 2d 20 27 64 37 27 20 3d 20 64 69 fth. - 'd7' = di
3fc0: 6d 69 6e 69 73 68 65 64 20 73 65 76 65 6e 74 68 minished seventh
3fd0: 0a 20 2d 20 27 4d 36 27 20 3d 20 6d 61 6a 6f 72 . - 'M6' = major
3fe0: 20 73 69 78 74 68 2e 0a 0a 60 27 6d 27 20 3d 20 sixth...`'m' =
3ff0: 6d 69 6e 6f 72 60 2c 20 60 27 4d 27 20 3d 20 6d minor`, `'M' = m
4000: 61 6a 6f 72 60 2c 20 60 27 41 27 20 3d 20 61 75 ajor`, `'A' = au
4010: 67 6d 65 6e 74 65 64 60 20 61 6e 64 0a 60 27 64 gmented` and.`'d
4020: 27 20 3d 20 64 69 6d 69 6e 69 73 68 65 64 60 0a ' = diminished`.
4030: 0a 54 68 65 20 6e 75 6d 62 65 72 20 6d 61 79 20 .The number may
4040: 62 65 20 70 72 65 66 69 78 65 64 20 77 69 74 68 be prefixed with
4050: 20 61 20 60 2d 60 20 74 6f 20 73 69 67 6e 69 66 a `-` to signif
4060: 79 20 74 68 61 74 20 69 74 73 20 64 69 72 65 63 y that its direc
4070: 74 69 6f 6e 20 69 73 20 64 6f 77 6e 2e 20 45 2e tion is down. E.
4080: 67 2e 3a 0a 0a 60 6d 2d 33 60 20 6d 65 61 6e 73 g.:..`m-3` means
4090: 20 61 20 64 65 73 63 65 6e 64 69 6e 67 20 6d 69 a descending mi
40a0: 6e 6f 72 20 74 68 69 72 64 2c 20 61 6e 64 20 60 nor third, and `
40b0: 50 2d 35 60 20 6d 65 61 6e 73 20 61 20 64 65 73 P-5` means a des
40c0: 63 65 6e 64 69 6e 67 20 70 65 72 66 65 63 74 20 cending perfect
40d0: 66 69 66 74 68 2e 0a 0a 23 23 23 23 20 49 6e 74 fifth...#### Int
40e0: 65 72 76 61 6c 2e 63 6f 6f 72 64 0a 20 2d 20 54 erval.coord. - T
40f0: 68 65 20 69 6e 74 65 72 76 61 6c 20 72 65 70 72 he interval repr
4100: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 esentation of th
4110: 65 20 69 6e 74 65 72 76 61 6c 0a 0a 23 23 23 23 e interval..####
4120: 20 49 6e 74 65 72 76 61 6c 2e 6e 75 6d 62 65 72 Interval.number
4130: 28 29 0a 20 2d 20 54 68 65 20 69 6e 74 65 72 76 (). - The interv
4140: 61 6c 20 6e 75 6d 62 65 72 20 28 41 20 6e 69 6e al number (A nin
4150: 74 68 20 3d 20 39 2c 20 41 20 73 65 76 65 6e 74 th = 9, A sevent
4160: 68 20 3d 20 37 2c 20 66 69 66 74 65 65 6e 74 68 h = 7, fifteenth
4170: 20 3d 20 31 35 29 0a 0a 23 23 23 23 20 49 6e 74 = 15)..#### Int
4180: 65 72 76 61 6c 2e 76 61 6c 75 65 28 29 0a 20 2d erval.value(). -
4190: 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 The value of th
41a0: 65 20 69 6e 74 65 72 76 61 6c 20 2d 20 54 68 61 e interval - Tha
41b0: 74 20 69 73 20 61 20 6e 69 6e 74 68 20 3d 20 39 t is a ninth = 9
41c0: 2c 20 62 75 74 20 61 20 64 6f 77 6e 77 61 72 64 , but a downward
41d0: 73 20 6e 69 6e 74 68 20 69 73 20 3d 20 2d 39 0a s ninth is = -9.
41e0: 0a 23 23 23 23 20 49 6e 74 65 72 76 61 6c 2e 74 .#### Interval.t
41f0: 6f 53 74 72 69 6e 67 28 29 0a 20 2d 20 52 65 74 oString(). - Ret
4200: 75 72 6e 73 20 74 68 65 20 2a 73 69 6d 70 6c 65 urns the *simple
4210: 49 6e 74 65 72 76 61 6c 2a 20 72 65 70 72 65 73 Interval* repres
4220: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 entation of the
4230: 69 6e 74 65 72 76 61 6c 2e 20 45 2e 67 2e 20 60 interval. E.g. `
4240: 27 50 35 27 60 2c 0a 20 60 27 4d 33 27 60 2c 20 'P5'`,. `'M3'`,
4250: 60 27 41 39 27 60 2c 20 65 74 63 2e 0a 0a 23 23 `'A9'`, etc...##
4260: 23 23 20 49 6e 74 65 72 76 61 6c 2e 62 61 73 65 ## Interval.base
4270: 28 29 0a 20 2d 20 52 65 74 75 72 6e 73 20 74 68 (). - Returns th
4280: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 69 e name of the si
4290: 6d 70 6c 65 20 69 6e 74 65 72 76 61 6c 20 28 6e mple interval (n
42a0: 6f 74 20 63 6f 6d 70 6f 75 6e 64 29 0a 0a 23 23 ot compound)..##
42b0: 23 23 20 49 6e 74 65 72 76 61 6c 2e 74 79 70 65 ## Interval.type
42c0: 28 29 0a 20 2d 20 52 65 74 75 72 6e 73 20 74 68 (). - Returns th
42d0: 65 20 74 79 70 65 20 6f 66 20 61 72 72 61 79 2c e type of array,
42e0: 20 65 69 74 68 65 72 20 60 27 70 65 72 66 65 63 either `'perfec
42f0: 74 27 60 20 28 31 2c 20 34 2c 20 35 2c 20 38 29 t'` (1, 4, 5, 8)
4300: 20 6f 72 20 60 27 6d 69 6e 6f 72 27 60 20 28 32 or `'minor'` (2
4310: 2c 20 33 2c 20 36 2c 20 37 29 0a 0a 23 23 23 23 , 3, 6, 7)..####
4320: 20 49 6e 74 65 72 76 61 6c 2e 71 75 61 6c 69 74 Interval.qualit
4330: 79 28 5b 76 65 72 62 6f 73 65 5d 29 0a 20 2d 20 y([verbose]). -
4340: 54 68 65 20 71 75 61 6c 69 74 79 20 6f 66 20 74 The quality of t
4350: 68 65 20 69 6e 74 65 72 76 61 6c 20 28 60 27 64 he interval (`'d
4360: 64 27 60 2c 20 60 27 64 27 60 20 60 27 6d 27 60 d'`, `'d'` `'m'`
4370: 2c 20 60 27 50 27 60 2c 20 60 27 4d 27 60 2c 20 , `'P'`, `'M'`,
4380: 60 27 41 27 60 20 6f 72 20 60 27 41 41 27 60 29 `'A'` or `'AA'`)
4390: 0a 0a 2a 76 65 72 62 6f 73 65 2a 20 20 69 73 20 ..*verbose* is
43a0: 73 65 74 20 74 6f 20 61 20 74 72 75 69 73 68 20 set to a truish
43b0: 76 61 6c 75 65 2c 20 74 68 65 6e 20 6c 6f 6e 67 value, then long
43c0: 20 71 75 61 6c 69 74 79 20 6e 61 6d 65 73 20 61 quality names a
43d0: 72 65 20 72 65 74 75 72 6e 65 64 3a 0a 20 60 27 re returned:. `'
43e0: 64 6f 75 62 6c 79 20 64 69 6d 69 6e 69 73 68 65 doubly diminishe
43f0: 64 27 60 2c 20 60 27 64 69 6d 69 6e 69 73 68 65 d'`, `'diminishe
4400: 64 27 60 2c 20 60 27 6d 69 6e 6f 72 27 60 2c 20 d'`, `'minor'`,
4410: 65 74 63 2e 0a 0a 23 23 23 23 20 49 6e 74 65 72 etc...#### Inter
4420: 76 61 6c 2e 64 69 72 65 63 74 69 6f 6e 28 5b 64 val.direction([d
4430: 69 72 5d 29 0a 20 2d 20 54 68 65 20 64 69 72 65 ir]). - The dire
4440: 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 69 6e 74 ction of the int
4450: 65 72 76 61 6c 0a 0a 2a 64 69 72 2a 20 2d 20 49 erval..*dir* - I
4460: 66 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 6e f supplied, then
4470: 20 74 68 65 20 69 6e 74 65 72 76 61 6c 27 73 20 the interval's
4480: 64 69 72 65 63 74 69 6f 6e 20 69 73 20 74 6f 20 direction is to
4490: 74 68 65 20 60 6e 65 77 44 69 72 65 63 74 69 6f the `newDirectio
44a0: 6e 60 0a 77 68 69 63 68 20 69 73 20 65 69 74 68 n`.which is eith
44b0: 65 72 20 60 27 75 70 27 60 20 6f 72 20 60 27 64 er `'up'` or `'d
44c0: 6f 77 6e 27 60 0a 0a 23 23 23 23 20 49 6e 74 65 own'`..#### Inte
44d0: 72 76 61 6c 23 73 65 6d 69 74 6f 6e 65 73 28 29 rval#semitones()
44e0: 0a 20 2d 20 52 65 74 75 72 6e 73 20 74 68 65 20 . - Returns the
44f0: 60 6e 75 6d 62 65 72 60 20 6f 66 20 73 65 6d 69 `number` of semi
4500: 74 6f 6e 65 73 20 74 68 65 20 69 6e 74 65 72 76 tones the interv
4510: 61 6c 20 73 70 61 6e 2e 0a 0a 23 23 23 23 20 49 al span...#### I
4520: 6e 74 65 72 76 61 6c 23 73 69 6d 70 6c 65 28 5b nterval#simple([
4530: 69 67 6e 6f 72 65 44 69 72 65 63 74 69 6f 6e 5d ignoreDirection]
4540: 29 0a 20 2d 20 52 65 74 75 72 6e 73 20 74 68 65 ). - Returns the
4550: 20 73 69 6d 70 6c 65 20 70 61 72 74 20 6f 66 20 simple part of
4560: 74 68 65 20 69 6e 74 65 72 76 61 6c 20 61 73 20 the interval as
4570: 61 20 49 6e 74 65 72 76 61 6c 2e 20 45 78 61 6d a Interval. Exam
4580: 70 6c 65 3a 0a 0a 2a 69 67 6e 6f 72 65 44 69 72 ple:..*ignoreDir
4590: 65 63 74 69 6f 6e 2a 20 2d 20 41 6e 20 6f 70 74 ection* - An opt
45a0: 69 6f 6e 61 6c 20 62 6f 6f 6c 65 61 6e 20 74 68 ional boolean th
45b0: 61 74 2c 20 69 66 20 73 65 74 20 74 6f 20 60 74 at, if set to `t
45c0: 72 75 65 60 2c 20 72 65 74 75 72 6e 73 20 74 68 rue`, returns th
45d0: 65 0a 22 64 69 72 65 63 74 69 6f 6e 2d 61 67 6e e."direction-agn
45e0: 6f 73 74 69 63 22 20 69 6e 74 65 72 76 61 6c 2e ostic" interval.
45f0: 20 54 68 61 74 20 69 73 20 74 68 65 20 69 6e 74 That is the int
4600: 65 72 76 61 6c 20 77 69 74 68 20 61 20 70 6f 73 erval with a pos
4610: 69 74 69 76 65 20 6e 75 6d 62 65 72 2e 0a 0a 60 itive number...`
4620: 60 60 6a 61 76 61 73 63 72 69 70 74 0a 74 65 6f ``javascript.teo
4630: 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 27 4d 31 ria.interval('M1
4640: 37 27 29 2e 73 69 6d 70 6c 65 28 29 3b 20 20 20 7').simple();
4650: 20 2f 2f 20 23 2d 3e 20 27 4d 33 27 0a 74 65 6f // #-> 'M3'.teo
4660: 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 27 6d 32 ria.interval('m2
4670: 33 27 29 2e 73 69 6d 70 6c 65 28 29 3b 20 20 20 3').simple();
4680: 20 2f 2f 20 23 2d 3e 20 27 6d 32 27 0a 74 65 6f // #-> 'm2'.teo
4690: 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 27 50 35 ria.interval('P5
46a0: 27 29 2e 73 69 6d 70 6c 65 28 29 3b 20 20 20 20 ').simple();
46b0: 20 2f 2f 20 23 2d 3e 20 27 50 35 27 0a 74 65 6f // #-> 'P5'.teo
46c0: 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 27 50 2d ria.interval('P-
46d0: 34 27 29 2e 73 69 6d 70 6c 65 28 29 3b 20 20 20 4').simple();
46e0: 20 2f 2f 20 23 2d 3e 20 27 50 2d 34 27 0a 0a 2f // #-> 'P-4'../
46f0: 2f 20 57 69 74 68 20 69 67 6e 6f 72 65 44 69 72 / With ignoreDir
4700: 65 63 74 69 6f 6e 20 3d 20 74 72 75 65 0a 74 65 ection = true.te
4710: 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 27 4d oria.interval('M
4720: 33 27 29 2e 73 69 6d 70 6c 65 28 74 72 75 65 29 3').simple(true)
4730: 3b 20 20 20 20 20 2f 2f 20 23 2d 3e 27 4d 33 27 ; // #->'M3'
4740: 0a 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c .teoria.interval
4750: 28 27 6d 2d 31 30 27 29 2e 73 69 6d 70 6c 65 28 ('m-10').simple(
4760: 74 72 75 65 29 3b 20 20 20 2f 2f 20 23 2d 3e 20 true); // #->
4770: 27 6d 33 27 0a 60 60 60 0a 0a 2a 4e 42 3a 2a 20 'm3'.```..*NB:*
4780: 4e 6f 74 65 20 74 68 61 74 20 61 62 6f 76 65 20 Note that above
4790: 72 65 74 75 72 6e 65 64 20 72 65 73 75 6c 74 73 returned results
47a0: 20 61 72 65 20 70 73 65 75 64 6f 2d 72 65 73 75 are pseudo-resu
47b0: 6c 74 73 2c 20 61 73 20 74 68 65 79 20 77 69 6c lts, as they wil
47c0: 6c 20 62 65 0a 72 65 74 75 72 6e 65 64 20 77 72 l be.returned wr
47d0: 61 70 70 65 64 20 69 6e 20 60 49 6e 74 65 72 76 apped in `Interv
47e0: 61 6c 60 20 6f 62 6a 65 63 74 73 2e 0a 0a 23 23 al` objects...##
47f0: 23 23 20 49 6e 74 65 72 76 61 6c 23 6f 63 74 61 ## Interval#octa
4800: 76 65 73 28 29 0a 20 2d 20 52 65 74 75 72 6e 73 ves(). - Returns
4810: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 the number of c
4820: 6f 6d 70 6f 75 6e 64 20 69 6e 74 65 72 76 61 6c ompound interval
4830: 73 0a 0a 23 23 23 23 20 49 6e 74 65 72 76 61 6c s..#### Interval
4840: 23 69 73 43 6f 6d 70 6f 75 6e 64 28 29 0a 20 2d #isCompound(). -
4850: 20 52 65 74 75 72 6e 73 20 61 20 62 6f 6f 6c 65 Returns a boole
4860: 61 6e 20 76 61 6c 75 65 2c 20 73 68 6f 77 69 6e an value, showin
4870: 67 20 69 66 20 74 68 65 20 69 6e 74 65 72 76 61 g if the interva
4880: 6c 20 69 73 20 61 20 63 6f 6d 70 6f 75 6e 64 20 l is a compound
4890: 69 6e 74 65 72 76 61 6c 0a 0a 23 23 23 23 20 49 interval..#### I
48a0: 6e 74 65 72 76 61 6c 23 61 64 64 28 69 6e 74 65 nterval#add(inte
48b0: 72 76 61 6c 29 0a 20 2d 20 41 64 64 73 20 74 68 rval). - Adds th
48c0: 65 20 60 69 6e 74 65 72 76 61 6c 60 20 74 6f 20 e `interval` to
48d0: 74 68 69 73 20 69 6e 74 65 72 76 61 6c 2c 20 61 this interval, a
48e0: 6e 64 20 72 65 74 75 72 6e 73 20 61 20 60 49 6e nd returns a `In
48f0: 74 65 72 76 61 6c 60 0a 20 72 65 70 72 65 73 65 terval`. represe
4900: 6e 74 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 nting the result
4910: 20 6f 66 20 74 68 65 20 61 64 64 69 74 69 6f 6e of the addition
4920: 0a 0a 23 23 23 23 20 49 6e 74 65 72 76 61 6c 23 ..#### Interval#
4930: 65 71 75 61 6c 28 69 6e 74 65 72 76 61 6c 29 0a equal(interval).
4940: 20 2d 20 52 65 74 75 72 6e 73 20 74 72 75 65 20 - Returns true
4950: 69 66 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 if the supplied
4960: 60 69 6e 74 65 72 76 61 6c 60 20 69 73 20 65 71 `interval` is eq
4970: 75 61 6c 20 74 6f 20 74 68 69 73 20 69 6e 74 65 ual to this inte
4980: 72 76 61 6c 0a 0a 23 23 23 23 20 49 6e 74 65 72 rval..#### Inter
4990: 76 61 6c 23 67 72 65 61 74 65 72 28 69 6e 74 65 val#greater(inte
49a0: 72 76 61 6c 29 0a 20 2d 20 52 65 74 75 72 6e 73 rval). - Returns
49b0: 20 74 72 75 65 20 69 66 20 74 68 65 20 73 75 70 true if the sup
49c0: 70 6c 69 65 64 20 60 69 6e 74 65 72 76 61 6c 60 plied `interval`
49d0: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e is greater than
49e0: 20 74 68 69 73 20 69 6e 74 65 72 76 61 6c 0a 0a this interval..
49f0: 23 23 23 23 20 49 6e 74 65 72 76 61 6c 23 73 6d #### Interval#sm
4a00: 61 6c 6c 65 72 28 69 6e 74 65 72 76 61 6c 29 0a aller(interval).
4a10: 20 2d 20 52 65 74 75 72 6e 73 20 74 72 75 65 20 - Returns true
4a20: 69 66 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 if the supplied
4a30: 60 69 6e 74 65 72 76 61 6c 60 20 69 73 20 73 6d `interval` is sm
4a40: 61 6c 6c 65 72 20 74 68 61 6e 20 74 68 69 73 20 aller than this
4a50: 69 6e 74 65 72 76 61 6c 0a 0a 23 23 23 23 20 49 interval..#### I
4a60: 6e 74 65 72 76 61 6c 23 69 6e 76 65 72 74 28 29 nterval#invert()
4a70: 0a 20 2d 20 52 65 74 75 72 6e 73 20 74 68 65 20 . - Returns the
4a80: 69 6e 76 65 72 74 65 64 20 69 6e 74 65 72 76 61 inverted interva
4a90: 6c 20 61 73 20 61 20 60 49 6e 74 65 72 76 61 6c l as a `Interval
4aa0: 60 0a 0a 23 23 23 23 20 49 6e 74 65 72 76 61 6c `..#### Interval
4ab0: 23 71 75 61 6c 69 74 79 56 61 6c 75 65 28 29 20 #qualityValue()
4ac0: 2d 20 2a 69 6e 74 65 72 6e 61 6c 2a 0a 20 2d 20 - *internal*. -
4ad0: 52 65 74 75 72 6e 73 20 74 68 65 20 72 65 6c 61 Returns the rela
4ae0: 74 69 76 65 20 74 6f 20 64 65 66 61 75 6c 74 2c tive to default,
4af0: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 71 75 value of the qu
4b00: 61 6c 69 74 79 2e 0a 20 45 2e 67 2e 20 61 20 74 ality.. E.g. a t
4b10: 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 27 eoria.interval('
4b20: 4d 36 27 29 2c 20 77 69 6c 6c 20 68 61 76 65 20 M6'), will have
4b30: 61 20 72 65 6c 61 74 69 76 65 20 71 75 61 6c 69 a relative quali
4b40: 74 79 20 76 61 6c 75 65 20 6f 66 20 31 2c 20 61 ty value of 1, a
4b50: 73 20 61 6c 6c 20 74 68 65 0a 20 69 6e 74 65 72 s all the. inter
4b60: 76 61 6c 73 20 64 65 66 61 75 6c 74 73 20 74 6f vals defaults to
4b70: 20 6d 69 6e 6f 72 20 61 6e 64 20 70 65 72 66 65 minor and perfe
4b80: 63 74 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e ct respectively.
4b90: 0a 0a ..