⌈⌋ ⎇ branch:  Bitrhythm


Hex Artifact Content

Artifact 33d19bafe2391d02181f4681918af14c5bc88fdb73a1ac7d39e2846d769cb88b:


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 53 6f 6c 66 65 67 65  escribe('Solfege
0070: 27 29 2e 61 64 64 42 61 74 63 68 28 7b 0a 20 20  ').addBatch({.  
0080: 27 43 20 69 6e 20 43 20 6d 69 6e 6f 72 27 3a 20  'C in C minor': 
0090: 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20  function() {.   
00a0: 20 76 61 72 20 6e 6f 74 65 20 3d 20 74 65 6f 72   var note = teor
00b0: 69 61 2e 6e 6f 74 65 28 27 63 27 29 3b 0a 20 20  ia.note('c');.  
00c0: 20 20 61 73 73 65 72 74 2e 65 71 75 61 6c 28 6e    assert.equal(n
00d0: 6f 74 65 2e 73 6f 6c 66 65 67 65 28 74 65 6f 72  ote.solfege(teor
00e0: 69 61 2e 73 63 61 6c 65 28 6e 6f 74 65 2c 20 27  ia.scale(note, '
00f0: 6d 69 6e 6f 72 27 29 29 2c 20 27 64 6f 27 29 3b  minor')), 'do');
0100: 0a 20 20 7d 2c 0a 0a 20 20 27 41 20 69 6e 20 64  .  },..  'A in d
0110: 20 6d 61 6a 6f 72 27 3a 20 66 75 6e 63 74 69 6f   major': functio
0120: 6e 28 29 20 7b 0a 20 20 20 20 76 61 72 20 6e 6f  n() {.    var no
0130: 74 65 20 3d 20 74 65 6f 72 69 61 2e 6e 6f 74 65  te = teoria.note
0140: 28 27 61 27 29 3b 0a 20 20 20 20 76 61 72 20 74  ('a');.    var t
0150: 6f 6e 69 63 20 3d 20 74 65 6f 72 69 61 2e 6e 6f  onic = teoria.no
0160: 74 65 28 27 64 27 29 3b 0a 20 20 20 20 61 73 73  te('d');.    ass
0170: 65 72 74 2e 65 71 75 61 6c 28 6e 6f 74 65 2e 73  ert.equal(note.s
0180: 6f 6c 66 65 67 65 28 74 65 6f 72 69 61 2e 73 63  olfege(teoria.sc
0190: 61 6c 65 28 74 6f 6e 69 63 2c 20 27 6d 61 6a 6f  ale(tonic, 'majo
01a0: 72 27 29 29 2c 20 27 73 6f 27 29 3b 0a 20 20 7d  r')), 'so');.  }
01b0: 2c 0a 0a 20 20 27 46 23 20 69 6e 20 42 20 6d 61  ,..  'F# in B ma
01c0: 6a 6f 72 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29  jor': function()
01d0: 20 7b 0a 20 20 20 20 76 61 72 20 6e 6f 74 65 20   {.    var note 
01e0: 3d 20 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 66  = teoria.note('f
01f0: 23 27 29 3b 0a 20 20 20 20 76 61 72 20 74 6f 6e  #');.    var ton
0200: 69 63 20 3d 20 74 65 6f 72 69 61 2e 6e 6f 74 65  ic = teoria.note
0210: 28 27 42 27 29 3b 0a 20 20 20 20 61 73 73 65 72  ('B');.    asser
0220: 74 2e 65 71 75 61 6c 28 6e 6f 74 65 2e 73 6f 6c  t.equal(note.sol
0230: 66 65 67 65 28 74 65 6f 72 69 61 2e 73 63 61 6c  fege(teoria.scal
0240: 65 28 74 6f 6e 69 63 2c 20 27 6d 61 6a 6f 72 27  e(tonic, 'major'
0250: 29 29 2c 20 27 73 6f 27 29 3b 0a 20 20 7d 2c 0a  )), 'so');.  },.
0260: 0a 20 20 27 43 34 20 69 6e 20 43 34 20 6d 69 6e  .  'C4 in C4 min
0270: 6f 72 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20  or': function() 
0280: 7b 0a 20 20 20 20 76 61 72 20 6e 6f 74 65 20 3d  {.    var note =
0290: 20 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 63 34   teoria.note('c4
02a0: 27 29 3b 0a 20 20 20 20 76 61 72 20 73 63 61 6c  ');.    var scal
02b0: 65 20 3d 20 74 65 6f 72 69 61 2e 73 63 61 6c 65  e = teoria.scale
02c0: 28 6e 6f 74 65 2c 20 27 6d 69 6e 6f 72 27 29 3b  (note, 'minor');
02d0: 0a 20 20 20 20 61 73 73 65 72 74 2e 65 71 75 61  .    assert.equa
02e0: 6c 28 6e 6f 74 65 2e 73 6f 6c 66 65 67 65 28 73  l(note.solfege(s
02f0: 63 61 6c 65 2c 20 74 72 75 65 29 2c 20 27 64 6f  cale, true), 'do
0300: 27 29 3b 0a 20 20 7d 2c 0a 0a 20 20 27 41 33 20  ');.  },..  'A3 
0310: 69 6e 20 44 34 20 6d 61 6a 6f 72 27 3a 20 66 75  in D4 major': fu
0320: 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 76  nction() {.    v
0330: 61 72 20 6e 6f 74 65 20 3d 20 74 65 6f 72 69 61  ar note = teoria
0340: 2e 6e 6f 74 65 28 27 61 33 27 29 3b 0a 20 20 20  .note('a3');.   
0350: 20 76 61 72 20 73 63 61 6c 65 20 3d 20 74 65 6f   var scale = teo
0360: 72 69 61 2e 73 63 61 6c 65 28 27 64 34 27 2c 20  ria.scale('d4', 
0370: 27 6d 61 6a 6f 72 27 29 3b 0a 20 20 20 20 61 73  'major');.    as
0380: 73 65 72 74 2e 65 71 75 61 6c 28 6e 6f 74 65 2e  sert.equal(note.
0390: 73 6f 6c 66 65 67 65 28 73 63 61 6c 65 2c 20 74  solfege(scale, t
03a0: 72 75 65 29 2c 20 27 73 6f 2c 27 29 3b 0a 20 20  rue), 'so,');.  
03b0: 7d 2c 0a 0a 20 20 27 46 23 36 20 69 6e 20 42 35  },..  'F#6 in B5
03c0: 20 6d 61 6a 6f 72 27 3a 20 66 75 6e 63 74 69 6f   major': functio
03d0: 6e 28 29 20 7b 0a 20 20 20 20 76 61 72 20 6e 6f  n() {.    var no
03e0: 74 65 20 3d 20 74 65 6f 72 69 61 2e 6e 6f 74 65  te = teoria.note
03f0: 28 27 66 23 36 27 29 3b 0a 20 20 20 20 76 61 72  ('f#6');.    var
0400: 20 73 63 61 6c 65 20 3d 20 74 65 6f 72 69 61 2e   scale = teoria.
0410: 73 63 61 6c 65 28 27 62 35 27 2c 20 27 6d 61 6a  scale('b5', 'maj
0420: 6f 72 27 29 3b 0a 20 20 20 20 61 73 73 65 72 74  or');.    assert
0430: 2e 65 71 75 61 6c 28 6e 6f 74 65 2e 73 6f 6c 66  .equal(note.solf
0440: 65 67 65 28 73 63 61 6c 65 2c 20 74 72 75 65 29  ege(scale, true)
0450: 2c 20 27 73 6f 27 29 3b 0a 20 20 7d 2c 0a 0a 20  , 'so');.  },.. 
0460: 20 27 46 32 20 69 6e 20 45 36 20 70 68 72 79 67   'F2 in E6 phryg
0470: 69 61 6e 27 3a 20 66 75 6e 63 74 69 6f 6e 28 29  ian': function()
0480: 20 7b 0a 20 20 20 20 76 61 72 20 6e 6f 74 65 20   {.    var note 
0490: 3d 20 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 66  = teoria.note('f
04a0: 32 27 29 3b 0a 20 20 20 20 76 61 72 20 73 63 61  2');.    var sca
04b0: 6c 65 20 3d 20 74 65 6f 72 69 61 2e 73 63 61 6c  le = teoria.scal
04c0: 65 28 27 65 36 27 2c 20 27 70 68 72 79 67 69 61  e('e6', 'phrygia
04d0: 6e 27 29 3b 0a 20 20 20 20 61 73 73 65 72 74 2e  n');.    assert.
04e0: 65 71 75 61 6c 28 6e 6f 74 65 2e 73 6f 6c 66 65  equal(note.solfe
04f0: 67 65 28 73 63 61 6c 65 2c 20 74 72 75 65 29 2c  ge(scale, true),
0500: 20 27 72 61 2c 2c 2c 2c 27 29 3b 0a 20 20 7d 2c   'ra,,,,');.  },
0510: 0a 0a 20 20 27 45 62 31 30 20 69 6e 20 45 38 20  ..  'Eb10 in E8 
0520: 64 6f 72 69 61 6e 27 3a 20 66 75 6e 63 74 69 6f  dorian': functio
0530: 6e 28 29 20 7b 0a 20 20 20 20 76 61 72 20 6e 6f  n() {.    var no
0540: 74 65 20 3d 20 74 65 6f 72 69 61 2e 6e 6f 74 65  te = teoria.note
0550: 28 27 65 62 31 30 27 29 3b 0a 20 20 20 20 76 61  ('eb10');.    va
0560: 72 20 73 63 61 6c 65 20 3d 20 74 65 6f 72 69 61  r scale = teoria
0570: 2e 73 63 61 6c 65 28 27 65 38 27 2c 20 27 64 6f  .scale('e8', 'do
0580: 72 69 61 6e 27 29 3b 0a 20 20 20 20 61 73 73 65  rian');.    asse
0590: 72 74 2e 65 71 75 61 6c 28 6e 6f 74 65 2e 73 6f  rt.equal(note.so
05a0: 6c 66 65 67 65 28 73 63 61 6c 65 2c 20 74 72 75  lfege(scale, tru
05b0: 65 29 2c 20 27 64 65 5c 27 5c 27 27 29 3b 0a 20  e), 'de\'\'');. 
05c0: 20 7d 2c 0a 0a 20 20 27 41 23 36 20 69 6e 20 42   },..  'A#6 in B
05d0: 62 34 20 6c 6f 63 72 69 61 6e 27 3a 20 66 75 6e  b4 locrian': fun
05e0: 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 76 61  ction() {.    va
05f0: 72 20 6e 6f 74 65 20 3d 20 74 65 6f 72 69 61 2e  r note = teoria.
0600: 6e 6f 74 65 28 27 41 23 36 27 29 3b 0a 20 20 20  note('A#6');.   
0610: 20 76 61 72 20 73 63 61 6c 65 20 3d 20 74 65 6f   var scale = teo
0620: 72 69 61 2e 73 63 61 6c 65 28 27 42 62 34 27 2c  ria.scale('Bb4',
0630: 20 27 6c 6f 63 72 69 61 6e 27 29 3b 0a 20 20 20   'locrian');.   
0640: 20 61 73 73 65 72 74 2e 65 71 75 61 6c 28 6e 6f   assert.equal(no
0650: 74 65 2e 73 6f 6c 66 65 67 65 28 73 63 61 6c 65  te.solfege(scale
0660: 2c 20 74 72 75 65 29 2c 20 27 74 61 69 5c 27 27  , true), 'tai\''
0670: 29 3b 0a 20 20 7d 2c 0a 0a 20 20 27 45 32 20 69  );.  },..  'E2 i
0680: 6e 20 43 33 20 6d 61 6a 6f 72 27 3a 20 66 75 6e  n C3 major': fun
0690: 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 76 61  ction() {.    va
06a0: 72 20 6e 6f 74 65 20 3d 20 74 65 6f 72 69 61 2e  r note = teoria.
06b0: 6e 6f 74 65 28 27 65 32 27 29 3b 0a 20 20 20 20  note('e2');.    
06c0: 76 61 72 20 73 63 61 6c 65 20 3d 20 74 65 6f 72  var scale = teor
06d0: 69 61 2e 73 63 61 6c 65 28 27 63 33 27 2c 20 27  ia.scale('c3', '
06e0: 6d 61 6a 6f 72 27 29 3b 0a 20 20 20 20 61 73 73  major');.    ass
06f0: 65 72 74 2e 65 71 75 61 6c 28 6e 6f 74 65 2e 73  ert.equal(note.s
0700: 6f 6c 66 65 67 65 28 73 63 61 6c 65 2c 20 74 72  olfege(scale, tr
0710: 75 65 29 2c 20 27 6d 69 2c 27 29 3b 0a 20 20 7d  ue), 'mi,');.  }
0720: 0a 7d 29 2e 65 78 70 6f 72 74 28 6d 6f 64 75 6c  .}).export(modul
0730: 65 29 3b 0a                                      e);.