0000: 76 61 72 20 76 6f 77 73 20 3d 20 72 65 71 75 69 var vows = requi
0010: 72 65 28 27 76 6f 77 73 27 29 2c 0a 20 20 20 20 re('vows'),.
0020: 61 73 73 65 72 74 20 3d 20 72 65 71 75 69 72 65 assert = require
0030: 28 27 61 73 73 65 72 74 27 29 2c 0a 20 20 20 20 ('assert'),.
0040: 74 65 6f 72 69 61 20 3d 20 72 65 71 75 69 72 65 teoria = require
0050: 28 27 2e 2e 2f 27 29 3b 0a 0a 76 6f 77 73 2e 64 ('../');..vows.d
0060: 65 73 63 72 69 62 65 28 27 54 65 6f 72 69 61 4e escribe('TeoriaN
0070: 6f 74 65 20 63 6c 61 73 73 27 29 2e 61 64 64 42 ote class').addB
0080: 61 74 63 68 28 7b 0a 20 20 27 41 34 20 2d 20 61 atch({. 'A4 - a
0090: 5c 27 27 3a 20 7b 0a 20 20 20 20 74 6f 70 69 63 \'': {. topic
00a0: 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 : function() {.
00b0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 65 6f 72 return teor
00c0: 69 61 2e 6e 6f 74 65 28 27 41 34 27 29 3b 0a 20 ia.note('A4');.
00d0: 20 20 20 7d 2c 0a 0a 20 20 20 20 27 4f 63 74 61 },.. 'Octa
00e0: 76 65 20 73 68 6f 75 6c 64 20 62 65 20 34 27 3a ve should be 4':
00f0: 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65 29 20 function(note)
0100: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 65 {. assert.e
0110: 71 75 61 6c 28 6e 6f 74 65 2e 6f 63 74 61 76 65 qual(note.octave
0120: 28 29 2c 20 34 29 3b 0a 20 20 20 20 7d 2c 0a 0a (), 4);. },..
0130: 20 20 20 20 27 4e 6f 74 65 20 6e 61 6d 65 20 69 'Note name i
0140: 73 20 6c 6f 77 65 72 20 63 61 73 65 27 3a 20 66 s lower case': f
0150: 75 6e 63 74 69 6f 6e 28 6e 6f 74 65 29 20 7b 0a unction(note) {.
0160: 20 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 assert.equ
0170: 61 6c 28 6e 6f 74 65 2e 6e 61 6d 65 28 29 2c 20 al(note.name(),
0180: 27 61 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 'a');. },..
0190: 20 20 27 41 34 20 69 73 20 74 68 65 20 34 39 74 'A4 is the 49t
01a0: 68 20 70 69 61 6e 6f 20 6b 65 79 27 3a 20 66 75 h piano key': fu
01b0: 6e 63 74 69 6f 6e 28 6e 6f 74 65 29 20 7b 0a 20 nction(note) {.
01c0: 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 61 assert.equa
01d0: 6c 28 6e 6f 74 65 2e 6b 65 79 28 29 2c 20 34 39 l(note.key(), 49
01e0: 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 );. },.. '
01f0: 41 34 20 69 73 20 65 78 70 72 65 73 73 65 64 20 A4 is expressed
0200: 61 5c 27 20 69 6e 20 48 65 6c 6d 68 6f 6c 74 7a a\' in Helmholtz
0210: 20 6e 6f 74 61 74 69 6f 6e 27 3a 20 66 75 6e 63 notation': func
0220: 74 69 6f 6e 28 6e 6f 74 65 29 20 7b 0a 20 20 20 tion(note) {.
0230: 20 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c 28 assert.equal(
0240: 6e 6f 74 65 2e 68 65 6c 6d 68 6f 6c 74 7a 28 29 note.helmholtz()
0250: 2c 20 27 61 5c 27 27 29 3b 0a 20 20 20 20 7d 2c , 'a\'');. },
0260: 0a 0a 20 20 20 20 27 41 34 20 69 73 20 65 78 70 .. 'A4 is exp
0270: 72 65 73 73 65 64 20 41 34 20 69 6e 20 73 63 69 ressed A4 in sci
0280: 65 6e 74 69 66 69 63 20 6e 6f 74 61 74 69 6f 6e entific notation
0290: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65 ': function(note
02a0: 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 ) {. assert
02b0: 2e 65 71 75 61 6c 28 6e 6f 74 65 2e 73 63 69 65 .equal(note.scie
02c0: 6e 74 69 66 69 63 28 29 2c 20 27 41 34 27 29 3b ntific(), 'A4');
02d0: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 54 68 . },.. 'Th
02e0: 65 20 66 72 65 71 75 65 6e 63 79 20 6f 66 20 41 e frequency of A
02f0: 34 20 69 73 20 34 34 30 68 7a 27 3a 20 66 75 6e 4 is 440hz': fun
0300: 63 74 69 6f 6e 28 6e 6f 74 65 29 20 7b 0a 20 20 ction(note) {.
0310: 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c assert.equal
0320: 28 6e 6f 74 65 2e 66 71 28 29 2c 20 34 34 30 29 (note.fq(), 440)
0330: 3b 0a 20 20 20 20 7d 0a 20 20 7d 2c 0a 0a 20 20 ;. }. },..
0340: 27 43 23 35 20 2d 20 63 23 5c 27 5c 27 27 3a 20 'C#5 - c#\'\'':
0350: 7b 0a 20 20 20 20 74 6f 70 69 63 3a 20 66 75 6e {. topic: fun
0360: 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 ction() {.
0370: 72 65 74 75 72 6e 20 74 65 6f 72 69 61 2e 6e 6f return teoria.no
0380: 74 65 28 27 63 23 5c 27 5c 27 27 29 3b 0a 20 20 te('c#\'\'');.
0390: 20 20 7d 2c 0a 0a 20 20 20 20 27 4f 63 74 61 76 },.. 'Octav
03a0: 65 20 73 68 6f 75 6c 64 20 62 65 20 35 27 3a 20 e should be 5':
03b0: 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65 29 20 7b function(note) {
03c0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 . assert.eq
03d0: 75 61 6c 28 6e 6f 74 65 2e 6f 63 74 61 76 65 28 ual(note.octave(
03e0: 29 2c 20 35 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 ), 5);. },..
03f0: 20 20 20 27 54 68 65 20 6e 61 6d 65 20 61 74 74 'The name att
0400: 72 69 62 75 74 65 20 6f 66 20 63 23 20 69 73 20 ribute of c# is
0410: 6a 75 73 74 20 63 27 3a 20 66 75 6e 63 74 69 6f just c': functio
0420: 6e 28 6e 6f 74 65 29 20 7b 0a 20 20 20 20 20 20 n(note) {.
0430: 61 73 73 65 72 74 2e 65 71 75 61 6c 28 6e 6f 74 assert.equal(not
0440: 65 2e 6e 61 6d 65 28 29 2c 20 27 63 27 29 3b 0a e.name(), 'c');.
0450: 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 54 68 65 },.. 'The
0460: 20 61 63 63 69 64 65 6e 74 61 6c 2e 73 69 67 6e accidental.sign
0470: 20 61 74 74 72 69 62 75 74 65 20 69 73 20 23 27 attribute is #'
0480: 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65 29 : function(note)
0490: 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e {. assert.
04a0: 65 71 75 61 6c 28 6e 6f 74 65 2e 61 63 63 69 64 equal(note.accid
04b0: 65 6e 74 61 6c 28 29 2c 20 27 23 27 29 3b 0a 20 ental(), '#');.
04c0: 20 20 20 7d 2c 0a 0a 20 20 20 20 27 54 68 65 20 },.. 'The
04d0: 61 63 63 69 64 65 6e 74 61 6c 2e 76 61 6c 75 65 accidental.value
04e0: 20 61 74 74 72 69 62 75 74 65 20 69 73 20 31 27 attribute is 1'
04f0: 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65 29 : function(note)
0500: 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e {. assert.
0510: 65 71 75 61 6c 28 6e 6f 74 65 2e 61 63 63 69 64 equal(note.accid
0520: 65 6e 74 61 6c 56 61 6c 75 65 28 29 2c 20 31 29 entalValue(), 1)
0530: 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 43 ;. },.. 'C
0540: 23 35 20 69 73 20 74 68 65 20 35 33 72 64 20 70 #5 is the 53rd p
0550: 69 61 6e 6f 20 6b 65 79 27 3a 20 66 75 6e 63 74 iano key': funct
0560: 69 6f 6e 28 6e 6f 74 65 29 20 7b 0a 20 20 20 20 ion(note) {.
0570: 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c 28 6e assert.equal(n
0580: 6f 74 65 2e 6b 65 79 28 29 2c 20 35 33 29 3b 0a ote.key(), 53);.
0590: 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 43 23 35 },.. 'C#5
05a0: 20 69 73 20 63 23 5c 27 5c 27 20 69 6e 20 48 65 is c#\'\' in He
05b0: 6c 6d 68 6f 6c 74 7a 20 6e 6f 74 61 74 69 6f 6e lmholtz notation
05c0: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65 ': function(note
05d0: 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 ) {. assert
05e0: 2e 65 71 75 61 6c 28 6e 6f 74 65 2e 68 65 6c 6d .equal(note.helm
05f0: 68 6f 6c 74 7a 28 29 2c 20 27 63 23 5c 27 5c 27 holtz(), 'c#\'\'
0600: 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 ');. },..
0610: 27 63 23 5c 27 5c 27 20 69 73 20 43 23 35 20 69 'c#\'\' is C#5 i
0620: 6e 20 73 63 69 65 6e 74 69 66 69 63 20 6e 6f 74 n scientific not
0630: 61 74 69 6f 6e 27 3a 20 66 75 6e 63 74 69 6f 6e ation': function
0640: 28 6e 6f 74 65 29 20 7b 0a 20 20 20 20 20 20 61 (note) {. a
0650: 73 73 65 72 74 2e 65 71 75 61 6c 28 6e 6f 74 65 ssert.equal(note
0660: 2e 73 63 69 65 6e 74 69 66 69 63 28 29 2c 20 27 .scientific(), '
0670: 43 23 35 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 C#5');. },..
0680: 20 20 20 27 54 68 65 20 66 72 65 71 75 65 6e 63 'The frequenc
0690: 79 20 6f 66 20 43 23 35 20 69 73 20 61 70 70 72 y of C#5 is appr
06a0: 6f 78 69 6d 61 74 65 6c 79 20 35 35 34 2e 33 36 oximately 554.36
06b0: 35 27 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 5': function(not
06c0: 65 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 e) {. asser
06d0: 74 2e 65 71 75 61 6c 28 6e 6f 74 65 2e 66 71 28 t.equal(note.fq(
06e0: 29 2c 20 35 35 34 2e 33 36 35 32 36 31 39 35 33 ), 554.365261953
06f0: 37 34 34 32 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 7442);. },..
0700: 20 20 20 27 54 68 65 20 69 6e 74 65 72 76 61 6c 'The interval
0710: 20 62 65 74 77 65 65 6e 20 43 23 35 20 61 6e 64 between C#5 and
0720: 20 41 34 20 69 73 20 61 20 6d 61 6a 6f 72 20 74 A4 is a major t
0730: 68 69 72 64 27 3a 20 66 75 6e 63 74 69 6f 6e 28 hird': function(
0740: 6e 6f 74 65 29 20 7b 0a 20 20 20 20 20 20 76 61 note) {. va
0750: 72 20 61 34 20 3d 20 74 65 6f 72 69 61 2e 6e 6f r a4 = teoria.no
0760: 74 65 28 27 41 34 27 29 3b 0a 0a 20 20 20 20 20 te('A4');..
0770: 20 61 73 73 65 72 74 2e 64 65 65 70 45 71 75 61 assert.deepEqua
0780: 6c 28 6e 6f 74 65 2e 69 6e 74 65 72 76 61 6c 28 l(note.interval(
0790: 61 34 29 2c 20 74 65 6f 72 69 61 2e 69 6e 74 65 a4), teoria.inte
07a0: 72 76 61 6c 28 27 4d 2d 33 27 29 29 3b 0a 20 20 rval('M-3'));.
07b0: 20 20 7d 2c 0a 0a 20 20 20 20 27 54 68 65 20 69 },.. 'The i
07c0: 6e 74 65 72 76 61 6c 20 62 65 74 77 65 65 6e 20 nterval between
07d0: 43 23 35 20 61 6e 64 20 45 62 36 20 69 73 20 64 C#5 and Eb6 is d
07e0: 69 6d 69 6e 69 73 68 65 64 20 74 65 6e 74 68 27 iminished tenth'
07f0: 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65 29 : function(note)
0800: 20 7b 0a 20 20 20 20 20 20 76 61 72 20 65 62 36 {. var eb6
0810: 20 3d 20 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 = teoria.note('
0820: 45 62 36 27 29 3b 0a 0a 20 20 20 20 20 20 61 73 Eb6');.. as
0830: 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28 6e sert.deepEqual(n
0840: 6f 74 65 2e 69 6e 74 65 72 76 61 6c 28 65 62 36 ote.interval(eb6
0850: 29 2c 20 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 ), teoria.interv
0860: 61 6c 28 27 64 31 30 27 29 29 3b 0a 20 20 20 20 al('d10'));.
0870: 7d 2c 0a 0a 20 20 20 20 27 41 6e 20 64 69 6d 69 },.. 'An dimi
0880: 6e 69 73 68 65 64 20 66 69 66 74 68 20 61 77 61 nished fifth awa
0890: 79 20 66 72 6f 6d 20 43 23 35 20 69 73 20 47 35 y from C#5 is G5
08a0: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65 ': function(note
08b0: 29 20 7b 0a 20 20 20 20 20 20 76 61 72 20 67 35 ) {. var g5
08c0: 20 3d 20 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 = teoria.note('
08d0: 47 35 27 29 3b 0a 0a 20 20 20 20 20 20 61 73 73 G5');.. ass
08e0: 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28 6e 6f ert.deepEqual(no
08f0: 74 65 2e 69 6e 74 65 72 76 61 6c 28 27 64 35 27 te.interval('d5'
0900: 29 2c 20 67 35 29 3b 0a 20 20 20 20 7d 2c 0a 0a ), g5);. },..
0910: 20 20 20 20 27 54 68 65 20 69 6e 74 65 72 76 61 'The interva
0920: 6c 20 62 65 74 77 65 65 6e 20 43 23 34 20 61 6e l between C#4 an
0930: 64 20 44 62 34 20 69 73 20 61 20 64 69 6d 69 6e d Db4 is a dimin
0940: 69 73 68 65 64 20 73 65 63 6f 6e 64 27 3a 20 66 ished second': f
0950: 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 unction() {.
0960: 20 20 76 61 72 20 63 69 73 34 20 3d 20 74 65 6f var cis4 = teo
0970: 72 69 61 2e 6e 6f 74 65 28 27 63 23 34 27 29 3b ria.note('c#4');
0980: 0a 20 20 20 20 20 20 76 61 72 20 64 62 34 20 3d . var db4 =
0990: 20 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 64 62 teoria.note('db
09a0: 34 27 29 3b 0a 0a 20 20 20 20 20 20 61 73 73 65 4');.. asse
09b0: 72 74 2e 64 65 65 70 45 71 75 61 6c 28 63 69 73 rt.deepEqual(cis
09c0: 34 2e 69 6e 74 65 72 76 61 6c 28 64 62 34 29 2c 4.interval(db4),
09d0: 20 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c teoria.interval
09e0: 28 27 64 32 27 29 29 3b 0a 20 20 20 20 7d 0a 20 ('d2'));. }.
09f0: 20 7d 2c 0a 0a 20 20 27 49 6e 73 74 61 6e 74 69 },.. 'Instanti
0a00: 61 74 65 20 77 69 74 68 20 63 6f 6f 72 64 73 27 ate with coords'
0a10: 3a 20 7b 0a 20 20 20 20 27 5b 30 2c 20 30 5d 20 : {. '[0, 0]
0a20: 69 73 20 41 34 27 3a 20 66 75 6e 63 74 69 6f 6e is A4': function
0a30: 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 () {. asser
0a40: 74 2e 65 71 75 61 6c 28 74 65 6f 72 69 61 2e 6e t.equal(teoria.n
0a50: 6f 74 65 28 5b 30 2c 20 30 5d 29 2e 73 63 69 65 ote([0, 0]).scie
0a60: 6e 74 69 66 69 63 28 29 2c 20 27 41 34 27 29 3b ntific(), 'A4');
0a70: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 5b 2d . },.. '[-
0a80: 34 2c 20 34 5d 20 69 73 20 43 23 33 27 3a 20 66 4, 4] is C#3': f
0a90: 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 unction() {.
0aa0: 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c 28 74 assert.equal(t
0ab0: 65 6f 72 69 61 2e 6e 6f 74 65 28 5b 2d 34 2c 20 eoria.note([-4,
0ac0: 34 5d 29 2e 73 63 69 65 6e 74 69 66 69 63 28 29 4]).scientific()
0ad0: 2c 20 27 43 23 33 27 29 3b 0a 20 20 20 20 7d 2c , 'C#3');. },
0ae0: 0a 0a 20 20 20 20 27 5b 33 2c 20 2d 34 5d 20 69 .. '[3, -4] i
0af0: 73 20 46 35 27 3a 20 66 75 6e 63 74 69 6f 6e 28 s F5': function(
0b00: 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 ) {. assert
0b10: 2e 65 71 75 61 6c 28 74 65 6f 72 69 61 2e 6e 6f .equal(teoria.no
0b20: 74 65 28 5b 33 2c 20 2d 34 5d 29 2e 73 63 69 65 te([3, -4]).scie
0b30: 6e 74 69 66 69 63 28 29 2c 20 27 46 35 27 29 3b ntific(), 'F5');
0b40: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 5b 34 . },.. '[4
0b50: 2c 20 2d 37 5d 20 69 73 20 41 62 34 27 3a 20 66 , -7] is Ab4': f
0b60: 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 unction() {.
0b70: 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c 28 74 assert.equal(t
0b80: 65 6f 72 69 61 2e 6e 6f 74 65 28 5b 34 2c 20 2d eoria.note([4, -
0b90: 37 5d 29 2e 73 63 69 65 6e 74 69 66 69 63 28 29 7]).scientific()
0ba0: 2c 20 27 41 62 34 27 29 3b 0a 20 20 20 20 7d 0a , 'Ab4');. }.
0bb0: 20 20 7d 2c 0a 0a 20 20 27 49 6e 73 74 61 6e 74 },.. 'Instant
0bc0: 69 61 74 65 20 66 72 6f 6d 20 6b 65 79 27 3a 20 iate from key':
0bd0: 7b 0a 20 20 20 20 27 23 34 39 20 69 73 20 41 34 {. '#49 is A4
0be0: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a ': function() {.
0bf0: 20 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 assert.equ
0c00: 61 6c 28 74 65 6f 72 69 61 2e 6e 6f 74 65 2e 66 al(teoria.note.f
0c10: 72 6f 6d 4b 65 79 28 34 39 29 2e 73 63 69 65 6e romKey(49).scien
0c20: 74 69 66 69 63 28 29 2c 20 27 41 34 27 29 3b 0a tific(), 'A4');.
0c30: 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 23 32 30 },.. '#20
0c40: 20 69 73 20 45 32 27 3a 20 66 75 6e 63 74 69 6f is E2': functio
0c50: 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 n() {. asse
0c60: 72 74 2e 65 71 75 61 6c 28 74 65 6f 72 69 61 2e rt.equal(teoria.
0c70: 6e 6f 74 65 2e 66 72 6f 6d 4b 65 79 28 32 30 29 note.fromKey(20)
0c80: 2e 73 63 69 65 6e 74 69 66 69 63 28 29 2c 20 27 .scientific(), '
0c90: 45 32 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 E2');. },..
0ca0: 20 20 27 23 35 37 20 69 73 20 46 35 27 3a 20 66 '#57 is F5': f
0cb0: 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 unction() {.
0cc0: 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c 28 74 assert.equal(t
0cd0: 65 6f 72 69 61 2e 6e 6f 74 65 2e 66 72 6f 6d 4b eoria.note.fromK
0ce0: 65 79 28 35 37 29 2e 73 63 69 65 6e 74 69 66 69 ey(57).scientifi
0cf0: 63 28 29 2c 20 27 46 35 27 29 3b 0a 20 20 20 20 c(), 'F5');.
0d00: 7d 2c 0a 0a 20 20 20 20 27 23 37 32 20 69 73 20 },.. '#72 is
0d10: 47 23 36 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 G#6': function()
0d20: 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e {. assert.
0d30: 65 71 75 61 6c 28 74 65 6f 72 69 61 2e 6e 6f 74 equal(teoria.not
0d40: 65 2e 66 72 6f 6d 4b 65 79 28 37 32 29 2e 73 63 e.fromKey(72).sc
0d50: 69 65 6e 74 69 66 69 63 28 29 2c 20 27 47 23 36 ientific(), 'G#6
0d60: 27 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 2c 0a 0a ');. }. },..
0d70: 20 20 27 49 6e 73 74 61 6e 74 69 61 74 65 20 66 'Instantiate f
0d80: 72 6f 6d 20 66 72 65 71 75 65 6e 63 79 27 3a 20 rom frequency':
0d90: 7b 0a 20 20 20 20 27 33 39 31 2e 39 39 35 48 7a {. '391.995Hz
0da0: 20 69 73 20 47 34 27 3a 20 66 75 6e 63 74 69 6f is G4': functio
0db0: 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 n() {. asse
0dc0: 72 74 2e 65 71 75 61 6c 28 74 65 6f 72 69 61 2e rt.equal(teoria.
0dd0: 6e 6f 74 65 2e 66 72 6f 6d 46 72 65 71 75 65 6e note.fromFrequen
0de0: 63 79 28 33 39 31 2e 39 39 35 29 2e 6e 6f 74 65 cy(391.995).note
0df0: 2e 73 63 69 65 6e 74 69 66 69 63 28 29 2c 20 27 .scientific(), '
0e00: 47 34 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 G4');. },..
0e10: 20 20 27 32 32 30 2e 30 30 30 48 7a 20 69 73 20 '220.000Hz is
0e20: 41 33 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 A3': function()
0e30: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 65 {. assert.e
0e40: 71 75 61 6c 28 74 65 6f 72 69 61 2e 6e 6f 74 65 qual(teoria.note
0e50: 2e 66 72 6f 6d 46 72 65 71 75 65 6e 63 79 28 32 .fromFrequency(2
0e60: 32 30 2e 30 30 30 29 2e 6e 6f 74 65 2e 73 63 69 20.000).note.sci
0e70: 65 6e 74 69 66 69 63 28 29 2c 20 27 41 33 27 29 entific(), 'A3')
0e80: 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 31 ;. },.. '1
0e90: 35 35 2e 35 36 33 48 7a 20 69 73 20 45 62 33 27 55.563Hz is Eb3'
0ea0: 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 : function() {.
0eb0: 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 61 assert.equa
0ec0: 6c 28 74 65 6f 72 69 61 2e 6e 6f 74 65 2e 66 72 l(teoria.note.fr
0ed0: 6f 6d 46 72 65 71 75 65 6e 63 79 28 31 35 35 2e omFrequency(155.
0ee0: 35 36 33 29 2e 6e 6f 74 65 2e 73 63 69 65 6e 74 563).note.scient
0ef0: 69 66 69 63 28 29 2c 20 27 45 62 33 27 29 3b 0a ific(), 'Eb3');.
0f00: 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 32 39 35 },.. '295
0f10: 39 2e 39 36 48 7a 20 69 73 20 46 23 37 27 3a 20 9.96Hz is F#7':
0f20: 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 function() {.
0f30: 20 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c 28 assert.equal(
0f40: 74 65 6f 72 69 61 2e 6e 6f 74 65 2e 66 72 6f 6d teoria.note.from
0f50: 46 72 65 71 75 65 6e 63 79 28 32 39 35 39 2e 39 Frequency(2959.9
0f60: 36 29 2e 6e 6f 74 65 2e 73 63 69 65 6e 74 69 66 6).note.scientif
0f70: 69 63 28 29 2c 20 27 46 23 37 27 29 3b 0a 20 20 ic(), 'F#7');.
0f80: 20 20 7d 0a 20 20 7d 2c 0a 0a 20 20 27 49 6e 73 }. },.. 'Ins
0f90: 74 61 6e 74 69 61 74 65 20 66 72 6f 6d 20 4d 49 tantiate from MI
0fa0: 44 49 27 3a 20 7b 0a 20 20 20 20 27 4d 49 44 49 DI': {. 'MIDI
0fb0: 23 33 36 20 69 73 20 43 32 27 3a 20 66 75 6e 63 #36 is C2': func
0fc0: 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 tion() {. a
0fd0: 73 73 65 72 74 2e 65 71 75 61 6c 28 74 65 6f 72 ssert.equal(teor
0fe0: 69 61 2e 6e 6f 74 65 2e 66 72 6f 6d 4d 49 44 49 ia.note.fromMIDI
0ff0: 28 33 36 29 2e 73 63 69 65 6e 74 69 66 69 63 28 (36).scientific(
1000: 29 2c 20 27 43 32 27 29 3b 0a 20 20 20 20 7d 2c ), 'C2');. },
1010: 0a 0a 20 20 20 20 27 4d 49 44 49 23 37 37 20 69 .. 'MIDI#77 i
1020: 73 20 46 35 27 3a 20 66 75 6e 63 74 69 6f 6e 28 s F5': function(
1030: 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 ) {. assert
1040: 2e 65 71 75 61 6c 28 74 65 6f 72 69 61 2e 6e 6f .equal(teoria.no
1050: 74 65 2e 66 72 6f 6d 4d 49 44 49 28 37 37 29 2e te.fromMIDI(77).
1060: 73 63 69 65 6e 74 69 66 69 63 28 29 2c 20 27 46 scientific(), 'F
1070: 35 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 5');. },..
1080: 20 27 4d 49 44 49 23 36 31 20 69 73 20 44 62 34 'MIDI#61 is Db4
1090: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a ': function() {.
10a0: 20 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 assert.equ
10b0: 61 6c 28 74 65 6f 72 69 61 2e 6e 6f 74 65 2e 66 al(teoria.note.f
10c0: 72 6f 6d 4d 49 44 49 28 36 31 29 2e 73 63 69 65 romMIDI(61).scie
10d0: 6e 74 69 66 69 63 28 29 2c 20 27 44 62 34 27 29 ntific(), 'Db4')
10e0: 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 4d ;. },.. 'M
10f0: 49 44 49 23 38 30 20 69 73 20 47 23 35 27 3a 20 IDI#80 is G#5':
1100: 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 function() {.
1110: 20 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c 28 assert.equal(
1120: 74 65 6f 72 69 61 2e 6e 6f 74 65 2e 66 72 6f 6d teoria.note.from
1130: 4d 49 44 49 28 38 30 29 2e 73 63 69 65 6e 74 69 MIDI(80).scienti
1140: 66 69 63 28 29 2c 20 27 47 23 35 27 29 3b 0a 20 fic(), 'G#5');.
1150: 20 20 20 7d 0a 20 20 7d 2c 0a 0a 20 20 27 52 65 }. },.. 'Re
1160: 74 75 72 6e 20 4d 49 44 49 20 6e 6f 74 65 20 6e turn MIDI note n
1170: 75 6d 62 65 72 27 3a 20 7b 0a 20 20 20 20 27 4d umber': {. 'M
1180: 49 44 49 23 33 36 20 69 73 20 43 32 27 3a 20 66 IDI#36 is C2': f
1190: 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 unction() {.
11a0: 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c 28 74 assert.equal(t
11b0: 65 6f 72 69 61 2e 6e 6f 74 65 28 27 43 32 27 29 eoria.note('C2')
11c0: 2e 6d 69 64 69 28 29 2c 20 33 36 29 3b 0a 20 20 .midi(), 36);.
11d0: 20 20 7d 2c 0a 0a 20 20 20 20 27 4d 49 44 49 23 },.. 'MIDI#
11e0: 37 37 20 69 73 20 46 35 27 3a 20 66 75 6e 63 74 77 is F5': funct
11f0: 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73 ion() {. as
1200: 73 65 72 74 2e 65 71 75 61 6c 28 74 65 6f 72 69 sert.equal(teori
1210: 61 2e 6e 6f 74 65 28 27 46 35 27 29 2e 6d 69 64 a.note('F5').mid
1220: 69 28 29 2c 20 37 37 29 3b 0a 20 20 20 20 7d 2c i(), 77);. },
1230: 0a 0a 20 20 20 20 27 4d 49 44 49 23 36 31 20 69 .. 'MIDI#61 i
1240: 73 20 44 62 34 27 3a 20 66 75 6e 63 74 69 6f 6e s Db4': function
1250: 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 () {. asser
1260: 74 2e 65 71 75 61 6c 28 74 65 6f 72 69 61 2e 6e t.equal(teoria.n
1270: 6f 74 65 28 27 44 62 34 27 29 2e 6d 69 64 69 28 ote('Db4').midi(
1280: 29 2c 20 36 31 29 3b 0a 20 20 20 20 7d 2c 0a 0a ), 61);. },..
1290: 20 20 20 20 27 4d 49 44 49 23 38 30 20 69 73 20 'MIDI#80 is
12a0: 47 23 35 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 G#5': function()
12b0: 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e {. assert.
12c0: 65 71 75 61 6c 28 74 65 6f 72 69 61 2e 6e 6f 74 equal(teoria.not
12d0: 65 28 27 47 23 35 27 29 2e 6d 69 64 69 28 29 2c e('G#5').midi(),
12e0: 20 38 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 2c 80);. }. },
12f0: 0a 0a 20 20 27 43 68 72 6f 6d 61 27 3a 20 7b 0a .. 'Chroma': {.
1300: 20 20 20 20 27 43 20 68 61 73 20 63 68 72 6f 6d 'C has chrom
1310: 61 20 30 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 a 0': function()
1320: 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e {. assert.
1330: 65 71 75 61 6c 28 74 65 6f 72 69 61 2e 6e 6f 74 equal(teoria.not
1340: 65 28 27 63 27 29 2e 63 68 72 6f 6d 61 28 29 2c e('c').chroma(),
1350: 20 30 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 0);. },..
1360: 20 27 43 23 20 68 61 73 20 63 68 72 6f 6d 61 20 'C# has chroma
1370: 31 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 1': function() {
1380: 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 . assert.eq
1390: 75 61 6c 28 74 65 6f 72 69 61 2e 6e 6f 74 65 28 ual(teoria.note(
13a0: 27 63 23 27 29 2e 63 68 72 6f 6d 61 28 29 2c 20 'c#').chroma(),
13b0: 31 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 1);. },..
13c0: 27 42 20 68 61 73 20 63 68 72 6f 6d 61 20 31 31 'B has chroma 11
13d0: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a ': function() {.
13e0: 20 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 assert.equ
13f0: 61 6c 28 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 al(teoria.note('
1400: 62 27 29 2e 63 68 72 6f 6d 61 28 29 2c 20 31 31 b').chroma(), 11
1410: 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 );. },.. '
1420: 44 62 20 68 61 73 20 63 68 72 6f 6d 61 20 31 27 Db has chroma 1'
1430: 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 : function() {.
1440: 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 61 assert.equa
1450: 6c 28 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 64 l(teoria.note('d
1460: 62 27 29 2e 63 68 72 6f 6d 61 28 29 2c 20 31 29 b').chroma(), 1)
1470: 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 44 ;. },.. 'D
1480: 62 62 20 68 61 73 20 63 68 72 6f 6d 61 20 30 27 bb has chroma 0'
1490: 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 : function() {.
14a0: 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 61 assert.equa
14b0: 6c 28 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 64 l(teoria.note('d
14c0: 62 62 27 29 2e 63 68 72 6f 6d 61 28 29 2c 20 30 bb').chroma(), 0
14d0: 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 );. },.. '
14e0: 45 20 68 61 73 20 63 68 72 6f 6d 61 20 34 27 3a E has chroma 4':
14f0: 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 function() {.
1500: 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c assert.equal
1510: 28 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 65 27 (teoria.note('e'
1520: 29 2e 63 68 72 6f 6d 61 28 29 2c 20 34 29 3b 0a ).chroma(), 4);.
1530: 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 46 20 68 },.. 'F h
1540: 61 73 20 63 68 72 6f 6d 61 20 35 27 3a 20 66 75 as chroma 5': fu
1550: 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 nction() {.
1560: 20 61 73 73 65 72 74 2e 65 71 75 61 6c 28 74 65 assert.equal(te
1570: 6f 72 69 61 2e 6e 6f 74 65 28 27 66 27 29 2e 63 oria.note('f').c
1580: 68 72 6f 6d 61 28 29 2c 20 35 29 3b 0a 20 20 20 hroma(), 5);.
1590: 20 7d 2c 0a 0a 20 20 20 20 27 46 62 20 68 61 73 },.. 'Fb has
15a0: 20 63 68 72 6f 6d 61 20 34 27 3a 20 66 75 6e 63 chroma 4': func
15b0: 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 tion() {. a
15c0: 73 73 65 72 74 2e 65 71 75 61 6c 28 74 65 6f 72 ssert.equal(teor
15d0: 69 61 2e 6e 6f 74 65 28 27 66 62 27 29 2e 63 68 ia.note('fb').ch
15e0: 72 6f 6d 61 28 29 2c 20 34 29 3b 0a 20 20 20 20 roma(), 4);.
15f0: 7d 2c 0a 0a 20 20 20 20 27 48 23 20 68 61 73 20 },.. 'H# has
1600: 63 68 72 6f 6d 61 20 30 27 3a 20 66 75 6e 63 74 chroma 0': funct
1610: 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73 ion() {. as
1620: 73 65 72 74 2e 65 71 75 61 6c 28 74 65 6f 72 69 sert.equal(teori
1630: 61 2e 6e 6f 74 65 28 27 68 23 27 29 2e 63 68 72 a.note('h#').chr
1640: 6f 6d 61 28 29 2c 20 30 29 3b 0a 20 20 20 20 7d oma(), 0);. }
1650: 2c 0a 0a 20 20 20 20 27 42 78 20 68 61 73 20 63 ,.. 'Bx has c
1660: 68 72 6f 6d 61 20 31 27 3a 20 66 75 6e 63 74 69 hroma 1': functi
1670: 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73 on() {. ass
1680: 65 72 74 2e 65 71 75 61 6c 28 74 65 6f 72 69 61 ert.equal(teoria
1690: 2e 6e 6f 74 65 28 27 62 78 27 29 2e 63 68 72 6f .note('bx').chro
16a0: 6d 61 28 29 2c 20 31 29 3b 0a 20 20 20 20 7d 2c ma(), 1);. },
16b0: 0a 0a 20 20 20 20 27 43 62 62 20 68 61 73 20 63 .. 'Cbb has c
16c0: 68 72 6f 6d 61 20 31 30 27 3a 20 66 75 6e 63 74 hroma 10': funct
16d0: 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73 ion() {. as
16e0: 73 65 72 74 2e 65 71 75 61 6c 28 74 65 6f 72 69 sert.equal(teori
16f0: 61 2e 6e 6f 74 65 28 27 63 62 62 27 29 2e 63 68 a.note('cbb').ch
1700: 72 6f 6d 61 28 29 2c 20 31 30 29 3b 0a 20 20 20 roma(), 10);.
1710: 20 7d 0a 20 20 7d 2c 0a 0a 20 20 27 53 63 61 6c }. },.. 'Scal
1720: 65 20 44 65 67 72 65 65 73 27 3a 20 7b 0a 20 20 e Degrees': {.
1730: 20 20 27 45 62 20 69 73 20 73 63 61 6c 65 20 64 'Eb is scale d
1740: 65 67 72 65 65 20 31 20 28 74 6f 6e 69 63 29 20 egree 1 (tonic)
1750: 69 6e 20 61 6e 20 45 62 20 6d 69 6e 6f 72 20 73 in an Eb minor s
1760: 63 61 6c 65 27 3a 20 66 75 6e 63 74 69 6f 6e 28 cale': function(
1770: 29 20 7b 0a 20 20 20 20 20 20 76 61 72 20 6e 6f ) {. var no
1780: 74 65 20 3d 20 74 65 6f 72 69 61 2e 6e 6f 74 65 te = teoria.note
1790: 28 27 65 62 27 29 3b 0a 20 20 20 20 20 20 61 73 ('eb');. as
17a0: 73 65 72 74 2e 65 71 75 61 6c 28 6e 6f 74 65 2e sert.equal(note.
17b0: 73 63 61 6c 65 44 65 67 72 65 65 28 74 65 6f 72 scaleDegree(teor
17c0: 69 61 2e 73 63 61 6c 65 28 27 65 62 27 2c 20 27 ia.scale('eb', '
17d0: 6d 61 6a 6f 72 27 29 29 2c 20 31 29 3b 0a 20 20 major')), 1);.
17e0: 20 20 7d 2c 0a 0a 20 20 20 20 27 45 20 69 73 20 },.. 'E is
17f0: 73 63 61 6c 65 20 64 65 67 72 65 65 20 33 20 69 scale degree 3 i
1800: 6e 20 61 20 43 23 20 64 6f 72 69 61 6e 27 3a 20 n a C# dorian':
1810: 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 function() {.
1820: 20 20 20 76 61 72 20 6e 6f 74 65 20 3d 20 74 65 var note = te
1830: 6f 72 69 61 2e 6e 6f 74 65 28 27 65 27 29 3b 0a oria.note('e');.
1840: 20 20 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 assert.equ
1850: 61 6c 28 6e 6f 74 65 2e 73 63 61 6c 65 44 65 67 al(note.scaleDeg
1860: 72 65 65 28 74 65 6f 72 69 61 2e 73 63 61 6c 65 ree(teoria.scale
1870: 28 27 63 23 27 2c 20 27 64 6f 72 69 61 6e 27 29 ('c#', 'dorian')
1880: 29 2c 20 33 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 ), 3);. },..
1890: 20 20 20 27 43 20 69 73 20 73 63 61 6c 65 20 64 'C is scale d
18a0: 65 67 72 65 65 20 30 20 69 6e 20 61 20 44 20 6d egree 0 in a D m
18b0: 61 6a 6f 72 20 73 63 61 6c 65 20 28 6e 6f 74 20 ajor scale (not
18c0: 69 6e 20 73 63 61 6c 65 29 27 3a 20 66 75 6e 63 in scale)': func
18d0: 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 76 tion() {. v
18e0: 61 72 20 6e 6f 74 65 20 3d 20 74 65 6f 72 69 61 ar note = teoria
18f0: 2e 6e 6f 74 65 28 27 63 27 29 3b 0a 20 20 20 20 .note('c');.
1900: 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c 28 6e assert.equal(n
1910: 6f 74 65 2e 73 63 61 6c 65 44 65 67 72 65 65 28 ote.scaleDegree(
1920: 74 65 6f 72 69 61 2e 73 63 61 6c 65 28 27 64 27 teoria.scale('d'
1930: 2c 20 27 6d 61 6a 6f 72 27 29 29 2c 20 30 29 3b , 'major')), 0);
1940: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 42 62 . },.. 'Bb
1950: 20 69 73 20 73 63 61 6c 65 20 64 65 67 72 65 65 is scale degree
1960: 20 37 20 69 6e 20 61 20 43 20 6d 69 6e 6f 72 27 7 in a C minor'
1970: 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 : function() {.
1980: 20 20 20 20 20 76 61 72 20 6e 6f 74 65 20 3d 20 var note =
1990: 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 62 62 27 teoria.note('bb'
19a0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e );. assert.
19b0: 65 71 75 61 6c 28 6e 6f 74 65 2e 73 63 61 6c 65 equal(note.scale
19c0: 44 65 67 72 65 65 28 74 65 6f 72 69 61 2e 73 63 Degree(teoria.sc
19d0: 61 6c 65 28 27 63 27 2c 20 27 6d 69 6e 6f 72 27 ale('c', 'minor'
19e0: 29 29 2c 20 37 29 3b 0a 20 20 20 20 7d 2c 0a 20 )), 7);. },.
19f0: 20 20 20 0a 20 20 20 20 27 44 62 20 69 73 20 73 . 'Db is s
1a00: 63 61 6c 65 20 64 65 67 72 65 65 20 34 20 69 6e cale degree 4 in
1a10: 20 61 6e 20 41 62 20 6d 61 6a 6f 72 20 73 63 61 an Ab major sca
1a20: 6c 65 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 le': function()
1a30: 7b 0a 20 20 20 20 20 20 76 61 72 20 6e 6f 74 65 {. var note
1a40: 20 3d 20 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 = teoria.note('
1a50: 64 62 27 29 3b 0a 20 20 20 20 20 20 61 73 73 65 db');. asse
1a60: 72 74 2e 65 71 75 61 6c 28 6e 6f 74 65 2e 73 63 rt.equal(note.sc
1a70: 61 6c 65 44 65 67 72 65 65 28 74 65 6f 72 69 61 aleDegree(teoria
1a80: 2e 73 63 61 6c 65 28 27 61 62 27 2c 20 27 6d 61 .scale('ab', 'ma
1a90: 6a 6f 72 27 29 29 2c 20 34 29 3b 0a 20 20 20 20 jor')), 4);.
1aa0: 7d 2c 0a 0a 20 20 20 20 27 41 23 20 69 73 20 73 },.. 'A# is s
1ab0: 63 61 6c 65 20 64 65 67 72 65 65 20 30 20 69 6e cale degree 0 in
1ac0: 20 61 20 47 20 6d 69 6e 6f 72 20 73 63 61 6c 65 a G minor scale
1ad0: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a ': function() {.
1ae0: 20 20 20 20 20 20 76 61 72 20 6e 6f 74 65 20 3d var note =
1af0: 20 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 61 23 teoria.note('a#
1b00: 27 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 ');. assert
1b10: 2e 65 71 75 61 6c 28 6e 6f 74 65 2e 73 63 61 6c .equal(note.scal
1b20: 65 44 65 67 72 65 65 28 74 65 6f 72 69 61 2e 73 eDegree(teoria.s
1b30: 63 61 6c 65 28 27 67 27 2c 20 27 6d 69 6e 6f 72 cale('g', 'minor
1b40: 27 29 29 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 ')), 0);. }.
1b50: 20 7d 2c 0a 0a 20 20 27 45 6e 68 61 72 6d 6f 6e },.. 'Enharmon
1b60: 69 63 73 27 3a 20 7b 0a 20 20 20 20 27 63 20 69 ics': {. 'c i
1b70: 73 20 65 6e 68 61 72 6d 6f 6e 69 63 20 77 69 74 s enharmonic wit
1b80: 68 20 64 62 62 20 61 6e 64 20 62 23 27 3a 20 66 h dbb and b#': f
1b90: 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 unction() {.
1ba0: 20 20 61 73 73 65 72 74 2e 64 65 65 70 45 71 75 assert.deepEqu
1bb0: 61 6c 28 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 al(teoria.note('
1bc0: 63 34 27 29 2e 65 6e 68 61 72 6d 6f 6e 69 63 73 c4').enharmonics
1bd0: 28 29 2c 0a 20 20 20 20 20 20 20 20 5b 27 64 62 (),. ['db
1be0: 62 34 27 2c 20 27 62 23 33 27 5d 2e 6d 61 70 28 b4', 'b#3'].map(
1bf0: 74 65 6f 72 69 61 2e 6e 6f 74 65 29 29 3b 0a 20 teoria.note));.
1c00: 20 20 20 7d 2c 0a 0a 20 20 20 20 27 66 62 20 69 },.. 'fb i
1c10: 73 20 65 6e 68 61 72 6d 6f 6e 69 63 20 77 69 74 s enharmonic wit
1c20: 68 20 65 20 61 6e 64 20 64 78 27 3a 20 66 75 6e h e and dx': fun
1c30: 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 ction() {.
1c40: 61 73 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c assert.deepEqual
1c50: 28 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 66 62 (teoria.note('fb
1c60: 34 27 29 2e 65 6e 68 61 72 6d 6f 6e 69 63 73 28 4').enharmonics(
1c70: 29 2c 0a 20 20 20 20 20 20 20 20 5b 27 65 34 27 ),. ['e4'
1c80: 2c 20 27 64 78 34 27 5d 2e 6d 61 70 28 74 65 6f , 'dx4'].map(teo
1c90: 72 69 61 2e 6e 6f 74 65 29 29 3b 0a 20 20 20 20 ria.note));.
1ca0: 7d 2c 0a 0a 20 20 20 20 27 63 62 20 69 73 20 65 },.. 'cb is e
1cb0: 6e 68 61 72 6d 6f 6e 69 63 20 77 69 74 68 20 61 nharmonic with a
1cc0: 78 20 61 6e 64 20 62 27 3a 20 66 75 6e 63 74 69 x and b': functi
1cd0: 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 61 73 73 on() {. ass
1ce0: 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28 74 65 ert.deepEqual(te
1cf0: 6f 72 69 61 2e 6e 6f 74 65 28 27 63 62 34 27 29 oria.note('cb4')
1d00: 2e 65 6e 68 61 72 6d 6f 6e 69 63 73 28 29 2c 0a .enharmonics(),.
1d10: 20 20 20 20 20 20 20 20 5b 27 62 33 27 2c 20 27 ['b3', '
1d20: 61 78 33 27 5d 2e 6d 61 70 28 74 65 6f 72 69 61 ax3'].map(teoria
1d30: 2e 6e 6f 74 65 29 29 3b 0a 20 20 20 20 7d 0a 20 .note));. }.
1d40: 20 7d 2c 0a 0a 20 20 27 45 6e 68 61 72 6d 6f 6e },.. 'Enharmon
1d50: 69 63 73 20 77 69 74 68 20 6f 6e 6c 79 20 6f 6e ics with only on
1d60: 65 20 61 63 63 69 64 65 6e 74 61 6c 27 3a 20 7b e accidental': {
1d70: 0a 20 20 20 20 27 63 20 69 73 20 65 6e 68 61 72 . 'c is enhar
1d80: 6d 6f 6e 69 63 20 77 69 74 68 20 62 23 27 3a 20 monic with b#':
1d90: 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 function() {.
1da0: 20 20 20 61 73 73 65 72 74 2e 64 65 65 70 45 71 assert.deepEq
1db0: 75 61 6c 28 74 65 6f 72 69 61 2e 6e 6f 74 65 28 ual(teoria.note(
1dc0: 27 63 34 27 29 2e 65 6e 68 61 72 6d 6f 6e 69 63 'c4').enharmonic
1dd0: 73 28 74 72 75 65 29 2c 0a 20 20 20 20 20 20 20 s(true),.
1de0: 20 5b 27 62 23 33 27 5d 2e 6d 61 70 28 74 65 6f ['b#3'].map(teo
1df0: 72 69 61 2e 6e 6f 74 65 29 29 3b 0a 20 20 20 20 ria.note));.
1e00: 7d 2c 0a 0a 20 20 20 20 27 66 62 20 69 73 20 65 },.. 'fb is e
1e10: 6e 68 61 72 6d 6f 6e 69 63 20 77 69 74 68 20 65 nharmonic with e
1e20: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a ': function() {.
1e30: 20 20 20 20 20 20 61 73 73 65 72 74 2e 64 65 65 assert.dee
1e40: 70 45 71 75 61 6c 28 74 65 6f 72 69 61 2e 6e 6f pEqual(teoria.no
1e50: 74 65 28 27 66 62 34 27 29 2e 65 6e 68 61 72 6d te('fb4').enharm
1e60: 6f 6e 69 63 73 28 74 72 75 65 29 2c 0a 20 20 20 onics(true),.
1e70: 20 20 20 20 20 5b 27 65 34 27 5d 2e 6d 61 70 28 ['e4'].map(
1e80: 74 65 6f 72 69 61 2e 6e 6f 74 65 29 29 3b 0a 20 teoria.note));.
1e90: 20 20 20 7d 2c 0a 0a 20 20 20 20 27 63 62 20 69 },.. 'cb i
1ea0: 73 20 65 6e 68 61 72 6d 6f 6e 69 63 20 77 69 74 s enharmonic wit
1eb0: 68 20 62 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 h b': function()
1ec0: 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e {. assert.
1ed0: 64 65 65 70 45 71 75 61 6c 28 74 65 6f 72 69 61 deepEqual(teoria
1ee0: 2e 6e 6f 74 65 28 27 63 62 34 27 29 2e 65 6e 68 .note('cb4').enh
1ef0: 61 72 6d 6f 6e 69 63 73 28 74 72 75 65 29 2c 0a armonics(true),.
1f00: 20 20 20 20 20 20 20 20 5b 27 62 33 27 5d 2e 6d ['b3'].m
1f10: 61 70 28 74 65 6f 72 69 61 2e 6e 6f 74 65 29 29 ap(teoria.note))
1f20: 3b 0a 20 20 20 20 7d 0a 20 20 7d 2c 0a 0a 20 20 ;. }. },..
1f30: 27 63 6f 70 79 20 64 75 72 61 74 69 6f 6e 20 6f 'copy duration o
1f40: 6e 20 69 6e 74 65 72 76 61 6c 27 3a 20 7b 0a 20 n interval': {.
1f50: 20 20 20 27 73 74 61 79 20 77 68 6f 6c 65 20 6e 'stay whole n
1f60: 6f 74 65 20 6f 6e 20 63 61 6c 6c 20 69 6e 74 65 ote on call inte
1f70: 72 76 61 6c 27 3a 20 66 75 6e 63 74 69 6f 6e 28 rval': function(
1f80: 29 20 7b 0a 20 20 20 20 20 20 76 61 72 20 6e 6f ) {. var no
1f90: 74 65 20 3d 20 74 65 6f 72 69 61 2e 6e 6f 74 65 te = teoria.note
1fa0: 28 27 61 23 27 2c 20 7b 20 64 75 72 61 74 69 6f ('a#', { duratio
1fb0: 6e 3a 20 31 20 7d 29 3b 0a 20 20 20 20 20 20 61 n: 1 });. a
1fc0: 73 73 65 72 74 2e 65 71 75 61 6c 28 6e 6f 74 65 ssert.equal(note
1fd0: 2e 64 75 72 61 74 69 6f 6e 2e 76 61 6c 75 65 2c .duration.value,
1fe0: 20 6e 6f 74 65 2e 69 6e 74 65 72 76 61 6c 28 27 note.interval('
1ff0: 50 35 27 29 2e 64 75 72 61 74 69 6f 6e 2e 76 61 P5').duration.va
2000: 6c 75 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a lue);. }. }.
2010: 7d 29 2e 65 78 70 6f 72 74 28 6d 6f 64 75 6c 65 }).export(module
2020: 29 3b 0a );.