⌈⌋ ⎇ branch:  Bitrhythm


Hex Artifact Content

Artifact a05e82c600736635b2733b73653b356b4f948139f45fee5e5f3408b92914683c:

  • Executable file public/teoria-master/README.md — part of check-in [12a9bb700d] at 2021-08-11 18:56:04 on branch trunk — Import from git Added a changelog (user: dev size: 19346)

0000: 54 65 6f 72 69 61 2e 6a 73 0a 3d 3d 3d 3d 3d 3d  Teoria.js.======
0010: 3d 3d 3d 0a 0a 54 65 6f 72 69 61 2e 6a 73 20 69  ===..Teoria.js i
0020: 73 20 61 20 6c 69 67 68 74 77 65 69 67 68 74 20  s a lightweight 
0030: 61 6e 64 20 66 61 73 74 20 4a 61 76 61 53 63 72  and fast JavaScr
0040: 69 70 74 20 6c 69 62 72 61 72 79 0a 66 6f 72 20  ipt library.for 
0050: 6d 75 73 69 63 20 74 68 65 6f 72 79 2c 20 62 6f  music theory, bo
0060: 74 68 20 4a 61 7a 7a 20 61 6e 64 20 43 6c 61 73  th Jazz and Clas
0070: 73 69 63 61 6c 2e 20 49 74 20 61 69 6d 73 20 61  sical. It aims a
0080: 74 20 70 72 6f 76 69 64 69 6e 67 20 61 6e 20 69  t providing an i
0090: 6e 74 75 69 74 69 76 65 0a 70 72 6f 67 72 61 6d  ntuitive.program
00a0: 6d 69 6e 67 20 69 6e 74 65 72 66 61 63 65 20 66  ming interface f
00b0: 6f 72 20 6d 75 73 69 63 20 73 6f 66 74 77 61 72  or music softwar
00c0: 65 20 28 73 75 63 68 20 61 73 20 53 68 65 65 74  e (such as Sheet
00d0: 20 52 65 61 64 65 72 73 2c 0a 53 68 65 65 74 20   Readers,.Sheet 
00e0: 57 72 69 74 65 72 73 2c 20 4d 49 44 49 20 50 6c  Writers, MIDI Pl
00f0: 61 79 65 72 73 20 65 74 63 2e 29 2e 0a 0a 46 65  ayers etc.)...Fe
0100: 61 74 75 72 65 73 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d  atures.---------
0110: 0a 0a 20 2d 20 41 20 6e 6f 74 65 20 6f 62 6a 65  .. - A note obje
0120: 63 74 20 28 60 74 65 6f 72 69 61 2e 4e 6f 74 65  ct (`teoria.Note
0130: 60 29 2c 20 77 68 69 63 68 20 75 6e 64 65 72 73  `), which unders
0140: 74 61 6e 64 73 20 61 6c 74 65 72 61 74 69 6f 6e  tands alteration
0150: 73 2c 20 6f 63 74 61 76 65 73 2c 0a 20 6b 65 79  s, octaves,. key
0160: 20 6e 75 6d 62 65 72 2c 20 66 72 65 71 75 65 6e   number, frequen
0170: 63 79 20 61 6e 64 20 65 74 63 2e 20 61 6e 64 20  cy and etc. and 
0180: 48 65 6c 6d 68 6f 6c 74 7a 20 6e 6f 74 61 74 69  Helmholtz notati
0190: 6f 6e 0a 0a 20 2d 20 41 20 63 68 6f 72 64 20 6f  on.. - A chord o
01a0: 62 6a 65 63 74 20 28 60 74 65 6f 72 69 61 2e 43  bject (`teoria.C
01b0: 68 6f 72 64 60 29 2c 20 77 68 69 63 68 20 75 6e  hord`), which un
01c0: 64 65 72 73 74 61 6e 64 73 20 65 76 65 72 79 74  derstands everyt
01d0: 68 69 6e 67 0a 20 66 72 6f 6d 20 73 69 6d 70 6c  hing. from simpl
01e0: 65 20 6d 61 6a 6f 72 2f 6d 69 6e 6f 72 20 63 68  e major/minor ch
01f0: 6f 72 64 73 20 74 6f 20 61 64 76 61 6e 63 65 64  ords to advanced
0200: 20 4a 61 7a 7a 20 63 68 6f 72 64 73 20 28 41 62   Jazz chords (Ab
0210: 23 35 62 39 2c 20 46 28 23 31 31 29 20 61 6e 64  #5b9, F(#11) and
0220: 20 73 75 63 68 29 0a 0a 20 2d 20 41 20 73 63 61   such).. - A sca
0230: 6c 65 20 6f 62 6a 65 63 74 20 28 60 74 65 6f 72  le object (`teor
0240: 69 61 2e 53 63 61 6c 65 60 29 2c 20 54 68 65 20  ia.Scale`), The 
0250: 73 63 61 6c 65 20 6f 62 6a 65 63 74 20 69 73 20  scale object is 
0260: 61 20 70 6f 77 65 72 66 75 6c 20 70 72 65 73 65  a powerful prese
0270: 6e 74 61 74 69 6f 6e 20 6f 66 0a 20 61 20 73 63  ntation of. a sc
0280: 61 6c 65 2c 20 77 68 69 63 68 20 73 75 70 70 6f  ale, which suppo
0290: 72 74 73 20 71 75 69 74 65 20 61 20 66 65 77 20  rts quite a few 
02a0: 68 61 6e 64 79 20 6d 65 74 68 6f 64 73 2e 20 41  handy methods. A
02b0: 20 73 63 61 6c 65 20 63 61 6e 20 65 69 74 68 65   scale can eithe
02c0: 72 20 62 65 0a 20 63 6f 6e 73 74 72 75 63 74 65  r be. constructe
02d0: 64 20 66 72 6f 6d 20 74 68 65 20 70 72 65 64 65  d from the prede
02e0: 66 69 6e 65 64 20 73 63 61 6c 65 73 2c 20 77 68  fined scales, wh
02f0: 69 63 68 20 62 79 20 64 65 66 61 75 6c 74 20 63  ich by default c
0300: 6f 6e 74 61 69 6e 73 20 74 68 65 20 37 20 6d 6f  ontains the 7 mo
0310: 64 65 73 0a 20 28 49 6f 6e 69 61 6e 2c 20 44 6f  des. (Ionian, Do
0320: 72 69 61 6e 2c 20 50 68 72 79 67 69 61 6e 20 65  rian, Phrygian e
0330: 74 63 2e 29 20 61 20 6d 61 6a 6f 72 20 61 6e 64  tc.) a major and
0340: 20 6d 69 6e 6f 72 20 70 65 6e 74 61 74 6f 6e 69   minor pentatoni
0350: 63 20 61 6e 64 20 74 68 65 20 68 61 72 6d 6f 6e  c and the harmon
0360: 69 63 0a 20 63 68 72 6f 6d 61 74 69 63 20 73 63  ic. chromatic sc
0370: 61 6c 65 20 6f 72 20 66 72 6f 6d 20 61 6e 20 61  ale or from an a
0380: 72 62 69 74 72 61 72 79 20 61 72 72 61 79 20 6f  rbitrary array o
0390: 66 20 69 6e 74 65 72 76 61 6c 73 2e 20 54 68 65  f intervals. The
03a0: 20 73 63 61 6c 65 20 6f 62 6a 65 63 74 0a 20 61   scale object. a
03b0: 6c 73 6f 20 73 75 70 70 6f 72 74 73 20 73 6f 6c  lso supports sol
03c0: 66 c3 a8 67 65 2c 20 77 68 69 63 68 20 6d 61 6b  f..ge, which mak
03d0: 65 73 20 69 74 20 70 65 72 66 65 63 74 20 66 6f  es it perfect fo
03e0: 72 20 74 75 74 6f 72 69 61 6c 73 20 6f 6e 20 73  r tutorials on s
03f0: 69 67 68 74 2d 72 65 61 64 69 6e 67 2e 0a 0a 20  ight-reading... 
0400: 2d 20 41 6e 20 69 6e 74 65 72 76 61 6c 20 6f 62  - An interval ob
0410: 6a 65 63 74 20 28 60 74 65 6f 72 69 61 2e 49 6e  ject (`teoria.In
0420: 74 65 72 76 61 6c 60 29 2c 20 77 68 69 63 68 20  terval`), which 
0430: 6d 61 6b 65 73 20 69 74 20 65 61 73 79 20 74 6f  makes it easy to
0440: 20 66 69 6e 64 20 74 68 65 0a 20 69 6e 74 65 72   find the. inter
0450: 76 61 6c 20 62 65 74 77 65 65 6e 20 74 77 6f 20  val between two 
0460: 6e 6f 74 65 73 2c 20 6f 72 20 66 69 6e 64 20 61  notes, or find a
0470: 20 6e 6f 74 65 20 74 68 61 74 20 69 73 20 61 20   note that is a 
0480: 67 69 76 65 6e 20 69 6e 74 65 72 76 61 6c 20 66  given interval f
0490: 72 6f 6d 20 61 20 6e 6f 74 65 2e 0a 20 54 68 65  rom a note.. The
04a0: 72 65 27 73 20 61 6c 73 6f 20 73 75 70 70 6f 72  re's also suppor
04b0: 74 20 66 6f 72 20 63 6f 75 6e 74 69 6e 67 20 74  t for counting t
04c0: 68 65 20 69 6e 74 65 72 76 61 6c 20 73 70 61 6e  he interval span
04d0: 20 69 6e 20 73 65 6d 69 74 6f 6e 65 73 20 61 6e   in semitones an
04e0: 64 20 69 6e 76 65 72 74 69 6e 67 20 74 68 65 0a  d inverting the.
04f0: 20 69 6e 74 65 72 76 61 6c 2e 0a 0a 55 73 61 67   interval...Usag
0500: 65 0a 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 20 20 20 20  e.--------..    
0510: 24 20 6e 70 6d 20 69 6e 73 74 61 6c 6c 20 74 65  $ npm install te
0520: 6f 72 69 61 0a 0a 43 61 6e 20 62 65 20 75 73 65  oria..Can be use
0530: 64 20 77 69 74 68 20 62 6f 74 68 20 4e 6f 64 65  d with both Node
0540: 20 61 6e 64 20 42 72 6f 77 73 65 72 69 66 79 2f   and Browserify/
0550: 77 65 62 70 61 63 6b 2f 65 74 63 2e 0a 0a 23 23  webpack/etc...##
0560: 23 20 2e 2e 2e 20 6f 72 20 6c 65 73 73 20 70 72  # ... or less pr
0570: 65 66 65 72 61 62 6c 65 0a 0a 49 6e 63 6c 75 64  eferable..Includ
0580: 65 20 74 68 65 20 62 75 6e 64 6c 65 64 20 62 75  e the bundled bu
0590: 69 6c 64 20 66 69 6c 65 2c 20 60 74 65 6f 72 69  ild file, `teori
05a0: 61 2e 6a 73 60 20 66 72 6f 6d 20 74 68 69 73 20  a.js` from this 
05b0: 72 65 70 6f 73 69 74 6f 72 79 2c 20 64 69 72 65  repository, dire
05c0: 63 74 6c 79 3a 0a 60 60 60 68 74 6d 6c 0a 3c 73  ctly:.```html.<s
05d0: 63 72 69 70 74 20 73 72 63 3d 22 70 61 74 68 2f  cript src="path/
05e0: 74 6f 2f 74 65 6f 72 69 61 2e 6a 73 22 3e 3c 2f  to/teoria.js"></
05f0: 73 63 72 69 70 74 3e 0a 60 60 60 0a 53 79 6e 74  script>.```.Synt
0600: 61 78 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 54 68  ax.---------..Th
0610: 69 73 20 69 73 20 6a 75 73 74 20 61 20 73 68 6f  is is just a sho
0620: 72 74 20 69 6e 74 72 6f 64 75 63 74 69 6f 6e 20  rt introduction 
0630: 74 6f 20 77 68 61 74 20 74 65 6f 72 69 61 2d 63  to what teoria-c
0640: 6f 64 65 20 6c 6f 6f 6b 73 20 6c 69 6b 65 2c 0a  ode looks like,.
0650: 66 6f 72 20 61 20 74 65 63 68 6e 69 63 61 6c 20  for a technical 
0660: 6c 69 62 72 61 72 79 20 72 65 66 65 72 65 6e 63  library referenc
0670: 65 2c 20 6c 6f 6f 6b 20 66 75 72 74 68 65 72 20  e, look further 
0680: 64 6f 77 6e 20 74 68 69 73 20 64 6f 63 75 6d 65  down this docume
0690: 6e 74 2e 0a 0a 60 60 60 6a 61 76 61 73 63 72 69  nt...```javascri
06a0: 70 74 0a 0a 2f 2f 20 43 72 65 61 74 65 20 6e 6f  pt..// Create no
06b0: 74 65 73 3a 0a 76 61 72 20 61 34 20 3d 20 74 65  tes:.var a4 = te
06c0: 6f 72 69 61 2e 6e 6f 74 65 28 27 61 34 27 29 3b  oria.note('a4');
06d0: 20 20 20 20 20 20 20 2f 2f 20 53 63 69 65 6e 74         // Scient
06e0: 69 66 69 63 20 6e 6f 74 61 74 69 6f 6e 0a 76 61  ific notation.va
06f0: 72 20 67 35 20 3d 20 74 65 6f 72 69 61 2e 6e 6f  r g5 = teoria.no
0700: 74 65 28 22 67 27 27 22 29 3b 20 20 20 20 20 20  te("g''");      
0710: 2f 2f 20 48 65 6c 6d 68 6f 6c 74 7a 20 6e 6f 74  // Helmholtz not
0720: 61 74 69 6f 6e 0a 76 61 72 20 63 33 20 3d 20 74  ation.var c3 = t
0730: 65 6f 72 69 61 2e 6e 6f 74 65 2e 66 72 6f 6d 4b  eoria.note.fromK
0740: 65 79 28 32 38 29 3b 20 2f 2f 20 46 72 6f 6d 20  ey(28); // From 
0750: 61 20 70 69 61 6e 6f 20 6b 65 79 20 6e 75 6d 62  a piano key numb
0760: 65 72 0a 0a 2f 2f 20 46 69 6e 64 20 61 6e 64 20  er..// Find and 
0770: 63 72 65 61 74 65 20 6e 6f 74 65 73 20 62 61 73  create notes bas
0780: 65 64 20 6f 6e 20 69 6e 74 65 72 76 61 6c 73 0a  ed on intervals.
0790: 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 28  teoria.interval(
07a0: 61 34 2c 20 67 35 29 3b 20 20 20 20 2f 2f 20 52  a4, g5);    // R
07b0: 65 74 75 72 6e 73 20 61 20 49 6e 74 65 72 76 61  eturns a Interva
07c0: 6c 20 6f 62 6a 65 63 74 20 72 65 70 72 65 73 65  l object represe
07d0: 6e 74 69 6e 67 20 61 20 6d 69 6e 6f 72 20 73 65  nting a minor se
07e0: 76 65 6e 74 68 0a 74 65 6f 72 69 61 2e 69 6e 74  venth.teoria.int
07f0: 65 72 76 61 6c 28 61 34 2c 20 27 4d 36 27 29 3b  erval(a4, 'M6');
0800: 20 20 2f 2f 20 52 65 74 75 72 6e 73 20 61 20 4e    // Returns a N
0810: 6f 74 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67  ote representing
0820: 20 46 23 35 0a 61 34 2e 69 6e 74 65 72 76 61 6c   F#5.a4.interval
0830: 28 27 6d 33 27 29 3b 20 20 20 20 20 20 20 20 20  ('m3');         
0840: 20 2f 2f 20 52 65 74 75 72 6e 73 20 61 20 4e 6f   // Returns a No
0850: 74 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  te representing 
0860: 43 23 34 0a 61 34 2e 69 6e 74 65 72 76 61 6c 28  C#4.a4.interval(
0870: 67 35 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  g5);            
0880: 2f 2f 20 52 65 74 75 72 6e 73 20 61 20 49 6e 74  // Returns a Int
0890: 65 72 76 61 6c 20 6f 62 6a 65 63 74 20 72 65 70  erval object rep
08a0: 72 65 73 65 6e 74 69 6e 67 20 61 20 6d 69 6e 6f  resenting a mino
08b0: 72 20 73 65 76 65 6e 74 68 0a 61 34 2e 69 6e 74  r seventh.a4.int
08c0: 65 72 76 61 6c 28 74 65 6f 72 69 61 2e 6e 6f 74  erval(teoria.not
08d0: 65 28 27 62 62 35 27 29 29 2e 69 6e 76 65 72 74  e('bb5')).invert
08e0: 28 29 3b 20 2f 2f 20 52 65 74 75 72 6e 73 20 61  (); // Returns a
08f0: 20 49 6e 74 65 72 76 61 6c 20 72 65 70 72 65 73   Interval repres
0900: 65 6e 74 69 6e 67 20 61 20 6d 61 6a 6f 72 20 73  enting a major s
0910: 65 76 65 6e 74 68 0a 0a 2f 2f 20 43 72 65 61 74  eventh..// Creat
0920: 65 20 73 63 61 6c 65 73 2c 20 62 61 73 65 64 20  e scales, based 
0930: 6f 6e 20 6e 6f 74 65 73 2e 0a 61 34 2e 73 63 61  on notes..a4.sca
0940: 6c 65 28 27 6d 69 78 6f 6c 79 64 69 61 6e 27 29  le('mixolydian')
0950: 2e 73 69 6d 70 6c 65 28 29 3b 20 20 2f 2f 20 52  .simple();  // R
0960: 65 74 75 72 6e 73 3a 20 5b 22 61 22 2c 20 22 62  eturns: ["a", "b
0970: 22 2c 20 22 63 23 22 2c 20 22 64 22 2c 20 22 65  ", "c#", "d", "e
0980: 22 2c 20 22 66 23 22 2c 20 22 67 22 5d 0a 61 34  ", "f#", "g"].a4
0990: 2e 73 63 61 6c 65 28 27 61 65 6f 6c 69 61 6e 27  .scale('aeolian'
09a0: 29 2e 73 69 6d 70 6c 65 28 29 3b 20 20 20 20 20  ).simple();     
09b0: 2f 2f 20 52 65 74 75 72 6e 73 3a 20 5b 22 61 22  // Returns: ["a"
09c0: 2c 20 22 62 22 2c 20 22 63 22 2c 20 22 64 22 2c  , "b", "c", "d",
09d0: 20 22 65 22 2c 20 22 66 22 2c 20 22 67 22 5d 0a   "e", "f", "g"].
09e0: 67 35 2e 73 63 61 6c 65 28 27 69 6f 6e 69 61 6e  g5.scale('ionian
09f0: 27 29 2e 73 69 6d 70 6c 65 28 29 3b 20 20 20 20  ').simple();    
0a00: 20 20 2f 2f 20 52 65 74 75 72 6e 73 3a 20 5b 22    // Returns: ["
0a10: 67 22 2c 20 22 61 22 2c 20 22 62 22 2c 20 22 63  g", "a", "b", "c
0a20: 22 2c 20 22 64 22 2c 20 22 65 22 2c 20 22 66 23  ", "d", "e", "f#
0a30: 22 5d 0a 67 35 2e 73 63 61 6c 65 28 27 64 6f 72  "].g5.scale('dor
0a40: 69 61 6e 27 29 3b 20 20 20 20 20 20 20 20 20 20  ian');          
0a50: 20 20 20 20 20 2f 2f 20 52 65 74 75 72 6e 73 20       // Returns 
0a60: 61 20 53 63 61 6c 65 20 6f 62 6a 65 63 74 0a 0a  a Scale object..
0a70: 2f 2f 20 43 72 65 61 74 65 20 63 68 6f 72 64 73  // Create chords
0a80: 20 77 69 74 68 20 74 68 65 20 70 6f 77 65 72 66   with the powerf
0a90: 75 6c 20 63 68 6f 72 64 20 70 61 72 73 65 72 0a  ul chord parser.
0aa0: 61 34 2e 63 68 6f 72 64 28 27 73 75 73 32 27 29  a4.chord('sus2')
0ab0: 2e 6e 61 6d 65 3b 20 20 20 20 2f 2f 20 52 65 74  .name;    // Ret
0ac0: 75 72 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  urns the name of
0ad0: 20 74 68 65 20 63 68 6f 72 64 3a 20 27 41 73 75   the chord: 'Asu
0ae0: 73 32 27 0a 63 33 2e 63 68 6f 72 64 28 27 6d 27  s2'.c3.chord('m'
0af0: 29 2e 6e 61 6d 65 3b 20 20 20 20 20 20 20 2f 2f  ).name;       //
0b00: 20 52 65 74 75 72 6e 73 20 27 43 6d 27 0a 74 65   Returns 'Cm'.te
0b10: 6f 72 69 61 2e 63 68 6f 72 64 28 27 41 62 23 35  oria.chord('Ab#5
0b20: 62 39 27 29 3b 20 20 20 2f 2f 20 52 65 74 75 72  b9');   // Retur
0b30: 6e 73 20 61 20 43 68 6f 72 64 20 6f 62 6a 65 63  ns a Chord objec
0b40: 74 2c 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  t, representing 
0b50: 61 20 41 62 23 35 62 39 20 63 68 6f 72 64 0a 67  a Ab#5b9 chord.g
0b60: 35 2e 63 68 6f 72 64 28 27 64 69 6d 27 29 3b 20  5.chord('dim'); 
0b70: 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 74 75           // Retu
0b80: 72 6e 73 20 61 20 43 68 6f 72 64 20 6f 62 6a 65  rns a Chord obje
0b90: 63 74 2c 20 72 65 70 72 65 73 65 6e 74 69 6e 67  ct, representing
0ba0: 20 61 20 47 64 69 6d 20 63 68 6f 72 64 0a 0a 2f   a Gdim chord../
0bb0: 2f 20 43 61 6c 63 75 6c 61 74 65 20 6e 6f 74 65  / Calculate note
0bc0: 20 66 72 65 71 75 65 6e 63 69 65 73 20 6f 72 20   frequencies or 
0bd0: 66 69 6e 64 20 74 68 65 20 6e 6f 74 65 20 63 6f  find the note co
0be0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 61  rresponding to a
0bf0: 20 66 72 65 71 75 65 6e 63 79 0a 74 65 6f 72 69   frequency.teori
0c00: 61 2e 6e 6f 74 65 2e 66 72 6f 6d 46 72 65 71 75  a.note.fromFrequ
0c10: 65 6e 63 79 28 34 36 37 29 3b 20 2f 2f 20 52 65  ency(467); // Re
0c20: 74 75 72 6e 73 3a 20 7b 27 6e 6f 74 65 27 3a 7b  turns: {'note':{
0c30: 2e 2e 2e 7d 2c 27 63 65 6e 74 73 27 3a 33 2e 31  ...},'cents':3.1
0c40: 30 32 38 33 31 7d 20 2d 3e 20 41 34 23 20 61 20  02831} -> A4# a 
0c50: 6c 69 74 74 6c 65 20 6f 75 74 20 6f 66 20 74 75  little out of tu
0c60: 6e 65 2e 0a 61 34 2e 66 71 28 29 3b 20 2f 2f 20  ne..a4.fq(); // 
0c70: 4f 75 74 70 75 74 73 20 34 34 30 0a 67 35 2e 66  Outputs 440.g5.f
0c80: 71 28 29 3b 20 2f 2f 20 4f 75 74 70 75 74 73 20  q(); // Outputs 
0c90: 37 38 33 2e 39 39 30 38 37 31 39 36 33 34 39 38  783.990871963498
0ca0: 35 0a 0a 2f 2f 20 74 65 6f 72 69 61 20 61 6c 6c  5..// teoria all
0cb0: 6f 77 73 20 66 6f 72 20 63 72 61 7a 79 20 63 68  ows for crazy ch
0cc0: 61 69 6e 69 6e 67 3a 0a 74 65 6f 72 69 61 2e 6e  aining:.teoria.n
0cd0: 6f 74 65 28 27 61 27 29 20 20 20 20 2f 2f 20 43  ote('a')    // C
0ce0: 72 65 61 74 65 20 61 20 6e 6f 74 65 2c 20 41 33  reate a note, A3
0cf0: 0a 20 20 2e 73 63 61 6c 65 28 27 6c 79 64 69 61  .  .scale('lydia
0d00: 6e 27 29 20 20 2f 2f 20 43 72 65 61 74 65 20 61  n')  // Create a
0d10: 20 6c 79 64 69 61 6e 20 73 63 61 6c 65 20 77 69   lydian scale wi
0d20: 74 68 20 74 68 61 74 20 6e 6f 74 65 20 61 73 20  th that note as 
0d30: 72 6f 6f 74 20 28 41 20 6c 79 64 69 61 6e 29 0a  root (A lydian).
0d40: 20 20 2e 69 6e 74 65 72 76 61 6c 28 27 4d 32 27    .interval('M2'
0d50: 29 20 20 20 2f 2f 20 54 72 61 6e 73 70 6f 73 65  )   // Transpose
0d60: 20 74 68 65 20 77 68 6f 6c 65 20 73 63 61 6c 65   the whole scale
0d70: 20 61 20 6d 61 6a 6f 72 20 73 65 63 6f 6e 64 20   a major second 
0d80: 75 70 20 28 42 20 6c 79 64 69 61 6e 29 0a 20 20  up (B lydian).  
0d90: 2e 67 65 74 28 27 74 68 69 72 64 27 29 20 20 20  .get('third')   
0da0: 20 20 2f 2f 20 47 65 74 20 74 68 65 20 74 68 69    // Get the thi
0db0: 72 64 20 6e 6f 74 65 20 6f 66 20 74 68 65 20 73  rd note of the s
0dc0: 63 61 6c 65 20 28 44 23 34 29 0a 20 20 2e 63 68  cale (D#4).  .ch
0dd0: 6f 72 64 28 27 6d 61 6a 39 27 29 20 20 20 20 2f  ord('maj9')    /
0de0: 2f 20 43 72 65 61 74 65 20 61 20 6d 61 6a 39 20  / Create a maj9 
0df0: 63 68 6f 72 64 20 77 69 74 68 20 74 68 61 74 20  chord with that 
0e00: 6e 6f 74 65 20 61 73 20 72 6f 6f 74 20 28 44 23  note as root (D#
0e10: 6d 61 6a 39 29 0a 20 20 2e 74 6f 53 74 72 69 6e  maj9).  .toStrin
0e20: 67 28 29 3b 20 20 20 20 20 20 2f 2f 20 4d 61 6b  g();      // Mak
0e30: 65 20 61 20 73 74 72 69 6e 67 20 72 65 70 72 65  e a string repre
0e40: 73 65 6e 74 61 74 69 6f 6e 3a 20 27 44 23 6d 61  sentation: 'D#ma
0e50: 6a 39 27 0a 60 60 60 0a 0a 44 6f 63 75 6d 65 6e  j9'.```..Documen
0e60: 74 61 74 69 6f 6e 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d  tation.---------
0e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
0e80: 0a 23 23 20 74 65 6f 72 69 61 2e 6e 6f 74 65 20  .## teoria.note 
0e90: 28 6e 61 6d 65 20 7c 20 63 6f 6f 72 64 5b 2c 20  (name | coord[, 
0ea0: 64 75 72 61 74 69 6f 6e 5d 29 0a 0a 2a 6e 61 6d  duration])..*nam
0eb0: 65 2a 20 2d 20 54 68 65 20 6e 61 6d 65 20 61 72  e* - The name ar
0ec0: 67 75 6d 65 6e 74 20 69 73 20 74 68 65 20 6e 6f  gument is the no
0ed0: 74 65 20 6e 61 6d 65 20 61 73 20 61 20 73 74 72  te name as a str
0ee0: 69 6e 67 2e 20 54 68 65 20 6e 6f 74 65 20 63 61  ing. The note ca
0ef0: 6e 20 62 6f 74 68 0a 62 65 20 65 78 70 72 65 73  n both.be expres
0f00: 73 65 64 20 69 6e 20 73 63 69 65 6e 74 69 66 69  sed in scientifi
0f10: 63 20 61 6e 64 20 48 65 6c 6d 68 6f 6c 74 7a 20  c and Helmholtz 
0f20: 6e 6f 74 61 74 69 6f 6e 2e 0a 53 6f 6d 65 20 65  notation..Some e
0f30: 78 61 6d 70 6c 65 73 20 6f 66 20 76 61 6c 69 64  xamples of valid
0f40: 20 6e 6f 74 65 20 6e 61 6d 65 73 3a 20 60 45 62   note names: `Eb
0f50: 34 60 2c 20 60 43 23 2c 2c 60 2c 20 60 43 34 60  4`, `C#,,`, `C4`
0f60: 2c 20 60 64 23 27 27 60 2c 20 60 41 62 32 60 0a  , `d#''`, `Ab2`.
0f70: 0a 2a 63 6f 6f 72 64 2a 20 2d 20 49 66 20 74 68  .*coord* - If th
0f80: 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
0f90: 20 69 73 6e 27 74 20 61 20 73 74 72 69 6e 67 2c   isn't a string,
0fa0: 20 62 75 74 20 61 20 63 6f 6f 72 64 20 61 72 72   but a coord arr
0fb0: 61 79 2c 0a 69 74 20 77 69 6c 6c 20 69 6e 73 74  ay,.it will inst
0fc0: 61 6e 74 69 61 74 65 20 61 20 60 4e 6f 74 65 60  antiate a `Note`
0fd0: 20 69 6e 73 74 61 6e 63 65 2e 0a 0a 2a 64 75 72   instance...*dur
0fe0: 61 74 69 6f 6e 2a 20 2d 20 54 68 65 20 64 75 72  ation* - The dur
0ff0: 61 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 69  ation argument i
1000: 73 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 60 6f  s an optional `o
1010: 62 6a 65 63 74 60 20 61 72 67 75 6d 65 6e 74 2e  bject` argument.
1020: 0a 54 68 65 20 6f 62 6a 65 63 74 20 68 61 73 20  .The object has 
1030: 74 77 6f 20 61 6c 73 6f 20 6f 70 74 69 6f 6e 61  two also optiona
1040: 6c 20 70 61 72 61 6d 65 74 65 72 73 3a 0a 0a 20  l parameters:.. 
1050: 2d 20 60 76 61 6c 75 65 60 20 2d 20 41 20 60 6e  - `value` - A `n
1060: 75 6d 62 65 72 60 20 63 6f 72 72 65 73 70 6f 6e  umber` correspon
1070: 64 69 6e 67 20 74 6f 20 74 68 65 20 76 61 6c 75  ding to the valu
1080: 65 20 6f 66 20 74 68 65 20 64 75 72 61 74 69 6f  e of the duratio
1090: 6e 2c 20 73 75 63 68 20 74 68 61 74 3a 0a 60 31  n, such that:.`1
10a0: 20 3d 20 77 68 6f 6c 65 60 2c 20 60 32 20 3d 20   = whole`, `2 = 
10b0: 68 61 6c 66 20 28 6d 69 6e 69 6d 29 60 2c 20 60  half (minim)`, `
10c0: 34 20 3d 20 71 75 61 72 74 65 72 60 2c 20 60 38  4 = quarter`, `8
10d0: 20 3d 20 65 69 67 68 74 60 0a 0a 20 2d 20 60 64   = eight`.. - `d
10e0: 6f 74 73 60 20 2d 20 54 68 65 20 6e 75 6d 62 65  ots` - The numbe
10f0: 72 20 6f 66 20 64 6f 74 73 20 61 74 74 61 63 68  r of dots attach
1100: 65 64 20 74 6f 20 74 68 65 20 6e 6f 74 65 2e 20  ed to the note. 
1110: 44 65 66 61 75 6c 74 73 20 74 6f 20 60 30 60 2e  Defaults to `0`.
1120: 0a 0a 23 23 23 20 74 65 6f 72 69 61 2e 6e 6f 74  ..### teoria.not
1130: 65 2e 66 72 6f 6d 4b 65 79 28 6b 65 79 29 0a 41  e.fromKey(key).A
1140: 20 73 74 61 74 69 63 20 6d 65 74 68 6f 64 20 74   static method t
1150: 68 61 74 20 72 65 74 75 72 6e 73 20 61 6e 20 69  hat returns an i
1160: 6e 73 74 61 6e 63 65 20 6f 66 20 4e 6f 74 65 20  nstance of Note 
1170: 73 65 74 20 74 6f 20 74 68 65 20 6e 6f 74 65 0a  set to the note.
1180: 61 74 20 74 68 65 20 67 69 76 65 6e 20 70 69 61  at the given pia
1190: 6e 6f 20 6b 65 79 2c 20 77 68 65 72 65 20 41 30  no key, where A0
11a0: 20 69 73 20 6b 65 79 20 6e 75 6d 62 65 72 20 31   is key number 1
11b0: 2e 0a 53 65 65 20 5b 57 69 6b 69 70 65 64 69 61  ..See [Wikipedia
11c0: 27 73 20 70 69 61 6e 6f 20 6b 65 79 20 61 72 74  's piano key art
11d0: 69 63 6c 65 5d 28 68 74 74 70 3a 2f 2f 65 6e 2e  icle](http://en.
11e0: 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
11f0: 6b 69 2f 50 69 61 6e 6f 5f 6b 65 79 5f 66 72 65  ki/Piano_key_fre
1200: 71 75 65 6e 63 69 65 73 29 0a 66 6f 72 20 6d 6f  quencies).for mo
1210: 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  re information..
1220: 0a 23 23 23 20 74 65 6f 72 69 61 2e 6e 6f 74 65  .### teoria.note
1230: 2e 66 72 6f 6d 46 72 65 71 75 65 6e 63 79 28 66  .fromFrequency(f
1240: 71 29 0a 41 20 73 74 61 74 69 63 20 6d 65 74 68  q).A static meth
1250: 6f 64 20 72 65 74 75 72 6e 73 20 61 6e 20 6f 62  od returns an ob
1260: 6a 65 63 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ject containing 
1270: 74 77 6f 20 65 6c 65 6d 65 6e 74 73 3a 0a 0a 2a  two elements:..*
1280: 6e 6f 74 65 2a 20 2d 20 41 20 60 4e 6f 74 65 60  note* - A `Note`
1290: 20 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f 6e   which correspon
12a0: 64 73 20 74 6f 20 74 68 65 20 63 6c 6f 73 65 73  ds to the closes
12b0: 74 20 6e 6f 74 65 20 77 69 74 68 20 74 68 65 20  t note with the 
12c0: 67 69 76 65 6e 20 66 72 65 71 75 65 6e 63 79 0a  given frequency.
12d0: 0a 2a 63 65 6e 74 73 2a 20 2d 20 41 20 6e 75 6d  .*cents* - A num
12e0: 62 65 72 20 76 61 6c 75 65 20 6f 66 20 68 6f 77  ber value of how
12f0: 20 6d 61 6e 79 20 63 65 6e 74 73 20 74 68 65 20   many cents the 
1300: 6e 6f 74 65 20 69 73 20 6f 75 74 20 6f 66 20 74  note is out of t
1310: 75 6e 65 0a 0a 23 23 23 20 74 65 6f 72 69 61 2e  une..### teoria.
1320: 6e 6f 74 65 2e 66 72 6f 6d 4d 49 44 49 28 6e 6f  note.fromMIDI(no
1330: 74 65 29 0a 20 2d 20 52 65 74 75 72 6e 73 20 61  te). - Returns a
1340: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 4e 6f  n instance of No
1350: 74 65 20 73 65 74 20 74 6f 20 74 68 65 20 63 6f  te set to the co
1360: 72 72 65 73 70 6f 6e 64 69 6e 67 20 4d 49 44 49  rresponding MIDI
1370: 20 6e 6f 74 65 20 76 61 6c 75 65 2e 0a 0a 2a 6e   note value...*n
1380: 6f 74 65 2a 20 2d 20 41 20 6e 75 6d 62 65 72 20  ote* - A number 
1390: 72 61 6e 67 69 6e 67 20 66 72 6f 6d 20 30 2d 31  ranging from 0-1
13a0: 32 37 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  27 representing 
13b0: 61 20 4d 49 44 49 20 6e 6f 74 65 20 76 61 6c 75  a MIDI note valu
13c0: 65 0a 0a 23 23 23 20 74 65 6f 72 69 61 2e 6e 6f  e..### teoria.no
13d0: 74 65 2e 66 72 6f 6d 53 74 72 69 6e 67 28 6e 6f  te.fromString(no
13e0: 74 65 29 0a 20 2d 20 52 65 74 75 72 6e 73 20 61  te). - Returns a
13f0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 4e 6f  n instance of No
1400: 74 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  te representing 
1410: 74 68 65 20 6e 6f 74 65 20 6e 61 6d 65 0a 0a 2a  the note name..*
1420: 6e 6f 74 65 2a 20 2d 20 54 68 65 20 6e 61 6d 65  note* - The name
1430: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 74 68 65   argument is the
1440: 20 6e 6f 74 65 20 6e 61 6d 65 20 61 73 20 61 20   note name as a 
1450: 73 74 72 69 6e 67 2e 20 54 68 65 20 6e 6f 74 65  string. The note
1460: 20 63 61 6e 20 62 6f 74 68 0a 62 65 20 65 78 70   can both.be exp
1470: 72 65 73 73 65 64 20 69 6e 20 73 63 69 65 6e 74  ressed in scient
1480: 69 66 69 63 20 61 6e 64 20 48 65 6c 6d 68 6f 6c  ific and Helmhol
1490: 74 7a 20 6e 6f 74 61 74 69 6f 6e 2e 0a 53 6f 6d  tz notation..Som
14a0: 65 20 65 78 61 6d 70 6c 65 73 20 6f 66 20 76 61  e examples of va
14b0: 6c 69 64 20 6e 6f 74 65 20 6e 61 6d 65 73 3a 20  lid note names: 
14c0: 60 45 62 34 60 2c 20 60 43 23 2c 2c 60 2c 20 60  `Eb4`, `C#,,`, `
14d0: 43 34 60 2c 20 60 64 23 27 27 60 2c 20 60 41 62  C4`, `d#''`, `Ab
14e0: 32 60 0a 0a 23 23 23 23 20 4e 6f 74 65 2e 6e 61  2`..#### Note.na
14f0: 6d 65 28 29 0a 20 2d 20 54 68 65 20 6e 61 6d 65  me(). - The name
1500: 20 6f 66 20 74 68 65 20 6e 6f 74 65 2c 20 69 6e   of the note, in
1510: 20 6c 6f 77 65 72 63 61 73 65 20 6c 65 74 74 65   lowercase lette
1520: 72 20 28 2a 6f 6e 6c 79 2a 20 74 68 65 20 6e 61  r (*only* the na
1530: 6d 65 2c 20 6e 6f 74 20 74 68 65 0a 20 61 63 63  me, not the. acc
1540: 69 64 65 6e 74 61 6c 20 73 69 67 6e 73 29 0a 0a  idental signs)..
1550: 23 23 23 23 20 4e 6f 74 65 2e 6f 63 74 61 76 65  #### Note.octave
1560: 28 29 0a 20 2d 20 54 68 65 20 6e 75 6d 65 72 69  (). - The numeri
1570: 63 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  c value of the o
1580: 63 74 61 76 65 20 6f 66 20 74 68 65 20 6e 6f 74  ctave of the not
1590: 65 0a 0a 23 23 23 23 20 4e 6f 74 65 2e 64 75 72  e..#### Note.dur
15a0: 61 74 69 6f 6e 0a 20 2d 20 54 68 65 20 64 75 72  ation. - The dur
15b0: 61 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61 73 20  ation object as 
15c0: 64 65 73 63 72 69 62 65 64 20 69 6e 20 74 68 65  described in the
15d0: 20 63 6f 6e 73 74 72 75 63 74 6f 72 20 66 6f 72   constructor for
15e0: 20 4e 6f 74 65 0a 0a 23 23 23 23 20 4e 6f 74 65   Note..#### Note
15f0: 2e 61 63 63 69 64 65 6e 74 61 6c 28 29 0a 20 2d  .accidental(). -
1600: 20 52 65 74 75 72 6e 73 20 74 68 65 20 73 74 72   Returns the str
1610: 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 6f 66 20  ing symbolic of 
1620: 74 68 65 20 61 63 63 69 64 65 6e 74 61 6c 20 73  the accidental s
1630: 69 67 6e 20 28 60 78 60 2c 20 60 23 60 2c 20 60  ign (`x`, `#`, `
1640: 62 60 20 6f 72 20 60 62 62 60 29 0a 0a 23 23 23  b` or `bb`)..###
1650: 23 20 4e 6f 74 65 2e 61 63 63 69 64 65 6e 74 61  # Note.accidenta
1660: 6c 56 61 6c 75 65 28 29 0a 20 2d 20 52 65 74 75  lValue(). - Retu
1670: 72 6e 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20  rns the numeric 
1680: 76 61 6c 75 65 20 28 6d 6f 73 74 6c 79 20 75 73  value (mostly us
1690: 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 29 20 6f  ed internally) o
16a0: 66 20 74 68 65 20 73 69 67 6e 3a 0a 60 78 20 3d  f the sign:.`x =
16b0: 20 32 2c 20 23 20 3d 20 31 2c 20 62 20 3d 20 2d   2, # = 1, b = -
16c0: 31 2c 20 62 62 20 3d 20 2d 32 60 0a 0a 23 23 23  1, bb = -2`..###
16d0: 23 20 4e 6f 74 65 23 6b 65 79 28 5b 77 68 69 74  # Note#key([whit
16e0: 65 6e 6f 74 65 73 5d 29 0a 20 2d 20 52 65 74 75  enotes]). - Retu
16f0: 72 6e 73 20 74 68 65 20 70 69 61 6e 6f 20 6b 65  rns the piano ke
1700: 79 20 6e 75 6d 62 65 72 2e 20 45 2e 67 2e 20 41  y number. E.g. A
1710: 34 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 20 34  4 would return 4
1720: 39 0a 0a 2a 77 68 69 74 65 6e 6f 74 65 73 2a 20  9..*whitenotes* 
1730: 2d 20 49 66 20 74 68 69 73 20 70 61 72 61 6d 65  - If this parame
1740: 74 65 72 20 69 73 20 73 65 74 20 74 6f 20 60 74  ter is set to `t
1750: 72 75 65 60 20 6f 6e 6c 79 20 74 68 65 20 77 68  rue` only the wh
1760: 69 74 65 20 6b 65 79 73 20 77 69 6c 6c 0a 62 65  ite keys will.be
1770: 20 63 6f 75 6e 74 65 64 20 77 68 65 6e 20 66 69   counted when fi
1780: 6e 64 69 6e 67 20 74 68 65 20 6b 65 79 20 6e 75  nding the key nu
1790: 6d 62 65 72 2e 20 54 68 69 73 20 69 73 20 6d 6f  mber. This is mo
17a0: 73 74 6c 79 20 66 6f 72 20 69 6e 74 65 72 6e 61  stly for interna
17b0: 6c 20 75 73 65 2e 0a 0a 23 23 23 23 20 4e 6f 74  l use...#### Not
17c0: 65 23 6d 69 64 69 28 29 0a 20 2d 20 52 65 74 75  e#midi(). - Retu
17d0: 72 6e 73 20 61 20 6e 75 6d 62 65 72 20 72 61 6e  rns a number ran
17e0: 67 69 6e 67 20 66 72 6f 6d 20 30 2d 31 32 37 20  ging from 0-127 
17f0: 72 65 70 72 65 73 65 6e 74 69 6e 67 20 61 20 4d  representing a M
1800: 49 44 49 20 6e 6f 74 65 20 76 61 6c 75 65 0a 0a  IDI note value..
1810: 23 23 23 23 20 4e 6f 74 65 23 66 71 28 5b 63 6f  #### Note#fq([co
1820: 6e 63 65 72 74 50 69 74 63 68 5d 29 0a 20 2d 20  ncertPitch]). - 
1830: 43 61 6c 63 75 6c 61 74 65 73 20 61 6e 64 20 72  Calculates and r
1840: 65 74 75 72 6e 73 20 74 68 65 20 66 72 65 71 75  eturns the frequ
1850: 65 6e 63 79 20 6f 66 20 74 68 65 20 6e 6f 74 65  ency of the note
1860: 2e 0a 0a 2a 63 6f 6e 63 65 72 74 50 69 74 63 68  ...*concertPitch
1870: 2a 20 2d 20 49 66 20 73 75 70 70 6c 69 65 64 20  * - If supplied 
1880: 74 68 69 73 20 6e 75 6d 62 65 72 20 77 69 6c 6c  this number will
1890: 20 62 65 20 75 73 65 64 20 69 6e 73 74 65 61 64   be used instead
18a0: 20 6f 66 20 74 68 65 20 6e 6f 72 6d 61 6c 0a 63   of the normal.c
18b0: 6f 6e 63 65 72 74 20 70 69 74 63 68 20 77 68 69  oncert pitch whi
18c0: 63 68 20 69 73 20 34 34 30 68 7a 2e 20 54 68 69  ch is 440hz. Thi
18d0: 73 20 69 73 20 75 73 65 66 75 6c 20 66 6f 72 20  s is useful for 
18e0: 73 6f 6d 65 20 63 6c 61 73 73 69 63 61 6c 20 6d  some classical m
18f0: 75 73 69 63 2e 0a 0a 23 23 23 23 20 4e 6f 74 65  usic...#### Note
1900: 23 63 68 72 6f 6d 61 28 29 0a 20 2d 20 52 65 74  #chroma(). - Ret
1910: 75 72 6e 73 20 74 68 65 20 70 69 74 63 68 20 63  urns the pitch c
1920: 6c 61 73 73 20 28 69 6e 64 65 78 29 20 6f 66 20  lass (index) of 
1930: 74 68 65 20 6e 6f 74 65 2e 0a 0a 54 68 69 73 20  the note...This 
1940: 61 6c 6c 6f 77 73 20 66 6f 72 20 65 61 73 79 20  allows for easy 
1950: 65 6e 68 61 72 6d 6f 6e 69 63 20 63 68 65 63 6b  enharmonic check
1960: 69 6e 67 3a 0a 0a 20 20 20 20 74 65 6f 72 69 61  ing:..    teoria
1970: 2e 6e 6f 74 65 28 27 65 27 29 2e 63 68 72 6f 6d  .note('e').chrom
1980: 61 28 29 20 3d 3d 3d 20 74 65 6f 72 69 61 2e 6e  a() === teoria.n
1990: 6f 74 65 28 27 66 62 27 29 2e 63 68 72 6f 6d 61  ote('fb').chroma
19a0: 28 29 3b 0a 0a 54 68 65 20 63 68 72 6f 6d 61 20  ();..The chroma 
19b0: 6e 75 6d 62 65 72 20 69 73 20 72 61 6e 67 69 6e  number is rangin
19c0: 67 20 66 72 6f 6d 20 70 69 74 63 68 20 63 6c 61  g from pitch cla
19d0: 73 73 20 43 20 77 68 69 63 68 20 69 73 20 30 20  ss C which is 0 
19e0: 74 6f 20 31 31 20 77 68 69 63 68 20 69 73 20 42  to 11 which is B
19f0: 0a 0a 23 23 23 23 20 4e 6f 74 65 23 73 63 61 6c  ..#### Note#scal
1a00: 65 28 73 63 61 6c 65 4e 61 6d 65 29 0a 20 2d 20  e(scaleName). - 
1a10: 52 65 74 75 72 6e 73 20 61 6e 20 69 6e 73 74 61  Returns an insta
1a20: 6e 63 65 20 6f 66 20 53 63 61 6c 65 2c 20 77 69  nce of Scale, wi
1a30: 74 68 20 74 68 65 20 74 6f 6e 69 63 2f 72 6f 6f  th the tonic/roo
1a40: 74 20 73 65 74 20 74 6f 20 74 68 69 73 20 6e 6f  t set to this no
1a50: 74 65 2e 0a 0a 2a 73 63 61 6c 65 4e 61 6d 65 2a  te...*scaleName*
1a60: 20 2d 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74   - The name of t
1a70: 68 65 20 73 63 61 6c 65 20 74 6f 20 62 65 20 72  he scale to be r
1a80: 65 74 75 72 6e 65 64 2e 20 60 27 6d 69 6e 6f 72  eturned. `'minor
1a90: 27 60 2c 0a 60 27 63 68 72 6f 6d 61 74 69 63 27  '`,.`'chromatic'
1aa0: 60 2c 20 60 27 69 6f 6e 69 61 6e 27 60 20 61 6e  `, `'ionian'` an
1ab0: 64 20 6f 74 68 65 72 73 20 61 72 65 20 76 61 6c  d others are val
1ac0: 69 64 20 73 63 61 6c 65 20 6e 61 6d 65 73 2e 0a  id scale names..
1ad0: 0a 23 23 23 23 20 4e 6f 74 65 23 69 6e 74 65 72  .#### Note#inter
1ae0: 76 61 6c 28 69 6e 74 65 72 76 61 6c 29 0a 20 2d  val(interval). -
1af0: 20 41 20 73 75 67 61 72 20 66 75 6e 63 74 69 6f   A sugar functio
1b00: 6e 20 66 6f 72 20 63 61 6c 6c 69 6e 67 20 74 65  n for calling te
1b10: 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 6e 6f  oria.interval(no
1b20: 74 65 2c 20 69 6e 74 65 72 76 61 6c 29 3b 0a 0a  te, interval);..
1b30: 4c 6f 6f 6b 20 61 74 20 74 68 65 20 64 6f 63 75  Look at the docu
1b40: 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 60 74  mentation for `t
1b50: 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 60 0a  eoria.interval`.
1b60: 0a 23 23 23 23 20 4e 6f 74 65 23 74 72 61 6e 73  .#### Note#trans
1b70: 70 6f 73 65 28 69 6e 74 65 72 76 61 6c 29 0a 20  pose(interval). 
1b80: 2d 20 4c 69 6b 65 20 74 68 65 20 60 23 69 6e 74  - Like the `#int
1b90: 65 72 76 61 6c 60 20 6d 65 74 68 6f 64 2c 20 62  erval` method, b
1ba0: 75 74 20 63 68 61 6e 67 65 73 20 60 74 68 69 73  ut changes `this
1bb0: 60 20 6e 6f 74 65 2c 20 69 6e 73 74 65 61 64 20  ` note, instead 
1bc0: 6f 66 20 72 65 74 75 72 6e 69 6e 67 20 61 20 6e  of returning a n
1bd0: 65 77 0a 0a 23 23 23 23 20 4e 6f 74 65 23 63 68  ew..#### Note#ch
1be0: 6f 72 64 28 5b 6e 61 6d 65 5d 29 0a 20 2d 20 52  ord([name]). - R
1bf0: 65 74 75 72 6e 73 20 61 6e 20 69 6e 73 74 61 6e  eturns an instan
1c00: 63 65 20 6f 66 20 43 68 6f 72 64 2c 20 77 69 74  ce of Chord, wit
1c10: 68 20 72 6f 6f 74 20 6e 6f 74 65 20 73 65 74 20  h root note set 
1c20: 74 6f 20 74 68 69 73 20 6e 6f 74 65 0a 0a 2a 6e  to this note..*n
1c30: 61 6d 65 2a 20 2d 20 54 68 65 20 6e 61 6d 65 20  ame* - The name 
1c40: 61 74 74 72 69 62 75 74 65 20 69 73 20 74 68 65  attribute is the
1c50: 20 6c 61 73 74 20 70 61 72 74 20 6f 66 20 74 68   last part of th
1c60: 65 20 63 68 6f 72 64 20 73 79 6d 62 6f 6c 2e 0a  e chord symbol..
1c70: 45 78 61 6d 70 6c 65 73 3a 20 60 27 6d 37 27 60  Examples: `'m7'`
1c80: 2c 20 60 27 23 35 62 39 27 60 2c 20 60 27 6d 61  , `'#5b9'`, `'ma
1c90: 6a 6f 72 27 60 2e 20 49 66 20 74 68 65 20 6e 61  jor'`. If the na
1ca0: 6d 65 20 70 61 72 61 6d 65 74 65 72 0a 69 73 6e  me parameter.isn
1cb0: 27 74 20 73 65 74 2c 20 61 20 73 74 61 6e 64 61  't set, a standa
1cc0: 72 64 20 6d 61 6a 6f 72 20 63 68 6f 72 64 20 77  rd major chord w
1cd0: 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 2e  ill be returned.
1ce0: 0a 0a 23 23 23 23 20 4e 6f 74 65 23 68 65 6c 6d  ..#### Note#helm
1cf0: 68 6f 6c 74 7a 28 29 0a 20 2d 20 52 65 74 75 72  holtz(). - Retur
1d00: 6e 73 20 74 68 65 20 6e 6f 74 65 20 6e 61 6d 65  ns the note name
1d10: 20 66 6f 72 6d 61 74 74 65 64 20 69 6e 20 48 65   formatted in He
1d20: 6c 6d 68 6f 6c 74 7a 20 6e 6f 74 61 74 69 6f 6e  lmholtz notation
1d30: 2e 0a 0a 45 78 61 6d 70 6c 65 3a 20 60 74 65 6f  ...Example: `teo
1d40: 72 69 61 2e 6e 6f 74 65 28 27 41 35 27 29 2e 68  ria.note('A5').h
1d50: 65 6c 6d 68 6f 6c 74 7a 28 29 20 2d 3e 20 22 61  elmholtz() -> "a
1d60: 27 27 22 60 0a 0a 23 23 23 23 20 4e 6f 74 65 23  ''"`..#### Note#
1d70: 73 63 69 65 6e 74 69 66 69 63 28 29 0a 20 2d 20  scientific(). - 
1d80: 52 65 74 75 72 6e 73 20 74 68 65 20 6e 6f 74 65  Returns the note
1d90: 20 6e 61 6d 65 20 66 6f 72 6d 61 74 74 65 64 20   name formatted 
1da0: 69 6e 20 73 63 69 65 6e 74 69 66 69 63 20 6e 6f  in scientific no
1db0: 74 61 74 69 6f 6e 2e 0a 0a 45 78 61 6d 70 6c 65  tation...Example
1dc0: 3a 20 60 74 65 6f 72 69 61 2e 6e 6f 74 65 28 22  : `teoria.note("
1dd0: 61 62 27 22 29 2e 73 63 69 65 6e 74 69 66 69 63  ab'").scientific
1de0: 28 29 20 2d 3e 20 22 41 62 34 22 60 0a 0a 23 23  () -> "Ab4"`..##
1df0: 23 23 20 4e 6f 74 65 23 65 6e 68 61 72 6d 6f 6e  ## Note#enharmon
1e00: 69 63 73 28 6f 6e 65 41 63 63 69 64 65 6e 74 61  ics(oneAccidenta
1e10: 6c 29 0a 20 2d 20 52 65 74 75 72 6e 73 20 61 6c  l). - Returns al
1e20: 6c 20 6e 6f 74 65 73 20 74 68 61 74 20 61 72 65  l notes that are
1e30: 20 65 6e 68 61 72 6d 6f 6e 69 63 20 77 69 74 68   enharmonic with
1e40: 20 74 68 65 20 6e 6f 74 65 0a 0a 2a 6f 6e 65 41   the note..*oneA
1e50: 63 63 69 64 65 6e 74 61 6c 2a 20 2d 20 42 6f 6f  ccidental* - Boo
1e60: 6c 65 61 6e 2c 20 69 66 20 73 65 74 20 74 6f 20  lean, if set to 
1e70: 74 72 75 65 2c 20 6f 6e 6c 79 20 65 6e 68 61 72  true, only enhar
1e80: 6d 6f 6e 69 63 20 6e 6f 74 65 73 20 77 69 74 68  monic notes with
1e90: 20 6f 6e 65 0a 61 63 63 69 64 65 6e 74 61 6c 20   one.accidental 
1ea0: 69 73 20 72 65 74 75 72 6e 65 64 2e 20 45 2e 67  is returned. E.g
1eb0: 2e 20 72 65 73 75 6c 74 73 20 73 75 63 68 20 61  . results such a
1ec0: 73 20 27 65 62 27 20 61 6e 64 20 27 63 23 27 20  s 'eb' and 'c#' 
1ed0: 62 75 74 20 6e 6f 74 20 27 65 62 62 27 20 61 6e  but not 'ebb' an
1ee0: 64 20 27 63 78 27 0a 0a 60 60 60 6a 61 76 61 73  d 'cx'..```javas
1ef0: 63 72 69 70 74 0a 74 65 6f 72 69 61 2e 6e 6f 74  cript.teoria.not
1f00: 65 28 27 63 27 29 2e 65 6e 68 61 72 6d 6f 6e 69  e('c').enharmoni
1f10: 63 73 28 29 2e 74 6f 53 74 72 69 6e 67 28 29 3b  cs().toString();
1f20: 0a 2f 2f 20 2d 3e 20 27 64 62 62 2c 20 62 23 27  .// -> 'dbb, b#'
1f30: 0a 0a 74 65 6f 72 69 61 2e 6e 6f 74 65 28 27 63  ..teoria.note('c
1f40: 27 29 2e 65 6e 68 61 72 6d 6f 6e 69 63 73 28 74  ').enharmonics(t
1f50: 72 75 65 29 2e 74 6f 53 74 72 69 6e 67 28 29 3b  rue).toString();
1f60: 0a 2f 2f 20 2d 3e 20 27 62 23 27 0a 60 60 60 0a  .// -> 'b#'.```.
1f70: 0a 23 23 23 23 20 4e 6f 74 65 23 64 75 72 61 74  .#### Note#durat
1f80: 69 6f 6e 49 6e 53 65 63 6f 6e 64 73 28 62 70 6d  ionInSeconds(bpm
1f90: 2c 20 62 65 61 74 55 6e 69 74 29 0a 20 2d 20 52  , beatUnit). - R
1fa0: 65 74 75 72 6e 73 20 74 68 65 20 64 75 72 61 74  eturns the durat
1fb0: 69 6f 6e 20 6f 66 20 74 68 65 20 6e 6f 74 65 2c  ion of the note,
1fc0: 20 67 69 76 65 6e 20 61 20 74 65 6d 70 6f 20 28   given a tempo (
1fd0: 69 6e 20 62 70 6d 29 20 61 6e 64 20 61 20 62 65  in bpm) and a be
1fe0: 61 74 20 75 6e 69 74 0a 20 28 74 68 65 20 6c 6f  at unit. (the lo
1ff0: 77 65 72 20 6e 75 6d 65 72 61 6c 20 6f 66 20 74  wer numeral of t
2000: 68 65 20 74 69 6d 65 20 73 69 67 6e 61 74 75 72  he time signatur
2010: 65 29 0a 0a 23 23 23 23 20 4e 6f 74 65 23 73 6f  e)..#### Note#so
2020: 6c 66 65 67 65 28 73 63 61 6c 65 2c 20 73 68 6f  lfege(scale, sho
2030: 77 4f 63 74 61 76 65 73 29 0a 20 2d 20 52 65 74  wOctaves). - Ret
2040: 75 72 6e 73 20 74 68 65 20 73 6f 6c 66 65 67 65  urns the solfege
2050: 20 73 74 65 70 20 69 6e 20 74 68 65 20 67 69 76   step in the giv
2060: 65 6e 20 73 63 61 6c 65 20 63 6f 6e 74 65 78 74  en scale context
2070: 0a 0a 2a 73 63 61 6c 65 2a 20 2d 20 41 6e 20 69  ..*scale* - An i
2080: 6e 73 74 61 6e 63 65 20 6f 66 20 60 53 63 61 6c  nstance of `Scal
2090: 65 60 2c 20 77 68 69 63 68 20 69 73 20 74 68 65  e`, which is the
20a0: 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 20   context of the 
20b0: 73 6f 6c 66 65 67 65 20 73 74 65 70 20 6d 65 61  solfege step mea
20c0: 73 75 72 69 6e 67 0a 0a 2a 73 68 6f 77 4f 63 74  suring..*showOct
20d0: 61 76 65 73 2a 20 2d 20 41 20 62 6f 6f 6c 65 61  aves* - A boolea
20e0: 6e 2e 20 49 66 20 73 65 74 20 74 6f 20 74 72 75  n. If set to tru
20f0: 65 2c 20 61 20 22 48 65 6c 6d 68 6f 6c 74 7a 2d  e, a "Helmholtz-
2100: 6c 69 6b 65 22 20 6e 6f 74 61 74 69 6f 6e 20 77  like" notation w
2110: 69 6c 6c 20 62 65 0a 75 73 65 64 20 69 66 20 74  ill be.used if t
2120: 68 65 72 65 27 73 20 62 69 67 67 65 72 20 69 6e  here's bigger in
2130: 74 65 72 76 61 6c 73 20 74 68 61 6e 20 61 6e 20  tervals than an 
2140: 6f 63 74 61 76 65 0a 0a 23 23 23 23 20 4e 6f 74  octave..#### Not
2150: 65 23 64 75 72 61 74 69 6f 6e 4e 61 6d 65 28 29  e#durationName()
2160: 0a 20 2d 20 52 65 74 75 72 6e 73 20 74 68 65 20  . - Returns the 
2170: 64 75 72 61 74 69 6f 6e 20 6e 61 6d 65 2e 0a 0a  duration name...
2180: 45 78 61 6d 70 6c 65 73 3a 20 60 74 65 6f 72 69  Examples: `teori
2190: 61 2e 6e 6f 74 65 28 27 41 27 2c 20 38 29 2e 64  a.note('A', 8).d
21a0: 75 72 61 74 69 6f 6e 4e 61 6d 65 28 29 20 2d 3e  urationName() ->
21b0: 20 27 65 69 67 68 74 68 27 60 2c 0a 60 74 65 6f   'eighth'`,.`teo
21c0: 72 69 61 2e 6e 6f 74 65 28 27 43 27 2c 20 31 36  ria.note('C', 16
21d0: 29 2e 64 75 72 61 74 69 6f 6e 4e 61 6d 65 28 29  ).durationName()
21e0: 20 2d 3e 20 27 73 69 78 74 65 65 6e 74 68 27 60   -> 'sixteenth'`
21f0: 0a 0a 23 23 23 23 20 4e 6f 74 65 23 73 63 61 6c  ..#### Note#scal
2200: 65 44 65 67 72 65 65 28 73 63 61 6c 65 29 0a 20  eDegree(scale). 
2210: 2d 20 52 65 74 75 72 6e 73 20 74 68 69 73 20 6e  - Returns this n
2220: 6f 74 65 27 73 20 64 65 67 72 65 65 20 69 6e 20  ote's degree in 
2230: 61 20 67 69 76 65 6e 20 73 63 61 6c 65 20 28 53  a given scale (S
2240: 63 61 6c 65 29 2e 20 46 6f 72 20 65 78 61 6d 70  cale). For examp
2250: 6c 65 20 61 0a 20 60 44 60 20 69 6e 20 61 20 43  le a. `D` in a C
2260: 20 6d 61 6a 6f 72 20 73 63 61 6c 65 20 77 69 6c   major scale wil
2270: 6c 20 72 65 74 75 72 6e 20 60 32 60 20 61 73 20  l return `2` as 
2280: 69 74 20 69 73 20 74 68 65 20 73 65 63 6f 6e 64  it is the second
2290: 20 64 65 67 72 65 65 20 6f 66 20 74 68 61 74 20   degree of that 
22a0: 73 63 61 6c 65 2e 0a 20 49 66 20 68 6f 77 65 76  scale.. If howev
22b0: 65 72 20 74 68 65 20 6e 6f 74 65 20 2a 69 73 6e  er the note *isn
22c0: 27 74 2a 20 61 20 70 61 72 74 20 6f 66 20 74 68  't* a part of th
22d0: 65 20 73 63 61 6c 65 2c 20 74 68 65 20 64 65 67  e scale, the deg
22e0: 72 65 65 20 72 65 74 75 72 6e 65 64 20 77 69 6c  ree returned wil
22f0: 6c 20 62 65 0a 20 60 30 60 2c 20 6d 65 61 6e 69  l be. `0`, meani
2300: 6e 67 20 74 68 61 74 20 74 68 65 20 64 65 67 72  ng that the degr
2310: 65 65 20 64 6f 65 73 6e 27 74 20 65 78 69 73 74  ee doesn't exist
2320: 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 74 68  . This allows th
2330: 69 73 20 6d 65 74 68 6f 64 20 74 6f 20 62 65 20  is method to be 
2340: 62 6f 74 68 0a 20 61 20 73 63 61 6c 65 20 64 65  both. a scale de
2350: 67 72 65 65 20 69 6e 64 65 78 20 66 69 6e 64 65  gree index finde
2360: 72 20 2a 61 6e 64 2a 20 61 6e 20 22 69 73 4e 6f  r *and* an "isNo
2370: 74 65 49 6e 53 63 61 6c 65 22 20 6d 65 74 68 6f  teInScale" metho
2380: 64 2e 0a 0a 2a 73 63 61 6c 65 2a 20 2d 20 41 6e  d...*scale* - An
2390: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 60 53 63   instance of `Sc
23a0: 61 6c 65 60 20 77 68 69 63 68 20 69 73 20 74 68  ale` which is th
23b0: 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65  e context of the
23c0: 20 64 65 67 72 65 65 20 6d 65 61 73 75 72 69 6e   degree measurin
23d0: 67 0a 0a 23 23 23 23 20 4e 6f 74 65 23 74 6f 53  g..#### Note#toS
23e0: 74 72 69 6e 67 28 5b 64 6f 6e 74 53 68 6f 77 5d  tring([dontShow]
23f0: 29 0a 20 2d 20 55 73 61 62 69 6c 69 74 79 20 66  ). - Usability f
2400: 75 6e 63 74 69 6f 6e 20 66 6f 72 20 72 65 74 75  unction for retu
2410: 72 6e 69 6e 67 20 74 68 65 20 6e 6f 74 65 20 61  rning the note a
2420: 73 20 61 20 73 74 72 69 6e 67 0a 0a 2a 64 6f 6e  s a string..*don
2430: 74 53 68 6f 77 2a 20 2d 20 49 66 20 73 65 74 20  tShow* - If set 
2440: 74 6f 20 60 74 72 75 65 60 20 74 68 65 20 6f 63  to `true` the oc
2450: 74 61 76 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65  tave will not be
2460: 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65   included in the
2470: 20 72 65 74 75 72 6e 65 64 20 73 74 72 69 6e 67   returned string
2480: 2e 0a 0a 23 23 20 43 68 6f 72 64 28 72 6f 6f 74  ...## Chord(root
2490: 2c 20 63 68 6f 72 64 29 0a 20 2d 20 41 20 63 68  , chord). - A ch
24a0: 6f 72 64 20 63 6c 61 73 73 20 77 69 74 68 20 61  ord class with a
24b0: 20 6c 6f 74 20 6f 66 20 66 75 6e 63 74 69 6f 6e   lot of function
24c0: 61 6c 69 74 79 20 74 6f 20 61 6c 74 65 72 20 61  ality to alter a
24d0: 6e 64 20 61 6e 61 6c 79 7a 65 20 74 68 65 20 63  nd analyze the c
24e0: 68 6f 72 64 2e 0a 0a 2a 72 6f 6f 74 2a 20 2d 20  hord...*root* - 
24f0: 41 20 60 4e 6f 74 65 60 20 69 6e 73 74 61 6e 63  A `Note` instanc
2500: 65 20 77 68 69 63 68 20 69 73 20 74 6f 20 62 65  e which is to be
2510: 20 74 68 65 20 72 6f 6f 74 20 6f 66 20 74 68 65   the root of the
2520: 20 63 68 6f 72 64 0a 0a 2a 63 68 6f 72 64 2a 20   chord..*chord* 
2530: 2d 20 41 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  - A string conta
2540: 69 6e 69 6e 67 20 74 68 65 20 63 68 6f 72 64 20  ining the chord 
2550: 73 79 6d 62 6f 6c 2e 20 54 68 69 73 20 63 61 6e  symbol. This can
2560: 20 62 65 20 61 6e 79 74 68 69 6e 67 20 66 72 6f   be anything fro
2570: 6d 0a 73 69 6d 70 6c 65 20 63 68 6f 72 64 73 2c  m.simple chords,
2580: 20 74 6f 20 73 75 70 65 72 2d 61 64 76 61 6e 63   to super-advanc
2590: 65 64 20 6a 61 7a 7a 20 63 68 6f 72 64 73 20 74  ed jazz chords t
25a0: 68 61 6e 6b 73 20 74 6f 20 74 68 65 20 64 65 74  hanks to the det
25b0: 61 69 6c 65 64 20 61 6e 64 0a 72 6f 62 75 73 74  ailed and.robust
25c0: 20 63 68 6f 72 64 20 70 61 72 73 65 72 20 65 6e   chord parser en
25d0: 67 69 6e 65 2e 20 45 78 61 6d 70 6c 65 20 76 61  gine. Example va
25e0: 6c 75 65 73 3a 0a 60 27 6d 27 60 2c 20 60 27 6d  lues:.`'m'`, `'m
25f0: 37 27 60 2c 20 60 27 23 35 62 39 27 60 2c 20 60  7'`, `'#5b9'`, `
2600: 27 39 73 75 73 34 60 20 61 6e 64 20 60 27 23 31  '9sus4` and `'#1
2610: 31 62 35 23 39 27 60 0a 0a 23 23 23 20 74 65 6f  1b5#9'`..### teo
2620: 72 69 61 2e 63 68 6f 72 64 28 6e 61 6d 65 20 7c  ria.chord(name |
2630: 7c 20 6e 6f 74 65 5b 2c 20 6f 63 74 61 76 65 20  | note[, octave 
2640: 7c 7c 20 73 79 6d 62 6f 6c 5d 29 0a 20 2d 20 41  || symbol]). - A
2650: 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e   simple function
2660: 20 66 6f 72 20 67 65 74 74 69 6e 67 20 74 68 65   for getting the
2670: 20 6e 6f 74 65 73 2c 20 6e 6f 20 6d 61 74 74 65   notes, no matte
2680: 72 20 74 68 65 20 6f 63 74 61 76 65 2c 20 69 6e  r the octave, in
2690: 20 61 20 63 68 6f 72 64 0a 0a 2a 6e 61 6d 65 2a   a chord..*name*
26a0: 20 2d 20 41 20 73 74 72 69 6e 67 20 63 6f 6e 74   - A string cont
26b0: 61 69 6e 69 6e 67 20 74 68 65 20 66 75 6c 6c 20  aining the full 
26c0: 63 68 6f 72 64 20 73 79 6d 62 6f 6c 2c 20 77 69  chord symbol, wi
26d0: 74 68 20 6e 6f 74 65 20 6e 61 6d 65 2e 20 45 78  th note name. Ex
26e0: 61 6d 70 6c 65 73 3a 0a 60 27 41 62 37 27 60 2c  amples:.`'Ab7'`,
26f0: 20 60 27 46 23 28 23 31 31 62 35 29 27 60 0a 0a   `'F#(#11b5)'`..
2700: 2a 6e 6f 74 65 2a 20 2d 20 49 6e 73 74 65 61 64  *note* - Instead
2710: 20 6f 66 20 73 75 70 70 6c 79 69 6e 67 20 61 20   of supplying a 
2720: 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e  string containin
2730: 67 20 74 68 65 20 66 75 6c 6c 20 63 68 6f 72 64  g the full chord
2740: 20 73 79 6d 62 6f 6c 2c 0a 6f 6e 65 20 63 61 6e   symbol,.one can
2750: 20 70 61 73 73 20 61 20 60 4e 6f 74 65 60 20 6f   pass a `Note` o
2760: 62 6a 65 63 74 20 69 6e 73 74 65 61 64 2e 20 54  bject instead. T
2770: 68 65 20 6e 6f 74 65 20 77 69 6c 6c 20 62 65 20  he note will be 
2780: 63 6f 6e 73 69 64 65 72 65 64 20 72 6f 6f 74 20  considered root 
2790: 69 6e 0a 74 68 65 20 6e 65 77 20 63 68 6f 72 64  in.the new chord
27a0: 20 6f 62 6a 65 63 74 0a 0a 2a 6f 63 74 61 76 65   object..*octave
27b0: 2a 20 2d 20 49 66 20 74 68 65 20 66 69 72 73 74  * - If the first
27c0: 20 61 72 67 75 6d 65 6e 74 20 6f 66 20 74 68 65   argument of the
27d0: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 63   function is a c
27e0: 68 6f 72 64 20 6e 61 6d 65 20 28 60 74 79 70 65  hord name (`type
27f0: 6f 66 20 22 73 74 72 69 6e 67 22 60 29 2c 0a 74  of "string"`),.t
2800: 68 65 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 61  hen the second a
2810: 72 67 75 6d 65 6e 74 20 69 73 20 61 6e 20 6f 70  rgument is an op
2820: 74 69 6f 6e 61 6c 20 6f 63 74 61 76 65 20 6e 75  tional octave nu
2830: 6d 62 65 72 20 28 60 74 79 70 65 6f 66 20 22 6e  mber (`typeof "n
2840: 75 6d 62 65 72 22 60 29 20 6f 66 20 74 68 65 20  umber"`) of the 
2850: 72 6f 6f 74 2e 0a 0a 2a 73 79 6d 62 6f 6c 2a 20  root...*symbol* 
2860: 2d 20 41 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  - A string conta
2870: 69 6e 69 6e 67 20 74 68 65 20 63 68 6f 72 64 20  ining the chord 
2880: 73 79 6d 62 6f 6c 20 28 65 78 63 6c 75 64 69 6e  symbol (excludin
2890: 67 20 74 68 65 20 6e 6f 74 65 20 6e 61 6d 65 29  g the note name)
28a0: 0a 0a 23 23 23 23 20 43 68 6f 72 64 2e 6e 61 6d  ..#### Chord.nam
28b0: 65 0a 20 2d 20 48 6f 6c 64 73 20 74 68 65 20 66  e. - Holds the f
28c0: 75 6c 6c 20 63 68 6f 72 64 20 73 79 6d 62 6f 6c  ull chord symbol
28d0: 2c 20 69 6e 63 6c 75 73 69 76 65 20 74 68 65 20  , inclusive the 
28e0: 72 6f 6f 74 20 6e 61 6d 65 2e 0a 0a 23 23 23 23  root name...####
28f0: 20 43 68 6f 72 64 2e 72 6f 6f 74 0a 20 2d 20 48   Chord.root. - H
2900: 6f 6c 64 73 20 74 68 65 20 60 4e 6f 74 65 60 20  olds the `Note` 
2910: 74 68 61 74 20 69 73 20 74 68 65 20 72 6f 6f 74  that is the root
2920: 20 6f 66 20 74 68 65 20 63 68 6f 72 64 2e 0a 0a   of the chord...
2930: 23 23 23 23 20 43 68 6f 72 64 23 6e 6f 74 65 73  #### Chord#notes
2940: 28 29 0a 20 2d 20 52 65 74 75 72 6e 73 20 61 6e  (). - Returns an
2950: 20 61 72 72 61 79 20 6f 66 20 60 4e 6f 74 65 60   array of `Note`
2960: 73 20 74 68 61 74 20 74 68 65 20 63 68 6f 72 64  s that the chord
2970: 20 63 6f 6e 73 69 73 74 73 20 6f 66 2e 0a 0a 23   consists of...#
2980: 23 23 23 20 43 68 6f 72 64 23 73 69 6d 70 6c 65  ### Chord#simple
2990: 28 29 0a 20 2d 20 52 65 74 75 72 6e 73 20 61 6e  (). - Returns an
29a0: 20 60 41 72 72 61 79 60 20 6f 66 20 6f 6e 6c 79   `Array` of only
29b0: 20 74 68 65 20 6e 6f 74 65 73 27 20 6e 61 6d 65   the notes' name
29c0: 73 2c 20 6e 6f 74 20 74 68 65 20 66 75 6c 6c 20  s, not the full 
29d0: 60 4e 6f 74 65 60 20 6f 62 6a 65 63 74 73 2e 0a  `Note` objects..
29e0: 0a 23 23 23 23 20 43 68 6f 72 64 23 62 61 73 73  .#### Chord#bass
29f0: 28 29 0a 20 2d 20 52 65 74 75 72 6e 73 20 74 68  (). - Returns th
2a00: 65 20 62 61 73 73 20 6e 6f 74 65 20 6f 66 20 74  e bass note of t
2a10: 68 65 20 63 68 6f 72 64 20 28 54 68 65 20 6e 6f  he chord (The no
2a20: 74 65 20 76 6f 69 63 65 64 20 74 68 65 20 6c 6f  te voiced the lo
2a30: 77 65 73 74 29 0a 0a 23 23 23 23 20 43 68 6f 72  west)..#### Chor
2a40: 64 23 76 6f 69 63 69 6e 67 28 5b 76 6f 69 63 69  d#voicing([voici
2a50: 6e 67 5d 29 0a 20 2d 20 57 6f 72 6b 73 20 62 6f  ng]). - Works bo
2a60: 74 68 20 61 73 20 61 20 73 65 74 74 65 72 20 61  th as a setter a
2a70: 6e 64 20 67 65 74 74 65 72 2e 20 49 66 20 6e 6f  nd getter. If no
2a80: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 73 75   parameter is su
2a90: 70 70 6c 69 65 64 20 74 68 65 0a 20 63 75 72 72  pplied the. curr
2aa0: 65 6e 74 20 76 6f 69 63 69 6e 67 20 69 73 20 72  ent voicing is r
2ab0: 65 74 75 72 6e 65 64 20 61 73 20 61 6e 20 61 72  eturned as an ar
2ac0: 72 61 79 20 6f 66 20 60 49 6e 74 65 72 76 61 6c  ray of `Interval
2ad0: 60 73 0a 0a 2a 76 6f 69 63 69 6e 67 2a 20 2d 20  `s..*voicing* - 
2ae0: 41 6e 20 6f 70 74 69 6f 6e 61 6c 20 61 72 72 61  An optional arra
2af0: 79 20 6f 66 20 69 6e 74 65 72 76 61 6c 73 20 69  y of intervals i
2b00: 6e 20 73 69 6d 70 6c 65 2d 66 6f 72 6d 61 74 0a  n simple-format.
2b10: 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20  that represents 
2b20: 74 68 65 20 63 75 72 72 65 6e 74 20 76 6f 69 63  the current voic
2b30: 69 6e 67 20 6f 66 20 74 68 65 20 63 68 6f 72 64  ing of the chord
2b40: 2e 0a 0a 48 65 72 65 27 73 20 61 6e 20 65 78 61  ...Here's an exa
2b50: 6d 70 6c 65 3a 0a 60 60 60 6a 61 76 61 73 63 72  mple:.```javascr
2b60: 69 70 74 0a 76 61 72 20 62 62 6d 61 6a 20 3d 20  ipt.var bbmaj = 
2b70: 74 65 6f 72 69 61 2e 63 68 6f 72 64 28 27 42 62  teoria.chord('Bb
2b80: 6d 61 6a 37 27 29 3b 0a 2f 2f 20 44 65 66 61 75  maj7');.// Defau
2b90: 6c 74 20 76 6f 69 63 69 6e 67 3a 0a 62 62 6d 61  lt voicing:.bbma
2ba0: 6a 2e 76 6f 69 63 69 6e 67 28 29 3b 20 20 2f 2f  j.voicing();  //
2bb0: 20 23 2d 3e 20 5b 27 50 31 27 2c 20 27 4d 33 27   #-> ['P1', 'M3'
2bc0: 2c 20 27 50 35 27 2c 20 27 4d 37 27 5d 3b 0a 62  , 'P5', 'M7'];.b
2bd0: 62 6d 61 6a 2e 6e 6f 74 65 73 28 29 3b 20 20 20  bmaj.notes();   
2be0: 20 2f 2f 20 23 2d 3e 20 5b 27 62 62 27 2c 20 27   // #-> ['bb', '
2bf0: 64 27 2c 20 27 66 27 2c 20 27 61 27 5d 3b 0a 0a  d', 'f', 'a'];..
2c00: 2f 2f 20 4e 65 77 20 76 6f 69 63 69 6e 67 0a 62  // New voicing.b
2c10: 62 6d 61 6a 2e 76 6f 69 63 69 6e 67 28 5b 27 50  bmaj.voicing(['P
2c20: 31 27 2c 20 27 50 35 27 2c 20 27 4d 37 27 2c 20  1', 'P5', 'M7', 
2c30: 27 4d 31 30 27 5d 29 3b 0a 62 62 6d 61 6a 2e 6e  'M10']);.bbmaj.n
2c40: 6f 74 65 73 28 29 3b 20 20 20 20 2f 2f 20 23 2d  otes();    // #-
2c50: 3e 20 5b 27 62 62 27 2c 20 27 66 27 2c 20 27 61  > ['bb', 'f', 'a
2c60: 27 2c 20 27 64 27 5d 3b 0a 60 60 60 0a 2a 4e 42  ', 'd'];.```.*NB
2c70: 3a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 62 6f  :* Note that abo
2c80: 76 65 20 72 65 74 75 72 6e 65 64 20 72 65 73 75  ve returned resu
2c90: 6c 74 73 20 61 72 65 20 70 73 65 75 64 6f 2d 72  lts are pseudo-r
2ca0: 65 73 75 6c 74 73 2c 20 61 73 20 74 68 65 79 20  esults, as they 
2cb0: 77 69 6c 6c 20 62 65 0a 72 65 74 75 72 6e 65 64  will be.returned
2cc0: 20 77 72 61 70 70 65 64 20 69 6e 20 60 49 6e 74   wrapped in `Int
2cd0: 65 72 76 61 6c 60 20 61 6e 64 20 60 4e 6f 74 65  erval` and `Note
2ce0: 60 20 6f 62 6a 65 63 74 73 2e 0a 0a 23 23 23 23  ` objects...####
2cf0: 20 43 68 6f 72 64 23 71 75 61 6c 69 74 79 28 29   Chord#quality()
2d00: 0a 20 2d 20 52 65 74 75 72 6e 73 20 61 20 73 74  . - Returns a st
2d10: 72 69 6e 67 20 77 68 69 63 68 20 68 6f 6c 64 73  ring which holds
2d20: 20 74 68 65 20 71 75 61 6c 69 74 79 20 6f 66 20   the quality of 
2d30: 74 68 65 20 63 68 6f 72 64 2c 20 60 27 6d 61 6a  the chord, `'maj
2d40: 6f 72 27 60 2c 20 60 27 6d 69 6e 6f 72 27 60 2c  or'`, `'minor'`,
2d50: 0a 20 60 27 61 75 67 6d 65 6e 74 65 64 27 60 2c  . `'augmented'`,
2d60: 20 60 27 64 69 6d 69 6e 69 73 68 65 64 27 60 2c   `'diminished'`,
2d70: 20 60 27 68 61 6c 66 2d 64 69 6d 69 6e 69 73 68   `'half-diminish
2d80: 65 64 27 60 2c 20 60 27 64 6f 6d 69 6e 61 6e 74  ed'`, `'dominant
2d90: 27 60 20 6f 72 20 60 75 6e 64 65 66 69 6e 65 64  '` or `undefined
2da0: 60 0a 0a 23 23 23 23 20 43 68 6f 72 64 23 67 65  `..#### Chord#ge
2db0: 74 28 69 6e 74 65 72 76 61 6c 29 0a 20 2d 20 52  t(interval). - R
2dc0: 65 74 75 72 6e 73 20 74 68 65 20 6e 6f 74 65 20  eturns the note 
2dd0: 61 74 20 61 20 67 69 76 65 6e 20 69 6e 74 65 72  at a given inter
2de0: 76 61 6c 20 69 6e 20 74 68 65 20 63 68 6f 72 64  val in the chord
2df0: 2c 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a  , if it exists..
2e00: 0a 2a 69 6e 74 65 72 76 61 6c 2a 20 2d 20 41 20  .*interval* - A 
2e10: 73 74 72 69 6e 67 20 6e 61 6d 65 20 6f 66 20 61  string name of a
2e20: 6e 20 69 6e 74 65 72 76 61 6c 2c 20 66 6f 72 20  n interval, for 
2e30: 65 78 61 6d 70 6c 65 20 60 27 74 68 69 72 64 27  example `'third'
2e40: 60 2c 20 60 27 66 69 66 74 68 27 60 2c 20 60 27  `, `'fifth'`, `'
2e50: 6e 69 6e 74 68 27 60 2e 0a 0a 23 23 23 23 20 43  ninth'`...#### C
2e60: 68 6f 72 64 23 64 6f 6d 69 6e 61 6e 74 28 5b 61  hord#dominant([a
2e70: 64 64 69 74 69 6f 6e 61 6c 5d 29 0a 20 2d 20 52  dditional]). - R
2e80: 65 74 75 72 6e 73 20 74 68 65 20 6e 61 c3 af 76  eturns the na..v
2e90: 65 6c 79 20 63 68 6f 73 65 6e 20 64 6f 6d 69 6e  ely chosen domin
2ea0: 61 6e 74 20 77 68 69 63 68 20 69 73 20 61 20 70  ant which is a p
2eb0: 65 72 66 65 63 74 20 66 69 66 74 68 20 61 77 61  erfect fifth awa
2ec0: 79 2e 0a 0a 2a 61 64 64 69 74 69 6f 6e 61 6c 2a  y...*additional*
2ed0: 20 2d 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 68   - Additional ch
2ee0: 6f 72 64 20 65 78 74 65 6e 73 69 6f 6e 2c 20 66  ord extension, f
2ef0: 6f 72 20 65 78 61 6d 70 6c 65 3a 20 60 27 62 39  or example: `'b9
2f00: 27 60 20 6f 72 20 60 27 23 35 27 60 0a 0a 23 23  '` or `'#5'`..##
2f10: 23 23 20 43 68 6f 72 64 23 73 75 62 64 6f 6d 69  ## Chord#subdomi
2f20: 6e 61 6e 74 28 5b 61 64 64 69 74 69 6f 6e 61 6c  nant([additional
2f30: 5d 29 0a 20 2d 20 52 65 74 75 72 6e 73 20 74 68  ]). - Returns th
2f40: 65 20 6e 61 c3 af 76 65 6c 79 20 63 68 6f 73 65  e na..vely chose
2f50: 6e 20 73 75 62 64 6f 6d 69 6e 61 6e 74 20 77 68  n subdominant wh
2f60: 69 63 68 20 69 73 20 61 20 70 65 72 66 65 63 74  ich is a perfect
2f70: 20 66 6f 75 72 74 68 20 61 77 61 79 2e 0a 0a 2a   fourth away...*
2f80: 61 64 64 69 74 69 6f 6e 61 6c 2a 20 2d 20 4c 69  additional* - Li
2f90: 6b 65 20 74 68 65 20 64 6f 6d 69 6e 61 6e 74 27  ke the dominant'
2fa0: 73 2e 0a 0a 23 23 23 23 20 43 68 6f 72 64 23 70  s...#### Chord#p
2fb0: 61 72 61 6c 6c 65 6c 28 5b 61 64 64 69 74 69 6f  arallel([additio
2fc0: 6e 61 6c 5d 29 0a 20 2d 20 52 65 74 75 72 6e 73  nal]). - Returns
2fd0: 20 74 68 65 20 70 61 72 61 6c 6c 65 6c 20 63 68   the parallel ch
2fe0: 6f 72 64 20 66 6f 72 20 6d 61 6a 6f 72 20 61 6e  ord for major an
2ff0: 64 20 6d 69 6e 6f 72 20 74 72 69 61 64 73 0a 0a  d minor triads..
3000: 2a 61 64 64 69 74 69 6f 6e 61 6c 2a 20 2d 20 4c  *additional* - L
3010: 69 6b 65 20 74 68 65 20 64 6f 6d 69 6e 61 6e 74  ike the dominant
3020: 27 73 0a 0a 23 23 23 23 20 43 68 6f 72 64 23 63  's..#### Chord#c
3030: 68 6f 72 64 54 79 70 65 28 29 0a 20 2d 20 52 65  hordType(). - Re
3040: 74 75 72 6e 73 20 74 68 65 20 74 79 70 65 20 6f  turns the type o
3050: 66 20 74 68 65 20 63 68 6f 72 64 3a 20 60 27 64  f the chord: `'d
3060: 79 61 64 27 60 2c 20 60 27 74 72 69 61 64 27 60  yad'`, `'triad'`
3070: 2c 20 60 27 74 72 69 63 68 6f 72 64 27 60 2c 0a  , `'trichord'`,.
3080: 20 60 27 74 65 74 72 61 64 27 60 20 6f 72 20 60   `'tetrad'` or `
3090: 27 75 6e 6b 6e 6f 77 6e 27 60 2e 0a 0a 23 23 23  'unknown'`...###
30a0: 23 20 43 68 6f 72 64 23 69 6e 74 65 72 76 61 6c  # Chord#interval
30b0: 28 69 6e 74 65 72 76 61 6c 29 0a 20 2d 20 52 65  (interval). - Re
30c0: 74 75 72 6e 73 20 74 68 65 20 73 61 6d 65 20 63  turns the same c
30d0: 68 6f 72 64 2c 20 61 20 60 69 6e 74 65 72 76 61  hord, a `interva
30e0: 6c 60 20 61 77 61 79 0a 0a 23 23 23 23 20 43 68  l` away..#### Ch
30f0: 6f 72 64 23 74 72 61 6e 73 70 6f 73 65 28 69 6e  ord#transpose(in
3100: 74 65 72 76 61 6c 29 0a 20 2d 20 4c 69 6b 65 20  terval). - Like 
3110: 74 68 65 20 60 23 69 6e 74 65 72 76 61 6c 60 20  the `#interval` 
3120: 6d 65 74 68 6f 64 2c 20 65 78 63 65 70 74 20 69  method, except i
3130: 74 27 73 20 60 74 68 69 73 60 20 63 68 6f 72 64  t's `this` chord
3140: 20 74 68 61 74 20 67 65 74 73 20 63 68 61 6e 67   that gets chang
3150: 65 64 20 69 6e 73 74 65 61 64 20 6f 66 0a 20 72  ed instead of. r
3160: 65 74 75 72 6e 69 6e 67 20 61 20 6e 65 77 20 63  eturning a new c
3170: 68 6f 72 64 2e 0a 0a 23 23 23 23 20 43 68 6f 72  hord...#### Chor
3180: 64 23 74 6f 53 74 72 69 6e 67 28 29 0a 20 2d 20  d#toString(). - 
3190: 53 69 6d 70 6c 65 20 75 73 61 62 69 6c 69 74 79  Simple usability
31a0: 20 66 75 6e 63 74 69 6f 6e 20 77 68 69 63 68 20   function which 
31b0: 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  is an alias for 
31c0: 43 68 6f 72 64 2e 6e 61 6d 65 0a 0a 0a 23 23 20  Chord.name...## 
31d0: 53 63 61 6c 65 28 74 6f 6e 69 63 2c 20 73 63 61  Scale(tonic, sca
31e0: 6c 65 29 0a 20 2d 20 54 68 65 20 74 65 6f 72 69  le). - The teori
31f0: 61 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  a representation
3200: 20 6f 66 20 61 20 73 63 61 6c 65 2c 20 77 69 74   of a scale, wit
3210: 68 20 61 20 67 69 76 65 6e 20 74 6f 6e 69 63 2e  h a given tonic.
3220: 0a 0a 2a 74 6f 6e 69 63 2a 20 2d 20 41 20 60 4e  ..*tonic* - A `N
3230: 6f 74 65 60 20 77 68 69 63 68 20 69 73 20 74 6f  ote` which is to
3240: 20 62 65 20 74 68 65 20 74 6f 6e 69 63 20 6f 66   be the tonic of
3250: 20 74 68 65 20 73 63 61 6c 65 0a 0a 2a 73 63 61   the scale..*sca
3260: 6c 65 2a 20 2d 20 43 61 6e 20 65 69 74 68 65 72  le* - Can either
3270: 20 62 65 20 61 20 6e 61 6d 65 20 6f 66 20 61 20   be a name of a 
3280: 73 63 61 6c 65 20 28 73 74 72 69 6e 67 29 2c 20  scale (string), 
3290: 6f 72 20 61 6e 20 61 72 72 61 79 20 6f 66 0a 61  or an array of.a
32a0: 62 73 6f 6c 75 74 65 20 69 6e 74 65 72 76 61 6c  bsolute interval
32b0: 73 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  s that defines t
32c0: 68 65 20 73 63 61 6c 65 2e 20 54 68 65 20 73 63  he scale. The sc
32d0: 61 6c 65 73 20 73 75 70 70 6f 72 74 65 64 20 62  ales supported b
32e0: 79 20 64 65 66 61 75 6c 74 20 61 72 65 3a 0a 0a  y default are:..
32f0: 20 2d 20 6d 61 6a 6f 72 0a 20 2d 20 6d 69 6e 6f   - major. - mino
3300: 72 0a 20 2d 20 69 6f 6e 69 61 6e 20 28 41 6c 69  r. - ionian (Ali
3310: 61 73 20 66 6f 72 20 6d 61 6a 6f 72 29 0a 20 2d  as for major). -
3320: 20 64 6f 72 69 61 6e 0a 20 2d 20 70 68 72 79 67   dorian. - phryg
3330: 69 61 6e 0a 20 2d 20 6c 79 64 69 61 6e 0a 20 2d  ian. - lydian. -
3340: 20 6d 69 78 6f 6c 79 64 69 61 6e 0a 20 2d 20 61   mixolydian. - a
3350: 65 6f 6c 69 61 6e 20 28 41 6c 69 61 73 20 66 6f  eolian (Alias fo
3360: 72 20 6d 69 6e 6f 72 29 0a 20 2d 20 6c 6f 63 72  r minor). - locr
3370: 69 61 6e 0a 20 2d 20 6d 61 6a 6f 72 70 65 6e 74  ian. - majorpent
3380: 61 74 6f 6e 69 63 0a 20 2d 20 6d 69 6e 6f 72 70  atonic. - minorp
3390: 65 6e 74 61 74 6f 6e 69 63 0a 20 2d 20 63 68 72  entatonic. - chr
33a0: 6f 6d 61 74 69 63 0a 20 2d 20 68 61 72 6d 6f 6e  omatic. - harmon
33b0: 69 63 63 68 72 6f 6d 61 74 69 63 20 28 41 6c 69  icchromatic (Ali
33c0: 61 73 20 66 6f 72 20 63 68 72 6f 6d 61 74 69 63  as for chromatic
33d0: 29 0a 20 2d 20 62 6c 75 65 73 0a 20 2d 20 64 6f  ). - blues. - do
33e0: 75 62 6c 65 68 61 72 6d 6f 6e 69 63 0a 20 2d 20  ubleharmonic. - 
33f0: 66 6c 61 6d 65 6e 63 6f 0a 20 2d 20 68 61 72 6d  flamenco. - harm
3400: 6f 6e 69 63 6d 69 6e 6f 72 0a 20 2d 20 6d 65 6c  onicminor. - mel
3410: 6f 64 69 63 6d 69 6e 6f 72 0a 20 2d 20 77 68 6f  odicminor. - who
3420: 6c 65 74 6f 6e 65 0a 0a 23 23 23 20 74 65 6f 72  letone..### teor
3430: 69 61 2e 73 63 61 6c 65 28 74 6f 6e 69 63 2c 20  ia.scale(tonic, 
3440: 73 63 61 6c 65 29 0a 20 2d 20 53 75 67 61 72 20  scale). - Sugar 
3450: 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 63 6f 6e  function for con
3460: 73 74 72 75 63 74 69 6e 67 20 61 20 6e 65 77 20  structing a new 
3470: 60 53 63 61 6c 65 60 20 6f 62 6a 65 63 74 0a 0a  `Scale` object..
3480: 23 23 23 23 20 74 65 6f 72 69 61 2e 53 63 61 6c  #### teoria.Scal
3490: 65 2e 4b 4e 4f 57 4e 5f 53 43 41 4c 45 53 0a 20  e.KNOWN_SCALES. 
34a0: 2d 20 41 6e 20 61 72 72 61 79 20 6f 66 20 61 6c  - An array of al
34b0: 6c 20 74 68 65 20 73 63 61 6c 65 20 49 44 27 73  l the scale ID's
34c0: 20 74 68 61 74 20 63 6f 6d 65 73 20 77 69 74 68   that comes with
34d0: 20 74 65 6f 72 69 61 0a 0a 23 23 23 23 20 53 63   teoria..#### Sc
34e0: 61 6c 65 2e 6e 61 6d 65 0a 20 2d 20 54 68 65 20  ale.name. - The 
34f0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63 61 6c  name of the scal
3500: 65 20 28 69 66 20 61 76 61 69 6c 61 62 6c 65 29  e (if available)
3510: 2e 20 54 79 70 65 20 60 73 74 72 69 6e 67 60 20  . Type `string` 
3520: 6f 72 20 60 75 6e 64 65 66 69 6e 65 64 60 0a 0a  or `undefined`..
3530: 23 23 23 23 20 53 63 61 6c 65 2e 74 6f 6e 69 63  #### Scale.tonic
3540: 0a 20 2d 20 54 68 65 20 60 4e 6f 74 65 60 20 77  . - The `Note` w
3550: 68 69 63 68 20 69 73 20 74 68 65 20 73 63 61 6c  hich is the scal
3560: 65 27 73 20 74 6f 6e 69 63 0a 0a 23 23 23 23 20  e's tonic..#### 
3570: 53 63 61 6c 65 23 6e 6f 74 65 73 28 29 0a 20 2d  Scale#notes(). -
3580: 20 52 65 74 75 72 6e 73 20 61 6e 20 61 72 72 61   Returns an arra
3590: 79 20 6f 66 20 60 4e 6f 74 65 60 73 20 77 68 69  y of `Note`s whi
35a0: 63 68 20 69 73 20 74 68 65 20 73 63 61 6c 65 27  ch is the scale'
35b0: 73 20 6e 6f 74 65 73 0a 0a 23 23 23 23 20 53 63  s notes..#### Sc
35c0: 61 6c 65 23 73 69 6d 70 6c 65 28 29 0a 20 2d 20  ale#simple(). - 
35d0: 52 65 74 75 72 6e 73 20 61 6e 20 60 41 72 72 61  Returns an `Arra
35e0: 79 60 20 6f 66 20 6f 6e 6c 79 20 74 68 65 20 6e  y` of only the n
35f0: 6f 74 65 73 27 20 6e 61 6d 65 73 2c 20 6e 6f 74  otes' names, not
3600: 20 74 68 65 20 66 75 6c 6c 20 60 4e 6f 74 65 60   the full `Note`
3610: 20 6f 62 6a 65 63 74 73 2e 0a 0a 23 23 23 23 20   objects...#### 
3620: 53 63 61 6c 65 23 74 79 70 65 28 29 0a 20 2d 20  Scale#type(). - 
3630: 52 65 74 75 72 6e 73 20 74 68 65 20 74 79 70 65  Returns the type
3640: 20 6f 66 20 74 68 65 20 73 63 61 6c 65 2c 20 64   of the scale, d
3650: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20  epending on the 
3660: 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 74 65 73 2e  number of notes.
3670: 0a 20 41 20 73 63 61 6c 65 20 6f 66 20 6c 65 6e  . A scale of len
3680: 67 74 68 20 78 20 67 69 76 65 73 20 79 3a 0a 20  gth x gives y:. 
3690: 20 2d 20 32 20 67 69 76 65 73 20 27 64 69 74 6f   - 2 gives 'dito
36a0: 6e 69 63 27 0a 20 20 2d 20 33 20 67 69 76 65 73  nic'.  - 3 gives
36b0: 20 27 74 72 69 74 6f 6e 69 63 27 0a 20 20 2d 20   'tritonic'.  - 
36c0: 34 20 67 69 76 65 73 20 27 74 65 74 72 61 74 6f  4 gives 'tetrato
36d0: 6e 69 63 27 0a 20 20 2d 20 35 20 67 69 76 65 73  nic'.  - 5 gives
36e0: 20 27 70 65 6e 74 61 74 6f 6e 69 63 27 0a 20 20   'pentatonic'.  
36f0: 2d 20 36 20 67 69 76 65 73 20 27 68 65 78 61 74  - 6 gives 'hexat
3700: 6f 6e 69 63 27 2c 0a 20 20 2d 20 37 20 67 69 76  onic',.  - 7 giv
3710: 65 73 20 27 68 65 70 74 61 74 6f 6e 69 63 27 2c  es 'heptatonic',
3720: 0a 20 20 2d 20 38 20 67 69 76 65 73 20 27 6f 63  .  - 8 gives 'oc
3730: 74 61 74 6f 6e 69 63 27 0a 0a 23 23 23 23 20 53  tatonic'..#### S
3740: 63 61 6c 65 23 67 65 74 28 69 6e 64 65 78 29 0a  cale#get(index).
3750: 20 2d 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e   - Returns the n
3760: 6f 74 65 20 61 74 20 74 68 65 20 67 69 76 65 6e  ote at the given
3770: 20 73 63 61 6c 65 20 69 6e 64 65 78 0a 0a 2a 69   scale index..*i
3780: 6e 64 65 78 2a 20 2d 20 43 61 6e 20 62 65 20 61  ndex* - Can be a
3790: 20 6e 75 6d 62 65 72 20 72 65 66 65 72 72 69 6e   number referrin
37a0: 67 20 74 6f 20 74 68 65 20 73 63 61 6c 65 20 73  g to the scale s
37b0: 74 65 70 2c 20 6f 72 20 74 68 65 20 6e 61 6d 65  tep, or the name
37c0: 20 28 73 74 72 69 6e 67 29 20 6f 66 20 74 68 65   (string) of the
37d0: 0a 73 63 61 6c 65 20 73 74 65 70 2e 20 45 2e 67  .scale step. E.g
37e0: 2e 20 27 66 69 72 73 74 27 2c 20 27 73 65 63 6f  . 'first', 'seco
37f0: 6e 64 27 2c 20 27 66 6f 75 72 74 68 27 2c 20 27  nd', 'fourth', '
3800: 73 65 76 65 6e 74 68 27 2e 0a 0a 23 23 23 23 20  seventh'...#### 
3810: 53 63 61 6c 65 23 73 6f 6c 66 65 67 65 28 69 6e  Scale#solfege(in
3820: 64 65 78 2c 20 73 68 6f 77 4f 63 74 61 76 65 73  dex, showOctaves
3830: 29 0a 20 2d 20 52 65 74 75 72 6e 73 20 74 68 65  ). - Returns the
3840: 20 73 6f 6c 66 65 67 65 20 6e 61 6d 65 20 6f 66   solfege name of
3850: 20 74 68 65 20 67 69 76 65 6e 20 73 63 61 6c 65   the given scale
3860: 20 73 74 65 70 0a 0a 2a 69 6e 64 65 78 2a 20 53   step..*index* S
3870: 61 6d 65 20 61 73 20 60 53 63 61 6c 65 23 67 65  ame as `Scale#ge
3880: 74 60 0a 0a 2a 73 68 6f 77 4f 63 74 61 76 65 73  t`..*showOctaves
3890: 2a 20 2d 20 41 20 62 6f 6f 6c 65 61 6e 20 6d 65  * - A boolean me
38a0: 61 6e 69 6e 67 20 74 68 65 20 73 61 6d 65 20 61  aning the same a
38b0: 73 20 60 73 68 6f 77 4f 63 74 61 76 65 73 60 20  s `showOctaves` 
38c0: 69 6e 20 60 4e 6f 74 65 23 73 6f 6c 66 65 67 65  in `Note#solfege
38d0: 60 0a 0a 0a 23 23 20 74 65 6f 72 69 61 2e 69 6e  `...## teoria.in
38e0: 74 65 72 76 61 6c 28 66 72 6f 6d 2c 20 74 6f 29  terval(from, to)
38f0: 0a 20 2d 20 41 20 73 75 67 61 72 20 66 75 6e 63  . - A sugar func
3900: 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 60 23 66  tion for the `#f
3910: 72 6f 6d 60 20 61 6e 64 20 60 23 62 65 74 77 65  rom` and `#betwe
3920: 65 6e 60 20 6d 65 74 68 6f 64 73 20 6f 66 20 74  en` methods of t
3930: 68 65 20 73 61 6d 65 20 6e 61 6d 65 73 70 61 63  he same namespac
3940: 65 20 61 6e 64 0a 20 66 6f 72 20 63 72 65 61 74  e and. for creat
3950: 69 6e 67 20 60 49 6e 74 65 72 76 61 6c 60 20 6f  ing `Interval` o
3960: 62 6a 65 63 74 73 2e 0a 0a 23 23 23 23 20 74 65  bjects...#### te
3970: 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 60 73  oria.interval(`s
3980: 74 72 69 6e 67 60 3a 20 66 72 6f 6d 29 0a 20 2d  tring`: from). -
3990: 20 41 20 73 75 67 61 72 20 6d 65 74 68 6f 64 20   A sugar method 
39a0: 66 6f 72 20 74 68 65 20 60 49 6e 74 65 72 76 61  for the `Interva
39b0: 6c 2e 74 6f 43 6f 6f 72 64 60 20 66 75 6e 63 74  l.toCoord` funct
39c0: 69 6f 6e 0a 0a 23 23 23 23 20 74 65 6f 72 69 61  ion..#### teoria
39d0: 2e 69 6e 74 65 72 76 61 6c 28 60 4e 6f 74 65 60  .interval(`Note`
39e0: 3a 20 66 72 6f 6d 2c 20 60 73 74 72 69 6e 67 60  : from, `string`
39f0: 3a 20 74 6f 29 0a 20 2d 20 41 20 73 75 67 61 72  : to). - A sugar
3a00: 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 65 20   method for the 
3a10: 60 49 6e 74 65 72 76 61 6c 2e 66 72 6f 6d 60 20  `Interval.from` 
3a20: 66 75 6e 63 74 69 6f 6e 0a 0a 23 23 23 23 20 74  function..#### t
3a30: 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 60  eoria.interval(`
3a40: 4e 6f 74 65 60 3a 20 66 72 6f 6d 2c 20 60 49 6e  Note`: from, `In
3a50: 74 65 72 76 61 6c 60 3a 20 74 6f 29 0a 20 2d 20  terval`: to). - 
3a60: 4c 69 6b 65 20 61 62 6f 76 65 2c 20 62 75 74 20  Like above, but 
3a70: 77 69 74 68 20 61 20 60 49 6e 74 65 72 76 61 6c  with a `Interval
3a80: 60 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 73  ` instead of a s
3a90: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
3aa0: 74 69 6f 6e 20 6f 66 0a 20 74 68 65 20 69 6e 74  tion of. the int
3ab0: 65 72 76 61 6c 0a 0a 23 23 23 23 20 74 65 6f 72  erval..#### teor
3ac0: 69 61 2e 69 6e 74 65 72 76 61 6c 28 60 4e 6f 74  ia.interval(`Not
3ad0: 65 60 3a 20 66 72 6f 6d 2c 20 60 4e 6f 74 65 60  e`: from, `Note`
3ae0: 3a 20 74 6f 29 0a 20 2d 20 41 20 73 75 67 61 72  : to). - A sugar
3af0: 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 65 20   method for the 
3b00: 60 49 6e 74 65 72 76 61 6c 2e 62 65 74 77 65 65  `Interval.betwee
3b10: 6e 60 20 66 75 6e 63 74 69 6f 6e 0a 0a 23 23 23  n` function..###
3b20: 23 23 20 74 65 6f 72 69 61 2e 69 6e 74 65 72 76  ## teoria.interv
3b30: 61 6c 2e 66 72 6f 6d 20 2d 3e 20 49 6e 74 65 72  al.from -> Inter
3b40: 76 61 6c 2e 66 72 6f 6d 0a 23 23 23 23 23 20 74  val.from.##### t
3b50: 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 2e 62  eoria.interval.b
3b60: 65 74 77 65 65 6e 20 2d 3e 20 49 6e 74 65 72 76  etween -> Interv
3b70: 61 6c 2e 62 65 74 77 65 65 6e 0a 23 23 23 23 23  al.between.#####
3b80: 20 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c   teoria.interval
3b90: 2e 69 6e 76 65 72 74 20 2d 3e 20 49 6e 74 65 72  .invert -> Inter
3ba0: 76 61 6c 2e 69 6e 76 65 72 74 0a 23 23 23 23 23  val.invert.#####
3bb0: 20 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c   teoria.interval
3bc0: 2e 74 6f 43 6f 6f 72 64 20 2d 3e 20 49 6e 74 65  .toCoord -> Inte
3bd0: 72 76 61 6c 2e 74 6f 43 6f 6f 72 64 0a 0a 0a 23  rval.toCoord...#
3be0: 23 20 49 6e 74 65 72 76 61 6c 28 63 6f 6f 72 64  # Interval(coord
3bf0: 29 0a 20 2d 20 41 20 72 65 70 72 65 73 65 6e 74  ). - A represent
3c00: 61 74 69 6f 6e 20 6f 66 20 61 20 6d 75 73 69 63  ation of a music
3c10: 20 69 6e 74 65 72 76 61 6c 0a 0a 23 23 23 20 49   interval..### I
3c20: 6e 74 65 72 76 61 6c 2e 74 6f 43 6f 6f 72 64 28  nterval.toCoord(
3c30: 73 69 6d 70 6c 65 49 6e 74 65 72 76 61 6c 29 0a  simpleInterval).
3c40: 20 2d 20 52 65 74 75 72 6e 73 20 61 20 60 49 6e   - Returns a `In
3c50: 74 65 72 76 61 6c 60 20 72 65 70 72 65 73 65 6e  terval` represen
3c60: 74 69 6e 67 20 74 68 65 20 69 6e 74 65 72 76 61  ting the interva
3c70: 6c 20 65 78 70 72 65 73 73 65 64 20 69 6e 20 73  l expressed in s
3c80: 74 72 69 6e 67 20 66 6f 72 6d 2e 0a 0a 23 23 23  tring form...###
3c90: 20 49 6e 74 65 72 76 61 6c 2e 66 72 6f 6d 28 66   Interval.from(f
3ca0: 72 6f 6d 2c 20 74 6f 29 0a 20 2d 20 52 65 74 75  rom, to). - Retu
3cb0: 72 6e 73 20 61 20 6e 6f 74 65 20 77 68 69 63 68  rns a note which
3cc0: 20 69 73 20 61 20 67 69 76 65 6e 20 69 6e 74 65   is a given inte
3cd0: 72 76 61 6c 20 61 77 61 79 20 66 72 6f 6d 20 61  rval away from a
3ce0: 20 72 6f 6f 74 20 6e 6f 74 65 2e 0a 0a 2a 66 72   root note...*fr
3cf0: 6f 6d 2a 20 2d 20 54 68 65 20 60 4e 6f 74 65 60  om* - The `Note`
3d00: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 72 6f   which is the ro
3d10: 6f 74 20 6f 66 20 74 68 65 20 6d 65 61 73 75 72  ot of the measur
3d20: 69 6e 67 0a 0a 2a 74 6f 2a 20 2d 20 41 20 60 49  ing..*to* - A `I
3d30: 6e 74 65 72 76 61 6c 60 0a 0a 23 23 23 20 49 6e  nterval`..### In
3d40: 74 65 72 76 61 6c 2e 62 65 74 77 65 65 6e 28 66  terval.between(f
3d50: 72 6f 6d 2c 20 74 6f 29 0a 20 2d 20 52 65 74 75  rom, to). - Retu
3d60: 72 6e 73 20 61 6e 20 69 6e 74 65 72 76 61 6c 20  rns an interval 
3d70: 6f 62 6a 65 63 74 20 77 68 69 63 68 20 72 65 70  object which rep
3d80: 72 65 73 65 6e 74 73 20 74 68 65 20 69 6e 74 65  resents the inte
3d90: 72 76 61 6c 20 62 65 74 77 65 65 6e 20 74 77 6f  rval between two
3da0: 20 6e 6f 74 65 73 2e 0a 0a 2a 66 72 6f 6d 2a 20   notes...*from* 
3db0: 61 6e 64 20 2a 74 6f 2a 20 61 72 65 20 74 77 6f  and *to* are two
3dc0: 20 60 4e 6f 74 65 60 73 20 77 68 69 63 68 20 61   `Note`s which a
3dd0: 72 65 20 74 68 65 20 6e 6f 74 65 73 20 74 68 61  re the notes tha
3de0: 74 20 74 68 65 0a 69 6e 74 65 72 76 61 6c 20 69  t the.interval i
3df0: 73 20 6d 65 61 73 75 72 65 64 20 66 72 6f 6d 2e  s measured from.
3e00: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 69 66 20   For example if 
3e10: 27 61 27 20 61 6e 64 20 27 63 27 20 61 72 65 20  'a' and 'c' are 
3e20: 67 69 76 65 6e 2c 20 74 68 65 20 72 65 73 75 6c  given, the resul
3e30: 74 69 6e 67 0a 69 6e 74 65 72 76 61 6c 20 6f 62  ting.interval ob
3e40: 6a 65 63 74 20 77 6f 75 6c 64 20 72 65 70 72 65  ject would repre
3e50: 73 65 6e 74 20 61 20 6d 69 6e 6f 72 20 74 68 69  sent a minor thi
3e60: 72 64 2e 0a 0a 60 60 60 6a 61 76 61 73 63 72 69  rd...```javascri
3e70: 70 74 0a 49 6e 74 65 72 76 61 6c 2e 62 65 74 77  pt.Interval.betw
3e80: 65 65 6e 28 74 65 6f 72 69 61 2e 6e 6f 74 65 28  een(teoria.note(
3e90: 22 61 22 29 2c 20 74 65 6f 72 69 61 2e 6e 6f 74  "a"), teoria.not
3ea0: 65 28 22 63 27 22 29 29 20 2d 3e 20 74 65 6f 72  e("c'")) -> teor
3eb0: 69 61 2e 69 6e 74 65 72 76 61 6c 28 27 6d 33 27  ia.interval('m3'
3ec0: 29 0a 60 60 60 0a 0a 23 23 23 20 49 6e 74 65 72  ).```..### Inter
3ed0: 76 61 6c 2e 69 6e 76 65 72 74 28 73 69 6d 70 6c  val.invert(simpl
3ee0: 65 49 6e 74 65 72 76 61 6c 29 0a 20 2d 20 52 65  eInterval). - Re
3ef0: 74 75 72 6e 73 20 74 68 65 20 69 6e 76 65 72 73  turns the invers
3f00: 69 6f 6e 20 6f 66 20 74 68 65 20 69 6e 74 65 72  ion of the inter
3f10: 76 61 6c 20 70 72 6f 76 69 64 65 64 0a 0a 2a 73  val provided..*s
3f20: 69 6d 70 6c 65 49 6e 74 65 72 76 61 6c 2a 20 2d  impleInterval* -
3f30: 20 41 6e 20 69 6e 74 65 72 76 61 6c 20 72 65 70   An interval rep
3f40: 72 65 73 65 6e 74 65 64 20 69 6e 20 73 69 6d 70  resented in simp
3f50: 6c 65 20 73 74 72 69 6e 67 20 66 6f 72 6d 2e 20  le string form. 
3f60: 45 78 61 6d 70 6c 65 73 3a 0a 0a 20 2d 20 27 6d  Examples:.. - 'm
3f70: 33 27 20 3d 20 6d 69 6e 6f 72 20 74 68 69 72 64  3' = minor third
3f80: 0a 20 2d 20 27 50 34 27 20 3d 20 70 65 72 66 65  . - 'P4' = perfe
3f90: 63 74 20 66 6f 75 72 74 68 0a 20 2d 20 27 41 34  ct fourth. - 'A4
3fa0: 27 20 3d 20 61 75 67 6d 65 6e 74 65 64 20 66 69  ' = augmented fi
3fb0: 66 74 68 0a 20 2d 20 27 64 37 27 20 3d 20 64 69  fth. - 'd7' = di
3fc0: 6d 69 6e 69 73 68 65 64 20 73 65 76 65 6e 74 68  minished seventh
3fd0: 0a 20 2d 20 27 4d 36 27 20 3d 20 6d 61 6a 6f 72  . - 'M6' = major
3fe0: 20 73 69 78 74 68 2e 0a 0a 60 27 6d 27 20 3d 20   sixth...`'m' = 
3ff0: 6d 69 6e 6f 72 60 2c 20 60 27 4d 27 20 3d 20 6d  minor`, `'M' = m
4000: 61 6a 6f 72 60 2c 20 60 27 41 27 20 3d 20 61 75  ajor`, `'A' = au
4010: 67 6d 65 6e 74 65 64 60 20 61 6e 64 0a 60 27 64  gmented` and.`'d
4020: 27 20 3d 20 64 69 6d 69 6e 69 73 68 65 64 60 0a  ' = diminished`.
4030: 0a 54 68 65 20 6e 75 6d 62 65 72 20 6d 61 79 20  .The number may 
4040: 62 65 20 70 72 65 66 69 78 65 64 20 77 69 74 68  be prefixed with
4050: 20 61 20 60 2d 60 20 74 6f 20 73 69 67 6e 69 66   a `-` to signif
4060: 79 20 74 68 61 74 20 69 74 73 20 64 69 72 65 63  y that its direc
4070: 74 69 6f 6e 20 69 73 20 64 6f 77 6e 2e 20 45 2e  tion is down. E.
4080: 67 2e 3a 0a 0a 60 6d 2d 33 60 20 6d 65 61 6e 73  g.:..`m-3` means
4090: 20 61 20 64 65 73 63 65 6e 64 69 6e 67 20 6d 69   a descending mi
40a0: 6e 6f 72 20 74 68 69 72 64 2c 20 61 6e 64 20 60  nor third, and `
40b0: 50 2d 35 60 20 6d 65 61 6e 73 20 61 20 64 65 73  P-5` means a des
40c0: 63 65 6e 64 69 6e 67 20 70 65 72 66 65 63 74 20  cending perfect 
40d0: 66 69 66 74 68 2e 0a 0a 23 23 23 23 20 49 6e 74  fifth...#### Int
40e0: 65 72 76 61 6c 2e 63 6f 6f 72 64 0a 20 2d 20 54  erval.coord. - T
40f0: 68 65 20 69 6e 74 65 72 76 61 6c 20 72 65 70 72  he interval repr
4100: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
4110: 65 20 69 6e 74 65 72 76 61 6c 0a 0a 23 23 23 23  e interval..####
4120: 20 49 6e 74 65 72 76 61 6c 2e 6e 75 6d 62 65 72   Interval.number
4130: 28 29 0a 20 2d 20 54 68 65 20 69 6e 74 65 72 76  (). - The interv
4140: 61 6c 20 6e 75 6d 62 65 72 20 28 41 20 6e 69 6e  al number (A nin
4150: 74 68 20 3d 20 39 2c 20 41 20 73 65 76 65 6e 74  th = 9, A sevent
4160: 68 20 3d 20 37 2c 20 66 69 66 74 65 65 6e 74 68  h = 7, fifteenth
4170: 20 3d 20 31 35 29 0a 0a 23 23 23 23 20 49 6e 74   = 15)..#### Int
4180: 65 72 76 61 6c 2e 76 61 6c 75 65 28 29 0a 20 2d  erval.value(). -
4190: 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   The value of th
41a0: 65 20 69 6e 74 65 72 76 61 6c 20 2d 20 54 68 61  e interval - Tha
41b0: 74 20 69 73 20 61 20 6e 69 6e 74 68 20 3d 20 39  t is a ninth = 9
41c0: 2c 20 62 75 74 20 61 20 64 6f 77 6e 77 61 72 64  , but a downward
41d0: 73 20 6e 69 6e 74 68 20 69 73 20 3d 20 2d 39 0a  s ninth is = -9.
41e0: 0a 23 23 23 23 20 49 6e 74 65 72 76 61 6c 2e 74  .#### Interval.t
41f0: 6f 53 74 72 69 6e 67 28 29 0a 20 2d 20 52 65 74  oString(). - Ret
4200: 75 72 6e 73 20 74 68 65 20 2a 73 69 6d 70 6c 65  urns the *simple
4210: 49 6e 74 65 72 76 61 6c 2a 20 72 65 70 72 65 73  Interval* repres
4220: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
4230: 69 6e 74 65 72 76 61 6c 2e 20 45 2e 67 2e 20 60  interval. E.g. `
4240: 27 50 35 27 60 2c 0a 20 60 27 4d 33 27 60 2c 20  'P5'`,. `'M3'`, 
4250: 60 27 41 39 27 60 2c 20 65 74 63 2e 0a 0a 23 23  `'A9'`, etc...##
4260: 23 23 20 49 6e 74 65 72 76 61 6c 2e 62 61 73 65  ## Interval.base
4270: 28 29 0a 20 2d 20 52 65 74 75 72 6e 73 20 74 68  (). - Returns th
4280: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 69  e name of the si
4290: 6d 70 6c 65 20 69 6e 74 65 72 76 61 6c 20 28 6e  mple interval (n
42a0: 6f 74 20 63 6f 6d 70 6f 75 6e 64 29 0a 0a 23 23  ot compound)..##
42b0: 23 23 20 49 6e 74 65 72 76 61 6c 2e 74 79 70 65  ## Interval.type
42c0: 28 29 0a 20 2d 20 52 65 74 75 72 6e 73 20 74 68  (). - Returns th
42d0: 65 20 74 79 70 65 20 6f 66 20 61 72 72 61 79 2c  e type of array,
42e0: 20 65 69 74 68 65 72 20 60 27 70 65 72 66 65 63   either `'perfec
42f0: 74 27 60 20 28 31 2c 20 34 2c 20 35 2c 20 38 29  t'` (1, 4, 5, 8)
4300: 20 6f 72 20 60 27 6d 69 6e 6f 72 27 60 20 28 32   or `'minor'` (2
4310: 2c 20 33 2c 20 36 2c 20 37 29 0a 0a 23 23 23 23  , 3, 6, 7)..####
4320: 20 49 6e 74 65 72 76 61 6c 2e 71 75 61 6c 69 74   Interval.qualit
4330: 79 28 5b 76 65 72 62 6f 73 65 5d 29 0a 20 2d 20  y([verbose]). - 
4340: 54 68 65 20 71 75 61 6c 69 74 79 20 6f 66 20 74  The quality of t
4350: 68 65 20 69 6e 74 65 72 76 61 6c 20 28 60 27 64  he interval (`'d
4360: 64 27 60 2c 20 60 27 64 27 60 20 60 27 6d 27 60  d'`, `'d'` `'m'`
4370: 2c 20 60 27 50 27 60 2c 20 60 27 4d 27 60 2c 20  , `'P'`, `'M'`, 
4380: 60 27 41 27 60 20 6f 72 20 60 27 41 41 27 60 29  `'A'` or `'AA'`)
4390: 0a 0a 2a 76 65 72 62 6f 73 65 2a 20 20 69 73 20  ..*verbose*  is 
43a0: 73 65 74 20 74 6f 20 61 20 74 72 75 69 73 68 20  set to a truish 
43b0: 76 61 6c 75 65 2c 20 74 68 65 6e 20 6c 6f 6e 67  value, then long
43c0: 20 71 75 61 6c 69 74 79 20 6e 61 6d 65 73 20 61   quality names a
43d0: 72 65 20 72 65 74 75 72 6e 65 64 3a 0a 20 60 27  re returned:. `'
43e0: 64 6f 75 62 6c 79 20 64 69 6d 69 6e 69 73 68 65  doubly diminishe
43f0: 64 27 60 2c 20 60 27 64 69 6d 69 6e 69 73 68 65  d'`, `'diminishe
4400: 64 27 60 2c 20 60 27 6d 69 6e 6f 72 27 60 2c 20  d'`, `'minor'`, 
4410: 65 74 63 2e 0a 0a 23 23 23 23 20 49 6e 74 65 72  etc...#### Inter
4420: 76 61 6c 2e 64 69 72 65 63 74 69 6f 6e 28 5b 64  val.direction([d
4430: 69 72 5d 29 0a 20 2d 20 54 68 65 20 64 69 72 65  ir]). - The dire
4440: 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 69 6e 74  ction of the int
4450: 65 72 76 61 6c 0a 0a 2a 64 69 72 2a 20 2d 20 49  erval..*dir* - I
4460: 66 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 6e  f supplied, then
4470: 20 74 68 65 20 69 6e 74 65 72 76 61 6c 27 73 20   the interval's 
4480: 64 69 72 65 63 74 69 6f 6e 20 69 73 20 74 6f 20  direction is to 
4490: 74 68 65 20 60 6e 65 77 44 69 72 65 63 74 69 6f  the `newDirectio
44a0: 6e 60 0a 77 68 69 63 68 20 69 73 20 65 69 74 68  n`.which is eith
44b0: 65 72 20 60 27 75 70 27 60 20 6f 72 20 60 27 64  er `'up'` or `'d
44c0: 6f 77 6e 27 60 0a 0a 23 23 23 23 20 49 6e 74 65  own'`..#### Inte
44d0: 72 76 61 6c 23 73 65 6d 69 74 6f 6e 65 73 28 29  rval#semitones()
44e0: 0a 20 2d 20 52 65 74 75 72 6e 73 20 74 68 65 20  . - Returns the 
44f0: 60 6e 75 6d 62 65 72 60 20 6f 66 20 73 65 6d 69  `number` of semi
4500: 74 6f 6e 65 73 20 74 68 65 20 69 6e 74 65 72 76  tones the interv
4510: 61 6c 20 73 70 61 6e 2e 0a 0a 23 23 23 23 20 49  al span...#### I
4520: 6e 74 65 72 76 61 6c 23 73 69 6d 70 6c 65 28 5b  nterval#simple([
4530: 69 67 6e 6f 72 65 44 69 72 65 63 74 69 6f 6e 5d  ignoreDirection]
4540: 29 0a 20 2d 20 52 65 74 75 72 6e 73 20 74 68 65  ). - Returns the
4550: 20 73 69 6d 70 6c 65 20 70 61 72 74 20 6f 66 20   simple part of 
4560: 74 68 65 20 69 6e 74 65 72 76 61 6c 20 61 73 20  the interval as 
4570: 61 20 49 6e 74 65 72 76 61 6c 2e 20 45 78 61 6d  a Interval. Exam
4580: 70 6c 65 3a 0a 0a 2a 69 67 6e 6f 72 65 44 69 72  ple:..*ignoreDir
4590: 65 63 74 69 6f 6e 2a 20 2d 20 41 6e 20 6f 70 74  ection* - An opt
45a0: 69 6f 6e 61 6c 20 62 6f 6f 6c 65 61 6e 20 74 68  ional boolean th
45b0: 61 74 2c 20 69 66 20 73 65 74 20 74 6f 20 60 74  at, if set to `t
45c0: 72 75 65 60 2c 20 72 65 74 75 72 6e 73 20 74 68  rue`, returns th
45d0: 65 0a 22 64 69 72 65 63 74 69 6f 6e 2d 61 67 6e  e."direction-agn
45e0: 6f 73 74 69 63 22 20 69 6e 74 65 72 76 61 6c 2e  ostic" interval.
45f0: 20 54 68 61 74 20 69 73 20 74 68 65 20 69 6e 74   That is the int
4600: 65 72 76 61 6c 20 77 69 74 68 20 61 20 70 6f 73  erval with a pos
4610: 69 74 69 76 65 20 6e 75 6d 62 65 72 2e 0a 0a 60  itive number...`
4620: 60 60 6a 61 76 61 73 63 72 69 70 74 0a 74 65 6f  ``javascript.teo
4630: 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 27 4d 31  ria.interval('M1
4640: 37 27 29 2e 73 69 6d 70 6c 65 28 29 3b 20 20 20  7').simple();   
4650: 20 2f 2f 20 23 2d 3e 20 27 4d 33 27 0a 74 65 6f   // #-> 'M3'.teo
4660: 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 27 6d 32  ria.interval('m2
4670: 33 27 29 2e 73 69 6d 70 6c 65 28 29 3b 20 20 20  3').simple();   
4680: 20 2f 2f 20 23 2d 3e 20 27 6d 32 27 0a 74 65 6f   // #-> 'm2'.teo
4690: 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 27 50 35  ria.interval('P5
46a0: 27 29 2e 73 69 6d 70 6c 65 28 29 3b 20 20 20 20  ').simple();    
46b0: 20 2f 2f 20 23 2d 3e 20 27 50 35 27 0a 74 65 6f   // #-> 'P5'.teo
46c0: 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 27 50 2d  ria.interval('P-
46d0: 34 27 29 2e 73 69 6d 70 6c 65 28 29 3b 20 20 20  4').simple();   
46e0: 20 2f 2f 20 23 2d 3e 20 27 50 2d 34 27 0a 0a 2f   // #-> 'P-4'../
46f0: 2f 20 57 69 74 68 20 69 67 6e 6f 72 65 44 69 72  / With ignoreDir
4700: 65 63 74 69 6f 6e 20 3d 20 74 72 75 65 0a 74 65  ection = true.te
4710: 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 27 4d  oria.interval('M
4720: 33 27 29 2e 73 69 6d 70 6c 65 28 74 72 75 65 29  3').simple(true)
4730: 3b 20 20 20 20 20 2f 2f 20 23 2d 3e 27 4d 33 27  ;     // #->'M3'
4740: 0a 74 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c  .teoria.interval
4750: 28 27 6d 2d 31 30 27 29 2e 73 69 6d 70 6c 65 28  ('m-10').simple(
4760: 74 72 75 65 29 3b 20 20 20 2f 2f 20 23 2d 3e 20  true);   // #-> 
4770: 27 6d 33 27 0a 60 60 60 0a 0a 2a 4e 42 3a 2a 20  'm3'.```..*NB:* 
4780: 4e 6f 74 65 20 74 68 61 74 20 61 62 6f 76 65 20  Note that above 
4790: 72 65 74 75 72 6e 65 64 20 72 65 73 75 6c 74 73  returned results
47a0: 20 61 72 65 20 70 73 65 75 64 6f 2d 72 65 73 75   are pseudo-resu
47b0: 6c 74 73 2c 20 61 73 20 74 68 65 79 20 77 69 6c  lts, as they wil
47c0: 6c 20 62 65 0a 72 65 74 75 72 6e 65 64 20 77 72  l be.returned wr
47d0: 61 70 70 65 64 20 69 6e 20 60 49 6e 74 65 72 76  apped in `Interv
47e0: 61 6c 60 20 6f 62 6a 65 63 74 73 2e 0a 0a 23 23  al` objects...##
47f0: 23 23 20 49 6e 74 65 72 76 61 6c 23 6f 63 74 61  ## Interval#octa
4800: 76 65 73 28 29 0a 20 2d 20 52 65 74 75 72 6e 73  ves(). - Returns
4810: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
4820: 6f 6d 70 6f 75 6e 64 20 69 6e 74 65 72 76 61 6c  ompound interval
4830: 73 0a 0a 23 23 23 23 20 49 6e 74 65 72 76 61 6c  s..#### Interval
4840: 23 69 73 43 6f 6d 70 6f 75 6e 64 28 29 0a 20 2d  #isCompound(). -
4850: 20 52 65 74 75 72 6e 73 20 61 20 62 6f 6f 6c 65   Returns a boole
4860: 61 6e 20 76 61 6c 75 65 2c 20 73 68 6f 77 69 6e  an value, showin
4870: 67 20 69 66 20 74 68 65 20 69 6e 74 65 72 76 61  g if the interva
4880: 6c 20 69 73 20 61 20 63 6f 6d 70 6f 75 6e 64 20  l is a compound 
4890: 69 6e 74 65 72 76 61 6c 0a 0a 23 23 23 23 20 49  interval..#### I
48a0: 6e 74 65 72 76 61 6c 23 61 64 64 28 69 6e 74 65  nterval#add(inte
48b0: 72 76 61 6c 29 0a 20 2d 20 41 64 64 73 20 74 68  rval). - Adds th
48c0: 65 20 60 69 6e 74 65 72 76 61 6c 60 20 74 6f 20  e `interval` to 
48d0: 74 68 69 73 20 69 6e 74 65 72 76 61 6c 2c 20 61  this interval, a
48e0: 6e 64 20 72 65 74 75 72 6e 73 20 61 20 60 49 6e  nd returns a `In
48f0: 74 65 72 76 61 6c 60 0a 20 72 65 70 72 65 73 65  terval`. represe
4900: 6e 74 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74  nting the result
4910: 20 6f 66 20 74 68 65 20 61 64 64 69 74 69 6f 6e   of the addition
4920: 0a 0a 23 23 23 23 20 49 6e 74 65 72 76 61 6c 23  ..#### Interval#
4930: 65 71 75 61 6c 28 69 6e 74 65 72 76 61 6c 29 0a  equal(interval).
4940: 20 2d 20 52 65 74 75 72 6e 73 20 74 72 75 65 20   - Returns true 
4950: 69 66 20 74 68 65 20 73 75 70 70 6c 69 65 64 20  if the supplied 
4960: 60 69 6e 74 65 72 76 61 6c 60 20 69 73 20 65 71  `interval` is eq
4970: 75 61 6c 20 74 6f 20 74 68 69 73 20 69 6e 74 65  ual to this inte
4980: 72 76 61 6c 0a 0a 23 23 23 23 20 49 6e 74 65 72  rval..#### Inter
4990: 76 61 6c 23 67 72 65 61 74 65 72 28 69 6e 74 65  val#greater(inte
49a0: 72 76 61 6c 29 0a 20 2d 20 52 65 74 75 72 6e 73  rval). - Returns
49b0: 20 74 72 75 65 20 69 66 20 74 68 65 20 73 75 70   true if the sup
49c0: 70 6c 69 65 64 20 60 69 6e 74 65 72 76 61 6c 60  plied `interval`
49d0: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
49e0: 20 74 68 69 73 20 69 6e 74 65 72 76 61 6c 0a 0a   this interval..
49f0: 23 23 23 23 20 49 6e 74 65 72 76 61 6c 23 73 6d  #### Interval#sm
4a00: 61 6c 6c 65 72 28 69 6e 74 65 72 76 61 6c 29 0a  aller(interval).
4a10: 20 2d 20 52 65 74 75 72 6e 73 20 74 72 75 65 20   - Returns true 
4a20: 69 66 20 74 68 65 20 73 75 70 70 6c 69 65 64 20  if the supplied 
4a30: 60 69 6e 74 65 72 76 61 6c 60 20 69 73 20 73 6d  `interval` is sm
4a40: 61 6c 6c 65 72 20 74 68 61 6e 20 74 68 69 73 20  aller than this 
4a50: 69 6e 74 65 72 76 61 6c 0a 0a 23 23 23 23 20 49  interval..#### I
4a60: 6e 74 65 72 76 61 6c 23 69 6e 76 65 72 74 28 29  nterval#invert()
4a70: 0a 20 2d 20 52 65 74 75 72 6e 73 20 74 68 65 20  . - Returns the 
4a80: 69 6e 76 65 72 74 65 64 20 69 6e 74 65 72 76 61  inverted interva
4a90: 6c 20 61 73 20 61 20 60 49 6e 74 65 72 76 61 6c  l as a `Interval
4aa0: 60 0a 0a 23 23 23 23 20 49 6e 74 65 72 76 61 6c  `..#### Interval
4ab0: 23 71 75 61 6c 69 74 79 56 61 6c 75 65 28 29 20  #qualityValue() 
4ac0: 2d 20 2a 69 6e 74 65 72 6e 61 6c 2a 0a 20 2d 20  - *internal*. - 
4ad0: 52 65 74 75 72 6e 73 20 74 68 65 20 72 65 6c 61  Returns the rela
4ae0: 74 69 76 65 20 74 6f 20 64 65 66 61 75 6c 74 2c  tive to default,
4af0: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 71 75   value of the qu
4b00: 61 6c 69 74 79 2e 0a 20 45 2e 67 2e 20 61 20 74  ality.. E.g. a t
4b10: 65 6f 72 69 61 2e 69 6e 74 65 72 76 61 6c 28 27  eoria.interval('
4b20: 4d 36 27 29 2c 20 77 69 6c 6c 20 68 61 76 65 20  M6'), will have 
4b30: 61 20 72 65 6c 61 74 69 76 65 20 71 75 61 6c 69  a relative quali
4b40: 74 79 20 76 61 6c 75 65 20 6f 66 20 31 2c 20 61  ty value of 1, a
4b50: 73 20 61 6c 6c 20 74 68 65 0a 20 69 6e 74 65 72  s all the. inter
4b60: 76 61 6c 73 20 64 65 66 61 75 6c 74 73 20 74 6f  vals defaults to
4b70: 20 6d 69 6e 6f 72 20 61 6e 64 20 70 65 72 66 65   minor and perfe
4b80: 63 74 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  ct respectively.
4b90: 0a 0a                                            ..