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