⌈⌋ ⎇ branch:  Bitrhythm


Hex Artifact Content

Artifact 6e161239be4b5a6a20d1ae4c2a361da28d921323afb4b8c8216bb9829952a9ce:


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;.