0000: 76 61 72 20 6b 6e 6f 77 6c 65 64 67 65 20 3d 20 var knowledge =
0010: 72 65 71 75 69 72 65 28 27 2e 2f 6b 6e 6f 77 6c require('./knowl
0020: 65 64 67 65 27 29 3b 0a 76 61 72 20 49 6e 74 65 edge');.var Inte
0030: 72 76 61 6c 20 3d 20 72 65 71 75 69 72 65 28 27 rval = require('
0040: 2e 2f 69 6e 74 65 72 76 61 6c 27 29 3b 0a 0a 76 ./interval');..v
0050: 61 72 20 73 63 61 6c 65 73 20 3d 20 7b 0a 20 20 ar scales = {.
0060: 61 65 6f 6c 69 61 6e 3a 20 5b 27 50 31 27 2c 20 aeolian: ['P1',
0070: 27 4d 32 27 2c 20 27 6d 33 27 2c 20 27 50 34 27 'M2', 'm3', 'P4'
0080: 2c 20 27 50 35 27 2c 20 27 6d 36 27 2c 20 27 6d , 'P5', 'm6', 'm
0090: 37 27 5d 2c 0a 20 20 62 6c 75 65 73 3a 20 5b 27 7'],. blues: ['
00a0: 50 31 27 2c 20 27 6d 33 27 2c 20 27 50 34 27 2c P1', 'm3', 'P4',
00b0: 20 27 64 35 27 2c 20 27 50 35 27 2c 20 27 6d 37 'd5', 'P5', 'm7
00c0: 27 5d 2c 0a 20 20 63 68 72 6f 6d 61 74 69 63 3a '],. chromatic:
00d0: 20 5b 27 50 31 27 2c 20 27 6d 32 27 2c 20 27 4d ['P1', 'm2', 'M
00e0: 32 27 2c 20 27 6d 33 27 2c 20 27 4d 33 27 2c 20 2', 'm3', 'M3',
00f0: 27 50 34 27 2c 0a 20 20 20 20 27 41 34 27 2c 20 'P4',. 'A4',
0100: 27 50 35 27 2c 20 27 6d 36 27 2c 20 27 4d 36 27 'P5', 'm6', 'M6'
0110: 2c 20 27 6d 37 27 2c 20 27 4d 37 27 5d 2c 0a 20 , 'm7', 'M7'],.
0120: 20 64 6f 72 69 61 6e 3a 20 5b 27 50 31 27 2c 20 dorian: ['P1',
0130: 27 4d 32 27 2c 20 27 6d 33 27 2c 20 27 50 34 27 'M2', 'm3', 'P4'
0140: 2c 20 27 50 35 27 2c 20 27 4d 36 27 2c 20 27 6d , 'P5', 'M6', 'm
0150: 37 27 5d 2c 0a 20 20 64 6f 75 62 6c 65 68 61 72 7'],. doublehar
0160: 6d 6f 6e 69 63 3a 20 5b 27 50 31 27 2c 20 27 6d monic: ['P1', 'm
0170: 32 27 2c 20 27 4d 33 27 2c 20 27 50 34 27 2c 20 2', 'M3', 'P4',
0180: 27 50 35 27 2c 20 27 6d 36 27 2c 20 27 4d 37 27 'P5', 'm6', 'M7'
0190: 5d 2c 0a 20 20 68 61 72 6d 6f 6e 69 63 6d 69 6e ],. harmonicmin
01a0: 6f 72 3a 20 5b 27 50 31 27 2c 20 27 4d 32 27 2c or: ['P1', 'M2',
01b0: 20 27 6d 33 27 2c 20 27 50 34 27 2c 20 27 50 35 'm3', 'P4', 'P5
01c0: 27 2c 20 27 6d 36 27 2c 20 27 4d 37 27 5d 2c 0a ', 'm6', 'M7'],.
01d0: 20 20 69 6f 6e 69 61 6e 3a 20 5b 27 50 31 27 2c ionian: ['P1',
01e0: 20 27 4d 32 27 2c 20 27 4d 33 27 2c 20 27 50 34 'M2', 'M3', 'P4
01f0: 27 2c 20 27 50 35 27 2c 20 27 4d 36 27 2c 20 27 ', 'P5', 'M6', '
0200: 4d 37 27 5d 2c 0a 20 20 6c 6f 63 72 69 61 6e 3a M7'],. locrian:
0210: 20 5b 27 50 31 27 2c 20 27 6d 32 27 2c 20 27 6d ['P1', 'm2', 'm
0220: 33 27 2c 20 27 50 34 27 2c 20 27 64 35 27 2c 20 3', 'P4', 'd5',
0230: 27 6d 36 27 2c 20 27 6d 37 27 5d 2c 0a 20 20 6c 'm6', 'm7'],. l
0240: 79 64 69 61 6e 3a 20 5b 27 50 31 27 2c 20 27 4d ydian: ['P1', 'M
0250: 32 27 2c 20 27 4d 33 27 2c 20 27 41 34 27 2c 20 2', 'M3', 'A4',
0260: 27 50 35 27 2c 20 27 4d 36 27 2c 20 27 4d 37 27 'P5', 'M6', 'M7'
0270: 5d 2c 0a 20 20 6d 61 6a 6f 72 70 65 6e 74 61 74 ],. majorpentat
0280: 6f 6e 69 63 3a 20 5b 27 50 31 27 2c 20 27 4d 32 onic: ['P1', 'M2
0290: 27 2c 20 27 4d 33 27 2c 20 27 50 35 27 2c 20 27 ', 'M3', 'P5', '
02a0: 4d 36 27 5d 2c 0a 20 20 6d 65 6c 6f 64 69 63 6d M6'],. melodicm
02b0: 69 6e 6f 72 3a 20 5b 27 50 31 27 2c 20 27 4d 32 inor: ['P1', 'M2
02c0: 27 2c 20 27 6d 33 27 2c 20 27 50 34 27 2c 20 27 ', 'm3', 'P4', '
02d0: 50 35 27 2c 20 27 4d 36 27 2c 20 27 4d 37 27 5d P5', 'M6', 'M7']
02e0: 2c 0a 20 20 6d 69 6e 6f 72 70 65 6e 74 61 74 6f ,. minorpentato
02f0: 6e 69 63 3a 20 5b 27 50 31 27 2c 20 27 6d 33 27 nic: ['P1', 'm3'
0300: 2c 20 27 50 34 27 2c 20 27 50 35 27 2c 20 27 6d , 'P4', 'P5', 'm
0310: 37 27 5d 2c 0a 20 20 6d 69 78 6f 6c 79 64 69 61 7'],. mixolydia
0320: 6e 3a 20 5b 27 50 31 27 2c 20 27 4d 32 27 2c 20 n: ['P1', 'M2',
0330: 27 4d 33 27 2c 20 27 50 34 27 2c 20 27 50 35 27 'M3', 'P4', 'P5'
0340: 2c 20 27 4d 36 27 2c 20 27 6d 37 27 5d 2c 0a 20 , 'M6', 'm7'],.
0350: 20 70 68 72 79 67 69 61 6e 3a 20 5b 27 50 31 27 phrygian: ['P1'
0360: 2c 20 27 6d 32 27 2c 20 27 6d 33 27 2c 20 27 50 , 'm2', 'm3', 'P
0370: 34 27 2c 20 27 50 35 27 2c 20 27 6d 36 27 2c 20 4', 'P5', 'm6',
0380: 27 6d 37 27 5d 2c 0a 20 20 77 68 6f 6c 65 74 6f 'm7'],. wholeto
0390: 6e 65 3a 20 5b 27 50 31 27 2c 20 27 4d 32 27 2c ne: ['P1', 'M2',
03a0: 20 27 4d 33 27 2c 20 27 41 34 27 2c 20 27 41 35 'M3', 'A4', 'A5
03b0: 27 2c 20 27 41 36 27 5d 0a 7d 3b 0a 0a 2f 2f 20 ', 'A6'].};..//
03c0: 73 79 6e 6f 6e 79 6d 73 0a 73 63 61 6c 65 73 2e synonyms.scales.
03d0: 68 61 72 6d 6f 6e 69 63 63 68 72 6f 6d 61 74 69 harmonicchromati
03e0: 63 20 3d 20 73 63 61 6c 65 73 2e 63 68 72 6f 6d c = scales.chrom
03f0: 61 74 69 63 3b 0a 73 63 61 6c 65 73 2e 6d 69 6e atic;.scales.min
0400: 6f 72 20 3d 20 73 63 61 6c 65 73 2e 61 65 6f 6c or = scales.aeol
0410: 69 61 6e 3b 0a 73 63 61 6c 65 73 2e 6d 61 6a 6f ian;.scales.majo
0420: 72 20 3d 20 73 63 61 6c 65 73 2e 69 6f 6e 69 61 r = scales.ionia
0430: 6e 3b 0a 73 63 61 6c 65 73 2e 66 6c 61 6d 65 6e n;.scales.flamen
0440: 63 6f 20 3d 20 73 63 61 6c 65 73 2e 64 6f 75 62 co = scales.doub
0450: 6c 65 68 61 72 6d 6f 6e 69 63 3b 0a 0a 66 75 6e leharmonic;..fun
0460: 63 74 69 6f 6e 20 53 63 61 6c 65 28 74 6f 6e 69 ction Scale(toni
0470: 63 2c 20 73 63 61 6c 65 29 20 7b 0a 20 20 69 66 c, scale) {. if
0480: 20 28 21 28 74 68 69 73 20 69 6e 73 74 61 6e 63 (!(this instanc
0490: 65 6f 66 20 53 63 61 6c 65 29 29 20 72 65 74 75 eof Scale)) retu
04a0: 72 6e 20 6e 65 77 20 53 63 61 6c 65 28 74 6f 6e rn new Scale(ton
04b0: 69 63 2c 20 73 63 61 6c 65 29 3b 0a 20 20 76 61 ic, scale);. va
04c0: 72 20 73 63 61 6c 65 4e 61 6d 65 2c 20 69 3b 0a r scaleName, i;.
04d0: 20 20 69 66 20 28 21 28 27 63 6f 6f 72 64 27 20 if (!('coord'
04e0: 69 6e 20 74 6f 6e 69 63 29 29 20 7b 0a 20 20 20 in tonic)) {.
04f0: 20 74 68 72 6f 77 20 6e 65 77 20 45 72 72 6f 72 throw new Error
0500: 28 27 49 6e 76 61 6c 69 64 20 54 6f 6e 69 63 27 ('Invalid Tonic'
0510: 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 20 28 74 79 );. }.. if (ty
0520: 70 65 6f 66 20 73 63 61 6c 65 20 3d 3d 3d 20 27 peof scale === '
0530: 73 74 72 69 6e 67 27 29 20 7b 0a 20 20 20 20 73 string') {. s
0540: 63 61 6c 65 4e 61 6d 65 20 3d 20 73 63 61 6c 65 caleName = scale
0550: 3b 0a 20 20 20 20 73 63 61 6c 65 20 3d 20 73 63 ;. scale = sc
0560: 61 6c 65 73 5b 73 63 61 6c 65 5d 3b 0a 20 20 20 ales[scale];.
0570: 20 69 66 20 28 21 73 63 61 6c 65 29 0a 20 20 20 if (!scale).
0580: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 72 72 throw new Err
0590: 6f 72 28 27 49 6e 76 61 6c 69 64 20 53 63 61 6c or('Invalid Scal
05a0: 65 27 29 3b 0a 20 20 7d 20 65 6c 73 65 20 7b 0a e');. } else {.
05b0: 20 20 20 20 66 6f 72 20 28 69 20 69 6e 20 73 63 for (i in sc
05c0: 61 6c 65 73 29 20 7b 0a 20 20 20 20 20 20 69 66 ales) {. if
05d0: 20 28 73 63 61 6c 65 73 2e 68 61 73 4f 77 6e 50 (scales.hasOwnP
05e0: 72 6f 70 65 72 74 79 28 69 29 29 20 7b 0a 20 20 roperty(i)) {.
05f0: 20 20 20 20 20 20 69 66 20 28 73 63 61 6c 65 73 if (scales
0600: 5b 69 5d 2e 74 6f 53 74 72 69 6e 67 28 29 20 3d [i].toString() =
0610: 3d 3d 20 73 63 61 6c 65 2e 74 6f 53 74 72 69 6e == scale.toStrin
0620: 67 28 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 g()) {.
0630: 20 73 63 61 6c 65 4e 61 6d 65 20 3d 20 69 3b 0a scaleName = i;.
0640: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b break;
0650: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 . }.
0660: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 }. }. }..
0670: 74 68 69 73 2e 6e 61 6d 65 20 3d 20 73 63 61 6c this.name = scal
0680: 65 4e 61 6d 65 3b 0a 20 20 74 68 69 73 2e 74 6f eName;. this.to
0690: 6e 69 63 20 3d 20 74 6f 6e 69 63 3b 0a 20 20 74 nic = tonic;. t
06a0: 68 69 73 2e 73 63 61 6c 65 20 3d 20 73 63 61 6c his.scale = scal
06b0: 65 3b 0a 7d 0a 0a 53 63 61 6c 65 2e 70 72 6f 74 e;.}..Scale.prot
06c0: 6f 74 79 70 65 20 3d 20 7b 0a 20 20 6e 6f 74 65 otype = {. note
06d0: 73 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a s: function() {.
06e0: 20 20 20 20 76 61 72 20 6e 6f 74 65 73 20 3d 20 var notes =
06f0: 5b 5d 3b 0a 0a 20 20 20 20 66 6f 72 20 28 76 61 [];.. for (va
0700: 72 20 69 20 3d 20 30 2c 20 6c 65 6e 67 74 68 20 r i = 0, length
0710: 3d 20 74 68 69 73 2e 73 63 61 6c 65 2e 6c 65 6e = this.scale.len
0720: 67 74 68 3b 20 69 20 3c 20 6c 65 6e 67 74 68 3b gth; i < length;
0730: 20 69 2b 2b 29 20 7b 0a 20 20 20 20 20 20 6e 6f i++) {. no
0740: 74 65 73 2e 70 75 73 68 28 74 68 69 73 2e 74 6f tes.push(this.to
0750: 6e 69 63 2e 69 6e 74 65 72 76 61 6c 28 74 68 69 nic.interval(thi
0760: 73 2e 73 63 61 6c 65 5b 69 5d 29 29 3b 0a 20 20 s.scale[i]));.
0770: 20 20 7d 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 }.. return
0780: 6e 6f 74 65 73 3b 0a 20 20 7d 2c 0a 0a 20 20 73 notes;. },.. s
0790: 69 6d 70 6c 65 3a 20 66 75 6e 63 74 69 6f 6e 28 imple: function(
07a0: 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 74 ) {. return t
07b0: 68 69 73 2e 6e 6f 74 65 73 28 29 2e 6d 61 70 28 his.notes().map(
07c0: 66 75 6e 63 74 69 6f 6e 28 6e 29 20 7b 20 72 65 function(n) { re
07d0: 74 75 72 6e 20 6e 2e 74 6f 53 74 72 69 6e 67 28 turn n.toString(
07e0: 74 72 75 65 29 3b 20 7d 29 3b 0a 20 20 7d 2c 0a true); });. },.
07f0: 0a 20 20 74 79 70 65 3a 20 66 75 6e 63 74 69 6f . type: functio
0800: 6e 28 29 20 7b 0a 20 20 20 20 76 61 72 20 6c 65 n() {. var le
0810: 6e 67 74 68 20 3d 20 74 68 69 73 2e 73 63 61 6c ngth = this.scal
0820: 65 2e 6c 65 6e 67 74 68 20 2d 20 32 3b 0a 20 20 e.length - 2;.
0830: 20 20 69 66 20 28 6c 65 6e 67 74 68 20 3c 20 38 if (length < 8
0840: 29 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e ) {. return
0850: 20 5b 27 64 69 27 2c 20 27 74 72 69 27 2c 20 27 ['di', 'tri', '
0860: 74 65 74 72 61 27 2c 20 27 70 65 6e 74 61 27 2c tetra', 'penta',
0870: 20 27 68 65 78 61 27 2c 20 27 68 65 70 74 61 27 'hexa', 'hepta'
0880: 2c 20 27 6f 63 74 61 27 5d 5b 6c 65 6e 67 74 68 , 'octa'][length
0890: 5d 20 2b 0a 20 20 20 20 20 20 20 20 27 74 6f 6e ] +. 'ton
08a0: 69 63 27 3b 0a 20 20 20 20 7d 0a 20 20 7d 2c 0a ic';. }. },.
08b0: 0a 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e . get: function
08c0: 28 69 29 20 7b 0a 20 20 20 20 76 61 72 20 69 73 (i) {. var is
08d0: 53 74 65 70 53 74 72 20 3d 20 74 79 70 65 6f 66 StepStr = typeof
08e0: 20 69 20 3d 3d 3d 20 27 73 74 72 69 6e 67 27 20 i === 'string'
08f0: 26 26 20 69 20 69 6e 20 6b 6e 6f 77 6c 65 64 67 && i in knowledg
0900: 65 2e 73 74 65 70 4e 75 6d 62 65 72 3b 0a 20 20 e.stepNumber;.
0910: 20 20 69 20 3d 20 69 73 53 74 65 70 53 74 72 20 i = isStepStr
0920: 3f 20 6b 6e 6f 77 6c 65 64 67 65 2e 73 74 65 70 ? knowledge.step
0930: 4e 75 6d 62 65 72 5b 69 5d 20 3a 20 69 3b 0a 20 Number[i] : i;.
0940: 20 20 20 76 61 72 20 6c 65 6e 20 3d 20 74 68 69 var len = thi
0950: 73 2e 73 63 61 6c 65 2e 6c 65 6e 67 74 68 3b 0a s.scale.length;.
0960: 20 20 20 20 76 61 72 20 69 6e 74 65 72 76 61 6c var interval
0970: 2c 20 6f 63 74 61 76 65 73 3b 0a 0a 20 20 20 20 , octaves;..
0980: 69 66 20 28 69 20 3c 20 30 29 20 7b 0a 20 20 20 if (i < 0) {.
0990: 20 20 20 69 6e 74 65 72 76 61 6c 20 3d 20 74 68 interval = th
09a0: 69 73 2e 73 63 61 6c 65 5b 69 20 25 20 6c 65 6e is.scale[i % len
09b0: 20 2b 20 6c 65 6e 20 2d 20 31 5d 3b 0a 20 20 20 + len - 1];.
09c0: 20 20 20 6f 63 74 61 76 65 73 20 3d 20 4d 61 74 octaves = Mat
09d0: 68 2e 66 6c 6f 6f 72 28 28 69 20 2d 20 31 29 20 h.floor((i - 1)
09e0: 2f 20 6c 65 6e 29 3b 0a 20 20 20 20 7d 20 65 6c / len);. } el
09f0: 73 65 20 69 66 20 28 69 20 25 20 6c 65 6e 20 3d se if (i % len =
0a00: 3d 3d 20 30 29 20 7b 0a 20 20 20 20 20 20 69 6e == 0) {. in
0a10: 74 65 72 76 61 6c 20 3d 20 74 68 69 73 2e 73 63 terval = this.sc
0a20: 61 6c 65 5b 6c 65 6e 20 2d 20 31 5d 3b 0a 20 20 ale[len - 1];.
0a30: 20 20 20 20 6f 63 74 61 76 65 73 20 3d 20 28 69 octaves = (i
0a40: 20 2f 20 6c 65 6e 29 20 2d 20 31 3b 0a 20 20 20 / len) - 1;.
0a50: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 } else {.
0a60: 69 6e 74 65 72 76 61 6c 20 3d 20 74 68 69 73 2e interval = this.
0a70: 73 63 61 6c 65 5b 69 20 25 20 6c 65 6e 20 2d 20 scale[i % len -
0a80: 31 5d 3b 0a 20 20 20 20 20 20 6f 63 74 61 76 65 1];. octave
0a90: 73 20 3d 20 4d 61 74 68 2e 66 6c 6f 6f 72 28 69 s = Math.floor(i
0aa0: 20 2f 20 6c 65 6e 29 3b 0a 20 20 20 20 7d 0a 0a / len);. }..
0ab0: 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e return this.
0ac0: 74 6f 6e 69 63 2e 69 6e 74 65 72 76 61 6c 28 69 tonic.interval(i
0ad0: 6e 74 65 72 76 61 6c 29 2e 69 6e 74 65 72 76 61 nterval).interva
0ae0: 6c 28 6e 65 77 20 49 6e 74 65 72 76 61 6c 28 5b l(new Interval([
0af0: 6f 63 74 61 76 65 73 2c 20 30 5d 29 29 3b 0a 20 octaves, 0]));.
0b00: 20 7d 2c 0a 0a 20 20 73 6f 6c 66 65 67 65 3a 20 },.. solfege:
0b10: 66 75 6e 63 74 69 6f 6e 28 69 6e 64 65 78 2c 20 function(index,
0b20: 73 68 6f 77 4f 63 74 61 76 65 73 29 20 7b 0a 20 showOctaves) {.
0b30: 20 20 20 69 66 20 28 69 6e 64 65 78 29 0a 20 20 if (index).
0b40: 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e return this.
0b50: 67 65 74 28 69 6e 64 65 78 29 2e 73 6f 6c 66 65 get(index).solfe
0b60: 67 65 28 74 68 69 73 2c 20 73 68 6f 77 4f 63 74 ge(this, showOct
0b70: 61 76 65 73 29 3b 0a 0a 20 20 20 20 72 65 74 75 aves);.. retu
0b80: 72 6e 20 74 68 69 73 2e 6e 6f 74 65 73 28 29 2e rn this.notes().
0b90: 6d 61 70 28 66 75 6e 63 74 69 6f 6e 28 6e 29 20 map(function(n)
0ba0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e {. return n
0bb0: 2e 73 6f 6c 66 65 67 65 28 74 68 69 73 2c 20 73 .solfege(this, s
0bc0: 68 6f 77 4f 63 74 61 76 65 73 29 3b 0a 20 20 20 howOctaves);.
0bd0: 20 7d 29 3b 0a 20 20 7d 2c 0a 0a 20 20 69 6e 74 });. },.. int
0be0: 65 72 76 61 6c 3a 20 66 75 6e 63 74 69 6f 6e 28 erval: function(
0bf0: 69 6e 74 65 72 76 61 6c 29 20 7b 0a 20 20 20 20 interval) {.
0c00: 69 6e 74 65 72 76 61 6c 20 3d 20 28 74 79 70 65 interval = (type
0c10: 6f 66 20 69 6e 74 65 72 76 61 6c 20 3d 3d 3d 20 of interval ===
0c20: 27 73 74 72 69 6e 67 27 29 20 3f 0a 20 20 20 20 'string') ?.
0c30: 20 20 49 6e 74 65 72 76 61 6c 2e 74 6f 43 6f 6f Interval.toCoo
0c40: 72 64 28 69 6e 74 65 72 76 61 6c 29 20 3a 20 69 rd(interval) : i
0c50: 6e 74 65 72 76 61 6c 3b 0a 20 20 20 20 72 65 74 nterval;. ret
0c60: 75 72 6e 20 6e 65 77 20 53 63 61 6c 65 28 74 68 urn new Scale(th
0c70: 69 73 2e 74 6f 6e 69 63 2e 69 6e 74 65 72 76 61 is.tonic.interva
0c80: 6c 28 69 6e 74 65 72 76 61 6c 29 2c 20 74 68 69 l(interval), thi
0c90: 73 2e 73 63 61 6c 65 29 3b 0a 20 20 7d 2c 0a 0a s.scale);. },..
0ca0: 20 20 74 72 61 6e 73 70 6f 73 65 3a 20 66 75 6e transpose: fun
0cb0: 63 74 69 6f 6e 28 69 6e 74 65 72 76 61 6c 29 20 ction(interval)
0cc0: 7b 0a 20 20 20 20 76 61 72 20 73 63 61 6c 65 20 {. var scale
0cd0: 3d 20 74 68 69 73 2e 69 6e 74 65 72 76 61 6c 28 = this.interval(
0ce0: 69 6e 74 65 72 76 61 6c 29 3b 0a 20 20 20 20 74 interval);. t
0cf0: 68 69 73 2e 73 63 61 6c 65 20 3d 20 73 63 61 6c his.scale = scal
0d00: 65 2e 73 63 61 6c 65 3b 0a 20 20 20 20 74 68 69 e.scale;. thi
0d10: 73 2e 74 6f 6e 69 63 20 3d 20 73 63 61 6c 65 2e s.tonic = scale.
0d20: 74 6f 6e 69 63 3b 0a 0a 20 20 20 20 72 65 74 75 tonic;.. retu
0d30: 72 6e 20 74 68 69 73 3b 0a 20 20 7d 0a 7d 3b 0a rn this;. }.};.
0d40: 53 63 61 6c 65 2e 4b 4e 4f 57 4e 5f 53 43 41 4c Scale.KNOWN_SCAL
0d50: 45 53 20 3d 20 4f 62 6a 65 63 74 2e 6b 65 79 73 ES = Object.keys
0d60: 28 73 63 61 6c 65 73 29 3b 0a 0a 6d 6f 64 75 6c (scales);..modul
0d70: 65 2e 65 78 70 6f 72 74 73 20 3d 20 53 63 61 6c e.exports = Scal
0d80: 65 3b 0a e;.