⌈⌋ ⎇ branch:  Bitrhythm


Hex Artifact Content

Artifact 453623810cc2c439c093319c73f786b84628244210f809f2dfd54afb62c428b4:

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

0000: 76 61 72 20 4e 6f 74 65 20 3d 20 72 65 71 75 69  var Note = requi
0010: 72 65 28 27 2e 2f 6c 69 62 2f 6e 6f 74 65 27 29  re('./lib/note')
0020: 3b 0a 76 61 72 20 49 6e 74 65 72 76 61 6c 20 3d  ;.var Interval =
0030: 20 72 65 71 75 69 72 65 28 27 2e 2f 6c 69 62 2f   require('./lib/
0040: 69 6e 74 65 72 76 61 6c 27 29 3b 0a 76 61 72 20  interval');.var 
0050: 43 68 6f 72 64 20 3d 20 72 65 71 75 69 72 65 28  Chord = require(
0060: 27 2e 2f 6c 69 62 2f 63 68 6f 72 64 27 29 3b 0a  './lib/chord');.
0070: 76 61 72 20 53 63 61 6c 65 20 3d 20 72 65 71 75  var Scale = requ
0080: 69 72 65 28 27 2e 2f 6c 69 62 2f 73 63 61 6c 65  ire('./lib/scale
0090: 27 29 3b 0a 0a 76 61 72 20 74 65 6f 72 69 61 3b  ');..var teoria;
00a0: 0a 0a 2f 2f 20 6e 65 76 65 72 20 74 68 6f 75 67  ..// never thoug
00b0: 68 74 20 49 20 77 6f 75 6c 64 20 77 72 69 74 65  ht I would write
00c0: 20 74 68 69 73 2c 20 62 75 74 3a 20 4c 65 67 61   this, but: Lega
00d0: 63 79 20 73 75 70 70 6f 72 74 0a 66 75 6e 63 74  cy support.funct
00e0: 69 6f 6e 20 69 6e 74 65 72 76 61 6c 43 6f 6e 73  ion intervalCons
00f0: 74 72 75 63 74 6f 72 28 66 72 6f 6d 2c 20 74 6f  tructor(from, to
0100: 29 20 7b 0a 20 20 2f 2f 20 43 6f 6e 73 74 72 75  ) {.  // Constru
0110: 63 74 20 61 20 49 6e 74 65 72 76 61 6c 20 6f 62  ct a Interval ob
0120: 6a 65 63 74 20 66 72 6f 6d 20 73 74 72 69 6e 67  ject from string
0130: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a   representation.
0140: 20 20 69 66 20 28 74 79 70 65 6f 66 20 66 72 6f    if (typeof fro
0150: 6d 20 3d 3d 3d 20 27 73 74 72 69 6e 67 27 29 0a  m === 'string').
0160: 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72      return Inter
0170: 76 61 6c 2e 74 6f 43 6f 6f 72 64 28 66 72 6f 6d  val.toCoord(from
0180: 29 3b 0a 0a 20 20 69 66 20 28 74 79 70 65 6f 66  );..  if (typeof
0190: 20 74 6f 20 3d 3d 3d 20 27 73 74 72 69 6e 67 27   to === 'string'
01a0: 20 26 26 20 66 72 6f 6d 20 69 6e 73 74 61 6e 63   && from instanc
01b0: 65 6f 66 20 4e 6f 74 65 29 0a 20 20 20 20 72 65  eof Note).    re
01c0: 74 75 72 6e 20 49 6e 74 65 72 76 61 6c 2e 66 72  turn Interval.fr
01d0: 6f 6d 28 66 72 6f 6d 2c 20 49 6e 74 65 72 76 61  om(from, Interva
01e0: 6c 2e 74 6f 43 6f 6f 72 64 28 74 6f 29 29 3b 0a  l.toCoord(to));.
01f0: 0a 20 20 69 66 20 28 74 6f 20 69 6e 73 74 61 6e  .  if (to instan
0200: 63 65 6f 66 20 49 6e 74 65 72 76 61 6c 20 26 26  ceof Interval &&
0210: 20 66 72 6f 6d 20 69 6e 73 74 61 6e 63 65 6f 66   from instanceof
0220: 20 4e 6f 74 65 29 0a 20 20 20 20 72 65 74 75 72   Note).    retur
0230: 6e 20 49 6e 74 65 72 76 61 6c 2e 66 72 6f 6d 28  n Interval.from(
0240: 66 72 6f 6d 2c 20 74 6f 29 3b 0a 0a 20 20 69 66  from, to);..  if
0250: 20 28 74 6f 20 69 6e 73 74 61 6e 63 65 6f 66 20   (to instanceof 
0260: 4e 6f 74 65 20 26 26 20 66 72 6f 6d 20 69 6e 73  Note && from ins
0270: 74 61 6e 63 65 6f 66 20 4e 6f 74 65 29 0a 20 20  tanceof Note).  
0280: 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72 76 61    return Interva
0290: 6c 2e 62 65 74 77 65 65 6e 28 66 72 6f 6d 2c 20  l.between(from, 
02a0: 74 6f 29 3b 0a 0a 20 20 74 68 72 6f 77 20 6e 65  to);..  throw ne
02b0: 77 20 45 72 72 6f 72 28 27 49 6e 76 61 6c 69 64  w Error('Invalid
02c0: 20 70 61 72 61 6d 65 74 65 72 73 27 29 3b 0a 7d   parameters');.}
02d0: 0a 0a 69 6e 74 65 72 76 61 6c 43 6f 6e 73 74 72  ..intervalConstr
02e0: 75 63 74 6f 72 2e 74 6f 43 6f 6f 72 64 20 3d 20  uctor.toCoord = 
02f0: 49 6e 74 65 72 76 61 6c 2e 74 6f 43 6f 6f 72 64  Interval.toCoord
0300: 3b 0a 69 6e 74 65 72 76 61 6c 43 6f 6e 73 74 72  ;.intervalConstr
0310: 75 63 74 6f 72 2e 66 72 6f 6d 20 3d 20 49 6e 74  uctor.from = Int
0320: 65 72 76 61 6c 2e 66 72 6f 6d 3b 0a 69 6e 74 65  erval.from;.inte
0330: 72 76 61 6c 43 6f 6e 73 74 72 75 63 74 6f 72 2e  rvalConstructor.
0340: 62 65 74 77 65 65 6e 20 3d 20 49 6e 74 65 72 76  between = Interv
0350: 61 6c 2e 62 65 74 77 65 65 6e 3b 0a 69 6e 74 65  al.between;.inte
0360: 72 76 61 6c 43 6f 6e 73 74 72 75 63 74 6f 72 2e  rvalConstructor.
0370: 69 6e 76 65 72 74 20 3d 20 49 6e 74 65 72 76 61  invert = Interva
0380: 6c 2e 69 6e 76 65 72 74 3b 0a 0a 66 75 6e 63 74  l.invert;..funct
0390: 69 6f 6e 20 6e 6f 74 65 43 6f 6e 73 74 72 75 63  ion noteConstruc
03a0: 74 6f 72 28 6e 61 6d 65 2c 20 64 75 72 61 74 69  tor(name, durati
03b0: 6f 6e 29 20 7b 0a 20 20 69 66 20 28 74 79 70 65  on) {.  if (type
03c0: 6f 66 20 6e 61 6d 65 20 3d 3d 3d 20 27 73 74 72  of name === 'str
03d0: 69 6e 67 27 29 0a 20 20 20 20 72 65 74 75 72 6e  ing').    return
03e0: 20 4e 6f 74 65 2e 66 72 6f 6d 53 74 72 69 6e 67   Note.fromString
03f0: 28 6e 61 6d 65 2c 20 64 75 72 61 74 69 6f 6e 29  (name, duration)
0400: 3b 0a 20 20 65 6c 73 65 0a 20 20 20 20 72 65 74  ;.  else.    ret
0410: 75 72 6e 20 6e 65 77 20 4e 6f 74 65 28 6e 61 6d  urn new Note(nam
0420: 65 2c 20 64 75 72 61 74 69 6f 6e 29 3b 0a 7d 0a  e, duration);.}.
0430: 0a 6e 6f 74 65 43 6f 6e 73 74 72 75 63 74 6f 72  .noteConstructor
0440: 2e 66 72 6f 6d 53 74 72 69 6e 67 20 3d 20 4e 6f  .fromString = No
0450: 74 65 2e 66 72 6f 6d 53 74 72 69 6e 67 3b 0a 6e  te.fromString;.n
0460: 6f 74 65 43 6f 6e 73 74 72 75 63 74 6f 72 2e 66  oteConstructor.f
0470: 72 6f 6d 4b 65 79 20 3d 20 4e 6f 74 65 2e 66 72  romKey = Note.fr
0480: 6f 6d 4b 65 79 3b 0a 6e 6f 74 65 43 6f 6e 73 74  omKey;.noteConst
0490: 72 75 63 74 6f 72 2e 66 72 6f 6d 46 72 65 71 75  ructor.fromFrequ
04a0: 65 6e 63 79 20 3d 20 4e 6f 74 65 2e 66 72 6f 6d  ency = Note.from
04b0: 46 72 65 71 75 65 6e 63 79 3b 0a 6e 6f 74 65 43  Frequency;.noteC
04c0: 6f 6e 73 74 72 75 63 74 6f 72 2e 66 72 6f 6d 4d  onstructor.fromM
04d0: 49 44 49 20 3d 20 4e 6f 74 65 2e 66 72 6f 6d 4d  IDI = Note.fromM
04e0: 49 44 49 3b 0a 0a 66 75 6e 63 74 69 6f 6e 20 63  IDI;..function c
04f0: 68 6f 72 64 43 6f 6e 73 74 72 75 63 74 6f 72 28  hordConstructor(
0500: 6e 61 6d 65 2c 20 73 79 6d 62 6f 6c 29 20 7b 0a  name, symbol) {.
0510: 20 20 69 66 20 28 74 79 70 65 6f 66 20 6e 61 6d    if (typeof nam
0520: 65 20 3d 3d 3d 20 27 73 74 72 69 6e 67 27 29 20  e === 'string') 
0530: 7b 0a 20 20 20 20 76 61 72 20 72 6f 6f 74 2c 20  {.    var root, 
0540: 6f 63 74 61 76 65 3b 0a 20 20 20 20 72 6f 6f 74  octave;.    root
0550: 20 3d 20 6e 61 6d 65 2e 6d 61 74 63 68 28 2f 5e   = name.match(/^
0560: 28 5b 61 2d 68 5d 29 28 78 7c 23 7c 62 62 7c 62  ([a-h])(x|#|bb|b
0570: 3f 29 2f 69 29 3b 0a 20 20 20 20 69 66 20 28 72  ?)/i);.    if (r
0580: 6f 6f 74 20 26 26 20 72 6f 6f 74 5b 30 5d 29 20  oot && root[0]) 
0590: 7b 0a 20 20 20 20 20 20 6f 63 74 61 76 65 20 3d  {.      octave =
05a0: 20 74 79 70 65 6f 66 20 73 79 6d 62 6f 6c 20 3d   typeof symbol =
05b0: 3d 3d 20 27 6e 75 6d 62 65 72 27 20 3f 20 73 79  == 'number' ? sy
05c0: 6d 62 6f 6c 2e 74 6f 53 74 72 69 6e 67 28 31 30  mbol.toString(10
05d0: 29 20 3a 20 27 34 27 3b 0a 20 20 20 20 20 20 72  ) : '4';.      r
05e0: 65 74 75 72 6e 20 6e 65 77 20 43 68 6f 72 64 28  eturn new Chord(
05f0: 4e 6f 74 65 2e 66 72 6f 6d 53 74 72 69 6e 67 28  Note.fromString(
0600: 72 6f 6f 74 5b 30 5d 2e 74 6f 4c 6f 77 65 72 43  root[0].toLowerC
0610: 61 73 65 28 29 20 2b 20 6f 63 74 61 76 65 29 2c  ase() + octave),
0620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0630: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d               nam
0640: 65 2e 73 75 62 73 74 72 28 72 6f 6f 74 5b 30 5d  e.substr(root[0]
0650: 2e 6c 65 6e 67 74 68 29 29 3b 0a 20 20 20 20 7d  .length));.    }
0660: 0a 20 20 7d 20 65 6c 73 65 20 69 66 20 28 6e 61  .  } else if (na
0670: 6d 65 20 69 6e 73 74 61 6e 63 65 6f 66 20 4e 6f  me instanceof No
0680: 74 65 29 0a 20 20 20 20 72 65 74 75 72 6e 20 6e  te).    return n
0690: 65 77 20 43 68 6f 72 64 28 6e 61 6d 65 2c 20 73  ew Chord(name, s
06a0: 79 6d 62 6f 6c 29 3b 0a 0a 20 20 74 68 72 6f 77  ymbol);..  throw
06b0: 20 6e 65 77 20 45 72 72 6f 72 28 27 49 6e 76 61   new Error('Inva
06c0: 6c 69 64 20 43 68 6f 72 64 2e 20 43 6f 75 6c 64  lid Chord. Could
06d0: 6e 5c 27 74 20 66 69 6e 64 20 6e 6f 74 65 20 6e  n\'t find note n
06e0: 61 6d 65 27 29 3b 0a 7d 0a 0a 66 75 6e 63 74 69  ame');.}..functi
06f0: 6f 6e 20 73 63 61 6c 65 43 6f 6e 73 74 72 75 63  on scaleConstruc
0700: 74 6f 72 28 74 6f 6e 69 63 2c 20 73 63 61 6c 65  tor(tonic, scale
0710: 29 20 7b 0a 20 20 74 6f 6e 69 63 20 3d 20 28 74  ) {.  tonic = (t
0720: 6f 6e 69 63 20 69 6e 73 74 61 6e 63 65 6f 66 20  onic instanceof 
0730: 4e 6f 74 65 29 20 3f 20 74 6f 6e 69 63 20 3a 20  Note) ? tonic : 
0740: 74 65 6f 72 69 61 2e 6e 6f 74 65 28 74 6f 6e 69  teoria.note(toni
0750: 63 29 3b 0a 20 20 72 65 74 75 72 6e 20 6e 65 77  c);.  return new
0760: 20 53 63 61 6c 65 28 74 6f 6e 69 63 2c 20 73 63   Scale(tonic, sc
0770: 61 6c 65 29 3b 0a 7d 0a 0a 74 65 6f 72 69 61 20  ale);.}..teoria 
0780: 3d 20 7b 0a 20 20 6e 6f 74 65 3a 20 6e 6f 74 65  = {.  note: note
0790: 43 6f 6e 73 74 72 75 63 74 6f 72 2c 0a 0a 20 20  Constructor,..  
07a0: 63 68 6f 72 64 3a 20 63 68 6f 72 64 43 6f 6e 73  chord: chordCons
07b0: 74 72 75 63 74 6f 72 2c 0a 0a 20 20 69 6e 74 65  tructor,..  inte
07c0: 72 76 61 6c 3a 20 69 6e 74 65 72 76 61 6c 43 6f  rval: intervalCo
07d0: 6e 73 74 72 75 63 74 6f 72 2c 0a 0a 20 20 73 63  nstructor,..  sc
07e0: 61 6c 65 3a 20 73 63 61 6c 65 43 6f 6e 73 74 72  ale: scaleConstr
07f0: 75 63 74 6f 72 2c 0a 0a 20 20 4e 6f 74 65 3a 20  uctor,..  Note: 
0800: 4e 6f 74 65 2c 0a 20 20 43 68 6f 72 64 3a 20 43  Note,.  Chord: C
0810: 68 6f 72 64 2c 0a 20 20 53 63 61 6c 65 3a 20 53  hord,.  Scale: S
0820: 63 61 6c 65 2c 0a 20 20 49 6e 74 65 72 76 61 6c  cale,.  Interval
0830: 3a 20 49 6e 74 65 72 76 61 6c 0a 7d 3b 0a 0a 0a  : Interval.};...
0840: 72 65 71 75 69 72 65 28 27 2e 2f 6c 69 62 2f 73  require('./lib/s
0850: 75 67 61 72 27 29 28 74 65 6f 72 69 61 29 3b 0a  ugar')(teoria);.
0860: 65 78 70 6f 72 74 73 20 3d 20 6d 6f 64 75 6c 65  exports = module
0870: 2e 65 78 70 6f 72 74 73 20 3d 20 74 65 6f 72 69  .exports = teori
0880: 61 3b 0a                                         a;.