⌈⌋ ⎇ branch:  Bitrhythm


Hex Artifact Content

Artifact aeb2c6b3604f947580495cbd661ff1bd9cfd90096e8b41dbf58d7102cc6f93c4:


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 63 61 6c 65 73 27  escribe('Scales'
0070: 29 2e 61 64 64 42 61 74 63 68 28 7b 0a 20 20 27  ).addBatch({.  '
0080: 41 62 32 27 3a 20 7b 0a 20 20 20 20 74 6f 70 69  Ab2': {.    topi
0090: 63 3a 20 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a  c: function() {.
00a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 65 6f        return teo
00b0: 72 69 61 2e 6e 6f 74 65 28 27 41 62 32 27 29 3b  ria.note('Ab2');
00c0: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 42 6c  .    },..    'Bl
00d0: 75 65 73 27 3a 20 66 75 6e 63 74 69 6f 6e 28 6e  ues': function(n
00e0: 6f 74 65 29 20 7b 0a 20 20 20 20 20 20 61 73 73  ote) {.      ass
00f0: 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28 74 65  ert.deepEqual(te
0100: 6f 72 69 61 2e 6e 6f 74 65 28 27 67 23 27 29 2e  oria.note('g#').
0110: 73 63 61 6c 65 28 27 62 6c 75 65 73 27 29 2e 73  scale('blues').s
0120: 69 6d 70 6c 65 28 29 2c 0a 20 20 20 20 20 20 20  imple(),.       
0130: 20 20 20 5b 27 67 23 27 2c 20 27 62 27 2c 20 27     ['g#', 'b', '
0140: 63 23 27 2c 20 27 64 27 2c 20 27 64 23 27 2c 20  c#', 'd', 'd#', 
0150: 27 66 23 27 5d 29 3b 0a 20 20 20 20 7d 2c 0a 0a  'f#']);.    },..
0160: 20 20 20 20 27 49 6f 6e 69 61 6e 2f 4d 61 6a 6f      'Ionian/Majo
0170: 72 27 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74  r': function(not
0180: 65 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72  e) {.      asser
0190: 74 2e 64 65 65 70 45 71 75 61 6c 28 6e 6f 74 65  t.deepEqual(note
01a0: 2e 73 63 61 6c 65 28 27 69 6f 6e 69 61 6e 27 29  .scale('ionian')
01b0: 2e 73 69 6d 70 6c 65 28 29 2c 0a 20 20 20 20 20  .simple(),.     
01c0: 20 20 20 20 20 5b 27 61 62 27 2c 20 27 62 62 27       ['ab', 'bb'
01d0: 2c 20 27 63 27 2c 20 27 64 62 27 2c 20 27 65 62  , 'c', 'db', 'eb
01e0: 27 2c 20 27 66 27 2c 20 27 67 27 5d 29 3b 0a 20  ', 'f', 'g']);. 
01f0: 20 20 20 7d 2c 0a 0a 20 20 20 20 27 44 6f 72 69     },..    'Dori
0200: 61 6e 27 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f  an': function(no
0210: 74 65 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65  te) {.      asse
0220: 72 74 2e 64 65 65 70 45 71 75 61 6c 28 6e 6f 74  rt.deepEqual(not
0230: 65 2e 73 63 61 6c 65 28 27 64 6f 72 69 61 6e 27  e.scale('dorian'
0240: 29 2e 73 69 6d 70 6c 65 28 29 2c 0a 20 20 20 20  ).simple(),.    
0250: 20 20 20 20 20 20 5b 27 61 62 27 2c 20 27 62 62        ['ab', 'bb
0260: 27 2c 20 27 63 62 27 2c 20 27 64 62 27 2c 20 27  ', 'cb', 'db', '
0270: 65 62 27 2c 20 27 66 27 2c 20 27 67 62 27 5d 29  eb', 'f', 'gb'])
0280: 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 50  ;.    },..    'P
0290: 68 72 79 67 69 61 6e 27 3a 20 66 75 6e 63 74 69  hrygian': functi
02a0: 6f 6e 28 6e 6f 74 65 29 20 7b 0a 20 20 20 20 20  on(note) {.     
02b0: 20 61 73 73 65 72 74 2e 64 65 65 70 45 71 75 61   assert.deepEqua
02c0: 6c 28 6e 6f 74 65 2e 73 63 61 6c 65 28 27 70 68  l(note.scale('ph
02d0: 72 79 67 69 61 6e 27 29 2e 73 69 6d 70 6c 65 28  rygian').simple(
02e0: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 5b 22 61  ),.          ["a
02f0: 62 22 2c 20 22 62 62 62 22 2c 20 22 63 62 22 2c  b", "bbb", "cb",
0300: 20 22 64 62 22 2c 20 22 65 62 22 2c 20 22 66 62   "db", "eb", "fb
0310: 22 2c 20 22 67 62 22 5d 29 3b 0a 20 20 20 20 7d  ", "gb"]);.    }
0320: 2c 0a 0a 20 20 20 20 27 4c 79 64 69 61 6e 27 3a  ,..    'Lydian':
0330: 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65 29 20   function(note) 
0340: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 64  {.      assert.d
0350: 65 65 70 45 71 75 61 6c 28 6e 6f 74 65 2e 73 63  eepEqual(note.sc
0360: 61 6c 65 28 27 6c 79 64 69 61 6e 27 29 2e 73 69  ale('lydian').si
0370: 6d 70 6c 65 28 29 2c 0a 20 20 20 20 20 20 20 20  mple(),.        
0380: 20 20 5b 22 61 62 22 2c 20 22 62 62 22 2c 20 22    ["ab", "bb", "
0390: 63 22 2c 20 22 64 22 2c 20 22 65 62 22 2c 20 22  c", "d", "eb", "
03a0: 66 22 2c 20 22 67 22 5d 29 3b 0a 20 20 20 20 7d  f", "g"]);.    }
03b0: 2c 0a 0a 20 20 20 20 27 4d 69 78 6f 6c 79 64 69  ,..    'Mixolydi
03c0: 61 6e 27 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f  an': function(no
03d0: 74 65 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65  te) {.      asse
03e0: 72 74 2e 64 65 65 70 45 71 75 61 6c 28 6e 6f 74  rt.deepEqual(not
03f0: 65 2e 73 63 61 6c 65 28 27 6d 69 78 6f 6c 79 64  e.scale('mixolyd
0400: 69 61 6e 27 29 2e 73 69 6d 70 6c 65 28 29 2c 0a  ian').simple(),.
0410: 20 20 20 20 20 20 20 20 20 20 5b 22 61 62 22 2c            ["ab",
0420: 20 22 62 62 22 2c 20 22 63 22 2c 20 22 64 62 22   "bb", "c", "db"
0430: 2c 20 22 65 62 22 2c 20 22 66 22 2c 20 22 67 62  , "eb", "f", "gb
0440: 22 5d 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20  "]);.    },..   
0450: 20 27 41 65 6f 6c 69 61 6e 2f 4d 69 6e 6f 72 27   'Aeolian/Minor'
0460: 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65 29  : function(note)
0470: 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e   {.      assert.
0480: 64 65 65 70 45 71 75 61 6c 28 6e 6f 74 65 2e 73  deepEqual(note.s
0490: 63 61 6c 65 28 27 61 65 6f 6c 69 61 6e 27 29 2e  cale('aeolian').
04a0: 73 69 6d 70 6c 65 28 29 2c 0a 20 20 20 20 20 20  simple(),.      
04b0: 20 20 20 20 5b 22 61 62 22 2c 20 22 62 62 22 2c      ["ab", "bb",
04c0: 20 22 63 62 22 2c 20 22 64 62 22 2c 20 22 65 62   "cb", "db", "eb
04d0: 22 2c 20 22 66 62 22 2c 20 22 67 62 22 5d 29 3b  ", "fb", "gb"]);
04e0: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 4c 6f  .    },..    'Lo
04f0: 63 72 69 61 6e 27 3a 20 66 75 6e 63 74 69 6f 6e  crian': function
0500: 28 6e 6f 74 65 29 20 7b 0a 20 20 20 20 20 20 61  (note) {.      a
0510: 73 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28  ssert.deepEqual(
0520: 6e 6f 74 65 2e 73 63 61 6c 65 28 27 6c 6f 63 72  note.scale('locr
0530: 69 61 6e 27 29 2e 73 69 6d 70 6c 65 28 29 2c 0a  ian').simple(),.
0540: 20 20 20 20 20 20 20 20 20 20 5b 22 61 62 22 2c            ["ab",
0550: 20 22 62 62 62 22 2c 20 22 63 62 22 2c 20 22 64   "bbb", "cb", "d
0560: 62 22 2c 20 22 65 62 62 22 2c 20 22 66 62 22 2c  b", "ebb", "fb",
0570: 20 22 67 62 22 5d 29 3b 0a 20 20 20 20 7d 2c 0a   "gb"]);.    },.
0580: 0a 20 20 20 20 27 4d 61 6a 6f 72 20 50 65 6e 74  .    'Major Pent
0590: 61 74 6f 6e 69 63 27 3a 20 66 75 6e 63 74 69 6f  atonic': functio
05a0: 6e 28 6e 6f 74 65 29 20 7b 0a 20 20 20 20 20 20  n(note) {.      
05b0: 61 73 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c  assert.deepEqual
05c0: 28 6e 6f 74 65 2e 73 63 61 6c 65 28 27 6d 61 6a  (note.scale('maj
05d0: 6f 72 70 65 6e 74 61 74 6f 6e 69 63 27 29 2e 73  orpentatonic').s
05e0: 69 6d 70 6c 65 28 29 2c 0a 20 20 20 20 20 20 20  imple(),.       
05f0: 20 20 20 5b 22 61 62 22 2c 20 22 62 62 22 2c 20     ["ab", "bb", 
0600: 22 63 22 2c 20 22 65 62 22 2c 20 22 66 22 5d 29  "c", "eb", "f"])
0610: 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 4d  ;.    },..    'M
0620: 69 6e 6f 72 20 50 65 6e 74 61 74 6f 6e 69 63 27  inor Pentatonic'
0630: 3a 20 66 75 6e 63 74 69 6f 6e 28 6e 6f 74 65 29  : function(note)
0640: 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e   {.      assert.
0650: 64 65 65 70 45 71 75 61 6c 28 6e 6f 74 65 2e 73  deepEqual(note.s
0660: 63 61 6c 65 28 27 6d 69 6e 6f 72 70 65 6e 74 61  cale('minorpenta
0670: 74 6f 6e 69 63 27 29 2e 73 69 6d 70 6c 65 28 29  tonic').simple()
0680: 2c 0a 20 20 20 20 20 20 20 20 20 20 5b 22 61 62  ,.          ["ab
0690: 22 2c 20 22 63 62 22 2c 20 22 64 62 22 2c 20 22  ", "cb", "db", "
06a0: 65 62 22 2c 20 22 67 62 22 5d 29 3b 0a 20 20 20  eb", "gb"]);.   
06b0: 20 7d 2c 0a 0a 20 20 20 20 27 43 68 72 6f 6d 61   },..    'Chroma
06c0: 74 69 63 27 3a 20 66 75 6e 63 74 69 6f 6e 28 6e  tic': function(n
06d0: 6f 74 65 29 20 7b 0a 20 20 20 20 20 20 61 73 73  ote) {.      ass
06e0: 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28 6e 6f  ert.deepEqual(no
06f0: 74 65 2e 73 63 61 6c 65 28 27 63 68 72 6f 6d 61  te.scale('chroma
0700: 74 69 63 27 29 2e 73 69 6d 70 6c 65 28 29 2c 0a  tic').simple(),.
0710: 20 20 20 20 20 20 20 20 20 20 5b 22 61 62 22 2c            ["ab",
0720: 20 22 62 62 62 22 2c 20 22 62 62 22 2c 20 22 63   "bbb", "bb", "c
0730: 62 22 2c 20 22 63 22 2c 20 22 64 62 22 2c 0a 20  b", "c", "db",. 
0740: 20 20 20 20 20 20 20 20 20 20 22 64 22 2c 20 22            "d", "
0750: 65 62 22 2c 20 22 66 62 22 2c 20 22 66 22 2c 20  eb", "fb", "f", 
0760: 22 67 62 22 2c 20 22 67 22 5d 29 3b 0a 20 20 20  "gb", "g"]);.   
0770: 20 7d 2c 0a 0a 20 20 20 20 27 57 68 6f 6c 65 20   },..    'Whole 
0780: 54 6f 6e 65 27 3a 20 66 75 6e 63 74 69 6f 6e 28  Tone': function(
0790: 6e 6f 74 65 29 20 7b 0a 20 20 20 20 20 20 61 73  note) {.      as
07a0: 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28 74  sert.deepEqual(t
07b0: 65 6f 72 69 61 2e 6e 6f 74 65 28 27 63 27 29 2e  eoria.note('c').
07c0: 73 63 61 6c 65 28 27 77 68 6f 6c 65 74 6f 6e 65  scale('wholetone
07d0: 27 29 2e 73 69 6d 70 6c 65 28 29 2c 0a 20 20 20  ').simple(),.   
07e0: 20 20 20 20 20 5b 22 63 22 2c 20 22 64 22 2c 20       ["c", "d", 
07f0: 22 65 22 2c 20 22 66 23 22 2c 20 22 67 23 22 2c  "e", "f#", "g#",
0800: 20 22 61 23 22 5d 29 3b 0a 20 20 20 20 7d 0a 20   "a#"]);.    }. 
0810: 20 7d 2c 0a 0a 20 20 27 49 73 20 74 68 65 20 23   },..  'Is the #
0820: 67 65 74 28 29 20 6d 65 74 68 6f 64 20 6f 63 74  get() method oct
0830: 61 76 65 2d 72 65 6c 61 74 69 76 65 20 28 70 65  ave-relative (pe
0840: 6e 74 61 74 6f 6e 69 63 29 3f 27 3a 20 7b 0a 20  ntatonic)?': {. 
0850: 20 20 20 74 6f 70 69 63 3a 20 66 75 6e 63 74 69     topic: functi
0860: 6f 6e 28 29 7b 0a 20 20 20 20 20 20 72 65 74 75  on(){.      retu
0870: 72 6e 20 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27  rn teoria.note('
0880: 42 62 33 27 29 2e 73 63 61 6c 65 28 27 6d 61 6a  Bb3').scale('maj
0890: 6f 72 70 65 6e 74 61 74 6f 6e 69 63 27 29 3b 0a  orpentatonic');.
08a0: 20 20 20 20 7d 2c 0a 20 20 20 20 0a 20 20 20 20      },.    .    
08b0: 27 47 65 74 73 20 6e 6f 74 65 73 20 77 2f 69 6e  'Gets notes w/in
08c0: 20 6f 63 74 61 76 65 27 3a 20 66 75 6e 63 74 69   octave': functi
08d0: 6f 6e 28 74 6f 70 69 63 29 7b 0a 20 20 20 20 20  on(topic){.     
08e0: 20 61 73 73 65 72 74 2e 64 65 65 70 45 71 75 61   assert.deepEqua
08f0: 6c 28 74 6f 70 69 63 2e 67 65 74 28 33 29 2c 20  l(topic.get(3), 
0900: 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 44 34 27  teoria.note('D4'
0910: 29 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20  ));.    },..    
0920: 27 47 65 74 73 20 6e 6f 74 65 73 20 61 62 6f 76  'Gets notes abov
0930: 65 20 6f 63 74 61 76 65 27 3a 20 66 75 6e 63 74  e octave': funct
0940: 69 6f 6e 28 74 6f 70 69 63 29 7b 0a 20 20 20 20  ion(topic){.    
0950: 20 20 61 73 73 65 72 74 2e 64 65 65 70 45 71 75    assert.deepEqu
0960: 61 6c 28 74 6f 70 69 63 2e 67 65 74 28 31 32 29  al(topic.get(12)
0970: 2c 20 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 43  , teoria.note('C
0980: 36 27 29 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20  6'));.    },..  
0990: 20 20 27 47 65 74 73 20 6e 6f 74 65 73 20 62 65    'Gets notes be
09a0: 6c 6f 77 20 6f 63 74 61 76 65 27 3a 20 66 75 6e  low octave': fun
09b0: 63 74 69 6f 6e 28 74 6f 70 69 63 29 7b 0a 20 20  ction(topic){.  
09c0: 20 20 20 20 61 73 73 65 72 74 2e 64 65 65 70 45      assert.deepE
09d0: 71 75 61 6c 28 74 6f 70 69 63 2e 67 65 74 28 2d  qual(topic.get(-
09e0: 31 32 29 2c 20 74 65 6f 72 69 61 2e 6e 6f 74 65  12), teoria.note
09f0: 28 27 44 31 27 29 29 3b 0a 20 20 20 20 7d 2c 0a  ('D1'));.    },.
0a00: 20 20 7d 2c 0a 0a 20 20 27 49 73 20 74 68 65 20    },..  'Is the 
0a10: 23 67 65 74 28 29 20 6d 65 74 68 6f 64 20 6f 63  #get() method oc
0a20: 74 61 76 65 2d 72 65 6c 61 74 69 76 65 20 28 64  tave-relative (d
0a30: 69 61 74 6f 6e 69 63 29 27 3a 20 7b 0a 20 20 20  iatonic)': {.   
0a40: 20 74 6f 70 69 63 3a 20 66 75 6e 63 74 69 6f 6e   topic: function
0a50: 28 29 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  () {.      retur
0a60: 6e 20 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 41  n teoria.note('A
0a70: 34 27 29 2e 73 63 61 6c 65 28 27 6d 61 6a 6f 72  4').scale('major
0a80: 27 29 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20  ');.    },..    
0a90: 27 30 20 69 73 20 6f 6e 65 20 6e 6f 74 65 20 64  '0 is one note d
0aa0: 6f 77 6e 27 3a 20 66 75 6e 63 74 69 6f 6e 28 74  own': function(t
0ab0: 6f 70 69 63 29 20 7b 0a 20 20 20 20 20 20 61 73  opic) {.      as
0ac0: 73 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28 74  sert.deepEqual(t
0ad0: 6f 70 69 63 2e 67 65 74 28 30 29 2c 20 74 65 6f  opic.get(0), teo
0ae0: 72 69 61 2e 6e 6f 74 65 28 27 47 23 34 27 29 29  ria.note('G#4'))
0af0: 3b 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 37  ;.    },..    '7
0b00: 20 69 73 20 6f 6e 65 20 73 65 76 65 6e 74 68 20   is one seventh 
0b10: 75 70 27 3a 20 66 75 6e 63 74 69 6f 6e 28 74 6f  up': function(to
0b20: 70 69 63 29 20 7b 0a 20 20 20 20 20 20 61 73 73  pic) {.      ass
0b30: 65 72 74 2e 64 65 65 70 45 71 75 61 6c 28 74 6f  ert.deepEqual(to
0b40: 70 69 63 2e 67 65 74 28 37 29 2c 20 74 65 6f 72  pic.get(7), teor
0b50: 69 61 2e 6e 6f 74 65 28 27 47 23 35 27 29 29 3b  ia.note('G#5'));
0b60: 0a 20 20 20 20 7d 2c 0a 0a 20 20 20 20 27 38 20  .    },..    '8 
0b70: 69 73 20 6f 6e 65 20 6f 63 74 61 76 65 20 75 70  is one octave up
0b80: 27 3a 20 66 75 6e 63 74 69 6f 6e 28 74 6f 70 69  ': function(topi
0b90: 63 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72  c) {.      asser
0ba0: 74 2e 64 65 65 70 45 71 75 61 6c 28 74 6f 70 69  t.deepEqual(topi
0bb0: 63 2e 67 65 74 28 38 29 2c 20 74 65 6f 72 69 61  c.get(8), teoria
0bc0: 2e 6e 6f 74 65 28 27 41 35 27 29 29 3b 0a 20 20  .note('A5'));.  
0bd0: 20 20 7d 2c 0a 0a 20 20 20 20 27 39 20 69 73 20    },..    '9 is 
0be0: 6f 6e 65 20 6e 69 6e 74 68 20 75 70 27 3a 20 66  one ninth up': f
0bf0: 75 6e 63 74 69 6f 6e 28 74 6f 70 69 63 29 20 7b  unction(topic) {
0c00: 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 64 65  .      assert.de
0c10: 65 70 45 71 75 61 6c 28 74 6f 70 69 63 2e 67 65  epEqual(topic.ge
0c20: 74 28 39 29 2c 20 74 65 6f 72 69 61 2e 6e 6f 74  t(9), teoria.not
0c30: 65 28 27 42 35 27 29 29 3b 0a 20 20 20 20 7d 2c  e('B5'));.    },
0c40: 0a 0a 20 20 20 20 27 2d 35 20 69 73 20 6f 6e 65  ..    '-5 is one
0c50: 20 73 65 76 65 6e 74 68 20 64 6f 77 6e 27 3a 20   seventh down': 
0c60: 66 75 6e 63 74 69 6f 6e 28 74 6f 70 69 63 29 20  function(topic) 
0c70: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e 64  {.      assert.d
0c80: 65 65 70 45 71 75 61 6c 28 74 6f 70 69 63 2e 67  eepEqual(topic.g
0c90: 65 74 28 2d 35 29 2c 20 74 65 6f 72 69 61 2e 6e  et(-5), teoria.n
0ca0: 6f 74 65 28 27 42 33 27 29 29 3b 0a 20 20 20 20  ote('B3'));.    
0cb0: 7d 2c 0a 0a 20 20 20 20 27 2d 36 20 69 73 20 6f  },..    '-6 is o
0cc0: 6e 65 20 6f 63 74 61 76 65 20 64 6f 77 6e 27 3a  ne octave down':
0cd0: 20 66 75 6e 63 74 69 6f 6e 28 74 6f 70 69 63 29   function(topic)
0ce0: 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 2e   {.      assert.
0cf0: 64 65 65 70 45 71 75 61 6c 28 74 6f 70 69 63 2e  deepEqual(topic.
0d00: 67 65 74 28 2d 36 29 2c 20 74 65 6f 72 69 61 2e  get(-6), teoria.
0d10: 6e 6f 74 65 28 27 41 33 27 29 29 3b 0a 20 20 20  note('A3'));.   
0d20: 20 7d 2c 0a 0a 20 20 20 20 27 2d 31 33 20 69 73   },..    '-13 is
0d30: 20 74 77 6f 20 6f 63 74 61 76 65 73 20 64 6f 77   two octaves dow
0d40: 6e 27 3a 20 66 75 6e 63 74 69 6f 6e 28 74 6f 70  n': function(top
0d50: 69 63 29 20 7b 0a 20 20 20 20 20 20 61 73 73 65  ic) {.      asse
0d60: 72 74 2e 64 65 65 70 45 71 75 61 6c 28 74 6f 70  rt.deepEqual(top
0d70: 69 63 2e 67 65 74 28 2d 31 33 29 2c 20 74 65 6f  ic.get(-13), teo
0d80: 72 69 61 2e 6e 6f 74 65 28 27 41 32 27 29 29 3b  ria.note('A2'));
0d90: 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 29 2e 65 78  .    }.  }.}).ex
0da0: 70 6f 72 74 28 6d 6f 64 75 6c 65 29 3b 0a        port(module);.