⌈⌋ ⎇ branch:  Bitrhythm


Hex Artifact Content

Artifact 22aca04e4a622d1db03249bb92f49f78c43c530c153b49e08700a225f1f37d69:


0000: 28 66 75 6e 63 74 69 6f 6e 28 66 29 7b 69 66 28  (function(f){if(
0010: 74 79 70 65 6f 66 20 65 78 70 6f 72 74 73 3d 3d  typeof exports==
0020: 3d 22 6f 62 6a 65 63 74 22 26 26 74 79 70 65 6f  ="object"&&typeo
0030: 66 20 6d 6f 64 75 6c 65 21 3d 3d 22 75 6e 64 65  f module!=="unde
0040: 66 69 6e 65 64 22 29 7b 6d 6f 64 75 6c 65 2e 65  fined"){module.e
0050: 78 70 6f 72 74 73 3d 66 28 29 7d 65 6c 73 65 20  xports=f()}else 
0060: 69 66 28 74 79 70 65 6f 66 20 64 65 66 69 6e 65  if(typeof define
0070: 3d 3d 3d 22 66 75 6e 63 74 69 6f 6e 22 26 26 64  ==="function"&&d
0080: 65 66 69 6e 65 2e 61 6d 64 29 7b 64 65 66 69 6e  efine.amd){defin
0090: 65 28 5b 5d 2c 66 29 7d 65 6c 73 65 7b 76 61 72  e([],f)}else{var
00a0: 20 67 3b 69 66 28 74 79 70 65 6f 66 20 77 69 6e   g;if(typeof win
00b0: 64 6f 77 21 3d 3d 22 75 6e 64 65 66 69 6e 65 64  dow!=="undefined
00c0: 22 29 7b 67 3d 77 69 6e 64 6f 77 7d 65 6c 73 65  "){g=window}else
00d0: 20 69 66 28 74 79 70 65 6f 66 20 67 6c 6f 62 61   if(typeof globa
00e0: 6c 21 3d 3d 22 75 6e 64 65 66 69 6e 65 64 22 29  l!=="undefined")
00f0: 7b 67 3d 67 6c 6f 62 61 6c 7d 65 6c 73 65 20 69  {g=global}else i
0100: 66 28 74 79 70 65 6f 66 20 73 65 6c 66 21 3d 3d  f(typeof self!==
0110: 22 75 6e 64 65 66 69 6e 65 64 22 29 7b 67 3d 73  "undefined"){g=s
0120: 65 6c 66 7d 65 6c 73 65 7b 67 3d 74 68 69 73 7d  elf}else{g=this}
0130: 67 2e 74 65 6f 72 69 61 20 3d 20 66 28 29 7d 7d  g.teoria = f()}}
0140: 29 28 66 75 6e 63 74 69 6f 6e 28 29 7b 76 61 72  )(function(){var
0150: 20 64 65 66 69 6e 65 2c 6d 6f 64 75 6c 65 2c 65   define,module,e
0160: 78 70 6f 72 74 73 3b 72 65 74 75 72 6e 20 28 66  xports;return (f
0170: 75 6e 63 74 69 6f 6e 20 65 28 74 2c 6e 2c 72 29  unction e(t,n,r)
0180: 7b 66 75 6e 63 74 69 6f 6e 20 73 28 6f 2c 75 29  {function s(o,u)
0190: 7b 69 66 28 21 6e 5b 6f 5d 29 7b 69 66 28 21 74  {if(!n[o]){if(!t
01a0: 5b 6f 5d 29 7b 76 61 72 20 61 3d 74 79 70 65 6f  [o]){var a=typeo
01b0: 66 20 72 65 71 75 69 72 65 3d 3d 22 66 75 6e 63  f require=="func
01c0: 74 69 6f 6e 22 26 26 72 65 71 75 69 72 65 3b 69  tion"&&require;i
01d0: 66 28 21 75 26 26 61 29 72 65 74 75 72 6e 20 61  f(!u&&a)return a
01e0: 28 6f 2c 21 30 29 3b 69 66 28 69 29 72 65 74 75  (o,!0);if(i)retu
01f0: 72 6e 20 69 28 6f 2c 21 30 29 3b 76 61 72 20 66  rn i(o,!0);var f
0200: 3d 6e 65 77 20 45 72 72 6f 72 28 22 43 61 6e 6e  =new Error("Cann
0210: 6f 74 20 66 69 6e 64 20 6d 6f 64 75 6c 65 20 27  ot find module '
0220: 22 2b 6f 2b 22 27 22 29 3b 74 68 72 6f 77 20 66  "+o+"'");throw f
0230: 2e 63 6f 64 65 3d 22 4d 4f 44 55 4c 45 5f 4e 4f  .code="MODULE_NO
0240: 54 5f 46 4f 55 4e 44 22 2c 66 7d 76 61 72 20 6c  T_FOUND",f}var l
0250: 3d 6e 5b 6f 5d 3d 7b 65 78 70 6f 72 74 73 3a 7b  =n[o]={exports:{
0260: 7d 7d 3b 74 5b 6f 5d 5b 30 5d 2e 63 61 6c 6c 28  }};t[o][0].call(
0270: 6c 2e 65 78 70 6f 72 74 73 2c 66 75 6e 63 74 69  l.exports,functi
0280: 6f 6e 28 65 29 7b 76 61 72 20 6e 3d 74 5b 6f 5d  on(e){var n=t[o]
0290: 5b 31 5d 5b 65 5d 3b 72 65 74 75 72 6e 20 73 28  [1][e];return s(
02a0: 6e 3f 6e 3a 65 29 7d 2c 6c 2c 6c 2e 65 78 70 6f  n?n:e)},l,l.expo
02b0: 72 74 73 2c 65 2c 74 2c 6e 2c 72 29 7d 72 65 74  rts,e,t,n,r)}ret
02c0: 75 72 6e 20 6e 5b 6f 5d 2e 65 78 70 6f 72 74 73  urn n[o].exports
02d0: 7d 76 61 72 20 69 3d 74 79 70 65 6f 66 20 72 65  }var i=typeof re
02e0: 71 75 69 72 65 3d 3d 22 66 75 6e 63 74 69 6f 6e  quire=="function
02f0: 22 26 26 72 65 71 75 69 72 65 3b 66 6f 72 28 76  "&&require;for(v
0300: 61 72 20 6f 3d 30 3b 6f 3c 72 2e 6c 65 6e 67 74  ar o=0;o<r.lengt
0310: 68 3b 6f 2b 2b 29 73 28 72 5b 6f 5d 29 3b 72 65  h;o++)s(r[o]);re
0320: 74 75 72 6e 20 73 7d 29 28 7b 31 3a 5b 66 75 6e  turn s})({1:[fun
0330: 63 74 69 6f 6e 28 72 65 71 75 69 72 65 2c 6d 6f  ction(require,mo
0340: 64 75 6c 65 2c 65 78 70 6f 72 74 73 29 7b 0a 76  dule,exports){.v
0350: 61 72 20 4e 6f 74 65 20 3d 20 72 65 71 75 69 72  ar Note = requir
0360: 65 28 27 2e 2f 6c 69 62 2f 6e 6f 74 65 27 29 3b  e('./lib/note');
0370: 0a 76 61 72 20 49 6e 74 65 72 76 61 6c 20 3d 20  .var Interval = 
0380: 72 65 71 75 69 72 65 28 27 2e 2f 6c 69 62 2f 69  require('./lib/i
0390: 6e 74 65 72 76 61 6c 27 29 3b 0a 76 61 72 20 43  nterval');.var C
03a0: 68 6f 72 64 20 3d 20 72 65 71 75 69 72 65 28 27  hord = require('
03b0: 2e 2f 6c 69 62 2f 63 68 6f 72 64 27 29 3b 0a 76  ./lib/chord');.v
03c0: 61 72 20 53 63 61 6c 65 20 3d 20 72 65 71 75 69  ar Scale = requi
03d0: 72 65 28 27 2e 2f 6c 69 62 2f 73 63 61 6c 65 27  re('./lib/scale'
03e0: 29 3b 0a 0a 76 61 72 20 74 65 6f 72 69 61 3b 0a  );..var teoria;.
03f0: 0a 2f 2f 20 6e 65 76 65 72 20 74 68 6f 75 67 68  .// never though
0400: 74 20 49 20 77 6f 75 6c 64 20 77 72 69 74 65 20  t I would write 
0410: 74 68 69 73 2c 20 62 75 74 3a 20 4c 65 67 61 63  this, but: Legac
0420: 79 20 73 75 70 70 6f 72 74 0a 66 75 6e 63 74 69  y support.functi
0430: 6f 6e 20 69 6e 74 65 72 76 61 6c 43 6f 6e 73 74  on intervalConst
0440: 72 75 63 74 6f 72 28 66 72 6f 6d 2c 20 74 6f 29  ructor(from, to)
0450: 20 7b 0a 20 20 2f 2f 20 43 6f 6e 73 74 72 75 63   {.  // Construc
0460: 74 20 61 20 49 6e 74 65 72 76 61 6c 20 6f 62 6a  t a Interval obj
0470: 65 63 74 20 66 72 6f 6d 20 73 74 72 69 6e 67 20  ect from string 
0480: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a 20  representation. 
0490: 20 69 66 20 28 74 79 70 65 6f 66 20 66 72 6f 6d   if (typeof from
04a0: 20 3d 3d 3d 20 27 73 74 72 69 6e 67 27 29 0a 20   === 'string'). 
04b0: 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72 76     return Interv
04c0: 61 6c 2e 74 6f 43 6f 6f 72 64 28 66 72 6f 6d 29  al.toCoord(from)
04d0: 3b 0a 0a 20 20 69 66 20 28 74 79 70 65 6f 66 20  ;..  if (typeof 
04e0: 74 6f 20 3d 3d 3d 20 27 73 74 72 69 6e 67 27 20  to === 'string' 
04f0: 26 26 20 66 72 6f 6d 20 69 6e 73 74 61 6e 63 65  && from instance
0500: 6f 66 20 4e 6f 74 65 29 0a 20 20 20 20 72 65 74  of Note).    ret
0510: 75 72 6e 20 49 6e 74 65 72 76 61 6c 2e 66 72 6f  urn Interval.fro
0520: 6d 28 66 72 6f 6d 2c 20 49 6e 74 65 72 76 61 6c  m(from, Interval
0530: 2e 74 6f 43 6f 6f 72 64 28 74 6f 29 29 3b 0a 0a  .toCoord(to));..
0540: 20 20 69 66 20 28 74 6f 20 69 6e 73 74 61 6e 63    if (to instanc
0550: 65 6f 66 20 49 6e 74 65 72 76 61 6c 20 26 26 20  eof Interval && 
0560: 66 72 6f 6d 20 69 6e 73 74 61 6e 63 65 6f 66 20  from instanceof 
0570: 4e 6f 74 65 29 0a 20 20 20 20 72 65 74 75 72 6e  Note).    return
0580: 20 49 6e 74 65 72 76 61 6c 2e 66 72 6f 6d 28 66   Interval.from(f
0590: 72 6f 6d 2c 20 74 6f 29 3b 0a 0a 20 20 69 66 20  rom, to);..  if 
05a0: 28 74 6f 20 69 6e 73 74 61 6e 63 65 6f 66 20 4e  (to instanceof N
05b0: 6f 74 65 20 26 26 20 66 72 6f 6d 20 69 6e 73 74  ote && from inst
05c0: 61 6e 63 65 6f 66 20 4e 6f 74 65 29 0a 20 20 20  anceof Note).   
05d0: 20 72 65 74 75 72 6e 20 49 6e 74 65 72 76 61 6c   return Interval
05e0: 2e 62 65 74 77 65 65 6e 28 66 72 6f 6d 2c 20 74  .between(from, t
05f0: 6f 29 3b 0a 0a 20 20 74 68 72 6f 77 20 6e 65 77  o);..  throw new
0600: 20 45 72 72 6f 72 28 27 49 6e 76 61 6c 69 64 20   Error('Invalid 
0610: 70 61 72 61 6d 65 74 65 72 73 27 29 3b 0a 7d 0a  parameters');.}.
0620: 0a 69 6e 74 65 72 76 61 6c 43 6f 6e 73 74 72 75  .intervalConstru
0630: 63 74 6f 72 2e 74 6f 43 6f 6f 72 64 20 3d 20 49  ctor.toCoord = I
0640: 6e 74 65 72 76 61 6c 2e 74 6f 43 6f 6f 72 64 3b  nterval.toCoord;
0650: 0a 69 6e 74 65 72 76 61 6c 43 6f 6e 73 74 72 75  .intervalConstru
0660: 63 74 6f 72 2e 66 72 6f 6d 20 3d 20 49 6e 74 65  ctor.from = Inte
0670: 72 76 61 6c 2e 66 72 6f 6d 3b 0a 69 6e 74 65 72  rval.from;.inter
0680: 76 61 6c 43 6f 6e 73 74 72 75 63 74 6f 72 2e 62  valConstructor.b
0690: 65 74 77 65 65 6e 20 3d 20 49 6e 74 65 72 76 61  etween = Interva
06a0: 6c 2e 62 65 74 77 65 65 6e 3b 0a 69 6e 74 65 72  l.between;.inter
06b0: 76 61 6c 43 6f 6e 73 74 72 75 63 74 6f 72 2e 69  valConstructor.i
06c0: 6e 76 65 72 74 20 3d 20 49 6e 74 65 72 76 61 6c  nvert = Interval
06d0: 2e 69 6e 76 65 72 74 3b 0a 0a 66 75 6e 63 74 69  .invert;..functi
06e0: 6f 6e 20 6e 6f 74 65 43 6f 6e 73 74 72 75 63 74  on noteConstruct
06f0: 6f 72 28 6e 61 6d 65 2c 20 64 75 72 61 74 69 6f  or(name, duratio
0700: 6e 29 20 7b 0a 20 20 69 66 20 28 74 79 70 65 6f  n) {.  if (typeo
0710: 66 20 6e 61 6d 65 20 3d 3d 3d 20 27 73 74 72 69  f name === 'stri
0720: 6e 67 27 29 0a 20 20 20 20 72 65 74 75 72 6e 20  ng').    return 
0730: 4e 6f 74 65 2e 66 72 6f 6d 53 74 72 69 6e 67 28  Note.fromString(
0740: 6e 61 6d 65 2c 20 64 75 72 61 74 69 6f 6e 29 3b  name, duration);
0750: 0a 20 20 65 6c 73 65 0a 20 20 20 20 72 65 74 75  .  else.    retu
0760: 72 6e 20 6e 65 77 20 4e 6f 74 65 28 6e 61 6d 65  rn new Note(name
0770: 2c 20 64 75 72 61 74 69 6f 6e 29 3b 0a 7d 0a 0a  , duration);.}..
0780: 6e 6f 74 65 43 6f 6e 73 74 72 75 63 74 6f 72 2e  noteConstructor.
0790: 66 72 6f 6d 53 74 72 69 6e 67 20 3d 20 4e 6f 74  fromString = Not
07a0: 65 2e 66 72 6f 6d 53 74 72 69 6e 67 3b 0a 6e 6f  e.fromString;.no
07b0: 74 65 43 6f 6e 73 74 72 75 63 74 6f 72 2e 66 72  teConstructor.fr
07c0: 6f 6d 4b 65 79 20 3d 20 4e 6f 74 65 2e 66 72 6f  omKey = Note.fro
07d0: 6d 4b 65 79 3b 0a 6e 6f 74 65 43 6f 6e 73 74 72  mKey;.noteConstr
07e0: 75 63 74 6f 72 2e 66 72 6f 6d 46 72 65 71 75 65  uctor.fromFreque
07f0: 6e 63 79 20 3d 20 4e 6f 74 65 2e 66 72 6f 6d 46  ncy = Note.fromF
0800: 72 65 71 75 65 6e 63 79 3b 0a 6e 6f 74 65 43 6f  requency;.noteCo
0810: 6e 73 74 72 75 63 74 6f 72 2e 66 72 6f 6d 4d 49  nstructor.fromMI
0820: 44 49 20 3d 20 4e 6f 74 65 2e 66 72 6f 6d 4d 49  DI = Note.fromMI
0830: 44 49 3b 0a 0a 66 75 6e 63 74 69 6f 6e 20 63 68  DI;..function ch
0840: 6f 72 64 43 6f 6e 73 74 72 75 63 74 6f 72 28 6e  ordConstructor(n
0850: 61 6d 65 2c 20 73 79 6d 62 6f 6c 29 20 7b 0a 20  ame, symbol) {. 
0860: 20 69 66 20 28 74 79 70 65 6f 66 20 6e 61 6d 65   if (typeof name
0870: 20 3d 3d 3d 20 27 73 74 72 69 6e 67 27 29 20 7b   === 'string') {
0880: 0a 20 20 20 20 76 61 72 20 72 6f 6f 74 2c 20 6f  .    var root, o
0890: 63 74 61 76 65 3b 0a 20 20 20 20 72 6f 6f 74 20  ctave;.    root 
08a0: 3d 20 6e 61 6d 65 2e 6d 61 74 63 68 28 2f 5e 28  = name.match(/^(
08b0: 5b 61 2d 68 5d 29 28 78 7c 23 7c 62 62 7c 62 3f  [a-h])(x|#|bb|b?
08c0: 29 2f 69 29 3b 0a 20 20 20 20 69 66 20 28 72 6f  )/i);.    if (ro
08d0: 6f 74 20 26 26 20 72 6f 6f 74 5b 30 5d 29 20 7b  ot && root[0]) {
08e0: 0a 20 20 20 20 20 20 6f 63 74 61 76 65 20 3d 20  .      octave = 
08f0: 74 79 70 65 6f 66 20 73 79 6d 62 6f 6c 20 3d 3d  typeof symbol ==
0900: 3d 20 27 6e 75 6d 62 65 72 27 20 3f 20 73 79 6d  = 'number' ? sym
0910: 62 6f 6c 2e 74 6f 53 74 72 69 6e 67 28 31 30 29  bol.toString(10)
0920: 20 3a 20 27 34 27 3b 0a 20 20 20 20 20 20 72 65   : '4';.      re
0930: 74 75 72 6e 20 6e 65 77 20 43 68 6f 72 64 28 4e  turn new Chord(N
0940: 6f 74 65 2e 66 72 6f 6d 53 74 72 69 6e 67 28 72  ote.fromString(r
0950: 6f 6f 74 5b 30 5d 2e 74 6f 4c 6f 77 65 72 43 61  oot[0].toLowerCa
0960: 73 65 28 29 20 2b 20 6f 63 74 61 76 65 29 2c 0a  se() + octave),.
0970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0980: 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65              name
0990: 2e 73 75 62 73 74 72 28 72 6f 6f 74 5b 30 5d 2e  .substr(root[0].
09a0: 6c 65 6e 67 74 68 29 29 3b 0a 20 20 20 20 7d 0a  length));.    }.
09b0: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 6e 61 6d    } else if (nam
09c0: 65 20 69 6e 73 74 61 6e 63 65 6f 66 20 4e 6f 74  e instanceof Not
09d0: 65 29 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 65  e).    return ne
09e0: 77 20 43 68 6f 72 64 28 6e 61 6d 65 2c 20 73 79  w Chord(name, sy
09f0: 6d 62 6f 6c 29 3b 0a 0a 20 20 74 68 72 6f 77 20  mbol);..  throw 
0a00: 6e 65 77 20 45 72 72 6f 72 28 27 49 6e 76 61 6c  new Error('Inval
0a10: 69 64 20 43 68 6f 72 64 2e 20 43 6f 75 6c 64 6e  id Chord. Couldn
0a20: 5c 27 74 20 66 69 6e 64 20 6e 6f 74 65 20 6e 61  \'t find note na
0a30: 6d 65 27 29 3b 0a 7d 0a 0a 66 75 6e 63 74 69 6f  me');.}..functio
0a40: 6e 20 73 63 61 6c 65 43 6f 6e 73 74 72 75 63 74  n scaleConstruct
0a50: 6f 72 28 74 6f 6e 69 63 2c 20 73 63 61 6c 65 29  or(tonic, scale)
0a60: 20 7b 0a 20 20 74 6f 6e 69 63 20 3d 20 28 74 6f   {.  tonic = (to
0a70: 6e 69 63 20 69 6e 73 74 61 6e 63 65 6f 66 20 4e  nic instanceof N
0a80: 6f 74 65 29 20 3f 20 74 6f 6e 69 63 20 3a 20 74  ote) ? tonic : t
0a90: 65 6f 72 69 61 2e 6e 6f 74 65 28 74 6f 6e 69 63  eoria.note(tonic
0aa0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 6e 65 77 20  );.  return new 
0ab0: 53 63 61 6c 65 28 74 6f 6e 69 63 2c 20 73 63 61  Scale(tonic, sca
0ac0: 6c 65 29 3b 0a 7d 0a 0a 74 65 6f 72 69 61 20 3d  le);.}..teoria =
0ad0: 20 7b 0a 20 20 6e 6f 74 65 3a 20 6e 6f 74 65 43   {.  note: noteC
0ae0: 6f 6e 73 74 72 75 63 74 6f 72 2c 0a 0a 20 20 63  onstructor,..  c
0af0: 68 6f 72 64 3a 20 63 68 6f 72 64 43 6f 6e 73 74  hord: chordConst
0b00: 72 75 63 74 6f 72 2c 0a 0a 20 20 69 6e 74 65 72  ructor,..  inter
0b10: 76 61 6c 3a 20 69 6e 74 65 72 76 61 6c 43 6f 6e  val: intervalCon
0b20: 73 74 72 75 63 74 6f 72 2c 0a 0a 20 20 73 63 61  structor,..  sca
0b30: 6c 65 3a 20 73 63 61 6c 65 43 6f 6e 73 74 72 75  le: scaleConstru
0b40: 63 74 6f 72 2c 0a 0a 20 20 4e 6f 74 65 3a 20 4e  ctor,..  Note: N
0b50: 6f 74 65 2c 0a 20 20 43 68 6f 72 64 3a 20 43 68  ote,.  Chord: Ch
0b60: 6f 72 64 2c 0a 20 20 53 63 61 6c 65 3a 20 53 63  ord,.  Scale: Sc
0b70: 61 6c 65 2c 0a 20 20 49 6e 74 65 72 76 61 6c 3a  ale,.  Interval:
0b80: 20 49 6e 74 65 72 76 61 6c 0a 7d 3b 0a 0a 0a 72   Interval.};...r
0b90: 65 71 75 69 72 65 28 27 2e 2f 6c 69 62 2f 73 75  equire('./lib/su
0ba0: 67 61 72 27 29 28 74 65 6f 72 69 61 29 3b 0a 65  gar')(teoria);.e
0bb0: 78 70 6f 72 74 73 20 3d 20 6d 6f 64 75 6c 65 2e  xports = module.
0bc0: 65 78 70 6f 72 74 73 20 3d 20 74 65 6f 72 69 61  exports = teoria
0bd0: 3b 0a 0a 7d 2c 7b 22 2e 2f 6c 69 62 2f 63 68 6f  ;..},{"./lib/cho
0be0: 72 64 22 3a 32 2c 22 2e 2f 6c 69 62 2f 69 6e 74  rd":2,"./lib/int
0bf0: 65 72 76 61 6c 22 3a 33 2c 22 2e 2f 6c 69 62 2f  erval":3,"./lib/
0c00: 6e 6f 74 65 22 3a 35 2c 22 2e 2f 6c 69 62 2f 73  note":5,"./lib/s
0c10: 63 61 6c 65 22 3a 36 2c 22 2e 2f 6c 69 62 2f 73  cale":6,"./lib/s
0c20: 75 67 61 72 22 3a 37 7d 5d 2c 32 3a 5b 66 75 6e  ugar":7}],2:[fun
0c30: 63 74 69 6f 6e 28 72 65 71 75 69 72 65 2c 6d 6f  ction(require,mo
0c40: 64 75 6c 65 2c 65 78 70 6f 72 74 73 29 7b 0a 76  dule,exports){.v
0c50: 61 72 20 64 61 63 63 6f 72 64 20 3d 20 72 65 71  ar daccord = req
0c60: 75 69 72 65 28 27 64 61 63 63 6f 72 64 27 29 3b  uire('daccord');
0c70: 0a 76 61 72 20 6b 6e 6f 77 6c 65 64 67 65 20 3d  .var knowledge =
0c80: 20 72 65 71 75 69 72 65 28 27 2e 2f 6b 6e 6f 77   require('./know
0c90: 6c 65 64 67 65 27 29 3b 0a 76 61 72 20 4e 6f 74  ledge');.var Not
0ca0: 65 20 3d 20 72 65 71 75 69 72 65 28 27 2e 2f 6e  e = require('./n
0cb0: 6f 74 65 27 29 3b 0a 76 61 72 20 49 6e 74 65 72  ote');.var Inter
0cc0: 76 61 6c 20 3d 20 72 65 71 75 69 72 65 28 27 2e  val = require('.
0cd0: 2f 69 6e 74 65 72 76 61 6c 27 29 3b 0a 0a 66 75  /interval');..fu
0ce0: 6e 63 74 69 6f 6e 20 43 68 6f 72 64 28 72 6f 6f  nction Chord(roo
0cf0: 74 2c 20 6e 61 6d 65 29 20 7b 0a 20 20 69 66 20  t, name) {.  if 
0d00: 28 21 28 74 68 69 73 20 69 6e 73 74 61 6e 63 65  (!(this instance
0d10: 6f 66 20 43 68 6f 72 64 29 29 20 72 65 74 75 72  of Chord)) retur
0d20: 6e 20 6e 65 77 20 43 68 6f 72 64 28 72 6f 6f 74  n new Chord(root
0d30: 2c 20 6e 61 6d 65 29 3b 0a 20 20 6e 61 6d 65 20  , name);.  name 
0d40: 3d 20 6e 61 6d 65 20 7c 7c 20 27 27 3b 0a 20 20  = name || '';.  
0d50: 74 68 69 73 2e 6e 61 6d 65 20 3d 20 72 6f 6f 74  this.name = root
0d60: 2e 6e 61 6d 65 28 29 2e 74 6f 55 70 70 65 72 43  .name().toUpperC
0d70: 61 73 65 28 29 20 2b 20 72 6f 6f 74 2e 61 63 63  ase() + root.acc
0d80: 69 64 65 6e 74 61 6c 28 29 20 2b 20 6e 61 6d 65  idental() + name
0d90: 3b 0a 20 20 74 68 69 73 2e 73 79 6d 62 6f 6c 20  ;.  this.symbol 
0da0: 3d 20 6e 61 6d 65 3b 0a 20 20 74 68 69 73 2e 72  = name;.  this.r
0db0: 6f 6f 74 20 3d 20 72 6f 6f 74 3b 0a 20 20 74 68  oot = root;.  th
0dc0: 69 73 2e 69 6e 74 65 72 76 61 6c 73 20 3d 20 5b  is.intervals = [
0dd0: 5d 3b 0a 20 20 74 68 69 73 2e 5f 76 6f 69 63 69  ];.  this._voici
0de0: 6e 67 20 3d 20 5b 5d 3b 0a 0a 20 20 76 61 72 20  ng = [];..  var 
0df0: 62 61 73 73 20 3d 20 6e 61 6d 65 2e 73 70 6c 69  bass = name.spli
0e00: 74 28 27 2f 27 29 3b 0a 20 20 69 66 20 28 62 61  t('/');.  if (ba
0e10: 73 73 2e 6c 65 6e 67 74 68 20 3d 3d 3d 20 32 20  ss.length === 2 
0e20: 26 26 20 62 61 73 73 5b 31 5d 2e 74 72 69 6d 28  && bass[1].trim(
0e30: 29 20 21 3d 3d 20 27 39 27 29 20 7b 0a 20 20 20  ) !== '9') {.   
0e40: 20 6e 61 6d 65 20 3d 20 62 61 73 73 5b 30 5d 3b   name = bass[0];
0e50: 0a 20 20 20 20 62 61 73 73 20 3d 20 62 61 73 73  .    bass = bass
0e60: 5b 31 5d 2e 74 72 69 6d 28 29 3b 0a 20 20 7d 20  [1].trim();.  } 
0e70: 65 6c 73 65 20 7b 0a 20 20 20 20 62 61 73 73 20  else {.    bass 
0e80: 3d 20 6e 75 6c 6c 3b 0a 20 20 7d 0a 0a 20 20 74  = null;.  }..  t
0e90: 68 69 73 2e 69 6e 74 65 72 76 61 6c 73 20 3d 20  his.intervals = 
0ea0: 64 61 63 63 6f 72 64 28 6e 61 6d 65 29 2e 6d 61  daccord(name).ma
0eb0: 70 28 49 6e 74 65 72 76 61 6c 2e 74 6f 43 6f 6f  p(Interval.toCoo
0ec0: 72 64 29 3b 0a 20 20 74 68 69 73 2e 5f 76 6f 69  rd);.  this._voi
0ed0: 63 69 6e 67 20 3d 20 74 68 69 73 2e 69 6e 74 65  cing = this.inte
0ee0: 72 76 61 6c 73 2e 73 6c 69 63 65 28 29 3b 0a 0a  rvals.slice();..
0ef0: 20 20 69 66 20 28 62 61 73 73 29 20 7b 0a 20 20    if (bass) {.  
0f00: 20 20 76 61 72 20 69 6e 74 65 72 76 61 6c 73 20    var intervals 
0f10: 3d 20 74 68 69 73 2e 69 6e 74 65 72 76 61 6c 73  = this.intervals
0f20: 2c 20 62 61 73 73 49 6e 74 65 72 76 61 6c 2c 20  , bassInterval, 
0f30: 6e 6f 74 65 3b 0a 20 20 20 20 2f 2f 20 4d 61 6b  note;.    // Mak
0f40: 65 20 73 75 72 65 20 74 68 65 20 62 61 73 73 20  e sure the bass 
0f50: 69 73 20 61 74 6f 70 20 6f 66 20 74 68 65 20 72  is atop of the r
0f60: 6f 6f 74 20 6e 6f 74 65 0a 20 20 20 20 6e 6f 74  oot note.    not
0f70: 65 20 3d 20 4e 6f 74 65 2e 66 72 6f 6d 53 74 72  e = Note.fromStr
0f80: 69 6e 67 28 62 61 73 73 20 2b 20 28 72 6f 6f 74  ing(bass + (root
0f90: 2e 6f 63 74 61 76 65 28 29 20 2b 20 31 29 29 3b  .octave() + 1));
0fa0: 20 2f 2f 20 63 72 75 64 65 0a 0a 20 20 20 20 62   // crude..    b
0fb0: 61 73 73 49 6e 74 65 72 76 61 6c 20 3d 20 49 6e  assInterval = In
0fc0: 74 65 72 76 61 6c 2e 62 65 74 77 65 65 6e 28 72  terval.between(r
0fd0: 6f 6f 74 2c 20 6e 6f 74 65 29 3b 0a 20 20 20 20  oot, note);.    
0fe0: 62 61 73 73 20 3d 20 62 61 73 73 49 6e 74 65 72  bass = bassInter
0ff0: 76 61 6c 2e 73 69 6d 70 6c 65 28 29 3b 0a 20 20  val.simple();.  
1000: 20 20 62 61 73 73 49 6e 74 65 72 76 61 6c 20 3d    bassInterval =
1010: 20 62 61 73 73 49 6e 74 65 72 76 61 6c 2e 69 6e   bassInterval.in
1020: 76 65 72 74 28 29 2e 64 69 72 65 63 74 69 6f 6e  vert().direction
1030: 28 27 64 6f 77 6e 27 29 3b 0a 0a 20 20 20 20 74  ('down');..    t
1040: 68 69 73 2e 5f 76 6f 69 63 69 6e 67 20 3d 20 5b  his._voicing = [
1050: 62 61 73 73 49 6e 74 65 72 76 61 6c 5d 3b 0a 20  bassInterval];. 
1060: 20 20 20 66 6f 72 20 28 76 61 72 20 69 20 3d 20     for (var i = 
1070: 30 2c 20 6c 65 6e 67 74 68 20 3d 20 69 6e 74 65  0, length = inte
1080: 72 76 61 6c 73 2e 6c 65 6e 67 74 68 3b 20 20 69  rvals.length;  i
1090: 20 3c 20 6c 65 6e 67 74 68 3b 20 69 2b 2b 29 20   < length; i++) 
10a0: 7b 0a 20 20 20 20 20 20 69 66 20 28 21 69 6e 74  {.      if (!int
10b0: 65 72 76 61 6c 73 5b 69 5d 2e 73 69 6d 70 6c 65  ervals[i].simple
10c0: 28 29 2e 65 71 75 61 6c 28 62 61 73 73 29 29 0a  ().equal(bass)).
10d0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 76 6f          this._vo
10e0: 69 63 69 6e 67 2e 70 75 73 68 28 69 6e 74 65 72  icing.push(inter
10f0: 76 61 6c 73 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a  vals[i]);.    }.
1100: 20 20 7d 0a 7d 0a 0a 43 68 6f 72 64 2e 70 72 6f    }.}..Chord.pro
1110: 74 6f 74 79 70 65 20 3d 20 7b 0a 20 20 6e 6f 74  totype = {.  not
1120: 65 73 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b  es: function() {
1130: 0a 20 20 20 20 76 61 72 20 72 6f 6f 74 20 3d 20  .    var root = 
1140: 74 68 69 73 2e 72 6f 6f 74 3b 0a 20 20 20 20 72  this.root;.    r
1150: 65 74 75 72 6e 20 74 68 69 73 2e 76 6f 69 63 69  eturn this.voici
1160: 6e 67 28 29 2e 6d 61 70 28 66 75 6e 63 74 69 6f  ng().map(functio
1170: 6e 28 69 6e 74 65 72 76 61 6c 29 20 7b 0a 20 20  n(interval) {.  
1180: 20 20 20 20 72 65 74 75 72 6e 20 72 6f 6f 74 2e      return root.
1190: 69 6e 74 65 72 76 61 6c 28 69 6e 74 65 72 76 61  interval(interva
11a0: 6c 29 3b 0a 20 20 20 20 7d 29 3b 0a 20 20 7d 2c  l);.    });.  },
11b0: 0a 0a 20 20 73 69 6d 70 6c 65 3a 20 66 75 6e 63  ..  simple: func
11c0: 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 72 65 74  tion() {.    ret
11d0: 75 72 6e 20 74 68 69 73 2e 6e 6f 74 65 73 28 29  urn this.notes()
11e0: 2e 6d 61 70 28 66 75 6e 63 74 69 6f 6e 28 6e 29  .map(function(n)
11f0: 20 7b 20 72 65 74 75 72 6e 20 6e 2e 74 6f 53 74   { return n.toSt
1200: 72 69 6e 67 28 74 72 75 65 29 3b 20 7d 29 3b 0a  ring(true); });.
1210: 20 20 7d 2c 0a 0a 20 20 62 61 73 73 3a 20 66 75    },..  bass: fu
1220: 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 72  nction() {.    r
1230: 65 74 75 72 6e 20 74 68 69 73 2e 72 6f 6f 74 2e  eturn this.root.
1240: 69 6e 74 65 72 76 61 6c 28 74 68 69 73 2e 5f 76  interval(this._v
1250: 6f 69 63 69 6e 67 5b 30 5d 29 3b 0a 20 20 7d 2c  oicing[0]);.  },
1260: 0a 0a 20 20 76 6f 69 63 69 6e 67 3a 20 66 75 6e  ..  voicing: fun
1270: 63 74 69 6f 6e 28 76 6f 69 63 69 6e 67 29 20 7b  ction(voicing) {
1280: 0a 20 20 20 20 2f 2f 20 47 65 74 20 74 68 65 20  .    // Get the 
1290: 76 6f 69 63 69 6e 67 0a 20 20 20 20 69 66 20 28  voicing.    if (
12a0: 21 76 6f 69 63 69 6e 67 29 20 7b 0a 20 20 20 20  !voicing) {.    
12b0: 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 76    return this._v
12c0: 6f 69 63 69 6e 67 3b 0a 20 20 20 20 7d 0a 0a 20  oicing;.    }.. 
12d0: 20 20 20 2f 2f 20 53 65 74 20 74 68 65 20 76 6f     // Set the vo
12e0: 69 63 69 6e 67 0a 20 20 20 20 74 68 69 73 2e 5f  icing.    this._
12f0: 76 6f 69 63 69 6e 67 20 3d 20 5b 5d 3b 0a 20 20  voicing = [];.  
1300: 20 20 66 6f 72 20 28 76 61 72 20 69 20 3d 20 30    for (var i = 0
1310: 2c 20 6c 65 6e 67 74 68 20 3d 20 76 6f 69 63 69  , length = voici
1320: 6e 67 2e 6c 65 6e 67 74 68 3b 20 69 20 3c 20 6c  ng.length; i < l
1330: 65 6e 67 74 68 3b 20 69 2b 2b 29 20 7b 0a 20 20  ength; i++) {.  
1340: 20 20 20 20 74 68 69 73 2e 5f 76 6f 69 63 69 6e      this._voicin
1350: 67 5b 69 5d 20 3d 20 49 6e 74 65 72 76 61 6c 2e  g[i] = Interval.
1360: 74 6f 43 6f 6f 72 64 28 76 6f 69 63 69 6e 67 5b  toCoord(voicing[
1370: 69 5d 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  i]);.    }..    
1380: 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 20 20 7d  return this;.  }
1390: 2c 0a 0a 20 20 72 65 73 65 74 56 6f 69 63 69 6e  ,..  resetVoicin
13a0: 67 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a  g: function() {.
13b0: 20 20 20 20 74 68 69 73 2e 5f 76 6f 69 63 69 6e      this._voicin
13c0: 67 20 3d 20 74 68 69 73 2e 69 6e 74 65 72 76 61  g = this.interva
13d0: 6c 73 3b 0a 20 20 7d 2c 0a 0a 20 20 64 6f 6d 69  ls;.  },..  domi
13e0: 6e 61 6e 74 3a 20 66 75 6e 63 74 69 6f 6e 28 61  nant: function(a
13f0: 64 64 69 74 69 6f 6e 61 6c 29 20 7b 0a 20 20 20  dditional) {.   
1400: 20 61 64 64 69 74 69 6f 6e 61 6c 20 3d 20 61 64   additional = ad
1410: 64 69 74 69 6f 6e 61 6c 20 7c 7c 20 27 27 3b 0a  ditional || '';.
1420: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 43      return new C
1430: 68 6f 72 64 28 74 68 69 73 2e 72 6f 6f 74 2e 69  hord(this.root.i
1440: 6e 74 65 72 76 61 6c 28 27 50 35 27 29 2c 20 61  nterval('P5'), a
1450: 64 64 69 74 69 6f 6e 61 6c 29 3b 0a 20 20 7d 2c  dditional);.  },
1460: 0a 0a 20 20 73 75 62 64 6f 6d 69 6e 61 6e 74 3a  ..  subdominant:
1470: 20 66 75 6e 63 74 69 6f 6e 28 61 64 64 69 74 69   function(additi
1480: 6f 6e 61 6c 29 20 7b 0a 20 20 20 20 61 64 64 69  onal) {.    addi
1490: 74 69 6f 6e 61 6c 20 3d 20 61 64 64 69 74 69 6f  tional = additio
14a0: 6e 61 6c 20 7c 7c 20 27 27 3b 0a 20 20 20 20 72  nal || '';.    r
14b0: 65 74 75 72 6e 20 6e 65 77 20 43 68 6f 72 64 28  eturn new Chord(
14c0: 74 68 69 73 2e 72 6f 6f 74 2e 69 6e 74 65 72 76  this.root.interv
14d0: 61 6c 28 27 50 34 27 29 2c 20 61 64 64 69 74 69  al('P4'), additi
14e0: 6f 6e 61 6c 29 3b 0a 20 20 7d 2c 0a 0a 20 20 70  onal);.  },..  p
14f0: 61 72 61 6c 6c 65 6c 3a 20 66 75 6e 63 74 69 6f  arallel: functio
1500: 6e 28 61 64 64 69 74 69 6f 6e 61 6c 29 20 7b 0a  n(additional) {.
1510: 20 20 20 20 61 64 64 69 74 69 6f 6e 61 6c 20 3d      additional =
1520: 20 61 64 64 69 74 69 6f 6e 61 6c 20 7c 7c 20 27   additional || '
1530: 27 3b 0a 20 20 20 20 76 61 72 20 71 75 61 6c 69  ';.    var quali
1540: 74 79 20 3d 20 74 68 69 73 2e 71 75 61 6c 69 74  ty = this.qualit
1550: 79 28 29 3b 0a 0a 20 20 20 20 69 66 20 28 74 68  y();..    if (th
1560: 69 73 2e 63 68 6f 72 64 54 79 70 65 28 29 20 21  is.chordType() !
1570: 3d 3d 20 27 74 72 69 61 64 27 20 7c 7c 20 71 75  == 'triad' || qu
1580: 61 6c 69 74 79 20 3d 3d 3d 20 27 64 69 6d 69 6e  ality === 'dimin
1590: 69 73 68 65 64 27 20 7c 7c 0a 20 20 20 20 20 20  ished' ||.      
15a0: 20 20 71 75 61 6c 69 74 79 20 3d 3d 3d 20 27 61    quality === 'a
15b0: 75 67 6d 65 6e 74 65 64 27 29 20 7b 0a 20 20 20  ugmented') {.   
15c0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 72 72     throw new Err
15d0: 6f 72 28 27 4f 6e 6c 79 20 6d 61 6a 6f 72 2f 6d  or('Only major/m
15e0: 69 6e 6f 72 20 74 72 69 61 64 73 20 68 61 76 65  inor triads have
15f0: 20 70 61 72 61 6c 6c 65 6c 20 63 68 6f 72 64 73   parallel chords
1600: 27 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  ');.    }..    i
1610: 66 20 28 71 75 61 6c 69 74 79 20 3d 3d 3d 20 27  f (quality === '
1620: 6d 61 6a 6f 72 27 29 20 7b 0a 20 20 20 20 20 20  major') {.      
1630: 72 65 74 75 72 6e 20 6e 65 77 20 43 68 6f 72 64  return new Chord
1640: 28 74 68 69 73 2e 72 6f 6f 74 2e 69 6e 74 65 72  (this.root.inter
1650: 76 61 6c 28 27 6d 33 27 2c 20 27 64 6f 77 6e 27  val('m3', 'down'
1660: 29 2c 20 27 6d 27 29 3b 0a 20 20 20 20 7d 20 65  ), 'm');.    } e
1670: 6c 73 65 20 7b 0a 20 20 20 20 20 20 72 65 74 75  lse {.      retu
1680: 72 6e 20 6e 65 77 20 43 68 6f 72 64 28 74 68 69  rn new Chord(thi
1690: 73 2e 72 6f 6f 74 2e 69 6e 74 65 72 76 61 6c 28  s.root.interval(
16a0: 27 6d 33 27 2c 20 27 75 70 27 29 29 3b 0a 20 20  'm3', 'up'));.  
16b0: 20 20 7d 0a 20 20 7d 2c 0a 0a 20 20 71 75 61 6c    }.  },..  qual
16c0: 69 74 79 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20  ity: function() 
16d0: 7b 0a 20 20 20 20 76 61 72 20 74 68 69 72 64 2c  {.    var third,
16e0: 20 66 69 66 74 68 2c 20 73 65 76 65 6e 74 68 2c   fifth, seventh,
16f0: 20 69 6e 74 65 72 76 61 6c 73 20 3d 20 74 68 69   intervals = thi
1700: 73 2e 69 6e 74 65 72 76 61 6c 73 3b 0a 0a 20 20  s.intervals;..  
1710: 20 20 66 6f 72 20 28 76 61 72 20 69 20 3d 20 30    for (var i = 0
1720: 2c 20 6c 65 6e 67 74 68 20 3d 20 69 6e 74 65 72  , length = inter
1730: 76 61 6c 73 2e 6c 65 6e 67 74 68 3b 20 69 20 3c  vals.length; i <
1740: 20 6c 65 6e 67 74 68 3b 20 69 2b 2b 29 20 7b 0a   length; i++) {.
1750: 20 20 20 20 20 20 69 66 20 28 69 6e 74 65 72 76        if (interv
1760: 61 6c 73 5b 69 5d 2e 6e 75 6d 62 65 72 28 29 20  als[i].number() 
1770: 3d 3d 3d 20 33 29 20 7b 0a 20 20 20 20 20 20 20  === 3) {.       
1780: 20 74 68 69 72 64 20 3d 20 69 6e 74 65 72 76 61   third = interva
1790: 6c 73 5b 69 5d 3b 0a 20 20 20 20 20 20 7d 20 65  ls[i];.      } e
17a0: 6c 73 65 20 69 66 20 28 69 6e 74 65 72 76 61 6c  lse if (interval
17b0: 73 5b 69 5d 2e 6e 75 6d 62 65 72 28 29 20 3d 3d  s[i].number() ==
17c0: 3d 20 35 29 20 7b 0a 20 20 20 20 20 20 20 20 66  = 5) {.        f
17d0: 69 66 74 68 20 3d 20 69 6e 74 65 72 76 61 6c 73  ifth = intervals
17e0: 5b 69 5d 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73  [i];.      } els
17f0: 65 20 69 66 20 28 69 6e 74 65 72 76 61 6c 73 5b  e if (intervals[
1800: 69 5d 2e 6e 75 6d 62 65 72 28 29 20 3d 3d 3d 20  i].number() === 
1810: 37 29 20 7b 0a 20 20 20 20 20 20 20 20 73 65 76  7) {.        sev
1820: 65 6e 74 68 20 3d 20 69 6e 74 65 72 76 61 6c 73  enth = intervals
1830: 5b 69 5d 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  [i];.      }.   
1840: 20 7d 0a 0a 20 20 20 20 69 66 20 28 21 74 68 69   }..    if (!thi
1850: 72 64 29 20 7b 0a 20 20 20 20 20 20 72 65 74 75  rd) {.      retu
1860: 72 6e 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74  rn;.    }..    t
1870: 68 69 72 64 20 3d 20 28 74 68 69 72 64 2e 64 69  hird = (third.di
1880: 72 65 63 74 69 6f 6e 28 29 20 3d 3d 3d 20 27 64  rection() === 'd
1890: 6f 77 6e 27 29 20 3f 20 74 68 69 72 64 2e 69 6e  own') ? third.in
18a0: 76 65 72 74 28 29 20 3a 20 74 68 69 72 64 3b 0a  vert() : third;.
18b0: 20 20 20 20 74 68 69 72 64 20 3d 20 74 68 69 72      third = thir
18c0: 64 2e 73 69 6d 70 6c 65 28 29 2e 74 6f 53 74 72  d.simple().toStr
18d0: 69 6e 67 28 29 3b 0a 0a 20 20 20 20 69 66 20 28  ing();..    if (
18e0: 66 69 66 74 68 29 20 7b 0a 20 20 20 20 20 20 66  fifth) {.      f
18f0: 69 66 74 68 20 3d 20 28 66 69 66 74 68 2e 64 69  ifth = (fifth.di
1900: 72 65 63 74 69 6f 6e 20 3d 3d 3d 20 27 64 6f 77  rection === 'dow
1910: 6e 27 29 20 3f 20 66 69 66 74 68 2e 69 6e 76 65  n') ? fifth.inve
1920: 72 74 28 29 20 3a 20 66 69 66 74 68 3b 0a 20 20  rt() : fifth;.  
1930: 20 20 20 20 66 69 66 74 68 20 3d 20 66 69 66 74      fifth = fift
1940: 68 2e 73 69 6d 70 6c 65 28 29 2e 74 6f 53 74 72  h.simple().toStr
1950: 69 6e 67 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ing();.    }..  
1960: 20 20 69 66 20 28 73 65 76 65 6e 74 68 29 20 7b    if (seventh) {
1970: 0a 20 20 20 20 20 20 73 65 76 65 6e 74 68 20 3d  .      seventh =
1980: 20 28 73 65 76 65 6e 74 68 2e 64 69 72 65 63 74   (seventh.direct
1990: 69 6f 6e 20 3d 3d 3d 20 27 64 6f 77 6e 27 29 20  ion === 'down') 
19a0: 3f 20 73 65 76 65 6e 74 68 2e 69 6e 76 65 72 74  ? seventh.invert
19b0: 28 29 20 3a 20 73 65 76 65 6e 74 68 3b 0a 20 20  () : seventh;.  
19c0: 20 20 20 20 73 65 76 65 6e 74 68 20 3d 20 73 65      seventh = se
19d0: 76 65 6e 74 68 2e 73 69 6d 70 6c 65 28 29 2e 74  venth.simple().t
19e0: 6f 53 74 72 69 6e 67 28 29 3b 0a 20 20 20 20 7d  oString();.    }
19f0: 0a 0a 20 20 20 20 69 66 20 28 74 68 69 72 64 20  ..    if (third 
1a00: 3d 3d 3d 20 27 4d 33 27 29 20 7b 0a 20 20 20 20  === 'M3') {.    
1a10: 20 20 69 66 20 28 66 69 66 74 68 20 3d 3d 3d 20    if (fifth === 
1a20: 27 41 35 27 29 20 7b 0a 20 20 20 20 20 20 20 20  'A5') {.        
1a30: 72 65 74 75 72 6e 20 27 61 75 67 6d 65 6e 74 65  return 'augmente
1a40: 64 27 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  d';.      } else
1a50: 20 69 66 20 28 66 69 66 74 68 20 3d 3d 3d 20 27   if (fifth === '
1a60: 50 35 27 29 20 7b 0a 20 20 20 20 20 20 20 20 72  P5') {.        r
1a70: 65 74 75 72 6e 20 28 73 65 76 65 6e 74 68 20 3d  eturn (seventh =
1a80: 3d 3d 20 27 6d 37 27 29 20 3f 20 27 64 6f 6d 69  == 'm7') ? 'domi
1a90: 6e 61 6e 74 27 20 3a 20 27 6d 61 6a 6f 72 27 3b  nant' : 'major';
1aa0: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
1ab0: 72 65 74 75 72 6e 20 27 6d 61 6a 6f 72 27 3b 0a  return 'major';.
1ac0: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 74      } else if (t
1ad0: 68 69 72 64 20 3d 3d 3d 20 27 6d 33 27 29 20 7b  hird === 'm3') {
1ae0: 0a 20 20 20 20 20 20 69 66 20 28 66 69 66 74 68  .      if (fifth
1af0: 20 3d 3d 3d 20 27 50 35 27 29 20 7b 0a 20 20 20   === 'P5') {.   
1b00: 20 20 20 20 20 72 65 74 75 72 6e 20 27 6d 69 6e       return 'min
1b10: 6f 72 27 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73  or';.      } els
1b20: 65 20 69 66 20 28 66 69 66 74 68 20 3d 3d 3d 20  e if (fifth === 
1b30: 27 64 35 27 29 20 7b 0a 20 20 20 20 20 20 20 20  'd5') {.        
1b40: 72 65 74 75 72 6e 20 28 73 65 76 65 6e 74 68 20  return (seventh 
1b50: 3d 3d 3d 20 27 6d 37 27 29 20 3f 20 27 68 61 6c  === 'm7') ? 'hal
1b60: 66 2d 64 69 6d 69 6e 69 73 68 65 64 27 20 3a 20  f-diminished' : 
1b70: 27 64 69 6d 69 6e 69 73 68 65 64 27 3b 0a 20 20  'diminished';.  
1b80: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 65 74      }..      ret
1b90: 75 72 6e 20 27 6d 69 6e 6f 72 27 3b 0a 20 20 20  urn 'minor';.   
1ba0: 20 7d 0a 20 20 7d 2c 0a 0a 20 20 63 68 6f 72 64   }.  },..  chord
1bb0: 54 79 70 65 3a 20 66 75 6e 63 74 69 6f 6e 28 29  Type: function()
1bc0: 20 7b 20 2f 2f 20 49 6e 20 6e 65 65 64 20 6f 66   { // In need of
1bd0: 20 62 65 74 74 65 72 20 6e 61 6d 65 0a 20 20 20   better name.   
1be0: 20 76 61 72 20 6c 65 6e 67 74 68 20 3d 20 74 68   var length = th
1bf0: 69 73 2e 69 6e 74 65 72 76 61 6c 73 2e 6c 65 6e  is.intervals.len
1c00: 67 74 68 2c 20 69 6e 74 65 72 76 61 6c 2c 20 68  gth, interval, h
1c10: 61 73 2c 20 69 6e 76 65 72 74 2c 20 69 2c 20 6e  as, invert, i, n
1c20: 61 6d 65 3b 0a 0a 20 20 20 20 69 66 20 28 6c 65  ame;..    if (le
1c30: 6e 67 74 68 20 3d 3d 3d 20 32 29 20 7b 0a 20 20  ngth === 2) {.  
1c40: 20 20 20 20 72 65 74 75 72 6e 20 27 64 79 61 64      return 'dyad
1c50: 27 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 69 66  ';.    } else if
1c60: 20 28 6c 65 6e 67 74 68 20 3d 3d 3d 20 33 29 20   (length === 3) 
1c70: 7b 0a 20 20 20 20 20 20 68 61 73 20 3d 20 7b 75  {.      has = {u
1c80: 6e 69 73 6f 6e 3a 20 66 61 6c 73 65 2c 20 74 68  nison: false, th
1c90: 69 72 64 3a 20 66 61 6c 73 65 2c 20 66 69 66 74  ird: false, fift
1ca0: 68 3a 20 66 61 6c 73 65 7d 3b 0a 20 20 20 20 20  h: false};.     
1cb0: 20 66 6f 72 20 28 69 20 3d 20 30 3b 20 69 20 3c   for (i = 0; i <
1cc0: 20 6c 65 6e 67 74 68 3b 20 69 2b 2b 29 20 7b 0a   length; i++) {.
1cd0: 20 20 20 20 20 20 20 20 69 6e 74 65 72 76 61 6c          interval
1ce0: 20 3d 20 74 68 69 73 2e 69 6e 74 65 72 76 61 6c   = this.interval
1cf0: 73 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 69 6e  s[i];.        in
1d00: 76 65 72 74 20 3d 20 69 6e 74 65 72 76 61 6c 2e  vert = interval.
1d10: 69 6e 76 65 72 74 28 29 3b 0a 20 20 20 20 20 20  invert();.      
1d20: 20 20 69 66 20 28 69 6e 74 65 72 76 61 6c 2e 62    if (interval.b
1d30: 61 73 65 28 29 20 69 6e 20 68 61 73 29 20 7b 0a  ase() in has) {.
1d40: 20 20 20 20 20 20 20 20 20 20 68 61 73 5b 69 6e            has[in
1d50: 74 65 72 76 61 6c 2e 62 61 73 65 28 29 5d 20 3d  terval.base()] =
1d60: 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20 7d   true;.        }
1d70: 20 65 6c 73 65 20 69 66 20 28 69 6e 76 65 72 74   else if (invert
1d80: 2e 62 61 73 65 28 29 20 69 6e 20 68 61 73 29 20  .base() in has) 
1d90: 7b 0a 20 20 20 20 20 20 20 20 20 20 68 61 73 5b  {.          has[
1da0: 69 6e 76 65 72 74 2e 62 61 73 65 28 29 5d 20 3d  invert.base()] =
1db0: 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20 7d   true;.        }
1dc0: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
1dd0: 6e 61 6d 65 20 3d 20 28 68 61 73 2e 75 6e 69 73  name = (has.unis
1de0: 6f 6e 20 26 26 20 68 61 73 2e 74 68 69 72 64 20  on && has.third 
1df0: 26 26 20 68 61 73 2e 66 69 66 74 68 29 20 3f 20  && has.fifth) ? 
1e00: 27 74 72 69 61 64 27 20 3a 20 27 74 72 69 63 68  'triad' : 'trich
1e10: 6f 72 64 27 3b 0a 20 20 20 20 7d 20 65 6c 73 65  ord';.    } else
1e20: 20 69 66 20 28 6c 65 6e 67 74 68 20 3d 3d 3d 20   if (length === 
1e30: 34 29 20 7b 0a 20 20 20 20 20 20 68 61 73 20 3d  4) {.      has =
1e40: 20 7b 75 6e 69 73 6f 6e 3a 20 66 61 6c 73 65 2c   {unison: false,
1e50: 20 74 68 69 72 64 3a 20 66 61 6c 73 65 2c 20 66   third: false, f
1e60: 69 66 74 68 3a 20 66 61 6c 73 65 2c 20 73 65 76  ifth: false, sev
1e70: 65 6e 74 68 3a 20 66 61 6c 73 65 7d 3b 0a 20 20  enth: false};.  
1e80: 20 20 20 20 66 6f 72 20 28 69 20 3d 20 30 3b 20      for (i = 0; 
1e90: 69 20 3c 20 6c 65 6e 67 74 68 3b 20 69 2b 2b 29  i < length; i++)
1ea0: 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72   {.        inter
1eb0: 76 61 6c 20 3d 20 74 68 69 73 2e 69 6e 74 65 72  val = this.inter
1ec0: 76 61 6c 73 5b 69 5d 3b 0a 20 20 20 20 20 20 20  vals[i];.       
1ed0: 20 69 6e 76 65 72 74 20 3d 20 69 6e 74 65 72 76   invert = interv
1ee0: 61 6c 2e 69 6e 76 65 72 74 28 29 3b 0a 20 20 20  al.invert();.   
1ef0: 20 20 20 20 20 69 66 20 28 69 6e 74 65 72 76 61       if (interva
1f00: 6c 2e 62 61 73 65 28 29 20 69 6e 20 68 61 73 29  l.base() in has)
1f10: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 68 61 73   {.          has
1f20: 5b 69 6e 74 65 72 76 61 6c 2e 62 61 73 65 28 29  [interval.base()
1f30: 5d 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20  ] = true;.      
1f40: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 69 6e 76    } else if (inv
1f50: 65 72 74 2e 62 61 73 65 28 29 20 69 6e 20 68 61  ert.base() in ha
1f60: 73 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 68  s) {.          h
1f70: 61 73 5b 69 6e 76 65 72 74 2e 62 61 73 65 28 29  as[invert.base()
1f80: 5d 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20  ] = true;.      
1f90: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20    }.      }..   
1fa0: 20 20 20 69 66 20 28 68 61 73 2e 75 6e 69 73 6f     if (has.uniso
1fb0: 6e 20 26 26 20 68 61 73 2e 74 68 69 72 64 20 26  n && has.third &
1fc0: 26 20 68 61 73 2e 66 69 66 74 68 20 26 26 20 68  & has.fifth && h
1fd0: 61 73 2e 73 65 76 65 6e 74 68 29 20 7b 0a 20 20  as.seventh) {.  
1fe0: 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 27 74 65        name = 'te
1ff0: 74 72 61 64 27 3b 0a 20 20 20 20 20 20 7d 0a 20  trad';.      }. 
2000: 20 20 20 7d 0a 0a 20 20 20 20 72 65 74 75 72 6e     }..    return
2010: 20 6e 61 6d 65 20 7c 7c 20 27 75 6e 6b 6e 6f 77   name || 'unknow
2020: 6e 27 3b 0a 20 20 7d 2c 0a 0a 20 20 67 65 74 3a  n';.  },..  get:
2030: 20 66 75 6e 63 74 69 6f 6e 28 69 6e 74 65 72 76   function(interv
2040: 61 6c 29 20 7b 0a 20 20 20 20 69 66 20 28 74 79  al) {.    if (ty
2050: 70 65 6f 66 20 69 6e 74 65 72 76 61 6c 20 3d 3d  peof interval ==
2060: 3d 20 27 73 74 72 69 6e 67 27 20 26 26 20 69 6e  = 'string' && in
2070: 74 65 72 76 61 6c 20 69 6e 20 6b 6e 6f 77 6c 65  terval in knowle
2080: 64 67 65 2e 73 74 65 70 4e 75 6d 62 65 72 29 20  dge.stepNumber) 
2090: 7b 0a 20 20 20 20 20 20 76 61 72 20 69 6e 74 65  {.      var inte
20a0: 72 76 61 6c 73 20 3d 20 74 68 69 73 2e 69 6e 74  rvals = this.int
20b0: 65 72 76 61 6c 73 2c 20 69 2c 20 6c 65 6e 67 74  ervals, i, lengt
20c0: 68 3b 0a 0a 20 20 20 20 20 20 69 6e 74 65 72 76  h;..      interv
20d0: 61 6c 20 3d 20 6b 6e 6f 77 6c 65 64 67 65 2e 73  al = knowledge.s
20e0: 74 65 70 4e 75 6d 62 65 72 5b 69 6e 74 65 72 76  tepNumber[interv
20f0: 61 6c 5d 3b 0a 20 20 20 20 20 20 66 6f 72 20 28  al];.      for (
2100: 69 20 3d 20 30 2c 20 6c 65 6e 67 74 68 20 3d 20  i = 0, length = 
2110: 69 6e 74 65 72 76 61 6c 73 2e 6c 65 6e 67 74 68  intervals.length
2120: 3b 20 69 20 3c 20 6c 65 6e 67 74 68 3b 20 69 2b  ; i < length; i+
2130: 2b 29 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20  +) {.        if 
2140: 28 69 6e 74 65 72 76 61 6c 73 5b 69 5d 2e 6e 75  (intervals[i].nu
2150: 6d 62 65 72 28 29 20 3d 3d 3d 20 69 6e 74 65 72  mber() === inter
2160: 76 61 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 20  val) {.         
2170: 20 72 65 74 75 72 6e 20 74 68 69 73 2e 72 6f 6f   return this.roo
2180: 74 2e 69 6e 74 65 72 76 61 6c 28 69 6e 74 65 72  t.interval(inter
2190: 76 61 6c 73 5b 69 5d 29 3b 0a 20 20 20 20 20 20  vals[i]);.      
21a0: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20    }.      }..   
21b0: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0a     return null;.
21c0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
21d0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 72 72     throw new Err
21e0: 6f 72 28 27 49 6e 76 61 6c 69 64 20 69 6e 74 65  or('Invalid inte
21f0: 72 76 61 6c 20 6e 61 6d 65 27 29 3b 0a 20 20 20  rval name');.   
2200: 20 7d 0a 20 20 7d 2c 0a 0a 20 20 69 6e 74 65 72   }.  },..  inter
2210: 76 61 6c 3a 20 66 75 6e 63 74 69 6f 6e 28 69 6e  val: function(in
2220: 74 65 72 76 61 6c 29 20 7b 0a 20 20 20 20 72 65  terval) {.    re
2230: 74 75 72 6e 20 6e 65 77 20 43 68 6f 72 64 28 74  turn new Chord(t
2240: 68 69 73 2e 72 6f 6f 74 2e 69 6e 74 65 72 76 61  his.root.interva
2250: 6c 28 69 6e 74 65 72 76 61 6c 29 2c 20 74 68 69  l(interval), thi
2260: 73 2e 73 79 6d 62 6f 6c 29 3b 0a 20 20 7d 2c 0a  s.symbol);.  },.
2270: 0a 20 20 74 72 61 6e 73 70 6f 73 65 3a 20 66 75  .  transpose: fu
2280: 6e 63 74 69 6f 6e 28 69 6e 74 65 72 76 61 6c 29  nction(interval)
2290: 20 7b 0a 20 20 20 20 74 68 69 73 2e 72 6f 6f 74   {.    this.root
22a0: 2e 74 72 61 6e 73 70 6f 73 65 28 69 6e 74 65 72  .transpose(inter
22b0: 76 61 6c 29 3b 0a 20 20 20 20 74 68 69 73 2e 6e  val);.    this.n
22c0: 61 6d 65 20 3d 20 74 68 69 73 2e 72 6f 6f 74 2e  ame = this.root.
22d0: 6e 61 6d 65 28 29 2e 74 6f 55 70 70 65 72 43 61  name().toUpperCa
22e0: 73 65 28 29 20 2b 0a 20 20 20 20 20 20 20 20 20  se() +.         
22f0: 20 20 20 20 20 20 20 74 68 69 73 2e 72 6f 6f 74         this.root
2300: 2e 61 63 63 69 64 65 6e 74 61 6c 28 29 20 2b 20  .accidental() + 
2310: 74 68 69 73 2e 73 79 6d 62 6f 6c 3b 0a 0a 20 20  this.symbol;..  
2320: 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 20    return this;. 
2330: 20 7d 2c 0a 0a 20 20 74 6f 53 74 72 69 6e 67 3a   },..  toString:
2340: 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20   function() {.  
2350: 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 6e 61    return this.na
2360: 6d 65 3b 0a 20 20 7d 0a 7d 3b 0a 0a 6d 6f 64 75  me;.  }.};..modu
2370: 6c 65 2e 65 78 70 6f 72 74 73 20 3d 20 43 68 6f  le.exports = Cho
2380: 72 64 3b 0a 0a 7d 2c 7b 22 2e 2f 69 6e 74 65 72  rd;..},{"./inter
2390: 76 61 6c 22 3a 33 2c 22 2e 2f 6b 6e 6f 77 6c 65  val":3,"./knowle
23a0: 64 67 65 22 3a 34 2c 22 2e 2f 6e 6f 74 65 22 3a  dge":4,"./note":
23b0: 35 2c 22 64 61 63 63 6f 72 64 22 3a 31 30 7d 5d  5,"daccord":10}]
23c0: 2c 33 3a 5b 66 75 6e 63 74 69 6f 6e 28 72 65 71  ,3:[function(req
23d0: 75 69 72 65 2c 6d 6f 64 75 6c 65 2c 65 78 70 6f  uire,module,expo
23e0: 72 74 73 29 7b 0a 76 61 72 20 6b 6e 6f 77 6c 65  rts){.var knowle
23f0: 64 67 65 20 3d 20 72 65 71 75 69 72 65 28 27 2e  dge = require('.
2400: 2f 6b 6e 6f 77 6c 65 64 67 65 27 29 3b 0a 76 61  /knowledge');.va
2410: 72 20 76 65 63 74 6f 72 20 3d 20 72 65 71 75 69  r vector = requi
2420: 72 65 28 27 2e 2f 76 65 63 74 6f 72 27 29 3b 0a  re('./vector');.
2430: 76 61 72 20 74 6f 43 6f 6f 72 64 20 3d 20 72 65  var toCoord = re
2440: 71 75 69 72 65 28 27 69 6e 74 65 72 76 61 6c 2d  quire('interval-
2450: 63 6f 6f 72 64 73 27 29 3b 0a 0a 66 75 6e 63 74  coords');..funct
2460: 69 6f 6e 20 49 6e 74 65 72 76 61 6c 28 63 6f 6f  ion Interval(coo
2470: 72 64 29 20 7b 0a 20 20 69 66 20 28 21 28 74 68  rd) {.  if (!(th
2480: 69 73 20 69 6e 73 74 61 6e 63 65 6f 66 20 49 6e  is instanceof In
2490: 74 65 72 76 61 6c 29 29 20 72 65 74 75 72 6e 20  terval)) return 
24a0: 6e 65 77 20 49 6e 74 65 72 76 61 6c 28 63 6f 6f  new Interval(coo
24b0: 72 64 29 3b 0a 20 20 74 68 69 73 2e 63 6f 6f 72  rd);.  this.coor
24c0: 64 20 3d 20 63 6f 6f 72 64 3b 0a 7d 0a 0a 49 6e  d = coord;.}..In
24d0: 74 65 72 76 61 6c 2e 70 72 6f 74 6f 74 79 70 65  terval.prototype
24e0: 20 3d 20 7b 0a 20 20 6e 61 6d 65 3a 20 66 75 6e   = {.  name: fun
24f0: 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 72 65  ction() {.    re
2500: 74 75 72 6e 20 6b 6e 6f 77 6c 65 64 67 65 2e 69  turn knowledge.i
2510: 6e 74 65 72 76 61 6c 73 49 6e 64 65 78 5b 74 68  ntervalsIndex[th
2520: 69 73 2e 6e 75 6d 62 65 72 28 29 20 2d 20 31 5d  is.number() - 1]
2530: 3b 0a 20 20 7d 2c 0a 0a 20 20 73 65 6d 69 74 6f  ;.  },..  semito
2540: 6e 65 73 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20  nes: function() 
2550: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 76 65 63  {.    return vec
2560: 74 6f 72 2e 73 75 6d 28 76 65 63 74 6f 72 2e 6d  tor.sum(vector.m
2570: 75 6c 28 74 68 69 73 2e 63 6f 6f 72 64 2c 20 5b  ul(this.coord, [
2580: 31 32 2c 20 37 5d 29 29 3b 0a 20 20 7d 2c 0a 0a  12, 7]));.  },..
2590: 20 20 6e 75 6d 62 65 72 3a 20 66 75 6e 63 74 69    number: functi
25a0: 6f 6e 28 29 20 7b 0a 20 20 20 20 72 65 74 75 72  on() {.    retur
25b0: 6e 20 4d 61 74 68 2e 61 62 73 28 74 68 69 73 2e  n Math.abs(this.
25c0: 76 61 6c 75 65 28 29 29 3b 0a 20 20 7d 2c 0a 0a  value());.  },..
25d0: 20 20 76 61 6c 75 65 3a 20 66 75 6e 63 74 69 6f    value: functio
25e0: 6e 28 29 20 7b 0a 20 20 20 20 76 61 72 20 74 6f  n() {.    var to
25f0: 4d 75 6c 74 69 70 6c 79 20 3d 20 4d 61 74 68 2e  Multiply = Math.
2600: 66 6c 6f 6f 72 28 28 74 68 69 73 2e 63 6f 6f 72  floor((this.coor
2610: 64 5b 31 5d 20 2d 20 32 29 20 2f 20 37 29 20 2b  d[1] - 2) / 7) +
2620: 20 31 3b 0a 20 20 20 20 76 61 72 20 70 72 6f 64   1;.    var prod
2630: 75 63 74 20 3d 20 76 65 63 74 6f 72 2e 6d 75 6c  uct = vector.mul
2640: 28 6b 6e 6f 77 6c 65 64 67 65 2e 73 68 61 72 70  (knowledge.sharp
2650: 2c 20 74 6f 4d 75 6c 74 69 70 6c 79 29 3b 0a 20  , toMultiply);. 
2660: 20 20 20 76 61 72 20 77 69 74 68 6f 75 74 20 3d     var without =
2670: 20 76 65 63 74 6f 72 2e 73 75 62 28 74 68 69 73   vector.sub(this
2680: 2e 63 6f 6f 72 64 2c 20 70 72 6f 64 75 63 74 29  .coord, product)
2690: 3b 0a 20 20 20 20 76 61 72 20 69 20 3d 20 6b 6e  ;.    var i = kn
26a0: 6f 77 6c 65 64 67 65 2e 69 6e 74 65 72 76 61 6c  owledge.interval
26b0: 46 72 6f 6d 46 69 66 74 68 5b 77 69 74 68 6f 75  FromFifth[withou
26c0: 74 5b 31 5d 20 2b 20 35 5d 3b 0a 20 20 20 20 76  t[1] + 5];.    v
26d0: 61 72 20 64 69 66 66 20 3d 20 77 69 74 68 6f 75  ar diff = withou
26e0: 74 5b 30 5d 20 2d 20 6b 6e 6f 77 6c 65 64 67 65  t[0] - knowledge
26f0: 2e 69 6e 74 65 72 76 61 6c 73 5b 69 5d 5b 30 5d  .intervals[i][0]
2700: 3b 0a 20 20 20 20 76 61 72 20 76 61 6c 20 3d 20  ;.    var val = 
2710: 6b 6e 6f 77 6c 65 64 67 65 2e 73 74 65 70 4e 75  knowledge.stepNu
2720: 6d 62 65 72 5b 69 5d 20 2b 20 64 69 66 66 20 2a  mber[i] + diff *
2730: 20 37 3b 0a 0a 20 20 20 20 72 65 74 75 72 6e 20   7;..    return 
2740: 28 76 61 6c 20 3e 20 30 29 20 3f 20 76 61 6c 20  (val > 0) ? val 
2750: 3a 20 76 61 6c 20 2d 20 32 3b 0a 20 20 7d 2c 0a  : val - 2;.  },.
2760: 0a 20 20 74 79 70 65 3a 20 66 75 6e 63 74 69 6f  .  type: functio
2770: 6e 28 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e  n() {.    return
2780: 20 6b 6e 6f 77 6c 65 64 67 65 2e 69 6e 74 65 72   knowledge.inter
2790: 76 61 6c 73 5b 74 68 69 73 2e 62 61 73 65 28 29  vals[this.base()
27a0: 5d 5b 30 5d 20 3c 3d 20 31 20 3f 20 27 70 65 72  ][0] <= 1 ? 'per
27b0: 66 65 63 74 27 20 3a 20 27 6d 69 6e 6f 72 27 3b  fect' : 'minor';
27c0: 0a 20 20 7d 2c 0a 0a 20 20 62 61 73 65 3a 20 66  .  },..  base: f
27d0: 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20  unction() {.    
27e0: 76 61 72 20 70 72 6f 64 75 63 74 20 3d 20 76 65  var product = ve
27f0: 63 74 6f 72 2e 6d 75 6c 28 6b 6e 6f 77 6c 65 64  ctor.mul(knowled
2800: 67 65 2e 73 68 61 72 70 2c 20 74 68 69 73 2e 71  ge.sharp, this.q
2810: 75 61 6c 69 74 79 56 61 6c 75 65 28 29 29 3b 0a  ualityValue());.
2820: 20 20 20 20 76 61 72 20 66 69 66 74 68 20 3d 20      var fifth = 
2830: 76 65 63 74 6f 72 2e 73 75 62 28 74 68 69 73 2e  vector.sub(this.
2840: 63 6f 6f 72 64 2c 20 70 72 6f 64 75 63 74 29 5b  coord, product)[
2850: 31 5d 3b 0a 20 20 20 20 66 69 66 74 68 20 3d 20  1];.    fifth = 
2860: 74 68 69 73 2e 76 61 6c 75 65 28 29 20 3e 20 30  this.value() > 0
2870: 20 3f 20 66 69 66 74 68 20 2b 20 35 20 3a 20 2d   ? fifth + 5 : -
2880: 28 66 69 66 74 68 20 2d 20 35 29 20 25 20 37 3b  (fifth - 5) % 7;
2890: 0a 20 20 20 20 66 69 66 74 68 20 3d 20 66 69 66  .    fifth = fif
28a0: 74 68 20 3c 20 30 20 3f 20 6b 6e 6f 77 6c 65 64  th < 0 ? knowled
28b0: 67 65 2e 69 6e 74 65 72 76 61 6c 46 72 6f 6d 46  ge.intervalFromF
28c0: 69 66 74 68 2e 6c 65 6e 67 74 68 20 2b 20 66 69  ifth.length + fi
28d0: 66 74 68 20 3a 20 66 69 66 74 68 3b 0a 0a 20 20  fth : fifth;..  
28e0: 20 20 76 61 72 20 6e 61 6d 65 20 3d 20 6b 6e 6f    var name = kno
28f0: 77 6c 65 64 67 65 2e 69 6e 74 65 72 76 61 6c 46  wledge.intervalF
2900: 72 6f 6d 46 69 66 74 68 5b 66 69 66 74 68 5d 3b  romFifth[fifth];
2910: 0a 20 20 20 20 69 66 20 28 6e 61 6d 65 20 3d 3d  .    if (name ==
2920: 3d 20 27 75 6e 69 73 6f 6e 27 20 26 26 20 74 68  = 'unison' && th
2930: 69 73 2e 6e 75 6d 62 65 72 28 29 20 3e 3d 20 38  is.number() >= 8
2940: 29 0a 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 27  ).      name = '
2950: 6f 63 74 61 76 65 27 3b 0a 0a 20 20 20 20 72 65  octave';..    re
2960: 74 75 72 6e 20 6e 61 6d 65 3b 0a 20 20 7d 2c 0a  turn name;.  },.
2970: 0a 20 20 64 69 72 65 63 74 69 6f 6e 3a 20 66 75  .  direction: fu
2980: 6e 63 74 69 6f 6e 28 64 69 72 29 20 7b 0a 20 20  nction(dir) {.  
2990: 20 20 69 66 20 28 64 69 72 29 20 7b 0a 20 20 20    if (dir) {.   
29a0: 20 20 20 76 61 72 20 69 73 20 3d 20 74 68 69 73     var is = this
29b0: 2e 76 61 6c 75 65 28 29 20 3e 3d 20 31 20 3f 20  .value() >= 1 ? 
29c0: 27 75 70 27 20 3a 20 27 64 6f 77 6e 27 3b 0a 20  'up' : 'down';. 
29d0: 20 20 20 20 20 69 66 20 28 69 73 20 21 3d 3d 20       if (is !== 
29e0: 64 69 72 29 0a 20 20 20 20 20 20 20 20 74 68 69  dir).        thi
29f0: 73 2e 63 6f 6f 72 64 20 3d 20 76 65 63 74 6f 72  s.coord = vector
2a00: 2e 6d 75 6c 28 74 68 69 73 2e 63 6f 6f 72 64 2c  .mul(this.coord,
2a10: 20 2d 31 29 3b 0a 0a 20 20 20 20 20 20 72 65 74   -1);..      ret
2a20: 75 72 6e 20 74 68 69 73 3b 0a 20 20 20 20 7d 0a  urn this;.    }.
2a30: 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 72      else.      r
2a40: 65 74 75 72 6e 20 74 68 69 73 2e 76 61 6c 75 65  eturn this.value
2a50: 28 29 20 3e 3d 20 31 20 3f 20 27 75 70 27 20 3a  () >= 1 ? 'up' :
2a60: 20 27 64 6f 77 6e 27 3b 0a 20 20 7d 2c 0a 0a 20   'down';.  },.. 
2a70: 20 73 69 6d 70 6c 65 3a 20 66 75 6e 63 74 69 6f   simple: functio
2a80: 6e 28 69 67 6e 6f 72 65 29 20 7b 0a 20 20 20 20  n(ignore) {.    
2a90: 2f 2f 20 47 65 74 20 74 68 65 20 28 75 70 77 61  // Get the (upwa
2aa0: 72 64 73 29 20 62 61 73 65 20 69 6e 74 65 72 76  rds) base interv
2ab0: 61 6c 20 28 77 69 74 68 20 71 75 61 6c 69 74 79  al (with quality
2ac0: 29 0a 20 20 20 20 76 61 72 20 73 69 6d 70 6c 65  ).    var simple
2ad0: 20 3d 20 6b 6e 6f 77 6c 65 64 67 65 2e 69 6e 74   = knowledge.int
2ae0: 65 72 76 61 6c 73 5b 74 68 69 73 2e 62 61 73 65  ervals[this.base
2af0: 28 29 5d 3b 0a 20 20 20 20 76 61 72 20 74 6f 41  ()];.    var toA
2b00: 64 64 20 3d 20 76 65 63 74 6f 72 2e 6d 75 6c 28  dd = vector.mul(
2b10: 6b 6e 6f 77 6c 65 64 67 65 2e 73 68 61 72 70 2c  knowledge.sharp,
2b20: 20 74 68 69 73 2e 71 75 61 6c 69 74 79 56 61 6c   this.qualityVal
2b30: 75 65 28 29 29 3b 0a 20 20 20 20 73 69 6d 70 6c  ue());.    simpl
2b40: 65 20 3d 20 76 65 63 74 6f 72 2e 61 64 64 28 73  e = vector.add(s
2b50: 69 6d 70 6c 65 2c 20 74 6f 41 64 64 29 3b 0a 0a  imple, toAdd);..
2b60: 20 20 20 20 2f 2f 20 54 75 72 6e 20 69 74 20 61      // Turn it a
2b70: 72 6f 75 6e 64 20 69 66 20 6e 65 63 65 73 73 61  round if necessa
2b80: 72 79 0a 20 20 20 20 69 66 20 28 21 69 67 6e 6f  ry.    if (!igno
2b90: 72 65 29 0a 20 20 20 20 20 20 73 69 6d 70 6c 65  re).      simple
2ba0: 20 3d 20 74 68 69 73 2e 64 69 72 65 63 74 69 6f   = this.directio
2bb0: 6e 28 29 20 3d 3d 3d 20 27 64 6f 77 6e 27 20 3f  n() === 'down' ?
2bc0: 20 76 65 63 74 6f 72 2e 6d 75 6c 28 73 69 6d 70   vector.mul(simp
2bd0: 6c 65 2c 20 2d 31 29 20 3a 20 73 69 6d 70 6c 65  le, -1) : simple
2be0: 3b 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 65  ;..    return ne
2bf0: 77 20 49 6e 74 65 72 76 61 6c 28 73 69 6d 70 6c  w Interval(simpl
2c00: 65 29 3b 0a 20 20 7d 2c 0a 0a 20 20 69 73 43 6f  e);.  },..  isCo
2c10: 6d 70 6f 75 6e 64 3a 20 66 75 6e 63 74 69 6f 6e  mpound: function
2c20: 28 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  () {.    return 
2c30: 74 68 69 73 2e 6e 75 6d 62 65 72 28 29 20 3e 20  this.number() > 
2c40: 38 3b 0a 20 20 7d 2c 0a 0a 20 20 6f 63 74 61 76  8;.  },..  octav
2c50: 65 73 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b  es: function() {
2c60: 0a 20 20 20 20 76 61 72 20 74 6f 53 75 62 74 72  .    var toSubtr
2c70: 61 63 74 2c 20 77 69 74 68 6f 75 74 2c 20 6f 63  act, without, oc
2c80: 74 61 76 65 73 3b 0a 0a 20 20 20 20 69 66 20 28  taves;..    if (
2c90: 74 68 69 73 2e 64 69 72 65 63 74 69 6f 6e 28 29  this.direction()
2ca0: 20 3d 3d 3d 20 27 75 70 27 29 20 7b 0a 20 20 20   === 'up') {.   
2cb0: 20 20 20 74 6f 53 75 62 74 72 61 63 74 20 3d 20     toSubtract = 
2cc0: 76 65 63 74 6f 72 2e 6d 75 6c 28 6b 6e 6f 77 6c  vector.mul(knowl
2cd0: 65 64 67 65 2e 73 68 61 72 70 2c 20 74 68 69 73  edge.sharp, this
2ce0: 2e 71 75 61 6c 69 74 79 56 61 6c 75 65 28 29 29  .qualityValue())
2cf0: 3b 0a 20 20 20 20 20 20 77 69 74 68 6f 75 74 20  ;.      without 
2d00: 3d 20 76 65 63 74 6f 72 2e 73 75 62 28 74 68 69  = vector.sub(thi
2d10: 73 2e 63 6f 6f 72 64 2c 20 74 6f 53 75 62 74 72  s.coord, toSubtr
2d20: 61 63 74 29 3b 0a 20 20 20 20 20 20 6f 63 74 61  act);.      octa
2d30: 76 65 73 20 3d 20 77 69 74 68 6f 75 74 5b 30 5d  ves = without[0]
2d40: 20 2d 20 6b 6e 6f 77 6c 65 64 67 65 2e 69 6e 74   - knowledge.int
2d50: 65 72 76 61 6c 73 5b 74 68 69 73 2e 62 61 73 65  ervals[this.base
2d60: 28 29 5d 5b 30 5d 3b 0a 20 20 20 20 7d 20 65 6c  ()][0];.    } el
2d70: 73 65 20 7b 0a 20 20 20 20 20 20 74 6f 53 75 62  se {.      toSub
2d80: 74 72 61 63 74 20 3d 20 76 65 63 74 6f 72 2e 6d  tract = vector.m
2d90: 75 6c 28 6b 6e 6f 77 6c 65 64 67 65 2e 73 68 61  ul(knowledge.sha
2da0: 72 70 2c 20 2d 74 68 69 73 2e 71 75 61 6c 69 74  rp, -this.qualit
2db0: 79 56 61 6c 75 65 28 29 29 3b 0a 20 20 20 20 20  yValue());.     
2dc0: 20 77 69 74 68 6f 75 74 20 3d 20 76 65 63 74 6f   without = vecto
2dd0: 72 2e 73 75 62 28 74 68 69 73 2e 63 6f 6f 72 64  r.sub(this.coord
2de0: 2c 20 74 6f 53 75 62 74 72 61 63 74 29 3b 0a 20  , toSubtract);. 
2df0: 20 20 20 20 20 6f 63 74 61 76 65 73 20 3d 20 2d       octaves = -
2e00: 28 77 69 74 68 6f 75 74 5b 30 5d 20 2b 20 6b 6e  (without[0] + kn
2e10: 6f 77 6c 65 64 67 65 2e 69 6e 74 65 72 76 61 6c  owledge.interval
2e20: 73 5b 74 68 69 73 2e 62 61 73 65 28 29 5d 5b 30  s[this.base()][0
2e30: 5d 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 72  ]);.    }..    r
2e40: 65 74 75 72 6e 20 6f 63 74 61 76 65 73 3b 0a 20  eturn octaves;. 
2e50: 20 7d 2c 0a 0a 20 20 69 6e 76 65 72 74 3a 20 66   },..  invert: f
2e60: 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20  unction() {.    
2e70: 76 61 72 20 69 20 3d 20 74 68 69 73 2e 62 61 73  var i = this.bas
2e80: 65 28 29 3b 0a 20 20 20 20 76 61 72 20 71 75 61  e();.    var qua
2e90: 6c 20 3d 20 74 68 69 73 2e 71 75 61 6c 69 74 79  l = this.quality
2ea0: 56 61 6c 75 65 28 29 3b 0a 20 20 20 20 76 61 72  Value();.    var
2eb0: 20 61 63 63 20 3d 20 74 68 69 73 2e 74 79 70 65   acc = this.type
2ec0: 28 29 20 3d 3d 3d 20 27 6d 69 6e 6f 72 27 20 3f  () === 'minor' ?
2ed0: 20 2d 28 71 75 61 6c 20 2d 20 31 29 20 3a 20 2d   -(qual - 1) : -
2ee0: 71 75 61 6c 3b 0a 20 20 20 20 76 61 72 20 69 64  qual;.    var id
2ef0: 78 20 3d 20 39 20 2d 20 6b 6e 6f 77 6c 65 64 67  x = 9 - knowledg
2f00: 65 2e 73 74 65 70 4e 75 6d 62 65 72 5b 69 5d 20  e.stepNumber[i] 
2f10: 2d 20 31 3b 0a 20 20 20 20 76 61 72 20 63 6f 6f  - 1;.    var coo
2f20: 72 64 20 3d 20 6b 6e 6f 77 6c 65 64 67 65 2e 69  rd = knowledge.i
2f30: 6e 74 65 72 76 61 6c 73 5b 6b 6e 6f 77 6c 65 64  ntervals[knowled
2f40: 67 65 2e 69 6e 74 65 72 76 61 6c 73 49 6e 64 65  ge.intervalsInde
2f50: 78 5b 69 64 78 5d 5d 3b 0a 20 20 20 20 63 6f 6f  x[idx]];.    coo
2f60: 72 64 20 3d 20 76 65 63 74 6f 72 2e 61 64 64 28  rd = vector.add(
2f70: 63 6f 6f 72 64 2c 20 76 65 63 74 6f 72 2e 6d 75  coord, vector.mu
2f80: 6c 28 6b 6e 6f 77 6c 65 64 67 65 2e 73 68 61 72  l(knowledge.shar
2f90: 70 2c 20 61 63 63 29 29 3b 0a 0a 20 20 20 20 72  p, acc));..    r
2fa0: 65 74 75 72 6e 20 6e 65 77 20 49 6e 74 65 72 76  eturn new Interv
2fb0: 61 6c 28 63 6f 6f 72 64 29 3b 0a 20 20 7d 2c 0a  al(coord);.  },.
2fc0: 0a 20 20 71 75 61 6c 69 74 79 3a 20 66 75 6e 63  .  quality: func
2fd0: 74 69 6f 6e 28 6c 6e 67 29 20 7b 0a 20 20 20 20  tion(lng) {.    
2fe0: 76 61 72 20 71 75 61 6c 69 74 79 20 3d 20 6b 6e  var quality = kn
2ff0: 6f 77 6c 65 64 67 65 2e 61 6c 74 65 72 61 74 69  owledge.alterati
3000: 6f 6e 73 5b 74 68 69 73 2e 74 79 70 65 28 29 5d  ons[this.type()]
3010: 5b 74 68 69 73 2e 71 75 61 6c 69 74 79 56 61 6c  [this.qualityVal
3020: 75 65 28 29 20 2b 20 32 5d 3b 0a 0a 20 20 20 20  ue() + 2];..    
3030: 72 65 74 75 72 6e 20 6c 6e 67 20 3f 20 6b 6e 6f  return lng ? kno
3040: 77 6c 65 64 67 65 2e 71 75 61 6c 69 74 79 4c 6f  wledge.qualityLo
3050: 6e 67 5b 71 75 61 6c 69 74 79 5d 20 3a 20 71 75  ng[quality] : qu
3060: 61 6c 69 74 79 3b 0a 20 20 7d 2c 0a 0a 20 20 71  ality;.  },..  q
3070: 75 61 6c 69 74 79 56 61 6c 75 65 3a 20 66 75 6e  ualityValue: fun
3080: 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 69 66  ction() {.    if
3090: 20 28 74 68 69 73 2e 64 69 72 65 63 74 69 6f 6e   (this.direction
30a0: 28 29 20 3d 3d 3d 20 27 64 6f 77 6e 27 29 0a 20  () === 'down'). 
30b0: 20 20 20 20 20 72 65 74 75 72 6e 20 4d 61 74 68       return Math
30c0: 2e 66 6c 6f 6f 72 28 28 2d 74 68 69 73 2e 63 6f  .floor((-this.co
30d0: 6f 72 64 5b 31 5d 20 2d 20 32 29 20 2f 20 37 29  ord[1] - 2) / 7)
30e0: 20 2b 20 31 3b 0a 20 20 20 20 65 6c 73 65 0a 20   + 1;.    else. 
30f0: 20 20 20 20 20 72 65 74 75 72 6e 20 4d 61 74 68       return Math
3100: 2e 66 6c 6f 6f 72 28 28 74 68 69 73 2e 63 6f 6f  .floor((this.coo
3110: 72 64 5b 31 5d 20 2d 20 32 29 20 2f 20 37 29 20  rd[1] - 2) / 7) 
3120: 2b 20 31 3b 0a 20 20 7d 2c 0a 0a 20 20 65 71 75  + 1;.  },..  equ
3130: 61 6c 3a 20 66 75 6e 63 74 69 6f 6e 28 69 6e 74  al: function(int
3140: 65 72 76 61 6c 29 20 7b 0a 20 20 20 20 20 20 72  erval) {.      r
3150: 65 74 75 72 6e 20 74 68 69 73 2e 63 6f 6f 72 64  eturn this.coord
3160: 5b 30 5d 20 3d 3d 3d 20 69 6e 74 65 72 76 61 6c  [0] === interval
3170: 2e 63 6f 6f 72 64 5b 30 5d 20 26 26 0a 20 20 20  .coord[0] &&.   
3180: 20 20 20 20 20 20 20 74 68 69 73 2e 63 6f 6f 72         this.coor
3190: 64 5b 31 5d 20 3d 3d 3d 20 69 6e 74 65 72 76 61  d[1] === interva
31a0: 6c 2e 63 6f 6f 72 64 5b 31 5d 3b 0a 20 20 7d 2c  l.coord[1];.  },
31b0: 0a 0a 20 20 67 72 65 61 74 65 72 3a 20 66 75 6e  ..  greater: fun
31c0: 63 74 69 6f 6e 28 69 6e 74 65 72 76 61 6c 29 20  ction(interval) 
31d0: 7b 0a 20 20 20 20 76 61 72 20 73 65 6d 69 20 3d  {.    var semi =
31e0: 20 74 68 69 73 2e 73 65 6d 69 74 6f 6e 65 73 28   this.semitones(
31f0: 29 3b 0a 20 20 20 20 76 61 72 20 69 73 65 6d 69  );.    var isemi
3200: 20 3d 20 69 6e 74 65 72 76 61 6c 2e 73 65 6d 69   = interval.semi
3210: 74 6f 6e 65 73 28 29 3b 0a 0a 20 20 20 20 2f 2f  tones();..    //
3220: 20 49 66 20 65 71 75 61 6c 20 69 6e 20 61 62 73   If equal in abs
3230: 6f 6c 75 74 65 20 73 69 7a 65 2c 20 6d 65 61 73  olute size, meas
3240: 75 72 65 20 77 68 69 63 68 20 69 6e 74 65 72 76  ure which interv
3250: 61 6c 20 69 73 20 62 69 67 67 65 72 0a 20 20 20  al is bigger.   
3260: 20 2f 2f 20 46 6f 72 20 65 78 61 6d 70 6c 65 20   // For example 
3270: 50 34 20 69 73 20 62 69 67 67 65 72 20 74 68 61  P4 is bigger tha
3280: 6e 20 41 33 0a 20 20 20 20 72 65 74 75 72 6e 20  n A3.    return 
3290: 28 73 65 6d 69 20 3d 3d 3d 20 69 73 65 6d 69 29  (semi === isemi)
32a0: 20 3f 0a 20 20 20 20 20 20 28 74 68 69 73 2e 6e   ?.      (this.n
32b0: 75 6d 62 65 72 28 29 20 3e 20 69 6e 74 65 72 76  umber() > interv
32c0: 61 6c 2e 6e 75 6d 62 65 72 28 29 29 20 3a 20 28  al.number()) : (
32d0: 73 65 6d 69 20 3e 20 69 73 65 6d 69 29 3b 0a 20  semi > isemi);. 
32e0: 20 7d 2c 0a 0a 20 20 73 6d 61 6c 6c 65 72 3a 20   },..  smaller: 
32f0: 66 75 6e 63 74 69 6f 6e 28 69 6e 74 65 72 76 61  function(interva
3300: 6c 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  l) {.    return 
3310: 21 74 68 69 73 2e 65 71 75 61 6c 28 69 6e 74 65  !this.equal(inte
3320: 72 76 61 6c 29 20 26 26 20 21 74 68 69 73 2e 67  rval) && !this.g
3330: 72 65 61 74 65 72 28 69 6e 74 65 72 76 61 6c 29  reater(interval)
3340: 3b 0a 20 20 7d 2c 0a 0a 20 20 61 64 64 3a 20 66  ;.  },..  add: f
3350: 75 6e 63 74 69 6f 6e 28 69 6e 74 65 72 76 61 6c  unction(interval
3360: 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 6e  ) {.    return n
3370: 65 77 20 49 6e 74 65 72 76 61 6c 28 76 65 63 74  ew Interval(vect
3380: 6f 72 2e 61 64 64 28 74 68 69 73 2e 63 6f 6f 72  or.add(this.coor
3390: 64 2c 20 69 6e 74 65 72 76 61 6c 2e 63 6f 6f 72  d, interval.coor
33a0: 64 29 29 3b 0a 20 20 7d 2c 0a 0a 20 20 74 6f 53  d));.  },..  toS
33b0: 74 72 69 6e 67 3a 20 66 75 6e 63 74 69 6f 6e 28  tring: function(
33c0: 69 67 6e 6f 72 65 29 20 7b 0a 20 20 20 20 2f 2f  ignore) {.    //
33d0: 20 49 66 20 67 69 76 65 6e 20 74 72 75 65 2c 20   If given true, 
33e0: 72 65 74 75 72 6e 20 74 68 65 20 70 6f 73 69 74  return the posit
33f0: 69 76 65 20 76 61 6c 75 65 0a 20 20 20 20 76 61  ive value.    va
3400: 72 20 6e 75 6d 62 65 72 20 3d 20 69 67 6e 6f 72  r number = ignor
3410: 65 20 3f 20 74 68 69 73 2e 6e 75 6d 62 65 72 28  e ? this.number(
3420: 29 20 3a 20 74 68 69 73 2e 76 61 6c 75 65 28 29  ) : this.value()
3430: 3b 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 74 68  ;..    return th
3440: 69 73 2e 71 75 61 6c 69 74 79 28 29 20 2b 20 6e  is.quality() + n
3450: 75 6d 62 65 72 3b 0a 20 20 7d 0a 7d 3b 0a 0a 49  umber;.  }.};..I
3460: 6e 74 65 72 76 61 6c 2e 74 6f 43 6f 6f 72 64 20  nterval.toCoord 
3470: 3d 20 66 75 6e 63 74 69 6f 6e 28 73 69 6d 70 6c  = function(simpl
3480: 65 29 20 7b 0a 20 20 76 61 72 20 63 6f 6f 72 64  e) {.  var coord
3490: 20 3d 20 74 6f 43 6f 6f 72 64 28 73 69 6d 70 6c   = toCoord(simpl
34a0: 65 29 3b 0a 20 20 69 66 20 28 21 63 6f 6f 72 64  e);.  if (!coord
34b0: 29 0a 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20  ).    throw new 
34c0: 45 72 72 6f 72 28 27 49 6e 76 61 6c 69 64 20 73  Error('Invalid s
34d0: 69 6d 70 6c 65 20 66 6f 72 6d 61 74 20 69 6e 74  imple format int
34e0: 65 72 76 61 6c 27 29 3b 0a 0a 20 20 72 65 74 75  erval');..  retu
34f0: 72 6e 20 6e 65 77 20 49 6e 74 65 72 76 61 6c 28  rn new Interval(
3500: 63 6f 6f 72 64 29 3b 0a 7d 3b 0a 0a 49 6e 74 65  coord);.};..Inte
3510: 72 76 61 6c 2e 66 72 6f 6d 20 3d 20 66 75 6e 63  rval.from = func
3520: 74 69 6f 6e 28 66 72 6f 6d 2c 20 74 6f 29 20 7b  tion(from, to) {
3530: 0a 20 20 72 65 74 75 72 6e 20 66 72 6f 6d 2e 69  .  return from.i
3540: 6e 74 65 72 76 61 6c 28 74 6f 29 3b 0a 7d 3b 0a  nterval(to);.};.
3550: 0a 49 6e 74 65 72 76 61 6c 2e 62 65 74 77 65 65  .Interval.betwee
3560: 6e 20 3d 20 66 75 6e 63 74 69 6f 6e 28 66 72 6f  n = function(fro
3570: 6d 2c 20 74 6f 29 20 7b 0a 20 20 72 65 74 75 72  m, to) {.  retur
3580: 6e 20 6e 65 77 20 49 6e 74 65 72 76 61 6c 28 76  n new Interval(v
3590: 65 63 74 6f 72 2e 73 75 62 28 74 6f 2e 63 6f 6f  ector.sub(to.coo
35a0: 72 64 2c 20 66 72 6f 6d 2e 63 6f 6f 72 64 29 29  rd, from.coord))
35b0: 3b 0a 7d 3b 0a 0a 49 6e 74 65 72 76 61 6c 2e 69  ;.};..Interval.i
35c0: 6e 76 65 72 74 20 3d 20 66 75 6e 63 74 69 6f 6e  nvert = function
35d0: 28 73 49 6e 74 65 72 76 61 6c 29 20 7b 0a 20 20  (sInterval) {.  
35e0: 72 65 74 75 72 6e 20 49 6e 74 65 72 76 61 6c 2e  return Interval.
35f0: 74 6f 43 6f 6f 72 64 28 73 49 6e 74 65 72 76 61  toCoord(sInterva
3600: 6c 29 2e 69 6e 76 65 72 74 28 29 2e 74 6f 53 74  l).invert().toSt
3610: 72 69 6e 67 28 29 3b 0a 7d 3b 0a 0a 6d 6f 64 75  ring();.};..modu
3620: 6c 65 2e 65 78 70 6f 72 74 73 20 3d 20 49 6e 74  le.exports = Int
3630: 65 72 76 61 6c 3b 0a 0a 7d 2c 7b 22 2e 2f 6b 6e  erval;..},{"./kn
3640: 6f 77 6c 65 64 67 65 22 3a 34 2c 22 2e 2f 76 65  owledge":4,"./ve
3650: 63 74 6f 72 22 3a 38 2c 22 69 6e 74 65 72 76 61  ctor":8,"interva
3660: 6c 2d 63 6f 6f 72 64 73 22 3a 31 32 7d 5d 2c 34  l-coords":12}],4
3670: 3a 5b 66 75 6e 63 74 69 6f 6e 28 72 65 71 75 69  :[function(requi
3680: 72 65 2c 6d 6f 64 75 6c 65 2c 65 78 70 6f 72 74  re,module,export
3690: 73 29 7b 0a 2f 2f 20 4e 6f 74 65 20 63 6f 6f 72  s){.// Note coor
36a0: 64 69 6e 61 74 65 73 20 5b 6f 63 74 61 76 65 2c  dinates [octave,
36b0: 20 66 69 66 74 68 5d 20 72 65 6c 61 74 69 76 65   fifth] relative
36c0: 20 74 6f 20 43 0a 6d 6f 64 75 6c 65 2e 65 78 70   to C.module.exp
36d0: 6f 72 74 73 20 3d 20 7b 0a 20 20 6e 6f 74 65 73  orts = {.  notes
36e0: 3a 20 7b 0a 20 20 20 20 63 3a 20 5b 30 2c 20 30  : {.    c: [0, 0
36f0: 5d 2c 0a 20 20 20 20 64 3a 20 5b 2d 31 2c 20 32  ],.    d: [-1, 2
3700: 5d 2c 0a 20 20 20 20 65 3a 20 5b 2d 32 2c 20 34  ],.    e: [-2, 4
3710: 5d 2c 0a 20 20 20 20 66 3a 20 5b 31 2c 20 2d 31  ],.    f: [1, -1
3720: 5d 2c 0a 20 20 20 20 67 3a 20 5b 30 2c 20 31 5d  ],.    g: [0, 1]
3730: 2c 0a 20 20 20 20 61 3a 20 5b 2d 31 2c 20 33 5d  ,.    a: [-1, 3]
3740: 2c 0a 20 20 20 20 62 3a 20 5b 2d 32 2c 20 35 5d  ,.    b: [-2, 5]
3750: 2c 0a 20 20 20 20 68 3a 20 5b 2d 32 2c 20 35 5d  ,.    h: [-2, 5]
3760: 0a 20 20 7d 2c 0a 0a 20 20 69 6e 74 65 72 76 61  .  },..  interva
3770: 6c 73 3a 20 7b 0a 20 20 20 20 75 6e 69 73 6f 6e  ls: {.    unison
3780: 3a 20 5b 30 2c 20 30 5d 2c 0a 20 20 20 20 73 65  : [0, 0],.    se
3790: 63 6f 6e 64 3a 20 5b 33 2c 20 2d 35 5d 2c 0a 20  cond: [3, -5],. 
37a0: 20 20 20 74 68 69 72 64 3a 20 5b 32 2c 20 2d 33     third: [2, -3
37b0: 5d 2c 0a 20 20 20 20 66 6f 75 72 74 68 3a 20 5b  ],.    fourth: [
37c0: 31 2c 20 2d 31 5d 2c 0a 20 20 20 20 66 69 66 74  1, -1],.    fift
37d0: 68 3a 20 5b 30 2c 20 31 5d 2c 0a 20 20 20 20 73  h: [0, 1],.    s
37e0: 69 78 74 68 3a 20 5b 33 2c 20 2d 34 5d 2c 0a 20  ixth: [3, -4],. 
37f0: 20 20 20 73 65 76 65 6e 74 68 3a 20 5b 32 2c 20     seventh: [2, 
3800: 2d 32 5d 2c 0a 20 20 20 20 6f 63 74 61 76 65 3a  -2],.    octave:
3810: 20 5b 31 2c 20 30 5d 0a 20 20 7d 2c 0a 0a 20 20   [1, 0].  },..  
3820: 69 6e 74 65 72 76 61 6c 46 72 6f 6d 46 69 66 74  intervalFromFift
3830: 68 3a 20 5b 27 73 65 63 6f 6e 64 27 2c 20 27 73  h: ['second', 's
3840: 69 78 74 68 27 2c 20 27 74 68 69 72 64 27 2c 20  ixth', 'third', 
3850: 27 73 65 76 65 6e 74 68 27 2c 20 27 66 6f 75 72  'seventh', 'four
3860: 74 68 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20  th',.           
3870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 75                'u
3880: 6e 69 73 6f 6e 27 2c 20 27 66 69 66 74 68 27 5d  nison', 'fifth']
3890: 2c 0a 0a 20 20 69 6e 74 65 72 76 61 6c 73 49 6e  ,..  intervalsIn
38a0: 64 65 78 3a 20 5b 27 75 6e 69 73 6f 6e 27 2c 20  dex: ['unison', 
38b0: 27 73 65 63 6f 6e 64 27 2c 20 27 74 68 69 72 64  'second', 'third
38c0: 27 2c 20 27 66 6f 75 72 74 68 27 2c 20 27 66 69  ', 'fourth', 'fi
38d0: 66 74 68 27 2c 0a 20 20 20 20 20 20 20 20 20 20  fth',.          
38e0: 20 20 20 20 20 20 20 20 20 20 20 20 27 73 69 78              'six
38f0: 74 68 27 2c 20 27 73 65 76 65 6e 74 68 27 2c 20  th', 'seventh', 
3900: 27 6f 63 74 61 76 65 27 2c 20 27 6e 69 6e 74 68  'octave', 'ninth
3910: 27 2c 20 27 74 65 6e 74 68 27 2c 0a 20 20 20 20  ', 'tenth',.    
3920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3930: 20 20 27 65 6c 65 76 65 6e 74 68 27 2c 20 27 74    'eleventh', 't
3940: 77 65 6c 66 74 68 27 2c 20 27 74 68 69 72 74 65  welfth', 'thirte
3950: 65 6e 74 68 27 2c 20 27 66 6f 75 72 74 65 65 6e  enth', 'fourteen
3960: 74 68 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20  th',.           
3970: 20 20 20 20 20 20 20 20 20 20 20 27 66 69 66 74             'fift
3980: 65 65 6e 74 68 27 5d 2c 0a 0a 2f 2f 20 6c 69 6e  eenth'],..// lin
3990: 65 61 72 20 69 6e 64 65 78 20 74 6f 20 66 69 66  ear index to fif
39a0: 74 68 20 3d 20 28 32 20 2a 20 69 6e 64 65 78 20  th = (2 * index 
39b0: 2b 20 31 29 20 25 20 37 0a 20 20 66 69 66 74 68  + 1) % 7.  fifth
39c0: 73 3a 20 5b 27 66 27 2c 20 27 63 27 2c 20 27 67  s: ['f', 'c', 'g
39d0: 27 2c 20 27 64 27 2c 20 27 61 27 2c 20 27 65 27  ', 'd', 'a', 'e'
39e0: 2c 20 27 62 27 5d 2c 0a 20 20 61 63 63 69 64 65  , 'b'],.  accide
39f0: 6e 74 61 6c 73 3a 20 5b 27 62 62 27 2c 20 27 62  ntals: ['bb', 'b
3a00: 27 2c 20 27 27 2c 20 27 23 27 2c 20 27 78 27 5d  ', '', '#', 'x']
3a10: 2c 0a 0a 20 20 73 68 61 72 70 3a 20 5b 2d 34 2c  ,..  sharp: [-4,
3a20: 20 37 5d 2c 0a 20 20 41 34 3a 20 5b 33 2c 20 33   7],.  A4: [3, 3
3a30: 5d 2c 0a 0a 20 20 64 75 72 61 74 69 6f 6e 73 3a  ],..  durations:
3a40: 20 7b 0a 20 20 20 20 27 30 2e 32 35 27 3a 20 27   {.    '0.25': '
3a50: 6c 6f 6e 67 61 27 2c 0a 20 20 20 20 27 30 2e 35  longa',.    '0.5
3a60: 27 3a 20 27 62 72 65 76 65 27 2c 0a 20 20 20 20  ': 'breve',.    
3a70: 27 31 27 3a 20 27 77 68 6f 6c 65 27 2c 0a 20 20  '1': 'whole',.  
3a80: 20 20 27 32 27 3a 20 27 68 61 6c 66 27 2c 0a 20    '2': 'half',. 
3a90: 20 20 20 27 34 27 3a 20 27 71 75 61 72 74 65 72     '4': 'quarter
3aa0: 27 2c 0a 20 20 20 20 27 38 27 3a 20 27 65 69 67  ',.    '8': 'eig
3ab0: 68 74 68 27 2c 0a 20 20 20 20 27 31 36 27 3a 20  hth',.    '16': 
3ac0: 27 73 69 78 74 65 65 6e 74 68 27 2c 0a 20 20 20  'sixteenth',.   
3ad0: 20 27 33 32 27 3a 20 27 74 68 69 72 74 79 2d 73   '32': 'thirty-s
3ae0: 65 63 6f 6e 64 27 2c 0a 20 20 20 20 27 36 34 27  econd',.    '64'
3af0: 3a 20 27 73 69 78 74 79 2d 66 6f 75 72 74 68 27  : 'sixty-fourth'
3b00: 2c 0a 20 20 20 20 27 31 32 38 27 3a 20 27 68 75  ,.    '128': 'hu
3b10: 6e 64 72 65 64 2d 74 77 65 6e 74 79 2d 65 69 67  ndred-twenty-eig
3b20: 68 74 68 27 0a 20 20 7d 2c 0a 0a 20 20 71 75 61  hth'.  },..  qua
3b30: 6c 69 74 79 4c 6f 6e 67 3a 20 7b 0a 20 20 20 20  lityLong: {.    
3b40: 50 3a 20 27 70 65 72 66 65 63 74 27 2c 0a 20 20  P: 'perfect',.  
3b50: 20 20 4d 3a 20 27 6d 61 6a 6f 72 27 2c 0a 20 20    M: 'major',.  
3b60: 20 20 6d 3a 20 27 6d 69 6e 6f 72 27 2c 0a 20 20    m: 'minor',.  
3b70: 20 20 41 3a 20 27 61 75 67 6d 65 6e 74 65 64 27    A: 'augmented'
3b80: 2c 0a 20 20 20 20 41 41 3a 20 27 64 6f 75 62 6c  ,.    AA: 'doubl
3b90: 79 20 61 75 67 6d 65 6e 74 65 64 27 2c 0a 20 20  y augmented',.  
3ba0: 20 20 64 3a 20 27 64 69 6d 69 6e 69 73 68 65 64    d: 'diminished
3bb0: 27 2c 0a 20 20 20 20 64 64 3a 20 27 64 6f 75 62  ',.    dd: 'doub
3bc0: 6c 79 20 64 69 6d 69 6e 69 73 68 65 64 27 0a 20  ly diminished'. 
3bd0: 20 7d 2c 0a 0a 20 20 61 6c 74 65 72 61 74 69 6f   },..  alteratio
3be0: 6e 73 3a 20 7b 0a 20 20 20 20 70 65 72 66 65 63  ns: {.    perfec
3bf0: 74 3a 20 5b 27 64 64 27 2c 20 27 64 27 2c 20 27  t: ['dd', 'd', '
3c00: 50 27 2c 20 27 41 27 2c 20 27 41 41 27 5d 2c 0a  P', 'A', 'AA'],.
3c10: 20 20 20 20 6d 69 6e 6f 72 3a 20 5b 27 64 64 27      minor: ['dd'
3c20: 2c 20 27 64 27 2c 20 27 6d 27 2c 20 27 4d 27 2c  , 'd', 'm', 'M',
3c30: 20 27 41 27 2c 20 27 41 41 27 5d 0a 20 20 7d 2c   'A', 'AA'].  },
3c40: 0a 0a 20 20 73 79 6d 62 6f 6c 73 3a 20 7b 0a 20  ..  symbols: {. 
3c50: 20 20 20 27 6d 69 6e 27 3a 20 5b 27 6d 33 27 2c     'min': ['m3',
3c60: 20 27 50 35 27 5d 2c 0a 20 20 20 20 27 6d 27 3a   'P5'],.    'm':
3c70: 20 5b 27 6d 33 27 2c 20 27 50 35 27 5d 2c 0a 20   ['m3', 'P5'],. 
3c80: 20 20 20 27 2d 27 3a 20 5b 27 6d 33 27 2c 20 27     '-': ['m3', '
3c90: 50 35 27 5d 2c 0a 0a 20 20 20 20 27 4d 27 3a 20  P5'],..    'M': 
3ca0: 5b 27 4d 33 27 2c 20 27 50 35 27 5d 2c 0a 20 20  ['M3', 'P5'],.  
3cb0: 20 20 27 27 3a 20 5b 27 4d 33 27 2c 20 27 50 35    '': ['M3', 'P5
3cc0: 27 5d 2c 0a 0a 20 20 20 20 27 2b 27 3a 20 5b 27  '],..    '+': ['
3cd0: 4d 33 27 2c 20 27 41 35 27 5d 2c 0a 20 20 20 20  M3', 'A5'],.    
3ce0: 27 61 75 67 27 3a 20 5b 27 4d 33 27 2c 20 27 41  'aug': ['M3', 'A
3cf0: 35 27 5d 2c 0a 0a 20 20 20 20 27 64 69 6d 27 3a  5'],..    'dim':
3d00: 20 5b 27 6d 33 27 2c 20 27 64 35 27 5d 2c 0a 20   ['m3', 'd5'],. 
3d10: 20 20 20 27 6f 27 3a 20 5b 27 6d 33 27 2c 20 27     'o': ['m3', '
3d20: 64 35 27 5d 2c 0a 0a 20 20 20 20 27 6d 61 6a 27  d5'],..    'maj'
3d30: 3a 20 5b 27 4d 33 27 2c 20 27 50 35 27 2c 20 27  : ['M3', 'P5', '
3d40: 4d 37 27 5d 2c 0a 20 20 20 20 27 64 6f 6d 27 3a  M7'],.    'dom':
3d50: 20 5b 27 4d 33 27 2c 20 27 50 35 27 2c 20 27 6d   ['M3', 'P5', 'm
3d60: 37 27 5d 2c 0a 20 20 20 20 27 c3 b8 27 3a 20 5b  7'],.    '..': [
3d70: 27 6d 33 27 2c 20 27 64 35 27 2c 20 27 6d 37 27  'm3', 'd5', 'm7'
3d80: 5d 2c 0a 0a 20 20 20 20 27 35 27 3a 20 5b 27 50  ],..    '5': ['P
3d90: 35 27 5d 0a 20 20 7d 2c 0a 0a 20 20 63 68 6f 72  5'].  },..  chor
3da0: 64 53 68 6f 72 74 3a 20 7b 0a 20 20 20 20 27 6d  dShort: {.    'm
3db0: 61 6a 6f 72 27 3a 20 27 4d 27 2c 0a 20 20 20 20  ajor': 'M',.    
3dc0: 27 6d 69 6e 6f 72 27 3a 20 27 6d 27 2c 0a 20 20  'minor': 'm',.  
3dd0: 20 20 27 61 75 67 6d 65 6e 74 65 64 27 3a 20 27    'augmented': '
3de0: 61 75 67 27 2c 0a 20 20 20 20 27 64 69 6d 69 6e  aug',.    'dimin
3df0: 69 73 68 65 64 27 3a 20 27 64 69 6d 27 2c 0a 20  ished': 'dim',. 
3e00: 20 20 20 27 68 61 6c 66 2d 64 69 6d 69 6e 69 73     'half-diminis
3e10: 68 65 64 27 3a 20 27 37 62 35 27 2c 0a 20 20 20  hed': '7b5',.   
3e20: 20 27 70 6f 77 65 72 27 3a 20 27 35 27 2c 0a 20   'power': '5',. 
3e30: 20 20 20 27 64 6f 6d 69 6e 61 6e 74 27 3a 20 27     'dominant': '
3e40: 37 27 0a 20 20 7d 2c 0a 0a 20 20 73 74 65 70 4e  7'.  },..  stepN
3e50: 75 6d 62 65 72 3a 20 7b 0a 20 20 20 20 27 75 6e  umber: {.    'un
3e60: 69 73 6f 6e 27 3a 20 31 2c 0a 20 20 20 20 27 66  ison': 1,.    'f
3e70: 69 72 73 74 27 3a 20 31 2c 0a 20 20 20 20 27 73  irst': 1,.    's
3e80: 65 63 6f 6e 64 27 3a 20 32 2c 0a 20 20 20 20 27  econd': 2,.    '
3e90: 74 68 69 72 64 27 3a 20 33 2c 0a 20 20 20 20 27  third': 3,.    '
3ea0: 66 6f 75 72 74 68 27 3a 20 34 2c 0a 20 20 20 20  fourth': 4,.    
3eb0: 27 66 69 66 74 68 27 3a 20 35 2c 0a 20 20 20 20  'fifth': 5,.    
3ec0: 27 73 69 78 74 68 27 3a 20 36 2c 0a 20 20 20 20  'sixth': 6,.    
3ed0: 27 73 65 76 65 6e 74 68 27 3a 20 37 2c 0a 20 20  'seventh': 7,.  
3ee0: 20 20 27 6f 63 74 61 76 65 27 3a 20 38 2c 0a 20    'octave': 8,. 
3ef0: 20 20 20 27 6e 69 6e 74 68 27 3a 20 39 2c 0a 20     'ninth': 9,. 
3f00: 20 20 20 27 65 6c 65 76 65 6e 74 68 27 3a 20 31     'eleventh': 1
3f10: 31 2c 0a 20 20 20 20 27 74 68 69 72 74 65 65 6e  1,.    'thirteen
3f20: 74 68 27 3a 20 31 33 0a 20 20 7d 2c 0a 0a 20 20  th': 13.  },..  
3f30: 2f 2f 20 41 64 6a 75 73 74 65 64 20 53 68 65 61  // Adjusted Shea
3f40: 72 65 72 20 73 79 6c 6c 61 62 6c 65 73 20 2d 20  rer syllables - 
3f50: 43 68 72 6f 6d 61 74 69 63 20 73 6f 6c 66 65 67  Chromatic solfeg
3f60: 65 20 73 79 73 74 65 6d 0a 20 20 2f 2f 20 53 6f  e system.  // So
3f70: 6d 65 20 69 6e 74 65 72 76 61 6c 73 20 61 72 65  me intervals are
3f80: 20 6e 6f 74 20 70 72 6f 76 69 64 65 64 20 66 6f   not provided fo
3f90: 72 2e 20 54 68 65 73 65 20 69 6e 63 6c 75 64 65  r. These include
3fa0: 3a 0a 20 20 2f 2f 20 64 64 32 20 2d 20 44 6f 75  :.  // dd2 - Dou
3fb0: 62 6c 79 20 64 69 6d 69 6e 69 73 68 65 64 20 73  bly diminished s
3fc0: 65 63 6f 6e 64 0a 20 20 2f 2f 20 64 64 33 20 2d  econd.  // dd3 -
3fd0: 20 44 6f 75 62 6c 79 20 64 69 6d 69 6e 69 73 68   Doubly diminish
3fe0: 65 64 20 74 68 69 72 64 0a 20 20 2f 2f 20 41 41  ed third.  // AA
3ff0: 33 20 2d 20 44 6f 75 62 6c 79 20 61 75 67 6d 65  3 - Doubly augme
4000: 6e 74 65 64 20 74 68 69 72 64 0a 20 20 2f 2f 20  nted third.  // 
4010: 64 64 36 20 2d 20 44 6f 75 62 6c 79 20 64 69 6d  dd6 - Doubly dim
4020: 69 6e 69 73 68 65 64 20 73 69 78 74 68 0a 20 20  inished sixth.  
4030: 2f 2f 20 64 64 37 20 2d 20 44 6f 75 62 6c 79 20  // dd7 - Doubly 
4040: 64 69 6d 69 6e 69 73 68 65 64 20 73 65 76 65 6e  diminished seven
4050: 74 68 0a 20 20 2f 2f 20 41 41 37 20 2d 20 44 6f  th.  // AA7 - Do
4060: 75 62 6c 79 20 61 75 67 6d 65 6e 74 65 64 20 73  ubly augmented s
4070: 65 76 65 6e 74 68 0a 20 20 69 6e 74 65 72 76 61  eventh.  interva
4080: 6c 53 6f 6c 66 65 67 65 3a 20 7b 0a 20 20 20 20  lSolfege: {.    
4090: 27 64 64 31 27 3a 20 27 64 61 77 27 2c 0a 20 20  'dd1': 'daw',.  
40a0: 20 20 27 64 31 27 3a 20 27 64 65 27 2c 0a 20 20    'd1': 'de',.  
40b0: 20 20 27 50 31 27 3a 20 27 64 6f 27 2c 0a 20 20    'P1': 'do',.  
40c0: 20 20 27 41 31 27 3a 20 27 64 69 27 2c 0a 20 20    'A1': 'di',.  
40d0: 20 20 27 41 41 31 27 3a 20 27 64 61 69 27 2c 0a    'AA1': 'dai',.
40e0: 20 20 20 20 27 64 32 27 3a 20 27 72 61 77 27 2c      'd2': 'raw',
40f0: 0a 20 20 20 20 27 6d 32 27 3a 20 27 72 61 27 2c  .    'm2': 'ra',
4100: 0a 20 20 20 20 27 4d 32 27 3a 20 27 72 65 27 2c  .    'M2': 're',
4110: 0a 20 20 20 20 27 41 32 27 3a 20 27 72 69 27 2c  .    'A2': 'ri',
4120: 0a 20 20 20 20 27 41 41 32 27 3a 20 27 72 61 69  .    'AA2': 'rai
4130: 27 2c 0a 20 20 20 20 27 64 33 27 3a 20 27 6d 61  ',.    'd3': 'ma
4140: 77 27 2c 0a 20 20 20 20 27 6d 33 27 3a 20 27 6d  w',.    'm3': 'm
4150: 65 27 2c 0a 20 20 20 20 27 4d 33 27 3a 20 27 6d  e',.    'M3': 'm
4160: 69 27 2c 0a 20 20 20 20 27 41 33 27 3a 20 27 6d  i',.    'A3': 'm
4170: 61 69 27 2c 0a 20 20 20 20 27 64 64 34 27 3a 20  ai',.    'dd4': 
4180: 27 66 61 77 27 2c 0a 20 20 20 20 27 64 34 27 3a  'faw',.    'd4':
4190: 20 27 66 65 27 2c 0a 20 20 20 20 27 50 34 27 3a   'fe',.    'P4':
41a0: 20 27 66 61 27 2c 0a 20 20 20 20 27 41 34 27 3a   'fa',.    'A4':
41b0: 20 27 66 69 27 2c 0a 20 20 20 20 27 41 41 34 27   'fi',.    'AA4'
41c0: 3a 20 27 66 61 69 27 2c 0a 20 20 20 20 27 64 64  : 'fai',.    'dd
41d0: 35 27 3a 20 27 73 61 77 27 2c 0a 20 20 20 20 27  5': 'saw',.    '
41e0: 64 35 27 3a 20 27 73 65 27 2c 0a 20 20 20 20 27  d5': 'se',.    '
41f0: 50 35 27 3a 20 27 73 6f 27 2c 0a 20 20 20 20 27  P5': 'so',.    '
4200: 41 35 27 3a 20 27 73 69 27 2c 0a 20 20 20 20 27  A5': 'si',.    '
4210: 41 41 35 27 3a 20 27 73 61 69 27 2c 0a 20 20 20  AA5': 'sai',.   
4220: 20 27 64 36 27 3a 20 27 6c 61 77 27 2c 0a 20 20   'd6': 'law',.  
4230: 20 20 27 6d 36 27 3a 20 27 6c 65 27 2c 0a 20 20    'm6': 'le',.  
4240: 20 20 27 4d 36 27 3a 20 27 6c 61 27 2c 0a 20 20    'M6': 'la',.  
4250: 20 20 27 41 36 27 3a 20 27 6c 69 27 2c 0a 20 20    'A6': 'li',.  
4260: 20 20 27 41 41 36 27 3a 20 27 6c 61 69 27 2c 0a    'AA6': 'lai',.
4270: 20 20 20 20 27 64 37 27 3a 20 27 74 61 77 27 2c      'd7': 'taw',
4280: 0a 20 20 20 20 27 6d 37 27 3a 20 27 74 65 27 2c  .    'm7': 'te',
4290: 0a 20 20 20 20 27 4d 37 27 3a 20 27 74 69 27 2c  .    'M7': 'ti',
42a0: 0a 20 20 20 20 27 41 37 27 3a 20 27 74 61 69 27  .    'A7': 'tai'
42b0: 2c 0a 20 20 20 20 27 64 64 38 27 3a 20 27 64 61  ,.    'dd8': 'da
42c0: 77 27 2c 0a 20 20 20 20 27 64 38 27 3a 20 27 64  w',.    'd8': 'd
42d0: 65 27 2c 0a 20 20 20 20 27 50 38 27 3a 20 27 64  e',.    'P8': 'd
42e0: 6f 27 2c 0a 20 20 20 20 27 41 38 27 3a 20 27 64  o',.    'A8': 'd
42f0: 69 27 2c 0a 20 20 20 20 27 41 41 38 27 3a 20 27  i',.    'AA8': '
4300: 64 61 69 27 0a 20 20 7d 0a 7d 3b 0a 0a 7d 2c 7b  dai'.  }.};..},{
4310: 7d 5d 2c 35 3a 5b 66 75 6e 63 74 69 6f 6e 28 72  }],5:[function(r
4320: 65 71 75 69 72 65 2c 6d 6f 64 75 6c 65 2c 65 78  equire,module,ex
4330: 70 6f 72 74 73 29 7b 0a 76 61 72 20 73 63 69 65  ports){.var scie
4340: 6e 74 69 66 69 63 20 3d 20 72 65 71 75 69 72 65  ntific = require
4350: 28 27 73 63 69 65 6e 74 69 66 69 63 2d 6e 6f 74  ('scientific-not
4360: 61 74 69 6f 6e 27 29 3b 0a 76 61 72 20 68 65 6c  ation');.var hel
4370: 6d 68 6f 6c 74 7a 20 3d 20 72 65 71 75 69 72 65  mholtz = require
4380: 28 27 68 65 6c 6d 68 6f 6c 74 7a 27 29 3b 0a 76  ('helmholtz');.v
4390: 61 72 20 70 69 74 63 68 46 71 20 3d 20 72 65 71  ar pitchFq = req
43a0: 75 69 72 65 28 27 70 69 74 63 68 2d 66 71 27 29  uire('pitch-fq')
43b0: 3b 0a 76 61 72 20 6b 6e 6f 77 6c 65 64 67 65 20  ;.var knowledge 
43c0: 3d 20 72 65 71 75 69 72 65 28 27 2e 2f 6b 6e 6f  = require('./kno
43d0: 77 6c 65 64 67 65 27 29 3b 0a 76 61 72 20 76 65  wledge');.var ve
43e0: 63 74 6f 72 20 3d 20 72 65 71 75 69 72 65 28 27  ctor = require('
43f0: 2e 2f 76 65 63 74 6f 72 27 29 3b 0a 76 61 72 20  ./vector');.var 
4400: 49 6e 74 65 72 76 61 6c 20 3d 20 72 65 71 75 69  Interval = requi
4410: 72 65 28 27 2e 2f 69 6e 74 65 72 76 61 6c 27 29  re('./interval')
4420: 3b 0a 0a 66 75 6e 63 74 69 6f 6e 20 70 61 64 28  ;..function pad(
4430: 73 74 72 2c 20 63 68 2c 20 6c 65 6e 29 20 7b 0a  str, ch, len) {.
4440: 20 20 66 6f 72 20 28 3b 20 6c 65 6e 20 3e 20 30    for (; len > 0
4450: 3b 20 6c 65 6e 2d 2d 29 20 7b 0a 20 20 20 20 73  ; len--) {.    s
4460: 74 72 20 2b 3d 20 63 68 3b 0a 20 20 7d 0a 0a 20  tr += ch;.  }.. 
4470: 20 72 65 74 75 72 6e 20 73 74 72 3b 0a 7d 0a 0a   return str;.}..
4480: 0a 66 75 6e 63 74 69 6f 6e 20 4e 6f 74 65 28 63  .function Note(c
4490: 6f 6f 72 64 2c 20 64 75 72 61 74 69 6f 6e 29 20  oord, duration) 
44a0: 7b 0a 20 20 69 66 20 28 21 28 74 68 69 73 20 69  {.  if (!(this i
44b0: 6e 73 74 61 6e 63 65 6f 66 20 4e 6f 74 65 29 29  nstanceof Note))
44c0: 20 72 65 74 75 72 6e 20 6e 65 77 20 4e 6f 74 65   return new Note
44d0: 28 63 6f 6f 72 64 2c 20 64 75 72 61 74 69 6f 6e  (coord, duration
44e0: 29 3b 0a 20 20 64 75 72 61 74 69 6f 6e 20 3d 20  );.  duration = 
44f0: 64 75 72 61 74 69 6f 6e 20 7c 7c 20 7b 7d 3b 0a  duration || {};.
4500: 0a 20 20 74 68 69 73 2e 64 75 72 61 74 69 6f 6e  .  this.duration
4510: 20 3d 20 7b 20 76 61 6c 75 65 3a 20 64 75 72 61   = { value: dura
4520: 74 69 6f 6e 2e 76 61 6c 75 65 20 7c 7c 20 34 2c  tion.value || 4,
4530: 20 64 6f 74 73 3a 20 64 75 72 61 74 69 6f 6e 2e   dots: duration.
4540: 64 6f 74 73 20 7c 7c 20 30 20 7d 3b 0a 20 20 74  dots || 0 };.  t
4550: 68 69 73 2e 63 6f 6f 72 64 20 3d 20 63 6f 6f 72  his.coord = coor
4560: 64 3b 0a 7d 0a 0a 4e 6f 74 65 2e 70 72 6f 74 6f  d;.}..Note.proto
4570: 74 79 70 65 20 3d 20 7b 0a 20 20 6f 63 74 61 76  type = {.  octav
4580: 65 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a  e: function() {.
4590: 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
45a0: 63 6f 6f 72 64 5b 30 5d 20 2b 20 6b 6e 6f 77 6c  coord[0] + knowl
45b0: 65 64 67 65 2e 41 34 5b 30 5d 20 2d 20 6b 6e 6f  edge.A4[0] - kno
45c0: 77 6c 65 64 67 65 2e 6e 6f 74 65 73 5b 74 68 69  wledge.notes[thi
45d0: 73 2e 6e 61 6d 65 28 29 5d 5b 30 5d 20 2b 0a 20  s.name()][0] +. 
45e0: 20 20 20 20 20 74 68 69 73 2e 61 63 63 69 64 65       this.accide
45f0: 6e 74 61 6c 56 61 6c 75 65 28 29 20 2a 20 34 3b  ntalValue() * 4;
4600: 0a 20 20 7d 2c 0a 0a 20 20 6e 61 6d 65 3a 20 66  .  },..  name: f
4610: 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20  unction() {.    
4620: 76 61 72 20 76 61 6c 75 65 20 3d 20 74 68 69 73  var value = this
4630: 2e 61 63 63 69 64 65 6e 74 61 6c 56 61 6c 75 65  .accidentalValue
4640: 28 29 3b 0a 20 20 20 20 76 61 72 20 69 64 78 20  ();.    var idx 
4650: 3d 20 74 68 69 73 2e 63 6f 6f 72 64 5b 31 5d 20  = this.coord[1] 
4660: 2b 20 6b 6e 6f 77 6c 65 64 67 65 2e 41 34 5b 31  + knowledge.A4[1
4670: 5d 20 2d 20 76 61 6c 75 65 20 2a 20 37 20 2b 20  ] - value * 7 + 
4680: 31 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 6b 6e  1;.    return kn
4690: 6f 77 6c 65 64 67 65 2e 66 69 66 74 68 73 5b 69  owledge.fifths[i
46a0: 64 78 5d 3b 0a 20 20 7d 2c 0a 0a 20 20 61 63 63  dx];.  },..  acc
46b0: 69 64 65 6e 74 61 6c 56 61 6c 75 65 3a 20 66 75  identalValue: fu
46c0: 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 72  nction() {.    r
46d0: 65 74 75 72 6e 20 4d 61 74 68 2e 72 6f 75 6e 64  eturn Math.round
46e0: 28 28 74 68 69 73 2e 63 6f 6f 72 64 5b 31 5d 20  ((this.coord[1] 
46f0: 2b 20 6b 6e 6f 77 6c 65 64 67 65 2e 41 34 5b 31  + knowledge.A4[1
4700: 5d 20 2d 20 32 29 20 2f 20 37 29 3b 0a 20 20 7d  ] - 2) / 7);.  }
4710: 2c 0a 0a 20 20 61 63 63 69 64 65 6e 74 61 6c 3a  ,..  accidental:
4720: 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20   function() {.  
4730: 20 20 72 65 74 75 72 6e 20 6b 6e 6f 77 6c 65 64    return knowled
4740: 67 65 2e 61 63 63 69 64 65 6e 74 61 6c 73 5b 74  ge.accidentals[t
4750: 68 69 73 2e 61 63 63 69 64 65 6e 74 61 6c 56 61  his.accidentalVa
4760: 6c 75 65 28 29 20 2b 20 32 5d 3b 0a 20 20 7d 2c  lue() + 2];.  },
4770: 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 52 65 74  ..  /**.   * Ret
4780: 75 72 6e 73 20 74 68 65 20 6b 65 79 20 6e 75 6d  urns the key num
4790: 62 65 72 20 6f 66 20 74 68 65 20 6e 6f 74 65 0a  ber of the note.
47a0: 20 20 20 2a 2f 0a 20 20 6b 65 79 3a 20 66 75 6e     */.  key: fun
47b0: 63 74 69 6f 6e 28 77 68 69 74 65 29 20 7b 0a 20  ction(white) {. 
47c0: 20 20 20 69 66 20 28 77 68 69 74 65 29 0a 20 20     if (white).  
47d0: 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
47e0: 63 6f 6f 72 64 5b 30 5d 20 2a 20 37 20 2b 20 74  coord[0] * 7 + t
47f0: 68 69 73 2e 63 6f 6f 72 64 5b 31 5d 20 2a 20 34  his.coord[1] * 4
4800: 20 2b 20 32 39 3b 0a 20 20 20 20 65 6c 73 65 0a   + 29;.    else.
4810: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
4820: 73 2e 63 6f 6f 72 64 5b 30 5d 20 2a 20 31 32 20  s.coord[0] * 12 
4830: 2b 20 74 68 69 73 2e 63 6f 6f 72 64 5b 31 5d 20  + this.coord[1] 
4840: 2a 20 37 20 2b 20 34 39 3b 0a 20 20 7d 2c 0a 0a  * 7 + 49;.  },..
4850: 20 20 2f 2a 2a 0a 20 20 2a 20 52 65 74 75 72 6e    /**.  * Return
4860: 73 20 61 20 6e 75 6d 62 65 72 20 72 61 6e 67 69  s a number rangi
4870: 6e 67 20 66 72 6f 6d 20 30 2d 31 32 37 20 72 65  ng from 0-127 re
4880: 70 72 65 73 65 6e 74 69 6e 67 20 61 20 4d 49 44  presenting a MID
4890: 49 20 6e 6f 74 65 20 76 61 6c 75 65 0a 20 20 2a  I note value.  *
48a0: 2f 0a 20 20 6d 69 64 69 3a 20 66 75 6e 63 74 69  /.  midi: functi
48b0: 6f 6e 28 29 20 7b 0a 20 20 20 20 72 65 74 75 72  on() {.    retur
48c0: 6e 20 74 68 69 73 2e 6b 65 79 28 29 20 2b 20 32  n this.key() + 2
48d0: 30 3b 0a 20 20 7d 2c 0a 0a 20 20 2f 2a 2a 0a 20  0;.  },..  /**. 
48e0: 20 20 2a 20 43 61 6c 63 75 6c 61 74 65 73 20 61    * Calculates a
48f0: 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 66  nd returns the f
4900: 72 65 71 75 65 6e 63 79 20 6f 66 20 74 68 65 20  requency of the 
4910: 6e 6f 74 65 2e 0a 20 20 20 2a 20 4f 70 74 69 6f  note..   * Optio
4920: 6e 61 6c 20 63 6f 6e 63 65 72 74 20 70 69 74 63  nal concert pitc
4930: 68 20 28 64 65 66 2e 20 34 34 30 29 0a 20 20 20  h (def. 440).   
4940: 2a 2f 0a 20 20 66 71 3a 20 66 75 6e 63 74 69 6f  */.  fq: functio
4950: 6e 28 63 6f 6e 63 65 72 74 50 69 74 63 68 29 20  n(concertPitch) 
4960: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 69 74  {.    return pit
4970: 63 68 46 71 28 74 68 69 73 2e 63 6f 6f 72 64 2c  chFq(this.coord,
4980: 20 63 6f 6e 63 65 72 74 50 69 74 63 68 29 3b 0a   concertPitch);.
4990: 20 20 7d 2c 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a    },..  /**.   *
49a0: 20 52 65 74 75 72 6e 73 20 74 68 65 20 70 69 74   Returns the pit
49b0: 63 68 20 63 6c 61 73 73 20 69 6e 64 65 78 20 28  ch class index (
49c0: 63 68 72 6f 6d 61 29 20 6f 66 20 74 68 65 20 6e  chroma) of the n
49d0: 6f 74 65 0a 20 20 20 2a 2f 0a 20 20 63 68 72 6f  ote.   */.  chro
49e0: 6d 61 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b  ma: function() {
49f0: 0a 20 20 20 20 76 61 72 20 76 61 6c 75 65 20 3d  .    var value =
4a00: 20 28 76 65 63 74 6f 72 2e 73 75 6d 28 76 65 63   (vector.sum(vec
4a10: 74 6f 72 2e 6d 75 6c 28 74 68 69 73 2e 63 6f 6f  tor.mul(this.coo
4a20: 72 64 2c 20 5b 31 32 2c 20 37 5d 29 29 20 2d 20  rd, [12, 7])) - 
4a30: 33 29 20 25 20 31 32 3b 0a 0a 20 20 20 20 72 65  3) % 12;..    re
4a40: 74 75 72 6e 20 28 76 61 6c 75 65 20 3c 20 30 29  turn (value < 0)
4a50: 20 3f 20 76 61 6c 75 65 20 2b 20 31 32 20 3a 20   ? value + 12 : 
4a60: 76 61 6c 75 65 3b 0a 20 20 7d 2c 0a 0a 20 20 69  value;.  },..  i
4a70: 6e 74 65 72 76 61 6c 3a 20 66 75 6e 63 74 69 6f  nterval: functio
4a80: 6e 28 69 6e 74 65 72 76 61 6c 29 20 7b 0a 20 20  n(interval) {.  
4a90: 20 20 69 66 20 28 74 79 70 65 6f 66 20 69 6e 74    if (typeof int
4aa0: 65 72 76 61 6c 20 3d 3d 3d 20 27 73 74 72 69 6e  erval === 'strin
4ab0: 67 27 29 20 69 6e 74 65 72 76 61 6c 20 3d 20 49  g') interval = I
4ac0: 6e 74 65 72 76 61 6c 2e 74 6f 43 6f 6f 72 64 28  nterval.toCoord(
4ad0: 69 6e 74 65 72 76 61 6c 29 3b 0a 0a 20 20 20 20  interval);..    
4ae0: 69 66 20 28 69 6e 74 65 72 76 61 6c 20 69 6e 73  if (interval ins
4af0: 74 61 6e 63 65 6f 66 20 49 6e 74 65 72 76 61 6c  tanceof Interval
4b00: 29 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e  ).      return n
4b10: 65 77 20 4e 6f 74 65 28 76 65 63 74 6f 72 2e 61  ew Note(vector.a
4b20: 64 64 28 74 68 69 73 2e 63 6f 6f 72 64 2c 20 69  dd(this.coord, i
4b30: 6e 74 65 72 76 61 6c 2e 63 6f 6f 72 64 29 2c 20  nterval.coord), 
4b40: 74 68 69 73 2e 64 75 72 61 74 69 6f 6e 29 3b 0a  this.duration);.
4b50: 20 20 20 20 65 6c 73 65 20 69 66 20 28 69 6e 74      else if (int
4b60: 65 72 76 61 6c 20 69 6e 73 74 61 6e 63 65 6f 66  erval instanceof
4b70: 20 4e 6f 74 65 29 0a 20 20 20 20 20 20 72 65 74   Note).      ret
4b80: 75 72 6e 20 6e 65 77 20 49 6e 74 65 72 76 61 6c  urn new Interval
4b90: 28 76 65 63 74 6f 72 2e 73 75 62 28 69 6e 74 65  (vector.sub(inte
4ba0: 72 76 61 6c 2e 63 6f 6f 72 64 2c 20 74 68 69 73  rval.coord, this
4bb0: 2e 63 6f 6f 72 64 29 29 3b 0a 20 20 7d 2c 0a 0a  .coord));.  },..
4bc0: 20 20 74 72 61 6e 73 70 6f 73 65 3a 20 66 75 6e    transpose: fun
4bd0: 63 74 69 6f 6e 28 69 6e 74 65 72 76 61 6c 29 20  ction(interval) 
4be0: 7b 0a 20 20 20 20 74 68 69 73 2e 63 6f 6f 72 64  {.    this.coord
4bf0: 20 3d 20 76 65 63 74 6f 72 2e 61 64 64 28 74 68   = vector.add(th
4c00: 69 73 2e 63 6f 6f 72 64 2c 20 69 6e 74 65 72 76  is.coord, interv
4c10: 61 6c 2e 63 6f 6f 72 64 29 3b 0a 20 20 20 20 72  al.coord);.    r
4c20: 65 74 75 72 6e 20 74 68 69 73 3b 0a 20 20 7d 2c  eturn this;.  },
4c30: 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 52 65 74  ..  /**.   * Ret
4c40: 75 72 6e 73 20 74 68 65 20 48 65 6c 6d 68 6f 6c  urns the Helmhol
4c50: 74 7a 20 6e 6f 74 61 74 69 6f 6e 20 66 6f 72 6d  tz notation form
4c60: 20 6f 66 20 74 68 65 20 6e 6f 74 65 20 28 66 78   of the note (fx
4c70: 20 43 2c 2c 20 64 27 20 46 23 20 67 23 27 27 29   C,, d' F# g#'')
4c80: 0a 20 20 20 2a 2f 0a 20 20 68 65 6c 6d 68 6f 6c  .   */.  helmhol
4c90: 74 7a 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b  tz: function() {
4ca0: 0a 20 20 20 20 76 61 72 20 6f 63 74 61 76 65 20  .    var octave 
4cb0: 3d 20 74 68 69 73 2e 6f 63 74 61 76 65 28 29 3b  = this.octave();
4cc0: 0a 20 20 20 20 76 61 72 20 6e 61 6d 65 20 3d 20  .    var name = 
4cd0: 74 68 69 73 2e 6e 61 6d 65 28 29 3b 0a 20 20 20  this.name();.   
4ce0: 20 6e 61 6d 65 20 3d 20 6f 63 74 61 76 65 20 3c   name = octave <
4cf0: 20 33 20 3f 20 6e 61 6d 65 2e 74 6f 55 70 70 65   3 ? name.toUppe
4d00: 72 43 61 73 65 28 29 20 3a 20 6e 61 6d 65 2e 74  rCase() : name.t
4d10: 6f 4c 6f 77 65 72 43 61 73 65 28 29 3b 0a 20 20  oLowerCase();.  
4d20: 20 20 76 61 72 20 70 61 64 63 68 61 72 20 3d 20    var padchar = 
4d30: 6f 63 74 61 76 65 20 3c 20 33 20 3f 20 27 2c 27  octave < 3 ? ','
4d40: 20 3a 20 27 5c 27 27 3b 0a 20 20 20 20 76 61 72   : '\'';.    var
4d50: 20 70 61 64 63 6f 75 6e 74 20 3d 20 6f 63 74 61   padcount = octa
4d60: 76 65 20 3c 20 32 20 3f 20 32 20 2d 20 6f 63 74  ve < 2 ? 2 - oct
4d70: 61 76 65 20 3a 20 6f 63 74 61 76 65 20 2d 20 33  ave : octave - 3
4d80: 3b 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 70 61  ;..    return pa
4d90: 64 28 6e 61 6d 65 20 2b 20 74 68 69 73 2e 61 63  d(name + this.ac
4da0: 63 69 64 65 6e 74 61 6c 28 29 2c 20 70 61 64 63  cidental(), padc
4db0: 68 61 72 2c 20 70 61 64 63 6f 75 6e 74 29 3b 0a  har, padcount);.
4dc0: 20 20 7d 2c 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a    },..  /**.   *
4dd0: 20 52 65 74 75 72 6e 73 20 74 68 65 20 73 63 69   Returns the sci
4de0: 65 6e 74 69 66 69 63 20 6e 6f 74 61 74 69 6f 6e  entific notation
4df0: 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 6e 6f 74   form of the not
4e00: 65 20 28 66 78 20 45 34 2c 20 42 62 33 2c 20 43  e (fx E4, Bb3, C
4e10: 23 37 20 65 74 63 2e 29 0a 20 20 20 2a 2f 0a 20  #7 etc.).   */. 
4e20: 20 73 63 69 65 6e 74 69 66 69 63 3a 20 66 75 6e   scientific: fun
4e30: 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 72 65  ction() {.    re
4e40: 74 75 72 6e 20 74 68 69 73 2e 6e 61 6d 65 28 29  turn this.name()
4e50: 2e 74 6f 55 70 70 65 72 43 61 73 65 28 29 20 2b  .toUpperCase() +
4e60: 20 74 68 69 73 2e 61 63 63 69 64 65 6e 74 61 6c   this.accidental
4e70: 28 29 20 2b 20 74 68 69 73 2e 6f 63 74 61 76 65  () + this.octave
4e80: 28 29 3b 0a 20 20 7d 2c 0a 0a 20 20 2f 2a 2a 0a  ();.  },..  /**.
4e90: 20 20 20 2a 20 52 65 74 75 72 6e 73 20 6e 6f 74     * Returns not
4ea0: 65 73 20 74 68 61 74 20 61 72 65 20 65 6e 68 61  es that are enha
4eb0: 72 6d 6f 6e 69 63 20 77 69 74 68 20 74 68 69 73  rmonic with this
4ec0: 20 6e 6f 74 65 2e 0a 20 20 20 2a 2f 0a 20 20 65   note..   */.  e
4ed0: 6e 68 61 72 6d 6f 6e 69 63 73 3a 20 66 75 6e 63  nharmonics: func
4ee0: 74 69 6f 6e 28 6f 6e 65 61 63 63 69 64 65 6e 74  tion(oneaccident
4ef0: 61 6c 29 20 7b 0a 20 20 20 20 76 61 72 20 6b 65  al) {.    var ke
4f00: 79 20 3d 20 74 68 69 73 2e 6b 65 79 28 29 2c 20  y = this.key(), 
4f10: 6c 69 6d 69 74 20 3d 20 6f 6e 65 61 63 63 69 64  limit = oneaccid
4f20: 65 6e 74 61 6c 20 3f 20 32 20 3a 20 33 3b 0a 0a  ental ? 2 : 3;..
4f30: 20 20 20 20 72 65 74 75 72 6e 20 5b 27 6d 33 27      return ['m3'
4f40: 2c 20 27 6d 32 27 2c 20 27 6d 2d 32 27 2c 20 27  , 'm2', 'm-2', '
4f50: 6d 2d 33 27 5d 0a 20 20 20 20 20 20 2e 6d 61 70  m-3'].      .map
4f60: 28 74 68 69 73 2e 69 6e 74 65 72 76 61 6c 2e 62  (this.interval.b
4f70: 69 6e 64 28 74 68 69 73 29 29 0a 20 20 20 20 20  ind(this)).     
4f80: 20 2e 66 69 6c 74 65 72 28 66 75 6e 63 74 69 6f   .filter(functio
4f90: 6e 28 6e 6f 74 65 29 20 7b 0a 20 20 20 20 20 20  n(note) {.      
4fa0: 76 61 72 20 61 63 63 20 3d 20 6e 6f 74 65 2e 61  var acc = note.a
4fb0: 63 63 69 64 65 6e 74 61 6c 56 61 6c 75 65 28 29  ccidentalValue()
4fc0: 3b 0a 20 20 20 20 20 20 76 61 72 20 64 69 66 66  ;.      var diff
4fd0: 20 3d 20 6b 65 79 20 2d 20 28 6e 6f 74 65 2e 6b   = key - (note.k
4fe0: 65 79 28 29 20 2d 20 61 63 63 29 3b 0a 0a 20 20  ey() - acc);..  
4ff0: 20 20 20 20 69 66 20 28 64 69 66 66 20 3c 20 6c      if (diff < l
5000: 69 6d 69 74 20 26 26 20 64 69 66 66 20 3e 20 2d  imit && diff > -
5010: 6c 69 6d 69 74 29 20 7b 0a 20 20 20 20 20 20 20  limit) {.       
5020: 20 76 61 72 20 70 72 6f 64 75 63 74 20 3d 20 76   var product = v
5030: 65 63 74 6f 72 2e 6d 75 6c 28 6b 6e 6f 77 6c 65  ector.mul(knowle
5040: 64 67 65 2e 73 68 61 72 70 2c 20 64 69 66 66 20  dge.sharp, diff 
5050: 2d 20 61 63 63 29 3b 0a 20 20 20 20 20 20 20 20  - acc);.        
5060: 6e 6f 74 65 2e 63 6f 6f 72 64 20 3d 20 76 65 63  note.coord = vec
5070: 74 6f 72 2e 61 64 64 28 6e 6f 74 65 2e 63 6f 6f  tor.add(note.coo
5080: 72 64 2c 20 70 72 6f 64 75 63 74 29 3b 0a 20 20  rd, product);.  
5090: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
50a0: 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  e;.      }.    }
50b0: 29 3b 0a 20 20 7d 2c 0a 0a 20 20 73 6f 6c 66 65  );.  },..  solfe
50c0: 67 65 3a 20 66 75 6e 63 74 69 6f 6e 28 73 63 61  ge: function(sca
50d0: 6c 65 2c 20 73 68 6f 77 4f 63 74 61 76 65 73 29  le, showOctaves)
50e0: 20 7b 0a 20 20 20 20 76 61 72 20 69 6e 74 65 72   {.    var inter
50f0: 76 61 6c 20 3d 20 73 63 61 6c 65 2e 74 6f 6e 69  val = scale.toni
5100: 63 2e 69 6e 74 65 72 76 61 6c 28 74 68 69 73 29  c.interval(this)
5110: 2c 20 73 6f 6c 66 65 67 65 2c 20 73 74 72 6f 6b  , solfege, strok
5120: 65 2c 20 63 6f 75 6e 74 3b 0a 20 20 20 20 69 66  e, count;.    if
5130: 20 28 69 6e 74 65 72 76 61 6c 2e 64 69 72 65 63   (interval.direc
5140: 74 69 6f 6e 28 29 20 3d 3d 3d 20 27 64 6f 77 6e  tion() === 'down
5150: 27 29 0a 20 20 20 20 20 20 69 6e 74 65 72 76 61  ').      interva
5160: 6c 20 3d 20 69 6e 74 65 72 76 61 6c 2e 69 6e 76  l = interval.inv
5170: 65 72 74 28 29 3b 0a 0a 20 20 20 20 69 66 20 28  ert();..    if (
5180: 73 68 6f 77 4f 63 74 61 76 65 73 29 20 7b 0a 20  showOctaves) {. 
5190: 20 20 20 20 20 63 6f 75 6e 74 20 3d 20 28 74 68       count = (th
51a0: 69 73 2e 6b 65 79 28 74 72 75 65 29 20 2d 20 73  is.key(true) - s
51b0: 63 61 6c 65 2e 74 6f 6e 69 63 2e 6b 65 79 28 74  cale.tonic.key(t
51c0: 72 75 65 29 29 20 2f 20 37 3b 0a 20 20 20 20 20  rue)) / 7;.     
51d0: 20 63 6f 75 6e 74 20 3d 20 28 63 6f 75 6e 74 20   count = (count 
51e0: 3e 3d 20 30 29 20 3f 20 4d 61 74 68 2e 66 6c 6f  >= 0) ? Math.flo
51f0: 6f 72 28 63 6f 75 6e 74 29 20 3a 20 2d 28 4d 61  or(count) : -(Ma
5200: 74 68 2e 63 65 69 6c 28 2d 63 6f 75 6e 74 29 29  th.ceil(-count))
5210: 3b 0a 20 20 20 20 20 20 73 74 72 6f 6b 65 20 3d  ;.      stroke =
5220: 20 28 63 6f 75 6e 74 20 3e 3d 20 30 29 20 3f 20   (count >= 0) ? 
5230: 27 5c 27 27 20 3a 20 27 2c 27 3b 0a 20 20 20 20  '\'' : ',';.    
5240: 7d 0a 0a 20 20 20 20 73 6f 6c 66 65 67 65 20 3d  }..    solfege =
5250: 20 6b 6e 6f 77 6c 65 64 67 65 2e 69 6e 74 65 72   knowledge.inter
5260: 76 61 6c 53 6f 6c 66 65 67 65 5b 69 6e 74 65 72  valSolfege[inter
5270: 76 61 6c 2e 73 69 6d 70 6c 65 28 74 72 75 65 29  val.simple(true)
5280: 2e 74 6f 53 74 72 69 6e 67 28 29 5d 3b 0a 20 20  .toString()];.  
5290: 20 20 72 65 74 75 72 6e 20 28 73 68 6f 77 4f 63    return (showOc
52a0: 74 61 76 65 73 29 20 3f 20 70 61 64 28 73 6f 6c  taves) ? pad(sol
52b0: 66 65 67 65 2c 20 73 74 72 6f 6b 65 2c 20 4d 61  fege, stroke, Ma
52c0: 74 68 2e 61 62 73 28 63 6f 75 6e 74 29 29 20 3a  th.abs(count)) :
52d0: 20 73 6f 6c 66 65 67 65 3b 0a 20 20 7d 2c 0a 0a   solfege;.  },..
52e0: 20 20 73 63 61 6c 65 44 65 67 72 65 65 3a 20 66    scaleDegree: f
52f0: 75 6e 63 74 69 6f 6e 28 73 63 61 6c 65 29 20 7b  unction(scale) {
5300: 0a 20 20 20 20 76 61 72 20 69 6e 74 65 72 20 3d  .    var inter =
5310: 20 73 63 61 6c 65 2e 74 6f 6e 69 63 2e 69 6e 74   scale.tonic.int
5320: 65 72 76 61 6c 28 74 68 69 73 29 3b 0a 0a 20 20  erval(this);..  
5330: 20 20 2f 2f 20 49 66 20 74 68 65 20 64 69 72 65    // If the dire
5340: 63 74 69 6f 6e 20 69 73 20 64 6f 77 6e 2c 20 6f  ction is down, o
5350: 72 20 77 65 27 72 65 20 64 65 61 6c 69 6e 67 20  r we're dealing 
5360: 77 69 74 68 20 61 6e 20 6f 63 74 61 76 65 20 2d  with an octave -
5370: 20 69 6e 76 65 72 74 20 69 74 0a 20 20 20 20 69   invert it.    i
5380: 66 20 28 69 6e 74 65 72 2e 64 69 72 65 63 74 69  f (inter.directi
5390: 6f 6e 28 29 20 3d 3d 3d 20 27 64 6f 77 6e 27 20  on() === 'down' 
53a0: 7c 7c 0a 20 20 20 20 20 20 20 28 69 6e 74 65 72  ||.       (inter
53b0: 2e 63 6f 6f 72 64 5b 31 5d 20 3d 3d 3d 20 30 20  .coord[1] === 0 
53c0: 26 26 20 69 6e 74 65 72 2e 63 6f 6f 72 64 5b 30  && inter.coord[0
53d0: 5d 20 21 3d 3d 20 30 29 29 20 7b 0a 20 20 20 20  ] !== 0)) {.    
53e0: 20 20 69 6e 74 65 72 20 3d 20 69 6e 74 65 72 2e    inter = inter.
53f0: 69 6e 76 65 72 74 28 29 3b 0a 20 20 20 20 7d 0a  invert();.    }.
5400: 0a 20 20 20 20 69 6e 74 65 72 20 3d 20 69 6e 74  .    inter = int
5410: 65 72 2e 73 69 6d 70 6c 65 28 74 72 75 65 29 2e  er.simple(true).
5420: 63 6f 6f 72 64 3b 0a 0a 20 20 20 20 72 65 74 75  coord;..    retu
5430: 72 6e 20 73 63 61 6c 65 2e 73 63 61 6c 65 2e 72  rn scale.scale.r
5440: 65 64 75 63 65 28 66 75 6e 63 74 69 6f 6e 28 69  educe(function(i
5450: 6e 64 65 78 2c 20 63 75 72 72 65 6e 74 2c 20 69  ndex, current, i
5460: 29 20 7b 0a 20 20 20 20 20 20 76 61 72 20 63 6f  ) {.      var co
5470: 6f 72 64 20 3d 20 49 6e 74 65 72 76 61 6c 2e 74  ord = Interval.t
5480: 6f 43 6f 6f 72 64 28 63 75 72 72 65 6e 74 29 2e  oCoord(current).
5490: 63 6f 6f 72 64 3b 0a 20 20 20 20 20 20 72 65 74  coord;.      ret
54a0: 75 72 6e 20 63 6f 6f 72 64 5b 30 5d 20 3d 3d 3d  urn coord[0] ===
54b0: 20 69 6e 74 65 72 5b 30 5d 20 26 26 20 63 6f 6f   inter[0] && coo
54c0: 72 64 5b 31 5d 20 3d 3d 3d 20 69 6e 74 65 72 5b  rd[1] === inter[
54d0: 31 5d 20 3f 20 69 20 2b 20 31 20 3a 20 69 6e 64  1] ? i + 1 : ind
54e0: 65 78 3b 0a 20 20 20 20 7d 2c 20 30 29 3b 0a 20  ex;.    }, 0);. 
54f0: 20 7d 2c 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20   },..  /**.   * 
5500: 52 65 74 75 72 6e 73 20 74 68 65 20 6e 61 6d 65  Returns the name
5510: 20 6f 66 20 74 68 65 20 64 75 72 61 74 69 6f 6e   of the duration
5520: 20 76 61 6c 75 65 2c 0a 20 20 20 2a 20 73 75 63   value,.   * suc
5530: 68 20 61 73 20 27 77 68 6f 6c 65 27 2c 20 27 71  h as 'whole', 'q
5540: 75 61 72 74 65 72 27 2c 20 27 73 69 78 74 65 65  uarter', 'sixtee
5550: 6e 74 68 27 20 65 74 63 2e 0a 20 20 20 2a 2f 0a  nth' etc..   */.
5560: 20 20 64 75 72 61 74 69 6f 6e 4e 61 6d 65 3a 20    durationName: 
5570: 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20  function() {.   
5580: 20 72 65 74 75 72 6e 20 6b 6e 6f 77 6c 65 64 67   return knowledg
5590: 65 2e 64 75 72 61 74 69 6f 6e 73 5b 74 68 69 73  e.durations[this
55a0: 2e 64 75 72 61 74 69 6f 6e 2e 76 61 6c 75 65 5d  .duration.value]
55b0: 3b 0a 20 20 7d 2c 0a 0a 20 20 2f 2a 2a 0a 20 20  ;.  },..  /**.  
55c0: 20 2a 20 52 65 74 75 72 6e 73 20 74 68 65 20 64   * Returns the d
55d0: 75 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6e  uration of the n
55e0: 6f 74 65 20 28 69 6e 63 6c 75 64 69 6e 67 20 64  ote (including d
55f0: 6f 74 73 29 0a 20 20 20 2a 20 69 6e 20 73 65 63  ots).   * in sec
5600: 6f 6e 64 73 2e 20 54 68 65 20 66 69 72 73 74 20  onds. The first 
5610: 61 72 67 75 6d 65 6e 74 20 69 73 20 74 68 65 20  argument is the 
5620: 74 65 6d 70 6f 20 69 6e 20 62 65 61 74 73 0a 20  tempo in beats. 
5630: 20 20 2a 20 70 65 72 20 6d 69 6e 75 74 65 2c 20    * per minute, 
5640: 74 68 65 20 73 65 63 6f 6e 64 20 69 73 20 74 68  the second is th
5650: 65 20 62 65 61 74 20 75 6e 69 74 20 28 69 2e 65  e beat unit (i.e
5660: 2e 20 74 68 65 0a 20 20 20 2a 20 6c 6f 77 65 72  . the.   * lower
5670: 20 6e 75 6d 65 72 61 6c 20 69 6e 20 61 20 74 69   numeral in a ti
5680: 6d 65 20 73 69 67 6e 61 74 75 72 65 29 2e 0a 20  me signature).. 
5690: 20 20 2a 2f 0a 20 20 64 75 72 61 74 69 6f 6e 49    */.  durationI
56a0: 6e 53 65 63 6f 6e 64 73 3a 20 66 75 6e 63 74 69  nSeconds: functi
56b0: 6f 6e 28 62 70 6d 2c 20 62 65 61 74 55 6e 69 74  on(bpm, beatUnit
56c0: 29 20 7b 0a 20 20 20 20 76 61 72 20 73 65 63 73  ) {.    var secs
56d0: 20 3d 20 28 36 30 20 2f 20 62 70 6d 29 20 2f 20   = (60 / bpm) / 
56e0: 28 74 68 69 73 2e 64 75 72 61 74 69 6f 6e 2e 76  (this.duration.v
56f0: 61 6c 75 65 20 2f 20 34 29 20 2f 20 28 62 65 61  alue / 4) / (bea
5700: 74 55 6e 69 74 20 2f 20 34 29 3b 0a 20 20 20 20  tUnit / 4);.    
5710: 72 65 74 75 72 6e 20 73 65 63 73 20 2a 20 32 20  return secs * 2 
5720: 2d 20 73 65 63 73 20 2f 20 4d 61 74 68 2e 70 6f  - secs / Math.po
5730: 77 28 32 2c 20 74 68 69 73 2e 64 75 72 61 74 69  w(2, this.durati
5740: 6f 6e 2e 64 6f 74 73 29 3b 0a 20 20 7d 2c 0a 0a  on.dots);.  },..
5750: 20 20 2f 2a 2a 0a 20 20 20 2a 20 52 65 74 75 72    /**.   * Retur
5760: 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ns the name of t
5770: 68 65 20 6e 6f 74 65 2c 20 77 69 74 68 20 61 6e  he note, with an
5780: 20 6f 70 74 69 6f 6e 61 6c 20 64 69 73 70 6c 61   optional displa
5790: 79 20 6f 66 20 6f 63 74 61 76 65 20 6e 75 6d 62  y of octave numb
57a0: 65 72 0a 20 20 20 2a 2f 0a 20 20 74 6f 53 74 72  er.   */.  toStr
57b0: 69 6e 67 3a 20 66 75 6e 63 74 69 6f 6e 28 64 6f  ing: function(do
57c0: 6e 74 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e  nt) {.    return
57d0: 20 74 68 69 73 2e 6e 61 6d 65 28 29 20 2b 20 74   this.name() + t
57e0: 68 69 73 2e 61 63 63 69 64 65 6e 74 61 6c 28 29  his.accidental()
57f0: 20 2b 20 28 64 6f 6e 74 20 3f 20 27 27 20 3a 20   + (dont ? '' : 
5800: 74 68 69 73 2e 6f 63 74 61 76 65 28 29 29 3b 0a  this.octave());.
5810: 20 20 7d 0a 7d 3b 0a 0a 4e 6f 74 65 2e 66 72 6f    }.};..Note.fro
5820: 6d 53 74 72 69 6e 67 20 3d 20 66 75 6e 63 74 69  mString = functi
5830: 6f 6e 28 6e 61 6d 65 2c 20 64 75 72 29 20 7b 0a  on(name, dur) {.
5840: 20 20 76 61 72 20 63 6f 6f 72 64 20 3d 20 73 63    var coord = sc
5850: 69 65 6e 74 69 66 69 63 28 6e 61 6d 65 29 3b 0a  ientific(name);.
5860: 20 20 69 66 20 28 21 63 6f 6f 72 64 29 20 63 6f    if (!coord) co
5870: 6f 72 64 20 3d 20 68 65 6c 6d 68 6f 6c 74 7a 28  ord = helmholtz(
5880: 6e 61 6d 65 29 3b 0a 20 20 72 65 74 75 72 6e 20  name);.  return 
5890: 6e 65 77 20 4e 6f 74 65 28 63 6f 6f 72 64 2c 20  new Note(coord, 
58a0: 64 75 72 29 3b 0a 7d 3b 0a 0a 4e 6f 74 65 2e 66  dur);.};..Note.f
58b0: 72 6f 6d 4b 65 79 20 3d 20 66 75 6e 63 74 69 6f  romKey = functio
58c0: 6e 28 6b 65 79 29 20 7b 0a 20 20 76 61 72 20 6f  n(key) {.  var o
58d0: 63 74 61 76 65 20 3d 20 4d 61 74 68 2e 66 6c 6f  ctave = Math.flo
58e0: 6f 72 28 28 6b 65 79 20 2d 20 34 29 20 2f 20 31  or((key - 4) / 1
58f0: 32 29 3b 0a 20 20 76 61 72 20 64 69 73 74 61 6e  2);.  var distan
5900: 63 65 20 3d 20 6b 65 79 20 2d 20 28 6f 63 74 61  ce = key - (octa
5910: 76 65 20 2a 20 31 32 29 20 2d 20 34 3b 0a 20 20  ve * 12) - 4;.  
5920: 76 61 72 20 6e 61 6d 65 20 3d 20 6b 6e 6f 77 6c  var name = knowl
5930: 65 64 67 65 2e 66 69 66 74 68 73 5b 28 32 20 2a  edge.fifths[(2 *
5940: 20 4d 61 74 68 2e 72 6f 75 6e 64 28 64 69 73 74   Math.round(dist
5950: 61 6e 63 65 20 2f 20 32 29 20 2b 20 31 29 20 25  ance / 2) + 1) %
5960: 20 37 5d 3b 0a 20 20 76 61 72 20 73 75 62 44 69   7];.  var subDi
5970: 66 66 20 3d 20 76 65 63 74 6f 72 2e 73 75 62 28  ff = vector.sub(
5980: 6b 6e 6f 77 6c 65 64 67 65 2e 6e 6f 74 65 73 5b  knowledge.notes[
5990: 6e 61 6d 65 5d 2c 20 6b 6e 6f 77 6c 65 64 67 65  name], knowledge
59a0: 2e 41 34 29 3b 0a 20 20 76 61 72 20 6e 6f 74 65  .A4);.  var note
59b0: 20 3d 20 76 65 63 74 6f 72 2e 61 64 64 28 73 75   = vector.add(su
59c0: 62 44 69 66 66 2c 20 5b 6f 63 74 61 76 65 20 2b  bDiff, [octave +
59d0: 20 31 2c 20 30 5d 29 3b 0a 20 20 76 61 72 20 64   1, 0]);.  var d
59e0: 69 66 66 20 3d 20 28 6b 65 79 20 2d 20 34 39 29  iff = (key - 49)
59f0: 20 2d 20 76 65 63 74 6f 72 2e 73 75 6d 28 76 65   - vector.sum(ve
5a00: 63 74 6f 72 2e 6d 75 6c 28 6e 6f 74 65 2c 20 5b  ctor.mul(note, [
5a10: 31 32 2c 20 37 5d 29 29 3b 0a 0a 20 20 76 61 72  12, 7]));..  var
5a20: 20 61 72 67 20 3d 20 64 69 66 66 20 3f 20 76 65   arg = diff ? ve
5a30: 63 74 6f 72 2e 61 64 64 28 6e 6f 74 65 2c 20 76  ctor.add(note, v
5a40: 65 63 74 6f 72 2e 6d 75 6c 28 6b 6e 6f 77 6c 65  ector.mul(knowle
5a50: 64 67 65 2e 73 68 61 72 70 2c 20 64 69 66 66 29  dge.sharp, diff)
5a60: 29 20 3a 20 6e 6f 74 65 3b 0a 20 20 72 65 74 75  ) : note;.  retu
5a70: 72 6e 20 6e 65 77 20 4e 6f 74 65 28 61 72 67 29  rn new Note(arg)
5a80: 3b 0a 7d 3b 0a 0a 4e 6f 74 65 2e 66 72 6f 6d 46  ;.};..Note.fromF
5a90: 72 65 71 75 65 6e 63 79 20 3d 20 66 75 6e 63 74  requency = funct
5aa0: 69 6f 6e 28 66 71 2c 20 63 6f 6e 63 65 72 74 50  ion(fq, concertP
5ab0: 69 74 63 68 29 20 7b 0a 20 20 76 61 72 20 6b 65  itch) {.  var ke
5ac0: 79 2c 20 63 65 6e 74 73 2c 20 6f 72 69 67 69 6e  y, cents, origin
5ad0: 61 6c 46 71 3b 0a 20 20 63 6f 6e 63 65 72 74 50  alFq;.  concertP
5ae0: 69 74 63 68 20 3d 20 63 6f 6e 63 65 72 74 50 69  itch = concertPi
5af0: 74 63 68 20 7c 7c 20 34 34 30 3b 0a 0a 20 20 6b  tch || 440;..  k
5b00: 65 79 20 3d 20 34 39 20 2b 20 31 32 20 2a 20 28  ey = 49 + 12 * (
5b10: 28 4d 61 74 68 2e 6c 6f 67 28 66 71 29 20 2d 20  (Math.log(fq) - 
5b20: 4d 61 74 68 2e 6c 6f 67 28 63 6f 6e 63 65 72 74  Math.log(concert
5b30: 50 69 74 63 68 29 29 20 2f 20 4d 61 74 68 2e 6c  Pitch)) / Math.l
5b40: 6f 67 28 32 29 29 3b 0a 20 20 6b 65 79 20 3d 20  og(2));.  key = 
5b50: 4d 61 74 68 2e 72 6f 75 6e 64 28 6b 65 79 29 3b  Math.round(key);
5b60: 0a 20 20 6f 72 69 67 69 6e 61 6c 46 71 20 3d 20  .  originalFq = 
5b70: 63 6f 6e 63 65 72 74 50 69 74 63 68 20 2a 20 4d  concertPitch * M
5b80: 61 74 68 2e 70 6f 77 28 32 2c 20 28 6b 65 79 20  ath.pow(2, (key 
5b90: 2d 20 34 39 29 20 2f 20 31 32 29 3b 0a 20 20 63  - 49) / 12);.  c
5ba0: 65 6e 74 73 20 3d 20 31 32 30 30 20 2a 20 28 4d  ents = 1200 * (M
5bb0: 61 74 68 2e 6c 6f 67 28 66 71 20 2f 20 6f 72 69  ath.log(fq / ori
5bc0: 67 69 6e 61 6c 46 71 29 20 2f 20 4d 61 74 68 2e  ginalFq) / Math.
5bd0: 6c 6f 67 28 32 29 29 3b 0a 0a 20 20 72 65 74 75  log(2));..  retu
5be0: 72 6e 20 7b 20 6e 6f 74 65 3a 20 4e 6f 74 65 2e  rn { note: Note.
5bf0: 66 72 6f 6d 4b 65 79 28 6b 65 79 29 2c 20 63 65  fromKey(key), ce
5c00: 6e 74 73 3a 20 63 65 6e 74 73 20 7d 3b 0a 7d 3b  nts: cents };.};
5c10: 0a 0a 4e 6f 74 65 2e 66 72 6f 6d 4d 49 44 49 20  ..Note.fromMIDI 
5c20: 3d 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65 29  = function(note)
5c30: 20 7b 0a 20 20 72 65 74 75 72 6e 20 4e 6f 74 65   {.  return Note
5c40: 2e 66 72 6f 6d 4b 65 79 28 6e 6f 74 65 20 2d 20  .fromKey(note - 
5c50: 32 30 29 3b 0a 7d 3b 0a 0a 6d 6f 64 75 6c 65 2e  20);.};..module.
5c60: 65 78 70 6f 72 74 73 20 3d 20 4e 6f 74 65 3b 0a  exports = Note;.
5c70: 0a 7d 2c 7b 22 2e 2f 69 6e 74 65 72 76 61 6c 22  .},{"./interval"
5c80: 3a 33 2c 22 2e 2f 6b 6e 6f 77 6c 65 64 67 65 22  :3,"./knowledge"
5c90: 3a 34 2c 22 2e 2f 76 65 63 74 6f 72 22 3a 38 2c  :4,"./vector":8,
5ca0: 22 68 65 6c 6d 68 6f 6c 74 7a 22 3a 31 31 2c 22  "helmholtz":11,"
5cb0: 70 69 74 63 68 2d 66 71 22 3a 31 34 2c 22 73 63  pitch-fq":14,"sc
5cc0: 69 65 6e 74 69 66 69 63 2d 6e 6f 74 61 74 69 6f  ientific-notatio
5cd0: 6e 22 3a 31 35 7d 5d 2c 36 3a 5b 66 75 6e 63 74  n":15}],6:[funct
5ce0: 69 6f 6e 28 72 65 71 75 69 72 65 2c 6d 6f 64 75  ion(require,modu
5cf0: 6c 65 2c 65 78 70 6f 72 74 73 29 7b 0a 76 61 72  le,exports){.var
5d00: 20 6b 6e 6f 77 6c 65 64 67 65 20 3d 20 72 65 71   knowledge = req
5d10: 75 69 72 65 28 27 2e 2f 6b 6e 6f 77 6c 65 64 67  uire('./knowledg
5d20: 65 27 29 3b 0a 76 61 72 20 49 6e 74 65 72 76 61  e');.var Interva
5d30: 6c 20 3d 20 72 65 71 75 69 72 65 28 27 2e 2f 69  l = require('./i
5d40: 6e 74 65 72 76 61 6c 27 29 3b 0a 0a 76 61 72 20  nterval');..var 
5d50: 73 63 61 6c 65 73 20 3d 20 7b 0a 20 20 61 65 6f  scales = {.  aeo
5d60: 6c 69 61 6e 3a 20 5b 27 50 31 27 2c 20 27 4d 32  lian: ['P1', 'M2
5d70: 27 2c 20 27 6d 33 27 2c 20 27 50 34 27 2c 20 27  ', 'm3', 'P4', '
5d80: 50 35 27 2c 20 27 6d 36 27 2c 20 27 6d 37 27 5d  P5', 'm6', 'm7']
5d90: 2c 0a 20 20 62 6c 75 65 73 3a 20 5b 27 50 31 27  ,.  blues: ['P1'
5da0: 2c 20 27 6d 33 27 2c 20 27 50 34 27 2c 20 27 64  , 'm3', 'P4', 'd
5db0: 35 27 2c 20 27 50 35 27 2c 20 27 6d 37 27 5d 2c  5', 'P5', 'm7'],
5dc0: 0a 20 20 63 68 72 6f 6d 61 74 69 63 3a 20 5b 27  .  chromatic: ['
5dd0: 50 31 27 2c 20 27 6d 32 27 2c 20 27 4d 32 27 2c  P1', 'm2', 'M2',
5de0: 20 27 6d 33 27 2c 20 27 4d 33 27 2c 20 27 50 34   'm3', 'M3', 'P4
5df0: 27 2c 0a 20 20 20 20 27 41 34 27 2c 20 27 50 35  ',.    'A4', 'P5
5e00: 27 2c 20 27 6d 36 27 2c 20 27 4d 36 27 2c 20 27  ', 'm6', 'M6', '
5e10: 6d 37 27 2c 20 27 4d 37 27 5d 2c 0a 20 20 64 6f  m7', 'M7'],.  do
5e20: 72 69 61 6e 3a 20 5b 27 50 31 27 2c 20 27 4d 32  rian: ['P1', 'M2
5e30: 27 2c 20 27 6d 33 27 2c 20 27 50 34 27 2c 20 27  ', 'm3', 'P4', '
5e40: 50 35 27 2c 20 27 4d 36 27 2c 20 27 6d 37 27 5d  P5', 'M6', 'm7']
5e50: 2c 0a 20 20 64 6f 75 62 6c 65 68 61 72 6d 6f 6e  ,.  doubleharmon
5e60: 69 63 3a 20 5b 27 50 31 27 2c 20 27 6d 32 27 2c  ic: ['P1', 'm2',
5e70: 20 27 4d 33 27 2c 20 27 50 34 27 2c 20 27 50 35   'M3', 'P4', 'P5
5e80: 27 2c 20 27 6d 36 27 2c 20 27 4d 37 27 5d 2c 0a  ', 'm6', 'M7'],.
5e90: 20 20 68 61 72 6d 6f 6e 69 63 6d 69 6e 6f 72 3a    harmonicminor:
5ea0: 20 5b 27 50 31 27 2c 20 27 4d 32 27 2c 20 27 6d   ['P1', 'M2', 'm
5eb0: 33 27 2c 20 27 50 34 27 2c 20 27 50 35 27 2c 20  3', 'P4', 'P5', 
5ec0: 27 6d 36 27 2c 20 27 4d 37 27 5d 2c 0a 20 20 69  'm6', 'M7'],.  i
5ed0: 6f 6e 69 61 6e 3a 20 5b 27 50 31 27 2c 20 27 4d  onian: ['P1', 'M
5ee0: 32 27 2c 20 27 4d 33 27 2c 20 27 50 34 27 2c 20  2', 'M3', 'P4', 
5ef0: 27 50 35 27 2c 20 27 4d 36 27 2c 20 27 4d 37 27  'P5', 'M6', 'M7'
5f00: 5d 2c 0a 20 20 6c 6f 63 72 69 61 6e 3a 20 5b 27  ],.  locrian: ['
5f10: 50 31 27 2c 20 27 6d 32 27 2c 20 27 6d 33 27 2c  P1', 'm2', 'm3',
5f20: 20 27 50 34 27 2c 20 27 64 35 27 2c 20 27 6d 36   'P4', 'd5', 'm6
5f30: 27 2c 20 27 6d 37 27 5d 2c 0a 20 20 6c 79 64 69  ', 'm7'],.  lydi
5f40: 61 6e 3a 20 5b 27 50 31 27 2c 20 27 4d 32 27 2c  an: ['P1', 'M2',
5f50: 20 27 4d 33 27 2c 20 27 41 34 27 2c 20 27 50 35   'M3', 'A4', 'P5
5f60: 27 2c 20 27 4d 36 27 2c 20 27 4d 37 27 5d 2c 0a  ', 'M6', 'M7'],.
5f70: 20 20 6d 61 6a 6f 72 70 65 6e 74 61 74 6f 6e 69    majorpentatoni
5f80: 63 3a 20 5b 27 50 31 27 2c 20 27 4d 32 27 2c 20  c: ['P1', 'M2', 
5f90: 27 4d 33 27 2c 20 27 50 35 27 2c 20 27 4d 36 27  'M3', 'P5', 'M6'
5fa0: 5d 2c 0a 20 20 6d 65 6c 6f 64 69 63 6d 69 6e 6f  ],.  melodicmino
5fb0: 72 3a 20 5b 27 50 31 27 2c 20 27 4d 32 27 2c 20  r: ['P1', 'M2', 
5fc0: 27 6d 33 27 2c 20 27 50 34 27 2c 20 27 50 35 27  'm3', 'P4', 'P5'
5fd0: 2c 20 27 4d 36 27 2c 20 27 4d 37 27 5d 2c 0a 20  , 'M6', 'M7'],. 
5fe0: 20 6d 69 6e 6f 72 70 65 6e 74 61 74 6f 6e 69 63   minorpentatonic
5ff0: 3a 20 5b 27 50 31 27 2c 20 27 6d 33 27 2c 20 27  : ['P1', 'm3', '
6000: 50 34 27 2c 20 27 50 35 27 2c 20 27 6d 37 27 5d  P4', 'P5', 'm7']
6010: 2c 0a 20 20 6d 69 78 6f 6c 79 64 69 61 6e 3a 20  ,.  mixolydian: 
6020: 5b 27 50 31 27 2c 20 27 4d 32 27 2c 20 27 4d 33  ['P1', 'M2', 'M3
6030: 27 2c 20 27 50 34 27 2c 20 27 50 35 27 2c 20 27  ', 'P4', 'P5', '
6040: 4d 36 27 2c 20 27 6d 37 27 5d 2c 0a 20 20 70 68  M6', 'm7'],.  ph
6050: 72 79 67 69 61 6e 3a 20 5b 27 50 31 27 2c 20 27  rygian: ['P1', '
6060: 6d 32 27 2c 20 27 6d 33 27 2c 20 27 50 34 27 2c  m2', 'm3', 'P4',
6070: 20 27 50 35 27 2c 20 27 6d 36 27 2c 20 27 6d 37   'P5', 'm6', 'm7
6080: 27 5d 2c 0a 20 20 77 68 6f 6c 65 74 6f 6e 65 3a  '],.  wholetone:
6090: 20 5b 27 50 31 27 2c 20 27 4d 32 27 2c 20 27 4d   ['P1', 'M2', 'M
60a0: 33 27 2c 20 27 41 34 27 2c 20 27 41 35 27 2c 20  3', 'A4', 'A5', 
60b0: 27 41 36 27 5d 0a 7d 3b 0a 0a 2f 2f 20 73 79 6e  'A6'].};..// syn
60c0: 6f 6e 79 6d 73 0a 73 63 61 6c 65 73 2e 68 61 72  onyms.scales.har
60d0: 6d 6f 6e 69 63 63 68 72 6f 6d 61 74 69 63 20 3d  monicchromatic =
60e0: 20 73 63 61 6c 65 73 2e 63 68 72 6f 6d 61 74 69   scales.chromati
60f0: 63 3b 0a 73 63 61 6c 65 73 2e 6d 69 6e 6f 72 20  c;.scales.minor 
6100: 3d 20 73 63 61 6c 65 73 2e 61 65 6f 6c 69 61 6e  = scales.aeolian
6110: 3b 0a 73 63 61 6c 65 73 2e 6d 61 6a 6f 72 20 3d  ;.scales.major =
6120: 20 73 63 61 6c 65 73 2e 69 6f 6e 69 61 6e 3b 0a   scales.ionian;.
6130: 73 63 61 6c 65 73 2e 66 6c 61 6d 65 6e 63 6f 20  scales.flamenco 
6140: 3d 20 73 63 61 6c 65 73 2e 64 6f 75 62 6c 65 68  = scales.doubleh
6150: 61 72 6d 6f 6e 69 63 3b 0a 0a 66 75 6e 63 74 69  armonic;..functi
6160: 6f 6e 20 53 63 61 6c 65 28 74 6f 6e 69 63 2c 20  on Scale(tonic, 
6170: 73 63 61 6c 65 29 20 7b 0a 20 20 69 66 20 28 21  scale) {.  if (!
6180: 28 74 68 69 73 20 69 6e 73 74 61 6e 63 65 6f 66  (this instanceof
6190: 20 53 63 61 6c 65 29 29 20 72 65 74 75 72 6e 20   Scale)) return 
61a0: 6e 65 77 20 53 63 61 6c 65 28 74 6f 6e 69 63 2c  new Scale(tonic,
61b0: 20 73 63 61 6c 65 29 3b 0a 20 20 76 61 72 20 73   scale);.  var s
61c0: 63 61 6c 65 4e 61 6d 65 2c 20 69 3b 0a 20 20 69  caleName, i;.  i
61d0: 66 20 28 21 28 27 63 6f 6f 72 64 27 20 69 6e 20  f (!('coord' in 
61e0: 74 6f 6e 69 63 29 29 20 7b 0a 20 20 20 20 74 68  tonic)) {.    th
61f0: 72 6f 77 20 6e 65 77 20 45 72 72 6f 72 28 27 49  row new Error('I
6200: 6e 76 61 6c 69 64 20 54 6f 6e 69 63 27 29 3b 0a  nvalid Tonic');.
6210: 20 20 7d 0a 0a 20 20 69 66 20 28 74 79 70 65 6f    }..  if (typeo
6220: 66 20 73 63 61 6c 65 20 3d 3d 3d 20 27 73 74 72  f scale === 'str
6230: 69 6e 67 27 29 20 7b 0a 20 20 20 20 73 63 61 6c  ing') {.    scal
6240: 65 4e 61 6d 65 20 3d 20 73 63 61 6c 65 3b 0a 20  eName = scale;. 
6250: 20 20 20 73 63 61 6c 65 20 3d 20 73 63 61 6c 65     scale = scale
6260: 73 5b 73 63 61 6c 65 5d 3b 0a 20 20 20 20 69 66  s[scale];.    if
6270: 20 28 21 73 63 61 6c 65 29 0a 20 20 20 20 20 20   (!scale).      
6280: 74 68 72 6f 77 20 6e 65 77 20 45 72 72 6f 72 28  throw new Error(
6290: 27 49 6e 76 61 6c 69 64 20 53 63 61 6c 65 27 29  'Invalid Scale')
62a0: 3b 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20  ;.  } else {.   
62b0: 20 66 6f 72 20 28 69 20 69 6e 20 73 63 61 6c 65   for (i in scale
62c0: 73 29 20 7b 0a 20 20 20 20 20 20 69 66 20 28 73  s) {.      if (s
62d0: 63 61 6c 65 73 2e 68 61 73 4f 77 6e 50 72 6f 70  cales.hasOwnProp
62e0: 65 72 74 79 28 69 29 29 20 7b 0a 20 20 20 20 20  erty(i)) {.     
62f0: 20 20 20 69 66 20 28 73 63 61 6c 65 73 5b 69 5d     if (scales[i]
6300: 2e 74 6f 53 74 72 69 6e 67 28 29 20 3d 3d 3d 20  .toString() === 
6310: 73 63 61 6c 65 2e 74 6f 53 74 72 69 6e 67 28 29  scale.toString()
6320: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 73 63  ) {.          sc
6330: 61 6c 65 4e 61 6d 65 20 3d 20 69 3b 0a 20 20 20  aleName = i;.   
6340: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
6350: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
6360: 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 74 68 69      }.  }..  thi
6370: 73 2e 6e 61 6d 65 20 3d 20 73 63 61 6c 65 4e 61  s.name = scaleNa
6380: 6d 65 3b 0a 20 20 74 68 69 73 2e 74 6f 6e 69 63  me;.  this.tonic
6390: 20 3d 20 74 6f 6e 69 63 3b 0a 20 20 74 68 69 73   = tonic;.  this
63a0: 2e 73 63 61 6c 65 20 3d 20 73 63 61 6c 65 3b 0a  .scale = scale;.
63b0: 7d 0a 0a 53 63 61 6c 65 2e 70 72 6f 74 6f 74 79  }..Scale.prototy
63c0: 70 65 20 3d 20 7b 0a 20 20 6e 6f 74 65 73 3a 20  pe = {.  notes: 
63d0: 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20  function() {.   
63e0: 20 76 61 72 20 6e 6f 74 65 73 20 3d 20 5b 5d 3b   var notes = [];
63f0: 0a 0a 20 20 20 20 66 6f 72 20 28 76 61 72 20 69  ..    for (var i
6400: 20 3d 20 30 2c 20 6c 65 6e 67 74 68 20 3d 20 74   = 0, length = t
6410: 68 69 73 2e 73 63 61 6c 65 2e 6c 65 6e 67 74 68  his.scale.length
6420: 3b 20 69 20 3c 20 6c 65 6e 67 74 68 3b 20 69 2b  ; i < length; i+
6430: 2b 29 20 7b 0a 20 20 20 20 20 20 6e 6f 74 65 73  +) {.      notes
6440: 2e 70 75 73 68 28 74 68 69 73 2e 74 6f 6e 69 63  .push(this.tonic
6450: 2e 69 6e 74 65 72 76 61 6c 28 74 68 69 73 2e 73  .interval(this.s
6460: 63 61 6c 65 5b 69 5d 29 29 3b 0a 20 20 20 20 7d  cale[i]));.    }
6470: 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 6f 74  ..    return not
6480: 65 73 3b 0a 20 20 7d 2c 0a 0a 20 20 73 69 6d 70  es;.  },..  simp
6490: 6c 65 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b  le: function() {
64a0: 0a 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73  .    return this
64b0: 2e 6e 6f 74 65 73 28 29 2e 6d 61 70 28 66 75 6e  .notes().map(fun
64c0: 63 74 69 6f 6e 28 6e 29 20 7b 20 72 65 74 75 72  ction(n) { retur
64d0: 6e 20 6e 2e 74 6f 53 74 72 69 6e 67 28 74 72 75  n n.toString(tru
64e0: 65 29 3b 20 7d 29 3b 0a 20 20 7d 2c 0a 0a 20 20  e); });.  },..  
64f0: 74 79 70 65 3a 20 66 75 6e 63 74 69 6f 6e 28 29  type: function()
6500: 20 7b 0a 20 20 20 20 76 61 72 20 6c 65 6e 67 74   {.    var lengt
6510: 68 20 3d 20 74 68 69 73 2e 73 63 61 6c 65 2e 6c  h = this.scale.l
6520: 65 6e 67 74 68 20 2d 20 32 3b 0a 20 20 20 20 69  ength - 2;.    i
6530: 66 20 28 6c 65 6e 67 74 68 20 3c 20 38 29 20 7b  f (length < 8) {
6540: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 27  .      return ['
6550: 64 69 27 2c 20 27 74 72 69 27 2c 20 27 74 65 74  di', 'tri', 'tet
6560: 72 61 27 2c 20 27 70 65 6e 74 61 27 2c 20 27 68  ra', 'penta', 'h
6570: 65 78 61 27 2c 20 27 68 65 70 74 61 27 2c 20 27  exa', 'hepta', '
6580: 6f 63 74 61 27 5d 5b 6c 65 6e 67 74 68 5d 20 2b  octa'][length] +
6590: 0a 20 20 20 20 20 20 20 20 27 74 6f 6e 69 63 27  .        'tonic'
65a0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 2c 0a 0a 20 20  ;.    }.  },..  
65b0: 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 28 69 29  get: function(i)
65c0: 20 7b 0a 20 20 20 20 76 61 72 20 69 73 53 74 65   {.    var isSte
65d0: 70 53 74 72 20 3d 20 74 79 70 65 6f 66 20 69 20  pStr = typeof i 
65e0: 3d 3d 3d 20 27 73 74 72 69 6e 67 27 20 26 26 20  === 'string' && 
65f0: 69 20 69 6e 20 6b 6e 6f 77 6c 65 64 67 65 2e 73  i in knowledge.s
6600: 74 65 70 4e 75 6d 62 65 72 3b 0a 20 20 20 20 69  tepNumber;.    i
6610: 20 3d 20 69 73 53 74 65 70 53 74 72 20 3f 20 6b   = isStepStr ? k
6620: 6e 6f 77 6c 65 64 67 65 2e 73 74 65 70 4e 75 6d  nowledge.stepNum
6630: 62 65 72 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20  ber[i] : i;.    
6640: 76 61 72 20 6c 65 6e 20 3d 20 74 68 69 73 2e 73  var len = this.s
6650: 63 61 6c 65 2e 6c 65 6e 67 74 68 3b 0a 20 20 20  cale.length;.   
6660: 20 76 61 72 20 69 6e 74 65 72 76 61 6c 2c 20 6f   var interval, o
6670: 63 74 61 76 65 73 3b 0a 0a 20 20 20 20 69 66 20  ctaves;..    if 
6680: 28 69 20 3c 20 30 29 20 7b 0a 20 20 20 20 20 20  (i < 0) {.      
6690: 69 6e 74 65 72 76 61 6c 20 3d 20 74 68 69 73 2e  interval = this.
66a0: 73 63 61 6c 65 5b 69 20 25 20 6c 65 6e 20 2b 20  scale[i % len + 
66b0: 6c 65 6e 20 2d 20 31 5d 3b 0a 20 20 20 20 20 20  len - 1];.      
66c0: 6f 63 74 61 76 65 73 20 3d 20 4d 61 74 68 2e 66  octaves = Math.f
66d0: 6c 6f 6f 72 28 28 69 20 2d 20 31 29 20 2f 20 6c  loor((i - 1) / l
66e0: 65 6e 29 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20  en);.    } else 
66f0: 69 66 20 28 69 20 25 20 6c 65 6e 20 3d 3d 3d 20  if (i % len === 
6700: 30 29 20 7b 0a 20 20 20 20 20 20 69 6e 74 65 72  0) {.      inter
6710: 76 61 6c 20 3d 20 74 68 69 73 2e 73 63 61 6c 65  val = this.scale
6720: 5b 6c 65 6e 20 2d 20 31 5d 3b 0a 20 20 20 20 20  [len - 1];.     
6730: 20 6f 63 74 61 76 65 73 20 3d 20 28 69 20 2f 20   octaves = (i / 
6740: 6c 65 6e 29 20 2d 20 31 3b 0a 20 20 20 20 7d 20  len) - 1;.    } 
6750: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 69 6e 74  else {.      int
6760: 65 72 76 61 6c 20 3d 20 74 68 69 73 2e 73 63 61  erval = this.sca
6770: 6c 65 5b 69 20 25 20 6c 65 6e 20 2d 20 31 5d 3b  le[i % len - 1];
6780: 0a 20 20 20 20 20 20 6f 63 74 61 76 65 73 20 3d  .      octaves =
6790: 20 4d 61 74 68 2e 66 6c 6f 6f 72 28 69 20 2f 20   Math.floor(i / 
67a0: 6c 65 6e 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  len);.    }..   
67b0: 20 72 65 74 75 72 6e 20 74 68 69 73 2e 74 6f 6e   return this.ton
67c0: 69 63 2e 69 6e 74 65 72 76 61 6c 28 69 6e 74 65  ic.interval(inte
67d0: 72 76 61 6c 29 2e 69 6e 74 65 72 76 61 6c 28 6e  rval).interval(n
67e0: 65 77 20 49 6e 74 65 72 76 61 6c 28 5b 6f 63 74  ew Interval([oct
67f0: 61 76 65 73 2c 20 30 5d 29 29 3b 0a 20 20 7d 2c  aves, 0]));.  },
6800: 0a 0a 20 20 73 6f 6c 66 65 67 65 3a 20 66 75 6e  ..  solfege: fun
6810: 63 74 69 6f 6e 28 69 6e 64 65 78 2c 20 73 68 6f  ction(index, sho
6820: 77 4f 63 74 61 76 65 73 29 20 7b 0a 20 20 20 20  wOctaves) {.    
6830: 69 66 20 28 69 6e 64 65 78 29 0a 20 20 20 20 20  if (index).     
6840: 20 72 65 74 75 72 6e 20 74 68 69 73 2e 67 65 74   return this.get
6850: 28 69 6e 64 65 78 29 2e 73 6f 6c 66 65 67 65 28  (index).solfege(
6860: 74 68 69 73 2c 20 73 68 6f 77 4f 63 74 61 76 65  this, showOctave
6870: 73 29 3b 0a 0a 20 20 20 20 72 65 74 75 72 6e 20  s);..    return 
6880: 74 68 69 73 2e 6e 6f 74 65 73 28 29 2e 6d 61 70  this.notes().map
6890: 28 66 75 6e 63 74 69 6f 6e 28 6e 29 20 7b 0a 20  (function(n) {. 
68a0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 2e 73 6f       return n.so
68b0: 6c 66 65 67 65 28 74 68 69 73 2c 20 73 68 6f 77  lfege(this, show
68c0: 4f 63 74 61 76 65 73 29 3b 0a 20 20 20 20 7d 29  Octaves);.    })
68d0: 3b 0a 20 20 7d 2c 0a 0a 20 20 69 6e 74 65 72 76  ;.  },..  interv
68e0: 61 6c 3a 20 66 75 6e 63 74 69 6f 6e 28 69 6e 74  al: function(int
68f0: 65 72 76 61 6c 29 20 7b 0a 20 20 20 20 69 6e 74  erval) {.    int
6900: 65 72 76 61 6c 20 3d 20 28 74 79 70 65 6f 66 20  erval = (typeof 
6910: 69 6e 74 65 72 76 61 6c 20 3d 3d 3d 20 27 73 74  interval === 'st
6920: 72 69 6e 67 27 29 20 3f 0a 20 20 20 20 20 20 49  ring') ?.      I
6930: 6e 74 65 72 76 61 6c 2e 74 6f 43 6f 6f 72 64 28  nterval.toCoord(
6940: 69 6e 74 65 72 76 61 6c 29 20 3a 20 69 6e 74 65  interval) : inte
6950: 72 76 61 6c 3b 0a 20 20 20 20 72 65 74 75 72 6e  rval;.    return
6960: 20 6e 65 77 20 53 63 61 6c 65 28 74 68 69 73 2e   new Scale(this.
6970: 74 6f 6e 69 63 2e 69 6e 74 65 72 76 61 6c 28 69  tonic.interval(i
6980: 6e 74 65 72 76 61 6c 29 2c 20 74 68 69 73 2e 73  nterval), this.s
6990: 63 61 6c 65 29 3b 0a 20 20 7d 2c 0a 0a 20 20 74  cale);.  },..  t
69a0: 72 61 6e 73 70 6f 73 65 3a 20 66 75 6e 63 74 69  ranspose: functi
69b0: 6f 6e 28 69 6e 74 65 72 76 61 6c 29 20 7b 0a 20  on(interval) {. 
69c0: 20 20 20 76 61 72 20 73 63 61 6c 65 20 3d 20 74     var scale = t
69d0: 68 69 73 2e 69 6e 74 65 72 76 61 6c 28 69 6e 74  his.interval(int
69e0: 65 72 76 61 6c 29 3b 0a 20 20 20 20 74 68 69 73  erval);.    this
69f0: 2e 73 63 61 6c 65 20 3d 20 73 63 61 6c 65 2e 73  .scale = scale.s
6a00: 63 61 6c 65 3b 0a 20 20 20 20 74 68 69 73 2e 74  cale;.    this.t
6a10: 6f 6e 69 63 20 3d 20 73 63 61 6c 65 2e 74 6f 6e  onic = scale.ton
6a20: 69 63 3b 0a 0a 20 20 20 20 72 65 74 75 72 6e 20  ic;..    return 
6a30: 74 68 69 73 3b 0a 20 20 7d 0a 7d 3b 0a 53 63 61  this;.  }.};.Sca
6a40: 6c 65 2e 4b 4e 4f 57 4e 5f 53 43 41 4c 45 53 20  le.KNOWN_SCALES 
6a50: 3d 20 4f 62 6a 65 63 74 2e 6b 65 79 73 28 73 63  = Object.keys(sc
6a60: 61 6c 65 73 29 3b 0a 0a 6d 6f 64 75 6c 65 2e 65  ales);..module.e
6a70: 78 70 6f 72 74 73 20 3d 20 53 63 61 6c 65 3b 0a  xports = Scale;.
6a80: 0a 7d 2c 7b 22 2e 2f 69 6e 74 65 72 76 61 6c 22  .},{"./interval"
6a90: 3a 33 2c 22 2e 2f 6b 6e 6f 77 6c 65 64 67 65 22  :3,"./knowledge"
6aa0: 3a 34 7d 5d 2c 37 3a 5b 66 75 6e 63 74 69 6f 6e  :4}],7:[function
6ab0: 28 72 65 71 75 69 72 65 2c 6d 6f 64 75 6c 65 2c  (require,module,
6ac0: 65 78 70 6f 72 74 73 29 7b 0a 76 61 72 20 6b 6e  exports){.var kn
6ad0: 6f 77 6c 65 64 67 65 20 3d 20 72 65 71 75 69 72  owledge = requir
6ae0: 65 28 27 2e 2f 6b 6e 6f 77 6c 65 64 67 65 27 29  e('./knowledge')
6af0: 3b 0a 0a 6d 6f 64 75 6c 65 2e 65 78 70 6f 72 74  ;..module.export
6b00: 73 20 3d 20 66 75 6e 63 74 69 6f 6e 28 74 65 6f  s = function(teo
6b10: 72 69 61 29 20 7b 0a 20 20 76 61 72 20 4e 6f 74  ria) {.  var Not
6b20: 65 20 3d 20 74 65 6f 72 69 61 2e 4e 6f 74 65 3b  e = teoria.Note;
6b30: 0a 20 20 76 61 72 20 43 68 6f 72 64 20 3d 20 74  .  var Chord = t
6b40: 65 6f 72 69 61 2e 43 68 6f 72 64 3b 0a 20 20 76  eoria.Chord;.  v
6b50: 61 72 20 53 63 61 6c 65 20 3d 20 74 65 6f 72 69  ar Scale = teori
6b60: 61 2e 53 63 61 6c 65 3b 0a 0a 20 20 4e 6f 74 65  a.Scale;..  Note
6b70: 2e 70 72 6f 74 6f 74 79 70 65 2e 63 68 6f 72 64  .prototype.chord
6b80: 20 3d 20 66 75 6e 63 74 69 6f 6e 28 63 68 6f 72   = function(chor
6b90: 64 29 20 7b 0a 20 20 20 20 76 61 72 20 69 73 53  d) {.    var isS
6ba0: 68 6f 72 74 43 68 6f 72 64 20 3d 20 63 68 6f 72  hortChord = chor
6bb0: 64 20 69 6e 20 6b 6e 6f 77 6c 65 64 67 65 2e 63  d in knowledge.c
6bc0: 68 6f 72 64 53 68 6f 72 74 3b 0a 20 20 20 20 63  hordShort;.    c
6bd0: 68 6f 72 64 20 3d 20 69 73 53 68 6f 72 74 43 68  hord = isShortCh
6be0: 6f 72 64 20 3f 20 6b 6e 6f 77 6c 65 64 67 65 2e  ord ? knowledge.
6bf0: 63 68 6f 72 64 53 68 6f 72 74 5b 63 68 6f 72 64  chordShort[chord
6c00: 5d 20 3a 20 63 68 6f 72 64 3b 0a 0a 20 20 20 20  ] : chord;..    
6c10: 72 65 74 75 72 6e 20 6e 65 77 20 43 68 6f 72 64  return new Chord
6c20: 28 74 68 69 73 2c 20 63 68 6f 72 64 29 3b 0a 20  (this, chord);. 
6c30: 20 7d 3b 0a 0a 20 20 4e 6f 74 65 2e 70 72 6f 74   };..  Note.prot
6c40: 6f 74 79 70 65 2e 73 63 61 6c 65 20 3d 20 66 75  otype.scale = fu
6c50: 6e 63 74 69 6f 6e 28 73 63 61 6c 65 29 20 7b 0a  nction(scale) {.
6c60: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53      return new S
6c70: 63 61 6c 65 28 74 68 69 73 2c 20 73 63 61 6c 65  cale(this, scale
6c80: 29 3b 0a 20 20 7d 3b 0a 7d 3b 0a 0a 7d 2c 7b 22  );.  };.};..},{"
6c90: 2e 2f 6b 6e 6f 77 6c 65 64 67 65 22 3a 34 7d 5d  ./knowledge":4}]
6ca0: 2c 38 3a 5b 66 75 6e 63 74 69 6f 6e 28 72 65 71  ,8:[function(req
6cb0: 75 69 72 65 2c 6d 6f 64 75 6c 65 2c 65 78 70 6f  uire,module,expo
6cc0: 72 74 73 29 7b 0a 6d 6f 64 75 6c 65 2e 65 78 70  rts){.module.exp
6cd0: 6f 72 74 73 20 3d 20 7b 0a 20 20 61 64 64 3a 20  orts = {.  add: 
6ce0: 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65 2c 20 69  function(note, i
6cf0: 6e 74 65 72 76 61 6c 29 20 7b 0a 20 20 20 20 72  nterval) {.    r
6d00: 65 74 75 72 6e 20 5b 6e 6f 74 65 5b 30 5d 20 2b  eturn [note[0] +
6d10: 20 69 6e 74 65 72 76 61 6c 5b 30 5d 2c 20 6e 6f   interval[0], no
6d20: 74 65 5b 31 5d 20 2b 20 69 6e 74 65 72 76 61 6c  te[1] + interval
6d30: 5b 31 5d 5d 3b 0a 20 20 7d 2c 0a 0a 20 20 73 75  [1]];.  },..  su
6d40: 62 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65  b: function(note
6d50: 2c 20 69 6e 74 65 72 76 61 6c 29 20 7b 0a 20 20  , interval) {.  
6d60: 20 20 72 65 74 75 72 6e 20 5b 6e 6f 74 65 5b 30    return [note[0
6d70: 5d 20 2d 20 69 6e 74 65 72 76 61 6c 5b 30 5d 2c  ] - interval[0],
6d80: 20 6e 6f 74 65 5b 31 5d 20 2d 20 69 6e 74 65 72   note[1] - inter
6d90: 76 61 6c 5b 31 5d 5d 3b 0a 20 20 7d 2c 0a 0a 20  val[1]];.  },.. 
6da0: 20 6d 75 6c 3a 20 66 75 6e 63 74 69 6f 6e 28 6e   mul: function(n
6db0: 6f 74 65 2c 20 69 6e 74 65 72 76 61 6c 29 20 7b  ote, interval) {
6dc0: 0a 20 20 20 20 69 66 20 28 74 79 70 65 6f 66 20  .    if (typeof 
6dd0: 69 6e 74 65 72 76 61 6c 20 3d 3d 3d 20 27 6e 75  interval === 'nu
6de0: 6d 62 65 72 27 29 0a 20 20 20 20 20 20 72 65 74  mber').      ret
6df0: 75 72 6e 20 5b 6e 6f 74 65 5b 30 5d 20 2a 20 69  urn [note[0] * i
6e00: 6e 74 65 72 76 61 6c 2c 20 6e 6f 74 65 5b 31 5d  nterval, note[1]
6e10: 20 2a 20 69 6e 74 65 72 76 61 6c 5d 3b 0a 20 20   * interval];.  
6e20: 20 20 65 6c 73 65 0a 20 20 20 20 20 20 72 65 74    else.      ret
6e30: 75 72 6e 20 5b 6e 6f 74 65 5b 30 5d 20 2a 20 69  urn [note[0] * i
6e40: 6e 74 65 72 76 61 6c 5b 30 5d 2c 20 6e 6f 74 65  nterval[0], note
6e50: 5b 31 5d 20 2a 20 69 6e 74 65 72 76 61 6c 5b 31  [1] * interval[1
6e60: 5d 5d 3b 0a 20 20 7d 2c 0a 0a 20 20 73 75 6d 3a  ]];.  },..  sum:
6e70: 20 66 75 6e 63 74 69 6f 6e 28 63 6f 6f 72 64 29   function(coord)
6e80: 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 63 6f   {.    return co
6e90: 6f 72 64 5b 30 5d 20 2b 20 63 6f 6f 72 64 5b 31  ord[0] + coord[1
6ea0: 5d 3b 0a 20 20 7d 0a 7d 3b 0a 0a 7d 2c 7b 7d 5d  ];.  }.};..},{}]
6eb0: 2c 39 3a 5b 66 75 6e 63 74 69 6f 6e 28 72 65 71  ,9:[function(req
6ec0: 75 69 72 65 2c 6d 6f 64 75 6c 65 2c 65 78 70 6f  uire,module,expo
6ed0: 72 74 73 29 7b 0a 76 61 72 20 61 63 63 69 64 65  rts){.var accide
6ee0: 6e 74 61 6c 56 61 6c 75 65 73 20 3d 20 7b 0a 20  ntalValues = {. 
6ef0: 20 27 62 62 27 3a 20 2d 32 2c 0a 20 20 27 62 27   'bb': -2,.  'b'
6f00: 3a 20 2d 31 2c 0a 20 20 27 27 3a 20 30 2c 0a 20  : -1,.  '': 0,. 
6f10: 20 27 23 27 3a 20 31 2c 0a 20 20 27 78 27 3a 20   '#': 1,.  'x': 
6f20: 32 0a 7d 3b 0a 0a 6d 6f 64 75 6c 65 2e 65 78 70  2.};..module.exp
6f30: 6f 72 74 73 20 3d 20 66 75 6e 63 74 69 6f 6e 20  orts = function 
6f40: 61 63 63 69 64 65 6e 74 61 6c 4e 75 6d 62 65 72  accidentalNumber
6f50: 28 61 63 63 29 20 7b 0a 20 20 72 65 74 75 72 6e  (acc) {.  return
6f60: 20 61 63 63 69 64 65 6e 74 61 6c 56 61 6c 75 65   accidentalValue
6f70: 73 5b 61 63 63 5d 3b 0a 7d 0a 0a 6d 6f 64 75 6c  s[acc];.}..modul
6f80: 65 2e 65 78 70 6f 72 74 73 2e 69 6e 74 65 72 76  e.exports.interv
6f90: 61 6c 20 3d 20 66 75 6e 63 74 69 6f 6e 20 61 63  al = function ac
6fa0: 63 69 64 65 6e 74 61 6c 49 6e 74 65 72 76 61 6c  cidentalInterval
6fb0: 28 61 63 63 29 20 7b 0a 20 20 76 61 72 20 76 61  (acc) {.  var va
6fc0: 6c 20 3d 20 61 63 63 69 64 65 6e 74 61 6c 56 61  l = accidentalVa
6fd0: 6c 75 65 73 5b 61 63 63 5d 3b 0a 20 20 72 65 74  lues[acc];.  ret
6fe0: 75 72 6e 20 5b 2d 34 20 2a 20 76 61 6c 2c 20 37  urn [-4 * val, 7
6ff0: 20 2a 20 76 61 6c 5d 3b 0a 7d 0a 0a 7d 2c 7b 7d   * val];.}..},{}
7000: 5d 2c 31 30 3a 5b 66 75 6e 63 74 69 6f 6e 28 72  ],10:[function(r
7010: 65 71 75 69 72 65 2c 6d 6f 64 75 6c 65 2c 65 78  equire,module,ex
7020: 70 6f 72 74 73 29 7b 0a 76 61 72 20 53 59 4d 42  ports){.var SYMB
7030: 4f 4c 53 20 3d 20 7b 0a 20 20 27 6d 27 3a 20 5b  OLS = {.  'm': [
7040: 27 6d 33 27 2c 20 27 50 35 27 5d 2c 0a 20 20 27  'm3', 'P5'],.  '
7050: 6d 69 27 3a 20 5b 27 6d 33 27 2c 20 27 50 35 27  mi': ['m3', 'P5'
7060: 5d 2c 0a 20 20 27 6d 69 6e 27 3a 20 5b 27 6d 33  ],.  'min': ['m3
7070: 27 2c 20 27 50 35 27 5d 2c 0a 20 20 27 2d 27 3a  ', 'P5'],.  '-':
7080: 20 5b 27 6d 33 27 2c 20 27 50 35 27 5d 2c 0a 0a   ['m3', 'P5'],..
7090: 20 20 27 4d 27 3a 20 5b 27 4d 33 27 2c 20 27 50    'M': ['M3', 'P
70a0: 35 27 5d 2c 0a 20 20 27 6d 61 27 3a 20 5b 27 4d  5'],.  'ma': ['M
70b0: 33 27 2c 20 27 50 35 27 5d 2c 0a 20 20 27 27 3a  3', 'P5'],.  '':
70c0: 20 5b 27 4d 33 27 2c 20 27 50 35 27 5d 2c 0a 0a   ['M3', 'P5'],..
70d0: 20 20 27 2b 27 3a 20 5b 27 4d 33 27 2c 20 27 41    '+': ['M3', 'A
70e0: 35 27 5d 2c 0a 20 20 27 61 75 67 27 3a 20 5b 27  5'],.  'aug': ['
70f0: 4d 33 27 2c 20 27 41 35 27 5d 2c 0a 0a 20 20 27  M3', 'A5'],..  '
7100: 64 69 6d 27 3a 20 5b 27 6d 33 27 2c 20 27 64 35  dim': ['m3', 'd5
7110: 27 5d 2c 0a 20 20 27 6f 27 3a 20 5b 27 6d 33 27  '],.  'o': ['m3'
7120: 2c 20 27 64 35 27 5d 2c 0a 0a 20 20 27 6d 61 6a  , 'd5'],..  'maj
7130: 27 3a 20 5b 27 4d 33 27 2c 20 27 50 35 27 2c 20  ': ['M3', 'P5', 
7140: 27 4d 37 27 5d 2c 0a 20 20 27 64 6f 6d 27 3a 20  'M7'],.  'dom': 
7150: 5b 27 4d 33 27 2c 20 27 50 35 27 2c 20 27 6d 37  ['M3', 'P5', 'm7
7160: 27 5d 2c 0a 20 20 27 c3 b8 27 3a 20 5b 27 6d 33  '],.  '..': ['m3
7170: 27 2c 20 27 64 35 27 2c 20 27 6d 37 27 5d 2c 0a  ', 'd5', 'm7'],.
7180: 0a 20 20 27 35 27 3a 20 5b 27 50 35 27 5d 2c 0a  .  '5': ['P5'],.
7190: 0a 20 20 27 36 2f 39 27 3a 20 5b 27 4d 33 27 2c  .  '6/9': ['M3',
71a0: 20 27 50 35 27 2c 20 27 4d 36 27 2c 20 27 4d 39   'P5', 'M6', 'M9
71b0: 27 5d 0a 7d 3b 0a 0a 6d 6f 64 75 6c 65 2e 65 78  '].};..module.ex
71c0: 70 6f 72 74 73 20 3d 20 66 75 6e 63 74 69 6f 6e  ports = function
71d0: 28 73 79 6d 62 6f 6c 29 20 7b 0a 20 20 76 61 72  (symbol) {.  var
71e0: 20 63 2c 20 70 61 72 73 69 6e 67 20 3d 20 27 71   c, parsing = 'q
71f0: 75 61 6c 69 74 79 27 2c 20 61 64 64 69 74 69 6f  uality', additio
7200: 6e 61 6c 73 20 3d 20 5b 5d 2c 20 6e 61 6d 65 2c  nals = [], name,
7210: 20 63 68 6f 72 64 4c 65 6e 67 74 68 20 3d 20 32   chordLength = 2
7220: 0a 20 20 76 61 72 20 6e 6f 74 65 73 20 3d 20 5b  .  var notes = [
7230: 27 50 31 27 2c 20 27 4d 33 27 2c 20 27 50 35 27  'P1', 'M3', 'P5'
7240: 2c 20 27 6d 37 27 2c 20 27 4d 39 27 2c 20 27 50  , 'm7', 'M9', 'P
7250: 31 31 27 2c 20 27 4d 31 33 27 5d 3b 0a 20 20 76  11', 'M13'];.  v
7260: 61 72 20 65 78 70 6c 69 63 69 74 4d 61 6a 6f 72  ar explicitMajor
7270: 20 3d 20 66 61 6c 73 65 3b 0a 0a 20 20 66 75 6e   = false;..  fun
7280: 63 74 69 6f 6e 20 73 65 74 43 68 6f 72 64 28 6e  ction setChord(n
7290: 61 6d 65 29 20 7b 0a 20 20 20 20 76 61 72 20 69  ame) {.    var i
72a0: 6e 74 65 72 76 61 6c 73 20 3d 20 53 59 4d 42 4f  ntervals = SYMBO
72b0: 4c 53 5b 6e 61 6d 65 5d 3b 0a 20 20 20 20 66 6f  LS[name];.    fo
72c0: 72 20 28 76 61 72 20 69 20 3d 20 30 2c 20 6c 65  r (var i = 0, le
72d0: 6e 20 3d 20 69 6e 74 65 72 76 61 6c 73 2e 6c 65  n = intervals.le
72e0: 6e 67 74 68 3b 20 69 20 3c 20 6c 65 6e 3b 20 69  ngth; i < len; i
72f0: 2b 2b 29 20 7b 0a 20 20 20 20 20 20 6e 6f 74 65  ++) {.      note
7300: 73 5b 69 20 2b 20 31 5d 20 3d 20 69 6e 74 65 72  s[i + 1] = inter
7310: 76 61 6c 73 5b 69 5d 3b 0a 20 20 20 20 7d 0a 0a  vals[i];.    }..
7320: 20 20 20 20 63 68 6f 72 64 4c 65 6e 67 74 68 20      chordLength 
7330: 3d 20 69 6e 74 65 72 76 61 6c 73 2e 6c 65 6e 67  = intervals.leng
7340: 74 68 3b 0a 20 20 7d 0a 0a 20 20 2f 2f 20 52 65  th;.  }..  // Re
7350: 6d 6f 76 65 20 77 68 69 74 65 73 70 61 63 65 2c  move whitespace,
7360: 20 63 6f 6d 6d 61 73 20 61 6e 64 20 70 61 72 65   commas and pare
7370: 6e 74 68 65 73 65 73 0a 20 20 73 79 6d 62 6f 6c  ntheses.  symbol
7380: 20 3d 20 73 79 6d 62 6f 6c 2e 72 65 70 6c 61 63   = symbol.replac
7390: 65 28 2f 5b 2c 5c 73 5c 28 5c 29 5d 2f 67 2c 20  e(/[,\s\(\)]/g, 
73a0: 27 27 29 3b 0a 20 20 66 6f 72 20 28 76 61 72 20  '');.  for (var 
73b0: 69 20 3d 20 30 2c 20 6c 65 6e 20 3d 20 73 79 6d  i = 0, len = sym
73c0: 62 6f 6c 2e 6c 65 6e 67 74 68 3b 20 69 20 3c 20  bol.length; i < 
73d0: 6c 65 6e 3b 20 69 2b 2b 29 20 7b 0a 20 20 20 20  len; i++) {.    
73e0: 69 66 20 28 21 28 63 20 3d 20 73 79 6d 62 6f 6c  if (!(c = symbol
73f0: 5b 69 5d 29 29 0a 20 20 20 20 20 20 72 65 74 75  [i])).      retu
7400: 72 6e 3b 0a 0a 20 20 20 20 69 66 20 28 70 61 72  rn;..    if (par
7410: 73 69 6e 67 20 3d 3d 3d 20 27 71 75 61 6c 69 74  sing === 'qualit
7420: 79 27 29 20 7b 0a 20 20 20 20 20 20 76 61 72 20  y') {.      var 
7430: 73 75 62 33 20 3d 20 28 69 20 2b 20 32 29 20 3c  sub3 = (i + 2) <
7440: 20 6c 65 6e 20 3f 20 73 79 6d 62 6f 6c 2e 73 75   len ? symbol.su
7450: 62 73 74 72 28 69 2c 20 33 29 2e 74 6f 4c 6f 77  bstr(i, 3).toLow
7460: 65 72 43 61 73 65 28 29 20 3a 20 6e 75 6c 6c 3b  erCase() : null;
7470: 0a 20 20 20 20 20 20 76 61 72 20 73 75 62 32 20  .      var sub2 
7480: 3d 20 28 69 20 2b 20 31 29 20 3c 20 6c 65 6e 20  = (i + 1) < len 
7490: 3f 20 73 79 6d 62 6f 6c 2e 73 75 62 73 74 72 28  ? symbol.substr(
74a0: 69 2c 20 32 29 2e 74 6f 4c 6f 77 65 72 43 61 73  i, 2).toLowerCas
74b0: 65 28 29 20 3a 20 6e 75 6c 6c 3b 0a 20 20 20 20  e() : null;.    
74c0: 20 20 69 66 20 28 73 75 62 33 20 69 6e 20 53 59    if (sub3 in SY
74d0: 4d 42 4f 4c 53 29 0a 20 20 20 20 20 20 20 20 6e  MBOLS).        n
74e0: 61 6d 65 20 3d 20 73 75 62 33 3b 0a 20 20 20 20  ame = sub3;.    
74f0: 20 20 65 6c 73 65 20 69 66 20 28 73 75 62 32 20    else if (sub2 
7500: 69 6e 20 53 59 4d 42 4f 4c 53 29 0a 20 20 20 20  in SYMBOLS).    
7510: 20 20 20 20 6e 61 6d 65 20 3d 20 73 75 62 32 3b      name = sub2;
7520: 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28  .      else if (
7530: 63 20 69 6e 20 53 59 4d 42 4f 4c 53 29 0a 20 20  c in SYMBOLS).  
7540: 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 63 3b 0a        name = c;.
7550: 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20        else.     
7560: 20 20 20 6e 61 6d 65 20 3d 20 27 27 3b 0a 0a 20     name = '';.. 
7570: 20 20 20 20 20 69 66 20 28 6e 61 6d 65 29 0a 20       if (name). 
7580: 20 20 20 20 20 20 20 73 65 74 43 68 6f 72 64 28         setChord(
7590: 6e 61 6d 65 29 3b 0a 0a 20 20 20 20 20 20 69 66  name);..      if
75a0: 20 28 6e 61 6d 65 20 3d 3d 3d 20 27 4d 27 20 7c   (name === 'M' |
75b0: 7c 20 6e 61 6d 65 20 3d 3d 3d 20 27 6d 61 27 20  | name === 'ma' 
75c0: 7c 7c 20 6e 61 6d 65 20 3d 3d 3d 20 27 6d 61 6a  || name === 'maj
75d0: 27 29 0a 20 20 20 20 20 20 20 20 65 78 70 6c 69  ').        expli
75e0: 63 69 74 4d 61 6a 6f 72 20 3d 20 74 72 75 65 3b  citMajor = true;
75f0: 0a 0a 0a 20 20 20 20 20 20 69 20 2b 3d 20 6e 61  ...      i += na
7600: 6d 65 2e 6c 65 6e 67 74 68 20 2d 20 31 3b 0a 20  me.length - 1;. 
7610: 20 20 20 20 20 70 61 72 73 69 6e 67 20 3d 20 27       parsing = '
7620: 65 78 74 65 6e 73 69 6f 6e 27 3b 0a 20 20 20 20  extension';.    
7630: 7d 20 65 6c 73 65 20 69 66 20 28 70 61 72 73 69  } else if (parsi
7640: 6e 67 20 3d 3d 3d 20 27 65 78 74 65 6e 73 69 6f  ng === 'extensio
7650: 6e 27 29 20 7b 0a 20 20 20 20 20 20 63 20 3d 20  n') {.      c = 
7660: 28 63 20 3d 3d 3d 20 27 31 27 20 26 26 20 73 79  (c === '1' && sy
7670: 6d 62 6f 6c 5b 69 20 2b 20 31 5d 29 20 3f 20 2b  mbol[i + 1]) ? +
7680: 73 79 6d 62 6f 6c 2e 73 75 62 73 74 72 28 69 2c  symbol.substr(i,
7690: 20 32 29 20 3a 20 2b 63 3b 0a 0a 20 20 20 20 20   2) : +c;..     
76a0: 20 69 66 20 28 21 69 73 4e 61 4e 28 63 29 20 26   if (!isNaN(c) &
76b0: 26 20 63 20 21 3d 3d 20 36 29 20 7b 0a 20 20 20  & c !== 6) {.   
76c0: 20 20 20 20 20 63 68 6f 72 64 4c 65 6e 67 74 68       chordLength
76d0: 20 3d 20 28 63 20 2d 20 31 29 20 2f 20 32 3b 0a   = (c - 1) / 2;.
76e0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 63 68 6f  .        if (cho
76f0: 72 64 4c 65 6e 67 74 68 20 21 3d 3d 20 4d 61 74  rdLength !== Mat
7700: 68 2e 72 6f 75 6e 64 28 63 68 6f 72 64 4c 65 6e  h.round(chordLen
7710: 67 74 68 29 29 0a 20 20 20 20 20 20 20 20 20 20  gth)).          
7720: 72 65 74 75 72 6e 20 6e 65 77 20 45 72 72 6f 72  return new Error
7730: 28 27 49 6e 76 61 6c 69 64 20 69 6e 74 65 72 76  ('Invalid interv
7740: 61 6c 20 65 78 74 65 6e 73 69 6f 6e 3a 20 27 20  al extension: ' 
7750: 2b 20 63 2e 74 6f 53 74 72 69 6e 67 28 31 30 29  + c.toString(10)
7760: 29 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
7770: 6e 61 6d 65 20 3d 3d 3d 20 27 6f 27 20 7c 7c 20  name === 'o' || 
7780: 6e 61 6d 65 20 3d 3d 3d 20 27 64 69 6d 27 29 0a  name === 'dim').
7790: 20 20 20 20 20 20 20 20 20 20 6e 6f 74 65 73 5b            notes[
77a0: 33 5d 20 3d 20 27 64 37 27 3b 0a 20 20 20 20 20  3] = 'd7';.     
77b0: 20 20 20 65 6c 73 65 20 69 66 20 28 65 78 70 6c     else if (expl
77c0: 69 63 69 74 4d 61 6a 6f 72 29 0a 20 20 20 20 20  icitMajor).     
77d0: 20 20 20 20 20 6e 6f 74 65 73 5b 33 5d 20 3d 20       notes[3] = 
77e0: 27 4d 37 27 3b 0a 0a 20 20 20 20 20 20 20 20 69  'M7';..        i
77f0: 20 2b 3d 20 63 20 3e 3d 20 31 30 20 3f 20 31 20   += c >= 10 ? 1 
7800: 3a 20 30 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73  : 0;.      } els
7810: 65 20 69 66 20 28 63 20 3d 3d 3d 20 36 29 20 7b  e if (c === 6) {
7820: 0a 20 20 20 20 20 20 20 20 6e 6f 74 65 73 5b 33  .        notes[3
7830: 5d 20 3d 20 27 4d 36 27 3b 0a 20 20 20 20 20 20  ] = 'M6';.      
7840: 20 20 63 68 6f 72 64 4c 65 6e 67 74 68 20 3d 20    chordLength = 
7850: 4d 61 74 68 2e 6d 61 78 28 33 2c 20 63 68 6f 72  Math.max(3, chor
7860: 64 4c 65 6e 67 74 68 29 3b 0a 20 20 20 20 20 20  dLength);.      
7870: 7d 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 69  } else.        i
7880: 20 2d 3d 20 31 3b 0a 0a 20 20 20 20 20 20 70 61   -= 1;..      pa
7890: 72 73 69 6e 67 20 3d 20 27 61 6c 74 65 72 61 74  rsing = 'alterat
78a0: 69 6f 6e 73 27 3b 0a 20 20 20 20 7d 20 65 6c 73  ions';.    } els
78b0: 65 20 69 66 20 28 70 61 72 73 69 6e 67 20 3d 3d  e if (parsing ==
78c0: 3d 20 27 61 6c 74 65 72 61 74 69 6f 6e 73 27 29  = 'alterations')
78d0: 20 7b 0a 20 20 20 20 20 20 76 61 72 20 61 6c 74   {.      var alt
78e0: 65 72 61 74 69 6f 6e 73 20 3d 20 73 79 6d 62 6f  erations = symbo
78f0: 6c 2e 73 75 62 73 74 72 28 69 29 2e 73 70 6c 69  l.substr(i).spli
7900: 74 28 2f 28 23 7c 62 7c 61 64 64 7c 6d 61 6a 7c  t(/(#|b|add|maj|
7910: 73 75 73 7c 4d 29 2f 69 29 2c 0a 20 20 20 20 20  sus|M)/i),.     
7920: 20 20 20 20 20 6e 65 78 74 2c 20 66 6c 61 74 20       next, flat 
7930: 3d 20 66 61 6c 73 65 2c 20 73 68 61 72 70 20 3d  = false, sharp =
7940: 20 66 61 6c 73 65 3b 0a 0a 20 20 20 20 20 20 69   false;..      i
7950: 66 20 28 61 6c 74 65 72 61 74 69 6f 6e 73 2e 6c  f (alterations.l
7960: 65 6e 67 74 68 20 3d 3d 3d 20 31 29 0a 20 20 20  ength === 1).   
7970: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
7980: 45 72 72 6f 72 28 27 49 6e 76 61 6c 69 64 20 61  Error('Invalid a
7990: 6c 74 65 72 61 74 69 6f 6e 27 29 3b 0a 20 20 20  lteration');.   
79a0: 20 20 20 65 6c 73 65 20 69 66 20 28 61 6c 74 65     else if (alte
79b0: 72 61 74 69 6f 6e 73 5b 30 5d 2e 6c 65 6e 67 74  rations[0].lengt
79c0: 68 20 21 3d 3d 20 30 29 0a 20 20 20 20 20 20 20  h !== 0).       
79d0: 20 72 65 74 75 72 6e 20 6e 65 77 20 45 72 72 6f   return new Erro
79e0: 72 28 27 49 6e 76 61 6c 69 64 20 74 6f 6b 65 6e  r('Invalid token
79f0: 3a 20 5c 27 27 20 2b 20 61 6c 74 65 72 61 74 69  : \'' + alterati
7a00: 6f 6e 73 5b 30 5d 20 2b 20 27 5c 27 27 29 3b 0a  ons[0] + '\'');.
7a10: 0a 20 20 20 20 20 20 76 61 72 20 69 67 6e 6f 72  .      var ignor
7a20: 65 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 20  e = false;.     
7a30: 20 61 6c 74 65 72 61 74 69 6f 6e 73 2e 66 6f 72   alterations.for
7a40: 45 61 63 68 28 66 75 6e 63 74 69 6f 6e 28 61 6c  Each(function(al
7a50: 74 2c 20 69 2c 20 61 72 72 29 20 7b 0a 20 20 20  t, i, arr) {.   
7a60: 20 20 20 20 20 69 66 20 28 69 67 6e 6f 72 65 20       if (ignore 
7a70: 7c 7c 20 21 61 6c 74 2e 6c 65 6e 67 74 68 29 0a  || !alt.length).
7a80: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7a90: 20 69 67 6e 6f 72 65 20 3d 20 66 61 6c 73 65 3b   ignore = false;
7aa0: 0a 0a 20 20 20 20 20 20 20 20 76 61 72 20 6e 65  ..        var ne
7ab0: 78 74 20 3d 20 61 72 72 5b 69 20 2b 20 31 5d 2c  xt = arr[i + 1],
7ac0: 20 6c 6f 77 65 72 20 3d 20 61 6c 74 2e 74 6f 4c   lower = alt.toL
7ad0: 6f 77 65 72 43 61 73 65 28 29 3b 0a 20 20 20 20  owerCase();.    
7ae0: 20 20 20 20 69 66 20 28 61 6c 74 20 3d 3d 3d 20      if (alt === 
7af0: 27 4d 27 20 7c 7c 20 6c 6f 77 65 72 20 3d 3d 3d  'M' || lower ===
7b00: 20 27 6d 61 6a 27 29 20 7b 0a 20 20 20 20 20 20   'maj') {.      
7b10: 20 20 20 20 69 66 20 28 6e 65 78 74 20 3d 3d 3d      if (next ===
7b20: 20 27 37 27 29 0a 20 20 20 20 20 20 20 20 20 20   '7').          
7b30: 20 20 69 67 6e 6f 72 65 20 3d 20 74 72 75 65 3b    ignore = true;
7b40: 0a 0a 20 20 20 20 20 20 20 20 20 20 63 68 6f 72  ..          chor
7b50: 64 4c 65 6e 67 74 68 20 3d 20 4d 61 74 68 2e 6d  dLength = Math.m
7b60: 61 78 28 33 2c 20 63 68 6f 72 64 4c 65 6e 67 74  ax(3, chordLengt
7b70: 68 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6e 6f  h);.          no
7b80: 74 65 73 5b 33 5d 20 3d 20 27 4d 37 27 3b 0a 20  tes[3] = 'M7';. 
7b90: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66         } else if
7ba0: 20 28 6c 6f 77 65 72 20 3d 3d 3d 20 27 73 75 73   (lower === 'sus
7bb0: 27 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 76  ') {.          v
7bc0: 61 72 20 74 79 70 65 20 3d 20 27 50 34 27 3b 0a  ar type = 'P4';.
7bd0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 65            if (ne
7be0: 78 74 20 3d 3d 3d 20 27 32 27 20 7c 7c 20 6e 65  xt === '2' || ne
7bf0: 78 74 20 3d 3d 3d 20 27 34 27 29 20 7b 0a 20 20  xt === '4') {.  
7c00: 20 20 20 20 20 20 20 20 20 20 69 67 6e 6f 72 65            ignore
7c10: 20 3d 20 74 72 75 65 3b 0a 0a 20 20 20 20 20 20   = true;..      
7c20: 20 20 20 20 20 20 69 66 20 28 6e 65 78 74 20 3d        if (next =
7c30: 3d 3d 20 27 32 27 29 0a 20 20 20 20 20 20 20 20  == '2').        
7c40: 20 20 20 20 20 20 74 79 70 65 20 3d 20 27 4d 32        type = 'M2
7c50: 27 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 0a  ';.          }..
7c60: 20 20 20 20 20 20 20 20 20 20 6e 6f 74 65 73 5b            notes[
7c70: 31 5d 20 3d 20 74 79 70 65 3b 20 2f 2f 20 52 65  1] = type; // Re
7c80: 70 6c 61 63 65 20 74 68 69 72 64 20 77 69 74 68  place third with
7c90: 20 4d 32 20 6f 72 20 50 34 0a 20 20 20 20 20 20   M2 or P4.      
7ca0: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 6c 6f 77    } else if (low
7cb0: 65 72 20 3d 3d 3d 20 27 61 64 64 27 29 20 7b 0a  er === 'add') {.
7cc0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 65            if (ne
7cd0: 78 74 20 3d 3d 3d 20 27 39 27 29 0a 20 20 20 20  xt === '9').    
7ce0: 20 20 20 20 20 20 20 20 61 64 64 69 74 69 6f 6e          addition
7cf0: 61 6c 73 2e 70 75 73 68 28 27 4d 39 27 29 3b 0a  als.push('M9');.
7d00: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
7d10: 66 20 28 6e 65 78 74 20 3d 3d 3d 20 27 31 31 27  f (next === '11'
7d20: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 64  ).            ad
7d30: 64 69 74 69 6f 6e 61 6c 73 2e 70 75 73 68 28 27  ditionals.push('
7d40: 50 31 31 27 29 3b 0a 20 20 20 20 20 20 20 20 20  P11');.         
7d50: 20 65 6c 73 65 20 69 66 20 28 6e 65 78 74 20 3d   else if (next =
7d60: 3d 3d 20 27 31 33 27 29 0a 20 20 20 20 20 20 20  == '13').       
7d70: 20 20 20 20 20 61 64 64 69 74 69 6f 6e 61 6c 73       additionals
7d80: 2e 70 75 73 68 28 27 4d 31 33 27 29 3b 0a 0a 20  .push('M13');.. 
7d90: 20 20 20 20 20 20 20 20 20 69 67 6e 6f 72 65 20           ignore 
7da0: 3d 20 74 72 75 65 0a 20 20 20 20 20 20 20 20 7d  = true.        }
7db0: 20 65 6c 73 65 20 69 66 20 28 6c 6f 77 65 72 20   else if (lower 
7dc0: 3d 3d 3d 20 27 62 27 29 20 7b 0a 20 20 20 20 20  === 'b') {.     
7dd0: 20 20 20 20 20 66 6c 61 74 20 3d 20 74 72 75 65       flat = true
7de0: 3b 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ;.        } else
7df0: 20 69 66 20 28 6c 6f 77 65 72 20 3d 3d 3d 20 27   if (lower === '
7e00: 23 27 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  #') {.          
7e10: 73 68 61 72 70 20 3d 20 74 72 75 65 3b 0a 20 20  sharp = true;.  
7e20: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20        } else {. 
7e30: 20 20 20 20 20 20 20 20 20 76 61 72 20 74 6f 6b           var tok
7e40: 65 6e 20 3d 20 2b 61 6c 74 2c 20 71 75 61 6c 69  en = +alt, quali
7e50: 74 79 2c 20 69 6e 74 50 6f 73 3b 0a 20 20 20 20  ty, intPos;.    
7e60: 20 20 20 20 20 20 69 66 20 28 69 73 4e 61 4e 28        if (isNaN(
7e70: 74 6f 6b 65 6e 29 20 7c 7c 20 53 74 72 69 6e 67  token) || String
7e80: 28 74 6f 6b 65 6e 29 2e 6c 65 6e 67 74 68 20 21  (token).length !
7e90: 3d 3d 20 61 6c 74 2e 6c 65 6e 67 74 68 29 0a 20  == alt.length). 
7ea0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
7eb0: 6e 20 6e 65 77 20 45 72 72 6f 72 28 27 49 6e 76  n new Error('Inv
7ec0: 61 6c 69 64 20 74 6f 6b 65 6e 3a 20 5c 27 27 20  alid token: \'' 
7ed0: 2b 20 61 6c 74 20 2b 20 27 5c 27 27 29 3b 0a 0a  + alt + '\'');..
7ee0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 6f            if (to
7ef0: 6b 65 6e 20 3d 3d 3d 20 36 29 20 7b 0a 20 20 20  ken === 6) {.   
7f00: 20 20 20 20 20 20 20 20 20 69 66 20 28 73 68 61           if (sha
7f10: 72 70 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  rp).            
7f20: 20 20 6e 6f 74 65 73 5b 33 5d 20 3d 20 27 41 36    notes[3] = 'A6
7f30: 27 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  ';.            e
7f40: 6c 73 65 20 69 66 20 28 66 6c 61 74 29 0a 20 20  lse if (flat).  
7f50: 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 74 65              note
7f60: 73 5b 33 5d 20 3d 20 27 6d 36 27 3b 0a 20 20 20  s[3] = 'm6';.   
7f70: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0a 20 20           else.  
7f80: 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 74 65              note
7f90: 73 5b 33 5d 20 3d 20 27 4d 36 27 3b 0a 0a 20 20  s[3] = 'M6';..  
7fa0: 20 20 20 20 20 20 20 20 20 20 63 68 6f 72 64 4c            chordL
7fb0: 65 6e 67 74 68 20 3d 20 4d 61 74 68 2e 6d 61 78  ength = Math.max
7fc0: 28 33 2c 20 63 68 6f 72 64 4c 65 6e 67 74 68 29  (3, chordLength)
7fd0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ;.            re
7fe0: 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 20 20  turn;.          
7ff0: 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  }..          // 
8000: 43 61 6c 63 75 6c 61 74 65 20 74 68 65 20 70 6f  Calculate the po
8010: 73 69 74 69 6f 6e 20 69 6e 20 74 68 65 20 27 6e  sition in the 'n
8020: 6f 74 65 27 20 61 72 72 61 79 0a 20 20 20 20 20  ote' array.     
8030: 20 20 20 20 20 69 6e 74 50 6f 73 20 3d 20 28 74       intPos = (t
8040: 6f 6b 65 6e 20 2d 20 31 29 20 2f 20 32 3b 0a 20  oken - 1) / 2;. 
8050: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 68 6f           if (cho
8060: 72 64 4c 65 6e 67 74 68 20 3c 20 69 6e 74 50 6f  rdLength < intPo
8070: 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  s).            c
8080: 68 6f 72 64 4c 65 6e 67 74 68 20 3d 20 69 6e 74  hordLength = int
8090: 50 6f 73 3b 0a 0a 20 20 20 20 20 20 20 20 20 20  Pos;..          
80a0: 69 66 20 28 74 6f 6b 65 6e 20 3c 20 35 20 7c 7c  if (token < 5 ||
80b0: 20 74 6f 6b 65 6e 20 3d 3d 3d 20 37 20 7c 7c 20   token === 7 || 
80c0: 69 6e 74 50 6f 73 20 21 3d 3d 20 4d 61 74 68 2e  intPos !== Math.
80d0: 72 6f 75 6e 64 28 69 6e 74 50 6f 73 29 29 0a 20  round(intPos)). 
80e0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
80f0: 6e 20 6e 65 77 20 45 72 72 6f 72 28 27 49 6e 76  n new Error('Inv
8100: 61 6c 69 64 20 69 6e 74 65 72 76 61 6c 20 61 6c  alid interval al
8110: 74 65 72 61 74 69 6f 6e 3a 20 27 20 2b 20 74 6f  teration: ' + to
8120: 6b 65 6e 29 3b 0a 0a 20 20 20 20 20 20 20 20 20  ken);..         
8130: 20 71 75 61 6c 69 74 79 20 3d 20 6e 6f 74 65 73   quality = notes
8140: 5b 69 6e 74 50 6f 73 5d 5b 30 5d 3b 0a 0a 20 20  [intPos][0];..  
8150: 20 20 20 20 20 20 20 20 2f 2f 20 41 6c 74 65 72          // Alter
8160: 61 74 65 20 74 68 65 20 71 75 61 6c 69 74 79 20  ate the quality 
8170: 6f 66 20 74 68 65 20 69 6e 74 65 72 76 61 6c 20  of the interval 
8180: 61 63 63 6f 72 64 69 6e 67 20 74 68 65 20 61 63  according the ac
8190: 63 69 64 65 6e 74 61 6c 73 0a 20 20 20 20 20 20  cidentals.      
81a0: 20 20 20 20 69 66 20 28 73 68 61 72 70 29 20 7b      if (sharp) {
81b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
81c0: 28 71 75 61 6c 69 74 79 20 3d 3d 3d 20 27 64 27  (quality === 'd'
81d0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
81e0: 71 75 61 6c 69 74 79 20 3d 20 27 6d 27 3b 0a 20  quality = 'm';. 
81f0: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
8200: 69 66 20 28 71 75 61 6c 69 74 79 20 3d 3d 3d 20  if (quality === 
8210: 27 6d 27 29 0a 20 20 20 20 20 20 20 20 20 20 20  'm').           
8220: 20 20 20 71 75 61 6c 69 74 79 20 3d 20 27 4d 27     quality = 'M'
8230: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ;.            el
8240: 73 65 20 69 66 20 28 71 75 61 6c 69 74 79 20 3d  se if (quality =
8250: 3d 3d 20 27 4d 27 20 7c 7c 20 71 75 61 6c 69 74  == 'M' || qualit
8260: 79 20 3d 3d 3d 20 27 50 27 29 0a 20 20 20 20 20  y === 'P').     
8270: 20 20 20 20 20 20 20 20 20 71 75 61 6c 69 74 79           quality
8280: 20 3d 20 27 41 27 3b 0a 20 20 20 20 20 20 20 20   = 'A';.        
8290: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 66 6c 61    } else if (fla
82a0: 74 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  t) {.           
82b0: 20 69 66 20 28 71 75 61 6c 69 74 79 20 3d 3d 3d   if (quality ===
82c0: 20 27 41 27 29 0a 20 20 20 20 20 20 20 20 20 20   'A').          
82d0: 20 20 20 20 71 75 61 6c 69 74 79 20 3d 20 27 4d      quality = 'M
82e0: 27 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  ';.            e
82f0: 6c 73 65 20 69 66 20 28 71 75 61 6c 69 74 79 20  lse if (quality 
8300: 3d 3d 3d 20 27 4d 27 29 0a 20 20 20 20 20 20 20  === 'M').       
8310: 20 20 20 20 20 20 20 71 75 61 6c 69 74 79 20 3d         quality =
8320: 20 27 6d 27 3b 0a 20 20 20 20 20 20 20 20 20 20   'm';.          
8330: 20 20 65 6c 73 65 20 69 66 20 28 71 75 61 6c 69    else if (quali
8340: 74 79 20 3d 3d 3d 20 27 6d 27 20 7c 7c 20 71 75  ty === 'm' || qu
8350: 61 6c 69 74 79 20 3d 3d 3d 20 27 50 27 29 0a 20  ality === 'P'). 
8360: 20 20 20 20 20 20 20 20 20 20 20 20 20 71 75 61               qua
8370: 6c 69 74 79 20 3d 20 27 64 27 3b 0a 20 20 20 20  lity = 'd';.    
8380: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
8390: 20 20 20 73 68 61 72 70 20 3d 20 66 6c 61 74 20     sharp = flat 
83a0: 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 20  = false;.       
83b0: 20 20 20 6e 6f 74 65 73 5b 69 6e 74 50 6f 73 5d     notes[intPos]
83c0: 20 3d 20 71 75 61 6c 69 74 79 20 2b 20 74 6f 6b   = quality + tok
83d0: 65 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  en;.        }.  
83e0: 20 20 20 20 7d 29 3b 0a 20 20 20 20 20 20 70 61      });.      pa
83f0: 72 73 69 6e 67 20 3d 20 27 65 6e 64 65 64 27 3b  rsing = 'ended';
8400: 0a 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28  .    } else if (
8410: 70 61 72 73 69 6e 67 20 3d 3d 3d 20 27 65 6e 64  parsing === 'end
8420: 65 64 27 29 20 7b 0a 20 20 20 20 20 20 62 72 65  ed') {.      bre
8430: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  ak;.    }.  }.. 
8440: 20 72 65 74 75 72 6e 20 6e 6f 74 65 73 2e 73 6c   return notes.sl
8450: 69 63 65 28 30 2c 20 63 68 6f 72 64 4c 65 6e 67  ice(0, chordLeng
8460: 74 68 20 2b 20 31 29 2e 63 6f 6e 63 61 74 28 61  th + 1).concat(a
8470: 64 64 69 74 69 6f 6e 61 6c 73 29 3b 0a 7d 0a 0a  dditionals);.}..
8480: 7d 2c 7b 7d 5d 2c 31 31 3a 5b 66 75 6e 63 74 69  },{}],11:[functi
8490: 6f 6e 28 72 65 71 75 69 72 65 2c 6d 6f 64 75 6c  on(require,modul
84a0: 65 2c 65 78 70 6f 72 74 73 29 7b 0a 76 61 72 20  e,exports){.var 
84b0: 63 6f 6f 72 64 73 20 3d 20 72 65 71 75 69 72 65  coords = require
84c0: 28 27 6e 6f 74 65 63 6f 6f 72 64 27 29 3b 0a 76  ('notecoord');.v
84d0: 61 72 20 61 63 63 76 61 6c 20 3d 20 72 65 71 75  ar accval = requ
84e0: 69 72 65 28 27 61 63 63 69 64 65 6e 74 61 6c 2d  ire('accidental-
84f0: 76 61 6c 75 65 27 29 3b 0a 0a 6d 6f 64 75 6c 65  value');..module
8500: 2e 65 78 70 6f 72 74 73 20 3d 20 66 75 6e 63 74  .exports = funct
8510: 69 6f 6e 20 68 65 6c 6d 68 6f 6c 74 7a 28 6e 61  ion helmholtz(na
8520: 6d 65 29 20 7b 0a 20 20 76 61 72 20 6e 61 6d 65  me) {.  var name
8530: 20 3d 20 6e 61 6d 65 2e 72 65 70 6c 61 63 65 28   = name.replace(
8540: 2f 5c 75 32 30 33 32 2f 67 2c 20 22 27 22 29 2e  /\u2032/g, "'").
8550: 72 65 70 6c 61 63 65 28 2f 5c 75 30 33 37 35 2f  replace(/\u0375/
8560: 67 2c 20 27 2c 27 29 3b 0a 20 20 76 61 72 20 70  g, ',');.  var p
8570: 61 72 74 73 20 3d 20 6e 61 6d 65 2e 6d 61 74 63  arts = name.matc
8580: 68 28 2f 5e 28 2c 2a 29 28 5b 61 2d 68 5d 29 28  h(/^(,*)([a-h])(
8590: 78 7c 23 7c 62 62 7c 62 3f 29 28 5b 2c 5c 27 5d  x|#|bb|b?)([,\']
85a0: 2a 29 24 2f 69 29 3b 0a 0a 20 20 69 66 20 28 21  *)$/i);..  if (!
85b0: 70 61 72 74 73 20 7c 7c 20 6e 61 6d 65 20 21 3d  parts || name !=
85c0: 3d 20 70 61 72 74 73 5b 30 5d 29 0a 20 20 20 20  = parts[0]).    
85d0: 74 68 72 6f 77 20 6e 65 77 20 45 72 72 6f 72 28  throw new Error(
85e0: 27 49 6e 76 61 6c 69 64 20 66 6f 72 6d 61 74 74  'Invalid formatt
85f0: 69 6e 67 27 29 3b 0a 0a 20 20 76 61 72 20 6e 6f  ing');..  var no
8600: 74 65 20 3d 20 70 61 72 74 73 5b 32 5d 3b 0a 20  te = parts[2];. 
8610: 20 76 61 72 20 6f 63 74 61 76 65 46 69 72 73 74   var octaveFirst
8620: 20 3d 20 70 61 72 74 73 5b 31 5d 3b 0a 20 20 76   = parts[1];.  v
8630: 61 72 20 6f 63 74 61 76 65 4c 61 73 74 20 3d 20  ar octaveLast = 
8640: 70 61 72 74 73 5b 34 5d 3b 0a 20 20 76 61 72 20  parts[4];.  var 
8650: 6c 6f 77 65 72 20 3d 20 6e 6f 74 65 20 3d 3d 3d  lower = note ===
8660: 20 6e 6f 74 65 2e 74 6f 4c 6f 77 65 72 43 61 73   note.toLowerCas
8670: 65 28 29 3b 0a 20 20 76 61 72 20 6f 63 74 61 76  e();.  var octav
8680: 65 3b 0a 0a 20 20 69 66 20 28 6f 63 74 61 76 65  e;..  if (octave
8690: 46 69 72 73 74 29 20 7b 0a 20 20 20 20 69 66 20  First) {.    if 
86a0: 28 6c 6f 77 65 72 29 0a 20 20 20 20 20 20 74 68  (lower).      th
86b0: 72 6f 77 20 6e 65 77 20 45 72 72 6f 72 28 27 49  row new Error('I
86c0: 6e 76 61 6c 69 64 20 66 6f 72 6d 61 74 74 69 6e  nvalid formattin
86d0: 67 20 2d 20 66 6f 75 6e 64 20 63 6f 6d 6d 61 73  g - found commas
86e0: 20 62 65 66 6f 72 65 20 6c 6f 77 65 72 63 61 73   before lowercas
86f0: 65 20 6e 6f 74 65 27 29 3b 0a 0a 20 20 20 20 6f  e note');..    o
8700: 63 74 61 76 65 20 3d 20 32 20 2d 20 6f 63 74 61  ctave = 2 - octa
8710: 76 65 46 69 72 73 74 2e 6c 65 6e 67 74 68 3b 0a  veFirst.length;.
8720: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 6f 63 74    } else if (oct
8730: 61 76 65 4c 61 73 74 29 20 7b 0a 20 20 20 20 69  aveLast) {.    i
8740: 66 20 28 6f 63 74 61 76 65 4c 61 73 74 2e 6d 61  f (octaveLast.ma
8750: 74 63 68 28 2f 5e 27 2b 24 2f 29 20 26 26 20 6c  tch(/^'+$/) && l
8760: 6f 77 65 72 29 0a 20 20 20 20 20 20 6f 63 74 61  ower).      octa
8770: 76 65 20 3d 20 33 20 2b 20 6f 63 74 61 76 65 4c  ve = 3 + octaveL
8780: 61 73 74 2e 6c 65 6e 67 74 68 3b 0a 20 20 20 20  ast.length;.    
8790: 65 6c 73 65 20 69 66 20 28 6f 63 74 61 76 65 4c  else if (octaveL
87a0: 61 73 74 2e 6d 61 74 63 68 28 2f 5e 2c 2b 24 2f  ast.match(/^,+$/
87b0: 29 20 26 26 20 21 6c 6f 77 65 72 29 0a 20 20 20  ) && !lower).   
87c0: 20 20 20 6f 63 74 61 76 65 20 3d 20 32 20 2d 20     octave = 2 - 
87d0: 6f 63 74 61 76 65 4c 61 73 74 2e 6c 65 6e 67 74  octaveLast.lengt
87e0: 68 3b 0a 20 20 20 20 65 6c 73 65 0a 20 20 20 20  h;.    else.    
87f0: 20 20 74 68 72 6f 77 20 6e 65 77 20 45 72 72 6f    throw new Erro
8800: 72 28 27 49 6e 76 61 6c 69 64 20 66 6f 72 6d 61  r('Invalid forma
8810: 74 74 69 6e 67 20 2d 20 6d 69 73 6d 61 74 63 68  tting - mismatch
8820: 20 62 65 74 77 65 65 6e 20 6f 63 74 61 76 65 20   between octave 
8830: 27 20 2b 0a 20 20 20 20 20 20 20 20 27 69 6e 64  ' +.        'ind
8840: 69 63 61 74 6f 72 20 61 6e 64 20 6c 65 74 74 65  icator and lette
8850: 72 20 63 61 73 65 27 29 0a 20 20 7d 20 65 6c 73  r case').  } els
8860: 65 0a 20 20 20 20 6f 63 74 61 76 65 20 3d 20 6c  e.    octave = l
8870: 6f 77 65 72 20 3f 20 33 20 3a 20 32 3b 0a 0a 20  ower ? 3 : 2;.. 
8880: 20 76 61 72 20 61 63 63 69 64 65 6e 74 61 6c 56   var accidentalV
8890: 61 6c 75 65 20 3d 20 61 63 63 76 61 6c 2e 69 6e  alue = accval.in
88a0: 74 65 72 76 61 6c 28 70 61 72 74 73 5b 33 5d 2e  terval(parts[3].
88b0: 74 6f 4c 6f 77 65 72 43 61 73 65 28 29 29 3b 0a  toLowerCase());.
88c0: 20 20 76 61 72 20 63 6f 6f 72 64 20 3d 20 63 6f    var coord = co
88d0: 6f 72 64 73 28 6e 6f 74 65 2e 74 6f 4c 6f 77 65  ords(note.toLowe
88e0: 72 43 61 73 65 28 29 29 3b 0a 0a 20 20 63 6f 6f  rCase());..  coo
88f0: 72 64 5b 30 5d 20 2b 3d 20 6f 63 74 61 76 65 3b  rd[0] += octave;
8900: 0a 20 20 63 6f 6f 72 64 5b 30 5d 20 2b 3d 20 61  .  coord[0] += a
8910: 63 63 69 64 65 6e 74 61 6c 56 61 6c 75 65 5b 30  ccidentalValue[0
8920: 5d 20 2d 20 63 6f 6f 72 64 73 2e 41 34 5b 30 5d  ] - coords.A4[0]
8930: 3b 0a 20 20 63 6f 6f 72 64 5b 31 5d 20 2b 3d 20  ;.  coord[1] += 
8940: 61 63 63 69 64 65 6e 74 61 6c 56 61 6c 75 65 5b  accidentalValue[
8950: 31 5d 20 2d 20 63 6f 6f 72 64 73 2e 41 34 5b 31  1] - coords.A4[1
8960: 5d 3b 0a 0a 20 20 72 65 74 75 72 6e 20 63 6f 6f  ];..  return coo
8970: 72 64 3b 0a 7d 3b 0a 0a 7d 2c 7b 22 61 63 63 69  rd;.};..},{"acci
8980: 64 65 6e 74 61 6c 2d 76 61 6c 75 65 22 3a 39 2c  dental-value":9,
8990: 22 6e 6f 74 65 63 6f 6f 72 64 22 3a 31 33 7d 5d  "notecoord":13}]
89a0: 2c 31 32 3a 5b 66 75 6e 63 74 69 6f 6e 28 72 65  ,12:[function(re
89b0: 71 75 69 72 65 2c 6d 6f 64 75 6c 65 2c 65 78 70  quire,module,exp
89c0: 6f 72 74 73 29 7b 0a 76 61 72 20 70 61 74 74 65  orts){.var patte
89d0: 72 6e 20 3d 20 2f 5e 28 41 41 7c 41 7c 50 7c 4d  rn = /^(AA|A|P|M
89e0: 7c 6d 7c 64 7c 64 64 29 28 2d 3f 5c 64 2b 29 24  |m|d|dd)(-?\d+)$
89f0: 2f 3b 0a 0a 2f 2f 20 54 68 65 20 69 6e 74 65 72  /;..// The inter
8a00: 76 61 6c 20 69 74 20 74 61 6b 65 73 20 74 6f 20  val it takes to 
8a10: 72 61 69 73 65 20 61 20 6e 6f 74 65 20 61 20 73  raise a note a s
8a20: 65 6d 69 74 6f 6e 65 0a 76 61 72 20 73 68 61 72  emitone.var shar
8a30: 70 20 3d 20 5b 2d 34 2c 20 37 5d 3b 0a 0a 76 61  p = [-4, 7];..va
8a40: 72 20 70 41 6c 74 73 20 3d 20 5b 27 64 64 27 2c  r pAlts = ['dd',
8a50: 20 27 64 27 2c 20 27 50 27 2c 20 27 41 27 2c 20   'd', 'P', 'A', 
8a60: 27 41 41 27 5d 3b 0a 76 61 72 20 6d 41 6c 74 73  'AA'];.var mAlts
8a70: 20 3d 20 5b 27 64 64 27 2c 20 27 64 27 2c 20 27   = ['dd', 'd', '
8a80: 6d 27 2c 20 27 4d 27 2c 20 27 41 27 2c 20 27 41  m', 'M', 'A', 'A
8a90: 41 27 5d 3b 0a 0a 76 61 72 20 62 61 73 65 49 6e  A'];..var baseIn
8aa0: 74 65 72 76 61 6c 73 20 3d 20 5b 0a 20 20 5b 30  tervals = [.  [0
8ab0: 2c 20 30 5d 2c 0a 20 20 5b 33 2c 20 2d 35 5d 2c  , 0],.  [3, -5],
8ac0: 0a 20 20 5b 32 2c 20 2d 33 5d 2c 0a 20 20 5b 31  .  [2, -3],.  [1
8ad0: 2c 20 2d 31 5d 2c 0a 20 20 5b 30 2c 20 31 5d 2c  , -1],.  [0, 1],
8ae0: 0a 20 20 5b 33 2c 20 2d 34 5d 2c 0a 20 20 5b 32  .  [3, -4],.  [2
8af0: 2c 20 2d 32 5d 2c 0a 20 20 5b 31 2c 20 30 5d 0a  , -2],.  [1, 0].
8b00: 5d 3b 0a 0a 6d 6f 64 75 6c 65 2e 65 78 70 6f 72  ];..module.expor
8b10: 74 73 20 3d 20 66 75 6e 63 74 69 6f 6e 28 73 69  ts = function(si
8b20: 6d 70 6c 65 29 20 7b 0a 20 20 76 61 72 20 70 61  mple) {.  var pa
8b30: 72 73 65 72 20 3d 20 73 69 6d 70 6c 65 2e 6d 61  rser = simple.ma
8b40: 74 63 68 28 70 61 74 74 65 72 6e 29 3b 0a 20 20  tch(pattern);.  
8b50: 69 66 20 28 21 70 61 72 73 65 72 29 20 72 65 74  if (!parser) ret
8b60: 75 72 6e 20 6e 75 6c 6c 3b 0a 0a 20 20 76 61 72  urn null;..  var
8b70: 20 71 75 61 6c 69 74 79 20 3d 20 70 61 72 73 65   quality = parse
8b80: 72 5b 31 5d 3b 0a 20 20 76 61 72 20 6e 75 6d 62  r[1];.  var numb
8b90: 65 72 20 3d 20 2b 70 61 72 73 65 72 5b 32 5d 3b  er = +parser[2];
8ba0: 0a 20 20 76 61 72 20 73 69 67 6e 20 3d 20 6e 75  .  var sign = nu
8bb0: 6d 62 65 72 20 3c 20 30 20 3f 20 2d 31 20 3a 20  mber < 0 ? -1 : 
8bc0: 31 3b 0a 0a 20 20 6e 75 6d 62 65 72 20 3d 20 73  1;..  number = s
8bd0: 69 67 6e 20 3c 20 30 20 3f 20 2d 6e 75 6d 62 65  ign < 0 ? -numbe
8be0: 72 20 3a 20 6e 75 6d 62 65 72 3b 0a 0a 20 20 76  r : number;..  v
8bf0: 61 72 20 6c 6f 77 65 72 20 3d 20 6e 75 6d 62 65  ar lower = numbe
8c00: 72 20 3e 20 38 20 3f 20 28 6e 75 6d 62 65 72 20  r > 8 ? (number 
8c10: 25 20 37 20 7c 7c 20 37 29 20 3a 20 6e 75 6d 62  % 7 || 7) : numb
8c20: 65 72 3b 0a 20 20 76 61 72 20 6f 63 74 61 76 65  er;.  var octave
8c30: 73 20 3d 20 28 6e 75 6d 62 65 72 20 2d 20 6c 6f  s = (number - lo
8c40: 77 65 72 29 20 2f 20 37 3b 0a 0a 20 20 76 61 72  wer) / 7;..  var
8c50: 20 62 61 73 65 20 3d 20 62 61 73 65 49 6e 74 65   base = baseInte
8c60: 72 76 61 6c 73 5b 6c 6f 77 65 72 20 2d 20 31 5d  rvals[lower - 1]
8c70: 3b 0a 20 20 76 61 72 20 61 6c 74 73 20 3d 20 62  ;.  var alts = b
8c80: 61 73 65 5b 30 5d 20 3c 3d 20 31 20 3f 20 70 41  ase[0] <= 1 ? pA
8c90: 6c 74 73 20 3a 20 6d 41 6c 74 73 3b 0a 20 20 76  lts : mAlts;.  v
8ca0: 61 72 20 61 6c 74 20 3d 20 61 6c 74 73 2e 69 6e  ar alt = alts.in
8cb0: 64 65 78 4f 66 28 71 75 61 6c 69 74 79 29 20 2d  dexOf(quality) -
8cc0: 20 32 3b 0a 0a 20 20 2f 2f 20 74 68 69 73 20 68   2;..  // this h
8cd0: 61 70 70 65 6e 73 2c 20 69 66 20 74 68 65 20 61  appens, if the a
8ce0: 6c 74 65 72 61 74 69 6f 6e 20 77 61 73 6e 27 74  lteration wasn't
8cf0: 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 74 68   suitable for th
8d00: 69 73 20 74 79 70 65 0a 20 20 2f 2f 20 6f 66 20  is type.  // of 
8d10: 69 6e 74 65 72 76 61 6c 2c 20 73 75 63 68 20 61  interval, such a
8d20: 73 20 50 32 20 6f 72 20 4d 35 20 28 6e 6f 20 22  s P2 or M5 (no "
8d30: 70 65 72 66 65 63 74 20 73 65 63 6f 6e 64 22 20  perfect second" 
8d40: 6f 72 20 22 6d 61 6a 6f 72 20 66 69 66 74 68 22  or "major fifth"
8d50: 29 0a 20 20 69 66 20 28 61 6c 74 20 3d 3d 3d 20  ).  if (alt === 
8d60: 2d 33 29 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b  -3) return null;
8d70: 0a 0a 20 20 72 65 74 75 72 6e 20 5b 0a 20 20 20  ..  return [.   
8d80: 20 73 69 67 6e 20 2a 20 28 62 61 73 65 5b 30 5d   sign * (base[0]
8d90: 20 2b 20 6f 63 74 61 76 65 73 20 2b 20 73 68 61   + octaves + sha
8da0: 72 70 5b 30 5d 20 2a 20 61 6c 74 29 2c 0a 20 20  rp[0] * alt),.  
8db0: 20 20 73 69 67 6e 20 2a 20 28 62 61 73 65 5b 31    sign * (base[1
8dc0: 5d 20 2b 20 73 68 61 72 70 5b 31 5d 20 2a 20 61  ] + sharp[1] * a
8dd0: 6c 74 29 0a 20 20 5d 3b 0a 7d 0a 0a 2f 2f 20 43  lt).  ];.}..// C
8de0: 6f 70 79 20 74 6f 20 61 76 6f 69 64 20 6f 76 65  opy to avoid ove
8df0: 72 77 72 69 74 69 6e 67 20 69 6e 74 65 72 6e 61  rwriting interna
8e00: 6c 20 62 61 73 65 20 69 6e 74 65 72 76 61 6c 73  l base intervals
8e10: 0a 6d 6f 64 75 6c 65 2e 65 78 70 6f 72 74 73 2e  .module.exports.
8e20: 63 6f 6f 72 64 73 20 3d 20 62 61 73 65 49 6e 74  coords = baseInt
8e30: 65 72 76 61 6c 73 2e 73 6c 69 63 65 28 30 29 3b  ervals.slice(0);
8e40: 0a 0a 7d 2c 7b 7d 5d 2c 31 33 3a 5b 66 75 6e 63  ..},{}],13:[func
8e50: 74 69 6f 6e 28 72 65 71 75 69 72 65 2c 6d 6f 64  tion(require,mod
8e60: 75 6c 65 2c 65 78 70 6f 72 74 73 29 7b 0a 2f 2f  ule,exports){.//
8e70: 20 46 69 72 73 74 20 63 6f 6f 72 64 20 69 73 20   First coord is 
8e80: 6f 63 74 61 76 65 73 2c 20 73 65 63 6f 6e 64 20  octaves, second 
8e90: 69 73 20 66 69 66 74 68 73 2e 20 44 69 73 74 61  is fifths. Dista
8ea0: 6e 63 65 73 20 61 72 65 20 72 65 6c 61 74 69 76  nces are relativ
8eb0: 65 20 74 6f 20 63 0a 76 61 72 20 6e 6f 74 65 73  e to c.var notes
8ec0: 20 3d 20 7b 0a 20 20 63 3a 20 5b 30 2c 20 30 5d   = {.  c: [0, 0]
8ed0: 2c 0a 20 20 64 3a 20 5b 2d 31 2c 20 32 5d 2c 0a  ,.  d: [-1, 2],.
8ee0: 20 20 65 3a 20 5b 2d 32 2c 20 34 5d 2c 0a 20 20    e: [-2, 4],.  
8ef0: 66 3a 20 5b 31 2c 20 2d 31 5d 2c 0a 20 20 67 3a  f: [1, -1],.  g:
8f00: 20 5b 30 2c 20 31 5d 2c 0a 20 20 61 3a 20 5b 2d   [0, 1],.  a: [-
8f10: 31 2c 20 33 5d 2c 0a 20 20 62 3a 20 5b 2d 32 2c  1, 3],.  b: [-2,
8f20: 20 35 5d 2c 0a 20 20 68 3a 20 5b 2d 32 2c 20 35   5],.  h: [-2, 5
8f30: 5d 0a 7d 3b 0a 0a 6d 6f 64 75 6c 65 2e 65 78 70  ].};..module.exp
8f40: 6f 72 74 73 20 3d 20 66 75 6e 63 74 69 6f 6e 28  orts = function(
8f50: 6e 61 6d 65 29 20 7b 0a 20 20 72 65 74 75 72 6e  name) {.  return
8f60: 20 6e 61 6d 65 20 69 6e 20 6e 6f 74 65 73 20 3f   name in notes ?
8f70: 20 5b 6e 6f 74 65 73 5b 6e 61 6d 65 5d 5b 30 5d   [notes[name][0]
8f80: 2c 20 6e 6f 74 65 73 5b 6e 61 6d 65 5d 5b 31 5d  , notes[name][1]
8f90: 5d 20 3a 20 6e 75 6c 6c 3b 0a 7d 3b 0a 0a 6d 6f  ] : null;.};..mo
8fa0: 64 75 6c 65 2e 65 78 70 6f 72 74 73 2e 6e 6f 74  dule.exports.not
8fb0: 65 73 20 3d 20 6e 6f 74 65 73 3b 0a 6d 6f 64 75  es = notes;.modu
8fc0: 6c 65 2e 65 78 70 6f 72 74 73 2e 41 34 20 3d 20  le.exports.A4 = 
8fd0: 5b 33 2c 20 33 5d 3b 20 2f 2f 20 52 65 6c 61 74  [3, 3]; // Relat
8fe0: 69 76 65 20 74 6f 20 43 30 20 28 73 63 69 65 6e  ive to C0 (scien
8ff0: 74 69 63 20 6e 6f 74 61 74 69 6f 6e 2c 20 7e 31  tic notation, ~1
9000: 36 2e 33 35 48 7a 29 0a 6d 6f 64 75 6c 65 2e 65  6.35Hz).module.e
9010: 78 70 6f 72 74 73 2e 73 68 61 72 70 20 3d 20 5b  xports.sharp = [
9020: 2d 34 2c 20 37 5d 3b 0a 0a 7d 2c 7b 7d 5d 2c 31  -4, 7];..},{}],1
9030: 34 3a 5b 66 75 6e 63 74 69 6f 6e 28 72 65 71 75  4:[function(requ
9040: 69 72 65 2c 6d 6f 64 75 6c 65 2c 65 78 70 6f 72  ire,module,expor
9050: 74 73 29 7b 0a 6d 6f 64 75 6c 65 2e 65 78 70 6f  ts){.module.expo
9060: 72 74 73 20 3d 20 66 75 6e 63 74 69 6f 6e 28 63  rts = function(c
9070: 6f 6f 72 64 2c 20 73 74 64 50 69 74 63 68 29 20  oord, stdPitch) 
9080: 7b 0a 20 20 69 66 20 28 74 79 70 65 6f 66 20 63  {.  if (typeof c
9090: 6f 6f 72 64 20 3d 3d 3d 20 27 6e 75 6d 62 65 72  oord === 'number
90a0: 27 29 20 7b 0a 20 20 20 20 73 74 64 50 69 74 63  ') {.    stdPitc
90b0: 68 20 3d 20 63 6f 6f 72 64 3b 0a 20 20 20 20 72  h = coord;.    r
90c0: 65 74 75 72 6e 20 66 75 6e 63 74 69 6f 6e 28 63  eturn function(c
90d0: 6f 6f 72 64 29 20 7b 0a 20 20 20 20 20 20 72 65  oord) {.      re
90e0: 74 75 72 6e 20 73 74 64 50 69 74 63 68 20 2a 20  turn stdPitch * 
90f0: 4d 61 74 68 2e 70 6f 77 28 32 2c 20 28 63 6f 6f  Math.pow(2, (coo
9100: 72 64 5b 30 5d 20 2a 20 31 32 20 2b 20 63 6f 6f  rd[0] * 12 + coo
9110: 72 64 5b 31 5d 20 2a 20 37 29 20 2f 20 31 32 29  rd[1] * 7) / 12)
9120: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 73  ;.    }.  }..  s
9130: 74 64 50 69 74 63 68 20 3d 20 73 74 64 50 69 74  tdPitch = stdPit
9140: 63 68 20 7c 7c 20 34 34 30 3b 0a 20 20 72 65 74  ch || 440;.  ret
9150: 75 72 6e 20 73 74 64 50 69 74 63 68 20 2a 20 4d  urn stdPitch * M
9160: 61 74 68 2e 70 6f 77 28 32 2c 20 28 63 6f 6f 72  ath.pow(2, (coor
9170: 64 5b 30 5d 20 2a 20 31 32 20 2b 20 63 6f 6f 72  d[0] * 12 + coor
9180: 64 5b 31 5d 20 2a 20 37 29 20 2f 20 31 32 29 3b  d[1] * 7) / 12);
9190: 0a 7d 0a 0a 7d 2c 7b 7d 5d 2c 31 35 3a 5b 66 75  .}..},{}],15:[fu
91a0: 6e 63 74 69 6f 6e 28 72 65 71 75 69 72 65 2c 6d  nction(require,m
91b0: 6f 64 75 6c 65 2c 65 78 70 6f 72 74 73 29 7b 0a  odule,exports){.
91c0: 76 61 72 20 63 6f 6f 72 64 73 20 3d 20 72 65 71  var coords = req
91d0: 75 69 72 65 28 27 6e 6f 74 65 63 6f 6f 72 64 27  uire('notecoord'
91e0: 29 3b 0a 76 61 72 20 61 63 63 76 61 6c 20 3d 20  );.var accval = 
91f0: 72 65 71 75 69 72 65 28 27 61 63 63 69 64 65 6e  require('acciden
9200: 74 61 6c 2d 76 61 6c 75 65 27 29 3b 0a 0a 6d 6f  tal-value');..mo
9210: 64 75 6c 65 2e 65 78 70 6f 72 74 73 20 3d 20 66  dule.exports = f
9220: 75 6e 63 74 69 6f 6e 20 73 63 69 65 6e 74 69 66  unction scientif
9230: 69 63 28 6e 61 6d 65 29 20 7b 0a 20 20 76 61 72  ic(name) {.  var
9240: 20 66 6f 72 6d 61 74 20 3d 20 2f 5e 28 5b 61 2d   format = /^([a-
9250: 68 5d 29 28 78 7c 23 7c 62 62 7c 62 3f 29 28 2d  h])(x|#|bb|b?)(-
9260: 3f 5c 64 2a 29 2f 69 3b 0a 0a 20 20 76 61 72 20  ?\d*)/i;..  var 
9270: 70 61 72 73 65 72 20 3d 20 6e 61 6d 65 2e 6d 61  parser = name.ma
9280: 74 63 68 28 66 6f 72 6d 61 74 29 3b 0a 20 20 69  tch(format);.  i
9290: 66 20 28 21 28 70 61 72 73 65 72 20 26 26 20 6e  f (!(parser && n
92a0: 61 6d 65 20 3d 3d 3d 20 70 61 72 73 65 72 5b 30  ame === parser[0
92b0: 5d 20 26 26 20 70 61 72 73 65 72 5b 33 5d 2e 6c  ] && parser[3].l
92c0: 65 6e 67 74 68 29 29 20 72 65 74 75 72 6e 3b 0a  ength)) return;.
92d0: 0a 20 20 76 61 72 20 6e 6f 74 65 4e 61 6d 65 20  .  var noteName 
92e0: 3d 20 70 61 72 73 65 72 5b 31 5d 3b 0a 20 20 76  = parser[1];.  v
92f0: 61 72 20 6f 63 74 61 76 65 20 3d 20 2b 70 61 72  ar octave = +par
9300: 73 65 72 5b 33 5d 3b 0a 20 20 76 61 72 20 61 63  ser[3];.  var ac
9310: 63 69 64 65 6e 74 61 6c 20 3d 20 70 61 72 73 65  cidental = parse
9320: 72 5b 32 5d 2e 6c 65 6e 67 74 68 20 3f 20 70 61  r[2].length ? pa
9330: 72 73 65 72 5b 32 5d 2e 74 6f 4c 6f 77 65 72 43  rser[2].toLowerC
9340: 61 73 65 28 29 20 3a 20 27 27 3b 0a 0a 20 20 76  ase() : '';..  v
9350: 61 72 20 61 63 63 69 64 65 6e 74 61 6c 56 61 6c  ar accidentalVal
9360: 75 65 20 3d 20 61 63 63 76 61 6c 2e 69 6e 74 65  ue = accval.inte
9370: 72 76 61 6c 28 61 63 63 69 64 65 6e 74 61 6c 29  rval(accidental)
9380: 3b 0a 20 20 76 61 72 20 63 6f 6f 72 64 20 3d 20  ;.  var coord = 
9390: 63 6f 6f 72 64 73 28 6e 6f 74 65 4e 61 6d 65 2e  coords(noteName.
93a0: 74 6f 4c 6f 77 65 72 43 61 73 65 28 29 29 3b 0a  toLowerCase());.
93b0: 0a 20 20 63 6f 6f 72 64 5b 30 5d 20 2b 3d 20 6f  .  coord[0] += o
93c0: 63 74 61 76 65 3b 0a 20 20 63 6f 6f 72 64 5b 30  ctave;.  coord[0
93d0: 5d 20 2b 3d 20 61 63 63 69 64 65 6e 74 61 6c 56  ] += accidentalV
93e0: 61 6c 75 65 5b 30 5d 20 2d 20 63 6f 6f 72 64 73  alue[0] - coords
93f0: 2e 41 34 5b 30 5d 3b 0a 20 20 63 6f 6f 72 64 5b  .A4[0];.  coord[
9400: 31 5d 20 2b 3d 20 61 63 63 69 64 65 6e 74 61 6c  1] += accidental
9410: 56 61 6c 75 65 5b 31 5d 20 2d 20 63 6f 6f 72 64  Value[1] - coord
9420: 73 2e 41 34 5b 31 5d 3b 0a 0a 20 20 72 65 74 75  s.A4[1];..  retu
9430: 72 6e 20 63 6f 6f 72 64 3b 0a 7d 3b 0a 0a 7d 2c  rn coord;.};..},
9440: 7b 22 61 63 63 69 64 65 6e 74 61 6c 2d 76 61 6c  {"accidental-val
9450: 75 65 22 3a 39 2c 22 6e 6f 74 65 63 6f 6f 72 64  ue":9,"notecoord
9460: 22 3a 31 33 7d 5d 7d 2c 7b 7d 2c 5b 31 5d 29 28  ":13}]},{},[1])(
9470: 31 29 0a 7d 29 3b                                1).});