⌈⌋ ⎇ branch:  Bitrhythm


Hex Artifact Content

Artifact e98d66649d51569dd8a259d46f9f95b45177b9aead32a0ec4a04d8866b4c6dd4:


0000: 28 66 75 6e 63 74 69 6f 6e 28 72 6f 6f 74 2c 20  (function(root, 
0010: 66 61 63 74 6f 72 79 29 7b 0a 0a 09 2f 2f 55 4d  factory){...//UM
0020: 44 0a 09 69 66 20 28 20 74 79 70 65 6f 66 20 64  D..if ( typeof d
0030: 65 66 69 6e 65 20 3d 3d 3d 20 22 66 75 6e 63 74  efine === "funct
0040: 69 6f 6e 22 20 26 26 20 64 65 66 69 6e 65 2e 61  ion" && define.a
0050: 6d 64 20 29 20 7b 0a 09 09 64 65 66 69 6e 65 28  md ) {...define(
0060: 66 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 09 09 09  function() {....
0070: 72 65 74 75 72 6e 20 66 61 63 74 6f 72 79 28 29  return factory()
0080: 3b 0a 09 09 7d 29 3b 0a 09 7d 20 65 6c 73 65 20  ;...});..} else 
0090: 69 66 20 28 74 79 70 65 6f 66 20 6d 6f 64 75 6c  if (typeof modul
00a0: 65 20 3d 3d 3d 20 22 6f 62 6a 65 63 74 22 29 20  e === "object") 
00b0: 7b 0a 09 09 6d 6f 64 75 6c 65 2e 65 78 70 6f 72  {...module.expor
00c0: 74 73 20 3d 20 66 61 63 74 6f 72 79 28 29 3b 0a  ts = factory();.
00d0: 20 09 7d 20 65 6c 73 65 20 7b 0a 09 09 72 6f 6f   .} else {...roo
00e0: 74 2e 54 6f 6e 65 20 3d 20 66 61 63 74 6f 72 79  t.Tone = factory
00f0: 28 29 3b 0a 09 7d 0a 0a 7d 28 74 68 69 73 2c 20  ();..}..}(this, 
0100: 66 75 6e 63 74 69 6f 6e 28 29 7b 0a 0a 09 22 75  function(){..."u
0110: 73 65 20 73 74 72 69 63 74 22 3b 0a 09 0a 09 76  se strict";....v
0120: 61 72 20 54 6f 6e 65 3b 0a 09 2f 2f 63 6f 6e 73  ar Tone;..//cons
0130: 74 72 75 63 74 73 20 74 68 65 20 6d 61 69 6e 20  tructs the main 
0140: 54 6f 6e 65 20 6f 62 6a 65 63 74 0a 09 66 75 6e  Tone object..fun
0150: 63 74 69 6f 6e 20 4d 61 69 6e 28 66 75 6e 63 29  ction Main(func)
0160: 7b 0a 09 09 54 6f 6e 65 20 3d 20 66 75 6e 63 28  {...Tone = func(
0170: 29 3b 0a 09 7d 0a 09 2f 2f 69 6e 76 6f 6b 65 73  );..}..//invokes
0180: 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d 6f 64   each of the mod
0190: 75 6c 65 73 20 77 69 74 68 20 74 68 65 20 6d 61  ules with the ma
01a0: 69 6e 20 54 6f 6e 65 20 6f 62 6a 65 63 74 20 61  in Tone object a
01b0: 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 0a 09  s the argument..
01c0: 66 75 6e 63 74 69 6f 6e 20 4d 6f 64 75 6c 65 28  function Module(
01d0: 66 75 6e 63 29 7b 0a 09 09 66 75 6e 63 28 54 6f  func){...func(To
01e0: 6e 65 29 3b 0a 09 7d 09 2f 2a 2a 0a 09 20 2a 20  ne);..}./**.. * 
01f0: 20 54 6f 6e 65 2e 6a 73 0a 09 20 2a 20 20 40 61   Tone.js.. *  @a
0200: 75 74 68 6f 72 20 59 6f 74 61 6d 20 4d 61 6e 6e  uthor Yotam Mann
0210: 0a 09 20 2a 20 20 40 6c 69 63 65 6e 73 65 20 68  .. *  @license h
0220: 74 74 70 3a 2f 2f 6f 70 65 6e 73 6f 75 72 63 65  ttp://opensource
0230: 2e 6f 72 67 2f 6c 69 63 65 6e 73 65 73 2f 4d 49  .org/licenses/MI
0240: 54 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 09 20  T MIT License.. 
0250: 2a 20 20 40 63 6f 70 79 72 69 67 68 74 20 32 30  *  @copyright 20
0260: 31 34 2d 32 30 31 37 20 59 6f 74 61 6d 20 4d 61  14-2017 Yotam Ma
0270: 6e 6e 0a 09 20 2a 2f 0a 09 4d 61 69 6e 28 66 75  nn.. */..Main(fu
0280: 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
0290: 20 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f   ..    /////////
02a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
02b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
02c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
02d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
02e0: 2f 0a 09 20 20 20 20 2f 2f 09 57 45 42 20 41 55  /..    //.WEB AU
02f0: 44 49 4f 20 43 4f 4e 54 45 58 54 0a 09 20 20 20  DIO CONTEXT..   
0300: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
0310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20  ////////////..  
0350: 20 20 66 75 6e 63 74 69 6f 6e 20 69 73 55 6e 64    function isUnd
0360: 65 66 28 76 61 6c 29 20 7b 0a 09 20 20 20 20 20  ef(val) {..     
0370: 20 20 20 72 65 74 75 72 6e 20 74 79 70 65 6f 66     return typeof
0380: 20 76 61 6c 20 3d 3d 3d 20 27 75 6e 64 65 66 69   val === 'undefi
0390: 6e 65 64 27 3b 0a 09 20 20 20 20 7d 0a 09 20 20  ned';..    }..  
03a0: 20 20 66 75 6e 63 74 69 6f 6e 20 69 73 46 75 6e    function isFun
03b0: 63 74 69 6f 6e 28 76 61 6c 29 20 7b 0a 09 20 20  ction(val) {..  
03c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 79 70        return typ
03d0: 65 6f 66 20 76 61 6c 20 3d 3d 3d 20 27 66 75 6e  eof val === 'fun
03e0: 63 74 69 6f 6e 27 3b 0a 09 20 20 20 20 7d 0a 09  ction';..    }..
03f0: 20 20 20 20 76 61 72 20 61 75 64 69 6f 43 6f 6e      var audioCon
0400: 74 65 78 74 3b 0a 09 20 20 20 20 2f 2f 70 6f 6c  text;..    //pol
0410: 79 66 69 6c 6c 20 66 6f 72 20 41 75 64 69 6f 43  yfill for AudioC
0420: 6f 6e 74 65 78 74 20 61 6e 64 20 4f 66 66 6c 69  ontext and Offli
0430: 6e 65 41 75 64 69 6f 43 6f 6e 74 65 78 74 0a 09  neAudioContext..
0440: 20 20 20 20 69 66 20 28 69 73 55 6e 64 65 66 28      if (isUndef(
0450: 77 69 6e 64 6f 77 2e 41 75 64 69 6f 43 6f 6e 74  window.AudioCont
0460: 65 78 74 29 29 20 7b 0a 09 20 20 20 20 20 20 20  ext)) {..       
0470: 20 77 69 6e 64 6f 77 2e 41 75 64 69 6f 43 6f 6e   window.AudioCon
0480: 74 65 78 74 20 3d 20 77 69 6e 64 6f 77 2e 77 65  text = window.we
0490: 62 6b 69 74 41 75 64 69 6f 43 6f 6e 74 65 78 74  bkitAudioContext
04a0: 3b 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 69 66  ;..    }..    if
04b0: 20 28 69 73 55 6e 64 65 66 28 77 69 6e 64 6f 77   (isUndef(window
04c0: 2e 4f 66 66 6c 69 6e 65 41 75 64 69 6f 43 6f 6e  .OfflineAudioCon
04d0: 74 65 78 74 29 29 20 7b 0a 09 20 20 20 20 20 20  text)) {..      
04e0: 20 20 77 69 6e 64 6f 77 2e 4f 66 66 6c 69 6e 65    window.Offline
04f0: 41 75 64 69 6f 43 6f 6e 74 65 78 74 20 3d 20 77  AudioContext = w
0500: 69 6e 64 6f 77 2e 77 65 62 6b 69 74 4f 66 66 6c  indow.webkitOffl
0510: 69 6e 65 41 75 64 69 6f 43 6f 6e 74 65 78 74 3b  ineAudioContext;
0520: 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 69 66 20  ..    }..    if 
0530: 28 21 69 73 55 6e 64 65 66 28 41 75 64 69 6f 43  (!isUndef(AudioC
0540: 6f 6e 74 65 78 74 29 29 20 7b 0a 09 20 20 20 20  ontext)) {..    
0550: 20 20 20 20 61 75 64 69 6f 43 6f 6e 74 65 78 74      audioContext
0560: 20 3d 20 6e 65 77 20 41 75 64 69 6f 43 6f 6e 74   = new AudioCont
0570: 65 78 74 28 29 3b 0a 09 20 20 20 20 7d 20 65 6c  ext();..    } el
0580: 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20 74 68  se {..        th
0590: 72 6f 77 20 6e 65 77 20 45 72 72 6f 72 28 27 57  row new Error('W
05a0: 65 62 20 41 75 64 69 6f 20 69 73 20 6e 6f 74 20  eb Audio is not 
05b0: 73 75 70 70 6f 72 74 65 64 20 69 6e 20 74 68 69  supported in thi
05c0: 73 20 62 72 6f 77 73 65 72 27 29 3b 0a 09 20 20  s browser');..  
05d0: 20 20 7d 0a 09 20 20 20 20 2f 2f 53 48 49 4d 53    }..    //SHIMS
05e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0620: 2f 2f 2f 2f 0a 09 20 20 20 20 69 66 20 28 21 69  ////..    if (!i
0630: 73 46 75 6e 63 74 69 6f 6e 28 41 75 64 69 6f 43  sFunction(AudioC
0640: 6f 6e 74 65 78 74 2e 70 72 6f 74 6f 74 79 70 65  ontext.prototype
0650: 2e 63 72 65 61 74 65 47 61 69 6e 29 29 20 7b 0a  .createGain)) {.
0660: 09 20 20 20 20 20 20 20 20 41 75 64 69 6f 43 6f  .        AudioCo
0670: 6e 74 65 78 74 2e 70 72 6f 74 6f 74 79 70 65 2e  ntext.prototype.
0680: 63 72 65 61 74 65 47 61 69 6e 20 3d 20 41 75 64  createGain = Aud
0690: 69 6f 43 6f 6e 74 65 78 74 2e 70 72 6f 74 6f 74  ioContext.protot
06a0: 79 70 65 2e 63 72 65 61 74 65 47 61 69 6e 4e 6f  ype.createGainNo
06b0: 64 65 3b 0a 09 20 20 20 20 7d 0a 09 20 20 20 20  de;..    }..    
06c0: 69 66 20 28 21 69 73 46 75 6e 63 74 69 6f 6e 28  if (!isFunction(
06d0: 41 75 64 69 6f 43 6f 6e 74 65 78 74 2e 70 72 6f  AudioContext.pro
06e0: 74 6f 74 79 70 65 2e 63 72 65 61 74 65 44 65 6c  totype.createDel
06f0: 61 79 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ay)) {..        
0700: 41 75 64 69 6f 43 6f 6e 74 65 78 74 2e 70 72 6f  AudioContext.pro
0710: 74 6f 74 79 70 65 2e 63 72 65 61 74 65 44 65 6c  totype.createDel
0720: 61 79 20 3d 20 41 75 64 69 6f 43 6f 6e 74 65 78  ay = AudioContex
0730: 74 2e 70 72 6f 74 6f 74 79 70 65 2e 63 72 65 61  t.prototype.crea
0740: 74 65 44 65 6c 61 79 4e 6f 64 65 3b 0a 09 20 20  teDelayNode;..  
0750: 20 20 7d 0a 09 20 20 20 20 69 66 20 28 21 69 73    }..    if (!is
0760: 46 75 6e 63 74 69 6f 6e 28 41 75 64 69 6f 43 6f  Function(AudioCo
0770: 6e 74 65 78 74 2e 70 72 6f 74 6f 74 79 70 65 2e  ntext.prototype.
0780: 63 72 65 61 74 65 50 65 72 69 6f 64 69 63 57 61  createPeriodicWa
0790: 76 65 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ve)) {..        
07a0: 41 75 64 69 6f 43 6f 6e 74 65 78 74 2e 70 72 6f  AudioContext.pro
07b0: 74 6f 74 79 70 65 2e 63 72 65 61 74 65 50 65 72  totype.createPer
07c0: 69 6f 64 69 63 57 61 76 65 20 3d 20 41 75 64 69  iodicWave = Audi
07d0: 6f 43 6f 6e 74 65 78 74 2e 70 72 6f 74 6f 74 79  oContext.prototy
07e0: 70 65 2e 63 72 65 61 74 65 57 61 76 65 54 61 62  pe.createWaveTab
07f0: 6c 65 3b 0a 09 20 20 20 20 7d 0a 09 20 20 20 20  le;..    }..    
0800: 69 66 20 28 21 69 73 46 75 6e 63 74 69 6f 6e 28  if (!isFunction(
0810: 41 75 64 69 6f 42 75 66 66 65 72 53 6f 75 72 63  AudioBufferSourc
0820: 65 4e 6f 64 65 2e 70 72 6f 74 6f 74 79 70 65 2e  eNode.prototype.
0830: 73 74 61 72 74 29 29 20 7b 0a 09 20 20 20 20 20  start)) {..     
0840: 20 20 20 41 75 64 69 6f 42 75 66 66 65 72 53 6f     AudioBufferSo
0850: 75 72 63 65 4e 6f 64 65 2e 70 72 6f 74 6f 74 79  urceNode.prototy
0860: 70 65 2e 73 74 61 72 74 20 3d 20 41 75 64 69 6f  pe.start = Audio
0870: 42 75 66 66 65 72 53 6f 75 72 63 65 4e 6f 64 65  BufferSourceNode
0880: 2e 70 72 6f 74 6f 74 79 70 65 2e 6e 6f 74 65 47  .prototype.noteG
0890: 72 61 69 6e 4f 6e 3b 0a 09 20 20 20 20 7d 0a 09  rainOn;..    }..
08a0: 20 20 20 20 69 66 20 28 21 69 73 46 75 6e 63 74      if (!isFunct
08b0: 69 6f 6e 28 41 75 64 69 6f 42 75 66 66 65 72 53  ion(AudioBufferS
08c0: 6f 75 72 63 65 4e 6f 64 65 2e 70 72 6f 74 6f 74  ourceNode.protot
08d0: 79 70 65 2e 73 74 6f 70 29 29 20 7b 0a 09 20 20  ype.stop)) {..  
08e0: 20 20 20 20 20 20 41 75 64 69 6f 42 75 66 66 65        AudioBuffe
08f0: 72 53 6f 75 72 63 65 4e 6f 64 65 2e 70 72 6f 74  rSourceNode.prot
0900: 6f 74 79 70 65 2e 73 74 6f 70 20 3d 20 41 75 64  otype.stop = Aud
0910: 69 6f 42 75 66 66 65 72 53 6f 75 72 63 65 4e 6f  ioBufferSourceNo
0920: 64 65 2e 70 72 6f 74 6f 74 79 70 65 2e 6e 6f 74  de.prototype.not
0930: 65 4f 66 66 3b 0a 09 20 20 20 20 7d 0a 09 20 20  eOff;..    }..  
0940: 20 20 69 66 20 28 21 69 73 46 75 6e 63 74 69 6f    if (!isFunctio
0950: 6e 28 4f 73 63 69 6c 6c 61 74 6f 72 4e 6f 64 65  n(OscillatorNode
0960: 2e 70 72 6f 74 6f 74 79 70 65 2e 73 74 61 72 74  .prototype.start
0970: 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20 4f 73  )) {..        Os
0980: 63 69 6c 6c 61 74 6f 72 4e 6f 64 65 2e 70 72 6f  cillatorNode.pro
0990: 74 6f 74 79 70 65 2e 73 74 61 72 74 20 3d 20 4f  totype.start = O
09a0: 73 63 69 6c 6c 61 74 6f 72 4e 6f 64 65 2e 70 72  scillatorNode.pr
09b0: 6f 74 6f 74 79 70 65 2e 6e 6f 74 65 4f 6e 3b 0a  ototype.noteOn;.
09c0: 09 20 20 20 20 7d 0a 09 20 20 20 20 69 66 20 28  .    }..    if (
09d0: 21 69 73 46 75 6e 63 74 69 6f 6e 28 4f 73 63 69  !isFunction(Osci
09e0: 6c 6c 61 74 6f 72 4e 6f 64 65 2e 70 72 6f 74 6f  llatorNode.proto
09f0: 74 79 70 65 2e 73 74 6f 70 29 29 20 7b 0a 09 20  type.stop)) {.. 
0a00: 20 20 20 20 20 20 20 4f 73 63 69 6c 6c 61 74 6f         Oscillato
0a10: 72 4e 6f 64 65 2e 70 72 6f 74 6f 74 79 70 65 2e  rNode.prototype.
0a20: 73 74 6f 70 20 3d 20 4f 73 63 69 6c 6c 61 74 6f  stop = Oscillato
0a30: 72 4e 6f 64 65 2e 70 72 6f 74 6f 74 79 70 65 2e  rNode.prototype.
0a40: 6e 6f 74 65 4f 66 66 3b 0a 09 20 20 20 20 7d 0a  noteOff;..    }.
0a50: 09 20 20 20 20 69 66 20 28 21 69 73 46 75 6e 63  .    if (!isFunc
0a60: 74 69 6f 6e 28 4f 73 63 69 6c 6c 61 74 6f 72 4e  tion(OscillatorN
0a70: 6f 64 65 2e 70 72 6f 74 6f 74 79 70 65 2e 73 65  ode.prototype.se
0a80: 74 50 65 72 69 6f 64 69 63 57 61 76 65 29 29 20  tPeriodicWave)) 
0a90: 7b 0a 09 20 20 20 20 20 20 20 20 4f 73 63 69 6c  {..        Oscil
0aa0: 6c 61 74 6f 72 4e 6f 64 65 2e 70 72 6f 74 6f 74  latorNode.protot
0ab0: 79 70 65 2e 73 65 74 50 65 72 69 6f 64 69 63 57  ype.setPeriodicW
0ac0: 61 76 65 20 3d 20 4f 73 63 69 6c 6c 61 74 6f 72  ave = Oscillator
0ad0: 4e 6f 64 65 2e 70 72 6f 74 6f 74 79 70 65 2e 73  Node.prototype.s
0ae0: 65 74 57 61 76 65 54 61 62 6c 65 3b 0a 09 20 20  etWaveTable;..  
0af0: 20 20 7d 0a 09 20 20 20 20 2f 2f 65 78 74 65 6e    }..    //exten
0b00: 64 20 74 68 65 20 63 6f 6e 6e 65 63 74 20 66 75  d the connect fu
0b10: 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 63 6c 75 64  nction to includ
0b20: 65 20 54 6f 6e 65 73 0a 09 20 20 20 20 69 66 20  e Tones..    if 
0b30: 28 69 73 55 6e 64 65 66 28 41 75 64 69 6f 4e 6f  (isUndef(AudioNo
0b40: 64 65 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 6e 61  de.prototype._na
0b50: 74 69 76 65 43 6f 6e 6e 65 63 74 29 29 20 7b 0a  tiveConnect)) {.
0b60: 09 20 20 20 20 20 20 20 20 41 75 64 69 6f 4e 6f  .        AudioNo
0b70: 64 65 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 6e 61  de.prototype._na
0b80: 74 69 76 65 43 6f 6e 6e 65 63 74 20 3d 20 41 75  tiveConnect = Au
0b90: 64 69 6f 4e 6f 64 65 2e 70 72 6f 74 6f 74 79 70  dioNode.prototyp
0ba0: 65 2e 63 6f 6e 6e 65 63 74 3b 0a 09 20 20 20 20  e.connect;..    
0bb0: 20 20 20 20 41 75 64 69 6f 4e 6f 64 65 2e 70 72      AudioNode.pr
0bc0: 6f 74 6f 74 79 70 65 2e 63 6f 6e 6e 65 63 74 20  ototype.connect 
0bd0: 3d 20 66 75 6e 63 74 69 6f 6e 20 28 42 2c 20 6f  = function (B, o
0be0: 75 74 4e 75 6d 2c 20 69 6e 4e 75 6d 29 20 7b 0a  utNum, inNum) {.
0bf0: 09 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
0c00: 28 42 2e 69 6e 70 75 74 29 20 7b 0a 09 20 20 20  (B.input) {..   
0c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
0c20: 28 41 72 72 61 79 2e 69 73 41 72 72 61 79 28 42  (Array.isArray(B
0c30: 2e 69 6e 70 75 74 29 29 20 7b 0a 09 20 20 20 20  .input)) {..    
0c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c50: 69 66 20 28 69 73 55 6e 64 65 66 28 69 6e 4e 75  if (isUndef(inNu
0c60: 6d 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  m)) {..         
0c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
0c80: 6e 4e 75 6d 20 3d 20 30 3b 0a 09 20 20 20 20 20  nNum = 0;..     
0c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
0ca0: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0cb0: 20 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 6e 65        this.conne
0cc0: 63 74 28 42 2e 69 6e 70 75 74 5b 69 6e 4e 75 6d  ct(B.input[inNum
0cd0: 5d 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ]);..           
0ce0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20       } else {.. 
0cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d00: 20 20 20 74 68 69 73 2e 63 6f 6e 6e 65 63 74 28     this.connect(
0d10: 42 2e 69 6e 70 75 74 2c 20 6f 75 74 4e 75 6d 2c  B.input, outNum,
0d20: 20 69 6e 4e 75 6d 29 3b 0a 09 20 20 20 20 20 20   inNum);..      
0d30: 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20            }..   
0d40: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else 
0d50: 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
0d60: 20 20 20 74 72 79 20 7b 0a 09 20 20 20 20 20 20     try {..      
0d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
0d80: 20 28 42 20 69 6e 73 74 61 6e 63 65 6f 66 20 41   (B instanceof A
0d90: 75 64 69 6f 4e 6f 64 65 29 20 7b 0a 09 20 20 20  udioNode) {..   
0da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0db0: 20 20 20 20 20 74 68 69 73 2e 5f 6e 61 74 69 76       this._nativ
0dc0: 65 43 6f 6e 6e 65 63 74 28 42 2c 20 6f 75 74 4e  eConnect(B, outN
0dd0: 75 6d 2c 20 69 6e 4e 75 6d 29 3b 0a 09 20 20 20  um, inNum);..   
0de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0df0: 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20   } else {..     
0e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e10: 20 20 20 74 68 69 73 2e 5f 6e 61 74 69 76 65 43     this._nativeC
0e20: 6f 6e 6e 65 63 74 28 42 2c 20 6f 75 74 4e 75 6d  onnect(B, outNum
0e30: 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
0e40: 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
0e50: 20 20 20 20 20 20 20 20 20 20 20 7d 20 63 61 74             } cat
0e60: 63 68 20 28 65 29 20 7b 0a 09 20 20 20 20 20 20  ch (e) {..      
0e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
0e80: 72 6f 77 20 6e 65 77 20 45 72 72 6f 72 28 27 65  row new Error('e
0e90: 72 72 6f 72 20 63 6f 6e 6e 65 63 74 69 6e 67 20  rror connecting 
0ea0: 74 6f 20 6e 6f 64 65 3a 20 27 20 2b 20 42 29 3b  to node: ' + B);
0eb0: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0ec0: 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20    }..           
0ed0: 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 3b 0a 09   }..        };..
0ee0: 20 20 20 20 7d 0a 09 20 20 20 20 2f 2f 2f 2f 2f      }..    /////
0ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f30: 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 2f 2f 09 54  //////..    //.T
0f40: 4f 4e 45 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  ONE..    ///////
0f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f90: 2f 2f 2f 2f 0a 09 20 20 20 20 2f 2a 2a 0a 09 09  ////..    /**...
0fa0: 20 2a 20 20 40 63 6c 61 73 73 20 20 54 6f 6e 65   *  @class  Tone
0fb0: 20 69 73 20 74 68 65 20 62 61 73 65 20 63 6c 61   is the base cla
0fc0: 73 73 20 6f 66 20 61 6c 6c 20 6f 74 68 65 72 20  ss of all other 
0fd0: 63 6c 61 73 73 65 73 2e 20 49 74 20 70 72 6f 76  classes. It prov
0fe0: 69 64 65 73 20 0a 09 09 20 2a 20 20 20 20 20 20  ides ... *      
0ff0: 20 20 20 20 61 20 6c 6f 74 20 6f 66 20 6d 65 74      a lot of met
1000: 68 6f 64 73 20 61 6e 64 20 66 75 6e 63 74 69 6f  hods and functio
1010: 6e 61 6c 69 74 79 20 74 6f 20 61 6c 6c 20 63 6c  nality to all cl
1020: 61 73 73 65 73 20 74 68 61 74 20 65 78 74 65 6e  asses that exten
1030: 64 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20  d... *          
1040: 69 74 2e 20 0a 09 09 20 2a 20 20 0a 09 09 20 2a  it. ... *  ... *
1050: 20 20 40 63 6f 6e 73 74 72 75 63 74 6f 72 0a 09    @constructor..
1060: 09 20 2a 20 20 40 61 6c 69 61 73 20 54 6f 6e 65  . *  @alias Tone
1070: 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 6e  ... *  @param {n
1080: 75 6d 62 65 72 7d 20 5b 69 6e 70 75 74 73 3d 31  umber} [inputs=1
1090: 5d 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  ] the number of 
10a0: 69 6e 70 75 74 20 6e 6f 64 65 73 0a 09 09 20 2a  input nodes... *
10b0: 20 20 40 70 61 72 61 6d 20 7b 6e 75 6d 62 65 72    @param {number
10c0: 7d 20 5b 6f 75 74 70 75 74 73 3d 31 5d 20 74 68  } [outputs=1] th
10d0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6f 75 74 70  e number of outp
10e0: 75 74 20 6e 6f 64 65 73 0a 09 09 20 2a 2f 0a 09  ut nodes... */..
10f0: 20 20 20 20 76 61 72 20 54 6f 6e 65 20 3d 20 66      var Tone = f
1100: 75 6e 63 74 69 6f 6e 20 28 69 6e 70 75 74 73 2c  unction (inputs,
1110: 20 6f 75 74 70 75 74 73 29 20 7b 0a 09 20 20 20   outputs) {..   
1120: 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
1130: 74 68 65 20 69 6e 70 75 74 20 6e 6f 64 65 28 73  the input node(s
1140: 29 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b  ).... *  @type {
1150: 47 61 69 6e 4e 6f 64 65 7c 41 72 72 61 79 7d 0a  GainNode|Array}.
1160: 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
1170: 69 66 20 28 69 73 55 6e 64 65 66 28 69 6e 70 75  if (isUndef(inpu
1180: 74 73 29 20 7c 7c 20 69 6e 70 75 74 73 20 3d 3d  ts) || inputs ==
1190: 3d 20 31 29 20 7b 0a 09 20 20 20 20 20 20 20 20  = 1) {..        
11a0: 20 20 20 20 74 68 69 73 2e 69 6e 70 75 74 20 3d      this.input =
11b0: 20 74 68 69 73 2e 63 6f 6e 74 65 78 74 2e 63 72   this.context.cr
11c0: 65 61 74 65 47 61 69 6e 28 29 3b 0a 09 20 20 20  eateGain();..   
11d0: 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28       } else if (
11e0: 69 6e 70 75 74 73 20 3e 20 31 29 20 7b 0a 09 20  inputs > 1) {.. 
11f0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
1200: 69 6e 70 75 74 20 3d 20 6e 65 77 20 41 72 72 61  input = new Arra
1210: 79 28 69 6e 70 75 74 73 29 3b 0a 09 20 20 20 20  y(inputs);..    
1220: 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 2f      }..        /
1230: 2a 2a 0a 09 09 09 20 2a 20 20 74 68 65 20 6f 75  **.... *  the ou
1240: 74 70 75 74 20 6e 6f 64 65 28 73 29 0a 09 09 09  tput node(s)....
1250: 20 2a 20 20 40 74 79 70 65 20 7b 47 61 69 6e 4e   *  @type {GainN
1260: 6f 64 65 7c 41 72 72 61 79 7d 0a 09 09 09 20 2a  ode|Array}.... *
1270: 2f 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 69  /..        if (i
1280: 73 55 6e 64 65 66 28 6f 75 74 70 75 74 73 29 20  sUndef(outputs) 
1290: 7c 7c 20 6f 75 74 70 75 74 73 20 3d 3d 3d 20 31  || outputs === 1
12a0: 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
12b0: 20 74 68 69 73 2e 6f 75 74 70 75 74 20 3d 20 74   this.output = t
12c0: 68 69 73 2e 63 6f 6e 74 65 78 74 2e 63 72 65 61  his.context.crea
12d0: 74 65 47 61 69 6e 28 29 3b 0a 09 20 20 20 20 20  teGain();..     
12e0: 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 6f 75     } else if (ou
12f0: 74 70 75 74 73 20 3e 20 31 29 20 7b 0a 09 20 20  tputs > 1) {..  
1300: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f            this.o
1310: 75 74 70 75 74 20 3d 20 6e 65 77 20 41 72 72 61  utput = new Arra
1320: 79 28 69 6e 70 75 74 73 29 3b 0a 09 20 20 20 20  y(inputs);..    
1330: 20 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a 09 20      }..    };.. 
1340: 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 53 65 74     /**... *  Set
1350: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
1360: 61 74 20 6f 6e 63 65 2e 20 45 69 74 68 65 72 20  at once. Either 
1370: 70 61 73 73 20 69 6e 20 61 6e 0a 09 09 20 2a 20  pass in an... * 
1380: 20 6f 62 6a 65 63 74 20 6d 61 70 70 69 6e 67 20   object mapping 
1390: 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 76 61  parameters to va
13a0: 6c 75 65 73 2c 20 6f 72 20 74 6f 20 73 65 74 20  lues, or to set 
13b0: 61 0a 09 09 20 2a 20 20 73 69 6e 67 6c 65 20 70  a... *  single p
13c0: 61 72 61 6d 65 74 65 72 2c 20 62 79 20 70 61 73  arameter, by pas
13d0: 73 69 6e 67 20 69 6e 20 61 20 73 74 72 69 6e 67  sing in a string
13e0: 20 61 6e 64 20 76 61 6c 75 65 2e 0a 09 09 20 2a   and value.... *
13f0: 20 20 54 68 65 20 6c 61 73 74 20 61 72 67 75 6d    The last argum
1400: 65 6e 74 20 69 73 20 61 6e 20 6f 70 74 69 6f 6e  ent is an option
1410: 61 6c 20 72 61 6d 70 20 74 69 6d 65 20 77 68 69  al ramp time whi
1420: 63 68 20 0a 09 09 20 2a 20 20 77 69 6c 6c 20 72  ch ... *  will r
1430: 61 6d 70 20 61 6e 79 20 73 69 67 6e 61 6c 20 76  amp any signal v
1440: 61 6c 75 65 73 20 74 6f 20 74 68 65 69 72 20 64  alues to their d
1450: 65 73 74 69 6e 61 74 69 6f 6e 20 76 61 6c 75 65  estination value
1460: 0a 09 09 20 2a 20 20 6f 76 65 72 20 74 68 65 20  ... *  over the 
1470: 64 75 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  duration of the 
1480: 72 61 6d 70 54 69 6d 65 2e 0a 09 09 20 2a 20 20  rampTime.... *  
1490: 40 70 61 72 61 6d 20 7b 4f 62 6a 65 63 74 7c 73  @param {Object|s
14a0: 74 72 69 6e 67 7d 20 70 61 72 61 6d 73 0a 09 09  tring} params...
14b0: 20 2a 20 20 40 70 61 72 61 6d 20 7b 6e 75 6d 62   *  @param {numb
14c0: 65 72 3d 7d 20 76 61 6c 75 65 0a 09 09 20 2a 20  er=} value... * 
14d0: 20 40 70 61 72 61 6d 20 7b 54 69 6d 65 3d 7d 20   @param {Time=} 
14e0: 72 61 6d 70 54 69 6d 65 0a 09 09 20 2a 20 20 40  rampTime... *  @
14f0: 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 7d 20 74  returns {Tone} t
1500: 68 69 73 0a 09 09 20 2a 20 20 40 65 78 61 6d 70  his... *  @examp
1510: 6c 65 0a 09 09 20 2a 20 2f 2f 73 65 74 20 76 61  le... * //set va
1520: 6c 75 65 73 20 75 73 69 6e 67 20 61 6e 20 6f 62  lues using an ob
1530: 6a 65 63 74 0a 09 09 20 2a 20 66 69 6c 74 65 72  ject... * filter
1540: 2e 73 65 74 28 7b 0a 09 09 20 2a 20 09 22 66 72  .set({... * ."fr
1550: 65 71 75 65 6e 63 79 22 20 3a 20 33 30 30 2c 0a  equency" : 300,.
1560: 09 09 20 2a 20 09 22 74 79 70 65 22 20 3a 20 68  .. * ."type" : h
1570: 69 67 68 70 61 73 73 0a 09 09 20 2a 20 7d 29 3b  ighpass... * });
1580: 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a  ... *  @example.
1590: 09 09 20 2a 20 66 69 6c 74 65 72 2e 73 65 74 28  .. * filter.set(
15a0: 22 74 79 70 65 22 2c 20 22 68 69 67 68 70 61 73  "type", "highpas
15b0: 73 22 29 3b 0a 09 09 20 2a 20 20 40 65 78 61 6d  s");... *  @exam
15c0: 70 6c 65 0a 09 09 20 2a 20 2f 2f 72 61 6d 70 20  ple... * //ramp 
15d0: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 32 32 30  to the value 220
15e0: 20 6f 76 65 72 20 33 20 73 65 63 6f 6e 64 73 2e   over 3 seconds.
15f0: 20 0a 09 09 20 2a 20 6f 73 63 69 6c 6c 61 74 6f   ... * oscillato
1600: 72 2e 73 65 74 28 7b 0a 09 09 20 2a 20 09 22 66  r.set({... * ."f
1610: 72 65 71 75 65 6e 63 79 22 20 3a 20 32 32 30 0a  requency" : 220.
1620: 09 09 20 2a 20 7d 2c 20 33 29 3b 0a 09 09 20 2a  .. * }, 3);... *
1630: 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 70 72 6f 74  /..    Tone.prot
1640: 6f 74 79 70 65 2e 73 65 74 20 3d 20 66 75 6e 63  otype.set = func
1650: 74 69 6f 6e 20 28 70 61 72 61 6d 73 2c 20 76 61  tion (params, va
1660: 6c 75 65 2c 20 72 61 6d 70 54 69 6d 65 29 20 7b  lue, rampTime) {
1670: 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 74 68  ..        if (th
1680: 69 73 2e 69 73 4f 62 6a 65 63 74 28 70 61 72 61  is.isObject(para
1690: 6d 73 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ms)) {..        
16a0: 20 20 20 20 72 61 6d 70 54 69 6d 65 20 3d 20 76      rampTime = v
16b0: 61 6c 75 65 3b 0a 09 20 20 20 20 20 20 20 20 7d  alue;..        }
16c0: 20 65 6c 73 65 20 69 66 20 28 74 68 69 73 2e 69   else if (this.i
16d0: 73 53 74 72 69 6e 67 28 70 61 72 61 6d 73 29 29  sString(params))
16e0: 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16f0: 76 61 72 20 74 6d 70 4f 62 6a 20 3d 20 7b 7d 3b  var tmpObj = {};
1700: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 6d  ..            tm
1710: 70 4f 62 6a 5b 70 61 72 61 6d 73 5d 20 3d 20 76  pObj[params] = v
1720: 61 6c 75 65 3b 0a 09 20 20 20 20 20 20 20 20 20  alue;..         
1730: 20 20 20 70 61 72 61 6d 73 20 3d 20 74 6d 70 4f     params = tmpO
1740: 62 6a 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  bj;..        }..
1750: 20 20 20 20 20 20 20 20 70 61 72 61 6d 4c 6f 6f          paramLoo
1760: 70 3a 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  p:..            
1770: 66 6f 72 20 28 76 61 72 20 61 74 74 72 20 69 6e  for (var attr in
1780: 20 70 61 72 61 6d 73 29 20 7b 0a 09 20 20 20 20   params) {..    
1790: 20 20 20 20 20 20 20 20 20 20 20 20 76 61 6c 75              valu
17a0: 65 20 3d 20 70 61 72 61 6d 73 5b 61 74 74 72 5d  e = params[attr]
17b0: 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
17c0: 20 20 20 76 61 72 20 70 61 72 65 6e 74 20 3d 20     var parent = 
17d0: 74 68 69 73 3b 0a 09 20 20 20 20 20 20 20 20 20  this;..         
17e0: 20 20 20 20 20 20 20 69 66 20 28 61 74 74 72 2e         if (attr.
17f0: 69 6e 64 65 78 4f 66 28 27 2e 27 29 20 21 3d 3d  indexOf('.') !==
1800: 20 2d 31 29 20 7b 0a 09 20 20 20 20 20 20 20 20   -1) {..        
1810: 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20              var 
1820: 61 74 74 72 53 70 6c 69 74 20 3d 20 61 74 74 72  attrSplit = attr
1830: 2e 73 70 6c 69 74 28 27 2e 27 29 3b 0a 09 20 20  .split('.');..  
1840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1850: 20 20 66 6f 72 20 28 76 61 72 20 69 20 3d 20 30    for (var i = 0
1860: 3b 20 69 20 3c 20 61 74 74 72 53 70 6c 69 74 2e  ; i < attrSplit.
1870: 6c 65 6e 67 74 68 20 2d 20 31 3b 20 69 2b 2b 29  length - 1; i++)
1880: 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1890: 20 20 20 20 20 20 20 20 20 20 20 20 70 61 72 65              pare
18a0: 6e 74 20 3d 20 70 61 72 65 6e 74 5b 61 74 74 72  nt = parent[attr
18b0: 53 70 6c 69 74 5b 69 5d 5d 3b 0a 09 20 20 20 20  Split[i]];..    
18c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d0: 20 20 20 20 69 66 20 28 70 61 72 65 6e 74 20 69      if (parent i
18e0: 6e 73 74 61 6e 63 65 6f 66 20 54 6f 6e 65 29 20  nstanceof Tone) 
18f0: 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1910: 74 74 72 53 70 6c 69 74 2e 73 70 6c 69 63 65 28  ttrSplit.splice(
1920: 30 2c 20 69 20 2b 20 31 29 3b 0a 09 20 20 20 20  0, i + 1);..    
1930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1940: 20 20 20 20 20 20 20 20 76 61 72 20 69 6e 6e 65          var inne
1950: 72 50 61 72 61 6d 20 3d 20 61 74 74 72 53 70 6c  rParam = attrSpl
1960: 69 74 2e 6a 6f 69 6e 28 27 2e 27 29 3b 0a 09 20  it.join('.');.. 
1970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1980: 20 20 20 20 20 20 20 20 20 20 20 70 61 72 65 6e             paren
1990: 74 2e 73 65 74 28 69 6e 6e 65 72 50 61 72 61 6d  t.set(innerParam
19a0: 2c 20 76 61 6c 75 65 29 3b 0a 09 20 20 20 20 20  , value);..     
19b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c0: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 20         continue 
19d0: 70 61 72 61 6d 4c 6f 6f 70 3b 0a 09 20 20 20 20  paramLoop;..    
19e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f0: 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20      }..         
1a00: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20             }..  
1a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a20: 20 20 61 74 74 72 20 3d 20 61 74 74 72 53 70 6c    attr = attrSpl
1a30: 69 74 5b 61 74 74 72 53 70 6c 69 74 2e 6c 65 6e  it[attrSplit.len
1a40: 67 74 68 20 2d 20 31 5d 3b 0a 09 20 20 20 20 20  gth - 1];..     
1a50: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20             }..  
1a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61                va
1a70: 72 20 70 61 72 61 6d 20 3d 20 70 61 72 65 6e 74  r param = parent
1a80: 5b 61 74 74 72 5d 3b 0a 09 20 20 20 20 20 20 20  [attr];..       
1a90: 20 20 20 20 20 20 20 20 20 69 66 20 28 69 73 55           if (isU
1aa0: 6e 64 65 66 28 70 61 72 61 6d 29 29 20 7b 0a 09  ndef(param)) {..
1ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac0: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 09 20      continue;.. 
1ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1ae0: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1af0: 20 20 69 66 20 28 54 6f 6e 65 2e 53 69 67 6e 61    if (Tone.Signa
1b00: 6c 20 26 26 20 70 61 72 61 6d 20 69 6e 73 74 61  l && param insta
1b10: 6e 63 65 6f 66 20 54 6f 6e 65 2e 53 69 67 6e 61  nceof Tone.Signa
1b20: 6c 20 7c 7c 20 54 6f 6e 65 2e 50 61 72 61 6d 20  l || Tone.Param 
1b30: 26 26 20 70 61 72 61 6d 20 69 6e 73 74 61 6e 63  && param instanc
1b40: 65 6f 66 20 54 6f 6e 65 2e 50 61 72 61 6d 29 20  eof Tone.Param) 
1b50: 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1b60: 20 20 20 20 20 20 20 69 66 20 28 70 61 72 61 6d         if (param
1b70: 2e 76 61 6c 75 65 20 21 3d 3d 20 76 61 6c 75 65  .value !== value
1b80: 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
1b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1ba0: 28 69 73 55 6e 64 65 66 28 72 61 6d 70 54 69 6d  (isUndef(rampTim
1bb0: 65 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  e)) {..         
1bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd0: 20 20 20 70 61 72 61 6d 2e 76 61 6c 75 65 20 3d     param.value =
1be0: 20 76 61 6c 75 65 3b 0a 09 20 20 20 20 20 20 20   value;..       
1bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c00: 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20   } else {..     
1c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c20: 20 20 20 20 20 20 20 70 61 72 61 6d 2e 72 61 6d         param.ram
1c30: 70 54 6f 28 76 61 6c 75 65 2c 20 72 61 6d 70 54  pTo(value, rampT
1c40: 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 20  ime);..         
1c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1c60: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c70: 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
1c80: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else 
1c90: 69 66 20 28 70 61 72 61 6d 20 69 6e 73 74 61 6e  if (param instan
1ca0: 63 65 6f 66 20 41 75 64 69 6f 50 61 72 61 6d 29  ceof AudioParam)
1cb0: 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1cc0: 20 20 20 20 20 20 20 20 69 66 20 28 70 61 72 61          if (para
1cd0: 6d 2e 76 61 6c 75 65 20 21 3d 3d 20 76 61 6c 75  m.value !== valu
1ce0: 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  e) {..          
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
1d00: 72 61 6d 2e 76 61 6c 75 65 20 3d 20 76 61 6c 75  ram.value = valu
1d10: 65 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1d20: 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
1d30: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
1d40: 65 20 69 66 20 28 70 61 72 61 6d 20 69 6e 73 74  e if (param inst
1d50: 61 6e 63 65 6f 66 20 54 6f 6e 65 29 20 7b 0a 09  anceof Tone) {..
1d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d70: 20 20 20 20 70 61 72 61 6d 2e 73 65 74 28 76 61      param.set(va
1d80: 6c 75 65 29 3b 0a 09 20 20 20 20 20 20 20 20 20  lue);..         
1d90: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66         } else if
1da0: 20 28 70 61 72 61 6d 20 21 3d 3d 20 76 61 6c 75   (param !== valu
1db0: 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  e) {..          
1dc0: 20 20 20 20 20 20 20 20 20 20 70 61 72 65 6e 74            parent
1dd0: 5b 61 74 74 72 5d 20 3d 20 76 61 6c 75 65 3b 0a  [attr] = value;.
1de0: 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1df0: 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1e00: 7d 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  }..        retur
1e10: 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a  n this;..    };.
1e20: 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 47  .    /**... *  G
1e30: 65 74 20 74 68 65 20 6f 62 6a 65 63 74 27 73 20  et the object's 
1e40: 61 74 74 72 69 62 75 74 65 73 2e 20 47 69 76 65  attributes. Give
1e50: 6e 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 20 67  n no arguments g
1e60: 65 74 0a 09 09 20 2a 20 20 77 69 6c 6c 20 72 65  et... *  will re
1e70: 74 75 72 6e 20 61 6c 6c 20 61 76 61 69 6c 61 62  turn all availab
1e80: 6c 65 20 6f 62 6a 65 63 74 20 70 72 6f 70 65 72  le object proper
1e90: 74 69 65 73 20 61 6e 64 20 74 68 65 69 72 20 63  ties and their c
1ea0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 09 09 20  orresponding... 
1eb0: 2a 20 20 76 61 6c 75 65 73 2e 20 50 61 73 73 20  *  values. Pass 
1ec0: 69 6e 20 61 20 73 69 6e 67 6c 65 20 61 74 74 72  in a single attr
1ed0: 69 62 75 74 65 20 74 6f 20 72 65 74 72 69 65 76  ibute to retriev
1ee0: 65 20 6f 72 20 61 6e 20 61 72 72 61 79 0a 09 09  e or an array...
1ef0: 20 2a 20 20 6f 66 20 61 74 74 72 69 62 75 74 65   *  of attribute
1f00: 73 2e 20 54 68 65 20 61 74 74 72 69 62 75 74 65  s. The attribute
1f10: 20 73 74 72 69 6e 67 73 20 63 61 6e 20 61 6c 73   strings can als
1f20: 6f 20 69 6e 63 6c 75 64 65 20 61 20 22 2e 22 0a  o include a ".".
1f30: 09 09 20 2a 20 20 74 6f 20 61 63 63 65 73 73 20  .. *  to access 
1f40: 64 65 65 70 65 72 20 70 72 6f 70 65 72 74 69 65  deeper propertie
1f50: 73 2e 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c  s.... *  @exampl
1f60: 65 0a 09 09 20 2a 20 6f 73 63 2e 67 65 74 28 29  e... * osc.get()
1f70: 3b 0a 09 09 20 2a 20 2f 2f 72 65 74 75 72 6e 73  ;... * //returns
1f80: 20 7b 22 74 79 70 65 22 20 3a 20 22 73 69 6e 65   {"type" : "sine
1f90: 22 2c 20 22 66 72 65 71 75 65 6e 63 79 22 20 3a  ", "frequency" :
1fa0: 20 34 34 30 2c 20 2e 2e 2e 65 74 63 7d 0a 09 09   440, ...etc}...
1fb0: 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20   *  @example... 
1fc0: 2a 20 6f 73 63 2e 67 65 74 28 22 74 79 70 65 22  * osc.get("type"
1fd0: 29 3b 0a 09 09 20 2a 20 2f 2f 72 65 74 75 72 6e  );... * //return
1fe0: 73 20 7b 20 22 74 79 70 65 22 20 3a 20 22 73 69  s { "type" : "si
1ff0: 6e 65 22 7d 0a 09 09 20 2a 20 40 65 78 61 6d 70  ne"}... * @examp
2000: 6c 65 0a 09 09 20 2a 20 2f 2f 75 73 65 20 64 6f  le... * //use do
2010: 74 20 6e 6f 74 61 74 69 6f 6e 20 74 6f 20 61 63  t notation to ac
2020: 63 65 73 73 20 64 65 65 70 20 70 72 6f 70 65 72  cess deep proper
2030: 74 69 65 73 0a 09 09 20 2a 20 73 79 6e 74 68 2e  ties... * synth.
2040: 67 65 74 28 5b 22 65 6e 76 65 6c 6f 70 65 2e 61  get(["envelope.a
2050: 74 74 61 63 6b 22 2c 20 22 65 6e 76 65 6c 6f 70  ttack", "envelop
2060: 65 2e 72 65 6c 65 61 73 65 22 5d 29 3b 0a 09 09  e.release"]);...
2070: 20 2a 20 2f 2f 72 65 74 75 72 6e 73 20 7b 22 65   * //returns {"e
2080: 6e 76 65 6c 6f 70 65 22 20 3a 20 7b 22 61 74 74  nvelope" : {"att
2090: 61 63 6b 22 20 3a 20 30 2e 32 2c 20 22 72 65 6c  ack" : 0.2, "rel
20a0: 65 61 73 65 22 20 3a 20 30 2e 34 7d 7d 0a 09 09  ease" : 0.4}}...
20b0: 20 2a 20 20 40 70 61 72 61 6d 20 7b 41 72 72 61   *  @param {Arra
20c0: 79 3d 7c 73 74 72 69 6e 67 7c 75 6e 64 65 66 69  y=|string|undefi
20d0: 6e 65 64 7d 20 70 61 72 61 6d 73 20 74 68 65 20  ned} params the 
20e0: 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 67 65  parameters to ge
20f0: 74 2c 20 6f 74 68 65 72 77 69 73 65 20 77 69 6c  t, otherwise wil
2100: 6c 20 72 65 74 75 72 6e 20 0a 09 09 20 2a 20 20  l return ... *  
2110: 09 09 09 09 09 20 20 20 20 20 20 20 20 20 20 20  .....           
2120: 20 20 20 20 20 20 20 61 6c 6c 20 61 76 61 69 6c         all avail
2130: 61 62 6c 65 2e 0a 09 09 20 2a 20 20 40 72 65 74  able.... *  @ret
2140: 75 72 6e 73 20 7b 4f 62 6a 65 63 74 7d 0a 09 09  urns {Object}...
2150: 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 70 72   */..    Tone.pr
2160: 6f 74 6f 74 79 70 65 2e 67 65 74 20 3d 20 66 75  ototype.get = fu
2170: 6e 63 74 69 6f 6e 20 28 70 61 72 61 6d 73 29 20  nction (params) 
2180: 7b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 69  {..        if (i
2190: 73 55 6e 64 65 66 28 70 61 72 61 6d 73 29 29 20  sUndef(params)) 
21a0: 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 70  {..            p
21b0: 61 72 61 6d 73 20 3d 20 74 68 69 73 2e 5f 63 6f  arams = this._co
21c0: 6c 6c 65 63 74 44 65 66 61 75 6c 74 73 28 74 68  llectDefaults(th
21d0: 69 73 2e 63 6f 6e 73 74 72 75 63 74 6f 72 29 3b  is.constructor);
21e0: 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
21f0: 20 69 66 20 28 74 68 69 73 2e 69 73 53 74 72 69   if (this.isStri
2200: 6e 67 28 70 61 72 61 6d 73 29 29 20 7b 0a 09 20  ng(params)) {.. 
2210: 20 20 20 20 20 20 20 20 20 20 20 70 61 72 61 6d             param
2220: 73 20 3d 20 5b 70 61 72 61 6d 73 5d 3b 0a 09 20  s = [params];.. 
2230: 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
2240: 20 20 76 61 72 20 72 65 74 20 3d 20 7b 7d 3b 0a    var ret = {};.
2250: 09 20 20 20 20 20 20 20 20 66 6f 72 20 28 76 61  .        for (va
2260: 72 20 69 20 3d 20 30 3b 20 69 20 3c 20 70 61 72  r i = 0; i < par
2270: 61 6d 73 2e 6c 65 6e 67 74 68 3b 20 69 2b 2b 29  ams.length; i++)
2280: 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2290: 76 61 72 20 61 74 74 72 20 3d 20 70 61 72 61 6d  var attr = param
22a0: 73 5b 69 5d 3b 0a 09 20 20 20 20 20 20 20 20 20  s[i];..         
22b0: 20 20 20 76 61 72 20 70 61 72 65 6e 74 20 3d 20     var parent = 
22c0: 74 68 69 73 3b 0a 09 20 20 20 20 20 20 20 20 20  this;..         
22d0: 20 20 20 76 61 72 20 73 75 62 52 65 74 20 3d 20     var subRet = 
22e0: 72 65 74 3b 0a 09 20 20 20 20 20 20 20 20 20 20  ret;..          
22f0: 20 20 69 66 20 28 61 74 74 72 2e 69 6e 64 65 78    if (attr.index
2300: 4f 66 28 27 2e 27 29 20 21 3d 3d 20 2d 31 29 20  Of('.') !== -1) 
2310: 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2320: 20 20 20 76 61 72 20 61 74 74 72 53 70 6c 69 74     var attrSplit
2330: 20 3d 20 61 74 74 72 2e 73 70 6c 69 74 28 27 2e   = attr.split('.
2340: 27 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ');..           
2350: 20 20 20 20 20 66 6f 72 20 28 76 61 72 20 6a 20       for (var j 
2360: 3d 20 30 3b 20 6a 20 3c 20 61 74 74 72 53 70 6c  = 0; j < attrSpl
2370: 69 74 2e 6c 65 6e 67 74 68 20 2d 20 31 3b 20 6a  it.length - 1; j
2380: 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ++) {..         
2390: 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 73             var s
23a0: 75 62 41 74 74 72 20 3d 20 61 74 74 72 53 70 6c  ubAttr = attrSpl
23b0: 69 74 5b 6a 5d 3b 0a 09 20 20 20 20 20 20 20 20  it[j];..        
23c0: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 52              subR
23d0: 65 74 5b 73 75 62 41 74 74 72 5d 20 3d 20 73 75  et[subAttr] = su
23e0: 62 52 65 74 5b 73 75 62 41 74 74 72 5d 20 7c 7c  bRet[subAttr] ||
23f0: 20 7b 7d 3b 0a 09 20 20 20 20 20 20 20 20 20 20   {};..          
2400: 20 20 20 20 20 20 20 20 20 20 73 75 62 52 65 74            subRet
2410: 20 3d 20 73 75 62 52 65 74 5b 73 75 62 41 74 74   = subRet[subAtt
2420: 72 5d 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  r];..           
2430: 20 20 20 20 20 20 20 20 20 70 61 72 65 6e 74 20           parent 
2440: 3d 20 70 61 72 65 6e 74 5b 73 75 62 41 74 74 72  = parent[subAttr
2450: 5d 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
2460: 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20      }..         
2470: 20 20 20 20 20 20 20 61 74 74 72 20 3d 20 61 74         attr = at
2480: 74 72 53 70 6c 69 74 5b 61 74 74 72 53 70 6c 69  trSplit[attrSpli
2490: 74 2e 6c 65 6e 67 74 68 20 2d 20 31 5d 3b 0a 09  t.length - 1];..
24a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20              }.. 
24b0: 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 70             var p
24c0: 61 72 61 6d 20 3d 20 70 61 72 65 6e 74 5b 61 74  aram = parent[at
24d0: 74 72 5d 3b 0a 09 20 20 20 20 20 20 20 20 20 20  tr];..          
24e0: 20 20 69 66 20 28 74 68 69 73 2e 69 73 4f 62 6a    if (this.isObj
24f0: 65 63 74 28 70 61 72 61 6d 73 5b 61 74 74 72 5d  ect(params[attr]
2500: 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  )) {..          
2510: 20 20 20 20 20 20 73 75 62 52 65 74 5b 61 74 74        subRet[att
2520: 72 5d 20 3d 20 70 61 72 61 6d 2e 67 65 74 28 29  r] = param.get()
2530: 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2540: 20 65 6c 73 65 20 69 66 20 28 54 6f 6e 65 2e 53   else if (Tone.S
2550: 69 67 6e 61 6c 20 26 26 20 70 61 72 61 6d 20 69  ignal && param i
2560: 6e 73 74 61 6e 63 65 6f 66 20 54 6f 6e 65 2e 53  nstanceof Tone.S
2570: 69 67 6e 61 6c 29 20 7b 0a 09 20 20 20 20 20 20  ignal) {..      
2580: 20 20 20 20 20 20 20 20 20 20 73 75 62 52 65 74            subRet
2590: 5b 61 74 74 72 5d 20 3d 20 70 61 72 61 6d 2e 76  [attr] = param.v
25a0: 61 6c 75 65 3b 0a 09 20 20 20 20 20 20 20 20 20  alue;..         
25b0: 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 54 6f     } else if (To
25c0: 6e 65 2e 50 61 72 61 6d 20 26 26 20 70 61 72 61  ne.Param && para
25d0: 6d 20 69 6e 73 74 61 6e 63 65 6f 66 20 54 6f 6e  m instanceof Ton
25e0: 65 2e 50 61 72 61 6d 29 20 7b 0a 09 20 20 20 20  e.Param) {..    
25f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 52              subR
2600: 65 74 5b 61 74 74 72 5d 20 3d 20 70 61 72 61 6d  et[attr] = param
2610: 2e 76 61 6c 75 65 3b 0a 09 20 20 20 20 20 20 20  .value;..       
2620: 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28       } else if (
2630: 70 61 72 61 6d 20 69 6e 73 74 61 6e 63 65 6f 66  param instanceof
2640: 20 41 75 64 69 6f 50 61 72 61 6d 29 20 7b 0a 09   AudioParam) {..
2650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2660: 73 75 62 52 65 74 5b 61 74 74 72 5d 20 3d 20 70  subRet[attr] = p
2670: 61 72 61 6d 2e 76 61 6c 75 65 3b 0a 09 20 20 20  aram.value;..   
2680: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else 
2690: 69 66 20 28 70 61 72 61 6d 20 69 6e 73 74 61 6e  if (param instan
26a0: 63 65 6f 66 20 54 6f 6e 65 29 20 7b 0a 09 20 20  ceof Tone) {..  
26b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
26c0: 62 52 65 74 5b 61 74 74 72 5d 20 3d 20 70 61 72  bRet[attr] = par
26d0: 61 6d 2e 67 65 74 28 29 3b 0a 09 20 20 20 20 20  am.get();..     
26e0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66         } else if
26f0: 20 28 21 69 73 46 75 6e 63 74 69 6f 6e 28 70 61   (!isFunction(pa
2700: 72 61 6d 29 20 26 26 20 21 69 73 55 6e 64 65 66  ram) && !isUndef
2710: 28 70 61 72 61 6d 29 29 20 7b 0a 09 20 20 20 20  (param)) {..    
2720: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 52              subR
2730: 65 74 5b 61 74 74 72 5d 20 3d 20 70 61 72 61 6d  et[attr] = param
2740: 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2750: 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
2760: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 74 3b       return ret;
2770: 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
2780: 2a 0a 09 09 20 2a 20 20 63 6f 6c 6c 65 63 74 20  *... *  collect 
2790: 61 6c 6c 20 6f 66 20 74 68 65 20 64 65 66 61 75  all of the defau
27a0: 6c 74 20 61 74 74 72 69 62 75 74 65 73 20 69 6e  lt attributes in
27b0: 20 6f 6e 65 0a 09 09 20 2a 20 20 40 70 72 69 76   one... *  @priv
27c0: 61 74 65 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  ate... *  @param
27d0: 20 7b 66 75 6e 63 74 69 6f 6e 7d 20 63 6f 6e 73   {function} cons
27e0: 74 72 20 74 68 65 20 63 6f 6e 73 74 72 75 63 74  tr the construct
27f0: 6f 72 20 74 6f 20 66 69 6e 64 20 74 68 65 20 64  or to find the d
2800: 65 66 61 75 6c 74 73 20 66 72 6f 6d 0a 09 09 20  efaults from... 
2810: 2a 20 20 40 72 65 74 75 72 6e 20 7b 41 72 72 61  *  @return {Arra
2820: 79 7d 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 74  y} all of the at
2830: 74 72 69 62 75 74 65 73 20 77 68 69 63 68 20 62  tributes which b
2840: 65 6c 6f 6e 67 20 74 6f 20 74 68 65 20 63 6c 61  elong to the cla
2850: 73 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  ss... */..    To
2860: 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 63 6f  ne.prototype._co
2870: 6c 6c 65 63 74 44 65 66 61 75 6c 74 73 20 3d 20  llectDefaults = 
2880: 66 75 6e 63 74 69 6f 6e 20 28 63 6f 6e 73 74 72  function (constr
2890: 29 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72  ) {..        var
28a0: 20 72 65 74 20 3d 20 5b 5d 3b 0a 09 20 20 20 20   ret = [];..    
28b0: 20 20 20 20 69 66 20 28 21 69 73 55 6e 64 65 66      if (!isUndef
28c0: 28 63 6f 6e 73 74 72 2e 64 65 66 61 75 6c 74 73  (constr.defaults
28d0: 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  )) {..          
28e0: 20 20 72 65 74 20 3d 20 4f 62 6a 65 63 74 2e 6b    ret = Object.k
28f0: 65 79 73 28 63 6f 6e 73 74 72 2e 64 65 66 61 75  eys(constr.defau
2900: 6c 74 73 29 3b 0a 09 20 20 20 20 20 20 20 20 7d  lts);..        }
2910: 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 21 69  ..        if (!i
2920: 73 55 6e 64 65 66 28 63 6f 6e 73 74 72 2e 5f 73  sUndef(constr._s
2930: 75 70 65 72 29 29 20 7b 0a 09 20 20 20 20 20 20  uper)) {..      
2940: 20 20 20 20 20 20 76 61 72 20 73 75 70 65 72 44        var superD
2950: 65 66 73 20 3d 20 74 68 69 73 2e 5f 63 6f 6c 6c  efs = this._coll
2960: 65 63 74 44 65 66 61 75 6c 74 73 28 63 6f 6e 73  ectDefaults(cons
2970: 74 72 2e 5f 73 75 70 65 72 29 3b 0a 09 20 20 20  tr._super);..   
2980: 20 20 20 20 20 20 20 20 20 2f 2f 66 69 6c 74 65           //filte
2990: 72 20 6f 75 74 20 72 65 70 65 61 74 73 0a 09 20  r out repeats.. 
29a0: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28             for (
29b0: 76 61 72 20 69 20 3d 20 30 3b 20 69 20 3c 20 73  var i = 0; i < s
29c0: 75 70 65 72 44 65 66 73 2e 6c 65 6e 67 74 68 3b  uperDefs.length;
29d0: 20 69 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20 20   i++) {..       
29e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 74           if (ret
29f0: 2e 69 6e 64 65 78 4f 66 28 73 75 70 65 72 44 65  .indexOf(superDe
2a00: 66 73 5b 69 5d 29 20 3d 3d 3d 20 2d 31 29 20 7b  fs[i]) === -1) {
2a10: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a20: 20 20 20 20 20 20 72 65 74 2e 70 75 73 68 28 73        ret.push(s
2a30: 75 70 65 72 44 65 66 73 5b 69 5d 29 3b 0a 09 20  uperDefs[i]);.. 
2a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2a50: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ..            }.
2a60: 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
2a70: 20 20 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0a      return ret;.
2a80: 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
2a90: 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20  ... *  @returns 
2aa0: 7b 73 74 72 69 6e 67 7d 20 72 65 74 75 72 6e 73  {string} returns
2ab0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
2ac0: 20 63 6c 61 73 73 20 61 73 20 61 20 73 74 72 69   class as a stri
2ad0: 6e 67 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  ng... */..    To
2ae0: 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e 74 6f 53  ne.prototype.toS
2af0: 74 72 69 6e 67 20 3d 20 66 75 6e 63 74 69 6f 6e  tring = function
2b00: 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 66   () {..        f
2b10: 6f 72 20 28 76 61 72 20 63 6c 61 73 73 4e 61 6d  or (var classNam
2b20: 65 20 69 6e 20 54 6f 6e 65 29 20 7b 0a 09 20 20  e in Tone) {..  
2b30: 20 20 20 20 20 20 20 20 20 20 76 61 72 20 69 73            var is
2b40: 4c 65 74 74 65 72 20 3d 20 63 6c 61 73 73 4e 61  Letter = classNa
2b50: 6d 65 5b 30 5d 2e 6d 61 74 63 68 28 2f 5e 5b 41  me[0].match(/^[A
2b60: 2d 5a 5d 24 2f 29 3b 0a 09 20 20 20 20 20 20 20  -Z]$/);..       
2b70: 20 20 20 20 20 76 61 72 20 73 61 6d 65 43 6f 6e       var sameCon
2b80: 73 74 72 75 63 74 6f 72 20 3d 20 54 6f 6e 65 5b  structor = Tone[
2b90: 63 6c 61 73 73 4e 61 6d 65 5d 20 3d 3d 3d 20 74  className] === t
2ba0: 68 69 73 2e 63 6f 6e 73 74 72 75 63 74 6f 72 3b  his.constructor;
2bb0: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2bc0: 20 28 69 73 46 75 6e 63 74 69 6f 6e 28 54 6f 6e   (isFunction(Ton
2bd0: 65 5b 63 6c 61 73 73 4e 61 6d 65 5d 29 20 26 26  e[className]) &&
2be0: 20 69 73 4c 65 74 74 65 72 20 26 26 20 73 61 6d   isLetter && sam
2bf0: 65 43 6f 6e 73 74 72 75 63 74 6f 72 29 20 7b 0a  eConstructor) {.
2c00: 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c10: 20 72 65 74 75 72 6e 20 63 6c 61 73 73 4e 61 6d   return classNam
2c20: 65 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2c30: 7d 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20  }..        }..  
2c40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 27 54 6f        return 'To
2c50: 6e 65 27 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  ne';..    };..  
2c60: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20  /////////////.. 
2cb0: 20 20 20 2f 2f 09 43 4c 41 53 53 20 56 41 52 53     //.CLASS VARS
2cc0: 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
2cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d10: 2f 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  /..    /**... * 
2d20: 20 41 20 73 74 61 74 69 63 20 70 6f 69 6e 74 65   A static pointe
2d30: 72 20 74 6f 20 74 68 65 20 61 75 64 69 6f 20 63  r to the audio c
2d40: 6f 6e 74 65 78 74 20 61 63 63 65 73 73 69 62 6c  ontext accessibl
2d50: 65 20 61 73 20 54 6f 6e 65 2e 63 6f 6e 74 65 78  e as Tone.contex
2d60: 74 2e 20 0a 09 09 20 2a 20 20 40 74 79 70 65 20  t. ... *  @type 
2d70: 7b 41 75 64 69 6f 43 6f 6e 74 65 78 74 7d 0a 09  {AudioContext}..
2d80: 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 63  . */..    Tone.c
2d90: 6f 6e 74 65 78 74 20 3d 20 61 75 64 69 6f 43 6f  ontext = audioCo
2da0: 6e 74 65 78 74 3b 0a 09 20 20 20 20 2f 2a 2a 0a  ntext;..    /**.
2db0: 09 09 20 2a 20 20 54 68 65 20 61 75 64 69 6f 20  .. *  The audio 
2dc0: 63 6f 6e 74 65 78 74 2e 0a 09 09 20 2a 20 20 40  context.... *  @
2dd0: 74 79 70 65 20 7b 41 75 64 69 6f 43 6f 6e 74 65  type {AudioConte
2de0: 78 74 7d 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  xt}... */..    T
2df0: 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e 63 6f  one.prototype.co
2e00: 6e 74 65 78 74 20 3d 20 54 6f 6e 65 2e 63 6f 6e  ntext = Tone.con
2e10: 74 65 78 74 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09  text;..    /**..
2e20: 09 20 2a 20 20 74 68 65 20 64 65 66 61 75 6c 74  . *  the default
2e30: 20 62 75 66 66 65 72 20 73 69 7a 65 0a 09 09 20   buffer size... 
2e40: 2a 20 20 40 74 79 70 65 20 7b 6e 75 6d 62 65 72  *  @type {number
2e50: 7d 0a 09 09 20 2a 20 20 40 73 74 61 74 69 63 0a  }... *  @static.
2e60: 09 09 20 2a 20 20 40 63 6f 6e 73 74 0a 09 09 20  .. *  @const... 
2e70: 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 70 72 6f  */..    Tone.pro
2e80: 74 6f 74 79 70 65 2e 62 75 66 66 65 72 53 69 7a  totype.bufferSiz
2e90: 65 20 3d 20 32 30 34 38 3b 0a 09 20 20 20 20 2f  e = 2048;..    /
2ea0: 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20 64 65 6c  **... *  The del
2eb0: 61 79 20 74 69 6d 65 20 6f 66 20 61 20 73 69 6e  ay time of a sin
2ec0: 67 6c 65 20 66 72 61 6d 65 20 28 31 32 38 20 73  gle frame (128 s
2ed0: 61 6d 70 6c 65 73 20 61 63 63 6f 72 64 69 6e 67  amples according
2ee0: 20 74 6f 20 74 68 65 20 73 70 65 63 29 2e 20 0a   to the spec). .
2ef0: 09 09 20 2a 20 20 40 74 79 70 65 20 7b 6e 75 6d  .. *  @type {num
2f00: 62 65 72 7d 0a 09 09 20 2a 20 20 40 73 74 61 74  ber}... *  @stat
2f10: 69 63 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 0a  ic... *  @const.
2f20: 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
2f30: 70 72 6f 74 6f 74 79 70 65 2e 62 6c 6f 63 6b 54  prototype.blockT
2f40: 69 6d 65 20 3d 20 31 32 38 20 2f 20 54 6f 6e 65  ime = 128 / Tone
2f50: 2e 63 6f 6e 74 65 78 74 2e 73 61 6d 70 6c 65 52  .context.sampleR
2f60: 61 74 65 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09  ate;..    /**...
2f70: 20 2a 20 20 54 68 65 20 74 69 6d 65 20 6f 66 20   *  The time of 
2f80: 61 20 73 69 6e 67 6c 65 20 73 61 6d 70 6c 65 0a  a single sample.
2f90: 09 09 20 2a 20 20 40 74 79 70 65 20 7b 6e 75 6d  .. *  @type {num
2fa0: 62 65 72 7d 0a 09 09 20 2a 20 20 40 73 74 61 74  ber}... *  @stat
2fb0: 69 63 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 0a  ic... *  @const.
2fc0: 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
2fd0: 70 72 6f 74 6f 74 79 70 65 2e 73 61 6d 70 6c 65  prototype.sample
2fe0: 54 69 6d 65 20 3d 20 31 20 2f 20 54 6f 6e 65 2e  Time = 1 / Tone.
2ff0: 63 6f 6e 74 65 78 74 2e 73 61 6d 70 6c 65 52 61  context.sampleRa
3000: 74 65 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  te;..    /**... 
3010: 2a 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  *  The number of
3020: 20 69 6e 70 75 74 73 20 66 65 65 64 69 6e 67 20   inputs feeding 
3030: 69 6e 74 6f 20 74 68 65 20 41 75 64 69 6f 4e 6f  into the AudioNo
3040: 64 65 2e 20 0a 09 09 20 2a 20 20 46 6f 72 20 73  de. ... *  For s
3050: 6f 75 72 63 65 20 6e 6f 64 65 73 2c 20 74 68 69  ource nodes, thi
3060: 73 20 77 69 6c 6c 20 62 65 20 30 2e 0a 09 09 20  s will be 0.... 
3070: 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e  *  @memberOf Ton
3080: 65 23 0a 09 09 20 2a 20 20 40 6e 61 6d 65 20 6e  e#... *  @name n
3090: 75 6d 62 65 72 4f 66 49 6e 70 75 74 73 0a 09 09  umberOfInputs...
30a0: 20 2a 20 20 40 72 65 61 64 4f 6e 6c 79 0a 09 09   *  @readOnly...
30b0: 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e   */..    Object.
30c0: 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54  defineProperty(T
30d0: 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27  one.prototype, '
30e0: 6e 75 6d 62 65 72 4f 66 49 6e 70 75 74 73 27 2c  numberOfInputs',
30f0: 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a   {..        get:
3100: 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
3110: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3120: 74 68 69 73 2e 69 6e 70 75 74 29 20 7b 0a 09 20  this.input) {.. 
3130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3140: 66 20 28 74 68 69 73 2e 69 73 41 72 72 61 79 28  f (this.isArray(
3150: 74 68 69 73 2e 69 6e 70 75 74 29 29 20 7b 0a 09  this.input)) {..
3160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3170: 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
3180: 69 6e 70 75 74 2e 6c 65 6e 67 74 68 3b 0a 09 20  input.length;.. 
3190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
31a0: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20   else {..       
31b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
31c0: 75 72 6e 20 31 3b 0a 09 20 20 20 20 20 20 20 20  urn 1;..        
31d0: 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
31e0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
31f0: 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3200: 20 72 65 74 75 72 6e 20 30 3b 0a 09 20 20 20 20   return 0;..    
3210: 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
3220: 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20     }..    });.. 
3230: 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 68 65     /**... *  The
3240: 20 6e 75 6d 62 65 72 20 6f 66 20 6f 75 74 70 75   number of outpu
3250: 74 73 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66  ts coming out of
3260: 20 74 68 65 20 41 75 64 69 6f 4e 6f 64 65 2e 20   the AudioNode. 
3270: 0a 09 09 20 2a 20 20 46 6f 72 20 73 6f 75 72 63  ... *  For sourc
3280: 65 20 6e 6f 64 65 73 2c 20 74 68 69 73 20 77 69  e nodes, this wi
3290: 6c 6c 20 62 65 20 30 2e 0a 09 09 20 2a 20 20 40  ll be 0.... *  @
32a0: 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 23 0a 09  memberOf Tone#..
32b0: 09 20 2a 20 20 40 6e 61 6d 65 20 6e 75 6d 62 65  . *  @name numbe
32c0: 72 4f 66 49 6e 70 75 74 73 0a 09 09 20 2a 20 20  rOfInputs... *  
32d0: 40 72 65 61 64 4f 6e 6c 79 0a 09 09 20 2a 2f 0a  @readOnly... */.
32e0: 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69  .    Object.defi
32f0: 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e  neProperty(Tone.
3300: 70 72 6f 74 6f 74 79 70 65 2c 20 27 6e 75 6d 62  prototype, 'numb
3310: 65 72 4f 66 4f 75 74 70 75 74 73 27 2c 20 7b 0a  erOfOutputs', {.
3320: 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75  .        get: fu
3330: 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
3340: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69           if (thi
3350: 73 2e 6f 75 74 70 75 74 29 20 7b 0a 09 20 20 20  s.output) {..   
3360: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
3370: 28 74 68 69 73 2e 69 73 41 72 72 61 79 28 74 68  (this.isArray(th
3380: 69 73 2e 6f 75 74 70 75 74 29 29 20 7b 0a 09 20  is.output)) {.. 
3390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a0: 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 6f     return this.o
33b0: 75 74 70 75 74 2e 6c 65 6e 67 74 68 3b 0a 09 20  utput.length;.. 
33c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
33d0: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20   else {..       
33e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
33f0: 75 72 6e 20 31 3b 0a 09 20 20 20 20 20 20 20 20  urn 1;..        
3400: 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
3410: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
3420: 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3430: 20 72 65 74 75 72 6e 20 30 3b 0a 09 20 20 20 20   return 0;..    
3440: 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
3450: 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20     }..    });.. 
3460: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
3470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09  //////////////..
34b0: 20 20 20 20 2f 2f 09 43 4f 4e 4e 45 43 54 49 4f      //.CONNECTIO
34c0: 4e 53 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  NS..    ////////
34d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3510: 2f 2f 2f 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  ///..    /**... 
3520: 2a 20 20 64 69 73 63 6f 6e 6e 65 63 74 20 61 6e  *  disconnect an
3530: 64 20 64 69 73 70 6f 73 65 0a 09 09 20 2a 20 20  d dispose... *  
3540: 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 7d 20  @returns {Tone} 
3550: 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20  this... */..    
3560: 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e 64  Tone.prototype.d
3570: 69 73 70 6f 73 65 20 3d 20 66 75 6e 63 74 69 6f  ispose = functio
3580: 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
3590: 69 66 20 28 21 74 68 69 73 2e 69 73 55 6e 64 65  if (!this.isUnde
35a0: 66 28 74 68 69 73 2e 69 6e 70 75 74 29 29 20 7b  f(this.input)) {
35b0: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
35c0: 20 28 74 68 69 73 2e 69 6e 70 75 74 20 69 6e 73   (this.input ins
35d0: 74 61 6e 63 65 6f 66 20 41 75 64 69 6f 4e 6f 64  tanceof AudioNod
35e0: 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  e) {..          
35f0: 20 20 20 20 20 20 74 68 69 73 2e 69 6e 70 75 74        this.input
3600: 2e 64 69 73 63 6f 6e 6e 65 63 74 28 29 3b 0a 09  .disconnect();..
3610: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20              }.. 
3620: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
3630: 69 6e 70 75 74 20 3d 20 6e 75 6c 6c 3b 0a 09 20  input = null;.. 
3640: 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
3650: 20 20 69 66 20 28 21 74 68 69 73 2e 69 73 55 6e    if (!this.isUn
3660: 64 65 66 28 74 68 69 73 2e 6f 75 74 70 75 74 29  def(this.output)
3670: 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
3680: 20 69 66 20 28 74 68 69 73 2e 6f 75 74 70 75 74   if (this.output
3690: 20 69 6e 73 74 61 6e 63 65 6f 66 20 41 75 64 69   instanceof Audi
36a0: 6f 4e 6f 64 65 29 20 7b 0a 09 20 20 20 20 20 20  oNode) {..      
36b0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f            this.o
36c0: 75 74 70 75 74 2e 64 69 73 63 6f 6e 6e 65 63 74  utput.disconnect
36d0: 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ();..           
36e0: 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   }..            
36f0: 74 68 69 73 2e 6f 75 74 70 75 74 20 3d 20 6e 75  this.output = nu
3700: 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  ll;..        }..
3710: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
3720: 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  his;..    };..  
3730: 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 61 20 73 69    /**... *  a si
3740: 6c 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  lent connection 
3750: 74 6f 20 74 68 65 20 44 65 73 69 6e 61 74 69 6f  to the Desinatio
3760: 6e 4e 6f 64 65 0a 09 09 20 2a 20 20 77 68 69 63  nNode... *  whic
3770: 68 20 77 69 6c 6c 20 65 6e 73 75 72 65 20 74 68  h will ensure th
3780: 61 74 20 61 6e 79 74 68 69 6e 67 20 63 6f 6e 6e  at anything conn
3790: 65 63 74 65 64 20 74 6f 20 69 74 0a 09 09 20 2a  ected to it... *
37a0: 20 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 67 61    will not be ga
37b0: 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 65 64 0a  rbage collected.
37c0: 09 09 20 2a 20 20 0a 09 09 20 2a 20 20 40 70 72  .. *  ... *  @pr
37d0: 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20  ivate... */..   
37e0: 20 76 61 72 20 5f 73 69 6c 65 6e 74 4e 6f 64 65   var _silentNode
37f0: 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 2f 2a   = null;..    /*
3800: 2a 0a 09 09 20 2a 20 20 6d 61 6b 65 73 20 61 20  *... *  makes a 
3810: 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 65 6e  connection to en
3820: 73 75 72 65 20 74 68 61 74 20 74 68 65 20 6e 6f  sure that the no
3830: 64 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 67  de will not be g
3840: 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 65 64  arbage collected
3850: 0a 09 09 20 2a 20 20 75 6e 74 69 6c 20 27 64 69  ... *  until 'di
3860: 73 70 6f 73 65 27 20 69 73 20 65 78 70 6c 69 63  spose' is explic
3870: 69 74 6c 79 20 63 61 6c 6c 65 64 0a 09 09 20 2a  itly called... *
3880: 0a 09 09 20 2a 20 20 75 73 65 20 63 61 72 65 66  ... *  use caref
3890: 75 6c 6c 79 2e 20 63 69 72 63 75 6d 76 65 6e 74  ully. circumvent
38a0: 73 20 4a 53 20 61 6e 64 20 57 65 62 41 75 64 69  s JS and WebAudi
38b0: 6f 27 73 20 6e 6f 72 6d 61 6c 20 47 61 72 62 61  o's normal Garba
38c0: 67 65 20 43 6f 6c 6c 65 63 74 69 6f 6e 20 62 65  ge Collection be
38d0: 68 61 76 69 6f 72 0a 09 09 20 2a 20 20 40 72 65  havior... *  @re
38e0: 74 75 72 6e 73 20 7b 54 6f 6e 65 7d 20 74 68 69  turns {Tone} thi
38f0: 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  s... */..    Ton
3900: 65 2e 70 72 6f 74 6f 74 79 70 65 2e 6e 6f 47 43  e.prototype.noGC
3910: 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b   = function () {
3920: 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f  ..        this.o
3930: 75 74 70 75 74 2e 63 6f 6e 6e 65 63 74 28 5f 73  utput.connect(_s
3940: 69 6c 65 6e 74 4e 6f 64 65 29 3b 0a 09 20 20 20  ilentNode);..   
3950: 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
3960: 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 41  ;..    };..    A
3970: 75 64 69 6f 4e 6f 64 65 2e 70 72 6f 74 6f 74 79  udioNode.prototy
3980: 70 65 2e 6e 6f 47 43 20 3d 20 66 75 6e 63 74 69  pe.noGC = functi
3990: 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
39a0: 20 74 68 69 73 2e 63 6f 6e 6e 65 63 74 28 5f 73   this.connect(_s
39b0: 69 6c 65 6e 74 4e 6f 64 65 29 3b 0a 09 20 20 20  ilentNode);..   
39c0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
39d0: 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  ;..    };..    /
39e0: 2a 2a 0a 09 09 20 2a 20 20 63 6f 6e 6e 65 63 74  **... *  connect
39f0: 20 74 68 65 20 6f 75 74 70 75 74 20 6f 66 20 61   the output of a
3a00: 20 54 6f 6e 65 4e 6f 64 65 20 74 6f 20 61 6e 20   ToneNode to an 
3a10: 41 75 64 69 6f 50 61 72 61 6d 2c 20 41 75 64 69  AudioParam, Audi
3a20: 6f 4e 6f 64 65 2c 20 6f 72 20 54 6f 6e 65 4e 6f  oNode, or ToneNo
3a30: 64 65 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  de... *  @param 
3a40: 20 7b 54 6f 6e 65 20 7c 20 41 75 64 69 6f 50 61   {Tone | AudioPa
3a50: 72 61 6d 20 7c 20 41 75 64 69 6f 4e 6f 64 65 7d  ram | AudioNode}
3a60: 20 75 6e 69 74 20 0a 09 09 20 2a 20 20 40 70 61   unit ... *  @pa
3a70: 72 61 6d 20 7b 6e 75 6d 62 65 72 7d 20 5b 6f 75  ram {number} [ou
3a80: 74 70 75 74 4e 75 6d 3d 30 5d 20 6f 70 74 69 6f  tputNum=0] optio
3a90: 6e 61 6c 6c 79 20 77 68 69 63 68 20 6f 75 74 70  nally which outp
3aa0: 75 74 20 74 6f 20 63 6f 6e 6e 65 63 74 20 66 72  ut to connect fr
3ab0: 6f 6d 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  om... *  @param 
3ac0: 7b 6e 75 6d 62 65 72 7d 20 5b 69 6e 70 75 74 4e  {number} [inputN
3ad0: 75 6d 3d 30 5d 20 6f 70 74 69 6f 6e 61 6c 6c 79  um=0] optionally
3ae0: 20 77 68 69 63 68 20 69 6e 70 75 74 20 74 6f 20   which input to 
3af0: 63 6f 6e 6e 65 63 74 20 74 6f 0a 09 09 20 2a 20  connect to... * 
3b00: 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 7d   @returns {Tone}
3b10: 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20   this... */..   
3b20: 20 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e   Tone.prototype.
3b30: 63 6f 6e 6e 65 63 74 20 3d 20 66 75 6e 63 74 69  connect = functi
3b40: 6f 6e 20 28 75 6e 69 74 2c 20 6f 75 74 70 75 74  on (unit, output
3b50: 4e 75 6d 2c 20 69 6e 70 75 74 4e 75 6d 29 20 7b  Num, inputNum) {
3b60: 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 41 72  ..        if (Ar
3b70: 72 61 79 2e 69 73 41 72 72 61 79 28 74 68 69 73  ray.isArray(this
3b80: 2e 6f 75 74 70 75 74 29 29 20 7b 0a 09 20 20 20  .output)) {..   
3b90: 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 4e           outputN
3ba0: 75 6d 20 3d 20 74 68 69 73 2e 64 65 66 61 75 6c  um = this.defaul
3bb0: 74 41 72 67 28 6f 75 74 70 75 74 4e 75 6d 2c 20  tArg(outputNum, 
3bc0: 30 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  0);..           
3bd0: 20 74 68 69 73 2e 6f 75 74 70 75 74 5b 6f 75 74   this.output[out
3be0: 70 75 74 4e 75 6d 5d 2e 63 6f 6e 6e 65 63 74 28  putNum].connect(
3bf0: 75 6e 69 74 2c 20 30 2c 20 69 6e 70 75 74 4e 75  unit, 0, inputNu
3c00: 6d 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 20 65  m);..        } e
3c10: 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20  lse {..         
3c20: 20 20 20 74 68 69 73 2e 6f 75 74 70 75 74 2e 63     this.output.c
3c30: 6f 6e 6e 65 63 74 28 75 6e 69 74 2c 20 6f 75 74  onnect(unit, out
3c40: 70 75 74 4e 75 6d 2c 20 69 6e 70 75 74 4e 75 6d  putNum, inputNum
3c50: 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  );..        }.. 
3c60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
3c70: 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  is;..    };..   
3c80: 20 2f 2a 2a 0a 09 09 20 2a 20 20 64 69 73 63 6f   /**... *  disco
3c90: 6e 6e 65 63 74 20 74 68 65 20 6f 75 74 70 75 74  nnect the output
3ca0: 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 4e  ... *  @param {N
3cb0: 75 6d 62 65 72 7c 41 75 64 69 6f 4e 6f 64 65 7d  umber|AudioNode}
3cc0: 20 6f 75 74 70 75 74 20 45 69 74 68 65 72 20 74   output Either t
3cd0: 68 65 20 6f 75 74 70 75 74 20 69 6e 64 65 78 20  he output index 
3ce0: 74 6f 20 64 69 73 63 6f 6e 6e 65 63 74 0a 09 09  to disconnect...
3cf0: 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
3d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d10: 20 20 20 20 20 69 66 20 74 68 65 20 6f 75 74 70       if the outp
3d20: 75 74 20 69 73 20 61 6e 20 61 72 72 61 79 2c 20  ut is an array, 
3d30: 6f 72 20 74 68 65 0a 09 09 20 2a 20 20 20 20 20  or the... *     
3d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f                no
3d60: 64 65 20 74 6f 20 64 69 73 63 6f 6e 6e 65 63 74  de to disconnect
3d70: 20 66 72 6f 6d 2e 0a 09 09 20 2a 20 20 40 72 65   from.... *  @re
3d80: 74 75 72 6e 73 20 7b 54 6f 6e 65 7d 20 74 68 69  turns {Tone} thi
3d90: 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  s... */..    Ton
3da0: 65 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 63  e.prototype.disc
3db0: 6f 6e 6e 65 63 74 20 3d 20 66 75 6e 63 74 69 6f  onnect = functio
3dc0: 6e 20 28 6f 75 74 70 75 74 29 20 7b 0a 09 20 20  n (output) {..  
3dd0: 20 20 20 20 20 20 69 66 20 28 41 72 72 61 79 2e        if (Array.
3de0: 69 73 41 72 72 61 79 28 74 68 69 73 2e 6f 75 74  isArray(this.out
3df0: 70 75 74 29 29 20 7b 0a 09 20 20 20 20 20 20 20  put)) {..       
3e00: 20 20 20 20 20 6f 75 74 70 75 74 20 3d 20 74 68       output = th
3e10: 69 73 2e 64 65 66 61 75 6c 74 41 72 67 28 6f 75  is.defaultArg(ou
3e20: 74 70 75 74 2c 20 30 29 3b 0a 09 20 20 20 20 20  tput, 0);..     
3e30: 20 20 20 20 20 20 20 74 68 69 73 2e 6f 75 74 70         this.outp
3e40: 75 74 5b 6f 75 74 70 75 74 5d 2e 64 69 73 63 6f  ut[output].disco
3e50: 6e 6e 65 63 74 28 29 3b 0a 09 20 20 20 20 20 20  nnect();..      
3e60: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 21 74 68    } else if (!th
3e70: 69 73 2e 69 73 55 6e 64 65 66 28 6f 75 74 70 75  is.isUndef(outpu
3e80: 74 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  t)) {..         
3e90: 20 20 20 74 68 69 73 2e 6f 75 74 70 75 74 2e 64     this.output.d
3ea0: 69 73 63 6f 6e 6e 65 63 74 28 6f 75 74 70 75 74  isconnect(output
3eb0: 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c  );..        } el
3ec0: 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  se {..          
3ed0: 20 20 74 68 69 73 2e 6f 75 74 70 75 74 2e 64 69    this.output.di
3ee0: 73 63 6f 6e 6e 65 63 74 28 29 3b 0a 09 20 20 20  sconnect();..   
3ef0: 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
3f00: 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20  return this;..  
3f10: 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    };..    /**...
3f20: 20 2a 20 20 63 6f 6e 6e 65 63 74 20 74 6f 67 65   *  connect toge
3f30: 74 68 65 72 20 61 6c 6c 20 6f 66 20 74 68 65 20  ther all of the 
3f40: 61 72 67 75 6d 65 6e 74 73 20 69 6e 20 73 65 72  arguments in ser
3f50: 69 65 73 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  ies... *  @param
3f60: 20 7b 2e 2e 2e 41 75 64 69 6f 50 61 72 61 6d 7c   {...AudioParam|
3f70: 54 6f 6e 65 7c 41 75 64 69 6f 4e 6f 64 65 7d 20  Tone|AudioNode} 
3f80: 6e 6f 64 65 73 0a 09 09 20 2a 20 20 40 72 65 74  nodes... *  @ret
3f90: 75 72 6e 73 20 7b 54 6f 6e 65 7d 20 74 68 69 73  urns {Tone} this
3fa0: 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
3fb0: 2e 70 72 6f 74 6f 74 79 70 65 2e 63 6f 6e 6e 65  .prototype.conne
3fc0: 63 74 53 65 72 69 65 73 20 3d 20 66 75 6e 63 74  ctSeries = funct
3fd0: 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
3fe0: 20 20 69 66 20 28 61 72 67 75 6d 65 6e 74 73 2e    if (arguments.
3ff0: 6c 65 6e 67 74 68 20 3e 20 31 29 20 7b 0a 09 20  length > 1) {.. 
4000: 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 63             var c
4010: 75 72 72 65 6e 74 55 6e 69 74 20 3d 20 61 72 67  urrentUnit = arg
4020: 75 6d 65 6e 74 73 5b 30 5d 3b 0a 09 20 20 20 20  uments[0];..    
4030: 20 20 20 20 20 20 20 20 66 6f 72 20 28 76 61 72          for (var
4040: 20 69 20 3d 20 31 3b 20 69 20 3c 20 61 72 67 75   i = 1; i < argu
4050: 6d 65 6e 74 73 2e 6c 65 6e 67 74 68 3b 20 69 2b  ments.length; i+
4060: 2b 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  +) {..          
4070: 20 20 20 20 20 20 76 61 72 20 74 6f 55 6e 69 74        var toUnit
4080: 20 3d 20 61 72 67 75 6d 65 6e 74 73 5b 69 5d 3b   = arguments[i];
4090: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
40a0: 20 20 63 75 72 72 65 6e 74 55 6e 69 74 2e 63 6f    currentUnit.co
40b0: 6e 6e 65 63 74 28 74 6f 55 6e 69 74 29 3b 0a 09  nnect(toUnit);..
40c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40d0: 63 75 72 72 65 6e 74 55 6e 69 74 20 3d 20 74 6f  currentUnit = to
40e0: 55 6e 69 74 3b 0a 09 20 20 20 20 20 20 20 20 20  Unit;..         
40f0: 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 0a     }..        }.
4100: 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
4110: 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20  this;..    };.. 
4120: 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 6f 6e     /**... *  Con
4130: 6e 65 63 74 20 74 68 65 20 6f 75 74 70 75 74 20  nect the output 
4140: 6f 66 20 74 68 69 73 20 6e 6f 64 65 20 74 6f 20  of this node to 
4150: 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65 20  the rest of the 
4160: 6e 6f 64 65 73 20 69 6e 20 73 65 72 69 65 73 2e  nodes in series.
4170: 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a  ... *  @example.
4180: 09 09 20 2a 20 20 2f 2f 63 6f 6e 6e 65 63 74 20  .. *  //connect 
4190: 61 20 6e 6f 64 65 20 74 6f 20 61 6e 20 65 66 66  a node to an eff
41a0: 65 63 74 2c 20 70 61 6e 56 6f 6c 20 61 6e 64 20  ect, panVol and 
41b0: 74 68 65 6e 20 74 6f 20 74 68 65 20 6d 61 73 74  then to the mast
41c0: 65 72 20 6f 75 74 70 75 74 0a 09 09 20 2a 20 20  er output... *  
41d0: 6e 6f 64 65 2e 63 68 61 69 6e 28 65 66 66 65 63  node.chain(effec
41e0: 74 2c 20 70 61 6e 56 6f 6c 2c 20 54 6f 6e 65 2e  t, panVol, Tone.
41f0: 4d 61 73 74 65 72 29 3b 0a 09 09 20 2a 20 20 40  Master);... *  @
4200: 70 61 72 61 6d 20 7b 2e 2e 2e 41 75 64 69 6f 50  param {...AudioP
4210: 61 72 61 6d 7c 54 6f 6e 65 7c 41 75 64 69 6f 4e  aram|Tone|AudioN
4220: 6f 64 65 7d 20 6e 6f 64 65 73 0a 09 09 20 2a 20  ode} nodes... * 
4230: 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 7d   @returns {Tone}
4240: 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20   this... */..   
4250: 20 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e   Tone.prototype.
4260: 63 68 61 69 6e 20 3d 20 66 75 6e 63 74 69 6f 6e  chain = function
4270: 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 69   () {..        i
4280: 66 20 28 61 72 67 75 6d 65 6e 74 73 2e 6c 65 6e  f (arguments.len
4290: 67 74 68 20 3e 20 30 29 20 7b 0a 09 20 20 20 20  gth > 0) {..    
42a0: 20 20 20 20 20 20 20 20 76 61 72 20 63 75 72 72          var curr
42b0: 65 6e 74 55 6e 69 74 20 3d 20 74 68 69 73 3b 0a  entUnit = this;.
42c0: 09 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
42d0: 20 28 76 61 72 20 69 20 3d 20 30 3b 20 69 20 3c   (var i = 0; i <
42e0: 20 61 72 67 75 6d 65 6e 74 73 2e 6c 65 6e 67 74   arguments.lengt
42f0: 68 3b 20 69 2b 2b 29 20 7b 0a 09 20 20 20 20 20  h; i++) {..     
4300: 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 74             var t
4310: 6f 55 6e 69 74 20 3d 20 61 72 67 75 6d 65 6e 74  oUnit = argument
4320: 73 5b 69 5d 3b 0a 09 20 20 20 20 20 20 20 20 20  s[i];..         
4330: 20 20 20 20 20 20 20 63 75 72 72 65 6e 74 55 6e         currentUn
4340: 69 74 2e 63 6f 6e 6e 65 63 74 28 74 6f 55 6e 69  it.connect(toUni
4350: 74 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  t);..           
4360: 20 20 20 20 20 63 75 72 72 65 6e 74 55 6e 69 74       currentUnit
4370: 20 3d 20 74 6f 55 6e 69 74 3b 0a 09 20 20 20 20   = toUnit;..    
4380: 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
4390: 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 72 65     }..        re
43a0: 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20  turn this;..    
43b0: 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  };..    /**... *
43c0: 20 20 63 6f 6e 6e 65 63 74 20 74 68 65 20 6f 75    connect the ou
43d0: 74 70 75 74 20 6f 66 20 74 68 69 73 20 6e 6f 64  tput of this nod
43e0: 65 20 74 6f 20 74 68 65 20 72 65 73 74 20 6f 66  e to the rest of
43f0: 20 74 68 65 20 6e 6f 64 65 73 20 69 6e 20 70 61   the nodes in pa
4400: 72 61 6c 6c 65 6c 2e 0a 09 09 20 2a 20 20 40 70  rallel.... *  @p
4410: 61 72 61 6d 20 7b 2e 2e 2e 41 75 64 69 6f 50 61  aram {...AudioPa
4420: 72 61 6d 7c 54 6f 6e 65 7c 41 75 64 69 6f 4e 6f  ram|Tone|AudioNo
4430: 64 65 7d 20 6e 6f 64 65 73 0a 09 09 20 2a 20 20  de} nodes... *  
4440: 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 7d 20  @returns {Tone} 
4450: 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20  this... */..    
4460: 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e 66  Tone.prototype.f
4470: 61 6e 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  an = function ()
4480: 20 7b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
4490: 61 72 67 75 6d 65 6e 74 73 2e 6c 65 6e 67 74 68  arguments.length
44a0: 20 3e 20 30 29 20 7b 0a 09 20 20 20 20 20 20 20   > 0) {..       
44b0: 20 20 20 20 20 66 6f 72 20 28 76 61 72 20 69 20       for (var i 
44c0: 3d 20 30 3b 20 69 20 3c 20 61 72 67 75 6d 65 6e  = 0; i < argumen
44d0: 74 73 2e 6c 65 6e 67 74 68 3b 20 69 2b 2b 29 20  ts.length; i++) 
44e0: 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
44f0: 20 20 20 74 68 69 73 2e 63 6f 6e 6e 65 63 74 28     this.connect(
4500: 61 72 67 75 6d 65 6e 74 73 5b 69 5d 29 3b 0a 09  arguments[i]);..
4510: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20              }.. 
4520: 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
4530: 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09    return this;..
4540: 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2f 67 69      };..    //gi
4550: 76 65 20 6e 61 74 69 76 65 20 6e 6f 64 65 73 20  ve native nodes 
4560: 63 68 61 69 6e 20 61 6e 64 20 66 61 6e 20 6d 65  chain and fan me
4570: 74 68 6f 64 73 0a 09 20 20 20 20 41 75 64 69 6f  thods..    Audio
4580: 4e 6f 64 65 2e 70 72 6f 74 6f 74 79 70 65 2e 63  Node.prototype.c
4590: 68 61 69 6e 20 3d 20 54 6f 6e 65 2e 70 72 6f 74  hain = Tone.prot
45a0: 6f 74 79 70 65 2e 63 68 61 69 6e 3b 0a 09 20 20  otype.chain;..  
45b0: 20 20 41 75 64 69 6f 4e 6f 64 65 2e 70 72 6f 74    AudioNode.prot
45c0: 6f 74 79 70 65 2e 66 61 6e 20 3d 20 54 6f 6e 65  otype.fan = Tone
45d0: 2e 70 72 6f 74 6f 74 79 70 65 2e 66 61 6e 3b 0a  .prototype.fan;.
45e0: 09 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
45f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4630: 0a 09 20 20 20 20 2f 2f 09 55 54 49 4c 49 54 49  ..    //.UTILITI
4640: 45 53 20 2f 20 48 45 4c 50 45 52 53 20 2f 20 4d  ES / HELPERS / M
4650: 41 54 48 53 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f  ATHS..    //////
4660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46a0: 2f 2f 2f 2f 2f 0a 09 20 20 20 20 2f 2a 2a 0a 09  /////..    /**..
46b0: 09 20 2a 20 20 49 66 20 74 68 65 20 60 67 69 76  . *  If the `giv
46c0: 65 6e 60 20 70 61 72 61 6d 65 74 65 72 20 69 73  en` parameter is
46d0: 20 75 6e 64 65 66 69 6e 65 64 2c 20 75 73 65 20   undefined, use 
46e0: 74 68 65 20 60 66 61 6c 6c 62 61 63 6b 60 2e 20  the `fallback`. 
46f0: 0a 09 09 20 2a 20 20 49 66 20 62 6f 74 68 20 60  ... *  If both `
4700: 67 69 76 65 6e 60 20 61 6e 64 20 60 66 61 6c 6c  given` and `fall
4710: 62 61 63 6b 60 20 61 72 65 20 6f 62 6a 65 63 74  back` are object
4720: 20 6c 69 74 65 72 61 6c 73 2c 20 69 74 20 77 69   literals, it wi
4730: 6c 6c 0a 09 09 20 2a 20 20 72 65 74 75 72 6e 20  ll... *  return 
4740: 61 20 64 65 65 70 20 63 6f 70 79 20 77 68 69 63  a deep copy whic
4750: 68 20 69 6e 63 6c 75 64 65 73 20 61 6c 6c 20 6f  h includes all o
4760: 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  f the parameters
4770: 20 66 72 6f 6d 20 62 6f 74 68 20 0a 09 09 20 2a   from both ... *
4780: 20 20 6f 62 6a 65 63 74 73 2e 20 49 66 20 61 20    objects. If a 
4790: 70 61 72 61 6d 65 74 65 72 20 69 73 20 75 6e 64  parameter is und
47a0: 65 66 69 6e 65 64 20 69 6e 20 67 69 76 65 6e 2c  efined in given,
47b0: 20 69 74 20 77 69 6c 6c 20 72 65 74 75 72 6e 0a   it will return.
47c0: 09 09 20 2a 20 20 74 68 65 20 66 61 6c 6c 62 61  .. *  the fallba
47d0: 63 6b 20 70 72 6f 70 65 72 74 79 2e 20 0a 09 09  ck property. ...
47e0: 20 2a 20 20 3c 62 72 3e 3c 62 72 3e 0a 09 09 20   *  <br><br>... 
47f0: 2a 20 20 57 41 52 4e 49 4e 47 3a 20 69 66 20 6f  *  WARNING: if o
4800: 62 6a 65 63 74 20 69 73 20 73 65 6c 66 20 72 65  bject is self re
4810: 66 65 72 65 6e 74 69 61 6c 2c 20 69 74 20 77 69  ferential, it wi
4820: 6c 6c 20 67 6f 20 69 6e 74 6f 20 61 6e 20 61 6e  ll go into an an
4830: 20 0a 09 09 20 2a 20 20 69 6e 66 69 6e 69 74 65   ... *  infinite
4840: 20 72 65 63 75 72 73 69 76 65 20 6c 6f 6f 70 2e   recursive loop.
4850: 0a 09 09 20 2a 20 20 0a 09 09 20 2a 20 20 40 70  ... *  ... *  @p
4860: 61 72 61 6d 20 20 7b 2a 7d 20 67 69 76 65 6e 20  aram  {*} given 
4870: 20 20 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d     ... *  @param
4880: 20 20 7b 2a 7d 20 66 61 6c 6c 62 61 63 6b 20 0a    {*} fallback .
4890: 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 7b 2a  .. *  @return {*
48a0: 7d 20 20 20 20 20 20 20 20 20 20 0a 09 09 20 2a  }          ... *
48b0: 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 70 72 6f 74  /..    Tone.prot
48c0: 6f 74 79 70 65 2e 64 65 66 61 75 6c 74 41 72 67  otype.defaultArg
48d0: 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 67 69 76   = function (giv
48e0: 65 6e 2c 20 66 61 6c 6c 62 61 63 6b 29 20 7b 0a  en, fallback) {.
48f0: 09 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69  .        if (thi
4900: 73 2e 69 73 4f 62 6a 65 63 74 28 67 69 76 65 6e  s.isObject(given
4910: 29 20 26 26 20 74 68 69 73 2e 69 73 4f 62 6a 65  ) && this.isObje
4920: 63 74 28 66 61 6c 6c 62 61 63 6b 29 29 20 7b 0a  ct(fallback)) {.
4930: 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72  .            var
4940: 20 72 65 74 20 3d 20 7b 7d 3b 0a 09 20 20 20 20   ret = {};..    
4950: 20 20 20 20 20 20 20 20 2f 2f 6d 61 6b 65 20 61          //make a
4960: 20 64 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68   deep copy of th
4970: 65 20 67 69 76 65 6e 20 6f 62 6a 65 63 74 0a 09  e given object..
4980: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
4990: 28 76 61 72 20 67 69 76 65 6e 50 72 6f 70 20 69  (var givenProp i
49a0: 6e 20 67 69 76 65 6e 29 20 7b 0a 09 20 20 20 20  n given) {..    
49b0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 5b              ret[
49c0: 67 69 76 65 6e 50 72 6f 70 5d 20 3d 20 74 68 69  givenProp] = thi
49d0: 73 2e 64 65 66 61 75 6c 74 41 72 67 28 66 61 6c  s.defaultArg(fal
49e0: 6c 62 61 63 6b 5b 67 69 76 65 6e 50 72 6f 70 5d  lback[givenProp]
49f0: 2c 20 67 69 76 65 6e 5b 67 69 76 65 6e 50 72 6f  , given[givenPro
4a00: 70 5d 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20  p]);..          
4a10: 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20    }..           
4a20: 20 66 6f 72 20 28 76 61 72 20 66 61 6c 6c 62 61   for (var fallba
4a30: 63 6b 50 72 6f 70 20 69 6e 20 66 61 6c 6c 62 61  ckProp in fallba
4a40: 63 6b 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ck) {..         
4a50: 20 20 20 20 20 20 20 72 65 74 5b 66 61 6c 6c 62         ret[fallb
4a60: 61 63 6b 50 72 6f 70 5d 20 3d 20 74 68 69 73 2e  ackProp] = this.
4a70: 64 65 66 61 75 6c 74 41 72 67 28 67 69 76 65 6e  defaultArg(given
4a80: 5b 66 61 6c 6c 62 61 63 6b 50 72 6f 70 5d 2c 20  [fallbackProp], 
4a90: 66 61 6c 6c 62 61 63 6b 5b 66 61 6c 6c 62 61 63  fallback[fallbac
4aa0: 6b 50 72 6f 70 5d 29 3b 0a 09 20 20 20 20 20 20  kProp]);..      
4ab0: 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
4ac0: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 74 3b       return ret;
4ad0: 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
4ae0: 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4af0: 72 65 74 75 72 6e 20 69 73 55 6e 64 65 66 28 67  return isUndef(g
4b00: 69 76 65 6e 29 20 3f 20 66 61 6c 6c 62 61 63 6b  iven) ? fallback
4b10: 20 3a 20 67 69 76 65 6e 3b 0a 09 20 20 20 20 20   : given;..     
4b20: 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a 09 20 20     }..    };..  
4b30: 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 72 65 74 75    /**... *  retu
4b40: 72 6e 73 20 74 68 65 20 61 72 67 73 20 61 73 20  rns the args as 
4b50: 61 6e 20 6f 70 74 69 6f 6e 73 20 6f 62 6a 65 63  an options objec
4b60: 74 20 77 69 74 68 20 67 69 76 65 6e 20 61 72 67  t with given arg
4b70: 75 6d 65 6e 74 73 0a 09 09 20 2a 20 20 6d 61 70  uments... *  map
4b80: 70 65 64 20 74 6f 20 74 68 65 20 6e 61 6d 65 73  ped to the names
4b90: 20 70 72 6f 76 69 64 65 64 2e 20 0a 09 09 20 2a   provided. ... *
4ba0: 0a 09 09 20 2a 20 20 69 66 20 74 68 65 20 61 72  ... *  if the ar
4bb0: 67 73 20 67 69 76 65 6e 20 69 73 20 61 6e 20 61  gs given is an a
4bc0: 72 72 61 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20  rray containing 
4bd0: 6f 6e 6c 79 20 6f 6e 65 20 6f 62 6a 65 63 74 2c  only one object,
4be0: 20 69 74 20 69 73 20 61 73 73 75 6d 65 64 0a 09   it is assumed..
4bf0: 09 20 2a 20 20 74 68 61 74 20 74 68 61 74 27 73  . *  that that's
4c00: 20 61 6c 72 65 61 64 79 20 74 68 65 20 6f 70 74   already the opt
4c10: 69 6f 6e 73 20 6f 62 6a 65 63 74 20 61 6e 64 20  ions object and 
4c20: 77 69 6c 6c 20 6a 75 73 74 20 72 65 74 75 72 6e  will just return
4c30: 20 69 74 2e 20 0a 09 09 20 2a 20 20 0a 09 09 20   it. ... *  ... 
4c40: 2a 20 20 40 70 61 72 61 6d 20 20 7b 41 72 72 61  *  @param  {Arra
4c50: 79 7d 20 76 61 6c 75 65 73 20 20 74 68 65 20 27  y} values  the '
4c60: 61 72 67 75 6d 65 6e 74 73 27 20 6f 62 6a 65 63  arguments' objec
4c70: 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
4c80: 6e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20  n... *  @param  
4c90: 7b 41 72 72 61 79 7d 20 6b 65 79 73 20 74 68 65  {Array} keys the
4ca0: 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 61 72   names of the ar
4cb0: 67 75 6d 65 6e 74 73 20 61 73 20 74 68 65 79 0a  guments as they.
4cc0: 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
4cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ce0: 20 20 20 20 20 73 68 6f 75 6c 64 20 61 70 70 65       should appe
4cf0: 61 72 20 69 6e 20 74 68 65 20 6f 70 74 69 6f 6e  ar in the option
4d00: 73 20 6f 62 6a 65 63 74 0a 09 09 20 2a 20 20 40  s object... *  @
4d10: 70 61 72 61 6d 20 7b 4f 62 6a 65 63 74 3d 7d 20  param {Object=} 
4d20: 64 65 66 61 75 6c 74 73 20 6f 70 74 69 6f 6e 61  defaults optiona
4d30: 6c 20 64 65 66 61 75 6c 74 73 20 74 6f 20 6d 69  l defaults to mi
4d40: 78 69 6e 20 74 6f 20 74 68 65 20 72 65 74 75 72  xin to the retur
4d50: 6e 65 64 20 0a 09 09 20 2a 20 20 20 20 20 20 20  ned ... *       
4d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d70: 20 20 20 20 20 6f 70 74 69 6f 6e 73 20 6f 62 6a       options obj
4d80: 65 63 74 20 20 20 20 20 20 20 20 20 20 20 20 20  ect             
4d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4da0: 20 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20   ... *  @return 
4db0: 7b 4f 62 6a 65 63 74 7d 20 20 20 20 20 20 20 74  {Object}       t
4dc0: 68 65 20 6f 70 74 69 6f 6e 73 20 6f 62 6a 65 63  he options objec
4dd0: 74 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65 73  t with the names
4de0: 20 6d 61 70 70 65 64 20 74 6f 20 74 68 65 20 61   mapped to the a
4df0: 72 67 75 6d 65 6e 74 73 0a 09 09 20 2a 2f 0a 09  rguments... */..
4e00: 20 20 20 20 54 6f 6e 65 2e 70 72 6f 74 6f 74 79      Tone.prototy
4e10: 70 65 2e 6f 70 74 69 6f 6e 73 4f 62 6a 65 63 74  pe.optionsObject
4e20: 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 76 61 6c   = function (val
4e30: 75 65 73 2c 20 6b 65 79 73 2c 20 64 65 66 61 75  ues, keys, defau
4e40: 6c 74 73 29 20 7b 0a 09 20 20 20 20 20 20 20 20  lts) {..        
4e50: 76 61 72 20 6f 70 74 69 6f 6e 73 20 3d 20 7b 7d  var options = {}
4e60: 3b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 76  ;..        if (v
4e70: 61 6c 75 65 73 2e 6c 65 6e 67 74 68 20 3d 3d 3d  alues.length ===
4e80: 20 31 20 26 26 20 74 68 69 73 2e 69 73 4f 62 6a   1 && this.isObj
4e90: 65 63 74 28 76 61 6c 75 65 73 5b 30 5d 29 29 20  ect(values[0])) 
4ea0: 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 6f  {..            o
4eb0: 70 74 69 6f 6e 73 20 3d 20 76 61 6c 75 65 73 5b  ptions = values[
4ec0: 30 5d 3b 0a 09 20 20 20 20 20 20 20 20 7d 20 65  0];..        } e
4ed0: 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20  lse {..         
4ee0: 20 20 20 66 6f 72 20 28 76 61 72 20 69 20 3d 20     for (var i = 
4ef0: 30 3b 20 69 20 3c 20 6b 65 79 73 2e 6c 65 6e 67  0; i < keys.leng
4f00: 74 68 3b 20 69 2b 2b 29 20 7b 0a 09 20 20 20 20  th; i++) {..    
4f10: 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 74 69              opti
4f20: 6f 6e 73 5b 6b 65 79 73 5b 69 5d 5d 20 3d 20 76  ons[keys[i]] = v
4f30: 61 6c 75 65 73 5b 69 5d 3b 0a 09 20 20 20 20 20  alues[i];..     
4f40: 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
4f50: 20 20 7d 0a 09 20 20 20 20 20 20 20 20 69 66 20    }..        if 
4f60: 28 21 74 68 69 73 2e 69 73 55 6e 64 65 66 28 64  (!this.isUndef(d
4f70: 65 66 61 75 6c 74 73 29 29 20 7b 0a 09 20 20 20  efaults)) {..   
4f80: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4f90: 74 68 69 73 2e 64 65 66 61 75 6c 74 41 72 67 28  this.defaultArg(
4fa0: 6f 70 74 69 6f 6e 73 2c 20 64 65 66 61 75 6c 74  options, default
4fb0: 73 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 20 65  s);..        } e
4fc0: 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20  lse {..         
4fd0: 20 20 20 72 65 74 75 72 6e 20 6f 70 74 69 6f 6e     return option
4fe0: 73 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  s;..        }.. 
4ff0: 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2f 2f 2f 2f     };..    /////
5000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5040: 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 2f 2f 20 54  //////..    // T
5050: 59 50 45 20 43 48 45 43 4b 49 4e 47 0a 09 20 20  YPE CHECKING..  
5060: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20  /////////////.. 
50b0: 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 74 65 73     /**... *  tes
50c0: 74 20 69 66 20 74 68 65 20 61 72 67 20 69 73 20  t if the arg is 
50d0: 75 6e 64 65 66 69 6e 65 64 0a 09 09 20 2a 20 20  undefined... *  
50e0: 40 70 61 72 61 6d 20 7b 2a 7d 20 61 72 67 20 74  @param {*} arg t
50f0: 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  he argument to t
5100: 65 73 74 0a 09 09 20 2a 20 20 40 72 65 74 75 72  est... *  @retur
5110: 6e 73 20 7b 62 6f 6f 6c 65 61 6e 7d 20 74 72 75  ns {boolean} tru
5120: 65 20 69 66 20 74 68 65 20 61 72 67 20 69 73 20  e if the arg is 
5130: 75 6e 64 65 66 69 6e 65 64 0a 09 09 20 2a 20 20  undefined... *  
5140: 40 66 75 6e 63 74 69 6f 6e 0a 09 09 20 2a 2f 0a  @function... */.
5150: 09 20 20 20 20 54 6f 6e 65 2e 70 72 6f 74 6f 74  .    Tone.protot
5160: 79 70 65 2e 69 73 55 6e 64 65 66 20 3d 20 69 73  ype.isUndef = is
5170: 55 6e 64 65 66 3b 0a 09 20 20 20 20 2f 2a 2a 0a  Undef;..    /**.
5180: 09 09 20 2a 20 20 74 65 73 74 20 69 66 20 74 68  .. *  test if th
5190: 65 20 61 72 67 20 69 73 20 61 20 66 75 6e 63 74  e arg is a funct
51a0: 69 6f 6e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  ion... *  @param
51b0: 20 7b 2a 7d 20 61 72 67 20 74 68 65 20 61 72 67   {*} arg the arg
51c0: 75 6d 65 6e 74 20 74 6f 20 74 65 73 74 0a 09 09  ument to test...
51d0: 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 62 6f   *  @returns {bo
51e0: 6f 6c 65 61 6e 7d 20 74 72 75 65 20 69 66 20 74  olean} true if t
51f0: 68 65 20 61 72 67 20 69 73 20 61 20 66 75 6e 63  he arg is a func
5200: 74 69 6f 6e 0a 09 09 20 2a 20 20 40 66 75 6e 63  tion... *  @func
5210: 74 69 6f 6e 0a 09 09 20 2a 2f 0a 09 20 20 20 20  tion... */..    
5220: 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e 69  Tone.prototype.i
5230: 73 46 75 6e 63 74 69 6f 6e 20 3d 20 69 73 46 75  sFunction = isFu
5240: 6e 63 74 69 6f 6e 3b 0a 09 20 20 20 20 2f 2a 2a  nction;..    /**
5250: 0a 09 09 20 2a 20 20 54 65 73 74 20 69 66 20 74  ... *  Test if t
5260: 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  he argument is a
5270: 20 6e 75 6d 62 65 72 2e 0a 09 09 20 2a 20 20 40   number.... *  @
5280: 70 61 72 61 6d 20 7b 2a 7d 20 61 72 67 20 74 68  param {*} arg th
5290: 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 65  e argument to te
52a0: 73 74 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e  st... *  @return
52b0: 73 20 7b 62 6f 6f 6c 65 61 6e 7d 20 74 72 75 65  s {boolean} true
52c0: 20 69 66 20 74 68 65 20 61 72 67 20 69 73 20 61   if the arg is a
52d0: 20 6e 75 6d 62 65 72 0a 09 09 20 2a 2f 0a 09 20   number... */.. 
52e0: 20 20 20 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70     Tone.prototyp
52f0: 65 2e 69 73 4e 75 6d 62 65 72 20 3d 20 66 75 6e  e.isNumber = fun
5300: 63 74 69 6f 6e 20 28 61 72 67 29 20 7b 0a 09 20  ction (arg) {.. 
5310: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 79         return ty
5320: 70 65 6f 66 20 61 72 67 20 3d 3d 3d 20 27 6e 75  peof arg === 'nu
5330: 6d 62 65 72 27 3b 0a 09 20 20 20 20 7d 3b 0a 09  mber';..    };..
5340: 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 65      /**... *  Te
5350: 73 74 20 69 66 20 74 68 65 20 67 69 76 65 6e 20  st if the given 
5360: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 6e 20 6f  argument is an o
5370: 62 6a 65 63 74 20 6c 69 74 65 72 61 6c 20 28 69  bject literal (i
5380: 2e 65 2e 20 60 7b 7d 60 29 3b 0a 09 09 20 2a 20  .e. `{}`);... * 
5390: 20 40 70 61 72 61 6d 20 7b 2a 7d 20 61 72 67 20   @param {*} arg 
53a0: 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  the argument to 
53b0: 74 65 73 74 0a 09 09 20 2a 20 20 40 72 65 74 75  test... *  @retu
53c0: 72 6e 73 20 7b 62 6f 6f 6c 65 61 6e 7d 20 74 72  rns {boolean} tr
53d0: 75 65 20 69 66 20 74 68 65 20 61 72 67 20 69 73  ue if the arg is
53e0: 20 61 6e 20 6f 62 6a 65 63 74 20 6c 69 74 65 72   an object liter
53f0: 61 6c 2e 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  al.... */..    T
5400: 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e 69 73  one.prototype.is
5410: 4f 62 6a 65 63 74 20 3d 20 66 75 6e 63 74 69 6f  Object = functio
5420: 6e 20 28 61 72 67 29 20 7b 0a 09 20 20 20 20 20  n (arg) {..     
5430: 20 20 20 72 65 74 75 72 6e 20 4f 62 6a 65 63 74     return Object
5440: 2e 70 72 6f 74 6f 74 79 70 65 2e 74 6f 53 74 72  .prototype.toStr
5450: 69 6e 67 2e 63 61 6c 6c 28 61 72 67 29 20 3d 3d  ing.call(arg) ==
5460: 3d 20 27 5b 6f 62 6a 65 63 74 20 4f 62 6a 65 63  = '[object Objec
5470: 74 5d 27 20 26 26 20 61 72 67 2e 63 6f 6e 73 74  t]' && arg.const
5480: 72 75 63 74 6f 72 20 3d 3d 3d 20 4f 62 6a 65 63  ructor === Objec
5490: 74 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  t;..    };..    
54a0: 2f 2a 2a 0a 09 09 20 2a 20 20 54 65 73 74 20 69  /**... *  Test i
54b0: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
54c0: 73 20 61 20 62 6f 6f 6c 65 61 6e 2e 0a 09 09 20  s a boolean.... 
54d0: 2a 20 20 40 70 61 72 61 6d 20 7b 2a 7d 20 61 72  *  @param {*} ar
54e0: 67 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74  g the argument t
54f0: 6f 20 74 65 73 74 0a 09 09 20 2a 20 20 40 72 65  o test... *  @re
5500: 74 75 72 6e 73 20 7b 62 6f 6f 6c 65 61 6e 7d 20  turns {boolean} 
5510: 74 72 75 65 20 69 66 20 74 68 65 20 61 72 67 20  true if the arg 
5520: 69 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 09 09 20  is a boolean... 
5530: 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 70 72 6f  */..    Tone.pro
5540: 74 6f 74 79 70 65 2e 69 73 42 6f 6f 6c 65 61 6e  totype.isBoolean
5550: 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 61 72 67   = function (arg
5560: 29 20 7b 0a 09 20 20 20 20 20 20 20 20 72 65 74  ) {..        ret
5570: 75 72 6e 20 74 79 70 65 6f 66 20 61 72 67 20 3d  urn typeof arg =
5580: 3d 3d 20 27 62 6f 6f 6c 65 61 6e 27 3b 0a 09 20  == 'boolean';.. 
5590: 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09     };..    /**..
55a0: 09 20 2a 20 20 54 65 73 74 20 69 66 20 74 68 65  . *  Test if the
55b0: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 6e 20   argument is an 
55c0: 41 72 72 61 79 0a 09 09 20 2a 20 20 40 70 61 72  Array... *  @par
55d0: 61 6d 20 7b 2a 7d 20 61 72 67 20 74 68 65 20 61  am {*} arg the a
55e0: 72 67 75 6d 65 6e 74 20 74 6f 20 74 65 73 74 0a  rgument to test.
55f0: 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b  .. *  @returns {
5600: 62 6f 6f 6c 65 61 6e 7d 20 74 72 75 65 20 69 66  boolean} true if
5610: 20 74 68 65 20 61 72 67 20 69 73 20 61 6e 20 61   the arg is an a
5620: 72 72 61 79 0a 09 09 20 2a 2f 0a 09 20 20 20 20  rray... */..    
5630: 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e 69  Tone.prototype.i
5640: 73 41 72 72 61 79 20 3d 20 66 75 6e 63 74 69 6f  sArray = functio
5650: 6e 20 28 61 72 67 29 20 7b 0a 09 20 20 20 20 20  n (arg) {..     
5660: 20 20 20 72 65 74 75 72 6e 20 41 72 72 61 79 2e     return Array.
5670: 69 73 41 72 72 61 79 28 61 72 67 29 3b 0a 09 20  isArray(arg);.. 
5680: 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09     };..    /**..
5690: 09 20 2a 20 20 54 65 73 74 20 69 66 20 74 68 65  . *  Test if the
56a0: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 73   argument is a s
56b0: 74 72 69 6e 67 2e 0a 09 09 20 2a 20 20 40 70 61  tring.... *  @pa
56c0: 72 61 6d 20 7b 2a 7d 20 61 72 67 20 74 68 65 20  ram {*} arg the 
56d0: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 65 73 74  argument to test
56e0: 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20  ... *  @returns 
56f0: 7b 62 6f 6f 6c 65 61 6e 7d 20 74 72 75 65 20 69  {boolean} true i
5700: 66 20 74 68 65 20 61 72 67 20 69 73 20 61 20 73  f the arg is a s
5710: 74 72 69 6e 67 0a 09 09 20 2a 2f 0a 09 20 20 20  tring... */..   
5720: 20 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e   Tone.prototype.
5730: 69 73 53 74 72 69 6e 67 20 3d 20 66 75 6e 63 74  isString = funct
5740: 69 6f 6e 20 28 61 72 67 29 20 7b 0a 09 20 20 20  ion (arg) {..   
5750: 20 20 20 20 20 72 65 74 75 72 6e 20 74 79 70 65       return type
5760: 6f 66 20 61 72 67 20 3d 3d 3d 20 27 73 74 72 69  of arg === 'stri
5770: 6e 67 27 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  ng';..    };..  
5780: 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 41 6e 20 65    /**... *  An e
5790: 6d 70 74 79 20 66 75 6e 63 74 69 6f 6e 2e 0a 09  mpty function...
57a0: 09 20 2a 20 20 40 73 74 61 74 69 63 0a 09 09 20  . *  @static... 
57b0: 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 6e 6f 4f  */..    Tone.noO
57c0: 70 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  p = function () 
57d0: 7b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  {..    };..    /
57e0: 2a 2a 0a 09 09 20 2a 20 20 4d 61 6b 65 20 74 68  **... *  Make th
57f0: 65 20 70 72 6f 70 65 72 74 79 20 6e 6f 74 20 77  e property not w
5800: 72 69 74 61 62 6c 65 2e 20 49 6e 74 65 72 6e 61  ritable. Interna
5810: 6c 20 75 73 65 20 6f 6e 6c 79 2e 20 0a 09 09 20  l use only. ... 
5820: 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a  *  @private... *
5830: 20 20 40 70 61 72 61 6d 20 20 7b 73 74 72 69 6e    @param  {strin
5840: 67 7d 20 20 70 72 6f 70 65 72 74 79 20 20 74 68  g}  property  th
5850: 65 20 70 72 6f 70 65 72 74 79 20 74 6f 20 6d 61  e property to ma
5860: 6b 65 20 6e 6f 74 20 77 72 69 74 61 62 6c 65 0a  ke not writable.
5870: 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
5880: 70 72 6f 74 6f 74 79 70 65 2e 5f 72 65 61 64 4f  prototype._readO
5890: 6e 6c 79 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  nly = function (
58a0: 70 72 6f 70 65 72 74 79 29 20 7b 0a 09 20 20 20  property) {..   
58b0: 20 20 20 20 20 69 66 20 28 41 72 72 61 79 2e 69       if (Array.i
58c0: 73 41 72 72 61 79 28 70 72 6f 70 65 72 74 79 29  sArray(property)
58d0: 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
58e0: 20 66 6f 72 20 28 76 61 72 20 69 20 3d 20 30 3b   for (var i = 0;
58f0: 20 69 20 3c 20 70 72 6f 70 65 72 74 79 2e 6c 65   i < property.le
5900: 6e 67 74 68 3b 20 69 2b 2b 29 20 7b 0a 09 20 20  ngth; i++) {..  
5910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
5920: 69 73 2e 5f 72 65 61 64 4f 6e 6c 79 28 70 72 6f  is._readOnly(pro
5930: 70 65 72 74 79 5b 69 5d 29 3b 0a 09 20 20 20 20  perty[i]);..    
5940: 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
5950: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20     } else {..   
5960: 20 20 20 20 20 20 20 20 20 4f 62 6a 65 63 74 2e           Object.
5970: 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 74  defineProperty(t
5980: 68 69 73 2c 20 70 72 6f 70 65 72 74 79 2c 20 7b  his, property, {
5990: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
59a0: 20 20 77 72 69 74 61 62 6c 65 3a 20 66 61 6c 73    writable: fals
59b0: 65 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
59c0: 20 20 20 20 65 6e 75 6d 65 72 61 62 6c 65 3a 20      enumerable: 
59d0: 74 72 75 65 0a 09 20 20 20 20 20 20 20 20 20 20  true..          
59e0: 20 20 7d 29 3b 0a 09 20 20 20 20 20 20 20 20 7d    });..        }
59f0: 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
5a00: 2a 0a 09 09 20 2a 20 20 4d 61 6b 65 20 61 6e 20  *... *  Make an 
5a10: 61 74 74 72 69 62 75 74 65 20 77 72 69 74 65 61  attribute writea
5a20: 62 6c 65 2e 20 49 6e 74 65 72 61 6c 20 75 73 65  ble. Interal use
5a30: 20 6f 6e 6c 79 2e 20 0a 09 09 20 2a 20 20 40 70   only. ... *  @p
5a40: 72 69 76 61 74 65 0a 09 09 20 2a 20 20 40 70 61  rivate... *  @pa
5a50: 72 61 6d 20 20 7b 73 74 72 69 6e 67 7d 20 20 70  ram  {string}  p
5a60: 72 6f 70 65 72 74 79 20 20 74 68 65 20 70 72 6f  roperty  the pro
5a70: 70 65 72 74 79 20 74 6f 20 6d 61 6b 65 20 77 72  perty to make wr
5a80: 69 74 61 62 6c 65 0a 09 09 20 2a 2f 0a 09 20 20  itable... */..  
5a90: 20 20 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65    Tone.prototype
5aa0: 2e 5f 77 72 69 74 61 62 6c 65 20 3d 20 66 75 6e  ._writable = fun
5ab0: 63 74 69 6f 6e 20 28 70 72 6f 70 65 72 74 79 29  ction (property)
5ac0: 20 7b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
5ad0: 41 72 72 61 79 2e 69 73 41 72 72 61 79 28 70 72  Array.isArray(pr
5ae0: 6f 70 65 72 74 79 29 29 20 7b 0a 09 20 20 20 20  operty)) {..    
5af0: 20 20 20 20 20 20 20 20 66 6f 72 20 28 76 61 72          for (var
5b00: 20 69 20 3d 20 30 3b 20 69 20 3c 20 70 72 6f 70   i = 0; i < prop
5b10: 65 72 74 79 2e 6c 65 6e 67 74 68 3b 20 69 2b 2b  erty.length; i++
5b20: 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
5b30: 20 20 20 20 20 74 68 69 73 2e 5f 77 72 69 74 61       this._writa
5b40: 62 6c 65 28 70 72 6f 70 65 72 74 79 5b 69 5d 29  ble(property[i])
5b50: 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
5b60: 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
5b70: 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5b80: 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f  Object.definePro
5b90: 70 65 72 74 79 28 74 68 69 73 2c 20 70 72 6f 70  perty(this, prop
5ba0: 65 72 74 79 2c 20 7b 20 77 72 69 74 61 62 6c 65  erty, { writable
5bb0: 3a 20 74 72 75 65 20 7d 29 3b 0a 09 20 20 20 20  : true });..    
5bc0: 20 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a 09 20      }..    };.. 
5bd0: 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 50 6f 73 73     /**... * Poss
5be0: 69 62 6c 65 20 70 6c 61 79 20 73 74 61 74 65 73  ible play states
5bf0: 2e 20 0a 09 09 20 2a 20 40 65 6e 75 6d 20 7b 73  . ... * @enum {s
5c00: 74 72 69 6e 67 7d 0a 09 09 20 2a 2f 0a 09 20 20  tring}... */..  
5c10: 20 20 54 6f 6e 65 2e 53 74 61 74 65 20 3d 20 7b    Tone.State = {
5c20: 0a 09 20 20 20 20 20 20 20 20 53 74 61 72 74 65  ..        Starte
5c30: 64 3a 20 27 73 74 61 72 74 65 64 27 2c 0a 09 20  d: 'started',.. 
5c40: 20 20 20 20 20 20 20 53 74 6f 70 70 65 64 3a 20         Stopped: 
5c50: 27 73 74 6f 70 70 65 64 27 2c 0a 09 20 20 20 20  'stopped',..    
5c60: 20 20 20 20 50 61 75 73 65 64 3a 20 27 70 61 75      Paused: 'pau
5c70: 73 65 64 27 0a 09 20 20 20 20 7d 3b 0a 09 20 20  sed'..    };..  
5c80: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20  /////////////.. 
5cd0: 20 20 20 2f 2f 20 47 41 49 4e 20 43 4f 4e 56 45     // GAIN CONVE
5ce0: 52 53 49 4f 4e 53 0a 09 20 20 20 20 2f 2f 2f 2f  RSIONS..    ////
5cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d30: 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 2f 2a 2a  ///////..    /**
5d40: 0a 09 09 20 2a 20 20 45 71 75 61 6c 20 70 6f 77  ... *  Equal pow
5d50: 65 72 20 67 61 69 6e 20 73 63 61 6c 65 2e 20 47  er gain scale. G
5d60: 6f 6f 64 20 66 6f 72 20 63 72 6f 73 73 2d 66 61  ood for cross-fa
5d70: 64 69 6e 67 2e 0a 09 09 20 2a 20 20 40 70 61 72  ding.... *  @par
5d80: 61 6d 20 20 7b 4e 6f 72 6d 61 6c 52 61 6e 67 65  am  {NormalRange
5d90: 7d 20 70 65 72 63 65 6e 74 20 28 30 2d 31 29 0a  } percent (0-1).
5da0: 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 7b 4e  .. *  @return {N
5db0: 75 6d 62 65 72 7d 20 20 20 20 20 20 20 20 20 6f  umber}         o
5dc0: 75 74 70 75 74 20 67 61 69 6e 20 28 30 2d 31 29  utput gain (0-1)
5dd0: 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
5de0: 2e 70 72 6f 74 6f 74 79 70 65 2e 65 71 75 61 6c  .prototype.equal
5df0: 50 6f 77 65 72 53 63 61 6c 65 20 3d 20 66 75 6e  PowerScale = fun
5e00: 63 74 69 6f 6e 20 28 70 65 72 63 65 6e 74 29 20  ction (percent) 
5e10: 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 70  {..        var p
5e20: 69 46 61 63 74 6f 72 20 3d 20 30 2e 35 20 2a 20  iFactor = 0.5 * 
5e30: 4d 61 74 68 2e 50 49 3b 0a 09 20 20 20 20 20 20  Math.PI;..      
5e40: 20 20 72 65 74 75 72 6e 20 4d 61 74 68 2e 73 69    return Math.si
5e50: 6e 28 70 65 72 63 65 6e 74 20 2a 20 70 69 46 61  n(percent * piFa
5e60: 63 74 6f 72 29 3b 0a 09 20 20 20 20 7d 3b 0a 09  ctor);..    };..
5e70: 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 6f      /**... *  Co
5e80: 6e 76 65 72 74 20 64 65 63 69 62 65 6c 73 20 69  nvert decibels i
5e90: 6e 74 6f 20 67 61 69 6e 2e 0a 09 09 20 2a 20 20  nto gain.... *  
5ea0: 40 70 61 72 61 6d 20 20 7b 44 65 63 69 62 65 6c  @param  {Decibel
5eb0: 73 7d 20 64 62 0a 09 09 20 2a 20 20 40 72 65 74  s} db... *  @ret
5ec0: 75 72 6e 20 7b 4e 75 6d 62 65 72 7d 20 20 20 0a  urn {Number}   .
5ed0: 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
5ee0: 70 72 6f 74 6f 74 79 70 65 2e 64 62 54 6f 47 61  prototype.dbToGa
5ef0: 69 6e 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 64  in = function (d
5f00: 62 29 20 7b 0a 09 20 20 20 20 20 20 20 20 72 65  b) {..        re
5f10: 74 75 72 6e 20 4d 61 74 68 2e 70 6f 77 28 32 2c  turn Math.pow(2,
5f20: 20 64 62 20 2f 20 36 29 3b 0a 09 20 20 20 20 7d   db / 6);..    }
5f30: 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
5f40: 20 43 6f 6e 76 65 72 74 20 67 61 69 6e 20 74 6f   Convert gain to
5f50: 20 64 65 63 69 62 65 6c 73 2e 0a 09 09 20 2a 20   decibels.... * 
5f60: 20 40 70 61 72 61 6d 20 20 7b 4e 75 6d 62 65 72   @param  {Number
5f70: 7d 20 67 61 69 6e 20 28 30 2d 31 29 0a 09 09 20  } gain (0-1)... 
5f80: 2a 20 20 40 72 65 74 75 72 6e 20 7b 44 65 63 69  *  @return {Deci
5f90: 62 65 6c 73 7d 20 20 20 0a 09 09 20 2a 2f 0a 09  bels}   ... */..
5fa0: 20 20 20 20 54 6f 6e 65 2e 70 72 6f 74 6f 74 79      Tone.prototy
5fb0: 70 65 2e 67 61 69 6e 54 6f 44 62 20 3d 20 66 75  pe.gainToDb = fu
5fc0: 6e 63 74 69 6f 6e 20 28 67 61 69 6e 29 20 7b 0a  nction (gain) {.
5fd0: 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
5fe0: 32 30 20 2a 20 28 4d 61 74 68 2e 6c 6f 67 28 67  20 * (Math.log(g
5ff0: 61 69 6e 29 20 2f 20 4d 61 74 68 2e 4c 4e 31 30  ain) / Math.LN10
6000: 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  );..    };..    
6010: 2f 2a 2a 0a 09 09 20 2a 20 20 43 6f 6e 76 65 72  /**... *  Conver
6020: 74 20 61 6e 20 69 6e 74 65 72 76 61 6c 20 28 69  t an interval (i
6030: 6e 20 73 65 6d 69 74 6f 6e 65 73 29 20 74 6f 20  n semitones) to 
6040: 61 20 66 72 65 71 75 65 6e 63 79 20 72 61 74 69  a frequency rati
6050: 6f 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  o.... *  @param 
6060: 20 7b 49 6e 74 65 72 76 61 6c 7d 20 69 6e 74 65   {Interval} inte
6070: 72 76 61 6c 20 74 68 65 20 6e 75 6d 62 65 72 20  rval the number 
6080: 6f 66 20 73 65 6d 69 74 6f 6e 65 73 20 61 62 6f  of semitones abo
6090: 76 65 20 74 68 65 20 62 61 73 65 20 6e 6f 74 65  ve the base note
60a0: 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 7b  ... *  @return {
60b0: 6e 75 6d 62 65 72 7d 20 20 20 20 20 20 20 20 20  number}         
60c0: 20 74 68 65 20 66 72 65 71 75 65 6e 63 79 20 72   the frequency r
60d0: 61 74 69 6f 0a 09 09 20 2a 20 20 40 65 78 61 6d  atio... *  @exam
60e0: 70 6c 65 0a 09 09 20 2a 20 74 6f 6e 65 2e 69 6e  ple... * tone.in
60f0: 74 65 72 76 61 6c 54 6f 46 72 65 71 75 65 6e 63  tervalToFrequenc
6100: 79 52 61 74 69 6f 28 30 29 3b 20 2f 2f 20 31 0a  yRatio(0); // 1.
6110: 09 09 20 2a 20 74 6f 6e 65 2e 69 6e 74 65 72 76  .. * tone.interv
6120: 61 6c 54 6f 46 72 65 71 75 65 6e 63 79 52 61 74  alToFrequencyRat
6130: 69 6f 28 31 32 29 3b 20 2f 2f 20 32 0a 09 09 20  io(12); // 2... 
6140: 2a 20 74 6f 6e 65 2e 69 6e 74 65 72 76 61 6c 54  * tone.intervalT
6150: 6f 46 72 65 71 75 65 6e 63 79 52 61 74 69 6f 28  oFrequencyRatio(
6160: 2d 31 32 29 3b 20 2f 2f 20 30 2e 35 0a 09 09 20  -12); // 0.5... 
6170: 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 70 72 6f  */..    Tone.pro
6180: 74 6f 74 79 70 65 2e 69 6e 74 65 72 76 61 6c 54  totype.intervalT
6190: 6f 46 72 65 71 75 65 6e 63 79 52 61 74 69 6f 20  oFrequencyRatio 
61a0: 3d 20 66 75 6e 63 74 69 6f 6e 20 28 69 6e 74 65  = function (inte
61b0: 72 76 61 6c 29 20 7b 0a 09 20 20 20 20 20 20 20  rval) {..       
61c0: 20 72 65 74 75 72 6e 20 4d 61 74 68 2e 70 6f 77   return Math.pow
61d0: 28 32 2c 20 69 6e 74 65 72 76 61 6c 20 2f 20 31  (2, interval / 1
61e0: 32 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  2);..    };..   
61f0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20  ////////////..  
6240: 20 20 2f 2f 09 54 49 4d 49 4e 47 0a 09 20 20 20    //.TIMING..   
6250: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20  ////////////..  
62a0: 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 52 65 74 75    /**... *  Retu
62b0: 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  rn the current t
62c0: 69 6d 65 20 6f 66 20 74 68 65 20 41 75 64 69 6f  ime of the Audio
62d0: 43 6f 6e 74 65 78 74 20 63 6c 6f 63 6b 2e 0a 09  Context clock...
62e0: 09 20 2a 20 20 40 72 65 74 75 72 6e 20 7b 4e 75  . *  @return {Nu
62f0: 6d 62 65 72 7d 20 74 68 65 20 63 75 72 72 65 6e  mber} the curren
6300: 74 54 69 6d 65 20 66 72 6f 6d 20 74 68 65 20 41  tTime from the A
6310: 75 64 69 6f 43 6f 6e 74 65 78 74 0a 09 09 20 2a  udioContext... *
6320: 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 70 72 6f 74  /..    Tone.prot
6330: 6f 74 79 70 65 2e 6e 6f 77 20 3d 20 66 75 6e 63  otype.now = func
6340: 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
6350: 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 63     return this.c
6360: 6f 6e 74 65 78 74 2e 63 75 72 72 65 6e 74 54 69  ontext.currentTi
6370: 6d 65 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  me;..    };..   
6380: 20 2f 2a 2a 0a 09 09 20 2a 20 20 52 65 74 75 72   /**... *  Retur
6390: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 69  n the current ti
63a0: 6d 65 20 6f 66 20 74 68 65 20 41 75 64 69 6f 43  me of the AudioC
63b0: 6f 6e 74 65 78 74 20 63 6c 6f 63 6b 2e 0a 09 09  ontext clock....
63c0: 20 2a 20 20 40 72 65 74 75 72 6e 20 7b 4e 75 6d   *  @return {Num
63d0: 62 65 72 7d 20 74 68 65 20 63 75 72 72 65 6e 74  ber} the current
63e0: 54 69 6d 65 20 66 72 6f 6d 20 74 68 65 20 41 75  Time from the Au
63f0: 64 69 6f 43 6f 6e 74 65 78 74 0a 09 09 20 2a 20  dioContext... * 
6400: 20 40 73 74 61 74 69 63 0a 09 09 20 2a 2f 0a 09   @static... */..
6410: 20 20 20 20 54 6f 6e 65 2e 6e 6f 77 20 3d 20 66      Tone.now = f
6420: 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
6430: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e        return Ton
6440: 65 2e 63 6f 6e 74 65 78 74 2e 63 75 72 72 65 6e  e.context.curren
6450: 74 54 69 6d 65 3b 0a 09 20 20 20 20 7d 3b 0a 09  tTime;..    };..
6460: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
6470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a  ///////////////.
64b0: 09 20 20 20 20 2f 2f 09 49 4e 48 45 52 49 54 41  .    //.INHERITA
64c0: 4e 43 45 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  NCE..    ///////
64d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6510: 2f 2f 2f 2f 0a 09 20 20 20 20 2f 2a 2a 0a 09 09  ////..    /**...
6520: 20 2a 20 20 68 61 76 65 20 61 20 63 68 69 6c 64   *  have a child
6530: 20 69 6e 68 65 72 69 74 20 61 6c 6c 20 6f 66 20   inherit all of 
6540: 54 6f 6e 65 27 73 20 28 6f 72 20 61 20 70 61 72  Tone's (or a par
6550: 65 6e 74 27 73 29 20 70 72 6f 74 6f 74 79 70 65  ent's) prototype
6560: 0a 09 09 20 2a 20 20 74 6f 20 69 6e 68 65 72 69  ... *  to inheri
6570: 74 20 74 68 65 20 70 61 72 65 6e 74 27 73 20 70  t the parent's p
6580: 72 6f 70 65 72 74 69 65 73 2c 20 6d 61 6b 65 20  roperties, make 
6590: 73 75 72 65 20 74 6f 20 63 61 6c 6c 20 0a 09 09  sure to call ...
65a0: 20 2a 20 20 50 61 72 65 6e 74 2e 63 61 6c 6c 28   *  Parent.call(
65b0: 74 68 69 73 29 20 69 6e 20 74 68 65 20 63 68 69  this) in the chi
65c0: 6c 64 27 73 20 63 6f 6e 73 74 72 75 63 74 6f 72  ld's constructor
65d0: 0a 09 09 20 2a 0a 09 09 20 2a 20 20 62 61 73 65  ... *... *  base
65e0: 64 20 6f 6e 20 63 6c 6f 73 75 72 65 20 6c 69 62  d on closure lib
65f0: 72 61 72 79 27 73 20 69 6e 68 65 72 69 74 20 66  rary's inherit f
6600: 75 6e 63 74 69 6f 6e 0a 09 09 20 2a 0a 09 09 20  unction... *... 
6610: 2a 20 20 40 73 74 61 74 69 63 0a 09 09 20 2a 20  *  @static... * 
6620: 20 40 70 61 72 61 6d 20 20 7b 66 75 6e 63 74 69   @param  {functi
6630: 6f 6e 7d 20 09 63 68 69 6c 64 20 20 0a 09 09 20  on} .child  ... 
6640: 2a 20 20 40 70 61 72 61 6d 20 20 7b 66 75 6e 63  *  @param  {func
6650: 74 69 6f 6e 3d 7d 20 70 61 72 65 6e 74 20 28 6f  tion=} parent (o
6660: 70 74 69 6f 6e 61 6c 29 20 70 61 72 65 6e 74 20  ptional) parent 
6670: 74 6f 20 69 6e 68 65 72 69 74 20 66 72 6f 6d 0a  to inherit from.
6680: 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
6690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66a0: 20 69 66 20 6e 6f 20 70 61 72 65 6e 74 20 69 73   if no parent is
66b0: 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 20 63   supplied, the c
66c0: 68 69 6c 64 0a 09 09 20 2a 20 20 20 20 20 20 20  hild... *       
66d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66e0: 20 20 20 20 20 20 77 69 6c 6c 20 69 6e 68 65 72        will inher
66f0: 69 74 20 66 72 6f 6d 20 54 6f 6e 65 0a 09 09 20  it from Tone... 
6700: 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 65 78 74  */..    Tone.ext
6710: 65 6e 64 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  end = function (
6720: 63 68 69 6c 64 2c 20 70 61 72 65 6e 74 29 20 7b  child, parent) {
6730: 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 69 73  ..        if (is
6740: 55 6e 64 65 66 28 70 61 72 65 6e 74 29 29 20 7b  Undef(parent)) {
6750: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 70 61  ..            pa
6760: 72 65 6e 74 20 3d 20 54 6f 6e 65 3b 0a 09 20 20  rent = Tone;..  
6770: 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
6780: 20 66 75 6e 63 74 69 6f 6e 20 54 65 6d 70 43 6f   function TempCo
6790: 6e 73 74 72 75 63 74 6f 72 28 29 20 7b 0a 09 20  nstructor() {.. 
67a0: 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
67b0: 20 20 54 65 6d 70 43 6f 6e 73 74 72 75 63 74 6f    TempConstructo
67c0: 72 2e 70 72 6f 74 6f 74 79 70 65 20 3d 20 70 61  r.prototype = pa
67d0: 72 65 6e 74 2e 70 72 6f 74 6f 74 79 70 65 3b 0a  rent.prototype;.
67e0: 09 20 20 20 20 20 20 20 20 63 68 69 6c 64 2e 70  .        child.p
67f0: 72 6f 74 6f 74 79 70 65 20 3d 20 6e 65 77 20 54  rototype = new T
6800: 65 6d 70 43 6f 6e 73 74 72 75 63 74 6f 72 28 29  empConstructor()
6810: 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 20 40  ;..        /** @
6820: 6f 76 65 72 72 69 64 65 20 2a 2f 0a 09 20 20 20  override */..   
6830: 20 20 20 20 20 63 68 69 6c 64 2e 70 72 6f 74 6f       child.proto
6840: 74 79 70 65 2e 63 6f 6e 73 74 72 75 63 74 6f 72  type.constructor
6850: 20 3d 20 63 68 69 6c 64 3b 0a 09 20 20 20 20 20   = child;..     
6860: 20 20 20 63 68 69 6c 64 2e 5f 73 75 70 65 72 20     child._super 
6870: 3d 20 70 61 72 65 6e 74 3b 0a 09 20 20 20 20 7d  = parent;..    }
6880: 3b 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ;..    /////////
6890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
68a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
68b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
68c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
68d0: 2f 2f 0a 09 20 20 20 20 2f 2f 09 43 4f 4e 54 45  //..    //.CONTE
68e0: 58 54 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  XT..    ////////
68f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6930: 2f 2f 2f 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  ///..    /**... 
6940: 2a 20 20 61 72 72 61 79 20 6f 66 20 63 61 6c 6c  *  array of call
6950: 62 61 63 6b 73 20 74 6f 20 62 65 20 69 6e 76 6f  backs to be invo
6960: 6b 65 64 20 77 68 65 6e 20 61 20 6e 65 77 20 63  ked when a new c
6970: 6f 6e 74 65 78 74 20 69 73 20 61 64 64 65 64 0a  ontext is added.
6980: 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 20 0a  .. *  @private .
6990: 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
69a0: 09 20 2a 2f 0a 09 20 20 20 20 76 61 72 20 6e 65  . */..    var ne
69b0: 77 43 6f 6e 74 65 78 74 43 61 6c 6c 62 61 63 6b  wContextCallback
69c0: 73 20 3d 20 5b 5d 3b 0a 09 20 20 20 20 2f 2a 2a  s = [];..    /**
69d0: 0a 09 09 20 2a 20 20 69 6e 76 6f 6b 65 20 74 68  ... *  invoke th
69e0: 69 73 20 63 61 6c 6c 62 61 63 6b 20 77 68 65 6e  is callback when
69f0: 20 61 20 6e 65 77 20 63 6f 6e 74 65 78 74 20 69   a new context i
6a00: 73 20 61 64 64 65 64 0a 09 09 20 2a 20 20 77 69  s added... *  wi
6a10: 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 20 69 6e  ll be invoked in
6a20: 69 74 69 61 6c 6c 79 20 77 69 74 68 20 74 68 65  itially with the
6a30: 20 66 69 72 73 74 20 63 6f 6e 74 65 78 74 0a 09   first context..
6a40: 09 20 2a 20 20 40 70 72 69 76 61 74 65 20 0a 09  . *  @private ..
6a50: 09 20 2a 20 20 40 73 74 61 74 69 63 0a 09 09 20  . *  @static... 
6a60: 2a 20 20 40 70 61 72 61 6d 20 7b 66 75 6e 63 74  *  @param {funct
6a70: 69 6f 6e 28 41 75 64 69 6f 43 6f 6e 74 65 78 74  ion(AudioContext
6a80: 29 7d 20 63 61 6c 6c 62 61 63 6b 20 74 68 65 20  )} callback the 
6a90: 63 61 6c 6c 62 61 63 6b 20 74 6f 20 62 65 20 69  callback to be i
6aa0: 6e 76 6f 6b 65 64 0a 09 09 20 2a 20 20 20 20 20  nvoked... *     
6ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ad0: 20 20 20 20 20 20 77 69 74 68 20 74 68 65 20 61        with the a
6ae0: 75 64 69 6f 20 63 6f 6e 74 65 78 74 0a 09 09 20  udio context... 
6af0: 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 5f 69 6e  */..    Tone._in
6b00: 69 74 41 75 64 69 6f 43 6f 6e 74 65 78 74 20 3d  itAudioContext =
6b10: 20 66 75 6e 63 74 69 6f 6e 20 28 63 61 6c 6c 62   function (callb
6b20: 61 63 6b 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ack) {..        
6b30: 2f 2f 69 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c  //invoke the cal
6b40: 6c 62 61 63 6b 20 77 69 74 68 20 74 68 65 20 65  lback with the e
6b50: 78 69 73 74 69 6e 67 20 41 75 64 69 6f 43 6f 6e  xisting AudioCon
6b60: 74 65 78 74 0a 09 20 20 20 20 20 20 20 20 63 61  text..        ca
6b70: 6c 6c 62 61 63 6b 28 54 6f 6e 65 2e 63 6f 6e 74  llback(Tone.cont
6b80: 65 78 74 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  ext);..        /
6b90: 2f 61 64 64 20 69 74 20 74 6f 20 74 68 65 20 61  /add it to the a
6ba0: 72 72 61 79 0a 09 20 20 20 20 20 20 20 20 6e 65  rray..        ne
6bb0: 77 43 6f 6e 74 65 78 74 43 61 6c 6c 62 61 63 6b  wContextCallback
6bc0: 73 2e 70 75 73 68 28 63 61 6c 6c 62 61 63 6b 29  s.push(callback)
6bd0: 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  ;..    };..    /
6be0: 2a 2a 0a 09 09 20 2a 20 20 54 6f 6e 65 20 61 75  **... *  Tone au
6bf0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
6c00: 74 65 73 20 61 20 63 6f 6e 74 65 78 74 20 6f 6e  tes a context on
6c10: 20 69 6e 69 74 2c 20 62 75 74 20 69 66 20 79 6f   init, but if yo
6c20: 75 20 61 72 65 20 77 6f 72 6b 69 6e 67 0a 09 09  u are working...
6c30: 20 2a 20 20 77 69 74 68 20 6f 74 68 65 72 20 6c   *  with other l
6c40: 69 62 72 61 72 69 65 73 20 77 68 69 63 68 20 61  ibraries which a
6c50: 6c 73 6f 20 63 72 65 61 74 65 20 61 6e 20 41 75  lso create an Au
6c60: 64 69 6f 43 6f 6e 74 65 78 74 2c 20 69 74 20 63  dioContext, it c
6c70: 61 6e 20 62 65 0a 09 09 20 2a 20 20 75 73 65 66  an be... *  usef
6c80: 75 6c 20 74 6f 20 73 65 74 20 79 6f 75 72 20 6f  ul to set your o
6c90: 77 6e 2e 20 49 66 20 79 6f 75 20 61 72 65 20 67  wn. If you are g
6ca0: 6f 69 6e 67 20 74 6f 20 73 65 74 20 79 6f 75 72  oing to set your
6cb0: 20 6f 77 6e 20 63 6f 6e 74 65 78 74 2c 20 0a 09   own context, ..
6cc0: 09 20 2a 20 20 62 65 20 73 75 72 65 20 74 6f 20  . *  be sure to 
6cd0: 64 6f 20 69 74 20 61 74 20 74 68 65 20 73 74 61  do it at the sta
6ce0: 72 74 20 6f 66 20 79 6f 75 72 20 63 6f 64 65 2c  rt of your code,
6cf0: 20 62 65 66 6f 72 65 20 63 72 65 61 74 69 6e 67   before creating
6d00: 20 61 6e 79 20 6f 62 6a 65 63 74 73 2e 0a 09 09   any objects....
6d10: 20 2a 20 20 40 73 74 61 74 69 63 0a 09 09 20 2a   *  @static... *
6d20: 20 20 40 70 61 72 61 6d 20 7b 41 75 64 69 6f 43    @param {AudioC
6d30: 6f 6e 74 65 78 74 7d 20 63 74 78 20 54 68 65 20  ontext} ctx The 
6d40: 6e 65 77 20 61 75 64 69 6f 20 63 6f 6e 74 65 78  new audio contex
6d50: 74 20 74 6f 20 73 65 74 0a 09 09 20 2a 2f 0a 09  t to set... */..
6d60: 20 20 20 20 54 6f 6e 65 2e 73 65 74 43 6f 6e 74      Tone.setCont
6d70: 65 78 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  ext = function (
6d80: 63 74 78 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ctx) {..        
6d90: 2f 2f 73 65 74 20 74 68 65 20 70 72 6f 74 6f 74  //set the protot
6da0: 79 70 65 73 0a 09 20 20 20 20 20 20 20 20 54 6f  ypes..        To
6db0: 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e 63 6f 6e  ne.prototype.con
6dc0: 74 65 78 74 20 3d 20 63 74 78 3b 0a 09 20 20 20  text = ctx;..   
6dd0: 20 20 20 20 20 54 6f 6e 65 2e 63 6f 6e 74 65 78       Tone.contex
6de0: 74 20 3d 20 63 74 78 3b 0a 09 20 20 20 20 20 20  t = ctx;..      
6df0: 20 20 2f 2f 69 6e 76 6f 6b 65 20 61 6c 6c 20 74    //invoke all t
6e00: 68 65 20 63 61 6c 6c 62 61 63 6b 73 0a 09 20 20  he callbacks..  
6e10: 20 20 20 20 20 20 66 6f 72 20 28 76 61 72 20 69        for (var i
6e20: 20 3d 20 30 3b 20 69 20 3c 20 6e 65 77 43 6f 6e   = 0; i < newCon
6e30: 74 65 78 74 43 61 6c 6c 62 61 63 6b 73 2e 6c 65  textCallbacks.le
6e40: 6e 67 74 68 3b 20 69 2b 2b 29 20 7b 0a 09 20 20  ngth; i++) {..  
6e50: 20 20 20 20 20 20 20 20 20 20 6e 65 77 43 6f 6e            newCon
6e60: 74 65 78 74 43 61 6c 6c 62 61 63 6b 73 5b 69 5d  textCallbacks[i]
6e70: 28 63 74 78 29 3b 0a 09 20 20 20 20 20 20 20 20  (ctx);..        
6e80: 7d 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  }..    };..    /
6e90: 2f 73 65 74 75 70 20 74 68 65 20 63 6f 6e 74 65  /setup the conte
6ea0: 78 74 0a 09 20 20 20 20 54 6f 6e 65 2e 5f 69 6e  xt..    Tone._in
6eb0: 69 74 41 75 64 69 6f 43 6f 6e 74 65 78 74 28 66  itAudioContext(f
6ec0: 75 6e 63 74 69 6f 6e 20 28 61 75 64 69 6f 43 6f  unction (audioCo
6ed0: 6e 74 65 78 74 29 20 7b 0a 09 20 20 20 20 20 20  ntext) {..      
6ee0: 20 20 2f 2f 73 65 74 20 74 68 65 20 62 6c 6f 63    //set the bloc
6ef0: 6b 54 69 6d 65 0a 09 20 20 20 20 20 20 20 20 54  kTime..        T
6f00: 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e 62 6c  one.prototype.bl
6f10: 6f 63 6b 54 69 6d 65 20 3d 20 31 32 38 20 2f 20  ockTime = 128 / 
6f20: 61 75 64 69 6f 43 6f 6e 74 65 78 74 2e 73 61 6d  audioContext.sam
6f30: 70 6c 65 52 61 74 65 3b 0a 09 20 20 20 20 20 20  pleRate;..      
6f40: 20 20 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65    Tone.prototype
6f50: 2e 73 61 6d 70 6c 65 54 69 6d 65 20 3d 20 31 20  .sampleTime = 1 
6f60: 2f 20 61 75 64 69 6f 43 6f 6e 74 65 78 74 2e 73  / audioContext.s
6f70: 61 6d 70 6c 65 52 61 74 65 3b 0a 09 20 20 20 20  ampleRate;..    
6f80: 20 20 20 20 5f 73 69 6c 65 6e 74 4e 6f 64 65 20      _silentNode 
6f90: 3d 20 61 75 64 69 6f 43 6f 6e 74 65 78 74 2e 63  = audioContext.c
6fa0: 72 65 61 74 65 47 61 69 6e 28 29 3b 0a 09 20 20  reateGain();..  
6fb0: 20 20 20 20 20 20 5f 73 69 6c 65 6e 74 4e 6f 64        _silentNod
6fc0: 65 2e 67 61 69 6e 2e 76 61 6c 75 65 20 3d 20 30  e.gain.value = 0
6fd0: 3b 0a 09 20 20 20 20 20 20 20 20 5f 73 69 6c 65  ;..        _sile
6fe0: 6e 74 4e 6f 64 65 2e 63 6f 6e 6e 65 63 74 28 61  ntNode.connect(a
6ff0: 75 64 69 6f 43 6f 6e 74 65 78 74 2e 64 65 73 74  udioContext.dest
7000: 69 6e 61 74 69 6f 6e 29 3b 0a 09 20 20 20 20 7d  ination);..    }
7010: 29 3b 0a 09 20 20 20 20 54 6f 6e 65 2e 76 65 72  );..    Tone.ver
7020: 73 69 6f 6e 20 3d 20 27 72 39 27 3b 0a 09 20 20  sion = 'r9';..  
7030: 20 20 2f 2f 20 61 6c 6c 6f 77 20 6f 70 74 69 6f    // allow optio
7040: 6e 61 6c 20 73 69 6c 65 6e 63 69 6e 67 20 6f 66  nal silencing of
7050: 20 74 68 69 73 20 6c 6f 67 0a 09 20 20 20 20 69   this log..    i
7060: 66 20 28 21 77 69 6e 64 6f 77 2e 54 4f 4e 45 5f  f (!window.TONE_
7070: 53 49 4c 45 4e 43 45 5f 56 45 52 53 49 4f 4e 5f  SILENCE_VERSION_
7080: 4c 4f 47 47 49 4e 47 29 20 7b 0a 09 20 20 20 20  LOGGING) {..    
7090: 20 20 20 20 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28      console.log(
70a0: 27 25 63 20 2a 20 54 6f 6e 65 2e 6a 73 20 27 20  '%c * Tone.js ' 
70b0: 2b 20 54 6f 6e 65 2e 76 65 72 73 69 6f 6e 20 2b  + Tone.version +
70c0: 20 27 20 2a 20 27 2c 20 27 62 61 63 6b 67 72 6f   ' * ', 'backgro
70d0: 75 6e 64 3a 20 23 30 30 30 3b 20 63 6f 6c 6f 72  und: #000; color
70e0: 3a 20 23 66 66 66 27 29 3b 0a 09 20 20 20 20 7d  : #fff');..    }
70f0: 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e  ..    return Ton
7100: 65 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28  e;..});..Module(
7110: 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20  function (Tone) 
7120: 7b 0a 09 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a  {..    ..    /**
7130: 0a 09 09 20 2a 20 20 40 63 6c 61 73 73 20 20 42  ... *  @class  B
7140: 61 73 65 20 63 6c 61 73 73 20 66 6f 72 20 61 6c  ase class for al
7150: 6c 20 53 69 67 6e 61 6c 73 2e 20 55 73 65 64 20  l Signals. Used 
7160: 49 6e 74 65 72 6e 61 6c 6c 79 2e 20 0a 09 09 20  Internally. ... 
7170: 2a 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 72 75  *... *  @constru
7180: 63 74 6f 72 0a 09 09 20 2a 20 20 40 65 78 74 65  ctor... *  @exte
7190: 6e 64 73 20 7b 54 6f 6e 65 7d 0a 09 09 20 2a 2f  nds {Tone}... */
71a0: 0a 09 20 20 20 20 54 6f 6e 65 2e 53 69 67 6e 61  ..    Tone.Signa
71b0: 6c 42 61 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e  lBase = function
71c0: 20 28 29 20 7b 0a 09 20 20 20 20 7d 3b 0a 09 20   () {..    };.. 
71d0: 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54     Tone.extend(T
71e0: 6f 6e 65 2e 53 69 67 6e 61 6c 42 61 73 65 29 3b  one.SignalBase);
71f0: 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
7200: 57 68 65 6e 20 73 69 67 6e 61 6c 73 20 63 6f 6e  When signals con
7210: 6e 65 63 74 20 74 6f 20 6f 74 68 65 72 20 73 69  nect to other si
7220: 67 6e 61 6c 73 20 6f 72 20 41 75 64 69 6f 50 61  gnals or AudioPa
7230: 72 61 6d 73 2c 20 0a 09 09 20 2a 20 20 74 68 65  rams, ... *  the
7240: 79 20 74 61 6b 65 20 6f 76 65 72 20 74 68 65 20  y take over the 
7250: 6f 75 74 70 75 74 20 76 61 6c 75 65 20 6f 66 20  output value of 
7260: 74 68 61 74 20 73 69 67 6e 61 6c 20 6f 72 20 41  that signal or A
7270: 75 64 69 6f 50 61 72 61 6d 2e 20 0a 09 09 20 2a  udioParam. ... *
7280: 20 20 46 6f 72 20 61 6c 6c 20 6f 74 68 65 72 20    For all other 
7290: 6e 6f 64 65 73 2c 20 74 68 65 20 62 65 68 61 76  nodes, the behav
72a0: 69 6f 72 20 69 73 20 74 68 65 20 73 61 6d 65 20  ior is the same 
72b0: 61 73 20 61 20 64 65 66 61 75 6c 74 20 3c 63 6f  as a default <co
72c0: 64 65 3e 63 6f 6e 6e 65 63 74 3c 2f 63 6f 64 65  de>connect</code
72d0: 3e 2e 20 0a 09 09 20 2a 0a 09 09 20 2a 20 20 40  >. ... *... *  @
72e0: 6f 76 65 72 72 69 64 65 0a 09 09 20 2a 20 20 40  override... *  @
72f0: 70 61 72 61 6d 20 7b 41 75 64 69 6f 50 61 72 61  param {AudioPara
7300: 6d 7c 41 75 64 69 6f 4e 6f 64 65 7c 54 6f 6e 65  m|AudioNode|Tone
7310: 2e 53 69 67 6e 61 6c 7c 54 6f 6e 65 7d 20 6e 6f  .Signal|Tone} no
7320: 64 65 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  de ... *  @param
7330: 20 7b 6e 75 6d 62 65 72 7d 20 5b 6f 75 74 70 75   {number} [outpu
7340: 74 4e 75 6d 62 65 72 3d 30 5d 20 54 68 65 20 6f  tNumber=0] The o
7350: 75 74 70 75 74 20 6e 75 6d 62 65 72 20 74 6f 20  utput number to 
7360: 63 6f 6e 6e 65 63 74 20 66 72 6f 6d 2e 0a 09 09  connect from....
7370: 20 2a 20 20 40 70 61 72 61 6d 20 7b 6e 75 6d 62   *  @param {numb
7380: 65 72 7d 20 5b 69 6e 70 75 74 4e 75 6d 62 65 72  er} [inputNumber
7390: 3d 30 5d 20 54 68 65 20 69 6e 70 75 74 20 6e 75  =0] The input nu
73a0: 6d 62 65 72 20 74 6f 20 63 6f 6e 6e 65 63 74 20  mber to connect 
73b0: 74 6f 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72  to.... *  @retur
73c0: 6e 73 20 7b 54 6f 6e 65 2e 53 69 67 6e 61 6c 42  ns {Tone.SignalB
73d0: 61 73 65 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a  ase} this... */.
73e0: 09 20 20 20 20 54 6f 6e 65 2e 53 69 67 6e 61 6c  .    Tone.Signal
73f0: 42 61 73 65 2e 70 72 6f 74 6f 74 79 70 65 2e 63  Base.prototype.c
7400: 6f 6e 6e 65 63 74 20 3d 20 66 75 6e 63 74 69 6f  onnect = functio
7410: 6e 20 28 6e 6f 64 65 2c 20 6f 75 74 70 75 74 4e  n (node, outputN
7420: 75 6d 62 65 72 2c 20 69 6e 70 75 74 4e 75 6d 62  umber, inputNumb
7430: 65 72 29 20 7b 0a 09 20 20 20 20 20 20 20 20 2f  er) {..        /
7440: 2f 7a 65 72 6f 20 69 74 20 6f 75 74 20 73 6f 20  /zero it out so 
7450: 74 68 61 74 20 74 68 65 20 73 69 67 6e 61 6c 20  that the signal 
7460: 63 61 6e 20 68 61 76 65 20 66 75 6c 6c 20 63 6f  can have full co
7470: 6e 74 72 6f 6c 0a 09 20 20 20 20 20 20 20 20 69  ntrol..        i
7480: 66 20 28 54 6f 6e 65 2e 53 69 67 6e 61 6c 20 26  f (Tone.Signal &
7490: 26 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 20 3d 3d  & Tone.Signal ==
74a0: 3d 20 6e 6f 64 65 2e 63 6f 6e 73 74 72 75 63 74  = node.construct
74b0: 6f 72 20 7c 7c 20 54 6f 6e 65 2e 50 61 72 61 6d  or || Tone.Param
74c0: 20 26 26 20 54 6f 6e 65 2e 50 61 72 61 6d 20 3d   && Tone.Param =
74d0: 3d 3d 20 6e 6f 64 65 2e 63 6f 6e 73 74 72 75 63  == node.construc
74e0: 74 6f 72 20 7c 7c 20 54 6f 6e 65 2e 54 69 6d 65  tor || Tone.Time
74f0: 6c 69 6e 65 53 69 67 6e 61 6c 20 26 26 20 54 6f  lineSignal && To
7500: 6e 65 2e 54 69 6d 65 6c 69 6e 65 53 69 67 6e 61  ne.TimelineSigna
7510: 6c 20 3d 3d 3d 20 6e 6f 64 65 2e 63 6f 6e 73 74  l === node.const
7520: 72 75 63 74 6f 72 29 20 7b 0a 09 20 20 20 20 20  ructor) {..     
7530: 20 20 20 20 20 20 20 2f 2f 63 61 6e 63 65 6c 20         //cancel 
7540: 63 68 61 6e 67 65 73 0a 09 20 20 20 20 20 20 20  changes..       
7550: 20 20 20 20 20 6e 6f 64 65 2e 5f 70 61 72 61 6d       node._param
7560: 2e 63 61 6e 63 65 6c 53 63 68 65 64 75 6c 65 64  .cancelScheduled
7570: 56 61 6c 75 65 73 28 30 29 3b 0a 09 20 20 20 20  Values(0);..    
7580: 20 20 20 20 20 20 20 20 2f 2f 72 65 73 65 74 20          //reset 
7590: 74 68 65 20 76 61 6c 75 65 0a 09 20 20 20 20 20  the value..     
75a0: 20 20 20 20 20 20 20 6e 6f 64 65 2e 5f 70 61 72         node._par
75b0: 61 6d 2e 76 61 6c 75 65 20 3d 20 30 3b 0a 09 20  am.value = 0;.. 
75c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 6d 61 72             //mar
75d0: 6b 20 74 68 65 20 76 61 6c 75 65 20 61 73 20 6f  k the value as o
75e0: 76 65 72 72 69 64 64 65 6e 0a 09 20 20 20 20 20  verridden..     
75f0: 20 20 20 20 20 20 20 6e 6f 64 65 2e 6f 76 65 72         node.over
7600: 72 69 64 64 65 6e 20 3d 20 74 72 75 65 3b 0a 09  ridden = true;..
7610: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69          } else i
7620: 66 20 28 6e 6f 64 65 20 69 6e 73 74 61 6e 63 65  f (node instance
7630: 6f 66 20 41 75 64 69 6f 50 61 72 61 6d 29 20 7b  of AudioParam) {
7640: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f  ..            no
7650: 64 65 2e 63 61 6e 63 65 6c 53 63 68 65 64 75 6c  de.cancelSchedul
7660: 65 64 56 61 6c 75 65 73 28 30 29 3b 0a 09 20 20  edValues(0);..  
7670: 20 20 20 20 20 20 20 20 20 20 6e 6f 64 65 2e 76            node.v
7680: 61 6c 75 65 20 3d 20 30 3b 0a 09 20 20 20 20 20  alue = 0;..     
7690: 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 54 6f     }..        To
76a0: 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e 63 6f 6e  ne.prototype.con
76b0: 6e 65 63 74 2e 63 61 6c 6c 28 74 68 69 73 2c 20  nect.call(this, 
76c0: 6e 6f 64 65 2c 20 6f 75 74 70 75 74 4e 75 6d 62  node, outputNumb
76d0: 65 72 2c 20 69 6e 70 75 74 4e 75 6d 62 65 72 29  er, inputNumber)
76e0: 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
76f0: 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a  n this;..    };.
7700: 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65  .    return Tone
7710: 2e 53 69 67 6e 61 6c 42 61 73 65 3b 0a 09 7d 29  .SignalBase;..})
7720: 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69  ;..Module(functi
7730: 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20  on (Tone) {..   
7740: 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20   ..    /**... * 
7750: 20 40 63 6c 61 73 73 20 57 72 61 70 73 20 74 68   @class Wraps th
7760: 65 20 6e 61 74 69 76 65 20 57 65 62 20 41 75 64  e native Web Aud
7770: 69 6f 20 41 50 49 20 0a 09 09 20 2a 20 20 20 20  io API ... *    
7780: 20 20 20 20 20 5b 57 61 76 65 53 68 61 70 65 72       [WaveShaper
7790: 4e 6f 64 65 5d 28 68 74 74 70 3a 2f 2f 77 65 62  Node](http://web
77a0: 61 75 64 69 6f 2e 67 69 74 68 75 62 2e 69 6f 2f  audio.github.io/
77b0: 77 65 62 2d 61 75 64 69 6f 2d 61 70 69 2f 23 74  web-audio-api/#t
77c0: 68 65 2d 77 61 76 65 73 68 61 70 65 72 6e 6f 64  he-waveshapernod
77d0: 65 2d 69 6e 74 65 72 66 61 63 65 29 2e 0a 09 09  e-interface)....
77e0: 20 2a 0a 09 09 20 2a 20 20 40 65 78 74 65 6e 64   *... *  @extend
77f0: 73 20 7b 54 6f 6e 65 2e 53 69 67 6e 61 6c 42 61  s {Tone.SignalBa
7800: 73 65 7d 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74  se}... *  @const
7810: 72 75 63 74 6f 72 0a 09 09 20 2a 20 20 40 70 61  ructor... *  @pa
7820: 72 61 6d 20 7b 66 75 6e 63 74 69 6f 6e 7c 41 72  ram {function|Ar
7830: 72 61 79 7c 4e 75 6d 62 65 72 7d 20 6d 61 70 70  ray|Number} mapp
7840: 69 6e 67 20 54 68 65 20 66 75 6e 63 74 69 6f 6e  ing The function
7850: 20 75 73 65 64 20 74 6f 20 64 65 66 69 6e 65 20   used to define 
7860: 74 68 65 20 76 61 6c 75 65 73 2e 20 0a 09 09 20  the values. ... 
7870: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
7880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7890: 20 20 20 20 20 54 68 65 20 6d 61 70 70 69 6e 67       The mapping
78a0: 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64   function should
78b0: 20 74 61 6b 65 20 74 77 6f 20 61 72 67 75 6d 65   take two argume
78c0: 6e 74 73 3a 20 0a 09 09 20 2a 20 20 20 20 20 20  nts: ... *      
78d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
78f0: 65 20 66 69 72 73 74 20 69 73 20 74 68 65 20 76  e first is the v
7900: 61 6c 75 65 20 61 74 20 74 68 65 20 63 75 72 72  alue at the curr
7910: 65 6e 74 20 70 6f 73 69 74 69 6f 6e 20 0a 09 09  ent position ...
7920: 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
7930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7940: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 73 65        and the se
7950: 63 6f 6e 64 20 69 73 20 74 68 65 20 61 72 72 61  cond is the arra
7960: 79 20 70 6f 73 69 74 69 6f 6e 2e 20 0a 09 09 20  y position. ... 
7970: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
7980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7990: 20 20 20 20 20 49 66 20 74 68 65 20 61 72 67 75       If the argu
79a0: 6d 65 6e 74 20 69 73 20 61 6e 20 61 72 72 61 79  ment is an array
79b0: 2c 20 74 68 61 74 20 61 72 72 61 79 20 77 69 6c  , that array wil
79c0: 6c 20 62 65 0a 09 09 20 2a 20 20 20 20 20 20 20  l be... *       
79d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
79f0: 20 61 73 20 74 68 65 20 77 61 76 65 20 73 68 61   as the wave sha
7a00: 70 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2e 20 54  ping function. T
7a10: 68 65 20 69 6e 70 75 74 0a 09 09 20 2a 20 20 20  he input... *   
7a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a40: 20 73 69 67 6e 61 6c 20 69 73 20 61 6e 20 41 75   signal is an Au
7a50: 64 69 6f 52 61 6e 67 65 20 5b 2d 31 2c 20 31 5d  dioRange [-1, 1]
7a60: 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 6f   value and the o
7a70: 75 74 70 75 74 0a 09 09 20 2a 20 20 20 20 20 20  utput... *      
7a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 69                si
7aa0: 67 6e 61 6c 20 63 61 6e 20 74 61 6b 65 20 6f 6e  gnal can take on
7ab0: 20 61 6e 79 20 6e 75 6d 65 72 69 63 61 6c 20 76   any numerical v
7ac0: 61 6c 75 65 73 2e 20 0a 09 09 20 2a 20 20 20 20  alues. ... *    
7ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7af0: 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 4e  ... *  @param {N
7b00: 75 6d 62 65 72 7d 20 5b 62 75 66 66 65 72 4c 65  umber} [bufferLe
7b10: 6e 3d 31 30 32 34 5d 20 54 68 65 20 6c 65 6e 67  n=1024] The leng
7b20: 74 68 20 6f 66 20 74 68 65 20 57 61 76 65 53 68  th of the WaveSh
7b30: 61 70 65 72 4e 6f 64 65 20 62 75 66 66 65 72 2e  aperNode buffer.
7b40: 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a  ... *  @example.
7b50: 09 09 20 2a 20 76 61 72 20 74 69 6d 65 73 54 77  .. * var timesTw
7b60: 6f 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 57 61 76  o = new Tone.Wav
7b70: 65 53 68 61 70 65 72 28 66 75 6e 63 74 69 6f 6e  eShaper(function
7b80: 28 76 61 6c 29 7b 0a 09 09 20 2a 20 09 72 65 74  (val){... * .ret
7b90: 75 72 6e 20 76 61 6c 20 2a 20 32 3b 0a 09 09 20  urn val * 2;... 
7ba0: 2a 20 7d 2c 20 32 30 34 38 29 3b 0a 09 09 20 2a  * }, 2048);... *
7bb0: 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20    @example... * 
7bc0: 2f 2f 61 20 77 61 76 65 73 68 61 70 65 72 20 63  //a waveshaper c
7bd0: 61 6e 20 61 6c 73 6f 20 62 65 20 63 6f 6e 73 74  an also be const
7be0: 72 75 63 74 65 64 20 77 69 74 68 20 61 6e 20 61  ructed with an a
7bf0: 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73 0a 09  rray of values..
7c00: 09 20 2a 20 76 61 72 20 69 6e 76 65 72 74 20 3d  . * var invert =
7c10: 20 6e 65 77 20 54 6f 6e 65 2e 57 61 76 65 53 68   new Tone.WaveSh
7c20: 61 70 65 72 28 5b 31 2c 20 2d 31 5d 29 3b 0a 09  aper([1, -1]);..
7c30: 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 57  . */..    Tone.W
7c40: 61 76 65 53 68 61 70 65 72 20 3d 20 66 75 6e 63  aveShaper = func
7c50: 74 69 6f 6e 20 28 6d 61 70 70 69 6e 67 2c 20 62  tion (mapping, b
7c60: 75 66 66 65 72 4c 65 6e 29 20 7b 0a 09 20 20 20  ufferLen) {..   
7c70: 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
7c80: 74 68 65 20 77 61 76 65 73 68 61 70 65 72 0a 09  the waveshaper..
7c90: 09 09 20 2a 20 20 40 74 79 70 65 20 7b 57 61 76  .. *  @type {Wav
7ca0: 65 53 68 61 70 65 72 4e 6f 64 65 7d 0a 09 09 09  eShaperNode}....
7cb0: 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
7cc0: 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
7cd0: 73 2e 5f 73 68 61 70 65 72 20 3d 20 74 68 69 73  s._shaper = this
7ce0: 2e 69 6e 70 75 74 20 3d 20 74 68 69 73 2e 6f 75  .input = this.ou
7cf0: 74 70 75 74 20 3d 20 74 68 69 73 2e 63 6f 6e 74  tput = this.cont
7d00: 65 78 74 2e 63 72 65 61 74 65 57 61 76 65 53 68  ext.createWaveSh
7d10: 61 70 65 72 28 29 3b 0a 09 20 20 20 20 20 20 20  aper();..       
7d20: 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 74 68 65 20   /**.... *  the 
7d30: 77 61 76 65 73 68 61 70 65 72 73 20 63 75 72 76  waveshapers curv
7d40: 65 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b  e.... *  @type {
7d50: 46 6c 6f 61 74 33 32 41 72 72 61 79 7d 0a 09 09  Float32Array}...
7d60: 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
7d70: 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
7d80: 69 73 2e 5f 63 75 72 76 65 20 3d 20 6e 75 6c 6c  is._curve = null
7d90: 3b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 41  ;..        if (A
7da0: 72 72 61 79 2e 69 73 41 72 72 61 79 28 6d 61 70  rray.isArray(map
7db0: 70 69 6e 67 29 29 20 7b 0a 09 20 20 20 20 20 20  ping)) {..      
7dc0: 20 20 20 20 20 20 74 68 69 73 2e 63 75 72 76 65        this.curve
7dd0: 20 3d 20 6d 61 70 70 69 6e 67 3b 0a 09 20 20 20   = mapping;..   
7de0: 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28       } else if (
7df0: 69 73 46 69 6e 69 74 65 28 6d 61 70 70 69 6e 67  isFinite(mapping
7e00: 29 20 7c 7c 20 74 68 69 73 2e 69 73 55 6e 64 65  ) || this.isUnde
7e10: 66 28 6d 61 70 70 69 6e 67 29 29 20 7b 0a 09 20  f(mapping)) {.. 
7e20: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
7e30: 5f 63 75 72 76 65 20 3d 20 6e 65 77 20 46 6c 6f  _curve = new Flo
7e40: 61 74 33 32 41 72 72 61 79 28 74 68 69 73 2e 64  at32Array(this.d
7e50: 65 66 61 75 6c 74 41 72 67 28 6d 61 70 70 69 6e  efaultArg(mappin
7e60: 67 2c 20 31 30 32 34 29 29 3b 0a 09 20 20 20 20  g, 1024));..    
7e70: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 74      } else if (t
7e80: 68 69 73 2e 69 73 46 75 6e 63 74 69 6f 6e 28 6d  his.isFunction(m
7e90: 61 70 70 69 6e 67 29 29 20 7b 0a 09 20 20 20 20  apping)) {..    
7ea0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 63 75          this._cu
7eb0: 72 76 65 20 3d 20 6e 65 77 20 46 6c 6f 61 74 33  rve = new Float3
7ec0: 32 41 72 72 61 79 28 74 68 69 73 2e 64 65 66 61  2Array(this.defa
7ed0: 75 6c 74 41 72 67 28 62 75 66 66 65 72 4c 65 6e  ultArg(bufferLen
7ee0: 2c 20 31 30 32 34 29 29 3b 0a 09 20 20 20 20 20  , 1024));..     
7ef0: 20 20 20 20 20 20 20 74 68 69 73 2e 73 65 74 4d         this.setM
7f00: 61 70 28 6d 61 70 70 69 6e 67 29 3b 0a 09 20 20  ap(mapping);..  
7f10: 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a        }..    };.
7f20: 09 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64  .    Tone.extend
7f30: 28 54 6f 6e 65 2e 57 61 76 65 53 68 61 70 65 72  (Tone.WaveShaper
7f40: 2c 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 42 61 73  , Tone.SignalBas
7f50: 65 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  e);..    /**... 
7f60: 2a 20 20 55 73 65 73 20 61 20 6d 61 70 70 69 6e  *  Uses a mappin
7f70: 67 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 73 65  g function to se
7f80: 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  t the value of t
7f90: 68 65 20 63 75 72 76 65 2e 20 0a 09 09 20 2a 20  he curve. ... * 
7fa0: 20 40 70 61 72 61 6d 20 7b 66 75 6e 63 74 69 6f   @param {functio
7fb0: 6e 7d 20 6d 61 70 70 69 6e 67 20 54 68 65 20 66  n} mapping The f
7fc0: 75 6e 63 74 69 6f 6e 20 75 73 65 64 20 74 6f 20  unction used to 
7fd0: 64 65 66 69 6e 65 20 74 68 65 20 76 61 6c 75 65  define the value
7fe0: 73 2e 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20  s. ... *        
7ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8000: 20 20 20 20 54 68 65 20 6d 61 70 70 69 6e 67 20      The mapping 
8010: 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 20 74 77  function take tw
8020: 6f 20 61 72 67 75 6d 65 6e 74 73 3a 20 0a 09 09  o arguments: ...
8030: 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
8040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
8050: 65 20 66 69 72 73 74 20 69 73 20 74 68 65 20 76  e first is the v
8060: 61 6c 75 65 20 61 74 20 74 68 65 20 63 75 72 72  alue at the curr
8070: 65 6e 74 20 70 6f 73 69 74 69 6f 6e 20 0a 09 09  ent position ...
8080: 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
8090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
80a0: 69 63 68 20 67 6f 65 73 20 66 72 6f 6d 20 2d 31  ich goes from -1
80b0: 20 74 6f 20 31 20 6f 76 65 72 20 74 68 65 20 6e   to 1 over the n
80c0: 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74  umber of element
80d0: 73 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20  s... *          
80e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80f0: 20 20 69 6e 20 74 68 65 20 63 75 72 76 65 20 61    in the curve a
8100: 72 72 61 79 2e 20 54 68 65 20 73 65 63 6f 6e 64  rray. The second
8110: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 74 68 65   argument is the
8120: 20 61 72 72 61 79 20 70 6f 73 69 74 69 6f 6e 2e   array position.
8130: 20 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73   ... *  @returns
8140: 20 7b 54 6f 6e 65 2e 57 61 76 65 53 68 61 70 65   {Tone.WaveShape
8150: 72 7d 20 74 68 69 73 0a 09 09 20 2a 20 20 40 65  r} this... *  @e
8160: 78 61 6d 70 6c 65 0a 09 09 20 2a 20 2f 2f 6d 61  xample... * //ma
8170: 70 20 74 68 65 20 69 6e 70 75 74 20 73 69 67 6e  p the input sign
8180: 61 6c 20 66 72 6f 6d 20 5b 2d 31 2c 20 31 5d 20  al from [-1, 1] 
8190: 74 6f 20 5b 30 2c 20 31 30 5d 0a 09 09 20 2a 20  to [0, 10]... * 
81a0: 73 68 61 70 65 72 2e 73 65 74 4d 61 70 28 66 75  shaper.setMap(fu
81b0: 6e 63 74 69 6f 6e 28 76 61 6c 2c 20 69 6e 64 65  nction(val, inde
81c0: 78 29 7b 0a 09 09 20 2a 20 09 72 65 74 75 72 6e  x){... * .return
81d0: 20 28 76 61 6c 20 2b 20 31 29 20 2a 20 35 3b 0a   (val + 1) * 5;.
81e0: 09 09 20 2a 20 7d 29 0a 09 09 20 2a 2f 0a 09 20  .. * })... */.. 
81f0: 20 20 20 54 6f 6e 65 2e 57 61 76 65 53 68 61 70     Tone.WaveShap
8200: 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e 73 65 74  er.prototype.set
8210: 4d 61 70 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  Map = function (
8220: 6d 61 70 70 69 6e 67 29 20 7b 0a 09 20 20 20 20  mapping) {..    
8230: 20 20 20 20 66 6f 72 20 28 76 61 72 20 69 20 3d      for (var i =
8240: 20 30 2c 20 6c 65 6e 20 3d 20 74 68 69 73 2e 5f   0, len = this._
8250: 63 75 72 76 65 2e 6c 65 6e 67 74 68 3b 20 69 20  curve.length; i 
8260: 3c 20 6c 65 6e 3b 20 69 2b 2b 29 20 7b 0a 09 20  < len; i++) {.. 
8270: 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 6e             var n
8280: 6f 72 6d 61 6c 69 7a 65 64 20 3d 20 69 20 2f 20  ormalized = i / 
8290: 28 6c 65 6e 20 2d 20 31 29 20 2a 20 32 20 2d 20  (len - 1) * 2 - 
82a0: 31 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  1;..            
82b0: 74 68 69 73 2e 5f 63 75 72 76 65 5b 69 5d 20 3d  this._curve[i] =
82c0: 20 6d 61 70 70 69 6e 67 28 6e 6f 72 6d 61 6c 69   mapping(normali
82d0: 7a 65 64 2c 20 69 29 3b 0a 09 20 20 20 20 20 20  zed, i);..      
82e0: 20 20 7d 0a 09 20 20 20 20 20 20 20 20 74 68 69    }..        thi
82f0: 73 2e 5f 73 68 61 70 65 72 2e 63 75 72 76 65 20  s._shaper.curve 
8300: 3d 20 74 68 69 73 2e 5f 63 75 72 76 65 3b 0a 09  = this._curve;..
8310: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
8320: 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  his;..    };..  
8330: 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65 20 61    /**... * The a
8340: 72 72 61 79 20 74 6f 20 73 65 74 20 61 73 20 74  rray to set as t
8350: 68 65 20 77 61 76 65 73 68 61 70 65 72 20 63 75  he waveshaper cu
8360: 72 76 65 2e 20 46 6f 72 20 6c 69 6e 65 61 72 20  rve. For linear 
8370: 63 75 72 76 65 73 0a 09 09 20 2a 20 61 72 72 61  curves... * arra
8380: 79 20 6c 65 6e 67 74 68 20 64 6f 65 73 20 6e 6f  y length does no
8390: 74 20 6d 61 6b 65 20 6d 75 63 68 20 64 69 66 66  t make much diff
83a0: 65 72 65 6e 63 65 2c 20 62 75 74 20 66 6f 72 20  erence, but for 
83b0: 63 6f 6d 70 6c 65 78 20 63 75 72 76 65 73 0a 09  complex curves..
83c0: 09 20 2a 20 6c 6f 6e 67 65 72 20 61 72 72 61 79  . * longer array
83d0: 73 20 77 69 6c 6c 20 70 72 6f 76 69 64 65 20 73  s will provide s
83e0: 6d 6f 6f 74 68 65 72 20 69 6e 74 65 72 70 6f 6c  moother interpol
83f0: 61 74 69 6f 6e 2e 20 0a 09 09 20 2a 20 40 6d 65  ation. ... * @me
8400: 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 57 61 76 65  mberOf Tone.Wave
8410: 53 68 61 70 65 72 23 0a 09 09 20 2a 20 40 74 79  Shaper#... * @ty
8420: 70 65 20 7b 41 72 72 61 79 7d 0a 09 09 20 2a 20  pe {Array}... * 
8430: 40 6e 61 6d 65 20 63 75 72 76 65 0a 09 09 20 2a  @name curve... *
8440: 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65  /..    Object.de
8450: 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e  fineProperty(Ton
8460: 65 2e 57 61 76 65 53 68 61 70 65 72 2e 70 72 6f  e.WaveShaper.pro
8470: 74 6f 74 79 70 65 2c 20 27 63 75 72 76 65 27 2c  totype, 'curve',
8480: 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a   {..        get:
8490: 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
84a0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
84b0: 72 6e 20 74 68 69 73 2e 5f 73 68 61 70 65 72 2e  rn this._shaper.
84c0: 63 75 72 76 65 3b 0a 09 20 20 20 20 20 20 20 20  curve;..        
84d0: 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a  },..        set:
84e0: 20 66 75 6e 63 74 69 6f 6e 20 28 6d 61 70 70 69   function (mappi
84f0: 6e 67 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ng) {..         
8500: 20 20 20 74 68 69 73 2e 5f 63 75 72 76 65 20 3d     this._curve =
8510: 20 6e 65 77 20 46 6c 6f 61 74 33 32 41 72 72 61   new Float32Arra
8520: 79 28 6d 61 70 70 69 6e 67 29 3b 0a 09 20 20 20  y(mapping);..   
8530: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73           this._s
8540: 68 61 70 65 72 2e 63 75 72 76 65 20 3d 20 74 68  haper.curve = th
8550: 69 73 2e 5f 63 75 72 76 65 3b 0a 09 20 20 20 20  is._curve;..    
8560: 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09      }..    });..
8570: 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 53 70 65      /**... * Spe
8580: 63 69 66 69 65 73 20 77 68 61 74 20 74 79 70 65  cifies what type
8590: 20 6f 66 20 6f 76 65 72 73 61 6d 70 6c 69 6e 67   of oversampling
85a0: 20 28 69 66 20 61 6e 79 29 20 73 68 6f 75 6c 64   (if any) should
85b0: 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 0a 09   be used when ..
85c0: 09 20 2a 20 61 70 70 6c 79 69 6e 67 20 74 68 65  . * applying the
85d0: 20 73 68 61 70 69 6e 67 20 63 75 72 76 65 2e 20   shaping curve. 
85e0: 43 61 6e 20 65 69 74 68 65 72 20 62 65 20 22 6e  Can either be "n
85f0: 6f 6e 65 22 2c 20 22 32 78 22 20 6f 72 20 22 34  one", "2x" or "4
8600: 78 22 2e 20 0a 09 09 20 2a 20 40 6d 65 6d 62 65  x". ... * @membe
8610: 72 4f 66 20 54 6f 6e 65 2e 57 61 76 65 53 68 61  rOf Tone.WaveSha
8620: 70 65 72 23 0a 09 09 20 2a 20 40 74 79 70 65 20  per#... * @type 
8630: 7b 73 74 72 69 6e 67 7d 0a 09 09 20 2a 20 40 6e  {string}... * @n
8640: 61 6d 65 20 6f 76 65 72 73 61 6d 70 6c 65 0a 09  ame oversample..
8650: 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74  . */..    Object
8660: 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28  .defineProperty(
8670: 54 6f 6e 65 2e 57 61 76 65 53 68 61 70 65 72 2e  Tone.WaveShaper.
8680: 70 72 6f 74 6f 74 79 70 65 2c 20 27 6f 76 65 72  prototype, 'over
8690: 73 61 6d 70 6c 65 27 2c 20 7b 0a 09 20 20 20 20  sample', {..    
86a0: 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f      get: functio
86b0: 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
86c0: 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
86d0: 5f 73 68 61 70 65 72 2e 6f 76 65 72 73 61 6d 70  _shaper.oversamp
86e0: 6c 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a  le;..        },.
86f0: 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66 75  .        set: fu
8700: 6e 63 74 69 6f 6e 20 28 6f 76 65 72 73 61 6d 70  nction (oversamp
8710: 6c 69 6e 67 29 20 7b 0a 09 20 20 20 20 20 20 20  ling) {..       
8720: 20 20 20 20 20 69 66 20 28 5b 0a 09 20 20 20 20       if ([..    
8730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8740: 27 6e 6f 6e 65 27 2c 0a 09 20 20 20 20 20 20 20  'none',..       
8750: 20 20 20 20 20 20 20 20 20 20 20 20 20 27 32 78               '2x
8760: 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ',..            
8770: 20 20 20 20 20 20 20 20 27 34 78 27 0a 09 20 20          '4x'..  
8780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5d 2e                ].
8790: 69 6e 64 65 78 4f 66 28 6f 76 65 72 73 61 6d 70  indexOf(oversamp
87a0: 6c 69 6e 67 29 20 21 3d 3d 20 2d 31 29 20 7b 0a  ling) !== -1) {.
87b0: 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
87c0: 20 74 68 69 73 2e 5f 73 68 61 70 65 72 2e 6f 76   this._shaper.ov
87d0: 65 72 73 61 6d 70 6c 65 20 3d 20 6f 76 65 72 73  ersample = overs
87e0: 61 6d 70 6c 69 6e 67 3b 0a 09 20 20 20 20 20 20  ampling;..      
87f0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09        } else {..
8800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8810: 74 68 72 6f 77 20 6e 65 77 20 52 61 6e 67 65 45  throw new RangeE
8820: 72 72 6f 72 28 27 54 6f 6e 65 2e 57 61 76 65 53  rror('Tone.WaveS
8830: 68 61 70 65 72 3a 20 6f 76 65 72 73 61 6d 70 6c  haper: oversampl
8840: 69 6e 67 20 6d 75 73 74 20 62 65 20 65 69 74 68  ing must be eith
8850: 65 72 20 5c 27 6e 6f 6e 65 5c 27 2c 20 5c 27 32  er \'none\', \'2
8860: 78 5c 27 2c 20 6f 72 20 5c 27 34 78 5c 27 27 29  x\', or \'4x\'')
8870: 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8880: 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
8890: 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09   });..    /**...
88a0: 20 2a 20 20 43 6c 65 61 6e 20 75 70 2e 0a 09 09   *  Clean up....
88b0: 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f   *  @returns {To
88c0: 6e 65 2e 57 61 76 65 53 68 61 70 65 72 7d 20 74  ne.WaveShaper} t
88d0: 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  his... */..    T
88e0: 6f 6e 65 2e 57 61 76 65 53 68 61 70 65 72 2e 70  one.WaveShaper.p
88f0: 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65  rototype.dispose
8900: 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b   = function () {
8910: 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 70  ..        Tone.p
8920: 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65  rototype.dispose
8930: 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20  .call(this);..  
8940: 20 20 20 20 20 20 74 68 69 73 2e 5f 73 68 61 70        this._shap
8950: 65 72 2e 64 69 73 63 6f 6e 6e 65 63 74 28 29 3b  er.disconnect();
8960: 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
8970: 73 68 61 70 65 72 20 3d 20 6e 75 6c 6c 3b 0a 09  shaper = null;..
8980: 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 63 75          this._cu
8990: 72 76 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  rve = null;..   
89a0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
89b0: 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 72  ;..    };..    r
89c0: 65 74 75 72 6e 20 54 6f 6e 65 2e 57 61 76 65 53  eturn Tone.WaveS
89d0: 68 61 70 65 72 3b 0a 09 7d 29 3b 0a 09 4d 6f 64  haper;..});..Mod
89e0: 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f  ule(function (To
89f0: 6e 65 29 20 7b 0a 09 20 20 20 20 2f 2a 2a 0a 09  ne) {..    /**..
8a00: 09 20 2a 20 20 40 63 6c 61 73 73 20 54 6f 6e 65  . *  @class Tone
8a10: 2e 54 69 6d 65 42 61 73 65 20 69 73 20 61 20 66  .TimeBase is a f
8a20: 6c 65 78 69 62 6c 65 20 65 6e 63 6f 64 69 6e 67  lexible encoding
8a30: 20 6f 66 20 74 69 6d 65 0a 09 09 20 2a 20 20 20   of time... *   
8a40: 20 20 20 20 20 20 77 68 69 63 68 20 63 61 6e 20        which can 
8a50: 62 65 20 65 76 61 6c 75 61 74 65 64 20 74 6f 20  be evaluated to 
8a60: 61 6e 64 20 66 72 6f 6d 20 61 20 73 74 72 69 6e  and from a strin
8a70: 67 2e 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  g.... *         
8a80: 50 61 72 73 69 6e 67 20 63 6f 64 65 20 6d 6f 64  Parsing code mod
8a90: 69 66 69 65 64 20 66 72 6f 6d 20 68 74 74 70 73  ified from https
8aa0: 3a 2f 2f 63 6f 64 65 2e 67 6f 6f 67 6c 65 2e 63  ://code.google.c
8ab0: 6f 6d 2f 70 2f 74 61 70 64 69 67 69 74 2f 0a 09  om/p/tapdigit/..
8ac0: 09 20 2a 20 20 20 20 20 20 20 20 20 43 6f 70 79  . *         Copy
8ad0: 72 69 67 68 74 20 32 30 31 31 20 32 30 31 32 20  right 2011 2012 
8ae0: 41 72 69 79 61 20 48 69 64 61 79 61 74 2c 20 4e  Ariya Hidayat, N
8af0: 65 77 20 42 53 44 20 4c 69 63 65 6e 73 65 0a 09  ew BSD License..
8b00: 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b 54  . *  @extends {T
8b10: 6f 6e 65 7d 0a 09 09 20 2a 20 20 40 70 61 72 61  one}... *  @para
8b20: 6d 20 20 7b 54 69 6d 65 7d 20 20 76 61 6c 20 20  m  {Time}  val  
8b30: 20 20 54 68 65 20 74 69 6d 65 20 76 61 6c 75 65    The time value
8b40: 20 61 73 20 61 20 6e 75 6d 62 65 72 20 6f 72 20   as a number or 
8b50: 73 74 72 69 6e 67 0a 09 09 20 2a 20 20 40 70 61  string... *  @pa
8b60: 72 61 6d 20 20 7b 53 74 72 69 6e 67 3d 7d 20 20  ram  {String=}  
8b70: 75 6e 69 74 73 20 20 55 6e 69 74 20 76 61 6c 75  units  Unit valu
8b80: 65 73 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c  es... *  @exampl
8b90: 65 0a 09 09 20 2a 20 54 6f 6e 65 2e 54 69 6d 65  e... * Tone.Time
8ba0: 42 61 73 65 28 34 2c 20 22 6e 22 29 0a 09 09 20  Base(4, "n")... 
8bb0: 2a 20 54 6f 6e 65 2e 54 69 6d 65 42 61 73 65 28  * Tone.TimeBase(
8bc0: 32 2c 20 22 74 22 29 0a 09 09 20 2a 20 54 6f 6e  2, "t")... * Ton
8bd0: 65 2e 54 69 6d 65 42 61 73 65 28 22 32 74 22 29  e.TimeBase("2t")
8be0: 2e 61 64 64 28 22 31 6d 22 29 0a 09 09 20 2a 20  .add("1m")... * 
8bf0: 54 6f 6e 65 2e 54 69 6d 65 42 61 73 65 28 22 32  Tone.TimeBase("2
8c00: 74 20 2b 20 31 6d 22 29 3b 0a 09 09 20 2a 2f 0a  t + 1m");... */.
8c10: 09 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65 42 61  .    Tone.TimeBa
8c20: 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 76  se = function (v
8c30: 61 6c 2c 20 75 6e 69 74 73 29 20 7b 0a 09 20 20  al, units) {..  
8c40: 20 20 20 20 20 20 2f 2f 61 6c 6c 6f 77 73 20 69        //allows i
8c50: 74 20 74 6f 20 62 65 20 63 6f 6e 73 74 72 75 63  t to be construc
8c60: 74 65 64 20 77 69 74 68 20 6f 72 20 77 69 74 68  ted with or with
8c70: 6f 75 74 20 27 6e 65 77 27 0a 09 20 20 20 20 20  out 'new'..     
8c80: 20 20 20 69 66 20 28 74 68 69 73 20 69 6e 73 74     if (this inst
8c90: 61 6e 63 65 6f 66 20 54 6f 6e 65 2e 54 69 6d 65  anceof Tone.Time
8ca0: 42 61 73 65 29 20 7b 0a 09 20 20 20 20 20 20 20  Base) {..       
8cb0: 20 20 20 20 20 2f 2a 2a 0a 09 09 09 09 20 2a 20       /**..... * 
8cc0: 20 41 6e 79 20 65 78 70 72 65 73 73 69 6f 6e 73   Any expressions
8cd0: 20 70 61 72 73 65 64 20 66 72 6f 6d 20 74 68 65   parsed from the
8ce0: 20 54 69 6d 65 0a 09 09 09 09 20 2a 20 20 40 74   Time..... *  @t
8cf0: 79 70 65 20 20 7b 41 72 72 61 79 7d 0a 09 09 09  ype  {Array}....
8d00: 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
8d10: 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 20  .. */..         
8d20: 20 20 20 74 68 69 73 2e 5f 65 78 70 72 20 3d 20     this._expr = 
8d30: 74 68 69 73 2e 5f 6e 6f 4f 70 3b 0a 09 20 20 20  this._noOp;..   
8d40: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
8d50: 20 69 6e 73 74 61 6e 63 65 6f 66 20 54 6f 6e 65   instanceof Tone
8d60: 2e 54 69 6d 65 42 61 73 65 29 20 7b 0a 09 20 20  .TimeBase) {..  
8d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
8d80: 69 73 2e 63 6f 70 79 28 76 61 6c 29 3b 0a 09 20  is.copy(val);.. 
8d90: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
8da0: 65 20 69 66 20 28 21 74 68 69 73 2e 69 73 55 6e  e if (!this.isUn
8db0: 64 65 66 28 75 6e 69 74 73 29 20 7c 7c 20 74 68  def(units) || th
8dc0: 69 73 2e 69 73 4e 75 6d 62 65 72 28 76 61 6c 29  is.isNumber(val)
8dd0: 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
8de0: 20 20 20 20 20 2f 2f 64 65 66 61 75 6c 74 20 75       //default u
8df0: 6e 69 74 73 0a 09 20 20 20 20 20 20 20 20 20 20  nits..          
8e00: 20 20 20 20 20 20 75 6e 69 74 73 20 3d 20 74 68        units = th
8e10: 69 73 2e 64 65 66 61 75 6c 74 41 72 67 28 75 6e  is.defaultArg(un
8e20: 69 74 73 2c 20 74 68 69 73 2e 5f 64 65 66 61 75  its, this._defau
8e30: 6c 74 55 6e 69 74 73 29 3b 0a 09 20 20 20 20 20  ltUnits);..     
8e40: 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 6d             var m
8e50: 65 74 68 6f 64 20 3d 20 74 68 69 73 2e 5f 70 72  ethod = this._pr
8e60: 69 6d 61 72 79 45 78 70 72 65 73 73 69 6f 6e 73  imaryExpressions
8e70: 5b 75 6e 69 74 73 5d 2e 6d 65 74 68 6f 64 3b 0a  [units].method;.
8e80: 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8e90: 20 74 68 69 73 2e 5f 65 78 70 72 20 3d 20 6d 65   this._expr = me
8ea0: 74 68 6f 64 2e 62 69 6e 64 28 74 68 69 73 2c 20  thod.bind(this, 
8eb0: 76 61 6c 29 3b 0a 09 20 20 20 20 20 20 20 20 20  val);..         
8ec0: 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 74 68     } else if (th
8ed0: 69 73 2e 69 73 53 74 72 69 6e 67 28 76 61 6c 29  is.isString(val)
8ee0: 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
8ef0: 20 20 20 20 20 74 68 69 73 2e 73 65 74 28 76 61       this.set(va
8f00: 6c 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  l);..           
8f10: 20 7d 20 65 6c 73 65 20 69 66 20 28 74 68 69 73   } else if (this
8f20: 2e 69 73 55 6e 64 65 66 28 76 61 6c 29 29 20 7b  .isUndef(val)) {
8f30: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8f40: 20 20 2f 2f 64 65 66 61 75 6c 74 20 65 78 70 72    //default expr
8f50: 65 73 73 69 6f 6e 0a 09 20 20 20 20 20 20 20 20  ession..        
8f60: 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 65 78          this._ex
8f70: 70 72 20 3d 20 74 68 69 73 2e 5f 64 65 66 61 75  pr = this._defau
8f80: 6c 74 45 78 70 72 28 29 3b 0a 09 20 20 20 20 20  ltExpr();..     
8f90: 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
8fa0: 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20    } else {..    
8fb0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
8fc0: 65 77 20 54 6f 6e 65 2e 54 69 6d 65 42 61 73 65  ew Tone.TimeBase
8fd0: 28 76 61 6c 2c 20 75 6e 69 74 73 29 3b 0a 09 20  (val, units);.. 
8fe0: 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 3b         }..    };
8ff0: 0a 09 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e  ..    Tone.exten
9000: 64 28 54 6f 6e 65 2e 54 69 6d 65 42 61 73 65 29  d(Tone.TimeBase)
9010: 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
9020: 20 52 65 70 61 6c 63 65 20 74 68 65 20 63 75 72   Repalce the cur
9030: 72 65 6e 74 20 74 69 6d 65 20 76 61 6c 75 65 20  rent time value 
9040: 77 69 74 68 20 74 68 65 20 76 61 6c 75 65 0a 09  with the value..
9050: 09 20 2a 20 20 67 69 76 65 6e 20 62 79 20 74 68  . *  given by th
9060: 65 20 65 78 70 72 65 73 73 69 6f 6e 20 73 74 72  e expression str
9070: 69 6e 67 2e 0a 09 09 20 2a 20 20 40 70 61 72 61  ing.... *  @para
9080: 6d 20 20 7b 53 74 72 69 6e 67 7d 20 20 65 78 70  m  {String}  exp
9090: 72 53 74 72 69 6e 67 0a 09 09 20 2a 20 20 40 72  rString... *  @r
90a0: 65 74 75 72 6e 20 7b 54 6f 6e 65 2e 54 69 6d 65  eturn {Tone.Time
90b0: 42 61 73 65 7d 20 74 68 69 73 0a 09 09 20 2a 2f  Base} this... */
90c0: 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65 42  ..    Tone.TimeB
90d0: 61 73 65 2e 70 72 6f 74 6f 74 79 70 65 2e 73 65  ase.prototype.se
90e0: 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 65 78  t = function (ex
90f0: 70 72 53 74 72 69 6e 67 29 20 7b 0a 09 20 20 20  prString) {..   
9100: 20 20 20 20 20 74 68 69 73 2e 5f 65 78 70 72 20       this._expr 
9110: 3d 20 74 68 69 73 2e 5f 70 61 72 73 65 45 78 70  = this._parseExp
9120: 72 53 74 72 69 6e 67 28 65 78 70 72 53 74 72 69  rString(exprStri
9130: 6e 67 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65  ng);..        re
9140: 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20  turn this;..    
9150: 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  };..    /**... *
9160: 20 20 52 65 74 75 72 6e 20 61 20 63 6c 6f 6e 65    Return a clone
9170: 20 6f 66 20 74 68 65 20 54 69 6d 65 42 61 73 65   of the TimeBase
9180: 20 6f 62 6a 65 63 74 2e 0a 09 09 20 2a 20 20 40   object.... *  @
9190: 72 65 74 75 72 6e 20 20 7b 54 6f 6e 65 2e 54 69  return  {Tone.Ti
91a0: 6d 65 42 61 73 65 7d 20 54 68 65 20 6e 65 77 20  meBase} The new 
91b0: 63 6c 6f 6e 65 64 20 54 6f 6e 65 2e 54 69 6d 65  cloned Tone.Time
91c0: 42 61 73 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20  Base... */..    
91d0: 54 6f 6e 65 2e 54 69 6d 65 42 61 73 65 2e 70 72  Tone.TimeBase.pr
91e0: 6f 74 6f 74 79 70 65 2e 63 6c 6f 6e 65 20 3d 20  ototype.clone = 
91f0: 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
9200: 20 20 20 20 20 20 20 76 61 72 20 69 6e 73 74 61         var insta
9210: 6e 63 65 20 3d 20 6e 65 77 20 74 68 69 73 2e 63  nce = new this.c
9220: 6f 6e 73 74 72 75 63 74 6f 72 28 29 3b 0a 09 20  onstructor();.. 
9230: 20 20 20 20 20 20 20 69 6e 73 74 61 6e 63 65 2e         instance.
9240: 63 6f 70 79 28 74 68 69 73 29 3b 0a 09 20 20 20  copy(this);..   
9250: 20 20 20 20 20 72 65 74 75 72 6e 20 69 6e 73 74       return inst
9260: 61 6e 63 65 3b 0a 09 20 20 20 20 7d 3b 0a 09 20  ance;..    };.. 
9270: 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 6f 70     /**... *  Cop
9280: 69 65 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ies the value of
9290: 20 74 69 6d 65 20 74 6f 20 74 68 69 73 20 54 69   time to this Ti
92a0: 6d 65 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  me... *  @param 
92b0: 7b 54 6f 6e 65 2e 54 69 6d 65 42 61 73 65 7d 20  {Tone.TimeBase} 
92c0: 74 69 6d 65 0a 09 09 20 2a 20 20 40 72 65 74 75  time... *  @retu
92d0: 72 6e 20 20 7b 54 69 6d 65 42 61 73 65 7d 0a 09  rn  {TimeBase}..
92e0: 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54  . */..    Tone.T
92f0: 69 6d 65 42 61 73 65 2e 70 72 6f 74 6f 74 79 70  imeBase.prototyp
9300: 65 2e 63 6f 70 79 20 3d 20 66 75 6e 63 74 69 6f  e.copy = functio
9310: 6e 20 28 74 69 6d 65 29 20 7b 0a 09 20 20 20 20  n (time) {..    
9320: 20 20 20 20 76 61 72 20 76 61 6c 20 3d 20 74 69      var val = ti
9330: 6d 65 2e 5f 65 78 70 72 28 29 3b 0a 09 20 20 20  me._expr();..   
9340: 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
9350: 2e 73 65 74 28 76 61 6c 29 3b 0a 09 20 20 20 20  .set(val);..    
9360: 7d 3b 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  };..    ////////
9370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93b0: 2f 2f 2f 0a 09 20 20 20 20 2f 2f 09 41 42 53 54  ///..    //.ABST
93c0: 52 41 43 54 20 53 59 4e 54 41 58 20 54 52 45 45  RACT SYNTAX TREE
93d0: 20 50 41 52 53 45 52 0a 09 20 20 20 20 2f 2f 2f   PARSER..    ///
93e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9420: 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 2f 2a  ////////..    /*
9430: 2a 0a 09 09 20 2a 20 20 41 6c 6c 20 74 68 65 20  *... *  All the 
9440: 70 72 69 6d 61 72 79 20 65 78 70 72 65 73 73 69  primary expressi
9450: 6f 6e 73 2e 0a 09 09 20 2a 20 20 40 70 72 69 76  ons.... *  @priv
9460: 61 74 65 0a 09 09 20 2a 20 20 40 74 79 70 65 20  ate... *  @type 
9470: 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a   {Object}... */.
9480: 09 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65 42 61  .    Tone.TimeBa
9490: 73 65 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 70 72  se.prototype._pr
94a0: 69 6d 61 72 79 45 78 70 72 65 73 73 69 6f 6e 73  imaryExpressions
94b0: 20 3d 20 7b 0a 09 20 20 20 20 20 20 20 20 27 6e   = {..        'n
94c0: 27 3a 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  ': {..          
94d0: 20 20 72 65 67 65 78 70 3a 20 2f 5e 28 5c 64 2b    regexp: /^(\d+
94e0: 29 6e 2f 69 2c 0a 09 20 20 20 20 20 20 20 20 20  )n/i,..         
94f0: 20 20 20 6d 65 74 68 6f 64 3a 20 66 75 6e 63 74     method: funct
9500: 69 6f 6e 20 28 76 61 6c 75 65 29 20 7b 0a 09 20  ion (value) {.. 
9510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
9520: 61 6c 75 65 20 3d 20 70 61 72 73 65 49 6e 74 28  alue = parseInt(
9530: 76 61 6c 75 65 29 3b 0a 09 20 20 20 20 20 20 20  value);..       
9540: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
9550: 75 65 20 3d 3d 3d 20 31 29 20 7b 0a 09 20 20 20  ue === 1) {..   
9560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9570: 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 62 65   return this._be
9580: 61 74 73 54 6f 55 6e 69 74 73 28 74 68 69 73 2e  atsToUnits(this.
9590: 5f 74 69 6d 65 53 69 67 6e 61 74 75 72 65 28 29  _timeSignature()
95a0: 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
95b0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20      } else {..  
95c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95d0: 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 62    return this._b
95e0: 65 61 74 73 54 6f 55 6e 69 74 73 28 34 20 2f 20  eatsToUnits(4 / 
95f0: 76 61 6c 75 65 29 3b 0a 09 20 20 20 20 20 20 20  value);..       
9600: 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20           }..    
9610: 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
9620: 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 27     },..        '
9630: 74 27 3a 20 7b 0a 09 20 20 20 20 20 20 20 20 20  t': {..         
9640: 20 20 20 72 65 67 65 78 70 3a 20 2f 5e 28 5c 64     regexp: /^(\d
9650: 2b 29 74 2f 69 2c 0a 09 20 20 20 20 20 20 20 20  +)t/i,..        
9660: 20 20 20 20 6d 65 74 68 6f 64 3a 20 66 75 6e 63      method: func
9670: 74 69 6f 6e 20 28 76 61 6c 75 65 29 20 7b 0a 09  tion (value) {..
9680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9690: 76 61 6c 75 65 20 3d 20 70 61 72 73 65 49 6e 74  value = parseInt
96a0: 28 76 61 6c 75 65 29 3b 0a 09 20 20 20 20 20 20  (value);..      
96b0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
96c0: 20 74 68 69 73 2e 5f 62 65 61 74 73 54 6f 55 6e   this._beatsToUn
96d0: 69 74 73 28 38 20 2f 20 28 70 61 72 73 65 49 6e  its(8 / (parseIn
96e0: 74 28 76 61 6c 75 65 29 20 2a 20 33 29 29 3b 0a  t(value) * 3));.
96f0: 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09  .            }..
9700: 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20          },..    
9710: 20 20 20 20 27 6d 27 3a 20 7b 0a 09 20 20 20 20      'm': {..    
9720: 20 20 20 20 20 20 20 20 72 65 67 65 78 70 3a 20          regexp: 
9730: 2f 5e 28 5c 64 2b 29 6d 2f 69 2c 0a 09 20 20 20  /^(\d+)m/i,..   
9740: 20 20 20 20 20 20 20 20 20 6d 65 74 68 6f 64 3a           method:
9750: 20 66 75 6e 63 74 69 6f 6e 20 28 76 61 6c 75 65   function (value
9760: 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
9770: 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
9780: 2e 5f 62 65 61 74 73 54 6f 55 6e 69 74 73 28 70  ._beatsToUnits(p
9790: 61 72 73 65 49 6e 74 28 76 61 6c 75 65 29 20 2a  arseInt(value) *
97a0: 20 74 68 69 73 2e 5f 74 69 6d 65 53 69 67 6e 61   this._timeSigna
97b0: 74 75 72 65 28 29 29 3b 0a 09 20 20 20 20 20 20  ture());..      
97c0: 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
97d0: 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 27 69 27   },..        'i'
97e0: 3a 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  : {..           
97f0: 20 72 65 67 65 78 70 3a 20 2f 5e 28 5c 64 2b 29   regexp: /^(\d+)
9800: 69 2f 69 2c 0a 09 20 20 20 20 20 20 20 20 20 20  i/i,..          
9810: 20 20 6d 65 74 68 6f 64 3a 20 66 75 6e 63 74 69    method: functi
9820: 6f 6e 20 28 76 61 6c 75 65 29 20 7b 0a 09 20 20  on (value) {..  
9830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
9840: 74 75 72 6e 20 74 68 69 73 2e 5f 74 69 63 6b 73  turn this._ticks
9850: 54 6f 55 6e 69 74 73 28 70 61 72 73 65 49 6e 74  ToUnits(parseInt
9860: 28 76 61 6c 75 65 29 29 3b 0a 09 20 20 20 20 20  (value));..     
9870: 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
9880: 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 27 68    },..        'h
9890: 7a 27 3a 20 7b 0a 09 20 20 20 20 20 20 20 20 20  z': {..         
98a0: 20 20 20 72 65 67 65 78 70 3a 20 2f 5e 28 5c 64     regexp: /^(\d
98b0: 2b 28 3f 3a 5c 2e 5c 64 2b 29 3f 29 68 7a 2f 69  +(?:\.\d+)?)hz/i
98c0: 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 6d  ,..            m
98d0: 65 74 68 6f 64 3a 20 66 75 6e 63 74 69 6f 6e 20  ethod: function 
98e0: 28 76 61 6c 75 65 29 20 7b 0a 09 20 20 20 20 20  (value) {..     
98f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9900: 6e 20 74 68 69 73 2e 5f 66 72 65 71 75 65 6e 63  n this._frequenc
9910: 79 54 6f 55 6e 69 74 73 28 70 61 72 73 65 46 6c  yToUnits(parseFl
9920: 6f 61 74 28 76 61 6c 75 65 29 29 3b 0a 09 20 20  oat(value));..  
9930: 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20            }..   
9940: 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20       },..       
9950: 20 27 74 72 27 3a 20 7b 0a 09 20 20 20 20 20 20   'tr': {..      
9960: 20 20 20 20 20 20 72 65 67 65 78 70 3a 20 2f 5e        regexp: /^
9970: 28 5c 64 2b 28 3f 3a 5c 2e 5c 64 2b 29 3f 29 3a  (\d+(?:\.\d+)?):
9980: 28 5c 64 2b 28 3f 3a 5c 2e 5c 64 2b 29 3f 29 3a  (\d+(?:\.\d+)?):
9990: 3f 28 5c 64 2b 28 3f 3a 5c 2e 5c 64 2b 29 3f 29  ?(\d+(?:\.\d+)?)
99a0: 3f 2f 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  ?/,..           
99b0: 20 6d 65 74 68 6f 64 3a 20 66 75 6e 63 74 69 6f   method: functio
99c0: 6e 20 28 6d 2c 20 71 2c 20 73 29 20 7b 0a 09 20  n (m, q, s) {.. 
99d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
99e0: 61 72 20 74 6f 74 61 6c 20 3d 20 30 3b 0a 09 20  ar total = 0;.. 
99f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9a00: 66 20 28 6d 20 26 26 20 6d 20 21 3d 3d 20 27 30  f (m && m !== '0
9a10: 27 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  ') {..          
9a20: 20 20 20 20 20 20 20 20 20 20 74 6f 74 61 6c 20            total 
9a30: 2b 3d 20 74 68 69 73 2e 5f 62 65 61 74 73 54 6f  += this._beatsTo
9a40: 55 6e 69 74 73 28 74 68 69 73 2e 5f 74 69 6d 65  Units(this._time
9a50: 53 69 67 6e 61 74 75 72 65 28 29 20 2a 20 70 61  Signature() * pa
9a60: 72 73 65 46 6c 6f 61 74 28 6d 29 29 3b 0a 09 20  rseFloat(m));.. 
9a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
9a80: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9a90: 20 20 69 66 20 28 71 20 26 26 20 71 20 21 3d 3d    if (q && q !==
9aa0: 20 27 30 27 29 20 7b 0a 09 20 20 20 20 20 20 20   '0') {..       
9ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 6f 74               tot
9ac0: 61 6c 20 2b 3d 20 74 68 69 73 2e 5f 62 65 61 74  al += this._beat
9ad0: 73 54 6f 55 6e 69 74 73 28 70 61 72 73 65 46 6c  sToUnits(parseFl
9ae0: 6f 61 74 28 71 29 29 3b 0a 09 20 20 20 20 20 20  oat(q));..      
9af0: 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20            }..   
9b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
9b10: 28 73 20 26 26 20 73 20 21 3d 3d 20 27 30 27 29  (s && s !== '0')
9b20: 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9b30: 20 20 20 20 20 20 20 20 74 6f 74 61 6c 20 2b 3d          total +=
9b40: 20 74 68 69 73 2e 5f 62 65 61 74 73 54 6f 55 6e   this._beatsToUn
9b50: 69 74 73 28 70 61 72 73 65 46 6c 6f 61 74 28 73  its(parseFloat(s
9b60: 29 20 2f 20 34 29 3b 0a 09 20 20 20 20 20 20 20  ) / 4);..       
9b70: 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20           }..    
9b80: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9b90: 72 6e 20 74 6f 74 61 6c 3b 0a 09 20 20 20 20 20  rn total;..     
9ba0: 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
9bb0: 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 27 73    },..        's
9bc0: 27 3a 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  ': {..          
9bd0: 20 20 72 65 67 65 78 70 3a 20 2f 5e 28 5c 64 2b    regexp: /^(\d+
9be0: 28 3f 3a 5c 2e 5c 64 2b 29 3f 73 29 2f 2c 0a 09  (?:\.\d+)?s)/,..
9bf0: 20 20 20 20 20 20 20 20 20 20 20 20 6d 65 74 68              meth
9c00: 6f 64 3a 20 66 75 6e 63 74 69 6f 6e 20 28 76 61  od: function (va
9c10: 6c 75 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20  lue) {..        
9c20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
9c30: 68 69 73 2e 5f 73 65 63 6f 6e 64 73 54 6f 55 6e  his._secondsToUn
9c40: 69 74 73 28 70 61 72 73 65 46 6c 6f 61 74 28 76  its(parseFloat(v
9c50: 61 6c 75 65 29 29 3b 0a 09 20 20 20 20 20 20 20  alue));..       
9c60: 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
9c70: 7d 2c 0a 09 20 20 20 20 20 20 20 20 27 73 61 6d  },..        'sam
9c80: 70 6c 65 73 27 3a 20 7b 0a 09 20 20 20 20 20 20  ples': {..      
9c90: 20 20 20 20 20 20 72 65 67 65 78 70 3a 20 2f 5e        regexp: /^
9ca0: 28 5c 64 2b 29 73 61 6d 70 6c 65 73 2f 2c 0a 09  (\d+)samples/,..
9cb0: 20 20 20 20 20 20 20 20 20 20 20 20 6d 65 74 68              meth
9cc0: 6f 64 3a 20 66 75 6e 63 74 69 6f 6e 20 28 76 61  od: function (va
9cd0: 6c 75 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20  lue) {..        
9ce0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 70          return p
9cf0: 61 72 73 65 49 6e 74 28 76 61 6c 75 65 29 20 2f  arseInt(value) /
9d00: 20 74 68 69 73 2e 63 6f 6e 74 65 78 74 2e 73 61   this.context.sa
9d10: 6d 70 6c 65 52 61 74 65 3b 0a 09 20 20 20 20 20  mpleRate;..     
9d20: 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
9d30: 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 27 64    },..        'd
9d40: 65 66 61 75 6c 74 27 3a 20 7b 0a 09 20 20 20 20  efault': {..    
9d50: 20 20 20 20 20 20 20 20 72 65 67 65 78 70 3a 20          regexp: 
9d60: 2f 5e 28 5c 64 2b 28 3f 3a 5c 2e 5c 64 2b 29 3f  /^(\d+(?:\.\d+)?
9d70: 29 2f 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  )/,..           
9d80: 20 6d 65 74 68 6f 64 3a 20 66 75 6e 63 74 69 6f   method: functio
9d90: 6e 20 28 76 61 6c 75 65 29 20 7b 0a 09 20 20 20  n (value) {..   
9da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9db0: 75 72 6e 20 74 68 69 73 2e 5f 70 72 69 6d 61 72  urn this._primar
9dc0: 79 45 78 70 72 65 73 73 69 6f 6e 73 5b 74 68 69  yExpressions[thi
9dd0: 73 2e 5f 64 65 66 61 75 6c 74 55 6e 69 74 73 5d  s._defaultUnits]
9de0: 2e 6d 65 74 68 6f 64 2e 63 61 6c 6c 28 74 68 69  .method.call(thi
9df0: 73 2c 20 76 61 6c 75 65 29 3b 0a 09 20 20 20 20  s, value);..    
9e00: 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
9e10: 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a 09 20 20     }..    };..  
9e20: 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 41 6c 6c 20    /**... *  All 
9e30: 74 68 65 20 62 69 6e 61 72 79 20 65 78 70 72 65  the binary expre
9e40: 73 73 69 6f 6e 73 20 74 68 61 74 20 54 69 6d 65  ssions that Time
9e50: 42 61 73 65 20 63 61 6e 20 61 63 63 65 70 74 2e  Base can accept.
9e60: 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
9e70: 09 09 20 2a 20 20 40 74 79 70 65 20 20 7b 4f 62  .. *  @type  {Ob
9e80: 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a 09 20 20 20  ject}... */..   
9e90: 20 54 6f 6e 65 2e 54 69 6d 65 42 61 73 65 2e 70   Tone.TimeBase.p
9ea0: 72 6f 74 6f 74 79 70 65 2e 5f 62 69 6e 61 72 79  rototype._binary
9eb0: 45 78 70 72 65 73 73 69 6f 6e 73 20 3d 20 7b 0a  Expressions = {.
9ec0: 09 20 20 20 20 20 20 20 20 27 2b 27 3a 20 7b 0a  .        '+': {.
9ed0: 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 67  .            reg
9ee0: 65 78 70 3a 20 2f 5e 5c 2b 2f 2c 0a 09 20 20 20  exp: /^\+/,..   
9ef0: 20 20 20 20 20 20 20 20 20 70 72 65 63 65 64 65           precede
9f00: 6e 63 65 3a 20 32 2c 0a 09 20 20 20 20 20 20 20  nce: 2,..       
9f10: 20 20 20 20 20 6d 65 74 68 6f 64 3a 20 66 75 6e       method: fun
9f20: 63 74 69 6f 6e 20 28 6c 68 2c 20 72 68 29 20 7b  ction (lh, rh) {
9f30: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9f40: 20 20 72 65 74 75 72 6e 20 6c 68 28 29 20 2b 20    return lh() + 
9f50: 72 68 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20  rh();..         
9f60: 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 2c     }..        },
9f70: 0a 09 20 20 20 20 20 20 20 20 27 2d 27 3a 20 7b  ..        '-': {
9f80: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
9f90: 67 65 78 70 3a 20 2f 5e 5c 2d 2f 2c 0a 09 20 20  gexp: /^\-/,..  
9fa0: 20 20 20 20 20 20 20 20 20 20 70 72 65 63 65 64            preced
9fb0: 65 6e 63 65 3a 20 32 2c 0a 09 20 20 20 20 20 20  ence: 2,..      
9fc0: 20 20 20 20 20 20 6d 65 74 68 6f 64 3a 20 66 75        method: fu
9fd0: 6e 63 74 69 6f 6e 20 28 6c 68 2c 20 72 68 29 20  nction (lh, rh) 
9fe0: 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9ff0: 20 20 20 72 65 74 75 72 6e 20 6c 68 28 29 20 2d     return lh() -
a000: 20 72 68 28 29 3b 0a 09 20 20 20 20 20 20 20 20   rh();..        
a010: 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d      }..        }
a020: 2c 0a 09 20 20 20 20 20 20 20 20 27 2a 27 3a 20  ,..        '*': 
a030: 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
a040: 65 67 65 78 70 3a 20 2f 5e 5c 2a 2f 2c 0a 09 20  egexp: /^\*/,.. 
a050: 20 20 20 20 20 20 20 20 20 20 20 70 72 65 63 65             prece
a060: 64 65 6e 63 65 3a 20 31 2c 0a 09 20 20 20 20 20  dence: 1,..     
a070: 20 20 20 20 20 20 20 6d 65 74 68 6f 64 3a 20 66         method: f
a080: 75 6e 63 74 69 6f 6e 20 28 6c 68 2c 20 72 68 29  unction (lh, rh)
a090: 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a0a0: 20 20 20 20 72 65 74 75 72 6e 20 6c 68 28 29 20      return lh() 
a0b0: 2a 20 72 68 28 29 3b 0a 09 20 20 20 20 20 20 20  * rh();..       
a0c0: 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
a0d0: 7d 2c 0a 09 20 20 20 20 20 20 20 20 27 2f 27 3a  },..        '/':
a0e0: 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a0f0: 72 65 67 65 78 70 3a 20 2f 5e 5c 2f 2f 2c 0a 09  regexp: /^\//,..
a100: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65 63              prec
a110: 65 64 65 6e 63 65 3a 20 31 2c 0a 09 20 20 20 20  edence: 1,..    
a120: 20 20 20 20 20 20 20 20 6d 65 74 68 6f 64 3a 20          method: 
a130: 66 75 6e 63 74 69 6f 6e 20 28 6c 68 2c 20 72 68  function (lh, rh
a140: 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
a150: 20 20 20 20 20 72 65 74 75 72 6e 20 6c 68 28 29       return lh()
a160: 20 2f 20 72 68 28 29 3b 0a 09 20 20 20 20 20 20   / rh();..      
a170: 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
a180: 20 7d 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20   }..    };..    
a190: 2f 2a 2a 0a 09 09 20 2a 20 20 41 6c 6c 20 74 68  /**... *  All th
a1a0: 65 20 75 6e 61 72 79 20 65 78 70 72 65 73 73 69  e unary expressi
a1b0: 6f 6e 73 2e 0a 09 09 20 2a 20 20 40 70 72 69 76  ons.... *  @priv
a1c0: 61 74 65 0a 09 09 20 2a 20 20 40 74 79 70 65 20  ate... *  @type 
a1d0: 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a   {Object}... */.
a1e0: 09 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65 42 61  .    Tone.TimeBa
a1f0: 73 65 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 75 6e  se.prototype._un
a200: 61 72 79 45 78 70 72 65 73 73 69 6f 6e 73 20 3d  aryExpressions =
a210: 20 7b 0a 09 20 20 20 20 20 20 20 20 27 6e 65 67   {..        'neg
a220: 27 3a 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  ': {..          
a230: 20 20 72 65 67 65 78 70 3a 20 2f 5e 5c 2d 2f 2c    regexp: /^\-/,
a240: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 6d 65  ..            me
a250: 74 68 6f 64 3a 20 66 75 6e 63 74 69 6f 6e 20 28  thod: function (
a260: 6c 68 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  lh) {..         
a270: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 6c         return -l
a280: 68 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20  h();..          
a290: 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 0a 09    }..        }..
a2a0: 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
a2b0: 09 09 20 2a 20 20 53 79 6e 74 61 63 74 69 63 20  .. *  Syntactic 
a2c0: 67 6c 75 65 20 77 68 69 63 68 20 68 6f 6c 64 73  glue which holds
a2d0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 67   expressions tog
a2e0: 65 74 68 65 72 0a 09 09 20 2a 20 20 40 70 72 69  ether... *  @pri
a2f0: 76 61 74 65 0a 09 09 20 2a 20 20 40 74 79 70 65  vate... *  @type
a300: 20 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 2f    {Object}... */
a310: 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65 42  ..    Tone.TimeB
a320: 61 73 65 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 73  ase.prototype._s
a330: 79 6e 74 61 78 47 6c 75 65 20 3d 20 7b 0a 09 20  yntaxGlue = {.. 
a340: 20 20 20 20 20 20 20 27 28 27 3a 20 7b 20 72 65         '(': { re
a350: 67 65 78 70 3a 20 2f 5e 5c 28 2f 20 7d 2c 0a 09  gexp: /^\(/ },..
a360: 20 20 20 20 20 20 20 20 27 29 27 3a 20 7b 20 72          ')': { r
a370: 65 67 65 78 70 3a 20 2f 5e 5c 29 2f 20 7d 0a 09  egexp: /^\)/ }..
a380: 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
a390: 09 09 20 2a 20 20 74 6f 6b 65 6e 69 7a 65 20 74  .. *  tokenize t
a3a0: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 62 61  he expression ba
a3b0: 73 65 64 20 6f 6e 20 74 68 65 20 45 78 70 72 65  sed on the Expre
a3c0: 73 73 69 6f 6e 73 20 6f 62 6a 65 63 74 0a 09 09  ssions object...
a3d0: 20 2a 20 20 40 70 61 72 61 6d 20 20 20 7b 73 74   *  @param   {st
a3e0: 72 69 6e 67 7d 20 65 78 70 72 20 0a 09 09 20 2a  ring} expr ... *
a3f0: 20 20 40 72 65 74 75 72 6e 20 20 7b 4f 62 6a 65    @return  {Obje
a400: 63 74 7d 20 20 20 20 20 20 72 65 74 75 72 6e 73  ct}      returns
a410: 20 74 77 6f 20 6d 65 74 68 6f 64 73 20 6f 6e 20   two methods on 
a420: 74 68 65 20 74 6f 6b 65 6e 69 7a 65 64 20 6c 69  the tokenized li
a430: 73 74 2c 20 6e 65 78 74 20 61 6e 64 20 70 65 65  st, next and pee
a440: 6b 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  k... *  @private
a450: 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
a460: 2e 54 69 6d 65 42 61 73 65 2e 70 72 6f 74 6f 74  .TimeBase.protot
a470: 79 70 65 2e 5f 74 6f 6b 65 6e 69 7a 65 20 3d 20  ype._tokenize = 
a480: 66 75 6e 63 74 69 6f 6e 20 28 65 78 70 72 29 20  function (expr) 
a490: 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 70  {..        var p
a4a0: 6f 73 69 74 69 6f 6e 20 3d 20 2d 31 3b 0a 09 20  osition = -1;.. 
a4b0: 20 20 20 20 20 20 20 76 61 72 20 74 6f 6b 65 6e         var token
a4c0: 73 20 3d 20 5b 5d 3b 0a 09 20 20 20 20 20 20 20  s = [];..       
a4d0: 20 77 68 69 6c 65 20 28 65 78 70 72 2e 6c 65 6e   while (expr.len
a4e0: 67 74 68 20 3e 20 30 29 20 7b 0a 09 20 20 20 20  gth > 0) {..    
a4f0: 20 20 20 20 20 20 20 20 65 78 70 72 20 3d 20 65          expr = e
a500: 78 70 72 2e 74 72 69 6d 28 29 3b 0a 09 20 20 20  xpr.trim();..   
a510: 20 20 20 20 20 20 20 20 20 76 61 72 20 74 6f 6b           var tok
a520: 65 6e 20 3d 20 67 65 74 4e 65 78 74 54 6f 6b 65  en = getNextToke
a530: 6e 28 65 78 70 72 2c 20 74 68 69 73 29 3b 0a 09  n(expr, this);..
a540: 20 20 20 20 20 20 20 20 20 20 20 20 74 6f 6b 65              toke
a550: 6e 73 2e 70 75 73 68 28 74 6f 6b 65 6e 29 3b 0a  ns.push(token);.
a560: 09 20 20 20 20 20 20 20 20 20 20 20 20 65 78 70  .            exp
a570: 72 20 3d 20 65 78 70 72 2e 73 75 62 73 74 72 28  r = expr.substr(
a580: 74 6f 6b 65 6e 2e 76 61 6c 75 65 2e 6c 65 6e 67  token.value.leng
a590: 74 68 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a  th);..        }.
a5a0: 09 20 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f  .        functio
a5b0: 6e 20 67 65 74 4e 65 78 74 54 6f 6b 65 6e 28 65  n getNextToken(e
a5c0: 78 70 72 2c 20 63 6f 6e 74 65 78 74 29 20 7b 0a  xpr, context) {.
a5d0: 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72  .            var
a5e0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 3d 20 5b   expressions = [
a5f0: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a600: 20 20 27 5f 62 69 6e 61 72 79 45 78 70 72 65 73    '_binaryExpres
a610: 73 69 6f 6e 73 27 2c 0a 09 20 20 20 20 20 20 20  sions',..       
a620: 20 20 20 20 20 20 20 20 20 27 5f 75 6e 61 72 79           '_unary
a630: 45 78 70 72 65 73 73 69 6f 6e 73 27 2c 0a 09 20  Expressions',.. 
a640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27                 '
a650: 5f 70 72 69 6d 61 72 79 45 78 70 72 65 73 73 69  _primaryExpressi
a660: 6f 6e 73 27 2c 0a 09 20 20 20 20 20 20 20 20 20  ons',..         
a670: 20 20 20 20 20 20 20 27 5f 73 79 6e 74 61 78 47         '_syntaxG
a680: 6c 75 65 27 0a 09 20 20 20 20 20 20 20 20 20 20  lue'..          
a690: 20 20 5d 3b 0a 09 20 20 20 20 20 20 20 20 20 20    ];..          
a6a0: 20 20 66 6f 72 20 28 76 61 72 20 69 20 3d 20 30    for (var i = 0
a6b0: 3b 20 69 20 3c 20 65 78 70 72 65 73 73 69 6f 6e  ; i < expression
a6c0: 73 2e 6c 65 6e 67 74 68 3b 20 69 2b 2b 29 20 7b  s.length; i++) {
a6d0: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a6e0: 20 20 76 61 72 20 67 72 6f 75 70 20 3d 20 63 6f    var group = co
a6f0: 6e 74 65 78 74 5b 65 78 70 72 65 73 73 69 6f 6e  ntext[expression
a700: 73 5b 69 5d 5d 3b 0a 09 20 20 20 20 20 20 20 20  s[i]];..        
a710: 20 20 20 20 20 20 20 20 66 6f 72 20 28 76 61 72          for (var
a720: 20 6f 70 4e 61 6d 65 20 69 6e 20 67 72 6f 75 70   opName in group
a730: 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
a740: 20 20 20 20 20 20 20 20 20 76 61 72 20 6f 70 20           var op 
a750: 3d 20 67 72 6f 75 70 5b 6f 70 4e 61 6d 65 5d 3b  = group[opName];
a760: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a770: 20 20 20 20 20 20 76 61 72 20 72 65 67 20 3d 20        var reg = 
a780: 6f 70 2e 72 65 67 65 78 70 3b 0a 09 20 20 20 20  op.regexp;..    
a790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a7a0: 76 61 72 20 6d 61 74 63 68 20 3d 20 65 78 70 72  var match = expr
a7b0: 2e 6d 61 74 63 68 28 72 65 67 29 3b 0a 09 20 20  .match(reg);..  
a7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a7d0: 20 20 69 66 20 28 6d 61 74 63 68 20 21 3d 3d 20    if (match !== 
a7e0: 6e 75 6c 6c 29 20 7b 0a 09 20 20 20 20 20 20 20  null) {..       
a7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a800: 20 72 65 74 75 72 6e 20 7b 0a 09 20 20 20 20 20   return {..     
a810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a820: 20 20 20 20 20 20 20 6d 65 74 68 6f 64 3a 20 6f         method: o
a830: 70 2e 6d 65 74 68 6f 64 2c 0a 09 20 20 20 20 20  p.method,..     
a840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a850: 20 20 20 20 20 20 20 70 72 65 63 65 64 65 6e 63         precedenc
a860: 65 3a 20 6f 70 2e 70 72 65 63 65 64 65 6e 63 65  e: op.precedence
a870: 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
a890: 65 67 65 78 70 3a 20 6f 70 2e 72 65 67 65 78 70  egexp: op.regexp
a8a0: 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
a8c0: 61 6c 75 65 3a 20 6d 61 74 63 68 5b 30 5d 0a 09  alue: match[0]..
a8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a8e0: 20 20 20 20 20 20 20 20 7d 3b 0a 09 20 20 20 20          };..    
a8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a900: 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
a910: 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20     }..          
a920: 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20    }..           
a930: 20 74 68 72 6f 77 20 6e 65 77 20 53 79 6e 74 61   throw new Synta
a940: 78 45 72 72 6f 72 28 27 54 6f 6e 65 2e 54 69 6d  xError('Tone.Tim
a950: 65 42 61 73 65 3a 20 55 6e 65 78 70 65 63 74 65  eBase: Unexpecte
a960: 64 20 74 6f 6b 65 6e 20 27 20 2b 20 65 78 70 72  d token ' + expr
a970: 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  );..        }.. 
a980: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 7b 0a         return {.
a990: 09 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 78  .            nex
a9a0: 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b  t: function () {
a9b0: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a9c0: 20 20 72 65 74 75 72 6e 20 74 6f 6b 65 6e 73 5b    return tokens[
a9d0: 2b 2b 70 6f 73 69 74 69 6f 6e 5d 3b 0a 09 20 20  ++position];..  
a9e0: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20            },..  
a9f0: 20 20 20 20 20 20 20 20 20 20 70 65 65 6b 3a 20            peek: 
aa00: 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
aa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
aa20: 65 74 75 72 6e 20 74 6f 6b 65 6e 73 5b 70 6f 73  eturn tokens[pos
aa30: 69 74 69 6f 6e 20 2b 20 31 5d 3b 0a 09 20 20 20  ition + 1];..   
aa40: 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20           }..    
aa50: 20 20 20 20 7d 3b 0a 09 20 20 20 20 7d 3b 0a 09      };..    };..
aa60: 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 47 69      /**... *  Gi
aa70: 76 65 6e 20 61 20 74 6f 6b 65 6e 2c 20 66 69 6e  ven a token, fin
aa80: 64 20 74 68 65 20 76 61 6c 75 65 20 77 69 74 68  d the value with
aa90: 69 6e 20 74 68 65 20 67 72 6f 75 70 4e 61 6d 65  in the groupName
aaa0: 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 4f  ... *  @param {O
aab0: 62 6a 65 63 74 7d 20 74 6f 6b 65 6e 0a 09 09 20  bject} token... 
aac0: 2a 20 20 40 70 61 72 61 6d 20 7b 53 74 72 69 6e  *  @param {Strin
aad0: 67 7d 20 67 72 6f 75 70 4e 61 6d 65 0a 09 09 20  g} groupName... 
aae0: 2a 20 20 40 70 61 72 61 6d 20 7b 4e 75 6d 62 65  *  @param {Numbe
aaf0: 72 7d 20 70 72 65 63 65 64 65 6e 63 65 0a 09 09  r} precedence...
ab00: 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 20   *  @private... 
ab10: 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69 6d  */..    Tone.Tim
ab20: 65 42 61 73 65 2e 70 72 6f 74 6f 74 79 70 65 2e  eBase.prototype.
ab30: 5f 6d 61 74 63 68 47 72 6f 75 70 20 3d 20 66 75  _matchGroup = fu
ab40: 6e 63 74 69 6f 6e 20 28 74 6f 6b 65 6e 2c 20 67  nction (token, g
ab50: 72 6f 75 70 2c 20 70 72 65 63 29 20 7b 0a 09 20  roup, prec) {.. 
ab60: 20 20 20 20 20 20 20 76 61 72 20 72 65 74 20 3d         var ret =
ab70: 20 66 61 6c 73 65 3b 0a 09 20 20 20 20 20 20 20   false;..       
ab80: 20 69 66 20 28 21 74 68 69 73 2e 69 73 55 6e 64   if (!this.isUnd
ab90: 65 66 28 74 6f 6b 65 6e 29 29 20 7b 0a 09 20 20  ef(token)) {..  
aba0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 76            for (v
abb0: 61 72 20 6f 70 4e 61 6d 65 20 69 6e 20 67 72 6f  ar opName in gro
abc0: 75 70 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  up) {..         
abd0: 20 20 20 20 20 20 20 76 61 72 20 6f 70 20 3d 20         var op = 
abe0: 67 72 6f 75 70 5b 6f 70 4e 61 6d 65 5d 3b 0a 09  group[opName];..
abf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac00: 69 66 20 28 6f 70 2e 72 65 67 65 78 70 2e 74 65  if (op.regexp.te
ac10: 73 74 28 74 6f 6b 65 6e 2e 76 61 6c 75 65 29 29  st(token.value))
ac20: 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ac30: 20 20 20 20 20 20 20 20 69 66 20 28 21 74 68 69          if (!thi
ac40: 73 2e 69 73 55 6e 64 65 66 28 70 72 65 63 29 29  s.isUndef(prec))
ac50: 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ac60: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
ac70: 6f 70 2e 70 72 65 63 65 64 65 6e 63 65 20 3d 3d  op.precedence ==
ac80: 3d 20 70 72 65 63 29 20 7b 0a 09 20 20 20 20 20  = prec) {..     
ac90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aca0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6f 70         return op
acb0: 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
acc0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20             }..  
acd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ace0: 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20    } else {..    
acf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad00: 20 20 20 20 72 65 74 75 72 6e 20 6f 70 3b 0a 09      return op;..
ad10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad20: 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20      }..         
ad30: 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
ad40: 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
ad50: 20 7d 0a 09 20 20 20 20 20 20 20 20 72 65 74 75   }..        retu
ad60: 72 6e 20 72 65 74 3b 0a 09 20 20 20 20 7d 3b 0a  rn ret;..    };.
ad70: 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 4d  .    /**... *  M
ad80: 61 74 63 68 20 61 20 62 69 6e 61 72 79 20 65 78  atch a binary ex
ad90: 70 72 65 73 73 69 6f 6e 20 67 69 76 65 6e 20 74  pression given t
ada0: 68 65 20 74 6f 6b 65 6e 20 61 6e 64 20 74 68 65  he token and the
adb0: 20 70 72 65 63 65 64 65 6e 63 65 0a 09 09 20 2a   precedence... *
adc0: 20 20 40 70 61 72 61 6d 20 7b 4c 65 78 65 72 7d    @param {Lexer}
add0: 20 6c 65 78 65 72 0a 09 09 20 2a 20 20 40 70 61   lexer... *  @pa
ade0: 72 61 6d 20 7b 4e 75 6d 62 65 72 7d 20 70 72 65  ram {Number} pre
adf0: 63 65 64 65 6e 63 65 0a 09 09 20 2a 20 20 40 70  cedence... *  @p
ae00: 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20  rivate... */..  
ae10: 20 20 54 6f 6e 65 2e 54 69 6d 65 42 61 73 65 2e    Tone.TimeBase.
ae20: 70 72 6f 74 6f 74 79 70 65 2e 5f 70 61 72 73 65  prototype._parse
ae30: 42 69 6e 61 72 79 20 3d 20 66 75 6e 63 74 69 6f  Binary = functio
ae40: 6e 20 28 6c 65 78 65 72 2c 20 70 72 65 63 65 64  n (lexer, preced
ae50: 65 6e 63 65 29 20 7b 0a 09 20 20 20 20 20 20 20  ence) {..       
ae60: 20 69 66 20 28 74 68 69 73 2e 69 73 55 6e 64 65   if (this.isUnde
ae70: 66 28 70 72 65 63 65 64 65 6e 63 65 29 29 20 7b  f(precedence)) {
ae80: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
ae90: 65 63 65 64 65 6e 63 65 20 3d 20 32 3b 0a 09 20  ecedence = 2;.. 
aea0: 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
aeb0: 20 20 76 61 72 20 65 78 70 72 3b 0a 09 20 20 20    var expr;..   
aec0: 20 20 20 20 20 69 66 20 28 70 72 65 63 65 64 65       if (precede
aed0: 6e 63 65 20 3c 20 30 29 20 7b 0a 09 20 20 20 20  nce < 0) {..    
aee0: 20 20 20 20 20 20 20 20 65 78 70 72 20 3d 20 74          expr = t
aef0: 68 69 73 2e 5f 70 61 72 73 65 55 6e 61 72 79 28  his._parseUnary(
af00: 6c 65 78 65 72 29 3b 0a 09 20 20 20 20 20 20 20  lexer);..       
af10: 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20   } else {..     
af20: 20 20 20 20 20 20 20 65 78 70 72 20 3d 20 74 68         expr = th
af30: 69 73 2e 5f 70 61 72 73 65 42 69 6e 61 72 79 28  is._parseBinary(
af40: 6c 65 78 65 72 2c 20 70 72 65 63 65 64 65 6e 63  lexer, precedenc
af50: 65 20 2d 20 31 29 3b 0a 09 20 20 20 20 20 20 20  e - 1);..       
af60: 20 7d 0a 09 20 20 20 20 20 20 20 20 76 61 72 20   }..        var 
af70: 74 6f 6b 65 6e 20 3d 20 6c 65 78 65 72 2e 70 65  token = lexer.pe
af80: 65 6b 28 29 3b 0a 09 20 20 20 20 20 20 20 20 77  ek();..        w
af90: 68 69 6c 65 20 28 74 6f 6b 65 6e 20 26 26 20 74  hile (token && t
afa0: 68 69 73 2e 5f 6d 61 74 63 68 47 72 6f 75 70 28  his._matchGroup(
afb0: 74 6f 6b 65 6e 2c 20 74 68 69 73 2e 5f 62 69 6e  token, this._bin
afc0: 61 72 79 45 78 70 72 65 73 73 69 6f 6e 73 2c 20  aryExpressions, 
afd0: 70 72 65 63 65 64 65 6e 63 65 29 29 20 7b 0a 09  precedence)) {..
afe0: 20 20 20 20 20 20 20 20 20 20 20 20 74 6f 6b 65              toke
aff0: 6e 20 3d 20 6c 65 78 65 72 2e 6e 65 78 74 28 29  n = lexer.next()
b000: 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 65  ;..            e
b010: 78 70 72 20 3d 20 74 6f 6b 65 6e 2e 6d 65 74 68  xpr = token.meth
b020: 6f 64 2e 62 69 6e 64 28 74 68 69 73 2c 20 65 78  od.bind(this, ex
b030: 70 72 2c 20 74 68 69 73 2e 5f 70 61 72 73 65 42  pr, this._parseB
b040: 69 6e 61 72 79 28 6c 65 78 65 72 2c 20 70 72 65  inary(lexer, pre
b050: 63 65 64 65 6e 63 65 20 2d 20 31 29 29 3b 0a 09  cedence - 1));..
b060: 20 20 20 20 20 20 20 20 20 20 20 20 74 6f 6b 65              toke
b070: 6e 20 3d 20 6c 65 78 65 72 2e 70 65 65 6b 28 29  n = lexer.peek()
b080: 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20  ;..        }..  
b090: 20 20 20 20 20 20 72 65 74 75 72 6e 20 65 78 70        return exp
b0a0: 72 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  r;..    };..    
b0b0: 2f 2a 2a 0a 09 09 20 2a 20 20 4d 61 74 63 68 20  /**... *  Match 
b0c0: 61 20 75 6e 61 72 79 20 65 78 70 72 65 73 73 69  a unary expressi
b0d0: 6f 6e 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  on.... *  @param
b0e0: 20 7b 4c 65 78 65 72 7d 20 6c 65 78 65 72 0a 09   {Lexer} lexer..
b0f0: 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
b100: 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69   */..    Tone.Ti
b110: 6d 65 42 61 73 65 2e 70 72 6f 74 6f 74 79 70 65  meBase.prototype
b120: 2e 5f 70 61 72 73 65 55 6e 61 72 79 20 3d 20 66  ._parseUnary = f
b130: 75 6e 63 74 69 6f 6e 20 28 6c 65 78 65 72 29 20  unction (lexer) 
b140: 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 74  {..        var t
b150: 6f 6b 65 6e 2c 20 65 78 70 72 3b 0a 09 20 20 20  oken, expr;..   
b160: 20 20 20 20 20 74 6f 6b 65 6e 20 3d 20 6c 65 78       token = lex
b170: 65 72 2e 70 65 65 6b 28 29 3b 0a 09 20 20 20 20  er.peek();..    
b180: 20 20 20 20 76 61 72 20 6f 70 20 3d 20 74 68 69      var op = thi
b190: 73 2e 5f 6d 61 74 63 68 47 72 6f 75 70 28 74 6f  s._matchGroup(to
b1a0: 6b 65 6e 2c 20 74 68 69 73 2e 5f 75 6e 61 72 79  ken, this._unary
b1b0: 45 78 70 72 65 73 73 69 6f 6e 73 29 3b 0a 09 20  Expressions);.. 
b1c0: 20 20 20 20 20 20 20 69 66 20 28 6f 70 29 20 7b         if (op) {
b1d0: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 6f  ..            to
b1e0: 6b 65 6e 20 3d 20 6c 65 78 65 72 2e 6e 65 78 74  ken = lexer.next
b1f0: 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ();..           
b200: 20 65 78 70 72 20 3d 20 74 68 69 73 2e 5f 70 61   expr = this._pa
b210: 72 73 65 55 6e 61 72 79 28 6c 65 78 65 72 29 3b  rseUnary(lexer);
b220: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
b230: 74 75 72 6e 20 6f 70 2e 6d 65 74 68 6f 64 2e 62  turn op.method.b
b240: 69 6e 64 28 74 68 69 73 2c 20 65 78 70 72 29 3b  ind(this, expr);
b250: 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
b260: 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
b270: 2e 5f 70 61 72 73 65 50 72 69 6d 61 72 79 28 6c  ._parsePrimary(l
b280: 65 78 65 72 29 3b 0a 09 20 20 20 20 7d 3b 0a 09  exer);..    };..
b290: 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 4d 61      /**... *  Ma
b2a0: 74 63 68 20 61 20 70 72 69 6d 61 72 79 20 65 78  tch a primary ex
b2b0: 70 72 65 73 73 69 6f 6e 20 28 61 20 76 61 6c 75  pression (a valu
b2c0: 65 29 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  e).... *  @param
b2d0: 20 7b 4c 65 78 65 72 7d 20 6c 65 78 65 72 0a 09   {Lexer} lexer..
b2e0: 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
b2f0: 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69   */..    Tone.Ti
b300: 6d 65 42 61 73 65 2e 70 72 6f 74 6f 74 79 70 65  meBase.prototype
b310: 2e 5f 70 61 72 73 65 50 72 69 6d 61 72 79 20 3d  ._parsePrimary =
b320: 20 66 75 6e 63 74 69 6f 6e 20 28 6c 65 78 65 72   function (lexer
b330: 29 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72  ) {..        var
b340: 20 74 6f 6b 65 6e 2c 20 65 78 70 72 3b 0a 09 20   token, expr;.. 
b350: 20 20 20 20 20 20 20 74 6f 6b 65 6e 20 3d 20 6c         token = l
b360: 65 78 65 72 2e 70 65 65 6b 28 29 3b 0a 09 20 20  exer.peek();..  
b370: 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 69        if (this.i
b380: 73 55 6e 64 65 66 28 74 6f 6b 65 6e 29 29 20 7b  sUndef(token)) {
b390: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
b3a0: 72 6f 77 20 6e 65 77 20 53 79 6e 74 61 78 45 72  row new SyntaxEr
b3b0: 72 6f 72 28 27 54 6f 6e 65 2e 54 69 6d 65 42 61  ror('Tone.TimeBa
b3c0: 73 65 3a 20 55 6e 65 78 70 65 63 74 65 64 20 65  se: Unexpected e
b3d0: 6e 64 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  nd of expression
b3e0: 27 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  ');..        }..
b3f0: 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73          if (this
b400: 2e 5f 6d 61 74 63 68 47 72 6f 75 70 28 74 6f 6b  ._matchGroup(tok
b410: 65 6e 2c 20 74 68 69 73 2e 5f 70 72 69 6d 61 72  en, this._primar
b420: 79 45 78 70 72 65 73 73 69 6f 6e 73 29 29 20 7b  yExpressions)) {
b430: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 6f  ..            to
b440: 6b 65 6e 20 3d 20 6c 65 78 65 72 2e 6e 65 78 74  ken = lexer.next
b450: 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ();..           
b460: 20 76 61 72 20 6d 61 74 63 68 69 6e 67 20 3d 20   var matching = 
b470: 74 6f 6b 65 6e 2e 76 61 6c 75 65 2e 6d 61 74 63  token.value.matc
b480: 68 28 74 6f 6b 65 6e 2e 72 65 67 65 78 70 29 3b  h(token.regexp);
b490: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
b4a0: 74 75 72 6e 20 74 6f 6b 65 6e 2e 6d 65 74 68 6f  turn token.metho
b4b0: 64 2e 62 69 6e 64 28 74 68 69 73 2c 20 6d 61 74  d.bind(this, mat
b4c0: 63 68 69 6e 67 5b 31 5d 2c 20 6d 61 74 63 68 69  ching[1], matchi
b4d0: 6e 67 5b 32 5d 2c 20 6d 61 74 63 68 69 6e 67 5b  ng[2], matching[
b4e0: 33 5d 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a  3]);..        }.
b4f0: 09 20 20 20 20 20 20 20 20 69 66 20 28 74 6f 6b  .        if (tok
b500: 65 6e 20 26 26 20 74 6f 6b 65 6e 2e 76 61 6c 75  en && token.valu
b510: 65 20 3d 3d 3d 20 27 28 27 29 20 7b 0a 09 20 20  e === '(') {..  
b520: 20 20 20 20 20 20 20 20 20 20 6c 65 78 65 72 2e            lexer.
b530: 6e 65 78 74 28 29 3b 0a 09 20 20 20 20 20 20 20  next();..       
b540: 20 20 20 20 20 65 78 70 72 20 3d 20 74 68 69 73       expr = this
b550: 2e 5f 70 61 72 73 65 42 69 6e 61 72 79 28 6c 65  ._parseBinary(le
b560: 78 65 72 29 3b 0a 09 20 20 20 20 20 20 20 20 20  xer);..         
b570: 20 20 20 74 6f 6b 65 6e 20 3d 20 6c 65 78 65 72     token = lexer
b580: 2e 6e 65 78 74 28 29 3b 0a 09 20 20 20 20 20 20  .next();..      
b590: 20 20 20 20 20 20 69 66 20 28 21 28 74 6f 6b 65        if (!(toke
b5a0: 6e 20 26 26 20 74 6f 6b 65 6e 2e 76 61 6c 75 65  n && token.value
b5b0: 20 3d 3d 3d 20 27 29 27 29 29 20 7b 0a 09 20 20   === ')')) {..  
b5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
b5d0: 72 6f 77 20 6e 65 77 20 53 79 6e 74 61 78 45 72  row new SyntaxEr
b5e0: 72 6f 72 28 27 45 78 70 65 63 74 65 64 20 29 27  ror('Expected )'
b5f0: 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b600: 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72  }..            r
b610: 65 74 75 72 6e 20 65 78 70 72 3b 0a 09 20 20 20  eturn expr;..   
b620: 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
b630: 74 68 72 6f 77 20 6e 65 77 20 53 79 6e 74 61 78  throw new Syntax
b640: 45 72 72 6f 72 28 27 54 6f 6e 65 2e 54 69 6d 65  Error('Tone.Time
b650: 42 61 73 65 3a 20 43 61 6e 6e 6f 74 20 70 72 6f  Base: Cannot pro
b660: 63 65 73 73 20 74 6f 6b 65 6e 20 27 20 2b 20 74  cess token ' + t
b670: 6f 6b 65 6e 2e 76 61 6c 75 65 29 3b 0a 09 20 20  oken.value);..  
b680: 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    };..    /**...
b690: 20 2a 20 20 52 65 63 75 72 73 69 76 65 6c 79 20   *  Recursively 
b6a0: 70 61 72 73 65 20 74 68 65 20 73 74 72 69 6e 67  parse the string
b6b0: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 74 6f   expression into
b6c0: 20 61 20 73 79 6e 74 61 78 20 74 72 65 65 2e 0a   a syntax tree..
b6d0: 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 20 7b  .. *  @param   {
b6e0: 73 74 72 69 6e 67 7d 20 65 78 70 72 20 0a 09 09  string} expr ...
b6f0: 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 46 75   *  @return  {Fu
b700: 6e 63 74 69 6f 6e 7d 20 74 68 65 20 62 6f 75 6e  nction} the boun
b710: 64 20 6d 65 74 68 6f 64 20 74 6f 20 62 65 20 65  d method to be e
b720: 76 61 6c 75 61 74 65 64 20 6c 61 74 65 72 0a 09  valuated later..
b730: 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
b740: 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69   */..    Tone.Ti
b750: 6d 65 42 61 73 65 2e 70 72 6f 74 6f 74 79 70 65  meBase.prototype
b760: 2e 5f 70 61 72 73 65 45 78 70 72 53 74 72 69 6e  ._parseExprStrin
b770: 67 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 65 78  g = function (ex
b780: 70 72 53 74 72 69 6e 67 29 20 7b 0a 09 20 20 20  prString) {..   
b790: 20 20 20 20 20 69 66 20 28 21 74 68 69 73 2e 69       if (!this.i
b7a0: 73 53 74 72 69 6e 67 28 65 78 70 72 53 74 72 69  sString(exprStri
b7b0: 6e 67 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ng)) {..        
b7c0: 20 20 20 20 65 78 70 72 53 74 72 69 6e 67 20 3d      exprString =
b7d0: 20 65 78 70 72 53 74 72 69 6e 67 2e 74 6f 53 74   exprString.toSt
b7e0: 72 69 6e 67 28 29 3b 0a 09 20 20 20 20 20 20 20  ring();..       
b7f0: 20 7d 0a 09 20 20 20 20 20 20 20 20 76 61 72 20   }..        var 
b800: 6c 65 78 65 72 20 3d 20 74 68 69 73 2e 5f 74 6f  lexer = this._to
b810: 6b 65 6e 69 7a 65 28 65 78 70 72 53 74 72 69 6e  kenize(exprStrin
b820: 67 29 3b 0a 09 20 20 20 20 20 20 20 20 76 61 72  g);..        var
b830: 20 74 72 65 65 20 3d 20 74 68 69 73 2e 5f 70 61   tree = this._pa
b840: 72 73 65 42 69 6e 61 72 79 28 6c 65 78 65 72 29  rseBinary(lexer)
b850: 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
b860: 6e 20 74 72 65 65 3b 0a 09 20 20 20 20 7d 3b 0a  n tree;..    };.
b870: 09 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
b880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8c0: 0a 09 20 20 20 20 2f 2f 09 44 45 46 41 55 4c 54  ..    //.DEFAULT
b8d0: 53 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  S..    /////////
b8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b920: 2f 2f 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  //..    /**... *
b930: 20 20 54 68 65 20 69 6e 69 74 69 61 6c 20 65 78    The initial ex
b940: 70 72 65 73 73 69 6f 6e 20 76 61 6c 75 65 0a 09  pression value..
b950: 09 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 4e  . *  @return  {N
b960: 75 6d 62 65 72 7d 20 20 54 68 65 20 69 6e 69 74  umber}  The init
b970: 69 61 6c 20 76 61 6c 75 65 20 30 0a 09 09 20 2a  ial value 0... *
b980: 20 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f    @private... */
b990: 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65 42  ..    Tone.TimeB
b9a0: 61 73 65 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 6e  ase.prototype._n
b9b0: 6f 4f 70 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  oOp = function (
b9c0: 29 20 7b 0a 09 20 20 20 20 20 20 20 20 72 65 74  ) {..        ret
b9d0: 75 72 6e 20 30 3b 0a 09 20 20 20 20 7d 3b 0a 09  urn 0;..    };..
b9e0: 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 68      /**... *  Th
b9f0: 65 20 64 65 66 61 75 6c 74 20 65 78 70 72 65 73  e default expres
ba00: 73 69 6f 6e 20 76 61 6c 75 65 20 69 66 20 6e 6f  sion value if no
ba10: 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 67   arguments are g
ba20: 69 76 65 6e 0a 09 09 20 2a 20 20 40 70 72 69 76  iven... *  @priv
ba30: 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  ate... */..    T
ba40: 6f 6e 65 2e 54 69 6d 65 42 61 73 65 2e 70 72 6f  one.TimeBase.pro
ba50: 74 6f 74 79 70 65 2e 5f 64 65 66 61 75 6c 74 45  totype._defaultE
ba60: 78 70 72 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  xpr = function (
ba70: 29 20 7b 0a 09 20 20 20 20 20 20 20 20 72 65 74  ) {..        ret
ba80: 75 72 6e 20 74 68 69 73 2e 5f 6e 6f 4f 70 3b 0a  urn this._noOp;.
ba90: 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
baa0: 0a 09 09 20 2a 20 20 54 68 65 20 64 65 66 61 75  ... *  The defau
bab0: 6c 74 20 75 6e 69 74 73 20 69 66 20 6e 6f 6e 65  lt units if none
bac0: 20 61 72 65 20 67 69 76 65 6e 2e 0a 09 09 20 2a   are given.... *
bad0: 20 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f    @private... */
bae0: 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65 42  ..    Tone.TimeB
baf0: 61 73 65 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 64  ase.prototype._d
bb00: 65 66 61 75 6c 74 55 6e 69 74 73 20 3d 20 27 73  efaultUnits = 's
bb10: 27 3b 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ';..    ////////
bb20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb60: 2f 2f 2f 0a 09 20 20 20 20 2f 2f 09 55 4e 49 54  ///..    //.UNIT
bb70: 20 43 4f 4e 56 45 52 53 49 4f 4e 53 0a 09 20 20   CONVERSIONS..  
bb80: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
bb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20  /////////////.. 
bbd0: 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 52 65 74     /**... *  Ret
bbe0: 75 72 6e 73 20 74 68 65 20 76 61 6c 75 65 20 6f  urns the value o
bbf0: 66 20 61 20 66 72 65 71 75 65 6e 63 79 20 69 6e  f a frequency in
bc00: 20 74 68 65 20 63 75 72 72 65 6e 74 20 75 6e 69   the current uni
bc10: 74 73 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  ts... *  @param 
bc20: 7b 46 72 65 71 75 65 6e 63 79 7d 20 66 72 65 71  {Frequency} freq
bc30: 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 20  ... *  @return  
bc40: 7b 4e 75 6d 62 65 72 7d 0a 09 09 20 2a 20 20 40  {Number}... *  @
bc50: 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20  private... */.. 
bc60: 20 20 20 54 6f 6e 65 2e 54 69 6d 65 42 61 73 65     Tone.TimeBase
bc70: 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 66 72 65 71  .prototype._freq
bc80: 75 65 6e 63 79 54 6f 55 6e 69 74 73 20 3d 20 66  uencyToUnits = f
bc90: 75 6e 63 74 69 6f 6e 20 28 66 72 65 71 29 20 7b  unction (freq) {
bca0: 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
bcb0: 20 31 20 2f 20 66 72 65 71 3b 0a 09 20 20 20 20   1 / freq;..    
bcc0: 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  };..    /**... *
bcd0: 20 20 52 65 74 75 72 6e 20 74 68 65 20 76 61 6c    Return the val
bce0: 75 65 20 6f 66 20 74 68 65 20 62 65 61 74 73 20  ue of the beats 
bcf0: 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 75  in the current u
bd00: 6e 69 74 73 0a 09 09 20 2a 20 20 40 70 61 72 61  nits... *  @para
bd10: 6d 20 7b 4e 75 6d 62 65 72 7d 20 62 65 61 74 73  m {Number} beats
bd20: 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 20  ... *  @return  
bd30: 7b 4e 75 6d 62 65 72 7d 0a 09 09 20 2a 20 20 40  {Number}... *  @
bd40: 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20  private... */.. 
bd50: 20 20 20 54 6f 6e 65 2e 54 69 6d 65 42 61 73 65     Tone.TimeBase
bd60: 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 62 65 61 74  .prototype._beat
bd70: 73 54 6f 55 6e 69 74 73 20 3d 20 66 75 6e 63 74  sToUnits = funct
bd80: 69 6f 6e 20 28 62 65 61 74 73 29 20 7b 0a 09 20  ion (beats) {.. 
bd90: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 36 30         return 60
bda0: 20 2f 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72   / Tone.Transpor
bdb0: 74 2e 62 70 6d 2e 76 61 6c 75 65 20 2a 20 62 65  t.bpm.value * be
bdc0: 61 74 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  ats;..    };..  
bdd0: 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 52 65 74 75    /**... *  Retu
bde0: 72 6e 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66  rns the value of
bdf0: 20 61 20 73 65 63 6f 6e 64 20 69 6e 20 74 68 65   a second in the
be00: 20 63 75 72 72 65 6e 74 20 75 6e 69 74 73 0a 09   current units..
be10: 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 53 65 63  . *  @param {Sec
be20: 6f 6e 64 73 7d 20 73 65 63 6f 6e 64 73 0a 09 09  onds} seconds...
be30: 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 4e 75   *  @return  {Nu
be40: 6d 62 65 72 7d 0a 09 09 20 2a 20 20 40 70 72 69  mber}... *  @pri
be50: 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20  vate... */..    
be60: 54 6f 6e 65 2e 54 69 6d 65 42 61 73 65 2e 70 72  Tone.TimeBase.pr
be70: 6f 74 6f 74 79 70 65 2e 5f 73 65 63 6f 6e 64 73  ototype._seconds
be80: 54 6f 55 6e 69 74 73 20 3d 20 66 75 6e 63 74 69  ToUnits = functi
be90: 6f 6e 20 28 73 65 63 6f 6e 64 73 29 20 7b 0a 09  on (seconds) {..
bea0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 73          return s
beb0: 65 63 6f 6e 64 73 3b 0a 09 20 20 20 20 7d 3b 0a  econds;..    };.
bec0: 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 52  .    /**... *  R
bed0: 65 74 75 72 6e 73 20 74 68 65 20 76 61 6c 75 65  eturns the value
bee0: 20 6f 66 20 61 20 74 69 63 6b 20 69 6e 20 74 68   of a tick in th
bef0: 65 20 63 75 72 72 65 6e 74 20 74 69 6d 65 20 75  e current time u
bf00: 6e 69 74 73 0a 09 09 20 2a 20 20 40 70 61 72 61  nits... *  @para
bf10: 6d 20 7b 54 69 63 6b 73 7d 20 74 69 63 6b 73 0a  m {Ticks} ticks.
bf20: 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b  .. *  @return  {
bf30: 4e 75 6d 62 65 72 7d 0a 09 09 20 2a 20 20 40 70  Number}... *  @p
bf40: 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20  rivate... */..  
bf50: 20 20 54 6f 6e 65 2e 54 69 6d 65 42 61 73 65 2e    Tone.TimeBase.
bf60: 70 72 6f 74 6f 74 79 70 65 2e 5f 74 69 63 6b 73  prototype._ticks
bf70: 54 6f 55 6e 69 74 73 20 3d 20 66 75 6e 63 74 69  ToUnits = functi
bf80: 6f 6e 20 28 74 69 63 6b 73 29 20 7b 0a 09 20 20  on (ticks) {..  
bf90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 69 63        return tic
bfa0: 6b 73 20 2a 20 28 74 68 69 73 2e 5f 62 65 61 74  ks * (this._beat
bfb0: 73 54 6f 55 6e 69 74 73 28 31 29 20 2f 20 54 6f  sToUnits(1) / To
bfc0: 6e 65 2e 54 72 61 6e 73 70 6f 72 74 2e 50 50 51  ne.Transport.PPQ
bfd0: 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  );..    };..    
bfe0: 2f 2a 2a 0a 09 09 20 2a 20 20 52 65 74 75 72 6e  /**... *  Return
bff0: 20 74 68 65 20 74 69 6d 65 20 73 69 67 6e 61 74   the time signat
c000: 75 72 65 2e 0a 09 09 20 2a 20 20 40 72 65 74 75  ure.... *  @retu
c010: 72 6e 20 20 7b 4e 75 6d 62 65 72 7d 0a 09 09 20  rn  {Number}... 
c020: 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a  *  @private... *
c030: 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65  /..    Tone.Time
c040: 42 61 73 65 2e 70 72 6f 74 6f 74 79 70 65 2e 5f  Base.prototype._
c050: 74 69 6d 65 53 69 67 6e 61 74 75 72 65 20 3d 20  timeSignature = 
c060: 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
c070: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f         return To
c080: 6e 65 2e 54 72 61 6e 73 70 6f 72 74 2e 74 69 6d  ne.Transport.tim
c090: 65 53 69 67 6e 61 74 75 72 65 3b 0a 09 20 20 20  eSignature;..   
c0a0: 20 7d 3b 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f 2f   };..    ///////
c0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0f0: 2f 2f 2f 2f 0a 09 20 20 20 20 2f 2f 09 45 58 50  ////..    //.EXP
c100: 52 45 53 53 49 4f 4e 53 0a 09 20 20 20 20 2f 2f  RESSIONS..    //
c110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 2f  /////////..    /
c160: 2a 2a 0a 09 09 20 2a 20 20 50 75 73 68 20 61 6e  **... *  Push an
c170: 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 6e 74 6f   expression onto
c180: 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
c190: 6c 69 73 74 0a 09 09 20 2a 20 20 40 70 61 72 61  list... *  @para
c1a0: 6d 20 20 7b 54 69 6d 65 7d 20 20 76 61 6c 0a 09  m  {Time}  val..
c1b0: 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 53 74  . *  @param  {St
c1c0: 72 69 6e 67 7d 20 20 74 79 70 65 0a 09 09 20 2a  ring}  type... *
c1d0: 20 20 40 70 61 72 61 6d 20 20 7b 53 74 72 69 6e    @param  {Strin
c1e0: 67 7d 20 20 75 6e 69 74 73 0a 09 09 20 2a 20 20  g}  units... *  
c1f0: 40 72 65 74 75 72 6e 20 20 7b 54 6f 6e 65 2e 54  @return  {Tone.T
c200: 69 6d 65 42 61 73 65 7d 20 0a 09 09 20 2a 20 20  imeBase} ... *  
c210: 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09  @private... */..
c220: 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65 42 61 73      Tone.TimeBas
c230: 65 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 70 75 73  e.prototype._pus
c240: 68 45 78 70 72 20 3d 20 66 75 6e 63 74 69 6f 6e  hExpr = function
c250: 20 28 76 61 6c 2c 20 6e 61 6d 65 2c 20 75 6e 69   (val, name, uni
c260: 74 73 29 20 7b 0a 09 20 20 20 20 20 20 20 20 2f  ts) {..        /
c270: 2f 63 72 65 61 74 65 20 74 68 65 20 65 78 70 72  /create the expr
c280: 65 73 73 69 6f 6e 0a 09 20 20 20 20 20 20 20 20  ession..        
c290: 69 66 20 28 21 28 76 61 6c 20 69 6e 73 74 61 6e  if (!(val instan
c2a0: 63 65 6f 66 20 54 6f 6e 65 2e 54 69 6d 65 42 61  ceof Tone.TimeBa
c2b0: 73 65 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20  se)) {..        
c2c0: 20 20 20 20 76 61 6c 20 3d 20 6e 65 77 20 74 68      val = new th
c2d0: 69 73 2e 63 6f 6e 73 74 72 75 63 74 6f 72 28 76  is.constructor(v
c2e0: 61 6c 2c 20 75 6e 69 74 73 29 3b 0a 09 20 20 20  al, units);..   
c2f0: 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
c300: 74 68 69 73 2e 5f 65 78 70 72 20 3d 20 74 68 69  this._expr = thi
c310: 73 2e 5f 62 69 6e 61 72 79 45 78 70 72 65 73 73  s._binaryExpress
c320: 69 6f 6e 73 5b 6e 61 6d 65 5d 2e 6d 65 74 68 6f  ions[name].metho
c330: 64 2e 62 69 6e 64 28 74 68 69 73 2c 20 74 68 69  d.bind(this, thi
c340: 73 2e 5f 65 78 70 72 2c 20 76 61 6c 2e 5f 65 78  s._expr, val._ex
c350: 70 72 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65  pr);..        re
c360: 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20  turn this;..    
c370: 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  };..    /**... *
c380: 20 20 41 64 64 20 74 6f 20 74 68 65 20 63 75 72    Add to the cur
c390: 72 65 6e 74 20 76 61 6c 75 65 2e 0a 09 09 20 2a  rent value.... *
c3a0: 20 20 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 7d    @param  {Time}
c3b0: 20 20 76 61 6c 20 20 20 20 54 68 65 20 76 61 6c    val    The val
c3c0: 75 65 20 74 6f 20 61 64 64 0a 09 09 20 2a 20 20  ue to add... *  
c3d0: 40 70 61 72 61 6d 20 20 7b 53 74 72 69 6e 67 3d  @param  {String=
c3e0: 7d 20 20 75 6e 69 74 73 20 20 4f 70 74 69 6f 6e  }  units  Option
c3f0: 61 6c 20 75 6e 69 74 73 20 74 6f 20 75 73 65 20  al units to use 
c400: 77 69 74 68 20 74 68 65 20 76 61 6c 75 65 2e 0a  with the value..
c410: 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b  .. *  @return  {
c420: 54 6f 6e 65 2e 54 69 6d 65 42 61 73 65 7d 20 20  Tone.TimeBase}  
c430: 74 68 69 73 0a 09 09 20 2a 20 20 40 65 78 61 6d  this... *  @exam
c440: 70 6c 65 0a 09 09 20 2a 20 54 6f 6e 65 2e 54 69  ple... * Tone.Ti
c450: 6d 65 42 61 73 65 28 22 32 6d 22 29 2e 61 64 64  meBase("2m").add
c460: 28 22 31 6d 22 29 3b 20 2f 2f 22 33 6d 22 0a 09  ("1m"); //"3m"..
c470: 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54  . */..    Tone.T
c480: 69 6d 65 42 61 73 65 2e 70 72 6f 74 6f 74 79 70  imeBase.prototyp
c490: 65 2e 61 64 64 20 3d 20 66 75 6e 63 74 69 6f 6e  e.add = function
c4a0: 20 28 76 61 6c 2c 20 75 6e 69 74 73 29 20 7b 0a   (val, units) {.
c4b0: 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
c4c0: 74 68 69 73 2e 5f 70 75 73 68 45 78 70 72 28 76  this._pushExpr(v
c4d0: 61 6c 2c 20 27 2b 27 2c 20 75 6e 69 74 73 29 3b  al, '+', units);
c4e0: 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
c4f0: 2a 0a 09 09 20 2a 20 20 53 75 62 74 72 61 63 74  *... *  Subtract
c500: 20 74 68 65 20 76 61 6c 75 65 20 66 72 6f 6d 20   the value from 
c510: 74 68 65 20 63 75 72 72 65 6e 74 20 74 69 6d 65  the current time
c520: 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20  .... *  @param  
c530: 7b 54 69 6d 65 7d 20 20 76 61 6c 20 20 20 20 54  {Time}  val    T
c540: 68 65 20 76 61 6c 75 65 20 74 6f 20 73 75 62 74  he value to subt
c550: 72 61 63 74 0a 09 09 20 2a 20 20 40 70 61 72 61  ract... *  @para
c560: 6d 20 20 7b 53 74 72 69 6e 67 3d 7d 20 20 75 6e  m  {String=}  un
c570: 69 74 73 20 20 4f 70 74 69 6f 6e 61 6c 20 75 6e  its  Optional un
c580: 69 74 73 20 74 6f 20 75 73 65 20 77 69 74 68 20  its to use with 
c590: 74 68 65 20 76 61 6c 75 65 2e 0a 09 09 20 2a 20  the value.... * 
c5a0: 20 40 72 65 74 75 72 6e 20 20 7b 54 6f 6e 65 2e   @return  {Tone.
c5b0: 54 69 6d 65 42 61 73 65 7d 20 20 74 68 69 73 0a  TimeBase}  this.
c5c0: 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09  .. *  @example..
c5d0: 09 20 2a 20 54 6f 6e 65 2e 54 69 6d 65 42 61 73  . * Tone.TimeBas
c5e0: 65 28 22 32 6d 22 29 2e 73 75 62 28 22 31 6d 22  e("2m").sub("1m"
c5f0: 29 3b 20 2f 2f 22 31 6d 22 0a 09 09 20 2a 2f 0a  ); //"1m"... */.
c600: 09 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65 42 61  .    Tone.TimeBa
c610: 73 65 2e 70 72 6f 74 6f 74 79 70 65 2e 73 75 62  se.prototype.sub
c620: 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 76 61 6c   = function (val
c630: 2c 20 75 6e 69 74 73 29 20 7b 0a 09 20 20 20 20  , units) {..    
c640: 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
c650: 5f 70 75 73 68 45 78 70 72 28 76 61 6c 2c 20 27  _pushExpr(val, '
c660: 2d 27 2c 20 75 6e 69 74 73 29 3b 0a 09 20 20 20  -', units);..   
c670: 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20   };..    /**... 
c680: 2a 20 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20  *  Multiply the 
c690: 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 62 79  current value by
c6a0: 20 74 68 65 20 67 69 76 65 6e 20 74 69 6d 65 2e   the given time.
c6b0: 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b  ... *  @param  {
c6c0: 54 69 6d 65 7d 20 20 76 61 6c 20 20 20 20 54 68  Time}  val    Th
c6d0: 65 20 76 61 6c 75 65 20 74 6f 20 6d 75 6c 74 69  e value to multi
c6e0: 70 6c 79 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  ply... *  @param
c6f0: 20 20 7b 53 74 72 69 6e 67 3d 7d 20 20 75 6e 69    {String=}  uni
c700: 74 73 20 20 4f 70 74 69 6f 6e 61 6c 20 75 6e 69  ts  Optional uni
c710: 74 73 20 74 6f 20 75 73 65 20 77 69 74 68 20 74  ts to use with t
c720: 68 65 20 76 61 6c 75 65 2e 0a 09 09 20 2a 20 20  he value.... *  
c730: 40 72 65 74 75 72 6e 20 20 7b 54 6f 6e 65 2e 54  @return  {Tone.T
c740: 69 6d 65 42 61 73 65 7d 20 20 74 68 69 73 0a 09  imeBase}  this..
c750: 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09  . *  @example...
c760: 20 2a 20 54 6f 6e 65 2e 54 69 6d 65 42 61 73 65   * Tone.TimeBase
c770: 28 22 32 6d 22 29 2e 6d 75 6c 74 28 22 32 22 29  ("2m").mult("2")
c780: 3b 20 2f 2f 22 34 6d 22 0a 09 09 20 2a 2f 0a 09  ; //"4m"... */..
c790: 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65 42 61 73      Tone.TimeBas
c7a0: 65 2e 70 72 6f 74 6f 74 79 70 65 2e 6d 75 6c 74  e.prototype.mult
c7b0: 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 76 61 6c   = function (val
c7c0: 2c 20 75 6e 69 74 73 29 20 7b 0a 09 20 20 20 20  , units) {..    
c7d0: 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
c7e0: 5f 70 75 73 68 45 78 70 72 28 76 61 6c 2c 20 27  _pushExpr(val, '
c7f0: 2a 27 2c 20 75 6e 69 74 73 29 3b 0a 09 20 20 20  *', units);..   
c800: 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20   };..    /**... 
c810: 2a 20 20 44 69 76 69 64 65 20 74 68 65 20 63 75  *  Divide the cu
c820: 72 72 65 6e 74 20 76 61 6c 75 65 20 62 79 20 74  rrent value by t
c830: 68 65 20 67 69 76 65 6e 20 74 69 6d 65 2e 0a 09  he given time...
c840: 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 54 69  . *  @param  {Ti
c850: 6d 65 7d 20 20 76 61 6c 20 20 20 20 54 68 65 20  me}  val    The 
c860: 76 61 6c 75 65 20 74 6f 20 64 69 76 69 64 65 20  value to divide 
c870: 62 79 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  by... *  @param 
c880: 20 7b 53 74 72 69 6e 67 3d 7d 20 20 75 6e 69 74   {String=}  unit
c890: 73 20 20 4f 70 74 69 6f 6e 61 6c 20 75 6e 69 74  s  Optional unit
c8a0: 73 20 74 6f 20 75 73 65 20 77 69 74 68 20 74 68  s to use with th
c8b0: 65 20 76 61 6c 75 65 2e 0a 09 09 20 2a 20 20 40  e value.... *  @
c8c0: 72 65 74 75 72 6e 20 20 7b 54 6f 6e 65 2e 54 69  return  {Tone.Ti
c8d0: 6d 65 42 61 73 65 7d 20 20 74 68 69 73 0a 09 09  meBase}  this...
c8e0: 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20   *  @example... 
c8f0: 2a 20 54 6f 6e 65 2e 54 69 6d 65 42 61 73 65 28  * Tone.TimeBase(
c900: 22 32 6d 22 29 2e 64 69 76 28 32 29 3b 20 2f 2f  "2m").div(2); //
c910: 22 31 6d 22 0a 09 09 20 2a 2f 0a 09 20 20 20 20  "1m"... */..    
c920: 54 6f 6e 65 2e 54 69 6d 65 42 61 73 65 2e 70 72  Tone.TimeBase.pr
c930: 6f 74 6f 74 79 70 65 2e 64 69 76 20 3d 20 66 75  ototype.div = fu
c940: 6e 63 74 69 6f 6e 20 28 76 61 6c 2c 20 75 6e 69  nction (val, uni
c950: 74 73 29 20 7b 0a 09 20 20 20 20 20 20 20 20 72  ts) {..        r
c960: 65 74 75 72 6e 20 74 68 69 73 2e 5f 70 75 73 68  eturn this._push
c970: 45 78 70 72 28 76 61 6c 2c 20 27 2f 27 2c 20 75  Expr(val, '/', u
c980: 6e 69 74 73 29 3b 0a 09 20 20 20 20 7d 3b 0a 09  nits);..    };..
c990: 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 45 76      /**... *  Ev
c9a0: 61 6c 75 61 74 65 20 74 68 65 20 74 69 6d 65 20  aluate the time 
c9b0: 76 61 6c 75 65 2e 20 52 65 74 75 72 6e 73 20 74  value. Returns t
c9c0: 68 65 20 74 69 6d 65 0a 09 09 20 2a 20 20 69 6e  he time... *  in
c9d0: 20 73 65 63 6f 6e 64 73 2e 0a 09 09 20 2a 20 20   seconds.... *  
c9e0: 40 72 65 74 75 72 6e 20 20 7b 53 65 63 6f 6e 64  @return  {Second
c9f0: 73 7d 20 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  s} ... */..    T
ca00: 6f 6e 65 2e 54 69 6d 65 42 61 73 65 2e 70 72 6f  one.TimeBase.pro
ca10: 74 6f 74 79 70 65 2e 65 76 61 6c 20 3d 20 66 75  totype.eval = fu
ca20: 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
ca30: 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
ca40: 2e 5f 65 78 70 72 28 29 3b 0a 09 20 20 20 20 7d  ._expr();..    }
ca50: 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
ca60: 20 43 6c 65 61 6e 20 75 70 0a 09 09 20 2a 20 20   Clean up... *  
ca70: 40 72 65 74 75 72 6e 20 7b 54 6f 6e 65 2e 54 69  @return {Tone.Ti
ca80: 6d 65 42 61 73 65 7d 20 74 68 69 73 0a 09 09 20  meBase} this... 
ca90: 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69 6d  */..    Tone.Tim
caa0: 65 42 61 73 65 2e 70 72 6f 74 6f 74 79 70 65 2e  eBase.prototype.
cab0: 64 69 73 70 6f 73 65 20 3d 20 66 75 6e 63 74 69  dispose = functi
cac0: 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
cad0: 20 74 68 69 73 2e 5f 65 78 70 72 20 3d 20 6e 75   this._expr = nu
cae0: 6c 6c 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  ll;..    };..   
caf0: 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 54 69 6d   return Tone.Tim
cb00: 65 42 61 73 65 3b 0a 09 7d 29 3b 0a 09 4d 6f 64  eBase;..});..Mod
cb10: 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f  ule(function (To
cb20: 6e 65 29 20 7b 0a 09 20 20 20 20 2f 2a 2a 0a 09  ne) {..    /**..
cb30: 09 20 2a 20 20 40 63 6c 61 73 73 20 54 6f 6e 65  . *  @class Tone
cb40: 2e 54 69 6d 65 20 69 73 20 61 20 70 72 69 6d 69  .Time is a primi
cb50: 74 69 76 65 20 74 79 70 65 20 66 6f 72 20 65 6e  tive type for en
cb60: 63 6f 64 69 6e 67 20 54 69 6d 65 20 76 61 6c 75  coding Time valu
cb70: 65 73 2e 20 0a 09 09 20 2a 20 20 20 20 20 20 20  es. ... *       
cb80: 20 20 45 76 65 6e 74 75 61 6c 6c 79 20 61 6c 6c    Eventually all
cb90: 20 74 69 6d 65 20 76 61 6c 75 65 73 20 61 72 65   time values are
cba0: 20 65 76 61 6c 75 61 74 65 64 20 74 6f 20 73 65   evaluated to se
cbb0: 63 6f 6e 64 73 0a 09 09 20 2a 20 20 20 20 20 20  conds... *      
cbc0: 20 20 20 75 73 69 6e 67 20 74 68 65 20 60 65 76     using the `ev
cbd0: 61 6c 60 20 6d 65 74 68 6f 64 2e 20 54 6f 6e 65  al` method. Tone
cbe0: 2e 54 69 6d 65 20 63 61 6e 20 62 65 20 63 6f 6e  .Time can be con
cbf0: 73 74 72 75 63 74 65 64 0a 09 09 20 2a 20 20 20  structed... *   
cc00: 20 20 20 20 20 20 77 69 74 68 20 6f 72 20 77 69        with or wi
cc10: 74 68 6f 75 74 20 74 68 65 20 60 6e 65 77 60 20  thout the `new` 
cc20: 6b 65 79 77 6f 72 64 2e 20 54 6f 6e 65 2e 54 69  keyword. Tone.Ti
cc30: 6d 65 20 63 61 6e 20 62 65 20 70 61 73 73 65 64  me can be passed
cc40: 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 69 6e  ... *         in
cc50: 74 6f 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  to the parameter
cc60: 20 6f 66 20 61 6e 79 20 6d 65 74 68 6f 64 20 77   of any method w
cc70: 68 69 63 68 20 74 61 6b 65 73 20 74 69 6d 65 20  hich takes time 
cc80: 61 73 20 61 6e 20 61 72 67 75 6d 65 6e 74 2e 20  as an argument. 
cc90: 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 72 75 63  ... *  @construc
cca0: 74 6f 72 0a 09 09 20 2a 20 20 40 65 78 74 65 6e  tor... *  @exten
ccb0: 64 73 20 7b 54 6f 6e 65 2e 54 69 6d 65 42 61 73  ds {Tone.TimeBas
ccc0: 65 7d 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  e}... *  @param 
ccd0: 20 7b 53 74 72 69 6e 67 7c 4e 75 6d 62 65 72 7d   {String|Number}
cce0: 20 20 76 61 6c 20 20 20 20 54 68 65 20 74 69 6d    val    The tim
ccf0: 65 20 76 61 6c 75 65 2e 0a 09 09 20 2a 20 20 40  e value.... *  @
cd00: 70 61 72 61 6d 20 20 7b 53 74 72 69 6e 67 3d 7d  param  {String=}
cd10: 20 20 75 6e 69 74 73 20 20 54 68 65 20 75 6e 69    units  The uni
cd20: 74 73 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e  ts of the value.
cd30: 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a  ... *  @example.
cd40: 09 09 20 2a 20 76 61 72 20 74 20 3d 20 54 6f 6e  .. * var t = Ton
cd50: 65 2e 54 69 6d 65 28 22 34 6e 22 29 3b 2f 2f 65  e.Time("4n");//e
cd60: 6e 63 6f 64 65 73 20 61 20 71 75 61 72 74 65 72  ncodes a quarter
cd70: 20 6e 6f 74 65 0a 09 09 20 2a 20 74 2e 6d 75 6c   note... * t.mul
cd80: 74 28 34 29 3b 20 2f 2f 20 6d 75 6c 74 69 70 6c  t(4); // multipl
cd90: 79 20 74 68 61 74 20 76 61 6c 75 65 20 62 79 20  y that value by 
cda0: 34 0a 09 09 20 2a 20 74 2e 74 6f 4e 6f 74 61 74  4... * t.toNotat
cdb0: 69 6f 6e 28 29 3b 20 2f 2f 72 65 74 75 72 6e 73  ion(); //returns
cdc0: 20 22 31 6d 22 0a 09 09 20 2a 2f 0a 09 20 20 20   "1m"... */..   
cdd0: 20 54 6f 6e 65 2e 54 69 6d 65 20 3d 20 66 75 6e   Tone.Time = fun
cde0: 63 74 69 6f 6e 20 28 76 61 6c 2c 20 75 6e 69 74  ction (val, unit
cdf0: 73 29 20 7b 0a 09 20 20 20 20 20 20 20 20 69 66  s) {..        if
ce00: 20 28 74 68 69 73 20 69 6e 73 74 61 6e 63 65 6f   (this instanceo
ce10: 66 20 54 6f 6e 65 2e 54 69 6d 65 29 20 7b 0a 09  f Tone.Time) {..
ce20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 2a 0a              /**.
ce30: 09 09 09 09 20 2a 20 20 49 66 20 74 68 65 20 63  .... *  If the c
ce40: 75 72 72 65 6e 74 20 63 6c 6f 63 6b 20 74 69 6d  urrent clock tim
ce50: 65 20 73 68 6f 75 6c 64 0a 09 09 09 09 20 2a 20  e should..... * 
ce60: 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65   be added to the
ce70: 20 6f 75 74 70 75 74 0a 09 09 09 09 20 2a 20 20   output..... *  
ce80: 40 74 79 70 65 20 20 7b 42 6f 6f 6c 65 61 6e 7d  @type  {Boolean}
ce90: 0a 09 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  ..... *  @privat
cea0: 65 0a 09 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  e..... */..     
ceb0: 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70 6c 75         this._plu
cec0: 73 4e 6f 77 20 3d 20 66 61 6c 73 65 3b 0a 09 20  sNow = false;.. 
ced0: 20 20 20 20 20 20 20 20 20 20 20 54 6f 6e 65 2e             Tone.
cee0: 54 69 6d 65 42 61 73 65 2e 63 61 6c 6c 28 74 68  TimeBase.call(th
cef0: 69 73 2c 20 76 61 6c 2c 20 75 6e 69 74 73 29 3b  is, val, units);
cf00: 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
cf10: 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
cf20: 72 65 74 75 72 6e 20 6e 65 77 20 54 6f 6e 65 2e  return new Tone.
cf30: 54 69 6d 65 28 76 61 6c 2c 20 75 6e 69 74 73 29  Time(val, units)
cf40: 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20  ;..        }..  
cf50: 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65 2e 65    };..    Tone.e
cf60: 78 74 65 6e 64 28 54 6f 6e 65 2e 54 69 6d 65 2c  xtend(Tone.Time,
cf70: 20 54 6f 6e 65 2e 54 69 6d 65 42 61 73 65 29 3b   Tone.TimeBase);
cf80: 0a 09 20 20 20 20 2f 2f 63 6c 6f 6e 65 20 74 68  ..    //clone th
cf90: 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 73 6f  e expressions so
cfa0: 20 74 68 61 74 20 0a 09 20 20 20 20 2f 2f 77 65   that ..    //we
cfb0: 20 63 61 6e 20 61 64 64 20 6d 6f 72 65 20 77 69   can add more wi
cfc0: 74 68 6f 75 74 20 6d 6f 64 69 66 79 69 6e 67 20  thout modifying 
cfd0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 09 20 20  the original..  
cfe0: 20 20 54 6f 6e 65 2e 54 69 6d 65 2e 70 72 6f 74    Tone.Time.prot
cff0: 6f 74 79 70 65 2e 5f 75 6e 61 72 79 45 78 70 72  otype._unaryExpr
d000: 65 73 73 69 6f 6e 73 20 3d 20 4f 62 6a 65 63 74  essions = Object
d010: 2e 63 72 65 61 74 65 28 54 6f 6e 65 2e 54 69 6d  .create(Tone.Tim
d020: 65 42 61 73 65 2e 70 72 6f 74 6f 74 79 70 65 2e  eBase.prototype.
d030: 5f 75 6e 61 72 79 45 78 70 72 65 73 73 69 6f 6e  _unaryExpression
d040: 73 29 3b 0a 09 20 20 20 20 2f 2a 0a 09 09 20 2a  s);..    /*... *
d050: 20 20 41 64 64 73 20 61 6e 20 61 64 64 69 74 69    Adds an additi
d060: 6f 6e 61 6c 20 75 6e 61 72 79 20 65 78 70 72 65  onal unary expre
d070: 73 73 69 6f 6e 0a 09 09 20 2a 20 20 77 68 69 63  ssion... *  whic
d080: 68 20 71 75 61 6e 74 69 7a 65 73 20 76 61 6c 75  h quantizes valu
d090: 65 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 73  es to the next s
d0a0: 75 62 64 69 76 69 73 69 6f 6e 0a 09 09 20 2a 20  ubdivision... * 
d0b0: 20 40 74 79 70 65 20 7b 4f 62 6a 65 63 74 7d 0a   @type {Object}.
d0c0: 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
d0d0: 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54  . */..    Tone.T
d0e0: 69 6d 65 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 75  ime.prototype._u
d0f0: 6e 61 72 79 45 78 70 72 65 73 73 69 6f 6e 73 2e  naryExpressions.
d100: 71 75 61 6e 74 69 7a 65 20 3d 20 7b 0a 09 20 20  quantize = {..  
d110: 20 20 20 20 20 20 72 65 67 65 78 70 3a 20 2f 5e        regexp: /^
d120: 40 2f 2c 0a 09 20 20 20 20 20 20 20 20 6d 65 74  @/,..        met
d130: 68 6f 64 3a 20 66 75 6e 63 74 69 6f 6e 20 28 72  hod: function (r
d140: 68 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  h) {..          
d150: 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 54 72    return Tone.Tr
d160: 61 6e 73 70 6f 72 74 2e 6e 65 78 74 53 75 62 64  ansport.nextSubd
d170: 69 76 69 73 69 6f 6e 28 72 68 28 29 29 3b 0a 09  ivision(rh());..
d180: 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d          }..    }
d190: 3b 0a 09 20 20 20 20 2f 2a 0a 09 09 20 2a 20 20  ;..    /*... *  
d1a0: 41 64 64 73 20 61 6e 20 61 64 64 69 74 69 6f 6e  Adds an addition
d1b0: 61 6c 20 75 6e 61 72 79 20 65 78 70 72 65 73 73  al unary express
d1c0: 69 6f 6e 0a 09 09 20 2a 20 20 77 68 69 63 68 20  ion... *  which 
d1d0: 61 64 64 73 20 74 68 65 20 63 75 72 72 65 6e 74  adds the current
d1e0: 20 63 6c 6f 63 6b 20 74 69 6d 65 2e 0a 09 09 20   clock time.... 
d1f0: 2a 20 20 40 74 79 70 65 20 7b 4f 62 6a 65 63 74  *  @type {Object
d200: 7d 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  }... *  @private
d210: 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
d220: 2e 54 69 6d 65 2e 70 72 6f 74 6f 74 79 70 65 2e  .Time.prototype.
d230: 5f 75 6e 61 72 79 45 78 70 72 65 73 73 69 6f 6e  _unaryExpression
d240: 73 2e 6e 6f 77 20 3d 20 7b 0a 09 20 20 20 20 20  s.now = {..     
d250: 20 20 20 72 65 67 65 78 70 3a 20 2f 5e 5c 2b 2f     regexp: /^\+/
d260: 2c 0a 09 20 20 20 20 20 20 20 20 6d 65 74 68 6f  ,..        metho
d270: 64 3a 20 66 75 6e 63 74 69 6f 6e 20 28 6c 68 29  d: function (lh)
d280: 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d290: 74 68 69 73 2e 5f 70 6c 75 73 4e 6f 77 20 3d 20  this._plusNow = 
d2a0: 74 72 75 65 3b 0a 09 20 20 20 20 20 20 20 20 20  true;..         
d2b0: 20 20 20 72 65 74 75 72 6e 20 6c 68 28 29 3b 0a     return lh();.
d2c0: 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
d2d0: 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  };..    /**... *
d2e0: 20 20 51 75 61 6e 74 69 7a 65 20 74 68 65 20 74    Quantize the t
d2f0: 69 6d 65 20 62 79 20 74 68 65 20 67 69 76 65 6e  ime by the given
d300: 20 73 75 62 64 69 76 69 73 69 6f 6e 2e 20 4f 70   subdivision. Op
d310: 74 69 6f 6e 61 6c 6c 79 20 61 64 64 20 61 0a 09  tionally add a..
d320: 09 20 2a 20 20 70 65 72 63 65 6e 74 61 67 65 20  . *  percentage 
d330: 77 68 69 63 68 20 77 69 6c 6c 20 6d 6f 76 65 20  which will move 
d340: 74 68 65 20 74 69 6d 65 20 76 61 6c 75 65 20 74  the time value t
d350: 6f 77 61 72 64 73 20 74 68 65 20 69 64 65 61 6c  owards the ideal
d360: 0a 09 09 20 2a 20 20 71 75 61 6e 74 69 7a 65 64  ... *  quantized
d370: 20 76 61 6c 75 65 20 62 79 20 74 68 61 74 20 70   value by that p
d380: 65 72 63 65 6e 74 61 67 65 2e 20 0a 09 09 20 2a  ercentage. ... *
d390: 20 20 40 70 61 72 61 6d 20 20 7b 4e 75 6d 62 65    @param  {Numbe
d3a0: 72 7c 54 69 6d 65 7d 20 20 76 61 6c 20 20 20 20  r|Time}  val    
d3b0: 54 68 65 20 73 75 62 64 69 76 69 73 69 6f 6e 20  The subdivision 
d3c0: 74 6f 20 71 75 61 6e 74 69 7a 65 20 74 6f 0a 09  to quantize to..
d3d0: 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 4e 6f  . *  @param  {No
d3e0: 72 6d 61 6c 52 61 6e 67 65 7d 20 20 5b 70 65 72  rmalRange}  [per
d3f0: 63 65 6e 74 3d 31 5d 20 20 4d 6f 76 65 20 74 68  cent=1]  Move th
d400: 65 20 74 69 6d 65 20 76 61 6c 75 65 0a 09 09 20  e time value... 
d410: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
d420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d430: 20 20 20 20 74 6f 77 61 72 64 73 20 74 68 65 20      towards the 
d440: 71 75 61 6e 74 69 7a 65 64 20 76 61 6c 75 65 20  quantized value 
d450: 62 79 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  by... *         
d460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d470: 20 20 20 20 20 20 20 20 20 20 61 20 70 65 72 63            a perc
d480: 65 6e 74 61 67 65 2e 0a 09 09 20 2a 20 20 40 72  entage.... *  @r
d490: 65 74 75 72 6e 20 20 7b 54 6f 6e 65 2e 54 69 6d  eturn  {Tone.Tim
d4a0: 65 7d 20 20 74 68 69 73 0a 09 09 20 2a 20 20 40  e}  this... *  @
d4b0: 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 54 6f 6e  example... * Ton
d4c0: 65 2e 54 69 6d 65 28 32 31 29 2e 71 75 61 6e 74  e.Time(21).quant
d4d0: 69 7a 65 28 32 29 2e 65 76 61 6c 28 29 20 2f 2f  ize(2).eval() //
d4e0: 72 65 74 75 72 6e 73 20 32 32 0a 09 09 20 2a 20  returns 22... * 
d4f0: 54 6f 6e 65 2e 54 69 6d 65 28 30 2e 36 29 2e 71  Tone.Time(0.6).q
d500: 75 61 6e 74 69 7a 65 28 22 34 6e 22 2c 20 30 2e  uantize("4n", 0.
d510: 35 29 2e 65 76 61 6c 28 29 20 2f 2f 72 65 74 75  5).eval() //retu
d520: 72 6e 73 20 30 2e 35 35 0a 09 09 20 2a 2f 0a 09  rns 0.55... */..
d530: 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65 2e 70 72      Tone.Time.pr
d540: 6f 74 6f 74 79 70 65 2e 71 75 61 6e 74 69 7a 65  ototype.quantize
d550: 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 73 75 62   = function (sub
d560: 64 69 76 2c 20 70 65 72 63 65 6e 74 29 20 7b 0a  div, percent) {.
d570: 09 20 20 20 20 20 20 20 20 70 65 72 63 65 6e 74  .        percent
d580: 20 3d 20 74 68 69 73 2e 64 65 66 61 75 6c 74 41   = this.defaultA
d590: 72 67 28 70 65 72 63 65 6e 74 2c 20 31 29 3b 0a  rg(percent, 1);.
d5a0: 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 65  .        this._e
d5b0: 78 70 72 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  xpr = function (
d5c0: 65 78 70 72 2c 20 73 75 62 64 69 76 69 73 69 6f  expr, subdivisio
d5d0: 6e 2c 20 70 65 72 63 65 6e 74 29 20 7b 0a 09 20  n, percent) {.. 
d5e0: 20 20 20 20 20 20 20 20 20 20 20 65 78 70 72 20             expr 
d5f0: 3d 20 65 78 70 72 28 29 3b 0a 09 20 20 20 20 20  = expr();..     
d600: 20 20 20 20 20 20 20 73 75 62 64 69 76 69 73 69         subdivisi
d610: 6f 6e 20 3d 20 73 75 62 64 69 76 69 73 69 6f 6e  on = subdivision
d620: 2e 74 6f 53 65 63 6f 6e 64 73 28 29 3b 0a 09 20  .toSeconds();.. 
d630: 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 6d             var m
d640: 75 6c 74 69 70 6c 65 20 3d 20 4d 61 74 68 2e 72  ultiple = Math.r
d650: 6f 75 6e 64 28 65 78 70 72 20 2f 20 73 75 62 64  ound(expr / subd
d660: 69 76 69 73 69 6f 6e 29 3b 0a 09 20 20 20 20 20  ivision);..     
d670: 20 20 20 20 20 20 20 76 61 72 20 69 64 65 61 6c         var ideal
d680: 20 3d 20 6d 75 6c 74 69 70 6c 65 20 2a 20 73 75   = multiple * su
d690: 62 64 69 76 69 73 69 6f 6e 3b 0a 09 20 20 20 20  bdivision;..    
d6a0: 20 20 20 20 20 20 20 20 76 61 72 20 64 69 66 66          var diff
d6b0: 20 3d 20 69 64 65 61 6c 20 2d 20 65 78 70 72 3b   = ideal - expr;
d6c0: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
d6d0: 74 75 72 6e 20 65 78 70 72 20 2b 20 64 69 66 66  turn expr + diff
d6e0: 20 2a 20 70 65 72 63 65 6e 74 3b 0a 09 20 20 20   * percent;..   
d6f0: 20 20 20 20 20 7d 2e 62 69 6e 64 28 74 68 69 73       }.bind(this
d700: 2c 20 74 68 69 73 2e 5f 65 78 70 72 2c 20 6e 65  , this._expr, ne
d710: 77 20 74 68 69 73 2e 63 6f 6e 73 74 72 75 63 74  w this.construct
d720: 6f 72 28 73 75 62 64 69 76 29 2c 20 70 65 72 63  or(subdiv), perc
d730: 65 6e 74 29 3b 0a 09 20 20 20 20 20 20 20 20 72  ent);..        r
d740: 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20  eturn this;..   
d750: 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20   };..    /**... 
d760: 2a 20 20 41 64 64 73 20 74 68 65 20 63 6c 6f 63  *  Adds the cloc
d770: 6b 20 74 69 6d 65 20 74 6f 20 74 68 65 20 74 69  k time to the ti
d780: 6d 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 74  me expression at
d790: 20 74 68 65 20 0a 09 09 20 2a 20 20 6d 6f 6d 65   the ... *  mome
d7a0: 6e 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6f 6e  nt of evaluation
d7b0: 2e 20 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e  . ... *  @return
d7c0: 20 20 7b 54 6f 6e 65 2e 54 69 6d 65 7d 20 20 74    {Tone.Time}  t
d7d0: 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  his... */..    T
d7e0: 6f 6e 65 2e 54 69 6d 65 2e 70 72 6f 74 6f 74 79  one.Time.prototy
d7f0: 70 65 2e 61 64 64 4e 6f 77 20 3d 20 66 75 6e 63  pe.addNow = func
d800: 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
d810: 20 20 20 74 68 69 73 2e 5f 70 6c 75 73 4e 6f 77     this._plusNow
d820: 20 3d 20 74 72 75 65 3b 0a 09 20 20 20 20 20 20   = true;..      
d830: 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09    return this;..
d840: 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
d850: 09 09 20 2a 20 20 40 6f 76 65 72 72 69 64 65 0a  .. *  @override.
d860: 09 09 20 2a 20 20 4f 76 65 72 72 69 64 65 20 74  .. *  Override t
d870: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
d880: 20 72 65 74 75 72 6e 20 77 68 65 6e 20 6e 6f 20   return when no 
d890: 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 70 61  arguments are pa
d8a0: 73 73 65 64 20 69 6e 2e 0a 09 09 20 2a 20 20 54  ssed in.... *  T
d8b0: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
d8c0: 20 69 73 20 27 6e 6f 77 27 0a 09 09 20 2a 20 20   is 'now'... *  
d8d0: 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09  @private... */..
d8e0: 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65 2e 70 72      Tone.Time.pr
d8f0: 6f 74 6f 74 79 70 65 2e 5f 64 65 66 61 75 6c 74  ototype._default
d900: 45 78 70 72 20 3d 20 66 75 6e 63 74 69 6f 6e 20  Expr = function 
d910: 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 74 68  () {..        th
d920: 69 73 2e 5f 70 6c 75 73 4e 6f 77 20 3d 20 74 72  is._plusNow = tr
d930: 75 65 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74  ue;..        ret
d940: 75 72 6e 20 74 68 69 73 2e 5f 6e 6f 4f 70 3b 0a  urn this._noOp;.
d950: 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
d960: 0a 09 09 20 2a 20 20 43 6f 70 69 65 73 20 74 68  ... *  Copies th
d970: 65 20 76 61 6c 75 65 20 6f 66 20 74 69 6d 65 20  e value of time 
d980: 74 6f 20 74 68 69 73 20 54 69 6d 65 0a 09 09 20  to this Time... 
d990: 2a 20 20 40 70 61 72 61 6d 20 7b 54 6f 6e 65 2e  *  @param {Tone.
d9a0: 54 69 6d 65 7d 20 74 69 6d 65 0a 09 09 20 2a 20  Time} time... * 
d9b0: 20 40 72 65 74 75 72 6e 20 20 7b 54 69 6d 65 7d   @return  {Time}
d9c0: 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
d9d0: 2e 54 69 6d 65 2e 70 72 6f 74 6f 74 79 70 65 2e  .Time.prototype.
d9e0: 63 6f 70 79 20 3d 20 66 75 6e 63 74 69 6f 6e 20  copy = function 
d9f0: 28 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20  (time) {..      
da00: 20 20 54 6f 6e 65 2e 54 69 6d 65 42 61 73 65 2e    Tone.TimeBase.
da10: 70 72 6f 74 6f 74 79 70 65 2e 63 6f 70 79 2e 63  prototype.copy.c
da20: 61 6c 6c 28 74 68 69 73 2c 20 74 69 6d 65 29 3b  all(this, time);
da30: 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
da40: 70 6c 75 73 4e 6f 77 20 3d 20 74 69 6d 65 2e 5f  plusNow = time._
da50: 70 6c 75 73 4e 6f 77 3b 0a 09 20 20 20 20 20 20  plusNow;..      
da60: 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09    return this;..
da70: 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2f 43 4f      };..    //CO
da80: 4e 56 45 52 53 49 4f 4e 53 2f 2f 2f 2f 2f 2f 2f  NVERSIONS///////
da90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
daa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dac0: 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 2f 2a 2a  ///////..    /**
dad0: 0a 09 09 20 2a 20 20 43 6f 6e 76 65 72 74 20 61  ... *  Convert a
dae0: 20 54 69 6d 65 20 74 6f 20 4e 6f 74 61 74 69 6f   Time to Notatio
daf0: 6e 2e 20 56 61 6c 75 65 73 20 77 69 6c 6c 20 62  n. Values will b
db00: 65 20 74 68 72 65 73 68 6f 6c 64 65 64 20 74 6f  e thresholded to
db10: 20 74 68 65 20 6e 65 61 72 65 73 74 20 31 32 38   the nearest 128
db20: 74 68 20 6e 6f 74 65 2e 20 0a 09 09 20 2a 20 20  th note. ... *  
db30: 40 72 65 74 75 72 6e 20 7b 4e 6f 74 61 74 69 6f  @return {Notatio
db40: 6e 7d 20 0a 09 09 20 2a 20 20 40 65 78 61 6d 70  n} ... *  @examp
db50: 6c 65 0a 09 09 20 2a 20 2f 2f 69 66 20 74 68 65  le... * //if the
db60: 20 54 72 61 6e 73 70 6f 72 74 20 69 73 20 61 74   Transport is at
db70: 20 31 32 30 62 70 6d 3a 0a 09 09 20 2a 20 54 6f   120bpm:... * To
db80: 6e 65 2e 54 69 6d 65 28 32 29 2e 74 6f 4e 6f 74  ne.Time(2).toNot
db90: 61 74 69 6f 6e 28 29 3b 2f 2f 72 65 74 75 72 6e  ation();//return
dba0: 73 20 22 31 6d 22 0a 09 09 20 2a 2f 0a 09 20 20  s "1m"... */..  
dbb0: 20 20 54 6f 6e 65 2e 54 69 6d 65 2e 70 72 6f 74    Tone.Time.prot
dbc0: 6f 74 79 70 65 2e 74 6f 4e 6f 74 61 74 69 6f 6e  otype.toNotation
dbd0: 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b   = function () {
dbe0: 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 74 69  ..        var ti
dbf0: 6d 65 20 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f  me = this.toSeco
dc00: 6e 64 73 28 29 3b 0a 09 20 20 20 20 20 20 20 20  nds();..        
dc10: 76 61 72 20 74 65 73 74 4e 6f 74 61 74 69 6f 6e  var testNotation
dc20: 73 20 3d 20 5b 0a 09 20 20 20 20 20 20 20 20 20  s = [..         
dc30: 20 20 20 27 31 6d 27 2c 0a 09 20 20 20 20 20 20     '1m',..      
dc40: 20 20 20 20 20 20 27 32 6e 27 2c 0a 09 20 20 20        '2n',..   
dc50: 20 20 20 20 20 20 20 20 20 27 34 6e 27 2c 0a 09           '4n',..
dc60: 20 20 20 20 20 20 20 20 20 20 20 20 27 38 6e 27              '8n'
dc70: 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
dc80: 31 36 6e 27 2c 0a 09 20 20 20 20 20 20 20 20 20  16n',..         
dc90: 20 20 20 27 33 32 6e 27 2c 0a 09 20 20 20 20 20     '32n',..     
dca0: 20 20 20 20 20 20 20 27 36 34 6e 27 2c 0a 09 20         '64n',.. 
dcb0: 20 20 20 20 20 20 20 20 20 20 20 27 31 32 38 6e             '128n
dcc0: 27 0a 09 20 20 20 20 20 20 20 20 5d 3b 0a 09 20  '..        ];.. 
dcd0: 20 20 20 20 20 20 20 76 61 72 20 72 65 74 4e 6f         var retNo
dce0: 74 61 74 69 6f 6e 20 3d 20 74 68 69 73 2e 5f 74  tation = this._t
dcf0: 6f 4e 6f 74 61 74 69 6f 6e 48 65 6c 70 65 72 28  oNotationHelper(
dd00: 74 69 6d 65 2c 20 74 65 73 74 4e 6f 74 61 74 69  time, testNotati
dd10: 6f 6e 73 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  ons);..        /
dd20: 2f 74 72 79 20 74 68 65 20 73 61 6d 65 20 74 68  /try the same th
dd30: 69 6e 67 20 62 75 74 20 77 69 74 68 20 74 72 69  ing but with tri
dd40: 70 65 6c 65 74 73 0a 09 20 20 20 20 20 20 20 20  pelets..        
dd50: 76 61 72 20 74 65 73 74 54 72 69 70 6c 65 74 4e  var testTripletN
dd60: 6f 74 61 74 69 6f 6e 73 20 3d 20 5b 0a 09 20 20  otations = [..  
dd70: 20 20 20 20 20 20 20 20 20 20 27 31 6d 27 2c 0a            '1m',.
dd80: 09 20 20 20 20 20 20 20 20 20 20 20 20 27 32 6e  .            '2n
dd90: 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ',..            
dda0: 27 32 74 27 2c 0a 09 20 20 20 20 20 20 20 20 20  '2t',..         
ddb0: 20 20 20 27 34 6e 27 2c 0a 09 20 20 20 20 20 20     '4n',..      
ddc0: 20 20 20 20 20 20 27 34 74 27 2c 0a 09 20 20 20        '4t',..   
ddd0: 20 20 20 20 20 20 20 20 20 27 38 6e 27 2c 0a 09           '8n',..
dde0: 20 20 20 20 20 20 20 20 20 20 20 20 27 38 74 27              '8t'
ddf0: 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
de00: 31 36 6e 27 2c 0a 09 20 20 20 20 20 20 20 20 20  16n',..         
de10: 20 20 20 27 31 36 74 27 2c 0a 09 20 20 20 20 20     '16t',..     
de20: 20 20 20 20 20 20 20 27 33 32 6e 27 2c 0a 09 20         '32n',.. 
de30: 20 20 20 20 20 20 20 20 20 20 20 27 33 32 74 27             '32t'
de40: 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
de50: 36 34 6e 27 2c 0a 09 20 20 20 20 20 20 20 20 20  64n',..         
de60: 20 20 20 27 36 34 74 27 2c 0a 09 20 20 20 20 20     '64t',..     
de70: 20 20 20 20 20 20 20 27 31 32 38 6e 27 0a 09 20         '128n'.. 
de80: 20 20 20 20 20 20 20 5d 3b 0a 09 20 20 20 20 20         ];..     
de90: 20 20 20 76 61 72 20 72 65 74 54 72 69 70 6c 65     var retTriple
dea0: 74 4e 6f 74 61 74 69 6f 6e 20 3d 20 74 68 69 73  tNotation = this
deb0: 2e 5f 74 6f 4e 6f 74 61 74 69 6f 6e 48 65 6c 70  ._toNotationHelp
dec0: 65 72 28 74 69 6d 65 2c 20 74 65 73 74 54 72 69  er(time, testTri
ded0: 70 6c 65 74 4e 6f 74 61 74 69 6f 6e 73 29 3b 0a  pletNotations);.
dee0: 09 20 20 20 20 20 20 20 20 2f 2f 63 68 6f 6f 73  .        //choos
def0: 65 20 74 68 65 20 73 69 6d 70 6c 65 72 20 65 78  e the simpler ex
df00: 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20  pression of the 
df10: 74 77 6f 0a 09 20 20 20 20 20 20 20 20 69 66 20  two..        if 
df20: 28 72 65 74 54 72 69 70 6c 65 74 4e 6f 74 61 74  (retTripletNotat
df30: 69 6f 6e 2e 73 70 6c 69 74 28 27 2b 27 29 2e 6c  ion.split('+').l
df40: 65 6e 67 74 68 20 3c 20 72 65 74 4e 6f 74 61 74  ength < retNotat
df50: 69 6f 6e 2e 73 70 6c 69 74 28 27 2b 27 29 2e 6c  ion.split('+').l
df60: 65 6e 67 74 68 29 20 7b 0a 09 20 20 20 20 20 20  ength) {..      
df70: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 74        return ret
df80: 54 72 69 70 6c 65 74 4e 6f 74 61 74 69 6f 6e 3b  TripletNotation;
df90: 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
dfa0: 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
dfb0: 72 65 74 75 72 6e 20 72 65 74 4e 6f 74 61 74 69  return retNotati
dfc0: 6f 6e 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  on;..        }..
dfd0: 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
dfe0: 09 09 20 2a 20 20 48 65 6c 70 65 72 20 6d 65 74  .. *  Helper met
dff0: 68 6f 64 20 66 6f 72 20 54 6f 6e 65 2e 74 6f 4e  hod for Tone.toN
e000: 6f 74 61 74 69 6f 6e 0a 09 09 20 2a 20 20 40 70  otation... *  @p
e010: 61 72 61 6d 20 7b 4e 75 6d 62 65 72 7d 20 75 6e  aram {Number} un
e020: 69 74 73 20 0a 09 09 20 2a 20 20 40 70 61 72 61  its ... *  @para
e030: 6d 20 7b 41 72 72 61 79 7d 20 74 65 73 74 4e 6f  m {Array} testNo
e040: 74 61 74 69 6f 6e 73 0a 09 09 20 2a 20 20 40 72  tations... *  @r
e050: 65 74 75 72 6e 20 7b 53 74 72 69 6e 67 7d 0a 09  eturn {String}..
e060: 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
e070: 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69   */..    Tone.Ti
e080: 6d 65 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 74 6f  me.prototype._to
e090: 4e 6f 74 61 74 69 6f 6e 48 65 6c 70 65 72 20 3d  NotationHelper =
e0a0: 20 66 75 6e 63 74 69 6f 6e 20 28 75 6e 69 74 73   function (units
e0b0: 2c 20 74 65 73 74 4e 6f 74 61 74 69 6f 6e 73 29  , testNotations)
e0c0: 20 7b 0a 09 20 20 20 20 20 20 20 20 2f 2f 74 68   {..        //th
e0d0: 65 20 74 68 72 65 73 68 6f 6c 64 20 69 73 20 74  e threshold is t
e0e0: 68 65 20 6c 61 73 74 20 76 61 6c 75 65 20 69 6e  he last value in
e0f0: 20 74 68 65 20 61 72 72 61 79 0a 09 20 20 20 20   the array..    
e100: 20 20 20 20 76 61 72 20 74 68 72 65 73 68 6f 6c      var threshol
e110: 64 20 3d 20 74 68 69 73 2e 5f 6e 6f 74 61 74 69  d = this._notati
e120: 6f 6e 54 6f 55 6e 69 74 73 28 74 65 73 74 4e 6f  onToUnits(testNo
e130: 74 61 74 69 6f 6e 73 5b 74 65 73 74 4e 6f 74 61  tations[testNota
e140: 74 69 6f 6e 73 2e 6c 65 6e 67 74 68 20 2d 20 31  tions.length - 1
e150: 5d 29 3b 0a 09 20 20 20 20 20 20 20 20 76 61 72  ]);..        var
e160: 20 72 65 74 4e 6f 74 61 74 69 6f 6e 20 3d 20 27   retNotation = '
e170: 27 3b 0a 09 20 20 20 20 20 20 20 20 66 6f 72 20  ';..        for 
e180: 28 76 61 72 20 69 20 3d 20 30 3b 20 69 20 3c 20  (var i = 0; i < 
e190: 74 65 73 74 4e 6f 74 61 74 69 6f 6e 73 2e 6c 65  testNotations.le
e1a0: 6e 67 74 68 3b 20 69 2b 2b 29 20 7b 0a 09 20 20  ngth; i++) {..  
e1b0: 20 20 20 20 20 20 20 20 20 20 76 61 72 20 6e 6f            var no
e1c0: 74 61 74 69 6f 6e 54 69 6d 65 20 3d 20 74 68 69  tationTime = thi
e1d0: 73 2e 5f 6e 6f 74 61 74 69 6f 6e 54 6f 55 6e 69  s._notationToUni
e1e0: 74 73 28 74 65 73 74 4e 6f 74 61 74 69 6f 6e 73  ts(testNotations
e1f0: 5b 69 5d 29 3b 0a 09 20 20 20 20 20 20 20 20 20  [i]);..         
e200: 20 20 20 2f 2f 61 63 63 6f 75 6e 74 20 66 6f 72     //account for
e210: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
e220: 65 72 72 6f 72 73 20 28 69 2e 65 2e 20 72 6f 75  errors (i.e. rou
e230: 6e 64 20 75 70 20 69 66 20 74 68 65 20 76 61 6c  nd up if the val
e240: 75 65 20 69 73 20 30 2e 39 39 39 39 39 39 29 0a  ue is 0.999999).
e250: 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72  .            var
e260: 20 6d 75 6c 74 69 70 6c 65 20 3d 20 75 6e 69 74   multiple = unit
e270: 73 20 2f 20 6e 6f 74 61 74 69 6f 6e 54 69 6d 65  s / notationTime
e280: 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 76  ;..            v
e290: 61 72 20 66 6c 6f 61 74 69 6e 67 50 6f 69 6e 74  ar floatingPoint
e2a0: 45 72 72 6f 72 20 3d 20 30 2e 30 30 30 30 30 31  Error = 0.000001
e2b0: 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 69  ;..            i
e2c0: 66 20 28 31 20 2d 20 6d 75 6c 74 69 70 6c 65 20  f (1 - multiple 
e2d0: 25 20 31 20 3c 20 66 6c 6f 61 74 69 6e 67 50 6f  % 1 < floatingPo
e2e0: 69 6e 74 45 72 72 6f 72 29 20 7b 0a 09 20 20 20  intError) {..   
e2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 75 6c               mul
e300: 74 69 70 6c 65 20 2b 3d 20 66 6c 6f 61 74 69 6e  tiple += floatin
e310: 67 50 6f 69 6e 74 45 72 72 6f 72 3b 0a 09 20 20  gPointError;..  
e320: 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20            }..   
e330: 20 20 20 20 20 20 20 20 20 6d 75 6c 74 69 70 6c           multipl
e340: 65 20 3d 20 4d 61 74 68 2e 66 6c 6f 6f 72 28 6d  e = Math.floor(m
e350: 75 6c 74 69 70 6c 65 29 3b 0a 09 20 20 20 20 20  ultiple);..     
e360: 20 20 20 20 20 20 20 69 66 20 28 6d 75 6c 74 69         if (multi
e370: 70 6c 65 20 3e 20 30 29 20 7b 0a 09 20 20 20 20  ple > 0) {..    
e380: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
e390: 6d 75 6c 74 69 70 6c 65 20 3d 3d 3d 20 31 29 20  multiple === 1) 
e3a0: 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e3b0: 20 20 20 20 20 20 20 72 65 74 4e 6f 74 61 74 69         retNotati
e3c0: 6f 6e 20 2b 3d 20 74 65 73 74 4e 6f 74 61 74 69  on += testNotati
e3d0: 6f 6e 73 5b 69 5d 3b 0a 09 20 20 20 20 20 20 20  ons[i];..       
e3e0: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else 
e3f0: 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e400: 20 20 20 20 20 20 20 72 65 74 4e 6f 74 61 74 69         retNotati
e410: 6f 6e 20 2b 3d 20 6d 75 6c 74 69 70 6c 65 2e 74  on += multiple.t
e420: 6f 53 74 72 69 6e 67 28 29 20 2b 20 27 2a 27 20  oString() + '*' 
e430: 2b 20 74 65 73 74 4e 6f 74 61 74 69 6f 6e 73 5b  + testNotations[
e440: 69 5d 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  i];..           
e450: 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
e460: 20 20 20 20 20 20 20 20 75 6e 69 74 73 20 2d 3d          units -=
e470: 20 6d 75 6c 74 69 70 6c 65 20 2a 20 6e 6f 74 61   multiple * nota
e480: 74 69 6f 6e 54 69 6d 65 3b 0a 09 20 20 20 20 20  tionTime;..     
e490: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 75             if (u
e4a0: 6e 69 74 73 20 3c 20 74 68 72 65 73 68 6f 6c 64  nits < threshold
e4b0: 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
e4c0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
e4d0: 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e4e0: 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20   } else {..     
e4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
e500: 65 74 4e 6f 74 61 74 69 6f 6e 20 2b 3d 20 27 20  etNotation += ' 
e510: 2b 20 27 3b 0a 09 20 20 20 20 20 20 20 20 20 20  + ';..          
e520: 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
e530: 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
e540: 7d 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 72  }..        if (r
e550: 65 74 4e 6f 74 61 74 69 6f 6e 20 3d 3d 3d 20 27  etNotation === '
e560: 27 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  ') {..          
e570: 20 20 72 65 74 4e 6f 74 61 74 69 6f 6e 20 3d 20    retNotation = 
e580: 27 30 27 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a  '0';..        }.
e590: 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
e5a0: 72 65 74 4e 6f 74 61 74 69 6f 6e 3b 0a 09 20 20  retNotation;..  
e5b0: 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    };..    /**...
e5c0: 20 2a 20 20 43 6f 6e 76 65 72 74 20 61 20 6e 6f   *  Convert a no
e5d0: 74 61 74 69 6f 6e 20 76 61 6c 75 65 20 74 6f 20  tation value to 
e5e0: 74 68 65 20 63 75 72 72 65 6e 74 20 75 6e 69 74  the current unit
e5f0: 73 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20  s... *  @param  
e600: 7b 4e 6f 74 61 74 69 6f 6e 7d 20 20 6e 6f 74 61  {Notation}  nota
e610: 74 69 6f 6e 20 0a 09 09 20 2a 20 20 40 72 65 74  tion ... *  @ret
e620: 75 72 6e 20 20 7b 4e 75 6d 62 65 72 7d 20 0a 09  urn  {Number} ..
e630: 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
e640: 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69   */..    Tone.Ti
e650: 6d 65 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 6e 6f  me.prototype._no
e660: 74 61 74 69 6f 6e 54 6f 55 6e 69 74 73 20 3d 20  tationToUnits = 
e670: 66 75 6e 63 74 69 6f 6e 20 28 6e 6f 74 61 74 69  function (notati
e680: 6f 6e 29 20 7b 0a 09 20 20 20 20 20 20 20 20 76  on) {..        v
e690: 61 72 20 70 72 69 6d 61 72 79 45 78 70 72 73 20  ar primaryExprs 
e6a0: 3d 20 74 68 69 73 2e 5f 70 72 69 6d 61 72 79 45  = this._primaryE
e6b0: 78 70 72 65 73 73 69 6f 6e 73 3b 0a 09 20 20 20  xpressions;..   
e6c0: 20 20 20 20 20 76 61 72 20 6e 6f 74 61 74 69 6f       var notatio
e6d0: 6e 45 78 70 72 73 20 3d 20 5b 0a 09 20 20 20 20  nExprs = [..    
e6e0: 20 20 20 20 20 20 20 20 70 72 69 6d 61 72 79 45          primaryE
e6f0: 78 70 72 73 2e 6e 2c 0a 09 20 20 20 20 20 20 20  xprs.n,..       
e700: 20 20 20 20 20 70 72 69 6d 61 72 79 45 78 70 72       primaryExpr
e710: 73 2e 74 2c 0a 09 20 20 20 20 20 20 20 20 20 20  s.t,..          
e720: 20 20 70 72 69 6d 61 72 79 45 78 70 72 73 2e 6d    primaryExprs.m
e730: 0a 09 20 20 20 20 20 20 20 20 5d 3b 0a 09 20 20  ..        ];..  
e740: 20 20 20 20 20 20 66 6f 72 20 28 76 61 72 20 69        for (var i
e750: 20 3d 20 30 3b 20 69 20 3c 20 6e 6f 74 61 74 69   = 0; i < notati
e760: 6f 6e 45 78 70 72 73 2e 6c 65 6e 67 74 68 3b 20  onExprs.length; 
e770: 69 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20 20 20  i++) {..        
e780: 20 20 20 20 76 61 72 20 65 78 70 72 20 3d 20 6e      var expr = n
e790: 6f 74 61 74 69 6f 6e 45 78 70 72 73 5b 69 5d 3b  otationExprs[i];
e7a0: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61  ..            va
e7b0: 72 20 6d 61 74 63 68 20 3d 20 6e 6f 74 61 74 69  r match = notati
e7c0: 6f 6e 2e 6d 61 74 63 68 28 65 78 70 72 2e 72 65  on.match(expr.re
e7d0: 67 65 78 70 29 3b 0a 09 20 20 20 20 20 20 20 20  gexp);..        
e7e0: 20 20 20 20 69 66 20 28 6d 61 74 63 68 29 20 7b      if (match) {
e7f0: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e800: 20 20 72 65 74 75 72 6e 20 65 78 70 72 2e 6d 65    return expr.me
e810: 74 68 6f 64 2e 63 61 6c 6c 28 74 68 69 73 2c 20  thod.call(this, 
e820: 6d 61 74 63 68 5b 31 5d 29 3b 0a 09 20 20 20 20  match[1]);..    
e830: 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
e840: 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a 09 20 20     }..    };..  
e850: 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 52 65 74 75    /**... *  Retu
e860: 72 6e 20 74 68 65 20 74 69 6d 65 20 65 6e 63 6f  rn the time enco
e870: 64 65 64 20 61 73 20 42 61 72 73 3a 42 65 61 74  ded as Bars:Beat
e880: 73 3a 53 69 78 74 65 65 6e 74 68 73 2e 0a 09 09  s:Sixteenths....
e890: 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 42 61   *  @return  {Ba
e8a0: 72 73 42 65 61 74 73 53 69 78 74 65 65 6e 74 68  rsBeatsSixteenth
e8b0: 73 7d 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  s}... */..    To
e8c0: 6e 65 2e 54 69 6d 65 2e 70 72 6f 74 6f 74 79 70  ne.Time.prototyp
e8d0: 65 2e 74 6f 42 61 72 73 42 65 61 74 73 53 69 78  e.toBarsBeatsSix
e8e0: 74 65 65 6e 74 68 73 20 3d 20 66 75 6e 63 74 69  teenths = functi
e8f0: 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
e900: 20 76 61 72 20 71 75 61 72 74 65 72 54 69 6d 65   var quarterTime
e910: 20 3d 20 74 68 69 73 2e 5f 62 65 61 74 73 54 6f   = this._beatsTo
e920: 55 6e 69 74 73 28 31 29 3b 0a 09 20 20 20 20 20  Units(1);..     
e930: 20 20 20 76 61 72 20 71 75 61 72 74 65 72 73 20     var quarters 
e940: 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73  = this.toSeconds
e950: 28 29 20 2f 20 71 75 61 72 74 65 72 54 69 6d 65  () / quarterTime
e960: 3b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 6d  ;..        var m
e970: 65 61 73 75 72 65 73 20 3d 20 4d 61 74 68 2e 66  easures = Math.f
e980: 6c 6f 6f 72 28 71 75 61 72 74 65 72 73 20 2f 20  loor(quarters / 
e990: 74 68 69 73 2e 5f 74 69 6d 65 53 69 67 6e 61 74  this._timeSignat
e9a0: 75 72 65 28 29 29 3b 0a 09 20 20 20 20 20 20 20  ure());..       
e9b0: 20 76 61 72 20 73 69 78 74 65 65 6e 74 68 73 20   var sixteenths 
e9c0: 3d 20 71 75 61 72 74 65 72 73 20 25 20 31 20 2a  = quarters % 1 *
e9d0: 20 34 3b 0a 09 20 20 20 20 20 20 20 20 71 75 61   4;..        qua
e9e0: 72 74 65 72 73 20 3d 20 4d 61 74 68 2e 66 6c 6f  rters = Math.flo
e9f0: 6f 72 28 71 75 61 72 74 65 72 73 29 20 25 20 74  or(quarters) % t
ea00: 68 69 73 2e 5f 74 69 6d 65 53 69 67 6e 61 74 75  his._timeSignatu
ea10: 72 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 73  re();..        s
ea20: 69 78 74 65 65 6e 74 68 73 20 3d 20 73 69 78 74  ixteenths = sixt
ea30: 65 65 6e 74 68 73 2e 74 6f 53 74 72 69 6e 67 28  eenths.toString(
ea40: 29 3b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
ea50: 73 69 78 74 65 65 6e 74 68 73 2e 6c 65 6e 67 74  sixteenths.lengt
ea60: 68 20 3e 20 33 29 20 7b 0a 09 20 20 20 20 20 20  h > 3) {..      
ea70: 20 20 20 20 20 20 73 69 78 74 65 65 6e 74 68 73        sixteenths
ea80: 20 3d 20 70 61 72 73 65 46 6c 6f 61 74 28 73 69   = parseFloat(si
ea90: 78 74 65 65 6e 74 68 73 29 2e 74 6f 46 69 78 65  xteenths).toFixe
eaa0: 64 28 33 29 3b 0a 09 20 20 20 20 20 20 20 20 7d  d(3);..        }
eab0: 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 70 72  ..        var pr
eac0: 6f 67 72 65 73 73 20 3d 20 5b 0a 09 20 20 20 20  ogress = [..    
ead0: 20 20 20 20 20 20 20 20 6d 65 61 73 75 72 65 73          measures
eae0: 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 71  ,..            q
eaf0: 75 61 72 74 65 72 73 2c 0a 09 20 20 20 20 20 20  uarters,..      
eb00: 20 20 20 20 20 20 73 69 78 74 65 65 6e 74 68 73        sixteenths
eb10: 0a 09 20 20 20 20 20 20 20 20 5d 3b 0a 09 20 20  ..        ];..  
eb20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 70 72 6f        return pro
eb30: 67 72 65 73 73 2e 6a 6f 69 6e 28 27 3a 27 29 3b  gress.join(':');
eb40: 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
eb50: 2a 0a 09 09 20 2a 20 20 52 65 74 75 72 6e 20 74  *... *  Return t
eb60: 68 65 20 74 69 6d 65 20 69 6e 20 74 69 63 6b 73  he time in ticks
eb70: 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20  .... *  @return 
eb80: 20 7b 54 69 63 6b 73 7d 0a 09 09 20 2a 2f 0a 09   {Ticks}... */..
eb90: 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65 2e 70 72      Tone.Time.pr
eba0: 6f 74 6f 74 79 70 65 2e 74 6f 54 69 63 6b 73 20  ototype.toTicks 
ebb0: 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  = function () {.
ebc0: 09 20 20 20 20 20 20 20 20 76 61 72 20 71 75 61  .        var qua
ebd0: 72 74 65 72 54 69 6d 65 20 3d 20 74 68 69 73 2e  rterTime = this.
ebe0: 5f 62 65 61 74 73 54 6f 55 6e 69 74 73 28 31 29  _beatsToUnits(1)
ebf0: 3b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 71  ;..        var q
ec00: 75 61 72 74 65 72 73 20 3d 20 74 68 69 73 2e 65  uarters = this.e
ec10: 76 61 6c 28 29 20 2f 20 71 75 61 72 74 65 72 54  val() / quarterT
ec20: 69 6d 65 3b 0a 09 20 20 20 20 20 20 20 20 72 65  ime;..        re
ec30: 74 75 72 6e 20 4d 61 74 68 2e 66 6c 6f 6f 72 28  turn Math.floor(
ec40: 71 75 61 72 74 65 72 73 20 2a 20 54 6f 6e 65 2e  quarters * Tone.
ec50: 54 72 61 6e 73 70 6f 72 74 2e 50 50 51 29 3b 0a  Transport.PPQ);.
ec60: 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
ec70: 0a 09 09 20 2a 20 20 52 65 74 75 72 6e 20 74 68  ... *  Return th
ec80: 65 20 74 69 6d 65 20 69 6e 20 73 61 6d 70 6c 65  e time in sample
ec90: 73 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20  s... *  @return 
eca0: 20 7b 53 61 6d 70 6c 65 73 7d 20 20 0a 09 09 20   {Samples}  ... 
ecb0: 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69 6d  */..    Tone.Tim
ecc0: 65 2e 70 72 6f 74 6f 74 79 70 65 2e 74 6f 53 61  e.prototype.toSa
ecd0: 6d 70 6c 65 73 20 3d 20 66 75 6e 63 74 69 6f 6e  mples = function
ece0: 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 72   () {..        r
ecf0: 65 74 75 72 6e 20 74 68 69 73 2e 74 6f 53 65 63  eturn this.toSec
ed00: 6f 6e 64 73 28 29 20 2a 20 74 68 69 73 2e 63 6f  onds() * this.co
ed10: 6e 74 65 78 74 2e 73 61 6d 70 6c 65 52 61 74 65  ntext.sampleRate
ed20: 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  ;..    };..    /
ed30: 2a 2a 0a 09 09 20 2a 20 20 52 65 74 75 72 6e 20  **... *  Return 
ed40: 74 68 65 20 74 69 6d 65 20 61 73 20 61 20 66 72  the time as a fr
ed50: 65 71 75 65 6e 63 79 20 76 61 6c 75 65 0a 09 09  equency value...
ed60: 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 46 72   *  @return  {Fr
ed70: 65 71 75 65 6e 63 79 7d 20 0a 09 09 20 2a 20 20  equency} ... *  
ed80: 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 54 6f  @example... * To
ed90: 6e 65 2e 54 69 6d 65 28 32 29 2e 74 6f 46 72 65  ne.Time(2).toFre
eda0: 71 75 65 6e 63 79 28 29 3b 20 2f 2f 30 2e 35 0a  quency(); //0.5.
edb0: 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
edc0: 54 69 6d 65 2e 70 72 6f 74 6f 74 79 70 65 2e 74  Time.prototype.t
edd0: 6f 46 72 65 71 75 65 6e 63 79 20 3d 20 66 75 6e  oFrequency = fun
ede0: 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
edf0: 20 20 20 20 72 65 74 75 72 6e 20 31 20 2f 20 74      return 1 / t
ee00: 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28 29 3b  his.toSeconds();
ee10: 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
ee20: 2a 0a 09 09 20 2a 20 20 52 65 74 75 72 6e 20 74  *... *  Return t
ee30: 68 65 20 74 69 6d 65 20 69 6e 20 73 65 63 6f 6e  he time in secon
ee40: 64 73 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72  ds.... *  @retur
ee50: 6e 20 20 7b 53 65 63 6f 6e 64 73 7d 20 0a 09 09  n  {Seconds} ...
ee60: 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69   */..    Tone.Ti
ee70: 6d 65 2e 70 72 6f 74 6f 74 79 70 65 2e 74 6f 53  me.prototype.toS
ee80: 65 63 6f 6e 64 73 20 3d 20 66 75 6e 63 74 69 6f  econds = functio
ee90: 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
eea0: 72 65 74 75 72 6e 20 74 68 69 73 2e 65 76 61 6c  return this.eval
eeb0: 28 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  ();..    };..   
eec0: 20 2f 2a 2a 0a 09 09 20 2a 20 20 52 65 74 75 72   /**... *  Retur
eed0: 6e 20 74 68 65 20 74 69 6d 65 20 69 6e 20 6d 69  n the time in mi
eee0: 6c 6c 69 73 65 63 6f 6e 64 73 2e 0a 09 09 20 2a  lliseconds.... *
eef0: 20 20 40 72 65 74 75 72 6e 20 20 7b 4d 69 6c 6c    @return  {Mill
ef00: 69 73 65 63 6f 6e 64 73 7d 20 0a 09 09 20 2a 2f  iseconds} ... */
ef10: 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65 2e  ..    Tone.Time.
ef20: 70 72 6f 74 6f 74 79 70 65 2e 74 6f 4d 69 6c 6c  prototype.toMill
ef30: 69 73 65 63 6f 6e 64 73 20 3d 20 66 75 6e 63 74  iseconds = funct
ef40: 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
ef50: 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 74 6f    return this.to
ef60: 53 65 63 6f 6e 64 73 28 29 20 2a 20 31 30 30 30  Seconds() * 1000
ef70: 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  ;..    };..    /
ef80: 2a 2a 0a 09 09 20 2a 20 20 52 65 74 75 72 6e 20  **... *  Return 
ef90: 74 68 65 20 74 69 6d 65 20 69 6e 20 73 65 63 6f  the time in seco
efa0: 6e 64 73 2e 0a 09 09 20 2a 20 20 40 72 65 74 75  nds.... *  @retu
efb0: 72 6e 20 20 7b 53 65 63 6f 6e 64 73 7d 20 0a 09  rn  {Seconds} ..
efc0: 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54  . */..    Tone.T
efd0: 69 6d 65 2e 70 72 6f 74 6f 74 79 70 65 2e 65 76  ime.prototype.ev
efe0: 61 6c 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  al = function ()
eff0: 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20   {..        var 
f000: 76 61 6c 20 3d 20 74 68 69 73 2e 5f 65 78 70 72  val = this._expr
f010: 28 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74  ();..        ret
f020: 75 72 6e 20 76 61 6c 20 2b 20 28 74 68 69 73 2e  urn val + (this.
f030: 5f 70 6c 75 73 4e 6f 77 20 3f 20 74 68 69 73 2e  _plusNow ? this.
f040: 6e 6f 77 28 29 20 3a 20 30 29 3b 0a 09 20 20 20  now() : 0);..   
f050: 20 7d 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20   };..    return 
f060: 54 6f 6e 65 2e 54 69 6d 65 3b 0a 09 7d 29 3b 0a  Tone.Time;..});.
f070: 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e  .Module(function
f080: 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 2f   (Tone) {..    /
f090: 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61 73 73 20  **... *  @class 
f0a0: 54 6f 6e 65 2e 46 72 65 71 75 65 6e 63 79 20 69  Tone.Frequency i
f0b0: 73 20 61 20 70 72 69 6d 69 74 69 76 65 20 74 79  s a primitive ty
f0c0: 70 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20  pe for encoding 
f0d0: 46 72 65 71 75 65 6e 63 79 20 76 61 6c 75 65 73  Frequency values
f0e0: 2e 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  . ... *         
f0f0: 45 76 65 6e 74 75 61 6c 6c 79 20 61 6c 6c 20 74  Eventually all t
f100: 69 6d 65 20 76 61 6c 75 65 73 20 61 72 65 20 65  ime values are e
f110: 76 61 6c 75 61 74 65 64 20 74 6f 20 68 65 72 74  valuated to hert
f120: 7a 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 75  z... *         u
f130: 73 69 6e 67 20 74 68 65 20 60 65 76 61 6c 60 20  sing the `eval` 
f140: 6d 65 74 68 6f 64 2e 20 0a 09 09 20 2a 20 20 40  method. ... *  @
f150: 63 6f 6e 73 74 72 75 63 74 6f 72 0a 09 09 20 2a  constructor... *
f160: 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65    @extends {Tone
f170: 2e 54 69 6d 65 42 61 73 65 7d 0a 09 09 20 2a 20  .TimeBase}... * 
f180: 20 40 70 61 72 61 6d 20 20 7b 53 74 72 69 6e 67   @param  {String
f190: 7c 4e 75 6d 62 65 72 7d 20 20 76 61 6c 20 20 20  |Number}  val   
f1a0: 20 54 68 65 20 74 69 6d 65 20 76 61 6c 75 65 2e   The time value.
f1b0: 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b  ... *  @param  {
f1c0: 53 74 72 69 6e 67 3d 7d 20 20 75 6e 69 74 73 20  String=}  units 
f1d0: 20 54 68 65 20 75 6e 69 74 73 20 6f 66 20 74 68   The units of th
f1e0: 65 20 76 61 6c 75 65 2e 0a 09 09 20 2a 20 20 40  e value.... *  @
f1f0: 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 54 6f 6e  example... * Ton
f200: 65 2e 46 72 65 71 75 65 6e 63 79 28 22 43 33 22  e.Frequency("C3"
f210: 29 2e 65 76 61 6c 28 29 20 2f 2f 20 32 36 31 0a  ).eval() // 261.
f220: 09 09 20 2a 20 54 6f 6e 65 2e 46 72 65 71 75 65  .. * Tone.Freque
f230: 6e 63 79 28 33 38 2c 20 22 6d 69 64 69 22 29 2e  ncy(38, "midi").
f240: 65 76 61 6c 28 29 20 2f 2f 0a 09 09 20 2a 20 54  eval() //... * T
f250: 6f 6e 65 2e 46 72 65 71 75 65 6e 63 79 28 22 43  one.Frequency("C
f260: 33 22 29 2e 74 72 61 6e 73 70 6f 73 65 28 34 29  3").transpose(4)
f270: 2e 65 76 61 6c 28 29 3b 0a 09 09 20 2a 2f 0a 09  .eval();... */..
f280: 20 20 20 20 54 6f 6e 65 2e 46 72 65 71 75 65 6e      Tone.Frequen
f290: 63 79 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 76  cy = function (v
f2a0: 61 6c 2c 20 75 6e 69 74 73 29 20 7b 0a 09 20 20  al, units) {..  
f2b0: 20 20 20 20 20 20 69 66 20 28 74 68 69 73 20 69        if (this i
f2c0: 6e 73 74 61 6e 63 65 6f 66 20 54 6f 6e 65 2e 46  nstanceof Tone.F
f2d0: 72 65 71 75 65 6e 63 79 29 20 7b 0a 09 20 20 20  requency) {..   
f2e0: 20 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 54 69           Tone.Ti
f2f0: 6d 65 42 61 73 65 2e 63 61 6c 6c 28 74 68 69 73  meBase.call(this
f300: 2c 20 76 61 6c 2c 20 75 6e 69 74 73 29 3b 0a 09  , val, units);..
f310: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
f320: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
f330: 74 75 72 6e 20 6e 65 77 20 54 6f 6e 65 2e 46 72  turn new Tone.Fr
f340: 65 71 75 65 6e 63 79 28 76 61 6c 2c 20 75 6e 69  equency(val, uni
f350: 74 73 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a  ts);..        }.
f360: 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e  .    };..    Ton
f370: 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 46 72  e.extend(Tone.Fr
f380: 65 71 75 65 6e 63 79 2c 20 54 6f 6e 65 2e 54 69  equency, Tone.Ti
f390: 6d 65 42 61 73 65 29 3b 0a 09 20 20 20 20 2f 2f  meBase);..    //
f3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 2f  /////////..    /
f3f0: 2f 09 41 55 47 4d 45 4e 54 20 42 41 53 45 20 45  /.AUGMENT BASE E
f400: 58 50 52 45 53 53 49 4f 4e 53 0a 09 20 20 20 20  XPRESSIONS..    
f410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20  ///////////..   
f460: 20 2f 2f 63 6c 6f 6e 65 20 74 68 65 20 65 78 70   //clone the exp
f470: 72 65 73 73 69 6f 6e 73 20 73 6f 20 74 68 61 74  ressions so that
f480: 20 0a 09 20 20 20 20 2f 2f 77 65 20 63 61 6e 20   ..    //we can 
f490: 61 64 64 20 6d 6f 72 65 20 77 69 74 68 6f 75 74  add more without
f4a0: 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 6f   modifying the o
f4b0: 72 69 67 69 6e 61 6c 0a 09 20 20 20 20 54 6f 6e  riginal..    Ton
f4c0: 65 2e 46 72 65 71 75 65 6e 63 79 2e 70 72 6f 74  e.Frequency.prot
f4d0: 6f 74 79 70 65 2e 5f 70 72 69 6d 61 72 79 45 78  otype._primaryEx
f4e0: 70 72 65 73 73 69 6f 6e 73 20 3d 20 4f 62 6a 65  pressions = Obje
f4f0: 63 74 2e 63 72 65 61 74 65 28 54 6f 6e 65 2e 54  ct.create(Tone.T
f500: 69 6d 65 42 61 73 65 2e 70 72 6f 74 6f 74 79 70  imeBase.prototyp
f510: 65 2e 5f 70 72 69 6d 61 72 79 45 78 70 72 65 73  e._primaryExpres
f520: 73 69 6f 6e 73 29 3b 0a 09 20 20 20 20 2f 2a 0a  sions);..    /*.
f530: 09 09 20 2a 20 20 6d 69 64 69 20 74 79 70 65 20  .. *  midi type 
f540: 70 72 69 6d 61 72 79 20 65 78 70 72 65 73 73 69  primary expressi
f550: 6f 6e 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b  on... *  @type {
f560: 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 20 20 40 70  Object}... *  @p
f570: 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20  rivate... */..  
f580: 20 20 54 6f 6e 65 2e 46 72 65 71 75 65 6e 63 79    Tone.Frequency
f590: 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 70 72 69 6d  .prototype._prim
f5a0: 61 72 79 45 78 70 72 65 73 73 69 6f 6e 73 2e 6d  aryExpressions.m
f5b0: 69 64 69 20 3d 20 7b 0a 09 20 20 20 20 20 20 20  idi = {..       
f5c0: 20 72 65 67 65 78 70 3a 20 2f 5e 28 5c 64 2b 28   regexp: /^(\d+(
f5d0: 3f 3a 5c 2e 5c 64 2b 29 3f 6d 69 64 69 29 2f 2c  ?:\.\d+)?midi)/,
f5e0: 0a 09 20 20 20 20 20 20 20 20 6d 65 74 68 6f 64  ..        method
f5f0: 3a 20 66 75 6e 63 74 69 6f 6e 20 28 76 61 6c 75  : function (valu
f600: 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  e) {..          
f610: 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 6d 69    return this.mi
f620: 64 69 54 6f 46 72 65 71 75 65 6e 63 79 28 76 61  diToFrequency(va
f630: 6c 75 65 29 3b 0a 09 20 20 20 20 20 20 20 20 7d  lue);..        }
f640: 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
f650: 0a 09 09 20 2a 20 20 6e 6f 74 65 20 74 79 70 65  ... *  note type
f660: 20 70 72 69 6d 61 72 79 20 65 78 70 72 65 73 73   primary express
f670: 69 6f 6e 0a 09 09 20 2a 20 20 40 74 79 70 65 20  ion... *  @type 
f680: 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 20 20 40  {Object}... *  @
f690: 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20  private... */.. 
f6a0: 20 20 20 54 6f 6e 65 2e 46 72 65 71 75 65 6e 63     Tone.Frequenc
f6b0: 79 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 70 72 69  y.prototype._pri
f6c0: 6d 61 72 79 45 78 70 72 65 73 73 69 6f 6e 73 2e  maryExpressions.
f6d0: 6e 6f 74 65 20 3d 20 7b 0a 09 20 20 20 20 20 20  note = {..      
f6e0: 20 20 72 65 67 65 78 70 3a 20 2f 5e 28 5b 61 2d    regexp: /^([a-
f6f0: 67 5d 7b 31 7d 28 3f 3a 62 7c 23 7c 78 7c 62 62  g]{1}(?:b|#|x|bb
f700: 29 3f 29 28 2d 3f 5b 30 2d 39 5d 2b 29 2f 69 2c  )?)(-?[0-9]+)/i,
f710: 0a 09 20 20 20 20 20 20 20 20 6d 65 74 68 6f 64  ..        method
f720: 3a 20 66 75 6e 63 74 69 6f 6e 20 28 70 69 74 63  : function (pitc
f730: 68 2c 20 6f 63 74 61 76 65 29 20 7b 0a 09 20 20  h, octave) {..  
f740: 20 20 20 20 20 20 20 20 20 20 76 61 72 20 69 6e            var in
f750: 64 65 78 20 3d 20 6e 6f 74 65 54 6f 53 63 61 6c  dex = noteToScal
f760: 65 49 6e 64 65 78 5b 70 69 74 63 68 2e 74 6f 4c  eIndex[pitch.toL
f770: 6f 77 65 72 43 61 73 65 28 29 5d 3b 0a 09 20 20  owerCase()];..  
f780: 20 20 20 20 20 20 20 20 20 20 76 61 72 20 6e 6f            var no
f790: 74 65 4e 75 6d 62 65 72 20 3d 20 69 6e 64 65 78  teNumber = index
f7a0: 20 2b 20 28 70 61 72 73 65 49 6e 74 28 6f 63 74   + (parseInt(oct
f7b0: 61 76 65 29 20 2b 20 31 29 20 2a 20 31 32 3b 0a  ave) + 1) * 12;.
f7c0: 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
f7d0: 75 72 6e 20 74 68 69 73 2e 6d 69 64 69 54 6f 46  urn this.midiToF
f7e0: 72 65 71 75 65 6e 63 79 28 6e 6f 74 65 4e 75 6d  requency(noteNum
f7f0: 62 65 72 29 3b 0a 09 20 20 20 20 20 20 20 20 7d  ber);..        }
f800: 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
f810: 0a 09 09 20 2a 20 20 42 65 61 74 73 42 61 72 73  ... *  BeatsBars
f820: 53 69 78 74 65 65 6e 74 68 73 20 74 79 70 65 20  Sixteenths type 
f830: 70 72 69 6d 61 72 79 20 65 78 70 72 65 73 73 69  primary expressi
f840: 6f 6e 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b  on... *  @type {
f850: 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 20 20 40 70  Object}... *  @p
f860: 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20  rivate... */..  
f870: 20 20 54 6f 6e 65 2e 46 72 65 71 75 65 6e 63 79    Tone.Frequency
f880: 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 70 72 69 6d  .prototype._prim
f890: 61 72 79 45 78 70 72 65 73 73 69 6f 6e 73 2e 74  aryExpressions.t
f8a0: 72 20 3d 20 7b 0a 09 20 20 20 20 20 20 20 20 72  r = {..        r
f8b0: 65 67 65 78 70 3a 20 2f 5e 28 5c 64 2b 28 3f 3a  egexp: /^(\d+(?:
f8c0: 5c 2e 5c 64 2b 29 3f 29 3a 28 5c 64 2b 28 3f 3a  \.\d+)?):(\d+(?:
f8d0: 5c 2e 5c 64 2b 29 3f 29 3a 3f 28 5c 64 2b 28 3f  \.\d+)?):?(\d+(?
f8e0: 3a 5c 2e 5c 64 2b 29 3f 29 3f 2f 2c 0a 09 20 20  :\.\d+)?)?/,..  
f8f0: 20 20 20 20 20 20 6d 65 74 68 6f 64 3a 20 66 75        method: fu
f900: 6e 63 74 69 6f 6e 20 28 6d 2c 20 71 2c 20 73 29  nction (m, q, s)
f910: 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f920: 76 61 72 20 74 6f 74 61 6c 20 3d 20 31 3b 0a 09  var total = 1;..
f930: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
f940: 6d 20 26 26 20 6d 20 21 3d 3d 20 27 30 27 29 20  m && m !== '0') 
f950: 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
f960: 20 20 20 74 6f 74 61 6c 20 2a 3d 20 74 68 69 73     total *= this
f970: 2e 5f 62 65 61 74 73 54 6f 55 6e 69 74 73 28 74  ._beatsToUnits(t
f980: 68 69 73 2e 5f 74 69 6d 65 53 69 67 6e 61 74 75  his._timeSignatu
f990: 72 65 28 29 20 2a 20 70 61 72 73 65 46 6c 6f 61  re() * parseFloa
f9a0: 74 28 6d 29 29 3b 0a 09 20 20 20 20 20 20 20 20  t(m));..        
f9b0: 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20      }..         
f9c0: 20 20 20 69 66 20 28 71 20 26 26 20 71 20 21 3d     if (q && q !=
f9d0: 3d 20 27 30 27 29 20 7b 0a 09 20 20 20 20 20 20  = '0') {..      
f9e0: 20 20 20 20 20 20 20 20 20 20 74 6f 74 61 6c 20            total 
f9f0: 2a 3d 20 74 68 69 73 2e 5f 62 65 61 74 73 54 6f  *= this._beatsTo
fa00: 55 6e 69 74 73 28 70 61 72 73 65 46 6c 6f 61 74  Units(parseFloat
fa10: 28 71 29 29 3b 0a 09 20 20 20 20 20 20 20 20 20  (q));..         
fa20: 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20     }..          
fa30: 20 20 69 66 20 28 73 20 26 26 20 73 20 21 3d 3d    if (s && s !==
fa40: 20 27 30 27 29 20 7b 0a 09 20 20 20 20 20 20 20   '0') {..       
fa50: 20 20 20 20 20 20 20 20 20 74 6f 74 61 6c 20 2a           total *
fa60: 3d 20 74 68 69 73 2e 5f 62 65 61 74 73 54 6f 55  = this._beatsToU
fa70: 6e 69 74 73 28 70 61 72 73 65 46 6c 6f 61 74 28  nits(parseFloat(
fa80: 73 29 20 2f 20 34 29 3b 0a 09 20 20 20 20 20 20  s) / 4);..      
fa90: 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
faa0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 6f 74 61       return tota
fab0: 6c 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  l;..        }.. 
fac0: 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2f 2f 2f 2f     };..    /////
fad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
faf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb10: 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 2f 2f 09 45  //////..    //.E
fb20: 58 50 52 45 53 53 49 4f 4e 53 0a 09 20 20 20 20  XPRESSIONS..    
fb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20  ///////////..   
fb80: 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 72 61 6e 73   /**... *  Trans
fb90: 70 6f 73 65 73 20 74 68 65 20 66 72 65 71 75 65  poses the freque
fba0: 6e 63 79 20 62 79 20 74 68 65 20 67 69 76 65 6e  ncy by the given
fbb0: 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 6d 69 74   number of semit
fbc0: 6f 6e 65 73 2e 0a 09 09 20 2a 20 20 40 70 61 72  ones.... *  @par
fbd0: 61 6d 20 20 7b 49 6e 74 65 72 76 61 6c 7d 20 20  am  {Interval}  
fbe0: 69 6e 74 65 72 76 61 6c 0a 09 09 20 2a 20 20 40  interval... *  @
fbf0: 72 65 74 75 72 6e 20 20 7b 54 6f 6e 65 2e 46 72  return  {Tone.Fr
fc00: 65 71 75 65 6e 63 79 7d 20 74 68 69 73 0a 09 09  equency} this...
fc10: 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20   *  @example... 
fc20: 2a 20 54 6f 6e 65 2e 46 72 65 71 75 65 6e 63 79  * Tone.Frequency
fc30: 28 22 41 34 22 29 2e 74 72 61 6e 73 70 6f 73 65  ("A4").transpose
fc40: 28 33 29 3b 20 2f 2f 22 43 35 22 0a 09 09 20 2a  (3); //"C5"... *
fc50: 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 46 72 65 71  /..    Tone.Freq
fc60: 75 65 6e 63 79 2e 70 72 6f 74 6f 74 79 70 65 2e  uency.prototype.
fc70: 74 72 61 6e 73 70 6f 73 65 20 3d 20 66 75 6e 63  transpose = func
fc80: 74 69 6f 6e 20 28 69 6e 74 65 72 76 61 6c 29 20  tion (interval) 
fc90: 7b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  {..        this.
fca0: 5f 65 78 70 72 20 3d 20 66 75 6e 63 74 69 6f 6e  _expr = function
fcb0: 20 28 65 78 70 72 2c 20 69 6e 74 65 72 76 61 6c   (expr, interval
fcc0: 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
fcd0: 20 76 61 72 20 76 61 6c 20 3d 20 65 78 70 72 28   var val = expr(
fce0: 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
fcf0: 72 65 74 75 72 6e 20 76 61 6c 20 2a 20 74 68 69  return val * thi
fd00: 73 2e 69 6e 74 65 72 76 61 6c 54 6f 46 72 65 71  s.intervalToFreq
fd10: 75 65 6e 63 79 52 61 74 69 6f 28 69 6e 74 65 72  uencyRatio(inter
fd20: 76 61 6c 29 3b 0a 09 20 20 20 20 20 20 20 20 7d  val);..        }
fd30: 2e 62 69 6e 64 28 74 68 69 73 2c 20 74 68 69 73  .bind(this, this
fd40: 2e 5f 65 78 70 72 2c 20 69 6e 74 65 72 76 61 6c  ._expr, interval
fd50: 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
fd60: 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b  rn this;..    };
fd70: 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
fd80: 54 61 6b 65 73 20 61 6e 20 61 72 72 61 79 20 6f  Takes an array o
fd90: 66 20 73 65 6d 69 74 6f 6e 65 20 69 6e 74 65 72  f semitone inter
fda0: 76 61 6c 73 20 61 6e 64 20 72 65 74 75 72 6e 73  vals and returns
fdb0: 0a 09 09 20 2a 20 20 61 6e 20 61 72 72 61 79 20  ... *  an array 
fdc0: 6f 66 20 66 72 65 71 75 65 6e 63 69 65 73 20 74  of frequencies t
fdd0: 72 61 6e 73 70 6f 73 65 64 20 62 79 20 74 68 6f  ransposed by tho
fde0: 73 65 20 69 6e 74 65 72 76 61 6c 73 2e 0a 09 09  se intervals....
fdf0: 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 41 72 72   *  @param  {Arr
fe00: 61 79 7d 20 20 69 6e 74 65 72 76 61 6c 73 0a 09  ay}  intervals..
fe10: 09 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 54  . *  @return  {T
fe20: 6f 6e 65 2e 46 72 65 71 75 65 6e 63 79 7d 20 74  one.Frequency} t
fe30: 68 69 73 0a 09 09 20 2a 20 20 40 65 78 61 6d 70  his... *  @examp
fe40: 6c 65 0a 09 09 20 2a 20 54 6f 6e 65 2e 46 72 65  le... * Tone.Fre
fe50: 71 75 65 6e 63 79 28 22 41 34 22 29 2e 68 61 72  quency("A4").har
fe60: 6d 6f 6e 69 7a 65 28 5b 30 2c 20 33 2c 20 37 5d  monize([0, 3, 7]
fe70: 29 3b 20 2f 2f 5b 22 41 34 22 2c 20 22 43 35 22  ); //["A4", "C5"
fe80: 2c 20 22 45 35 22 5d 0a 09 09 20 2a 2f 0a 09 20  , "E5"]... */.. 
fe90: 20 20 20 54 6f 6e 65 2e 46 72 65 71 75 65 6e 63     Tone.Frequenc
fea0: 79 2e 70 72 6f 74 6f 74 79 70 65 2e 68 61 72 6d  y.prototype.harm
feb0: 6f 6e 69 7a 65 20 3d 20 66 75 6e 63 74 69 6f 6e  onize = function
fec0: 20 28 69 6e 74 65 72 76 61 6c 73 29 20 7b 0a 09   (intervals) {..
fed0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 65 78          this._ex
fee0: 70 72 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 65  pr = function (e
fef0: 78 70 72 2c 20 69 6e 74 65 72 76 61 6c 73 29 20  xpr, intervals) 
ff00: 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 76  {..            v
ff10: 61 72 20 76 61 6c 20 3d 20 65 78 70 72 28 29 3b  ar val = expr();
ff20: 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61  ..            va
ff30: 72 20 72 65 74 20 3d 20 5b 5d 3b 0a 09 20 20 20  r ret = [];..   
ff40: 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 76 61           for (va
ff50: 72 20 69 20 3d 20 30 3b 20 69 20 3c 20 69 6e 74  r i = 0; i < int
ff60: 65 72 76 61 6c 73 2e 6c 65 6e 67 74 68 3b 20 69  ervals.length; i
ff70: 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ++) {..         
ff80: 20 20 20 20 20 20 20 72 65 74 5b 69 5d 20 3d 20         ret[i] = 
ff90: 76 61 6c 20 2a 20 74 68 69 73 2e 69 6e 74 65 72  val * this.inter
ffa0: 76 61 6c 54 6f 46 72 65 71 75 65 6e 63 79 52 61  valToFrequencyRa
ffb0: 74 69 6f 28 69 6e 74 65 72 76 61 6c 73 5b 69 5d  tio(intervals[i]
ffc0: 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
ffd0: 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72  }..            r
ffe0: 65 74 75 72 6e 20 72 65 74 3b 0a 09 20 20 20 20  eturn ret;..    
fff0: 20 20 20 20 7d 2e 62 69 6e 64 28 74 68 69 73 2c      }.bind(this,
10000 20 74 68 69 73 2e 5f 65 78 70 72 2c 20 69 6e 74   this._expr, int
10010 65 72 76 61 6c 73 29 3b 0a 09 20 20 20 20 20 20  ervals);..      
10020 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09    return this;..
10030 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2f 2f 2f      };..    ////
10040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10080 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 2f 2f 09  ///////..    //.
10090 55 4e 49 54 20 43 4f 4e 56 45 52 53 49 4f 4e 53  UNIT CONVERSIONS
100a0 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
100b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100f0 2f 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  /..    /**... * 
10100 20 52 65 74 75 72 6e 20 74 68 65 20 76 61 6c 75   Return the valu
10110 65 20 6f 66 20 74 68 65 20 66 72 65 71 75 65 6e  e of the frequen
10120 63 79 20 61 73 20 61 20 4d 49 44 49 20 6e 6f 74  cy as a MIDI not
10130 65 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20  e... *  @return 
10140 20 7b 4d 49 44 49 7d 0a 09 09 20 2a 20 20 40 65   {MIDI}... *  @e
10150 78 61 6d 70 6c 65 0a 09 09 20 2a 20 54 6f 6e 65  xample... * Tone
10160 2e 46 72 65 71 75 65 6e 63 79 28 22 43 34 22 29  .Frequency("C4")
10170 2e 74 6f 4d 69 64 69 28 29 3b 20 2f 2f 36 30 0a  .toMidi(); //60.
10180 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
10190 46 72 65 71 75 65 6e 63 79 2e 70 72 6f 74 6f 74  Frequency.protot
101a0 79 70 65 2e 74 6f 4d 69 64 69 20 3d 20 66 75 6e  ype.toMidi = fun
101b0 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
101c0 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
101d0 66 72 65 71 75 65 6e 63 79 54 6f 4d 69 64 69 28  frequencyToMidi(
101e0 74 68 69 73 2e 65 76 61 6c 28 29 29 3b 0a 09 20  this.eval());.. 
101f0 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09     };..    /**..
10200 09 20 2a 20 20 52 65 74 75 72 6e 20 74 68 65 20  . *  Return the 
10210 76 61 6c 75 65 20 6f 66 20 74 68 65 20 66 72 65  value of the fre
10220 71 75 65 6e 63 79 20 69 6e 20 53 63 69 65 6e 74  quency in Scient
10230 69 66 69 63 20 50 69 74 63 68 20 4e 6f 74 61 74  ific Pitch Notat
10240 69 6f 6e 0a 09 09 20 2a 20 20 40 72 65 74 75 72  ion... *  @retur
10250 6e 20 20 7b 4e 6f 74 65 7d 0a 09 09 20 2a 20 20  n  {Note}... *  
10260 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 54 6f  @example... * To
10270 6e 65 2e 46 72 65 71 75 65 6e 63 79 28 36 39 2c  ne.Frequency(69,
10280 20 22 6d 69 64 69 22 29 2e 74 6f 4e 6f 74 65 28   "midi").toNote(
10290 29 3b 20 2f 2f 22 41 34 22 0a 09 09 20 2a 2f 0a  ); //"A4"... */.
102a0 09 20 20 20 20 54 6f 6e 65 2e 46 72 65 71 75 65  .    Tone.Freque
102b0 6e 63 79 2e 70 72 6f 74 6f 74 79 70 65 2e 74 6f  ncy.prototype.to
102c0 4e 6f 74 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20  Note = function 
102d0 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61  () {..        va
102e0 72 20 66 72 65 71 20 3d 20 74 68 69 73 2e 65 76  r freq = this.ev
102f0 61 6c 28 29 3b 0a 09 20 20 20 20 20 20 20 20 76  al();..        v
10300 61 72 20 6c 6f 67 20 3d 20 4d 61 74 68 2e 6c 6f  ar log = Math.lo
10310 67 28 66 72 65 71 20 2f 20 54 6f 6e 65 2e 46 72  g(freq / Tone.Fr
10320 65 71 75 65 6e 63 79 2e 41 34 29 20 2f 20 4d 61  equency.A4) / Ma
10330 74 68 2e 4c 4e 32 3b 0a 09 20 20 20 20 20 20 20  th.LN2;..       
10340 20 76 61 72 20 6e 6f 74 65 4e 75 6d 62 65 72 20   var noteNumber 
10350 3d 20 4d 61 74 68 2e 72 6f 75 6e 64 28 31 32 20  = Math.round(12 
10360 2a 20 6c 6f 67 29 20 2b 20 35 37 3b 0a 09 20 20  * log) + 57;..  
10370 20 20 20 20 20 20 76 61 72 20 6f 63 74 61 76 65        var octave
10380 20 3d 20 4d 61 74 68 2e 66 6c 6f 6f 72 28 6e 6f   = Math.floor(no
10390 74 65 4e 75 6d 62 65 72 20 2f 20 31 32 29 3b 0a  teNumber / 12);.
103a0 09 20 20 20 20 20 20 20 20 69 66 20 28 6f 63 74  .        if (oct
103b0 61 76 65 20 3c 20 30 29 20 7b 0a 09 20 20 20 20  ave < 0) {..    
103c0 20 20 20 20 20 20 20 20 6e 6f 74 65 4e 75 6d 62          noteNumb
103d0 65 72 20 2b 3d 20 2d 31 32 20 2a 20 6f 63 74 61  er += -12 * octa
103e0 76 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  ve;..        }..
103f0 20 20 20 20 20 20 20 20 76 61 72 20 6e 6f 74 65          var note
10400 4e 61 6d 65 20 3d 20 73 63 61 6c 65 49 6e 64 65  Name = scaleInde
10410 78 54 6f 4e 6f 74 65 5b 6e 6f 74 65 4e 75 6d 62  xToNote[noteNumb
10420 65 72 20 25 20 31 32 5d 3b 0a 09 20 20 20 20 20  er % 12];..     
10430 20 20 20 72 65 74 75 72 6e 20 6e 6f 74 65 4e 61     return noteNa
10440 6d 65 20 2b 20 6f 63 74 61 76 65 2e 74 6f 53 74  me + octave.toSt
10450 72 69 6e 67 28 29 3b 0a 09 20 20 20 20 7d 3b 0a  ring();..    };.
10460 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 52  .    /**... *  R
10470 65 74 75 72 6e 20 74 68 65 20 64 75 72 61 74 69  eturn the durati
10480 6f 6e 20 6f 66 20 6f 6e 65 20 63 79 63 6c 65 20  on of one cycle 
10490 69 6e 20 73 65 63 6f 6e 64 73 2e 0a 09 09 20 2a  in seconds.... *
104a0 20 20 40 72 65 74 75 72 6e 20 20 7b 53 65 63 6f    @return  {Seco
104b0 6e 64 73 7d 0a 09 09 20 2a 2f 0a 09 20 20 20 20  nds}... */..    
104c0 54 6f 6e 65 2e 46 72 65 71 75 65 6e 63 79 2e 70  Tone.Frequency.p
104d0 72 6f 74 6f 74 79 70 65 2e 74 6f 53 65 63 6f 6e  rototype.toSecon
104e0 64 73 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  ds = function ()
104f0 20 7b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
10500 72 6e 20 31 20 2f 20 74 68 69 73 2e 65 76 61 6c  rn 1 / this.eval
10510 28 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  ();..    };..   
10520 20 2f 2a 2a 0a 09 09 20 2a 20 20 52 65 74 75 72   /**... *  Retur
10530 6e 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 48  n the value in H
10540 65 72 74 7a 0a 09 09 20 2a 20 20 40 72 65 74 75  ertz... *  @retu
10550 72 6e 20 20 7b 46 72 65 71 75 65 6e 63 79 7d 0a  rn  {Frequency}.
10560 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
10570 46 72 65 71 75 65 6e 63 79 2e 70 72 6f 74 6f 74  Frequency.protot
10580 79 70 65 2e 74 6f 46 72 65 71 75 65 6e 63 79 20  ype.toFrequency 
10590 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  = function () {.
105a0 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
105b0 74 68 69 73 2e 65 76 61 6c 28 29 3b 0a 09 20 20  this.eval();..  
105c0 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    };..    /**...
105d0 20 2a 20 20 52 65 74 75 72 6e 20 74 68 65 20 64   *  Return the d
105e0 75 72 61 74 69 6f 6e 20 6f 66 20 6f 6e 65 20 63  uration of one c
105f0 79 63 6c 65 20 69 6e 20 74 69 63 6b 73 0a 09 09  ycle in ticks...
10600 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 54 69   *  @return  {Ti
10610 63 6b 73 7d 0a 09 09 20 2a 2f 0a 09 20 20 20 20  cks}... */..    
10620 54 6f 6e 65 2e 46 72 65 71 75 65 6e 63 79 2e 70  Tone.Frequency.p
10630 72 6f 74 6f 74 79 70 65 2e 74 6f 54 69 63 6b 73  rototype.toTicks
10640 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b   = function () {
10650 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 71 75  ..        var qu
10660 61 72 74 65 72 54 69 6d 65 20 3d 20 74 68 69 73  arterTime = this
10670 2e 5f 62 65 61 74 73 54 6f 55 6e 69 74 73 28 31  ._beatsToUnits(1
10680 29 3b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20  );..        var 
10690 71 75 61 72 74 65 72 73 20 3d 20 74 68 69 73 2e  quarters = this.
106a0 65 76 61 6c 28 29 20 2f 20 71 75 61 72 74 65 72  eval() / quarter
106b0 54 69 6d 65 3b 0a 09 20 20 20 20 20 20 20 20 72  Time;..        r
106c0 65 74 75 72 6e 20 4d 61 74 68 2e 66 6c 6f 6f 72  eturn Math.floor
106d0 28 71 75 61 72 74 65 72 73 20 2a 20 54 6f 6e 65  (quarters * Tone
106e0 2e 54 72 61 6e 73 70 6f 72 74 2e 50 50 51 29 3b  .Transport.PPQ);
106f0 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2f  ..    };..    //
10700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10740 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 2f  /////////..    /
10750 2f 09 55 4e 49 54 20 43 4f 4e 56 45 52 53 49 4f  /.UNIT CONVERSIO
10760 4e 53 20 48 45 4c 50 45 52 53 0a 09 20 20 20 20  NS HELPERS..    
10770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
107a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
107b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20  ///////////..   
107c0 20 2f 2a 2a 0a 09 09 20 2a 20 20 52 65 74 75 72   /**... *  Retur
107d0 6e 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ns the value of 
107e0 61 20 66 72 65 71 75 65 6e 63 79 20 69 6e 20 74  a frequency in t
107f0 68 65 20 63 75 72 72 65 6e 74 20 75 6e 69 74 73  he current units
10800 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 46  ... *  @param {F
10810 72 65 71 75 65 6e 63 79 7d 20 66 72 65 71 0a 09  requency} freq..
10820 09 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 4e  . *  @return  {N
10830 75 6d 62 65 72 7d 0a 09 09 20 2a 20 20 40 70 72  umber}... *  @pr
10840 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20  ivate... */..   
10850 20 54 6f 6e 65 2e 46 72 65 71 75 65 6e 63 79 2e   Tone.Frequency.
10860 70 72 6f 74 6f 74 79 70 65 2e 5f 66 72 65 71 75  prototype._frequ
10870 65 6e 63 79 54 6f 55 6e 69 74 73 20 3d 20 66 75  encyToUnits = fu
10880 6e 63 74 69 6f 6e 20 28 66 72 65 71 29 20 7b 0a  nction (freq) {.
10890 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
108a0 66 72 65 71 3b 0a 09 20 20 20 20 7d 3b 0a 09 20  freq;..    };.. 
108b0 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 52 65 74     /**... *  Ret
108c0 75 72 6e 73 20 74 68 65 20 76 61 6c 75 65 20 6f  urns the value o
108d0 66 20 61 20 74 69 63 6b 20 69 6e 20 74 68 65 20  f a tick in the 
108e0 63 75 72 72 65 6e 74 20 74 69 6d 65 20 75 6e 69  current time uni
108f0 74 73 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  ts... *  @param 
10900 7b 54 69 63 6b 73 7d 20 74 69 63 6b 73 0a 09 09  {Ticks} ticks...
10910 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 4e 75   *  @return  {Nu
10920 6d 62 65 72 7d 0a 09 09 20 2a 20 20 40 70 72 69  mber}... *  @pri
10930 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20  vate... */..    
10940 54 6f 6e 65 2e 46 72 65 71 75 65 6e 63 79 2e 70  Tone.Frequency.p
10950 72 6f 74 6f 74 79 70 65 2e 5f 74 69 63 6b 73 54  rototype._ticksT
10960 6f 55 6e 69 74 73 20 3d 20 66 75 6e 63 74 69 6f  oUnits = functio
10970 6e 20 28 74 69 63 6b 73 29 20 7b 0a 09 20 20 20  n (ticks) {..   
10980 20 20 20 20 20 72 65 74 75 72 6e 20 31 20 2f 20       return 1 / 
10990 28 74 69 63 6b 73 20 2a 20 36 30 20 2f 20 28 54  (ticks * 60 / (T
109a0 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 2e 62 70  one.Transport.bp
109b0 6d 2e 76 61 6c 75 65 20 2a 20 54 6f 6e 65 2e 54  m.value * Tone.T
109c0 72 61 6e 73 70 6f 72 74 2e 50 50 51 29 29 3b 0a  ransport.PPQ));.
109d0 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
109e0 0a 09 09 20 2a 20 20 52 65 74 75 72 6e 20 74 68  ... *  Return th
109f0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 62  e value of the b
10a00 65 61 74 73 20 69 6e 20 74 68 65 20 63 75 72 72  eats in the curr
10a10 65 6e 74 20 75 6e 69 74 73 0a 09 09 20 2a 20 20  ent units... *  
10a20 40 70 61 72 61 6d 20 7b 4e 75 6d 62 65 72 7d 20  @param {Number} 
10a30 62 65 61 74 73 0a 09 09 20 2a 20 20 40 72 65 74  beats... *  @ret
10a40 75 72 6e 20 20 7b 4e 75 6d 62 65 72 7d 0a 09 09  urn  {Number}...
10a50 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 20   *  @private... 
10a60 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 46 72 65  */..    Tone.Fre
10a70 71 75 65 6e 63 79 2e 70 72 6f 74 6f 74 79 70 65  quency.prototype
10a80 2e 5f 62 65 61 74 73 54 6f 55 6e 69 74 73 20 3d  ._beatsToUnits =
10a90 20 66 75 6e 63 74 69 6f 6e 20 28 62 65 61 74 73   function (beats
10aa0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 72 65 74  ) {..        ret
10ab0 75 72 6e 20 31 20 2f 20 54 6f 6e 65 2e 54 69 6d  urn 1 / Tone.Tim
10ac0 65 42 61 73 65 2e 70 72 6f 74 6f 74 79 70 65 2e  eBase.prototype.
10ad0 5f 62 65 61 74 73 54 6f 55 6e 69 74 73 2e 63 61  _beatsToUnits.ca
10ae0 6c 6c 28 74 68 69 73 2c 20 62 65 61 74 73 29 3b  ll(this, beats);
10af0 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
10b00 2a 0a 09 09 20 2a 20 20 52 65 74 75 72 6e 73 20  *... *  Returns 
10b10 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 73  the value of a s
10b20 65 63 6f 6e 64 20 69 6e 20 74 68 65 20 63 75 72  econd in the cur
10b30 72 65 6e 74 20 75 6e 69 74 73 0a 09 09 20 2a 20  rent units... * 
10b40 20 40 70 61 72 61 6d 20 7b 53 65 63 6f 6e 64 73   @param {Seconds
10b50 7d 20 73 65 63 6f 6e 64 73 0a 09 09 20 2a 20 20  } seconds... *  
10b60 40 72 65 74 75 72 6e 20 20 7b 4e 75 6d 62 65 72  @return  {Number
10b70 7d 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  }... *  @private
10b80 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
10b90 2e 46 72 65 71 75 65 6e 63 79 2e 70 72 6f 74 6f  .Frequency.proto
10ba0 74 79 70 65 2e 5f 73 65 63 6f 6e 64 73 54 6f 55  type._secondsToU
10bb0 6e 69 74 73 20 3d 20 66 75 6e 63 74 69 6f 6e 20  nits = function 
10bc0 28 73 65 63 6f 6e 64 73 29 20 7b 0a 09 20 20 20  (seconds) {..   
10bd0 20 20 20 20 20 72 65 74 75 72 6e 20 31 20 2f 20       return 1 / 
10be0 73 65 63 6f 6e 64 73 3b 0a 09 20 20 20 20 7d 3b  seconds;..    };
10bf0 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
10c00 54 68 65 20 64 65 66 61 75 6c 74 20 75 6e 69 74  The default unit
10c10 73 20 69 66 20 6e 6f 6e 65 20 61 72 65 20 67 69  s if none are gi
10c20 76 65 6e 2e 0a 09 09 20 2a 20 20 40 70 72 69 76  ven.... *  @priv
10c30 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  ate... */..    T
10c40 6f 6e 65 2e 46 72 65 71 75 65 6e 63 79 2e 70 72  one.Frequency.pr
10c50 6f 74 6f 74 79 70 65 2e 5f 64 65 66 61 75 6c 74  ototype._default
10c60 55 6e 69 74 73 20 3d 20 27 68 7a 27 3b 0a 09 20  Units = 'hz';.. 
10c70 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
10c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09  //////////////..
10cc0 20 20 20 20 2f 2f 09 46 52 45 51 55 45 4e 43 59      //.FREQUENCY
10cd0 20 43 4f 4e 56 45 52 53 49 4f 4e 53 0a 09 20 20   CONVERSIONS..  
10ce0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
10cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20  /////////////.. 
10d30 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 4e 6f 74     /**... *  Not
10d40 65 20 74 6f 20 73 63 61 6c 65 20 69 6e 64 65 78  e to scale index
10d50 0a 09 09 20 2a 20 20 40 74 79 70 65 20 20 7b 4f  ... *  @type  {O
10d60 62 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a 09 20 20  bject}... */..  
10d70 20 20 76 61 72 20 6e 6f 74 65 54 6f 53 63 61 6c    var noteToScal
10d80 65 49 6e 64 65 78 20 3d 20 7b 0a 09 20 20 20 20  eIndex = {..    
10d90 20 20 20 20 27 63 62 62 27 3a 20 2d 32 2c 0a 09      'cbb': -2,..
10da0 20 20 20 20 20 20 20 20 27 63 62 27 3a 20 2d 31          'cb': -1
10db0 2c 0a 09 20 20 20 20 20 20 20 20 27 63 27 3a 20  ,..        'c': 
10dc0 30 2c 0a 09 20 20 20 20 20 20 20 20 27 63 23 27  0,..        'c#'
10dd0 3a 20 31 2c 0a 09 20 20 20 20 20 20 20 20 27 63  : 1,..        'c
10de0 78 27 3a 20 32 2c 0a 09 20 20 20 20 20 20 20 20  x': 2,..        
10df0 27 64 62 62 27 3a 20 30 2c 0a 09 20 20 20 20 20  'dbb': 0,..     
10e00 20 20 20 27 64 62 27 3a 20 31 2c 0a 09 20 20 20     'db': 1,..   
10e10 20 20 20 20 20 27 64 27 3a 20 32 2c 0a 09 20 20       'd': 2,..  
10e20 20 20 20 20 20 20 27 64 23 27 3a 20 33 2c 0a 09        'd#': 3,..
10e30 20 20 20 20 20 20 20 20 27 64 78 27 3a 20 34 2c          'dx': 4,
10e40 0a 09 20 20 20 20 20 20 20 20 27 65 62 62 27 3a  ..        'ebb':
10e50 20 32 2c 0a 09 20 20 20 20 20 20 20 20 27 65 62   2,..        'eb
10e60 27 3a 20 33 2c 0a 09 20 20 20 20 20 20 20 20 27  ': 3,..        '
10e70 65 27 3a 20 34 2c 0a 09 20 20 20 20 20 20 20 20  e': 4,..        
10e80 27 65 23 27 3a 20 35 2c 0a 09 20 20 20 20 20 20  'e#': 5,..      
10e90 20 20 27 65 78 27 3a 20 36 2c 0a 09 20 20 20 20    'ex': 6,..    
10ea0 20 20 20 20 27 66 62 62 27 3a 20 33 2c 0a 09 20      'fbb': 3,.. 
10eb0 20 20 20 20 20 20 20 27 66 62 27 3a 20 34 2c 0a         'fb': 4,.
10ec0 09 20 20 20 20 20 20 20 20 27 66 27 3a 20 35 2c  .        'f': 5,
10ed0 0a 09 20 20 20 20 20 20 20 20 27 66 23 27 3a 20  ..        'f#': 
10ee0 36 2c 0a 09 20 20 20 20 20 20 20 20 27 66 78 27  6,..        'fx'
10ef0 3a 20 37 2c 0a 09 20 20 20 20 20 20 20 20 27 67  : 7,..        'g
10f00 62 62 27 3a 20 35 2c 0a 09 20 20 20 20 20 20 20  bb': 5,..       
10f10 20 27 67 62 27 3a 20 36 2c 0a 09 20 20 20 20 20   'gb': 6,..     
10f20 20 20 20 27 67 27 3a 20 37 2c 0a 09 20 20 20 20     'g': 7,..    
10f30 20 20 20 20 27 67 23 27 3a 20 38 2c 0a 09 20 20      'g#': 8,..  
10f40 20 20 20 20 20 20 27 67 78 27 3a 20 39 2c 0a 09        'gx': 9,..
10f50 20 20 20 20 20 20 20 20 27 61 62 62 27 3a 20 37          'abb': 7
10f60 2c 0a 09 20 20 20 20 20 20 20 20 27 61 62 27 3a  ,..        'ab':
10f70 20 38 2c 0a 09 20 20 20 20 20 20 20 20 27 61 27   8,..        'a'
10f80 3a 20 39 2c 0a 09 20 20 20 20 20 20 20 20 27 61  : 9,..        'a
10f90 23 27 3a 20 31 30 2c 0a 09 20 20 20 20 20 20 20  #': 10,..       
10fa0 20 27 61 78 27 3a 20 31 31 2c 0a 09 20 20 20 20   'ax': 11,..    
10fb0 20 20 20 20 27 62 62 62 27 3a 20 39 2c 0a 09 20      'bbb': 9,.. 
10fc0 20 20 20 20 20 20 20 27 62 62 27 3a 20 31 30 2c         'bb': 10,
10fd0 0a 09 20 20 20 20 20 20 20 20 27 62 27 3a 20 31  ..        'b': 1
10fe0 31 2c 0a 09 20 20 20 20 20 20 20 20 27 62 23 27  1,..        'b#'
10ff0 3a 20 31 32 2c 0a 09 20 20 20 20 20 20 20 20 27  : 12,..        '
11000 62 78 27 3a 20 31 33 0a 09 20 20 20 20 7d 3b 0a  bx': 13..    };.
11010 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 73  .    /**... *  s
11020 63 61 6c 65 20 69 6e 64 65 78 20 74 6f 20 6e 6f  cale index to no
11030 74 65 20 28 73 68 61 72 70 73 29 0a 09 09 20 2a  te (sharps)... *
11040 20 20 40 74 79 70 65 20 20 7b 41 72 72 61 79 7d    @type  {Array}
11050 0a 09 09 20 2a 2f 0a 09 20 20 20 20 76 61 72 20  ... */..    var 
11060 73 63 61 6c 65 49 6e 64 65 78 54 6f 4e 6f 74 65  scaleIndexToNote
11070 20 3d 20 5b 0a 09 20 20 20 20 20 20 20 20 27 43   = [..        'C
11080 27 2c 0a 09 20 20 20 20 20 20 20 20 27 43 23 27  ',..        'C#'
11090 2c 0a 09 20 20 20 20 20 20 20 20 27 44 27 2c 0a  ,..        'D',.
110a0 09 20 20 20 20 20 20 20 20 27 44 23 27 2c 0a 09  .        'D#',..
110b0 20 20 20 20 20 20 20 20 27 45 27 2c 0a 09 20 20          'E',..  
110c0 20 20 20 20 20 20 27 46 27 2c 0a 09 20 20 20 20        'F',..    
110d0 20 20 20 20 27 46 23 27 2c 0a 09 20 20 20 20 20      'F#',..     
110e0 20 20 20 27 47 27 2c 0a 09 20 20 20 20 20 20 20     'G',..       
110f0 20 27 47 23 27 2c 0a 09 20 20 20 20 20 20 20 20   'G#',..        
11100 27 41 27 2c 0a 09 20 20 20 20 20 20 20 20 27 41  'A',..        'A
11110 23 27 2c 0a 09 20 20 20 20 20 20 20 20 27 42 27  #',..        'B'
11120 0a 09 20 20 20 20 5d 3b 0a 09 20 20 20 20 2f 2a  ..    ];..    /*
11130 2a 0a 09 09 20 2a 20 20 54 68 65 20 5b 63 6f 6e  *... *  The [con
11140 63 65 72 74 20 70 69 74 63 68 5d 28 68 74 74 70  cert pitch](http
11150 73 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  s://en.wikipedia
11160 2e 6f 72 67 2f 77 69 6b 69 2f 43 6f 6e 63 65 72  .org/wiki/Concer
11170 74 5f 70 69 74 63 68 29 0a 09 09 20 2a 20 20 41  t_pitch)... *  A
11180 34 27 73 20 76 61 6c 75 65 73 20 69 6e 20 48 65  4's values in He
11190 72 74 7a 2e 20 0a 09 09 20 2a 20 20 40 74 79 70  rtz. ... *  @typ
111a0 65 20 7b 46 72 65 71 75 65 6e 63 79 7d 0a 09 09  e {Frequency}...
111b0 20 2a 20 20 40 73 74 61 74 69 63 0a 09 09 20 2a   *  @static... *
111c0 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 46 72 65 71  /..    Tone.Freq
111d0 75 65 6e 63 79 2e 41 34 20 3d 20 34 34 30 3b 0a  uency.A4 = 440;.
111e0 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43  .    /**... *  C
111f0 6f 6e 76 65 72 74 20 61 20 4d 49 44 49 20 6e 6f  onvert a MIDI no
11200 74 65 20 74 6f 20 66 72 65 71 75 65 6e 63 79 20  te to frequency 
11210 76 61 6c 75 65 2e 20 0a 09 09 20 2a 20 20 40 70  value. ... *  @p
11220 61 72 61 6d 20 20 7b 4d 49 44 49 7d 20 6d 69 64  aram  {MIDI} mid
11230 69 20 54 68 65 20 6d 69 64 69 20 6e 75 6d 62 65  i The midi numbe
11240 72 20 74 6f 20 63 6f 6e 76 65 72 74 2e 0a 09 09  r to convert....
11250 20 2a 20 20 40 72 65 74 75 72 6e 20 7b 46 72 65   *  @return {Fre
11260 71 75 65 6e 63 79 7d 20 74 68 65 20 63 6f 72 72  quency} the corr
11270 65 73 70 6f 6e 64 69 6e 67 20 66 72 65 71 75 65  esponding freque
11280 6e 63 79 20 76 61 6c 75 65 0a 09 09 20 2a 20 20  ncy value... *  
11290 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 74 6f  @example... * to
112a0 6e 65 2e 6d 69 64 69 54 6f 46 72 65 71 75 65 6e  ne.midiToFrequen
112b0 63 79 28 36 39 29 3b 20 2f 2f 20 72 65 74 75 72  cy(69); // retur
112c0 6e 73 20 34 34 30 0a 09 09 20 2a 2f 0a 09 20 20  ns 440... */..  
112d0 20 20 54 6f 6e 65 2e 46 72 65 71 75 65 6e 63 79    Tone.Frequency
112e0 2e 70 72 6f 74 6f 74 79 70 65 2e 6d 69 64 69 54  .prototype.midiT
112f0 6f 46 72 65 71 75 65 6e 63 79 20 3d 20 66 75 6e  oFrequency = fun
11300 63 74 69 6f 6e 20 28 6d 69 64 69 29 20 7b 0a 09  ction (midi) {..
11310 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54          return T
11320 6f 6e 65 2e 46 72 65 71 75 65 6e 63 79 2e 41 34  one.Frequency.A4
11330 20 2a 20 4d 61 74 68 2e 70 6f 77 28 32 2c 20 28   * Math.pow(2, (
11340 6d 69 64 69 20 2d 20 36 39 29 20 2f 20 31 32 29  midi - 69) / 12)
11350 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  ;..    };..    /
11360 2a 2a 0a 09 09 20 2a 20 20 43 6f 6e 76 65 72 74  **... *  Convert
11370 20 61 20 66 72 65 71 75 65 6e 63 79 20 76 61 6c   a frequency val
11380 75 65 20 74 6f 20 61 20 4d 49 44 49 20 6e 6f 74  ue to a MIDI not
11390 65 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  e.... *  @param 
113a0 7b 46 72 65 71 75 65 6e 63 79 7d 20 66 72 65 71  {Frequency} freq
113b0 75 65 6e 63 79 20 54 68 65 20 76 61 6c 75 65 20  uency The value 
113c0 74 6f 20 66 72 65 71 75 65 6e 63 79 20 76 61 6c  to frequency val
113d0 75 65 20 74 6f 20 63 6f 6e 76 65 72 74 2e 0a 09  ue to convert...
113e0 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 20 7b  . *  @returns  {
113f0 4d 49 44 49 7d 0a 09 09 20 2a 20 20 40 65 78 61  MIDI}... *  @exa
11400 6d 70 6c 65 0a 09 09 20 2a 20 74 6f 6e 65 2e 6d  mple... * tone.m
11410 69 64 69 54 6f 46 72 65 71 75 65 6e 63 79 28 34  idiToFrequency(4
11420 34 30 29 3b 20 2f 2f 20 72 65 74 75 72 6e 73 20  40); // returns 
11430 36 39 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  69... */..    To
11440 6e 65 2e 46 72 65 71 75 65 6e 63 79 2e 70 72 6f  ne.Frequency.pro
11450 74 6f 74 79 70 65 2e 66 72 65 71 75 65 6e 63 79  totype.frequency
11460 54 6f 4d 69 64 69 20 3d 20 66 75 6e 63 74 69 6f  ToMidi = functio
11470 6e 20 28 66 72 65 71 75 65 6e 63 79 29 20 7b 0a  n (frequency) {.
11480 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
11490 36 39 20 2b 20 31 32 20 2a 20 4d 61 74 68 2e 6c  69 + 12 * Math.l
114a0 6f 67 28 66 72 65 71 75 65 6e 63 79 20 2f 20 54  og(frequency / T
114b0 6f 6e 65 2e 46 72 65 71 75 65 6e 63 79 2e 41 34  one.Frequency.A4
114c0 29 20 2f 20 4d 61 74 68 2e 4c 4e 32 3b 0a 09 20  ) / Math.LN2;.. 
114d0 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74 75 72     };..    retur
114e0 6e 20 54 6f 6e 65 2e 46 72 65 71 75 65 6e 63 79  n Tone.Frequency
114f0 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66  ;..});..Module(f
11500 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b  unction (Tone) {
11510 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
11520 40 63 6c 61 73 73 20 54 6f 6e 65 2e 54 72 61 6e  @class Tone.Tran
11530 73 70 6f 72 74 54 69 6d 65 20 69 73 20 61 20 74  sportTime is a t
11540 68 65 20 74 69 6d 65 20 61 6c 6f 6e 67 20 74 68  he time along th
11550 65 20 54 72 61 6e 73 70 6f 72 74 27 73 0a 09 09  e Transport's...
11560 20 2a 20 20 20 20 20 20 20 20 20 74 69 6d 65 6c   *         timel
11570 69 6e 65 2e 20 49 74 20 69 73 20 73 69 6d 69 6c  ine. It is simil
11580 61 72 20 74 6f 20 54 6f 6e 65 2e 54 69 6d 65 2c  ar to Tone.Time,
11590 20 62 75 74 20 69 6e 73 74 65 61 64 20 6f 66 20   but instead of 
115a0 65 76 61 6c 75 61 74 69 6e 67 0a 09 09 20 2a 20  evaluating... * 
115b0 20 20 20 20 20 20 20 20 61 67 61 69 6e 73 74 20          against 
115c0 74 68 65 20 41 75 64 69 6f 43 6f 6e 74 65 78 74  the AudioContext
115d0 27 73 20 63 6c 6f 63 6b 2c 20 69 74 20 69 73 20  's clock, it is 
115e0 65 76 61 6c 75 61 74 65 64 20 61 67 61 69 6e 73  evaluated agains
115f0 74 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 74  t... *         t
11600 68 65 20 54 72 61 6e 73 70 6f 72 74 27 73 20 70  he Transport's p
11610 6f 73 69 74 69 6f 6e 2e 20 53 65 65 20 5b 54 72  osition. See [Tr
11620 61 6e 73 70 6f 72 74 54 69 6d 65 20 77 69 6b 69  ansportTime wiki
11630 5d 28 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62  ](https://github
11640 2e 63 6f 6d 2f 54 6f 6e 65 6a 73 2f 54 6f 6e 65  .com/Tonejs/Tone
11650 2e 6a 73 2f 77 69 6b 69 2f 54 72 61 6e 73 70 6f  .js/wiki/Transpo
11660 72 74 54 69 6d 65 29 2e 0a 09 09 20 2a 20 20 40  rtTime).... *  @
11670 63 6f 6e 73 74 72 75 63 74 6f 72 0a 09 09 20 2a  constructor... *
11680 20 20 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 7d    @param  {Time}
11690 20 20 76 61 6c 20 20 20 20 54 68 65 20 74 69 6d    val    The tim
116a0 65 20 76 61 6c 75 65 20 61 73 20 61 20 6e 75 6d  e value as a num
116b0 62 65 72 20 6f 72 20 73 74 72 69 6e 67 0a 09 09  ber or string...
116c0 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 53 74 72   *  @param  {Str
116d0 69 6e 67 3d 7d 20 20 75 6e 69 74 73 20 20 55 6e  ing=}  units  Un
116e0 69 74 20 76 61 6c 75 65 73 0a 09 09 20 2a 20 20  it values... *  
116f0 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65 2e 54  @extends {Tone.T
11700 69 6d 65 7d 0a 09 09 20 2a 2f 0a 09 20 20 20 20  ime}... */..    
11710 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 54 69  Tone.TransportTi
11720 6d 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 76  me = function (v
11730 61 6c 2c 20 75 6e 69 74 73 29 20 7b 0a 09 20 20  al, units) {..  
11740 20 20 20 20 20 20 69 66 20 28 74 68 69 73 20 69        if (this i
11750 6e 73 74 61 6e 63 65 6f 66 20 54 6f 6e 65 2e 54  nstanceof Tone.T
11760 72 61 6e 73 70 6f 72 74 54 69 6d 65 29 20 7b 0a  ransportTime) {.
11770 09 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6e  .            Ton
11780 65 2e 54 69 6d 65 2e 63 61 6c 6c 28 74 68 69 73  e.Time.call(this
11790 2c 20 76 61 6c 2c 20 75 6e 69 74 73 29 3b 0a 09  , val, units);..
117a0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
117b0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
117c0 74 75 72 6e 20 6e 65 77 20 54 6f 6e 65 2e 54 72  turn new Tone.Tr
117d0 61 6e 73 70 6f 72 74 54 69 6d 65 28 76 61 6c 2c  ansportTime(val,
117e0 20 75 6e 69 74 73 29 3b 0a 09 20 20 20 20 20 20   units);..      
117f0 20 20 7d 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20    }..    };..   
11800 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e   Tone.extend(Ton
11810 65 2e 54 72 61 6e 73 70 6f 72 74 54 69 6d 65 2c  e.TransportTime,
11820 20 54 6f 6e 65 2e 54 69 6d 65 29 3b 0a 09 20 20   Tone.Time);..  
11830 20 20 2f 2f 63 6c 6f 6e 65 20 74 68 65 20 65 78    //clone the ex
11840 70 72 65 73 73 69 6f 6e 73 20 73 6f 20 74 68 61  pressions so tha
11850 74 20 0a 09 20 20 20 20 2f 2f 77 65 20 63 61 6e  t ..    //we can
11860 20 61 64 64 20 6d 6f 72 65 20 77 69 74 68 6f 75   add more withou
11870 74 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20  t modifying the 
11880 6f 72 69 67 69 6e 61 6c 0a 09 20 20 20 20 54 6f  original..    To
11890 6e 65 2e 54 72 61 6e 73 70 6f 72 74 54 69 6d 65  ne.TransportTime
118a0 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 75 6e 61 72  .prototype._unar
118b0 79 45 78 70 72 65 73 73 69 6f 6e 73 20 3d 20 4f  yExpressions = O
118c0 62 6a 65 63 74 2e 63 72 65 61 74 65 28 54 6f 6e  bject.create(Ton
118d0 65 2e 54 69 6d 65 2e 70 72 6f 74 6f 74 79 70 65  e.Time.prototype
118e0 2e 5f 75 6e 61 72 79 45 78 70 72 65 73 73 69 6f  ._unaryExpressio
118f0 6e 73 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09  ns);..    /**...
11900 20 2a 20 20 41 64 64 73 20 61 6e 20 61 64 64 69   *  Adds an addi
11910 74 69 6f 6e 61 6c 20 75 6e 61 72 79 20 65 78 70  tional unary exp
11920 72 65 73 73 69 6f 6e 0a 09 09 20 2a 20 20 77 68  ression... *  wh
11930 69 63 68 20 71 75 61 6e 74 69 7a 65 73 20 76 61  ich quantizes va
11940 6c 75 65 73 20 74 6f 20 74 68 65 20 6e 65 78 74  lues to the next
11950 20 73 75 62 64 69 76 69 73 69 6f 6e 0a 09 09 20   subdivision... 
11960 2a 20 20 40 74 79 70 65 20 7b 4f 62 6a 65 63 74  *  @type {Object
11970 7d 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  }... *  @private
11980 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
11990 2e 54 72 61 6e 73 70 6f 72 74 54 69 6d 65 2e 70  .TransportTime.p
119a0 72 6f 74 6f 74 79 70 65 2e 5f 75 6e 61 72 79 45  rototype._unaryE
119b0 78 70 72 65 73 73 69 6f 6e 73 2e 71 75 61 6e 74  xpressions.quant
119c0 69 7a 65 20 3d 20 7b 0a 09 20 20 20 20 20 20 20  ize = {..       
119d0 20 72 65 67 65 78 70 3a 20 2f 5e 40 2f 2c 0a 09   regexp: /^@/,..
119e0 20 20 20 20 20 20 20 20 6d 65 74 68 6f 64 3a 20          method: 
119f0 66 75 6e 63 74 69 6f 6e 20 28 72 68 29 20 7b 0a  function (rh) {.
11a00 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72  .            var
11a10 20 73 75 62 64 69 76 69 73 69 6f 6e 20 3d 20 74   subdivision = t
11a20 68 69 73 2e 5f 73 65 63 6f 6e 64 73 54 6f 54 69  his._secondsToTi
11a30 63 6b 73 28 72 68 28 29 29 3b 0a 09 20 20 20 20  cks(rh());..    
11a40 20 20 20 20 20 20 20 20 76 61 72 20 6d 75 6c 74          var mult
11a50 69 70 6c 65 20 3d 20 4d 61 74 68 2e 63 65 69 6c  iple = Math.ceil
11a60 28 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 2e  (Tone.Transport.
11a70 74 69 63 6b 73 20 2f 20 73 75 62 64 69 76 69 73  ticks / subdivis
11a80 69 6f 6e 29 3b 0a 09 20 20 20 20 20 20 20 20 20  ion);..         
11a90 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f     return this._
11aa0 74 69 63 6b 73 54 6f 55 6e 69 74 73 28 6d 75 6c  ticksToUnits(mul
11ab0 74 69 70 6c 65 20 2a 20 73 75 62 64 69 76 69 73  tiple * subdivis
11ac0 69 6f 6e 29 3b 0a 09 20 20 20 20 20 20 20 20 7d  ion);..        }
11ad0 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
11ae0 2a 0a 09 09 20 2a 20 20 43 6f 6e 76 65 72 74 20  *... *  Convert 
11af0 73 65 63 6f 6e 64 73 20 69 6e 74 6f 20 74 69 63  seconds into tic
11b00 6b 73 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  ks... *  @param 
11b10 7b 53 65 63 6f 6e 64 73 7d 20 73 65 63 6f 6e 64  {Seconds} second
11b20 73 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20  s... *  @return 
11b30 20 7b 54 69 63 6b 73 7d 0a 09 09 20 2a 20 20 40   {Ticks}... *  @
11b40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20  private... */.. 
11b50 20 20 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72     Tone.Transpor
11b60 74 54 69 6d 65 2e 70 72 6f 74 6f 74 79 70 65 2e  tTime.prototype.
11b70 5f 73 65 63 6f 6e 64 73 54 6f 54 69 63 6b 73 20  _secondsToTicks 
11b80 3d 20 66 75 6e 63 74 69 6f 6e 20 28 73 65 63 6f  = function (seco
11b90 6e 64 73 29 20 7b 0a 09 20 20 20 20 20 20 20 20  nds) {..        
11ba0 76 61 72 20 71 75 61 72 74 65 72 54 69 6d 65 20  var quarterTime 
11bb0 3d 20 74 68 69 73 2e 5f 62 65 61 74 73 54 6f 55  = this._beatsToU
11bc0 6e 69 74 73 28 31 29 3b 0a 09 20 20 20 20 20 20  nits(1);..      
11bd0 20 20 76 61 72 20 71 75 61 72 74 65 72 73 20 3d    var quarters =
11be0 20 73 65 63 6f 6e 64 73 20 2f 20 71 75 61 72 74   seconds / quart
11bf0 65 72 54 69 6d 65 3b 0a 09 20 20 20 20 20 20 20  erTime;..       
11c00 20 72 65 74 75 72 6e 20 4d 61 74 68 2e 72 6f 75   return Math.rou
11c10 6e 64 28 71 75 61 72 74 65 72 73 20 2a 20 54 6f  nd(quarters * To
11c20 6e 65 2e 54 72 61 6e 73 70 6f 72 74 2e 50 50 51  ne.Transport.PPQ
11c30 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  );..    };..    
11c40 2f 2a 2a 0a 09 09 20 2a 20 20 45 76 61 6c 75 61  /**... *  Evalua
11c50 74 65 20 74 68 65 20 74 69 6d 65 20 65 78 70 72  te the time expr
11c60 65 73 73 69 6f 6e 2e 20 52 65 74 75 72 6e 73 20  ession. Returns 
11c70 76 61 6c 75 65 73 20 69 6e 20 74 69 63 6b 73 0a  values in ticks.
11c80 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 7b 54  .. *  @return {T
11c90 69 63 6b 73 7d 0a 09 09 20 2a 2f 0a 09 20 20 20  icks}... */..   
11ca0 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 54   Tone.TransportT
11cb0 69 6d 65 2e 70 72 6f 74 6f 74 79 70 65 2e 65 76  ime.prototype.ev
11cc0 61 6c 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  al = function ()
11cd0 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20   {..        var 
11ce0 76 61 6c 20 3d 20 74 68 69 73 2e 5f 73 65 63 6f  val = this._seco
11cf0 6e 64 73 54 6f 54 69 63 6b 73 28 74 68 69 73 2e  ndsToTicks(this.
11d00 5f 65 78 70 72 28 29 29 3b 0a 09 20 20 20 20 20  _expr());..     
11d10 20 20 20 72 65 74 75 72 6e 20 76 61 6c 20 2b 20     return val + 
11d20 28 74 68 69 73 2e 5f 70 6c 75 73 4e 6f 77 20 3f  (this._plusNow ?
11d30 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 2e   Tone.Transport.
11d40 74 69 63 6b 73 20 3a 20 30 29 3b 0a 09 20 20 20  ticks : 0);..   
11d50 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20   };..    /**... 
11d60 2a 20 20 52 65 74 75 72 6e 20 74 68 65 20 74 69  *  Return the ti
11d70 6d 65 20 69 6e 20 74 69 63 6b 73 2e 0a 09 09 20  me in ticks.... 
11d80 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 54 69 63  *  @return  {Tic
11d90 6b 73 7d 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  ks}... */..    T
11da0 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 54 69 6d  one.TransportTim
11db0 65 2e 70 72 6f 74 6f 74 79 70 65 2e 74 6f 54 69  e.prototype.toTi
11dc0 63 6b 73 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  cks = function (
11dd0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 72 65 74  ) {..        ret
11de0 75 72 6e 20 74 68 69 73 2e 65 76 61 6c 28 29 3b  urn this.eval();
11df0 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
11e00 2a 0a 09 09 20 2a 20 20 52 65 74 75 72 6e 20 74  *... *  Return t
11e10 68 65 20 74 69 6d 65 20 69 6e 20 73 65 63 6f 6e  he time in secon
11e20 64 73 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72  ds.... *  @retur
11e30 6e 20 20 7b 53 65 63 6f 6e 64 73 7d 0a 09 09 20  n  {Seconds}... 
11e40 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 72 61  */..    Tone.Tra
11e50 6e 73 70 6f 72 74 54 69 6d 65 2e 70 72 6f 74 6f  nsportTime.proto
11e60 74 79 70 65 2e 74 6f 53 65 63 6f 6e 64 73 20 3d  type.toSeconds =
11e70 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
11e80 20 20 20 20 20 20 20 20 76 61 72 20 76 61 6c 20          var val 
11e90 3d 20 74 68 69 73 2e 5f 65 78 70 72 28 29 3b 0a  = this._expr();.
11ea0 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
11eb0 76 61 6c 20 2b 20 28 74 68 69 73 2e 5f 70 6c 75  val + (this._plu
11ec0 73 4e 6f 77 20 3f 20 54 6f 6e 65 2e 54 72 61 6e  sNow ? Tone.Tran
11ed0 73 70 6f 72 74 2e 73 65 63 6f 6e 64 73 20 3a 20  sport.seconds : 
11ee0 30 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  0);..    };..   
11ef0 20 2f 2a 2a 0a 09 09 20 2a 20 20 52 65 74 75 72   /**... *  Retur
11f00 6e 20 74 68 65 20 74 69 6d 65 20 61 73 20 61 20  n the time as a 
11f10 66 72 65 71 75 65 6e 63 79 20 76 61 6c 75 65 0a  frequency value.
11f20 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b  .. *  @return  {
11f30 46 72 65 71 75 65 6e 63 79 7d 20 0a 09 09 20 2a  Frequency} ... *
11f40 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 72 61 6e  /..    Tone.Tran
11f50 73 70 6f 72 74 54 69 6d 65 2e 70 72 6f 74 6f 74  sportTime.protot
11f60 79 70 65 2e 74 6f 46 72 65 71 75 65 6e 63 79 20  ype.toFrequency 
11f70 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  = function () {.
11f80 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
11f90 31 20 2f 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e  1 / this.toSecon
11fa0 64 73 28 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20  ds();..    };.. 
11fb0 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 54     return Tone.T
11fc0 72 61 6e 73 70 6f 72 74 54 69 6d 65 3b 0a 09 7d  ransportTime;..}
11fd0 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74  );..Module(funct
11fe0 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20  ion (Tone) {..  
11ff0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
12000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20  /////////////.. 
12040 20 20 20 2f 2f 09 54 59 50 45 53 0a 09 20 20 20     //.TYPES..   
12050 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
12060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20  ////////////..  
120a0 20 20 2f 2a 2a 0a 09 09 20 2a 20 55 6e 69 74 73    /**... * Units
120b0 20 77 68 69 63 68 20 61 20 76 61 6c 75 65 20 63   which a value c
120c0 61 6e 20 74 61 6b 65 20 6f 6e 2e 0a 09 09 20 2a  an take on.... *
120d0 20 40 65 6e 75 6d 20 7b 53 74 72 69 6e 67 7d 0a   @enum {String}.
120e0 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
120f0 54 79 70 65 20 3d 20 7b 0a 09 20 20 20 20 20 20  Type = {..      
12100 20 20 2f 2a 2a 20 0a 09 09 09 20 2a 20 20 44 65    /** .... *  De
12110 66 61 75 6c 74 20 75 6e 69 74 73 0a 09 09 09 20  fault units.... 
12120 2a 20 20 40 74 79 70 65 64 65 66 20 7b 44 65 66  *  @typedef {Def
12130 61 75 6c 74 7d 0a 09 09 09 20 2a 2f 0a 09 20 20  ault}.... */..  
12140 20 20 20 20 20 20 44 65 66 61 75 6c 74 3a 20 27        Default: '
12150 6e 75 6d 62 65 72 27 2c 0a 09 20 20 20 20 20 20  number',..      
12160 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 69 6d    /**.... *  Tim
12170 65 20 63 61 6e 20 62 65 20 64 65 73 63 72 69 62  e can be describ
12180 65 64 20 69 6e 20 61 20 6e 75 6d 62 65 72 20 6f  ed in a number o
12190 66 20 77 61 79 73 2e 20 52 65 61 64 20 6d 6f 72  f ways. Read mor
121a0 65 20 5b 54 69 6d 65 5d 28 68 74 74 70 73 3a 2f  e [Time](https:/
121b0 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 54 6f 6e 65  /github.com/Tone
121c0 6a 73 2f 54 6f 6e 65 2e 6a 73 2f 77 69 6b 69 2f  js/Tone.js/wiki/
121d0 54 69 6d 65 29 2e 0a 09 09 09 20 2a 0a 09 09 09  Time)..... *....
121e0 20 2a 20 20 3c 75 6c 3e 0a 09 09 09 20 2a 20 20   *  <ul>.... *  
121f0 3c 6c 69 3e 4e 75 6d 62 65 72 73 2c 20 77 68 69  <li>Numbers, whi
12200 63 68 20 77 69 6c 6c 20 62 65 20 74 61 6b 65 6e  ch will be taken
12210 20 6c 69 74 65 72 61 6c 6c 79 20 61 73 20 74 68   literally as th
12220 65 20 74 69 6d 65 20 28 69 6e 20 73 65 63 6f 6e  e time (in secon
12230 64 73 29 2e 3c 2f 6c 69 3e 0a 09 09 09 20 2a 20  ds).</li>.... * 
12240 20 3c 6c 69 3e 4e 6f 74 61 74 69 6f 6e 2c 20 28   <li>Notation, (
12250 22 34 6e 22 2c 20 22 38 74 22 29 20 64 65 73 63  "4n", "8t") desc
12260 72 69 62 65 73 20 74 69 6d 65 20 69 6e 20 42 50  ribes time in BP
12270 4d 20 61 6e 64 20 74 69 6d 65 20 73 69 67 6e 61  M and time signa
12280 74 75 72 65 20 72 65 6c 61 74 69 76 65 20 76 61  ture relative va
12290 6c 75 65 73 2e 3c 2f 6c 69 3e 0a 09 09 09 20 2a  lues.</li>.... *
122a0 20 20 3c 6c 69 3e 54 72 61 6e 73 70 6f 72 74 54    <li>TransportT
122b0 69 6d 65 2c 20 28 22 34 3a 33 3a 32 22 29 20 77  ime, ("4:3:2") w
122c0 69 6c 6c 20 61 6c 73 6f 20 70 72 6f 76 69 64 65  ill also provide
122d0 20 74 65 6d 70 6f 20 61 6e 64 20 74 69 6d 65 20   tempo and time 
122e0 73 69 67 6e 61 74 75 72 65 20 72 65 6c 61 74 69  signature relati
122f0 76 65 20 74 69 6d 65 73 20 0a 09 09 09 20 2a 20  ve times .... * 
12300 20 69 6e 20 74 68 65 20 66 6f 72 6d 20 42 41 52   in the form BAR
12310 53 3a 51 55 41 52 54 45 52 53 3a 53 49 58 54 45  S:QUARTERS:SIXTE
12320 45 4e 54 48 53 2e 3c 2f 6c 69 3e 0a 09 09 09 20  ENTHS.</li>.... 
12330 2a 20 20 3c 6c 69 3e 46 72 65 71 75 65 6e 63 79  *  <li>Frequency
12340 2c 20 28 22 38 68 7a 22 29 20 69 73 20 63 6f 6e  , ("8hz") is con
12350 76 65 72 74 65 64 20 74 6f 20 74 68 65 20 6c 65  verted to the le
12360 6e 67 74 68 20 6f 66 20 74 68 65 20 63 79 63 6c  ngth of the cycl
12370 65 20 69 6e 20 73 65 63 6f 6e 64 73 2e 3c 2f 6c  e in seconds.</l
12380 69 3e 0a 09 09 09 20 2a 20 20 3c 6c 69 3e 4e 6f  i>.... *  <li>No
12390 77 2d 52 65 6c 61 74 69 76 65 2c 20 28 22 2b 31  w-Relative, ("+1
123a0 22 29 20 70 72 65 66 69 78 20 61 6e 79 20 6f 66  ") prefix any of
123b0 20 74 68 65 20 61 62 6f 76 65 20 77 69 74 68 20   the above with 
123c0 22 2b 22 20 61 6e 64 20 69 74 20 77 69 6c 6c 20  "+" and it will 
123d0 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  be interpreted a
123e0 73 20 0a 09 09 09 20 2a 20 20 22 74 68 65 20 63  s .... *  "the c
123f0 75 72 72 65 6e 74 20 74 69 6d 65 20 70 6c 75 73  urrent time plus
12400 20 77 68 61 74 65 76 65 72 20 65 78 70 72 65 73   whatever expres
12410 73 69 6f 6e 20 66 6f 6c 6c 6f 77 73 22 2e 3c 2f  sion follows".</
12420 6c 69 3e 0a 09 09 09 20 2a 20 20 3c 6c 69 3e 45  li>.... *  <li>E
12430 78 70 72 65 73 73 69 6f 6e 73 2c 20 28 22 33 3a  xpressions, ("3:
12440 30 20 2b 20 32 20 2d 20 28 31 6d 20 2f 20 37 29  0 + 2 - (1m / 7)
12450 22 29 20 61 6e 79 20 6f 66 20 74 68 65 20 61 62  ") any of the ab
12460 6f 76 65 20 63 61 6e 20 61 6c 73 6f 20 62 65 20  ove can also be 
12470 63 6f 6d 62 69 6e 65 64 20 0a 09 09 09 20 2a 20  combined .... * 
12480 20 69 6e 74 6f 20 61 20 6d 61 74 68 65 6d 61 74   into a mathemat
12490 69 63 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20  ical expression 
124a0 77 68 69 63 68 20 77 69 6c 6c 20 62 65 20 65 76  which will be ev
124b0 61 6c 75 61 74 65 64 20 74 6f 20 63 6f 6d 70 75  aluated to compu
124c0 74 65 20 74 68 65 20 64 65 73 69 72 65 64 20 74  te the desired t
124d0 69 6d 65 2e 3c 2f 6c 69 3e 0a 09 09 09 20 2a 20  ime.</li>.... * 
124e0 20 3c 6c 69 3e 4e 6f 20 41 72 67 75 6d 65 6e 74   <li>No Argument
124f0 2c 20 66 6f 72 20 6d 65 74 68 6f 64 73 20 77 68  , for methods wh
12500 69 63 68 20 61 63 63 65 70 74 20 74 69 6d 65 2c  ich accept time,
12510 20 6e 6f 20 61 72 67 75 6d 65 6e 74 20 77 69 6c   no argument wil
12520 6c 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64  l be interpreted
12530 20 61 73 20 0a 09 09 09 20 2a 20 20 22 6e 6f 77   as .... *  "now
12540 22 20 28 69 2e 65 2e 20 74 68 65 20 63 75 72 72  " (i.e. the curr
12550 65 6e 74 54 69 6d 65 29 2e 3c 2f 6c 69 3e 0a 09  entTime).</li>..
12560 09 09 20 2a 20 20 3c 2f 75 6c 3e 0a 09 09 09 20  .. *  </ul>.... 
12570 2a 20 20 0a 09 09 09 20 2a 20 20 40 74 79 70 65  *  .... *  @type
12580 64 65 66 20 7b 54 69 6d 65 7d 0a 09 09 09 20 2a  def {Time}.... *
12590 2f 0a 09 20 20 20 20 20 20 20 20 54 69 6d 65 3a  /..        Time:
125a0 20 27 74 69 6d 65 27 2c 0a 09 20 20 20 20 20 20   'time',..      
125b0 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 46 72 65    /**.... *  Fre
125c0 71 75 65 6e 63 79 20 63 61 6e 20 62 65 20 64 65  quency can be de
125d0 73 63 72 69 62 65 64 20 73 69 6d 69 6c 61 72 20  scribed similar 
125e0 74 6f 20 74 69 6d 65 2c 20 65 78 63 65 70 74 20  to time, except 
125f0 75 6c 74 69 6d 61 74 65 6c 79 20 74 68 65 0a 09  ultimately the..
12600 09 09 20 2a 20 20 76 61 6c 75 65 73 20 61 72 65  .. *  values are
12610 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 66 72   converted to fr
12620 65 71 75 65 6e 63 79 20 69 6e 73 74 65 61 64 20  equency instead 
12630 6f 66 20 73 65 63 6f 6e 64 73 2e 20 41 20 6e 75  of seconds. A nu
12640 6d 62 65 72 0a 09 09 09 20 2a 20 20 69 73 20 74  mber.... *  is t
12650 61 6b 65 6e 20 6c 69 74 65 72 61 6c 6c 79 20 61  aken literally a
12660 73 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 68  s the value in h
12670 65 72 74 7a 2e 20 41 64 64 69 74 69 6f 6e 61 6c  ertz. Additional
12680 6c 79 20 61 6e 79 20 6f 66 20 74 68 65 20 0a 09  ly any of the ..
12690 09 09 20 2a 20 20 54 69 6d 65 20 65 6e 63 6f 64  .. *  Time encod
126a0 69 6e 67 73 20 63 61 6e 20 62 65 20 75 73 65 64  ings can be used
126b0 2e 20 4e 6f 74 65 20 6e 61 6d 65 73 20 69 6e 20  . Note names in 
126c0 74 68 65 20 66 6f 72 6d 0a 09 09 09 20 2a 20 20  the form.... *  
126d0 6f 66 20 4e 4f 54 45 20 4f 43 54 41 56 45 20 28  of NOTE OCTAVE (
126e0 69 2e 65 2e 20 43 34 29 20 61 72 65 20 61 6c 73  i.e. C4) are als
126f0 6f 20 61 63 63 65 70 74 65 64 20 61 6e 64 20 63  o accepted and c
12700 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 68 65 69  onverted to thei
12710 72 0a 09 09 09 20 2a 20 20 66 72 65 71 75 65 6e  r.... *  frequen
12720 63 79 20 76 61 6c 75 65 2e 20 0a 09 09 09 20 2a  cy value. .... *
12730 20 20 40 74 79 70 65 64 65 66 20 7b 46 72 65 71    @typedef {Freq
12740 75 65 6e 63 79 7d 0a 09 09 09 20 2a 2f 0a 09 20  uency}.... */.. 
12750 20 20 20 20 20 20 20 46 72 65 71 75 65 6e 63 79         Frequency
12760 3a 20 27 66 72 65 71 75 65 6e 63 79 27 2c 0a 09  : 'frequency',..
12770 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
12780 2a 20 20 54 72 61 6e 73 70 6f 72 74 54 69 6d 65  *  TransportTime
12790 20 64 65 73 63 72 69 62 65 73 20 61 20 70 6f 73   describes a pos
127a0 69 74 69 6f 6e 20 61 6c 6f 6e 67 20 74 68 65 20  ition along the 
127b0 54 72 61 6e 73 70 6f 72 74 27 73 20 74 69 6d 65  Transport's time
127c0 6c 69 6e 65 2e 20 49 74 20 69 73 0a 09 09 09 20  line. It is.... 
127d0 2a 20 20 73 69 6d 69 6c 61 72 20 74 6f 20 54 69  *  similar to Ti
127e0 6d 65 20 69 6e 20 74 68 61 74 20 69 74 20 75 73  me in that it us
127f0 65 73 20 61 6c 6c 20 74 68 65 20 73 61 6d 65 20  es all the same 
12800 65 6e 63 6f 64 69 6e 67 73 2c 20 62 75 74 20 54  encodings, but T
12810 72 61 6e 73 70 6f 72 74 54 69 6d 65 20 73 70 65  ransportTime spe
12820 63 69 66 69 63 61 6c 6c 79 0a 09 09 09 20 2a 20  cifically.... * 
12830 20 70 65 72 74 61 69 6e 73 20 74 6f 20 74 68 65   pertains to the
12840 20 54 72 61 6e 73 70 6f 72 74 27 73 20 74 69 6d   Transport's tim
12850 65 6c 69 6e 65 2c 20 77 68 69 63 68 20 69 73 20  eline, which is 
12860 73 74 61 72 74 61 62 6c 65 2c 20 73 74 6f 70 70  startable, stopp
12870 61 62 6c 65 2c 20 6c 6f 6f 70 61 62 6c 65 2c 20  able, loopable, 
12880 61 6e 64 20 73 65 65 6b 61 62 6c 65 2e 20 0a 09  and seekable. ..
12890 09 09 20 2a 20 20 5b 52 65 61 64 20 6d 6f 72 65  .. *  [Read more
128a0 5d 28 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62  ](https://github
128b0 2e 63 6f 6d 2f 54 6f 6e 65 6a 73 2f 54 6f 6e 65  .com/Tonejs/Tone
128c0 2e 6a 73 2f 77 69 6b 69 2f 54 72 61 6e 73 70 6f  .js/wiki/Transpo
128d0 72 74 54 69 6d 65 29 0a 09 09 09 20 2a 20 20 40  rtTime).... *  @
128e0 74 79 70 65 64 65 66 20 7b 54 72 61 6e 73 70 6f  typedef {Transpo
128f0 72 74 54 69 6d 65 7d 0a 09 09 09 20 2a 2f 0a 09  rtTime}.... */..
12900 20 20 20 20 20 20 20 20 54 72 61 6e 73 70 6f 72          Transpor
12910 74 54 69 6d 65 3a 20 27 74 72 61 6e 73 70 6f 72  tTime: 'transpor
12920 74 54 69 6d 65 27 2c 0a 09 20 20 20 20 20 20 20  tTime',..       
12930 20 2f 2a 2a 20 0a 09 09 09 20 2a 20 20 54 69 63   /** .... *  Tic
12940 6b 73 20 61 72 65 20 74 68 65 20 62 61 73 69 63  ks are the basic
12950 20 73 75 62 75 6e 69 74 20 6f 66 20 74 68 65 20   subunit of the 
12960 54 72 61 6e 73 70 6f 72 74 2e 20 54 68 65 79 20  Transport. They 
12970 61 72 65 0a 09 09 09 20 2a 20 20 74 68 65 20 73  are.... *  the s
12980 6d 61 6c 6c 65 73 74 20 75 6e 69 74 20 6f 66 20  mallest unit of 
12990 74 69 6d 65 20 74 68 61 74 20 74 68 65 20 54 72  time that the Tr
129a0 61 6e 73 70 6f 72 74 20 73 75 70 70 6f 72 74 73  ansport supports
129b0 2e 0a 09 09 09 20 2a 20 20 40 74 79 70 65 64 65  ..... *  @typede
129c0 66 20 7b 54 69 63 6b 73 7d 0a 09 09 09 20 2a 2f  f {Ticks}.... */
129d0 0a 09 20 20 20 20 20 20 20 20 54 69 63 6b 73 3a  ..        Ticks:
129e0 20 27 74 69 63 6b 73 27 2c 0a 09 20 20 20 20 20   'ticks',..     
129f0 20 20 20 2f 2a 2a 20 0a 09 09 09 20 2a 20 20 4e     /** .... *  N
12a00 6f 72 6d 61 6c 20 76 61 6c 75 65 73 20 61 72 65  ormal values are
12a10 20 77 69 74 68 69 6e 20 74 68 65 20 72 61 6e 67   within the rang
12a20 65 20 5b 30 2c 20 31 5d 2e 0a 09 09 09 20 2a 20  e [0, 1]..... * 
12a30 20 40 74 79 70 65 64 65 66 20 7b 4e 6f 72 6d 61   @typedef {Norma
12a40 6c 52 61 6e 67 65 7d 0a 09 09 09 20 2a 2f 0a 09  lRange}.... */..
12a50 20 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c 52 61          NormalRa
12a60 6e 67 65 3a 20 27 6e 6f 72 6d 61 6c 52 61 6e 67  nge: 'normalRang
12a70 65 27 2c 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  e',..        /**
12a80 20 0a 09 09 09 20 2a 20 20 41 75 64 69 6f 52 61   .... *  AudioRa
12a90 6e 67 65 20 76 61 6c 75 65 73 20 61 72 65 20 62  nge values are b
12aa0 65 74 77 65 65 6e 20 5b 2d 31 2c 20 31 5d 2e 0a  etween [-1, 1]..
12ab0 09 09 09 20 2a 20 20 40 74 79 70 65 64 65 66 20  ... *  @typedef 
12ac0 7b 41 75 64 69 6f 52 61 6e 67 65 7d 0a 09 09 09  {AudioRange}....
12ad0 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 41 75 64   */..        Aud
12ae0 69 6f 52 61 6e 67 65 3a 20 27 61 75 64 69 6f 52  ioRange: 'audioR
12af0 61 6e 67 65 27 2c 0a 09 20 20 20 20 20 20 20 20  ange',..        
12b00 2f 2a 2a 20 0a 09 09 09 20 2a 20 20 44 65 63 69  /** .... *  Deci
12b10 62 65 6c 73 20 61 72 65 20 61 20 6c 6f 67 61 72  bels are a logar
12b20 69 74 68 6d 69 63 20 75 6e 69 74 20 6f 66 20 6d  ithmic unit of m
12b30 65 61 73 75 72 65 6d 65 6e 74 20 77 68 69 63 68  easurement which
12b40 20 69 73 20 75 73 65 66 75 6c 20 66 6f 72 20 76   is useful for v
12b50 6f 6c 75 6d 65 0a 09 09 09 20 2a 20 20 62 65 63  olume.... *  bec
12b60 61 75 73 65 20 6f 66 20 74 68 65 20 6c 6f 67 61  ause of the loga
12b70 72 69 74 68 6d 69 63 20 77 61 79 20 74 68 61 74  rithmic way that
12b80 20 77 65 20 70 65 72 63 65 69 76 65 20 6c 6f 75   we perceive lou
12b90 64 6e 65 73 73 2e 20 30 20 64 65 63 69 62 65 6c  dness. 0 decibel
12ba0 73 20 0a 09 09 09 20 2a 20 20 6d 65 61 6e 73 20  s .... *  means 
12bb0 6e 6f 20 63 68 61 6e 67 65 20 69 6e 20 76 6f 6c  no change in vol
12bc0 75 6d 65 2e 20 2d 31 30 64 62 20 69 73 20 61 70  ume. -10db is ap
12bd0 70 72 6f 78 69 6d 61 74 65 6c 79 20 68 61 6c 66  proximately half
12be0 20 61 73 20 6c 6f 75 64 20 61 6e 64 20 31 30 64   as loud and 10d
12bf0 62 20 0a 09 09 09 20 2a 20 20 69 73 20 74 77 69  b .... *  is twi
12c00 63 65 20 69 73 20 6c 6f 75 64 2e 20 0a 09 09 09  ce is loud. ....
12c10 20 2a 20 20 40 74 79 70 65 64 65 66 20 7b 44 65   *  @typedef {De
12c20 63 69 62 65 6c 73 7d 0a 09 09 09 20 2a 2f 0a 09  cibels}.... */..
12c30 20 20 20 20 20 20 20 20 44 65 63 69 62 65 6c 73          Decibels
12c40 3a 20 27 64 62 27 2c 0a 09 20 20 20 20 20 20 20  : 'db',..       
12c50 20 2f 2a 2a 20 0a 09 09 09 20 2a 20 20 48 61 6c   /** .... *  Hal
12c60 66 2d 73 74 65 70 20 6e 6f 74 65 20 69 6e 63 72  f-step note incr
12c70 65 6d 65 6e 74 73 2c 20 69 2e 65 2e 20 31 32 20  ements, i.e. 12 
12c80 69 73 20 61 6e 20 6f 63 74 61 76 65 20 61 62 6f  is an octave abo
12c90 76 65 20 74 68 65 20 72 6f 6f 74 2e 20 61 6e 64  ve the root. and
12ca0 20 31 20 69 73 20 61 20 68 61 6c 66 2d 73 74 65   1 is a half-ste
12cb0 70 20 75 70 2e 0a 09 09 09 20 2a 20 20 40 74 79  p up..... *  @ty
12cc0 70 65 64 65 66 20 7b 49 6e 74 65 72 76 61 6c 7d  pedef {Interval}
12cd0 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
12ce0 20 49 6e 74 65 72 76 61 6c 3a 20 27 69 6e 74 65   Interval: 'inte
12cf0 72 76 61 6c 27 2c 0a 09 20 20 20 20 20 20 20 20  rval',..        
12d00 2f 2a 2a 20 0a 09 09 09 20 2a 20 20 42 65 61 74  /** .... *  Beat
12d10 73 20 70 65 72 20 6d 69 6e 75 74 65 2e 20 0a 09  s per minute. ..
12d20 09 09 20 2a 20 20 40 74 79 70 65 64 65 66 20 7b  .. *  @typedef {
12d30 42 50 4d 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20  BPM}.... */..   
12d40 20 20 20 20 20 42 50 4d 3a 20 27 62 70 6d 27 2c       BPM: 'bpm',
12d50 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 20 0a 09  ..        /** ..
12d60 09 09 20 2a 20 20 54 68 65 20 76 61 6c 75 65 20  .. *  The value 
12d70 6d 75 73 74 20 62 65 20 67 72 65 61 74 65 72 20  must be greater 
12d80 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
12d90 20 30 2e 0a 09 09 09 20 2a 20 20 40 74 79 70 65   0..... *  @type
12da0 64 65 66 20 7b 50 6f 73 69 74 69 76 65 7d 0a 09  def {Positive}..
12db0 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 50  .. */..        P
12dc0 6f 73 69 74 69 76 65 3a 20 27 70 6f 73 69 74 69  ositive: 'positi
12dd0 76 65 27 2c 0a 09 20 20 20 20 20 20 20 20 2f 2a  ve',..        /*
12de0 2a 20 0a 09 09 09 20 2a 20 20 41 20 63 65 6e 74  * .... *  A cent
12df0 20 69 73 20 61 20 68 75 6e 64 72 65 64 74 68 20   is a hundredth 
12e00 6f 66 20 61 20 73 65 6d 69 74 6f 6e 65 2e 20 0a  of a semitone. .
12e10 09 09 09 20 2a 20 20 40 74 79 70 65 64 65 66 20  ... *  @typedef 
12e20 7b 43 65 6e 74 73 7d 0a 09 09 09 20 2a 2f 0a 09  {Cents}.... */..
12e30 20 20 20 20 20 20 20 20 43 65 6e 74 73 3a 20 27          Cents: '
12e40 63 65 6e 74 73 27 2c 0a 09 20 20 20 20 20 20 20  cents',..       
12e50 20 2f 2a 2a 20 0a 09 09 09 20 2a 20 20 41 6e 67   /** .... *  Ang
12e60 6c 65 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64  le between 0 and
12e70 20 33 36 30 2e 20 0a 09 09 09 20 2a 20 20 40 74   360. .... *  @t
12e80 79 70 65 64 65 66 20 7b 44 65 67 72 65 65 73 7d  ypedef {Degrees}
12e90 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
12ea0 20 44 65 67 72 65 65 73 3a 20 27 64 65 67 72 65   Degrees: 'degre
12eb0 65 73 27 2c 0a 09 20 20 20 20 20 20 20 20 2f 2a  es',..        /*
12ec0 2a 20 0a 09 09 09 20 2a 20 20 41 20 6e 75 6d 62  * .... *  A numb
12ed0 65 72 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  er representing 
12ee0 61 20 6d 69 64 69 20 6e 6f 74 65 2e 0a 09 09 09  a midi note.....
12ef0 20 2a 20 20 40 74 79 70 65 64 65 66 20 7b 4d 49   *  @typedef {MI
12f00 44 49 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  DI}.... */..    
12f10 20 20 20 20 4d 49 44 49 3a 20 27 6d 69 64 69 27      MIDI: 'midi'
12f20 2c 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 20 0a  ,..        /** .
12f30 09 09 09 20 2a 20 20 41 20 63 6f 6c 6f 6e 2d 73  ... *  A colon-s
12f40 65 70 61 72 61 74 65 64 20 72 65 70 72 65 73 65  eparated represe
12f50 6e 74 61 74 69 6f 6e 20 6f 66 20 74 69 6d 65 20  ntation of time 
12f60 69 6e 20 74 68 65 20 66 6f 72 6d 20 6f 66 0a 09  in the form of..
12f70 09 09 20 2a 20 20 42 61 72 73 3a 42 65 61 74 73  .. *  Bars:Beats
12f80 3a 53 69 78 74 65 65 6e 74 68 73 2e 20 0a 09 09  :Sixteenths. ...
12f90 09 20 2a 20 20 40 74 79 70 65 64 65 66 20 7b 42  . *  @typedef {B
12fa0 61 72 73 42 65 61 74 73 53 69 78 74 65 65 6e 74  arsBeatsSixteent
12fb0 68 73 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  hs}.... */..    
12fc0 20 20 20 20 42 61 72 73 42 65 61 74 73 53 69 78      BarsBeatsSix
12fd0 74 65 65 6e 74 68 73 3a 20 27 62 61 72 73 42 65  teenths: 'barsBe
12fe0 61 74 73 53 69 78 74 65 65 6e 74 68 73 27 2c 0a  atsSixteenths',.
12ff0 09 20 20 20 20 20 20 20 20 2f 2a 2a 20 0a 09 09  .        /** ...
13000 09 20 2a 20 20 53 61 6d 70 6c 69 6e 67 20 69 73  . *  Sampling is
13010 20 74 68 65 20 72 65 64 75 63 74 69 6f 6e 20 6f   the reduction o
13020 66 20 61 20 63 6f 6e 74 69 6e 75 6f 75 73 20 73  f a continuous s
13030 69 67 6e 61 6c 20 74 6f 20 61 20 64 69 73 63 72  ignal to a discr
13040 65 74 65 20 73 69 67 6e 61 6c 2e 0a 09 09 09 20  ete signal..... 
13050 2a 20 20 41 75 64 69 6f 20 69 73 20 74 79 70 69  *  Audio is typi
13060 63 61 6c 6c 79 20 73 61 6d 70 6c 65 64 20 34 34  cally sampled 44
13070 31 30 30 20 74 69 6d 65 73 20 70 65 72 20 73 65  100 times per se
13080 63 6f 6e 64 2e 20 0a 09 09 09 20 2a 20 20 40 74  cond. .... *  @t
13090 79 70 65 64 65 66 20 7b 53 61 6d 70 6c 65 73 7d  ypedef {Samples}
130a0 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
130b0 20 53 61 6d 70 6c 65 73 3a 20 27 73 61 6d 70 6c   Samples: 'sampl
130c0 65 73 27 2c 0a 09 20 20 20 20 20 20 20 20 2f 2a  es',..        /*
130d0 2a 20 0a 09 09 09 20 2a 20 20 48 65 72 74 7a 20  * .... *  Hertz 
130e0 61 72 65 20 61 20 66 72 65 71 75 65 6e 63 79 20  are a frequency 
130f0 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 64  representation d
13100 65 66 69 6e 65 64 20 61 73 20 6f 6e 65 20 63 79  efined as one cy
13110 63 6c 65 20 70 65 72 20 73 65 63 6f 6e 64 2e 0a  cle per second..
13120 09 09 09 20 2a 20 20 40 74 79 70 65 64 65 66 20  ... *  @typedef 
13130 7b 48 65 72 74 7a 7d 0a 09 09 09 20 2a 2f 0a 09  {Hertz}.... */..
13140 20 20 20 20 20 20 20 20 48 65 72 74 7a 3a 20 27          Hertz: '
13150 68 65 72 74 7a 27 2c 0a 09 20 20 20 20 20 20 20  hertz',..       
13160 20 2f 2a 2a 20 0a 09 09 09 20 2a 20 20 41 20 66   /** .... *  A f
13170 72 65 71 75 65 6e 63 79 20 72 65 70 72 65 73 65  requency represe
13180 6e 74 65 64 20 62 79 20 61 20 6c 65 74 74 65 72  nted by a letter
13190 20 6e 61 6d 65 2c 20 0a 09 09 09 20 2a 20 20 61   name, .... *  a
131a0 63 63 69 64 65 6e 74 61 6c 20 61 6e 64 20 6f 63  ccidental and oc
131b0 74 61 76 65 2e 20 54 68 69 73 20 73 79 73 74 65  tave. This syste
131c0 6d 20 69 73 20 6b 6e 6f 77 6e 20 61 73 0a 09 09  m is known as...
131d0 09 20 2a 20 20 5b 53 63 69 65 6e 74 69 66 69 63  . *  [Scientific
131e0 20 50 69 74 63 68 20 4e 6f 74 61 74 69 6f 6e 5d   Pitch Notation]
131f0 28 68 74 74 70 73 3a 2f 2f 65 6e 2e 77 69 6b 69  (https://en.wiki
13200 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 53  pedia.org/wiki/S
13210 63 69 65 6e 74 69 66 69 63 5f 70 69 74 63 68 5f  cientific_pitch_
13220 6e 6f 74 61 74 69 6f 6e 29 2e 0a 09 09 09 20 2a  notation)..... *
13230 20 20 40 74 79 70 65 64 65 66 20 7b 4e 6f 74 65    @typedef {Note
13240 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  }.... */..      
13250 20 20 4e 6f 74 65 3a 20 27 6e 6f 74 65 27 2c 0a    Note: 'note',.
13260 09 20 20 20 20 20 20 20 20 2f 2a 2a 20 0a 09 09  .        /** ...
13270 09 20 2a 20 20 4f 6e 65 20 6d 69 6c 6c 69 73 65  . *  One millise
13280 63 6f 6e 64 20 69 73 20 61 20 74 68 6f 75 73 61  cond is a thousa
13290 6e 64 74 68 20 6f 66 20 61 20 73 65 63 6f 6e 64  ndth of a second
132a0 2e 20 0a 09 09 09 20 2a 20 20 40 74 79 70 65 64  . .... *  @typed
132b0 65 66 20 7b 4d 69 6c 6c 69 73 65 63 6f 6e 64 73  ef {Milliseconds
132c0 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  }.... */..      
132d0 20 20 4d 69 6c 6c 69 73 65 63 6f 6e 64 73 3a 20    Milliseconds: 
132e0 27 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 27 2c 0a  'milliseconds',.
132f0 09 20 20 20 20 20 20 20 20 2f 2a 2a 20 0a 09 09  .        /** ...
13300 09 20 2a 20 20 53 65 63 6f 6e 64 73 20 61 72 65  . *  Seconds are
13310 20 74 68 65 20 74 69 6d 65 20 75 6e 69 74 20 6f   the time unit o
13320 66 20 74 68 65 20 41 75 64 69 6f 43 6f 6e 74 65  f the AudioConte
13330 78 74 2e 20 49 6e 20 74 68 65 20 65 6e 64 2c 20  xt. In the end, 
13340 0a 09 09 09 20 2a 20 20 61 6c 6c 20 76 61 6c 75  .... *  all valu
13350 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20 65 76  es need to be ev
13360 61 6c 75 61 74 65 64 20 74 6f 20 73 65 63 6f 6e  aluated to secon
13370 64 73 2e 20 0a 09 09 09 20 2a 20 20 40 74 79 70  ds. .... *  @typ
13380 65 64 65 66 20 7b 53 65 63 6f 6e 64 73 7d 0a 09  edef {Seconds}..
13390 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 53  .. */..        S
133a0 65 63 6f 6e 64 73 3a 20 27 73 65 63 6f 6e 64 73  econds: 'seconds
133b0 27 2c 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 20  ',..        /** 
133c0 0a 09 09 09 20 2a 20 20 41 20 73 74 72 69 6e 67  .... *  A string
133d0 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 61 20   representing a 
133e0 64 75 72 61 74 69 6f 6e 20 72 65 6c 61 74 69 76  duration relativ
133f0 65 20 74 6f 20 61 20 6d 65 61 73 75 72 65 2e 20  e to a measure. 
13400 0a 09 09 09 20 2a 20 20 3c 75 6c 3e 0a 09 09 09  .... *  <ul>....
13410 20 2a 20 20 09 3c 6c 69 3e 22 34 6e 22 20 3d 20   *  .<li>"4n" = 
13420 71 75 61 72 74 65 72 20 6e 6f 74 65 3c 2f 6c 69  quarter note</li
13430 3e 0a 09 09 09 20 2a 20 20 20 09 3c 6c 69 3e 22  >.... *   .<li>"
13440 32 6d 22 20 3d 20 74 77 6f 20 6d 65 61 73 75 72  2m" = two measur
13450 65 73 3c 2f 6c 69 3e 0a 09 09 09 20 2a 20 20 20  es</li>.... *   
13460 20 09 3c 6c 69 3e 22 38 74 22 20 3d 20 65 69 67   .<li>"8t" = eig
13470 68 74 68 2d 6e 6f 74 65 20 74 72 69 70 6c 65 74  hth-note triplet
13480 3c 2f 6c 69 3e 0a 09 09 09 20 2a 20 20 3c 2f 75  </li>.... *  </u
13490 6c 3e 0a 09 09 09 20 2a 20 20 40 74 79 70 65 64  l>.... *  @typed
134a0 65 66 20 7b 4e 6f 74 61 74 69 6f 6e 7d 0a 09 09  ef {Notation}...
134b0 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 4e 6f  . */..        No
134c0 74 61 74 69 6f 6e 3a 20 27 6e 6f 74 61 74 69 6f  tation: 'notatio
134d0 6e 27 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  n'..    };..    
134e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
134f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20  ///////////..   
13530 20 2f 2f 20 41 55 47 4d 45 4e 54 20 54 4f 4e 45   // AUGMENT TONE
13540 27 73 20 50 52 4f 54 4f 54 59 50 45 0a 09 20 20  's PROTOTYPE..  
13550 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
13560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20  /////////////.. 
135a0 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 6f 6e     /**... *  Con
135b0 76 65 72 74 20 54 69 6d 65 20 69 6e 74 6f 20 73  vert Time into s
135c0 65 63 6f 6e 64 73 2e 0a 09 09 20 2a 20 20 0a 09  econds.... *  ..
135d0 09 20 2a 20 20 55 6e 6c 69 6b 65 20 74 68 65 20  . *  Unlike the 
135e0 6d 65 74 68 6f 64 20 77 68 69 63 68 20 69 74 20  method which it 
135f0 6f 76 65 72 72 69 64 65 73 2c 20 74 68 69 73 20  overrides, this 
13600 74 61 6b 65 73 20 69 6e 74 6f 20 61 63 63 6f 75  takes into accou
13610 6e 74 20 0a 09 09 20 2a 20 20 74 72 61 6e 73 70  nt ... *  transp
13620 6f 72 74 74 69 6d 65 20 61 6e 64 20 6d 75 73 69  orttime and musi
13630 63 61 6c 20 6e 6f 74 61 74 69 6f 6e 2e 0a 09 09  cal notation....
13640 20 2a 0a 09 09 20 2a 20 20 54 69 6d 65 20 3a 20   *... *  Time : 
13650 31 2e 34 30 0a 09 09 20 2a 20 20 4e 6f 74 61 74  1.40... *  Notat
13660 69 6f 6e 3a 20 34 6e 7c 31 6d 7c 32 74 0a 09 09  ion: 4n|1m|2t...
13670 20 2a 20 20 4e 6f 77 20 52 65 6c 61 74 69 76 65   *  Now Relative
13680 3a 20 2b 33 6e 0a 09 09 20 2a 20 20 4d 61 74 68  : +3n... *  Math
13690 3a 20 33 6e 2b 31 36 6e 20 6f 72 20 65 76 65 6e  : 3n+16n or even
136a0 20 63 6f 6d 70 6c 69 63 61 74 65 64 20 65 78 70   complicated exp
136b0 72 65 73 73 69 6f 6e 73 20 28 28 33 6e 2a 32 29  ressions ((3n*2)
136c0 2f 36 20 2b 20 31 29 0a 09 09 20 2a 0a 09 09 20  /6 + 1)... *... 
136d0 2a 20 20 40 70 61 72 61 6d 20 20 7b 54 69 6d 65  *  @param  {Time
136e0 7d 20 74 69 6d 65 20 0a 09 09 20 2a 20 20 40 72  } time ... *  @r
136f0 65 74 75 72 6e 20 7b 53 65 63 6f 6e 64 73 7d 20  eturn {Seconds} 
13700 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
13710 2e 70 72 6f 74 6f 74 79 70 65 2e 74 6f 53 65 63  .prototype.toSec
13720 6f 6e 64 73 20 3d 20 66 75 6e 63 74 69 6f 6e 20  onds = function 
13730 28 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20  (time) {..      
13740 20 20 69 66 20 28 74 68 69 73 2e 69 73 4e 75 6d    if (this.isNum
13750 62 65 72 28 74 69 6d 65 29 29 20 7b 0a 09 20 20  ber(time)) {..  
13760 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
13770 20 74 69 6d 65 3b 0a 09 20 20 20 20 20 20 20 20   time;..        
13780 7d 20 65 6c 73 65 20 69 66 20 28 74 68 69 73 2e  } else if (this.
13790 69 73 55 6e 64 65 66 28 74 69 6d 65 29 29 20 7b  isUndef(time)) {
137a0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
137b0 74 75 72 6e 20 74 68 69 73 2e 6e 6f 77 28 29 3b  turn this.now();
137c0 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
137d0 20 69 66 20 28 74 68 69 73 2e 69 73 53 74 72 69   if (this.isStri
137e0 6e 67 28 74 69 6d 65 29 29 20 7b 0a 09 20 20 20  ng(time)) {..   
137f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
13800 6e 65 77 20 54 6f 6e 65 2e 54 69 6d 65 28 74 69  new Tone.Time(ti
13810 6d 65 29 2e 74 6f 53 65 63 6f 6e 64 73 28 29 3b  me).toSeconds();
13820 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
13830 20 69 66 20 28 74 69 6d 65 20 69 6e 73 74 61 6e   if (time instan
13840 63 65 6f 66 20 54 6f 6e 65 2e 54 69 6d 65 42 61  ceof Tone.TimeBa
13850 73 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  se) {..         
13860 20 20 20 72 65 74 75 72 6e 20 74 69 6d 65 2e 74     return time.t
13870 6f 53 65 63 6f 6e 64 73 28 29 3b 0a 09 20 20 20  oSeconds();..   
13880 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a 09       }..    };..
13890 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 6f      /**... *  Co
138a0 6e 76 65 72 74 20 61 20 66 72 65 71 75 65 6e 63  nvert a frequenc
138b0 79 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  y representation
138c0 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e 0a   into a number..
138d0 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 46  .. *  @param  {F
138e0 72 65 71 75 65 6e 63 79 7d 20 66 72 65 71 20 0a  requency} freq .
138f0 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 7b 48  .. *  @return {H
13900 65 72 74 7a 7d 20 20 20 20 20 20 74 68 65 20 66  ertz}      the f
13910 72 65 71 75 65 6e 63 79 20 69 6e 20 68 65 72 74  requency in hert
13920 7a 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  z... */..    Ton
13930 65 2e 70 72 6f 74 6f 74 79 70 65 2e 74 6f 46 72  e.prototype.toFr
13940 65 71 75 65 6e 63 79 20 3d 20 66 75 6e 63 74 69  equency = functi
13950 6f 6e 20 28 66 72 65 71 29 20 7b 0a 09 20 20 20  on (freq) {..   
13960 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 69 73       if (this.is
13970 4e 75 6d 62 65 72 28 66 72 65 71 29 29 20 7b 0a  Number(freq)) {.
13980 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
13990 75 72 6e 20 66 72 65 71 3b 0a 09 20 20 20 20 20  urn freq;..     
139a0 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 74 68     } else if (th
139b0 69 73 2e 69 73 53 74 72 69 6e 67 28 66 72 65 71  is.isString(freq
139c0 29 20 7c 7c 20 74 68 69 73 2e 69 73 55 6e 64 65  ) || this.isUnde
139d0 66 28 66 72 65 71 29 29 20 7b 0a 09 20 20 20 20  f(freq)) {..    
139e0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
139f0 65 77 20 54 6f 6e 65 2e 46 72 65 71 75 65 6e 63  ew Tone.Frequenc
13a00 79 28 66 72 65 71 29 2e 65 76 61 6c 28 29 3b 0a  y(freq).eval();.
13a10 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else 
13a20 69 66 20 28 66 72 65 71 20 69 6e 73 74 61 6e 63  if (freq instanc
13a30 65 6f 66 20 54 6f 6e 65 2e 54 69 6d 65 42 61 73  eof Tone.TimeBas
13a40 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  e) {..          
13a50 20 20 72 65 74 75 72 6e 20 66 72 65 71 2e 74 6f    return freq.to
13a60 46 72 65 71 75 65 6e 63 79 28 29 3b 0a 09 20 20  Frequency();..  
13a70 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a        }..    };.
13a80 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43  .    /**... *  C
13a90 6f 6e 76 65 72 74 20 61 20 74 69 6d 65 20 72 65  onvert a time re
13aa0 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 6e 74  presentation int
13ab0 6f 20 74 69 63 6b 73 2e 0a 09 09 20 2a 20 20 40  o ticks.... *  @
13ac0 70 61 72 61 6d 20 20 7b 54 69 6d 65 7d 20 74 69  param  {Time} ti
13ad0 6d 65 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e  me... *  @return
13ae0 20 7b 54 69 63 6b 73 7d 20 20 74 68 65 20 74 69   {Ticks}  the ti
13af0 6d 65 20 69 6e 20 74 69 63 6b 73 0a 09 09 20 2a  me in ticks... *
13b00 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 70 72 6f 74  /..    Tone.prot
13b10 6f 74 79 70 65 2e 74 6f 54 69 63 6b 73 20 3d 20  otype.toTicks = 
13b20 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65 29 20  function (time) 
13b30 7b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 74  {..        if (t
13b40 68 69 73 2e 69 73 4e 75 6d 62 65 72 28 74 69 6d  his.isNumber(tim
13b50 65 29 20 7c 7c 20 74 68 69 73 2e 69 73 53 74 72  e) || this.isStr
13b60 69 6e 67 28 74 69 6d 65 29 29 20 7b 0a 09 20 20  ing(time)) {..  
13b70 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
13b80 20 6e 65 77 20 54 6f 6e 65 2e 54 72 61 6e 73 70   new Tone.Transp
13b90 6f 72 74 54 69 6d 65 28 74 69 6d 65 29 2e 74 6f  ortTime(time).to
13ba0 54 69 63 6b 73 28 29 3b 0a 09 20 20 20 20 20 20  Ticks();..      
13bb0 20 20 7d 20 65 6c 73 65 20 69 66 20 28 74 68 69    } else if (thi
13bc0 73 2e 69 73 55 6e 64 65 66 28 74 69 6d 65 29 29  s.isUndef(time))
13bd0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
13be0 72 65 74 75 72 6e 20 54 6f 6e 65 2e 54 72 61 6e  return Tone.Tran
13bf0 73 70 6f 72 74 2e 74 69 63 6b 73 3b 0a 09 20 20  sport.ticks;..  
13c00 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20        } else if 
13c10 28 74 69 6d 65 20 69 6e 73 74 61 6e 63 65 6f 66  (time instanceof
13c20 20 54 6f 6e 65 2e 54 69 6d 65 42 61 73 65 29 20   Tone.TimeBase) 
13c30 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
13c40 65 74 75 72 6e 20 74 69 6d 65 2e 74 6f 54 69 63  eturn time.toTic
13c50 6b 73 28 29 3b 0a 09 20 20 20 20 20 20 20 20 7d  ks();..        }
13c60 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 72 65  ..    };..    re
13c70 74 75 72 6e 20 54 6f 6e 65 3b 0a 09 7d 29 3b 0a  turn Tone;..});.
13c80 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e  .Module(function
13c90 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a   (Tone) {..    .
13ca0 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40  .    /**... *  @
13cb0 63 6c 61 73 73 20 54 6f 6e 65 2e 50 61 72 61 6d  class Tone.Param
13cc0 20 77 72 61 70 73 20 74 68 65 20 6e 61 74 69 76   wraps the nativ
13cd0 65 20 57 65 62 20 41 75 64 69 6f 27 73 20 41 75  e Web Audio's Au
13ce0 64 69 6f 50 61 72 61 6d 20 74 6f 20 70 72 6f 76  dioParam to prov
13cf0 69 64 65 0a 09 09 20 2a 20 20 20 20 20 20 20 20  ide... *        
13d00 20 61 64 64 69 74 69 6f 6e 61 6c 20 75 6e 69 74   additional unit
13d10 20 63 6f 6e 76 65 72 73 69 6f 6e 20 66 75 6e 63   conversion func
13d20 74 69 6f 6e 61 6c 69 74 79 2e 20 49 74 20 61 6c  tionality. It al
13d30 73 6f 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  so... *         
13d40 73 65 72 76 65 73 20 61 73 20 61 20 62 61 73 65  serves as a base
13d50 2d 63 6c 61 73 73 20 66 6f 72 20 63 6c 61 73 73  -class for class
13d60 65 73 20 77 68 69 63 68 20 68 61 76 65 20 61 20  es which have a 
13d70 73 69 6e 67 6c 65 2c 0a 09 09 20 2a 20 20 20 20  single,... *    
13d80 20 20 20 20 20 61 75 74 6f 6d 61 74 61 62 6c 65       automatable
13d90 20 70 61 72 61 6d 65 74 65 72 2e 20 0a 09 09 20   parameter. ... 
13da0 2a 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e  *  @extends {Ton
13db0 65 7d 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  e}... *  @param 
13dc0 20 7b 41 75 64 69 6f 50 61 72 61 6d 7d 20 20 70   {AudioParam}  p
13dd0 61 72 61 6d 20 20 54 68 65 20 70 61 72 61 6d 65  aram  The parame
13de0 74 65 72 20 74 6f 20 77 72 61 70 2e 0a 09 09 20  ter to wrap.... 
13df0 2a 20 20 40 70 61 72 61 6d 20 20 7b 54 6f 6e 65  *  @param  {Tone
13e00 2e 54 79 70 65 7d 20 75 6e 69 74 73 20 54 68 65  .Type} units The
13e10 20 75 6e 69 74 73 20 6f 66 20 74 68 65 20 61 75   units of the au
13e20 64 69 6f 20 70 61 72 61 6d 2e 0a 09 09 20 2a 20  dio param.... * 
13e30 20 40 70 61 72 61 6d 20 20 7b 42 6f 6f 6c 65 61   @param  {Boolea
13e40 6e 7d 20 63 6f 6e 76 65 72 74 20 49 66 20 74 68  n} convert If th
13e50 65 20 70 61 72 61 6d 20 73 68 6f 75 6c 64 20 62  e param should b
13e60 65 20 63 6f 6e 76 65 72 74 65 64 2e 0a 09 09 20  e converted.... 
13e70 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50 61 72  */..    Tone.Par
13e80 61 6d 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  am = function ()
13e90 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20   {..        var 
13ea0 6f 70 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e 6f  options = this.o
13eb0 70 74 69 6f 6e 73 4f 62 6a 65 63 74 28 61 72 67  ptionsObject(arg
13ec0 75 6d 65 6e 74 73 2c 20 5b 0a 09 20 20 20 20 20  uments, [..     
13ed0 20 20 20 20 20 20 20 27 70 61 72 61 6d 27 2c 0a         'param',.
13ee0 09 20 20 20 20 20 20 20 20 20 20 20 20 27 75 6e  .            'un
13ef0 69 74 73 27 2c 0a 09 20 20 20 20 20 20 20 20 20  its',..         
13f00 20 20 20 27 63 6f 6e 76 65 72 74 27 0a 09 20 20     'convert'..  
13f10 20 20 20 20 20 20 5d 2c 20 54 6f 6e 65 2e 50 61        ], Tone.Pa
13f20 72 61 6d 2e 64 65 66 61 75 6c 74 73 29 3b 0a 09  ram.defaults);..
13f30 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
13f40 2a 20 20 54 68 65 20 6e 61 74 69 76 65 20 70 61  *  The native pa
13f50 72 61 6d 65 74 65 72 20 74 6f 20 63 6f 6e 74 72  rameter to contr
13f60 6f 6c 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  ol.... *  @type 
13f70 20 7b 41 75 64 69 6f 50 61 72 61 6d 7d 0a 09 09   {AudioParam}...
13f80 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
13f90 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
13fa0 69 73 2e 5f 70 61 72 61 6d 20 3d 20 74 68 69 73  is._param = this
13fb0 2e 69 6e 70 75 74 20 3d 20 6f 70 74 69 6f 6e 73  .input = options
13fc0 2e 70 61 72 61 6d 3b 0a 09 20 20 20 20 20 20 20  .param;..       
13fd0 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20   /**.... *  The 
13fe0 75 6e 69 74 73 20 6f 66 20 74 68 65 20 70 61 72  units of the par
13ff0 61 6d 65 74 65 72 0a 09 09 09 20 2a 20 20 40 74  ameter.... *  @t
14000 79 70 65 20 7b 54 6f 6e 65 2e 54 79 70 65 7d 0a  ype {Tone.Type}.
14010 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
14020 74 68 69 73 2e 75 6e 69 74 73 20 3d 20 6f 70 74  this.units = opt
14030 69 6f 6e 73 2e 75 6e 69 74 73 3b 0a 09 20 20 20  ions.units;..   
14040 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
14050 49 66 20 74 68 65 20 76 61 6c 75 65 20 73 68 6f  If the value sho
14060 75 6c 64 20 62 65 20 63 6f 6e 76 65 72 74 65 64  uld be converted
14070 20 6f 72 20 6e 6f 74 0a 09 09 09 20 2a 20 20 40   or not.... *  @
14080 74 79 70 65 20 7b 42 6f 6f 6c 65 61 6e 7d 0a 09  type {Boolean}..
14090 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
140a0 68 69 73 2e 63 6f 6e 76 65 72 74 20 3d 20 6f 70  his.convert = op
140b0 74 69 6f 6e 73 2e 63 6f 6e 76 65 72 74 3b 0a 09  tions.convert;..
140c0 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
140d0 2a 20 20 54 72 75 65 20 69 66 20 74 68 65 20 73  *  True if the s
140e0 69 67 6e 61 6c 20 76 61 6c 75 65 20 69 73 20 62  ignal value is b
140f0 65 69 6e 67 20 6f 76 65 72 72 69 64 64 65 6e 20  eing overridden 
14100 62 79 20 0a 09 09 09 20 2a 20 20 61 20 63 6f 6e  by .... *  a con
14110 6e 65 63 74 65 64 20 73 69 67 6e 61 6c 2e 0a 09  nected signal...
14120 09 09 20 2a 20 20 40 72 65 61 64 4f 6e 6c 79 0a  .. *  @readOnly.
14130 09 09 09 20 2a 20 20 40 74 79 70 65 20 20 7b 62  ... *  @type  {b
14140 6f 6f 6c 65 61 6e 7d 0a 09 09 09 20 2a 20 20 40  oolean}.... *  @
14150 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
14160 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f 76 65          this.ove
14170 72 72 69 64 64 65 6e 20 3d 20 66 61 6c 73 65 3b  rridden = false;
14180 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
14190 09 20 2a 20 20 49 66 20 74 68 65 72 65 20 69 73  . *  If there is
141a0 20 61 6e 20 4c 46 4f 2c 20 74 68 69 73 20 69 73   an LFO, this is
141b0 20 77 68 65 72 65 20 69 74 20 69 73 20 68 65 6c   where it is hel
141c0 64 2e 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  d..... *  @type 
141d0 20 7b 54 6f 6e 65 2e 4c 46 4f 7d 0a 09 09 09 20   {Tone.LFO}.... 
141e0 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20  *  @private.... 
141f0 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
14200 2e 5f 6c 66 6f 20 3d 20 6e 75 6c 6c 3b 0a 09 20  ._lfo = null;.. 
14210 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e         if (this.
14220 69 73 4f 62 6a 65 63 74 28 6f 70 74 69 6f 6e 73  isObject(options
14230 2e 6c 66 6f 29 29 20 7b 0a 09 20 20 20 20 20 20  .lfo)) {..      
14240 20 20 20 20 20 20 74 68 69 73 2e 76 61 6c 75 65        this.value
14250 20 3d 20 6f 70 74 69 6f 6e 73 2e 6c 66 6f 3b 0a   = options.lfo;.
14260 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else 
14270 69 66 20 28 21 74 68 69 73 2e 69 73 55 6e 64 65  if (!this.isUnde
14280 66 28 6f 70 74 69 6f 6e 73 2e 76 61 6c 75 65 29  f(options.value)
14290 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
142a0 20 74 68 69 73 2e 76 61 6c 75 65 20 3d 20 6f 70   this.value = op
142b0 74 69 6f 6e 73 2e 76 61 6c 75 65 3b 0a 09 20 20  tions.value;..  
142c0 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a        }..    };.
142d0 09 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64  .    Tone.extend
142e0 28 54 6f 6e 65 2e 50 61 72 61 6d 29 3b 0a 09 20  (Tone.Param);.. 
142f0 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 44 65 66     /**... *  Def
14300 61 75 6c 74 73 0a 09 09 20 2a 20 20 40 74 79 70  aults... *  @typ
14310 65 20 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a  e  {Object}... *
14320 20 20 40 63 6f 6e 73 74 0a 09 09 20 2a 2f 0a 09    @const... */..
14330 20 20 20 20 54 6f 6e 65 2e 50 61 72 61 6d 2e 64      Tone.Param.d
14340 65 66 61 75 6c 74 73 20 3d 20 7b 0a 09 20 20 20  efaults = {..   
14350 20 20 20 20 20 27 75 6e 69 74 73 27 3a 20 54 6f       'units': To
14360 6e 65 2e 54 79 70 65 2e 44 65 66 61 75 6c 74 2c  ne.Type.Default,
14370 0a 09 20 20 20 20 20 20 20 20 27 63 6f 6e 76 65  ..        'conve
14380 72 74 27 3a 20 74 72 75 65 2c 0a 09 20 20 20 20  rt': true,..    
14390 20 20 20 20 27 70 61 72 61 6d 27 3a 20 75 6e 64      'param': und
143a0 65 66 69 6e 65 64 0a 09 20 20 20 20 7d 3b 0a 09  efined..    };..
143b0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65      /**... * The
143c0 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f   current value o
143d0 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 2e  f the parameter.
143e0 20 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66   ... * @memberOf
143f0 20 54 6f 6e 65 2e 50 61 72 61 6d 23 0a 09 09 20   Tone.Param#... 
14400 2a 20 40 74 79 70 65 20 7b 4e 75 6d 62 65 72 7d  * @type {Number}
14410 0a 09 09 20 2a 20 40 6e 61 6d 65 20 76 61 6c 75  ... * @name valu
14420 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a  e... */..    Obj
14430 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72  ect.defineProper
14440 74 79 28 54 6f 6e 65 2e 50 61 72 61 6d 2e 70 72  ty(Tone.Param.pr
14450 6f 74 6f 74 79 70 65 2c 20 27 76 61 6c 75 65 27  ototype, 'value'
14460 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74  , {..        get
14470 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  : function () {.
14480 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
14490 75 72 6e 20 74 68 69 73 2e 5f 74 6f 55 6e 69 74  urn this._toUnit
144a0 73 28 74 68 69 73 2e 5f 70 61 72 61 6d 2e 76 61  s(this._param.va
144b0 6c 75 65 29 3b 0a 09 20 20 20 20 20 20 20 20 7d  lue);..        }
144c0 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20  ,..        set: 
144d0 66 75 6e 63 74 69 6f 6e 20 28 76 61 6c 75 65 29  function (value)
144e0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
144f0 69 66 20 28 74 68 69 73 2e 69 73 4f 62 6a 65 63  if (this.isObjec
14500 74 28 76 61 6c 75 65 29 29 20 7b 0a 09 20 20 20  t(value)) {..   
14510 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 74               //t
14520 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 20 69 66  hrow an error if
14530 20 74 68 65 20 4c 46 4f 20 6e 65 65 64 73 20 74   the LFO needs t
14540 6f 20 62 65 20 69 6e 63 6c 75 64 65 64 0a 09 20  o be included.. 
14550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
14560 66 20 28 74 68 69 73 2e 69 73 55 6e 64 65 66 28  f (this.isUndef(
14570 54 6f 6e 65 2e 4c 46 4f 29 29 20 7b 0a 09 20 20  Tone.LFO)) {..  
14580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14590 20 20 74 68 72 6f 77 20 6e 65 77 20 45 72 72 6f    throw new Erro
145a0 72 28 27 49 6e 63 6c 75 64 65 20 5c 27 54 6f 6e  r('Include \'Ton
145b0 65 2e 4c 46 4f 5c 27 20 74 6f 20 75 73 65 20 61  e.LFO\' to use a
145c0 6e 20 4c 46 4f 20 61 73 20 61 20 50 61 72 61 6d  n LFO as a Param
145d0 20 76 61 6c 75 65 2e 27 29 3b 0a 09 20 20 20 20   value.');..    
145e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20              }.. 
145f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14600 2f 72 65 6d 6f 76 65 20 74 68 65 20 6f 6c 64 20  /remove the old 
14610 6f 6e 65 0a 09 20 20 20 20 20 20 20 20 20 20 20  one..           
14620 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 5f 6c       if (this._l
14630 66 6f 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  fo) {..         
14640 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
14650 5f 6c 66 6f 2e 64 69 73 70 6f 73 65 28 29 3b 0a  _lfo.dispose();.
14660 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14670 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   }..            
14680 20 20 20 20 74 68 69 73 2e 5f 6c 66 6f 20 3d 20      this._lfo = 
14690 6e 65 77 20 54 6f 6e 65 2e 4c 46 4f 28 76 61 6c  new Tone.LFO(val
146a0 75 65 29 2e 73 74 61 72 74 28 29 3b 0a 09 20 20  ue).start();..  
146b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
146c0 69 73 2e 5f 6c 66 6f 2e 63 6f 6e 6e 65 63 74 28  is._lfo.connect(
146d0 74 68 69 73 2e 69 6e 70 75 74 29 3b 0a 09 20 20  this.input);..  
146e0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
146f0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14700 20 20 20 20 76 61 72 20 63 6f 6e 76 65 72 74 65      var converte
14710 64 56 61 6c 20 3d 20 74 68 69 73 2e 5f 66 72 6f  dVal = this._fro
14720 6d 55 6e 69 74 73 28 76 61 6c 75 65 29 3b 0a 09  mUnits(value);..
14730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14740 74 68 69 73 2e 5f 70 61 72 61 6d 2e 63 61 6e 63  this._param.canc
14750 65 6c 53 63 68 65 64 75 6c 65 64 56 61 6c 75 65  elScheduledValue
14760 73 28 30 29 3b 0a 09 20 20 20 20 20 20 20 20 20  s(0);..         
14770 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70 61 72         this._par
14780 61 6d 2e 76 61 6c 75 65 20 3d 20 63 6f 6e 76 65  am.value = conve
14790 72 74 65 64 56 61 6c 3b 0a 09 20 20 20 20 20 20  rtedVal;..      
147a0 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
147b0 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20   }..    });..   
147c0 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 6f 6e 76 65   /**... *  Conve
147d0 72 74 20 74 68 65 20 67 69 76 65 6e 20 76 61 6c  rt the given val
147e0 75 65 20 66 72 6f 6d 20 74 68 65 20 74 79 70 65  ue from the type
147f0 20 73 70 65 63 69 66 69 65 64 20 62 79 20 54 6f   specified by To
14800 6e 65 2e 50 61 72 61 6d 2e 75 6e 69 74 73 0a 09  ne.Param.units..
14810 09 20 2a 20 20 69 6e 74 6f 20 74 68 65 20 64 65  . *  into the de
14820 73 74 69 6e 61 74 69 6f 6e 20 76 61 6c 75 65 20  stination value 
14830 28 73 75 63 68 20 61 73 20 47 61 69 6e 20 6f 72  (such as Gain or
14840 20 46 72 65 71 75 65 6e 63 79 29 2e 0a 09 09 20   Frequency).... 
14850 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a  *  @private... *
14860 20 20 40 70 61 72 61 6d 20 20 7b 2a 7d 20 76 61    @param  {*} va
14870 6c 20 74 68 65 20 76 61 6c 75 65 20 74 6f 20 63  l the value to c
14880 6f 6e 76 65 72 74 0a 09 09 20 2a 20 20 40 72 65  onvert... *  @re
14890 74 75 72 6e 20 7b 6e 75 6d 62 65 72 7d 20 20 20  turn {number}   
148a0 20 20 74 68 65 20 6e 75 6d 62 65 72 20 77 68 69    the number whi
148b0 63 68 20 74 68 65 20 76 61 6c 75 65 20 73 68 6f  ch the value sho
148c0 75 6c 64 20 62 65 20 73 65 74 20 74 6f 0a 09 09  uld be set to...
148d0 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50 61   */..    Tone.Pa
148e0 72 61 6d 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 66  ram.prototype._f
148f0 72 6f 6d 55 6e 69 74 73 20 3d 20 66 75 6e 63 74  romUnits = funct
14900 69 6f 6e 20 28 76 61 6c 29 20 7b 0a 09 20 20 20  ion (val) {..   
14910 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 63 6f       if (this.co
14920 6e 76 65 72 74 20 7c 7c 20 74 68 69 73 2e 69 73  nvert || this.is
14930 55 6e 64 65 66 28 74 68 69 73 2e 63 6f 6e 76 65  Undef(this.conve
14940 72 74 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20  rt)) {..        
14950 20 20 20 20 73 77 69 74 63 68 20 28 74 68 69 73      switch (this
14960 2e 75 6e 69 74 73 29 20 7b 0a 09 20 20 20 20 20  .units) {..     
14970 20 20 20 20 20 20 20 63 61 73 65 20 54 6f 6e 65         case Tone
14980 2e 54 79 70 65 2e 54 69 6d 65 3a 0a 09 20 20 20  .Type.Time:..   
14990 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
149a0 75 72 6e 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e  urn this.toSecon
149b0 64 73 28 76 61 6c 29 3b 0a 09 20 20 20 20 20 20  ds(val);..      
149c0 20 20 20 20 20 20 63 61 73 65 20 54 6f 6e 65 2e        case Tone.
149d0 54 79 70 65 2e 46 72 65 71 75 65 6e 63 79 3a 0a  Type.Frequency:.
149e0 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
149f0 20 72 65 74 75 72 6e 20 74 68 69 73 2e 74 6f 46   return this.toF
14a00 72 65 71 75 65 6e 63 79 28 76 61 6c 29 3b 0a 09  requency(val);..
14a10 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
14a20 20 54 6f 6e 65 2e 54 79 70 65 2e 44 65 63 69 62   Tone.Type.Decib
14a30 65 6c 73 3a 0a 09 20 20 20 20 20 20 20 20 20 20  els:..          
14a40 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
14a50 73 2e 64 62 54 6f 47 61 69 6e 28 76 61 6c 29 3b  s.dbToGain(val);
14a60 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
14a70 73 65 20 54 6f 6e 65 2e 54 79 70 65 2e 4e 6f 72  se Tone.Type.Nor
14a80 6d 61 6c 52 61 6e 67 65 3a 0a 09 20 20 20 20 20  malRange:..     
14a90 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
14aa0 6e 20 4d 61 74 68 2e 6d 69 6e 28 4d 61 74 68 2e  n Math.min(Math.
14ab0 6d 61 78 28 76 61 6c 2c 20 30 29 2c 20 31 29 3b  max(val, 0), 1);
14ac0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
14ad0 73 65 20 54 6f 6e 65 2e 54 79 70 65 2e 41 75 64  se Tone.Type.Aud
14ae0 69 6f 52 61 6e 67 65 3a 0a 09 20 20 20 20 20 20  ioRange:..      
14af0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
14b00 20 4d 61 74 68 2e 6d 69 6e 28 4d 61 74 68 2e 6d   Math.min(Math.m
14b10 61 78 28 76 61 6c 2c 20 2d 31 29 2c 20 31 29 3b  ax(val, -1), 1);
14b20 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
14b30 73 65 20 54 6f 6e 65 2e 54 79 70 65 2e 50 6f 73  se Tone.Type.Pos
14b40 69 74 69 76 65 3a 0a 09 20 20 20 20 20 20 20 20  itive:..        
14b50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
14b60 61 74 68 2e 6d 61 78 28 76 61 6c 2c 20 30 29 3b  ath.max(val, 0);
14b70 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 64 65  ..            de
14b80 66 61 75 6c 74 3a 0a 09 20 20 20 20 20 20 20 20  fault:..        
14b90 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76          return v
14ba0 61 6c 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  al;..           
14bb0 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c   }..        } el
14bc0 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  se {..          
14bd0 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 09 20    return val;.. 
14be0 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 3b         }..    };
14bf0 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 43  ..    /**... * C
14c00 6f 6e 76 65 72 74 20 74 68 65 20 70 61 72 61 6d  onvert the param
14c10 65 74 65 72 73 20 76 61 6c 75 65 20 69 6e 74 6f  eters value into
14c20 20 74 68 65 20 75 6e 69 74 73 20 73 70 65 63 69   the units speci
14c30 66 69 65 64 20 62 79 20 54 6f 6e 65 2e 50 61 72  fied by Tone.Par
14c40 61 6d 2e 75 6e 69 74 73 2e 0a 09 09 20 2a 20 40  am.units.... * @
14c50 70 72 69 76 61 74 65 0a 09 09 20 2a 20 40 70 61  private... * @pa
14c60 72 61 6d 20 20 7b 6e 75 6d 62 65 72 7d 20 76 61  ram  {number} va
14c70 6c 20 74 68 65 20 76 61 6c 75 65 20 74 6f 20 63  l the value to c
14c80 6f 6e 76 65 72 74 0a 09 09 20 2a 20 40 72 65 74  onvert... * @ret
14c90 75 72 6e 20 7b 6e 75 6d 62 65 72 7d 0a 09 09 20  urn {number}... 
14ca0 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50 61 72  */..    Tone.Par
14cb0 61 6d 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 74 6f  am.prototype._to
14cc0 55 6e 69 74 73 20 3d 20 66 75 6e 63 74 69 6f 6e  Units = function
14cd0 20 28 76 61 6c 29 20 7b 0a 09 20 20 20 20 20 20   (val) {..      
14ce0 20 20 69 66 20 28 74 68 69 73 2e 63 6f 6e 76 65    if (this.conve
14cf0 72 74 20 7c 7c 20 74 68 69 73 2e 69 73 55 6e 64  rt || this.isUnd
14d00 65 66 28 74 68 69 73 2e 63 6f 6e 76 65 72 74 29  ef(this.convert)
14d10 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
14d20 20 73 77 69 74 63 68 20 28 74 68 69 73 2e 75 6e   switch (this.un
14d30 69 74 73 29 20 7b 0a 09 20 20 20 20 20 20 20 20  its) {..        
14d40 20 20 20 20 63 61 73 65 20 54 6f 6e 65 2e 54 79      case Tone.Ty
14d50 70 65 2e 44 65 63 69 62 65 6c 73 3a 0a 09 20 20  pe.Decibels:..  
14d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
14d70 74 75 72 6e 20 74 68 69 73 2e 67 61 69 6e 54 6f  turn this.gainTo
14d80 44 62 28 76 61 6c 29 3b 0a 09 20 20 20 20 20 20  Db(val);..      
14d90 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 09        default:..
14da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14db0 72 65 74 75 72 6e 20 76 61 6c 3b 0a 09 20 20 20  return val;..   
14dc0 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20           }..    
14dd0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20      } else {..  
14de0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
14df0 20 76 61 6c 3b 0a 09 20 20 20 20 20 20 20 20 7d   val;..        }
14e00 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
14e10 2a 0a 09 09 20 2a 20 20 74 68 65 20 6d 69 6e 69  *... *  the mini
14e20 6d 75 6d 20 6f 75 74 70 75 74 20 76 61 6c 75 65  mum output value
14e30 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4e 75  ... *  @type {Nu
14e40 6d 62 65 72 7d 0a 09 09 20 2a 20 20 40 70 72 69  mber}... *  @pri
14e50 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20  vate... */..    
14e60 54 6f 6e 65 2e 50 61 72 61 6d 2e 70 72 6f 74 6f  Tone.Param.proto
14e70 74 79 70 65 2e 5f 6d 69 6e 4f 75 74 70 75 74 20  type._minOutput 
14e80 3d 20 30 2e 30 30 30 30 31 3b 0a 09 20 20 20 20  = 0.00001;..    
14e90 2f 2a 2a 0a 09 09 20 2a 20 20 53 63 68 65 64 75  /**... *  Schedu
14ea0 6c 65 73 20 61 20 70 61 72 61 6d 65 74 65 72 20  les a parameter 
14eb0 76 61 6c 75 65 20 63 68 61 6e 67 65 20 61 74 20  value change at 
14ec0 74 68 65 20 67 69 76 65 6e 20 74 69 6d 65 2e 0a  the given time..
14ed0 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 2a 7d  .. *  @param {*}
14ee0 09 76 61 6c 75 65 20 54 68 65 20 76 61 6c 75 65  .value The value
14ef0 20 74 6f 20 73 65 74 20 74 68 65 20 73 69 67 6e   to set the sign
14f00 61 6c 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  al.... *  @param
14f10 20 7b 54 69 6d 65 7d 20 20 74 69 6d 65 20 54 68   {Time}  time Th
14f20 65 20 74 69 6d 65 20 77 68 65 6e 20 74 68 65 20  e time when the 
14f30 63 68 61 6e 67 65 20 73 68 6f 75 6c 64 20 6f 63  change should oc
14f40 63 75 72 2e 0a 09 09 20 2a 20 20 40 72 65 74 75  cur.... *  @retu
14f50 72 6e 73 20 7b 54 6f 6e 65 2e 50 61 72 61 6d 7d  rns {Tone.Param}
14f60 20 74 68 69 73 0a 09 09 20 2a 20 20 40 65 78 61   this... *  @exa
14f70 6d 70 6c 65 0a 09 09 20 2a 20 2f 2f 73 65 74 20  mple... * //set 
14f80 74 68 65 20 66 72 65 71 75 65 6e 63 79 20 74 6f  the frequency to
14f90 20 22 47 34 22 20 69 6e 20 65 78 61 63 74 6c 79   "G4" in exactly
14fa0 20 31 20 73 65 63 6f 6e 64 20 66 72 6f 6d 20 6e   1 second from n
14fb0 6f 77 2e 20 0a 09 09 20 2a 20 66 72 65 71 2e 73  ow. ... * freq.s
14fc0 65 74 56 61 6c 75 65 41 74 54 69 6d 65 28 22 47  etValueAtTime("G
14fd0 34 22 2c 20 22 2b 31 22 29 3b 0a 09 09 20 2a 2f  4", "+1");... */
14fe0 0a 09 20 20 20 20 54 6f 6e 65 2e 50 61 72 61 6d  ..    Tone.Param
14ff0 2e 70 72 6f 74 6f 74 79 70 65 2e 73 65 74 56 61  .prototype.setVa
15000 6c 75 65 41 74 54 69 6d 65 20 3d 20 66 75 6e 63  lueAtTime = func
15010 74 69 6f 6e 20 28 76 61 6c 75 65 2c 20 74 69 6d  tion (value, tim
15020 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61  e) {..        va
15030 6c 75 65 20 3d 20 74 68 69 73 2e 5f 66 72 6f 6d  lue = this._from
15040 55 6e 69 74 73 28 76 61 6c 75 65 29 3b 0a 09 20  Units(value);.. 
15050 20 20 20 20 20 20 20 74 69 6d 65 20 3d 20 74 68         time = th
15060 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28 74 69 6d  is.toSeconds(tim
15070 65 29 3b 0a 09 20 20 20 20 20 20 20 20 69 66 20  e);..        if 
15080 28 74 69 6d 65 20 3c 3d 20 74 68 69 73 2e 6e 6f  (time <= this.no
15090 77 28 29 20 2b 20 74 68 69 73 2e 62 6c 6f 63 6b  w() + this.block
150a0 54 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20 20  Time) {..       
150b0 20 20 20 20 20 74 68 69 73 2e 5f 70 61 72 61 6d       this._param
150c0 2e 76 61 6c 75 65 20 3d 20 76 61 6c 75 65 3b 0a  .value = value;.
150d0 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else 
150e0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
150f0 68 69 73 2e 5f 70 61 72 61 6d 2e 73 65 74 56 61  his._param.setVa
15100 6c 75 65 41 74 54 69 6d 65 28 76 61 6c 75 65 2c  lueAtTime(value,
15110 20 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20   time);..       
15120 20 7d 0a 09 20 20 20 20 20 20 20 20 72 65 74 75   }..        retu
15130 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b  rn this;..    };
15140 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
15150 43 72 65 61 74 65 73 20 61 20 73 63 68 65 64 75  Creates a schedu
15160 6c 65 20 70 6f 69 6e 74 20 77 69 74 68 20 74 68  le point with th
15170 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  e current value 
15180 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  at the current t
15190 69 6d 65 2e 0a 09 09 20 2a 20 20 54 68 69 73 20  ime.... *  This 
151a0 69 73 20 75 73 65 66 75 6c 20 66 6f 72 20 63 72  is useful for cr
151b0 65 61 74 69 6e 67 20 61 6e 20 61 75 74 6f 6d 61  eating an automa
151c0 74 69 6f 6e 20 61 6e 63 68 6f 72 20 70 6f 69 6e  tion anchor poin
151d0 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 0a 09  t in order to ..
151e0 09 20 2a 20 20 73 63 68 65 64 75 6c 65 20 63 68  . *  schedule ch
151f0 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 65 20 63  anges from the c
15200 75 72 72 65 6e 74 20 76 61 6c 75 65 2e 20 0a 09  urrent value. ..
15210 09 20 2a 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  . *... *  @param
15220 20 7b 6e 75 6d 62 65 72 3d 7d 20 6e 6f 77 20 28   {number=} now (
15230 4f 70 74 69 6f 6e 61 6c 6c 79 29 20 70 61 73 73  Optionally) pass
15240 20 74 68 65 20 6e 6f 77 20 76 61 6c 75 65 20 69   the now value i
15250 6e 2e 20 0a 09 09 20 2a 20 20 40 72 65 74 75 72  n. ... *  @retur
15260 6e 73 20 7b 54 6f 6e 65 2e 50 61 72 61 6d 7d 20  ns {Tone.Param} 
15270 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20  this... */..    
15280 54 6f 6e 65 2e 50 61 72 61 6d 2e 70 72 6f 74 6f  Tone.Param.proto
15290 74 79 70 65 2e 73 65 74 52 61 6d 70 50 6f 69 6e  type.setRampPoin
152a0 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 6e 6f  t = function (no
152b0 77 29 20 7b 0a 09 20 20 20 20 20 20 20 20 6e 6f  w) {..        no
152c0 77 20 3d 20 74 68 69 73 2e 64 65 66 61 75 6c 74  w = this.default
152d0 41 72 67 28 6e 6f 77 2c 20 74 68 69 73 2e 6e 6f  Arg(now, this.no
152e0 77 28 29 29 3b 0a 09 20 20 20 20 20 20 20 20 76  w());..        v
152f0 61 72 20 63 75 72 72 65 6e 74 56 61 6c 20 3d 20  ar currentVal = 
15300 74 68 69 73 2e 5f 70 61 72 61 6d 2e 76 61 6c 75  this._param.valu
15310 65 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 20 65  e;..        // e
15320 78 70 6f 6e 65 6e 74 69 61 6c 52 61 6d 70 54 6f  xponentialRampTo
15330 56 61 6c 75 65 41 74 20 63 61 6e 6e 6f 74 20 65  ValueAt cannot e
15340 76 65 72 20 72 61 6d 70 20 66 72 6f 6d 20 6f 72  ver ramp from or
15350 20 74 6f 20 30 0a 09 20 20 20 20 20 20 20 20 2f   to 0..        /
15360 2f 20 4d 6f 72 65 20 69 6e 66 6f 3a 20 68 74 74  / More info: htt
15370 70 73 3a 2f 2f 62 75 67 7a 69 6c 6c 61 2e 6d 6f  ps://bugzilla.mo
15380 7a 69 6c 6c 61 2e 6f 72 67 2f 73 68 6f 77 5f 62  zilla.org/show_b
15390 75 67 2e 63 67 69 3f 69 64 3d 31 31 32 35 36 30  ug.cgi?id=112560
153a0 30 23 63 32 0a 09 20 20 20 20 20 20 20 20 69 66  0#c2..        if
153b0 20 28 63 75 72 72 65 6e 74 56 61 6c 20 3d 3d 3d   (currentVal ===
153c0 20 30 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20   0) {..         
153d0 20 20 20 63 75 72 72 65 6e 74 56 61 6c 20 3d 20     currentVal = 
153e0 74 68 69 73 2e 5f 6d 69 6e 4f 75 74 70 75 74 3b  this._minOutput;
153f0 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
15400 20 20 20 20 20 74 68 69 73 2e 5f 70 61 72 61 6d       this._param
15410 2e 73 65 74 56 61 6c 75 65 41 74 54 69 6d 65 28  .setValueAtTime(
15420 63 75 72 72 65 6e 74 56 61 6c 2c 20 6e 6f 77 29  currentVal, now)
15430 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
15440 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a  n this;..    };.
15450 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 53  .    /**... *  S
15460 63 68 65 64 75 6c 65 73 20 61 20 6c 69 6e 65 61  chedules a linea
15470 72 20 63 6f 6e 74 69 6e 75 6f 75 73 20 63 68 61  r continuous cha
15480 6e 67 65 20 69 6e 20 70 61 72 61 6d 65 74 65 72  nge in parameter
15490 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20   value from the 
154a0 0a 09 09 20 2a 20 20 70 72 65 76 69 6f 75 73 20  ... *  previous 
154b0 73 63 68 65 64 75 6c 65 64 20 70 61 72 61 6d 65  scheduled parame
154c0 74 65 72 20 76 61 6c 75 65 20 74 6f 20 74 68 65  ter value to the
154d0 20 67 69 76 65 6e 20 76 61 6c 75 65 2e 0a 09 09   given value....
154e0 20 2a 20 20 0a 09 09 20 2a 20 20 40 70 61 72 61   *  ... *  @para
154f0 6d 20 20 7b 6e 75 6d 62 65 72 7d 20 76 61 6c 75  m  {number} valu
15500 65 20 20 20 0a 09 09 20 2a 20 20 40 70 61 72 61  e   ... *  @para
15510 6d 20 20 7b 54 69 6d 65 7d 20 65 6e 64 54 69 6d  m  {Time} endTim
15520 65 20 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e  e ... *  @return
15530 73 20 7b 54 6f 6e 65 2e 50 61 72 61 6d 7d 20 74  s {Tone.Param} t
15540 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  his... */..    T
15550 6f 6e 65 2e 50 61 72 61 6d 2e 70 72 6f 74 6f 74  one.Param.protot
15560 79 70 65 2e 6c 69 6e 65 61 72 52 61 6d 70 54 6f  ype.linearRampTo
15570 56 61 6c 75 65 41 74 54 69 6d 65 20 3d 20 66 75  ValueAtTime = fu
15580 6e 63 74 69 6f 6e 20 28 76 61 6c 75 65 2c 20 65  nction (value, e
15590 6e 64 54 69 6d 65 29 20 7b 0a 09 20 20 20 20 20  ndTime) {..     
155a0 20 20 20 76 61 6c 75 65 20 3d 20 74 68 69 73 2e     value = this.
155b0 5f 66 72 6f 6d 55 6e 69 74 73 28 76 61 6c 75 65  _fromUnits(value
155c0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
155d0 2e 5f 70 61 72 61 6d 2e 6c 69 6e 65 61 72 52 61  ._param.linearRa
155e0 6d 70 54 6f 56 61 6c 75 65 41 74 54 69 6d 65 28  mpToValueAtTime(
155f0 76 61 6c 75 65 2c 20 74 68 69 73 2e 74 6f 53 65  value, this.toSe
15600 63 6f 6e 64 73 28 65 6e 64 54 69 6d 65 29 29 3b  conds(endTime));
15610 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
15620 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09   this;..    };..
15630 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 53 63      /**... *  Sc
15640 68 65 64 75 6c 65 73 20 61 6e 20 65 78 70 6f 6e  hedules an expon
15650 65 6e 74 69 61 6c 20 63 6f 6e 74 69 6e 75 6f 75  ential continuou
15660 73 20 63 68 61 6e 67 65 20 69 6e 20 70 61 72 61  s change in para
15670 6d 65 74 65 72 20 76 61 6c 75 65 20 66 72 6f 6d  meter value from
15680 20 0a 09 09 20 2a 20 20 74 68 65 20 70 72 65 76   ... *  the prev
15690 69 6f 75 73 20 73 63 68 65 64 75 6c 65 64 20 70  ious scheduled p
156a0 61 72 61 6d 65 74 65 72 20 76 61 6c 75 65 20 74  arameter value t
156b0 6f 20 74 68 65 20 67 69 76 65 6e 20 76 61 6c 75  o the given valu
156c0 65 2e 0a 09 09 20 2a 20 20 0a 09 09 20 2a 20 20  e.... *  ... *  
156d0 40 70 61 72 61 6d 20 20 7b 6e 75 6d 62 65 72 7d  @param  {number}
156e0 20 76 61 6c 75 65 20 20 20 0a 09 09 20 2a 20 20   value   ... *  
156f0 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 7d 20 65  @param  {Time} e
15700 6e 64 54 69 6d 65 20 0a 09 09 20 2a 20 20 40 72  ndTime ... *  @r
15710 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 50 61 72  eturns {Tone.Par
15720 61 6d 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09  am} this... */..
15730 20 20 20 20 54 6f 6e 65 2e 50 61 72 61 6d 2e 70      Tone.Param.p
15740 72 6f 74 6f 74 79 70 65 2e 65 78 70 6f 6e 65 6e  rototype.exponen
15750 74 69 61 6c 52 61 6d 70 54 6f 56 61 6c 75 65 41  tialRampToValueA
15760 74 54 69 6d 65 20 3d 20 66 75 6e 63 74 69 6f 6e  tTime = function
15770 20 28 76 61 6c 75 65 2c 20 65 6e 64 54 69 6d 65   (value, endTime
15780 29 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61 6c  ) {..        val
15790 75 65 20 3d 20 74 68 69 73 2e 5f 66 72 6f 6d 55  ue = this._fromU
157a0 6e 69 74 73 28 76 61 6c 75 65 29 3b 0a 09 20 20  nits(value);..  
157b0 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 4d 61        value = Ma
157c0 74 68 2e 6d 61 78 28 74 68 69 73 2e 5f 6d 69 6e  th.max(this._min
157d0 4f 75 74 70 75 74 2c 20 76 61 6c 75 65 29 3b 0a  Output, value);.
157e0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70  .        this._p
157f0 61 72 61 6d 2e 65 78 70 6f 6e 65 6e 74 69 61 6c  aram.exponential
15800 52 61 6d 70 54 6f 56 61 6c 75 65 41 74 54 69 6d  RampToValueAtTim
15810 65 28 76 61 6c 75 65 2c 20 74 68 69 73 2e 74 6f  e(value, this.to
15820 53 65 63 6f 6e 64 73 28 65 6e 64 54 69 6d 65 29  Seconds(endTime)
15830 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
15840 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b  rn this;..    };
15850 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
15860 53 63 68 65 64 75 6c 65 73 20 61 6e 20 65 78 70  Schedules an exp
15870 6f 6e 65 6e 74 69 61 6c 20 63 6f 6e 74 69 6e 75  onential continu
15880 6f 75 73 20 63 68 61 6e 67 65 20 69 6e 20 70 61  ous change in pa
15890 72 61 6d 65 74 65 72 20 76 61 6c 75 65 20 66 72  rameter value fr
158a0 6f 6d 20 0a 09 09 20 2a 20 20 74 68 65 20 63 75  om ... *  the cu
158b0 72 72 65 6e 74 20 74 69 6d 65 20 61 6e 64 20 63  rrent time and c
158c0 75 72 72 65 6e 74 20 76 61 6c 75 65 20 74 6f 20  urrent value to 
158d0 74 68 65 20 67 69 76 65 6e 20 76 61 6c 75 65 20  the given value 
158e0 6f 76 65 72 20 74 68 65 20 0a 09 09 20 2a 20 20  over the ... *  
158f0 64 75 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  duration of the 
15900 72 61 6d 70 54 69 6d 65 2e 0a 09 09 20 2a 20 20  rampTime.... *  
15910 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b  ... *  @param  {
15920 6e 75 6d 62 65 72 7d 20 76 61 6c 75 65 20 20 20  number} value   
15930 54 68 65 20 76 61 6c 75 65 20 74 6f 20 72 61 6d  The value to ram
15940 70 20 74 6f 2e 0a 09 09 20 2a 20 20 40 70 61 72  p to.... *  @par
15950 61 6d 20 20 7b 54 69 6d 65 7d 20 72 61 6d 70 54  am  {Time} rampT
15960 69 6d 65 20 74 68 65 20 74 69 6d 65 20 74 68 61  ime the time tha
15970 74 20 69 74 20 74 61 6b 65 73 20 74 68 65 20 0a  t it takes the .
15980 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
15990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159a0 20 20 20 76 61 6c 75 65 20 74 6f 20 72 61 6d 70     value to ramp
159b0 20 66 72 6f 6d 20 69 74 27 73 20 63 75 72 72 65   from it's curre
159c0 6e 74 20 76 61 6c 75 65 0a 09 09 20 2a 20 20 40  nt value... *  @
159d0 70 61 72 61 6d 20 7b 54 69 6d 65 7d 09 5b 73 74  param {Time}.[st
159e0 61 72 74 54 69 6d 65 3d 6e 6f 77 5d 20 09 57 68  artTime=now] .Wh
159f0 65 6e 20 74 68 65 20 72 61 6d 70 20 73 68 6f 75  en the ramp shou
15a00 6c 64 20 73 74 61 72 74 2e 20 0a 09 09 20 2a 20  ld start. ... * 
15a10 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e   @returns {Tone.
15a20 50 61 72 61 6d 7d 20 74 68 69 73 0a 09 09 20 2a  Param} this... *
15a30 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20    @example... * 
15a40 2f 2f 65 78 70 6f 6e 65 6e 74 69 61 6c 6c 79 20  //exponentially 
15a50 72 61 6d 70 20 74 6f 20 74 68 65 20 76 61 6c 75  ramp to the valu
15a60 65 20 32 20 6f 76 65 72 20 34 20 73 65 63 6f 6e  e 2 over 4 secon
15a70 64 73 2e 20 0a 09 09 20 2a 20 73 69 67 6e 61 6c  ds. ... * signal
15a80 2e 65 78 70 6f 6e 65 6e 74 69 61 6c 52 61 6d 70  .exponentialRamp
15a90 54 6f 56 61 6c 75 65 28 32 2c 20 34 29 3b 0a 09  ToValue(2, 4);..
15aa0 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50  . */..    Tone.P
15ab0 61 72 61 6d 2e 70 72 6f 74 6f 74 79 70 65 2e 65  aram.prototype.e
15ac0 78 70 6f 6e 65 6e 74 69 61 6c 52 61 6d 70 54 6f  xponentialRampTo
15ad0 56 61 6c 75 65 20 3d 20 66 75 6e 63 74 69 6f 6e  Value = function
15ae0 20 28 76 61 6c 75 65 2c 20 72 61 6d 70 54 69 6d   (value, rampTim
15af0 65 2c 20 73 74 61 72 74 54 69 6d 65 29 20 7b 0a  e, startTime) {.
15b00 09 20 20 20 20 20 20 20 20 73 74 61 72 74 54 69  .        startTi
15b10 6d 65 20 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f  me = this.toSeco
15b20 6e 64 73 28 73 74 61 72 74 54 69 6d 65 29 3b 0a  nds(startTime);.
15b30 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 65  .        this.se
15b40 74 52 61 6d 70 50 6f 69 6e 74 28 73 74 61 72 74  tRampPoint(start
15b50 54 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20  Time);..        
15b60 74 68 69 73 2e 65 78 70 6f 6e 65 6e 74 69 61 6c  this.exponential
15b70 52 61 6d 70 54 6f 56 61 6c 75 65 41 74 54 69 6d  RampToValueAtTim
15b80 65 28 76 61 6c 75 65 2c 20 73 74 61 72 74 54 69  e(value, startTi
15b90 6d 65 20 2b 20 74 68 69 73 2e 74 6f 53 65 63 6f  me + this.toSeco
15ba0 6e 64 73 28 72 61 6d 70 54 69 6d 65 29 29 3b 0a  nds(rampTime));.
15bb0 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
15bc0 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20  this;..    };.. 
15bd0 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 53 63 68     /**... *  Sch
15be0 65 64 75 6c 65 73 20 61 6e 20 6c 69 6e 65 61 72  edules an linear
15bf0 20 63 6f 6e 74 69 6e 75 6f 75 73 20 63 68 61 6e   continuous chan
15c00 67 65 20 69 6e 20 70 61 72 61 6d 65 74 65 72 20  ge in parameter 
15c10 76 61 6c 75 65 20 66 72 6f 6d 20 0a 09 09 20 2a  value from ... *
15c20 20 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 69    the current ti
15c30 6d 65 20 61 6e 64 20 63 75 72 72 65 6e 74 20 76  me and current v
15c40 61 6c 75 65 20 74 6f 20 74 68 65 20 67 69 76 65  alue to the give
15c50 6e 20 76 61 6c 75 65 20 6f 76 65 72 20 74 68 65  n value over the
15c60 20 0a 09 09 20 2a 20 20 64 75 72 61 74 69 6f 6e   ... *  duration
15c70 20 6f 66 20 74 68 65 20 72 61 6d 70 54 69 6d 65   of the rampTime
15c80 2e 0a 09 09 20 2a 20 20 0a 09 09 20 2a 20 20 40  .... *  ... *  @
15c90 70 61 72 61 6d 20 20 7b 6e 75 6d 62 65 72 7d 20  param  {number} 
15ca0 76 61 6c 75 65 20 20 20 54 68 65 20 76 61 6c 75  value   The valu
15cb0 65 20 74 6f 20 72 61 6d 70 20 74 6f 2e 0a 09 09  e to ramp to....
15cc0 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 54 69 6d   *  @param  {Tim
15cd0 65 7d 20 72 61 6d 70 54 69 6d 65 20 74 68 65 20  e} rampTime the 
15ce0 74 69 6d 65 20 74 68 61 74 20 69 74 20 74 61 6b  time that it tak
15cf0 65 73 20 74 68 65 20 0a 09 09 20 2a 20 20 20 20  es the ... *    
15d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d10 20 20 20 20 20 20 20 20 20 20 20 76 61 6c 75 65             value
15d20 20 74 6f 20 72 61 6d 70 20 66 72 6f 6d 20 69 74   to ramp from it
15d30 27 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  's current value
15d40 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 54  ... *  @param {T
15d50 69 6d 65 7d 09 5b 73 74 61 72 74 54 69 6d 65 3d  ime}.[startTime=
15d60 6e 6f 77 5d 20 09 57 68 65 6e 20 74 68 65 20 72  now] .When the r
15d70 61 6d 70 20 73 68 6f 75 6c 64 20 73 74 61 72 74  amp should start
15d80 2e 20 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e  . ... *  @return
15d90 73 20 7b 54 6f 6e 65 2e 50 61 72 61 6d 7d 20 74  s {Tone.Param} t
15da0 68 69 73 0a 09 09 20 2a 20 20 40 65 78 61 6d 70  his... *  @examp
15db0 6c 65 0a 09 09 20 2a 20 2f 2f 6c 69 6e 65 61 72  le... * //linear
15dc0 6c 79 20 72 61 6d 70 20 74 6f 20 74 68 65 20 76  ly ramp to the v
15dd0 61 6c 75 65 20 34 20 6f 76 65 72 20 33 20 73 65  alue 4 over 3 se
15de0 63 6f 6e 64 73 2e 20 0a 09 09 20 2a 20 73 69 67  conds. ... * sig
15df0 6e 61 6c 2e 6c 69 6e 65 61 72 52 61 6d 70 54 6f  nal.linearRampTo
15e00 56 61 6c 75 65 28 34 2c 20 33 29 3b 0a 09 09 20  Value(4, 3);... 
15e10 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50 61 72  */..    Tone.Par
15e20 61 6d 2e 70 72 6f 74 6f 74 79 70 65 2e 6c 69 6e  am.prototype.lin
15e30 65 61 72 52 61 6d 70 54 6f 56 61 6c 75 65 20 3d  earRampToValue =
15e40 20 66 75 6e 63 74 69 6f 6e 20 28 76 61 6c 75 65   function (value
15e50 2c 20 72 61 6d 70 54 69 6d 65 2c 20 73 74 61 72  , rampTime, star
15e60 74 54 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20  tTime) {..      
15e70 20 20 73 74 61 72 74 54 69 6d 65 20 3d 20 74 68    startTime = th
15e80 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28 73 74 61  is.toSeconds(sta
15e90 72 74 54 69 6d 65 29 3b 0a 09 20 20 20 20 20 20  rtTime);..      
15ea0 20 20 74 68 69 73 2e 73 65 74 52 61 6d 70 50 6f    this.setRampPo
15eb0 69 6e 74 28 73 74 61 72 74 54 69 6d 65 29 3b 0a  int(startTime);.
15ec0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c 69  .        this.li
15ed0 6e 65 61 72 52 61 6d 70 54 6f 56 61 6c 75 65 41  nearRampToValueA
15ee0 74 54 69 6d 65 28 76 61 6c 75 65 2c 20 73 74 61  tTime(value, sta
15ef0 72 74 54 69 6d 65 20 2b 20 74 68 69 73 2e 74 6f  rtTime + this.to
15f00 53 65 63 6f 6e 64 73 28 72 61 6d 70 54 69 6d 65  Seconds(rampTime
15f10 29 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74  ));..        ret
15f20 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
15f30 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
15f40 20 53 74 61 72 74 20 65 78 70 6f 6e 65 6e 74 69   Start exponenti
15f50 61 6c 6c 79 20 61 70 70 72 6f 61 63 68 69 6e 67  ally approaching
15f60 20 74 68 65 20 74 61 72 67 65 74 20 76 61 6c 75   the target valu
15f70 65 20 61 74 20 74 68 65 20 67 69 76 65 6e 20 74  e at the given t
15f80 69 6d 65 20 77 69 74 68 0a 09 09 20 2a 20 20 61  ime with... *  a
15f90 20 72 61 74 65 20 68 61 76 69 6e 67 20 74 68 65   rate having the
15fa0 20 67 69 76 65 6e 20 74 69 6d 65 20 63 6f 6e 73   given time cons
15fb0 74 61 6e 74 2e 0a 09 09 20 2a 20 20 40 70 61 72  tant.... *  @par
15fc0 61 6d 20 7b 6e 75 6d 62 65 72 7d 20 76 61 6c 75  am {number} valu
15fd0 65 20 20 20 20 20 20 20 20 0a 09 09 20 2a 20 20  e        ... *  
15fe0 40 70 61 72 61 6d 20 7b 54 69 6d 65 7d 20 73 74  @param {Time} st
15ff0 61 72 74 54 69 6d 65 20 20 20 20 0a 09 09 20 2a  artTime    ... *
16000 20 20 40 70 61 72 61 6d 20 7b 6e 75 6d 62 65 72    @param {number
16010 7d 20 74 69 6d 65 43 6f 6e 73 74 61 6e 74 20 0a  } timeConstant .
16020 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b  .. *  @returns {
16030 54 6f 6e 65 2e 50 61 72 61 6d 7d 20 74 68 69 73  Tone.Param} this
16040 20 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e   ... */..    Ton
16050 65 2e 50 61 72 61 6d 2e 70 72 6f 74 6f 74 79 70  e.Param.prototyp
16060 65 2e 73 65 74 54 61 72 67 65 74 41 74 54 69 6d  e.setTargetAtTim
16070 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 76 61  e = function (va
16080 6c 75 65 2c 20 73 74 61 72 74 54 69 6d 65 2c 20  lue, startTime, 
16090 74 69 6d 65 43 6f 6e 73 74 61 6e 74 29 20 7b 0a  timeConstant) {.
160a0 09 20 20 20 20 20 20 20 20 76 61 6c 75 65 20 3d  .        value =
160b0 20 74 68 69 73 2e 5f 66 72 6f 6d 55 6e 69 74 73   this._fromUnits
160c0 28 76 61 6c 75 65 29 3b 0a 09 20 20 20 20 20 20  (value);..      
160d0 20 20 2f 2f 20 54 68 65 20 76 61 6c 75 65 20 77    // The value w
160e0 69 6c 6c 20 6e 65 76 65 72 20 62 65 20 61 62 6c  ill never be abl
160f0 65 20 74 6f 20 61 70 70 72 6f 61 63 68 20 77 69  e to approach wi
16100 74 68 6f 75 74 20 74 69 6d 65 43 6f 6e 73 74 61  thout timeConsta
16110 6e 74 20 3e 20 30 2e 0a 09 20 20 20 20 20 20 20  nt > 0...       
16120 20 2f 2f 20 68 74 74 70 3a 2f 2f 77 77 77 2e 77   // http://www.w
16130 33 2e 6f 72 67 2f 54 52 2f 77 65 62 61 75 64 69  3.org/TR/webaudi
16140 6f 2f 23 64 66 6e 2d 73 65 74 54 61 72 67 65 74  o/#dfn-setTarget
16150 41 74 54 69 6d 65 2c 20 77 68 65 72 65 20 74 68  AtTime, where th
16160 65 20 65 71 75 61 74 69 6f 6e 0a 09 20 20 20 20  e equation..    
16170 20 20 20 20 2f 2f 20 69 73 20 64 65 73 63 72 69      // is descri
16180 62 65 64 2e 20 30 20 72 65 73 75 6c 74 73 20 69  bed. 0 results i
16190 6e 20 61 20 64 69 76 69 73 69 6f 6e 20 62 79 20  n a division by 
161a0 30 2e 0a 09 20 20 20 20 20 20 20 20 76 61 6c 75  0...        valu
161b0 65 20 3d 20 4d 61 74 68 2e 6d 61 78 28 74 68 69  e = Math.max(thi
161c0 73 2e 5f 6d 69 6e 4f 75 74 70 75 74 2c 20 76 61  s._minOutput, va
161d0 6c 75 65 29 3b 0a 09 20 20 20 20 20 20 20 20 74  lue);..        t
161e0 69 6d 65 43 6f 6e 73 74 61 6e 74 20 3d 20 4d 61  imeConstant = Ma
161f0 74 68 2e 6d 61 78 28 74 68 69 73 2e 5f 6d 69 6e  th.max(this._min
16200 4f 75 74 70 75 74 2c 20 74 69 6d 65 43 6f 6e 73  Output, timeCons
16210 74 61 6e 74 29 3b 0a 09 20 20 20 20 20 20 20 20  tant);..        
16220 74 68 69 73 2e 5f 70 61 72 61 6d 2e 73 65 74 54  this._param.setT
16230 61 72 67 65 74 41 74 54 69 6d 65 28 76 61 6c 75  argetAtTime(valu
16240 65 2c 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64  e, this.toSecond
16250 73 28 73 74 61 72 74 54 69 6d 65 29 2c 20 74 69  s(startTime), ti
16260 6d 65 43 6f 6e 73 74 61 6e 74 29 3b 0a 09 20 20  meConstant);..  
16270 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
16280 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  s;..    };..    
16290 2f 2a 2a 0a 09 09 20 2a 20 20 53 65 74 73 20 61  /**... *  Sets a
162a0 6e 20 61 72 72 61 79 20 6f 66 20 61 72 62 69 74  n array of arbit
162b0 72 61 72 79 20 70 61 72 61 6d 65 74 65 72 20 76  rary parameter v
162c0 61 6c 75 65 73 20 73 74 61 72 74 69 6e 67 20 61  alues starting a
162d0 74 20 74 68 65 20 67 69 76 65 6e 20 74 69 6d 65  t the given time
162e0 0a 09 09 20 2a 20 20 66 6f 72 20 74 68 65 20 67  ... *  for the g
162f0 69 76 65 6e 20 64 75 72 61 74 69 6f 6e 2e 0a 09  iven duration...
16300 09 20 2a 20 20 09 0a 09 09 20 2a 20 20 40 70 61  . *  .... *  @pa
16310 72 61 6d 20 7b 41 72 72 61 79 7d 20 76 61 6c 75  ram {Array} valu
16320 65 73 20 20 20 20 0a 09 09 20 2a 20 20 40 70 61  es    ... *  @pa
16330 72 61 6d 20 7b 54 69 6d 65 7d 20 73 74 61 72 74  ram {Time} start
16340 54 69 6d 65 20 0a 09 09 20 2a 20 20 40 70 61 72  Time ... *  @par
16350 61 6d 20 7b 54 69 6d 65 7d 20 64 75 72 61 74 69  am {Time} durati
16360 6f 6e 20 20 0a 09 09 20 2a 20 20 40 72 65 74 75  on  ... *  @retu
16370 72 6e 73 20 7b 54 6f 6e 65 2e 50 61 72 61 6d 7d  rns {Tone.Param}
16380 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20   this... */..   
16390 20 54 6f 6e 65 2e 50 61 72 61 6d 2e 70 72 6f 74   Tone.Param.prot
163a0 6f 74 79 70 65 2e 73 65 74 56 61 6c 75 65 43 75  otype.setValueCu
163b0 72 76 65 41 74 54 69 6d 65 20 3d 20 66 75 6e 63  rveAtTime = func
163c0 74 69 6f 6e 20 28 76 61 6c 75 65 73 2c 20 73 74  tion (values, st
163d0 61 72 74 54 69 6d 65 2c 20 64 75 72 61 74 69 6f  artTime, duratio
163e0 6e 29 20 7b 0a 09 20 20 20 20 20 20 20 20 66 6f  n) {..        fo
163f0 72 20 28 76 61 72 20 69 20 3d 20 30 3b 20 69 20  r (var i = 0; i 
16400 3c 20 76 61 6c 75 65 73 2e 6c 65 6e 67 74 68 3b  < values.length;
16410 20 69 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20 20   i++) {..       
16420 20 20 20 20 20 76 61 6c 75 65 73 5b 69 5d 20 3d       values[i] =
16430 20 74 68 69 73 2e 5f 66 72 6f 6d 55 6e 69 74 73   this._fromUnits
16440 28 76 61 6c 75 65 73 5b 69 5d 29 3b 0a 09 20 20  (values[i]);..  
16450 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
16460 20 74 68 69 73 2e 5f 70 61 72 61 6d 2e 73 65 74   this._param.set
16470 56 61 6c 75 65 43 75 72 76 65 41 74 54 69 6d 65  ValueCurveAtTime
16480 28 76 61 6c 75 65 73 2c 20 74 68 69 73 2e 74 6f  (values, this.to
16490 53 65 63 6f 6e 64 73 28 73 74 61 72 74 54 69 6d  Seconds(startTim
164a0 65 29 2c 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e  e), this.toSecon
164b0 64 73 28 64 75 72 61 74 69 6f 6e 29 29 3b 0a 09  ds(duration));..
164c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
164d0 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  his;..    };..  
164e0 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 61 6e 63    /**... *  Canc
164f0 65 6c 73 20 61 6c 6c 20 73 63 68 65 64 75 6c 65  els all schedule
16500 64 20 70 61 72 61 6d 65 74 65 72 20 63 68 61 6e  d parameter chan
16510 67 65 73 20 77 69 74 68 20 74 69 6d 65 73 20 67  ges with times g
16520 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 0a  reater than or .
16530 09 09 20 2a 20 20 65 71 75 61 6c 20 74 6f 20 73  .. *  equal to s
16540 74 61 72 74 54 69 6d 65 2e 0a 09 09 20 2a 20 20  tartTime.... *  
16550 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b  ... *  @param  {
16560 54 69 6d 65 7d 20 73 74 61 72 74 54 69 6d 65 0a  Time} startTime.
16570 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b  .. *  @returns {
16580 54 6f 6e 65 2e 50 61 72 61 6d 7d 20 74 68 69 73  Tone.Param} this
16590 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
165a0 2e 50 61 72 61 6d 2e 70 72 6f 74 6f 74 79 70 65  .Param.prototype
165b0 2e 63 61 6e 63 65 6c 53 63 68 65 64 75 6c 65 64  .cancelScheduled
165c0 56 61 6c 75 65 73 20 3d 20 66 75 6e 63 74 69 6f  Values = functio
165d0 6e 20 28 73 74 61 72 74 54 69 6d 65 29 20 7b 0a  n (startTime) {.
165e0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70  .        this._p
165f0 61 72 61 6d 2e 63 61 6e 63 65 6c 53 63 68 65 64  aram.cancelSched
16600 75 6c 65 64 56 61 6c 75 65 73 28 74 68 69 73 2e  uledValues(this.
16610 74 6f 53 65 63 6f 6e 64 73 28 73 74 61 72 74 54  toSeconds(startT
16620 69 6d 65 29 29 3b 0a 09 20 20 20 20 20 20 20 20  ime));..        
16630 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20  return this;..  
16640 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    };..    /**...
16650 20 2a 20 20 52 61 6d 70 73 20 74 6f 20 74 68 65   *  Ramps to the
16660 20 67 69 76 65 6e 20 76 61 6c 75 65 20 6f 76 65   given value ove
16670 72 20 74 68 65 20 64 75 72 61 74 69 6f 6e 20 6f  r the duration o
16680 66 20 74 68 65 20 72 61 6d 70 54 69 6d 65 2e 20  f the rampTime. 
16690 0a 09 09 20 2a 20 20 41 75 74 6f 6d 61 74 69 63  ... *  Automatic
166a0 61 6c 6c 79 20 73 65 6c 65 63 74 73 20 74 68 65  ally selects the
166b0 20 62 65 73 74 20 72 61 6d 70 20 74 79 70 65 20   best ramp type 
166c0 28 65 78 70 6f 6e 65 6e 74 69 61 6c 20 6f 72 20  (exponential or 
166d0 6c 69 6e 65 61 72 29 0a 09 09 20 2a 20 20 64 65  linear)... *  de
166e0 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 60  pending on the `
166f0 75 6e 69 74 73 60 20 6f 66 20 74 68 65 20 73 69  units` of the si
16700 67 6e 61 6c 0a 09 09 20 2a 20 20 0a 09 09 20 2a  gnal... *  ... *
16710 20 20 40 70 61 72 61 6d 20 20 7b 6e 75 6d 62 65    @param  {numbe
16720 72 7d 20 76 61 6c 75 65 20 20 20 0a 09 09 20 2a  r} value   ... *
16730 20 20 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 7d    @param  {Time}
16740 20 72 61 6d 70 54 69 6d 65 20 09 54 68 65 20 74   rampTime .The t
16750 69 6d 65 20 74 68 61 74 20 69 74 20 74 61 6b 65  ime that it take
16760 73 20 74 68 65 20 0a 09 09 20 2a 20 20 20 20 20  s the ... *     
16770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16780 20 20 20 20 20 20 20 20 20 76 61 6c 75 65 20 74           value t
16790 6f 20 72 61 6d 70 20 66 72 6f 6d 20 69 74 27 73  o ramp from it's
167a0 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 0a 09   current value..
167b0 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 54 69 6d  . *  @param {Tim
167c0 65 7d 09 5b 73 74 61 72 74 54 69 6d 65 3d 6e 6f  e}.[startTime=no
167d0 77 5d 20 09 57 68 65 6e 20 74 68 65 20 72 61 6d  w] .When the ram
167e0 70 20 73 68 6f 75 6c 64 20 73 74 61 72 74 2e 20  p should start. 
167f0 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20  ... *  @returns 
16800 7b 54 6f 6e 65 2e 50 61 72 61 6d 7d 20 74 68 69  {Tone.Param} thi
16810 73 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65  s... *  @example
16820 0a 09 09 20 2a 20 2f 2f 72 61 6d 70 20 74 6f 20  ... * //ramp to 
16830 74 68 65 20 76 61 6c 75 65 20 65 69 74 68 65 72  the value either
16840 20 6c 69 6e 65 61 72 6c 79 20 6f 72 20 65 78 70   linearly or exp
16850 6f 6e 65 6e 74 69 61 6c 6c 79 20 0a 09 09 20 2a  onentially ... *
16860 20 2f 2f 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20   //depending on 
16870 74 68 65 20 22 75 6e 69 74 73 22 20 76 61 6c 75  the "units" valu
16880 65 20 6f 66 20 74 68 65 20 73 69 67 6e 61 6c 0a  e of the signal.
16890 09 09 20 2a 20 73 69 67 6e 61 6c 2e 72 61 6d 70  .. * signal.ramp
168a0 54 6f 28 30 2c 20 31 30 29 3b 0a 09 09 20 2a 20  To(0, 10);... * 
168b0 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 2f   @example... * /
168c0 2f 73 63 68 65 64 75 6c 65 20 69 74 20 74 6f 20  /schedule it to 
168d0 72 61 6d 70 20 73 74 61 72 74 69 6e 67 20 61 74  ramp starting at
168e0 20 61 20 73 70 65 63 69 66 69 63 20 74 69 6d 65   a specific time
168f0 0a 09 09 20 2a 20 73 69 67 6e 61 6c 2e 72 61 6d  ... * signal.ram
16900 70 54 6f 28 30 2c 20 31 30 2c 20 35 29 0a 09 09  pTo(0, 10, 5)...
16910 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50 61   */..    Tone.Pa
16920 72 61 6d 2e 70 72 6f 74 6f 74 79 70 65 2e 72 61  ram.prototype.ra
16930 6d 70 54 6f 20 3d 20 66 75 6e 63 74 69 6f 6e 20  mpTo = function 
16940 28 76 61 6c 75 65 2c 20 72 61 6d 70 54 69 6d 65  (value, rampTime
16950 2c 20 73 74 61 72 74 54 69 6d 65 29 20 7b 0a 09  , startTime) {..
16960 20 20 20 20 20 20 20 20 72 61 6d 70 54 69 6d 65          rampTime
16970 20 3d 20 74 68 69 73 2e 64 65 66 61 75 6c 74 41   = this.defaultA
16980 72 67 28 72 61 6d 70 54 69 6d 65 2c 20 30 29 3b  rg(rampTime, 0);
16990 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 74 68  ..        if (th
169a0 69 73 2e 75 6e 69 74 73 20 3d 3d 3d 20 54 6f 6e  is.units === Ton
169b0 65 2e 54 79 70 65 2e 46 72 65 71 75 65 6e 63 79  e.Type.Frequency
169c0 20 7c 7c 20 74 68 69 73 2e 75 6e 69 74 73 20 3d   || this.units =
169d0 3d 3d 20 54 6f 6e 65 2e 54 79 70 65 2e 42 50 4d  == Tone.Type.BPM
169e0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
169f0 20 74 68 69 73 2e 65 78 70 6f 6e 65 6e 74 69 61   this.exponentia
16a00 6c 52 61 6d 70 54 6f 56 61 6c 75 65 28 76 61 6c  lRampToValue(val
16a10 75 65 2c 20 72 61 6d 70 54 69 6d 65 2c 20 73 74  ue, rampTime, st
16a20 61 72 74 54 69 6d 65 29 3b 0a 09 20 20 20 20 20  artTime);..     
16a30 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20     } else {..   
16a40 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c 69           this.li
16a50 6e 65 61 72 52 61 6d 70 54 6f 56 61 6c 75 65 28  nearRampToValue(
16a60 76 61 6c 75 65 2c 20 72 61 6d 70 54 69 6d 65 2c  value, rampTime,
16a70 20 73 74 61 72 74 54 69 6d 65 29 3b 0a 09 20 20   startTime);..  
16a80 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
16a90 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20   return this;.. 
16aa0 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09     };..    /**..
16ab0 09 20 2a 20 20 54 68 65 20 4c 46 4f 20 63 72 65  . *  The LFO cre
16ac0 61 74 65 64 20 62 79 20 74 68 65 20 73 69 67 6e  ated by the sign
16ad0 61 6c 20 69 6e 73 74 61 6e 63 65 2e 20 49 66 20  al instance. If 
16ae0 6e 6f 6e 65 0a 09 09 20 2a 20 20 77 61 73 20 63  none... *  was c
16af0 72 65 61 74 65 64 2c 20 74 68 69 73 20 69 73 20  reated, this is 
16b00 6e 75 6c 6c 2e 0a 09 09 20 2a 20 20 40 74 79 70  null.... *  @typ
16b10 65 20 7b 54 6f 6e 65 2e 4c 46 4f 7d 0a 09 09 20  e {Tone.LFO}... 
16b20 2a 20 20 40 72 65 61 64 4f 6e 6c 79 0a 09 09 20  *  @readOnly... 
16b30 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e  *  @memberOf Ton
16b40 65 2e 50 61 72 61 6d 23 0a 09 09 20 2a 20 20 40  e.Param#... *  @
16b50 6e 61 6d 65 20 6c 66 6f 0a 09 09 20 2a 2f 0a 09  name lfo... */..
16b60 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e      Object.defin
16b70 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 50  eProperty(Tone.P
16b80 61 72 61 6d 2e 70 72 6f 74 6f 74 79 70 65 2c 20  aram.prototype, 
16b90 27 6c 66 6f 27 2c 20 7b 0a 09 20 20 20 20 20 20  'lfo', {..      
16ba0 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    get: function 
16bb0 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  () {..          
16bc0 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 6c    return this._l
16bd0 66 6f 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  fo;..        }..
16be0 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a      });..    /**
16bf0 0a 09 09 20 2a 20 20 43 6c 65 61 6e 20 75 70 0a  ... *  Clean up.
16c00 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b  .. *  @returns {
16c10 54 6f 6e 65 2e 50 61 72 61 6d 7d 20 74 68 69 73  Tone.Param} this
16c20 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
16c30 2e 50 61 72 61 6d 2e 70 72 6f 74 6f 74 79 70 65  .Param.prototype
16c40 2e 64 69 73 70 6f 73 65 20 3d 20 66 75 6e 63 74  .dispose = funct
16c50 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
16c60 20 20 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65    Tone.prototype
16c70 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68  .dispose.call(th
16c80 69 73 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  is);..        th
16c90 69 73 2e 5f 70 61 72 61 6d 20 3d 20 6e 75 6c 6c  is._param = null
16ca0 3b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 74  ;..        if (t
16cb0 68 69 73 2e 5f 6c 66 6f 29 20 7b 0a 09 20 20 20  his._lfo) {..   
16cc0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c           this._l
16cd0 66 6f 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20  fo.dispose();.. 
16ce0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
16cf0 5f 6c 66 6f 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20  _lfo = null;..  
16d00 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
16d10 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20   return this;.. 
16d20 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74 75 72     };..    retur
16d30 6e 20 54 6f 6e 65 2e 50 61 72 61 6d 3b 0a 09 7d  n Tone.Param;..}
16d40 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74  );..Module(funct
16d50 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20  ion (Tone) {..  
16d60 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a    ..    /**... *
16d70 20 20 40 63 6c 61 73 73 20 41 20 74 68 69 6e 20    @class A thin 
16d80 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
16d90 68 65 20 4e 61 74 69 76 65 20 57 65 62 20 41 75  he Native Web Au
16da0 64 69 6f 20 47 61 69 6e 4e 6f 64 65 2e 0a 09 09  dio GainNode....
16db0 20 2a 20 20 20 20 20 20 20 20 20 54 68 65 20 47   *         The G
16dc0 61 69 6e 4e 6f 64 65 20 69 73 20 61 20 62 61 73  ainNode is a bas
16dd0 69 63 20 62 75 69 6c 64 69 6e 67 20 62 6c 6f 63  ic building bloc
16de0 6b 20 6f 66 20 74 68 65 20 57 65 62 20 41 75 64  k of the Web Aud
16df0 69 6f 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  io... *         
16e00 41 50 49 20 61 6e 64 20 69 73 20 75 73 65 66 75  API and is usefu
16e10 6c 20 66 6f 72 20 72 6f 75 74 69 6e 67 20 61 75  l for routing au
16e20 64 69 6f 20 61 6e 64 20 61 64 6a 75 73 74 69 6e  dio and adjustin
16e30 67 20 67 61 69 6e 73 2e 20 0a 09 09 20 2a 20 20  g gains. ... *  
16e40 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65 7d 0a  @extends {Tone}.
16e50 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 4e  .. *  @param  {N
16e60 75 6d 62 65 72 3d 7d 20 20 67 61 69 6e 20 20 54  umber=}  gain  T
16e70 68 65 20 69 6e 69 74 69 61 6c 20 67 61 69 6e 20  he initial gain 
16e80 6f 66 20 74 68 65 20 47 61 69 6e 4e 6f 64 65 0a  of the GainNode.
16e90 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 54 6f  .. *  @param {To
16ea0 6e 65 2e 54 79 70 65 3d 7d 20 75 6e 69 74 73 20  ne.Type=} units 
16eb0 54 68 65 20 75 6e 69 74 73 20 6f 66 20 74 68 65  The units of the
16ec0 20 67 61 69 6e 20 70 61 72 61 6d 65 74 65 72 2e   gain parameter.
16ed0 20 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e   ... */..    Ton
16ee0 65 2e 47 61 69 6e 20 3d 20 66 75 6e 63 74 69 6f  e.Gain = functio
16ef0 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
16f00 76 61 72 20 6f 70 74 69 6f 6e 73 20 3d 20 74 68  var options = th
16f10 69 73 2e 6f 70 74 69 6f 6e 73 4f 62 6a 65 63 74  is.optionsObject
16f20 28 61 72 67 75 6d 65 6e 74 73 2c 20 5b 0a 09 20  (arguments, [.. 
16f30 20 20 20 20 20 20 20 20 20 20 20 27 67 61 69 6e             'gain
16f40 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ',..            
16f50 27 75 6e 69 74 73 27 0a 09 20 20 20 20 20 20 20  'units'..       
16f60 20 5d 2c 20 54 6f 6e 65 2e 47 61 69 6e 2e 64 65   ], Tone.Gain.de
16f70 66 61 75 6c 74 73 29 3b 0a 09 20 20 20 20 20 20  faults);..      
16f80 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65    /**.... *  The
16f90 20 47 61 69 6e 4e 6f 64 65 0a 09 09 09 20 2a 20   GainNode.... * 
16fa0 20 40 74 79 70 65 20 20 7b 47 61 69 6e 4e 6f 64   @type  {GainNod
16fb0 65 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61  e}.... *  @priva
16fc0 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  te.... */..     
16fd0 20 20 20 74 68 69 73 2e 69 6e 70 75 74 20 3d 20     this.input = 
16fe0 74 68 69 73 2e 6f 75 74 70 75 74 20 3d 20 74 68  this.output = th
16ff0 69 73 2e 5f 67 61 69 6e 4e 6f 64 65 20 3d 20 74  is._gainNode = t
17000 68 69 73 2e 63 6f 6e 74 65 78 74 2e 63 72 65 61  his.context.crea
17010 74 65 47 61 69 6e 28 29 3b 0a 09 20 20 20 20 20  teGain();..     
17020 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68     /**.... *  Th
17030 65 20 67 61 69 6e 20 70 61 72 61 6d 65 74 65 72  e gain parameter
17040 20 6f 66 20 74 68 65 20 67 61 69 6e 20 6e 6f 64   of the gain nod
17050 65 2e 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  e..... *  @type 
17060 7b 54 6f 6e 65 2e 50 61 72 61 6d 7d 0a 09 09 09  {Tone.Param}....
17070 20 2a 20 20 40 73 69 67 6e 61 6c 0a 09 09 09 20   *  @signal.... 
17080 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
17090 2e 67 61 69 6e 20 3d 20 6e 65 77 20 54 6f 6e 65  .gain = new Tone
170a0 2e 50 61 72 61 6d 28 7b 0a 09 20 20 20 20 20 20  .Param({..      
170b0 20 20 20 20 20 20 27 70 61 72 61 6d 27 3a 20 74        'param': t
170c0 68 69 73 2e 5f 67 61 69 6e 4e 6f 64 65 2e 67 61  his._gainNode.ga
170d0 69 6e 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  in,..           
170e0 20 27 75 6e 69 74 73 27 3a 20 6f 70 74 69 6f 6e   'units': option
170f0 73 2e 75 6e 69 74 73 2c 0a 09 20 20 20 20 20 20  s.units,..      
17100 20 20 20 20 20 20 27 76 61 6c 75 65 27 3a 20 6f        'value': o
17110 70 74 69 6f 6e 73 2e 67 61 69 6e 2c 0a 09 20 20  ptions.gain,..  
17120 20 20 20 20 20 20 20 20 20 20 27 63 6f 6e 76 65            'conve
17130 72 74 27 3a 20 6f 70 74 69 6f 6e 73 2e 63 6f 6e  rt': options.con
17140 76 65 72 74 0a 09 20 20 20 20 20 20 20 20 7d 29  vert..        })
17150 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
17160 5f 72 65 61 64 4f 6e 6c 79 28 27 67 61 69 6e 27  _readOnly('gain'
17170 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  );..    };..    
17180 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65  Tone.extend(Tone
17190 2e 47 61 69 6e 29 3b 0a 09 20 20 20 20 2f 2a 2a  .Gain);..    /**
171a0 0a 09 09 20 2a 20 20 54 68 65 20 64 65 66 61 75  ... *  The defau
171b0 6c 74 73 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74  lts... *  @const
171c0 0a 09 09 20 2a 20 20 40 74 79 70 65 20 20 7b 4f  ... *  @type  {O
171d0 62 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a 09 20 20  bject}... */..  
171e0 20 20 54 6f 6e 65 2e 47 61 69 6e 2e 64 65 66 61    Tone.Gain.defa
171f0 75 6c 74 73 20 3d 20 7b 0a 09 20 20 20 20 20 20  ults = {..      
17200 20 20 27 67 61 69 6e 27 3a 20 31 2c 0a 09 20 20    'gain': 1,..  
17210 20 20 20 20 20 20 27 63 6f 6e 76 65 72 74 27 3a        'convert':
17220 20 74 72 75 65 0a 09 20 20 20 20 7d 3b 0a 09 20   true..    };.. 
17230 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 6c 65     /**... *  Cle
17240 61 6e 20 75 70 2e 0a 09 09 20 2a 20 20 40 72 65  an up.... *  @re
17250 74 75 72 6e 20 20 7b 54 6f 6e 65 2e 47 61 69 6e  turn  {Tone.Gain
17260 7d 20 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20  }  this... */.. 
17270 20 20 20 54 6f 6e 65 2e 47 61 69 6e 2e 70 72 6f     Tone.Gain.pro
17280 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d  totype.dispose =
17290 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
172a0 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 50 61 72          Tone.Par
172b0 61 6d 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73  am.prototype.dis
172c0 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b  pose.call(this);
172d0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
172e0 67 61 69 6e 4e 6f 64 65 2e 64 69 73 63 6f 6e 6e  gainNode.disconn
172f0 65 63 74 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ect();..        
17300 74 68 69 73 2e 5f 67 61 69 6e 4e 6f 64 65 20 3d  this._gainNode =
17310 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
17320 74 68 69 73 2e 5f 77 72 69 74 61 62 6c 65 28 27  this._writable('
17330 67 61 69 6e 27 29 3b 0a 09 20 20 20 20 20 20 20  gain');..       
17340 20 74 68 69 73 2e 67 61 69 6e 2e 64 69 73 70 6f   this.gain.dispo
17350 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74  se();..        t
17360 68 69 73 2e 67 61 69 6e 20 3d 20 6e 75 6c 6c 3b  his.gain = null;
17370 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2f  ..    };..    //
17380 53 54 41 54 49 43 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  STATIC//////////
17390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
173a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
173b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
173c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 2f  /////////..    /
173d0 2a 2a 0a 09 09 20 2a 20 20 43 72 65 61 74 65 20  **... *  Create 
173e0 69 6e 70 75 74 20 61 6e 64 20 6f 75 74 70 75 74  input and output
173f0 73 20 66 6f 72 20 74 68 69 73 20 6f 62 6a 65 63  s for this objec
17400 74 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  t.... *  @param 
17410 20 7b 4e 75 6d 62 65 72 7d 20 20 69 6e 70 75 74   {Number}  input
17420 20 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66     The number of
17430 20 69 6e 70 75 74 73 0a 09 09 20 2a 20 20 40 70   inputs... *  @p
17440 61 72 61 6d 20 20 7b 4e 75 6d 62 65 72 3d 7d 20  aram  {Number=} 
17450 20 6f 75 74 70 75 74 73 20 20 54 68 65 20 6e 75   outputs  The nu
17460 6d 62 65 72 20 6f 66 20 6f 75 74 70 75 74 73 0a  mber of outputs.
17470 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b  .. *  @return  {
17480 54 6f 6e 65 7d 20 20 74 68 69 73 0a 09 09 20 2a  Tone}  this... *
17490 20 20 40 69 6e 74 65 72 6e 61 6c 0a 09 09 20 2a    @internal... *
174a0 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 70 72 6f 74  /..    Tone.prot
174b0 6f 74 79 70 65 2e 63 72 65 61 74 65 49 6e 73 4f  otype.createInsO
174c0 75 74 73 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  uts = function (
174d0 69 6e 70 75 74 73 2c 20 6f 75 74 70 75 74 73 29  inputs, outputs)
174e0 20 7b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
174f0 69 6e 70 75 74 73 20 3d 3d 3d 20 31 29 20 7b 0a  inputs === 1) {.
17500 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
17510 73 2e 69 6e 70 75 74 20 3d 20 6e 65 77 20 54 6f  s.input = new To
17520 6e 65 2e 47 61 69 6e 28 29 3b 0a 09 20 20 20 20  ne.Gain();..    
17530 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 69      } else if (i
17540 6e 70 75 74 73 20 3e 20 31 29 20 7b 0a 09 20 20  nputs > 1) {..  
17550 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 69            this.i
17560 6e 70 75 74 20 3d 20 6e 65 77 20 41 72 72 61 79  nput = new Array
17570 28 69 6e 70 75 74 73 29 3b 0a 09 20 20 20 20 20  (inputs);..     
17580 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 69 66     }..        if
17590 20 28 6f 75 74 70 75 74 73 20 3d 3d 3d 20 31 29   (outputs === 1)
175a0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
175b0 74 68 69 73 2e 6f 75 74 70 75 74 20 3d 20 6e 65  this.output = ne
175c0 77 20 54 6f 6e 65 2e 47 61 69 6e 28 29 3b 0a 09  w Tone.Gain();..
175d0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69          } else i
175e0 66 20 28 6f 75 74 70 75 74 73 20 3e 20 31 29 20  f (outputs > 1) 
175f0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
17600 68 69 73 2e 6f 75 74 70 75 74 20 3d 20 6e 65 77  his.output = new
17610 20 41 72 72 61 79 28 69 6e 70 75 74 73 29 3b 0a   Array(inputs);.
17620 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
17630 7d 3b 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  };..    ////////
17640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17680 2f 2f 2f 0a 09 20 20 20 20 72 65 74 75 72 6e 20  ///..    return 
17690 54 6f 6e 65 2e 47 61 69 6e 3b 0a 09 7d 29 3b 0a  Tone.Gain;..});.
176a0 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e  .Module(function
176b0 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a   (Tone) {..    .
176c0 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40  .    /**... *  @
176d0 63 6c 61 73 73 20 20 41 20 73 69 67 6e 61 6c 20  class  A signal 
176e0 69 73 20 61 6e 20 61 75 64 69 6f 2d 72 61 74 65  is an audio-rate
176f0 20 76 61 6c 75 65 2e 20 54 6f 6e 65 2e 53 69 67   value. Tone.Sig
17700 6e 61 6c 20 69 73 20 61 20 63 6f 72 65 20 63 6f  nal is a core co
17710 6d 70 6f 6e 65 6e 74 20 6f 66 20 74 68 65 20 6c  mponent of the l
17720 69 62 72 61 72 79 2e 0a 09 09 20 2a 20 20 20 20  ibrary.... *    
17730 20 20 20 20 20 20 55 6e 6c 69 6b 65 20 61 20 6e        Unlike a n
17740 75 6d 62 65 72 2c 20 53 69 67 6e 61 6c 73 20 63  umber, Signals c
17750 61 6e 20 62 65 20 73 63 68 65 64 75 6c 65 64 20  an be scheduled 
17760 77 69 74 68 20 73 61 6d 70 6c 65 2d 6c 65 76 65  with sample-leve
17770 6c 20 61 63 63 75 72 61 63 79 2e 20 54 6f 6e 65  l accuracy. Tone
17780 2e 53 69 67 6e 61 6c 0a 09 09 20 2a 20 20 20 20  .Signal... *    
17790 20 20 20 20 20 20 68 61 73 20 61 6c 6c 20 6f 66        has all of
177a0 20 74 68 65 20 6d 65 74 68 6f 64 73 20 61 76 61   the methods ava
177b0 69 6c 61 62 6c 65 20 74 6f 20 6e 61 74 69 76 65  ilable to native
177c0 20 57 65 62 20 41 75 64 69 6f 20 0a 09 09 20 2a   Web Audio ... *
177d0 20 20 20 20 20 20 20 20 20 20 5b 41 75 64 69 6f            [Audio
177e0 50 61 72 61 6d 5d 28 68 74 74 70 3a 2f 2f 77 65  Param](http://we
177f0 62 61 75 64 69 6f 2e 67 69 74 68 75 62 2e 69 6f  baudio.github.io
17800 2f 77 65 62 2d 61 75 64 69 6f 2d 61 70 69 2f 23  /web-audio-api/#
17810 74 68 65 2d 61 75 64 69 6f 70 61 72 61 6d 2d 69  the-audioparam-i
17820 6e 74 65 72 66 61 63 65 29 0a 09 09 20 2a 20 20  nterface)... *  
17830 20 20 20 20 20 20 20 20 61 73 20 77 65 6c 6c 20          as well 
17840 61 73 20 61 64 64 69 74 69 6f 6e 61 6c 20 63 6f  as additional co
17850 6e 76 65 6e 69 65 6e 63 65 73 2e 20 52 65 61 64  nveniences. Read
17860 20 6d 6f 72 65 20 61 62 6f 75 74 20 77 6f 72 6b   more about work
17870 69 6e 67 20 77 69 74 68 20 73 69 67 6e 61 6c 73  ing with signals
17880 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20   ... *          
17890 5b 68 65 72 65 5d 28 68 74 74 70 73 3a 2f 2f 67  [here](https://g
178a0 69 74 68 75 62 2e 63 6f 6d 2f 54 6f 6e 65 6a 73  ithub.com/Tonejs
178b0 2f 54 6f 6e 65 2e 6a 73 2f 77 69 6b 69 2f 53 69  /Tone.js/wiki/Si
178c0 67 6e 61 6c 73 29 2e 0a 09 09 20 2a 0a 09 09 20  gnals).... *... 
178d0 2a 20 20 40 63 6f 6e 73 74 72 75 63 74 6f 72 0a  *  @constructor.
178e0 09 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b  .. *  @extends {
178f0 54 6f 6e 65 2e 50 61 72 61 6d 7d 0a 09 09 20 2a  Tone.Param}... *
17900 20 20 40 70 61 72 61 6d 20 7b 4e 75 6d 62 65 72    @param {Number
17910 7c 41 75 64 69 6f 50 61 72 61 6d 7d 20 5b 76 61  |AudioParam} [va
17920 6c 75 65 5d 20 49 6e 69 74 69 61 6c 20 76 61 6c  lue] Initial val
17930 75 65 20 6f 66 20 74 68 65 20 73 69 67 6e 61 6c  ue of the signal
17940 2e 20 49 66 20 61 6e 20 41 75 64 69 6f 50 61 72  . If an AudioPar
17950 61 6d 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  am... *         
17960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17970 20 20 20 20 20 20 20 20 20 20 20 20 69 73 20 70              is p
17980 61 73 73 65 64 20 69 6e 2c 20 74 68 61 74 20 70  assed in, that p
17990 61 72 61 6d 65 74 65 72 20 77 69 6c 6c 20 62 65  arameter will be
179a0 20 77 72 61 70 70 65 64 0a 09 09 20 2a 20 20 20   wrapped... *   
179b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179d0 20 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 6c 65 64    and controlled
179e0 20 62 79 20 74 68 65 20 53 69 67 6e 61 6c 2e 20   by the Signal. 
179f0 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 73  ... *  @param {s
17a00 74 72 69 6e 67 7d 20 5b 75 6e 69 74 73 3d 4e 75  tring} [units=Nu
17a10 6d 62 65 72 5d 20 75 6e 69 74 20 54 68 65 20 75  mber] unit The u
17a20 6e 69 74 73 20 74 68 65 20 73 69 67 6e 61 6c 20  nits the signal 
17a30 69 73 20 69 6e 2e 20 0a 09 09 20 2a 20 20 40 65  is in. ... *  @e
17a40 78 61 6d 70 6c 65 0a 09 09 20 2a 20 76 61 72 20  xample... * var 
17a50 73 69 67 6e 61 6c 20 3d 20 6e 65 77 20 54 6f 6e  signal = new Ton
17a60 65 2e 53 69 67 6e 61 6c 28 31 30 29 3b 0a 09 09  e.Signal(10);...
17a70 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 53 69   */..    Tone.Si
17a80 67 6e 61 6c 20 3d 20 66 75 6e 63 74 69 6f 6e 20  gnal = function 
17a90 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61  () {..        va
17aa0 72 20 6f 70 74 69 6f 6e 73 20 3d 20 74 68 69 73  r options = this
17ab0 2e 6f 70 74 69 6f 6e 73 4f 62 6a 65 63 74 28 61  .optionsObject(a
17ac0 72 67 75 6d 65 6e 74 73 2c 20 5b 0a 09 20 20 20  rguments, [..   
17ad0 20 20 20 20 20 20 20 20 20 27 76 61 6c 75 65 27           'value'
17ae0 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
17af0 75 6e 69 74 73 27 0a 09 20 20 20 20 20 20 20 20  units'..        
17b00 5d 2c 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 2e 64  ], Tone.Signal.d
17b10 65 66 61 75 6c 74 73 29 3b 0a 09 20 20 20 20 20  efaults);..     
17b20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 54 68 65     /**.... * The
17b30 20 6e 6f 64 65 20 77 68 65 72 65 20 74 68 65 20   node where the 
17b40 63 6f 6e 73 74 61 6e 74 20 73 69 67 6e 61 6c 20  constant signal 
17b50 76 61 6c 75 65 20 69 73 20 73 63 61 6c 65 64 2e  value is scaled.
17b60 0a 09 09 09 20 2a 20 40 74 79 70 65 20 7b 47 61  .... * @type {Ga
17b70 69 6e 4e 6f 64 65 7d 0a 09 09 09 20 2a 20 40 70  inNode}.... * @p
17b80 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20  rivate.... */.. 
17b90 20 20 20 20 20 20 20 74 68 69 73 2e 6f 75 74 70         this.outp
17ba0 75 74 20 3d 20 74 68 69 73 2e 5f 67 61 69 6e 20  ut = this._gain 
17bb0 3d 20 74 68 69 73 2e 63 6f 6e 74 65 78 74 2e 63  = this.context.c
17bc0 72 65 61 74 65 47 61 69 6e 28 29 3b 0a 09 20 20  reateGain();..  
17bd0 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 2e 70 61        options.pa
17be0 72 61 6d 20 3d 20 74 68 69 73 2e 5f 67 61 69 6e  ram = this._gain
17bf0 2e 67 61 69 6e 3b 0a 09 20 20 20 20 20 20 20 20  .gain;..        
17c00 54 6f 6e 65 2e 50 61 72 61 6d 2e 63 61 6c 6c 28  Tone.Param.call(
17c10 74 68 69 73 2c 20 6f 70 74 69 6f 6e 73 29 3b 0a  this, options);.
17c20 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
17c30 20 2a 20 54 68 65 20 6e 6f 64 65 20 77 68 65 72   * The node wher
17c40 65 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 73  e the value is s
17c50 65 74 2e 0a 09 09 09 20 2a 20 40 74 79 70 65 20  et..... * @type 
17c60 7b 54 6f 6e 65 2e 50 61 72 61 6d 7d 0a 09 09 09  {Tone.Param}....
17c70 20 2a 20 40 70 72 69 76 61 74 65 0a 09 09 09 20   * @private.... 
17c80 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
17c90 2e 69 6e 70 75 74 20 3d 20 74 68 69 73 2e 5f 70  .input = this._p
17ca0 61 72 61 6d 20 3d 20 74 68 69 73 2e 5f 67 61 69  aram = this._gai
17cb0 6e 2e 67 61 69 6e 3b 0a 09 20 20 20 20 20 20 20  n.gain;..       
17cc0 20 2f 2f 63 6f 6e 6e 65 63 74 20 74 68 65 20 63   //connect the c
17cd0 6f 6e 73 74 20 6f 75 74 70 75 74 20 74 6f 20 74  onst output to t
17ce0 68 65 20 6e 6f 64 65 20 6f 75 74 70 75 74 0a 09  he node output..
17cf0 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 53 69 67          Tone.Sig
17d00 6e 61 6c 2e 5f 63 6f 6e 73 74 61 6e 74 2e 63 68  nal._constant.ch
17d10 61 69 6e 28 74 68 69 73 2e 5f 67 61 69 6e 29 3b  ain(this._gain);
17d20 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f  ..    };..    To
17d30 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 53  ne.extend(Tone.S
17d40 69 67 6e 61 6c 2c 20 54 6f 6e 65 2e 50 61 72 61  ignal, Tone.Para
17d50 6d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  m);..    /**... 
17d60 2a 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 76  *  The default v
17d70 61 6c 75 65 73 0a 09 09 20 2a 20 20 40 74 79 70  alues... *  @typ
17d80 65 20 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a  e  {Object}... *
17d90 20 20 40 73 74 61 74 69 63 0a 09 09 20 2a 20 20    @static... *  
17da0 40 63 6f 6e 73 74 0a 09 09 20 2a 2f 0a 09 20 20  @const... */..  
17db0 20 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 2e 64 65    Tone.Signal.de
17dc0 66 61 75 6c 74 73 20 3d 20 7b 0a 09 20 20 20 20  faults = {..    
17dd0 20 20 20 20 27 76 61 6c 75 65 27 3a 20 30 2c 0a      'value': 0,.
17de0 09 20 20 20 20 20 20 20 20 27 75 6e 69 74 73 27  .        'units'
17df0 3a 20 54 6f 6e 65 2e 54 79 70 65 2e 44 65 66 61  : Tone.Type.Defa
17e00 75 6c 74 2c 0a 09 20 20 20 20 20 20 20 20 27 63  ult,..        'c
17e10 6f 6e 76 65 72 74 27 3a 20 74 72 75 65 0a 09 20  onvert': true.. 
17e20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09     };..    /**..
17e30 09 20 2a 20 20 57 68 65 6e 20 73 69 67 6e 61 6c  . *  When signal
17e40 73 20 63 6f 6e 6e 65 63 74 20 74 6f 20 6f 74 68  s connect to oth
17e50 65 72 20 73 69 67 6e 61 6c 73 20 6f 72 20 41 75  er signals or Au
17e60 64 69 6f 50 61 72 61 6d 73 2c 20 0a 09 09 20 2a  dioParams, ... *
17e70 20 20 74 68 65 79 20 74 61 6b 65 20 6f 76 65 72    they take over
17e80 20 74 68 65 20 6f 75 74 70 75 74 20 76 61 6c 75   the output valu
17e90 65 20 6f 66 20 74 68 61 74 20 73 69 67 6e 61 6c  e of that signal
17ea0 20 6f 72 20 41 75 64 69 6f 50 61 72 61 6d 2e 20   or AudioParam. 
17eb0 0a 09 09 20 2a 20 20 46 6f 72 20 61 6c 6c 20 6f  ... *  For all o
17ec0 74 68 65 72 20 6e 6f 64 65 73 2c 20 74 68 65 20  ther nodes, the 
17ed0 62 65 68 61 76 69 6f 72 20 69 73 20 74 68 65 20  behavior is the 
17ee0 73 61 6d 65 20 61 73 20 61 20 64 65 66 61 75 6c  same as a defaul
17ef0 74 20 3c 63 6f 64 65 3e 63 6f 6e 6e 65 63 74 3c  t <code>connect<
17f00 2f 63 6f 64 65 3e 2e 20 0a 09 09 20 2a 0a 09 09  /code>. ... *...
17f10 20 2a 20 20 40 6f 76 65 72 72 69 64 65 0a 09 09   *  @override...
17f20 20 2a 20 20 40 70 61 72 61 6d 20 7b 41 75 64 69   *  @param {Audi
17f30 6f 50 61 72 61 6d 7c 41 75 64 69 6f 4e 6f 64 65  oParam|AudioNode
17f40 7c 54 6f 6e 65 2e 53 69 67 6e 61 6c 7c 54 6f 6e  |Tone.Signal|Ton
17f50 65 7d 20 6e 6f 64 65 20 0a 09 09 20 2a 20 20 40  e} node ... *  @
17f60 70 61 72 61 6d 20 7b 6e 75 6d 62 65 72 7d 20 5b  param {number} [
17f70 6f 75 74 70 75 74 4e 75 6d 62 65 72 3d 30 5d 20  outputNumber=0] 
17f80 54 68 65 20 6f 75 74 70 75 74 20 6e 75 6d 62 65  The output numbe
17f90 72 20 74 6f 20 63 6f 6e 6e 65 63 74 20 66 72 6f  r to connect fro
17fa0 6d 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  m.... *  @param 
17fb0 7b 6e 75 6d 62 65 72 7d 20 5b 69 6e 70 75 74 4e  {number} [inputN
17fc0 75 6d 62 65 72 3d 30 5d 20 54 68 65 20 69 6e 70  umber=0] The inp
17fd0 75 74 20 6e 75 6d 62 65 72 20 74 6f 20 63 6f 6e  ut number to con
17fe0 6e 65 63 74 20 74 6f 2e 0a 09 09 20 2a 20 20 40  nect to.... *  @
17ff0 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 53 69  returns {Tone.Si
18000 67 6e 61 6c 42 61 73 65 7d 20 74 68 69 73 0a 09  gnalBase} this..
18010 09 20 2a 20 20 40 6d 65 74 68 6f 64 0a 09 09 20  . *  @method... 
18020 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 53 69 67  */..    Tone.Sig
18030 6e 61 6c 2e 70 72 6f 74 6f 74 79 70 65 2e 63 6f  nal.prototype.co
18040 6e 6e 65 63 74 20 3d 20 54 6f 6e 65 2e 53 69 67  nnect = Tone.Sig
18050 6e 61 6c 42 61 73 65 2e 70 72 6f 74 6f 74 79 70  nalBase.prototyp
18060 65 2e 63 6f 6e 6e 65 63 74 3b 0a 09 20 20 20 20  e.connect;..    
18070 2f 2a 2a 0a 09 09 20 2a 20 20 64 69 73 70 6f 73  /**... *  dispos
18080 65 20 61 6e 64 20 64 69 73 63 6f 6e 6e 65 63 74  e and disconnect
18090 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20  ... *  @returns 
180a0 7b 54 6f 6e 65 2e 53 69 67 6e 61 6c 7d 20 74 68  {Tone.Signal} th
180b0 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  is... */..    To
180c0 6e 65 2e 53 69 67 6e 61 6c 2e 70 72 6f 74 6f 74  ne.Signal.protot
180d0 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75  ype.dispose = fu
180e0 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
180f0 20 20 20 20 20 54 6f 6e 65 2e 50 61 72 61 6d 2e       Tone.Param.
18100 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73  prototype.dispos
18110 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20  e.call(this);.. 
18120 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70 61 72         this._par
18130 61 6d 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  am = null;..    
18140 20 20 20 20 74 68 69 73 2e 5f 67 61 69 6e 2e 64      this._gain.d
18150 69 73 63 6f 6e 6e 65 63 74 28 29 3b 0a 09 20 20  isconnect();..  
18160 20 20 20 20 20 20 74 68 69 73 2e 5f 67 61 69 6e        this._gain
18170 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
18180 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09    return this;..
18190 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2f 2f 2f      };..    ////
181a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
181b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
181c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
181d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
181e0 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 2f 2f 09  ///////..    //.
181f0 53 54 41 54 49 43 0a 09 20 20 20 20 2f 2f 2f 2f  STATIC..    ////
18200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18240 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 2f 2a 2a  ///////..    /**
18250 0a 09 09 20 2a 20 20 47 65 6e 65 72 61 74 65 73  ... *  Generates
18260 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70   a constant outp
18270 75 74 20 6f 66 20 31 2e 0a 09 09 20 2a 20 20 40  ut of 1.... *  @
18280 73 74 61 74 69 63 0a 09 09 20 2a 20 20 40 70 72  static... *  @pr
18290 69 76 61 74 65 0a 09 09 20 2a 20 20 40 63 6f 6e  ivate... *  @con
182a0 73 74 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b  st... *  @type {
182b0 41 75 64 69 6f 42 75 66 66 65 72 53 6f 75 72 63  AudioBufferSourc
182c0 65 4e 6f 64 65 7d 0a 09 09 20 2a 2f 0a 09 20 20  eNode}... */..  
182d0 20 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 2e 5f 63    Tone.Signal._c
182e0 6f 6e 73 74 61 6e 74 20 3d 20 6e 75 6c 6c 3b 0a  onstant = null;.
182f0 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 69  .    /**... *  i
18300 6e 69 74 69 61 6c 69 7a 65 72 20 66 75 6e 63 74  nitializer funct
18310 69 6f 6e 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  ion... */..    T
18320 6f 6e 65 2e 5f 69 6e 69 74 41 75 64 69 6f 43 6f  one._initAudioCo
18330 6e 74 65 78 74 28 66 75 6e 63 74 69 6f 6e 20 28  ntext(function (
18340 61 75 64 69 6f 43 6f 6e 74 65 78 74 29 20 7b 0a  audioContext) {.
18350 09 20 20 20 20 20 20 20 20 76 61 72 20 62 75 66  .        var buf
18360 66 65 72 20 3d 20 61 75 64 69 6f 43 6f 6e 74 65  fer = audioConte
18370 78 74 2e 63 72 65 61 74 65 42 75 66 66 65 72 28  xt.createBuffer(
18380 31 2c 20 31 32 38 2c 20 61 75 64 69 6f 43 6f 6e  1, 128, audioCon
18390 74 65 78 74 2e 73 61 6d 70 6c 65 52 61 74 65 29  text.sampleRate)
183a0 3b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 61  ;..        var a
183b0 72 72 20 3d 20 62 75 66 66 65 72 2e 67 65 74 43  rr = buffer.getC
183c0 68 61 6e 6e 65 6c 44 61 74 61 28 30 29 3b 0a 09  hannelData(0);..
183d0 20 20 20 20 20 20 20 20 66 6f 72 20 28 76 61 72          for (var
183e0 20 69 20 3d 20 30 3b 20 69 20 3c 20 61 72 72 2e   i = 0; i < arr.
183f0 6c 65 6e 67 74 68 3b 20 69 2b 2b 29 20 7b 0a 09  length; i++) {..
18400 20 20 20 20 20 20 20 20 20 20 20 20 61 72 72 5b              arr[
18410 69 5d 20 3d 20 31 3b 0a 09 20 20 20 20 20 20 20  i] = 1;..       
18420 20 7d 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65   }..        Tone
18430 2e 53 69 67 6e 61 6c 2e 5f 63 6f 6e 73 74 61 6e  .Signal._constan
18440 74 20 3d 20 61 75 64 69 6f 43 6f 6e 74 65 78 74  t = audioContext
18450 2e 63 72 65 61 74 65 42 75 66 66 65 72 53 6f 75  .createBufferSou
18460 72 63 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20  rce();..        
18470 54 6f 6e 65 2e 53 69 67 6e 61 6c 2e 5f 63 6f 6e  Tone.Signal._con
18480 73 74 61 6e 74 2e 63 68 61 6e 6e 65 6c 43 6f 75  stant.channelCou
18490 6e 74 20 3d 20 31 3b 0a 09 20 20 20 20 20 20 20  nt = 1;..       
184a0 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 2e 5f 63 6f   Tone.Signal._co
184b0 6e 73 74 61 6e 74 2e 63 68 61 6e 6e 65 6c 43 6f  nstant.channelCo
184c0 75 6e 74 4d 6f 64 65 20 3d 20 27 65 78 70 6c 69  untMode = 'expli
184d0 63 69 74 27 3b 0a 09 20 20 20 20 20 20 20 20 54  cit';..        T
184e0 6f 6e 65 2e 53 69 67 6e 61 6c 2e 5f 63 6f 6e 73  one.Signal._cons
184f0 74 61 6e 74 2e 62 75 66 66 65 72 20 3d 20 62 75  tant.buffer = bu
18500 66 66 65 72 3b 0a 09 20 20 20 20 20 20 20 20 54  ffer;..        T
18510 6f 6e 65 2e 53 69 67 6e 61 6c 2e 5f 63 6f 6e 73  one.Signal._cons
18520 74 61 6e 74 2e 6c 6f 6f 70 20 3d 20 74 72 75 65  tant.loop = true
18530 3b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e  ;..        Tone.
18540 53 69 67 6e 61 6c 2e 5f 63 6f 6e 73 74 61 6e 74  Signal._constant
18550 2e 73 74 61 72 74 28 30 29 3b 0a 09 20 20 20 20  .start(0);..    
18560 20 20 20 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 2e      Tone.Signal.
18570 5f 63 6f 6e 73 74 61 6e 74 2e 6e 6f 47 43 28 29  _constant.noGC()
18580 3b 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20  ;..    });..    
18590 72 65 74 75 72 6e 20 54 6f 6e 65 2e 53 69 67 6e  return Tone.Sign
185a0 61 6c 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65  al;..});..Module
185b0 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29  (function (Tone)
185c0 20 7b 0a 09 20 20 20 20 0a 09 20 20 20 20 2f 2a   {..    ..    /*
185d0 2a 0a 09 09 20 2a 20 20 40 63 6c 61 73 73 20 41  *... *  @class A
185e0 20 54 69 6d 65 6c 69 6e 65 20 63 6c 61 73 73 20   Timeline class 
185f0 66 6f 72 20 73 63 68 65 64 75 6c 69 6e 67 20 61  for scheduling a
18600 6e 64 20 6d 61 69 6e 74 61 69 6e 69 6e 67 20 73  nd maintaining s
18610 74 61 74 65 0a 09 09 20 2a 20 20 20 20 20 20 20  tate... *       
18620 20 20 61 6c 6f 6e 67 20 61 20 74 69 6d 65 6c 69    along a timeli
18630 6e 65 2e 20 41 6c 6c 20 65 76 65 6e 74 73 20 6d  ne. All events m
18640 75 73 74 20 68 61 76 65 20 61 20 22 74 69 6d 65  ust have a "time
18650 22 20 70 72 6f 70 65 72 74 79 2e 20 0a 09 09 20  " property. ... 
18660 2a 20 20 20 20 20 20 20 20 20 49 6e 74 65 72 6e  *         Intern
18670 61 6c 6c 79 2c 20 65 76 65 6e 74 73 20 61 72 65  ally, events are
18680 20 73 74 6f 72 65 64 20 69 6e 20 74 69 6d 65 20   stored in time 
18690 6f 72 64 65 72 20 66 6f 72 20 66 61 73 74 20 0a  order for fast .
186a0 09 09 20 2a 20 20 20 20 20 20 20 20 20 72 65 74  .. *         ret
186b0 72 69 65 76 61 6c 2e 0a 09 09 20 2a 20 20 40 65  rieval.... *  @e
186c0 78 74 65 6e 64 73 20 7b 54 6f 6e 65 7d 0a 09 09  xtends {Tone}...
186d0 20 2a 20 20 40 70 61 72 61 6d 20 7b 50 6f 73 69   *  @param {Posi
186e0 74 69 76 65 7d 20 5b 6d 65 6d 6f 72 79 3d 49 6e  tive} [memory=In
186f0 66 69 6e 69 74 79 5d 20 54 68 65 20 6e 75 6d 62  finity] The numb
18700 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73 20 65  er of previous e
18710 76 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 72  vents that are r
18720 65 74 61 69 6e 65 64 2e 0a 09 09 20 2a 2f 0a 09  etained.... */..
18730 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e      Tone.Timelin
18740 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  e = function () 
18750 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 6f  {..        var o
18760 70 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e 6f 70  ptions = this.op
18770 74 69 6f 6e 73 4f 62 6a 65 63 74 28 61 72 67 75  tionsObject(argu
18780 6d 65 6e 74 73 2c 20 5b 27 6d 65 6d 6f 72 79 27  ments, ['memory'
18790 5d 2c 20 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65  ], Tone.Timeline
187a0 2e 64 65 66 61 75 6c 74 73 29 3b 0a 09 20 20 20  .defaults);..   
187b0 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
187c0 54 68 65 20 61 72 72 61 79 20 6f 66 20 73 63 68  The array of sch
187d0 65 64 75 6c 65 64 20 74 69 6d 65 6c 69 6e 65 20  eduled timeline 
187e0 65 76 65 6e 74 73 0a 09 09 09 20 2a 20 20 40 74  events.... *  @t
187f0 79 70 65 20 20 7b 41 72 72 61 79 7d 0a 09 09 09  ype  {Array}....
18800 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
18810 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
18820 73 2e 5f 74 69 6d 65 6c 69 6e 65 20 3d 20 5b 5d  s._timeline = []
18830 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
18840 09 09 20 2a 20 20 41 6e 20 61 72 72 61 79 20 6f  .. *  An array o
18850 66 20 69 74 65 6d 73 20 74 6f 20 72 65 6d 6f 76  f items to remov
18860 65 20 66 72 6f 6d 20 74 68 65 20 6c 69 73 74 2e  e from the list.
18870 20 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b   .... *  @type {
18880 41 72 72 61 79 7d 0a 09 09 09 20 2a 20 20 40 70  Array}.... *  @p
18890 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20  rivate.... */.. 
188a0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 74 6f 52         this._toR
188b0 65 6d 6f 76 65 20 3d 20 5b 5d 3b 0a 09 20 20 20  emove = [];..   
188c0 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
188d0 46 6c 61 67 20 69 66 20 74 68 65 20 74 69 65 6c  Flag if the tiel
188e0 69 6e 65 20 69 73 20 6d 69 64 20 69 74 65 72 61  ine is mid itera
188f0 74 69 6f 6e 0a 09 09 09 20 2a 20 20 40 70 72 69  tion.... *  @pri
18900 76 61 74 65 0a 09 09 09 20 2a 20 20 40 74 79 70  vate.... *  @typ
18910 65 20 7b 42 6f 6f 6c 65 61 6e 7d 0a 09 09 09 20  e {Boolean}.... 
18920 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
18930 2e 5f 69 74 65 72 61 74 69 6e 67 20 3d 20 66 61  ._iterating = fa
18940 6c 73 65 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a  lse;..        /*
18950 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 6d 65 6d  *.... *  The mem
18960 6f 72 79 20 6f 66 20 74 68 65 20 74 69 6d 65 6c  ory of the timel
18970 69 6e 65 2c 20 69 2e 65 2e 0a 09 09 09 20 2a 20  ine, i.e..... * 
18980 20 68 6f 77 20 6d 61 6e 79 20 65 76 65 6e 74 73   how many events
18990 20 69 6e 20 74 68 65 20 70 61 73 74 20 69 74 20   in the past it 
189a0 77 69 6c 6c 20 72 65 74 61 69 6e 0a 09 09 09 20  will retain.... 
189b0 2a 20 20 40 74 79 70 65 20 7b 50 6f 73 69 74 69  *  @type {Positi
189c0 76 65 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  ve}.... */..    
189d0 20 20 20 20 74 68 69 73 2e 6d 65 6d 6f 72 79 20      this.memory 
189e0 3d 20 6f 70 74 69 6f 6e 73 2e 6d 65 6d 6f 72 79  = options.memory
189f0 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54  ;..    };..    T
18a00 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e  one.extend(Tone.
18a10 54 69 6d 65 6c 69 6e 65 29 3b 0a 09 20 20 20 20  Timeline);..    
18a20 2f 2a 2a 0a 09 09 20 2a 20 20 74 68 65 20 64 65  /**... *  the de
18a30 66 61 75 6c 74 20 70 61 72 61 6d 65 74 65 72 73  fault parameters
18a40 0a 09 09 20 2a 20 20 40 73 74 61 74 69 63 0a 09  ... *  @static..
18a50 09 20 2a 20 20 40 63 6f 6e 73 74 0a 09 09 20 2a  . *  @const... *
18a60 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65  /..    Tone.Time
18a70 6c 69 6e 65 2e 64 65 66 61 75 6c 74 73 20 3d 20  line.defaults = 
18a80 7b 20 27 6d 65 6d 6f 72 79 27 3a 20 49 6e 66 69  { 'memory': Infi
18a90 6e 69 74 79 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  nity };..    /**
18aa0 0a 09 09 20 2a 20 20 54 68 65 20 6e 75 6d 62 65  ... *  The numbe
18ab0 72 20 6f 66 20 69 74 65 6d 73 20 69 6e 20 74 68  r of items in th
18ac0 65 20 74 69 6d 65 6c 69 6e 65 2e 0a 09 09 20 2a  e timeline.... *
18ad0 20 20 40 74 79 70 65 20 7b 4e 75 6d 62 65 72 7d    @type {Number}
18ae0 0a 09 09 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66  ... *  @memberOf
18af0 20 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 23 0a   Tone.Timeline#.
18b00 09 09 20 2a 20 20 40 6e 61 6d 65 20 6c 65 6e 67  .. *  @name leng
18b10 74 68 0a 09 09 20 2a 20 20 40 72 65 61 64 4f 6e  th... *  @readOn
18b20 6c 79 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62  ly... */..    Ob
18b30 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65  ject.definePrope
18b40 72 74 79 28 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e  rty(Tone.Timelin
18b50 65 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 6c 65  e.prototype, 'le
18b60 6e 67 74 68 27 2c 20 7b 0a 09 20 20 20 20 20 20  ngth', {..      
18b70 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    get: function 
18b80 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  () {..          
18b90 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 74    return this._t
18ba0 69 6d 65 6c 69 6e 65 2e 6c 65 6e 67 74 68 3b 0a  imeline.length;.
18bb0 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
18bc0 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  });..    /**... 
18bd0 2a 20 20 49 6e 73 65 72 74 20 61 6e 20 65 76 65  *  Insert an eve
18be0 6e 74 20 6f 62 6a 65 63 74 20 6f 6e 74 6f 20 74  nt object onto t
18bf0 68 65 20 74 69 6d 65 6c 69 6e 65 2e 20 45 76 65  he timeline. Eve
18c00 6e 74 73 20 6d 75 73 74 20 68 61 76 65 20 61 20  nts must have a 
18c10 22 74 69 6d 65 22 20 61 74 74 72 69 62 75 74 65  "time" attribute
18c20 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20  .... *  @param  
18c30 7b 4f 62 6a 65 63 74 7d 20 20 65 76 65 6e 74 20  {Object}  event 
18c40 20 54 68 65 20 65 76 65 6e 74 20 6f 62 6a 65 63   The event objec
18c50 74 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f  t to insert into
18c60 20 74 68 65 20 0a 09 09 20 2a 20 20 20 20 20 20   the ... *      
18c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c80 20 20 20 20 20 74 69 6d 65 6c 69 6e 65 2e 20 0a       timeline. .
18c90 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b  .. *  @returns {
18ca0 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 7d 20 74  Tone.Timeline} t
18cb0 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  his... */..    T
18cc0 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 2e 70 72 6f  one.Timeline.pro
18cd0 74 6f 74 79 70 65 2e 61 64 64 20 3d 20 66 75 6e  totype.add = fun
18ce0 63 74 69 6f 6e 20 28 65 76 65 6e 74 29 20 7b 0a  ction (event) {.
18cf0 09 20 20 20 20 20 20 20 20 2f 2f 74 68 65 20 65  .        //the e
18d00 76 65 6e 74 20 6e 65 65 64 73 20 74 6f 20 68 61  vent needs to ha
18d10 76 65 20 61 20 74 69 6d 65 20 61 74 74 72 69 62  ve a time attrib
18d20 75 74 65 0a 09 20 20 20 20 20 20 20 20 69 66 20  ute..        if 
18d30 28 74 68 69 73 2e 69 73 55 6e 64 65 66 28 65 76  (this.isUndef(ev
18d40 65 6e 74 2e 74 69 6d 65 29 29 20 7b 0a 09 20 20  ent.time)) {..  
18d50 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
18d60 6e 65 77 20 45 72 72 6f 72 28 27 54 6f 6e 65 2e  new Error('Tone.
18d70 54 69 6d 65 6c 69 6e 65 3a 20 65 76 65 6e 74 73  Timeline: events
18d80 20 6d 75 73 74 20 68 61 76 65 20 61 20 74 69 6d   must have a tim
18d90 65 20 61 74 74 72 69 62 75 74 65 27 29 3b 0a 09  e attribute');..
18da0 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
18db0 20 20 20 69 66 20 28 74 68 69 73 2e 5f 74 69 6d     if (this._tim
18dc0 65 6c 69 6e 65 2e 6c 65 6e 67 74 68 29 20 7b 0a  eline.length) {.
18dd0 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72  .            var
18de0 20 69 6e 64 65 78 20 3d 20 74 68 69 73 2e 5f 73   index = this._s
18df0 65 61 72 63 68 28 65 76 65 6e 74 2e 74 69 6d 65  earch(event.time
18e00 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
18e10 74 68 69 73 2e 5f 74 69 6d 65 6c 69 6e 65 2e 73  this._timeline.s
18e20 70 6c 69 63 65 28 69 6e 64 65 78 20 2b 20 31 2c  plice(index + 1,
18e30 20 30 2c 20 65 76 65 6e 74 29 3b 0a 09 20 20 20   0, event);..   
18e40 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20       } else {.. 
18e50 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
18e60 5f 74 69 6d 65 6c 69 6e 65 2e 70 75 73 68 28 65  _timeline.push(e
18e70 76 65 6e 74 29 3b 0a 09 20 20 20 20 20 20 20 20  vent);..        
18e80 7d 0a 09 20 20 20 20 20 20 20 20 2f 2f 69 66 20  }..        //if 
18e90 74 68 65 20 6c 65 6e 67 74 68 20 69 73 20 6d 6f  the length is mo
18ea0 72 65 20 74 68 61 6e 20 74 68 65 20 6d 65 6d 6f  re than the memo
18eb0 72 79 2c 20 72 65 6d 6f 76 65 20 74 68 65 20 70  ry, remove the p
18ec0 72 65 76 69 6f 75 73 20 6f 6e 65 73 0a 09 20 20  revious ones..  
18ed0 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 6c        if (this.l
18ee0 65 6e 67 74 68 20 3e 20 74 68 69 73 2e 6d 65 6d  ength > this.mem
18ef0 6f 72 79 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ory) {..        
18f00 20 20 20 20 76 61 72 20 64 69 66 66 20 3d 20 74      var diff = t
18f10 68 69 73 2e 6c 65 6e 67 74 68 20 2d 20 74 68 69  his.length - thi
18f20 73 2e 6d 65 6d 6f 72 79 3b 0a 09 20 20 20 20 20  s.memory;..     
18f30 20 20 20 20 20 20 20 74 68 69 73 2e 5f 74 69 6d         this._tim
18f40 65 6c 69 6e 65 2e 73 70 6c 69 63 65 28 30 2c 20  eline.splice(0, 
18f50 64 69 66 66 29 3b 0a 09 20 20 20 20 20 20 20 20  diff);..        
18f60 7d 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  }..        retur
18f70 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a  n this;..    };.
18f80 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 52  .    /**... *  R
18f90 65 6d 6f 76 65 20 61 6e 20 65 76 65 6e 74 20 66  emove an event f
18fa0 72 6f 6d 20 74 68 65 20 74 69 6d 65 6c 69 6e 65  rom the timeline
18fb0 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20  .... *  @param  
18fc0 7b 4f 62 6a 65 63 74 7d 20 20 65 76 65 6e 74 20  {Object}  event 
18fd0 20 54 68 65 20 65 76 65 6e 74 20 6f 62 6a 65 63   The event objec
18fe0 74 20 74 6f 20 72 65 6d 6f 76 65 20 66 72 6f 6d  t to remove from
18ff0 20 74 68 65 20 6c 69 73 74 2e 0a 09 09 20 2a 20   the list.... * 
19000 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e   @returns {Tone.
19010 54 69 6d 65 6c 69 6e 65 7d 20 74 68 69 73 0a 09  Timeline} this..
19020 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54  . */..    Tone.T
19030 69 6d 65 6c 69 6e 65 2e 70 72 6f 74 6f 74 79 70  imeline.prototyp
19040 65 2e 72 65 6d 6f 76 65 20 3d 20 66 75 6e 63 74  e.remove = funct
19050 69 6f 6e 20 28 65 76 65 6e 74 29 20 7b 0a 09 20  ion (event) {.. 
19060 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e         if (this.
19070 5f 69 74 65 72 61 74 69 6e 67 29 20 7b 0a 09 20  _iterating) {.. 
19080 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
19090 5f 74 6f 52 65 6d 6f 76 65 2e 70 75 73 68 28 65  _toRemove.push(e
190a0 76 65 6e 74 29 3b 0a 09 20 20 20 20 20 20 20 20  vent);..        
190b0 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20  } else {..      
190c0 20 20 20 20 20 20 76 61 72 20 69 6e 64 65 78 20        var index 
190d0 3d 20 74 68 69 73 2e 5f 74 69 6d 65 6c 69 6e 65  = this._timeline
190e0 2e 69 6e 64 65 78 4f 66 28 65 76 65 6e 74 29 3b  .indexOf(event);
190f0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
19100 20 28 69 6e 64 65 78 20 21 3d 3d 20 2d 31 29 20   (index !== -1) 
19110 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
19120 20 20 20 74 68 69 73 2e 5f 74 69 6d 65 6c 69 6e     this._timelin
19130 65 2e 73 70 6c 69 63 65 28 69 6e 64 65 78 2c 20  e.splice(index, 
19140 31 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  1);..           
19150 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20   }..        }.. 
19160 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
19170 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  is;..    };..   
19180 20 2f 2a 2a 0a 09 09 20 2a 20 20 47 65 74 20 74   /**... *  Get t
19190 68 65 20 6e 65 61 72 65 73 74 20 65 76 65 6e 74  he nearest event
191a0 20 77 68 6f 73 65 20 74 69 6d 65 20 69 73 20 6c   whose time is l
191b0 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
191c0 6c 20 74 6f 20 74 68 65 20 67 69 76 65 6e 20 74  l to the given t
191d0 69 6d 65 2e 0a 09 09 20 2a 20 20 40 70 61 72 61  ime.... *  @para
191e0 6d 20 20 7b 4e 75 6d 62 65 72 7d 20 20 74 69 6d  m  {Number}  tim
191f0 65 20 20 54 68 65 20 74 69 6d 65 20 74 6f 20 71  e  The time to q
19200 75 65 72 79 2e 0a 09 09 20 2a 20 20 40 72 65 74  uery.... *  @ret
19210 75 72 6e 73 20 7b 4f 62 6a 65 63 74 7d 20 54 68  urns {Object} Th
19220 65 20 65 76 65 6e 74 20 6f 62 6a 65 63 74 20 73  e event object s
19230 65 74 20 61 66 74 65 72 20 74 68 61 74 20 74 69  et after that ti
19240 6d 65 2e 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  me.... */..    T
19250 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 2e 70 72 6f  one.Timeline.pro
19260 74 6f 74 79 70 65 2e 67 65 74 20 3d 20 66 75 6e  totype.get = fun
19270 63 74 69 6f 6e 20 28 74 69 6d 65 29 20 7b 0a 09  ction (time) {..
19280 20 20 20 20 20 20 20 20 76 61 72 20 69 6e 64 65          var inde
19290 78 20 3d 20 74 68 69 73 2e 5f 73 65 61 72 63 68  x = this._search
192a0 28 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20  (time);..       
192b0 20 69 66 20 28 69 6e 64 65 78 20 21 3d 3d 20 2d   if (index !== -
192c0 31 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  1) {..          
192d0 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 74    return this._t
192e0 69 6d 65 6c 69 6e 65 5b 69 6e 64 65 78 5d 3b 0a  imeline[index];.
192f0 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else 
19300 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
19310 65 74 75 72 6e 20 6e 75 6c 6c 3b 0a 09 20 20 20  eturn null;..   
19320 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a 09       }..    };..
19330 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 52 65      /**... *  Re
19340 74 75 72 6e 20 74 68 65 20 66 69 72 73 74 20 65  turn the first e
19350 76 65 6e 74 20 69 6e 20 74 68 65 20 74 69 6d 65  vent in the time
19360 6c 69 6e 65 20 77 69 74 68 6f 75 74 20 72 65 6d  line without rem
19370 6f 76 69 6e 67 20 69 74 0a 09 09 20 2a 20 20 40  oving it... *  @
19380 72 65 74 75 72 6e 73 20 7b 4f 62 6a 65 63 74 7d  returns {Object}
19390 20 54 68 65 20 66 69 72 73 74 20 65 76 65 6e 74   The first event
193a0 20 6f 62 6a 65 63 74 0a 09 09 20 2a 2f 0a 09 20   object... */.. 
193b0 20 20 20 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65     Tone.Timeline
193c0 2e 70 72 6f 74 6f 74 79 70 65 2e 70 65 65 6b 20  .prototype.peek 
193d0 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  = function () {.
193e0 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
193f0 74 68 69 73 2e 5f 74 69 6d 65 6c 69 6e 65 5b 30  this._timeline[0
19400 5d 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  ];..    };..    
19410 2f 2a 2a 0a 09 09 20 2a 20 20 52 65 74 75 72 6e  /**... *  Return
19420 20 74 68 65 20 66 69 72 73 74 20 65 76 65 6e 74   the first event
19430 20 69 6e 20 74 68 65 20 74 69 6d 65 6c 69 6e 65   in the timeline
19440 20 61 6e 64 20 72 65 6d 6f 76 65 20 69 74 0a 09   and remove it..
19450 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 4f  . *  @returns {O
19460 62 6a 65 63 74 7d 20 54 68 65 20 66 69 72 73 74  bject} The first
19470 20 65 76 65 6e 74 20 6f 62 6a 65 63 74 0a 09 09   event object...
19480 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69   */..    Tone.Ti
19490 6d 65 6c 69 6e 65 2e 70 72 6f 74 6f 74 79 70 65  meline.prototype
194a0 2e 73 68 69 66 74 20 3d 20 66 75 6e 63 74 69 6f  .shift = functio
194b0 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
194c0 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 74 69 6d  return this._tim
194d0 65 6c 69 6e 65 2e 73 68 69 66 74 28 29 3b 0a 09  eline.shift();..
194e0 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
194f0 09 09 20 2a 20 20 47 65 74 20 74 68 65 20 65 76  .. *  Get the ev
19500 65 6e 74 20 77 68 69 63 68 20 69 73 20 73 63 68  ent which is sch
19510 65 64 75 6c 65 64 20 61 66 74 65 72 20 74 68 65  eduled after the
19520 20 67 69 76 65 6e 20 74 69 6d 65 2e 0a 09 09 20   given time.... 
19530 2a 20 20 40 70 61 72 61 6d 20 20 7b 4e 75 6d 62  *  @param  {Numb
19540 65 72 7d 20 20 74 69 6d 65 20 20 54 68 65 20 74  er}  time  The t
19550 69 6d 65 20 74 6f 20 71 75 65 72 79 2e 0a 09 09  ime to query....
19560 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 4f 62   *  @returns {Ob
19570 6a 65 63 74 7d 20 54 68 65 20 65 76 65 6e 74 20  ject} The event 
19580 6f 62 6a 65 63 74 20 61 66 74 65 72 20 74 68 65  object after the
19590 20 67 69 76 65 6e 20 74 69 6d 65 0a 09 09 20 2a   given time... *
195a0 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65  /..    Tone.Time
195b0 6c 69 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e 67  line.prototype.g
195c0 65 74 41 66 74 65 72 20 3d 20 66 75 6e 63 74 69  etAfter = functi
195d0 6f 6e 20 28 74 69 6d 65 29 20 7b 0a 09 20 20 20  on (time) {..   
195e0 20 20 20 20 20 76 61 72 20 69 6e 64 65 78 20 3d       var index =
195f0 20 74 68 69 73 2e 5f 73 65 61 72 63 68 28 74 69   this._search(ti
19600 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 69 66  me);..        if
19610 20 28 69 6e 64 65 78 20 2b 20 31 20 3c 20 74 68   (index + 1 < th
19620 69 73 2e 5f 74 69 6d 65 6c 69 6e 65 2e 6c 65 6e  is._timeline.len
19630 67 74 68 29 20 7b 0a 09 20 20 20 20 20 20 20 20  gth) {..        
19640 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
19650 5f 74 69 6d 65 6c 69 6e 65 5b 69 6e 64 65 78 20  _timeline[index 
19660 2b 20 31 5d 3b 0a 09 20 20 20 20 20 20 20 20 7d  + 1];..        }
19670 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20   else {..       
19680 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
19690 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20  ;..        }..  
196a0 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    };..    /**...
196b0 20 2a 20 20 47 65 74 20 74 68 65 20 65 76 65 6e   *  Get the even
196c0 74 20 62 65 66 6f 72 65 20 74 68 65 20 65 76 65  t before the eve
196d0 6e 74 20 61 74 20 74 68 65 20 67 69 76 65 6e 20  nt at the given 
196e0 74 69 6d 65 2e 0a 09 09 20 2a 20 20 40 70 61 72  time.... *  @par
196f0 61 6d 20 20 7b 4e 75 6d 62 65 72 7d 20 20 74 69  am  {Number}  ti
19700 6d 65 20 20 54 68 65 20 74 69 6d 65 20 74 6f 20  me  The time to 
19710 71 75 65 72 79 2e 0a 09 09 20 2a 20 20 40 72 65  query.... *  @re
19720 74 75 72 6e 73 20 7b 4f 62 6a 65 63 74 7d 20 54  turns {Object} T
19730 68 65 20 65 76 65 6e 74 20 6f 62 6a 65 63 74 20  he event object 
19740 62 65 66 6f 72 65 20 74 68 65 20 67 69 76 65 6e  before the given
19750 20 74 69 6d 65 0a 09 09 20 2a 2f 0a 09 20 20 20   time... */..   
19760 20 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 2e 70   Tone.Timeline.p
19770 72 6f 74 6f 74 79 70 65 2e 67 65 74 42 65 66 6f  rototype.getBefo
19780 72 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74  re = function (t
19790 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ime) {..        
197a0 76 61 72 20 6c 65 6e 20 3d 20 74 68 69 73 2e 5f  var len = this._
197b0 74 69 6d 65 6c 69 6e 65 2e 6c 65 6e 67 74 68 3b  timeline.length;
197c0 0a 09 20 20 20 20 20 20 20 20 2f 2f 69 66 20 69  ..        //if i
197d0 74 27 73 20 61 66 74 65 72 20 74 68 65 20 6c 61  t's after the la
197e0 73 74 20 69 74 65 6d 2c 20 72 65 74 75 72 6e 20  st item, return 
197f0 74 68 65 20 6c 61 73 74 20 69 74 65 6d 0a 09 20  the last item.. 
19800 20 20 20 20 20 20 20 69 66 20 28 6c 65 6e 20 3e         if (len >
19810 20 30 20 26 26 20 74 68 69 73 2e 5f 74 69 6d 65   0 && this._time
19820 6c 69 6e 65 5b 6c 65 6e 20 2d 20 31 5d 2e 74 69  line[len - 1].ti
19830 6d 65 20 3c 20 74 69 6d 65 29 20 7b 0a 09 20 20  me < time) {..  
19840 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
19850 20 74 68 69 73 2e 5f 74 69 6d 65 6c 69 6e 65 5b   this._timeline[
19860 6c 65 6e 20 2d 20 31 5d 3b 0a 09 20 20 20 20 20  len - 1];..     
19870 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 76 61     }..        va
19880 72 20 69 6e 64 65 78 20 3d 20 74 68 69 73 2e 5f  r index = this._
19890 73 65 61 72 63 68 28 74 69 6d 65 29 3b 0a 09 20  search(time);.. 
198a0 20 20 20 20 20 20 20 69 66 20 28 69 6e 64 65 78         if (index
198b0 20 2d 20 31 20 3e 3d 20 30 29 20 7b 0a 09 20 20   - 1 >= 0) {..  
198c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
198d0 20 74 68 69 73 2e 5f 74 69 6d 65 6c 69 6e 65 5b   this._timeline[
198e0 69 6e 64 65 78 20 2d 20 31 5d 3b 0a 09 20 20 20  index - 1];..   
198f0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20       } else {.. 
19900 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
19910 6e 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  n null;..       
19920 20 7d 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20   }..    };..    
19930 2f 2a 2a 0a 09 09 20 2a 20 20 43 61 6e 63 65 6c  /**... *  Cancel
19940 20 65 76 65 6e 74 73 20 61 66 74 65 72 20 74 68   events after th
19950 65 20 67 69 76 65 6e 20 74 69 6d 65 0a 09 09 20  e given time... 
19960 2a 20 20 40 70 61 72 61 6d 20 20 7b 4e 75 6d 62  *  @param  {Numb
19970 65 72 7d 20 20 74 69 6d 65 20 20 54 68 65 20 74  er}  time  The t
19980 69 6d 65 20 74 6f 20 71 75 65 72 79 2e 0a 09 09  ime to query....
19990 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f   *  @returns {To
199a0 6e 65 2e 54 69 6d 65 6c 69 6e 65 7d 20 74 68 69  ne.Timeline} thi
199b0 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  s... */..    Ton
199c0 65 2e 54 69 6d 65 6c 69 6e 65 2e 70 72 6f 74 6f  e.Timeline.proto
199d0 74 79 70 65 2e 63 61 6e 63 65 6c 20 3d 20 66 75  type.cancel = fu
199e0 6e 63 74 69 6f 6e 20 28 61 66 74 65 72 29 20 7b  nction (after) {
199f0 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 74 68  ..        if (th
19a00 69 73 2e 5f 74 69 6d 65 6c 69 6e 65 2e 6c 65 6e  is._timeline.len
19a10 67 74 68 20 3e 20 31 29 20 7b 0a 09 20 20 20 20  gth > 1) {..    
19a20 20 20 20 20 20 20 20 20 76 61 72 20 69 6e 64 65          var inde
19a30 78 20 3d 20 74 68 69 73 2e 5f 73 65 61 72 63 68  x = this._search
19a40 28 61 66 74 65 72 29 3b 0a 09 20 20 20 20 20 20  (after);..      
19a50 20 20 20 20 20 20 69 66 20 28 69 6e 64 65 78 20        if (index 
19a60 3e 3d 20 30 29 20 7b 0a 09 20 20 20 20 20 20 20  >= 0) {..       
19a70 20 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69           if (thi
19a80 73 2e 5f 74 69 6d 65 6c 69 6e 65 5b 69 6e 64 65  s._timeline[inde
19a90 78 5d 2e 74 69 6d 65 20 3d 3d 3d 20 61 66 74 65  x].time === afte
19aa0 72 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  r) {..          
19ab0 20 20 20 20 20 20 20 20 20 20 2f 2f 67 65 74 20            //get 
19ac0 74 68 65 20 66 69 72 73 74 20 69 74 65 6d 20 77  the first item w
19ad0 69 74 68 20 74 68 61 74 20 74 69 6d 65 0a 09 20  ith that time.. 
19ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19af0 20 20 20 66 6f 72 20 28 76 61 72 20 69 20 3d 20     for (var i = 
19b00 69 6e 64 65 78 3b 20 69 20 3e 3d 20 30 3b 20 69  index; i >= 0; i
19b10 2d 2d 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  --) {..         
19b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
19b30 66 20 28 74 68 69 73 2e 5f 74 69 6d 65 6c 69 6e  f (this._timelin
19b40 65 5b 69 5d 2e 74 69 6d 65 20 3d 3d 3d 20 61 66  e[i].time === af
19b50 74 65 72 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ter) {..        
19b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b70 20 20 20 20 69 6e 64 65 78 20 3d 20 69 3b 0a 09      index = i;..
19b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b90 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
19ba0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
19bc0 65 61 6b 3b 0a 09 20 20 20 20 20 20 20 20 20 20  eak;..          
19bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
19be0 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19bf0 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
19c00 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
19c10 2e 5f 74 69 6d 65 6c 69 6e 65 20 3d 20 74 68 69  ._timeline = thi
19c20 73 2e 5f 74 69 6d 65 6c 69 6e 65 2e 73 6c 69 63  s._timeline.slic
19c30 65 28 30 2c 20 69 6e 64 65 78 29 3b 0a 09 20 20  e(0, index);..  
19c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20                } 
19c50 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20  else {..        
19c60 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
19c70 2e 5f 74 69 6d 65 6c 69 6e 65 20 3d 20 74 68 69  ._timeline = thi
19c80 73 2e 5f 74 69 6d 65 6c 69 6e 65 2e 73 6c 69 63  s._timeline.slic
19c90 65 28 30 2c 20 69 6e 64 65 78 20 2b 20 31 29 3b  e(0, index + 1);
19ca0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19cb0 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20    }..           
19cc0 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20   } else {..     
19cd0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
19ce0 5f 74 69 6d 65 6c 69 6e 65 20 3d 20 5b 5d 3b 0a  _timeline = [];.
19cf0 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09  .            }..
19d00 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69          } else i
19d10 66 20 28 74 68 69 73 2e 5f 74 69 6d 65 6c 69 6e  f (this._timelin
19d20 65 2e 6c 65 6e 67 74 68 20 3d 3d 3d 20 31 29 20  e.length === 1) 
19d30 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
19d40 2f 74 68 65 20 66 69 72 73 74 20 69 74 65 6d 27  /the first item'
19d50 73 20 74 69 6d 65 0a 09 20 20 20 20 20 20 20 20  s time..        
19d60 20 20 20 20 69 66 20 28 74 68 69 73 2e 5f 74 69      if (this._ti
19d70 6d 65 6c 69 6e 65 5b 30 5d 2e 74 69 6d 65 20 3e  meline[0].time >
19d80 3d 20 61 66 74 65 72 29 20 7b 0a 09 20 20 20 20  = after) {..    
19d90 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
19da0 2e 5f 74 69 6d 65 6c 69 6e 65 20 3d 20 5b 5d 3b  ._timeline = [];
19db0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ..            }.
19dc0 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
19dd0 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b      return this;
19de0 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
19df0 2a 0a 09 09 20 2a 20 20 43 61 6e 63 65 6c 20 65  *... *  Cancel e
19e00 76 65 6e 74 73 20 62 65 66 6f 72 65 20 6f 72 20  vents before or 
19e10 65 71 75 61 6c 20 74 6f 20 74 68 65 20 67 69 76  equal to the giv
19e20 65 6e 20 74 69 6d 65 2e 0a 09 09 20 2a 20 20 40  en time.... *  @
19e30 70 61 72 61 6d 20 20 7b 4e 75 6d 62 65 72 7d 20  param  {Number} 
19e40 20 74 69 6d 65 20 20 54 68 65 20 74 69 6d 65 20   time  The time 
19e50 74 6f 20 63 61 6e 63 65 6c 20 62 65 66 6f 72 65  to cancel before
19e60 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73  .... *  @returns
19e70 20 7b 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 7d   {Tone.Timeline}
19e80 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20   this... */..   
19e90 20 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 2e 70   Tone.Timeline.p
19ea0 72 6f 74 6f 74 79 70 65 2e 63 61 6e 63 65 6c 42  rototype.cancelB
19eb0 65 66 6f 72 65 20 3d 20 66 75 6e 63 74 69 6f 6e  efore = function
19ec0 20 28 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20   (time) {..     
19ed0 20 20 20 69 66 20 28 74 68 69 73 2e 5f 74 69 6d     if (this._tim
19ee0 65 6c 69 6e 65 2e 6c 65 6e 67 74 68 29 20 7b 0a  eline.length) {.
19ef0 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72  .            var
19f00 20 69 6e 64 65 78 20 3d 20 74 68 69 73 2e 5f 73   index = this._s
19f10 65 61 72 63 68 28 74 69 6d 65 29 3b 0a 09 20 20  earch(time);..  
19f20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 6e            if (in
19f30 64 65 78 20 3e 3d 20 30 29 20 7b 0a 09 20 20 20  dex >= 0) {..   
19f40 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
19f50 73 2e 5f 74 69 6d 65 6c 69 6e 65 20 3d 20 74 68  s._timeline = th
19f60 69 73 2e 5f 74 69 6d 65 6c 69 6e 65 2e 73 6c 69  is._timeline.sli
19f70 63 65 28 69 6e 64 65 78 20 2b 20 31 29 3b 0a 09  ce(index + 1);..
19f80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20              }.. 
19f90 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
19fa0 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09    return this;..
19fb0 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
19fc0 09 09 20 2a 20 20 44 6f 65 73 20 61 20 62 69 6e  .. *  Does a bin
19fd0 61 72 79 20 73 65 72 61 63 68 20 6f 6e 20 74 68  ary serach on th
19fe0 65 20 74 69 6d 65 6c 69 6e 65 20 61 72 72 61 79  e timeline array
19ff0 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65   and returns the
1a000 20 0a 09 09 20 2a 20 20 6e 65 61 72 65 73 74 20   ... *  nearest 
1a010 65 76 65 6e 74 20 69 6e 64 65 78 20 77 68 6f 73  event index whos
1a020 65 20 74 69 6d 65 20 69 73 20 61 66 74 65 72 20  e time is after 
1a030 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1a040 67 69 76 65 6e 20 74 69 6d 65 2e 0a 09 09 20 2a  given time.... *
1a050 20 20 49 66 20 61 20 74 69 6d 65 20 69 73 20 73    If a time is s
1a060 65 61 72 63 68 65 64 20 62 65 66 6f 72 65 20 74  earched before t
1a070 68 65 20 66 69 72 73 74 20 69 6e 64 65 78 20 69  he first index i
1a080 6e 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 2c 20  n the timeline, 
1a090 2d 31 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a  -1 is returned..
1a0a0 09 09 20 2a 20 20 49 66 20 74 68 65 20 74 69 6d  .. *  If the tim
1a0b0 65 20 69 73 20 61 66 74 65 72 20 74 68 65 20 65  e is after the e
1a0c0 6e 64 2c 20 74 68 65 20 69 6e 64 65 78 20 6f 66  nd, the index of
1a0d0 20 74 68 65 20 6c 61 73 74 20 69 74 65 6d 20 69   the last item i
1a0e0 73 20 72 65 74 75 72 6e 65 64 2e 0a 09 09 20 2a  s returned.... *
1a0f0 20 20 40 70 61 72 61 6d 20 20 7b 4e 75 6d 62 65    @param  {Numbe
1a100 72 7d 20 20 74 69 6d 65 20 20 0a 09 09 20 2a 20  r}  time  ... * 
1a110 20 40 72 65 74 75 72 6e 20 20 7b 4e 75 6d 62 65   @return  {Numbe
1a120 72 7d 20 74 68 65 20 69 6e 64 65 78 20 69 6e 20  r} the index in 
1a130 74 68 65 20 74 69 6d 65 6c 69 6e 65 20 61 72 72  the timeline arr
1a140 61 79 20 0a 09 09 20 2a 20 20 40 70 72 69 76 61  ay ... *  @priva
1a150 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  te... */..    To
1a160 6e 65 2e 54 69 6d 65 6c 69 6e 65 2e 70 72 6f 74  ne.Timeline.prot
1a170 6f 74 79 70 65 2e 5f 73 65 61 72 63 68 20 3d 20  otype._search = 
1a180 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65 29 20  function (time) 
1a190 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 62  {..        var b
1a1a0 65 67 69 6e 6e 69 6e 67 20 3d 20 30 3b 0a 09 20  eginning = 0;.. 
1a1b0 20 20 20 20 20 20 20 76 61 72 20 6c 65 6e 20 3d         var len =
1a1c0 20 74 68 69 73 2e 5f 74 69 6d 65 6c 69 6e 65 2e   this._timeline.
1a1d0 6c 65 6e 67 74 68 3b 0a 09 20 20 20 20 20 20 20  length;..       
1a1e0 20 76 61 72 20 65 6e 64 20 3d 20 6c 65 6e 3b 0a   var end = len;.
1a1f0 09 20 20 20 20 20 20 20 20 69 66 20 28 6c 65 6e  .        if (len
1a200 20 3e 20 30 20 26 26 20 74 68 69 73 2e 5f 74 69   > 0 && this._ti
1a210 6d 65 6c 69 6e 65 5b 6c 65 6e 20 2d 20 31 5d 2e  meline[len - 1].
1a220 74 69 6d 65 20 3c 3d 20 74 69 6d 65 29 20 7b 0a  time <= time) {.
1a230 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
1a240 75 72 6e 20 6c 65 6e 20 2d 20 31 3b 0a 09 20 20  urn len - 1;..  
1a250 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
1a260 20 77 68 69 6c 65 20 28 62 65 67 69 6e 6e 69 6e   while (beginnin
1a270 67 20 3c 20 65 6e 64 29 20 7b 0a 09 20 20 20 20  g < end) {..    
1a280 20 20 20 20 20 20 20 20 2f 2f 20 63 61 6c 63 75          // calcu
1a290 6c 61 74 65 20 74 68 65 20 6d 69 64 70 6f 69 6e  late the midpoin
1a2a0 74 20 66 6f 72 20 72 6f 75 67 68 6c 79 20 65 71  t for roughly eq
1a2b0 75 61 6c 20 70 61 72 74 69 74 69 6f 6e 0a 09 20  ual partition.. 
1a2c0 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 6d             var m
1a2d0 69 64 50 6f 69 6e 74 20 3d 20 4d 61 74 68 2e 66  idPoint = Math.f
1a2e0 6c 6f 6f 72 28 62 65 67 69 6e 6e 69 6e 67 20 2b  loor(beginning +
1a2f0 20 28 65 6e 64 20 2d 20 62 65 67 69 6e 6e 69 6e   (end - beginnin
1a300 67 29 20 2f 20 32 29 3b 0a 09 20 20 20 20 20 20  g) / 2);..      
1a310 20 20 20 20 20 20 76 61 72 20 65 76 65 6e 74 20        var event 
1a320 3d 20 74 68 69 73 2e 5f 74 69 6d 65 6c 69 6e 65  = this._timeline
1a330 5b 6d 69 64 50 6f 69 6e 74 5d 3b 0a 09 20 20 20  [midPoint];..   
1a340 20 20 20 20 20 20 20 20 20 76 61 72 20 6e 65 78           var nex
1a350 74 45 76 65 6e 74 20 3d 20 74 68 69 73 2e 5f 74  tEvent = this._t
1a360 69 6d 65 6c 69 6e 65 5b 6d 69 64 50 6f 69 6e 74  imeline[midPoint
1a370 20 2b 20 31 5d 3b 0a 09 20 20 20 20 20 20 20 20   + 1];..        
1a380 20 20 20 20 69 66 20 28 65 76 65 6e 74 2e 74 69      if (event.ti
1a390 6d 65 20 3d 3d 3d 20 74 69 6d 65 29 20 7b 0a 09  me === time) {..
1a3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3b0 2f 2f 63 68 6f 6f 73 65 20 74 68 65 20 6c 61 73  //choose the las
1a3c0 74 20 6f 6e 65 20 74 68 61 74 20 68 61 73 20 74  t one that has t
1a3d0 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 09 20 20  he same time..  
1a3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
1a3f0 72 20 28 76 61 72 20 69 20 3d 20 6d 69 64 50 6f  r (var i = midPo
1a400 69 6e 74 3b 20 69 20 3c 20 74 68 69 73 2e 5f 74  int; i < this._t
1a410 69 6d 65 6c 69 6e 65 2e 6c 65 6e 67 74 68 3b 20  imeline.length; 
1a420 69 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20 20 20  i++) {..        
1a430 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20              var 
1a440 74 65 73 74 45 76 65 6e 74 20 3d 20 74 68 69 73  testEvent = this
1a450 2e 5f 74 69 6d 65 6c 69 6e 65 5b 69 5d 3b 0a 09  ._timeline[i];..
1a460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a470 20 20 20 20 69 66 20 28 74 65 73 74 45 76 65 6e      if (testEven
1a480 74 2e 74 69 6d 65 20 3d 3d 3d 20 74 69 6d 65 29  t.time === time)
1a490 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1a4a0 20 20 20 20 20 20 20 20 20 20 20 20 6d 69 64 50              midP
1a4b0 6f 69 6e 74 20 3d 20 69 3b 0a 09 20 20 20 20 20  oint = i;..     
1a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1a4d0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a4e0 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20    }..           
1a4f0 20 20 20 20 20 72 65 74 75 72 6e 20 6d 69 64 50       return midP
1a500 6f 69 6e 74 3b 0a 09 20 20 20 20 20 20 20 20 20  oint;..         
1a510 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 65 76     } else if (ev
1a520 65 6e 74 2e 74 69 6d 65 20 3c 20 74 69 6d 65 20  ent.time < time 
1a530 26 26 20 6e 65 78 74 45 76 65 6e 74 2e 74 69 6d  && nextEvent.tim
1a540 65 20 3e 20 74 69 6d 65 29 20 7b 0a 09 20 20 20  e > time) {..   
1a550 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1a560 75 72 6e 20 6d 69 64 50 6f 69 6e 74 3b 0a 09 20  urn midPoint;.. 
1a570 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
1a580 65 20 69 66 20 28 65 76 65 6e 74 2e 74 69 6d 65  e if (event.time
1a590 20 3e 20 74 69 6d 65 29 20 7b 0a 09 20 20 20 20   > time) {..    
1a5a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 73 65              //se
1a5b0 61 72 63 68 20 6c 6f 77 65 72 0a 09 20 20 20 20  arch lower..    
1a5c0 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 64 20              end 
1a5d0 3d 20 6d 69 64 50 6f 69 6e 74 3b 0a 09 20 20 20  = midPoint;..   
1a5e0 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else 
1a5f0 69 66 20 28 65 76 65 6e 74 2e 74 69 6d 65 20 3c  if (event.time <
1a600 20 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20   time) {..      
1a610 20 20 20 20 20 20 20 20 20 20 2f 2f 73 65 61 72            //sear
1a620 63 68 20 75 70 70 65 72 0a 09 20 20 20 20 20 20  ch upper..      
1a630 20 20 20 20 20 20 20 20 20 20 62 65 67 69 6e 6e            beginn
1a640 69 6e 67 20 3d 20 6d 69 64 50 6f 69 6e 74 20 2b  ing = midPoint +
1a650 20 31 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20   1;..           
1a660 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20   }..        }.. 
1a670 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31         return -1
1a680 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  ;..    };..    /
1a690 2a 2a 0a 09 09 20 2a 20 20 49 6e 74 65 72 6e 61  **... *  Interna
1a6a0 6c 20 69 74 65 72 61 74 6f 72 2e 20 41 70 70 6c  l iterator. Appl
1a6b0 69 65 73 20 65 78 74 72 61 20 73 61 66 65 74 79  ies extra safety
1a6c0 20 63 68 65 63 6b 73 20 66 6f 72 20 0a 09 09 20   checks for ... 
1a6d0 2a 20 20 72 65 6d 6f 76 69 6e 67 20 69 74 65 6d  *  removing item
1a6e0 73 20 66 72 6f 6d 20 74 68 65 20 61 72 72 61 79  s from the array
1a6f0 2e 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  . ... *  @param 
1a700 20 7b 46 75 6e 63 74 69 6f 6e 7d 20 20 63 61 6c   {Function}  cal
1a710 6c 62 61 63 6b 20 0a 09 09 20 2a 20 20 40 70 61  lback ... *  @pa
1a720 72 61 6d 20 20 7b 4e 75 6d 62 65 72 3d 7d 20 20  ram  {Number=}  
1a730 20 20 6c 6f 77 65 72 42 6f 75 6e 64 20 20 20 20    lowerBound    
1a740 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20   ... *  @param  
1a750 7b 4e 75 6d 62 65 72 3d 7d 20 20 20 20 75 70 70  {Number=}    upp
1a760 65 72 42 6f 75 6e 64 20 20 20 20 0a 09 09 20 2a  erBound    ... *
1a770 20 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f    @private... */
1a780 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65 6c  ..    Tone.Timel
1a790 69 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 69  ine.prototype._i
1a7a0 74 65 72 61 74 65 20 3d 20 66 75 6e 63 74 69 6f  terate = functio
1a7b0 6e 20 28 63 61 6c 6c 62 61 63 6b 2c 20 6c 6f 77  n (callback, low
1a7c0 65 72 42 6f 75 6e 64 2c 20 75 70 70 65 72 42 6f  erBound, upperBo
1a7d0 75 6e 64 29 20 7b 0a 09 20 20 20 20 20 20 20 20  und) {..        
1a7e0 74 68 69 73 2e 5f 69 74 65 72 61 74 69 6e 67 20  this._iterating 
1a7f0 3d 20 74 72 75 65 3b 0a 09 20 20 20 20 20 20 20  = true;..       
1a800 20 6c 6f 77 65 72 42 6f 75 6e 64 20 3d 20 74 68   lowerBound = th
1a810 69 73 2e 64 65 66 61 75 6c 74 41 72 67 28 6c 6f  is.defaultArg(lo
1a820 77 65 72 42 6f 75 6e 64 2c 20 30 29 3b 0a 09 20  werBound, 0);.. 
1a830 20 20 20 20 20 20 20 75 70 70 65 72 42 6f 75 6e         upperBoun
1a840 64 20 3d 20 74 68 69 73 2e 64 65 66 61 75 6c 74  d = this.default
1a850 41 72 67 28 75 70 70 65 72 42 6f 75 6e 64 2c 20  Arg(upperBound, 
1a860 74 68 69 73 2e 5f 74 69 6d 65 6c 69 6e 65 2e 6c  this._timeline.l
1a870 65 6e 67 74 68 20 2d 20 31 29 3b 0a 09 20 20 20  ength - 1);..   
1a880 20 20 20 20 20 66 6f 72 20 28 76 61 72 20 69 20       for (var i 
1a890 3d 20 6c 6f 77 65 72 42 6f 75 6e 64 3b 20 69 20  = lowerBound; i 
1a8a0 3c 3d 20 75 70 70 65 72 42 6f 75 6e 64 3b 20 69  <= upperBound; i
1a8b0 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ++) {..         
1a8c0 20 20 20 63 61 6c 6c 62 61 63 6b 28 74 68 69 73     callback(this
1a8d0 2e 5f 74 69 6d 65 6c 69 6e 65 5b 69 5d 29 3b 0a  ._timeline[i]);.
1a8e0 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
1a8f0 20 20 20 20 74 68 69 73 2e 5f 69 74 65 72 61 74      this._iterat
1a900 69 6e 67 20 3d 20 66 61 6c 73 65 3b 0a 09 20 20  ing = false;..  
1a910 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 5f        if (this._
1a920 74 6f 52 65 6d 6f 76 65 2e 6c 65 6e 67 74 68 20  toRemove.length 
1a930 3e 20 30 29 20 7b 0a 09 20 20 20 20 20 20 20 20  > 0) {..        
1a940 20 20 20 20 66 6f 72 20 28 76 61 72 20 6a 20 3d      for (var j =
1a950 20 30 3b 20 6a 20 3c 20 74 68 69 73 2e 5f 74 6f   0; j < this._to
1a960 52 65 6d 6f 76 65 2e 6c 65 6e 67 74 68 3b 20 6a  Remove.length; j
1a970 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ++) {..         
1a980 20 20 20 20 20 20 20 76 61 72 20 69 6e 64 65 78         var index
1a990 20 3d 20 74 68 69 73 2e 5f 74 69 6d 65 6c 69 6e   = this._timelin
1a9a0 65 2e 69 6e 64 65 78 4f 66 28 74 68 69 73 2e 5f  e.indexOf(this._
1a9b0 74 6f 52 65 6d 6f 76 65 5b 6a 5d 29 3b 0a 09 20  toRemove[j]);.. 
1a9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1a9d0 66 20 28 69 6e 64 65 78 20 21 3d 3d 20 2d 31 29  f (index !== -1)
1a9e0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1a9f0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 74 69          this._ti
1aa00 6d 65 6c 69 6e 65 2e 73 70 6c 69 63 65 28 69 6e  meline.splice(in
1aa10 64 65 78 2c 20 31 29 3b 0a 09 20 20 20 20 20 20  dex, 1);..      
1aa20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20            }..   
1aa30 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20           }..    
1aa40 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 74 6f          this._to
1aa50 52 65 6d 6f 76 65 20 3d 20 5b 5d 3b 0a 09 20 20  Remove = [];..  
1aa60 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a        }..    };.
1aa70 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 49  .    /**... *  I
1aa80 74 65 72 61 74 65 20 6f 76 65 72 20 65 76 65 72  terate over ever
1aa90 79 74 68 69 6e 67 20 69 6e 20 74 68 65 20 61 72  ything in the ar
1aaa0 72 61 79 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  ray... *  @param
1aab0 20 20 7b 46 75 6e 63 74 69 6f 6e 7d 20 20 63 61    {Function}  ca
1aac0 6c 6c 62 61 63 6b 20 54 68 65 20 63 61 6c 6c 62  llback The callb
1aad0 61 63 6b 20 74 6f 20 69 6e 76 6f 6b 65 20 77 69  ack to invoke wi
1aae0 74 68 20 65 76 65 72 79 20 69 74 65 6d 0a 09 09  th every item...
1aaf0 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f   *  @returns {To
1ab00 6e 65 2e 54 69 6d 65 6c 69 6e 65 7d 20 74 68 69  ne.Timeline} thi
1ab10 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  s... */..    Ton
1ab20 65 2e 54 69 6d 65 6c 69 6e 65 2e 70 72 6f 74 6f  e.Timeline.proto
1ab30 74 79 70 65 2e 66 6f 72 45 61 63 68 20 3d 20 66  type.forEach = f
1ab40 75 6e 63 74 69 6f 6e 20 28 63 61 6c 6c 62 61 63  unction (callbac
1ab50 6b 29 20 7b 0a 09 20 20 20 20 20 20 20 20 74 68  k) {..        th
1ab60 69 73 2e 5f 69 74 65 72 61 74 65 28 63 61 6c 6c  is._iterate(call
1ab70 62 61 63 6b 29 3b 0a 09 20 20 20 20 20 20 20 20  back);..        
1ab80 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20  return this;..  
1ab90 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    };..    /**...
1aba0 20 2a 20 20 49 74 65 72 61 74 65 20 6f 76 65 72   *  Iterate over
1abb0 20 65 76 65 72 79 74 68 69 6e 67 20 69 6e 20 74   everything in t
1abc0 68 65 20 61 72 72 61 79 20 61 74 20 6f 72 20 62  he array at or b
1abd0 65 66 6f 72 65 20 74 68 65 20 67 69 76 65 6e 20  efore the given 
1abe0 74 69 6d 65 2e 0a 09 09 20 2a 20 20 40 70 61 72  time.... *  @par
1abf0 61 6d 20 20 7b 4e 75 6d 62 65 72 7d 20 20 74 69  am  {Number}  ti
1ac00 6d 65 20 54 68 65 20 74 69 6d 65 20 74 6f 20 63  me The time to c
1ac10 68 65 63 6b 20 69 66 20 69 74 65 6d 73 20 61 72  heck if items ar
1ac20 65 20 62 65 66 6f 72 65 0a 09 09 20 2a 20 20 40  e before... *  @
1ac30 70 61 72 61 6d 20 20 7b 46 75 6e 63 74 69 6f 6e  param  {Function
1ac40 7d 20 20 63 61 6c 6c 62 61 63 6b 20 54 68 65 20  }  callback The 
1ac50 63 61 6c 6c 62 61 63 6b 20 74 6f 20 69 6e 76 6f  callback to invo
1ac60 6b 65 20 77 69 74 68 20 65 76 65 72 79 20 69 74  ke with every it
1ac70 65 6d 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e  em... *  @return
1ac80 73 20 7b 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65  s {Tone.Timeline
1ac90 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20  } this... */..  
1aca0 20 20 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 2e    Tone.Timeline.
1acb0 70 72 6f 74 6f 74 79 70 65 2e 66 6f 72 45 61 63  prototype.forEac
1acc0 68 42 65 66 6f 72 65 20 3d 20 66 75 6e 63 74 69  hBefore = functi
1acd0 6f 6e 20 28 74 69 6d 65 2c 20 63 61 6c 6c 62 61  on (time, callba
1ace0 63 6b 29 20 7b 0a 09 20 20 20 20 20 20 20 20 2f  ck) {..        /
1acf0 2f 69 74 65 72 61 74 65 20 6f 76 65 72 20 74 68  /iterate over th
1ad00 65 20 69 74 65 6d 73 20 69 6e 20 72 65 76 65 72  e items in rever
1ad10 73 65 20 73 6f 20 74 68 61 74 20 72 65 6d 6f 76  se so that remov
1ad20 69 6e 67 20 61 6e 20 69 74 65 6d 20 64 6f 65 73  ing an item does
1ad30 6e 27 74 20 62 72 65 61 6b 20 74 68 69 6e 67 73  n't break things
1ad40 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 75 70  ..        var up
1ad50 70 65 72 42 6f 75 6e 64 20 3d 20 74 68 69 73 2e  perBound = this.
1ad60 5f 73 65 61 72 63 68 28 74 69 6d 65 29 3b 0a 09  _search(time);..
1ad70 20 20 20 20 20 20 20 20 69 66 20 28 75 70 70 65          if (uppe
1ad80 72 42 6f 75 6e 64 20 21 3d 3d 20 2d 31 29 20 7b  rBound !== -1) {
1ad90 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
1ada0 69 73 2e 5f 69 74 65 72 61 74 65 28 63 61 6c 6c  is._iterate(call
1adb0 62 61 63 6b 2c 20 30 2c 20 75 70 70 65 72 42 6f  back, 0, upperBo
1adc0 75 6e 64 29 3b 0a 09 20 20 20 20 20 20 20 20 7d  und);..        }
1add0 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1ade0 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09   this;..    };..
1adf0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 49 74      /**... *  It
1ae00 65 72 61 74 65 20 6f 76 65 72 20 65 76 65 72 79  erate over every
1ae10 74 68 69 6e 67 20 69 6e 20 74 68 65 20 61 72 72  thing in the arr
1ae20 61 79 20 61 66 74 65 72 20 74 68 65 20 67 69 76  ay after the giv
1ae30 65 6e 20 74 69 6d 65 2e 0a 09 09 20 2a 20 20 40  en time.... *  @
1ae40 70 61 72 61 6d 20 20 7b 4e 75 6d 62 65 72 7d 20  param  {Number} 
1ae50 20 74 69 6d 65 20 54 68 65 20 74 69 6d 65 20 74   time The time t
1ae60 6f 20 63 68 65 63 6b 20 69 66 20 69 74 65 6d 73  o check if items
1ae70 20 61 72 65 20 62 65 66 6f 72 65 0a 09 09 20 2a   are before... *
1ae80 20 20 40 70 61 72 61 6d 20 20 7b 46 75 6e 63 74    @param  {Funct
1ae90 69 6f 6e 7d 20 20 63 61 6c 6c 62 61 63 6b 20 54  ion}  callback T
1aea0 68 65 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 69  he callback to i
1aeb0 6e 76 6f 6b 65 20 77 69 74 68 20 65 76 65 72 79  nvoke with every
1aec0 20 69 74 65 6d 0a 09 09 20 2a 20 20 40 72 65 74   item... *  @ret
1aed0 75 72 6e 73 20 7b 54 6f 6e 65 2e 54 69 6d 65 6c  urns {Tone.Timel
1aee0 69 6e 65 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a  ine} this... */.
1aef0 09 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65 6c 69  .    Tone.Timeli
1af00 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e 66 6f 72  ne.prototype.for
1af10 45 61 63 68 41 66 74 65 72 20 3d 20 66 75 6e 63  EachAfter = func
1af20 74 69 6f 6e 20 28 74 69 6d 65 2c 20 63 61 6c 6c  tion (time, call
1af30 62 61 63 6b 29 20 7b 0a 09 20 20 20 20 20 20 20  back) {..       
1af40 20 2f 2f 69 74 65 72 61 74 65 20 6f 76 65 72 20   //iterate over 
1af50 74 68 65 20 69 74 65 6d 73 20 69 6e 20 72 65 76  the items in rev
1af60 65 72 73 65 20 73 6f 20 74 68 61 74 20 72 65 6d  erse so that rem
1af70 6f 76 69 6e 67 20 61 6e 20 69 74 65 6d 20 64 6f  oving an item do
1af80 65 73 6e 27 74 20 62 72 65 61 6b 20 74 68 69 6e  esn't break thin
1af90 67 73 0a 09 20 20 20 20 20 20 20 20 76 61 72 20  gs..        var 
1afa0 6c 6f 77 65 72 42 6f 75 6e 64 20 3d 20 74 68 69  lowerBound = thi
1afb0 73 2e 5f 73 65 61 72 63 68 28 74 69 6d 65 29 3b  s._search(time);
1afc0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
1afd0 69 74 65 72 61 74 65 28 63 61 6c 6c 62 61 63 6b  iterate(callback
1afe0 2c 20 6c 6f 77 65 72 42 6f 75 6e 64 20 2b 20 31  , lowerBound + 1
1aff0 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
1b000 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b  rn this;..    };
1b010 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
1b020 49 74 65 72 61 74 65 20 6f 76 65 72 20 65 76 65  Iterate over eve
1b030 72 79 74 68 69 6e 67 20 69 6e 20 74 68 65 20 61  rything in the a
1b040 72 72 61 79 20 61 74 20 6f 72 20 61 66 74 65 72  rray at or after
1b050 20 74 68 65 20 67 69 76 65 6e 20 74 69 6d 65 2e   the given time.
1b060 20 53 69 6d 69 6c 61 72 20 74 6f 20 0a 09 09 20   Similar to ... 
1b070 2a 20 20 66 6f 72 45 61 63 68 41 66 74 65 72 2c  *  forEachAfter,
1b080 20 62 75 74 20 69 6e 63 6c 75 64 65 73 20 74 68   but includes th
1b090 65 20 69 74 65 6d 28 73 29 20 61 74 20 74 68 65  e item(s) at the
1b0a0 20 67 69 76 65 6e 20 74 69 6d 65 2e 0a 09 09 20   given time.... 
1b0b0 2a 20 20 40 70 61 72 61 6d 20 20 7b 4e 75 6d 62  *  @param  {Numb
1b0c0 65 72 7d 20 20 74 69 6d 65 20 54 68 65 20 74 69  er}  time The ti
1b0d0 6d 65 20 74 6f 20 63 68 65 63 6b 20 69 66 20 69  me to check if i
1b0e0 74 65 6d 73 20 61 72 65 20 62 65 66 6f 72 65 0a  tems are before.
1b0f0 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 46  .. *  @param  {F
1b100 75 6e 63 74 69 6f 6e 7d 20 20 63 61 6c 6c 62 61  unction}  callba
1b110 63 6b 20 54 68 65 20 63 61 6c 6c 62 61 63 6b 20  ck The callback 
1b120 74 6f 20 69 6e 76 6f 6b 65 20 77 69 74 68 20 65  to invoke with e
1b130 76 65 72 79 20 69 74 65 6d 0a 09 09 20 2a 20 20  very item... *  
1b140 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 54  @returns {Tone.T
1b150 69 6d 65 6c 69 6e 65 7d 20 74 68 69 73 0a 09 09  imeline} this...
1b160 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69   */..    Tone.Ti
1b170 6d 65 6c 69 6e 65 2e 70 72 6f 74 6f 74 79 70 65  meline.prototype
1b180 2e 66 6f 72 45 61 63 68 46 72 6f 6d 20 3d 20 66  .forEachFrom = f
1b190 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65 2c 20 63  unction (time, c
1b1a0 61 6c 6c 62 61 63 6b 29 20 7b 0a 09 20 20 20 20  allback) {..    
1b1b0 20 20 20 20 2f 2f 69 74 65 72 61 74 65 20 6f 76      //iterate ov
1b1c0 65 72 20 74 68 65 20 69 74 65 6d 73 20 69 6e 20  er the items in 
1b1d0 72 65 76 65 72 73 65 20 73 6f 20 74 68 61 74 20  reverse so that 
1b1e0 72 65 6d 6f 76 69 6e 67 20 61 6e 20 69 74 65 6d  removing an item
1b1f0 20 64 6f 65 73 6e 27 74 20 62 72 65 61 6b 20 74   doesn't break t
1b200 68 69 6e 67 73 0a 09 20 20 20 20 20 20 20 20 76  hings..        v
1b210 61 72 20 6c 6f 77 65 72 42 6f 75 6e 64 20 3d 20  ar lowerBound = 
1b220 74 68 69 73 2e 5f 73 65 61 72 63 68 28 74 69 6d  this._search(tim
1b230 65 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 77  e);..        //w
1b240 6f 72 6b 20 62 61 63 6b 77 61 72 64 73 20 75 6e  ork backwards un
1b250 74 69 6c 20 74 68 65 20 65 76 65 6e 74 20 74 69  til the event ti
1b260 6d 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  me is less than 
1b270 74 69 6d 65 0a 09 20 20 20 20 20 20 20 20 77 68  time..        wh
1b280 69 6c 65 20 28 6c 6f 77 65 72 42 6f 75 6e 64 20  ile (lowerBound 
1b290 3e 3d 20 30 20 26 26 20 74 68 69 73 2e 5f 74 69  >= 0 && this._ti
1b2a0 6d 65 6c 69 6e 65 5b 6c 6f 77 65 72 42 6f 75 6e  meline[lowerBoun
1b2b0 64 5d 2e 74 69 6d 65 20 3e 3d 20 74 69 6d 65 29  d].time >= time)
1b2c0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1b2d0 6c 6f 77 65 72 42 6f 75 6e 64 2d 2d 3b 0a 09 20  lowerBound--;.. 
1b2e0 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
1b2f0 20 20 74 68 69 73 2e 5f 69 74 65 72 61 74 65 28    this._iterate(
1b300 63 61 6c 6c 62 61 63 6b 2c 20 6c 6f 77 65 72 42  callback, lowerB
1b310 6f 75 6e 64 20 2b 20 31 29 3b 0a 09 20 20 20 20  ound + 1);..    
1b320 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b      return this;
1b330 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
1b340 2a 0a 09 09 20 2a 20 20 49 74 65 72 61 74 65 20  *... *  Iterate 
1b350 6f 76 65 72 20 65 76 65 72 79 74 68 69 6e 67 20  over everything 
1b360 69 6e 20 74 68 65 20 61 72 72 61 79 20 61 74 20  in the array at 
1b370 74 68 65 20 67 69 76 65 6e 20 74 69 6d 65 0a 09  the given time..
1b380 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 4e 75  . *  @param  {Nu
1b390 6d 62 65 72 7d 20 20 74 69 6d 65 20 54 68 65 20  mber}  time The 
1b3a0 74 69 6d 65 20 74 6f 20 63 68 65 63 6b 20 69 66  time to check if
1b3b0 20 69 74 65 6d 73 20 61 72 65 20 62 65 66 6f 72   items are befor
1b3c0 65 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20  e... *  @param  
1b3d0 7b 46 75 6e 63 74 69 6f 6e 7d 20 20 63 61 6c 6c  {Function}  call
1b3e0 62 61 63 6b 20 54 68 65 20 63 61 6c 6c 62 61 63  back The callbac
1b3f0 6b 20 74 6f 20 69 6e 76 6f 6b 65 20 77 69 74 68  k to invoke with
1b400 20 65 76 65 72 79 20 69 74 65 6d 0a 09 09 20 2a   every item... *
1b410 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65    @returns {Tone
1b420 2e 54 69 6d 65 6c 69 6e 65 7d 20 74 68 69 73 0a  .Timeline} this.
1b430 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
1b440 54 69 6d 65 6c 69 6e 65 2e 70 72 6f 74 6f 74 79  Timeline.prototy
1b450 70 65 2e 66 6f 72 45 61 63 68 41 74 54 69 6d 65  pe.forEachAtTime
1b460 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d   = function (tim
1b470 65 2c 20 63 61 6c 6c 62 61 63 6b 29 20 7b 0a 09  e, callback) {..
1b480 20 20 20 20 20 20 20 20 2f 2f 69 74 65 72 61 74          //iterat
1b490 65 20 6f 76 65 72 20 74 68 65 20 69 74 65 6d 73  e over the items
1b4a0 20 69 6e 20 72 65 76 65 72 73 65 20 73 6f 20 74   in reverse so t
1b4b0 68 61 74 20 72 65 6d 6f 76 69 6e 67 20 61 6e 20  hat removing an 
1b4c0 69 74 65 6d 20 64 6f 65 73 6e 27 74 20 62 72 65  item doesn't bre
1b4d0 61 6b 20 74 68 69 6e 67 73 0a 09 20 20 20 20 20  ak things..     
1b4e0 20 20 20 76 61 72 20 75 70 70 65 72 42 6f 75 6e     var upperBoun
1b4f0 64 20 3d 20 74 68 69 73 2e 5f 73 65 61 72 63 68  d = this._search
1b500 28 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20  (time);..       
1b510 20 69 66 20 28 75 70 70 65 72 42 6f 75 6e 64 20   if (upperBound 
1b520 21 3d 3d 20 2d 31 29 20 7b 0a 09 20 20 20 20 20  !== -1) {..     
1b530 20 20 20 20 20 20 20 74 68 69 73 2e 5f 69 74 65         this._ite
1b540 72 61 74 65 28 66 75 6e 63 74 69 6f 6e 20 28 65  rate(function (e
1b550 76 65 6e 74 29 20 7b 0a 09 20 20 20 20 20 20 20  vent) {..       
1b560 20 20 20 20 20 20 20 20 20 69 66 20 28 65 76 65           if (eve
1b570 6e 74 2e 74 69 6d 65 20 3d 3d 3d 20 74 69 6d 65  nt.time === time
1b580 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
1b590 20 20 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63           callbac
1b5a0 6b 28 65 76 65 6e 74 29 3b 0a 09 20 20 20 20 20  k(event);..     
1b5b0 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20             }..  
1b5c0 20 20 20 20 20 20 20 20 20 20 7d 2c 20 30 2c 20            }, 0, 
1b5d0 75 70 70 65 72 42 6f 75 6e 64 29 3b 0a 09 20 20  upperBound);..  
1b5e0 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
1b5f0 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20   return this;.. 
1b600 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09     };..    /**..
1b610 09 20 2a 20 20 43 6c 65 61 6e 20 75 70 2e 0a 09  . *  Clean up...
1b620 09 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 54  . *  @return  {T
1b630 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 7d 20 20 74  one.Timeline}  t
1b640 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  his... */..    T
1b650 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 2e 70 72 6f  one.Timeline.pro
1b660 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d  totype.dispose =
1b670 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
1b680 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 70 72 6f          Tone.pro
1b690 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 2e 63  totype.dispose.c
1b6a0 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20 20 20  all(this);..    
1b6b0 20 20 20 20 74 68 69 73 2e 5f 74 69 6d 65 6c 69      this._timeli
1b6c0 6e 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  ne = null;..    
1b6d0 20 20 20 20 74 68 69 73 2e 5f 74 6f 52 65 6d 6f      this._toRemo
1b6e0 76 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  ve = null;..    
1b6f0 7d 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54  };..    return T
1b700 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 3b 0a 09 7d  one.Timeline;..}
1b710 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74  );..Module(funct
1b720 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20  ion (Tone) {..  
1b730 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a    ..    /**... *
1b740 20 20 40 63 6c 61 73 73 20 41 20 73 69 67 6e 61    @class A signa
1b750 6c 20 77 68 69 63 68 20 61 64 64 73 20 74 68 65  l which adds the
1b760 20 6d 65 74 68 6f 64 20 67 65 74 56 61 6c 75 65   method getValue
1b770 41 74 54 69 6d 65 2e 20 0a 09 09 20 2a 20 20 20  AtTime. ... *   
1b780 20 20 20 20 20 20 43 6f 64 65 20 61 6e 64 20 69        Code and i
1b790 6e 73 70 69 72 61 74 69 6f 6e 20 66 72 6f 6d 20  nspiration from 
1b7a0 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63  https://github.c
1b7b0 6f 6d 2f 6a 73 61 6e 74 65 6c 6c 2f 77 65 62 2d  om/jsantell/web-
1b7c0 61 75 64 69 6f 2d 61 75 74 6f 6d 61 74 69 6f 6e  audio-automation
1b7d0 2d 74 69 6d 65 6c 69 6e 65 0a 09 09 20 2a 20 20  -timeline... *  
1b7e0 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65 2e 50  @extends {Tone.P
1b7f0 61 72 61 6d 7d 0a 09 09 20 2a 20 20 40 70 61 72  aram}... *  @par
1b800 61 6d 20 7b 4e 75 6d 62 65 72 3d 7d 20 76 61 6c  am {Number=} val
1b810 75 65 20 54 68 65 20 69 6e 69 74 69 61 6c 20 76  ue The initial v
1b820 61 6c 75 65 20 6f 66 20 74 68 65 20 73 69 67 6e  alue of the sign
1b830 61 6c 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  al... *  @param 
1b840 7b 53 74 72 69 6e 67 3d 7d 20 75 6e 69 74 73 20  {String=} units 
1b850 54 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 75  The conversion u
1b860 6e 69 74 73 20 6f 66 20 74 68 65 20 73 69 67 6e  nits of the sign
1b870 61 6c 2e 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  al.... */..    T
1b880 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 53 69 67 6e  one.TimelineSign
1b890 61 6c 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  al = function ()
1b8a0 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20   {..        var 
1b8b0 6f 70 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e 6f  options = this.o
1b8c0 70 74 69 6f 6e 73 4f 62 6a 65 63 74 28 61 72 67  ptionsObject(arg
1b8d0 75 6d 65 6e 74 73 2c 20 5b 0a 09 20 20 20 20 20  uments, [..     
1b8e0 20 20 20 20 20 20 20 27 76 61 6c 75 65 27 2c 0a         'value',.
1b8f0 09 20 20 20 20 20 20 20 20 20 20 20 20 27 75 6e  .            'un
1b900 69 74 73 27 0a 09 20 20 20 20 20 20 20 20 5d 2c  its'..        ],
1b910 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 2e 64 65 66   Tone.Signal.def
1b920 61 75 6c 74 73 29 3b 0a 09 20 20 20 20 20 20 20  aults);..       
1b930 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20   /**.... *  The 
1b940 73 63 68 65 64 75 6c 65 64 20 65 76 65 6e 74 73  scheduled events
1b950 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54  .... *  @type {T
1b960 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 7d 0a 09 09  one.Timeline}...
1b970 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
1b980 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
1b990 69 73 2e 5f 65 76 65 6e 74 73 20 3d 20 6e 65 77  is._events = new
1b9a0 20 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 28 31   Tone.Timeline(1
1b9b0 30 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 63  0);..        //c
1b9c0 6f 6e 73 74 72 75 63 74 6f 72 73 0a 09 20 20 20  onstructors..   
1b9d0 20 20 20 20 20 54 6f 6e 65 2e 53 69 67 6e 61 6c       Tone.Signal
1b9e0 2e 61 70 70 6c 79 28 74 68 69 73 2c 20 6f 70 74  .apply(this, opt
1b9f0 69 6f 6e 73 29 3b 0a 09 20 20 20 20 20 20 20 20  ions);..        
1ba00 6f 70 74 69 6f 6e 73 2e 70 61 72 61 6d 20 3d 20  options.param = 
1ba10 74 68 69 73 2e 5f 70 61 72 61 6d 3b 0a 09 20 20  this._param;..  
1ba20 20 20 20 20 20 20 54 6f 6e 65 2e 50 61 72 61 6d        Tone.Param
1ba30 2e 63 61 6c 6c 28 74 68 69 73 2c 20 6f 70 74 69  .call(this, opti
1ba40 6f 6e 73 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  ons);..        /
1ba50 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 69 6e  **.... *  The in
1ba60 69 74 69 61 6c 20 73 63 68 65 64 75 6c 65 64 20  itial scheduled 
1ba70 76 61 6c 75 65 0a 09 09 09 20 2a 20 20 40 74 79  value.... *  @ty
1ba80 70 65 20 7b 4e 75 6d 62 65 72 7d 0a 09 09 09 20  pe {Number}.... 
1ba90 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20  *  @private.... 
1baa0 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
1bab0 2e 5f 69 6e 69 74 69 61 6c 20 3d 20 74 68 69 73  ._initial = this
1bac0 2e 5f 66 72 6f 6d 55 6e 69 74 73 28 74 68 69 73  ._fromUnits(this
1bad0 2e 5f 70 61 72 61 6d 2e 76 61 6c 75 65 29 3b 0a  ._param.value);.
1bae0 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e  .    };..    Ton
1baf0 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 54 69  e.extend(Tone.Ti
1bb00 6d 65 6c 69 6e 65 53 69 67 6e 61 6c 2c 20 54 6f  melineSignal, To
1bb10 6e 65 2e 50 61 72 61 6d 29 3b 0a 09 20 20 20 20  ne.Param);..    
1bb20 2f 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20 65 76  /**... *  The ev
1bb30 65 6e 74 20 74 79 70 65 73 20 6f 66 20 61 20 73  ent types of a s
1bb40 63 68 65 64 75 6c 61 62 6c 65 20 73 69 67 6e 61  chedulable signa
1bb50 6c 2e 0a 09 09 20 2a 20 20 40 65 6e 75 6d 20 7b  l.... *  @enum {
1bb60 53 74 72 69 6e 67 7d 0a 09 09 20 2a 20 20 40 70  String}... *  @p
1bb70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20  rivate... */..  
1bb80 20 20 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 53    Tone.TimelineS
1bb90 69 67 6e 61 6c 2e 54 79 70 65 20 3d 20 7b 0a 09  ignal.Type = {..
1bba0 20 20 20 20 20 20 20 20 4c 69 6e 65 61 72 3a 20          Linear: 
1bbb0 27 6c 69 6e 65 61 72 27 2c 0a 09 20 20 20 20 20  'linear',..     
1bbc0 20 20 20 45 78 70 6f 6e 65 6e 74 69 61 6c 3a 20     Exponential: 
1bbd0 27 65 78 70 6f 6e 65 6e 74 69 61 6c 27 2c 0a 09  'exponential',..
1bbe0 20 20 20 20 20 20 20 20 54 61 72 67 65 74 3a 20          Target: 
1bbf0 27 74 61 72 67 65 74 27 2c 0a 09 20 20 20 20 20  'target',..     
1bc00 20 20 20 43 75 72 76 65 3a 20 27 63 75 72 76 65     Curve: 'curve
1bc10 27 2c 0a 09 20 20 20 20 20 20 20 20 53 65 74 3a  ',..        Set:
1bc20 20 27 73 65 74 27 0a 09 20 20 20 20 7d 3b 0a 09   'set'..    };..
1bc30 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65      /**... * The
1bc40 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f   current value o
1bc50 66 20 74 68 65 20 73 69 67 6e 61 6c 2e 20 0a 09  f the signal. ..
1bc60 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f  . * @memberOf To
1bc70 6e 65 2e 54 69 6d 65 6c 69 6e 65 53 69 67 6e 61  ne.TimelineSigna
1bc80 6c 23 0a 09 09 20 2a 20 40 74 79 70 65 20 7b 4e  l#... * @type {N
1bc90 75 6d 62 65 72 7d 0a 09 09 20 2a 20 40 6e 61 6d  umber}... * @nam
1bca0 65 20 76 61 6c 75 65 0a 09 09 20 2a 2f 0a 09 20  e value... */.. 
1bcb0 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65     Object.define
1bcc0 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 54 69  Property(Tone.Ti
1bcd0 6d 65 6c 69 6e 65 53 69 67 6e 61 6c 2e 70 72 6f  melineSignal.pro
1bce0 74 6f 74 79 70 65 2c 20 27 76 61 6c 75 65 27 2c  totype, 'value',
1bcf0 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a   {..        get:
1bd00 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
1bd10 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20              var 
1bd20 6e 6f 77 20 3d 20 74 68 69 73 2e 6e 6f 77 28 29  now = this.now()
1bd30 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 76  ;..            v
1bd40 61 72 20 76 61 6c 20 3d 20 74 68 69 73 2e 67 65  ar val = this.ge
1bd50 74 56 61 6c 75 65 41 74 54 69 6d 65 28 6e 6f 77  tValueAtTime(now
1bd60 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1bd70 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 74 6f 55  return this._toU
1bd80 6e 69 74 73 28 76 61 6c 29 3b 0a 09 20 20 20 20  nits(val);..    
1bd90 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20      },..        
1bda0 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 76  set: function (v
1bdb0 61 6c 75 65 29 20 7b 0a 09 20 20 20 20 20 20 20  alue) {..       
1bdc0 20 20 20 20 20 76 61 72 20 63 6f 6e 76 65 72 74       var convert
1bdd0 65 64 56 61 6c 20 3d 20 74 68 69 73 2e 5f 66 72  edVal = this._fr
1bde0 6f 6d 55 6e 69 74 73 28 76 61 6c 75 65 29 3b 0a  omUnits(value);.
1bdf0 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
1be00 73 2e 5f 69 6e 69 74 69 61 6c 20 3d 20 63 6f 6e  s._initial = con
1be10 76 65 72 74 65 64 56 61 6c 3b 0a 09 20 20 20 20  vertedVal;..    
1be20 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 61 6e          this.can
1be30 63 65 6c 53 63 68 65 64 75 6c 65 64 56 61 6c 75  celScheduledValu
1be40 65 73 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20  es();..         
1be50 20 20 20 74 68 69 73 2e 5f 70 61 72 61 6d 2e 76     this._param.v
1be60 61 6c 75 65 20 3d 20 63 6f 6e 76 65 72 74 65 64  alue = converted
1be70 56 61 6c 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a  Val;..        }.
1be80 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2f  .    });..    //
1be90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1beb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 2f  /////////..    /
1bee0 2f 09 53 43 48 45 44 55 4c 49 4e 47 0a 09 20 20  /.SCHEDULING..  
1bef0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1bf00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20  /////////////.. 
1bf40 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 53 63 68     /**... *  Sch
1bf50 65 64 75 6c 65 73 20 61 20 70 61 72 61 6d 65 74  edules a paramet
1bf60 65 72 20 76 61 6c 75 65 20 63 68 61 6e 67 65 20  er value change 
1bf70 61 74 20 74 68 65 20 67 69 76 65 6e 20 74 69 6d  at the given tim
1bf80 65 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  e.... *  @param 
1bf90 7b 2a 7d 09 76 61 6c 75 65 20 54 68 65 20 76 61  {*}.value The va
1bfa0 6c 75 65 20 74 6f 20 73 65 74 20 74 68 65 20 73  lue to set the s
1bfb0 69 67 6e 61 6c 2e 0a 09 09 20 2a 20 20 40 70 61  ignal.... *  @pa
1bfc0 72 61 6d 20 7b 54 69 6d 65 7d 20 20 74 69 6d 65  ram {Time}  time
1bfd0 20 54 68 65 20 74 69 6d 65 20 77 68 65 6e 20 74   The time when t
1bfe0 68 65 20 63 68 61 6e 67 65 20 73 68 6f 75 6c 64  he change should
1bff0 20 6f 63 63 75 72 2e 0a 09 09 20 2a 20 20 40 72   occur.... *  @r
1c000 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 54 69 6d  eturns {Tone.Tim
1c010 65 6c 69 6e 65 53 69 67 6e 61 6c 7d 20 74 68 69  elineSignal} thi
1c020 73 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65  s... *  @example
1c030 0a 09 09 20 2a 20 2f 2f 73 65 74 20 74 68 65 20  ... * //set the 
1c040 66 72 65 71 75 65 6e 63 79 20 74 6f 20 22 47 34  frequency to "G4
1c050 22 20 69 6e 20 65 78 61 63 74 6c 79 20 31 20 73  " in exactly 1 s
1c060 65 63 6f 6e 64 20 66 72 6f 6d 20 6e 6f 77 2e 20  econd from now. 
1c070 0a 09 09 20 2a 20 66 72 65 71 2e 73 65 74 56 61  ... * freq.setVa
1c080 6c 75 65 41 74 54 69 6d 65 28 22 47 34 22 2c 20  lueAtTime("G4", 
1c090 22 2b 31 22 29 3b 0a 09 09 20 2a 2f 0a 09 20 20  "+1");... */..  
1c0a0 20 20 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 53    Tone.TimelineS
1c0b0 69 67 6e 61 6c 2e 70 72 6f 74 6f 74 79 70 65 2e  ignal.prototype.
1c0c0 73 65 74 56 61 6c 75 65 41 74 54 69 6d 65 20 3d  setValueAtTime =
1c0d0 20 66 75 6e 63 74 69 6f 6e 20 28 76 61 6c 75 65   function (value
1c0e0 2c 20 73 74 61 72 74 54 69 6d 65 29 20 7b 0a 09  , startTime) {..
1c0f0 20 20 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20          value = 
1c100 74 68 69 73 2e 5f 66 72 6f 6d 55 6e 69 74 73 28  this._fromUnits(
1c110 76 61 6c 75 65 29 3b 0a 09 20 20 20 20 20 20 20  value);..       
1c120 20 73 74 61 72 74 54 69 6d 65 20 3d 20 74 68 69   startTime = thi
1c130 73 2e 74 6f 53 65 63 6f 6e 64 73 28 73 74 61 72  s.toSeconds(star
1c140 74 54 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20  tTime);..       
1c150 20 74 68 69 73 2e 5f 65 76 65 6e 74 73 2e 61 64   this._events.ad
1c160 64 28 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  d({..           
1c170 20 27 74 79 70 65 27 3a 20 54 6f 6e 65 2e 54 69   'type': Tone.Ti
1c180 6d 65 6c 69 6e 65 53 69 67 6e 61 6c 2e 54 79 70  melineSignal.Typ
1c190 65 2e 53 65 74 2c 0a 09 20 20 20 20 20 20 20 20  e.Set,..        
1c1a0 20 20 20 20 27 76 61 6c 75 65 27 3a 20 76 61 6c      'value': val
1c1b0 75 65 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  ue,..           
1c1c0 20 27 74 69 6d 65 27 3a 20 73 74 61 72 74 54 69   'time': startTi
1c1d0 6d 65 0a 09 20 20 20 20 20 20 20 20 7d 29 3b 0a  me..        });.
1c1e0 09 20 20 20 20 20 20 20 20 2f 2f 69 6e 76 6f 6b  .        //invok
1c1f0 65 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 65  e the original e
1c200 76 65 6e 74 0a 09 20 20 20 20 20 20 20 20 74 68  vent..        th
1c210 69 73 2e 5f 70 61 72 61 6d 2e 73 65 74 56 61 6c  is._param.setVal
1c220 75 65 41 74 54 69 6d 65 28 76 61 6c 75 65 2c 20  ueAtTime(value, 
1c230 73 74 61 72 74 54 69 6d 65 29 3b 0a 09 20 20 20  startTime);..   
1c240 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
1c250 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  ;..    };..    /
1c260 2a 2a 0a 09 09 20 2a 20 20 53 63 68 65 64 75 6c  **... *  Schedul
1c270 65 73 20 61 20 6c 69 6e 65 61 72 20 63 6f 6e 74  es a linear cont
1c280 69 6e 75 6f 75 73 20 63 68 61 6e 67 65 20 69 6e  inuous change in
1c290 20 70 61 72 61 6d 65 74 65 72 20 76 61 6c 75 65   parameter value
1c2a0 20 66 72 6f 6d 20 74 68 65 20 0a 09 09 20 2a 20   from the ... * 
1c2b0 20 70 72 65 76 69 6f 75 73 20 73 63 68 65 64 75   previous schedu
1c2c0 6c 65 64 20 70 61 72 61 6d 65 74 65 72 20 76 61  led parameter va
1c2d0 6c 75 65 20 74 6f 20 74 68 65 20 67 69 76 65 6e  lue to the given
1c2e0 20 76 61 6c 75 65 2e 0a 09 09 20 2a 20 20 0a 09   value.... *  ..
1c2f0 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 6e 75  . *  @param  {nu
1c300 6d 62 65 72 7d 20 76 61 6c 75 65 20 20 20 0a 09  mber} value   ..
1c310 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 54 69  . *  @param  {Ti
1c320 6d 65 7d 20 65 6e 64 54 69 6d 65 20 0a 09 09 20  me} endTime ... 
1c330 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e  *  @returns {Ton
1c340 65 2e 54 69 6d 65 6c 69 6e 65 53 69 67 6e 61 6c  e.TimelineSignal
1c350 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20  } this... */..  
1c360 20 20 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 53    Tone.TimelineS
1c370 69 67 6e 61 6c 2e 70 72 6f 74 6f 74 79 70 65 2e  ignal.prototype.
1c380 6c 69 6e 65 61 72 52 61 6d 70 54 6f 56 61 6c 75  linearRampToValu
1c390 65 41 74 54 69 6d 65 20 3d 20 66 75 6e 63 74 69  eAtTime = functi
1c3a0 6f 6e 20 28 76 61 6c 75 65 2c 20 65 6e 64 54 69  on (value, endTi
1c3b0 6d 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 76  me) {..        v
1c3c0 61 6c 75 65 20 3d 20 74 68 69 73 2e 5f 66 72 6f  alue = this._fro
1c3d0 6d 55 6e 69 74 73 28 76 61 6c 75 65 29 3b 0a 09  mUnits(value);..
1c3e0 20 20 20 20 20 20 20 20 65 6e 64 54 69 6d 65 20          endTime 
1c3f0 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73  = this.toSeconds
1c400 28 65 6e 64 54 69 6d 65 29 3b 0a 09 20 20 20 20  (endTime);..    
1c410 20 20 20 20 74 68 69 73 2e 5f 65 76 65 6e 74 73      this._events
1c420 2e 61 64 64 28 7b 0a 09 20 20 20 20 20 20 20 20  .add({..        
1c430 20 20 20 20 27 74 79 70 65 27 3a 20 54 6f 6e 65      'type': Tone
1c440 2e 54 69 6d 65 6c 69 6e 65 53 69 67 6e 61 6c 2e  .TimelineSignal.
1c450 54 79 70 65 2e 4c 69 6e 65 61 72 2c 0a 09 20 20  Type.Linear,..  
1c460 20 20 20 20 20 20 20 20 20 20 27 76 61 6c 75 65            'value
1c470 27 3a 20 76 61 6c 75 65 2c 0a 09 20 20 20 20 20  ': value,..     
1c480 20 20 20 20 20 20 20 27 74 69 6d 65 27 3a 20 65         'time': e
1c490 6e 64 54 69 6d 65 0a 09 20 20 20 20 20 20 20 20  ndTime..        
1c4a0 7d 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  });..        thi
1c4b0 73 2e 5f 70 61 72 61 6d 2e 6c 69 6e 65 61 72 52  s._param.linearR
1c4c0 61 6d 70 54 6f 56 61 6c 75 65 41 74 54 69 6d 65  ampToValueAtTime
1c4d0 28 76 61 6c 75 65 2c 20 65 6e 64 54 69 6d 65 29  (value, endTime)
1c4e0 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
1c4f0 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a  n this;..    };.
1c500 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 53  .    /**... *  S
1c510 63 68 65 64 75 6c 65 73 20 61 6e 20 65 78 70 6f  chedules an expo
1c520 6e 65 6e 74 69 61 6c 20 63 6f 6e 74 69 6e 75 6f  nential continuo
1c530 75 73 20 63 68 61 6e 67 65 20 69 6e 20 70 61 72  us change in par
1c540 61 6d 65 74 65 72 20 76 61 6c 75 65 20 66 72 6f  ameter value fro
1c550 6d 20 0a 09 09 20 2a 20 20 74 68 65 20 70 72 65  m ... *  the pre
1c560 76 69 6f 75 73 20 73 63 68 65 64 75 6c 65 64 20  vious scheduled 
1c570 70 61 72 61 6d 65 74 65 72 20 76 61 6c 75 65 20  parameter value 
1c580 74 6f 20 74 68 65 20 67 69 76 65 6e 20 76 61 6c  to the given val
1c590 75 65 2e 0a 09 09 20 2a 20 20 0a 09 09 20 2a 20  ue.... *  ... * 
1c5a0 20 40 70 61 72 61 6d 20 20 7b 6e 75 6d 62 65 72   @param  {number
1c5b0 7d 20 76 61 6c 75 65 20 20 20 0a 09 09 20 2a 20  } value   ... * 
1c5c0 20 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 7d 20   @param  {Time} 
1c5d0 65 6e 64 54 69 6d 65 20 0a 09 09 20 2a 20 20 40  endTime ... *  @
1c5e0 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 54 69  returns {Tone.Ti
1c5f0 6d 65 6c 69 6e 65 53 69 67 6e 61 6c 7d 20 74 68  melineSignal} th
1c600 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  is... */..    To
1c610 6e 65 2e 54 69 6d 65 6c 69 6e 65 53 69 67 6e 61  ne.TimelineSigna
1c620 6c 2e 70 72 6f 74 6f 74 79 70 65 2e 65 78 70 6f  l.prototype.expo
1c630 6e 65 6e 74 69 61 6c 52 61 6d 70 54 6f 56 61 6c  nentialRampToVal
1c640 75 65 41 74 54 69 6d 65 20 3d 20 66 75 6e 63 74  ueAtTime = funct
1c650 69 6f 6e 20 28 76 61 6c 75 65 2c 20 65 6e 64 54  ion (value, endT
1c660 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ime) {..        
1c670 2f 2f 67 65 74 20 74 68 65 20 70 72 65 76 69 6f  //get the previo
1c680 75 73 20 65 76 65 6e 74 20 61 6e 64 20 6d 61 6b  us event and mak
1c690 65 20 73 75 72 65 20 69 74 27 73 20 6e 6f 74 20  e sure it's not 
1c6a0 73 74 61 72 74 69 6e 67 20 66 72 6f 6d 20 30 0a  starting from 0.
1c6b0 09 20 20 20 20 20 20 20 20 65 6e 64 54 69 6d 65  .        endTime
1c6c0 20 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64   = this.toSecond
1c6d0 73 28 65 6e 64 54 69 6d 65 29 3b 0a 09 20 20 20  s(endTime);..   
1c6e0 20 20 20 20 20 76 61 72 20 62 65 66 6f 72 65 45       var beforeE
1c6f0 76 65 6e 74 20 3d 20 74 68 69 73 2e 5f 73 65 61  vent = this._sea
1c700 72 63 68 42 65 66 6f 72 65 28 65 6e 64 54 69 6d  rchBefore(endTim
1c710 65 29 3b 0a 09 20 20 20 20 20 20 20 20 69 66 20  e);..        if 
1c720 28 62 65 66 6f 72 65 45 76 65 6e 74 20 26 26 20  (beforeEvent && 
1c730 62 65 66 6f 72 65 45 76 65 6e 74 2e 76 61 6c 75  beforeEvent.valu
1c740 65 20 3d 3d 3d 20 30 29 20 7b 0a 09 20 20 20 20  e === 0) {..    
1c750 20 20 20 20 20 20 20 20 2f 2f 72 65 73 63 68 65          //resche
1c760 64 75 6c 65 20 74 68 61 74 20 65 76 65 6e 74 0a  dule that event.
1c770 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
1c780 73 2e 73 65 74 56 61 6c 75 65 41 74 54 69 6d 65  s.setValueAtTime
1c790 28 74 68 69 73 2e 5f 6d 69 6e 4f 75 74 70 75 74  (this._minOutput
1c7a0 2c 20 62 65 66 6f 72 65 45 76 65 6e 74 2e 74 69  , beforeEvent.ti
1c7b0 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a  me);..        }.
1c7c0 09 20 20 20 20 20 20 20 20 76 61 6c 75 65 20 3d  .        value =
1c7d0 20 74 68 69 73 2e 5f 66 72 6f 6d 55 6e 69 74 73   this._fromUnits
1c7e0 28 76 61 6c 75 65 29 3b 0a 09 20 20 20 20 20 20  (value);..      
1c7f0 20 20 76 61 72 20 73 65 74 56 61 6c 75 65 20 3d    var setValue =
1c800 20 4d 61 74 68 2e 6d 61 78 28 76 61 6c 75 65 2c   Math.max(value,
1c810 20 74 68 69 73 2e 5f 6d 69 6e 4f 75 74 70 75 74   this._minOutput
1c820 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
1c830 2e 5f 65 76 65 6e 74 73 2e 61 64 64 28 7b 0a 09  ._events.add({..
1c840 20 20 20 20 20 20 20 20 20 20 20 20 27 74 79 70              'typ
1c850 65 27 3a 20 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e  e': Tone.Timelin
1c860 65 53 69 67 6e 61 6c 2e 54 79 70 65 2e 45 78 70  eSignal.Type.Exp
1c870 6f 6e 65 6e 74 69 61 6c 2c 0a 09 20 20 20 20 20  onential,..     
1c880 20 20 20 20 20 20 20 27 76 61 6c 75 65 27 3a 20         'value': 
1c890 73 65 74 56 61 6c 75 65 2c 0a 09 20 20 20 20 20  setValue,..     
1c8a0 20 20 20 20 20 20 20 27 74 69 6d 65 27 3a 20 65         'time': e
1c8b0 6e 64 54 69 6d 65 0a 09 20 20 20 20 20 20 20 20  ndTime..        
1c8c0 7d 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 69  });..        //i
1c8d0 66 20 74 68 65 20 72 61 6d 70 65 64 20 74 6f 20  f the ramped to 
1c8e0 76 61 6c 75 65 20 69 73 20 30 2c 20 6d 61 6b 65  value is 0, make
1c8f0 20 69 74 20 67 6f 20 74 6f 20 74 68 65 20 6d 69   it go to the mi
1c900 6e 20 6f 75 74 70 75 74 2c 20 61 6e 64 20 74 68  n output, and th
1c910 65 6e 20 73 65 74 20 74 6f 20 30 2e 0a 09 20 20  en set to 0...  
1c920 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
1c930 3c 20 74 68 69 73 2e 5f 6d 69 6e 4f 75 74 70 75  < this._minOutpu
1c940 74 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  t) {..          
1c950 20 20 74 68 69 73 2e 5f 70 61 72 61 6d 2e 65 78    this._param.ex
1c960 70 6f 6e 65 6e 74 69 61 6c 52 61 6d 70 54 6f 56  ponentialRampToV
1c970 61 6c 75 65 41 74 54 69 6d 65 28 74 68 69 73 2e  alueAtTime(this.
1c980 5f 6d 69 6e 4f 75 74 70 75 74 2c 20 65 6e 64 54  _minOutput, endT
1c990 69 6d 65 20 2d 20 74 68 69 73 2e 73 61 6d 70 6c  ime - this.sampl
1c9a0 65 54 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20  eTime);..       
1c9b0 20 20 20 20 20 74 68 69 73 2e 73 65 74 56 61 6c       this.setVal
1c9c0 75 65 41 74 54 69 6d 65 28 30 2c 20 65 6e 64 54  ueAtTime(0, endT
1c9d0 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 7d  ime);..        }
1c9e0 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20   else {..       
1c9f0 20 20 20 20 20 74 68 69 73 2e 5f 70 61 72 61 6d       this._param
1ca00 2e 65 78 70 6f 6e 65 6e 74 69 61 6c 52 61 6d 70  .exponentialRamp
1ca10 54 6f 56 61 6c 75 65 41 74 54 69 6d 65 28 76 61  ToValueAtTime(va
1ca20 6c 75 65 2c 20 65 6e 64 54 69 6d 65 29 3b 0a 09  lue, endTime);..
1ca30 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
1ca40 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a     return this;.
1ca50 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
1ca60 0a 09 09 20 2a 20 20 53 74 61 72 74 20 65 78 70  ... *  Start exp
1ca70 6f 6e 65 6e 74 69 61 6c 6c 79 20 61 70 70 72 6f  onentially appro
1ca80 61 63 68 69 6e 67 20 74 68 65 20 74 61 72 67 65  aching the targe
1ca90 74 20 76 61 6c 75 65 20 61 74 20 74 68 65 20 67  t value at the g
1caa0 69 76 65 6e 20 74 69 6d 65 20 77 69 74 68 0a 09  iven time with..
1cab0 09 20 2a 20 20 61 20 72 61 74 65 20 68 61 76 69  . *  a rate havi
1cac0 6e 67 20 74 68 65 20 67 69 76 65 6e 20 74 69 6d  ng the given tim
1cad0 65 20 63 6f 6e 73 74 61 6e 74 2e 0a 09 09 20 2a  e constant.... *
1cae0 20 20 40 70 61 72 61 6d 20 7b 6e 75 6d 62 65 72    @param {number
1caf0 7d 20 76 61 6c 75 65 20 20 20 20 20 20 20 20 0a  } value        .
1cb00 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 54 69  .. *  @param {Ti
1cb10 6d 65 7d 20 73 74 61 72 74 54 69 6d 65 20 20 20  me} startTime   
1cb20 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b   ... *  @param {
1cb30 6e 75 6d 62 65 72 7d 20 74 69 6d 65 43 6f 6e 73  number} timeCons
1cb40 74 61 6e 74 20 0a 09 09 20 2a 20 20 40 72 65 74  tant ... *  @ret
1cb50 75 72 6e 73 20 7b 54 6f 6e 65 2e 54 69 6d 65 6c  urns {Tone.Timel
1cb60 69 6e 65 53 69 67 6e 61 6c 7d 20 74 68 69 73 20  ineSignal} this 
1cb70 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
1cb80 2e 54 69 6d 65 6c 69 6e 65 53 69 67 6e 61 6c 2e  .TimelineSignal.
1cb90 70 72 6f 74 6f 74 79 70 65 2e 73 65 74 54 61 72  prototype.setTar
1cba0 67 65 74 41 74 54 69 6d 65 20 3d 20 66 75 6e 63  getAtTime = func
1cbb0 74 69 6f 6e 20 28 76 61 6c 75 65 2c 20 73 74 61  tion (value, sta
1cbc0 72 74 54 69 6d 65 2c 20 74 69 6d 65 43 6f 6e 73  rtTime, timeCons
1cbd0 74 61 6e 74 29 20 7b 0a 09 20 20 20 20 20 20 20  tant) {..       
1cbe0 20 76 61 6c 75 65 20 3d 20 74 68 69 73 2e 5f 66   value = this._f
1cbf0 72 6f 6d 55 6e 69 74 73 28 76 61 6c 75 65 29 3b  romUnits(value);
1cc00 0a 09 20 20 20 20 20 20 20 20 76 61 6c 75 65 20  ..        value 
1cc10 3d 20 4d 61 74 68 2e 6d 61 78 28 74 68 69 73 2e  = Math.max(this.
1cc20 5f 6d 69 6e 4f 75 74 70 75 74 2c 20 76 61 6c 75  _minOutput, valu
1cc30 65 29 3b 0a 09 20 20 20 20 20 20 20 20 74 69 6d  e);..        tim
1cc40 65 43 6f 6e 73 74 61 6e 74 20 3d 20 4d 61 74 68  eConstant = Math
1cc50 2e 6d 61 78 28 74 68 69 73 2e 5f 6d 69 6e 4f 75  .max(this._minOu
1cc60 74 70 75 74 2c 20 74 69 6d 65 43 6f 6e 73 74 61  tput, timeConsta
1cc70 6e 74 29 3b 0a 09 20 20 20 20 20 20 20 20 73 74  nt);..        st
1cc80 61 72 74 54 69 6d 65 20 3d 20 74 68 69 73 2e 74  artTime = this.t
1cc90 6f 53 65 63 6f 6e 64 73 28 73 74 61 72 74 54 69  oSeconds(startTi
1cca0 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  me);..        th
1ccb0 69 73 2e 5f 65 76 65 6e 74 73 2e 61 64 64 28 7b  is._events.add({
1ccc0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 74  ..            't
1ccd0 79 70 65 27 3a 20 54 6f 6e 65 2e 54 69 6d 65 6c  ype': Tone.Timel
1cce0 69 6e 65 53 69 67 6e 61 6c 2e 54 79 70 65 2e 54  ineSignal.Type.T
1ccf0 61 72 67 65 74 2c 0a 09 20 20 20 20 20 20 20 20  arget,..        
1cd00 20 20 20 20 27 76 61 6c 75 65 27 3a 20 76 61 6c      'value': val
1cd10 75 65 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  ue,..           
1cd20 20 27 74 69 6d 65 27 3a 20 73 74 61 72 74 54 69   'time': startTi
1cd30 6d 65 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  me,..           
1cd40 20 27 63 6f 6e 73 74 61 6e 74 27 3a 20 74 69 6d   'constant': tim
1cd50 65 43 6f 6e 73 74 61 6e 74 0a 09 20 20 20 20 20  eConstant..     
1cd60 20 20 20 7d 29 3b 0a 09 20 20 20 20 20 20 20 20     });..        
1cd70 74 68 69 73 2e 5f 70 61 72 61 6d 2e 73 65 74 54  this._param.setT
1cd80 61 72 67 65 74 41 74 54 69 6d 65 28 76 61 6c 75  argetAtTime(valu
1cd90 65 2c 20 73 74 61 72 74 54 69 6d 65 2c 20 74 69  e, startTime, ti
1cda0 6d 65 43 6f 6e 73 74 61 6e 74 29 3b 0a 09 20 20  meConstant);..  
1cdb0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
1cdc0 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  s;..    };..    
1cdd0 2f 2a 2a 0a 09 09 20 2a 20 20 53 65 74 20 61 6e  /**... *  Set an
1cde0 20 61 72 72 61 79 20 6f 66 20 61 72 62 69 74 72   array of arbitr
1cdf0 61 72 79 20 76 61 6c 75 65 73 20 73 74 61 72 74  ary values start
1ce00 69 6e 67 20 61 74 20 74 68 65 20 67 69 76 65 6e  ing at the given
1ce10 20 74 69 6d 65 20 66 6f 72 20 74 68 65 20 67 69   time for the gi
1ce20 76 65 6e 20 64 75 72 61 74 69 6f 6e 2e 0a 09 09  ven duration....
1ce30 20 2a 20 20 40 70 61 72 61 6d 20 7b 46 6c 6f 61   *  @param {Floa
1ce40 74 33 32 41 72 72 61 79 7d 20 76 61 6c 75 65 73  t32Array} values
1ce50 20 20 20 20 20 20 20 20 0a 09 09 20 2a 20 20 40          ... *  @
1ce60 70 61 72 61 6d 20 7b 54 69 6d 65 7d 20 73 74 61  param {Time} sta
1ce70 72 74 54 69 6d 65 20 20 20 20 0a 09 09 20 2a 20  rtTime    ... * 
1ce80 20 40 70 61 72 61 6d 20 7b 54 69 6d 65 7d 20 64   @param {Time} d
1ce90 75 72 61 74 69 6f 6e 0a 09 09 20 2a 20 20 40 70  uration... *  @p
1cea0 61 72 61 6d 20 7b 4e 6f 72 6d 61 6c 52 61 6e 67  aram {NormalRang
1ceb0 65 7d 20 5b 73 63 61 6c 69 6e 67 3d 31 5d 20 49  e} [scaling=1] I
1cec0 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
1ced0 74 68 65 20 63 75 72 76 65 20 73 68 6f 75 6c 64  the curve should
1cee0 20 62 65 20 73 63 61 6c 65 64 20 62 79 20 73 6f   be scaled by so
1cef0 6d 65 20 76 61 6c 75 65 0a 09 09 20 2a 20 20 40  me value... *  @
1cf00 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 54 69  returns {Tone.Ti
1cf10 6d 65 6c 69 6e 65 53 69 67 6e 61 6c 7d 20 74 68  melineSignal} th
1cf20 69 73 20 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  is ... */..    T
1cf30 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 53 69 67 6e  one.TimelineSign
1cf40 61 6c 2e 70 72 6f 74 6f 74 79 70 65 2e 73 65 74  al.prototype.set
1cf50 56 61 6c 75 65 43 75 72 76 65 41 74 54 69 6d 65  ValueCurveAtTime
1cf60 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 76 61 6c   = function (val
1cf70 75 65 73 2c 20 73 74 61 72 74 54 69 6d 65 2c 20  ues, startTime, 
1cf80 64 75 72 61 74 69 6f 6e 2c 20 73 63 61 6c 69 6e  duration, scalin
1cf90 67 29 20 7b 0a 09 20 20 20 20 20 20 20 20 73 63  g) {..        sc
1cfa0 61 6c 69 6e 67 20 3d 20 74 68 69 73 2e 64 65 66  aling = this.def
1cfb0 61 75 6c 74 41 72 67 28 73 63 61 6c 69 6e 67 2c  aultArg(scaling,
1cfc0 20 31 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f   1);..        //
1cfd0 63 6f 70 79 20 74 68 65 20 61 72 72 61 79 0a 09  copy the array..
1cfe0 20 20 20 20 20 20 20 20 76 61 72 20 66 6c 6f 61          var floa
1cff0 74 73 20 3d 20 6e 65 77 20 41 72 72 61 79 28 76  ts = new Array(v
1d000 61 6c 75 65 73 2e 6c 65 6e 67 74 68 29 3b 0a 09  alues.length);..
1d010 20 20 20 20 20 20 20 20 66 6f 72 20 28 76 61 72          for (var
1d020 20 69 20 3d 20 30 3b 20 69 20 3c 20 66 6c 6f 61   i = 0; i < floa
1d030 74 73 2e 6c 65 6e 67 74 68 3b 20 69 2b 2b 29 20  ts.length; i++) 
1d040 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 66  {..            f
1d050 6c 6f 61 74 73 5b 69 5d 20 3d 20 74 68 69 73 2e  loats[i] = this.
1d060 5f 66 72 6f 6d 55 6e 69 74 73 28 76 61 6c 75 65  _fromUnits(value
1d070 73 5b 69 5d 29 20 2a 20 73 63 61 6c 69 6e 67 3b  s[i]) * scaling;
1d080 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
1d090 20 20 20 20 20 73 74 61 72 74 54 69 6d 65 20 3d       startTime =
1d0a0 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28   this.toSeconds(
1d0b0 73 74 61 72 74 54 69 6d 65 29 3b 0a 09 20 20 20  startTime);..   
1d0c0 20 20 20 20 20 64 75 72 61 74 69 6f 6e 20 3d 20       duration = 
1d0d0 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28 64  this.toSeconds(d
1d0e0 75 72 61 74 69 6f 6e 29 3b 0a 09 20 20 20 20 20  uration);..     
1d0f0 20 20 20 74 68 69 73 2e 5f 65 76 65 6e 74 73 2e     this._events.
1d100 61 64 64 28 7b 0a 09 20 20 20 20 20 20 20 20 20  add({..         
1d110 20 20 20 27 74 79 70 65 27 3a 20 54 6f 6e 65 2e     'type': Tone.
1d120 54 69 6d 65 6c 69 6e 65 53 69 67 6e 61 6c 2e 54  TimelineSignal.T
1d130 79 70 65 2e 43 75 72 76 65 2c 0a 09 20 20 20 20  ype.Curve,..    
1d140 20 20 20 20 20 20 20 20 27 76 61 6c 75 65 27 3a          'value':
1d150 20 66 6c 6f 61 74 73 2c 0a 09 20 20 20 20 20 20   floats,..      
1d160 20 20 20 20 20 20 27 74 69 6d 65 27 3a 20 73 74        'time': st
1d170 61 72 74 54 69 6d 65 2c 0a 09 20 20 20 20 20 20  artTime,..      
1d180 20 20 20 20 20 20 27 64 75 72 61 74 69 6f 6e 27        'duration'
1d190 3a 20 64 75 72 61 74 69 6f 6e 0a 09 20 20 20 20  : duration..    
1d1a0 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 20 20 20      });..       
1d1b0 20 2f 2f 73 65 74 20 74 68 65 20 66 69 72 73 74   //set the first
1d1c0 20 76 61 6c 75 65 0a 09 20 20 20 20 20 20 20 20   value..        
1d1d0 74 68 69 73 2e 5f 70 61 72 61 6d 2e 73 65 74 56  this._param.setV
1d1e0 61 6c 75 65 41 74 54 69 6d 65 28 66 6c 6f 61 74  alueAtTime(float
1d1f0 73 5b 30 5d 2c 20 73 74 61 72 74 54 69 6d 65 29  s[0], startTime)
1d200 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 73 63 68  ;..        //sch
1d210 65 64 75 6c 65 20 61 20 6c 69 65 6e 61 72 20 72  edule a lienar r
1d220 61 6d 70 20 66 6f 72 20 65 61 63 68 20 6f 66 20  amp for each of 
1d230 74 68 65 20 73 65 67 6d 65 6e 74 73 0a 09 20 20  the segments..  
1d240 20 20 20 20 20 20 66 6f 72 20 28 76 61 72 20 6a        for (var j
1d250 20 3d 20 31 3b 20 6a 20 3c 20 66 6c 6f 61 74 73   = 1; j < floats
1d260 2e 6c 65 6e 67 74 68 3b 20 6a 2b 2b 29 20 7b 0a  .length; j++) {.
1d270 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72  .            var
1d280 20 73 65 67 6d 65 6e 74 54 69 6d 65 20 3d 20 73   segmentTime = s
1d290 74 61 72 74 54 69 6d 65 20 2b 20 6a 20 2f 20 28  tartTime + j / (
1d2a0 66 6c 6f 61 74 73 2e 6c 65 6e 67 74 68 20 2d 20  floats.length - 
1d2b0 31 29 20 2a 20 64 75 72 61 74 69 6f 6e 3b 0a 09  1) * duration;..
1d2c0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1d2d0 2e 5f 70 61 72 61 6d 2e 6c 69 6e 65 61 72 52 61  ._param.linearRa
1d2e0 6d 70 54 6f 56 61 6c 75 65 41 74 54 69 6d 65 28  mpToValueAtTime(
1d2f0 66 6c 6f 61 74 73 5b 6a 5d 2c 20 73 65 67 6d 65  floats[j], segme
1d300 6e 74 54 69 6d 65 29 3b 0a 09 20 20 20 20 20 20  ntTime);..      
1d310 20 20 7d 0a 09 20 20 20 20 20 20 20 20 72 65 74    }..        ret
1d320 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
1d330 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
1d340 20 43 61 6e 63 65 6c 73 20 61 6c 6c 20 73 63 68   Cancels all sch
1d350 65 64 75 6c 65 64 20 70 61 72 61 6d 65 74 65 72  eduled parameter
1d360 20 63 68 61 6e 67 65 73 20 77 69 74 68 20 74 69   changes with ti
1d370 6d 65 73 20 67 72 65 61 74 65 72 20 74 68 61 6e  mes greater than
1d380 20 6f 72 20 0a 09 09 20 2a 20 20 65 71 75 61 6c   or ... *  equal
1d390 20 74 6f 20 73 74 61 72 74 54 69 6d 65 2e 0a 09   to startTime...
1d3a0 09 20 2a 20 20 0a 09 09 20 2a 20 20 40 70 61 72  . *  ... *  @par
1d3b0 61 6d 20 20 7b 54 69 6d 65 7d 20 73 74 61 72 74  am  {Time} start
1d3c0 54 69 6d 65 0a 09 09 20 2a 20 20 40 72 65 74 75  Time... *  @retu
1d3d0 72 6e 73 20 7b 54 6f 6e 65 2e 54 69 6d 65 6c 69  rns {Tone.Timeli
1d3e0 6e 65 53 69 67 6e 61 6c 7d 20 74 68 69 73 0a 09  neSignal} this..
1d3f0 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54  . */..    Tone.T
1d400 69 6d 65 6c 69 6e 65 53 69 67 6e 61 6c 2e 70 72  imelineSignal.pr
1d410 6f 74 6f 74 79 70 65 2e 63 61 6e 63 65 6c 53 63  ototype.cancelSc
1d420 68 65 64 75 6c 65 64 56 61 6c 75 65 73 20 3d 20  heduledValues = 
1d430 66 75 6e 63 74 69 6f 6e 20 28 61 66 74 65 72 29  function (after)
1d440 20 7b 0a 09 20 20 20 20 20 20 20 20 61 66 74 65   {..        afte
1d450 72 20 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e  r = this.toSecon
1d460 64 73 28 61 66 74 65 72 29 3b 0a 09 20 20 20 20  ds(after);..    
1d470 20 20 20 20 74 68 69 73 2e 5f 65 76 65 6e 74 73      this._events
1d480 2e 63 61 6e 63 65 6c 28 61 66 74 65 72 29 3b 0a  .cancel(after);.
1d490 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70  .        this._p
1d4a0 61 72 61 6d 2e 63 61 6e 63 65 6c 53 63 68 65 64  aram.cancelSched
1d4b0 75 6c 65 64 56 61 6c 75 65 73 28 61 66 74 65 72  uledValues(after
1d4c0 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
1d4d0 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b  rn this;..    };
1d4e0 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
1d4f0 53 65 74 73 20 74 68 65 20 63 6f 6d 70 75 74 65  Sets the compute
1d500 64 20 76 61 6c 75 65 20 61 74 20 74 68 65 20 67  d value at the g
1d510 69 76 65 6e 20 74 69 6d 65 2e 20 54 68 69 73 20  iven time. This 
1d520 70 72 6f 76 69 64 65 73 0a 09 09 20 2a 20 20 61  provides... *  a
1d530 20 70 6f 69 6e 74 20 66 72 6f 6d 20 77 68 69 63   point from whic
1d540 68 20 61 20 6c 69 6e 65 61 72 20 6f 72 20 65 78  h a linear or ex
1d550 70 6f 6e 65 6e 74 69 61 6c 20 63 75 72 76 65 0a  ponential curve.
1d560 09 09 20 2a 20 20 63 61 6e 20 62 65 20 73 63 68  .. *  can be sch
1d570 65 64 75 6c 65 64 20 61 66 74 65 72 2e 20 57 69  eduled after. Wi
1d580 6c 6c 20 63 61 6e 63 65 6c 20 65 76 65 6e 74 73  ll cancel events
1d590 20 61 66 74 65 72 20 0a 09 09 20 2a 20 20 74 68   after ... *  th
1d5a0 65 20 67 69 76 65 6e 20 74 69 6d 65 20 61 6e 64  e given time and
1d5b0 20 73 68 6f 72 74 65 6e 20 74 68 65 20 63 75 72   shorten the cur
1d5c0 72 65 6e 74 6c 79 20 73 63 68 65 64 75 6c 65 64  rently scheduled
1d5d0 0a 09 09 20 2a 20 20 6c 69 6e 65 61 72 20 6f 72  ... *  linear or
1d5e0 20 65 78 70 6f 6e 65 6e 74 69 61 6c 20 72 61 6d   exponential ram
1d5f0 70 20 73 6f 20 74 68 61 74 20 69 74 20 65 6e 64  p so that it end
1d600 73 20 61 74 20 60 74 69 6d 65 60 20 2e 0a 09 09  s at `time` ....
1d610 20 2a 20 20 54 68 69 73 20 69 73 20 74 6f 20 61   *  This is to a
1d620 76 6f 69 64 20 64 69 73 63 6f 6e 74 69 6e 75 69  void discontinui
1d630 74 69 65 73 20 61 6e 64 20 63 6c 69 63 6b 73 20  ties and clicks 
1d640 69 6e 20 65 6e 76 65 6c 6f 70 65 73 2e 20 0a 09  in envelopes. ..
1d650 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 54 69 6d  . *  @param {Tim
1d660 65 7d 20 74 69 6d 65 20 57 68 65 6e 20 74 6f 20  e} time When to 
1d670 73 65 74 20 74 68 65 20 72 61 6d 70 20 70 6f 69  set the ramp poi
1d680 6e 74 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e  nt... *  @return
1d690 73 20 7b 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65  s {Tone.Timeline
1d6a0 53 69 67 6e 61 6c 7d 20 74 68 69 73 0a 09 09 20  Signal} this... 
1d6b0 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69 6d  */..    Tone.Tim
1d6c0 65 6c 69 6e 65 53 69 67 6e 61 6c 2e 70 72 6f 74  elineSignal.prot
1d6d0 6f 74 79 70 65 2e 73 65 74 52 61 6d 70 50 6f 69  otype.setRampPoi
1d6e0 6e 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74  nt = function (t
1d6f0 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ime) {..        
1d700 74 69 6d 65 20 3d 20 74 68 69 73 2e 74 6f 53 65  time = this.toSe
1d710 63 6f 6e 64 73 28 74 69 6d 65 29 3b 0a 09 20 20  conds(time);..  
1d720 20 20 20 20 20 20 2f 2f 67 65 74 20 74 68 65 20        //get the 
1d730 76 61 6c 75 65 20 61 74 20 74 68 65 20 67 69 76  value at the giv
1d740 65 6e 20 74 69 6d 65 0a 09 20 20 20 20 20 20 20  en time..       
1d750 20 76 61 72 20 76 61 6c 20 3d 20 74 68 69 73 2e   var val = this.
1d760 5f 74 6f 55 6e 69 74 73 28 74 68 69 73 2e 67 65  _toUnits(this.ge
1d770 74 56 61 6c 75 65 41 74 54 69 6d 65 28 74 69 6d  tValueAtTime(tim
1d780 65 29 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f  e));..        //
1d790 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 65  if there is an e
1d7a0 76 65 6e 74 20 61 74 20 74 68 65 20 67 69 76 65  vent at the give
1d7b0 6e 20 74 69 6d 65 0a 09 20 20 20 20 20 20 20 20  n time..        
1d7c0 2f 2f 61 6e 64 20 74 68 61 74 20 65 76 65 6e 20  //and that even 
1d7d0 69 73 20 6e 6f 74 20 61 20 22 73 65 74 22 0a 09  is not a "set"..
1d7e0 20 20 20 20 20 20 20 20 76 61 72 20 62 65 66 6f          var befo
1d7f0 72 65 20 3d 20 74 68 69 73 2e 5f 73 65 61 72 63  re = this._searc
1d800 68 42 65 66 6f 72 65 28 74 69 6d 65 29 3b 0a 09  hBefore(time);..
1d810 20 20 20 20 20 20 20 20 69 66 20 28 62 65 66 6f          if (befo
1d820 72 65 20 26 26 20 62 65 66 6f 72 65 2e 74 69 6d  re && before.tim
1d830 65 20 3d 3d 3d 20 74 69 6d 65 29 20 7b 0a 09 20  e === time) {.. 
1d840 20 20 20 20 20 20 20 20 20 20 20 2f 2f 72 65 6d             //rem
1d850 6f 76 65 20 65 76 65 72 79 74 68 69 6e 67 20 61  ove everything a
1d860 66 74 65 72 0a 09 20 20 20 20 20 20 20 20 20 20  fter..          
1d870 20 20 74 68 69 73 2e 63 61 6e 63 65 6c 53 63 68    this.cancelSch
1d880 65 64 75 6c 65 64 56 61 6c 75 65 73 28 74 69 6d  eduledValues(tim
1d890 65 20 2b 20 74 68 69 73 2e 73 61 6d 70 6c 65 54  e + this.sampleT
1d8a0 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 7d  ime);..        }
1d8b0 20 65 6c 73 65 20 69 66 20 28 62 65 66 6f 72 65   else if (before
1d8c0 20 26 26 20 62 65 66 6f 72 65 2e 74 79 70 65 20   && before.type 
1d8d0 3d 3d 3d 20 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e  === Tone.Timelin
1d8e0 65 53 69 67 6e 61 6c 2e 54 79 70 65 2e 43 75 72  eSignal.Type.Cur
1d8f0 76 65 20 26 26 20 62 65 66 6f 72 65 2e 74 69 6d  ve && before.tim
1d900 65 20 2b 20 62 65 66 6f 72 65 2e 64 75 72 61 74  e + before.durat
1d910 69 6f 6e 20 3e 20 74 69 6d 65 29 20 7b 0a 09 20  ion > time) {.. 
1d920 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66 20             //if 
1d930 74 68 65 20 63 75 72 76 65 20 69 73 20 73 74 69  the curve is sti
1d940 6c 6c 20 70 6c 61 79 69 6e 67 0a 09 20 20 20 20  ll playing..    
1d950 20 20 20 20 20 20 20 20 2f 2f 63 61 6e 63 65 6c          //cancel
1d960 20 74 68 65 20 63 75 72 76 65 0a 09 20 20 20 20   the curve..    
1d970 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 61 6e          this.can
1d980 63 65 6c 53 63 68 65 64 75 6c 65 64 56 61 6c 75  celScheduledValu
1d990 65 73 28 74 69 6d 65 29 3b 0a 09 20 20 20 20 20  es(time);..     
1d9a0 20 20 20 20 20 20 20 74 68 69 73 2e 6c 69 6e 65         this.line
1d9b0 61 72 52 61 6d 70 54 6f 56 61 6c 75 65 41 74 54  arRampToValueAtT
1d9c0 69 6d 65 28 76 61 6c 2c 20 74 69 6d 65 29 3b 0a  ime(val, time);.
1d9d0 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else 
1d9e0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
1d9f0 2f 72 65 73 63 68 65 64 75 6c 65 20 74 68 65 20  /reschedule the 
1da00 6e 65 78 74 20 65 76 65 6e 74 20 74 6f 20 65 6e  next event to en
1da10 64 20 61 74 20 74 68 65 20 67 69 76 65 6e 20 74  d at the given t
1da20 69 6d 65 0a 09 20 20 20 20 20 20 20 20 20 20 20  ime..           
1da30 20 76 61 72 20 61 66 74 65 72 20 3d 20 74 68 69   var after = thi
1da40 73 2e 5f 73 65 61 72 63 68 41 66 74 65 72 28 74  s._searchAfter(t
1da50 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 20  ime);..         
1da60 20 20 20 69 66 20 28 61 66 74 65 72 29 20 7b 0a     if (after) {.
1da70 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1da80 20 2f 2f 63 61 6e 63 65 6c 20 74 68 65 20 6e 65   //cancel the ne
1da90 78 74 20 65 76 65 6e 74 28 73 29 0a 09 20 20 20  xt event(s)..   
1daa0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
1dab0 73 2e 63 61 6e 63 65 6c 53 63 68 65 64 75 6c 65  s.cancelSchedule
1dac0 64 56 61 6c 75 65 73 28 74 69 6d 65 29 3b 0a 09  dValues(time);..
1dad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dae0 69 66 20 28 61 66 74 65 72 2e 74 79 70 65 20 3d  if (after.type =
1daf0 3d 3d 20 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65  == Tone.Timeline
1db00 53 69 67 6e 61 6c 2e 54 79 70 65 2e 4c 69 6e 65  Signal.Type.Line
1db10 61 72 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ar) {..         
1db20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
1db30 6c 69 6e 65 61 72 52 61 6d 70 54 6f 56 61 6c 75  linearRampToValu
1db40 65 41 74 54 69 6d 65 28 76 61 6c 2c 20 74 69 6d  eAtTime(val, tim
1db50 65 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e);..           
1db60 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28       } else if (
1db70 61 66 74 65 72 2e 74 79 70 65 20 3d 3d 3d 20 54  after.type === T
1db80 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 53 69 67 6e  one.TimelineSign
1db90 61 6c 2e 54 79 70 65 2e 45 78 70 6f 6e 65 6e 74  al.Type.Exponent
1dba0 69 61 6c 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ial) {..        
1dbb0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1dbc0 2e 65 78 70 6f 6e 65 6e 74 69 61 6c 52 61 6d 70  .exponentialRamp
1dbd0 54 6f 56 61 6c 75 65 41 74 54 69 6d 65 28 76 61  ToValueAtTime(va
1dbe0 6c 2c 20 74 69 6d 65 29 3b 0a 09 20 20 20 20 20  l, time);..     
1dbf0 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20             }..  
1dc00 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20            }..   
1dc10 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 65           this.se
1dc20 74 56 61 6c 75 65 41 74 54 69 6d 65 28 76 61 6c  tValueAtTime(val
1dc30 2c 20 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20  , time);..      
1dc40 20 20 7d 0a 09 20 20 20 20 20 20 20 20 72 65 74    }..        ret
1dc50 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
1dc60 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
1dc70 20 44 6f 20 61 20 6c 69 6e 65 61 72 20 72 61 6d   Do a linear ram
1dc80 70 20 74 6f 20 74 68 65 20 67 69 76 65 6e 20 76  p to the given v
1dc90 61 6c 75 65 20 62 65 74 77 65 65 6e 20 74 68 65  alue between the
1dca0 20 73 74 61 72 74 20 61 6e 64 20 66 69 6e 69 73   start and finis
1dcb0 68 20 74 69 6d 65 73 2e 0a 09 09 20 2a 20 20 40  h times.... *  @
1dcc0 70 61 72 61 6d 20 7b 4e 75 6d 62 65 72 7d 20 76  param {Number} v
1dcd0 61 6c 75 65 20 54 68 65 20 76 61 6c 75 65 20 74  alue The value t
1dce0 6f 20 72 61 6d 70 20 74 6f 2e 0a 09 09 20 2a 20  o ramp to.... * 
1dcf0 20 40 70 61 72 61 6d 20 7b 54 69 6d 65 7d 20 73   @param {Time} s
1dd00 74 61 72 74 20 54 68 65 20 62 65 67 69 6e 6e 69  tart The beginni
1dd10 6e 67 20 61 6e 63 68 6f 72 20 70 6f 69 6e 74 20  ng anchor point 
1dd20 74 6f 20 64 6f 20 74 68 65 20 6c 69 6e 65 61 72  to do the linear
1dd30 20 72 61 6d 70 0a 09 09 20 2a 20 20 40 70 61 72   ramp... *  @par
1dd40 61 6d 20 7b 54 69 6d 65 7d 20 66 69 6e 69 73 68  am {Time} finish
1dd50 20 54 68 65 20 65 6e 64 69 6e 67 20 61 6e 63 68   The ending anch
1dd60 6f 72 20 70 6f 69 6e 74 20 62 79 20 77 68 69 63  or point by whic
1dd70 68 20 74 68 65 20 76 61 6c 75 65 20 6f 66 0a 09  h the value of..
1dd80 09 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1dd90 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73 69            the si
1dda0 67 6e 61 6c 20 77 69 6c 6c 20 65 71 75 61 6c 20  gnal will equal 
1ddb0 74 68 65 20 67 69 76 65 6e 20 76 61 6c 75 65 2e  the given value.
1ddc0 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20  ... *  @returns 
1ddd0 7b 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 53 69  {Tone.TimelineSi
1dde0 67 6e 61 6c 7d 20 74 68 69 73 0a 09 09 20 2a 2f  gnal} this... */
1ddf0 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65 6c  ..    Tone.Timel
1de00 69 6e 65 53 69 67 6e 61 6c 2e 70 72 6f 74 6f 74  ineSignal.protot
1de10 79 70 65 2e 6c 69 6e 65 61 72 52 61 6d 70 54 6f  ype.linearRampTo
1de20 56 61 6c 75 65 42 65 74 77 65 65 6e 20 3d 20 66  ValueBetween = f
1de30 75 6e 63 74 69 6f 6e 20 28 76 61 6c 75 65 2c 20  unction (value, 
1de40 73 74 61 72 74 2c 20 66 69 6e 69 73 68 29 20 7b  start, finish) {
1de50 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 73  ..        this.s
1de60 65 74 52 61 6d 70 50 6f 69 6e 74 28 73 74 61 72  etRampPoint(star
1de70 74 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  t);..        thi
1de80 73 2e 6c 69 6e 65 61 72 52 61 6d 70 54 6f 56 61  s.linearRampToVa
1de90 6c 75 65 41 74 54 69 6d 65 28 76 61 6c 75 65 2c  lueAtTime(value,
1dea0 20 66 69 6e 69 73 68 29 3b 0a 09 20 20 20 20 20   finish);..     
1deb0 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a     return this;.
1dec0 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
1ded0 0a 09 09 20 2a 20 20 44 6f 20 61 20 65 78 70 6f  ... *  Do a expo
1dee0 6e 65 6e 74 69 61 6c 20 72 61 6d 70 20 74 6f 20  nential ramp to 
1def0 74 68 65 20 67 69 76 65 6e 20 76 61 6c 75 65 20  the given value 
1df00 62 65 74 77 65 65 6e 20 74 68 65 20 73 74 61 72  between the star
1df10 74 20 61 6e 64 20 66 69 6e 69 73 68 20 74 69 6d  t and finish tim
1df20 65 73 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  es.... *  @param
1df30 20 7b 4e 75 6d 62 65 72 7d 20 76 61 6c 75 65 20   {Number} value 
1df40 54 68 65 20 76 61 6c 75 65 20 74 6f 20 72 61 6d  The value to ram
1df50 70 20 74 6f 2e 0a 09 09 20 2a 20 20 40 70 61 72  p to.... *  @par
1df60 61 6d 20 7b 54 69 6d 65 7d 20 73 74 61 72 74 20  am {Time} start 
1df70 54 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e  The beginning an
1df80 63 68 6f 72 20 70 6f 69 6e 74 20 74 6f 20 64 6f  chor point to do
1df90 20 74 68 65 20 65 78 70 6f 6e 65 6e 74 69 61 6c   the exponential
1dfa0 20 72 61 6d 70 0a 09 09 20 2a 20 20 40 70 61 72   ramp... *  @par
1dfb0 61 6d 20 7b 54 69 6d 65 7d 20 66 69 6e 69 73 68  am {Time} finish
1dfc0 20 54 68 65 20 65 6e 64 69 6e 67 20 61 6e 63 68   The ending anch
1dfd0 6f 72 20 70 6f 69 6e 74 20 62 79 20 77 68 69 63  or point by whic
1dfe0 68 20 74 68 65 20 76 61 6c 75 65 20 6f 66 0a 09  h the value of..
1dff0 09 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1e000 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73 69            the si
1e010 67 6e 61 6c 20 77 69 6c 6c 20 65 71 75 61 6c 20  gnal will equal 
1e020 74 68 65 20 67 69 76 65 6e 20 76 61 6c 75 65 2e  the given value.
1e030 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20  ... *  @returns 
1e040 7b 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 53 69  {Tone.TimelineSi
1e050 67 6e 61 6c 7d 20 74 68 69 73 0a 09 09 20 2a 2f  gnal} this... */
1e060 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65 6c  ..    Tone.Timel
1e070 69 6e 65 53 69 67 6e 61 6c 2e 70 72 6f 74 6f 74  ineSignal.protot
1e080 79 70 65 2e 65 78 70 6f 6e 65 6e 74 69 61 6c 52  ype.exponentialR
1e090 61 6d 70 54 6f 56 61 6c 75 65 42 65 74 77 65 65  ampToValueBetwee
1e0a0 6e 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 76 61  n = function (va
1e0b0 6c 75 65 2c 20 73 74 61 72 74 2c 20 66 69 6e 69  lue, start, fini
1e0c0 73 68 29 20 7b 0a 09 20 20 20 20 20 20 20 20 74  sh) {..        t
1e0d0 68 69 73 2e 73 65 74 52 61 6d 70 50 6f 69 6e 74  his.setRampPoint
1e0e0 28 73 74 61 72 74 29 3b 0a 09 20 20 20 20 20 20  (start);..      
1e0f0 20 20 74 68 69 73 2e 65 78 70 6f 6e 65 6e 74 69    this.exponenti
1e100 61 6c 52 61 6d 70 54 6f 56 61 6c 75 65 41 74 54  alRampToValueAtT
1e110 69 6d 65 28 76 61 6c 75 65 2c 20 66 69 6e 69 73  ime(value, finis
1e120 68 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74  h);..        ret
1e130 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
1e140 3b 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ;..    /////////
1e150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e190 2f 2f 0a 09 20 20 20 20 2f 2f 09 47 45 54 54 49  //..    //.GETTI
1e1a0 4e 47 20 53 43 48 45 44 55 4c 45 44 20 56 41 4c  NG SCHEDULED VAL
1e1b0 55 45 53 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  UES..    ///////
1e1c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e1d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e200 2f 2f 2f 2f 0a 09 20 20 20 20 2f 2a 2a 0a 09 09  ////..    /**...
1e210 20 2a 20 20 52 65 74 75 72 6e 73 20 74 68 65 20   *  Returns the 
1e220 76 61 6c 75 65 20 62 65 66 6f 72 65 20 6f 72 20  value before or 
1e230 65 71 75 61 6c 20 74 6f 20 74 68 65 20 67 69 76  equal to the giv
1e240 65 6e 20 74 69 6d 65 0a 09 09 20 2a 20 20 40 70  en time... *  @p
1e250 61 72 61 6d 20 20 7b 4e 75 6d 62 65 72 7d 20 20  aram  {Number}  
1e260 74 69 6d 65 20 20 54 68 65 20 74 69 6d 65 20 74  time  The time t
1e270 6f 20 71 75 65 72 79 0a 09 09 20 2a 20 20 40 72  o query... *  @r
1e280 65 74 75 72 6e 20 20 7b 4f 62 6a 65 63 74 7d 20  eturn  {Object} 
1e290 20 54 68 65 20 65 76 65 6e 74 20 61 74 20 6f 72   The event at or
1e2a0 20 62 65 66 6f 72 65 20 74 68 65 20 67 69 76 65   before the give
1e2b0 6e 20 74 69 6d 65 2e 0a 09 09 20 2a 20 20 40 70  n time.... *  @p
1e2c0 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20  rivate... */..  
1e2d0 20 20 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 53    Tone.TimelineS
1e2e0 69 67 6e 61 6c 2e 70 72 6f 74 6f 74 79 70 65 2e  ignal.prototype.
1e2f0 5f 73 65 61 72 63 68 42 65 66 6f 72 65 20 3d 20  _searchBefore = 
1e300 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65 29 20  function (time) 
1e310 7b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
1e320 6e 20 74 68 69 73 2e 5f 65 76 65 6e 74 73 2e 67  n this._events.g
1e330 65 74 28 74 69 6d 65 29 3b 0a 09 20 20 20 20 7d  et(time);..    }
1e340 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
1e350 20 54 68 65 20 65 76 65 6e 74 20 61 66 74 65 72   The event after
1e360 20 74 68 65 20 67 69 76 65 6e 20 74 69 6d 65 0a   the given time.
1e370 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 4e  .. *  @param  {N
1e380 75 6d 62 65 72 7d 20 20 74 69 6d 65 20 20 54 68  umber}  time  Th
1e390 65 20 74 69 6d 65 20 74 6f 20 71 75 65 72 79 2e  e time to query.
1e3a0 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 20  ... *  @return  
1e3b0 7b 4f 62 6a 65 63 74 7d 20 20 54 68 65 20 6e 65  {Object}  The ne
1e3c0 78 74 20 65 76 65 6e 74 20 61 66 74 65 72 20 74  xt event after t
1e3d0 68 65 20 67 69 76 65 6e 20 74 69 6d 65 0a 09 09  he given time...
1e3e0 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 20   *  @private... 
1e3f0 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69 6d  */..    Tone.Tim
1e400 65 6c 69 6e 65 53 69 67 6e 61 6c 2e 70 72 6f 74  elineSignal.prot
1e410 6f 74 79 70 65 2e 5f 73 65 61 72 63 68 41 66 74  otype._searchAft
1e420 65 72 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74  er = function (t
1e430 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ime) {..        
1e440 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 65 76 65  return this._eve
1e450 6e 74 73 2e 67 65 74 41 66 74 65 72 28 74 69 6d  nts.getAfter(tim
1e460 65 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  e);..    };..   
1e470 20 2f 2a 2a 0a 09 09 20 2a 20 20 47 65 74 20 74   /**... *  Get t
1e480 68 65 20 73 63 68 65 64 75 6c 65 64 20 76 61 6c  he scheduled val
1e490 75 65 20 61 74 20 74 68 65 20 67 69 76 65 6e 20  ue at the given 
1e4a0 74 69 6d 65 2e 20 54 68 69 73 20 77 69 6c 6c 0a  time. This will.
1e4b0 09 09 20 2a 20 20 72 65 74 75 72 6e 20 74 68 65  .. *  return the
1e4c0 20 75 6e 63 6f 6e 76 65 72 74 65 64 20 28 72 61   unconverted (ra
1e4d0 77 29 20 76 61 6c 75 65 2e 0a 09 09 20 2a 20 20  w) value.... *  
1e4e0 40 70 61 72 61 6d 20 20 7b 4e 75 6d 62 65 72 7d  @param  {Number}
1e4f0 20 20 74 69 6d 65 20 20 54 68 65 20 74 69 6d 65    time  The time
1e500 20 69 6e 20 73 65 63 6f 6e 64 73 2e 0a 09 09 20   in seconds.... 
1e510 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 4e 75 6d  *  @return  {Num
1e520 62 65 72 7d 20 20 54 68 65 20 73 63 68 65 64 75  ber}  The schedu
1e530 6c 65 64 20 76 61 6c 75 65 20 61 74 20 74 68 65  led value at the
1e540 20 67 69 76 65 6e 20 74 69 6d 65 2e 0a 09 09 20   given time.... 
1e550 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69 6d  */..    Tone.Tim
1e560 65 6c 69 6e 65 53 69 67 6e 61 6c 2e 70 72 6f 74  elineSignal.prot
1e570 6f 74 79 70 65 2e 67 65 74 56 61 6c 75 65 41 74  otype.getValueAt
1e580 54 69 6d 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20  Time = function 
1e590 28 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20  (time) {..      
1e5a0 20 20 74 69 6d 65 20 3d 20 74 68 69 73 2e 74 6f    time = this.to
1e5b0 53 65 63 6f 6e 64 73 28 74 69 6d 65 29 3b 0a 09  Seconds(time);..
1e5c0 20 20 20 20 20 20 20 20 76 61 72 20 61 66 74 65          var afte
1e5d0 72 20 3d 20 74 68 69 73 2e 5f 73 65 61 72 63 68  r = this._search
1e5e0 41 66 74 65 72 28 74 69 6d 65 29 3b 0a 09 20 20  After(time);..  
1e5f0 20 20 20 20 20 20 76 61 72 20 62 65 66 6f 72 65        var before
1e600 20 3d 20 74 68 69 73 2e 5f 73 65 61 72 63 68 42   = this._searchB
1e610 65 66 6f 72 65 28 74 69 6d 65 29 3b 0a 09 20 20  efore(time);..  
1e620 20 20 20 20 20 20 76 61 72 20 76 61 6c 75 65 20        var value 
1e630 3d 20 74 68 69 73 2e 5f 69 6e 69 74 69 61 6c 3b  = this._initial;
1e640 0a 09 20 20 20 20 20 20 20 20 2f 2f 69 66 20 69  ..        //if i
1e650 74 20 77 61 73 20 73 65 74 20 62 79 0a 09 20 20  t was set by..  
1e660 20 20 20 20 20 20 69 66 20 28 62 65 66 6f 72 65        if (before
1e670 20 3d 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 09 20 20   === null) {..  
1e680 20 20 20 20 20 20 20 20 20 20 76 61 6c 75 65 20            value 
1e690 3d 20 74 68 69 73 2e 5f 69 6e 69 74 69 61 6c 3b  = this._initial;
1e6a0 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
1e6b0 20 69 66 20 28 62 65 66 6f 72 65 2e 74 79 70 65   if (before.type
1e6c0 20 3d 3d 3d 20 54 6f 6e 65 2e 54 69 6d 65 6c 69   === Tone.Timeli
1e6d0 6e 65 53 69 67 6e 61 6c 2e 54 79 70 65 2e 54 61  neSignal.Type.Ta
1e6e0 72 67 65 74 29 20 7b 0a 09 20 20 20 20 20 20 20  rget) {..       
1e6f0 20 20 20 20 20 76 61 72 20 70 72 65 76 69 6f 75       var previou
1e700 73 20 3d 20 74 68 69 73 2e 5f 65 76 65 6e 74 73  s = this._events
1e710 2e 67 65 74 42 65 66 6f 72 65 28 62 65 66 6f 72  .getBefore(befor
1e720 65 2e 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20  e.time);..      
1e730 20 20 20 20 20 20 76 61 72 20 70 72 65 76 69 6f        var previo
1e740 75 56 61 6c 3b 0a 09 20 20 20 20 20 20 20 20 20  uVal;..         
1e750 20 20 20 69 66 20 28 70 72 65 76 69 6f 75 73 20     if (previous 
1e760 3d 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 09 20 20 20  === null) {..   
1e770 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65               pre
1e780 76 69 6f 75 56 61 6c 20 3d 20 74 68 69 73 2e 5f  viouVal = this._
1e790 69 6e 69 74 69 61 6c 3b 0a 09 20 20 20 20 20 20  initial;..      
1e7a0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09        } else {..
1e7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7c0 70 72 65 76 69 6f 75 56 61 6c 20 3d 20 70 72 65  previouVal = pre
1e7d0 76 69 6f 75 73 2e 76 61 6c 75 65 3b 0a 09 20 20  vious.value;..  
1e7e0 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20            }..   
1e7f0 20 20 20 20 20 20 20 20 20 76 61 6c 75 65 20 3d           value =
1e800 20 74 68 69 73 2e 5f 65 78 70 6f 6e 65 6e 74 69   this._exponenti
1e810 61 6c 41 70 70 72 6f 61 63 68 28 62 65 66 6f 72  alApproach(befor
1e820 65 2e 74 69 6d 65 2c 20 70 72 65 76 69 6f 75 56  e.time, previouV
1e830 61 6c 2c 20 62 65 66 6f 72 65 2e 76 61 6c 75 65  al, before.value
1e840 2c 20 62 65 66 6f 72 65 2e 63 6f 6e 73 74 61 6e  , before.constan
1e850 74 2c 20 74 69 6d 65 29 3b 0a 09 20 20 20 20 20  t, time);..     
1e860 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 62 65     } else if (be
1e870 66 6f 72 65 2e 74 79 70 65 20 3d 3d 3d 20 54 6f  fore.type === To
1e880 6e 65 2e 54 69 6d 65 6c 69 6e 65 53 69 67 6e 61  ne.TimelineSigna
1e890 6c 2e 54 79 70 65 2e 43 75 72 76 65 29 20 7b 0a  l.Type.Curve) {.
1e8a0 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61 6c  .            val
1e8b0 75 65 20 3d 20 74 68 69 73 2e 5f 63 75 72 76 65  ue = this._curve
1e8c0 49 6e 74 65 72 70 6f 6c 61 74 65 28 62 65 66 6f  Interpolate(befo
1e8d0 72 65 2e 74 69 6d 65 2c 20 62 65 66 6f 72 65 2e  re.time, before.
1e8e0 76 61 6c 75 65 2c 20 62 65 66 6f 72 65 2e 64 75  value, before.du
1e8f0 72 61 74 69 6f 6e 2c 20 74 69 6d 65 29 3b 0a 09  ration, time);..
1e900 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69          } else i
1e910 66 20 28 61 66 74 65 72 20 3d 3d 3d 20 6e 75 6c  f (after === nul
1e920 6c 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  l) {..          
1e930 20 20 76 61 6c 75 65 20 3d 20 62 65 66 6f 72 65    value = before
1e940 2e 76 61 6c 75 65 3b 0a 09 20 20 20 20 20 20 20  .value;..       
1e950 20 7d 20 65 6c 73 65 20 69 66 20 28 61 66 74 65   } else if (afte
1e960 72 2e 74 79 70 65 20 3d 3d 3d 20 54 6f 6e 65 2e  r.type === Tone.
1e970 54 69 6d 65 6c 69 6e 65 53 69 67 6e 61 6c 2e 54  TimelineSignal.T
1e980 79 70 65 2e 4c 69 6e 65 61 72 29 20 7b 0a 09 20  ype.Linear) {.. 
1e990 20 20 20 20 20 20 20 20 20 20 20 76 61 6c 75 65             value
1e9a0 20 3d 20 74 68 69 73 2e 5f 6c 69 6e 65 61 72 49   = this._linearI
1e9b0 6e 74 65 72 70 6f 6c 61 74 65 28 62 65 66 6f 72  nterpolate(befor
1e9c0 65 2e 74 69 6d 65 2c 20 62 65 66 6f 72 65 2e 76  e.time, before.v
1e9d0 61 6c 75 65 2c 20 61 66 74 65 72 2e 74 69 6d 65  alue, after.time
1e9e0 2c 20 61 66 74 65 72 2e 76 61 6c 75 65 2c 20 74  , after.value, t
1e9f0 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 7d  ime);..        }
1ea00 20 65 6c 73 65 20 69 66 20 28 61 66 74 65 72 2e   else if (after.
1ea10 74 79 70 65 20 3d 3d 3d 20 54 6f 6e 65 2e 54 69  type === Tone.Ti
1ea20 6d 65 6c 69 6e 65 53 69 67 6e 61 6c 2e 54 79 70  melineSignal.Typ
1ea30 65 2e 45 78 70 6f 6e 65 6e 74 69 61 6c 29 20 7b  e.Exponential) {
1ea40 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61  ..            va
1ea50 6c 75 65 20 3d 20 74 68 69 73 2e 5f 65 78 70 6f  lue = this._expo
1ea60 6e 65 6e 74 69 61 6c 49 6e 74 65 72 70 6f 6c 61  nentialInterpola
1ea70 74 65 28 62 65 66 6f 72 65 2e 74 69 6d 65 2c 20  te(before.time, 
1ea80 62 65 66 6f 72 65 2e 76 61 6c 75 65 2c 20 61 66  before.value, af
1ea90 74 65 72 2e 74 69 6d 65 2c 20 61 66 74 65 72 2e  ter.time, after.
1eaa0 76 61 6c 75 65 2c 20 74 69 6d 65 29 3b 0a 09 20  value, time);.. 
1eab0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
1eac0 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61 6c  .            val
1ead0 75 65 20 3d 20 62 65 66 6f 72 65 2e 76 61 6c 75  ue = before.valu
1eae0 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  e;..        }.. 
1eaf0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61         return va
1eb00 6c 75 65 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  lue;..    };..  
1eb10 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 57 68 65 6e    /**... *  When
1eb20 20 73 69 67 6e 61 6c 73 20 63 6f 6e 6e 65 63 74   signals connect
1eb30 20 74 6f 20 6f 74 68 65 72 20 73 69 67 6e 61 6c   to other signal
1eb40 73 20 6f 72 20 41 75 64 69 6f 50 61 72 61 6d 73  s or AudioParams
1eb50 2c 20 0a 09 09 20 2a 20 20 74 68 65 79 20 74 61  , ... *  they ta
1eb60 6b 65 20 6f 76 65 72 20 74 68 65 20 6f 75 74 70  ke over the outp
1eb70 75 74 20 76 61 6c 75 65 20 6f 66 20 74 68 61 74  ut value of that
1eb80 20 73 69 67 6e 61 6c 20 6f 72 20 41 75 64 69 6f   signal or Audio
1eb90 50 61 72 61 6d 2e 20 0a 09 09 20 2a 20 20 46 6f  Param. ... *  Fo
1eba0 72 20 61 6c 6c 20 6f 74 68 65 72 20 6e 6f 64 65  r all other node
1ebb0 73 2c 20 74 68 65 20 62 65 68 61 76 69 6f 72 20  s, the behavior 
1ebc0 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 61  is the same as a
1ebd0 20 64 65 66 61 75 6c 74 20 3c 63 6f 64 65 3e 63   default <code>c
1ebe0 6f 6e 6e 65 63 74 3c 2f 63 6f 64 65 3e 2e 20 0a  onnect</code>. .
1ebf0 09 09 20 2a 0a 09 09 20 2a 20 20 40 6f 76 65 72  .. *... *  @over
1ec00 72 69 64 65 0a 09 09 20 2a 20 20 40 70 61 72 61  ride... *  @para
1ec10 6d 20 7b 41 75 64 69 6f 50 61 72 61 6d 7c 41 75  m {AudioParam|Au
1ec20 64 69 6f 4e 6f 64 65 7c 54 6f 6e 65 2e 53 69 67  dioNode|Tone.Sig
1ec30 6e 61 6c 7c 54 6f 6e 65 7d 20 6e 6f 64 65 20 0a  nal|Tone} node .
1ec40 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 6e 75  .. *  @param {nu
1ec50 6d 62 65 72 7d 20 5b 6f 75 74 70 75 74 4e 75 6d  mber} [outputNum
1ec60 62 65 72 3d 30 5d 20 54 68 65 20 6f 75 74 70 75  ber=0] The outpu
1ec70 74 20 6e 75 6d 62 65 72 20 74 6f 20 63 6f 6e 6e  t number to conn
1ec80 65 63 74 20 66 72 6f 6d 2e 0a 09 09 20 2a 20 20  ect from.... *  
1ec90 40 70 61 72 61 6d 20 7b 6e 75 6d 62 65 72 7d 20  @param {number} 
1eca0 5b 69 6e 70 75 74 4e 75 6d 62 65 72 3d 30 5d 20  [inputNumber=0] 
1ecb0 54 68 65 20 69 6e 70 75 74 20 6e 75 6d 62 65 72  The input number
1ecc0 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 6f 2e 0a   to connect to..
1ecd0 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b  .. *  @returns {
1ece0 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 53 69 67  Tone.TimelineSig
1ecf0 6e 61 6c 7d 20 74 68 69 73 0a 09 09 20 2a 20 20  nal} this... *  
1ed00 40 6d 65 74 68 6f 64 0a 09 09 20 2a 2f 0a 09 20  @method... */.. 
1ed10 20 20 20 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65     Tone.Timeline
1ed20 53 69 67 6e 61 6c 2e 70 72 6f 74 6f 74 79 70 65  Signal.prototype
1ed30 2e 63 6f 6e 6e 65 63 74 20 3d 20 54 6f 6e 65 2e  .connect = Tone.
1ed40 53 69 67 6e 61 6c 42 61 73 65 2e 70 72 6f 74 6f  SignalBase.proto
1ed50 74 79 70 65 2e 63 6f 6e 6e 65 63 74 3b 0a 09 20  type.connect;.. 
1ed60 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1ed70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09  //////////////..
1edb0 20 20 20 20 2f 2f 09 41 55 54 4f 4d 41 54 49 4f      //.AUTOMATIO
1edc0 4e 20 43 55 52 56 45 20 43 41 4c 43 55 4c 41 54  N CURVE CALCULAT
1edd0 49 4f 4e 53 0a 09 20 20 20 20 2f 2f 09 4d 49 54  IONS..    //.MIT
1ede0 20 4c 69 63 65 6e 73 65 2c 20 63 6f 70 79 72 69   License, copyri
1edf0 67 68 74 20 28 63 29 20 32 30 31 34 20 4a 6f 72  ght (c) 2014 Jor
1ee00 64 61 6e 20 53 61 6e 74 65 6c 6c 0a 09 20 20 20  dan Santell..   
1ee10 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1ee20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20  ////////////..  
1ee60 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 61 6c 63    /**... *  Calc
1ee70 75 6c 61 74 65 73 20 74 68 65 20 74 68 65 20 76  ulates the the v
1ee80 61 6c 75 65 20 61 6c 6f 6e 67 20 74 68 65 20 63  alue along the c
1ee90 75 72 76 65 20 70 72 6f 64 75 63 65 64 20 62 79  urve produced by
1eea0 20 73 65 74 54 61 72 67 65 74 41 74 54 69 6d 65   setTargetAtTime
1eeb0 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
1eec0 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
1eed0 54 69 6d 65 6c 69 6e 65 53 69 67 6e 61 6c 2e 70  TimelineSignal.p
1eee0 72 6f 74 6f 74 79 70 65 2e 5f 65 78 70 6f 6e 65  rototype._expone
1eef0 6e 74 69 61 6c 41 70 70 72 6f 61 63 68 20 3d 20  ntialApproach = 
1ef00 66 75 6e 63 74 69 6f 6e 20 28 74 30 2c 20 76 30  function (t0, v0
1ef10 2c 20 76 31 2c 20 74 69 6d 65 43 6f 6e 73 74 61  , v1, timeConsta
1ef20 6e 74 2c 20 74 29 20 7b 0a 09 20 20 20 20 20 20  nt, t) {..      
1ef30 20 20 72 65 74 75 72 6e 20 76 31 20 2b 20 28 76    return v1 + (v
1ef40 30 20 2d 20 76 31 29 20 2a 20 4d 61 74 68 2e 65  0 - v1) * Math.e
1ef50 78 70 28 2d 28 74 20 2d 20 74 30 29 20 2f 20 74  xp(-(t - t0) / t
1ef60 69 6d 65 43 6f 6e 73 74 61 6e 74 29 3b 0a 09 20  imeConstant);.. 
1ef70 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09     };..    /**..
1ef80 09 20 2a 20 20 43 61 6c 63 75 6c 61 74 65 73 20  . *  Calculates 
1ef90 74 68 65 20 74 68 65 20 76 61 6c 75 65 20 61 6c  the the value al
1efa0 6f 6e 67 20 74 68 65 20 63 75 72 76 65 20 70 72  ong the curve pr
1efb0 6f 64 75 63 65 64 20 62 79 20 6c 69 6e 65 61 72  oduced by linear
1efc0 52 61 6d 70 54 6f 56 61 6c 75 65 41 74 54 69 6d  RampToValueAtTim
1efd0 65 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  e... *  @private
1efe0 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
1eff0 2e 54 69 6d 65 6c 69 6e 65 53 69 67 6e 61 6c 2e  .TimelineSignal.
1f000 70 72 6f 74 6f 74 79 70 65 2e 5f 6c 69 6e 65 61  prototype._linea
1f010 72 49 6e 74 65 72 70 6f 6c 61 74 65 20 3d 20 66  rInterpolate = f
1f020 75 6e 63 74 69 6f 6e 20 28 74 30 2c 20 76 30 2c  unction (t0, v0,
1f030 20 74 31 2c 20 76 31 2c 20 74 29 20 7b 0a 09 20   t1, v1, t) {.. 
1f040 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 30         return v0
1f050 20 2b 20 28 76 31 20 2d 20 76 30 29 20 2a 20 28   + (v1 - v0) * (
1f060 28 74 20 2d 20 74 30 29 20 2f 20 28 74 31 20 2d  (t - t0) / (t1 -
1f070 20 74 30 29 29 3b 0a 09 20 20 20 20 7d 3b 0a 09   t0));..    };..
1f080 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 61      /**... *  Ca
1f090 6c 63 75 6c 61 74 65 73 20 74 68 65 20 74 68 65  lculates the the
1f0a0 20 76 61 6c 75 65 20 61 6c 6f 6e 67 20 74 68 65   value along the
1f0b0 20 63 75 72 76 65 20 70 72 6f 64 75 63 65 64 20   curve produced 
1f0c0 62 79 20 65 78 70 6f 6e 65 6e 74 69 61 6c 52 61  by exponentialRa
1f0d0 6d 70 54 6f 56 61 6c 75 65 41 74 54 69 6d 65 0a  mpToValueAtTime.
1f0e0 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
1f0f0 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54  . */..    Tone.T
1f100 69 6d 65 6c 69 6e 65 53 69 67 6e 61 6c 2e 70 72  imelineSignal.pr
1f110 6f 74 6f 74 79 70 65 2e 5f 65 78 70 6f 6e 65 6e  ototype._exponen
1f120 74 69 61 6c 49 6e 74 65 72 70 6f 6c 61 74 65 20  tialInterpolate 
1f130 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74 30 2c 20  = function (t0, 
1f140 76 30 2c 20 74 31 2c 20 76 31 2c 20 74 29 20 7b  v0, t1, v1, t) {
1f150 0a 09 20 20 20 20 20 20 20 20 76 30 20 3d 20 4d  ..        v0 = M
1f160 61 74 68 2e 6d 61 78 28 74 68 69 73 2e 5f 6d 69  ath.max(this._mi
1f170 6e 4f 75 74 70 75 74 2c 20 76 30 29 3b 0a 09 20  nOutput, v0);.. 
1f180 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 30         return v0
1f190 20 2a 20 4d 61 74 68 2e 70 6f 77 28 76 31 20 2f   * Math.pow(v1 /
1f1a0 20 76 30 2c 20 28 74 20 2d 20 74 30 29 20 2f 20   v0, (t - t0) / 
1f1b0 28 74 31 20 2d 20 74 30 29 29 3b 0a 09 20 20 20  (t1 - t0));..   
1f1c0 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20   };..    /**... 
1f1d0 2a 20 20 43 61 6c 63 75 6c 61 74 65 73 20 74 68  *  Calculates th
1f1e0 65 20 74 68 65 20 76 61 6c 75 65 20 61 6c 6f 6e  e the value alon
1f1f0 67 20 74 68 65 20 63 75 72 76 65 20 70 72 6f 64  g the curve prod
1f200 75 63 65 64 20 62 79 20 73 65 74 56 61 6c 75 65  uced by setValue
1f210 43 75 72 76 65 41 74 54 69 6d 65 0a 09 09 20 2a  CurveAtTime... *
1f220 20 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f    @private... */
1f230 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65 6c  ..    Tone.Timel
1f240 69 6e 65 53 69 67 6e 61 6c 2e 70 72 6f 74 6f 74  ineSignal.protot
1f250 79 70 65 2e 5f 63 75 72 76 65 49 6e 74 65 72 70  ype._curveInterp
1f260 6f 6c 61 74 65 20 3d 20 66 75 6e 63 74 69 6f 6e  olate = function
1f270 20 28 73 74 61 72 74 2c 20 63 75 72 76 65 2c 20   (start, curve, 
1f280 64 75 72 61 74 69 6f 6e 2c 20 74 69 6d 65 29 20  duration, time) 
1f290 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 6c  {..        var l
1f2a0 65 6e 20 3d 20 63 75 72 76 65 2e 6c 65 6e 67 74  en = curve.lengt
1f2b0 68 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 20 49  h;..        // I
1f2c0 66 20 74 69 6d 65 20 69 73 20 61 66 74 65 72 20  f time is after 
1f2d0 64 75 72 61 74 69 6f 6e 2c 20 72 65 74 75 72 6e  duration, return
1f2e0 20 74 68 65 20 6c 61 73 74 20 63 75 72 76 65 20   the last curve 
1f2f0 76 61 6c 75 65 0a 09 20 20 20 20 20 20 20 20 69  value..        i
1f300 66 20 28 74 69 6d 65 20 3e 3d 20 73 74 61 72 74  f (time >= start
1f310 20 2b 20 64 75 72 61 74 69 6f 6e 29 20 7b 0a 09   + duration) {..
1f320 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1f330 72 6e 20 63 75 72 76 65 5b 6c 65 6e 20 2d 20 31  rn curve[len - 1
1f340 5d 3b 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c  ];..        } el
1f350 73 65 20 69 66 20 28 74 69 6d 65 20 3c 3d 20 73  se if (time <= s
1f360 74 61 72 74 29 20 7b 0a 09 20 20 20 20 20 20 20  tart) {..       
1f370 20 20 20 20 20 72 65 74 75 72 6e 20 63 75 72 76       return curv
1f380 65 5b 30 5d 3b 0a 09 20 20 20 20 20 20 20 20 7d  e[0];..        }
1f390 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20   else {..       
1f3a0 20 20 20 20 20 76 61 72 20 70 72 6f 67 72 65 73       var progres
1f3b0 73 20 3d 20 28 74 69 6d 65 20 2d 20 73 74 61 72  s = (time - star
1f3c0 74 29 20 2f 20 64 75 72 61 74 69 6f 6e 3b 0a 09  t) / duration;..
1f3d0 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20              var 
1f3e0 6c 6f 77 65 72 49 6e 64 65 78 20 3d 20 4d 61 74  lowerIndex = Mat
1f3f0 68 2e 66 6c 6f 6f 72 28 28 6c 65 6e 20 2d 20 31  h.floor((len - 1
1f400 29 20 2a 20 70 72 6f 67 72 65 73 73 29 3b 0a 09  ) * progress);..
1f410 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20              var 
1f420 75 70 70 65 72 49 6e 64 65 78 20 3d 20 4d 61 74  upperIndex = Mat
1f430 68 2e 63 65 69 6c 28 28 6c 65 6e 20 2d 20 31 29  h.ceil((len - 1)
1f440 20 2a 20 70 72 6f 67 72 65 73 73 29 3b 0a 09 20   * progress);.. 
1f450 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 6c             var l
1f460 6f 77 65 72 56 61 6c 20 3d 20 63 75 72 76 65 5b  owerVal = curve[
1f470 6c 6f 77 65 72 49 6e 64 65 78 5d 3b 0a 09 20 20  lowerIndex];..  
1f480 20 20 20 20 20 20 20 20 20 20 76 61 72 20 75 70            var up
1f490 70 65 72 56 61 6c 20 3d 20 63 75 72 76 65 5b 75  perVal = curve[u
1f4a0 70 70 65 72 49 6e 64 65 78 5d 3b 0a 09 20 20 20  pperIndex];..   
1f4b0 20 20 20 20 20 20 20 20 20 69 66 20 28 75 70 70           if (upp
1f4c0 65 72 49 6e 64 65 78 20 3d 3d 3d 20 6c 6f 77 65  erIndex === lowe
1f4d0 72 49 6e 64 65 78 29 20 7b 0a 09 20 20 20 20 20  rIndex) {..     
1f4e0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1f4f0 6e 20 6c 6f 77 65 72 56 61 6c 3b 0a 09 20 20 20  n lowerVal;..   
1f500 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else 
1f510 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f520 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f     return this._
1f530 6c 69 6e 65 61 72 49 6e 74 65 72 70 6f 6c 61 74  linearInterpolat
1f540 65 28 6c 6f 77 65 72 49 6e 64 65 78 2c 20 6c 6f  e(lowerIndex, lo
1f550 77 65 72 56 61 6c 2c 20 75 70 70 65 72 49 6e 64  werVal, upperInd
1f560 65 78 2c 20 75 70 70 65 72 56 61 6c 2c 20 70 72  ex, upperVal, pr
1f570 6f 67 72 65 73 73 20 2a 20 28 6c 65 6e 20 2d 20  ogress * (len - 
1f580 31 29 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20  1));..          
1f590 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 0a 09    }..        }..
1f5a0 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
1f5b0 09 09 20 2a 20 20 43 6c 65 61 6e 20 75 70 2e 0a  .. *  Clean up..
1f5c0 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 7b 54  .. *  @return {T
1f5d0 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 53 69 67 6e  one.TimelineSign
1f5e0 61 6c 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09  al} this... */..
1f5f0 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e      Tone.Timelin
1f600 65 53 69 67 6e 61 6c 2e 70 72 6f 74 6f 74 79 70  eSignal.prototyp
1f610 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75 6e 63  e.dispose = func
1f620 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
1f630 20 20 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 2e 70     Tone.Signal.p
1f640 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65  rototype.dispose
1f650 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20  .call(this);..  
1f660 20 20 20 20 20 20 54 6f 6e 65 2e 50 61 72 61 6d        Tone.Param
1f670 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f  .prototype.dispo
1f680 73 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09  se.call(this);..
1f690 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 65 76          this._ev
1f6a0 65 6e 74 73 2e 64 69 73 70 6f 73 65 28 29 3b 0a  ents.dispose();.
1f6b0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 65  .        this._e
1f6c0 76 65 6e 74 73 20 3d 20 6e 75 6c 6c 3b 0a 09 20  vents = null;.. 
1f6d0 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74 75 72     };..    retur
1f6e0 6e 20 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 53  n Tone.TimelineS
1f6f0 69 67 6e 61 6c 3b 0a 09 7d 29 3b 0a 09 4d 6f 64  ignal;..});..Mod
1f700 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f  ule(function (To
1f710 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09 20 20 20  ne) {..    ..   
1f720 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61 73   /**... *  @clas
1f730 73 20 50 6f 77 20 61 70 70 6c 69 65 73 20 61 6e  s Pow applies an
1f740 20 65 78 70 6f 6e 65 6e 74 20 74 6f 20 74 68 65   exponent to the
1f750 20 69 6e 63 6f 6d 69 6e 67 20 73 69 67 6e 61 6c   incoming signal
1f760 2e 20 54 68 65 20 69 6e 63 6f 6d 69 6e 67 20 73  . The incoming s
1f770 69 67 6e 61 6c 0a 09 09 20 2a 20 20 20 20 20 20  ignal... *      
1f780 20 20 20 6d 75 73 74 20 62 65 20 41 75 64 69 6f     must be Audio
1f790 52 61 6e 67 65 2e 0a 09 09 20 2a 0a 09 09 20 2a  Range.... *... *
1f7a0 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65    @extends {Tone
1f7b0 2e 53 69 67 6e 61 6c 42 61 73 65 7d 0a 09 09 20  .SignalBase}... 
1f7c0 2a 20 20 40 63 6f 6e 73 74 72 75 63 74 6f 72 0a  *  @constructor.
1f7d0 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 50 6f  .. *  @param {Po
1f7e0 73 69 74 69 76 65 7d 20 65 78 70 20 54 68 65 20  sitive} exp The 
1f7f0 65 78 70 6f 6e 65 6e 74 20 74 6f 20 61 70 70 6c  exponent to appl
1f800 79 20 74 6f 20 74 68 65 20 69 6e 63 6f 6d 69 6e  y to the incomin
1f810 67 20 73 69 67 6e 61 6c 2c 20 6d 75 73 74 20 62  g signal, must b
1f820 65 20 61 74 20 6c 65 61 73 74 20 32 2e 20 0a 09  e at least 2. ..
1f830 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09  . *  @example...
1f840 20 2a 20 76 61 72 20 70 6f 77 20 3d 20 6e 65 77   * var pow = new
1f850 20 54 6f 6e 65 2e 50 6f 77 28 32 29 3b 0a 09 09   Tone.Pow(2);...
1f860 20 2a 20 76 61 72 20 73 69 67 20 3d 20 6e 65 77   * var sig = new
1f870 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 28 30 2e 35   Tone.Signal(0.5
1f880 29 2e 63 6f 6e 6e 65 63 74 28 70 6f 77 29 3b 0a  ).connect(pow);.
1f890 09 09 20 2a 20 2f 2f 6f 75 74 70 75 74 20 6f 66  .. * //output of
1f8a0 20 70 6f 77 20 69 73 20 30 2e 32 35 2e 20 0a 09   pow is 0.25. ..
1f8b0 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50  . */..    Tone.P
1f8c0 6f 77 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 65  ow = function (e
1f8d0 78 70 29 20 7b 0a 09 20 20 20 20 20 20 20 20 2f  xp) {..        /
1f8e0 2a 2a 0a 09 09 09 20 2a 20 74 68 65 20 65 78 70  **.... * the exp
1f8f0 6f 6e 65 6e 74 0a 09 09 09 20 2a 20 40 70 72 69  onent.... * @pri
1f900 76 61 74 65 0a 09 09 09 20 2a 20 40 74 79 70 65  vate.... * @type
1f910 20 7b 6e 75 6d 62 65 72 7d 0a 09 09 09 20 2a 2f   {number}.... */
1f920 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
1f930 65 78 70 20 3d 20 74 68 69 73 2e 64 65 66 61 75  exp = this.defau
1f940 6c 74 41 72 67 28 65 78 70 2c 20 31 29 3b 0a 09  ltArg(exp, 1);..
1f950 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
1f960 2a 20 20 40 74 79 70 65 20 7b 57 61 76 65 53 68  *  @type {WaveSh
1f970 61 70 65 72 4e 6f 64 65 7d 0a 09 09 09 20 2a 20  aperNode}.... * 
1f980 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f   @private.... */
1f990 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
1f9a0 65 78 70 53 63 61 6c 65 72 20 3d 20 74 68 69 73  expScaler = this
1f9b0 2e 69 6e 70 75 74 20 3d 20 74 68 69 73 2e 6f 75  .input = this.ou
1f9c0 74 70 75 74 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  tput = new Tone.
1f9d0 57 61 76 65 53 68 61 70 65 72 28 74 68 69 73 2e  WaveShaper(this.
1f9e0 5f 65 78 70 46 75 6e 63 28 74 68 69 73 2e 5f 65  _expFunc(this._e
1f9f0 78 70 29 2c 20 38 31 39 32 29 3b 0a 09 20 20 20  xp), 8192);..   
1fa00 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65 2e 65 78   };..    Tone.ex
1fa10 74 65 6e 64 28 54 6f 6e 65 2e 50 6f 77 2c 20 54  tend(Tone.Pow, T
1fa20 6f 6e 65 2e 53 69 67 6e 61 6c 42 61 73 65 29 3b  one.SignalBase);
1fa30 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54  ..    /**... * T
1fa40 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
1fa50 65 78 70 6f 6e 65 6e 74 2e 0a 09 09 20 2a 20 40  exponent.... * @
1fa60 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 50 6f  memberOf Tone.Po
1fa70 77 23 0a 09 09 20 2a 20 40 74 79 70 65 20 7b 6e  w#... * @type {n
1fa80 75 6d 62 65 72 7d 0a 09 09 20 2a 20 40 6e 61 6d  umber}... * @nam
1fa90 65 20 76 61 6c 75 65 0a 09 09 20 2a 2f 0a 09 20  e value... */.. 
1faa0 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65     Object.define
1fab0 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 50 6f  Property(Tone.Po
1fac0 77 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 76 61  w.prototype, 'va
1fad0 6c 75 65 27 2c 20 7b 0a 09 20 20 20 20 20 20 20  lue', {..       
1fae0 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   get: function (
1faf0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
1fb00 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 65 78   return this._ex
1fb10 70 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09  p;..        },..
1fb20 20 20 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e          set: fun
1fb30 63 74 69 6f 6e 20 28 65 78 70 29 20 7b 0a 09 20  ction (exp) {.. 
1fb40 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
1fb50 5f 65 78 70 20 3d 20 65 78 70 3b 0a 09 20 20 20  _exp = exp;..   
1fb60 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 65           this._e
1fb70 78 70 53 63 61 6c 65 72 2e 73 65 74 4d 61 70 28  xpScaler.setMap(
1fb80 74 68 69 73 2e 5f 65 78 70 46 75 6e 63 28 74 68  this._expFunc(th
1fb90 69 73 2e 5f 65 78 70 29 29 3b 0a 09 20 20 20 20  is._exp));..    
1fba0 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09      }..    });..
1fbb0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 74 68      /**... *  th
1fbc0 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 69 63 68  e function which
1fbd0 20 6d 61 70 73 20 74 68 65 20 77 61 76 65 73 68   maps the wavesh
1fbe0 61 70 65 72 0a 09 09 20 2a 20 20 40 70 61 72 61  aper... *  @para
1fbf0 6d 20 20 20 7b 6e 75 6d 62 65 72 7d 20 65 78 70  m   {number} exp
1fc00 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 7b  ... *  @return {
1fc10 66 75 6e 63 74 69 6f 6e 7d 0a 09 09 20 2a 20 20  function}... *  
1fc20 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09  @private... */..
1fc30 20 20 20 20 54 6f 6e 65 2e 50 6f 77 2e 70 72 6f      Tone.Pow.pro
1fc40 74 6f 74 79 70 65 2e 5f 65 78 70 46 75 6e 63 20  totype._expFunc 
1fc50 3d 20 66 75 6e 63 74 69 6f 6e 20 28 65 78 70 29  = function (exp)
1fc60 20 7b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
1fc70 72 6e 20 66 75 6e 63 74 69 6f 6e 20 28 76 61 6c  rn function (val
1fc80 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
1fc90 20 72 65 74 75 72 6e 20 4d 61 74 68 2e 70 6f 77   return Math.pow
1fca0 28 4d 61 74 68 2e 61 62 73 28 76 61 6c 29 2c 20  (Math.abs(val), 
1fcb0 65 78 70 29 3b 0a 09 20 20 20 20 20 20 20 20 7d  exp);..        }
1fcc0 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  ;..    };..    /
1fcd0 2a 2a 0a 09 09 20 2a 20 20 43 6c 65 61 6e 20 75  **... *  Clean u
1fce0 70 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e  p.... *  @return
1fcf0 73 20 7b 54 6f 6e 65 2e 50 6f 77 7d 20 74 68 69  s {Tone.Pow} thi
1fd00 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  s... */..    Ton
1fd10 65 2e 50 6f 77 2e 70 72 6f 74 6f 74 79 70 65 2e  e.Pow.prototype.
1fd20 64 69 73 70 6f 73 65 20 3d 20 66 75 6e 63 74 69  dispose = functi
1fd30 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
1fd40 20 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e   Tone.prototype.
1fd50 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69  dispose.call(thi
1fd60 73 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  s);..        thi
1fd70 73 2e 5f 65 78 70 53 63 61 6c 65 72 2e 64 69 73  s._expScaler.dis
1fd80 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20  pose();..       
1fd90 20 74 68 69 73 2e 5f 65 78 70 53 63 61 6c 65 72   this._expScaler
1fda0 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
1fdb0 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09    return this;..
1fdc0 20 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74 75      };..    retu
1fdd0 72 6e 20 54 6f 6e 65 2e 50 6f 77 3b 0a 09 7d 29  rn Tone.Pow;..})
1fde0 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69  ;..Module(functi
1fdf0 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20  on (Tone) {..   
1fe00 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20   ..    /**... * 
1fe10 20 40 63 6c 61 73 73 20 20 54 6f 6e 65 2e 45 6e   @class  Tone.En
1fe20 76 65 6c 6f 70 65 20 69 73 20 61 6e 20 5b 41 44  velope is an [AD
1fe30 53 52 5d 28 68 74 74 70 73 3a 2f 2f 65 6e 2e 77  SR](https://en.w
1fe40 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b  ikipedia.org/wik
1fe50 69 2f 53 79 6e 74 68 65 73 69 7a 65 72 23 41 44  i/Synthesizer#AD
1fe60 53 52 5f 65 6e 76 65 6c 6f 70 65 29 0a 09 09 20  SR_envelope)... 
1fe70 2a 20 20 20 20 20 20 20 20 20 20 65 6e 76 65 6c  *          envel
1fe80 6f 70 65 20 67 65 6e 65 72 61 74 6f 72 2e 20 54  ope generator. T
1fe90 6f 6e 65 2e 45 6e 76 65 6c 6f 70 65 20 6f 75 74  one.Envelope out
1fea0 70 75 74 73 20 61 20 73 69 67 6e 61 6c 20 77 68  puts a signal wh
1feb0 69 63 68 20 0a 09 09 20 2a 20 20 20 20 20 20 20  ich ... *       
1fec0 20 20 20 63 61 6e 20 62 65 20 63 6f 6e 6e 65 63     can be connec
1fed0 74 65 64 20 74 6f 20 61 6e 20 41 75 64 69 6f 50  ted to an AudioP
1fee0 61 72 61 6d 20 6f 72 20 54 6f 6e 65 2e 53 69 67  aram or Tone.Sig
1fef0 6e 61 6c 2e 20 0a 09 09 20 2a 20 20 20 20 20 20  nal. ... *      
1ff00 20 20 20 20 3c 69 6d 67 20 73 72 63 3d 22 68 74      <img src="ht
1ff10 74 70 73 3a 2f 2f 75 70 6c 6f 61 64 2e 77 69 6b  tps://upload.wik
1ff20 69 6d 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 70  imedia.org/wikip
1ff30 65 64 69 61 2f 63 6f 6d 6d 6f 6e 73 2f 65 2f 65  edia/commons/e/e
1ff40 61 2f 41 44 53 52 5f 70 61 72 61 6d 65 74 65 72  a/ADSR_parameter
1ff50 2e 73 76 67 22 3e 0a 09 09 20 2a 0a 09 09 20 2a  .svg">... *... *
1ff60 20 20 40 63 6f 6e 73 74 72 75 63 74 6f 72 0a 09    @constructor..
1ff70 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b 54  . *  @extends {T
1ff80 6f 6e 65 7d 0a 09 09 20 2a 20 20 40 70 61 72 61  one}... *  @para
1ff90 6d 20 7b 54 69 6d 65 7d 20 5b 61 74 74 61 63 6b  m {Time} [attack
1ffa0 5d 20 54 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20  ] The amount of 
1ffb0 74 69 6d 65 20 69 74 20 74 61 6b 65 73 20 66 6f  time it takes fo
1ffc0 72 20 74 68 65 20 65 6e 76 65 6c 6f 70 65 20 74  r the envelope t
1ffd0 6f 20 67 6f 20 66 72 6f 6d 20 0a 09 09 20 2a 20  o go from ... * 
1ffe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fff0 20 20 20 20 20 20 20 20 30 20 74 6f 20 69 74 27          0 to it'
20000 73 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 2e  s maximum value.
20010 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b   ... *  @param {
20020 54 69 6d 65 7d 20 5b 64 65 63 61 79 5d 09 54 68  Time} [decay].Th
20030 65 20 70 65 72 69 6f 64 20 6f 66 20 74 69 6d 65  e period of time
20040 20 61 66 74 65 72 20 74 68 65 20 61 74 74 61 63   after the attac
20050 6b 20 74 68 61 74 20 69 74 20 74 61 6b 65 73 20  k that it takes 
20060 66 6f 72 20 74 68 65 20 65 6e 76 65 6c 6f 70 65  for the envelope
20070 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 20  ... *           
20080 20 20 20 20 20 20 20 20 20 20 20 20 09 74 6f 20              .to 
20090 66 61 6c 6c 20 74 6f 20 74 68 65 20 73 75 73 74  fall to the sust
200a0 61 69 6e 20 76 61 6c 75 65 2e 20 0a 09 09 20 2a  ain value. ... *
200b0 20 20 40 70 61 72 61 6d 20 7b 4e 6f 72 6d 61 6c    @param {Normal
200c0 52 61 6e 67 65 7d 20 5b 73 75 73 74 61 69 6e 5d  Range} [sustain]
200d0 09 54 68 65 20 70 65 72 63 65 6e 74 20 6f 66 20  .The percent of 
200e0 74 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75  the maximum valu
200f0 65 20 74 68 61 74 20 74 68 65 20 65 6e 76 65 6c  e that the envel
20100 6f 70 65 20 72 65 73 74 73 20 61 74 20 75 6e 74  ope rests at unt
20110 69 6c 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  il... *         
20120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20130 20 20 20 20 20 20 20 09 74 68 65 20 72 65 6c 65         .the rele
20140 61 73 65 20 69 73 20 74 72 69 67 67 65 72 65 64  ase is triggered
20150 2e 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  . ... *  @param 
20160 7b 54 69 6d 65 7d 20 5b 72 65 6c 65 61 73 65 5d  {Time} [release]
20170 09 54 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 74  .The amount of t
20180 69 6d 65 20 61 66 74 65 72 20 74 68 65 20 72 65  ime after the re
20190 6c 65 61 73 65 20 69 73 20 74 72 69 67 67 65 72  lease is trigger
201a0 65 64 20 69 74 20 74 61 6b 65 73 20 74 6f 20 72  ed it takes to r
201b0 65 61 63 68 20 30 2e 20 0a 09 09 20 2a 20 20 40  each 0. ... *  @
201c0 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 2f 2f 61  example... * //a
201d0 6e 20 61 6d 70 6c 69 74 75 64 65 20 65 6e 76 65  n amplitude enve
201e0 6c 6f 70 65 0a 09 09 20 2a 20 76 61 72 20 67 61  lope... * var ga
201f0 69 6e 4e 6f 64 65 20 3d 20 54 6f 6e 65 2e 63 6f  inNode = Tone.co
20200 6e 74 65 78 74 2e 63 72 65 61 74 65 47 61 69 6e  ntext.createGain
20210 28 29 3b 0a 09 09 20 2a 20 76 61 72 20 65 6e 76  ();... * var env
20220 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 45 6e 76 65   = new Tone.Enve
20230 6c 6f 70 65 28 7b 0a 09 09 20 2a 20 09 22 61 74  lope({... * ."at
20240 74 61 63 6b 22 20 3a 20 30 2e 31 2c 0a 09 09 20  tack" : 0.1,... 
20250 2a 20 09 22 64 65 63 61 79 22 20 3a 20 30 2e 32  * ."decay" : 0.2
20260 2c 0a 09 09 20 2a 20 09 22 73 75 73 74 61 69 6e  ,... * ."sustain
20270 22 20 3a 20 31 2c 0a 09 09 20 2a 20 09 22 72 65  " : 1,... * ."re
20280 6c 65 61 73 65 22 20 3a 20 30 2e 38 2c 0a 09 09  lease" : 0.8,...
20290 20 2a 20 7d 29 3b 0a 09 09 20 2a 20 65 6e 76 2e   * });... * env.
202a0 63 6f 6e 6e 65 63 74 28 67 61 69 6e 4e 6f 64 65  connect(gainNode
202b0 2e 67 61 69 6e 29 3b 0a 09 09 20 2a 2f 0a 09 20  .gain);... */.. 
202c0 20 20 20 54 6f 6e 65 2e 45 6e 76 65 6c 6f 70 65     Tone.Envelope
202d0 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b   = function () {
202e0 0a 09 20 20 20 20 20 20 20 20 2f 2f 67 65 74 20  ..        //get 
202f0 61 6c 6c 20 6f 66 20 74 68 65 20 64 65 66 61 75  all of the defau
20300 6c 74 73 0a 09 20 20 20 20 20 20 20 20 76 61 72  lts..        var
20310 20 6f 70 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e   options = this.
20320 6f 70 74 69 6f 6e 73 4f 62 6a 65 63 74 28 61 72  optionsObject(ar
20330 67 75 6d 65 6e 74 73 2c 20 5b 0a 09 20 20 20 20  guments, [..    
20340 20 20 20 20 20 20 20 20 27 61 74 74 61 63 6b 27          'attack'
20350 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
20360 64 65 63 61 79 27 2c 0a 09 20 20 20 20 20 20 20  decay',..       
20370 20 20 20 20 20 27 73 75 73 74 61 69 6e 27 2c 0a       'sustain',.
20380 09 20 20 20 20 20 20 20 20 20 20 20 20 27 72 65  .            're
20390 6c 65 61 73 65 27 0a 09 20 20 20 20 20 20 20 20  lease'..        
203a0 5d 2c 20 54 6f 6e 65 2e 45 6e 76 65 6c 6f 70 65  ], Tone.Envelope
203b0 2e 64 65 66 61 75 6c 74 73 29 3b 0a 09 20 20 20  .defaults);..   
203c0 20 20 20 20 20 2f 2a 2a 20 0a 09 09 09 20 2a 20       /** .... * 
203d0 20 57 68 65 6e 20 74 72 69 67 67 65 72 41 74 74   When triggerAtt
203e0 61 63 6b 20 69 73 20 63 61 6c 6c 65 64 2c 20 74  ack is called, t
203f0 68 65 20 61 74 74 61 63 6b 20 74 69 6d 65 20 69  he attack time i
20400 73 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 0a  s the amount of.
20410 09 09 09 20 2a 20 20 74 69 6d 65 20 69 74 20 74  ... *  time it t
20420 61 6b 65 73 20 66 6f 72 20 74 68 65 20 65 6e 76  akes for the env
20430 65 6c 6f 70 65 20 74 6f 20 72 65 61 63 68 20 69  elope to reach i
20440 74 27 73 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75  t's maximum valu
20450 65 2e 20 0a 09 09 09 20 2a 20 20 40 74 79 70 65  e. .... *  @type
20460 20 7b 54 69 6d 65 7d 0a 09 09 09 20 2a 2f 0a 09   {Time}.... */..
20470 20 20 20 20 20 20 20 20 74 68 69 73 2e 61 74 74          this.att
20480 61 63 6b 20 3d 20 6f 70 74 69 6f 6e 73 2e 61 74  ack = options.at
20490 74 61 63 6b 3b 0a 09 20 20 20 20 20 20 20 20 2f  tack;..        /
204a0 2a 2a 0a 09 09 09 20 2a 20 20 41 66 74 65 72 20  **.... *  After 
204b0 74 68 65 20 61 74 74 61 63 6b 20 70 6f 72 74 69  the attack porti
204c0 6f 6e 20 6f 66 20 74 68 65 20 65 6e 76 65 6c 6f  on of the envelo
204d0 70 65 2c 20 74 68 65 20 76 61 6c 75 65 20 77 69  pe, the value wi
204e0 6c 6c 20 66 61 6c 6c 0a 09 09 09 20 2a 20 20 6f  ll fall.... *  o
204f0 76 65 72 20 74 68 65 20 64 75 72 61 74 69 6f 6e  ver the duration
20500 20 6f 66 20 74 68 65 20 64 65 63 61 79 20 74 69   of the decay ti
20510 6d 65 20 74 6f 20 69 74 27 73 20 73 75 73 74 61  me to it's susta
20520 69 6e 20 76 61 6c 75 65 2e 20 0a 09 09 09 20 2a  in value. .... *
20530 20 20 40 74 79 70 65 20 7b 54 69 6d 65 7d 0a 09    @type {Time}..
20540 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
20550 68 69 73 2e 64 65 63 61 79 20 3d 20 6f 70 74 69  his.decay = opti
20560 6f 6e 73 2e 64 65 63 61 79 3b 0a 09 20 20 20 20  ons.decay;..    
20570 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 09 54      /**.... * .T
20580 68 65 20 73 75 73 74 61 69 6e 20 76 61 6c 75 65  he sustain value
20590 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 0a 09   is the value ..
205a0 09 09 20 2a 20 09 77 68 69 63 68 20 74 68 65 20  .. * .which the 
205b0 65 6e 76 65 6c 6f 70 65 20 72 65 73 74 73 20 61  envelope rests a
205c0 74 20 61 66 74 65 72 20 74 72 69 67 67 65 72 41  t after triggerA
205d0 74 74 61 63 6b 20 69 73 0a 09 09 09 20 2a 20 09  ttack is.... * .
205e0 63 61 6c 6c 65 64 2c 20 62 75 74 20 62 65 66 6f  called, but befo
205f0 72 65 20 74 72 69 67 67 65 72 52 65 6c 65 61 73  re triggerReleas
20600 65 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 0a 09  e is invoked. ..
20610 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4e 6f 72  .. *  @type {Nor
20620 6d 61 6c 52 61 6e 67 65 7d 0a 09 09 09 20 2a 2f  malRange}.... */
20630 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 73  ..        this.s
20640 75 73 74 61 69 6e 20 3d 20 6f 70 74 69 6f 6e 73  ustain = options
20650 2e 73 75 73 74 61 69 6e 3b 0a 09 20 20 20 20 20  .sustain;..     
20660 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 41 66     /**.... *  Af
20670 74 65 72 20 74 72 69 67 67 65 72 52 65 6c 65 61  ter triggerRelea
20680 73 65 20 69 73 20 63 61 6c 6c 65 64 2c 20 74 68  se is called, th
20690 65 20 65 6e 76 65 6c 6f 70 65 27 73 0a 09 09 09  e envelope's....
206a0 20 2a 20 20 76 61 6c 75 65 20 77 69 6c 6c 20 66   *  value will f
206b0 61 6c 6c 20 74 6f 20 69 74 27 73 20 6d 69 6d 69  all to it's mimi
206c0 6e 75 6d 20 76 61 6c 75 65 20 6f 76 65 72 20 74  num value over t
206d0 68 65 0a 09 09 09 20 2a 20 20 64 75 72 61 74 69  he.... *  durati
206e0 6f 6e 20 6f 66 20 74 68 65 20 72 65 6c 65 61 73  on of the releas
206f0 65 20 74 69 6d 65 2e 20 0a 09 09 09 20 2a 20 20  e time. .... *  
20700 40 74 79 70 65 20 7b 54 69 6d 65 7d 0a 09 09 09  @type {Time}....
20710 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
20720 73 2e 72 65 6c 65 61 73 65 20 3d 20 6f 70 74 69  s.release = opti
20730 6f 6e 73 2e 72 65 6c 65 61 73 65 3b 0a 09 20 20  ons.release;..  
20740 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
20750 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20 74   the next time t
20760 68 65 20 65 6e 76 65 6c 6f 70 65 20 69 73 20 61  he envelope is a
20770 74 20 73 74 61 6e 64 62 79 0a 09 09 09 20 2a 20  t standby.... * 
20780 20 40 74 79 70 65 20 7b 6e 75 6d 62 65 72 7d 0a   @type {number}.
20790 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
207a0 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
207b0 74 68 69 73 2e 5f 61 74 74 61 63 6b 43 75 72 76  this._attackCurv
207c0 65 20 3d 20 27 6c 69 6e 65 61 72 27 3b 0a 09 20  e = 'linear';.. 
207d0 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
207e0 20 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20    the next time 
207f0 74 68 65 20 65 6e 76 65 6c 6f 70 65 20 69 73 20  the envelope is 
20800 61 74 20 73 74 61 6e 64 62 79 0a 09 09 09 20 2a  at standby.... *
20810 20 20 40 74 79 70 65 20 7b 6e 75 6d 62 65 72 7d    @type {number}
20820 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  .... *  @private
20830 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
20840 20 74 68 69 73 2e 5f 72 65 6c 65 61 73 65 43 75   this._releaseCu
20850 72 76 65 20 3d 20 27 65 78 70 6f 6e 65 6e 74 69  rve = 'exponenti
20860 61 6c 27 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a  al';..        /*
20870 2a 0a 09 09 09 20 2a 20 20 74 68 65 20 73 69 67  *.... *  the sig
20880 6e 61 6c 0a 09 09 09 20 2a 20 20 40 74 79 70 65  nal.... *  @type
20890 20 7b 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 53   {Tone.TimelineS
208a0 69 67 6e 61 6c 7d 0a 09 09 09 20 2a 20 20 40 70  ignal}.... *  @p
208b0 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20  rivate.... */.. 
208c0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 69 67         this._sig
208d0 20 3d 20 74 68 69 73 2e 6f 75 74 70 75 74 20 3d   = this.output =
208e0 20 6e 65 77 20 54 6f 6e 65 2e 54 69 6d 65 6c 69   new Tone.Timeli
208f0 6e 65 53 69 67 6e 61 6c 28 29 3b 0a 09 20 20 20  neSignal();..   
20900 20 20 20 20 20 74 68 69 73 2e 5f 73 69 67 2e 73       this._sig.s
20910 65 74 56 61 6c 75 65 41 74 54 69 6d 65 28 30 2c  etValueAtTime(0,
20920 20 30 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f   0);..        //
20930 73 65 74 20 74 68 65 20 61 74 74 61 63 6b 43 75  set the attackCu
20940 72 76 65 20 69 6e 69 74 69 61 6c 6c 79 0a 09 20  rve initially.. 
20950 20 20 20 20 20 20 20 74 68 69 73 2e 61 74 74 61         this.atta
20960 63 6b 43 75 72 76 65 20 3d 20 6f 70 74 69 6f 6e  ckCurve = option
20970 73 2e 61 74 74 61 63 6b 43 75 72 76 65 3b 0a 09  s.attackCurve;..
20980 20 20 20 20 20 20 20 20 74 68 69 73 2e 72 65 6c          this.rel
20990 65 61 73 65 43 75 72 76 65 20 3d 20 6f 70 74 69  easeCurve = opti
209a0 6f 6e 73 2e 72 65 6c 65 61 73 65 43 75 72 76 65  ons.releaseCurve
209b0 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54  ;..    };..    T
209c0 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e  one.extend(Tone.
209d0 45 6e 76 65 6c 6f 70 65 29 3b 0a 09 20 20 20 20  Envelope);..    
209e0 2f 2a 2a 0a 09 09 20 2a 20 20 74 68 65 20 64 65  /**... *  the de
209f0 66 61 75 6c 74 20 70 61 72 61 6d 65 74 65 72 73  fault parameters
20a00 0a 09 09 20 2a 20 20 40 73 74 61 74 69 63 0a 09  ... *  @static..
20a10 09 20 2a 20 20 40 63 6f 6e 73 74 0a 09 09 20 2a  . *  @const... *
20a20 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 45 6e 76 65  /..    Tone.Enve
20a30 6c 6f 70 65 2e 64 65 66 61 75 6c 74 73 20 3d 20  lope.defaults = 
20a40 7b 0a 09 20 20 20 20 20 20 20 20 27 61 74 74 61  {..        'atta
20a50 63 6b 27 3a 20 30 2e 30 31 2c 0a 09 20 20 20 20  ck': 0.01,..    
20a60 20 20 20 20 27 64 65 63 61 79 27 3a 20 30 2e 31      'decay': 0.1
20a70 2c 0a 09 20 20 20 20 20 20 20 20 27 73 75 73 74  ,..        'sust
20a80 61 69 6e 27 3a 20 30 2e 35 2c 0a 09 20 20 20 20  ain': 0.5,..    
20a90 20 20 20 20 27 72 65 6c 65 61 73 65 27 3a 20 31      'release': 1
20aa0 2c 0a 09 20 20 20 20 20 20 20 20 27 61 74 74 61  ,..        'atta
20ab0 63 6b 43 75 72 76 65 27 3a 20 27 6c 69 6e 65 61  ckCurve': 'linea
20ac0 72 27 2c 0a 09 20 20 20 20 20 20 20 20 27 72 65  r',..        're
20ad0 6c 65 61 73 65 43 75 72 76 65 27 3a 20 27 65 78  leaseCurve': 'ex
20ae0 70 6f 6e 65 6e 74 69 61 6c 27 0a 09 20 20 20 20  ponential'..    
20af0 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  };..    /**... *
20b00 20 52 65 61 64 20 74 68 65 20 63 75 72 72 65 6e   Read the curren
20b10 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 65  t value of the e
20b20 6e 76 65 6c 6f 70 65 2e 20 55 73 65 66 75 6c 20  nvelope. Useful 
20b30 66 6f 72 20 0a 09 09 20 2a 20 73 79 6e 63 72 6f  for ... * syncro
20b40 6e 69 7a 69 6e 67 20 76 69 73 75 61 6c 20 6f 75  nizing visual ou
20b50 74 70 75 74 20 74 6f 20 74 68 65 20 65 6e 76 65  tput to the enve
20b60 6c 6f 70 65 2e 20 0a 09 09 20 2a 20 40 6d 65 6d  lope. ... * @mem
20b70 62 65 72 4f 66 20 54 6f 6e 65 2e 45 6e 76 65 6c  berOf Tone.Envel
20b80 6f 70 65 23 0a 09 09 20 2a 20 40 74 79 70 65 20  ope#... * @type 
20b90 7b 4e 75 6d 62 65 72 7d 0a 09 09 20 2a 20 40 6e  {Number}... * @n
20ba0 61 6d 65 20 76 61 6c 75 65 0a 09 09 20 2a 20 40  ame value... * @
20bb0 72 65 61 64 4f 6e 6c 79 0a 09 09 20 2a 2f 0a 09  readOnly... */..
20bc0 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e      Object.defin
20bd0 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 45  eProperty(Tone.E
20be0 6e 76 65 6c 6f 70 65 2e 70 72 6f 74 6f 74 79 70  nvelope.prototyp
20bf0 65 2c 20 27 76 61 6c 75 65 27 2c 20 7b 0a 09 20  e, 'value', {.. 
20c00 20 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63         get: func
20c10 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
20c20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
20c30 69 73 2e 67 65 74 56 61 6c 75 65 41 74 54 69 6d  is.getValueAtTim
20c40 65 28 74 68 69 73 2e 6e 6f 77 28 29 29 3b 0a 09  e(this.now());..
20c50 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d          }..    }
20c60 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  );..    /**... *
20c70 20 54 68 65 20 73 68 61 70 65 20 6f 66 20 74 68   The shape of th
20c80 65 20 61 74 74 61 63 6b 2e 20 0a 09 09 20 2a 20  e attack. ... * 
20c90 43 61 6e 20 62 65 20 61 6e 79 20 6f 66 20 74 68  Can be any of th
20ca0 65 73 65 20 73 74 72 69 6e 67 73 3a 0a 09 09 20  ese strings:... 
20cb0 2a 20 3c 75 6c 3e 0a 09 09 20 2a 20 20 20 3c 6c  * <ul>... *   <l
20cc0 69 3e 6c 69 6e 65 61 72 3c 2f 6c 69 3e 0a 09 09  i>linear</li>...
20cd0 20 2a 20 20 20 3c 6c 69 3e 65 78 70 6f 6e 65 6e   *   <li>exponen
20ce0 74 69 61 6c 3c 2f 6c 69 3e 0a 09 09 20 2a 20 20  tial</li>... *  
20cf0 20 3c 6c 69 3e 73 69 6e 65 3c 2f 6c 69 3e 0a 09   <li>sine</li>..
20d00 09 20 2a 20 20 20 3c 6c 69 3e 63 6f 73 69 6e 65  . *   <li>cosine
20d10 3c 2f 6c 69 3e 0a 09 09 20 2a 20 20 20 3c 6c 69  </li>... *   <li
20d20 3e 62 6f 75 6e 63 65 3c 2f 6c 69 3e 0a 09 09 20  >bounce</li>... 
20d30 2a 20 20 20 3c 6c 69 3e 72 69 70 70 6c 65 3c 2f  *   <li>ripple</
20d40 6c 69 3e 0a 09 09 20 2a 20 20 20 3c 6c 69 3e 73  li>... *   <li>s
20d50 74 65 70 3c 2f 6c 69 3e 0a 09 09 20 2a 20 3c 2f  tep</li>... * </
20d60 75 6c 3e 0a 09 09 20 2a 20 43 61 6e 20 61 6c 73  ul>... * Can als
20d70 6f 20 62 65 20 61 6e 20 61 72 72 61 79 20 77 68  o be an array wh
20d80 69 63 68 20 64 65 73 63 72 69 62 65 73 20 74 68  ich describes th
20d90 65 20 63 75 72 76 65 2e 20 56 61 6c 75 65 73 0a  e curve. Values.
20da0 09 09 20 2a 20 69 6e 20 74 68 65 20 61 72 72 61  .. * in the arra
20db0 79 20 61 72 65 20 65 76 65 6e 6c 79 20 73 75 62  y are evenly sub
20dc0 64 69 76 69 64 65 64 20 61 6e 64 20 6c 69 6e 65  divided and line
20dd0 61 72 6c 79 0a 09 09 20 2a 20 69 6e 74 65 72 70  arly... * interp
20de0 6f 6c 61 74 65 64 20 6f 76 65 72 20 74 68 65 20  olated over the 
20df0 64 75 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  duration of the 
20e00 61 74 74 61 63 6b 2e 20 0a 09 09 20 2a 20 40 6d  attack. ... * @m
20e10 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 45 6e 76  emberOf Tone.Env
20e20 65 6c 6f 70 65 23 0a 09 09 20 2a 20 40 74 79 70  elope#... * @typ
20e30 65 20 7b 53 74 72 69 6e 67 7c 41 72 72 61 79 7d  e {String|Array}
20e40 0a 09 09 20 2a 20 40 6e 61 6d 65 20 61 74 74 61  ... * @name atta
20e50 63 6b 43 75 72 76 65 0a 09 09 20 2a 20 40 65 78  ckCurve... * @ex
20e60 61 6d 70 6c 65 0a 09 09 20 2a 20 65 6e 76 2e 61  ample... * env.a
20e70 74 74 61 63 6b 43 75 72 76 65 20 3d 20 22 6c 69  ttackCurve = "li
20e80 6e 65 61 72 22 3b 0a 09 09 20 2a 20 40 65 78 61  near";... * @exa
20e90 6d 70 6c 65 0a 09 09 20 2a 20 2f 2f 63 61 6e 20  mple... * //can 
20ea0 61 6c 73 6f 20 62 65 20 61 6e 20 61 72 72 61 79  also be an array
20eb0 0a 09 09 20 2a 20 65 6e 76 2e 61 74 74 61 63 6b  ... * env.attack
20ec0 43 75 72 76 65 20 3d 20 5b 30 2c 20 30 2e 32 2c  Curve = [0, 0.2,
20ed0 20 30 2e 33 2c 20 30 2e 34 2c 20 31 5d 0a 09 09   0.3, 0.4, 1]...
20ee0 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e   */..    Object.
20ef0 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54  defineProperty(T
20f00 6f 6e 65 2e 45 6e 76 65 6c 6f 70 65 2e 70 72 6f  one.Envelope.pro
20f10 74 6f 74 79 70 65 2c 20 27 61 74 74 61 63 6b 43  totype, 'attackC
20f20 75 72 76 65 27 2c 20 7b 0a 09 20 20 20 20 20 20  urve', {..      
20f30 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    get: function 
20f40 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  () {..          
20f50 20 20 69 66 20 28 74 68 69 73 2e 69 73 53 74 72    if (this.isStr
20f60 69 6e 67 28 74 68 69 73 2e 5f 61 74 74 61 63 6b  ing(this._attack
20f70 43 75 72 76 65 29 29 20 7b 0a 09 20 20 20 20 20  Curve)) {..     
20f80 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
20f90 6e 20 74 68 69 73 2e 5f 61 74 74 61 63 6b 43 75  n this._attackCu
20fa0 72 76 65 3b 0a 09 20 20 20 20 20 20 20 20 20 20  rve;..          
20fb0 20 20 7d 20 65 6c 73 65 20 69 66 20 28 74 68 69    } else if (thi
20fc0 73 2e 69 73 41 72 72 61 79 28 74 68 69 73 2e 5f  s.isArray(this._
20fd0 61 74 74 61 63 6b 43 75 72 76 65 29 29 20 7b 0a  attackCurve)) {.
20fe0 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20ff0 20 2f 2f 6c 6f 6f 6b 20 75 70 20 74 68 65 20 6e   //look up the n
21000 61 6d 65 20 69 6e 20 74 68 65 20 63 75 72 76 65  ame in the curve
21010 73 20 61 72 72 61 79 0a 09 20 20 20 20 20 20 20  s array..       
21020 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 76 61           for (va
21030 72 20 74 79 70 65 20 69 6e 20 54 6f 6e 65 2e 45  r type in Tone.E
21040 6e 76 65 6c 6f 70 65 2e 54 79 70 65 29 20 7b 0a  nvelope.Type) {.
21050 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21060 20 20 20 20 20 69 66 20 28 54 6f 6e 65 2e 45 6e       if (Tone.En
21070 76 65 6c 6f 70 65 2e 54 79 70 65 5b 74 79 70 65  velope.Type[type
21080 5d 2e 49 6e 20 3d 3d 3d 20 74 68 69 73 2e 5f 61  ].In === this._a
21090 74 74 61 63 6b 43 75 72 76 65 29 20 7b 0a 09 20  ttackCurve) {.. 
210a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 79         return ty
210c0 70 65 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  pe;..           
210d0 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20           }..    
210e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20              }.. 
210f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21100 2f 6f 74 68 65 72 77 69 73 65 20 6a 75 73 74 20  /otherwise just 
21110 72 65 74 75 72 6e 20 74 68 65 20 61 72 72 61 79  return the array
21120 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21130 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 61    return this._a
21140 74 74 61 63 6b 43 75 72 76 65 3b 0a 09 20 20 20  ttackCurve;..   
21150 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20           }..    
21160 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20      },..        
21170 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 63  set: function (c
21180 75 72 76 65 29 20 7b 0a 09 20 20 20 20 20 20 20  urve) {..       
21190 20 20 20 20 20 2f 2f 63 68 65 63 6b 20 69 66 20       //check if 
211a0 69 74 27 73 20 61 20 76 61 6c 69 64 20 74 79 70  it's a valid typ
211b0 65 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 69  e..            i
211c0 66 20 28 54 6f 6e 65 2e 45 6e 76 65 6c 6f 70 65  f (Tone.Envelope
211d0 2e 54 79 70 65 2e 68 61 73 4f 77 6e 50 72 6f 70  .Type.hasOwnProp
211e0 65 72 74 79 28 63 75 72 76 65 29 29 20 7b 0a 09  erty(curve)) {..
211f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21200 76 61 72 20 63 75 72 76 65 44 65 66 20 3d 20 54  var curveDef = T
21210 6f 6e 65 2e 45 6e 76 65 6c 6f 70 65 2e 54 79 70  one.Envelope.Typ
21220 65 5b 63 75 72 76 65 5d 3b 0a 09 20 20 20 20 20  e[curve];..     
21230 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
21240 68 69 73 2e 69 73 4f 62 6a 65 63 74 28 63 75 72  his.isObject(cur
21250 76 65 44 65 66 29 29 20 7b 0a 09 20 20 20 20 20  veDef)) {..     
21260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
21270 68 69 73 2e 5f 61 74 74 61 63 6b 43 75 72 76 65  his._attackCurve
21280 20 3d 20 63 75 72 76 65 44 65 66 2e 49 6e 3b 0a   = curveDef.In;.
21290 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
212a0 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20   } else {..     
212b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
212c0 68 69 73 2e 5f 61 74 74 61 63 6b 43 75 72 76 65  his._attackCurve
212d0 20 3d 20 63 75 72 76 65 44 65 66 3b 0a 09 20 20   = curveDef;..  
212e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
212f0 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
21300 6c 73 65 20 69 66 20 28 74 68 69 73 2e 69 73 41  lse if (this.isA
21310 72 72 61 79 28 63 75 72 76 65 29 29 20 7b 0a 09  rray(curve)) {..
21320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21330 74 68 69 73 2e 5f 61 74 74 61 63 6b 43 75 72 76  this._attackCurv
21340 65 20 3d 20 63 75 72 76 65 3b 0a 09 20 20 20 20  e = curve;..    
21350 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
21360 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21370 20 20 74 68 72 6f 77 20 6e 65 77 20 45 72 72 6f    throw new Erro
21380 72 28 27 54 6f 6e 65 2e 45 6e 76 65 6c 6f 70 65  r('Tone.Envelope
21390 3a 20 69 6e 76 61 6c 69 64 20 63 75 72 76 65 3a  : invalid curve:
213a0 20 27 20 2b 20 63 75 72 76 65 29 3b 0a 09 20 20   ' + curve);..  
213b0 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20            }..   
213c0 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a       }..    });.
213d0 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68  .    /**... * Th
213e0 65 20 73 68 61 70 65 20 6f 66 20 74 68 65 20 72  e shape of the r
213f0 65 6c 65 61 73 65 2e 20 53 65 65 20 74 68 65 20  elease. See the 
21400 61 74 74 61 63 6b 20 63 75 72 76 65 20 74 79 70  attack curve typ
21410 65 73 2e 20 0a 09 09 20 2a 20 40 6d 65 6d 62 65  es. ... * @membe
21420 72 4f 66 20 54 6f 6e 65 2e 45 6e 76 65 6c 6f 70  rOf Tone.Envelop
21430 65 23 0a 09 09 20 2a 20 40 74 79 70 65 20 7b 53  e#... * @type {S
21440 74 72 69 6e 67 7c 41 72 72 61 79 7d 0a 09 09 20  tring|Array}... 
21450 2a 20 40 6e 61 6d 65 20 72 65 6c 65 61 73 65 43  * @name releaseC
21460 75 72 76 65 0a 09 09 20 2a 20 40 65 78 61 6d 70  urve... * @examp
21470 6c 65 0a 09 09 20 2a 20 65 6e 76 2e 72 65 6c 65  le... * env.rele
21480 61 73 65 43 75 72 76 65 20 3d 20 22 6c 69 6e 65  aseCurve = "line
21490 61 72 22 3b 0a 09 09 20 2a 2f 0a 09 20 20 20 20  ar";... */..    
214a0 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f  Object.definePro
214b0 70 65 72 74 79 28 54 6f 6e 65 2e 45 6e 76 65 6c  perty(Tone.Envel
214c0 6f 70 65 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27  ope.prototype, '
214d0 72 65 6c 65 61 73 65 43 75 72 76 65 27 2c 20 7b  releaseCurve', {
214e0 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66  ..        get: f
214f0 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
21500 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 68            if (th
21510 69 73 2e 69 73 53 74 72 69 6e 67 28 74 68 69 73  is.isString(this
21520 2e 5f 72 65 6c 65 61 73 65 43 75 72 76 65 29 29  ._releaseCurve))
21530 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21540 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
21550 5f 72 65 6c 65 61 73 65 43 75 72 76 65 3b 0a 09  _releaseCurve;..
21560 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
21570 73 65 20 69 66 20 28 74 68 69 73 2e 69 73 41 72  se if (this.isAr
21580 72 61 79 28 74 68 69 73 2e 5f 72 65 6c 65 61 73  ray(this._releas
21590 65 43 75 72 76 65 29 29 20 7b 0a 09 20 20 20 20  eCurve)) {..    
215a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 6c 6f              //lo
215b0 6f 6b 20 75 70 20 74 68 65 20 6e 61 6d 65 20 69  ok up the name i
215c0 6e 20 74 68 65 20 63 75 72 76 65 73 20 61 72 72  n the curves arr
215d0 61 79 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ay..            
215e0 20 20 20 20 66 6f 72 20 28 76 61 72 20 74 79 70      for (var typ
215f0 65 20 69 6e 20 54 6f 6e 65 2e 45 6e 76 65 6c 6f  e in Tone.Envelo
21600 70 65 2e 54 79 70 65 29 20 7b 0a 09 20 20 20 20  pe.Type) {..    
21610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21620 69 66 20 28 54 6f 6e 65 2e 45 6e 76 65 6c 6f 70  if (Tone.Envelop
21630 65 2e 54 79 70 65 5b 74 79 70 65 5d 2e 4f 75 74  e.Type[type].Out
21640 20 3d 3d 3d 20 74 68 69 73 2e 5f 72 65 6c 65 61   === this._relea
21650 73 65 43 75 72 76 65 29 20 7b 0a 09 20 20 20 20  seCurve) {..    
21660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21670 20 20 20 20 72 65 74 75 72 6e 20 74 79 70 65 3b      return type;
21680 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21690 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
216a0 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20           }..    
216b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 6f 74              //ot
216c0 68 65 72 77 69 73 65 20 6a 75 73 74 20 72 65 74  herwise just ret
216d0 75 72 6e 20 74 68 65 20 61 72 72 61 79 0a 09 20  urn the array.. 
216e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
216f0 65 74 75 72 6e 20 74 68 69 73 2e 5f 72 65 6c 65  eturn this._rele
21700 61 73 65 43 75 72 76 65 3b 0a 09 20 20 20 20 20  aseCurve;..     
21710 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
21720 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65    },..        se
21730 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 63 75 72  t: function (cur
21740 76 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ve) {..         
21750 20 20 20 2f 2f 63 68 65 63 6b 20 69 66 20 69 74     //check if it
21760 27 73 20 61 20 76 61 6c 69 64 20 74 79 70 65 0a  's a valid type.
21770 09 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
21780 28 54 6f 6e 65 2e 45 6e 76 65 6c 6f 70 65 2e 54  (Tone.Envelope.T
21790 79 70 65 2e 68 61 73 4f 77 6e 50 72 6f 70 65 72  ype.hasOwnProper
217a0 74 79 28 63 75 72 76 65 29 29 20 7b 0a 09 20 20  ty(curve)) {..  
217b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61                va
217c0 72 20 63 75 72 76 65 44 65 66 20 3d 20 54 6f 6e  r curveDef = Ton
217d0 65 2e 45 6e 76 65 6c 6f 70 65 2e 54 79 70 65 5b  e.Envelope.Type[
217e0 63 75 72 76 65 5d 3b 0a 09 20 20 20 20 20 20 20  curve];..       
217f0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69           if (thi
21800 73 2e 69 73 4f 62 6a 65 63 74 28 63 75 72 76 65  s.isObject(curve
21810 44 65 66 29 29 20 7b 0a 09 20 20 20 20 20 20 20  Def)) {..       
21820 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
21830 73 2e 5f 72 65 6c 65 61 73 65 43 75 72 76 65 20  s._releaseCurve 
21840 3d 20 63 75 72 76 65 44 65 66 2e 4f 75 74 3b 0a  = curveDef.Out;.
21850 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21860 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20   } else {..     
21870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
21880 68 69 73 2e 5f 72 65 6c 65 61 73 65 43 75 72 76  his._releaseCurv
21890 65 20 3d 20 63 75 72 76 65 44 65 66 3b 0a 09 20  e = curveDef;.. 
218a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
218b0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  ..            } 
218c0 65 6c 73 65 20 69 66 20 28 74 68 69 73 2e 69 73  else if (this.is
218d0 41 72 72 61 79 28 63 75 72 76 65 29 29 20 7b 0a  Array(curve)) {.
218e0 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
218f0 20 74 68 69 73 2e 5f 72 65 6c 65 61 73 65 43 75   this._releaseCu
21900 72 76 65 20 3d 20 63 75 72 76 65 3b 0a 09 20 20  rve = curve;..  
21910 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
21920 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21930 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 72      throw new Er
21940 72 6f 72 28 27 54 6f 6e 65 2e 45 6e 76 65 6c 6f  ror('Tone.Envelo
21950 70 65 3a 20 69 6e 76 61 6c 69 64 20 63 75 72 76  pe: invalid curv
21960 65 3a 20 27 20 2b 20 63 75 72 76 65 29 3b 0a 09  e: ' + curve);..
21970 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20              }.. 
21980 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29         }..    })
21990 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
219a0 20 54 72 69 67 67 65 72 20 74 68 65 20 61 74 74   Trigger the att
219b0 61 63 6b 2f 64 65 63 61 79 20 70 6f 72 74 69 6f  ack/decay portio
219c0 6e 20 6f 66 20 74 68 65 20 41 44 53 52 20 65 6e  n of the ADSR en
219d0 76 65 6c 6f 70 65 2e 20 0a 09 09 20 2a 20 20 40  velope. ... *  @
219e0 70 61 72 61 6d 20 20 7b 54 69 6d 65 7d 20 5b 74  param  {Time} [t
219f0 69 6d 65 3d 6e 6f 77 5d 20 57 68 65 6e 20 74 68  ime=now] When th
21a00 65 20 61 74 74 61 63 6b 20 73 68 6f 75 6c 64 20  e attack should 
21a10 73 74 61 72 74 2e 0a 09 09 20 2a 20 20 40 70 61  start.... *  @pa
21a20 72 61 6d 20 7b 4e 6f 72 6d 61 6c 52 61 6e 67 65  ram {NormalRange
21a30 7d 20 5b 76 65 6c 6f 63 69 74 79 3d 31 5d 20 54  } [velocity=1] T
21a40 68 65 20 76 65 6c 6f 63 69 74 79 20 6f 66 20 74  he velocity of t
21a50 68 65 20 65 6e 76 65 6c 6f 70 65 20 73 63 61 6c  he envelope scal
21a60 65 73 20 74 68 65 20 76 61 6c 65 73 2e 0a 09 09  es the vales....
21a70 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
21a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a90 20 6e 75 6d 62 65 72 20 62 65 74 77 65 65 6e 20   number between 
21aa0 30 2d 31 0a 09 09 20 2a 20 20 40 72 65 74 75 72  0-1... *  @retur
21ab0 6e 73 20 7b 54 6f 6e 65 2e 45 6e 76 65 6c 6f 70  ns {Tone.Envelop
21ac0 65 7d 20 74 68 69 73 0a 09 09 20 2a 20 20 40 65  e} this... *  @e
21ad0 78 61 6d 70 6c 65 0a 09 09 20 2a 20 20 2f 2f 74  xample... *  //t
21ae0 72 69 67 67 65 72 20 74 68 65 20 61 74 74 61 63  rigger the attac
21af0 6b 20 30 2e 35 20 73 65 63 6f 6e 64 73 20 66 72  k 0.5 seconds fr
21b00 6f 6d 20 6e 6f 77 20 77 69 74 68 20 61 20 76 65  om now with a ve
21b10 6c 6f 63 69 74 79 20 6f 66 20 30 2e 32 0a 09 09  locity of 0.2...
21b20 20 2a 20 20 65 6e 76 2e 74 72 69 67 67 65 72 41   *  env.triggerA
21b30 74 74 61 63 6b 28 22 2b 30 2e 35 22 2c 20 30 2e  ttack("+0.5", 0.
21b40 32 29 3b 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  2);... */..    T
21b50 6f 6e 65 2e 45 6e 76 65 6c 6f 70 65 2e 70 72 6f  one.Envelope.pro
21b60 74 6f 74 79 70 65 2e 74 72 69 67 67 65 72 41 74  totype.triggerAt
21b70 74 61 63 6b 20 3d 20 66 75 6e 63 74 69 6f 6e 20  tack = function 
21b80 28 74 69 6d 65 2c 20 76 65 6c 6f 63 69 74 79 29  (time, velocity)
21b90 20 7b 0a 09 20 20 20 20 20 20 20 20 74 69 6d 65   {..        time
21ba0 20 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64   = this.toSecond
21bb0 73 28 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20  s(time);..      
21bc0 20 20 76 61 72 20 6f 72 69 67 69 6e 61 6c 41 74    var originalAt
21bd0 74 61 63 6b 20 3d 20 74 68 69 73 2e 74 6f 53 65  tack = this.toSe
21be0 63 6f 6e 64 73 28 74 68 69 73 2e 61 74 74 61 63  conds(this.attac
21bf0 6b 29 3b 0a 09 20 20 20 20 20 20 20 20 76 61 72  k);..        var
21c00 20 61 74 74 61 63 6b 20 3d 20 6f 72 69 67 69 6e   attack = origin
21c10 61 6c 41 74 74 61 63 6b 3b 0a 09 20 20 20 20 20  alAttack;..     
21c20 20 20 20 76 61 72 20 64 65 63 61 79 20 3d 20 74     var decay = t
21c30 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28 74 68  his.toSeconds(th
21c40 69 73 2e 64 65 63 61 79 29 3b 0a 09 20 20 20 20  is.decay);..    
21c50 20 20 20 20 76 65 6c 6f 63 69 74 79 20 3d 20 74      velocity = t
21c60 68 69 73 2e 64 65 66 61 75 6c 74 41 72 67 28 76  his.defaultArg(v
21c70 65 6c 6f 63 69 74 79 2c 20 31 29 3b 0a 09 20 20  elocity, 1);..  
21c80 20 20 20 20 20 20 2f 2f 63 68 65 63 6b 20 69 66        //check if
21c90 20 69 74 27 73 20 6e 6f 74 20 61 20 63 6f 6d 70   it's not a comp
21ca0 6c 65 74 65 20 61 74 74 61 63 6b 0a 09 20 20 20  lete attack..   
21cb0 20 20 20 20 20 76 61 72 20 63 75 72 72 65 6e 74       var current
21cc0 56 61 6c 75 65 20 3d 20 74 68 69 73 2e 67 65 74  Value = this.get
21cd0 56 61 6c 75 65 41 74 54 69 6d 65 28 74 69 6d 65  ValueAtTime(time
21ce0 29 3b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
21cf0 63 75 72 72 65 6e 74 56 61 6c 75 65 20 3e 20 30  currentValue > 0
21d00 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
21d10 20 2f 2f 73 75 62 74 72 61 63 74 20 74 68 65 20   //subtract the 
21d20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 66 72  current value fr
21d30 6f 6d 20 74 68 65 20 61 74 74 61 63 6b 20 74 69  om the attack ti
21d40 6d 65 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  me..            
21d50 76 61 72 20 61 74 74 61 63 6b 52 61 74 65 20 3d  var attackRate =
21d60 20 31 20 2f 20 61 74 74 61 63 6b 3b 0a 09 20 20   1 / attack;..  
21d70 20 20 20 20 20 20 20 20 20 20 76 61 72 20 72 65            var re
21d80 6d 61 69 6e 69 6e 67 44 69 73 74 61 6e 63 65 20  mainingDistance 
21d90 3d 20 31 20 2d 20 63 75 72 72 65 6e 74 56 61 6c  = 1 - currentVal
21da0 75 65 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ue;..           
21db0 20 2f 2f 74 68 65 20 61 74 74 61 63 6b 20 69 73   //the attack is
21dc0 20 6e 6f 77 20 74 68 65 20 72 65 6d 61 69 6e 69   now the remaini
21dd0 6e 67 20 74 69 6d 65 0a 09 20 20 20 20 20 20 20  ng time..       
21de0 20 20 20 20 20 61 74 74 61 63 6b 20 3d 20 72 65       attack = re
21df0 6d 61 69 6e 69 6e 67 44 69 73 74 61 6e 63 65 20  mainingDistance 
21e00 2f 20 61 74 74 61 63 6b 52 61 74 65 3b 0a 09 20  / attackRate;.. 
21e10 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
21e20 20 20 2f 2f 61 74 74 61 63 6b 0a 09 20 20 20 20    //attack..    
21e30 20 20 20 20 69 66 20 28 74 68 69 73 2e 5f 61 74      if (this._at
21e40 74 61 63 6b 43 75 72 76 65 20 3d 3d 3d 20 27 6c  tackCurve === 'l
21e50 69 6e 65 61 72 27 29 20 7b 0a 09 20 20 20 20 20  inear') {..     
21e60 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 69 67         this._sig
21e70 2e 6c 69 6e 65 61 72 52 61 6d 70 54 6f 56 61 6c  .linearRampToVal
21e80 75 65 28 76 65 6c 6f 63 69 74 79 2c 20 61 74 74  ue(velocity, att
21e90 61 63 6b 2c 20 74 69 6d 65 29 3b 0a 09 20 20 20  ack, time);..   
21ea0 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28       } else if (
21eb0 74 68 69 73 2e 5f 61 74 74 61 63 6b 43 75 72 76  this._attackCurv
21ec0 65 20 3d 3d 3d 20 27 65 78 70 6f 6e 65 6e 74 69  e === 'exponenti
21ed0 61 6c 27 29 20 7b 0a 09 20 20 20 20 20 20 20 20  al') {..        
21ee0 20 20 20 20 74 68 69 73 2e 5f 73 69 67 2e 65 78      this._sig.ex
21ef0 70 6f 6e 65 6e 74 69 61 6c 52 61 6d 70 54 6f 56  ponentialRampToV
21f00 61 6c 75 65 28 76 65 6c 6f 63 69 74 79 2c 20 61  alue(velocity, a
21f10 74 74 61 63 6b 2c 20 74 69 6d 65 29 3b 0a 09 20  ttack, time);.. 
21f20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66         } else if
21f30 20 28 61 74 74 61 63 6b 20 3e 20 30 29 20 7b 0a   (attack > 0) {.
21f40 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
21f50 73 2e 5f 73 69 67 2e 73 65 74 52 61 6d 70 50 6f  s._sig.setRampPo
21f60 69 6e 74 28 74 69 6d 65 29 3b 0a 09 20 20 20 20  int(time);..    
21f70 20 20 20 20 20 20 20 20 76 61 72 20 63 75 72 76          var curv
21f80 65 20 3d 20 74 68 69 73 2e 5f 61 74 74 61 63 6b  e = this._attack
21f90 43 75 72 76 65 3b 0a 09 20 20 20 20 20 20 20 20  Curve;..        
21fa0 20 20 20 20 2f 2f 74 61 6b 65 20 6f 6e 6c 79 20      //take only 
21fb0 61 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65  a portion of the
21fc0 20 63 75 72 76 65 0a 09 20 20 20 20 20 20 20 20   curve..        
21fd0 20 20 20 20 69 66 20 28 61 74 74 61 63 6b 20 3c      if (attack <
21fe0 20 6f 72 69 67 69 6e 61 6c 41 74 74 61 63 6b 29   originalAttack)
21ff0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22000 20 20 20 20 76 61 72 20 70 65 72 63 65 6e 74 43      var percentC
22010 6f 6d 70 6c 65 74 65 20 3d 20 31 20 2d 20 61 74  omplete = 1 - at
22020 74 61 63 6b 20 2f 20 6f 72 69 67 69 6e 61 6c 41  tack / originalA
22030 74 74 61 63 6b 3b 0a 09 20 20 20 20 20 20 20 20  ttack;..        
22040 20 20 20 20 20 20 20 20 76 61 72 20 73 6c 69 63          var slic
22050 65 49 6e 64 65 78 20 3d 20 4d 61 74 68 2e 66 6c  eIndex = Math.fl
22060 6f 6f 72 28 70 65 72 63 65 6e 74 43 6f 6d 70 6c  oor(percentCompl
22070 65 74 65 20 2a 20 74 68 69 73 2e 5f 61 74 74 61  ete * this._atta
22080 63 6b 43 75 72 76 65 2e 6c 65 6e 67 74 68 29 3b  ckCurve.length);
22090 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
220a0 20 20 63 75 72 76 65 20 3d 20 74 68 69 73 2e 5f    curve = this._
220b0 61 74 74 61 63 6b 43 75 72 76 65 2e 73 6c 69 63  attackCurve.slic
220c0 65 28 73 6c 69 63 65 49 6e 64 65 78 29 3b 0a 09  e(sliceIndex);..
220d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220e0 2f 2f 74 68 65 20 66 69 72 73 74 20 69 6e 64 65  //the first inde
220f0 78 20 69 73 20 74 68 65 20 63 75 72 72 65 6e 74  x is the current
22100 20 76 61 6c 75 65 0a 09 20 20 20 20 20 20 20 20   value..        
22110 20 20 20 20 20 20 20 20 63 75 72 76 65 5b 30 5d          curve[0]
22120 20 3d 20 63 75 72 72 65 6e 74 56 61 6c 75 65 3b   = currentValue;
22130 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ..            }.
22140 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
22150 73 2e 5f 73 69 67 2e 73 65 74 56 61 6c 75 65 43  s._sig.setValueC
22160 75 72 76 65 41 74 54 69 6d 65 28 63 75 72 76 65  urveAtTime(curve
22170 2c 20 74 69 6d 65 2c 20 61 74 74 61 63 6b 2c 20  , time, attack, 
22180 76 65 6c 6f 63 69 74 79 29 3b 0a 09 20 20 20 20  velocity);..    
22190 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 2f      }..        /
221a0 2f 64 65 63 61 79 0a 09 20 20 20 20 20 20 20 20  /decay..        
221b0 74 68 69 73 2e 5f 73 69 67 2e 65 78 70 6f 6e 65  this._sig.expone
221c0 6e 74 69 61 6c 52 61 6d 70 54 6f 56 61 6c 75 65  ntialRampToValue
221d0 28 76 65 6c 6f 63 69 74 79 20 2a 20 74 68 69 73  (velocity * this
221e0 2e 73 75 73 74 61 69 6e 2c 20 64 65 63 61 79 2c  .sustain, decay,
221f0 20 61 74 74 61 63 6b 20 2b 20 74 69 6d 65 29 3b   attack + time);
22200 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
22210 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09   this;..    };..
22220 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 72      /**... *  Tr
22230 69 67 67 65 72 73 20 74 68 65 20 72 65 6c 65 61  iggers the relea
22240 73 65 20 6f 66 20 74 68 65 20 65 6e 76 65 6c 6f  se of the envelo
22250 70 65 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  pe.... *  @param
22260 20 20 7b 54 69 6d 65 7d 20 5b 74 69 6d 65 3d 6e    {Time} [time=n
22270 6f 77 5d 20 57 68 65 6e 20 74 68 65 20 72 65 6c  ow] When the rel
22280 65 61 73 65 20 70 6f 72 74 69 6f 6e 20 6f 66 20  ease portion of 
22290 74 68 65 20 65 6e 76 65 6c 6f 70 65 20 73 68 6f  the envelope sho
222a0 75 6c 64 20 73 74 61 72 74 2e 20 0a 09 09 20 2a  uld start. ... *
222b0 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65    @returns {Tone
222c0 2e 45 6e 76 65 6c 6f 70 65 7d 20 74 68 69 73 0a  .Envelope} this.
222d0 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09  .. *  @example..
222e0 09 20 2a 20 20 2f 2f 74 72 69 67 67 65 72 20 72  . *  //trigger r
222f0 65 6c 65 61 73 65 20 69 6d 6d 65 64 69 61 74 65  elease immediate
22300 6c 79 0a 09 09 20 2a 20 20 65 6e 76 2e 74 72 69  ly... *  env.tri
22310 67 67 65 72 52 65 6c 65 61 73 65 28 29 3b 0a 09  ggerRelease();..
22320 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 45  . */..    Tone.E
22330 6e 76 65 6c 6f 70 65 2e 70 72 6f 74 6f 74 79 70  nvelope.prototyp
22340 65 2e 74 72 69 67 67 65 72 52 65 6c 65 61 73 65  e.triggerRelease
22350 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d   = function (tim
22360 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 74 69  e) {..        ti
22370 6d 65 20 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f  me = this.toSeco
22380 6e 64 73 28 74 69 6d 65 29 3b 0a 09 20 20 20 20  nds(time);..    
22390 20 20 20 20 76 61 72 20 63 75 72 72 65 6e 74 56      var currentV
223a0 61 6c 75 65 20 3d 20 74 68 69 73 2e 67 65 74 56  alue = this.getV
223b0 61 6c 75 65 41 74 54 69 6d 65 28 74 69 6d 65 29  alueAtTime(time)
223c0 3b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 63  ;..        if (c
223d0 75 72 72 65 6e 74 56 61 6c 75 65 20 3e 20 30 29  urrentValue > 0)
223e0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
223f0 76 61 72 20 72 65 6c 65 61 73 65 20 3d 20 74 68  var release = th
22400 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28 74 68 69  is.toSeconds(thi
22410 73 2e 72 65 6c 65 61 73 65 29 3b 0a 09 20 20 20  s.release);..   
22420 20 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69           if (thi
22430 73 2e 5f 72 65 6c 65 61 73 65 43 75 72 76 65 20  s._releaseCurve 
22440 3d 3d 3d 20 27 6c 69 6e 65 61 72 27 29 20 7b 0a  === 'linear') {.
22450 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22460 20 74 68 69 73 2e 5f 73 69 67 2e 6c 69 6e 65 61   this._sig.linea
22470 72 52 61 6d 70 54 6f 56 61 6c 75 65 28 30 2c 20  rRampToValue(0, 
22480 72 65 6c 65 61 73 65 2c 20 74 69 6d 65 29 3b 0a  release, time);.
22490 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
224a0 6c 73 65 20 69 66 20 28 74 68 69 73 2e 5f 72 65  lse if (this._re
224b0 6c 65 61 73 65 43 75 72 76 65 20 3d 3d 3d 20 27  leaseCurve === '
224c0 65 78 70 6f 6e 65 6e 74 69 61 6c 27 29 20 7b 0a  exponential') {.
224d0 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
224e0 20 74 68 69 73 2e 5f 73 69 67 2e 65 78 70 6f 6e   this._sig.expon
224f0 65 6e 74 69 61 6c 52 61 6d 70 54 6f 56 61 6c 75  entialRampToValu
22500 65 28 30 2c 20 72 65 6c 65 61 73 65 2c 20 74 69  e(0, release, ti
22510 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20  me);..          
22520 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20    } else {..    
22530 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20              var 
22540 63 75 72 76 65 20 3d 20 74 68 69 73 2e 5f 72 65  curve = this._re
22550 6c 65 61 73 65 43 75 72 76 65 3b 0a 09 20 20 20  leaseCurve;..   
22560 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
22570 28 74 68 69 73 2e 69 73 41 72 72 61 79 28 63 75  (this.isArray(cu
22580 72 76 65 29 29 20 7b 0a 09 20 20 20 20 20 20 20  rve)) {..       
22590 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
225a0 73 2e 5f 73 69 67 2e 73 65 74 52 61 6d 70 50 6f  s._sig.setRampPo
225b0 69 6e 74 28 74 69 6d 65 29 3b 0a 09 20 20 20 20  int(time);..    
225c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225d0 74 68 69 73 2e 5f 73 69 67 2e 73 65 74 56 61 6c  this._sig.setVal
225e0 75 65 43 75 72 76 65 41 74 54 69 6d 65 28 63 75  ueCurveAtTime(cu
225f0 72 76 65 2c 20 74 69 6d 65 2c 20 72 65 6c 65 61  rve, time, relea
22600 73 65 2c 20 63 75 72 72 65 6e 74 56 61 6c 75 65  se, currentValue
22610 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
22620 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20      }..         
22630 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 0a     }..        }.
22640 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
22650 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20  this;..    };.. 
22660 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 47 65 74     /**... *  Get
22670 20 74 68 65 20 73 63 68 65 64 75 6c 65 64 20 76   the scheduled v
22680 61 6c 75 65 20 61 74 20 74 68 65 20 67 69 76 65  alue at the give
22690 6e 20 74 69 6d 65 2e 20 54 68 69 73 20 77 69 6c  n time. This wil
226a0 6c 0a 09 09 20 2a 20 20 72 65 74 75 72 6e 20 74  l... *  return t
226b0 68 65 20 75 6e 63 6f 6e 76 65 72 74 65 64 20 28  he unconverted (
226c0 72 61 77 29 20 76 61 6c 75 65 2e 0a 09 09 20 2a  raw) value.... *
226d0 20 20 40 70 61 72 61 6d 20 20 7b 4e 75 6d 62 65    @param  {Numbe
226e0 72 7d 20 20 74 69 6d 65 20 20 54 68 65 20 74 69  r}  time  The ti
226f0 6d 65 20 69 6e 20 73 65 63 6f 6e 64 73 2e 0a 09  me in seconds...
22700 09 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 4e  . *  @return  {N
22710 75 6d 62 65 72 7d 20 20 54 68 65 20 73 63 68 65  umber}  The sche
22720 64 75 6c 65 64 20 76 61 6c 75 65 20 61 74 20 74  duled value at t
22730 68 65 20 67 69 76 65 6e 20 74 69 6d 65 2e 0a 09  he given time...
22740 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 45  . */..    Tone.E
22750 6e 76 65 6c 6f 70 65 2e 70 72 6f 74 6f 74 79 70  nvelope.prototyp
22760 65 2e 67 65 74 56 61 6c 75 65 41 74 54 69 6d 65  e.getValueAtTime
22770 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d   = function (tim
22780 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 72 65  e) {..        re
22790 74 75 72 6e 20 74 68 69 73 2e 5f 73 69 67 2e 67  turn this._sig.g
227a0 65 74 56 61 6c 75 65 41 74 54 69 6d 65 28 74 69  etValueAtTime(ti
227b0 6d 65 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  me);..    };..  
227c0 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 74 72 69 67    /**... *  trig
227d0 67 65 72 41 74 74 61 63 6b 52 65 6c 65 61 73 65  gerAttackRelease
227e0 20 69 73 20 73 68 6f 72 74 68 61 6e 64 20 66 6f   is shorthand fo
227f0 72 20 74 72 69 67 67 65 72 41 74 74 61 63 6b 2c  r triggerAttack,
22800 20 74 68 65 6e 20 77 61 69 74 69 6e 67 0a 09 09   then waiting...
22810 20 2a 20 20 73 6f 6d 65 20 64 75 72 61 74 69 6f   *  some duratio
22820 6e 2c 20 74 68 65 6e 20 74 72 69 67 67 65 72 52  n, then triggerR
22830 65 6c 65 61 73 65 2e 20 0a 09 09 20 2a 20 20 40  elease. ... *  @
22840 70 61 72 61 6d 20 7b 54 69 6d 65 7d 20 64 75 72  param {Time} dur
22850 61 74 69 6f 6e 20 54 68 65 20 64 75 72 61 74 69  ation The durati
22860 6f 6e 20 6f 66 20 74 68 65 20 73 75 73 74 61 69  on of the sustai
22870 6e 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  n.... *  @param 
22880 7b 54 69 6d 65 7d 20 5b 74 69 6d 65 3d 6e 6f 77  {Time} [time=now
22890 5d 20 57 68 65 6e 20 74 68 65 20 61 74 74 61 63  ] When the attac
228a0 6b 20 73 68 6f 75 6c 64 20 62 65 20 74 72 69 67  k should be trig
228b0 67 65 72 65 64 2e 0a 09 09 20 2a 20 20 40 70 61  gered.... *  @pa
228c0 72 61 6d 20 7b 6e 75 6d 62 65 72 7d 20 5b 76 65  ram {number} [ve
228d0 6c 6f 63 69 74 79 3d 31 5d 20 54 68 65 20 76 65  locity=1] The ve
228e0 6c 6f 63 69 74 79 20 6f 66 20 74 68 65 20 65 6e  locity of the en
228f0 76 65 6c 6f 70 65 2e 20 0a 09 09 20 2a 20 20 40  velope. ... *  @
22900 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 45 6e  returns {Tone.En
22910 76 65 6c 6f 70 65 7d 20 74 68 69 73 0a 09 09 20  velope} this... 
22920 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a  *  @example... *
22930 20 2f 2f 74 72 69 67 67 65 72 20 74 68 65 20 61   //trigger the a
22940 74 74 61 63 6b 20 61 6e 64 20 74 68 65 6e 20 74  ttack and then t
22950 68 65 20 72 65 6c 65 61 73 65 20 61 66 74 65 72  he release after
22960 20 30 2e 36 20 73 65 63 6f 6e 64 73 2e 0a 09 09   0.6 seconds....
22970 20 2a 20 65 6e 76 2e 74 72 69 67 67 65 72 41 74   * env.triggerAt
22980 74 61 63 6b 52 65 6c 65 61 73 65 28 30 2e 36 29  tackRelease(0.6)
22990 3b 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  ;... */..    Ton
229a0 65 2e 45 6e 76 65 6c 6f 70 65 2e 70 72 6f 74 6f  e.Envelope.proto
229b0 74 79 70 65 2e 74 72 69 67 67 65 72 41 74 74 61  type.triggerAtta
229c0 63 6b 52 65 6c 65 61 73 65 20 3d 20 66 75 6e 63  ckRelease = func
229d0 74 69 6f 6e 20 28 64 75 72 61 74 69 6f 6e 2c 20  tion (duration, 
229e0 74 69 6d 65 2c 20 76 65 6c 6f 63 69 74 79 29 20  time, velocity) 
229f0 7b 0a 09 20 20 20 20 20 20 20 20 74 69 6d 65 20  {..        time 
22a00 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73  = this.toSeconds
22a10 28 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20  (time);..       
22a20 20 74 68 69 73 2e 74 72 69 67 67 65 72 41 74 74   this.triggerAtt
22a30 61 63 6b 28 74 69 6d 65 2c 20 76 65 6c 6f 63 69  ack(time, veloci
22a40 74 79 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ty);..        th
22a50 69 73 2e 74 72 69 67 67 65 72 52 65 6c 65 61 73  is.triggerReleas
22a60 65 28 74 69 6d 65 20 2b 20 74 68 69 73 2e 74 6f  e(time + this.to
22a70 53 65 63 6f 6e 64 73 28 64 75 72 61 74 69 6f 6e  Seconds(duration
22a80 29 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74  ));..        ret
22a90 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
22aa0 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
22ab0 20 43 61 6e 63 65 6c 73 20 61 6c 6c 20 73 63 68   Cancels all sch
22ac0 65 64 75 6c 65 64 20 65 6e 76 65 6c 6f 70 65 20  eduled envelope 
22ad0 63 68 61 6e 67 65 73 20 61 66 74 65 72 20 74 68  changes after th
22ae0 65 20 67 69 76 65 6e 20 74 69 6d 65 2e 0a 09 09  e given time....
22af0 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 54 69 6d   *  @param  {Tim
22b00 65 7d 20 61 66 74 65 72 0a 09 09 20 2a 20 20 40  e} after... *  @
22b10 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 45 6e  returns {Tone.En
22b20 76 65 6c 6f 70 65 7d 20 74 68 69 73 0a 09 09 20  velope} this... 
22b30 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 45 6e 76  */..    Tone.Env
22b40 65 6c 6f 70 65 2e 70 72 6f 74 6f 74 79 70 65 2e  elope.prototype.
22b50 63 61 6e 63 65 6c 20 3d 20 66 75 6e 63 74 69 6f  cancel = functio
22b60 6e 20 28 61 66 74 65 72 29 20 7b 0a 09 20 20 20  n (after) {..   
22b70 20 20 20 20 20 74 68 69 73 2e 5f 73 69 67 2e 63       this._sig.c
22b80 61 6e 63 65 6c 53 63 68 65 64 75 6c 65 64 56 61  ancelScheduledVa
22b90 6c 75 65 73 28 61 66 74 65 72 29 3b 0a 09 20 20  lues(after);..  
22ba0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
22bb0 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  s;..    };..    
22bc0 2f 2a 2a 0a 09 09 20 2a 20 20 42 6f 72 72 6f 77  /**... *  Borrow
22bd0 73 20 74 68 65 20 63 6f 6e 6e 65 63 74 20 6d 65  s the connect me
22be0 74 68 6f 64 20 66 72 6f 6d 20 54 6f 6e 65 2e 53  thod from Tone.S
22bf0 69 67 6e 61 6c 2e 20 0a 09 09 20 2a 20 20 40 66  ignal. ... *  @f
22c00 75 6e 63 74 69 6f 6e 0a 09 09 20 2a 20 20 40 70  unction... *  @p
22c10 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20  rivate... */..  
22c20 20 20 54 6f 6e 65 2e 45 6e 76 65 6c 6f 70 65 2e    Tone.Envelope.
22c30 70 72 6f 74 6f 74 79 70 65 2e 63 6f 6e 6e 65 63  prototype.connec
22c40 74 20 3d 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 2e  t = Tone.Signal.
22c50 70 72 6f 74 6f 74 79 70 65 2e 63 6f 6e 6e 65 63  prototype.connec
22c60 74 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 20 09 20  t;..    /**.. . 
22c70 2a 20 20 47 65 6e 65 72 61 74 65 20 73 6f 6d 65  *  Generate some
22c80 20 63 6f 6d 70 6c 65 78 20 65 6e 76 65 6c 6f 70   complex envelop
22c90 65 20 63 75 72 76 65 73 2e 20 0a 09 20 09 20 2a  e curves. .. . *
22ca0 2f 0a 09 20 20 20 20 28 66 75 6e 63 74 69 6f 6e  /..    (function
22cb0 20 5f 63 72 65 61 74 65 43 75 72 76 65 73 28 29   _createCurves()
22cc0 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20   {..        var 
22cd0 63 75 72 76 65 4c 65 6e 20 3d 20 31 32 38 3b 0a  curveLen = 128;.
22ce0 09 20 20 20 20 20 20 20 20 76 61 72 20 69 2c 20  .        var i, 
22cf0 6b 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 63 6f  k;..        //co
22d00 73 69 6e 65 20 63 75 72 76 65 0a 09 20 20 20 20  sine curve..    
22d10 20 20 20 20 76 61 72 20 63 6f 73 69 6e 65 43 75      var cosineCu
22d20 72 76 65 20 3d 20 5b 5d 3b 0a 09 20 20 20 20 20  rve = [];..     
22d30 20 20 20 66 6f 72 20 28 69 20 3d 20 30 3b 20 69     for (i = 0; i
22d40 20 3c 20 63 75 72 76 65 4c 65 6e 3b 20 69 2b 2b   < curveLen; i++
22d50 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
22d60 20 63 6f 73 69 6e 65 43 75 72 76 65 5b 69 5d 20   cosineCurve[i] 
22d70 3d 20 4d 61 74 68 2e 73 69 6e 28 69 20 2f 20 28  = Math.sin(i / (
22d80 63 75 72 76 65 4c 65 6e 20 2d 20 31 29 20 2a 20  curveLen - 1) * 
22d90 28 4d 61 74 68 2e 50 49 20 2f 20 32 29 29 3b 0a  (Math.PI / 2));.
22da0 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
22db0 20 20 20 20 2f 2f 72 69 70 70 6c 65 20 63 75 72      //ripple cur
22dc0 76 65 0a 09 20 20 20 20 20 20 20 20 76 61 72 20  ve..        var 
22dd0 72 69 70 70 6c 65 43 75 72 76 65 20 3d 20 5b 5d  rippleCurve = []
22de0 3b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 72  ;..        var r
22df0 69 70 70 6c 65 43 75 72 76 65 46 72 65 71 20 3d  ippleCurveFreq =
22e00 20 36 2e 34 3b 0a 09 20 20 20 20 20 20 20 20 66   6.4;..        f
22e10 6f 72 20 28 69 20 3d 20 30 3b 20 69 20 3c 20 63  or (i = 0; i < c
22e20 75 72 76 65 4c 65 6e 20 2d 20 31 3b 20 69 2b 2b  urveLen - 1; i++
22e30 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
22e40 20 6b 20 3d 20 69 20 2f 20 28 63 75 72 76 65 4c   k = i / (curveL
22e50 65 6e 20 2d 20 31 29 3b 0a 09 20 20 20 20 20 20  en - 1);..      
22e60 20 20 20 20 20 20 76 61 72 20 73 69 6e 65 57 61        var sineWa
22e70 76 65 20 3d 20 4d 61 74 68 2e 73 69 6e 28 6b 20  ve = Math.sin(k 
22e80 2a 20 28 4d 61 74 68 2e 50 49 20 2a 20 32 29 20  * (Math.PI * 2) 
22e90 2a 20 72 69 70 70 6c 65 43 75 72 76 65 46 72 65  * rippleCurveFre
22ea0 71 20 2d 20 4d 61 74 68 2e 50 49 20 2f 20 32 29  q - Math.PI / 2)
22eb0 20 2b 20 31 3b 0a 09 20 20 20 20 20 20 20 20 20   + 1;..         
22ec0 20 20 20 72 69 70 70 6c 65 43 75 72 76 65 5b 69     rippleCurve[i
22ed0 5d 20 3d 20 73 69 6e 65 57 61 76 65 20 2f 20 31  ] = sineWave / 1
22ee0 30 20 2b 20 6b 20 2a 20 30 2e 38 33 3b 0a 09 20  0 + k * 0.83;.. 
22ef0 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
22f00 20 20 72 69 70 70 6c 65 43 75 72 76 65 5b 63 75    rippleCurve[cu
22f10 72 76 65 4c 65 6e 20 2d 20 31 5d 20 3d 20 31 3b  rveLen - 1] = 1;
22f20 0a 09 20 20 20 20 20 20 20 20 2f 2f 73 74 61 69  ..        //stai
22f30 72 73 20 63 75 72 76 65 0a 09 20 20 20 20 20 20  rs curve..      
22f40 20 20 76 61 72 20 73 74 61 69 72 73 43 75 72 76    var stairsCurv
22f50 65 20 3d 20 5b 5d 3b 0a 09 20 20 20 20 20 20 20  e = [];..       
22f60 20 76 61 72 20 73 74 65 70 73 20 3d 20 35 3b 0a   var steps = 5;.
22f70 09 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 20  .        for (i 
22f80 3d 20 30 3b 20 69 20 3c 20 63 75 72 76 65 4c 65  = 0; i < curveLe
22f90 6e 3b 20 69 2b 2b 29 20 7b 0a 09 20 20 20 20 20  n; i++) {..     
22fa0 20 20 20 20 20 20 20 73 74 61 69 72 73 43 75 72         stairsCur
22fb0 76 65 5b 69 5d 20 3d 20 4d 61 74 68 2e 63 65 69  ve[i] = Math.cei
22fc0 6c 28 69 20 2f 20 28 63 75 72 76 65 4c 65 6e 20  l(i / (curveLen 
22fd0 2d 20 31 29 20 2a 20 73 74 65 70 73 29 20 2f 20  - 1) * steps) / 
22fe0 73 74 65 70 73 3b 0a 09 20 20 20 20 20 20 20 20  steps;..        
22ff0 7d 0a 09 20 20 20 20 20 20 20 20 2f 2f 69 6e 2d  }..        //in-
23000 6f 75 74 20 65 61 73 69 6e 67 20 63 75 72 76 65  out easing curve
23010 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 73 69  ..        var si
23020 6e 65 43 75 72 76 65 20 3d 20 5b 5d 3b 0a 09 20  neCurve = [];.. 
23030 20 20 20 20 20 20 20 66 6f 72 20 28 69 20 3d 20         for (i = 
23040 30 3b 20 69 20 3c 20 63 75 72 76 65 4c 65 6e 3b  0; i < curveLen;
23050 20 69 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20 20   i++) {..       
23060 20 20 20 20 20 6b 20 3d 20 69 20 2f 20 28 63 75       k = i / (cu
23070 72 76 65 4c 65 6e 20 2d 20 31 29 3b 0a 09 20 20  rveLen - 1);..  
23080 20 20 20 20 20 20 20 20 20 20 73 69 6e 65 43 75            sineCu
23090 72 76 65 5b 69 5d 20 3d 20 30 2e 35 20 2a 20 28  rve[i] = 0.5 * (
230a0 31 20 2d 20 4d 61 74 68 2e 63 6f 73 28 4d 61 74  1 - Math.cos(Mat
230b0 68 2e 50 49 20 2a 20 6b 29 29 3b 0a 09 20 20 20  h.PI * k));..   
230c0 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
230d0 2f 2f 61 20 62 6f 75 6e 63 65 20 63 75 72 76 65  //a bounce curve
230e0 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 62 6f  ..        var bo
230f0 75 6e 63 65 43 75 72 76 65 20 3d 20 5b 5d 3b 0a  unceCurve = [];.
23100 09 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 20  .        for (i 
23110 3d 20 30 3b 20 69 20 3c 20 63 75 72 76 65 4c 65  = 0; i < curveLe
23120 6e 3b 20 69 2b 2b 29 20 7b 0a 09 20 20 20 20 20  n; i++) {..     
23130 20 20 20 20 20 20 20 6b 20 3d 20 69 20 2f 20 28         k = i / (
23140 63 75 72 76 65 4c 65 6e 20 2d 20 31 29 3b 0a 09  curveLen - 1);..
23150 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20              var 
23160 66 72 65 71 20 3d 20 4d 61 74 68 2e 70 6f 77 28  freq = Math.pow(
23170 6b 2c 20 33 29 20 2a 20 34 20 2b 20 30 2e 32 3b  k, 3) * 4 + 0.2;
23180 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61  ..            va
23190 72 20 76 61 6c 20 3d 20 4d 61 74 68 2e 63 6f 73  r val = Math.cos
231a0 28 66 72 65 71 20 2a 20 4d 61 74 68 2e 50 49 20  (freq * Math.PI 
231b0 2a 20 32 20 2a 20 6b 29 3b 0a 09 20 20 20 20 20  * 2 * k);..     
231c0 20 20 20 20 20 20 20 62 6f 75 6e 63 65 43 75 72         bounceCur
231d0 76 65 5b 69 5d 20 3d 20 4d 61 74 68 2e 61 62 73  ve[i] = Math.abs
231e0 28 76 61 6c 20 2a 20 28 31 20 2d 20 6b 29 29 3b  (val * (1 - k));
231f0 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
23200 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
23210 49 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20 63  Invert a value c
23220 75 72 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20  urve to make it 
23230 77 6f 72 6b 20 66 6f 72 20 74 68 65 20 72 65 6c  work for the rel
23240 65 61 73 65 0a 09 09 09 20 2a 20 20 40 70 72 69  ease.... *  @pri
23250 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20  vate.... */..   
23260 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 69 6e       function in
23270 76 65 72 74 43 75 72 76 65 28 63 75 72 76 65 29  vertCurve(curve)
23280 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23290 76 61 72 20 6f 75 74 20 3d 20 6e 65 77 20 41 72  var out = new Ar
232a0 72 61 79 28 63 75 72 76 65 2e 6c 65 6e 67 74 68  ray(curve.length
232b0 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
232c0 66 6f 72 20 28 76 61 72 20 6a 20 3d 20 30 3b 20  for (var j = 0; 
232d0 6a 20 3c 20 63 75 72 76 65 2e 6c 65 6e 67 74 68  j < curve.length
232e0 3b 20 6a 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20  ; j++) {..      
232f0 20 20 20 20 20 20 20 20 20 20 6f 75 74 5b 6a 5d            out[j]
23300 20 3d 20 31 20 2d 20 63 75 72 76 65 5b 6a 5d 3b   = 1 - curve[j];
23310 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ..            }.
23320 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
23330 75 72 6e 20 6f 75 74 3b 0a 09 20 20 20 20 20 20  urn out;..      
23340 20 20 7d 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a    }..        /**
23350 0a 09 09 09 20 2a 20 20 72 65 76 65 72 73 65 20  .... *  reverse 
23360 74 68 65 20 63 75 72 76 65 0a 09 09 09 20 2a 20  the curve.... * 
23370 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f   @private.... */
23380 0a 09 20 20 20 20 20 20 20 20 66 75 6e 63 74 69  ..        functi
23390 6f 6e 20 72 65 76 65 72 73 65 43 75 72 76 65 28  on reverseCurve(
233a0 63 75 72 76 65 29 20 7b 0a 09 20 20 20 20 20 20  curve) {..      
233b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 75 72        return cur
233c0 76 65 2e 73 6c 69 63 65 28 30 29 2e 72 65 76 65  ve.slice(0).reve
233d0 72 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20  rse();..        
233e0 7d 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  }..        /**..
233f0 09 09 20 2a 20 20 61 74 74 61 63 6b 20 61 6e 64  .. *  attack and
23400 20 72 65 6c 65 61 73 65 20 63 75 72 76 65 20 61   release curve a
23410 72 72 61 79 73 0a 09 09 09 20 2a 20 20 40 74 79  rrays.... *  @ty
23420 70 65 20 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 09  pe  {Object}....
23430 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
23440 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 54 6f 6e   */..        Ton
23450 65 2e 45 6e 76 65 6c 6f 70 65 2e 54 79 70 65 20  e.Envelope.Type 
23460 3d 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  = {..           
23470 20 27 6c 69 6e 65 61 72 27 3a 20 27 6c 69 6e 65   'linear': 'line
23480 61 72 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20  ar',..          
23490 20 20 27 65 78 70 6f 6e 65 6e 74 69 61 6c 27 3a    'exponential':
234a0 20 27 65 78 70 6f 6e 65 6e 74 69 61 6c 27 2c 0a   'exponential',.
234b0 09 20 20 20 20 20 20 20 20 20 20 20 20 27 62 6f  .            'bo
234c0 75 6e 63 65 27 3a 20 7b 0a 09 20 20 20 20 20 20  unce': {..      
234d0 20 20 20 20 20 20 20 20 20 20 49 6e 3a 20 69 6e            In: in
234e0 76 65 72 74 43 75 72 76 65 28 62 6f 75 6e 63 65  vertCurve(bounce
234f0 43 75 72 76 65 29 2c 0a 09 20 20 20 20 20 20 20  Curve),..       
23500 20 20 20 20 20 20 20 20 20 4f 75 74 3a 20 62 6f           Out: bo
23510 75 6e 63 65 43 75 72 76 65 0a 09 20 20 20 20 20  unceCurve..     
23520 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20         },..     
23530 20 20 20 20 20 20 20 27 63 6f 73 69 6e 65 27 3a         'cosine':
23540 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23550 20 20 20 20 49 6e 3a 20 63 6f 73 69 6e 65 43 75      In: cosineCu
23560 72 76 65 2c 0a 09 20 20 20 20 20 20 20 20 20 20  rve,..          
23570 20 20 20 20 20 20 4f 75 74 3a 20 72 65 76 65 72        Out: rever
23580 73 65 43 75 72 76 65 28 63 6f 73 69 6e 65 43 75  seCurve(cosineCu
23590 72 76 65 29 0a 09 20 20 20 20 20 20 20 20 20 20  rve)..          
235a0 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 20 20    },..          
235b0 20 20 27 73 74 65 70 27 3a 20 7b 0a 09 20 20 20    'step': {..   
235c0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 3a               In:
235d0 20 73 74 61 69 72 73 43 75 72 76 65 2c 0a 09 20   stairsCurve,.. 
235e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f                 O
235f0 75 74 3a 20 69 6e 76 65 72 74 43 75 72 76 65 28  ut: invertCurve(
23600 73 74 61 69 72 73 43 75 72 76 65 29 0a 09 20 20  stairsCurve)..  
23610 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20            },..  
23620 20 20 20 20 20 20 20 20 20 20 27 72 69 70 70 6c            'rippl
23630 65 27 3a 20 7b 0a 09 20 20 20 20 20 20 20 20 20  e': {..         
23640 20 20 20 20 20 20 20 49 6e 3a 20 72 69 70 70 6c         In: rippl
23650 65 43 75 72 76 65 2c 0a 09 20 20 20 20 20 20 20  eCurve,..       
23660 20 20 20 20 20 20 20 20 20 4f 75 74 3a 20 69 6e           Out: in
23670 76 65 72 74 43 75 72 76 65 28 72 69 70 70 6c 65  vertCurve(ripple
23680 43 75 72 76 65 29 0a 09 20 20 20 20 20 20 20 20  Curve)..        
23690 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20      },..        
236a0 20 20 20 20 27 73 69 6e 65 27 3a 20 7b 0a 09 20      'sine': {.. 
236b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
236c0 6e 3a 20 73 69 6e 65 43 75 72 76 65 2c 0a 09 20  n: sineCurve,.. 
236d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f                 O
236e0 75 74 3a 20 69 6e 76 65 72 74 43 75 72 76 65 28  ut: invertCurve(
236f0 73 69 6e 65 43 75 72 76 65 29 0a 09 20 20 20 20  sineCurve)..    
23700 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
23710 20 20 20 7d 3b 0a 09 20 20 20 20 7d 28 29 29 3b     };..    }());
23720 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
23730 44 69 73 63 6f 6e 6e 65 63 74 20 61 6e 64 20 64  Disconnect and d
23740 69 73 70 6f 73 65 2e 0a 09 09 20 2a 20 20 40 72  ispose.... *  @r
23750 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 45 6e 76  eturns {Tone.Env
23760 65 6c 6f 70 65 7d 20 74 68 69 73 0a 09 09 20 2a  elope} this... *
23770 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 45 6e 76 65  /..    Tone.Enve
23780 6c 6f 70 65 2e 70 72 6f 74 6f 74 79 70 65 2e 64  lope.prototype.d
23790 69 73 70 6f 73 65 20 3d 20 66 75 6e 63 74 69 6f  ispose = functio
237a0 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
237b0 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e 64  Tone.prototype.d
237c0 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69 73  ispose.call(this
237d0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
237e0 2e 5f 73 69 67 2e 64 69 73 70 6f 73 65 28 29 3b  ._sig.dispose();
237f0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
23800 73 69 67 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  sig = null;..   
23810 20 20 20 20 20 74 68 69 73 2e 5f 61 74 74 61 63       this._attac
23820 6b 43 75 72 76 65 20 3d 20 6e 75 6c 6c 3b 0a 09  kCurve = null;..
23830 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 72 65          this._re
23840 6c 65 61 73 65 43 75 72 76 65 20 3d 20 6e 75 6c  leaseCurve = nul
23850 6c 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75  l;..        retu
23860 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b  rn this;..    };
23870 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e  ..    return Ton
23880 65 2e 45 6e 76 65 6c 6f 70 65 3b 0a 09 7d 29 3b  e.Envelope;..});
23890 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f  ..Module(functio
238a0 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20  n (Tone) {..    
238b0 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
238c0 40 63 6c 61 73 73 20 20 54 6f 6e 65 2e 41 6d 70  @class  Tone.Amp
238d0 6c 69 74 75 64 65 45 6e 76 65 6c 6f 70 65 20 69  litudeEnvelope i
238e0 73 20 61 20 54 6f 6e 65 2e 45 6e 76 65 6c 6f 70  s a Tone.Envelop
238f0 65 20 63 6f 6e 6e 65 63 74 65 64 20 74 6f 20 61  e connected to a
23900 20 67 61 69 6e 20 6e 6f 64 65 2e 20 0a 09 09 20   gain node. ... 
23910 2a 20 20 20 20 20 20 20 20 20 20 55 6e 6c 69 6b  *          Unlik
23920 65 20 54 6f 6e 65 2e 45 6e 76 65 6c 6f 70 65 2c  e Tone.Envelope,
23930 20 77 68 69 63 68 20 6f 75 74 70 75 74 73 20 74   which outputs t
23940 68 65 20 65 6e 76 65 6c 6f 70 65 27 73 20 76 61  he envelope's va
23950 6c 75 65 2c 20 54 6f 6e 65 2e 41 6d 70 6c 69 74  lue, Tone.Amplit
23960 75 64 65 45 6e 76 65 6c 6f 70 65 20 61 63 63 65  udeEnvelope acce
23970 70 74 73 0a 09 09 20 2a 20 20 20 20 20 20 20 20  pts... *        
23980 20 20 61 6e 20 61 75 64 69 6f 20 73 69 67 6e 61    an audio signa
23990 6c 20 61 73 20 74 68 65 20 69 6e 70 75 74 20 61  l as the input a
239a0 6e 64 20 77 69 6c 6c 20 61 70 70 6c 79 20 74 68  nd will apply th
239b0 65 20 65 6e 76 65 6c 6f 70 65 20 74 6f 20 74 68  e envelope to th
239c0 65 20 61 6d 70 6c 69 74 75 64 65 0a 09 09 20 2a  e amplitude... *
239d0 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65            of the
239e0 20 73 69 67 6e 61 6c 2e 20 52 65 61 64 20 6d 6f   signal. Read mo
239f0 72 65 20 61 62 6f 75 74 20 41 44 53 52 20 45 6e  re about ADSR En
23a00 76 65 6c 6f 70 65 73 20 6f 6e 20 5b 57 69 6b 69  velopes on [Wiki
23a10 70 65 64 69 61 5d 28 68 74 74 70 73 3a 2f 2f 65  pedia](https://e
23a20 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
23a30 77 69 6b 69 2f 53 79 6e 74 68 65 73 69 7a 65 72  wiki/Synthesizer
23a40 23 41 44 53 52 5f 65 6e 76 65 6c 6f 70 65 29 2e  #ADSR_envelope).
23a50 0a 09 09 20 2a 20 20 0a 09 09 20 2a 20 20 40 63  ... *  ... *  @c
23a60 6f 6e 73 74 72 75 63 74 6f 72 0a 09 09 20 2a 20  onstructor... * 
23a70 20 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65 2e   @extends {Tone.
23a80 45 6e 76 65 6c 6f 70 65 7d 0a 09 09 20 2a 20 20  Envelope}... *  
23a90 40 70 61 72 61 6d 20 7b 54 69 6d 65 7c 4f 62 6a  @param {Time|Obj
23aa0 65 63 74 7d 20 5b 61 74 74 61 63 6b 5d 20 54 68  ect} [attack] Th
23ab0 65 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65  e amount of time
23ac0 20 69 74 20 74 61 6b 65 73 20 66 6f 72 20 74 68   it takes for th
23ad0 65 20 65 6e 76 65 6c 6f 70 65 20 74 6f 20 67 6f  e envelope to go
23ae0 20 66 72 6f 6d 20 0a 09 09 20 2a 20 20 20 20 20   from ... *     
23af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b00 20 20 20 20 20 20 20 20 20 20 30 20 74 6f 20 69            0 to i
23b10 74 27 73 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75  t's maximum valu
23b20 65 2e 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  e. ... *  @param
23b30 20 7b 54 69 6d 65 7d 20 5b 64 65 63 61 79 5d 09   {Time} [decay].
23b40 54 68 65 20 70 65 72 69 6f 64 20 6f 66 20 74 69  The period of ti
23b50 6d 65 20 61 66 74 65 72 20 74 68 65 20 61 74 74  me after the att
23b60 61 63 6b 20 74 68 61 74 20 69 74 20 74 61 6b 65  ack that it take
23b70 73 20 66 6f 72 20 74 68 65 20 65 6e 76 65 6c 6f  s for the envelo
23b80 70 65 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  pe... *         
23b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 09 74                .t
23ba0 6f 20 66 61 6c 6c 20 74 6f 20 74 68 65 20 73 75  o fall to the su
23bb0 73 74 61 69 6e 20 76 61 6c 75 65 2e 20 0a 09 09  stain value. ...
23bc0 20 2a 20 20 40 70 61 72 61 6d 20 7b 4e 6f 72 6d   *  @param {Norm
23bd0 61 6c 52 61 6e 67 65 7d 20 5b 73 75 73 74 61 69  alRange} [sustai
23be0 6e 5d 09 54 68 65 20 70 65 72 63 65 6e 74 20 6f  n].The percent o
23bf0 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 76 61  f the maximum va
23c00 6c 75 65 20 74 68 61 74 20 74 68 65 20 65 6e 76  lue that the env
23c10 65 6c 6f 70 65 20 72 65 73 74 73 20 61 74 20 75  elope rests at u
23c20 6e 74 69 6c 0a 09 09 20 2a 20 20 20 20 20 20 20  ntil... *       
23c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c40 20 20 20 20 20 20 20 20 20 09 74 68 65 20 72 65           .the re
23c50 6c 65 61 73 65 20 69 73 20 74 72 69 67 67 65 72  lease is trigger
23c60 65 64 2e 20 0a 09 09 20 2a 20 20 40 70 61 72 61  ed. ... *  @para
23c70 6d 20 7b 54 69 6d 65 7d 20 5b 72 65 6c 65 61 73  m {Time} [releas
23c80 65 5d 09 54 68 65 20 61 6d 6f 75 6e 74 20 6f 66  e].The amount of
23c90 20 74 69 6d 65 20 61 66 74 65 72 20 74 68 65 20   time after the 
23ca0 72 65 6c 65 61 73 65 20 69 73 20 74 72 69 67 67  release is trigg
23cb0 65 72 65 64 20 69 74 20 74 61 6b 65 73 20 74 6f  ered it takes to
23cc0 20 72 65 61 63 68 20 30 2e 20 0a 09 09 20 2a 20   reach 0. ... * 
23cd0 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 76   @example... * v
23ce0 61 72 20 61 6d 70 45 6e 76 20 3d 20 6e 65 77 20  ar ampEnv = new 
23cf0 54 6f 6e 65 2e 41 6d 70 6c 69 74 75 64 65 45 6e  Tone.AmplitudeEn
23d00 76 65 6c 6f 70 65 28 7b 0a 09 09 20 2a 20 09 22  velope({... * ."
23d10 61 74 74 61 63 6b 22 3a 20 30 2e 31 2c 0a 09 09  attack": 0.1,...
23d20 20 2a 20 09 22 64 65 63 61 79 22 3a 20 30 2e 32   * ."decay": 0.2
23d30 2c 0a 09 09 20 2a 20 09 22 73 75 73 74 61 69 6e  ,... * ."sustain
23d40 22 3a 20 31 2e 30 2c 0a 09 09 20 2a 20 09 22 72  ": 1.0,... * ."r
23d50 65 6c 65 61 73 65 22 3a 20 30 2e 38 0a 09 09 20  elease": 0.8... 
23d60 2a 20 7d 29 2e 74 6f 4d 61 73 74 65 72 28 29 3b  * }).toMaster();
23d70 0a 09 09 20 2a 20 2f 2f 63 72 65 61 74 65 20 61  ... * //create a
23d80 6e 20 6f 73 63 69 6c 6c 61 74 6f 72 20 61 6e 64  n oscillator and
23d90 20 63 6f 6e 6e 65 63 74 20 69 74 0a 09 09 20 2a   connect it... *
23da0 20 76 61 72 20 6f 73 63 20 3d 20 6e 65 77 20 54   var osc = new T
23db0 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f 72 28 29  one.Oscillator()
23dc0 2e 63 6f 6e 6e 65 63 74 28 61 6d 70 45 6e 76 29  .connect(ampEnv)
23dd0 2e 73 74 61 72 74 28 29 3b 0a 09 09 20 2a 20 2f  .start();... * /
23de0 2f 74 72 69 67 67 65 72 20 74 68 65 20 65 6e 76  /trigger the env
23df0 65 6c 6f 70 65 73 20 61 74 74 61 63 6b 20 61 6e  elopes attack an
23e00 64 20 72 65 6c 65 61 73 65 20 22 38 74 22 20 61  d release "8t" a
23e10 70 61 72 74 0a 09 09 20 2a 20 61 6d 70 45 6e 76  part... * ampEnv
23e20 2e 74 72 69 67 67 65 72 41 74 74 61 63 6b 52 65  .triggerAttackRe
23e30 6c 65 61 73 65 28 22 38 74 22 29 3b 0a 09 09 20  lease("8t");... 
23e40 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 41 6d 70  */..    Tone.Amp
23e50 6c 69 74 75 64 65 45 6e 76 65 6c 6f 70 65 20 3d  litudeEnvelope =
23e60 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
23e70 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 45 6e 76          Tone.Env
23e80 65 6c 6f 70 65 2e 61 70 70 6c 79 28 74 68 69 73  elope.apply(this
23e90 2c 20 61 72 67 75 6d 65 6e 74 73 29 3b 0a 09 20  , arguments);.. 
23ea0 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
23eb0 20 20 74 68 65 20 69 6e 70 75 74 20 6e 6f 64 65    the input node
23ec0 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 47  .... *  @type {G
23ed0 61 69 6e 4e 6f 64 65 7d 0a 09 09 09 20 2a 20 20  ainNode}.... *  
23ee0 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a  @private.... */.
23ef0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e  .        this.in
23f00 70 75 74 20 3d 20 74 68 69 73 2e 6f 75 74 70 75  put = this.outpu
23f10 74 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 47 61 69  t = new Tone.Gai
23f20 6e 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  n();..        th
23f30 69 73 2e 5f 73 69 67 2e 63 6f 6e 6e 65 63 74 28  is._sig.connect(
23f40 74 68 69 73 2e 6f 75 74 70 75 74 2e 67 61 69 6e  this.output.gain
23f50 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  );..    };..    
23f60 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65  Tone.extend(Tone
23f70 2e 41 6d 70 6c 69 74 75 64 65 45 6e 76 65 6c 6f  .AmplitudeEnvelo
23f80 70 65 2c 20 54 6f 6e 65 2e 45 6e 76 65 6c 6f 70  pe, Tone.Envelop
23f90 65 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  e);..    /**... 
23fa0 2a 20 20 43 6c 65 61 6e 20 75 70 0a 09 09 20 2a  *  Clean up... *
23fb0 20 20 40 72 65 74 75 72 6e 20 20 7b 54 6f 6e 65    @return  {Tone
23fc0 2e 41 6d 70 6c 69 74 75 64 65 45 6e 76 65 6c 6f  .AmplitudeEnvelo
23fd0 70 65 7d 20 20 74 68 69 73 0a 09 09 20 2a 2f 0a  pe}  this... */.
23fe0 09 20 20 20 20 54 6f 6e 65 2e 41 6d 70 6c 69 74  .    Tone.Amplit
23ff0 75 64 65 45 6e 76 65 6c 6f 70 65 2e 70 72 6f 74  udeEnvelope.prot
24000 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20  otype.dispose = 
24010 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
24020 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 70 75         this.inpu
24030 74 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20  t.dispose();..  
24040 20 20 20 20 20 20 74 68 69 73 2e 69 6e 70 75 74        this.input
24050 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
24060 20 20 54 6f 6e 65 2e 45 6e 76 65 6c 6f 70 65 2e    Tone.Envelope.
24070 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73  prototype.dispos
24080 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20  e.call(this);.. 
24090 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
240a0 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  is;..    };..   
240b0 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 41 6d 70   return Tone.Amp
240c0 6c 69 74 75 64 65 45 6e 76 65 6c 6f 70 65 3b 0a  litudeEnvelope;.
240d0 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e  .});..Module(fun
240e0 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09  ction (Tone) {..
240f0 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09      ..    /**...
24100 20 2a 20 20 40 63 6c 61 73 73 20 20 57 72 61 70   *  @class  Wrap
24110 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 6e  per around the n
24120 61 74 69 76 65 20 57 65 62 20 41 75 64 69 6f 27  ative Web Audio'
24130 73 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  s ... *         
24140 20 5b 41 6e 61 6c 79 73 65 72 4e 6f 64 65 5d 28   [AnalyserNode](
24150 68 74 74 70 3a 2f 2f 77 65 62 61 75 64 69 6f 2e  http://webaudio.
24160 67 69 74 68 75 62 2e 69 6f 2f 77 65 62 2d 61 75  github.io/web-au
24170 64 69 6f 2d 61 70 69 2f 23 69 64 6c 2d 64 65 66  dio-api/#idl-def
24180 2d 41 6e 61 6c 79 73 65 72 4e 6f 64 65 29 2e 0a  -AnalyserNode)..
24190 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 45 78  .. *          Ex
241a0 74 72 61 63 74 73 20 46 46 54 20 6f 72 20 57 61  tracts FFT or Wa
241b0 76 65 66 6f 72 6d 20 64 61 74 61 20 66 72 6f 6d  veform data from
241c0 20 74 68 65 20 69 6e 63 6f 6d 69 6e 67 20 73 69   the incoming si
241d0 67 6e 61 6c 2e 0a 09 09 20 2a 20 20 40 65 78 74  gnal.... *  @ext
241e0 65 6e 64 73 20 7b 54 6f 6e 65 7d 0a 09 09 20 2a  ends {Tone}... *
241f0 20 20 40 70 61 72 61 6d 20 7b 53 74 72 69 6e 67    @param {String
24200 3d 7d 20 74 79 70 65 20 54 68 65 20 72 65 74 75  =} type The retu
24210 72 6e 20 74 79 70 65 20 6f 66 20 74 68 65 20 61  rn type of the a
24220 6e 61 6c 79 73 69 73 2c 20 65 69 74 68 65 72 20  nalysis, either 
24230 22 66 66 74 22 2c 20 6f 72 20 22 77 61 76 65 66  "fft", or "wavef
24240 6f 72 6d 22 2e 20 0a 09 09 20 2a 20 20 40 70 61  orm". ... *  @pa
24250 72 61 6d 20 7b 4e 75 6d 62 65 72 3d 7d 20 73 69  ram {Number=} si
24260 7a 65 20 54 68 65 20 73 69 7a 65 20 6f 66 20 74  ze The size of t
24270 68 65 20 46 46 54 2e 20 56 61 6c 75 65 20 6d 75  he FFT. Value mu
24280 73 74 20 62 65 20 61 20 70 6f 77 65 72 20 6f 66  st be a power of
24290 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20   ... *          
242a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 77 6f               two
242b0 20 69 6e 20 74 68 65 20 72 61 6e 67 65 20 33 32   in the range 32
242c0 20 74 6f 20 33 32 37 36 38 2e 0a 09 09 20 2a 2f   to 32768.... */
242d0 0a 09 20 20 20 20 54 6f 6e 65 2e 41 6e 61 6c 79  ..    Tone.Analy
242e0 73 65 72 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  ser = function (
242f0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72  ) {..        var
24300 20 6f 70 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e   options = this.
24310 6f 70 74 69 6f 6e 73 4f 62 6a 65 63 74 28 61 72  optionsObject(ar
24320 67 75 6d 65 6e 74 73 2c 20 5b 0a 09 20 20 20 20  guments, [..    
24330 20 20 20 20 20 20 20 20 27 74 79 70 65 27 2c 0a          'type',.
24340 09 20 20 20 20 20 20 20 20 20 20 20 20 27 73 69  .            'si
24350 7a 65 27 0a 09 20 20 20 20 20 20 20 20 5d 2c 20  ze'..        ], 
24360 54 6f 6e 65 2e 41 6e 61 6c 79 73 65 72 2e 64 65  Tone.Analyser.de
24370 66 61 75 6c 74 73 29 3b 0a 09 20 20 20 20 20 20  faults);..      
24380 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65    /**.... *  The
24390 20 61 6e 61 6c 79 73 65 72 20 6e 6f 64 65 2e 0a   analyser node..
243a0 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
243b0 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 41 6e  ... *  @type {An
243c0 61 6c 79 73 65 72 4e 6f 64 65 7d 0a 09 09 09 20  alyserNode}.... 
243d0 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
243e0 2e 5f 61 6e 61 6c 79 73 65 72 20 3d 20 74 68 69  ._analyser = thi
243f0 73 2e 69 6e 70 75 74 20 3d 20 74 68 69 73 2e 6f  s.input = this.o
24400 75 74 70 75 74 20 3d 20 74 68 69 73 2e 63 6f 6e  utput = this.con
24410 74 65 78 74 2e 63 72 65 61 74 65 41 6e 61 6c 79  text.createAnaly
24420 73 65 72 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ser();..        
24430 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 61  /**.... *  The a
24440 6e 61 6c 79 73 69 73 20 74 79 70 65 0a 09 09 09  nalysis type....
24450 20 2a 20 20 40 74 79 70 65 20 7b 53 74 72 69 6e   *  @type {Strin
24460 67 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61  g}.... *  @priva
24470 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  te.... */..     
24480 20 20 20 74 68 69 73 2e 5f 74 79 70 65 20 3d 20     this._type = 
24490 6f 70 74 69 6f 6e 73 2e 74 79 70 65 3b 0a 09 20  options.type;.. 
244a0 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
244b0 20 20 54 68 65 20 72 65 74 75 72 6e 20 74 79 70    The return typ
244c0 65 20 6f 66 20 74 68 65 20 61 6e 61 6c 79 73 69  e of the analysi
244d0 73 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b  s.... *  @type {
244e0 53 74 72 69 6e 67 7d 0a 09 09 09 20 2a 20 20 40  String}.... *  @
244f0 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
24500 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 72 65          this._re
24510 74 75 72 6e 54 79 70 65 20 3d 20 6f 70 74 69 6f  turnType = optio
24520 6e 73 2e 72 65 74 75 72 6e 54 79 70 65 3b 0a 09  ns.returnType;..
24530 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
24540 2a 20 20 54 68 65 20 62 75 66 66 65 72 20 74 68  *  The buffer th
24550 61 74 20 74 68 65 20 46 46 54 20 64 61 74 61 20  at the FFT data 
24560 69 73 20 77 72 69 74 74 65 6e 20 74 6f 0a 09 09  is written to...
24570 09 20 2a 20 20 40 74 79 70 65 20 7b 54 79 70 65  . *  @type {Type
24580 64 41 72 72 61 79 7d 0a 09 09 09 20 2a 20 20 40  dArray}.... *  @
24590 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
245a0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 62 75          this._bu
245b0 66 66 65 72 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20  ffer = null;..  
245c0 20 20 20 20 20 20 2f 2f 73 65 74 20 74 68 65 20        //set the 
245d0 76 61 6c 75 65 73 20 69 6e 69 74 69 61 6c 6c 79  values initially
245e0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 73  ..        this.s
245f0 69 7a 65 20 3d 20 6f 70 74 69 6f 6e 73 2e 73 69  ize = options.si
24600 7a 65 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ze;..        thi
24610 73 2e 74 79 70 65 20 3d 20 6f 70 74 69 6f 6e 73  s.type = options
24620 2e 74 79 70 65 3b 0a 09 20 20 20 20 20 20 20 20  .type;..        
24630 74 68 69 73 2e 72 65 74 75 72 6e 54 79 70 65 20  this.returnType 
24640 3d 20 6f 70 74 69 6f 6e 73 2e 72 65 74 75 72 6e  = options.return
24650 54 79 70 65 3b 0a 09 20 20 20 20 20 20 20 20 74  Type;..        t
24660 68 69 73 2e 6d 69 6e 44 65 63 69 62 65 6c 73 20  his.minDecibels 
24670 3d 20 6f 70 74 69 6f 6e 73 2e 6d 69 6e 44 65 63  = options.minDec
24680 69 62 65 6c 73 3b 0a 09 20 20 20 20 20 20 20 20  ibels;..        
24690 74 68 69 73 2e 6d 61 78 44 65 63 69 62 65 6c 73  this.maxDecibels
246a0 20 3d 20 6f 70 74 69 6f 6e 73 2e 6d 61 78 44 65   = options.maxDe
246b0 63 69 62 65 6c 73 3b 0a 09 20 20 20 20 7d 3b 0a  cibels;..    };.
246c0 09 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64  .    Tone.extend
246d0 28 54 6f 6e 65 2e 41 6e 61 6c 79 73 65 72 29 3b  (Tone.Analyser);
246e0 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
246f0 54 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  The default valu
24700 65 73 2e 0a 09 09 20 2a 20 20 40 74 79 70 65 20  es.... *  @type 
24710 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 20 20 40  {Object}... *  @
24720 63 6f 6e 73 74 0a 09 09 20 2a 2f 0a 09 20 20 20  const... */..   
24730 20 54 6f 6e 65 2e 41 6e 61 6c 79 73 65 72 2e 64   Tone.Analyser.d
24740 65 66 61 75 6c 74 73 20 3d 20 7b 0a 09 20 20 20  efaults = {..   
24750 20 20 20 20 20 27 73 69 7a 65 27 3a 20 31 30 32       'size': 102
24760 34 2c 0a 09 20 20 20 20 20 20 20 20 27 72 65 74  4,..        'ret
24770 75 72 6e 54 79 70 65 27 3a 20 27 62 79 74 65 27  urnType': 'byte'
24780 2c 0a 09 20 20 20 20 20 20 20 20 27 74 79 70 65  ,..        'type
24790 27 3a 20 27 66 66 74 27 2c 0a 09 20 20 20 20 20  ': 'fft',..     
247a0 20 20 20 27 73 6d 6f 6f 74 68 69 6e 67 27 3a 20     'smoothing': 
247b0 30 2e 38 2c 0a 09 20 20 20 20 20 20 20 20 27 6d  0.8,..        'm
247c0 61 78 44 65 63 69 62 65 6c 73 27 3a 20 2d 33 30  axDecibels': -30
247d0 2c 0a 09 20 20 20 20 20 20 20 20 27 6d 69 6e 44  ,..        'minD
247e0 65 63 69 62 65 6c 73 27 3a 20 2d 31 30 30 0a 09  ecibels': -100..
247f0 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
24800 09 09 20 2a 20 20 50 6f 73 73 69 62 6c 65 20 72  .. *  Possible r
24810 65 74 75 72 6e 20 74 79 70 65 73 20 6f 66 20 54  eturn types of T
24820 6f 6e 65 2e 41 6e 61 6c 79 73 65 72 2e 61 6e 61  one.Analyser.ana
24830 6c 79 73 65 28 29 0a 09 09 20 2a 20 20 40 65 6e  lyse()... *  @en
24840 75 6d 20 7b 53 74 72 69 6e 67 7d 0a 09 09 20 2a  um {String}... *
24850 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 41 6e 61 6c  /..    Tone.Anal
24860 79 73 65 72 2e 54 79 70 65 20 3d 20 7b 0a 09 20  yser.Type = {.. 
24870 20 20 20 20 20 20 20 57 61 76 65 66 6f 72 6d 3a         Waveform:
24880 20 27 77 61 76 65 66 6f 72 6d 27 2c 0a 09 20 20   'waveform',..  
24890 20 20 20 20 20 20 46 46 54 3a 20 27 66 66 74 27        FFT: 'fft'
248a0 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
248b0 2a 0a 09 09 20 2a 20 20 50 6f 73 73 69 62 6c 65  *... *  Possible
248c0 20 72 65 74 75 72 6e 20 74 79 70 65 73 20 6f 66   return types of
248d0 20 54 6f 6e 65 2e 41 6e 61 6c 79 73 65 72 2e 61   Tone.Analyser.a
248e0 6e 61 6c 79 73 65 28 29 2e 20 0a 09 09 20 2a 20  nalyse(). ... * 
248f0 20 62 79 74 65 20 76 61 6c 75 65 73 20 61 72 65   byte values are
24900 20 62 65 74 77 65 65 6e 20 5b 30 2c 32 35 35 5d   between [0,255]
24910 2e 20 66 6c 6f 61 74 20 76 61 6c 75 65 73 20 61  . float values a
24920 72 65 20 62 65 74 77 65 65 6e 20 0a 09 09 20 2a  re between ... *
24930 20 20 5b 2d 31 2c 20 31 5d 20 77 68 65 6e 20 74    [-1, 1] when t
24940 68 65 20 74 79 70 65 20 69 73 20 73 65 74 20 74  he type is set t
24950 6f 20 22 77 61 76 65 66 6f 72 6d 22 20 61 6e 64  o "waveform" and
24960 20 62 65 74 77 65 65 6e 20 0a 09 09 20 2a 20 20   between ... *  
24970 5b 6d 69 6e 44 65 63 69 62 65 6c 73 2c 6d 61 78  [minDecibels,max
24980 44 65 63 69 62 65 6c 73 5d 20 77 68 65 6e 20 74  Decibels] when t
24990 68 65 20 74 79 70 65 20 69 73 20 22 66 66 74 22  he type is "fft"
249a0 2e 0a 09 09 20 2a 20 20 40 65 6e 75 6d 20 7b 53  .... *  @enum {S
249b0 74 72 69 6e 67 7d 0a 09 09 20 2a 2f 0a 09 20 20  tring}... */..  
249c0 20 20 54 6f 6e 65 2e 41 6e 61 6c 79 73 65 72 2e    Tone.Analyser.
249d0 52 65 74 75 72 6e 54 79 70 65 20 3d 20 7b 0a 09  ReturnType = {..
249e0 20 20 20 20 20 20 20 20 42 79 74 65 3a 20 27 62          Byte: 'b
249f0 79 74 65 27 2c 0a 09 20 20 20 20 20 20 20 20 46  yte',..        F
24a00 6c 6f 61 74 3a 20 27 66 6c 6f 61 74 27 0a 09 20  loat: 'float'.. 
24a10 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09     };..    /**..
24a20 09 20 2a 20 20 52 75 6e 20 74 68 65 20 61 6e 61  . *  Run the ana
24a30 6c 79 73 69 73 20 67 69 76 65 6e 20 74 68 65 20  lysis given the 
24a40 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 73  current settings
24a50 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20   and return the 
24a60 0a 09 09 20 2a 20 20 72 65 73 75 6c 74 20 61 73  ... *  result as
24a70 20 61 20 54 79 70 65 64 41 72 72 61 79 2e 20 0a   a TypedArray. .
24a80 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b  .. *  @returns {
24a90 54 79 70 65 64 41 72 72 61 79 7d 0a 09 09 20 2a  TypedArray}... *
24aa0 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 41 6e 61 6c  /..    Tone.Anal
24ab0 79 73 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e 61  yser.prototype.a
24ac0 6e 61 6c 79 73 65 20 3d 20 66 75 6e 63 74 69 6f  nalyse = functio
24ad0 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
24ae0 69 66 20 28 74 68 69 73 2e 5f 74 79 70 65 20 3d  if (this._type =
24af0 3d 3d 20 54 6f 6e 65 2e 41 6e 61 6c 79 73 65 72  == Tone.Analyser
24b00 2e 54 79 70 65 2e 46 46 54 29 20 7b 0a 09 20 20  .Type.FFT) {..  
24b10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 68            if (th
24b20 69 73 2e 5f 72 65 74 75 72 6e 54 79 70 65 20 3d  is._returnType =
24b30 3d 3d 20 54 6f 6e 65 2e 41 6e 61 6c 79 73 65 72  == Tone.Analyser
24b40 2e 52 65 74 75 72 6e 54 79 70 65 2e 42 79 74 65  .ReturnType.Byte
24b50 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
24b60 20 20 20 20 20 74 68 69 73 2e 5f 61 6e 61 6c 79       this._analy
24b70 73 65 72 2e 67 65 74 42 79 74 65 46 72 65 71 75  ser.getByteFrequ
24b80 65 6e 63 79 44 61 74 61 28 74 68 69 73 2e 5f 62  encyData(this._b
24b90 75 66 66 65 72 29 3b 0a 09 20 20 20 20 20 20 20  uffer);..       
24ba0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20       } else {.. 
24bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
24bc0 68 69 73 2e 5f 61 6e 61 6c 79 73 65 72 2e 67 65  his._analyser.ge
24bd0 74 46 6c 6f 61 74 46 72 65 71 75 65 6e 63 79 44  tFloatFrequencyD
24be0 61 74 61 28 74 68 69 73 2e 5f 62 75 66 66 65 72  ata(this._buffer
24bf0 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
24c00 7d 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
24c10 65 20 69 66 20 28 74 68 69 73 2e 5f 74 79 70 65  e if (this._type
24c20 20 3d 3d 3d 20 54 6f 6e 65 2e 41 6e 61 6c 79 73   === Tone.Analys
24c30 65 72 2e 54 79 70 65 2e 57 61 76 65 66 6f 72 6d  er.Type.Waveform
24c40 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
24c50 20 69 66 20 28 74 68 69 73 2e 5f 72 65 74 75 72   if (this._retur
24c60 6e 54 79 70 65 20 3d 3d 3d 20 54 6f 6e 65 2e 41  nType === Tone.A
24c70 6e 61 6c 79 73 65 72 2e 52 65 74 75 72 6e 54 79  nalyser.ReturnTy
24c80 70 65 2e 42 79 74 65 29 20 7b 0a 09 20 20 20 20  pe.Byte) {..    
24c90 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
24ca0 2e 5f 61 6e 61 6c 79 73 65 72 2e 67 65 74 42 79  ._analyser.getBy
24cb0 74 65 54 69 6d 65 44 6f 6d 61 69 6e 44 61 74 61  teTimeDomainData
24cc0 28 74 68 69 73 2e 5f 62 75 66 66 65 72 29 3b 0a  (this._buffer);.
24cd0 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
24ce0 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20  lse {..         
24cf0 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e         if (this.
24d00 69 73 46 75 6e 63 74 69 6f 6e 28 41 6e 61 6c 79  isFunction(Analy
24d10 73 65 72 4e 6f 64 65 2e 70 72 6f 74 6f 74 79 70  serNode.prototyp
24d20 65 2e 67 65 74 46 6c 6f 61 74 54 69 6d 65 44 6f  e.getFloatTimeDo
24d30 6d 61 69 6e 44 61 74 61 29 29 20 7b 0a 09 20 20  mainData)) {..  
24d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d50 20 20 74 68 69 73 2e 5f 61 6e 61 6c 79 73 65 72    this._analyser
24d60 2e 67 65 74 46 6c 6f 61 74 54 69 6d 65 44 6f 6d  .getFloatTimeDom
24d70 61 69 6e 44 61 74 61 28 74 68 69 73 2e 5f 62 75  ainData(this._bu
24d80 66 66 65 72 29 3b 0a 09 20 20 20 20 20 20 20 20  ffer);..        
24d90 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
24da0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24db0 20 20 20 20 20 20 76 61 72 20 75 69 6e 74 38 20        var uint8 
24dc0 3d 20 6e 65 77 20 55 69 6e 74 38 41 72 72 61 79  = new Uint8Array
24dd0 28 74 68 69 73 2e 5f 62 75 66 66 65 72 2e 6c 65  (this._buffer.le
24de0 6e 67 74 68 29 3b 0a 09 20 20 20 20 20 20 20 20  ngth);..        
24df0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
24e00 2e 5f 61 6e 61 6c 79 73 65 72 2e 67 65 74 42 79  ._analyser.getBy
24e10 74 65 54 69 6d 65 44 6f 6d 61 69 6e 44 61 74 61  teTimeDomainData
24e20 28 75 69 6e 74 38 29 3b 0a 09 20 20 20 20 20 20  (uint8);..      
24e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
24e40 72 65 66 65 72 65 6e 63 65 64 20 68 74 74 70 73  referenced https
24e50 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 6d 6f  ://github.com/mo
24e60 68 61 79 6f 6e 61 6f 2f 67 65 74 2d 66 6c 6f 61  hayonao/get-floa
24e70 74 2d 74 69 6d 65 2d 64 6f 6d 61 69 6e 2d 64 61  t-time-domain-da
24e80 74 61 20 0a 09 20 20 20 20 20 20 20 20 20 20 20  ta ..           
24e90 20 20 20 20 20 20 20 20 20 2f 2f 20 50 4f 4c 59           // POLY
24ea0 46 49 4c 4c 0a 09 20 20 20 20 20 20 20 20 20 20  FILL..          
24eb0 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 76            for (v
24ec0 61 72 20 69 20 3d 20 30 3b 20 69 20 3c 20 75 69  ar i = 0; i < ui
24ed0 6e 74 38 2e 6c 65 6e 67 74 68 3b 20 69 2b 2b 29  nt8.length; i++)
24ee0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24ef0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
24f00 2e 5f 62 75 66 66 65 72 5b 69 5d 20 3d 20 28 75  ._buffer[i] = (u
24f10 69 6e 74 38 5b 69 5d 20 2d 20 31 32 38 29 20 2a  int8[i] - 128) *
24f20 20 30 2e 30 30 37 38 31 32 35 3b 0a 09 20 20 20   0.0078125;..   
24f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f40 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   }..            
24f50 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20      }..         
24f60 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 0a     }..        }.
24f70 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
24f80 74 68 69 73 2e 5f 62 75 66 66 65 72 3b 0a 09 20  this._buffer;.. 
24f90 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09     };..    /**..
24fa0 09 20 2a 20 20 54 68 65 20 73 69 7a 65 20 6f 66  . *  The size of
24fb0 20 61 6e 61 6c 79 73 69 73 2e 20 54 68 69 73 20   analysis. This 
24fc0 6d 75 73 74 20 62 65 20 61 20 70 6f 77 65 72 20  must be a power 
24fd0 6f 66 20 74 77 6f 20 69 6e 20 74 68 65 20 72 61  of two in the ra
24fe0 6e 67 65 20 33 32 20 74 6f 20 33 32 37 36 38 2e  nge 32 to 32768.
24ff0 0a 09 09 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66  ... *  @memberOf
25000 20 54 6f 6e 65 2e 41 6e 61 6c 79 73 65 72 23 0a   Tone.Analyser#.
25010 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4e 75 6d  .. *  @type {Num
25020 62 65 72 7d 0a 09 09 20 2a 20 20 40 6e 61 6d 65  ber}... *  @name
25030 20 73 69 7a 65 0a 09 09 20 2a 2f 0a 09 20 20 20   size... */..   
25040 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72   Object.definePr
25050 6f 70 65 72 74 79 28 54 6f 6e 65 2e 41 6e 61 6c  operty(Tone.Anal
25060 79 73 65 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20  yser.prototype, 
25070 27 73 69 7a 65 27 2c 20 7b 0a 09 20 20 20 20 20  'size', {..     
25080 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e     get: function
25090 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20   () {..         
250a0 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f     return this._
250b0 61 6e 61 6c 79 73 65 72 2e 66 72 65 71 75 65 6e  analyser.frequen
250c0 63 79 42 69 6e 43 6f 75 6e 74 3b 0a 09 20 20 20  cyBinCount;..   
250d0 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20       },..       
250e0 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   set: function (
250f0 73 69 7a 65 29 20 7b 0a 09 20 20 20 20 20 20 20  size) {..       
25100 20 20 20 20 20 74 68 69 73 2e 5f 61 6e 61 6c 79       this._analy
25110 73 65 72 2e 66 66 74 53 69 7a 65 20 3d 20 73 69  ser.fftSize = si
25120 7a 65 20 2a 20 32 3b 0a 09 20 20 20 20 20 20 20  ze * 2;..       
25130 20 20 20 20 20 74 68 69 73 2e 74 79 70 65 20 3d       this.type =
25140 20 74 68 69 73 2e 5f 74 79 70 65 3b 0a 09 20 20   this._type;..  
25150 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b        }..    });
25160 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
25170 54 68 65 20 72 65 74 75 72 6e 20 74 79 70 65 20  The return type 
25180 6f 66 20 54 6f 6e 65 2e 41 6e 61 6c 79 73 65 72  of Tone.Analyser
25190 2e 61 6e 61 6c 79 73 65 28 29 2c 20 65 69 74 68  .analyse(), eith
251a0 65 72 20 22 62 79 74 65 22 20 6f 72 20 22 66 6c  er "byte" or "fl
251b0 6f 61 74 22 2e 20 0a 09 09 20 2a 20 20 57 68 65  oat". ... *  Whe
251c0 6e 20 74 68 65 20 74 79 70 65 20 69 73 20 73 65  n the type is se
251d0 74 20 74 6f 20 22 62 79 74 65 22 20 74 68 65 20  t to "byte" the 
251e0 72 61 6e 67 65 20 6f 66 20 76 61 6c 75 65 73 20  range of values 
251f0 72 65 74 75 72 6e 65 64 20 69 6e 20 74 68 65 20  returned in the 
25200 61 72 72 61 79 0a 09 09 20 2a 20 20 61 72 65 20  array... *  are 
25210 62 65 74 77 65 65 6e 20 30 2d 32 35 35 2e 20 22  between 0-255. "
25220 66 6c 6f 61 74 22 20 76 61 6c 75 65 73 20 61 72  float" values ar
25230 65 20 62 65 74 77 65 65 6e 20 0a 09 09 20 2a 20  e between ... * 
25240 20 5b 2d 31 2c 20 31 5d 20 77 68 65 6e 20 74 68   [-1, 1] when th
25250 65 20 74 79 70 65 20 69 73 20 73 65 74 20 74 6f  e type is set to
25260 20 22 77 61 76 65 66 6f 72 6d 22 20 61 6e 64 20   "waveform" and 
25270 62 65 74 77 65 65 6e 20 0a 09 09 20 2a 20 20 5b  between ... *  [
25280 6d 69 6e 44 65 63 69 62 65 6c 73 2c 6d 61 78 44  minDecibels,maxD
25290 65 63 69 62 65 6c 73 5d 20 77 68 65 6e 20 74 68  ecibels] when th
252a0 65 20 74 79 70 65 20 69 73 20 22 66 66 74 22 2e  e type is "fft".
252b0 0a 09 09 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66  ... *  @memberOf
252c0 20 54 6f 6e 65 2e 41 6e 61 6c 79 73 65 72 23 0a   Tone.Analyser#.
252d0 09 09 20 2a 20 20 40 74 79 70 65 20 7b 53 74 72  .. *  @type {Str
252e0 69 6e 67 7d 0a 09 09 20 2a 20 20 40 6e 61 6d 65  ing}... *  @name
252f0 20 74 79 70 65 0a 09 09 20 2a 2f 0a 09 20 20 20   type... */..   
25300 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72   Object.definePr
25310 6f 70 65 72 74 79 28 54 6f 6e 65 2e 41 6e 61 6c  operty(Tone.Anal
25320 79 73 65 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20  yser.prototype, 
25330 27 72 65 74 75 72 6e 54 79 70 65 27 2c 20 7b 0a  'returnType', {.
25340 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75  .        get: fu
25350 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
25360 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25370 74 68 69 73 2e 5f 72 65 74 75 72 6e 54 79 70 65  this._returnType
25380 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20  ;..        },.. 
25390 20 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63         set: func
253a0 74 69 6f 6e 20 28 74 79 70 65 29 20 7b 0a 09 20  tion (type) {.. 
253b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
253c0 79 70 65 20 3d 3d 3d 20 54 6f 6e 65 2e 41 6e 61  ype === Tone.Ana
253d0 6c 79 73 65 72 2e 52 65 74 75 72 6e 54 79 70 65  lyser.ReturnType
253e0 2e 42 79 74 65 29 20 7b 0a 09 20 20 20 20 20 20  .Byte) {..      
253f0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
25400 62 75 66 66 65 72 20 3d 20 6e 65 77 20 55 69 6e  buffer = new Uin
25410 74 38 41 72 72 61 79 28 74 68 69 73 2e 5f 61 6e  t8Array(this._an
25420 61 6c 79 73 65 72 2e 66 72 65 71 75 65 6e 63 79  alyser.frequency
25430 42 69 6e 43 6f 75 6e 74 29 3b 0a 09 20 20 20 20  BinCount);..    
25440 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69          } else i
25450 66 20 28 74 79 70 65 20 3d 3d 3d 20 54 6f 6e 65  f (type === Tone
25460 2e 41 6e 61 6c 79 73 65 72 2e 52 65 74 75 72 6e  .Analyser.Return
25470 54 79 70 65 2e 46 6c 6f 61 74 29 20 7b 0a 09 20  Type.Float) {.. 
25480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
25490 68 69 73 2e 5f 62 75 66 66 65 72 20 3d 20 6e 65  his._buffer = ne
254a0 77 20 46 6c 6f 61 74 33 32 41 72 72 61 79 28 74  w Float32Array(t
254b0 68 69 73 2e 5f 61 6e 61 6c 79 73 65 72 2e 66 72  his._analyser.fr
254c0 65 71 75 65 6e 63 79 42 69 6e 43 6f 75 6e 74 29  equencyBinCount)
254d0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
254e0 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20   else {..       
254f0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
25500 65 77 20 54 79 70 65 45 72 72 6f 72 28 27 54 6f  ew TypeError('To
25510 6e 65 2e 41 6e 61 6c 61 79 73 65 72 3a 20 69 6e  ne.Analayser: in
25520 76 61 6c 69 64 20 72 65 74 75 72 6e 20 74 79 70  valid return typ
25530 65 3a 20 27 20 2b 20 74 79 70 65 29 3b 0a 09 20  e: ' + type);.. 
25540 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20             }..  
25550 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
25560 72 65 74 75 72 6e 54 79 70 65 20 3d 20 74 79 70  returnType = typ
25570 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  e;..        }.. 
25580 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a     });..    /**.
25590 09 09 20 2a 20 20 54 68 65 20 61 6e 61 6c 79 73  .. *  The analys
255a0 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  is function retu
255b0 72 6e 65 64 20 62 79 20 54 6f 6e 65 2e 41 6e 61  rned by Tone.Ana
255c0 6c 79 73 65 72 2e 61 6e 61 6c 79 73 65 28 29 2c  lyser.analyse(),
255d0 20 65 69 74 68 65 72 20 22 66 66 74 22 20 6f 72   either "fft" or
255e0 20 22 77 61 76 65 66 6f 72 6d 22 2e 20 0a 09 09   "waveform". ...
255f0 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f   *  @memberOf To
25600 6e 65 2e 41 6e 61 6c 79 73 65 72 23 0a 09 09 20  ne.Analyser#... 
25610 2a 20 20 40 74 79 70 65 20 7b 53 74 72 69 6e 67  *  @type {String
25620 7d 0a 09 09 20 2a 20 20 40 6e 61 6d 65 20 74 79  }... *  @name ty
25630 70 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62  pe... */..    Ob
25640 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65  ject.definePrope
25650 72 74 79 28 54 6f 6e 65 2e 41 6e 61 6c 79 73 65  rty(Tone.Analyse
25660 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 74 79  r.prototype, 'ty
25670 70 65 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20  pe', {..        
25680 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29  get: function ()
25690 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
256a0 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 74 79 70  return this._typ
256b0 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09  e;..        },..
256c0 20 20 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e          set: fun
256d0 63 74 69 6f 6e 20 28 74 79 70 65 29 20 7b 0a 09  ction (type) {..
256e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
256f0 74 79 70 65 20 21 3d 3d 20 54 6f 6e 65 2e 41 6e  type !== Tone.An
25700 61 6c 79 73 65 72 2e 54 79 70 65 2e 57 61 76 65  alyser.Type.Wave
25710 66 6f 72 6d 20 26 26 20 74 79 70 65 20 21 3d 3d  form && type !==
25720 20 54 6f 6e 65 2e 41 6e 61 6c 79 73 65 72 2e 54   Tone.Analyser.T
25730 79 70 65 2e 46 46 54 29 20 7b 0a 09 20 20 20 20  ype.FFT) {..    
25740 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
25750 77 20 6e 65 77 20 54 79 70 65 45 72 72 6f 72 28  w new TypeError(
25760 27 54 6f 6e 65 2e 41 6e 61 6c 79 73 65 72 3a 20  'Tone.Analyser: 
25770 69 6e 76 61 6c 69 64 20 74 79 70 65 3a 20 27 20  invalid type: ' 
25780 2b 20 74 79 70 65 29 3b 0a 09 20 20 20 20 20 20  + type);..      
25790 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
257a0 20 20 20 20 20 74 68 69 73 2e 5f 74 79 70 65 20       this._type 
257b0 3d 20 74 79 70 65 3b 0a 09 20 20 20 20 20 20 20  = type;..       
257c0 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20   }..    });..   
257d0 20 2f 2a 2a 0a 09 09 20 2a 20 20 30 20 72 65 70   /**... *  0 rep
257e0 72 65 73 65 6e 74 73 20 6e 6f 20 74 69 6d 65 20  resents no time 
257f0 61 76 65 72 61 67 69 6e 67 20 77 69 74 68 20 74  averaging with t
25800 68 65 20 6c 61 73 74 20 61 6e 61 6c 79 73 69 73  he last analysis
25810 20 66 72 61 6d 65 2e 0a 09 09 20 2a 20 20 40 6d   frame.... *  @m
25820 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 41 6e 61  emberOf Tone.Ana
25830 6c 79 73 65 72 23 0a 09 09 20 2a 20 20 40 74 79  lyser#... *  @ty
25840 70 65 20 7b 4e 6f 72 6d 61 6c 52 61 6e 67 65 7d  pe {NormalRange}
25850 0a 09 09 20 2a 20 20 40 6e 61 6d 65 20 73 6d 6f  ... *  @name smo
25860 6f 74 68 69 6e 67 0a 09 09 20 2a 2f 0a 09 20 20  othing... */..  
25870 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50    Object.defineP
25880 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 41 6e 61  roperty(Tone.Ana
25890 6c 79 73 65 72 2e 70 72 6f 74 6f 74 79 70 65 2c  lyser.prototype,
258a0 20 27 73 6d 6f 6f 74 68 69 6e 67 27 2c 20 7b 0a   'smoothing', {.
258b0 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75  .        get: fu
258c0 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
258d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
258e0 74 68 69 73 2e 5f 61 6e 61 6c 79 73 65 72 2e 73  this._analyser.s
258f0 6d 6f 6f 74 68 69 6e 67 54 69 6d 65 43 6f 6e 73  moothingTimeCons
25900 74 61 6e 74 3b 0a 09 20 20 20 20 20 20 20 20 7d  tant;..        }
25910 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20  ,..        set: 
25920 66 75 6e 63 74 69 6f 6e 20 28 76 61 6c 29 20 7b  function (val) {
25930 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
25940 69 73 2e 5f 61 6e 61 6c 79 73 65 72 2e 73 6d 6f  is._analyser.smo
25950 6f 74 68 69 6e 67 54 69 6d 65 43 6f 6e 73 74 61  othingTimeConsta
25960 6e 74 20 3d 20 76 61 6c 3b 0a 09 20 20 20 20 20  nt = val;..     
25970 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20     }..    });.. 
25980 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 68 65     /**... *  The
25990 20 73 6d 61 6c 6c 65 73 74 20 64 65 63 69 62 65   smallest decibe
259a0 6c 20 76 61 6c 75 65 20 77 68 69 63 68 20 69 73  l value which is
259b0 20 61 6e 61 6c 79 73 65 64 20 62 79 20 74 68 65   analysed by the
259c0 20 46 46 54 2e 20 0a 09 09 20 2a 20 20 40 6d 65   FFT. ... *  @me
259d0 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 41 6e 61 6c  mberOf Tone.Anal
259e0 79 73 65 72 23 0a 09 09 20 2a 20 20 40 74 79 70  yser#... *  @typ
259f0 65 20 7b 44 65 63 69 62 65 6c 73 7d 0a 09 09 20  e {Decibels}... 
25a00 2a 20 20 40 6e 61 6d 65 20 6d 69 6e 44 65 63 69  *  @name minDeci
25a10 62 65 6c 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20  bels... */..    
25a20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f  Object.definePro
25a30 70 65 72 74 79 28 54 6f 6e 65 2e 41 6e 61 6c 79  perty(Tone.Analy
25a40 73 65 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27  ser.prototype, '
25a50 6d 69 6e 44 65 63 69 62 65 6c 73 27 2c 20 7b 0a  minDecibels', {.
25a60 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75  .        get: fu
25a70 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
25a80 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25a90 74 68 69 73 2e 5f 61 6e 61 6c 79 73 65 72 2e 6d  this._analyser.m
25aa0 69 6e 44 65 63 69 62 65 6c 73 3b 0a 09 20 20 20  inDecibels;..   
25ab0 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20       },..       
25ac0 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   set: function (
25ad0 76 61 6c 29 20 7b 0a 09 20 20 20 20 20 20 20 20  val) {..        
25ae0 20 20 20 20 74 68 69 73 2e 5f 61 6e 61 6c 79 73      this._analys
25af0 65 72 2e 6d 69 6e 44 65 63 69 62 65 6c 73 20 3d  er.minDecibels =
25b00 20 76 61 6c 3b 0a 09 20 20 20 20 20 20 20 20 7d   val;..        }
25b10 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f  ..    });..    /
25b20 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20 6c 61 72  **... *  The lar
25b30 67 65 73 74 20 64 65 63 69 62 65 6c 20 76 61 6c  gest decibel val
25b40 75 65 20 77 68 69 63 68 20 69 73 20 61 6e 61 6c  ue which is anal
25b50 79 73 65 64 20 62 79 20 74 68 65 20 46 46 54 2e  ysed by the FFT.
25b60 20 0a 09 09 20 2a 20 20 40 6d 65 6d 62 65 72 4f   ... *  @memberO
25b70 66 20 54 6f 6e 65 2e 41 6e 61 6c 79 73 65 72 23  f Tone.Analyser#
25b80 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b 44 65  ... *  @type {De
25b90 63 69 62 65 6c 73 7d 0a 09 09 20 2a 20 20 40 6e  cibels}... *  @n
25ba0 61 6d 65 20 6d 61 78 44 65 63 69 62 65 6c 73 0a  ame maxDecibels.
25bb0 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63  .. */..    Objec
25bc0 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79  t.defineProperty
25bd0 28 54 6f 6e 65 2e 41 6e 61 6c 79 73 65 72 2e 70  (Tone.Analyser.p
25be0 72 6f 74 6f 74 79 70 65 2c 20 27 6d 61 78 44 65  rototype, 'maxDe
25bf0 63 69 62 65 6c 73 27 2c 20 7b 0a 09 20 20 20 20  cibels', {..    
25c00 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f      get: functio
25c10 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
25c20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
25c30 5f 61 6e 61 6c 79 73 65 72 2e 6d 61 78 44 65 63  _analyser.maxDec
25c40 69 62 65 6c 73 3b 0a 09 20 20 20 20 20 20 20 20  ibels;..        
25c50 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a  },..        set:
25c60 20 66 75 6e 63 74 69 6f 6e 20 28 76 61 6c 29 20   function (val) 
25c70 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
25c80 68 69 73 2e 5f 61 6e 61 6c 79 73 65 72 2e 6d 61  his._analyser.ma
25c90 78 44 65 63 69 62 65 6c 73 20 3d 20 76 61 6c 3b  xDecibels = val;
25ca0 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
25cb0 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09   });..    /**...
25cc0 20 2a 20 20 43 6c 65 61 6e 20 75 70 2e 0a 09 09   *  Clean up....
25cd0 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 54 6f   *  @return  {To
25ce0 6e 65 2e 41 6e 61 6c 79 73 65 72 7d 20 20 74 68  ne.Analyser}  th
25cf0 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  is... */..    To
25d00 6e 65 2e 41 6e 61 6c 79 73 65 72 2e 70 72 6f 74  ne.Analyser.prot
25d10 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20  otype.dispose = 
25d20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
25d30 20 20 20 20 20 20 20 54 6f 6e 65 2e 70 72 6f 74         Tone.prot
25d40 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 2e 63 61  otype.dispose.ca
25d50 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20 20 20 20  ll(this);..     
25d60 20 20 20 74 68 69 73 2e 5f 61 6e 61 6c 79 73 65     this._analyse
25d70 72 2e 64 69 73 63 6f 6e 6e 65 63 74 28 29 3b 0a  r.disconnect();.
25d80 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 61  .        this._a
25d90 6e 61 6c 79 73 65 72 20 3d 20 6e 75 6c 6c 3b 0a  nalyser = null;.
25da0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 62  .        this._b
25db0 75 66 66 65 72 20 3d 20 6e 75 6c 6c 3b 0a 09 20  uffer = null;.. 
25dc0 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74 75 72     };..    retur
25dd0 6e 20 54 6f 6e 65 2e 41 6e 61 6c 79 73 65 72 3b  n Tone.Analyser;
25de0 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75  ..});..Module(fu
25df0 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a  nction (Tone) {.
25e00 09 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09  .    ..    /**..
25e10 09 20 2a 20 20 40 63 6c 61 73 73 20 54 6f 6e 65  . *  @class Tone
25e20 2e 43 6f 6d 70 72 65 73 73 6f 72 20 69 73 20 61  .Compressor is a
25e30 20 74 68 69 6e 20 77 72 61 70 70 65 72 20 61 72   thin wrapper ar
25e40 6f 75 6e 64 20 74 68 65 20 57 65 62 20 41 75 64  ound the Web Aud
25e50 69 6f 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20  io ... *        
25e60 20 5b 44 79 6e 61 6d 69 63 73 43 6f 6d 70 72 65   [DynamicsCompre
25e70 73 73 6f 72 4e 6f 64 65 5d 28 68 74 74 70 3a 2f  ssorNode](http:/
25e80 2f 77 65 62 61 75 64 69 6f 2e 67 69 74 68 75 62  /webaudio.github
25e90 2e 69 6f 2f 77 65 62 2d 61 75 64 69 6f 2d 61 70  .io/web-audio-ap
25ea0 69 2f 23 74 68 65 2d 64 79 6e 61 6d 69 63 73 63  i/#the-dynamicsc
25eb0 6f 6d 70 72 65 73 73 6f 72 6e 6f 64 65 2d 69 6e  ompressornode-in
25ec0 74 65 72 66 61 63 65 29 2e 0a 09 09 20 2a 20 20  terface).... *  
25ed0 20 20 20 20 20 20 20 43 6f 6d 70 72 65 73 73 69         Compressi
25ee0 6f 6e 20 72 65 64 75 63 65 73 20 74 68 65 20 76  on reduces the v
25ef0 6f 6c 75 6d 65 20 6f 66 20 6c 6f 75 64 20 73 6f  olume of loud so
25f00 75 6e 64 73 20 6f 72 20 61 6d 70 6c 69 66 69 65  unds or amplifie
25f10 73 20 71 75 69 65 74 20 73 6f 75 6e 64 73 20 0a  s quiet sounds .
25f20 09 09 20 2a 20 20 20 20 20 20 20 20 20 62 79 20  .. *         by 
25f30 6e 61 72 72 6f 77 69 6e 67 20 6f 72 20 22 63 6f  narrowing or "co
25f40 6d 70 72 65 73 73 69 6e 67 22 20 61 6e 20 61 75  mpressing" an au
25f50 64 69 6f 20 73 69 67 6e 61 6c 27 73 20 64 79 6e  dio signal's dyn
25f60 61 6d 69 63 20 72 61 6e 67 65 2e 20 0a 09 09 20  amic range. ... 
25f70 2a 20 20 20 20 20 20 20 20 20 52 65 61 64 20 6d  *         Read m
25f80 6f 72 65 20 6f 6e 20 5b 57 69 6b 69 70 65 64 69  ore on [Wikipedi
25f90 61 5d 28 68 74 74 70 73 3a 2f 2f 65 6e 2e 77 69  a](https://en.wi
25fa0 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
25fb0 2f 44 79 6e 61 6d 69 63 5f 72 61 6e 67 65 5f 63  /Dynamic_range_c
25fc0 6f 6d 70 72 65 73 73 69 6f 6e 29 2e 0a 09 09 20  ompression).... 
25fd0 2a 0a 09 09 20 2a 20 20 40 65 78 74 65 6e 64 73  *... *  @extends
25fe0 20 7b 54 6f 6e 65 7d 0a 09 09 20 2a 20 20 40 63   {Tone}... *  @c
25ff0 6f 6e 73 74 72 75 63 74 6f 72 0a 09 09 20 2a 20  onstructor... * 
26000 20 40 70 61 72 61 6d 20 7b 44 65 63 69 62 65 6c   @param {Decibel
26010 73 7c 4f 62 6a 65 63 74 7d 20 5b 74 68 72 65 73  s|Object} [thres
26020 68 6f 6c 64 5d 20 54 68 65 20 76 61 6c 75 65 20  hold] The value 
26030 61 62 6f 76 65 20 77 68 69 63 68 20 74 68 65 20  above which the 
26040 63 6f 6d 70 72 65 73 73 69 6f 6e 20 73 74 61 72  compression star
26050 74 73 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64  ts to be applied
26060 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b  .... *  @param {
26070 50 6f 73 69 74 69 76 65 7d 20 5b 72 61 74 69 6f  Positive} [ratio
26080 5d 20 54 68 65 20 67 61 69 6e 20 72 65 64 75 63  ] The gain reduc
26090 74 69 6f 6e 20 72 61 74 69 6f 2e 0a 09 09 20 2a  tion ratio.... *
260a0 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20    @example... * 
260b0 76 61 72 20 63 6f 6d 70 20 3d 20 6e 65 77 20 54  var comp = new T
260c0 6f 6e 65 2e 43 6f 6d 70 72 65 73 73 6f 72 28 2d  one.Compressor(-
260d0 33 30 2c 20 33 29 3b 0a 09 09 20 2a 2f 0a 09 20  30, 3);... */.. 
260e0 20 20 20 54 6f 6e 65 2e 43 6f 6d 70 72 65 73 73     Tone.Compress
260f0 6f 72 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  or = function ()
26100 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20   {..        var 
26110 6f 70 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e 6f  options = this.o
26120 70 74 69 6f 6e 73 4f 62 6a 65 63 74 28 61 72 67  ptionsObject(arg
26130 75 6d 65 6e 74 73 2c 20 5b 0a 09 20 20 20 20 20  uments, [..     
26140 20 20 20 20 20 20 20 27 74 68 72 65 73 68 6f 6c         'threshol
26150 64 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  d',..           
26160 20 27 72 61 74 69 6f 27 0a 09 20 20 20 20 20 20   'ratio'..      
26170 20 20 5d 2c 20 54 6f 6e 65 2e 43 6f 6d 70 72 65    ], Tone.Compre
26180 73 73 6f 72 2e 64 65 66 61 75 6c 74 73 29 3b 0a  ssor.defaults);.
26190 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
261a0 20 2a 20 20 74 68 65 20 63 6f 6d 70 72 65 73 73   *  the compress
261b0 6f 72 20 6e 6f 64 65 0a 09 09 09 20 2a 20 20 40  or node.... *  @
261c0 74 79 70 65 20 7b 44 79 6e 61 6d 69 63 73 43 6f  type {DynamicsCo
261d0 6d 70 72 65 73 73 6f 72 4e 6f 64 65 7d 0a 09 09  mpressorNode}...
261e0 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
261f0 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
26200 69 73 2e 5f 63 6f 6d 70 72 65 73 73 6f 72 20 3d  is._compressor =
26210 20 74 68 69 73 2e 69 6e 70 75 74 20 3d 20 74 68   this.input = th
26220 69 73 2e 6f 75 74 70 75 74 20 3d 20 74 68 69 73  is.output = this
26230 2e 63 6f 6e 74 65 78 74 2e 63 72 65 61 74 65 44  .context.createD
26240 79 6e 61 6d 69 63 73 43 6f 6d 70 72 65 73 73 6f  ynamicsCompresso
26250 72 28 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a  r();..        /*
26260 2a 0a 09 09 09 20 2a 20 20 74 68 65 20 74 68 72  *.... *  the thr
26270 65 73 68 6f 6c 64 20 76 61 75 65 0a 09 09 09 20  eshold vaue.... 
26280 2a 20 20 40 74 79 70 65 20 7b 44 65 63 69 62 65  *  @type {Decibe
26290 6c 73 7d 0a 09 09 09 20 2a 20 20 40 73 69 67 6e  ls}.... *  @sign
262a0 61 6c 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  al.... */..     
262b0 20 20 20 74 68 69 73 2e 74 68 72 65 73 68 6f 6c     this.threshol
262c0 64 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 50 61 72  d = new Tone.Par
262d0 61 6d 28 7b 0a 09 20 20 20 20 20 20 20 20 20 20  am({..          
262e0 20 20 27 70 61 72 61 6d 27 3a 20 74 68 69 73 2e    'param': this.
262f0 5f 63 6f 6d 70 72 65 73 73 6f 72 2e 74 68 72 65  _compressor.thre
26300 73 68 6f 6c 64 2c 0a 09 20 20 20 20 20 20 20 20  shold,..        
26310 20 20 20 20 27 75 6e 69 74 73 27 3a 20 54 6f 6e      'units': Ton
26320 65 2e 54 79 70 65 2e 44 65 63 69 62 65 6c 73 2c  e.Type.Decibels,
26330 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 63  ..            'c
26340 6f 6e 76 65 72 74 27 3a 20 66 61 6c 73 65 0a 09  onvert': false..
26350 20 20 20 20 20 20 20 20 7d 29 3b 0a 09 20 20 20          });..   
26360 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
26370 54 68 65 20 61 74 74 61 63 6b 20 70 61 72 61 6d  The attack param
26380 65 74 65 72 0a 09 09 09 20 2a 20 20 40 74 79 70  eter.... *  @typ
26390 65 20 7b 54 69 6d 65 7d 0a 09 09 09 20 2a 20 20  e {Time}.... *  
263a0 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f 0a 09  @signal.... */..
263b0 20 20 20 20 20 20 20 20 74 68 69 73 2e 61 74 74          this.att
263c0 61 63 6b 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 50  ack = new Tone.P
263d0 61 72 61 6d 28 74 68 69 73 2e 5f 63 6f 6d 70 72  aram(this._compr
263e0 65 73 73 6f 72 2e 61 74 74 61 63 6b 2c 20 54 6f  essor.attack, To
263f0 6e 65 2e 54 79 70 65 2e 54 69 6d 65 29 3b 0a 09  ne.Type.Time);..
26400 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
26410 2a 20 20 54 68 65 20 72 65 6c 65 61 73 65 20 70  *  The release p
26420 61 72 61 6d 65 74 65 72 0a 09 09 09 20 2a 20 20  arameter.... *  
26430 40 74 79 70 65 20 7b 54 69 6d 65 7d 0a 09 09 09  @type {Time}....
26440 20 2a 20 20 40 73 69 67 6e 61 6c 0a 09 09 09 20   *  @signal.... 
26450 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
26460 2e 72 65 6c 65 61 73 65 20 3d 20 6e 65 77 20 54  .release = new T
26470 6f 6e 65 2e 50 61 72 61 6d 28 74 68 69 73 2e 5f  one.Param(this._
26480 63 6f 6d 70 72 65 73 73 6f 72 2e 72 65 6c 65 61  compressor.relea
26490 73 65 2c 20 54 6f 6e 65 2e 54 79 70 65 2e 54 69  se, Tone.Type.Ti
264a0 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a  me);..        /*
264b0 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 6b 6e 65  *.... *  The kne
264c0 65 20 70 61 72 61 6d 65 74 65 72 0a 09 09 09 20  e parameter.... 
264d0 2a 20 20 40 74 79 70 65 20 7b 44 65 63 69 62 65  *  @type {Decibe
264e0 6c 73 7d 0a 09 09 09 20 2a 20 20 40 73 69 67 6e  ls}.... *  @sign
264f0 61 6c 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  al.... */..     
26500 20 20 20 74 68 69 73 2e 6b 6e 65 65 20 3d 20 6e     this.knee = n
26510 65 77 20 54 6f 6e 65 2e 50 61 72 61 6d 28 7b 0a  ew Tone.Param({.
26520 09 20 20 20 20 20 20 20 20 20 20 20 20 27 70 61  .            'pa
26530 72 61 6d 27 3a 20 74 68 69 73 2e 5f 63 6f 6d 70  ram': this._comp
26540 72 65 73 73 6f 72 2e 6b 6e 65 65 2c 0a 09 20 20  ressor.knee,..  
26550 20 20 20 20 20 20 20 20 20 20 27 75 6e 69 74 73            'units
26560 27 3a 20 54 6f 6e 65 2e 54 79 70 65 2e 44 65 63  ': Tone.Type.Dec
26570 69 62 65 6c 73 2c 0a 09 20 20 20 20 20 20 20 20  ibels,..        
26580 20 20 20 20 27 63 6f 6e 76 65 72 74 27 3a 20 66      'convert': f
26590 61 6c 73 65 0a 09 20 20 20 20 20 20 20 20 7d 29  alse..        })
265a0 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
265b0 09 09 20 2a 20 20 54 68 65 20 72 61 74 69 6f 20  .. *  The ratio 
265c0 76 61 6c 75 65 0a 09 09 09 20 2a 20 20 40 74 79  value.... *  @ty
265d0 70 65 20 7b 4e 75 6d 62 65 72 7d 0a 09 09 09 20  pe {Number}.... 
265e0 2a 20 20 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a  *  @signal.... *
265f0 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
26600 72 61 74 69 6f 20 3d 20 6e 65 77 20 54 6f 6e 65  ratio = new Tone
26610 2e 50 61 72 61 6d 28 7b 0a 09 20 20 20 20 20 20  .Param({..      
26620 20 20 20 20 20 20 27 70 61 72 61 6d 27 3a 20 74        'param': t
26630 68 69 73 2e 5f 63 6f 6d 70 72 65 73 73 6f 72 2e  his._compressor.
26640 72 61 74 69 6f 2c 0a 09 20 20 20 20 20 20 20 20  ratio,..        
26650 20 20 20 20 27 63 6f 6e 76 65 72 74 27 3a 20 66      'convert': f
26660 61 6c 73 65 0a 09 20 20 20 20 20 20 20 20 7d 29  alse..        })
26670 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 73 65 74  ;..        //set
26680 20 74 68 65 20 64 65 66 61 75 6c 74 73 0a 09 20   the defaults.. 
26690 20 20 20 20 20 20 20 74 68 69 73 2e 5f 72 65 61         this._rea
266a0 64 4f 6e 6c 79 28 5b 0a 09 20 20 20 20 20 20 20  dOnly([..       
266b0 20 20 20 20 20 27 6b 6e 65 65 27 2c 0a 09 20 20       'knee',..  
266c0 20 20 20 20 20 20 20 20 20 20 27 72 65 6c 65 61            'relea
266d0 73 65 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20  se',..          
266e0 20 20 27 61 74 74 61 63 6b 27 2c 0a 09 20 20 20    'attack',..   
266f0 20 20 20 20 20 20 20 20 20 27 72 61 74 69 6f 27           'ratio'
26700 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
26710 74 68 72 65 73 68 6f 6c 64 27 0a 09 20 20 20 20  threshold'..    
26720 20 20 20 20 5d 29 3b 0a 09 20 20 20 20 20 20 20      ]);..       
26730 20 74 68 69 73 2e 73 65 74 28 6f 70 74 69 6f 6e   this.set(option
26740 73 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  s);..    };..   
26750 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e   Tone.extend(Ton
26760 65 2e 43 6f 6d 70 72 65 73 73 6f 72 29 3b 0a 09  e.Compressor);..
26770 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 73      /**... *  @s
26780 74 61 74 69 63 0a 09 09 20 2a 20 20 40 63 6f 6e  tatic... *  @con
26790 73 74 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b  st... *  @type {
267a0 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a 09 20  Object}... */.. 
267b0 20 20 20 54 6f 6e 65 2e 43 6f 6d 70 72 65 73 73     Tone.Compress
267c0 6f 72 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b 0a  or.defaults = {.
267d0 09 20 20 20 20 20 20 20 20 27 72 61 74 69 6f 27  .        'ratio'
267e0 3a 20 31 32 2c 0a 09 20 20 20 20 20 20 20 20 27  : 12,..        '
267f0 74 68 72 65 73 68 6f 6c 64 27 3a 20 2d 32 34 2c  threshold': -24,
26800 0a 09 20 20 20 20 20 20 20 20 27 72 65 6c 65 61  ..        'relea
26810 73 65 27 3a 20 30 2e 32 35 2c 0a 09 20 20 20 20  se': 0.25,..    
26820 20 20 20 20 27 61 74 74 61 63 6b 27 3a 20 30 2e      'attack': 0.
26830 30 30 33 2c 0a 09 20 20 20 20 20 20 20 20 27 6b  003,..        'k
26840 6e 65 65 27 3a 20 33 30 0a 09 20 20 20 20 7d 3b  nee': 30..    };
26850 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
26860 63 6c 65 61 6e 20 75 70 0a 09 09 20 2a 20 20 40  clean up... *  @
26870 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 43 6f  returns {Tone.Co
26880 6d 70 72 65 73 73 6f 72 7d 20 74 68 69 73 0a 09  mpressor} this..
26890 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 43  . */..    Tone.C
268a0 6f 6d 70 72 65 73 73 6f 72 2e 70 72 6f 74 6f 74  ompressor.protot
268b0 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75  ype.dispose = fu
268c0 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
268d0 20 20 20 20 20 54 6f 6e 65 2e 70 72 6f 74 6f 74       Tone.protot
268e0 79 70 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c  ype.dispose.call
268f0 28 74 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20  (this);..       
26900 20 74 68 69 73 2e 5f 77 72 69 74 61 62 6c 65 28   this._writable(
26910 5b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  [..            '
26920 6b 6e 65 65 27 2c 0a 09 20 20 20 20 20 20 20 20  knee',..        
26930 20 20 20 20 27 72 65 6c 65 61 73 65 27 2c 0a 09      'release',..
26940 20 20 20 20 20 20 20 20 20 20 20 20 27 61 74 74              'att
26950 61 63 6b 27 2c 0a 09 20 20 20 20 20 20 20 20 20  ack',..         
26960 20 20 20 27 72 61 74 69 6f 27 2c 0a 09 20 20 20     'ratio',..   
26970 20 20 20 20 20 20 20 20 20 27 74 68 72 65 73 68           'thresh
26980 6f 6c 64 27 0a 09 20 20 20 20 20 20 20 20 5d 29  old'..        ])
26990 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
269a0 5f 63 6f 6d 70 72 65 73 73 6f 72 2e 64 69 73 63  _compressor.disc
269b0 6f 6e 6e 65 63 74 28 29 3b 0a 09 20 20 20 20 20  onnect();..     
269c0 20 20 20 74 68 69 73 2e 5f 63 6f 6d 70 72 65 73     this._compres
269d0 73 6f 72 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  sor = null;..   
269e0 20 20 20 20 20 74 68 69 73 2e 61 74 74 61 63 6b       this.attack
269f0 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20  .dispose();..   
26a00 20 20 20 20 20 74 68 69 73 2e 61 74 74 61 63 6b       this.attack
26a10 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
26a20 20 20 74 68 69 73 2e 72 65 6c 65 61 73 65 2e 64    this.release.d
26a30 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20  ispose();..     
26a40 20 20 20 74 68 69 73 2e 72 65 6c 65 61 73 65 20     this.release 
26a50 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
26a60 20 74 68 69 73 2e 74 68 72 65 73 68 6f 6c 64 2e   this.threshold.
26a70 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20  dispose();..    
26a80 20 20 20 20 74 68 69 73 2e 74 68 72 65 73 68 6f      this.thresho
26a90 6c 64 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  ld = null;..    
26aa0 20 20 20 20 74 68 69 73 2e 72 61 74 69 6f 2e 64      this.ratio.d
26ab0 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20  ispose();..     
26ac0 20 20 20 74 68 69 73 2e 72 61 74 69 6f 20 3d 20     this.ratio = 
26ad0 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74  null;..        t
26ae0 68 69 73 2e 6b 6e 65 65 2e 64 69 73 70 6f 73 65  his.knee.dispose
26af0 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ();..        thi
26b00 73 2e 6b 6e 65 65 20 3d 20 6e 75 6c 6c 3b 0a 09  s.knee = null;..
26b10 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
26b20 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  his;..    };..  
26b30 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 43 6f    return Tone.Co
26b40 6d 70 72 65 73 73 6f 72 3b 0a 09 7d 29 3b 0a 09  mpressor;..});..
26b50 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20  Module(function 
26b60 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09  (Tone) {..    ..
26b70 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63      /**... *  @c
26b80 6c 61 73 73 20 41 64 64 20 61 20 73 69 67 6e 61  lass Add a signa
26b90 6c 20 61 6e 64 20 61 20 6e 75 6d 62 65 72 20 6f  l and a number o
26ba0 72 20 74 77 6f 20 73 69 67 6e 61 6c 73 2e 20 57  r two signals. W
26bb0 68 65 6e 20 6e 6f 20 76 61 6c 75 65 20 69 73 0a  hen no value is.
26bc0 09 09 20 2a 20 20 20 20 20 20 20 20 20 70 61 73  .. *         pas
26bd0 73 65 64 20 69 6e 74 6f 20 74 68 65 20 63 6f 6e  sed into the con
26be0 73 74 72 75 63 74 6f 72 2c 20 54 6f 6e 65 2e 41  structor, Tone.A
26bf0 64 64 20 77 69 6c 6c 20 73 75 6d 20 3c 63 6f 64  dd will sum <cod
26c00 65 3e 69 6e 70 75 74 5b 30 5d 3c 2f 63 6f 64 65  e>input[0]</code
26c10 3e 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 61  >... *         a
26c20 6e 64 20 3c 63 6f 64 65 3e 69 6e 70 75 74 5b 31  nd <code>input[1
26c30 5d 3c 2f 63 6f 64 65 3e 2e 20 49 66 20 61 20 76  ]</code>. If a v
26c40 61 6c 75 65 20 69 73 20 70 61 73 73 65 64 20 69  alue is passed i
26c50 6e 74 6f 20 74 68 65 20 63 6f 6e 73 74 72 75 63  nto the construc
26c60 74 6f 72 2c 20 0a 09 09 20 2a 20 20 20 20 20 20  tor, ... *      
26c70 20 20 20 74 68 65 20 69 74 20 77 69 6c 6c 20 62     the it will b
26c80 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 69  e added to the i
26c90 6e 70 75 74 2e 0a 09 09 20 2a 20 20 0a 09 09 20  nput.... *  ... 
26ca0 2a 20 20 40 63 6f 6e 73 74 72 75 63 74 6f 72 0a  *  @constructor.
26cb0 09 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b  .. *  @extends {
26cc0 54 6f 6e 65 2e 53 69 67 6e 61 6c 7d 0a 09 09 20  Tone.Signal}... 
26cd0 2a 20 20 40 70 61 72 61 6d 20 7b 6e 75 6d 62 65  *  @param {numbe
26ce0 72 3d 7d 20 76 61 6c 75 65 20 49 66 20 6e 6f 20  r=} value If no 
26cf0 76 61 6c 75 65 20 69 73 20 70 72 6f 76 69 64 65  value is provide
26d00 64 2c 20 54 6f 6e 65 2e 41 64 64 20 77 69 6c 6c  d, Tone.Add will
26d10 20 73 75 6d 20 74 68 65 20 66 69 72 73 74 0a 09   sum the first..
26d20 09 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
26d30 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20              and 
26d40 73 65 63 6f 6e 64 20 69 6e 70 75 74 73 2e 20 0a  second inputs. .
26d50 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09  .. *  @example..
26d60 09 20 2a 20 76 61 72 20 73 69 67 6e 61 6c 20 3d  . * var signal =
26d70 20 6e 65 77 20 54 6f 6e 65 2e 53 69 67 6e 61 6c   new Tone.Signal
26d80 28 32 29 3b 0a 09 09 20 2a 20 76 61 72 20 61 64  (2);... * var ad
26d90 64 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 41 64 64  d = new Tone.Add
26da0 28 32 29 3b 0a 09 09 20 2a 20 73 69 67 6e 61 6c  (2);... * signal
26db0 2e 63 6f 6e 6e 65 63 74 28 61 64 64 29 3b 0a 09  .connect(add);..
26dc0 09 20 2a 20 2f 2f 74 68 65 20 6f 75 74 70 75 74  . * //the output
26dd0 20 6f 66 20 61 64 64 20 65 71 75 61 6c 73 20 34   of add equals 4
26de0 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a  ... *  @example.
26df0 09 09 20 2a 20 2f 2f 69 66 20 63 6f 6e 73 74 72  .. * //if constr
26e00 75 63 74 65 64 20 77 69 74 68 20 6e 6f 20 61 72  ucted with no ar
26e10 67 75 6d 65 6e 74 73 0a 09 09 20 2a 20 2f 2f 69  guments... * //i
26e20 74 20 77 69 6c 6c 20 61 64 64 20 74 68 65 20 66  t will add the f
26e30 69 72 73 74 20 61 6e 64 20 73 65 63 6f 6e 64 20  irst and second 
26e40 69 6e 70 75 74 73 0a 09 09 20 2a 20 76 61 72 20  inputs... * var 
26e50 61 64 64 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 41  add = new Tone.A
26e60 64 64 28 29 3b 0a 09 09 20 2a 20 76 61 72 20 73  dd();... * var s
26e70 69 67 30 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53  ig0 = new Tone.S
26e80 69 67 6e 61 6c 28 33 29 2e 63 6f 6e 6e 65 63 74  ignal(3).connect
26e90 28 61 64 64 2c 20 30 2c 20 30 29 3b 0a 09 09 20  (add, 0, 0);... 
26ea0 2a 20 76 61 72 20 73 69 67 31 20 3d 20 6e 65 77  * var sig1 = new
26eb0 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 28 34 29 2e   Tone.Signal(4).
26ec0 63 6f 6e 6e 65 63 74 28 61 64 64 2c 20 30 2c 20  connect(add, 0, 
26ed0 31 29 3b 0a 09 09 20 2a 20 2f 2f 74 68 65 20 6f  1);... * //the o
26ee0 75 74 70 75 74 20 6f 66 20 61 64 64 20 65 71 75  utput of add equ
26ef0 61 6c 73 20 37 2e 20 0a 09 09 20 2a 2f 0a 09 20  als 7. ... */.. 
26f00 20 20 20 54 6f 6e 65 2e 41 64 64 20 3d 20 66 75     Tone.Add = fu
26f10 6e 63 74 69 6f 6e 20 28 76 61 6c 75 65 29 20 7b  nction (value) {
26f20 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 63  ..        this.c
26f30 72 65 61 74 65 49 6e 73 4f 75 74 73 28 32 2c 20  reateInsOuts(2, 
26f40 30 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  0);..        /**
26f50 0a 09 09 09 20 2a 20 20 74 68 65 20 73 75 6d 6d  .... *  the summ
26f60 69 6e 67 20 6e 6f 64 65 0a 09 09 09 20 2a 20 20  ing node.... *  
26f70 40 74 79 70 65 20 7b 47 61 69 6e 4e 6f 64 65 7d  @type {GainNode}
26f80 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  .... *  @private
26f90 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
26fa0 20 74 68 69 73 2e 5f 73 75 6d 20 3d 20 74 68 69   this._sum = thi
26fb0 73 2e 69 6e 70 75 74 5b 30 5d 20 3d 20 74 68 69  s.input[0] = thi
26fc0 73 2e 69 6e 70 75 74 5b 31 5d 20 3d 20 74 68 69  s.input[1] = thi
26fd0 73 2e 6f 75 74 70 75 74 20 3d 20 6e 65 77 20 54  s.output = new T
26fe0 6f 6e 65 2e 47 61 69 6e 28 29 3b 0a 09 20 20 20  one.Gain();..   
26ff0 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
27000 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 20 20  @private.... *  
27010 40 74 79 70 65 20 7b 54 6f 6e 65 2e 53 69 67 6e  @type {Tone.Sign
27020 61 6c 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  al}.... */..    
27030 20 20 20 20 74 68 69 73 2e 5f 70 61 72 61 6d 20      this._param 
27040 3d 20 74 68 69 73 2e 69 6e 70 75 74 5b 31 5d 20  = this.input[1] 
27050 3d 20 6e 65 77 20 54 6f 6e 65 2e 53 69 67 6e 61  = new Tone.Signa
27060 6c 28 76 61 6c 75 65 29 3b 0a 09 20 20 20 20 20  l(value);..     
27070 20 20 20 74 68 69 73 2e 5f 70 61 72 61 6d 2e 63     this._param.c
27080 6f 6e 6e 65 63 74 28 74 68 69 73 2e 5f 73 75 6d  onnect(this._sum
27090 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  );..    };..    
270a0 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65  Tone.extend(Tone
270b0 2e 41 64 64 2c 20 54 6f 6e 65 2e 53 69 67 6e 61  .Add, Tone.Signa
270c0 6c 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  l);..    /**... 
270d0 2a 20 20 43 6c 65 61 6e 20 75 70 2e 0a 09 09 20  *  Clean up.... 
270e0 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e  *  @returns {Ton
270f0 65 2e 41 64 64 7d 20 74 68 69 73 0a 09 09 20 2a  e.Add} this... *
27100 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 41 64 64 2e  /..    Tone.Add.
27110 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73  prototype.dispos
27120 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  e = function () 
27130 7b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e  {..        Tone.
27140 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73  prototype.dispos
27150 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20  e.call(this);.. 
27160 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 75 6d         this._sum
27170 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20  .dispose();..   
27180 20 20 20 20 20 74 68 69 73 2e 5f 73 75 6d 20 3d       this._sum =
27190 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
271a0 74 68 69 73 2e 5f 70 61 72 61 6d 2e 64 69 73 70  this._param.disp
271b0 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ose();..        
271c0 74 68 69 73 2e 5f 70 61 72 61 6d 20 3d 20 6e 75  this._param = nu
271d0 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74  ll;..        ret
271e0 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
271f0 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f  ;..    return To
27200 6e 65 2e 41 64 64 3b 0a 09 7d 29 3b 0a 09 4d 6f  ne.Add;..});..Mo
27210 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28 54  dule(function (T
27220 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09 20 20  one) {..    ..  
27230 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61    /**... *  @cla
27240 73 73 20 20 4d 75 6c 74 69 70 6c 79 20 74 77 6f  ss  Multiply two
27250 20 69 6e 63 6f 6d 69 6e 67 20 73 69 67 6e 61 6c   incoming signal
27260 73 2e 20 4f 72 2c 20 69 66 20 61 20 6e 75 6d 62  s. Or, if a numb
27270 65 72 20 69 73 20 67 69 76 65 6e 20 69 6e 20 74  er is given in t
27280 68 65 20 63 6f 6e 73 74 72 75 63 74 6f 72 2c 20  he constructor, 
27290 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 6d  ... *          m
272a0 75 6c 74 69 70 6c 69 65 73 20 74 68 65 20 69 6e  ultiplies the in
272b0 63 6f 6d 69 6e 67 20 73 69 67 6e 61 6c 20 62 79  coming signal by
272c0 20 74 68 61 74 20 76 61 6c 75 65 2e 20 0a 09 09   that value. ...
272d0 20 2a 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 72   *... *  @constr
272e0 75 63 74 6f 72 0a 09 09 20 2a 20 20 40 65 78 74  uctor... *  @ext
272f0 65 6e 64 73 20 7b 54 6f 6e 65 2e 53 69 67 6e 61  ends {Tone.Signa
27300 6c 7d 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  l}... *  @param 
27310 7b 6e 75 6d 62 65 72 3d 7d 20 76 61 6c 75 65 20  {number=} value 
27320 43 6f 6e 73 74 61 6e 74 20 76 61 6c 75 65 20 74  Constant value t
27330 6f 20 6d 75 6c 74 69 70 6c 65 2e 20 49 66 20 6e  o multiple. If n
27340 6f 20 76 61 6c 75 65 20 69 73 20 70 72 6f 76 69  o value is provi
27350 64 65 64 2c 0a 09 09 20 2a 20 20 20 20 20 20 20  ded,... *       
27360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27370 20 20 69 74 20 77 69 6c 6c 20 72 65 74 75 72 6e    it will return
27380 20 74 68 65 20 70 72 6f 64 75 63 74 20 6f 66 20   the product of 
27390 74 68 65 20 66 69 72 73 74 20 61 6e 64 20 73 65  the first and se
273a0 63 6f 6e 64 20 69 6e 70 75 74 73 0a 09 09 20 2a  cond inputs... *
273b0 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20    @example... * 
273c0 76 61 72 20 6d 75 6c 74 20 3d 20 6e 65 77 20 54  var mult = new T
273d0 6f 6e 65 2e 4d 75 6c 74 69 70 6c 79 28 29 3b 0a  one.Multiply();.
273e0 09 09 20 2a 20 76 61 72 20 73 69 67 41 20 3d 20  .. * var sigA = 
273f0 6e 65 77 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 28  new Tone.Signal(
27400 33 29 3b 0a 09 09 20 2a 20 76 61 72 20 73 69 67  3);... * var sig
27410 42 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53 69 67  B = new Tone.Sig
27420 6e 61 6c 28 34 29 3b 0a 09 09 20 2a 20 73 69 67  nal(4);... * sig
27430 41 2e 63 6f 6e 6e 65 63 74 28 6d 75 6c 74 2c 20  A.connect(mult, 
27440 30 2c 20 30 29 3b 0a 09 09 20 2a 20 73 69 67 42  0, 0);... * sigB
27450 2e 63 6f 6e 6e 65 63 74 28 6d 75 6c 74 2c 20 30  .connect(mult, 0
27460 2c 20 31 29 3b 0a 09 09 20 2a 20 2f 2f 6f 75 74  , 1);... * //out
27470 70 75 74 20 6f 66 20 6d 75 6c 74 20 69 73 20 31  put of mult is 1
27480 32 2e 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c  2.... *  @exampl
27490 65 0a 09 09 20 2a 20 76 61 72 20 6d 75 6c 74 20  e... * var mult 
274a0 3d 20 6e 65 77 20 54 6f 6e 65 2e 4d 75 6c 74 69  = new Tone.Multi
274b0 70 6c 79 28 31 30 29 3b 0a 09 09 20 2a 20 76 61  ply(10);... * va
274c0 72 20 73 69 67 20 3d 20 6e 65 77 20 54 6f 6e 65  r sig = new Tone
274d0 2e 53 69 67 6e 61 6c 28 32 29 2e 63 6f 6e 6e 65  .Signal(2).conne
274e0 63 74 28 6d 75 6c 74 29 3b 0a 09 09 20 2a 20 2f  ct(mult);... * /
274f0 2f 74 68 65 20 6f 75 74 70 75 74 20 6f 66 20 6d  /the output of m
27500 75 6c 74 20 69 73 20 32 30 2e 20 0a 09 09 20 2a  ult is 20. ... *
27510 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4d 75 6c 74  /..    Tone.Mult
27520 69 70 6c 79 20 3d 20 66 75 6e 63 74 69 6f 6e 20  iply = function 
27530 28 76 61 6c 75 65 29 20 7b 0a 09 20 20 20 20 20  (value) {..     
27540 20 20 20 74 68 69 73 2e 63 72 65 61 74 65 49 6e     this.createIn
27550 73 4f 75 74 73 28 32 2c 20 30 29 3b 0a 09 20 20  sOuts(2, 0);..  
27560 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
27570 20 74 68 65 20 69 6e 70 75 74 20 6e 6f 64 65 20   the input node 
27580 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74  is the same as t
27590 68 65 20 6f 75 74 70 75 74 20 6e 6f 64 65 0a 09  he output node..
275a0 09 09 20 2a 20 20 69 74 20 69 73 20 61 6c 73 6f  .. *  it is also
275b0 20 74 68 65 20 47 61 69 6e 4e 6f 64 65 20 77 68   the GainNode wh
275c0 69 63 68 20 68 61 6e 64 6c 65 73 20 74 68 65 20  ich handles the 
275d0 73 63 61 6c 69 6e 67 20 6f 66 20 69 6e 63 6f 6d  scaling of incom
275e0 69 6e 67 20 73 69 67 6e 61 6c 0a 09 09 09 20 2a  ing signal.... *
275f0 20 20 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20    .... *  @type 
27600 7b 47 61 69 6e 4e 6f 64 65 7d 0a 09 09 09 20 2a  {GainNode}.... *
27610 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a    @private.... *
27620 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
27630 5f 6d 75 6c 74 20 3d 20 74 68 69 73 2e 69 6e 70  _mult = this.inp
27640 75 74 5b 30 5d 20 3d 20 74 68 69 73 2e 6f 75 74  ut[0] = this.out
27650 70 75 74 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 47  put = new Tone.G
27660 61 69 6e 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ain();..        
27670 2f 2a 2a 0a 09 09 09 20 2a 20 20 74 68 65 20 73  /**.... *  the s
27680 63 61 6c 69 6e 67 20 70 61 72 61 6d 65 74 65 72  caling parameter
27690 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 41  .... *  @type {A
276a0 75 64 69 6f 50 61 72 61 6d 7d 0a 09 09 09 20 2a  udioParam}.... *
276b0 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a    @private.... *
276c0 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
276d0 5f 70 61 72 61 6d 20 3d 20 74 68 69 73 2e 69 6e  _param = this.in
276e0 70 75 74 5b 31 5d 20 3d 20 74 68 69 73 2e 6f 75  put[1] = this.ou
276f0 74 70 75 74 2e 67 61 69 6e 3b 0a 09 20 20 20 20  tput.gain;..    
27700 20 20 20 20 74 68 69 73 2e 5f 70 61 72 61 6d 2e      this._param.
27710 76 61 6c 75 65 20 3d 20 74 68 69 73 2e 64 65 66  value = this.def
27720 61 75 6c 74 41 72 67 28 76 61 6c 75 65 2c 20 30  aultArg(value, 0
27730 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  );..    };..    
27740 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65  Tone.extend(Tone
27750 2e 4d 75 6c 74 69 70 6c 79 2c 20 54 6f 6e 65 2e  .Multiply, Tone.
27760 53 69 67 6e 61 6c 29 3b 0a 09 20 20 20 20 2f 2a  Signal);..    /*
27770 2a 0a 09 09 20 2a 20 20 63 6c 65 61 6e 20 75 70  *... *  clean up
27780 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20  ... *  @returns 
27790 7b 54 6f 6e 65 2e 4d 75 6c 74 69 70 6c 79 7d 20  {Tone.Multiply} 
277a0 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20  this... */..    
277b0 54 6f 6e 65 2e 4d 75 6c 74 69 70 6c 79 2e 70 72  Tone.Multiply.pr
277c0 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20  ototype.dispose 
277d0 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  = function () {.
277e0 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 70 72  .        Tone.pr
277f0 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 2e  ototype.dispose.
27800 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20 20  call(this);..   
27810 20 20 20 20 20 74 68 69 73 2e 5f 6d 75 6c 74 2e       this._mult.
27820 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20  dispose();..    
27830 20 20 20 20 74 68 69 73 2e 5f 6d 75 6c 74 20 3d      this._mult =
27840 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
27850 74 68 69 73 2e 5f 70 61 72 61 6d 20 3d 20 6e 75  this._param = nu
27860 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74  ll;..        ret
27870 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
27880 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f  ;..    return To
27890 6e 65 2e 4d 75 6c 74 69 70 6c 79 3b 0a 09 7d 29  ne.Multiply;..})
278a0 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69  ;..Module(functi
278b0 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20  on (Tone) {..   
278c0 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20   ..    /**... * 
278d0 20 40 63 6c 61 73 73 20 4e 65 67 61 74 65 20 74   @class Negate t
278e0 68 65 20 69 6e 63 6f 6d 69 6e 67 20 73 69 67 6e  he incoming sign
278f0 61 6c 2e 20 69 2e 65 2e 20 61 6e 20 69 6e 70 75  al. i.e. an inpu
27900 74 20 73 69 67 6e 61 6c 20 6f 66 20 31 30 20 77  t signal of 10 w
27910 69 6c 6c 20 6f 75 74 70 75 74 20 2d 31 30 0a 09  ill output -10..
27920 09 20 2a 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74  . *... *  @const
27930 72 75 63 74 6f 72 0a 09 09 20 2a 20 20 40 65 78  ructor... *  @ex
27940 74 65 6e 64 73 20 7b 54 6f 6e 65 2e 53 69 67 6e  tends {Tone.Sign
27950 61 6c 42 61 73 65 7d 0a 09 09 20 2a 20 20 40 65  alBase}... *  @e
27960 78 61 6d 70 6c 65 0a 09 09 20 2a 20 76 61 72 20  xample... * var 
27970 6e 65 67 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4e  neg = new Tone.N
27980 65 67 61 74 65 28 29 3b 0a 09 09 20 2a 20 76 61  egate();... * va
27990 72 20 73 69 67 20 3d 20 6e 65 77 20 54 6f 6e 65  r sig = new Tone
279a0 2e 53 69 67 6e 61 6c 28 2d 32 29 2e 63 6f 6e 6e  .Signal(-2).conn
279b0 65 63 74 28 6e 65 67 29 3b 0a 09 09 20 2a 20 2f  ect(neg);... * /
279c0 2f 6f 75 74 70 75 74 20 6f 66 20 6e 65 67 20 69  /output of neg i
279d0 73 20 70 6f 73 69 74 69 76 65 20 32 2e 20 0a 09  s positive 2. ..
279e0 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4e  . */..    Tone.N
279f0 65 67 61 74 65 20 3d 20 66 75 6e 63 74 69 6f 6e  egate = function
27a00 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 2f   () {..        /
27a10 2a 2a 0a 09 09 09 20 2a 20 20 6e 65 67 61 74 69  **.... *  negati
27a20 6f 6e 20 69 73 20 64 6f 6e 65 20 62 79 20 6d 75  on is done by mu
27a30 6c 74 69 70 6c 79 69 6e 67 20 62 79 20 2d 31 0a  ltiplying by -1.
27a40 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54 6f  ... *  @type {To
27a50 6e 65 2e 4d 75 6c 74 69 70 6c 79 7d 0a 09 09 09  ne.Multiply}....
27a60 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
27a70 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
27a80 73 2e 5f 6d 75 6c 74 69 70 6c 79 20 3d 20 74 68  s._multiply = th
27a90 69 73 2e 69 6e 70 75 74 20 3d 20 74 68 69 73 2e  is.input = this.
27aa0 6f 75 74 70 75 74 20 3d 20 6e 65 77 20 54 6f 6e  output = new Ton
27ab0 65 2e 4d 75 6c 74 69 70 6c 79 28 2d 31 29 3b 0a  e.Multiply(-1);.
27ac0 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e  .    };..    Ton
27ad0 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 4e 65  e.extend(Tone.Ne
27ae0 67 61 74 65 2c 20 54 6f 6e 65 2e 53 69 67 6e 61  gate, Tone.Signa
27af0 6c 42 61 73 65 29 3b 0a 09 20 20 20 20 2f 2a 2a  lBase);..    /**
27b00 0a 09 09 20 2a 20 20 63 6c 65 61 6e 20 75 70 0a  ... *  clean up.
27b10 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b  .. *  @returns {
27b20 54 6f 6e 65 2e 4e 65 67 61 74 65 7d 20 74 68 69  Tone.Negate} thi
27b30 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  s... */..    Ton
27b40 65 2e 4e 65 67 61 74 65 2e 70 72 6f 74 6f 74 79  e.Negate.prototy
27b50 70 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75 6e  pe.dispose = fun
27b60 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
27b70 20 20 20 20 54 6f 6e 65 2e 70 72 6f 74 6f 74 79      Tone.prototy
27b80 70 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28  pe.dispose.call(
27b90 74 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20 20  this);..        
27ba0 74 68 69 73 2e 5f 6d 75 6c 74 69 70 6c 79 2e 64  this._multiply.d
27bb0 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20  ispose();..     
27bc0 20 20 20 74 68 69 73 2e 5f 6d 75 6c 74 69 70 6c     this._multipl
27bd0 79 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20  y = null;..     
27be0 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a     return this;.
27bf0 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74  .    };..    ret
27c00 75 72 6e 20 54 6f 6e 65 2e 4e 65 67 61 74 65 3b  urn Tone.Negate;
27c10 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75  ..});..Module(fu
27c20 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a  nction (Tone) {.
27c30 09 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09  .    ..    /**..
27c40 09 20 2a 20 20 40 63 6c 61 73 73 20 53 75 62 74  . *  @class Subt
27c50 72 61 63 74 20 74 68 65 20 73 69 67 6e 61 6c 20  ract the signal 
27c60 63 6f 6e 6e 65 63 74 65 64 20 74 6f 20 3c 63 6f  connected to <co
27c70 64 65 3e 69 6e 70 75 74 5b 31 5d 3c 2f 63 6f 64  de>input[1]</cod
27c80 65 3e 20 66 72 6f 6d 20 74 68 65 20 73 69 67 6e  e> from the sign
27c90 61 6c 20 63 6f 6e 6e 65 63 74 65 64 20 0a 09 09  al connected ...
27ca0 20 2a 20 20 20 20 20 20 20 20 20 74 6f 20 3c 63   *         to <c
27cb0 6f 64 65 3e 69 6e 70 75 74 5b 30 5d 3c 2f 63 6f  ode>input[0]</co
27cc0 64 65 3e 2e 20 49 66 20 61 6e 20 61 72 67 75 6d  de>. If an argum
27cd0 65 6e 74 20 69 73 20 70 72 6f 76 69 64 65 64 20  ent is provided 
27ce0 69 6e 20 74 68 65 20 63 6f 6e 73 74 72 75 63 74  in the construct
27cf0 6f 72 2c 20 74 68 65 20 0a 09 09 20 2a 20 20 20  or, the ... *   
27d00 20 20 20 20 20 20 73 69 67 6e 61 6c 73 20 3c 63        signals <c
27d10 6f 64 65 3e 2e 76 61 6c 75 65 3c 2f 63 6f 64 65  ode>.value</code
27d20 3e 20 77 69 6c 6c 20 62 65 20 73 75 62 74 72 61  > will be subtra
27d30 63 74 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e  cted from the in
27d40 63 6f 6d 69 6e 67 20 73 69 67 6e 61 6c 2e 0a 09  coming signal...
27d50 09 20 2a 0a 09 09 20 2a 20 20 40 65 78 74 65 6e  . *... *  @exten
27d60 64 73 20 7b 54 6f 6e 65 2e 53 69 67 6e 61 6c 7d  ds {Tone.Signal}
27d70 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 72 75 63  ... *  @construc
27d80 74 6f 72 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  tor... *  @param
27d90 20 7b 6e 75 6d 62 65 72 3d 7d 20 76 61 6c 75 65   {number=} value
27da0 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20 73 75   The value to su
27db0 62 74 72 61 63 74 20 66 72 6f 6d 20 74 68 65 20  btract from the 
27dc0 69 6e 63 6f 6d 69 6e 67 20 73 69 67 6e 61 6c 2e  incoming signal.
27dd0 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 09 09   If the value...
27de0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
27df0 20 20 20 20 20 20 20 20 20 20 20 69 73 20 6f 6d             is om
27e00 69 74 74 65 64 2c 20 69 74 20 77 69 6c 6c 20 73  itted, it will s
27e10 75 62 74 72 61 63 74 20 74 68 65 20 73 65 63 6f  ubtract the seco
27e20 6e 64 20 73 69 67 6e 61 6c 20 66 72 6f 6d 20 74  nd signal from t
27e30 68 65 20 66 69 72 73 74 2e 0a 09 09 20 2a 20 20  he first.... *  
27e40 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 76 61  @example... * va
27e50 72 20 73 75 62 20 3d 20 6e 65 77 20 54 6f 6e 65  r sub = new Tone
27e60 2e 53 75 62 74 72 61 63 74 28 31 29 3b 0a 09 09  .Subtract(1);...
27e70 20 2a 20 76 61 72 20 73 69 67 20 3d 20 6e 65 77   * var sig = new
27e80 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 28 34 29 2e   Tone.Signal(4).
27e90 63 6f 6e 6e 65 63 74 28 73 75 62 29 3b 0a 09 09  connect(sub);...
27ea0 20 2a 20 2f 2f 74 68 65 20 6f 75 74 70 75 74 20   * //the output 
27eb0 6f 66 20 73 75 62 20 69 73 20 33 2e 20 0a 09 09  of sub is 3. ...
27ec0 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20   *  @example... 
27ed0 2a 20 76 61 72 20 73 75 62 20 3d 20 6e 65 77 20  * var sub = new 
27ee0 54 6f 6e 65 2e 53 75 62 74 72 61 63 74 28 29 3b  Tone.Subtract();
27ef0 0a 09 09 20 2a 20 76 61 72 20 73 69 67 41 20 3d  ... * var sigA =
27f00 20 6e 65 77 20 54 6f 6e 65 2e 53 69 67 6e 61 6c   new Tone.Signal
27f10 28 31 30 29 3b 0a 09 09 20 2a 20 76 61 72 20 73  (10);... * var s
27f20 69 67 42 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53  igB = new Tone.S
27f30 69 67 6e 61 6c 28 32 2e 35 29 3b 0a 09 09 20 2a  ignal(2.5);... *
27f40 20 73 69 67 41 2e 63 6f 6e 6e 65 63 74 28 73 75   sigA.connect(su
27f50 62 2c 20 30 2c 20 30 29 3b 0a 09 09 20 2a 20 73  b, 0, 0);... * s
27f60 69 67 42 2e 63 6f 6e 6e 65 63 74 28 73 75 62 2c  igB.connect(sub,
27f70 20 30 2c 20 31 29 3b 0a 09 09 20 2a 20 2f 2f 6f   0, 1);... * //o
27f80 75 74 70 75 74 20 6f 66 20 73 75 62 20 69 73 20  utput of sub is 
27f90 37 2e 35 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  7.5... */..    T
27fa0 6f 6e 65 2e 53 75 62 74 72 61 63 74 20 3d 20 66  one.Subtract = f
27fb0 75 6e 63 74 69 6f 6e 20 28 76 61 6c 75 65 29 20  unction (value) 
27fc0 7b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  {..        this.
27fd0 63 72 65 61 74 65 49 6e 73 4f 75 74 73 28 32 2c  createInsOuts(2,
27fe0 20 30 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a   0);..        /*
27ff0 2a 0a 09 09 09 20 2a 20 20 74 68 65 20 73 75 6d  *.... *  the sum
28000 6d 69 6e 67 20 6e 6f 64 65 0a 09 09 09 20 2a 20  ming node.... * 
28010 20 40 74 79 70 65 20 7b 47 61 69 6e 4e 6f 64 65   @type {GainNode
28020 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  }.... *  @privat
28030 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
28040 20 20 74 68 69 73 2e 5f 73 75 6d 20 3d 20 74 68    this._sum = th
28050 69 73 2e 69 6e 70 75 74 5b 30 5d 20 3d 20 74 68  is.input[0] = th
28060 69 73 2e 6f 75 74 70 75 74 20 3d 20 6e 65 77 20  is.output = new 
28070 54 6f 6e 65 2e 47 61 69 6e 28 29 3b 0a 09 20 20  Tone.Gain();..  
28080 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
28090 20 6e 65 67 61 74 65 20 74 68 65 20 69 6e 70 75   negate the inpu
280a0 74 20 6f 66 20 74 68 65 20 73 65 63 6f 6e 64 20  t of the second 
280b0 69 6e 70 75 74 20 62 65 66 6f 72 65 20 63 6f 6e  input before con
280c0 6e 65 63 74 69 6e 67 20 69 74 0a 09 09 09 20 2a  necting it.... *
280d0 20 20 74 6f 20 74 68 65 20 73 75 6d 6d 69 6e 67    to the summing
280e0 20 6e 6f 64 65 2e 0a 09 09 09 20 2a 20 20 40 74   node..... *  @t
280f0 79 70 65 20 7b 54 6f 6e 65 2e 4e 65 67 61 74 65  ype {Tone.Negate
28100 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  }.... *  @privat
28110 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
28120 20 20 74 68 69 73 2e 5f 6e 65 67 20 3d 20 6e 65    this._neg = ne
28130 77 20 54 6f 6e 65 2e 4e 65 67 61 74 65 28 29 3b  w Tone.Negate();
28140 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
28150 09 20 2a 20 20 74 68 65 20 6e 6f 64 65 20 77 68  . *  the node wh
28160 65 72 65 20 74 68 65 20 76 61 6c 75 65 20 69 73  ere the value is
28170 20 73 65 74 0a 09 09 09 20 2a 20 20 40 70 72 69   set.... *  @pri
28180 76 61 74 65 0a 09 09 09 20 2a 20 20 40 74 79 70  vate.... *  @typ
28190 65 20 7b 54 6f 6e 65 2e 53 69 67 6e 61 6c 7d 0a  e {Tone.Signal}.
281a0 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
281b0 74 68 69 73 2e 5f 70 61 72 61 6d 20 3d 20 74 68  this._param = th
281c0 69 73 2e 69 6e 70 75 74 5b 31 5d 20 3d 20 6e 65  is.input[1] = ne
281d0 77 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 28 76 61  w Tone.Signal(va
281e0 6c 75 65 29 3b 0a 09 20 20 20 20 20 20 20 20 74  lue);..        t
281f0 68 69 73 2e 5f 70 61 72 61 6d 2e 63 68 61 69 6e  his._param.chain
28200 28 74 68 69 73 2e 5f 6e 65 67 2c 20 74 68 69 73  (this._neg, this
28210 2e 5f 73 75 6d 29 3b 0a 09 20 20 20 20 7d 3b 0a  ._sum);..    };.
28220 09 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64  .    Tone.extend
28230 28 54 6f 6e 65 2e 53 75 62 74 72 61 63 74 2c 20  (Tone.Subtract, 
28240 54 6f 6e 65 2e 53 69 67 6e 61 6c 29 3b 0a 09 20  Tone.Signal);.. 
28250 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 6c 65     /**... *  Cle
28260 61 6e 20 75 70 2e 0a 09 09 20 2a 20 20 40 72 65  an up.... *  @re
28270 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 53 69 67 6e  turns {Tone.Sign
28280 61 6c 42 61 73 65 7d 20 74 68 69 73 0a 09 09 20  alBase} this... 
28290 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 53 75 62  */..    Tone.Sub
282a0 74 72 61 63 74 2e 70 72 6f 74 6f 74 79 70 65 2e  tract.prototype.
282b0 64 69 73 70 6f 73 65 20 3d 20 66 75 6e 63 74 69  dispose = functi
282c0 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
282d0 20 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e   Tone.prototype.
282e0 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69  dispose.call(thi
282f0 73 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  s);..        thi
28300 73 2e 5f 6e 65 67 2e 64 69 73 70 6f 73 65 28 29  s._neg.dispose()
28310 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
28320 5f 6e 65 67 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20  _neg = null;..  
28330 20 20 20 20 20 20 74 68 69 73 2e 5f 73 75 6d 2e        this._sum.
28340 64 69 73 63 6f 6e 6e 65 63 74 28 29 3b 0a 09 20  disconnect();.. 
28350 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 75 6d         this._sum
28360 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
28370 20 20 74 68 69 73 2e 5f 70 61 72 61 6d 2e 64 69    this._param.di
28380 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
28390 20 20 74 68 69 73 2e 5f 70 61 72 61 6d 20 3d 20    this._param = 
283a0 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 72  null;..        r
283b0 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20  eturn this;..   
283c0 20 7d 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20   };..    return 
283d0 54 6f 6e 65 2e 53 75 62 74 72 61 63 74 3b 0a 09  Tone.Subtract;..
283e0 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63  });..Module(func
283f0 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20  tion (Tone) {.. 
28400 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20     ..    /**... 
28410 2a 20 20 40 63 6c 61 73 73 20 20 47 72 65 61 74  *  @class  Great
28420 65 72 54 68 61 6e 5a 65 72 6f 20 6f 75 74 70 75  erThanZero outpu
28430 74 73 20 31 20 77 68 65 6e 20 74 68 65 20 69 6e  ts 1 when the in
28440 70 75 74 20 69 73 20 73 74 72 69 63 74 6c 79 20  put is strictly 
28450 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
28460 6f 0a 09 09 20 2a 20 20 0a 09 09 20 2a 20 20 40  o... *  ... *  @
28470 63 6f 6e 73 74 72 75 63 74 6f 72 0a 09 09 20 2a  constructor... *
28480 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65    @extends {Tone
28490 2e 53 69 67 6e 61 6c 42 61 73 65 7d 0a 09 09 20  .SignalBase}... 
284a0 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a  *  @example... *
284b0 20 76 61 72 20 67 74 30 20 3d 20 6e 65 77 20 54   var gt0 = new T
284c0 6f 6e 65 2e 47 72 65 61 74 65 72 54 68 61 6e 5a  one.GreaterThanZ
284d0 65 72 6f 28 29 3b 0a 09 09 20 2a 20 76 61 72 20  ero();... * var 
284e0 73 69 67 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53  sig = new Tone.S
284f0 69 67 6e 61 6c 28 30 2e 30 31 29 2e 63 6f 6e 6e  ignal(0.01).conn
28500 65 63 74 28 67 74 30 29 3b 0a 09 09 20 2a 20 2f  ect(gt0);... * /
28510 2f 74 68 65 20 6f 75 74 70 75 74 20 6f 66 20 67  /the output of g
28520 74 30 20 69 73 20 31 2e 20 0a 09 09 20 2a 20 73  t0 is 1. ... * s
28530 69 67 2e 76 61 6c 75 65 20 3d 20 30 3b 0a 09 09  ig.value = 0;...
28540 20 2a 20 2f 2f 74 68 65 20 6f 75 74 70 75 74 20   * //the output 
28550 6f 66 20 67 74 30 20 69 73 20 30 2e 20 0a 09 09  of gt0 is 0. ...
28560 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 47 72   */..    Tone.Gr
28570 65 61 74 65 72 54 68 61 6e 5a 65 72 6f 20 3d 20  eaterThanZero = 
28580 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
28590 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
285a0 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 57 61    @type {Tone.Wa
285b0 76 65 53 68 61 70 65 72 7d 0a 09 09 09 20 2a 20  veShaper}.... * 
285c0 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f   @private.... */
285d0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
285e0 74 68 72 65 73 68 20 3d 20 74 68 69 73 2e 6f 75  thresh = this.ou
285f0 74 70 75 74 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  tput = new Tone.
28600 57 61 76 65 53 68 61 70 65 72 28 66 75 6e 63 74  WaveShaper(funct
28610 69 6f 6e 20 28 76 61 6c 29 20 7b 0a 09 20 20 20  ion (val) {..   
28620 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
28630 20 3c 3d 20 30 29 20 7b 0a 09 20 20 20 20 20 20   <= 0) {..      
28640 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
28650 20 30 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20   0;..           
28660 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20   } else {..     
28670 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
28680 6e 20 31 3b 0a 09 20 20 20 20 20 20 20 20 20 20  n 1;..          
28690 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 2c 20    }..        }, 
286a0 31 32 37 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  127);..        /
286b0 2a 2a 0a 09 09 09 20 2a 20 20 73 63 61 6c 65 20  **.... *  scale 
286c0 74 68 65 20 66 69 72 73 74 20 74 68 72 65 73 68  the first thresh
286d0 6f 6c 64 65 64 20 73 69 67 6e 61 6c 20 62 79 20  olded signal by 
286e0 61 20 6c 61 72 67 65 20 76 61 6c 75 65 2e 0a 09  a large value...
286f0 09 09 20 2a 20 20 74 68 69 73 20 77 69 6c 6c 20  .. *  this will 
28700 68 65 6c 70 20 77 69 74 68 20 76 61 6c 75 65 73  help with values
28710 20 77 68 69 63 68 20 61 72 65 20 76 65 72 79 20   which are very 
28720 63 6c 6f 73 65 20 74 6f 20 30 0a 09 09 09 20 2a  close to 0.... *
28730 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 4d 75    @type {Tone.Mu
28740 6c 74 69 70 6c 79 7d 0a 09 09 09 20 2a 20 20 40  ltiply}.... *  @
28750 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
28760 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 63          this._sc
28770 61 6c 65 20 3d 20 74 68 69 73 2e 69 6e 70 75 74  ale = this.input
28780 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4d 75 6c 74   = new Tone.Mult
28790 69 70 6c 79 28 31 30 30 30 30 29 3b 0a 09 20 20  iply(10000);..  
287a0 20 20 20 20 20 20 2f 2f 63 6f 6e 6e 65 63 74 69        //connecti
287b0 6f 6e 73 0a 09 20 20 20 20 20 20 20 20 74 68 69  ons..        thi
287c0 73 2e 5f 73 63 61 6c 65 2e 63 6f 6e 6e 65 63 74  s._scale.connect
287d0 28 74 68 69 73 2e 5f 74 68 72 65 73 68 29 3b 0a  (this._thresh);.
287e0 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e  .    };..    Ton
287f0 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 47 72  e.extend(Tone.Gr
28800 65 61 74 65 72 54 68 61 6e 5a 65 72 6f 2c 20 54  eaterThanZero, T
28810 6f 6e 65 2e 53 69 67 6e 61 6c 42 61 73 65 29 3b  one.SignalBase);
28820 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
28830 64 69 73 70 6f 73 65 20 6d 65 74 68 6f 64 0a 09  dispose method..
28840 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54  . *  @returns {T
28850 6f 6e 65 2e 47 72 65 61 74 65 72 54 68 61 6e 5a  one.GreaterThanZ
28860 65 72 6f 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a  ero} this... */.
28870 09 20 20 20 20 54 6f 6e 65 2e 47 72 65 61 74 65  .    Tone.Greate
28880 72 54 68 61 6e 5a 65 72 6f 2e 70 72 6f 74 6f 74  rThanZero.protot
28890 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75  ype.dispose = fu
288a0 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
288b0 20 20 20 20 20 54 6f 6e 65 2e 70 72 6f 74 6f 74       Tone.protot
288c0 79 70 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c  ype.dispose.call
288d0 28 74 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20  (this);..       
288e0 20 74 68 69 73 2e 5f 73 63 61 6c 65 2e 64 69 73   this._scale.dis
288f0 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20  pose();..       
28900 20 74 68 69 73 2e 5f 73 63 61 6c 65 20 3d 20 6e   this._scale = n
28910 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ull;..        th
28920 69 73 2e 5f 74 68 72 65 73 68 2e 64 69 73 70 6f  is._thresh.dispo
28930 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74  se();..        t
28940 68 69 73 2e 5f 74 68 72 65 73 68 20 3d 20 6e 75  his._thresh = nu
28950 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74  ll;..        ret
28960 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
28970 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f  ;..    return To
28980 6e 65 2e 47 72 65 61 74 65 72 54 68 61 6e 5a 65  ne.GreaterThanZe
28990 72 6f 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65  ro;..});..Module
289a0 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29  (function (Tone)
289b0 20 7b 0a 09 20 20 20 20 0a 09 20 20 20 20 2f 2a   {..    ..    /*
289c0 2a 0a 09 09 20 2a 20 20 40 63 6c 61 73 73 20 20  *... *  @class  
289d0 4f 75 74 70 75 74 20 31 20 69 66 20 74 68 65 20  Output 1 if the 
289e0 73 69 67 6e 61 6c 20 69 73 20 67 72 65 61 74 65  signal is greate
289f0 72 20 74 68 61 6e 20 74 68 65 20 76 61 6c 75 65  r than the value
28a00 2c 20 6f 74 68 65 72 77 69 73 65 20 6f 75 74 70  , otherwise outp
28a10 75 74 73 20 30 2e 0a 09 09 20 2a 20 20 20 20 20  uts 0.... *     
28a20 20 20 20 20 20 63 61 6e 20 63 6f 6d 70 61 72 65       can compare
28a30 20 74 77 6f 20 73 69 67 6e 61 6c 73 20 6f 72 20   two signals or 
28a40 61 20 73 69 67 6e 61 6c 20 61 6e 64 20 61 20 6e  a signal and a n
28a50 75 6d 62 65 72 2e 20 0a 09 09 20 2a 20 20 0a 09  umber. ... *  ..
28a60 09 20 2a 20 20 40 63 6f 6e 73 74 72 75 63 74 6f  . *  @constructo
28a70 72 0a 09 09 20 2a 20 20 40 65 78 74 65 6e 64 73  r... *  @extends
28a80 20 7b 54 6f 6e 65 2e 53 69 67 6e 61 6c 7d 0a 09   {Tone.Signal}..
28a90 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 6e 75 6d  . *  @param {num
28aa0 62 65 72 7d 20 5b 76 61 6c 75 65 3d 30 5d 20 74  ber} [value=0] t
28ab0 68 65 20 76 61 6c 75 65 20 74 6f 20 63 6f 6d 70  he value to comp
28ac0 61 72 65 20 74 6f 20 74 68 65 20 69 6e 63 6f 6d  are to the incom
28ad0 69 6e 67 20 73 69 67 6e 61 6c 0a 09 09 20 2a 20  ing signal... * 
28ae0 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 76   @example... * v
28af0 61 72 20 67 74 20 3d 20 6e 65 77 20 54 6f 6e 65  ar gt = new Tone
28b00 2e 47 72 65 61 74 65 72 54 68 61 6e 28 32 29 3b  .GreaterThan(2);
28b10 0a 09 09 20 2a 20 76 61 72 20 73 69 67 20 3d 20  ... * var sig = 
28b20 6e 65 77 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 28  new Tone.Signal(
28b30 34 29 2e 63 6f 6e 6e 65 63 74 28 67 74 29 3b 0a  4).connect(gt);.
28b40 09 09 20 2a 20 2f 2f 6f 75 74 70 75 74 20 6f 66  .. * //output of
28b50 20 67 74 20 69 73 20 65 71 75 61 6c 20 31 2e 20   gt is equal 1. 
28b60 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
28b70 2e 47 72 65 61 74 65 72 54 68 61 6e 20 3d 20 66  .GreaterThan = f
28b80 75 6e 63 74 69 6f 6e 20 28 76 61 6c 75 65 29 20  unction (value) 
28b90 7b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  {..        this.
28ba0 63 72 65 61 74 65 49 6e 73 4f 75 74 73 28 32 2c  createInsOuts(2,
28bb0 20 30 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a   0);..        /*
28bc0 2a 0a 09 09 09 20 2a 20 20 73 75 62 74 72 61 63  *.... *  subtrac
28bd0 74 20 74 68 65 20 61 6d 6f 75 6e 74 20 66 72 6f  t the amount fro
28be0 6d 20 74 68 65 20 69 6e 63 6f 6d 69 6e 67 20 73  m the incoming s
28bf0 69 67 6e 61 6c 0a 09 09 09 20 2a 20 20 40 74 79  ignal.... *  @ty
28c00 70 65 20 7b 54 6f 6e 65 2e 53 75 62 74 72 61 63  pe {Tone.Subtrac
28c10 74 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61  t}.... *  @priva
28c20 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  te.... */..     
28c30 20 20 20 74 68 69 73 2e 5f 70 61 72 61 6d 20 3d     this._param =
28c40 20 74 68 69 73 2e 69 6e 70 75 74 5b 30 5d 20 3d   this.input[0] =
28c50 20 6e 65 77 20 54 6f 6e 65 2e 53 75 62 74 72 61   new Tone.Subtra
28c60 63 74 28 76 61 6c 75 65 29 3b 0a 09 20 20 20 20  ct(value);..    
28c70 20 20 20 20 74 68 69 73 2e 69 6e 70 75 74 5b 31      this.input[1
28c80 5d 20 3d 20 74 68 69 73 2e 5f 70 61 72 61 6d 2e  ] = this._param.
28c90 69 6e 70 75 74 5b 31 5d 3b 0a 09 20 20 20 20 20  input[1];..     
28ca0 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 63 6f     /**.... *  co
28cb0 6d 70 61 72 65 20 74 68 61 74 20 61 6d 6f 75 6e  mpare that amoun
28cc0 74 20 74 6f 20 7a 65 72 6f 0a 09 09 09 20 2a 20  t to zero.... * 
28cd0 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 47 72 65   @type {Tone.Gre
28ce0 61 74 65 72 54 68 61 6e 5a 65 72 6f 7d 0a 09 09  aterThanZero}...
28cf0 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
28d00 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
28d10 69 73 2e 5f 67 74 7a 20 3d 20 74 68 69 73 2e 6f  is._gtz = this.o
28d20 75 74 70 75 74 20 3d 20 6e 65 77 20 54 6f 6e 65  utput = new Tone
28d30 2e 47 72 65 61 74 65 72 54 68 61 6e 5a 65 72 6f  .GreaterThanZero
28d40 28 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 63  ();..        //c
28d50 6f 6e 6e 65 63 74 0a 09 20 20 20 20 20 20 20 20  onnect..        
28d60 74 68 69 73 2e 5f 70 61 72 61 6d 2e 63 6f 6e 6e  this._param.conn
28d70 65 63 74 28 74 68 69 73 2e 5f 67 74 7a 29 3b 0a  ect(this._gtz);.
28d80 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e  .    };..    Ton
28d90 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 47 72  e.extend(Tone.Gr
28da0 65 61 74 65 72 54 68 61 6e 2c 20 54 6f 6e 65 2e  eaterThan, Tone.
28db0 53 69 67 6e 61 6c 29 3b 0a 09 20 20 20 20 2f 2a  Signal);..    /*
28dc0 2a 0a 09 09 20 2a 20 20 64 69 73 70 6f 73 65 20  *... *  dispose 
28dd0 6d 65 74 68 6f 64 0a 09 09 20 2a 20 20 40 72 65  method... *  @re
28de0 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 47 72 65 61  turns {Tone.Grea
28df0 74 65 72 54 68 61 6e 7d 20 74 68 69 73 0a 09 09  terThan} this...
28e00 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 47 72   */..    Tone.Gr
28e10 65 61 74 65 72 54 68 61 6e 2e 70 72 6f 74 6f 74  eaterThan.protot
28e20 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75  ype.dispose = fu
28e30 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
28e40 20 20 20 20 20 54 6f 6e 65 2e 70 72 6f 74 6f 74       Tone.protot
28e50 79 70 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c  ype.dispose.call
28e60 28 74 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20  (this);..       
28e70 20 74 68 69 73 2e 5f 70 61 72 61 6d 2e 64 69 73   this._param.dis
28e80 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20  pose();..       
28e90 20 74 68 69 73 2e 5f 70 61 72 61 6d 20 3d 20 6e   this._param = n
28ea0 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ull;..        th
28eb0 69 73 2e 5f 67 74 7a 2e 64 69 73 70 6f 73 65 28  is._gtz.dispose(
28ec0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
28ed0 2e 5f 67 74 7a 20 3d 20 6e 75 6c 6c 3b 0a 09 20  ._gtz = null;.. 
28ee0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
28ef0 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  is;..    };..   
28f00 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 47 72 65   return Tone.Gre
28f10 61 74 65 72 54 68 61 6e 3b 0a 09 7d 29 3b 0a 09  aterThan;..});..
28f20 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20  Module(function 
28f30 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09  (Tone) {..    ..
28f40 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63      /**... *  @c
28f50 6c 61 73 73 20 52 65 74 75 72 6e 20 74 68 65 20  lass Return the 
28f60 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f  absolute value o
28f70 66 20 61 6e 20 69 6e 63 6f 6d 69 6e 67 20 73 69  f an incoming si
28f80 67 6e 61 6c 2e 20 0a 09 09 20 2a 20 20 0a 09 09  gnal. ... *  ...
28f90 20 2a 20 20 40 63 6f 6e 73 74 72 75 63 74 6f 72   *  @constructor
28fa0 0a 09 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20  ... *  @extends 
28fb0 7b 54 6f 6e 65 2e 53 69 67 6e 61 6c 42 61 73 65  {Tone.SignalBase
28fc0 7d 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65  }... *  @example
28fd0 0a 09 09 20 2a 20 76 61 72 20 73 69 67 6e 61 6c  ... * var signal
28fe0 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53 69 67 6e   = new Tone.Sign
28ff0 61 6c 28 2d 31 29 3b 0a 09 09 20 2a 20 76 61 72  al(-1);... * var
29000 20 61 62 73 20 3d 20 6e 65 77 20 54 6f 6e 65 2e   abs = new Tone.
29010 41 62 73 28 29 3b 0a 09 09 20 2a 20 73 69 67 6e  Abs();... * sign
29020 61 6c 2e 63 6f 6e 6e 65 63 74 28 61 62 73 29 3b  al.connect(abs);
29030 0a 09 09 20 2a 20 2f 2f 74 68 65 20 6f 75 74 70  ... * //the outp
29040 75 74 20 6f 66 20 61 62 73 20 69 73 20 31 2e 20  ut of abs is 1. 
29050 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
29060 2e 41 62 73 20 3d 20 66 75 6e 63 74 69 6f 6e 20  .Abs = function 
29070 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 2f 2a  () {..        /*
29080 2a 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b  *.... *  @type {
29090 54 6f 6e 65 2e 4c 65 73 73 54 68 61 6e 7d 0a 09  Tone.LessThan}..
290a0 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
290b0 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
290c0 68 69 73 2e 5f 61 62 73 20 3d 20 74 68 69 73 2e  his._abs = this.
290d0 69 6e 70 75 74 20 3d 20 74 68 69 73 2e 6f 75 74  input = this.out
290e0 70 75 74 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 57  put = new Tone.W
290f0 61 76 65 53 68 61 70 65 72 28 66 75 6e 63 74 69  aveShaper(functi
29100 6f 6e 20 28 76 61 6c 29 20 7b 0a 09 20 20 20 20  on (val) {..    
29110 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 20          if (val 
29120 3d 3d 3d 20 30 29 20 7b 0a 09 20 20 20 20 20 20  === 0) {..      
29130 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
29140 20 30 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20   0;..           
29150 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20   } else {..     
29160 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
29170 6e 20 4d 61 74 68 2e 61 62 73 28 76 61 6c 29 3b  n Math.abs(val);
29180 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ..            }.
29190 09 20 20 20 20 20 20 20 20 7d 2c 20 31 32 37 29  .        }, 127)
291a0 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54  ;..    };..    T
291b0 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e  one.extend(Tone.
291c0 41 62 73 2c 20 54 6f 6e 65 2e 53 69 67 6e 61 6c  Abs, Tone.Signal
291d0 42 61 73 65 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a  Base);..    /**.
291e0 09 09 20 2a 20 20 64 69 73 70 6f 73 65 20 6d 65  .. *  dispose me
291f0 74 68 6f 64 0a 09 09 20 2a 20 20 40 72 65 74 75  thod... *  @retu
29200 72 6e 73 20 7b 54 6f 6e 65 2e 41 62 73 7d 20 74  rns {Tone.Abs} t
29210 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  his... */..    T
29220 6f 6e 65 2e 41 62 73 2e 70 72 6f 74 6f 74 79 70  one.Abs.prototyp
29230 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75 6e 63  e.dispose = func
29240 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
29250 20 20 20 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70     Tone.prototyp
29260 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74  e.dispose.call(t
29270 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20 20 74  his);..        t
29280 68 69 73 2e 5f 61 62 73 2e 64 69 73 70 6f 73 65  his._abs.dispose
29290 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ();..        thi
292a0 73 2e 5f 61 62 73 20 3d 20 6e 75 6c 6c 3b 0a 09  s._abs = null;..
292b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
292c0 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  his;..    };..  
292d0 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 41 62    return Tone.Ab
292e0 73 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28  s;..});..Module(
292f0 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20  function (Tone) 
29300 7b 0a 09 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a  {..    ..    /**
29310 0a 09 09 20 2a 20 20 40 63 6c 61 73 73 20 53 69  ... *  @class Si
29320 67 6e 61 6c 2d 72 61 74 65 20 6d 6f 64 75 6c 6f  gnal-rate modulo
29330 20 6f 70 65 72 61 74 6f 72 2e 20 4f 6e 6c 79 20   operator. Only 
29340 77 6f 72 6b 73 20 69 6e 20 41 75 64 69 6f 52 61  works in AudioRa
29350 6e 67 65 20 5b 2d 31 2c 20 31 5d 20 61 6e 64 20  nge [-1, 1] and 
29360 66 6f 72 20 6d 6f 64 75 6c 75 73 0a 09 09 20 2a  for modulus... *
29370 20 20 20 20 20 20 20 20 20 76 61 6c 75 65 73 20           values 
29380 69 6e 20 74 68 65 20 4e 6f 72 6d 61 6c 52 61 6e  in the NormalRan
29390 67 65 2e 20 0a 09 09 20 2a 0a 09 09 20 2a 20 20  ge. ... *... *  
293a0 40 63 6f 6e 73 74 72 75 63 74 6f 72 0a 09 09 20  @constructor... 
293b0 2a 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e  *  @extends {Ton
293c0 65 2e 53 69 67 6e 61 6c 42 61 73 65 7d 0a 09 09  e.SignalBase}...
293d0 20 2a 20 20 40 70 61 72 61 6d 20 7b 4e 6f 72 6d   *  @param {Norm
293e0 61 6c 52 61 6e 67 65 7d 20 6d 6f 64 75 6c 75 73  alRange} modulus
293f0 20 54 68 65 20 6d 6f 64 75 6c 75 73 20 74 6f 20   The modulus to 
29400 61 70 70 6c 79 2e 0a 09 09 20 2a 20 20 40 65 78  apply.... *  @ex
29410 61 6d 70 6c 65 0a 09 09 20 2a 20 76 61 72 20 6d  ample... * var m
29420 6f 64 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4d 6f  od = new Tone.Mo
29430 64 75 6c 6f 28 30 2e 32 29 0a 09 09 20 2a 20 76  dulo(0.2)... * v
29440 61 72 20 73 69 67 20 3d 20 6e 65 77 20 54 6f 6e  ar sig = new Ton
29450 65 2e 53 69 67 6e 61 6c 28 30 2e 35 29 2e 63 6f  e.Signal(0.5).co
29460 6e 6e 65 63 74 28 6d 6f 64 29 3b 0a 09 09 20 2a  nnect(mod);... *
29470 20 2f 2f 6d 6f 64 20 6f 75 74 70 75 74 73 20 30   //mod outputs 0
29480 2e 31 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  .1... */..    To
29490 6e 65 2e 4d 6f 64 75 6c 6f 20 3d 20 66 75 6e 63  ne.Modulo = func
294a0 74 69 6f 6e 20 28 6d 6f 64 75 6c 75 73 29 20 7b  tion (modulus) {
294b0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 63  ..        this.c
294c0 72 65 61 74 65 49 6e 73 4f 75 74 73 28 31 2c 20  reateInsOuts(1, 
294d0 30 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  0);..        /**
294e0 0a 09 09 09 20 2a 20 20 41 20 77 61 76 65 73 68  .... *  A wavesh
294f0 61 70 65 72 20 67 65 74 73 20 74 68 65 20 69 6e  aper gets the in
29500 74 65 67 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f  teger multiple o
29510 66 20 0a 09 09 09 20 2a 20 20 74 68 65 20 69 6e  f .... *  the in
29520 70 75 74 20 73 69 67 6e 61 6c 20 61 6e 64 20 74  put signal and t
29530 68 65 20 6d 6f 64 75 6c 75 73 2e 0a 09 09 09 20  he modulus..... 
29540 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20  *  @private.... 
29550 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 57  *  @type {Tone.W
29560 61 76 65 53 68 61 70 65 72 7d 0a 09 09 09 20 2a  aveShaper}.... *
29570 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
29580 5f 73 68 61 70 65 72 20 3d 20 6e 65 77 20 54 6f  _shaper = new To
29590 6e 65 2e 57 61 76 65 53 68 61 70 65 72 28 4d 61  ne.WaveShaper(Ma
295a0 74 68 2e 70 6f 77 28 32 2c 20 31 36 29 29 3b 0a  th.pow(2, 16));.
295b0 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
295c0 20 2a 20 20 74 68 65 20 69 6e 74 65 67 65 72 20   *  the integer 
295d0 6d 75 6c 74 69 70 6c 65 20 69 73 20 6d 75 6c 74  multiple is mult
295e0 69 70 6c 69 65 64 20 62 79 20 74 68 65 20 6d 6f  iplied by the mo
295f0 64 75 6c 75 73 0a 09 09 09 20 2a 20 20 40 74 79  dulus.... *  @ty
29600 70 65 20 20 7b 54 6f 6e 65 2e 4d 75 6c 74 69 70  pe  {Tone.Multip
29610 6c 79 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76  ly}.... *  @priv
29620 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  ate.... */..    
29630 20 20 20 20 74 68 69 73 2e 5f 6d 75 6c 74 69 70      this._multip
29640 6c 79 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4d 75  ly = new Tone.Mu
29650 6c 74 69 70 6c 79 28 29 3b 0a 09 20 20 20 20 20  ltiply();..     
29660 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 61 6e     /**.... *  an
29670 64 20 73 75 62 74 72 61 63 74 65 64 20 66 72 6f  d subtracted fro
29680 6d 20 74 68 65 20 69 6e 70 75 74 20 73 69 67 6e  m the input sign
29690 61 6c 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  al.... *  @type 
296a0 20 7b 54 6f 6e 65 2e 53 75 62 74 72 61 63 74 7d   {Tone.Subtract}
296b0 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  .... *  @private
296c0 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
296d0 20 74 68 69 73 2e 5f 73 75 62 74 72 61 63 74 20   this._subtract 
296e0 3d 20 74 68 69 73 2e 6f 75 74 70 75 74 20 3d 20  = this.output = 
296f0 6e 65 77 20 54 6f 6e 65 2e 53 75 62 74 72 61 63  new Tone.Subtrac
29700 74 28 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a  t();..        /*
29710 2a 0a 09 09 09 20 2a 20 20 74 68 65 20 6d 6f 64  *.... *  the mod
29720 75 6c 75 73 20 73 69 67 6e 61 6c 0a 09 09 09 20  ulus signal.... 
29730 2a 20 20 40 74 79 70 65 20 20 7b 54 6f 6e 65 2e  *  @type  {Tone.
29740 53 69 67 6e 61 6c 7d 0a 09 09 09 20 2a 20 20 40  Signal}.... *  @
29750 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
29760 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 6f          this._mo
29770 64 53 69 67 6e 61 6c 20 3d 20 6e 65 77 20 54 6f  dSignal = new To
29780 6e 65 2e 53 69 67 6e 61 6c 28 6d 6f 64 75 6c 75  ne.Signal(modulu
29790 73 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 63  s);..        //c
297a0 6f 6e 6e 65 63 74 69 6f 6e 73 0a 09 20 20 20 20  onnections..    
297b0 20 20 20 20 74 68 69 73 2e 69 6e 70 75 74 2e 66      this.input.f
297c0 61 6e 28 74 68 69 73 2e 5f 73 68 61 70 65 72 2c  an(this._shaper,
297d0 20 74 68 69 73 2e 5f 73 75 62 74 72 61 63 74 29   this._subtract)
297e0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
297f0 5f 6d 6f 64 53 69 67 6e 61 6c 2e 63 6f 6e 6e 65  _modSignal.conne
29800 63 74 28 74 68 69 73 2e 5f 6d 75 6c 74 69 70 6c  ct(this._multipl
29810 79 2c 20 30 2c 20 30 29 3b 0a 09 20 20 20 20 20  y, 0, 0);..     
29820 20 20 20 74 68 69 73 2e 5f 73 68 61 70 65 72 2e     this._shaper.
29830 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e 5f 6d 75  connect(this._mu
29840 6c 74 69 70 6c 79 2c 20 30 2c 20 31 29 3b 0a 09  ltiply, 0, 1);..
29850 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 75          this._mu
29860 6c 74 69 70 6c 79 2e 63 6f 6e 6e 65 63 74 28 74  ltiply.connect(t
29870 68 69 73 2e 5f 73 75 62 74 72 61 63 74 2c 20 30  his._subtract, 0
29880 2c 20 31 29 3b 0a 09 20 20 20 20 20 20 20 20 74  , 1);..        t
29890 68 69 73 2e 5f 73 65 74 57 61 76 65 53 68 61 70  his._setWaveShap
298a0 65 72 28 6d 6f 64 75 6c 75 73 29 3b 0a 09 20 20  er(modulus);..  
298b0 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65 2e 65    };..    Tone.e
298c0 78 74 65 6e 64 28 54 6f 6e 65 2e 4d 6f 64 75 6c  xtend(Tone.Modul
298d0 6f 2c 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 42 61  o, Tone.SignalBa
298e0 73 65 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09  se);..    /**...
298f0 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 6e 75 6d   *  @param  {num
29900 62 65 72 7d 20 20 6d 6f 64 20 20 74 68 65 20 6d  ber}  mod  the m
29910 6f 64 75 6c 75 73 20 74 6f 20 61 70 70 6c 79 0a  odulus to apply.
29920 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
29930 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4d  . */..    Tone.M
29940 6f 64 75 6c 6f 2e 70 72 6f 74 6f 74 79 70 65 2e  odulo.prototype.
29950 5f 73 65 74 57 61 76 65 53 68 61 70 65 72 20 3d  _setWaveShaper =
29960 20 66 75 6e 63 74 69 6f 6e 20 28 6d 6f 64 29 20   function (mod) 
29970 7b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  {..        this.
29980 5f 73 68 61 70 65 72 2e 73 65 74 4d 61 70 28 66  _shaper.setMap(f
29990 75 6e 63 74 69 6f 6e 20 28 76 61 6c 29 20 7b 0a  unction (val) {.
299a0 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72  .            var
299b0 20 6d 75 6c 74 69 70 6c 65 20 3d 20 4d 61 74 68   multiple = Math
299c0 2e 66 6c 6f 6f 72 28 28 76 61 6c 20 2b 20 30 2e  .floor((val + 0.
299d0 30 30 30 31 29 20 2f 20 6d 6f 64 29 3b 0a 09 20  0001) / mod);.. 
299e0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
299f0 6e 20 6d 75 6c 74 69 70 6c 65 3b 0a 09 20 20 20  n multiple;..   
29a00 20 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 7d 3b       });..    };
29a10 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54  ..    /**... * T
29a20 68 65 20 6d 6f 64 75 6c 75 73 20 76 61 6c 75 65  he modulus value
29a30 2e 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66  .... * @memberOf
29a40 20 54 6f 6e 65 2e 4d 6f 64 75 6c 6f 23 0a 09 09   Tone.Modulo#...
29a50 20 2a 20 40 74 79 70 65 20 7b 4e 6f 72 6d 61 6c   * @type {Normal
29a60 52 61 6e 67 65 7d 0a 09 09 20 2a 20 40 6e 61 6d  Range}... * @nam
29a70 65 20 76 61 6c 75 65 0a 09 09 20 2a 2f 0a 09 20  e value... */.. 
29a80 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65     Object.define
29a90 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 4d 6f  Property(Tone.Mo
29aa0 64 75 6c 6f 2e 70 72 6f 74 6f 74 79 70 65 2c 20  dulo.prototype, 
29ab0 27 76 61 6c 75 65 27 2c 20 7b 0a 09 20 20 20 20  'value', {..    
29ac0 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f      get: functio
29ad0 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
29ae0 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
29af0 5f 6d 6f 64 53 69 67 6e 61 6c 2e 76 61 6c 75 65  _modSignal.value
29b00 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20  ;..        },.. 
29b10 20 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63         set: func
29b20 74 69 6f 6e 20 28 6d 6f 64 29 20 7b 0a 09 20 20  tion (mod) {..  
29b30 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
29b40 6d 6f 64 53 69 67 6e 61 6c 2e 76 61 6c 75 65 20  modSignal.value 
29b50 3d 20 6d 6f 64 3b 0a 09 20 20 20 20 20 20 20 20  = mod;..        
29b60 20 20 20 20 74 68 69 73 2e 5f 73 65 74 57 61 76      this._setWav
29b70 65 53 68 61 70 65 72 28 6d 6f 64 29 3b 0a 09 20  eShaper(mod);.. 
29b80 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29         }..    })
29b90 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
29ba0 63 6c 65 61 6e 20 75 70 0a 09 09 20 2a 20 20 40  clean up... *  @
29bb0 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 4d 6f  returns {Tone.Mo
29bc0 64 75 6c 6f 7d 20 74 68 69 73 0a 09 09 20 2a 2f  dulo} this... */
29bd0 0a 09 20 20 20 20 54 6f 6e 65 2e 4d 6f 64 75 6c  ..    Tone.Modul
29be0 6f 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70  o.prototype.disp
29bf0 6f 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  ose = function (
29c00 29 20 7b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e  ) {..        Ton
29c10 65 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70  e.prototype.disp
29c20 6f 73 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a  ose.call(this);.
29c30 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73  .        this._s
29c40 68 61 70 65 72 2e 64 69 73 70 6f 73 65 28 29 3b  haper.dispose();
29c50 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
29c60 73 68 61 70 65 72 20 3d 20 6e 75 6c 6c 3b 0a 09  shaper = null;..
29c70 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 75          this._mu
29c80 6c 74 69 70 6c 79 2e 64 69 73 70 6f 73 65 28 29  ltiply.dispose()
29c90 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
29ca0 5f 6d 75 6c 74 69 70 6c 79 20 3d 20 6e 75 6c 6c  _multiply = null
29cb0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
29cc0 5f 73 75 62 74 72 61 63 74 2e 64 69 73 70 6f 73  _subtract.dispos
29cd0 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  e();..        th
29ce0 69 73 2e 5f 73 75 62 74 72 61 63 74 20 3d 20 6e  is._subtract = n
29cf0 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ull;..        th
29d00 69 73 2e 5f 6d 6f 64 53 69 67 6e 61 6c 2e 64 69  is._modSignal.di
29d10 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
29d20 20 20 74 68 69 73 2e 5f 6d 6f 64 53 69 67 6e 61    this._modSigna
29d30 6c 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20  l = null;..     
29d40 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a     return this;.
29d50 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74  .    };..    ret
29d60 75 72 6e 20 54 6f 6e 65 2e 4d 6f 64 75 6c 6f 3b  urn Tone.Modulo;
29d70 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75  ..});..Module(fu
29d80 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a  nction (Tone) {.
29d90 09 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09  .    ..    /**..
29da0 09 20 2a 20 20 40 63 6c 61 73 73 20 41 75 64 69  . *  @class Audi
29db0 6f 54 6f 47 61 69 6e 20 63 6f 6e 76 65 72 74 73  oToGain converts
29dc0 20 61 6e 20 69 6e 70 75 74 20 69 6e 20 41 75 64   an input in Aud
29dd0 69 6f 52 61 6e 67 65 20 5b 2d 31 2c 31 5d 20 74  ioRange [-1,1] t
29de0 6f 20 4e 6f 72 6d 61 6c 52 61 6e 67 65 20 5b 30  o NormalRange [0
29df0 2c 31 5d 2e 20 0a 09 09 20 2a 20 20 20 20 20 20  ,1]. ... *      
29e00 20 20 20 53 65 65 20 54 6f 6e 65 2e 47 61 69 6e     See Tone.Gain
29e10 54 6f 41 75 64 69 6f 2e 0a 09 09 20 2a 0a 09 09  ToAudio.... *...
29e20 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f   *  @extends {To
29e30 6e 65 2e 53 69 67 6e 61 6c 42 61 73 65 7d 0a 09  ne.SignalBase}..
29e40 09 20 2a 20 20 40 63 6f 6e 73 74 72 75 63 74 6f  . *  @constructo
29e50 72 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65  r... *  @example
29e60 0a 09 09 20 2a 20 20 76 61 72 20 61 32 67 20 3d  ... *  var a2g =
29e70 20 6e 65 77 20 54 6f 6e 65 2e 41 75 64 69 6f 54   new Tone.AudioT
29e80 6f 47 61 69 6e 28 29 3b 0a 09 09 20 2a 2f 0a 09  oGain();... */..
29e90 20 20 20 20 54 6f 6e 65 2e 41 75 64 69 6f 54 6f      Tone.AudioTo
29ea0 47 61 69 6e 20 3d 20 66 75 6e 63 74 69 6f 6e 20  Gain = function 
29eb0 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 2f 2a  () {..        /*
29ec0 2a 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b  *.... *  @type {
29ed0 57 61 76 65 53 68 61 70 65 72 4e 6f 64 65 7d 0a  WaveShaperNode}.
29ee0 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
29ef0 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
29f00 74 68 69 73 2e 5f 6e 6f 72 6d 20 3d 20 74 68 69  this._norm = thi
29f10 73 2e 69 6e 70 75 74 20 3d 20 74 68 69 73 2e 6f  s.input = this.o
29f20 75 74 70 75 74 20 3d 20 6e 65 77 20 54 6f 6e 65  utput = new Tone
29f30 2e 57 61 76 65 53 68 61 70 65 72 28 66 75 6e 63  .WaveShaper(func
29f40 74 69 6f 6e 20 28 78 29 20 7b 0a 09 20 20 20 20  tion (x) {..    
29f50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
29f60 78 20 2b 20 31 29 20 2f 20 32 3b 0a 09 20 20 20  x + 1) / 2;..   
29f70 20 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 7d 3b       });..    };
29f80 0a 09 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e  ..    Tone.exten
29f90 64 28 54 6f 6e 65 2e 41 75 64 69 6f 54 6f 47 61  d(Tone.AudioToGa
29fa0 69 6e 2c 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 42  in, Tone.SignalB
29fb0 61 73 65 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09  ase);..    /**..
29fc0 09 20 2a 20 20 63 6c 65 61 6e 20 75 70 0a 09 09  . *  clean up...
29fd0 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f   *  @returns {To
29fe0 6e 65 2e 41 75 64 69 6f 54 6f 47 61 69 6e 7d 20  ne.AudioToGain} 
29ff0 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20  this... */..    
2a000 54 6f 6e 65 2e 41 75 64 69 6f 54 6f 47 61 69 6e  Tone.AudioToGain
2a010 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f  .prototype.dispo
2a020 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  se = function ()
2a030 20 7b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65   {..        Tone
2a040 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f  .prototype.dispo
2a050 73 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09  se.call(this);..
2a060 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6e 6f          this._no
2a070 72 6d 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20  rm.dispose();.. 
2a080 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6e 6f 72         this._nor
2a090 6d 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20  m = null;..     
2a0a0 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a     return this;.
2a0b0 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74  .    };..    ret
2a0c0 75 72 6e 20 54 6f 6e 65 2e 41 75 64 69 6f 54 6f  urn Tone.AudioTo
2a0d0 47 61 69 6e 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75  Gain;..});..Modu
2a0e0 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e  le(function (Ton
2a0f0 65 29 20 7b 0a 09 20 20 20 20 0a 09 20 20 20 20  e) {..    ..    
2a100 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61 73 73  /**... *  @class
2a110 20 45 76 61 6c 75 61 74 65 20 61 6e 20 65 78 70   Evaluate an exp
2a120 72 65 73 73 69 6f 6e 20 61 74 20 61 75 64 69 6f  ression at audio
2a130 20 72 61 74 65 2e 20 3c 62 72 3e 3c 62 72 3e 0a   rate. <br><br>.
2a140 09 09 20 2a 20 20 20 20 20 20 20 20 20 50 61 72  .. *         Par
2a150 73 69 6e 67 20 63 6f 64 65 20 6d 6f 64 69 66 69  sing code modifi
2a160 65 64 20 66 72 6f 6d 20 68 74 74 70 73 3a 2f 2f  ed from https://
2a170 63 6f 64 65 2e 67 6f 6f 67 6c 65 2e 63 6f 6d 2f  code.google.com/
2a180 70 2f 74 61 70 64 69 67 69 74 2f 0a 09 09 20 2a  p/tapdigit/... *
2a190 20 20 20 20 20 20 20 20 20 43 6f 70 79 72 69 67           Copyrig
2a1a0 68 74 20 32 30 31 31 20 32 30 31 32 20 41 72 69  ht 2011 2012 Ari
2a1b0 79 61 20 48 69 64 61 79 61 74 2c 20 4e 65 77 20  ya Hidayat, New 
2a1c0 42 53 44 20 4c 69 63 65 6e 73 65 0a 09 09 20 2a  BSD License... *
2a1d0 0a 09 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20  ... *  @extends 
2a1e0 7b 54 6f 6e 65 2e 53 69 67 6e 61 6c 42 61 73 65  {Tone.SignalBase
2a1f0 7d 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 72 75  }... *  @constru
2a200 63 74 6f 72 0a 09 09 20 2a 20 20 40 70 61 72 61  ctor... *  @para
2a210 6d 20 7b 73 74 72 69 6e 67 7d 20 65 78 70 72 20  m {string} expr 
2a220 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  the expression t
2a230 6f 20 67 65 6e 65 72 61 74 65 0a 09 09 20 2a 20  o generate... * 
2a240 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 2f   @example... * /
2a250 2f 61 64 64 73 20 74 68 65 20 73 69 67 6e 61 6c  /adds the signal
2a260 73 20 66 72 6f 6d 20 69 6e 70 75 74 5b 30 5d 20  s from input[0] 
2a270 61 6e 64 20 69 6e 70 75 74 5b 31 5d 2e 0a 09 09  and input[1]....
2a280 20 2a 20 76 61 72 20 65 78 70 72 20 3d 20 6e 65   * var expr = ne
2a290 77 20 54 6f 6e 65 2e 45 78 70 72 28 22 24 30 20  w Tone.Expr("$0 
2a2a0 2b 20 24 31 22 29 3b 0a 09 09 20 2a 2f 0a 09 20  + $1");... */.. 
2a2b0 20 20 20 54 6f 6e 65 2e 45 78 70 72 20 3d 20 66     Tone.Expr = f
2a2c0 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
2a2d0 20 20 20 20 20 20 76 61 72 20 65 78 70 72 20 3d        var expr =
2a2e0 20 74 68 69 73 2e 5f 72 65 70 6c 61 63 65 6d 65   this._replaceme
2a2f0 6e 74 73 28 41 72 72 61 79 2e 70 72 6f 74 6f 74  nts(Array.protot
2a300 79 70 65 2e 73 6c 69 63 65 2e 63 61 6c 6c 28 61  ype.slice.call(a
2a310 72 67 75 6d 65 6e 74 73 29 29 3b 0a 09 20 20 20  rguments));..   
2a320 20 20 20 20 20 76 61 72 20 69 6e 70 75 74 43 6f       var inputCo
2a330 75 6e 74 20 3d 20 74 68 69 73 2e 5f 70 61 72 73  unt = this._pars
2a340 65 49 6e 70 75 74 73 28 65 78 70 72 29 3b 0a 09  eInputs(expr);..
2a350 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
2a360 2a 20 20 68 6f 6c 64 20 6f 6e 74 6f 20 61 6c 6c  *  hold onto all
2a370 20 6f 66 20 74 68 65 20 6e 6f 64 65 73 20 66 6f   of the nodes fo
2a380 72 20 64 69 73 70 6f 73 61 6c 0a 09 09 09 20 2a  r disposal.... *
2a390 20 20 40 74 79 70 65 20 7b 41 72 72 61 79 7d 0a    @type {Array}.
2a3a0 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
2a3b0 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
2a3c0 74 68 69 73 2e 5f 6e 6f 64 65 73 20 3d 20 5b 5d  this._nodes = []
2a3d0 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
2a3e0 09 09 20 2a 20 20 54 68 65 20 69 6e 70 75 74 73  .. *  The inputs
2a3f0 2e 20 54 68 65 20 6c 65 6e 67 74 68 20 69 73 20  . The length is 
2a400 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
2a410 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 0a 09  e expression. ..
2a420 09 09 20 2a 20 20 40 74 79 70 65 20 7b 41 72 72  .. *  @type {Arr
2a430 61 79 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  ay}.... */..    
2a440 20 20 20 20 74 68 69 73 2e 69 6e 70 75 74 20 3d      this.input =
2a450 20 6e 65 77 20 41 72 72 61 79 28 69 6e 70 75 74   new Array(input
2a460 43 6f 75 6e 74 29 3b 0a 09 20 20 20 20 20 20 20  Count);..       
2a470 20 2f 2f 63 72 65 61 74 65 20 61 20 67 61 69 6e   //create a gain
2a480 20 66 6f 72 20 65 61 63 68 20 69 6e 70 75 74 0a   for each input.
2a490 09 20 20 20 20 20 20 20 20 66 6f 72 20 28 76 61  .        for (va
2a4a0 72 20 69 20 3d 20 30 3b 20 69 20 3c 20 69 6e 70  r i = 0; i < inp
2a4b0 75 74 43 6f 75 6e 74 3b 20 69 2b 2b 29 20 7b 0a  utCount; i++) {.
2a4c0 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
2a4d0 73 2e 69 6e 70 75 74 5b 69 5d 20 3d 20 74 68 69  s.input[i] = thi
2a4e0 73 2e 63 6f 6e 74 65 78 74 2e 63 72 65 61 74 65  s.context.create
2a4f0 47 61 69 6e 28 29 3b 0a 09 20 20 20 20 20 20 20  Gain();..       
2a500 20 7d 0a 09 20 20 20 20 20 20 20 20 2f 2f 70 61   }..        //pa
2a510 72 73 65 20 74 68 65 20 73 79 6e 74 61 78 20 74  rse the syntax t
2a520 72 65 65 0a 09 20 20 20 20 20 20 20 20 76 61 72  ree..        var
2a530 20 74 72 65 65 20 3d 20 74 68 69 73 2e 5f 70 61   tree = this._pa
2a540 72 73 65 54 72 65 65 28 65 78 70 72 29 3b 0a 09  rseTree(expr);..
2a550 20 20 20 20 20 20 20 20 2f 2f 65 76 61 6c 75 61          //evalua
2a560 74 65 20 74 68 65 20 72 65 73 75 6c 74 73 0a 09  te the results..
2a570 20 20 20 20 20 20 20 20 76 61 72 20 72 65 73 75          var resu
2a580 6c 74 3b 0a 09 20 20 20 20 20 20 20 20 74 72 79  lt;..        try
2a590 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2a5a0 72 65 73 75 6c 74 20 3d 20 74 68 69 73 2e 5f 65  result = this._e
2a5b0 76 61 6c 28 74 72 65 65 29 3b 0a 09 20 20 20 20  val(tree);..    
2a5c0 20 20 20 20 7d 20 63 61 74 63 68 20 28 65 29 20      } catch (e) 
2a5d0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
2a5e0 68 69 73 2e 5f 64 69 73 70 6f 73 65 4e 6f 64 65  his._disposeNode
2a5f0 73 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20  s();..          
2a600 20 20 74 68 72 6f 77 20 6e 65 77 20 45 72 72 6f    throw new Erro
2a610 72 28 27 54 6f 6e 65 2e 45 78 70 72 3a 20 43 6f  r('Tone.Expr: Co
2a620 75 6c 64 20 65 76 61 6c 75 61 74 65 20 65 78 70  uld evaluate exp
2a630 72 65 73 73 69 6f 6e 3a 20 27 20 2b 20 65 78 70  ression: ' + exp
2a640 72 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  r);..        }..
2a650 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
2a660 2a 20 20 54 68 65 20 6f 75 74 70 75 74 20 6e 6f  *  The output no
2a670 64 65 20 69 73 20 74 68 65 20 72 65 73 75 6c 74  de is the result
2a680 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
2a690 6f 6e 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  on.... *  @type 
2a6a0 7b 54 6f 6e 65 7d 0a 09 09 09 20 2a 2f 0a 09 20  {Tone}.... */.. 
2a6b0 20 20 20 20 20 20 20 74 68 69 73 2e 6f 75 74 70         this.outp
2a6c0 75 74 20 3d 20 72 65 73 75 6c 74 3b 0a 09 20 20  ut = result;..  
2a6d0 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65 2e 65    };..    Tone.e
2a6e0 78 74 65 6e 64 28 54 6f 6e 65 2e 45 78 70 72 2c  xtend(Tone.Expr,
2a6f0 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 42 61 73 65   Tone.SignalBase
2a700 29 3b 0a 09 20 20 20 20 2f 2f 73 6f 6d 65 20 68  );..    //some h
2a710 65 6c 70 65 72 73 20 74 6f 20 63 75 74 20 64 6f  elpers to cut do
2a720 77 6e 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66  wn the amount of
2a730 20 63 6f 64 65 0a 09 20 20 20 20 66 75 6e 63 74   code..    funct
2a740 69 6f 6e 20 61 70 70 6c 79 42 69 6e 61 72 79 28  ion applyBinary(
2a750 43 6f 6e 73 74 72 75 63 74 6f 72 2c 20 61 72 67  Constructor, arg
2a760 73 2c 20 73 65 6c 66 29 20 7b 0a 09 20 20 20 20  s, self) {..    
2a770 20 20 20 20 76 61 72 20 6f 70 20 3d 20 6e 65 77      var op = new
2a780 20 43 6f 6e 73 74 72 75 63 74 6f 72 28 29 3b 0a   Constructor();.
2a790 09 20 20 20 20 20 20 20 20 73 65 6c 66 2e 5f 65  .        self._e
2a7a0 76 61 6c 28 61 72 67 73 5b 30 5d 29 2e 63 6f 6e  val(args[0]).con
2a7b0 6e 65 63 74 28 6f 70 2c 20 30 2c 20 30 29 3b 0a  nect(op, 0, 0);.
2a7c0 09 20 20 20 20 20 20 20 20 73 65 6c 66 2e 5f 65  .        self._e
2a7d0 76 61 6c 28 61 72 67 73 5b 31 5d 29 2e 63 6f 6e  val(args[1]).con
2a7e0 6e 65 63 74 28 6f 70 2c 20 30 2c 20 31 29 3b 0a  nect(op, 0, 1);.
2a7f0 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
2a800 6f 70 3b 0a 09 20 20 20 20 7d 0a 09 20 20 20 20  op;..    }..    
2a810 66 75 6e 63 74 69 6f 6e 20 61 70 70 6c 79 55 6e  function applyUn
2a820 61 72 79 28 43 6f 6e 73 74 72 75 63 74 6f 72 2c  ary(Constructor,
2a830 20 61 72 67 73 2c 20 73 65 6c 66 29 20 7b 0a 09   args, self) {..
2a840 20 20 20 20 20 20 20 20 76 61 72 20 6f 70 20 3d          var op =
2a850 20 6e 65 77 20 43 6f 6e 73 74 72 75 63 74 6f 72   new Constructor
2a860 28 29 3b 0a 09 20 20 20 20 20 20 20 20 73 65 6c  ();..        sel
2a870 66 2e 5f 65 76 61 6c 28 61 72 67 73 5b 30 5d 29  f._eval(args[0])
2a880 2e 63 6f 6e 6e 65 63 74 28 6f 70 2c 20 30 2c 20  .connect(op, 0, 
2a890 30 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74  0);..        ret
2a8a0 75 72 6e 20 6f 70 3b 0a 09 20 20 20 20 7d 0a 09  urn op;..    }..
2a8b0 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 67 65 74      function get
2a8c0 4e 75 6d 62 65 72 28 61 72 67 29 20 7b 0a 09 20  Number(arg) {.. 
2a8d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 72         return ar
2a8e0 67 20 3f 20 70 61 72 73 65 46 6c 6f 61 74 28 61  g ? parseFloat(a
2a8f0 72 67 29 20 3a 20 75 6e 64 65 66 69 6e 65 64 3b  rg) : undefined;
2a900 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 66 75 6e  ..    }..    fun
2a910 63 74 69 6f 6e 20 6c 69 74 65 72 61 6c 4e 75 6d  ction literalNum
2a920 62 65 72 28 61 72 67 29 20 7b 0a 09 20 20 20 20  ber(arg) {..    
2a930 20 20 20 20 72 65 74 75 72 6e 20 61 72 67 20 26      return arg &
2a940 26 20 61 72 67 2e 61 72 67 73 20 3f 20 70 61 72  & arg.args ? par
2a950 73 65 46 6c 6f 61 74 28 61 72 67 2e 61 72 67 73  seFloat(arg.args
2a960 29 20 3a 20 75 6e 64 65 66 69 6e 65 64 3b 0a 09  ) : undefined;..
2a970 20 20 20 20 7d 0a 09 20 20 20 20 2f 2a 0a 09 09      }..    /*...
2a980 20 2a 20 20 74 68 65 20 45 78 70 72 65 73 73 69   *  the Expressi
2a990 6f 6e 73 20 74 68 61 74 20 54 6f 6e 65 2e 45 78  ons that Tone.Ex
2a9a0 70 72 20 63 61 6e 20 70 61 72 73 65 2e 0a 09 09  pr can parse....
2a9b0 20 2a 0a 09 09 20 2a 20 20 65 61 63 68 20 65 78   *... *  each ex
2a9c0 70 72 65 73 73 69 6f 6e 20 62 65 6c 6f 6e 67 73  pression belongs
2a9d0 20 74 6f 20 61 20 67 72 6f 75 70 20 61 6e 64 20   to a group and 
2a9e0 63 6f 6e 74 61 69 6e 73 20 61 20 72 65 67 65 78  contains a regex
2a9f0 70 20 0a 09 09 20 2a 20 20 66 6f 72 20 73 65 6c  p ... *  for sel
2aa00 65 63 74 69 6e 67 20 74 68 65 20 6f 70 65 72 61  ecting the opera
2aa10 74 6f 72 20 61 73 20 77 65 6c 6c 20 61 73 20 74  tor as well as t
2aa20 68 61 74 20 6f 70 65 72 61 74 6f 72 73 20 6d 65  hat operators me
2aa30 74 68 6f 64 0a 09 09 20 2a 20 20 0a 09 09 20 2a  thod... *  ... *
2aa40 20 20 40 74 79 70 65 20 7b 4f 62 6a 65 63 74 7d    @type {Object}
2aa50 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
2aa60 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
2aa70 45 78 70 72 2e 5f 45 78 70 72 65 73 73 69 6f 6e  Expr._Expression
2aa80 73 20 3d 20 7b 0a 09 20 20 20 20 20 20 20 20 2f  s = {..        /
2aa90 2f 76 61 6c 75 65 73 0a 09 20 20 20 20 20 20 20  /values..       
2aaa0 20 27 76 61 6c 75 65 27 3a 20 7b 0a 09 20 20 20   'value': {..   
2aab0 20 20 20 20 20 20 20 20 20 27 73 69 67 6e 61 6c           'signal
2aac0 27 3a 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  ': {..          
2aad0 20 20 20 20 20 20 72 65 67 65 78 70 3a 20 2f 5e        regexp: /^
2aae0 5c 64 2b 5c 2e 5c 64 2b 7c 5e 5c 64 2b 2f 2c 0a  \d+\.\d+|^\d+/,.
2aaf0 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ab00 20 6d 65 74 68 6f 64 3a 20 66 75 6e 63 74 69 6f   method: functio
2ab10 6e 20 28 61 72 67 29 20 7b 0a 09 20 20 20 20 20  n (arg) {..     
2ab20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2ab30 61 72 20 73 69 67 20 3d 20 6e 65 77 20 54 6f 6e  ar sig = new Ton
2ab40 65 2e 53 69 67 6e 61 6c 28 67 65 74 4e 75 6d 62  e.Signal(getNumb
2ab50 65 72 28 61 72 67 29 29 3b 0a 09 20 20 20 20 20  er(arg));..     
2ab60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2ab70 65 74 75 72 6e 20 73 69 67 3b 0a 09 20 20 20 20  eturn sig;..    
2ab80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20              }.. 
2ab90 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 09 20             },.. 
2aba0 20 20 20 20 20 20 20 20 20 20 20 27 69 6e 70 75             'inpu
2abb0 74 27 3a 20 7b 0a 09 20 20 20 20 20 20 20 20 20  t': {..         
2abc0 20 20 20 20 20 20 20 72 65 67 65 78 70 3a 20 2f         regexp: /
2abd0 5e 5c 24 5c 64 2f 2c 0a 09 20 20 20 20 20 20 20  ^\$\d/,..       
2abe0 20 20 20 20 20 20 20 20 20 6d 65 74 68 6f 64 3a           method:
2abf0 20 66 75 6e 63 74 69 6f 6e 20 28 61 72 67 2c 20   function (arg, 
2ac00 73 65 6c 66 29 20 7b 0a 09 20 20 20 20 20 20 20  self) {..       
2ac10 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2ac20 75 72 6e 20 73 65 6c 66 2e 69 6e 70 75 74 5b 67  urn self.input[g
2ac30 65 74 4e 75 6d 62 65 72 28 61 72 67 2e 73 75 62  etNumber(arg.sub
2ac40 73 74 72 28 31 29 29 5d 3b 0a 09 20 20 20 20 20  str(1))];..     
2ac50 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20             }..  
2ac60 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20            }..   
2ac70 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20       },..       
2ac80 20 2f 2f 73 79 6e 74 61 63 74 69 63 20 67 6c 75   //syntactic glu
2ac90 65 0a 09 20 20 20 20 20 20 20 20 27 67 6c 75 65  e..        'glue
2aca0 27 3a 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  ': {..          
2acb0 20 20 27 28 27 3a 20 7b 20 72 65 67 65 78 70 3a    '(': { regexp:
2acc0 20 2f 5e 5c 28 2f 20 7d 2c 0a 09 20 20 20 20 20   /^\(/ },..     
2acd0 20 20 20 20 20 20 20 27 29 27 3a 20 7b 20 72 65         ')': { re
2ace0 67 65 78 70 3a 20 2f 5e 5c 29 2f 20 7d 2c 0a 09  gexp: /^\)/ },..
2acf0 20 20 20 20 20 20 20 20 20 20 20 20 27 2c 27 3a              ',':
2ad00 20 7b 20 72 65 67 65 78 70 3a 20 2f 5e 2c 2f 20   { regexp: /^,/ 
2ad10 7d 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20  }..        },.. 
2ad20 20 20 20 20 20 20 20 2f 2f 66 75 6e 63 74 69 6f         //functio
2ad30 6e 73 0a 09 20 20 20 20 20 20 20 20 27 66 75 6e  ns..        'fun
2ad40 63 27 3a 20 7b 0a 09 20 20 20 20 20 20 20 20 20  c': {..         
2ad50 20 20 20 27 61 62 73 27 3a 20 7b 0a 09 20 20 20     'abs': {..   
2ad60 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 67               reg
2ad70 65 78 70 3a 20 2f 5e 61 62 73 2f 2c 0a 09 20 20  exp: /^abs/,..  
2ad80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65                me
2ad90 74 68 6f 64 3a 20 61 70 70 6c 79 55 6e 61 72 79  thod: applyUnary
2ada0 2e 62 69 6e 64 28 74 68 69 73 2c 20 54 6f 6e 65  .bind(this, Tone
2adb0 2e 41 62 73 29 0a 09 20 20 20 20 20 20 20 20 20  .Abs)..         
2adc0 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 20     },..         
2add0 20 20 20 27 6d 6f 64 27 3a 20 7b 0a 09 20 20 20     'mod': {..   
2ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 67               reg
2adf0 65 78 70 3a 20 2f 5e 6d 6f 64 2f 2c 0a 09 20 20  exp: /^mod/,..  
2ae00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65                me
2ae10 74 68 6f 64 3a 20 66 75 6e 63 74 69 6f 6e 20 28  thod: function (
2ae20 61 72 67 73 2c 20 73 65 6c 66 29 20 7b 0a 09 20  args, self) {.. 
2ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae40 20 20 20 76 61 72 20 6d 6f 64 75 6c 75 73 20 3d     var modulus =
2ae50 20 6c 69 74 65 72 61 6c 4e 75 6d 62 65 72 28 61   literalNumber(a
2ae60 72 67 73 5b 31 5d 29 3b 0a 09 20 20 20 20 20 20  rgs[1]);..      
2ae70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61                va
2ae80 72 20 6f 70 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  r op = new Tone.
2ae90 4d 6f 64 75 6c 6f 28 6d 6f 64 75 6c 75 73 29 3b  Modulo(modulus);
2aea0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2aeb0 20 20 20 20 20 20 73 65 6c 66 2e 5f 65 76 61 6c        self._eval
2aec0 28 61 72 67 73 5b 30 5d 29 2e 63 6f 6e 6e 65 63  (args[0]).connec
2aed0 74 28 6f 70 29 3b 0a 09 20 20 20 20 20 20 20 20  t(op);..        
2aee0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2aef0 72 6e 20 6f 70 3b 0a 09 20 20 20 20 20 20 20 20  rn op;..        
2af00 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
2af10 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20         },..     
2af20 20 20 20 20 20 20 20 27 70 6f 77 27 3a 20 7b 0a         'pow': {.
2af30 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2af40 20 72 65 67 65 78 70 3a 20 2f 5e 70 6f 77 2f 2c   regexp: /^pow/,
2af50 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2af60 20 20 6d 65 74 68 6f 64 3a 20 66 75 6e 63 74 69    method: functi
2af70 6f 6e 20 28 61 72 67 73 2c 20 73 65 6c 66 29 20  on (args, self) 
2af80 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2af90 20 20 20 20 20 20 20 76 61 72 20 65 78 70 20 3d         var exp =
2afa0 20 6c 69 74 65 72 61 6c 4e 75 6d 62 65 72 28 61   literalNumber(a
2afb0 72 67 73 5b 31 5d 29 3b 0a 09 20 20 20 20 20 20  rgs[1]);..      
2afc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61                va
2afd0 72 20 6f 70 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  r op = new Tone.
2afe0 50 6f 77 28 65 78 70 29 3b 0a 09 20 20 20 20 20  Pow(exp);..     
2aff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2b000 65 6c 66 2e 5f 65 76 61 6c 28 61 72 67 73 5b 30  elf._eval(args[0
2b010 5d 29 2e 63 6f 6e 6e 65 63 74 28 6f 70 29 3b 0a  ]).connect(op);.
2b020 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b030 20 20 20 20 20 72 65 74 75 72 6e 20 6f 70 3b 0a       return op;.
2b040 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b050 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2b060 7d 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  },..            
2b070 27 61 32 67 27 3a 20 7b 0a 09 20 20 20 20 20 20  'a2g': {..      
2b080 20 20 20 20 20 20 20 20 20 20 72 65 67 65 78 70            regexp
2b090 3a 20 2f 5e 61 32 67 2f 2c 0a 09 20 20 20 20 20  : /^a2g/,..     
2b0a0 20 20 20 20 20 20 20 20 20 20 20 6d 65 74 68 6f             metho
2b0b0 64 3a 20 66 75 6e 63 74 69 6f 6e 20 28 61 72 67  d: function (arg
2b0c0 73 2c 20 73 65 6c 66 29 20 7b 0a 09 20 20 20 20  s, self) {..    
2b0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0e0 76 61 72 20 6f 70 20 3d 20 6e 65 77 20 54 6f 6e  var op = new Ton
2b0f0 65 2e 41 75 64 69 6f 54 6f 47 61 69 6e 28 29 3b  e.AudioToGain();
2b100 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b110 20 20 20 20 20 20 73 65 6c 66 2e 5f 65 76 61 6c        self._eval
2b120 28 61 72 67 73 5b 30 5d 29 2e 63 6f 6e 6e 65 63  (args[0]).connec
2b130 74 28 6f 70 29 3b 0a 09 20 20 20 20 20 20 20 20  t(op);..        
2b140 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2b150 72 6e 20 6f 70 3b 0a 09 20 20 20 20 20 20 20 20  rn op;..        
2b160 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
2b170 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
2b180 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 2f 2f    },..        //
2b190 62 69 6e 61 72 79 20 65 78 70 72 65 73 73 69 6f  binary expressio
2b1a0 6e 73 0a 09 20 20 20 20 20 20 20 20 27 62 69 6e  ns..        'bin
2b1b0 61 72 79 27 3a 20 7b 0a 09 20 20 20 20 20 20 20  ary': {..       
2b1c0 20 20 20 20 20 27 2b 27 3a 20 7b 0a 09 20 20 20       '+': {..   
2b1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 67               reg
2b1e0 65 78 70 3a 20 2f 5e 5c 2b 2f 2c 0a 09 20 20 20  exp: /^\+/,..   
2b1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65               pre
2b200 63 65 64 65 6e 63 65 3a 20 31 2c 0a 09 20 20 20  cedence: 1,..   
2b210 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65 74               met
2b220 68 6f 64 3a 20 61 70 70 6c 79 42 69 6e 61 72 79  hod: applyBinary
2b230 2e 62 69 6e 64 28 74 68 69 73 2c 20 54 6f 6e 65  .bind(this, Tone
2b240 2e 41 64 64 29 0a 09 20 20 20 20 20 20 20 20 20  .Add)..         
2b250 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 20     },..         
2b260 20 20 20 27 2d 27 3a 20 7b 0a 09 20 20 20 20 20     '-': {..     
2b270 20 20 20 20 20 20 20 20 20 20 20 72 65 67 65 78             regex
2b280 70 3a 20 2f 5e 5c 2d 2f 2c 0a 09 20 20 20 20 20  p: /^\-/,..     
2b290 20 20 20 20 20 20 20 20 20 20 20 70 72 65 63 65             prece
2b2a0 64 65 6e 63 65 3a 20 31 2c 0a 09 20 20 20 20 20  dence: 1,..     
2b2b0 20 20 20 20 20 20 20 20 20 20 20 6d 65 74 68 6f             metho
2b2c0 64 3a 20 66 75 6e 63 74 69 6f 6e 20 28 61 72 67  d: function (arg
2b2d0 73 2c 20 73 65 6c 66 29 20 7b 0a 09 20 20 20 20  s, self) {..    
2b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2f0 2f 2f 62 6f 74 68 20 75 6e 61 72 79 20 61 6e 64  //both unary and
2b300 20 62 69 6e 61 72 79 20 6f 70 0a 09 20 20 20 20   binary op..    
2b310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b320 69 66 20 28 61 72 67 73 2e 6c 65 6e 67 74 68 20  if (args.length 
2b330 3d 3d 3d 20 31 29 20 7b 0a 09 20 20 20 20 20 20  === 1) {..      
2b340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b350 20 20 72 65 74 75 72 6e 20 61 70 70 6c 79 55 6e    return applyUn
2b360 61 72 79 28 54 6f 6e 65 2e 4e 65 67 61 74 65 2c  ary(Tone.Negate,
2b370 20 61 72 67 73 2c 20 73 65 6c 66 29 3b 0a 09 20   args, self);.. 
2b380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b390 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20     } else {..   
2b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3b0 20 20 20 20 20 72 65 74 75 72 6e 20 61 70 70 6c       return appl
2b3c0 79 42 69 6e 61 72 79 28 54 6f 6e 65 2e 53 75 62  yBinary(Tone.Sub
2b3d0 74 72 61 63 74 2c 20 61 72 67 73 2c 20 73 65 6c  tract, args, sel
2b3e0 66 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  f);..           
2b3f0 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20           }..    
2b400 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20              }.. 
2b410 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 09 20             },.. 
2b420 20 20 20 20 20 20 20 20 20 20 20 27 2a 27 3a 20             '*': 
2b430 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2b440 20 20 20 72 65 67 65 78 70 3a 20 2f 5e 5c 2a 2f     regexp: /^\*/
2b450 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2b460 20 20 20 70 72 65 63 65 64 65 6e 63 65 3a 20 30     precedence: 0
2b470 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2b480 20 20 20 6d 65 74 68 6f 64 3a 20 61 70 70 6c 79     method: apply
2b490 42 69 6e 61 72 79 2e 62 69 6e 64 28 74 68 69 73  Binary.bind(this
2b4a0 2c 20 54 6f 6e 65 2e 4d 75 6c 74 69 70 6c 79 29  , Tone.Multiply)
2b4b0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ..            }.
2b4c0 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20  .        },..   
2b4d0 20 20 20 20 20 2f 2f 75 6e 61 72 79 20 65 78 70       //unary exp
2b4e0 72 65 73 73 69 6f 6e 73 0a 09 20 20 20 20 20 20  ressions..      
2b4f0 20 20 27 75 6e 61 72 79 27 3a 20 7b 0a 09 20 20    'unary': {..  
2b500 20 20 20 20 20 20 20 20 20 20 27 2d 27 3a 20 7b            '-': {
2b510 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b520 20 20 72 65 67 65 78 70 3a 20 2f 5e 5c 2d 2f 2c    regexp: /^\-/,
2b530 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b540 20 20 6d 65 74 68 6f 64 3a 20 61 70 70 6c 79 55    method: applyU
2b550 6e 61 72 79 2e 62 69 6e 64 28 74 68 69 73 2c 20  nary.bind(this, 
2b560 54 6f 6e 65 2e 4e 65 67 61 74 65 29 0a 09 20 20  Tone.Negate)..  
2b570 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20            },..  
2b580 20 20 20 20 20 20 20 20 20 20 27 21 27 3a 20 7b            '!': {
2b590 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b5a0 20 20 72 65 67 65 78 70 3a 20 2f 5e 5c 21 2f 2c    regexp: /^\!/,
2b5b0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b5c0 20 20 6d 65 74 68 6f 64 3a 20 61 70 70 6c 79 55    method: applyU
2b5d0 6e 61 72 79 2e 62 69 6e 64 28 74 68 69 73 2c 20  nary.bind(this, 
2b5e0 54 6f 6e 65 2e 4e 4f 54 29 0a 09 20 20 20 20 20  Tone.NOT)..     
2b5f0 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
2b600 20 20 7d 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20    }..    };..   
2b610 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 70 61 72 61   /**... *  @para
2b620 6d 20 20 20 7b 73 74 72 69 6e 67 7d 20 65 78 70  m   {string} exp
2b630 72 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  r the expression
2b640 20 73 74 72 69 6e 67 0a 09 09 20 2a 20 20 40 72   string... *  @r
2b650 65 74 75 72 6e 20 20 7b 6e 75 6d 62 65 72 7d 20  eturn  {number} 
2b660 20 20 20 20 20 74 68 65 20 69 6e 70 75 74 20 63       the input c
2b670 6f 75 6e 74 0a 09 09 20 2a 20 20 40 70 72 69 76  ount... *  @priv
2b680 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  ate... */..    T
2b690 6f 6e 65 2e 45 78 70 72 2e 70 72 6f 74 6f 74 79  one.Expr.prototy
2b6a0 70 65 2e 5f 70 61 72 73 65 49 6e 70 75 74 73 20  pe._parseInputs 
2b6b0 3d 20 66 75 6e 63 74 69 6f 6e 20 28 65 78 70 72  = function (expr
2b6c0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72  ) {..        var
2b6d0 20 69 6e 70 75 74 41 72 72 61 79 20 3d 20 65 78   inputArray = ex
2b6e0 70 72 2e 6d 61 74 63 68 28 2f 5c 24 5c 64 2f 67  pr.match(/\$\d/g
2b6f0 29 3b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20  );..        var 
2b700 69 6e 70 75 74 4d 61 78 20 3d 20 30 3b 0a 09 20  inputMax = 0;.. 
2b710 20 20 20 20 20 20 20 69 66 20 28 69 6e 70 75 74         if (input
2b720 41 72 72 61 79 20 21 3d 3d 20 6e 75 6c 6c 29 20  Array !== null) 
2b730 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 66  {..            f
2b740 6f 72 20 28 76 61 72 20 69 20 3d 20 30 3b 20 69  or (var i = 0; i
2b750 20 3c 20 69 6e 70 75 74 41 72 72 61 79 2e 6c 65   < inputArray.le
2b760 6e 67 74 68 3b 20 69 2b 2b 29 20 7b 0a 09 20 20  ngth; i++) {..  
2b770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61                va
2b780 72 20 69 6e 70 75 74 4e 75 6d 20 3d 20 70 61 72  r inputNum = par
2b790 73 65 49 6e 74 28 69 6e 70 75 74 41 72 72 61 79  seInt(inputArray
2b7a0 5b 69 5d 2e 73 75 62 73 74 72 28 31 29 29 20 2b  [i].substr(1)) +
2b7b0 20 31 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20   1;..           
2b7c0 20 20 20 20 20 69 6e 70 75 74 4d 61 78 20 3d 20       inputMax = 
2b7d0 4d 61 74 68 2e 6d 61 78 28 69 6e 70 75 74 4d 61  Math.max(inputMa
2b7e0 78 2c 20 69 6e 70 75 74 4e 75 6d 29 3b 0a 09 20  x, inputNum);.. 
2b7f0 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20             }..  
2b800 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
2b810 20 72 65 74 75 72 6e 20 69 6e 70 75 74 4d 61 78   return inputMax
2b820 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  ;..    };..    /
2b830 2a 2a 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  **... *  @param 
2b840 20 20 7b 41 72 72 61 79 7d 20 61 72 67 73 20 09    {Array} args .
2b850 61 6e 20 61 72 72 61 79 20 6f 66 20 61 72 67 75  an array of argu
2b860 6d 65 6e 74 73 0a 09 09 20 2a 20 20 40 72 65 74  ments... *  @ret
2b870 75 72 6e 20 20 7b 73 74 72 69 6e 67 7d 20 74 68  urn  {string} th
2b880 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
2b890 20 72 65 70 6c 61 63 65 6d 65 6e 74 73 20 62 65   replacements be
2b8a0 69 6e 67 20 72 65 70 6c 61 63 65 64 0a 09 09 20  ing replaced... 
2b8b0 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a  *  @private... *
2b8c0 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 45 78 70 72  /..    Tone.Expr
2b8d0 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 72 65 70 6c  .prototype._repl
2b8e0 61 63 65 6d 65 6e 74 73 20 3d 20 66 75 6e 63 74  acements = funct
2b8f0 69 6f 6e 20 28 61 72 67 73 29 20 7b 0a 09 20 20  ion (args) {..  
2b900 20 20 20 20 20 20 76 61 72 20 65 78 70 72 20 3d        var expr =
2b910 20 61 72 67 73 2e 73 68 69 66 74 28 29 3b 0a 09   args.shift();..
2b920 20 20 20 20 20 20 20 20 66 6f 72 20 28 76 61 72          for (var
2b930 20 69 20 3d 20 30 3b 20 69 20 3c 20 61 72 67 73   i = 0; i < args
2b940 2e 6c 65 6e 67 74 68 3b 20 69 2b 2b 29 20 7b 0a  .length; i++) {.
2b950 09 20 20 20 20 20 20 20 20 20 20 20 20 65 78 70  .            exp
2b960 72 20 3d 20 65 78 70 72 2e 72 65 70 6c 61 63 65  r = expr.replace
2b970 28 2f 5c 25 2f 69 2c 20 61 72 67 73 5b 69 5d 29  (/\%/i, args[i])
2b980 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20  ;..        }..  
2b990 20 20 20 20 20 20 72 65 74 75 72 6e 20 65 78 70        return exp
2b9a0 72 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  r;..    };..    
2b9b0 2f 2a 2a 0a 09 09 20 2a 20 20 74 6f 6b 65 6e 69  /**... *  tokeni
2b9c0 7a 65 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ze the expressio
2b9d0 6e 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 45  n based on the E
2b9e0 78 70 72 65 73 73 69 6f 6e 73 20 6f 62 6a 65 63  xpressions objec
2b9f0 74 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20  t... *  @param  
2ba00 20 7b 73 74 72 69 6e 67 7d 20 65 78 70 72 20 0a   {string} expr .
2ba10 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b  .. *  @return  {
2ba20 4f 62 6a 65 63 74 7d 20 20 20 20 20 20 72 65 74  Object}      ret
2ba30 75 72 6e 73 20 74 77 6f 20 6d 65 74 68 6f 64 73  urns two methods
2ba40 20 6f 6e 20 74 68 65 20 74 6f 6b 65 6e 69 7a 65   on the tokenize
2ba50 64 20 6c 69 73 74 2c 20 6e 65 78 74 20 61 6e 64  d list, next and
2ba60 20 70 65 65 6b 0a 09 09 20 2a 20 20 40 70 72 69   peek... *  @pri
2ba70 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20  vate... */..    
2ba80 54 6f 6e 65 2e 45 78 70 72 2e 70 72 6f 74 6f 74  Tone.Expr.protot
2ba90 79 70 65 2e 5f 74 6f 6b 65 6e 69 7a 65 20 3d 20  ype._tokenize = 
2baa0 66 75 6e 63 74 69 6f 6e 20 28 65 78 70 72 29 20  function (expr) 
2bab0 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 70  {..        var p
2bac0 6f 73 69 74 69 6f 6e 20 3d 20 2d 31 3b 0a 09 20  osition = -1;.. 
2bad0 20 20 20 20 20 20 20 76 61 72 20 74 6f 6b 65 6e         var token
2bae0 73 20 3d 20 5b 5d 3b 0a 09 20 20 20 20 20 20 20  s = [];..       
2baf0 20 77 68 69 6c 65 20 28 65 78 70 72 2e 6c 65 6e   while (expr.len
2bb00 67 74 68 20 3e 20 30 29 20 7b 0a 09 20 20 20 20  gth > 0) {..    
2bb10 20 20 20 20 20 20 20 20 65 78 70 72 20 3d 20 65          expr = e
2bb20 78 70 72 2e 74 72 69 6d 28 29 3b 0a 09 20 20 20  xpr.trim();..   
2bb30 20 20 20 20 20 20 20 20 20 76 61 72 20 74 6f 6b           var tok
2bb40 65 6e 20 3d 20 67 65 74 4e 65 78 74 54 6f 6b 65  en = getNextToke
2bb50 6e 28 65 78 70 72 29 3b 0a 09 20 20 20 20 20 20  n(expr);..      
2bb60 20 20 20 20 20 20 74 6f 6b 65 6e 73 2e 70 75 73        tokens.pus
2bb70 68 28 74 6f 6b 65 6e 29 3b 0a 09 20 20 20 20 20  h(token);..     
2bb80 20 20 20 20 20 20 20 65 78 70 72 20 3d 20 65 78         expr = ex
2bb90 70 72 2e 73 75 62 73 74 72 28 74 6f 6b 65 6e 2e  pr.substr(token.
2bba0 76 61 6c 75 65 2e 6c 65 6e 67 74 68 29 3b 0a 09  value.length);..
2bbb0 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
2bbc0 20 20 20 66 75 6e 63 74 69 6f 6e 20 67 65 74 4e     function getN
2bbd0 65 78 74 54 6f 6b 65 6e 28 65 78 70 72 29 20 7b  extToken(expr) {
2bbe0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
2bbf0 72 20 28 76 61 72 20 74 79 70 65 20 69 6e 20 54  r (var type in T
2bc00 6f 6e 65 2e 45 78 70 72 2e 5f 45 78 70 72 65 73  one.Expr._Expres
2bc10 73 69 6f 6e 73 29 20 7b 0a 09 20 20 20 20 20 20  sions) {..      
2bc20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 67 72            var gr
2bc30 6f 75 70 20 3d 20 54 6f 6e 65 2e 45 78 70 72 2e  oup = Tone.Expr.
2bc40 5f 45 78 70 72 65 73 73 69 6f 6e 73 5b 74 79 70  _Expressions[typ
2bc50 65 5d 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e];..           
2bc60 20 20 20 20 20 66 6f 72 20 28 76 61 72 20 6f 70       for (var op
2bc70 4e 61 6d 65 20 69 6e 20 67 72 6f 75 70 29 20 7b  Name in group) {
2bc80 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bc90 20 20 20 20 20 20 76 61 72 20 6f 70 20 3d 20 67        var op = g
2bca0 72 6f 75 70 5b 6f 70 4e 61 6d 65 5d 3b 0a 09 20  roup[opName];.. 
2bcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bcc0 20 20 20 76 61 72 20 72 65 67 20 3d 20 6f 70 2e     var reg = op.
2bcd0 72 65 67 65 78 70 3b 0a 09 20 20 20 20 20 20 20  regexp;..       
2bce0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72               var
2bcf0 20 6d 61 74 63 68 20 3d 20 65 78 70 72 2e 6d 61   match = expr.ma
2bd00 74 63 68 28 72 65 67 29 3b 0a 09 20 20 20 20 20  tch(reg);..     
2bd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2bd20 66 20 28 6d 61 74 63 68 20 21 3d 3d 20 6e 75 6c  f (match !== nul
2bd30 6c 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  l) {..          
2bd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2bd50 74 75 72 6e 20 7b 0a 09 20 20 20 20 20 20 20 20  turn {..        
2bd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd70 20 20 20 20 74 79 70 65 3a 20 74 79 70 65 2c 0a      type: type,.
2bd80 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bd90 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 6c               val
2bda0 75 65 3a 20 6d 61 74 63 68 5b 30 5d 2c 0a 09 20  ue: match[0],.. 
2bdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bdc0 20 20 20 20 20 20 20 20 20 20 20 6d 65 74 68 6f             metho
2bdd0 64 3a 20 6f 70 2e 6d 65 74 68 6f 64 0a 09 20 20  d: op.method..  
2bde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bdf0 20 20 20 20 20 20 7d 3b 0a 09 20 20 20 20 20 20        };..      
2be00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
2be10 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2be20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2be30 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  }..            t
2be40 68 72 6f 77 20 6e 65 77 20 53 79 6e 74 61 78 45  hrow new SyntaxE
2be50 72 72 6f 72 28 27 54 6f 6e 65 2e 45 78 70 72 3a  rror('Tone.Expr:
2be60 20 55 6e 65 78 70 65 63 74 65 64 20 74 6f 6b 65   Unexpected toke
2be70 6e 20 27 20 2b 20 65 78 70 72 29 3b 0a 09 20 20  n ' + expr);..  
2be80 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
2be90 20 72 65 74 75 72 6e 20 7b 0a 09 20 20 20 20 20   return {..     
2bea0 20 20 20 20 20 20 20 6e 65 78 74 3a 20 66 75 6e         next: fun
2beb0 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
2bec0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2bed0 72 6e 20 74 6f 6b 65 6e 73 5b 2b 2b 70 6f 73 69  rn tokens[++posi
2bee0 74 69 6f 6e 5d 3b 0a 09 20 20 20 20 20 20 20 20  tion];..        
2bef0 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20      },..        
2bf00 20 20 20 20 70 65 65 6b 3a 20 66 75 6e 63 74 69      peek: functi
2bf10 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
2bf20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2bf30 74 6f 6b 65 6e 73 5b 70 6f 73 69 74 69 6f 6e 20  tokens[position 
2bf40 2b 20 31 5d 3b 0a 09 20 20 20 20 20 20 20 20 20  + 1];..         
2bf50 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 3b     }..        };
2bf60 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
2bf70 2a 0a 09 09 20 2a 20 20 72 65 63 75 72 73 69 76  *... *  recursiv
2bf80 65 6c 79 20 70 61 72 73 65 20 74 68 65 20 73 74  ely parse the st
2bf90 72 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 20  ring expression 
2bfa0 69 6e 74 6f 20 61 20 73 79 6e 74 61 78 20 74 72  into a syntax tr
2bfb0 65 65 0a 09 09 20 2a 20 20 0a 09 09 20 2a 20 20  ee... *  ... *  
2bfc0 40 70 61 72 61 6d 20 20 20 7b 73 74 72 69 6e 67  @param   {string
2bfd0 7d 20 65 78 70 72 20 0a 09 09 20 2a 20 20 40 72  } expr ... *  @r
2bfe0 65 74 75 72 6e 20 20 7b 4f 62 6a 65 63 74 7d 0a  eturn  {Object}.
2bff0 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
2c000 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 45  . */..    Tone.E
2c010 78 70 72 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 70  xpr.prototype._p
2c020 61 72 73 65 54 72 65 65 20 3d 20 66 75 6e 63 74  arseTree = funct
2c030 69 6f 6e 20 28 65 78 70 72 29 20 7b 0a 09 20 20  ion (expr) {..  
2c040 20 20 20 20 20 20 76 61 72 20 6c 65 78 65 72 20        var lexer 
2c050 3d 20 74 68 69 73 2e 5f 74 6f 6b 65 6e 69 7a 65  = this._tokenize
2c060 28 65 78 70 72 29 3b 0a 09 20 20 20 20 20 20 20  (expr);..       
2c070 20 76 61 72 20 69 73 55 6e 64 65 66 20 3d 20 74   var isUndef = t
2c080 68 69 73 2e 69 73 55 6e 64 65 66 2e 62 69 6e 64  his.isUndef.bind
2c090 28 74 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20  (this);..       
2c0a0 20 66 75 6e 63 74 69 6f 6e 20 6d 61 74 63 68 53   function matchS
2c0b0 79 6e 74 61 78 28 74 6f 6b 65 6e 2c 20 73 79 6e  yntax(token, syn
2c0c0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
2c0d0 20 72 65 74 75 72 6e 20 21 69 73 55 6e 64 65 66   return !isUndef
2c0e0 28 74 6f 6b 65 6e 29 20 26 26 20 74 6f 6b 65 6e  (token) && token
2c0f0 2e 74 79 70 65 20 3d 3d 3d 20 27 67 6c 75 65 27  .type === 'glue'
2c100 20 26 26 20 74 6f 6b 65 6e 2e 76 61 6c 75 65 20   && token.value 
2c110 3d 3d 3d 20 73 79 6e 3b 0a 09 20 20 20 20 20 20  === syn;..      
2c120 20 20 7d 0a 09 20 20 20 20 20 20 20 20 66 75 6e    }..        fun
2c130 63 74 69 6f 6e 20 6d 61 74 63 68 47 72 6f 75 70  ction matchGroup
2c140 28 74 6f 6b 65 6e 2c 20 67 72 6f 75 70 4e 61 6d  (token, groupNam
2c150 65 2c 20 70 72 65 63 29 20 7b 0a 09 20 20 20 20  e, prec) {..    
2c160 20 20 20 20 20 20 20 20 76 61 72 20 72 65 74 20          var ret 
2c170 3d 20 66 61 6c 73 65 3b 0a 09 20 20 20 20 20 20  = false;..      
2c180 20 20 20 20 20 20 76 61 72 20 67 72 6f 75 70 20        var group 
2c190 3d 20 54 6f 6e 65 2e 45 78 70 72 2e 5f 45 78 70  = Tone.Expr._Exp
2c1a0 72 65 73 73 69 6f 6e 73 5b 67 72 6f 75 70 4e 61  ressions[groupNa
2c1b0 6d 65 5d 3b 0a 09 20 20 20 20 20 20 20 20 20 20  me];..          
2c1c0 20 20 69 66 20 28 21 69 73 55 6e 64 65 66 28 74    if (!isUndef(t
2c1d0 6f 6b 65 6e 29 29 20 7b 0a 09 20 20 20 20 20 20  oken)) {..      
2c1e0 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 76            for (v
2c1f0 61 72 20 6f 70 4e 61 6d 65 20 69 6e 20 67 72 6f  ar opName in gro
2c200 75 70 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  up) {..         
2c210 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 6f             var o
2c220 70 20 3d 20 67 72 6f 75 70 5b 6f 70 4e 61 6d 65  p = group[opName
2c230 5d 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
2c240 20 20 20 20 20 20 20 20 69 66 20 28 6f 70 2e 72          if (op.r
2c250 65 67 65 78 70 2e 74 65 73 74 28 74 6f 6b 65 6e  egexp.test(token
2c260 2e 76 61 6c 75 65 29 29 20 7b 0a 09 20 20 20 20  .value)) {..    
2c270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c280 20 20 20 20 69 66 20 28 21 69 73 55 6e 64 65 66      if (!isUndef
2c290 28 70 72 65 63 29 29 20 7b 0a 09 20 20 20 20 20  (prec)) {..     
2c2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2b0 20 20 20 20 20 20 20 69 66 20 28 6f 70 2e 70 72         if (op.pr
2c2c0 65 63 65 64 65 6e 63 65 20 3d 3d 3d 20 70 72 65  ecedence === pre
2c2d0 63 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  c) {..          
2c2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
2c300 65 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2c310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c320 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2c330 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
2c340 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e {..           
2c350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c360 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 09 20   return true;.. 
2c370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c380 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
2c390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
2c3a0 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c3b0 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2c3c0 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72  }..            r
2c3d0 65 74 75 72 6e 20 72 65 74 3b 0a 09 20 20 20 20  eturn ret;..    
2c3e0 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 66      }..        f
2c3f0 75 6e 63 74 69 6f 6e 20 70 61 72 73 65 45 78 70  unction parseExp
2c400 72 65 73 73 69 6f 6e 28 70 72 65 63 65 64 65 6e  ression(preceden
2c410 63 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ce) {..         
2c420 20 20 20 69 66 20 28 69 73 55 6e 64 65 66 28 70     if (isUndef(p
2c430 72 65 63 65 64 65 6e 63 65 29 29 20 7b 0a 09 20  recedence)) {.. 
2c440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
2c450 72 65 63 65 64 65 6e 63 65 20 3d 20 35 3b 0a 09  recedence = 5;..
2c460 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20              }.. 
2c470 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 65             var e
2c480 78 70 72 3b 0a 09 20 20 20 20 20 20 20 20 20 20  xpr;..          
2c490 20 20 69 66 20 28 70 72 65 63 65 64 65 6e 63 65    if (precedence
2c4a0 20 3c 20 30 29 20 7b 0a 09 20 20 20 20 20 20 20   < 0) {..       
2c4b0 20 20 20 20 20 20 20 20 20 65 78 70 72 20 3d 20           expr = 
2c4c0 70 61 72 73 65 55 6e 61 72 79 28 29 3b 0a 09 20  parseUnary();.. 
2c4d0 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
2c4e0 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e {..           
2c4f0 20 20 20 20 20 65 78 70 72 20 3d 20 70 61 72 73       expr = pars
2c500 65 45 78 70 72 65 73 73 69 6f 6e 28 70 72 65 63  eExpression(prec
2c510 65 64 65 6e 63 65 20 2d 20 31 29 3b 0a 09 20 20  edence - 1);..  
2c520 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20            }..   
2c530 20 20 20 20 20 20 20 20 20 76 61 72 20 74 6f 6b           var tok
2c540 65 6e 20 3d 20 6c 65 78 65 72 2e 70 65 65 6b 28  en = lexer.peek(
2c550 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2c560 77 68 69 6c 65 20 28 6d 61 74 63 68 47 72 6f 75  while (matchGrou
2c570 70 28 74 6f 6b 65 6e 2c 20 27 62 69 6e 61 72 79  p(token, 'binary
2c580 27 2c 20 70 72 65 63 65 64 65 6e 63 65 29 29 20  ', precedence)) 
2c590 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2c5a0 20 20 20 74 6f 6b 65 6e 20 3d 20 6c 65 78 65 72     token = lexer
2c5b0 2e 6e 65 78 74 28 29 3b 0a 09 20 20 20 20 20 20  .next();..      
2c5c0 20 20 20 20 20 20 20 20 20 20 65 78 70 72 20 3d            expr =
2c5d0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2c5e0 20 20 20 20 20 20 20 20 6f 70 65 72 61 74 6f 72          operator
2c5f0 3a 20 74 6f 6b 65 6e 2e 76 61 6c 75 65 2c 0a 09  : token.value,..
2c600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c610 20 20 20 20 6d 65 74 68 6f 64 3a 20 74 6f 6b 65      method: toke
2c620 6e 2e 6d 65 74 68 6f 64 2c 0a 09 20 20 20 20 20  n.method,..     
2c630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
2c640 72 67 73 3a 20 5b 0a 09 20 20 20 20 20 20 20 20  rgs: [..        
2c650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c660 65 78 70 72 2c 0a 09 20 20 20 20 20 20 20 20 20  expr,..         
2c670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
2c680 61 72 73 65 45 78 70 72 65 73 73 69 6f 6e 28 70  arseExpression(p
2c690 72 65 63 65 64 65 6e 63 65 20 2d 20 31 29 0a 09  recedence - 1)..
2c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c6b0 20 20 20 20 5d 0a 09 20 20 20 20 20 20 20 20 20      ]..         
2c6c0 20 20 20 20 20 20 20 7d 3b 0a 09 20 20 20 20 20         };..     
2c6d0 20 20 20 20 20 20 20 20 20 20 20 74 6f 6b 65 6e             token
2c6e0 20 3d 20 6c 65 78 65 72 2e 70 65 65 6b 28 29 3b   = lexer.peek();
2c6f0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ..            }.
2c700 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
2c710 75 72 6e 20 65 78 70 72 3b 0a 09 20 20 20 20 20  urn expr;..     
2c720 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 66 75     }..        fu
2c730 6e 63 74 69 6f 6e 20 70 61 72 73 65 55 6e 61 72  nction parseUnar
2c740 79 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  y() {..         
2c750 20 20 20 76 61 72 20 74 6f 6b 65 6e 2c 20 65 78     var token, ex
2c760 70 72 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  pr;..           
2c770 20 74 6f 6b 65 6e 20 3d 20 6c 65 78 65 72 2e 70   token = lexer.p
2c780 65 65 6b 28 29 3b 0a 09 20 20 20 20 20 20 20 20  eek();..        
2c790 20 20 20 20 69 66 20 28 6d 61 74 63 68 47 72 6f      if (matchGro
2c7a0 75 70 28 74 6f 6b 65 6e 2c 20 27 75 6e 61 72 79  up(token, 'unary
2c7b0 27 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ')) {..         
2c7c0 20 20 20 20 20 20 20 74 6f 6b 65 6e 20 3d 20 6c         token = l
2c7d0 65 78 65 72 2e 6e 65 78 74 28 29 3b 0a 09 20 20  exer.next();..  
2c7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78                ex
2c7f0 70 72 20 3d 20 70 61 72 73 65 55 6e 61 72 79 28  pr = parseUnary(
2c800 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2c810 20 20 20 20 72 65 74 75 72 6e 20 7b 0a 09 20 20      return {..  
2c820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c830 20 20 6f 70 65 72 61 74 6f 72 3a 20 74 6f 6b 65    operator: toke
2c840 6e 2e 76 61 6c 75 65 2c 0a 09 20 20 20 20 20 20  n.value,..      
2c850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65                me
2c860 74 68 6f 64 3a 20 74 6f 6b 65 6e 2e 6d 65 74 68  thod: token.meth
2c870 6f 64 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  od,..           
2c880 20 20 20 20 20 20 20 20 20 61 72 67 73 3a 20 5b           args: [
2c890 65 78 70 72 5d 0a 09 20 20 20 20 20 20 20 20 20  expr]..         
2c8a0 20 20 20 20 20 20 20 7d 3b 0a 09 20 20 20 20 20         };..     
2c8b0 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
2c8c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 70 61 72        return par
2c8d0 73 65 50 72 69 6d 61 72 79 28 29 3b 0a 09 20 20  sePrimary();..  
2c8e0 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
2c8f0 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 73 65 50   function parseP
2c900 72 69 6d 61 72 79 28 29 20 7b 0a 09 20 20 20 20  rimary() {..    
2c910 20 20 20 20 20 20 20 20 76 61 72 20 74 6f 6b 65          var toke
2c920 6e 2c 20 65 78 70 72 3b 0a 09 20 20 20 20 20 20  n, expr;..      
2c930 20 20 20 20 20 20 74 6f 6b 65 6e 20 3d 20 6c 65        token = le
2c940 78 65 72 2e 70 65 65 6b 28 29 3b 0a 09 20 20 20  xer.peek();..   
2c950 20 20 20 20 20 20 20 20 20 69 66 20 28 69 73 55           if (isU
2c960 6e 64 65 66 28 74 6f 6b 65 6e 29 29 20 7b 0a 09  ndef(token)) {..
2c970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c980 74 68 72 6f 77 20 6e 65 77 20 53 79 6e 74 61 78  throw new Syntax
2c990 45 72 72 6f 72 28 27 54 6f 6e 65 2e 45 78 70 72  Error('Tone.Expr
2c9a0 3a 20 55 6e 65 78 70 65 63 74 65 64 20 74 65 72  : Unexpected ter
2c9b0 6d 69 6e 61 74 69 6f 6e 20 6f 66 20 65 78 70 72  mination of expr
2c9c0 65 73 73 69 6f 6e 27 29 3b 0a 09 20 20 20 20 20  ession');..     
2c9d0 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
2c9e0 20 20 20 20 20 20 69 66 20 28 74 6f 6b 65 6e 2e        if (token.
2c9f0 74 79 70 65 20 3d 3d 3d 20 27 66 75 6e 63 27 29  type === 'func')
2ca00 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ca10 20 20 20 20 74 6f 6b 65 6e 20 3d 20 6c 65 78 65      token = lexe
2ca20 72 2e 6e 65 78 74 28 29 3b 0a 09 20 20 20 20 20  r.next();..     
2ca30 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2ca40 6e 20 70 61 72 73 65 46 75 6e 63 74 69 6f 6e 43  n parseFunctionC
2ca50 61 6c 6c 28 74 6f 6b 65 6e 29 3b 0a 09 20 20 20  all(token);..   
2ca60 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20           }..    
2ca70 20 20 20 20 20 20 20 20 69 66 20 28 74 6f 6b 65          if (toke
2ca80 6e 2e 74 79 70 65 20 3d 3d 3d 20 27 76 61 6c 75  n.type === 'valu
2ca90 65 27 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  e') {..         
2caa0 20 20 20 20 20 20 20 74 6f 6b 65 6e 20 3d 20 6c         token = l
2cab0 65 78 65 72 2e 6e 65 78 74 28 29 3b 0a 09 20 20  exer.next();..  
2cac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2cad0 74 75 72 6e 20 7b 0a 09 20 20 20 20 20 20 20 20  turn {..        
2cae0 20 20 20 20 20 20 20 20 20 20 20 20 6d 65 74 68              meth
2caf0 6f 64 3a 20 74 6f 6b 65 6e 2e 6d 65 74 68 6f 64  od: token.method
2cb00 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2cb10 20 20 20 20 20 20 20 61 72 67 73 3a 20 74 6f 6b         args: tok
2cb20 65 6e 2e 76 61 6c 75 65 0a 09 20 20 20 20 20 20  en.value..      
2cb30 20 20 20 20 20 20 20 20 20 20 7d 3b 0a 09 20 20            };..  
2cb40 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20            }..   
2cb50 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 61 74           if (mat
2cb60 63 68 53 79 6e 74 61 78 28 74 6f 6b 65 6e 2c 20  chSyntax(token, 
2cb70 27 28 27 29 29 20 7b 0a 09 20 20 20 20 20 20 20  '(')) {..       
2cb80 20 20 20 20 20 20 20 20 20 6c 65 78 65 72 2e 6e           lexer.n
2cb90 65 78 74 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ext();..        
2cba0 20 20 20 20 20 20 20 20 65 78 70 72 20 3d 20 70          expr = p
2cbb0 61 72 73 65 45 78 70 72 65 73 73 69 6f 6e 28 29  arseExpression()
2cbc0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2cbd0 20 20 20 74 6f 6b 65 6e 20 3d 20 6c 65 78 65 72     token = lexer
2cbe0 2e 6e 65 78 74 28 29 3b 0a 09 20 20 20 20 20 20  .next();..      
2cbf0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 6d            if (!m
2cc00 61 74 63 68 53 79 6e 74 61 78 28 74 6f 6b 65 6e  atchSyntax(token
2cc10 2c 20 27 29 27 29 29 20 7b 0a 09 20 20 20 20 20  , ')')) {..     
2cc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2cc30 68 72 6f 77 20 6e 65 77 20 53 79 6e 74 61 78 45  hrow new SyntaxE
2cc40 72 72 6f 72 28 27 45 78 70 65 63 74 65 64 20 29  rror('Expected )
2cc50 27 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ');..           
2cc60 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
2cc70 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 65          return e
2cc80 78 70 72 3b 0a 09 20 20 20 20 20 20 20 20 20 20  xpr;..          
2cc90 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20    }..           
2cca0 20 74 68 72 6f 77 20 6e 65 77 20 53 79 6e 74 61   throw new Synta
2ccb0 78 45 72 72 6f 72 28 27 54 6f 6e 65 2e 45 78 70  xError('Tone.Exp
2ccc0 72 3a 20 50 61 72 73 65 20 65 72 72 6f 72 2c 20  r: Parse error, 
2ccd0 63 61 6e 6e 6f 74 20 70 72 6f 63 65 73 73 20 74  cannot process t
2cce0 6f 6b 65 6e 20 27 20 2b 20 74 6f 6b 65 6e 2e 76  oken ' + token.v
2ccf0 61 6c 75 65 29 3b 0a 09 20 20 20 20 20 20 20 20  alue);..        
2cd00 7d 0a 09 20 20 20 20 20 20 20 20 66 75 6e 63 74  }..        funct
2cd10 69 6f 6e 20 70 61 72 73 65 46 75 6e 63 74 69 6f  ion parseFunctio
2cd20 6e 43 61 6c 6c 28 66 75 6e 63 29 20 7b 0a 09 20  nCall(func) {.. 
2cd30 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 74             var t
2cd40 6f 6b 65 6e 2c 20 61 72 67 73 20 3d 20 5b 5d 3b  oken, args = [];
2cd50 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 6f  ..            to
2cd60 6b 65 6e 20 3d 20 6c 65 78 65 72 2e 6e 65 78 74  ken = lexer.next
2cd70 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ();..           
2cd80 20 69 66 20 28 21 6d 61 74 63 68 53 79 6e 74 61   if (!matchSynta
2cd90 78 28 74 6f 6b 65 6e 2c 20 27 28 27 29 29 20 7b  x(token, '(')) {
2cda0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cdb0 20 20 74 68 72 6f 77 20 6e 65 77 20 53 79 6e 74    throw new Synt
2cdc0 61 78 45 72 72 6f 72 28 27 54 6f 6e 65 2e 45 78  axError('Tone.Ex
2cdd0 70 72 3a 20 45 78 70 65 63 74 65 64 20 28 20 69  pr: Expected ( i
2cde0 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c  n a function cal
2cdf0 6c 20 22 27 20 2b 20 66 75 6e 63 2e 76 61 6c 75  l "' + func.valu
2ce00 65 20 2b 20 27 22 27 29 3b 0a 09 20 20 20 20 20  e + '"');..     
2ce10 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
2ce20 20 20 20 20 20 20 74 6f 6b 65 6e 20 3d 20 6c 65        token = le
2ce30 78 65 72 2e 70 65 65 6b 28 29 3b 0a 09 20 20 20  xer.peek();..   
2ce40 20 20 20 20 20 20 20 20 20 69 66 20 28 21 6d 61           if (!ma
2ce50 74 63 68 53 79 6e 74 61 78 28 74 6f 6b 65 6e 2c  tchSyntax(token,
2ce60 20 27 29 27 29 29 20 7b 0a 09 20 20 20 20 20 20   ')')) {..      
2ce70 20 20 20 20 20 20 20 20 20 20 61 72 67 73 20 3d            args =
2ce80 20 70 61 72 73 65 41 72 67 75 6d 65 6e 74 4c 69   parseArgumentLi
2ce90 73 74 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20  st();..         
2cea0 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20     }..          
2ceb0 20 20 74 6f 6b 65 6e 20 3d 20 6c 65 78 65 72 2e    token = lexer.
2cec0 6e 65 78 74 28 29 3b 0a 09 20 20 20 20 20 20 20  next();..       
2ced0 20 20 20 20 20 69 66 20 28 21 6d 61 74 63 68 53       if (!matchS
2cee0 79 6e 74 61 78 28 74 6f 6b 65 6e 2c 20 27 29 27  yntax(token, ')'
2cef0 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  )) {..          
2cf00 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
2cf10 53 79 6e 74 61 78 45 72 72 6f 72 28 27 54 6f 6e  SyntaxError('Ton
2cf20 65 2e 45 78 70 72 3a 20 45 78 70 65 63 74 65 64  e.Expr: Expected
2cf30 20 29 20 69 6e 20 61 20 66 75 6e 63 74 69 6f 6e   ) in a function
2cf40 20 63 61 6c 6c 20 22 27 20 2b 20 66 75 6e 63 2e   call "' + func.
2cf50 76 61 6c 75 65 20 2b 20 27 22 27 29 3b 0a 09 20  value + '"');.. 
2cf60 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20             }..  
2cf70 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2cf80 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2cf90 20 20 20 20 6d 65 74 68 6f 64 3a 20 66 75 6e 63      method: func
2cfa0 2e 6d 65 74 68 6f 64 2c 0a 09 20 20 20 20 20 20  .method,..      
2cfb0 20 20 20 20 20 20 20 20 20 20 61 72 67 73 3a 20            args: 
2cfc0 61 72 67 73 2c 0a 09 20 20 20 20 20 20 20 20 20  args,..         
2cfd0 20 20 20 20 20 20 20 6e 61 6d 65 3a 20 6e 61 6d         name: nam
2cfe0 65 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  e..            }
2cff0 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20  ;..        }..  
2d000 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 70        function p
2d010 61 72 73 65 41 72 67 75 6d 65 6e 74 4c 69 73 74  arseArgumentList
2d020 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  () {..          
2d030 20 20 76 61 72 20 74 6f 6b 65 6e 2c 20 65 78 70    var token, exp
2d040 72 2c 20 61 72 67 73 20 3d 20 5b 5d 3b 0a 09 20  r, args = [];.. 
2d050 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65             while
2d060 20 28 74 72 75 65 29 20 7b 0a 09 20 20 20 20 20   (true) {..     
2d070 20 20 20 20 20 20 20 20 20 20 20 65 78 70 72 20             expr 
2d080 3d 20 70 61 72 73 65 45 78 70 72 65 73 73 69 6f  = parseExpressio
2d090 6e 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20  n();..          
2d0a0 20 20 20 20 20 20 69 66 20 28 69 73 55 6e 64 65        if (isUnde
2d0b0 66 28 65 78 70 72 29 29 20 7b 0a 09 20 20 20 20  f(expr)) {..    
2d0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0d0 2f 2f 20 54 4f 44 4f 20 6d 61 79 62 65 20 74 68  // TODO maybe th
2d0e0 72 6f 77 20 65 78 63 65 70 74 69 6f 6e 3f 0a 09  row exception?..
2d0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d100 20 20 20 20 62 72 65 61 6b 3b 0a 09 20 20 20 20      break;..    
2d110 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20              }.. 
2d120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
2d130 72 67 73 2e 70 75 73 68 28 65 78 70 72 29 3b 0a  rgs.push(expr);.
2d140 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d150 20 74 6f 6b 65 6e 20 3d 20 6c 65 78 65 72 2e 70   token = lexer.p
2d160 65 65 6b 28 29 3b 0a 09 20 20 20 20 20 20 20 20  eek();..        
2d170 20 20 20 20 20 20 20 20 69 66 20 28 21 6d 61 74          if (!mat
2d180 63 68 53 79 6e 74 61 78 28 74 6f 6b 65 6e 2c 20  chSyntax(token, 
2d190 27 2c 27 29 29 20 7b 0a 09 20 20 20 20 20 20 20  ',')) {..       
2d1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
2d1b0 61 6b 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ak;..           
2d1c0 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
2d1d0 20 20 20 20 20 20 20 20 6c 65 78 65 72 2e 6e 65          lexer.ne
2d1e0 78 74 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20  xt();..         
2d1f0 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20     }..          
2d200 20 20 72 65 74 75 72 6e 20 61 72 67 73 3b 0a 09    return args;..
2d210 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
2d220 20 20 20 72 65 74 75 72 6e 20 70 61 72 73 65 45     return parseE
2d230 78 70 72 65 73 73 69 6f 6e 28 29 3b 0a 09 20 20  xpression();..  
2d240 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    };..    /**...
2d250 20 2a 20 20 72 65 63 75 72 73 69 76 65 6c 79 20   *  recursively 
2d260 65 76 61 6c 75 61 74 65 20 74 68 65 20 65 78 70  evaluate the exp
2d270 72 65 73 73 69 6f 6e 20 74 72 65 65 0a 09 09 20  ression tree... 
2d280 2a 20 20 40 70 61 72 61 6d 20 20 20 7b 4f 62 6a  *  @param   {Obj
2d290 65 63 74 7d 20 74 72 65 65 20 0a 09 09 20 2a 20  ect} tree ... * 
2d2a0 20 40 72 65 74 75 72 6e 20 20 7b 41 75 64 69 6f   @return  {Audio
2d2b0 4e 6f 64 65 7d 20 20 20 20 20 20 74 68 65 20 72  Node}      the r
2d2c0 65 73 75 6c 74 69 6e 67 20 61 75 64 69 6f 20 6e  esulting audio n
2d2d0 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 65 78 70  ode from the exp
2d2e0 72 65 73 73 69 6f 6e 0a 09 09 20 2a 20 20 40 70  ression... *  @p
2d2f0 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20  rivate... */..  
2d300 20 20 54 6f 6e 65 2e 45 78 70 72 2e 70 72 6f 74    Tone.Expr.prot
2d310 6f 74 79 70 65 2e 5f 65 76 61 6c 20 3d 20 66 75  otype._eval = fu
2d320 6e 63 74 69 6f 6e 20 28 74 72 65 65 29 20 7b 0a  nction (tree) {.
2d330 09 20 20 20 20 20 20 20 20 69 66 20 28 21 74 68  .        if (!th
2d340 69 73 2e 69 73 55 6e 64 65 66 28 74 72 65 65 29  is.isUndef(tree)
2d350 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
2d360 20 76 61 72 20 6e 6f 64 65 20 3d 20 74 72 65 65   var node = tree
2d370 2e 6d 65 74 68 6f 64 28 74 72 65 65 2e 61 72 67  .method(tree.arg
2d380 73 2c 20 74 68 69 73 29 3b 0a 09 20 20 20 20 20  s, this);..     
2d390 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6e 6f 64         this._nod
2d3a0 65 73 2e 70 75 73 68 28 6e 6f 64 65 29 3b 0a 09  es.push(node);..
2d3b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2d3c0 72 6e 20 6e 6f 64 65 3b 0a 09 20 20 20 20 20 20  rn node;..      
2d3d0 20 20 7d 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20    }..    };..   
2d3e0 20 2f 2a 2a 0a 09 09 20 2a 20 20 64 69 73 70 6f   /**... *  dispo
2d3f0 73 65 20 61 6c 6c 20 74 68 65 20 6e 6f 64 65 73  se all the nodes
2d400 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
2d410 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
2d420 45 78 70 72 2e 70 72 6f 74 6f 74 79 70 65 2e 5f  Expr.prototype._
2d430 64 69 73 70 6f 73 65 4e 6f 64 65 73 20 3d 20 66  disposeNodes = f
2d440 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
2d450 20 20 20 20 20 20 66 6f 72 20 28 76 61 72 20 69        for (var i
2d460 20 3d 20 30 3b 20 69 20 3c 20 74 68 69 73 2e 5f   = 0; i < this._
2d470 6e 6f 64 65 73 2e 6c 65 6e 67 74 68 3b 20 69 2b  nodes.length; i+
2d480 2b 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  +) {..          
2d490 20 20 76 61 72 20 6e 6f 64 65 20 3d 20 74 68 69    var node = thi
2d4a0 73 2e 5f 6e 6f 64 65 73 5b 69 5d 3b 0a 09 20 20  s._nodes[i];..  
2d4b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 68            if (th
2d4c0 69 73 2e 69 73 46 75 6e 63 74 69 6f 6e 28 6e 6f  is.isFunction(no
2d4d0 64 65 2e 64 69 73 70 6f 73 65 29 29 20 7b 0a 09  de.dispose)) {..
2d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d4f0 6e 6f 64 65 2e 64 69 73 70 6f 73 65 28 29 3b 0a  node.dispose();.
2d500 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
2d510 6c 73 65 20 69 66 20 28 74 68 69 73 2e 69 73 46  lse if (this.isF
2d520 75 6e 63 74 69 6f 6e 28 6e 6f 64 65 2e 64 69 73  unction(node.dis
2d530 63 6f 6e 6e 65 63 74 29 29 20 7b 0a 09 20 20 20  connect)) {..   
2d540 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 64               nod
2d550 65 2e 64 69 73 63 6f 6e 6e 65 63 74 28 29 3b 0a  e.disconnect();.
2d560 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09  .            }..
2d570 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 64 65              node
2d580 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
2d590 20 20 20 20 20 20 74 68 69 73 2e 5f 6e 6f 64 65        this._node
2d5a0 73 5b 69 5d 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20  s[i] = null;..  
2d5b0 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
2d5c0 20 74 68 69 73 2e 5f 6e 6f 64 65 73 20 3d 20 6e   this._nodes = n
2d5d0 75 6c 6c 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  ull;..    };..  
2d5e0 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 63 6c 65 61    /**... *  clea
2d5f0 6e 20 75 70 0a 09 09 20 2a 2f 0a 09 20 20 20 20  n up... */..    
2d600 54 6f 6e 65 2e 45 78 70 72 2e 70 72 6f 74 6f 74  Tone.Expr.protot
2d610 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75  ype.dispose = fu
2d620 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
2d630 20 20 20 20 20 54 6f 6e 65 2e 70 72 6f 74 6f 74       Tone.protot
2d640 79 70 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c  ype.dispose.call
2d650 28 74 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20  (this);..       
2d660 20 74 68 69 73 2e 5f 64 69 73 70 6f 73 65 4e 6f   this._disposeNo
2d670 64 65 73 28 29 3b 0a 09 20 20 20 20 7d 3b 0a 09  des();..    };..
2d680 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e      return Tone.
2d690 45 78 70 72 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75  Expr;..});..Modu
2d6a0 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e  le(function (Ton
2d6b0 65 29 20 7b 0a 09 20 20 20 20 0a 09 20 20 20 20  e) {..    ..    
2d6c0 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61 73 73  /**... *  @class
2d6d0 20 43 6f 6e 76 65 72 74 20 61 6e 20 69 6e 63 6f   Convert an inco
2d6e0 6d 69 6e 67 20 73 69 67 6e 61 6c 20 62 65 74 77  ming signal betw
2d6f0 65 65 6e 20 30 2c 20 31 20 74 6f 20 61 6e 20 65  een 0, 1 to an e
2d700 71 75 61 6c 20 70 6f 77 65 72 20 67 61 69 6e 20  qual power gain 
2d710 73 63 61 6c 65 2e 0a 09 09 20 2a 0a 09 09 20 2a  scale.... *... *
2d720 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65    @extends {Tone
2d730 2e 53 69 67 6e 61 6c 42 61 73 65 7d 0a 09 09 20  .SignalBase}... 
2d740 2a 20 20 40 63 6f 6e 73 74 72 75 63 74 6f 72 0a  *  @constructor.
2d750 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09  .. *  @example..
2d760 09 20 2a 20 76 61 72 20 65 71 50 6f 77 47 61 69  . * var eqPowGai
2d770 6e 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 45 71 75  n = new Tone.Equ
2d780 61 6c 50 6f 77 65 72 47 61 69 6e 28 29 3b 0a 09  alPowerGain();..
2d790 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 45  . */..    Tone.E
2d7a0 71 75 61 6c 50 6f 77 65 72 47 61 69 6e 20 3d 20  qualPowerGain = 
2d7b0 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
2d7c0 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
2d7d0 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 57 61    @type {Tone.Wa
2d7e0 76 65 53 68 61 70 65 72 7d 0a 09 09 09 20 2a 20  veShaper}.... * 
2d7f0 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f   @private.... */
2d800 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
2d810 65 71 50 6f 77 65 72 20 3d 20 74 68 69 73 2e 69  eqPower = this.i
2d820 6e 70 75 74 20 3d 20 74 68 69 73 2e 6f 75 74 70  nput = this.outp
2d830 75 74 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 57 61  ut = new Tone.Wa
2d840 76 65 53 68 61 70 65 72 28 66 75 6e 63 74 69 6f  veShaper(functio
2d850 6e 20 28 76 61 6c 29 20 7b 0a 09 20 20 20 20 20  n (val) {..     
2d860 20 20 20 20 20 20 20 69 66 20 28 4d 61 74 68 2e         if (Math.
2d870 61 62 73 28 76 61 6c 29 20 3c 20 30 2e 30 30 31  abs(val) < 0.001
2d880 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
2d890 20 20 20 20 20 2f 2f 73 68 6f 75 6c 64 20 6f 75       //should ou
2d8a0 74 70 75 74 20 30 20 77 68 65 6e 20 69 6e 70 75  tput 0 when inpu
2d8b0 74 20 69 73 20 30 0a 09 20 20 20 20 20 20 20 20  t is 0..        
2d8c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30          return 0
2d8d0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2d8e0 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20   else {..       
2d8f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2d900 74 68 69 73 2e 65 71 75 61 6c 50 6f 77 65 72 53  this.equalPowerS
2d910 63 61 6c 65 28 76 61 6c 29 3b 0a 09 20 20 20 20  cale(val);..    
2d920 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
2d930 20 20 20 7d 2e 62 69 6e 64 28 74 68 69 73 29 2c     }.bind(this),
2d940 20 34 30 39 36 29 3b 0a 09 20 20 20 20 7d 3b 0a   4096);..    };.
2d950 09 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64  .    Tone.extend
2d960 28 54 6f 6e 65 2e 45 71 75 61 6c 50 6f 77 65 72  (Tone.EqualPower
2d970 47 61 69 6e 2c 20 54 6f 6e 65 2e 53 69 67 6e 61  Gain, Tone.Signa
2d980 6c 42 61 73 65 29 3b 0a 09 20 20 20 20 2f 2a 2a  lBase);..    /**
2d990 0a 09 09 20 2a 20 20 63 6c 65 61 6e 20 75 70 0a  ... *  clean up.
2d9a0 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b  .. *  @returns {
2d9b0 54 6f 6e 65 2e 45 71 75 61 6c 50 6f 77 65 72 47  Tone.EqualPowerG
2d9c0 61 69 6e 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a  ain} this... */.
2d9d0 09 20 20 20 20 54 6f 6e 65 2e 45 71 75 61 6c 50  .    Tone.EqualP
2d9e0 6f 77 65 72 47 61 69 6e 2e 70 72 6f 74 6f 74 79  owerGain.prototy
2d9f0 70 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75 6e  pe.dispose = fun
2da00 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
2da10 20 20 20 20 54 6f 6e 65 2e 70 72 6f 74 6f 74 79      Tone.prototy
2da20 70 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28  pe.dispose.call(
2da30 74 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20 20  this);..        
2da40 74 68 69 73 2e 5f 65 71 50 6f 77 65 72 2e 64 69  this._eqPower.di
2da50 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
2da60 20 20 74 68 69 73 2e 5f 65 71 50 6f 77 65 72 20    this._eqPower 
2da70 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
2da80 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20   return this;.. 
2da90 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74 75 72     };..    retur
2daa0 6e 20 54 6f 6e 65 2e 45 71 75 61 6c 50 6f 77 65  n Tone.EqualPowe
2dab0 72 47 61 69 6e 3b 0a 09 7d 29 3b 0a 09 4d 6f 64  rGain;..});..Mod
2dac0 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f  ule(function (To
2dad0 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09 20 20 20  ne) {..    ..   
2dae0 20 2f 2a 2a 0a 09 09 20 2a 20 40 63 6c 61 73 73   /**... * @class
2daf0 20 20 54 6f 6e 65 2e 43 72 6f 73 73 66 61 64 65    Tone.Crossfade
2db00 20 70 72 6f 76 69 64 65 73 20 65 71 75 61 6c 20   provides equal 
2db10 70 6f 77 65 72 20 66 61 64 69 6e 67 20 62 65 74  power fading bet
2db20 77 65 65 6e 20 74 77 6f 20 69 6e 70 75 74 73 2e  ween two inputs.
2db30 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 4d   ... *         M
2db40 6f 72 65 20 6f 6e 20 63 72 6f 73 73 66 61 64 69  ore on crossfadi
2db50 6e 67 20 74 65 63 68 6e 69 71 75 65 20 5b 68 65  ng technique [he
2db60 72 65 5d 28 68 74 74 70 73 3a 2f 2f 65 6e 2e 77  re](https://en.w
2db70 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b  ikipedia.org/wik
2db80 69 2f 46 61 64 65 5f 28 61 75 64 69 6f 5f 65 6e  i/Fade_(audio_en
2db90 67 69 6e 65 65 72 69 6e 67 29 23 43 72 6f 73 73  gineering)#Cross
2dba0 66 61 64 69 6e 67 29 2e 0a 09 09 20 2a 0a 09 09  fading).... *...
2dbb0 20 2a 20 40 63 6f 6e 73 74 72 75 63 74 6f 72 0a   * @constructor.
2dbc0 09 09 20 2a 20 40 65 78 74 65 6e 64 73 20 7b 54  .. * @extends {T
2dbd0 6f 6e 65 7d 0a 09 09 20 2a 20 40 70 61 72 61 6d  one}... * @param
2dbe0 20 7b 4e 6f 72 6d 61 6c 52 61 6e 67 65 7d 20 5b   {NormalRange} [
2dbf0 69 6e 69 74 69 61 6c 46 61 64 65 3d 30 2e 35 5d  initialFade=0.5]
2dc00 0a 09 09 20 2a 20 40 65 78 61 6d 70 6c 65 0a 09  ... * @example..
2dc10 09 20 2a 20 76 61 72 20 63 72 6f 73 73 46 61 64  . * var crossFad
2dc20 65 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 43 72 6f  e = new Tone.Cro
2dc30 73 73 46 61 64 65 28 30 2e 35 29 3b 0a 09 09 20  ssFade(0.5);... 
2dc40 2a 20 2f 2f 63 6f 6e 6e 65 63 74 20 65 66 66 65  * //connect effe
2dc50 63 74 20 41 20 74 6f 20 63 72 6f 73 73 66 61 64  ct A to crossfad
2dc60 65 20 66 72 6f 6d 0a 09 09 20 2a 20 2f 2f 65 66  e from... * //ef
2dc70 66 65 63 74 20 6f 75 74 70 75 74 20 30 20 74 6f  fect output 0 to
2dc80 20 63 72 6f 73 73 66 61 64 65 20 69 6e 70 75 74   crossfade input
2dc90 20 30 0a 09 09 20 2a 20 65 66 66 65 63 74 41 2e   0... * effectA.
2dca0 63 6f 6e 6e 65 63 74 28 63 72 6f 73 73 46 61 64  connect(crossFad
2dcb0 65 2c 20 30 2c 20 30 29 3b 0a 09 09 20 2a 20 2f  e, 0, 0);... * /
2dcc0 2f 63 6f 6e 6e 65 63 74 20 65 66 66 65 63 74 20  /connect effect 
2dcd0 42 20 74 6f 20 63 72 6f 73 73 66 61 64 65 20 66  B to crossfade f
2dce0 72 6f 6d 0a 09 09 20 2a 20 2f 2f 65 66 66 65 63  rom... * //effec
2dcf0 74 20 6f 75 74 70 75 74 20 30 20 74 6f 20 63 72  t output 0 to cr
2dd00 6f 73 73 66 61 64 65 20 69 6e 70 75 74 20 31 0a  ossfade input 1.
2dd10 09 09 20 2a 20 65 66 66 65 63 74 42 2e 63 6f 6e  .. * effectB.con
2dd20 6e 65 63 74 28 63 72 6f 73 73 46 61 64 65 2c 20  nect(crossFade, 
2dd30 30 2c 20 31 29 3b 0a 09 09 20 2a 20 63 72 6f 73  0, 1);... * cros
2dd40 73 46 61 64 65 2e 66 61 64 65 2e 76 61 6c 75 65  sFade.fade.value
2dd50 20 3d 20 30 3b 0a 09 09 20 2a 20 2f 2f 20 5e 20   = 0;... * // ^ 
2dd60 6f 6e 6c 79 20 65 66 66 65 63 74 41 20 69 73 20  only effectA is 
2dd70 6f 75 74 70 75 74 0a 09 09 20 2a 20 63 72 6f 73  output... * cros
2dd80 73 46 61 64 65 2e 66 61 64 65 2e 76 61 6c 75 65  sFade.fade.value
2dd90 20 3d 20 31 3b 0a 09 09 20 2a 20 2f 2f 20 5e 20   = 1;... * // ^ 
2dda0 6f 6e 6c 79 20 65 66 66 65 63 74 42 20 69 73 20  only effectB is 
2ddb0 6f 75 74 70 75 74 0a 09 09 20 2a 20 63 72 6f 73  output... * cros
2ddc0 73 46 61 64 65 2e 66 61 64 65 2e 76 61 6c 75 65  sFade.fade.value
2ddd0 20 3d 20 30 2e 35 3b 0a 09 09 20 2a 20 2f 2f 20   = 0.5;... * // 
2dde0 5e 20 74 68 65 20 74 77 6f 20 73 69 67 6e 61 6c  ^ the two signal
2ddf0 73 20 61 72 65 20 6d 69 78 65 64 20 65 71 75 61  s are mixed equa
2de00 6c 6c 79 2e 20 0a 09 09 20 2a 2f 0a 09 20 20 20  lly. ... */..   
2de10 20 54 6f 6e 65 2e 43 72 6f 73 73 46 61 64 65 20   Tone.CrossFade 
2de20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 69 6e 69 74  = function (init
2de30 69 61 6c 46 61 64 65 29 20 7b 0a 09 20 20 20 20  ialFade) {..    
2de40 20 20 20 20 74 68 69 73 2e 63 72 65 61 74 65 49      this.createI
2de50 6e 73 4f 75 74 73 28 32 2c 20 31 29 3b 0a 09 20  nsOuts(2, 1);.. 
2de60 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
2de70 20 20 41 6c 69 61 73 20 66 6f 72 20 3c 63 6f 64    Alias for <cod
2de80 65 3e 69 6e 70 75 74 5b 30 5d 3c 2f 63 6f 64 65  e>input[0]</code
2de90 3e 2e 20 0a 09 09 09 20 2a 20 20 40 74 79 70 65  >. .... *  @type
2dea0 20 7b 54 6f 6e 65 2e 47 61 69 6e 7d 0a 09 09 09   {Tone.Gain}....
2deb0 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
2dec0 73 2e 61 20 3d 20 74 68 69 73 2e 69 6e 70 75 74  s.a = this.input
2ded0 5b 30 5d 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 47  [0] = new Tone.G
2dee0 61 69 6e 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ain();..        
2def0 2f 2a 2a 0a 09 09 09 20 2a 20 20 41 6c 69 61 73  /**.... *  Alias
2df00 20 66 6f 72 20 3c 63 6f 64 65 3e 69 6e 70 75 74   for <code>input
2df10 5b 31 5d 3c 2f 63 6f 64 65 3e 2e 20 0a 09 09 09  [1]</code>. ....
2df20 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e   *  @type {Tone.
2df30 47 61 69 6e 7d 0a 09 09 09 20 2a 2f 0a 09 20 20  Gain}.... */..  
2df40 20 20 20 20 20 20 74 68 69 73 2e 62 20 3d 20 74        this.b = t
2df50 68 69 73 2e 69 6e 70 75 74 5b 31 5d 20 3d 20 6e  his.input[1] = n
2df60 65 77 20 54 6f 6e 65 2e 47 61 69 6e 28 29 3b 0a  ew Tone.Gain();.
2df70 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
2df80 20 2a 20 09 54 68 65 20 6d 69 78 20 62 65 74 77   * .The mix betw
2df90 65 65 6e 20 74 68 65 20 74 77 6f 20 69 6e 70 75  een the two inpu
2dfa0 74 73 2e 20 41 20 66 61 64 65 20 76 61 6c 75 65  ts. A fade value
2dfb0 20 6f 66 20 30 0a 09 09 09 20 2a 20 09 77 69 6c   of 0.... * .wil
2dfc0 6c 20 6f 75 74 70 75 74 20 31 30 30 25 20 3c 63  l output 100% <c
2dfd0 6f 64 65 3e 69 6e 70 75 74 5b 30 5d 3c 2f 63 6f  ode>input[0]</co
2dfe0 64 65 3e 20 61 6e 64 20 0a 09 09 09 20 2a 20 09  de> and .... * .
2dff0 61 20 76 61 6c 75 65 20 6f 66 20 31 20 77 69 6c  a value of 1 wil
2e000 6c 20 6f 75 74 70 75 74 20 31 30 30 25 20 3c 63  l output 100% <c
2e010 6f 64 65 3e 69 6e 70 75 74 5b 31 5d 3c 2f 63 6f  ode>input[1]</co
2e020 64 65 3e 2e 20 0a 09 09 09 20 2a 20 20 40 74 79  de>. .... *  @ty
2e030 70 65 20 7b 4e 6f 72 6d 61 6c 52 61 6e 67 65 7d  pe {NormalRange}
2e040 0a 09 09 09 20 2a 20 20 40 73 69 67 6e 61 6c 0a  .... *  @signal.
2e050 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
2e060 74 68 69 73 2e 66 61 64 65 20 3d 20 6e 65 77 20  this.fade = new 
2e070 54 6f 6e 65 2e 53 69 67 6e 61 6c 28 74 68 69 73  Tone.Signal(this
2e080 2e 64 65 66 61 75 6c 74 41 72 67 28 69 6e 69 74  .defaultArg(init
2e090 69 61 6c 46 61 64 65 2c 20 30 2e 35 29 2c 20 54  ialFade, 0.5), T
2e0a0 6f 6e 65 2e 54 79 70 65 2e 4e 6f 72 6d 61 6c 52  one.Type.NormalR
2e0b0 61 6e 67 65 29 3b 0a 09 20 20 20 20 20 20 20 20  ange);..        
2e0c0 2f 2a 2a 0a 09 09 09 20 2a 20 20 65 71 75 61 6c  /**.... *  equal
2e0d0 20 70 6f 77 65 72 20 67 61 69 6e 20 63 72 6f 73   power gain cros
2e0e0 73 20 66 61 64 65 0a 09 09 09 20 2a 20 20 40 70  s fade.... *  @p
2e0f0 72 69 76 61 74 65 0a 09 09 09 20 2a 20 20 40 74  rivate.... *  @t
2e100 79 70 65 20 7b 54 6f 6e 65 2e 45 71 75 61 6c 50  ype {Tone.EqualP
2e110 6f 77 65 72 47 61 69 6e 7d 0a 09 09 09 20 2a 2f  owerGain}.... */
2e120 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
2e130 65 71 75 61 6c 50 6f 77 65 72 41 20 3d 20 6e 65  equalPowerA = ne
2e140 77 20 54 6f 6e 65 2e 45 71 75 61 6c 50 6f 77 65  w Tone.EqualPowe
2e150 72 47 61 69 6e 28 29 3b 0a 09 20 20 20 20 20 20  rGain();..      
2e160 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 65 71 75    /**.... *  equ
2e170 61 6c 20 70 6f 77 65 72 20 67 61 69 6e 20 63 72  al power gain cr
2e180 6f 73 73 20 66 61 64 65 0a 09 09 09 20 2a 20 20  oss fade.... *  
2e190 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 20 20  @private.... *  
2e1a0 40 74 79 70 65 20 7b 54 6f 6e 65 2e 45 71 75 61  @type {Tone.Equa
2e1b0 6c 50 6f 77 65 72 47 61 69 6e 7d 0a 09 09 09 20  lPowerGain}.... 
2e1c0 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
2e1d0 2e 5f 65 71 75 61 6c 50 6f 77 65 72 42 20 3d 20  ._equalPowerB = 
2e1e0 6e 65 77 20 54 6f 6e 65 2e 45 71 75 61 6c 50 6f  new Tone.EqualPo
2e1f0 77 65 72 47 61 69 6e 28 29 3b 0a 09 20 20 20 20  werGain();..    
2e200 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 69      /**.... *  i
2e210 6e 76 65 72 74 20 74 68 65 20 69 6e 63 6f 6d 69  nvert the incomi
2e220 6e 67 20 73 69 67 6e 61 6c 0a 09 09 09 20 2a 20  ng signal.... * 
2e230 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 20   @private.... * 
2e240 20 40 74 79 70 65 20 7b 54 6f 6e 65 7d 0a 09 09   @type {Tone}...
2e250 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
2e260 69 73 2e 5f 69 6e 76 65 72 74 20 3d 20 6e 65 77  is._invert = new
2e270 20 54 6f 6e 65 2e 45 78 70 72 28 27 31 20 2d 20   Tone.Expr('1 - 
2e280 24 30 27 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  $0');..        /
2e290 2f 63 6f 6e 6e 65 63 74 69 6f 6e 73 0a 09 20 20  /connections..  
2e2a0 20 20 20 20 20 20 74 68 69 73 2e 61 2e 63 6f 6e        this.a.con
2e2b0 6e 65 63 74 28 74 68 69 73 2e 6f 75 74 70 75 74  nect(this.output
2e2c0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
2e2d0 2e 62 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e  .b.connect(this.
2e2e0 6f 75 74 70 75 74 29 3b 0a 09 20 20 20 20 20 20  output);..      
2e2f0 20 20 74 68 69 73 2e 66 61 64 65 2e 63 68 61 69    this.fade.chai
2e300 6e 28 74 68 69 73 2e 5f 65 71 75 61 6c 50 6f 77  n(this._equalPow
2e310 65 72 42 2c 20 74 68 69 73 2e 62 2e 67 61 69 6e  erB, this.b.gain
2e320 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
2e330 2e 66 61 64 65 2e 63 68 61 69 6e 28 74 68 69 73  .fade.chain(this
2e340 2e 5f 69 6e 76 65 72 74 2c 20 74 68 69 73 2e 5f  ._invert, this._
2e350 65 71 75 61 6c 50 6f 77 65 72 41 2c 20 74 68 69  equalPowerA, thi
2e360 73 2e 61 2e 67 61 69 6e 29 3b 0a 09 20 20 20 20  s.a.gain);..    
2e370 20 20 20 20 74 68 69 73 2e 5f 72 65 61 64 4f 6e      this._readOn
2e380 6c 79 28 27 66 61 64 65 27 29 3b 0a 09 20 20 20  ly('fade');..   
2e390 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65 2e 65 78   };..    Tone.ex
2e3a0 74 65 6e 64 28 54 6f 6e 65 2e 43 72 6f 73 73 46  tend(Tone.CrossF
2e3b0 61 64 65 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09  ade);..    /**..
2e3c0 09 20 2a 20 20 63 6c 65 61 6e 20 75 70 0a 09 09  . *  clean up...
2e3d0 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f   *  @returns {To
2e3e0 6e 65 2e 43 72 6f 73 73 46 61 64 65 7d 20 74 68  ne.CrossFade} th
2e3f0 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  is... */..    To
2e400 6e 65 2e 43 72 6f 73 73 46 61 64 65 2e 70 72 6f  ne.CrossFade.pro
2e410 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d  totype.dispose =
2e420 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
2e430 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 70 72 6f          Tone.pro
2e440 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 2e 63  totype.dispose.c
2e450 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20 20 20  all(this);..    
2e460 20 20 20 20 74 68 69 73 2e 5f 77 72 69 74 61 62      this._writab
2e470 6c 65 28 27 66 61 64 65 27 29 3b 0a 09 20 20 20  le('fade');..   
2e480 20 20 20 20 20 74 68 69 73 2e 5f 65 71 75 61 6c       this._equal
2e490 50 6f 77 65 72 41 2e 64 69 73 70 6f 73 65 28 29  PowerA.dispose()
2e4a0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
2e4b0 5f 65 71 75 61 6c 50 6f 77 65 72 41 20 3d 20 6e  _equalPowerA = n
2e4c0 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ull;..        th
2e4d0 69 73 2e 5f 65 71 75 61 6c 50 6f 77 65 72 42 2e  is._equalPowerB.
2e4e0 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20  dispose();..    
2e4f0 20 20 20 20 74 68 69 73 2e 5f 65 71 75 61 6c 50      this._equalP
2e500 6f 77 65 72 42 20 3d 20 6e 75 6c 6c 3b 0a 09 20  owerB = null;.. 
2e510 20 20 20 20 20 20 20 74 68 69 73 2e 66 61 64 65         this.fade
2e520 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20  .dispose();..   
2e530 20 20 20 20 20 74 68 69 73 2e 66 61 64 65 20 3d       this.fade =
2e540 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
2e550 74 68 69 73 2e 5f 69 6e 76 65 72 74 2e 64 69 73  this._invert.dis
2e560 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20  pose();..       
2e570 20 74 68 69 73 2e 5f 69 6e 76 65 72 74 20 3d 20   this._invert = 
2e580 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74  null;..        t
2e590 68 69 73 2e 61 2e 64 69 73 70 6f 73 65 28 29 3b  his.a.dispose();
2e5a0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 61  ..        this.a
2e5b0 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
2e5c0 20 20 74 68 69 73 2e 62 2e 64 69 73 70 6f 73 65    this.b.dispose
2e5d0 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ();..        thi
2e5e0 73 2e 62 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  s.b = null;..   
2e5f0 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
2e600 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 72  ;..    };..    r
2e610 65 74 75 72 6e 20 54 6f 6e 65 2e 43 72 6f 73 73  eturn Tone.Cross
2e620 46 61 64 65 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75  Fade;..});..Modu
2e630 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e  le(function (Ton
2e640 65 29 20 7b 0a 09 20 20 20 20 0a 09 20 20 20 20  e) {..    ..    
2e650 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61 73 73  /**... *  @class
2e660 20 20 54 6f 6e 65 2e 46 69 6c 74 65 72 20 69 73    Tone.Filter is
2e670 20 61 20 66 69 6c 74 65 72 20 77 68 69 63 68 20   a filter which 
2e680 61 6c 6c 6f 77 73 20 66 6f 72 20 61 6c 6c 20 6f  allows for all o
2e690 66 20 74 68 65 20 73 61 6d 65 20 6e 61 74 69 76  f the same nativ
2e6a0 65 20 6d 65 74 68 6f 64 73 0a 09 09 20 2a 20 20  e methods... *  
2e6b0 20 20 20 20 20 20 20 20 61 73 20 74 68 65 20 5b          as the [
2e6c0 42 69 71 75 61 64 46 69 6c 74 65 72 4e 6f 64 65  BiquadFilterNode
2e6d0 5d 28 68 74 74 70 3a 2f 2f 77 65 62 61 75 64 69  ](http://webaudi
2e6e0 6f 2e 67 69 74 68 75 62 2e 69 6f 2f 77 65 62 2d  o.github.io/web-
2e6f0 61 75 64 69 6f 2d 61 70 69 2f 23 74 68 65 2d 62  audio-api/#the-b
2e700 69 71 75 61 64 66 69 6c 74 65 72 6e 6f 64 65 2d  iquadfilternode-
2e710 69 6e 74 65 72 66 61 63 65 29 2e 20 0a 09 09 20  interface). ... 
2e720 2a 20 20 20 20 20 20 20 20 20 20 54 6f 6e 65 2e  *          Tone.
2e730 46 69 6c 74 65 72 20 68 61 73 20 74 68 65 20 61  Filter has the a
2e740 64 64 65 64 20 61 62 69 6c 69 74 79 20 74 6f 20  dded ability to 
2e750 73 65 74 20 74 68 65 20 66 69 6c 74 65 72 20 72  set the filter r
2e760 6f 6c 6c 6f 66 66 20 61 74 20 2d 31 32 20 0a 09  olloff at -12 ..
2e770 09 20 2a 20 20 20 20 20 20 20 20 20 20 28 64 65  . *          (de
2e780 66 61 75 6c 74 29 2c 20 2d 32 34 20 61 6e 64 20  fault), -24 and 
2e790 2d 34 38 2e 20 0a 09 09 20 2a 0a 09 09 20 2a 20  -48. ... *... * 
2e7a0 20 40 63 6f 6e 73 74 72 75 63 74 6f 72 0a 09 09   @constructor...
2e7b0 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f   *  @extends {To
2e7c0 6e 65 7d 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  ne}... *  @param
2e7d0 20 7b 46 72 65 71 75 65 6e 63 79 7c 4f 62 6a 65   {Frequency|Obje
2e7e0 63 74 7d 20 5b 66 72 65 71 75 65 6e 63 79 5d 20  ct} [frequency] 
2e7f0 54 68 65 20 63 75 74 6f 66 66 20 66 72 65 71 75  The cutoff frequ
2e800 65 6e 63 79 20 6f 66 20 74 68 65 20 66 69 6c 74  ency of the filt
2e810 65 72 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  er.... *  @param
2e820 20 7b 73 74 72 69 6e 67 3d 7d 20 74 79 70 65 20   {string=} type 
2e830 54 68 65 20 74 79 70 65 20 6f 66 20 66 69 6c 74  The type of filt
2e840 65 72 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  er.... *  @param
2e850 20 7b 6e 75 6d 62 65 72 3d 7d 20 72 6f 6c 6c 6f   {number=} rollo
2e860 66 66 20 54 68 65 20 64 72 6f 70 20 69 6e 20 64  ff The drop in d
2e870 65 63 69 62 65 6c 73 20 70 65 72 20 6f 63 74 61  ecibels per octa
2e880 76 65 20 61 66 74 65 72 20 74 68 65 20 63 75 74  ve after the cut
2e890 6f 66 66 20 66 72 65 71 75 65 6e 63 79 2e 0a 09  off frequency...
2e8a0 09 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
2e8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 33                 3
2e8c0 20 63 68 6f 69 63 65 73 3a 20 2d 31 32 2c 20 2d   choices: -12, -
2e8d0 32 34 2c 20 61 6e 64 20 2d 34 38 0a 09 09 20 2a  24, and -48... *
2e8e0 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20    @example... * 
2e8f0 20 76 61 72 20 66 69 6c 74 65 72 20 3d 20 6e 65   var filter = ne
2e900 77 20 54 6f 6e 65 2e 46 69 6c 74 65 72 28 32 30  w Tone.Filter(20
2e910 30 2c 20 22 68 69 67 68 70 61 73 73 22 29 3b 0a  0, "highpass");.
2e920 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
2e930 46 69 6c 74 65 72 20 3d 20 66 75 6e 63 74 69 6f  Filter = functio
2e940 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
2e950 74 68 69 73 2e 63 72 65 61 74 65 49 6e 73 4f 75  this.createInsOu
2e960 74 73 28 31 2c 20 31 29 3b 0a 09 20 20 20 20 20  ts(1, 1);..     
2e970 20 20 20 76 61 72 20 6f 70 74 69 6f 6e 73 20 3d     var options =
2e980 20 74 68 69 73 2e 6f 70 74 69 6f 6e 73 4f 62 6a   this.optionsObj
2e990 65 63 74 28 61 72 67 75 6d 65 6e 74 73 2c 20 5b  ect(arguments, [
2e9a0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 66  ..            'f
2e9b0 72 65 71 75 65 6e 63 79 27 2c 0a 09 20 20 20 20  requency',..    
2e9c0 20 20 20 20 20 20 20 20 27 74 79 70 65 27 2c 0a          'type',.
2e9d0 09 20 20 20 20 20 20 20 20 20 20 20 20 27 72 6f  .            'ro
2e9e0 6c 6c 6f 66 66 27 0a 09 20 20 20 20 20 20 20 20  lloff'..        
2e9f0 5d 2c 20 54 6f 6e 65 2e 46 69 6c 74 65 72 2e 64  ], Tone.Filter.d
2ea00 65 66 61 75 6c 74 73 29 3b 0a 09 20 20 20 20 20  efaults);..     
2ea10 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 74 68     /**.... *  th
2ea20 65 20 66 69 6c 74 65 72 28 73 29 0a 09 09 09 20  e filter(s).... 
2ea30 2a 20 20 40 74 79 70 65 20 7b 41 72 72 61 79 7d  *  @type {Array}
2ea40 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  .... *  @private
2ea50 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
2ea60 20 74 68 69 73 2e 5f 66 69 6c 74 65 72 73 20 3d   this._filters =
2ea70 20 5b 5d 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a   [];..        /*
2ea80 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 63 75 74  *.... *  The cut
2ea90 6f 66 66 20 66 72 65 71 75 65 6e 63 79 20 6f 66  off frequency of
2eaa0 20 74 68 65 20 66 69 6c 74 65 72 2e 20 0a 09 09   the filter. ...
2eab0 09 20 2a 20 20 40 74 79 70 65 20 7b 46 72 65 71  . *  @type {Freq
2eac0 75 65 6e 63 79 7d 0a 09 09 09 20 2a 20 20 40 73  uency}.... *  @s
2ead0 69 67 6e 61 6c 0a 09 09 09 20 2a 2f 0a 09 20 20  ignal.... */..  
2eae0 20 20 20 20 20 20 74 68 69 73 2e 66 72 65 71 75        this.frequ
2eaf0 65 6e 63 79 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  ency = new Tone.
2eb00 53 69 67 6e 61 6c 28 6f 70 74 69 6f 6e 73 2e 66  Signal(options.f
2eb10 72 65 71 75 65 6e 63 79 2c 20 54 6f 6e 65 2e 54  requency, Tone.T
2eb20 79 70 65 2e 46 72 65 71 75 65 6e 63 79 29 3b 0a  ype.Frequency);.
2eb30 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
2eb40 20 2a 20 20 54 68 65 20 64 65 74 75 6e 65 20 70   *  The detune p
2eb50 61 72 61 6d 65 74 65 72 0a 09 09 09 20 2a 20 20  arameter.... *  
2eb60 40 74 79 70 65 20 7b 43 65 6e 74 73 7d 0a 09 09  @type {Cents}...
2eb70 09 20 2a 20 20 40 73 69 67 6e 61 6c 0a 09 09 09  . *  @signal....
2eb80 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
2eb90 73 2e 64 65 74 75 6e 65 20 3d 20 6e 65 77 20 54  s.detune = new T
2eba0 6f 6e 65 2e 53 69 67 6e 61 6c 28 30 2c 20 54 6f  one.Signal(0, To
2ebb0 6e 65 2e 54 79 70 65 2e 43 65 6e 74 73 29 3b 0a  ne.Type.Cents);.
2ebc0 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
2ebd0 20 2a 20 20 54 68 65 20 67 61 69 6e 20 6f 66 20   *  The gain of 
2ebe0 74 68 65 20 66 69 6c 74 65 72 2c 20 6f 6e 6c 79  the filter, only
2ebf0 20 75 73 65 64 20 69 6e 20 63 65 72 74 61 69 6e   used in certain
2ec00 20 66 69 6c 74 65 72 20 74 79 70 65 73 0a 09 09   filter types...
2ec10 09 20 2a 20 20 40 74 79 70 65 20 7b 4e 75 6d 62  . *  @type {Numb
2ec20 65 72 7d 0a 09 09 09 20 2a 20 20 40 73 69 67 6e  er}.... *  @sign
2ec30 61 6c 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  al.... */..     
2ec40 20 20 20 74 68 69 73 2e 67 61 69 6e 20 3d 20 6e     this.gain = n
2ec50 65 77 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 28 7b  ew Tone.Signal({
2ec60 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 76  ..            'v
2ec70 61 6c 75 65 27 3a 20 6f 70 74 69 6f 6e 73 2e 67  alue': options.g
2ec80 61 69 6e 2c 0a 09 20 20 20 20 20 20 20 20 20 20  ain,..          
2ec90 20 20 27 63 6f 6e 76 65 72 74 27 3a 20 66 61 6c    'convert': fal
2eca0 73 65 0a 09 20 20 20 20 20 20 20 20 7d 29 3b 0a  se..        });.
2ecb0 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
2ecc0 20 2a 20 20 54 68 65 20 51 20 6f 72 20 51 75 61   *  The Q or Qua
2ecd0 6c 69 74 79 20 6f 66 20 74 68 65 20 66 69 6c 74  lity of the filt
2ece0 65 72 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  er.... *  @type 
2ecf0 7b 50 6f 73 69 74 69 76 65 7d 0a 09 09 09 20 2a  {Positive}.... *
2ed00 20 20 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f    @signal.... */
2ed10 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 51  ..        this.Q
2ed20 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53 69 67 6e   = new Tone.Sign
2ed30 61 6c 28 6f 70 74 69 6f 6e 73 2e 51 29 3b 0a 09  al(options.Q);..
2ed40 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
2ed50 2a 20 20 74 68 65 20 74 79 70 65 20 6f 66 20 74  *  the type of t
2ed60 68 65 20 66 69 6c 74 65 72 0a 09 09 09 20 2a 20  he filter.... * 
2ed70 20 40 74 79 70 65 20 7b 73 74 72 69 6e 67 7d 0a   @type {string}.
2ed80 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
2ed90 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
2eda0 74 68 69 73 2e 5f 74 79 70 65 20 3d 20 6f 70 74  this._type = opt
2edb0 69 6f 6e 73 2e 74 79 70 65 3b 0a 09 20 20 20 20  ions.type;..    
2edc0 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 74      /**.... *  t
2edd0 68 65 20 72 6f 6c 6c 6f 66 66 20 76 61 6c 75 65  he rolloff value
2ede0 20 6f 66 20 74 68 65 20 66 69 6c 74 65 72 0a 09   of the filter..
2edf0 09 09 20 2a 20 20 40 74 79 70 65 20 7b 6e 75 6d  .. *  @type {num
2ee00 62 65 72 7d 0a 09 09 09 20 2a 20 20 40 70 72 69  ber}.... *  @pri
2ee10 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20  vate.... */..   
2ee20 20 20 20 20 20 74 68 69 73 2e 5f 72 6f 6c 6c 6f       this._rollo
2ee30 66 66 20 3d 20 6f 70 74 69 6f 6e 73 2e 72 6f 6c  ff = options.rol
2ee40 6c 6f 66 66 3b 0a 09 20 20 20 20 20 20 20 20 2f  loff;..        /
2ee50 2f 73 65 74 20 74 68 65 20 72 6f 6c 6c 6f 66 66  /set the rolloff
2ee60 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
2ee70 72 6f 6c 6c 6f 66 66 20 3d 20 6f 70 74 69 6f 6e  rolloff = option
2ee80 73 2e 72 6f 6c 6c 6f 66 66 3b 0a 09 20 20 20 20  s.rolloff;..    
2ee90 20 20 20 20 74 68 69 73 2e 5f 72 65 61 64 4f 6e      this._readOn
2eea0 6c 79 28 5b 0a 09 20 20 20 20 20 20 20 20 20 20  ly([..          
2eeb0 20 20 27 64 65 74 75 6e 65 27 2c 0a 09 20 20 20    'detune',..   
2eec0 20 20 20 20 20 20 20 20 20 27 66 72 65 71 75 65           'freque
2eed0 6e 63 79 27 2c 0a 09 20 20 20 20 20 20 20 20 20  ncy',..         
2eee0 20 20 20 27 67 61 69 6e 27 2c 0a 09 20 20 20 20     'gain',..    
2eef0 20 20 20 20 20 20 20 20 27 51 27 0a 09 20 20 20          'Q'..   
2ef00 20 20 20 20 20 5d 29 3b 0a 09 20 20 20 20 7d 3b       ]);..    };
2ef10 0a 09 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e  ..    Tone.exten
2ef20 64 28 54 6f 6e 65 2e 46 69 6c 74 65 72 29 3b 0a  d(Tone.Filter);.
2ef30 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 74  .    /**... *  t
2ef40 68 65 20 64 65 66 61 75 6c 74 20 70 61 72 61 6d  he default param
2ef50 65 74 65 72 73 0a 09 09 20 2a 0a 09 09 20 2a 20  eters... *... * 
2ef60 20 40 73 74 61 74 69 63 0a 09 09 20 2a 20 20 40   @static... *  @
2ef70 74 79 70 65 20 7b 4f 62 6a 65 63 74 7d 0a 09 09  type {Object}...
2ef80 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 46 69   */..    Tone.Fi
2ef90 6c 74 65 72 2e 64 65 66 61 75 6c 74 73 20 3d 20  lter.defaults = 
2efa0 7b 0a 09 20 20 20 20 20 20 20 20 27 74 79 70 65  {..        'type
2efb0 27 3a 20 27 6c 6f 77 70 61 73 73 27 2c 0a 09 20  ': 'lowpass',.. 
2efc0 20 20 20 20 20 20 20 27 66 72 65 71 75 65 6e 63         'frequenc
2efd0 79 27 3a 20 33 35 30 2c 0a 09 20 20 20 20 20 20  y': 350,..      
2efe0 20 20 27 72 6f 6c 6c 6f 66 66 27 3a 20 2d 31 32    'rolloff': -12
2eff0 2c 0a 09 20 20 20 20 20 20 20 20 27 51 27 3a 20  ,..        'Q': 
2f000 31 2c 0a 09 20 20 20 20 20 20 20 20 27 67 61 69  1,..        'gai
2f010 6e 27 3a 20 30 0a 09 20 20 20 20 7d 3b 0a 09 20  n': 0..    };.. 
2f020 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65 20     /**... * The 
2f030 74 79 70 65 20 6f 66 20 74 68 65 20 66 69 6c 74  type of the filt
2f040 65 72 2e 20 54 79 70 65 73 3a 20 22 6c 6f 77 70  er. Types: "lowp
2f050 61 73 73 22 2c 20 22 68 69 67 68 70 61 73 73 22  ass", "highpass"
2f060 2c 20 0a 09 09 20 2a 20 22 62 61 6e 64 70 61 73  , ... * "bandpas
2f070 73 22 2c 20 22 6c 6f 77 73 68 65 6c 66 22 2c 20  s", "lowshelf", 
2f080 22 68 69 67 68 73 68 65 6c 66 22 2c 20 22 6e 6f  "highshelf", "no
2f090 74 63 68 22 2c 20 22 61 6c 6c 70 61 73 73 22 2c  tch", "allpass",
2f0a0 20 6f 72 20 22 70 65 61 6b 69 6e 67 22 2e 20 0a   or "peaking". .
2f0b0 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54  .. * @memberOf T
2f0c0 6f 6e 65 2e 46 69 6c 74 65 72 23 0a 09 09 20 2a  one.Filter#... *
2f0d0 20 40 74 79 70 65 20 7b 73 74 72 69 6e 67 7d 0a   @type {string}.
2f0e0 09 09 20 2a 20 40 6e 61 6d 65 20 74 79 70 65 0a  .. * @name type.
2f0f0 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63  .. */..    Objec
2f100 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79  t.defineProperty
2f110 28 54 6f 6e 65 2e 46 69 6c 74 65 72 2e 70 72 6f  (Tone.Filter.pro
2f120 74 6f 74 79 70 65 2c 20 27 74 79 70 65 27 2c 20  totype, 'type', 
2f130 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a 20  {..        get: 
2f140 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
2f150 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2f160 6e 20 74 68 69 73 2e 5f 74 79 70 65 3b 0a 09 20  n this._type;.. 
2f170 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20         },..     
2f180 20 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e     set: function
2f190 20 28 74 79 70 65 29 20 7b 0a 09 20 20 20 20 20   (type) {..     
2f1a0 20 20 20 20 20 20 20 76 61 72 20 74 79 70 65 73         var types
2f1b0 20 3d 20 5b 0a 09 20 20 20 20 20 20 20 20 20 20   = [..          
2f1c0 20 20 20 20 20 20 27 6c 6f 77 70 61 73 73 27 2c        'lowpass',
2f1d0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f1e0 20 20 27 68 69 67 68 70 61 73 73 27 2c 0a 09 20    'highpass',.. 
2f1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27                 '
2f200 62 61 6e 64 70 61 73 73 27 2c 0a 09 20 20 20 20  bandpass',..    
2f210 20 20 20 20 20 20 20 20 20 20 20 20 27 6c 6f 77              'low
2f220 73 68 65 6c 66 27 2c 0a 09 20 20 20 20 20 20 20  shelf',..       
2f230 20 20 20 20 20 20 20 20 20 27 68 69 67 68 73 68           'highsh
2f240 65 6c 66 27 2c 0a 09 20 20 20 20 20 20 20 20 20  elf',..         
2f250 20 20 20 20 20 20 20 27 6e 6f 74 63 68 27 2c 0a         'notch',.
2f260 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f270 20 27 61 6c 6c 70 61 73 73 27 2c 0a 09 20 20 20   'allpass',..   
2f280 20 20 20 20 20 20 20 20 20 20 20 20 20 27 70 65               'pe
2f290 61 6b 69 6e 67 27 0a 09 20 20 20 20 20 20 20 20  aking'..        
2f2a0 20 20 20 20 5d 3b 0a 09 20 20 20 20 20 20 20 20      ];..        
2f2b0 20 20 20 20 69 66 20 28 74 79 70 65 73 2e 69 6e      if (types.in
2f2c0 64 65 78 4f 66 28 74 79 70 65 29 20 3d 3d 3d 20  dexOf(type) === 
2f2d0 2d 31 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  -1) {..         
2f2e0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
2f2f0 20 54 79 70 65 45 72 72 6f 72 28 27 54 6f 6e 65   TypeError('Tone
2f300 2e 46 69 6c 74 65 72 3a 20 69 6e 76 61 6c 69 64  .Filter: invalid
2f310 20 74 79 70 65 20 27 20 2b 20 74 79 70 65 29 3b   type ' + type);
2f320 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ..            }.
2f330 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
2f340 73 2e 5f 74 79 70 65 20 3d 20 74 79 70 65 3b 0a  s._type = type;.
2f350 09 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
2f360 20 28 76 61 72 20 69 20 3d 20 30 3b 20 69 20 3c   (var i = 0; i <
2f370 20 74 68 69 73 2e 5f 66 69 6c 74 65 72 73 2e 6c   this._filters.l
2f380 65 6e 67 74 68 3b 20 69 2b 2b 29 20 7b 0a 09 20  ength; i++) {.. 
2f390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2f3a0 68 69 73 2e 5f 66 69 6c 74 65 72 73 5b 69 5d 2e  his._filters[i].
2f3b0 74 79 70 65 20 3d 20 74 79 70 65 3b 0a 09 20 20  type = type;..  
2f3c0 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20            }..   
2f3d0 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a       }..    });.
2f3e0 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68  .    /**... * Th
2f3f0 65 20 72 6f 6c 6c 6f 66 66 20 6f 66 20 74 68 65  e rolloff of the
2f400 20 66 69 6c 74 65 72 20 77 68 69 63 68 20 69 73   filter which is
2f410 20 74 68 65 20 64 72 6f 70 20 69 6e 20 64 62 0a   the drop in db.
2f420 09 09 20 2a 20 70 65 72 20 6f 63 74 61 76 65 2e  .. * per octave.
2f430 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 69 6e 74   Implemented int
2f440 65 72 6e 61 6c 6c 79 20 62 79 20 63 61 73 63 61  ernally by casca
2f450 64 69 6e 67 20 66 69 6c 74 65 72 73 2e 0a 09 09  ding filters....
2f460 20 2a 20 4f 6e 6c 79 20 61 63 63 65 70 74 73 20   * Only accepts 
2f470 74 68 65 20 76 61 6c 75 65 73 20 2d 31 32 2c 20  the values -12, 
2f480 2d 32 34 2c 20 2d 34 38 20 61 6e 64 20 2d 39 36  -24, -48 and -96
2f490 2e 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66  .... * @memberOf
2f4a0 20 54 6f 6e 65 2e 46 69 6c 74 65 72 23 0a 09 09   Tone.Filter#...
2f4b0 20 2a 20 40 74 79 70 65 20 7b 6e 75 6d 62 65 72   * @type {number
2f4c0 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 72 6f 6c  }... * @name rol
2f4d0 6c 6f 66 66 0a 09 09 20 2a 2f 0a 09 20 20 20 20  loff... */..    
2f4e0 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f  Object.definePro
2f4f0 70 65 72 74 79 28 54 6f 6e 65 2e 46 69 6c 74 65  perty(Tone.Filte
2f500 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 72 6f  r.prototype, 'ro
2f510 6c 6c 6f 66 66 27 2c 20 7b 0a 09 20 20 20 20 20  lloff', {..     
2f520 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e     get: function
2f530 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20   () {..         
2f540 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f     return this._
2f550 72 6f 6c 6c 6f 66 66 3b 0a 09 20 20 20 20 20 20  rolloff;..      
2f560 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65    },..        se
2f570 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 72 6f 6c  t: function (rol
2f580 6c 6f 66 66 29 20 7b 0a 09 20 20 20 20 20 20 20  loff) {..       
2f590 20 20 20 20 20 72 6f 6c 6c 6f 66 66 20 3d 20 70       rolloff = p
2f5a0 61 72 73 65 49 6e 74 28 72 6f 6c 6c 6f 66 66 2c  arseInt(rolloff,
2f5b0 20 31 30 29 3b 0a 09 20 20 20 20 20 20 20 20 20   10);..         
2f5c0 20 20 20 76 61 72 20 70 6f 73 73 69 62 69 6c 69     var possibili
2f5d0 74 69 65 73 20 3d 20 5b 0a 09 20 20 20 20 20 20  ties = [..      
2f5e0 20 20 20 20 20 20 20 20 20 20 2d 31 32 2c 0a 09            -12,..
2f5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f600 2d 32 34 2c 0a 09 20 20 20 20 20 20 20 20 20 20  -24,..          
2f610 20 20 20 20 20 20 2d 34 38 2c 0a 09 20 20 20 20        -48,..    
2f620 20 20 20 20 20 20 20 20 20 20 20 20 2d 39 36 0a              -96.
2f630 09 20 20 20 20 20 20 20 20 20 20 20 20 5d 3b 0a  .            ];.
2f640 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72  .            var
2f650 20 63 61 73 63 61 64 69 6e 67 43 6f 75 6e 74 20   cascadingCount 
2f660 3d 20 70 6f 73 73 69 62 69 6c 69 74 69 65 73 2e  = possibilities.
2f670 69 6e 64 65 78 4f 66 28 72 6f 6c 6c 6f 66 66 29  indexOf(rolloff)
2f680 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;..            /
2f690 2f 63 68 65 63 6b 20 74 68 65 20 72 6f 6c 6c 6f  /check the rollo
2f6a0 66 66 20 69 73 20 76 61 6c 69 64 0a 09 20 20 20  ff is valid..   
2f6b0 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61 73           if (cas
2f6c0 63 61 64 69 6e 67 43 6f 75 6e 74 20 3d 3d 3d 20  cadingCount === 
2f6d0 2d 31 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  -1) {..         
2f6e0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
2f6f0 20 52 61 6e 67 65 45 72 72 6f 72 28 27 54 6f 6e   RangeError('Ton
2f700 65 2e 46 69 6c 74 65 72 3a 20 72 6f 6c 6c 6f 66  e.Filter: rollof
2f710 66 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 2d 31  f can only be -1
2f720 32 2c 20 2d 32 34 2c 20 2d 34 38 20 6f 72 20 2d  2, -24, -48 or -
2f730 39 36 27 29 3b 0a 09 20 20 20 20 20 20 20 20 20  96');..         
2f740 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20     }..          
2f750 20 20 63 61 73 63 61 64 69 6e 67 43 6f 75 6e 74    cascadingCount
2f760 20 2b 3d 20 31 3b 0a 09 20 20 20 20 20 20 20 20   += 1;..        
2f770 20 20 20 20 74 68 69 73 2e 5f 72 6f 6c 6c 6f 66      this._rollof
2f780 66 20 3d 20 72 6f 6c 6c 6f 66 66 3b 0a 09 20 20  f = rolloff;..  
2f790 20 20 20 20 20 20 20 20 20 20 2f 2f 66 69 72 73            //firs
2f7a0 74 20 64 69 73 63 6f 6e 6e 65 63 74 20 74 68 65  t disconnect the
2f7b0 20 66 69 6c 74 65 72 73 20 61 6e 64 20 74 68 72   filters and thr
2f7c0 6f 77 20 74 68 65 6d 20 61 77 61 79 0a 09 20 20  ow them away..  
2f7d0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 69            this.i
2f7e0 6e 70 75 74 2e 64 69 73 63 6f 6e 6e 65 63 74 28  nput.disconnect(
2f7f0 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2f800 66 6f 72 20 28 76 61 72 20 69 20 3d 20 30 3b 20  for (var i = 0; 
2f810 69 20 3c 20 74 68 69 73 2e 5f 66 69 6c 74 65 72  i < this._filter
2f820 73 2e 6c 65 6e 67 74 68 3b 20 69 2b 2b 29 20 7b  s.length; i++) {
2f830 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f840 20 20 74 68 69 73 2e 5f 66 69 6c 74 65 72 73 5b    this._filters[
2f850 69 5d 2e 64 69 73 63 6f 6e 6e 65 63 74 28 29 3b  i].disconnect();
2f860 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f870 20 20 74 68 69 73 2e 5f 66 69 6c 74 65 72 73 5b    this._filters[
2f880 69 5d 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  i] = null;..    
2f890 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
2f8a0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 66 69 6c         this._fil
2f8b0 74 65 72 73 20 3d 20 6e 65 77 20 41 72 72 61 79  ters = new Array
2f8c0 28 63 61 73 63 61 64 69 6e 67 43 6f 75 6e 74 29  (cascadingCount)
2f8d0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 66  ;..            f
2f8e0 6f 72 20 28 76 61 72 20 63 6f 75 6e 74 20 3d 20  or (var count = 
2f8f0 30 3b 20 63 6f 75 6e 74 20 3c 20 63 61 73 63 61  0; count < casca
2f900 64 69 6e 67 43 6f 75 6e 74 3b 20 63 6f 75 6e 74  dingCount; count
2f910 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ++) {..         
2f920 20 20 20 20 20 20 20 76 61 72 20 66 69 6c 74 65         var filte
2f930 72 20 3d 20 74 68 69 73 2e 63 6f 6e 74 65 78 74  r = this.context
2f940 2e 63 72 65 61 74 65 42 69 71 75 61 64 46 69 6c  .createBiquadFil
2f950 74 65 72 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ter();..        
2f960 20 20 20 20 20 20 20 20 66 69 6c 74 65 72 2e 74          filter.t
2f970 79 70 65 20 3d 20 74 68 69 73 2e 5f 74 79 70 65  ype = this._type
2f980 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2f990 20 20 20 74 68 69 73 2e 66 72 65 71 75 65 6e 63     this.frequenc
2f9a0 79 2e 63 6f 6e 6e 65 63 74 28 66 69 6c 74 65 72  y.connect(filter
2f9b0 2e 66 72 65 71 75 65 6e 63 79 29 3b 0a 09 20 20  .frequency);..  
2f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
2f9d0 69 73 2e 64 65 74 75 6e 65 2e 63 6f 6e 6e 65 63  is.detune.connec
2f9e0 74 28 66 69 6c 74 65 72 2e 64 65 74 75 6e 65 29  t(filter.detune)
2f9f0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2fa00 20 20 20 74 68 69 73 2e 51 2e 63 6f 6e 6e 65 63     this.Q.connec
2fa10 74 28 66 69 6c 74 65 72 2e 51 29 3b 0a 09 20 20  t(filter.Q);..  
2fa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
2fa30 69 73 2e 67 61 69 6e 2e 63 6f 6e 6e 65 63 74 28  is.gain.connect(
2fa40 66 69 6c 74 65 72 2e 67 61 69 6e 29 3b 0a 09 20  filter.gain);.. 
2fa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2fa60 68 69 73 2e 5f 66 69 6c 74 65 72 73 5b 63 6f 75  his._filters[cou
2fa70 6e 74 5d 20 3d 20 66 69 6c 74 65 72 3b 0a 09 20  nt] = filter;.. 
2fa80 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20             }..  
2fa90 20 20 20 20 20 20 20 20 20 20 2f 2f 63 6f 6e 6e            //conn
2faa0 65 63 74 20 74 68 65 6d 20 75 70 0a 09 20 20 20  ect them up..   
2fab0 20 20 20 20 20 20 20 20 20 76 61 72 20 63 6f 6e           var con
2fac0 6e 65 63 74 69 6f 6e 43 68 61 69 6e 20 3d 20 5b  nectionChain = [
2fad0 74 68 69 73 2e 69 6e 70 75 74 5d 2e 63 6f 6e 63  this.input].conc
2fae0 61 74 28 74 68 69 73 2e 5f 66 69 6c 74 65 72 73  at(this._filters
2faf0 29 2e 63 6f 6e 63 61 74 28 5b 74 68 69 73 2e 6f  ).concat([this.o
2fb00 75 74 70 75 74 5d 29 3b 0a 09 20 20 20 20 20 20  utput]);..      
2fb10 20 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 6e 65        this.conne
2fb20 63 74 53 65 72 69 65 73 2e 61 70 70 6c 79 28 74  ctSeries.apply(t
2fb30 68 69 73 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 43  his, connectionC
2fb40 68 61 69 6e 29 3b 0a 09 20 20 20 20 20 20 20 20  hain);..        
2fb50 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20  }..    });..    
2fb60 2f 2a 2a 0a 09 09 20 2a 20 20 43 6c 65 61 6e 20  /**... *  Clean 
2fb70 75 70 2e 20 0a 09 09 20 2a 20 20 40 72 65 74 75  up. ... *  @retu
2fb80 72 6e 20 7b 54 6f 6e 65 2e 46 69 6c 74 65 72 7d  rn {Tone.Filter}
2fb90 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20   this... */..   
2fba0 20 54 6f 6e 65 2e 46 69 6c 74 65 72 2e 70 72 6f   Tone.Filter.pro
2fbb0 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d  totype.dispose =
2fbc0 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
2fbd0 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 70 72 6f          Tone.pro
2fbe0 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 2e 63  totype.dispose.c
2fbf0 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20 20 20  all(this);..    
2fc00 20 20 20 20 66 6f 72 20 28 76 61 72 20 69 20 3d      for (var i =
2fc10 20 30 3b 20 69 20 3c 20 74 68 69 73 2e 5f 66 69   0; i < this._fi
2fc20 6c 74 65 72 73 2e 6c 65 6e 67 74 68 3b 20 69 2b  lters.length; i+
2fc30 2b 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  +) {..          
2fc40 20 20 74 68 69 73 2e 5f 66 69 6c 74 65 72 73 5b    this._filters[
2fc50 69 5d 2e 64 69 73 63 6f 6e 6e 65 63 74 28 29 3b  i].disconnect();
2fc60 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
2fc70 69 73 2e 5f 66 69 6c 74 65 72 73 5b 69 5d 20 3d  is._filters[i] =
2fc80 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
2fc90 7d 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  }..        this.
2fca0 5f 66 69 6c 74 65 72 73 20 3d 20 6e 75 6c 6c 3b  _filters = null;
2fcb0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
2fcc0 77 72 69 74 61 62 6c 65 28 5b 0a 09 20 20 20 20  writable([..    
2fcd0 20 20 20 20 20 20 20 20 27 64 65 74 75 6e 65 27          'detune'
2fce0 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
2fcf0 66 72 65 71 75 65 6e 63 79 27 2c 0a 09 20 20 20  frequency',..   
2fd00 20 20 20 20 20 20 20 20 20 27 67 61 69 6e 27 2c           'gain',
2fd10 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 51  ..            'Q
2fd20 27 0a 09 20 20 20 20 20 20 20 20 5d 29 3b 0a 09  '..        ]);..
2fd30 20 20 20 20 20 20 20 20 74 68 69 73 2e 66 72 65          this.fre
2fd40 71 75 65 6e 63 79 2e 64 69 73 70 6f 73 65 28 29  quency.dispose()
2fd50 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
2fd60 51 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20  Q.dispose();..  
2fd70 20 20 20 20 20 20 74 68 69 73 2e 66 72 65 71 75        this.frequ
2fd80 65 6e 63 79 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20  ency = null;..  
2fd90 20 20 20 20 20 20 74 68 69 73 2e 51 20 3d 20 6e        this.Q = n
2fda0 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ull;..        th
2fdb0 69 73 2e 64 65 74 75 6e 65 2e 64 69 73 70 6f 73  is.detune.dispos
2fdc0 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  e();..        th
2fdd0 69 73 2e 64 65 74 75 6e 65 20 3d 20 6e 75 6c 6c  is.detune = null
2fde0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
2fdf0 67 61 69 6e 2e 64 69 73 70 6f 73 65 28 29 3b 0a  gain.dispose();.
2fe00 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 67 61  .        this.ga
2fe10 69 6e 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  in = null;..    
2fe20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b      return this;
2fe30 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 72 65  ..    };..    re
2fe40 74 75 72 6e 20 54 6f 6e 65 2e 46 69 6c 74 65 72  turn Tone.Filter
2fe50 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66  ;..});..Module(f
2fe60 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b  unction (Tone) {
2fe70 0a 09 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a  ..    ..    /**.
2fe80 09 09 20 2a 20 20 40 63 6c 61 73 73 20 53 70 6c  .. *  @class Spl
2fe90 69 74 20 74 68 65 20 69 6e 63 6f 6d 69 6e 67 20  it the incoming 
2fea0 73 69 67 6e 61 6c 20 69 6e 74 6f 20 74 68 72 65  signal into thre
2feb0 65 20 62 61 6e 64 73 20 28 6c 6f 77 2c 20 6d 69  e bands (low, mi
2fec0 64 2c 20 68 69 67 68 29 0a 09 09 20 2a 20 20 20  d, high)... *   
2fed0 20 20 20 20 20 20 77 69 74 68 20 74 77 6f 20 63        with two c
2fee0 72 6f 73 73 6f 76 65 72 20 66 72 65 71 75 65 6e  rossover frequen
2fef0 63 79 20 63 6f 6e 74 72 6f 6c 73 2e 20 0a 09 09  cy controls. ...
2ff00 20 2a 0a 09 09 20 2a 20 20 40 65 78 74 65 6e 64   *... *  @extend
2ff10 73 20 7b 54 6f 6e 65 7d 0a 09 09 20 2a 20 20 40  s {Tone}... *  @
2ff20 63 6f 6e 73 74 72 75 63 74 6f 72 0a 09 09 20 2a  constructor... *
2ff30 20 20 40 70 61 72 61 6d 20 7b 46 72 65 71 75 65    @param {Freque
2ff40 6e 63 79 7c 4f 62 6a 65 63 74 7d 20 5b 6c 6f 77  ncy|Object} [low
2ff50 46 72 65 71 75 65 6e 63 79 5d 20 74 68 65 20 6c  Frequency] the l
2ff60 6f 77 2f 6d 69 64 20 63 72 6f 73 73 6f 76 65 72  ow/mid crossover
2ff70 20 66 72 65 71 75 65 6e 63 79 0a 09 09 20 2a 20   frequency... * 
2ff80 20 40 70 61 72 61 6d 20 7b 46 72 65 71 75 65 6e   @param {Frequen
2ff90 63 79 7d 20 5b 68 69 67 68 46 72 65 71 75 65 6e  cy} [highFrequen
2ffa0 63 79 5d 20 74 68 65 20 6d 69 64 2f 68 69 67 68  cy] the mid/high
2ffb0 20 63 72 6f 73 73 6f 76 65 72 20 66 72 65 71 75   crossover frequ
2ffc0 65 6e 63 79 0a 09 09 20 2a 2f 0a 09 20 20 20 20  ency... */..    
2ffd0 54 6f 6e 65 2e 4d 75 6c 74 69 62 61 6e 64 53 70  Tone.MultibandSp
2ffe0 6c 69 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  lit = function (
2fff0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72  ) {..        var
30000 20 6f 70 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e   options = this.
30010 6f 70 74 69 6f 6e 73 4f 62 6a 65 63 74 28 61 72  optionsObject(ar
30020 67 75 6d 65 6e 74 73 2c 20 5b 0a 09 20 20 20 20  guments, [..    
30030 20 20 20 20 20 20 20 20 27 6c 6f 77 46 72 65 71          'lowFreq
30040 75 65 6e 63 79 27 2c 0a 09 20 20 20 20 20 20 20  uency',..       
30050 20 20 20 20 20 27 68 69 67 68 46 72 65 71 75 65       'highFreque
30060 6e 63 79 27 0a 09 20 20 20 20 20 20 20 20 5d 2c  ncy'..        ],
30070 20 54 6f 6e 65 2e 4d 75 6c 74 69 62 61 6e 64 53   Tone.MultibandS
30080 70 6c 69 74 2e 64 65 66 61 75 6c 74 73 29 3b 0a  plit.defaults);.
30090 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
300a0 20 2a 20 20 74 68 65 20 69 6e 70 75 74 0a 09 09   *  the input...
300b0 09 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65  . *  @type {Tone
300c0 2e 47 61 69 6e 7d 0a 09 09 09 20 2a 20 20 40 70  .Gain}.... *  @p
300d0 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20  rivate.... */.. 
300e0 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 70 75         this.inpu
300f0 74 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 47 61 69  t = new Tone.Gai
30100 6e 28 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a  n();..        /*
30110 2a 0a 09 09 09 20 2a 20 20 74 68 65 20 6f 75 74  *.... *  the out
30120 70 75 74 73 0a 09 09 09 20 2a 20 20 40 74 79 70  puts.... *  @typ
30130 65 20 7b 41 72 72 61 79 7d 0a 09 09 09 20 2a 20  e {Array}.... * 
30140 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f   @private.... */
30150 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f  ..        this.o
30160 75 74 70 75 74 20 3d 20 6e 65 77 20 41 72 72 61  utput = new Arra
30170 79 28 33 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  y(3);..        /
30180 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 6c 6f  **.... *  The lo
30190 77 20 62 61 6e 64 2e 20 41 6c 69 61 73 20 66 6f  w band. Alias fo
301a0 72 20 3c 63 6f 64 65 3e 6f 75 74 70 75 74 5b 30  r <code>output[0
301b0 5d 3c 2f 63 6f 64 65 3e 0a 09 09 09 20 2a 20 20  ]</code>.... *  
301c0 40 74 79 70 65 20 7b 54 6f 6e 65 2e 46 69 6c 74  @type {Tone.Filt
301d0 65 72 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  er}.... */..    
301e0 20 20 20 20 74 68 69 73 2e 6c 6f 77 20 3d 20 74      this.low = t
301f0 68 69 73 2e 6f 75 74 70 75 74 5b 30 5d 20 3d 20  his.output[0] = 
30200 6e 65 77 20 54 6f 6e 65 2e 46 69 6c 74 65 72 28  new Tone.Filter(
30210 30 2c 20 27 6c 6f 77 70 61 73 73 27 29 3b 0a 09  0, 'lowpass');..
30220 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
30230 2a 20 20 74 68 65 20 6c 6f 77 65 72 20 66 69 6c  *  the lower fil
30240 74 65 72 20 6f 66 20 74 68 65 20 6d 69 64 20 62  ter of the mid b
30250 61 6e 64 0a 09 09 09 20 2a 20 20 40 74 79 70 65  and.... *  @type
30260 20 7b 54 6f 6e 65 2e 46 69 6c 74 65 72 7d 0a 09   {Tone.Filter}..
30270 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
30280 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
30290 68 69 73 2e 5f 6c 6f 77 4d 69 64 46 69 6c 74 65  his._lowMidFilte
302a0 72 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 46 69 6c  r = new Tone.Fil
302b0 74 65 72 28 30 2c 20 27 68 69 67 68 70 61 73 73  ter(0, 'highpass
302c0 27 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  ');..        /**
302d0 0a 09 09 09 20 2a 20 20 54 68 65 20 6d 69 64 20  .... *  The mid 
302e0 62 61 6e 64 20 6f 75 74 70 75 74 2e 20 41 6c 69  band output. Ali
302f0 61 73 20 66 6f 72 20 3c 63 6f 64 65 3e 6f 75 74  as for <code>out
30300 70 75 74 5b 31 5d 3c 2f 63 6f 64 65 3e 0a 09 09  put[1]</code>...
30310 09 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65  . *  @type {Tone
30320 2e 46 69 6c 74 65 72 7d 0a 09 09 09 20 2a 2f 0a  .Filter}.... */.
30330 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 6d 69  .        this.mi
30340 64 20 3d 20 74 68 69 73 2e 6f 75 74 70 75 74 5b  d = this.output[
30350 31 5d 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 46 69  1] = new Tone.Fi
30360 6c 74 65 72 28 30 2c 20 27 6c 6f 77 70 61 73 73  lter(0, 'lowpass
30370 27 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  ');..        /**
30380 0a 09 09 09 20 2a 20 20 54 68 65 20 68 69 67 68  .... *  The high
30390 20 62 61 6e 64 20 6f 75 74 70 75 74 2e 20 41 6c   band output. Al
303a0 69 61 73 20 66 6f 72 20 3c 63 6f 64 65 3e 6f 75  ias for <code>ou
303b0 74 70 75 74 5b 32 5d 3c 2f 63 6f 64 65 3e 0a 09  tput[2]</code>..
303c0 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e  .. *  @type {Ton
303d0 65 2e 46 69 6c 74 65 72 7d 0a 09 09 09 20 2a 2f  e.Filter}.... */
303e0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 68  ..        this.h
303f0 69 67 68 20 3d 20 74 68 69 73 2e 6f 75 74 70 75  igh = this.outpu
30400 74 5b 32 5d 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  t[2] = new Tone.
30410 46 69 6c 74 65 72 28 30 2c 20 27 68 69 67 68 70  Filter(0, 'highp
30420 61 73 73 27 29 3b 0a 09 20 20 20 20 20 20 20 20  ass');..        
30430 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 6c  /**.... *  The l
30440 6f 77 2f 6d 69 64 20 63 72 6f 73 73 6f 76 65 72  ow/mid crossover
30450 20 66 72 65 71 75 65 6e 63 79 2e 0a 09 09 09 20   frequency..... 
30460 2a 20 20 40 74 79 70 65 20 7b 46 72 65 71 75 65  *  @type {Freque
30470 6e 63 79 7d 0a 09 09 09 20 2a 20 20 40 73 69 67  ncy}.... *  @sig
30480 6e 61 6c 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  nal.... */..    
30490 20 20 20 20 74 68 69 73 2e 6c 6f 77 46 72 65 71      this.lowFreq
304a0 75 65 6e 63 79 20 3d 20 6e 65 77 20 54 6f 6e 65  uency = new Tone
304b0 2e 53 69 67 6e 61 6c 28 6f 70 74 69 6f 6e 73 2e  .Signal(options.
304c0 6c 6f 77 46 72 65 71 75 65 6e 63 79 2c 20 54 6f  lowFrequency, To
304d0 6e 65 2e 54 79 70 65 2e 46 72 65 71 75 65 6e 63  ne.Type.Frequenc
304e0 79 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  y);..        /**
304f0 0a 09 09 09 20 2a 20 20 54 68 65 20 6d 69 64 2f  .... *  The mid/
30500 68 69 67 68 20 63 72 6f 73 73 6f 76 65 72 20 66  high crossover f
30510 72 65 71 75 65 6e 63 79 2e 0a 09 09 09 20 2a 20  requency..... * 
30520 20 40 74 79 70 65 20 7b 46 72 65 71 75 65 6e 63   @type {Frequenc
30530 79 7d 0a 09 09 09 20 2a 20 20 40 73 69 67 6e 61  y}.... *  @signa
30540 6c 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  l.... */..      
30550 20 20 74 68 69 73 2e 68 69 67 68 46 72 65 71 75    this.highFrequ
30560 65 6e 63 79 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  ency = new Tone.
30570 53 69 67 6e 61 6c 28 6f 70 74 69 6f 6e 73 2e 68  Signal(options.h
30580 69 67 68 46 72 65 71 75 65 6e 63 79 2c 20 54 6f  ighFrequency, To
30590 6e 65 2e 54 79 70 65 2e 46 72 65 71 75 65 6e 63  ne.Type.Frequenc
305a0 79 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  y);..        /**
305b0 0a 09 09 09 20 2a 20 20 54 68 65 20 71 75 61 6c  .... *  The qual
305c0 69 74 79 20 6f 66 20 61 6c 6c 20 74 68 65 20 66  ity of all the f
305d0 69 6c 74 65 72 73 0a 09 09 09 20 2a 20 20 40 74  ilters.... *  @t
305e0 79 70 65 20 7b 4e 75 6d 62 65 72 7d 0a 09 09 09  ype {Number}....
305f0 20 2a 20 20 40 73 69 67 6e 61 6c 0a 09 09 09 20   *  @signal.... 
30600 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
30610 2e 51 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53 69  .Q = new Tone.Si
30620 67 6e 61 6c 28 6f 70 74 69 6f 6e 73 2e 51 29 3b  gnal(options.Q);
30630 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 69  ..        this.i
30640 6e 70 75 74 2e 66 61 6e 28 74 68 69 73 2e 6c 6f  nput.fan(this.lo
30650 77 2c 20 74 68 69 73 2e 68 69 67 68 29 3b 0a 09  w, this.high);..
30660 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 70          this.inp
30670 75 74 2e 63 68 61 69 6e 28 74 68 69 73 2e 5f 6c  ut.chain(this._l
30680 6f 77 4d 69 64 46 69 6c 74 65 72 2c 20 74 68 69  owMidFilter, thi
30690 73 2e 6d 69 64 29 3b 0a 09 20 20 20 20 20 20 20  s.mid);..       
306a0 20 2f 2f 74 68 65 20 66 72 65 71 75 65 6e 63 79   //the frequency
306b0 20 63 6f 6e 74 72 6f 6c 20 73 69 67 6e 61 6c 0a   control signal.
306c0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c 6f  .        this.lo
306d0 77 46 72 65 71 75 65 6e 63 79 2e 63 6f 6e 6e 65  wFrequency.conne
306e0 63 74 28 74 68 69 73 2e 6c 6f 77 2e 66 72 65 71  ct(this.low.freq
306f0 75 65 6e 63 79 29 3b 0a 09 20 20 20 20 20 20 20  uency);..       
30700 20 74 68 69 73 2e 6c 6f 77 46 72 65 71 75 65 6e   this.lowFrequen
30710 63 79 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e  cy.connect(this.
30720 5f 6c 6f 77 4d 69 64 46 69 6c 74 65 72 2e 66 72  _lowMidFilter.fr
30730 65 71 75 65 6e 63 79 29 3b 0a 09 20 20 20 20 20  equency);..     
30740 20 20 20 74 68 69 73 2e 68 69 67 68 46 72 65 71     this.highFreq
30750 75 65 6e 63 79 2e 63 6f 6e 6e 65 63 74 28 74 68  uency.connect(th
30760 69 73 2e 6d 69 64 2e 66 72 65 71 75 65 6e 63 79  is.mid.frequency
30770 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
30780 2e 68 69 67 68 46 72 65 71 75 65 6e 63 79 2e 63  .highFrequency.c
30790 6f 6e 6e 65 63 74 28 74 68 69 73 2e 68 69 67 68  onnect(this.high
307a0 2e 66 72 65 71 75 65 6e 63 79 29 3b 0a 09 20 20  .frequency);..  
307b0 20 20 20 20 20 20 2f 2f 74 68 65 20 51 20 76 61        //the Q va
307c0 6c 75 65 0a 09 20 20 20 20 20 20 20 20 74 68 69  lue..        thi
307d0 73 2e 51 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73  s.Q.connect(this
307e0 2e 6c 6f 77 2e 51 29 3b 0a 09 20 20 20 20 20 20  .low.Q);..      
307f0 20 20 74 68 69 73 2e 51 2e 63 6f 6e 6e 65 63 74    this.Q.connect
30800 28 74 68 69 73 2e 5f 6c 6f 77 4d 69 64 46 69 6c  (this._lowMidFil
30810 74 65 72 2e 51 29 3b 0a 09 20 20 20 20 20 20 20  ter.Q);..       
30820 20 74 68 69 73 2e 51 2e 63 6f 6e 6e 65 63 74 28   this.Q.connect(
30830 74 68 69 73 2e 6d 69 64 2e 51 29 3b 0a 09 20 20  this.mid.Q);..  
30840 20 20 20 20 20 20 74 68 69 73 2e 51 2e 63 6f 6e        this.Q.con
30850 6e 65 63 74 28 74 68 69 73 2e 68 69 67 68 2e 51  nect(this.high.Q
30860 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
30870 2e 5f 72 65 61 64 4f 6e 6c 79 28 5b 0a 09 20 20  ._readOnly([..  
30880 20 20 20 20 20 20 20 20 20 20 27 68 69 67 68 27            'high'
30890 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
308a0 6d 69 64 27 2c 0a 09 20 20 20 20 20 20 20 20 20  mid',..         
308b0 20 20 20 27 6c 6f 77 27 2c 0a 09 20 20 20 20 20     'low',..     
308c0 20 20 20 20 20 20 20 27 68 69 67 68 46 72 65 71         'highFreq
308d0 75 65 6e 63 79 27 2c 0a 09 20 20 20 20 20 20 20  uency',..       
308e0 20 20 20 20 20 27 6c 6f 77 46 72 65 71 75 65 6e       'lowFrequen
308f0 63 79 27 0a 09 20 20 20 20 20 20 20 20 5d 29 3b  cy'..        ]);
30900 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f  ..    };..    To
30910 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 4d  ne.extend(Tone.M
30920 75 6c 74 69 62 61 6e 64 53 70 6c 69 74 29 3b 0a  ultibandSplit);.
30930 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40  .    /**... *  @
30940 70 72 69 76 61 74 65 0a 09 09 20 2a 20 20 40 73  private... *  @s
30950 74 61 74 69 63 0a 09 09 20 2a 20 20 40 74 79 70  tatic... *  @typ
30960 65 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 2f  e {Object}... */
30970 0a 09 20 20 20 20 54 6f 6e 65 2e 4d 75 6c 74 69  ..    Tone.Multi
30980 62 61 6e 64 53 70 6c 69 74 2e 64 65 66 61 75 6c  bandSplit.defaul
30990 74 73 20 3d 20 7b 0a 09 20 20 20 20 20 20 20 20  ts = {..        
309a0 27 6c 6f 77 46 72 65 71 75 65 6e 63 79 27 3a 20  'lowFrequency': 
309b0 34 30 30 2c 0a 09 20 20 20 20 20 20 20 20 27 68  400,..        'h
309c0 69 67 68 46 72 65 71 75 65 6e 63 79 27 3a 20 32  ighFrequency': 2
309d0 35 30 30 2c 0a 09 20 20 20 20 20 20 20 20 27 51  500,..        'Q
309e0 27 3a 20 31 0a 09 20 20 20 20 7d 3b 0a 09 20 20  ': 1..    };..  
309f0 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 6c 65 61    /**... *  Clea
30a00 6e 20 75 70 2e 0a 09 09 20 2a 20 20 40 72 65 74  n up.... *  @ret
30a10 75 72 6e 73 20 7b 54 6f 6e 65 2e 4d 75 6c 74 69  urns {Tone.Multi
30a20 62 61 6e 64 53 70 6c 69 74 7d 20 74 68 69 73 0a  bandSplit} this.
30a30 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
30a40 4d 75 6c 74 69 62 61 6e 64 53 70 6c 69 74 2e 70  MultibandSplit.p
30a50 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65  rototype.dispose
30a60 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b   = function () {
30a70 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 70  ..        Tone.p
30a80 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65  rototype.dispose
30a90 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20  .call(this);..  
30aa0 20 20 20 20 20 20 74 68 69 73 2e 5f 77 72 69 74        this._writ
30ab0 61 62 6c 65 28 5b 0a 09 20 20 20 20 20 20 20 20  able([..        
30ac0 20 20 20 20 27 68 69 67 68 27 2c 0a 09 20 20 20      'high',..   
30ad0 20 20 20 20 20 20 20 20 20 27 6d 69 64 27 2c 0a           'mid',.
30ae0 09 20 20 20 20 20 20 20 20 20 20 20 20 27 6c 6f  .            'lo
30af0 77 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  w',..           
30b00 20 27 68 69 67 68 46 72 65 71 75 65 6e 63 79 27   'highFrequency'
30b10 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
30b20 6c 6f 77 46 72 65 71 75 65 6e 63 79 27 0a 09 20  lowFrequency'.. 
30b30 20 20 20 20 20 20 20 5d 29 3b 0a 09 20 20 20 20         ]);..    
30b40 20 20 20 20 74 68 69 73 2e 6c 6f 77 2e 64 69 73      this.low.dis
30b50 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20  pose();..       
30b60 20 74 68 69 73 2e 6c 6f 77 20 3d 20 6e 75 6c 6c   this.low = null
30b70 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
30b80 5f 6c 6f 77 4d 69 64 46 69 6c 74 65 72 2e 64 69  _lowMidFilter.di
30b90 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
30ba0 20 20 74 68 69 73 2e 5f 6c 6f 77 4d 69 64 46 69    this._lowMidFi
30bb0 6c 74 65 72 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20  lter = null;..  
30bc0 20 20 20 20 20 20 74 68 69 73 2e 6d 69 64 2e 64        this.mid.d
30bd0 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20  ispose();..     
30be0 20 20 20 74 68 69 73 2e 6d 69 64 20 3d 20 6e 75     this.mid = nu
30bf0 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ll;..        thi
30c00 73 2e 68 69 67 68 2e 64 69 73 70 6f 73 65 28 29  s.high.dispose()
30c10 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
30c20 68 69 67 68 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20  high = null;..  
30c30 20 20 20 20 20 20 74 68 69 73 2e 6c 6f 77 46 72        this.lowFr
30c40 65 71 75 65 6e 63 79 2e 64 69 73 70 6f 73 65 28  equency.dispose(
30c50 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
30c60 2e 6c 6f 77 46 72 65 71 75 65 6e 63 79 20 3d 20  .lowFrequency = 
30c70 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74  null;..        t
30c80 68 69 73 2e 68 69 67 68 46 72 65 71 75 65 6e 63  his.highFrequenc
30c90 79 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20  y.dispose();..  
30ca0 20 20 20 20 20 20 74 68 69 73 2e 68 69 67 68 46        this.highF
30cb0 72 65 71 75 65 6e 63 79 20 3d 20 6e 75 6c 6c 3b  requency = null;
30cc0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 51  ..        this.Q
30cd0 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20  .dispose();..   
30ce0 20 20 20 20 20 74 68 69 73 2e 51 20 3d 20 6e 75       this.Q = nu
30cf0 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74  ll;..        ret
30d00 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
30d10 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f  ;..    return To
30d20 6e 65 2e 4d 75 6c 74 69 62 61 6e 64 53 70 6c 69  ne.MultibandSpli
30d30 74 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28  t;..});..Module(
30d40 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20  function (Tone) 
30d50 7b 0a 09 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a  {..    ..    /**
30d60 0a 09 09 20 2a 20 20 40 63 6c 61 73 73 20 54 6f  ... *  @class To
30d70 6e 65 2e 45 51 33 20 69 73 20 61 20 74 68 72 65  ne.EQ3 is a thre
30d80 65 20 62 61 6e 64 20 45 51 20 77 69 74 68 20 63  e band EQ with c
30d90 6f 6e 74 72 6f 6c 20 6f 76 65 72 20 6c 6f 77 2c  ontrol over low,
30da0 20 6d 69 64 2c 20 61 6e 64 20 68 69 67 68 20 67   mid, and high g
30db0 61 69 6e 20 61 73 0a 09 09 20 2a 20 20 20 20 20  ain as... *     
30dc0 20 20 20 20 77 65 6c 6c 20 61 73 20 74 68 65 20      well as the 
30dd0 6c 6f 77 20 61 6e 64 20 68 69 67 68 20 63 72 6f  low and high cro
30de0 73 73 6f 76 65 72 20 66 72 65 71 75 65 6e 63 69  ssover frequenci
30df0 65 73 2e 0a 09 09 20 2a 0a 09 09 20 2a 20 20 40  es.... *... *  @
30e00 63 6f 6e 73 74 72 75 63 74 6f 72 0a 09 09 20 2a  constructor... *
30e10 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65    @extends {Tone
30e20 7d 0a 09 09 20 2a 20 20 0a 09 09 20 2a 20 20 40  }... *  ... *  @
30e30 70 61 72 61 6d 20 7b 44 65 63 69 62 65 6c 73 7c  param {Decibels|
30e40 4f 62 6a 65 63 74 7d 20 5b 6c 6f 77 4c 65 76 65  Object} [lowLeve
30e50 6c 5d 20 54 68 65 20 67 61 69 6e 20 61 70 70 6c  l] The gain appl
30e60 69 65 64 20 74 6f 20 74 68 65 20 6c 6f 77 73 2e  ied to the lows.
30e70 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 44  ... *  @param {D
30e80 65 63 69 62 65 6c 73 7d 20 5b 6d 69 64 4c 65 76  ecibels} [midLev
30e90 65 6c 5d 20 54 68 65 20 67 61 69 6e 20 61 70 70  el] The gain app
30ea0 6c 69 65 64 20 74 6f 20 74 68 65 20 6d 69 64 2e  lied to the mid.
30eb0 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 44  ... *  @param {D
30ec0 65 63 69 62 65 6c 73 7d 20 5b 68 69 67 68 4c 65  ecibels} [highLe
30ed0 76 65 6c 5d 20 54 68 65 20 67 61 69 6e 20 61 70  vel] The gain ap
30ee0 70 6c 69 65 64 20 74 6f 20 74 68 65 20 68 69 67  plied to the hig
30ef0 68 2e 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c  h.... *  @exampl
30f00 65 0a 09 09 20 2a 20 76 61 72 20 65 71 20 3d 20  e... * var eq = 
30f10 6e 65 77 20 54 6f 6e 65 2e 45 51 33 28 2d 31 30  new Tone.EQ3(-10
30f20 2c 20 33 2c 20 2d 32 30 29 3b 0a 09 09 20 2a 2f  , 3, -20);... */
30f30 0a 09 20 20 20 20 54 6f 6e 65 2e 45 51 33 20 3d  ..    Tone.EQ3 =
30f40 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
30f50 20 20 20 20 20 20 20 20 76 61 72 20 6f 70 74 69          var opti
30f60 6f 6e 73 20 3d 20 74 68 69 73 2e 6f 70 74 69 6f  ons = this.optio
30f70 6e 73 4f 62 6a 65 63 74 28 61 72 67 75 6d 65 6e  nsObject(argumen
30f80 74 73 2c 20 5b 0a 09 20 20 20 20 20 20 20 20 20  ts, [..         
30f90 20 20 20 27 6c 6f 77 27 2c 0a 09 20 20 20 20 20     'low',..     
30fa0 20 20 20 20 20 20 20 27 6d 69 64 27 2c 0a 09 20         'mid',.. 
30fb0 20 20 20 20 20 20 20 20 20 20 20 27 68 69 67 68             'high
30fc0 27 0a 09 20 20 20 20 20 20 20 20 5d 2c 20 54 6f  '..        ], To
30fd0 6e 65 2e 45 51 33 2e 64 65 66 61 75 6c 74 73 29  ne.EQ3.defaults)
30fe0 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
30ff0 09 09 20 2a 20 20 74 68 65 20 6f 75 74 70 75 74  .. *  the output
31000 20 6e 6f 64 65 0a 09 09 09 20 2a 20 20 40 74 79   node.... *  @ty
31010 70 65 20 7b 47 61 69 6e 4e 6f 64 65 7d 0a 09 09  pe {GainNode}...
31020 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
31030 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
31040 69 73 2e 6f 75 74 70 75 74 20 3d 20 6e 65 77 20  is.output = new 
31050 54 6f 6e 65 2e 47 61 69 6e 28 29 3b 0a 09 20 20  Tone.Gain();..  
31060 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
31070 20 74 68 65 20 6d 75 6c 74 69 62 61 6e 64 20 73   the multiband s
31080 70 6c 69 74 0a 09 09 09 20 2a 20 20 40 74 79 70  plit.... *  @typ
31090 65 20 7b 54 6f 6e 65 2e 4d 75 6c 74 69 62 61 6e  e {Tone.Multiban
310a0 64 53 70 6c 69 74 7d 0a 09 09 09 20 2a 20 20 40  dSplit}.... *  @
310b0 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
310c0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 75          this._mu
310d0 6c 74 69 62 61 6e 64 53 70 6c 69 74 20 3d 20 74  ltibandSplit = t
310e0 68 69 73 2e 69 6e 70 75 74 20 3d 20 6e 65 77 20  his.input = new 
310f0 54 6f 6e 65 2e 4d 75 6c 74 69 62 61 6e 64 53 70  Tone.MultibandSp
31100 6c 69 74 28 7b 0a 09 20 20 20 20 20 20 20 20 20  lit({..         
31110 20 20 20 27 6c 6f 77 46 72 65 71 75 65 6e 63 79     'lowFrequency
31120 27 3a 20 6f 70 74 69 6f 6e 73 2e 6c 6f 77 46 72  ': options.lowFr
31130 65 71 75 65 6e 63 79 2c 0a 09 20 20 20 20 20 20  equency,..      
31140 20 20 20 20 20 20 27 68 69 67 68 46 72 65 71 75        'highFrequ
31150 65 6e 63 79 27 3a 20 6f 70 74 69 6f 6e 73 2e 68  ency': options.h
31160 69 67 68 46 72 65 71 75 65 6e 63 79 0a 09 20 20  ighFrequency..  
31170 20 20 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 20        });..     
31180 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68     /**.... *  Th
31190 65 20 67 61 69 6e 20 66 6f 72 20 74 68 65 20 6c  e gain for the l
311a0 6f 77 65 72 20 73 69 67 6e 61 6c 73 0a 09 09 09  ower signals....
311b0 20 2a 20 20 40 74 79 70 65 20 20 7b 54 6f 6e 65   *  @type  {Tone
311c0 2e 47 61 69 6e 7d 0a 09 09 09 20 2a 20 20 40 70  .Gain}.... *  @p
311d0 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20  rivate.... */.. 
311e0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 6f 77         this._low
311f0 47 61 69 6e 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  Gain = new Tone.
31200 47 61 69 6e 28 6f 70 74 69 6f 6e 73 2e 6c 6f 77  Gain(options.low
31210 2c 20 54 6f 6e 65 2e 54 79 70 65 2e 44 65 63 69  , Tone.Type.Deci
31220 62 65 6c 73 29 3b 0a 09 20 20 20 20 20 20 20 20  bels);..        
31230 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 67  /**.... *  The g
31240 61 69 6e 20 66 6f 72 20 74 68 65 20 6d 69 64 20  ain for the mid 
31250 73 69 67 6e 61 6c 73 0a 09 09 09 20 2a 20 20 40  signals.... *  @
31260 74 79 70 65 20 20 7b 54 6f 6e 65 2e 47 61 69 6e  type  {Tone.Gain
31270 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  }.... *  @privat
31280 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
31290 20 20 74 68 69 73 2e 5f 6d 69 64 47 61 69 6e 20    this._midGain 
312a0 3d 20 6e 65 77 20 54 6f 6e 65 2e 47 61 69 6e 28  = new Tone.Gain(
312b0 6f 70 74 69 6f 6e 73 2e 6d 69 64 2c 20 54 6f 6e  options.mid, Ton
312c0 65 2e 54 79 70 65 2e 44 65 63 69 62 65 6c 73 29  e.Type.Decibels)
312d0 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
312e0 09 09 20 2a 20 54 68 65 20 67 61 69 6e 20 69 6e  .. * The gain in
312f0 20 64 65 63 69 62 65 6c 73 20 6f 66 20 74 68 65   decibels of the
31300 20 68 69 67 68 20 70 61 72 74 0a 09 09 09 20 2a   high part.... *
31310 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 47 61 69   @type {Tone.Gai
31320 6e 7d 0a 09 09 09 20 2a 20 40 70 72 69 76 61 74  n}.... * @privat
31330 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
31340 20 20 74 68 69 73 2e 5f 68 69 67 68 47 61 69 6e    this._highGain
31350 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 47 61 69 6e   = new Tone.Gain
31360 28 6f 70 74 69 6f 6e 73 2e 68 69 67 68 2c 20 54  (options.high, T
31370 6f 6e 65 2e 54 79 70 65 2e 44 65 63 69 62 65 6c  one.Type.Decibel
31380 73 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  s);..        /**
31390 0a 09 09 09 20 2a 20 54 68 65 20 67 61 69 6e 20  .... * The gain 
313a0 69 6e 20 64 65 63 69 62 65 6c 73 20 6f 66 20 74  in decibels of t
313b0 68 65 20 6c 6f 77 20 70 61 72 74 0a 09 09 09 20  he low part.... 
313c0 2a 20 40 74 79 70 65 20 7b 44 65 63 69 62 65 6c  * @type {Decibel
313d0 73 7d 0a 09 09 09 20 2a 20 40 73 69 67 6e 61 6c  s}.... * @signal
313e0 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
313f0 20 74 68 69 73 2e 6c 6f 77 20 3d 20 74 68 69 73   this.low = this
31400 2e 5f 6c 6f 77 47 61 69 6e 2e 67 61 69 6e 3b 0a  ._lowGain.gain;.
31410 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
31420 20 2a 20 54 68 65 20 67 61 69 6e 20 69 6e 20 64   * The gain in d
31430 65 63 69 62 65 6c 73 20 6f 66 20 74 68 65 20 6d  ecibels of the m
31440 69 64 20 70 61 72 74 0a 09 09 09 20 2a 20 40 74  id part.... * @t
31450 79 70 65 20 7b 44 65 63 69 62 65 6c 73 7d 0a 09  ype {Decibels}..
31460 09 09 20 2a 20 40 73 69 67 6e 61 6c 0a 09 09 09  .. * @signal....
31470 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
31480 73 2e 6d 69 64 20 3d 20 74 68 69 73 2e 5f 6d 69  s.mid = this._mi
31490 64 47 61 69 6e 2e 67 61 69 6e 3b 0a 09 20 20 20  dGain.gain;..   
314a0 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 54       /**.... * T
314b0 68 65 20 67 61 69 6e 20 69 6e 20 64 65 63 69 62  he gain in decib
314c0 65 6c 73 20 6f 66 20 74 68 65 20 68 69 67 68 20  els of the high 
314d0 70 61 72 74 0a 09 09 09 20 2a 20 40 74 79 70 65  part.... * @type
314e0 20 7b 44 65 63 69 62 65 6c 73 7d 0a 09 09 09 20   {Decibels}.... 
314f0 2a 20 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f  * @signal.... */
31500 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 68  ..        this.h
31510 69 67 68 20 3d 20 74 68 69 73 2e 5f 68 69 67 68  igh = this._high
31520 47 61 69 6e 2e 67 61 69 6e 3b 0a 09 20 20 20 20  Gain.gain;..    
31530 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54      /**.... *  T
31540 68 65 20 51 20 76 61 6c 75 65 20 66 6f 72 20 61  he Q value for a
31550 6c 6c 20 6f 66 20 74 68 65 20 66 69 6c 74 65 72  ll of the filter
31560 73 2e 20 0a 09 09 09 20 2a 20 20 40 74 79 70 65  s. .... *  @type
31570 20 7b 50 6f 73 69 74 69 76 65 7d 0a 09 09 09 20   {Positive}.... 
31580 2a 20 20 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a  *  @signal.... *
31590 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
315a0 51 20 3d 20 74 68 69 73 2e 5f 6d 75 6c 74 69 62  Q = this._multib
315b0 61 6e 64 53 70 6c 69 74 2e 51 3b 0a 09 20 20 20  andSplit.Q;..   
315c0 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
315d0 54 68 65 20 6c 6f 77 2f 6d 69 64 20 63 72 6f 73  The low/mid cros
315e0 73 6f 76 65 72 20 66 72 65 71 75 65 6e 63 79 2e  sover frequency.
315f0 20 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b   .... *  @type {
31600 46 72 65 71 75 65 6e 63 79 7d 0a 09 09 09 20 2a  Frequency}.... *
31610 20 20 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f    @signal.... */
31620 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c  ..        this.l
31630 6f 77 46 72 65 71 75 65 6e 63 79 20 3d 20 74 68  owFrequency = th
31640 69 73 2e 5f 6d 75 6c 74 69 62 61 6e 64 53 70 6c  is._multibandSpl
31650 69 74 2e 6c 6f 77 46 72 65 71 75 65 6e 63 79 3b  it.lowFrequency;
31660 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
31670 09 20 2a 20 20 54 68 65 20 6d 69 64 2f 68 69 67  . *  The mid/hig
31680 68 20 63 72 6f 73 73 6f 76 65 72 20 66 72 65 71  h crossover freq
31690 75 65 6e 63 79 2e 20 0a 09 09 09 20 2a 20 20 40  uency. .... *  @
316a0 74 79 70 65 20 7b 46 72 65 71 75 65 6e 63 79 7d  type {Frequency}
316b0 0a 09 09 09 20 2a 20 20 40 73 69 67 6e 61 6c 0a  .... *  @signal.
316c0 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
316d0 74 68 69 73 2e 68 69 67 68 46 72 65 71 75 65 6e  this.highFrequen
316e0 63 79 20 3d 20 74 68 69 73 2e 5f 6d 75 6c 74 69  cy = this._multi
316f0 62 61 6e 64 53 70 6c 69 74 2e 68 69 67 68 46 72  bandSplit.highFr
31700 65 71 75 65 6e 63 79 3b 0a 09 20 20 20 20 20 20  equency;..      
31710 20 20 2f 2f 74 68 65 20 66 72 65 71 75 65 6e 63    //the frequenc
31720 79 20 62 61 6e 64 73 0a 09 20 20 20 20 20 20 20  y bands..       
31730 20 74 68 69 73 2e 5f 6d 75 6c 74 69 62 61 6e 64   this._multiband
31740 53 70 6c 69 74 2e 6c 6f 77 2e 63 68 61 69 6e 28  Split.low.chain(
31750 74 68 69 73 2e 5f 6c 6f 77 47 61 69 6e 2c 20 74  this._lowGain, t
31760 68 69 73 2e 6f 75 74 70 75 74 29 3b 0a 09 20 20  his.output);..  
31770 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 75 6c 74        this._mult
31780 69 62 61 6e 64 53 70 6c 69 74 2e 6d 69 64 2e 63  ibandSplit.mid.c
31790 68 61 69 6e 28 74 68 69 73 2e 5f 6d 69 64 47 61  hain(this._midGa
317a0 69 6e 2c 20 74 68 69 73 2e 6f 75 74 70 75 74 29  in, this.output)
317b0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
317c0 5f 6d 75 6c 74 69 62 61 6e 64 53 70 6c 69 74 2e  _multibandSplit.
317d0 68 69 67 68 2e 63 68 61 69 6e 28 74 68 69 73 2e  high.chain(this.
317e0 5f 68 69 67 68 47 61 69 6e 2c 20 74 68 69 73 2e  _highGain, this.
317f0 6f 75 74 70 75 74 29 3b 0a 09 20 20 20 20 20 20  output);..      
31800 20 20 74 68 69 73 2e 5f 72 65 61 64 4f 6e 6c 79    this._readOnly
31810 28 5b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ([..            
31820 27 6c 6f 77 27 2c 0a 09 20 20 20 20 20 20 20 20  'low',..        
31830 20 20 20 20 27 6d 69 64 27 2c 0a 09 20 20 20 20      'mid',..    
31840 20 20 20 20 20 20 20 20 27 68 69 67 68 27 2c 0a          'high',.
31850 09 20 20 20 20 20 20 20 20 20 20 20 20 27 6c 6f  .            'lo
31860 77 46 72 65 71 75 65 6e 63 79 27 2c 0a 09 20 20  wFrequency',..  
31870 20 20 20 20 20 20 20 20 20 20 27 68 69 67 68 46            'highF
31880 72 65 71 75 65 6e 63 79 27 0a 09 20 20 20 20 20  requency'..     
31890 20 20 20 5d 29 3b 0a 09 20 20 20 20 7d 3b 0a 09     ]);..    };..
318a0 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28      Tone.extend(
318b0 54 6f 6e 65 2e 45 51 33 29 3b 0a 09 20 20 20 20  Tone.EQ3);..    
318c0 2f 2a 2a 0a 09 09 20 2a 20 20 74 68 65 20 64 65  /**... *  the de
318d0 66 61 75 6c 74 20 76 61 6c 75 65 73 0a 09 09 20  fault values... 
318e0 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 45 51 33  */..    Tone.EQ3
318f0 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b 0a 09 20  .defaults = {.. 
31900 20 20 20 20 20 20 20 27 6c 6f 77 27 3a 20 30 2c         'low': 0,
31910 0a 09 20 20 20 20 20 20 20 20 27 6d 69 64 27 3a  ..        'mid':
31920 20 30 2c 0a 09 20 20 20 20 20 20 20 20 27 68 69   0,..        'hi
31930 67 68 27 3a 20 30 2c 0a 09 20 20 20 20 20 20 20  gh': 0,..       
31940 20 27 6c 6f 77 46 72 65 71 75 65 6e 63 79 27 3a   'lowFrequency':
31950 20 34 30 30 2c 0a 09 20 20 20 20 20 20 20 20 27   400,..        '
31960 68 69 67 68 46 72 65 71 75 65 6e 63 79 27 3a 20  highFrequency': 
31970 32 35 30 30 0a 09 20 20 20 20 7d 3b 0a 09 20 20  2500..    };..  
31980 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 63 6c 65 61    /**... *  clea
31990 6e 20 75 70 0a 09 09 20 2a 20 20 40 72 65 74 75  n up... *  @retu
319a0 72 6e 73 20 7b 54 6f 6e 65 2e 45 51 33 7d 20 74  rns {Tone.EQ3} t
319b0 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  his... */..    T
319c0 6f 6e 65 2e 45 51 33 2e 70 72 6f 74 6f 74 79 70  one.EQ3.prototyp
319d0 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75 6e 63  e.dispose = func
319e0 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
319f0 20 20 20 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70     Tone.prototyp
31a00 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74  e.dispose.call(t
31a10 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20 20 74  his);..        t
31a20 68 69 73 2e 5f 77 72 69 74 61 62 6c 65 28 5b 0a  his._writable([.
31a30 09 20 20 20 20 20 20 20 20 20 20 20 20 27 6c 6f  .            'lo
31a40 77 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  w',..           
31a50 20 27 6d 69 64 27 2c 0a 09 20 20 20 20 20 20 20   'mid',..       
31a60 20 20 20 20 20 27 68 69 67 68 27 2c 0a 09 20 20       'high',..  
31a70 20 20 20 20 20 20 20 20 20 20 27 6c 6f 77 46 72            'lowFr
31a80 65 71 75 65 6e 63 79 27 2c 0a 09 20 20 20 20 20  equency',..     
31a90 20 20 20 20 20 20 20 27 68 69 67 68 46 72 65 71         'highFreq
31aa0 75 65 6e 63 79 27 0a 09 20 20 20 20 20 20 20 20  uency'..        
31ab0 5d 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ]);..        thi
31ac0 73 2e 5f 6d 75 6c 74 69 62 61 6e 64 53 70 6c 69  s._multibandSpli
31ad0 74 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20  t.dispose();..  
31ae0 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 75 6c 74        this._mult
31af0 69 62 61 6e 64 53 70 6c 69 74 20 3d 20 6e 75 6c  ibandSplit = nul
31b00 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  l;..        this
31b10 2e 6c 6f 77 46 72 65 71 75 65 6e 63 79 20 3d 20  .lowFrequency = 
31b20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74  null;..        t
31b30 68 69 73 2e 68 69 67 68 46 72 65 71 75 65 6e 63  his.highFrequenc
31b40 79 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20  y = null;..     
31b50 20 20 20 74 68 69 73 2e 5f 6c 6f 77 47 61 69 6e     this._lowGain
31b60 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20  .dispose();..   
31b70 20 20 20 20 20 74 68 69 73 2e 5f 6c 6f 77 47 61       this._lowGa
31b80 69 6e 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  in = null;..    
31b90 20 20 20 20 74 68 69 73 2e 5f 6d 69 64 47 61 69      this._midGai
31ba0 6e 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20  n.dispose();..  
31bb0 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 69 64 47        this._midG
31bc0 61 69 6e 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  ain = null;..   
31bd0 20 20 20 20 20 74 68 69 73 2e 5f 68 69 67 68 47       this._highG
31be0 61 69 6e 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09  ain.dispose();..
31bf0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 68 69          this._hi
31c00 67 68 47 61 69 6e 20 3d 20 6e 75 6c 6c 3b 0a 09  ghGain = null;..
31c10 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c 6f 77          this.low
31c20 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
31c30 20 20 74 68 69 73 2e 6d 69 64 20 3d 20 6e 75 6c    this.mid = nul
31c40 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  l;..        this
31c50 2e 68 69 67 68 20 3d 20 6e 75 6c 6c 3b 0a 09 20  .high = null;.. 
31c60 20 20 20 20 20 20 20 74 68 69 73 2e 51 20 3d 20         this.Q = 
31c70 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 72  null;..        r
31c80 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20  eturn this;..   
31c90 20 7d 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20   };..    return 
31ca0 54 6f 6e 65 2e 45 51 33 3b 0a 09 7d 29 3b 0a 09  Tone.EQ3;..});..
31cb0 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20  Module(function 
31cc0 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09  (Tone) {..    ..
31cd0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63      /**... *  @c
31ce0 6c 61 73 73 20 20 50 65 72 66 6f 72 6d 73 20 61  lass  Performs a
31cf0 20 6c 69 6e 65 61 72 20 73 63 61 6c 69 6e 67 20   linear scaling 
31d00 6f 6e 20 61 6e 20 69 6e 70 75 74 20 73 69 67 6e  on an input sign
31d10 61 6c 2e 0a 09 09 20 2a 20 20 20 20 20 20 20 20  al.... *        
31d20 20 20 53 63 61 6c 65 73 20 61 20 4e 6f 72 6d 61    Scales a Norma
31d30 6c 52 61 6e 67 65 20 69 6e 70 75 74 20 74 6f 20  lRange input to 
31d40 62 65 74 77 65 65 6e 0a 09 09 20 2a 20 20 20 20  between... *    
31d50 20 20 20 20 20 20 6f 75 74 70 75 74 4d 69 6e 20        outputMin 
31d60 61 6e 64 20 6f 75 74 70 75 74 4d 61 78 2e 0a 09  and outputMax...
31d70 09 20 2a 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74  . *... *  @const
31d80 72 75 63 74 6f 72 0a 09 09 20 2a 20 20 40 65 78  ructor... *  @ex
31d90 74 65 6e 64 73 20 7b 54 6f 6e 65 2e 53 69 67 6e  tends {Tone.Sign
31da0 61 6c 42 61 73 65 7d 0a 09 09 20 2a 20 20 40 70  alBase}... *  @p
31db0 61 72 61 6d 20 7b 6e 75 6d 62 65 72 7d 20 5b 6f  aram {number} [o
31dc0 75 74 70 75 74 4d 69 6e 3d 30 5d 20 54 68 65 20  utputMin=0] The 
31dd0 6f 75 74 70 75 74 20 76 61 6c 75 65 20 77 68 65  output value whe
31de0 6e 20 74 68 65 20 69 6e 70 75 74 20 69 73 20 30  n the input is 0
31df0 2e 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  . ... *  @param 
31e00 7b 6e 75 6d 62 65 72 7d 20 5b 6f 75 74 70 75 74  {number} [output
31e10 4d 61 78 3d 31 5d 09 54 68 65 20 6f 75 74 70 75  Max=1].The outpu
31e20 74 20 76 61 6c 75 65 20 77 68 65 6e 20 74 68 65  t value when the
31e30 20 69 6e 70 75 74 20 69 73 20 31 2e 20 0a 09 09   input is 1. ...
31e40 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20   *  @example... 
31e50 2a 20 76 61 72 20 73 63 61 6c 65 20 3d 20 6e 65  * var scale = ne
31e60 77 20 54 6f 6e 65 2e 53 63 61 6c 65 28 35 30 2c  w Tone.Scale(50,
31e70 20 31 30 30 29 3b 0a 09 09 20 2a 20 76 61 72 20   100);... * var 
31e80 73 69 67 6e 61 6c 20 3d 20 6e 65 77 20 54 6f 6e  signal = new Ton
31e90 65 2e 53 69 67 6e 61 6c 28 30 2e 35 29 2e 63 6f  e.Signal(0.5).co
31ea0 6e 6e 65 63 74 28 73 63 61 6c 65 29 3b 0a 09 09  nnect(scale);...
31eb0 20 2a 20 2f 2f 74 68 65 20 6f 75 74 70 75 74 20   * //the output 
31ec0 6f 66 20 73 63 61 6c 65 20 65 71 75 61 6c 73 20  of scale equals 
31ed0 37 35 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  75... */..    To
31ee0 6e 65 2e 53 63 61 6c 65 20 3d 20 66 75 6e 63 74  ne.Scale = funct
31ef0 69 6f 6e 20 28 6f 75 74 70 75 74 4d 69 6e 2c 20  ion (outputMin, 
31f00 6f 75 74 70 75 74 4d 61 78 29 20 7b 0a 09 20 20  outputMax) {..  
31f10 20 20 20 20 20 20 2f 2a 2a 20 0a 09 09 09 20 2a        /** .... *
31f20 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a    @private.... *
31f30 20 20 40 74 79 70 65 20 7b 6e 75 6d 62 65 72 7d    @type {number}
31f40 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
31f50 20 74 68 69 73 2e 5f 6f 75 74 70 75 74 4d 69 6e   this._outputMin
31f60 20 3d 20 74 68 69 73 2e 64 65 66 61 75 6c 74 41   = this.defaultA
31f70 72 67 28 6f 75 74 70 75 74 4d 69 6e 2c 20 30 29  rg(outputMin, 0)
31f80 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 20 0a  ;..        /** .
31f90 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
31fa0 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 6e 75  ... *  @type {nu
31fb0 6d 62 65 72 7d 0a 09 09 09 20 2a 2f 0a 09 20 20  mber}.... */..  
31fc0 20 20 20 20 20 20 74 68 69 73 2e 5f 6f 75 74 70        this._outp
31fd0 75 74 4d 61 78 20 3d 20 74 68 69 73 2e 64 65 66  utMax = this.def
31fe0 61 75 6c 74 41 72 67 28 6f 75 74 70 75 74 4d 61  aultArg(outputMa
31ff0 78 2c 20 31 29 3b 0a 09 20 20 20 20 20 20 20 20  x, 1);..        
32000 2f 2a 2a 20 0a 09 09 09 20 2a 20 20 40 70 72 69  /** .... *  @pri
32010 76 61 74 65 0a 09 09 09 20 2a 20 20 40 74 79 70  vate.... *  @typ
32020 65 20 7b 54 6f 6e 65 2e 4d 75 6c 74 69 70 6c 79  e {Tone.Multiply
32030 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  }.... *  @privat
32040 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
32050 20 20 74 68 69 73 2e 5f 73 63 61 6c 65 20 3d 20    this._scale = 
32060 74 68 69 73 2e 69 6e 70 75 74 20 3d 20 6e 65 77  this.input = new
32070 20 54 6f 6e 65 2e 4d 75 6c 74 69 70 6c 79 28 31   Tone.Multiply(1
32080 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 20  );..        /** 
32090 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  .... *  @private
320a0 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54  .... *  @type {T
320b0 6f 6e 65 2e 41 64 64 7d 0a 09 09 09 20 2a 20 20  one.Add}.... *  
320c0 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a  @private.... */.
320d0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 61  .        this._a
320e0 64 64 20 3d 20 74 68 69 73 2e 6f 75 74 70 75 74  dd = this.output
320f0 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 41 64 64 28   = new Tone.Add(
32100 30 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  0);..        thi
32110 73 2e 5f 73 63 61 6c 65 2e 63 6f 6e 6e 65 63 74  s._scale.connect
32120 28 74 68 69 73 2e 5f 61 64 64 29 3b 0a 09 20 20  (this._add);..  
32130 20 20 20 20 20 20 74 68 69 73 2e 5f 73 65 74 52        this._setR
32140 61 6e 67 65 28 29 3b 0a 09 20 20 20 20 7d 3b 0a  ange();..    };.
32150 09 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64  .    Tone.extend
32160 28 54 6f 6e 65 2e 53 63 61 6c 65 2c 20 54 6f 6e  (Tone.Scale, Ton
32170 65 2e 53 69 67 6e 61 6c 42 61 73 65 29 3b 0a 09  e.SignalBase);..
32180 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65      /**... * The
32190 20 6d 69 6e 69 6d 75 6d 20 6f 75 74 70 75 74 20   minimum output 
321a0 76 61 6c 75 65 2e 20 54 68 69 73 20 6e 75 6d 62  value. This numb
321b0 65 72 20 69 73 20 6f 75 74 70 75 74 20 77 68 65  er is output whe
321c0 6e 20 0a 09 09 20 2a 20 74 68 65 20 76 61 6c 75  n ... * the valu
321d0 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 73  e input value is
321e0 20 30 2e 20 0a 09 09 20 2a 20 40 6d 65 6d 62 65   0. ... * @membe
321f0 72 4f 66 20 54 6f 6e 65 2e 53 63 61 6c 65 23 0a  rOf Tone.Scale#.
32200 09 09 20 2a 20 40 74 79 70 65 20 7b 6e 75 6d 62  .. * @type {numb
32210 65 72 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 6d  er}... * @name m
32220 69 6e 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62  in... */..    Ob
32230 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65  ject.definePrope
32240 72 74 79 28 54 6f 6e 65 2e 53 63 61 6c 65 2e 70  rty(Tone.Scale.p
32250 72 6f 74 6f 74 79 70 65 2c 20 27 6d 69 6e 27 2c  rototype, 'min',
32260 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a   {..        get:
32270 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
32280 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
32290 72 6e 20 74 68 69 73 2e 5f 6f 75 74 70 75 74 4d  rn this._outputM
322a0 69 6e 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a  in;..        },.
322b0 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66 75  .        set: fu
322c0 6e 63 74 69 6f 6e 20 28 6d 69 6e 29 20 7b 0a 09  nction (min) {..
322d0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
322e0 2e 5f 6f 75 74 70 75 74 4d 69 6e 20 3d 20 6d 69  ._outputMin = mi
322f0 6e 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
32300 74 68 69 73 2e 5f 73 65 74 52 61 6e 67 65 28 29  this._setRange()
32310 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20  ;..        }..  
32320 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09    });..    /**..
32330 09 20 2a 20 54 68 65 20 6d 61 78 69 6d 75 6d 20  . * The maximum 
32340 6f 75 74 70 75 74 20 76 61 6c 75 65 2e 20 54 68  output value. Th
32350 69 73 20 6e 75 6d 62 65 72 20 69 73 20 6f 75 74  is number is out
32360 70 75 74 20 77 68 65 6e 20 0a 09 09 20 2a 20 74  put when ... * t
32370 68 65 20 76 61 6c 75 65 20 69 6e 70 75 74 20 76  he value input v
32380 61 6c 75 65 20 69 73 20 31 2e 20 0a 09 09 20 2a  alue is 1. ... *
32390 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e   @memberOf Tone.
323a0 53 63 61 6c 65 23 0a 09 09 20 2a 20 40 74 79 70  Scale#... * @typ
323b0 65 20 7b 6e 75 6d 62 65 72 7d 0a 09 09 20 2a 20  e {number}... * 
323c0 40 6e 61 6d 65 20 6d 61 78 0a 09 09 20 2a 2f 0a  @name max... */.
323d0 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69  .    Object.defi
323e0 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e  neProperty(Tone.
323f0 53 63 61 6c 65 2e 70 72 6f 74 6f 74 79 70 65 2c  Scale.prototype,
32400 20 27 6d 61 78 27 2c 20 7b 0a 09 20 20 20 20 20   'max', {..     
32410 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e     get: function
32420 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20   () {..         
32430 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f     return this._
32440 6f 75 74 70 75 74 4d 61 78 3b 0a 09 20 20 20 20  outputMax;..    
32450 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20      },..        
32460 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 6d  set: function (m
32470 61 78 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ax) {..         
32480 20 20 20 74 68 69 73 2e 5f 6f 75 74 70 75 74 4d     this._outputM
32490 61 78 20 3d 20 6d 61 78 3b 0a 09 20 20 20 20 20  ax = max;..     
324a0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 65 74         this._set
324b0 52 61 6e 67 65 28 29 3b 0a 09 20 20 20 20 20 20  Range();..      
324c0 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20    }..    });..  
324d0 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 73 65 74 20    /**... *  set 
324e0 74 68 65 20 76 61 6c 75 65 73 0a 09 09 20 2a 20  the values... * 
324f0 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a   @private... */.
32500 09 20 20 20 20 54 6f 6e 65 2e 53 63 61 6c 65 2e  .    Tone.Scale.
32510 70 72 6f 74 6f 74 79 70 65 2e 5f 73 65 74 52 61  prototype._setRa
32520 6e 67 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  nge = function (
32530 29 20 7b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ) {..        thi
32540 73 2e 5f 61 64 64 2e 76 61 6c 75 65 20 3d 20 74  s._add.value = t
32550 68 69 73 2e 5f 6f 75 74 70 75 74 4d 69 6e 3b 0a  his._outputMin;.
32560 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73  .        this._s
32570 63 61 6c 65 2e 76 61 6c 75 65 20 3d 20 74 68 69  cale.value = thi
32580 73 2e 5f 6f 75 74 70 75 74 4d 61 78 20 2d 20 74  s._outputMax - t
32590 68 69 73 2e 5f 6f 75 74 70 75 74 4d 69 6e 3b 0a  his._outputMin;.
325a0 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
325b0 0a 09 09 20 2a 20 20 43 6c 65 61 6e 20 75 70 2e  ... *  Clean up.
325c0 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20  ... *  @returns 
325d0 7b 54 6f 6e 65 2e 53 63 61 6c 65 7d 20 74 68 69  {Tone.Scale} thi
325e0 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  s... */..    Ton
325f0 65 2e 53 63 61 6c 65 2e 70 72 6f 74 6f 74 79 70  e.Scale.prototyp
32600 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75 6e 63  e.dispose = func
32610 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
32620 20 20 20 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70     Tone.prototyp
32630 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74  e.dispose.call(t
32640 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20 20 74  his);..        t
32650 68 69 73 2e 5f 61 64 64 2e 64 69 73 70 6f 73 65  his._add.dispose
32660 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ();..        thi
32670 73 2e 5f 61 64 64 20 3d 20 6e 75 6c 6c 3b 0a 09  s._add = null;..
32680 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 63          this._sc
32690 61 6c 65 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09  ale.dispose();..
326a0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 63          this._sc
326b0 61 6c 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  ale = null;..   
326c0 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
326d0 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 72  ;..    };..    r
326e0 65 74 75 72 6e 20 54 6f 6e 65 2e 53 63 61 6c 65  eturn Tone.Scale
326f0 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66  ;..});..Module(f
32700 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b  unction (Tone) {
32710 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
32720 40 63 6c 61 73 73 20 20 50 65 72 66 6f 72 6d 73  @class  Performs
32730 20 61 6e 20 65 78 70 6f 6e 65 6e 74 69 61 6c 20   an exponential 
32740 73 63 61 6c 69 6e 67 20 6f 6e 20 61 6e 20 69 6e  scaling on an in
32750 70 75 74 20 73 69 67 6e 61 6c 2e 0a 09 09 20 2a  put signal.... *
32760 20 20 20 20 20 20 20 20 20 20 53 63 61 6c 65 73            Scales
32770 20 61 20 4e 6f 72 6d 61 6c 52 61 6e 67 65 20 76   a NormalRange v
32780 61 6c 75 65 20 5b 30 2c 31 5d 20 65 78 70 6f 6e  alue [0,1] expon
32790 65 6e 74 69 61 6c 6c 79 0a 09 09 20 2a 20 20 20  entially... *   
327a0 20 20 20 20 20 20 20 74 6f 20 74 68 65 20 6f 75         to the ou
327b0 74 70 75 74 20 72 61 6e 67 65 20 6f 66 20 6f 75  tput range of ou
327c0 74 70 75 74 4d 69 6e 20 74 6f 20 6f 75 74 70 75  tputMin to outpu
327d0 74 4d 61 78 2e 0a 09 09 20 2a 0a 09 09 20 2a 20  tMax.... *... * 
327e0 20 40 63 6f 6e 73 74 72 75 63 74 6f 72 0a 09 09   @constructor...
327f0 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f   *  @extends {To
32800 6e 65 2e 53 69 67 6e 61 6c 42 61 73 65 7d 0a 09  ne.SignalBase}..
32810 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 6e 75 6d  . *  @param {num
32820 62 65 72 7d 20 5b 6f 75 74 70 75 74 4d 69 6e 3d  ber} [outputMin=
32830 30 5d 20 54 68 65 20 6f 75 74 70 75 74 20 76 61  0] The output va
32840 6c 75 65 20 77 68 65 6e 20 74 68 65 20 69 6e 70  lue when the inp
32850 75 74 20 69 73 20 30 2e 20 0a 09 09 20 2a 20 20  ut is 0. ... *  
32860 40 70 61 72 61 6d 20 7b 6e 75 6d 62 65 72 7d 20  @param {number} 
32870 5b 6f 75 74 70 75 74 4d 61 78 3d 31 5d 09 54 68  [outputMax=1].Th
32880 65 20 6f 75 74 70 75 74 20 76 61 6c 75 65 20 77  e output value w
32890 68 65 6e 20 74 68 65 20 69 6e 70 75 74 20 69 73  hen the input is
328a0 20 31 2e 20 0a 09 09 20 2a 20 20 40 70 61 72 61   1. ... *  @para
328b0 6d 20 7b 6e 75 6d 62 65 72 7d 20 5b 65 78 70 6f  m {number} [expo
328c0 6e 65 6e 74 3d 32 5d 20 54 68 65 20 65 78 70 6f  nent=2] The expo
328d0 6e 65 6e 74 20 77 68 69 63 68 20 73 63 61 6c 65  nent which scale
328e0 73 20 74 68 65 20 69 6e 63 6f 6d 69 6e 67 20 73  s the incoming s
328f0 69 67 6e 61 6c 2e 0a 09 09 20 2a 20 20 40 65 78  ignal.... *  @ex
32900 61 6d 70 6c 65 0a 09 09 20 2a 20 76 61 72 20 73  ample... * var s
32910 63 61 6c 65 45 78 70 20 3d 20 6e 65 77 20 54 6f  caleExp = new To
32920 6e 65 2e 53 63 61 6c 65 45 78 70 28 30 2c 20 31  ne.ScaleExp(0, 1
32930 30 30 2c 20 32 29 3b 0a 09 09 20 2a 20 76 61 72  00, 2);... * var
32940 20 73 69 67 6e 61 6c 20 3d 20 6e 65 77 20 54 6f   signal = new To
32950 6e 65 2e 53 69 67 6e 61 6c 28 30 2e 35 29 2e 63  ne.Signal(0.5).c
32960 6f 6e 6e 65 63 74 28 73 63 61 6c 65 45 78 70 29  onnect(scaleExp)
32970 3b 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  ;... */..    Ton
32980 65 2e 53 63 61 6c 65 45 78 70 20 3d 20 66 75 6e  e.ScaleExp = fun
32990 63 74 69 6f 6e 20 28 6f 75 74 70 75 74 4d 69 6e  ction (outputMin
329a0 2c 20 6f 75 74 70 75 74 4d 61 78 2c 20 65 78 70  , outputMax, exp
329b0 6f 6e 65 6e 74 29 20 7b 0a 09 20 20 20 20 20 20  onent) {..      
329c0 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 73 63 61    /**.... *  sca
329d0 6c 65 20 74 68 65 20 69 6e 70 75 74 20 74 6f 20  le the input to 
329e0 74 68 65 20 6f 75 74 70 75 74 20 72 61 6e 67 65  the output range
329f0 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54  .... *  @type {T
32a00 6f 6e 65 2e 53 63 61 6c 65 7d 0a 09 09 09 20 2a  one.Scale}.... *
32a10 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a    @private.... *
32a20 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
32a30 5f 73 63 61 6c 65 20 3d 20 74 68 69 73 2e 6f 75  _scale = this.ou
32a40 74 70 75 74 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  tput = new Tone.
32a50 53 63 61 6c 65 28 6f 75 74 70 75 74 4d 69 6e 2c  Scale(outputMin,
32a60 20 6f 75 74 70 75 74 4d 61 78 29 3b 0a 09 20 20   outputMax);..  
32a70 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
32a80 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 20   @private.... * 
32a90 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 50 6f 77   @type {Tone.Pow
32aa0 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  }.... *  @privat
32ab0 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
32ac0 20 20 74 68 69 73 2e 5f 65 78 70 20 3d 20 74 68    this._exp = th
32ad0 69 73 2e 69 6e 70 75 74 20 3d 20 6e 65 77 20 54  is.input = new T
32ae0 6f 6e 65 2e 50 6f 77 28 74 68 69 73 2e 64 65 66  one.Pow(this.def
32af0 61 75 6c 74 41 72 67 28 65 78 70 6f 6e 65 6e 74  aultArg(exponent
32b00 2c 20 32 29 29 3b 0a 09 20 20 20 20 20 20 20 20  , 2));..        
32b10 74 68 69 73 2e 5f 65 78 70 2e 63 6f 6e 6e 65 63  this._exp.connec
32b20 74 28 74 68 69 73 2e 5f 73 63 61 6c 65 29 3b 0a  t(this._scale);.
32b30 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e  .    };..    Ton
32b40 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 53 63  e.extend(Tone.Sc
32b50 61 6c 65 45 78 70 2c 20 54 6f 6e 65 2e 53 69 67  aleExp, Tone.Sig
32b60 6e 61 6c 42 61 73 65 29 3b 0a 09 20 20 20 20 2f  nalBase);..    /
32b70 2a 2a 0a 09 09 20 2a 20 49 6e 73 74 65 61 64 20  **... * Instead 
32b80 6f 66 20 69 6e 74 65 72 70 6f 6c 61 74 69 6e 67  of interpolating
32b90 20 6c 69 6e 65 61 72 6c 79 20 62 65 74 77 65 65   linearly betwee
32ba0 6e 20 74 68 65 20 3c 63 6f 64 65 3e 6d 69 6e 3c  n the <code>min<
32bb0 2f 63 6f 64 65 3e 20 61 6e 64 20 0a 09 09 20 2a  /code> and ... *
32bc0 20 3c 63 6f 64 65 3e 6d 61 78 3c 2f 63 6f 64 65   <code>max</code
32bd0 3e 20 76 61 6c 75 65 73 2c 20 73 65 74 74 69 6e  > values, settin
32be0 67 20 74 68 65 20 65 78 70 6f 6e 65 6e 74 20 77  g the exponent w
32bf0 69 6c 6c 20 69 6e 74 65 72 70 6f 6c 61 74 65 20  ill interpolate 
32c00 62 65 74 77 65 65 6e 0a 09 09 20 2a 20 74 68 65  between... * the
32c10 20 74 77 6f 20 76 61 6c 75 65 73 20 77 69 74 68   two values with
32c20 20 61 6e 20 65 78 70 6f 6e 65 6e 74 69 61 6c 20   an exponential 
32c30 63 75 72 76 65 2e 20 0a 09 09 20 2a 20 40 6d 65  curve. ... * @me
32c40 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 53 63 61 6c  mberOf Tone.Scal
32c50 65 45 78 70 23 0a 09 09 20 2a 20 40 74 79 70 65  eExp#... * @type
32c60 20 7b 6e 75 6d 62 65 72 7d 0a 09 09 20 2a 20 40   {number}... * @
32c70 6e 61 6d 65 20 65 78 70 6f 6e 65 6e 74 0a 09 09  name exponent...
32c80 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e   */..    Object.
32c90 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54  defineProperty(T
32ca0 6f 6e 65 2e 53 63 61 6c 65 45 78 70 2e 70 72 6f  one.ScaleExp.pro
32cb0 74 6f 74 79 70 65 2c 20 27 65 78 70 6f 6e 65 6e  totype, 'exponen
32cc0 74 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67  t', {..        g
32cd0 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  et: function () 
32ce0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
32cf0 65 74 75 72 6e 20 74 68 69 73 2e 5f 65 78 70 2e  eturn this._exp.
32d00 76 61 6c 75 65 3b 0a 09 20 20 20 20 20 20 20 20  value;..        
32d10 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a  },..        set:
32d20 20 66 75 6e 63 74 69 6f 6e 20 28 65 78 70 29 20   function (exp) 
32d30 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
32d40 68 69 73 2e 5f 65 78 70 2e 76 61 6c 75 65 20 3d  his._exp.value =
32d50 20 65 78 70 3b 0a 09 20 20 20 20 20 20 20 20 7d   exp;..        }
32d60 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f  ..    });..    /
32d70 2a 2a 0a 09 09 20 2a 20 54 68 65 20 6d 69 6e 69  **... * The mini
32d80 6d 75 6d 20 6f 75 74 70 75 74 20 76 61 6c 75 65  mum output value
32d90 2e 20 54 68 69 73 20 6e 75 6d 62 65 72 20 69 73  . This number is
32da0 20 6f 75 74 70 75 74 20 77 68 65 6e 20 0a 09 09   output when ...
32db0 20 2a 20 74 68 65 20 76 61 6c 75 65 20 69 6e 70   * the value inp
32dc0 75 74 20 76 61 6c 75 65 20 69 73 20 30 2e 20 0a  ut value is 0. .
32dd0 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54  .. * @memberOf T
32de0 6f 6e 65 2e 53 63 61 6c 65 45 78 70 23 0a 09 09  one.ScaleExp#...
32df0 20 2a 20 40 74 79 70 65 20 7b 6e 75 6d 62 65 72   * @type {number
32e00 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 6d 69 6e  }... * @name min
32e10 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65  ... */..    Obje
32e20 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74  ct.definePropert
32e30 79 28 54 6f 6e 65 2e 53 63 61 6c 65 45 78 70 2e  y(Tone.ScaleExp.
32e40 70 72 6f 74 6f 74 79 70 65 2c 20 27 6d 69 6e 27  prototype, 'min'
32e50 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74  , {..        get
32e60 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  : function () {.
32e70 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
32e80 75 72 6e 20 74 68 69 73 2e 5f 73 63 61 6c 65 2e  urn this._scale.
32e90 6d 69 6e 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c  min;..        },
32ea0 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66  ..        set: f
32eb0 75 6e 63 74 69 6f 6e 20 28 6d 69 6e 29 20 7b 0a  unction (min) {.
32ec0 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
32ed0 73 2e 5f 73 63 61 6c 65 2e 6d 69 6e 20 3d 20 6d  s._scale.min = m
32ee0 69 6e 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  in;..        }..
32ef0 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a      });..    /**
32f00 0a 09 09 20 2a 20 54 68 65 20 6d 61 78 69 6d 75  ... * The maximu
32f10 6d 20 6f 75 74 70 75 74 20 76 61 6c 75 65 2e 20  m output value. 
32f20 54 68 69 73 20 6e 75 6d 62 65 72 20 69 73 20 6f  This number is o
32f30 75 74 70 75 74 20 77 68 65 6e 20 0a 09 09 20 2a  utput when ... *
32f40 20 74 68 65 20 76 61 6c 75 65 20 69 6e 70 75 74   the value input
32f50 20 76 61 6c 75 65 20 69 73 20 31 2e 20 0a 09 09   value is 1. ...
32f60 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e   * @memberOf Ton
32f70 65 2e 53 63 61 6c 65 45 78 70 23 0a 09 09 20 2a  e.ScaleExp#... *
32f80 20 40 74 79 70 65 20 7b 6e 75 6d 62 65 72 7d 0a   @type {number}.
32f90 09 09 20 2a 20 40 6e 61 6d 65 20 6d 61 78 0a 09  .. * @name max..
32fa0 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74  . */..    Object
32fb0 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28  .defineProperty(
32fc0 54 6f 6e 65 2e 53 63 61 6c 65 45 78 70 2e 70 72  Tone.ScaleExp.pr
32fd0 6f 74 6f 74 79 70 65 2c 20 27 6d 61 78 27 2c 20  ototype, 'max', 
32fe0 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a 20  {..        get: 
32ff0 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
33000 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
33010 6e 20 74 68 69 73 2e 5f 73 63 61 6c 65 2e 6d 61  n this._scale.ma
33020 78 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09  x;..        },..
33030 20 20 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e          set: fun
33040 63 74 69 6f 6e 20 28 6d 61 78 29 20 7b 0a 09 20  ction (max) {.. 
33050 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
33060 5f 73 63 61 6c 65 2e 6d 61 78 20 3d 20 6d 61 78  _scale.max = max
33070 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20  ;..        }..  
33080 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09    });..    /**..
33090 09 20 2a 20 20 43 6c 65 61 6e 20 75 70 2e 0a 09  . *  Clean up...
330a0 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54  . *  @returns {T
330b0 6f 6e 65 2e 53 63 61 6c 65 45 78 70 7d 20 74 68  one.ScaleExp} th
330c0 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  is... */..    To
330d0 6e 65 2e 53 63 61 6c 65 45 78 70 2e 70 72 6f 74  ne.ScaleExp.prot
330e0 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20  otype.dispose = 
330f0 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
33100 20 20 20 20 20 20 20 54 6f 6e 65 2e 70 72 6f 74         Tone.prot
33110 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 2e 63 61  otype.dispose.ca
33120 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20 20 20 20  ll(this);..     
33130 20 20 20 74 68 69 73 2e 5f 73 63 61 6c 65 2e 64     this._scale.d
33140 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20  ispose();..     
33150 20 20 20 74 68 69 73 2e 5f 73 63 61 6c 65 20 3d     this._scale =
33160 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
33170 74 68 69 73 2e 5f 65 78 70 2e 64 69 73 70 6f 73  this._exp.dispos
33180 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  e();..        th
33190 69 73 2e 5f 65 78 70 20 3d 20 6e 75 6c 6c 3b 0a  is._exp = null;.
331a0 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
331b0 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20  this;..    };.. 
331c0 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 53     return Tone.S
331d0 63 61 6c 65 45 78 70 3b 0a 09 7d 29 3b 0a 09 4d  caleExp;..});..M
331e0 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28  odule(function (
331f0 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09 20  Tone) {..    .. 
33200 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c     /**... *  @cl
33210 61 73 73 20 57 72 61 70 70 65 72 20 61 72 6f 75  ass Wrapper arou
33220 6e 64 20 57 65 62 20 41 75 64 69 6f 27 73 20 6e  nd Web Audio's n
33230 61 74 69 76 65 20 5b 44 65 6c 61 79 4e 6f 64 65  ative [DelayNode
33240 5d 28 68 74 74 70 3a 2f 2f 77 65 62 61 75 64 69  ](http://webaudi
33250 6f 2e 67 69 74 68 75 62 2e 69 6f 2f 77 65 62 2d  o.github.io/web-
33260 61 75 64 69 6f 2d 61 70 69 2f 23 74 68 65 2d 64  audio-api/#the-d
33270 65 6c 61 79 6e 6f 64 65 2d 69 6e 74 65 72 66 61  elaynode-interfa
33280 63 65 29 2e 20 0a 09 09 20 2a 20 20 40 65 78 74  ce). ... *  @ext
33290 65 6e 64 73 20 7b 54 6f 6e 65 7d 0a 09 09 20 2a  ends {Tone}... *
332a0 20 20 40 70 61 72 61 6d 20 7b 54 69 6d 65 3d 7d    @param {Time=}
332b0 20 64 65 6c 61 79 54 69 6d 65 20 54 68 65 20 64   delayTime The d
332c0 65 6c 61 79 20 61 70 70 6c 69 65 64 20 74 6f 20  elay applied to 
332d0 74 68 65 20 69 6e 63 6f 6d 69 6e 67 20 73 69 67  the incoming sig
332e0 6e 61 6c 2e 0a 09 09 20 2a 20 20 40 70 61 72 61  nal.... *  @para
332f0 6d 20 7b 54 69 6d 65 3d 7d 20 6d 61 78 44 65 6c  m {Time=} maxDel
33300 61 79 20 54 68 65 20 6d 61 78 69 6d 75 6d 20 64  ay The maximum d
33310 65 6c 61 79 20 74 69 6d 65 2e 20 0a 09 09 20 2a  elay time. ... *
33320 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 44 65 6c 61  /..    Tone.Dela
33330 79 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  y = function () 
33340 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 6f  {..        var o
33350 70 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e 6f 70  ptions = this.op
33360 74 69 6f 6e 73 4f 62 6a 65 63 74 28 61 72 67 75  tionsObject(argu
33370 6d 65 6e 74 73 2c 20 5b 0a 09 20 20 20 20 20 20  ments, [..      
33380 20 20 20 20 20 20 27 64 65 6c 61 79 54 69 6d 65        'delayTime
33390 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ',..            
333a0 27 6d 61 78 44 65 6c 61 79 27 0a 09 20 20 20 20  'maxDelay'..    
333b0 20 20 20 20 5d 2c 20 54 6f 6e 65 2e 44 65 6c 61      ], Tone.Dela
333c0 79 2e 64 65 66 61 75 6c 74 73 29 3b 0a 09 20 20  y.defaults);..  
333d0 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
333e0 20 54 68 65 20 6e 61 74 69 76 65 20 64 65 6c 61   The native dela
333f0 79 20 6e 6f 64 65 0a 09 09 09 20 2a 20 20 40 74  y node.... *  @t
33400 79 70 65 20 7b 44 65 6c 61 79 4e 6f 64 65 7d 0a  ype {DelayNode}.
33410 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
33420 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
33430 74 68 69 73 2e 5f 64 65 6c 61 79 4e 6f 64 65 20  this._delayNode 
33440 3d 20 74 68 69 73 2e 69 6e 70 75 74 20 3d 20 74  = this.input = t
33450 68 69 73 2e 6f 75 74 70 75 74 20 3d 20 74 68 69  his.output = thi
33460 73 2e 63 6f 6e 74 65 78 74 2e 63 72 65 61 74 65  s.context.create
33470 44 65 6c 61 79 28 74 68 69 73 2e 74 6f 53 65 63  Delay(this.toSec
33480 6f 6e 64 73 28 6f 70 74 69 6f 6e 73 2e 6d 61 78  onds(options.max
33490 44 65 6c 61 79 29 29 3b 0a 09 20 20 20 20 20 20  Delay));..      
334a0 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65    /**.... *  The
334b0 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20   amount of time 
334c0 74 68 65 20 69 6e 63 6f 6d 69 6e 67 20 73 69 67  the incoming sig
334d0 6e 61 6c 20 69 73 0a 09 09 09 20 2a 20 20 64 65  nal is.... *  de
334e0 6c 61 79 65 64 2e 20 0a 09 09 09 20 2a 20 20 40  layed. .... *  @
334f0 74 79 70 65 20 7b 54 6f 6e 65 2e 50 61 72 61 6d  type {Tone.Param
33500 7d 0a 09 09 09 20 2a 20 20 40 73 69 67 6e 61 6c  }.... *  @signal
33510 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
33520 20 74 68 69 73 2e 64 65 6c 61 79 54 69 6d 65 20   this.delayTime 
33530 3d 20 6e 65 77 20 54 6f 6e 65 2e 50 61 72 61 6d  = new Tone.Param
33540 28 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ({..            
33550 27 70 61 72 61 6d 27 3a 20 74 68 69 73 2e 5f 64  'param': this._d
33560 65 6c 61 79 4e 6f 64 65 2e 64 65 6c 61 79 54 69  elayNode.delayTi
33570 6d 65 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  me,..           
33580 20 27 75 6e 69 74 73 27 3a 20 54 6f 6e 65 2e 54   'units': Tone.T
33590 79 70 65 2e 54 69 6d 65 2c 0a 09 20 20 20 20 20  ype.Time,..     
335a0 20 20 20 20 20 20 20 27 76 61 6c 75 65 27 3a 20         'value': 
335b0 6f 70 74 69 6f 6e 73 2e 64 65 6c 61 79 54 69 6d  options.delayTim
335c0 65 0a 09 20 20 20 20 20 20 20 20 7d 29 3b 0a 09  e..        });..
335d0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 72 65          this._re
335e0 61 64 4f 6e 6c 79 28 27 64 65 6c 61 79 54 69 6d  adOnly('delayTim
335f0 65 27 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  e');..    };..  
33600 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f    Tone.extend(To
33610 6e 65 2e 44 65 6c 61 79 29 3b 0a 09 20 20 20 20  ne.Delay);..    
33620 2f 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20 64 65  /**... *  The de
33630 66 61 75 6c 74 73 0a 09 09 20 2a 20 20 40 63 6f  faults... *  @co
33640 6e 73 74 0a 09 09 20 2a 20 20 40 74 79 70 65 20  nst... *  @type 
33650 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a   {Object}... */.
33660 09 20 20 20 20 54 6f 6e 65 2e 44 65 6c 61 79 2e  .    Tone.Delay.
33670 64 65 66 61 75 6c 74 73 20 3d 20 7b 0a 09 20 20  defaults = {..  
33680 20 20 20 20 20 20 27 6d 61 78 44 65 6c 61 79 27        'maxDelay'
33690 3a 20 31 2c 0a 09 20 20 20 20 20 20 20 20 27 64  : 1,..        'd
336a0 65 6c 61 79 54 69 6d 65 27 3a 20 30 0a 09 20 20  elayTime': 0..  
336b0 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    };..    /**...
336c0 20 2a 20 20 43 6c 65 61 6e 20 75 70 2e 0a 09 09   *  Clean up....
336d0 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 54 6f   *  @return  {To
336e0 6e 65 2e 44 65 6c 61 79 7d 20 20 74 68 69 73 0a  ne.Delay}  this.
336f0 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
33700 44 65 6c 61 79 2e 70 72 6f 74 6f 74 79 70 65 2e  Delay.prototype.
33710 64 69 73 70 6f 73 65 20 3d 20 66 75 6e 63 74 69  dispose = functi
33720 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
33730 20 54 6f 6e 65 2e 50 61 72 61 6d 2e 70 72 6f 74   Tone.Param.prot
33740 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 2e 63 61  otype.dispose.ca
33750 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20 20 20 20  ll(this);..     
33760 20 20 20 74 68 69 73 2e 5f 64 65 6c 61 79 4e 6f     this._delayNo
33770 64 65 2e 64 69 73 63 6f 6e 6e 65 63 74 28 29 3b  de.disconnect();
33780 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
33790 64 65 6c 61 79 4e 6f 64 65 20 3d 20 6e 75 6c 6c  delayNode = null
337a0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
337b0 5f 77 72 69 74 61 62 6c 65 28 27 64 65 6c 61 79  _writable('delay
337c0 54 69 6d 65 27 29 3b 0a 09 20 20 20 20 20 20 20  Time');..       
337d0 20 74 68 69 73 2e 64 65 6c 61 79 54 69 6d 65 20   this.delayTime 
337e0 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
337f0 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20   return this;.. 
33800 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74 75 72     };..    retur
33810 6e 20 54 6f 6e 65 2e 44 65 6c 61 79 3b 0a 09 7d  n Tone.Delay;..}
33820 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74  );..Module(funct
33830 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20  ion (Tone) {..  
33840 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a    ..    /**... *
33850 20 20 40 63 6c 61 73 73 20 43 6f 6d 62 20 66 69    @class Comb fi
33860 6c 74 65 72 73 20 61 72 65 20 62 61 73 69 63 20  lters are basic 
33870 62 75 69 6c 64 69 6e 67 20 62 6c 6f 63 6b 73 20  building blocks 
33880 66 6f 72 20 70 68 79 73 69 63 61 6c 20 6d 6f 64  for physical mod
33890 65 6c 69 6e 67 2e 20 52 65 61 64 20 6d 6f 72 65  eling. Read more
338a0 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 61 62  ... *         ab
338b0 6f 75 74 20 63 6f 6d 62 20 66 69 6c 74 65 72 73  out comb filters
338c0 20 6f 6e 20 5b 43 43 52 4d 41 27 73 20 77 65 62   on [CCRMA's web
338d0 73 69 74 65 5d 28 68 74 74 70 73 3a 2f 2f 63 63  site](https://cc
338e0 72 6d 61 2e 73 74 61 6e 66 6f 72 64 2e 65 64 75  rma.stanford.edu
338f0 2f 7e 6a 6f 73 2f 70 61 73 70 2f 46 65 65 64 62  /~jos/pasp/Feedb
33900 61 63 6b 5f 43 6f 6d 62 5f 46 69 6c 74 65 72 73  ack_Comb_Filters
33910 2e 68 74 6d 6c 29 2e 0a 09 09 20 2a 0a 09 09 20  .html).... *... 
33920 2a 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e  *  @extends {Ton
33930 65 7d 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 72  e}... *  @constr
33940 75 63 74 6f 72 0a 09 09 20 2a 20 20 40 70 61 72  uctor... *  @par
33950 61 6d 20 7b 54 69 6d 65 7c 4f 62 6a 65 63 74 7d  am {Time|Object}
33960 20 5b 64 65 6c 61 79 54 69 6d 65 5d 20 54 68 65   [delayTime] The
33970 20 64 65 6c 61 79 20 74 69 6d 65 20 6f 66 20 74   delay time of t
33980 68 65 20 66 69 6c 74 65 72 2e 20 0a 09 09 20 2a  he filter. ... *
33990 20 20 40 70 61 72 61 6d 20 7b 4e 6f 72 6d 61 6c    @param {Normal
339a0 52 61 6e 67 65 3d 7d 20 72 65 73 6f 6e 61 6e 63  Range=} resonanc
339b0 65 20 54 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20  e The amount of 
339c0 66 65 65 64 62 61 63 6b 20 74 68 65 20 66 69 6c  feedback the fil
339d0 74 65 72 20 68 61 73 2e 20 0a 09 09 20 2a 2f 0a  ter has. ... */.
339e0 09 20 20 20 20 54 6f 6e 65 2e 46 65 65 64 62 61  .    Tone.Feedba
339f0 63 6b 43 6f 6d 62 46 69 6c 74 65 72 20 3d 20 66  ckCombFilter = f
33a00 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
33a10 20 20 20 20 20 20 76 61 72 20 6f 70 74 69 6f 6e        var option
33a20 73 20 3d 20 74 68 69 73 2e 6f 70 74 69 6f 6e 73  s = this.options
33a30 4f 62 6a 65 63 74 28 61 72 67 75 6d 65 6e 74 73  Object(arguments
33a40 2c 20 5b 0a 09 20 20 20 20 20 20 20 20 20 20 20  , [..           
33a50 20 27 64 65 6c 61 79 54 69 6d 65 27 2c 0a 09 20   'delayTime',.. 
33a60 20 20 20 20 20 20 20 20 20 20 20 27 72 65 73 6f             'reso
33a70 6e 61 6e 63 65 27 0a 09 20 20 20 20 20 20 20 20  nance'..        
33a80 5d 2c 20 54 6f 6e 65 2e 46 65 65 64 62 61 63 6b  ], Tone.Feedback
33a90 43 6f 6d 62 46 69 6c 74 65 72 2e 64 65 66 61 75  CombFilter.defau
33aa0 6c 74 73 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  lts);..        /
33ab0 2a 2a 0a 09 09 09 20 2a 20 20 74 68 65 20 64 65  **.... *  the de
33ac0 6c 61 79 20 6e 6f 64 65 0a 09 09 09 20 2a 20 20  lay node.... *  
33ad0 40 74 79 70 65 20 7b 44 65 6c 61 79 4e 6f 64 65  @type {DelayNode
33ae0 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  }.... *  @privat
33af0 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
33b00 20 20 74 68 69 73 2e 5f 64 65 6c 61 79 20 3d 20    this._delay = 
33b10 74 68 69 73 2e 69 6e 70 75 74 20 3d 20 74 68 69  this.input = thi
33b20 73 2e 6f 75 74 70 75 74 20 3d 20 6e 65 77 20 54  s.output = new T
33b30 6f 6e 65 2e 44 65 6c 61 79 28 6f 70 74 69 6f 6e  one.Delay(option
33b40 73 2e 64 65 6c 61 79 54 69 6d 65 29 3b 0a 09 20  s.delayTime);.. 
33b50 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
33b60 20 20 54 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20    The amount of 
33b70 64 65 6c 61 79 20 6f 66 20 74 68 65 20 63 6f 6d  delay of the com
33b80 62 20 66 69 6c 74 65 72 2e 20 0a 09 09 09 20 2a  b filter. .... *
33b90 20 20 40 74 79 70 65 20 7b 54 69 6d 65 7d 0a 09    @type {Time}..
33ba0 09 09 20 2a 20 20 40 73 69 67 6e 61 6c 0a 09 09  .. *  @signal...
33bb0 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
33bc0 69 73 2e 64 65 6c 61 79 54 69 6d 65 20 3d 20 74  is.delayTime = t
33bd0 68 69 73 2e 5f 64 65 6c 61 79 2e 64 65 6c 61 79  his._delay.delay
33be0 54 69 6d 65 3b 0a 09 20 20 20 20 20 20 20 20 2f  Time;..        /
33bf0 2a 2a 0a 09 09 09 20 2a 20 20 74 68 65 20 66 65  **.... *  the fe
33c00 65 64 62 61 63 6b 20 6e 6f 64 65 0a 09 09 09 20  edback node.... 
33c10 2a 20 20 40 74 79 70 65 20 7b 47 61 69 6e 4e 6f  *  @type {GainNo
33c20 64 65 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76  de}.... *  @priv
33c30 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  ate.... */..    
33c40 20 20 20 20 74 68 69 73 2e 5f 66 65 65 64 62 61      this._feedba
33c50 63 6b 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 47 61  ck = new Tone.Ga
33c60 69 6e 28 6f 70 74 69 6f 6e 73 2e 72 65 73 6f 6e  in(options.reson
33c70 61 6e 63 65 2c 20 54 6f 6e 65 2e 54 79 70 65 2e  ance, Tone.Type.
33c80 4e 6f 72 6d 61 6c 52 61 6e 67 65 29 3b 0a 09 20  NormalRange);.. 
33c90 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
33ca0 20 20 54 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20    The amount of 
33cb0 66 65 65 64 62 61 63 6b 20 6f 66 20 74 68 65 20  feedback of the 
33cc0 64 65 6c 61 79 65 64 20 73 69 67 6e 61 6c 2e 20  delayed signal. 
33cd0 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4e  .... *  @type {N
33ce0 6f 72 6d 61 6c 52 61 6e 67 65 7d 0a 09 09 09 20  ormalRange}.... 
33cf0 2a 20 20 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a  *  @signal.... *
33d00 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
33d10 72 65 73 6f 6e 61 6e 63 65 20 3d 20 74 68 69 73  resonance = this
33d20 2e 5f 66 65 65 64 62 61 63 6b 2e 67 61 69 6e 3b  ._feedback.gain;
33d30 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
33d40 64 65 6c 61 79 2e 63 68 61 69 6e 28 74 68 69 73  delay.chain(this
33d50 2e 5f 66 65 65 64 62 61 63 6b 2c 20 74 68 69 73  ._feedback, this
33d60 2e 5f 64 65 6c 61 79 29 3b 0a 09 20 20 20 20 20  ._delay);..     
33d70 20 20 20 74 68 69 73 2e 5f 72 65 61 64 4f 6e 6c     this._readOnl
33d80 79 28 5b 0a 09 20 20 20 20 20 20 20 20 20 20 20  y([..           
33d90 20 27 72 65 73 6f 6e 61 6e 63 65 27 2c 0a 09 20   'resonance',.. 
33da0 20 20 20 20 20 20 20 20 20 20 20 27 64 65 6c 61             'dela
33db0 79 54 69 6d 65 27 0a 09 20 20 20 20 20 20 20 20  yTime'..        
33dc0 5d 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  ]);..    };..   
33dd0 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e   Tone.extend(Ton
33de0 65 2e 46 65 65 64 62 61 63 6b 43 6f 6d 62 46 69  e.FeedbackCombFi
33df0 6c 74 65 72 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a  lter);..    /**.
33e00 09 09 20 2a 20 20 74 68 65 20 64 65 66 61 75 6c  .. *  the defaul
33e10 74 20 70 61 72 61 6d 65 74 65 72 73 0a 09 09 20  t parameters... 
33e20 2a 20 20 40 73 74 61 74 69 63 0a 09 09 20 2a 20  *  @static... * 
33e30 20 40 63 6f 6e 73 74 0a 09 09 20 2a 20 20 40 74   @const... *  @t
33e40 79 70 65 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20  ype {Object}... 
33e50 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 46 65 65  */..    Tone.Fee
33e60 64 62 61 63 6b 43 6f 6d 62 46 69 6c 74 65 72 2e  dbackCombFilter.
33e70 64 65 66 61 75 6c 74 73 20 3d 20 7b 0a 09 20 20  defaults = {..  
33e80 20 20 20 20 20 20 27 64 65 6c 61 79 54 69 6d 65        'delayTime
33e90 27 3a 20 30 2e 31 2c 0a 09 20 20 20 20 20 20 20  ': 0.1,..       
33ea0 20 27 72 65 73 6f 6e 61 6e 63 65 27 3a 20 30 2e   'resonance': 0.
33eb0 35 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  5..    };..    /
33ec0 2a 2a 0a 09 09 20 2a 20 20 63 6c 65 61 6e 20 75  **... *  clean u
33ed0 70 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73  p... *  @returns
33ee0 20 7b 54 6f 6e 65 2e 46 65 65 64 62 61 63 6b 43   {Tone.FeedbackC
33ef0 6f 6d 62 46 69 6c 74 65 72 7d 20 74 68 69 73 0a  ombFilter} this.
33f00 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
33f10 46 65 65 64 62 61 63 6b 43 6f 6d 62 46 69 6c 74  FeedbackCombFilt
33f20 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73  er.prototype.dis
33f30 70 6f 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20  pose = function 
33f40 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 54 6f  () {..        To
33f50 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73  ne.prototype.dis
33f60 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b  pose.call(this);
33f70 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
33f80 77 72 69 74 61 62 6c 65 28 5b 0a 09 20 20 20 20  writable([..    
33f90 20 20 20 20 20 20 20 20 27 72 65 73 6f 6e 61 6e          'resonan
33fa0 63 65 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20  ce',..          
33fb0 20 20 27 64 65 6c 61 79 54 69 6d 65 27 0a 09 20    'delayTime'.. 
33fc0 20 20 20 20 20 20 20 5d 29 3b 0a 09 20 20 20 20         ]);..    
33fd0 20 20 20 20 74 68 69 73 2e 5f 64 65 6c 61 79 2e      this._delay.
33fe0 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20  dispose();..    
33ff0 20 20 20 20 74 68 69 73 2e 5f 64 65 6c 61 79 20      this._delay 
34000 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
34010 20 74 68 69 73 2e 64 65 6c 61 79 54 69 6d 65 20   this.delayTime 
34020 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
34030 20 74 68 69 73 2e 5f 66 65 65 64 62 61 63 6b 2e   this._feedback.
34040 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20  dispose();..    
34050 20 20 20 20 74 68 69 73 2e 5f 66 65 65 64 62 61      this._feedba
34060 63 6b 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  ck = null;..    
34070 20 20 20 20 74 68 69 73 2e 72 65 73 6f 6e 61 6e      this.resonan
34080 63 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  ce = null;..    
34090 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b      return this;
340a0 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 72 65  ..    };..    re
340b0 74 75 72 6e 20 54 6f 6e 65 2e 46 65 65 64 62 61  turn Tone.Feedba
340c0 63 6b 43 6f 6d 62 46 69 6c 74 65 72 3b 0a 09 7d  ckCombFilter;..}
340d0 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74  );..Module(funct
340e0 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20  ion (Tone) {..  
340f0 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a    ..    /**... *
34100 20 20 40 63 6c 61 73 73 20 20 54 6f 6e 65 2e 46    @class  Tone.F
34110 6f 6c 6c 6f 77 65 72 20 69 73 20 61 20 20 63 72  ollower is a  cr
34120 75 64 65 20 65 6e 76 65 6c 6f 70 65 20 66 6f 6c  ude envelope fol
34130 6c 6f 77 65 72 20 77 68 69 63 68 20 77 69 6c 6c  lower which will
34140 20 66 6f 6c 6c 6f 77 20 0a 09 09 20 2a 20 20 20   follow ... *   
34150 20 20 20 20 20 20 20 74 68 65 20 61 6d 70 6c 69         the ampli
34160 74 75 64 65 20 6f 66 20 61 6e 20 69 6e 63 6f 6d  tude of an incom
34170 69 6e 67 20 73 69 67 6e 61 6c 2e 20 0a 09 09 20  ing signal. ... 
34180 2a 20 20 20 20 20 20 20 20 20 20 54 61 6b 65 20  *          Take 
34190 63 61 72 65 20 77 69 74 68 20 73 6d 61 6c 6c 20  care with small 
341a0 28 3c 20 30 2e 30 32 29 20 61 74 74 61 63 6b 20  (< 0.02) attack 
341b0 6f 72 20 64 65 63 61 79 20 76 61 6c 75 65 73 20  or decay values 
341c0 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 61  ... *          a
341d0 73 20 66 6f 6c 6c 6f 77 65 72 20 68 61 73 20 73  s follower has s
341e0 6f 6d 65 20 72 69 70 70 6c 65 20 77 68 69 63 68  ome ripple which
341f0 20 69 73 20 65 78 61 67 67 65 72 61 74 65 64 0a   is exaggerated.
34200 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 61 74  .. *          at
34210 20 74 68 65 73 65 20 76 61 6c 75 65 73 2e 20 52   these values. R
34220 65 61 64 20 6d 6f 72 65 20 61 62 6f 75 74 20 65  ead more about e
34230 6e 76 65 6c 6f 70 65 20 66 6f 6c 6c 6f 77 65 72  nvelope follower
34240 73 20 28 61 6c 73 6f 20 6b 6e 6f 77 6e 20 0a 09  s (also known ..
34250 09 20 2a 20 20 20 20 20 20 20 20 20 20 61 73 20  . *          as 
34260 65 6e 76 65 6c 6f 70 65 20 64 65 74 65 63 74 6f  envelope detecto
34270 72 73 29 20 6f 6e 20 5b 57 69 6b 69 70 65 64 69  rs) on [Wikipedi
34280 61 5d 28 68 74 74 70 73 3a 2f 2f 65 6e 2e 77 69  a](https://en.wi
34290 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
342a0 2f 45 6e 76 65 6c 6f 70 65 5f 64 65 74 65 63 74  /Envelope_detect
342b0 6f 72 29 2e 0a 09 09 20 2a 20 20 0a 09 09 20 2a  or).... *  ... *
342c0 20 20 40 63 6f 6e 73 74 72 75 63 74 6f 72 0a 09    @constructor..
342d0 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b 54  . *  @extends {T
342e0 6f 6e 65 7d 0a 09 09 20 2a 20 20 40 70 61 72 61  one}... *  @para
342f0 6d 20 7b 54 69 6d 65 7c 4f 62 6a 65 63 74 7d 20  m {Time|Object} 
34300 5b 61 74 74 61 63 6b 5d 20 54 68 65 20 72 61 74  [attack] The rat
34310 65 20 61 74 20 77 68 69 63 68 20 74 68 65 20 66  e at which the f
34320 6f 6c 6c 6f 77 65 72 20 72 69 73 65 73 2e 0a 09  ollower rises...
34330 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 54 69 6d  . *  @param {Tim
34340 65 3d 7d 20 72 65 6c 65 61 73 65 20 54 68 65 20  e=} release The 
34350 72 61 74 65 20 61 74 20 77 68 69 63 68 20 74 68  rate at which th
34360 65 20 66 6f 6c 6f 77 65 72 20 66 61 6c 6c 73 2e  e folower falls.
34370 20 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65   ... *  @example
34380 0a 09 09 20 2a 20 76 61 72 20 66 6f 6c 6c 6f 77  ... * var follow
34390 65 72 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 46 6f  er = new Tone.Fo
343a0 6c 6c 6f 77 65 72 28 30 2e 32 2c 20 30 2e 34 29  llower(0.2, 0.4)
343b0 3b 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  ;... */..    Ton
343c0 65 2e 46 6f 6c 6c 6f 77 65 72 20 3d 20 66 75 6e  e.Follower = fun
343d0 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
343e0 20 20 20 20 74 68 69 73 2e 63 72 65 61 74 65 49      this.createI
343f0 6e 73 4f 75 74 73 28 31 2c 20 31 29 3b 0a 09 20  nsOuts(1, 1);.. 
34400 20 20 20 20 20 20 20 76 61 72 20 6f 70 74 69 6f         var optio
34410 6e 73 20 3d 20 74 68 69 73 2e 6f 70 74 69 6f 6e  ns = this.option
34420 73 4f 62 6a 65 63 74 28 61 72 67 75 6d 65 6e 74  sObject(argument
34430 73 2c 20 5b 0a 09 20 20 20 20 20 20 20 20 20 20  s, [..          
34440 20 20 27 61 74 74 61 63 6b 27 2c 0a 09 20 20 20    'attack',..   
34450 20 20 20 20 20 20 20 20 20 27 72 65 6c 65 61 73           'releas
34460 65 27 0a 09 20 20 20 20 20 20 20 20 5d 2c 20 54  e'..        ], T
34470 6f 6e 65 2e 46 6f 6c 6c 6f 77 65 72 2e 64 65 66  one.Follower.def
34480 61 75 6c 74 73 29 3b 0a 09 20 20 20 20 20 20 20  aults);..       
34490 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 40 74 79 70   /**.... *  @typ
344a0 65 20 7b 54 6f 6e 65 2e 41 62 73 7d 0a 09 09 09  e {Tone.Abs}....
344b0 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
344c0 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
344d0 73 2e 5f 61 62 73 20 3d 20 6e 65 77 20 54 6f 6e  s._abs = new Ton
344e0 65 2e 41 62 73 28 29 3b 0a 09 20 20 20 20 20 20  e.Abs();..      
344f0 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 74 68 65    /**.... *  the
34500 20 6c 6f 77 70 61 73 73 20 66 69 6c 74 65 72 20   lowpass filter 
34510 77 68 69 63 68 20 73 6d 6f 6f 74 68 73 20 74 68  which smooths th
34520 65 20 69 6e 70 75 74 0a 09 09 09 20 2a 20 20 40  e input.... *  @
34530 74 79 70 65 20 7b 42 69 71 75 61 64 46 69 6c 74  type {BiquadFilt
34540 65 72 4e 6f 64 65 7d 0a 09 09 09 20 2a 20 20 40  erNode}.... *  @
34550 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
34560 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 66 69          this._fi
34570 6c 74 65 72 20 3d 20 74 68 69 73 2e 63 6f 6e 74  lter = this.cont
34580 65 78 74 2e 63 72 65 61 74 65 42 69 71 75 61 64  ext.createBiquad
34590 46 69 6c 74 65 72 28 29 3b 0a 09 20 20 20 20 20  Filter();..     
345a0 20 20 20 74 68 69 73 2e 5f 66 69 6c 74 65 72 2e     this._filter.
345b0 74 79 70 65 20 3d 20 27 6c 6f 77 70 61 73 73 27  type = 'lowpass'
345c0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
345d0 5f 66 69 6c 74 65 72 2e 66 72 65 71 75 65 6e 63  _filter.frequenc
345e0 79 2e 76 61 6c 75 65 20 3d 20 30 3b 0a 09 20 20  y.value = 0;..  
345f0 20 20 20 20 20 20 74 68 69 73 2e 5f 66 69 6c 74        this._filt
34600 65 72 2e 51 2e 76 61 6c 75 65 20 3d 20 2d 31 30  er.Q.value = -10
34610 30 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  0;..        /**.
34620 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 57 61  ... *  @type {Wa
34630 76 65 53 68 61 70 65 72 4e 6f 64 65 7d 0a 09 09  veShaperNode}...
34640 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
34650 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
34660 69 73 2e 5f 66 72 65 71 75 65 6e 63 79 56 61 6c  is._frequencyVal
34670 75 65 73 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 57  ues = new Tone.W
34680 61 76 65 53 68 61 70 65 72 28 29 3b 0a 09 20 20  aveShaper();..  
34690 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
346a0 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 53 75 62   @type {Tone.Sub
346b0 74 72 61 63 74 7d 0a 09 09 09 20 2a 20 20 40 70  tract}.... *  @p
346c0 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20  rivate.... */.. 
346d0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 75 62         this._sub
346e0 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53 75 62 74   = new Tone.Subt
346f0 72 61 63 74 28 29 3b 0a 09 20 20 20 20 20 20 20  ract();..       
34700 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 40 74 79 70   /**.... *  @typ
34710 65 20 7b 54 6f 6e 65 2e 44 65 6c 61 79 7d 0a 09  e {Tone.Delay}..
34720 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
34730 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
34740 68 69 73 2e 5f 64 65 6c 61 79 20 3d 20 6e 65 77  his._delay = new
34750 20 54 6f 6e 65 2e 44 65 6c 61 79 28 74 68 69 73   Tone.Delay(this
34760 2e 62 6c 6f 63 6b 54 69 6d 65 29 3b 0a 09 20 20  .blockTime);..  
34770 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
34780 20 74 68 69 73 20 6b 65 65 70 73 20 69 74 20 66   this keeps it f
34790 61 72 20 66 72 6f 6d 20 30 2c 20 65 76 65 6e 20  ar from 0, even 
347a0 66 6f 72 20 76 65 72 79 20 73 6d 61 6c 6c 20 64  for very small d
347b0 69 66 66 65 72 65 6e 63 65 73 0a 09 09 09 20 2a  ifferences.... *
347c0 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 4d 75    @type {Tone.Mu
347d0 6c 74 69 70 6c 79 7d 0a 09 09 09 20 2a 20 20 40  ltiply}.... *  @
347e0 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
347f0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 75          this._mu
34800 6c 74 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4d 75  lt = new Tone.Mu
34810 6c 74 69 70 6c 79 28 31 30 30 30 30 29 3b 0a 09  ltiply(10000);..
34820 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
34830 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20  *  @private.... 
34840 2a 20 20 40 74 79 70 65 20 7b 6e 75 6d 62 65 72  *  @type {number
34850 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  }.... */..      
34860 20 20 74 68 69 73 2e 5f 61 74 74 61 63 6b 20 3d    this._attack =
34870 20 6f 70 74 69 6f 6e 73 2e 61 74 74 61 63 6b 3b   options.attack;
34880 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
34890 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
348a0 09 20 2a 20 20 40 74 79 70 65 20 7b 6e 75 6d 62  . *  @type {numb
348b0 65 72 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  er}.... */..    
348c0 20 20 20 20 74 68 69 73 2e 5f 72 65 6c 65 61 73      this._releas
348d0 65 20 3d 20 6f 70 74 69 6f 6e 73 2e 72 65 6c 65  e = options.rele
348e0 61 73 65 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f  ase;..        //
348f0 74 68 65 20 73 6d 6f 6f 74 68 65 64 20 73 69 67  the smoothed sig
34900 6e 61 6c 20 74 6f 20 67 65 74 20 74 68 65 20 76  nal to get the v
34910 61 6c 75 65 73 0a 09 20 20 20 20 20 20 20 20 74  alues..        t
34920 68 69 73 2e 69 6e 70 75 74 2e 63 68 61 69 6e 28  his.input.chain(
34930 74 68 69 73 2e 5f 61 62 73 2c 20 74 68 69 73 2e  this._abs, this.
34940 5f 66 69 6c 74 65 72 2c 20 74 68 69 73 2e 6f 75  _filter, this.ou
34950 74 70 75 74 29 3b 0a 09 20 20 20 20 20 20 20 20  tput);..        
34960 2f 2f 74 68 65 20 64 69 66 66 65 72 65 6e 63 65  //the difference
34970 20 70 61 74 68 0a 09 20 20 20 20 20 20 20 20 74   path..        t
34980 68 69 73 2e 5f 61 62 73 2e 63 6f 6e 6e 65 63 74  his._abs.connect
34990 28 74 68 69 73 2e 5f 73 75 62 2c 20 30 2c 20 31  (this._sub, 0, 1
349a0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
349b0 2e 5f 66 69 6c 74 65 72 2e 63 68 61 69 6e 28 74  ._filter.chain(t
349c0 68 69 73 2e 5f 64 65 6c 61 79 2c 20 74 68 69 73  his._delay, this
349d0 2e 5f 73 75 62 29 3b 0a 09 20 20 20 20 20 20 20  ._sub);..       
349e0 20 2f 2f 74 68 72 65 73 68 6f 6c 64 20 74 68 65   //threshold the
349f0 20 64 69 66 66 65 72 65 6e 63 65 20 61 6e 64 20   difference and 
34a00 75 73 65 20 74 68 65 20 74 68 72 65 73 68 20 74  use the thresh t
34a10 6f 20 73 65 74 20 74 68 65 20 66 72 65 71 75 65  o set the freque
34a20 6e 63 79 0a 09 20 20 20 20 20 20 20 20 74 68 69  ncy..        thi
34a30 73 2e 5f 73 75 62 2e 63 68 61 69 6e 28 74 68 69  s._sub.chain(thi
34a40 73 2e 5f 6d 75 6c 74 2c 20 74 68 69 73 2e 5f 66  s._mult, this._f
34a50 72 65 71 75 65 6e 63 79 56 61 6c 75 65 73 2c 20  requencyValues, 
34a60 74 68 69 73 2e 5f 66 69 6c 74 65 72 2e 66 72 65  this._filter.fre
34a70 71 75 65 6e 63 79 29 3b 0a 09 20 20 20 20 20 20  quency);..      
34a80 20 20 2f 2f 73 65 74 20 74 68 65 20 61 74 74 61    //set the atta
34a90 63 6b 20 61 6e 64 20 72 65 6c 65 61 73 65 20 76  ck and release v
34aa0 61 6c 75 65 73 20 69 6e 20 74 68 65 20 74 61 62  alues in the tab
34ab0 6c 65 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  le..        this
34ac0 2e 5f 73 65 74 41 74 74 61 63 6b 52 65 6c 65 61  ._setAttackRelea
34ad0 73 65 28 74 68 69 73 2e 5f 61 74 74 61 63 6b 2c  se(this._attack,
34ae0 20 74 68 69 73 2e 5f 72 65 6c 65 61 73 65 29 3b   this._release);
34af0 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f  ..    };..    To
34b00 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 46  ne.extend(Tone.F
34b10 6f 6c 6c 6f 77 65 72 29 3b 0a 09 20 20 20 20 2f  ollower);..    /
34b20 2a 2a 0a 09 09 20 2a 20 20 40 73 74 61 74 69 63  **... *  @static
34b30 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4f 62  ... *  @type {Ob
34b40 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a 09 20 20 20  ject}... */..   
34b50 20 54 6f 6e 65 2e 46 6f 6c 6c 6f 77 65 72 2e 64   Tone.Follower.d
34b60 65 66 61 75 6c 74 73 20 3d 20 7b 0a 09 20 20 20  efaults = {..   
34b70 20 20 20 20 20 27 61 74 74 61 63 6b 27 3a 20 30       'attack': 0
34b80 2e 30 35 2c 0a 09 20 20 20 20 20 20 20 20 27 72  .05,..        'r
34b90 65 6c 65 61 73 65 27 3a 20 30 2e 35 0a 09 20 20  elease': 0.5..  
34ba0 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    };..    /**...
34bb0 20 2a 20 20 73 65 74 73 20 74 68 65 20 61 74 74   *  sets the att
34bc0 61 63 6b 20 61 6e 64 20 72 65 6c 65 61 73 65 20  ack and release 
34bd0 74 69 6d 65 73 20 69 6e 20 74 68 65 20 77 61 76  times in the wav
34be0 65 20 73 68 61 70 65 72 0a 09 09 20 2a 20 20 40  e shaper... *  @
34bf0 70 61 72 61 6d 20 20 20 7b 54 69 6d 65 7d 20 61  param   {Time} a
34c00 74 74 61 63 6b 20 20 0a 09 09 20 2a 20 20 40 70  ttack  ... *  @p
34c10 61 72 61 6d 20 20 20 7b 54 69 6d 65 7d 20 72 65  aram   {Time} re
34c20 6c 65 61 73 65 20 0a 09 09 20 2a 20 20 40 70 72  lease ... *  @pr
34c30 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20  ivate... */..   
34c40 20 54 6f 6e 65 2e 46 6f 6c 6c 6f 77 65 72 2e 70   Tone.Follower.p
34c50 72 6f 74 6f 74 79 70 65 2e 5f 73 65 74 41 74 74  rototype._setAtt
34c60 61 63 6b 52 65 6c 65 61 73 65 20 3d 20 66 75 6e  ackRelease = fun
34c70 63 74 69 6f 6e 20 28 61 74 74 61 63 6b 2c 20 72  ction (attack, r
34c80 65 6c 65 61 73 65 29 20 7b 0a 09 20 20 20 20 20  elease) {..     
34c90 20 20 20 76 61 72 20 6d 69 6e 54 69 6d 65 20 3d     var minTime =
34ca0 20 74 68 69 73 2e 62 6c 6f 63 6b 54 69 6d 65 3b   this.blockTime;
34cb0 0a 09 20 20 20 20 20 20 20 20 61 74 74 61 63 6b  ..        attack
34cc0 20 3d 20 54 6f 6e 65 2e 54 69 6d 65 28 61 74 74   = Tone.Time(att
34cd0 61 63 6b 29 2e 74 6f 46 72 65 71 75 65 6e 63 79  ack).toFrequency
34ce0 28 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 6c  ();..        rel
34cf0 65 61 73 65 20 3d 20 54 6f 6e 65 2e 54 69 6d 65  ease = Tone.Time
34d00 28 72 65 6c 65 61 73 65 29 2e 74 6f 46 72 65 71  (release).toFreq
34d10 75 65 6e 63 79 28 29 3b 0a 09 20 20 20 20 20 20  uency();..      
34d20 20 20 61 74 74 61 63 6b 20 3d 20 4d 61 74 68 2e    attack = Math.
34d30 6d 61 78 28 61 74 74 61 63 6b 2c 20 6d 69 6e 54  max(attack, minT
34d40 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 72  ime);..        r
34d50 65 6c 65 61 73 65 20 3d 20 4d 61 74 68 2e 6d 61  elease = Math.ma
34d60 78 28 72 65 6c 65 61 73 65 2c 20 6d 69 6e 54 69  x(release, minTi
34d70 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  me);..        th
34d80 69 73 2e 5f 66 72 65 71 75 65 6e 63 79 56 61 6c  is._frequencyVal
34d90 75 65 73 2e 73 65 74 4d 61 70 28 66 75 6e 63 74  ues.setMap(funct
34da0 69 6f 6e 20 28 76 61 6c 29 20 7b 0a 09 20 20 20  ion (val) {..   
34db0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
34dc0 20 3c 3d 20 30 29 20 7b 0a 09 20 20 20 20 20 20   <= 0) {..      
34dd0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
34de0 20 61 74 74 61 63 6b 3b 0a 09 20 20 20 20 20 20   attack;..      
34df0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09        } else {..
34e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e10 72 65 74 75 72 6e 20 72 65 6c 65 61 73 65 3b 0a  return release;.
34e20 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09  .            }..
34e30 20 20 20 20 20 20 20 20 7d 29 3b 0a 09 20 20 20          });..   
34e40 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20   };..    /**... 
34e50 2a 20 54 68 65 20 61 74 74 61 63 6b 20 74 69 6d  * The attack tim
34e60 65 2e 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f  e.... * @memberO
34e70 66 20 54 6f 6e 65 2e 46 6f 6c 6c 6f 77 65 72 23  f Tone.Follower#
34e80 0a 09 09 20 2a 20 40 74 79 70 65 20 7b 54 69 6d  ... * @type {Tim
34e90 65 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 61 74  e}... * @name at
34ea0 74 61 63 6b 0a 09 09 20 2a 2f 0a 09 20 20 20 20  tack... */..    
34eb0 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f  Object.definePro
34ec0 70 65 72 74 79 28 54 6f 6e 65 2e 46 6f 6c 6c 6f  perty(Tone.Follo
34ed0 77 65 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27  wer.prototype, '
34ee0 61 74 74 61 63 6b 27 2c 20 7b 0a 09 20 20 20 20  attack', {..    
34ef0 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f      get: functio
34f00 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
34f10 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
34f20 5f 61 74 74 61 63 6b 3b 0a 09 20 20 20 20 20 20  _attack;..      
34f30 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65    },..        se
34f40 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 61 74 74  t: function (att
34f50 61 63 6b 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ack) {..        
34f60 20 20 20 20 74 68 69 73 2e 5f 61 74 74 61 63 6b      this._attack
34f70 20 3d 20 61 74 74 61 63 6b 3b 0a 09 20 20 20 20   = attack;..    
34f80 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 65          this._se
34f90 74 41 74 74 61 63 6b 52 65 6c 65 61 73 65 28 74  tAttackRelease(t
34fa0 68 69 73 2e 5f 61 74 74 61 63 6b 2c 20 74 68 69  his._attack, thi
34fb0 73 2e 5f 72 65 6c 65 61 73 65 29 3b 0a 09 20 20  s._release);..  
34fc0 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b        }..    });
34fd0 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54  ..    /**... * T
34fe0 68 65 20 72 65 6c 65 61 73 65 20 74 69 6d 65 2e  he release time.
34ff0 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20  ... * @memberOf 
35000 54 6f 6e 65 2e 46 6f 6c 6c 6f 77 65 72 23 0a 09  Tone.Follower#..
35010 09 20 2a 20 40 74 79 70 65 20 7b 54 69 6d 65 7d  . * @type {Time}
35020 0a 09 09 20 2a 20 40 6e 61 6d 65 20 72 65 6c 65  ... * @name rele
35030 61 73 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f  ase... */..    O
35040 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70  bject.defineProp
35050 65 72 74 79 28 54 6f 6e 65 2e 46 6f 6c 6c 6f 77  erty(Tone.Follow
35060 65 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 72  er.prototype, 'r
35070 65 6c 65 61 73 65 27 2c 20 7b 0a 09 20 20 20 20  elease', {..    
35080 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f      get: functio
35090 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
350a0 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
350b0 5f 72 65 6c 65 61 73 65 3b 0a 09 20 20 20 20 20  _release;..     
350c0 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73     },..        s
350d0 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 72 65  et: function (re
350e0 6c 65 61 73 65 29 20 7b 0a 09 20 20 20 20 20 20  lease) {..      
350f0 20 20 20 20 20 20 74 68 69 73 2e 5f 72 65 6c 65        this._rele
35100 61 73 65 20 3d 20 72 65 6c 65 61 73 65 3b 0a 09  ase = release;..
35110 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
35120 2e 5f 73 65 74 41 74 74 61 63 6b 52 65 6c 65 61  ._setAttackRelea
35130 73 65 28 74 68 69 73 2e 5f 61 74 74 61 63 6b 2c  se(this._attack,
35140 20 74 68 69 73 2e 5f 72 65 6c 65 61 73 65 29 3b   this._release);
35150 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
35160 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09   });..    /**...
35170 20 2a 20 20 42 6f 72 72 6f 77 73 20 74 68 65 20   *  Borrows the 
35180 63 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64 20 66  connect method f
35190 72 6f 6d 20 53 69 67 6e 61 6c 20 73 6f 20 74 68  rom Signal so th
351a0 61 74 20 74 68 65 20 6f 75 74 70 75 74 20 63 61  at the output ca
351b0 6e 20 62 65 20 75 73 65 64 0a 09 09 20 2a 20 20  n be used... *  
351c0 61 73 20 61 20 54 6f 6e 65 2e 53 69 67 6e 61 6c  as a Tone.Signal
351d0 20 63 6f 6e 74 72 6f 6c 20 73 69 67 6e 61 6c 2e   control signal.
351e0 0a 09 09 20 2a 20 20 40 66 75 6e 63 74 69 6f 6e  ... *  @function
351f0 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
35200 2e 46 6f 6c 6c 6f 77 65 72 2e 70 72 6f 74 6f 74  .Follower.protot
35210 79 70 65 2e 63 6f 6e 6e 65 63 74 20 3d 20 54 6f  ype.connect = To
35220 6e 65 2e 53 69 67 6e 61 6c 2e 70 72 6f 74 6f 74  ne.Signal.protot
35230 79 70 65 2e 63 6f 6e 6e 65 63 74 3b 0a 09 20 20  ype.connect;..  
35240 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 64 69 73 70    /**... *  disp
35250 6f 73 65 0a 09 09 20 2a 20 20 40 72 65 74 75 72  ose... *  @retur
35260 6e 73 20 7b 54 6f 6e 65 2e 46 6f 6c 6c 6f 77 65  ns {Tone.Followe
35270 72 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20  r} this... */.. 
35280 20 20 20 54 6f 6e 65 2e 46 6f 6c 6c 6f 77 65 72     Tone.Follower
35290 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f  .prototype.dispo
352a0 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  se = function ()
352b0 20 7b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65   {..        Tone
352c0 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f  .prototype.dispo
352d0 73 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09  se.call(this);..
352e0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 66 69          this._fi
352f0 6c 74 65 72 2e 64 69 73 63 6f 6e 6e 65 63 74 28  lter.disconnect(
35300 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
35310 2e 5f 66 69 6c 74 65 72 20 3d 20 6e 75 6c 6c 3b  ._filter = null;
35320 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
35330 66 72 65 71 75 65 6e 63 79 56 61 6c 75 65 73 2e  frequencyValues.
35340 64 69 73 63 6f 6e 6e 65 63 74 28 29 3b 0a 09 20  disconnect();.. 
35350 20 20 20 20 20 20 20 74 68 69 73 2e 5f 66 72 65         this._fre
35360 71 75 65 6e 63 79 56 61 6c 75 65 73 20 3d 20 6e  quencyValues = n
35370 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ull;..        th
35380 69 73 2e 5f 64 65 6c 61 79 2e 64 69 73 70 6f 73  is._delay.dispos
35390 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  e();..        th
353a0 69 73 2e 5f 64 65 6c 61 79 20 3d 20 6e 75 6c 6c  is._delay = null
353b0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
353c0 5f 73 75 62 2e 64 69 73 63 6f 6e 6e 65 63 74 28  _sub.disconnect(
353d0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
353e0 2e 5f 73 75 62 20 3d 20 6e 75 6c 6c 3b 0a 09 20  ._sub = null;.. 
353f0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 61 62 73         this._abs
35400 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20  .dispose();..   
35410 20 20 20 20 20 74 68 69 73 2e 5f 61 62 73 20 3d       this._abs =
35420 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
35430 74 68 69 73 2e 5f 6d 75 6c 74 2e 64 69 73 70 6f  this._mult.dispo
35440 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74  se();..        t
35450 68 69 73 2e 5f 6d 75 6c 74 20 3d 20 6e 75 6c 6c  his._mult = null
35460 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
35470 5f 63 75 72 76 65 20 3d 20 6e 75 6c 6c 3b 0a 09  _curve = null;..
35480 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
35490 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  his;..    };..  
354a0 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 46 6f    return Tone.Fo
354b0 6c 6c 6f 77 65 72 3b 0a 09 7d 29 3b 0a 09 4d 6f  llower;..});..Mo
354c0 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28 54  dule(function (T
354d0 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09 20 20  one) {..    ..  
354e0 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61    /**... *  @cla
354f0 73 73 20 54 6f 6e 65 2e 53 63 61 6c 65 64 45 6e  ss Tone.ScaledEn
35500 76 65 6c 6f 70 20 69 73 20 61 6e 20 65 6e 76 65  velop is an enve
35510 6c 6f 70 65 20 77 68 69 63 68 20 63 61 6e 20 62  lope which can b
35520 65 20 73 63 61 6c 65 64 20 0a 09 09 20 2a 20 20  e scaled ... *  
35530 20 20 20 20 20 20 20 74 6f 20 61 6e 79 20 72 61         to any ra
35540 6e 67 65 2e 20 49 74 27 73 20 75 73 65 66 75 6c  nge. It's useful
35550 20 66 6f 72 20 61 70 70 6c 79 69 6e 67 20 61 6e   for applying an
35560 20 65 6e 76 65 6c 6f 70 65 20 0a 09 09 20 2a 20   envelope ... * 
35570 20 20 20 20 20 20 20 20 74 6f 20 61 20 66 72 65          to a fre
35580 71 75 65 6e 63 79 20 6f 72 20 61 6e 79 20 6f 74  quency or any ot
35590 68 65 72 20 6e 6f 6e 2d 4e 6f 72 6d 61 6c 52 61  her non-NormalRa
355a0 6e 67 65 20 73 69 67 6e 61 6c 20 0a 09 09 20 2a  nge signal ... *
355b0 20 20 20 20 20 20 20 20 20 70 61 72 61 6d 65 74           paramet
355c0 65 72 2e 20 0a 09 09 20 2a 0a 09 09 20 2a 20 20  er. ... *... *  
355d0 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65 2e 45  @extends {Tone.E
355e0 6e 76 65 6c 6f 70 65 7d 0a 09 09 20 2a 20 20 40  nvelope}... *  @
355f0 63 6f 6e 73 74 72 75 63 74 6f 72 0a 09 09 20 2a  constructor... *
35600 20 20 40 70 61 72 61 6d 20 7b 54 69 6d 65 7c 4f    @param {Time|O
35610 62 6a 65 63 74 7d 20 5b 61 74 74 61 63 6b 5d 09  bject} [attack].
35620 74 68 65 20 61 74 74 61 63 6b 20 74 69 6d 65 20  the attack time 
35630 69 6e 20 73 65 63 6f 6e 64 73 0a 09 09 20 2a 20  in seconds... * 
35640 20 40 70 61 72 61 6d 20 7b 54 69 6d 65 7d 20 5b   @param {Time} [
35650 64 65 63 61 79 5d 09 74 68 65 20 64 65 63 61 79  decay].the decay
35660 20 74 69 6d 65 20 69 6e 20 73 65 63 6f 6e 64 73   time in seconds
35670 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 6e  ... *  @param {n
35680 75 6d 62 65 72 7d 20 5b 73 75 73 74 61 69 6e 5d  umber} [sustain]
35690 20 09 61 20 70 65 72 63 65 6e 74 61 67 65 20 28   .a percentage (
356a0 30 2d 31 29 20 6f 66 20 74 68 65 20 66 75 6c 6c  0-1) of the full
356b0 20 61 6d 70 6c 69 74 75 64 65 0a 09 09 20 2a 20   amplitude... * 
356c0 20 40 70 61 72 61 6d 20 7b 54 69 6d 65 7d 20 5b   @param {Time} [
356d0 72 65 6c 65 61 73 65 5d 09 74 68 65 20 72 65 6c  release].the rel
356e0 65 61 73 65 20 74 69 6d 65 20 69 6e 20 73 65 63  ease time in sec
356f0 6f 6e 64 73 0a 09 09 20 2a 20 20 40 65 78 61 6d  onds... *  @exam
35700 70 6c 65 0a 09 09 20 2a 20 20 76 61 72 20 73 63  ple... *  var sc
35710 61 6c 65 64 45 6e 76 20 3d 20 6e 65 77 20 54 6f  aledEnv = new To
35720 6e 65 2e 53 63 61 6c 65 64 45 6e 76 65 6c 6f 70  ne.ScaledEnvelop
35730 65 28 7b 0a 09 09 20 2a 20 20 09 22 61 74 74 61  e({... *  ."atta
35740 63 6b 22 20 3a 20 30 2e 32 2c 0a 09 09 20 2a 20  ck" : 0.2,... * 
35750 20 09 22 6d 69 6e 22 20 3a 20 32 30 30 2c 0a 09   ."min" : 200,..
35760 09 20 2a 20 20 09 22 6d 61 78 22 20 3a 20 32 30  . *  ."max" : 20
35770 30 30 0a 09 09 20 2a 20 20 7d 29 3b 0a 09 09 20  00... *  });... 
35780 2a 20 20 73 63 61 6c 65 64 45 6e 76 2e 63 6f 6e  *  scaledEnv.con
35790 6e 65 63 74 28 6f 73 63 69 6c 6c 61 74 6f 72 2e  nect(oscillator.
357a0 66 72 65 71 75 65 6e 63 79 29 3b 0a 09 09 20 2a  frequency);... *
357b0 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 53 63 61 6c  /..    Tone.Scal
357c0 65 64 45 6e 76 65 6c 6f 70 65 20 3d 20 66 75 6e  edEnvelope = fun
357d0 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
357e0 20 20 20 20 2f 2f 67 65 74 20 61 6c 6c 20 6f 66      //get all of
357f0 20 74 68 65 20 64 65 66 61 75 6c 74 73 0a 09 20   the defaults.. 
35800 20 20 20 20 20 20 20 76 61 72 20 6f 70 74 69 6f         var optio
35810 6e 73 20 3d 20 74 68 69 73 2e 6f 70 74 69 6f 6e  ns = this.option
35820 73 4f 62 6a 65 63 74 28 61 72 67 75 6d 65 6e 74  sObject(argument
35830 73 2c 20 5b 0a 09 20 20 20 20 20 20 20 20 20 20  s, [..          
35840 20 20 27 61 74 74 61 63 6b 27 2c 0a 09 20 20 20    'attack',..   
35850 20 20 20 20 20 20 20 20 20 27 64 65 63 61 79 27           'decay'
35860 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
35870 73 75 73 74 61 69 6e 27 2c 0a 09 20 20 20 20 20  sustain',..     
35880 20 20 20 20 20 20 20 27 72 65 6c 65 61 73 65 27         'release'
35890 0a 09 20 20 20 20 20 20 20 20 5d 2c 20 54 6f 6e  ..        ], Ton
358a0 65 2e 45 6e 76 65 6c 6f 70 65 2e 64 65 66 61 75  e.Envelope.defau
358b0 6c 74 73 29 3b 0a 09 20 20 20 20 20 20 20 20 54  lts);..        T
358c0 6f 6e 65 2e 45 6e 76 65 6c 6f 70 65 2e 63 61 6c  one.Envelope.cal
358d0 6c 28 74 68 69 73 2c 20 6f 70 74 69 6f 6e 73 29  l(this, options)
358e0 3b 0a 09 20 20 20 20 20 20 20 20 6f 70 74 69 6f  ;..        optio
358f0 6e 73 20 3d 20 74 68 69 73 2e 64 65 66 61 75 6c  ns = this.defaul
35900 74 41 72 67 28 6f 70 74 69 6f 6e 73 2c 20 54 6f  tArg(options, To
35910 6e 65 2e 53 63 61 6c 65 64 45 6e 76 65 6c 6f 70  ne.ScaledEnvelop
35920 65 2e 64 65 66 61 75 6c 74 73 29 3b 0a 09 20 20  e.defaults);..  
35930 20 20 20 20 20 20 2f 2a 2a 20 0a 09 09 09 20 2a        /** .... *
35940 20 20 73 63 61 6c 65 20 74 68 65 20 69 6e 63 6f    scale the inco
35950 6d 69 6e 67 20 73 69 67 6e 61 6c 20 62 79 20 61  ming signal by a
35960 6e 20 65 78 70 6f 6e 65 6e 74 0a 09 09 09 20 2a  n exponent.... *
35970 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 50 6f    @type {Tone.Po
35980 77 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61  w}.... *  @priva
35990 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  te.... */..     
359a0 20 20 20 74 68 69 73 2e 5f 65 78 70 20 3d 20 74     this._exp = t
359b0 68 69 73 2e 6f 75 74 70 75 74 20 3d 20 6e 65 77  his.output = new
359c0 20 54 6f 6e 65 2e 50 6f 77 28 6f 70 74 69 6f 6e   Tone.Pow(option
359d0 73 2e 65 78 70 6f 6e 65 6e 74 29 3b 0a 09 20 20  s.exponent);..  
359e0 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
359f0 20 73 63 61 6c 65 20 74 68 65 20 73 69 67 6e 61   scale the signa
35a00 6c 20 74 6f 20 74 68 65 20 64 65 73 69 72 65 64  l to the desired
35a10 20 72 61 6e 67 65 0a 09 09 09 20 2a 20 20 40 74   range.... *  @t
35a20 79 70 65 20 7b 54 6f 6e 65 2e 4d 75 6c 74 69 70  ype {Tone.Multip
35a30 6c 79 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76  ly}.... *  @priv
35a40 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  ate.... */..    
35a50 20 20 20 20 74 68 69 73 2e 5f 73 63 61 6c 65 20      this._scale 
35a60 3d 20 74 68 69 73 2e 6f 75 74 70 75 74 20 3d 20  = this.output = 
35a70 6e 65 77 20 54 6f 6e 65 2e 53 63 61 6c 65 28 6f  new Tone.Scale(o
35a80 70 74 69 6f 6e 73 2e 6d 69 6e 2c 20 6f 70 74 69  ptions.min, opti
35a90 6f 6e 73 2e 6d 61 78 29 3b 0a 09 20 20 20 20 20  ons.max);..     
35aa0 20 20 20 74 68 69 73 2e 5f 73 69 67 2e 63 68 61     this._sig.cha
35ab0 69 6e 28 74 68 69 73 2e 5f 65 78 70 2c 20 74 68  in(this._exp, th
35ac0 69 73 2e 5f 73 63 61 6c 65 29 3b 0a 09 20 20 20  is._scale);..   
35ad0 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65 2e 65 78   };..    Tone.ex
35ae0 74 65 6e 64 28 54 6f 6e 65 2e 53 63 61 6c 65 64  tend(Tone.Scaled
35af0 45 6e 76 65 6c 6f 70 65 2c 20 54 6f 6e 65 2e 45  Envelope, Tone.E
35b00 6e 76 65 6c 6f 70 65 29 3b 0a 09 20 20 20 20 2f  nvelope);..    /
35b10 2a 2a 0a 09 09 20 2a 20 20 74 68 65 20 64 65 66  **... *  the def
35b20 61 75 6c 74 20 70 61 72 61 6d 65 74 65 72 73 0a  ault parameters.
35b30 09 09 20 2a 20 20 40 73 74 61 74 69 63 0a 09 09  .. *  @static...
35b40 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 53 63   */..    Tone.Sc
35b50 61 6c 65 64 45 6e 76 65 6c 6f 70 65 2e 64 65 66  aledEnvelope.def
35b60 61 75 6c 74 73 20 3d 20 7b 0a 09 20 20 20 20 20  aults = {..     
35b70 20 20 20 27 6d 69 6e 27 3a 20 30 2c 0a 09 20 20     'min': 0,..  
35b80 20 20 20 20 20 20 27 6d 61 78 27 3a 20 31 2c 0a        'max': 1,.
35b90 09 20 20 20 20 20 20 20 20 27 65 78 70 6f 6e 65  .        'expone
35ba0 6e 74 27 3a 20 31 0a 09 20 20 20 20 7d 3b 0a 09  nt': 1..    };..
35bb0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65      /**... * The
35bc0 20 65 6e 76 65 6c 6f 70 65 27 73 20 6d 69 6e 20   envelope's min 
35bd0 6f 75 74 70 75 74 20 76 61 6c 75 65 2e 20 54 68  output value. Th
35be0 69 73 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  is is the value 
35bf0 77 68 69 63 68 20 69 74 0a 09 09 20 2a 20 73 74  which it... * st
35c00 61 72 74 73 20 61 74 2e 20 0a 09 09 20 2a 20 40  arts at. ... * @
35c10 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 53 63  memberOf Tone.Sc
35c20 61 6c 65 64 45 6e 76 65 6c 6f 70 65 23 0a 09 09  aledEnvelope#...
35c30 20 2a 20 40 74 79 70 65 20 7b 6e 75 6d 62 65 72   * @type {number
35c40 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 6d 69 6e  }... * @name min
35c50 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65  ... */..    Obje
35c60 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74  ct.definePropert
35c70 79 28 54 6f 6e 65 2e 53 63 61 6c 65 64 45 6e 76  y(Tone.ScaledEnv
35c80 65 6c 6f 70 65 2e 70 72 6f 74 6f 74 79 70 65 2c  elope.prototype,
35c90 20 27 6d 69 6e 27 2c 20 7b 0a 09 20 20 20 20 20   'min', {..     
35ca0 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e     get: function
35cb0 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20   () {..         
35cc0 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f     return this._
35cd0 73 63 61 6c 65 2e 6d 69 6e 3b 0a 09 20 20 20 20  scale.min;..    
35ce0 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20      },..        
35cf0 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 6d  set: function (m
35d00 69 6e 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  in) {..         
35d10 20 20 20 74 68 69 73 2e 5f 73 63 61 6c 65 2e 6d     this._scale.m
35d20 69 6e 20 3d 20 6d 69 6e 3b 0a 09 20 20 20 20 20  in = min;..     
35d30 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20     }..    });.. 
35d40 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65 20     /**... * The 
35d50 65 6e 76 65 6c 6f 70 65 27 73 20 6d 61 78 20 6f  envelope's max o
35d60 75 74 70 75 74 20 76 61 6c 75 65 2e 20 49 6e 20  utput value. In 
35d70 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
35d80 20 76 61 6c 75 65 0a 09 09 20 2a 20 61 74 20 74   value... * at t
35d90 68 65 20 70 65 61 6b 20 6f 66 20 74 68 65 20 61  he peak of the a
35da0 74 74 61 63 6b 20 70 6f 72 74 69 6f 6e 20 6f 66  ttack portion of
35db0 20 74 68 65 20 65 6e 76 65 6c 6f 70 65 2e 20 0a   the envelope. .
35dc0 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54  .. * @memberOf T
35dd0 6f 6e 65 2e 53 63 61 6c 65 64 45 6e 76 65 6c 6f  one.ScaledEnvelo
35de0 70 65 23 0a 09 09 20 2a 20 40 74 79 70 65 20 7b  pe#... * @type {
35df0 6e 75 6d 62 65 72 7d 0a 09 09 20 2a 20 40 6e 61  number}... * @na
35e00 6d 65 20 6d 61 78 0a 09 09 20 2a 2f 0a 09 20 20  me max... */..  
35e10 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50    Object.defineP
35e20 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 53 63 61  roperty(Tone.Sca
35e30 6c 65 64 45 6e 76 65 6c 6f 70 65 2e 70 72 6f 74  ledEnvelope.prot
35e40 6f 74 79 70 65 2c 20 27 6d 61 78 27 2c 20 7b 0a  otype, 'max', {.
35e50 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75  .        get: fu
35e60 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
35e70 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
35e80 74 68 69 73 2e 5f 73 63 61 6c 65 2e 6d 61 78 3b  this._scale.max;
35e90 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20  ..        },..  
35ea0 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74        set: funct
35eb0 69 6f 6e 20 28 6d 61 78 29 20 7b 0a 09 20 20 20  ion (max) {..   
35ec0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73           this._s
35ed0 63 61 6c 65 2e 6d 61 78 20 3d 20 6d 61 78 3b 0a  cale.max = max;.
35ee0 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
35ef0 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  });..    /**... 
35f00 2a 20 54 68 65 20 65 6e 76 65 6c 6f 70 65 27 73  * The envelope's
35f10 20 65 78 70 6f 6e 65 6e 74 20 76 61 6c 75 65 2e   exponent value.
35f20 20 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66   ... * @memberOf
35f30 20 54 6f 6e 65 2e 53 63 61 6c 65 64 45 6e 76 65   Tone.ScaledEnve
35f40 6c 6f 70 65 23 0a 09 09 20 2a 20 40 74 79 70 65  lope#... * @type
35f50 20 7b 6e 75 6d 62 65 72 7d 0a 09 09 20 2a 20 40   {number}... * @
35f60 6e 61 6d 65 20 65 78 70 6f 6e 65 6e 74 0a 09 09  name exponent...
35f70 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e   */..    Object.
35f80 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54  defineProperty(T
35f90 6f 6e 65 2e 53 63 61 6c 65 64 45 6e 76 65 6c 6f  one.ScaledEnvelo
35fa0 70 65 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 65  pe.prototype, 'e
35fb0 78 70 6f 6e 65 6e 74 27 2c 20 7b 0a 09 20 20 20  xponent', {..   
35fc0 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69       get: functi
35fd0 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
35fe0 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
35ff0 2e 5f 65 78 70 2e 76 61 6c 75 65 3b 0a 09 20 20  ._exp.value;..  
36000 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20        },..      
36010 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    set: function 
36020 28 65 78 70 29 20 7b 0a 09 20 20 20 20 20 20 20  (exp) {..       
36030 20 20 20 20 20 74 68 69 73 2e 5f 65 78 70 2e 76       this._exp.v
36040 61 6c 75 65 20 3d 20 65 78 70 3b 0a 09 20 20 20  alue = exp;..   
36050 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a       }..    });.
36060 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 63  .    /**... *  c
36070 6c 65 61 6e 20 75 70 0a 09 09 20 2a 20 20 40 72  lean up... *  @r
36080 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 53 63 61  eturns {Tone.Sca
36090 6c 65 64 45 6e 76 65 6c 6f 70 65 7d 20 74 68 69  ledEnvelope} thi
360a0 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  s... */..    Ton
360b0 65 2e 53 63 61 6c 65 64 45 6e 76 65 6c 6f 70 65  e.ScaledEnvelope
360c0 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f  .prototype.dispo
360d0 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  se = function ()
360e0 20 7b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65   {..        Tone
360f0 2e 45 6e 76 65 6c 6f 70 65 2e 70 72 6f 74 6f 74  .Envelope.protot
36100 79 70 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c  ype.dispose.call
36110 28 74 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20  (this);..       
36120 20 74 68 69 73 2e 5f 73 63 61 6c 65 2e 64 69 73   this._scale.dis
36130 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20  pose();..       
36140 20 74 68 69 73 2e 5f 73 63 61 6c 65 20 3d 20 6e   this._scale = n
36150 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ull;..        th
36160 69 73 2e 5f 65 78 70 2e 64 69 73 70 6f 73 65 28  is._exp.dispose(
36170 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
36180 2e 5f 65 78 70 20 3d 20 6e 75 6c 6c 3b 0a 09 20  ._exp = null;.. 
36190 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
361a0 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  is;..    };..   
361b0 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 53 63 61   return Tone.Sca
361c0 6c 65 64 45 6e 76 65 6c 6f 70 65 3b 0a 09 7d 29  ledEnvelope;..})
361d0 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69  ;..Module(functi
361e0 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20  on (Tone) {..   
361f0 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20   ..    /**... * 
36200 20 40 63 6c 61 73 73 20 54 6f 6e 65 2e 46 72 65   @class Tone.Fre
36210 71 75 65 6e 63 79 45 6e 76 65 6c 6f 70 65 20 69  quencyEnvelope i
36220 73 20 61 20 54 6f 6e 65 2e 53 63 61 6c 65 64 45  s a Tone.ScaledE
36230 6e 76 65 6c 6f 70 65 2c 20 62 75 74 20 69 6e 73  nvelope, but ins
36240 74 65 61 64 20 6f 66 20 60 6d 69 6e 60 20 61 6e  tead of `min` an
36250 64 20 60 6d 61 78 60 0a 09 09 20 2a 20 20 20 20  d `max`... *    
36260 20 20 20 20 20 69 74 27 73 20 67 6f 74 20 61 20       it's got a 
36270 60 62 61 73 65 46 72 65 71 75 65 6e 63 79 60 20  `baseFrequency` 
36280 61 6e 64 20 60 6f 63 74 61 76 65 73 60 20 70 61  and `octaves` pa
36290 72 61 6d 65 74 65 72 2e 20 0a 09 09 20 2a 0a 09  rameter. ... *..
362a0 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b 54  . *  @extends {T
362b0 6f 6e 65 2e 45 6e 76 65 6c 6f 70 65 7d 0a 09 09  one.Envelope}...
362c0 20 2a 20 20 40 63 6f 6e 73 74 72 75 63 74 6f 72   *  @constructor
362d0 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 54  ... *  @param {T
362e0 69 6d 65 7c 4f 62 6a 65 63 74 7d 20 5b 61 74 74  ime|Object} [att
362f0 61 63 6b 5d 09 74 68 65 20 61 74 74 61 63 6b 20  ack].the attack 
36300 74 69 6d 65 20 69 6e 20 73 65 63 6f 6e 64 73 0a  time in seconds.
36310 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 54 69  .. *  @param {Ti
36320 6d 65 7d 20 5b 64 65 63 61 79 5d 09 74 68 65 20  me} [decay].the 
36330 64 65 63 61 79 20 74 69 6d 65 20 69 6e 20 73 65  decay time in se
36340 63 6f 6e 64 73 0a 09 09 20 2a 20 20 40 70 61 72  conds... *  @par
36350 61 6d 20 7b 6e 75 6d 62 65 72 7d 20 5b 73 75 73  am {number} [sus
36360 74 61 69 6e 5d 20 09 61 20 70 65 72 63 65 6e 74  tain] .a percent
36370 61 67 65 20 28 30 2d 31 29 20 6f 66 20 74 68 65  age (0-1) of the
36380 20 66 75 6c 6c 20 61 6d 70 6c 69 74 75 64 65 0a   full amplitude.
36390 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 54 69  .. *  @param {Ti
363a0 6d 65 7d 20 5b 72 65 6c 65 61 73 65 5d 09 74 68  me} [release].th
363b0 65 20 72 65 6c 65 61 73 65 20 74 69 6d 65 20 69  e release time i
363c0 6e 20 73 65 63 6f 6e 64 73 0a 09 09 20 2a 20 20  n seconds... *  
363d0 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 20 76  @example... *  v
363e0 61 72 20 65 6e 76 20 3d 20 6e 65 77 20 54 6f 6e  ar env = new Ton
363f0 65 2e 46 72 65 71 75 65 6e 63 79 45 6e 76 65 6c  e.FrequencyEnvel
36400 6f 70 65 28 7b 0a 09 09 20 2a 20 20 09 22 61 74  ope({... *  ."at
36410 74 61 63 6b 22 20 3a 20 30 2e 32 2c 0a 09 09 20  tack" : 0.2,... 
36420 2a 20 20 09 22 62 61 73 65 46 72 65 71 75 65 6e  *  ."baseFrequen
36430 63 79 22 20 3a 20 22 43 32 22 2c 0a 09 09 20 2a  cy" : "C2",... *
36440 20 20 09 22 6f 63 74 61 76 65 73 22 20 3a 20 34    ."octaves" : 4
36450 0a 09 09 20 2a 20 20 7d 29 3b 0a 09 09 20 2a 20  ... *  });... * 
36460 20 73 63 61 6c 65 64 45 6e 76 2e 63 6f 6e 6e 65   scaledEnv.conne
36470 63 74 28 6f 73 63 69 6c 6c 61 74 6f 72 2e 66 72  ct(oscillator.fr
36480 65 71 75 65 6e 63 79 29 3b 0a 09 09 20 2a 2f 0a  equency);... */.
36490 09 20 20 20 20 54 6f 6e 65 2e 46 72 65 71 75 65  .    Tone.Freque
364a0 6e 63 79 45 6e 76 65 6c 6f 70 65 20 3d 20 66 75  ncyEnvelope = fu
364b0 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
364c0 20 20 20 20 20 76 61 72 20 6f 70 74 69 6f 6e 73       var options
364d0 20 3d 20 74 68 69 73 2e 6f 70 74 69 6f 6e 73 4f   = this.optionsO
364e0 62 6a 65 63 74 28 61 72 67 75 6d 65 6e 74 73 2c  bject(arguments,
364f0 20 5b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   [..            
36500 27 61 74 74 61 63 6b 27 2c 0a 09 20 20 20 20 20  'attack',..     
36510 20 20 20 20 20 20 20 27 64 65 63 61 79 27 2c 0a         'decay',.
36520 09 20 20 20 20 20 20 20 20 20 20 20 20 27 73 75  .            'su
36530 73 74 61 69 6e 27 2c 0a 09 20 20 20 20 20 20 20  stain',..       
36540 20 20 20 20 20 27 72 65 6c 65 61 73 65 27 0a 09       'release'..
36550 20 20 20 20 20 20 20 20 5d 2c 20 54 6f 6e 65 2e          ], Tone.
36560 45 6e 76 65 6c 6f 70 65 2e 64 65 66 61 75 6c 74  Envelope.default
36570 73 29 3b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e  s);..        Ton
36580 65 2e 53 63 61 6c 65 64 45 6e 76 65 6c 6f 70 65  e.ScaledEnvelope
36590 2e 63 61 6c 6c 28 74 68 69 73 2c 20 6f 70 74 69  .call(this, opti
365a0 6f 6e 73 29 3b 0a 09 20 20 20 20 20 20 20 20 6f  ons);..        o
365b0 70 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e 64 65  ptions = this.de
365c0 66 61 75 6c 74 41 72 67 28 6f 70 74 69 6f 6e 73  faultArg(options
365d0 2c 20 54 6f 6e 65 2e 46 72 65 71 75 65 6e 63 79  , Tone.Frequency
365e0 45 6e 76 65 6c 6f 70 65 2e 64 65 66 61 75 6c 74  Envelope.default
365f0 73 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  s);..        /**
36600 0a 09 09 09 20 2a 20 20 53 74 6f 72 65 73 20 74  .... *  Stores t
36610 68 65 20 6f 63 74 61 76 65 20 76 61 6c 75 65 0a  he octave value.
36620 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 50 6f  ... *  @type {Po
36630 73 69 74 69 76 65 7d 0a 09 09 09 20 2a 20 20 40  sitive}.... *  @
36640 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
36650 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6f 63          this._oc
36660 74 61 76 65 73 20 3d 20 6f 70 74 69 6f 6e 73 2e  taves = options.
36670 6f 63 74 61 76 65 73 3b 0a 09 20 20 20 20 20 20  octaves;..      
36680 20 20 2f 2f 73 65 74 75 70 0a 09 20 20 20 20 20    //setup..     
36690 20 20 20 74 68 69 73 2e 62 61 73 65 46 72 65 71     this.baseFreq
366a0 75 65 6e 63 79 20 3d 20 6f 70 74 69 6f 6e 73 2e  uency = options.
366b0 62 61 73 65 46 72 65 71 75 65 6e 63 79 3b 0a 09  baseFrequency;..
366c0 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f 63 74          this.oct
366d0 61 76 65 73 20 3d 20 6f 70 74 69 6f 6e 73 2e 6f  aves = options.o
366e0 63 74 61 76 65 73 3b 0a 09 20 20 20 20 7d 3b 0a  ctaves;..    };.
366f0 09 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64  .    Tone.extend
36700 28 54 6f 6e 65 2e 46 72 65 71 75 65 6e 63 79 45  (Tone.FrequencyE
36710 6e 76 65 6c 6f 70 65 2c 20 54 6f 6e 65 2e 45 6e  nvelope, Tone.En
36720 76 65 6c 6f 70 65 29 3b 0a 09 20 20 20 20 2f 2a  velope);..    /*
36730 2a 0a 09 09 20 2a 20 20 74 68 65 20 64 65 66 61  *... *  the defa
36740 75 6c 74 20 70 61 72 61 6d 65 74 65 72 73 0a 09  ult parameters..
36750 09 20 2a 20 20 40 73 74 61 74 69 63 0a 09 09 20  . *  @static... 
36760 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 46 72 65  */..    Tone.Fre
36770 71 75 65 6e 63 79 45 6e 76 65 6c 6f 70 65 2e 64  quencyEnvelope.d
36780 65 66 61 75 6c 74 73 20 3d 20 7b 0a 09 20 20 20  efaults = {..   
36790 20 20 20 20 20 27 62 61 73 65 46 72 65 71 75 65       'baseFreque
367a0 6e 63 79 27 3a 20 32 30 30 2c 0a 09 20 20 20 20  ncy': 200,..    
367b0 20 20 20 20 27 6f 63 74 61 76 65 73 27 3a 20 34      'octaves': 4
367c0 2c 0a 09 20 20 20 20 20 20 20 20 27 65 78 70 6f  ,..        'expo
367d0 6e 65 6e 74 27 3a 20 32 0a 09 20 20 20 20 7d 3b  nent': 2..    };
367e0 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54  ..    /**... * T
367f0 68 65 20 65 6e 76 65 6c 6f 70 65 27 73 20 6d 69  he envelope's mi
36800 6e 69 6e 75 6d 20 6f 75 74 70 75 74 20 76 61 6c  ninum output val
36810 75 65 2e 20 54 68 69 73 20 69 73 20 74 68 65 20  ue. This is the 
36820 76 61 6c 75 65 20 77 68 69 63 68 20 69 74 0a 09  value which it..
36830 09 20 2a 20 73 74 61 72 74 73 20 61 74 2e 20 0a  . * starts at. .
36840 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54  .. * @memberOf T
36850 6f 6e 65 2e 46 72 65 71 75 65 6e 63 79 45 6e 76  one.FrequencyEnv
36860 65 6c 6f 70 65 23 0a 09 09 20 2a 20 40 74 79 70  elope#... * @typ
36870 65 20 7b 46 72 65 71 75 65 6e 63 79 7d 0a 09 09  e {Frequency}...
36880 20 2a 20 40 6e 61 6d 65 20 62 61 73 65 46 72 65   * @name baseFre
36890 71 75 65 6e 63 79 0a 09 09 20 2a 2f 0a 09 20 20  quency... */..  
368a0 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50    Object.defineP
368b0 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 46 72 65  roperty(Tone.Fre
368c0 71 75 65 6e 63 79 45 6e 76 65 6c 6f 70 65 2e 70  quencyEnvelope.p
368d0 72 6f 74 6f 74 79 70 65 2c 20 27 62 61 73 65 46  rototype, 'baseF
368e0 72 65 71 75 65 6e 63 79 27 2c 20 7b 0a 09 20 20  requency', {..  
368f0 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74        get: funct
36900 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
36910 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
36920 73 2e 5f 73 63 61 6c 65 2e 6d 69 6e 3b 0a 09 20  s._scale.min;.. 
36930 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20         },..     
36940 20 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e     set: function
36950 20 28 6d 69 6e 29 20 7b 0a 09 20 20 20 20 20 20   (min) {..      
36960 20 20 20 20 20 20 74 68 69 73 2e 5f 73 63 61 6c        this._scal
36970 65 2e 6d 69 6e 20 3d 20 74 68 69 73 2e 74 6f 46  e.min = this.toF
36980 72 65 71 75 65 6e 63 79 28 6d 69 6e 29 3b 0a 09  requency(min);..
36990 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 61 6c              //al
369a0 73 6f 20 75 70 64 61 74 65 20 74 68 65 20 6f 63  so update the oc
369b0 74 61 76 65 73 0a 09 20 20 20 20 20 20 20 20 20  taves..         
369c0 20 20 20 74 68 69 73 2e 6f 63 74 61 76 65 73 20     this.octaves 
369d0 3d 20 74 68 69 73 2e 5f 6f 63 74 61 76 65 73 3b  = this._octaves;
369e0 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
369f0 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09   });..    /**...
36a00 20 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66   * The number of
36a10 20 6f 63 74 61 76 65 73 20 61 62 6f 76 65 20 74   octaves above t
36a20 68 65 20 62 61 73 65 46 72 65 71 75 65 6e 63 79  he baseFrequency
36a30 20 74 68 61 74 20 74 68 65 0a 09 09 20 2a 20 65   that the... * e
36a40 6e 76 65 6c 6f 70 65 20 77 69 6c 6c 20 73 63 61  nvelope will sca
36a50 6c 65 20 74 6f 2e 0a 09 09 20 2a 20 40 6d 65 6d  le to.... * @mem
36a60 62 65 72 4f 66 20 54 6f 6e 65 2e 46 72 65 71 75  berOf Tone.Frequ
36a70 65 6e 63 79 45 6e 76 65 6c 6f 70 65 23 0a 09 09  encyEnvelope#...
36a80 20 2a 20 40 74 79 70 65 20 7b 50 6f 73 69 74 69   * @type {Positi
36a90 76 65 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 6f  ve}... * @name o
36aa0 63 74 61 76 65 73 0a 09 09 20 2a 2f 0a 09 20 20  ctaves... */..  
36ab0 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50    Object.defineP
36ac0 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 46 72 65  roperty(Tone.Fre
36ad0 71 75 65 6e 63 79 45 6e 76 65 6c 6f 70 65 2e 70  quencyEnvelope.p
36ae0 72 6f 74 6f 74 79 70 65 2c 20 27 6f 63 74 61 76  rototype, 'octav
36af0 65 73 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20  es', {..        
36b00 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29  get: function ()
36b10 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
36b20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 6f 63 74  return this._oct
36b30 61 76 65 73 3b 0a 09 20 20 20 20 20 20 20 20 7d  aves;..        }
36b40 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20  ,..        set: 
36b50 66 75 6e 63 74 69 6f 6e 20 28 6f 63 74 61 76 65  function (octave
36b60 73 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  s) {..          
36b70 20 20 74 68 69 73 2e 5f 6f 63 74 61 76 65 73 20    this._octaves 
36b80 3d 20 6f 63 74 61 76 65 73 3b 0a 09 20 20 20 20  = octaves;..    
36b90 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 63          this._sc
36ba0 61 6c 65 2e 6d 61 78 20 3d 20 74 68 69 73 2e 62  ale.max = this.b
36bb0 61 73 65 46 72 65 71 75 65 6e 63 79 20 2a 20 4d  aseFrequency * M
36bc0 61 74 68 2e 70 6f 77 28 32 2c 20 6f 63 74 61 76  ath.pow(2, octav
36bd0 65 73 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a  es);..        }.
36be0 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a  .    });..    /*
36bf0 2a 0a 09 09 20 2a 20 54 68 65 20 65 6e 76 65 6c  *... * The envel
36c00 6f 70 65 27 73 20 65 78 70 6f 6e 65 6e 74 20 76  ope's exponent v
36c10 61 6c 75 65 2e 20 0a 09 09 20 2a 20 40 6d 65 6d  alue. ... * @mem
36c20 62 65 72 4f 66 20 54 6f 6e 65 2e 46 72 65 71 75  berOf Tone.Frequ
36c30 65 6e 63 79 45 6e 76 65 6c 6f 70 65 23 0a 09 09  encyEnvelope#...
36c40 20 2a 20 40 74 79 70 65 20 7b 6e 75 6d 62 65 72   * @type {number
36c50 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 65 78 70  }... * @name exp
36c60 6f 6e 65 6e 74 0a 09 09 20 2a 2f 0a 09 20 20 20  onent... */..   
36c70 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72   Object.definePr
36c80 6f 70 65 72 74 79 28 54 6f 6e 65 2e 46 72 65 71  operty(Tone.Freq
36c90 75 65 6e 63 79 45 6e 76 65 6c 6f 70 65 2e 70 72  uencyEnvelope.pr
36ca0 6f 74 6f 74 79 70 65 2c 20 27 65 78 70 6f 6e 65  ototype, 'expone
36cb0 6e 74 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20  nt', {..        
36cc0 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29  get: function ()
36cd0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
36ce0 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 65 78 70  return this._exp
36cf0 2e 76 61 6c 75 65 3b 0a 09 20 20 20 20 20 20 20  .value;..       
36d00 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74   },..        set
36d10 3a 20 66 75 6e 63 74 69 6f 6e 20 28 65 78 70 29  : function (exp)
36d20 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
36d30 74 68 69 73 2e 5f 65 78 70 2e 76 61 6c 75 65 20  this._exp.value 
36d40 3d 20 65 78 70 3b 0a 09 20 20 20 20 20 20 20 20  = exp;..        
36d50 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20  }..    });..    
36d60 2f 2a 2a 0a 09 09 20 2a 20 20 63 6c 65 61 6e 20  /**... *  clean 
36d70 75 70 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e  up... *  @return
36d80 73 20 7b 54 6f 6e 65 2e 46 72 65 71 75 65 6e 63  s {Tone.Frequenc
36d90 79 45 6e 76 65 6c 6f 70 65 7d 20 74 68 69 73 0a  yEnvelope} this.
36da0 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
36db0 46 72 65 71 75 65 6e 63 79 45 6e 76 65 6c 6f 70  FrequencyEnvelop
36dc0 65 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70  e.prototype.disp
36dd0 6f 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  ose = function (
36de0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e  ) {..        Ton
36df0 65 2e 53 63 61 6c 65 64 45 6e 76 65 6c 6f 70 65  e.ScaledEnvelope
36e00 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f  .prototype.dispo
36e10 73 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09  se.call(this);..
36e20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
36e30 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  his;..    };..  
36e40 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 46 72    return Tone.Fr
36e50 65 71 75 65 6e 63 79 45 6e 76 65 6c 6f 70 65 3b  equencyEnvelope;
36e60 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75  ..});..Module(fu
36e70 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a  nction (Tone) {.
36e80 09 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09  .    ..    /**..
36e90 09 20 2a 20 20 40 63 6c 61 73 73 20 20 54 6f 6e  . *  @class  Ton
36ea0 65 2e 47 61 74 65 20 6f 6e 6c 79 20 70 61 73 73  e.Gate only pass
36eb0 65 73 20 61 20 73 69 67 6e 61 6c 20 74 68 72 6f  es a signal thro
36ec0 75 67 68 20 77 68 65 6e 20 74 68 65 20 69 6e 63  ugh when the inc
36ed0 6f 6d 69 6e 67 20 0a 09 09 20 2a 20 20 20 20 20  oming ... *     
36ee0 20 20 20 20 20 73 69 67 6e 61 6c 20 65 78 63 65       signal exce
36ef0 65 64 73 20 61 20 73 70 65 63 69 66 69 65 64 20  eds a specified 
36f00 74 68 72 65 73 68 6f 6c 64 2e 20 54 6f 20 64 6f  threshold. To do
36f10 20 74 68 69 73 2c 20 47 61 74 65 20 75 73 65 73   this, Gate uses
36f20 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20   ... *          
36f30 61 20 54 6f 6e 65 2e 46 6f 6c 6c 6f 77 65 72 20  a Tone.Follower 
36f40 74 6f 20 66 6f 6c 6c 6f 77 20 74 68 65 20 61 6d  to follow the am
36f50 70 6c 69 74 75 64 65 20 6f 66 20 74 68 65 20 69  plitude of the i
36f60 6e 63 6f 6d 69 6e 67 20 73 69 67 6e 61 6c 2e 20  ncoming signal. 
36f70 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 41  ... *          A
36f80 20 63 6f 6d 6d 6f 6e 20 69 6d 70 6c 65 6d 65 6e   common implemen
36f90 74 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 63  tation of this c
36fa0 6c 61 73 73 20 69 73 20 61 20 5b 4e 6f 69 73 65  lass is a [Noise
36fb0 20 47 61 74 65 5d 28 68 74 74 70 73 3a 2f 2f 65   Gate](https://e
36fc0 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
36fd0 77 69 6b 69 2f 4e 6f 69 73 65 5f 67 61 74 65 29  wiki/Noise_gate)
36fe0 2e 0a 09 09 20 2a 20 20 0a 09 09 20 2a 20 20 40  .... *  ... *  @
36ff0 63 6f 6e 73 74 72 75 63 74 6f 72 0a 09 09 20 2a  constructor... *
37000 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65    @extends {Tone
37010 7d 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b  }... *  @param {
37020 44 65 63 69 62 65 6c 73 7c 4f 62 6a 65 63 74 7d  Decibels|Object}
37030 20 5b 74 68 72 65 73 68 6f 6c 64 5d 20 54 68 65   [threshold] The
37040 20 74 68 72 65 73 68 6f 6c 64 20 61 62 6f 76 65   threshold above
37050 20 77 68 69 63 68 20 74 68 65 20 67 61 74 65 20   which the gate 
37060 77 69 6c 6c 20 6f 70 65 6e 2e 20 0a 09 09 20 2a  will open. ... *
37070 20 20 40 70 61 72 61 6d 20 7b 54 69 6d 65 3d 7d    @param {Time=}
37080 20 61 74 74 61 63 6b 20 54 68 65 20 66 6f 6c 6c   attack The foll
37090 6f 77 65 72 27 73 20 61 74 74 61 63 6b 20 74 69  ower's attack ti
370a0 6d 65 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  me... *  @param 
370b0 7b 54 69 6d 65 3d 7d 20 72 65 6c 65 61 73 65 20  {Time=} release 
370c0 54 68 65 20 66 6f 6c 6c 6f 77 65 72 27 73 20 72  The follower's r
370d0 65 6c 65 61 73 65 20 74 69 6d 65 0a 09 09 20 2a  elease time... *
370e0 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20    @example... * 
370f0 76 61 72 20 67 61 74 65 20 3d 20 6e 65 77 20 54  var gate = new T
37100 6f 6e 65 2e 47 61 74 65 28 2d 33 30 2c 20 30 2e  one.Gate(-30, 0.
37110 32 2c 20 30 2e 33 29 2e 74 6f 4d 61 73 74 65 72  2, 0.3).toMaster
37120 28 29 3b 0a 09 09 20 2a 20 76 61 72 20 6d 69 63  ();... * var mic
37130 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 55 73 65 72   = new Tone.User
37140 4d 65 64 69 61 28 29 2e 63 6f 6e 6e 65 63 74 28  Media().connect(
37150 67 61 74 65 29 3b 0a 09 09 20 2a 20 2f 2f 74 68  gate);... * //th
37160 65 20 67 61 74 65 20 77 69 6c 6c 20 6f 6e 6c 79  e gate will only
37170 20 70 61 73 73 20 74 68 72 6f 75 67 68 20 74 68   pass through th
37180 65 20 69 6e 63 6f 6d 69 6e 67 20 0a 09 09 20 2a  e incoming ... *
37190 20 2f 2f 73 69 67 6e 61 6c 20 77 68 65 6e 20 69   //signal when i
371a0 74 27 73 20 6c 6f 75 64 65 72 20 74 68 61 6e 20  t's louder than 
371b0 2d 33 30 64 62 0a 09 09 20 2a 2f 0a 09 20 20 20  -30db... */..   
371c0 20 54 6f 6e 65 2e 47 61 74 65 20 3d 20 66 75 6e   Tone.Gate = fun
371d0 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
371e0 20 20 20 20 74 68 69 73 2e 63 72 65 61 74 65 49      this.createI
371f0 6e 73 4f 75 74 73 28 31 2c 20 31 29 3b 0a 09 20  nsOuts(1, 1);.. 
37200 20 20 20 20 20 20 20 76 61 72 20 6f 70 74 69 6f         var optio
37210 6e 73 20 3d 20 74 68 69 73 2e 6f 70 74 69 6f 6e  ns = this.option
37220 73 4f 62 6a 65 63 74 28 61 72 67 75 6d 65 6e 74  sObject(argument
37230 73 2c 20 5b 0a 09 20 20 20 20 20 20 20 20 20 20  s, [..          
37240 20 20 27 74 68 72 65 73 68 6f 6c 64 27 2c 0a 09    'threshold',..
37250 20 20 20 20 20 20 20 20 20 20 20 20 27 61 74 74              'att
37260 61 63 6b 27 2c 0a 09 20 20 20 20 20 20 20 20 20  ack',..         
37270 20 20 20 27 72 65 6c 65 61 73 65 27 0a 09 20 20     'release'..  
37280 20 20 20 20 20 20 5d 2c 20 54 6f 6e 65 2e 47 61        ], Tone.Ga
37290 74 65 2e 64 65 66 61 75 6c 74 73 29 3b 0a 09 20  te.defaults);.. 
372a0 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
372b0 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 46 6f    @type {Tone.Fo
372c0 6c 6c 6f 77 65 72 7d 0a 09 09 09 20 2a 20 20 40  llower}.... *  @
372d0 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
372e0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 66 6f          this._fo
372f0 6c 6c 6f 77 65 72 20 3d 20 6e 65 77 20 54 6f 6e  llower = new Ton
37300 65 2e 46 6f 6c 6c 6f 77 65 72 28 6f 70 74 69 6f  e.Follower(optio
37310 6e 73 2e 61 74 74 61 63 6b 2c 20 6f 70 74 69 6f  ns.attack, optio
37320 6e 73 2e 72 65 6c 65 61 73 65 29 3b 0a 09 20 20  ns.release);..  
37330 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
37340 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 47 72 65   @type {Tone.Gre
37350 61 74 65 72 54 68 61 6e 7d 0a 09 09 09 20 2a 20  aterThan}.... * 
37360 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f   @private.... */
37370 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
37380 67 74 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 47 72  gt = new Tone.Gr
37390 65 61 74 65 72 54 68 61 6e 28 74 68 69 73 2e 64  eaterThan(this.d
373a0 62 54 6f 47 61 69 6e 28 6f 70 74 69 6f 6e 73 2e  bToGain(options.
373b0 74 68 72 65 73 68 6f 6c 64 29 29 3b 0a 09 20 20  threshold));..  
373c0 20 20 20 20 20 20 2f 2f 74 68 65 20 63 6f 6e 6e        //the conn
373d0 65 63 74 69 6f 6e 73 0a 09 20 20 20 20 20 20 20  ections..       
373e0 20 74 68 69 73 2e 69 6e 70 75 74 2e 63 6f 6e 6e   this.input.conn
373f0 65 63 74 28 74 68 69 73 2e 6f 75 74 70 75 74 29  ect(this.output)
37400 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 74 68 65  ;..        //the
37410 20 63 6f 6e 74 72 6f 6c 20 73 69 67 6e 61 6c 0a   control signal.
37420 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e  .        this.in
37430 70 75 74 2e 63 68 61 69 6e 28 74 68 69 73 2e 5f  put.chain(this._
37440 67 74 2c 20 74 68 69 73 2e 5f 66 6f 6c 6c 6f 77  gt, this._follow
37450 65 72 2c 20 74 68 69 73 2e 6f 75 74 70 75 74 2e  er, this.output.
37460 67 61 69 6e 29 3b 0a 09 20 20 20 20 7d 3b 0a 09  gain);..    };..
37470 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28      Tone.extend(
37480 54 6f 6e 65 2e 47 61 74 65 29 3b 0a 09 20 20 20  Tone.Gate);..   
37490 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6f 6e 73   /**... *  @cons
374a0 74 0a 09 09 20 2a 20 20 40 73 74 61 74 69 63 0a  t... *  @static.
374b0 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4f 62 6a  .. *  @type {Obj
374c0 65 63 74 7d 0a 09 09 20 2a 2f 0a 09 20 20 20 20  ect}... */..    
374d0 54 6f 6e 65 2e 47 61 74 65 2e 64 65 66 61 75 6c  Tone.Gate.defaul
374e0 74 73 20 3d 20 7b 0a 09 20 20 20 20 20 20 20 20  ts = {..        
374f0 27 61 74 74 61 63 6b 27 3a 20 30 2e 31 2c 0a 09  'attack': 0.1,..
37500 20 20 20 20 20 20 20 20 27 72 65 6c 65 61 73 65          'release
37510 27 3a 20 30 2e 31 2c 0a 09 20 20 20 20 20 20 20  ': 0.1,..       
37520 20 27 74 68 72 65 73 68 6f 6c 64 27 3a 20 2d 34   'threshold': -4
37530 30 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  0..    };..    /
37540 2a 2a 0a 09 09 20 2a 20 54 68 65 20 74 68 72 65  **... * The thre
37550 73 68 6f 6c 64 20 6f 66 20 74 68 65 20 67 61 74  shold of the gat
37560 65 20 69 6e 20 64 65 63 69 62 65 6c 73 0a 09 09  e in decibels...
37570 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e   * @memberOf Ton
37580 65 2e 47 61 74 65 23 0a 09 09 20 2a 20 40 74 79  e.Gate#... * @ty
37590 70 65 20 7b 44 65 63 69 62 65 6c 73 7d 0a 09 09  pe {Decibels}...
375a0 20 2a 20 40 6e 61 6d 65 20 74 68 72 65 73 68 6f   * @name thresho
375b0 6c 64 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62  ld... */..    Ob
375c0 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65  ject.definePrope
375d0 72 74 79 28 54 6f 6e 65 2e 47 61 74 65 2e 70 72  rty(Tone.Gate.pr
375e0 6f 74 6f 74 79 70 65 2c 20 27 74 68 72 65 73 68  ototype, 'thresh
375f0 6f 6c 64 27 2c 20 7b 0a 09 20 20 20 20 20 20 20  old', {..       
37600 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   get: function (
37610 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
37620 20 72 65 74 75 72 6e 20 74 68 69 73 2e 67 61 69   return this.gai
37630 6e 54 6f 44 62 28 74 68 69 73 2e 5f 67 74 2e 76  nToDb(this._gt.v
37640 61 6c 75 65 29 3b 0a 09 20 20 20 20 20 20 20 20  alue);..        
37650 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a  },..        set:
37660 20 66 75 6e 63 74 69 6f 6e 20 28 74 68 72 65 73   function (thres
37670 68 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  h) {..          
37680 20 20 74 68 69 73 2e 5f 67 74 2e 76 61 6c 75 65    this._gt.value
37690 20 3d 20 74 68 69 73 2e 64 62 54 6f 47 61 69 6e   = this.dbToGain
376a0 28 74 68 72 65 73 68 29 3b 0a 09 20 20 20 20 20  (thresh);..     
376b0 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20     }..    });.. 
376c0 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65 20     /**... * The 
376d0 61 74 74 61 63 6b 20 73 70 65 65 64 20 6f 66 20  attack speed of 
376e0 74 68 65 20 67 61 74 65 0a 09 09 20 2a 20 40 6d  the gate... * @m
376f0 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 47 61 74  emberOf Tone.Gat
37700 65 23 0a 09 09 20 2a 20 40 74 79 70 65 20 7b 54  e#... * @type {T
37710 69 6d 65 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20  ime}... * @name 
37720 61 74 74 61 63 6b 0a 09 09 20 2a 2f 0a 09 20 20  attack... */..  
37730 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50    Object.defineP
37740 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 47 61 74  roperty(Tone.Gat
37750 65 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 61 74  e.prototype, 'at
37760 74 61 63 6b 27 2c 20 7b 0a 09 20 20 20 20 20 20  tack', {..      
37770 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    get: function 
37780 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  () {..          
37790 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 66    return this._f
377a0 6f 6c 6c 6f 77 65 72 2e 61 74 74 61 63 6b 3b 0a  ollower.attack;.
377b0 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20  .        },..   
377c0 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74 69       set: functi
377d0 6f 6e 20 28 61 74 74 61 63 6b 54 69 6d 65 29 20  on (attackTime) 
377e0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
377f0 68 69 73 2e 5f 66 6f 6c 6c 6f 77 65 72 2e 61 74  his._follower.at
37800 74 61 63 6b 20 3d 20 61 74 74 61 63 6b 54 69 6d  tack = attackTim
37810 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  e;..        }.. 
37820 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a     });..    /**.
37830 09 09 20 2a 20 54 68 65 20 72 65 6c 65 61 73 65  .. * The release
37840 20 73 70 65 65 64 20 6f 66 20 74 68 65 20 67 61   speed of the ga
37850 74 65 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f  te... * @memberO
37860 66 20 54 6f 6e 65 2e 47 61 74 65 23 0a 09 09 20  f Tone.Gate#... 
37870 2a 20 40 74 79 70 65 20 7b 54 69 6d 65 7d 0a 09  * @type {Time}..
37880 09 20 2a 20 40 6e 61 6d 65 20 72 65 6c 65 61 73  . * @name releas
37890 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a  e... */..    Obj
378a0 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72  ect.defineProper
378b0 74 79 28 54 6f 6e 65 2e 47 61 74 65 2e 70 72 6f  ty(Tone.Gate.pro
378c0 74 6f 74 79 70 65 2c 20 27 72 65 6c 65 61 73 65  totype, 'release
378d0 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65  ', {..        ge
378e0 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b  t: function () {
378f0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
37900 74 75 72 6e 20 74 68 69 73 2e 5f 66 6f 6c 6c 6f  turn this._follo
37910 77 65 72 2e 72 65 6c 65 61 73 65 3b 0a 09 20 20  wer.release;..  
37920 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20        },..      
37930 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    set: function 
37940 28 72 65 6c 65 61 73 65 54 69 6d 65 29 20 7b 0a  (releaseTime) {.
37950 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
37960 73 2e 5f 66 6f 6c 6c 6f 77 65 72 2e 72 65 6c 65  s._follower.rele
37970 61 73 65 20 3d 20 72 65 6c 65 61 73 65 54 69 6d  ase = releaseTim
37980 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  e;..        }.. 
37990 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a     });..    /**.
379a0 09 09 20 2a 20 20 43 6c 65 61 6e 20 75 70 2e 20  .. *  Clean up. 
379b0 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20  ... *  @returns 
379c0 7b 54 6f 6e 65 2e 47 61 74 65 7d 20 74 68 69 73  {Tone.Gate} this
379d0 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
379e0 2e 47 61 74 65 2e 70 72 6f 74 6f 74 79 70 65 2e  .Gate.prototype.
379f0 64 69 73 70 6f 73 65 20 3d 20 66 75 6e 63 74 69  dispose = functi
37a00 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
37a10 20 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e   Tone.prototype.
37a20 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69  dispose.call(thi
37a30 73 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  s);..        thi
37a40 73 2e 5f 66 6f 6c 6c 6f 77 65 72 2e 64 69 73 70  s._follower.disp
37a50 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ose();..        
37a60 74 68 69 73 2e 5f 67 74 2e 64 69 73 70 6f 73 65  this._gt.dispose
37a70 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ();..        thi
37a80 73 2e 5f 66 6f 6c 6c 6f 77 65 72 20 3d 20 6e 75  s._follower = nu
37a90 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ll;..        thi
37aa0 73 2e 5f 67 74 20 3d 20 6e 75 6c 6c 3b 0a 09 20  s._gt = null;.. 
37ab0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
37ac0 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  is;..    };..   
37ad0 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 47 61 74   return Tone.Gat
37ae0 65 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28  e;..});..Module(
37af0 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20  function (Tone) 
37b00 7b 0a 09 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a  {..    ..    /**
37b10 0a 09 09 20 2a 20 20 40 63 6c 61 73 73 20 20 41  ... *  @class  A
37b20 20 54 69 6d 65 6c 69 6e 65 20 53 74 61 74 65 2e   Timeline State.
37b30 20 50 72 6f 76 69 64 65 73 20 74 68 65 20 6d 65   Provides the me
37b40 74 68 6f 64 73 3a 20 3c 63 6f 64 65 3e 73 65 74  thods: <code>set
37b50 53 74 61 74 65 41 74 54 69 6d 65 28 22 73 74 61  StateAtTime("sta
37b60 74 65 22 2c 20 74 69 6d 65 29 3c 2f 63 6f 64 65  te", time)</code
37b70 3e 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20  >... *          
37b80 61 6e 64 20 3c 63 6f 64 65 3e 67 65 74 56 61 6c  and <code>getVal
37b90 75 65 41 74 54 69 6d 65 28 74 69 6d 65 29 3c 2f  ueAtTime(time)</
37ba0 63 6f 64 65 3e 2e 0a 09 09 20 2a 0a 09 09 20 2a  code>.... *... *
37bb0 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65    @extends {Tone
37bc0 2e 54 69 6d 65 6c 69 6e 65 7d 0a 09 09 20 2a 20  .Timeline}... * 
37bd0 20 40 70 61 72 61 6d 20 7b 53 74 72 69 6e 67 7d   @param {String}
37be0 20 69 6e 69 74 69 61 6c 20 54 68 65 20 69 6e 69   initial The ini
37bf0 74 69 61 6c 20 73 74 61 74 65 20 6f 66 20 74 68  tial state of th
37c00 65 20 54 69 6d 65 6c 69 6e 65 53 74 61 74 65 2e  e TimelineState.
37c10 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20   ... *          
37c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c30 44 65 66 61 75 6c 74 73 20 74 6f 20 3c 63 6f 64  Defaults to <cod
37c40 65 3e 75 6e 64 65 66 69 6e 65 64 3c 2f 63 6f 64  e>undefined</cod
37c50 65 3e 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  e>... */..    To
37c60 6e 65 2e 54 69 6d 65 6c 69 6e 65 53 74 61 74 65  ne.TimelineState
37c70 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 69 6e 69   = function (ini
37c80 74 69 61 6c 29 20 7b 0a 09 20 20 20 20 20 20 20  tial) {..       
37c90 20 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 2e 63   Tone.Timeline.c
37ca0 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20 20 20  all(this);..    
37cb0 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54      /**.... *  T
37cc0 68 65 20 69 6e 69 74 69 61 6c 20 73 74 61 74 65  he initial state
37cd0 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  .... *  @private
37ce0 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 53  .... *  @type {S
37cf0 74 72 69 6e 67 7d 0a 09 09 09 20 2a 2f 0a 09 20  tring}.... */.. 
37d00 20 20 20 20 20 20 20 74 68 69 73 2e 5f 69 6e 69         this._ini
37d10 74 69 61 6c 20 3d 20 69 6e 69 74 69 61 6c 3b 0a  tial = initial;.
37d20 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e  .    };..    Ton
37d30 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 54 69  e.extend(Tone.Ti
37d40 6d 65 6c 69 6e 65 53 74 61 74 65 2c 20 54 6f 6e  melineState, Ton
37d50 65 2e 54 69 6d 65 6c 69 6e 65 29 3b 0a 09 20 20  e.Timeline);..  
37d60 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 52 65 74 75    /**... *  Retu
37d70 72 6e 73 20 74 68 65 20 73 63 68 65 64 75 6c 65  rns the schedule
37d80 64 20 73 74 61 74 65 20 73 63 68 65 64 75 6c 65  d state schedule
37d90 64 20 62 65 66 6f 72 65 20 6f 72 20 61 74 0a 09  d before or at..
37da0 09 20 2a 20 20 74 68 65 20 67 69 76 65 6e 20 74  . *  the given t
37db0 69 6d 65 2e 0a 09 09 20 2a 20 20 40 70 61 72 61  ime.... *  @para
37dc0 6d 20 20 7b 4e 75 6d 62 65 72 7d 20 20 74 69 6d  m  {Number}  tim
37dd0 65 20 20 54 68 65 20 74 69 6d 65 20 74 6f 20 71  e  The time to q
37de0 75 65 72 79 2e 0a 09 09 20 2a 20 20 40 72 65 74  uery.... *  @ret
37df0 75 72 6e 20 20 7b 53 74 72 69 6e 67 7d 20 20 54  urn  {String}  T
37e00 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73  he name of the s
37e10 74 61 74 65 20 69 6e 70 75 74 20 69 6e 20 73 65  tate input in se
37e20 74 53 74 61 74 65 41 74 54 69 6d 65 2e 0a 09 09  tStateAtTime....
37e30 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69   */..    Tone.Ti
37e40 6d 65 6c 69 6e 65 53 74 61 74 65 2e 70 72 6f 74  melineState.prot
37e50 6f 74 79 70 65 2e 67 65 74 56 61 6c 75 65 41 74  otype.getValueAt
37e60 54 69 6d 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20  Time = function 
37e70 28 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20  (time) {..      
37e80 20 20 76 61 72 20 65 76 65 6e 74 20 3d 20 74 68    var event = th
37e90 69 73 2e 67 65 74 28 74 69 6d 65 29 3b 0a 09 20  is.get(time);.. 
37ea0 20 20 20 20 20 20 20 69 66 20 28 65 76 65 6e 74         if (event
37eb0 20 21 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 09 20 20   !== null) {..  
37ec0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
37ed0 20 65 76 65 6e 74 2e 73 74 61 74 65 3b 0a 09 20   event.state;.. 
37ee0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
37ef0 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
37f00 75 72 6e 20 74 68 69 73 2e 5f 69 6e 69 74 69 61  urn this._initia
37f10 6c 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  l;..        }.. 
37f20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09     };..    /**..
37f30 09 20 2a 20 20 52 65 74 75 72 6e 73 20 74 68 65  . *  Returns the
37f40 20 73 63 68 65 64 75 6c 65 64 20 73 74 61 74 65   scheduled state
37f50 20 73 63 68 65 64 75 6c 65 64 20 62 65 66 6f 72   scheduled befor
37f60 65 20 6f 72 20 61 74 0a 09 09 20 2a 20 20 74 68  e or at... *  th
37f70 65 20 67 69 76 65 6e 20 74 69 6d 65 2e 0a 09 09  e given time....
37f80 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 53 74 72   *  @param  {Str
37f90 69 6e 67 7d 20 20 73 74 61 74 65 20 54 68 65 20  ing}  state The 
37fa0 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 74 61 74  name of the stat
37fb0 65 20 74 6f 20 73 65 74 2e 0a 09 09 20 2a 20 20  e to set.... *  
37fc0 40 70 61 72 61 6d 20 20 7b 4e 75 6d 62 65 72 7d  @param  {Number}
37fd0 20 20 74 69 6d 65 20 20 54 68 65 20 74 69 6d 65    time  The time
37fe0 20 74 6f 20 71 75 65 72 79 2e 0a 09 09 20 2a 2f   to query.... */
37ff0 0a 09 20 20 20 20 54 6f 6e 65 2e 54 69 6d 65 6c  ..    Tone.Timel
38000 69 6e 65 53 74 61 74 65 2e 70 72 6f 74 6f 74 79  ineState.prototy
38010 70 65 2e 73 65 74 53 74 61 74 65 41 74 54 69 6d  pe.setStateAtTim
38020 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 73 74  e = function (st
38030 61 74 65 2c 20 74 69 6d 65 29 20 7b 0a 09 20 20  ate, time) {..  
38040 20 20 20 20 20 20 74 68 69 73 2e 61 64 64 28 7b        this.add({
38050 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 73  ..            's
38060 74 61 74 65 27 3a 20 73 74 61 74 65 2c 0a 09 20  tate': state,.. 
38070 20 20 20 20 20 20 20 20 20 20 20 27 74 69 6d 65             'time
38080 27 3a 20 74 69 6d 65 0a 09 20 20 20 20 20 20 20  ': time..       
38090 20 7d 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20   });..    };..  
380a0 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 54 69    return Tone.Ti
380b0 6d 65 6c 69 6e 65 53 74 61 74 65 3b 0a 09 7d 29  melineState;..})
380c0 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69  ;..Module(functi
380d0 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20  on (Tone) {..   
380e0 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20   ..    /**... * 
380f0 20 40 63 6c 61 73 73 20 54 6f 6e 65 2e 45 6d 69   @class Tone.Emi
38100 74 74 65 72 20 67 69 76 65 73 20 63 6c 61 73 73  tter gives class
38110 65 73 20 77 68 69 63 68 20 65 78 74 65 6e 64 20  es which extend 
38120 69 74 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  it... *         
38130 74 68 65 20 61 62 69 6c 69 74 79 20 74 6f 20 6c  the ability to l
38140 69 73 74 65 6e 20 66 6f 72 20 61 6e 64 20 65 6d  isten for and em
38150 69 74 20 65 76 65 6e 74 73 2e 20 0a 09 09 20 2a  it events. ... *
38160 20 20 20 20 20 20 20 20 20 49 6e 73 70 69 72 61           Inspira
38170 74 69 6f 6e 20 61 6e 64 20 72 65 66 65 72 65 6e  tion and referen
38180 63 65 20 66 72 6f 6d 20 4a 65 72 6f 6d 65 20 45  ce from Jerome E
38190 74 69 65 6e 6e 65 27 73 20 5b 4d 69 63 72 6f 45  tienne's [MicroE
381a0 76 65 6e 74 5d 28 68 74 74 70 73 3a 2f 2f 67 69  vent](https://gi
381b0 74 68 75 62 2e 63 6f 6d 2f 6a 65 72 6f 6d 65 65  thub.com/jeromee
381c0 74 69 65 6e 6e 65 2f 6d 69 63 72 6f 65 76 65 6e  tienne/microeven
381d0 74 2e 6a 73 29 2e 0a 09 09 20 2a 20 20 20 20 20  t.js).... *     
381e0 20 20 20 20 4d 49 54 20 28 63 29 20 32 30 31 31      MIT (c) 2011
381f0 20 4a 65 72 6f 6d 65 20 45 74 69 65 6e 6e 65 2e   Jerome Etienne.
38200 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 0a 09  ... *         ..
38210 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b 54  . *  @extends {T
38220 6f 6e 65 7d 0a 09 09 20 2a 2f 0a 09 20 20 20 20  one}... */..    
38230 54 6f 6e 65 2e 45 6d 69 74 74 65 72 20 3d 20 66  Tone.Emitter = f
38240 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
38250 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
38260 20 43 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 6f 66   Contains all of
38270 20 74 68 65 20 65 76 65 6e 74 73 2e 0a 09 09 09   the events.....
38280 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
38290 20 2a 20 20 40 74 79 70 65 20 20 7b 4f 62 6a 65   *  @type  {Obje
382a0 63 74 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  ct}.... */..    
382b0 20 20 20 20 74 68 69 73 2e 5f 65 76 65 6e 74 73      this._events
382c0 20 3d 20 7b 7d 3b 0a 09 20 20 20 20 7d 3b 0a 09   = {};..    };..
382d0 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28      Tone.extend(
382e0 54 6f 6e 65 2e 45 6d 69 74 74 65 72 29 3b 0a 09  Tone.Emitter);..
382f0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 42 69      /**... *  Bi
38300 6e 64 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f  nd a callback to
38310 20 61 20 73 70 65 63 69 66 69 63 20 65 76 65 6e   a specific even
38320 74 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  t.... *  @param 
38330 20 7b 53 74 72 69 6e 67 7d 20 20 20 20 65 76 65   {String}    eve
38340 6e 74 20 20 20 20 20 54 68 65 20 6e 61 6d 65 20  nt     The name 
38350 6f 66 20 74 68 65 20 65 76 65 6e 74 20 74 6f 20  of the event to 
38360 6c 69 73 74 65 6e 20 66 6f 72 2e 0a 09 09 20 2a  listen for.... *
38370 20 20 40 70 61 72 61 6d 20 20 7b 46 75 6e 63 74    @param  {Funct
38380 69 6f 6e 7d 20 20 63 61 6c 6c 62 61 63 6b 20 20  ion}  callback  
38390 54 68 65 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20  The callback to 
383a0 69 6e 76 6f 6b 65 20 77 68 65 6e 20 74 68 65 0a  invoke when the.
383b0 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
383c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
383d0 20 20 20 20 65 76 65 6e 74 20 69 73 20 65 6d 69      event is emi
383e0 74 74 65 64 0a 09 09 20 2a 20 20 40 72 65 74 75  tted... *  @retu
383f0 72 6e 20 20 7b 54 6f 6e 65 2e 45 6d 69 74 74 65  rn  {Tone.Emitte
38400 72 7d 20 20 20 20 74 68 69 73 0a 09 09 20 2a 2f  r}    this... */
38410 0a 09 20 20 20 20 54 6f 6e 65 2e 45 6d 69 74 74  ..    Tone.Emitt
38420 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e 6f 6e 20  er.prototype.on 
38430 3d 20 66 75 6e 63 74 69 6f 6e 20 28 65 76 65 6e  = function (even
38440 74 2c 20 63 61 6c 6c 62 61 63 6b 29 20 7b 0a 09  t, callback) {..
38450 20 20 20 20 20 20 20 20 2f 2f 73 70 6c 69 74 20          //split 
38460 74 68 65 20 65 76 65 6e 74 0a 09 20 20 20 20 20  the event..     
38470 20 20 20 76 61 72 20 65 76 65 6e 74 73 20 3d 20     var events = 
38480 65 76 65 6e 74 2e 73 70 6c 69 74 28 2f 5c 57 2b  event.split(/\W+
38490 2f 29 3b 0a 09 20 20 20 20 20 20 20 20 66 6f 72  /);..        for
384a0 20 28 76 61 72 20 69 20 3d 20 30 3b 20 69 20 3c   (var i = 0; i <
384b0 20 65 76 65 6e 74 73 2e 6c 65 6e 67 74 68 3b 20   events.length; 
384c0 69 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20 20 20  i++) {..        
384d0 20 20 20 20 76 61 72 20 65 76 65 6e 74 4e 61 6d      var eventNam
384e0 65 20 3d 20 65 76 65 6e 74 73 5b 69 5d 3b 0a 09  e = events[i];..
384f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
38500 21 74 68 69 73 2e 5f 65 76 65 6e 74 73 2e 68 61  !this._events.ha
38510 73 4f 77 6e 50 72 6f 70 65 72 74 79 28 65 76 65  sOwnProperty(eve
38520 6e 74 4e 61 6d 65 29 29 20 7b 0a 09 20 20 20 20  ntName)) {..    
38530 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
38540 2e 5f 65 76 65 6e 74 73 5b 65 76 65 6e 74 4e 61  ._events[eventNa
38550 6d 65 5d 20 3d 20 5b 5d 3b 0a 09 20 20 20 20 20  me] = [];..     
38560 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
38570 20 20 20 20 20 20 74 68 69 73 2e 5f 65 76 65 6e        this._even
38580 74 73 5b 65 76 65 6e 74 4e 61 6d 65 5d 2e 70 75  ts[eventName].pu
38590 73 68 28 63 61 6c 6c 62 61 63 6b 29 3b 0a 09 20  sh(callback);.. 
385a0 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
385b0 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09    return this;..
385c0 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
385d0 09 09 20 2a 20 20 52 65 6d 6f 76 65 20 74 68 65  .. *  Remove the
385e0 20 65 76 65 6e 74 20 6c 69 73 74 65 6e 65 72 2e   event listener.
385f0 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b  ... *  @param  {
38600 53 74 72 69 6e 67 7d 20 20 20 20 65 76 65 6e 74  String}    event
38610 20 20 20 20 20 54 68 65 20 65 76 65 6e 74 20 74       The event t
38620 6f 20 73 74 6f 70 20 6c 69 73 74 65 6e 69 6e 67  o stop listening
38630 20 74 6f 2e 0a 09 09 20 2a 20 20 40 70 61 72 61   to.... *  @para
38640 6d 20 20 7b 46 75 6e 63 74 69 6f 6e 3d 7d 20 20  m  {Function=}  
38650 63 61 6c 6c 62 61 63 6b 20 20 54 68 65 20 63 61  callback  The ca
38660 6c 6c 62 61 63 6b 20 77 68 69 63 68 20 77 61 73  llback which was
38670 20 62 6f 75 6e 64 20 74 6f 20 0a 09 09 20 2a 20   bound to ... * 
38680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
386a0 68 65 20 65 76 65 6e 74 20 77 69 74 68 20 54 6f  he event with To
386b0 6e 65 2e 45 6d 69 74 74 65 72 2e 6f 6e 2e 0a 09  ne.Emitter.on...
386c0 09 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
386d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
386e0 20 20 20 49 66 20 6e 6f 20 63 61 6c 6c 62 61 63     If no callbac
386f0 6b 20 69 73 20 67 69 76 65 6e 2c 20 61 6c 6c 20  k is given, all 
38700 63 61 6c 6c 62 61 63 6b 73 0a 09 09 20 2a 20 20  callbacks... *  
38710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 76                ev
38730 65 6e 74 73 20 61 72 65 20 72 65 6d 6f 76 65 64  ents are removed
38740 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20  .... *  @return 
38750 20 7b 54 6f 6e 65 2e 45 6d 69 74 74 65 72 7d 20   {Tone.Emitter} 
38760 20 20 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20     this... */.. 
38770 20 20 20 54 6f 6e 65 2e 45 6d 69 74 74 65 72 2e     Tone.Emitter.
38780 70 72 6f 74 6f 74 79 70 65 2e 6f 66 66 20 3d 20  prototype.off = 
38790 66 75 6e 63 74 69 6f 6e 20 28 65 76 65 6e 74 2c  function (event,
387a0 20 63 61 6c 6c 62 61 63 6b 29 20 7b 0a 09 20 20   callback) {..  
387b0 20 20 20 20 20 20 76 61 72 20 65 76 65 6e 74 73        var events
387c0 20 3d 20 65 76 65 6e 74 2e 73 70 6c 69 74 28 2f   = event.split(/
387d0 5c 57 2b 2f 29 3b 0a 09 20 20 20 20 20 20 20 20  \W+/);..        
387e0 66 6f 72 20 28 76 61 72 20 65 76 20 3d 20 30 3b  for (var ev = 0;
387f0 20 65 76 20 3c 20 65 76 65 6e 74 73 2e 6c 65 6e   ev < events.len
38800 67 74 68 3b 20 65 76 2b 2b 29 20 7b 0a 09 20 20  gth; ev++) {..  
38810 20 20 20 20 20 20 20 20 20 20 65 76 65 6e 74 20            event 
38820 3d 20 65 76 65 6e 74 73 5b 65 76 5d 3b 0a 09 20  = events[ev];.. 
38830 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
38840 68 69 73 2e 5f 65 76 65 6e 74 73 2e 68 61 73 4f  his._events.hasO
38850 77 6e 50 72 6f 70 65 72 74 79 28 65 76 65 6e 74  wnProperty(event
38860 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  )) {..          
38870 20 20 20 20 20 20 69 66 20 28 54 6f 6e 65 2e 70        if (Tone.p
38880 72 6f 74 6f 74 79 70 65 2e 69 73 55 6e 64 65 66  rototype.isUndef
38890 28 63 61 6c 6c 62 61 63 6b 29 29 20 7b 0a 09 20  (callback)) {.. 
388a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
388b0 20 20 20 74 68 69 73 2e 5f 65 76 65 6e 74 73 5b     this._events[
388c0 65 76 65 6e 74 5d 20 3d 20 5b 5d 3b 0a 09 20 20  event] = [];..  
388d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20                } 
388e0 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20  else {..        
388f0 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20              var 
38900 65 76 65 6e 74 4c 69 73 74 20 3d 20 74 68 69 73  eventList = this
38910 2e 5f 65 76 65 6e 74 73 5b 65 76 65 6e 74 5d 3b  ._events[event];
38920 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38930 20 20 20 20 20 20 66 6f 72 20 28 76 61 72 20 69        for (var i
38940 20 3d 20 30 3b 20 69 20 3c 20 65 76 65 6e 74 4c   = 0; i < eventL
38950 69 73 74 2e 6c 65 6e 67 74 68 3b 20 69 2b 2b 29  ist.length; i++)
38960 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
38970 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
38980 65 76 65 6e 74 4c 69 73 74 5b 69 5d 20 3d 3d 3d  eventList[i] ===
38990 20 63 61 6c 6c 62 61 63 6b 29 20 7b 0a 09 20 20   callback) {..  
389a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
389b0 20 20 20 20 20 20 20 20 20 20 65 76 65 6e 74 4c            eventL
389c0 69 73 74 2e 73 70 6c 69 63 65 28 69 2c 20 31 29  ist.splice(i, 1)
389d0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
389e0 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20             }..  
389f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38a00 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20    }..           
38a10 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
38a20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d      }..        }
38a30 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
38a40 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09   this;..    };..
38a50 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 49 6e      /**... *  In
38a60 76 6f 6b 65 20 61 6c 6c 20 6f 66 20 74 68 65 20  voke all of the 
38a70 63 61 6c 6c 62 61 63 6b 73 20 62 6f 75 6e 64 20  callbacks bound 
38a80 74 6f 20 74 68 65 20 65 76 65 6e 74 0a 09 09 20  to the event... 
38a90 2a 20 20 77 69 74 68 20 61 6e 79 20 61 72 67 75  *  with any argu
38aa0 6d 65 6e 74 73 20 70 61 73 73 65 64 20 69 6e 2e  ments passed in.
38ab0 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20   ... *  @param  
38ac0 7b 53 74 72 69 6e 67 7d 20 20 65 76 65 6e 74 20  {String}  event 
38ad0 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
38ae0 20 65 76 65 6e 74 2e 0a 09 09 20 2a 20 20 40 70   event.... *  @p
38af0 61 72 61 6d 20 7b 2a 2e 2e 2e 7d 20 61 72 67 73  aram {*...} args
38b00 20 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74   The arguments t
38b10 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20 66 75  o pass to the fu
38b20 6e 63 74 69 6f 6e 73 20 6c 69 73 74 65 6e 69 6e  nctions listenin
38b30 67 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e  g.... *  @return
38b40 20 20 7b 54 6f 6e 65 2e 45 6d 69 74 74 65 72 7d    {Tone.Emitter}
38b50 20 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20    this... */..  
38b60 20 20 54 6f 6e 65 2e 45 6d 69 74 74 65 72 2e 70    Tone.Emitter.p
38b70 72 6f 74 6f 74 79 70 65 2e 65 6d 69 74 20 3d 20  rototype.emit = 
38b80 66 75 6e 63 74 69 6f 6e 20 28 65 76 65 6e 74 29  function (event)
38b90 20 7b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
38ba0 74 68 69 73 2e 5f 65 76 65 6e 74 73 29 20 7b 0a  this._events) {.
38bb0 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72  .            var
38bc0 20 61 72 67 73 20 3d 20 41 72 72 61 79 2e 70 72   args = Array.pr
38bd0 6f 74 6f 74 79 70 65 2e 73 6c 69 63 65 2e 63 61  ototype.slice.ca
38be0 6c 6c 28 61 72 67 75 6d 65 6e 74 73 2c 20 31 29  ll(arguments, 1)
38bf0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 69  ;..            i
38c00 66 20 28 74 68 69 73 2e 5f 65 76 65 6e 74 73 2e  f (this._events.
38c10 68 61 73 4f 77 6e 50 72 6f 70 65 72 74 79 28 65  hasOwnProperty(e
38c20 76 65 6e 74 29 29 20 7b 0a 09 20 20 20 20 20 20  vent)) {..      
38c30 20 20 20 20 20 20 20 20 20 20 76 61 72 20 65 76            var ev
38c40 65 6e 74 4c 69 73 74 20 3d 20 74 68 69 73 2e 5f  entList = this._
38c50 65 76 65 6e 74 73 5b 65 76 65 6e 74 5d 3b 0a 09  events[event];..
38c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38c70 66 6f 72 20 28 76 61 72 20 69 20 3d 20 30 2c 20  for (var i = 0, 
38c80 6c 65 6e 20 3d 20 65 76 65 6e 74 4c 69 73 74 2e  len = eventList.
38c90 6c 65 6e 67 74 68 3b 20 69 20 3c 20 6c 65 6e 3b  length; i < len;
38ca0 20 69 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20 20   i++) {..       
38cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 76 65               eve
38cc0 6e 74 4c 69 73 74 5b 69 5d 2e 61 70 70 6c 79 28  ntList[i].apply(
38cd0 74 68 69 73 2c 20 61 72 67 73 29 3b 0a 09 20 20  this, args);..  
38ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
38cf0 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09  .            }..
38d00 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
38d10 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a     return this;.
38d20 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
38d30 0a 09 09 20 2a 20 20 41 64 64 20 45 6d 69 74 74  ... *  Add Emitt
38d40 65 72 20 66 75 6e 63 74 69 6f 6e 73 20 28 6f 6e  er functions (on
38d50 2f 6f 66 66 2f 65 6d 69 74 29 20 74 6f 20 74 68  /off/emit) to th
38d60 65 20 6f 62 6a 65 63 74 0a 09 09 20 2a 20 20 40  e object... *  @
38d70 70 61 72 61 6d 20 20 7b 4f 62 6a 65 63 74 7c 46  param  {Object|F
38d80 75 6e 63 74 69 6f 6e 7d 20 20 6f 62 6a 65 63 74  unction}  object
38d90 20 20 54 68 65 20 6f 62 6a 65 63 74 20 6f 72 20    The object or 
38da0 63 6c 61 73 73 20 74 6f 20 65 78 74 65 6e 64 2e  class to extend.
38db0 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
38dc0 2e 45 6d 69 74 74 65 72 2e 6d 69 78 69 6e 20 3d  .Emitter.mixin =
38dd0 20 66 75 6e 63 74 69 6f 6e 20 28 6f 62 6a 65 63   function (objec
38de0 74 29 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61  t) {..        va
38df0 72 20 66 75 6e 63 74 69 6f 6e 73 20 3d 20 5b 0a  r functions = [.
38e00 09 20 20 20 20 20 20 20 20 20 20 20 20 27 6f 6e  .            'on
38e10 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ',..            
38e20 27 6f 66 66 27 2c 0a 09 20 20 20 20 20 20 20 20  'off',..        
38e30 20 20 20 20 27 65 6d 69 74 27 0a 09 20 20 20 20      'emit'..    
38e40 20 20 20 20 5d 3b 0a 09 20 20 20 20 20 20 20 20      ];..        
38e50 6f 62 6a 65 63 74 2e 5f 65 76 65 6e 74 73 20 3d  object._events =
38e60 20 7b 7d 3b 0a 09 20 20 20 20 20 20 20 20 66 6f   {};..        fo
38e70 72 20 28 76 61 72 20 69 20 3d 20 30 3b 20 69 20  r (var i = 0; i 
38e80 3c 20 66 75 6e 63 74 69 6f 6e 73 2e 6c 65 6e 67  < functions.leng
38e90 74 68 3b 20 69 2b 2b 29 20 7b 0a 09 20 20 20 20  th; i++) {..    
38ea0 20 20 20 20 20 20 20 20 76 61 72 20 66 75 6e 63          var func
38eb0 20 3d 20 66 75 6e 63 74 69 6f 6e 73 5b 69 5d 3b   = functions[i];
38ec0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61  ..            va
38ed0 72 20 65 6d 69 74 74 65 72 46 75 6e 63 20 3d 20  r emitterFunc = 
38ee0 54 6f 6e 65 2e 45 6d 69 74 74 65 72 2e 70 72 6f  Tone.Emitter.pro
38ef0 74 6f 74 79 70 65 5b 66 75 6e 63 5d 3b 0a 09 20  totype[func];.. 
38f00 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
38f10 74 5b 66 75 6e 63 5d 20 3d 20 65 6d 69 74 74 65  t[func] = emitte
38f20 72 46 75 6e 63 3b 0a 09 20 20 20 20 20 20 20 20  rFunc;..        
38f30 7d 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  }..    };..    /
38f40 2a 2a 0a 09 09 20 2a 20 20 43 6c 65 61 6e 20 75  **... *  Clean u
38f50 70 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20  p... *  @return 
38f60 20 7b 54 6f 6e 65 2e 45 6d 69 74 74 65 72 7d 20   {Tone.Emitter} 
38f70 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20   this... */..   
38f80 20 54 6f 6e 65 2e 45 6d 69 74 74 65 72 2e 70 72   Tone.Emitter.pr
38f90 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20  ototype.dispose 
38fa0 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  = function () {.
38fb0 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 70 72  .        Tone.pr
38fc0 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 2e  ototype.dispose.
38fd0 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20 20  call(this);..   
38fe0 20 20 20 20 20 74 68 69 73 2e 5f 65 76 65 6e 74       this._event
38ff0 73 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20  s = null;..     
39000 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a     return this;.
39010 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74  .    };..    ret
39020 75 72 6e 20 54 6f 6e 65 2e 45 6d 69 74 74 65 72  urn Tone.Emitter
39030 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66  ;..});..Module(f
39040 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b  unction (Tone) {
39050 0a 09 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a  ..    ..    /**.
39060 09 09 20 2a 20 20 40 63 6c 61 73 73 20 20 41 20  .. *  @class  A 
39070 73 61 6d 70 6c 65 20 61 63 63 75 72 61 74 65 20  sample accurate 
39080 63 6c 6f 63 6b 20 77 68 69 63 68 20 70 72 6f 76  clock which prov
39090 69 64 65 73 20 61 20 63 61 6c 6c 62 61 63 6b 20  ides a callback 
390a0 61 74 20 74 68 65 20 67 69 76 65 6e 20 72 61 74  at the given rat
390b0 65 2e 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20  e. ... *        
390c0 20 20 57 68 69 6c 65 20 74 68 65 20 63 61 6c 6c    While the call
390d0 62 61 63 6b 20 69 73 20 6e 6f 74 20 73 61 6d 70  back is not samp
390e0 6c 65 2d 61 63 63 75 72 61 74 65 20 28 69 74 20  le-accurate (it 
390f0 69 73 20 73 74 69 6c 6c 20 73 75 73 63 65 70 74  is still suscept
39100 69 62 6c 65 20 74 6f 0a 09 09 20 2a 20 20 20 20  ible to... *    
39110 20 20 20 20 20 20 6c 6f 6f 73 65 20 4a 53 20 74        loose JS t
39120 69 6d 69 6e 67 29 2c 20 74 68 65 20 74 69 6d 65  iming), the time
39130 20 70 61 73 73 65 64 20 69 6e 20 61 73 20 74 68   passed in as th
39140 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  e argument to th
39150 65 20 63 61 6c 6c 62 61 63 6b 0a 09 09 20 2a 20  e callback... * 
39160 20 20 20 20 20 20 20 20 20 69 73 20 70 72 65 63           is prec
39170 69 73 65 2e 20 46 6f 72 20 6d 6f 73 74 20 61 70  ise. For most ap
39180 70 6c 69 63 61 74 69 6f 6e 73 2c 20 69 74 20 69  plications, it i
39190 73 20 62 65 74 74 65 72 20 74 6f 20 75 73 65 20  s better to use 
391a0 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 0a 09  Tone.Transport..
391b0 09 20 2a 20 20 20 20 20 20 20 20 20 20 69 6e 73  . *          ins
391c0 74 65 61 64 20 6f 66 20 74 68 65 20 43 6c 6f 63  tead of the Cloc
391d0 6b 20 62 79 20 69 74 73 65 6c 66 20 73 69 6e 63  k by itself sinc
391e0 65 20 79 6f 75 20 63 61 6e 20 73 79 6e 63 68 72  e you can synchr
391f0 6f 6e 69 7a 65 20 6d 75 6c 74 69 70 6c 65 20 63  onize multiple c
39200 61 6c 6c 62 61 63 6b 73 2e 0a 09 09 20 2a 0a 09  allbacks.... *..
39210 09 20 2a 20 09 40 63 6f 6e 73 74 72 75 63 74 6f  . * .@constructo
39220 72 0a 09 09 20 2a 20 20 40 65 78 74 65 6e 64 73  r... *  @extends
39230 20 7b 54 6f 6e 65 2e 45 6d 69 74 74 65 72 7d 0a   {Tone.Emitter}.
39240 09 09 20 2a 20 09 40 70 61 72 61 6d 20 7b 66 75  .. * .@param {fu
39250 6e 63 74 69 6f 6e 7d 20 63 61 6c 6c 62 61 63 6b  nction} callback
39260 20 54 68 65 20 63 61 6c 6c 62 61 63 6b 20 74 6f   The callback to
39270 20 62 65 20 69 6e 76 6f 6b 65 64 20 77 69 74 68   be invoked with
39280 20 74 68 65 20 74 69 6d 65 20 6f 66 20 74 68 65   the time of the
39290 20 61 75 64 69 6f 20 65 76 65 6e 74 0a 09 09 20   audio event... 
392a0 2a 20 09 40 70 61 72 61 6d 20 7b 46 72 65 71 75  * .@param {Frequ
392b0 65 6e 63 79 7d 20 66 72 65 71 75 65 6e 63 79 20  ency} frequency 
392c0 54 68 65 20 72 61 74 65 20 6f 66 20 74 68 65 20  The rate of the 
392d0 63 61 6c 6c 62 61 63 6b 0a 09 09 20 2a 20 09 40  callback... * .@
392e0 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 2f 2f 74  example... * //t
392f0 68 65 20 63 61 6c 6c 62 61 63 6b 20 77 69 6c 6c  he callback will
39300 20 62 65 20 69 6e 76 6f 6b 65 64 20 61 70 70 72   be invoked appr
39310 6f 78 69 6d 61 74 65 6c 79 20 6f 6e 63 65 20 61  oximately once a
39320 20 73 65 63 6f 6e 64 0a 09 09 20 2a 20 2f 2f 61   second... * //a
39330 6e 64 20 77 69 6c 6c 20 70 72 69 6e 74 20 74 68  nd will print th
39340 65 20 74 69 6d 65 20 65 78 61 63 74 6c 79 20 6f  e time exactly o
39350 6e 63 65 20 61 20 73 65 63 6f 6e 64 20 61 70 61  nce a second apa
39360 72 74 2e 0a 09 09 20 2a 20 76 61 72 20 63 6c 6f  rt.... * var clo
39370 63 6b 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 43 6c  ck = new Tone.Cl
39380 6f 63 6b 28 66 75 6e 63 74 69 6f 6e 28 74 69 6d  ock(function(tim
39390 65 29 7b 0a 09 09 20 2a 20 09 63 6f 6e 73 6f 6c  e){... * .consol
393a0 65 2e 6c 6f 67 28 74 69 6d 65 29 3b 0a 09 09 20  e.log(time);... 
393b0 2a 20 7d 2c 20 31 29 3b 0a 09 09 20 2a 2f 0a 09  * }, 1);... */..
393c0 20 20 20 20 54 6f 6e 65 2e 43 6c 6f 63 6b 20 3d      Tone.Clock =
393d0 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
393e0 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 45 6d 69          Tone.Emi
393f0 74 74 65 72 2e 63 61 6c 6c 28 74 68 69 73 29 3b  tter.call(this);
39400 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 6f 70  ..        var op
39410 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e 6f 70 74  tions = this.opt
39420 69 6f 6e 73 4f 62 6a 65 63 74 28 61 72 67 75 6d  ionsObject(argum
39430 65 6e 74 73 2c 20 5b 0a 09 20 20 20 20 20 20 20  ents, [..       
39440 20 20 20 20 20 27 63 61 6c 6c 62 61 63 6b 27 2c       'callback',
39450 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 66  ..            'f
39460 72 65 71 75 65 6e 63 79 27 0a 09 20 20 20 20 20  requency'..     
39470 20 20 20 5d 2c 20 54 6f 6e 65 2e 43 6c 6f 63 6b     ], Tone.Clock
39480 2e 64 65 66 61 75 6c 74 73 29 3b 0a 09 20 20 20  .defaults);..   
39490 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
394a0 54 68 65 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  The callback fun
394b0 63 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 20  ction to invoke 
394c0 61 74 20 74 68 65 20 73 63 68 65 64 75 6c 65 64  at the scheduled
394d0 20 74 69 63 6b 2e 0a 09 09 09 20 2a 20 20 40 74   tick..... *  @t
394e0 79 70 65 20 20 7b 46 75 6e 63 74 69 6f 6e 7d 0a  ype  {Function}.
394f0 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
39500 74 68 69 73 2e 63 61 6c 6c 62 61 63 6b 20 3d 20  this.callback = 
39510 6f 70 74 69 6f 6e 73 2e 63 61 6c 6c 62 61 63 6b  options.callback
39520 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
39530 09 09 20 2a 20 20 54 68 65 20 6e 65 78 74 20 74  .. *  The next t
39540 69 6d 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  ime the callback
39550 20 69 73 20 73 63 68 65 64 75 6c 65 64 2e 0a 09   is scheduled...
39560 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4e 75 6d  .. *  @type {Num
39570 62 65 72 7d 0a 09 09 09 20 2a 20 20 40 70 72 69  ber}.... *  @pri
39580 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20  vate.... */..   
39590 20 20 20 20 20 74 68 69 73 2e 5f 6e 65 78 74 54       this._nextT
395a0 69 63 6b 20 3d 20 30 3b 0a 09 20 20 20 20 20 20  ick = 0;..      
395b0 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65    /**.... *  The
395c0 20 6c 61 73 74 20 73 74 61 74 65 20 6f 66 20 74   last state of t
395d0 68 65 20 63 6c 6f 63 6b 2e 0a 09 09 09 20 2a 20  he clock..... * 
395e0 20 40 74 79 70 65 20 20 7b 53 74 61 74 65 7d 0a   @type  {State}.
395f0 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
39600 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
39610 74 68 69 73 2e 5f 6c 61 73 74 53 74 61 74 65 20  this._lastState 
39620 3d 20 54 6f 6e 65 2e 53 74 61 74 65 2e 53 74 6f  = Tone.State.Sto
39630 70 70 65 64 3b 0a 09 20 20 20 20 20 20 20 20 2f  pped;..        /
39640 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 72 61  **.... *  The ra
39650 74 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  te the callback 
39660 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20  function should 
39670 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 09 09 09  be invoked. ....
39680 20 2a 20 20 40 74 79 70 65 20 20 7b 42 50 4d 7d   *  @type  {BPM}
39690 0a 09 09 09 20 2a 20 20 40 73 69 67 6e 61 6c 0a  .... *  @signal.
396a0 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
396b0 74 68 69 73 2e 66 72 65 71 75 65 6e 63 79 20 3d  this.frequency =
396c0 20 6e 65 77 20 54 6f 6e 65 2e 54 69 6d 65 6c 69   new Tone.Timeli
396d0 6e 65 53 69 67 6e 61 6c 28 6f 70 74 69 6f 6e 73  neSignal(options
396e0 2e 66 72 65 71 75 65 6e 63 79 2c 20 54 6f 6e 65  .frequency, Tone
396f0 2e 54 79 70 65 2e 46 72 65 71 75 65 6e 63 79 29  .Type.Frequency)
39700 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
39710 5f 72 65 61 64 4f 6e 6c 79 28 27 66 72 65 71 75  _readOnly('frequ
39720 65 6e 63 79 27 29 3b 0a 09 20 20 20 20 20 20 20  ency');..       
39730 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20   /**.... *  The 
39740 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20  number of times 
39750 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 77 61 73  the callback was
39760 20 69 6e 76 6f 6b 65 64 2e 20 53 74 61 72 74 73   invoked. Starts
39770 20 63 6f 75 6e 74 69 6e 67 20 61 74 20 30 0a 09   counting at 0..
39780 09 09 20 2a 20 20 61 6e 64 20 69 6e 63 72 65 6d  .. *  and increm
39790 65 6e 74 73 20 61 66 74 65 72 20 74 68 65 20 63  ents after the c
397a0 61 6c 6c 62 61 63 6b 20 77 61 73 20 69 6e 76 6f  allback was invo
397b0 6b 65 64 2e 20 0a 09 09 09 20 2a 20 20 40 74 79  ked. .... *  @ty
397c0 70 65 20 7b 54 69 63 6b 73 7d 0a 09 09 09 20 2a  pe {Ticks}.... *
397d0 20 20 40 72 65 61 64 4f 6e 6c 79 0a 09 09 09 20    @readOnly.... 
397e0 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
397f0 2e 74 69 63 6b 73 20 3d 20 30 3b 0a 09 20 20 20  .ticks = 0;..   
39800 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
39810 54 68 65 20 73 74 61 74 65 20 74 69 6d 65 6c 69  The state timeli
39820 6e 65 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  ne.... *  @type 
39830 7b 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 53 74  {Tone.TimelineSt
39840 61 74 65 7d 0a 09 09 09 20 2a 20 20 40 70 72 69  ate}.... *  @pri
39850 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20  vate.... */..   
39860 20 20 20 20 20 74 68 69 73 2e 5f 73 74 61 74 65       this._state
39870 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 54 69 6d 65   = new Tone.Time
39880 6c 69 6e 65 53 74 61 74 65 28 54 6f 6e 65 2e 53  lineState(Tone.S
39890 74 61 74 65 2e 53 74 6f 70 70 65 64 29 3b 0a 09  tate.Stopped);..
398a0 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
398b0 2a 20 20 54 68 65 20 6c 6f 6f 70 20 66 75 6e 63  *  The loop func
398c0 74 69 6f 6e 20 62 6f 75 6e 64 20 74 6f 20 69 74  tion bound to it
398d0 73 20 63 6f 6e 74 65 78 74 2e 20 0a 09 09 09 20  s context. .... 
398e0 2a 20 20 54 68 69 73 20 69 73 20 6e 65 63 65 73  *  This is neces
398f0 73 61 72 79 20 74 6f 20 72 65 6d 6f 76 65 20 74  sary to remove t
39900 68 65 20 65 76 65 6e 74 20 69 6e 20 74 68 65 20  he event in the 
39910 65 6e 64 2e 0a 09 09 09 20 2a 20 20 40 74 79 70  end..... *  @typ
39920 65 20 7b 46 75 6e 63 74 69 6f 6e 7d 0a 09 09 09  e {Function}....
39930 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
39940 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
39950 73 2e 5f 62 6f 75 6e 64 4c 6f 6f 70 20 3d 20 74  s._boundLoop = t
39960 68 69 73 2e 5f 6c 6f 6f 70 2e 62 69 6e 64 28 74  his._loop.bind(t
39970 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  his);..        /
39980 2f 62 69 6e 64 20 61 20 63 61 6c 6c 62 61 63 6b  /bind a callback
39990 20 74 6f 20 74 68 65 20 77 6f 72 6b 65 72 20 74   to the worker t
399a0 68 72 65 61 64 0a 09 20 20 20 20 20 20 20 20 54  hread..        T
399b0 6f 6e 65 2e 43 6c 6f 63 6b 2e 5f 77 6f 72 6b 65  one.Clock._worke
399c0 72 2e 61 64 64 45 76 65 6e 74 4c 69 73 74 65 6e  r.addEventListen
399d0 65 72 28 27 6d 65 73 73 61 67 65 27 2c 20 74 68  er('message', th
399e0 69 73 2e 5f 62 6f 75 6e 64 4c 6f 6f 70 29 3b 0a  is._boundLoop);.
399f0 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e  .    };..    Ton
39a00 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 43 6c  e.extend(Tone.Cl
39a10 6f 63 6b 2c 20 54 6f 6e 65 2e 45 6d 69 74 74 65  ock, Tone.Emitte
39a20 72 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  r);..    /**... 
39a30 2a 20 20 54 68 65 20 64 65 66 61 75 6c 74 73 0a  *  The defaults.
39a40 09 09 20 2a 20 20 40 63 6f 6e 73 74 0a 09 09 20  .. *  @const... 
39a50 2a 20 20 40 74 79 70 65 20 20 7b 4f 62 6a 65 63  *  @type  {Objec
39a60 74 7d 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  t}... */..    To
39a70 6e 65 2e 43 6c 6f 63 6b 2e 64 65 66 61 75 6c 74  ne.Clock.default
39a80 73 20 3d 20 7b 0a 09 20 20 20 20 20 20 20 20 27  s = {..        '
39a90 63 61 6c 6c 62 61 63 6b 27 3a 20 54 6f 6e 65 2e  callback': Tone.
39aa0 6e 6f 4f 70 2c 0a 09 20 20 20 20 20 20 20 20 27  noOp,..        '
39ab0 66 72 65 71 75 65 6e 63 79 27 3a 20 31 2c 0a 09  frequency': 1,..
39ac0 20 20 20 20 20 20 20 20 27 6c 6f 6f 6b 41 68 65          'lookAhe
39ad0 61 64 27 3a 20 27 61 75 74 6f 27 0a 09 20 20 20  ad': 'auto'..   
39ae0 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20   };..    /**... 
39af0 2a 20 20 52 65 74 75 72 6e 73 20 74 68 65 20 70  *  Returns the p
39b00 6c 61 79 62 61 63 6b 20 73 74 61 74 65 20 6f 66  layback state of
39b10 20 74 68 65 20 73 6f 75 72 63 65 2c 20 65 69 74   the source, eit
39b20 68 65 72 20 22 73 74 61 72 74 65 64 22 2c 20 22  her "started", "
39b30 73 74 6f 70 70 65 64 22 20 6f 72 20 22 70 61 75  stopped" or "pau
39b40 73 65 64 22 2e 0a 09 09 20 2a 20 20 40 74 79 70  sed".... *  @typ
39b50 65 20 7b 54 6f 6e 65 2e 53 74 61 74 65 7d 0a 09  e {Tone.State}..
39b60 09 20 2a 20 20 40 72 65 61 64 4f 6e 6c 79 0a 09  . *  @readOnly..
39b70 09 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54  . *  @memberOf T
39b80 6f 6e 65 2e 43 6c 6f 63 6b 23 0a 09 09 20 2a 20  one.Clock#... * 
39b90 20 40 6e 61 6d 65 20 73 74 61 74 65 0a 09 09 20   @name state... 
39ba0 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64  */..    Object.d
39bb0 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f  efineProperty(To
39bc0 6e 65 2e 43 6c 6f 63 6b 2e 70 72 6f 74 6f 74 79  ne.Clock.prototy
39bd0 70 65 2c 20 27 73 74 61 74 65 27 2c 20 7b 0a 09  pe, 'state', {..
39be0 20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e          get: fun
39bf0 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
39c00 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
39c10 68 69 73 2e 5f 73 74 61 74 65 2e 67 65 74 56 61  his._state.getVa
39c20 6c 75 65 41 74 54 69 6d 65 28 74 68 69 73 2e 6e  lueAtTime(this.n
39c30 6f 77 28 29 29 3b 0a 09 20 20 20 20 20 20 20 20  ow());..        
39c40 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20  }..    });..    
39c50 2f 2a 2a 0a 09 09 20 2a 20 20 53 74 61 72 74 20  /**... *  Start 
39c60 74 68 65 20 63 6c 6f 63 6b 20 61 74 20 74 68 65  the clock at the
39c70 20 67 69 76 65 6e 20 74 69 6d 65 2e 20 4f 70 74   given time. Opt
39c80 69 6f 6e 61 6c 6c 79 20 70 61 73 73 20 69 6e 20  ionally pass in 
39c90 61 6e 20 6f 66 66 73 65 74 0a 09 09 20 2a 20 20  an offset... *  
39ca0 6f 66 20 77 68 65 72 65 20 74 6f 20 73 74 61 72  of where to star
39cb0 74 20 74 68 65 20 74 69 63 6b 20 63 6f 75 6e 74  t the tick count
39cc0 65 72 20 66 72 6f 6d 2e 0a 09 09 20 2a 20 20 40  er from.... *  @
39cd0 70 61 72 61 6d 20 20 7b 54 69 6d 65 7d 20 20 74  param  {Time}  t
39ce0 69 6d 65 20 20 20 20 54 68 65 20 74 69 6d 65 20  ime    The time 
39cf0 74 68 65 20 63 6c 6f 63 6b 20 73 68 6f 75 6c 64  the clock should
39d00 20 73 74 61 72 74 0a 09 09 20 2a 20 20 40 70 61   start... *  @pa
39d10 72 61 6d 20 20 7b 54 69 63 6b 73 3d 7d 20 20 6f  ram  {Ticks=}  o
39d20 66 66 73 65 74 20 20 57 68 65 72 65 20 74 68 65  ffset  Where the
39d30 20 74 69 63 6b 20 63 6f 75 6e 74 65 72 20 73 74   tick counter st
39d40 61 72 74 73 20 63 6f 75 6e 74 69 6e 67 20 66 72  arts counting fr
39d50 6f 6d 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72  om.... *  @retur
39d60 6e 20 20 7b 54 6f 6e 65 2e 43 6c 6f 63 6b 7d 20  n  {Tone.Clock} 
39d70 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20   this... */..   
39d80 20 54 6f 6e 65 2e 43 6c 6f 63 6b 2e 70 72 6f 74   Tone.Clock.prot
39d90 6f 74 79 70 65 2e 73 74 61 72 74 20 3d 20 66 75  otype.start = fu
39da0 6e 63 74 69 6f 6e 20 28 74 69 6d 65 2c 20 6f 66  nction (time, of
39db0 66 73 65 74 29 20 7b 0a 09 20 20 20 20 20 20 20  fset) {..       
39dc0 20 74 69 6d 65 20 3d 20 74 68 69 73 2e 74 6f 53   time = this.toS
39dd0 65 63 6f 6e 64 73 28 74 69 6d 65 29 3b 0a 09 20  econds(time);.. 
39de0 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e         if (this.
39df0 5f 73 74 61 74 65 2e 67 65 74 56 61 6c 75 65 41  _state.getValueA
39e00 74 54 69 6d 65 28 74 69 6d 65 29 20 21 3d 3d 20  tTime(time) !== 
39e10 54 6f 6e 65 2e 53 74 61 74 65 2e 53 74 61 72 74  Tone.State.Start
39e20 65 64 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ed) {..         
39e30 20 20 20 74 68 69 73 2e 5f 73 74 61 74 65 2e 61     this._state.a
39e40 64 64 28 7b 0a 09 20 20 20 20 20 20 20 20 20 20  dd({..          
39e50 20 20 20 20 20 20 27 73 74 61 74 65 27 3a 20 54        'state': T
39e60 6f 6e 65 2e 53 74 61 74 65 2e 53 74 61 72 74 65  one.State.Starte
39e70 64 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
39e80 20 20 20 20 27 74 69 6d 65 27 3a 20 74 69 6d 65      'time': time
39e90 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
39ea0 20 20 20 27 6f 66 66 73 65 74 27 3a 20 6f 66 66     'offset': off
39eb0 73 65 74 0a 09 20 20 20 20 20 20 20 20 20 20 20  set..           
39ec0 20 7d 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a   });..        }.
39ed0 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
39ee0 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20  this;..    };.. 
39ef0 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 53 74 6f     /**... *  Sto
39f00 70 20 74 68 65 20 63 6c 6f 63 6b 2e 20 53 74 6f  p the clock. Sto
39f10 70 70 69 6e 67 20 74 68 65 20 63 6c 6f 63 6b 20  pping the clock 
39f20 72 65 73 65 74 73 20 74 68 65 20 74 69 63 6b 20  resets the tick 
39f30 63 6f 75 6e 74 65 72 20 74 6f 20 30 2e 0a 09 09  counter to 0....
39f40 20 2a 20 20 40 70 61 72 61 6d 20 7b 54 69 6d 65   *  @param {Time
39f50 7d 20 5b 74 69 6d 65 3d 6e 6f 77 5d 20 54 68 65  } [time=now] The
39f60 20 74 69 6d 65 20 77 68 65 6e 20 74 68 65 20 63   time when the c
39f70 6c 6f 63 6b 20 73 68 6f 75 6c 64 20 73 74 6f 70  lock should stop
39f80 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73  .... *  @returns
39f90 20 7b 54 6f 6e 65 2e 43 6c 6f 63 6b 7d 20 74 68   {Tone.Clock} th
39fa0 69 73 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c  is... *  @exampl
39fb0 65 0a 09 09 20 2a 20 63 6c 6f 63 6b 2e 73 74 6f  e... * clock.sto
39fc0 70 28 29 3b 0a 09 09 20 2a 2f 0a 09 20 20 20 20  p();... */..    
39fd0 54 6f 6e 65 2e 43 6c 6f 63 6b 2e 70 72 6f 74 6f  Tone.Clock.proto
39fe0 74 79 70 65 2e 73 74 6f 70 20 3d 20 66 75 6e 63  type.stop = func
39ff0 74 69 6f 6e 20 28 74 69 6d 65 29 20 7b 0a 09 20  tion (time) {.. 
3a000 20 20 20 20 20 20 20 74 69 6d 65 20 3d 20 74 68         time = th
3a010 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28 74 69 6d  is.toSeconds(tim
3a020 65 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  e);..        thi
3a030 73 2e 5f 73 74 61 74 65 2e 63 61 6e 63 65 6c 28  s._state.cancel(
3a040 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20  time);..        
3a050 74 68 69 73 2e 5f 73 74 61 74 65 2e 73 65 74 53  this._state.setS
3a060 74 61 74 65 41 74 54 69 6d 65 28 54 6f 6e 65 2e  tateAtTime(Tone.
3a070 53 74 61 74 65 2e 53 74 6f 70 70 65 64 2c 20 74  State.Stopped, t
3a080 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 72  ime);..        r
3a090 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20  eturn this;..   
3a0a0 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20   };..    /**... 
3a0b0 2a 20 20 50 61 75 73 65 20 74 68 65 20 63 6c 6f  *  Pause the clo
3a0c0 63 6b 2e 20 50 61 75 73 69 6e 67 20 64 6f 65 73  ck. Pausing does
3a0d0 20 6e 6f 74 20 72 65 73 65 74 20 74 68 65 20 74   not reset the t
3a0e0 69 63 6b 20 63 6f 75 6e 74 65 72 2e 0a 09 09 20  ick counter.... 
3a0f0 2a 20 20 40 70 61 72 61 6d 20 7b 54 69 6d 65 7d  *  @param {Time}
3a100 20 5b 74 69 6d 65 3d 6e 6f 77 5d 20 54 68 65 20   [time=now] The 
3a110 74 69 6d 65 20 77 68 65 6e 20 74 68 65 20 63 6c  time when the cl
3a120 6f 63 6b 20 73 68 6f 75 6c 64 20 73 74 6f 70 2e  ock should stop.
3a130 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20  ... *  @returns 
3a140 7b 54 6f 6e 65 2e 43 6c 6f 63 6b 7d 20 74 68 69  {Tone.Clock} thi
3a150 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  s... */..    Ton
3a160 65 2e 43 6c 6f 63 6b 2e 70 72 6f 74 6f 74 79 70  e.Clock.prototyp
3a170 65 2e 70 61 75 73 65 20 3d 20 66 75 6e 63 74 69  e.pause = functi
3a180 6f 6e 20 28 74 69 6d 65 29 20 7b 0a 09 20 20 20  on (time) {..   
3a190 20 20 20 20 20 74 69 6d 65 20 3d 20 74 68 69 73       time = this
3a1a0 2e 74 6f 53 65 63 6f 6e 64 73 28 74 69 6d 65 29  .toSeconds(time)
3a1b0 3b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 74  ;..        if (t
3a1c0 68 69 73 2e 5f 73 74 61 74 65 2e 67 65 74 56 61  his._state.getVa
3a1d0 6c 75 65 41 74 54 69 6d 65 28 74 69 6d 65 29 20  lueAtTime(time) 
3a1e0 3d 3d 3d 20 54 6f 6e 65 2e 53 74 61 74 65 2e 53  === Tone.State.S
3a1f0 74 61 72 74 65 64 29 20 7b 0a 09 20 20 20 20 20  tarted) {..     
3a200 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 74 61         this._sta
3a210 74 65 2e 73 65 74 53 74 61 74 65 41 74 54 69 6d  te.setStateAtTim
3a220 65 28 54 6f 6e 65 2e 53 74 61 74 65 2e 50 61 75  e(Tone.State.Pau
3a230 73 65 64 2c 20 74 69 6d 65 29 3b 0a 09 20 20 20  sed, time);..   
3a240 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
3a250 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20  return this;..  
3a260 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    };..    /**...
3a270 20 2a 20 20 54 68 65 20 73 63 68 65 64 75 6c 69   *  The scheduli
3a280 6e 67 20 6c 6f 6f 70 2e 0a 09 09 20 2a 20 20 40  ng loop.... *  @
3a290 70 61 72 61 6d 20 20 7b 4e 75 6d 62 65 72 7d 20  param  {Number} 
3a2a0 20 74 69 6d 65 20 20 54 68 65 20 63 75 72 72 65   time  The curre
3a2b0 6e 74 20 70 61 67 65 20 74 69 6d 65 20 73 74 61  nt page time sta
3a2c0 72 74 69 6e 67 20 66 72 6f 6d 20 30 0a 09 09 20  rting from 0... 
3a2d0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
3a2e0 20 20 20 20 20 20 20 20 20 20 20 77 68 65 6e 20             when 
3a2f0 74 68 65 20 70 61 67 65 20 77 61 73 20 6c 6f 61  the page was loa
3a300 64 65 64 2e 0a 09 09 20 2a 20 20 40 70 72 69 76  ded.... *  @priv
3a310 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  ate... */..    T
3a320 6f 6e 65 2e 43 6c 6f 63 6b 2e 70 72 6f 74 6f 74  one.Clock.protot
3a330 79 70 65 2e 5f 6c 6f 6f 70 20 3d 20 66 75 6e 63  ype._loop = func
3a340 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
3a350 20 20 20 2f 2f 67 65 74 20 74 68 65 20 66 72 65     //get the fre
3a360 71 75 65 6e 63 79 20 76 61 6c 75 65 20 74 6f 20  quency value to 
3a370 63 6f 6d 70 75 74 65 20 74 68 65 20 76 61 6c 75  compute the valu
3a380 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20 6c 6f  e of the next lo
3a390 6f 70 0a 09 20 20 20 20 20 20 20 20 76 61 72 20  op..        var 
3a3a0 6e 6f 77 20 3d 20 74 68 69 73 2e 6e 6f 77 28 29  now = this.now()
3a3b0 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 69 66 20  ;..        //if 
3a3c0 69 74 27 73 20 73 74 61 72 74 65 64 0a 09 20 20  it's started..  
3a3d0 20 20 20 20 20 20 76 61 72 20 6c 6f 6f 6b 41 68        var lookAh
3a3e0 65 61 64 20 3d 20 54 6f 6e 65 2e 43 6c 6f 63 6b  ead = Tone.Clock
3a3f0 2e 6c 6f 6f 6b 41 68 65 61 64 3b 0a 09 20 20 20  .lookAhead;..   
3a400 20 20 20 20 20 76 61 72 20 75 70 64 61 74 65 49       var updateI
3a410 6e 74 65 72 76 61 6c 20 3d 20 54 6f 6e 65 2e 43  nterval = Tone.C
3a420 6c 6f 63 6b 2e 75 70 64 61 74 65 49 6e 74 65 72  lock.updateInter
3a430 76 61 6c 3b 0a 09 20 20 20 20 20 20 20 20 76 61  val;..        va
3a440 72 20 6c 61 67 43 6f 6d 70 65 6e 73 61 74 69 6f  r lagCompensatio
3a450 6e 20 3d 20 54 6f 6e 65 2e 43 6c 6f 63 6b 2e 6c  n = Tone.Clock.l
3a460 61 67 20 2a 20 32 3b 0a 09 20 20 20 20 20 20 20  ag * 2;..       
3a470 20 76 61 72 20 6c 6f 6f 70 49 6e 74 65 72 76 61   var loopInterva
3a480 6c 20 3d 20 6e 6f 77 20 2b 20 6c 6f 6f 6b 41 68  l = now + lookAh
3a490 65 61 64 20 2b 20 75 70 64 61 74 65 49 6e 74 65  ead + updateInte
3a4a0 72 76 61 6c 20 2b 20 6c 61 67 43 6f 6d 70 65 6e  rval + lagCompen
3a4b0 73 61 74 69 6f 6e 3b 0a 09 20 20 20 20 20 20 20  sation;..       
3a4c0 20 77 68 69 6c 65 20 28 6c 6f 6f 70 49 6e 74 65   while (loopInte
3a4d0 72 76 61 6c 20 3e 20 74 68 69 73 2e 5f 6e 65 78  rval > this._nex
3a4e0 74 54 69 63 6b 20 26 26 20 74 68 69 73 2e 5f 73  tTick && this._s
3a4f0 74 61 74 65 29 20 7b 0a 09 20 20 20 20 20 20 20  tate) {..       
3a500 20 20 20 20 20 76 61 72 20 63 75 72 72 65 6e 74       var current
3a510 53 74 61 74 65 20 3d 20 74 68 69 73 2e 5f 73 74  State = this._st
3a520 61 74 65 2e 67 65 74 56 61 6c 75 65 41 74 54 69  ate.getValueAtTi
3a530 6d 65 28 74 68 69 73 2e 5f 6e 65 78 74 54 69 63  me(this._nextTic
3a540 6b 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  k);..           
3a550 20 69 66 20 28 63 75 72 72 65 6e 74 53 74 61 74   if (currentStat
3a560 65 20 21 3d 3d 20 74 68 69 73 2e 5f 6c 61 73 74  e !== this._last
3a570 53 74 61 74 65 29 20 7b 0a 09 20 20 20 20 20 20  State) {..      
3a580 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
3a590 6c 61 73 74 53 74 61 74 65 20 3d 20 63 75 72 72  lastState = curr
3a5a0 65 6e 74 53 74 61 74 65 3b 0a 09 20 20 20 20 20  entState;..     
3a5b0 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 65             var e
3a5c0 76 65 6e 74 20 3d 20 74 68 69 73 2e 5f 73 74 61  vent = this._sta
3a5d0 74 65 2e 67 65 74 28 74 68 69 73 2e 5f 6e 65 78  te.get(this._nex
3a5e0 74 54 69 63 6b 29 3b 0a 09 20 20 20 20 20 20 20  tTick);..       
3a5f0 20 20 20 20 20 20 20 20 20 2f 2f 20 65 6d 69 74           // emit
3a600 20 61 6e 20 65 76 65 6e 74 0a 09 20 20 20 20 20   an event..     
3a610 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
3a620 75 72 72 65 6e 74 53 74 61 74 65 20 3d 3d 3d 20  urrentState === 
3a630 54 6f 6e 65 2e 53 74 61 74 65 2e 53 74 61 72 74  Tone.State.Start
3a640 65 64 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ed) {..         
3a650 20 20 20 20 20 20 20 20 20 20 20 2f 2f 63 6f 72             //cor
3a660 72 65 63 74 20 74 68 65 20 74 69 6d 65 0a 09 20  rect the time.. 
3a670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a680 20 20 20 74 68 69 73 2e 5f 6e 65 78 74 54 69 63     this._nextTic
3a690 6b 20 3d 20 65 76 65 6e 74 2e 74 69 6d 65 3b 0a  k = event.time;.
3a6a0 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3a6b0 20 20 20 20 20 69 66 20 28 21 74 68 69 73 2e 69       if (!this.i
3a6c0 73 55 6e 64 65 66 28 65 76 65 6e 74 2e 6f 66 66  sUndef(event.off
3a6d0 73 65 74 29 29 20 7b 0a 09 20 20 20 20 20 20 20  set)) {..       
3a6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a6f0 20 74 68 69 73 2e 74 69 63 6b 73 20 3d 20 65 76   this.ticks = ev
3a700 65 6e 74 2e 6f 66 66 73 65 74 3b 0a 09 20 20 20  ent.offset;..   
3a710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a720 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   }..            
3a730 20 20 20 20 20 20 20 20 74 68 69 73 2e 65 6d 69          this.emi
3a740 74 28 27 73 74 61 72 74 27 2c 20 65 76 65 6e 74  t('start', event
3a750 2e 74 69 6d 65 2c 20 74 68 69 73 2e 74 69 63 6b  .time, this.tick
3a760 73 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  s);..           
3a770 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28       } else if (
3a780 63 75 72 72 65 6e 74 53 74 61 74 65 20 3d 3d 3d  currentState ===
3a790 20 54 6f 6e 65 2e 53 74 61 74 65 2e 53 74 6f 70   Tone.State.Stop
3a7a0 70 65 64 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ped) {..        
3a7b0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
3a7c0 2e 74 69 63 6b 73 20 3d 20 30 3b 0a 09 20 20 20  .ticks = 0;..   
3a7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a7e0 20 74 68 69 73 2e 65 6d 69 74 28 27 73 74 6f 70   this.emit('stop
3a7f0 27 2c 20 65 76 65 6e 74 2e 74 69 6d 65 29 3b 0a  ', event.time);.
3a800 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3a810 20 7d 20 65 6c 73 65 20 69 66 20 28 63 75 72 72   } else if (curr
3a820 65 6e 74 53 74 61 74 65 20 3d 3d 3d 20 54 6f 6e  entState === Ton
3a830 65 2e 53 74 61 74 65 2e 50 61 75 73 65 64 29 20  e.State.Paused) 
3a840 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3a850 20 20 20 20 20 20 20 74 68 69 73 2e 65 6d 69 74         this.emit
3a860 28 27 70 61 75 73 65 27 2c 20 65 76 65 6e 74 2e  ('pause', event.
3a870 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20  time);..        
3a880 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
3a890 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
3a8a0 20 20 20 20 20 20 76 61 72 20 74 69 63 6b 54 69        var tickTi
3a8b0 6d 65 20 3d 20 74 68 69 73 2e 5f 6e 65 78 74 54  me = this._nextT
3a8c0 69 63 6b 3b 0a 09 20 20 20 20 20 20 20 20 20 20  ick;..          
3a8d0 20 20 69 66 20 28 74 68 69 73 2e 66 72 65 71 75    if (this.frequ
3a8e0 65 6e 63 79 29 20 7b 0a 09 20 20 20 20 20 20 20  ency) {..       
3a8f0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6e           this._n
3a900 65 78 74 54 69 63 6b 20 2b 3d 20 31 20 2f 20 74  extTick += 1 / t
3a910 68 69 73 2e 66 72 65 71 75 65 6e 63 79 2e 67 65  his.frequency.ge
3a920 74 56 61 6c 75 65 41 74 54 69 6d 65 28 74 68 69  tValueAtTime(thi
3a930 73 2e 5f 6e 65 78 74 54 69 63 6b 29 3b 0a 09 20  s._nextTick);.. 
3a940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3a950 66 20 28 63 75 72 72 65 6e 74 53 74 61 74 65 20  f (currentState 
3a960 3d 3d 3d 20 54 6f 6e 65 2e 53 74 61 74 65 2e 53  === Tone.State.S
3a970 74 61 72 74 65 64 29 20 7b 0a 09 20 20 20 20 20  tarted) {..     
3a980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
3a990 68 69 73 2e 63 61 6c 6c 62 61 63 6b 28 74 69 63  his.callback(tic
3a9a0 6b 54 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20  kTime);..       
3a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
3a9c0 73 2e 74 69 63 6b 73 2b 2b 3b 0a 09 20 20 20 20  s.ticks++;..    
3a9d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20              }.. 
3a9e0 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20             }..  
3a9f0 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a        }..    };.
3aa00 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 52  .    /**... *  R
3aa10 65 74 75 72 6e 73 20 74 68 65 20 73 63 68 65 64  eturns the sched
3aa20 75 6c 65 64 20 73 74 61 74 65 20 61 74 20 74 68  uled state at th
3aa30 65 20 67 69 76 65 6e 20 74 69 6d 65 2e 0a 09 09  e given time....
3aa40 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 54 69 6d   *  @param  {Tim
3aa50 65 7d 20 20 74 69 6d 65 20 20 54 68 65 20 74 69  e}  time  The ti
3aa60 6d 65 20 74 6f 20 71 75 65 72 79 2e 0a 09 09 20  me to query.... 
3aa70 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 53 74 72  *  @return  {Str
3aa80 69 6e 67 7d 20 20 54 68 65 20 6e 61 6d 65 20 6f  ing}  The name o
3aa90 66 20 74 68 65 20 73 74 61 74 65 20 69 6e 70 75  f the state inpu
3aaa0 74 20 69 6e 20 73 65 74 53 74 61 74 65 41 74 54  t in setStateAtT
3aab0 69 6d 65 2e 0a 09 09 20 2a 20 20 40 65 78 61 6d  ime.... *  @exam
3aac0 70 6c 65 0a 09 09 20 2a 20 63 6c 6f 63 6b 2e 73  ple... * clock.s
3aad0 74 61 72 74 28 22 2b 30 2e 31 22 29 3b 0a 09 09  tart("+0.1");...
3aae0 20 2a 20 63 6c 6f 63 6b 2e 67 65 74 53 74 61 74   * clock.getStat
3aaf0 65 41 74 54 69 6d 65 28 22 2b 30 2e 31 22 29 3b  eAtTime("+0.1");
3ab00 20 2f 2f 72 65 74 75 72 6e 73 20 22 73 74 61 72   //returns "star
3ab10 74 65 64 22 0a 09 09 20 2a 2f 0a 09 20 20 20 20  ted"... */..    
3ab20 54 6f 6e 65 2e 43 6c 6f 63 6b 2e 70 72 6f 74 6f  Tone.Clock.proto
3ab30 74 79 70 65 2e 67 65 74 53 74 61 74 65 41 74 54  type.getStateAtT
3ab40 69 6d 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  ime = function (
3ab50 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20 20  time) {..       
3ab60 20 74 69 6d 65 20 3d 20 74 68 69 73 2e 74 6f 53   time = this.toS
3ab70 65 63 6f 6e 64 73 28 74 69 6d 65 29 3b 0a 09 20  econds(time);.. 
3ab80 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
3ab90 69 73 2e 5f 73 74 61 74 65 2e 67 65 74 56 61 6c  is._state.getVal
3aba0 75 65 41 74 54 69 6d 65 28 74 69 6d 65 29 3b 0a  ueAtTime(time);.
3abb0 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
3abc0 0a 09 09 20 2a 20 20 43 6c 65 61 6e 20 75 70 0a  ... *  Clean up.
3abd0 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b  .. *  @returns {
3abe0 54 6f 6e 65 2e 43 6c 6f 63 6b 7d 20 74 68 69 73  Tone.Clock} this
3abf0 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
3ac00 2e 43 6c 6f 63 6b 2e 70 72 6f 74 6f 74 79 70 65  .Clock.prototype
3ac10 2e 64 69 73 70 6f 73 65 20 3d 20 66 75 6e 63 74  .dispose = funct
3ac20 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
3ac30 20 20 54 6f 6e 65 2e 45 6d 69 74 74 65 72 2e 70    Tone.Emitter.p
3ac40 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65  rototype.dispose
3ac50 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20  .call(this);..  
3ac60 20 20 20 20 20 20 54 6f 6e 65 2e 43 6c 6f 63 6b        Tone.Clock
3ac70 2e 5f 77 6f 72 6b 65 72 2e 72 65 6d 6f 76 65 45  ._worker.removeE
3ac80 76 65 6e 74 4c 69 73 74 65 6e 65 72 28 27 6d 65  ventListener('me
3ac90 73 73 61 67 65 27 2c 20 74 68 69 73 2e 5f 62 6f  ssage', this._bo
3aca0 75 6e 64 4c 6f 6f 70 29 3b 0a 09 20 20 20 20 20  undLoop);..     
3acb0 20 20 20 74 68 69 73 2e 5f 77 72 69 74 61 62 6c     this._writabl
3acc0 65 28 27 66 72 65 71 75 65 6e 63 79 27 29 3b 0a  e('frequency');.
3acd0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 66 72  .        this.fr
3ace0 65 71 75 65 6e 63 79 2e 64 69 73 70 6f 73 65 28  equency.dispose(
3acf0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
3ad00 2e 66 72 65 71 75 65 6e 63 79 20 3d 20 6e 75 6c  .frequency = nul
3ad10 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  l;..        this
3ad20 2e 5f 62 6f 75 6e 64 4c 6f 6f 70 20 3d 20 6e 75  ._boundLoop = nu
3ad30 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ll;..        thi
3ad40 73 2e 5f 6e 65 78 74 54 69 63 6b 20 3d 20 49 6e  s._nextTick = In
3ad50 66 69 6e 69 74 79 3b 0a 09 20 20 20 20 20 20 20  finity;..       
3ad60 20 74 68 69 73 2e 63 61 6c 6c 62 61 63 6b 20 3d   this.callback =
3ad70 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
3ad80 74 68 69 73 2e 5f 73 74 61 74 65 2e 64 69 73 70  this._state.disp
3ad90 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ose();..        
3ada0 74 68 69 73 2e 5f 73 74 61 74 65 20 3d 20 6e 75  this._state = nu
3adb0 6c 6c 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  ll;..    };..   
3adc0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3add0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ade0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3adf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ae00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20  ////////////..  
3ae10 20 20 2f 2f 20 57 4f 52 4b 45 52 0a 09 20 20 20    // WORKER..   
3ae20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3ae30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ae40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ae50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ae60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20  ////////////..  
3ae70 20 20 2f 2f 55 52 4c 20 53 68 69 6d 0a 09 20 20    //URL Shim..  
3ae80 20 20 77 69 6e 64 6f 77 2e 55 52 4c 20 3d 20 77    window.URL = w
3ae90 69 6e 64 6f 77 2e 55 52 4c 20 7c 7c 20 77 69 6e  indow.URL || win
3aea0 64 6f 77 2e 77 65 62 6b 69 74 55 52 4c 3b 0a 09  dow.webkitURL;..
3aeb0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 68      /**... *  Th
3aec0 65 20 6d 69 6e 69 6d 75 6d 20 61 6d 6f 75 6e 74  e minimum amount
3aed0 20 6f 66 20 74 69 6d 65 20 65 76 65 6e 74 73 20   of time events 
3aee0 61 72 65 20 0a 09 09 20 2a 20 20 73 63 68 65 64  are ... *  sched
3aef0 75 6c 65 64 20 69 6e 20 61 64 76 61 6e 63 65 2e  uled in advance.
3af00 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
3af10 09 09 20 2a 20 20 40 74 79 70 65 20 20 7b 4e 75  .. *  @type  {Nu
3af20 6d 62 65 72 7d 0a 09 09 20 2a 2f 0a 09 20 20 20  mber}... */..   
3af30 20 54 6f 6e 65 2e 43 6c 6f 63 6b 2e 5f 6c 6f 6f   Tone.Clock._loo
3af40 6b 41 68 65 61 64 20 3d 20 30 2e 31 3b 0a 09 20  kAhead = 0.1;.. 
3af50 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 48 6f 77     /**... *  How
3af60 20 6f 66 74 65 6e 20 74 68 65 20 77 6f 72 6b 65   often the worke
3af70 72 20 74 69 63 6b 73 0a 09 09 20 2a 20 20 40 74  r ticks... *  @t
3af80 79 70 65 20 20 7b 53 65 63 6f 6e 64 73 7d 0a 09  ype  {Seconds}..
3af90 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
3afa0 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 43 6c   */..    Tone.Cl
3afb0 6f 63 6b 2e 5f 75 70 64 61 74 65 49 6e 74 65 72  ock._updateInter
3afc0 76 61 6c 20 3d 20 54 6f 6e 65 2e 43 6c 6f 63 6b  val = Tone.Clock
3afd0 2e 5f 6c 6f 6f 6b 41 68 65 61 64 20 2f 20 33 3b  ._lookAhead / 3;
3afe0 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
3aff0 54 68 65 20 73 63 72 69 70 74 20 77 68 69 63 68  The script which
3b000 20 72 75 6e 73 20 69 6e 20 61 20 77 65 62 20 77   runs in a web w
3b010 6f 72 6b 65 72 0a 09 09 20 2a 20 20 40 74 79 70  orker... *  @typ
3b020 65 20 7b 42 6c 6f 62 7d 0a 09 09 20 2a 20 20 40  e {Blob}... *  @
3b030 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20  private... */.. 
3b040 20 20 20 76 61 72 20 62 6c 6f 62 20 3d 20 6e 65     var blob = ne
3b050 77 20 42 6c 6f 62 28 5b 2f 2f 74 68 65 20 69 6e  w Blob([//the in
3b060 69 74 69 61 6c 20 74 69 6d 65 6f 75 74 20 74 69  itial timeout ti
3b070 6d 65 0a 09 20 20 20 20 20 20 20 20 27 76 61 72  me..        'var
3b080 20 74 69 6d 65 6f 75 74 54 69 6d 65 20 3d 20 27   timeoutTime = '
3b090 20 2b 20 54 6f 6e 65 2e 43 6c 6f 63 6b 2e 5f 75   + Tone.Clock._u
3b0a0 70 64 61 74 65 49 6e 74 65 72 76 61 6c 20 2a 20  pdateInterval * 
3b0b0 31 30 30 30 20 2b 20 27 3b 27 20 2b 20 2f 2f 6f  1000 + ';' + //o
3b0c0 6e 6d 65 73 73 61 67 65 20 63 61 6c 6c 62 61 63  nmessage callbac
3b0d0 6b 0a 09 20 20 20 20 20 20 20 20 27 73 65 6c 66  k..        'self
3b0e0 2e 6f 6e 6d 65 73 73 61 67 65 20 3d 20 66 75 6e  .onmessage = fun
3b0f0 63 74 69 6f 6e 28 6d 73 67 29 7b 27 20 2b 20 27  ction(msg){' + '
3b100 5c 74 74 69 6d 65 6f 75 74 54 69 6d 65 20 3d 20  \ttimeoutTime = 
3b110 70 61 72 73 65 49 6e 74 28 6d 73 67 2e 64 61 74  parseInt(msg.dat
3b120 61 29 3b 27 20 2b 20 27 7d 3b 27 20 2b 20 2f 2f  a);' + '};' + //
3b130 74 68 65 20 74 69 63 6b 20 66 75 6e 63 74 69 6f  the tick functio
3b140 6e 20 77 68 69 63 68 20 70 6f 73 74 73 20 61 20  n which posts a 
3b150 6d 65 73 73 61 67 65 0a 09 20 20 20 20 20 20 20  message..       
3b160 20 2f 2f 61 6e 64 20 73 63 68 65 64 75 6c 65 73   //and schedules
3b170 20 61 20 6e 65 77 20 74 69 63 6b 0a 09 20 20 20   a new tick..   
3b180 20 20 20 20 20 27 66 75 6e 63 74 69 6f 6e 20 74       'function t
3b190 69 63 6b 28 29 7b 27 20 2b 20 27 5c 74 73 65 74  ick(){' + '\tset
3b1a0 54 69 6d 65 6f 75 74 28 74 69 63 6b 2c 20 74 69  Timeout(tick, ti
3b1b0 6d 65 6f 75 74 54 69 6d 65 29 3b 27 20 2b 20 27  meoutTime);' + '
3b1c0 5c 74 73 65 6c 66 2e 70 6f 73 74 4d 65 73 73 61  \tself.postMessa
3b1d0 67 65 28 5c 27 74 69 63 6b 5c 27 29 3b 27 20 2b  ge(\'tick\');' +
3b1e0 20 27 7d 27 20 2b 20 2f 2f 63 61 6c 6c 20 74 69   '}' + //call ti
3b1f0 63 6b 20 69 6e 69 74 69 61 6c 6c 79 0a 09 20 20  ck initially..  
3b200 20 20 20 20 20 20 27 74 69 63 6b 28 29 3b 27 5d        'tick();']
3b210 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  );..    /**... *
3b220 20 20 43 72 65 61 74 65 20 61 20 62 6c 6f 62 20    Create a blob 
3b230 75 72 6c 20 66 72 6f 6d 20 74 68 65 20 42 6c 6f  url from the Blo
3b240 62 0a 09 09 20 2a 20 20 40 74 79 70 65 20 20 7b  b... *  @type  {
3b250 55 52 4c 7d 0a 09 09 20 2a 20 20 40 70 72 69 76  URL}... *  @priv
3b260 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 76  ate... */..    v
3b270 61 72 20 62 6c 6f 62 55 72 6c 20 3d 20 55 52 4c  ar blobUrl = URL
3b280 2e 63 72 65 61 74 65 4f 62 6a 65 63 74 55 52 4c  .createObjectURL
3b290 28 62 6c 6f 62 29 3b 0a 09 20 20 20 20 2f 2a 2a  (blob);..    /**
3b2a0 0a 09 09 20 2a 20 20 54 68 65 20 57 6f 72 6b 65  ... *  The Worke
3b2b0 72 20 77 68 69 63 68 20 67 65 6e 65 72 61 74 65  r which generate
3b2c0 73 20 61 20 72 65 67 75 6c 61 72 20 63 61 6c 6c  s a regular call
3b2d0 62 61 63 6b 0a 09 09 20 2a 20 20 40 74 79 70 65  back... *  @type
3b2e0 20 7b 57 6f 72 6b 65 72 7d 0a 09 09 20 2a 20 20   {Worker}... *  
3b2f0 40 70 72 69 76 61 74 65 0a 09 09 20 2a 20 20 40  @private... *  @
3b300 73 74 61 74 69 63 0a 09 09 20 2a 2f 0a 09 20 20  static... */..  
3b310 20 20 54 6f 6e 65 2e 43 6c 6f 63 6b 2e 5f 77 6f    Tone.Clock._wo
3b320 72 6b 65 72 20 3d 20 6e 65 77 20 57 6f 72 6b 65  rker = new Worke
3b330 72 28 62 6c 6f 62 55 72 6c 29 3b 0a 09 20 20 20  r(blobUrl);..   
3b340 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 70 72 69 76   /**... *  @priv
3b350 61 74 65 0a 09 09 20 2a 20 20 40 74 79 70 65 20  ate... *  @type 
3b360 20 7b 4e 75 6d 62 65 72 7d 0a 09 09 20 2a 20 20   {Number}... *  
3b370 54 68 65 20 74 69 6d 65 20 6f 66 20 74 68 65 20  The time of the 
3b380 6c 61 73 74 20 75 70 64 61 74 65 0a 09 09 20 2a  last update... *
3b390 2f 0a 09 20 20 20 20 76 61 72 20 6c 61 73 74 55  /..    var lastU
3b3a0 70 64 61 74 65 20 3d 20 2d 31 3b 0a 09 20 20 20  pdate = -1;..   
3b3b0 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20 63   /**... *  The c
3b3c0 75 72 72 65 6e 74 20 63 6f 6d 70 75 74 65 64 20  urrent computed 
3b3d0 75 70 64 61 74 65 20 72 61 74 65 20 6f 66 20 74  update rate of t
3b3e0 68 65 20 63 6c 6f 63 6b 2e 0a 09 09 20 2a 20 20  he clock.... *  
3b3f0 40 74 79 70 65 20 20 7b 4e 75 6d 62 65 72 7d 0a  @type  {Number}.
3b400 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
3b410 09 20 2a 2f 0a 09 20 20 20 20 76 61 72 20 63 6f  . */..    var co
3b420 6d 70 75 74 65 64 55 70 64 61 74 65 49 6e 74 65  mputedUpdateInte
3b430 72 76 61 6c 20 3d 20 30 3b 0a 09 20 20 20 20 2f  rval = 0;..    /
3b440 2f 6c 69 73 74 65 6e 20 66 6f 72 20 6d 65 73 73  /listen for mess
3b450 61 67 65 20 65 76 65 6e 74 73 20 61 6e 64 20 75  age events and u
3b460 70 64 61 74 65 20 74 68 65 20 67 6c 6f 62 61 6c  pdate the global
3b470 20 63 6c 6f 63 6b 20 6c 6f 6f 6b 61 68 65 61 64   clock lookahead
3b480 0a 09 20 20 20 20 54 6f 6e 65 2e 43 6c 6f 63 6b  ..    Tone.Clock
3b490 2e 5f 77 6f 72 6b 65 72 2e 61 64 64 45 76 65 6e  ._worker.addEven
3b4a0 74 4c 69 73 74 65 6e 65 72 28 27 6d 65 73 73 61  tListener('messa
3b4b0 67 65 27 2c 20 66 75 6e 63 74 69 6f 6e 20 28 29  ge', function ()
3b4c0 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20   {..        var 
3b4d0 6e 6f 77 20 3d 20 54 6f 6e 65 2e 6e 6f 77 28 29  now = Tone.now()
3b4e0 3b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 6c  ;..        if (l
3b4f0 61 73 74 55 70 64 61 74 65 20 21 3d 3d 20 2d 31  astUpdate !== -1
3b500 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
3b510 20 76 61 72 20 64 69 66 66 20 3d 20 6e 6f 77 20   var diff = now 
3b520 2d 20 6c 61 73 74 55 70 64 61 74 65 3b 0a 09 20  - lastUpdate;.. 
3b530 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 70 75             compu
3b540 74 65 64 55 70 64 61 74 65 49 6e 74 65 72 76 61  tedUpdateInterva
3b550 6c 20 3d 20 4d 61 74 68 2e 6d 61 78 28 64 69 66  l = Math.max(dif
3b560 66 2c 20 63 6f 6d 70 75 74 65 64 55 70 64 61 74  f, computedUpdat
3b570 65 49 6e 74 65 72 76 61 6c 20 2a 20 30 2e 39 37  eInterval * 0.97
3b580 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  );..        }.. 
3b590 20 20 20 20 20 20 20 6c 61 73 74 55 70 64 61 74         lastUpdat
3b5a0 65 20 3d 20 6e 6f 77 3b 0a 09 20 20 20 20 7d 29  e = now;..    })
3b5b0 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
3b5c0 20 54 68 69 73 20 69 73 20 74 68 65 20 74 69 6d   This is the tim
3b5d0 65 20 74 68 61 74 20 74 68 65 20 63 6c 6f 63 6b  e that the clock
3b5e0 20 69 73 20 66 61 6c 6c 69 6e 67 20 62 65 68 69   is falling behi
3b5f0 6e 64 0a 09 09 20 2a 20 20 74 68 65 20 73 63 68  nd... *  the sch
3b600 65 64 75 6c 65 64 20 75 70 64 61 74 65 20 69 6e  eduled update in
3b610 74 65 72 76 61 6c 2e 20 54 68 65 20 43 6c 6f 63  terval. The Cloc
3b620 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a  k automatically.
3b630 09 09 20 2a 20 20 61 64 6a 75 73 74 73 20 66 6f  .. *  adjusts fo
3b640 72 20 74 68 65 20 6c 61 67 20 61 6e 64 20 73 63  r the lag and sc
3b650 68 65 64 75 6c 65 73 20 66 75 72 74 68 65 72 20  hedules further 
3b660 69 6e 20 61 64 76 61 6e 63 65 2e 0a 09 09 20 2a  in advance.... *
3b670 20 20 40 74 79 70 65 20 7b 4e 75 6d 62 65 72 7d    @type {Number}
3b680 0a 09 09 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66  ... *  @memberOf
3b690 20 54 6f 6e 65 2e 43 6c 6f 63 6b 0a 09 09 20 2a   Tone.Clock... *
3b6a0 20 20 40 6e 61 6d 65 20 6c 61 67 0a 09 09 20 2a    @name lag... *
3b6b0 20 20 40 73 74 61 74 69 63 0a 09 09 20 2a 20 20    @static... *  
3b6c0 40 72 65 61 64 4f 6e 6c 79 0a 09 09 20 2a 2f 0a  @readOnly... */.
3b6d0 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69  .    Object.defi
3b6e0 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e  neProperty(Tone.
3b6f0 43 6c 6f 63 6b 2c 20 27 6c 61 67 27 2c 20 7b 0a  Clock, 'lag', {.
3b700 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75  .        get: fu
3b710 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
3b720 20 20 20 20 20 20 20 20 20 76 61 72 20 64 69 66           var dif
3b730 66 20 3d 20 63 6f 6d 70 75 74 65 64 55 70 64 61  f = computedUpda
3b740 74 65 49 6e 74 65 72 76 61 6c 20 2d 20 54 6f 6e  teInterval - Ton
3b750 65 2e 43 6c 6f 63 6b 2e 5f 75 70 64 61 74 65 49  e.Clock._updateI
3b760 6e 74 65 72 76 61 6c 3b 0a 09 20 20 20 20 20 20  nterval;..      
3b770 20 20 20 20 20 20 64 69 66 66 20 3d 20 4d 61 74        diff = Mat
3b780 68 2e 6d 61 78 28 64 69 66 66 2c 20 30 29 3b 0a  h.max(diff, 0);.
3b790 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
3b7a0 75 72 6e 20 64 69 66 66 3b 0a 09 20 20 20 20 20  urn diff;..     
3b7b0 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20     }..    });.. 
3b7c0 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 68 65     /**... *  The
3b7d0 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20   amount of time 
3b7e0 69 6e 20 61 64 76 61 6e 63 65 20 74 68 61 74 20  in advance that 
3b7f0 65 76 65 6e 74 73 20 61 72 65 20 73 63 68 65 64  events are sched
3b800 75 6c 65 64 2e 0a 09 09 20 2a 20 20 54 68 65 20  uled.... *  The 
3b810 6c 6f 6f 6b 41 68 65 61 64 20 77 69 6c 6c 20 61  lookAhead will a
3b820 64 6a 75 73 74 20 73 6c 69 67 68 74 6c 79 20 69  djust slightly i
3b830 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68  n response to th
3b840 65 20 0a 09 09 20 2a 20 20 6d 65 61 73 75 72 65  e ... *  measure
3b850 64 20 75 70 64 61 74 65 20 74 69 6d 65 20 74 6f  d update time to
3b860 20 74 72 79 20 74 6f 20 61 76 6f 69 64 20 63 6c   try to avoid cl
3b870 69 63 6b 73 2e 0a 09 09 20 2a 20 20 40 74 79 70  icks.... *  @typ
3b880 65 20 7b 4e 75 6d 62 65 72 7d 0a 09 09 20 2a 20  e {Number}... * 
3b890 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e   @memberOf Tone.
3b8a0 43 6c 6f 63 6b 0a 09 09 20 2a 20 20 40 6e 61 6d  Clock... *  @nam
3b8b0 65 20 6c 6f 6f 6b 41 68 65 61 64 0a 09 09 20 2a  e lookAhead... *
3b8c0 20 20 40 73 74 61 74 69 63 0a 09 09 20 2a 2f 0a    @static... */.
3b8d0 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69  .    Object.defi
3b8e0 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e  neProperty(Tone.
3b8f0 43 6c 6f 63 6b 2c 20 27 6c 6f 6f 6b 41 68 65 61  Clock, 'lookAhea
3b900 64 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67  d', {..        g
3b910 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  et: function () 
3b920 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
3b930 65 74 75 72 6e 20 54 6f 6e 65 2e 43 6c 6f 63 6b  eturn Tone.Clock
3b940 2e 5f 6c 6f 6f 6b 41 68 65 61 64 3b 0a 09 20 20  ._lookAhead;..  
3b950 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20        },..      
3b960 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    set: function 
3b970 28 6c 41 29 20 7b 0a 09 20 20 20 20 20 20 20 20  (lA) {..        
3b980 20 20 20 20 54 6f 6e 65 2e 43 6c 6f 63 6b 2e 5f      Tone.Clock._
3b990 6c 6f 6f 6b 41 68 65 61 64 20 3d 20 6c 41 3b 0a  lookAhead = lA;.
3b9a0 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
3b9b0 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  });..    /**... 
3b9c0 2a 20 20 48 6f 77 20 6f 66 74 65 6e 20 74 68 65  *  How often the
3b9d0 20 57 65 62 20 57 6f 72 6b 65 72 20 63 61 6c 6c   Web Worker call
3b9e0 62 61 63 6b 20 69 73 20 69 6e 76 6f 6b 65 64 2e  back is invoked.
3b9f0 0a 09 09 20 2a 20 20 54 68 69 73 20 6e 75 6d 62  ... *  This numb
3ba00 65 72 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  er corresponds t
3ba10 6f 20 68 6f 77 20 72 65 73 70 6f 6e 73 69 76 65  o how responsive
3ba20 20 74 68 65 20 73 63 68 65 64 75 6c 69 6e 67 0a   the scheduling.
3ba30 09 09 20 2a 20 20 63 61 6e 20 62 65 2e 20 43 6c  .. *  can be. Cl
3ba40 6f 63 6b 2e 75 70 64 61 74 65 49 6e 74 65 72 76  ock.updateInterv
3ba50 61 6c 20 2b 20 43 6c 6f 63 6b 2e 6c 6f 6f 6b 41  al + Clock.lookA
3ba60 68 65 61 64 20 67 69 76 65 73 20 79 6f 75 20 74  head gives you t
3ba70 68 65 0a 09 09 20 2a 20 20 74 6f 74 61 6c 20 6c  he... *  total l
3ba80 61 74 65 6e 63 79 20 62 65 74 77 65 65 6e 20 73  atency between s
3ba90 63 68 65 64 75 6c 69 6e 67 20 61 6e 20 65 76 65  cheduling an eve
3baa0 6e 74 20 61 6e 64 20 68 65 61 72 69 6e 67 20 69  nt and hearing i
3bab0 74 2e 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b  t.... *  @type {
3bac0 4e 75 6d 62 65 72 7d 0a 09 09 20 2a 20 20 40 6d  Number}... *  @m
3bad0 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 43 6c 6f  emberOf Tone.Clo
3bae0 63 6b 0a 09 09 20 2a 20 20 40 6e 61 6d 65 20 75  ck... *  @name u
3baf0 70 64 61 74 65 49 6e 74 65 72 76 61 6c 0a 09 09  pdateInterval...
3bb00 20 2a 20 20 40 73 74 61 74 69 63 0a 09 09 20 2a   *  @static... *
3bb10 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65  /..    Object.de
3bb20 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e  fineProperty(Ton
3bb30 65 2e 43 6c 6f 63 6b 2c 20 27 75 70 64 61 74 65  e.Clock, 'update
3bb40 49 6e 74 65 72 76 61 6c 27 2c 20 7b 0a 09 20 20  Interval', {..  
3bb50 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74        get: funct
3bb60 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
3bb70 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e        return Ton
3bb80 65 2e 43 6c 6f 63 6b 2e 5f 75 70 64 61 74 65 49  e.Clock._updateI
3bb90 6e 74 65 72 76 61 6c 3b 0a 09 20 20 20 20 20 20  nterval;..      
3bba0 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65    },..        se
3bbb0 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 69 6e 74  t: function (int
3bbc0 65 72 76 61 6c 29 20 7b 0a 09 20 20 20 20 20 20  erval) {..      
3bbd0 20 20 20 20 20 20 54 6f 6e 65 2e 43 6c 6f 63 6b        Tone.Clock
3bbe0 2e 5f 75 70 64 61 74 65 49 6e 74 65 72 76 61 6c  ._updateInterval
3bbf0 20 3d 20 4d 61 74 68 2e 6d 61 78 28 69 6e 74 65   = Math.max(inte
3bc00 72 76 61 6c 2c 20 30 2e 30 31 29 3b 0a 09 20 20  rval, 0.01);..  
3bc10 20 20 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 43            Tone.C
3bc20 6c 6f 63 6b 2e 5f 77 6f 72 6b 65 72 2e 70 6f 73  lock._worker.pos
3bc30 74 4d 65 73 73 61 67 65 28 69 6e 74 65 72 76 61  tMessage(interva
3bc40 6c 20 2a 20 31 30 30 30 29 3b 0a 09 20 20 20 20  l * 1000);..    
3bc50 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09      }..    });..
3bc60 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 68      /**... *  Th
3bc70 65 20 6c 61 74 65 6e 63 79 20 68 69 6e 74 0a 09  e latency hint..
3bc80 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
3bc90 20 2a 20 20 40 74 79 70 65 20 7b 53 74 72 69 6e   *  @type {Strin
3bca0 67 7c 4e 75 6d 62 65 72 7d 0a 09 09 20 2a 2f 0a  g|Number}... */.
3bcb0 09 20 20 20 20 76 61 72 20 6c 61 74 65 6e 63 79  .    var latency
3bcc0 48 69 6e 74 20 3d 20 27 69 6e 74 65 72 61 63 74  Hint = 'interact
3bcd0 69 76 65 27 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09  ive';..    /**..
3bce0 09 20 2a 20 20 54 68 65 20 74 79 70 65 20 6f 66  . *  The type of
3bcf0 20 70 6c 61 79 62 61 63 6b 2c 20 77 68 69 63 68   playback, which
3bd00 20 61 66 66 65 63 74 73 20 74 72 61 64 65 6f 66   affects tradeof
3bd10 66 73 20 62 65 74 77 65 65 6e 20 61 75 64 69 6f  fs between audio
3bd20 20 0a 09 09 20 2a 20 20 6f 75 74 70 75 74 20 6c   ... *  output l
3bd30 61 74 65 6e 63 79 20 61 6e 64 20 72 65 73 70 6f  atency and respo
3bd40 6e 73 69 76 65 6e 65 73 73 2e 20 0a 09 09 20 2a  nsiveness. ... *
3bd50 20 20 0a 09 09 20 2a 20 20 49 6e 20 61 64 64 69    ... *  In addi
3bd60 74 69 6f 6e 20 74 6f 20 73 65 74 74 69 6e 67 20  tion to setting 
3bd70 74 68 65 20 76 61 6c 75 65 20 69 6e 20 73 65 63  the value in sec
3bd80 6f 6e 64 73 2c 20 74 68 65 20 6c 61 74 65 6e 63  onds, the latenc
3bd90 79 48 69 6e 74 20 61 6c 73 6f 0a 09 09 20 2a 20  yHint also... * 
3bda0 20 61 63 63 65 70 74 73 20 74 68 65 20 73 74 72   accepts the str
3bdb0 69 6e 67 73 20 22 69 6e 74 65 72 61 63 74 69 76  ings "interactiv
3bdc0 65 22 20 28 70 72 69 6f 72 69 74 69 7a 65 73 20  e" (prioritizes 
3bdd0 6c 6f 77 20 6c 61 74 65 6e 63 79 29 2c 20 0a 09  low latency), ..
3bde0 09 20 2a 20 20 22 70 6c 61 79 62 61 63 6b 22 20  . *  "playback" 
3bdf0 28 70 72 69 6f 72 69 74 69 7a 65 73 20 73 75 73  (prioritizes sus
3be00 74 61 69 6e 65 64 20 70 6c 61 79 62 61 63 6b 29  tained playback)
3be10 2c 20 22 62 61 6c 61 6e 63 65 64 22 20 28 62 61  , "balanced" (ba
3be20 6c 61 6e 63 65 73 0a 09 09 20 2a 20 20 6c 61 74  lances... *  lat
3be30 65 6e 63 79 20 61 6e 64 20 70 65 72 66 6f 72 6d  ency and perform
3be40 61 6e 63 65 29 2c 20 61 6e 64 20 22 66 61 73 74  ance), and "fast
3be50 65 73 74 22 20 28 6c 6f 77 65 73 74 20 6c 61 74  est" (lowest lat
3be60 65 6e 63 79 2c 20 6d 69 67 68 74 20 67 6c 69 74  ency, might glit
3be70 63 68 20 6d 6f 72 65 20 6f 66 74 65 6e 29 2e 20  ch more often). 
3be80 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b 53 74  ... *  @type {St
3be90 72 69 6e 67 7c 53 65 63 6f 6e 64 73 7d 0a 09 09  ring|Seconds}...
3bea0 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f   *  @memberOf To
3beb0 6e 65 2e 43 6c 6f 63 6b 23 0a 09 09 20 2a 20 20  ne.Clock#... *  
3bec0 40 6e 61 6d 65 20 6c 61 74 65 6e 63 79 48 69 6e  @name latencyHin
3bed0 74 0a 09 09 20 2a 20 20 40 73 74 61 74 69 63 0a  t... *  @static.
3bee0 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09  .. *  @example..
3bef0 09 20 2a 20 2f 2f 73 65 74 20 74 68 65 20 6c 6f  . * //set the lo
3bf00 6f 6b 41 68 65 61 64 20 74 6f 20 30 2e 33 20 73  okAhead to 0.3 s
3bf10 65 63 6f 6e 64 73 0a 09 09 20 2a 20 54 6f 6e 65  econds... * Tone
3bf20 2e 43 6c 6f 63 6b 2e 6c 61 74 65 6e 63 79 48 69  .Clock.latencyHi
3bf30 6e 74 20 3d 20 30 2e 33 3b 0a 09 09 20 2a 2f 0a  nt = 0.3;... */.
3bf40 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69  .    Object.defi
3bf50 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e  neProperty(Tone.
3bf60 43 6c 6f 63 6b 2c 20 27 6c 61 74 65 6e 63 79 48  Clock, 'latencyH
3bf70 69 6e 74 27 2c 20 7b 0a 09 20 20 20 20 20 20 20  int', {..       
3bf80 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   get: function (
3bf90 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
3bfa0 20 72 65 74 75 72 6e 20 6c 61 74 65 6e 63 79 48   return latencyH
3bfb0 69 6e 74 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c  int;..        },
3bfc0 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66  ..        set: f
3bfd0 75 6e 63 74 69 6f 6e 20 28 68 69 6e 74 29 20 7b  unction (hint) {
3bfe0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61  ..            va
3bff0 72 20 6c 6f 6f 6b 41 68 65 61 64 20 3d 20 68 69  r lookAhead = hi
3c000 6e 74 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  nt;..           
3c010 20 6c 61 74 65 6e 63 79 48 69 6e 74 20 3d 20 68   latencyHint = h
3c020 69 6e 74 3b 0a 09 20 20 20 20 20 20 20 20 20 20  int;..          
3c030 20 20 69 66 20 28 54 6f 6e 65 2e 70 72 6f 74 6f    if (Tone.proto
3c040 74 79 70 65 2e 69 73 53 74 72 69 6e 67 28 68 69  type.isString(hi
3c050 6e 74 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20  nt)) {..        
3c060 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 28          switch (
3c070 68 69 6e 74 29 20 7b 0a 09 20 20 20 20 20 20 20  hint) {..       
3c080 20 20 20 20 20 20 20 20 20 63 61 73 65 20 27 69           case 'i
3c090 6e 74 65 72 61 63 74 69 76 65 27 3a 0a 09 20 20  nteractive':..  
3c0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c0b0 20 20 6c 6f 6f 6b 41 68 65 61 64 20 3d 20 30 2e    lookAhead = 0.
3c0c0 31 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  1;..            
3c0d0 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 63 6f 6e          Tone.con
3c0e0 74 65 78 74 2e 6c 61 74 65 6e 63 79 48 69 6e 74  text.latencyHint
3c0f0 20 3d 20 68 69 6e 74 3b 0a 09 20 20 20 20 20 20   = hint;..      
3c100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
3c110 65 61 6b 3b 0a 09 20 20 20 20 20 20 20 20 20 20  eak;..          
3c120 20 20 20 20 20 20 63 61 73 65 20 27 70 6c 61 79        case 'play
3c130 62 61 63 6b 27 3a 0a 09 20 20 20 20 20 20 20 20  back':..        
3c140 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6f 6b              look
3c150 41 68 65 61 64 20 3d 20 30 2e 38 3b 0a 09 20 20  Ahead = 0.8;..  
3c160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c170 20 20 54 6f 6e 65 2e 63 6f 6e 74 65 78 74 2e 6c    Tone.context.l
3c180 61 74 65 6e 63 79 48 69 6e 74 20 3d 20 68 69 6e  atencyHint = hin
3c190 74 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
3c1a0 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 09          break;..
3c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c1c0 63 61 73 65 20 27 62 61 6c 61 6e 63 65 64 27 3a  case 'balanced':
3c1d0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3c1e0 20 20 20 20 20 20 6c 6f 6f 6b 41 68 65 61 64 20        lookAhead 
3c1f0 3d 20 30 2e 32 35 3b 0a 09 20 20 20 20 20 20 20  = 0.25;..       
3c200 20 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6e               Ton
3c210 65 2e 63 6f 6e 74 65 78 74 2e 6c 61 74 65 6e 63  e.context.latenc
3c220 79 48 69 6e 74 20 3d 20 68 69 6e 74 3b 0a 09 20  yHint = hint;.. 
3c230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c240 20 20 20 62 72 65 61 6b 3b 0a 09 20 20 20 20 20     break;..     
3c250 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
3c260 27 66 61 73 74 65 73 74 27 3a 0a 09 20 20 20 20  'fastest':..    
3c270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c280 6c 6f 6f 6b 41 68 65 61 64 20 3d 20 30 2e 30 31  lookAhead = 0.01
3c290 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3c2a0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 09 20         break;.. 
3c2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
3c2c0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ..            }.
3c2d0 09 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6e  .            Ton
3c2e0 65 2e 43 6c 6f 63 6b 2e 6c 6f 6f 6b 41 68 65 61  e.Clock.lookAhea
3c2f0 64 20 3d 20 6c 6f 6f 6b 41 68 65 61 64 3b 0a 09  d = lookAhead;..
3c300 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6e 65              Tone
3c310 2e 43 6c 6f 63 6b 2e 75 70 64 61 74 65 49 6e 74  .Clock.updateInt
3c320 65 72 76 61 6c 20 3d 20 6c 6f 6f 6b 41 68 65 61  erval = lookAhea
3c330 64 20 2f 20 33 3b 0a 09 20 20 20 20 20 20 20 20  d / 3;..        
3c340 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20  }..    });..    
3c350 54 6f 6e 65 2e 5f 69 6e 69 74 41 75 64 69 6f 43  Tone._initAudioC
3c360 6f 6e 74 65 78 74 28 66 75 6e 63 74 69 6f 6e 20  ontext(function 
3c370 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 6c 61  () {..        la
3c380 73 74 55 70 64 61 74 65 20 3d 20 2d 31 3b 0a 09  stUpdate = -1;..
3c390 20 20 20 20 20 20 20 20 63 6f 6d 70 75 74 65 64          computed
3c3a0 55 70 64 61 74 65 49 6e 74 65 72 76 61 6c 20 3d  UpdateInterval =
3c3b0 20 30 3b 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20   0;..    });..  
3c3c0 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 43 6c    return Tone.Cl
3c3d0 6f 63 6b 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c  ock;..});..Modul
3c3e0 65 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65  e(function (Tone
3c3f0 29 20 7b 0a 09 20 20 20 20 0a 09 20 20 20 20 2f  ) {..    ..    /
3c400 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61 73 73 20  **... *  @class 
3c410 53 69 6d 69 6c 61 72 20 74 6f 20 54 6f 6e 65 2e  Similar to Tone.
3c420 54 69 6d 65 6c 69 6e 65 2c 20 62 75 74 20 61 6c  Timeline, but al
3c430 6c 20 65 76 65 6e 74 73 20 72 65 70 72 65 73 65  l events represe
3c440 6e 74 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  nt... *         
3c450 69 6e 74 65 72 76 61 6c 73 20 77 69 74 68 20 62  intervals with b
3c460 6f 74 68 20 22 74 69 6d 65 22 20 61 6e 64 20 22  oth "time" and "
3c470 64 75 72 61 74 69 6f 6e 22 20 74 69 6d 65 73 2e  duration" times.
3c480 20 54 68 65 20 0a 09 09 20 2a 20 20 20 20 20 20   The ... *      
3c490 20 20 20 65 76 65 6e 74 73 20 61 72 65 20 70 6c     events are pl
3c4a0 61 63 65 64 20 69 6e 20 61 20 74 72 65 65 20 73  aced in a tree s
3c4b0 74 72 75 63 74 75 72 65 20 6f 70 74 69 6d 69 7a  tructure optimiz
3c4c0 65 64 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  ed... *         
3c4d0 66 6f 72 20 71 75 65 72 79 69 6e 67 20 61 6e 20  for querying an 
3c4e0 69 6e 74 65 72 73 65 63 74 69 6f 6e 20 70 6f 69  intersection poi
3c4f0 6e 74 20 77 69 74 68 20 74 68 65 20 74 69 6d 65  nt with the time
3c500 6c 69 6e 65 0a 09 09 20 2a 20 20 20 20 20 20 20  line... *       
3c510 20 20 65 76 65 6e 74 73 2e 20 49 6e 74 65 72 6e    events. Intern
3c520 61 6c 6c 79 20 75 73 65 73 20 61 6e 20 5b 49 6e  ally uses an [In
3c530 74 65 72 76 61 6c 20 54 72 65 65 5d 28 68 74 74  terval Tree](htt
3c540 70 73 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  ps://en.wikipedi
3c550 61 2e 6f 72 67 2f 77 69 6b 69 2f 49 6e 74 65 72  a.org/wiki/Inter
3c560 76 61 6c 5f 74 72 65 65 29 0a 09 09 20 2a 20 20  val_tree)... *  
3c570 20 20 20 20 20 20 20 74 6f 20 72 65 70 72 65 73         to repres
3c580 65 6e 74 20 74 68 65 20 64 61 74 61 2e 0a 09 09  ent the data....
3c590 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f   *  @extends {To
3c5a0 6e 65 7d 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  ne}... */..    T
3c5b0 6f 6e 65 2e 49 6e 74 65 72 76 61 6c 54 69 6d 65  one.IntervalTime
3c5c0 6c 69 6e 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20  line = function 
3c5d0 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 2f 2a  () {..        /*
3c5e0 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 72 6f 6f  *.... *  The roo
3c5f0 74 20 6e 6f 64 65 20 6f 66 20 74 68 65 20 69 6e  t node of the in
3c600 74 65 76 61 6c 20 74 72 65 65 0a 09 09 09 20 2a  teval tree.... *
3c610 20 20 40 74 79 70 65 20 20 7b 49 6e 74 65 72 76    @type  {Interv
3c620 61 6c 4e 6f 64 65 7d 0a 09 09 09 20 2a 20 20 40  alNode}.... *  @
3c630 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
3c640 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 72 6f          this._ro
3c650 6f 74 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  ot = null;..    
3c660 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 4b      /**.... *  K
3c670 65 65 70 20 74 72 61 63 6b 20 6f 66 20 74 68 65  eep track of the
3c680 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 74   length of the t
3c690 69 6d 65 6c 69 6e 65 2e 0a 09 09 09 20 2a 20 20  imeline..... *  
3c6a0 40 74 79 70 65 20 20 7b 4e 75 6d 62 65 72 7d 0a  @type  {Number}.
3c6b0 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
3c6c0 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
3c6d0 74 68 69 73 2e 5f 6c 65 6e 67 74 68 20 3d 20 30  this._length = 0
3c6e0 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54  ;..    };..    T
3c6f0 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e  one.extend(Tone.
3c700 49 6e 74 65 72 76 61 6c 54 69 6d 65 6c 69 6e 65  IntervalTimeline
3c710 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  );..    /**... *
3c720 20 20 54 68 65 20 65 76 65 6e 74 20 74 6f 20 61    The event to a
3c730 64 64 20 74 6f 20 74 68 65 20 74 69 6d 65 6c 69  dd to the timeli
3c740 6e 65 2e 20 41 6c 6c 20 65 76 65 6e 74 73 20 6d  ne. All events m
3c750 75 73 74 20 0a 09 09 20 2a 20 20 68 61 76 65 20  ust ... *  have 
3c760 61 20 74 69 6d 65 20 61 6e 64 20 64 75 72 61 74  a time and durat
3c770 69 6f 6e 20 76 61 6c 75 65 0a 09 09 20 2a 20 20  ion value... *  
3c780 40 70 61 72 61 6d 20 20 7b 4f 62 6a 65 63 74 7d  @param  {Object}
3c790 20 20 65 76 65 6e 74 20 20 54 68 65 20 65 76 65    event  The eve
3c7a0 6e 74 20 74 6f 20 61 64 64 20 74 6f 20 74 68 65  nt to add to the
3c7b0 20 74 69 6d 65 6c 69 6e 65 0a 09 09 20 2a 20 20   timeline... *  
3c7c0 40 72 65 74 75 72 6e 20 20 7b 54 6f 6e 65 2e 49  @return  {Tone.I
3c7d0 6e 74 65 72 76 61 6c 54 69 6d 65 6c 69 6e 65 7d  ntervalTimeline}
3c7e0 20 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20    this... */..  
3c7f0 20 20 54 6f 6e 65 2e 49 6e 74 65 72 76 61 6c 54    Tone.IntervalT
3c800 69 6d 65 6c 69 6e 65 2e 70 72 6f 74 6f 74 79 70  imeline.prototyp
3c810 65 2e 61 64 64 20 3d 20 66 75 6e 63 74 69 6f 6e  e.add = function
3c820 20 28 65 76 65 6e 74 29 20 7b 0a 09 20 20 20 20   (event) {..    
3c830 20 20 20 20 69 66 20 28 74 68 69 73 2e 69 73 55      if (this.isU
3c840 6e 64 65 66 28 65 76 65 6e 74 2e 74 69 6d 65 29  ndef(event.time)
3c850 20 7c 7c 20 74 68 69 73 2e 69 73 55 6e 64 65 66   || this.isUndef
3c860 28 65 76 65 6e 74 2e 64 75 72 61 74 69 6f 6e 29  (event.duration)
3c870 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
3c880 20 74 68 72 6f 77 20 6e 65 77 20 45 72 72 6f 72   throw new Error
3c890 28 27 54 6f 6e 65 2e 49 6e 74 65 72 76 61 6c 54  ('Tone.IntervalT
3c8a0 69 6d 65 6c 69 6e 65 3a 20 65 76 65 6e 74 73 20  imeline: events 
3c8b0 6d 75 73 74 20 68 61 76 65 20 74 69 6d 65 20 61  must have time a
3c8c0 6e 64 20 64 75 72 61 74 69 6f 6e 20 70 61 72 61  nd duration para
3c8d0 6d 65 74 65 72 73 27 29 3b 0a 09 20 20 20 20 20  meters');..     
3c8e0 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 76 61     }..        va
3c8f0 72 20 6e 6f 64 65 20 3d 20 6e 65 77 20 49 6e 74  r node = new Int
3c900 65 72 76 61 6c 4e 6f 64 65 28 65 76 65 6e 74 2e  ervalNode(event.
3c910 74 69 6d 65 2c 20 65 76 65 6e 74 2e 74 69 6d 65  time, event.time
3c920 20 2b 20 65 76 65 6e 74 2e 64 75 72 61 74 69 6f   + event.duratio
3c930 6e 2c 20 65 76 65 6e 74 29 3b 0a 09 20 20 20 20  n, event);..    
3c940 20 20 20 20 69 66 20 28 74 68 69 73 2e 5f 72 6f      if (this._ro
3c950 6f 74 20 3d 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 09  ot === null) {..
3c960 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
3c970 2e 5f 72 6f 6f 74 20 3d 20 6e 6f 64 65 3b 0a 09  ._root = node;..
3c980 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
3c990 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
3c9a0 69 73 2e 5f 72 6f 6f 74 2e 69 6e 73 65 72 74 28  is._root.insert(
3c9b0 6e 6f 64 65 29 3b 0a 09 20 20 20 20 20 20 20 20  node);..        
3c9c0 7d 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  }..        this.
3c9d0 5f 6c 65 6e 67 74 68 2b 2b 3b 0a 09 20 20 20 20  _length++;..    
3c9e0 20 20 20 20 2f 2f 20 52 65 73 74 72 75 63 74 75      // Restructu
3c9f0 72 65 20 74 72 65 65 20 74 6f 20 62 65 20 62 61  re tree to be ba
3ca00 6c 61 6e 63 65 64 0a 09 20 20 20 20 20 20 20 20  lanced..        
3ca10 77 68 69 6c 65 20 28 6e 6f 64 65 20 21 3d 3d 20  while (node !== 
3ca20 6e 75 6c 6c 29 20 7b 0a 09 20 20 20 20 20 20 20  null) {..       
3ca30 20 20 20 20 20 6e 6f 64 65 2e 75 70 64 61 74 65       node.update
3ca40 48 65 69 67 68 74 28 29 3b 0a 09 20 20 20 20 20  Height();..     
3ca50 20 20 20 20 20 20 20 6e 6f 64 65 2e 75 70 64 61         node.upda
3ca60 74 65 4d 61 78 28 29 3b 0a 09 20 20 20 20 20 20  teMax();..      
3ca70 20 20 20 20 20 20 74 68 69 73 2e 5f 72 65 62 61        this._reba
3ca80 6c 61 6e 63 65 28 6e 6f 64 65 29 3b 0a 09 20 20  lance(node);..  
3ca90 20 20 20 20 20 20 20 20 20 20 6e 6f 64 65 20 3d            node =
3caa0 20 6e 6f 64 65 2e 70 61 72 65 6e 74 3b 0a 09 20   node.parent;.. 
3cab0 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
3cac0 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09    return this;..
3cad0 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
3cae0 09 09 20 2a 20 20 52 65 6d 6f 76 65 20 61 6e 20  .. *  Remove an 
3caf0 65 76 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 74  event from the t
3cb00 69 6d 65 6c 69 6e 65 2e 0a 09 09 20 2a 20 20 40  imeline.... *  @
3cb10 70 61 72 61 6d 20 20 7b 4f 62 6a 65 63 74 7d 20  param  {Object} 
3cb20 20 65 76 65 6e 74 20 20 54 68 65 20 65 76 65 6e   event  The even
3cb30 74 20 74 6f 20 72 65 6d 6f 76 65 20 66 72 6f 6d  t to remove from
3cb40 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 0a 09 09   the timeline...
3cb50 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 54 6f   *  @return  {To
3cb60 6e 65 2e 49 6e 74 65 72 76 61 6c 54 69 6d 65 6c  ne.IntervalTimel
3cb70 69 6e 65 7d 20 20 74 68 69 73 0a 09 09 20 2a 2f  ine}  this... */
3cb80 0a 09 20 20 20 20 54 6f 6e 65 2e 49 6e 74 65 72  ..    Tone.Inter
3cb90 76 61 6c 54 69 6d 65 6c 69 6e 65 2e 70 72 6f 74  valTimeline.prot
3cba0 6f 74 79 70 65 2e 72 65 6d 6f 76 65 20 3d 20 66  otype.remove = f
3cbb0 75 6e 63 74 69 6f 6e 20 28 65 76 65 6e 74 29 20  unction (event) 
3cbc0 7b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 74  {..        if (t
3cbd0 68 69 73 2e 5f 72 6f 6f 74 20 21 3d 3d 20 6e 75  his._root !== nu
3cbe0 6c 6c 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ll) {..         
3cbf0 20 20 20 76 61 72 20 72 65 73 75 6c 74 73 20 3d     var results =
3cc00 20 5b 5d 3b 0a 09 20 20 20 20 20 20 20 20 20 20   [];..          
3cc10 20 20 74 68 69 73 2e 5f 72 6f 6f 74 2e 73 65 61    this._root.sea
3cc20 72 63 68 28 65 76 65 6e 74 2e 74 69 6d 65 2c 20  rch(event.time, 
3cc30 72 65 73 75 6c 74 73 29 3b 0a 09 20 20 20 20 20  results);..     
3cc40 20 20 20 20 20 20 20 66 6f 72 20 28 76 61 72 20         for (var 
3cc50 69 20 3d 20 30 3b 20 69 20 3c 20 72 65 73 75 6c  i = 0; i < resul
3cc60 74 73 2e 6c 65 6e 67 74 68 3b 20 69 2b 2b 29 20  ts.length; i++) 
3cc70 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3cc80 20 20 20 76 61 72 20 6e 6f 64 65 20 3d 20 72 65     var node = re
3cc90 73 75 6c 74 73 5b 69 5d 3b 0a 09 20 20 20 20 20  sults[i];..     
3cca0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
3ccb0 6f 64 65 2e 65 76 65 6e 74 20 3d 3d 3d 20 65 76  ode.event === ev
3ccc0 65 6e 74 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ent) {..        
3ccd0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
3cce0 2e 5f 72 65 6d 6f 76 65 4e 6f 64 65 28 6e 6f 64  ._removeNode(nod
3ccf0 65 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e);..           
3cd00 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c           this._l
3cd10 65 6e 67 74 68 2d 2d 3b 0a 09 20 20 20 20 20 20  ength--;..      
3cd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
3cd30 65 61 6b 3b 0a 09 20 20 20 20 20 20 20 20 20 20  eak;..          
3cd40 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
3cd50 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
3cd60 7d 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  }..        retur
3cd70 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a  n this;..    };.
3cd80 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 54  .    /**... *  T
3cd90 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65  he number of ite
3cda0 6d 73 20 69 6e 20 74 68 65 20 74 69 6d 65 6c 69  ms in the timeli
3cdb0 6e 65 2e 0a 09 09 20 2a 20 20 40 74 79 70 65 20  ne.... *  @type 
3cdc0 7b 4e 75 6d 62 65 72 7d 0a 09 09 20 2a 20 20 40  {Number}... *  @
3cdd0 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 49 6e  memberOf Tone.In
3cde0 74 65 72 76 61 6c 54 69 6d 65 6c 69 6e 65 23 0a  tervalTimeline#.
3cdf0 09 09 20 2a 20 20 40 6e 61 6d 65 20 6c 65 6e 67  .. *  @name leng
3ce00 74 68 0a 09 09 20 2a 20 20 40 72 65 61 64 4f 6e  th... *  @readOn
3ce10 6c 79 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62  ly... */..    Ob
3ce20 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65  ject.definePrope
3ce30 72 74 79 28 54 6f 6e 65 2e 49 6e 74 65 72 76 61  rty(Tone.Interva
3ce40 6c 54 69 6d 65 6c 69 6e 65 2e 70 72 6f 74 6f 74  lTimeline.protot
3ce50 79 70 65 2c 20 27 6c 65 6e 67 74 68 27 2c 20 7b  ype, 'length', {
3ce60 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66  ..        get: f
3ce70 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
3ce80 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3ce90 20 74 68 69 73 2e 5f 6c 65 6e 67 74 68 3b 0a 09   this._length;..
3cea0 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d          }..    }
3ceb0 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  );..    /**... *
3cec0 20 20 52 65 6d 6f 76 65 20 65 76 65 6e 74 73 20    Remove events 
3ced0 77 68 6f 73 65 20 74 69 6d 65 20 74 69 6d 65 20  whose time time 
3cee0 69 73 20 61 66 74 65 72 20 74 68 65 20 67 69 76  is after the giv
3cef0 65 6e 20 74 69 6d 65 0a 09 09 20 2a 20 20 40 70  en time... *  @p
3cf00 61 72 61 6d 20 20 7b 4e 75 6d 62 65 72 7d 20 20  aram  {Number}  
3cf10 74 69 6d 65 20 20 54 68 65 20 74 69 6d 65 20 74  time  The time t
3cf20 6f 20 71 75 65 72 79 2e 0a 09 09 20 2a 20 20 40  o query.... *  @
3cf30 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 49 6e  returns {Tone.In
3cf40 74 65 72 76 61 6c 54 69 6d 65 6c 69 6e 65 7d 20  tervalTimeline} 
3cf50 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20  this... */..    
3cf60 54 6f 6e 65 2e 49 6e 74 65 72 76 61 6c 54 69 6d  Tone.IntervalTim
3cf70 65 6c 69 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e  eline.prototype.
3cf80 63 61 6e 63 65 6c 20 3d 20 66 75 6e 63 74 69 6f  cancel = functio
3cf90 6e 20 28 61 66 74 65 72 29 20 7b 0a 09 20 20 20  n (after) {..   
3cfa0 20 20 20 20 20 74 68 69 73 2e 66 6f 72 45 61 63       this.forEac
3cfb0 68 41 66 74 65 72 28 61 66 74 65 72 2c 20 66 75  hAfter(after, fu
3cfc0 6e 63 74 69 6f 6e 20 28 65 76 65 6e 74 29 20 7b  nction (event) {
3cfd0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
3cfe0 69 73 2e 72 65 6d 6f 76 65 28 65 76 65 6e 74 29  is.remove(event)
3cff0 3b 0a 09 20 20 20 20 20 20 20 20 7d 2e 62 69 6e  ;..        }.bin
3d000 64 28 74 68 69 73 29 29 3b 0a 09 20 20 20 20 20  d(this));..     
3d010 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a     return this;.
3d020 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
3d030 0a 09 09 20 2a 20 20 53 65 74 20 74 68 65 20 72  ... *  Set the r
3d040 6f 6f 74 20 6e 6f 64 65 20 61 73 20 74 68 65 20  oot node as the 
3d050 67 69 76 65 6e 20 6e 6f 64 65 0a 09 09 20 2a 20  given node... * 
3d060 20 40 70 61 72 61 6d 20 7b 49 6e 74 65 72 76 61   @param {Interva
3d070 6c 4e 6f 64 65 7d 20 6e 6f 64 65 0a 09 09 20 2a  lNode} node... *
3d080 20 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f    @private... */
3d090 0a 09 20 20 20 20 54 6f 6e 65 2e 49 6e 74 65 72  ..    Tone.Inter
3d0a0 76 61 6c 54 69 6d 65 6c 69 6e 65 2e 70 72 6f 74  valTimeline.prot
3d0b0 6f 74 79 70 65 2e 5f 73 65 74 52 6f 6f 74 20 3d  otype._setRoot =
3d0c0 20 66 75 6e 63 74 69 6f 6e 20 28 6e 6f 64 65 29   function (node)
3d0d0 20 7b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73   {..        this
3d0e0 2e 5f 72 6f 6f 74 20 3d 20 6e 6f 64 65 3b 0a 09  ._root = node;..
3d0f0 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73          if (this
3d100 2e 5f 72 6f 6f 74 20 21 3d 3d 20 6e 75 6c 6c 29  ._root !== null)
3d110 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3d120 74 68 69 73 2e 5f 72 6f 6f 74 2e 70 61 72 65 6e  this._root.paren
3d130 74 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20  t = null;..     
3d140 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a 09 20 20     }..    };..  
3d150 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 52 65 70 6c    /**... *  Repl
3d160 61 63 65 20 74 68 65 20 72 65 66 65 72 65 6e 63  ace the referenc
3d170 65 73 20 74 6f 20 74 68 65 20 6e 6f 64 65 20 69  es to the node i
3d180 6e 20 74 68 65 20 6e 6f 64 65 27 73 20 70 61 72  n the node's par
3d190 65 6e 74 0a 09 09 20 2a 20 20 77 69 74 68 20 74  ent... *  with t
3d1a0 68 65 20 72 65 70 6c 61 63 65 6d 65 6e 74 20 6e  he replacement n
3d1b0 6f 64 65 2e 0a 09 09 20 2a 20 20 40 70 61 72 61  ode.... *  @para
3d1c0 6d 20 20 7b 49 6e 74 65 72 76 61 6c 4e 6f 64 65  m  {IntervalNode
3d1d0 7d 20 20 6e 6f 64 65 20 20 20 20 20 20 20 20 0a  }  node        .
3d1e0 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 49  .. *  @param  {I
3d1f0 6e 74 65 72 76 61 6c 4e 6f 64 65 7d 20 20 72 65  ntervalNode}  re
3d200 70 6c 61 63 65 6d 65 6e 74 20 0a 09 09 20 2a 20  placement ... * 
3d210 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a   @private... */.
3d220 09 20 20 20 20 54 6f 6e 65 2e 49 6e 74 65 72 76  .    Tone.Interv
3d230 61 6c 54 69 6d 65 6c 69 6e 65 2e 70 72 6f 74 6f  alTimeline.proto
3d240 74 79 70 65 2e 5f 72 65 70 6c 61 63 65 4e 6f 64  type._replaceNod
3d250 65 49 6e 50 61 72 65 6e 74 20 3d 20 66 75 6e 63  eInParent = func
3d260 74 69 6f 6e 20 28 6e 6f 64 65 2c 20 72 65 70 6c  tion (node, repl
3d270 61 63 65 6d 65 6e 74 29 20 7b 0a 09 20 20 20 20  acement) {..    
3d280 20 20 20 20 69 66 20 28 6e 6f 64 65 2e 70 61 72      if (node.par
3d290 65 6e 74 20 21 3d 3d 20 6e 75 6c 6c 29 20 7b 0a  ent !== null) {.
3d2a0 09 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
3d2b0 28 6e 6f 64 65 2e 69 73 4c 65 66 74 43 68 69 6c  (node.isLeftChil
3d2c0 64 28 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20  d()) {..        
3d2d0 20 20 20 20 20 20 20 20 6e 6f 64 65 2e 70 61 72          node.par
3d2e0 65 6e 74 2e 6c 65 66 74 20 3d 20 72 65 70 6c 61  ent.left = repla
3d2f0 63 65 6d 65 6e 74 3b 0a 09 20 20 20 20 20 20 20  cement;..       
3d300 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20       } else {.. 
3d310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
3d320 6f 64 65 2e 70 61 72 65 6e 74 2e 72 69 67 68 74  ode.parent.right
3d330 20 3d 20 72 65 70 6c 61 63 65 6d 65 6e 74 3b 0a   = replacement;.
3d340 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09  .            }..
3d350 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
3d360 2e 5f 72 65 62 61 6c 61 6e 63 65 28 6e 6f 64 65  ._rebalance(node
3d370 2e 70 61 72 65 6e 74 29 3b 0a 09 20 20 20 20 20  .parent);..     
3d380 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20     } else {..   
3d390 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73           this._s
3d3a0 65 74 52 6f 6f 74 28 72 65 70 6c 61 63 65 6d 65  etRoot(replaceme
3d3b0 6e 74 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a  nt);..        }.
3d3c0 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
3d3d0 0a 09 09 20 2a 20 20 52 65 6d 6f 76 65 20 74 68  ... *  Remove th
3d3e0 65 20 6e 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  e node from the 
3d3f0 74 72 65 65 20 61 6e 64 20 72 65 70 6c 61 63 65  tree and replace
3d400 20 69 74 20 77 69 74 68 20 0a 09 09 20 2a 20 20   it with ... *  
3d410 61 20 73 75 63 63 65 73 73 6f 72 20 77 68 69 63  a successor whic
3d420 68 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 73 63  h follows the sc
3d430 68 65 6d 61 2e 0a 09 09 20 2a 20 20 40 70 61 72  hema.... *  @par
3d440 61 6d 20 20 7b 49 6e 74 65 72 76 61 6c 4e 6f 64  am  {IntervalNod
3d450 65 7d 20 20 6e 6f 64 65 0a 09 09 20 2a 20 20 40  e}  node... *  @
3d460 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20  private... */.. 
3d470 20 20 20 54 6f 6e 65 2e 49 6e 74 65 72 76 61 6c     Tone.Interval
3d480 54 69 6d 65 6c 69 6e 65 2e 70 72 6f 74 6f 74 79  Timeline.prototy
3d490 70 65 2e 5f 72 65 6d 6f 76 65 4e 6f 64 65 20 3d  pe._removeNode =
3d4a0 20 66 75 6e 63 74 69 6f 6e 20 28 6e 6f 64 65 29   function (node)
3d4b0 20 7b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
3d4c0 6e 6f 64 65 2e 6c 65 66 74 20 3d 3d 3d 20 6e 75  node.left === nu
3d4d0 6c 6c 20 26 26 20 6e 6f 64 65 2e 72 69 67 68 74  ll && node.right
3d4e0 20 3d 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 09 20 20   === null) {..  
3d4f0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
3d500 72 65 70 6c 61 63 65 4e 6f 64 65 49 6e 50 61 72  replaceNodeInPar
3d510 65 6e 74 28 6e 6f 64 65 2c 20 6e 75 6c 6c 29 3b  ent(node, null);
3d520 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
3d530 20 69 66 20 28 6e 6f 64 65 2e 72 69 67 68 74 20   if (node.right 
3d540 3d 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 09 20 20 20  === null) {..   
3d550 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 72           this._r
3d560 65 70 6c 61 63 65 4e 6f 64 65 49 6e 50 61 72 65  eplaceNodeInPare
3d570 6e 74 28 6e 6f 64 65 2c 20 6e 6f 64 65 2e 6c 65  nt(node, node.le
3d580 66 74 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 20  ft);..        } 
3d590 65 6c 73 65 20 69 66 20 28 6e 6f 64 65 2e 6c 65  else if (node.le
3d5a0 66 74 20 3d 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 09  ft === null) {..
3d5b0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
3d5c0 2e 5f 72 65 70 6c 61 63 65 4e 6f 64 65 49 6e 50  ._replaceNodeInP
3d5d0 61 72 65 6e 74 28 6e 6f 64 65 2c 20 6e 6f 64 65  arent(node, node
3d5e0 2e 72 69 67 68 74 29 3b 0a 09 20 20 20 20 20 20  .right);..      
3d5f0 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20    } else {..    
3d600 20 20 20 20 20 20 20 20 76 61 72 20 62 61 6c 61          var bala
3d610 6e 63 65 20 3d 20 6e 6f 64 65 2e 67 65 74 42 61  nce = node.getBa
3d620 6c 61 6e 63 65 28 29 3b 0a 09 20 20 20 20 20 20  lance();..      
3d630 20 20 20 20 20 20 76 61 72 20 72 65 70 6c 61 63        var replac
3d640 65 6d 65 6e 74 2c 20 74 65 6d 70 3b 0a 09 20 20  ement, temp;..  
3d650 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62 61            if (ba
3d660 6c 61 6e 63 65 20 3e 20 30 29 20 7b 0a 09 20 20  lance > 0) {..  
3d670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
3d680 20 28 6e 6f 64 65 2e 6c 65 66 74 2e 72 69 67 68   (node.left.righ
3d690 74 20 3d 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 09 20  t === null) {.. 
3d6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d6b0 20 20 20 72 65 70 6c 61 63 65 6d 65 6e 74 20 3d     replacement =
3d6c0 20 6e 6f 64 65 2e 6c 65 66 74 3b 0a 09 20 20 20   node.left;..   
3d6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d6e0 20 72 65 70 6c 61 63 65 6d 65 6e 74 2e 72 69 67   replacement.rig
3d6f0 68 74 20 3d 20 6e 6f 64 65 2e 72 69 67 68 74 3b  ht = node.right;
3d700 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3d710 20 20 20 20 20 20 74 65 6d 70 20 3d 20 72 65 70        temp = rep
3d720 6c 61 63 65 6d 65 6e 74 3b 0a 09 20 20 20 20 20  lacement;..     
3d730 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
3d740 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e {..           
3d750 20 20 20 20 20 20 20 20 20 72 65 70 6c 61 63 65           replace
3d760 6d 65 6e 74 20 3d 20 6e 6f 64 65 2e 6c 65 66 74  ment = node.left
3d770 2e 72 69 67 68 74 3b 0a 09 20 20 20 20 20 20 20  .right;..       
3d780 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69               whi
3d790 6c 65 20 28 72 65 70 6c 61 63 65 6d 65 6e 74 2e  le (replacement.
3d7a0 72 69 67 68 74 20 21 3d 3d 20 6e 75 6c 6c 29 20  right !== null) 
3d7b0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3d7c0 20 20 20 20 20 20 20 20 20 20 20 72 65 70 6c 61             repla
3d7d0 63 65 6d 65 6e 74 20 3d 20 72 65 70 6c 61 63 65  cement = replace
3d7e0 6d 65 6e 74 2e 72 69 67 68 74 3b 0a 09 20 20 20  ment.right;..   
3d7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d800 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   }..            
3d810 20 20 20 20 20 20 20 20 72 65 70 6c 61 63 65 6d          replacem
3d820 65 6e 74 2e 70 61 72 65 6e 74 2e 72 69 67 68 74  ent.parent.right
3d830 20 3d 20 72 65 70 6c 61 63 65 6d 65 6e 74 2e 6c   = replacement.l
3d840 65 66 74 3b 0a 09 20 20 20 20 20 20 20 20 20 20  eft;..          
3d850 20 20 20 20 20 20 20 20 20 20 74 65 6d 70 20 3d            temp =
3d860 20 72 65 70 6c 61 63 65 6d 65 6e 74 2e 70 61 72   replacement.par
3d870 65 6e 74 3b 0a 09 20 20 20 20 20 20 20 20 20 20  ent;..          
3d880 20 20 20 20 20 20 20 20 20 20 72 65 70 6c 61 63            replac
3d890 65 6d 65 6e 74 2e 6c 65 66 74 20 3d 20 6e 6f 64  ement.left = nod
3d8a0 65 2e 6c 65 66 74 3b 0a 09 20 20 20 20 20 20 20  e.left;..       
3d8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 70               rep
3d8c0 6c 61 63 65 6d 65 6e 74 2e 72 69 67 68 74 20 3d  lacement.right =
3d8d0 20 6e 6f 64 65 2e 72 69 67 68 74 3b 0a 09 20 20   node.right;..  
3d8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
3d8f0 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
3d900 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20  lse {..         
3d910 20 20 20 20 20 20 20 69 66 20 28 6e 6f 64 65 2e         if (node.
3d920 72 69 67 68 74 2e 6c 65 66 74 20 3d 3d 3d 20 6e  right.left === n
3d930 75 6c 6c 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ull) {..        
3d940 20 20 20 20 20 20 20 20 20 20 20 20 72 65 70 6c              repl
3d950 61 63 65 6d 65 6e 74 20 3d 20 6e 6f 64 65 2e 72  acement = node.r
3d960 69 67 68 74 3b 0a 09 20 20 20 20 20 20 20 20 20  ight;..         
3d970 20 20 20 20 20 20 20 20 20 20 20 72 65 70 6c 61             repla
3d980 63 65 6d 65 6e 74 2e 6c 65 66 74 20 3d 20 6e 6f  cement.left = no
3d990 64 65 2e 6c 65 66 74 3b 0a 09 20 20 20 20 20 20  de.left;..      
3d9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65                te
3d9b0 6d 70 20 3d 20 72 65 70 6c 61 63 65 6d 65 6e 74  mp = replacement
3d9c0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3d9d0 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20     } else {..   
3d9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d9f0 20 72 65 70 6c 61 63 65 6d 65 6e 74 20 3d 20 6e   replacement = n
3da00 6f 64 65 2e 72 69 67 68 74 2e 6c 65 66 74 3b 0a  ode.right.left;.
3da10 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3da20 20 20 20 20 20 77 68 69 6c 65 20 28 72 65 70 6c       while (repl
3da30 61 63 65 6d 65 6e 74 2e 6c 65 66 74 20 21 3d 3d  acement.left !==
3da40 20 6e 75 6c 6c 29 20 7b 0a 09 20 20 20 20 20 20   null) {..      
3da50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3da60 20 20 72 65 70 6c 61 63 65 6d 65 6e 74 20 3d 20    replacement = 
3da70 72 65 70 6c 61 63 65 6d 65 6e 74 2e 6c 65 66 74  replacement.left
3da80 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3da90 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
3daa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
3dab0 70 6c 61 63 65 6d 65 6e 74 2e 70 61 72 65 6e 74  placement.parent
3dac0 20 3d 20 72 65 70 6c 61 63 65 6d 65 6e 74 2e 70   = replacement.p
3dad0 61 72 65 6e 74 3b 0a 09 20 20 20 20 20 20 20 20  arent;..        
3dae0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 70 6c              repl
3daf0 61 63 65 6d 65 6e 74 2e 70 61 72 65 6e 74 2e 6c  acement.parent.l
3db00 65 66 74 20 3d 20 72 65 70 6c 61 63 65 6d 65 6e  eft = replacemen
3db10 74 2e 72 69 67 68 74 3b 0a 09 20 20 20 20 20 20  t.right;..      
3db20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65                te
3db30 6d 70 20 3d 20 72 65 70 6c 61 63 65 6d 65 6e 74  mp = replacement
3db40 2e 70 61 72 65 6e 74 3b 0a 09 20 20 20 20 20 20  .parent;..      
3db50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
3db60 70 6c 61 63 65 6d 65 6e 74 2e 6c 65 66 74 20 3d  placement.left =
3db70 20 6e 6f 64 65 2e 6c 65 66 74 3b 0a 09 20 20 20   node.left;..   
3db80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3db90 20 72 65 70 6c 61 63 65 6d 65 6e 74 2e 72 69 67   replacement.rig
3dba0 68 74 20 3d 20 6e 6f 64 65 2e 72 69 67 68 74 3b  ht = node.right;
3dbb0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3dbc0 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20    }..           
3dbd0 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   }..            
3dbe0 69 66 20 28 6e 6f 64 65 2e 70 61 72 65 6e 74 20  if (node.parent 
3dbf0 21 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 09 20 20 20  !== null) {..   
3dc00 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
3dc10 28 6e 6f 64 65 2e 69 73 4c 65 66 74 43 68 69 6c  (node.isLeftChil
3dc20 64 28 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20  d()) {..        
3dc30 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 64 65              node
3dc40 2e 70 61 72 65 6e 74 2e 6c 65 66 74 20 3d 20 72  .parent.left = r
3dc50 65 70 6c 61 63 65 6d 65 6e 74 3b 0a 09 20 20 20  eplacement;..   
3dc60 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65               } e
3dc70 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20  lse {..         
3dc80 20 20 20 20 20 20 20 20 20 20 20 6e 6f 64 65 2e             node.
3dc90 70 61 72 65 6e 74 2e 72 69 67 68 74 20 3d 20 72  parent.right = r
3dca0 65 70 6c 61 63 65 6d 65 6e 74 3b 0a 09 20 20 20  eplacement;..   
3dcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09               }..
3dcc0 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
3dcd0 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  se {..          
3dce0 20 20 20 20 20 20 74 68 69 73 2e 5f 73 65 74 52        this._setR
3dcf0 6f 6f 74 28 72 65 70 6c 61 63 65 6d 65 6e 74 29  oot(replacement)
3dd00 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
3dd10 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
3dd20 20 74 68 69 73 2e 5f 72 65 70 6c 61 63 65 4e 6f   this._replaceNo
3dd30 64 65 49 6e 50 61 72 65 6e 74 28 6e 6f 64 65 2c  deInParent(node,
3dd40 20 72 65 70 6c 61 63 65 6d 65 6e 74 29 3b 0a 09   replacement);..
3dd50 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
3dd60 2e 5f 72 65 62 61 6c 61 6e 63 65 28 74 65 6d 70  ._rebalance(temp
3dd70 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  );..        }.. 
3dd80 20 20 20 20 20 20 20 6e 6f 64 65 2e 64 69 73 70         node.disp
3dd90 6f 73 65 28 29 3b 0a 09 20 20 20 20 7d 3b 0a 09  ose();..    };..
3dda0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 52 6f      /**... *  Ro
3ddb0 74 61 74 65 20 74 68 65 20 74 72 65 65 20 74 6f  tate the tree to
3ddc0 20 74 68 65 20 6c 65 66 74 0a 09 09 20 2a 20 20   the left... *  
3ddd0 40 70 61 72 61 6d 20 20 7b 49 6e 74 65 72 76 61  @param  {Interva
3dde0 6c 4e 6f 64 65 7d 20 20 6e 6f 64 65 0a 09 09 20  lNode}  node... 
3ddf0 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a  *  @private... *
3de00 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 49 6e 74 65  /..    Tone.Inte
3de10 72 76 61 6c 54 69 6d 65 6c 69 6e 65 2e 70 72 6f  rvalTimeline.pro
3de20 74 6f 74 79 70 65 2e 5f 72 6f 74 61 74 65 4c 65  totype._rotateLe
3de30 66 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 6e  ft = function (n
3de40 6f 64 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ode) {..        
3de50 76 61 72 20 70 61 72 65 6e 74 20 3d 20 6e 6f 64  var parent = nod
3de60 65 2e 70 61 72 65 6e 74 3b 0a 09 20 20 20 20 20  e.parent;..     
3de70 20 20 20 76 61 72 20 69 73 4c 65 66 74 43 68 69     var isLeftChi
3de80 6c 64 20 3d 20 6e 6f 64 65 2e 69 73 4c 65 66 74  ld = node.isLeft
3de90 43 68 69 6c 64 28 29 3b 0a 09 20 20 20 20 20 20  Child();..      
3dea0 20 20 2f 2f 20 4d 61 6b 65 20 6e 6f 64 65 2e 72    // Make node.r
3deb0 69 67 68 74 20 74 68 65 20 6e 65 77 20 72 6f 6f  ight the new roo
3dec0 74 20 6f 66 20 74 68 69 73 20 73 75 62 20 74 72  t of this sub tr
3ded0 65 65 20 28 69 6e 73 74 65 61 64 20 6f 66 20 6e  ee (instead of n
3dee0 6f 64 65 29 0a 09 20 20 20 20 20 20 20 20 76 61  ode)..        va
3def0 72 20 70 69 76 6f 74 4e 6f 64 65 20 3d 20 6e 6f  r pivotNode = no
3df00 64 65 2e 72 69 67 68 74 3b 0a 09 20 20 20 20 20  de.right;..     
3df10 20 20 20 6e 6f 64 65 2e 72 69 67 68 74 20 3d 20     node.right = 
3df20 70 69 76 6f 74 4e 6f 64 65 2e 6c 65 66 74 3b 0a  pivotNode.left;.
3df30 09 20 20 20 20 20 20 20 20 70 69 76 6f 74 4e 6f  .        pivotNo
3df40 64 65 2e 6c 65 66 74 20 3d 20 6e 6f 64 65 3b 0a  de.left = node;.
3df50 09 20 20 20 20 20 20 20 20 69 66 20 28 70 61 72  .        if (par
3df60 65 6e 74 20 21 3d 3d 20 6e 75 6c 6c 29 20 7b 0a  ent !== null) {.
3df70 09 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
3df80 28 69 73 4c 65 66 74 43 68 69 6c 64 29 20 7b 0a  (isLeftChild) {.
3df90 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3dfa0 20 70 61 72 65 6e 74 2e 6c 65 66 74 20 3d 20 70   parent.left = p
3dfb0 69 76 6f 74 4e 6f 64 65 3b 0a 09 20 20 20 20 20  ivotNode;..     
3dfc0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
3dfd0 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3dfe0 20 70 61 72 65 6e 74 2e 72 69 67 68 74 20 3d 20   parent.right = 
3dff0 70 69 76 6f 74 4e 6f 64 65 3b 0a 09 20 20 20 20  pivotNode;..    
3e000 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
3e010 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20     } else {..   
3e020 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73           this._s
3e030 65 74 52 6f 6f 74 28 70 69 76 6f 74 4e 6f 64 65  etRoot(pivotNode
3e040 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  );..        }.. 
3e050 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09     };..    /**..
3e060 09 20 2a 20 20 52 6f 74 61 74 65 20 74 68 65 20  . *  Rotate the 
3e070 74 72 65 65 20 74 6f 20 74 68 65 20 72 69 67 68  tree to the righ
3e080 74 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20  t... *  @param  
3e090 7b 49 6e 74 65 72 76 61 6c 4e 6f 64 65 7d 20 20  {IntervalNode}  
3e0a0 6e 6f 64 65 0a 09 09 20 2a 20 20 40 70 72 69 76  node... *  @priv
3e0b0 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  ate... */..    T
3e0c0 6f 6e 65 2e 49 6e 74 65 72 76 61 6c 54 69 6d 65  one.IntervalTime
3e0d0 6c 69 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e 5f  line.prototype._
3e0e0 72 6f 74 61 74 65 52 69 67 68 74 20 3d 20 66 75  rotateRight = fu
3e0f0 6e 63 74 69 6f 6e 20 28 6e 6f 64 65 29 20 7b 0a  nction (node) {.
3e100 09 20 20 20 20 20 20 20 20 76 61 72 20 70 61 72  .        var par
3e110 65 6e 74 20 3d 20 6e 6f 64 65 2e 70 61 72 65 6e  ent = node.paren
3e120 74 3b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20  t;..        var 
3e130 69 73 4c 65 66 74 43 68 69 6c 64 20 3d 20 6e 6f  isLeftChild = no
3e140 64 65 2e 69 73 4c 65 66 74 43 68 69 6c 64 28 29  de.isLeftChild()
3e150 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 20 4d 61  ;..        // Ma
3e160 6b 65 20 6e 6f 64 65 2e 6c 65 66 74 20 74 68 65  ke node.left the
3e170 20 6e 65 77 20 72 6f 6f 74 20 6f 66 20 74 68 69   new root of thi
3e180 73 20 73 75 62 20 74 72 65 65 20 28 69 6e 73 74  s sub tree (inst
3e190 65 61 64 20 6f 66 20 6e 6f 64 65 29 0a 09 20 20  ead of node)..  
3e1a0 20 20 20 20 20 20 76 61 72 20 70 69 76 6f 74 4e        var pivotN
3e1b0 6f 64 65 20 3d 20 6e 6f 64 65 2e 6c 65 66 74 3b  ode = node.left;
3e1c0 0a 09 20 20 20 20 20 20 20 20 6e 6f 64 65 2e 6c  ..        node.l
3e1d0 65 66 74 20 3d 20 70 69 76 6f 74 4e 6f 64 65 2e  eft = pivotNode.
3e1e0 72 69 67 68 74 3b 0a 09 20 20 20 20 20 20 20 20  right;..        
3e1f0 70 69 76 6f 74 4e 6f 64 65 2e 72 69 67 68 74 20  pivotNode.right 
3e200 3d 20 6e 6f 64 65 3b 0a 09 20 20 20 20 20 20 20  = node;..       
3e210 20 69 66 20 28 70 61 72 65 6e 74 20 21 3d 3d 20   if (parent !== 
3e220 6e 75 6c 6c 29 20 7b 0a 09 20 20 20 20 20 20 20  null) {..       
3e230 20 20 20 20 20 69 66 20 28 69 73 4c 65 66 74 43       if (isLeftC
3e240 68 69 6c 64 29 20 7b 0a 09 20 20 20 20 20 20 20  hild) {..       
3e250 20 20 20 20 20 20 20 20 20 70 61 72 65 6e 74 2e           parent.
3e260 6c 65 66 74 20 3d 20 70 69 76 6f 74 4e 6f 64 65  left = pivotNode
3e270 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
3e280 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20   else {..       
3e290 20 20 20 20 20 20 20 20 20 70 61 72 65 6e 74 2e           parent.
3e2a0 72 69 67 68 74 20 3d 20 70 69 76 6f 74 4e 6f 64  right = pivotNod
3e2b0 65 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
3e2c0 7d 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
3e2d0 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e {..           
3e2e0 20 74 68 69 73 2e 5f 73 65 74 52 6f 6f 74 28 70   this._setRoot(p
3e2f0 69 76 6f 74 4e 6f 64 65 29 3b 0a 09 20 20 20 20  ivotNode);..    
3e300 20 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a 09 20      }..    };.. 
3e310 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 42 61 6c     /**... *  Bal
3e320 61 6e 63 65 20 74 68 65 20 42 53 54 0a 09 09 20  ance the BST... 
3e330 2a 20 20 40 70 61 72 61 6d 20 20 7b 49 6e 74 65  *  @param  {Inte
3e340 72 76 61 6c 4e 6f 64 65 7d 20 20 6e 6f 64 65 0a  rvalNode}  node.
3e350 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
3e360 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 49  . */..    Tone.I
3e370 6e 74 65 72 76 61 6c 54 69 6d 65 6c 69 6e 65 2e  ntervalTimeline.
3e380 70 72 6f 74 6f 74 79 70 65 2e 5f 72 65 62 61 6c  prototype._rebal
3e390 61 6e 63 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20  ance = function 
3e3a0 28 6e 6f 64 65 29 20 7b 0a 09 20 20 20 20 20 20  (node) {..      
3e3b0 20 20 76 61 72 20 62 61 6c 61 6e 63 65 20 3d 20    var balance = 
3e3c0 6e 6f 64 65 2e 67 65 74 42 61 6c 61 6e 63 65 28  node.getBalance(
3e3d0 29 3b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
3e3e0 62 61 6c 61 6e 63 65 20 3e 20 31 29 20 7b 0a 09  balance > 1) {..
3e3f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3e400 6e 6f 64 65 2e 6c 65 66 74 2e 67 65 74 42 61 6c  node.left.getBal
3e410 61 6e 63 65 28 29 20 3c 20 30 29 20 7b 0a 09 20  ance() < 0) {.. 
3e420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
3e430 68 69 73 2e 5f 72 6f 74 61 74 65 4c 65 66 74 28  his._rotateLeft(
3e440 6e 6f 64 65 2e 6c 65 66 74 29 3b 0a 09 20 20 20  node.left);..   
3e450 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else 
3e460 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3e470 20 20 20 74 68 69 73 2e 5f 72 6f 74 61 74 65 52     this._rotateR
3e480 69 67 68 74 28 6e 6f 64 65 29 3b 0a 09 20 20 20  ight(node);..   
3e490 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20           }..    
3e4a0 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 62      } else if (b
3e4b0 61 6c 61 6e 63 65 20 3c 20 2d 31 29 20 7b 0a 09  alance < -1) {..
3e4c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3e4d0 6e 6f 64 65 2e 72 69 67 68 74 2e 67 65 74 42 61  node.right.getBa
3e4e0 6c 61 6e 63 65 28 29 20 3e 20 30 29 20 7b 0a 09  lance() > 0) {..
3e4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e500 74 68 69 73 2e 5f 72 6f 74 61 74 65 52 69 67 68  this._rotateRigh
3e510 74 28 6e 6f 64 65 2e 72 69 67 68 74 29 3b 0a 09  t(node.right);..
3e520 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
3e530 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  se {..          
3e540 20 20 20 20 20 20 74 68 69 73 2e 5f 72 6f 74 61        this._rota
3e550 74 65 4c 65 66 74 28 6e 6f 64 65 29 3b 0a 09 20  teLeft(node);.. 
3e560 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20             }..  
3e570 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a        }..    };.
3e580 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 47  .    /**... *  G
3e590 65 74 20 61 6e 20 65 76 65 6e 74 20 77 68 6f 73  et an event whos
3e5a0 65 20 74 69 6d 65 20 61 6e 64 20 64 75 72 61 74  e time and durat
3e5b0 69 6f 6e 20 73 70 61 6e 20 74 68 65 20 67 69 76  ion span the giv
3e5c0 65 20 74 69 6d 65 2e 20 57 69 6c 6c 0a 09 09 20  e time. Will... 
3e5d0 2a 20 20 72 65 74 75 72 6e 20 74 68 65 20 6d 61  *  return the ma
3e5e0 74 63 68 20 77 68 6f 73 65 20 22 74 69 6d 65 22  tch whose "time"
3e5f0 20 76 61 6c 75 65 20 69 73 20 63 6c 6f 73 65 73   value is closes
3e600 74 20 74 6f 20 74 68 65 20 67 69 76 65 6e 20 74  t to the given t
3e610 69 6d 65 2e 0a 09 09 20 2a 20 20 40 70 61 72 61  ime.... *  @para
3e620 6d 20 20 7b 4f 62 6a 65 63 74 7d 20 20 65 76 65  m  {Object}  eve
3e630 6e 74 20 20 54 68 65 20 65 76 65 6e 74 20 74 6f  nt  The event to
3e640 20 61 64 64 20 74 6f 20 74 68 65 20 74 69 6d 65   add to the time
3e650 6c 69 6e 65 0a 09 09 20 2a 20 20 40 72 65 74 75  line... *  @retu
3e660 72 6e 20 20 7b 4f 62 6a 65 63 74 7d 20 20 54 68  rn  {Object}  Th
3e670 65 20 65 76 65 6e 74 20 77 68 69 63 68 20 73 70  e event which sp
3e680 61 6e 73 20 74 68 65 20 64 65 73 69 72 65 64 20  ans the desired 
3e690 74 69 6d 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20  time... */..    
3e6a0 54 6f 6e 65 2e 49 6e 74 65 72 76 61 6c 54 69 6d  Tone.IntervalTim
3e6b0 65 6c 69 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e  eline.prototype.
3e6c0 67 65 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  get = function (
3e6d0 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20 20  time) {..       
3e6e0 20 69 66 20 28 74 68 69 73 2e 5f 72 6f 6f 74 20   if (this._root 
3e6f0 21 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 09 20 20 20  !== null) {..   
3e700 20 20 20 20 20 20 20 20 20 76 61 72 20 72 65 73           var res
3e710 75 6c 74 73 20 3d 20 5b 5d 3b 0a 09 20 20 20 20  ults = [];..    
3e720 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 72 6f          this._ro
3e730 6f 74 2e 73 65 61 72 63 68 28 74 69 6d 65 2c 20  ot.search(time, 
3e740 72 65 73 75 6c 74 73 29 3b 0a 09 20 20 20 20 20  results);..     
3e750 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c         if (resul
3e760 74 73 2e 6c 65 6e 67 74 68 20 3e 20 30 29 20 7b  ts.length > 0) {
3e770 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3e780 20 20 76 61 72 20 6d 61 78 20 3d 20 72 65 73 75    var max = resu
3e790 6c 74 73 5b 30 5d 3b 0a 09 20 20 20 20 20 20 20  lts[0];..       
3e7a0 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 76 61           for (va
3e7b0 72 20 69 20 3d 20 31 3b 20 69 20 3c 20 72 65 73  r i = 1; i < res
3e7c0 75 6c 74 73 2e 6c 65 6e 67 74 68 3b 20 69 2b 2b  ults.length; i++
3e7d0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
3e7e0 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73           if (res
3e7f0 75 6c 74 73 5b 69 5d 2e 6c 6f 77 20 3e 20 6d 61  ults[i].low > ma
3e800 78 2e 6c 6f 77 29 20 7b 0a 09 20 20 20 20 20 20  x.low) {..      
3e810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e820 20 20 6d 61 78 20 3d 20 72 65 73 75 6c 74 73 5b    max = results[
3e830 69 5d 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  i];..           
3e840 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20           }..    
3e850 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20              }.. 
3e860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
3e870 65 74 75 72 6e 20 6d 61 78 2e 65 76 65 6e 74 3b  eturn max.event;
3e880 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ..            }.
3e890 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
3e8a0 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
3e8b0 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
3e8c0 2a 0a 09 09 20 2a 20 20 49 74 65 72 61 74 65 20  *... *  Iterate 
3e8d0 6f 76 65 72 20 65 76 65 72 79 74 68 69 6e 67 20  over everything 
3e8e0 69 6e 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 2e  in the timeline.
3e8f0 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b  ... *  @param  {
3e900 46 75 6e 63 74 69 6f 6e 7d 20 20 63 61 6c 6c 62  Function}  callb
3e910 61 63 6b 20 54 68 65 20 63 61 6c 6c 62 61 63 6b  ack The callback
3e920 20 74 6f 20 69 6e 76 6f 6b 65 20 77 69 74 68 20   to invoke with 
3e930 65 76 65 72 79 20 69 74 65 6d 0a 09 09 20 2a 20  every item... * 
3e940 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e   @returns {Tone.
3e950 49 6e 74 65 72 76 61 6c 54 69 6d 65 6c 69 6e 65  IntervalTimeline
3e960 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20  } this... */..  
3e970 20 20 54 6f 6e 65 2e 49 6e 74 65 72 76 61 6c 54    Tone.IntervalT
3e980 69 6d 65 6c 69 6e 65 2e 70 72 6f 74 6f 74 79 70  imeline.prototyp
3e990 65 2e 66 6f 72 45 61 63 68 20 3d 20 66 75 6e 63  e.forEach = func
3e9a0 74 69 6f 6e 20 28 63 61 6c 6c 62 61 63 6b 29 20  tion (callback) 
3e9b0 7b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 74  {..        if (t
3e9c0 68 69 73 2e 5f 72 6f 6f 74 20 21 3d 3d 20 6e 75  his._root !== nu
3e9d0 6c 6c 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ll) {..         
3e9e0 20 20 20 76 61 72 20 61 6c 6c 4e 6f 64 65 73 20     var allNodes 
3e9f0 3d 20 5b 5d 3b 0a 09 20 20 20 20 20 20 20 20 20  = [];..         
3ea00 20 20 20 69 66 20 28 74 68 69 73 2e 5f 72 6f 6f     if (this._roo
3ea10 74 20 21 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 09 20  t !== null) {.. 
3ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
3ea30 68 69 73 2e 5f 72 6f 6f 74 2e 74 72 61 76 65 72  his._root.traver
3ea40 73 65 28 66 75 6e 63 74 69 6f 6e 20 28 6e 6f 64  se(function (nod
3ea50 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  e) {..          
3ea60 20 20 20 20 20 20 20 20 20 20 61 6c 6c 4e 6f 64            allNod
3ea70 65 73 2e 70 75 73 68 28 6e 6f 64 65 29 3b 0a 09  es.push(node);..
3ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ea90 7d 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  });..           
3eaa0 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   }..            
3eab0 66 6f 72 20 28 76 61 72 20 69 20 3d 20 30 3b 20  for (var i = 0; 
3eac0 69 20 3c 20 61 6c 6c 4e 6f 64 65 73 2e 6c 65 6e  i < allNodes.len
3ead0 67 74 68 3b 20 69 2b 2b 29 20 7b 0a 09 20 20 20  gth; i++) {..   
3eae0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72               var
3eaf0 20 65 76 20 3d 20 61 6c 6c 4e 6f 64 65 73 5b 69   ev = allNodes[i
3eb00 5d 2e 65 76 65 6e 74 3b 0a 09 20 20 20 20 20 20  ].event;..      
3eb10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 76            if (ev
3eb20 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
3eb30 20 20 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63           callbac
3eb40 6b 28 65 76 29 3b 0a 09 20 20 20 20 20 20 20 20  k(ev);..        
3eb50 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
3eb60 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
3eb70 20 20 7d 0a 09 20 20 20 20 20 20 20 20 72 65 74    }..        ret
3eb80 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
3eb90 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
3eba0 20 49 74 65 72 61 74 65 20 6f 76 65 72 20 65 76   Iterate over ev
3ebb0 65 72 79 74 68 69 6e 67 20 69 6e 20 74 68 65 20  erything in the 
3ebc0 61 72 72 61 79 20 69 6e 20 77 68 69 63 68 20 74  array in which t
3ebd0 68 65 20 67 69 76 65 6e 20 74 69 6d 65 0a 09 09  he given time...
3ebe0 20 2a 20 20 6f 76 65 72 6c 61 70 73 20 77 69 74   *  overlaps wit
3ebf0 68 20 74 68 65 20 74 69 6d 65 20 61 6e 64 20 64  h the time and d
3ec00 75 72 61 74 69 6f 6e 20 74 69 6d 65 20 6f 66 20  uration time of 
3ec10 74 68 65 20 65 76 65 6e 74 2e 0a 09 09 20 2a 20  the event.... * 
3ec20 20 40 70 61 72 61 6d 20 20 7b 4e 75 6d 62 65 72   @param  {Number
3ec30 7d 20 20 74 69 6d 65 20 54 68 65 20 74 69 6d 65  }  time The time
3ec40 20 74 6f 20 63 68 65 63 6b 20 69 66 20 69 74 65   to check if ite
3ec50 6d 73 20 61 72 65 20 6f 76 65 72 6c 61 70 70 69  ms are overlappi
3ec60 6e 67 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  ng... *  @param 
3ec70 20 7b 46 75 6e 63 74 69 6f 6e 7d 20 20 63 61 6c   {Function}  cal
3ec80 6c 62 61 63 6b 20 54 68 65 20 63 61 6c 6c 62 61  lback The callba
3ec90 63 6b 20 74 6f 20 69 6e 76 6f 6b 65 20 77 69 74  ck to invoke wit
3eca0 68 20 65 76 65 72 79 20 69 74 65 6d 0a 09 09 20  h every item... 
3ecb0 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e  *  @returns {Ton
3ecc0 65 2e 49 6e 74 65 72 76 61 6c 54 69 6d 65 6c 69  e.IntervalTimeli
3ecd0 6e 65 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09  ne} this... */..
3ece0 20 20 20 20 54 6f 6e 65 2e 49 6e 74 65 72 76 61      Tone.Interva
3ecf0 6c 54 69 6d 65 6c 69 6e 65 2e 70 72 6f 74 6f 74  lTimeline.protot
3ed00 79 70 65 2e 66 6f 72 45 61 63 68 41 74 54 69 6d  ype.forEachAtTim
3ed10 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74 69  e = function (ti
3ed20 6d 65 2c 20 63 61 6c 6c 62 61 63 6b 29 20 7b 0a  me, callback) {.
3ed30 09 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69  .        if (thi
3ed40 73 2e 5f 72 6f 6f 74 20 21 3d 3d 20 6e 75 6c 6c  s._root !== null
3ed50 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
3ed60 20 76 61 72 20 72 65 73 75 6c 74 73 20 3d 20 5b   var results = [
3ed70 5d 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
3ed80 74 68 69 73 2e 5f 72 6f 6f 74 2e 73 65 61 72 63  this._root.searc
3ed90 68 28 74 69 6d 65 2c 20 72 65 73 75 6c 74 73 29  h(time, results)
3eda0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 66  ;..            f
3edb0 6f 72 20 28 76 61 72 20 69 20 3d 20 72 65 73 75  or (var i = resu
3edc0 6c 74 73 2e 6c 65 6e 67 74 68 20 2d 20 31 3b 20  lts.length - 1; 
3edd0 69 20 3e 3d 20 30 3b 20 69 2d 2d 29 20 7b 0a 09  i >= 0; i--) {..
3ede0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3edf0 76 61 72 20 65 76 20 3d 20 72 65 73 75 6c 74 73  var ev = results
3ee00 5b 69 5d 2e 65 76 65 6e 74 3b 0a 09 20 20 20 20  [i].event;..    
3ee10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3ee20 65 76 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ev) {..         
3ee30 20 20 20 20 20 20 20 20 20 20 20 63 61 6c 6c 62             callb
3ee40 61 63 6b 28 65 76 29 3b 0a 09 20 20 20 20 20 20  ack(ev);..      
3ee50 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20            }..   
3ee60 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20           }..    
3ee70 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 72      }..        r
3ee80 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20  eturn this;..   
3ee90 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20   };..    /**... 
3eea0 2a 20 20 49 74 65 72 61 74 65 20 6f 76 65 72 20  *  Iterate over 
3eeb0 65 76 65 72 79 74 68 69 6e 67 20 69 6e 20 74 68  everything in th
3eec0 65 20 61 72 72 61 79 20 69 6e 20 77 68 69 63 68  e array in which
3eed0 20 74 68 65 20 74 69 6d 65 20 69 73 20 67 72 65   the time is gre
3eee0 61 74 65 72 0a 09 09 20 2a 20 20 74 68 61 6e 20  ater... *  than 
3eef0 74 68 65 20 67 69 76 65 6e 20 74 69 6d 65 2e 0a  the given time..
3ef00 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 4e  .. *  @param  {N
3ef10 75 6d 62 65 72 7d 20 20 74 69 6d 65 20 54 68 65  umber}  time The
3ef20 20 74 69 6d 65 20 74 6f 20 63 68 65 63 6b 20 69   time to check i
3ef30 66 20 69 74 65 6d 73 20 61 72 65 20 62 65 66 6f  f items are befo
3ef40 72 65 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  re... *  @param 
3ef50 20 7b 46 75 6e 63 74 69 6f 6e 7d 20 20 63 61 6c   {Function}  cal
3ef60 6c 62 61 63 6b 20 54 68 65 20 63 61 6c 6c 62 61  lback The callba
3ef70 63 6b 20 74 6f 20 69 6e 76 6f 6b 65 20 77 69 74  ck to invoke wit
3ef80 68 20 65 76 65 72 79 20 69 74 65 6d 0a 09 09 20  h every item... 
3ef90 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e  *  @returns {Ton
3efa0 65 2e 49 6e 74 65 72 76 61 6c 54 69 6d 65 6c 69  e.IntervalTimeli
3efb0 6e 65 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09  ne} this... */..
3efc0 20 20 20 20 54 6f 6e 65 2e 49 6e 74 65 72 76 61      Tone.Interva
3efd0 6c 54 69 6d 65 6c 69 6e 65 2e 70 72 6f 74 6f 74  lTimeline.protot
3efe0 79 70 65 2e 66 6f 72 45 61 63 68 41 66 74 65 72  ype.forEachAfter
3eff0 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d   = function (tim
3f000 65 2c 20 63 61 6c 6c 62 61 63 6b 29 20 7b 0a 09  e, callback) {..
3f010 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73          if (this
3f020 2e 5f 72 6f 6f 74 20 21 3d 3d 20 6e 75 6c 6c 29  ._root !== null)
3f030 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3f040 76 61 72 20 72 65 73 75 6c 74 73 20 3d 20 5b 5d  var results = []
3f050 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  ;..            t
3f060 68 69 73 2e 5f 72 6f 6f 74 2e 73 65 61 72 63 68  his._root.search
3f070 41 66 74 65 72 28 74 69 6d 65 2c 20 72 65 73 75  After(time, resu
3f080 6c 74 73 29 3b 0a 09 20 20 20 20 20 20 20 20 20  lts);..         
3f090 20 20 20 66 6f 72 20 28 76 61 72 20 69 20 3d 20     for (var i = 
3f0a0 72 65 73 75 6c 74 73 2e 6c 65 6e 67 74 68 20 2d  results.length -
3f0b0 20 31 3b 20 69 20 3e 3d 20 30 3b 20 69 2d 2d 29   1; i >= 0; i--)
3f0c0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3f0d0 20 20 20 20 76 61 72 20 65 76 20 3d 20 72 65 73      var ev = res
3f0e0 75 6c 74 73 5b 69 5d 2e 65 76 65 6e 74 3b 0a 09  ults[i].event;..
3f0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f100 69 66 20 28 65 76 29 20 7b 0a 09 20 20 20 20 20  if (ev) {..     
3f110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
3f120 61 6c 6c 62 61 63 6b 28 65 76 29 3b 0a 09 20 20  allback(ev);..  
3f130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
3f140 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09  .            }..
3f150 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
3f160 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a     return this;.
3f170 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
3f180 0a 09 09 20 2a 20 20 43 6c 65 61 6e 20 75 70 0a  ... *  Clean up.
3f190 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b  .. *  @return  {
3f1a0 54 6f 6e 65 2e 49 6e 74 65 72 76 61 6c 54 69 6d  Tone.IntervalTim
3f1b0 65 6c 69 6e 65 7d 20 20 74 68 69 73 0a 09 09 20  eline}  this... 
3f1c0 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 49 6e 74  */..    Tone.Int
3f1d0 65 72 76 61 6c 54 69 6d 65 6c 69 6e 65 2e 70 72  ervalTimeline.pr
3f1e0 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20  ototype.dispose 
3f1f0 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  = function () {.
3f200 09 20 20 20 20 20 20 20 20 76 61 72 20 61 6c 6c  .        var all
3f210 4e 6f 64 65 73 20 3d 20 5b 5d 3b 0a 09 20 20 20  Nodes = [];..   
3f220 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 5f 72       if (this._r
3f230 6f 6f 74 20 21 3d 3d 20 6e 75 6c 6c 29 20 7b 0a  oot !== null) {.
3f240 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
3f250 73 2e 5f 72 6f 6f 74 2e 74 72 61 76 65 72 73 65  s._root.traverse
3f260 28 66 75 6e 63 74 69 6f 6e 20 28 6e 6f 64 65 29  (function (node)
3f270 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3f280 20 20 20 20 61 6c 6c 4e 6f 64 65 73 2e 70 75 73      allNodes.pus
3f290 68 28 6e 6f 64 65 29 3b 0a 09 20 20 20 20 20 20  h(node);..      
3f2a0 20 20 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 20        });..     
3f2b0 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 66 6f     }..        fo
3f2c0 72 20 28 76 61 72 20 69 20 3d 20 30 3b 20 69 20  r (var i = 0; i 
3f2d0 3c 20 61 6c 6c 4e 6f 64 65 73 2e 6c 65 6e 67 74  < allNodes.lengt
3f2e0 68 3b 20 69 2b 2b 29 20 7b 0a 09 20 20 20 20 20  h; i++) {..     
3f2f0 20 20 20 20 20 20 20 61 6c 6c 4e 6f 64 65 73 5b         allNodes[
3f300 69 5d 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20  i].dispose();.. 
3f310 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
3f320 20 20 61 6c 6c 4e 6f 64 65 73 20 3d 20 6e 75 6c    allNodes = nul
3f330 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  l;..        this
3f340 2e 5f 72 6f 6f 74 20 3d 20 6e 75 6c 6c 3b 0a 09  ._root = null;..
3f350 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
3f360 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  his;..    };..  
3f370 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
3f380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20  /////////////.. 
3f3c0 20 20 20 2f 2f 09 49 4e 54 45 52 56 41 4c 20 4e     //.INTERVAL N
3f3d0 4f 44 45 20 48 45 4c 50 45 52 0a 09 20 20 20 20  ODE HELPER..    
3f3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20  ///////////..   
3f430 20 2f 2a 2a 0a 09 09 20 2a 20 20 52 65 70 72 65   /**... *  Repre
3f440 73 65 6e 74 73 20 61 20 6e 6f 64 65 20 69 6e 20  sents a node in 
3f450 74 68 65 20 62 69 6e 61 72 79 20 73 65 61 72 63  the binary searc
3f460 68 20 74 72 65 65 2c 20 77 69 74 68 20 74 68 65  h tree, with the
3f470 20 61 64 64 69 74 69 6f 6e 0a 09 09 20 2a 20 20   addition... *  
3f480 6f 66 20 61 20 22 68 69 67 68 22 20 76 61 6c 75  of a "high" valu
3f490 65 20 77 68 69 63 68 20 6b 65 65 70 73 20 74 72  e which keeps tr
3f4a0 61 63 6b 20 6f 66 20 74 68 65 20 68 69 67 68 65  ack of the highe
3f4b0 73 74 20 76 61 6c 75 65 20 6f 66 0a 09 09 20 2a  st value of... *
3f4c0 20 20 69 74 73 20 63 68 69 6c 64 72 65 6e 2e 20    its children. 
3f4d0 0a 09 09 20 2a 20 20 52 65 66 65 72 65 6e 63 65  ... *  Reference
3f4e0 73 3a 20 0a 09 09 20 2a 20 20 68 74 74 70 73 3a  s: ... *  https:
3f4f0 2f 2f 62 72 6f 6f 6b 6e 6f 76 61 6b 2e 77 6f 72  //brooknovak.wor
3f500 64 70 72 65 73 73 2e 63 6f 6d 2f 32 30 31 33 2f  dpress.com/2013/
3f510 31 32 2f 30 37 2f 61 75 67 6d 65 6e 74 65 64 2d  12/07/augmented-
3f520 69 6e 74 65 72 76 61 6c 2d 74 72 65 65 2d 69 6e  interval-tree-in
3f530 2d 63 2f 0a 09 09 20 2a 20 20 68 74 74 70 3a 2f  -c/... *  http:/
3f540 2f 77 77 77 2e 6d 69 66 2e 76 75 2e 6c 74 2f 7e  /www.mif.vu.lt/~
3f550 76 61 6c 64 61 73 2f 41 4c 47 4f 52 49 54 4d 41  valdas/ALGORITMA
3f560 49 2f 4c 49 54 45 52 41 54 55 52 41 2f 43 6f 72  I/LITERATURA/Cor
3f570 6d 65 6e 2f 43 6f 72 6d 65 6e 2e 70 64 66 0a 09  men/Cormen.pdf..
3f580 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 4e 75 6d  . *  @param {Num
3f590 62 65 72 7d 20 6c 6f 77 0a 09 09 20 2a 20 20 40  ber} low... *  @
3f5a0 70 61 72 61 6d 20 7b 4e 75 6d 62 65 72 7d 20 68  param {Number} h
3f5b0 69 67 68 0a 09 09 20 2a 20 20 40 70 72 69 76 61  igh... *  @priva
3f5c0 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 76 61  te... */..    va
3f5d0 72 20 49 6e 74 65 72 76 61 6c 4e 6f 64 65 20 3d  r IntervalNode =
3f5e0 20 66 75 6e 63 74 69 6f 6e 20 28 6c 6f 77 2c 20   function (low, 
3f5f0 68 69 67 68 2c 20 65 76 65 6e 74 29 20 7b 0a 09  high, event) {..
3f600 20 20 20 20 20 20 20 20 2f 2f 74 68 65 20 65 76          //the ev
3f610 65 6e 74 20 63 6f 6e 74 61 69 6e 65 72 0a 09 20  ent container.. 
3f620 20 20 20 20 20 20 20 74 68 69 73 2e 65 76 65 6e         this.even
3f630 74 20 3d 20 65 76 65 6e 74 3b 0a 09 20 20 20 20  t = event;..    
3f640 20 20 20 20 2f 2f 74 68 65 20 6c 6f 77 20 76 61      //the low va
3f650 6c 75 65 0a 09 20 20 20 20 20 20 20 20 74 68 69  lue..        thi
3f660 73 2e 6c 6f 77 20 3d 20 6c 6f 77 3b 0a 09 20 20  s.low = low;..  
3f670 20 20 20 20 20 20 2f 2f 74 68 65 20 68 69 67 68        //the high
3f680 20 76 61 6c 75 65 0a 09 20 20 20 20 20 20 20 20   value..        
3f690 74 68 69 73 2e 68 69 67 68 20 3d 20 68 69 67 68  this.high = high
3f6a0 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 74 68 65  ;..        //the
3f6b0 20 68 69 67 68 20 76 61 6c 75 65 20 66 6f 72 20   high value for 
3f6c0 74 68 69 73 20 61 6e 64 20 61 6c 6c 20 63 68 69  this and all chi
3f6d0 6c 64 20 6e 6f 64 65 73 0a 09 20 20 20 20 20 20  ld nodes..      
3f6e0 20 20 74 68 69 73 2e 6d 61 78 20 3d 20 74 68 69    this.max = thi
3f6f0 73 2e 68 69 67 68 3b 0a 09 20 20 20 20 20 20 20  s.high;..       
3f700 20 2f 2f 74 68 65 20 6e 6f 64 65 73 20 74 6f 20   //the nodes to 
3f710 74 68 65 20 6c 65 66 74 0a 09 20 20 20 20 20 20  the left..      
3f720 20 20 74 68 69 73 2e 5f 6c 65 66 74 20 3d 20 6e    this._left = n
3f730 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f  ull;..        //
3f740 74 68 65 20 6e 6f 64 65 73 20 74 6f 20 74 68 65  the nodes to the
3f750 20 72 69 67 68 74 0a 09 20 20 20 20 20 20 20 20   right..        
3f760 74 68 69 73 2e 5f 72 69 67 68 74 20 3d 20 6e 75  this._right = nu
3f770 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 74  ll;..        //t
3f780 68 65 20 70 61 72 65 6e 74 20 6e 6f 64 65 0a 09  he parent node..
3f790 20 20 20 20 20 20 20 20 74 68 69 73 2e 70 61 72          this.par
3f7a0 65 6e 74 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  ent = null;..   
3f7b0 20 20 20 20 20 2f 2f 74 68 65 20 6e 75 6d 62 65       //the numbe
3f7c0 72 20 6f 66 20 63 68 69 6c 64 20 6e 6f 64 65 73  r of child nodes
3f7d0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 68  ..        this.h
3f7e0 65 69 67 68 74 20 3d 20 30 3b 0a 09 20 20 20 20  eight = 0;..    
3f7f0 7d 3b 0a 09 20 20 20 20 2f 2a 2a 20 0a 09 09 20  };..    /** ... 
3f800 2a 20 20 49 6e 73 65 72 74 20 61 20 6e 6f 64 65  *  Insert a node
3f810 20 69 6e 74 6f 20 74 68 65 20 63 6f 72 72 65 63   into the correc
3f820 74 20 73 70 6f 74 20 69 6e 20 74 68 65 20 74 72  t spot in the tr
3f830 65 65 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  ee... *  @param 
3f840 20 7b 49 6e 74 65 72 76 61 6c 4e 6f 64 65 7d 20   {IntervalNode} 
3f850 20 6e 6f 64 65 0a 09 09 20 2a 2f 0a 09 20 20 20   node... */..   
3f860 20 49 6e 74 65 72 76 61 6c 4e 6f 64 65 2e 70 72   IntervalNode.pr
3f870 6f 74 6f 74 79 70 65 2e 69 6e 73 65 72 74 20 3d  ototype.insert =
3f880 20 66 75 6e 63 74 69 6f 6e 20 28 6e 6f 64 65 29   function (node)
3f890 20 7b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
3f8a0 6e 6f 64 65 2e 6c 6f 77 20 3c 3d 20 74 68 69 73  node.low <= this
3f8b0 2e 6c 6f 77 29 20 7b 0a 09 20 20 20 20 20 20 20  .low) {..       
3f8c0 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 6c 65       if (this.le
3f8d0 66 74 20 3d 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 09  ft === null) {..
3f8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f8f0 74 68 69 73 2e 6c 65 66 74 20 3d 20 6e 6f 64 65  this.left = node
3f900 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
3f910 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20   else {..       
3f920 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c 65           this.le
3f930 66 74 2e 69 6e 73 65 72 74 28 6e 6f 64 65 29 3b  ft.insert(node);
3f940 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ..            }.
3f950 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else 
3f960 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
3f970 66 20 28 74 68 69 73 2e 72 69 67 68 74 20 3d 3d  f (this.right ==
3f980 3d 20 6e 75 6c 6c 29 20 7b 0a 09 20 20 20 20 20  = null) {..     
3f990 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
3f9a0 72 69 67 68 74 20 3d 20 6e 6f 64 65 3b 0a 09 20  right = node;.. 
3f9b0 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
3f9c0 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e {..           
3f9d0 20 20 20 20 20 74 68 69 73 2e 72 69 67 68 74 2e       this.right.
3f9e0 69 6e 73 65 72 74 28 6e 6f 64 65 29 3b 0a 09 20  insert(node);.. 
3f9f0 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20             }..  
3fa00 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a        }..    };.
3fa10 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 53  .    /**... *  S
3fa20 65 61 72 63 68 20 74 68 65 20 74 72 65 65 20 66  earch the tree f
3fa30 6f 72 20 6e 6f 64 65 73 20 77 68 69 63 68 20 6f  or nodes which o
3fa40 76 65 72 6c 61 70 20 0a 09 09 20 2a 20 20 77 69  verlap ... *  wi
3fa50 74 68 20 74 68 65 20 67 69 76 65 6e 20 70 6f 69  th the given poi
3fa60 6e 74 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  nt... *  @param 
3fa70 20 7b 4e 75 6d 62 65 72 7d 20 20 70 6f 69 6e 74   {Number}  point
3fa80 20 20 54 68 65 20 70 6f 69 6e 74 20 74 6f 20 71    The point to q
3fa90 75 65 72 79 0a 09 09 20 2a 20 20 40 70 61 72 61  uery... *  @para
3faa0 6d 20 20 7b 41 72 72 61 79 7d 20 20 72 65 73 75  m  {Array}  resu
3fab0 6c 74 73 20 20 54 68 65 20 61 72 72 61 79 20 74  lts  The array t
3fac0 6f 20 70 75 74 20 74 68 65 20 72 65 73 75 6c 74  o put the result
3fad0 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 49 6e 74  s... */..    Int
3fae0 65 72 76 61 6c 4e 6f 64 65 2e 70 72 6f 74 6f 74  ervalNode.protot
3faf0 79 70 65 2e 73 65 61 72 63 68 20 3d 20 66 75 6e  ype.search = fun
3fb00 63 74 69 6f 6e 20 28 70 6f 69 6e 74 2c 20 72 65  ction (point, re
3fb10 73 75 6c 74 73 29 20 7b 0a 09 20 20 20 20 20 20  sults) {..      
3fb20 20 20 2f 2f 20 49 66 20 70 20 69 73 20 74 6f 20    // If p is to 
3fb30 74 68 65 20 72 69 67 68 74 20 6f 66 20 74 68 65  the right of the
3fb40 20 72 69 67 68 74 6d 6f 73 74 20 70 6f 69 6e 74   rightmost point
3fb50 20 6f 66 20 61 6e 79 20 69 6e 74 65 72 76 61 6c   of any interval
3fb60 0a 09 20 20 20 20 20 20 20 20 2f 2f 20 69 6e 20  ..        // in 
3fb70 74 68 69 73 20 6e 6f 64 65 20 61 6e 64 20 61 6c  this node and al
3fb80 6c 20 63 68 69 6c 64 72 65 6e 2c 20 74 68 65 72  l children, ther
3fb90 65 20 77 6f 6e 27 74 20 62 65 20 61 6e 79 20 6d  e won't be any m
3fba0 61 74 63 68 65 73 2e 0a 09 20 20 20 20 20 20 20  atches...       
3fbb0 20 69 66 20 28 70 6f 69 6e 74 20 3e 20 74 68 69   if (point > thi
3fbc0 73 2e 6d 61 78 29 20 7b 0a 09 20 20 20 20 20 20  s.max) {..      
3fbd0 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 09 20        return;.. 
3fbe0 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
3fbf0 20 20 2f 2f 20 53 65 61 72 63 68 20 6c 65 66 74    // Search left
3fc00 20 63 68 69 6c 64 72 65 6e 0a 09 20 20 20 20 20   children..     
3fc10 20 20 20 69 66 20 28 74 68 69 73 2e 6c 65 66 74     if (this.left
3fc20 20 21 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 09 20 20   !== null) {..  
3fc30 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c            this.l
3fc40 65 66 74 2e 73 65 61 72 63 68 28 70 6f 69 6e 74  eft.search(point
3fc50 2c 20 72 65 73 75 6c 74 73 29 3b 0a 09 20 20 20  , results);..   
3fc60 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
3fc70 2f 2f 20 43 68 65 63 6b 20 74 68 69 73 20 6e 6f  // Check this no
3fc80 64 65 0a 09 20 20 20 20 20 20 20 20 69 66 20 28  de..        if (
3fc90 74 68 69 73 2e 6c 6f 77 20 3c 3d 20 70 6f 69 6e  this.low <= poin
3fca0 74 20 26 26 20 74 68 69 73 2e 68 69 67 68 20 3e  t && this.high >
3fcb0 20 70 6f 69 6e 74 29 20 7b 0a 09 20 20 20 20 20   point) {..     
3fcc0 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e 70         results.p
3fcd0 75 73 68 28 74 68 69 73 29 3b 0a 09 20 20 20 20  ush(this);..    
3fce0 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 2f      }..        /
3fcf0 2f 20 49 66 20 70 20 69 73 20 74 6f 20 74 68 65  / If p is to the
3fd00 20 6c 65 66 74 20 6f 66 20 74 68 65 20 74 69 6d   left of the tim
3fd10 65 20 6f 66 20 74 68 69 73 20 69 6e 74 65 72 76  e of this interv
3fd20 61 6c 2c 0a 09 20 20 20 20 20 20 20 20 2f 2f 20  al,..        // 
3fd30 74 68 65 6e 20 69 74 20 63 61 6e 27 74 20 62 65  then it can't be
3fd40 20 69 6e 20 61 6e 79 20 63 68 69 6c 64 20 74 6f   in any child to
3fd50 20 74 68 65 20 72 69 67 68 74 2e 0a 09 20 20 20   the right...   
3fd60 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 6c 6f       if (this.lo
3fd70 77 20 3e 20 70 6f 69 6e 74 29 20 7b 0a 09 20 20  w > point) {..  
3fd80 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3fd90 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20  ;..        }..  
3fda0 20 20 20 20 20 20 2f 2f 20 53 65 61 72 63 68 20        // Search 
3fdb0 72 69 67 68 74 20 63 68 69 6c 64 72 65 6e 0a 09  right children..
3fdc0 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73          if (this
3fdd0 2e 72 69 67 68 74 20 21 3d 3d 20 6e 75 6c 6c 29  .right !== null)
3fde0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3fdf0 74 68 69 73 2e 72 69 67 68 74 2e 73 65 61 72 63  this.right.searc
3fe00 68 28 70 6f 69 6e 74 2c 20 72 65 73 75 6c 74 73  h(point, results
3fe10 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  );..        }.. 
3fe20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09     };..    /**..
3fe30 09 20 2a 20 20 53 65 61 72 63 68 20 74 68 65 20  . *  Search the 
3fe40 74 72 65 65 20 66 6f 72 20 6e 6f 64 65 73 20 77  tree for nodes w
3fe50 68 69 63 68 20 61 72 65 20 6c 65 73 73 20 0a 09  hich are less ..
3fe60 09 20 2a 20 20 74 68 61 6e 20 74 68 65 20 67 69  . *  than the gi
3fe70 76 65 6e 20 70 6f 69 6e 74 0a 09 09 20 2a 20 20  ven point... *  
3fe80 40 70 61 72 61 6d 20 20 7b 4e 75 6d 62 65 72 7d  @param  {Number}
3fe90 20 20 70 6f 69 6e 74 20 20 54 68 65 20 70 6f 69    point  The poi
3fea0 6e 74 20 74 6f 20 71 75 65 72 79 0a 09 09 20 2a  nt to query... *
3feb0 20 20 40 70 61 72 61 6d 20 20 7b 41 72 72 61 79    @param  {Array
3fec0 7d 20 20 72 65 73 75 6c 74 73 20 20 54 68 65 20  }  results  The 
3fed0 61 72 72 61 79 20 74 6f 20 70 75 74 20 74 68 65  array to put the
3fee0 20 72 65 73 75 6c 74 73 0a 09 09 20 2a 2f 0a 09   results... */..
3fef0 20 20 20 20 49 6e 74 65 72 76 61 6c 4e 6f 64 65      IntervalNode
3ff00 2e 70 72 6f 74 6f 74 79 70 65 2e 73 65 61 72 63  .prototype.searc
3ff10 68 41 66 74 65 72 20 3d 20 66 75 6e 63 74 69 6f  hAfter = functio
3ff20 6e 20 28 70 6f 69 6e 74 2c 20 72 65 73 75 6c 74  n (point, result
3ff30 73 29 20 7b 0a 09 20 20 20 20 20 20 20 20 2f 2f  s) {..        //
3ff40 20 43 68 65 63 6b 20 74 68 69 73 20 6e 6f 64 65   Check this node
3ff50 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 74 68  ..        if (th
3ff60 69 73 2e 6c 6f 77 20 3e 3d 20 70 6f 69 6e 74 29  is.low >= point)
3ff70 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3ff80 72 65 73 75 6c 74 73 2e 70 75 73 68 28 74 68 69  results.push(thi
3ff90 73 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  s);..           
3ffa0 20 69 66 20 28 74 68 69 73 2e 6c 65 66 74 20 21   if (this.left !
3ffb0 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 09 20 20 20 20  == null) {..    
3ffc0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
3ffd0 2e 6c 65 66 74 2e 73 65 61 72 63 68 41 66 74 65  .left.searchAfte
3ffe0 72 28 70 6f 69 6e 74 2c 20 72 65 73 75 6c 74 73  r(point, results
3fff0 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
40000 7d 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20  }..        }..  
40010 20 20 20 20 20 20 2f 2f 20 73 65 61 72 63 68 20        // search 
40020 74 68 65 20 72 69 67 68 74 20 73 69 64 65 0a 09  the right side..
40030 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73          if (this
40040 2e 72 69 67 68 74 20 21 3d 3d 20 6e 75 6c 6c 29  .right !== null)
40050 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
40060 74 68 69 73 2e 72 69 67 68 74 2e 73 65 61 72 63  this.right.searc
40070 68 41 66 74 65 72 28 70 6f 69 6e 74 2c 20 72 65  hAfter(point, re
40080 73 75 6c 74 73 29 3b 0a 09 20 20 20 20 20 20 20  sults);..       
40090 20 7d 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20   }..    };..    
400a0 2f 2a 2a 0a 09 09 20 2a 20 20 49 6e 76 6f 6b 65  /**... *  Invoke
400b0 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e   the callback on
400c0 20 74 68 69 73 20 65 6c 65 6d 65 6e 74 20 61 6e   this element an
400d0 64 20 62 6f 74 68 20 69 74 27 73 20 62 72 61 6e  d both it's bran
400e0 63 68 65 73 0a 09 09 20 2a 20 20 40 70 61 72 61  ches... *  @para
400f0 6d 20 20 7b 46 75 6e 63 74 69 6f 6e 7d 20 20 63  m  {Function}  c
40100 61 6c 6c 62 61 63 6b 0a 09 09 20 2a 2f 0a 09 20  allback... */.. 
40110 20 20 20 49 6e 74 65 72 76 61 6c 4e 6f 64 65 2e     IntervalNode.
40120 70 72 6f 74 6f 74 79 70 65 2e 74 72 61 76 65 72  prototype.traver
40130 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 63  se = function (c
40140 61 6c 6c 62 61 63 6b 29 20 7b 0a 09 20 20 20 20  allback) {..    
40150 20 20 20 20 63 61 6c 6c 62 61 63 6b 28 74 68 69      callback(thi
40160 73 29 3b 0a 09 20 20 20 20 20 20 20 20 69 66 20  s);..        if 
40170 28 74 68 69 73 2e 6c 65 66 74 20 21 3d 3d 20 6e  (this.left !== n
40180 75 6c 6c 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ull) {..        
40190 20 20 20 20 74 68 69 73 2e 6c 65 66 74 2e 74 72      this.left.tr
401a0 61 76 65 72 73 65 28 63 61 6c 6c 62 61 63 6b 29  averse(callback)
401b0 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20  ;..        }..  
401c0 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 72        if (this.r
401d0 69 67 68 74 20 21 3d 3d 20 6e 75 6c 6c 29 20 7b  ight !== null) {
401e0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
401f0 69 73 2e 72 69 67 68 74 2e 74 72 61 76 65 72 73  is.right.travers
40200 65 28 63 61 6c 6c 62 61 63 6b 29 3b 0a 09 20 20  e(callback);..  
40210 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a        }..    };.
40220 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 55  .    /**... *  U
40230 70 64 61 74 65 20 74 68 65 20 68 65 69 67 68 74  pdate the height
40240 20 6f 66 20 74 68 65 20 6e 6f 64 65 0a 09 09 20   of the node... 
40250 2a 2f 0a 09 20 20 20 20 49 6e 74 65 72 76 61 6c  */..    Interval
40260 4e 6f 64 65 2e 70 72 6f 74 6f 74 79 70 65 2e 75  Node.prototype.u
40270 70 64 61 74 65 48 65 69 67 68 74 20 3d 20 66 75  pdateHeight = fu
40280 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
40290 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 6c 65       if (this.le
402a0 66 74 20 21 3d 3d 20 6e 75 6c 6c 20 26 26 20 74  ft !== null && t
402b0 68 69 73 2e 72 69 67 68 74 20 21 3d 3d 20 6e 75  his.right !== nu
402c0 6c 6c 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ll) {..         
402d0 20 20 20 74 68 69 73 2e 68 65 69 67 68 74 20 3d     this.height =
402e0 20 4d 61 74 68 2e 6d 61 78 28 74 68 69 73 2e 6c   Math.max(this.l
402f0 65 66 74 2e 68 65 69 67 68 74 2c 20 74 68 69 73  eft.height, this
40300 2e 72 69 67 68 74 2e 68 65 69 67 68 74 29 20 2b  .right.height) +
40310 20 31 3b 0a 09 20 20 20 20 20 20 20 20 7d 20 65   1;..        } e
40320 6c 73 65 20 69 66 20 28 74 68 69 73 2e 72 69 67  lse if (this.rig
40330 68 74 20 21 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 09  ht !== null) {..
40340 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
40350 2e 68 65 69 67 68 74 20 3d 20 74 68 69 73 2e 72  .height = this.r
40360 69 67 68 74 2e 68 65 69 67 68 74 20 2b 20 31 3b  ight.height + 1;
40370 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
40380 20 69 66 20 28 74 68 69 73 2e 6c 65 66 74 20 21   if (this.left !
40390 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 09 20 20 20 20  == null) {..    
403a0 20 20 20 20 20 20 20 20 74 68 69 73 2e 68 65 69          this.hei
403b0 67 68 74 20 3d 20 74 68 69 73 2e 6c 65 66 74 2e  ght = this.left.
403c0 68 65 69 67 68 74 20 2b 20 31 3b 0a 09 20 20 20  height + 1;..   
403d0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20       } else {.. 
403e0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
403f0 68 65 69 67 68 74 20 3d 20 30 3b 0a 09 20 20 20  height = 0;..   
40400 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a 09       }..    };..
40410 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 55 70      /**... *  Up
40420 64 61 74 65 20 74 68 65 20 68 65 69 67 68 74 20  date the height 
40430 6f 66 20 74 68 65 20 6e 6f 64 65 0a 09 09 20 2a  of the node... *
40440 2f 0a 09 20 20 20 20 49 6e 74 65 72 76 61 6c 4e  /..    IntervalN
40450 6f 64 65 2e 70 72 6f 74 6f 74 79 70 65 2e 75 70  ode.prototype.up
40460 64 61 74 65 4d 61 78 20 3d 20 66 75 6e 63 74 69  dateMax = functi
40470 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
40480 20 74 68 69 73 2e 6d 61 78 20 3d 20 74 68 69 73   this.max = this
40490 2e 68 69 67 68 3b 0a 09 20 20 20 20 20 20 20 20  .high;..        
404a0 69 66 20 28 74 68 69 73 2e 6c 65 66 74 20 21 3d  if (this.left !=
404b0 3d 20 6e 75 6c 6c 29 20 7b 0a 09 20 20 20 20 20  = null) {..     
404c0 20 20 20 20 20 20 20 74 68 69 73 2e 6d 61 78 20         this.max 
404d0 3d 20 4d 61 74 68 2e 6d 61 78 28 74 68 69 73 2e  = Math.max(this.
404e0 6d 61 78 2c 20 74 68 69 73 2e 6c 65 66 74 2e 6d  max, this.left.m
404f0 61 78 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a  ax);..        }.
40500 09 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69  .        if (thi
40510 73 2e 72 69 67 68 74 20 21 3d 3d 20 6e 75 6c 6c  s.right !== null
40520 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
40530 20 74 68 69 73 2e 6d 61 78 20 3d 20 4d 61 74 68   this.max = Math
40540 2e 6d 61 78 28 74 68 69 73 2e 6d 61 78 2c 20 74  .max(this.max, t
40550 68 69 73 2e 72 69 67 68 74 2e 6d 61 78 29 3b 0a  his.right.max);.
40560 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
40570 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  };..    /**... *
40580 20 20 54 68 65 20 62 61 6c 61 6e 63 65 20 69 73    The balance is
40590 20 68 6f 77 20 74 68 65 20 6c 65 61 66 73 20 61   how the leafs a
405a0 72 65 20 64 69 73 74 72 69 62 75 74 65 64 20 6f  re distributed o
405b0 6e 20 74 68 65 20 6e 6f 64 65 0a 09 09 20 2a 20  n the node... * 
405c0 20 40 72 65 74 75 72 6e 20 20 7b 4e 75 6d 62 65   @return  {Numbe
405d0 72 7d 20 20 4e 65 67 61 74 69 76 65 20 6e 75 6d  r}  Negative num
405e0 62 65 72 73 20 61 72 65 20 62 61 6c 61 6e 63 65  bers are balance
405f0 64 20 74 6f 20 74 68 65 20 72 69 67 68 74 0a 09  d to the right..
40600 09 20 2a 2f 0a 09 20 20 20 20 49 6e 74 65 72 76  . */..    Interv
40610 61 6c 4e 6f 64 65 2e 70 72 6f 74 6f 74 79 70 65  alNode.prototype
40620 2e 67 65 74 42 61 6c 61 6e 63 65 20 3d 20 66 75  .getBalance = fu
40630 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
40640 20 20 20 20 20 76 61 72 20 62 61 6c 61 6e 63 65       var balance
40650 20 3d 20 30 3b 0a 09 20 20 20 20 20 20 20 20 69   = 0;..        i
40660 66 20 28 74 68 69 73 2e 6c 65 66 74 20 21 3d 3d  f (this.left !==
40670 20 6e 75 6c 6c 20 26 26 20 74 68 69 73 2e 72 69   null && this.ri
40680 67 68 74 20 21 3d 3d 20 6e 75 6c 6c 29 20 7b 0a  ght !== null) {.
40690 09 20 20 20 20 20 20 20 20 20 20 20 20 62 61 6c  .            bal
406a0 61 6e 63 65 20 3d 20 74 68 69 73 2e 6c 65 66 74  ance = this.left
406b0 2e 68 65 69 67 68 74 20 2d 20 74 68 69 73 2e 72  .height - this.r
406c0 69 67 68 74 2e 68 65 69 67 68 74 3b 0a 09 20 20  ight.height;..  
406d0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20        } else if 
406e0 28 74 68 69 73 2e 6c 65 66 74 20 21 3d 3d 20 6e  (this.left !== n
406f0 75 6c 6c 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ull) {..        
40700 20 20 20 20 62 61 6c 61 6e 63 65 20 3d 20 74 68      balance = th
40710 69 73 2e 6c 65 66 74 2e 68 65 69 67 68 74 20 2b  is.left.height +
40720 20 31 3b 0a 09 20 20 20 20 20 20 20 20 7d 20 65   1;..        } e
40730 6c 73 65 20 69 66 20 28 74 68 69 73 2e 72 69 67  lse if (this.rig
40740 68 74 20 21 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 09  ht !== null) {..
40750 20 20 20 20 20 20 20 20 20 20 20 20 62 61 6c 61              bala
40760 6e 63 65 20 3d 20 2d 28 74 68 69 73 2e 72 69 67  nce = -(this.rig
40770 68 74 2e 68 65 69 67 68 74 20 2b 20 31 29 3b 0a  ht.height + 1);.
40780 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
40790 20 20 20 20 72 65 74 75 72 6e 20 62 61 6c 61 6e      return balan
407a0 63 65 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  ce;..    };..   
407b0 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 72 65 74 75   /**... *  @retu
407c0 72 6e 73 20 7b 42 6f 6f 6c 65 61 6e 7d 20 74 72  rns {Boolean} tr
407d0 75 65 20 69 66 20 74 68 69 73 20 6e 6f 64 65 20  ue if this node 
407e0 69 73 20 74 68 65 20 6c 65 66 74 20 63 68 69 6c  is the left chil
407f0 64 0a 09 09 20 2a 20 20 6f 66 20 69 74 73 20 70  d... *  of its p
40800 61 72 65 6e 74 0a 09 09 20 2a 2f 0a 09 20 20 20  arent... */..   
40810 20 49 6e 74 65 72 76 61 6c 4e 6f 64 65 2e 70 72   IntervalNode.pr
40820 6f 74 6f 74 79 70 65 2e 69 73 4c 65 66 74 43 68  ototype.isLeftCh
40830 69 6c 64 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  ild = function (
40840 29 20 7b 0a 09 20 20 20 20 20 20 20 20 72 65 74  ) {..        ret
40850 75 72 6e 20 74 68 69 73 2e 70 61 72 65 6e 74 20  urn this.parent 
40860 21 3d 3d 20 6e 75 6c 6c 20 26 26 20 74 68 69 73  !== null && this
40870 2e 70 61 72 65 6e 74 2e 6c 65 66 74 20 3d 3d 3d  .parent.left ===
40880 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09   this;..    };..
40890 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 67 65      /**... *  ge
408a0 74 2f 73 65 74 20 74 68 65 20 6c 65 66 74 20 6e  t/set the left n
408b0 6f 64 65 0a 09 09 20 2a 20 20 40 74 79 70 65 20  ode... *  @type 
408c0 7b 49 6e 74 65 72 76 61 6c 4e 6f 64 65 7d 0a 09  {IntervalNode}..
408d0 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74  . */..    Object
408e0 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28  .defineProperty(
408f0 49 6e 74 65 72 76 61 6c 4e 6f 64 65 2e 70 72 6f  IntervalNode.pro
40900 74 6f 74 79 70 65 2c 20 27 6c 65 66 74 27 2c 20  totype, 'left', 
40910 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a 20  {..        get: 
40920 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
40930 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
40940 6e 20 74 68 69 73 2e 5f 6c 65 66 74 3b 0a 09 20  n this._left;.. 
40950 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20         },..     
40960 20 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e     set: function
40970 20 28 6e 6f 64 65 29 20 7b 0a 09 20 20 20 20 20   (node) {..     
40980 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 65 66         this._lef
40990 74 20 3d 20 6e 6f 64 65 3b 0a 09 20 20 20 20 20  t = node;..     
409a0 20 20 20 20 20 20 20 69 66 20 28 6e 6f 64 65 20         if (node 
409b0 21 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 09 20 20 20  !== null) {..   
409c0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 64               nod
409d0 65 2e 70 61 72 65 6e 74 20 3d 20 74 68 69 73 3b  e.parent = this;
409e0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ..            }.
409f0 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
40a00 73 2e 75 70 64 61 74 65 48 65 69 67 68 74 28 29  s.updateHeight()
40a10 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  ;..            t
40a20 68 69 73 2e 75 70 64 61 74 65 4d 61 78 28 29 3b  his.updateMax();
40a30 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
40a40 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09   });..    /**...
40a50 20 2a 20 20 67 65 74 2f 73 65 74 20 74 68 65 20   *  get/set the 
40a60 72 69 67 68 74 20 6e 6f 64 65 0a 09 09 20 2a 20  right node... * 
40a70 20 40 74 79 70 65 20 7b 49 6e 74 65 72 76 61 6c   @type {Interval
40a80 4e 6f 64 65 7d 0a 09 09 20 2a 2f 0a 09 20 20 20  Node}... */..   
40a90 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72   Object.definePr
40aa0 6f 70 65 72 74 79 28 49 6e 74 65 72 76 61 6c 4e  operty(IntervalN
40ab0 6f 64 65 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27  ode.prototype, '
40ac0 72 69 67 68 74 27 2c 20 7b 0a 09 20 20 20 20 20  right', {..     
40ad0 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e     get: function
40ae0 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20   () {..         
40af0 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f     return this._
40b00 72 69 67 68 74 3b 0a 09 20 20 20 20 20 20 20 20  right;..        
40b10 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a  },..        set:
40b20 20 66 75 6e 63 74 69 6f 6e 20 28 6e 6f 64 65 29   function (node)
40b30 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
40b40 74 68 69 73 2e 5f 72 69 67 68 74 20 3d 20 6e 6f  this._right = no
40b50 64 65 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  de;..           
40b60 20 69 66 20 28 6e 6f 64 65 20 21 3d 3d 20 6e 75   if (node !== nu
40b70 6c 6c 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ll) {..         
40b80 20 20 20 20 20 20 20 6e 6f 64 65 2e 70 61 72 65         node.pare
40b90 6e 74 20 3d 20 74 68 69 73 3b 0a 09 20 20 20 20  nt = this;..    
40ba0 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
40bb0 20 20 20 20 20 20 20 74 68 69 73 2e 75 70 64 61         this.upda
40bc0 74 65 48 65 69 67 68 74 28 29 3b 0a 09 20 20 20  teHeight();..   
40bd0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 75 70           this.up
40be0 64 61 74 65 4d 61 78 28 29 3b 0a 09 20 20 20 20  dateMax();..    
40bf0 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09      }..    });..
40c00 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 6e 75      /**... *  nu
40c10 6c 6c 20 6f 75 74 20 72 65 66 65 72 65 6e 63 65  ll out reference
40c20 73 2e 0a 09 09 20 2a 2f 0a 09 20 20 20 20 49 6e  s.... */..    In
40c30 74 65 72 76 61 6c 4e 6f 64 65 2e 70 72 6f 74 6f  tervalNode.proto
40c40 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20 66  type.dispose = f
40c50 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
40c60 20 20 20 20 20 20 74 68 69 73 2e 70 61 72 65 6e        this.paren
40c70 74 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20  t = null;..     
40c80 20 20 20 74 68 69 73 2e 5f 6c 65 66 74 20 3d 20     this._left = 
40c90 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74  null;..        t
40ca0 68 69 73 2e 5f 72 69 67 68 74 20 3d 20 6e 75 6c  his._right = nul
40cb0 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  l;..        this
40cc0 2e 65 76 65 6e 74 20 3d 20 6e 75 6c 6c 3b 0a 09  .event = null;..
40cd0 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2f 2f 2f      };..    ////
40ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
40cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
40d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
40d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
40d20 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 2f 2f 09  ///////..    //.
40d30 45 4e 44 20 49 4e 54 45 52 56 41 4c 20 4e 4f 44  END INTERVAL NOD
40d40 45 20 48 45 4c 50 45 52 0a 09 20 20 20 20 2f 2f  E HELPER..    //
40d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
40d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
40d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
40d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
40d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 72  /////////..    r
40da0 65 74 75 72 6e 20 54 6f 6e 65 2e 49 6e 74 65 72  eturn Tone.Inter
40db0 76 61 6c 54 69 6d 65 6c 69 6e 65 3b 0a 09 7d 29  valTimeline;..})
40dc0 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69  ;..Module(functi
40dd0 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20  on (Tone) {..   
40de0 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20   ..    /**... * 
40df0 20 40 63 6c 61 73 73 20 20 54 72 61 6e 73 70 6f   @class  Transpo
40e00 72 74 20 66 6f 72 20 74 69 6d 69 6e 67 20 6d 75  rt for timing mu
40e10 73 69 63 61 6c 20 65 76 65 6e 74 73 2e 0a 09 09  sical events....
40e20 20 2a 20 20 20 20 20 20 20 20 20 20 53 75 70 70   *          Supp
40e30 6f 72 74 73 20 74 65 6d 70 6f 20 63 75 72 76 65  orts tempo curve
40e40 73 20 61 6e 64 20 74 69 6d 65 20 63 68 61 6e 67  s and time chang
40e50 65 73 2e 20 55 6e 6c 69 6b 65 20 62 72 6f 77 73  es. Unlike brows
40e60 65 72 2d 62 61 73 65 64 20 74 69 6d 69 6e 67 20  er-based timing 
40e70 28 73 65 74 49 6e 74 65 72 76 61 6c 2c 20 72 65  (setInterval, re
40e80 71 75 65 73 74 41 6e 69 6d 61 74 69 6f 6e 46 72  questAnimationFr
40e90 61 6d 65 29 0a 09 09 20 2a 20 20 20 20 20 20 20  ame)... *       
40ea0 20 20 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72     Tone.Transpor
40eb0 74 20 74 69 6d 69 6e 67 20 65 76 65 6e 74 73 20  t timing events 
40ec0 70 61 73 73 20 69 6e 20 74 68 65 20 65 78 61 63  pass in the exac
40ed0 74 20 74 69 6d 65 20 6f 66 20 74 68 65 20 73 63  t time of the sc
40ee0 68 65 64 75 6c 65 64 20 65 76 65 6e 74 0a 09 09  heduled event...
40ef0 20 2a 20 20 20 20 20 20 20 20 20 20 69 6e 20 74   *          in t
40f00 68 65 20 61 72 67 75 6d 65 6e 74 20 6f 66 20 74  he argument of t
40f10 68 65 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63  he callback func
40f20 74 69 6f 6e 2e 20 50 61 73 73 20 74 68 61 74 20  tion. Pass that 
40f30 74 69 6d 65 20 76 61 6c 75 65 20 74 6f 20 74 68  time value to th
40f40 65 20 6f 62 6a 65 63 74 0a 09 09 20 2a 20 20 20  e object... *   
40f50 20 20 20 20 20 20 20 79 6f 75 27 72 65 20 73 63         you're sc
40f60 68 65 64 75 6c 69 6e 67 2e 20 3c 62 72 3e 3c 62  heduling. <br><b
40f70 72 3e 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  r>... *         
40f80 20 41 20 73 69 6e 67 6c 65 20 74 72 61 6e 73 70   A single transp
40f90 6f 72 74 20 69 73 20 63 72 65 61 74 65 64 20 66  ort is created f
40fa0 6f 72 20 79 6f 75 20 77 68 65 6e 20 74 68 65 20  or you when the 
40fb0 6c 69 62 72 61 72 79 20 69 73 20 69 6e 69 74 69  library is initi
40fc0 61 6c 69 7a 65 64 2e 20 0a 09 09 20 2a 20 20 20  alized. ... *   
40fd0 20 20 20 20 20 20 20 3c 62 72 3e 3c 62 72 3e 0a         <br><br>.
40fe0 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 54 68  .. *          Th
40ff0 65 20 74 72 61 6e 73 70 6f 72 74 20 65 6d 69 74  e transport emit
41000 73 20 74 68 65 20 65 76 65 6e 74 73 3a 20 22 73  s the events: "s
41010 74 61 72 74 22 2c 20 22 73 74 6f 70 22 2c 20 22  tart", "stop", "
41020 70 61 75 73 65 22 2c 20 61 6e 64 20 22 6c 6f 6f  pause", and "loo
41030 70 22 20 77 68 69 63 68 20 61 72 65 0a 09 09 20  p" which are... 
41040 2a 20 20 20 20 20 20 20 20 20 20 63 61 6c 6c 65  *          calle
41050 64 20 77 69 74 68 20 74 68 65 20 74 69 6d 65 20  d with the time 
41060 6f 66 20 74 68 61 74 20 65 76 65 6e 74 20 61 73  of that event as
41070 20 74 68 65 20 61 72 67 75 6d 65 6e 74 2e 20 0a   the argument. .
41080 09 09 20 2a 0a 09 09 20 2a 20 20 40 65 78 74 65  .. *... *  @exte
41090 6e 64 73 20 7b 54 6f 6e 65 2e 45 6d 69 74 74 65  nds {Tone.Emitte
410a0 72 7d 0a 09 09 20 2a 20 20 40 73 69 6e 67 6c 65  r}... *  @single
410b0 74 6f 6e 0a 09 09 20 2a 20 20 40 65 78 61 6d 70  ton... *  @examp
410c0 6c 65 0a 09 09 20 2a 20 2f 2f 72 65 70 65 61 74  le... * //repeat
410d0 65 64 20 65 76 65 6e 74 20 65 76 65 72 79 20 38  ed event every 8
410e0 74 68 20 6e 6f 74 65 0a 09 09 20 2a 20 54 6f 6e  th note... * Ton
410f0 65 2e 54 72 61 6e 73 70 6f 72 74 2e 73 63 68 65  e.Transport.sche
41100 64 75 6c 65 52 65 70 65 61 74 28 66 75 6e 63 74  duleRepeat(funct
41110 69 6f 6e 28 74 69 6d 65 29 7b 0a 09 09 20 2a 20  ion(time){... * 
41120 09 2f 2f 64 6f 20 73 6f 6d 65 74 68 69 6e 67 20  .//do something 
41130 77 69 74 68 20 74 68 65 20 74 69 6d 65 0a 09 09  with the time...
41140 20 2a 20 7d 2c 20 22 38 6e 22 29 3b 0a 09 09 20   * }, "8n");... 
41150 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a  *  @example... *
41160 20 2f 2f 73 63 68 65 64 75 6c 65 20 61 6e 20 65   //schedule an e
41170 76 65 6e 74 20 6f 6e 20 74 68 65 20 31 36 74 68  vent on the 16th
41180 20 6d 65 61 73 75 72 65 0a 09 09 20 2a 20 54 6f   measure... * To
41190 6e 65 2e 54 72 61 6e 73 70 6f 72 74 2e 73 63 68  ne.Transport.sch
411a0 65 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 28 74  edule(function(t
411b0 69 6d 65 29 7b 0a 09 09 20 2a 20 09 2f 2f 64 6f  ime){... * .//do
411c0 20 73 6f 6d 65 74 68 69 6e 67 20 77 69 74 68 20   something with 
411d0 74 68 65 20 74 69 6d 65 0a 09 09 20 2a 20 7d 2c  the time... * },
411e0 20 22 31 36 3a 30 3a 30 22 29 3b 0a 09 09 20 2a   "16:0:0");... *
411f0 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 72 61 6e  /..    Tone.Tran
41200 73 70 6f 72 74 20 3d 20 66 75 6e 63 74 69 6f 6e  sport = function
41210 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 54   () {..        T
41220 6f 6e 65 2e 45 6d 69 74 74 65 72 2e 63 61 6c 6c  one.Emitter.call
41230 28 74 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20  (this);..       
41240 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
41250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41280 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 20 20  ////////..      
41290 20 20 2f 2f 09 4c 4f 4f 50 49 4e 47 0a 09 20 20    //.LOOPING..  
412a0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
412b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
412c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
412d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
412e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20  ////////////..  
412f0 20 20 20 20 20 20 2f 2a 2a 20 0a 09 09 09 20 2a        /** .... *
41300 20 09 49 66 20 74 68 65 20 74 72 61 6e 73 70 6f   .If the transpo
41310 72 74 20 6c 6f 6f 70 73 20 6f 72 20 6e 6f 74 2e  rt loops or not.
41320 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 62  .... *  @type {b
41330 6f 6f 6c 65 61 6e 7d 0a 09 09 09 20 2a 2f 0a 09  oolean}.... */..
41340 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c 6f 6f          this.loo
41350 70 20 3d 20 66 61 6c 73 65 3b 0a 09 20 20 20 20  p = false;..    
41360 20 20 20 20 2f 2a 2a 20 0a 09 09 09 20 2a 20 09      /** .... * .
41370 54 68 65 20 6c 6f 6f 70 20 73 74 61 72 74 20 70  The loop start p
41380 6f 73 69 74 69 6f 6e 20 69 6e 20 74 69 63 6b 73  osition in ticks
41390 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54  .... *  @type {T
413a0 69 63 6b 73 7d 0a 09 09 09 20 2a 20 20 40 70 72  icks}.... *  @pr
413b0 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20  ivate.... */..  
413c0 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 6f 6f 70        this._loop
413d0 53 74 61 72 74 20 3d 20 30 3b 0a 09 20 20 20 20  Start = 0;..    
413e0 20 20 20 20 2f 2a 2a 20 0a 09 09 09 20 2a 20 09      /** .... * .
413f0 54 68 65 20 6c 6f 6f 70 20 65 6e 64 20 70 6f 73  The loop end pos
41400 69 74 69 6f 6e 20 69 6e 20 74 69 63 6b 73 0a 09  ition in ticks..
41410 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54 69 63  .. *  @type {Tic
41420 6b 73 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76  ks}.... *  @priv
41430 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  ate.... */..    
41440 20 20 20 20 74 68 69 73 2e 5f 6c 6f 6f 70 45 6e      this._loopEn
41450 64 20 3d 20 30 3b 0a 09 20 20 20 20 20 20 20 20  d = 0;..        
41460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
414a0 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 20 20 20  ///////..       
414b0 20 2f 2f 09 43 4c 4f 43 4b 2f 54 45 4d 50 4f 0a   //.CLOCK/TEMPO.
414c0 09 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
414d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
414e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
414f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a  ///////////////.
41510 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
41520 20 2a 20 20 50 75 6c 73 65 73 20 70 65 72 20 71   *  Pulses per q
41530 75 61 72 74 65 72 20 69 73 20 74 68 65 20 6e 75  uarter is the nu
41540 6d 62 65 72 20 6f 66 20 74 69 63 6b 73 20 70 65  mber of ticks pe
41550 72 20 71 75 61 72 74 65 72 20 6e 6f 74 65 2e 0a  r quarter note..
41560 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
41570 09 09 09 20 2a 20 20 40 74 79 70 65 20 20 7b 4e  ... *  @type  {N
41580 75 6d 62 65 72 7d 0a 09 09 09 20 2a 2f 0a 09 20  umber}.... */.. 
41590 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70 70 71         this._ppq
415a0 20 3d 20 54 72 61 6e 73 70 6f 72 74 43 6f 6e 73   = TransportCons
415b0 74 72 75 63 74 6f 72 2e 64 65 66 61 75 6c 74 73  tructor.defaults
415c0 2e 50 50 51 3b 0a 09 20 20 20 20 20 20 20 20 2f  .PPQ;..        /
415d0 2a 2a 0a 09 09 09 20 2a 20 20 77 61 74 63 68 65  **.... *  watche
415e0 73 20 74 68 65 20 6d 61 69 6e 20 6f 73 63 69 6c  s the main oscil
415f0 6c 61 74 6f 72 20 66 6f 72 20 74 69 6d 69 6e 67  lator for timing
41600 20 74 69 63 6b 73 0a 09 09 09 20 2a 20 20 69 6e   ticks.... *  in
41610 69 74 69 61 6c 6c 79 20 73 74 61 72 74 73 20 61  itially starts a
41620 74 20 31 32 30 62 70 6d 0a 09 09 09 20 2a 20 20  t 120bpm.... *  
41630 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 20 20  @private.... *  
41640 40 74 79 70 65 20 7b 54 6f 6e 65 2e 43 6c 6f 63  @type {Tone.Cloc
41650 6b 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  k}.... */..     
41660 20 20 20 74 68 69 73 2e 5f 63 6c 6f 63 6b 20 3d     this._clock =
41670 20 6e 65 77 20 54 6f 6e 65 2e 43 6c 6f 63 6b 28   new Tone.Clock(
41680 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  {..            '
41690 63 61 6c 6c 62 61 63 6b 27 3a 20 74 68 69 73 2e  callback': this.
416a0 5f 70 72 6f 63 65 73 73 54 69 63 6b 2e 62 69 6e  _processTick.bin
416b0 64 28 74 68 69 73 29 2c 0a 09 20 20 20 20 20 20  d(this),..      
416c0 20 20 20 20 20 20 27 66 72 65 71 75 65 6e 63 79        'frequency
416d0 27 3a 20 30 0a 09 20 20 20 20 20 20 20 20 7d 29  ': 0..        })
416e0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
416f0 5f 62 69 6e 64 43 6c 6f 63 6b 45 76 65 6e 74 73  _bindClockEvents
41700 28 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  ();..        /**
41710 0a 09 09 09 20 2a 20 20 54 68 65 20 42 65 61 74  .... *  The Beat
41720 73 20 50 65 72 20 4d 69 6e 75 74 65 20 6f 66 20  s Per Minute of 
41730 74 68 65 20 54 72 61 6e 73 70 6f 72 74 2e 20 0a  the Transport. .
41740 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 42 50  ... *  @type {BP
41750 4d 7d 0a 09 09 09 20 2a 20 20 40 73 69 67 6e 61  M}.... *  @signa
41760 6c 0a 09 09 09 20 2a 20 20 40 65 78 61 6d 70 6c  l.... *  @exampl
41770 65 0a 09 09 09 20 2a 20 54 6f 6e 65 2e 54 72 61  e.... * Tone.Tra
41780 6e 73 70 6f 72 74 2e 62 70 6d 2e 76 61 6c 75 65  nsport.bpm.value
41790 20 3d 20 38 30 3b 0a 09 09 09 20 2a 20 2f 2f 72   = 80;.... * //r
417a0 61 6d 70 20 74 68 65 20 62 70 6d 20 74 6f 20 31  amp the bpm to 1
417b0 32 30 20 6f 76 65 72 20 31 30 20 73 65 63 6f 6e  20 over 10 secon
417c0 64 73 0a 09 09 09 20 2a 20 54 6f 6e 65 2e 54 72  ds.... * Tone.Tr
417d0 61 6e 73 70 6f 72 74 2e 62 70 6d 2e 72 61 6d 70  ansport.bpm.ramp
417e0 54 6f 28 31 32 30 2c 20 31 30 29 3b 0a 09 09 09  To(120, 10);....
417f0 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
41800 73 2e 62 70 6d 20 3d 20 74 68 69 73 2e 5f 63 6c  s.bpm = this._cl
41810 6f 63 6b 2e 66 72 65 71 75 65 6e 63 79 3b 0a 09  ock.frequency;..
41820 20 20 20 20 20 20 20 20 74 68 69 73 2e 62 70 6d          this.bpm
41830 2e 5f 74 6f 55 6e 69 74 73 20 3d 20 74 68 69 73  ._toUnits = this
41840 2e 5f 74 6f 55 6e 69 74 73 2e 62 69 6e 64 28 74  ._toUnits.bind(t
41850 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20 20 74  his);..        t
41860 68 69 73 2e 62 70 6d 2e 5f 66 72 6f 6d 55 6e 69  his.bpm._fromUni
41870 74 73 20 3d 20 74 68 69 73 2e 5f 66 72 6f 6d 55  ts = this._fromU
41880 6e 69 74 73 2e 62 69 6e 64 28 74 68 69 73 29 3b  nits.bind(this);
41890 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 62  ..        this.b
418a0 70 6d 2e 75 6e 69 74 73 20 3d 20 54 6f 6e 65 2e  pm.units = Tone.
418b0 54 79 70 65 2e 42 50 4d 3b 0a 09 20 20 20 20 20  Type.BPM;..     
418c0 20 20 20 74 68 69 73 2e 62 70 6d 2e 76 61 6c 75     this.bpm.valu
418d0 65 20 3d 20 54 72 61 6e 73 70 6f 72 74 43 6f 6e  e = TransportCon
418e0 73 74 72 75 63 74 6f 72 2e 64 65 66 61 75 6c 74  structor.default
418f0 73 2e 62 70 6d 3b 0a 09 20 20 20 20 20 20 20 20  s.bpm;..        
41900 74 68 69 73 2e 5f 72 65 61 64 4f 6e 6c 79 28 27  this._readOnly('
41910 62 70 6d 27 29 3b 0a 09 20 20 20 20 20 20 20 20  bpm');..        
41920 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 74  /**.... *  The t
41930 69 6d 65 20 73 69 67 6e 61 74 75 72 65 2c 20 6f  ime signature, o
41940 72 20 6d 6f 72 65 20 61 63 63 75 72 61 74 65 6c  r more accuratel
41950 79 20 74 68 65 20 6e 75 6d 65 72 61 74 6f 72 0a  y the numerator.
41960 09 09 09 20 2a 20 20 6f 66 20 74 68 65 20 74 69  ... *  of the ti
41970 6d 65 20 73 69 67 6e 61 74 75 72 65 20 6f 76 65  me signature ove
41980 72 20 61 20 64 65 6e 6f 6d 69 6e 61 74 6f 72 20  r a denominator 
41990 6f 66 20 34 2e 20 0a 09 09 09 20 2a 20 20 40 74  of 4. .... *  @t
419a0 79 70 65 20 7b 4e 75 6d 62 65 72 7d 0a 09 09 09  ype {Number}....
419b0 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
419c0 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
419d0 73 2e 5f 74 69 6d 65 53 69 67 6e 61 74 75 72 65  s._timeSignature
419e0 20 3d 20 54 72 61 6e 73 70 6f 72 74 43 6f 6e 73   = TransportCons
419f0 74 72 75 63 74 6f 72 2e 64 65 66 61 75 6c 74 73  tructor.defaults
41a00 2e 74 69 6d 65 53 69 67 6e 61 74 75 72 65 3b 0a  .timeSignature;.
41a10 09 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
41a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41a60 0a 09 20 20 20 20 20 20 20 20 2f 2f 09 54 49 4d  ..        //.TIM
41a70 45 4c 49 4e 45 20 45 56 45 4e 54 53 0a 09 20 20  ELINE EVENTS..  
41a80 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
41a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20  ////////////..  
41ad0 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
41ae0 20 41 6c 6c 20 74 68 65 20 65 76 65 6e 74 73 20   All the events 
41af0 69 6e 20 61 6e 20 6f 62 6a 65 63 74 20 74 6f 20  in an object to 
41b00 6b 65 65 70 20 74 72 61 63 6b 20 62 79 20 49 44  keep track by ID
41b10 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4f  .... *  @type {O
41b20 62 6a 65 63 74 7d 0a 09 09 09 20 2a 20 20 40 70  bject}.... *  @p
41b30 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20  rivate.... */.. 
41b40 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 63 68         this._sch
41b50 65 64 75 6c 65 64 45 76 65 6e 74 73 20 3d 20 7b  eduledEvents = {
41b60 7d 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  };..        /**.
41b70 09 09 09 20 2a 20 20 54 68 65 20 65 76 65 6e 74  ... *  The event
41b80 20 49 44 20 63 6f 75 6e 74 65 72 0a 09 09 09 20   ID counter.... 
41b90 2a 20 20 40 74 79 70 65 20 7b 4e 75 6d 62 65 72  *  @type {Number
41ba0 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  }.... *  @privat
41bb0 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
41bc0 20 20 74 68 69 73 2e 5f 65 76 65 6e 74 49 44 20    this._eventID 
41bd0 3d 20 30 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a  = 0;..        /*
41be0 2a 0a 09 09 09 20 2a 20 09 54 68 65 20 73 63 68  *.... * .The sch
41bf0 65 64 75 6c 65 64 20 65 76 65 6e 74 73 2e 0a 09  eduled events...
41c00 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e  .. *  @type {Ton
41c10 65 2e 54 69 6d 65 6c 69 6e 65 7d 0a 09 09 09 20  e.Timeline}.... 
41c20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20  *  @private.... 
41c30 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
41c40 2e 5f 74 69 6d 65 6c 69 6e 65 20 3d 20 6e 65 77  ._timeline = new
41c50 20 54 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 28 29   Tone.Timeline()
41c60 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
41c70 09 09 20 2a 20 20 52 65 70 65 61 74 65 64 20 65  .. *  Repeated e
41c80 76 65 6e 74 73 0a 09 09 09 20 2a 20 20 40 74 79  vents.... *  @ty
41c90 70 65 20 7b 41 72 72 61 79 7d 0a 09 09 09 20 2a  pe {Array}.... *
41ca0 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a    @private.... *
41cb0 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
41cc0 5f 72 65 70 65 61 74 65 64 45 76 65 6e 74 73 20  _repeatedEvents 
41cd0 3d 20 6e 65 77 20 54 6f 6e 65 2e 49 6e 74 65 72  = new Tone.Inter
41ce0 76 61 6c 54 69 6d 65 6c 69 6e 65 28 29 3b 0a 09  valTimeline();..
41cf0 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
41d00 2a 20 20 45 76 65 6e 74 73 20 74 68 61 74 20 6f  *  Events that o
41d10 63 63 75 72 20 6f 6e 63 65 0a 09 09 09 20 2a 20  ccur once.... * 
41d20 20 40 74 79 70 65 20 7b 41 72 72 61 79 7d 0a 09   @type {Array}..
41d30 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
41d40 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
41d50 68 69 73 2e 5f 6f 6e 63 65 45 76 65 6e 74 73 20  his._onceEvents 
41d60 3d 20 6e 65 77 20 54 6f 6e 65 2e 54 69 6d 65 6c  = new Tone.Timel
41d70 69 6e 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ine();..        
41d80 2f 2a 2a 20 0a 09 09 09 20 2a 20 20 41 6c 6c 20  /** .... *  All 
41d90 6f 66 20 74 68 65 20 73 79 6e 63 65 64 20 53 69  of the synced Si
41da0 67 6e 61 6c 73 0a 09 09 09 20 2a 20 20 40 70 72  gnals.... *  @pr
41db0 69 76 61 74 65 20 0a 09 09 09 20 2a 20 20 40 74  ivate .... *  @t
41dc0 79 70 65 20 7b 41 72 72 61 79 7d 0a 09 09 09 20  ype {Array}.... 
41dd0 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
41de0 2e 5f 73 79 6e 63 65 64 53 69 67 6e 61 6c 73 20  ._syncedSignals 
41df0 3d 20 5b 5d 3b 0a 09 20 20 20 20 20 20 20 20 2f  = [];..        /
41e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41e40 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 20 20 20 20  //////..        
41e50 2f 2f 09 53 57 49 4e 47 0a 09 20 20 20 20 20 20  //.SWING..      
41e60 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
41e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41ea0 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 20 20  ////////..      
41eb0 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65    /**.... *  The
41ec0 20 73 75 62 64 69 76 69 73 69 6f 6e 20 6f 66 20   subdivision of 
41ed0 74 68 65 20 73 77 69 6e 67 0a 09 09 09 20 2a 20  the swing.... * 
41ee0 20 40 74 79 70 65 20 20 7b 54 69 63 6b 73 7d 0a   @type  {Ticks}.
41ef0 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
41f00 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
41f10 74 68 69 73 2e 5f 73 77 69 6e 67 54 69 63 6b 73  this._swingTicks
41f20 20 3d 20 54 72 61 6e 73 70 6f 72 74 43 6f 6e 73   = TransportCons
41f30 74 72 75 63 74 6f 72 2e 64 65 66 61 75 6c 74 73  tructor.defaults
41f40 2e 50 50 51 20 2f 20 32 3b 0a 09 20 20 20 20 20  .PPQ / 2;..     
41f50 20 20 20 2f 2f 38 6e 0a 09 20 20 20 20 20 20 20     //8n..       
41f60 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20   /**.... *  The 
41f70 73 77 69 6e 67 20 61 6d 6f 75 6e 74 0a 09 09 09  swing amount....
41f80 20 2a 20 20 40 74 79 70 65 20 7b 4e 6f 72 6d 61   *  @type {Norma
41f90 6c 52 61 6e 67 65 7d 0a 09 09 09 20 2a 20 20 40  lRange}.... *  @
41fa0 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
41fb0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 77          this._sw
41fc0 69 6e 67 41 6d 6f 75 6e 74 20 3d 20 30 3b 0a 09  ingAmount = 0;..
41fd0 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65      };..    Tone
41fe0 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 54 72 61  .extend(Tone.Tra
41ff0 6e 73 70 6f 72 74 2c 20 54 6f 6e 65 2e 45 6d 69  nsport, Tone.Emi
42000 74 74 65 72 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a  tter);..    /**.
42010 09 09 20 2a 20 20 74 68 65 20 64 65 66 61 75 6c  .. *  the defaul
42020 74 73 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b  ts... *  @type {
42030 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 20 20 40 63  Object}... *  @c
42040 6f 6e 73 74 0a 09 09 20 2a 20 20 40 73 74 61 74  onst... *  @stat
42050 69 63 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  ic... */..    To
42060 6e 65 2e 54 72 61 6e 73 70 6f 72 74 2e 64 65 66  ne.Transport.def
42070 61 75 6c 74 73 20 3d 20 7b 0a 09 20 20 20 20 20  aults = {..     
42080 20 20 20 27 62 70 6d 27 3a 20 31 32 30 2c 0a 09     'bpm': 120,..
42090 20 20 20 20 20 20 20 20 27 73 77 69 6e 67 27 3a          'swing':
420a0 20 30 2c 0a 09 20 20 20 20 20 20 20 20 27 73 77   0,..        'sw
420b0 69 6e 67 53 75 62 64 69 76 69 73 69 6f 6e 27 3a  ingSubdivision':
420c0 20 27 38 6e 27 2c 0a 09 20 20 20 20 20 20 20 20   '8n',..        
420d0 27 74 69 6d 65 53 69 67 6e 61 74 75 72 65 27 3a  'timeSignature':
420e0 20 34 2c 0a 09 20 20 20 20 20 20 20 20 27 6c 6f   4,..        'lo
420f0 6f 70 53 74 61 72 74 27 3a 20 30 2c 0a 09 20 20  opStart': 0,..  
42100 20 20 20 20 20 20 27 6c 6f 6f 70 45 6e 64 27 3a        'loopEnd':
42110 20 27 34 6d 27 2c 0a 09 20 20 20 20 20 20 20 20   '4m',..        
42120 27 50 50 51 27 3a 20 31 39 32 0a 09 20 20 20 20  'PPQ': 192..    
42130 7d 3b 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  };..    ////////
42140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42180 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 2f 2f 09  ///////..    //.
42190 54 49 43 4b 53 0a 09 20 20 20 20 2f 2f 2f 2f 2f  TICKS..    /////
421a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
421b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
421c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
421d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
421e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20  //////////..    
421f0 2f 2a 2a 0a 09 09 20 2a 20 20 63 61 6c 6c 65 64  /**... *  called
42200 20 6f 6e 20 65 76 65 72 79 20 74 69 63 6b 0a 09   on every tick..
42210 09 20 2a 20 20 40 70 61 72 61 6d 20 20 20 7b 6e  . *  @param   {n
42220 75 6d 62 65 72 7d 20 74 69 63 6b 54 69 6d 65 20  umber} tickTime 
42230 63 6c 6f 63 6b 20 72 65 6c 61 74 69 76 65 20 74  clock relative t
42240 69 63 6b 20 74 69 6d 65 0a 09 09 20 2a 20 20 40  ick time... *  @
42250 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20  private... */.. 
42260 20 20 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72     Tone.Transpor
42270 74 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 70 72 6f  t.prototype._pro
42280 63 65 73 73 54 69 63 6b 20 3d 20 66 75 6e 63 74  cessTick = funct
42290 69 6f 6e 20 28 74 69 63 6b 54 69 6d 65 29 20 7b  ion (tickTime) {
422a0 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 74 69  ..        var ti
422b0 63 6b 73 20 3d 20 74 68 69 73 2e 5f 63 6c 6f 63  cks = this._cloc
422c0 6b 2e 74 69 63 6b 73 3b 0a 09 20 20 20 20 20 20  k.ticks;..      
422d0 20 20 2f 2f 68 61 6e 64 6c 65 20 73 77 69 6e 67    //handle swing
422e0 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 74 68  ..        if (th
422f0 69 73 2e 5f 73 77 69 6e 67 41 6d 6f 75 6e 74 20  is._swingAmount 
42300 3e 20 30 20 26 26 20 74 69 63 6b 73 20 25 20 74  > 0 && ticks % t
42310 68 69 73 2e 5f 70 70 71 20 21 3d 3d 20 30 20 26  his._ppq !== 0 &
42320 26 20 2f 2f 6e 6f 74 20 6f 6e 20 61 20 64 6f 77  & //not on a dow
42330 6e 62 65 61 74 0a 09 20 20 20 20 20 20 20 20 20  nbeat..         
42340 20 20 20 74 69 63 6b 73 20 25 20 28 74 68 69 73     ticks % (this
42350 2e 5f 73 77 69 6e 67 54 69 63 6b 73 20 2a 20 32  ._swingTicks * 2
42360 29 20 21 3d 3d 20 30 29 20 7b 0a 09 20 20 20 20  ) !== 0) {..    
42370 20 20 20 20 20 20 20 20 2f 2f 61 64 64 20 73 6f          //add so
42380 6d 65 20 73 77 69 6e 67 0a 09 20 20 20 20 20 20  me swing..      
42390 20 20 20 20 20 20 76 61 72 20 70 72 6f 67 72 65        var progre
423a0 73 73 20 3d 20 74 69 63 6b 73 20 25 20 28 74 68  ss = ticks % (th
423b0 69 73 2e 5f 73 77 69 6e 67 54 69 63 6b 73 20 2a  is._swingTicks *
423c0 20 32 29 20 2f 20 28 74 68 69 73 2e 5f 73 77 69   2) / (this._swi
423d0 6e 67 54 69 63 6b 73 20 2a 20 32 29 3b 0a 09 20  ngTicks * 2);.. 
423e0 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 61             var a
423f0 6d 6f 75 6e 74 20 3d 20 4d 61 74 68 2e 73 69 6e  mount = Math.sin
42400 28 70 72 6f 67 72 65 73 73 20 2a 20 4d 61 74 68  (progress * Math
42410 2e 50 49 29 20 2a 20 74 68 69 73 2e 5f 73 77 69  .PI) * this._swi
42420 6e 67 41 6d 6f 75 6e 74 3b 0a 09 20 20 20 20 20  ngAmount;..     
42430 20 20 20 20 20 20 20 74 69 63 6b 54 69 6d 65 20         tickTime 
42440 2b 3d 20 54 6f 6e 65 2e 54 69 6d 65 28 74 68 69  += Tone.Time(thi
42450 73 2e 5f 73 77 69 6e 67 54 69 63 6b 73 20 2a 20  s._swingTicks * 
42460 32 20 2f 20 33 2c 20 27 69 27 29 2e 65 76 61 6c  2 / 3, 'i').eval
42470 28 29 20 2a 20 61 6d 6f 75 6e 74 3b 0a 09 20 20  () * amount;..  
42480 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
42490 20 2f 2f 64 6f 20 74 68 65 20 6c 6f 6f 70 20 74   //do the loop t
424a0 65 73 74 0a 09 20 20 20 20 20 20 20 20 69 66 20  est..        if 
424b0 28 74 68 69 73 2e 6c 6f 6f 70 29 20 7b 0a 09 20  (this.loop) {.. 
424c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
424d0 69 63 6b 73 20 3d 3d 3d 20 74 68 69 73 2e 5f 6c  icks === this._l
424e0 6f 6f 70 45 6e 64 29 20 7b 0a 09 20 20 20 20 20  oopEnd) {..     
424f0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
42500 65 6d 69 74 28 27 6c 6f 6f 70 45 6e 64 27 2c 20  emit('loopEnd', 
42510 74 69 63 6b 54 69 6d 65 29 3b 0a 09 20 20 20 20  tickTime);..    
42520 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
42530 2e 5f 63 6c 6f 63 6b 2e 74 69 63 6b 73 20 3d 20  ._clock.ticks = 
42540 74 68 69 73 2e 5f 6c 6f 6f 70 53 74 61 72 74 3b  this._loopStart;
42550 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
42560 20 20 74 69 63 6b 73 20 3d 20 74 68 69 73 2e 5f    ticks = this._
42570 6c 6f 6f 70 53 74 61 72 74 3b 0a 09 20 20 20 20  loopStart;..    
42580 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
42590 2e 65 6d 69 74 28 27 6c 6f 6f 70 53 74 61 72 74  .emit('loopStart
425a0 27 2c 20 74 69 63 6b 54 69 6d 65 2c 20 74 68 69  ', tickTime, thi
425b0 73 2e 73 65 63 6f 6e 64 73 29 3b 0a 09 20 20 20  s.seconds);..   
425c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
425d0 73 2e 65 6d 69 74 28 27 6c 6f 6f 70 27 2c 20 74  s.emit('loop', t
425e0 69 63 6b 54 69 6d 65 29 3b 0a 09 20 20 20 20 20  ickTime);..     
425f0 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
42600 20 20 7d 0a 09 20 20 20 20 20 20 20 20 2f 2f 70    }..        //p
42610 72 6f 63 65 73 73 20 74 68 65 20 73 69 6e 67 6c  rocess the singl
42620 65 20 6f 63 63 75 72 72 65 6e 63 65 20 65 76 65  e occurrence eve
42630 6e 74 73 0a 09 20 20 20 20 20 20 20 20 74 68 69  nts..        thi
42640 73 2e 5f 6f 6e 63 65 45 76 65 6e 74 73 2e 66 6f  s._onceEvents.fo
42650 72 45 61 63 68 42 65 66 6f 72 65 28 74 69 63 6b  rEachBefore(tick
42660 73 2c 20 66 75 6e 63 74 69 6f 6e 20 28 65 76 65  s, function (eve
42670 6e 74 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  nt) {..         
42680 20 20 20 65 76 65 6e 74 2e 63 61 6c 6c 62 61 63     event.callbac
42690 6b 28 74 69 63 6b 54 69 6d 65 29 3b 0a 09 20 20  k(tickTime);..  
426a0 20 20 20 20 20 20 20 20 20 20 2f 2f 72 65 6d 6f            //remo
426b0 76 65 20 74 68 65 20 65 76 65 6e 74 0a 09 20 20  ve the event..  
426c0 20 20 20 20 20 20 20 20 20 20 64 65 6c 65 74 65            delete
426d0 20 74 68 69 73 2e 5f 73 63 68 65 64 75 6c 65 64   this._scheduled
426e0 45 76 65 6e 74 73 5b 65 76 65 6e 74 2e 69 64 2e  Events[event.id.
426f0 74 6f 53 74 72 69 6e 67 28 29 5d 3b 0a 09 20 20  toString()];..  
42700 20 20 20 20 20 20 7d 2e 62 69 6e 64 28 74 68 69        }.bind(thi
42710 73 29 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f  s));..        //
42720 61 6e 64 20 63 6c 65 61 72 20 74 68 65 20 73 69  and clear the si
42730 6e 67 6c 65 20 6f 63 63 75 72 72 65 6e 63 65 20  ngle occurrence 
42740 74 69 6d 65 6c 69 6e 65 0a 09 20 20 20 20 20 20  timeline..      
42750 20 20 74 68 69 73 2e 5f 6f 6e 63 65 45 76 65 6e    this._onceEven
42760 74 73 2e 63 61 6e 63 65 6c 42 65 66 6f 72 65 28  ts.cancelBefore(
42770 74 69 63 6b 73 29 3b 0a 09 20 20 20 20 20 20 20  ticks);..       
42780 20 2f 2f 66 69 72 65 20 74 68 65 20 6e 65 78 74   //fire the next
42790 20 74 69 63 6b 20 65 76 65 6e 74 73 20 69 66 20   tick events if 
427a0 74 68 65 69 72 20 74 69 6d 65 20 68 61 73 20 63  their time has c
427b0 6f 6d 65 0a 09 20 20 20 20 20 20 20 20 74 68 69  ome..        thi
427c0 73 2e 5f 74 69 6d 65 6c 69 6e 65 2e 66 6f 72 45  s._timeline.forE
427d0 61 63 68 41 74 54 69 6d 65 28 74 69 63 6b 73 2c  achAtTime(ticks,
427e0 20 66 75 6e 63 74 69 6f 6e 20 28 65 76 65 6e 74   function (event
427f0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
42800 20 65 76 65 6e 74 2e 63 61 6c 6c 62 61 63 6b 28   event.callback(
42810 74 69 63 6b 54 69 6d 65 29 3b 0a 09 20 20 20 20  tickTime);..    
42820 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 20 20 20      });..       
42830 20 2f 2f 70 72 6f 63 65 73 73 20 74 68 65 20 72   //process the r
42840 65 70 65 61 74 65 64 20 65 76 65 6e 74 73 0a 09  epeated events..
42850 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 72 65          this._re
42860 70 65 61 74 65 64 45 76 65 6e 74 73 2e 66 6f 72  peatedEvents.for
42870 45 61 63 68 41 74 54 69 6d 65 28 74 69 63 6b 73  EachAtTime(ticks
42880 2c 20 66 75 6e 63 74 69 6f 6e 20 28 65 76 65 6e  , function (even
42890 74 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  t) {..          
428a0 20 20 69 66 20 28 28 74 69 63 6b 73 20 2d 20 65    if ((ticks - e
428b0 76 65 6e 74 2e 74 69 6d 65 29 20 25 20 65 76 65  vent.time) % eve
428c0 6e 74 2e 69 6e 74 65 72 76 61 6c 20 3d 3d 3d 20  nt.interval === 
428d0 30 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  0) {..          
428e0 20 20 20 20 20 20 65 76 65 6e 74 2e 63 61 6c 6c        event.call
428f0 62 61 63 6b 28 74 69 63 6b 54 69 6d 65 29 3b 0a  back(tickTime);.
42900 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09  .            }..
42910 20 20 20 20 20 20 20 20 7d 29 3b 0a 09 20 20 20          });..   
42920 20 7d 3b 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f 2f   };..    ///////
42930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42970 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 2f 2f  ////////..    //
42980 09 53 43 48 45 44 55 4c 41 42 4c 45 20 45 56 45  .SCHEDULABLE EVE
42990 4e 54 53 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  NTS..    ///////
429a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
429b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
429c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
429d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
429e0 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 2f 2a  ////////..    /*
429f0 2a 0a 09 09 20 2a 20 20 53 63 68 65 64 75 6c 65  *... *  Schedule
42a00 20 61 6e 20 65 76 65 6e 74 20 61 6c 6f 6e 67 20   an event along 
42a10 74 68 65 20 74 69 6d 65 6c 69 6e 65 2e 0a 09 09  the timeline....
42a20 20 2a 20 20 40 70 61 72 61 6d 20 7b 46 75 6e 63   *  @param {Func
42a30 74 69 6f 6e 7d 20 63 61 6c 6c 62 61 63 6b 20 54  tion} callback T
42a40 68 65 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 62  he callback to b
42a50 65 20 69 6e 76 6f 6b 65 64 20 61 74 20 74 68 65  e invoked at the
42a60 20 74 69 6d 65 2e 0a 09 09 20 2a 20 20 40 70 61   time.... *  @pa
42a70 72 61 6d 20 7b 54 72 61 6e 73 70 6f 72 74 54 69  ram {TransportTi
42a80 6d 65 7d 20 20 74 69 6d 65 20 54 68 65 20 74 69  me}  time The ti
42a90 6d 65 20 74 6f 20 69 6e 76 6f 6b 65 20 74 68 65  me to invoke the
42aa0 20 63 61 6c 6c 62 61 63 6b 20 61 74 2e 0a 09 09   callback at....
42ab0 20 2a 20 20 40 72 65 74 75 72 6e 20 7b 4e 75 6d   *  @return {Num
42ac0 62 65 72 7d 20 54 68 65 20 69 64 20 6f 66 20 74  ber} The id of t
42ad0 68 65 20 65 76 65 6e 74 20 77 68 69 63 68 20 63  he event which c
42ae0 61 6e 20 62 65 20 75 73 65 64 20 66 6f 72 20 63  an be used for c
42af0 61 6e 63 65 6c 69 6e 67 20 74 68 65 20 65 76 65  anceling the eve
42b00 6e 74 2e 20 0a 09 09 20 2a 20 20 40 65 78 61 6d  nt. ... *  @exam
42b10 70 6c 65 0a 09 09 20 2a 20 2f 2f 74 72 69 67 67  ple... * //trigg
42b20 65 72 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  er the callback 
42b30 77 68 65 6e 20 74 68 65 20 54 72 61 6e 73 70 6f  when the Transpo
42b40 72 74 20 72 65 61 63 68 65 73 20 74 68 65 20 64  rt reaches the d
42b50 65 73 69 72 65 64 20 74 69 6d 65 0a 09 09 20 2a  esired time... *
42b60 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 2e   Tone.Transport.
42b70 73 63 68 65 64 75 6c 65 28 66 75 6e 63 74 69 6f  schedule(functio
42b80 6e 28 74 69 6d 65 29 7b 0a 09 09 20 2a 20 09 65  n(time){... * .e
42b90 6e 76 65 6c 6f 70 65 2e 74 72 69 67 67 65 72 41  nvelope.triggerA
42ba0 74 74 61 63 6b 28 74 69 6d 65 29 3b 0a 09 09 20  ttack(time);... 
42bb0 2a 20 7d 2c 20 22 31 32 38 69 22 29 3b 0a 09 09  * }, "128i");...
42bc0 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 72   */..    Tone.Tr
42bd0 61 6e 73 70 6f 72 74 2e 70 72 6f 74 6f 74 79 70  ansport.prototyp
42be0 65 2e 73 63 68 65 64 75 6c 65 20 3d 20 66 75 6e  e.schedule = fun
42bf0 63 74 69 6f 6e 20 28 63 61 6c 6c 62 61 63 6b 2c  ction (callback,
42c00 20 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20   time) {..      
42c10 20 20 76 61 72 20 65 76 65 6e 74 20 3d 20 7b 0a    var event = {.
42c20 09 20 20 20 20 20 20 20 20 20 20 20 20 27 74 69  .            'ti
42c30 6d 65 27 3a 20 74 68 69 73 2e 74 6f 54 69 63 6b  me': this.toTick
42c40 73 28 74 69 6d 65 29 2c 0a 09 20 20 20 20 20 20  s(time),..      
42c50 20 20 20 20 20 20 27 63 61 6c 6c 62 61 63 6b 27        'callback'
42c60 3a 20 63 61 6c 6c 62 61 63 6b 0a 09 20 20 20 20  : callback..    
42c70 20 20 20 20 7d 3b 0a 09 20 20 20 20 20 20 20 20      };..        
42c80 76 61 72 20 69 64 20 3d 20 74 68 69 73 2e 5f 65  var id = this._e
42c90 76 65 6e 74 49 44 2b 2b 3b 0a 09 20 20 20 20 20  ventID++;..     
42ca0 20 20 20 74 68 69 73 2e 5f 73 63 68 65 64 75 6c     this._schedul
42cb0 65 64 45 76 65 6e 74 73 5b 69 64 2e 74 6f 53 74  edEvents[id.toSt
42cc0 72 69 6e 67 28 29 5d 20 3d 20 7b 0a 09 20 20 20  ring()] = {..   
42cd0 20 20 20 20 20 20 20 20 20 27 65 76 65 6e 74 27           'event'
42ce0 3a 20 65 76 65 6e 74 2c 0a 09 20 20 20 20 20 20  : event,..      
42cf0 20 20 20 20 20 20 27 74 69 6d 65 6c 69 6e 65 27        'timeline'
42d00 3a 20 74 68 69 73 2e 5f 74 69 6d 65 6c 69 6e 65  : this._timeline
42d10 0a 09 20 20 20 20 20 20 20 20 7d 3b 0a 09 20 20  ..        };..  
42d20 20 20 20 20 20 20 74 68 69 73 2e 5f 74 69 6d 65        this._time
42d30 6c 69 6e 65 2e 61 64 64 28 65 76 65 6e 74 29 3b  line.add(event);
42d40 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
42d50 20 69 64 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20   id;..    };..  
42d60 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 53 63 68 65    /**... *  Sche
42d70 64 75 6c 65 20 61 20 72 65 70 65 61 74 65 64 20  dule a repeated 
42d80 65 76 65 6e 74 20 61 6c 6f 6e 67 20 74 68 65 20  event along the 
42d90 74 69 6d 65 6c 69 6e 65 2e 20 54 68 65 20 65 76  timeline. The ev
42da0 65 6e 74 20 77 69 6c 6c 20 66 69 72 65 0a 09 09  ent will fire...
42db0 20 2a 20 20 61 74 20 74 68 65 20 60 69 6e 74 65   *  at the `inte
42dc0 72 76 61 6c 60 20 73 74 61 72 74 69 6e 67 20 61  rval` starting a
42dd0 74 20 74 68 65 20 60 73 74 61 72 74 54 69 6d 65  t the `startTime
42de0 60 20 61 6e 64 20 66 6f 72 20 74 68 65 20 73 70  ` and for the sp
42df0 65 63 69 66 69 65 64 0a 09 09 20 2a 20 20 60 64  ecified... *  `d
42e00 75 72 61 74 69 6f 6e 60 2e 20 0a 09 09 20 2a 20  uration`. ... * 
42e10 20 40 70 61 72 61 6d 20 20 7b 46 75 6e 63 74 69   @param  {Functi
42e20 6f 6e 7d 20 20 63 61 6c 6c 62 61 63 6b 20 20 20  on}  callback   
42e30 54 68 65 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20  The callback to 
42e40 69 6e 76 6f 6b 65 2e 0a 09 09 20 2a 20 20 40 70  invoke.... *  @p
42e50 61 72 61 6d 20 20 7b 54 69 6d 65 7d 20 20 20 20  aram  {Time}    
42e60 69 6e 74 65 72 76 61 6c 20 20 20 54 68 65 20 64  interval   The d
42e70 75 72 61 74 69 6f 6e 20 62 65 74 77 65 65 6e 20  uration between 
42e80 73 75 63 63 65 73 73 69 76 65 0a 09 09 20 2a 20  successive... * 
42e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
42eb0 6c 6c 62 61 63 6b 73 2e 0a 09 09 20 2a 20 20 40  llbacks.... *  @
42ec0 70 61 72 61 6d 20 20 7b 54 69 6d 65 6c 69 6e 65  param  {Timeline
42ed0 50 6f 73 69 74 69 6f 6e 3d 7d 20 20 20 20 73 74  Position=}    st
42ee0 61 72 74 54 69 6d 65 20 20 57 68 65 6e 20 61 6c  artTime  When al
42ef0 6f 6e 67 20 74 68 65 20 74 69 6d 65 6c 69 6e 65  ong the timeline
42f00 20 74 68 65 20 65 76 65 6e 74 73 20 73 68 6f 75   the events shou
42f10 6c 64 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  ld... *         
42f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42f30 20 20 20 20 20 20 73 74 61 72 74 20 62 65 69 6e        start bein
42f40 67 20 69 6e 76 6f 6b 65 64 2e 0a 09 09 20 2a 20  g invoked.... * 
42f50 20 40 70 61 72 61 6d 20 7b 54 69 6d 65 7d 20 5b   @param {Time} [
42f60 64 75 72 61 74 69 6f 6e 3d 49 6e 66 69 6e 69 74  duration=Infinit
42f70 79 5d 20 48 6f 77 20 6c 6f 6e 67 20 74 68 65 20  y] How long the 
42f80 65 76 65 6e 74 20 73 68 6f 75 6c 64 20 72 65 70  event should rep
42f90 65 61 74 2e 20 0a 09 09 20 2a 20 20 40 72 65 74  eat. ... *  @ret
42fa0 75 72 6e 20 20 7b 4e 75 6d 62 65 72 7d 20 20 20  urn  {Number}   
42fb0 20 54 68 65 20 49 44 20 6f 66 20 74 68 65 20 73   The ID of the s
42fc0 63 68 65 64 75 6c 65 64 20 65 76 65 6e 74 2e 20  cheduled event. 
42fd0 55 73 65 20 74 68 69 73 20 74 6f 20 63 61 6e 63  Use this to canc
42fe0 65 6c 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  el... *         
42ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43000 20 20 74 68 65 20 65 76 65 6e 74 2e 20 0a 09 09    the event. ...
43010 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20   *  @example... 
43020 2a 20 2f 2f 61 20 63 61 6c 6c 62 61 63 6b 20 69  * //a callback i
43030 6e 76 6f 6b 65 64 20 65 76 65 72 79 20 65 69 67  nvoked every eig
43040 68 74 68 20 6e 6f 74 65 20 61 66 74 65 72 20 74  hth note after t
43050 68 65 20 66 69 72 73 74 20 6d 65 61 73 75 72 65  he first measure
43060 0a 09 09 20 2a 20 54 6f 6e 65 2e 54 72 61 6e 73  ... * Tone.Trans
43070 70 6f 72 74 2e 73 63 68 65 64 75 6c 65 52 65 70  port.scheduleRep
43080 65 61 74 28 63 61 6c 6c 62 61 63 6b 2c 20 22 38  eat(callback, "8
43090 6e 22 2c 20 22 31 6d 22 29 3b 0a 09 09 20 2a 2f  n", "1m");... */
430a0 0a 09 20 20 20 20 54 6f 6e 65 2e 54 72 61 6e 73  ..    Tone.Trans
430b0 70 6f 72 74 2e 70 72 6f 74 6f 74 79 70 65 2e 73  port.prototype.s
430c0 63 68 65 64 75 6c 65 52 65 70 65 61 74 20 3d 20  cheduleRepeat = 
430d0 66 75 6e 63 74 69 6f 6e 20 28 63 61 6c 6c 62 61  function (callba
430e0 63 6b 2c 20 69 6e 74 65 72 76 61 6c 2c 20 73 74  ck, interval, st
430f0 61 72 74 54 69 6d 65 2c 20 64 75 72 61 74 69 6f  artTime, duratio
43100 6e 29 20 7b 0a 09 20 20 20 20 20 20 20 20 69 66  n) {..        if
43110 20 28 69 6e 74 65 72 76 61 6c 20 3c 3d 20 30 29   (interval <= 0)
43120 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
43130 74 68 72 6f 77 20 6e 65 77 20 45 72 72 6f 72 28  throw new Error(
43140 27 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 3a  'Tone.Transport:
43150 20 72 65 70 65 61 74 20 65 76 65 6e 74 73 20 6d   repeat events m
43160 75 73 74 20 68 61 76 65 20 61 6e 20 69 6e 74 65  ust have an inte
43170 72 76 61 6c 20 6c 61 72 67 65 72 20 74 68 61 6e  rval larger than
43180 20 30 27 29 3b 0a 09 20 20 20 20 20 20 20 20 7d   0');..        }
43190 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 65 76  ..        var ev
431a0 65 6e 74 20 3d 20 7b 0a 09 20 20 20 20 20 20 20  ent = {..       
431b0 20 20 20 20 20 27 74 69 6d 65 27 3a 20 74 68 69       'time': thi
431c0 73 2e 74 6f 54 69 63 6b 73 28 73 74 61 72 74 54  s.toTicks(startT
431d0 69 6d 65 29 2c 0a 09 20 20 20 20 20 20 20 20 20  ime),..         
431e0 20 20 20 27 64 75 72 61 74 69 6f 6e 27 3a 20 74     'duration': t
431f0 68 69 73 2e 74 6f 54 69 63 6b 73 28 74 68 69 73  his.toTicks(this
43200 2e 64 65 66 61 75 6c 74 41 72 67 28 64 75 72 61  .defaultArg(dura
43210 74 69 6f 6e 2c 20 49 6e 66 69 6e 69 74 79 29 29  tion, Infinity))
43220 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
43230 69 6e 74 65 72 76 61 6c 27 3a 20 74 68 69 73 2e  interval': this.
43240 74 6f 54 69 63 6b 73 28 69 6e 74 65 72 76 61 6c  toTicks(interval
43250 29 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
43260 27 63 61 6c 6c 62 61 63 6b 27 3a 20 63 61 6c 6c  'callback': call
43270 62 61 63 6b 0a 09 20 20 20 20 20 20 20 20 7d 3b  back..        };
43280 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 69 64  ..        var id
43290 20 3d 20 74 68 69 73 2e 5f 65 76 65 6e 74 49 44   = this._eventID
432a0 2b 2b 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ++;..        thi
432b0 73 2e 5f 73 63 68 65 64 75 6c 65 64 45 76 65 6e  s._scheduledEven
432c0 74 73 5b 69 64 2e 74 6f 53 74 72 69 6e 67 28 29  ts[id.toString()
432d0 5d 20 3d 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ] = {..         
432e0 20 20 20 27 65 76 65 6e 74 27 3a 20 65 76 65 6e     'event': even
432f0 74 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
43300 27 74 69 6d 65 6c 69 6e 65 27 3a 20 74 68 69 73  'timeline': this
43310 2e 5f 72 65 70 65 61 74 65 64 45 76 65 6e 74 73  ._repeatedEvents
43320 0a 09 20 20 20 20 20 20 20 20 7d 3b 0a 09 20 20  ..        };..  
43330 20 20 20 20 20 20 74 68 69 73 2e 5f 72 65 70 65        this._repe
43340 61 74 65 64 45 76 65 6e 74 73 2e 61 64 64 28 65  atedEvents.add(e
43350 76 65 6e 74 29 3b 0a 09 20 20 20 20 20 20 20 20  vent);..        
43360 72 65 74 75 72 6e 20 69 64 3b 0a 09 20 20 20 20  return id;..    
43370 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  };..    /**... *
43380 20 20 53 63 68 65 64 75 6c 65 20 61 6e 20 65 76    Schedule an ev
43390 65 6e 74 20 74 68 61 74 20 77 69 6c 6c 20 62 65  ent that will be
433a0 20 72 65 6d 6f 76 65 64 20 61 66 74 65 72 20 69   removed after i
433b0 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 0a 09  t is invoked. ..
433c0 09 20 2a 20 20 4e 6f 74 65 20 74 68 61 74 20 69  . *  Note that i
433d0 66 20 74 68 65 20 67 69 76 65 6e 20 74 69 6d 65  f the given time
433e0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
433f0 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 70  e current transp
43400 6f 72 74 20 74 69 6d 65 2c 20 0a 09 09 20 2a 20  ort time, ... * 
43410 20 74 68 65 20 65 76 65 6e 74 20 77 69 6c 6c 20   the event will 
43420 62 65 20 69 6e 76 6f 6b 65 64 20 69 6d 6d 65 64  be invoked immed
43430 69 61 74 65 6c 79 2e 20 0a 09 09 20 2a 20 20 40  iately. ... *  @
43440 70 61 72 61 6d 20 7b 46 75 6e 63 74 69 6f 6e 7d  param {Function}
43450 20 63 61 6c 6c 62 61 63 6b 20 54 68 65 20 63 61   callback The ca
43460 6c 6c 62 61 63 6b 20 74 6f 20 69 6e 76 6f 6b 65  llback to invoke
43470 20 6f 6e 63 65 2e 0a 09 09 20 2a 20 20 40 70 61   once.... *  @pa
43480 72 61 6d 20 7b 54 72 61 6e 73 70 6f 72 74 54 69  ram {TransportTi
43490 6d 65 7d 20 74 69 6d 65 20 54 68 65 20 74 69 6d  me} time The tim
434a0 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 73  e the callback s
434b0 68 6f 75 6c 64 20 62 65 20 69 6e 76 6f 6b 65 64  hould be invoked
434c0 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73  .... *  @returns
434d0 20 7b 4e 75 6d 62 65 72 7d 20 54 68 65 20 49 44   {Number} The ID
434e0 20 6f 66 20 74 68 65 20 73 63 68 65 64 75 6c 65   of the schedule
434f0 64 20 65 76 65 6e 74 2e 20 0a 09 09 20 2a 2f 0a  d event. ... */.
43500 09 20 20 20 20 54 6f 6e 65 2e 54 72 61 6e 73 70  .    Tone.Transp
43510 6f 72 74 2e 70 72 6f 74 6f 74 79 70 65 2e 73 63  ort.prototype.sc
43520 68 65 64 75 6c 65 4f 6e 63 65 20 3d 20 66 75 6e  heduleOnce = fun
43530 63 74 69 6f 6e 20 28 63 61 6c 6c 62 61 63 6b 2c  ction (callback,
43540 20 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20   time) {..      
43550 20 20 76 61 72 20 69 64 20 3d 20 74 68 69 73 2e    var id = this.
43560 5f 65 76 65 6e 74 49 44 2b 2b 3b 0a 09 20 20 20  _eventID++;..   
43570 20 20 20 20 20 76 61 72 20 65 76 65 6e 74 20 3d       var event =
43580 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
43590 27 74 69 6d 65 27 3a 20 74 68 69 73 2e 74 6f 54  'time': this.toT
435a0 69 63 6b 73 28 74 69 6d 65 29 2c 0a 09 20 20 20  icks(time),..   
435b0 20 20 20 20 20 20 20 20 20 27 63 61 6c 6c 62 61           'callba
435c0 63 6b 27 3a 20 63 61 6c 6c 62 61 63 6b 2c 0a 09  ck': callback,..
435d0 20 20 20 20 20 20 20 20 20 20 20 20 27 69 64 27              'id'
435e0 3a 20 69 64 0a 09 20 20 20 20 20 20 20 20 7d 3b  : id..        };
435f0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
43600 73 63 68 65 64 75 6c 65 64 45 76 65 6e 74 73 5b  scheduledEvents[
43610 69 64 2e 74 6f 53 74 72 69 6e 67 28 29 5d 20 3d  id.toString()] =
43620 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
43630 27 65 76 65 6e 74 27 3a 20 65 76 65 6e 74 2c 0a  'event': event,.
43640 09 20 20 20 20 20 20 20 20 20 20 20 20 27 74 69  .            'ti
43650 6d 65 6c 69 6e 65 27 3a 20 74 68 69 73 2e 5f 6f  meline': this._o
43660 6e 63 65 45 76 65 6e 74 73 0a 09 20 20 20 20 20  nceEvents..     
43670 20 20 20 7d 3b 0a 09 20 20 20 20 20 20 20 20 74     };..        t
43680 68 69 73 2e 5f 6f 6e 63 65 45 76 65 6e 74 73 2e  his._onceEvents.
43690 61 64 64 28 65 76 65 6e 74 29 3b 0a 09 20 20 20  add(event);..   
436a0 20 20 20 20 20 72 65 74 75 72 6e 20 69 64 3b 0a       return id;.
436b0 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
436c0 0a 09 09 20 2a 20 20 43 6c 65 61 72 20 74 68 65  ... *  Clear the
436d0 20 70 61 73 73 65 64 20 69 6e 20 65 76 65 6e 74   passed in event
436e0 20 69 64 20 66 72 6f 6d 20 74 68 65 20 74 69 6d   id from the tim
436f0 65 6c 69 6e 65 0a 09 09 20 2a 20 20 40 70 61 72  eline... *  @par
43700 61 6d 20 7b 4e 75 6d 62 65 72 7d 20 65 76 65 6e  am {Number} even
43710 74 49 64 20 54 68 65 20 69 64 20 6f 66 20 74 68  tId The id of th
43720 65 20 65 76 65 6e 74 2e 0a 09 09 20 2a 20 20 40  e event.... *  @
43730 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 54 72  returns {Tone.Tr
43740 61 6e 73 70 6f 72 74 7d 20 74 68 69 73 0a 09 09  ansport} this...
43750 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 72   */..    Tone.Tr
43760 61 6e 73 70 6f 72 74 2e 70 72 6f 74 6f 74 79 70  ansport.prototyp
43770 65 2e 63 6c 65 61 72 20 3d 20 66 75 6e 63 74 69  e.clear = functi
43780 6f 6e 20 28 65 76 65 6e 74 49 64 29 20 7b 0a 09  on (eventId) {..
43790 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73          if (this
437a0 2e 5f 73 63 68 65 64 75 6c 65 64 45 76 65 6e 74  ._scheduledEvent
437b0 73 2e 68 61 73 4f 77 6e 50 72 6f 70 65 72 74 79  s.hasOwnProperty
437c0 28 65 76 65 6e 74 49 64 29 29 20 7b 0a 09 20 20  (eventId)) {..  
437d0 20 20 20 20 20 20 20 20 20 20 76 61 72 20 69 74            var it
437e0 65 6d 20 3d 20 74 68 69 73 2e 5f 73 63 68 65 64  em = this._sched
437f0 75 6c 65 64 45 76 65 6e 74 73 5b 65 76 65 6e 74  uledEvents[event
43800 49 64 2e 74 6f 53 74 72 69 6e 67 28 29 5d 3b 0a  Id.toString()];.
43810 09 20 20 20 20 20 20 20 20 20 20 20 20 69 74 65  .            ite
43820 6d 2e 74 69 6d 65 6c 69 6e 65 2e 72 65 6d 6f 76  m.timeline.remov
43830 65 28 69 74 65 6d 2e 65 76 65 6e 74 29 3b 0a 09  e(item.event);..
43840 20 20 20 20 20 20 20 20 20 20 20 20 64 65 6c 65              dele
43850 74 65 20 74 68 69 73 2e 5f 73 63 68 65 64 75 6c  te this._schedul
43860 65 64 45 76 65 6e 74 73 5b 65 76 65 6e 74 49 64  edEvents[eventId
43870 2e 74 6f 53 74 72 69 6e 67 28 29 5d 3b 0a 09 20  .toString()];.. 
43880 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
43890 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09    return this;..
438a0 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
438b0 09 09 20 2a 20 20 52 65 6d 6f 76 65 20 73 63 68  .. *  Remove sch
438c0 65 64 75 6c 65 64 20 65 76 65 6e 74 73 20 66 72  eduled events fr
438d0 6f 6d 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20  om the timeline 
438e0 61 66 74 65 72 0a 09 09 20 2a 20 20 74 68 65 20  after... *  the 
438f0 67 69 76 65 6e 20 74 69 6d 65 2e 20 52 65 70 65  given time. Repe
43900 61 74 65 64 20 65 76 65 6e 74 73 20 77 69 6c 6c  ated events will
43910 20 62 65 20 72 65 6d 6f 76 65 64 0a 09 09 20 2a   be removed... *
43920 20 20 69 66 20 74 68 65 69 72 20 73 74 61 72 74    if their start
43930 54 69 6d 65 20 69 73 20 61 66 74 65 72 20 74 68  Time is after th
43940 65 20 67 69 76 65 6e 20 74 69 6d 65 0a 09 09 20  e given time... 
43950 2a 20 20 40 70 61 72 61 6d 20 7b 54 72 61 6e 73  *  @param {Trans
43960 70 6f 72 74 54 69 6d 65 7d 20 5b 61 66 74 65 72  portTime} [after
43970 3d 30 5d 20 43 6c 65 61 72 20 61 6c 6c 20 65 76  =0] Clear all ev
43980 65 6e 74 73 20 61 66 74 65 72 0a 09 09 20 2a 20  ents after... * 
43990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
439a0 20 20 20 20 20 20 20 20 20 74 68 69 73 20 74 69           this ti
439b0 6d 65 2e 20 0a 09 09 20 2a 20 20 40 72 65 74 75  me. ... *  @retu
439c0 72 6e 73 20 7b 54 6f 6e 65 2e 54 72 61 6e 73 70  rns {Tone.Transp
439d0 6f 72 74 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a  ort} this... */.
439e0 09 20 20 20 20 54 6f 6e 65 2e 54 72 61 6e 73 70  .    Tone.Transp
439f0 6f 72 74 2e 70 72 6f 74 6f 74 79 70 65 2e 63 61  ort.prototype.ca
43a00 6e 63 65 6c 20 3d 20 66 75 6e 63 74 69 6f 6e 20  ncel = function 
43a10 28 61 66 74 65 72 29 20 7b 0a 09 20 20 20 20 20  (after) {..     
43a20 20 20 20 61 66 74 65 72 20 3d 20 74 68 69 73 2e     after = this.
43a30 64 65 66 61 75 6c 74 41 72 67 28 61 66 74 65 72  defaultArg(after
43a40 2c 20 30 29 3b 0a 09 20 20 20 20 20 20 20 20 61  , 0);..        a
43a50 66 74 65 72 20 3d 20 74 68 69 73 2e 74 6f 54 69  fter = this.toTi
43a60 63 6b 73 28 61 66 74 65 72 29 3b 0a 09 20 20 20  cks(after);..   
43a70 20 20 20 20 20 74 68 69 73 2e 5f 74 69 6d 65 6c       this._timel
43a80 69 6e 65 2e 63 61 6e 63 65 6c 28 61 66 74 65 72  ine.cancel(after
43a90 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
43aa0 2e 5f 6f 6e 63 65 45 76 65 6e 74 73 2e 63 61 6e  ._onceEvents.can
43ab0 63 65 6c 28 61 66 74 65 72 29 3b 0a 09 20 20 20  cel(after);..   
43ac0 20 20 20 20 20 74 68 69 73 2e 5f 72 65 70 65 61       this._repea
43ad0 74 65 64 45 76 65 6e 74 73 2e 63 61 6e 63 65 6c  tedEvents.cancel
43ae0 28 61 66 74 65 72 29 3b 0a 09 20 20 20 20 20 20  (after);..      
43af0 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09    return this;..
43b00 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2f 2f 2f      };..    ////
43b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
43b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
43b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
43b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
43b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20  ///////////..   
43b60 20 2f 2f 09 53 54 41 52 54 2f 53 54 4f 50 2f 50   //.START/STOP/P
43b70 41 55 53 45 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f  AUSE..    //////
43b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
43b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
43ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
43bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
43bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 2f  /////////..    /
43bd0 2a 2a 0a 09 09 20 2a 20 20 42 69 6e 64 20 73 74  **... *  Bind st
43be0 61 72 74 2f 73 74 6f 70 2f 70 61 75 73 65 20 65  art/stop/pause e
43bf0 76 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 63  vents from the c
43c00 6c 6f 63 6b 20 61 6e 64 20 65 6d 69 74 20 74 68  lock and emit th
43c10 65 6d 2e 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  em.... */..    T
43c20 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 2e 70 72  one.Transport.pr
43c30 6f 74 6f 74 79 70 65 2e 5f 62 69 6e 64 43 6c 6f  ototype._bindClo
43c40 63 6b 45 76 65 6e 74 73 20 3d 20 66 75 6e 63 74  ckEvents = funct
43c50 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
43c60 20 20 74 68 69 73 2e 5f 63 6c 6f 63 6b 2e 6f 6e    this._clock.on
43c70 28 27 73 74 61 72 74 27 2c 20 66 75 6e 63 74 69  ('start', functi
43c80 6f 6e 20 28 74 69 6d 65 2c 20 6f 66 66 73 65 74  on (time, offset
43c90 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
43ca0 20 6f 66 66 73 65 74 20 3d 20 54 6f 6e 65 2e 54   offset = Tone.T
43cb0 69 6d 65 28 74 68 69 73 2e 5f 63 6c 6f 63 6b 2e  ime(this._clock.
43cc0 74 69 63 6b 73 2c 20 27 69 27 29 2e 74 6f 53 65  ticks, 'i').toSe
43cd0 63 6f 6e 64 73 28 29 3b 0a 09 20 20 20 20 20 20  conds();..      
43ce0 20 20 20 20 20 20 74 68 69 73 2e 65 6d 69 74 28        this.emit(
43cf0 27 73 74 61 72 74 27 2c 20 74 69 6d 65 2c 20 6f  'start', time, o
43d00 66 66 73 65 74 29 3b 0a 09 20 20 20 20 20 20 20  ffset);..       
43d10 20 7d 2e 62 69 6e 64 28 74 68 69 73 29 29 3b 0a   }.bind(this));.
43d20 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 63  .        this._c
43d30 6c 6f 63 6b 2e 6f 6e 28 27 73 74 6f 70 27 2c 20  lock.on('stop', 
43d40 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65 29 20  function (time) 
43d50 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
43d60 68 69 73 2e 65 6d 69 74 28 27 73 74 6f 70 27 2c  his.emit('stop',
43d70 20 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20   time);..       
43d80 20 7d 2e 62 69 6e 64 28 74 68 69 73 29 29 3b 0a   }.bind(this));.
43d90 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 63  .        this._c
43da0 6c 6f 63 6b 2e 6f 6e 28 27 70 61 75 73 65 27 2c  lock.on('pause',
43db0 20 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65 29   function (time)
43dc0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
43dd0 74 68 69 73 2e 65 6d 69 74 28 27 70 61 75 73 65  this.emit('pause
43de0 27 2c 20 74 69 6d 65 29 3b 0a 09 20 20 20 20 20  ', time);..     
43df0 20 20 20 7d 2e 62 69 6e 64 28 74 68 69 73 29 29     }.bind(this))
43e00 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  ;..    };..    /
43e10 2a 2a 0a 09 09 20 2a 20 20 52 65 74 75 72 6e 73  **... *  Returns
43e20 20 74 68 65 20 70 6c 61 79 62 61 63 6b 20 73 74   the playback st
43e30 61 74 65 20 6f 66 20 74 68 65 20 73 6f 75 72 63  ate of the sourc
43e40 65 2c 20 65 69 74 68 65 72 20 22 73 74 61 72 74  e, either "start
43e50 65 64 22 2c 20 22 73 74 6f 70 70 65 64 22 2c 20  ed", "stopped", 
43e60 6f 72 20 22 70 61 75 73 65 64 22 0a 09 09 20 2a  or "paused"... *
43e70 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 53 74    @type {Tone.St
43e80 61 74 65 7d 0a 09 09 20 2a 20 20 40 72 65 61 64  ate}... *  @read
43e90 4f 6e 6c 79 0a 09 09 20 2a 20 20 40 6d 65 6d 62  Only... *  @memb
43ea0 65 72 4f 66 20 54 6f 6e 65 2e 54 72 61 6e 73 70  erOf Tone.Transp
43eb0 6f 72 74 23 0a 09 09 20 2a 20 20 40 6e 61 6d 65  ort#... *  @name
43ec0 20 73 74 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20   state... */..  
43ed0 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50    Object.defineP
43ee0 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 54 72 61  roperty(Tone.Tra
43ef0 6e 73 70 6f 72 74 2e 70 72 6f 74 6f 74 79 70 65  nsport.prototype
43f00 2c 20 27 73 74 61 74 65 27 2c 20 7b 0a 09 20 20  , 'state', {..  
43f10 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74        get: funct
43f20 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
43f30 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
43f40 73 2e 5f 63 6c 6f 63 6b 2e 67 65 74 53 74 61 74  s._clock.getStat
43f50 65 41 74 54 69 6d 65 28 74 68 69 73 2e 6e 6f 77  eAtTime(this.now
43f60 28 29 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a  ());..        }.
43f70 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a  .    });..    /*
43f80 2a 0a 09 09 20 2a 20 20 53 74 61 72 74 20 74 68  *... *  Start th
43f90 65 20 74 72 61 6e 73 70 6f 72 74 20 61 6e 64 20  e transport and 
43fa0 61 6c 6c 20 73 6f 75 72 63 65 73 20 73 79 6e 63  all sources sync
43fb0 65 64 20 74 6f 20 74 68 65 20 74 72 61 6e 73 70  ed to the transp
43fc0 6f 72 74 2e 0a 09 09 20 2a 20 20 40 70 61 72 61  ort.... *  @para
43fd0 6d 20 20 7b 54 69 6d 65 7d 20 5b 74 69 6d 65 3d  m  {Time} [time=
43fe0 6e 6f 77 5d 20 54 68 65 20 74 69 6d 65 20 77 68  now] The time wh
43ff0 65 6e 20 74 68 65 20 74 72 61 6e 73 70 6f 72 74  en the transport
44000 20 73 68 6f 75 6c 64 20 73 74 61 72 74 2e 0a 09   should start...
44010 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 54 72  . *  @param  {Tr
44020 61 6e 73 70 6f 72 74 54 69 6d 65 3d 7d 20 6f 66  ansportTime=} of
44030 66 73 65 74 20 54 68 65 20 74 69 6d 65 6c 69 6e  fset The timelin
44040 65 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72  e offset to star
44050 74 20 74 68 65 20 74 72 61 6e 73 70 6f 72 74 2e  t the transport.
44060 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20  ... *  @returns 
44070 7b 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 7d  {Tone.Transport}
44080 20 74 68 69 73 0a 09 09 20 2a 20 20 40 65 78 61   this... *  @exa
44090 6d 70 6c 65 0a 09 09 20 2a 20 2f 2f 73 74 61 72  mple... * //star
440a0 74 20 74 68 65 20 74 72 61 6e 73 70 6f 72 74 20  t the transport 
440b0 69 6e 20 6f 6e 65 20 73 65 63 6f 6e 64 20 73 74  in one second st
440c0 61 72 74 69 6e 67 20 61 74 20 62 65 67 69 6e 6e  arting at beginn
440d0 69 6e 67 20 6f 66 20 74 68 65 20 35 74 68 20 6d  ing of the 5th m
440e0 65 61 73 75 72 65 2e 20 0a 09 09 20 2a 20 54 6f  easure. ... * To
440f0 6e 65 2e 54 72 61 6e 73 70 6f 72 74 2e 73 74 61  ne.Transport.sta
44100 72 74 28 22 2b 31 22 2c 20 22 34 3a 30 3a 30 22  rt("+1", "4:0:0"
44110 29 3b 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  );... */..    To
44120 6e 65 2e 54 72 61 6e 73 70 6f 72 74 2e 70 72 6f  ne.Transport.pro
44130 74 6f 74 79 70 65 2e 73 74 61 72 74 20 3d 20 66  totype.start = f
44140 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65 2c 20 6f  unction (time, o
44150 66 66 73 65 74 29 20 7b 0a 09 20 20 20 20 20 20  ffset) {..      
44160 20 20 2f 2f 73 74 61 72 74 20 74 68 65 20 63 6c    //start the cl
44170 6f 63 6b 0a 09 20 20 20 20 20 20 20 20 69 66 20  ock..        if 
44180 28 21 74 68 69 73 2e 69 73 55 6e 64 65 66 28 6f  (!this.isUndef(o
44190 66 66 73 65 74 29 29 20 7b 0a 09 20 20 20 20 20  ffset)) {..     
441a0 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20         offset = 
441b0 74 68 69 73 2e 74 6f 54 69 63 6b 73 28 6f 66 66  this.toTicks(off
441c0 73 65 74 29 3b 0a 09 20 20 20 20 20 20 20 20 7d  set);..        }
441d0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
441e0 63 6c 6f 63 6b 2e 73 74 61 72 74 28 74 69 6d 65  clock.start(time
441f0 2c 20 6f 66 66 73 65 74 29 3b 0a 09 20 20 20 20  , offset);..    
44200 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b      return this;
44210 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
44220 2a 0a 09 09 20 2a 20 20 53 74 6f 70 20 74 68 65  *... *  Stop the
44230 20 74 72 61 6e 73 70 6f 72 74 20 61 6e 64 20 61   transport and a
44240 6c 6c 20 73 6f 75 72 63 65 73 20 73 79 6e 63 65  ll sources synce
44250 64 20 74 6f 20 74 68 65 20 74 72 61 6e 73 70 6f  d to the transpo
44260 72 74 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  rt.... *  @param
44270 20 20 7b 54 69 6d 65 7d 20 5b 74 69 6d 65 3d 6e    {Time} [time=n
44280 6f 77 5d 20 54 68 65 20 74 69 6d 65 20 77 68 65  ow] The time whe
44290 6e 20 74 68 65 20 74 72 61 6e 73 70 6f 72 74 20  n the transport 
442a0 73 68 6f 75 6c 64 20 73 74 6f 70 2e 20 0a 09 09  should stop. ...
442b0 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f   *  @returns {To
442c0 6e 65 2e 54 72 61 6e 73 70 6f 72 74 7d 20 74 68  ne.Transport} th
442d0 69 73 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c  is... *  @exampl
442e0 65 0a 09 09 20 2a 20 54 6f 6e 65 2e 54 72 61 6e  e... * Tone.Tran
442f0 73 70 6f 72 74 2e 73 74 6f 70 28 29 3b 0a 09 09  sport.stop();...
44300 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 72   */..    Tone.Tr
44310 61 6e 73 70 6f 72 74 2e 70 72 6f 74 6f 74 79 70  ansport.prototyp
44320 65 2e 73 74 6f 70 20 3d 20 66 75 6e 63 74 69 6f  e.stop = functio
44330 6e 20 28 74 69 6d 65 29 20 7b 0a 09 20 20 20 20  n (time) {..    
44340 20 20 20 20 74 68 69 73 2e 5f 63 6c 6f 63 6b 2e      this._clock.
44350 73 74 6f 70 28 74 69 6d 65 29 3b 0a 09 20 20 20  stop(time);..   
44360 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
44370 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  ;..    };..    /
44380 2a 2a 0a 09 09 20 2a 20 20 50 61 75 73 65 20 74  **... *  Pause t
44390 68 65 20 74 72 61 6e 73 70 6f 72 74 20 61 6e 64  he transport and
443a0 20 61 6c 6c 20 73 6f 75 72 63 65 73 20 73 79 6e   all sources syn
443b0 63 65 64 20 74 6f 20 74 68 65 20 74 72 61 6e 73  ced to the trans
443c0 70 6f 72 74 2e 0a 09 09 20 2a 20 20 40 70 61 72  port.... *  @par
443d0 61 6d 20 20 7b 54 69 6d 65 7d 20 5b 74 69 6d 65  am  {Time} [time
443e0 3d 6e 6f 77 5d 0a 09 09 20 2a 20 20 40 72 65 74  =now]... *  @ret
443f0 75 72 6e 73 20 7b 54 6f 6e 65 2e 54 72 61 6e 73  urns {Tone.Trans
44400 70 6f 72 74 7d 20 74 68 69 73 0a 09 09 20 2a 2f  port} this... */
44410 0a 09 20 20 20 20 54 6f 6e 65 2e 54 72 61 6e 73  ..    Tone.Trans
44420 70 6f 72 74 2e 70 72 6f 74 6f 74 79 70 65 2e 70  port.prototype.p
44430 61 75 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20  ause = function 
44440 28 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20  (time) {..      
44450 20 20 74 68 69 73 2e 5f 63 6c 6f 63 6b 2e 70 61    this._clock.pa
44460 75 73 65 28 74 69 6d 65 29 3b 0a 09 20 20 20 20  use(time);..    
44470 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b      return this;
44480 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2f  ..    };..    //
44490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
444a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
444b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
444c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
444d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20  /////////////.. 
444e0 20 20 20 2f 2f 09 53 45 54 54 45 52 53 2f 47 45     //.SETTERS/GE
444f0 54 54 45 52 53 0a 09 20 20 20 20 2f 2f 2f 2f 2f  TTERS..    /////
44500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20  //////////..    
44550 2f 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20 74 69  /**... *  The ti
44560 6d 65 20 73 69 67 6e 61 74 75 72 65 20 61 73 20  me signature as 
44570 6a 75 73 74 20 74 68 65 20 6e 75 6d 65 72 61 74  just the numerat
44580 6f 72 20 6f 76 65 72 20 34 2e 20 0a 09 09 20 2a  or over 4. ... *
44590 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 34 2f    For example 4/
445a0 34 20 77 6f 75 6c 64 20 62 65 20 6a 75 73 74 20  4 would be just 
445b0 34 20 61 6e 64 20 36 2f 38 20 77 6f 75 6c 64 20  4 and 6/8 would 
445c0 62 65 20 33 2e 0a 09 09 20 2a 20 20 40 6d 65 6d  be 3.... *  @mem
445d0 62 65 72 4f 66 20 54 6f 6e 65 2e 54 72 61 6e 73  berOf Tone.Trans
445e0 70 6f 72 74 23 0a 09 09 20 2a 20 20 40 74 79 70  port#... *  @typ
445f0 65 20 7b 4e 75 6d 62 65 72 7c 41 72 72 61 79 7d  e {Number|Array}
44600 0a 09 09 20 2a 20 20 40 6e 61 6d 65 20 74 69 6d  ... *  @name tim
44610 65 53 69 67 6e 61 74 75 72 65 0a 09 09 20 2a 20  eSignature... * 
44620 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 2f   @example... * /
44630 2f 63 6f 6d 6d 6f 6e 20 74 69 6d 65 0a 09 09 20  /common time... 
44640 2a 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74  * Tone.Transport
44650 2e 74 69 6d 65 53 69 67 6e 61 74 75 72 65 20 3d  .timeSignature =
44660 20 34 3b 0a 09 09 20 2a 20 2f 2f 20 37 2f 38 0a   4;... * // 7/8.
44670 09 09 20 2a 20 54 6f 6e 65 2e 54 72 61 6e 73 70  .. * Tone.Transp
44680 6f 72 74 2e 74 69 6d 65 53 69 67 6e 61 74 75 72  ort.timeSignatur
44690 65 20 3d 20 5b 37 2c 20 38 5d 3b 0a 09 09 20 2a  e = [7, 8];... *
446a0 20 2f 2f 74 68 69 73 20 77 69 6c 6c 20 62 65 20   //this will be 
446b0 72 65 64 75 63 65 64 20 74 6f 20 61 20 73 69 6e  reduced to a sin
446c0 67 6c 65 20 6e 75 6d 62 65 72 0a 09 09 20 2a 20  gle number... * 
446d0 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 2e 74  Tone.Transport.t
446e0 69 6d 65 53 69 67 6e 61 74 75 72 65 3b 20 2f 2f  imeSignature; //
446f0 72 65 74 75 72 6e 73 20 33 2e 35 0a 09 09 20 2a  returns 3.5... *
44700 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65  /..    Object.de
44710 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e  fineProperty(Ton
44720 65 2e 54 72 61 6e 73 70 6f 72 74 2e 70 72 6f 74  e.Transport.prot
44730 6f 74 79 70 65 2c 20 27 74 69 6d 65 53 69 67 6e  otype, 'timeSign
44740 61 74 75 72 65 27 2c 20 7b 0a 09 20 20 20 20 20  ature', {..     
44750 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e     get: function
44760 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20   () {..         
44770 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f     return this._
44780 74 69 6d 65 53 69 67 6e 61 74 75 72 65 3b 0a 09  timeSignature;..
44790 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20          },..    
447a0 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f      set: functio
447b0 6e 20 28 74 69 6d 65 53 69 67 29 20 7b 0a 09 20  n (timeSig) {.. 
447c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
447d0 68 69 73 2e 69 73 41 72 72 61 79 28 74 69 6d 65  his.isArray(time
447e0 53 69 67 29 29 20 7b 0a 09 20 20 20 20 20 20 20  Sig)) {..       
447f0 20 20 20 20 20 20 20 20 20 74 69 6d 65 53 69 67           timeSig
44800 20 3d 20 74 69 6d 65 53 69 67 5b 30 5d 20 2f 20   = timeSig[0] / 
44810 74 69 6d 65 53 69 67 5b 31 5d 20 2a 20 34 3b 0a  timeSig[1] * 4;.
44820 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09  .            }..
44830 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
44840 2e 5f 74 69 6d 65 53 69 67 6e 61 74 75 72 65 20  ._timeSignature 
44850 3d 20 74 69 6d 65 53 69 67 3b 0a 09 20 20 20 20  = timeSig;..    
44860 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09      }..    });..
44870 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 57 68 65      /**... * Whe
44880 6e 20 74 68 65 20 54 6f 6e 65 2e 54 72 61 6e 73  n the Tone.Trans
44890 70 6f 72 74 2e 6c 6f 6f 70 20 3d 20 74 72 75 65  port.loop = true
448a0 2c 20 74 68 69 73 20 69 73 20 74 68 65 20 73 74  , this is the st
448b0 61 72 74 69 6e 67 20 70 6f 73 69 74 69 6f 6e 20  arting position 
448c0 6f 66 20 74 68 65 20 6c 6f 6f 70 2e 0a 09 09 20  of the loop.... 
448d0 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65  * @memberOf Tone
448e0 2e 54 72 61 6e 73 70 6f 72 74 23 0a 09 09 20 2a  .Transport#... *
448f0 20 40 74 79 70 65 20 7b 54 72 61 6e 73 70 6f 72   @type {Transpor
44900 74 54 69 6d 65 7d 0a 09 09 20 2a 20 40 6e 61 6d  tTime}... * @nam
44910 65 20 6c 6f 6f 70 53 74 61 72 74 0a 09 09 20 2a  e loopStart... *
44920 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65  /..    Object.de
44930 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e  fineProperty(Ton
44940 65 2e 54 72 61 6e 73 70 6f 72 74 2e 70 72 6f 74  e.Transport.prot
44950 6f 74 79 70 65 2c 20 27 6c 6f 6f 70 53 74 61 72  otype, 'loopStar
44960 74 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67  t', {..        g
44970 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  et: function () 
44980 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
44990 65 74 75 72 6e 20 54 6f 6e 65 2e 54 72 61 6e 73  eturn Tone.Trans
449a0 70 6f 72 74 54 69 6d 65 28 74 68 69 73 2e 5f 6c  portTime(this._l
449b0 6f 6f 70 53 74 61 72 74 2c 20 27 69 27 29 2e 74  oopStart, 'i').t
449c0 6f 53 65 63 6f 6e 64 73 28 29 3b 0a 09 20 20 20  oSeconds();..   
449d0 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20       },..       
449e0 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   set: function (
449f0 73 74 61 72 74 50 6f 73 69 74 69 6f 6e 29 20 7b  startPosition) {
44a00 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
44a10 69 73 2e 5f 6c 6f 6f 70 53 74 61 72 74 20 3d 20  is._loopStart = 
44a20 74 68 69 73 2e 74 6f 54 69 63 6b 73 28 73 74 61  this.toTicks(sta
44a30 72 74 50 6f 73 69 74 69 6f 6e 29 3b 0a 09 20 20  rtPosition);..  
44a40 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b        }..    });
44a50 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 57  ..    /**... * W
44a60 68 65 6e 20 74 68 65 20 54 6f 6e 65 2e 54 72 61  hen the Tone.Tra
44a70 6e 73 70 6f 72 74 2e 6c 6f 6f 70 20 3d 20 74 72  nsport.loop = tr
44a80 75 65 2c 20 74 68 69 73 20 69 73 20 74 68 65 20  ue, this is the 
44a90 65 6e 64 69 6e 67 20 70 6f 73 69 74 69 6f 6e 20  ending position 
44aa0 6f 66 20 74 68 65 20 6c 6f 6f 70 2e 0a 09 09 20  of the loop.... 
44ab0 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65  * @memberOf Tone
44ac0 2e 54 72 61 6e 73 70 6f 72 74 23 0a 09 09 20 2a  .Transport#... *
44ad0 20 40 74 79 70 65 20 7b 54 72 61 6e 73 70 6f 72   @type {Transpor
44ae0 74 54 69 6d 65 7d 0a 09 09 20 2a 20 40 6e 61 6d  tTime}... * @nam
44af0 65 20 6c 6f 6f 70 45 6e 64 0a 09 09 20 2a 2f 0a  e loopEnd... */.
44b00 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69  .    Object.defi
44b10 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e  neProperty(Tone.
44b20 54 72 61 6e 73 70 6f 72 74 2e 70 72 6f 74 6f 74  Transport.protot
44b30 79 70 65 2c 20 27 6c 6f 6f 70 45 6e 64 27 2c 20  ype, 'loopEnd', 
44b40 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a 20  {..        get: 
44b50 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
44b60 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
44b70 6e 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74  n Tone.Transport
44b80 54 69 6d 65 28 74 68 69 73 2e 5f 6c 6f 6f 70 45  Time(this._loopE
44b90 6e 64 2c 20 27 69 27 29 2e 74 6f 53 65 63 6f 6e  nd, 'i').toSecon
44ba0 64 73 28 29 3b 0a 09 20 20 20 20 20 20 20 20 7d  ds();..        }
44bb0 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20  ,..        set: 
44bc0 66 75 6e 63 74 69 6f 6e 20 28 65 6e 64 50 6f 73  function (endPos
44bd0 69 74 69 6f 6e 29 20 7b 0a 09 20 20 20 20 20 20  ition) {..      
44be0 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 6f 6f 70        this._loop
44bf0 45 6e 64 20 3d 20 74 68 69 73 2e 74 6f 54 69 63  End = this.toTic
44c00 6b 73 28 65 6e 64 50 6f 73 69 74 69 6f 6e 29 3b  ks(endPosition);
44c10 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
44c20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09   });..    /**...
44c30 20 2a 20 20 53 65 74 20 74 68 65 20 6c 6f 6f 70   *  Set the loop
44c40 20 73 74 61 72 74 20 61 6e 64 20 73 74 6f 70 20   start and stop 
44c50 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
44c60 2e 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  . ... *  @param 
44c70 7b 54 72 61 6e 73 70 6f 72 74 54 69 6d 65 7d 20  {TransportTime} 
44c80 73 74 61 72 74 50 6f 73 69 74 69 6f 6e 20 0a 09  startPosition ..
44c90 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 54 72 61  . *  @param {Tra
44ca0 6e 73 70 6f 72 74 54 69 6d 65 7d 20 65 6e 64 50  nsportTime} endP
44cb0 6f 73 69 74 69 6f 6e 20 20 20 0a 09 09 20 2a 20  osition   ... * 
44cc0 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e   @returns {Tone.
44cd0 54 72 61 6e 73 70 6f 72 74 7d 20 74 68 69 73 0a  Transport} this.
44ce0 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09  .. *  @example..
44cf0 09 20 2a 20 2f 2f 6c 6f 6f 70 20 6f 76 65 72 20  . * //loop over 
44d00 74 68 65 20 66 69 72 73 74 20 6d 65 61 73 75 72  the first measur
44d10 65 0a 09 09 20 2a 20 54 6f 6e 65 2e 54 72 61 6e  e... * Tone.Tran
44d20 73 70 6f 72 74 2e 73 65 74 4c 6f 6f 70 50 6f 69  sport.setLoopPoi
44d30 6e 74 73 28 30 2c 20 22 31 6d 22 29 3b 0a 09 09  nts(0, "1m");...
44d40 20 2a 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72   * Tone.Transpor
44d50 74 2e 6c 6f 6f 70 20 3d 20 74 72 75 65 3b 0a 09  t.loop = true;..
44d60 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54  . */..    Tone.T
44d70 72 61 6e 73 70 6f 72 74 2e 70 72 6f 74 6f 74 79  ransport.prototy
44d80 70 65 2e 73 65 74 4c 6f 6f 70 50 6f 69 6e 74 73  pe.setLoopPoints
44d90 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 73 74 61   = function (sta
44da0 72 74 50 6f 73 69 74 69 6f 6e 2c 20 65 6e 64 50  rtPosition, endP
44db0 6f 73 69 74 69 6f 6e 29 20 7b 0a 09 20 20 20 20  osition) {..    
44dc0 20 20 20 20 74 68 69 73 2e 6c 6f 6f 70 53 74 61      this.loopSta
44dd0 72 74 20 3d 20 73 74 61 72 74 50 6f 73 69 74 69  rt = startPositi
44de0 6f 6e 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  on;..        thi
44df0 73 2e 6c 6f 6f 70 45 6e 64 20 3d 20 65 6e 64 50  s.loopEnd = endP
44e00 6f 73 69 74 69 6f 6e 3b 0a 09 20 20 20 20 20 20  osition;..      
44e10 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09    return this;..
44e20 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
44e30 09 09 20 2a 20 20 54 68 65 20 73 77 69 6e 67 20  .. *  The swing 
44e40 76 61 6c 75 65 2e 20 42 65 74 77 65 65 6e 20 30  value. Between 0
44e50 2d 31 20 77 68 65 72 65 20 31 20 65 71 75 61 6c  -1 where 1 equal
44e60 20 74 6f 20 0a 09 09 20 2a 20 20 74 68 65 20 6e   to ... *  the n
44e70 6f 74 65 20 2b 20 68 61 6c 66 20 74 68 65 20 73  ote + half the s
44e80 75 62 64 69 76 69 73 69 6f 6e 2e 0a 09 09 20 2a  ubdivision.... *
44e90 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65    @memberOf Tone
44ea0 2e 54 72 61 6e 73 70 6f 72 74 23 0a 09 09 20 2a  .Transport#... *
44eb0 20 20 40 74 79 70 65 20 7b 4e 6f 72 6d 61 6c 52    @type {NormalR
44ec0 61 6e 67 65 7d 0a 09 09 20 2a 20 20 40 6e 61 6d  ange}... *  @nam
44ed0 65 20 73 77 69 6e 67 0a 09 09 20 2a 2f 0a 09 20  e swing... */.. 
44ee0 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65     Object.define
44ef0 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 54 72  Property(Tone.Tr
44f00 61 6e 73 70 6f 72 74 2e 70 72 6f 74 6f 74 79 70  ansport.prototyp
44f10 65 2c 20 27 73 77 69 6e 67 27 2c 20 7b 0a 09 20  e, 'swing', {.. 
44f20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63         get: func
44f30 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
44f40 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
44f50 69 73 2e 5f 73 77 69 6e 67 41 6d 6f 75 6e 74 3b  is._swingAmount;
44f60 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20  ..        },..  
44f70 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74        set: funct
44f80 69 6f 6e 20 28 61 6d 6f 75 6e 74 29 20 7b 0a 09  ion (amount) {..
44f90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 73 63              //sc
44fa0 61 6c 65 20 74 68 65 20 76 61 6c 75 65 73 20 74  ale the values t
44fb0 6f 20 61 20 6e 6f 72 6d 61 6c 20 72 61 6e 67 65  o a normal range
44fc0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
44fd0 69 73 2e 5f 73 77 69 6e 67 41 6d 6f 75 6e 74 20  is._swingAmount 
44fe0 3d 20 61 6d 6f 75 6e 74 3b 0a 09 20 20 20 20 20  = amount;..     
44ff0 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20     }..    });.. 
45000 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 53 65 74     /**... *  Set
45010 20 74 68 65 20 73 75 62 64 69 76 69 73 69 6f 6e   the subdivision
45020 20 77 68 69 63 68 20 74 68 65 20 73 77 69 6e 67   which the swing
45030 20 77 69 6c 6c 20 62 65 20 61 70 70 6c 69 65 64   will be applied
45040 20 74 6f 2e 20 0a 09 09 20 2a 20 20 54 68 65 20   to. ... *  The 
45050 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73  default value is
45060 20 61 6e 20 38 74 68 20 6e 6f 74 65 2e 20 56 61   an 8th note. Va
45070 6c 75 65 20 6d 75 73 74 20 62 65 20 6c 65 73 73  lue must be less
45080 20 0a 09 09 20 2a 20 20 74 68 61 6e 20 61 20 71   ... *  than a q
45090 75 61 72 74 65 72 20 6e 6f 74 65 2e 0a 09 09 20  uarter note.... 
450a0 2a 20 20 0a 09 09 20 2a 20 20 40 6d 65 6d 62 65  *  ... *  @membe
450b0 72 4f 66 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f  rOf Tone.Transpo
450c0 72 74 23 0a 09 09 20 2a 20 20 40 74 79 70 65 20  rt#... *  @type 
450d0 7b 54 69 6d 65 7d 0a 09 09 20 2a 20 20 40 6e 61  {Time}... *  @na
450e0 6d 65 20 73 77 69 6e 67 53 75 62 64 69 76 69 73  me swingSubdivis
450f0 69 6f 6e 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f  ion... */..    O
45100 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70  bject.defineProp
45110 65 72 74 79 28 54 6f 6e 65 2e 54 72 61 6e 73 70  erty(Tone.Transp
45120 6f 72 74 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27  ort.prototype, '
45130 73 77 69 6e 67 53 75 62 64 69 76 69 73 69 6f 6e  swingSubdivision
45140 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65  ', {..        ge
45150 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b  t: function () {
45160 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
45170 74 75 72 6e 20 54 6f 6e 65 2e 54 69 6d 65 28 74  turn Tone.Time(t
45180 68 69 73 2e 5f 73 77 69 6e 67 54 69 63 6b 73 2c  his._swingTicks,
45190 20 27 69 27 29 2e 74 6f 4e 6f 74 61 74 69 6f 6e   'i').toNotation
451a0 28 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a  ();..        },.
451b0 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66 75  .        set: fu
451c0 6e 63 74 69 6f 6e 20 28 73 75 62 64 69 76 69 73  nction (subdivis
451d0 69 6f 6e 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ion) {..        
451e0 20 20 20 20 74 68 69 73 2e 5f 73 77 69 6e 67 54      this._swingT
451f0 69 63 6b 73 20 3d 20 74 68 69 73 2e 74 6f 54 69  icks = this.toTi
45200 63 6b 73 28 73 75 62 64 69 76 69 73 69 6f 6e 29  cks(subdivision)
45210 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20  ;..        }..  
45220 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09    });..    /**..
45230 09 20 2a 20 20 54 68 65 20 54 72 61 6e 73 70 6f  . *  The Transpo
45240 72 74 27 73 20 70 6f 73 69 74 69 6f 6e 20 69 6e  rt's position in
45250 20 42 61 72 73 3a 42 65 61 74 73 3a 53 69 78 74   Bars:Beats:Sixt
45260 65 65 6e 74 68 73 2e 0a 09 09 20 2a 20 20 53 65  eenths.... *  Se
45270 74 74 69 6e 67 20 74 68 65 20 76 61 6c 75 65 20  tting the value 
45280 77 69 6c 6c 20 6a 75 6d 70 20 74 6f 20 74 68 61  will jump to tha
45290 74 20 70 6f 73 69 74 69 6f 6e 20 72 69 67 68 74  t position right
452a0 20 61 77 61 79 2e 20 0a 09 09 20 2a 20 20 40 6d   away. ... *  @m
452b0 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 54 72 61  emberOf Tone.Tra
452c0 6e 73 70 6f 72 74 23 0a 09 09 20 2a 20 20 40 74  nsport#... *  @t
452d0 79 70 65 20 7b 42 61 72 73 42 65 61 74 73 53 69  ype {BarsBeatsSi
452e0 78 74 65 65 6e 74 68 73 7d 0a 09 09 20 2a 20 20  xteenths}... *  
452f0 40 6e 61 6d 65 20 70 6f 73 69 74 69 6f 6e 0a 09  @name position..
45300 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74  . */..    Object
45310 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28  .defineProperty(
45320 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 2e 70  Tone.Transport.p
45330 72 6f 74 6f 74 79 70 65 2c 20 27 70 6f 73 69 74  rototype, 'posit
45340 69 6f 6e 27 2c 20 7b 0a 09 20 20 20 20 20 20 20  ion', {..       
45350 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   get: function (
45360 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
45370 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 54 72 61   return Tone.Tra
45380 6e 73 70 6f 72 74 54 69 6d 65 28 74 68 69 73 2e  nsportTime(this.
45390 74 69 63 6b 73 2c 20 27 69 27 29 2e 74 6f 42 61  ticks, 'i').toBa
453a0 72 73 42 65 61 74 73 53 69 78 74 65 65 6e 74 68  rsBeatsSixteenth
453b0 73 28 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c  s();..        },
453c0 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66  ..        set: f
453d0 75 6e 63 74 69 6f 6e 20 28 70 72 6f 67 72 65 73  unction (progres
453e0 73 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  s) {..          
453f0 20 20 76 61 72 20 74 69 63 6b 73 20 3d 20 74 68    var ticks = th
45400 69 73 2e 74 6f 54 69 63 6b 73 28 70 72 6f 67 72  is.toTicks(progr
45410 65 73 73 29 3b 0a 09 20 20 20 20 20 20 20 20 20  ess);..         
45420 20 20 20 74 68 69 73 2e 74 69 63 6b 73 20 3d 20     this.ticks = 
45430 74 69 63 6b 73 3b 0a 09 20 20 20 20 20 20 20 20  ticks;..        
45440 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20  }..    });..    
45450 2f 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20 54 72  /**... *  The Tr
45460 61 6e 73 70 6f 72 74 27 73 20 70 6f 73 69 74 69  ansport's positi
45470 6f 6e 20 69 6e 20 73 65 63 6f 6e 64 73 0a 09 09  on in seconds...
45480 20 2a 20 20 53 65 74 74 69 6e 67 20 74 68 65 20   *  Setting the 
45490 76 61 6c 75 65 20 77 69 6c 6c 20 6a 75 6d 70 20  value will jump 
454a0 74 6f 20 74 68 61 74 20 70 6f 73 69 74 69 6f 6e  to that position
454b0 20 72 69 67 68 74 20 61 77 61 79 2e 20 0a 09 09   right away. ...
454c0 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f   *  @memberOf To
454d0 6e 65 2e 54 72 61 6e 73 70 6f 72 74 23 0a 09 09  ne.Transport#...
454e0 20 2a 20 20 40 74 79 70 65 20 7b 53 65 63 6f 6e   *  @type {Secon
454f0 64 73 7d 0a 09 09 20 2a 20 20 40 6e 61 6d 65 20  ds}... *  @name 
45500 73 65 63 6f 6e 64 73 0a 09 09 20 2a 2f 0a 09 20  seconds... */.. 
45510 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65     Object.define
45520 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 54 72  Property(Tone.Tr
45530 61 6e 73 70 6f 72 74 2e 70 72 6f 74 6f 74 79 70  ansport.prototyp
45540 65 2c 20 27 73 65 63 6f 6e 64 73 27 2c 20 7b 0a  e, 'seconds', {.
45550 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75  .        get: fu
45560 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
45570 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
45580 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 54 69  Tone.TransportTi
45590 6d 65 28 74 68 69 73 2e 74 69 63 6b 73 2c 20 27  me(this.ticks, '
455a0 69 27 29 2e 74 6f 53 65 63 6f 6e 64 73 28 29 3b  i').toSeconds();
455b0 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20  ..        },..  
455c0 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74        set: funct
455d0 69 6f 6e 20 28 70 72 6f 67 72 65 73 73 29 20 7b  ion (progress) {
455e0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61  ..            va
455f0 72 20 74 69 63 6b 73 20 3d 20 74 68 69 73 2e 74  r ticks = this.t
45600 6f 54 69 63 6b 73 28 70 72 6f 67 72 65 73 73 29  oTicks(progress)
45610 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  ;..            t
45620 68 69 73 2e 74 69 63 6b 73 20 3d 20 74 69 63 6b  his.ticks = tick
45630 73 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  s;..        }.. 
45640 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a     });..    /**.
45650 09 09 20 2a 20 20 54 68 65 20 54 72 61 6e 73 70  .. *  The Transp
45660 6f 72 74 27 73 20 6c 6f 6f 70 20 70 6f 73 69 74  ort's loop posit
45670 69 6f 6e 20 61 73 20 61 20 6e 6f 72 6d 61 6c 69  ion as a normali
45680 7a 65 64 20 76 61 6c 75 65 2e 20 41 6c 77 61 79  zed value. Alway
45690 73 0a 09 09 20 2a 20 20 72 65 74 75 72 6e 73 20  s... *  returns 
456a0 30 20 69 66 20 74 68 65 20 74 72 61 6e 73 70 6f  0 if the transpo
456b0 72 74 20 69 66 20 6c 6f 6f 70 20 69 73 20 6e 6f  rt if loop is no
456c0 74 20 74 72 75 65 2e 20 0a 09 09 20 2a 20 20 40  t true. ... *  @
456d0 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 54 72  memberOf Tone.Tr
456e0 61 6e 73 70 6f 72 74 23 0a 09 09 20 2a 20 20 40  ansport#... *  @
456f0 6e 61 6d 65 20 70 72 6f 67 72 65 73 73 0a 09 09  name progress...
45700 20 2a 20 20 40 74 79 70 65 20 7b 4e 6f 72 6d 61   *  @type {Norma
45710 6c 52 61 6e 67 65 7d 0a 09 09 20 2a 2f 0a 09 20  lRange}... */.. 
45720 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65     Object.define
45730 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 54 72  Property(Tone.Tr
45740 61 6e 73 70 6f 72 74 2e 70 72 6f 74 6f 74 79 70  ansport.prototyp
45750 65 2c 20 27 70 72 6f 67 72 65 73 73 27 2c 20 7b  e, 'progress', {
45760 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66  ..        get: f
45770 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
45780 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 68            if (th
45790 69 73 2e 6c 6f 6f 70 29 20 7b 0a 09 20 20 20 20  is.loop) {..    
457a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
457b0 72 6e 20 28 74 68 69 73 2e 74 69 63 6b 73 20 2d  rn (this.ticks -
457c0 20 74 68 69 73 2e 5f 6c 6f 6f 70 53 74 61 72 74   this._loopStart
457d0 29 20 2f 20 28 74 68 69 73 2e 5f 6c 6f 6f 70 45  ) / (this._loopE
457e0 6e 64 20 2d 20 74 68 69 73 2e 5f 6c 6f 6f 70 53  nd - this._loopS
457f0 74 61 72 74 29 3b 0a 09 20 20 20 20 20 20 20 20  tart);..        
45800 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20      } else {..  
45810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
45820 74 75 72 6e 20 30 3b 0a 09 20 20 20 20 20 20 20  turn 0;..       
45830 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
45840 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20  }..    });..    
45850 2f 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20 74 72  /**... *  The tr
45860 61 6e 73 70 6f 72 74 73 20 63 75 72 72 65 6e 74  ansports current
45870 20 74 69 63 6b 20 70 6f 73 69 74 69 6f 6e 2e 0a   tick position..
45880 09 09 20 2a 20 20 0a 09 09 20 2a 20 20 40 6d 65  .. *  ... *  @me
45890 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 54 72 61 6e  mberOf Tone.Tran
458a0 73 70 6f 72 74 23 0a 09 09 20 2a 20 20 40 74 79  sport#... *  @ty
458b0 70 65 20 7b 54 69 63 6b 73 7d 0a 09 09 20 2a 20  pe {Ticks}... * 
458c0 20 40 6e 61 6d 65 20 74 69 63 6b 73 0a 09 09 20   @name ticks... 
458d0 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64  */..    Object.d
458e0 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f  efineProperty(To
458f0 6e 65 2e 54 72 61 6e 73 70 6f 72 74 2e 70 72 6f  ne.Transport.pro
45900 74 6f 74 79 70 65 2c 20 27 74 69 63 6b 73 27 2c  totype, 'ticks',
45910 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a   {..        get:
45920 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
45930 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
45940 72 6e 20 74 68 69 73 2e 5f 63 6c 6f 63 6b 2e 74  rn this._clock.t
45950 69 63 6b 73 3b 0a 09 20 20 20 20 20 20 20 20 7d  icks;..        }
45960 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20  ,..        set: 
45970 66 75 6e 63 74 69 6f 6e 20 28 74 29 20 7b 0a 09  function (t) {..
45980 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20              var 
45990 6e 6f 77 20 3d 20 74 68 69 73 2e 6e 6f 77 28 29  now = this.now()
459a0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;..            /
459b0 2f 73 74 6f 70 20 65 76 65 72 79 74 68 69 6e 67  /stop everything
459c0 20 73 79 6e 63 65 64 20 74 6f 20 74 68 65 20 74   synced to the t
459d0 72 61 6e 73 70 6f 72 74 0a 09 20 20 20 20 20 20  ransport..      
459e0 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 73        if (this.s
459f0 74 61 74 65 20 3d 3d 3d 20 54 6f 6e 65 2e 53 74  tate === Tone.St
45a00 61 74 65 2e 53 74 61 72 74 65 64 29 20 7b 0a 09  ate.Started) {..
45a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45a20 74 68 69 73 2e 65 6d 69 74 28 27 73 74 6f 70 27  this.emit('stop'
45a30 2c 20 6e 6f 77 29 3b 0a 09 20 20 20 20 20 20 20  , now);..       
45a40 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 63           this._c
45a50 6c 6f 63 6b 2e 74 69 63 6b 73 20 3d 20 74 3b 0a  lock.ticks = t;.
45a60 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
45a70 20 2f 2f 72 65 73 74 61 72 74 20 69 74 20 77 69   //restart it wi
45a80 74 68 20 74 68 65 20 6e 65 77 20 74 69 6d 65 0a  th the new time.
45a90 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
45aa0 20 74 68 69 73 2e 65 6d 69 74 28 27 73 74 61 72   this.emit('star
45ab0 74 27 2c 20 6e 6f 77 2c 20 74 68 69 73 2e 73 65  t', now, this.se
45ac0 63 6f 6e 64 73 29 3b 0a 09 20 20 20 20 20 20 20  conds);..       
45ad0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20       } else {.. 
45ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
45af0 68 69 73 2e 5f 63 6c 6f 63 6b 2e 74 69 63 6b 73  his._clock.ticks
45b00 20 3d 20 74 3b 0a 09 20 20 20 20 20 20 20 20 20   = t;..         
45b10 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 0a     }..        }.
45b20 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a  .    });..    /*
45b30 2a 0a 09 09 20 2a 20 20 50 75 6c 73 65 73 20 50  *... *  Pulses P
45b40 65 72 20 51 75 61 72 74 65 72 20 6e 6f 74 65 2e  er Quarter note.
45b50 20 54 68 69 73 20 69 73 20 74 68 65 20 73 6d 61   This is the sma
45b60 6c 6c 65 73 74 20 72 65 73 6f 6c 75 74 69 6f 6e  llest resolution
45b70 0a 09 09 20 2a 20 20 74 68 65 20 54 72 61 6e 73  ... *  the Trans
45b80 70 6f 72 74 20 74 69 6d 69 6e 67 20 73 75 70 70  port timing supp
45b90 6f 72 74 73 2e 20 54 68 69 73 20 73 68 6f 75 6c  orts. This shoul
45ba0 64 20 62 65 20 73 65 74 20 6f 6e 63 65 0a 09 09  d be set once...
45bb0 20 2a 20 20 6f 6e 20 69 6e 69 74 69 61 6c 69 7a   *  on initializ
45bc0 61 74 69 6f 6e 20 61 6e 64 20 6e 6f 74 20 73 65  ation and not se
45bd0 74 20 61 67 61 69 6e 2e 20 43 68 61 6e 67 69 6e  t again. Changin
45be0 67 20 74 68 69 73 20 76 61 6c 75 65 20 0a 09 09  g this value ...
45bf0 20 2a 20 20 61 66 74 65 72 20 6f 74 68 65 72 20   *  after other 
45c00 6f 62 6a 65 63 74 73 20 68 61 76 65 20 62 65 65  objects have bee
45c10 6e 20 63 72 65 61 74 65 64 20 63 61 6e 20 63 61  n created can ca
45c20 75 73 65 20 70 72 6f 62 6c 65 6d 73 2e 20 0a 09  use problems. ..
45c30 09 20 2a 20 20 0a 09 09 20 2a 20 20 40 6d 65 6d  . *  ... *  @mem
45c40 62 65 72 4f 66 20 54 6f 6e 65 2e 54 72 61 6e 73  berOf Tone.Trans
45c50 70 6f 72 74 23 0a 09 09 20 2a 20 20 40 74 79 70  port#... *  @typ
45c60 65 20 7b 4e 75 6d 62 65 72 7d 0a 09 09 20 2a 20  e {Number}... * 
45c70 20 40 6e 61 6d 65 20 50 50 51 0a 09 09 20 2a 2f   @name PPQ... */
45c80 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66  ..    Object.def
45c90 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65  ineProperty(Tone
45ca0 2e 54 72 61 6e 73 70 6f 72 74 2e 70 72 6f 74 6f  .Transport.proto
45cb0 74 79 70 65 2c 20 27 50 50 51 27 2c 20 7b 0a 09  type, 'PPQ', {..
45cc0 20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e          get: fun
45cd0 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
45ce0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
45cf0 68 69 73 2e 5f 70 70 71 3b 0a 09 20 20 20 20 20  his._ppq;..     
45d00 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73     },..        s
45d10 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 70 70  et: function (pp
45d20 71 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  q) {..          
45d30 20 20 76 61 72 20 62 70 6d 20 3d 20 74 68 69 73    var bpm = this
45d40 2e 62 70 6d 2e 76 61 6c 75 65 3b 0a 09 20 20 20  .bpm.value;..   
45d50 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70           this._p
45d60 70 71 20 3d 20 70 70 71 3b 0a 09 20 20 20 20 20  pq = ppq;..     
45d70 20 20 20 20 20 20 20 74 68 69 73 2e 62 70 6d 2e         this.bpm.
45d80 76 61 6c 75 65 20 3d 20 62 70 6d 3b 0a 09 20 20  value = bpm;..  
45d90 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b        }..    });
45da0 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
45db0 54 68 65 20 68 69 6e 74 20 74 6f 20 74 68 65 20  The hint to the 
45dc0 74 79 70 65 20 6f 66 20 70 6c 61 79 62 61 63 6b  type of playback
45dd0 2e 20 41 66 66 65 63 74 73 20 74 72 61 64 65 6f  . Affects tradeo
45de0 66 66 73 20 62 65 74 77 65 65 6e 20 61 75 64 69  ffs between audi
45df0 6f 20 0a 09 09 20 2a 20 20 6f 75 74 70 75 74 20  o ... *  output 
45e00 6c 61 74 65 6e 63 79 20 61 6e 64 20 72 65 73 70  latency and resp
45e10 6f 6e 73 69 76 65 6e 65 73 73 2e 20 0a 09 09 20  onsiveness. ... 
45e20 2a 20 20 0a 09 09 20 2a 20 20 49 6e 20 61 64 64  *  ... *  In add
45e30 69 74 69 6f 6e 20 74 6f 20 73 65 74 74 69 6e 67  ition to setting
45e40 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 73 65   the value in se
45e50 63 6f 6e 64 73 2c 20 74 68 65 20 6c 61 74 65 6e  conds, the laten
45e60 63 79 48 69 6e 74 20 61 6c 73 6f 0a 09 09 20 2a  cyHint also... *
45e70 20 20 61 63 63 65 70 74 73 20 74 68 65 20 73 74    accepts the st
45e80 72 69 6e 67 73 20 22 69 6e 74 65 72 61 63 74 69  rings "interacti
45e90 76 65 22 20 28 70 72 69 6f 72 69 74 69 7a 65 73  ve" (prioritizes
45ea0 20 6c 6f 77 20 6c 61 74 65 6e 63 79 29 2c 20 0a   low latency), .
45eb0 09 09 20 2a 20 20 22 70 6c 61 79 62 61 63 6b 22  .. *  "playback"
45ec0 20 28 70 72 69 6f 72 69 74 69 7a 65 73 20 73 75   (prioritizes su
45ed0 73 74 61 69 6e 65 64 20 70 6c 61 79 62 61 63 6b  stained playback
45ee0 29 2c 20 22 62 61 6c 61 6e 63 65 64 22 20 28 62  ), "balanced" (b
45ef0 61 6c 61 6e 63 65 73 0a 09 09 20 2a 20 20 6c 61  alances... *  la
45f00 74 65 6e 63 79 20 61 6e 64 20 70 65 72 66 6f 72  tency and perfor
45f10 6d 61 6e 63 65 29 2c 20 61 6e 64 20 22 66 61 73  mance), and "fas
45f20 74 65 73 74 22 20 28 6c 6f 77 65 73 74 20 6c 61  test" (lowest la
45f30 74 65 6e 63 79 2c 20 6d 69 67 68 74 20 67 6c 69  tency, might gli
45f40 74 63 68 20 6d 6f 72 65 20 6f 66 74 65 6e 29 2e  tch more often).
45f50 20 0a 09 09 20 2a 20 20 40 6d 65 6d 62 65 72 4f   ... *  @memberO
45f60 66 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74  f Tone.Transport
45f70 23 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b 53  #... *  @type {S
45f80 65 63 6f 6e 64 73 7c 53 74 72 69 6e 67 7d 0a 09  econds|String}..
45f90 09 20 2a 20 20 40 6e 61 6d 65 20 6c 61 74 65 6e  . *  @name laten
45fa0 63 79 48 69 6e 74 0a 09 09 20 2a 2f 0a 09 20 20  cyHint... */..  
45fb0 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50    Object.defineP
45fc0 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 54 72 61  roperty(Tone.Tra
45fd0 6e 73 70 6f 72 74 2e 70 72 6f 74 6f 74 79 70 65  nsport.prototype
45fe0 2c 20 27 6c 61 74 65 6e 63 79 48 69 6e 74 27 2c  , 'latencyHint',
45ff0 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a   {..        get:
46000 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
46010 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
46020 72 6e 20 54 6f 6e 65 2e 43 6c 6f 63 6b 2e 6c 61  rn Tone.Clock.la
46030 74 65 6e 63 79 48 69 6e 74 3b 0a 09 20 20 20 20  tencyHint;..    
46040 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20      },..        
46050 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 68  set: function (h
46060 69 6e 74 29 20 7b 0a 09 20 20 20 20 20 20 20 20  int) {..        
46070 20 20 20 20 54 6f 6e 65 2e 43 6c 6f 63 6b 2e 6c      Tone.Clock.l
46080 61 74 65 6e 63 79 48 69 6e 74 20 3d 20 68 69 6e  atencyHint = hin
46090 74 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  t;..        }.. 
460a0 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a     });..    /**.
460b0 09 09 20 2a 20 20 43 6f 6e 76 65 72 74 20 66 72  .. *  Convert fr
460c0 6f 6d 20 42 50 4d 20 74 6f 20 66 72 65 71 75 65  om BPM to freque
460d0 6e 63 79 20 28 66 61 63 74 6f 72 69 6e 67 20 69  ncy (factoring i
460e0 6e 20 50 50 51 29 0a 09 09 20 2a 20 20 40 70 61  n PPQ)... *  @pa
460f0 72 61 6d 20 20 7b 42 50 4d 7d 20 20 62 70 6d 20  ram  {BPM}  bpm 
46100 54 68 65 20 42 50 4d 20 76 61 6c 75 65 20 74 6f  The BPM value to
46110 20 63 6f 6e 76 65 72 74 20 74 6f 20 66 72 65 71   convert to freq
46120 75 65 6e 63 79 0a 09 09 20 2a 20 20 40 72 65 74  uency... *  @ret
46130 75 72 6e 20 20 7b 46 72 65 71 75 65 6e 63 79 7d  urn  {Frequency}
46140 20 20 54 68 65 20 42 50 4d 20 61 73 20 61 20 66    The BPM as a f
46150 72 65 71 75 65 6e 63 79 20 77 69 74 68 20 50 50  requency with PP
46160 51 20 66 61 63 74 6f 72 65 64 20 69 6e 2e 0a 09  Q factored in...
46170 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
46180 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 72   */..    Tone.Tr
46190 61 6e 73 70 6f 72 74 2e 70 72 6f 74 6f 74 79 70  ansport.prototyp
461a0 65 2e 5f 66 72 6f 6d 55 6e 69 74 73 20 3d 20 66  e._fromUnits = f
461b0 75 6e 63 74 69 6f 6e 20 28 62 70 6d 29 20 7b 0a  unction (bpm) {.
461c0 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
461d0 31 20 2f 20 28 36 30 20 2f 20 62 70 6d 20 2f 20  1 / (60 / bpm / 
461e0 74 68 69 73 2e 50 50 51 29 3b 0a 09 20 20 20 20  this.PPQ);..    
461f0 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  };..    /**... *
46200 20 20 43 6f 6e 76 65 72 74 20 66 72 6f 6d 20 66    Convert from f
46210 72 65 71 75 65 6e 63 79 20 28 77 69 74 68 20 50  requency (with P
46220 50 51 29 20 69 6e 74 6f 20 42 50 4d 0a 09 09 20  PQ) into BPM... 
46230 2a 20 20 40 70 61 72 61 6d 20 20 7b 46 72 65 71  *  @param  {Freq
46240 75 65 6e 63 79 7d 20 20 66 72 65 71 20 54 68 65  uency}  freq The
46250 20 63 6c 6f 63 6b 73 20 66 72 65 71 75 65 6e 63   clocks frequenc
46260 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 74 6f 20  y to convert to 
46270 42 50 4d 0a 09 09 20 2a 20 20 40 72 65 74 75 72  BPM... *  @retur
46280 6e 20 20 7b 42 50 4d 7d 20 20 54 68 65 20 66 72  n  {BPM}  The fr
46290 65 71 75 65 6e 63 79 20 76 61 6c 75 65 20 61 73  equency value as
462a0 20 42 50 4d 2e 0a 09 09 20 2a 20 20 40 70 72 69   BPM.... *  @pri
462b0 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20  vate... */..    
462c0 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 2e 70  Tone.Transport.p
462d0 72 6f 74 6f 74 79 70 65 2e 5f 74 6f 55 6e 69 74  rototype._toUnit
462e0 73 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 66 72  s = function (fr
462f0 65 71 29 20 7b 0a 09 20 20 20 20 20 20 20 20 72  eq) {..        r
46300 65 74 75 72 6e 20 66 72 65 71 20 2f 20 74 68 69  eturn freq / thi
46310 73 2e 50 50 51 20 2a 20 36 30 3b 0a 09 20 20 20  s.PPQ * 60;..   
46320 20 7d 3b 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f 2f   };..    ///////
46330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46370 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20 20 2f 2f  ////////..    //
46380 09 53 59 4e 43 49 4e 47 0a 09 20 20 20 20 2f 2f  .SYNCING..    //
46390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
463a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
463b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
463c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
463d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20  /////////////.. 
463e0 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 52 65 74     /**... *  Ret
463f0 75 72 6e 73 20 74 68 65 20 74 69 6d 65 20 61 6c  urns the time al
46400 69 67 6e 65 64 20 74 6f 20 74 68 65 20 6e 65 78  igned to the nex
46410 74 20 73 75 62 64 69 76 69 73 69 6f 6e 0a 09 09  t subdivision...
46420 20 2a 20 20 6f 66 20 74 68 65 20 54 72 61 6e 73   *  of the Trans
46430 70 6f 72 74 2e 20 49 66 20 74 68 65 20 54 72 61  port. If the Tra
46440 6e 73 70 6f 72 74 20 69 73 20 6e 6f 74 20 73 74  nsport is not st
46450 61 72 74 65 64 2c 0a 09 09 20 2a 20 20 69 74 20  arted,... *  it 
46460 77 69 6c 6c 20 72 65 74 75 72 6e 20 30 2e 0a 09  will return 0...
46470 09 20 2a 20 20 4e 6f 74 65 3a 20 74 68 69 73 20  . *  Note: this 
46480 77 69 6c 6c 20 6e 6f 74 20 77 6f 72 6b 20 70 72  will not work pr
46490 65 63 69 73 65 6c 79 20 64 75 72 69 6e 67 20 74  ecisely during t
464a0 65 6d 70 6f 20 72 61 6d 70 73 2e 0a 09 09 20 2a  empo ramps.... *
464b0 20 20 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 7d    @param  {Time}
464c0 20 20 73 75 62 64 69 76 69 73 69 6f 6e 20 20 54    subdivision  T
464d0 68 65 20 73 75 62 64 69 76 69 73 69 6f 6e 20 74  he subdivision t
464e0 6f 20 71 75 61 6e 74 69 7a 65 20 74 6f 0a 09 09  o quantize to...
464f0 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 4e 75   *  @return  {Nu
46500 6d 62 65 72 7d 20 20 54 68 65 20 63 6f 6e 74 65  mber}  The conte
46510 78 74 20 74 69 6d 65 20 6f 66 20 74 68 65 20 6e  xt time of the n
46520 65 78 74 20 73 75 62 64 69 76 69 73 69 6f 6e 2e  ext subdivision.
46530 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a  ... *  @example.
46540 09 09 20 2a 20 54 6f 6e 65 2e 54 72 61 6e 73 70  .. * Tone.Transp
46550 6f 72 74 2e 73 74 61 72 74 28 29 3b 20 2f 2f 74  ort.start(); //t
46560 68 65 20 74 72 61 6e 73 70 6f 72 74 20 6d 75 73  he transport mus
46570 74 20 62 65 20 73 74 61 72 74 65 64 0a 09 09 20  t be started... 
46580 2a 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74  * Tone.Transport
46590 2e 6e 65 78 74 53 75 62 64 69 76 69 73 69 6f 6e  .nextSubdivision
465a0 28 22 34 6e 22 29 3b 0a 09 09 20 2a 2f 0a 09 20  ("4n");... */.. 
465b0 20 20 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72     Tone.Transpor
465c0 74 2e 70 72 6f 74 6f 74 79 70 65 2e 6e 65 78 74  t.prototype.next
465d0 53 75 62 64 69 76 69 73 69 6f 6e 20 3d 20 66 75  Subdivision = fu
465e0 6e 63 74 69 6f 6e 20 28 73 75 62 64 69 76 69 73  nction (subdivis
465f0 69 6f 6e 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ion) {..        
46600 73 75 62 64 69 76 69 73 69 6f 6e 20 3d 20 74 68  subdivision = th
46610 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28 73 75 62  is.toSeconds(sub
46620 64 69 76 69 73 69 6f 6e 29 3b 0a 09 20 20 20 20  division);..    
46630 20 20 20 20 2f 2f 69 66 20 74 68 65 20 74 72 61      //if the tra
46640 6e 73 70 6f 72 74 27 73 20 6e 6f 74 20 73 74 61  nsport's not sta
46650 72 74 65 64 2c 20 72 65 74 75 72 6e 20 30 0a 09  rted, return 0..
46660 20 20 20 20 20 20 20 20 76 61 72 20 6e 6f 77 3b          var now;
46670 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 74 68  ..        if (th
46680 69 73 2e 73 74 61 74 65 20 3d 3d 3d 20 54 6f 6e  is.state === Ton
46690 65 2e 53 74 61 74 65 2e 53 74 61 72 74 65 64 29  e.State.Started)
466a0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
466b0 6e 6f 77 20 3d 20 74 68 69 73 2e 5f 63 6c 6f 63  now = this._cloc
466c0 6b 2e 5f 6e 65 78 74 54 69 63 6b 3b 0a 09 20 20  k._nextTick;..  
466d0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09        } else {..
466e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
466f0 72 6e 20 30 3b 0a 09 20 20 20 20 20 20 20 20 7d  rn 0;..        }
46700 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 74 72  ..        var tr
46710 61 6e 73 70 6f 72 74 50 6f 73 20 3d 20 54 6f 6e  ansportPos = Ton
46720 65 2e 54 69 6d 65 28 74 68 69 73 2e 74 69 63 6b  e.Time(this.tick
46730 73 2c 20 27 69 27 29 2e 65 76 61 6c 28 29 3b 0a  s, 'i').eval();.
46740 09 20 20 20 20 20 20 20 20 76 61 72 20 72 65 6d  .        var rem
46750 61 69 6e 69 6e 67 54 69 6d 65 20 3d 20 73 75 62  ainingTime = sub
46760 64 69 76 69 73 69 6f 6e 20 2d 20 74 72 61 6e 73  division - trans
46770 70 6f 72 74 50 6f 73 20 25 20 73 75 62 64 69 76  portPos % subdiv
46780 69 73 69 6f 6e 3b 0a 09 20 20 20 20 20 20 20 20  ision;..        
46790 69 66 20 28 72 65 6d 61 69 6e 69 6e 67 54 69 6d  if (remainingTim
467a0 65 20 3d 3d 3d 20 30 29 20 7b 0a 09 20 20 20 20  e === 0) {..    
467b0 20 20 20 20 20 20 20 20 72 65 6d 61 69 6e 69 6e          remainin
467c0 67 54 69 6d 65 20 3d 20 73 75 62 64 69 76 69 73  gTime = subdivis
467d0 69 6f 6e 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a  ion;..        }.
467e0 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
467f0 6e 6f 77 20 2b 20 72 65 6d 61 69 6e 69 6e 67 54  now + remainingT
46800 69 6d 65 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  ime;..    };..  
46810 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 41 74 74 61    /**... *  Atta
46820 63 68 65 73 20 74 68 65 20 73 69 67 6e 61 6c 20  ches the signal 
46830 74 6f 20 74 68 65 20 74 65 6d 70 6f 20 63 6f 6e  to the tempo con
46840 74 72 6f 6c 20 73 69 67 6e 61 6c 20 73 6f 20 74  trol signal so t
46850 68 61 74 20 0a 09 09 20 2a 20 20 61 6e 79 20 63  hat ... *  any c
46860 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 74 65  hanges in the te
46870 6d 70 6f 20 77 69 6c 6c 20 63 68 61 6e 67 65 20  mpo will change 
46880 74 68 65 20 73 69 67 6e 61 6c 20 69 6e 20 74 68  the signal in th
46890 65 20 73 61 6d 65 0a 09 09 20 2a 20 20 72 61 74  e same... *  rat
468a0 69 6f 2e 20 0a 09 09 20 2a 20 20 0a 09 09 20 2a  io. ... *  ... *
468b0 20 20 40 70 61 72 61 6d 20 20 7b 54 6f 6e 65 2e    @param  {Tone.
468c0 53 69 67 6e 61 6c 7d 20 73 69 67 6e 61 6c 20 0a  Signal} signal .
468d0 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 6e 75  .. *  @param {nu
468e0 6d 62 65 72 3d 7d 20 72 61 74 69 6f 20 4f 70 74  mber=} ratio Opt
468f0 69 6f 6e 61 6c 6c 79 20 70 61 73 73 20 69 6e 20  ionally pass in 
46900 74 68 65 20 72 61 74 69 6f 20 62 65 74 77 65 65  the ratio betwee
46910 6e 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20  n... *          
46920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
46930 68 65 20 74 77 6f 20 73 69 67 6e 61 6c 73 2e 20  he two signals. 
46940 4f 74 68 65 72 77 69 73 65 20 69 74 20 77 69 6c  Otherwise it wil
46950 6c 20 62 65 20 63 6f 6d 70 75 74 65 64 0a 09 09  l be computed...
46960 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
46970 20 20 20 20 20 20 20 20 20 20 20 62 61 73 65 64             based
46980 20 6f 6e 20 74 68 65 69 72 20 63 75 72 72 65 6e   on their curren
46990 74 20 76 61 6c 75 65 73 2e 20 0a 09 09 20 2a 20  t values. ... * 
469a0 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e   @returns {Tone.
469b0 54 72 61 6e 73 70 6f 72 74 7d 20 74 68 69 73 0a  Transport} this.
469c0 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
469d0 54 72 61 6e 73 70 6f 72 74 2e 70 72 6f 74 6f 74  Transport.protot
469e0 79 70 65 2e 73 79 6e 63 53 69 67 6e 61 6c 20 3d  ype.syncSignal =
469f0 20 66 75 6e 63 74 69 6f 6e 20 28 73 69 67 6e 61   function (signa
46a00 6c 2c 20 72 61 74 69 6f 29 20 7b 0a 09 20 20 20  l, ratio) {..   
46a10 20 20 20 20 20 69 66 20 28 21 72 61 74 69 6f 29       if (!ratio)
46a20 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
46a30 2f 2f 67 65 74 20 74 68 65 20 73 79 6e 63 20 72  //get the sync r
46a40 61 74 69 6f 0a 09 20 20 20 20 20 20 20 20 20 20  atio..          
46a50 20 20 69 66 20 28 73 69 67 6e 61 6c 2e 5f 70 61    if (signal._pa
46a60 72 61 6d 2e 76 61 6c 75 65 20 21 3d 3d 20 30 29  ram.value !== 0)
46a70 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
46a80 20 20 20 20 72 61 74 69 6f 20 3d 20 73 69 67 6e      ratio = sign
46a90 61 6c 2e 5f 70 61 72 61 6d 2e 76 61 6c 75 65 20  al._param.value 
46aa0 2f 20 74 68 69 73 2e 62 70 6d 2e 5f 70 61 72 61  / this.bpm._para
46ab0 6d 2e 76 61 6c 75 65 3b 0a 09 20 20 20 20 20 20  m.value;..      
46ac0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09        } else {..
46ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46ae0 72 61 74 69 6f 20 3d 20 30 3b 0a 09 20 20 20 20  ratio = 0;..    
46af0 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
46b00 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 76 61     }..        va
46b10 72 20 72 61 74 69 6f 53 69 67 6e 61 6c 20 3d 20  r ratioSignal = 
46b20 6e 65 77 20 54 6f 6e 65 2e 47 61 69 6e 28 72 61  new Tone.Gain(ra
46b30 74 69 6f 29 3b 0a 09 20 20 20 20 20 20 20 20 74  tio);..        t
46b40 68 69 73 2e 62 70 6d 2e 63 68 61 69 6e 28 72 61  his.bpm.chain(ra
46b50 74 69 6f 53 69 67 6e 61 6c 2c 20 73 69 67 6e 61  tioSignal, signa
46b60 6c 2e 5f 70 61 72 61 6d 29 3b 0a 09 20 20 20 20  l._param);..    
46b70 20 20 20 20 74 68 69 73 2e 5f 73 79 6e 63 65 64      this._synced
46b80 53 69 67 6e 61 6c 73 2e 70 75 73 68 28 7b 0a 09  Signals.push({..
46b90 20 20 20 20 20 20 20 20 20 20 20 20 27 72 61 74              'rat
46ba0 69 6f 27 3a 20 72 61 74 69 6f 53 69 67 6e 61 6c  io': ratioSignal
46bb0 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
46bc0 73 69 67 6e 61 6c 27 3a 20 73 69 67 6e 61 6c 2c  signal': signal,
46bd0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 69  ..            'i
46be0 6e 69 74 69 61 6c 27 3a 20 73 69 67 6e 61 6c 2e  nitial': signal.
46bf0 5f 70 61 72 61 6d 2e 76 61 6c 75 65 0a 09 20 20  _param.value..  
46c00 20 20 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 20        });..     
46c10 20 20 20 73 69 67 6e 61 6c 2e 5f 70 61 72 61 6d     signal._param
46c20 2e 76 61 6c 75 65 20 3d 20 30 3b 0a 09 20 20 20  .value = 0;..   
46c30 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
46c40 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  ;..    };..    /
46c50 2a 2a 0a 09 09 20 2a 20 20 55 6e 73 79 6e 63 73  **... *  Unsyncs
46c60 20 61 20 70 72 65 76 69 6f 75 73 6c 79 20 73 79   a previously sy
46c70 6e 63 65 64 20 73 69 67 6e 61 6c 20 66 72 6f 6d  nced signal from
46c80 20 74 68 65 20 74 72 61 6e 73 70 6f 72 74 27 73   the transport's
46c90 20 63 6f 6e 74 72 6f 6c 2e 20 0a 09 09 20 2a 20   control. ... * 
46ca0 20 53 65 65 20 54 6f 6e 65 2e 54 72 61 6e 73 70   See Tone.Transp
46cb0 6f 72 74 2e 73 79 6e 63 53 69 67 6e 61 6c 2e 0a  ort.syncSignal..
46cc0 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 54  .. *  @param  {T
46cd0 6f 6e 65 2e 53 69 67 6e 61 6c 7d 20 73 69 67 6e  one.Signal} sign
46ce0 61 6c 20 0a 09 09 20 2a 20 20 40 72 65 74 75 72  al ... *  @retur
46cf0 6e 73 20 7b 54 6f 6e 65 2e 54 72 61 6e 73 70 6f  ns {Tone.Transpo
46d00 72 74 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09  rt} this... */..
46d10 20 20 20 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f      Tone.Transpo
46d20 72 74 2e 70 72 6f 74 6f 74 79 70 65 2e 75 6e 73  rt.prototype.uns
46d30 79 6e 63 53 69 67 6e 61 6c 20 3d 20 66 75 6e 63  yncSignal = func
46d40 74 69 6f 6e 20 28 73 69 67 6e 61 6c 29 20 7b 0a  tion (signal) {.
46d50 09 20 20 20 20 20 20 20 20 66 6f 72 20 28 76 61  .        for (va
46d60 72 20 69 20 3d 20 74 68 69 73 2e 5f 73 79 6e 63  r i = this._sync
46d70 65 64 53 69 67 6e 61 6c 73 2e 6c 65 6e 67 74 68  edSignals.length
46d80 20 2d 20 31 3b 20 69 20 3e 3d 20 30 3b 20 69 2d   - 1; i >= 0; i-
46d90 2d 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  -) {..          
46da0 20 20 76 61 72 20 73 79 6e 63 65 64 53 69 67 6e    var syncedSign
46db0 61 6c 20 3d 20 74 68 69 73 2e 5f 73 79 6e 63 65  al = this._synce
46dc0 64 53 69 67 6e 61 6c 73 5b 69 5d 3b 0a 09 20 20  dSignals[i];..  
46dd0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 79            if (sy
46de0 6e 63 65 64 53 69 67 6e 61 6c 2e 73 69 67 6e 61  ncedSignal.signa
46df0 6c 20 3d 3d 3d 20 73 69 67 6e 61 6c 29 20 7b 0a  l === signal) {.
46e00 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
46e10 20 73 79 6e 63 65 64 53 69 67 6e 61 6c 2e 72 61   syncedSignal.ra
46e20 74 69 6f 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09  tio.dispose();..
46e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46e40 73 79 6e 63 65 64 53 69 67 6e 61 6c 2e 73 69 67  syncedSignal.sig
46e50 6e 61 6c 2e 5f 70 61 72 61 6d 2e 76 61 6c 75 65  nal._param.value
46e60 20 3d 20 73 79 6e 63 65 64 53 69 67 6e 61 6c 2e   = syncedSignal.
46e70 69 6e 69 74 69 61 6c 3b 0a 09 20 20 20 20 20 20  initial;..      
46e80 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
46e90 73 79 6e 63 65 64 53 69 67 6e 61 6c 73 2e 73 70  syncedSignals.sp
46ea0 6c 69 63 65 28 69 2c 20 31 29 3b 0a 09 20 20 20  lice(i, 1);..   
46eb0 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20           }..    
46ec0 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 72      }..        r
46ed0 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20  eturn this;..   
46ee0 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20   };..    /**... 
46ef0 2a 20 20 43 6c 65 61 6e 20 75 70 2e 20 0a 09 09  *  Clean up. ...
46f00 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f   *  @returns {To
46f10 6e 65 2e 54 72 61 6e 73 70 6f 72 74 7d 20 74 68  ne.Transport} th
46f20 69 73 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74  is... *  @privat
46f30 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  e... */..    Ton
46f40 65 2e 54 72 61 6e 73 70 6f 72 74 2e 70 72 6f 74  e.Transport.prot
46f50 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20  otype.dispose = 
46f60 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
46f70 20 20 20 20 20 20 20 54 6f 6e 65 2e 45 6d 69 74         Tone.Emit
46f80 74 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69  ter.prototype.di
46f90 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69 73 29  spose.call(this)
46fa0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
46fb0 5f 63 6c 6f 63 6b 2e 64 69 73 70 6f 73 65 28 29  _clock.dispose()
46fc0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
46fd0 5f 63 6c 6f 63 6b 20 3d 20 6e 75 6c 6c 3b 0a 09  _clock = null;..
46fe0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 77 72          this._wr
46ff0 69 74 61 62 6c 65 28 27 62 70 6d 27 29 3b 0a 09  itable('bpm');..
47000 20 20 20 20 20 20 20 20 74 68 69 73 2e 62 70 6d          this.bpm
47010 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
47020 20 20 74 68 69 73 2e 5f 74 69 6d 65 6c 69 6e 65    this._timeline
47030 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20  .dispose();..   
47040 20 20 20 20 20 74 68 69 73 2e 5f 74 69 6d 65 6c       this._timel
47050 69 6e 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  ine = null;..   
47060 20 20 20 20 20 74 68 69 73 2e 5f 6f 6e 63 65 45       this._onceE
47070 76 65 6e 74 73 2e 64 69 73 70 6f 73 65 28 29 3b  vents.dispose();
47080 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
47090 6f 6e 63 65 45 76 65 6e 74 73 20 3d 20 6e 75 6c  onceEvents = nul
470a0 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  l;..        this
470b0 2e 5f 72 65 70 65 61 74 65 64 45 76 65 6e 74 73  ._repeatedEvents
470c0 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20  .dispose();..   
470d0 20 20 20 20 20 74 68 69 73 2e 5f 72 65 70 65 61       this._repea
470e0 74 65 64 45 76 65 6e 74 73 20 3d 20 6e 75 6c 6c  tedEvents = null
470f0 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
47100 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a  n this;..    };.
47110 09 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
47120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47160 2f 2f 2f 2f 0a 09 20 20 20 20 2f 2f 09 49 4e 49  ////..    //.INI
47170 54 49 41 4c 49 5a 41 54 49 4f 4e 0a 09 20 20 20  TIALIZATION..   
47180 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
47190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
471a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
471b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
471c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
471d0 0a 09 20 20 20 20 76 61 72 20 54 72 61 6e 73 70  ..    var Transp
471e0 6f 72 74 43 6f 6e 73 74 72 75 63 74 6f 72 20 3d  ortConstructor =
471f0 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 3b   Tone.Transport;
47200 0a 09 20 20 20 20 54 6f 6e 65 2e 5f 69 6e 69 74  ..    Tone._init
47210 41 75 64 69 6f 43 6f 6e 74 65 78 74 28 66 75 6e  AudioContext(fun
47220 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
47230 20 20 20 20 69 66 20 28 74 79 70 65 6f 66 20 54      if (typeof T
47240 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 20 3d 3d  one.Transport ==
47250 3d 20 27 66 75 6e 63 74 69 6f 6e 27 29 20 7b 0a  = 'function') {.
47260 09 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 61  .            //a
47270 20 73 69 6e 67 6c 65 20 74 72 61 6e 73 70 6f 72   single transpor
47280 74 20 6f 62 6a 65 63 74 0a 09 20 20 20 20 20 20  t object..      
47290 20 20 20 20 20 20 54 6f 6e 65 2e 54 72 61 6e 73        Tone.Trans
472a0 70 6f 72 74 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  port = new Tone.
472b0 54 72 61 6e 73 70 6f 72 74 28 29 3b 0a 09 20 20  Transport();..  
472c0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09        } else {..
472d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 73 74              //st
472e0 6f 70 20 74 68 65 20 63 6c 6f 63 6b 0a 09 20 20  op the clock..  
472f0 20 20 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 54            Tone.T
47300 72 61 6e 73 70 6f 72 74 2e 73 74 6f 70 28 29 3b  ransport.stop();
47310 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
47320 67 65 74 20 74 68 65 20 70 72 65 76 69 6f 75 73  get the previous
47330 20 76 61 6c 75 65 73 0a 09 20 20 20 20 20 20 20   values..       
47340 20 20 20 20 20 76 61 72 20 70 72 65 76 53 65 74       var prevSet
47350 74 69 6e 67 73 20 3d 20 54 6f 6e 65 2e 54 72 61  tings = Tone.Tra
47360 6e 73 70 6f 72 74 2e 67 65 74 28 29 3b 0a 09 20  nsport.get();.. 
47370 20 20 20 20 20 20 20 20 20 20 20 2f 2f 64 65 73             //des
47380 74 6f 72 79 20 74 68 65 20 6f 6c 64 20 74 72 61  tory the old tra
47390 6e 73 70 6f 72 74 0a 09 20 20 20 20 20 20 20 20  nsport..        
473a0 20 20 20 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f      Tone.Transpo
473b0 72 74 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20  rt.dispose();.. 
473c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 6d 61 6b             //mak
473d0 65 20 6e 65 77 20 54 72 61 6e 73 70 6f 72 74 20  e new Transport 
473e0 69 6e 73 69 64 65 73 0a 09 20 20 20 20 20 20 20  insides..       
473f0 20 20 20 20 20 54 72 61 6e 73 70 6f 72 74 43 6f       TransportCo
47400 6e 73 74 72 75 63 74 6f 72 2e 63 61 6c 6c 28 54  nstructor.call(T
47410 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 29 3b 0a  one.Transport);.
47420 09 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 73  .            //s
47430 65 74 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  et the previous 
47440 63 6f 6e 66 69 67 0a 09 20 20 20 20 20 20 20 20  config..        
47450 20 20 20 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f      Tone.Transpo
47460 72 74 2e 73 65 74 28 70 72 65 76 53 65 74 74 69  rt.set(prevSetti
47470 6e 67 73 29 3b 0a 09 20 20 20 20 20 20 20 20 7d  ngs);..        }
47480 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 72  ..    });..    r
47490 65 74 75 72 6e 20 54 6f 6e 65 2e 54 72 61 6e 73  eturn Tone.Trans
474a0 70 6f 72 74 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75  port;..});..Modu
474b0 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e  le(function (Ton
474c0 65 29 20 7b 0a 09 20 20 20 20 0a 09 20 20 20 20  e) {..    ..    
474d0 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61 73 73  /**... *  @class
474e0 20 54 6f 6e 65 2e 56 6f 6c 75 6d 65 20 69 73 20   Tone.Volume is 
474f0 61 20 73 69 6d 70 6c 65 20 76 6f 6c 75 6d 65 20  a simple volume 
47500 6e 6f 64 65 2c 20 75 73 65 66 75 6c 20 66 6f 72  node, useful for
47510 20 63 72 65 61 74 69 6e 67 20 61 20 76 6f 6c 75   creating a volu
47520 6d 65 20 66 61 64 65 72 2e 20 0a 09 09 20 2a 0a  me fader. ... *.
47530 09 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b  .. *  @extends {
47540 54 6f 6e 65 7d 0a 09 09 20 2a 20 20 40 63 6f 6e  Tone}... *  @con
47550 73 74 72 75 63 74 6f 72 0a 09 09 20 2a 20 20 40  structor... *  @
47560 70 61 72 61 6d 20 7b 44 65 63 69 62 65 6c 73 7d  param {Decibels}
47570 20 5b 76 6f 6c 75 6d 65 3d 30 5d 20 74 68 65 20   [volume=0] the 
47580 69 6e 69 74 69 61 6c 20 76 6f 6c 75 6d 65 0a 09  initial volume..
47590 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09  . *  @example...
475a0 20 2a 20 76 61 72 20 76 6f 6c 20 3d 20 6e 65 77   * var vol = new
475b0 20 54 6f 6e 65 2e 56 6f 6c 75 6d 65 28 2d 31 32   Tone.Volume(-12
475c0 29 3b 0a 09 09 20 2a 20 69 6e 73 74 72 75 6d 65  );... * instrume
475d0 6e 74 2e 63 68 61 69 6e 28 76 6f 6c 2c 20 54 6f  nt.chain(vol, To
475e0 6e 65 2e 4d 61 73 74 65 72 29 3b 0a 09 09 20 2a  ne.Master);... *
475f0 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 56 6f 6c 75  /..    Tone.Volu
47600 6d 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  me = function ()
47610 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20   {..        var 
47620 6f 70 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e 6f  options = this.o
47630 70 74 69 6f 6e 73 4f 62 6a 65 63 74 28 61 72 67  ptionsObject(arg
47640 75 6d 65 6e 74 73 2c 20 5b 27 76 6f 6c 75 6d 65  uments, ['volume
47650 27 5d 2c 20 54 6f 6e 65 2e 56 6f 6c 75 6d 65 2e  '], Tone.Volume.
47660 64 65 66 61 75 6c 74 73 29 3b 0a 09 20 20 20 20  defaults);..    
47670 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 74 68      /**.... * th
47680 65 20 6f 75 74 70 75 74 20 6e 6f 64 65 0a 09 09  e output node...
47690 09 20 2a 20 40 74 79 70 65 20 7b 47 61 69 6e 4e  . * @type {GainN
476a0 6f 64 65 7d 0a 09 09 09 20 2a 20 40 70 72 69 76  ode}.... * @priv
476b0 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  ate.... */..    
476c0 20 20 20 20 74 68 69 73 2e 6f 75 74 70 75 74 20      this.output 
476d0 3d 20 74 68 69 73 2e 69 6e 70 75 74 20 3d 20 6e  = this.input = n
476e0 65 77 20 54 6f 6e 65 2e 47 61 69 6e 28 6f 70 74  ew Tone.Gain(opt
476f0 69 6f 6e 73 2e 76 6f 6c 75 6d 65 2c 20 54 6f 6e  ions.volume, Ton
47700 65 2e 54 79 70 65 2e 44 65 63 69 62 65 6c 73 29  e.Type.Decibels)
47710 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
47720 09 09 20 2a 20 54 68 65 20 75 6e 6d 75 74 65 64  .. * The unmuted
47730 20 76 6f 6c 75 6d 65 0a 09 09 09 20 2a 20 40 74   volume.... * @t
47740 79 70 65 20 7b 44 65 63 69 62 65 6c 73 7d 0a 09  ype {Decibels}..
47750 09 09 20 2a 20 40 70 72 69 76 61 74 65 0a 09 09  .. * @private...
47760 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
47770 69 73 2e 5f 75 6e 6d 75 74 65 64 56 6f 6c 75 6d  is._unmutedVolum
47780 65 20 3d 20 30 3b 0a 09 20 20 20 20 20 20 20 20  e = 0;..        
47790 2f 2a 2a 0a 09 09 09 20 2a 20 20 69 66 20 74 68  /**.... *  if th
477a0 65 20 76 6f 6c 75 6d 65 20 69 73 20 6d 75 74 65  e volume is mute
477b0 64 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b  d.... *  @type {
477c0 42 6f 6f 6c 65 61 6e 7d 0a 09 09 09 20 2a 20 20  Boolean}.... *  
477d0 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a  @private.... */.
477e0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d  .        this._m
477f0 75 74 65 64 20 3d 20 66 61 6c 73 65 3b 0a 09 20  uted = false;.. 
47800 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
47810 20 20 54 68 65 20 76 6f 6c 75 6d 65 20 63 6f 6e    The volume con
47820 74 72 6f 6c 20 69 6e 20 64 65 63 69 62 65 6c 73  trol in decibels
47830 2e 20 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  . .... *  @type 
47840 7b 44 65 63 69 62 65 6c 73 7d 0a 09 09 09 20 2a  {Decibels}.... *
47850 20 20 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f    @signal.... */
47860 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 76  ..        this.v
47870 6f 6c 75 6d 65 20 3d 20 74 68 69 73 2e 6f 75 74  olume = this.out
47880 70 75 74 2e 67 61 69 6e 3b 0a 09 20 20 20 20 20  put.gain;..     
47890 20 20 20 74 68 69 73 2e 5f 72 65 61 64 4f 6e 6c     this._readOnl
478a0 79 28 27 76 6f 6c 75 6d 65 27 29 3b 0a 09 20 20  y('volume');..  
478b0 20 20 20 20 20 20 2f 2f 73 65 74 20 74 68 65 20        //set the 
478c0 6d 75 74 65 20 69 6e 69 74 69 61 6c 6c 79 0a 09  mute initially..
478d0 20 20 20 20 20 20 20 20 74 68 69 73 2e 6d 75 74          this.mut
478e0 65 20 3d 20 6f 70 74 69 6f 6e 73 2e 6d 75 74 65  e = options.mute
478f0 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54  ;..    };..    T
47900 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e  one.extend(Tone.
47910 56 6f 6c 75 6d 65 29 3b 0a 09 20 20 20 20 2f 2a  Volume);..    /*
47920 2a 0a 09 09 20 2a 20 20 44 65 66 61 75 6c 74 73  *... *  Defaults
47930 0a 09 09 20 2a 20 20 40 74 79 70 65 20 20 7b 4f  ... *  @type  {O
47940 62 6a 65 63 74 7d 0a 09 09 20 2a 20 20 40 63 6f  bject}... *  @co
47950 6e 73 74 0a 09 09 20 2a 20 20 40 73 74 61 74 69  nst... *  @stati
47960 63 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  c... */..    Ton
47970 65 2e 56 6f 6c 75 6d 65 2e 64 65 66 61 75 6c 74  e.Volume.default
47980 73 20 3d 20 7b 0a 09 20 20 20 20 20 20 20 20 27  s = {..        '
47990 76 6f 6c 75 6d 65 27 3a 20 30 2c 0a 09 20 20 20  volume': 0,..   
479a0 20 20 20 20 20 27 6d 75 74 65 27 3a 20 66 61 6c       'mute': fal
479b0 73 65 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  se..    };..    
479c0 2f 2a 2a 0a 09 09 20 2a 20 4d 75 74 65 20 74 68  /**... * Mute th
479d0 65 20 6f 75 74 70 75 74 2e 20 0a 09 09 20 2a 20  e output. ... * 
479e0 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 56  @memberOf Tone.V
479f0 6f 6c 75 6d 65 23 0a 09 09 20 2a 20 40 74 79 70  olume#... * @typ
47a00 65 20 7b 62 6f 6f 6c 65 61 6e 7d 0a 09 09 20 2a  e {boolean}... *
47a10 20 40 6e 61 6d 65 20 6d 75 74 65 0a 09 09 20 2a   @name mute... *
47a20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 2f   @example... * /
47a30 2f 6d 75 74 65 20 74 68 65 20 6f 75 74 70 75 74  /mute the output
47a40 0a 09 09 20 2a 20 76 6f 6c 75 6d 65 2e 6d 75 74  ... * volume.mut
47a50 65 20 3d 20 74 72 75 65 3b 0a 09 09 20 2a 2f 0a  e = true;... */.
47a60 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69  .    Object.defi
47a70 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e  neProperty(Tone.
47a80 56 6f 6c 75 6d 65 2e 70 72 6f 74 6f 74 79 70 65  Volume.prototype
47a90 2c 20 27 6d 75 74 65 27 2c 20 7b 0a 09 20 20 20  , 'mute', {..   
47aa0 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69       get: functi
47ab0 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
47ac0 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
47ad0 2e 5f 6d 75 74 65 64 3b 0a 09 20 20 20 20 20 20  ._muted;..      
47ae0 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65    },..        se
47af0 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 6d 75 74  t: function (mut
47b00 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  e) {..          
47b10 20 20 69 66 20 28 21 74 68 69 73 2e 5f 6d 75 74    if (!this._mut
47b20 65 64 20 26 26 20 6d 75 74 65 29 20 7b 0a 09 20  ed && mute) {.. 
47b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
47b40 68 69 73 2e 5f 75 6e 6d 75 74 65 64 56 6f 6c 75  his._unmutedVolu
47b50 6d 65 20 3d 20 74 68 69 73 2e 76 6f 6c 75 6d 65  me = this.volume
47b60 2e 76 61 6c 75 65 3b 0a 09 20 20 20 20 20 20 20  .value;..       
47b70 20 20 20 20 20 20 20 20 20 2f 2f 6d 61 79 62 65           //maybe
47b80 20 69 74 20 73 68 6f 75 6c 64 20 72 61 6d 70 20   it should ramp 
47b90 68 65 72 65 3f 0a 09 20 20 20 20 20 20 20 20 20  here?..         
47ba0 20 20 20 20 20 20 20 74 68 69 73 2e 76 6f 6c 75         this.volu
47bb0 6d 65 2e 76 61 6c 75 65 20 3d 20 2d 49 6e 66 69  me.value = -Infi
47bc0 6e 69 74 79 3b 0a 09 20 20 20 20 20 20 20 20 20  nity;..         
47bd0 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 74 68     } else if (th
47be0 69 73 2e 5f 6d 75 74 65 64 20 26 26 20 21 6d 75  is._muted && !mu
47bf0 74 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  te) {..         
47c00 20 20 20 20 20 20 20 74 68 69 73 2e 76 6f 6c 75         this.volu
47c10 6d 65 2e 76 61 6c 75 65 20 3d 20 74 68 69 73 2e  me.value = this.
47c20 5f 75 6e 6d 75 74 65 64 56 6f 6c 75 6d 65 3b 0a  _unmutedVolume;.
47c30 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09  .            }..
47c40 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
47c50 2e 5f 6d 75 74 65 64 20 3d 20 6d 75 74 65 3b 0a  ._muted = mute;.
47c60 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
47c70 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  });..    /**... 
47c80 2a 20 20 63 6c 65 61 6e 20 75 70 0a 09 09 20 2a  *  clean up... *
47c90 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65    @returns {Tone
47ca0 2e 56 6f 6c 75 6d 65 7d 20 74 68 69 73 0a 09 09  .Volume} this...
47cb0 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 56 6f   */..    Tone.Vo
47cc0 6c 75 6d 65 2e 70 72 6f 74 6f 74 79 70 65 2e 64  lume.prototype.d
47cd0 69 73 70 6f 73 65 20 3d 20 66 75 6e 63 74 69 6f  ispose = functio
47ce0 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
47cf0 74 68 69 73 2e 69 6e 70 75 74 2e 64 69 73 70 6f  this.input.dispo
47d00 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 54  se();..        T
47d10 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69  one.prototype.di
47d20 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69 73 29  spose.call(this)
47d30 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
47d40 5f 77 72 69 74 61 62 6c 65 28 27 76 6f 6c 75 6d  _writable('volum
47d50 65 27 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  e');..        th
47d60 69 73 2e 76 6f 6c 75 6d 65 2e 64 69 73 70 6f 73  is.volume.dispos
47d70 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  e();..        th
47d80 69 73 2e 76 6f 6c 75 6d 65 20 3d 20 6e 75 6c 6c  is.volume = null
47d90 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
47da0 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a  n this;..    };.
47db0 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65  .    return Tone
47dc0 2e 56 6f 6c 75 6d 65 3b 0a 09 7d 29 3b 0a 09 4d  .Volume;..});..M
47dd0 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28  odule(function (
47de0 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09 20  Tone) {..    .. 
47df0 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c     /**... *  @cl
47e00 61 73 73 20 20 41 20 73 69 6e 67 6c 65 20 6d 61  ass  A single ma
47e10 73 74 65 72 20 6f 75 74 70 75 74 20 77 68 69 63  ster output whic
47e20 68 20 69 73 20 63 6f 6e 6e 65 63 74 65 64 20 74  h is connected t
47e30 6f 20 74 68 65 0a 09 09 20 2a 20 20 20 20 20 20  o the... *      
47e40 20 20 20 20 41 75 64 69 6f 44 65 73 74 69 6e 61      AudioDestina
47e50 74 69 6f 6e 4e 6f 64 65 20 28 61 6b 61 20 79 6f  tionNode (aka yo
47e60 75 72 20 73 70 65 61 6b 65 72 73 29 2e 20 0a 09  ur speakers). ..
47e70 09 20 2a 20 20 20 20 20 20 20 20 20 20 49 74 20  . *          It 
47e80 70 72 6f 76 69 64 65 73 20 75 73 65 66 75 6c 20  provides useful 
47e90 63 6f 6e 76 65 6e 69 65 6e 63 65 73 20 73 75 63  conveniences suc
47ea0 68 20 61 73 20 74 68 65 20 61 62 69 6c 69 74 79  h as the ability
47eb0 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20   ... *          
47ec0 74 6f 20 73 65 74 20 74 68 65 20 76 6f 6c 75 6d  to set the volum
47ed0 65 20 61 6e 64 20 6d 75 74 65 20 74 68 65 20 65  e and mute the e
47ee0 6e 74 69 72 65 20 61 70 70 6c 69 63 61 74 69 6f  ntire applicatio
47ef0 6e 2e 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20  n. ... *        
47f00 20 20 49 74 20 61 6c 73 6f 20 67 69 76 65 73 20    It also gives 
47f10 79 6f 75 20 74 68 65 20 61 62 69 6c 69 74 79 20  you the ability 
47f20 74 6f 20 61 70 70 6c 79 20 6d 61 73 74 65 72 20  to apply master 
47f30 65 66 66 65 63 74 73 20 74 6f 20 79 6f 75 72 20  effects to your 
47f40 61 70 70 6c 69 63 61 74 69 6f 6e 2e 20 0a 09 09  application. ...
47f50 20 2a 20 20 20 20 20 20 20 20 20 20 3c 62 72 3e   *          <br>
47f60 3c 62 72 3e 0a 09 09 20 2a 20 20 20 20 20 20 20  <br>... *       
47f70 20 20 20 4c 69 6b 65 20 54 6f 6e 65 2e 54 72 61     Like Tone.Tra
47f80 6e 73 70 6f 72 74 2c 20 41 20 73 69 6e 67 6c 65  nsport, A single
47f90 20 54 6f 6e 65 2e 4d 61 73 74 65 72 20 69 73 20   Tone.Master is 
47fa0 63 72 65 61 74 65 64 0a 09 09 20 2a 20 20 20 20  created... *    
47fb0 20 20 20 20 20 20 6f 6e 20 69 6e 69 74 69 61 6c        on initial
47fc0 69 7a 61 74 69 6f 6e 20 61 6e 64 20 79 6f 75 20  ization and you 
47fd0 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 65  do not need to e
47fe0 78 70 6c 69 63 69 74 6c 79 20 63 6f 6e 73 74 72  xplicitly constr
47ff0 75 63 74 20 6f 6e 65 2e 0a 09 09 20 2a 0a 09 09  uct one.... *...
48000 20 2a 20 20 40 63 6f 6e 73 74 72 75 63 74 6f 72   *  @constructor
48010 0a 09 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20  ... *  @extends 
48020 7b 54 6f 6e 65 7d 0a 09 09 20 2a 20 20 40 73 69  {Tone}... *  @si
48030 6e 67 6c 65 74 6f 6e 0a 09 09 20 2a 20 20 40 65  ngleton... *  @e
48040 78 61 6d 70 6c 65 0a 09 09 20 2a 20 2f 2f 74 68  xample... * //th
48050 65 20 61 75 64 69 6f 20 77 69 6c 6c 20 67 6f 20  e audio will go 
48060 66 72 6f 6d 20 74 68 65 20 6f 73 63 69 6c 6c 61  from the oscilla
48070 74 6f 72 20 74 6f 20 74 68 65 20 73 70 65 61 6b  tor to the speak
48080 65 72 73 0a 09 09 20 2a 20 6f 73 63 69 6c 6c 61  ers... * oscilla
48090 74 6f 72 2e 63 6f 6e 6e 65 63 74 28 54 6f 6e 65  tor.connect(Tone
480a0 2e 4d 61 73 74 65 72 29 3b 0a 09 09 20 2a 20 2f  .Master);... * /
480b0 2f 61 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 66  /a convenience f
480c0 6f 72 20 63 6f 6e 6e 65 63 74 69 6e 67 20 74 6f  or connecting to
480d0 20 74 68 65 20 6d 61 73 74 65 72 20 6f 75 74 70   the master outp
480e0 75 74 20 69 73 20 61 6c 73 6f 20 70 72 6f 76 69  ut is also provi
480f0 64 65 64 3a 0a 09 09 20 2a 20 6f 73 63 69 6c 6c  ded:... * oscill
48100 61 74 6f 72 2e 74 6f 4d 61 73 74 65 72 28 29 3b  ator.toMaster();
48110 0a 09 09 20 2a 20 2f 2f 74 68 65 20 61 62 6f 76  ... * //the abov
48120 65 20 74 77 6f 20 65 78 61 6d 70 6c 65 73 20 61  e two examples a
48130 72 65 20 65 71 75 69 76 61 6c 65 6e 74 2e 0a 09  re equivalent...
48140 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4d  . */..    Tone.M
48150 61 73 74 65 72 20 3d 20 66 75 6e 63 74 69 6f 6e  aster = function
48160 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 74   () {..        t
48170 68 69 73 2e 63 72 65 61 74 65 49 6e 73 4f 75 74  his.createInsOut
48180 73 28 31 2c 20 31 29 3b 0a 09 20 20 20 20 20 20  s(1, 1);..      
48190 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65    /**.... *  The
481a0 20 70 72 69 76 61 74 65 20 76 6f 6c 75 6d 65 20   private volume 
481b0 6e 6f 64 65 0a 09 09 09 20 2a 20 20 40 74 79 70  node.... *  @typ
481c0 65 20 20 7b 54 6f 6e 65 2e 56 6f 6c 75 6d 65 7d  e  {Tone.Volume}
481d0 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  .... *  @private
481e0 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
481f0 20 74 68 69 73 2e 5f 76 6f 6c 75 6d 65 20 3d 20   this._volume = 
48200 74 68 69 73 2e 6f 75 74 70 75 74 20 3d 20 6e 65  this.output = ne
48210 77 20 54 6f 6e 65 2e 56 6f 6c 75 6d 65 28 29 3b  w Tone.Volume();
48220 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
48230 09 20 2a 20 54 68 65 20 76 6f 6c 75 6d 65 20 6f  . * The volume o
48240 66 20 74 68 65 20 6d 61 73 74 65 72 20 6f 75 74  f the master out
48250 70 75 74 2e 0a 09 09 09 20 2a 20 40 74 79 70 65  put..... * @type
48260 20 7b 44 65 63 69 62 65 6c 73 7d 0a 09 09 09 20   {Decibels}.... 
48270 2a 20 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f  * @signal.... */
48280 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 76  ..        this.v
48290 6f 6c 75 6d 65 20 3d 20 74 68 69 73 2e 5f 76 6f  olume = this._vo
482a0 6c 75 6d 65 2e 76 6f 6c 75 6d 65 3b 0a 09 20 20  lume.volume;..  
482b0 20 20 20 20 20 20 74 68 69 73 2e 5f 72 65 61 64        this._read
482c0 4f 6e 6c 79 28 27 76 6f 6c 75 6d 65 27 29 3b 0a  Only('volume');.
482d0 09 20 20 20 20 20 20 20 20 2f 2f 63 6f 6e 6e 65  .        //conne
482e0 63 74 69 6f 6e 73 0a 09 20 20 20 20 20 20 20 20  ctions..        
482f0 74 68 69 73 2e 69 6e 70 75 74 2e 63 68 61 69 6e  this.input.chain
48300 28 74 68 69 73 2e 6f 75 74 70 75 74 2c 20 74 68  (this.output, th
48310 69 73 2e 63 6f 6e 74 65 78 74 2e 64 65 73 74 69  is.context.desti
48320 6e 61 74 69 6f 6e 29 3b 0a 09 20 20 20 20 7d 3b  nation);..    };
48330 0a 09 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e  ..    Tone.exten
48340 64 28 54 6f 6e 65 2e 4d 61 73 74 65 72 29 3b 0a  d(Tone.Master);.
48350 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40  .    /**... *  @
48360 74 79 70 65 20 7b 4f 62 6a 65 63 74 7d 0a 09 09  type {Object}...
48370 20 2a 20 20 40 63 6f 6e 73 74 0a 09 09 20 2a 2f   *  @const... */
48380 0a 09 20 20 20 20 54 6f 6e 65 2e 4d 61 73 74 65  ..    Tone.Maste
48390 72 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b 0a 09  r.defaults = {..
483a0 20 20 20 20 20 20 20 20 27 76 6f 6c 75 6d 65 27          'volume'
483b0 3a 20 30 2c 0a 09 20 20 20 20 20 20 20 20 27 6d  : 0,..        'm
483c0 75 74 65 27 3a 20 66 61 6c 73 65 0a 09 20 20 20  ute': false..   
483d0 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20   };..    /**... 
483e0 2a 20 4d 75 74 65 20 74 68 65 20 6f 75 74 70 75  * Mute the outpu
483f0 74 2e 20 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72  t. ... * @member
48400 4f 66 20 54 6f 6e 65 2e 4d 61 73 74 65 72 23 0a  Of Tone.Master#.
48410 09 09 20 2a 20 40 74 79 70 65 20 7b 62 6f 6f 6c  .. * @type {bool
48420 65 61 6e 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20  ean}... * @name 
48430 6d 75 74 65 0a 09 09 20 2a 20 40 65 78 61 6d 70  mute... * @examp
48440 6c 65 0a 09 09 20 2a 20 2f 2f 6d 75 74 65 20 74  le... * //mute t
48450 68 65 20 6f 75 74 70 75 74 0a 09 09 20 2a 20 54  he output... * T
48460 6f 6e 65 2e 4d 61 73 74 65 72 2e 6d 75 74 65 20  one.Master.mute 
48470 3d 20 74 72 75 65 3b 0a 09 09 20 2a 2f 0a 09 20  = true;... */.. 
48480 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65     Object.define
48490 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 4d 61  Property(Tone.Ma
484a0 73 74 65 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20  ster.prototype, 
484b0 27 6d 75 74 65 27 2c 20 7b 0a 09 20 20 20 20 20  'mute', {..     
484c0 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e     get: function
484d0 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20   () {..         
484e0 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f     return this._
484f0 76 6f 6c 75 6d 65 2e 6d 75 74 65 3b 0a 09 20 20  volume.mute;..  
48500 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20        },..      
48510 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    set: function 
48520 28 6d 75 74 65 29 20 7b 0a 09 20 20 20 20 20 20  (mute) {..      
48530 20 20 20 20 20 20 74 68 69 73 2e 5f 76 6f 6c 75        this._volu
48540 6d 65 2e 6d 75 74 65 20 3d 20 6d 75 74 65 3b 0a  me.mute = mute;.
48550 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
48560 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  });..    /**... 
48570 2a 20 20 41 64 64 20 61 20 6d 61 73 74 65 72 20  *  Add a master 
48580 65 66 66 65 63 74 73 20 63 68 61 69 6e 2e 20 4e  effects chain. N
48590 4f 54 45 3a 20 74 68 69 73 20 77 69 6c 6c 20 64  OTE: this will d
485a0 69 73 63 6f 6e 6e 65 63 74 20 61 6e 79 20 6e 6f  isconnect any no
485b0 64 65 73 20 77 68 69 63 68 20 77 65 72 65 20 70  des which were p
485c0 72 65 76 69 6f 75 73 6c 79 20 0a 09 09 20 2a 20  reviously ... * 
485d0 20 63 68 61 69 6e 65 64 20 69 6e 20 74 68 65 20   chained in the 
485e0 6d 61 73 74 65 72 20 65 66 66 65 63 74 73 20 63  master effects c
485f0 68 61 69 6e 2e 20 0a 09 09 20 2a 20 20 40 70 61  hain. ... *  @pa
48600 72 61 6d 20 7b 41 75 64 69 6f 4e 6f 64 65 7c 54  ram {AudioNode|T
48610 6f 6e 65 2e 2e 2e 7d 20 61 72 67 73 20 41 6c 6c  one...} args All
48620 20 61 72 67 75 6d 65 6e 74 73 20 77 69 6c 6c 20   arguments will 
48630 62 65 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e 20  be connected in 
48640 61 20 72 6f 77 0a 09 09 20 2a 20 20 20 20 20 20  a row... *      
48650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48660 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20              and 
48670 74 68 65 20 4d 61 73 74 65 72 20 77 69 6c 6c 20  the Master will 
48680 62 65 20 72 6f 75 74 65 64 20 74 68 72 6f 75 67  be routed throug
48690 68 20 69 74 2e 0a 09 09 20 2a 20 20 40 72 65 74  h it.... *  @ret
486a0 75 72 6e 20 20 7b 54 6f 6e 65 2e 4d 61 73 74 65  urn  {Tone.Maste
486b0 72 7d 20 20 74 68 69 73 0a 09 09 20 2a 20 20 40  r}  this... *  @
486c0 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 2f 2f 73  example... * //s
486d0 6f 6d 65 20 6f 76 65 72 61 6c 6c 20 63 6f 6d 70  ome overall comp
486e0 72 65 73 73 69 6f 6e 20 74 6f 20 6b 65 65 70 20  ression to keep 
486f0 74 68 65 20 6c 65 76 65 6c 73 20 69 6e 20 63 68  the levels in ch
48700 65 63 6b 0a 09 09 20 2a 20 76 61 72 20 6d 61 73  eck... * var mas
48710 74 65 72 43 6f 6d 70 72 65 73 73 6f 72 20 3d 20  terCompressor = 
48720 6e 65 77 20 54 6f 6e 65 2e 43 6f 6d 70 72 65 73  new Tone.Compres
48730 73 6f 72 28 7b 0a 09 09 20 2a 20 09 22 74 68 72  sor({... * ."thr
48740 65 73 68 6f 6c 64 22 20 3a 20 2d 36 2c 0a 09 09  eshold" : -6,...
48750 20 2a 20 09 22 72 61 74 69 6f 22 20 3a 20 33 2c   * ."ratio" : 3,
48760 0a 09 09 20 2a 20 09 22 61 74 74 61 63 6b 22 20  ... * ."attack" 
48770 3a 20 30 2e 35 2c 0a 09 09 20 2a 20 09 22 72 65  : 0.5,... * ."re
48780 6c 65 61 73 65 22 20 3a 20 30 2e 31 0a 09 09 20  lease" : 0.1... 
48790 2a 20 7d 29 3b 0a 09 09 20 2a 20 2f 2f 67 69 76  * });... * //giv
487a0 65 20 61 20 6c 69 74 74 6c 65 20 62 6f 6f 73 74  e a little boost
487b0 20 74 6f 20 74 68 65 20 6c 6f 77 73 0a 09 09 20   to the lows... 
487c0 2a 20 76 61 72 20 6c 6f 77 42 75 6d 70 20 3d 20  * var lowBump = 
487d0 6e 65 77 20 54 6f 6e 65 2e 46 69 6c 74 65 72 28  new Tone.Filter(
487e0 32 30 30 2c 20 22 6c 6f 77 73 68 65 6c 66 22 29  200, "lowshelf")
487f0 3b 0a 09 09 20 2a 20 2f 2f 72 6f 75 74 65 20 65  ;... * //route e
48800 76 65 72 79 74 68 69 6e 67 20 74 68 72 6f 75 67  verything throug
48810 68 20 74 68 65 20 66 69 6c 74 65 72 20 0a 09 09  h the filter ...
48820 20 2a 20 2f 2f 61 6e 64 20 63 6f 6d 70 72 65 73   * //and compres
48830 73 6f 72 20 62 65 66 6f 72 65 20 67 6f 69 6e 67  sor before going
48840 20 74 6f 20 74 68 65 20 73 70 65 61 6b 65 72 73   to the speakers
48850 0a 09 09 20 2a 20 54 6f 6e 65 2e 4d 61 73 74 65  ... * Tone.Maste
48860 72 2e 63 68 61 69 6e 28 6c 6f 77 42 75 6d 70 2c  r.chain(lowBump,
48870 20 6d 61 73 74 65 72 43 6f 6d 70 72 65 73 73 6f   masterCompresso
48880 72 29 3b 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  r);... */..    T
48890 6f 6e 65 2e 4d 61 73 74 65 72 2e 70 72 6f 74 6f  one.Master.proto
488a0 74 79 70 65 2e 63 68 61 69 6e 20 3d 20 66 75 6e  type.chain = fun
488b0 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
488c0 20 20 20 20 74 68 69 73 2e 69 6e 70 75 74 2e 64      this.input.d
488d0 69 73 63 6f 6e 6e 65 63 74 28 29 3b 0a 09 20 20  isconnect();..  
488e0 20 20 20 20 20 20 74 68 69 73 2e 69 6e 70 75 74        this.input
488f0 2e 63 68 61 69 6e 2e 61 70 70 6c 79 28 74 68 69  .chain.apply(thi
48900 73 2e 69 6e 70 75 74 2c 20 61 72 67 75 6d 65 6e  s.input, argumen
48910 74 73 29 3b 0a 09 20 20 20 20 20 20 20 20 61 72  ts);..        ar
48920 67 75 6d 65 6e 74 73 5b 61 72 67 75 6d 65 6e 74  guments[argument
48930 73 2e 6c 65 6e 67 74 68 20 2d 20 31 5d 2e 63 6f  s.length - 1].co
48940 6e 6e 65 63 74 28 74 68 69 73 2e 6f 75 74 70 75  nnect(this.outpu
48950 74 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  t);..    };..   
48960 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 6c 65 61 6e   /**... *  Clean
48970 20 75 70 0a 09 09 20 2a 20 20 40 72 65 74 75 72   up... *  @retur
48980 6e 20 20 7b 54 6f 6e 65 2e 4d 61 73 74 65 72 7d  n  {Tone.Master}
48990 20 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20    this... */..  
489a0 20 20 54 6f 6e 65 2e 4d 61 73 74 65 72 2e 70 72    Tone.Master.pr
489b0 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20  ototype.dispose 
489c0 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  = function () {.
489d0 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 70 72  .        Tone.pr
489e0 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 2e  ototype.dispose.
489f0 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20 20  call(this);..   
48a00 20 20 20 20 20 74 68 69 73 2e 5f 77 72 69 74 61       this._writa
48a10 62 6c 65 28 27 76 6f 6c 75 6d 65 27 29 3b 0a 09  ble('volume');..
48a20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 76 6f          this._vo
48a30 6c 75 6d 65 2e 64 69 73 70 6f 73 65 28 29 3b 0a  lume.dispose();.
48a40 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 76  .        this._v
48a50 6f 6c 75 6d 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20  olume = null;.. 
48a60 20 20 20 20 20 20 20 74 68 69 73 2e 76 6f 6c 75         this.volu
48a70 6d 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  me = null;..    
48a80 7d 3b 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  };..    ////////
48a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48ad0 2f 2f 2f 0a 09 20 20 20 20 2f 2f 09 41 55 47 4d  ///..    //.AUGM
48ae0 45 4e 54 20 54 4f 4e 45 27 73 20 50 52 4f 54 4f  ENT TONE's PROTO
48af0 54 59 50 45 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f  TYPE..    //////
48b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48b40 2f 2f 2f 2f 2f 0a 09 20 20 20 20 2f 2a 2a 0a 09  /////..    /**..
48b50 09 20 2a 20 20 43 6f 6e 6e 65 63 74 20 27 74 68  . *  Connect 'th
48b60 69 73 27 20 74 6f 20 74 68 65 20 6d 61 73 74 65  is' to the maste
48b70 72 20 6f 75 74 70 75 74 2e 20 53 68 6f 72 74 68  r output. Shorth
48b80 61 6e 64 20 66 6f 72 20 74 68 69 73 2e 63 6f 6e  and for this.con
48b90 6e 65 63 74 28 54 6f 6e 65 2e 4d 61 73 74 65 72  nect(Tone.Master
48ba0 29 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73  )... *  @returns
48bb0 20 7b 54 6f 6e 65 7d 20 74 68 69 73 0a 09 09 20   {Tone} this... 
48bc0 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a  *  @example... *
48bd0 20 2f 2f 63 6f 6e 6e 65 63 74 20 61 6e 20 6f 73   //connect an os
48be0 63 69 6c 6c 61 74 6f 72 20 74 6f 20 74 68 65 20  cillator to the 
48bf0 6d 61 73 74 65 72 20 6f 75 74 70 75 74 0a 09 09  master output...
48c00 20 2a 20 76 61 72 20 6f 73 63 20 3d 20 6e 65 77   * var osc = new
48c10 20 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f 72   Tone.Oscillator
48c20 28 29 2e 74 6f 4d 61 73 74 65 72 28 29 3b 0a 09  ().toMaster();..
48c30 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 70  . */..    Tone.p
48c40 72 6f 74 6f 74 79 70 65 2e 74 6f 4d 61 73 74 65  rototype.toMaste
48c50 72 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  r = function () 
48c60 7b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  {..        this.
48c70 63 6f 6e 6e 65 63 74 28 54 6f 6e 65 2e 4d 61 73  connect(Tone.Mas
48c80 74 65 72 29 3b 0a 09 20 20 20 20 20 20 20 20 72  ter);..        r
48c90 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20  eturn this;..   
48ca0 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20   };..    /**... 
48cb0 2a 20 20 41 6c 73 6f 20 61 75 67 6d 65 6e 74 20  *  Also augment 
48cc0 41 75 64 69 6f 4e 6f 64 65 27 73 20 70 72 6f 74  AudioNode's prot
48cd0 6f 74 79 70 65 20 74 6f 20 69 6e 63 6c 75 64 65  otype to include
48ce0 20 74 6f 4d 61 73 74 65 72 0a 09 09 20 2a 20 20   toMaster... *  
48cf0 61 73 20 61 20 63 6f 6e 76 65 6e 69 65 6e 63 65  as a convenience
48d00 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20  ... *  @returns 
48d10 7b 41 75 64 69 6f 4e 6f 64 65 7d 20 74 68 69 73  {AudioNode} this
48d20 0a 09 09 20 2a 2f 0a 09 20 20 20 20 41 75 64 69  ... */..    Audi
48d30 6f 4e 6f 64 65 2e 70 72 6f 74 6f 74 79 70 65 2e  oNode.prototype.
48d40 74 6f 4d 61 73 74 65 72 20 3d 20 66 75 6e 63 74  toMaster = funct
48d50 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
48d60 20 20 74 68 69 73 2e 63 6f 6e 6e 65 63 74 28 54    this.connect(T
48d70 6f 6e 65 2e 4d 61 73 74 65 72 29 3b 0a 09 20 20  one.Master);..  
48d80 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
48d90 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  s;..    };..    
48da0 76 61 72 20 4d 61 73 74 65 72 43 6f 6e 73 74 72  var MasterConstr
48db0 75 63 74 6f 72 20 3d 20 54 6f 6e 65 2e 4d 61 73  uctor = Tone.Mas
48dc0 74 65 72 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09  ter;..    /**...
48dd0 20 2a 20 20 69 6e 69 74 69 61 6c 69 7a 65 20 74   *  initialize t
48de0 68 65 20 6d 6f 64 75 6c 65 20 61 6e 64 20 6c 69  he module and li
48df0 73 74 65 6e 20 66 6f 72 20 6e 65 77 20 61 75 64  sten for new aud
48e00 69 6f 20 63 6f 6e 74 65 78 74 73 0a 09 09 20 2a  io contexts... *
48e10 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 5f 69 6e 69  /..    Tone._ini
48e20 74 41 75 64 69 6f 43 6f 6e 74 65 78 74 28 66 75  tAudioContext(fu
48e30 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
48e40 20 20 20 20 20 2f 2f 61 20 73 69 6e 67 6c 65 20       //a single 
48e50 6d 61 73 74 65 72 20 6f 75 74 70 75 74 0a 09 20  master output.. 
48e60 20 20 20 20 20 20 20 69 66 20 28 21 54 6f 6e 65         if (!Tone
48e70 2e 70 72 6f 74 6f 74 79 70 65 2e 69 73 55 6e 64  .prototype.isUnd
48e80 65 66 28 54 6f 6e 65 2e 4d 61 73 74 65 72 29 29  ef(Tone.Master))
48e90 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
48ea0 54 6f 6e 65 2e 4d 61 73 74 65 72 20 3d 20 6e 65  Tone.Master = ne
48eb0 77 20 4d 61 73 74 65 72 43 6f 6e 73 74 72 75 63  w MasterConstruc
48ec0 74 6f 72 28 29 3b 0a 09 20 20 20 20 20 20 20 20  tor();..        
48ed0 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20  } else {..      
48ee0 20 20 20 20 20 20 4d 61 73 74 65 72 43 6f 6e 73        MasterCons
48ef0 74 72 75 63 74 6f 72 2e 70 72 6f 74 6f 74 79 70  tructor.prototyp
48f00 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28 54  e.dispose.call(T
48f10 6f 6e 65 2e 4d 61 73 74 65 72 29 3b 0a 09 20 20  one.Master);..  
48f20 20 20 20 20 20 20 20 20 20 20 4d 61 73 74 65 72            Master
48f30 43 6f 6e 73 74 72 75 63 74 6f 72 2e 63 61 6c 6c  Constructor.call
48f40 28 54 6f 6e 65 2e 4d 61 73 74 65 72 29 3b 0a 09  (Tone.Master);..
48f50 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d          }..    }
48f60 29 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54  );..    return T
48f70 6f 6e 65 2e 4d 61 73 74 65 72 3b 0a 09 7d 29 3b  one.Master;..});
48f80 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f  ..Module(functio
48f90 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20  n (Tone) {..    
48fa0 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
48fb0 40 63 6c 61 73 73 20 20 42 61 73 65 20 63 6c 61  @class  Base cla
48fc0 73 73 20 66 6f 72 20 73 6f 75 72 63 65 73 2e 20  ss for sources. 
48fd0 53 6f 75 72 63 65 73 20 68 61 76 65 20 73 74 61  Sources have sta
48fe0 72 74 2f 73 74 6f 70 20 6d 65 74 68 6f 64 73 0a  rt/stop methods.
48ff0 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 61 6e  .. *          an
49000 64 20 74 68 65 20 61 62 69 6c 69 74 79 20 74 6f  d the ability to
49010 20 62 65 20 73 79 6e 63 65 64 20 74 6f 20 74 68   be synced to th
49020 65 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  e ... *         
49030 20 73 74 61 72 74 2f 73 74 6f 70 20 6f 66 20 54   start/stop of T
49040 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 2e 20 0a  one.Transport. .
49050 09 09 20 2a 0a 09 09 20 2a 20 20 40 63 6f 6e 73  .. *... *  @cons
49060 74 72 75 63 74 6f 72 0a 09 09 20 2a 20 20 40 65  tructor... *  @e
49070 78 74 65 6e 64 73 20 7b 54 6f 6e 65 7d 0a 09 09  xtends {Tone}...
49080 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20   *  @example... 
49090 2a 20 2f 2f 4d 75 6c 74 69 70 6c 65 20 73 74 61  * //Multiple sta
490a0 74 65 20 63 68 61 6e 67 65 20 65 76 65 6e 74 73  te change events
490b0 20 63 61 6e 20 62 65 20 63 68 61 69 6e 65 64 20   can be chained 
490c0 74 6f 67 65 74 68 65 72 2c 0a 09 09 20 2a 20 2f  together,... * /
490d0 2f 62 75 74 20 6d 75 73 74 20 62 65 20 73 65 74  /but must be set
490e0 20 69 6e 20 74 68 65 20 63 6f 72 72 65 63 74 20   in the correct 
490f0 6f 72 64 65 72 20 61 6e 64 20 77 69 74 68 20 61  order and with a
49100 73 63 65 6e 64 69 6e 67 20 74 69 6d 65 73 0a 09  scending times..
49110 09 20 2a 20 0a 09 09 20 2a 20 2f 2f 20 4f 4b 0a  . * ... * // OK.
49120 09 09 20 2a 20 73 74 61 74 65 2e 73 74 61 72 74  .. * state.start
49130 28 29 2e 73 74 6f 70 28 22 2b 30 2e 32 22 29 3b  ().stop("+0.2");
49140 0a 09 09 20 2a 20 2f 2f 20 41 4e 44 0a 09 09 20  ... * // AND... 
49150 2a 20 73 74 61 74 65 2e 73 74 61 72 74 28 29 2e  * state.start().
49160 73 74 6f 70 28 22 2b 30 2e 32 22 29 2e 73 74 61  stop("+0.2").sta
49170 72 74 28 22 2b 30 2e 34 22 29 2e 73 74 6f 70 28  rt("+0.4").stop(
49180 22 2b 30 2e 37 22 29 0a 09 09 20 2a 0a 09 09 20  "+0.7")... *... 
49190 2a 20 2f 2f 20 42 41 44 0a 09 09 20 2a 20 73 74  * // BAD... * st
491a0 61 74 65 2e 73 74 6f 70 28 22 2b 30 2e 32 22 29  ate.stop("+0.2")
491b0 2e 73 74 61 72 74 28 29 3b 0a 09 09 20 2a 20 2f  .start();... * /
491c0 2f 20 4f 52 0a 09 09 20 2a 20 73 74 61 74 65 2e  / OR... * state.
491d0 73 74 61 72 74 28 22 2b 30 2e 33 22 29 2e 73 74  start("+0.3").st
491e0 6f 70 28 22 2b 30 2e 32 22 29 3b 0a 09 09 20 2a  op("+0.2");... *
491f0 20 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e   ... */..    Ton
49200 65 2e 53 6f 75 72 63 65 20 3d 20 66 75 6e 63 74  e.Source = funct
49210 69 6f 6e 20 28 6f 70 74 69 6f 6e 73 29 20 7b 0a  ion (options) {.
49220 09 20 20 20 20 20 20 20 20 2f 2f 20 74 68 69 73  .        // this
49230 2e 63 72 65 61 74 65 49 6e 73 4f 75 74 73 28 30  .createInsOuts(0
49240 2c 20 31 29 3b 0a 09 20 20 20 20 20 20 20 20 6f  , 1);..        o
49250 70 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e 64 65  ptions = this.de
49260 66 61 75 6c 74 41 72 67 28 6f 70 74 69 6f 6e 73  faultArg(options
49270 2c 20 54 6f 6e 65 2e 53 6f 75 72 63 65 2e 64 65  , Tone.Source.de
49280 66 61 75 6c 74 73 29 3b 0a 09 20 20 20 20 20 20  faults);..      
49290 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65    /**.... *  The
492a0 20 6f 75 74 70 75 74 20 76 6f 6c 75 6d 65 20 6e   output volume n
492b0 6f 64 65 0a 09 09 09 20 2a 20 20 40 74 79 70 65  ode.... *  @type
492c0 20 20 7b 54 6f 6e 65 2e 56 6f 6c 75 6d 65 7d 0a    {Tone.Volume}.
492d0 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
492e0 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
492f0 74 68 69 73 2e 5f 76 6f 6c 75 6d 65 20 3d 20 74  this._volume = t
49300 68 69 73 2e 6f 75 74 70 75 74 20 3d 20 6e 65 77  his.output = new
49310 20 54 6f 6e 65 2e 56 6f 6c 75 6d 65 28 6f 70 74   Tone.Volume(opt
49320 69 6f 6e 73 2e 76 6f 6c 75 6d 65 29 3b 0a 09 20  ions.volume);.. 
49330 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
49340 20 54 68 65 20 76 6f 6c 75 6d 65 20 6f 66 20 74   The volume of t
49350 68 65 20 6f 75 74 70 75 74 20 69 6e 20 64 65 63  he output in dec
49360 69 62 65 6c 73 2e 0a 09 09 09 20 2a 20 40 74 79  ibels..... * @ty
49370 70 65 20 7b 44 65 63 69 62 65 6c 73 7d 0a 09 09  pe {Decibels}...
49380 09 20 2a 20 40 73 69 67 6e 61 6c 0a 09 09 09 20  . * @signal.... 
49390 2a 20 40 65 78 61 6d 70 6c 65 0a 09 09 09 20 2a  * @example.... *
493a0 20 73 6f 75 72 63 65 2e 76 6f 6c 75 6d 65 2e 76   source.volume.v
493b0 61 6c 75 65 20 3d 20 2d 36 3b 0a 09 09 09 20 2a  alue = -6;.... *
493c0 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
493d0 76 6f 6c 75 6d 65 20 3d 20 74 68 69 73 2e 5f 76  volume = this._v
493e0 6f 6c 75 6d 65 2e 76 6f 6c 75 6d 65 3b 0a 09 20  olume.volume;.. 
493f0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 72 65 61         this._rea
49400 64 4f 6e 6c 79 28 27 76 6f 6c 75 6d 65 27 29 3b  dOnly('volume');
49410 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
49420 09 20 2a 20 09 4b 65 65 70 20 74 72 61 63 6b 20  . * .Keep track 
49430 6f 66 20 74 68 65 20 73 63 68 65 64 75 6c 65 64  of the scheduled
49440 20 73 74 61 74 65 2e 0a 09 09 09 20 2a 20 20 40   state..... *  @
49450 74 79 70 65 20 7b 54 6f 6e 65 2e 54 69 6d 65 6c  type {Tone.Timel
49460 69 6e 65 53 74 61 74 65 7d 0a 09 09 09 20 2a 20  ineState}.... * 
49470 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f   @private.... */
49480 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
49490 73 74 61 74 65 20 3d 20 6e 65 77 20 54 6f 6e 65  state = new Tone
494a0 2e 54 69 6d 65 6c 69 6e 65 53 74 61 74 65 28 54  .TimelineState(T
494b0 6f 6e 65 2e 53 74 61 74 65 2e 53 74 6f 70 70 65  one.State.Stoppe
494c0 64 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  d);..        thi
494d0 73 2e 5f 73 74 61 74 65 2e 6d 65 6d 6f 72 79 20  s._state.memory 
494e0 3d 20 31 30 3b 0a 09 20 20 20 20 20 20 20 20 2f  = 10;..        /
494f0 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 73 79  **.... *  The sy
49500 6e 63 65 64 20 60 73 74 61 72 74 60 20 63 61 6c  nced `start` cal
49510 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 66  lback function f
49520 72 6f 6d 20 74 68 65 20 74 72 61 6e 73 70 6f 72  rom the transpor
49530 74 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b  t.... *  @type {
49540 46 75 6e 63 74 69 6f 6e 7d 0a 09 09 09 20 2a 20  Function}.... * 
49550 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f   @private.... */
49560 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
49570 73 79 6e 63 65 64 20 3d 20 66 61 6c 73 65 3b 0a  synced = false;.
49580 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
49590 20 2a 20 20 4b 65 65 70 20 74 72 61 63 6b 20 6f   *  Keep track o
495a0 66 20 61 6c 6c 20 6f 66 20 74 68 65 20 73 63 68  f all of the sch
495b0 65 64 75 6c 65 64 20 65 76 65 6e 74 20 69 64 73  eduled event ids
495c0 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 20 7b  .... *  @type  {
495d0 41 72 72 61 79 7d 0a 09 09 09 20 2a 20 20 40 70  Array}.... *  @p
495e0 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20  rivate.... */.. 
495f0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 63 68         this._sch
49600 65 64 75 6c 65 64 20 3d 20 5b 5d 3b 0a 09 20 20  eduled = [];..  
49610 20 20 20 20 20 20 2f 2f 6d 61 6b 65 20 74 68 65        //make the
49620 20 6f 75 74 70 75 74 20 65 78 70 6c 69 63 69 74   output explicit
49630 6c 79 20 73 74 65 72 65 6f 0a 09 20 20 20 20 20  ly stereo..     
49640 20 20 20 74 68 69 73 2e 5f 76 6f 6c 75 6d 65 2e     this._volume.
49650 6f 75 74 70 75 74 2e 6f 75 74 70 75 74 2e 63 68  output.output.ch
49660 61 6e 6e 65 6c 43 6f 75 6e 74 20 3d 20 32 3b 0a  annelCount = 2;.
49670 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 76  .        this._v
49680 6f 6c 75 6d 65 2e 6f 75 74 70 75 74 2e 6f 75 74  olume.output.out
49690 70 75 74 2e 63 68 61 6e 6e 65 6c 43 6f 75 6e 74  put.channelCount
496a0 4d 6f 64 65 20 3d 20 27 65 78 70 6c 69 63 69 74  Mode = 'explicit
496b0 27 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 6d 75  ';..        //mu
496c0 74 65 20 69 6e 69 74 69 61 6c 6c 79 0a 09 20 20  te initially..  
496d0 20 20 20 20 20 20 74 68 69 73 2e 6d 75 74 65 20        this.mute 
496e0 3d 20 6f 70 74 69 6f 6e 73 2e 6d 75 74 65 3b 0a  = options.mute;.
496f0 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e  .    };..    Ton
49700 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 53 6f  e.extend(Tone.So
49710 75 72 63 65 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a  urce);..    /**.
49720 09 09 20 2a 20 20 54 68 65 20 64 65 66 61 75 6c  .. *  The defaul
49730 74 20 70 61 72 61 6d 65 74 65 72 73 0a 09 09 20  t parameters... 
49740 2a 20 20 40 73 74 61 74 69 63 0a 09 09 20 2a 20  *  @static... * 
49750 20 40 63 6f 6e 73 74 0a 09 09 20 2a 20 20 40 74   @const... *  @t
49760 79 70 65 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20  ype {Object}... 
49770 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 53 6f 75  */..    Tone.Sou
49780 72 63 65 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b  rce.defaults = {
49790 0a 09 20 20 20 20 20 20 20 20 27 76 6f 6c 75 6d  ..        'volum
497a0 65 27 3a 20 30 2c 0a 09 20 20 20 20 20 20 20 20  e': 0,..        
497b0 27 6d 75 74 65 27 3a 20 66 61 6c 73 65 0a 09 20  'mute': false.. 
497c0 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09     };..    /**..
497d0 09 20 2a 20 20 52 65 74 75 72 6e 73 20 74 68 65  . *  Returns the
497e0 20 70 6c 61 79 62 61 63 6b 20 73 74 61 74 65 20   playback state 
497f0 6f 66 20 74 68 65 20 73 6f 75 72 63 65 2c 20 65  of the source, e
49800 69 74 68 65 72 20 22 73 74 61 72 74 65 64 22 20  ither "started" 
49810 6f 72 20 22 73 74 6f 70 70 65 64 22 2e 0a 09 09  or "stopped"....
49820 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e   *  @type {Tone.
49830 53 74 61 74 65 7d 0a 09 09 20 2a 20 20 40 72 65  State}... *  @re
49840 61 64 4f 6e 6c 79 0a 09 09 20 2a 20 20 40 6d 65  adOnly... *  @me
49850 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 53 6f 75 72  mberOf Tone.Sour
49860 63 65 23 0a 09 09 20 2a 20 20 40 6e 61 6d 65 20  ce#... *  @name 
49870 73 74 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20  state... */..   
49880 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72   Object.definePr
49890 6f 70 65 72 74 79 28 54 6f 6e 65 2e 53 6f 75 72  operty(Tone.Sour
498a0 63 65 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 73  ce.prototype, 's
498b0 74 61 74 65 27 2c 20 7b 0a 09 20 20 20 20 20 20  tate', {..      
498c0 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    get: function 
498d0 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  () {..          
498e0 20 20 69 66 20 28 74 68 69 73 2e 5f 73 79 6e 63    if (this._sync
498f0 65 64 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ed) {..         
49900 20 20 20 20 20 20 20 69 66 20 28 54 6f 6e 65 2e         if (Tone.
49910 54 72 61 6e 73 70 6f 72 74 2e 73 74 61 74 65 20  Transport.state 
49920 3d 3d 3d 20 54 6f 6e 65 2e 53 74 61 74 65 2e 53  === Tone.State.S
49930 74 61 72 74 65 64 29 20 7b 0a 09 20 20 20 20 20  tarted) {..     
49940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
49950 65 74 75 72 6e 20 74 68 69 73 2e 5f 73 74 61 74  eturn this._stat
49960 65 2e 67 65 74 56 61 6c 75 65 41 74 54 69 6d 65  e.getValueAtTime
49970 28 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 2e  (Tone.Transport.
49980 73 65 63 6f 6e 64 73 29 3b 0a 09 20 20 20 20 20  seconds);..     
49990 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
499a0 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e {..           
499b0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
499c0 54 6f 6e 65 2e 53 74 61 74 65 2e 53 74 6f 70 70  Tone.State.Stopp
499d0 65 64 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ed;..           
499e0 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
499f0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20      } else {..  
49a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
49a10 74 75 72 6e 20 74 68 69 73 2e 5f 73 74 61 74 65  turn this._state
49a20 2e 67 65 74 56 61 6c 75 65 41 74 54 69 6d 65 28  .getValueAtTime(
49a30 74 68 69 73 2e 6e 6f 77 28 29 29 3b 0a 09 20 20  this.now());..  
49a40 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20            }..   
49a50 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a       }..    });.
49a60 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 4d 75  .    /**... * Mu
49a70 74 65 20 74 68 65 20 6f 75 74 70 75 74 2e 20 0a  te the output. .
49a80 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54  .. * @memberOf T
49a90 6f 6e 65 2e 53 6f 75 72 63 65 23 0a 09 09 20 2a  one.Source#... *
49aa0 20 40 74 79 70 65 20 7b 62 6f 6f 6c 65 61 6e 7d   @type {boolean}
49ab0 0a 09 09 20 2a 20 40 6e 61 6d 65 20 6d 75 74 65  ... * @name mute
49ac0 0a 09 09 20 2a 20 40 65 78 61 6d 70 6c 65 0a 09  ... * @example..
49ad0 09 20 2a 20 2f 2f 6d 75 74 65 20 74 68 65 20 6f  . * //mute the o
49ae0 75 74 70 75 74 0a 09 09 20 2a 20 73 6f 75 72 63  utput... * sourc
49af0 65 2e 6d 75 74 65 20 3d 20 74 72 75 65 3b 0a 09  e.mute = true;..
49b00 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74  . */..    Object
49b10 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28  .defineProperty(
49b20 54 6f 6e 65 2e 53 6f 75 72 63 65 2e 70 72 6f 74  Tone.Source.prot
49b30 6f 74 79 70 65 2c 20 27 6d 75 74 65 27 2c 20 7b  otype, 'mute', {
49b40 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66  ..        get: f
49b50 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
49b60 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
49b70 20 74 68 69 73 2e 5f 76 6f 6c 75 6d 65 2e 6d 75   this._volume.mu
49b80 74 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a  te;..        },.
49b90 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66 75  .        set: fu
49ba0 6e 63 74 69 6f 6e 20 28 6d 75 74 65 29 20 7b 0a  nction (mute) {.
49bb0 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
49bc0 73 2e 5f 76 6f 6c 75 6d 65 2e 6d 75 74 65 20 3d  s._volume.mute =
49bd0 20 6d 75 74 65 3b 0a 09 20 20 20 20 20 20 20 20   mute;..        
49be0 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20  }..    });..    
49bf0 2f 2f 6f 76 65 72 77 72 69 74 65 20 74 68 65 73  //overwrite thes
49c00 65 20 66 75 6e 63 74 69 6f 6e 73 0a 09 20 20 20  e functions..   
49c10 20 54 6f 6e 65 2e 53 6f 75 72 63 65 2e 70 72 6f   Tone.Source.pro
49c20 74 6f 74 79 70 65 2e 5f 73 74 61 72 74 20 3d 20  totype._start = 
49c30 54 6f 6e 65 2e 6e 6f 4f 70 3b 0a 09 20 20 20 20  Tone.noOp;..    
49c40 54 6f 6e 65 2e 53 6f 75 72 63 65 2e 70 72 6f 74  Tone.Source.prot
49c50 6f 74 79 70 65 2e 5f 73 74 6f 70 20 3d 20 54 6f  otype._stop = To
49c60 6e 65 2e 6e 6f 4f 70 3b 0a 09 20 20 20 20 2f 2a  ne.noOp;..    /*
49c70 2a 0a 09 09 20 2a 20 20 53 74 61 72 74 20 74 68  *... *  Start th
49c80 65 20 73 6f 75 72 63 65 20 61 74 20 74 68 65 20  e source at the 
49c90 73 70 65 63 69 66 69 65 64 20 74 69 6d 65 2e 20  specified time. 
49ca0 49 66 20 6e 6f 20 74 69 6d 65 20 69 73 20 67 69  If no time is gi
49cb0 76 65 6e 2c 20 0a 09 09 20 2a 20 20 73 74 61 72  ven, ... *  star
49cc0 74 20 74 68 65 20 73 6f 75 72 63 65 20 6e 6f 77  t the source now
49cd0 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20  .... *  @param  
49ce0 7b 54 69 6d 65 7d 20 5b 74 69 6d 65 3d 6e 6f 77  {Time} [time=now
49cf0 5d 20 57 68 65 6e 20 74 68 65 20 73 6f 75 72 63  ] When the sourc
49d00 65 20 73 68 6f 75 6c 64 20 62 65 20 73 74 61 72  e should be star
49d10 74 65 64 2e 0a 09 09 20 2a 20 20 40 72 65 74 75  ted.... *  @retu
49d20 72 6e 73 20 7b 54 6f 6e 65 2e 53 6f 75 72 63 65  rns {Tone.Source
49d30 7d 20 74 68 69 73 0a 09 09 20 2a 20 20 40 65 78  } this... *  @ex
49d40 61 6d 70 6c 65 0a 09 09 20 2a 20 73 6f 75 72 63  ample... * sourc
49d50 65 2e 73 74 61 72 74 28 22 2b 30 2e 35 22 29 3b  e.start("+0.5");
49d60 20 2f 2f 73 74 61 72 74 73 20 74 68 65 20 73 6f   //starts the so
49d70 75 72 63 65 20 30 2e 35 20 73 65 63 6f 6e 64 73  urce 0.5 seconds
49d80 20 66 72 6f 6d 20 6e 6f 77 0a 09 09 20 2a 2f 0a   from now... */.
49d90 09 20 20 20 20 54 6f 6e 65 2e 53 6f 75 72 63 65  .    Tone.Source
49da0 2e 70 72 6f 74 6f 74 79 70 65 2e 73 74 61 72 74  .prototype.start
49db0 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d   = function (tim
49dc0 65 2c 20 6f 66 66 73 65 74 2c 20 64 75 72 61 74  e, offset, durat
49dd0 69 6f 6e 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ion) {..        
49de0 69 66 20 28 74 68 69 73 2e 69 73 55 6e 64 65 66  if (this.isUndef
49df0 28 74 69 6d 65 29 20 26 26 20 74 68 69 73 2e 5f  (time) && this._
49e00 73 79 6e 63 65 64 29 20 7b 0a 09 20 20 20 20 20  synced) {..     
49e10 20 20 20 20 20 20 20 74 69 6d 65 20 3d 20 54 6f         time = To
49e20 6e 65 2e 54 72 61 6e 73 70 6f 72 74 2e 73 65 63  ne.Transport.sec
49e30 6f 6e 64 73 3b 0a 09 20 20 20 20 20 20 20 20 7d  onds;..        }
49e40 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20   else {..       
49e50 20 20 20 20 20 74 69 6d 65 20 3d 20 74 68 69 73       time = this
49e60 2e 74 6f 53 65 63 6f 6e 64 73 28 74 69 6d 65 29  .toSeconds(time)
49e70 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20  ;..        }..  
49e80 20 20 20 20 20 20 2f 2f 69 66 20 69 74 27 73 20        //if it's 
49e90 73 74 61 72 74 65 64 2c 20 73 74 6f 70 20 69 74  started, stop it
49ea0 20 61 6e 64 20 72 65 73 74 61 72 74 20 69 74 0a   and restart it.
49eb0 09 20 20 20 20 20 20 20 20 69 66 20 28 21 74 68  .        if (!th
49ec0 69 73 2e 72 65 74 72 69 67 67 65 72 20 26 26 20  is.retrigger && 
49ed0 74 68 69 73 2e 5f 73 74 61 74 65 2e 67 65 74 56  this._state.getV
49ee0 61 6c 75 65 41 74 54 69 6d 65 28 74 69 6d 65 29  alueAtTime(time)
49ef0 20 3d 3d 3d 20 54 6f 6e 65 2e 53 74 61 74 65 2e   === Tone.State.
49f00 53 74 61 72 74 65 64 29 20 7b 0a 09 20 20 20 20  Started) {..    
49f10 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 74 6f          this.sto
49f20 70 28 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20  p(time);..      
49f30 20 20 7d 0a 09 20 20 20 20 20 20 20 20 74 68 69    }..        thi
49f40 73 2e 5f 73 74 61 74 65 2e 73 65 74 53 74 61 74  s._state.setStat
49f50 65 41 74 54 69 6d 65 28 54 6f 6e 65 2e 53 74 61  eAtTime(Tone.Sta
49f60 74 65 2e 53 74 61 72 74 65 64 2c 20 74 69 6d 65  te.Started, time
49f70 29 3b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
49f80 74 68 69 73 2e 5f 73 79 6e 63 65 64 29 20 7b 0a  this._synced) {.
49f90 09 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
49fa0 61 64 64 20 74 68 65 20 6f 66 66 73 65 74 20 74  add the offset t
49fb0 69 6d 65 20 74 6f 20 74 68 65 20 65 76 65 6e 74  ime to the event
49fc0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61  ..            va
49fd0 72 20 65 76 65 6e 74 20 3d 20 74 68 69 73 2e 5f  r event = this._
49fe0 73 74 61 74 65 2e 67 65 74 28 74 69 6d 65 29 3b  state.get(time);
49ff0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 65 76  ..            ev
4a000 65 6e 74 2e 6f 66 66 73 65 74 20 3d 20 74 68 69  ent.offset = thi
4a010 73 2e 64 65 66 61 75 6c 74 41 72 67 28 6f 66 66  s.defaultArg(off
4a020 73 65 74 2c 20 30 29 3b 0a 09 20 20 20 20 20 20  set, 0);..      
4a030 20 20 20 20 20 20 65 76 65 6e 74 2e 64 75 72 61        event.dura
4a040 74 69 6f 6e 20 3d 20 64 75 72 61 74 69 6f 6e 3b  tion = duration;
4a050 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61  ..            va
4a060 72 20 73 63 68 65 64 20 3d 20 54 6f 6e 65 2e 54  r sched = Tone.T
4a070 72 61 6e 73 70 6f 72 74 2e 73 63 68 65 64 75 6c  ransport.schedul
4a080 65 28 66 75 6e 63 74 69 6f 6e 20 28 74 29 20 7b  e(function (t) {
4a090 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4a0a0 20 20 74 68 69 73 2e 5f 73 74 61 72 74 28 74 2c    this._start(t,
4a0b0 20 6f 66 66 73 65 74 2c 20 64 75 72 61 74 69 6f   offset, duratio
4a0c0 6e 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  n);..           
4a0d0 20 7d 2e 62 69 6e 64 28 74 68 69 73 29 2c 20 74   }.bind(this), t
4a0e0 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 20  ime);..         
4a0f0 20 20 20 74 68 69 73 2e 5f 73 63 68 65 64 75 6c     this._schedul
4a100 65 64 2e 70 75 73 68 28 73 63 68 65 64 29 3b 0a  ed.push(sched);.
4a110 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else 
4a120 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
4a130 68 69 73 2e 5f 73 74 61 72 74 2e 61 70 70 6c 79  his._start.apply
4a140 28 74 68 69 73 2c 20 61 72 67 75 6d 65 6e 74 73  (this, arguments
4a150 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  );..        }.. 
4a160 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
4a170 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  is;..    };..   
4a180 20 2f 2a 2a 0a 09 09 20 2a 20 20 53 74 6f 70 20   /**... *  Stop 
4a190 74 68 65 20 73 6f 75 72 63 65 20 61 74 20 74 68  the source at th
4a1a0 65 20 73 70 65 63 69 66 69 65 64 20 74 69 6d 65  e specified time
4a1b0 2e 20 49 66 20 6e 6f 20 74 69 6d 65 20 69 73 20  . If no time is 
4a1c0 67 69 76 65 6e 2c 20 0a 09 09 20 2a 20 20 73 74  given, ... *  st
4a1d0 6f 70 20 74 68 65 20 73 6f 75 72 63 65 20 6e 6f  op the source no
4a1e0 77 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  w.... *  @param 
4a1f0 20 7b 54 69 6d 65 7d 20 5b 74 69 6d 65 3d 6e 6f   {Time} [time=no
4a200 77 5d 20 57 68 65 6e 20 74 68 65 20 73 6f 75 72  w] When the sour
4a210 63 65 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f  ce should be sto
4a220 70 70 65 64 2e 20 0a 09 09 20 2a 20 20 40 72 65  pped. ... *  @re
4a230 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 53 6f 75 72  turns {Tone.Sour
4a240 63 65 7d 20 74 68 69 73 0a 09 09 20 2a 20 20 40  ce} this... *  @
4a250 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 73 6f 75  example... * sou
4a260 72 63 65 2e 73 74 6f 70 28 29 3b 20 2f 2f 20 73  rce.stop(); // s
4a270 74 6f 70 73 20 74 68 65 20 73 6f 75 72 63 65 20  tops the source 
4a280 69 6d 6d 65 64 69 61 74 65 6c 79 0a 09 09 20 2a  immediately... *
4a290 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 53 6f 75 72  /..    Tone.Sour
4a2a0 63 65 2e 70 72 6f 74 6f 74 79 70 65 2e 73 74 6f  ce.prototype.sto
4a2b0 70 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74 69  p = function (ti
4a2c0 6d 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 69  me) {..        i
4a2d0 66 20 28 74 68 69 73 2e 69 73 55 6e 64 65 66 28  f (this.isUndef(
4a2e0 74 69 6d 65 29 20 26 26 20 74 68 69 73 2e 5f 73  time) && this._s
4a2f0 79 6e 63 65 64 29 20 7b 0a 09 20 20 20 20 20 20  ynced) {..      
4a300 20 20 20 20 20 20 74 69 6d 65 20 3d 20 54 6f 6e        time = Ton
4a310 65 2e 54 72 61 6e 73 70 6f 72 74 2e 73 65 63 6f  e.Transport.seco
4a320 6e 64 73 3b 0a 09 20 20 20 20 20 20 20 20 7d 20  nds;..        } 
4a330 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20  else {..        
4a340 20 20 20 20 74 69 6d 65 20 3d 20 74 68 69 73 2e      time = this.
4a350 74 6f 53 65 63 6f 6e 64 73 28 74 69 6d 65 29 3b  toSeconds(time);
4a360 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
4a370 20 20 20 20 20 74 68 69 73 2e 5f 73 74 61 74 65       this._state
4a380 2e 63 61 6e 63 65 6c 28 74 69 6d 65 29 3b 0a 09  .cancel(time);..
4a390 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 74          this._st
4a3a0 61 74 65 2e 73 65 74 53 74 61 74 65 41 74 54 69  ate.setStateAtTi
4a3b0 6d 65 28 54 6f 6e 65 2e 53 74 61 74 65 2e 53 74  me(Tone.State.St
4a3c0 6f 70 70 65 64 2c 20 74 69 6d 65 29 3b 0a 09 20  opped, time);.. 
4a3d0 20 20 20 20 20 20 20 69 66 20 28 21 74 68 69 73         if (!this
4a3e0 2e 5f 73 79 6e 63 65 64 29 20 7b 0a 09 20 20 20  ._synced) {..   
4a3f0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73           this._s
4a400 74 6f 70 2e 61 70 70 6c 79 28 74 68 69 73 2c 20  top.apply(this, 
4a410 61 72 67 75 6d 65 6e 74 73 29 3b 0a 09 20 20 20  arguments);..   
4a420 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20       } else {.. 
4a430 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 73             var s
4a440 63 68 65 64 20 3d 20 54 6f 6e 65 2e 54 72 61 6e  ched = Tone.Tran
4a450 73 70 6f 72 74 2e 73 63 68 65 64 75 6c 65 28 74  sport.schedule(t
4a460 68 69 73 2e 5f 73 74 6f 70 2e 62 69 6e 64 28 74  his._stop.bind(t
4a470 68 69 73 29 2c 20 74 69 6d 65 29 3b 0a 09 20 20  his), time);..  
4a480 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
4a490 73 63 68 65 64 75 6c 65 64 2e 70 75 73 68 28 73  scheduled.push(s
4a4a0 63 68 65 64 29 3b 0a 09 20 20 20 20 20 20 20 20  ched);..        
4a4b0 7d 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  }..        retur
4a4c0 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a  n this;..    };.
4a4d0 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 53  .    /**... *  S
4a4e0 79 6e 63 20 74 68 65 20 73 6f 75 72 63 65 20 74  ync the source t
4a4f0 6f 20 74 68 65 20 54 72 61 6e 73 70 6f 72 74 20  o the Transport 
4a500 73 6f 20 74 68 61 74 20 61 6c 6c 20 73 75 62 73  so that all subs
4a510 65 71 75 65 6e 74 0a 09 09 20 2a 20 20 63 61 6c  equent... *  cal
4a520 6c 73 20 74 6f 20 60 73 74 61 72 74 60 20 61 6e  ls to `start` an
4a530 64 20 60 73 74 6f 70 60 20 61 72 65 20 73 79 6e  d `stop` are syn
4a540 63 65 64 20 74 6f 20 74 68 65 20 54 72 61 6e 73  ced to the Trans
4a550 70 6f 72 74 54 69 6d 65 0a 09 09 20 2a 20 20 69  portTime... *  i
4a560 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 41 75  nstead of the Au
4a570 64 69 6f 43 6f 6e 74 65 78 74 20 74 69 6d 65 2e  dioContext time.
4a580 20 0a 09 09 20 2a 0a 09 09 20 2a 20 20 40 72 65   ... *... *  @re
4a590 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 53 6f 75 72  turns {Tone.Sour
4a5a0 63 65 7d 20 74 68 69 73 0a 09 09 20 2a 20 20 40  ce} this... *  @
4a5b0 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 2f 2f 73  example... * //s
4a5c0 79 6e 63 20 74 68 65 20 73 6f 75 72 63 65 20 73  ync the source s
4a5d0 6f 20 74 68 61 74 20 69 74 20 70 6c 61 79 73 20  o that it plays 
4a5e0 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20 30 2e  between 0 and 0.
4a5f0 33 20 6f 6e 20 74 68 65 20 54 72 61 6e 73 70 6f  3 on the Transpo
4a600 72 74 27 73 20 74 69 6d 65 6c 69 6e 65 0a 09 09  rt's timeline...
4a610 20 2a 20 73 6f 75 72 63 65 2e 73 79 6e 63 28 29   * source.sync()
4a620 2e 73 74 61 72 74 28 30 29 2e 73 74 6f 70 28 30  .start(0).stop(0
4a630 2e 33 29 3b 0a 09 09 20 2a 20 2f 2f 73 74 61 72  .3);... * //star
4a640 74 20 74 68 65 20 74 72 61 6e 73 70 6f 72 74 2e  t the transport.
4a650 0a 09 09 20 2a 20 54 6f 6e 65 2e 54 72 61 6e 73  ... * Tone.Trans
4a660 70 6f 72 74 2e 73 74 61 72 74 28 29 3b 0a 09 09  port.start();...
4a670 20 2a 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c   *... *  @exampl
4a680 65 0a 09 09 20 2a 20 2f 2f 73 74 61 72 74 20 74  e... * //start t
4a690 68 65 20 74 72 61 6e 73 70 6f 72 74 20 77 69 74  he transport wit
4a6a0 68 20 61 6e 20 6f 66 66 73 65 74 20 61 6e 64 20  h an offset and 
4a6b0 74 68 65 20 73 79 6e 63 27 65 64 20 73 6f 75 72  the sync'ed sour
4a6c0 63 65 73 0a 09 09 20 2a 20 2f 2f 77 69 6c 6c 20  ces... * //will 
4a6d0 73 74 61 72 74 20 69 6e 20 74 68 65 20 63 6f 72  start in the cor
4a6e0 72 65 63 74 20 70 6f 73 69 74 69 6f 6e 0a 09 09  rect position...
4a6f0 20 2a 20 73 6f 75 72 63 65 2e 73 79 6e 63 28 29   * source.sync()
4a700 2e 73 74 61 72 74 28 30 2e 31 29 3b 0a 09 09 20  .start(0.1);... 
4a710 2a 20 2f 2f 74 68 65 20 73 6f 75 72 63 65 20 77  * //the source w
4a720 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 20 77  ill be invoked w
4a730 69 74 68 20 61 6e 20 6f 66 66 73 65 74 20 6f 66  ith an offset of
4a740 20 30 2e 34 0a 09 09 20 2a 20 54 6f 6e 65 2e 54   0.4... * Tone.T
4a750 72 61 6e 73 70 6f 72 74 2e 73 74 61 72 74 28 22  ransport.start("
4a760 2b 30 2e 35 22 2c 20 30 2e 35 29 3b 0a 09 09 20  +0.5", 0.5);... 
4a770 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 53 6f 75  */..    Tone.Sou
4a780 72 63 65 2e 70 72 6f 74 6f 74 79 70 65 2e 73 79  rce.prototype.sy
4a790 6e 63 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  nc = function ()
4a7a0 20 7b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73   {..        this
4a7b0 2e 5f 73 79 6e 63 65 64 20 3d 20 74 72 75 65 3b  ._synced = true;
4a7c0 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 54  ..        Tone.T
4a7d0 72 61 6e 73 70 6f 72 74 2e 6f 6e 28 27 73 74 61  ransport.on('sta
4a7e0 72 74 20 6c 6f 6f 70 53 74 61 72 74 27 2c 20 66  rt loopStart', f
4a7f0 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65 2c 20 6f  unction (time, o
4a800 66 66 73 65 74 29 20 7b 0a 09 20 20 20 20 20 20  ffset) {..      
4a810 20 20 20 20 20 20 69 66 20 28 6f 66 66 73 65 74        if (offset
4a820 20 3e 20 30 29 20 7b 0a 09 20 20 20 20 20 20 20   > 0) {..       
4a830 20 20 20 20 20 20 20 20 20 2f 2f 20 67 65 74 20           // get 
4a840 74 68 65 20 70 6c 61 79 62 61 63 6b 20 73 74 61  the playback sta
4a850 74 65 20 61 74 20 74 68 61 74 20 74 69 6d 65 0a  te at that time.
4a860 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4a870 20 76 61 72 20 73 74 61 74 65 45 76 65 6e 74 20   var stateEvent 
4a880 3d 20 74 68 69 73 2e 5f 73 74 61 74 65 2e 67 65  = this._state.ge
4a890 74 28 6f 66 66 73 65 74 29 3b 0a 09 20 20 20 20  t(offset);..    
4a8a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 6c              // l
4a8b0 69 73 74 65 6e 20 66 6f 72 20 73 74 61 72 74 20  isten for start 
4a8c0 65 76 65 6e 74 73 20 77 68 69 63 68 20 6d 61 79  events which may
4a8d0 20 6f 63 63 75 72 20 69 6e 20 74 68 65 20 6d 69   occur in the mi
4a8e0 64 64 6c 65 20 6f 66 20 74 68 65 20 73 79 6e 63  ddle of the sync
4a8f0 27 65 64 20 74 69 6d 65 0a 09 20 20 20 20 20 20  'ed time..      
4a900 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
4a910 61 74 65 45 76 65 6e 74 20 26 26 20 73 74 61 74  ateEvent && stat
4a920 65 45 76 65 6e 74 2e 73 74 61 74 65 20 3d 3d 3d  eEvent.state ===
4a930 20 54 6f 6e 65 2e 53 74 61 74 65 2e 53 74 61 72   Tone.State.Star
4a940 74 65 64 20 26 26 20 73 74 61 74 65 45 76 65 6e  ted && stateEven
4a950 74 2e 74 69 6d 65 20 21 3d 3d 20 6f 66 66 73 65  t.time !== offse
4a960 74 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  t) {..          
4a970 20 20 20 20 20 20 20 20 20 20 2f 2f 20 67 65 74            // get
4a980 20 74 68 65 20 6f 66 66 73 65 74 0a 09 20 20 20   the offset..   
4a990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a9a0 20 76 61 72 20 73 74 61 72 74 4f 66 66 73 65 74   var startOffset
4a9b0 20 3d 20 6f 66 66 73 65 74 20 2d 20 74 68 69 73   = offset - this
4a9c0 2e 74 6f 53 65 63 6f 6e 64 73 28 73 74 61 74 65  .toSeconds(state
4a9d0 45 76 65 6e 74 2e 74 69 6d 65 29 3b 0a 09 20 20  Event.time);..  
4a9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a9f0 20 20 76 61 72 20 64 75 72 61 74 69 6f 6e 3b 0a    var duration;.
4aa00 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4aa10 20 20 20 20 20 69 66 20 28 73 74 61 74 65 45 76       if (stateEv
4aa20 65 6e 74 2e 64 75 72 61 74 69 6f 6e 29 20 7b 0a  ent.duration) {.
4aa30 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4aa40 20 20 20 20 20 20 20 20 20 64 75 72 61 74 69 6f           duratio
4aa50 6e 20 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e  n = this.toSecon
4aa60 64 73 28 73 74 61 74 65 45 76 65 6e 74 2e 64 75  ds(stateEvent.du
4aa70 72 61 74 69 6f 6e 29 20 2d 20 73 74 61 72 74 4f  ration) - startO
4aa80 66 66 73 65 74 3b 0a 09 20 20 20 20 20 20 20 20  ffset;..        
4aa90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20              }.. 
4aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4aab0 20 20 20 74 68 69 73 2e 5f 73 74 61 72 74 28 74     this._start(t
4aac0 69 6d 65 2c 20 74 68 69 73 2e 74 6f 53 65 63 6f  ime, this.toSeco
4aad0 6e 64 73 28 73 74 61 74 65 45 76 65 6e 74 2e 6f  nds(stateEvent.o
4aae0 66 66 73 65 74 29 20 2b 20 73 74 61 72 74 4f 66  ffset) + startOf
4aaf0 66 73 65 74 2c 20 64 75 72 61 74 69 6f 6e 29 3b  fset, duration);
4ab00 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4ab10 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20    }..           
4ab20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 2e 62 69   }..        }.bi
4ab30 6e 64 28 74 68 69 73 29 29 3b 0a 09 20 20 20 20  nd(this));..    
4ab40 20 20 20 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f      Tone.Transpo
4ab50 72 74 2e 6f 6e 28 27 73 74 6f 70 20 70 61 75 73  rt.on('stop paus
4ab60 65 20 6c 6f 6f 70 45 6e 64 27 2c 20 66 75 6e 63  e loopEnd', func
4ab70 74 69 6f 6e 20 28 74 69 6d 65 29 20 7b 0a 09 20  tion (time) {.. 
4ab80 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
4ab90 68 69 73 2e 5f 73 74 61 74 65 2e 67 65 74 56 61  his._state.getVa
4aba0 6c 75 65 41 74 54 69 6d 65 28 54 6f 6e 65 2e 54  lueAtTime(Tone.T
4abb0 72 61 6e 73 70 6f 72 74 2e 73 65 63 6f 6e 64 73  ransport.seconds
4abc0 29 20 3d 3d 3d 20 54 6f 6e 65 2e 53 74 61 74 65  ) === Tone.State
4abd0 2e 53 74 61 72 74 65 64 29 20 7b 0a 09 20 20 20  .Started) {..   
4abe0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
4abf0 73 2e 5f 73 74 6f 70 28 74 69 6d 65 29 3b 0a 09  s._stop(time);..
4ac00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20              }.. 
4ac10 20 20 20 20 20 20 20 7d 2e 62 69 6e 64 28 74 68         }.bind(th
4ac20 69 73 29 29 3b 0a 09 20 20 20 20 20 20 20 20 72  is));..        r
4ac30 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20  eturn this;..   
4ac40 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20   };..    /**... 
4ac50 2a 20 20 55 6e 73 79 6e 63 20 74 68 65 20 73 6f  *  Unsync the so
4ac60 75 72 63 65 20 74 6f 20 74 68 65 20 54 72 61 6e  urce to the Tran
4ac70 73 70 6f 72 74 2e 20 53 65 65 20 54 6f 6e 65 2e  sport. See Tone.
4ac80 53 6f 75 72 63 65 2e 73 79 6e 63 0a 09 09 20 2a  Source.sync... *
4ac90 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65    @returns {Tone
4aca0 2e 53 6f 75 72 63 65 7d 20 74 68 69 73 0a 09 09  .Source} this...
4acb0 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 53 6f   */..    Tone.So
4acc0 75 72 63 65 2e 70 72 6f 74 6f 74 79 70 65 2e 75  urce.prototype.u
4acd0 6e 73 79 6e 63 20 3d 20 66 75 6e 63 74 69 6f 6e  nsync = function
4ace0 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 74   () {..        t
4acf0 68 69 73 2e 5f 73 79 6e 63 65 64 20 3d 20 66 61  his._synced = fa
4ad00 6c 73 65 3b 0a 09 20 20 20 20 20 20 20 20 54 6f  lse;..        To
4ad10 6e 65 2e 54 72 61 6e 73 70 6f 72 74 2e 6f 66 66  ne.Transport.off
4ad20 28 27 73 74 61 72 74 20 73 74 6f 70 20 70 61 75  ('start stop pau
4ad30 73 65 20 6c 6f 6f 70 45 6e 64 20 6c 6f 6f 70 53  se loopEnd loopS
4ad40 74 61 72 74 27 29 3b 0a 09 20 20 20 20 20 20 20  tart');..       
4ad50 20 2f 2f 20 63 6c 65 61 72 20 61 6c 6c 20 6f 66   // clear all of
4ad60 20 74 68 65 20 73 63 68 65 64 75 6c 65 64 20 69   the scheduled i
4ad70 64 73 0a 09 20 20 20 20 20 20 20 20 66 6f 72 20  ds..        for 
4ad80 28 76 61 72 20 69 20 3d 20 30 3b 20 69 20 3c 20  (var i = 0; i < 
4ad90 74 68 69 73 2e 5f 73 63 68 65 64 75 6c 65 64 2e  this._scheduled.
4ada0 6c 65 6e 67 74 68 3b 20 69 2b 2b 29 20 7b 0a 09  length; i++) {..
4adb0 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20              var 
4adc0 69 64 20 3d 20 74 68 69 73 2e 5f 73 63 68 65 64  id = this._sched
4add0 75 6c 65 64 5b 69 5d 3b 0a 09 20 20 20 20 20 20  uled[i];..      
4ade0 20 20 20 20 20 20 54 6f 6e 65 2e 54 72 61 6e 73        Tone.Trans
4adf0 70 6f 72 74 2e 63 6c 65 61 72 28 69 64 29 3b 0a  port.clear(id);.
4ae00 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
4ae10 20 20 20 20 74 68 69 73 2e 5f 73 63 68 65 64 75      this._schedu
4ae20 6c 65 64 20 3d 20 5b 5d 3b 0a 09 20 20 20 20 20  led = [];..     
4ae30 20 20 20 74 68 69 73 2e 5f 73 74 61 74 65 2e 63     this._state.c
4ae40 61 6e 63 65 6c 28 30 29 3b 0a 09 20 20 20 20 20  ancel(0);..     
4ae50 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a     return this;.
4ae60 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
4ae70 0a 09 09 20 2a 09 43 6c 65 61 6e 20 75 70 2e 0a  ... *.Clean up..
4ae80 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 7b 54  .. *  @return {T
4ae90 6f 6e 65 2e 53 6f 75 72 63 65 7d 20 74 68 69 73  one.Source} this
4aea0 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
4aeb0 2e 53 6f 75 72 63 65 2e 70 72 6f 74 6f 74 79 70  .Source.prototyp
4aec0 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75 6e 63  e.dispose = func
4aed0 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
4aee0 20 20 20 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70     Tone.prototyp
4aef0 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74  e.dispose.call(t
4af00 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20 20 74  his);..        t
4af10 68 69 73 2e 75 6e 73 79 6e 63 28 29 3b 0a 09 20  his.unsync();.. 
4af20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 63 68         this._sch
4af30 65 64 75 6c 65 64 20 3d 20 6e 75 6c 6c 3b 0a 09  eduled = null;..
4af40 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 77 72          this._wr
4af50 69 74 61 62 6c 65 28 27 76 6f 6c 75 6d 65 27 29  itable('volume')
4af60 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
4af70 5f 76 6f 6c 75 6d 65 2e 64 69 73 70 6f 73 65 28  _volume.dispose(
4af80 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
4af90 2e 5f 76 6f 6c 75 6d 65 20 3d 20 6e 75 6c 6c 3b  ._volume = null;
4afa0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 76  ..        this.v
4afb0 6f 6c 75 6d 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20  olume = null;.. 
4afc0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 74 61         this._sta
4afd0 74 65 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20  te.dispose();.. 
4afe0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 74 61         this._sta
4aff0 74 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  te = null;..    
4b000 7d 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54  };..    return T
4b010 6f 6e 65 2e 53 6f 75 72 63 65 3b 0a 09 7d 29 3b  one.Source;..});
4b020 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f  ..Module(functio
4b030 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20  n (Tone) {..    
4b040 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
4b050 40 63 6c 61 73 73 20 54 6f 6e 65 2e 4f 73 63 69  @class Tone.Osci
4b060 6c 6c 61 74 6f 72 20 73 75 70 70 6f 72 74 73 20  llator supports 
4b070 61 20 6e 75 6d 62 65 72 20 6f 66 20 66 65 61 74  a number of feat
4b080 75 72 65 73 20 69 6e 63 6c 75 64 69 6e 67 0a 09  ures including..
4b090 09 20 2a 20 20 20 20 20 20 20 20 20 70 68 61 73  . *         phas
4b0a0 65 20 72 6f 74 61 74 69 6f 6e 2c 20 6d 75 6c 74  e rotation, mult
4b0b0 69 70 6c 65 20 6f 73 63 69 6c 6c 61 74 6f 72 20  iple oscillator 
4b0c0 74 79 70 65 73 20 28 73 65 65 20 54 6f 6e 65 2e  types (see Tone.
4b0d0 4f 73 63 69 6c 6c 61 74 6f 72 2e 74 79 70 65 29  Oscillator.type)
4b0e0 2c 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  , ... *         
4b0f0 61 6e 64 20 54 72 61 6e 73 70 6f 72 74 20 73 79  and Transport sy
4b100 6e 63 69 6e 67 20 28 73 65 65 20 54 6f 6e 65 2e  ncing (see Tone.
4b110 4f 73 63 69 6c 6c 61 74 6f 72 2e 73 79 6e 63 46  Oscillator.syncF
4b120 72 65 71 75 65 6e 63 79 29 2e 0a 09 09 20 2a 0a  requency).... *.
4b130 09 09 20 2a 20 20 40 63 6f 6e 73 74 72 75 63 74  .. *  @construct
4b140 6f 72 0a 09 09 20 2a 20 20 40 65 78 74 65 6e 64  or... *  @extend
4b150 73 20 7b 54 6f 6e 65 2e 53 6f 75 72 63 65 7d 0a  s {Tone.Source}.
4b160 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 46 72  .. *  @param {Fr
4b170 65 71 75 65 6e 63 79 7d 20 5b 66 72 65 71 75 65  equency} [freque
4b180 6e 63 79 5d 20 53 74 61 72 74 69 6e 67 20 66 72  ncy] Starting fr
4b190 65 71 75 65 6e 63 79 0a 09 09 20 2a 20 20 40 70  equency... *  @p
4b1a0 61 72 61 6d 20 7b 73 74 72 69 6e 67 7d 20 5b 74  aram {string} [t
4b1b0 79 70 65 5d 20 54 68 65 20 6f 73 63 69 6c 6c 61  ype] The oscilla
4b1c0 74 6f 72 20 74 79 70 65 2e 20 52 65 61 64 20 6d  tor type. Read m
4b1d0 6f 72 65 20 61 62 6f 75 74 20 74 79 70 65 20 62  ore about type b
4b1e0 65 6c 6f 77 2e 0a 09 09 20 2a 20 20 40 65 78 61  elow.... *  @exa
4b1f0 6d 70 6c 65 0a 09 09 20 2a 20 2f 2f 6d 61 6b 65  mple... * //make
4b200 20 61 6e 64 20 73 74 61 72 74 20 61 20 34 34 30   and start a 440
4b210 68 7a 20 73 69 6e 65 20 74 6f 6e 65 0a 09 09 20  hz sine tone... 
4b220 2a 20 76 61 72 20 6f 73 63 20 3d 20 6e 65 77 20  * var osc = new 
4b230 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f 72 28  Tone.Oscillator(
4b240 34 34 30 2c 20 22 73 69 6e 65 22 29 2e 74 6f 4d  440, "sine").toM
4b250 61 73 74 65 72 28 29 2e 73 74 61 72 74 28 29 3b  aster().start();
4b260 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
4b270 2e 4f 73 63 69 6c 6c 61 74 6f 72 20 3d 20 66 75  .Oscillator = fu
4b280 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
4b290 20 20 20 20 20 76 61 72 20 6f 70 74 69 6f 6e 73       var options
4b2a0 20 3d 20 74 68 69 73 2e 6f 70 74 69 6f 6e 73 4f   = this.optionsO
4b2b0 62 6a 65 63 74 28 61 72 67 75 6d 65 6e 74 73 2c  bject(arguments,
4b2c0 20 5b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   [..            
4b2d0 27 66 72 65 71 75 65 6e 63 79 27 2c 0a 09 20 20  'frequency',..  
4b2e0 20 20 20 20 20 20 20 20 20 20 27 74 79 70 65 27            'type'
4b2f0 0a 09 20 20 20 20 20 20 20 20 5d 2c 20 54 6f 6e  ..        ], Ton
4b300 65 2e 4f 73 63 69 6c 6c 61 74 6f 72 2e 64 65 66  e.Oscillator.def
4b310 61 75 6c 74 73 29 3b 0a 09 20 20 20 20 20 20 20  aults);..       
4b320 20 54 6f 6e 65 2e 53 6f 75 72 63 65 2e 63 61 6c   Tone.Source.cal
4b330 6c 28 74 68 69 73 2c 20 6f 70 74 69 6f 6e 73 29  l(this, options)
4b340 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
4b350 09 09 20 2a 20 20 74 68 65 20 6d 61 69 6e 20 6f  .. *  the main o
4b360 73 63 69 6c 6c 61 74 6f 72 0a 09 09 09 20 2a 20  scillator.... * 
4b370 20 40 74 79 70 65 20 7b 4f 73 63 69 6c 6c 61 74   @type {Oscillat
4b380 6f 72 4e 6f 64 65 7d 0a 09 09 09 20 2a 20 20 40  orNode}.... *  @
4b390 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
4b3a0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6f 73          this._os
4b3b0 63 69 6c 6c 61 74 6f 72 20 3d 20 6e 75 6c 6c 3b  cillator = null;
4b3c0 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
4b3d0 09 20 2a 20 20 54 68 65 20 66 72 65 71 75 65 6e  . *  The frequen
4b3e0 63 79 20 63 6f 6e 74 72 6f 6c 2e 0a 09 09 09 20  cy control..... 
4b3f0 2a 20 20 40 74 79 70 65 20 7b 46 72 65 71 75 65  *  @type {Freque
4b400 6e 63 79 7d 0a 09 09 09 20 2a 20 20 40 73 69 67  ncy}.... *  @sig
4b410 6e 61 6c 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  nal.... */..    
4b420 20 20 20 20 74 68 69 73 2e 66 72 65 71 75 65 6e      this.frequen
4b430 63 79 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53 69  cy = new Tone.Si
4b440 67 6e 61 6c 28 6f 70 74 69 6f 6e 73 2e 66 72 65  gnal(options.fre
4b450 71 75 65 6e 63 79 2c 20 54 6f 6e 65 2e 54 79 70  quency, Tone.Typ
4b460 65 2e 46 72 65 71 75 65 6e 63 79 29 3b 0a 09 20  e.Frequency);.. 
4b470 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
4b480 20 20 54 68 65 20 64 65 74 75 6e 65 20 63 6f 6e    The detune con
4b490 74 72 6f 6c 20 73 69 67 6e 61 6c 2e 0a 09 09 09  trol signal.....
4b4a0 20 2a 20 20 40 74 79 70 65 20 7b 43 65 6e 74 73   *  @type {Cents
4b4b0 7d 0a 09 09 09 20 2a 20 20 40 73 69 67 6e 61 6c  }.... *  @signal
4b4c0 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
4b4d0 20 74 68 69 73 2e 64 65 74 75 6e 65 20 3d 20 6e   this.detune = n
4b4e0 65 77 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 28 6f  ew Tone.Signal(o
4b4f0 70 74 69 6f 6e 73 2e 64 65 74 75 6e 65 2c 20 54  ptions.detune, T
4b500 6f 6e 65 2e 54 79 70 65 2e 43 65 6e 74 73 29 3b  one.Type.Cents);
4b510 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
4b520 09 20 2a 20 20 74 68 65 20 70 65 72 69 6f 64 69  . *  the periodi
4b530 63 20 77 61 76 65 0a 09 09 09 20 2a 20 20 40 74  c wave.... *  @t
4b540 79 70 65 20 7b 50 65 72 69 6f 64 69 63 57 61 76  ype {PeriodicWav
4b550 65 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61  e}.... *  @priva
4b560 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  te.... */..     
4b570 20 20 20 74 68 69 73 2e 5f 77 61 76 65 20 3d 20     this._wave = 
4b580 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 2f  null;..        /
4b590 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 70 61  **.... *  The pa
4b5a0 72 74 69 61 6c 73 20 6f 66 20 74 68 65 20 6f 73  rtials of the os
4b5b0 63 69 6c 6c 61 74 6f 72 0a 09 09 09 20 2a 20 20  cillator.... *  
4b5c0 40 74 79 70 65 20 7b 41 72 72 61 79 7d 0a 09 09  @type {Array}...
4b5d0 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
4b5e0 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
4b5f0 69 73 2e 5f 70 61 72 74 69 61 6c 73 20 3d 20 74  is._partials = t
4b600 68 69 73 2e 64 65 66 61 75 6c 74 41 72 67 28 6f  his.defaultArg(o
4b610 70 74 69 6f 6e 73 2e 70 61 72 74 69 61 6c 73 2c  ptions.partials,
4b620 20 5b 31 5d 29 3b 0a 09 20 20 20 20 20 20 20 20   [1]);..        
4b630 2f 2a 2a 0a 09 09 09 20 2a 20 20 74 68 65 20 70  /**.... *  the p
4b640 68 61 73 65 20 6f 66 20 74 68 65 20 6f 73 63 69  hase of the osci
4b650 6c 6c 61 74 6f 72 0a 09 09 09 20 2a 20 20 62 65  llator.... *  be
4b660 74 77 65 65 6e 20 30 20 2d 20 33 36 30 0a 09 09  tween 0 - 360...
4b670 09 20 2a 20 20 40 74 79 70 65 20 7b 6e 75 6d 62  . *  @type {numb
4b680 65 72 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76  er}.... *  @priv
4b690 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  ate.... */..    
4b6a0 20 20 20 20 74 68 69 73 2e 5f 70 68 61 73 65 20      this._phase 
4b6b0 3d 20 6f 70 74 69 6f 6e 73 2e 70 68 61 73 65 3b  = options.phase;
4b6c0 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
4b6d0 09 20 2a 20 20 74 68 65 20 74 79 70 65 20 6f 66  . *  the type of
4b6e0 20 74 68 65 20 6f 73 63 69 6c 6c 61 74 6f 72 0a   the oscillator.
4b6f0 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 73 74  ... *  @type {st
4b700 72 69 6e 67 7d 0a 09 09 09 20 2a 20 20 40 70 72  ring}.... *  @pr
4b710 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20  ivate.... */..  
4b720 20 20 20 20 20 20 74 68 69 73 2e 5f 74 79 70 65        this._type
4b730 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
4b740 20 20 2f 2f 73 65 74 75 70 0a 09 20 20 20 20 20    //setup..     
4b750 20 20 20 74 68 69 73 2e 74 79 70 65 20 3d 20 6f     this.type = o
4b760 70 74 69 6f 6e 73 2e 74 79 70 65 3b 0a 09 20 20  ptions.type;..  
4b770 20 20 20 20 20 20 74 68 69 73 2e 70 68 61 73 65        this.phase
4b780 20 3d 20 74 68 69 73 2e 5f 70 68 61 73 65 3b 0a   = this._phase;.
4b790 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 72  .        this._r
4b7a0 65 61 64 4f 6e 6c 79 28 5b 0a 09 20 20 20 20 20  eadOnly([..     
4b7b0 20 20 20 20 20 20 20 27 66 72 65 71 75 65 6e 63         'frequenc
4b7c0 79 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  y',..           
4b7d0 20 27 64 65 74 75 6e 65 27 0a 09 20 20 20 20 20   'detune'..     
4b7e0 20 20 20 5d 29 3b 0a 09 20 20 20 20 7d 3b 0a 09     ]);..    };..
4b7f0 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28      Tone.extend(
4b800 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f 72 2c  Tone.Oscillator,
4b810 20 54 6f 6e 65 2e 53 6f 75 72 63 65 29 3b 0a 09   Tone.Source);..
4b820 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 74 68      /**... *  th
4b830 65 20 64 65 66 61 75 6c 74 20 70 61 72 61 6d 65  e default parame
4b840 74 65 72 73 0a 09 09 20 2a 20 20 40 74 79 70 65  ters... *  @type
4b850 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a   {Object}... */.
4b860 09 20 20 20 20 54 6f 6e 65 2e 4f 73 63 69 6c 6c  .    Tone.Oscill
4b870 61 74 6f 72 2e 64 65 66 61 75 6c 74 73 20 3d 20  ator.defaults = 
4b880 7b 0a 09 20 20 20 20 20 20 20 20 27 74 79 70 65  {..        'type
4b890 27 3a 20 27 73 69 6e 65 27 2c 0a 09 20 20 20 20  ': 'sine',..    
4b8a0 20 20 20 20 27 66 72 65 71 75 65 6e 63 79 27 3a      'frequency':
4b8b0 20 34 34 30 2c 0a 09 20 20 20 20 20 20 20 20 27   440,..        '
4b8c0 64 65 74 75 6e 65 27 3a 20 30 2c 0a 09 20 20 20  detune': 0,..   
4b8d0 20 20 20 20 20 27 70 68 61 73 65 27 3a 20 30 2c       'phase': 0,
4b8e0 0a 09 20 20 20 20 20 20 20 20 27 70 61 72 74 69  ..        'parti
4b8f0 61 6c 73 27 3a 20 5b 5d 0a 09 20 20 20 20 7d 3b  als': []..    };
4b900 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
4b910 54 68 65 20 4f 73 63 69 6c 6c 61 74 6f 72 20 74  The Oscillator t
4b920 79 70 65 73 0a 09 09 20 2a 20 20 40 65 6e 75 6d  ypes... *  @enum
4b930 20 7b 53 74 72 69 6e 67 7d 0a 09 09 20 2a 2f 0a   {String}... */.
4b940 09 20 20 20 20 54 6f 6e 65 2e 4f 73 63 69 6c 6c  .    Tone.Oscill
4b950 61 74 6f 72 2e 54 79 70 65 20 3d 20 7b 0a 09 20  ator.Type = {.. 
4b960 20 20 20 20 20 20 20 53 69 6e 65 3a 20 27 73 69         Sine: 'si
4b970 6e 65 27 2c 0a 09 20 20 20 20 20 20 20 20 54 72  ne',..        Tr
4b980 69 61 6e 67 6c 65 3a 20 27 74 72 69 61 6e 67 6c  iangle: 'triangl
4b990 65 27 2c 0a 09 20 20 20 20 20 20 20 20 53 61 77  e',..        Saw
4b9a0 74 6f 6f 74 68 3a 20 27 73 61 77 74 6f 6f 74 68  tooth: 'sawtooth
4b9b0 27 2c 0a 09 20 20 20 20 20 20 20 20 53 71 75 61  ',..        Squa
4b9c0 72 65 3a 20 27 73 71 75 61 72 65 27 2c 0a 09 20  re: 'square',.. 
4b9d0 20 20 20 20 20 20 20 43 75 73 74 6f 6d 3a 20 27         Custom: '
4b9e0 63 75 73 74 6f 6d 27 0a 09 20 20 20 20 7d 3b 0a  custom'..    };.
4b9f0 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 73  .    /**... *  s
4ba00 74 61 72 74 20 74 68 65 20 6f 73 63 69 6c 6c 61  tart the oscilla
4ba10 74 6f 72 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  tor... *  @param
4ba20 20 20 7b 54 69 6d 65 7d 20 5b 74 69 6d 65 3d 6e    {Time} [time=n
4ba30 6f 77 5d 20 0a 09 09 20 2a 20 20 40 70 72 69 76  ow] ... *  @priv
4ba40 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  ate... */..    T
4ba50 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f 72 2e 70  one.Oscillator.p
4ba60 72 6f 74 6f 74 79 70 65 2e 5f 73 74 61 72 74 20  rototype._start 
4ba70 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65  = function (time
4ba80 29 20 7b 0a 09 20 20 20 20 20 20 20 20 2f 2f 6e  ) {..        //n
4ba90 65 77 20 6f 73 63 69 6c 6c 61 74 6f 72 20 77 69  ew oscillator wi
4baa0 74 68 20 70 72 65 76 69 6f 75 73 20 76 61 6c 75  th previous valu
4bab0 65 73 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  es..        this
4bac0 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72 20 3d 20 74  ._oscillator = t
4bad0 68 69 73 2e 63 6f 6e 74 65 78 74 2e 63 72 65 61  his.context.crea
4bae0 74 65 4f 73 63 69 6c 6c 61 74 6f 72 28 29 3b 0a  teOscillator();.
4baf0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6f  .        this._o
4bb00 73 63 69 6c 6c 61 74 6f 72 2e 73 65 74 50 65 72  scillator.setPer
4bb10 69 6f 64 69 63 57 61 76 65 28 74 68 69 73 2e 5f  iodicWave(this._
4bb20 77 61 76 65 29 3b 0a 09 20 20 20 20 20 20 20 20  wave);..        
4bb30 2f 2f 63 6f 6e 6e 65 63 74 20 74 68 65 20 63 6f  //connect the co
4bb40 6e 74 72 6f 6c 20 73 69 67 6e 61 6c 20 74 6f 20  ntrol signal to 
4bb50 74 68 65 20 6f 73 63 69 6c 6c 61 74 6f 72 20 66  the oscillator f
4bb60 72 65 71 75 65 6e 63 79 20 26 20 64 65 74 75 6e  requency & detun
4bb70 65 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  e..        this.
4bb80 5f 6f 73 63 69 6c 6c 61 74 6f 72 2e 63 6f 6e 6e  _oscillator.conn
4bb90 65 63 74 28 74 68 69 73 2e 6f 75 74 70 75 74 29  ect(this.output)
4bba0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
4bbb0 66 72 65 71 75 65 6e 63 79 2e 63 6f 6e 6e 65 63  frequency.connec
4bbc0 74 28 74 68 69 73 2e 5f 6f 73 63 69 6c 6c 61 74  t(this._oscillat
4bbd0 6f 72 2e 66 72 65 71 75 65 6e 63 79 29 3b 0a 09  or.frequency);..
4bbe0 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 74          this.det
4bbf0 75 6e 65 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73  une.connect(this
4bc00 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72 2e 64 65 74  ._oscillator.det
4bc10 75 6e 65 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  une);..        /
4bc20 2f 73 74 61 72 74 20 74 68 65 20 6f 73 63 69 6c  /start the oscil
4bc30 6c 61 74 6f 72 0a 09 20 20 20 20 20 20 20 20 74  lator..        t
4bc40 68 69 73 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72 2e  his._oscillator.
4bc50 73 74 61 72 74 28 74 68 69 73 2e 74 6f 53 65 63  start(this.toSec
4bc60 6f 6e 64 73 28 74 69 6d 65 29 29 3b 0a 09 20 20  onds(time));..  
4bc70 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    };..    /**...
4bc80 20 2a 20 20 73 74 6f 70 20 74 68 65 20 6f 73 63   *  stop the osc
4bc90 69 6c 6c 61 74 6f 72 0a 09 09 20 2a 20 20 40 70  illator... *  @p
4bca0 72 69 76 61 74 65 0a 09 09 20 2a 20 20 40 70 61  rivate... *  @pa
4bcb0 72 61 6d 20 20 7b 54 69 6d 65 7d 20 5b 74 69 6d  ram  {Time} [tim
4bcc0 65 3d 6e 6f 77 5d 20 28 6f 70 74 69 6f 6e 61 6c  e=now] (optional
4bcd0 29 20 74 69 6d 69 6e 67 20 70 61 72 61 6d 65 74  ) timing paramet
4bce0 65 72 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e  er... *  @return
4bcf0 73 20 7b 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74  s {Tone.Oscillat
4bd00 6f 72 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09  or} this... */..
4bd10 20 20 20 20 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61      Tone.Oscilla
4bd20 74 6f 72 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 73  tor.prototype._s
4bd30 74 6f 70 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  top = function (
4bd40 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20 20  time) {..       
4bd50 20 69 66 20 28 74 68 69 73 2e 5f 6f 73 63 69 6c   if (this._oscil
4bd60 6c 61 74 6f 72 29 20 7b 0a 09 20 20 20 20 20 20  lator) {..      
4bd70 20 20 20 20 20 20 74 68 69 73 2e 5f 6f 73 63 69        this._osci
4bd80 6c 6c 61 74 6f 72 2e 73 74 6f 70 28 74 68 69 73  llator.stop(this
4bd90 2e 74 6f 53 65 63 6f 6e 64 73 28 74 69 6d 65 29  .toSeconds(time)
4bda0 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4bdb0 74 68 69 73 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72  this._oscillator
4bdc0 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
4bdd0 20 20 7d 0a 09 20 20 20 20 20 20 20 20 72 65 74    }..        ret
4bde0 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
4bdf0 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
4be00 20 53 79 6e 63 20 74 68 65 20 73 69 67 6e 61 6c   Sync the signal
4be10 20 74 6f 20 74 68 65 20 54 72 61 6e 73 70 6f 72   to the Transpor
4be20 74 27 73 20 62 70 6d 2e 20 41 6e 79 20 63 68 61  t's bpm. Any cha
4be30 6e 67 65 73 20 74 6f 20 74 68 65 20 74 72 61 6e  nges to the tran
4be40 73 70 6f 72 74 73 20 62 70 6d 2c 0a 09 09 20 2a  sports bpm,... *
4be50 20 20 77 69 6c 6c 20 61 6c 73 6f 20 61 66 66 65    will also affe
4be60 63 74 20 74 68 65 20 6f 73 63 69 6c 6c 61 74 6f  ct the oscillato
4be70 72 73 20 66 72 65 71 75 65 6e 63 79 2e 20 0a 09  rs frequency. ..
4be80 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54  . *  @returns {T
4be90 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f 72 7d 20  one.Oscillator} 
4bea0 74 68 69 73 0a 09 09 20 2a 20 20 40 65 78 61 6d  this... *  @exam
4beb0 70 6c 65 0a 09 09 20 2a 20 54 6f 6e 65 2e 54 72  ple... * Tone.Tr
4bec0 61 6e 73 70 6f 72 74 2e 62 70 6d 2e 76 61 6c 75  ansport.bpm.valu
4bed0 65 20 3d 20 31 32 30 3b 0a 09 09 20 2a 20 6f 73  e = 120;... * os
4bee0 63 2e 66 72 65 71 75 65 6e 63 79 2e 76 61 6c 75  c.frequency.valu
4bef0 65 20 3d 20 34 34 30 3b 0a 09 09 20 2a 20 2f 2f  e = 440;... * //
4bf00 74 68 65 20 72 61 74 69 6f 6e 20 62 65 74 77 65  the ration betwe
4bf10 65 6e 20 74 68 65 20 62 70 6d 20 61 6e 64 20 74  en the bpm and t
4bf20 68 65 20 66 72 65 71 75 65 6e 63 79 20 77 69 6c  he frequency wil
4bf30 6c 20 62 65 20 6d 61 69 6e 74 61 69 6e 65 64 0a  l be maintained.
4bf40 09 09 20 2a 20 6f 73 63 2e 73 79 6e 63 46 72 65  .. * osc.syncFre
4bf50 71 75 65 6e 63 79 28 29 3b 0a 09 09 20 2a 20 54  quency();... * T
4bf60 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 2e 62 70  one.Transport.bp
4bf70 6d 2e 76 61 6c 75 65 20 3d 20 32 34 30 3b 20 0a  m.value = 240; .
4bf80 09 09 20 2a 20 2f 2f 20 74 68 65 20 66 72 65 71  .. * // the freq
4bf90 75 65 6e 63 79 20 6f 66 20 74 68 65 20 6f 73 63  uency of the osc
4bfa0 69 6c 6c 61 74 6f 72 20 69 73 20 64 6f 75 62 6c  illator is doubl
4bfb0 65 64 20 74 6f 20 38 38 30 0a 09 09 20 2a 2f 0a  ed to 880... */.
4bfc0 09 20 20 20 20 54 6f 6e 65 2e 4f 73 63 69 6c 6c  .    Tone.Oscill
4bfd0 61 74 6f 72 2e 70 72 6f 74 6f 74 79 70 65 2e 73  ator.prototype.s
4bfe0 79 6e 63 46 72 65 71 75 65 6e 63 79 20 3d 20 66  yncFrequency = f
4bff0 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
4c000 20 20 20 20 20 20 54 6f 6e 65 2e 54 72 61 6e 73        Tone.Trans
4c010 70 6f 72 74 2e 73 79 6e 63 53 69 67 6e 61 6c 28  port.syncSignal(
4c020 74 68 69 73 2e 66 72 65 71 75 65 6e 63 79 29 3b  this.frequency);
4c030 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
4c040 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09   this;..    };..
4c050 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 55 6e      /**... *  Un
4c060 73 79 6e 63 20 74 68 65 20 6f 73 63 69 6c 6c 61  sync the oscilla
4c070 74 6f 72 27 73 20 66 72 65 71 75 65 6e 63 79 20  tor's frequency 
4c080 66 72 6f 6d 20 74 68 65 20 54 72 61 6e 73 70 6f  from the Transpo
4c090 72 74 2e 20 0a 09 09 20 2a 20 20 53 65 65 20 54  rt. ... *  See T
4c0a0 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f 72 2e 73  one.Oscillator.s
4c0b0 79 6e 63 46 72 65 71 75 65 6e 63 79 0a 09 09 20  yncFrequency... 
4c0c0 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e  *  @returns {Ton
4c0d0 65 2e 4f 73 63 69 6c 6c 61 74 6f 72 7d 20 74 68  e.Oscillator} th
4c0e0 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  is... */..    To
4c0f0 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f 72 2e 70 72  ne.Oscillator.pr
4c100 6f 74 6f 74 79 70 65 2e 75 6e 73 79 6e 63 46 72  ototype.unsyncFr
4c110 65 71 75 65 6e 63 79 20 3d 20 66 75 6e 63 74 69  equency = functi
4c120 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
4c130 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 2e   Tone.Transport.
4c140 75 6e 73 79 6e 63 53 69 67 6e 61 6c 28 74 68 69  unsyncSignal(thi
4c150 73 2e 66 72 65 71 75 65 6e 63 79 29 3b 0a 09 20  s.frequency);.. 
4c160 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
4c170 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  is;..    };..   
4c180 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65 20 74 79   /**... * The ty
4c190 70 65 20 6f 66 20 74 68 65 20 6f 73 63 69 6c 6c  pe of the oscill
4c1a0 61 74 6f 72 3a 20 65 69 74 68 65 72 20 73 69 6e  ator: either sin
4c1b0 65 2c 20 73 71 75 61 72 65 2c 20 74 72 69 61 6e  e, square, trian
4c1c0 67 6c 65 2c 20 6f 72 20 73 61 77 74 6f 6f 74 68  gle, or sawtooth
4c1d0 2e 20 41 6c 73 6f 20 63 61 70 61 62 6c 65 20 6f  . Also capable o
4c1e0 66 0a 09 09 20 2a 20 73 65 74 74 69 6e 67 20 74  f... * setting t
4c1f0 68 65 20 66 69 72 73 74 20 78 20 6e 75 6d 62 65  he first x numbe
4c200 72 20 6f 66 20 70 61 72 74 69 61 6c 73 20 6f 66  r of partials of
4c210 20 74 68 65 20 6f 73 63 69 6c 6c 61 74 6f 72 2e   the oscillator.
4c220 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 20 22 73   For example: "s
4c230 69 6e 65 34 22 20 77 6f 75 6c 64 0a 09 09 20 2a  ine4" would... *
4c240 20 73 65 74 20 62 65 20 74 68 65 20 66 69 72 73   set be the firs
4c250 74 20 34 20 70 61 72 74 69 61 6c 73 20 6f 66 20  t 4 partials of 
4c260 74 68 65 20 73 69 6e 65 20 77 61 76 65 20 61 6e  the sine wave an
4c270 64 20 22 74 72 69 61 6e 67 6c 65 38 22 20 77 6f  d "triangle8" wo
4c280 75 6c 64 20 73 65 74 20 74 68 65 20 66 69 72 73  uld set the firs
4c290 74 0a 09 09 20 2a 20 38 20 70 61 72 74 69 61 6c  t... * 8 partial
4c2a0 73 20 6f 66 20 74 68 65 20 74 72 69 61 6e 67 6c  s of the triangl
4c2b0 65 20 77 61 76 65 2e 0a 09 09 20 2a 20 3c 62 72  e wave.... * <br
4c2c0 3e 3c 62 72 3e 20 0a 09 09 20 2a 20 55 73 65 73  ><br> ... * Uses
4c2d0 20 50 65 72 69 6f 64 69 63 57 61 76 65 20 69 6e   PeriodicWave in
4c2e0 74 65 72 6e 61 6c 6c 79 20 65 76 65 6e 20 66 6f  ternally even fo
4c2f0 72 20 6e 61 74 69 76 65 20 74 79 70 65 73 20 73  r native types s
4c300 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 73 65  o that it can se
4c310 74 20 74 68 65 20 70 68 61 73 65 2e 20 0a 09 09  t the phase. ...
4c320 20 2a 20 50 65 72 69 6f 64 69 63 57 61 76 65 20   * PeriodicWave 
4c330 65 71 75 61 74 69 6f 6e 73 20 61 72 65 20 66 72  equations are fr
4c340 6f 6d 20 74 68 65 20 0a 09 09 20 2a 20 5b 57 65  om the ... * [We
4c350 62 6b 69 74 20 57 65 62 20 41 75 64 69 6f 20 69  bkit Web Audio i
4c360 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 5d 28 68  mplementation](h
4c370 74 74 70 73 3a 2f 2f 63 6f 64 65 2e 67 6f 6f 67  ttps://code.goog
4c380 6c 65 2e 63 6f 6d 2f 70 2f 63 68 72 6f 6d 69 75  le.com/p/chromiu
4c390 6d 2f 63 6f 64 65 73 65 61 72 63 68 23 63 68 72  m/codesearch#chr
4c3a0 6f 6d 69 75 6d 2f 73 72 63 2f 74 68 69 72 64 5f  omium/src/third_
4c3b0 70 61 72 74 79 2f 57 65 62 4b 69 74 2f 53 6f 75  party/WebKit/Sou
4c3c0 72 63 65 2f 6d 6f 64 75 6c 65 73 2f 77 65 62 61  rce/modules/weba
4c3d0 75 64 69 6f 2f 50 65 72 69 6f 64 69 63 57 61 76  udio/PeriodicWav
4c3e0 65 2e 63 70 70 26 73 71 3d 70 61 63 6b 61 67 65  e.cpp&sq=package
4c3f0 3a 63 68 72 6f 6d 69 75 6d 29 2e 0a 09 09 20 2a  :chromium).... *
4c400 20 20 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f    ... * @memberO
4c410 66 20 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f  f Tone.Oscillato
4c420 72 23 0a 09 09 20 2a 20 40 74 79 70 65 20 7b 73  r#... * @type {s
4c430 74 72 69 6e 67 7d 0a 09 09 20 2a 20 40 6e 61 6d  tring}... * @nam
4c440 65 20 74 79 70 65 0a 09 09 20 2a 20 40 65 78 61  e type... * @exa
4c450 6d 70 6c 65 0a 09 09 20 2a 20 2f 2f 73 65 74 20  mple... * //set 
4c460 69 74 20 74 6f 20 61 20 73 71 75 61 72 65 20 77  it to a square w
4c470 61 76 65 0a 09 09 20 2a 20 6f 73 63 2e 74 79 70  ave... * osc.typ
4c480 65 20 3d 20 22 73 71 75 61 72 65 22 3b 0a 09 09  e = "square";...
4c490 20 2a 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a   * @example... *
4c4a0 20 2f 2f 73 65 74 20 74 68 65 20 66 69 72 73 74   //set the first
4c4b0 20 36 20 70 61 72 74 69 61 6c 73 20 6f 66 20 61   6 partials of a
4c4c0 20 73 61 77 74 6f 6f 74 68 20 77 61 76 65 0a 09   sawtooth wave..
4c4d0 09 20 2a 20 6f 73 63 2e 74 79 70 65 20 3d 20 22  . * osc.type = "
4c4e0 73 61 77 74 6f 6f 74 68 36 22 3b 0a 09 09 20 2a  sawtooth6";... *
4c4f0 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65  /..    Object.de
4c500 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e  fineProperty(Ton
4c510 65 2e 4f 73 63 69 6c 6c 61 74 6f 72 2e 70 72 6f  e.Oscillator.pro
4c520 74 6f 74 79 70 65 2c 20 27 74 79 70 65 27 2c 20  totype, 'type', 
4c530 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a 20  {..        get: 
4c540 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
4c550 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
4c560 6e 20 74 68 69 73 2e 5f 74 79 70 65 3b 0a 09 20  n this._type;.. 
4c570 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20         },..     
4c580 20 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e     set: function
4c590 20 28 74 79 70 65 29 20 7b 0a 09 20 20 20 20 20   (type) {..     
4c5a0 20 20 20 20 20 20 20 76 61 72 20 63 6f 65 66 73         var coefs
4c5b0 20 3d 20 74 68 69 73 2e 5f 67 65 74 52 65 61 6c   = this._getReal
4c5c0 49 6d 61 67 69 6e 61 72 79 28 74 79 70 65 2c 20  Imaginary(type, 
4c5d0 74 68 69 73 2e 5f 70 68 61 73 65 29 3b 0a 09 20  this._phase);.. 
4c5e0 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 70             var p
4c5f0 65 72 69 6f 64 69 63 57 61 76 65 20 3d 20 74 68  eriodicWave = th
4c600 69 73 2e 63 6f 6e 74 65 78 74 2e 63 72 65 61 74  is.context.creat
4c610 65 50 65 72 69 6f 64 69 63 57 61 76 65 28 63 6f  ePeriodicWave(co
4c620 65 66 73 5b 30 5d 2c 20 63 6f 65 66 73 5b 31 5d  efs[0], coefs[1]
4c630 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4c640 74 68 69 73 2e 5f 77 61 76 65 20 3d 20 70 65 72  this._wave = per
4c650 69 6f 64 69 63 57 61 76 65 3b 0a 09 20 20 20 20  iodicWave;..    
4c660 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73          if (this
4c670 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72 20 21 3d 3d  ._oscillator !==
4c680 20 6e 75 6c 6c 29 20 7b 0a 09 20 20 20 20 20 20   null) {..      
4c690 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
4c6a0 6f 73 63 69 6c 6c 61 74 6f 72 2e 73 65 74 50 65  oscillator.setPe
4c6b0 72 69 6f 64 69 63 57 61 76 65 28 74 68 69 73 2e  riodicWave(this.
4c6c0 5f 77 61 76 65 29 3b 0a 09 20 20 20 20 20 20 20  _wave);..       
4c6d0 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
4c6e0 20 20 20 20 74 68 69 73 2e 5f 74 79 70 65 20 3d      this._type =
4c6f0 20 74 79 70 65 3b 0a 09 20 20 20 20 20 20 20 20   type;..        
4c700 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20  }..    });..    
4c710 2f 2a 2a 0a 09 09 20 2a 20 20 52 65 74 75 72 6e  /**... *  Return
4c720 73 20 74 68 65 20 72 65 61 6c 20 61 6e 64 20 69  s the real and i
4c730 6d 61 67 69 6e 61 72 79 20 63 6f 6d 70 6f 6e 65  maginary compone
4c740 6e 74 73 20 62 61 73 65 64 20 0a 09 09 20 2a 20  nts based ... * 
4c750 20 6f 6e 20 74 68 65 20 6f 73 63 69 6c 6c 61 74   on the oscillat
4c760 6f 72 20 74 79 70 65 2e 0a 09 09 20 2a 20 20 40  or type.... *  @
4c770 72 65 74 75 72 6e 73 20 7b 41 72 72 61 79 7d 20  returns {Array} 
4c780 5b 72 65 61 6c 2c 20 69 6d 61 67 69 6e 61 72 79  [real, imaginary
4c790 5d 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  ]... *  @private
4c7a0 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
4c7b0 2e 4f 73 63 69 6c 6c 61 74 6f 72 2e 70 72 6f 74  .Oscillator.prot
4c7c0 6f 74 79 70 65 2e 5f 67 65 74 52 65 61 6c 49 6d  otype._getRealIm
4c7d0 61 67 69 6e 61 72 79 20 3d 20 66 75 6e 63 74 69  aginary = functi
4c7e0 6f 6e 20 28 74 79 70 65 2c 20 70 68 61 73 65 29  on (type, phase)
4c7f0 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20   {..        var 
4c800 66 66 74 53 69 7a 65 20 3d 20 34 30 39 36 3b 0a  fftSize = 4096;.
4c810 09 20 20 20 20 20 20 20 20 76 61 72 20 70 65 72  .        var per
4c820 69 6f 64 69 63 57 61 76 65 53 69 7a 65 20 3d 20  iodicWaveSize = 
4c830 66 66 74 53 69 7a 65 20 2f 20 32 3b 0a 09 20 20  fftSize / 2;..  
4c840 20 20 20 20 20 20 76 61 72 20 72 65 61 6c 20 3d        var real =
4c850 20 6e 65 77 20 46 6c 6f 61 74 33 32 41 72 72 61   new Float32Arra
4c860 79 28 70 65 72 69 6f 64 69 63 57 61 76 65 53 69  y(periodicWaveSi
4c870 7a 65 29 3b 0a 09 20 20 20 20 20 20 20 20 76 61  ze);..        va
4c880 72 20 69 6d 61 67 20 3d 20 6e 65 77 20 46 6c 6f  r imag = new Flo
4c890 61 74 33 32 41 72 72 61 79 28 70 65 72 69 6f 64  at32Array(period
4c8a0 69 63 57 61 76 65 53 69 7a 65 29 3b 0a 09 20 20  icWaveSize);..  
4c8b0 20 20 20 20 20 20 76 61 72 20 70 61 72 74 69 61        var partia
4c8c0 6c 43 6f 75 6e 74 20 3d 20 31 3b 0a 09 20 20 20  lCount = 1;..   
4c8d0 20 20 20 20 20 69 66 20 28 74 79 70 65 20 3d 3d       if (type ==
4c8e0 3d 20 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f  = Tone.Oscillato
4c8f0 72 2e 54 79 70 65 2e 43 75 73 74 6f 6d 29 20 7b  r.Type.Custom) {
4c900 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 70 61  ..            pa
4c910 72 74 69 61 6c 43 6f 75 6e 74 20 3d 20 74 68 69  rtialCount = thi
4c920 73 2e 5f 70 61 72 74 69 61 6c 73 2e 6c 65 6e 67  s._partials.leng
4c930 74 68 20 2b 20 31 3b 0a 09 20 20 20 20 20 20 20  th + 1;..       
4c940 20 20 20 20 20 70 65 72 69 6f 64 69 63 57 61 76       periodicWav
4c950 65 53 69 7a 65 20 3d 20 70 61 72 74 69 61 6c 43  eSize = partialC
4c960 6f 75 6e 74 3b 0a 09 20 20 20 20 20 20 20 20 7d  ount;..        }
4c970 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20   else {..       
4c980 20 20 20 20 20 76 61 72 20 70 61 72 74 69 61 6c       var partial
4c990 20 3d 20 2f 5e 28 73 69 6e 65 7c 74 72 69 61 6e   = /^(sine|trian
4c9a0 67 6c 65 7c 73 71 75 61 72 65 7c 73 61 77 74 6f  gle|square|sawto
4c9b0 6f 74 68 29 28 5c 64 2b 29 24 2f 2e 65 78 65 63  oth)(\d+)$/.exec
4c9c0 28 74 79 70 65 29 3b 0a 09 20 20 20 20 20 20 20  (type);..       
4c9d0 20 20 20 20 20 69 66 20 28 70 61 72 74 69 61 6c       if (partial
4c9e0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
4c9f0 20 20 20 20 20 70 61 72 74 69 61 6c 43 6f 75 6e       partialCoun
4ca00 74 20 3d 20 70 61 72 73 65 49 6e 74 28 70 61 72  t = parseInt(par
4ca10 74 69 61 6c 5b 32 5d 29 20 2b 20 31 3b 0a 09 20  tial[2]) + 1;.. 
4ca20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
4ca30 79 70 65 20 3d 20 70 61 72 74 69 61 6c 5b 31 5d  ype = partial[1]
4ca40 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4ca50 20 20 20 70 61 72 74 69 61 6c 43 6f 75 6e 74 20     partialCount 
4ca60 3d 20 4d 61 74 68 2e 6d 61 78 28 70 61 72 74 69  = Math.max(parti
4ca70 61 6c 43 6f 75 6e 74 2c 20 32 29 3b 0a 09 20 20  alCount, 2);..  
4ca80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 65                pe
4ca90 72 69 6f 64 69 63 57 61 76 65 53 69 7a 65 20 3d  riodicWaveSize =
4caa0 20 70 61 72 74 69 61 6c 43 6f 75 6e 74 3b 0a 09   partialCount;..
4cab0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20              }.. 
4cac0 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
4cad0 20 20 66 6f 72 20 28 76 61 72 20 6e 20 3d 20 31    for (var n = 1
4cae0 3b 20 6e 20 3c 20 70 65 72 69 6f 64 69 63 57 61  ; n < periodicWa
4caf0 76 65 53 69 7a 65 3b 20 2b 2b 6e 29 20 7b 0a 09  veSize; ++n) {..
4cb00 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20              var 
4cb10 70 69 46 61 63 74 6f 72 20 3d 20 32 20 2f 20 28  piFactor = 2 / (
4cb20 6e 20 2a 20 4d 61 74 68 2e 50 49 29 3b 0a 09 20  n * Math.PI);.. 
4cb30 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 62             var b
4cb40 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 73  ;..            s
4cb50 77 69 74 63 68 20 28 74 79 70 65 29 20 7b 0a 09  witch (type) {..
4cb60 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
4cb70 20 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f 72   Tone.Oscillator
4cb80 2e 54 79 70 65 2e 53 69 6e 65 3a 0a 09 20 20 20  .Type.Sine:..   
4cb90 20 20 20 20 20 20 20 20 20 20 20 20 20 62 20 3d               b =
4cba0 20 6e 20 3c 3d 20 70 61 72 74 69 61 6c 43 6f 75   n <= partialCou
4cbb0 6e 74 20 3f 20 31 20 3a 20 30 3b 0a 09 20 20 20  nt ? 1 : 0;..   
4cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
4cbd0 61 6b 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ak;..           
4cbe0 20 63 61 73 65 20 54 6f 6e 65 2e 4f 73 63 69 6c   case Tone.Oscil
4cbf0 6c 61 74 6f 72 2e 54 79 70 65 2e 53 71 75 61 72  lator.Type.Squar
4cc00 65 3a 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  e:..            
4cc10 20 20 20 20 62 20 3d 20 6e 20 26 20 31 20 3f 20      b = n & 1 ? 
4cc20 32 20 2a 20 70 69 46 61 63 74 6f 72 20 3a 20 30  2 * piFactor : 0
4cc30 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4cc40 20 20 20 62 72 65 61 6b 3b 0a 09 20 20 20 20 20     break;..     
4cc50 20 20 20 20 20 20 20 63 61 73 65 20 54 6f 6e 65         case Tone
4cc60 2e 4f 73 63 69 6c 6c 61 74 6f 72 2e 54 79 70 65  .Oscillator.Type
4cc70 2e 53 61 77 74 6f 6f 74 68 3a 0a 09 20 20 20 20  .Sawtooth:..    
4cc80 20 20 20 20 20 20 20 20 20 20 20 20 62 20 3d 20              b = 
4cc90 70 69 46 61 63 74 6f 72 20 2a 20 28 6e 20 26 20  piFactor * (n & 
4cca0 31 20 3f 20 31 20 3a 20 2d 31 29 3b 0a 09 20 20  1 ? 1 : -1);..  
4ccb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
4ccc0 65 61 6b 3b 0a 09 20 20 20 20 20 20 20 20 20 20  eak;..          
4ccd0 20 20 63 61 73 65 20 54 6f 6e 65 2e 4f 73 63 69    case Tone.Osci
4cce0 6c 6c 61 74 6f 72 2e 54 79 70 65 2e 54 72 69 61  llator.Type.Tria
4ccf0 6e 67 6c 65 3a 0a 09 20 20 20 20 20 20 20 20 20  ngle:..         
4cd00 20 20 20 20 20 20 20 69 66 20 28 6e 20 26 20 31         if (n & 1
4cd10 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
4cd20 20 20 20 20 20 20 20 20 20 62 20 3d 20 32 20 2a           b = 2 *
4cd30 20 28 70 69 46 61 63 74 6f 72 20 2a 20 70 69 46   (piFactor * piF
4cd40 61 63 74 6f 72 29 20 2a 20 28 6e 20 2d 20 31 20  actor) * (n - 1 
4cd50 3e 3e 20 31 20 26 20 31 20 3f 20 2d 31 20 3a 20  >> 1 & 1 ? -1 : 
4cd60 31 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  1);..           
4cd70 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20       } else {.. 
4cd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4cd90 20 20 20 62 20 3d 20 30 3b 0a 09 20 20 20 20 20     b = 0;..     
4cda0 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20             }..  
4cdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
4cdc0 65 61 6b 3b 0a 09 20 20 20 20 20 20 20 20 20 20  eak;..          
4cdd0 20 20 63 61 73 65 20 54 6f 6e 65 2e 4f 73 63 69    case Tone.Osci
4cde0 6c 6c 61 74 6f 72 2e 54 79 70 65 2e 43 75 73 74  llator.Type.Cust
4cdf0 6f 6d 3a 0a 09 20 20 20 20 20 20 20 20 20 20 20  om:..           
4ce00 20 20 20 20 20 62 20 3d 20 74 68 69 73 2e 5f 70       b = this._p
4ce10 61 72 74 69 61 6c 73 5b 6e 20 2d 20 31 5d 3b 0a  artials[n - 1];.
4ce20 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4ce30 20 62 72 65 61 6b 3b 0a 09 20 20 20 20 20 20 20   break;..       
4ce40 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 09 20       default:.. 
4ce50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
4ce60 68 72 6f 77 20 6e 65 77 20 54 79 70 65 45 72 72  hrow new TypeErr
4ce70 6f 72 28 27 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61  or('Tone.Oscilla
4ce80 74 6f 72 3a 20 69 6e 76 61 6c 69 64 20 74 79 70  tor: invalid typ
4ce90 65 3a 20 27 20 2b 20 74 79 70 65 29 3b 0a 09 20  e: ' + type);.. 
4cea0 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20             }..  
4ceb0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62 20            if (b 
4cec0 21 3d 3d 20 30 29 20 7b 0a 09 20 20 20 20 20 20  !== 0) {..      
4ced0 20 20 20 20 20 20 20 20 20 20 72 65 61 6c 5b 6e            real[n
4cee0 5d 20 3d 20 2d 62 20 2a 20 4d 61 74 68 2e 73 69  ] = -b * Math.si
4cef0 6e 28 70 68 61 73 65 20 2a 20 6e 29 3b 0a 09 20  n(phase * n);.. 
4cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
4cf10 6d 61 67 5b 6e 5d 20 3d 20 62 20 2a 20 4d 61 74  mag[n] = b * Mat
4cf20 68 2e 63 6f 73 28 70 68 61 73 65 20 2a 20 6e 29  h.cos(phase * n)
4cf30 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
4cf40 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20   else {..       
4cf50 20 20 20 20 20 20 20 20 20 72 65 61 6c 5b 6e 5d           real[n]
4cf60 20 3d 20 30 3b 0a 09 20 20 20 20 20 20 20 20 20   = 0;..         
4cf70 20 20 20 20 20 20 20 69 6d 61 67 5b 6e 5d 20 3d         imag[n] =
4cf80 20 30 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20   0;..           
4cf90 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20   }..        }.. 
4cfa0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 0a         return [.
4cfb0 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 61  .            rea
4cfc0 6c 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
4cfd0 69 6d 61 67 0a 09 20 20 20 20 20 20 20 20 5d 3b  imag..        ];
4cfe0 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
4cff0 2a 0a 09 09 20 2a 20 20 43 6f 6d 70 75 74 65 20  *... *  Compute 
4d000 74 68 65 20 69 6e 76 65 72 73 65 20 46 46 54 20  the inverse FFT 
4d010 66 6f 72 20 61 20 67 69 76 65 6e 20 70 68 61 73  for a given phas
4d020 65 2e 09 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  e..... *  @param
4d030 20 20 7b 46 6c 6f 61 74 33 32 41 72 72 61 79 7d    {Float32Array}
4d040 20 20 72 65 61 6c 0a 09 09 20 2a 20 20 40 70 61    real... *  @pa
4d050 72 61 6d 20 20 7b 46 6c 6f 61 74 33 32 41 72 72  ram  {Float32Arr
4d060 61 79 7d 20 20 69 6d 61 67 20 0a 09 09 20 2a 20  ay}  imag ... * 
4d070 20 40 70 61 72 61 6d 20 20 7b 4e 6f 72 6d 61 6c   @param  {Normal
4d080 52 61 6e 67 65 7d 20 20 70 68 61 73 65 20 0a 09  Range}  phase ..
4d090 09 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 41  . *  @return  {A
4d0a0 75 64 69 6f 52 61 6e 67 65 7d 0a 09 09 20 2a 20  udioRange}... * 
4d0b0 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a   @private... */.
4d0c0 09 20 20 20 20 54 6f 6e 65 2e 4f 73 63 69 6c 6c  .    Tone.Oscill
4d0d0 61 74 6f 72 2e 70 72 6f 74 6f 74 79 70 65 2e 5f  ator.prototype._
4d0e0 69 6e 76 65 72 73 65 46 46 54 20 3d 20 66 75 6e  inverseFFT = fun
4d0f0 63 74 69 6f 6e 20 28 72 65 61 6c 2c 20 69 6d 61  ction (real, ima
4d100 67 2c 20 70 68 61 73 65 29 20 7b 0a 09 20 20 20  g, phase) {..   
4d110 20 20 20 20 20 76 61 72 20 73 75 6d 20 3d 20 30       var sum = 0
4d120 3b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 6c  ;..        var l
4d130 65 6e 20 3d 20 72 65 61 6c 2e 6c 65 6e 67 74 68  en = real.length
4d140 3b 0a 09 20 20 20 20 20 20 20 20 66 6f 72 20 28  ;..        for (
4d150 76 61 72 20 69 20 3d 20 30 3b 20 69 20 3c 20 6c  var i = 0; i < l
4d160 65 6e 3b 20 69 2b 2b 29 20 7b 0a 09 20 20 20 20  en; i++) {..    
4d170 20 20 20 20 20 20 20 20 73 75 6d 20 2b 3d 20 72          sum += r
4d180 65 61 6c 5b 69 5d 20 2a 20 4d 61 74 68 2e 63 6f  eal[i] * Math.co
4d190 73 28 69 20 2a 20 70 68 61 73 65 29 20 2b 20 69  s(i * phase) + i
4d1a0 6d 61 67 5b 69 5d 20 2a 20 4d 61 74 68 2e 73 69  mag[i] * Math.si
4d1b0 6e 28 69 20 2a 20 70 68 61 73 65 29 3b 0a 09 20  n(i * phase);.. 
4d1c0 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
4d1d0 20 20 72 65 74 75 72 6e 20 73 75 6d 3b 0a 09 20    return sum;.. 
4d1e0 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09     };..    /**..
4d1f0 09 20 2a 20 20 52 65 74 75 72 6e 73 20 74 68 65  . *  Returns the
4d200 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f   initial value o
4d210 66 20 74 68 65 20 6f 73 63 69 6c 6c 61 74 6f 72  f the oscillator
4d220 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20  .... *  @return 
4d230 20 7b 41 75 64 69 6f 52 61 6e 67 65 7d 0a 09 09   {AudioRange}...
4d240 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 20   *  @private... 
4d250 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4f 73 63  */..    Tone.Osc
4d260 69 6c 6c 61 74 6f 72 2e 70 72 6f 74 6f 74 79 70  illator.prototyp
4d270 65 2e 5f 67 65 74 49 6e 69 74 69 61 6c 56 61 6c  e._getInitialVal
4d280 75 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  ue = function ()
4d290 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20   {..        var 
4d2a0 63 6f 65 66 73 20 3d 20 74 68 69 73 2e 5f 67 65  coefs = this._ge
4d2b0 74 52 65 61 6c 49 6d 61 67 69 6e 61 72 79 28 74  tRealImaginary(t
4d2c0 68 69 73 2e 5f 74 79 70 65 2c 20 30 29 3b 0a 09  his._type, 0);..
4d2d0 20 20 20 20 20 20 20 20 76 61 72 20 72 65 61 6c          var real
4d2e0 20 3d 20 63 6f 65 66 73 5b 30 5d 3b 0a 09 20 20   = coefs[0];..  
4d2f0 20 20 20 20 20 20 76 61 72 20 69 6d 61 67 20 3d        var imag =
4d300 20 63 6f 65 66 73 5b 31 5d 3b 0a 09 20 20 20 20   coefs[1];..    
4d310 20 20 20 20 76 61 72 20 6d 61 78 56 61 6c 75 65      var maxValue
4d320 20 3d 20 30 3b 0a 09 20 20 20 20 20 20 20 20 76   = 0;..        v
4d330 61 72 20 74 77 6f 50 69 20 3d 20 4d 61 74 68 2e  ar twoPi = Math.
4d340 50 49 20 2a 20 32 3b 0a 09 20 20 20 20 20 20 20  PI * 2;..       
4d350 20 2f 2f 63 68 65 63 6b 20 66 6f 72 20 70 65 61   //check for pea
4d360 6b 73 20 69 6e 20 38 20 70 6c 61 63 65 73 0a 09  ks in 8 places..
4d370 20 20 20 20 20 20 20 20 66 6f 72 20 28 76 61 72          for (var
4d380 20 69 20 3d 20 30 3b 20 69 20 3c 20 38 3b 20 69   i = 0; i < 8; i
4d390 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ++) {..         
4d3a0 20 20 20 6d 61 78 56 61 6c 75 65 20 3d 20 4d 61     maxValue = Ma
4d3b0 74 68 2e 6d 61 78 28 74 68 69 73 2e 5f 69 6e 76  th.max(this._inv
4d3c0 65 72 73 65 46 46 54 28 72 65 61 6c 2c 20 69 6d  erseFFT(real, im
4d3d0 61 67 2c 20 69 20 2f 20 38 20 2a 20 74 77 6f 50  ag, i / 8 * twoP
4d3e0 69 29 2c 20 6d 61 78 56 61 6c 75 65 29 3b 0a 09  i), maxValue);..
4d3f0 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
4d400 20 20 20 72 65 74 75 72 6e 20 2d 74 68 69 73 2e     return -this.
4d410 5f 69 6e 76 65 72 73 65 46 46 54 28 72 65 61 6c  _inverseFFT(real
4d420 2c 20 69 6d 61 67 2c 20 74 68 69 73 2e 5f 70 68  , imag, this._ph
4d430 61 73 65 29 20 2f 20 6d 61 78 56 61 6c 75 65 3b  ase) / maxValue;
4d440 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
4d450 2a 0a 09 09 20 2a 20 54 68 65 20 70 61 72 74 69  *... * The parti
4d460 61 6c 73 20 6f 66 20 74 68 65 20 77 61 76 65 66  als of the wavef
4d470 6f 72 6d 2e 20 41 20 70 61 72 74 69 61 6c 20 72  orm. A partial r
4d480 65 70 72 65 73 65 6e 74 73 20 0a 09 09 20 2a 20  epresents ... * 
4d490 74 68 65 20 61 6d 70 6c 69 74 75 64 65 20 61 74  the amplitude at
4d4a0 20 61 20 68 61 72 6d 6f 6e 69 63 2e 20 54 68 65   a harmonic. The
4d4b0 20 66 69 72 73 74 20 68 61 72 6d 6f 6e 69 63 20   first harmonic 
4d4c0 69 73 20 74 68 65 20 0a 09 09 20 2a 20 66 75 6e  is the ... * fun
4d4d0 64 61 6d 65 6e 74 61 6c 20 66 72 65 71 75 65 6e  damental frequen
4d4e0 63 79 2c 20 74 68 65 20 73 65 63 6f 6e 64 20 69  cy, the second i
4d4f0 73 20 74 68 65 20 6f 63 74 61 76 65 20 61 6e 64  s the octave and
4d500 20 73 6f 20 6f 6e 0a 09 09 20 2a 20 66 6f 6c 6c   so on... * foll
4d510 6f 77 69 6e 67 20 74 68 65 20 68 61 72 6d 6f 6e  owing the harmon
4d520 69 63 20 73 65 72 69 65 73 2e 20 0a 09 09 20 2a  ic series. ... *
4d530 20 53 65 74 74 69 6e 67 20 74 68 69 73 20 76 61   Setting this va
4d540 6c 75 65 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74  lue will automat
4d550 69 63 61 6c 6c 79 20 73 65 74 20 74 68 65 20 74  ically set the t
4d560 79 70 65 20 74 6f 20 22 63 75 73 74 6f 6d 22 2e  ype to "custom".
4d570 20 0a 09 09 20 2a 20 54 68 65 20 76 61 6c 75 65   ... * The value
4d580 20 69 73 20 61 6e 20 65 6d 70 74 79 20 61 72 72   is an empty arr
4d590 61 79 20 77 68 65 6e 20 74 68 65 20 74 79 70 65  ay when the type
4d5a0 20 69 73 20 6e 6f 74 20 22 63 75 73 74 6f 6d 22   is not "custom"
4d5b0 2e 20 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f  . ... * @memberO
4d5c0 66 20 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f  f Tone.Oscillato
4d5d0 72 23 0a 09 09 20 2a 20 40 74 79 70 65 20 7b 41  r#... * @type {A
4d5e0 72 72 61 79 7d 0a 09 09 20 2a 20 40 6e 61 6d 65  rray}... * @name
4d5f0 20 70 61 72 74 69 61 6c 73 0a 09 09 20 2a 20 40   partials... * @
4d600 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 6f 73 63  example... * osc
4d610 2e 70 61 72 74 69 61 6c 73 20 3d 20 5b 31 2c 20  .partials = [1, 
4d620 30 2e 32 2c 20 30 2e 30 31 5d 3b 0a 09 09 20 2a  0.2, 0.01];... *
4d630 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65  /..    Object.de
4d640 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e  fineProperty(Ton
4d650 65 2e 4f 73 63 69 6c 6c 61 74 6f 72 2e 70 72 6f  e.Oscillator.pro
4d660 74 6f 74 79 70 65 2c 20 27 70 61 72 74 69 61 6c  totype, 'partial
4d670 73 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67  s', {..        g
4d680 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  et: function () 
4d690 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
4d6a0 66 20 28 74 68 69 73 2e 5f 74 79 70 65 20 21 3d  f (this._type !=
4d6b0 3d 20 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f  = Tone.Oscillato
4d6c0 72 2e 54 79 70 65 2e 43 75 73 74 6f 6d 29 20 7b  r.Type.Custom) {
4d6d0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4d6e0 20 20 72 65 74 75 72 6e 20 5b 5d 3b 0a 09 20 20    return [];..  
4d6f0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
4d700 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4d710 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
4d720 5f 70 61 72 74 69 61 6c 73 3b 0a 09 20 20 20 20  _partials;..    
4d730 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
4d740 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73     },..        s
4d750 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 70 61  et: function (pa
4d760 72 74 69 61 6c 73 29 20 7b 0a 09 20 20 20 20 20  rtials) {..     
4d770 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70 61 72         this._par
4d780 74 69 61 6c 73 20 3d 20 70 61 72 74 69 61 6c 73  tials = partials
4d790 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  ;..            t
4d7a0 68 69 73 2e 74 79 70 65 20 3d 20 54 6f 6e 65 2e  his.type = Tone.
4d7b0 4f 73 63 69 6c 6c 61 74 6f 72 2e 54 79 70 65 2e  Oscillator.Type.
4d7c0 43 75 73 74 6f 6d 3b 0a 09 20 20 20 20 20 20 20  Custom;..       
4d7d0 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20   }..    });..   
4d7e0 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65 20 70 68   /**... * The ph
4d7f0 61 73 65 20 6f 66 20 74 68 65 20 6f 73 63 69 6c  ase of the oscil
4d800 6c 61 74 6f 72 20 69 6e 20 64 65 67 72 65 65 73  lator in degrees
4d810 2e 20 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f  . ... * @memberO
4d820 66 20 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f  f Tone.Oscillato
4d830 72 23 0a 09 09 20 2a 20 40 74 79 70 65 20 7b 44  r#... * @type {D
4d840 65 67 72 65 65 73 7d 0a 09 09 20 2a 20 40 6e 61  egrees}... * @na
4d850 6d 65 20 70 68 61 73 65 0a 09 09 20 2a 20 40 65  me phase... * @e
4d860 78 61 6d 70 6c 65 0a 09 09 20 2a 20 6f 73 63 2e  xample... * osc.
4d870 70 68 61 73 65 20 3d 20 31 38 30 3b 20 2f 2f 66  phase = 180; //f
4d880 6c 69 70 73 20 74 68 65 20 70 68 61 73 65 20 6f  lips the phase o
4d890 66 20 74 68 65 20 6f 73 63 69 6c 6c 61 74 6f 72  f the oscillator
4d8a0 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65  ... */..    Obje
4d8b0 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74  ct.definePropert
4d8c0 79 28 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f  y(Tone.Oscillato
4d8d0 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 70 68  r.prototype, 'ph
4d8e0 61 73 65 27 2c 20 7b 0a 09 20 20 20 20 20 20 20  ase', {..       
4d8f0 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   get: function (
4d900 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
4d910 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 70 68   return this._ph
4d920 61 73 65 20 2a 20 28 31 38 30 20 2f 20 4d 61 74  ase * (180 / Mat
4d930 68 2e 50 49 29 3b 0a 09 20 20 20 20 20 20 20 20  h.PI);..        
4d940 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a  },..        set:
4d950 20 66 75 6e 63 74 69 6f 6e 20 28 70 68 61 73 65   function (phase
4d960 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
4d970 20 74 68 69 73 2e 5f 70 68 61 73 65 20 3d 20 70   this._phase = p
4d980 68 61 73 65 20 2a 20 4d 61 74 68 2e 50 49 20 2f  hase * Math.PI /
4d990 20 31 38 30 3b 0a 09 20 20 20 20 20 20 20 20 20   180;..         
4d9a0 20 20 20 2f 2f 72 65 73 65 74 20 74 68 65 20 74     //reset the t
4d9b0 79 70 65 0a 09 20 20 20 20 20 20 20 20 20 20 20  ype..           
4d9c0 20 74 68 69 73 2e 74 79 70 65 20 3d 20 74 68 69   this.type = thi
4d9d0 73 2e 5f 74 79 70 65 3b 0a 09 20 20 20 20 20 20  s._type;..      
4d9e0 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20    }..    });..  
4d9f0 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 44 69 73 70    /**... *  Disp
4da00 6f 73 65 20 61 6e 64 20 64 69 73 63 6f 6e 6e 65  ose and disconne
4da10 63 74 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72  ct.... *  @retur
4da20 6e 20 7b 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74  n {Tone.Oscillat
4da30 6f 72 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09  or} this... */..
4da40 20 20 20 20 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61      Tone.Oscilla
4da50 74 6f 72 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69  tor.prototype.di
4da60 73 70 6f 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e  spose = function
4da70 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 54   () {..        T
4da80 6f 6e 65 2e 53 6f 75 72 63 65 2e 70 72 6f 74 6f  one.Source.proto
4da90 74 79 70 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c  type.dispose.cal
4daa0 6c 28 74 68 69 73 29 3b 0a 09 20 20 20 20 20 20  l(this);..      
4dab0 20 20 69 66 20 28 74 68 69 73 2e 5f 6f 73 63 69    if (this._osci
4dac0 6c 6c 61 74 6f 72 20 21 3d 3d 20 6e 75 6c 6c 29  llator !== null)
4dad0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4dae0 74 68 69 73 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72  this._oscillator
4daf0 2e 64 69 73 63 6f 6e 6e 65 63 74 28 29 3b 0a 09  .disconnect();..
4db00 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
4db10 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72 20 3d 20 6e  ._oscillator = n
4db20 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a  ull;..        }.
4db30 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 77  .        this._w
4db40 61 76 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  ave = null;..   
4db50 20 20 20 20 20 74 68 69 73 2e 5f 77 72 69 74 61       this._writa
4db60 62 6c 65 28 5b 0a 09 20 20 20 20 20 20 20 20 20  ble([..         
4db70 20 20 20 27 66 72 65 71 75 65 6e 63 79 27 2c 0a     'frequency',.
4db80 09 20 20 20 20 20 20 20 20 20 20 20 20 27 64 65  .            'de
4db90 74 75 6e 65 27 0a 09 20 20 20 20 20 20 20 20 5d  tune'..        ]
4dba0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
4dbb0 2e 66 72 65 71 75 65 6e 63 79 2e 64 69 73 70 6f  .frequency.dispo
4dbc0 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74  se();..        t
4dbd0 68 69 73 2e 66 72 65 71 75 65 6e 63 79 20 3d 20  his.frequency = 
4dbe0 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74  null;..        t
4dbf0 68 69 73 2e 64 65 74 75 6e 65 2e 64 69 73 70 6f  his.detune.dispo
4dc00 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74  se();..        t
4dc10 68 69 73 2e 64 65 74 75 6e 65 20 3d 20 6e 75 6c  his.detune = nul
4dc20 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  l;..        this
4dc30 2e 5f 70 61 72 74 69 61 6c 73 20 3d 20 6e 75 6c  ._partials = nul
4dc40 6c 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75  l;..        retu
4dc50 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b  rn this;..    };
4dc60 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e  ..    return Ton
4dc70 65 2e 4f 73 63 69 6c 6c 61 74 6f 72 3b 0a 09 7d  e.Oscillator;..}
4dc80 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74  );..Module(funct
4dc90 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20  ion (Tone) {..  
4dca0 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61    /**... *  @cla
4dcb0 73 73 20 54 6f 6e 65 2e 5a 65 72 6f 20 6f 75 74  ss Tone.Zero out
4dcc0 70 75 74 73 20 30 27 73 20 61 74 20 61 75 64 69  puts 0's at audi
4dcd0 6f 2d 72 61 74 65 2e 20 54 68 65 20 72 65 61 73  o-rate. The reas
4dce0 6f 6e 20 74 68 69 73 20 68 61 73 20 74 6f 20 62  on this has to b
4dcf0 65 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 69  e... *         i
4dd00 74 27 73 20 6f 77 6e 20 63 6c 61 73 73 20 69 73  t's own class is
4dd10 20 74 68 61 74 20 6d 61 6e 79 20 62 72 6f 77 73   that many brows
4dd20 65 72 73 20 6f 70 74 69 6d 69 7a 65 20 6f 75 74  ers optimize out
4dd30 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 0a 09 09 20   Tone.Signal... 
4dd40 2a 20 20 20 20 20 20 20 20 20 77 69 74 68 20 61  *         with a
4dd50 20 76 61 6c 75 65 20 6f 66 20 30 20 61 6e 64 20   value of 0 and 
4dd60 77 69 6c 6c 20 6e 6f 74 20 70 72 6f 63 65 73 73  will not process
4dd70 20 6e 6f 64 65 73 20 66 75 72 74 68 65 72 20 64   nodes further d
4dd80 6f 77 6e 20 74 68 65 20 67 72 61 70 68 2e 20 0a  own the graph. .
4dd90 09 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b  .. *  @extends {
4dda0 54 6f 6e 65 7d 0a 09 09 20 2a 2f 0a 09 20 20 20  Tone}... */..   
4ddb0 20 54 6f 6e 65 2e 5a 65 72 6f 20 3d 20 66 75 6e   Tone.Zero = fun
4ddc0 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
4ddd0 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54      /**.... *  T
4dde0 68 65 20 67 61 69 6e 20 6e 6f 64 65 0a 09 09 09  he gain node....
4ddf0 20 2a 20 20 40 74 79 70 65 20 20 7b 54 6f 6e 65   *  @type  {Tone
4de00 2e 47 61 69 6e 7d 0a 09 09 09 20 2a 20 20 40 70  .Gain}.... *  @p
4de10 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20  rivate.... */.. 
4de20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 67 61 69         this._gai
4de30 6e 20 3d 20 74 68 69 73 2e 69 6e 70 75 74 20 3d  n = this.input =
4de40 20 74 68 69 73 2e 6f 75 74 70 75 74 20 3d 20 6e   this.output = n
4de50 65 77 20 54 6f 6e 65 2e 47 61 69 6e 28 29 3b 0a  ew Tone.Gain();.
4de60 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 5a 65  .        Tone.Ze
4de70 72 6f 2e 5f 7a 65 72 6f 73 2e 63 6f 6e 6e 65 63  ro._zeros.connec
4de80 74 28 74 68 69 73 2e 5f 67 61 69 6e 29 3b 0a 09  t(this._gain);..
4de90 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65      };..    Tone
4dea0 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 5a 65 72  .extend(Tone.Zer
4deb0 6f 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  o);..    /**... 
4dec0 2a 20 20 63 6c 65 61 6e 20 75 70 0a 09 09 20 2a  *  clean up... *
4ded0 20 20 40 72 65 74 75 72 6e 20 20 7b 54 6f 6e 65    @return  {Tone
4dee0 2e 5a 65 72 6f 7d 20 20 74 68 69 73 0a 09 09 20  .Zero}  this... 
4def0 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 5a 65 72  */..    Tone.Zer
4df00 6f 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70  o.prototype.disp
4df10 6f 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  ose = function (
4df20 29 20 7b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e  ) {..        Ton
4df30 65 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70  e.prototype.disp
4df40 6f 73 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a  ose.call(this);.
4df50 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 67  .        this._g
4df60 61 69 6e 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09  ain.dispose();..
4df70 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 67 61          this._ga
4df80 69 6e 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  in = null;..    
4df90 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b      return this;
4dfa0 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
4dfb0 2a 0a 09 09 20 2a 20 20 47 65 6e 65 72 61 74 65  *... *  Generate
4dfc0 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74  s a constant out
4dfd0 70 75 74 20 6f 66 20 30 2e 20 54 68 69 73 20 69  put of 0. This i
4dfe0 73 20 73 6f 20 0a 09 09 20 2a 20 20 74 68 65 20  s so ... *  the 
4dff0 70 72 6f 63 65 73 73 69 6e 67 20 67 72 61 70 68  processing graph
4e000 20 64 6f 65 73 6e 27 74 20 6f 70 74 69 6d 69 7a   doesn't optimiz
4e010 65 20 6f 75 74 20 74 68 69 73 0a 09 09 20 2a 20  e out this... * 
4e020 20 73 65 67 6d 65 6e 74 20 6f 66 20 74 68 65 20   segment of the 
4e030 67 72 61 70 68 2e 20 0a 09 09 20 2a 20 20 40 73  graph. ... *  @s
4e040 74 61 74 69 63 0a 09 09 20 2a 20 20 40 70 72 69  tatic... *  @pri
4e050 76 61 74 65 0a 09 09 20 2a 20 20 40 63 6f 6e 73  vate... *  @cons
4e060 74 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b 41  t... *  @type {A
4e070 75 64 69 6f 42 75 66 66 65 72 53 6f 75 72 63 65  udioBufferSource
4e080 4e 6f 64 65 7d 0a 09 09 20 2a 2f 0a 09 20 20 20  Node}... */..   
4e090 20 54 6f 6e 65 2e 5a 65 72 6f 2e 5f 7a 65 72 6f   Tone.Zero._zero
4e0a0 73 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 2f  s = null;..    /
4e0b0 2a 2a 0a 09 09 20 2a 20 20 69 6e 69 74 69 61 6c  **... *  initial
4e0c0 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 0a 09 09  izer function...
4e0d0 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 5f 69   */..    Tone._i
4e0e0 6e 69 74 41 75 64 69 6f 43 6f 6e 74 65 78 74 28  nitAudioContext(
4e0f0 66 75 6e 63 74 69 6f 6e 20 28 61 75 64 69 6f 43  function (audioC
4e100 6f 6e 74 65 78 74 29 20 7b 0a 09 20 20 20 20 20  ontext) {..     
4e110 20 20 20 76 61 72 20 62 75 66 66 65 72 20 3d 20     var buffer = 
4e120 61 75 64 69 6f 43 6f 6e 74 65 78 74 2e 63 72 65  audioContext.cre
4e130 61 74 65 42 75 66 66 65 72 28 31 2c 20 31 32 38  ateBuffer(1, 128
4e140 2c 20 61 75 64 69 6f 43 6f 6e 74 65 78 74 2e 73  , audioContext.s
4e150 61 6d 70 6c 65 52 61 74 65 29 3b 0a 09 20 20 20  ampleRate);..   
4e160 20 20 20 20 20 76 61 72 20 61 72 72 20 3d 20 62       var arr = b
4e170 75 66 66 65 72 2e 67 65 74 43 68 61 6e 6e 65 6c  uffer.getChannel
4e180 44 61 74 61 28 30 29 3b 0a 09 20 20 20 20 20 20  Data(0);..      
4e190 20 20 66 6f 72 20 28 76 61 72 20 69 20 3d 20 30    for (var i = 0
4e1a0 3b 20 69 20 3c 20 61 72 72 2e 6c 65 6e 67 74 68  ; i < arr.length
4e1b0 3b 20 69 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20  ; i++) {..      
4e1c0 20 20 20 20 20 20 61 72 72 5b 69 5d 20 3d 20 30        arr[i] = 0
4e1d0 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20  ;..        }..  
4e1e0 20 20 20 20 20 20 54 6f 6e 65 2e 5a 65 72 6f 2e        Tone.Zero.
4e1f0 5f 7a 65 72 6f 73 20 3d 20 61 75 64 69 6f 43 6f  _zeros = audioCo
4e200 6e 74 65 78 74 2e 63 72 65 61 74 65 42 75 66 66  ntext.createBuff
4e210 65 72 53 6f 75 72 63 65 28 29 3b 0a 09 20 20 20  erSource();..   
4e220 20 20 20 20 20 54 6f 6e 65 2e 5a 65 72 6f 2e 5f       Tone.Zero._
4e230 7a 65 72 6f 73 2e 63 68 61 6e 6e 65 6c 43 6f 75  zeros.channelCou
4e240 6e 74 20 3d 20 31 3b 0a 09 20 20 20 20 20 20 20  nt = 1;..       
4e250 20 54 6f 6e 65 2e 5a 65 72 6f 2e 5f 7a 65 72 6f   Tone.Zero._zero
4e260 73 2e 63 68 61 6e 6e 65 6c 43 6f 75 6e 74 4d 6f  s.channelCountMo
4e270 64 65 20 3d 20 27 65 78 70 6c 69 63 69 74 27 3b  de = 'explicit';
4e280 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 5a  ..        Tone.Z
4e290 65 72 6f 2e 5f 7a 65 72 6f 73 2e 62 75 66 66 65  ero._zeros.buffe
4e2a0 72 20 3d 20 62 75 66 66 65 72 3b 0a 09 20 20 20  r = buffer;..   
4e2b0 20 20 20 20 20 54 6f 6e 65 2e 5a 65 72 6f 2e 5f       Tone.Zero._
4e2c0 7a 65 72 6f 73 2e 6c 6f 6f 70 20 3d 20 74 72 75  zeros.loop = tru
4e2d0 65 3b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65  e;..        Tone
4e2e0 2e 5a 65 72 6f 2e 5f 7a 65 72 6f 73 2e 73 74 61  .Zero._zeros.sta
4e2f0 72 74 28 30 29 3b 0a 09 20 20 20 20 20 20 20 20  rt(0);..        
4e300 54 6f 6e 65 2e 5a 65 72 6f 2e 5f 7a 65 72 6f 73  Tone.Zero._zeros
4e310 2e 6e 6f 47 43 28 29 3b 0a 09 20 20 20 20 7d 29  .noGC();..    })
4e320 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f  ;..    return To
4e330 6e 65 2e 5a 65 72 6f 3b 0a 09 7d 29 3b 0a 09 4d  ne.Zero;..});..M
4e340 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28  odule(function (
4e350 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09 20  Tone) {..    .. 
4e360 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c     /**... *  @cl
4e370 61 73 73 20 20 4c 46 4f 20 73 74 61 6e 64 73 20  ass  LFO stands 
4e380 66 6f 72 20 6c 6f 77 20 66 72 65 71 75 65 6e 63  for low frequenc
4e390 79 20 6f 73 63 69 6c 6c 61 74 6f 72 2e 20 54 6f  y oscillator. To
4e3a0 6e 65 2e 4c 46 4f 20 70 72 6f 64 75 63 65 73 20  ne.LFO produces 
4e3b0 61 6e 20 6f 75 74 70 75 74 20 73 69 67 6e 61 6c  an output signal
4e3c0 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20   ... *          
4e3d0 77 68 69 63 68 20 63 61 6e 20 62 65 20 61 74 74  which can be att
4e3e0 61 63 68 65 64 20 74 6f 20 61 6e 20 41 75 64 69  ached to an Audi
4e3f0 6f 50 61 72 61 6d 20 6f 72 20 54 6f 6e 65 2e 53  oParam or Tone.S
4e400 69 67 6e 61 6c 20 0a 09 09 20 2a 20 20 20 20 20  ignal ... *     
4e410 20 20 20 20 20 69 6e 20 6f 72 64 65 72 20 74 6f       in order to
4e420 20 6d 6f 64 75 6c 61 74 65 20 74 68 61 74 20 70   modulate that p
4e430 61 72 61 6d 65 74 65 72 20 77 69 74 68 20 61 6e  arameter with an
4e440 20 6f 73 63 69 6c 6c 61 74 6f 72 2e 20 54 68 65   oscillator. The
4e450 20 4c 46 4f 20 63 61 6e 20 0a 09 09 20 2a 20 20   LFO can ... *  
4e460 20 20 20 20 20 20 20 20 61 6c 73 6f 20 62 65 20          also be 
4e470 73 79 6e 63 65 64 20 74 6f 20 74 68 65 20 74 72  synced to the tr
4e480 61 6e 73 70 6f 72 74 20 74 6f 20 73 74 61 72 74  ansport to start
4e490 2f 73 74 6f 70 20 61 6e 64 20 63 68 61 6e 67 65  /stop and change
4e4a0 20 77 68 65 6e 20 74 68 65 20 74 65 6d 70 6f 20   when the tempo 
4e4b0 63 68 61 6e 67 65 73 2e 0a 09 09 20 2a 0a 09 09  changes.... *...
4e4c0 20 2a 20 20 40 63 6f 6e 73 74 72 75 63 74 6f 72   *  @constructor
4e4d0 0a 09 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20  ... *  @extends 
4e4e0 7b 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f 72  {Tone.Oscillator
4e4f0 7d 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b  }... *  @param {
4e500 46 72 65 71 75 65 6e 63 79 7c 4f 62 6a 65 63 74  Frequency|Object
4e510 7d 20 5b 66 72 65 71 75 65 6e 63 79 5d 20 54 68  } [frequency] Th
4e520 65 20 66 72 65 71 75 65 6e 63 79 20 6f 66 20 74  e frequency of t
4e530 68 65 20 6f 73 63 69 6c 6c 61 74 69 6f 6e 2e 20  he oscillation. 
4e540 54 79 70 69 63 61 6c 6c 79 2c 20 4c 46 4f 73 20  Typically, LFOs 
4e550 77 69 6c 6c 20 62 65 0a 09 09 20 2a 20 20 20 20  will be... *    
4e560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e570 20 20 20 20 20 20 20 20 20 20 20 69 6e 20 74 68             in th
4e580 65 20 66 72 65 71 75 65 6e 63 79 20 72 61 6e 67  e frequency rang
4e590 65 20 6f 66 20 30 2e 31 20 74 6f 20 31 30 20 68  e of 0.1 to 10 h
4e5a0 65 72 74 7a 2e 20 0a 09 09 20 2a 20 20 40 70 61  ertz. ... *  @pa
4e5b0 72 61 6d 20 7b 6e 75 6d 62 65 72 3d 7d 20 6d 69  ram {number=} mi
4e5c0 6e 20 54 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 75  n The minimum ou
4e5d0 74 70 75 74 20 76 61 6c 75 65 20 6f 66 20 74 68  tput value of th
4e5e0 65 20 4c 46 4f 2e 20 0a 09 09 20 2a 20 20 40 70  e LFO. ... *  @p
4e5f0 61 72 61 6d 20 7b 6e 75 6d 62 65 72 3d 7d 20 6d  aram {number=} m
4e600 61 78 20 54 68 65 20 6d 61 78 69 6d 75 6d 20 76  ax The maximum v
4e610 61 6c 75 65 20 6f 66 20 74 68 65 20 4c 46 4f 2e  alue of the LFO.
4e620 20 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65   ... *  @example
4e630 0a 09 09 20 2a 20 76 61 72 20 6c 66 6f 20 3d 20  ... * var lfo = 
4e640 6e 65 77 20 54 6f 6e 65 2e 4c 46 4f 28 22 34 6e  new Tone.LFO("4n
4e650 22 2c 20 34 30 30 2c 20 34 30 30 30 29 3b 0a 09  ", 400, 4000);..
4e660 09 20 2a 20 6c 66 6f 2e 63 6f 6e 6e 65 63 74 28  . * lfo.connect(
4e670 66 69 6c 74 65 72 2e 66 72 65 71 75 65 6e 63 79  filter.frequency
4e680 29 3b 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  );... */..    To
4e690 6e 65 2e 4c 46 4f 20 3d 20 66 75 6e 63 74 69 6f  ne.LFO = functio
4e6a0 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
4e6b0 76 61 72 20 6f 70 74 69 6f 6e 73 20 3d 20 74 68  var options = th
4e6c0 69 73 2e 6f 70 74 69 6f 6e 73 4f 62 6a 65 63 74  is.optionsObject
4e6d0 28 61 72 67 75 6d 65 6e 74 73 2c 20 5b 0a 09 20  (arguments, [.. 
4e6e0 20 20 20 20 20 20 20 20 20 20 20 27 66 72 65 71             'freq
4e6f0 75 65 6e 63 79 27 2c 0a 09 20 20 20 20 20 20 20  uency',..       
4e700 20 20 20 20 20 27 6d 69 6e 27 2c 0a 09 20 20 20       'min',..   
4e710 20 20 20 20 20 20 20 20 20 27 6d 61 78 27 0a 09           'max'..
4e720 20 20 20 20 20 20 20 20 5d 2c 20 54 6f 6e 65 2e          ], Tone.
4e730 4c 46 4f 2e 64 65 66 61 75 6c 74 73 29 3b 0a 09  LFO.defaults);..
4e740 20 20 20 20 20 20 20 20 2f 2a 2a 20 0a 09 09 09          /** ....
4e750 20 2a 20 20 54 68 65 20 6f 73 63 69 6c 6c 61 74   *  The oscillat
4e760 6f 72 2e 20 0a 09 09 09 20 2a 20 20 40 74 79 70  or. .... *  @typ
4e770 65 20 7b 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74  e {Tone.Oscillat
4e780 6f 72 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76  or}.... *  @priv
4e790 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  ate.... */..    
4e7a0 20 20 20 20 74 68 69 73 2e 5f 6f 73 63 69 6c 6c      this._oscill
4e7b0 61 74 6f 72 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  ator = new Tone.
4e7c0 4f 73 63 69 6c 6c 61 74 6f 72 28 7b 0a 09 20 20  Oscillator({..  
4e7d0 20 20 20 20 20 20 20 20 20 20 27 66 72 65 71 75            'frequ
4e7e0 65 6e 63 79 27 3a 20 6f 70 74 69 6f 6e 73 2e 66  ency': options.f
4e7f0 72 65 71 75 65 6e 63 79 2c 0a 09 20 20 20 20 20  requency,..     
4e800 20 20 20 20 20 20 20 27 74 79 70 65 27 3a 20 6f         'type': o
4e810 70 74 69 6f 6e 73 2e 74 79 70 65 0a 09 20 20 20  ptions.type..   
4e820 20 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 20 20       });..      
4e830 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 74 68 65    /**.... *  the
4e840 20 6c 66 6f 27 73 20 66 72 65 71 75 65 6e 63 79   lfo's frequency
4e850 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 46  .... *  @type {F
4e860 72 65 71 75 65 6e 63 79 7d 0a 09 09 09 20 2a 20  requency}.... * 
4e870 20 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f 0a   @signal.... */.
4e880 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 66 72  .        this.fr
4e890 65 71 75 65 6e 63 79 20 3d 20 74 68 69 73 2e 5f  equency = this._
4e8a0 6f 73 63 69 6c 6c 61 74 6f 72 2e 66 72 65 71 75  oscillator.frequ
4e8b0 65 6e 63 79 3b 0a 09 20 20 20 20 20 20 20 20 2f  ency;..        /
4e8c0 2a 2a 0a 09 09 09 20 2a 20 54 68 65 20 61 6d 70  **.... * The amp
4e8d0 6c 69 74 75 64 65 20 6f 66 20 74 68 65 20 4c 46  litude of the LF
4e8e0 4f 2c 20 77 68 69 63 68 20 63 6f 6e 74 72 6f 6c  O, which control
4e8f0 73 20 74 68 65 20 6f 75 74 70 75 74 20 72 61 6e  s the output ran
4e900 67 65 20 62 65 74 77 65 65 6e 0a 09 09 09 20 2a  ge between.... *
4e910 20 74 68 65 20 6d 69 6e 20 61 6e 64 20 6d 61 78   the min and max
4e920 20 6f 75 74 70 75 74 2e 20 46 6f 72 20 65 78 61   output. For exa
4e930 6d 70 6c 65 20 69 66 20 74 68 65 20 6d 69 6e 20  mple if the min 
4e940 69 73 20 2d 31 30 20 61 6e 64 20 74 68 65 20 6d  is -10 and the m
4e950 61 78 20 0a 09 09 09 20 2a 20 69 73 20 31 30 2c  ax .... * is 10,
4e960 20 73 65 74 74 69 6e 67 20 74 68 65 20 61 6d 70   setting the amp
4e970 6c 69 74 75 64 65 20 74 6f 20 30 2e 35 20 77 6f  litude to 0.5 wo
4e980 75 6c 64 20 6d 61 6b 65 20 74 68 65 20 4c 46 4f  uld make the LFO
4e990 20 6d 6f 64 75 6c 61 74 65 0a 09 09 09 20 2a 20   modulate.... * 
4e9a0 62 65 74 77 65 65 6e 20 2d 35 20 61 6e 64 20 35  between -5 and 5
4e9b0 2e 20 0a 09 09 09 20 2a 20 40 74 79 70 65 20 7b  . .... * @type {
4e9c0 4e 75 6d 62 65 72 7d 0a 09 09 09 20 2a 20 40 73  Number}.... * @s
4e9d0 69 67 6e 61 6c 0a 09 09 09 20 2a 2f 0a 09 20 20  ignal.... */..  
4e9e0 20 20 20 20 20 20 74 68 69 73 2e 61 6d 70 6c 69        this.ampli
4e9f0 74 75 64 65 20 3d 20 74 68 69 73 2e 5f 6f 73 63  tude = this._osc
4ea00 69 6c 6c 61 74 6f 72 2e 76 6f 6c 75 6d 65 3b 0a  illator.volume;.
4ea10 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 61 6d  .        this.am
4ea20 70 6c 69 74 75 64 65 2e 75 6e 69 74 73 20 3d 20  plitude.units = 
4ea30 54 6f 6e 65 2e 54 79 70 65 2e 4e 6f 72 6d 61 6c  Tone.Type.Normal
4ea40 52 61 6e 67 65 3b 0a 09 20 20 20 20 20 20 20 20  Range;..        
4ea50 74 68 69 73 2e 61 6d 70 6c 69 74 75 64 65 2e 76  this.amplitude.v
4ea60 61 6c 75 65 20 3d 20 6f 70 74 69 6f 6e 73 2e 61  alue = options.a
4ea70 6d 70 6c 69 74 75 64 65 3b 0a 09 20 20 20 20 20  mplitude;..     
4ea80 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68     /**.... *  Th
4ea90 65 20 73 69 67 6e 61 6c 20 77 68 69 63 68 20 69  e signal which i
4eaa0 73 20 6f 75 74 70 75 74 20 77 68 65 6e 20 74 68  s output when th
4eab0 65 20 4c 46 4f 20 69 73 20 73 74 6f 70 70 65 64  e LFO is stopped
4eac0 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 20 7b  .... *  @type  {
4ead0 54 6f 6e 65 2e 53 69 67 6e 61 6c 7d 0a 09 09 09  Tone.Signal}....
4eae0 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
4eaf0 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
4eb00 73 2e 5f 73 74 6f 70 70 65 64 53 69 67 6e 61 6c  s._stoppedSignal
4eb10 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53 69 67 6e   = new Tone.Sign
4eb20 61 6c 28 30 2c 20 54 6f 6e 65 2e 54 79 70 65 2e  al(0, Tone.Type.
4eb30 41 75 64 69 6f 52 61 6e 67 65 29 3b 0a 09 20 20  AudioRange);..  
4eb40 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
4eb50 20 4a 75 73 74 20 6f 75 74 70 75 74 73 20 7a 65   Just outputs ze
4eb60 72 6f 73 2e 0a 09 09 09 20 2a 20 20 40 74 79 70  ros..... *  @typ
4eb70 65 20 7b 54 6f 6e 65 2e 5a 65 72 6f 7d 0a 09 09  e {Tone.Zero}...
4eb80 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
4eb90 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
4eba0 69 73 2e 5f 7a 65 72 6f 73 20 3d 20 6e 65 77 20  is._zeros = new 
4ebb0 54 6f 6e 65 2e 5a 65 72 6f 28 29 3b 0a 09 20 20  Tone.Zero();..  
4ebc0 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
4ebd0 20 54 68 65 20 76 61 6c 75 65 20 74 68 61 74 20   The value that 
4ebe0 74 68 65 20 4c 46 4f 20 6f 75 74 70 75 74 73 20  the LFO outputs 
4ebf0 77 68 65 6e 20 69 74 27 73 20 73 74 6f 70 70 65  when it's stoppe
4ec00 64 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b  d.... *  @type {
4ec10 41 75 64 69 6f 52 61 6e 67 65 7d 0a 09 09 09 20  AudioRange}.... 
4ec20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20  *  @private.... 
4ec30 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
4ec40 2e 5f 73 74 6f 70 70 65 64 56 61 6c 75 65 20 3d  ._stoppedValue =
4ec50 20 30 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a   0;..        /**
4ec60 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54  .... *  @type {T
4ec70 6f 6e 65 2e 41 75 64 69 6f 54 6f 47 61 69 6e 7d  one.AudioToGain}
4ec80 20 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74   .... *  @privat
4ec90 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
4eca0 20 20 74 68 69 73 2e 5f 61 32 67 20 3d 20 6e 65    this._a2g = ne
4ecb0 77 20 54 6f 6e 65 2e 41 75 64 69 6f 54 6f 47 61  w Tone.AudioToGa
4ecc0 69 6e 28 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  in();..        /
4ecd0 2a 2a 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  **.... *  @type 
4ece0 7b 54 6f 6e 65 2e 53 63 61 6c 65 7d 20 0a 09 09  {Tone.Scale} ...
4ecf0 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
4ed00 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
4ed10 69 73 2e 5f 73 63 61 6c 65 72 20 3d 20 74 68 69  is._scaler = thi
4ed20 73 2e 6f 75 74 70 75 74 20 3d 20 6e 65 77 20 54  s.output = new T
4ed30 6f 6e 65 2e 53 63 61 6c 65 28 6f 70 74 69 6f 6e  one.Scale(option
4ed40 73 2e 6d 69 6e 2c 20 6f 70 74 69 6f 6e 73 2e 6d  s.min, options.m
4ed50 61 78 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a  ax);..        /*
4ed60 2a 0a 09 09 09 20 2a 20 20 74 68 65 20 75 6e 69  *.... *  the uni
4ed70 74 73 20 6f 66 20 74 68 65 20 4c 46 4f 20 28 75  ts of the LFO (u
4ed80 73 65 64 20 66 6f 72 20 63 6f 6e 76 65 72 74 69  sed for converti
4ed90 6e 67 29 0a 09 09 09 20 2a 20 20 40 74 79 70 65  ng).... *  @type
4eda0 20 7b 54 6f 6e 65 2e 54 79 70 65 7d 20 0a 09 09   {Tone.Type} ...
4edb0 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
4edc0 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
4edd0 69 73 2e 5f 75 6e 69 74 73 20 3d 20 54 6f 6e 65  is._units = Tone
4ede0 2e 54 79 70 65 2e 44 65 66 61 75 6c 74 3b 0a 09  .Type.Default;..
4edf0 20 20 20 20 20 20 20 20 74 68 69 73 2e 75 6e 69          this.uni
4ee00 74 73 20 3d 20 6f 70 74 69 6f 6e 73 2e 75 6e 69  ts = options.uni
4ee10 74 73 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 63  ts;..        //c
4ee20 6f 6e 6e 65 63 74 20 69 74 20 75 70 0a 09 20 20  onnect it up..  
4ee30 20 20 20 20 20 20 74 68 69 73 2e 5f 6f 73 63 69        this._osci
4ee40 6c 6c 61 74 6f 72 2e 63 68 61 69 6e 28 74 68 69  llator.chain(thi
4ee50 73 2e 5f 61 32 67 2c 20 74 68 69 73 2e 5f 73 63  s._a2g, this._sc
4ee60 61 6c 65 72 29 3b 0a 09 20 20 20 20 20 20 20 20  aler);..        
4ee70 74 68 69 73 2e 5f 7a 65 72 6f 73 2e 63 6f 6e 6e  this._zeros.conn
4ee80 65 63 74 28 74 68 69 73 2e 5f 61 32 67 29 3b 0a  ect(this._a2g);.
4ee90 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73  .        this._s
4eea0 74 6f 70 70 65 64 53 69 67 6e 61 6c 2e 63 6f 6e  toppedSignal.con
4eeb0 6e 65 63 74 28 74 68 69 73 2e 5f 61 32 67 29 3b  nect(this._a2g);
4eec0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
4eed0 72 65 61 64 4f 6e 6c 79 28 5b 0a 09 20 20 20 20  readOnly([..    
4eee0 20 20 20 20 20 20 20 20 27 61 6d 70 6c 69 74 75          'amplitu
4eef0 64 65 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20  de',..          
4ef00 20 20 27 66 72 65 71 75 65 6e 63 79 27 0a 09 20    'frequency'.. 
4ef10 20 20 20 20 20 20 20 5d 29 3b 0a 09 20 20 20 20         ]);..    
4ef20 20 20 20 20 74 68 69 73 2e 70 68 61 73 65 20 3d      this.phase =
4ef30 20 6f 70 74 69 6f 6e 73 2e 70 68 61 73 65 3b 0a   options.phase;.
4ef40 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e  .    };..    Ton
4ef50 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 4c 46  e.extend(Tone.LF
4ef60 4f 2c 20 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74  O, Tone.Oscillat
4ef70 6f 72 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09  or);..    /**...
4ef80 20 2a 20 20 74 68 65 20 64 65 66 61 75 6c 74 20   *  the default 
4ef90 70 61 72 61 6d 65 74 65 72 73 0a 09 09 20 2a 0a  parameters... *.
4efa0 09 09 20 2a 20 20 40 73 74 61 74 69 63 0a 09 09  .. *  @static...
4efb0 20 2a 20 20 40 63 6f 6e 73 74 0a 09 09 20 2a 20   *  @const... * 
4efc0 20 40 74 79 70 65 20 7b 4f 62 6a 65 63 74 7d 0a   @type {Object}.
4efd0 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
4efe0 4c 46 4f 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b  LFO.defaults = {
4eff0 0a 09 20 20 20 20 20 20 20 20 27 74 79 70 65 27  ..        'type'
4f000 3a 20 27 73 69 6e 65 27 2c 0a 09 20 20 20 20 20  : 'sine',..     
4f010 20 20 20 27 6d 69 6e 27 3a 20 30 2c 0a 09 20 20     'min': 0,..  
4f020 20 20 20 20 20 20 27 6d 61 78 27 3a 20 31 2c 0a        'max': 1,.
4f030 09 20 20 20 20 20 20 20 20 27 70 68 61 73 65 27  .        'phase'
4f040 3a 20 30 2c 0a 09 20 20 20 20 20 20 20 20 27 66  : 0,..        'f
4f050 72 65 71 75 65 6e 63 79 27 3a 20 27 34 6e 27 2c  requency': '4n',
4f060 0a 09 20 20 20 20 20 20 20 20 27 61 6d 70 6c 69  ..        'ampli
4f070 74 75 64 65 27 3a 20 31 2c 0a 09 20 20 20 20 20  tude': 1,..     
4f080 20 20 20 27 75 6e 69 74 73 27 3a 20 54 6f 6e 65     'units': Tone
4f090 2e 54 79 70 65 2e 44 65 66 61 75 6c 74 0a 09 20  .Type.Default.. 
4f0a0 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09     };..    /**..
4f0b0 09 20 2a 20 20 53 74 61 72 74 20 74 68 65 20 4c  . *  Start the L
4f0c0 46 4f 2e 20 0a 09 09 20 2a 20 20 40 70 61 72 61  FO. ... *  @para
4f0d0 6d 20 20 7b 54 69 6d 65 7d 20 5b 74 69 6d 65 3d  m  {Time} [time=
4f0e0 6e 6f 77 5d 20 74 68 65 20 74 69 6d 65 20 74 68  now] the time th
4f0f0 65 20 4c 46 4f 20 77 69 6c 6c 20 73 74 61 72 74  e LFO will start
4f100 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20  ... *  @returns 
4f110 7b 54 6f 6e 65 2e 4c 46 4f 7d 20 74 68 69 73 0a  {Tone.LFO} this.
4f120 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
4f130 4c 46 4f 2e 70 72 6f 74 6f 74 79 70 65 2e 73 74  LFO.prototype.st
4f140 61 72 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  art = function (
4f150 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20 20  time) {..       
4f160 20 74 69 6d 65 20 3d 20 74 68 69 73 2e 74 6f 53   time = this.toS
4f170 65 63 6f 6e 64 73 28 74 69 6d 65 29 3b 0a 09 20  econds(time);.. 
4f180 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 74 6f         this._sto
4f190 70 70 65 64 53 69 67 6e 61 6c 2e 73 65 74 56 61  ppedSignal.setVa
4f1a0 6c 75 65 41 74 54 69 6d 65 28 30 2c 20 74 69 6d  lueAtTime(0, tim
4f1b0 65 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  e);..        thi
4f1c0 73 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72 2e 73 74  s._oscillator.st
4f1d0 61 72 74 28 74 69 6d 65 29 3b 0a 09 20 20 20 20  art(time);..    
4f1e0 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b      return this;
4f1f0 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
4f200 2a 0a 09 09 20 2a 20 20 53 74 6f 70 20 74 68 65  *... *  Stop the
4f210 20 4c 46 4f 2e 20 0a 09 09 20 2a 20 20 40 70 61   LFO. ... *  @pa
4f220 72 61 6d 20 20 7b 54 69 6d 65 7d 20 5b 74 69 6d  ram  {Time} [tim
4f230 65 3d 6e 6f 77 5d 20 74 68 65 20 74 69 6d 65 20  e=now] the time 
4f240 74 68 65 20 4c 46 4f 20 77 69 6c 6c 20 73 74 6f  the LFO will sto
4f250 70 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73  p... *  @returns
4f260 20 7b 54 6f 6e 65 2e 4c 46 4f 7d 20 74 68 69 73   {Tone.LFO} this
4f270 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
4f280 2e 4c 46 4f 2e 70 72 6f 74 6f 74 79 70 65 2e 73  .LFO.prototype.s
4f290 74 6f 70 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  top = function (
4f2a0 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20 20  time) {..       
4f2b0 20 74 69 6d 65 20 3d 20 74 68 69 73 2e 74 6f 53   time = this.toS
4f2c0 65 63 6f 6e 64 73 28 74 69 6d 65 29 3b 0a 09 20  econds(time);.. 
4f2d0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 74 6f         this._sto
4f2e0 70 70 65 64 53 69 67 6e 61 6c 2e 73 65 74 56 61  ppedSignal.setVa
4f2f0 6c 75 65 41 74 54 69 6d 65 28 74 68 69 73 2e 5f  lueAtTime(this._
4f300 73 74 6f 70 70 65 64 56 61 6c 75 65 2c 20 74 69  stoppedValue, ti
4f310 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  me);..        th
4f320 69 73 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72 2e 73  is._oscillator.s
4f330 74 6f 70 28 74 69 6d 65 29 3b 0a 09 20 20 20 20  top(time);..    
4f340 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b      return this;
4f350 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
4f360 2a 0a 09 09 20 2a 20 20 53 79 6e 63 20 74 68 65  *... *  Sync the
4f370 20 73 74 61 72 74 2f 73 74 6f 70 2f 70 61 75 73   start/stop/paus
4f380 65 20 74 6f 20 74 68 65 20 74 72 61 6e 73 70 6f  e to the transpo
4f390 72 74 20 0a 09 09 20 2a 20 20 61 6e 64 20 74 68  rt ... *  and th
4f3a0 65 20 66 72 65 71 75 65 6e 63 79 20 74 6f 20 74  e frequency to t
4f3b0 68 65 20 62 70 6d 20 6f 66 20 74 68 65 20 74 72  he bpm of the tr
4f3c0 61 6e 73 70 6f 72 74 0a 09 09 20 2a 20 20 40 72  ansport... *  @r
4f3d0 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 4c 46 4f  eturns {Tone.LFO
4f3e0 7d 20 74 68 69 73 0a 09 09 20 2a 20 20 40 65 78  } this... *  @ex
4f3f0 61 6d 70 6c 65 0a 09 09 20 2a 20 20 6c 66 6f 2e  ample... *  lfo.
4f400 66 72 65 71 75 65 6e 63 79 2e 76 61 6c 75 65 20  frequency.value 
4f410 3d 20 22 38 6e 22 3b 0a 09 09 20 2a 20 20 6c 66  = "8n";... *  lf
4f420 6f 2e 73 79 6e 63 28 29 2e 73 74 61 72 74 28 30  o.sync().start(0
4f430 29 0a 09 09 20 2a 20 20 2f 2f 74 68 65 20 72 61  )... *  //the ra
4f440 74 65 20 6f 66 20 74 68 65 20 4c 46 4f 20 77 69  te of the LFO wi
4f450 6c 6c 20 61 6c 77 61 79 73 20 62 65 20 61 6e 20  ll always be an 
4f460 65 69 67 68 74 68 20 6e 6f 74 65 2c 20 0a 09 09  eighth note, ...
4f470 20 2a 20 20 2f 2f 65 76 65 6e 20 61 73 20 74 68   *  //even as th
4f480 65 20 74 65 6d 70 6f 20 63 68 61 6e 67 65 73 0a  e tempo changes.
4f490 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
4f4a0 4c 46 4f 2e 70 72 6f 74 6f 74 79 70 65 2e 73 79  LFO.prototype.sy
4f4b0 6e 63 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  nc = function ()
4f4c0 20 7b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73   {..        this
4f4d0 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72 2e 73 79 6e  ._oscillator.syn
4f4e0 63 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  c();..        th
4f4f0 69 73 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72 2e 73  is._oscillator.s
4f500 79 6e 63 46 72 65 71 75 65 6e 63 79 28 29 3b 0a  yncFrequency();.
4f510 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
4f520 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20  this;..    };.. 
4f530 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 75 6e 73     /**... *  uns
4f540 79 6e 63 20 74 68 65 20 4c 46 4f 20 66 72 6f 6d  ync the LFO from
4f550 20 74 72 61 6e 73 70 6f 72 74 20 63 6f 6e 74 72   transport contr
4f560 6f 6c 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e  ol... *  @return
4f570 73 20 7b 54 6f 6e 65 2e 4c 46 4f 7d 20 74 68 69  s {Tone.LFO} thi
4f580 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  s... */..    Ton
4f590 65 2e 4c 46 4f 2e 70 72 6f 74 6f 74 79 70 65 2e  e.LFO.prototype.
4f5a0 75 6e 73 79 6e 63 20 3d 20 66 75 6e 63 74 69 6f  unsync = functio
4f5b0 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
4f5c0 74 68 69 73 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72  this._oscillator
4f5d0 2e 75 6e 73 79 6e 63 28 29 3b 0a 09 20 20 20 20  .unsync();..    
4f5e0 20 20 20 20 74 68 69 73 2e 5f 6f 73 63 69 6c 6c      this._oscill
4f5f0 61 74 6f 72 2e 75 6e 73 79 6e 63 46 72 65 71 75  ator.unsyncFrequ
4f600 65 6e 63 79 28 29 3b 0a 09 20 20 20 20 20 20 20  ency();..       
4f610 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20   return this;.. 
4f620 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09     };..    /**..
4f630 09 20 2a 20 54 68 65 20 6d 69 6e 69 75 6d 75 6d  . * The miniumum
4f640 20 6f 75 74 70 75 74 20 6f 66 20 74 68 65 20 4c   output of the L
4f650 46 4f 2e 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72  FO.... * @member
4f660 4f 66 20 54 6f 6e 65 2e 4c 46 4f 23 0a 09 09 20  Of Tone.LFO#... 
4f670 2a 20 40 74 79 70 65 20 7b 6e 75 6d 62 65 72 7d  * @type {number}
4f680 0a 09 09 20 2a 20 40 6e 61 6d 65 20 6d 69 6e 0a  ... * @name min.
4f690 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63  .. */..    Objec
4f6a0 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79  t.defineProperty
4f6b0 28 54 6f 6e 65 2e 4c 46 4f 2e 70 72 6f 74 6f 74  (Tone.LFO.protot
4f6c0 79 70 65 2c 20 27 6d 69 6e 27 2c 20 7b 0a 09 20  ype, 'min', {.. 
4f6d0 20 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63         get: func
4f6e0 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
4f6f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
4f700 69 73 2e 5f 74 6f 55 6e 69 74 73 28 74 68 69 73  is._toUnits(this
4f710 2e 5f 73 63 61 6c 65 72 2e 6d 69 6e 29 3b 0a 09  ._scaler.min);..
4f720 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20          },..    
4f730 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f      set: functio
4f740 6e 20 28 6d 69 6e 29 20 7b 0a 09 20 20 20 20 20  n (min) {..     
4f750 20 20 20 20 20 20 20 6d 69 6e 20 3d 20 74 68 69         min = thi
4f760 73 2e 5f 66 72 6f 6d 55 6e 69 74 73 28 6d 69 6e  s._fromUnits(min
4f770 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4f780 74 68 69 73 2e 5f 73 63 61 6c 65 72 2e 6d 69 6e  this._scaler.min
4f790 20 3d 20 6d 69 6e 3b 0a 09 20 20 20 20 20 20 20   = min;..       
4f7a0 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20   }..    });..   
4f7b0 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65 20 6d 61   /**... * The ma
4f7c0 78 69 6d 75 6d 20 6f 75 74 70 75 74 20 6f 66 20  ximum output of 
4f7d0 74 68 65 20 4c 46 4f 2e 0a 09 09 20 2a 20 40 6d  the LFO.... * @m
4f7e0 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 4c 46 4f  emberOf Tone.LFO
4f7f0 23 0a 09 09 20 2a 20 40 74 79 70 65 20 7b 6e 75  #... * @type {nu
4f800 6d 62 65 72 7d 0a 09 09 20 2a 20 40 6e 61 6d 65  mber}... * @name
4f810 20 6d 61 78 0a 09 09 20 2a 2f 0a 09 20 20 20 20   max... */..    
4f820 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f  Object.definePro
4f830 70 65 72 74 79 28 54 6f 6e 65 2e 4c 46 4f 2e 70  perty(Tone.LFO.p
4f840 72 6f 74 6f 74 79 70 65 2c 20 27 6d 61 78 27 2c  rototype, 'max',
4f850 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a   {..        get:
4f860 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
4f870 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4f880 72 6e 20 74 68 69 73 2e 5f 74 6f 55 6e 69 74 73  rn this._toUnits
4f890 28 74 68 69 73 2e 5f 73 63 61 6c 65 72 2e 6d 61  (this._scaler.ma
4f8a0 78 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a  x);..        },.
4f8b0 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66 75  .        set: fu
4f8c0 6e 63 74 69 6f 6e 20 28 6d 61 78 29 20 7b 0a 09  nction (max) {..
4f8d0 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 20              max 
4f8e0 3d 20 74 68 69 73 2e 5f 66 72 6f 6d 55 6e 69 74  = this._fromUnit
4f8f0 73 28 6d 61 78 29 3b 0a 09 20 20 20 20 20 20 20  s(max);..       
4f900 20 20 20 20 20 74 68 69 73 2e 5f 73 63 61 6c 65       this._scale
4f910 72 2e 6d 61 78 20 3d 20 6d 61 78 3b 0a 09 20 20  r.max = max;..  
4f920 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b        }..    });
4f930 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54  ..    /**... * T
4f940 68 65 20 74 79 70 65 20 6f 66 20 74 68 65 20 6f  he type of the o
4f950 73 63 69 6c 6c 61 74 6f 72 3a 20 73 69 6e 65 2c  scillator: sine,
4f960 20 73 71 75 61 72 65 2c 20 73 61 77 74 6f 6f 74   square, sawtoot
4f970 68 2c 20 74 72 69 61 6e 67 6c 65 2e 20 0a 09 09  h, triangle. ...
4f980 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e   * @memberOf Ton
4f990 65 2e 4c 46 4f 23 0a 09 09 20 2a 20 40 74 79 70  e.LFO#... * @typ
4f9a0 65 20 7b 73 74 72 69 6e 67 7d 0a 09 09 20 2a 20  e {string}... * 
4f9b0 40 6e 61 6d 65 20 74 79 70 65 0a 09 09 20 2a 2f  @name type... */
4f9c0 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66  ..    Object.def
4f9d0 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65  ineProperty(Tone
4f9e0 2e 4c 46 4f 2e 70 72 6f 74 6f 74 79 70 65 2c 20  .LFO.prototype, 
4f9f0 27 74 79 70 65 27 2c 20 7b 0a 09 20 20 20 20 20  'type', {..     
4fa00 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e     get: function
4fa10 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20   () {..         
4fa20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f     return this._
4fa30 6f 73 63 69 6c 6c 61 74 6f 72 2e 74 79 70 65 3b  oscillator.type;
4fa40 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20  ..        },..  
4fa50 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74        set: funct
4fa60 69 6f 6e 20 28 74 79 70 65 29 20 7b 0a 09 20 20  ion (type) {..  
4fa70 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
4fa80 6f 73 63 69 6c 6c 61 74 6f 72 2e 74 79 70 65 20  oscillator.type 
4fa90 3d 20 74 79 70 65 3b 0a 09 20 20 20 20 20 20 20  = type;..       
4faa0 20 20 20 20 20 74 68 69 73 2e 5f 73 74 6f 70 70       this._stopp
4fab0 65 64 56 61 6c 75 65 20 3d 20 74 68 69 73 2e 5f  edValue = this._
4fac0 6f 73 63 69 6c 6c 61 74 6f 72 2e 5f 67 65 74 49  oscillator._getI
4fad0 6e 69 74 69 61 6c 56 61 6c 75 65 28 29 3b 0a 09  nitialValue();..
4fae0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
4faf0 2e 5f 73 74 6f 70 70 65 64 53 69 67 6e 61 6c 2e  ._stoppedSignal.
4fb00 76 61 6c 75 65 20 3d 20 74 68 69 73 2e 5f 73 74  value = this._st
4fb10 6f 70 70 65 64 56 61 6c 75 65 3b 0a 09 20 20 20  oppedValue;..   
4fb20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a       }..    });.
4fb30 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68  .    /**... * Th
4fb40 65 20 70 68 61 73 65 20 6f 66 20 74 68 65 20 4c  e phase of the L
4fb50 46 4f 2e 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72  FO.... * @member
4fb60 4f 66 20 54 6f 6e 65 2e 4c 46 4f 23 0a 09 09 20  Of Tone.LFO#... 
4fb70 2a 20 40 74 79 70 65 20 7b 6e 75 6d 62 65 72 7d  * @type {number}
4fb80 0a 09 09 20 2a 20 40 6e 61 6d 65 20 70 68 61 73  ... * @name phas
4fb90 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a  e... */..    Obj
4fba0 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72  ect.defineProper
4fbb0 74 79 28 54 6f 6e 65 2e 4c 46 4f 2e 70 72 6f 74  ty(Tone.LFO.prot
4fbc0 6f 74 79 70 65 2c 20 27 70 68 61 73 65 27 2c 20  otype, 'phase', 
4fbd0 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a 20  {..        get: 
4fbe0 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
4fbf0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
4fc00 6e 20 74 68 69 73 2e 5f 6f 73 63 69 6c 6c 61 74  n this._oscillat
4fc10 6f 72 2e 70 68 61 73 65 3b 0a 09 20 20 20 20 20  or.phase;..     
4fc20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73     },..        s
4fc30 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 70 68  et: function (ph
4fc40 61 73 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ase) {..        
4fc50 20 20 20 20 74 68 69 73 2e 5f 6f 73 63 69 6c 6c      this._oscill
4fc60 61 74 6f 72 2e 70 68 61 73 65 20 3d 20 70 68 61  ator.phase = pha
4fc70 73 65 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  se;..           
4fc80 20 74 68 69 73 2e 5f 73 74 6f 70 70 65 64 56 61   this._stoppedVa
4fc90 6c 75 65 20 3d 20 74 68 69 73 2e 5f 6f 73 63 69  lue = this._osci
4fca0 6c 6c 61 74 6f 72 2e 5f 67 65 74 49 6e 69 74 69  llator._getIniti
4fcb0 61 6c 56 61 6c 75 65 28 29 3b 0a 09 20 20 20 20  alValue();..    
4fcc0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 74          this._st
4fcd0 6f 70 70 65 64 53 69 67 6e 61 6c 2e 76 61 6c 75  oppedSignal.valu
4fce0 65 20 3d 20 74 68 69 73 2e 5f 73 74 6f 70 70 65  e = this._stoppe
4fcf0 64 56 61 6c 75 65 3b 0a 09 20 20 20 20 20 20 20  dValue;..       
4fd00 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20   }..    });..   
4fd10 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65 20 6f 75   /**... * The ou
4fd20 74 70 75 74 20 75 6e 69 74 73 20 6f 66 20 74 68  tput units of th
4fd30 65 20 4c 46 4f 2e 0a 09 09 20 2a 20 40 6d 65 6d  e LFO.... * @mem
4fd40 62 65 72 4f 66 20 54 6f 6e 65 2e 4c 46 4f 23 0a  berOf Tone.LFO#.
4fd50 09 09 20 2a 20 40 74 79 70 65 20 7b 54 6f 6e 65  .. * @type {Tone
4fd60 2e 54 79 70 65 7d 0a 09 09 20 2a 20 40 6e 61 6d  .Type}... * @nam
4fd70 65 20 75 6e 69 74 73 0a 09 09 20 2a 2f 0a 09 20  e units... */.. 
4fd80 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65     Object.define
4fd90 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 4c 46  Property(Tone.LF
4fda0 4f 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 75 6e  O.prototype, 'un
4fdb0 69 74 73 27 2c 20 7b 0a 09 20 20 20 20 20 20 20  its', {..       
4fdc0 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   get: function (
4fdd0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
4fde0 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 75 6e   return this._un
4fdf0 69 74 73 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c  its;..        },
4fe00 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66  ..        set: f
4fe10 75 6e 63 74 69 6f 6e 20 28 76 61 6c 29 20 7b 0a  unction (val) {.
4fe20 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72  .            var
4fe30 20 63 75 72 72 65 6e 74 4d 69 6e 20 3d 20 74 68   currentMin = th
4fe40 69 73 2e 6d 69 6e 3b 0a 09 20 20 20 20 20 20 20  is.min;..       
4fe50 20 20 20 20 20 76 61 72 20 63 75 72 72 65 6e 74       var current
4fe60 4d 61 78 20 3d 20 74 68 69 73 2e 6d 61 78 3b 0a  Max = this.max;.
4fe70 09 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 63  .            //c
4fe80 6f 6e 76 65 72 74 20 74 68 65 20 6d 69 6e 20 61  onvert the min a
4fe90 6e 64 20 74 68 65 20 6d 61 78 0a 09 20 20 20 20  nd the max..    
4fea0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 75 6e          this._un
4feb0 69 74 73 20 3d 20 76 61 6c 3b 0a 09 20 20 20 20  its = val;..    
4fec0 20 20 20 20 20 20 20 20 74 68 69 73 2e 6d 69 6e          this.min
4fed0 20 3d 20 63 75 72 72 65 6e 74 4d 69 6e 3b 0a 09   = currentMin;..
4fee0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
4fef0 2e 6d 61 78 20 3d 20 63 75 72 72 65 6e 74 4d 61  .max = currentMa
4ff00 78 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  x;..        }.. 
4ff10 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a     });..    /**.
4ff20 09 09 20 2a 20 4d 75 74 65 20 74 68 65 20 6f 75  .. * Mute the ou
4ff30 74 70 75 74 2e 20 0a 09 09 20 2a 20 40 6d 65 6d  tput. ... * @mem
4ff40 62 65 72 4f 66 20 54 6f 6e 65 2e 4c 46 4f 23 0a  berOf Tone.LFO#.
4ff50 09 09 20 2a 20 40 74 79 70 65 20 7b 42 6f 6f 6c  .. * @type {Bool
4ff60 65 61 6e 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20  ean}... * @name 
4ff70 6d 75 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20  mute... */..    
4ff80 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f  Object.definePro
4ff90 70 65 72 74 79 28 54 6f 6e 65 2e 4c 46 4f 2e 70  perty(Tone.LFO.p
4ffa0 72 6f 74 6f 74 79 70 65 2c 20 27 6d 75 74 65 27  rototype, 'mute'
4ffb0 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74  , {..        get
4ffc0 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  : function () {.
4ffd0 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
4ffe0 75 72 6e 20 74 68 69 73 2e 5f 6f 73 63 69 6c 6c  urn this._oscill
4fff0 61 74 6f 72 2e 6d 75 74 65 3b 0a 09 20 20 20 20  ator.mute;..    
50000 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20      },..        
50010 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 6d  set: function (m
50020 75 74 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ute) {..        
50030 20 20 20 20 74 68 69 73 2e 5f 6f 73 63 69 6c 6c      this._oscill
50040 61 74 6f 72 2e 6d 75 74 65 20 3d 20 6d 75 74 65  ator.mute = mute
50050 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20  ;..        }..  
50060 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09    });..    /**..
50070 09 20 2a 20 20 52 65 74 75 72 6e 73 20 74 68 65  . *  Returns the
50080 20 70 6c 61 79 62 61 63 6b 20 73 74 61 74 65 20   playback state 
50090 6f 66 20 74 68 65 20 73 6f 75 72 63 65 2c 20 65  of the source, e
500a0 69 74 68 65 72 20 22 73 74 61 72 74 65 64 22 20  ither "started" 
500b0 6f 72 20 22 73 74 6f 70 70 65 64 22 2e 0a 09 09  or "stopped"....
500c0 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e   *  @type {Tone.
500d0 53 74 61 74 65 7d 0a 09 09 20 2a 20 20 40 72 65  State}... *  @re
500e0 61 64 4f 6e 6c 79 0a 09 09 20 2a 20 20 40 6d 65  adOnly... *  @me
500f0 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 4c 46 4f 23  mberOf Tone.LFO#
50100 0a 09 09 20 2a 20 20 40 6e 61 6d 65 20 73 74 61  ... *  @name sta
50110 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62  te... */..    Ob
50120 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65  ject.definePrope
50130 72 74 79 28 54 6f 6e 65 2e 4c 46 4f 2e 70 72 6f  rty(Tone.LFO.pro
50140 74 6f 74 79 70 65 2c 20 27 73 74 61 74 65 27 2c  totype, 'state',
50150 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a   {..        get:
50160 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
50170 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
50180 72 6e 20 74 68 69 73 2e 5f 6f 73 63 69 6c 6c 61  rn this._oscilla
50190 74 6f 72 2e 73 74 61 74 65 3b 0a 09 20 20 20 20  tor.state;..    
501a0 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09      }..    });..
501b0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 6f      /**... *  Co
501c0 6e 6e 65 63 74 20 74 68 65 20 6f 75 74 70 75 74  nnect the output
501d0 20 6f 66 20 74 68 65 20 4c 46 4f 20 74 6f 20 61   of the LFO to a
501e0 6e 20 41 75 64 69 6f 50 61 72 61 6d 2c 20 41 75  n AudioParam, Au
501f0 64 69 6f 4e 6f 64 65 2c 20 6f 72 20 54 6f 6e 65  dioNode, or Tone
50200 20 4e 6f 64 65 2e 20 0a 09 09 20 2a 20 20 54 6f   Node. ... *  To
50210 6e 65 2e 4c 46 4f 20 77 69 6c 6c 20 61 75 74 6f  ne.LFO will auto
50220 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6e 76 65 72  matically conver
50230 74 20 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61  t to the destina
50240 74 69 6f 6e 20 75 6e 69 74 73 20 6f 66 20 74 68  tion units of th
50250 65 20 0a 09 09 20 2a 20 20 77 69 6c 6c 20 67 65  e ... *  will ge
50260 74 20 74 68 65 20 75 6e 69 74 73 20 66 72 6f 6d  t the units from
50270 20 74 68 65 20 63 6f 6e 6e 65 63 74 65 64 20 6e   the connected n
50280 6f 64 65 2e 0a 09 09 20 2a 20 20 40 70 61 72 61  ode.... *  @para
50290 6d 20 20 7b 54 6f 6e 65 20 7c 20 41 75 64 69 6f  m  {Tone | Audio
502a0 50 61 72 61 6d 20 7c 20 41 75 64 69 6f 4e 6f 64  Param | AudioNod
502b0 65 7d 20 6e 6f 64 65 20 0a 09 09 20 2a 20 20 40  e} node ... *  @
502c0 70 61 72 61 6d 20 7b 6e 75 6d 62 65 72 7d 20 5b  param {number} [
502d0 6f 75 74 70 75 74 4e 75 6d 3d 30 5d 20 6f 70 74  outputNum=0] opt
502e0 69 6f 6e 61 6c 6c 79 20 77 68 69 63 68 20 6f 75  ionally which ou
502f0 74 70 75 74 20 74 6f 20 63 6f 6e 6e 65 63 74 20  tput to connect 
50300 66 72 6f 6d 0a 09 09 20 2a 20 20 40 70 61 72 61  from... *  @para
50310 6d 20 7b 6e 75 6d 62 65 72 7d 20 5b 69 6e 70 75  m {number} [inpu
50320 74 4e 75 6d 3d 30 5d 20 6f 70 74 69 6f 6e 61 6c  tNum=0] optional
50330 6c 79 20 77 68 69 63 68 20 69 6e 70 75 74 20 74  ly which input t
50340 6f 20 63 6f 6e 6e 65 63 74 20 74 6f 0a 09 09 20  o connect to... 
50350 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e  *  @returns {Ton
50360 65 2e 4c 46 4f 7d 20 74 68 69 73 0a 09 09 20 2a  e.LFO} this... *
50370 20 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f    @private... */
50380 0a 09 20 20 20 20 54 6f 6e 65 2e 4c 46 4f 2e 70  ..    Tone.LFO.p
50390 72 6f 74 6f 74 79 70 65 2e 63 6f 6e 6e 65 63 74  rototype.connect
503a0 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 6e 6f 64   = function (nod
503b0 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 69 66  e) {..        if
503c0 20 28 6e 6f 64 65 2e 63 6f 6e 73 74 72 75 63 74   (node.construct
503d0 6f 72 20 3d 3d 3d 20 54 6f 6e 65 2e 53 69 67 6e  or === Tone.Sign
503e0 61 6c 20 7c 7c 20 6e 6f 64 65 2e 63 6f 6e 73 74  al || node.const
503f0 72 75 63 74 6f 72 20 3d 3d 3d 20 54 6f 6e 65 2e  ructor === Tone.
50400 50 61 72 61 6d 20 7c 7c 20 6e 6f 64 65 2e 63 6f  Param || node.co
50410 6e 73 74 72 75 63 74 6f 72 20 3d 3d 3d 20 54 6f  nstructor === To
50420 6e 65 2e 54 69 6d 65 6c 69 6e 65 53 69 67 6e 61  ne.TimelineSigna
50430 6c 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  l) {..          
50440 20 20 74 68 69 73 2e 63 6f 6e 76 65 72 74 20 3d    this.convert =
50450 20 6e 6f 64 65 2e 63 6f 6e 76 65 72 74 3b 0a 09   node.convert;..
50460 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
50470 2e 75 6e 69 74 73 20 3d 20 6e 6f 64 65 2e 75 6e  .units = node.un
50480 69 74 73 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a  its;..        }.
50490 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 53 69  .        Tone.Si
504a0 67 6e 61 6c 2e 70 72 6f 74 6f 74 79 70 65 2e 63  gnal.prototype.c
504b0 6f 6e 6e 65 63 74 2e 61 70 70 6c 79 28 74 68 69  onnect.apply(thi
504c0 73 2c 20 61 72 67 75 6d 65 6e 74 73 29 3b 0a 09  s, arguments);..
504d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
504e0 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  his;..    };..  
504f0 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 70 72 69 76    /**... *  priv
50500 61 74 65 20 6d 65 74 68 6f 64 20 62 6f 72 72 6f  ate method borro
50510 77 65 64 20 66 72 6f 6d 20 50 61 72 61 6d 20 63  wed from Param c
50520 6f 6e 76 65 72 74 73 20 0a 09 09 20 2a 20 20 75  onverts ... *  u
50530 6e 69 74 73 20 66 72 6f 6d 20 74 68 65 69 72 20  nits from their 
50540 64 65 73 74 69 6e 61 74 69 6f 6e 20 76 61 6c 75  destination valu
50550 65 0a 09 09 20 2a 20 20 40 66 75 6e 63 74 69 6f  e... *  @functio
50560 6e 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  n... *  @private
50570 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
50580 2e 4c 46 4f 2e 70 72 6f 74 6f 74 79 70 65 2e 5f  .LFO.prototype._
50590 66 72 6f 6d 55 6e 69 74 73 20 3d 20 54 6f 6e 65  fromUnits = Tone
505a0 2e 50 61 72 61 6d 2e 70 72 6f 74 6f 74 79 70 65  .Param.prototype
505b0 2e 5f 66 72 6f 6d 55 6e 69 74 73 3b 0a 09 20 20  ._fromUnits;..  
505c0 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 70 72 69 76    /**... *  priv
505d0 61 74 65 20 6d 65 74 68 6f 64 20 62 6f 72 72 6f  ate method borro
505e0 77 65 64 20 66 72 6f 6d 20 50 61 72 61 6d 20 63  wed from Param c
505f0 6f 6e 76 65 72 74 73 20 0a 09 09 20 2a 20 20 75  onverts ... *  u
50600 6e 69 74 73 20 74 6f 20 74 68 65 69 72 20 64 65  nits to their de
50610 73 74 69 6e 61 74 69 6f 6e 20 76 61 6c 75 65 0a  stination value.
50620 09 09 20 2a 20 20 40 66 75 6e 63 74 69 6f 6e 0a  .. *  @function.
50630 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
50640 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4c  . */..    Tone.L
50650 46 4f 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 74 6f  FO.prototype._to
50660 55 6e 69 74 73 20 3d 20 54 6f 6e 65 2e 50 61 72  Units = Tone.Par
50670 61 6d 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 74 6f  am.prototype._to
50680 55 6e 69 74 73 3b 0a 09 20 20 20 20 2f 2a 2a 0a  Units;..    /**.
50690 09 09 20 2a 20 20 64 69 73 63 6f 6e 6e 65 63 74  .. *  disconnect
506a0 20 61 6e 64 20 64 69 73 70 6f 73 65 0a 09 09 20   and dispose... 
506b0 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e  *  @returns {Ton
506c0 65 2e 4c 46 4f 7d 20 74 68 69 73 0a 09 09 20 2a  e.LFO} this... *
506d0 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4c 46 4f 2e  /..    Tone.LFO.
506e0 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73  prototype.dispos
506f0 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  e = function () 
50700 7b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e  {..        Tone.
50710 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73  prototype.dispos
50720 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20  e.call(this);.. 
50730 20 20 20 20 20 20 20 74 68 69 73 2e 5f 77 72 69         this._wri
50740 74 61 62 6c 65 28 5b 0a 09 20 20 20 20 20 20 20  table([..       
50750 20 20 20 20 20 27 61 6d 70 6c 69 74 75 64 65 27       'amplitude'
50760 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
50770 66 72 65 71 75 65 6e 63 79 27 0a 09 20 20 20 20  frequency'..    
50780 20 20 20 20 5d 29 3b 0a 09 20 20 20 20 20 20 20      ]);..       
50790 20 74 68 69 73 2e 5f 6f 73 63 69 6c 6c 61 74 6f   this._oscillato
507a0 72 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20  r.dispose();..  
507b0 20 20 20 20 20 20 74 68 69 73 2e 5f 6f 73 63 69        this._osci
507c0 6c 6c 61 74 6f 72 20 3d 20 6e 75 6c 6c 3b 0a 09  llator = null;..
507d0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 74          this._st
507e0 6f 70 70 65 64 53 69 67 6e 61 6c 2e 64 69 73 70  oppedSignal.disp
507f0 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ose();..        
50800 74 68 69 73 2e 5f 73 74 6f 70 70 65 64 53 69 67  this._stoppedSig
50810 6e 61 6c 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  nal = null;..   
50820 20 20 20 20 20 74 68 69 73 2e 5f 7a 65 72 6f 73       this._zeros
50830 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20  .dispose();..   
50840 20 20 20 20 20 74 68 69 73 2e 5f 7a 65 72 6f 73       this._zeros
50850 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
50860 20 20 74 68 69 73 2e 5f 73 63 61 6c 65 72 2e 64    this._scaler.d
50870 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20  ispose();..     
50880 20 20 20 74 68 69 73 2e 5f 73 63 61 6c 65 72 20     this._scaler 
50890 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
508a0 20 74 68 69 73 2e 5f 61 32 67 2e 64 69 73 70 6f   this._a2g.dispo
508b0 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74  se();..        t
508c0 68 69 73 2e 5f 61 32 67 20 3d 20 6e 75 6c 6c 3b  his._a2g = null;
508d0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 66  ..        this.f
508e0 72 65 71 75 65 6e 63 79 20 3d 20 6e 75 6c 6c 3b  requency = null;
508f0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 61  ..        this.a
50900 6d 70 6c 69 74 75 64 65 20 3d 20 6e 75 6c 6c 3b  mplitude = null;
50910 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
50920 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09   this;..    };..
50930 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e      return Tone.
50940 4c 46 4f 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c  LFO;..});..Modul
50950 65 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65  e(function (Tone
50960 29 20 7b 0a 09 20 20 20 20 0a 09 20 20 20 20 2f  ) {..    ..    /
50970 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61 73 73 20  **... *  @class 
50980 54 6f 6e 65 2e 4c 69 6d 69 74 65 72 20 77 69 6c  Tone.Limiter wil
50990 6c 20 6c 69 6d 69 74 20 74 68 65 20 6c 6f 75 64  l limit the loud
509a0 6e 65 73 73 20 6f 66 20 61 6e 20 69 6e 63 6f 6d  ness of an incom
509b0 69 6e 67 20 73 69 67 6e 61 6c 2e 20 0a 09 09 20  ing signal. ... 
509c0 2a 20 20 20 20 20 20 20 20 20 49 74 20 69 73 20  *         It is 
509d0 63 6f 6d 70 6f 73 65 64 20 6f 66 20 61 20 54 6f  composed of a To
509e0 6e 65 2e 43 6f 6d 70 72 65 73 73 6f 72 20 77 69  ne.Compressor wi
509f0 74 68 20 61 20 66 61 73 74 20 61 74 74 61 63 6b  th a fast attack
50a00 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 61   ... *         a
50a10 6e 64 20 72 65 6c 65 61 73 65 2e 20 4c 69 6d 69  nd release. Limi
50a20 74 65 72 73 20 61 72 65 20 63 6f 6d 6d 6f 6e 6c  ters are commonl
50a30 79 20 75 73 65 64 20 74 6f 20 73 61 66 65 67 75  y used to safegu
50a40 61 72 64 20 61 67 61 69 6e 73 74 20 0a 09 09 20  ard against ... 
50a50 2a 20 20 20 20 20 20 20 20 20 73 69 67 6e 61 6c  *         signal
50a60 20 63 6c 69 70 70 69 6e 67 2e 20 55 6e 6c 69 6b   clipping. Unlik
50a70 65 20 61 20 63 6f 6d 70 72 65 73 73 6f 72 2c 20  e a compressor, 
50a80 6c 69 6d 69 74 65 72 73 20 64 6f 20 6e 6f 74 20  limiters do not 
50a90 70 72 6f 76 69 64 65 20 0a 09 09 20 2a 20 20 20  provide ... *   
50aa0 20 20 20 20 20 20 73 6d 6f 6f 74 68 20 67 61 69        smooth gai
50ab0 6e 20 72 65 64 75 63 74 69 6f 6e 20 61 6e 64 20  n reduction and 
50ac0 61 6c 6d 6f 73 74 20 63 6f 6d 70 6c 65 74 65 6c  almost completel
50ad0 79 20 70 72 65 76 65 6e 74 20 0a 09 09 20 2a 20  y prevent ... * 
50ae0 20 20 20 20 20 20 20 20 61 64 64 69 74 69 6f 6e          addition
50af0 61 6c 20 67 61 69 6e 20 61 62 6f 76 65 20 74 68  al gain above th
50b00 65 20 74 68 72 65 73 68 6f 6c 64 2e 0a 09 09 20  e threshold.... 
50b10 2a 0a 09 09 20 2a 20 20 40 65 78 74 65 6e 64 73  *... *  @extends
50b20 20 7b 54 6f 6e 65 7d 0a 09 09 20 2a 20 20 40 63   {Tone}... *  @c
50b30 6f 6e 73 74 72 75 63 74 6f 72 0a 09 09 20 2a 20  onstructor... * 
50b40 20 40 70 61 72 61 6d 20 7b 6e 75 6d 62 65 72 7d   @param {number}
50b50 20 74 68 72 65 73 68 6f 6c 64 20 54 68 65 20 74   threshold The t
50b60 68 65 73 68 6f 6c 64 20 61 62 6f 76 65 20 77 68  heshold above wh
50b70 69 63 68 20 74 68 65 20 6c 69 6d 69 74 69 6e 67  ich the limiting
50b80 20 69 73 20 61 70 70 6c 69 65 64 2e 20 0a 09 09   is applied. ...
50b90 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20   *  @example... 
50ba0 2a 20 20 76 61 72 20 6c 69 6d 69 74 65 72 20 3d  *  var limiter =
50bb0 20 6e 65 77 20 54 6f 6e 65 2e 4c 69 6d 69 74 65   new Tone.Limite
50bc0 72 28 2d 36 29 3b 0a 09 09 20 2a 2f 0a 09 20 20  r(-6);... */..  
50bd0 20 20 54 6f 6e 65 2e 4c 69 6d 69 74 65 72 20 3d    Tone.Limiter =
50be0 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
50bf0 20 20 20 20 20 20 20 20 76 61 72 20 6f 70 74 69          var opti
50c00 6f 6e 73 20 3d 20 74 68 69 73 2e 6f 70 74 69 6f  ons = this.optio
50c10 6e 73 4f 62 6a 65 63 74 28 61 72 67 75 6d 65 6e  nsObject(argumen
50c20 74 73 2c 20 5b 27 74 68 72 65 73 68 6f 6c 64 27  ts, ['threshold'
50c30 5d 2c 20 54 6f 6e 65 2e 4c 69 6d 69 74 65 72 2e  ], Tone.Limiter.
50c40 64 65 66 61 75 6c 74 73 29 3b 0a 09 20 20 20 20  defaults);..    
50c50 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 74      /**.... *  t
50c60 68 65 20 63 6f 6d 70 72 65 73 73 6f 72 0a 09 09  he compressor...
50c70 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
50c80 09 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65  . *  @type {Tone
50c90 2e 43 6f 6d 70 72 65 73 73 6f 72 7d 0a 09 09 09  .Compressor}....
50ca0 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
50cb0 73 2e 5f 63 6f 6d 70 72 65 73 73 6f 72 20 3d 20  s._compressor = 
50cc0 74 68 69 73 2e 69 6e 70 75 74 20 3d 20 74 68 69  this.input = thi
50cd0 73 2e 6f 75 74 70 75 74 20 3d 20 6e 65 77 20 54  s.output = new T
50ce0 6f 6e 65 2e 43 6f 6d 70 72 65 73 73 6f 72 28 7b  one.Compressor({
50cf0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 61  ..            'a
50d00 74 74 61 63 6b 27 3a 20 30 2e 30 30 31 2c 0a 09  ttack': 0.001,..
50d10 20 20 20 20 20 20 20 20 20 20 20 20 27 64 65 63              'dec
50d20 61 79 27 3a 20 30 2e 30 30 31 2c 0a 09 20 20 20  ay': 0.001,..   
50d30 20 20 20 20 20 20 20 20 20 27 74 68 72 65 73 68           'thresh
50d40 6f 6c 64 27 3a 20 6f 70 74 69 6f 6e 73 2e 74 68  old': options.th
50d50 72 65 73 68 6f 6c 64 0a 09 20 20 20 20 20 20 20  reshold..       
50d60 20 7d 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a   });..        /*
50d70 2a 0a 09 09 09 20 2a 20 54 68 65 20 74 68 72 65  *.... * The thre
50d80 73 68 6f 6c 64 20 6f 66 20 6f 66 20 74 68 65 20  shold of of the 
50d90 6c 69 6d 69 74 65 72 0a 09 09 09 20 2a 20 40 74  limiter.... * @t
50da0 79 70 65 20 7b 44 65 63 69 62 65 6c 7d 0a 09 09  ype {Decibel}...
50db0 09 20 2a 20 40 73 69 67 6e 61 6c 0a 09 09 09 20  . * @signal.... 
50dc0 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
50dd0 2e 74 68 72 65 73 68 6f 6c 64 20 3d 20 74 68 69  .threshold = thi
50de0 73 2e 5f 63 6f 6d 70 72 65 73 73 6f 72 2e 74 68  s._compressor.th
50df0 72 65 73 68 6f 6c 64 3b 0a 09 20 20 20 20 20 20  reshold;..      
50e00 20 20 74 68 69 73 2e 5f 72 65 61 64 4f 6e 6c 79    this._readOnly
50e10 28 27 74 68 72 65 73 68 6f 6c 64 27 29 3b 0a 09  ('threshold');..
50e20 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65      };..    Tone
50e30 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 4c 69 6d  .extend(Tone.Lim
50e40 69 74 65 72 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a  iter);..    /**.
50e50 09 09 20 2a 20 20 54 68 65 20 64 65 66 61 75 6c  .. *  The defaul
50e60 74 20 76 61 6c 75 65 0a 09 09 20 2a 20 20 40 74  t value... *  @t
50e70 79 70 65 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20  ype {Object}... 
50e80 2a 20 20 40 63 6f 6e 73 74 0a 09 09 20 2a 20 20  *  @const... *  
50e90 40 73 74 61 74 69 63 0a 09 09 20 2a 2f 0a 09 20  @static... */.. 
50ea0 20 20 20 54 6f 6e 65 2e 4c 69 6d 69 74 65 72 2e     Tone.Limiter.
50eb0 64 65 66 61 75 6c 74 73 20 3d 20 7b 20 27 74 68  defaults = { 'th
50ec0 72 65 73 68 6f 6c 64 27 3a 20 2d 31 32 20 7d 3b  reshold': -12 };
50ed0 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
50ee0 43 6c 65 61 6e 20 75 70 2e 0a 09 09 20 2a 20 20  Clean up.... *  
50ef0 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 4c  @returns {Tone.L
50f00 69 6d 69 74 65 72 7d 20 74 68 69 73 0a 09 09 20  imiter} this... 
50f10 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4c 69 6d  */..    Tone.Lim
50f20 69 74 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e 64  iter.prototype.d
50f30 69 73 70 6f 73 65 20 3d 20 66 75 6e 63 74 69 6f  ispose = functio
50f40 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
50f50 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e 64  Tone.prototype.d
50f60 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69 73  ispose.call(this
50f70 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
50f80 2e 5f 63 6f 6d 70 72 65 73 73 6f 72 2e 64 69 73  ._compressor.dis
50f90 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20  pose();..       
50fa0 20 74 68 69 73 2e 5f 63 6f 6d 70 72 65 73 73 6f   this._compresso
50fb0 72 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20  r = null;..     
50fc0 20 20 20 74 68 69 73 2e 5f 77 72 69 74 61 62 6c     this._writabl
50fd0 65 28 27 74 68 72 65 73 68 6f 6c 64 27 29 3b 0a  e('threshold');.
50fe0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 68  .        this.th
50ff0 72 65 73 68 6f 6c 64 20 3d 20 6e 75 6c 6c 3b 0a  reshold = null;.
51000 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
51010 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20  this;..    };.. 
51020 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 4c     return Tone.L
51030 69 6d 69 74 65 72 3b 0a 09 7d 29 3b 0a 09 4d 6f  imiter;..});..Mo
51040 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28 54  dule(function (T
51050 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09 20 20  one) {..    ..  
51060 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61    /**... *  @cla
51070 73 73 20 54 6f 6e 65 2e 4c 6f 77 70 61 73 73 20  ss Tone.Lowpass 
51080 69 73 20 61 20 6c 6f 77 70 61 73 73 20 66 65 65  is a lowpass fee
51090 64 62 61 63 6b 20 63 6f 6d 62 20 66 69 6c 74 65  dback comb filte
510a0 72 2e 20 49 74 20 69 73 20 73 69 6d 69 6c 61 72  r. It is similar
510b0 20 74 6f 20 0a 09 09 20 2a 20 20 20 20 20 20 20   to ... *       
510c0 20 20 54 6f 6e 65 2e 46 65 65 64 62 61 63 6b 43    Tone.FeedbackC
510d0 6f 6d 62 46 69 6c 74 65 72 2c 20 62 75 74 20 69  ombFilter, but i
510e0 6e 63 6c 75 64 65 73 20 61 20 6c 6f 77 70 61 73  ncludes a lowpas
510f0 73 20 66 69 6c 74 65 72 2e 0a 09 09 20 2a 0a 09  s filter.... *..
51100 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b 54  . *  @extends {T
51110 6f 6e 65 7d 0a 09 09 20 2a 20 20 40 63 6f 6e 73  one}... *  @cons
51120 74 72 75 63 74 6f 72 0a 09 09 20 2a 20 20 40 70  tructor... *  @p
51130 61 72 61 6d 20 7b 54 69 6d 65 7c 4f 62 6a 65 63  aram {Time|Objec
51140 74 7d 20 5b 64 65 6c 61 79 54 69 6d 65 5d 20 54  t} [delayTime] T
51150 68 65 20 64 65 6c 61 79 20 74 69 6d 65 20 6f 66  he delay time of
51160 20 74 68 65 20 63 6f 6d 62 20 66 69 6c 74 65 72   the comb filter
51170 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 4e  ... *  @param {N
51180 6f 72 6d 61 6c 52 61 6e 67 65 3d 7d 20 72 65 73  ormalRange=} res
51190 6f 6e 61 6e 63 65 20 54 68 65 20 72 65 73 6f 6e  onance The reson
511a0 61 6e 63 65 20 28 66 65 65 64 62 61 63 6b 29 20  ance (feedback) 
511b0 6f 66 20 74 68 65 20 63 6f 6d 62 20 66 69 6c 74  of the comb filt
511c0 65 72 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  er... *  @param 
511d0 7b 46 72 65 71 75 65 6e 63 79 3d 7d 20 64 61 6d  {Frequency=} dam
511e0 70 65 6e 69 6e 67 20 54 68 65 20 63 75 74 6f 66  pening The cutof
511f0 66 20 6f 66 20 74 68 65 20 6c 6f 77 70 61 73 73  f of the lowpass
51200 20 66 69 6c 74 65 72 20 64 61 6d 70 65 6e 73 20   filter dampens 
51210 74 68 65 0a 09 09 20 2a 20 20 20 20 20 20 20 20  the... *        
51220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51230 20 20 20 20 20 20 20 20 73 69 67 6e 61 6c 20 61          signal a
51240 73 20 69 74 20 69 73 20 66 65 64 62 61 63 6b 2e  s it is fedback.
51250 20 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e   ... */..    Ton
51260 65 2e 4c 6f 77 70 61 73 73 43 6f 6d 62 46 69 6c  e.LowpassCombFil
51270 74 65 72 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  ter = function (
51280 29 20 7b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ) {..        thi
51290 73 2e 63 72 65 61 74 65 49 6e 73 4f 75 74 73 28  s.createInsOuts(
512a0 31 2c 20 31 29 3b 0a 09 20 20 20 20 20 20 20 20  1, 1);..        
512b0 76 61 72 20 6f 70 74 69 6f 6e 73 20 3d 20 74 68  var options = th
512c0 69 73 2e 6f 70 74 69 6f 6e 73 4f 62 6a 65 63 74  is.optionsObject
512d0 28 61 72 67 75 6d 65 6e 74 73 2c 20 5b 0a 09 20  (arguments, [.. 
512e0 20 20 20 20 20 20 20 20 20 20 20 27 64 65 6c 61             'dela
512f0 79 54 69 6d 65 27 2c 0a 09 20 20 20 20 20 20 20  yTime',..       
51300 20 20 20 20 20 27 72 65 73 6f 6e 61 6e 63 65 27       'resonance'
51310 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
51320 64 61 6d 70 65 6e 69 6e 67 27 0a 09 20 20 20 20  dampening'..    
51330 20 20 20 20 5d 2c 20 54 6f 6e 65 2e 4c 6f 77 70      ], Tone.Lowp
51340 61 73 73 43 6f 6d 62 46 69 6c 74 65 72 2e 64 65  assCombFilter.de
51350 66 61 75 6c 74 73 29 3b 0a 09 20 20 20 20 20 20  faults);..      
51360 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 74 68 65    /**.... *  the
51370 20 64 65 6c 61 79 20 6e 6f 64 65 0a 09 09 09 20   delay node.... 
51380 2a 20 20 40 74 79 70 65 20 7b 44 65 6c 61 79 4e  *  @type {DelayN
51390 6f 64 65 7d 0a 09 09 09 20 2a 20 20 40 70 72 69  ode}.... *  @pri
513a0 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20  vate.... */..   
513b0 20 20 20 20 20 74 68 69 73 2e 5f 64 65 6c 61 79       this._delay
513c0 20 3d 20 74 68 69 73 2e 69 6e 70 75 74 20 3d 20   = this.input = 
513d0 6e 65 77 20 54 6f 6e 65 2e 44 65 6c 61 79 28 6f  new Tone.Delay(o
513e0 70 74 69 6f 6e 73 2e 64 65 6c 61 79 54 69 6d 65  ptions.delayTime
513f0 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
51400 09 09 09 20 2a 20 20 54 68 65 20 64 65 6c 61 79  ... *  The delay
51410 54 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 6d 62  Time of the comb
51420 20 66 69 6c 74 65 72 2e 20 0a 09 09 09 20 2a 20   filter. .... * 
51430 20 40 74 79 70 65 20 7b 54 69 6d 65 7d 0a 09 09   @type {Time}...
51440 09 20 2a 20 20 40 73 69 67 6e 61 6c 0a 09 09 09  . *  @signal....
51450 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
51460 73 2e 64 65 6c 61 79 54 69 6d 65 20 3d 20 74 68  s.delayTime = th
51470 69 73 2e 5f 64 65 6c 61 79 2e 64 65 6c 61 79 54  is._delay.delayT
51480 69 6d 65 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a  ime;..        /*
51490 2a 0a 09 09 09 20 2a 20 20 74 68 65 20 6c 6f 77  *.... *  the low
514a0 70 61 73 73 20 66 69 6c 74 65 72 0a 09 09 09 20  pass filter.... 
514b0 2a 20 20 40 74 79 70 65 20 20 7b 42 69 71 75 61  *  @type  {Biqua
514c0 64 46 69 6c 74 65 72 4e 6f 64 65 7d 0a 09 09 09  dFilterNode}....
514d0 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
514e0 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
514f0 73 2e 5f 6c 6f 77 70 61 73 73 20 3d 20 74 68 69  s._lowpass = thi
51500 73 2e 6f 75 74 70 75 74 20 3d 20 74 68 69 73 2e  s.output = this.
51510 63 6f 6e 74 65 78 74 2e 63 72 65 61 74 65 42 69  context.createBi
51520 71 75 61 64 46 69 6c 74 65 72 28 29 3b 0a 09 20  quadFilter();.. 
51530 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 6f 77         this._low
51540 70 61 73 73 2e 51 2e 76 61 6c 75 65 20 3d 20 2d  pass.Q.value = -
51550 33 2e 30 31 30 32 39 39 39 35 36 36 33 39 38 31  3.01029995663981
51560 32 35 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  25;..        thi
51570 73 2e 5f 6c 6f 77 70 61 73 73 2e 74 79 70 65 20  s._lowpass.type 
51580 3d 20 27 6c 6f 77 70 61 73 73 27 3b 0a 09 20 20  = 'lowpass';..  
51590 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
515a0 20 54 68 65 20 64 61 6d 70 65 6e 69 6e 67 20 63   The dampening c
515b0 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 65 20 66 65  ontrol of the fe
515c0 65 64 62 61 63 6b 0a 09 09 09 20 2a 20 20 40 74  edback.... *  @t
515d0 79 70 65 20 7b 46 72 65 71 75 65 6e 63 79 7d 0a  ype {Frequency}.
515e0 09 09 09 20 2a 20 20 40 73 69 67 6e 61 6c 0a 09  ... *  @signal..
515f0 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
51600 68 69 73 2e 64 61 6d 70 65 6e 69 6e 67 20 3d 20  his.dampening = 
51610 6e 65 77 20 54 6f 6e 65 2e 50 61 72 61 6d 28 7b  new Tone.Param({
51620 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 70  ..            'p
51630 61 72 61 6d 27 3a 20 74 68 69 73 2e 5f 6c 6f 77  aram': this._low
51640 70 61 73 73 2e 66 72 65 71 75 65 6e 63 79 2c 0a  pass.frequency,.
51650 09 20 20 20 20 20 20 20 20 20 20 20 20 27 75 6e  .            'un
51660 69 74 73 27 3a 20 54 6f 6e 65 2e 54 79 70 65 2e  its': Tone.Type.
51670 46 72 65 71 75 65 6e 63 79 2c 0a 09 20 20 20 20  Frequency,..    
51680 20 20 20 20 20 20 20 20 27 76 61 6c 75 65 27 3a          'value':
51690 20 6f 70 74 69 6f 6e 73 2e 64 61 6d 70 65 6e 69   options.dampeni
516a0 6e 67 0a 09 20 20 20 20 20 20 20 20 7d 29 3b 0a  ng..        });.
516b0 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
516c0 20 2a 20 20 74 68 65 20 66 65 65 64 62 61 63 6b   *  the feedback
516d0 20 67 61 69 6e 0a 09 09 09 20 2a 20 20 40 74 79   gain.... *  @ty
516e0 70 65 20 7b 54 6f 6e 65 2e 47 61 69 6e 7d 0a 09  pe {Tone.Gain}..
516f0 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
51700 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
51710 68 69 73 2e 5f 66 65 65 64 62 61 63 6b 20 3d 20  his._feedback = 
51720 6e 65 77 20 54 6f 6e 65 2e 47 61 69 6e 28 6f 70  new Tone.Gain(op
51730 74 69 6f 6e 73 2e 72 65 73 6f 6e 61 6e 63 65 2c  tions.resonance,
51740 20 54 6f 6e 65 2e 54 79 70 65 2e 4e 6f 72 6d 61   Tone.Type.Norma
51750 6c 52 61 6e 67 65 29 3b 0a 09 20 20 20 20 20 20  lRange);..      
51760 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65    /**.... *  The
51770 20 61 6d 6f 75 6e 74 20 6f 66 20 66 65 65 64 62   amount of feedb
51780 61 63 6b 20 6f 66 20 74 68 65 20 64 65 6c 61 79  ack of the delay
51790 65 64 20 73 69 67 6e 61 6c 2e 20 0a 09 09 09 20  ed signal. .... 
517a0 2a 20 20 40 74 79 70 65 20 7b 4e 6f 72 6d 61 6c  *  @type {Normal
517b0 52 61 6e 67 65 7d 0a 09 09 09 20 2a 20 20 40 73  Range}.... *  @s
517c0 69 67 6e 61 6c 0a 09 09 09 20 2a 2f 0a 09 20 20  ignal.... */..  
517d0 20 20 20 20 20 20 74 68 69 73 2e 72 65 73 6f 6e        this.reson
517e0 61 6e 63 65 20 3d 20 74 68 69 73 2e 5f 66 65 65  ance = this._fee
517f0 64 62 61 63 6b 2e 67 61 69 6e 3b 0a 09 20 20 20  dback.gain;..   
51800 20 20 20 20 20 2f 2f 63 6f 6e 6e 65 63 74 69 6f       //connectio
51810 6e 73 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  ns..        this
51820 2e 5f 64 65 6c 61 79 2e 63 68 61 69 6e 28 74 68  ._delay.chain(th
51830 69 73 2e 5f 6c 6f 77 70 61 73 73 2c 20 74 68 69  is._lowpass, thi
51840 73 2e 5f 66 65 65 64 62 61 63 6b 2c 20 74 68 69  s._feedback, thi
51850 73 2e 5f 64 65 6c 61 79 29 3b 0a 09 20 20 20 20  s._delay);..    
51860 20 20 20 20 74 68 69 73 2e 5f 72 65 61 64 4f 6e      this._readOn
51870 6c 79 28 5b 0a 09 20 20 20 20 20 20 20 20 20 20  ly([..          
51880 20 20 27 64 61 6d 70 65 6e 69 6e 67 27 2c 0a 09    'dampening',..
51890 20 20 20 20 20 20 20 20 20 20 20 20 27 72 65 73              'res
518a0 6f 6e 61 6e 63 65 27 2c 0a 09 20 20 20 20 20 20  onance',..      
518b0 20 20 20 20 20 20 27 64 65 6c 61 79 54 69 6d 65        'delayTime
518c0 27 0a 09 20 20 20 20 20 20 20 20 5d 29 3b 0a 09  '..        ]);..
518d0 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65      };..    Tone
518e0 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 4c 6f 77  .extend(Tone.Low
518f0 70 61 73 73 43 6f 6d 62 46 69 6c 74 65 72 29 3b  passCombFilter);
51900 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
51910 74 68 65 20 64 65 66 61 75 6c 74 20 70 61 72 61  the default para
51920 6d 65 74 65 72 73 0a 09 09 20 2a 20 20 40 73 74  meters... *  @st
51930 61 74 69 63 0a 09 09 20 2a 20 20 40 63 6f 6e 73  atic... *  @cons
51940 74 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4f  t... *  @type {O
51950 62 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a 09 20 20  bject}... */..  
51960 20 20 54 6f 6e 65 2e 4c 6f 77 70 61 73 73 43 6f    Tone.LowpassCo
51970 6d 62 46 69 6c 74 65 72 2e 64 65 66 61 75 6c 74  mbFilter.default
51980 73 20 3d 20 7b 0a 09 20 20 20 20 20 20 20 20 27  s = {..        '
51990 64 65 6c 61 79 54 69 6d 65 27 3a 20 30 2e 31 2c  delayTime': 0.1,
519a0 0a 09 20 20 20 20 20 20 20 20 27 72 65 73 6f 6e  ..        'reson
519b0 61 6e 63 65 27 3a 20 30 2e 35 2c 0a 09 20 20 20  ance': 0.5,..   
519c0 20 20 20 20 20 27 64 61 6d 70 65 6e 69 6e 67 27       'dampening'
519d0 3a 20 33 30 30 30 0a 09 20 20 20 20 7d 3b 0a 09  : 3000..    };..
519e0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 6c      /**... *  Cl
519f0 65 61 6e 20 75 70 2e 20 0a 09 09 20 2a 20 20 40  ean up. ... *  @
51a00 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 4c 6f  returns {Tone.Lo
51a10 77 70 61 73 73 43 6f 6d 62 46 69 6c 74 65 72 7d  wpassCombFilter}
51a20 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20   this... */..   
51a30 20 54 6f 6e 65 2e 4c 6f 77 70 61 73 73 43 6f 6d   Tone.LowpassCom
51a40 62 46 69 6c 74 65 72 2e 70 72 6f 74 6f 74 79 70  bFilter.prototyp
51a50 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75 6e 63  e.dispose = func
51a60 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
51a70 20 20 20 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70     Tone.prototyp
51a80 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74  e.dispose.call(t
51a90 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20 20 74  his);..        t
51aa0 68 69 73 2e 5f 77 72 69 74 61 62 6c 65 28 5b 0a  his._writable([.
51ab0 09 20 20 20 20 20 20 20 20 20 20 20 20 27 64 61  .            'da
51ac0 6d 70 65 6e 69 6e 67 27 2c 0a 09 20 20 20 20 20  mpening',..     
51ad0 20 20 20 20 20 20 20 27 72 65 73 6f 6e 61 6e 63         'resonanc
51ae0 65 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  e',..           
51af0 20 27 64 65 6c 61 79 54 69 6d 65 27 0a 09 20 20   'delayTime'..  
51b00 20 20 20 20 20 20 5d 29 3b 0a 09 20 20 20 20 20        ]);..     
51b10 20 20 20 74 68 69 73 2e 64 61 6d 70 65 6e 69 6e     this.dampenin
51b20 67 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20  g.dispose();..  
51b30 20 20 20 20 20 20 74 68 69 73 2e 64 61 6d 70 65        this.dampe
51b40 6e 69 6e 67 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20  ning = null;..  
51b50 20 20 20 20 20 20 74 68 69 73 2e 72 65 73 6f 6e        this.reson
51b60 61 6e 63 65 2e 64 69 73 70 6f 73 65 28 29 3b 0a  ance.dispose();.
51b70 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 72 65  .        this.re
51b80 73 6f 6e 61 6e 63 65 20 3d 20 6e 75 6c 6c 3b 0a  sonance = null;.
51b90 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 64  .        this._d
51ba0 65 6c 61 79 2e 64 69 73 70 6f 73 65 28 29 3b 0a  elay.dispose();.
51bb0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 64  .        this._d
51bc0 65 6c 61 79 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20  elay = null;..  
51bd0 20 20 20 20 20 20 74 68 69 73 2e 64 65 6c 61 79        this.delay
51be0 54 69 6d 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20  Time = null;..  
51bf0 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 6f 77 70        this._lowp
51c00 61 73 73 2e 64 69 73 63 6f 6e 6e 65 63 74 28 29  ass.disconnect()
51c10 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
51c20 5f 6c 6f 77 70 61 73 73 20 3d 20 6e 75 6c 6c 3b  _lowpass = null;
51c30 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
51c40 66 65 65 64 62 61 63 6b 2e 64 69 73 63 6f 6e 6e  feedback.disconn
51c50 65 63 74 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ect();..        
51c60 74 68 69 73 2e 5f 66 65 65 64 62 61 63 6b 20 3d  this._feedback =
51c70 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
51c80 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20  return this;..  
51c90 20 20 7d 3b 0a 09 20 20 20 20 72 65 74 75 72 6e    };..    return
51ca0 20 54 6f 6e 65 2e 4c 6f 77 70 61 73 73 43 6f 6d   Tone.LowpassCom
51cb0 62 46 69 6c 74 65 72 3b 0a 09 7d 29 3b 0a 09 4d  bFilter;..});..M
51cc0 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28  odule(function (
51cd0 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09 20  Tone) {..    .. 
51ce0 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c     /**... *  @cl
51cf0 61 73 73 20 20 54 6f 6e 65 2e 4d 65 72 67 65 20  ass  Tone.Merge 
51d00 62 72 69 6e 67 73 20 74 77 6f 20 73 69 67 6e 61  brings two signa
51d10 6c 73 20 69 6e 74 6f 20 74 68 65 20 6c 65 66 74  ls into the left
51d20 20 61 6e 64 20 72 69 67 68 74 20 0a 09 09 20 2a   and right ... *
51d30 20 20 20 20 20 20 20 20 20 20 63 68 61 6e 6e 65            channe
51d40 6c 73 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 73  ls of a single s
51d50 74 65 72 65 6f 20 63 68 61 6e 6e 65 6c 2e 0a 09  tereo channel...
51d60 09 20 2a 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74  . *... *  @const
51d70 72 75 63 74 6f 72 0a 09 09 20 2a 20 20 40 65 78  ructor... *  @ex
51d80 74 65 6e 64 73 20 7b 54 6f 6e 65 7d 0a 09 09 20  tends {Tone}... 
51d90 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a  *  @example... *
51da0 20 76 61 72 20 6d 65 72 67 65 20 3d 20 6e 65 77   var merge = new
51db0 20 54 6f 6e 65 2e 4d 65 72 67 65 28 29 2e 74 6f   Tone.Merge().to
51dc0 4d 61 73 74 65 72 28 29 3b 0a 09 09 20 2a 20 2f  Master();... * /
51dd0 2f 72 6f 75 74 69 6e 67 20 61 20 73 69 6e 65 20  /routing a sine 
51de0 74 6f 6e 65 20 69 6e 20 74 68 65 20 6c 65 66 74  tone in the left
51df0 20 63 68 61 6e 6e 65 6c 0a 09 09 20 2a 20 2f 2f   channel... * //
51e00 61 6e 64 20 6e 6f 69 73 65 20 69 6e 20 74 68 65  and noise in the
51e10 20 72 69 67 68 74 20 63 68 61 6e 6e 65 6c 0a 09   right channel..
51e20 09 20 2a 20 76 61 72 20 6f 73 63 20 3d 20 6e 65  . * var osc = ne
51e30 77 20 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f  w Tone.Oscillato
51e40 72 28 29 2e 63 6f 6e 6e 65 63 74 28 6d 65 72 67  r().connect(merg
51e50 65 2e 6c 65 66 74 29 3b 0a 09 09 20 2a 20 76 61  e.left);... * va
51e60 72 20 6e 6f 69 73 65 20 3d 20 6e 65 77 20 54 6f  r noise = new To
51e70 6e 65 2e 4e 6f 69 73 65 28 29 2e 63 6f 6e 6e 65  ne.Noise().conne
51e80 63 74 28 6d 65 72 67 65 2e 72 69 67 68 74 29 3b  ct(merge.right);
51e90 0a 09 09 20 2a 20 2f 2f 73 74 61 72 74 69 6e 67  ... * //starting
51ea0 20 6f 75 72 20 6f 73 63 69 6c 6c 61 74 6f 72 73   our oscillators
51eb0 0a 09 09 20 2a 20 6e 6f 69 73 65 2e 73 74 61 72  ... * noise.star
51ec0 74 28 29 3b 0a 09 09 20 2a 20 6f 73 63 2e 73 74  t();... * osc.st
51ed0 61 72 74 28 29 3b 0a 09 09 20 2a 2f 0a 09 20 20  art();... */..  
51ee0 20 20 54 6f 6e 65 2e 4d 65 72 67 65 20 3d 20 66    Tone.Merge = f
51ef0 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
51f00 20 20 20 20 20 20 74 68 69 73 2e 63 72 65 61 74        this.creat
51f10 65 49 6e 73 4f 75 74 73 28 32 2c 20 30 29 3b 0a  eInsOuts(2, 0);.
51f20 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
51f30 20 2a 20 20 54 68 65 20 6c 65 66 74 20 69 6e 70   *  The left inp
51f40 75 74 20 63 68 61 6e 6e 65 6c 2e 0a 09 09 09 20  ut channel..... 
51f50 2a 20 20 41 6c 69 61 73 20 66 6f 72 20 3c 63 6f  *  Alias for <co
51f60 64 65 3e 69 6e 70 75 74 5b 30 5d 3c 2f 63 6f 64  de>input[0]</cod
51f70 65 3e 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  e>.... *  @type 
51f80 7b 47 61 69 6e 4e 6f 64 65 7d 0a 09 09 09 20 2a  {GainNode}.... *
51f90 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
51fa0 6c 65 66 74 20 3d 20 74 68 69 73 2e 69 6e 70 75  left = this.inpu
51fb0 74 5b 30 5d 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  t[0] = new Tone.
51fc0 47 61 69 6e 28 29 3b 0a 09 20 20 20 20 20 20 20  Gain();..       
51fd0 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20   /**.... *  The 
51fe0 72 69 67 68 74 20 69 6e 70 75 74 20 63 68 61 6e  right input chan
51ff0 6e 65 6c 2e 0a 09 09 09 20 2a 20 20 41 6c 69 61  nel..... *  Alia
52000 73 20 66 6f 72 20 3c 63 6f 64 65 3e 69 6e 70 75  s for <code>inpu
52010 74 5b 31 5d 3c 2f 63 6f 64 65 3e 2e 0a 09 09 09  t[1]</code>.....
52020 20 2a 20 20 40 74 79 70 65 20 7b 47 61 69 6e 4e   *  @type {GainN
52030 6f 64 65 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20  ode}.... */..   
52040 20 20 20 20 20 74 68 69 73 2e 72 69 67 68 74 20       this.right 
52050 3d 20 74 68 69 73 2e 69 6e 70 75 74 5b 31 5d 20  = this.input[1] 
52060 3d 20 6e 65 77 20 54 6f 6e 65 2e 47 61 69 6e 28  = new Tone.Gain(
52070 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
52080 09 09 09 20 2a 20 20 74 68 65 20 6d 65 72 67 65  ... *  the merge
52090 72 20 6e 6f 64 65 20 66 6f 72 20 74 68 65 20 74  r node for the t
520a0 77 6f 20 63 68 61 6e 6e 65 6c 73 0a 09 09 09 20  wo channels.... 
520b0 2a 20 20 40 74 79 70 65 20 7b 43 68 61 6e 6e 65  *  @type {Channe
520c0 6c 4d 65 72 67 65 72 4e 6f 64 65 7d 0a 09 09 09  lMergerNode}....
520d0 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
520e0 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
520f0 73 2e 5f 6d 65 72 67 65 72 20 3d 20 74 68 69 73  s._merger = this
52100 2e 6f 75 74 70 75 74 20 3d 20 74 68 69 73 2e 63  .output = this.c
52110 6f 6e 74 65 78 74 2e 63 72 65 61 74 65 43 68 61  ontext.createCha
52120 6e 6e 65 6c 4d 65 72 67 65 72 28 32 29 3b 0a 09  nnelMerger(2);..
52130 20 20 20 20 20 20 20 20 2f 2f 63 6f 6e 6e 65 63          //connec
52140 74 69 6f 6e 73 0a 09 20 20 20 20 20 20 20 20 74  tions..        t
52150 68 69 73 2e 6c 65 66 74 2e 63 6f 6e 6e 65 63 74  his.left.connect
52160 28 74 68 69 73 2e 5f 6d 65 72 67 65 72 2c 20 30  (this._merger, 0
52170 2c 20 30 29 3b 0a 09 20 20 20 20 20 20 20 20 74  , 0);..        t
52180 68 69 73 2e 72 69 67 68 74 2e 63 6f 6e 6e 65 63  his.right.connec
52190 74 28 74 68 69 73 2e 5f 6d 65 72 67 65 72 2c 20  t(this._merger, 
521a0 30 2c 20 31 29 3b 0a 09 20 20 20 20 20 20 20 20  0, 1);..        
521b0 74 68 69 73 2e 6c 65 66 74 2e 63 68 61 6e 6e 65  this.left.channe
521c0 6c 43 6f 75 6e 74 20 3d 20 31 3b 0a 09 20 20 20  lCount = 1;..   
521d0 20 20 20 20 20 74 68 69 73 2e 72 69 67 68 74 2e       this.right.
521e0 63 68 61 6e 6e 65 6c 43 6f 75 6e 74 20 3d 20 31  channelCount = 1
521f0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
52200 6c 65 66 74 2e 63 68 61 6e 6e 65 6c 43 6f 75 6e  left.channelCoun
52210 74 4d 6f 64 65 20 3d 20 27 65 78 70 6c 69 63 69  tMode = 'explici
52220 74 27 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  t';..        thi
52230 73 2e 72 69 67 68 74 2e 63 68 61 6e 6e 65 6c 43  s.right.channelC
52240 6f 75 6e 74 4d 6f 64 65 20 3d 20 27 65 78 70 6c  ountMode = 'expl
52250 69 63 69 74 27 3b 0a 09 20 20 20 20 7d 3b 0a 09  icit';..    };..
52260 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28      Tone.extend(
52270 54 6f 6e 65 2e 4d 65 72 67 65 29 3b 0a 09 20 20  Tone.Merge);..  
52280 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 6c 65 61    /**... *  Clea
52290 6e 20 75 70 2e 0a 09 09 20 2a 20 20 40 72 65 74  n up.... *  @ret
522a0 75 72 6e 73 20 7b 54 6f 6e 65 2e 4d 65 72 67 65  urns {Tone.Merge
522b0 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20  } this... */..  
522c0 20 20 54 6f 6e 65 2e 4d 65 72 67 65 2e 70 72 6f    Tone.Merge.pro
522d0 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d  totype.dispose =
522e0 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
522f0 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 70 72 6f          Tone.pro
52300 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 2e 63  totype.dispose.c
52310 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20 20 20  all(this);..    
52320 20 20 20 20 74 68 69 73 2e 6c 65 66 74 2e 64 69      this.left.di
52330 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
52340 20 20 74 68 69 73 2e 6c 65 66 74 20 3d 20 6e 75    this.left = nu
52350 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ll;..        thi
52360 73 2e 72 69 67 68 74 2e 64 69 73 70 6f 73 65 28  s.right.dispose(
52370 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
52380 2e 72 69 67 68 74 20 3d 20 6e 75 6c 6c 3b 0a 09  .right = null;..
52390 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 65          this._me
523a0 72 67 65 72 2e 64 69 73 63 6f 6e 6e 65 63 74 28  rger.disconnect(
523b0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
523c0 2e 5f 6d 65 72 67 65 72 20 3d 20 6e 75 6c 6c 3b  ._merger = null;
523d0 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
523e0 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09   this;..    };..
523f0 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e      return Tone.
52400 4d 65 72 67 65 3b 0a 09 7d 29 3b 0a 09 4d 6f 64  Merge;..});..Mod
52410 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f  ule(function (To
52420 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09 20 20 20  ne) {..    ..   
52430 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61 73   /**... *  @clas
52440 73 20 20 54 6f 6e 65 2e 4d 65 74 65 72 20 67 65  s  Tone.Meter ge
52450 74 73 20 74 68 65 20 5b 52 4d 53 5d 28 68 74 74  ts the [RMS](htt
52460 70 73 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  ps://en.wikipedi
52470 61 2e 6f 72 67 2f 77 69 6b 69 2f 52 6f 6f 74 5f  a.org/wiki/Root_
52480 6d 65 61 6e 5f 73 71 75 61 72 65 29 0a 09 09 20  mean_square)... 
52490 2a 20 20 20 20 20 20 20 20 20 20 6f 66 20 61 6e  *          of an
524a0 20 69 6e 70 75 74 20 73 69 67 6e 61 6c 20 77 69   input signal wi
524b0 74 68 20 73 6f 6d 65 20 61 76 65 72 61 67 69 6e  th some averagin
524c0 67 20 61 70 70 6c 69 65 64 2e 20 49 74 20 63 61  g applied. It ca
524d0 6e 20 61 6c 73 6f 20 67 65 74 20 74 68 65 20 72  n also get the r
524e0 61 77 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20  aw ... *        
524f0 20 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69    value of the i
52500 6e 70 75 74 20 73 69 67 6e 61 6c 2e 0a 09 09 20  nput signal.... 
52510 2a 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 72 75  *... *  @constru
52520 63 74 6f 72 0a 09 09 20 2a 20 20 40 65 78 74 65  ctor... *  @exte
52530 6e 64 73 20 7b 54 6f 6e 65 7d 0a 09 09 20 2a 20  nds {Tone}... * 
52540 20 40 70 61 72 61 6d 20 7b 53 74 72 69 6e 67 7d   @param {String}
52550 20 74 79 70 65 20 45 69 74 68 65 72 20 22 6c 65   type Either "le
52560 76 65 6c 22 20 6f 72 20 22 73 69 67 6e 61 6c 22  vel" or "signal"
52570 2e 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  . ... *  @param 
52580 7b 4e 75 6d 62 65 72 7d 20 73 6d 6f 6f 74 68 69  {Number} smoothi
52590 6e 67 20 54 68 65 20 61 6d 6f 75 6e 74 20 6f 66  ng The amount of
525a0 20 73 6d 6f 6f 74 68 69 6e 67 20 61 70 70 6c 69   smoothing appli
525b0 65 64 20 62 65 74 77 65 65 6e 20 66 72 61 6d 65  ed between frame
525c0 73 2e 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c  s.... *  @exampl
525d0 65 0a 09 09 20 2a 20 76 61 72 20 6d 65 74 65 72  e... * var meter
525e0 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4d 65 74 65   = new Tone.Mete
525f0 72 28 29 3b 0a 09 09 20 2a 20 76 61 72 20 6d 69  r();... * var mi
52600 63 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 55 73 65  c = new Tone.Use
52610 72 4d 65 64 69 61 28 29 2e 73 74 61 72 74 28 29  rMedia().start()
52620 3b 0a 09 09 20 2a 20 2f 2f 63 6f 6e 6e 65 63 74  ;... * //connect
52630 20 6d 69 63 20 74 6f 20 74 68 65 20 6d 65 74 65   mic to the mete
52640 72 0a 09 09 20 2a 20 6d 69 63 2e 63 6f 6e 6e 65  r... * mic.conne
52650 63 74 28 6d 65 74 65 72 29 3b 0a 09 09 20 2a 20  ct(meter);... * 
52660 2f 2f 74 68 65 20 63 75 72 72 65 6e 74 20 6c 65  //the current le
52670 76 65 6c 20 6f 66 20 74 68 65 20 6d 69 63 20 69  vel of the mic i
52680 6e 70 75 74 0a 09 09 20 2a 20 76 61 72 20 6c 65  nput... * var le
52690 76 65 6c 20 3d 20 6d 65 74 65 72 2e 76 61 6c 75  vel = meter.valu
526a0 65 3b 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  e;... */..    To
526b0 6e 65 2e 4d 65 74 65 72 20 3d 20 66 75 6e 63 74  ne.Meter = funct
526c0 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
526d0 20 20 76 61 72 20 6f 70 74 69 6f 6e 73 20 3d 20    var options = 
526e0 74 68 69 73 2e 6f 70 74 69 6f 6e 73 4f 62 6a 65  this.optionsObje
526f0 63 74 28 61 72 67 75 6d 65 6e 74 73 2c 20 5b 0a  ct(arguments, [.
52700 09 20 20 20 20 20 20 20 20 20 20 20 20 27 74 79  .            'ty
52710 70 65 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20  pe',..          
52720 20 20 27 73 6d 6f 6f 74 68 69 6e 67 27 0a 09 20    'smoothing'.. 
52730 20 20 20 20 20 20 20 5d 2c 20 54 6f 6e 65 2e 4d         ], Tone.M
52740 65 74 65 72 2e 64 65 66 61 75 6c 74 73 29 3b 0a  eter.defaults);.
52750 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
52760 20 2a 20 20 54 68 65 20 74 79 70 65 20 6f 66 20   *  The type of 
52770 74 68 65 20 6d 65 74 65 72 2c 20 65 69 74 68 65  the meter, eithe
52780 72 20 22 6c 65 76 65 6c 22 20 6f 72 20 22 73 69  r "level" or "si
52790 67 6e 61 6c 22 2e 20 0a 09 09 09 20 2a 20 20 41  gnal". .... *  A
527a0 20 22 6c 65 76 65 6c 22 20 6d 65 74 65 72 20 77   "level" meter w
527b0 69 6c 6c 20 72 65 74 75 72 6e 20 74 68 65 20 76  ill return the v
527c0 6f 6c 75 6d 65 20 6c 65 76 65 6c 20 28 72 6d 73  olume level (rms
527d0 29 20 6f 66 20 74 68 65 20 0a 09 09 09 20 2a 20  ) of the .... * 
527e0 20 69 6e 70 75 74 20 73 69 67 6e 61 6c 20 61 6e   input signal an
527f0 64 20 61 20 22 73 69 67 6e 61 6c 22 20 6d 65 74  d a "signal" met
52800 65 72 20 77 69 6c 6c 20 72 65 74 75 72 6e 0a 09  er will return..
52810 09 09 20 2a 20 20 74 68 65 20 73 69 67 6e 61 6c  .. *  the signal
52820 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e   value of the in
52830 70 75 74 2e 20 0a 09 09 09 20 2a 20 20 40 74 79  put. .... *  @ty
52840 70 65 20 20 7b 53 74 72 69 6e 67 7d 0a 09 09 09  pe  {String}....
52850 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
52860 73 2e 74 79 70 65 20 3d 20 6f 70 74 69 6f 6e 73  s.type = options
52870 2e 74 79 70 65 3b 0a 09 20 20 20 20 20 20 20 20  .type;..        
52880 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 61  /**.... *  The a
52890 6e 61 6c 79 73 65 72 20 6e 6f 64 65 20 77 68 69  nalyser node whi
528a0 63 68 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20  ch computes the 
528b0 6c 65 76 65 6c 73 2e 0a 09 09 09 20 2a 20 20 40  levels..... *  @
528c0 70 72 69 76 61 74 65 0a 09 09 09 20 2a 20 20 40  private.... *  @
528d0 74 79 70 65 20 20 7b 54 6f 6e 65 2e 41 6e 61 6c  type  {Tone.Anal
528e0 79 73 65 72 7d 0a 09 09 09 20 2a 2f 0a 09 20 20  yser}.... */..  
528f0 20 20 20 20 20 20 74 68 69 73 2e 69 6e 70 75 74        this.input
52900 20 3d 20 74 68 69 73 2e 6f 75 74 70 75 74 20 3d   = this.output =
52910 20 74 68 69 73 2e 5f 61 6e 61 6c 79 73 65 72 20   this._analyser 
52920 3d 20 6e 65 77 20 54 6f 6e 65 2e 41 6e 61 6c 79  = new Tone.Analy
52930 73 65 72 28 27 77 61 76 65 66 6f 72 6d 27 2c 20  ser('waveform', 
52940 35 31 32 29 3b 0a 09 20 20 20 20 20 20 20 20 74  512);..        t
52950 68 69 73 2e 5f 61 6e 61 6c 79 73 65 72 2e 72 65  his._analyser.re
52960 74 75 72 6e 54 79 70 65 20 3d 20 27 66 6c 6f 61  turnType = 'floa
52970 74 27 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  t';..        /**
52980 0a 09 09 09 20 2a 20 20 54 68 65 20 61 6d 6f 75  .... *  The amou
52990 6e 74 20 6f 66 20 63 61 72 72 79 6f 76 65 72 20  nt of carryover 
529a0 62 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72  between the curr
529b0 65 6e 74 20 61 6e 64 20 6c 61 73 74 20 66 72 61  ent and last fra
529c0 6d 65 2e 20 0a 09 09 09 20 2a 20 20 4f 6e 6c 79  me. .... *  Only
529d0 20 61 70 70 6c 69 65 64 20 6d 65 74 65 72 20 66   applied meter f
529e0 6f 72 20 22 6c 65 76 65 6c 22 20 74 79 70 65 2e  or "level" type.
529f0 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 20 7b  .... *  @type  {
52a00 4e 75 6d 62 65 72 7d 0a 09 09 09 20 2a 2f 0a 09  Number}.... */..
52a10 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 6d 6f          this.smo
52a20 6f 74 68 69 6e 67 20 3d 20 6f 70 74 69 6f 6e 73  othing = options
52a30 2e 73 6d 6f 6f 74 68 69 6e 67 3b 0a 09 20 20 20  .smoothing;..   
52a40 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
52a50 54 68 65 20 6c 61 73 74 20 63 6f 6d 70 75 74 65  The last compute
52a60 64 20 76 61 6c 75 65 0a 09 09 09 20 2a 20 20 40  d value.... *  @
52a70 74 79 70 65 20 7b 4e 75 6d 62 65 72 7d 0a 09 09  type {Number}...
52a80 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
52a90 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
52aa0 69 73 2e 5f 6c 61 73 74 56 61 6c 75 65 20 3d 20  is._lastValue = 
52ab0 30 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  0;..    };..    
52ac0 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65  Tone.extend(Tone
52ad0 2e 4d 65 74 65 72 29 3b 0a 09 20 20 20 20 2f 2a  .Meter);..    /*
52ae0 2a 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  *... *  @private
52af0 0a 09 09 20 2a 20 20 40 65 6e 75 6d 20 7b 53 74  ... *  @enum {St
52b00 72 69 6e 67 7d 0a 09 09 20 2a 2f 0a 09 20 20 20  ring}... */..   
52b10 20 54 6f 6e 65 2e 4d 65 74 65 72 2e 54 79 70 65   Tone.Meter.Type
52b20 20 3d 20 7b 0a 09 20 20 20 20 20 20 20 20 4c 65   = {..        Le
52b30 76 65 6c 3a 20 27 6c 65 76 65 6c 27 2c 0a 09 20  vel: 'level',.. 
52b40 20 20 20 20 20 20 20 53 69 67 6e 61 6c 3a 20 27         Signal: '
52b50 73 69 67 6e 61 6c 27 0a 09 20 20 20 20 7d 3b 0a  signal'..    };.
52b60 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 54  .    /**... *  T
52b70 68 65 20 64 65 66 61 75 6c 74 73 0a 09 09 20 2a  he defaults... *
52b80 20 20 40 74 79 70 65 20 7b 4f 62 6a 65 63 74 7d    @type {Object}
52b90 0a 09 09 20 2a 20 20 40 73 74 61 74 69 63 0a 09  ... *  @static..
52ba0 09 20 2a 20 20 40 63 6f 6e 73 74 0a 09 09 20 2a  . *  @const... *
52bb0 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4d 65 74 65  /..    Tone.Mete
52bc0 72 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b 0a 09  r.defaults = {..
52bd0 20 20 20 20 20 20 20 20 27 73 6d 6f 6f 74 68 69          'smoothi
52be0 6e 67 27 3a 20 30 2e 38 2c 0a 09 20 20 20 20 20  ng': 0.8,..     
52bf0 20 20 20 27 74 79 70 65 27 3a 20 54 6f 6e 65 2e     'type': Tone.
52c00 4d 65 74 65 72 2e 54 79 70 65 2e 4c 65 76 65 6c  Meter.Type.Level
52c10 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
52c20 2a 0a 09 09 20 2a 20 54 68 65 20 63 75 72 72 65  *... * The curre
52c30 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  nt value of the 
52c40 6d 65 74 65 72 2e 20 41 20 76 61 6c 75 65 20 6f  meter. A value o
52c50 66 20 31 20 69 73 0a 09 09 20 2a 20 22 75 6e 69  f 1 is... * "uni
52c60 74 79 22 2e 0a 09 09 20 2a 20 40 6d 65 6d 62 65  ty".... * @membe
52c70 72 4f 66 20 54 6f 6e 65 2e 4d 65 74 65 72 23 0a  rOf Tone.Meter#.
52c80 09 09 20 2a 20 40 74 79 70 65 20 7b 4e 75 6d 62  .. * @type {Numb
52c90 65 72 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 76  er}... * @name v
52ca0 61 6c 75 65 0a 09 09 20 2a 20 40 72 65 61 64 4f  alue... * @readO
52cb0 6e 6c 79 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f  nly... */..    O
52cc0 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70  bject.defineProp
52cd0 65 72 74 79 28 54 6f 6e 65 2e 4d 65 74 65 72 2e  erty(Tone.Meter.
52ce0 70 72 6f 74 6f 74 79 70 65 2c 20 27 76 61 6c 75  prototype, 'valu
52cf0 65 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67  e', {..        g
52d00 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  et: function () 
52d10 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 76  {..            v
52d20 61 72 20 73 69 67 6e 61 6c 20 3d 20 74 68 69 73  ar signal = this
52d30 2e 5f 61 6e 61 6c 79 73 65 72 2e 61 6e 61 6c 79  ._analyser.analy
52d40 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20  se();..         
52d50 20 20 20 69 66 20 28 74 68 69 73 2e 74 79 70 65     if (this.type
52d60 20 3d 3d 3d 20 54 6f 6e 65 2e 4d 65 74 65 72 2e   === Tone.Meter.
52d70 54 79 70 65 2e 4c 65 76 65 6c 29 20 7b 0a 09 20  Type.Level) {.. 
52d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
52d90 2f 72 6d 73 0a 09 20 20 20 20 20 20 20 20 20 20  /rms..          
52da0 20 20 20 20 20 20 76 61 72 20 73 75 6d 20 3d 20        var sum = 
52db0 30 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
52dc0 20 20 20 20 66 6f 72 20 28 76 61 72 20 69 20 3d      for (var i =
52dd0 20 30 3b 20 69 20 3c 20 73 69 67 6e 61 6c 2e 6c   0; i < signal.l
52de0 65 6e 67 74 68 3b 20 69 2b 2b 29 20 7b 0a 09 20  ength; i++) {.. 
52df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
52e00 20 20 20 73 75 6d 20 2b 3d 20 4d 61 74 68 2e 70     sum += Math.p
52e10 6f 77 28 73 69 67 6e 61 6c 5b 69 5d 2c 20 32 29  ow(signal[i], 2)
52e20 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
52e30 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20     }..          
52e40 20 20 20 20 20 20 76 61 72 20 72 6d 73 20 3d 20        var rms = 
52e50 4d 61 74 68 2e 73 71 72 74 28 73 75 6d 20 2f 20  Math.sqrt(sum / 
52e60 73 69 67 6e 61 6c 2e 6c 65 6e 67 74 68 29 3b 0a  signal.length);.
52e70 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
52e80 20 2f 2f 73 6d 6f 6f 74 68 20 69 74 0a 09 20 20   //smooth it..  
52e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6d                rm
52ea0 73 20 3d 20 4d 61 74 68 2e 6d 61 78 28 72 6d 73  s = Math.max(rms
52eb0 2c 20 74 68 69 73 2e 5f 6c 61 73 74 56 61 6c 75  , this._lastValu
52ec0 65 20 2a 20 74 68 69 73 2e 73 6d 6f 6f 74 68 69  e * this.smoothi
52ed0 6e 67 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20  ng);..          
52ee0 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 61 73 74        this._last
52ef0 56 61 6c 75 65 20 3d 20 72 6d 73 3b 0a 09 20 20  Value = rms;..  
52f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
52f10 73 63 61 6c 65 20 69 74 0a 09 20 20 20 20 20 20  scale it..      
52f20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 75 6e            var un
52f30 69 74 79 20 3d 20 30 2e 33 35 3b 0a 09 20 20 20  ity = 0.35;..   
52f40 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72               var
52f50 20 76 61 6c 20 3d 20 72 6d 73 20 2f 20 75 6e 69   val = rms / uni
52f60 74 79 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ty;..           
52f70 20 20 20 20 20 2f 2f 73 63 61 6c 65 20 74 68 65       //scale the
52f80 20 6f 75 74 70 75 74 20 63 75 72 76 65 0a 09 20   output curve.. 
52f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
52fa0 65 74 75 72 6e 20 4d 61 74 68 2e 73 71 72 74 28  eturn Math.sqrt(
52fb0 76 61 6c 29 3b 0a 09 20 20 20 20 20 20 20 20 20  val);..         
52fc0 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20     } else {..   
52fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
52fe0 75 72 6e 20 73 69 67 6e 61 6c 5b 30 5d 3b 0a 09  urn signal[0];..
52ff0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20              }.. 
53000 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29         }..    })
53010 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
53020 20 43 6c 65 61 6e 20 75 70 2e 0a 09 09 20 2a 20   Clean up.... * 
53030 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e   @returns {Tone.
53040 4d 65 74 65 72 7d 20 74 68 69 73 0a 09 09 20 2a  Meter} this... *
53050 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4d 65 74 65  /..    Tone.Mete
53060 72 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70  r.prototype.disp
53070 6f 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  ose = function (
53080 29 20 7b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e  ) {..        Ton
53090 65 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70  e.prototype.disp
530a0 6f 73 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a  ose.call(this);.
530b0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 61  .        this._a
530c0 6e 61 6c 79 73 65 72 2e 64 69 73 70 6f 73 65 28  nalyser.dispose(
530d0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
530e0 2e 5f 61 6e 61 6c 79 73 65 72 20 3d 20 6e 75 6c  ._analyser = nul
530f0 6c 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75  l;..        retu
53100 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b  rn this;..    };
53110 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e  ..    return Ton
53120 65 2e 4d 65 74 65 72 3b 0a 09 7d 29 3b 0a 09 4d  e.Meter;..});..M
53130 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28  odule(function (
53140 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09 20  Tone) {..    .. 
53150 20 20 20 2f 2a 2a 0a 09 09 20 2a 09 40 63 6c 61     /**... *.@cla
53160 73 73 20 20 54 6f 6e 65 2e 53 70 6c 69 74 20 73  ss  Tone.Split s
53170 70 6c 69 74 73 20 61 6e 20 69 6e 63 6f 6d 69 6e  plits an incomin
53180 67 20 73 69 67 6e 61 6c 20 69 6e 74 6f 20 6c 65  g signal into le
53190 66 74 20 61 6e 64 20 72 69 67 68 74 20 63 68 61  ft and right cha
531a0 6e 6e 65 6c 73 2e 0a 09 09 20 2a 09 0a 09 09 20  nnels.... *.... 
531b0 2a 20 20 40 63 6f 6e 73 74 72 75 63 74 6f 72 0a  *  @constructor.
531c0 09 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b  .. *  @extends {
531d0 54 6f 6e 65 7d 0a 09 09 20 2a 20 20 40 65 78 61  Tone}... *  @exa
531e0 6d 70 6c 65 0a 09 09 20 2a 20 76 61 72 20 73 70  mple... * var sp
531f0 6c 69 74 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53  lit = new Tone.S
53200 70 6c 69 74 28 29 3b 0a 09 09 20 2a 20 73 74 65  plit();... * ste
53210 72 65 6f 53 69 67 6e 61 6c 2e 63 6f 6e 6e 65 63  reoSignal.connec
53220 74 28 73 70 6c 69 74 29 3b 0a 09 09 20 2a 2f 0a  t(split);... */.
53230 09 20 20 20 20 54 6f 6e 65 2e 53 70 6c 69 74 20  .    Tone.Split 
53240 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  = function () {.
53250 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 72  .        this.cr
53260 65 61 74 65 49 6e 73 4f 75 74 73 28 30 2c 20 32  eateInsOuts(0, 2
53270 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 20  );..        /** 
53280 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 43  .... *  @type {C
53290 68 61 6e 6e 65 6c 53 70 6c 69 74 74 65 72 4e 6f  hannelSplitterNo
532a0 64 65 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76  de}.... *  @priv
532b0 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  ate.... */..    
532c0 20 20 20 20 74 68 69 73 2e 5f 73 70 6c 69 74 74      this._splitt
532d0 65 72 20 3d 20 74 68 69 73 2e 69 6e 70 75 74 20  er = this.input 
532e0 3d 20 74 68 69 73 2e 63 6f 6e 74 65 78 74 2e 63  = this.context.c
532f0 72 65 61 74 65 43 68 61 6e 6e 65 6c 53 70 6c 69  reateChannelSpli
53300 74 74 65 72 28 32 29 3b 0a 09 20 20 20 20 20 20  tter(2);..      
53310 20 20 2f 2a 2a 20 0a 09 09 09 20 2a 20 20 4c 65    /** .... *  Le
53320 66 74 20 63 68 61 6e 6e 65 6c 20 6f 75 74 70 75  ft channel outpu
53330 74 2e 20 0a 09 09 09 20 2a 20 20 41 6c 69 61 73  t. .... *  Alias
53340 20 66 6f 72 20 3c 63 6f 64 65 3e 6f 75 74 70 75   for <code>outpu
53350 74 5b 30 5d 3c 2f 63 6f 64 65 3e 0a 09 09 09 20  t[0]</code>.... 
53360 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 47  *  @type {Tone.G
53370 61 69 6e 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20  ain}.... */..   
53380 20 20 20 20 20 74 68 69 73 2e 6c 65 66 74 20 3d       this.left =
53390 20 74 68 69 73 2e 6f 75 74 70 75 74 5b 30 5d 20   this.output[0] 
533a0 3d 20 6e 65 77 20 54 6f 6e 65 2e 47 61 69 6e 28  = new Tone.Gain(
533b0 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
533c0 09 09 09 20 2a 20 20 52 69 67 68 74 20 63 68 61  ... *  Right cha
533d0 6e 6e 65 6c 20 6f 75 74 70 75 74 2e 0a 09 09 09  nnel output.....
533e0 20 2a 20 20 41 6c 69 61 73 20 66 6f 72 20 3c 63   *  Alias for <c
533f0 6f 64 65 3e 6f 75 74 70 75 74 5b 31 5d 3c 2f 63  ode>output[1]</c
53400 6f 64 65 3e 0a 09 09 09 20 2a 20 20 40 74 79 70  ode>.... *  @typ
53410 65 20 7b 54 6f 6e 65 2e 47 61 69 6e 7d 0a 09 09  e {Tone.Gain}...
53420 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
53430 69 73 2e 72 69 67 68 74 20 3d 20 74 68 69 73 2e  is.right = this.
53440 6f 75 74 70 75 74 5b 31 5d 20 3d 20 6e 65 77 20  output[1] = new 
53450 54 6f 6e 65 2e 47 61 69 6e 28 29 3b 0a 09 20 20  Tone.Gain();..  
53460 20 20 20 20 20 20 2f 2f 63 6f 6e 6e 65 63 74 69        //connecti
53470 6f 6e 73 0a 09 20 20 20 20 20 20 20 20 74 68 69  ons..        thi
53480 73 2e 5f 73 70 6c 69 74 74 65 72 2e 63 6f 6e 6e  s._splitter.conn
53490 65 63 74 28 74 68 69 73 2e 6c 65 66 74 2c 20 30  ect(this.left, 0
534a0 2c 20 30 29 3b 0a 09 20 20 20 20 20 20 20 20 74  , 0);..        t
534b0 68 69 73 2e 5f 73 70 6c 69 74 74 65 72 2e 63 6f  his._splitter.co
534c0 6e 6e 65 63 74 28 74 68 69 73 2e 72 69 67 68 74  nnect(this.right
534d0 2c 20 31 2c 20 30 29 3b 0a 09 20 20 20 20 7d 3b  , 1, 0);..    };
534e0 0a 09 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e  ..    Tone.exten
534f0 64 28 54 6f 6e 65 2e 53 70 6c 69 74 29 3b 0a 09  d(Tone.Split);..
53500 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 6c      /**... *  Cl
53510 65 61 6e 20 75 70 2e 20 0a 09 09 20 2a 20 20 40  ean up. ... *  @
53520 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 53 70  returns {Tone.Sp
53530 6c 69 74 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a  lit} this... */.
53540 09 20 20 20 20 54 6f 6e 65 2e 53 70 6c 69 74 2e  .    Tone.Split.
53550 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73  prototype.dispos
53560 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  e = function () 
53570 7b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e  {..        Tone.
53580 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73  prototype.dispos
53590 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20  e.call(this);.. 
535a0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 70 6c         this._spl
535b0 69 74 74 65 72 2e 64 69 73 63 6f 6e 6e 65 63 74  itter.disconnect
535c0 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ();..        thi
535d0 73 2e 6c 65 66 74 2e 64 69 73 70 6f 73 65 28 29  s.left.dispose()
535e0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
535f0 6c 65 66 74 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20  left = null;..  
53600 20 20 20 20 20 20 74 68 69 73 2e 72 69 67 68 74        this.right
53610 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20  .dispose();..   
53620 20 20 20 20 20 74 68 69 73 2e 72 69 67 68 74 20       this.right 
53630 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
53640 20 74 68 69 73 2e 5f 73 70 6c 69 74 74 65 72 20   this._splitter 
53650 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
53660 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20   return this;.. 
53670 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74 75 72     };..    retur
53680 6e 20 54 6f 6e 65 2e 53 70 6c 69 74 3b 0a 09 7d  n Tone.Split;..}
53690 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74  );..Module(funct
536a0 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20  ion (Tone) {..  
536b0 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a    ..    /**... *
536c0 20 20 40 63 6c 61 73 73 20 4d 69 64 2f 53 69 64    @class Mid/Sid
536d0 65 20 70 72 6f 63 65 73 73 69 6e 67 20 73 65 70  e processing sep
536e0 61 72 61 74 65 73 20 74 68 65 20 74 68 65 20 27  arates the the '
536f0 6d 69 64 27 20 73 69 67 6e 61 6c 20 0a 09 09 20  mid' signal ... 
53700 2a 20 20 20 20 20 20 20 20 20 28 77 68 69 63 68  *         (which
53710 20 63 6f 6d 65 73 20 6f 75 74 20 6f 66 20 62 6f   comes out of bo
53720 74 68 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20  th the left and 
53730 74 68 65 20 72 69 67 68 74 20 63 68 61 6e 6e 65  the right channe
53740 6c 29 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20  l) ... *        
53750 20 61 6e 64 20 74 68 65 20 27 73 69 64 65 27 20   and the 'side' 
53760 28 77 68 69 63 68 20 6f 6e 6c 79 20 63 6f 6d 65  (which only come
53770 73 20 6f 75 74 20 6f 66 20 74 68 65 20 74 68 65  s out of the the
53780 20 73 69 64 65 20 63 68 61 6e 6e 65 6c 73 29 2e   side channels).
53790 20 3c 62 72 3e 3c 62 72 3e 0a 09 09 20 2a 20 20   <br><br>... *  
537a0 20 20 20 20 20 20 20 3c 63 6f 64 65 3e 0a 09 09         <code>...
537b0 20 2a 20 20 20 20 20 20 20 20 20 4d 69 64 20 3d   *         Mid =
537c0 20 28 4c 65 66 74 2b 52 69 67 68 74 29 2f 73 71   (Left+Right)/sq
537d0 72 74 28 32 29 3b 20 20 20 2f 2f 20 6f 62 74 61  rt(2);   // obta
537e0 69 6e 20 6d 69 64 2d 73 69 67 6e 61 6c 20 66 72  in mid-signal fr
537f0 6f 6d 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  om left and righ
53800 74 3c 62 72 3e 0a 09 09 20 2a 20 20 20 20 20 20  t<br>... *      
53810 20 20 20 53 69 64 65 20 3d 20 28 4c 65 66 74 2d     Side = (Left-
53820 52 69 67 68 74 29 2f 73 71 72 74 28 32 29 3b 20  Right)/sqrt(2); 
53830 20 20 2f 2f 20 6f 62 74 61 69 6e 20 73 69 64 65    // obtain side
53840 2d 73 69 67 6e 61 6c 20 66 72 6f 6d 20 6c 65 66  -signal from lef
53850 74 20 61 6e 64 20 72 69 67 68 3c 62 72 3e 0a 09  t and righ<br>..
53860 09 20 2a 20 20 20 20 20 20 20 20 20 3c 2f 63 6f  . *         </co
53870 64 65 3e 0a 09 09 20 2a 0a 09 09 20 2a 20 20 40  de>... *... *  @
53880 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65 7d 0a 09  extends {Tone}..
53890 09 20 2a 20 20 40 63 6f 6e 73 74 72 75 63 74 6f  . *  @constructo
538a0 72 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  r... */..    Ton
538b0 65 2e 4d 69 64 53 69 64 65 53 70 6c 69 74 20 3d  e.MidSideSplit =
538c0 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
538d0 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 72 65          this.cre
538e0 61 74 65 49 6e 73 4f 75 74 73 28 30 2c 20 32 29  ateInsOuts(0, 2)
538f0 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
53900 09 09 20 2a 20 20 73 70 6c 69 74 20 74 68 65 20  .. *  split the 
53910 69 6e 63 6f 6d 69 6e 67 20 73 69 67 6e 61 6c 20  incoming signal 
53920 69 6e 74 6f 20 6c 65 66 74 20 61 6e 64 20 72 69  into left and ri
53930 67 68 74 20 63 68 61 6e 6e 65 6c 73 0a 09 09 09  ght channels....
53940 20 2a 20 20 40 74 79 70 65 20 20 7b 54 6f 6e 65   *  @type  {Tone
53950 2e 53 70 6c 69 74 7d 0a 09 09 09 20 2a 20 20 40  .Split}.... *  @
53960 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
53970 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 70          this._sp
53980 6c 69 74 20 3d 20 74 68 69 73 2e 69 6e 70 75 74  lit = this.input
53990 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53 70 6c 69   = new Tone.Spli
539a0 74 28 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a  t();..        /*
539b0 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 6d 69 64  *.... *  The mid
539c0 20 73 65 6e 64 2e 20 43 6f 6e 6e 65 63 74 20 74   send. Connect t
539d0 6f 20 6d 69 64 20 70 72 6f 63 65 73 73 69 6e 67  o mid processing
539e0 2e 20 41 6c 69 61 73 20 66 6f 72 0a 09 09 09 20  . Alias for.... 
539f0 2a 20 20 3c 63 6f 64 65 3e 6f 75 74 70 75 74 5b  *  <code>output[
53a00 30 5d 3c 2f 63 6f 64 65 3e 0a 09 09 09 20 2a 20  0]</code>.... * 
53a10 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 45 78 70   @type {Tone.Exp
53a20 72 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  r}.... */..     
53a30 20 20 20 74 68 69 73 2e 6d 69 64 20 3d 20 74 68     this.mid = th
53a40 69 73 2e 6f 75 74 70 75 74 5b 30 5d 20 3d 20 6e  is.output[0] = n
53a50 65 77 20 54 6f 6e 65 2e 45 78 70 72 28 27 28 24  ew Tone.Expr('($
53a60 30 20 2b 20 24 31 29 20 2a 20 24 32 27 29 3b 0a  0 + $1) * $2');.
53a70 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
53a80 20 2a 20 20 54 68 65 20 73 69 64 65 20 6f 75 74   *  The side out
53a90 70 75 74 2e 20 43 6f 6e 6e 65 63 74 20 74 6f 20  put. Connect to 
53aa0 73 69 64 65 20 70 72 6f 63 65 73 73 69 6e 67 2e  side processing.
53ab0 20 41 6c 69 61 73 20 66 6f 72 0a 09 09 09 20 2a   Alias for.... *
53ac0 20 20 3c 63 6f 64 65 3e 6f 75 74 70 75 74 5b 31    <code>output[1
53ad0 5d 3c 2f 63 6f 64 65 3e 0a 09 09 09 20 2a 20 20  ]</code>.... *  
53ae0 40 74 79 70 65 20 7b 54 6f 6e 65 2e 45 78 70 72  @type {Tone.Expr
53af0 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  }.... */..      
53b00 20 20 74 68 69 73 2e 73 69 64 65 20 3d 20 74 68    this.side = th
53b10 69 73 2e 6f 75 74 70 75 74 5b 31 5d 20 3d 20 6e  is.output[1] = n
53b20 65 77 20 54 6f 6e 65 2e 45 78 70 72 28 27 28 24  ew Tone.Expr('($
53b30 30 20 2d 20 24 31 29 20 2a 20 24 32 27 29 3b 0a  0 - $1) * $2');.
53b40 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73  .        this._s
53b50 70 6c 69 74 2e 63 6f 6e 6e 65 63 74 28 74 68 69  plit.connect(thi
53b60 73 2e 6d 69 64 2c 20 30 2c 20 30 29 3b 0a 09 20  s.mid, 0, 0);.. 
53b70 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 70 6c         this._spl
53b80 69 74 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e  it.connect(this.
53b90 6d 69 64 2c 20 31 2c 20 31 29 3b 0a 09 20 20 20  mid, 1, 1);..   
53ba0 20 20 20 20 20 74 68 69 73 2e 5f 73 70 6c 69 74       this._split
53bb0 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e 73 69  .connect(this.si
53bc0 64 65 2c 20 30 2c 20 30 29 3b 0a 09 20 20 20 20  de, 0, 0);..    
53bd0 20 20 20 20 74 68 69 73 2e 5f 73 70 6c 69 74 2e      this._split.
53be0 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e 73 69 64  connect(this.sid
53bf0 65 2c 20 31 2c 20 31 29 3b 0a 09 20 20 20 20 20  e, 1, 1);..     
53c00 20 20 20 73 71 72 74 54 77 6f 2e 63 6f 6e 6e 65     sqrtTwo.conne
53c10 63 74 28 74 68 69 73 2e 6d 69 64 2c 20 30 2c 20  ct(this.mid, 0, 
53c20 32 29 3b 0a 09 20 20 20 20 20 20 20 20 73 71 72  2);..        sqr
53c30 74 54 77 6f 2e 63 6f 6e 6e 65 63 74 28 74 68 69  tTwo.connect(thi
53c40 73 2e 73 69 64 65 2c 20 30 2c 20 32 29 3b 0a 09  s.side, 0, 2);..
53c50 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65      };..    Tone
53c60 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 4d 69 64  .extend(Tone.Mid
53c70 53 69 64 65 53 70 6c 69 74 29 3b 0a 09 20 20 20  SideSplit);..   
53c80 20 2f 2a 2a 0a 09 09 20 2a 20 20 61 20 63 6f 6e   /**... *  a con
53c90 73 74 61 6e 74 20 73 69 67 6e 61 6c 20 65 71 75  stant signal equ
53ca0 61 6c 20 74 6f 20 31 20 2f 20 73 71 72 74 28 32  al to 1 / sqrt(2
53cb0 29 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4e  )... *  @type {N
53cc0 75 6d 62 65 72 7d 0a 09 09 20 2a 20 20 40 73 69  umber}... *  @si
53cd0 67 6e 61 6c 0a 09 09 20 2a 20 20 40 70 72 69 76  gnal... *  @priv
53ce0 61 74 65 0a 09 09 20 2a 20 20 40 73 74 61 74 69  ate... *  @stati
53cf0 63 0a 09 09 20 2a 2f 0a 09 20 20 20 20 76 61 72  c... */..    var
53d00 20 73 71 72 74 54 77 6f 20 3d 20 6e 75 6c 6c 3b   sqrtTwo = null;
53d10 0a 09 20 20 20 20 54 6f 6e 65 2e 5f 69 6e 69 74  ..    Tone._init
53d20 41 75 64 69 6f 43 6f 6e 74 65 78 74 28 66 75 6e  AudioContext(fun
53d30 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
53d40 20 20 20 20 73 71 72 74 54 77 6f 20 3d 20 6e 65      sqrtTwo = ne
53d50 77 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 28 31 20  w Tone.Signal(1 
53d60 2f 20 4d 61 74 68 2e 73 71 72 74 28 32 29 29 3b  / Math.sqrt(2));
53d70 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f  ..    });..    /
53d80 2a 2a 0a 09 09 20 2a 20 20 63 6c 65 61 6e 20 75  **... *  clean u
53d90 70 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73  p... *  @returns
53da0 20 7b 54 6f 6e 65 2e 4d 69 64 53 69 64 65 53 70   {Tone.MidSideSp
53db0 6c 69 74 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a  lit} this... */.
53dc0 09 20 20 20 20 54 6f 6e 65 2e 4d 69 64 53 69 64  .    Tone.MidSid
53dd0 65 53 70 6c 69 74 2e 70 72 6f 74 6f 74 79 70 65  eSplit.prototype
53de0 2e 64 69 73 70 6f 73 65 20 3d 20 66 75 6e 63 74  .dispose = funct
53df0 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
53e00 20 20 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65    Tone.prototype
53e10 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68  .dispose.call(th
53e20 69 73 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  is);..        th
53e30 69 73 2e 6d 69 64 2e 64 69 73 70 6f 73 65 28 29  is.mid.dispose()
53e40 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
53e50 6d 69 64 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  mid = null;..   
53e60 20 20 20 20 20 74 68 69 73 2e 73 69 64 65 2e 64       this.side.d
53e70 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20  ispose();..     
53e80 20 20 20 74 68 69 73 2e 73 69 64 65 20 3d 20 6e     this.side = n
53e90 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ull;..        th
53ea0 69 73 2e 5f 73 70 6c 69 74 2e 64 69 73 70 6f 73  is._split.dispos
53eb0 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  e();..        th
53ec0 69 73 2e 5f 73 70 6c 69 74 20 3d 20 6e 75 6c 6c  is._split = null
53ed0 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
53ee0 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a  n this;..    };.
53ef0 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65  .    return Tone
53f00 2e 4d 69 64 53 69 64 65 53 70 6c 69 74 3b 0a 09  .MidSideSplit;..
53f10 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63  });..Module(func
53f20 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20  tion (Tone) {.. 
53f30 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20     ..    /**... 
53f40 2a 20 20 40 63 6c 61 73 73 20 4d 69 64 2f 53 69  *  @class Mid/Si
53f50 64 65 20 70 72 6f 63 65 73 73 69 6e 67 20 73 65  de processing se
53f60 70 61 72 61 74 65 73 20 74 68 65 20 74 68 65 20  parates the the 
53f70 27 6d 69 64 27 20 73 69 67 6e 61 6c 20 0a 09 09  'mid' signal ...
53f80 20 2a 20 20 20 20 20 20 20 20 20 28 77 68 69 63   *         (whic
53f90 68 20 63 6f 6d 65 73 20 6f 75 74 20 6f 66 20 62  h comes out of b
53fa0 6f 74 68 20 74 68 65 20 6c 65 66 74 20 61 6e 64  oth the left and
53fb0 20 74 68 65 20 72 69 67 68 74 20 63 68 61 6e 6e   the right chann
53fc0 65 6c 29 20 0a 09 09 20 2a 20 20 20 20 20 20 20  el) ... *       
53fd0 20 20 61 6e 64 20 74 68 65 20 27 73 69 64 65 27    and the 'side'
53fe0 20 28 77 68 69 63 68 20 6f 6e 6c 79 20 63 6f 6d   (which only com
53ff0 65 73 20 6f 75 74 20 6f 66 20 74 68 65 20 74 68  es out of the th
54000 65 20 73 69 64 65 20 63 68 61 6e 6e 65 6c 73 29  e side channels)
54010 2e 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  . ... *         
54020 4d 69 64 53 69 64 65 4d 65 72 67 65 20 6d 65 72  MidSideMerge mer
54030 67 65 73 20 74 68 65 20 6d 69 64 20 61 6e 64 20  ges the mid and 
54040 73 69 64 65 20 73 69 67 6e 61 6c 20 61 66 74 65  side signal afte
54050 72 20 74 68 65 79 27 76 65 20 62 65 65 6e 20 73  r they've been s
54060 65 70 65 72 61 74 65 64 0a 09 09 20 2a 20 20 20  eperated... *   
54070 20 20 20 20 20 20 62 79 20 54 6f 6e 65 2e 4d 69        by Tone.Mi
54080 64 53 69 64 65 53 70 6c 69 74 2e 3c 62 72 3e 3c  dSideSplit.<br><
54090 62 72 3e 0a 09 09 20 2a 20 20 20 20 20 20 20 20  br>... *        
540a0 20 3c 63 6f 64 65 3e 0a 09 09 20 2a 20 20 20 20   <code>... *    
540b0 20 20 20 20 20 4c 65 66 74 20 3d 20 28 4d 69 64       Left = (Mid
540c0 2b 53 69 64 65 29 2f 73 71 72 74 28 32 29 3b 20  +Side)/sqrt(2); 
540d0 20 20 2f 2f 20 6f 62 74 61 69 6e 20 6c 65 66 74    // obtain left
540e0 20 73 69 67 6e 61 6c 20 66 72 6f 6d 20 6d 69 64   signal from mid
540f0 20 61 6e 64 20 73 69 64 65 3c 62 72 3e 0a 09 09   and side<br>...
54100 20 2a 20 20 20 20 20 20 20 20 20 52 69 67 68 74   *         Right
54110 20 3d 20 28 4d 69 64 2d 53 69 64 65 29 2f 73 71   = (Mid-Side)/sq
54120 72 74 28 32 29 3b 20 20 20 2f 2f 20 6f 62 74 61  rt(2);   // obta
54130 69 6e 20 72 69 67 68 74 20 73 69 67 6e 61 6c 20  in right signal 
54140 66 72 6f 6d 20 6d 69 64 20 61 6e 64 20 73 69 64  from mid and sid
54150 65 3c 62 72 3e 0a 09 09 20 2a 20 20 20 20 20 20  e<br>... *      
54160 20 20 20 3c 2f 63 6f 64 65 3e 0a 09 09 20 2a 0a     </code>... *.
54170 09 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b  .. *  @extends {
54180 54 6f 6e 65 2e 53 74 65 72 65 6f 45 66 66 65 63  Tone.StereoEffec
54190 74 7d 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 72  t}... *  @constr
541a0 75 63 74 6f 72 0a 09 09 20 2a 2f 0a 09 20 20 20  uctor... */..   
541b0 20 54 6f 6e 65 2e 4d 69 64 53 69 64 65 4d 65 72   Tone.MidSideMer
541c0 67 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  ge = function ()
541d0 20 7b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73   {..        this
541e0 2e 63 72 65 61 74 65 49 6e 73 4f 75 74 73 28 32  .createInsOuts(2
541f0 2c 20 30 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  , 0);..        /
54200 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 6d 69  **.... *  The mi
54210 64 20 73 69 67 6e 61 6c 20 69 6e 70 75 74 2e 20  d signal input. 
54220 41 6c 69 61 73 20 66 6f 72 0a 09 09 09 20 2a 20  Alias for.... * 
54230 20 3c 63 6f 64 65 3e 69 6e 70 75 74 5b 30 5d 3c   <code>input[0]<
54240 2f 63 6f 64 65 3e 0a 09 09 09 20 2a 20 20 40 74  /code>.... *  @t
54250 79 70 65 20 20 7b 54 6f 6e 65 2e 47 61 69 6e 7d  ype  {Tone.Gain}
54260 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
54270 20 74 68 69 73 2e 6d 69 64 20 3d 20 74 68 69 73   this.mid = this
54280 2e 69 6e 70 75 74 5b 30 5d 20 3d 20 6e 65 77 20  .input[0] = new 
54290 54 6f 6e 65 2e 47 61 69 6e 28 29 3b 0a 09 20 20  Tone.Gain();..  
542a0 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
542b0 20 72 65 63 6f 6d 62 69 6e 65 20 74 68 65 20 6d   recombine the m
542c0 69 64 2f 73 69 64 65 20 69 6e 74 6f 20 4c 65 66  id/side into Lef
542d0 74 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b  t.... *  @type {
542e0 54 6f 6e 65 2e 45 78 70 72 7d 0a 09 09 09 20 2a  Tone.Expr}.... *
542f0 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a    @private.... *
54300 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
54310 5f 6c 65 66 74 20 3d 20 6e 65 77 20 54 6f 6e 65  _left = new Tone
54320 2e 45 78 70 72 28 27 28 24 30 20 2b 20 24 31 29  .Expr('($0 + $1)
54330 20 2a 20 24 32 27 29 3b 0a 09 20 20 20 20 20 20   * $2');..      
54340 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65    /**.... *  The
54350 20 73 69 64 65 20 73 69 67 6e 61 6c 20 69 6e 70   side signal inp
54360 75 74 2e 20 41 6c 69 61 73 20 66 6f 72 0a 09 09  ut. Alias for...
54370 09 20 2a 20 20 3c 63 6f 64 65 3e 69 6e 70 75 74  . *  <code>input
54380 5b 31 5d 3c 2f 63 6f 64 65 3e 0a 09 09 09 20 2a  [1]</code>.... *
54390 20 20 40 74 79 70 65 20 20 7b 54 6f 6e 65 2e 47    @type  {Tone.G
543a0 61 69 6e 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20  ain}.... */..   
543b0 20 20 20 20 20 74 68 69 73 2e 73 69 64 65 20 3d       this.side =
543c0 20 74 68 69 73 2e 69 6e 70 75 74 5b 31 5d 20 3d   this.input[1] =
543d0 20 6e 65 77 20 54 6f 6e 65 2e 47 61 69 6e 28 29   new Tone.Gain()
543e0 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
543f0 09 09 20 2a 20 20 72 65 63 6f 6d 62 69 6e 65 20  .. *  recombine 
54400 74 68 65 20 6d 69 64 2f 73 69 64 65 20 69 6e 74  the mid/side int
54410 6f 20 52 69 67 68 74 0a 09 09 09 20 2a 20 20 40  o Right.... *  @
54420 74 79 70 65 20 7b 54 6f 6e 65 2e 45 78 70 72 7d  type {Tone.Expr}
54430 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  .... *  @private
54440 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
54450 20 74 68 69 73 2e 5f 72 69 67 68 74 20 3d 20 6e   this._right = n
54460 65 77 20 54 6f 6e 65 2e 45 78 70 72 28 27 28 24  ew Tone.Expr('($
54470 30 20 2d 20 24 31 29 20 2a 20 24 32 27 29 3b 0a  0 - $1) * $2');.
54480 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
54490 20 2a 20 20 4d 65 72 67 65 20 74 68 65 20 6c 65   *  Merge the le
544a0 66 74 2f 72 69 67 68 74 20 73 69 67 6e 61 6c 20  ft/right signal 
544b0 62 61 63 6b 20 69 6e 74 6f 20 61 20 73 74 65 72  back into a ster
544c0 65 6f 20 73 69 67 6e 61 6c 2e 0a 09 09 09 20 2a  eo signal..... *
544d0 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 4d 65    @type {Tone.Me
544e0 72 67 65 7d 0a 09 09 09 20 2a 20 20 40 70 72 69  rge}.... *  @pri
544f0 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20  vate.... */..   
54500 20 20 20 20 20 74 68 69 73 2e 5f 6d 65 72 67 65       this._merge
54510 20 3d 20 74 68 69 73 2e 6f 75 74 70 75 74 20 3d   = this.output =
54520 20 6e 65 77 20 54 6f 6e 65 2e 4d 65 72 67 65 28   new Tone.Merge(
54530 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
54540 2e 6d 69 64 2e 63 6f 6e 6e 65 63 74 28 74 68 69  .mid.connect(thi
54550 73 2e 5f 6c 65 66 74 2c 20 30 2c 20 30 29 3b 0a  s._left, 0, 0);.
54560 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 69  .        this.si
54570 64 65 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e  de.connect(this.
54580 5f 6c 65 66 74 2c 20 30 2c 20 31 29 3b 0a 09 20  _left, 0, 1);.. 
54590 20 20 20 20 20 20 20 74 68 69 73 2e 6d 69 64 2e         this.mid.
545a0 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e 5f 72 69  connect(this._ri
545b0 67 68 74 2c 20 30 2c 20 30 29 3b 0a 09 20 20 20  ght, 0, 0);..   
545c0 20 20 20 20 20 74 68 69 73 2e 73 69 64 65 2e 63       this.side.c
545d0 6f 6e 6e 65 63 74 28 74 68 69 73 2e 5f 72 69 67  onnect(this._rig
545e0 68 74 2c 20 30 2c 20 31 29 3b 0a 09 20 20 20 20  ht, 0, 1);..    
545f0 20 20 20 20 74 68 69 73 2e 5f 6c 65 66 74 2e 63      this._left.c
54600 6f 6e 6e 65 63 74 28 74 68 69 73 2e 5f 6d 65 72  onnect(this._mer
54610 67 65 2c 20 30 2c 20 30 29 3b 0a 09 20 20 20 20  ge, 0, 0);..    
54620 20 20 20 20 74 68 69 73 2e 5f 72 69 67 68 74 2e      this._right.
54630 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e 5f 6d 65  connect(this._me
54640 72 67 65 2c 20 30 2c 20 31 29 3b 0a 09 20 20 20  rge, 0, 1);..   
54650 20 20 20 20 20 73 71 72 74 54 77 6f 2e 63 6f 6e       sqrtTwo.con
54660 6e 65 63 74 28 74 68 69 73 2e 5f 6c 65 66 74 2c  nect(this._left,
54670 20 30 2c 20 32 29 3b 0a 09 20 20 20 20 20 20 20   0, 2);..       
54680 20 73 71 72 74 54 77 6f 2e 63 6f 6e 6e 65 63 74   sqrtTwo.connect
54690 28 74 68 69 73 2e 5f 72 69 67 68 74 2c 20 30 2c  (this._right, 0,
546a0 20 32 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20   2);..    };..  
546b0 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f    Tone.extend(To
546c0 6e 65 2e 4d 69 64 53 69 64 65 4d 65 72 67 65 29  ne.MidSideMerge)
546d0 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
546e0 20 41 20 63 6f 6e 73 74 61 6e 74 20 73 69 67 6e   A constant sign
546f0 61 6c 20 65 71 75 61 6c 20 74 6f 20 31 20 2f 20  al equal to 1 / 
54700 73 71 72 74 28 32 29 2e 0a 09 09 20 2a 20 20 40  sqrt(2).... *  @
54710 74 79 70 65 20 7b 4e 75 6d 62 65 72 7d 0a 09 09  type {Number}...
54720 20 2a 20 20 40 73 69 67 6e 61 6c 0a 09 09 20 2a   *  @signal... *
54730 20 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a 20    @private... * 
54740 20 40 73 74 61 74 69 63 0a 09 09 20 2a 2f 0a 09   @static... */..
54750 20 20 20 20 76 61 72 20 73 71 72 74 54 77 6f 20      var sqrtTwo 
54760 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 54 6f 6e  = null;..    Ton
54770 65 2e 5f 69 6e 69 74 41 75 64 69 6f 43 6f 6e 74  e._initAudioCont
54780 65 78 74 28 66 75 6e 63 74 69 6f 6e 20 28 29 20  ext(function () 
54790 7b 0a 09 20 20 20 20 20 20 20 20 73 71 72 74 54  {..        sqrtT
547a0 77 6f 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53 69  wo = new Tone.Si
547b0 67 6e 61 6c 28 31 20 2f 20 4d 61 74 68 2e 73 71  gnal(1 / Math.sq
547c0 72 74 28 32 29 29 3b 0a 09 20 20 20 20 7d 29 3b  rt(2));..    });
547d0 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
547e0 63 6c 65 61 6e 20 75 70 0a 09 09 20 2a 20 20 40  clean up... *  @
547f0 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 4d 69  returns {Tone.Mi
54800 64 53 69 64 65 4d 65 72 67 65 7d 20 74 68 69 73  dSideMerge} this
54810 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
54820 2e 4d 69 64 53 69 64 65 4d 65 72 67 65 2e 70 72  .MidSideMerge.pr
54830 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20  ototype.dispose 
54840 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  = function () {.
54850 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 70 72  .        Tone.pr
54860 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 2e  ototype.dispose.
54870 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20 20  call(this);..   
54880 20 20 20 20 20 74 68 69 73 2e 6d 69 64 2e 64 69       this.mid.di
54890 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
548a0 20 20 74 68 69 73 2e 6d 69 64 20 3d 20 6e 75 6c    this.mid = nul
548b0 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  l;..        this
548c0 2e 73 69 64 65 2e 64 69 73 70 6f 73 65 28 29 3b  .side.dispose();
548d0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 73  ..        this.s
548e0 69 64 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  ide = null;..   
548f0 20 20 20 20 20 74 68 69 73 2e 5f 6c 65 66 74 2e       this._left.
54900 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20  dispose();..    
54910 20 20 20 20 74 68 69 73 2e 5f 6c 65 66 74 20 3d      this._left =
54920 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
54930 74 68 69 73 2e 5f 72 69 67 68 74 2e 64 69 73 70  this._right.disp
54940 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ose();..        
54950 74 68 69 73 2e 5f 72 69 67 68 74 20 3d 20 6e 75  this._right = nu
54960 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ll;..        thi
54970 73 2e 5f 6d 65 72 67 65 2e 64 69 73 70 6f 73 65  s._merge.dispose
54980 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ();..        thi
54990 73 2e 5f 6d 65 72 67 65 20 3d 20 6e 75 6c 6c 3b  s._merge = null;
549a0 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
549b0 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09   this;..    };..
549c0 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e      return Tone.
549d0 4d 69 64 53 69 64 65 4d 65 72 67 65 3b 0a 09 7d  MidSideMerge;..}
549e0 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74  );..Module(funct
549f0 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20  ion (Tone) {..  
54a00 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a    ..    /**... *
54a10 20 20 40 63 6c 61 73 73 20 54 6f 6e 65 2e 4d 69    @class Tone.Mi
54a20 64 53 69 64 65 43 6f 6d 70 72 65 73 73 6f 72 20  dSideCompressor 
54a30 61 70 70 6c 69 65 73 20 74 77 6f 20 64 69 66 66  applies two diff
54a40 65 72 65 6e 74 20 63 6f 6d 70 72 65 73 73 6f 72  erent compressor
54a50 73 20 74 6f 20 74 68 65 20 6d 69 64 0a 09 09 20  s to the mid... 
54a60 2a 20 20 20 20 20 20 20 20 20 61 6e 64 20 73 69  *         and si
54a70 64 65 20 73 69 67 6e 61 6c 20 63 6f 6d 70 6f 6e  de signal compon
54a80 65 6e 74 73 2e 20 53 65 65 20 54 6f 6e 65 2e 4d  ents. See Tone.M
54a90 69 64 53 69 64 65 53 70 6c 69 74 2e 20 0a 09 09  idSideSplit. ...
54aa0 20 2a 0a 09 09 20 2a 20 20 40 65 78 74 65 6e 64   *... *  @extend
54ab0 73 20 7b 54 6f 6e 65 7d 0a 09 09 20 2a 20 20 40  s {Tone}... *  @
54ac0 70 61 72 61 6d 20 7b 4f 62 6a 65 63 74 7d 20 6f  param {Object} o
54ad0 70 74 69 6f 6e 73 20 54 68 65 20 6f 70 74 69 6f  ptions The optio
54ae0 6e 73 20 74 68 61 74 20 61 72 65 20 70 61 73 73  ns that are pass
54af0 65 64 20 74 6f 20 74 68 65 20 6d 69 64 20 61 6e  ed to the mid an
54b00 64 20 73 69 64 65 0a 09 09 20 2a 20 20 20 20 20  d side... *     
54b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
54b20 20 20 20 20 20 63 6f 6d 70 72 65 73 73 6f 72 73       compressors
54b30 2e 20 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 72  . ... *  @constr
54b40 75 63 74 6f 72 0a 09 09 20 2a 2f 0a 09 20 20 20  uctor... */..   
54b50 20 54 6f 6e 65 2e 4d 69 64 53 69 64 65 43 6f 6d   Tone.MidSideCom
54b60 70 72 65 73 73 6f 72 20 3d 20 66 75 6e 63 74 69  pressor = functi
54b70 6f 6e 20 28 6f 70 74 69 6f 6e 73 29 20 7b 0a 09  on (options) {..
54b80 20 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 20          options 
54b90 3d 20 74 68 69 73 2e 64 65 66 61 75 6c 74 41 72  = this.defaultAr
54ba0 67 28 6f 70 74 69 6f 6e 73 2c 20 54 6f 6e 65 2e  g(options, Tone.
54bb0 4d 69 64 53 69 64 65 43 6f 6d 70 72 65 73 73 6f  MidSideCompresso
54bc0 72 2e 64 65 66 61 75 6c 74 73 29 3b 0a 09 20 20  r.defaults);..  
54bd0 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
54be0 20 74 68 65 20 6d 69 64 2f 73 69 64 65 20 73 70   the mid/side sp
54bf0 6c 69 74 0a 09 09 09 20 2a 20 20 40 74 79 70 65  lit.... *  @type
54c00 20 20 7b 54 6f 6e 65 2e 4d 69 64 53 69 64 65 53    {Tone.MidSideS
54c10 70 6c 69 74 7d 0a 09 09 09 20 2a 20 20 40 70 72  plit}.... *  @pr
54c20 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20  ivate.... */..  
54c30 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 69 64 53        this._midS
54c40 69 64 65 53 70 6c 69 74 20 3d 20 74 68 69 73 2e  ideSplit = this.
54c50 69 6e 70 75 74 20 3d 20 6e 65 77 20 54 6f 6e 65  input = new Tone
54c60 2e 4d 69 64 53 69 64 65 53 70 6c 69 74 28 29 3b  .MidSideSplit();
54c70 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
54c80 09 20 2a 20 20 74 68 65 20 6d 69 64 2f 73 69 64  . *  the mid/sid
54c90 65 20 72 65 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a  e recombination.
54ca0 09 09 09 20 2a 20 20 40 74 79 70 65 20 20 7b 54  ... *  @type  {T
54cb0 6f 6e 65 2e 4d 69 64 53 69 64 65 4d 65 72 67 65  one.MidSideMerge
54cc0 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  }.... *  @privat
54cd0 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
54ce0 20 20 74 68 69 73 2e 5f 6d 69 64 53 69 64 65 4d    this._midSideM
54cf0 65 72 67 65 20 3d 20 74 68 69 73 2e 6f 75 74 70  erge = this.outp
54d00 75 74 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4d 69  ut = new Tone.Mi
54d10 64 53 69 64 65 4d 65 72 67 65 28 29 3b 0a 09 20  dSideMerge();.. 
54d20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
54d30 20 20 54 68 65 20 63 6f 6d 70 72 65 73 73 6f 72    The compressor
54d40 20 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20   applied to the 
54d50 6d 69 64 20 73 69 67 6e 61 6c 0a 09 09 09 20 2a  mid signal.... *
54d60 20 20 40 74 79 70 65 20 20 7b 54 6f 6e 65 2e 43    @type  {Tone.C
54d70 6f 6d 70 72 65 73 73 6f 72 7d 0a 09 09 09 20 2a  ompressor}.... *
54d80 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
54d90 6d 69 64 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 43  mid = new Tone.C
54da0 6f 6d 70 72 65 73 73 6f 72 28 6f 70 74 69 6f 6e  ompressor(option
54db0 73 2e 6d 69 64 29 3b 0a 09 20 20 20 20 20 20 20  s.mid);..       
54dc0 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20   /**.... *  The 
54dd0 63 6f 6d 70 72 65 73 73 6f 72 20 61 70 70 6c 69  compressor appli
54de0 65 64 20 74 6f 20 74 68 65 20 73 69 64 65 20 73  ed to the side s
54df0 69 67 6e 61 6c 0a 09 09 09 20 2a 20 20 40 74 79  ignal.... *  @ty
54e00 70 65 20 20 7b 54 6f 6e 65 2e 43 6f 6d 70 72 65  pe  {Tone.Compre
54e10 73 73 6f 72 7d 0a 09 09 09 20 2a 2f 0a 09 20 20  ssor}.... */..  
54e20 20 20 20 20 20 20 74 68 69 73 2e 73 69 64 65 20        this.side 
54e30 3d 20 6e 65 77 20 54 6f 6e 65 2e 43 6f 6d 70 72  = new Tone.Compr
54e40 65 73 73 6f 72 28 6f 70 74 69 6f 6e 73 2e 73 69  essor(options.si
54e50 64 65 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  de);..        th
54e60 69 73 2e 5f 6d 69 64 53 69 64 65 53 70 6c 69 74  is._midSideSplit
54e70 2e 6d 69 64 2e 63 68 61 69 6e 28 74 68 69 73 2e  .mid.chain(this.
54e80 6d 69 64 2c 20 74 68 69 73 2e 5f 6d 69 64 53 69  mid, this._midSi
54e90 64 65 4d 65 72 67 65 2e 6d 69 64 29 3b 0a 09 20  deMerge.mid);.. 
54ea0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 69 64         this._mid
54eb0 53 69 64 65 53 70 6c 69 74 2e 73 69 64 65 2e 63  SideSplit.side.c
54ec0 68 61 69 6e 28 74 68 69 73 2e 73 69 64 65 2c 20  hain(this.side, 
54ed0 74 68 69 73 2e 5f 6d 69 64 53 69 64 65 4d 65 72  this._midSideMer
54ee0 67 65 2e 73 69 64 65 29 3b 0a 09 20 20 20 20 20  ge.side);..     
54ef0 20 20 20 74 68 69 73 2e 5f 72 65 61 64 4f 6e 6c     this._readOnl
54f00 79 28 5b 0a 09 20 20 20 20 20 20 20 20 20 20 20  y([..           
54f10 20 27 6d 69 64 27 2c 0a 09 20 20 20 20 20 20 20   'mid',..       
54f20 20 20 20 20 20 27 73 69 64 65 27 0a 09 20 20 20       'side'..   
54f30 20 20 20 20 20 5d 29 3b 0a 09 20 20 20 20 7d 3b       ]);..    };
54f40 0a 09 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e  ..    Tone.exten
54f50 64 28 54 6f 6e 65 2e 4d 69 64 53 69 64 65 43 6f  d(Tone.MidSideCo
54f60 6d 70 72 65 73 73 6f 72 29 3b 0a 09 20 20 20 20  mpressor);..    
54f70 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74  /**... *  @const
54f80 0a 09 09 20 2a 20 20 40 73 74 61 74 69 63 0a 09  ... *  @static..
54f90 09 20 2a 20 20 40 74 79 70 65 20 7b 4f 62 6a 65  . *  @type {Obje
54fa0 63 74 7d 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  ct}... */..    T
54fb0 6f 6e 65 2e 4d 69 64 53 69 64 65 43 6f 6d 70 72  one.MidSideCompr
54fc0 65 73 73 6f 72 2e 64 65 66 61 75 6c 74 73 20 3d  essor.defaults =
54fd0 20 7b 0a 09 20 20 20 20 20 20 20 20 27 6d 69 64   {..        'mid
54fe0 27 3a 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  ': {..          
54ff0 20 20 27 72 61 74 69 6f 27 3a 20 33 2c 0a 09 20    'ratio': 3,.. 
55000 20 20 20 20 20 20 20 20 20 20 20 27 74 68 72 65             'thre
55010 73 68 6f 6c 64 27 3a 20 2d 32 34 2c 0a 09 20 20  shold': -24,..  
55020 20 20 20 20 20 20 20 20 20 20 27 72 65 6c 65 61            'relea
55030 73 65 27 3a 20 30 2e 30 33 2c 0a 09 20 20 20 20  se': 0.03,..    
55040 20 20 20 20 20 20 20 20 27 61 74 74 61 63 6b 27          'attack'
55050 3a 20 30 2e 30 32 2c 0a 09 20 20 20 20 20 20 20  : 0.02,..       
55060 20 20 20 20 20 27 6b 6e 65 65 27 3a 20 31 36 0a       'knee': 16.
55070 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20  .        },..   
55080 20 20 20 20 20 27 73 69 64 65 27 3a 20 7b 0a 09       'side': {..
55090 20 20 20 20 20 20 20 20 20 20 20 20 27 72 61 74              'rat
550a0 69 6f 27 3a 20 36 2c 0a 09 20 20 20 20 20 20 20  io': 6,..       
550b0 20 20 20 20 20 27 74 68 72 65 73 68 6f 6c 64 27       'threshold'
550c0 3a 20 2d 33 30 2c 0a 09 20 20 20 20 20 20 20 20  : -30,..        
550d0 20 20 20 20 27 72 65 6c 65 61 73 65 27 3a 20 30      'release': 0
550e0 2e 32 35 2c 0a 09 20 20 20 20 20 20 20 20 20 20  .25,..          
550f0 20 20 27 61 74 74 61 63 6b 27 3a 20 30 2e 30 33    'attack': 0.03
55100 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
55110 6b 6e 65 65 27 3a 20 31 30 0a 09 20 20 20 20 20  knee': 10..     
55120 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a 09 20 20     }..    };..  
55130 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 6c 65 61    /**... *  Clea
55140 6e 20 75 70 2e 0a 09 09 20 2a 20 20 40 72 65 74  n up.... *  @ret
55150 75 72 6e 73 20 7b 54 6f 6e 65 2e 4d 69 64 53 69  urns {Tone.MidSi
55160 64 65 43 6f 6d 70 72 65 73 73 6f 72 7d 20 74 68  deCompressor} th
55170 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  is... */..    To
55180 6e 65 2e 4d 69 64 53 69 64 65 43 6f 6d 70 72 65  ne.MidSideCompre
55190 73 73 6f 72 2e 70 72 6f 74 6f 74 79 70 65 2e 64  ssor.prototype.d
551a0 69 73 70 6f 73 65 20 3d 20 66 75 6e 63 74 69 6f  ispose = functio
551b0 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
551c0 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e 64  Tone.prototype.d
551d0 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69 73  ispose.call(this
551e0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
551f0 2e 5f 77 72 69 74 61 62 6c 65 28 5b 0a 09 20 20  ._writable([..  
55200 20 20 20 20 20 20 20 20 20 20 27 6d 69 64 27 2c            'mid',
55210 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 73  ..            's
55220 69 64 65 27 0a 09 20 20 20 20 20 20 20 20 5d 29  ide'..        ])
55230 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
55240 6d 69 64 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09  mid.dispose();..
55250 20 20 20 20 20 20 20 20 74 68 69 73 2e 6d 69 64          this.mid
55260 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
55270 20 20 74 68 69 73 2e 73 69 64 65 2e 64 69 73 70    this.side.disp
55280 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ose();..        
55290 74 68 69 73 2e 73 69 64 65 20 3d 20 6e 75 6c 6c  this.side = null
552a0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
552b0 5f 6d 69 64 53 69 64 65 53 70 6c 69 74 2e 64 69  _midSideSplit.di
552c0 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
552d0 20 20 74 68 69 73 2e 5f 6d 69 64 53 69 64 65 53    this._midSideS
552e0 70 6c 69 74 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20  plit = null;..  
552f0 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 69 64 53        this._midS
55300 69 64 65 4d 65 72 67 65 2e 64 69 73 70 6f 73 65  ideMerge.dispose
55310 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ();..        thi
55320 73 2e 5f 6d 69 64 53 69 64 65 4d 65 72 67 65 20  s._midSideMerge 
55330 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
55340 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20   return this;.. 
55350 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74 75 72     };..    retur
55360 6e 20 54 6f 6e 65 2e 4d 69 64 53 69 64 65 43 6f  n Tone.MidSideCo
55370 6d 70 72 65 73 73 6f 72 3b 0a 09 7d 29 3b 0a 09  mpressor;..});..
55380 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20  Module(function 
55390 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09  (Tone) {..    ..
553a0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63      /**... *  @c
553b0 6c 61 73 73 20 54 6f 6e 65 2e 4d 6f 6e 6f 20 63  lass Tone.Mono c
553c0 6f 65 72 63 65 73 20 74 68 65 20 69 6e 63 6f 6d  oerces the incom
553d0 69 6e 67 20 6d 6f 6e 6f 20 6f 72 20 73 74 65 72  ing mono or ster
553e0 65 6f 20 73 69 67 6e 61 6c 20 69 6e 74 6f 20 61  eo signal into a
553f0 20 6d 6f 6e 6f 20 73 69 67 6e 61 6c 0a 09 09 20   mono signal... 
55400 2a 20 20 20 20 20 20 20 20 20 77 68 65 72 65 20  *         where 
55410 62 6f 74 68 20 6c 65 66 74 20 61 6e 64 20 72 69  both left and ri
55420 67 68 74 20 63 68 61 6e 6e 65 6c 73 20 68 61 76  ght channels hav
55430 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  e the same value
55440 2e 20 54 68 69 73 20 63 61 6e 20 62 65 20 75 73  . This can be us
55450 65 66 75 6c 20 0a 09 09 20 2a 20 20 20 20 20 20  eful ... *      
55460 20 20 20 66 6f 72 20 5b 73 74 65 72 65 6f 20 69     for [stereo i
55470 6d 61 67 69 6e 67 5d 28 68 74 74 70 73 3a 2f 2f  maging](https://
55480 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67  en.wikipedia.org
55490 2f 77 69 6b 69 2f 53 74 65 72 65 6f 5f 69 6d 61  /wiki/Stereo_ima
554a0 67 69 6e 67 29 2e 0a 09 09 20 2a 0a 09 09 20 2a  ging).... *... *
554b0 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65    @extends {Tone
554c0 7d 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 72 75  }... *  @constru
554d0 63 74 6f 72 0a 09 09 20 2a 2f 0a 09 20 20 20 20  ctor... */..    
554e0 54 6f 6e 65 2e 4d 6f 6e 6f 20 3d 20 66 75 6e 63  Tone.Mono = func
554f0 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
55500 20 20 20 74 68 69 73 2e 63 72 65 61 74 65 49 6e     this.createIn
55510 73 4f 75 74 73 28 31 2c 20 30 29 3b 0a 09 20 20  sOuts(1, 0);..  
55520 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
55530 20 6d 65 72 67 65 20 74 68 65 20 73 69 67 6e 61   merge the signa
55540 6c 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b  l.... *  @type {
55550 54 6f 6e 65 2e 4d 65 72 67 65 7d 0a 09 09 09 20  Tone.Merge}.... 
55560 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20  *  @private.... 
55570 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
55580 2e 5f 6d 65 72 67 65 20 3d 20 74 68 69 73 2e 6f  ._merge = this.o
55590 75 74 70 75 74 20 3d 20 6e 65 77 20 54 6f 6e 65  utput = new Tone
555a0 2e 4d 65 72 67 65 28 29 3b 0a 09 20 20 20 20 20  .Merge();..     
555b0 20 20 20 74 68 69 73 2e 69 6e 70 75 74 2e 63 6f     this.input.co
555c0 6e 6e 65 63 74 28 74 68 69 73 2e 5f 6d 65 72 67  nnect(this._merg
555d0 65 2c 20 30 2c 20 30 29 3b 0a 09 20 20 20 20 20  e, 0, 0);..     
555e0 20 20 20 74 68 69 73 2e 69 6e 70 75 74 2e 63 6f     this.input.co
555f0 6e 6e 65 63 74 28 74 68 69 73 2e 5f 6d 65 72 67  nnect(this._merg
55600 65 2c 20 30 2c 20 31 29 3b 0a 09 20 20 20 20 20  e, 0, 1);..     
55610 20 20 20 74 68 69 73 2e 69 6e 70 75 74 2e 67 61     this.input.ga
55620 69 6e 2e 76 61 6c 75 65 20 3d 20 74 68 69 73 2e  in.value = this.
55630 64 62 54 6f 47 61 69 6e 28 2d 31 30 29 3b 0a 09  dbToGain(-10);..
55640 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65      };..    Tone
55650 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 4d 6f 6e  .extend(Tone.Mon
55660 6f 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  o);..    /**... 
55670 2a 20 20 63 6c 65 61 6e 20 75 70 0a 09 09 20 2a  *  clean up... *
55680 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65    @returns {Tone
55690 2e 4d 6f 6e 6f 7d 20 74 68 69 73 0a 09 09 20 2a  .Mono} this... *
556a0 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4d 6f 6e 6f  /..    Tone.Mono
556b0 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f  .prototype.dispo
556c0 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  se = function ()
556d0 20 7b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65   {..        Tone
556e0 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f  .prototype.dispo
556f0 73 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09  se.call(this);..
55700 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 65          this._me
55710 72 67 65 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09  rge.dispose();..
55720 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 65          this._me
55730 72 67 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  rge = null;..   
55740 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
55750 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 72  ;..    };..    r
55760 65 74 75 72 6e 20 54 6f 6e 65 2e 4d 6f 6e 6f 3b  eturn Tone.Mono;
55770 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75  ..});..Module(fu
55780 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a  nction (Tone) {.
55790 09 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09  .    ..    /**..
557a0 09 20 2a 20 20 40 63 6c 61 73 73 20 41 20 63 6f  . *  @class A co
557b0 6d 70 72 65 73 73 6f 72 20 77 69 74 68 20 73 65  mpressor with se
557c0 70 65 72 61 74 65 20 63 6f 6e 74 72 6f 6c 73 20  perate controls 
557d0 6f 76 65 72 20 6c 6f 77 2f 6d 69 64 2f 68 69 67  over low/mid/hig
557e0 68 20 64 79 6e 61 6d 69 63 73 0a 09 09 20 2a 0a  h dynamics... *.
557f0 09 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b  .. *  @extends {
55800 54 6f 6e 65 7d 0a 09 09 20 2a 20 20 40 63 6f 6e  Tone}... *  @con
55810 73 74 72 75 63 74 6f 72 0a 09 09 20 2a 20 20 40  structor... *  @
55820 70 61 72 61 6d 20 7b 4f 62 6a 65 63 74 7d 20 6f  param {Object} o
55830 70 74 69 6f 6e 73 20 54 68 65 20 6c 6f 77 2f 6d  ptions The low/m
55840 69 64 2f 68 69 67 68 20 63 6f 6d 70 72 65 73 73  id/high compress
55850 6f 72 20 73 65 74 74 69 6e 67 73 2e 0a 09 09 20  or settings.... 
55860 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a  *  @example... *
55870 20 20 76 61 72 20 6d 75 6c 74 69 62 61 6e 64 20    var multiband 
55880 3d 20 6e 65 77 20 54 6f 6e 65 2e 4d 75 6c 74 69  = new Tone.Multi
55890 62 61 6e 64 43 6f 6d 70 72 65 73 73 6f 72 28 7b  bandCompressor({
558a0 0a 09 09 20 2a 20 20 09 22 6c 6f 77 46 72 65 71  ... *  ."lowFreq
558b0 75 65 6e 63 79 22 20 3a 20 32 30 30 2c 0a 09 09  uency" : 200,...
558c0 20 2a 20 20 09 22 68 69 67 68 46 72 65 71 75 65   *  ."highFreque
558d0 6e 63 79 22 20 3a 20 31 33 30 30 0a 09 09 20 2a  ncy" : 1300... *
558e0 20 20 09 22 6c 6f 77 22 20 3a 20 7b 0a 09 09 20    ."low" : {... 
558f0 2a 20 20 09 09 22 74 68 72 65 73 68 6f 6c 64 22  *  .."threshold"
55900 20 3a 20 2d 31 32 0a 09 09 20 2a 20 20 09 7d 0a   : -12... *  .}.
55910 09 09 20 2a 20 20 7d 29 0a 09 09 20 2a 2f 0a 09  .. *  })... */..
55920 20 20 20 20 54 6f 6e 65 2e 4d 75 6c 74 69 62 61      Tone.Multiba
55930 6e 64 43 6f 6d 70 72 65 73 73 6f 72 20 3d 20 66  ndCompressor = f
55940 75 6e 63 74 69 6f 6e 20 28 6f 70 74 69 6f 6e 73  unction (options
55950 29 20 7b 0a 09 20 20 20 20 20 20 20 20 6f 70 74  ) {..        opt
55960 69 6f 6e 73 20 3d 20 74 68 69 73 2e 64 65 66 61  ions = this.defa
55970 75 6c 74 41 72 67 28 61 72 67 75 6d 65 6e 74 73  ultArg(arguments
55980 2c 20 54 6f 6e 65 2e 4d 75 6c 74 69 62 61 6e 64  , Tone.Multiband
55990 43 6f 6d 70 72 65 73 73 6f 72 2e 64 65 66 61 75  Compressor.defau
559a0 6c 74 73 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  lts);..        /
559b0 2a 2a 0a 09 09 09 20 2a 20 20 73 70 6c 69 74 20  **.... *  split 
559c0 74 68 65 20 69 6e 63 6f 6d 69 6e 67 20 73 69 67  the incoming sig
559d0 6e 61 6c 20 69 6e 74 6f 20 68 69 67 68 2f 6d 69  nal into high/mi
559e0 64 2f 6c 6f 77 0a 09 09 09 20 2a 20 20 40 74 79  d/low.... *  @ty
559f0 70 65 20 7b 54 6f 6e 65 2e 4d 75 6c 74 69 62 61  pe {Tone.Multiba
55a00 6e 64 53 70 6c 69 74 7d 0a 09 09 09 20 2a 20 20  ndSplit}.... *  
55a10 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a  @private.... */.
55a20 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73  .        this._s
55a30 70 6c 69 74 74 65 72 20 3d 20 74 68 69 73 2e 69  plitter = this.i
55a40 6e 70 75 74 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  nput = new Tone.
55a50 4d 75 6c 74 69 62 61 6e 64 53 70 6c 69 74 28 7b  MultibandSplit({
55a60 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 6c  ..            'l
55a70 6f 77 46 72 65 71 75 65 6e 63 79 27 3a 20 6f 70  owFrequency': op
55a80 74 69 6f 6e 73 2e 6c 6f 77 46 72 65 71 75 65 6e  tions.lowFrequen
55a90 63 79 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  cy,..           
55aa0 20 27 68 69 67 68 46 72 65 71 75 65 6e 63 79 27   'highFrequency'
55ab0 3a 20 6f 70 74 69 6f 6e 73 2e 68 69 67 68 46 72  : options.highFr
55ac0 65 71 75 65 6e 63 79 0a 09 20 20 20 20 20 20 20  equency..       
55ad0 20 7d 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a   });..        /*
55ae0 2a 0a 09 09 09 20 2a 20 20 6c 6f 77 2f 6d 69 64  *.... *  low/mid
55af0 20 63 72 6f 73 73 6f 76 65 72 20 66 72 65 71 75   crossover frequ
55b00 65 6e 63 79 2e 0a 09 09 09 20 2a 20 20 40 74 79  ency..... *  @ty
55b10 70 65 20 7b 46 72 65 71 75 65 6e 63 79 7d 0a 09  pe {Frequency}..
55b20 09 09 20 2a 20 20 40 73 69 67 6e 61 6c 0a 09 09  .. *  @signal...
55b30 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
55b40 69 73 2e 6c 6f 77 46 72 65 71 75 65 6e 63 79 20  is.lowFrequency 
55b50 3d 20 74 68 69 73 2e 5f 73 70 6c 69 74 74 65 72  = this._splitter
55b60 2e 6c 6f 77 46 72 65 71 75 65 6e 63 79 3b 0a 09  .lowFrequency;..
55b70 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
55b80 2a 20 20 6d 69 64 2f 68 69 67 68 20 63 72 6f 73  *  mid/high cros
55b90 73 6f 76 65 72 20 66 72 65 71 75 65 6e 63 79 2e  sover frequency.
55ba0 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 46  .... *  @type {F
55bb0 72 65 71 75 65 6e 63 79 7d 0a 09 09 09 20 2a 20  requency}.... * 
55bc0 20 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f 0a   @signal.... */.
55bd0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 68 69  .        this.hi
55be0 67 68 46 72 65 71 75 65 6e 63 79 20 3d 20 74 68  ghFrequency = th
55bf0 69 73 2e 5f 73 70 6c 69 74 74 65 72 2e 68 69 67  is._splitter.hig
55c00 68 46 72 65 71 75 65 6e 63 79 3b 0a 09 20 20 20  hFrequency;..   
55c10 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
55c20 74 68 65 20 6f 75 74 70 75 74 0a 09 09 09 20 2a  the output.... *
55c30 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 47 61    @type {Tone.Ga
55c40 69 6e 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76  in}.... *  @priv
55c50 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  ate.... */..    
55c60 20 20 20 20 74 68 69 73 2e 6f 75 74 70 75 74 20      this.output 
55c70 3d 20 6e 65 77 20 54 6f 6e 65 2e 47 61 69 6e 28  = new Tone.Gain(
55c80 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
55c90 09 09 09 20 2a 20 20 54 68 65 20 63 6f 6d 70 72  ... *  The compr
55ca0 65 73 73 6f 72 20 61 70 70 6c 69 65 64 20 74 6f  essor applied to
55cb0 20 74 68 65 20 6c 6f 77 20 66 72 65 71 75 65 6e   the low frequen
55cc0 63 69 65 73 2e 0a 09 09 09 20 2a 20 20 40 74 79  cies..... *  @ty
55cd0 70 65 20 7b 54 6f 6e 65 2e 43 6f 6d 70 72 65 73  pe {Tone.Compres
55ce0 73 6f 72 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20  sor}.... */..   
55cf0 20 20 20 20 20 74 68 69 73 2e 6c 6f 77 20 3d 20       this.low = 
55d00 6e 65 77 20 54 6f 6e 65 2e 43 6f 6d 70 72 65 73  new Tone.Compres
55d10 73 6f 72 28 6f 70 74 69 6f 6e 73 2e 6c 6f 77 29  sor(options.low)
55d20 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
55d30 09 09 20 2a 20 20 54 68 65 20 63 6f 6d 70 72 65  .. *  The compre
55d40 73 73 6f 72 20 61 70 70 6c 69 65 64 20 74 6f 20  ssor applied to 
55d50 74 68 65 20 6d 69 64 20 66 72 65 71 75 65 6e 63  the mid frequenc
55d60 69 65 73 2e 0a 09 09 09 20 2a 20 20 40 74 79 70  ies..... *  @typ
55d70 65 20 7b 54 6f 6e 65 2e 43 6f 6d 70 72 65 73 73  e {Tone.Compress
55d80 6f 72 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  or}.... */..    
55d90 20 20 20 20 74 68 69 73 2e 6d 69 64 20 3d 20 6e      this.mid = n
55da0 65 77 20 54 6f 6e 65 2e 43 6f 6d 70 72 65 73 73  ew Tone.Compress
55db0 6f 72 28 6f 70 74 69 6f 6e 73 2e 6d 69 64 29 3b  or(options.mid);
55dc0 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
55dd0 09 20 2a 20 20 54 68 65 20 63 6f 6d 70 72 65 73  . *  The compres
55de0 73 6f 72 20 61 70 70 6c 69 65 64 20 74 6f 20 74  sor applied to t
55df0 68 65 20 68 69 67 68 20 66 72 65 71 75 65 6e 63  he high frequenc
55e00 69 65 73 2e 0a 09 09 09 20 2a 20 20 40 74 79 70  ies..... *  @typ
55e10 65 20 7b 54 6f 6e 65 2e 43 6f 6d 70 72 65 73 73  e {Tone.Compress
55e20 6f 72 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  or}.... */..    
55e30 20 20 20 20 74 68 69 73 2e 68 69 67 68 20 3d 20      this.high = 
55e40 6e 65 77 20 54 6f 6e 65 2e 43 6f 6d 70 72 65 73  new Tone.Compres
55e50 73 6f 72 28 6f 70 74 69 6f 6e 73 2e 68 69 67 68  sor(options.high
55e60 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 63 6f  );..        //co
55e70 6e 6e 65 63 74 20 74 68 65 20 63 6f 6d 70 72 65  nnect the compre
55e80 73 73 6f 72 0a 09 20 20 20 20 20 20 20 20 74 68  ssor..        th
55e90 69 73 2e 5f 73 70 6c 69 74 74 65 72 2e 6c 6f 77  is._splitter.low
55ea0 2e 63 68 61 69 6e 28 74 68 69 73 2e 6c 6f 77 2c  .chain(this.low,
55eb0 20 74 68 69 73 2e 6f 75 74 70 75 74 29 3b 0a 09   this.output);..
55ec0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 70          this._sp
55ed0 6c 69 74 74 65 72 2e 6d 69 64 2e 63 68 61 69 6e  litter.mid.chain
55ee0 28 74 68 69 73 2e 6d 69 64 2c 20 74 68 69 73 2e  (this.mid, this.
55ef0 6f 75 74 70 75 74 29 3b 0a 09 20 20 20 20 20 20  output);..      
55f00 20 20 74 68 69 73 2e 5f 73 70 6c 69 74 74 65 72    this._splitter
55f10 2e 68 69 67 68 2e 63 68 61 69 6e 28 74 68 69 73  .high.chain(this
55f20 2e 68 69 67 68 2c 20 74 68 69 73 2e 6f 75 74 70  .high, this.outp
55f30 75 74 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ut);..        th
55f40 69 73 2e 5f 72 65 61 64 4f 6e 6c 79 28 5b 0a 09  is._readOnly([..
55f50 20 20 20 20 20 20 20 20 20 20 20 20 27 68 69 67              'hig
55f60 68 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  h',..           
55f70 20 27 6d 69 64 27 2c 0a 09 20 20 20 20 20 20 20   'mid',..       
55f80 20 20 20 20 20 27 6c 6f 77 27 2c 0a 09 20 20 20       'low',..   
55f90 20 20 20 20 20 20 20 20 20 27 68 69 67 68 46 72           'highFr
55fa0 65 71 75 65 6e 63 79 27 2c 0a 09 20 20 20 20 20  equency',..     
55fb0 20 20 20 20 20 20 20 27 6c 6f 77 46 72 65 71 75         'lowFrequ
55fc0 65 6e 63 79 27 0a 09 20 20 20 20 20 20 20 20 5d  ency'..        ]
55fd0 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  );..    };..    
55fe0 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65  Tone.extend(Tone
55ff0 2e 4d 75 6c 74 69 62 61 6e 64 43 6f 6d 70 72 65  .MultibandCompre
56000 73 73 6f 72 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a  ssor);..    /**.
56010 09 09 20 2a 20 20 40 63 6f 6e 73 74 0a 09 09 20  .. *  @const... 
56020 2a 20 20 40 73 74 61 74 69 63 0a 09 09 20 2a 20  *  @static... * 
56030 20 40 74 79 70 65 20 7b 4f 62 6a 65 63 74 7d 0a   @type {Object}.
56040 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
56050 4d 75 6c 74 69 62 61 6e 64 43 6f 6d 70 72 65 73  MultibandCompres
56060 73 6f 72 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b  sor.defaults = {
56070 0a 09 20 20 20 20 20 20 20 20 27 6c 6f 77 27 3a  ..        'low':
56080 20 54 6f 6e 65 2e 43 6f 6d 70 72 65 73 73 6f 72   Tone.Compressor
56090 2e 64 65 66 61 75 6c 74 73 2c 0a 09 20 20 20 20  .defaults,..    
560a0 20 20 20 20 27 6d 69 64 27 3a 20 54 6f 6e 65 2e      'mid': Tone.
560b0 43 6f 6d 70 72 65 73 73 6f 72 2e 64 65 66 61 75  Compressor.defau
560c0 6c 74 73 2c 0a 09 20 20 20 20 20 20 20 20 27 68  lts,..        'h
560d0 69 67 68 27 3a 20 54 6f 6e 65 2e 43 6f 6d 70 72  igh': Tone.Compr
560e0 65 73 73 6f 72 2e 64 65 66 61 75 6c 74 73 2c 0a  essor.defaults,.
560f0 09 20 20 20 20 20 20 20 20 27 6c 6f 77 46 72 65  .        'lowFre
56100 71 75 65 6e 63 79 27 3a 20 32 35 30 2c 0a 09 20  quency': 250,.. 
56110 20 20 20 20 20 20 20 27 68 69 67 68 46 72 65 71         'highFreq
56120 75 65 6e 63 79 27 3a 20 32 30 30 30 0a 09 20 20  uency': 2000..  
56130 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    };..    /**...
56140 20 2a 20 20 63 6c 65 61 6e 20 75 70 0a 09 09 20   *  clean up... 
56150 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e  *  @returns {Ton
56160 65 2e 4d 75 6c 74 69 62 61 6e 64 43 6f 6d 70 72  e.MultibandCompr
56170 65 73 73 6f 72 7d 20 74 68 69 73 0a 09 09 20 2a  essor} this... *
56180 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4d 75 6c 74  /..    Tone.Mult
56190 69 62 61 6e 64 43 6f 6d 70 72 65 73 73 6f 72 2e  ibandCompressor.
561a0 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73  prototype.dispos
561b0 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  e = function () 
561c0 7b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e  {..        Tone.
561d0 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73  prototype.dispos
561e0 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20  e.call(this);.. 
561f0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 70 6c         this._spl
56200 69 74 74 65 72 2e 64 69 73 70 6f 73 65 28 29 3b  itter.dispose();
56210 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
56220 77 72 69 74 61 62 6c 65 28 5b 0a 09 20 20 20 20  writable([..    
56230 20 20 20 20 20 20 20 20 27 68 69 67 68 27 2c 0a          'high',.
56240 09 20 20 20 20 20 20 20 20 20 20 20 20 27 6d 69  .            'mi
56250 64 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  d',..           
56260 20 27 6c 6f 77 27 2c 0a 09 20 20 20 20 20 20 20   'low',..       
56270 20 20 20 20 20 27 68 69 67 68 46 72 65 71 75 65       'highFreque
56280 6e 63 79 27 2c 0a 09 20 20 20 20 20 20 20 20 20  ncy',..         
56290 20 20 20 27 6c 6f 77 46 72 65 71 75 65 6e 63 79     'lowFrequency
562a0 27 0a 09 20 20 20 20 20 20 20 20 5d 29 3b 0a 09  '..        ]);..
562b0 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c 6f 77          this.low
562c0 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20  .dispose();..   
562d0 20 20 20 20 20 74 68 69 73 2e 6d 69 64 2e 64 69       this.mid.di
562e0 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
562f0 20 20 74 68 69 73 2e 68 69 67 68 2e 64 69 73 70    this.high.disp
56300 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ose();..        
56310 74 68 69 73 2e 5f 73 70 6c 69 74 74 65 72 20 3d  this._splitter =
56320 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
56330 74 68 69 73 2e 6c 6f 77 20 3d 20 6e 75 6c 6c 3b  this.low = null;
56340 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 6d  ..        this.m
56350 69 64 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  id = null;..    
56360 20 20 20 20 74 68 69 73 2e 68 69 67 68 20 3d 20      this.high = 
56370 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74  null;..        t
56380 68 69 73 2e 6c 6f 77 46 72 65 71 75 65 6e 63 79  his.lowFrequency
56390 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
563a0 20 20 74 68 69 73 2e 68 69 67 68 46 72 65 71 75    this.highFrequ
563b0 65 6e 63 79 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20  ency = null;..  
563c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
563d0 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  s;..    };..    
563e0 72 65 74 75 72 6e 20 54 6f 6e 65 2e 4d 75 6c 74  return Tone.Mult
563f0 69 62 61 6e 64 43 6f 6d 70 72 65 73 73 6f 72 3b  ibandCompressor;
56400 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75  ..});..Module(fu
56410 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a  nction (Tone) {.
56420 09 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09  .    ..    /**..
56430 09 20 2a 20 20 40 63 6c 61 73 73 20 20 54 6f 6e  . *  @class  Ton
56440 65 2e 50 61 6e 6e 65 72 20 69 73 20 61 6e 20 65  e.Panner is an e
56450 71 75 61 6c 20 70 6f 77 65 72 20 4c 65 66 74 2f  qual power Left/
56460 52 69 67 68 74 20 50 61 6e 6e 65 72 20 61 6e 64  Right Panner and
56470 20 64 6f 65 73 20 6e 6f 74 0a 09 09 20 2a 20 20   does not... *  
56480 20 20 20 20 20 20 20 20 73 75 70 70 6f 72 74 20          support 
56490 33 44 2e 20 50 61 6e 6e 65 72 20 75 73 65 73 20  3D. Panner uses 
564a0 74 68 65 20 53 74 65 72 65 6f 50 61 6e 6e 65 72  the StereoPanner
564b0 4e 6f 64 65 20 77 68 65 6e 20 61 76 61 69 6c 61  Node when availa
564c0 62 6c 65 2e 20 0a 09 09 20 2a 20 20 0a 09 09 20  ble. ... *  ... 
564d0 2a 20 20 40 63 6f 6e 73 74 72 75 63 74 6f 72 0a  *  @constructor.
564e0 09 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b  .. *  @extends {
564f0 54 6f 6e 65 7d 0a 09 09 20 2a 20 20 40 70 61 72  Tone}... *  @par
56500 61 6d 20 7b 4e 6f 72 6d 61 6c 52 61 6e 67 65 7d  am {NormalRange}
56510 20 5b 69 6e 69 74 69 61 6c 50 61 6e 3d 30 5d 20   [initialPan=0] 
56520 54 68 65 20 69 6e 69 74 61 69 6c 20 70 61 6e 6e  The initail pann
56530 65 72 20 76 61 6c 75 65 20 28 64 65 66 61 75 6c  er value (defaul
56540 74 73 20 74 6f 20 30 20 3d 20 63 65 6e 74 65 72  ts to 0 = center
56550 29 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65  )... *  @example
56560 0a 09 09 20 2a 20 20 2f 2f 70 61 6e 20 74 68 65  ... *  //pan the
56570 20 69 6e 70 75 74 20 73 69 67 6e 61 6c 20 68 61   input signal ha
56580 72 64 20 72 69 67 68 74 2e 20 0a 09 09 20 2a 20  rd right. ... * 
56590 20 76 61 72 20 70 61 6e 6e 65 72 20 3d 20 6e 65   var panner = ne
565a0 77 20 54 6f 6e 65 2e 50 61 6e 6e 65 72 28 31 29  w Tone.Panner(1)
565b0 3b 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  ;... */..    Ton
565c0 65 2e 50 61 6e 6e 65 72 20 3d 20 66 75 6e 63 74  e.Panner = funct
565d0 69 6f 6e 20 28 69 6e 69 74 69 61 6c 50 61 6e 29  ion (initialPan)
565e0 20 7b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
565f0 74 68 69 73 2e 5f 68 61 73 53 74 65 72 65 6f 50  this._hasStereoP
56600 61 6e 6e 65 72 29 20 7b 0a 09 20 20 20 20 20 20  anner) {..      
56610 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 09 20 2a        /**..... *
56620 20 20 74 68 65 20 70 61 6e 6e 65 72 20 6e 6f 64    the panner nod
56630 65 0a 09 09 09 09 20 2a 20 20 40 74 79 70 65 20  e..... *  @type 
56640 7b 53 74 65 72 65 6f 50 61 6e 6e 65 72 4e 6f 64  {StereoPannerNod
56650 65 7d 0a 09 09 09 09 20 2a 20 20 40 70 72 69 76  e}..... *  @priv
56660 61 74 65 0a 09 09 09 09 20 2a 2f 0a 09 20 20 20  ate..... */..   
56670 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70           this._p
56680 61 6e 6e 65 72 20 3d 20 74 68 69 73 2e 69 6e 70  anner = this.inp
56690 75 74 20 3d 20 74 68 69 73 2e 6f 75 74 70 75 74  ut = this.output
566a0 20 3d 20 74 68 69 73 2e 63 6f 6e 74 65 78 74 2e   = this.context.
566b0 63 72 65 61 74 65 53 74 65 72 65 6f 50 61 6e 6e  createStereoPann
566c0 65 72 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20  er();..         
566d0 20 20 20 2f 2a 2a 0a 09 09 09 09 20 2a 20 20 54     /**..... *  T
566e0 68 65 20 70 61 6e 20 63 6f 6e 74 72 6f 6c 2e 20  he pan control. 
566f0 2d 31 20 3d 20 68 61 72 64 20 6c 65 66 74 2c 20  -1 = hard left, 
56700 31 20 3d 20 68 61 72 64 20 72 69 67 68 74 2e 20  1 = hard right. 
56710 0a 09 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b  ..... *  @type {
56720 4e 6f 72 6d 61 6c 52 61 6e 67 65 7d 0a 09 09 09  NormalRange}....
56730 09 20 2a 20 20 40 73 69 67 6e 61 6c 0a 09 09 09  . *  @signal....
56740 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 20 20  . */..          
56750 20 20 74 68 69 73 2e 70 61 6e 20 3d 20 74 68 69    this.pan = thi
56760 73 2e 5f 70 61 6e 6e 65 72 2e 70 61 6e 3b 0a 09  s._panner.pan;..
56770 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
56780 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ..            /*
56790 2a 0a 09 09 09 09 20 2a 20 20 74 68 65 20 64 72  *..... *  the dr
567a0 79 2f 77 65 74 20 6b 6e 6f 62 0a 09 09 09 09 20  y/wet knob..... 
567b0 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 43  *  @type {Tone.C
567c0 72 6f 73 73 46 61 64 65 7d 0a 09 09 09 09 20 2a  rossFade}..... *
567d0 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 09 20    @private..... 
567e0 2a 2f 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  */..            
567f0 74 68 69 73 2e 5f 63 72 6f 73 73 46 61 64 65 20  this._crossFade 
56800 3d 20 6e 65 77 20 54 6f 6e 65 2e 43 72 6f 73 73  = new Tone.Cross
56810 46 61 64 65 28 29 3b 0a 09 20 20 20 20 20 20 20  Fade();..       
56820 20 20 20 20 20 2f 2a 2a 0a 09 09 09 09 20 2a 20       /**..... * 
56830 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 4d 65 72   @type {Tone.Mer
56840 67 65 7d 0a 09 09 09 09 20 2a 20 20 40 70 72 69  ge}..... *  @pri
56850 76 61 74 65 0a 09 09 09 09 20 2a 2f 0a 09 20 20  vate..... */..  
56860 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
56870 6d 65 72 67 65 72 20 3d 20 74 68 69 73 2e 6f 75  merger = this.ou
56880 74 70 75 74 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  tput = new Tone.
56890 4d 65 72 67 65 28 29 3b 0a 09 20 20 20 20 20 20  Merge();..      
568a0 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 09 20 2a        /**..... *
568b0 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 53 70    @type {Tone.Sp
568c0 6c 69 74 7d 0a 09 09 09 09 20 2a 20 20 40 70 72  lit}..... *  @pr
568d0 69 76 61 74 65 0a 09 09 09 09 20 2a 2f 0a 09 20  ivate..... */.. 
568e0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
568f0 5f 73 70 6c 69 74 74 65 72 20 3d 20 74 68 69 73  _splitter = this
56900 2e 69 6e 70 75 74 20 3d 20 6e 65 77 20 54 6f 6e  .input = new Ton
56910 65 2e 53 70 6c 69 74 28 29 3b 0a 09 20 20 20 20  e.Split();..    
56920 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 09          /**.....
56930 20 2a 20 20 54 68 65 20 70 61 6e 20 63 6f 6e 74   *  The pan cont
56940 72 6f 6c 2e 20 2d 31 20 3d 20 68 61 72 64 20 6c  rol. -1 = hard l
56950 65 66 74 2c 20 31 20 3d 20 68 61 72 64 20 72 69  eft, 1 = hard ri
56960 67 68 74 2e 20 0a 09 09 09 09 20 2a 20 20 40 74  ght. ..... *  @t
56970 79 70 65 20 7b 41 75 64 69 6f 52 61 6e 67 65 7d  ype {AudioRange}
56980 0a 09 09 09 09 20 2a 20 20 40 73 69 67 6e 61 6c  ..... *  @signal
56990 0a 09 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  ..... */..      
569a0 20 20 20 20 20 20 74 68 69 73 2e 70 61 6e 20 3d        this.pan =
569b0 20 6e 65 77 20 54 6f 6e 65 2e 53 69 67 6e 61 6c   new Tone.Signal
569c0 28 30 2c 20 54 6f 6e 65 2e 54 79 70 65 2e 41 75  (0, Tone.Type.Au
569d0 64 69 6f 52 61 6e 67 65 29 3b 0a 09 20 20 20 20  dioRange);..    
569e0 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 09          /**.....
569f0 20 2a 20 20 61 6c 77 61 79 73 20 73 65 6e 64 73   *  always sends
56a00 20 30 0a 09 09 09 09 20 2a 20 20 40 74 79 70 65   0..... *  @type
56a10 20 7b 54 6f 6e 65 2e 5a 65 72 6f 7d 0a 09 09 09   {Tone.Zero}....
56a20 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
56a30 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 20  .. */..         
56a40 20 20 20 74 68 69 73 2e 5f 7a 65 72 6f 20 3d 20     this._zero = 
56a50 6e 65 77 20 54 6f 6e 65 2e 5a 65 72 6f 28 29 3b  new Tone.Zero();
56a60 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ..            /*
56a70 2a 0a 09 09 09 09 20 2a 20 20 54 68 65 20 61 6e  *..... *  The an
56a80 61 6c 6f 67 20 74 6f 20 67 61 69 6e 20 63 6f 6e  alog to gain con
56a90 76 65 72 73 69 6f 6e 0a 09 09 09 09 20 2a 20 20  version..... *  
56aa0 40 74 79 70 65 20 20 7b 54 6f 6e 65 2e 41 75 64  @type  {Tone.Aud
56ab0 69 6f 54 6f 47 61 69 6e 7d 0a 09 09 09 09 20 2a  ioToGain}..... *
56ac0 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 09 20    @private..... 
56ad0 2a 2f 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  */..            
56ae0 74 68 69 73 2e 5f 61 32 67 20 3d 20 6e 65 77 20  this._a2g = new 
56af0 54 6f 6e 65 2e 41 75 64 69 6f 54 6f 47 61 69 6e  Tone.AudioToGain
56b00 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ();..           
56b10 20 2f 2f 43 4f 4e 4e 45 43 54 49 4f 4e 53 3a 0a   //CONNECTIONS:.
56b20 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
56b30 73 2e 5f 7a 65 72 6f 2e 63 6f 6e 6e 65 63 74 28  s._zero.connect(
56b40 74 68 69 73 2e 5f 61 32 67 29 3b 0a 09 20 20 20  this._a2g);..   
56b50 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 70 61           this.pa
56b60 6e 2e 63 68 61 69 6e 28 74 68 69 73 2e 5f 61 32  n.chain(this._a2
56b70 67 2c 20 74 68 69 73 2e 5f 63 72 6f 73 73 46 61  g, this._crossFa
56b80 64 65 2e 66 61 64 65 29 3b 0a 09 20 20 20 20 20  de.fade);..     
56b90 20 20 20 20 20 20 20 2f 2f 6c 65 66 74 20 63 68         //left ch
56ba0 61 6e 6e 65 6c 20 69 73 20 61 2c 20 72 69 67 68  annel is a, righ
56bb0 74 20 63 68 61 6e 6e 65 6c 20 69 73 20 62 0a 09  t channel is b..
56bc0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
56bd0 2e 5f 73 70 6c 69 74 74 65 72 2e 63 6f 6e 6e 65  ._splitter.conne
56be0 63 74 28 74 68 69 73 2e 5f 63 72 6f 73 73 46 61  ct(this._crossFa
56bf0 64 65 2c 20 30 2c 20 30 29 3b 0a 09 20 20 20 20  de, 0, 0);..    
56c00 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 70          this._sp
56c10 6c 69 74 74 65 72 2e 63 6f 6e 6e 65 63 74 28 74  litter.connect(t
56c20 68 69 73 2e 5f 63 72 6f 73 73 46 61 64 65 2c 20  his._crossFade, 
56c30 31 2c 20 31 29 3b 0a 09 20 20 20 20 20 20 20 20  1, 1);..        
56c40 20 20 20 20 2f 2f 6d 65 72 67 65 20 69 74 20 62      //merge it b
56c50 61 63 6b 20 74 6f 67 65 74 68 65 72 0a 09 20 20  ack together..  
56c60 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
56c70 63 72 6f 73 73 46 61 64 65 2e 61 2e 63 6f 6e 6e  crossFade.a.conn
56c80 65 63 74 28 74 68 69 73 2e 5f 6d 65 72 67 65 72  ect(this._merger
56c90 2c 20 30 2c 20 30 29 3b 0a 09 20 20 20 20 20 20  , 0, 0);..      
56ca0 20 20 20 20 20 20 74 68 69 73 2e 5f 63 72 6f 73        this._cros
56cb0 73 46 61 64 65 2e 62 2e 63 6f 6e 6e 65 63 74 28  sFade.b.connect(
56cc0 74 68 69 73 2e 5f 6d 65 72 67 65 72 2c 20 30 2c  this._merger, 0,
56cd0 20 31 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a   1);..        }.
56ce0 09 20 20 20 20 20 20 20 20 2f 2f 69 6e 69 74 69  .        //initi
56cf0 61 6c 20 76 61 6c 75 65 0a 09 20 20 20 20 20 20  al value..      
56d00 20 20 74 68 69 73 2e 70 61 6e 2e 76 61 6c 75 65    this.pan.value
56d10 20 3d 20 74 68 69 73 2e 64 65 66 61 75 6c 74 41   = this.defaultA
56d20 72 67 28 69 6e 69 74 69 61 6c 50 61 6e 2c 20 30  rg(initialPan, 0
56d30 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
56d40 2e 5f 72 65 61 64 4f 6e 6c 79 28 27 70 61 6e 27  ._readOnly('pan'
56d50 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  );..    };..    
56d60 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65  Tone.extend(Tone
56d70 2e 50 61 6e 6e 65 72 29 3b 0a 09 20 20 20 20 2f  .Panner);..    /
56d80 2a 2a 0a 09 09 20 2a 20 20 69 6e 64 69 63 61 74  **... *  indicat
56d90 65 73 20 69 66 20 74 68 65 20 70 61 6e 6e 65 72  es if the panner
56da0 20 69 73 20 75 73 69 6e 67 20 74 68 65 20 6e 65   is using the ne
56db0 77 20 53 74 65 72 65 6f 50 61 6e 6e 65 72 4e 6f  w StereoPannerNo
56dc0 64 65 20 69 6e 74 65 72 6e 61 6c 6c 79 0a 09 09  de internally...
56dd0 20 2a 20 20 40 74 79 70 65 20 20 7b 62 6f 6f 6c   *  @type  {bool
56de0 65 61 6e 7d 0a 09 09 20 2a 20 20 40 70 72 69 76  ean}... *  @priv
56df0 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  ate... */..    T
56e00 6f 6e 65 2e 50 61 6e 6e 65 72 2e 70 72 6f 74 6f  one.Panner.proto
56e10 74 79 70 65 2e 5f 68 61 73 53 74 65 72 65 6f 50  type._hasStereoP
56e20 61 6e 6e 65 72 20 3d 20 54 6f 6e 65 2e 70 72 6f  anner = Tone.pro
56e30 74 6f 74 79 70 65 2e 69 73 46 75 6e 63 74 69 6f  totype.isFunctio
56e40 6e 28 54 6f 6e 65 2e 63 6f 6e 74 65 78 74 2e 63  n(Tone.context.c
56e50 72 65 61 74 65 53 74 65 72 65 6f 50 61 6e 6e 65  reateStereoPanne
56e60 72 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  r);..    /**... 
56e70 2a 20 20 43 6c 65 61 6e 20 75 70 2e 0a 09 09 20  *  Clean up.... 
56e80 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e  *  @returns {Ton
56e90 65 2e 50 61 6e 6e 65 72 7d 20 74 68 69 73 0a 09  e.Panner} this..
56ea0 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50  . */..    Tone.P
56eb0 61 6e 6e 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e  anner.prototype.
56ec0 64 69 73 70 6f 73 65 20 3d 20 66 75 6e 63 74 69  dispose = functi
56ed0 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
56ee0 20 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e   Tone.prototype.
56ef0 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69  dispose.call(thi
56f00 73 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  s);..        thi
56f10 73 2e 5f 77 72 69 74 61 62 6c 65 28 27 70 61 6e  s._writable('pan
56f20 27 29 3b 0a 09 20 20 20 20 20 20 20 20 69 66 20  ');..        if 
56f30 28 74 68 69 73 2e 5f 68 61 73 53 74 65 72 65 6f  (this._hasStereo
56f40 50 61 6e 6e 65 72 29 20 7b 0a 09 20 20 20 20 20  Panner) {..     
56f50 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70 61 6e         this._pan
56f60 6e 65 72 2e 64 69 73 63 6f 6e 6e 65 63 74 28 29  ner.disconnect()
56f70 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  ;..            t
56f80 68 69 73 2e 5f 70 61 6e 6e 65 72 20 3d 20 6e 75  his._panner = nu
56f90 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ll;..           
56fa0 20 74 68 69 73 2e 70 61 6e 20 3d 20 6e 75 6c 6c   this.pan = null
56fb0 3b 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73  ;..        } els
56fc0 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e {..           
56fd0 20 74 68 69 73 2e 5f 7a 65 72 6f 2e 64 69 73 70   this._zero.disp
56fe0 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ose();..        
56ff0 20 20 20 20 74 68 69 73 2e 5f 7a 65 72 6f 20 3d      this._zero =
57000 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
57010 20 20 20 20 74 68 69 73 2e 5f 63 72 6f 73 73 46      this._crossF
57020 61 64 65 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09  ade.dispose();..
57030 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
57040 2e 5f 63 72 6f 73 73 46 61 64 65 20 3d 20 6e 75  ._crossFade = nu
57050 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ll;..           
57060 20 74 68 69 73 2e 5f 73 70 6c 69 74 74 65 72 2e   this._splitter.
57070 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20  dispose();..    
57080 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 70          this._sp
57090 6c 69 74 74 65 72 20 3d 20 6e 75 6c 6c 3b 0a 09  litter = null;..
570a0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
570b0 2e 5f 6d 65 72 67 65 72 2e 64 69 73 70 6f 73 65  ._merger.dispose
570c0 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ();..           
570d0 20 74 68 69 73 2e 5f 6d 65 72 67 65 72 20 3d 20   this._merger = 
570e0 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 20  null;..         
570f0 20 20 20 74 68 69 73 2e 70 61 6e 2e 64 69 73 70     this.pan.disp
57100 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ose();..        
57110 20 20 20 20 74 68 69 73 2e 70 61 6e 20 3d 20 6e      this.pan = n
57120 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 20 20  ull;..          
57130 20 20 74 68 69 73 2e 5f 61 32 67 2e 64 69 73 70    this._a2g.disp
57140 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ose();..        
57150 20 20 20 20 74 68 69 73 2e 5f 61 32 67 20 3d 20      this._a2g = 
57160 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 7d  null;..        }
57170 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
57180 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09   this;..    };..
57190 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e      return Tone.
571a0 50 61 6e 6e 65 72 3b 0a 09 7d 29 3b 0a 09 4d 6f  Panner;..});..Mo
571b0 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28 54  dule(function (T
571c0 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09 20 20  one) {..    ..  
571d0 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61    /**... *  @cla
571e0 73 73 20 20 41 20 73 70 61 74 69 61 6c 69 7a 65  ss  A spatialize
571f0 64 20 70 61 6e 6e 65 72 20 6e 6f 64 65 20 77 68  d panner node wh
57200 69 63 68 20 73 75 70 70 6f 72 74 73 20 65 71 75  ich supports equ
57210 61 6c 70 6f 77 65 72 20 6f 72 20 48 52 54 46 20  alpower or HRTF 
57220 70 61 6e 6e 69 6e 67 2e 0a 09 09 20 2a 20 20 20  panning.... *   
57230 20 20 20 20 20 20 20 54 72 69 65 73 20 74 6f 20         Tries to 
57240 6e 6f 72 6d 61 6c 69 7a 65 20 74 68 65 20 41 50  normalize the AP
57250 49 20 61 63 72 6f 73 73 20 76 61 72 69 6f 75 73  I across various
57260 20 62 72 6f 77 73 65 72 73 2e 20 53 65 65 20 54   browsers. See T
57270 6f 6e 65 2e 4c 69 73 74 65 6e 65 72 0a 09 09 20  one.Listener... 
57280 2a 20 20 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74  *  ... *  @const
57290 72 75 63 74 6f 72 0a 09 09 20 2a 20 20 40 65 78  ructor... *  @ex
572a0 74 65 6e 64 73 20 7b 54 6f 6e 65 7d 0a 09 09 20  tends {Tone}... 
572b0 2a 20 20 40 70 61 72 61 6d 20 7b 4e 75 6d 62 65  *  @param {Numbe
572c0 72 7d 20 70 6f 73 69 74 69 6f 6e 58 20 54 68 65  r} positionX The
572d0 20 69 6e 69 74 69 61 6c 20 78 20 70 6f 73 69 74   initial x posit
572e0 69 6f 6e 2e 0a 09 09 20 2a 20 20 40 70 61 72 61  ion.... *  @para
572f0 6d 20 7b 4e 75 6d 62 65 72 7d 20 70 6f 73 69 74  m {Number} posit
57300 69 6f 6e 59 20 54 68 65 20 69 6e 69 74 69 61 6c  ionY The initial
57310 20 79 20 70 6f 73 69 74 69 6f 6e 2e 0a 09 09 20   y position.... 
57320 2a 20 20 40 70 61 72 61 6d 20 7b 4e 75 6d 62 65  *  @param {Numbe
57330 72 7d 20 70 6f 73 69 74 69 6f 6e 5a 20 54 68 65  r} positionZ The
57340 20 69 6e 69 74 69 61 6c 20 7a 20 70 6f 73 69 74   initial z posit
57350 69 6f 6e 2e 0a 09 09 20 2a 2f 0a 09 20 20 20 20  ion.... */..    
57360 54 6f 6e 65 2e 50 61 6e 6e 65 72 33 44 20 3d 20  Tone.Panner3D = 
57370 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
57380 20 20 20 20 20 20 20 76 61 72 20 6f 70 74 69 6f         var optio
57390 6e 73 20 3d 20 74 68 69 73 2e 6f 70 74 69 6f 6e  ns = this.option
573a0 73 4f 62 6a 65 63 74 28 61 72 67 75 6d 65 6e 74  sObject(argument
573b0 73 2c 20 5b 0a 09 20 20 20 20 20 20 20 20 20 20  s, [..          
573c0 20 20 27 70 6f 73 69 74 69 6f 6e 58 27 2c 0a 09    'positionX',..
573d0 20 20 20 20 20 20 20 20 20 20 20 20 27 70 6f 73              'pos
573e0 69 74 69 6f 6e 59 27 2c 0a 09 20 20 20 20 20 20  itionY',..      
573f0 20 20 20 20 20 20 27 70 6f 73 69 74 69 6f 6e 5a        'positionZ
57400 27 0a 09 20 20 20 20 20 20 20 20 5d 2c 20 54 6f  '..        ], To
57410 6e 65 2e 50 61 6e 6e 65 72 33 44 2e 64 65 66 61  ne.Panner3D.defa
57420 75 6c 74 73 29 3b 0a 09 20 20 20 20 20 20 20 20  ults);..        
57430 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 70  /**.... *  The p
57440 61 6e 6e 65 72 20 6e 6f 64 65 0a 09 09 09 20 2a  anner node.... *
57450 20 20 40 74 79 70 65 20 7b 50 61 6e 6e 65 72 4e    @type {PannerN
57460 6f 64 65 7d 0a 09 09 09 20 2a 20 20 40 70 72 69  ode}.... *  @pri
57470 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20  vate.... */..   
57480 20 20 20 20 20 74 68 69 73 2e 5f 70 61 6e 6e 65       this._panne
57490 72 20 3d 20 74 68 69 73 2e 69 6e 70 75 74 20 3d  r = this.input =
574a0 20 74 68 69 73 2e 6f 75 74 70 75 74 20 3d 20 74   this.output = t
574b0 68 69 73 2e 63 6f 6e 74 65 78 74 2e 63 72 65 61  his.context.crea
574c0 74 65 50 61 6e 6e 65 72 28 29 3b 0a 09 20 20 20  tePanner();..   
574d0 20 20 20 20 20 2f 2f 73 65 74 20 73 6f 6d 65 20       //set some 
574e0 76 61 6c 75 65 73 0a 09 20 20 20 20 20 20 20 20  values..        
574f0 74 68 69 73 2e 5f 70 61 6e 6e 65 72 2e 70 61 6e  this._panner.pan
57500 6e 69 6e 67 4d 6f 64 65 6c 20 3d 20 6f 70 74 69  ningModel = opti
57510 6f 6e 73 2e 70 61 6e 6e 69 6e 67 4d 6f 64 65 6c  ons.panningModel
57520 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
57530 5f 70 61 6e 6e 65 72 2e 6d 61 78 44 69 73 74 61  _panner.maxDista
57540 6e 63 65 20 3d 20 6f 70 74 69 6f 6e 73 2e 6d 61  nce = options.ma
57550 78 44 69 73 74 61 6e 63 65 3b 0a 09 20 20 20 20  xDistance;..    
57560 20 20 20 20 74 68 69 73 2e 5f 70 61 6e 6e 65 72      this._panner
57570 2e 64 69 73 74 61 6e 63 65 4d 6f 64 65 6c 20 3d  .distanceModel =
57580 20 6f 70 74 69 6f 6e 73 2e 64 69 73 74 61 6e 63   options.distanc
57590 65 4d 6f 64 65 6c 3b 0a 09 20 20 20 20 20 20 20  eModel;..       
575a0 20 74 68 69 73 2e 5f 70 61 6e 6e 65 72 2e 63 6f   this._panner.co
575b0 6e 65 4f 75 74 65 72 47 61 69 6e 20 3d 20 6f 70  neOuterGain = op
575c0 74 69 6f 6e 73 2e 63 6f 6e 65 4f 75 74 65 72 47  tions.coneOuterG
575d0 61 69 6e 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ain;..        th
575e0 69 73 2e 5f 70 61 6e 6e 65 72 2e 63 6f 6e 65 4f  is._panner.coneO
575f0 75 74 65 72 41 6e 67 6c 65 20 3d 20 6f 70 74 69  uterAngle = opti
57600 6f 6e 73 2e 63 6f 6e 65 4f 75 74 65 72 41 6e 67  ons.coneOuterAng
57610 6c 65 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  le;..        thi
57620 73 2e 5f 70 61 6e 6e 65 72 2e 63 6f 6e 65 49 6e  s._panner.coneIn
57630 6e 65 72 41 6e 67 6c 65 20 3d 20 6f 70 74 69 6f  nerAngle = optio
57640 6e 73 2e 63 6f 6e 65 49 6e 6e 65 72 41 6e 67 6c  ns.coneInnerAngl
57650 65 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  e;..        this
57660 2e 5f 70 61 6e 6e 65 72 2e 72 65 66 44 69 73 74  ._panner.refDist
57670 61 6e 63 65 20 3d 20 6f 70 74 69 6f 6e 73 2e 72  ance = options.r
57680 65 66 44 69 73 74 61 6e 63 65 3b 0a 09 20 20 20  efDistance;..   
57690 20 20 20 20 20 74 68 69 73 2e 5f 70 61 6e 6e 65       this._panne
576a0 72 2e 72 6f 6c 6c 6f 66 66 46 61 63 74 6f 72 20  r.rolloffFactor 
576b0 3d 20 6f 70 74 69 6f 6e 73 2e 72 6f 6c 6c 6f 66  = options.rollof
576c0 66 46 61 63 74 6f 72 3b 0a 09 20 20 20 20 20 20  fFactor;..      
576d0 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 48 6f 6c    /**.... *  Hol
576e0 64 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 6f  ds the current o
576f0 72 69 65 6e 74 61 74 69 6f 6e 0a 09 09 09 20 2a  rientation.... *
57700 20 20 40 74 79 70 65 20 20 7b 41 72 72 61 79 7d    @type  {Array}
57710 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  .... *  @private
57720 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
57730 20 74 68 69 73 2e 5f 6f 72 69 65 6e 74 61 74 69   this._orientati
57740 6f 6e 20 3d 20 5b 0a 09 20 20 20 20 20 20 20 20  on = [..        
57750 20 20 20 20 6f 70 74 69 6f 6e 73 2e 6f 72 69 65      options.orie
57760 6e 74 61 74 69 6f 6e 58 2c 0a 09 20 20 20 20 20  ntationX,..     
57770 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 2e 6f         options.o
57780 72 69 65 6e 74 61 74 69 6f 6e 59 2c 0a 09 20 20  rientationY,..  
57790 20 20 20 20 20 20 20 20 20 20 6f 70 74 69 6f 6e            option
577a0 73 2e 6f 72 69 65 6e 74 61 74 69 6f 6e 5a 0a 09  s.orientationZ..
577b0 20 20 20 20 20 20 20 20 5d 3b 0a 09 20 20 20 20          ];..    
577c0 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 48      /**.... *  H
577d0 6f 6c 64 73 20 74 68 65 20 63 75 72 72 65 6e 74  olds the current
577e0 20 70 6f 73 69 74 69 6f 6e 0a 09 09 09 20 2a 20   position.... * 
577f0 20 40 74 79 70 65 20 20 7b 41 72 72 61 79 7d 0a   @type  {Array}.
57800 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
57810 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
57820 74 68 69 73 2e 5f 70 6f 73 69 74 69 6f 6e 20 3d  this._position =
57830 20 5b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   [..            
57840 6f 70 74 69 6f 6e 73 2e 70 6f 73 69 74 69 6f 6e  options.position
57850 58 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  X,..            
57860 6f 70 74 69 6f 6e 73 2e 70 6f 73 69 74 69 6f 6e  options.position
57870 59 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  Y,..            
57880 6f 70 74 69 6f 6e 73 2e 70 6f 73 69 74 69 6f 6e  options.position
57890 5a 0a 09 20 20 20 20 20 20 20 20 5d 3b 0a 09 20  Z..        ];.. 
578a0 20 20 20 20 20 20 20 2f 2f 20 73 65 74 20 74 68         // set th
578b0 65 20 64 65 66 61 75 6c 74 20 70 6f 73 69 74 69  e default positi
578c0 6f 6e 2f 6f 72 69 65 6e 74 61 74 69 6f 6e 0a 09  on/orientation..
578d0 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f 72 69          this.ori
578e0 65 6e 74 61 74 69 6f 6e 58 20 3d 20 6f 70 74 69  entationX = opti
578f0 6f 6e 73 2e 6f 72 69 65 6e 74 61 74 69 6f 6e 58  ons.orientationX
57900 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
57910 6f 72 69 65 6e 74 61 74 69 6f 6e 59 20 3d 20 6f  orientationY = o
57920 70 74 69 6f 6e 73 2e 6f 72 69 65 6e 74 61 74 69  ptions.orientati
57930 6f 6e 59 3b 0a 09 20 20 20 20 20 20 20 20 74 68  onY;..        th
57940 69 73 2e 6f 72 69 65 6e 74 61 74 69 6f 6e 5a 20  is.orientationZ 
57950 3d 20 6f 70 74 69 6f 6e 73 2e 6f 72 69 65 6e 74  = options.orient
57960 61 74 69 6f 6e 5a 3b 0a 09 20 20 20 20 20 20 20  ationZ;..       
57970 20 74 68 69 73 2e 70 6f 73 69 74 69 6f 6e 58 20   this.positionX 
57980 3d 20 6f 70 74 69 6f 6e 73 2e 70 6f 73 69 74 69  = options.positi
57990 6f 6e 58 3b 0a 09 20 20 20 20 20 20 20 20 74 68  onX;..        th
579a0 69 73 2e 70 6f 73 69 74 69 6f 6e 59 20 3d 20 6f  is.positionY = o
579b0 70 74 69 6f 6e 73 2e 70 6f 73 69 74 69 6f 6e 59  ptions.positionY
579c0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
579d0 70 6f 73 69 74 69 6f 6e 5a 20 3d 20 6f 70 74 69  positionZ = opti
579e0 6f 6e 73 2e 70 6f 73 69 74 69 6f 6e 5a 3b 0a 09  ons.positionZ;..
579f0 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65      };..    Tone
57a00 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 50 61 6e  .extend(Tone.Pan
57a10 6e 65 72 33 44 29 3b 0a 09 20 20 20 20 2f 2a 2a  ner3D);..    /**
57a20 0a 09 09 20 2a 20 20 74 68 65 20 64 65 66 61 75  ... *  the defau
57a30 6c 74 20 70 61 72 61 6d 65 74 65 72 73 0a 09 09  lt parameters...
57a40 20 2a 20 20 40 73 74 61 74 69 63 0a 09 09 20 2a   *  @static... *
57a50 20 20 40 63 6f 6e 73 74 0a 09 09 20 2a 20 20 40    @const... *  @
57a60 74 79 70 65 20 7b 4f 62 6a 65 63 74 7d 0a 09 09  type {Object}...
57a70 20 2a 20 20 44 65 66 61 75 6c 74 73 20 61 63 63   *  Defaults acc
57a80 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 73 70  ording to the sp
57a90 65 63 69 66 69 63 61 74 69 6f 6e 0a 09 09 20 2a  ecification... *
57aa0 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50 61 6e 6e  /..    Tone.Pann
57ab0 65 72 33 44 2e 64 65 66 61 75 6c 74 73 20 3d 20  er3D.defaults = 
57ac0 7b 0a 09 20 20 20 20 20 20 20 20 27 70 6f 73 69  {..        'posi
57ad0 74 69 6f 6e 58 27 3a 20 30 2c 0a 09 20 20 20 20  tionX': 0,..    
57ae0 20 20 20 20 27 70 6f 73 69 74 69 6f 6e 59 27 3a      'positionY':
57af0 20 30 2c 0a 09 20 20 20 20 20 20 20 20 27 70 6f   0,..        'po
57b00 73 69 74 69 6f 6e 5a 27 3a 20 30 2c 0a 09 20 20  sitionZ': 0,..  
57b10 20 20 20 20 20 20 27 6f 72 69 65 6e 74 61 74 69        'orientati
57b20 6f 6e 58 27 3a 20 30 2c 0a 09 20 20 20 20 20 20  onX': 0,..      
57b30 20 20 27 6f 72 69 65 6e 74 61 74 69 6f 6e 59 27    'orientationY'
57b40 3a 20 30 2c 0a 09 20 20 20 20 20 20 20 20 27 6f  : 0,..        'o
57b50 72 69 65 6e 74 61 74 69 6f 6e 5a 27 3a 20 30 2c  rientationZ': 0,
57b60 0a 09 20 20 20 20 20 20 20 20 27 70 61 6e 6e 69  ..        'panni
57b70 6e 67 4d 6f 64 65 6c 27 3a 20 27 65 71 75 61 6c  ngModel': 'equal
57b80 70 6f 77 65 72 27 2c 0a 09 20 20 20 20 20 20 20  power',..       
57b90 20 27 6d 61 78 44 69 73 74 61 6e 63 65 27 3a 20   'maxDistance': 
57ba0 31 30 30 30 30 2c 0a 09 20 20 20 20 20 20 20 20  10000,..        
57bb0 27 64 69 73 74 61 6e 63 65 4d 6f 64 65 6c 27 3a  'distanceModel':
57bc0 20 27 69 6e 76 65 72 73 65 27 2c 0a 09 20 20 20   'inverse',..   
57bd0 20 20 20 20 20 27 63 6f 6e 65 4f 75 74 65 72 47       'coneOuterG
57be0 61 69 6e 27 3a 20 30 2c 0a 09 20 20 20 20 20 20  ain': 0,..      
57bf0 20 20 27 63 6f 6e 65 4f 75 74 65 72 41 6e 67 6c    'coneOuterAngl
57c00 65 27 3a 20 33 36 30 2c 0a 09 20 20 20 20 20 20  e': 360,..      
57c10 20 20 27 63 6f 6e 65 49 6e 6e 65 72 41 6e 67 6c    'coneInnerAngl
57c20 65 27 3a 20 33 36 30 2c 0a 09 20 20 20 20 20 20  e': 360,..      
57c30 20 20 27 72 65 66 44 69 73 74 61 6e 63 65 27 3a    'refDistance':
57c40 20 31 2c 0a 09 20 20 20 20 20 20 20 20 27 72 6f   1,..        'ro
57c50 6c 6c 6f 66 66 46 61 63 74 6f 72 27 3a 20 31 0a  lloffFactor': 1.
57c60 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
57c70 0a 09 09 20 2a 20 54 68 65 20 72 61 6d 70 20 74  ... * The ramp t
57c80 69 6d 65 20 77 68 69 63 68 20 69 73 20 61 70 70  ime which is app
57c90 6c 69 65 64 20 74 6f 20 74 68 65 20 73 65 74 54  lied to the setT
57ca0 61 72 67 65 74 41 74 54 69 6d 65 0a 09 09 20 2a  argetAtTime... *
57cb0 20 40 74 79 70 65 20 7b 4e 75 6d 62 65 72 7d 0a   @type {Number}.
57cc0 09 09 20 2a 20 40 70 72 69 76 61 74 65 0a 09 09  .. * @private...
57cd0 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50 61   */..    Tone.Pa
57ce0 6e 6e 65 72 33 44 2e 70 72 6f 74 6f 74 79 70 65  nner3D.prototype
57cf0 2e 5f 72 61 6d 70 54 69 6d 65 43 6f 6e 73 74 61  ._rampTimeConsta
57d00 6e 74 20 3d 20 30 2e 30 31 3b 0a 09 20 20 20 20  nt = 0.01;..    
57d10 2f 2a 2a 0a 09 09 20 2a 20 20 53 65 74 73 20 74  /**... *  Sets t
57d20 68 65 20 70 6f 73 69 74 69 6f 6e 20 6f 66 20 74  he position of t
57d30 68 65 20 73 6f 75 72 63 65 20 69 6e 20 33 64 20  he source in 3d 
57d40 73 70 61 63 65 2e 09 0a 09 09 20 2a 20 20 40 70  space..... *  @p
57d50 61 72 61 6d 20 20 7b 4e 75 6d 62 65 72 7d 20 20  aram  {Number}  
57d60 78 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20  x... *  @param  
57d70 7b 4e 75 6d 62 65 72 7d 20 20 79 0a 09 09 20 2a  {Number}  y... *
57d80 20 20 40 70 61 72 61 6d 20 20 7b 4e 75 6d 62 65    @param  {Numbe
57d90 72 7d 20 20 7a 0a 09 09 20 2a 20 20 40 72 65 74  r}  z... *  @ret
57da0 75 72 6e 20 7b 54 6f 6e 65 2e 50 61 6e 6e 65 72  urn {Tone.Panner
57db0 33 44 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09  3D} this... */..
57dc0 20 20 20 20 54 6f 6e 65 2e 50 61 6e 6e 65 72 33      Tone.Panner3
57dd0 44 2e 70 72 6f 74 6f 74 79 70 65 2e 73 65 74 50  D.prototype.setP
57de0 6f 73 69 74 69 6f 6e 20 3d 20 66 75 6e 63 74 69  osition = functi
57df0 6f 6e 20 28 78 2c 20 79 2c 20 7a 29 20 7b 0a 09  on (x, y, z) {..
57e00 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73          if (this
57e10 2e 5f 70 61 6e 6e 65 72 2e 70 6f 73 69 74 69 6f  ._panner.positio
57e20 6e 58 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  nX) {..         
57e30 20 20 20 76 61 72 20 6e 6f 77 20 3d 20 74 68 69     var now = thi
57e40 73 2e 6e 6f 77 28 29 3b 0a 09 20 20 20 20 20 20  s.now();..      
57e50 20 20 20 20 20 20 74 68 69 73 2e 5f 70 61 6e 6e        this._pann
57e60 65 72 2e 70 6f 73 69 74 69 6f 6e 58 2e 73 65 74  er.positionX.set
57e70 54 61 72 67 65 74 41 74 54 69 6d 65 28 78 2c 20  TargetAtTime(x, 
57e80 6e 6f 77 2c 20 74 68 69 73 2e 5f 72 61 6d 70 54  now, this._rampT
57e90 69 6d 65 43 6f 6e 73 74 61 6e 74 29 3b 0a 09 20  imeConstant);.. 
57ea0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
57eb0 5f 70 61 6e 6e 65 72 2e 70 6f 73 69 74 69 6f 6e  _panner.position
57ec0 59 2e 73 65 74 54 61 72 67 65 74 41 74 54 69 6d  Y.setTargetAtTim
57ed0 65 28 79 2c 20 6e 6f 77 2c 20 74 68 69 73 2e 5f  e(y, now, this._
57ee0 72 61 6d 70 54 69 6d 65 43 6f 6e 73 74 61 6e 74  rampTimeConstant
57ef0 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
57f00 74 68 69 73 2e 5f 70 61 6e 6e 65 72 2e 70 6f 73  this._panner.pos
57f10 69 74 69 6f 6e 5a 2e 73 65 74 54 61 72 67 65 74  itionZ.setTarget
57f20 41 74 54 69 6d 65 28 7a 2c 20 6e 6f 77 2c 20 74  AtTime(z, now, t
57f30 68 69 73 2e 5f 72 61 6d 70 54 69 6d 65 43 6f 6e  his._rampTimeCon
57f40 73 74 61 6e 74 29 3b 0a 09 20 20 20 20 20 20 20  stant);..       
57f50 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20   } else {..     
57f60 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70 61 6e         this._pan
57f70 6e 65 72 2e 73 65 74 50 6f 73 69 74 69 6f 6e 28  ner.setPosition(
57f80 78 2c 20 79 2c 20 7a 29 3b 0a 09 20 20 20 20 20  x, y, z);..     
57f90 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 74 68     }..        th
57fa0 69 73 2e 5f 70 6f 73 69 74 69 6f 6e 20 3d 20 41  is._position = A
57fb0 72 72 61 79 2e 70 72 6f 74 6f 74 79 70 65 2e 73  rray.prototype.s
57fc0 6c 69 63 65 2e 63 61 6c 6c 28 61 72 67 75 6d 65  lice.call(argume
57fd0 6e 74 73 29 3b 0a 09 20 20 20 20 20 20 20 20 72  nts);..        r
57fe0 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20  eturn this;..   
57ff0 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20   };..    /**... 
58000 2a 20 20 53 65 74 73 20 74 68 65 20 6f 72 69 65  *  Sets the orie
58010 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  ntation of the s
58020 6f 75 72 63 65 20 69 6e 20 33 64 20 73 70 61 63  ource in 3d spac
58030 65 2e 09 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  e..... *  @param
58040 20 20 7b 4e 75 6d 62 65 72 7d 20 20 78 0a 09 09    {Number}  x...
58050 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 4e 75 6d   *  @param  {Num
58060 62 65 72 7d 20 20 79 0a 09 09 20 2a 20 20 40 70  ber}  y... *  @p
58070 61 72 61 6d 20 20 7b 4e 75 6d 62 65 72 7d 20 20  aram  {Number}  
58080 7a 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20  z... *  @return 
58090 7b 54 6f 6e 65 2e 50 61 6e 6e 65 72 33 44 7d 20  {Tone.Panner3D} 
580a0 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20  this... */..    
580b0 54 6f 6e 65 2e 50 61 6e 6e 65 72 33 44 2e 70 72  Tone.Panner3D.pr
580c0 6f 74 6f 74 79 70 65 2e 73 65 74 4f 72 69 65 6e  ototype.setOrien
580d0 74 61 74 69 6f 6e 20 3d 20 66 75 6e 63 74 69 6f  tation = functio
580e0 6e 20 28 78 2c 20 79 2c 20 7a 29 20 7b 0a 09 20  n (x, y, z) {.. 
580f0 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e         if (this.
58100 5f 70 61 6e 6e 65 72 2e 6f 72 69 65 6e 74 61 74  _panner.orientat
58110 69 6f 6e 58 29 20 7b 0a 09 20 20 20 20 20 20 20  ionX) {..       
58120 20 20 20 20 20 76 61 72 20 6e 6f 77 20 3d 20 74       var now = t
58130 68 69 73 2e 6e 6f 77 28 29 3b 0a 09 20 20 20 20  his.now();..    
58140 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70 61          this._pa
58150 6e 6e 65 72 2e 6f 72 69 65 6e 74 61 74 69 6f 6e  nner.orientation
58160 58 2e 73 65 74 54 61 72 67 65 74 41 74 54 69 6d  X.setTargetAtTim
58170 65 28 78 2c 20 6e 6f 77 2c 20 74 68 69 73 2e 5f  e(x, now, this._
58180 72 61 6d 70 54 69 6d 65 43 6f 6e 73 74 61 6e 74  rampTimeConstant
58190 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
581a0 74 68 69 73 2e 5f 70 61 6e 6e 65 72 2e 6f 72 69  this._panner.ori
581b0 65 6e 74 61 74 69 6f 6e 59 2e 73 65 74 54 61 72  entationY.setTar
581c0 67 65 74 41 74 54 69 6d 65 28 79 2c 20 6e 6f 77  getAtTime(y, now
581d0 2c 20 74 68 69 73 2e 5f 72 61 6d 70 54 69 6d 65  , this._rampTime
581e0 43 6f 6e 73 74 61 6e 74 29 3b 0a 09 20 20 20 20  Constant);..    
581f0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70 61          this._pa
58200 6e 6e 65 72 2e 6f 72 69 65 6e 74 61 74 69 6f 6e  nner.orientation
58210 5a 2e 73 65 74 54 61 72 67 65 74 41 74 54 69 6d  Z.setTargetAtTim
58220 65 28 7a 2c 20 6e 6f 77 2c 20 74 68 69 73 2e 5f  e(z, now, this._
58230 72 61 6d 70 54 69 6d 65 43 6f 6e 73 74 61 6e 74  rampTimeConstant
58240 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c  );..        } el
58250 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  se {..          
58260 20 20 74 68 69 73 2e 5f 70 61 6e 6e 65 72 2e 73    this._panner.s
58270 65 74 4f 72 69 65 6e 74 61 74 69 6f 6e 28 78 2c  etOrientation(x,
58280 20 79 2c 20 7a 29 3b 0a 09 20 20 20 20 20 20 20   y, z);..       
58290 20 7d 0a 09 20 20 20 20 20 20 20 20 74 68 69 73   }..        this
582a0 2e 5f 6f 72 69 65 6e 74 61 74 69 6f 6e 20 3d 20  ._orientation = 
582b0 41 72 72 61 79 2e 70 72 6f 74 6f 74 79 70 65 2e  Array.prototype.
582c0 73 6c 69 63 65 2e 63 61 6c 6c 28 61 72 67 75 6d  slice.call(argum
582d0 65 6e 74 73 29 3b 0a 09 20 20 20 20 20 20 20 20  ents);..        
582e0 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20  return this;..  
582f0 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    };..    /**...
58300 20 2a 20 20 54 68 65 20 78 20 70 6f 73 69 74 69   *  The x positi
58310 6f 6e 20 6f 66 20 74 68 65 20 70 61 6e 6e 65 72  on of the panner
58320 20 6f 62 6a 65 63 74 2e 0a 09 09 20 2a 20 20 40   object.... *  @
58330 74 79 70 65 20 7b 4e 75 6d 62 65 72 7d 0a 09 09  type {Number}...
58340 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f   *  @memberOf To
58350 6e 65 2e 50 61 6e 6e 65 72 33 44 23 0a 09 09 20  ne.Panner3D#... 
58360 2a 20 20 40 6e 61 6d 65 20 70 6f 73 69 74 69 6f  *  @name positio
58370 6e 58 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62  nX... */..    Ob
58380 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65  ject.definePrope
58390 72 74 79 28 54 6f 6e 65 2e 50 61 6e 6e 65 72 33  rty(Tone.Panner3
583a0 44 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 70 6f  D.prototype, 'po
583b0 73 69 74 69 6f 6e 58 27 2c 20 7b 0a 09 20 20 20  sitionX', {..   
583c0 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74 69       set: functi
583d0 6f 6e 20 28 70 6f 73 29 20 7b 0a 09 20 20 20 20  on (pos) {..    
583e0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70 6f          this._po
583f0 73 69 74 69 6f 6e 5b 30 5d 20 3d 20 70 6f 73 3b  sition[0] = pos;
58400 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
58410 69 73 2e 73 65 74 50 6f 73 69 74 69 6f 6e 2e 61  is.setPosition.a
58420 70 70 6c 79 28 74 68 69 73 2c 20 74 68 69 73 2e  pply(this, this.
58430 5f 70 6f 73 69 74 69 6f 6e 29 3b 0a 09 20 20 20  _position);..   
58440 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20       },..       
58450 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   get: function (
58460 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
58470 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 70 6f   return this._po
58480 73 69 74 69 6f 6e 5b 30 5d 3b 0a 09 20 20 20 20  sition[0];..    
58490 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09      }..    });..
584a0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 68      /**... *  Th
584b0 65 20 79 20 70 6f 73 69 74 69 6f 6e 20 6f 66 20  e y position of 
584c0 74 68 65 20 70 61 6e 6e 65 72 20 6f 62 6a 65 63  the panner objec
584d0 74 2e 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b  t.... *  @type {
584e0 4e 75 6d 62 65 72 7d 0a 09 09 20 2a 20 20 40 6d  Number}... *  @m
584f0 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 50 61 6e  emberOf Tone.Pan
58500 6e 65 72 33 44 23 0a 09 09 20 2a 20 20 40 6e 61  ner3D#... *  @na
58510 6d 65 20 70 6f 73 69 74 69 6f 6e 59 0a 09 09 20  me positionY... 
58520 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64  */..    Object.d
58530 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f  efineProperty(To
58540 6e 65 2e 50 61 6e 6e 65 72 33 44 2e 70 72 6f 74  ne.Panner3D.prot
58550 6f 74 79 70 65 2c 20 27 70 6f 73 69 74 69 6f 6e  otype, 'position
58560 59 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 73  Y', {..        s
58570 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 70 6f  et: function (po
58580 73 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  s) {..          
58590 20 20 74 68 69 73 2e 5f 70 6f 73 69 74 69 6f 6e    this._position
585a0 5b 31 5d 20 3d 20 70 6f 73 3b 0a 09 20 20 20 20  [1] = pos;..    
585b0 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 65 74          this.set
585c0 50 6f 73 69 74 69 6f 6e 2e 61 70 70 6c 79 28 74  Position.apply(t
585d0 68 69 73 2c 20 74 68 69 73 2e 5f 70 6f 73 69 74  his, this._posit
585e0 69 6f 6e 29 3b 0a 09 20 20 20 20 20 20 20 20 7d  ion);..        }
585f0 2c 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a 20  ,..        get: 
58600 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
58610 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
58620 6e 20 74 68 69 73 2e 5f 70 6f 73 69 74 69 6f 6e  n this._position
58630 5b 31 5d 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a  [1];..        }.
58640 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a  .    });..    /*
58650 2a 0a 09 09 20 2a 20 20 54 68 65 20 7a 20 70 6f  *... *  The z po
58660 73 69 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 61  sition of the pa
58670 6e 6e 65 72 20 6f 62 6a 65 63 74 2e 0a 09 09 20  nner object.... 
58680 2a 20 20 40 74 79 70 65 20 7b 4e 75 6d 62 65 72  *  @type {Number
58690 7d 0a 09 09 20 2a 20 20 40 6d 65 6d 62 65 72 4f  }... *  @memberO
586a0 66 20 54 6f 6e 65 2e 50 61 6e 6e 65 72 33 44 23  f Tone.Panner3D#
586b0 0a 09 09 20 2a 20 20 40 6e 61 6d 65 20 70 6f 73  ... *  @name pos
586c0 69 74 69 6f 6e 5a 0a 09 09 20 2a 2f 0a 09 20 20  itionZ... */..  
586d0 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50    Object.defineP
586e0 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 50 61 6e  roperty(Tone.Pan
586f0 6e 65 72 33 44 2e 70 72 6f 74 6f 74 79 70 65 2c  ner3D.prototype,
58700 20 27 70 6f 73 69 74 69 6f 6e 5a 27 2c 20 7b 0a   'positionZ', {.
58710 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66 75  .        set: fu
58720 6e 63 74 69 6f 6e 20 28 70 6f 73 29 20 7b 0a 09  nction (pos) {..
58730 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
58740 2e 5f 70 6f 73 69 74 69 6f 6e 5b 32 5d 20 3d 20  ._position[2] = 
58750 70 6f 73 3b 0a 09 20 20 20 20 20 20 20 20 20 20  pos;..          
58760 20 20 74 68 69 73 2e 73 65 74 50 6f 73 69 74 69    this.setPositi
58770 6f 6e 2e 61 70 70 6c 79 28 74 68 69 73 2c 20 74  on.apply(this, t
58780 68 69 73 2e 5f 70 6f 73 69 74 69 6f 6e 29 3b 0a  his._position);.
58790 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20  .        },..   
587a0 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69       get: functi
587b0 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
587c0 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
587d0 2e 5f 70 6f 73 69 74 69 6f 6e 5b 32 5d 3b 0a 09  ._position[2];..
587e0 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d          }..    }
587f0 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  );..    /**... *
58800 20 20 54 68 65 20 78 20 6f 72 69 65 6e 74 61 74    The x orientat
58810 69 6f 6e 20 6f 66 20 74 68 65 20 70 61 6e 6e 65  ion of the panne
58820 72 20 6f 62 6a 65 63 74 2e 0a 09 09 20 2a 20 20  r object.... *  
58830 40 74 79 70 65 20 7b 4e 75 6d 62 65 72 7d 0a 09  @type {Number}..
58840 09 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54  . *  @memberOf T
58850 6f 6e 65 2e 50 61 6e 6e 65 72 33 44 23 0a 09 09  one.Panner3D#...
58860 20 2a 20 20 40 6e 61 6d 65 20 6f 72 69 65 6e 74   *  @name orient
58870 61 74 69 6f 6e 58 0a 09 09 20 2a 2f 0a 09 20 20  ationX... */..  
58880 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50    Object.defineP
58890 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 50 61 6e  roperty(Tone.Pan
588a0 6e 65 72 33 44 2e 70 72 6f 74 6f 74 79 70 65 2c  ner3D.prototype,
588b0 20 27 6f 72 69 65 6e 74 61 74 69 6f 6e 58 27 2c   'orientationX',
588c0 20 7b 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a   {..        set:
588d0 20 66 75 6e 63 74 69 6f 6e 20 28 70 6f 73 29 20   function (pos) 
588e0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
588f0 68 69 73 2e 5f 6f 72 69 65 6e 74 61 74 69 6f 6e  his._orientation
58900 5b 30 5d 20 3d 20 70 6f 73 3b 0a 09 20 20 20 20  [0] = pos;..    
58910 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 65 74          this.set
58920 4f 72 69 65 6e 74 61 74 69 6f 6e 2e 61 70 70 6c  Orientation.appl
58930 79 28 74 68 69 73 2c 20 74 68 69 73 2e 5f 6f 72  y(this, this._or
58940 69 65 6e 74 61 74 69 6f 6e 29 3b 0a 09 20 20 20  ientation);..   
58950 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20       },..       
58960 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   get: function (
58970 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
58980 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 6f 72   return this._or
58990 69 65 6e 74 61 74 69 6f 6e 5b 30 5d 3b 0a 09 20  ientation[0];.. 
589a0 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29         }..    })
589b0 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
589c0 20 54 68 65 20 79 20 6f 72 69 65 6e 74 61 74 69   The y orientati
589d0 6f 6e 20 6f 66 20 74 68 65 20 70 61 6e 6e 65 72  on of the panner
589e0 20 6f 62 6a 65 63 74 2e 0a 09 09 20 2a 20 20 40   object.... *  @
589f0 74 79 70 65 20 7b 4e 75 6d 62 65 72 7d 0a 09 09  type {Number}...
58a00 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f   *  @memberOf To
58a10 6e 65 2e 50 61 6e 6e 65 72 33 44 23 0a 09 09 20  ne.Panner3D#... 
58a20 2a 20 20 40 6e 61 6d 65 20 6f 72 69 65 6e 74 61  *  @name orienta
58a30 74 69 6f 6e 59 0a 09 09 20 2a 2f 0a 09 20 20 20  tionY... */..   
58a40 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72   Object.definePr
58a50 6f 70 65 72 74 79 28 54 6f 6e 65 2e 50 61 6e 6e  operty(Tone.Pann
58a60 65 72 33 44 2e 70 72 6f 74 6f 74 79 70 65 2c 20  er3D.prototype, 
58a70 27 6f 72 69 65 6e 74 61 74 69 6f 6e 59 27 2c 20  'orientationY', 
58a80 7b 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20  {..        set: 
58a90 66 75 6e 63 74 69 6f 6e 20 28 70 6f 73 29 20 7b  function (pos) {
58aa0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
58ab0 69 73 2e 5f 6f 72 69 65 6e 74 61 74 69 6f 6e 5b  is._orientation[
58ac0 31 5d 20 3d 20 70 6f 73 3b 0a 09 20 20 20 20 20  1] = pos;..     
58ad0 20 20 20 20 20 20 20 74 68 69 73 2e 73 65 74 4f         this.setO
58ae0 72 69 65 6e 74 61 74 69 6f 6e 2e 61 70 70 6c 79  rientation.apply
58af0 28 74 68 69 73 2c 20 74 68 69 73 2e 5f 6f 72 69  (this, this._ori
58b00 65 6e 74 61 74 69 6f 6e 29 3b 0a 09 20 20 20 20  entation);..    
58b10 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20      },..        
58b20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29  get: function ()
58b30 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
58b40 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 6f 72 69  return this._ori
58b50 65 6e 74 61 74 69 6f 6e 5b 31 5d 3b 0a 09 20 20  entation[1];..  
58b60 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b        }..    });
58b70 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
58b80 54 68 65 20 7a 20 6f 72 69 65 6e 74 61 74 69 6f  The z orientatio
58b90 6e 20 6f 66 20 74 68 65 20 70 61 6e 6e 65 72 20  n of the panner 
58ba0 6f 62 6a 65 63 74 2e 0a 09 09 20 2a 20 20 40 74  object.... *  @t
58bb0 79 70 65 20 7b 4e 75 6d 62 65 72 7d 0a 09 09 20  ype {Number}... 
58bc0 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e  *  @memberOf Ton
58bd0 65 2e 50 61 6e 6e 65 72 33 44 23 0a 09 09 20 2a  e.Panner3D#... *
58be0 20 20 40 6e 61 6d 65 20 6f 72 69 65 6e 74 61 74    @name orientat
58bf0 69 6f 6e 5a 0a 09 09 20 2a 2f 0a 09 20 20 20 20  ionZ... */..    
58c00 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f  Object.definePro
58c10 70 65 72 74 79 28 54 6f 6e 65 2e 50 61 6e 6e 65  perty(Tone.Panne
58c20 72 33 44 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27  r3D.prototype, '
58c30 6f 72 69 65 6e 74 61 74 69 6f 6e 5a 27 2c 20 7b  orientationZ', {
58c40 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66  ..        set: f
58c50 75 6e 63 74 69 6f 6e 20 28 70 6f 73 29 20 7b 0a  unction (pos) {.
58c60 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
58c70 73 2e 5f 6f 72 69 65 6e 74 61 74 69 6f 6e 5b 32  s._orientation[2
58c80 5d 20 3d 20 70 6f 73 3b 0a 09 20 20 20 20 20 20  ] = pos;..      
58c90 20 20 20 20 20 20 74 68 69 73 2e 73 65 74 4f 72        this.setOr
58ca0 69 65 6e 74 61 74 69 6f 6e 2e 61 70 70 6c 79 28  ientation.apply(
58cb0 74 68 69 73 2c 20 74 68 69 73 2e 5f 6f 72 69 65  this, this._orie
58cc0 6e 74 61 74 69 6f 6e 29 3b 0a 09 20 20 20 20 20  ntation);..     
58cd0 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 67     },..        g
58ce0 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  et: function () 
58cf0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
58d00 65 74 75 72 6e 20 74 68 69 73 2e 5f 6f 72 69 65  eturn this._orie
58d10 6e 74 61 74 69 6f 6e 5b 32 5d 3b 0a 09 20 20 20  ntation[2];..   
58d20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a       }..    });.
58d30 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 50  .    /**... *  P
58d40 72 6f 78 79 20 61 20 70 72 6f 70 65 72 74 79 20  roxy a property 
58d50 6f 6e 20 74 68 65 20 70 61 6e 6e 65 72 20 74 6f  on the panner to
58d60 20 61 6e 20 65 78 70 6f 73 65 64 20 70 75 62 6c   an exposed publ
58d70 69 63 20 70 72 6f 70 65 72 79 0a 09 09 20 2a 20  ic propery... * 
58d80 20 40 70 61 72 61 6d 20 20 7b 53 74 72 69 6e 67   @param  {String
58d90 7d 20 20 70 72 6f 70 0a 09 09 20 2a 20 20 40 70  }  prop... *  @p
58da0 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20  rivate... */..  
58db0 20 20 54 6f 6e 65 2e 50 61 6e 6e 65 72 33 44 2e    Tone.Panner3D.
58dc0 5f 61 6c 69 61 73 50 72 6f 70 65 72 74 79 20 3d  _aliasProperty =
58dd0 20 66 75 6e 63 74 69 6f 6e 20 28 70 72 6f 70 29   function (prop)
58de0 20 7b 0a 09 20 20 20 20 20 20 20 20 4f 62 6a 65   {..        Obje
58df0 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74  ct.definePropert
58e00 79 28 54 6f 6e 65 2e 50 61 6e 6e 65 72 33 44 2e  y(Tone.Panner3D.
58e10 70 72 6f 74 6f 74 79 70 65 2c 20 70 72 6f 70 2c  prototype, prop,
58e20 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
58e30 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 76  set: function (v
58e40 61 6c 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  al) {..         
58e50 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70 61 6e         this._pan
58e60 6e 65 72 5b 70 72 6f 70 5d 20 3d 20 76 61 6c 3b  ner[prop] = val;
58e70 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c  ..            },
58e80 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
58e90 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b  t: function () {
58ea0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
58eb0 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 70    return this._p
58ec0 61 6e 6e 65 72 5b 70 72 6f 70 5d 3b 0a 09 20 20  anner[prop];..  
58ed0 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20            }..   
58ee0 20 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 7d 3b       });..    };
58ef0 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
58f00 54 68 65 20 70 61 6e 6e 69 6e 67 20 6d 6f 64 65  The panning mode
58f10 6c 2e 20 45 69 74 68 65 72 20 22 65 71 75 61 6c  l. Either "equal
58f20 70 6f 77 65 72 22 20 6f 72 20 22 48 52 54 46 22  power" or "HRTF"
58f30 2e 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b 53  .... *  @type {S
58f40 74 72 69 6e 67 7d 0a 09 09 20 2a 20 20 40 6d 65  tring}... *  @me
58f50 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 50 61 6e 6e  mberOf Tone.Pann
58f60 65 72 33 44 23 0a 09 09 20 2a 20 20 40 6e 61 6d  er3D#... *  @nam
58f70 65 20 70 61 6e 6e 69 6e 67 4d 6f 64 65 6c 0a 09  e panningModel..
58f80 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50  . */..    Tone.P
58f90 61 6e 6e 65 72 33 44 2e 5f 61 6c 69 61 73 50 72  anner3D._aliasPr
58fa0 6f 70 65 72 74 79 28 27 70 61 6e 6e 69 6e 67 4d  operty('panningM
58fb0 6f 64 65 6c 27 29 3b 0a 09 20 20 20 20 2f 2a 2a  odel');..    /**
58fc0 0a 09 09 20 2a 20 20 41 20 72 65 66 65 72 65 6e  ... *  A referen
58fd0 63 65 20 64 69 73 74 61 6e 63 65 20 66 6f 72 20  ce distance for 
58fe0 72 65 64 75 63 69 6e 67 20 76 6f 6c 75 6d 65 20  reducing volume 
58ff0 61 73 20 73 6f 75 72 63 65 20 6d 6f 76 65 20 66  as source move f
59000 75 72 74 68 65 72 20 66 72 6f 6d 20 74 68 65 20  urther from the 
59010 6c 69 73 74 65 6e 65 72 0a 09 09 20 2a 20 20 40  listener... *  @
59020 74 79 70 65 20 7b 4e 75 6d 62 65 72 7d 0a 09 09  type {Number}...
59030 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f   *  @memberOf To
59040 6e 65 2e 50 61 6e 6e 65 72 33 44 23 0a 09 09 20  ne.Panner3D#... 
59050 2a 20 20 40 6e 61 6d 65 20 72 65 66 44 69 73 74  *  @name refDist
59060 61 6e 63 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20  ance... */..    
59070 54 6f 6e 65 2e 50 61 6e 6e 65 72 33 44 2e 5f 61  Tone.Panner3D._a
59080 6c 69 61 73 50 72 6f 70 65 72 74 79 28 27 72 65  liasProperty('re
59090 66 44 69 73 74 61 6e 63 65 27 29 3b 0a 09 20 20  fDistance');..  
590a0 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 44 65 73 63    /**... *  Desc
590b0 72 69 62 65 73 20 68 6f 77 20 71 75 69 63 6b 6c  ribes how quickl
590c0 79 20 74 68 65 20 76 6f 6c 75 6d 65 20 69 73 20  y the volume is 
590d0 72 65 64 75 63 65 64 20 61 73 20 73 6f 75 72 63  reduced as sourc
590e0 65 20 6d 6f 76 65 73 20 61 77 61 79 20 66 72 6f  e moves away fro
590f0 6d 20 6c 69 73 74 65 6e 65 72 2e 0a 09 09 20 2a  m listener.... *
59100 20 20 40 74 79 70 65 20 7b 4e 75 6d 62 65 72 7d    @type {Number}
59110 0a 09 09 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66  ... *  @memberOf
59120 20 54 6f 6e 65 2e 50 61 6e 6e 65 72 33 44 23 0a   Tone.Panner3D#.
59130 09 09 20 2a 20 20 40 6e 61 6d 65 20 72 6f 6c 6c  .. *  @name roll
59140 6f 66 66 46 61 63 74 6f 72 0a 09 09 20 2a 2f 0a  offFactor... */.
59150 09 20 20 20 20 54 6f 6e 65 2e 50 61 6e 6e 65 72  .    Tone.Panner
59160 33 44 2e 5f 61 6c 69 61 73 50 72 6f 70 65 72 74  3D._aliasPropert
59170 79 28 27 72 6f 6c 6c 6f 66 66 46 61 63 74 6f 72  y('rolloffFactor
59180 27 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  ');..    /**... 
59190 2a 20 20 54 68 65 20 64 69 73 74 61 6e 63 65 20  *  The distance 
591a0 6d 6f 64 65 6c 20 75 73 65 64 20 62 79 2c 20 20  model used by,  
591b0 22 6c 69 6e 65 61 72 22 2c 20 22 69 6e 76 65 72  "linear", "inver
591c0 73 65 22 2c 20 6f 72 20 22 65 78 70 6f 6e 65 6e  se", or "exponen
591d0 74 69 61 6c 22 2e 0a 09 09 20 2a 20 20 40 74 79  tial".... *  @ty
591e0 70 65 20 7b 53 74 72 69 6e 67 7d 0a 09 09 20 2a  pe {String}... *
591f0 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65    @memberOf Tone
59200 2e 50 61 6e 6e 65 72 33 44 23 0a 09 09 20 2a 20  .Panner3D#... * 
59210 20 40 6e 61 6d 65 20 64 69 73 74 61 6e 63 65 4d   @name distanceM
59220 6f 64 65 6c 0a 09 09 20 2a 2f 0a 09 20 20 20 20  odel... */..    
59230 54 6f 6e 65 2e 50 61 6e 6e 65 72 33 44 2e 5f 61  Tone.Panner3D._a
59240 6c 69 61 73 50 72 6f 70 65 72 74 79 28 27 64 69  liasProperty('di
59250 73 74 61 6e 63 65 4d 6f 64 65 6c 27 29 3b 0a 09  stanceModel');..
59260 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 68      /**... *  Th
59270 65 20 61 6e 67 6c 65 2c 20 69 6e 20 64 65 67 72  e angle, in degr
59280 65 65 73 2c 20 69 6e 73 69 64 65 20 6f 66 20 77  ees, inside of w
59290 68 69 63 68 20 74 68 65 72 65 20 77 69 6c 6c 20  hich there will 
592a0 62 65 20 6e 6f 20 76 6f 6c 75 6d 65 20 72 65 64  be no volume red
592b0 75 63 74 69 6f 6e 0a 09 09 20 2a 20 20 40 74 79  uction... *  @ty
592c0 70 65 20 7b 44 65 67 72 65 65 73 7d 0a 09 09 20  pe {Degrees}... 
592d0 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e  *  @memberOf Ton
592e0 65 2e 50 61 6e 6e 65 72 33 44 23 0a 09 09 20 2a  e.Panner3D#... *
592f0 20 20 40 6e 61 6d 65 20 63 6f 6e 65 49 6e 6e 65    @name coneInne
59300 72 41 6e 67 6c 65 0a 09 09 20 2a 2f 0a 09 20 20  rAngle... */..  
59310 20 20 54 6f 6e 65 2e 50 61 6e 6e 65 72 33 44 2e    Tone.Panner3D.
59320 5f 61 6c 69 61 73 50 72 6f 70 65 72 74 79 28 27  _aliasProperty('
59330 63 6f 6e 65 49 6e 6e 65 72 41 6e 67 6c 65 27 29  coneInnerAngle')
59340 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
59350 20 54 68 65 20 61 6e 67 6c 65 2c 20 69 6e 20 64   The angle, in d
59360 65 67 72 65 65 73 2c 20 6f 75 74 73 69 64 65 20  egrees, outside 
59370 6f 66 20 77 68 69 63 68 20 74 68 65 20 76 6f 6c  of which the vol
59380 75 6d 65 20 77 69 6c 6c 20 62 65 20 72 65 64 75  ume will be redu
59390 63 65 64 20 0a 09 09 20 2a 20 20 74 6f 20 61 20  ced ... *  to a 
593a0 63 6f 6e 73 74 61 6e 74 20 76 61 6c 75 65 20 6f  constant value o
593b0 66 20 63 6f 6e 65 4f 75 74 65 72 47 61 69 6e 0a  f coneOuterGain.
593c0 09 09 20 2a 20 20 40 74 79 70 65 20 7b 44 65 67  .. *  @type {Deg
593d0 72 65 65 73 7d 0a 09 09 20 2a 20 20 40 6d 65 6d  rees}... *  @mem
593e0 62 65 72 4f 66 20 54 6f 6e 65 2e 50 61 6e 6e 65  berOf Tone.Panne
593f0 72 33 44 23 0a 09 09 20 2a 20 20 40 6e 61 6d 65  r3D#... *  @name
59400 20 63 6f 6e 65 4f 75 74 65 72 41 6e 67 6c 65 0a   coneOuterAngle.
59410 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
59420 50 61 6e 6e 65 72 33 44 2e 5f 61 6c 69 61 73 50  Panner3D._aliasP
59430 72 6f 70 65 72 74 79 28 27 63 6f 6e 65 4f 75 74  roperty('coneOut
59440 65 72 41 6e 67 6c 65 27 29 3b 0a 09 20 20 20 20  erAngle');..    
59450 2f 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20 67 61  /**... *  The ga
59460 69 6e 20 6f 75 74 73 69 64 65 20 6f 66 20 74 68  in outside of th
59470 65 20 63 6f 6e 65 4f 75 74 65 72 41 6e 67 6c 65  e coneOuterAngle
59480 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b 47 61  ... *  @type {Ga
59490 69 6e 7d 0a 09 09 20 2a 20 20 40 6d 65 6d 62 65  in}... *  @membe
594a0 72 4f 66 20 54 6f 6e 65 2e 50 61 6e 6e 65 72 33  rOf Tone.Panner3
594b0 44 23 0a 09 09 20 2a 20 20 40 6e 61 6d 65 20 63  D#... *  @name c
594c0 6f 6e 65 4f 75 74 65 72 47 61 69 6e 0a 09 09 20  oneOuterGain... 
594d0 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50 61 6e  */..    Tone.Pan
594e0 6e 65 72 33 44 2e 5f 61 6c 69 61 73 50 72 6f 70  ner3D._aliasProp
594f0 65 72 74 79 28 27 63 6f 6e 65 4f 75 74 65 72 47  erty('coneOuterG
59500 61 69 6e 27 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a  ain');..    /**.
59510 09 09 20 2a 20 20 54 68 65 20 6d 61 78 69 6d 75  .. *  The maximu
59520 6d 20 64 69 73 74 61 6e 63 65 20 62 65 74 77 65  m distance betwe
59530 65 6e 20 73 6f 75 72 63 65 20 61 6e 64 20 6c 69  en source and li
59540 73 74 65 6e 65 72 2c 20 0a 09 09 20 2a 20 20 61  stener, ... *  a
59550 66 74 65 72 20 77 68 69 63 68 20 74 68 65 20 76  fter which the v
59560 6f 6c 75 6d 65 20 77 69 6c 6c 20 6e 6f 74 20 62  olume will not b
59570 65 20 72 65 64 75 63 65 64 20 61 6e 79 20 66 75  e reduced any fu
59580 72 74 68 65 72 2e 0a 09 09 20 2a 20 20 40 74 79  rther.... *  @ty
59590 70 65 20 7b 50 6f 73 69 74 69 76 65 7d 0a 09 09  pe {Positive}...
595a0 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f   *  @memberOf To
595b0 6e 65 2e 50 61 6e 6e 65 72 33 44 23 0a 09 09 20  ne.Panner3D#... 
595c0 2a 20 20 40 6e 61 6d 65 20 6d 61 78 44 69 73 74  *  @name maxDist
595d0 61 6e 63 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20  ance... */..    
595e0 54 6f 6e 65 2e 50 61 6e 6e 65 72 33 44 2e 5f 61  Tone.Panner3D._a
595f0 6c 69 61 73 50 72 6f 70 65 72 74 79 28 27 6d 61  liasProperty('ma
59600 78 44 69 73 74 61 6e 63 65 27 29 3b 0a 09 20 20  xDistance');..  
59610 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 6c 65 61    /**... *  Clea
59620 6e 20 75 70 2e 0a 09 09 20 2a 20 20 40 72 65 74  n up.... *  @ret
59630 75 72 6e 73 20 7b 54 6f 6e 65 2e 50 61 6e 6e 65  urns {Tone.Panne
59640 72 33 44 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a  r3D} this... */.
59650 09 20 20 20 20 54 6f 6e 65 2e 50 61 6e 6e 65 72  .    Tone.Panner
59660 33 44 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73  3D.prototype.dis
59670 70 6f 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20  pose = function 
59680 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 74 68  () {..        th
59690 69 73 2e 5f 70 61 6e 6e 65 72 2e 64 69 73 63 6f  is._panner.disco
596a0 6e 6e 65 63 74 28 29 3b 0a 09 20 20 20 20 20 20  nnect();..      
596b0 20 20 74 68 69 73 2e 5f 70 61 6e 6e 65 72 20 3d    this._panner =
596c0 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
596d0 74 68 69 73 2e 5f 6f 72 69 65 6e 74 61 74 69 6f  this._orientatio
596e0 6e 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20  n = null;..     
596f0 20 20 20 74 68 69 73 2e 5f 70 6f 73 69 74 69 6f     this._positio
59700 6e 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20  n = null;..     
59710 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a     return this;.
59720 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74  .    };..    ret
59730 75 72 6e 20 54 6f 6e 65 2e 50 61 6e 6e 65 72 33  urn Tone.Panner3
59740 44 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28  D;..});..Module(
59750 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20  function (Tone) 
59760 7b 0a 09 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a  {..    ..    /**
59770 0a 09 09 20 2a 20 20 40 63 6c 61 73 73 20 54 6f  ... *  @class To
59780 6e 65 2e 50 61 6e 56 6f 6c 20 69 73 20 61 20 54  ne.PanVol is a T
59790 6f 6e 65 2e 50 61 6e 6e 65 72 20 61 6e 64 20 54  one.Panner and T
597a0 6f 6e 65 2e 56 6f 6c 75 6d 65 20 69 6e 20 6f 6e  one.Volume in on
597b0 65 2e 0a 09 09 20 2a 0a 09 09 20 2a 20 20 40 65  e.... *... *  @e
597c0 78 74 65 6e 64 73 20 7b 54 6f 6e 65 7d 0a 09 09  xtends {Tone}...
597d0 20 2a 20 20 40 63 6f 6e 73 74 72 75 63 74 6f 72   *  @constructor
597e0 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 41  ... *  @param {A
597f0 75 64 69 6f 52 61 6e 67 65 7d 20 70 61 6e 20 74  udioRange} pan t
59800 68 65 20 69 6e 69 74 69 61 6c 20 70 61 6e 0a 09  he initial pan..
59810 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 6e 75 6d  . *  @param {num
59820 62 65 72 7d 20 76 6f 6c 75 6d 65 20 54 68 65 20  ber} volume The 
59830 6f 75 74 70 75 74 20 76 6f 6c 75 6d 65 2e 20 0a  output volume. .
59840 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09  .. *  @example..
59850 09 20 2a 20 2f 2f 70 61 6e 20 74 68 65 20 69 6e  . * //pan the in
59860 63 6f 6d 69 6e 67 20 73 69 67 6e 61 6c 20 6c 65  coming signal le
59870 66 74 20 61 6e 64 20 64 72 6f 70 20 74 68 65 20  ft and drop the 
59880 76 6f 6c 75 6d 65 0a 09 09 20 2a 20 76 61 72 20  volume... * var 
59890 70 61 6e 56 6f 6c 20 3d 20 6e 65 77 20 54 6f 6e  panVol = new Ton
598a0 65 2e 50 61 6e 56 6f 6c 28 30 2e 32 35 2c 20 2d  e.PanVol(0.25, -
598b0 31 32 29 3b 0a 09 09 20 2a 2f 0a 09 20 20 20 20  12);... */..    
598c0 54 6f 6e 65 2e 50 61 6e 56 6f 6c 20 3d 20 66 75  Tone.PanVol = fu
598d0 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
598e0 20 20 20 20 20 76 61 72 20 6f 70 74 69 6f 6e 73       var options
598f0 20 3d 20 74 68 69 73 2e 6f 70 74 69 6f 6e 73 4f   = this.optionsO
59900 62 6a 65 63 74 28 61 72 67 75 6d 65 6e 74 73 2c  bject(arguments,
59910 20 5b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   [..            
59920 27 70 61 6e 27 2c 0a 09 20 20 20 20 20 20 20 20  'pan',..        
59930 20 20 20 20 27 76 6f 6c 75 6d 65 27 0a 09 20 20      'volume'..  
59940 20 20 20 20 20 20 5d 2c 20 54 6f 6e 65 2e 50 61        ], Tone.Pa
59950 6e 56 6f 6c 2e 64 65 66 61 75 6c 74 73 29 3b 0a  nVol.defaults);.
59960 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
59970 20 2a 20 20 54 68 65 20 70 61 6e 6e 69 6e 67 20   *  The panning 
59980 6e 6f 64 65 0a 09 09 09 20 2a 20 20 40 74 79 70  node.... *  @typ
59990 65 20 7b 54 6f 6e 65 2e 50 61 6e 6e 65 72 7d 0a  e {Tone.Panner}.
599a0 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
599b0 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
599c0 74 68 69 73 2e 5f 70 61 6e 6e 65 72 20 3d 20 74  this._panner = t
599d0 68 69 73 2e 69 6e 70 75 74 20 3d 20 6e 65 77 20  his.input = new 
599e0 54 6f 6e 65 2e 50 61 6e 6e 65 72 28 6f 70 74 69  Tone.Panner(opti
599f0 6f 6e 73 2e 70 61 6e 29 3b 0a 09 20 20 20 20 20  ons.pan);..     
59a00 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68     /**.... *  Th
59a10 65 20 4c 2f 52 20 70 61 6e 6e 69 6e 67 20 63 6f  e L/R panning co
59a20 6e 74 72 6f 6c 2e 0a 09 09 09 20 2a 20 20 40 74  ntrol..... *  @t
59a30 79 70 65 20 7b 41 75 64 69 6f 52 61 6e 67 65 7d  ype {AudioRange}
59a40 0a 09 09 09 20 2a 20 20 40 73 69 67 6e 61 6c 0a  .... *  @signal.
59a50 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
59a60 74 68 69 73 2e 70 61 6e 20 3d 20 74 68 69 73 2e  this.pan = this.
59a70 5f 70 61 6e 6e 65 72 2e 70 61 6e 3b 0a 09 20 20  _panner.pan;..  
59a80 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
59a90 20 54 68 65 20 76 6f 6c 75 6d 65 20 6e 6f 64 65   The volume node
59aa0 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54  .... *  @type {T
59ab0 6f 6e 65 2e 56 6f 6c 75 6d 65 7d 0a 09 09 09 20  one.Volume}.... 
59ac0 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
59ad0 2e 5f 76 6f 6c 75 6d 65 20 3d 20 74 68 69 73 2e  ._volume = this.
59ae0 6f 75 74 70 75 74 20 3d 20 6e 65 77 20 54 6f 6e  output = new Ton
59af0 65 2e 56 6f 6c 75 6d 65 28 6f 70 74 69 6f 6e 73  e.Volume(options
59b00 2e 76 6f 6c 75 6d 65 29 3b 0a 09 20 20 20 20 20  .volume);..     
59b10 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68     /**.... *  Th
59b20 65 20 76 6f 6c 75 6d 65 20 63 6f 6e 74 72 6f 6c  e volume control
59b30 20 69 6e 20 64 65 63 69 62 65 6c 73 2e 20 0a 09   in decibels. ..
59b40 09 09 20 2a 20 20 40 74 79 70 65 20 7b 44 65 63  .. *  @type {Dec
59b50 69 62 65 6c 73 7d 0a 09 09 09 20 2a 20 20 40 73  ibels}.... *  @s
59b60 69 67 6e 61 6c 0a 09 09 09 20 2a 2f 0a 09 20 20  ignal.... */..  
59b70 20 20 20 20 20 20 74 68 69 73 2e 76 6f 6c 75 6d        this.volum
59b80 65 20 3d 20 74 68 69 73 2e 5f 76 6f 6c 75 6d 65  e = this._volume
59b90 2e 76 6f 6c 75 6d 65 3b 0a 09 20 20 20 20 20 20  .volume;..      
59ba0 20 20 2f 2f 63 6f 6e 6e 65 63 74 69 6f 6e 73 0a    //connections.
59bb0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70  .        this._p
59bc0 61 6e 6e 65 72 2e 63 6f 6e 6e 65 63 74 28 74 68  anner.connect(th
59bd0 69 73 2e 5f 76 6f 6c 75 6d 65 29 3b 0a 09 20 20  is._volume);..  
59be0 20 20 20 20 20 20 74 68 69 73 2e 5f 72 65 61 64        this._read
59bf0 4f 6e 6c 79 28 5b 0a 09 20 20 20 20 20 20 20 20  Only([..        
59c00 20 20 20 20 27 70 61 6e 27 2c 0a 09 20 20 20 20      'pan',..    
59c10 20 20 20 20 20 20 20 20 27 76 6f 6c 75 6d 65 27          'volume'
59c20 0a 09 20 20 20 20 20 20 20 20 5d 29 3b 0a 09 20  ..        ]);.. 
59c30 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65 2e     };..    Tone.
59c40 65 78 74 65 6e 64 28 54 6f 6e 65 2e 50 61 6e 56  extend(Tone.PanV
59c50 6f 6c 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09  ol);..    /**...
59c60 20 2a 20 20 54 68 65 20 64 65 66 61 75 6c 74 73   *  The defaults
59c70 0a 09 09 20 2a 20 20 40 74 79 70 65 20 20 7b 4f  ... *  @type  {O
59c80 62 6a 65 63 74 7d 0a 09 09 20 2a 20 20 40 63 6f  bject}... *  @co
59c90 6e 73 74 0a 09 09 20 2a 20 20 40 73 74 61 74 69  nst... *  @stati
59ca0 63 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  c... */..    Ton
59cb0 65 2e 50 61 6e 56 6f 6c 2e 64 65 66 61 75 6c 74  e.PanVol.default
59cc0 73 20 3d 20 7b 0a 09 20 20 20 20 20 20 20 20 27  s = {..        '
59cd0 70 61 6e 27 3a 20 30 2e 35 2c 0a 09 20 20 20 20  pan': 0.5,..    
59ce0 20 20 20 20 27 76 6f 6c 75 6d 65 27 3a 20 30 0a      'volume': 0.
59cf0 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
59d00 0a 09 09 20 2a 20 20 63 6c 65 61 6e 20 75 70 0a  ... *  clean up.
59d10 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b  .. *  @returns {
59d20 54 6f 6e 65 2e 50 61 6e 56 6f 6c 7d 20 74 68 69  Tone.PanVol} thi
59d30 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  s... */..    Ton
59d40 65 2e 50 61 6e 56 6f 6c 2e 70 72 6f 74 6f 74 79  e.PanVol.prototy
59d50 70 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75 6e  pe.dispose = fun
59d60 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
59d70 20 20 20 20 54 6f 6e 65 2e 70 72 6f 74 6f 74 79      Tone.prototy
59d80 70 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28  pe.dispose.call(
59d90 74 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20 20  this);..        
59da0 74 68 69 73 2e 5f 77 72 69 74 61 62 6c 65 28 5b  this._writable([
59db0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 70  ..            'p
59dc0 61 6e 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20  an',..          
59dd0 20 20 27 76 6f 6c 75 6d 65 27 0a 09 20 20 20 20    'volume'..    
59de0 20 20 20 20 5d 29 3b 0a 09 20 20 20 20 20 20 20      ]);..       
59df0 20 74 68 69 73 2e 5f 70 61 6e 6e 65 72 2e 64 69   this._panner.di
59e00 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
59e10 20 20 74 68 69 73 2e 5f 70 61 6e 6e 65 72 20 3d    this._panner =
59e20 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
59e30 74 68 69 73 2e 70 61 6e 20 3d 20 6e 75 6c 6c 3b  this.pan = null;
59e40 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
59e50 76 6f 6c 75 6d 65 2e 64 69 73 70 6f 73 65 28 29  volume.dispose()
59e60 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
59e70 5f 76 6f 6c 75 6d 65 20 3d 20 6e 75 6c 6c 3b 0a  _volume = null;.
59e80 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 6f  .        this.vo
59e90 6c 75 6d 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20  lume = null;..  
59ea0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
59eb0 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  s;..    };..    
59ec0 72 65 74 75 72 6e 20 54 6f 6e 65 2e 50 61 6e 56  return Tone.PanV
59ed0 6f 6c 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65  ol;..});..Module
59ee0 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29  (function (Tone)
59ef0 20 7b 0a 09 20 20 20 20 0a 09 20 20 20 20 2f 2a   {..    ..    /*
59f00 2a 0a 09 09 20 2a 20 20 40 63 6c 61 73 73 20 54  *... *  @class T
59f10 6f 6e 65 2e 43 74 72 6c 49 6e 74 65 72 70 6f 6c  one.CtrlInterpol
59f20 61 74 65 20 77 69 6c 6c 20 69 6e 74 65 72 70 6f  ate will interpo
59f30 6c 61 74 65 20 62 65 74 77 65 65 6e 20 67 69 76  late between giv
59f40 65 6e 20 76 61 6c 75 65 73 20 62 61 73 65 64 0a  en values based.
59f50 09 09 20 2a 20 20 20 20 20 20 20 20 20 6f 6e 20  .. *         on 
59f60 74 68 65 20 22 69 6e 64 65 78 22 20 70 72 6f 70  the "index" prop
59f70 65 72 74 79 2e 20 50 61 73 73 69 6e 67 20 69 6e  erty. Passing in
59f80 20 61 6e 20 61 72 72 61 79 20 6f 72 20 6f 62 6a   an array or obj
59f90 65 63 74 20 6c 69 74 65 72 61 6c 0a 09 09 20 2a  ect literal... *
59fa0 20 20 20 20 20 20 20 20 20 77 69 6c 6c 20 69 6e           will in
59fb0 74 65 72 70 6f 6c 61 74 65 20 65 61 63 68 20 6f  terpolate each o
59fc0 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  f the parameters
59fd0 2e 20 4e 6f 74 65 20 28 69 2e 65 2e 20 22 43 33  . Note (i.e. "C3
59fe0 22 29 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  ")... *         
59ff0 61 6e 64 20 54 69 6d 65 20 28 69 2e 65 2e 20 22  and Time (i.e. "
5a000 34 6e 20 2b 20 32 22 29 20 63 61 6e 20 62 65 20  4n + 2") can be 
5a010 69 6e 74 65 72 70 6f 6c 61 74 65 64 2e 20 41 6c  interpolated. Al
5a020 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73 20 61  l other values a
5a030 72 65 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  re... *         
5a040 61 73 73 75 6d 65 64 20 74 6f 20 62 65 20 6e 75  assumed to be nu
5a050 6d 62 65 72 73 2e 20 0a 09 09 20 2a 20 20 40 65  mbers. ... *  @e
5a060 78 61 6d 70 6c 65 0a 09 09 20 2a 20 76 61 72 20  xample... * var 
5a070 69 6e 74 65 72 70 20 3d 20 6e 65 77 20 54 6f 6e  interp = new Ton
5a080 65 2e 43 74 72 6c 49 6e 74 65 72 70 6f 6c 61 74  e.CtrlInterpolat
5a090 65 28 5b 30 2c 20 32 2c 20 39 2c 20 34 5d 29 3b  e([0, 2, 9, 4]);
5a0a0 0a 09 09 20 2a 20 69 6e 74 65 72 70 2e 69 6e 64  ... * interp.ind
5a0b0 65 78 20 3d 20 30 2e 37 35 3b 0a 09 09 20 2a 20  ex = 0.75;... * 
5a0c0 69 6e 74 65 72 70 2e 76 61 6c 75 65 3b 20 2f 2f  interp.value; //
5a0d0 72 65 74 75 72 6e 73 20 31 2e 35 0a 09 09 20 2a  returns 1.5... *
5a0e0 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a  ... *  @example.
5a0f0 09 09 20 2a 20 76 61 72 20 69 6e 74 65 72 70 20  .. * var interp 
5a100 3d 20 6e 65 77 20 54 6f 6e 65 2e 43 74 72 6c 49  = new Tone.CtrlI
5a110 6e 74 65 72 70 6f 6c 61 74 65 28 5b 0a 09 09 20  nterpolate([... 
5a120 2a 20 09 5b 32 2c 20 34 2c 20 35 5d 2c 0a 09 09  * .[2, 4, 5],...
5a130 20 2a 20 09 5b 39 2c 20 33 2c 20 32 5d 2c 0a 09   * .[9, 3, 2],..
5a140 09 20 2a 20 5d 29 3b 0a 09 09 20 2a 20 40 70 61  . * ]);... * @pa
5a150 72 61 6d 20 7b 41 72 72 61 79 7d 20 76 61 6c 75  ram {Array} valu
5a160 65 73 20 54 68 65 20 61 72 72 61 79 20 6f 66 20  es The array of 
5a170 76 61 6c 75 65 73 20 74 6f 20 69 6e 74 65 72 70  values to interp
5a180 6f 6c 61 74 65 20 6f 76 65 72 0a 09 09 20 2a 20  olate over... * 
5a190 40 70 61 72 61 6d 20 7b 50 6f 73 69 74 69 76 65  @param {Positive
5a1a0 7d 20 69 6e 64 65 78 20 54 68 65 20 69 6e 69 74  } index The init
5a1b0 69 61 6c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f  ial interpolatio
5a1c0 6e 20 69 6e 64 65 78 2e 0a 09 09 20 2a 20 40 65  n index.... * @e
5a1d0 78 74 65 6e 64 73 20 7b 54 6f 6e 65 7d 0a 09 09  xtends {Tone}...
5a1e0 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 43 74   */..    Tone.Ct
5a1f0 72 6c 49 6e 74 65 72 70 6f 6c 61 74 65 20 3d 20  rlInterpolate = 
5a200 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
5a210 20 20 20 20 20 20 20 76 61 72 20 6f 70 74 69 6f         var optio
5a220 6e 73 20 3d 20 74 68 69 73 2e 6f 70 74 69 6f 6e  ns = this.option
5a230 73 4f 62 6a 65 63 74 28 61 72 67 75 6d 65 6e 74  sObject(argument
5a240 73 2c 20 5b 0a 09 20 20 20 20 20 20 20 20 20 20  s, [..          
5a250 20 20 27 76 61 6c 75 65 73 27 2c 0a 09 20 20 20    'values',..   
5a260 20 20 20 20 20 20 20 20 20 27 69 6e 64 65 78 27           'index'
5a270 0a 09 20 20 20 20 20 20 20 20 5d 2c 20 54 6f 6e  ..        ], Ton
5a280 65 2e 43 74 72 6c 49 6e 74 65 72 70 6f 6c 61 74  e.CtrlInterpolat
5a290 65 2e 64 65 66 61 75 6c 74 73 29 3b 0a 09 20 20  e.defaults);..  
5a2a0 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
5a2b0 20 54 68 65 20 76 61 6c 75 65 73 20 74 6f 20 69   The values to i
5a2c0 6e 74 65 72 70 6f 6c 61 74 65 20 62 65 74 77 65  nterpolate betwe
5a2d0 65 6e 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  en.... *  @type 
5a2e0 20 7b 41 72 72 61 79 7d 0a 09 09 09 20 2a 2f 0a   {Array}.... */.
5a2f0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 61  .        this.va
5a300 6c 75 65 73 20 3d 20 6f 70 74 69 6f 6e 73 2e 76  lues = options.v
5a310 61 6c 75 65 73 3b 0a 09 20 20 20 20 20 20 20 20  alues;..        
5a320 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 69  /**.... *  The i
5a330 6e 74 65 72 70 6f 6c 61 74 65 64 20 69 6e 64 65  nterpolated inde
5a340 78 20 62 65 74 77 65 65 6e 20 76 61 6c 75 65 73  x between values
5a350 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 20 61  . For example: a
5a360 20 76 61 6c 75 65 20 6f 66 20 31 2e 35 0a 09 09   value of 1.5...
5a370 09 20 2a 20 20 77 6f 75 6c 64 20 69 6e 74 65 72  . *  would inter
5a380 70 6f 6c 61 74 65 20 65 71 75 61 6c 6c 79 20 62  polate equally b
5a390 65 74 77 65 65 6e 20 74 68 65 20 76 61 6c 75 65  etween the value
5a3a0 20 61 74 20 69 6e 64 65 78 20 31 0a 09 09 09 20   at index 1.... 
5a3b0 2a 20 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  *  and the value
5a3c0 20 61 74 20 69 6e 64 65 78 20 32 2e 20 0a 09 09   at index 2. ...
5a3d0 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09  . *  @example...
5a3e0 09 20 2a 20 69 6e 74 65 72 70 2e 69 6e 64 65 78  . * interp.index
5a3f0 20 3d 20 30 3b 20 0a 09 09 09 20 2a 20 69 6e 74   = 0; .... * int
5a400 65 72 70 2e 76 61 6c 75 65 3b 20 2f 2f 72 65 74  erp.value; //ret
5a410 75 72 6e 73 20 74 68 65 20 76 61 6c 75 65 20 61  urns the value a
5a420 74 20 30 0a 09 09 09 20 2a 20 69 6e 74 65 72 70  t 0.... * interp
5a430 2e 69 6e 64 65 78 20 3d 20 30 2e 35 3b 0a 09 09  .index = 0.5;...
5a440 09 20 2a 20 69 6e 74 65 72 70 2e 76 61 6c 75 65  . * interp.value
5a450 3b 20 2f 2f 72 65 74 75 72 6e 73 20 74 68 65 20  ; //returns the 
5a460 76 61 6c 75 65 20 62 65 74 77 65 65 6e 20 69 6e  value between in
5a470 64 69 63 65 73 20 30 20 61 6e 64 20 31 2e 20 0a  dices 0 and 1. .
5a480 09 09 09 20 2a 20 20 40 74 79 70 65 20 20 7b 50  ... *  @type  {P
5a490 6f 73 69 74 69 76 65 7d 0a 09 09 09 20 2a 2f 0a  ositive}.... */.
5a4a0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e  .        this.in
5a4b0 64 65 78 20 3d 20 6f 70 74 69 6f 6e 73 2e 69 6e  dex = options.in
5a4c0 64 65 78 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  dex;..    };..  
5a4d0 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f    Tone.extend(To
5a4e0 6e 65 2e 43 74 72 6c 49 6e 74 65 72 70 6f 6c 61  ne.CtrlInterpola
5a4f0 74 65 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09  te);..    /**...
5a500 20 2a 20 20 54 68 65 20 64 65 66 61 75 6c 74 73   *  The defaults
5a510 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 0a 09 09  ... *  @const...
5a520 20 2a 20 20 40 74 79 70 65 20 20 7b 4f 62 6a 65   *  @type  {Obje
5a530 63 74 7d 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  ct}... */..    T
5a540 6f 6e 65 2e 43 74 72 6c 49 6e 74 65 72 70 6f 6c  one.CtrlInterpol
5a550 61 74 65 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b  ate.defaults = {
5a560 0a 09 20 20 20 20 20 20 20 20 27 69 6e 64 65 78  ..        'index
5a570 27 3a 20 30 2c 0a 09 20 20 20 20 20 20 20 20 27  ': 0,..        '
5a580 76 61 6c 75 65 73 27 3a 20 5b 5d 0a 09 20 20 20  values': []..   
5a590 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20   };..    /**... 
5a5a0 2a 20 20 54 68 65 20 63 75 72 72 65 6e 74 20 69  *  The current i
5a5b0 6e 74 65 72 70 6f 6c 61 74 65 64 20 76 61 6c 75  nterpolated valu
5a5c0 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 69  e based on the i
5a5d0 6e 64 65 78 0a 09 09 20 2a 20 20 40 72 65 61 64  ndex... *  @read
5a5e0 4f 6e 6c 79 0a 09 09 20 2a 20 20 40 6d 65 6d 62  Only... *  @memb
5a5f0 65 72 4f 66 20 54 6f 6e 65 2e 43 74 72 6c 49 6e  erOf Tone.CtrlIn
5a600 74 65 72 70 6f 6c 61 74 65 23 0a 09 09 20 2a 20  terpolate#... * 
5a610 20 40 74 79 70 65 20 7b 2a 7d 0a 09 09 20 2a 20   @type {*}... * 
5a620 20 40 6e 61 6d 65 20 76 61 6c 75 65 0a 09 09 20   @name value... 
5a630 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64  */..    Object.d
5a640 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f  efineProperty(To
5a650 6e 65 2e 43 74 72 6c 49 6e 74 65 72 70 6f 6c 61  ne.CtrlInterpola
5a660 74 65 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 76  te.prototype, 'v
5a670 61 6c 75 65 27 2c 20 7b 0a 09 20 20 20 20 20 20  alue', {..      
5a680 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    get: function 
5a690 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  () {..          
5a6a0 20 20 76 61 72 20 69 6e 64 65 78 20 3d 20 74 68    var index = th
5a6b0 69 73 2e 69 6e 64 65 78 3b 0a 09 20 20 20 20 20  is.index;..     
5a6c0 20 20 20 20 20 20 20 69 6e 64 65 78 20 3d 20 4d         index = M
5a6d0 61 74 68 2e 6d 69 6e 28 69 6e 64 65 78 2c 20 74  ath.min(index, t
5a6e0 68 69 73 2e 76 61 6c 75 65 73 2e 6c 65 6e 67 74  his.values.lengt
5a6f0 68 20 2d 20 31 29 3b 0a 09 20 20 20 20 20 20 20  h - 1);..       
5a700 20 20 20 20 20 76 61 72 20 6c 6f 77 65 72 50 6f       var lowerPo
5a710 73 69 74 69 6f 6e 20 3d 20 4d 61 74 68 2e 66 6c  sition = Math.fl
5a720 6f 6f 72 28 69 6e 64 65 78 29 3b 0a 09 20 20 20  oor(index);..   
5a730 20 20 20 20 20 20 20 20 20 76 61 72 20 6c 6f 77           var low
5a740 65 72 20 3d 20 74 68 69 73 2e 76 61 6c 75 65 73  er = this.values
5a750 5b 6c 6f 77 65 72 50 6f 73 69 74 69 6f 6e 5d 3b  [lowerPosition];
5a760 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61  ..            va
5a770 72 20 75 70 70 65 72 20 3d 20 74 68 69 73 2e 76  r upper = this.v
5a780 61 6c 75 65 73 5b 4d 61 74 68 2e 63 65 69 6c 28  alues[Math.ceil(
5a790 69 6e 64 65 78 29 5d 3b 0a 09 20 20 20 20 20 20  index)];..      
5a7a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
5a7b0 73 2e 5f 69 6e 74 65 72 70 6f 6c 61 74 65 28 69  s._interpolate(i
5a7c0 6e 64 65 78 20 2d 20 6c 6f 77 65 72 50 6f 73 69  ndex - lowerPosi
5a7d0 74 69 6f 6e 2c 20 6c 6f 77 65 72 2c 20 75 70 70  tion, lower, upp
5a7e0 65 72 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a  er);..        }.
5a7f0 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a  .    });..    /*
5a800 2a 0a 09 09 20 2a 20 20 49 6e 74 65 72 6e 61 6c  *... *  Internal
5a810 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 20 72   interpolation r
5a820 6f 75 74 69 6e 65 0a 09 09 20 2a 20 20 40 70 61  outine... *  @pa
5a830 72 61 6d 20 20 7b 4e 6f 72 6d 61 6c 52 61 6e 67  ram  {NormalRang
5a840 65 7d 20 20 69 6e 64 65 78 20 20 54 68 65 20 69  e}  index  The i
5a850 6e 64 65 78 20 62 65 74 77 65 65 6e 20 74 68 65  ndex between the
5a860 20 6c 6f 77 65 72 20 61 6e 64 20 75 70 70 65 72   lower and upper
5a870 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b  ... *  @param  {
5a880 2a 7d 20 20 6c 6f 77 65 72 20 0a 09 09 20 2a 20  *}  lower ... * 
5a890 20 40 70 61 72 61 6d 20 20 7b 2a 7d 20 20 75 70   @param  {*}  up
5a8a0 70 65 72 20 0a 09 09 20 2a 20 20 40 72 65 74 75  per ... *  @retu
5a8b0 72 6e 20 20 7b 2a 7d 20 20 54 68 65 20 69 6e 74  rn  {*}  The int
5a8c0 65 72 70 6f 6c 61 74 65 64 20 76 61 6c 75 65 0a  erpolated value.
5a8d0 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
5a8e0 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 43  . */..    Tone.C
5a8f0 74 72 6c 49 6e 74 65 72 70 6f 6c 61 74 65 2e 70  trlInterpolate.p
5a900 72 6f 74 6f 74 79 70 65 2e 5f 69 6e 74 65 72 70  rototype._interp
5a910 6f 6c 61 74 65 20 3d 20 66 75 6e 63 74 69 6f 6e  olate = function
5a920 20 28 69 6e 64 65 78 2c 20 6c 6f 77 65 72 2c 20   (index, lower, 
5a930 75 70 70 65 72 29 20 7b 0a 09 20 20 20 20 20 20  upper) {..      
5a940 20 20 69 66 20 28 74 68 69 73 2e 69 73 41 72 72    if (this.isArr
5a950 61 79 28 6c 6f 77 65 72 29 29 20 7b 0a 09 20 20  ay(lower)) {..  
5a960 20 20 20 20 20 20 20 20 20 20 76 61 72 20 72 65            var re
5a970 74 41 72 72 61 79 20 3d 20 5b 5d 3b 0a 09 20 20  tArray = [];..  
5a980 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 76            for (v
5a990 61 72 20 69 20 3d 20 30 3b 20 69 20 3c 20 6c 6f  ar i = 0; i < lo
5a9a0 77 65 72 2e 6c 65 6e 67 74 68 3b 20 69 2b 2b 29  wer.length; i++)
5a9b0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5a9c0 20 20 20 20 72 65 74 41 72 72 61 79 5b 69 5d 20      retArray[i] 
5a9d0 3d 20 74 68 69 73 2e 5f 69 6e 74 65 72 70 6f 6c  = this._interpol
5a9e0 61 74 65 28 69 6e 64 65 78 2c 20 6c 6f 77 65 72  ate(index, lower
5a9f0 5b 69 5d 2c 20 75 70 70 65 72 5b 69 5d 29 3b 0a  [i], upper[i]);.
5aa00 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09  .            }..
5aa10 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
5aa20 72 6e 20 72 65 74 41 72 72 61 79 3b 0a 09 20 20  rn retArray;..  
5aa30 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20        } else if 
5aa40 28 74 68 69 73 2e 69 73 4f 62 6a 65 63 74 28 6c  (this.isObject(l
5aa50 6f 77 65 72 29 29 20 7b 0a 09 20 20 20 20 20 20  ower)) {..      
5aa60 20 20 20 20 20 20 76 61 72 20 72 65 74 4f 62 6a        var retObj
5aa70 20 3d 20 7b 7d 3b 0a 09 20 20 20 20 20 20 20 20   = {};..        
5aa80 20 20 20 20 66 6f 72 20 28 76 61 72 20 61 74 74      for (var att
5aa90 72 20 69 6e 20 6c 6f 77 65 72 29 20 7b 0a 09 20  r in lower) {.. 
5aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
5aab0 65 74 4f 62 6a 5b 61 74 74 72 5d 20 3d 20 74 68  etObj[attr] = th
5aac0 69 73 2e 5f 69 6e 74 65 72 70 6f 6c 61 74 65 28  is._interpolate(
5aad0 69 6e 64 65 78 2c 20 6c 6f 77 65 72 5b 61 74 74  index, lower[att
5aae0 72 5d 2c 20 75 70 70 65 72 5b 61 74 74 72 5d 29  r], upper[attr])
5aaf0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
5ab00 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
5ab10 74 75 72 6e 20 72 65 74 4f 62 6a 3b 0a 09 20 20  turn retObj;..  
5ab20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09        } else {..
5ab30 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 77 65              lowe
5ab40 72 20 3d 20 74 68 69 73 2e 5f 74 6f 4e 75 6d 62  r = this._toNumb
5ab50 65 72 28 6c 6f 77 65 72 29 3b 0a 09 20 20 20 20  er(lower);..    
5ab60 20 20 20 20 20 20 20 20 75 70 70 65 72 20 3d 20          upper = 
5ab70 74 68 69 73 2e 5f 74 6f 4e 75 6d 62 65 72 28 75  this._toNumber(u
5ab80 70 70 65 72 29 3b 0a 09 20 20 20 20 20 20 20 20  pper);..        
5ab90 20 20 20 20 72 65 74 75 72 6e 20 28 31 20 2d 20      return (1 - 
5aba0 69 6e 64 65 78 29 20 2a 20 6c 6f 77 65 72 20 2b  index) * lower +
5abb0 20 69 6e 64 65 78 20 2a 20 75 70 70 65 72 3b 0a   index * upper;.
5abc0 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
5abd0 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  };..    /**... *
5abe0 20 20 43 6f 6e 76 65 72 74 20 66 72 6f 6d 20 74    Convert from t
5abf0 68 65 20 67 69 76 65 6e 20 74 79 70 65 20 69 6e  he given type in
5ac00 74 6f 20 61 20 6e 75 6d 62 65 72 0a 09 09 20 2a  to a number... *
5ac10 20 20 40 70 61 72 61 6d 20 20 7b 4e 75 6d 62 65    @param  {Numbe
5ac20 72 7c 53 74 72 69 6e 67 7d 20 20 76 61 6c 75 65  r|String}  value
5ac30 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 20  ... *  @return  
5ac40 7b 4e 75 6d 62 65 72 7d 0a 09 09 20 2a 20 20 40  {Number}... *  @
5ac50 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20  private... */.. 
5ac60 20 20 20 54 6f 6e 65 2e 43 74 72 6c 49 6e 74 65     Tone.CtrlInte
5ac70 72 70 6f 6c 61 74 65 2e 70 72 6f 74 6f 74 79 70  rpolate.prototyp
5ac80 65 2e 5f 74 6f 4e 75 6d 62 65 72 20 3d 20 66 75  e._toNumber = fu
5ac90 6e 63 74 69 6f 6e 20 28 76 61 6c 29 20 7b 0a 09  nction (val) {..
5aca0 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73          if (this
5acb0 2e 69 73 4e 75 6d 62 65 72 28 76 61 6c 29 29 20  .isNumber(val)) 
5acc0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
5acd0 65 74 75 72 6e 20 76 61 6c 3b 0a 09 20 20 20 20  eturn val;..    
5ace0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20      } else {..  
5acf0 20 20 20 20 20 20 20 20 20 20 2f 2f 6f 74 68 65            //othe
5ad00 72 77 69 73 65 20 61 73 73 75 6d 65 20 74 68 61  rwise assume tha
5ad10 74 20 69 74 27 73 20 54 69 6d 65 2e 2e 2e 0a 09  t it's Time.....
5ad20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
5ad30 72 6e 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64  rn this.toSecond
5ad40 73 28 76 61 6c 29 3b 0a 09 20 20 20 20 20 20 20  s(val);..       
5ad50 20 7d 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20   }..    };..    
5ad60 2f 2a 2a 0a 09 09 20 2a 20 20 43 6c 65 61 6e 20  /**... *  Clean 
5ad70 75 70 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e  up... *  @return
5ad80 20 20 7b 54 6f 6e 65 2e 43 74 72 6c 49 6e 74 65    {Tone.CtrlInte
5ad90 72 70 6f 6c 61 74 65 7d 20 20 74 68 69 73 0a 09  rpolate}  this..
5ada0 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 43  . */..    Tone.C
5adb0 74 72 6c 49 6e 74 65 72 70 6f 6c 61 74 65 2e 70  trlInterpolate.p
5adc0 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65  rototype.dispose
5add0 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b   = function () {
5ade0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 76  ..        this.v
5adf0 61 6c 75 65 73 20 3d 20 6e 75 6c 6c 3b 0a 09 20  alues = null;.. 
5ae00 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74 75 72     };..    retur
5ae10 6e 20 54 6f 6e 65 2e 43 74 72 6c 49 6e 74 65 72  n Tone.CtrlInter
5ae20 70 6f 6c 61 74 65 3b 0a 09 7d 29 3b 0a 09 4d 6f  polate;..});..Mo
5ae30 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28 54  dule(function (T
5ae40 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09 20 20  one) {..    ..  
5ae50 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61    /**... *  @cla
5ae60 73 73 20 54 6f 6e 65 2e 43 74 72 6c 4d 61 72 6b  ss Tone.CtrlMark
5ae70 6f 76 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  ov represents a 
5ae80 4d 61 72 6b 6f 76 20 43 68 61 69 6e 20 77 68 65  Markov Chain whe
5ae90 72 65 20 65 61 63 68 20 63 61 6c 6c 0a 09 09 20  re each call... 
5aea0 2a 20 20 20 20 20 20 20 20 20 74 6f 20 54 6f 6e  *         to Ton
5aeb0 65 2e 43 74 72 6c 4d 61 72 6b 6f 76 2e 6e 65 78  e.CtrlMarkov.nex
5aec0 74 20 77 69 6c 6c 20 6d 6f 76 65 20 74 6f 20 74  t will move to t
5aed0 68 65 20 6e 65 78 74 20 73 74 61 74 65 2e 20 49  he next state. I
5aee0 66 20 74 68 65 20 6e 65 78 74 0a 09 09 20 2a 20  f the next... * 
5aef0 20 20 20 20 20 20 20 20 73 74 61 74 65 20 63 68          state ch
5af00 6f 69 63 65 20 69 73 20 61 6e 20 61 72 72 61 79  oice is an array
5af10 2c 20 74 68 65 20 6e 65 78 74 20 73 74 61 74 65  , the next state
5af20 20 69 73 20 63 68 6f 73 65 6e 20 72 61 6e 64 6f   is chosen rando
5af30 6d 6c 79 20 77 69 74 68 0a 09 09 20 2a 20 20 20  mly with... *   
5af40 20 20 20 20 20 20 65 76 65 6e 20 70 72 6f 62 61        even proba
5af50 62 69 6c 69 74 79 20 66 6f 72 20 61 6c 6c 20 6f  bility for all o
5af60 66 20 74 68 65 20 63 68 6f 69 63 65 73 2e 20 46  f the choices. F
5af70 6f 72 20 61 20 77 65 69 67 68 74 65 64 20 70 72  or a weighted pr
5af80 6f 62 61 62 69 6c 69 74 79 0a 09 09 20 2a 20 20  obability... *  
5af90 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 6e 65         of the ne
5afa0 78 74 20 63 68 6f 69 63 65 73 2c 20 70 61 73 73  xt choices, pass
5afb0 20 69 6e 20 61 6e 20 6f 62 6a 65 63 74 20 77 69   in an object wi
5afc0 74 68 20 22 73 74 61 74 65 22 20 61 6e 64 20 22  th "state" and "
5afd0 70 72 6f 62 61 62 69 6c 69 74 79 22 20 61 74 74  probability" att
5afe0 72 69 62 75 74 65 73 2e 20 0a 09 09 20 2a 20 20  ributes. ... *  
5aff0 20 20 20 20 20 20 20 54 68 65 20 70 72 6f 62 61         The proba
5b000 62 69 6c 69 74 69 65 73 20 77 69 6c 6c 20 62 65  bilities will be
5b010 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 61 6e 64 20   normalized and 
5b020 74 68 65 6e 20 63 68 6f 73 65 6e 2e 20 49 66 20  then chosen. If 
5b030 6e 6f 20 6e 65 78 74 20 6f 70 74 69 6f 6e 73 0a  no next options.
5b040 09 09 20 2a 20 20 20 20 20 20 20 20 20 61 72 65  .. *         are
5b050 20 67 69 76 65 6e 20 66 6f 72 20 74 68 65 20 63   given for the c
5b060 75 72 72 65 6e 74 20 73 74 61 74 65 2c 20 74 68  urrent state, th
5b070 65 20 73 74 61 74 65 20 77 69 6c 6c 20 73 74 61  e state will sta
5b080 79 20 74 68 65 72 65 2e 20 0a 09 09 20 2a 20 20  y there. ... *  
5b090 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65 7d 0a  @extends {Tone}.
5b0a0 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09  .. *  @example..
5b0b0 09 20 2a 20 76 61 72 20 63 68 61 69 6e 20 3d 20  . * var chain = 
5b0c0 6e 65 77 20 54 6f 6e 65 2e 43 74 72 6c 4d 61 72  new Tone.CtrlMar
5b0d0 6b 6f 76 28 7b 0a 09 09 20 2a 20 09 22 62 65 67  kov({... * ."beg
5b0e0 69 6e 6e 69 6e 67 22 20 3a 20 5b 22 65 6e 64 22  inning" : ["end"
5b0f0 2c 20 22 6d 69 64 64 6c 65 22 5d 2c 0a 09 09 20  , "middle"],... 
5b100 2a 20 09 22 6d 69 64 64 6c 65 22 20 3a 20 22 65  * ."middle" : "e
5b110 6e 64 22 0a 09 09 20 2a 20 7d 29 3b 0a 09 09 20  nd"... * });... 
5b120 2a 20 63 68 61 69 6e 2e 76 61 6c 75 65 20 3d 20  * chain.value = 
5b130 22 62 65 67 69 6e 6e 69 6e 67 22 3b 0a 09 09 20  "beginning";... 
5b140 2a 20 63 68 61 69 6e 2e 6e 65 78 74 28 29 3b 20  * chain.next(); 
5b150 2f 2f 72 65 74 75 72 6e 73 20 22 65 6e 64 22 20  //returns "end" 
5b160 6f 72 20 22 6d 69 64 64 6c 65 22 20 77 69 74 68  or "middle" with
5b170 20 35 30 25 20 70 72 6f 62 61 62 69 6c 69 74 79   50% probability
5b180 0a 09 09 20 2a 0a 09 09 20 2a 20 20 40 65 78 61  ... *... *  @exa
5b190 6d 70 6c 65 0a 09 09 20 2a 20 76 61 72 20 63 68  mple... * var ch
5b1a0 61 69 6e 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 43  ain = new Tone.C
5b1b0 74 72 6c 4d 61 72 6b 6f 76 28 7b 0a 09 09 20 2a  trlMarkov({... *
5b1c0 20 09 22 62 65 67 69 6e 6e 69 6e 67 22 20 3a 20   ."beginning" : 
5b1d0 5b 7b 22 76 61 6c 75 65 22 20 3a 20 22 65 6e 64  [{"value" : "end
5b1e0 22 2c 20 22 70 72 6f 62 61 62 69 6c 69 74 79 22  ", "probability"
5b1f0 20 3a 20 30 2e 38 7d 2c 20 0a 09 09 20 2a 20 09   : 0.8}, ... * .
5b200 09 09 09 09 7b 22 76 61 6c 75 65 22 20 3a 20 22  ....{"value" : "
5b210 6d 69 64 64 6c 65 22 2c 20 22 70 72 6f 62 61 62  middle", "probab
5b220 69 6c 69 74 79 22 20 3a 20 30 2e 32 7d 5d 2c 0a  ility" : 0.2}],.
5b230 09 09 20 2a 20 09 22 6d 69 64 64 6c 65 22 20 3a  .. * ."middle" :
5b240 20 22 65 6e 64 22 0a 09 09 20 2a 20 7d 29 3b 0a   "end"... * });.
5b250 09 09 20 2a 20 63 68 61 69 6e 2e 76 61 6c 75 65  .. * chain.value
5b260 20 3d 20 22 62 65 67 69 6e 6e 69 6e 67 22 3b 0a   = "beginning";.
5b270 09 09 20 2a 20 63 68 61 69 6e 2e 6e 65 78 74 28  .. * chain.next(
5b280 29 3b 20 2f 2f 72 65 74 75 72 6e 73 20 22 65 6e  ); //returns "en
5b290 64 22 20 77 69 74 68 20 38 30 25 20 70 72 6f 62  d" with 80% prob
5b2a0 61 62 69 6c 69 74 79 20 6f 72 20 22 6d 69 64 64  ability or "midd
5b2b0 6c 65 22 20 77 69 74 68 20 32 30 25 2e 0a 09 09  le" with 20%....
5b2c0 20 2a 20 20 40 70 61 72 61 6d 20 7b 4f 62 6a 65   *  @param {Obje
5b2d0 63 74 7d 20 76 61 6c 75 65 73 20 41 6e 20 6f 62  ct} values An ob
5b2e0 6a 65 63 74 20 77 69 74 68 20 74 68 65 20 73 74  ject with the st
5b2f0 61 74 65 20 6e 61 6d 65 73 20 61 73 20 74 68 65  ate names as the
5b300 20 6b 65 79 73 0a 09 09 20 2a 20 20 20 20 20 20   keys... *      
5b310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b320 20 20 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20     and the next 
5b330 73 74 61 74 65 28 73 29 20 61 73 20 74 68 65 20  state(s) as the 
5b340 76 61 6c 75 65 73 2e 20 0a 09 09 20 2a 2f 0a 09  values. ... */..
5b350 20 20 20 20 54 6f 6e 65 2e 43 74 72 6c 4d 61 72      Tone.CtrlMar
5b360 6b 6f 76 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  kov = function (
5b370 76 61 6c 75 65 73 2c 20 69 6e 69 74 69 61 6c 29  values, initial)
5b380 20 7b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a   {..        /**.
5b390 09 09 09 20 2a 20 20 54 68 65 20 4d 61 72 6b 6f  ... *  The Marko
5b3a0 76 20 76 61 6c 75 65 73 20 77 69 74 68 20 73 74  v values with st
5b3b0 61 74 65 73 20 61 73 20 74 68 65 20 6b 65 79 73  ates as the keys
5b3c0 0a 09 09 09 20 2a 20 20 61 6e 64 20 6e 65 78 74  .... *  and next
5b3d0 20 73 74 61 74 65 28 73 29 20 61 73 20 74 68 65   state(s) as the
5b3e0 20 76 61 6c 75 65 73 2e 20 0a 09 09 09 20 2a 20   values. .... * 
5b3f0 20 40 74 79 70 65 20 7b 4f 62 6a 65 63 74 7d 0a   @type {Object}.
5b400 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
5b410 74 68 69 73 2e 76 61 6c 75 65 73 20 3d 20 74 68  this.values = th
5b420 69 73 2e 64 65 66 61 75 6c 74 41 72 67 28 76 61  is.defaultArg(va
5b430 6c 75 65 73 2c 20 7b 7d 29 3b 0a 09 20 20 20 20  lues, {});..    
5b440 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54      /**.... *  T
5b450 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65  he current state
5b460 20 6f 66 20 74 68 65 20 4d 61 72 6b 6f 76 20 76   of the Markov v
5b470 61 6c 75 65 73 2e 20 54 68 65 20 6e 65 78 74 0a  alues. The next.
5b480 09 09 09 20 2a 20 20 73 74 61 74 65 20 77 69 6c  ... *  state wil
5b490 6c 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 61  l be evaluated a
5b4a0 6e 64 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e  nd returned when
5b4b0 20 54 6f 6e 65 2e 43 74 72 6c 4d 61 72 6b 6f 76   Tone.CtrlMarkov
5b4c0 2e 6e 65 78 74 0a 09 09 09 20 2a 20 20 69 73 20  .next.... *  is 
5b4d0 69 6e 76 6f 6b 65 64 2e 0a 09 09 09 20 2a 20 20  invoked..... *  
5b4e0 40 74 79 70 65 20 7b 53 74 72 69 6e 67 7d 0a 09  @type {String}..
5b4f0 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
5b500 68 69 73 2e 76 61 6c 75 65 20 3d 20 74 68 69 73  his.value = this
5b510 2e 64 65 66 61 75 6c 74 41 72 67 28 69 6e 69 74  .defaultArg(init
5b520 69 61 6c 2c 20 4f 62 6a 65 63 74 2e 6b 65 79 73  ial, Object.keys
5b530 28 74 68 69 73 2e 76 61 6c 75 65 73 29 5b 30 5d  (this.values)[0]
5b540 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  );..    };..    
5b550 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65  Tone.extend(Tone
5b560 2e 43 74 72 6c 4d 61 72 6b 6f 76 29 3b 0a 09 20  .CtrlMarkov);.. 
5b570 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 52 65 74     /**... *  Ret
5b580 75 72 6e 73 20 74 68 65 20 6e 65 78 74 20 73 74  urns the next st
5b590 61 74 65 20 6f 66 20 74 68 65 20 4d 61 72 6b 6f  ate of the Marko
5b5a0 76 20 76 61 6c 75 65 73 2e 20 0a 09 09 20 2a 20  v values. ... * 
5b5b0 20 40 72 65 74 75 72 6e 20 20 7b 53 74 72 69 6e   @return  {Strin
5b5c0 67 7d 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  g}... */..    To
5b5d0 6e 65 2e 43 74 72 6c 4d 61 72 6b 6f 76 2e 70 72  ne.CtrlMarkov.pr
5b5e0 6f 74 6f 74 79 70 65 2e 6e 65 78 74 20 3d 20 66  ototype.next = f
5b5f0 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
5b600 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 76        if (this.v
5b610 61 6c 75 65 73 2e 68 61 73 4f 77 6e 50 72 6f 70  alues.hasOwnProp
5b620 65 72 74 79 28 74 68 69 73 2e 76 61 6c 75 65 29  erty(this.value)
5b630 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
5b640 20 76 61 72 20 6e 65 78 74 20 3d 20 74 68 69 73   var next = this
5b650 2e 76 61 6c 75 65 73 5b 74 68 69 73 2e 76 61 6c  .values[this.val
5b660 75 65 5d 3b 0a 09 20 20 20 20 20 20 20 20 20 20  ue];..          
5b670 20 20 69 66 20 28 74 68 69 73 2e 69 73 41 72 72    if (this.isArr
5b680 61 79 28 6e 65 78 74 29 29 20 7b 0a 09 20 20 20  ay(next)) {..   
5b690 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72               var
5b6a0 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 3d 20   distribution = 
5b6b0 74 68 69 73 2e 5f 67 65 74 50 72 6f 62 44 69 73  this._getProbDis
5b6c0 74 72 69 62 75 74 69 6f 6e 28 6e 65 78 74 29 3b  tribution(next);
5b6d0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5b6e0 20 20 76 61 72 20 72 61 6e 64 20 3d 20 4d 61 74    var rand = Mat
5b6f0 68 2e 72 61 6e 64 6f 6d 28 29 3b 0a 09 20 20 20  h.random();..   
5b700 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72               var
5b710 20 74 6f 74 61 6c 20 3d 20 30 3b 0a 09 20 20 20   total = 0;..   
5b720 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
5b730 20 28 76 61 72 20 69 20 3d 20 30 3b 20 69 20 3c   (var i = 0; i <
5b740 20 64 69 73 74 72 69 62 75 74 69 6f 6e 2e 6c 65   distribution.le
5b750 6e 67 74 68 3b 20 69 2b 2b 29 20 7b 0a 09 20 20  ngth; i++) {..  
5b760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b770 20 20 76 61 72 20 64 69 73 74 20 3d 20 64 69 73    var dist = dis
5b780 74 72 69 62 75 74 69 6f 6e 5b 69 5d 3b 0a 09 20  tribution[i];.. 
5b790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b7a0 20 20 20 69 66 20 28 72 61 6e 64 20 3e 20 74 6f     if (rand > to
5b7b0 74 61 6c 20 26 26 20 72 61 6e 64 20 3c 20 74 6f  tal && rand < to
5b7c0 74 61 6c 20 2b 20 64 69 73 74 29 20 7b 0a 09 20  tal + dist) {.. 
5b7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b7e0 20 20 20 20 20 20 20 76 61 72 20 63 68 6f 73 65         var chose
5b7f0 6e 20 3d 20 6e 65 78 74 5b 69 5d 3b 0a 09 20 20  n = next[i];..  
5b800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b810 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 69        if (this.i
5b820 73 4f 62 6a 65 63 74 28 63 68 6f 73 65 6e 29 29  sObject(chosen))
5b830 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5b840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b850 74 68 69 73 2e 76 61 6c 75 65 20 3d 20 63 68 6f  this.value = cho
5b860 73 65 6e 2e 76 61 6c 75 65 3b 0a 09 20 20 20 20  sen.value;..    
5b870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b880 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20      } else {..  
5b890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b8a0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 76            this.v
5b8b0 61 6c 75 65 20 3d 20 63 68 6f 73 65 6e 3b 0a 09  alue = chosen;..
5b8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b8d0 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
5b8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
5b8f0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5b900 20 20 20 20 20 20 74 6f 74 61 6c 20 2b 3d 20 64        total += d
5b910 69 73 74 3b 0a 09 20 20 20 20 20 20 20 20 20 20  ist;..          
5b920 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
5b930 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20       } else {.. 
5b940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
5b950 68 69 73 2e 76 61 6c 75 65 20 3d 20 6e 65 78 74  his.value = next
5b960 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
5b970 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
5b980 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
5b990 2e 76 61 6c 75 65 3b 0a 09 20 20 20 20 7d 3b 0a  .value;..    };.
5b9a0 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43  .    /**... *  C
5b9b0 68 6f 6f 73 65 20 72 61 6e 64 6f 6d 6c 79 20 66  hoose randomly f
5b9c0 72 6f 6d 20 61 6e 20 61 72 72 61 79 20 77 65 69  rom an array wei
5b9d0 67 68 74 65 64 20 6f 70 74 69 6f 6e 73 20 69 6e  ghted options in
5b9e0 20 74 68 65 20 66 6f 72 6d 20 0a 09 09 20 2a 20   the form ... * 
5b9f0 20 7b 22 73 74 61 74 65 22 20 3a 20 73 74 72 69   {"state" : stri
5ba00 6e 67 2c 20 22 70 72 6f 62 61 62 69 6c 69 74 79  ng, "probability
5ba10 22 20 3a 20 6e 75 6d 62 65 72 7d 20 6f 72 20 61  " : number} or a
5ba20 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65  n array of value
5ba30 73 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20  s... *  @param  
5ba40 7b 41 72 72 61 79 7d 20 20 6f 70 74 69 6f 6e 73  {Array}  options
5ba50 20 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20   ... *  @return 
5ba60 20 7b 41 72 72 61 79 7d 20 20 54 68 65 20 72 61   {Array}  The ra
5ba70 6e 64 6f 6d 6c 79 20 73 65 6c 65 63 74 65 64 20  ndomly selected 
5ba80 63 68 6f 69 63 65 0a 09 09 20 2a 20 20 40 70 72  choice... *  @pr
5ba90 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20  ivate... */..   
5baa0 20 54 6f 6e 65 2e 43 74 72 6c 4d 61 72 6b 6f 76   Tone.CtrlMarkov
5bab0 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 67 65 74 50  .prototype._getP
5bac0 72 6f 62 44 69 73 74 72 69 62 75 74 69 6f 6e 20  robDistribution 
5bad0 3d 20 66 75 6e 63 74 69 6f 6e 20 28 6f 70 74 69  = function (opti
5bae0 6f 6e 73 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ons) {..        
5baf0 76 61 72 20 64 69 73 74 72 69 62 75 74 69 6f 6e  var distribution
5bb00 20 3d 20 5b 5d 3b 0a 09 20 20 20 20 20 20 20 20   = [];..        
5bb10 76 61 72 20 74 6f 74 61 6c 20 3d 20 30 3b 0a 09  var total = 0;..
5bb20 20 20 20 20 20 20 20 20 76 61 72 20 6e 65 65 64          var need
5bb30 73 4e 6f 72 6d 61 6c 69 7a 69 6e 67 20 3d 20 66  sNormalizing = f
5bb40 61 6c 73 65 3b 0a 09 20 20 20 20 20 20 20 20 66  alse;..        f
5bb50 6f 72 20 28 76 61 72 20 69 20 3d 20 30 3b 20 69  or (var i = 0; i
5bb60 20 3c 20 6f 70 74 69 6f 6e 73 2e 6c 65 6e 67 74   < options.lengt
5bb70 68 3b 20 69 2b 2b 29 20 7b 0a 09 20 20 20 20 20  h; i++) {..     
5bb80 20 20 20 20 20 20 20 76 61 72 20 6f 70 74 69 6f         var optio
5bb90 6e 20 3d 20 6f 70 74 69 6f 6e 73 5b 69 5d 3b 0a  n = options[i];.
5bba0 09 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
5bbb0 28 74 68 69 73 2e 69 73 4f 62 6a 65 63 74 28 6f  (this.isObject(o
5bbc0 70 74 69 6f 6e 29 29 20 7b 0a 09 20 20 20 20 20  ption)) {..     
5bbd0 20 20 20 20 20 20 20 20 20 20 20 6e 65 65 64 73             needs
5bbe0 4e 6f 72 6d 61 6c 69 7a 69 6e 67 20 3d 20 74 72  Normalizing = tr
5bbf0 75 65 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ue;..           
5bc00 20 20 20 20 20 64 69 73 74 72 69 62 75 74 69 6f       distributio
5bc10 6e 5b 69 5d 20 3d 20 6f 70 74 69 6f 6e 2e 70 72  n[i] = option.pr
5bc20 6f 62 61 62 69 6c 69 74 79 3b 0a 09 20 20 20 20  obability;..    
5bc30 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
5bc40 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5bc50 20 20 64 69 73 74 72 69 62 75 74 69 6f 6e 5b 69    distribution[i
5bc60 5d 20 3d 20 31 20 2f 20 6f 70 74 69 6f 6e 73 2e  ] = 1 / options.
5bc70 6c 65 6e 67 74 68 3b 0a 09 20 20 20 20 20 20 20  length;..       
5bc80 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
5bc90 20 20 20 20 74 6f 74 61 6c 20 2b 3d 20 64 69 73      total += dis
5bca0 74 72 69 62 75 74 69 6f 6e 5b 69 5d 3b 0a 09 20  tribution[i];.. 
5bcb0 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
5bcc0 20 20 69 66 20 28 6e 65 65 64 73 4e 6f 72 6d 61    if (needsNorma
5bcd0 6c 69 7a 69 6e 67 29 20 7b 0a 09 20 20 20 20 20  lizing) {..     
5bce0 20 20 20 20 20 20 20 2f 2f 6e 6f 72 6d 61 6c 69         //normali
5bcf0 7a 65 20 74 68 65 20 76 61 6c 75 65 73 0a 09 20  ze the values.. 
5bd00 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28             for (
5bd10 76 61 72 20 6a 20 3d 20 30 3b 20 6a 20 3c 20 64  var j = 0; j < d
5bd20 69 73 74 72 69 62 75 74 69 6f 6e 2e 6c 65 6e 67  istribution.leng
5bd30 74 68 3b 20 6a 2b 2b 29 20 7b 0a 09 20 20 20 20  th; j++) {..    
5bd40 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73 74              dist
5bd50 72 69 62 75 74 69 6f 6e 5b 6a 5d 20 3d 20 64 69  ribution[j] = di
5bd60 73 74 72 69 62 75 74 69 6f 6e 5b 6a 5d 20 2f 20  stribution[j] / 
5bd70 74 6f 74 61 6c 3b 0a 09 20 20 20 20 20 20 20 20  total;..        
5bd80 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d      }..        }
5bd90 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
5bda0 20 64 69 73 74 72 69 62 75 74 69 6f 6e 3b 0a 09   distribution;..
5bdb0 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
5bdc0 09 09 20 2a 20 20 43 6c 65 61 6e 20 75 70 0a 09  .. *  Clean up..
5bdd0 09 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 54  . *  @return  {T
5bde0 6f 6e 65 2e 43 74 72 6c 4d 61 72 6b 6f 76 7d 20  one.CtrlMarkov} 
5bdf0 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20   this... */..   
5be00 20 54 6f 6e 65 2e 43 74 72 6c 4d 61 72 6b 6f 76   Tone.CtrlMarkov
5be10 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f  .prototype.dispo
5be20 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  se = function ()
5be30 20 7b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73   {..        this
5be40 2e 76 61 6c 75 65 73 20 3d 20 6e 75 6c 6c 3b 0a  .values = null;.
5be50 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74  .    };..    ret
5be60 75 72 6e 20 54 6f 6e 65 2e 43 74 72 6c 4d 61 72  urn Tone.CtrlMar
5be70 6b 6f 76 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c  kov;..});..Modul
5be80 65 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65  e(function (Tone
5be90 29 20 7b 0a 09 20 20 20 20 0a 09 20 20 20 20 2f  ) {..    ..    /
5bea0 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61 73 73 20  **... *  @class 
5beb0 47 65 6e 65 72 61 74 65 20 70 61 74 74 65 72 6e  Generate pattern
5bec0 73 20 66 72 6f 6d 20 61 6e 20 61 72 72 61 79 20  s from an array 
5bed0 6f 66 20 76 61 6c 75 65 73 2e 0a 09 09 20 2a 20  of values.... * 
5bee0 20 20 20 20 20 20 20 20 48 61 73 20 61 20 6e 75          Has a nu
5bef0 6d 62 65 72 20 6f 66 20 61 72 70 65 67 67 69 61  mber of arpeggia
5bf00 74 69 6f 6e 20 61 6e 64 20 72 61 6e 64 6f 6d 69  tion and randomi
5bf10 7a 65 64 0a 09 09 20 2a 20 20 20 20 20 20 20 20  zed... *        
5bf20 20 73 65 6c 65 63 74 69 6f 6e 20 70 61 74 74 65   selection patte
5bf30 72 6e 73 2e 20 0a 09 09 20 2a 20 20 20 20 20 20  rns. ... *      
5bf40 20 20 20 20 20 3c 75 6c 3e 0a 09 09 20 2a 20 20       <ul>... *  
5bf50 09 20 20 20 20 20 20 20 20 3c 6c 69 3e 22 75 70  .        <li>"up
5bf60 22 20 2d 20 63 79 63 6c 65 73 20 75 70 77 61 72  " - cycles upwar
5bf70 64 3c 2f 6c 69 3e 0a 09 09 20 2a 20 20 09 09 09  d</li>... *  ...
5bf80 3c 6c 69 3e 22 64 6f 77 6e 22 20 2d 20 63 79 63  <li>"down" - cyc
5bf90 6c 65 73 20 64 6f 77 6e 77 61 72 64 3c 2f 6c 69  les downward</li
5bfa0 3e 0a 09 09 20 2a 20 20 09 09 09 3c 6c 69 3e 22  >... *  ...<li>"
5bfb0 75 70 44 6f 77 6e 22 20 2d 20 75 70 20 74 68 65  upDown" - up the
5bfc0 6e 20 61 6e 64 20 64 6f 77 6e 3c 2f 6c 69 3e 0a  n and down</li>.
5bfd0 09 09 20 2a 20 20 09 09 09 3c 6c 69 3e 22 64 6f  .. *  ...<li>"do
5bfe0 77 6e 55 70 22 20 2d 20 63 79 63 6c 65 73 20 64  wnUp" - cycles d
5bff0 6f 77 6e 20 74 68 65 6e 20 61 6e 64 20 75 70 3c  own then and up<
5c000 2f 6c 69 3e 0a 09 09 20 2a 20 20 09 09 09 3c 6c  /li>... *  ...<l
5c010 69 3e 22 61 6c 74 65 72 6e 61 74 65 55 70 22 20  i>"alternateUp" 
5c020 2d 20 6a 75 6d 70 20 75 70 20 74 77 6f 20 61 6e  - jump up two an
5c030 64 20 64 6f 77 6e 20 6f 6e 65 3c 2f 6c 69 3e 0a  d down one</li>.
5c040 09 09 20 2a 20 20 09 09 09 3c 6c 69 3e 22 61 6c  .. *  ...<li>"al
5c050 74 65 72 6e 61 74 65 44 6f 77 6e 22 20 2d 20 6a  ternateDown" - j
5c060 75 6d 70 20 64 6f 77 6e 20 74 77 6f 20 61 6e 64  ump down two and
5c070 20 75 70 20 6f 6e 65 3c 2f 6c 69 3e 0a 09 09 20   up one</li>... 
5c080 2a 20 20 09 09 09 3c 6c 69 3e 22 72 61 6e 64 6f  *  ...<li>"rando
5c090 6d 22 20 2d 20 72 61 6e 64 6f 6d 6c 79 20 73 65  m" - randomly se
5c0a0 6c 65 63 74 20 61 6e 20 69 6e 64 65 78 3c 2f 6c  lect an index</l
5c0b0 69 3e 0a 09 09 20 2a 20 20 09 09 09 3c 6c 69 3e  i>... *  ...<li>
5c0c0 22 72 61 6e 64 6f 6d 57 61 6c 6b 22 20 2d 20 72  "randomWalk" - r
5c0d0 61 6e 64 6f 6d 6c 79 20 6d 6f 76 65 73 20 6f 6e  andomly moves on
5c0e0 65 20 69 6e 64 65 78 20 61 77 61 79 20 66 72 6f  e index away fro
5c0f0 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 6f  m the current po
5c100 73 69 74 69 6f 6e 3c 2f 6c 69 3e 0a 09 09 20 2a  sition</li>... *
5c110 20 20 09 09 09 3c 6c 69 3e 22 72 61 6e 64 6f 6d    ...<li>"random
5c120 4f 6e 63 65 22 20 2d 20 72 61 6e 64 6f 6d 6c 79  Once" - randomly
5c130 20 73 65 6c 65 63 74 20 61 6e 20 69 6e 64 65 78   select an index
5c140 20 77 69 74 68 6f 75 74 20 72 65 70 65 61 74 69   without repeati
5c150 6e 67 20 75 6e 74 69 6c 20 61 6c 6c 20 76 61 6c  ng until all val
5c160 75 65 73 20 68 61 76 65 20 62 65 65 6e 20 63 68  ues have been ch
5c170 6f 73 65 6e 2e 3c 2f 6c 69 3e 0a 09 09 20 2a 20  osen.</li>... * 
5c180 20 20 20 20 09 09 3c 2f 75 6c 3e 0a 09 09 20 2a      ..</ul>... *
5c190 20 20 40 70 61 72 61 6d 20 20 7b 41 72 72 61 79    @param  {Array
5c1a0 7d 20 20 76 61 6c 75 65 73 20 20 20 41 6e 20 61  }  values   An a
5c1b0 72 72 61 79 20 6f 66 20 6f 70 74 69 6f 6e 73 20  rray of options 
5c1c0 74 6f 20 63 68 6f 6f 73 65 20 66 72 6f 6d 2e 0a  to choose from..
5c1d0 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 54  .. *  @param  {T
5c1e0 6f 6e 65 2e 43 74 72 6c 50 61 74 74 65 72 6e 2e  one.CtrlPattern.
5c1f0 54 79 70 65 3d 7d 20 20 74 79 70 65 20 20 54 68  Type=}  type  Th
5c200 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 61  e name of the pa
5c210 74 74 65 72 6e 2e 0a 09 09 20 2a 20 20 40 65 78  ttern.... *  @ex
5c220 74 65 6e 64 73 20 7b 54 6f 6e 65 7d 0a 09 09 20  tends {Tone}... 
5c230 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 43 74 72  */..    Tone.Ctr
5c240 6c 50 61 74 74 65 72 6e 20 3d 20 66 75 6e 63 74  lPattern = funct
5c250 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
5c260 20 20 76 61 72 20 6f 70 74 69 6f 6e 73 20 3d 20    var options = 
5c270 74 68 69 73 2e 6f 70 74 69 6f 6e 73 4f 62 6a 65  this.optionsObje
5c280 63 74 28 61 72 67 75 6d 65 6e 74 73 2c 20 5b 0a  ct(arguments, [.
5c290 09 20 20 20 20 20 20 20 20 20 20 20 20 27 76 61  .            'va
5c2a0 6c 75 65 73 27 2c 0a 09 20 20 20 20 20 20 20 20  lues',..        
5c2b0 20 20 20 20 27 74 79 70 65 27 0a 09 20 20 20 20      'type'..    
5c2c0 20 20 20 20 5d 2c 20 54 6f 6e 65 2e 43 74 72 6c      ], Tone.Ctrl
5c2d0 50 61 74 74 65 72 6e 2e 64 65 66 61 75 6c 74 73  Pattern.defaults
5c2e0 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
5c2f0 09 09 09 20 2a 20 20 54 68 65 20 61 72 72 61 79  ... *  The array
5c300 20 6f 66 20 76 61 6c 75 65 73 20 74 6f 20 61 72   of values to ar
5c310 70 65 67 67 69 61 74 65 20 6f 76 65 72 0a 09 09  peggiate over...
5c320 09 20 2a 20 20 40 74 79 70 65 20 7b 41 72 72 61  . *  @type {Arra
5c330 79 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  y}.... */..     
5c340 20 20 20 74 68 69 73 2e 76 61 6c 75 65 73 20 3d     this.values =
5c350 20 6f 70 74 69 6f 6e 73 2e 76 61 6c 75 65 73 3b   options.values;
5c360 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
5c370 09 20 2a 20 20 54 68 65 20 63 75 72 72 65 6e 74  . *  The current
5c380 20 70 6f 73 69 74 69 6f 6e 20 69 6e 20 74 68 65   position in the
5c390 20 76 61 6c 75 65 73 20 61 72 72 61 79 0a 09 09   values array...
5c3a0 09 20 2a 20 20 40 74 79 70 65 20 20 7b 4e 75 6d  . *  @type  {Num
5c3b0 62 65 72 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20  ber}.... */..   
5c3c0 20 20 20 20 20 74 68 69 73 2e 69 6e 64 65 78 20       this.index 
5c3d0 3d 20 30 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a  = 0;..        /*
5c3e0 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 74 79 70  *.... *  The typ
5c3f0 65 20 70 6c 61 63 65 68 6f 6c 64 65 72 0a 09 09  e placeholder...
5c400 09 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65  . *  @type {Tone
5c410 2e 43 74 72 6c 50 61 74 74 65 72 6e 2e 54 79 70  .CtrlPattern.Typ
5c420 65 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61  e}.... *  @priva
5c430 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  te.... */..     
5c440 20 20 20 74 68 69 73 2e 5f 74 79 70 65 20 3d 20     this._type = 
5c450 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 2f  null;..        /
5c460 2a 2a 0a 09 09 09 20 2a 20 20 53 68 75 66 66 6c  **.... *  Shuffl
5c470 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ed values for th
5c480 65 20 52 61 6e 64 6f 6d 4f 6e 63 65 20 74 79 70  e RandomOnce typ
5c490 65 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b  e.... *  @type {
5c4a0 41 72 72 61 79 7d 0a 09 09 09 20 2a 20 20 40 70  Array}.... *  @p
5c4b0 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20  rivate.... */.. 
5c4c0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 68 75         this._shu
5c4d0 66 66 6c 65 64 20 3d 20 6e 75 6c 6c 3b 0a 09 20  ffled = null;.. 
5c4e0 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
5c4f0 20 20 54 68 65 20 64 69 72 65 63 74 69 6f 6e 20    The direction 
5c500 6f 66 20 74 68 65 20 6d 6f 76 65 6d 65 6e 74 0a  of the movement.
5c510 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 53 74  ... *  @type {St
5c520 72 69 6e 67 7d 0a 09 09 09 20 2a 20 20 40 70 72  ring}.... *  @pr
5c530 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20  ivate.... */..  
5c540 20 20 20 20 20 20 74 68 69 73 2e 5f 64 69 72 65        this._dire
5c550 63 74 69 6f 6e 20 3d 20 6e 75 6c 6c 3b 0a 09 20  ction = null;.. 
5c560 20 20 20 20 20 20 20 74 68 69 73 2e 74 79 70 65         this.type
5c570 20 3d 20 6f 70 74 69 6f 6e 73 2e 74 79 70 65 3b   = options.type;
5c580 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f  ..    };..    To
5c590 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 43  ne.extend(Tone.C
5c5a0 74 72 6c 50 61 74 74 65 72 6e 29 3b 0a 09 20 20  trlPattern);..  
5c5b0 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20    /**... *  The 
5c5c0 43 6f 6e 74 72 6f 6c 20 50 61 74 74 65 72 6e 73  Control Patterns
5c5d0 0a 09 09 20 2a 20 20 40 74 79 70 65 20 20 7b 4f  ... *  @type  {O
5c5e0 62 6a 65 63 74 7d 0a 09 09 20 2a 20 20 40 73 74  bject}... *  @st
5c5f0 61 74 69 63 0a 09 09 20 2a 2f 0a 09 20 20 20 20  atic... */..    
5c600 54 6f 6e 65 2e 43 74 72 6c 50 61 74 74 65 72 6e  Tone.CtrlPattern
5c610 2e 54 79 70 65 20 3d 20 7b 0a 09 20 20 20 20 20  .Type = {..     
5c620 20 20 20 55 70 3a 20 27 75 70 27 2c 0a 09 20 20     Up: 'up',..  
5c630 20 20 20 20 20 20 44 6f 77 6e 3a 20 27 64 6f 77        Down: 'dow
5c640 6e 27 2c 0a 09 20 20 20 20 20 20 20 20 55 70 44  n',..        UpD
5c650 6f 77 6e 3a 20 27 75 70 44 6f 77 6e 27 2c 0a 09  own: 'upDown',..
5c660 20 20 20 20 20 20 20 20 44 6f 77 6e 55 70 3a 20          DownUp: 
5c670 27 64 6f 77 6e 55 70 27 2c 0a 09 20 20 20 20 20  'downUp',..     
5c680 20 20 20 41 6c 74 65 72 6e 61 74 65 55 70 3a 20     AlternateUp: 
5c690 27 61 6c 74 65 72 6e 61 74 65 55 70 27 2c 0a 09  'alternateUp',..
5c6a0 20 20 20 20 20 20 20 20 41 6c 74 65 72 6e 61 74          Alternat
5c6b0 65 44 6f 77 6e 3a 20 27 61 6c 74 65 72 6e 61 74  eDown: 'alternat
5c6c0 65 44 6f 77 6e 27 2c 0a 09 20 20 20 20 20 20 20  eDown',..       
5c6d0 20 52 61 6e 64 6f 6d 3a 20 27 72 61 6e 64 6f 6d   Random: 'random
5c6e0 27 2c 0a 09 20 20 20 20 20 20 20 20 52 61 6e 64  ',..        Rand
5c6f0 6f 6d 57 61 6c 6b 3a 20 27 72 61 6e 64 6f 6d 57  omWalk: 'randomW
5c700 61 6c 6b 27 2c 0a 09 20 20 20 20 20 20 20 20 52  alk',..        R
5c710 61 6e 64 6f 6d 4f 6e 63 65 3a 20 27 72 61 6e 64  andomOnce: 'rand
5c720 6f 6d 4f 6e 63 65 27 0a 09 20 20 20 20 7d 3b 0a  omOnce'..    };.
5c730 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 54  .    /**... *  T
5c740 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
5c750 73 2e 20 0a 09 09 20 2a 20 20 40 74 79 70 65 20  s. ... *  @type 
5c760 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a   {Object}... */.
5c770 09 20 20 20 20 54 6f 6e 65 2e 43 74 72 6c 50 61  .    Tone.CtrlPa
5c780 74 74 65 72 6e 2e 64 65 66 61 75 6c 74 73 20 3d  ttern.defaults =
5c790 20 7b 0a 09 20 20 20 20 20 20 20 20 27 74 79 70   {..        'typ
5c7a0 65 27 3a 20 54 6f 6e 65 2e 43 74 72 6c 50 61 74  e': Tone.CtrlPat
5c7b0 74 65 72 6e 2e 54 79 70 65 2e 55 70 2c 0a 09 20  tern.Type.Up,.. 
5c7c0 20 20 20 20 20 20 20 27 76 61 6c 75 65 73 27 3a         'values':
5c7d0 20 5b 5d 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20   []..    };..   
5c7e0 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20 76   /**... *  The v
5c7f0 61 6c 75 65 20 61 74 20 74 68 65 20 63 75 72 72  alue at the curr
5c800 65 6e 74 20 69 6e 64 65 78 20 6f 66 20 74 68 65  ent index of the
5c810 20 70 61 74 74 65 72 6e 2e 0a 09 09 20 2a 20 20   pattern.... *  
5c820 40 72 65 61 64 4f 6e 6c 79 0a 09 09 20 2a 20 20  @readOnly... *  
5c830 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 43  @memberOf Tone.C
5c840 74 72 6c 50 61 74 74 65 72 6e 23 0a 09 09 20 2a  trlPattern#... *
5c850 20 20 40 74 79 70 65 20 7b 2a 7d 0a 09 09 20 2a    @type {*}... *
5c860 20 20 40 6e 61 6d 65 20 76 61 6c 75 65 0a 09 09    @name value...
5c870 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e   */..    Object.
5c880 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54  defineProperty(T
5c890 6f 6e 65 2e 43 74 72 6c 50 61 74 74 65 72 6e 2e  one.CtrlPattern.
5c8a0 70 72 6f 74 6f 74 79 70 65 2c 20 27 76 61 6c 75  prototype, 'valu
5c8b0 65 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67  e', {..        g
5c8c0 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  et: function () 
5c8d0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
5c8e0 2f 73 6f 6d 65 20 73 61 66 65 67 75 61 72 64 73  /some safeguards
5c8f0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
5c900 20 28 74 68 69 73 2e 76 61 6c 75 65 73 2e 6c 65   (this.values.le
5c910 6e 67 74 68 20 3d 3d 3d 20 30 29 20 7b 0a 09 20  ngth === 0) {.. 
5c920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
5c930 65 74 75 72 6e 3b 0a 09 20 20 20 20 20 20 20 20  eturn;..        
5c940 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 74      } else if (t
5c950 68 69 73 2e 76 61 6c 75 65 73 2e 6c 65 6e 67 74  his.values.lengt
5c960 68 20 3d 3d 3d 20 31 29 20 7b 0a 09 20 20 20 20  h === 1) {..    
5c970 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
5c980 72 6e 20 74 68 69 73 2e 76 61 6c 75 65 73 5b 30  rn this.values[0
5c990 5d 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
5c9a0 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  }..            t
5c9b0 68 69 73 2e 69 6e 64 65 78 20 3d 20 4d 61 74 68  his.index = Math
5c9c0 2e 6d 69 6e 28 74 68 69 73 2e 69 6e 64 65 78 2c  .min(this.index,
5c9d0 20 74 68 69 73 2e 76 61 6c 75 65 73 2e 6c 65 6e   this.values.len
5c9e0 67 74 68 20 2d 20 31 29 3b 0a 09 20 20 20 20 20  gth - 1);..     
5c9f0 20 20 20 20 20 20 20 76 61 72 20 76 61 6c 20 3d         var val =
5ca00 20 74 68 69 73 2e 76 61 6c 75 65 73 5b 74 68 69   this.values[thi
5ca10 73 2e 69 6e 64 65 78 5d 3b 0a 09 20 20 20 20 20  s.index];..     
5ca20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e         if (this.
5ca30 74 79 70 65 20 3d 3d 3d 20 54 6f 6e 65 2e 43 74  type === Tone.Ct
5ca40 72 6c 50 61 74 74 65 72 6e 2e 54 79 70 65 2e 52  rlPattern.Type.R
5ca50 61 6e 64 6f 6d 4f 6e 63 65 29 20 7b 0a 09 20 20  andomOnce) {..  
5ca60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
5ca70 20 28 74 68 69 73 2e 76 61 6c 75 65 73 2e 6c 65   (this.values.le
5ca80 6e 67 74 68 20 21 3d 3d 20 74 68 69 73 2e 5f 73  ngth !== this._s
5ca90 68 75 66 66 6c 65 64 2e 6c 65 6e 67 74 68 29 20  huffled.length) 
5caa0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5cab0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 68 75         this._shu
5cac0 66 66 6c 65 56 61 6c 75 65 73 28 29 3b 0a 09 20  ffleValues();.. 
5cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
5cae0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5caf0 20 20 76 61 6c 20 3d 20 74 68 69 73 2e 76 61 6c    val = this.val
5cb00 75 65 73 5b 74 68 69 73 2e 5f 73 68 75 66 66 6c  ues[this._shuffl
5cb10 65 64 5b 74 68 69 73 2e 69 6e 64 65 78 5d 5d 3b  ed[this.index]];
5cb20 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ..            }.
5cb30 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
5cb40 75 72 6e 20 76 61 6c 3b 0a 09 20 20 20 20 20 20  urn val;..      
5cb50 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20    }..    });..  
5cb60 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20    /**... *  The 
5cb70 70 61 74 74 65 72 6e 20 75 73 65 64 20 74 6f 20  pattern used to 
5cb80 73 65 6c 65 63 74 20 74 68 65 20 6e 65 78 74 0a  select the next.
5cb90 09 09 20 2a 20 20 69 74 65 6d 20 66 72 6f 6d 20  .. *  item from 
5cba0 74 68 65 20 76 61 6c 75 65 73 20 61 72 72 61 79  the values array
5cbb0 0a 09 09 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66  ... *  @memberOf
5cbc0 20 54 6f 6e 65 2e 43 74 72 6c 50 61 74 74 65 72   Tone.CtrlPatter
5cbd0 6e 23 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b  n#... *  @type {
5cbe0 54 6f 6e 65 2e 43 74 72 6c 50 61 74 74 65 72 6e  Tone.CtrlPattern
5cbf0 2e 54 79 70 65 7d 0a 09 09 20 2a 20 20 40 6e 61  .Type}... *  @na
5cc00 6d 65 20 74 79 70 65 0a 09 09 20 2a 2f 0a 09 20  me type... */.. 
5cc10 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65     Object.define
5cc20 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 43 74  Property(Tone.Ct
5cc30 72 6c 50 61 74 74 65 72 6e 2e 70 72 6f 74 6f 74  rlPattern.protot
5cc40 79 70 65 2c 20 27 74 79 70 65 27 2c 20 7b 0a 09  ype, 'type', {..
5cc50 20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e          get: fun
5cc60 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
5cc70 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
5cc80 68 69 73 2e 5f 74 79 70 65 3b 0a 09 20 20 20 20  his._type;..    
5cc90 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20      },..        
5cca0 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 74  set: function (t
5ccb0 79 70 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ype) {..        
5ccc0 20 20 20 20 74 68 69 73 2e 5f 74 79 70 65 20 3d      this._type =
5ccd0 20 74 79 70 65 3b 0a 09 20 20 20 20 20 20 20 20   type;..        
5cce0 20 20 20 20 74 68 69 73 2e 5f 73 68 75 66 66 6c      this._shuffl
5ccf0 65 64 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  ed = null;..    
5cd00 20 20 20 20 20 20 20 20 2f 2f 74 68 65 20 66 69          //the fi
5cd10 72 73 74 20 69 6e 64 65 78 0a 09 20 20 20 20 20  rst index..     
5cd20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e         if (this.
5cd30 5f 74 79 70 65 20 3d 3d 3d 20 54 6f 6e 65 2e 43  _type === Tone.C
5cd40 74 72 6c 50 61 74 74 65 72 6e 2e 54 79 70 65 2e  trlPattern.Type.
5cd50 55 70 20 7c 7c 20 74 68 69 73 2e 5f 74 79 70 65  Up || this._type
5cd60 20 3d 3d 3d 20 54 6f 6e 65 2e 43 74 72 6c 50 61   === Tone.CtrlPa
5cd70 74 74 65 72 6e 2e 54 79 70 65 2e 55 70 44 6f 77  ttern.Type.UpDow
5cd80 6e 20 7c 7c 20 74 68 69 73 2e 5f 74 79 70 65 20  n || this._type 
5cd90 3d 3d 3d 20 54 6f 6e 65 2e 43 74 72 6c 50 61 74  === Tone.CtrlPat
5cda0 74 65 72 6e 2e 54 79 70 65 2e 52 61 6e 64 6f 6d  tern.Type.Random
5cdb0 4f 6e 63 65 20 7c 7c 20 74 68 69 73 2e 5f 74 79  Once || this._ty
5cdc0 70 65 20 3d 3d 3d 20 54 6f 6e 65 2e 43 74 72 6c  pe === Tone.Ctrl
5cdd0 50 61 74 74 65 72 6e 2e 54 79 70 65 2e 41 6c 74  Pattern.Type.Alt
5cde0 65 72 6e 61 74 65 55 70 29 20 7b 0a 09 20 20 20  ernateUp) {..   
5cdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
5ce00 73 2e 69 6e 64 65 78 20 3d 20 30 3b 0a 09 20 20  s.index = 0;..  
5ce10 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
5ce20 20 69 66 20 28 74 68 69 73 2e 5f 74 79 70 65 20   if (this._type 
5ce30 3d 3d 3d 20 54 6f 6e 65 2e 43 74 72 6c 50 61 74  === Tone.CtrlPat
5ce40 74 65 72 6e 2e 54 79 70 65 2e 44 6f 77 6e 20 7c  tern.Type.Down |
5ce50 7c 20 74 68 69 73 2e 5f 74 79 70 65 20 3d 3d 3d  | this._type ===
5ce60 20 54 6f 6e 65 2e 43 74 72 6c 50 61 74 74 65 72   Tone.CtrlPatter
5ce70 6e 2e 54 79 70 65 2e 44 6f 77 6e 55 70 20 7c 7c  n.Type.DownUp ||
5ce80 20 74 68 69 73 2e 5f 74 79 70 65 20 3d 3d 3d 20   this._type === 
5ce90 54 6f 6e 65 2e 43 74 72 6c 50 61 74 74 65 72 6e  Tone.CtrlPattern
5cea0 2e 54 79 70 65 2e 41 6c 74 65 72 6e 61 74 65 44  .Type.AlternateD
5ceb0 6f 77 6e 29 20 7b 0a 09 20 20 20 20 20 20 20 20  own) {..        
5cec0 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 64          this.ind
5ced0 65 78 20 3d 20 74 68 69 73 2e 76 61 6c 75 65 73  ex = this.values
5cee0 2e 6c 65 6e 67 74 68 20 2d 20 31 3b 0a 09 20 20  .length - 1;..  
5cef0 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20            }..   
5cf00 20 20 20 20 20 20 20 20 20 2f 2f 74 68 65 20 64           //the d
5cf10 69 72 65 63 74 69 6f 6e 0a 09 20 20 20 20 20 20  irection..      
5cf20 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 5f        if (this._
5cf30 74 79 70 65 20 3d 3d 3d 20 54 6f 6e 65 2e 43 74  type === Tone.Ct
5cf40 72 6c 50 61 74 74 65 72 6e 2e 54 79 70 65 2e 55  rlPattern.Type.U
5cf50 70 44 6f 77 6e 20 7c 7c 20 74 68 69 73 2e 5f 74  pDown || this._t
5cf60 79 70 65 20 3d 3d 3d 20 54 6f 6e 65 2e 43 74 72  ype === Tone.Ctr
5cf70 6c 50 61 74 74 65 72 6e 2e 54 79 70 65 2e 41 6c  lPattern.Type.Al
5cf80 74 65 72 6e 61 74 65 55 70 29 20 7b 0a 09 20 20  ternateUp) {..  
5cf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
5cfa0 69 73 2e 5f 64 69 72 65 63 74 69 6f 6e 20 3d 20  is._direction = 
5cfb0 54 6f 6e 65 2e 43 74 72 6c 50 61 74 74 65 72 6e  Tone.CtrlPattern
5cfc0 2e 54 79 70 65 2e 55 70 3b 0a 09 20 20 20 20 20  .Type.Up;..     
5cfd0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66         } else if
5cfe0 20 28 74 68 69 73 2e 5f 74 79 70 65 20 3d 3d 3d   (this._type ===
5cff0 20 54 6f 6e 65 2e 43 74 72 6c 50 61 74 74 65 72   Tone.CtrlPatter
5d000 6e 2e 54 79 70 65 2e 44 6f 77 6e 55 70 20 7c 7c  n.Type.DownUp ||
5d010 20 74 68 69 73 2e 5f 74 79 70 65 20 3d 3d 3d 20   this._type === 
5d020 54 6f 6e 65 2e 43 74 72 6c 50 61 74 74 65 72 6e  Tone.CtrlPattern
5d030 2e 54 79 70 65 2e 41 6c 74 65 72 6e 61 74 65 44  .Type.AlternateD
5d040 6f 77 6e 29 20 7b 0a 09 20 20 20 20 20 20 20 20  own) {..        
5d050 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 64 69          this._di
5d060 72 65 63 74 69 6f 6e 20 3d 20 54 6f 6e 65 2e 43  rection = Tone.C
5d070 74 72 6c 50 61 74 74 65 72 6e 2e 54 79 70 65 2e  trlPattern.Type.
5d080 44 6f 77 6e 3b 0a 09 20 20 20 20 20 20 20 20 20  Down;..         
5d090 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20     }..          
5d0a0 20 20 2f 2f 72 61 6e 64 6f 6d 73 0a 09 20 20 20    //randoms..   
5d0b0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69           if (thi
5d0c0 73 2e 5f 74 79 70 65 20 3d 3d 3d 20 54 6f 6e 65  s._type === Tone
5d0d0 2e 43 74 72 6c 50 61 74 74 65 72 6e 2e 54 79 70  .CtrlPattern.Typ
5d0e0 65 2e 52 61 6e 64 6f 6d 4f 6e 63 65 29 20 7b 0a  e.RandomOnce) {.
5d0f0 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5d100 20 74 68 69 73 2e 5f 73 68 75 66 66 6c 65 56 61   this._shuffleVa
5d110 6c 75 65 73 28 29 3b 0a 09 20 20 20 20 20 20 20  lues();..       
5d120 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28       } else if (
5d130 74 68 69 73 2e 5f 74 79 70 65 20 3d 3d 3d 20 54  this._type === T
5d140 6f 6e 65 2e 43 74 72 6c 50 61 74 74 65 72 6e 2e  one.CtrlPattern.
5d150 52 61 6e 64 6f 6d 29 20 7b 0a 09 20 20 20 20 20  Random) {..     
5d160 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
5d170 69 6e 64 65 78 20 3d 20 4d 61 74 68 2e 66 6c 6f  index = Math.flo
5d180 6f 72 28 4d 61 74 68 2e 72 61 6e 64 6f 6d 28 29  or(Math.random()
5d190 20 2a 20 74 68 69 73 2e 76 61 6c 75 65 73 2e 6c   * this.values.l
5d1a0 65 6e 67 74 68 29 3b 0a 09 20 20 20 20 20 20 20  ength);..       
5d1b0 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
5d1c0 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20  }..    });..    
5d1d0 2f 2a 2a 0a 09 09 20 2a 20 20 52 65 74 75 72 6e  /**... *  Return
5d1e0 20 74 68 65 20 6e 65 78 74 20 76 61 6c 75 65 20   the next value 
5d1f0 67 69 76 65 6e 20 74 68 65 20 63 75 72 72 65 6e  given the curren
5d200 74 20 70 6f 73 69 74 69 6f 6e 0a 09 09 20 2a 20  t position... * 
5d210 20 61 6e 64 20 70 61 74 74 65 72 6e 2e 0a 09 09   and pattern....
5d220 20 2a 20 20 40 72 65 74 75 72 6e 20 7b 2a 7d 20   *  @return {*} 
5d230 54 68 65 20 6e 65 78 74 20 76 61 6c 75 65 0a 09  The next value..
5d240 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 43  . */..    Tone.C
5d250 74 72 6c 50 61 74 74 65 72 6e 2e 70 72 6f 74 6f  trlPattern.proto
5d260 74 79 70 65 2e 6e 65 78 74 20 3d 20 66 75 6e 63  type.next = func
5d270 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
5d280 20 20 20 76 61 72 20 74 79 70 65 20 3d 20 74 68     var type = th
5d290 69 73 2e 74 79 70 65 3b 0a 09 20 20 20 20 20 20  is.type;..      
5d2a0 20 20 2f 2f 63 68 6f 6f 73 65 20 74 68 65 20 6e    //choose the n
5d2b0 65 78 74 20 69 6e 64 65 78 0a 09 20 20 20 20 20  ext index..     
5d2c0 20 20 20 69 66 20 28 74 79 70 65 20 3d 3d 3d 20     if (type === 
5d2d0 54 6f 6e 65 2e 43 74 72 6c 50 61 74 74 65 72 6e  Tone.CtrlPattern
5d2e0 2e 54 79 70 65 2e 55 70 29 20 7b 0a 09 20 20 20  .Type.Up) {..   
5d2f0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e           this.in
5d300 64 65 78 2b 2b 3b 0a 09 20 20 20 20 20 20 20 20  dex++;..        
5d310 20 20 20 20 69 66 20 28 74 68 69 73 2e 69 6e 64      if (this.ind
5d320 65 78 20 3e 3d 20 74 68 69 73 2e 76 61 6c 75 65  ex >= this.value
5d330 73 2e 6c 65 6e 67 74 68 29 20 7b 0a 09 20 20 20  s.length) {..   
5d340 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
5d350 73 2e 69 6e 64 65 78 20 3d 20 30 3b 0a 09 20 20  s.index = 0;..  
5d360 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20            }..   
5d370 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28       } else if (
5d380 74 79 70 65 20 3d 3d 3d 20 54 6f 6e 65 2e 43 74  type === Tone.Ct
5d390 72 6c 50 61 74 74 65 72 6e 2e 54 79 70 65 2e 44  rlPattern.Type.D
5d3a0 6f 77 6e 29 20 7b 0a 09 20 20 20 20 20 20 20 20  own) {..        
5d3b0 20 20 20 20 74 68 69 73 2e 69 6e 64 65 78 2d 2d      this.index--
5d3c0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 69  ;..            i
5d3d0 66 20 28 74 68 69 73 2e 69 6e 64 65 78 20 3c 20  f (this.index < 
5d3e0 30 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  0) {..          
5d3f0 20 20 20 20 20 20 74 68 69 73 2e 69 6e 64 65 78        this.index
5d400 20 3d 20 74 68 69 73 2e 76 61 6c 75 65 73 2e 6c   = this.values.l
5d410 65 6e 67 74 68 20 2d 20 31 3b 0a 09 20 20 20 20  ength - 1;..    
5d420 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
5d430 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 74 79     } else if (ty
5d440 70 65 20 3d 3d 3d 20 54 6f 6e 65 2e 43 74 72 6c  pe === Tone.Ctrl
5d450 50 61 74 74 65 72 6e 2e 54 79 70 65 2e 55 70 44  Pattern.Type.UpD
5d460 6f 77 6e 20 7c 7c 20 74 79 70 65 20 3d 3d 3d 20  own || type === 
5d470 54 6f 6e 65 2e 43 74 72 6c 50 61 74 74 65 72 6e  Tone.CtrlPattern
5d480 2e 54 79 70 65 2e 44 6f 77 6e 55 70 29 20 7b 0a  .Type.DownUp) {.
5d490 09 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
5d4a0 28 74 68 69 73 2e 5f 64 69 72 65 63 74 69 6f 6e  (this._direction
5d4b0 20 3d 3d 3d 20 54 6f 6e 65 2e 43 74 72 6c 50 61   === Tone.CtrlPa
5d4c0 74 74 65 72 6e 2e 54 79 70 65 2e 55 70 29 20 7b  ttern.Type.Up) {
5d4d0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5d4e0 20 20 74 68 69 73 2e 69 6e 64 65 78 2b 2b 3b 0a    this.index++;.
5d4f0 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
5d500 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20  lse {..         
5d510 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 64 65         this.inde
5d520 78 2d 2d 3b 0a 09 20 20 20 20 20 20 20 20 20 20  x--;..          
5d530 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20    }..           
5d540 20 69 66 20 28 74 68 69 73 2e 69 6e 64 65 78 20   if (this.index 
5d550 3c 20 30 29 20 7b 0a 09 20 20 20 20 20 20 20 20  < 0) {..        
5d560 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 64          this.ind
5d570 65 78 20 3d 20 31 3b 0a 09 20 20 20 20 20 20 20  ex = 1;..       
5d580 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 64           this._d
5d590 69 72 65 63 74 69 6f 6e 20 3d 20 54 6f 6e 65 2e  irection = Tone.
5d5a0 43 74 72 6c 50 61 74 74 65 72 6e 2e 54 79 70 65  CtrlPattern.Type
5d5b0 2e 55 70 3b 0a 09 20 20 20 20 20 20 20 20 20 20  .Up;..          
5d5c0 20 20 7d 20 65 6c 73 65 20 69 66 20 28 74 68 69    } else if (thi
5d5d0 73 2e 69 6e 64 65 78 20 3e 3d 20 74 68 69 73 2e  s.index >= this.
5d5e0 76 61 6c 75 65 73 2e 6c 65 6e 67 74 68 29 20 7b  values.length) {
5d5f0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5d600 20 20 74 68 69 73 2e 69 6e 64 65 78 20 3d 20 74    this.index = t
5d610 68 69 73 2e 76 61 6c 75 65 73 2e 6c 65 6e 67 74  his.values.lengt
5d620 68 20 2d 20 32 3b 0a 09 20 20 20 20 20 20 20 20  h - 2;..        
5d630 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 64 69          this._di
5d640 72 65 63 74 69 6f 6e 20 3d 20 54 6f 6e 65 2e 43  rection = Tone.C
5d650 74 72 6c 50 61 74 74 65 72 6e 2e 54 79 70 65 2e  trlPattern.Type.
5d660 44 6f 77 6e 3b 0a 09 20 20 20 20 20 20 20 20 20  Down;..         
5d670 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 20     }..        } 
5d680 65 6c 73 65 20 69 66 20 28 74 79 70 65 20 3d 3d  else if (type ==
5d690 3d 20 54 6f 6e 65 2e 43 74 72 6c 50 61 74 74 65  = Tone.CtrlPatte
5d6a0 72 6e 2e 54 79 70 65 2e 52 61 6e 64 6f 6d 29 20  rn.Type.Random) 
5d6b0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
5d6c0 68 69 73 2e 69 6e 64 65 78 20 3d 20 4d 61 74 68  his.index = Math
5d6d0 2e 66 6c 6f 6f 72 28 4d 61 74 68 2e 72 61 6e 64  .floor(Math.rand
5d6e0 6f 6d 28 29 20 2a 20 74 68 69 73 2e 76 61 6c 75  om() * this.valu
5d6f0 65 73 2e 6c 65 6e 67 74 68 29 3b 0a 09 20 20 20  es.length);..   
5d700 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28       } else if (
5d710 74 79 70 65 20 3d 3d 3d 20 54 6f 6e 65 2e 43 74  type === Tone.Ct
5d720 72 6c 50 61 74 74 65 72 6e 2e 54 79 70 65 2e 52  rlPattern.Type.R
5d730 61 6e 64 6f 6d 57 61 6c 6b 29 20 7b 0a 09 20 20  andomWalk) {..  
5d740 20 20 20 20 20 20 20 20 20 20 69 66 20 28 4d 61            if (Ma
5d750 74 68 2e 72 61 6e 64 6f 6d 28 29 20 3c 20 30 2e  th.random() < 0.
5d760 35 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  5) {..          
5d770 20 20 20 20 20 20 74 68 69 73 2e 69 6e 64 65 78        this.index
5d780 2d 2d 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  --;..           
5d790 20 20 20 20 20 74 68 69 73 2e 69 6e 64 65 78 20       this.index 
5d7a0 3d 20 4d 61 74 68 2e 6d 61 78 28 74 68 69 73 2e  = Math.max(this.
5d7b0 69 6e 64 65 78 2c 20 30 29 3b 0a 09 20 20 20 20  index, 0);..    
5d7c0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
5d7d0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5d7e0 20 20 74 68 69 73 2e 69 6e 64 65 78 2b 2b 3b 0a    this.index++;.
5d7f0 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5d800 20 74 68 69 73 2e 69 6e 64 65 78 20 3d 20 4d 61   this.index = Ma
5d810 74 68 2e 6d 69 6e 28 74 68 69 73 2e 69 6e 64 65  th.min(this.inde
5d820 78 2c 20 74 68 69 73 2e 76 61 6c 75 65 73 2e 6c  x, this.values.l
5d830 65 6e 67 74 68 20 2d 20 31 29 3b 0a 09 20 20 20  ength - 1);..   
5d840 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20           }..    
5d850 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 74      } else if (t
5d860 79 70 65 20 3d 3d 3d 20 54 6f 6e 65 2e 43 74 72  ype === Tone.Ctr
5d870 6c 50 61 74 74 65 72 6e 2e 54 79 70 65 2e 52 61  lPattern.Type.Ra
5d880 6e 64 6f 6d 4f 6e 63 65 29 20 7b 0a 09 20 20 20  ndomOnce) {..   
5d890 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e           this.in
5d8a0 64 65 78 2b 2b 3b 0a 09 20 20 20 20 20 20 20 20  dex++;..        
5d8b0 20 20 20 20 69 66 20 28 74 68 69 73 2e 69 6e 64      if (this.ind
5d8c0 65 78 20 3e 3d 20 74 68 69 73 2e 76 61 6c 75 65  ex >= this.value
5d8d0 73 2e 6c 65 6e 67 74 68 29 20 7b 0a 09 20 20 20  s.length) {..   
5d8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
5d8f0 73 2e 69 6e 64 65 78 20 3d 20 30 3b 0a 09 20 20  s.index = 0;..  
5d900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5d910 72 65 73 68 75 66 66 6c 65 20 74 68 65 20 76 61  reshuffle the va
5d920 6c 75 65 73 20 66 6f 72 20 6e 65 78 74 20 74 69  lues for next ti
5d930 6d 65 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  me..            
5d940 20 20 20 20 74 68 69 73 2e 5f 73 68 75 66 66 6c      this._shuffl
5d950 65 56 61 6c 75 65 73 28 29 3b 0a 09 20 20 20 20  eValues();..    
5d960 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
5d970 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 74 79     } else if (ty
5d980 70 65 20 3d 3d 3d 20 54 6f 6e 65 2e 43 74 72 6c  pe === Tone.Ctrl
5d990 50 61 74 74 65 72 6e 2e 54 79 70 65 2e 41 6c 74  Pattern.Type.Alt
5d9a0 65 72 6e 61 74 65 55 70 29 20 7b 0a 09 20 20 20  ernateUp) {..   
5d9b0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69           if (thi
5d9c0 73 2e 5f 64 69 72 65 63 74 69 6f 6e 20 3d 3d 3d  s._direction ===
5d9d0 20 54 6f 6e 65 2e 43 74 72 6c 50 61 74 74 65 72   Tone.CtrlPatter
5d9e0 6e 2e 54 79 70 65 2e 55 70 29 20 7b 0a 09 20 20  n.Type.Up) {..  
5d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
5da00 69 73 2e 69 6e 64 65 78 20 2b 3d 20 32 3b 0a 09  is.index += 2;..
5da10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5da20 74 68 69 73 2e 5f 64 69 72 65 63 74 69 6f 6e 20  this._direction 
5da30 3d 20 54 6f 6e 65 2e 43 74 72 6c 50 61 74 74 65  = Tone.CtrlPatte
5da40 72 6e 2e 54 79 70 65 2e 44 6f 77 6e 3b 0a 09 20  rn.Type.Down;.. 
5da50 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
5da60 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e {..           
5da70 20 20 20 20 20 74 68 69 73 2e 69 6e 64 65 78 20       this.index 
5da80 2d 3d 20 31 3b 0a 09 20 20 20 20 20 20 20 20 20  -= 1;..         
5da90 20 20 20 20 20 20 20 74 68 69 73 2e 5f 64 69 72         this._dir
5daa0 65 63 74 69 6f 6e 20 3d 20 54 6f 6e 65 2e 43 74  ection = Tone.Ct
5dab0 72 6c 50 61 74 74 65 72 6e 2e 54 79 70 65 2e 55  rlPattern.Type.U
5dac0 70 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  p;..            
5dad0 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 69  }..            i
5dae0 66 20 28 74 68 69 73 2e 69 6e 64 65 78 20 3e 3d  f (this.index >=
5daf0 20 74 68 69 73 2e 76 61 6c 75 65 73 2e 6c 65 6e   this.values.len
5db00 67 74 68 29 20 7b 0a 09 20 20 20 20 20 20 20 20  gth) {..        
5db10 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 64          this.ind
5db20 65 78 20 3d 20 30 3b 0a 09 20 20 20 20 20 20 20  ex = 0;..       
5db30 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 64           this._d
5db40 69 72 65 63 74 69 6f 6e 20 3d 20 54 6f 6e 65 2e  irection = Tone.
5db50 43 74 72 6c 50 61 74 74 65 72 6e 2e 54 79 70 65  CtrlPattern.Type
5db60 2e 55 70 3b 0a 09 20 20 20 20 20 20 20 20 20 20  .Up;..          
5db70 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 20 65    }..        } e
5db80 6c 73 65 20 69 66 20 28 74 79 70 65 20 3d 3d 3d  lse if (type ===
5db90 20 54 6f 6e 65 2e 43 74 72 6c 50 61 74 74 65 72   Tone.CtrlPatter
5dba0 6e 2e 54 79 70 65 2e 41 6c 74 65 72 6e 61 74 65  n.Type.Alternate
5dbb0 44 6f 77 6e 29 20 7b 0a 09 20 20 20 20 20 20 20  Down) {..       
5dbc0 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 5f 64       if (this._d
5dbd0 69 72 65 63 74 69 6f 6e 20 3d 3d 3d 20 54 6f 6e  irection === Ton
5dbe0 65 2e 43 74 72 6c 50 61 74 74 65 72 6e 2e 54 79  e.CtrlPattern.Ty
5dbf0 70 65 2e 55 70 29 20 7b 0a 09 20 20 20 20 20 20  pe.Up) {..      
5dc00 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 69            this.i
5dc10 6e 64 65 78 20 2b 3d 20 31 3b 0a 09 20 20 20 20  ndex += 1;..    
5dc20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
5dc30 2e 5f 64 69 72 65 63 74 69 6f 6e 20 3d 20 54 6f  ._direction = To
5dc40 6e 65 2e 43 74 72 6c 50 61 74 74 65 72 6e 2e 54  ne.CtrlPattern.T
5dc50 79 70 65 2e 44 6f 77 6e 3b 0a 09 20 20 20 20 20  ype.Down;..     
5dc60 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
5dc70 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5dc80 20 74 68 69 73 2e 69 6e 64 65 78 20 2d 3d 20 32   this.index -= 2
5dc90 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
5dca0 20 20 20 74 68 69 73 2e 5f 64 69 72 65 63 74 69     this._directi
5dcb0 6f 6e 20 3d 20 54 6f 6e 65 2e 43 74 72 6c 50 61  on = Tone.CtrlPa
5dcc0 74 74 65 72 6e 2e 54 79 70 65 2e 55 70 3b 0a 09  ttern.Type.Up;..
5dcd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20              }.. 
5dce0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
5dcf0 68 69 73 2e 69 6e 64 65 78 20 3c 20 30 29 20 7b  his.index < 0) {
5dd00 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5dd10 20 20 74 68 69 73 2e 69 6e 64 65 78 20 3d 20 74    this.index = t
5dd20 68 69 73 2e 76 61 6c 75 65 73 2e 6c 65 6e 67 74  his.values.lengt
5dd30 68 20 2d 20 31 3b 0a 09 20 20 20 20 20 20 20 20  h - 1;..        
5dd40 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 64 69          this._di
5dd50 72 65 63 74 69 6f 6e 20 3d 20 54 6f 6e 65 2e 43  rection = Tone.C
5dd60 74 72 6c 50 61 74 74 65 72 6e 2e 54 79 70 65 2e  trlPattern.Type.
5dd70 44 6f 77 6e 3b 0a 09 20 20 20 20 20 20 20 20 20  Down;..         
5dd80 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 0a     }..        }.
5dd90 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
5dda0 74 68 69 73 2e 76 61 6c 75 65 3b 0a 09 20 20 20  this.value;..   
5ddb0 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20   };..    /**... 
5ddc0 2a 20 20 53 68 75 66 66 6c 65 73 20 74 68 65 20  *  Shuffles the 
5ddd0 76 61 6c 75 65 73 20 61 6e 64 20 70 6c 61 63 65  values and place
5dde0 73 20 74 68 65 20 72 65 73 75 6c 74 73 20 69 6e  s the results in
5ddf0 74 6f 20 74 68 65 20 5f 73 68 75 66 66 6c 65 64  to the _shuffled
5de00 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
5de10 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
5de20 43 74 72 6c 50 61 74 74 65 72 6e 2e 70 72 6f 74  CtrlPattern.prot
5de30 6f 74 79 70 65 2e 5f 73 68 75 66 66 6c 65 56 61  otype._shuffleVa
5de40 6c 75 65 73 20 3d 20 66 75 6e 63 74 69 6f 6e 20  lues = function 
5de50 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61  () {..        va
5de60 72 20 63 6f 70 79 20 3d 20 5b 5d 3b 0a 09 20 20  r copy = [];..  
5de70 20 20 20 20 20 20 74 68 69 73 2e 5f 73 68 75 66        this._shuf
5de80 66 6c 65 64 20 3d 20 5b 5d 3b 0a 09 20 20 20 20  fled = [];..    
5de90 20 20 20 20 66 6f 72 20 28 76 61 72 20 69 20 3d      for (var i =
5dea0 20 30 3b 20 69 20 3c 20 74 68 69 73 2e 76 61 6c   0; i < this.val
5deb0 75 65 73 2e 6c 65 6e 67 74 68 3b 20 69 2b 2b 29  ues.length; i++)
5dec0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5ded0 63 6f 70 79 5b 69 5d 20 3d 20 69 3b 0a 09 20 20  copy[i] = i;..  
5dee0 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
5def0 20 77 68 69 6c 65 20 28 63 6f 70 79 2e 6c 65 6e   while (copy.len
5df00 67 74 68 20 3e 20 30 29 20 7b 0a 09 20 20 20 20  gth > 0) {..    
5df10 20 20 20 20 20 20 20 20 76 61 72 20 72 61 6e 64          var rand
5df20 56 61 6c 20 3d 20 63 6f 70 79 2e 73 70 6c 69 63  Val = copy.splic
5df30 65 28 4d 61 74 68 2e 66 6c 6f 6f 72 28 63 6f 70  e(Math.floor(cop
5df40 79 2e 6c 65 6e 67 74 68 20 2a 20 4d 61 74 68 2e  y.length * Math.
5df50 72 61 6e 64 6f 6d 28 29 29 2c 20 31 29 3b 0a 09  random()), 1);..
5df60 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
5df70 2e 5f 73 68 75 66 66 6c 65 64 2e 70 75 73 68 28  ._shuffled.push(
5df80 72 61 6e 64 56 61 6c 5b 30 5d 29 3b 0a 09 20 20  randVal[0]);..  
5df90 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a        }..    };.
5dfa0 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43  .    /**... *  C
5dfb0 6c 65 61 6e 20 75 70 0a 09 09 20 2a 20 20 40 72  lean up... *  @r
5dfc0 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 43 74 72  eturns {Tone.Ctr
5dfd0 6c 50 61 74 74 65 72 6e 7d 20 74 68 69 73 0a 09  lPattern} this..
5dfe0 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 43  . */..    Tone.C
5dff0 74 72 6c 50 61 74 74 65 72 6e 2e 70 72 6f 74 6f  trlPattern.proto
5e000 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20 66  type.dispose = f
5e010 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
5e020 20 20 20 20 20 20 74 68 69 73 2e 5f 73 68 75 66        this._shuf
5e030 66 6c 65 64 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20  fled = null;..  
5e040 20 20 20 20 20 20 74 68 69 73 2e 76 61 6c 75 65        this.value
5e050 73 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 7d  s = null;..    }
5e060 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f  ;..    return To
5e070 6e 65 2e 43 74 72 6c 50 61 74 74 65 72 6e 3b 0a  ne.CtrlPattern;.
5e080 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e  .});..Module(fun
5e090 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09  ction (Tone) {..
5e0a0 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09      ..    /**...
5e0b0 20 2a 20 20 40 63 6c 61 73 73 20 20 43 68 6f 6f   *  @class  Choo
5e0c0 73 65 20 61 20 72 61 6e 64 6f 6d 20 76 61 6c 75  se a random valu
5e0d0 65 2e 0a 09 09 20 2a 20 20 40 65 78 74 65 6e 64  e.... *  @extend
5e0e0 73 20 7b 54 6f 6e 65 7d 0a 09 09 20 2a 20 20 40  s {Tone}... *  @
5e0f0 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 76 61 72  example... * var
5e100 20 72 61 6e 64 6f 6d 57 61 6c 6b 20 3d 20 6e 65   randomWalk = ne
5e110 77 20 54 6f 6e 65 2e 43 74 72 6c 52 61 6e 64 6f  w Tone.CtrlRando
5e120 6d 28 7b 0a 09 09 20 2a 20 09 22 6d 69 6e 22 20  m({... * ."min" 
5e130 3a 20 30 2c 0a 09 09 20 2a 20 09 22 6d 61 78 22  : 0,... * ."max"
5e140 20 3a 20 31 30 2c 0a 09 09 20 2a 20 09 22 69 6e   : 10,... * ."in
5e150 74 65 67 65 72 22 20 3a 20 74 72 75 65 0a 09 09  teger" : true...
5e160 20 2a 20 7d 29 3b 0a 09 09 20 2a 20 72 61 6e 64   * });... * rand
5e170 6f 6d 57 61 6c 6b 2e 65 76 61 6c 28 29 3b 0a 09  omWalk.eval();..
5e180 09 20 2a 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  . *... *  @param
5e190 20 7b 4e 75 6d 62 65 72 7c 54 69 6d 65 3d 7d 20   {Number|Time=} 
5e1a0 6d 69 6e 20 54 68 65 20 6d 69 6e 69 6d 75 6d 20  min The minimum 
5e1b0 72 65 74 75 72 6e 20 76 61 6c 75 65 2e 0a 09 09  return value....
5e1c0 20 2a 20 20 40 70 61 72 61 6d 20 7b 4e 75 6d 62   *  @param {Numb
5e1d0 65 72 7c 54 69 6d 65 3d 7d 20 6d 61 78 20 54 68  er|Time=} max Th
5e1e0 65 20 6d 61 78 69 6d 75 6d 20 72 65 74 75 72 6e  e maximum return
5e1f0 20 76 61 6c 75 65 2e 0a 09 09 20 2a 2f 0a 09 20   value.... */.. 
5e200 20 20 20 54 6f 6e 65 2e 43 74 72 6c 52 61 6e 64     Tone.CtrlRand
5e210 6f 6d 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  om = function ()
5e220 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20   {..        var 
5e230 6f 70 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e 6f  options = this.o
5e240 70 74 69 6f 6e 73 4f 62 6a 65 63 74 28 61 72 67  ptionsObject(arg
5e250 75 6d 65 6e 74 73 2c 20 5b 0a 09 20 20 20 20 20  uments, [..     
5e260 20 20 20 20 20 20 20 27 6d 69 6e 27 2c 0a 09 20         'min',.. 
5e270 20 20 20 20 20 20 20 20 20 20 20 27 6d 61 78 27             'max'
5e280 0a 09 20 20 20 20 20 20 20 20 5d 2c 20 54 6f 6e  ..        ], Ton
5e290 65 2e 43 74 72 6c 52 61 6e 64 6f 6d 2e 64 65 66  e.CtrlRandom.def
5e2a0 61 75 6c 74 73 29 3b 0a 09 20 20 20 20 20 20 20  aults);..       
5e2b0 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20   /**.... *  The 
5e2c0 6d 69 6e 69 6d 75 6d 20 72 65 74 75 72 6e 20 76  minimum return v
5e2d0 61 6c 75 65 0a 09 09 09 20 2a 20 20 40 74 79 70  alue.... *  @typ
5e2e0 65 20 20 7b 4e 75 6d 62 65 72 7c 54 69 6d 65 7d  e  {Number|Time}
5e2f0 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
5e300 20 74 68 69 73 2e 6d 69 6e 20 3d 20 6f 70 74 69   this.min = opti
5e310 6f 6e 73 2e 6d 69 6e 3b 0a 09 20 20 20 20 20 20  ons.min;..      
5e320 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65    /**.... *  The
5e330 20 6d 61 78 69 6d 75 6d 20 72 65 74 75 72 6e 20   maximum return 
5e340 76 61 6c 75 65 0a 09 09 09 20 2a 20 20 40 74 79  value.... *  @ty
5e350 70 65 20 20 7b 4e 75 6d 62 65 72 7c 54 69 6d 65  pe  {Number|Time
5e360 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  }.... */..      
5e370 20 20 74 68 69 73 2e 6d 61 78 20 3d 20 6f 70 74    this.max = opt
5e380 69 6f 6e 73 2e 6d 61 78 3b 0a 09 20 20 20 20 20  ions.max;..     
5e390 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 49 66     /**.... *  If
5e3a0 20 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75   the return valu
5e3b0 65 20 73 68 6f 75 6c 64 20 62 65 20 61 6e 20 69  e should be an i
5e3c0 6e 74 65 67 65 72 0a 09 09 09 20 2a 20 20 40 74  nteger.... *  @t
5e3d0 79 70 65 20 20 7b 42 6f 6f 6c 65 61 6e 7d 0a 09  ype  {Boolean}..
5e3e0 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
5e3f0 68 69 73 2e 69 6e 74 65 67 65 72 20 3d 20 6f 70  his.integer = op
5e400 74 69 6f 6e 73 2e 69 6e 74 65 67 65 72 3b 0a 09  tions.integer;..
5e410 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65      };..    Tone
5e420 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 43 74 72  .extend(Tone.Ctr
5e430 6c 52 61 6e 64 6f 6d 29 3b 0a 09 20 20 20 20 2f  lRandom);..    /
5e440 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20 64 65 66  **... *  The def
5e450 61 75 6c 74 73 0a 09 09 20 2a 20 20 40 63 6f 6e  aults... *  @con
5e460 73 74 0a 09 09 20 2a 20 20 40 74 79 70 65 20 20  st... *  @type  
5e470 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a 09  {Object}... */..
5e480 20 20 20 20 54 6f 6e 65 2e 43 74 72 6c 52 61 6e      Tone.CtrlRan
5e490 64 6f 6d 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b  dom.defaults = {
5e4a0 0a 09 20 20 20 20 20 20 20 20 27 6d 69 6e 27 3a  ..        'min':
5e4b0 20 30 2c 0a 09 20 20 20 20 20 20 20 20 27 6d 61   0,..        'ma
5e4c0 78 27 3a 20 31 2c 0a 09 20 20 20 20 20 20 20 20  x': 1,..        
5e4d0 27 69 6e 74 65 67 65 72 27 3a 20 66 61 6c 73 65  'integer': false
5e4e0 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
5e4f0 2a 0a 09 09 20 2a 20 20 52 65 74 75 72 6e 20 61  *... *  Return a
5e500 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 20 62 65   random value be
5e510 74 77 65 65 6e 20 6d 69 6e 20 61 6e 64 20 6d 61  tween min and ma
5e520 78 2e 20 0a 09 09 20 2a 20 20 40 72 65 61 64 4f  x. ... *  @readO
5e530 6e 6c 79 0a 09 09 20 2a 20 20 40 6d 65 6d 62 65  nly... *  @membe
5e540 72 4f 66 20 54 6f 6e 65 2e 43 74 72 6c 52 61 6e  rOf Tone.CtrlRan
5e550 64 6f 6d 23 0a 09 09 20 2a 20 20 40 74 79 70 65  dom#... *  @type
5e560 20 7b 2a 7d 0a 09 09 20 2a 20 20 40 6e 61 6d 65   {*}... *  @name
5e570 20 76 61 6c 75 65 0a 09 09 20 2a 2f 0a 09 20 20   value... */..  
5e580 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50    Object.defineP
5e590 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 43 74 72  roperty(Tone.Ctr
5e5a0 6c 52 61 6e 64 6f 6d 2e 70 72 6f 74 6f 74 79 70  lRandom.prototyp
5e5b0 65 2c 20 27 76 61 6c 75 65 27 2c 20 7b 0a 09 20  e, 'value', {.. 
5e5c0 20 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63         get: func
5e5d0 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
5e5e0 20 20 20 20 20 20 20 76 61 72 20 6d 69 6e 20 3d         var min =
5e5f0 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28   this.toSeconds(
5e600 74 68 69 73 2e 6d 69 6e 29 3b 0a 09 20 20 20 20  this.min);..    
5e610 20 20 20 20 20 20 20 20 76 61 72 20 6d 61 78 20          var max 
5e620 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73  = this.toSeconds
5e630 28 74 68 69 73 2e 6d 61 78 29 3b 0a 09 20 20 20  (this.max);..   
5e640 20 20 20 20 20 20 20 20 20 76 61 72 20 72 61 6e           var ran
5e650 64 20 3d 20 4d 61 74 68 2e 72 61 6e 64 6f 6d 28  d = Math.random(
5e660 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
5e670 76 61 72 20 76 61 6c 20 3d 20 72 61 6e 64 20 2a  var val = rand *
5e680 20 6d 69 6e 20 2b 20 28 31 20 2d 20 72 61 6e 64   min + (1 - rand
5e690 29 20 2a 20 6d 61 78 3b 0a 09 20 20 20 20 20 20  ) * max;..      
5e6a0 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 69        if (this.i
5e6b0 6e 74 65 67 65 72 29 20 7b 0a 09 20 20 20 20 20  nteger) {..     
5e6c0 20 20 20 20 20 20 20 20 20 20 20 76 61 6c 20 3d             val =
5e6d0 20 4d 61 74 68 2e 66 6c 6f 6f 72 28 76 61 6c 29   Math.floor(val)
5e6e0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
5e6f0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
5e700 74 75 72 6e 20 76 61 6c 3b 0a 09 20 20 20 20 20  turn val;..     
5e710 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20     }..    });.. 
5e720 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 43     return Tone.C
5e730 74 72 6c 52 61 6e 64 6f 6d 3b 0a 09 7d 29 3b 0a  trlRandom;..});.
5e740 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e  .Module(function
5e750 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a   (Tone) {..    .
5e760 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40  .    /**... *  @
5e770 63 6c 61 73 73 20 20 42 75 66 66 65 72 20 6c 6f  class  Buffer lo
5e780 61 64 69 6e 67 20 61 6e 64 20 73 74 6f 72 61 67  ading and storag
5e790 65 2e 20 54 6f 6e 65 2e 42 75 66 66 65 72 20 69  e. Tone.Buffer i
5e7a0 73 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c  s used internall
5e7b0 79 20 62 79 20 61 6c 6c 20 0a 09 09 20 2a 20 20  y by all ... *  
5e7c0 20 20 20 20 20 20 20 20 63 6c 61 73 73 65 73 20          classes 
5e7d0 74 68 61 74 20 6d 61 6b 65 20 72 65 71 75 65 73  that make reques
5e7e0 74 73 20 66 6f 72 20 61 75 64 69 6f 20 66 69 6c  ts for audio fil
5e7f0 65 73 20 73 75 63 68 20 61 73 20 54 6f 6e 65 2e  es such as Tone.
5e800 50 6c 61 79 65 72 2c 0a 09 09 20 2a 20 20 20 20  Player,... *    
5e810 20 20 20 20 20 20 54 6f 6e 65 2e 53 61 6d 70 6c        Tone.Sampl
5e820 65 72 20 61 6e 64 20 54 6f 6e 65 2e 43 6f 6e 76  er and Tone.Conv
5e830 6f 6c 76 65 72 2e 0a 09 09 20 2a 20 20 20 20 20  olver.... *     
5e840 20 20 20 20 20 3c 62 72 3e 3c 62 72 3e 0a 09 09       <br><br>...
5e850 20 2a 20 20 20 20 20 20 20 20 20 20 41 73 69 64   *          Asid
5e860 65 20 66 72 6f 6d 20 6c 6f 61 64 20 63 61 6c 6c  e from load call
5e870 62 61 63 6b 73 20 66 72 6f 6d 20 69 6e 64 69 76  backs from indiv
5e880 69 64 75 61 6c 20 62 75 66 66 65 72 73 2c 20 54  idual buffers, T
5e890 6f 6e 65 2e 42 75 66 66 65 72 20 0a 09 09 20 2a  one.Buffer ... *
5e8a0 20 20 09 09 70 72 6f 76 69 64 65 73 20 73 74 61    ..provides sta
5e8b0 74 69 63 20 6d 65 74 68 6f 64 73 20 77 68 69 63  tic methods whic
5e8c0 68 20 6b 65 65 70 20 74 72 61 63 6b 20 6f 66 20  h keep track of 
5e8d0 74 68 65 20 6c 6f 61 64 69 6e 67 20 70 72 6f 67  the loading prog
5e8e0 72 65 73 73 20 0a 09 09 20 2a 20 20 09 09 6f 66  ress ... *  ..of
5e8f0 20 61 6c 6c 20 6f 66 20 74 68 65 20 62 75 66 66   all of the buff
5e900 65 72 73 2e 20 54 68 65 73 65 20 6d 65 74 68 6f  ers. These metho
5e910 64 73 20 61 72 65 20 54 6f 6e 65 2e 42 75 66 66  ds are Tone.Buff
5e920 65 72 2e 6f 6e 28 22 6c 6f 61 64 22 20 2f 20 22  er.on("load" / "
5e930 70 72 6f 67 72 65 73 73 22 20 2f 20 22 65 72 72  progress" / "err
5e940 6f 72 22 29 0a 09 09 20 2a 0a 09 09 20 2a 20 20  or")... *... *  
5e950 40 63 6f 6e 73 74 72 75 63 74 6f 72 20 0a 09 09  @constructor ...
5e960 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f   *  @extends {To
5e970 6e 65 7d 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  ne}... *  @param
5e980 20 7b 41 75 64 69 6f 42 75 66 66 65 72 7c 73 74   {AudioBuffer|st
5e990 72 69 6e 67 7d 20 75 72 6c 20 54 68 65 20 75 72  ring} url The ur
5e9a0 6c 20 74 6f 20 6c 6f 61 64 2c 20 6f 72 20 74 68  l to load, or th
5e9b0 65 20 61 75 64 69 6f 20 62 75 66 66 65 72 20 74  e audio buffer t
5e9c0 6f 20 73 65 74 2e 20 0a 09 09 20 2a 20 20 40 70  o set. ... *  @p
5e9d0 61 72 61 6d 20 7b 46 75 6e 63 74 69 6f 6e 3d 7d  aram {Function=}
5e9e0 20 6f 6e 6c 6f 61 64 20 41 20 63 61 6c 6c 62 61   onload A callba
5e9f0 63 6b 20 77 68 69 63 68 20 69 73 20 69 6e 76 6f  ck which is invo
5ea00 6b 65 64 20 61 66 74 65 72 20 74 68 65 20 62 75  ked after the bu
5ea10 66 66 65 72 20 69 73 20 6c 6f 61 64 65 64 2e 20  ffer is loaded. 
5ea20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 20  ... *           
5ea30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ea40 20 49 74 27 73 20 72 65 63 6f 6d 6d 65 6e 64 65   It's recommende
5ea50 64 20 74 6f 20 75 73 65 20 54 6f 6e 65 2e 42 75  d to use Tone.Bu
5ea60 66 66 65 72 2e 6f 6e 6c 6f 61 64 20 69 6e 73 74  ffer.onload inst
5ea70 65 61 64 20 0a 09 09 20 2a 20 20 20 20 20 20 20  ead ... *       
5ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ea90 20 20 20 20 20 73 69 6e 63 65 20 69 74 20 77 69       since it wi
5eaa0 6c 6c 20 67 69 76 65 20 79 6f 75 20 61 20 63 61  ll give you a ca
5eab0 6c 6c 62 61 63 6b 20 77 68 65 6e 20 41 4c 4c 20  llback when ALL 
5eac0 62 75 66 66 65 72 73 20 61 72 65 20 6c 6f 61 64  buffers are load
5ead0 65 64 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  ed.... *  @param
5eae0 20 7b 46 75 6e 63 74 69 6f 6e 3d 7d 20 6f 6e 65   {Function=} one
5eaf0 72 72 6f 72 20 54 68 65 20 63 61 6c 6c 62 61 63  rror The callbac
5eb00 6b 20 74 6f 20 69 6e 76 6f 6b 65 20 69 66 20 74  k to invoke if t
5eb10 68 65 72 65 20 69 73 20 61 6e 20 65 72 72 6f 72  here is an error
5eb20 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a  ... *  @example.
5eb30 09 09 20 2a 20 76 61 72 20 62 75 66 66 65 72 20  .. * var buffer 
5eb40 3d 20 6e 65 77 20 54 6f 6e 65 2e 42 75 66 66 65  = new Tone.Buffe
5eb50 72 28 22 70 61 74 68 2f 74 6f 2f 73 6f 75 6e 64  r("path/to/sound
5eb60 2e 6d 70 33 22 2c 20 66 75 6e 63 74 69 6f 6e 28  .mp3", function(
5eb70 29 7b 0a 09 09 20 2a 20 09 2f 2f 74 68 65 20 62  ){... * .//the b
5eb80 75 66 66 65 72 20 69 73 20 6e 6f 77 20 61 76 61  uffer is now ava
5eb90 69 6c 61 62 6c 65 2e 0a 09 09 20 2a 20 09 76 61  ilable.... * .va
5eba0 72 20 62 75 66 66 20 3d 20 62 75 66 66 65 72 2e  r buff = buffer.
5ebb0 67 65 74 28 29 3b 0a 09 09 20 2a 20 7d 29 3b 0a  get();... * });.
5ebc0 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
5ebd0 42 75 66 66 65 72 20 3d 20 66 75 6e 63 74 69 6f  Buffer = functio
5ebe0 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
5ebf0 76 61 72 20 6f 70 74 69 6f 6e 73 20 3d 20 74 68  var options = th
5ec00 69 73 2e 6f 70 74 69 6f 6e 73 4f 62 6a 65 63 74  is.optionsObject
5ec10 28 61 72 67 75 6d 65 6e 74 73 2c 20 5b 0a 09 20  (arguments, [.. 
5ec20 20 20 20 20 20 20 20 20 20 20 20 27 75 72 6c 27             'url'
5ec30 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
5ec40 6f 6e 6c 6f 61 64 27 2c 0a 09 20 20 20 20 20 20  onload',..      
5ec50 20 20 20 20 20 20 27 6f 6e 65 72 72 6f 72 27 0a        'onerror'.
5ec60 09 20 20 20 20 20 20 20 20 5d 2c 20 54 6f 6e 65  .        ], Tone
5ec70 2e 42 75 66 66 65 72 2e 64 65 66 61 75 6c 74 73  .Buffer.defaults
5ec80 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
5ec90 09 09 09 20 2a 20 20 73 74 6f 72 65 73 20 74 68  ... *  stores th
5eca0 65 20 6c 6f 61 64 65 64 20 41 75 64 69 6f 42 75  e loaded AudioBu
5ecb0 66 66 65 72 0a 09 09 09 20 2a 20 20 40 74 79 70  ffer.... *  @typ
5ecc0 65 20 7b 41 75 64 69 6f 42 75 66 66 65 72 7d 0a  e {AudioBuffer}.
5ecd0 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
5ece0 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
5ecf0 74 68 69 73 2e 5f 62 75 66 66 65 72 20 3d 20 6e  this._buffer = n
5ed00 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a  ull;..        /*
5ed10 2a 0a 09 09 09 20 2a 20 20 69 6e 64 69 63 61 74  *.... *  indicat
5ed20 65 73 20 69 66 20 74 68 65 20 62 75 66 66 65 72  es if the buffer
5ed30 20 73 68 6f 75 6c 64 20 62 65 20 72 65 76 65 72   should be rever
5ed40 73 65 64 20 6f 72 20 6e 6f 74 0a 09 09 09 20 2a  sed or not.... *
5ed50 20 20 40 74 79 70 65 20 7b 42 6f 6f 6c 65 61 6e    @type {Boolean
5ed60 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  }.... *  @privat
5ed70 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
5ed80 20 20 74 68 69 73 2e 5f 72 65 76 65 72 73 65 64    this._reversed
5ed90 20 3d 20 6f 70 74 69 6f 6e 73 2e 72 65 76 65 72   = options.rever
5eda0 73 65 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  se;..        /**
5edb0 0a 09 09 09 20 2a 20 20 54 68 65 20 58 48 52 0a  .... *  The XHR.
5edc0 09 09 09 20 2a 20 20 40 74 79 70 65 20 20 7b 58  ... *  @type  {X
5edd0 4d 4c 48 74 74 70 52 65 71 75 65 73 74 7d 0a 09  MLHttpRequest}..
5ede0 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
5edf0 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
5ee00 68 69 73 2e 5f 78 68 72 20 3d 20 6e 75 6c 6c 3b  his._xhr = null;
5ee10 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 6f 70  ..        if (op
5ee20 74 69 6f 6e 73 2e 75 72 6c 20 69 6e 73 74 61 6e  tions.url instan
5ee30 63 65 6f 66 20 41 75 64 69 6f 42 75 66 66 65 72  ceof AudioBuffer
5ee40 20 7c 7c 20 6f 70 74 69 6f 6e 73 2e 75 72 6c 20   || options.url 
5ee50 69 6e 73 74 61 6e 63 65 6f 66 20 54 6f 6e 65 2e  instanceof Tone.
5ee60 42 75 66 66 65 72 29 20 7b 0a 09 20 20 20 20 20  Buffer) {..     
5ee70 20 20 20 20 20 20 20 74 68 69 73 2e 73 65 74 28         this.set(
5ee80 6f 70 74 69 6f 6e 73 2e 75 72 6c 29 3b 0a 09 20  options.url);.. 
5ee90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 69 6e             // in
5eea0 76 6f 6b 65 20 74 68 65 20 6f 6e 6c 6f 61 64 20  voke the onload 
5eeb0 63 61 6c 6c 62 61 63 6b 0a 09 20 20 20 20 20 20  callback..      
5eec0 20 20 20 20 20 20 69 66 20 28 6f 70 74 69 6f 6e        if (option
5eed0 73 2e 6f 6e 6c 6f 61 64 29 20 7b 0a 09 20 20 20  s.onload) {..   
5eee0 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 74               opt
5eef0 69 6f 6e 73 2e 6f 6e 6c 6f 61 64 28 74 68 69 73  ions.onload(this
5ef00 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
5ef10 7d 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
5ef20 65 20 69 66 20 28 74 68 69 73 2e 69 73 53 74 72  e if (this.isStr
5ef30 69 6e 67 28 6f 70 74 69 6f 6e 73 2e 75 72 6c 29  ing(options.url)
5ef40 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
5ef50 20 74 68 69 73 2e 6c 6f 61 64 28 6f 70 74 69 6f   this.load(optio
5ef60 6e 73 2e 75 72 6c 2c 20 6f 70 74 69 6f 6e 73 2e  ns.url, options.
5ef70 6f 6e 6c 6f 61 64 2c 20 6f 70 74 69 6f 6e 73 2e  onload, options.
5ef80 6f 6e 65 72 72 6f 72 29 3b 0a 09 20 20 20 20 20  onerror);..     
5ef90 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a 09 20 20     }..    };..  
5efa0 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f    Tone.extend(To
5efb0 6e 65 2e 42 75 66 66 65 72 29 3b 0a 09 20 20 20  ne.Buffer);..   
5efc0 20 2f 2a 2a 0a 09 09 20 2a 20 20 74 68 65 20 64   /**... *  the d
5efd0 65 66 61 75 6c 74 20 70 61 72 61 6d 65 74 65 72  efault parameter
5efe0 73 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4f  s... *  @type {O
5eff0 62 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a 09 20 20  bject}... */..  
5f000 20 20 54 6f 6e 65 2e 42 75 66 66 65 72 2e 64 65    Tone.Buffer.de
5f010 66 61 75 6c 74 73 20 3d 20 7b 0a 09 20 20 20 20  faults = {..    
5f020 20 20 20 20 27 75 72 6c 27 3a 20 75 6e 64 65 66      'url': undef
5f030 69 6e 65 64 2c 0a 09 20 20 20 20 20 20 20 20 27  ined,..        '
5f040 72 65 76 65 72 73 65 27 3a 20 66 61 6c 73 65 0a  reverse': false.
5f050 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
5f060 0a 09 09 20 2a 20 20 50 61 73 73 20 69 6e 20 61  ... *  Pass in a
5f070 6e 20 41 75 64 69 6f 42 75 66 66 65 72 20 6f 72  n AudioBuffer or
5f080 20 54 6f 6e 65 2e 42 75 66 66 65 72 20 74 6f 20   Tone.Buffer to 
5f090 73 65 74 20 74 68 65 20 76 61 6c 75 65 0a 09 09  set the value...
5f0a0 20 2a 20 20 6f 66 20 74 68 69 73 20 62 75 66 66   *  of this buff
5f0b0 65 72 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  er.... *  @param
5f0c0 20 7b 41 75 64 69 6f 42 75 66 66 65 72 7c 54 6f   {AudioBuffer|To
5f0d0 6e 65 2e 42 75 66 66 65 72 7d 20 62 75 66 66 65  ne.Buffer} buffe
5f0e0 72 20 74 68 65 20 62 75 66 66 65 72 0a 09 09 20  r the buffer... 
5f0f0 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e  *  @returns {Ton
5f100 65 2e 42 75 66 66 65 72 7d 20 74 68 69 73 0a 09  e.Buffer} this..
5f110 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 42  . */..    Tone.B
5f120 75 66 66 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e  uffer.prototype.
5f130 73 65 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  set = function (
5f140 62 75 66 66 65 72 29 20 7b 0a 09 20 20 20 20 20  buffer) {..     
5f150 20 20 20 69 66 20 28 62 75 66 66 65 72 20 69 6e     if (buffer in
5f160 73 74 61 6e 63 65 6f 66 20 54 6f 6e 65 2e 42 75  stanceof Tone.Bu
5f170 66 66 65 72 29 20 7b 0a 09 20 20 20 20 20 20 20  ffer) {..       
5f180 20 20 20 20 20 74 68 69 73 2e 5f 62 75 66 66 65       this._buffe
5f190 72 20 3d 20 62 75 66 66 65 72 2e 67 65 74 28 29  r = buffer.get()
5f1a0 3b 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73  ;..        } els
5f1b0 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e {..           
5f1c0 20 74 68 69 73 2e 5f 62 75 66 66 65 72 20 3d 20   this._buffer = 
5f1d0 62 75 66 66 65 72 3b 0a 09 20 20 20 20 20 20 20  buffer;..       
5f1e0 20 7d 0a 09 20 20 20 20 20 20 20 20 72 65 74 75   }..        retu
5f1f0 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b  rn this;..    };
5f200 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
5f210 40 72 65 74 75 72 6e 20 7b 41 75 64 69 6f 42 75  @return {AudioBu
5f220 66 66 65 72 7d 20 54 68 65 20 61 75 64 69 6f 20  ffer} The audio 
5f230 62 75 66 66 65 72 20 73 74 6f 72 65 64 20 69 6e  buffer stored in
5f240 20 74 68 65 20 6f 62 6a 65 63 74 2e 0a 09 09 20   the object.... 
5f250 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 42 75 66  */..    Tone.Buf
5f260 66 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e 67 65  fer.prototype.ge
5f270 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  t = function () 
5f280 7b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
5f290 6e 20 74 68 69 73 2e 5f 62 75 66 66 65 72 3b 0a  n this._buffer;.
5f2a0 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
5f2b0 0a 09 09 20 2a 20 20 4d 61 6b 65 73 20 61 6e 20  ... *  Makes an 
5f2c0 78 68 72 20 72 65 71 65 73 74 20 66 6f 72 20 74  xhr reqest for t
5f2d0 68 65 20 73 65 6c 65 63 74 65 64 20 75 72 6c 20  he selected url 
5f2e0 74 68 65 6e 20 64 65 63 6f 64 65 73 0a 09 09 20  then decodes... 
5f2f0 2a 20 20 74 68 65 20 66 69 6c 65 20 61 73 20 61  *  the file as a
5f300 6e 20 61 75 64 69 6f 20 62 75 66 66 65 72 2e 20  n audio buffer. 
5f310 49 6e 76 6f 6b 65 73 0a 09 09 20 2a 20 20 74 68  Invokes... *  th
5f320 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20  e callback once 
5f330 74 68 65 20 61 75 64 69 6f 20 62 75 66 66 65 72  the audio buffer
5f340 20 6c 6f 61 64 73 2e 0a 09 09 20 2a 20 20 40 70   loads.... *  @p
5f350 61 72 61 6d 20 7b 53 74 72 69 6e 67 7d 20 75 72  aram {String} ur
5f360 6c 20 54 68 65 20 75 72 6c 20 6f 66 20 74 68 65  l The url of the
5f370 20 62 75 66 66 65 72 20 74 6f 20 6c 6f 61 64 2e   buffer to load.
5f380 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 20  ... *           
5f390 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 74             filet
5f3a0 79 70 65 20 73 75 70 70 6f 72 74 20 64 65 70 65  ype support depe
5f3b0 6e 64 73 20 6f 6e 20 74 68 65 0a 09 09 20 2a 20  nds on the... * 
5f3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f3d0 20 20 20 20 20 62 72 6f 77 73 65 72 2e 0a 09 09       browser....
5f3e0 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 50 72   *  @returns {Pr
5f3f0 6f 6d 69 73 65 7d 20 72 65 74 75 72 6e 73 20 61  omise} returns a
5f400 20 50 72 6f 6d 69 73 65 20 77 68 69 63 68 20 72   Promise which r
5f410 65 73 6f 6c 76 65 73 20 77 69 74 68 20 74 68 65  esolves with the
5f420 20 54 6f 6e 65 2e 42 75 66 66 65 72 0a 09 09 20   Tone.Buffer... 
5f430 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 42 75 66  */..    Tone.Buf
5f440 66 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e 6c 6f  fer.prototype.lo
5f450 61 64 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 75  ad = function (u
5f460 72 6c 2c 20 6f 6e 6c 6f 61 64 2c 20 6f 6e 65 72  rl, onload, oner
5f470 72 6f 72 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ror) {..        
5f480 76 61 72 20 70 72 6f 6d 69 73 65 20 3d 20 6e 65  var promise = ne
5f490 77 20 50 72 6f 6d 69 73 65 28 66 75 6e 63 74 69  w Promise(functi
5f4a0 6f 6e 20 28 6c 6f 61 64 2c 20 65 72 72 6f 72 29  on (load, error)
5f4b0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5f4c0 74 68 69 73 2e 5f 78 68 72 20 3d 20 54 6f 6e 65  this._xhr = Tone
5f4d0 2e 42 75 66 66 65 72 2e 6c 6f 61 64 28 75 72 6c  .Buffer.load(url
5f4e0 2c 20 2f 2f 73 75 63 63 65 73 73 0a 09 20 20 20  , //success..   
5f4f0 20 20 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f           functio
5f500 6e 20 28 62 75 66 66 29 20 7b 0a 09 20 20 20 20  n (buff) {..    
5f510 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
5f520 2e 5f 78 68 72 20 3d 20 6e 75 6c 6c 3b 0a 09 20  ._xhr = null;.. 
5f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
5f540 68 69 73 2e 73 65 74 28 62 75 66 66 29 3b 0a 09  his.set(buff);..
5f550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f560 6c 6f 61 64 28 74 68 69 73 29 3b 0a 09 20 20 20  load(this);..   
5f570 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
5f580 28 6f 6e 6c 6f 61 64 29 20 7b 0a 09 20 20 20 20  (onload) {..    
5f590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f5a0 6f 6e 6c 6f 61 64 28 74 68 69 73 29 3b 0a 09 20  onload(this);.. 
5f5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
5f5c0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 2e  ..            }.
5f5d0 62 69 6e 64 28 74 68 69 73 29 2c 20 2f 2f 65 72  bind(this), //er
5f5e0 72 6f 72 0a 09 20 20 20 20 20 20 20 20 20 20 20  ror..           
5f5f0 20 66 75 6e 63 74 69 6f 6e 20 28 65 72 72 29 20   function (err) 
5f600 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5f610 20 20 20 74 68 69 73 2e 5f 78 68 72 20 3d 20 6e     this._xhr = n
5f620 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 20 20  ull;..          
5f630 20 20 20 20 20 20 65 72 72 6f 72 28 65 72 72 29        error(err)
5f640 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
5f650 20 20 20 69 66 20 28 6f 6e 65 72 72 6f 72 29 20     if (onerror) 
5f660 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5f670 20 20 20 20 20 20 20 6f 6e 65 72 72 6f 72 28 65         onerror(e
5f680 72 72 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20  rr);..          
5f690 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
5f6a0 20 20 20 20 20 7d 2e 62 69 6e 64 28 74 68 69 73       }.bind(this
5f6b0 29 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 2e 62  ));..        }.b
5f6c0 69 6e 64 28 74 68 69 73 29 29 3b 0a 09 20 20 20  ind(this));..   
5f6d0 20 20 20 20 20 72 65 74 75 72 6e 20 70 72 6f 6d       return prom
5f6e0 69 73 65 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  ise;..    };..  
5f6f0 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 64 69 73 70    /**... *  disp
5f700 6f 73 65 20 61 6e 64 20 64 69 73 63 6f 6e 6e 65  ose and disconne
5f710 63 74 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e  ct... *  @return
5f720 73 20 7b 54 6f 6e 65 2e 42 75 66 66 65 72 7d 20  s {Tone.Buffer} 
5f730 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20  this... */..    
5f740 54 6f 6e 65 2e 42 75 66 66 65 72 2e 70 72 6f 74  Tone.Buffer.prot
5f750 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20  otype.dispose = 
5f760 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
5f770 20 20 20 20 20 20 20 54 6f 6e 65 2e 45 6d 69 74         Tone.Emit
5f780 74 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69  ter.prototype.di
5f790 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69 73 29  spose.call(this)
5f7a0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
5f7b0 5f 62 75 66 66 65 72 20 3d 20 6e 75 6c 6c 3b 0a  _buffer = null;.
5f7c0 09 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69  .        if (thi
5f7d0 73 2e 5f 78 68 72 29 20 7b 0a 09 20 20 20 20 20  s._xhr) {..     
5f7e0 20 20 20 20 20 20 20 54 6f 6e 65 2e 42 75 66 66         Tone.Buff
5f7f0 65 72 2e 5f 63 75 72 72 65 6e 74 44 6f 77 6e 6c  er._currentDownl
5f800 6f 61 64 73 2d 2d 3b 0a 09 20 20 20 20 20 20 20  oads--;..       
5f810 20 20 20 20 20 74 68 69 73 2e 5f 78 68 72 2e 61       this._xhr.a
5f820 62 6f 72 74 28 29 3b 0a 09 20 20 20 20 20 20 20  bort();..       
5f830 20 20 20 20 20 74 68 69 73 2e 5f 78 68 72 20 3d       this._xhr =
5f840 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
5f850 7d 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  }..        retur
5f860 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a  n this;..    };.
5f870 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 49 66  .    /**... * If
5f880 20 74 68 65 20 62 75 66 66 65 72 20 69 73 20 6c   the buffer is l
5f890 6f 61 64 65 64 20 6f 72 20 6e 6f 74 0a 09 09 20  oaded or not... 
5f8a0 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65  * @memberOf Tone
5f8b0 2e 42 75 66 66 65 72 23 0a 09 09 20 2a 20 40 74  .Buffer#... * @t
5f8c0 79 70 65 20 7b 42 6f 6f 6c 65 61 6e 7d 0a 09 09  ype {Boolean}...
5f8d0 20 2a 20 40 6e 61 6d 65 20 6c 6f 61 64 65 64 0a   * @name loaded.
5f8e0 09 09 20 2a 20 40 72 65 61 64 4f 6e 6c 79 0a 09  .. * @readOnly..
5f8f0 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74  . */..    Object
5f900 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28  .defineProperty(
5f910 54 6f 6e 65 2e 42 75 66 66 65 72 2e 70 72 6f 74  Tone.Buffer.prot
5f920 6f 74 79 70 65 2c 20 27 6c 6f 61 64 65 64 27 2c  otype, 'loaded',
5f930 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a   {..        get:
5f940 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
5f950 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
5f960 72 6e 20 74 68 69 73 2e 6c 65 6e 67 74 68 20 3e  rn this.length >
5f970 20 30 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09   0;..        }..
5f980 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a      });..    /**
5f990 0a 09 09 20 2a 20 54 68 65 20 64 75 72 61 74 69  ... * The durati
5f9a0 6f 6e 20 6f 66 20 74 68 65 20 62 75 66 66 65 72  on of the buffer
5f9b0 2e 20 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f  . ... * @memberO
5f9c0 66 20 54 6f 6e 65 2e 42 75 66 66 65 72 23 0a 09  f Tone.Buffer#..
5f9d0 09 20 2a 20 40 74 79 70 65 20 7b 4e 75 6d 62 65  . * @type {Numbe
5f9e0 72 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 64 75  r}... * @name du
5f9f0 72 61 74 69 6f 6e 0a 09 09 20 2a 20 40 72 65 61  ration... * @rea
5fa00 64 4f 6e 6c 79 0a 09 09 20 2a 2f 0a 09 20 20 20  dOnly... */..   
5fa10 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72   Object.definePr
5fa20 6f 70 65 72 74 79 28 54 6f 6e 65 2e 42 75 66 66  operty(Tone.Buff
5fa30 65 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 64  er.prototype, 'd
5fa40 75 72 61 74 69 6f 6e 27 2c 20 7b 0a 09 20 20 20  uration', {..   
5fa50 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69       get: functi
5fa60 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
5fa70 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 5f 62       if (this._b
5fa80 75 66 66 65 72 29 20 7b 0a 09 20 20 20 20 20 20  uffer) {..      
5fa90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5faa0 20 74 68 69 73 2e 5f 62 75 66 66 65 72 2e 64 75   this._buffer.du
5fab0 72 61 74 69 6f 6e 3b 0a 09 20 20 20 20 20 20 20  ration;..       
5fac0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20       } else {.. 
5fad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
5fae0 65 74 75 72 6e 20 30 3b 0a 09 20 20 20 20 20 20  eturn 0;..      
5faf0 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
5fb00 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20   }..    });..   
5fb10 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65 20 6c 65   /**... * The le
5fb20 6e 67 74 68 20 6f 66 20 74 68 65 20 62 75 66 66  ngth of the buff
5fb30 65 72 20 69 6e 20 73 61 6d 70 6c 65 73 0a 09 09  er in samples...
5fb40 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e   * @memberOf Ton
5fb50 65 2e 42 75 66 66 65 72 23 0a 09 09 20 2a 20 40  e.Buffer#... * @
5fb60 74 79 70 65 20 7b 4e 75 6d 62 65 72 7d 0a 09 09  type {Number}...
5fb70 20 2a 20 40 6e 61 6d 65 20 6c 65 6e 67 74 68 0a   * @name length.
5fb80 09 09 20 2a 20 40 72 65 61 64 4f 6e 6c 79 0a 09  .. * @readOnly..
5fb90 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74  . */..    Object
5fba0 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28  .defineProperty(
5fbb0 54 6f 6e 65 2e 42 75 66 66 65 72 2e 70 72 6f 74  Tone.Buffer.prot
5fbc0 6f 74 79 70 65 2c 20 27 6c 65 6e 67 74 68 27 2c  otype, 'length',
5fbd0 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a   {..        get:
5fbe0 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
5fbf0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5fc00 74 68 69 73 2e 5f 62 75 66 66 65 72 29 20 7b 0a  this._buffer) {.
5fc10 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5fc20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 62 75   return this._bu
5fc30 66 66 65 72 2e 6c 65 6e 67 74 68 3b 0a 09 20 20  ffer.length;..  
5fc40 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
5fc50 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5fc60 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 09 20      return 0;.. 
5fc70 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20             }..  
5fc80 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b        }..    });
5fc90 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54  ..    /**... * T
5fca0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73  he number of dis
5fcb0 63 72 65 74 65 20 61 75 64 69 6f 20 63 68 61 6e  crete audio chan
5fcc0 6e 65 6c 73 2e 20 52 65 74 75 72 6e 73 20 30 20  nels. Returns 0 
5fcd0 69 66 20 6e 6f 20 62 75 66 66 65 72 0a 09 09 20  if no buffer... 
5fce0 2a 20 69 73 20 6c 6f 61 64 65 64 2e 0a 09 09 20  * is loaded.... 
5fcf0 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65  * @memberOf Tone
5fd00 2e 42 75 66 66 65 72 23 0a 09 09 20 2a 20 40 74  .Buffer#... * @t
5fd10 79 70 65 20 7b 4e 75 6d 62 65 72 7d 0a 09 09 20  ype {Number}... 
5fd20 2a 20 40 6e 61 6d 65 20 6e 75 6d 62 65 72 4f 66  * @name numberOf
5fd30 43 68 61 6e 6e 65 6c 73 0a 09 09 20 2a 20 40 72  Channels... * @r
5fd40 65 61 64 4f 6e 6c 79 0a 09 09 20 2a 2f 0a 09 20  eadOnly... */.. 
5fd50 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65     Object.define
5fd60 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 42 75  Property(Tone.Bu
5fd70 66 66 65 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20  ffer.prototype, 
5fd80 27 6e 75 6d 62 65 72 4f 66 43 68 61 6e 6e 65 6c  'numberOfChannel
5fd90 73 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67  s', {..        g
5fda0 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  et: function () 
5fdb0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
5fdc0 66 20 28 74 68 69 73 2e 5f 62 75 66 66 65 72 29  f (this._buffer)
5fdd0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5fde0 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
5fdf0 5f 62 75 66 66 65 72 2e 6e 75 6d 62 65 72 4f 66  _buffer.numberOf
5fe00 43 68 61 6e 6e 65 6c 73 3b 0a 09 20 20 20 20 20  Channels;..     
5fe10 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
5fe20 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5fe30 20 72 65 74 75 72 6e 20 30 3b 0a 09 20 20 20 20   return 0;..    
5fe40 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
5fe50 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20     }..    });.. 
5fe60 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 53 65 74     /**... *  Set
5fe70 20 74 68 65 20 61 75 64 69 6f 20 62 75 66 66 65   the audio buffe
5fe80 72 20 66 72 6f 6d 20 74 68 65 20 61 72 72 61 79  r from the array
5fe90 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 46  ... *  @param {F
5fea0 6c 6f 61 74 33 32 41 72 72 61 79 7d 20 61 72 72  loat32Array} arr
5feb0 61 79 20 54 68 65 20 61 72 72 61 79 20 74 6f 20  ay The array to 
5fec0 66 69 6c 6c 20 74 68 65 20 61 75 64 69 6f 20 62  fill the audio b
5fed0 75 66 66 65 72 0a 09 09 20 2a 20 20 40 70 61 72  uffer... *  @par
5fee0 61 6d 20 7b 4e 75 6d 62 65 72 7d 20 5b 63 68 61  am {Number} [cha
5fef0 6e 6e 65 6c 73 3d 31 5d 20 54 68 65 20 6e 75 6d  nnels=1] The num
5ff00 62 65 72 20 6f 66 20 63 68 61 6e 6e 65 6c 73 20  ber of channels 
5ff10 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
5ff20 20 61 72 72 61 79 2e 20 0a 09 09 20 2a 20 20 20   array. ... *   
5ff30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ff40 20 20 20 20 20 20 20 20 20 20 20 20 49 66 20 74              If t
5ff50 68 65 20 63 68 61 6e 6e 65 6c 20 69 73 20 6d 6f  he channel is mo
5ff60 72 65 20 74 68 61 6e 20 31 2c 20 74 68 65 20 69  re than 1, the i
5ff70 6e 70 75 74 20 61 72 72 61 79 0a 09 09 20 2a 20  nput array... * 
5ff80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ff90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73                is
5ffa0 20 65 78 70 65 63 74 65 64 20 74 6f 20 62 65 20   expected to be 
5ffb0 61 20 6d 75 6c 74 69 64 69 6d 65 6e 73 69 6f 6e  a multidimension
5ffc0 61 6c 20 61 72 72 61 79 0a 09 09 20 2a 20 20 20  al array... *   
5ffd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ffe0 20 20 20 20 20 20 20 20 20 20 20 20 77 69 74 68              with
5fff0 20 64 69 6d 65 6e 73 69 6f 6e 73 20 65 71 75 61   dimensions equa
60000 6c 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  l to the number 
60010 6f 66 20 63 68 61 6e 6e 65 6c 73 2e 0a 09 09 20  of channels.... 
60020 2a 20 20 40 72 65 74 75 72 6e 20 7b 54 6f 6e 65  *  @return {Tone
60030 2e 42 75 66 66 65 72 7d 20 74 68 69 73 0a 09 09  .Buffer} this...
60040 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 42 75   */..    Tone.Bu
60050 66 66 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e 66  ffer.prototype.f
60060 72 6f 6d 41 72 72 61 79 20 3d 20 66 75 6e 63 74  romArray = funct
60070 69 6f 6e 20 28 61 72 72 61 79 29 20 7b 0a 09 20  ion (array) {.. 
60080 20 20 20 20 20 20 20 76 61 72 20 69 73 4d 75 6c         var isMul
60090 74 69 64 69 6d 65 6e 73 69 6f 6e 61 6c 20 3d 20  tidimensional = 
600a0 61 72 72 61 79 5b 30 5d 2e 6c 65 6e 67 74 68 20  array[0].length 
600b0 3e 20 30 3b 0a 09 20 20 20 20 20 20 20 20 76 61  > 0;..        va
600c0 72 20 63 68 61 6e 6e 65 6c 73 20 3d 20 69 73 4d  r channels = isM
600d0 75 6c 74 69 64 69 6d 65 6e 73 69 6f 6e 61 6c 20  ultidimensional 
600e0 3f 20 61 72 72 61 79 2e 6c 65 6e 67 74 68 20 3a  ? array.length :
600f0 20 31 3b 0a 09 20 20 20 20 20 20 20 20 76 61 72   1;..        var
60100 20 6c 65 6e 20 3d 20 69 73 4d 75 6c 74 69 64 69   len = isMultidi
60110 6d 65 6e 73 69 6f 6e 61 6c 20 3f 20 61 72 72 61  mensional ? arra
60120 79 5b 30 5d 2e 6c 65 6e 67 74 68 20 3a 20 61 72  y[0].length : ar
60130 72 61 79 2e 6c 65 6e 67 74 68 3b 0a 09 20 20 20  ray.length;..   
60140 20 20 20 20 20 76 61 72 20 62 75 66 66 65 72 20       var buffer 
60150 3d 20 74 68 69 73 2e 63 6f 6e 74 65 78 74 2e 63  = this.context.c
60160 72 65 61 74 65 42 75 66 66 65 72 28 63 68 61 6e  reateBuffer(chan
60170 6e 65 6c 73 2c 20 6c 65 6e 2c 20 74 68 69 73 2e  nels, len, this.
60180 63 6f 6e 74 65 78 74 2e 73 61 6d 70 6c 65 52 61  context.sampleRa
60190 74 65 29 3b 0a 09 20 20 20 20 20 20 20 20 69 66  te);..        if
601a0 20 28 21 69 73 4d 75 6c 74 69 64 69 6d 65 6e 73   (!isMultidimens
601b0 69 6f 6e 61 6c 20 26 26 20 63 68 61 6e 6e 65 6c  ional && channel
601c0 73 20 3d 3d 3d 20 31 29 20 7b 0a 09 20 20 20 20  s === 1) {..    
601d0 20 20 20 20 20 20 20 20 61 72 72 61 79 20 3d 20          array = 
601e0 5b 61 72 72 61 79 5d 3b 0a 09 20 20 20 20 20 20  [array];..      
601f0 20 20 7d 0a 09 20 20 20 20 20 20 20 20 66 6f 72    }..        for
60200 20 28 76 61 72 20 63 20 3d 20 30 3b 20 63 20 3c   (var c = 0; c <
60210 20 63 68 61 6e 6e 65 6c 73 3b 20 63 2b 2b 29 20   channels; c++) 
60220 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
60230 66 20 28 74 68 69 73 2e 69 73 46 75 6e 63 74 69  f (this.isFuncti
60240 6f 6e 28 62 75 66 66 65 72 2e 63 6f 70 79 54 6f  on(buffer.copyTo
60250 43 68 61 6e 6e 65 6c 29 29 20 7b 0a 09 20 20 20  Channel)) {..   
60260 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75 66               buf
60270 66 65 72 2e 63 6f 70 79 54 6f 43 68 61 6e 6e 65  fer.copyToChanne
60280 6c 28 61 72 72 61 79 5b 63 5d 2c 20 63 29 3b 0a  l(array[c], c);.
60290 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
602a0 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20  lse {..         
602b0 20 20 20 20 20 20 20 76 61 72 20 63 68 61 6e 6e         var chann
602c0 65 6c 20 3d 20 62 75 66 66 65 72 2e 67 65 74 43  el = buffer.getC
602d0 68 61 6e 6e 65 6c 44 61 74 61 28 63 29 3b 0a 09  hannelData(c);..
602e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
602f0 76 61 72 20 63 68 61 6e 6e 65 6c 41 72 72 61 79  var channelArray
60300 20 3d 20 61 72 72 61 79 5b 63 5d 3b 0a 09 20 20   = array[c];..  
60310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
60320 72 20 28 76 61 72 20 69 20 3d 20 30 3b 20 69 20  r (var i = 0; i 
60330 3c 20 63 68 61 6e 6e 65 6c 41 72 72 61 79 2e 6c  < channelArray.l
60340 65 6e 67 74 68 3b 20 69 2b 2b 29 20 7b 0a 09 20  ength; i++) {.. 
60350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
60360 20 20 20 63 68 61 6e 6e 65 6c 5b 69 5d 20 3d 20     channel[i] = 
60370 63 68 61 6e 6e 65 6c 41 72 72 61 79 5b 69 5d 3b  channelArray[i];
60380 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
60390 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20    }..           
603a0 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20   }..        }.. 
603b0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 62 75 66         this._buf
603c0 66 65 72 20 3d 20 62 75 66 66 65 72 3b 0a 09 20  fer = buffer;.. 
603d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
603e0 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  is;..    };..   
603f0 20 2f 2a 2a 0a 09 09 20 2a 20 09 47 65 74 20 74   /**... * .Get t
60400 68 65 20 62 75 66 66 65 72 20 61 73 20 61 6e 20  he buffer as an 
60410 61 72 72 61 79 2e 20 53 69 6e 67 6c 65 20 63 68  array. Single ch
60420 61 6e 6e 65 6c 20 62 75 66 66 65 72 73 20 77 69  annel buffers wi
60430 6c 6c 20 72 65 74 75 72 6e 20 61 20 31 2d 64 69  ll return a 1-di
60440 6d 65 6e 73 69 6f 6e 61 6c 20 0a 09 09 20 2a 20  mensional ... * 
60450 09 46 6c 6f 61 74 33 32 41 72 72 61 79 2c 20 61  .Float32Array, a
60460 6e 64 20 6d 75 6c 74 69 63 68 61 6e 6e 65 6c 20  nd multichannel 
60470 62 75 66 66 65 72 73 20 77 69 6c 6c 20 72 65 74  buffers will ret
60480 75 72 6e 20 6d 75 6c 74 69 64 69 6d 65 6e 73 69  urn multidimensi
60490 6f 6e 61 6c 20 61 72 72 61 79 73 2e 0a 09 09 20  onal arrays.... 
604a0 2a 20 20 40 70 61 72 61 6d 20 7b 4e 75 6d 62 65  *  @param {Numbe
604b0 72 3d 7d 20 63 68 61 6e 6e 65 6c 20 4f 70 74 69  r=} channel Opti
604c0 6f 6e 61 6c 6c 79 20 6f 6e 6c 79 20 63 6f 70 79  onally only copy
604d0 20 61 20 73 69 6e 67 6c 65 20 63 68 61 6e 6e 65   a single channe
604e0 6c 20 66 72 6f 6d 20 74 68 65 20 61 72 72 61 79  l from the array
604f0 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20  .... *  @return 
60500 7b 41 72 72 61 79 7d 0a 09 09 20 2a 2f 0a 09 20  {Array}... */.. 
60510 20 20 20 54 6f 6e 65 2e 42 75 66 66 65 72 2e 70     Tone.Buffer.p
60520 72 6f 74 6f 74 79 70 65 2e 74 6f 41 72 72 61 79  rototype.toArray
60530 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 63 68 61   = function (cha
60540 6e 6e 65 6c 29 20 7b 0a 09 20 20 20 20 20 20 20  nnel) {..       
60550 20 69 66 20 28 74 68 69 73 2e 69 73 4e 75 6d 62   if (this.isNumb
60560 65 72 28 63 68 61 6e 6e 65 6c 29 29 20 7b 0a 09  er(channel)) {..
60570 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
60580 72 6e 20 74 68 69 73 2e 5f 62 75 66 66 65 72 2e  rn this._buffer.
60590 67 65 74 43 68 61 6e 6e 65 6c 44 61 74 61 28 63  getChannelData(c
605a0 68 61 6e 6e 65 6c 29 3b 0a 09 20 20 20 20 20 20  hannel);..      
605b0 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20    } else {..    
605c0 20 20 20 20 20 20 20 20 76 61 72 20 72 65 74 20          var ret 
605d0 3d 20 5b 5d 3b 0a 09 20 20 20 20 20 20 20 20 20  = [];..         
605e0 20 20 20 66 6f 72 20 28 76 61 72 20 63 20 3d 20     for (var c = 
605f0 30 3b 20 63 20 3c 20 74 68 69 73 2e 6e 75 6d 62  0; c < this.numb
60600 65 72 4f 66 43 68 61 6e 6e 65 6c 73 3b 20 63 2b  erOfChannels; c+
60610 2b 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  +) {..          
60620 20 20 20 20 20 20 72 65 74 5b 63 5d 20 3d 20 6e        ret[c] = n
60630 65 77 20 46 6c 6f 61 74 33 32 41 72 72 61 79 28  ew Float32Array(
60640 74 68 69 73 2e 6c 65 6e 67 74 68 29 3b 0a 09 20  this.length);.. 
60650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
60660 66 20 28 74 68 69 73 2e 69 73 46 75 6e 63 74 69  f (this.isFuncti
60670 6f 6e 28 74 68 69 73 2e 5f 62 75 66 66 65 72 2e  on(this._buffer.
60680 63 6f 70 79 46 72 6f 6d 43 68 61 6e 6e 65 6c 29  copyFromChannel)
60690 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
606a0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 62           this._b
606b0 75 66 66 65 72 2e 63 6f 70 79 46 72 6f 6d 43 68  uffer.copyFromCh
606c0 61 6e 6e 65 6c 28 72 65 74 5b 63 5d 2c 20 63 29  annel(ret[c], c)
606d0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
606e0 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20     } else {..   
606f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
60700 20 76 61 72 20 63 68 61 6e 6e 65 6c 44 61 74 61   var channelData
60710 20 3d 20 74 68 69 73 2e 5f 62 75 66 66 65 72 2e   = this._buffer.
60720 67 65 74 43 68 61 6e 6e 65 6c 44 61 74 61 28 63  getChannelData(c
60730 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
60740 20 20 20 20 20 20 20 20 76 61 72 20 72 65 74 41          var retA
60750 72 72 61 79 20 3d 20 72 65 74 5b 63 5d 3b 0a 09  rray = ret[c];..
60760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
60770 20 20 20 20 66 6f 72 20 28 76 61 72 20 69 20 3d      for (var i =
60780 20 30 3b 20 69 20 3c 20 63 68 61 6e 6e 65 6c 44   0; i < channelD
60790 61 74 61 2e 6c 65 6e 67 74 68 3b 20 69 2b 2b 29  ata.length; i++)
607a0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
607b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 41              retA
607c0 72 72 61 79 5b 69 5d 20 3d 20 63 68 61 6e 6e 65  rray[i] = channe
607d0 6c 44 61 74 61 5b 69 5d 3b 0a 09 20 20 20 20 20  lData[i];..     
607e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
607f0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
60800 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20    }..           
60810 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   }..            
60820 69 66 20 28 72 65 74 2e 6c 65 6e 67 74 68 20 3d  if (ret.length =
60830 3d 3d 20 31 29 20 7b 0a 09 20 20 20 20 20 20 20  == 1) {..       
60840 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
60850 72 65 74 5b 30 5d 3b 0a 09 20 20 20 20 20 20 20  ret[0];..       
60860 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20       } else {.. 
60870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
60880 65 74 75 72 6e 20 72 65 74 3b 0a 09 20 20 20 20  eturn ret;..    
60890 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
608a0 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a 09 20 20     }..    };..  
608b0 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 75 74 20    /**... *  Cut 
608c0 61 20 73 75 62 73 65 63 74 69 6f 6e 20 6f 66 20  a subsection of 
608d0 74 68 65 20 61 72 72 61 79 20 61 6e 64 20 72 65  the array and re
608e0 74 75 72 6e 20 61 20 62 75 66 66 65 72 20 6f 66  turn a buffer of
608f0 20 74 68 65 0a 09 09 20 2a 20 20 73 75 62 73 65   the... *  subse
60900 63 74 69 6f 6e 2e 20 44 6f 65 73 20 6e 6f 74 20  ction. Does not 
60910 6d 6f 64 69 66 79 20 74 68 65 20 6f 72 69 67 69  modify the origi
60920 6e 61 6c 20 62 75 66 66 65 72 0a 09 09 20 2a 20  nal buffer... * 
60930 20 40 70 61 72 61 6d 20 7b 54 69 6d 65 7d 20 73   @param {Time} s
60940 74 61 72 74 20 54 68 65 20 74 69 6d 65 20 74 6f  tart The time to
60950 20 73 74 61 72 74 20 74 68 65 20 73 6c 69 63 65   start the slice
60960 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 54  ... *  @param {T
60970 69 6d 65 3d 7d 20 65 6e 64 20 54 68 65 20 65 6e  ime=} end The en
60980 64 20 74 69 6d 65 20 74 6f 20 73 6c 69 63 65 2e  d time to slice.
60990 20 49 66 20 6e 6f 6e 65 20 69 73 20 67 69 76 65   If none is give
609a0 6e 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20  n... *          
609b0 20 20 20 20 20 20 20 20 20 20 20 77 69 6c 6c 20             will 
609c0 64 65 66 61 75 6c 74 20 74 6f 20 74 68 65 20 65  default to the e
609d0 6e 64 20 6f 66 20 74 68 65 20 62 75 66 66 65 72  nd of the buffer
609e0 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 7b  ... *  @return {
609f0 54 6f 6e 65 2e 42 75 66 66 65 72 7d 20 74 68 69  Tone.Buffer} thi
60a00 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  s... */..    Ton
60a10 65 2e 42 75 66 66 65 72 2e 70 72 6f 74 6f 74 79  e.Buffer.prototy
60a20 70 65 2e 73 6c 69 63 65 20 3d 20 66 75 6e 63 74  pe.slice = funct
60a30 69 6f 6e 20 28 73 74 61 72 74 2c 20 65 6e 64 29  ion (start, end)
60a40 20 7b 0a 09 20 20 20 20 20 20 20 20 65 6e 64 20   {..        end 
60a50 3d 20 74 68 69 73 2e 64 65 66 61 75 6c 74 41 72  = this.defaultAr
60a60 67 28 65 6e 64 2c 20 74 68 69 73 2e 64 75 72 61  g(end, this.dura
60a70 74 69 6f 6e 29 3b 0a 09 20 20 20 20 20 20 20 20  tion);..        
60a80 76 61 72 20 73 74 61 72 74 53 61 6d 70 6c 65 73  var startSamples
60a90 20 3d 20 4d 61 74 68 2e 66 6c 6f 6f 72 28 74 68   = Math.floor(th
60aa0 69 73 2e 63 6f 6e 74 65 78 74 2e 73 61 6d 70 6c  is.context.sampl
60ab0 65 52 61 74 65 20 2a 20 74 68 69 73 2e 74 6f 53  eRate * this.toS
60ac0 65 63 6f 6e 64 73 28 73 74 61 72 74 29 29 3b 0a  econds(start));.
60ad0 09 20 20 20 20 20 20 20 20 76 61 72 20 65 6e 64  .        var end
60ae0 53 61 6d 70 6c 65 73 20 3d 20 4d 61 74 68 2e 66  Samples = Math.f
60af0 6c 6f 6f 72 28 74 68 69 73 2e 63 6f 6e 74 65 78  loor(this.contex
60b00 74 2e 73 61 6d 70 6c 65 52 61 74 65 20 2a 20 74  t.sampleRate * t
60b10 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28 65 6e  his.toSeconds(en
60b20 64 29 29 3b 0a 09 20 20 20 20 20 20 20 20 76 61  d));..        va
60b30 72 20 72 65 70 6c 61 63 65 6d 65 6e 74 20 3d 20  r replacement = 
60b40 5b 5d 3b 0a 09 20 20 20 20 20 20 20 20 66 6f 72  [];..        for
60b50 20 28 76 61 72 20 69 20 3d 20 30 3b 20 69 20 3c   (var i = 0; i <
60b60 20 74 68 69 73 2e 6e 75 6d 62 65 72 4f 66 43 68   this.numberOfCh
60b70 61 6e 6e 65 6c 73 3b 20 69 2b 2b 29 20 7b 0a 09  annels; i++) {..
60b80 20 20 20 20 20 20 20 20 20 20 20 20 72 65 70 6c              repl
60b90 61 63 65 6d 65 6e 74 5b 69 5d 20 3d 20 74 68 69  acement[i] = thi
60ba0 73 2e 74 6f 41 72 72 61 79 28 69 29 2e 73 6c 69  s.toArray(i).sli
60bb0 63 65 28 73 74 61 72 74 53 61 6d 70 6c 65 73 2c  ce(startSamples,
60bc0 20 65 6e 64 53 61 6d 70 6c 65 73 29 3b 0a 09 20   endSamples);.. 
60bd0 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
60be0 20 20 76 61 72 20 72 65 74 42 75 66 66 65 72 20    var retBuffer 
60bf0 3d 20 6e 65 77 20 54 6f 6e 65 2e 42 75 66 66 65  = new Tone.Buffe
60c00 72 28 29 2e 66 72 6f 6d 41 72 72 61 79 28 72 65  r().fromArray(re
60c10 70 6c 61 63 65 6d 65 6e 74 29 3b 0a 09 20 20 20  placement);..   
60c20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 74 42       return retB
60c30 75 66 66 65 72 3b 0a 09 20 20 20 20 7d 3b 0a 09  uffer;..    };..
60c40 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 52 65      /**... *  Re
60c50 76 65 72 73 65 20 74 68 65 20 62 75 66 66 65 72  verse the buffer
60c60 2e 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  .... *  @private
60c70 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 7b  ... *  @return {
60c80 54 6f 6e 65 2e 42 75 66 66 65 72 7d 20 74 68 69  Tone.Buffer} thi
60c90 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  s... */..    Ton
60ca0 65 2e 42 75 66 66 65 72 2e 70 72 6f 74 6f 74 79  e.Buffer.prototy
60cb0 70 65 2e 5f 72 65 76 65 72 73 65 20 3d 20 66 75  pe._reverse = fu
60cc0 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
60cd0 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 6c 6f       if (this.lo
60ce0 61 64 65 64 29 20 7b 0a 09 20 20 20 20 20 20 20  aded) {..       
60cf0 20 20 20 20 20 66 6f 72 20 28 76 61 72 20 69 20       for (var i 
60d00 3d 20 30 3b 20 69 20 3c 20 74 68 69 73 2e 5f 62  = 0; i < this._b
60d10 75 66 66 65 72 2e 6e 75 6d 62 65 72 4f 66 43 68  uffer.numberOfCh
60d20 61 6e 6e 65 6c 73 3b 20 69 2b 2b 29 20 7b 0a 09  annels; i++) {..
60d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
60d40 41 72 72 61 79 2e 70 72 6f 74 6f 74 79 70 65 2e  Array.prototype.
60d50 72 65 76 65 72 73 65 2e 63 61 6c 6c 28 74 68 69  reverse.call(thi
60d60 73 2e 5f 62 75 66 66 65 72 2e 67 65 74 43 68 61  s._buffer.getCha
60d70 6e 6e 65 6c 44 61 74 61 28 69 29 29 3b 0a 09 20  nnelData(i));.. 
60d80 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20             }..  
60d90 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
60da0 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20   return this;.. 
60db0 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09     };..    /**..
60dc0 09 20 2a 20 52 65 76 65 72 73 65 20 74 68 65 20  . * Reverse the 
60dd0 62 75 66 66 65 72 2e 0a 09 09 20 2a 20 40 6d 65  buffer.... * @me
60de0 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 42 75 66 66  mberOf Tone.Buff
60df0 65 72 23 0a 09 09 20 2a 20 40 74 79 70 65 20 7b  er#... * @type {
60e00 42 6f 6f 6c 65 61 6e 7d 0a 09 09 20 2a 20 40 6e  Boolean}... * @n
60e10 61 6d 65 20 72 65 76 65 72 73 65 0a 09 09 20 2a  ame reverse... *
60e20 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65  /..    Object.de
60e30 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e  fineProperty(Ton
60e40 65 2e 42 75 66 66 65 72 2e 70 72 6f 74 6f 74 79  e.Buffer.prototy
60e50 70 65 2c 20 27 72 65 76 65 72 73 65 27 2c 20 7b  pe, 'reverse', {
60e60 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66  ..        get: f
60e70 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
60e80 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
60e90 20 74 68 69 73 2e 5f 72 65 76 65 72 73 65 64 3b   this._reversed;
60ea0 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20  ..        },..  
60eb0 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74        set: funct
60ec0 69 6f 6e 20 28 72 65 76 29 20 7b 0a 09 20 20 20  ion (rev) {..   
60ed0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69           if (thi
60ee0 73 2e 5f 72 65 76 65 72 73 65 64 20 21 3d 3d 20  s._reversed !== 
60ef0 72 65 76 29 20 7b 0a 09 20 20 20 20 20 20 20 20  rev) {..        
60f00 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 72 65          this._re
60f10 76 65 72 73 65 64 20 3d 20 72 65 76 3b 0a 09 20  versed = rev;.. 
60f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
60f30 68 69 73 2e 5f 72 65 76 65 72 73 65 28 29 3b 0a  his._reverse();.
60f40 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09  .            }..
60f50 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d          }..    }
60f60 29 3b 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  );..    ////////
60f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60fb0 2f 2f 2f 0a 09 20 20 20 20 2f 2f 20 53 54 41 54  ///..    // STAT
60fc0 49 43 20 4d 45 54 48 4f 44 53 0a 09 20 20 20 20  IC METHODS..    
60fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 09 20 20 20  ///////////..   
61020 20 2f 2f 73 74 61 74 69 63 61 6c 6c 79 20 69 6e   //statically in
61030 68 65 72 69 74 73 20 45 6d 69 74 74 65 72 20 6d  herits Emitter m
61040 65 74 68 6f 64 73 0a 09 20 20 20 20 54 6f 6e 65  ethods..    Tone
61050 2e 45 6d 69 74 74 65 72 2e 6d 69 78 69 6e 28 54  .Emitter.mixin(T
61060 6f 6e 65 2e 42 75 66 66 65 72 29 3b 0a 09 20 20  one.Buffer);..  
61070 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 74 68 65 20    /**... *  the 
61080 73 74 61 74 69 63 20 71 75 65 75 65 20 66 6f 72  static queue for
61090 20 61 6c 6c 20 6f 66 20 74 68 65 20 78 68 72 20   all of the xhr 
610a0 72 65 71 75 65 73 74 73 0a 09 09 20 2a 20 20 40  requests... *  @
610b0 74 79 70 65 20 7b 41 72 72 61 79 7d 0a 09 09 20  type {Array}... 
610c0 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a  *  @private... *
610d0 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 42 75 66 66  /..    Tone.Buff
610e0 65 72 2e 5f 64 6f 77 6e 6c 6f 61 64 51 75 65 75  er._downloadQueu
610f0 65 20 3d 20 5b 5d 3b 0a 09 20 20 20 20 2f 2a 2a  e = [];..    /**
61100 0a 09 09 20 2a 20 20 74 68 65 20 74 6f 74 61 6c  ... *  the total
61110 20 6e 75 6d 62 65 72 20 6f 66 20 64 6f 77 6e 6c   number of downl
61120 6f 61 64 73 0a 09 09 20 2a 20 20 40 74 79 70 65  oads... *  @type
61130 20 7b 4e 75 6d 62 65 72 7d 0a 09 09 20 2a 20 20   {Number}... *  
61140 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09  @private... */..
61150 20 20 20 20 54 6f 6e 65 2e 42 75 66 66 65 72 2e      Tone.Buffer.
61160 5f 63 75 72 72 65 6e 74 44 6f 77 6e 6c 6f 61 64  _currentDownload
61170 73 20 3d 20 30 3b 0a 09 20 20 20 20 2f 2a 2a 0a  s = 0;..    /**.
61180 09 09 20 2a 20 20 41 20 70 61 74 68 20 77 68 69  .. *  A path whi
61190 63 68 20 69 73 20 70 72 65 66 69 78 65 64 20 62  ch is prefixed b
611a0 65 66 6f 72 65 20 65 76 65 72 79 20 75 72 6c 2e  efore every url.
611b0 0a 09 09 20 2a 20 20 40 74 79 70 65 20 20 7b 53  ... *  @type  {S
611c0 74 72 69 6e 67 7d 0a 09 09 20 2a 20 20 40 73 74  tring}... *  @st
611d0 61 74 69 63 0a 09 09 20 2a 2f 0a 09 20 20 20 20  atic... */..    
611e0 54 6f 6e 65 2e 42 75 66 66 65 72 2e 62 61 73 65  Tone.Buffer.base
611f0 55 72 6c 20 3d 20 27 27 3b 0a 09 20 20 20 20 2f  Url = '';..    /
61200 2a 2a 0a 09 09 20 2a 20 20 4c 6f 61 64 73 20 61  **... *  Loads a
61210 20 75 72 6c 20 75 73 69 6e 67 20 58 4d 4c 48 74   url using XMLHt
61220 74 70 52 65 71 75 65 73 74 2e 0a 09 09 20 2a 20  tpRequest.... * 
61230 20 40 70 61 72 61 6d 20 7b 53 74 72 69 6e 67 7d   @param {String}
61240 20 75 72 6c 0a 09 09 20 2a 20 20 40 70 61 72 61   url... *  @para
61250 6d 20 7b 46 75 6e 63 74 69 6f 6e 7d 20 6f 6e 6c  m {Function} onl
61260 6f 61 64 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  oad... *  @param
61270 20 7b 46 75 6e 63 74 69 6f 6e 7d 20 6f 6e 65 72   {Function} oner
61280 72 6f 72 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  ror... *  @param
61290 20 7b 46 75 6e 63 74 69 6f 6e 7d 20 6f 6e 70 72   {Function} onpr
612a0 6f 67 72 65 73 73 0a 09 09 20 2a 20 20 40 72 65  ogress... *  @re
612b0 74 75 72 6e 20 7b 58 4d 4c 48 74 74 70 52 65 71  turn {XMLHttpReq
612c0 75 65 73 74 7d 0a 09 09 20 2a 2f 0a 09 20 20 20  uest}... */..   
612d0 20 54 6f 6e 65 2e 42 75 66 66 65 72 2e 6c 6f 61   Tone.Buffer.loa
612e0 64 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 75 72  d = function (ur
612f0 6c 2c 20 6f 6e 6c 6f 61 64 2c 20 6f 6e 65 72 72  l, onload, onerr
61300 6f 72 29 20 7b 0a 09 20 20 20 20 20 20 20 20 2f  or) {..        /
61310 2f 64 65 66 61 75 6c 74 0a 09 20 20 20 20 20 20  /default..      
61320 20 20 6f 6e 6c 6f 61 64 20 3d 20 6f 6e 6c 6f 61    onload = onloa
61330 64 20 7c 7c 20 54 6f 6e 65 2e 6e 6f 4f 70 3b 0a  d || Tone.noOp;.
61340 09 20 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f  .        functio
61350 6e 20 6f 6e 45 72 72 6f 72 28 65 29 20 7b 0a 09  n onError(e) {..
61360 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
61370 6f 6e 65 72 72 6f 72 29 20 7b 0a 09 20 20 20 20  onerror) {..    
61380 20 20 20 20 20 20 20 20 20 20 20 20 6f 6e 65 72              oner
61390 72 6f 72 28 65 29 3b 0a 09 20 20 20 20 20 20 20  ror(e);..       
613a0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20       } else {.. 
613b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
613c0 68 72 6f 77 20 6e 65 77 20 45 72 72 6f 72 28 65  hrow new Error(e
613d0 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
613e0 7d 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20  }..        }..  
613f0 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6f        function o
61400 6e 50 72 6f 67 72 65 73 73 28 29 20 7b 0a 09 20  nProgress() {.. 
61410 20 20 20 20 20 20 20 20 20 20 20 2f 2f 63 61 6c             //cal
61420 63 75 6c 61 74 65 20 74 68 65 20 70 72 6f 67 72  culate the progr
61430 65 73 73 0a 09 20 20 20 20 20 20 20 20 20 20 20  ess..           
61440 20 76 61 72 20 74 6f 74 61 6c 50 72 6f 67 72 65   var totalProgre
61450 73 73 20 3d 20 30 3b 0a 09 20 20 20 20 20 20 20  ss = 0;..       
61460 20 20 20 20 20 66 6f 72 20 28 76 61 72 20 69 20       for (var i 
61470 3d 20 30 3b 20 69 20 3c 20 54 6f 6e 65 2e 42 75  = 0; i < Tone.Bu
61480 66 66 65 72 2e 5f 64 6f 77 6e 6c 6f 61 64 51 75  ffer._downloadQu
61490 65 75 65 2e 6c 65 6e 67 74 68 3b 20 69 2b 2b 29  eue.length; i++)
614a0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
614b0 20 20 20 20 74 6f 74 61 6c 50 72 6f 67 72 65 73      totalProgres
614c0 73 20 2b 3d 20 54 6f 6e 65 2e 42 75 66 66 65 72  s += Tone.Buffer
614d0 2e 5f 64 6f 77 6e 6c 6f 61 64 51 75 65 75 65 5b  ._downloadQueue[
614e0 69 5d 2e 70 72 6f 67 72 65 73 73 3b 0a 09 20 20  i].progress;..  
614f0 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20            }..   
61500 20 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 42 75           Tone.Bu
61510 66 66 65 72 2e 65 6d 69 74 28 27 70 72 6f 67 72  ffer.emit('progr
61520 65 73 73 27 2c 20 74 6f 74 61 6c 50 72 6f 67 72  ess', totalProgr
61530 65 73 73 20 2f 20 54 6f 6e 65 2e 42 75 66 66 65  ess / Tone.Buffe
61540 72 2e 5f 64 6f 77 6e 6c 6f 61 64 51 75 65 75 65  r._downloadQueue
61550 2e 6c 65 6e 67 74 68 29 3b 0a 09 20 20 20 20 20  .length);..     
61560 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 76 61     }..        va
61570 72 20 72 65 71 75 65 73 74 20 3d 20 6e 65 77 20  r request = new 
61580 58 4d 4c 48 74 74 70 52 65 71 75 65 73 74 28 29  XMLHttpRequest()
61590 3b 0a 09 20 20 20 20 20 20 20 20 72 65 71 75 65  ;..        reque
615a0 73 74 2e 6f 70 65 6e 28 27 47 45 54 27 2c 20 54  st.open('GET', T
615b0 6f 6e 65 2e 42 75 66 66 65 72 2e 62 61 73 65 55  one.Buffer.baseU
615c0 72 6c 20 2b 20 75 72 6c 2c 20 74 72 75 65 29 3b  rl + url, true);
615d0 0a 09 20 20 20 20 20 20 20 20 72 65 71 75 65 73  ..        reques
615e0 74 2e 72 65 73 70 6f 6e 73 65 54 79 70 65 20 3d  t.responseType =
615f0 20 27 61 72 72 61 79 62 75 66 66 65 72 27 3b 0a   'arraybuffer';.
61600 09 20 20 20 20 20 20 20 20 2f 2f 73 74 61 72 74  .        //start
61610 20 6f 75 74 20 61 73 20 30 0a 09 20 20 20 20 20   out as 0..     
61620 20 20 20 72 65 71 75 65 73 74 2e 70 72 6f 67 72     request.progr
61630 65 73 73 20 3d 20 30 3b 0a 09 20 20 20 20 20 20  ess = 0;..      
61640 20 20 54 6f 6e 65 2e 42 75 66 66 65 72 2e 5f 63    Tone.Buffer._c
61650 75 72 72 65 6e 74 44 6f 77 6e 6c 6f 61 64 73 2b  urrentDownloads+
61660 2b 3b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65  +;..        Tone
61670 2e 42 75 66 66 65 72 2e 5f 64 6f 77 6e 6c 6f 61  .Buffer._downloa
61680 64 51 75 65 75 65 2e 70 75 73 68 28 72 65 71 75  dQueue.push(requ
61690 65 73 74 29 3b 0a 09 20 20 20 20 20 20 20 20 72  est);..        r
616a0 65 71 75 65 73 74 2e 61 64 64 45 76 65 6e 74 4c  equest.addEventL
616b0 69 73 74 65 6e 65 72 28 27 6c 6f 61 64 27 2c 20  istener('load', 
616c0 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
616d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
616e0 65 71 75 65 73 74 2e 73 74 61 74 75 73 20 3d 3d  equest.status ==
616f0 3d 20 32 30 30 29 20 7b 0a 09 20 20 20 20 20 20  = 200) {..      
61700 20 20 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 63            Tone.c
61710 6f 6e 74 65 78 74 2e 64 65 63 6f 64 65 41 75 64  ontext.decodeAud
61720 69 6f 44 61 74 61 28 72 65 71 75 65 73 74 2e 72  ioData(request.r
61730 65 73 70 6f 6e 73 65 2c 20 66 75 6e 63 74 69 6f  esponse, functio
61740 6e 20 28 62 75 66 66 29 20 7b 0a 09 20 20 20 20  n (buff) {..    
61750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
61760 72 65 71 75 65 73 74 2e 70 72 6f 67 72 65 73 73  request.progress
61770 20 3d 20 31 3b 0a 09 20 20 20 20 20 20 20 20 20   = 1;..         
61780 20 20 20 20 20 20 20 20 20 20 20 6f 6e 50 72 6f             onPro
61790 67 72 65 73 73 28 29 3b 0a 09 20 20 20 20 20 20  gress();..      
617a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 6e                on
617b0 6c 6f 61 64 28 62 75 66 66 29 3b 0a 09 20 20 20  load(buff);..   
617c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
617d0 20 54 6f 6e 65 2e 42 75 66 66 65 72 2e 5f 63 75   Tone.Buffer._cu
617e0 72 72 65 6e 74 44 6f 77 6e 6c 6f 61 64 73 2d 2d  rrentDownloads--
617f0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
61800 20 20 20 20 20 20 20 69 66 20 28 54 6f 6e 65 2e         if (Tone.
61810 42 75 66 66 65 72 2e 5f 63 75 72 72 65 6e 74 44  Buffer._currentD
61820 6f 77 6e 6c 6f 61 64 73 20 3d 3d 3d 20 30 29 20  ownloads === 0) 
61830 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
61840 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 63 6c             // cl
61850 65 61 72 20 74 68 65 20 64 6f 77 6e 6c 6f 61 64  ear the download
61860 73 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
61870 20 20 20 20 20 20 20 20 20 20 20 54 6f 6e 65 2e             Tone.
61880 42 75 66 66 65 72 2e 5f 64 6f 77 6e 6c 6f 61 64  Buffer._download
61890 51 75 65 75 65 20 3d 20 5b 5d 3b 0a 09 20 20 20  Queue = [];..   
618a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
618b0 20 20 20 20 20 2f 2f 65 6d 69 74 20 74 68 65 20       //emit the 
618c0 65 76 65 6e 74 20 61 74 20 74 68 65 20 65 6e 64  event at the end
618d0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
618e0 20 20 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 42            Tone.B
618f0 75 66 66 65 72 2e 65 6d 69 74 28 27 6c 6f 61 64  uffer.emit('load
61900 27 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ');..           
61910 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20           }..    
61920 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 20 66              }, f
61930 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
61940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
61950 20 20 6f 6e 45 72 72 6f 72 28 27 54 6f 6e 65 2e    onError('Tone.
61960 42 75 66 66 65 72 3a 20 63 6f 75 6c 64 20 6e 6f  Buffer: could no
61970 74 20 64 65 63 6f 64 65 20 61 75 64 69 6f 20 64  t decode audio d
61980 61 74 61 3a 20 27 20 2b 20 75 72 6c 29 3b 0a 09  ata: ' + url);..
61990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
619a0 7d 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  });..           
619b0 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20   } else {..     
619c0 20 20 20 20 20 20 20 20 20 20 20 6f 6e 45 72 72             onErr
619d0 6f 72 28 27 54 6f 6e 65 2e 42 75 66 66 65 72 3a  or('Tone.Buffer:
619e0 20 63 6f 75 6c 64 20 6e 6f 74 20 6c 6f 63 61 74   could not locat
619f0 65 20 66 69 6c 65 3a 20 27 20 2b 20 75 72 6c 29  e file: ' + url)
61a00 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
61a10 0a 09 20 20 20 20 20 20 20 20 7d 29 3b 0a 09 20  ..        });.. 
61a20 20 20 20 20 20 20 20 72 65 71 75 65 73 74 2e 61         request.a
61a30 64 64 45 76 65 6e 74 4c 69 73 74 65 6e 65 72 28  ddEventListener(
61a40 27 65 72 72 6f 72 27 2c 20 6f 6e 45 72 72 6f 72  'error', onError
61a50 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 71 75  );..        requ
61a60 65 73 74 2e 61 64 64 45 76 65 6e 74 4c 69 73 74  est.addEventList
61a70 65 6e 65 72 28 27 70 72 6f 67 72 65 73 73 27 2c  ener('progress',
61a80 20 66 75 6e 63 74 69 6f 6e 20 28 65 76 65 6e 74   function (event
61a90 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
61aa0 20 69 66 20 28 65 76 65 6e 74 2e 6c 65 6e 67 74   if (event.lengt
61ab0 68 43 6f 6d 70 75 74 61 62 6c 65 29 20 7b 0a 09  hComputable) {..
61ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
61ad0 2f 2f 6f 6e 6c 79 20 67 6f 20 74 6f 20 39 35 25  //only go to 95%
61ae0 2c 20 74 68 65 20 6c 61 73 74 20 35 25 20 69 73  , the last 5% is
61af0 20 77 68 65 6e 20 74 68 65 20 61 75 64 69 6f 20   when the audio 
61b00 69 73 20 64 65 63 6f 64 65 64 0a 09 20 20 20 20  is decoded..    
61b10 20 20 20 20 20 20 20 20 20 20 20 20 72 65 71 75              requ
61b20 65 73 74 2e 70 72 6f 67 72 65 73 73 20 3d 20 65  est.progress = e
61b30 76 65 6e 74 2e 6c 6f 61 64 65 64 20 2f 20 65 76  vent.loaded / ev
61b40 65 6e 74 2e 74 6f 74 61 6c 20 2a 20 30 2e 39 35  ent.total * 0.95
61b50 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
61b60 20 20 20 6f 6e 50 72 6f 67 72 65 73 73 28 29 3b     onProgress();
61b70 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ..            }.
61b80 09 20 20 20 20 20 20 20 20 7d 29 3b 0a 09 20 20  .        });..  
61b90 20 20 20 20 20 20 72 65 71 75 65 73 74 2e 73 65        request.se
61ba0 6e 64 28 29 3b 0a 09 20 20 20 20 20 20 20 20 72  nd();..        r
61bb0 65 74 75 72 6e 20 72 65 71 75 65 73 74 3b 0a 09  eturn request;..
61bc0 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
61bd0 09 09 20 2a 20 20 53 74 6f 70 20 61 6c 6c 20 6f  .. *  Stop all o
61be0 66 20 74 68 65 20 64 6f 77 6e 6c 6f 61 64 73 20  f the downloads 
61bf0 69 6e 20 70 72 6f 67 72 65 73 73 0a 09 09 20 2a  in progress... *
61c00 20 20 40 72 65 74 75 72 6e 20 7b 54 6f 6e 65 2e    @return {Tone.
61c10 42 75 66 66 65 72 7d 0a 09 09 20 2a 2f 0a 09 20  Buffer}... */.. 
61c20 20 20 20 54 6f 6e 65 2e 42 75 66 66 65 72 2e 73     Tone.Buffer.s
61c30 74 6f 70 44 6f 77 6e 6c 6f 61 64 73 20 3d 20 66  topDownloads = f
61c40 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
61c50 20 20 20 20 20 20 54 6f 6e 65 2e 42 75 66 66 65        Tone.Buffe
61c60 72 2e 5f 64 6f 77 6e 6c 6f 61 64 51 75 65 75 65  r._downloadQueue
61c70 2e 66 6f 72 45 61 63 68 28 66 75 6e 63 74 69 6f  .forEach(functio
61c80 6e 20 28 72 65 71 75 65 73 74 29 20 7b 0a 09 20  n (request) {.. 
61c90 20 20 20 20 20 20 20 20 20 20 20 72 65 71 75 65             reque
61ca0 73 74 2e 61 62 6f 72 74 28 29 3b 0a 09 20 20 20  st.abort();..   
61cb0 20 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 20 20       });..      
61cc0 20 20 54 6f 6e 65 2e 42 75 66 66 65 72 2e 5f 63    Tone.Buffer._c
61cd0 75 72 72 65 6e 74 44 6f 77 6e 6c 6f 61 64 73 20  urrentDownloads 
61ce0 3d 20 30 3b 0a 09 20 20 20 20 20 20 20 20 72 65  = 0;..        re
61cf0 74 75 72 6e 20 54 6f 6e 65 2e 42 75 66 66 65 72  turn Tone.Buffer
61d00 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  ;..    };..    /
61d10 2a 2a 0a 09 09 20 2a 20 20 43 68 65 63 6b 73 20  **... *  Checks 
61d20 61 20 75 72 6c 27 73 20 65 78 74 65 6e 73 69 6f  a url's extensio
61d30 6e 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20  n to see if the 
61d40 63 75 72 72 65 6e 74 20 62 72 6f 77 73 65 72 20  current browser 
61d50 63 61 6e 20 70 6c 61 79 20 74 68 61 74 20 66 69  can play that fi
61d60 6c 65 20 74 79 70 65 2e 0a 09 09 20 2a 20 20 40  le type.... *  @
61d70 70 61 72 61 6d 20 7b 53 74 72 69 6e 67 7d 20 75  param {String} u
61d80 72 6c 20 54 68 65 20 75 72 6c 2f 65 78 74 65 6e  rl The url/exten
61d90 73 69 6f 6e 20 74 6f 20 74 65 73 74 0a 09 09 20  sion to test... 
61da0 2a 20 20 40 72 65 74 75 72 6e 20 7b 42 6f 6f 6c  *  @return {Bool
61db0 65 61 6e 7d 20 49 66 20 74 68 65 20 66 69 6c 65  ean} If the file
61dc0 20 65 78 74 65 6e 73 69 6f 6e 20 63 61 6e 20 62   extension can b
61dd0 65 20 70 6c 61 79 65 64 0a 09 09 20 2a 20 20 40  e played... *  @
61de0 73 74 61 74 69 63 0a 09 09 20 2a 20 20 40 65 78  static... *  @ex
61df0 61 6d 70 6c 65 0a 09 09 20 2a 20 54 6f 6e 65 2e  ample... * Tone.
61e00 42 75 66 66 65 72 2e 73 75 70 70 6f 72 74 73 54  Buffer.supportsT
61e10 79 70 65 28 22 77 61 76 22 29 3b 20 2f 2f 72 65  ype("wav"); //re
61e20 74 75 72 6e 73 20 74 72 75 65 0a 09 09 20 2a 20  turns true... * 
61e30 54 6f 6e 65 2e 42 75 66 66 65 72 2e 73 75 70 70  Tone.Buffer.supp
61e40 6f 72 74 73 54 79 70 65 28 22 70 61 74 68 2f 74  ortsType("path/t
61e50 6f 2f 66 69 6c 65 2e 77 61 76 22 29 3b 20 2f 2f  o/file.wav"); //
61e60 72 65 74 75 72 6e 73 20 74 72 75 65 0a 09 09 20  returns true... 
61e70 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 42 75 66  */..    Tone.Buf
61e80 66 65 72 2e 73 75 70 70 6f 72 74 73 54 79 70 65  fer.supportsType
61e90 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 75 72 6c   = function (url
61ea0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72  ) {..        var
61eb0 20 65 78 74 65 6e 73 69 6f 6e 20 3d 20 75 72 6c   extension = url
61ec0 2e 73 70 6c 69 74 28 27 2e 27 29 3b 0a 09 20 20  .split('.');..  
61ed0 20 20 20 20 20 20 65 78 74 65 6e 73 69 6f 6e 20        extension 
61ee0 3d 20 65 78 74 65 6e 73 69 6f 6e 5b 65 78 74 65  = extension[exte
61ef0 6e 73 69 6f 6e 2e 6c 65 6e 67 74 68 20 2d 20 31  nsion.length - 1
61f00 5d 3b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20  ];..        var 
61f10 72 65 73 70 6f 6e 73 65 20 3d 20 64 6f 63 75 6d  response = docum
61f20 65 6e 74 2e 63 72 65 61 74 65 45 6c 65 6d 65 6e  ent.createElemen
61f30 74 28 27 61 75 64 69 6f 27 29 2e 63 61 6e 50 6c  t('audio').canPl
61f40 61 79 54 79 70 65 28 27 61 75 64 69 6f 2f 27 20  ayType('audio/' 
61f50 2b 20 65 78 74 65 6e 73 69 6f 6e 29 3b 0a 09 20  + extension);.. 
61f60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
61f70 73 70 6f 6e 73 65 20 21 3d 3d 20 27 27 3b 0a 09  sponse !== '';..
61f80 20 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74 75      };..    retu
61f90 72 6e 20 54 6f 6e 65 2e 42 75 66 66 65 72 3b 0a  rn Tone.Buffer;.
61fa0 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e  .});..Module(fun
61fb0 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09  ction (Tone) {..
61fc0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63      /**... *  @c
61fd0 6c 61 73 73 20 41 20 64 61 74 61 20 73 74 72 75  lass A data stru
61fe0 63 74 75 72 65 20 66 6f 72 20 68 6f 6c 64 69 6e  cture for holdin
61ff0 67 20 6d 75 6c 74 69 70 6c 65 20 62 75 66 66 65  g multiple buffe
62000 72 73 2e 0a 09 09 20 2a 20 20 0a 09 09 20 2a 20  rs.... *  ... * 
62010 20 40 70 61 72 61 6d 20 20 7b 4f 62 6a 65 63 74   @param  {Object
62020 7c 41 72 72 61 79 7d 20 20 20 20 75 72 6c 73 20  |Array}    urls 
62030 20 20 20 20 20 41 6e 20 6f 62 6a 65 63 74 20 6c       An object l
62040 69 74 65 72 61 6c 20 6f 72 20 61 72 72 61 79 0a  iteral or array.
62050 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
62060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
62070 20 20 20 20 20 20 20 20 20 20 6f 66 20 75 72 6c            of url
62080 73 20 74 6f 20 6c 6f 61 64 2e 0a 09 09 20 2a 20  s to load.... * 
62090 20 40 70 61 72 61 6d 20 20 7b 46 75 6e 63 74 69   @param  {Functi
620a0 6f 6e 3d 7d 20 20 63 61 6c 6c 62 61 63 6b 20 20  on=}  callback  
620b0 54 68 65 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20  The callback to 
620c0 69 6e 76 6f 6b 65 20 77 68 65 6e 0a 09 09 20 2a  invoke when... *
620d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
620e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
620f0 20 74 68 65 20 62 75 66 66 65 72 73 20 61 72 65   the buffers are
62100 20 6c 6f 61 64 65 64 2e 20 0a 09 09 20 2a 20 20   loaded. ... *  
62110 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65 7d 0a  @extends {Tone}.
62120 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09  .. *  @example..
62130 09 20 2a 20 2f 2f 6c 6f 61 64 20 61 20 77 68 6f  . * //load a who
62140 6c 65 20 62 61 6e 6b 20 6f 66 20 70 69 61 6e 6f  le bank of piano
62150 20 73 61 6d 70 6c 65 73 0a 09 09 20 2a 20 76 61   samples... * va
62160 72 20 70 69 61 6e 6f 53 61 6d 70 6c 65 73 20 3d  r pianoSamples =
62170 20 6e 65 77 20 54 6f 6e 65 2e 42 75 66 66 65 72   new Tone.Buffer
62180 73 28 7b 0a 09 09 20 2a 20 09 22 43 34 22 20 3a  s({... * ."C4" :
62190 20 22 70 61 74 68 2f 74 6f 2f 43 34 2e 6d 70 33   "path/to/C4.mp3
621a0 22 0a 09 09 20 2a 20 09 22 43 23 34 22 20 3a 20  "... * ."C#4" : 
621b0 22 70 61 74 68 2f 74 6f 2f 43 23 34 2e 6d 70 33  "path/to/C#4.mp3
621c0 22 0a 09 09 20 2a 20 09 22 44 34 22 20 3a 20 22  "... * ."D4" : "
621d0 70 61 74 68 2f 74 6f 2f 44 34 2e 6d 70 33 22 0a  path/to/D4.mp3".
621e0 09 09 20 2a 20 09 22 44 23 34 22 20 3a 20 22 70  .. * ."D#4" : "p
621f0 61 74 68 2f 74 6f 2f 44 23 34 2e 6d 70 33 22 0a  ath/to/D#4.mp3".
62200 09 09 20 2a 20 09 2e 2e 2e 0a 09 09 20 2a 20 7d  .. * ....... * }
62210 2c 20 66 75 6e 63 74 69 6f 6e 28 29 7b 0a 09 09  , function(){...
62220 20 2a 20 09 2f 2f 70 6c 61 79 20 6f 6e 65 20 6f   * .//play one o
62230 66 20 74 68 65 20 73 61 6d 70 6c 65 73 20 77 68  f the samples wh
62240 65 6e 20 74 68 65 79 20 61 6c 6c 20 6c 6f 61 64  en they all load
62250 0a 09 09 20 2a 20 09 70 6c 61 79 65 72 2e 62 75  ... * .player.bu
62260 66 66 65 72 20 3d 20 70 69 61 6e 6f 53 61 6d 70  ffer = pianoSamp
62270 6c 65 73 2e 67 65 74 28 22 43 34 22 29 3b 0a 09  les.get("C4");..
62280 09 20 2a 20 09 70 6c 61 79 65 72 2e 73 74 61 72  . * .player.star
62290 74 28 29 3b 0a 09 09 20 2a 20 7d 29 3b 0a 09 09  t();... * });...
622a0 20 2a 20 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54   * ... */..    T
622b0 6f 6e 65 2e 42 75 66 66 65 72 73 20 3d 20 66 75  one.Buffers = fu
622c0 6e 63 74 69 6f 6e 20 28 75 72 6c 73 2c 20 6f 6e  nction (urls, on
622d0 6c 6f 61 64 2c 20 62 61 73 65 55 72 6c 29 20 7b  load, baseUrl) {
622e0 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
622f0 09 20 2a 20 20 41 6c 6c 20 6f 66 20 74 68 65 20  . *  All of the 
62300 62 75 66 66 65 72 73 0a 09 09 09 20 2a 20 20 40  buffers.... *  @
62310 74 79 70 65 20 20 7b 4f 62 6a 65 63 74 7d 0a 09  type  {Object}..
62320 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
62330 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
62340 68 69 73 2e 5f 62 75 66 66 65 72 73 20 3d 20 7b  his._buffers = {
62350 7d 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  };..        /**.
62360 09 09 09 20 2a 20 20 41 20 70 61 74 68 20 77 68  ... *  A path wh
62370 69 63 68 20 69 73 20 70 72 65 66 69 78 65 64 20  ich is prefixed 
62380 62 65 66 6f 72 65 20 65 76 65 72 79 20 75 72 6c  before every url
62390 2e 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 20  ..... *  @type  
623a0 7b 53 74 72 69 6e 67 7d 0a 09 09 09 20 2a 2f 0a  {String}.... */.
623b0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 62 61  .        this.ba
623c0 73 65 55 72 6c 20 3d 20 74 68 69 73 2e 64 65 66  seUrl = this.def
623d0 61 75 6c 74 41 72 67 28 62 61 73 65 55 72 6c 2c  aultArg(baseUrl,
623e0 20 27 27 29 3b 0a 09 20 20 20 20 20 20 20 20 75   '');..        u
623f0 72 6c 73 20 3d 20 74 68 69 73 2e 5f 66 6c 61 74  rls = this._flat
62400 74 65 6e 55 72 6c 73 28 75 72 6c 73 29 3b 0a 09  tenUrls(urls);..
62410 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 6f          this._lo
62420 61 64 69 6e 67 43 6f 75 6e 74 20 3d 20 30 3b 0a  adingCount = 0;.
62430 09 20 20 20 20 20 20 20 20 2f 2f 61 64 64 20 65  .        //add e
62440 61 63 68 20 6f 6e 65 0a 09 20 20 20 20 20 20 20  ach one..       
62450 20 66 6f 72 20 28 76 61 72 20 6b 65 79 20 69 6e   for (var key in
62460 20 75 72 6c 73 29 20 7b 0a 09 20 20 20 20 20 20   urls) {..      
62470 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 6f 61 64        this._load
62480 69 6e 67 43 6f 75 6e 74 2b 2b 3b 0a 09 20 20 20  ingCount++;..   
62490 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 61 64           this.ad
624a0 64 28 6b 65 79 2c 20 75 72 6c 73 5b 6b 65 79 5d  d(key, urls[key]
624b0 2c 20 74 68 69 73 2e 5f 62 75 66 66 65 72 4c 6f  , this._bufferLo
624c0 61 64 65 64 2e 62 69 6e 64 28 74 68 69 73 2c 20  aded.bind(this, 
624d0 6f 6e 6c 6f 61 64 29 29 3b 0a 09 20 20 20 20 20  onload));..     
624e0 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a 09 20 20     }..    };..  
624f0 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f    Tone.extend(To
62500 6e 65 2e 42 75 66 66 65 72 73 29 3b 0a 09 20 20  ne.Buffers);..  
62510 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 72 75 65    /**... *  True
62520 20 69 66 20 74 68 65 20 62 75 66 66 65 72 73 20   if the buffers 
62530 6f 62 6a 65 63 74 20 68 61 73 20 61 20 62 75 66  object has a buf
62540 66 65 72 20 62 79 20 74 68 61 74 20 6e 61 6d 65  fer by that name
62550 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20  .... *  @param  
62560 7b 53 74 72 69 6e 67 7c 4e 75 6d 62 65 72 7d 20  {String|Number} 
62570 20 6e 61 6d 65 20 20 54 68 65 20 6b 65 79 20 6f   name  The key o
62580 72 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 0a  r index of the .
62590 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
625a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
625b0 20 20 20 20 20 62 75 66 66 65 72 2e 0a 09 09 20       buffer.... 
625c0 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 42 6f 6f  *  @return  {Boo
625d0 6c 65 61 6e 7d 0a 09 09 20 2a 2f 0a 09 20 20 20  lean}... */..   
625e0 20 54 6f 6e 65 2e 42 75 66 66 65 72 73 2e 70 72   Tone.Buffers.pr
625f0 6f 74 6f 74 79 70 65 2e 68 61 73 20 3d 20 66 75  ototype.has = fu
62600 6e 63 74 69 6f 6e 20 28 6e 61 6d 65 29 20 7b 0a  nction (name) {.
62610 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
62620 74 68 69 73 2e 5f 62 75 66 66 65 72 73 2e 68 61  this._buffers.ha
62630 73 4f 77 6e 50 72 6f 70 65 72 74 79 28 6e 61 6d  sOwnProperty(nam
62640 65 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  e);..    };..   
62650 20 2f 2a 2a 0a 09 09 20 2a 20 20 47 65 74 20 61   /**... *  Get a
62660 20 62 75 66 66 65 72 20 62 79 20 6e 61 6d 65 2e   buffer by name.
62670 20 49 66 20 61 6e 20 61 72 72 61 79 20 77 61 73   If an array was
62680 20 6c 6f 61 64 65 64 2c 20 0a 09 09 20 2a 20 20   loaded, ... *  
62690 74 68 65 6e 20 75 73 65 20 74 68 65 20 61 72 72  then use the arr
626a0 61 79 20 69 6e 64 65 78 2e 0a 09 09 20 2a 20 20  ay index.... *  
626b0 40 70 61 72 61 6d 20 20 7b 53 74 72 69 6e 67 7c  @param  {String|
626c0 4e 75 6d 62 65 72 7d 20 20 6e 61 6d 65 20 20 54  Number}  name  T
626d0 68 65 20 6b 65 79 20 6f 72 20 69 6e 64 65 78 20  he key or index 
626e0 6f 66 20 74 68 65 20 0a 09 09 20 2a 20 20 20 20  of the ... *    
626f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
62700 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75 66               buf
62710 66 65 72 2e 0a 09 09 20 2a 20 20 40 72 65 74 75  fer.... *  @retu
62720 72 6e 20 20 7b 54 6f 6e 65 2e 42 75 66 66 65 72  rn  {Tone.Buffer
62730 7d 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  }... */..    Ton
62740 65 2e 42 75 66 66 65 72 73 2e 70 72 6f 74 6f 74  e.Buffers.protot
62750 79 70 65 2e 67 65 74 20 3d 20 66 75 6e 63 74 69  ype.get = functi
62760 6f 6e 20 28 6e 61 6d 65 29 20 7b 0a 09 20 20 20  on (name) {..   
62770 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 68 61       if (this.ha
62780 73 28 6e 61 6d 65 29 29 20 7b 0a 09 20 20 20 20  s(name)) {..    
62790 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
627a0 68 69 73 2e 5f 62 75 66 66 65 72 73 5b 6e 61 6d  his._buffers[nam
627b0 65 5d 3b 0a 09 20 20 20 20 20 20 20 20 7d 20 65  e];..        } e
627c0 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20  lse {..         
627d0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 72 72     throw new Err
627e0 6f 72 28 27 54 6f 6e 65 2e 42 75 66 66 65 72 73  or('Tone.Buffers
627f0 3a 20 6e 6f 20 62 75 66 66 65 72 20 6e 61 6d 65  : no buffer name
62800 64 20 27 20 2b 20 6e 61 6d 65 29 3b 0a 09 20 20  d ' + name);..  
62810 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a        }..    };.
62820 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 41  .    /**... *  A
62830 20 62 75 66 66 65 72 20 77 61 73 20 6c 6f 61 64   buffer was load
62840 65 64 2e 20 64 65 63 72 65 6d 65 6e 74 20 74 68  ed. decrement th
62850 65 20 63 6f 75 6e 74 65 72 2e 0a 09 09 20 2a 20  e counter.... * 
62860 20 40 70 61 72 61 6d 20 20 7b 46 75 6e 63 74 69   @param  {Functi
62870 6f 6e 7d 20 20 63 61 6c 6c 62 61 63 6b 20 0a 09  on}  callback ..
62880 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
62890 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 42 75   */..    Tone.Bu
628a0 66 66 65 72 73 2e 70 72 6f 74 6f 74 79 70 65 2e  ffers.prototype.
628b0 5f 62 75 66 66 65 72 4c 6f 61 64 65 64 20 3d 20  _bufferLoaded = 
628c0 66 75 6e 63 74 69 6f 6e 20 28 63 61 6c 6c 62 61  function (callba
628d0 63 6b 29 20 7b 0a 09 20 20 20 20 20 20 20 20 74  ck) {..        t
628e0 68 69 73 2e 5f 6c 6f 61 64 69 6e 67 43 6f 75 6e  his._loadingCoun
628f0 74 2d 2d 3b 0a 09 20 20 20 20 20 20 20 20 69 66  t--;..        if
62900 20 28 74 68 69 73 2e 5f 6c 6f 61 64 69 6e 67 43   (this._loadingC
62910 6f 75 6e 74 20 3d 3d 3d 20 30 20 26 26 20 63 61  ount === 0 && ca
62920 6c 6c 62 61 63 6b 29 20 7b 0a 09 20 20 20 20 20  llback) {..     
62930 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 28         callback(
62940 74 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20 20  this);..        
62950 7d 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  }..    };..    /
62960 2a 2a 0a 09 09 20 2a 20 49 66 20 74 68 65 20 62  **... * If the b
62970 75 66 66 65 72 73 20 61 72 65 20 6c 6f 61 64 65  uffers are loade
62980 64 20 6f 72 20 6e 6f 74 0a 09 09 20 2a 20 40 6d  d or not... * @m
62990 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 42 75 66  emberOf Tone.Buf
629a0 66 65 72 73 23 0a 09 09 20 2a 20 40 74 79 70 65  fers#... * @type
629b0 20 7b 42 6f 6f 6c 65 61 6e 7d 0a 09 09 20 2a 20   {Boolean}... * 
629c0 40 6e 61 6d 65 20 6c 6f 61 64 65 64 0a 09 09 20  @name loaded... 
629d0 2a 20 40 72 65 61 64 4f 6e 6c 79 0a 09 09 20 2a  * @readOnly... *
629e0 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65  /..    Object.de
629f0 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e  fineProperty(Ton
62a00 65 2e 42 75 66 66 65 72 73 2e 70 72 6f 74 6f 74  e.Buffers.protot
62a10 79 70 65 2c 20 27 6c 6f 61 64 65 64 27 2c 20 7b  ype, 'loaded', {
62a20 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66  ..        get: f
62a30 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
62a40 20 20 20 20 20 20 20 20 20 20 76 61 72 20 69 73            var is
62a50 4c 6f 61 64 65 64 20 3d 20 74 72 75 65 3b 0a 09  Loaded = true;..
62a60 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
62a70 28 76 61 72 20 62 75 66 66 4e 61 6d 65 20 69 6e  (var buffName in
62a80 20 74 68 69 73 2e 5f 62 75 66 66 65 72 73 29 20   this._buffers) 
62a90 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
62aa0 20 20 20 76 61 72 20 62 75 66 66 20 3d 20 74 68     var buff = th
62ab0 69 73 2e 67 65 74 28 62 75 66 66 4e 61 6d 65 29  is.get(buffName)
62ac0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
62ad0 20 20 20 69 73 4c 6f 61 64 65 64 20 3d 20 69 73     isLoaded = is
62ae0 4c 6f 61 64 65 64 20 26 26 20 62 75 66 66 2e 6c  Loaded && buff.l
62af0 6f 61 64 65 64 3b 0a 09 20 20 20 20 20 20 20 20  oaded;..        
62b00 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20      }..         
62b10 20 20 20 72 65 74 75 72 6e 20 69 73 4c 6f 61 64     return isLoad
62b20 65 64 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  ed;..        }..
62b30 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a      });..    /**
62b40 0a 09 09 20 2a 20 20 41 64 64 20 61 20 62 75 66  ... *  Add a buf
62b50 66 65 72 20 62 79 20 6e 61 6d 65 20 61 6e 64 20  fer by name and 
62b60 75 72 6c 20 74 6f 20 74 68 65 20 42 75 66 66 65  url to the Buffe
62b70 72 73 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  rs... *  @param 
62b80 20 7b 53 74 72 69 6e 67 7d 20 20 20 20 6e 61 6d   {String}    nam
62b90 65 20 20 20 20 20 20 41 20 75 6e 69 71 75 65 20  e      A unique 
62ba0 6e 61 6d 65 20 74 6f 20 67 69 76 65 0a 09 09 20  name to give... 
62bb0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
62bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
62bd0 20 74 68 65 20 62 75 66 66 65 72 0a 09 09 20 2a   the buffer... *
62be0 20 20 40 70 61 72 61 6d 20 20 7b 53 74 72 69 6e    @param  {Strin
62bf0 67 7c 54 6f 6e 65 2e 42 75 66 66 65 72 7c 41 75  g|Tone.Buffer|Au
62c00 64 69 6f 62 75 66 66 65 72 7d 20 20 75 72 6c 20  diobuffer}  url 
62c10 20 45 69 74 68 65 72 20 74 68 65 20 75 72 6c 20   Either the url 
62c20 6f 66 20 74 68 65 20 62 75 66 65 72 2c 20 0a 09  of the bufer, ..
62c30 09 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
62c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
62c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
62c60 20 20 20 20 6f 72 20 61 20 62 75 66 66 65 72 20      or a buffer 
62c70 77 68 69 63 68 20 77 69 6c 6c 20 62 65 20 61 64  which will be ad
62c80 64 65 64 0a 09 09 20 2a 20 20 20 20 20 20 20 20  ded... *        
62c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
62ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
62cb0 20 20 20 20 20 20 20 20 20 77 69 74 68 20 74 68           with th
62cc0 65 20 67 69 76 65 6e 20 6e 61 6d 65 2e 0a 09 09  e given name....
62cd0 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 46 75 6e   *  @param  {Fun
62ce0 63 74 69 6f 6e 3d 7d 20 20 63 61 6c 6c 62 61 63  ction=}  callbac
62cf0 6b 20 20 54 68 65 20 63 61 6c 6c 62 61 63 6b 20  k  The callback 
62d00 74 6f 20 69 6e 76 6f 6b 65 20 0a 09 09 20 2a 20  to invoke ... * 
62d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
62d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
62d30 77 68 65 6e 20 74 68 65 20 75 72 6c 20 69 73 20  when the url is 
62d40 6c 6f 61 64 65 64 2e 0a 09 09 20 2a 2f 0a 09 20  loaded.... */.. 
62d50 20 20 20 54 6f 6e 65 2e 42 75 66 66 65 72 73 2e     Tone.Buffers.
62d60 70 72 6f 74 6f 74 79 70 65 2e 61 64 64 20 3d 20  prototype.add = 
62d70 66 75 6e 63 74 69 6f 6e 20 28 6e 61 6d 65 2c 20  function (name, 
62d80 75 72 6c 2c 20 63 61 6c 6c 62 61 63 6b 29 20 7b  url, callback) {
62d90 0a 09 20 20 20 20 20 20 20 20 63 61 6c 6c 62 61  ..        callba
62da0 63 6b 20 3d 20 74 68 69 73 2e 64 65 66 61 75 6c  ck = this.defaul
62db0 74 41 72 67 28 63 61 6c 6c 62 61 63 6b 2c 20 54  tArg(callback, T
62dc0 6f 6e 65 2e 6e 6f 4f 70 29 3b 0a 09 20 20 20 20  one.noOp);..    
62dd0 20 20 20 20 69 66 20 28 75 72 6c 20 69 6e 73 74      if (url inst
62de0 61 6e 63 65 6f 66 20 54 6f 6e 65 2e 42 75 66 66  anceof Tone.Buff
62df0 65 72 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  er) {..         
62e00 20 20 20 74 68 69 73 2e 5f 62 75 66 66 65 72 73     this._buffers
62e10 5b 6e 61 6d 65 5d 20 3d 20 75 72 6c 3b 0a 09 20  [name] = url;.. 
62e20 20 20 20 20 20 20 20 20 20 20 20 63 61 6c 6c 62             callb
62e30 61 63 6b 28 74 68 69 73 29 3b 0a 09 20 20 20 20  ack(this);..    
62e40 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 75      } else if (u
62e50 72 6c 20 69 6e 73 74 61 6e 63 65 6f 66 20 41 75  rl instanceof Au
62e60 64 69 6f 42 75 66 66 65 72 29 20 7b 0a 09 20 20  dioBuffer) {..  
62e70 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
62e80 62 75 66 66 65 72 73 5b 6e 61 6d 65 5d 20 3d 20  buffers[name] = 
62e90 6e 65 77 20 54 6f 6e 65 2e 42 75 66 66 65 72 28  new Tone.Buffer(
62ea0 75 72 6c 29 3b 0a 09 20 20 20 20 20 20 20 20 20  url);..         
62eb0 20 20 20 63 61 6c 6c 62 61 63 6b 28 74 68 69 73     callback(this
62ec0 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c  );..        } el
62ed0 73 65 20 69 66 20 28 74 68 69 73 2e 69 73 53 74  se if (this.isSt
62ee0 72 69 6e 67 28 75 72 6c 29 29 20 7b 0a 09 20 20  ring(url)) {..  
62ef0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
62f00 62 75 66 66 65 72 73 5b 6e 61 6d 65 5d 20 3d 20  buffers[name] = 
62f10 6e 65 77 20 54 6f 6e 65 2e 42 75 66 66 65 72 28  new Tone.Buffer(
62f20 74 68 69 73 2e 62 61 73 65 55 72 6c 20 2b 20 75  this.baseUrl + u
62f30 72 6c 2c 20 63 61 6c 6c 62 61 63 6b 29 3b 0a 09  rl, callback);..
62f40 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
62f50 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a     return this;.
62f60 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
62f70 0a 09 09 20 2a 20 20 46 6c 61 74 74 65 6e 20 61  ... *  Flatten a
62f80 6e 20 6f 62 6a 65 63 74 20 69 6e 74 6f 20 61 20  n object into a 
62f90 73 69 6e 67 6c 65 20 64 65 70 74 68 20 6f 62 6a  single depth obj
62fa0 65 63 74 2e 20 0a 09 09 20 2a 20 20 74 68 61 6e  ect. ... *  than
62fb0 6b 73 20 74 6f 20 68 74 74 70 73 3a 2f 2f 67 69  ks to https://gi
62fc0 73 74 2e 67 69 74 68 75 62 2e 63 6f 6d 2f 70 65  st.github.com/pe
62fd0 6e 67 75 69 6e 62 6f 79 2f 37 36 32 31 39 37 0a  nguinboy/762197.
62fe0 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 20 7b  .. *  @param   {
62ff0 4f 62 6a 65 63 74 7d 20 6f 62 20 09 0a 09 09 20  Object} ob .... 
63000 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 4f 62 6a  *  @return  {Obj
63010 65 63 74 7d 20 20 20 20 0a 09 09 20 2a 20 20 40  ect}    ... *  @
63020 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20  private... */.. 
63030 20 20 20 54 6f 6e 65 2e 42 75 66 66 65 72 73 2e     Tone.Buffers.
63040 70 72 6f 74 6f 74 79 70 65 2e 5f 66 6c 61 74 74  prototype._flatt
63050 65 6e 55 72 6c 73 20 3d 20 66 75 6e 63 74 69 6f  enUrls = functio
63060 6e 20 28 6f 62 29 20 7b 0a 09 20 20 20 20 20 20  n (ob) {..      
63070 20 20 76 61 72 20 74 6f 52 65 74 75 72 6e 20 3d    var toReturn =
63080 20 7b 7d 3b 0a 09 20 20 20 20 20 20 20 20 66 6f   {};..        fo
63090 72 20 28 76 61 72 20 69 20 69 6e 20 6f 62 29 20  r (var i in ob) 
630a0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
630b0 66 20 28 21 6f 62 2e 68 61 73 4f 77 6e 50 72 6f  f (!ob.hasOwnPro
630c0 70 65 72 74 79 28 69 29 29 0a 09 20 20 20 20 20  perty(i))..     
630d0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
630e0 6e 75 65 3b 0a 09 20 20 20 20 20 20 20 20 20 20  nue;..          
630f0 20 20 69 66 20 28 74 68 69 73 2e 69 73 4f 62 6a    if (this.isObj
63100 65 63 74 28 6f 62 5b 69 5d 29 29 20 7b 0a 09 20  ect(ob[i])) {.. 
63110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
63120 61 72 20 66 6c 61 74 4f 62 6a 65 63 74 20 3d 20  ar flatObject = 
63130 74 68 69 73 2e 5f 66 6c 61 74 74 65 6e 55 72 6c  this._flattenUrl
63140 73 28 6f 62 5b 69 5d 29 3b 0a 09 20 20 20 20 20  s(ob[i]);..     
63150 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28             for (
63160 76 61 72 20 78 20 69 6e 20 66 6c 61 74 4f 62 6a  var x in flatObj
63170 65 63 74 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ect) {..        
63180 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
63190 21 66 6c 61 74 4f 62 6a 65 63 74 2e 68 61 73 4f  !flatObject.hasO
631a0 77 6e 50 72 6f 70 65 72 74 79 28 78 29 29 0a 09  wnProperty(x))..
631b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
631c0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
631d0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
631e0 20 20 20 20 20 20 20 74 6f 52 65 74 75 72 6e 5b         toReturn[
631f0 69 20 2b 20 27 2e 27 20 2b 20 78 5d 20 3d 20 66  i + '.' + x] = f
63200 6c 61 74 4f 62 6a 65 63 74 5b 78 5d 3b 0a 09 20  latObject[x];.. 
63210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
63220 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  ..            } 
63230 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20  else {..        
63240 20 20 20 20 20 20 20 20 74 6f 52 65 74 75 72 6e          toReturn
63250 5b 69 5d 20 3d 20 6f 62 5b 69 5d 3b 0a 09 20 20  [i] = ob[i];..  
63260 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20            }..   
63270 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
63280 72 65 74 75 72 6e 20 74 6f 52 65 74 75 72 6e 3b  return toReturn;
63290 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
632a0 2a 0a 09 09 20 2a 20 20 43 6c 65 61 6e 20 75 70  *... *  Clean up
632b0 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20  .... *  @return 
632c0 20 7b 54 6f 6e 65 2e 42 75 66 66 65 72 73 7d 20   {Tone.Buffers} 
632d0 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20  this... */..    
632e0 54 6f 6e 65 2e 42 75 66 66 65 72 73 2e 70 72 6f  Tone.Buffers.pro
632f0 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d  totype.dispose =
63300 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
63310 20 20 20 20 20 20 20 20 66 6f 72 20 28 76 61 72          for (var
63320 20 6e 61 6d 65 20 69 6e 20 74 68 69 73 2e 5f 62   name in this._b
63330 75 66 66 65 72 73 29 20 7b 0a 09 20 20 20 20 20  uffers) {..     
63340 20 20 20 20 20 20 20 74 68 69 73 2e 5f 62 75 66         this._buf
63350 66 65 72 73 5b 6e 61 6d 65 5d 2e 64 69 73 70 6f  fers[name].dispo
63360 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 7d  se();..        }
63370 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
63380 62 75 66 66 65 72 73 20 3d 20 6e 75 6c 6c 3b 0a  buffers = null;.
63390 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
633a0 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20  this;..    };.. 
633b0 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 42     return Tone.B
633c0 75 66 66 65 72 73 3b 0a 09 7d 29 3b 0a 09 4d 6f  uffers;..});..Mo
633d0 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28 54  dule(function (T
633e0 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09 20 20  one) {..    ..  
633f0 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 62 75 73 65    /**... *  buse
63400 73 20 61 72 65 20 61 6e 6f 74 68 65 72 20 77 61  s are another wa
63410 79 20 6f 66 20 72 6f 75 74 69 6e 67 20 61 75 64  y of routing aud
63420 69 6f 0a 09 09 20 2a 0a 09 09 20 2a 20 20 61 75  io... *... *  au
63430 67 6d 65 6e 74 73 20 54 6f 6e 65 2e 70 72 6f 74  gments Tone.prot
63440 6f 74 79 70 65 20 74 6f 20 69 6e 63 6c 75 64 65  otype to include
63450 20 73 65 6e 64 20 61 6e 64 20 72 65 63 69 65 76   send and reciev
63460 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 2f 2a 2a  e... */..    /**
63470 0a 09 09 20 20 2a 20 20 41 6c 6c 20 6f 66 20 74  ...  *  All of t
63480 68 65 20 72 6f 75 74 65 73 0a 09 09 20 20 2a 20  he routes...  * 
63490 20 0a 09 09 20 20 2a 20 20 40 74 79 70 65 20 7b   ...  *  @type {
634a0 4f 62 6a 65 63 74 7d 0a 09 09 20 20 2a 20 20 40  Object}...  *  @
634b0 73 74 61 74 69 63 0a 09 09 20 20 2a 20 20 40 70  static...  *  @p
634c0 72 69 76 61 74 65 0a 09 09 20 20 2a 2f 0a 09 20  rivate...  */.. 
634d0 20 20 20 76 61 72 20 42 75 73 65 73 20 3d 20 7b     var Buses = {
634e0 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  };..    /**... *
634f0 20 20 53 65 6e 64 20 74 68 69 73 20 73 69 67 6e    Send this sign
63500 61 6c 20 74 6f 20 74 68 65 20 63 68 61 6e 6e 65  al to the channe
63510 6c 20 6e 61 6d 65 2e 20 0a 09 09 20 2a 20 20 40  l name. ... *  @
63520 70 61 72 61 6d 20 20 7b 73 74 72 69 6e 67 7d 20  param  {string} 
63530 63 68 61 6e 6e 65 6c 4e 61 6d 65 20 41 20 6e 61  channelName A na
63540 6d 65 64 20 63 68 61 6e 6e 65 6c 20 74 6f 20 73  med channel to s
63550 65 6e 64 20 74 68 65 20 73 69 67 6e 61 6c 20 74  end the signal t
63560 6f 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  o.... *  @param 
63570 20 7b 44 65 63 69 62 65 6c 73 7d 20 61 6d 6f 75   {Decibels} amou
63580 6e 74 20 54 68 65 20 61 6d 6f 75 6e 74 20 6f 66  nt The amount of
63590 20 74 68 65 20 73 6f 75 72 63 65 20 74 6f 20 73   the source to s
635a0 65 6e 64 20 74 6f 20 74 68 65 20 62 75 73 2e 20  end to the bus. 
635b0 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 7b  ... *  @return {
635c0 47 61 69 6e 4e 6f 64 65 7d 20 54 68 65 20 67 61  GainNode} The ga
635d0 69 6e 20 6e 6f 64 65 20 77 68 69 63 68 20 63 6f  in node which co
635e0 6e 6e 65 63 74 73 20 74 68 69 73 20 6e 6f 64 65  nnects this node
635f0 20 74 6f 20 74 68 65 20 64 65 73 69 72 65 64 20   to the desired 
63600 63 68 61 6e 6e 65 6c 2e 20 0a 09 09 20 2a 20 20  channel. ... *  
63610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
63620 20 20 20 43 61 6e 20 62 65 20 75 73 65 64 20 74     Can be used t
63630 6f 20 61 64 6a 75 73 74 20 74 68 65 20 6c 65 76  o adjust the lev
63640 65 6c 73 20 6f 66 20 74 68 65 20 73 65 6e 64 2e  els of the send.
63650 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a  ... *  @example.
63660 09 09 20 2a 20 73 6f 75 72 63 65 2e 73 65 6e 64  .. * source.send
63670 28 22 72 65 76 65 72 62 22 2c 20 2d 31 32 29 3b  ("reverb", -12);
63680 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
63690 2e 70 72 6f 74 6f 74 79 70 65 2e 73 65 6e 64 20  .prototype.send 
636a0 3d 20 66 75 6e 63 74 69 6f 6e 20 28 63 68 61 6e  = function (chan
636b0 6e 65 6c 4e 61 6d 65 2c 20 61 6d 6f 75 6e 74 29  nelName, amount)
636c0 20 7b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
636d0 21 42 75 73 65 73 2e 68 61 73 4f 77 6e 50 72 6f  !Buses.hasOwnPro
636e0 70 65 72 74 79 28 63 68 61 6e 6e 65 6c 4e 61 6d  perty(channelNam
636f0 65 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  e)) {..         
63700 20 20 20 42 75 73 65 73 5b 63 68 61 6e 6e 65 6c     Buses[channel
63710 4e 61 6d 65 5d 20 3d 20 74 68 69 73 2e 63 6f 6e  Name] = this.con
63720 74 65 78 74 2e 63 72 65 61 74 65 47 61 69 6e 28  text.createGain(
63730 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  );..        }.. 
63740 20 20 20 20 20 20 20 61 6d 6f 75 6e 74 20 3d 20         amount = 
63750 74 68 69 73 2e 64 65 66 61 75 6c 74 41 72 67 28  this.defaultArg(
63760 61 6d 6f 75 6e 74 2c 20 30 29 3b 0a 09 20 20 20  amount, 0);..   
63770 20 20 20 20 20 76 61 72 20 73 65 6e 64 4b 6e 6f       var sendKno
63780 62 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 47 61 69  b = new Tone.Gai
63790 6e 28 61 6d 6f 75 6e 74 2c 20 54 6f 6e 65 2e 54  n(amount, Tone.T
637a0 79 70 65 2e 44 65 63 69 62 65 6c 73 29 3b 0a 09  ype.Decibels);..
637b0 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f 75 74          this.out
637c0 70 75 74 2e 63 68 61 69 6e 28 73 65 6e 64 4b 6e  put.chain(sendKn
637d0 6f 62 2c 20 42 75 73 65 73 5b 63 68 61 6e 6e 65  ob, Buses[channe
637e0 6c 4e 61 6d 65 5d 29 3b 0a 09 20 20 20 20 20 20  lName]);..      
637f0 20 20 72 65 74 75 72 6e 20 73 65 6e 64 4b 6e 6f    return sendKno
63800 62 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  b;..    };..    
63810 2f 2a 2a 0a 09 09 20 2a 20 20 52 65 63 69 65 76  /**... *  Reciev
63820 65 20 74 68 65 20 69 6e 70 75 74 20 66 72 6f 6d  e the input from
63830 20 74 68 65 20 64 65 73 69 72 65 64 20 63 68 61   the desired cha
63840 6e 6e 65 6c 4e 61 6d 65 20 74 6f 20 74 68 65 20  nnelName to the 
63850 69 6e 70 75 74 0a 09 09 20 2a 0a 09 09 20 2a 20  input... *... * 
63860 20 40 70 61 72 61 6d 20 20 7b 73 74 72 69 6e 67   @param  {string
63870 7d 20 63 68 61 6e 6e 65 6c 4e 61 6d 65 20 41 20  } channelName A 
63880 6e 61 6d 65 64 20 63 68 61 6e 6e 65 6c 20 74 6f  named channel to
63890 20 73 65 6e 64 20 74 68 65 20 73 69 67 6e 61 6c   send the signal
638a0 20 74 6f 2e 0a 09 09 20 2a 20 20 40 70 61 72 61   to.... *  @para
638b0 6d 20 7b 41 75 64 69 6f 4e 6f 64 65 7d 20 5b 69  m {AudioNode} [i
638c0 6e 70 75 74 5d 20 49 66 20 6e 6f 20 69 6e 70 75  nput] If no inpu
638d0 74 20 69 73 20 73 65 6c 65 63 74 65 64 2c 20 74  t is selected, t
638e0 68 65 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  he... *         
638f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
63900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
63910 69 6e 70 75 74 20 6f 66 20 74 68 65 20 63 75 72  input of the cur
63920 72 65 6e 74 20 6e 6f 64 65 20 69 73 0a 09 09 20  rent node is... 
63930 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
63940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
63950 20 20 20 20 20 20 20 20 20 20 63 68 6f 73 65 6e            chosen
63960 2e 20 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e  . ... *  @return
63970 73 20 7b 54 6f 6e 65 7d 20 74 68 69 73 0a 09 09  s {Tone} this...
63980 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20   *  @example... 
63990 2a 20 72 65 76 65 72 62 45 66 66 65 63 74 2e 72  * reverbEffect.r
639a0 65 63 65 69 76 65 28 22 72 65 76 65 72 62 22 29  eceive("reverb")
639b0 3b 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  ;... */..    Ton
639c0 65 2e 70 72 6f 74 6f 74 79 70 65 2e 72 65 63 65  e.prototype.rece
639d0 69 76 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  ive = function (
639e0 63 68 61 6e 6e 65 6c 4e 61 6d 65 2c 20 69 6e 70  channelName, inp
639f0 75 74 29 20 7b 0a 09 20 20 20 20 20 20 20 20 69  ut) {..        i
63a00 66 20 28 21 42 75 73 65 73 2e 68 61 73 4f 77 6e  f (!Buses.hasOwn
63a10 50 72 6f 70 65 72 74 79 28 63 68 61 6e 6e 65 6c  Property(channel
63a20 4e 61 6d 65 29 29 20 7b 0a 09 20 20 20 20 20 20  Name)) {..      
63a30 20 20 20 20 20 20 42 75 73 65 73 5b 63 68 61 6e        Buses[chan
63a40 6e 65 6c 4e 61 6d 65 5d 20 3d 20 74 68 69 73 2e  nelName] = this.
63a50 63 6f 6e 74 65 78 74 2e 63 72 65 61 74 65 47 61  context.createGa
63a60 69 6e 28 29 3b 0a 09 20 20 20 20 20 20 20 20 7d  in();..        }
63a70 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 74 68  ..        if (th
63a80 69 73 2e 69 73 55 6e 64 65 66 28 69 6e 70 75 74  is.isUndef(input
63a90 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  )) {..          
63aa0 20 20 69 6e 70 75 74 20 3d 20 74 68 69 73 2e 69    input = this.i
63ab0 6e 70 75 74 3b 0a 09 20 20 20 20 20 20 20 20 7d  nput;..        }
63ac0 0a 09 20 20 20 20 20 20 20 20 42 75 73 65 73 5b  ..        Buses[
63ad0 63 68 61 6e 6e 65 6c 4e 61 6d 65 5d 2e 63 6f 6e  channelName].con
63ae0 6e 65 63 74 28 69 6e 70 75 74 29 3b 0a 09 20 20  nect(input);..  
63af0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
63b00 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  s;..    };..    
63b10 2f 2f 72 65 6d 6f 76 65 20 61 6c 6c 20 74 68 65  //remove all the
63b20 20 73 65 6e 64 2f 72 65 63 65 69 76 65 73 20 77   send/receives w
63b30 68 65 6e 20 61 20 6e 65 77 20 61 75 64 69 6f 20  hen a new audio 
63b40 63 6f 6e 74 65 78 74 20 69 73 20 70 61 73 73 65  context is passe
63b50 64 20 69 6e 0a 09 20 20 20 20 54 6f 6e 65 2e 5f  d in..    Tone._
63b60 69 6e 69 74 41 75 64 69 6f 43 6f 6e 74 65 78 74  initAudioContext
63b70 28 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09  (function () {..
63b80 20 20 20 20 20 20 20 20 42 75 73 65 73 20 3d 20          Buses = 
63b90 7b 7d 3b 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20  {};..    });..  
63ba0 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 3b 0a 09    return Tone;..
63bb0 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63  });..Module(func
63bc0 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20  tion (Tone) {.. 
63bd0 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20     ..    /**... 
63be0 2a 20 20 40 63 6c 61 73 73 20 54 6f 6e 65 2e 44  *  @class Tone.D
63bf0 72 61 77 20 69 73 20 75 73 65 66 75 6c 20 66 6f  raw is useful fo
63c00 72 20 73 79 6e 63 68 72 6f 6e 69 7a 69 6e 67 20  r synchronizing 
63c10 76 69 73 75 61 6c 73 20 61 6e 64 20 61 75 64 69  visuals and audi
63c20 6f 20 65 76 65 6e 74 73 2e 0a 09 09 20 2a 20 20  o events.... *  
63c30 20 20 20 20 20 20 20 43 61 6c 6c 62 61 63 6b 73         Callbacks
63c40 20 66 72 6f 6d 20 54 6f 6e 65 2e 54 72 61 6e 73   from Tone.Trans
63c50 70 6f 72 74 20 6f 72 20 61 6e 79 20 6f 66 20 74  port or any of t
63c60 68 65 20 54 6f 6e 65 2e 45 76 65 6e 74 20 63 6c  he Tone.Event cl
63c70 61 73 73 65 73 0a 09 09 20 2a 20 20 20 20 20 20  asses... *      
63c80 20 20 20 61 6c 77 61 79 73 20 68 61 70 70 65 6e     always happen
63c90 20 5f 62 65 66 6f 72 65 5f 20 74 68 65 20 73 63   _before_ the sc
63ca0 68 65 64 75 6c 65 64 20 74 69 6d 65 20 61 6e 64  heduled time and
63cb0 20 61 72 65 20 6e 6f 74 20 73 79 6e 63 68 72 6f   are not synchro
63cc0 6e 69 7a 65 64 0a 09 09 20 2a 20 20 20 20 20 20  nized... *      
63cd0 20 20 20 74 6f 20 74 68 65 20 61 6e 69 6d 61 74     to the animat
63ce0 69 6f 6e 20 66 72 61 6d 65 20 73 6f 20 74 68 65  ion frame so the
63cf0 79 20 61 72 65 20 6e 6f 74 20 67 6f 6f 64 20 66  y are not good f
63d00 6f 72 20 74 72 69 67 67 65 72 69 6e 67 20 74 69  or triggering ti
63d10 67 68 74 6c 79 0a 09 09 20 2a 20 20 20 20 20 20  ghtly... *      
63d20 20 20 20 73 79 6e 63 68 72 6f 6e 69 7a 65 64 20     synchronized 
63d30 76 69 73 75 61 6c 73 20 61 6e 64 20 73 6f 75 6e  visuals and soun
63d40 64 2e 20 54 6f 6e 65 2e 44 72 61 77 20 6d 61 6b  d. Tone.Draw mak
63d50 65 73 20 69 74 20 65 61 73 79 20 74 6f 20 73 63  es it easy to sc
63d60 68 65 64 75 6c 65 0a 09 09 20 2a 20 20 20 20 20  hedule... *     
63d70 20 20 20 20 63 61 6c 6c 62 61 63 6b 73 20 75 73      callbacks us
63d80 69 6e 67 20 74 68 65 20 41 75 64 69 6f 43 6f 6e  ing the AudioCon
63d90 74 65 78 74 20 74 69 6d 65 20 61 6e 64 20 75 73  text time and us
63da0 65 73 20 72 65 71 75 65 73 74 41 6e 69 6d 61 74  es requestAnimat
63db0 69 6f 6e 46 72 61 6d 65 2e 0a 09 09 20 2a 20 20  ionFrame.... *  
63dc0 20 20 20 20 20 20 20 0a 09 09 20 2a 20 20 40 73         ... *  @s
63dd0 69 6e 67 6c 65 74 6f 6e 0a 09 09 20 2a 20 20 40  ingleton... *  @
63de0 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65 7d 0a 09  extends {Tone}..
63df0 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09  . *  @example...
63e00 20 2a 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72   * Tone.Transpor
63e10 74 2e 73 63 68 65 64 75 6c 65 28 66 75 6e 63 74  t.schedule(funct
63e20 69 6f 6e 28 74 69 6d 65 29 7b 0a 09 09 20 2a 20  ion(time){... * 
63e30 09 2f 2f 75 73 65 20 74 68 65 20 74 69 6d 65 20  .//use the time 
63e40 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 63 68 65  argument to sche
63e50 64 75 6c 65 20 61 20 63 61 6c 6c 62 61 63 6b 20  dule a callback 
63e60 77 69 74 68 20 54 6f 6e 65 2e 44 72 61 77 0a 09  with Tone.Draw..
63e70 09 20 2a 20 09 54 6f 6e 65 2e 44 72 61 77 2e 73  . * .Tone.Draw.s
63e80 63 68 65 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e  chedule(function
63e90 28 29 7b 0a 09 09 20 2a 20 09 09 2f 2f 64 6f 20  (){... * ..//do 
63ea0 64 72 61 77 69 6e 67 20 6f 72 20 44 4f 4d 20 6d  drawing or DOM m
63eb0 61 6e 69 70 75 6c 61 74 69 6f 6e 20 68 65 72 65  anipulation here
63ec0 0a 09 09 20 2a 20 09 7d 2c 20 74 69 6d 65 29 0a  ... * .}, time).
63ed0 09 09 20 2a 20 7d 2c 20 22 2b 30 2e 35 22 29 0a  .. * }, "+0.5").
63ee0 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
63ef0 44 72 61 77 20 3d 20 66 75 6e 63 74 69 6f 6e 20  Draw = function 
63f00 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 2f 2a  () {..        /*
63f10 2a 0a 09 09 09 20 2a 20 20 41 6c 6c 20 6f 66 20  *.... *  All of 
63f20 74 68 65 20 65 76 65 6e 74 73 2e 0a 09 09 09 20  the events..... 
63f30 2a 20 20 40 74 79 70 65 20 20 7b 54 6f 6e 65 2e  *  @type  {Tone.
63f40 54 69 6d 65 6c 69 6e 65 7d 0a 09 09 09 20 2a 20  Timeline}.... * 
63f50 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f   @private.... */
63f60 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
63f70 65 76 65 6e 74 73 20 3d 20 6e 65 77 20 54 6f 6e  events = new Ton
63f80 65 2e 54 69 6d 65 6c 69 6e 65 28 29 3b 0a 09 20  e.Timeline();.. 
63f90 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
63fa0 20 20 54 68 65 20 64 75 72 61 74 69 6f 6e 20 61    The duration a
63fb0 66 74 65 72 20 77 68 69 63 68 20 65 76 65 6e 74  fter which event
63fc0 73 20 61 72 65 20 6e 6f 74 20 69 6e 76 6f 6b 65  s are not invoke
63fd0 64 2e 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  d..... *  @type 
63fe0 20 7b 4e 75 6d 62 65 72 7d 0a 09 09 09 20 2a 20   {Number}.... * 
63ff0 20 40 64 65 66 61 75 6c 74 20 30 2e 32 35 0a 09   @default 0.25..
64000 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
64010 68 69 73 2e 65 78 70 69 72 61 74 69 6f 6e 20 3d  his.expiration =
64020 20 30 2e 32 35 3b 0a 09 20 20 20 20 20 20 20 20   0.25;..        
64030 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 61  /**.... *  The a
64040 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 62 65  mount of time be
64050 66 6f 72 65 20 74 68 65 20 73 63 68 65 64 75 6c  fore the schedul
64060 65 64 20 74 69 6d 65 20 0a 09 09 09 20 2a 20 20  ed time .... *  
64070 74 68 61 74 20 74 68 65 20 63 61 6c 6c 62 61 63  that the callbac
64080 6b 20 63 61 6e 20 62 65 20 69 6e 76 6f 6b 65 64  k can be invoked
64090 2e 20 44 65 66 61 75 6c 74 20 69 73 0a 09 09 09  . Default is....
640a0 20 2a 20 20 68 61 6c 66 20 74 68 65 20 74 69 6d   *  half the tim
640b0 65 20 6f 66 20 61 6e 20 61 6e 69 6d 61 74 69 6f  e of an animatio
640c0 6e 20 66 72 61 6d 65 20 28 30 2e 30 30 38 20 73  n frame (0.008 s
640d0 65 63 6f 6e 64 73 29 2e 0a 09 09 09 20 2a 20 20  econds)..... *  
640e0 40 74 79 70 65 20 20 7b 4e 75 6d 62 65 72 7d 0a  @type  {Number}.
640f0 09 09 09 20 2a 20 20 40 64 65 66 61 75 6c 74 20  ... *  @default 
64100 30 2e 30 30 38 0a 09 09 09 20 2a 2f 0a 09 20 20  0.008.... */..  
64110 20 20 20 20 20 20 74 68 69 73 2e 61 6e 74 69 63        this.antic
64120 69 70 61 74 69 6f 6e 20 3d 20 30 2e 30 30 38 3b  ipation = 0.008;
64130 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
64140 09 20 2a 20 20 54 68 65 20 64 72 61 77 20 6c 6f  . *  The draw lo
64150 6f 70 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  op.... *  @type 
64160 20 7b 46 75 6e 63 74 69 6f 6e 7d 0a 09 09 09 20   {Function}.... 
64170 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20  *  @private.... 
64180 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
64190 2e 5f 62 6f 75 6e 64 44 72 61 77 4c 6f 6f 70 20  ._boundDrawLoop 
641a0 3d 20 74 68 69 73 2e 5f 64 72 61 77 4c 6f 6f 70  = this._drawLoop
641b0 2e 62 69 6e 64 28 74 68 69 73 29 3b 0a 09 20 20  .bind(this);..  
641c0 20 20 20 20 20 20 2f 2f 73 74 61 72 74 20 74 68        //start th
641d0 65 20 6c 6f 6f 70 0a 09 20 20 20 20 20 20 20 20  e loop..        
641e0 74 68 69 73 2e 5f 64 72 61 77 4c 6f 6f 70 28 29  this._drawLoop()
641f0 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54  ;..    };..    T
64200 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e  one.extend(Tone.
64210 44 72 61 77 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a  Draw);..    /**.
64220 09 09 20 2a 20 20 53 63 68 65 64 75 6c 65 20 61  .. *  Schedule a
64230 20 66 75 6e 63 74 69 6f 6e 20 61 74 20 74 68 65   function at the
64240 20 67 69 76 65 6e 20 74 69 6d 65 20 74 6f 20 62   given time to b
64250 65 20 69 6e 76 6f 6b 65 64 0a 09 09 20 2a 20 20  e invoked... *  
64260 6f 6e 20 74 68 65 20 6e 65 61 72 65 73 74 20 61  on the nearest a
64270 6e 69 6d 61 74 69 6f 6e 20 66 72 61 6d 65 2e 0a  nimation frame..
64280 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 46  .. *  @param  {F
64290 75 6e 63 74 69 6f 6e 7d 20 20 63 61 6c 6c 62 61  unction}  callba
642a0 63 6b 20 20 43 61 6c 6c 62 61 63 6b 20 69 73 20  ck  Callback is 
642b0 69 6e 76 6f 6b 65 64 20 61 74 20 74 68 65 20 67  invoked at the g
642c0 69 76 65 6e 20 74 69 6d 65 2e 0a 09 09 20 2a 20  iven time.... * 
642d0 20 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 7d 20   @param  {Time} 
642e0 20 20 20 74 69 6d 65 20 20 20 20 20 20 54 68 65     time      The
642f0 20 74 69 6d 65 20 72 65 6c 61 74 69 76 65 20 74   time relative t
64300 6f 20 74 68 65 20 41 75 64 69 6f 43 6f 6e 74 65  o the AudioConte
64310 78 74 20 74 69 6d 65 0a 09 09 20 2a 20 20 20 20  xt time... *    
64320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64330 20 20 20 20 20 20 20 20 20 20 74 6f 20 69 6e 76            to inv
64340 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  oke the callback
64350 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20  .... *  @return 
64360 20 7b 54 6f 6e 65 2e 44 72 61 77 7d 20 20 20 20   {Tone.Draw}    
64370 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20  this... */..    
64380 54 6f 6e 65 2e 44 72 61 77 2e 70 72 6f 74 6f 74  Tone.Draw.protot
64390 79 70 65 2e 73 63 68 65 64 75 6c 65 20 3d 20 66  ype.schedule = f
643a0 75 6e 63 74 69 6f 6e 20 28 63 61 6c 6c 62 61 63  unction (callbac
643b0 6b 2c 20 74 69 6d 65 29 20 7b 0a 09 20 20 20 20  k, time) {..    
643c0 20 20 20 20 74 68 69 73 2e 5f 65 76 65 6e 74 73      this._events
643d0 2e 61 64 64 28 7b 0a 09 20 20 20 20 20 20 20 20  .add({..        
643e0 20 20 20 20 63 61 6c 6c 62 61 63 6b 3a 20 63 61      callback: ca
643f0 6c 6c 62 61 63 6b 2c 0a 09 20 20 20 20 20 20 20  llback,..       
64400 20 20 20 20 20 74 69 6d 65 3a 20 74 68 69 73 2e       time: this.
64410 74 6f 53 65 63 6f 6e 64 73 28 74 69 6d 65 29 0a  toSeconds(time).
64420 09 20 20 20 20 20 20 20 20 7d 29 3b 0a 09 20 20  .        });..  
64430 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
64440 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  s;..    };..    
64450 2f 2a 2a 0a 09 09 20 2a 20 20 43 61 6e 63 65 6c  /**... *  Cancel
64460 20 65 76 65 6e 74 73 20 73 63 68 65 64 75 6c 65   events schedule
64470 64 20 61 66 74 65 72 20 74 68 65 20 67 69 76 65  d after the give
64480 6e 20 74 69 6d 65 0a 09 09 20 2a 20 20 40 70 61  n time... *  @pa
64490 72 61 6d 20 20 7b 54 69 6d 65 3d 7d 20 20 61 66  ram  {Time=}  af
644a0 74 65 72 20 20 54 69 6d 65 20 61 66 74 65 72 20  ter  Time after 
644b0 77 68 69 63 68 20 73 63 68 65 64 75 6c 65 64 20  which scheduled 
644c0 65 76 65 6e 74 73 20 77 69 6c 6c 20 0a 09 09 20  events will ... 
644d0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
644e0 20 20 20 20 20 20 20 20 20 20 20 62 65 20 72 65             be re
644f0 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 73  moved from the s
64500 63 68 65 64 75 6c 69 6e 67 20 74 69 6d 65 6c 69  cheduling timeli
64510 6e 65 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72  ne.... *  @retur
64520 6e 20 20 7b 54 6f 6e 65 2e 44 72 61 77 7d 20 20  n  {Tone.Draw}  
64530 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20  this... */..    
64540 54 6f 6e 65 2e 44 72 61 77 2e 70 72 6f 74 6f 74  Tone.Draw.protot
64550 79 70 65 2e 63 61 6e 63 65 6c 20 3d 20 66 75 6e  ype.cancel = fun
64560 63 74 69 6f 6e 20 28 61 66 74 65 72 29 20 7b 0a  ction (after) {.
64570 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 65  .        this._e
64580 76 65 6e 74 73 2e 63 61 6e 63 65 6c 28 74 68 69  vents.cancel(thi
64590 73 2e 74 6f 53 65 63 6f 6e 64 73 28 61 66 74 65  s.toSeconds(afte
645a0 72 29 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65  r));..        re
645b0 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20  turn this;..    
645c0 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  };..    /**... *
645d0 20 20 54 68 65 20 64 72 61 77 20 6c 6f 6f 70 0a    The draw loop.
645e0 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
645f0 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 44  . */..    Tone.D
64600 72 61 77 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 64  raw.prototype._d
64610 72 61 77 4c 6f 6f 70 20 3d 20 66 75 6e 63 74 69  rawLoop = functi
64620 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
64630 20 72 65 71 75 65 73 74 41 6e 69 6d 61 74 69 6f   requestAnimatio
64640 6e 46 72 61 6d 65 28 74 68 69 73 2e 5f 62 6f 75  nFrame(this._bou
64650 6e 64 44 72 61 77 4c 6f 6f 70 29 3b 0a 09 20 20  ndDrawLoop);..  
64660 20 20 20 20 20 20 76 61 72 20 6e 6f 77 20 3d 20        var now = 
64670 54 6f 6e 65 2e 6e 6f 77 28 29 3b 0a 09 20 20 20  Tone.now();..   
64680 20 20 20 20 20 77 68 69 6c 65 20 28 74 68 69 73       while (this
64690 2e 5f 65 76 65 6e 74 73 2e 6c 65 6e 67 74 68 20  ._events.length 
646a0 26 26 20 74 68 69 73 2e 5f 65 76 65 6e 74 73 2e  && this._events.
646b0 70 65 65 6b 28 29 2e 74 69 6d 65 20 2d 20 74 68  peek().time - th
646c0 69 73 2e 61 6e 74 69 63 69 70 61 74 69 6f 6e 20  is.anticipation 
646d0 3c 3d 20 6e 6f 77 29 20 7b 0a 09 20 20 20 20 20  <= now) {..     
646e0 20 20 20 20 20 20 20 76 61 72 20 65 76 65 6e 74         var event
646f0 20 3d 20 74 68 69 73 2e 5f 65 76 65 6e 74 73 2e   = this._events.
64700 73 68 69 66 74 28 29 3b 0a 09 20 20 20 20 20 20  shift();..      
64710 20 20 20 20 20 20 69 66 20 28 6e 6f 77 20 2d 20        if (now - 
64720 65 76 65 6e 74 2e 74 69 6d 65 20 3c 3d 20 74 68  event.time <= th
64730 69 73 2e 65 78 70 69 72 61 74 69 6f 6e 29 20 7b  is.expiration) {
64740 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
64750 20 20 65 76 65 6e 74 2e 63 61 6c 6c 62 61 63 6b    event.callback
64760 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ();..           
64770 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20   }..        }.. 
64780 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2f 6d 61 6b     };..    //mak
64790 65 20 61 20 73 69 6e 67 6c 65 74 6f 6e 0a 09 20  e a singleton.. 
647a0 20 20 20 54 6f 6e 65 2e 44 72 61 77 20 3d 20 6e     Tone.Draw = n
647b0 65 77 20 54 6f 6e 65 2e 44 72 61 77 28 29 3b 0a  ew Tone.Draw();.
647c0 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65  .    return Tone
647d0 2e 44 72 61 77 3b 0a 09 7d 29 3b 0a 09 4d 6f 64  .Draw;..});..Mod
647e0 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f  ule(function (To
647f0 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09 20 20 20  ne) {..    ..   
64800 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61 73   /**... *  @clas
64810 73 20 20 42 6f 74 68 20 54 6f 6e 65 2e 50 61 6e  s  Both Tone.Pan
64820 6e 65 72 33 44 20 61 6e 64 20 54 6f 6e 65 2e 4c  ner3D and Tone.L
64830 69 73 74 65 6e 65 72 20 68 61 76 65 20 61 20 70  istener have a p
64840 6f 73 69 74 69 6f 6e 20 69 6e 20 33 44 20 73 70  osition in 3D sp
64850 61 63 65 20 0a 09 09 20 2a 20 20 20 20 20 20 20  ace ... *       
64860 20 20 20 75 73 69 6e 67 20 61 20 72 69 67 68 74     using a right
64870 2d 68 61 6e 64 65 64 20 63 61 72 74 65 73 69 61  -handed cartesia
64880 6e 20 63 6f 6f 72 64 69 6e 61 74 65 20 73 79 73  n coordinate sys
64890 74 65 6d 2e 20 0a 09 09 20 2a 20 20 20 20 20 20  tem. ... *      
648a0 20 20 20 20 54 68 65 20 75 6e 69 74 73 20 75 73      The units us
648b0 65 64 20 69 6e 20 74 68 65 20 63 6f 6f 72 64 69  ed in the coordi
648c0 6e 61 74 65 20 73 79 73 74 65 6d 20 61 72 65 20  nate system are 
648d0 6e 6f 74 20 64 65 66 69 6e 65 64 3b 20 0a 09 09  not defined; ...
648e0 20 2a 20 20 20 20 20 20 20 20 20 20 74 68 65 73   *          thes
648f0 65 20 63 6f 6f 72 64 69 6e 61 74 65 73 20 61 72  e coordinates ar
64900 65 20 69 6e 64 65 70 65 6e 64 65 6e 74 2f 69 6e  e independent/in
64910 76 61 72 69 61 6e 74 20 6f 66 20 61 6e 79 20 70  variant of any p
64920 61 72 74 69 63 75 6c 61 72 20 0a 09 09 20 2a 20  articular ... * 
64930 20 20 20 20 20 20 20 20 20 75 6e 69 74 73 20 73           units s
64940 75 63 68 20 61 73 20 6d 65 74 65 72 73 20 6f 72  uch as meters or
64950 20 66 65 65 74 2e 20 54 6f 6e 65 2e 50 61 6e 6e   feet. Tone.Pann
64960 65 72 33 44 20 6f 62 6a 65 63 74 73 20 68 61 76  er3D objects hav
64970 65 20 61 6e 20 66 6f 72 77 61 72 64 20 0a 09 09  e an forward ...
64980 20 2a 20 20 20 20 20 20 20 20 20 20 76 65 63 74   *          vect
64990 6f 72 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  or representing 
649a0 74 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 68  the direction th
649b0 65 20 73 6f 75 6e 64 20 69 73 20 70 72 6f 6a 65  e sound is proje
649c0 63 74 69 6e 67 2e 20 41 64 64 69 74 69 6f 6e 61  cting. Additiona
649d0 6c 6c 79 2c 20 0a 09 09 20 2a 20 20 20 20 20 20  lly, ... *      
649e0 20 20 20 20 74 68 65 79 20 68 61 76 65 20 61 20      they have a 
649f0 73 6f 75 6e 64 20 63 6f 6e 65 20 72 65 70 72 65  sound cone repre
64a00 73 65 6e 74 69 6e 67 20 68 6f 77 20 64 69 72 65  senting how dire
64a10 63 74 69 6f 6e 61 6c 20 74 68 65 20 73 6f 75 6e  ctional the soun
64a20 64 20 69 73 2e 20 0a 09 09 20 2a 20 20 20 20 20  d is. ... *     
64a30 20 20 20 20 20 46 6f 72 20 65 78 61 6d 70 6c 65       For example
64a40 2c 20 74 68 65 20 73 6f 75 6e 64 20 63 6f 75 6c  , the sound coul
64a50 64 20 62 65 20 6f 6d 6e 69 64 69 72 65 63 74 69  d be omnidirecti
64a60 6f 6e 61 6c 2c 20 69 6e 20 77 68 69 63 68 20 63  onal, in which c
64a70 61 73 65 20 69 74 20 77 6f 75 6c 64 20 0a 09 09  ase it would ...
64a80 20 2a 20 20 20 20 20 20 20 20 20 20 62 65 20 68   *          be h
64a90 65 61 72 64 20 61 6e 79 77 68 65 72 65 20 72 65  eard anywhere re
64aa0 67 61 72 64 6c 65 73 73 20 6f 66 20 69 74 73 20  gardless of its 
64ab0 66 6f 72 77 61 72 64 2c 20 6f 72 20 69 74 20 63  forward, or it c
64ac0 61 6e 20 62 65 20 6d 6f 72 65 20 64 69 72 65 63  an be more direc
64ad0 74 69 6f 6e 61 6c 20 0a 09 09 20 2a 20 20 20 20  tional ... *    
64ae0 20 20 20 20 20 20 61 6e 64 20 68 65 61 72 64 20        and heard 
64af0 6f 6e 6c 79 20 69 66 20 69 74 20 69 73 20 66 61  only if it is fa
64b00 63 69 6e 67 20 74 68 65 20 6c 69 73 74 65 6e 65  cing the listene
64b10 72 2e 20 54 6f 6e 65 2e 4c 69 73 74 65 6e 65 72  r. Tone.Listener
64b20 20 6f 62 6a 65 63 74 73 20 0a 09 09 20 2a 20 20   objects ... *  
64b30 20 20 20 20 20 20 20 20 28 72 65 70 72 65 73 65          (represe
64b40 6e 74 69 6e 67 20 61 20 70 65 72 73 6f 6e 27 73  nting a person's
64b50 20 65 61 72 73 29 20 68 61 76 65 20 61 6e 20 66   ears) have an f
64b60 6f 72 77 61 72 64 20 61 6e 64 20 75 70 20 76 65  orward and up ve
64b70 63 74 6f 72 20 0a 09 09 20 2a 20 20 20 20 20 20  ctor ... *      
64b80 20 20 20 20 72 65 70 72 65 73 65 6e 74 69 6e 67      representing
64b90 20 69 6e 20 77 68 69 63 68 20 64 69 72 65 63 74   in which direct
64ba0 69 6f 6e 20 74 68 65 20 70 65 72 73 6f 6e 20 69  ion the person i
64bb0 73 20 66 61 63 69 6e 67 2e 20 42 65 63 61 75 73  s facing. Becaus
64bc0 65 20 62 6f 74 68 20 74 68 65 20 0a 09 09 20 2a  e both the ... *
64bd0 20 20 20 20 20 20 20 20 20 20 73 6f 75 72 63 65            source
64be0 20 73 74 72 65 61 6d 20 61 6e 64 20 74 68 65 20   stream and the 
64bf0 6c 69 73 74 65 6e 65 72 20 63 61 6e 20 62 65 20  listener can be 
64c00 6d 6f 76 69 6e 67 2c 20 74 68 65 79 20 62 6f 74  moving, they bot
64c10 68 20 68 61 76 65 20 61 20 76 65 6c 6f 63 69 74  h have a velocit
64c20 79 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  y ... *         
64c30 20 76 65 63 74 6f 72 20 72 65 70 72 65 73 65 6e   vector represen
64c40 74 69 6e 67 20 62 6f 74 68 20 74 68 65 20 73 70  ting both the sp
64c50 65 65 64 20 61 6e 64 20 64 69 72 65 63 74 69 6f  eed and directio
64c60 6e 20 6f 66 20 6d 6f 76 65 6d 65 6e 74 2e 20 54  n of movement. T
64c70 61 6b 65 6e 20 74 6f 67 65 74 68 65 72 2c 20 0a  aken together, .
64c80 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 74 68  .. *          th
64c90 65 73 65 20 74 77 6f 20 76 65 6c 6f 63 69 74 69  ese two velociti
64ca0 65 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  es can be used t
64cb0 6f 20 67 65 6e 65 72 61 74 65 20 61 20 64 6f 70  o generate a dop
64cc0 70 6c 65 72 20 73 68 69 66 74 20 65 66 66 65 63  pler shift effec
64cd0 74 20 77 68 69 63 68 20 63 68 61 6e 67 65 73 20  t which changes 
64ce0 74 68 65 20 70 69 74 63 68 2e 0a 09 09 20 2a 20  the pitch.... * 
64cf0 20 20 20 20 20 20 20 20 20 3c 62 72 3e 3c 62 72           <br><br
64d00 3e 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20  >... *          
64d10 4e 6f 74 65 3a 20 74 68 65 20 70 6f 73 69 74 69  Note: the positi
64d20 6f 6e 20 6f 66 20 74 68 65 20 4c 69 73 74 65 6e  on of the Listen
64d30 65 72 20 77 69 6c 6c 20 68 61 76 65 20 6e 6f 20  er will have no 
64d40 65 66 66 65 63 74 20 6f 6e 20 6e 6f 64 65 73 20  effect on nodes 
64d50 6e 6f 74 20 63 6f 6e 6e 65 63 74 65 64 20 74 6f  not connected to
64d60 20 61 20 54 6f 6e 65 2e 50 61 6e 6e 65 72 33 44   a Tone.Panner3D
64d70 0a 09 09 20 2a 20 20 0a 09 09 20 2a 20 20 40 63  ... *  ... *  @c
64d80 6f 6e 73 74 72 75 63 74 6f 72 0a 09 09 20 2a 20  onstructor... * 
64d90 20 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65 7d   @extends {Tone}
64da0 0a 09 09 20 2a 20 20 40 73 69 6e 67 6c 65 74 6f  ... *  @singleto
64db0 6e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b  n... *  @param {
64dc0 4e 75 6d 62 65 72 7d 20 70 6f 73 69 74 69 6f 6e  Number} position
64dd0 58 20 54 68 65 20 69 6e 69 74 69 61 6c 20 78 20  X The initial x 
64de0 70 6f 73 69 74 69 6f 6e 2e 0a 09 09 20 2a 20 20  position.... *  
64df0 40 70 61 72 61 6d 20 7b 4e 75 6d 62 65 72 7d 20  @param {Number} 
64e00 70 6f 73 69 74 69 6f 6e 59 20 54 68 65 20 69 6e  positionY The in
64e10 69 74 69 61 6c 20 79 20 70 6f 73 69 74 69 6f 6e  itial y position
64e20 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b  .... *  @param {
64e30 4e 75 6d 62 65 72 7d 20 70 6f 73 69 74 69 6f 6e  Number} position
64e40 5a 20 54 68 65 20 69 6e 69 74 69 61 6c 20 7a 20  Z The initial z 
64e50 70 6f 73 69 74 69 6f 6e 2e 0a 09 09 20 2a 2f 0a  position.... */.
64e60 09 20 20 20 20 54 6f 6e 65 2e 4c 69 73 74 65 6e  .    Tone.Listen
64e70 65 72 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  er = function ()
64e80 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20   {..        var 
64e90 6f 70 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e 6f  options = this.o
64ea0 70 74 69 6f 6e 73 4f 62 6a 65 63 74 28 61 72 67  ptionsObject(arg
64eb0 75 6d 65 6e 74 73 2c 20 5b 0a 09 20 20 20 20 20  uments, [..     
64ec0 20 20 20 20 20 20 20 27 70 6f 73 69 74 69 6f 6e         'position
64ed0 58 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  X',..           
64ee0 20 27 70 6f 73 69 74 69 6f 6e 59 27 2c 0a 09 20   'positionY',.. 
64ef0 20 20 20 20 20 20 20 20 20 20 20 27 70 6f 73 69             'posi
64f00 74 69 6f 6e 5a 27 0a 09 20 20 20 20 20 20 20 20  tionZ'..        
64f10 5d 2c 20 4c 69 73 74 65 6e 65 72 43 6f 6e 73 74  ], ListenerConst
64f20 72 75 63 74 6f 72 2e 64 65 66 61 75 6c 74 73 29  ructor.defaults)
64f30 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
64f40 09 09 20 2a 20 20 54 68 65 20 6c 69 73 74 65 6e  .. *  The listen
64f50 65 72 20 6e 6f 64 65 0a 09 09 09 20 2a 20 20 40  er node.... *  @
64f60 74 79 70 65 20 7b 41 75 64 69 6f 4c 69 73 74 65  type {AudioListe
64f70 6e 65 72 7d 0a 09 09 09 20 2a 20 20 40 70 72 69  ner}.... *  @pri
64f80 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20  vate.... */..   
64f90 20 20 20 20 20 74 68 69 73 2e 5f 6c 69 73 74 65       this._liste
64fa0 6e 65 72 20 3d 20 74 68 69 73 2e 63 6f 6e 74 65  ner = this.conte
64fb0 78 74 2e 6c 69 73 74 65 6e 65 72 3b 0a 09 20 20  xt.listener;..  
64fc0 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
64fd0 20 48 6f 6c 64 73 20 74 68 65 20 63 75 72 72 65   Holds the curre
64fe0 6e 74 20 66 6f 72 77 61 72 64 20 6f 72 69 65 6e  nt forward orien
64ff0 74 61 74 69 6f 6e 0a 09 09 09 20 2a 20 20 40 74  tation.... *  @t
65000 79 70 65 20 20 7b 41 72 72 61 79 7d 0a 09 09 09  ype  {Array}....
65010 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
65020 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
65030 73 2e 5f 6f 72 69 65 6e 74 61 74 69 6f 6e 20 3d  s._orientation =
65040 20 5b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   [..            
65050 6f 70 74 69 6f 6e 73 2e 66 6f 72 77 61 72 64 58  options.forwardX
65060 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
65070 70 74 69 6f 6e 73 2e 66 6f 72 77 61 72 64 59 2c  ptions.forwardY,
65080 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 6f 70  ..            op
65090 74 69 6f 6e 73 2e 66 6f 72 77 61 72 64 5a 2c 0a  tions.forwardZ,.
650a0 09 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 74  .            opt
650b0 69 6f 6e 73 2e 75 70 58 2c 0a 09 20 20 20 20 20  ions.upX,..     
650c0 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 2e 75         options.u
650d0 70 59 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  pY,..           
650e0 20 6f 70 74 69 6f 6e 73 2e 75 70 5a 0a 09 20 20   options.upZ..  
650f0 20 20 20 20 20 20 5d 3b 0a 09 20 20 20 20 20 20        ];..      
65100 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 48 6f 6c    /**.... *  Hol
65110 64 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  ds the current p
65120 6f 73 69 74 69 6f 6e 0a 09 09 09 20 2a 20 20 40  osition.... *  @
65130 74 79 70 65 20 20 7b 41 72 72 61 79 7d 0a 09 09  type  {Array}...
65140 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
65150 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
65160 69 73 2e 5f 70 6f 73 69 74 69 6f 6e 20 3d 20 5b  is._position = [
65170 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 6f 70  ..            op
65180 74 69 6f 6e 73 2e 70 6f 73 69 74 69 6f 6e 58 2c  tions.positionX,
65190 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 6f 70  ..            op
651a0 74 69 6f 6e 73 2e 70 6f 73 69 74 69 6f 6e 59 2c  tions.positionY,
651b0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 6f 70  ..            op
651c0 74 69 6f 6e 73 2e 70 6f 73 69 74 69 6f 6e 5a 0a  tions.positionZ.
651d0 09 20 20 20 20 20 20 20 20 5d 3b 0a 09 20 20 20  .        ];..   
651e0 20 20 20 20 20 2f 2f 20 73 65 74 20 74 68 65 20       // set the 
651f0 64 65 66 61 75 6c 74 20 70 6f 73 69 74 69 6f 6e  default position
65200 2f 66 6f 72 77 61 72 64 0a 09 20 20 20 20 20 20  /forward..      
65210 20 20 74 68 69 73 2e 66 6f 72 77 61 72 64 58 20    this.forwardX 
65220 3d 20 6f 70 74 69 6f 6e 73 2e 66 6f 72 77 61 72  = options.forwar
65230 64 58 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  dX;..        thi
65240 73 2e 66 6f 72 77 61 72 64 59 20 3d 20 6f 70 74  s.forwardY = opt
65250 69 6f 6e 73 2e 66 6f 72 77 61 72 64 59 3b 0a 09  ions.forwardY;..
65260 20 20 20 20 20 20 20 20 74 68 69 73 2e 66 6f 72          this.for
65270 77 61 72 64 5a 20 3d 20 6f 70 74 69 6f 6e 73 2e  wardZ = options.
65280 66 6f 72 77 61 72 64 5a 3b 0a 09 20 20 20 20 20  forwardZ;..     
65290 20 20 20 74 68 69 73 2e 75 70 58 20 3d 20 6f 70     this.upX = op
652a0 74 69 6f 6e 73 2e 75 70 58 3b 0a 09 20 20 20 20  tions.upX;..    
652b0 20 20 20 20 74 68 69 73 2e 75 70 59 20 3d 20 6f      this.upY = o
652c0 70 74 69 6f 6e 73 2e 75 70 59 3b 0a 09 20 20 20  ptions.upY;..   
652d0 20 20 20 20 20 74 68 69 73 2e 75 70 5a 20 3d 20       this.upZ = 
652e0 6f 70 74 69 6f 6e 73 2e 75 70 5a 3b 0a 09 20 20  options.upZ;..  
652f0 20 20 20 20 20 20 74 68 69 73 2e 70 6f 73 69 74        this.posit
65300 69 6f 6e 58 20 3d 20 6f 70 74 69 6f 6e 73 2e 70  ionX = options.p
65310 6f 73 69 74 69 6f 6e 58 3b 0a 09 20 20 20 20 20  ositionX;..     
65320 20 20 20 74 68 69 73 2e 70 6f 73 69 74 69 6f 6e     this.position
65330 59 20 3d 20 6f 70 74 69 6f 6e 73 2e 70 6f 73 69  Y = options.posi
65340 74 69 6f 6e 59 3b 0a 09 20 20 20 20 20 20 20 20  tionY;..        
65350 74 68 69 73 2e 70 6f 73 69 74 69 6f 6e 5a 20 3d  this.positionZ =
65360 20 6f 70 74 69 6f 6e 73 2e 70 6f 73 69 74 69 6f   options.positio
65370 6e 5a 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  nZ;..    };..   
65380 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e   Tone.extend(Ton
65390 65 2e 4c 69 73 74 65 6e 65 72 29 3b 0a 09 20 20  e.Listener);..  
653a0 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 74 68 65 20    /**... *  the 
653b0 64 65 66 61 75 6c 74 20 70 61 72 61 6d 65 74 65  default paramete
653c0 72 73 0a 09 09 20 2a 20 20 40 73 74 61 74 69 63  rs... *  @static
653d0 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 0a 09 09  ... *  @const...
653e0 20 2a 20 20 40 74 79 70 65 20 7b 4f 62 6a 65 63   *  @type {Objec
653f0 74 7d 0a 09 09 20 2a 20 20 44 65 66 61 75 6c 74  t}... *  Default
65400 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  s according to t
65410 68 65 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e  he specification
65420 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
65430 2e 4c 69 73 74 65 6e 65 72 2e 64 65 66 61 75 6c  .Listener.defaul
65440 74 73 20 3d 20 7b 0a 09 20 20 20 20 20 20 20 20  ts = {..        
65450 27 70 6f 73 69 74 69 6f 6e 58 27 3a 20 30 2c 0a  'positionX': 0,.
65460 09 20 20 20 20 20 20 20 20 27 70 6f 73 69 74 69  .        'positi
65470 6f 6e 59 27 3a 20 30 2c 0a 09 20 20 20 20 20 20  onY': 0,..      
65480 20 20 27 70 6f 73 69 74 69 6f 6e 5a 27 3a 20 30    'positionZ': 0
65490 2c 0a 09 20 20 20 20 20 20 20 20 27 66 6f 72 77  ,..        'forw
654a0 61 72 64 58 27 3a 20 30 2c 0a 09 20 20 20 20 20  ardX': 0,..     
654b0 20 20 20 27 66 6f 72 77 61 72 64 59 27 3a 20 30     'forwardY': 0
654c0 2c 0a 09 20 20 20 20 20 20 20 20 27 66 6f 72 77  ,..        'forw
654d0 61 72 64 5a 27 3a 20 31 2c 0a 09 20 20 20 20 20  ardZ': 1,..     
654e0 20 20 20 27 75 70 58 27 3a 20 30 2c 0a 09 20 20     'upX': 0,..  
654f0 20 20 20 20 20 20 27 75 70 59 27 3a 20 31 2c 0a        'upY': 1,.
65500 09 20 20 20 20 20 20 20 20 27 75 70 5a 27 3a 20  .        'upZ': 
65510 30 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  0..    };..    /
65520 2a 2a 0a 09 09 20 2a 20 54 68 65 20 72 61 6d 70  **... * The ramp
65530 20 74 69 6d 65 20 77 68 69 63 68 20 69 73 20 61   time which is a
65540 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20 73 65  pplied to the se
65550 74 54 61 72 67 65 74 41 74 54 69 6d 65 0a 09 09  tTargetAtTime...
65560 20 2a 20 40 74 79 70 65 20 7b 4e 75 6d 62 65 72   * @type {Number
65570 7d 0a 09 09 20 2a 20 40 70 72 69 76 61 74 65 0a  }... * @private.
65580 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
65590 4c 69 73 74 65 6e 65 72 2e 70 72 6f 74 6f 74 79  Listener.prototy
655a0 70 65 2e 5f 72 61 6d 70 54 69 6d 65 43 6f 6e 73  pe._rampTimeCons
655b0 74 61 6e 74 20 3d 20 30 2e 30 31 3b 0a 09 20 20  tant = 0.01;..  
655c0 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 53 65 74 73    /**... *  Sets
655d0 20 74 68 65 20 70 6f 73 69 74 69 6f 6e 20 6f 66   the position of
655e0 20 74 68 65 20 6c 69 73 74 65 6e 65 72 20 69 6e   the listener in
655f0 20 33 64 20 73 70 61 63 65 2e 09 0a 09 09 20 2a   3d space..... *
65600 20 20 40 70 61 72 61 6d 20 20 7b 4e 75 6d 62 65    @param  {Numbe
65610 72 7d 20 20 78 0a 09 09 20 2a 20 20 40 70 61 72  r}  x... *  @par
65620 61 6d 20 20 7b 4e 75 6d 62 65 72 7d 20 20 79 0a  am  {Number}  y.
65630 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 4e  .. *  @param  {N
65640 75 6d 62 65 72 7d 20 20 7a 0a 09 09 20 2a 20 20  umber}  z... *  
65650 40 72 65 74 75 72 6e 20 7b 54 6f 6e 65 2e 4c 69  @return {Tone.Li
65660 73 74 65 6e 65 72 7d 20 74 68 69 73 0a 09 09 20  stener} this... 
65670 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4c 69 73  */..    Tone.Lis
65680 74 65 6e 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e  tener.prototype.
65690 73 65 74 50 6f 73 69 74 69 6f 6e 20 3d 20 66 75  setPosition = fu
656a0 6e 63 74 69 6f 6e 20 28 78 2c 20 79 2c 20 7a 29  nction (x, y, z)
656b0 20 7b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
656c0 74 68 69 73 2e 5f 6c 69 73 74 65 6e 65 72 2e 70  this._listener.p
656d0 6f 73 69 74 69 6f 6e 58 29 20 7b 0a 09 20 20 20  ositionX) {..   
656e0 20 20 20 20 20 20 20 20 20 76 61 72 20 6e 6f 77           var now
656f0 20 3d 20 74 68 69 73 2e 6e 6f 77 28 29 3b 0a 09   = this.now();..
65700 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
65710 2e 5f 6c 69 73 74 65 6e 65 72 2e 70 6f 73 69 74  ._listener.posit
65720 69 6f 6e 58 2e 73 65 74 54 61 72 67 65 74 41 74  ionX.setTargetAt
65730 54 69 6d 65 28 78 2c 20 6e 6f 77 2c 20 74 68 69  Time(x, now, thi
65740 73 2e 5f 72 61 6d 70 54 69 6d 65 43 6f 6e 73 74  s._rampTimeConst
65750 61 6e 74 29 3b 0a 09 20 20 20 20 20 20 20 20 20  ant);..         
65760 20 20 20 74 68 69 73 2e 5f 6c 69 73 74 65 6e 65     this._listene
65770 72 2e 70 6f 73 69 74 69 6f 6e 59 2e 73 65 74 54  r.positionY.setT
65780 61 72 67 65 74 41 74 54 69 6d 65 28 79 2c 20 6e  argetAtTime(y, n
65790 6f 77 2c 20 74 68 69 73 2e 5f 72 61 6d 70 54 69  ow, this._rampTi
657a0 6d 65 43 6f 6e 73 74 61 6e 74 29 3b 0a 09 20 20  meConstant);..  
657b0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
657c0 6c 69 73 74 65 6e 65 72 2e 70 6f 73 69 74 69 6f  listener.positio
657d0 6e 5a 2e 73 65 74 54 61 72 67 65 74 41 74 54 69  nZ.setTargetAtTi
657e0 6d 65 28 7a 2c 20 6e 6f 77 2c 20 74 68 69 73 2e  me(z, now, this.
657f0 5f 72 61 6d 70 54 69 6d 65 43 6f 6e 73 74 61 6e  _rampTimeConstan
65800 74 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 20 65  t);..        } e
65810 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20  lse {..         
65820 20 20 20 74 68 69 73 2e 5f 6c 69 73 74 65 6e 65     this._listene
65830 72 2e 73 65 74 50 6f 73 69 74 69 6f 6e 28 78 2c  r.setPosition(x,
65840 20 79 2c 20 7a 29 3b 0a 09 20 20 20 20 20 20 20   y, z);..       
65850 20 7d 0a 09 20 20 20 20 20 20 20 20 74 68 69 73   }..        this
65860 2e 5f 70 6f 73 69 74 69 6f 6e 20 3d 20 41 72 72  ._position = Arr
65870 61 79 2e 70 72 6f 74 6f 74 79 70 65 2e 73 6c 69  ay.prototype.sli
65880 63 65 2e 63 61 6c 6c 28 61 72 67 75 6d 65 6e 74  ce.call(argument
65890 73 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74  s);..        ret
658a0 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
658b0 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
658c0 20 53 65 74 73 20 74 68 65 20 6f 72 69 65 6e 74   Sets the orient
658d0 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 73  ation of the lis
658e0 74 65 6e 65 72 20 75 73 69 6e 67 20 74 77 6f 20  tener using two 
658f0 76 65 63 74 6f 72 73 2c 20 74 68 65 20 66 6f 72  vectors, the for
65900 77 61 72 64 0a 09 09 20 2a 20 20 76 65 63 74 6f  ward... *  vecto
65910 72 20 28 77 68 69 63 68 20 64 69 72 65 63 74 69  r (which directi
65920 6f 6e 20 74 68 65 20 6c 69 73 74 65 6e 65 72 20  on the listener 
65930 69 73 20 66 61 63 69 6e 67 29 20 61 6e 64 20 74  is facing) and t
65940 68 65 20 75 70 20 76 65 63 74 6f 72 20 0a 09 09  he up vector ...
65950 20 2a 20 20 28 77 68 69 63 68 20 74 68 65 20 75   *  (which the u
65960 70 20 64 69 72 65 63 74 69 6f 6e 20 6f 66 20 74  p direction of t
65970 68 65 20 6c 69 73 74 65 6e 65 72 29 2e 20 41 6e  he listener). An
65980 20 75 70 20 76 65 63 74 6f 72 0a 09 09 20 2a 20   up vector... * 
65990 20 6f 66 20 30 2c 20 30 2c 20 31 20 69 73 20 65   of 0, 0, 1 is e
659a0 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 74 68 65  quivalent to the
659b0 20 6c 69 73 74 65 6e 65 72 20 73 74 61 6e 64 69   listener standi
659c0 6e 67 20 75 70 20 69 6e 20 74 68 65 20 5a 20 64  ng up in the Z d
659d0 69 72 65 63 74 69 6f 6e 2e 20 0a 09 09 20 2a 20  irection. ... * 
659e0 20 40 70 61 72 61 6d 20 20 7b 4e 75 6d 62 65 72   @param  {Number
659f0 7d 20 20 78 0a 09 09 20 2a 20 20 40 70 61 72 61  }  x... *  @para
65a00 6d 20 20 7b 4e 75 6d 62 65 72 7d 20 20 79 0a 09  m  {Number}  y..
65a10 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 4e 75  . *  @param  {Nu
65a20 6d 62 65 72 7d 20 20 7a 0a 09 09 20 2a 20 20 40  mber}  z... *  @
65a30 70 61 72 61 6d 20 20 7b 4e 75 6d 62 65 72 7d 20  param  {Number} 
65a40 20 75 70 58 0a 09 09 20 2a 20 20 40 70 61 72 61   upX... *  @para
65a50 6d 20 20 7b 4e 75 6d 62 65 72 7d 20 20 75 70 59  m  {Number}  upY
65a60 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b  ... *  @param  {
65a70 4e 75 6d 62 65 72 7d 20 20 75 70 5a 0a 09 09 20  Number}  upZ... 
65a80 2a 20 20 40 72 65 74 75 72 6e 20 7b 54 6f 6e 65  *  @return {Tone
65a90 2e 4c 69 73 74 65 6e 65 72 7d 20 74 68 69 73 0a  .Listener} this.
65aa0 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
65ab0 4c 69 73 74 65 6e 65 72 2e 70 72 6f 74 6f 74 79  Listener.prototy
65ac0 70 65 2e 73 65 74 4f 72 69 65 6e 74 61 74 69 6f  pe.setOrientatio
65ad0 6e 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 78 2c  n = function (x,
65ae0 20 79 2c 20 7a 2c 20 75 70 58 2c 20 75 70 59 2c   y, z, upX, upY,
65af0 20 75 70 5a 29 20 7b 0a 09 20 20 20 20 20 20 20   upZ) {..       
65b00 20 69 66 20 28 74 68 69 73 2e 5f 6c 69 73 74 65   if (this._liste
65b10 6e 65 72 2e 66 6f 72 77 61 72 64 58 29 20 7b 0a  ner.forwardX) {.
65b20 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72  .            var
65b30 20 6e 6f 77 20 3d 20 74 68 69 73 2e 6e 6f 77 28   now = this.now(
65b40 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
65b50 74 68 69 73 2e 5f 6c 69 73 74 65 6e 65 72 2e 66  this._listener.f
65b60 6f 72 77 61 72 64 58 2e 73 65 74 54 61 72 67 65  orwardX.setTarge
65b70 74 41 74 54 69 6d 65 28 78 2c 20 6e 6f 77 2c 20  tAtTime(x, now, 
65b80 74 68 69 73 2e 5f 72 61 6d 70 54 69 6d 65 43 6f  this._rampTimeCo
65b90 6e 73 74 61 6e 74 29 3b 0a 09 20 20 20 20 20 20  nstant);..      
65ba0 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 69 73 74        this._list
65bb0 65 6e 65 72 2e 66 6f 72 77 61 72 64 59 2e 73 65  ener.forwardY.se
65bc0 74 54 61 72 67 65 74 41 74 54 69 6d 65 28 79 2c  tTargetAtTime(y,
65bd0 20 6e 6f 77 2c 20 74 68 69 73 2e 5f 72 61 6d 70   now, this._ramp
65be0 54 69 6d 65 43 6f 6e 73 74 61 6e 74 29 3b 0a 09  TimeConstant);..
65bf0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
65c00 2e 5f 6c 69 73 74 65 6e 65 72 2e 66 6f 72 77 61  ._listener.forwa
65c10 72 64 5a 2e 73 65 74 54 61 72 67 65 74 41 74 54  rdZ.setTargetAtT
65c20 69 6d 65 28 7a 2c 20 6e 6f 77 2c 20 74 68 69 73  ime(z, now, this
65c30 2e 5f 72 61 6d 70 54 69 6d 65 43 6f 6e 73 74 61  ._rampTimeConsta
65c40 6e 74 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20  nt);..          
65c50 20 20 74 68 69 73 2e 5f 6c 69 73 74 65 6e 65 72    this._listener
65c60 2e 75 70 58 2e 73 65 74 54 61 72 67 65 74 41 74  .upX.setTargetAt
65c70 54 69 6d 65 28 75 70 58 2c 20 6e 6f 77 2c 20 74  Time(upX, now, t
65c80 68 69 73 2e 5f 72 61 6d 70 54 69 6d 65 43 6f 6e  his._rampTimeCon
65c90 73 74 61 6e 74 29 3b 0a 09 20 20 20 20 20 20 20  stant);..       
65ca0 20 20 20 20 20 74 68 69 73 2e 5f 6c 69 73 74 65       this._liste
65cb0 6e 65 72 2e 75 70 59 2e 73 65 74 54 61 72 67 65  ner.upY.setTarge
65cc0 74 41 74 54 69 6d 65 28 75 70 59 2c 20 6e 6f 77  tAtTime(upY, now
65cd0 2c 20 74 68 69 73 2e 5f 72 61 6d 70 54 69 6d 65  , this._rampTime
65ce0 43 6f 6e 73 74 61 6e 74 29 3b 0a 09 20 20 20 20  Constant);..    
65cf0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 69          this._li
65d00 73 74 65 6e 65 72 2e 75 70 5a 2e 73 65 74 54 61  stener.upZ.setTa
65d10 72 67 65 74 41 74 54 69 6d 65 28 75 70 5a 2c 20  rgetAtTime(upZ, 
65d20 6e 6f 77 2c 20 74 68 69 73 2e 5f 72 61 6d 70 54  now, this._rampT
65d30 69 6d 65 43 6f 6e 73 74 61 6e 74 29 3b 0a 09 20  imeConstant);.. 
65d40 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
65d50 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
65d60 73 2e 5f 6c 69 73 74 65 6e 65 72 2e 73 65 74 4f  s._listener.setO
65d70 72 69 65 6e 74 61 74 69 6f 6e 28 78 2c 20 79 2c  rientation(x, y,
65d80 20 7a 2c 20 75 70 58 2c 20 75 70 59 2c 20 75 70   z, upX, upY, up
65d90 5a 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  Z);..        }..
65da0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6f 72          this._or
65db0 69 65 6e 74 61 74 69 6f 6e 20 3d 20 41 72 72 61  ientation = Arra
65dc0 79 2e 70 72 6f 74 6f 74 79 70 65 2e 73 6c 69 63  y.prototype.slic
65dd0 65 2e 63 61 6c 6c 28 61 72 67 75 6d 65 6e 74 73  e.call(arguments
65de0 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
65df0 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b  rn this;..    };
65e00 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
65e10 54 68 65 20 78 20 70 6f 73 69 74 69 6f 6e 20 6f  The x position o
65e20 66 20 74 68 65 20 70 61 6e 6e 65 72 20 6f 62 6a  f the panner obj
65e30 65 63 74 2e 0a 09 09 20 2a 20 20 40 74 79 70 65  ect.... *  @type
65e40 20 7b 4e 75 6d 62 65 72 7d 0a 09 09 20 2a 20 20   {Number}... *  
65e50 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 4c  @memberOf Tone.L
65e60 69 73 74 65 6e 65 72 23 0a 09 09 20 2a 20 20 40  istener#... *  @
65e70 6e 61 6d 65 20 70 6f 73 69 74 69 6f 6e 58 0a 09  name positionX..
65e80 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74  . */..    Object
65e90 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28  .defineProperty(
65ea0 54 6f 6e 65 2e 4c 69 73 74 65 6e 65 72 2e 70 72  Tone.Listener.pr
65eb0 6f 74 6f 74 79 70 65 2c 20 27 70 6f 73 69 74 69  ototype, 'positi
65ec0 6f 6e 58 27 2c 20 7b 0a 09 20 20 20 20 20 20 20  onX', {..       
65ed0 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   set: function (
65ee0 70 6f 73 29 20 7b 0a 09 20 20 20 20 20 20 20 20  pos) {..        
65ef0 20 20 20 20 74 68 69 73 2e 5f 70 6f 73 69 74 69      this._positi
65f00 6f 6e 5b 30 5d 20 3d 20 70 6f 73 3b 0a 09 20 20  on[0] = pos;..  
65f10 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73            this.s
65f20 65 74 50 6f 73 69 74 69 6f 6e 2e 61 70 70 6c 79  etPosition.apply
65f30 28 74 68 69 73 2c 20 74 68 69 73 2e 5f 70 6f 73  (this, this._pos
65f40 69 74 69 6f 6e 29 3b 0a 09 20 20 20 20 20 20 20  ition);..       
65f50 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 67 65 74   },..        get
65f60 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  : function () {.
65f70 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
65f80 75 72 6e 20 74 68 69 73 2e 5f 70 6f 73 69 74 69  urn this._positi
65f90 6f 6e 5b 30 5d 3b 0a 09 20 20 20 20 20 20 20 20  on[0];..        
65fa0 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20  }..    });..    
65fb0 2f 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20 79 20  /**... *  The y 
65fc0 70 6f 73 69 74 69 6f 6e 20 6f 66 20 74 68 65 20  position of the 
65fd0 70 61 6e 6e 65 72 20 6f 62 6a 65 63 74 2e 0a 09  panner object...
65fe0 09 20 2a 20 20 40 74 79 70 65 20 7b 4e 75 6d 62  . *  @type {Numb
65ff0 65 72 7d 0a 09 09 20 2a 20 20 40 6d 65 6d 62 65  er}... *  @membe
66000 72 4f 66 20 54 6f 6e 65 2e 4c 69 73 74 65 6e 65  rOf Tone.Listene
66010 72 23 0a 09 09 20 2a 20 20 40 6e 61 6d 65 20 70  r#... *  @name p
66020 6f 73 69 74 69 6f 6e 59 0a 09 09 20 2a 2f 0a 09  ositionY... */..
66030 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e      Object.defin
66040 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 4c  eProperty(Tone.L
66050 69 73 74 65 6e 65 72 2e 70 72 6f 74 6f 74 79 70  istener.prototyp
66060 65 2c 20 27 70 6f 73 69 74 69 6f 6e 59 27 2c 20  e, 'positionY', 
66070 7b 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20  {..        set: 
66080 66 75 6e 63 74 69 6f 6e 20 28 70 6f 73 29 20 7b  function (pos) {
66090 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
660a0 69 73 2e 5f 70 6f 73 69 74 69 6f 6e 5b 31 5d 20  is._position[1] 
660b0 3d 20 70 6f 73 3b 0a 09 20 20 20 20 20 20 20 20  = pos;..        
660c0 20 20 20 20 74 68 69 73 2e 73 65 74 50 6f 73 69      this.setPosi
660d0 74 69 6f 6e 2e 61 70 70 6c 79 28 74 68 69 73 2c  tion.apply(this,
660e0 20 74 68 69 73 2e 5f 70 6f 73 69 74 69 6f 6e 29   this._position)
660f0 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20  ;..        },.. 
66100 20 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63         get: func
66110 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
66120 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
66130 69 73 2e 5f 70 6f 73 69 74 69 6f 6e 5b 31 5d 3b  is._position[1];
66140 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
66150 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09   });..    /**...
66160 20 2a 20 20 54 68 65 20 7a 20 70 6f 73 69 74 69   *  The z positi
66170 6f 6e 20 6f 66 20 74 68 65 20 70 61 6e 6e 65 72  on of the panner
66180 20 6f 62 6a 65 63 74 2e 0a 09 09 20 2a 20 20 40   object.... *  @
66190 74 79 70 65 20 7b 4e 75 6d 62 65 72 7d 0a 09 09  type {Number}...
661a0 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f   *  @memberOf To
661b0 6e 65 2e 4c 69 73 74 65 6e 65 72 23 0a 09 09 20  ne.Listener#... 
661c0 2a 20 20 40 6e 61 6d 65 20 70 6f 73 69 74 69 6f  *  @name positio
661d0 6e 5a 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62  nZ... */..    Ob
661e0 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65  ject.definePrope
661f0 72 74 79 28 54 6f 6e 65 2e 4c 69 73 74 65 6e 65  rty(Tone.Listene
66200 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 70 6f  r.prototype, 'po
66210 73 69 74 69 6f 6e 5a 27 2c 20 7b 0a 09 20 20 20  sitionZ', {..   
66220 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74 69       set: functi
66230 6f 6e 20 28 70 6f 73 29 20 7b 0a 09 20 20 20 20  on (pos) {..    
66240 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70 6f          this._po
66250 73 69 74 69 6f 6e 5b 32 5d 20 3d 20 70 6f 73 3b  sition[2] = pos;
66260 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
66270 69 73 2e 73 65 74 50 6f 73 69 74 69 6f 6e 2e 61  is.setPosition.a
66280 70 70 6c 79 28 74 68 69 73 2c 20 74 68 69 73 2e  pply(this, this.
66290 5f 70 6f 73 69 74 69 6f 6e 29 3b 0a 09 20 20 20  _position);..   
662a0 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20       },..       
662b0 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   get: function (
662c0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
662d0 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 70 6f   return this._po
662e0 73 69 74 69 6f 6e 5b 32 5d 3b 0a 09 20 20 20 20  sition[2];..    
662f0 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09      }..    });..
66300 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 68      /**... *  Th
66310 65 20 78 20 63 6f 6f 72 64 69 6e 61 74 65 20 6f  e x coordinate o
66320 66 20 74 68 65 20 6c 69 73 74 65 6e 65 72 73 20  f the listeners 
66330 66 72 6f 6e 74 20 64 69 72 65 63 74 69 6f 6e 2e  front direction.
66340 20 69 2e 65 2e 20 0a 09 09 20 2a 20 20 77 68 69   i.e. ... *  whi
66350 63 68 20 77 61 79 20 74 68 65 79 20 61 72 65 20  ch way they are 
66360 66 61 63 69 6e 67 2e 0a 09 09 20 2a 20 20 40 74  facing.... *  @t
66370 79 70 65 20 7b 4e 75 6d 62 65 72 7d 0a 09 09 20  ype {Number}... 
66380 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e  *  @memberOf Ton
66390 65 2e 4c 69 73 74 65 6e 65 72 23 0a 09 09 20 2a  e.Listener#... *
663a0 20 20 40 6e 61 6d 65 20 66 6f 72 77 61 72 64 58    @name forwardX
663b0 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65  ... */..    Obje
663c0 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74  ct.definePropert
663d0 79 28 54 6f 6e 65 2e 4c 69 73 74 65 6e 65 72 2e  y(Tone.Listener.
663e0 70 72 6f 74 6f 74 79 70 65 2c 20 27 66 6f 72 77  prototype, 'forw
663f0 61 72 64 58 27 2c 20 7b 0a 09 20 20 20 20 20 20  ardX', {..      
66400 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    set: function 
66410 28 70 6f 73 29 20 7b 0a 09 20 20 20 20 20 20 20  (pos) {..       
66420 20 20 20 20 20 74 68 69 73 2e 5f 6f 72 69 65 6e       this._orien
66430 74 61 74 69 6f 6e 5b 30 5d 20 3d 20 70 6f 73 3b  tation[0] = pos;
66440 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
66450 69 73 2e 73 65 74 4f 72 69 65 6e 74 61 74 69 6f  is.setOrientatio
66460 6e 2e 61 70 70 6c 79 28 74 68 69 73 2c 20 74 68  n.apply(this, th
66470 69 73 2e 5f 6f 72 69 65 6e 74 61 74 69 6f 6e 29  is._orientation)
66480 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20  ;..        },.. 
66490 20 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63         get: func
664a0 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
664b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
664c0 69 73 2e 5f 6f 72 69 65 6e 74 61 74 69 6f 6e 5b  is._orientation[
664d0 30 5d 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  0];..        }..
664e0 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a      });..    /**
664f0 0a 09 09 20 2a 20 20 54 68 65 20 79 20 63 6f 6f  ... *  The y coo
66500 72 64 69 6e 61 74 65 20 6f 66 20 74 68 65 20 6c  rdinate of the l
66510 69 73 74 65 6e 65 72 73 20 66 72 6f 6e 74 20 64  isteners front d
66520 69 72 65 63 74 69 6f 6e 2e 20 69 2e 65 2e 20 0a  irection. i.e. .
66530 09 09 20 2a 20 20 77 68 69 63 68 20 77 61 79 20  .. *  which way 
66540 74 68 65 79 20 61 72 65 20 66 61 63 69 6e 67 2e  they are facing.
66550 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4e 75  ... *  @type {Nu
66560 6d 62 65 72 7d 0a 09 09 20 2a 20 20 40 6d 65 6d  mber}... *  @mem
66570 62 65 72 4f 66 20 54 6f 6e 65 2e 4c 69 73 74 65  berOf Tone.Liste
66580 6e 65 72 23 0a 09 09 20 2a 20 20 40 6e 61 6d 65  ner#... *  @name
66590 20 66 6f 72 77 61 72 64 59 0a 09 09 20 2a 2f 0a   forwardY... */.
665a0 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69  .    Object.defi
665b0 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e  neProperty(Tone.
665c0 4c 69 73 74 65 6e 65 72 2e 70 72 6f 74 6f 74 79  Listener.prototy
665d0 70 65 2c 20 27 66 6f 72 77 61 72 64 59 27 2c 20  pe, 'forwardY', 
665e0 7b 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20  {..        set: 
665f0 66 75 6e 63 74 69 6f 6e 20 28 70 6f 73 29 20 7b  function (pos) {
66600 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
66610 69 73 2e 5f 6f 72 69 65 6e 74 61 74 69 6f 6e 5b  is._orientation[
66620 31 5d 20 3d 20 70 6f 73 3b 0a 09 20 20 20 20 20  1] = pos;..     
66630 20 20 20 20 20 20 20 74 68 69 73 2e 73 65 74 4f         this.setO
66640 72 69 65 6e 74 61 74 69 6f 6e 2e 61 70 70 6c 79  rientation.apply
66650 28 74 68 69 73 2c 20 74 68 69 73 2e 5f 6f 72 69  (this, this._ori
66660 65 6e 74 61 74 69 6f 6e 29 3b 0a 09 20 20 20 20  entation);..    
66670 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20      },..        
66680 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29  get: function ()
66690 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
666a0 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 6f 72 69  return this._ori
666b0 65 6e 74 61 74 69 6f 6e 5b 31 5d 3b 0a 09 20 20  entation[1];..  
666c0 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b        }..    });
666d0 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
666e0 54 68 65 20 7a 20 63 6f 6f 72 64 69 6e 61 74 65  The z coordinate
666f0 20 6f 66 20 74 68 65 20 6c 69 73 74 65 6e 65 72   of the listener
66700 73 20 66 72 6f 6e 74 20 64 69 72 65 63 74 69 6f  s front directio
66710 6e 2e 20 69 2e 65 2e 20 0a 09 09 20 2a 20 20 77  n. i.e. ... *  w
66720 68 69 63 68 20 77 61 79 20 74 68 65 79 20 61 72  hich way they ar
66730 65 20 66 61 63 69 6e 67 2e 0a 09 09 20 2a 20 20  e facing.... *  
66740 40 74 79 70 65 20 7b 4e 75 6d 62 65 72 7d 0a 09  @type {Number}..
66750 09 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54  . *  @memberOf T
66760 6f 6e 65 2e 4c 69 73 74 65 6e 65 72 23 0a 09 09  one.Listener#...
66770 20 2a 20 20 40 6e 61 6d 65 20 66 6f 72 77 61 72   *  @name forwar
66780 64 5a 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62  dZ... */..    Ob
66790 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65  ject.definePrope
667a0 72 74 79 28 54 6f 6e 65 2e 4c 69 73 74 65 6e 65  rty(Tone.Listene
667b0 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 66 6f  r.prototype, 'fo
667c0 72 77 61 72 64 5a 27 2c 20 7b 0a 09 20 20 20 20  rwardZ', {..    
667d0 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f      set: functio
667e0 6e 20 28 70 6f 73 29 20 7b 0a 09 20 20 20 20 20  n (pos) {..     
667f0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6f 72 69         this._ori
66800 65 6e 74 61 74 69 6f 6e 5b 32 5d 20 3d 20 70 6f  entation[2] = po
66810 73 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  s;..            
66820 74 68 69 73 2e 73 65 74 4f 72 69 65 6e 74 61 74  this.setOrientat
66830 69 6f 6e 2e 61 70 70 6c 79 28 74 68 69 73 2c 20  ion.apply(this, 
66840 74 68 69 73 2e 5f 6f 72 69 65 6e 74 61 74 69 6f  this._orientatio
66850 6e 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a  n);..        },.
66860 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75  .        get: fu
66870 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
66880 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
66890 74 68 69 73 2e 5f 6f 72 69 65 6e 74 61 74 69 6f  this._orientatio
668a0 6e 5b 32 5d 3b 0a 09 20 20 20 20 20 20 20 20 7d  n[2];..        }
668b0 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f  ..    });..    /
668c0 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20 78 20 63  **... *  The x c
668d0 6f 6f 72 64 69 6e 61 74 65 20 6f 66 20 74 68 65  oordinate of the
668e0 20 6c 69 73 74 65 6e 65 72 27 73 20 75 70 20 64   listener's up d
668f0 69 72 65 63 74 69 6f 6e 2e 20 69 2e 65 2e 0a 09  irection. i.e...
66900 09 20 2a 20 20 74 68 65 20 64 69 72 65 63 74 69  . *  the directi
66910 6f 6e 20 74 68 65 20 6c 69 73 74 65 6e 65 72 20  on the listener 
66920 69 73 20 73 74 61 6e 64 69 6e 67 20 69 6e 2e 0a  is standing in..
66930 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4e 75 6d  .. *  @type {Num
66940 62 65 72 7d 0a 09 09 20 2a 20 20 40 6d 65 6d 62  ber}... *  @memb
66950 65 72 4f 66 20 54 6f 6e 65 2e 4c 69 73 74 65 6e  erOf Tone.Listen
66960 65 72 23 0a 09 09 20 2a 20 20 40 6e 61 6d 65 20  er#... *  @name 
66970 75 70 58 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f  upX... */..    O
66980 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70  bject.defineProp
66990 65 72 74 79 28 54 6f 6e 65 2e 4c 69 73 74 65 6e  erty(Tone.Listen
669a0 65 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 75  er.prototype, 'u
669b0 70 58 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20  pX', {..        
669c0 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 70  set: function (p
669d0 6f 73 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  os) {..         
669e0 20 20 20 74 68 69 73 2e 5f 6f 72 69 65 6e 74 61     this._orienta
669f0 74 69 6f 6e 5b 33 5d 20 3d 20 70 6f 73 3b 0a 09  tion[3] = pos;..
66a00 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
66a10 2e 73 65 74 4f 72 69 65 6e 74 61 74 69 6f 6e 2e  .setOrientation.
66a20 61 70 70 6c 79 28 74 68 69 73 2c 20 74 68 69 73  apply(this, this
66a30 2e 5f 6f 72 69 65 6e 74 61 74 69 6f 6e 29 3b 0a  ._orientation);.
66a40 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20  .        },..   
66a50 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69       get: functi
66a60 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
66a70 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
66a80 2e 5f 6f 72 69 65 6e 74 61 74 69 6f 6e 5b 33 5d  ._orientation[3]
66a90 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20  ;..        }..  
66aa0 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09    });..    /**..
66ab0 09 20 2a 20 20 54 68 65 20 79 20 63 6f 6f 72 64  . *  The y coord
66ac0 69 6e 61 74 65 20 6f 66 20 74 68 65 20 6c 69 73  inate of the lis
66ad0 74 65 6e 65 72 27 73 20 75 70 20 64 69 72 65 63  tener's up direc
66ae0 74 69 6f 6e 2e 20 69 2e 65 2e 0a 09 09 20 2a 20  tion. i.e.... * 
66af0 20 74 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74   the direction t
66b00 68 65 20 6c 69 73 74 65 6e 65 72 20 69 73 20 73  he listener is s
66b10 74 61 6e 64 69 6e 67 20 69 6e 2e 0a 09 09 20 2a  tanding in.... *
66b20 20 20 40 74 79 70 65 20 7b 4e 75 6d 62 65 72 7d    @type {Number}
66b30 0a 09 09 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66  ... *  @memberOf
66b40 20 54 6f 6e 65 2e 4c 69 73 74 65 6e 65 72 23 0a   Tone.Listener#.
66b50 09 09 20 2a 20 20 40 6e 61 6d 65 20 75 70 59 0a  .. *  @name upY.
66b60 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63  .. */..    Objec
66b70 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79  t.defineProperty
66b80 28 54 6f 6e 65 2e 4c 69 73 74 65 6e 65 72 2e 70  (Tone.Listener.p
66b90 72 6f 74 6f 74 79 70 65 2c 20 27 75 70 59 27 2c  rototype, 'upY',
66ba0 20 7b 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a   {..        set:
66bb0 20 66 75 6e 63 74 69 6f 6e 20 28 70 6f 73 29 20   function (pos) 
66bc0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
66bd0 68 69 73 2e 5f 6f 72 69 65 6e 74 61 74 69 6f 6e  his._orientation
66be0 5b 34 5d 20 3d 20 70 6f 73 3b 0a 09 20 20 20 20  [4] = pos;..    
66bf0 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 65 74          this.set
66c00 4f 72 69 65 6e 74 61 74 69 6f 6e 2e 61 70 70 6c  Orientation.appl
66c10 79 28 74 68 69 73 2c 20 74 68 69 73 2e 5f 6f 72  y(this, this._or
66c20 69 65 6e 74 61 74 69 6f 6e 29 3b 0a 09 20 20 20  ientation);..   
66c30 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20       },..       
66c40 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   get: function (
66c50 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
66c60 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 6f 72   return this._or
66c70 69 65 6e 74 61 74 69 6f 6e 5b 34 5d 3b 0a 09 20  ientation[4];.. 
66c80 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29         }..    })
66c90 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
66ca0 20 54 68 65 20 7a 20 63 6f 6f 72 64 69 6e 61 74   The z coordinat
66cb0 65 20 6f 66 20 74 68 65 20 6c 69 73 74 65 6e 65  e of the listene
66cc0 72 27 73 20 75 70 20 64 69 72 65 63 74 69 6f 6e  r's up direction
66cd0 2e 20 69 2e 65 2e 0a 09 09 20 2a 20 20 74 68 65  . i.e.... *  the
66ce0 20 64 69 72 65 63 74 69 6f 6e 20 74 68 65 20 6c   direction the l
66cf0 69 73 74 65 6e 65 72 20 69 73 20 73 74 61 6e 64  istener is stand
66d00 69 6e 67 20 69 6e 2e 0a 09 09 20 2a 20 20 40 74  ing in.... *  @t
66d10 79 70 65 20 7b 4e 75 6d 62 65 72 7d 0a 09 09 20  ype {Number}... 
66d20 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e  *  @memberOf Ton
66d30 65 2e 4c 69 73 74 65 6e 65 72 23 0a 09 09 20 2a  e.Listener#... *
66d40 20 20 40 6e 61 6d 65 20 75 70 5a 0a 09 09 20 2a    @name upZ... *
66d50 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65  /..    Object.de
66d60 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e  fineProperty(Ton
66d70 65 2e 4c 69 73 74 65 6e 65 72 2e 70 72 6f 74 6f  e.Listener.proto
66d80 74 79 70 65 2c 20 27 75 70 5a 27 2c 20 7b 0a 09  type, 'upZ', {..
66d90 20 20 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e          set: fun
66da0 63 74 69 6f 6e 20 28 70 6f 73 29 20 7b 0a 09 20  ction (pos) {.. 
66db0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
66dc0 5f 6f 72 69 65 6e 74 61 74 69 6f 6e 5b 35 5d 20  _orientation[5] 
66dd0 3d 20 70 6f 73 3b 0a 09 20 20 20 20 20 20 20 20  = pos;..        
66de0 20 20 20 20 74 68 69 73 2e 73 65 74 4f 72 69 65      this.setOrie
66df0 6e 74 61 74 69 6f 6e 2e 61 70 70 6c 79 28 74 68  ntation.apply(th
66e00 69 73 2c 20 74 68 69 73 2e 5f 6f 72 69 65 6e 74  is, this._orient
66e10 61 74 69 6f 6e 29 3b 0a 09 20 20 20 20 20 20 20  ation);..       
66e20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 67 65 74   },..        get
66e30 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  : function () {.
66e40 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
66e50 75 72 6e 20 74 68 69 73 2e 5f 6f 72 69 65 6e 74  urn this._orient
66e60 61 74 69 6f 6e 5b 35 5d 3b 0a 09 20 20 20 20 20  ation[5];..     
66e70 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20     }..    });.. 
66e80 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 6c 65     /**... *  Cle
66e90 61 6e 20 75 70 2e 0a 09 09 20 2a 20 20 40 72 65  an up.... *  @re
66ea0 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 4c 69 73 74  turns {Tone.List
66eb0 65 6e 65 72 7d 20 74 68 69 73 0a 09 09 20 2a 2f  ener} this... */
66ec0 0a 09 20 20 20 20 54 6f 6e 65 2e 4c 69 73 74 65  ..    Tone.Liste
66ed0 6e 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69  ner.prototype.di
66ee0 73 70 6f 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e  spose = function
66ef0 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 74   () {..        t
66f00 68 69 73 2e 5f 6c 69 73 74 65 6e 65 72 2e 64 69  his._listener.di
66f10 73 63 6f 6e 6e 65 63 74 28 29 3b 0a 09 20 20 20  sconnect();..   
66f20 20 20 20 20 20 74 68 69 73 2e 5f 6c 69 73 74 65       this._liste
66f30 6e 65 72 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  ner = null;..   
66f40 20 20 20 20 20 74 68 69 73 2e 5f 6f 72 69 65 6e       this._orien
66f50 74 61 74 69 6f 6e 20 3d 20 6e 75 6c 6c 3b 0a 09  tation = null;..
66f60 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70 6f          this._po
66f70 73 69 74 69 6f 6e 20 3d 20 6e 75 6c 6c 3b 0a 09  sition = null;..
66f80 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
66f90 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  his;..    };..  
66fa0 20 20 2f 2f 53 49 4e 47 4c 45 54 4f 4e 20 53 45    //SINGLETON SE
66fb0 54 55 50 0a 09 20 20 20 20 76 61 72 20 4c 69 73  TUP..    var Lis
66fc0 74 65 6e 65 72 43 6f 6e 73 74 72 75 63 74 6f 72  tenerConstructor
66fd0 20 3d 20 54 6f 6e 65 2e 4c 69 73 74 65 6e 65 72   = Tone.Listener
66fe0 3b 0a 09 20 20 20 20 54 6f 6e 65 2e 5f 69 6e 69  ;..    Tone._ini
66ff0 74 41 75 64 69 6f 43 6f 6e 74 65 78 74 28 66 75  tAudioContext(fu
67000 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
67010 20 20 20 20 20 69 66 20 28 74 79 70 65 6f 66 20       if (typeof 
67020 54 6f 6e 65 2e 4c 69 73 74 65 6e 65 72 20 3d 3d  Tone.Listener ==
67030 3d 20 27 66 75 6e 63 74 69 6f 6e 27 29 20 7b 0a  = 'function') {.
67040 09 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 61  .            //a
67050 20 73 69 6e 67 6c 65 20 6c 69 73 74 65 6e 65 72   single listener
67060 20 6f 62 6a 65 63 74 0a 09 20 20 20 20 20 20 20   object..       
67070 20 20 20 20 20 54 6f 6e 65 2e 4c 69 73 74 65 6e       Tone.Listen
67080 65 72 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4c 69  er = new Tone.Li
67090 73 74 65 6e 65 72 28 29 3b 0a 09 20 20 20 20 20  stener();..     
670a0 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20     } else {..   
670b0 20 20 20 20 20 20 20 20 20 2f 2f 6d 61 6b 65 20           //make 
670c0 6e 65 77 20 4c 69 73 74 65 6e 65 72 20 69 6e 73  new Listener ins
670d0 69 64 65 73 0a 09 20 20 20 20 20 20 20 20 20 20  ides..          
670e0 20 20 4c 69 73 74 65 6e 65 72 43 6f 6e 73 74 72    ListenerConstr
670f0 75 63 74 6f 72 2e 63 61 6c 6c 28 54 6f 6e 65 2e  uctor.call(Tone.
67100 4c 69 73 74 65 6e 65 72 29 3b 0a 09 20 20 20 20  Listener);..    
67110 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09      }..    });..
67120 20 20 20 20 2f 2f 45 4e 44 20 53 49 4e 47 4c 45      //END SINGLE
67130 54 4f 4e 20 53 45 54 55 50 0a 09 20 20 20 20 72  TON SETUP..    r
67140 65 74 75 72 6e 20 54 6f 6e 65 2e 4c 69 73 74 65  eturn Tone.Liste
67150 6e 65 72 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c  ner;..});..Modul
67160 65 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65  e(function (Tone
67170 29 20 7b 0a 09 20 20 20 20 0a 09 20 20 20 20 2f  ) {..    ..    /
67180 2a 2a 0a 09 09 20 2a 20 09 40 63 6c 61 73 73 20  **... * .@class 
67190 20 54 6f 6e 65 2e 45 66 66 65 63 74 20 69 73 20   Tone.Effect is 
671a0 74 68 65 20 62 61 73 65 20 63 6c 61 73 73 20 66  the base class f
671b0 6f 72 20 65 66 66 65 63 74 73 2e 20 43 6f 6e 6e  or effects. Conn
671c0 65 63 74 20 74 68 65 20 65 66 66 65 63 74 20 62  ect the effect b
671d0 65 74 77 65 65 6e 0a 09 09 20 2a 20 09 20 20 20  etween... * .   
671e0 20 20 20 20 20 74 68 65 20 65 66 66 65 63 74 53       the effectS
671f0 65 6e 64 20 61 6e 64 20 65 66 66 65 63 74 52 65  end and effectRe
67200 74 75 72 6e 20 47 61 69 6e 4e 6f 64 65 73 2c 20  turn GainNodes, 
67210 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 20 74 68 65  then control the
67220 20 61 6d 6f 75 6e 74 20 6f 66 0a 09 09 20 2a 20   amount of... * 
67230 09 20 20 20 20 20 20 20 20 65 66 66 65 63 74 20  .        effect 
67240 77 68 69 63 68 20 67 6f 65 73 20 74 6f 20 74 68  which goes to th
67250 65 20 6f 75 74 70 75 74 20 75 73 69 6e 67 20 74  e output using t
67260 68 65 20 77 65 74 20 63 6f 6e 74 72 6f 6c 2e 0a  he wet control..
67270 09 09 20 2a 0a 09 09 20 2a 20 20 40 63 6f 6e 73  .. *... *  @cons
67280 74 72 75 63 74 6f 72 0a 09 09 20 2a 20 20 40 65  tructor... *  @e
67290 78 74 65 6e 64 73 20 7b 54 6f 6e 65 7d 0a 09 09  xtends {Tone}...
672a0 20 2a 20 20 40 70 61 72 61 6d 20 7b 4e 6f 72 6d   *  @param {Norm
672b0 61 6c 52 61 6e 67 65 7c 4f 62 6a 65 63 74 7d 20  alRange|Object} 
672c0 5b 77 65 74 5d 20 54 68 65 20 73 74 61 72 74 69  [wet] The starti
672d0 6e 67 20 77 65 74 20 76 61 6c 75 65 2e 20 0a 09  ng wet value. ..
672e0 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 45  . */..    Tone.E
672f0 66 66 65 63 74 20 3d 20 66 75 6e 63 74 69 6f 6e  ffect = function
67300 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 74   () {..        t
67310 68 69 73 2e 63 72 65 61 74 65 49 6e 73 4f 75 74  his.createInsOut
67320 73 28 31 2c 20 31 29 3b 0a 09 20 20 20 20 20 20  s(1, 1);..      
67330 20 20 2f 2f 67 65 74 20 61 6c 6c 20 6f 66 20 74    //get all of t
67340 68 65 20 64 65 66 61 75 6c 74 73 0a 09 20 20 20  he defaults..   
67350 20 20 20 20 20 76 61 72 20 6f 70 74 69 6f 6e 73       var options
67360 20 3d 20 74 68 69 73 2e 6f 70 74 69 6f 6e 73 4f   = this.optionsO
67370 62 6a 65 63 74 28 61 72 67 75 6d 65 6e 74 73 2c  bject(arguments,
67380 20 5b 27 77 65 74 27 5d 2c 20 54 6f 6e 65 2e 45   ['wet'], Tone.E
67390 66 66 65 63 74 2e 64 65 66 61 75 6c 74 73 29 3b  ffect.defaults);
673a0 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
673b0 09 20 2a 20 20 74 68 65 20 64 72 79 77 65 74 20  . *  the drywet 
673c0 6b 6e 6f 62 20 74 6f 20 63 6f 6e 74 72 6f 6c 20  knob to control 
673d0 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 65 66  the amount of ef
673e0 66 65 63 74 0a 09 09 09 20 2a 20 20 40 74 79 70  fect.... *  @typ
673f0 65 20 7b 54 6f 6e 65 2e 43 72 6f 73 73 46 61 64  e {Tone.CrossFad
67400 65 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61  e}.... *  @priva
67410 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  te.... */..     
67420 20 20 20 74 68 69 73 2e 5f 64 72 79 57 65 74 20     this._dryWet 
67430 3d 20 6e 65 77 20 54 6f 6e 65 2e 43 72 6f 73 73  = new Tone.Cross
67440 46 61 64 65 28 6f 70 74 69 6f 6e 73 2e 77 65 74  Fade(options.wet
67450 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
67460 09 09 09 20 2a 20 20 54 68 65 20 77 65 74 20 63  ... *  The wet c
67470 6f 6e 74 72 6f 6c 20 69 73 20 68 6f 77 20 6d 75  ontrol is how mu
67480 63 68 20 6f 66 20 74 68 65 20 65 66 66 65 63 74  ch of the effect
67490 65 64 0a 09 09 09 20 2a 20 20 77 69 6c 6c 20 70  ed.... *  will p
674a0 61 73 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74  ass through to t
674b0 68 65 20 6f 75 74 70 75 74 2e 20 31 20 3d 20 31  he output. 1 = 1
674c0 30 30 25 20 65 66 66 65 63 74 65 64 0a 09 09 09  00% effected....
674d0 20 2a 20 20 73 69 67 6e 61 6c 2c 20 30 20 3d 20   *  signal, 0 = 
674e0 31 30 30 25 20 64 72 79 20 73 69 67 6e 61 6c 2e  100% dry signal.
674f0 20 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b   .... *  @type {
67500 4e 6f 72 6d 61 6c 52 61 6e 67 65 7d 0a 09 09 09  NormalRange}....
67510 20 2a 20 20 40 73 69 67 6e 61 6c 0a 09 09 09 20   *  @signal.... 
67520 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
67530 2e 77 65 74 20 3d 20 74 68 69 73 2e 5f 64 72 79  .wet = this._dry
67540 57 65 74 2e 66 61 64 65 3b 0a 09 20 20 20 20 20  Wet.fade;..     
67550 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 63 6f     /**.... *  co
67560 6e 6e 65 63 74 20 74 68 65 20 65 66 66 65 63 74  nnect the effect
67570 53 65 6e 64 20 74 6f 20 74 68 65 20 69 6e 70 75  Send to the inpu
67580 74 20 6f 66 20 68 74 65 20 65 66 66 65 63 74 0a  t of hte effect.
67590 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54 6f  ... *  @type {To
675a0 6e 65 2e 47 61 69 6e 7d 0a 09 09 09 20 2a 20 20  ne.Gain}.... *  
675b0 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a  @private.... */.
675c0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 65 66  .        this.ef
675d0 66 65 63 74 53 65 6e 64 20 3d 20 6e 65 77 20 54  fectSend = new T
675e0 6f 6e 65 2e 47 61 69 6e 28 29 3b 0a 09 20 20 20  one.Gain();..   
675f0 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
67600 63 6f 6e 6e 65 63 74 20 74 68 65 20 6f 75 74 70  connect the outp
67610 75 74 20 6f 66 20 74 68 65 20 65 66 66 65 63 74  ut of the effect
67620 20 74 6f 20 74 68 65 20 65 66 66 65 63 74 52 65   to the effectRe
67630 74 75 72 6e 0a 09 09 09 20 2a 20 20 40 74 79 70  turn.... *  @typ
67640 65 20 7b 54 6f 6e 65 2e 47 61 69 6e 7d 0a 09 09  e {Tone.Gain}...
67650 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
67660 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
67670 69 73 2e 65 66 66 65 63 74 52 65 74 75 72 6e 20  is.effectReturn 
67680 3d 20 6e 65 77 20 54 6f 6e 65 2e 47 61 69 6e 28  = new Tone.Gain(
67690 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 63 6f  );..        //co
676a0 6e 6e 65 63 74 69 6f 6e 73 0a 09 20 20 20 20 20  nnections..     
676b0 20 20 20 74 68 69 73 2e 69 6e 70 75 74 2e 63 6f     this.input.co
676c0 6e 6e 65 63 74 28 74 68 69 73 2e 5f 64 72 79 57  nnect(this._dryW
676d0 65 74 2e 61 29 3b 0a 09 20 20 20 20 20 20 20 20  et.a);..        
676e0 74 68 69 73 2e 69 6e 70 75 74 2e 63 6f 6e 6e 65  this.input.conne
676f0 63 74 28 74 68 69 73 2e 65 66 66 65 63 74 53 65  ct(this.effectSe
67700 6e 64 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  nd);..        th
67710 69 73 2e 65 66 66 65 63 74 52 65 74 75 72 6e 2e  is.effectReturn.
67720 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e 5f 64 72  connect(this._dr
67730 79 57 65 74 2e 62 29 3b 0a 09 20 20 20 20 20 20  yWet.b);..      
67740 20 20 74 68 69 73 2e 5f 64 72 79 57 65 74 2e 63    this._dryWet.c
67750 6f 6e 6e 65 63 74 28 74 68 69 73 2e 6f 75 74 70  onnect(this.outp
67760 75 74 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ut);..        th
67770 69 73 2e 5f 72 65 61 64 4f 6e 6c 79 28 5b 27 77  is._readOnly(['w
67780 65 74 27 5d 29 3b 0a 09 20 20 20 20 7d 3b 0a 09  et']);..    };..
67790 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28      Tone.extend(
677a0 54 6f 6e 65 2e 45 66 66 65 63 74 29 3b 0a 09 20  Tone.Effect);.. 
677b0 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 73 74     /**... *  @st
677c0 61 74 69 63 0a 09 09 20 2a 20 20 40 74 79 70 65  atic... *  @type
677d0 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a   {Object}... */.
677e0 09 20 20 20 20 54 6f 6e 65 2e 45 66 66 65 63 74  .    Tone.Effect
677f0 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b 20 27 77  .defaults = { 'w
67800 65 74 27 3a 20 31 20 7d 3b 0a 09 20 20 20 20 2f  et': 1 };..    /
67810 2a 2a 0a 09 09 20 2a 20 20 63 68 61 69 6e 73 20  **... *  chains 
67820 74 68 65 20 65 66 66 65 63 74 20 69 6e 20 62 65  the effect in be
67830 74 77 65 65 6e 20 74 68 65 20 65 66 66 65 63 74  tween the effect
67840 53 65 6e 64 20 61 6e 64 20 65 66 66 65 63 74 52  Send and effectR
67850 65 74 75 72 6e 0a 09 09 20 2a 20 20 40 70 61 72  eturn... *  @par
67860 61 6d 20 20 7b 54 6f 6e 65 7d 20 65 66 66 65 63  am  {Tone} effec
67870 74 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  t... *  @private
67880 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20  ... *  @returns 
67890 7b 54 6f 6e 65 2e 45 66 66 65 63 74 7d 20 74 68  {Tone.Effect} th
678a0 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  is... */..    To
678b0 6e 65 2e 45 66 66 65 63 74 2e 70 72 6f 74 6f 74  ne.Effect.protot
678c0 79 70 65 2e 63 6f 6e 6e 65 63 74 45 66 66 65 63  ype.connectEffec
678d0 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 65 66  t = function (ef
678e0 66 65 63 74 29 20 7b 0a 09 20 20 20 20 20 20 20  fect) {..       
678f0 20 74 68 69 73 2e 65 66 66 65 63 74 53 65 6e 64   this.effectSend
67900 2e 63 68 61 69 6e 28 65 66 66 65 63 74 2c 20 74  .chain(effect, t
67910 68 69 73 2e 65 66 66 65 63 74 52 65 74 75 72 6e  his.effectReturn
67920 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
67930 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b  rn this;..    };
67940 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
67950 43 6c 65 61 6e 20 75 70 2e 20 0a 09 09 20 2a 20  Clean up. ... * 
67960 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e   @returns {Tone.
67970 45 66 66 65 63 74 7d 20 74 68 69 73 0a 09 09 20  Effect} this... 
67980 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 45 66 66  */..    Tone.Eff
67990 65 63 74 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69  ect.prototype.di
679a0 73 70 6f 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e  spose = function
679b0 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 54   () {..        T
679c0 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69  one.prototype.di
679d0 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69 73 29  spose.call(this)
679e0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
679f0 5f 64 72 79 57 65 74 2e 64 69 73 70 6f 73 65 28  _dryWet.dispose(
67a00 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
67a10 2e 5f 64 72 79 57 65 74 20 3d 20 6e 75 6c 6c 3b  ._dryWet = null;
67a20 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 65  ..        this.e
67a30 66 66 65 63 74 53 65 6e 64 2e 64 69 73 70 6f 73  ffectSend.dispos
67a40 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  e();..        th
67a50 69 73 2e 65 66 66 65 63 74 53 65 6e 64 20 3d 20  is.effectSend = 
67a60 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74  null;..        t
67a70 68 69 73 2e 65 66 66 65 63 74 52 65 74 75 72 6e  his.effectReturn
67a80 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20  .dispose();..   
67a90 20 20 20 20 20 74 68 69 73 2e 65 66 66 65 63 74       this.effect
67aa0 52 65 74 75 72 6e 20 3d 20 6e 75 6c 6c 3b 0a 09  Return = null;..
67ab0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 77 72          this._wr
67ac0 69 74 61 62 6c 65 28 5b 27 77 65 74 27 5d 29 3b  itable(['wet']);
67ad0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 77  ..        this.w
67ae0 65 74 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  et = null;..    
67af0 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b      return this;
67b00 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 72 65  ..    };..    re
67b10 74 75 72 6e 20 54 6f 6e 65 2e 45 66 66 65 63 74  turn Tone.Effect
67b20 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66  ;..});..Module(f
67b30 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b  unction (Tone) {
67b40 0a 09 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a  ..    ..    /**.
67b50 09 09 20 2a 20 20 40 63 6c 61 73 73 20 54 6f 6e  .. *  @class Ton
67b60 65 2e 41 75 74 6f 46 69 6c 74 65 72 20 69 73 20  e.AutoFilter is 
67b70 61 20 54 6f 6e 65 2e 46 69 6c 74 65 72 20 77 69  a Tone.Filter wi
67b80 74 68 20 61 20 54 6f 6e 65 2e 4c 46 4f 20 63 6f  th a Tone.LFO co
67b90 6e 6e 65 63 74 65 64 20 74 6f 20 74 68 65 20 66  nnected to the f
67ba0 69 6c 74 65 72 20 63 75 74 6f 66 66 20 66 72 65  ilter cutoff fre
67bb0 71 75 65 6e 63 79 2e 0a 09 09 20 2a 20 20 20 20  quency.... *    
67bc0 20 20 20 20 20 53 65 74 74 69 6e 67 20 74 68 65       Setting the
67bd0 20 4c 46 4f 20 72 61 74 65 20 61 6e 64 20 64 65   LFO rate and de
67be0 70 74 68 20 61 6c 6c 6f 77 73 20 66 6f 72 20 63  pth allows for c
67bf0 6f 6e 74 72 6f 6c 20 6f 76 65 72 20 74 68 65 20  ontrol over the 
67c00 66 69 6c 74 65 72 20 6d 6f 64 75 6c 61 74 69 6f  filter modulatio
67c10 6e 20 72 61 74 65 20 0a 09 09 20 2a 20 20 20 20  n rate ... *    
67c20 20 20 20 20 20 61 6e 64 20 64 65 70 74 68 2e 0a       and depth..
67c30 09 09 20 2a 0a 09 09 20 2a 20 20 40 63 6f 6e 73  .. *... *  @cons
67c40 74 72 75 63 74 6f 72 0a 09 09 20 2a 20 20 40 65  tructor... *  @e
67c50 78 74 65 6e 64 73 20 7b 54 6f 6e 65 2e 45 66 66  xtends {Tone.Eff
67c60 65 63 74 7d 0a 09 09 20 2a 20 20 40 70 61 72 61  ect}... *  @para
67c70 6d 20 7b 54 69 6d 65 7c 4f 62 6a 65 63 74 7d 20  m {Time|Object} 
67c80 5b 66 72 65 71 75 65 6e 63 79 5d 20 54 68 65 20  [frequency] The 
67c90 72 61 74 65 20 6f 66 20 74 68 65 20 4c 46 4f 2e  rate of the LFO.
67ca0 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 46  ... *  @param {F
67cb0 72 65 71 75 65 6e 63 79 3d 7d 20 62 61 73 65 46  requency=} baseF
67cc0 72 65 71 75 65 6e 63 79 20 54 68 65 20 6c 6f 77  requency The low
67cd0 65 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  er value of the 
67ce0 4c 46 4f 73 20 6f 73 63 69 6c 6c 61 74 69 6f 6e  LFOs oscillation
67cf0 0a 09 20 09 20 2a 20 20 40 70 61 72 61 6d 20 7b  .. . *  @param {
67d00 46 72 65 71 75 65 6e 63 79 3d 7d 20 6f 63 74 61  Frequency=} octa
67d10 76 65 73 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  ves The number o
67d20 66 20 6f 63 74 61 76 65 73 20 61 62 6f 76 65 20  f octaves above 
67d30 74 68 65 20 62 61 73 65 46 72 65 71 75 65 6e 63  the baseFrequenc
67d40 79 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65  y... *  @example
67d50 0a 09 09 20 2a 20 2f 2f 63 72 65 61 74 65 20 61  ... * //create a
67d60 6e 20 61 75 74 6f 66 69 6c 74 65 72 20 61 6e 64  n autofilter and
67d70 20 73 74 61 72 74 20 69 74 27 73 20 4c 46 4f 0a   start it's LFO.
67d80 09 09 20 2a 20 76 61 72 20 61 75 74 6f 46 69 6c  .. * var autoFil
67d90 74 65 72 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 41  ter = new Tone.A
67da0 75 74 6f 46 69 6c 74 65 72 28 22 34 6e 22 29 2e  utoFilter("4n").
67db0 74 6f 4d 61 73 74 65 72 28 29 2e 73 74 61 72 74  toMaster().start
67dc0 28 29 3b 0a 09 09 20 2a 20 2f 2f 72 6f 75 74 65  ();... * //route
67dd0 20 61 6e 20 6f 73 63 69 6c 6c 61 74 6f 72 20 74   an oscillator t
67de0 68 72 6f 75 67 68 20 74 68 65 20 66 69 6c 74 65  hrough the filte
67df0 72 20 61 6e 64 20 73 74 61 72 74 20 69 74 0a 09  r and start it..
67e00 09 20 2a 20 76 61 72 20 6f 73 63 69 6c 6c 61 74  . * var oscillat
67e10 6f 72 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4f 73  or = new Tone.Os
67e20 63 69 6c 6c 61 74 6f 72 28 29 2e 63 6f 6e 6e 65  cillator().conne
67e30 63 74 28 61 75 74 6f 46 69 6c 74 65 72 29 2e 73  ct(autoFilter).s
67e40 74 61 72 74 28 29 3b 0a 09 09 20 2a 2f 0a 09 20  tart();... */.. 
67e50 20 20 20 54 6f 6e 65 2e 41 75 74 6f 46 69 6c 74     Tone.AutoFilt
67e60 65 72 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  er = function ()
67e70 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20   {..        var 
67e80 6f 70 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e 6f  options = this.o
67e90 70 74 69 6f 6e 73 4f 62 6a 65 63 74 28 61 72 67  ptionsObject(arg
67ea0 75 6d 65 6e 74 73 2c 20 5b 0a 09 20 20 20 20 20  uments, [..     
67eb0 20 20 20 20 20 20 20 27 66 72 65 71 75 65 6e 63         'frequenc
67ec0 79 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  y',..           
67ed0 20 27 62 61 73 65 46 72 65 71 75 65 6e 63 79 27   'baseFrequency'
67ee0 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
67ef0 6f 63 74 61 76 65 73 27 0a 09 20 20 20 20 20 20  octaves'..      
67f00 20 20 5d 2c 20 54 6f 6e 65 2e 41 75 74 6f 46 69    ], Tone.AutoFi
67f10 6c 74 65 72 2e 64 65 66 61 75 6c 74 73 29 3b 0a  lter.defaults);.
67f20 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 45 66  .        Tone.Ef
67f30 66 65 63 74 2e 63 61 6c 6c 28 74 68 69 73 2c 20  fect.call(this, 
67f40 6f 70 74 69 6f 6e 73 29 3b 0a 09 20 20 20 20 20  options);..     
67f50 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 74 68     /**.... *  th
67f60 65 20 6c 66 6f 20 77 68 69 63 68 20 64 72 69 76  e lfo which driv
67f70 65 73 20 74 68 65 20 66 69 6c 74 65 72 20 63 75  es the filter cu
67f80 74 6f 66 66 0a 09 09 09 20 2a 20 20 40 74 79 70  toff.... *  @typ
67f90 65 20 7b 54 6f 6e 65 2e 4c 46 4f 7d 0a 09 09 09  e {Tone.LFO}....
67fa0 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
67fb0 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
67fc0 73 2e 5f 6c 66 6f 20 3d 20 6e 65 77 20 54 6f 6e  s._lfo = new Ton
67fd0 65 2e 4c 46 4f 28 7b 0a 09 20 20 20 20 20 20 20  e.LFO({..       
67fe0 20 20 20 20 20 27 66 72 65 71 75 65 6e 63 79 27       'frequency'
67ff0 3a 20 6f 70 74 69 6f 6e 73 2e 66 72 65 71 75 65  : options.freque
68000 6e 63 79 2c 0a 09 20 20 20 20 20 20 20 20 20 20  ncy,..          
68010 20 20 27 61 6d 70 6c 69 74 75 64 65 27 3a 20 6f    'amplitude': o
68020 70 74 69 6f 6e 73 2e 64 65 70 74 68 0a 09 20 20  ptions.depth..  
68030 20 20 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 20        });..     
68040 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 54 68 65     /**.... * The
68050 20 72 61 6e 67 65 20 6f 66 20 74 68 65 20 66 69   range of the fi
68060 6c 74 65 72 20 6d 6f 64 75 6c 61 74 69 6e 67 20  lter modulating 
68070 62 65 74 77 65 65 6e 20 74 68 65 20 6d 69 6e 20  between the min 
68080 61 6e 64 20 6d 61 78 20 66 72 65 71 75 65 6e 63  and max frequenc
68090 79 2e 20 0a 09 09 09 20 2a 20 30 20 3d 20 6e 6f  y. .... * 0 = no
680a0 20 6d 6f 64 75 6c 61 74 69 6f 6e 2e 20 31 20 3d   modulation. 1 =
680b0 20 66 75 6c 6c 20 6d 6f 64 75 6c 61 74 69 6f 6e   full modulation
680c0 2e 0a 09 09 09 20 2a 20 40 74 79 70 65 20 7b 4e  ..... * @type {N
680d0 6f 72 6d 61 6c 52 61 6e 67 65 7d 0a 09 09 09 20  ormalRange}.... 
680e0 2a 20 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f  * @signal.... */
680f0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 64  ..        this.d
68100 65 70 74 68 20 3d 20 74 68 69 73 2e 5f 6c 66 6f  epth = this._lfo
68110 2e 61 6d 70 6c 69 74 75 64 65 3b 0a 09 20 20 20  .amplitude;..   
68120 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 48       /**.... * H
68130 6f 77 20 66 61 73 74 20 74 68 65 20 66 69 6c 74  ow fast the filt
68140 65 72 20 6d 6f 64 75 6c 61 74 65 73 20 62 65 74  er modulates bet
68150 77 65 65 6e 20 6d 69 6e 20 61 6e 64 20 6d 61 78  ween min and max
68160 2e 20 0a 09 09 09 20 2a 20 40 74 79 70 65 20 7b  . .... * @type {
68170 46 72 65 71 75 65 6e 63 79 7d 0a 09 09 09 20 2a  Frequency}.... *
68180 20 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f 0a   @signal.... */.
68190 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 66 72  .        this.fr
681a0 65 71 75 65 6e 63 79 20 3d 20 74 68 69 73 2e 5f  equency = this._
681b0 6c 66 6f 2e 66 72 65 71 75 65 6e 63 79 3b 0a 09  lfo.frequency;..
681c0 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
681d0 2a 20 20 54 68 65 20 66 69 6c 74 65 72 20 6e 6f  *  The filter no
681e0 64 65 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  de.... *  @type 
681f0 7b 54 6f 6e 65 2e 46 69 6c 74 65 72 7d 0a 09 09  {Tone.Filter}...
68200 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
68210 69 73 2e 66 69 6c 74 65 72 20 3d 20 6e 65 77 20  is.filter = new 
68220 54 6f 6e 65 2e 46 69 6c 74 65 72 28 6f 70 74 69  Tone.Filter(opti
68230 6f 6e 73 2e 66 69 6c 74 65 72 29 3b 0a 09 20 20  ons.filter);..  
68240 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
68250 20 54 68 65 20 6f 63 74 61 76 65 73 20 70 6c 61   The octaves pla
68260 63 65 68 6f 6c 64 65 72 0a 09 09 09 20 2a 20 20  ceholder.... *  
68270 40 74 79 70 65 20 7b 50 6f 73 69 74 69 76 65 7d  @type {Positive}
68280 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  .... *  @private
68290 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
682a0 20 74 68 69 73 2e 5f 6f 63 74 61 76 65 73 20 3d   this._octaves =
682b0 20 30 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 63   0;..        //c
682c0 6f 6e 6e 65 63 74 69 6f 6e 73 0a 09 20 20 20 20  onnections..    
682d0 20 20 20 20 74 68 69 73 2e 63 6f 6e 6e 65 63 74      this.connect
682e0 45 66 66 65 63 74 28 74 68 69 73 2e 66 69 6c 74  Effect(this.filt
682f0 65 72 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  er);..        th
68300 69 73 2e 5f 6c 66 6f 2e 63 6f 6e 6e 65 63 74 28  is._lfo.connect(
68310 74 68 69 73 2e 66 69 6c 74 65 72 2e 66 72 65 71  this.filter.freq
68320 75 65 6e 63 79 29 3b 0a 09 20 20 20 20 20 20 20  uency);..       
68330 20 74 68 69 73 2e 74 79 70 65 20 3d 20 6f 70 74   this.type = opt
68340 69 6f 6e 73 2e 74 79 70 65 3b 0a 09 20 20 20 20  ions.type;..    
68350 20 20 20 20 74 68 69 73 2e 5f 72 65 61 64 4f 6e      this._readOn
68360 6c 79 28 5b 0a 09 20 20 20 20 20 20 20 20 20 20  ly([..          
68370 20 20 27 66 72 65 71 75 65 6e 63 79 27 2c 0a 09    'frequency',..
68380 20 20 20 20 20 20 20 20 20 20 20 20 27 64 65 70              'dep
68390 74 68 27 0a 09 20 20 20 20 20 20 20 20 5d 29 3b  th'..        ]);
683a0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f  ..        this.o
683b0 63 74 61 76 65 73 20 3d 20 6f 70 74 69 6f 6e 73  ctaves = options
683c0 2e 6f 63 74 61 76 65 73 3b 0a 09 20 20 20 20 20  .octaves;..     
683d0 20 20 20 74 68 69 73 2e 62 61 73 65 46 72 65 71     this.baseFreq
683e0 75 65 6e 63 79 20 3d 20 6f 70 74 69 6f 6e 73 2e  uency = options.
683f0 62 61 73 65 46 72 65 71 75 65 6e 63 79 3b 0a 09  baseFrequency;..
68400 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2f 65 78      };..    //ex
68410 74 65 6e 64 20 45 66 66 65 63 74 0a 09 20 20 20  tend Effect..   
68420 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e   Tone.extend(Ton
68430 65 2e 41 75 74 6f 46 69 6c 74 65 72 2c 20 54 6f  e.AutoFilter, To
68440 6e 65 2e 45 66 66 65 63 74 29 3b 0a 09 20 20 20  ne.Effect);..   
68450 20 2f 2a 2a 0a 09 09 20 2a 20 20 64 65 66 61 75   /**... *  defau
68460 6c 74 73 0a 09 09 20 2a 20 20 40 73 74 61 74 69  lts... *  @stati
68470 63 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4f  c... *  @type {O
68480 62 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a 09 20 20  bject}... */..  
68490 20 20 54 6f 6e 65 2e 41 75 74 6f 46 69 6c 74 65    Tone.AutoFilte
684a0 72 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b 0a 09  r.defaults = {..
684b0 20 20 20 20 20 20 20 20 27 66 72 65 71 75 65 6e          'frequen
684c0 63 79 27 3a 20 31 2c 0a 09 20 20 20 20 20 20 20  cy': 1,..       
684d0 20 27 74 79 70 65 27 3a 20 27 73 69 6e 65 27 2c   'type': 'sine',
684e0 0a 09 20 20 20 20 20 20 20 20 27 64 65 70 74 68  ..        'depth
684f0 27 3a 20 31 2c 0a 09 20 20 20 20 20 20 20 20 27  ': 1,..        '
68500 62 61 73 65 46 72 65 71 75 65 6e 63 79 27 3a 20  baseFrequency': 
68510 32 30 30 2c 0a 09 20 20 20 20 20 20 20 20 27 6f  200,..        'o
68520 63 74 61 76 65 73 27 3a 20 32 2e 36 2c 0a 09 20  ctaves': 2.6,.. 
68530 20 20 20 20 20 20 20 27 66 69 6c 74 65 72 27 3a         'filter':
68540 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
68550 27 74 79 70 65 27 3a 20 27 6c 6f 77 70 61 73 73  'type': 'lowpass
68560 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ',..            
68570 27 72 6f 6c 6c 6f 66 66 27 3a 20 2d 31 32 2c 0a  'rolloff': -12,.
68580 09 20 20 20 20 20 20 20 20 20 20 20 20 27 51 27  .            'Q'
68590 3a 20 31 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  : 1..        }..
685a0 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
685b0 09 09 20 2a 20 53 74 61 72 74 20 74 68 65 20 65  .. * Start the e
685c0 66 66 65 63 74 2e 0a 09 09 20 2a 20 40 70 61 72  ffect.... * @par
685d0 61 6d 20 7b 54 69 6d 65 7d 20 5b 74 69 6d 65 3d  am {Time} [time=
685e0 6e 6f 77 5d 20 57 68 65 6e 20 74 68 65 20 4c 46  now] When the LF
685f0 4f 20 77 69 6c 6c 20 73 74 61 72 74 2e 20 0a 09  O will start. ..
68600 09 20 2a 20 40 72 65 74 75 72 6e 73 20 7b 54 6f  . * @returns {To
68610 6e 65 2e 41 75 74 6f 46 69 6c 74 65 72 7d 20 74  ne.AutoFilter} t
68620 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  his... */..    T
68630 6f 6e 65 2e 41 75 74 6f 46 69 6c 74 65 72 2e 70  one.AutoFilter.p
68640 72 6f 74 6f 74 79 70 65 2e 73 74 61 72 74 20 3d  rototype.start =
68650 20 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65 29   function (time)
68660 20 7b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73   {..        this
68670 2e 5f 6c 66 6f 2e 73 74 61 72 74 28 74 69 6d 65  ._lfo.start(time
68680 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
68690 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b  rn this;..    };
686a0 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 53  ..    /**... * S
686b0 74 6f 70 20 74 68 65 20 65 66 66 65 63 74 2e 0a  top the effect..
686c0 09 09 20 2a 20 40 70 61 72 61 6d 20 7b 54 69 6d  .. * @param {Tim
686d0 65 7d 20 5b 74 69 6d 65 3d 6e 6f 77 5d 20 57 68  e} [time=now] Wh
686e0 65 6e 20 74 68 65 20 4c 46 4f 20 77 69 6c 6c 20  en the LFO will 
686f0 73 74 6f 70 2e 20 0a 09 09 20 2a 20 40 72 65 74  stop. ... * @ret
68700 75 72 6e 73 20 7b 54 6f 6e 65 2e 41 75 74 6f 46  urns {Tone.AutoF
68710 69 6c 74 65 72 7d 20 74 68 69 73 0a 09 09 20 2a  ilter} this... *
68720 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 41 75 74 6f  /..    Tone.Auto
68730 46 69 6c 74 65 72 2e 70 72 6f 74 6f 74 79 70 65  Filter.prototype
68740 2e 73 74 6f 70 20 3d 20 66 75 6e 63 74 69 6f 6e  .stop = function
68750 20 28 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20   (time) {..     
68760 20 20 20 74 68 69 73 2e 5f 6c 66 6f 2e 73 74 6f     this._lfo.sto
68770 70 28 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20  p(time);..      
68780 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09    return this;..
68790 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
687a0 09 09 20 2a 20 53 79 6e 63 20 74 68 65 20 66 69  .. * Sync the fi
687b0 6c 74 65 72 20 74 6f 20 74 68 65 20 74 72 61 6e  lter to the tran
687c0 73 70 6f 72 74 2e 0a 09 09 20 2a 20 40 70 61 72  sport.... * @par
687d0 61 6d 20 7b 54 69 6d 65 7d 20 5b 64 65 6c 61 79  am {Time} [delay
687e0 3d 30 5d 20 44 65 6c 61 79 20 74 69 6d 65 20 62  =0] Delay time b
687f0 65 66 6f 72 65 20 73 74 61 72 74 69 6e 67 20 74  efore starting t
68800 68 65 20 65 66 66 65 63 74 20 61 66 74 65 72 20  he effect after 
68810 74 68 65 0a 09 09 20 2a 20 20 20 20 20 20 20 20  the... *        
68820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68830 20 20 20 20 20 20 20 54 72 61 6e 73 70 6f 72 74         Transport
68840 20 68 61 73 20 73 74 61 72 74 65 64 2e 20 0a 09   has started. ..
68850 09 20 2a 20 40 72 65 74 75 72 6e 73 20 7b 54 6f  . * @returns {To
68860 6e 65 2e 41 75 74 6f 46 69 6c 74 65 72 7d 20 74  ne.AutoFilter} t
68870 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  his... */..    T
68880 6f 6e 65 2e 41 75 74 6f 46 69 6c 74 65 72 2e 70  one.AutoFilter.p
68890 72 6f 74 6f 74 79 70 65 2e 73 79 6e 63 20 3d 20  rototype.sync = 
688a0 66 75 6e 63 74 69 6f 6e 20 28 64 65 6c 61 79 29  function (delay)
688b0 20 7b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73   {..        this
688c0 2e 5f 6c 66 6f 2e 73 79 6e 63 28 64 65 6c 61 79  ._lfo.sync(delay
688d0 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
688e0 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b  rn this;..    };
688f0 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 55  ..    /**... * U
68900 6e 73 79 6e 63 20 74 68 65 20 66 69 6c 74 65 72  nsync the filter
68910 20 66 72 6f 6d 20 74 68 65 20 74 72 61 6e 73 70   from the transp
68920 6f 72 74 2e 0a 09 09 20 2a 20 40 72 65 74 75 72  ort.... * @retur
68930 6e 73 20 7b 54 6f 6e 65 2e 41 75 74 6f 46 69 6c  ns {Tone.AutoFil
68940 74 65 72 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a  ter} this... */.
68950 09 20 20 20 20 54 6f 6e 65 2e 41 75 74 6f 46 69  .    Tone.AutoFi
68960 6c 74 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e 75  lter.prototype.u
68970 6e 73 79 6e 63 20 3d 20 66 75 6e 63 74 69 6f 6e  nsync = function
68980 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 74   () {..        t
68990 68 69 73 2e 5f 6c 66 6f 2e 75 6e 73 79 6e 63 28  his._lfo.unsync(
689a0 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
689b0 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b  rn this;..    };
689c0 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54  ..    /**... * T
689d0 79 70 65 20 6f 66 20 6f 73 63 69 6c 6c 61 74 6f  ype of oscillato
689e0 72 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  r attached to th
689f0 65 20 41 75 74 6f 46 69 6c 74 65 72 2e 20 0a 09  e AutoFilter. ..
68a00 09 20 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  . * Possible val
68a10 75 65 73 3a 20 22 73 69 6e 65 22 2c 20 22 73 71  ues: "sine", "sq
68a20 75 61 72 65 22 2c 20 22 74 72 69 61 6e 67 6c 65  uare", "triangle
68a30 22 2c 20 22 73 61 77 74 6f 6f 74 68 22 2e 0a 09  ", "sawtooth"...
68a40 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f  . * @memberOf To
68a50 6e 65 2e 41 75 74 6f 46 69 6c 74 65 72 23 0a 09  ne.AutoFilter#..
68a60 09 20 2a 20 40 74 79 70 65 20 7b 73 74 72 69 6e  . * @type {strin
68a70 67 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 74 79  g}... * @name ty
68a80 70 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62  pe... */..    Ob
68a90 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65  ject.definePrope
68aa0 72 74 79 28 54 6f 6e 65 2e 41 75 74 6f 46 69 6c  rty(Tone.AutoFil
68ab0 74 65 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27  ter.prototype, '
68ac0 74 79 70 65 27 2c 20 7b 0a 09 20 20 20 20 20 20  type', {..      
68ad0 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    get: function 
68ae0 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  () {..          
68af0 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 6c    return this._l
68b00 66 6f 2e 74 79 70 65 3b 0a 09 20 20 20 20 20 20  fo.type;..      
68b10 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65    },..        se
68b20 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 74 79 70  t: function (typ
68b30 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  e) {..          
68b40 20 20 74 68 69 73 2e 5f 6c 66 6f 2e 74 79 70 65    this._lfo.type
68b50 20 3d 20 74 79 70 65 3b 0a 09 20 20 20 20 20 20   = type;..      
68b60 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20    }..    });..  
68b70 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65 20 6d    /**... * The m
68b80 69 6e 69 6d 75 6d 20 76 61 6c 75 65 20 6f 66 20  inimum value of 
68b90 74 68 65 20 66 69 6c 74 65 72 27 73 20 63 75 74  the filter's cut
68ba0 6f 66 66 20 66 72 65 71 75 65 6e 63 79 2e 0a 09  off frequency...
68bb0 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f  . * @memberOf To
68bc0 6e 65 2e 41 75 74 6f 46 69 6c 74 65 72 23 0a 09  ne.AutoFilter#..
68bd0 09 20 2a 20 40 74 79 70 65 20 7b 46 72 65 71 75  . * @type {Frequ
68be0 65 6e 63 79 7d 0a 09 09 20 2a 20 40 6e 61 6d 65  ency}... * @name
68bf0 20 6d 69 6e 0a 09 09 20 2a 2f 0a 09 20 20 20 20   min... */..    
68c00 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f  Object.definePro
68c10 70 65 72 74 79 28 54 6f 6e 65 2e 41 75 74 6f 46  perty(Tone.AutoF
68c20 69 6c 74 65 72 2e 70 72 6f 74 6f 74 79 70 65 2c  ilter.prototype,
68c30 20 27 62 61 73 65 46 72 65 71 75 65 6e 63 79 27   'baseFrequency'
68c40 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74  , {..        get
68c50 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  : function () {.
68c60 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
68c70 75 72 6e 20 74 68 69 73 2e 5f 6c 66 6f 2e 6d 69  urn this._lfo.mi
68c80 6e 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09  n;..        },..
68c90 20 20 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e          set: fun
68ca0 63 74 69 6f 6e 20 28 66 72 65 71 29 20 7b 0a 09  ction (freq) {..
68cb0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
68cc0 2e 5f 6c 66 6f 2e 6d 69 6e 20 3d 20 74 68 69 73  ._lfo.min = this
68cd0 2e 74 6f 46 72 65 71 75 65 6e 63 79 28 66 72 65  .toFrequency(fre
68ce0 71 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  q);..           
68cf0 20 2f 2f 61 6e 64 20 73 65 74 20 74 68 65 20 6d   //and set the m
68d00 61 78 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ax..            
68d10 74 68 69 73 2e 6f 63 74 61 76 65 73 20 3d 20 74  this.octaves = t
68d20 68 69 73 2e 5f 6f 63 74 61 76 65 73 3b 0a 09 20  his._octaves;.. 
68d30 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29         }..    })
68d40 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
68d50 54 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75  The maximum valu
68d60 65 20 6f 66 20 74 68 65 20 66 69 6c 74 65 72 27  e of the filter'
68d70 73 20 63 75 74 6f 66 66 20 66 72 65 71 75 65 6e  s cutoff frequen
68d80 63 79 2e 20 0a 09 09 20 2a 20 40 6d 65 6d 62 65  cy. ... * @membe
68d90 72 4f 66 20 54 6f 6e 65 2e 41 75 74 6f 46 69 6c  rOf Tone.AutoFil
68da0 74 65 72 23 0a 09 09 20 2a 20 40 74 79 70 65 20  ter#... * @type 
68db0 7b 50 6f 73 69 74 69 76 65 7d 0a 09 09 20 2a 20  {Positive}... * 
68dc0 40 6e 61 6d 65 20 6f 63 74 61 76 65 73 0a 09 09  @name octaves...
68dd0 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e   */..    Object.
68de0 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54  defineProperty(T
68df0 6f 6e 65 2e 41 75 74 6f 46 69 6c 74 65 72 2e 70  one.AutoFilter.p
68e00 72 6f 74 6f 74 79 70 65 2c 20 27 6f 63 74 61 76  rototype, 'octav
68e10 65 73 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20  es', {..        
68e20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29  get: function ()
68e30 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
68e40 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 6f 63 74  return this._oct
68e50 61 76 65 73 3b 0a 09 20 20 20 20 20 20 20 20 7d  aves;..        }
68e60 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20  ,..        set: 
68e70 66 75 6e 63 74 69 6f 6e 20 28 6f 63 74 29 20 7b  function (oct) {
68e80 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
68e90 69 73 2e 5f 6f 63 74 61 76 65 73 20 3d 20 6f 63  is._octaves = oc
68ea0 74 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
68eb0 74 68 69 73 2e 5f 6c 66 6f 2e 6d 61 78 20 3d 20  this._lfo.max = 
68ec0 74 68 69 73 2e 62 61 73 65 46 72 65 71 75 65 6e  this.baseFrequen
68ed0 63 79 20 2a 20 4d 61 74 68 2e 70 6f 77 28 32 2c  cy * Math.pow(2,
68ee0 20 6f 63 74 29 3b 0a 09 20 20 20 20 20 20 20 20   oct);..        
68ef0 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20  }..    });..    
68f00 2f 2a 2a 0a 09 09 20 2a 20 20 43 6c 65 61 6e 20  /**... *  Clean 
68f10 75 70 2e 20 0a 09 09 20 2a 20 20 40 72 65 74 75  up. ... *  @retu
68f20 72 6e 73 20 7b 54 6f 6e 65 2e 41 75 74 6f 46 69  rns {Tone.AutoFi
68f30 6c 74 65 72 7d 20 74 68 69 73 0a 09 09 20 2a 2f  lter} this... */
68f40 0a 09 20 20 20 20 54 6f 6e 65 2e 41 75 74 6f 46  ..    Tone.AutoF
68f50 69 6c 74 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e  ilter.prototype.
68f60 64 69 73 70 6f 73 65 20 3d 20 66 75 6e 63 74 69  dispose = functi
68f70 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
68f80 20 54 6f 6e 65 2e 45 66 66 65 63 74 2e 70 72 6f   Tone.Effect.pro
68f90 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 2e 63  totype.dispose.c
68fa0 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20 20 20  all(this);..    
68fb0 20 20 20 20 74 68 69 73 2e 5f 6c 66 6f 2e 64 69      this._lfo.di
68fc0 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
68fd0 20 20 74 68 69 73 2e 5f 6c 66 6f 20 3d 20 6e 75    this._lfo = nu
68fe0 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ll;..        thi
68ff0 73 2e 66 69 6c 74 65 72 2e 64 69 73 70 6f 73 65  s.filter.dispose
69000 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ();..        thi
69010 73 2e 66 69 6c 74 65 72 20 3d 20 6e 75 6c 6c 3b  s.filter = null;
69020 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
69030 77 72 69 74 61 62 6c 65 28 5b 0a 09 20 20 20 20  writable([..    
69040 20 20 20 20 20 20 20 20 27 66 72 65 71 75 65 6e          'frequen
69050 63 79 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20  cy',..          
69060 20 20 27 64 65 70 74 68 27 0a 09 20 20 20 20 20    'depth'..     
69070 20 20 20 5d 29 3b 0a 09 20 20 20 20 20 20 20 20     ]);..        
69080 74 68 69 73 2e 66 72 65 71 75 65 6e 63 79 20 3d  this.frequency =
69090 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
690a0 74 68 69 73 2e 64 65 70 74 68 20 3d 20 6e 75 6c  this.depth = nul
690b0 6c 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75  l;..        retu
690c0 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b  rn this;..    };
690d0 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e  ..    return Ton
690e0 65 2e 41 75 74 6f 46 69 6c 74 65 72 3b 0a 09 7d  e.AutoFilter;..}
690f0 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74  );..Module(funct
69100 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20  ion (Tone) {..  
69110 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a    ..    /**... *
69120 20 20 40 63 6c 61 73 73 20 54 6f 6e 65 2e 41 75    @class Tone.Au
69130 74 6f 50 61 6e 6e 65 72 20 69 73 20 61 20 54 6f  toPanner is a To
69140 6e 65 2e 50 61 6e 6e 65 72 20 77 69 74 68 20 61  ne.Panner with a
69150 6e 20 4c 46 4f 20 63 6f 6e 6e 65 63 74 65 64 20  n LFO connected 
69160 74 6f 20 74 68 65 20 70 61 6e 20 61 6d 6f 75 6e  to the pan amoun
69170 74 2e 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20  t. ... *        
69180 20 4d 6f 72 65 20 6f 6e 20 75 73 69 6e 67 20 61   More on using a
69190 75 74 6f 70 61 6e 6e 65 72 73 20 5b 68 65 72 65  utopanners [here
691a0 5d 28 68 74 74 70 73 3a 2f 2f 77 77 77 2e 61 62  ](https://www.ab
691b0 6c 65 74 6f 6e 2e 63 6f 6d 2f 65 6e 2f 62 6c 6f  leton.com/en/blo
691c0 67 2f 61 75 74 6f 70 61 6e 2d 63 68 6f 70 70 65  g/autopan-choppe
691d0 72 2d 65 66 66 65 63 74 2d 61 6e 64 2d 6d 6f 72  r-effect-and-mor
691e0 65 2d 6c 69 76 65 73 63 68 6f 6f 6c 2f 29 2e 0a  e-liveschool/)..
691f0 09 09 20 2a 0a 09 09 20 2a 20 20 40 63 6f 6e 73  .. *... *  @cons
69200 74 72 75 63 74 6f 72 0a 09 09 20 2a 20 20 40 65  tructor... *  @e
69210 78 74 65 6e 64 73 20 7b 54 6f 6e 65 2e 45 66 66  xtends {Tone.Eff
69220 65 63 74 7d 0a 09 09 20 2a 20 20 40 70 61 72 61  ect}... *  @para
69230 6d 20 7b 46 72 65 71 75 65 6e 63 79 7c 4f 62 6a  m {Frequency|Obj
69240 65 63 74 7d 20 5b 66 72 65 71 75 65 6e 63 79 5d  ect} [frequency]
69250 20 52 61 74 65 20 6f 66 20 6c 65 66 74 2d 72 69   Rate of left-ri
69260 67 68 74 20 6f 73 63 69 6c 6c 61 74 69 6f 6e 2e  ght oscillation.
69270 20 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65   ... *  @example
69280 0a 09 09 20 2a 20 2f 2f 63 72 65 61 74 65 20 61  ... * //create a
69290 6e 20 61 75 74 6f 70 61 6e 6e 65 72 20 61 6e 64  n autopanner and
692a0 20 73 74 61 72 74 20 69 74 27 73 20 4c 46 4f 0a   start it's LFO.
692b0 09 09 20 2a 20 76 61 72 20 61 75 74 6f 50 61 6e  .. * var autoPan
692c0 6e 65 72 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 41  ner = new Tone.A
692d0 75 74 6f 50 61 6e 6e 65 72 28 22 34 6e 22 29 2e  utoPanner("4n").
692e0 74 6f 4d 61 73 74 65 72 28 29 2e 73 74 61 72 74  toMaster().start
692f0 28 29 3b 0a 09 09 20 2a 20 2f 2f 72 6f 75 74 65  ();... * //route
69300 20 61 6e 20 6f 73 63 69 6c 6c 61 74 6f 72 20 74   an oscillator t
69310 68 72 6f 75 67 68 20 74 68 65 20 70 61 6e 6e 65  hrough the panne
69320 72 20 61 6e 64 20 73 74 61 72 74 20 69 74 0a 09  r and start it..
69330 09 20 2a 20 76 61 72 20 6f 73 63 69 6c 6c 61 74  . * var oscillat
69340 6f 72 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4f 73  or = new Tone.Os
69350 63 69 6c 6c 61 74 6f 72 28 29 2e 63 6f 6e 6e 65  cillator().conne
69360 63 74 28 61 75 74 6f 50 61 6e 6e 65 72 29 2e 73  ct(autoPanner).s
69370 74 61 72 74 28 29 3b 0a 09 09 20 2a 2f 0a 09 20  tart();... */.. 
69380 20 20 20 54 6f 6e 65 2e 41 75 74 6f 50 61 6e 6e     Tone.AutoPann
69390 65 72 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  er = function ()
693a0 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20   {..        var 
693b0 6f 70 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e 6f  options = this.o
693c0 70 74 69 6f 6e 73 4f 62 6a 65 63 74 28 61 72 67  ptionsObject(arg
693d0 75 6d 65 6e 74 73 2c 20 5b 27 66 72 65 71 75 65  uments, ['freque
693e0 6e 63 79 27 5d 2c 20 54 6f 6e 65 2e 41 75 74 6f  ncy'], Tone.Auto
693f0 50 61 6e 6e 65 72 2e 64 65 66 61 75 6c 74 73 29  Panner.defaults)
69400 3b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e  ;..        Tone.
69410 45 66 66 65 63 74 2e 63 61 6c 6c 28 74 68 69 73  Effect.call(this
69420 2c 20 6f 70 74 69 6f 6e 73 29 3b 0a 09 20 20 20  , options);..   
69430 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
69440 74 68 65 20 6c 66 6f 20 77 68 69 63 68 20 64 72  the lfo which dr
69450 69 76 65 73 20 74 68 65 20 70 61 6e 6e 69 6e 67  ives the panning
69460 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54  .... *  @type {T
69470 6f 6e 65 2e 4c 46 4f 7d 0a 09 09 09 20 2a 20 20  one.LFO}.... *  
69480 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a  @private.... */.
69490 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c  .        this._l
694a0 66 6f 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4c 46  fo = new Tone.LF
694b0 4f 28 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  O({..           
694c0 20 27 66 72 65 71 75 65 6e 63 79 27 3a 20 6f 70   'frequency': op
694d0 74 69 6f 6e 73 2e 66 72 65 71 75 65 6e 63 79 2c  tions.frequency,
694e0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 61  ..            'a
694f0 6d 70 6c 69 74 75 64 65 27 3a 20 6f 70 74 69 6f  mplitude': optio
69500 6e 73 2e 64 65 70 74 68 2c 0a 09 20 20 20 20 20  ns.depth,..     
69510 20 20 20 20 20 20 20 27 6d 69 6e 27 3a 20 2d 31         'min': -1
69520 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
69530 6d 61 78 27 3a 20 31 0a 09 20 20 20 20 20 20 20  max': 1..       
69540 20 7d 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a   });..        /*
69550 2a 0a 09 09 09 20 2a 20 54 68 65 20 61 6d 6f 75  *.... * The amou
69560 6e 74 20 6f 66 20 70 61 6e 6e 69 6e 67 20 62 65  nt of panning be
69570 74 77 65 65 6e 20 6c 65 66 74 20 61 6e 64 20 72  tween left and r
69580 69 67 68 74 2e 20 0a 09 09 09 20 2a 20 30 20 3d  ight. .... * 0 =
69590 20 61 6c 77 61 79 73 20 63 65 6e 74 65 72 2e 20   always center. 
695a0 31 20 3d 20 66 75 6c 6c 20 72 61 6e 67 65 20 62  1 = full range b
695b0 65 74 77 65 65 6e 20 6c 65 66 74 20 61 6e 64 20  etween left and 
695c0 72 69 67 68 74 2e 20 0a 09 09 09 20 2a 20 40 74  right. .... * @t
695d0 79 70 65 20 7b 4e 6f 72 6d 61 6c 52 61 6e 67 65  ype {NormalRange
695e0 7d 0a 09 09 09 20 2a 20 40 73 69 67 6e 61 6c 0a  }.... * @signal.
695f0 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
69600 74 68 69 73 2e 64 65 70 74 68 20 3d 20 74 68 69  this.depth = thi
69610 73 2e 5f 6c 66 6f 2e 61 6d 70 6c 69 74 75 64 65  s._lfo.amplitude
69620 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
69630 09 09 20 2a 20 20 74 68 65 20 70 61 6e 6e 65 72  .. *  the panner
69640 20 6e 6f 64 65 20 77 68 69 63 68 20 64 6f 65 73   node which does
69650 20 74 68 65 20 70 61 6e 6e 69 6e 67 0a 09 09 09   the panning....
69660 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e   *  @type {Tone.
69670 50 61 6e 6e 65 72 7d 0a 09 09 09 20 2a 20 20 40  Panner}.... *  @
69680 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
69690 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70 61          this._pa
696a0 6e 6e 65 72 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  nner = new Tone.
696b0 50 61 6e 6e 65 72 28 29 3b 0a 09 20 20 20 20 20  Panner();..     
696c0 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 48 6f 77     /**.... * How
696d0 20 66 61 73 74 20 74 68 65 20 70 61 6e 6e 65 72   fast the panner
696e0 20 6d 6f 64 75 6c 61 74 65 73 20 62 65 74 77 65   modulates betwe
696f0 65 6e 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  en left and righ
69700 74 2e 20 0a 09 09 09 20 2a 20 40 74 79 70 65 20  t. .... * @type 
69710 7b 46 72 65 71 75 65 6e 63 79 7d 0a 09 09 09 20  {Frequency}.... 
69720 2a 20 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f  * @signal.... */
69730 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 66  ..        this.f
69740 72 65 71 75 65 6e 63 79 20 3d 20 74 68 69 73 2e  requency = this.
69750 5f 6c 66 6f 2e 66 72 65 71 75 65 6e 63 79 3b 0a  _lfo.frequency;.
69760 09 20 20 20 20 20 20 20 20 2f 2f 63 6f 6e 6e 65  .        //conne
69770 63 74 69 6f 6e 73 0a 09 20 20 20 20 20 20 20 20  ctions..        
69780 74 68 69 73 2e 63 6f 6e 6e 65 63 74 45 66 66 65  this.connectEffe
69790 63 74 28 74 68 69 73 2e 5f 70 61 6e 6e 65 72 29  ct(this._panner)
697a0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
697b0 5f 6c 66 6f 2e 63 6f 6e 6e 65 63 74 28 74 68 69  _lfo.connect(thi
697c0 73 2e 5f 70 61 6e 6e 65 72 2e 70 61 6e 29 3b 0a  s._panner.pan);.
697d0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 79  .        this.ty
697e0 70 65 20 3d 20 6f 70 74 69 6f 6e 73 2e 74 79 70  pe = options.typ
697f0 65 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  e;..        this
69800 2e 5f 72 65 61 64 4f 6e 6c 79 28 5b 0a 09 20 20  ._readOnly([..  
69810 20 20 20 20 20 20 20 20 20 20 27 64 65 70 74 68            'depth
69820 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ',..            
69830 27 66 72 65 71 75 65 6e 63 79 27 0a 09 20 20 20  'frequency'..   
69840 20 20 20 20 20 5d 29 3b 0a 09 20 20 20 20 7d 3b       ]);..    };
69850 0a 09 20 20 20 20 2f 2f 65 78 74 65 6e 64 20 45  ..    //extend E
69860 66 66 65 63 74 0a 09 20 20 20 20 54 6f 6e 65 2e  ffect..    Tone.
69870 65 78 74 65 6e 64 28 54 6f 6e 65 2e 41 75 74 6f  extend(Tone.Auto
69880 50 61 6e 6e 65 72 2c 20 54 6f 6e 65 2e 45 66 66  Panner, Tone.Eff
69890 65 63 74 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09  ect);..    /**..
698a0 09 20 2a 20 20 64 65 66 61 75 6c 74 73 0a 09 09  . *  defaults...
698b0 20 2a 20 20 40 73 74 61 74 69 63 0a 09 09 20 2a   *  @static... *
698c0 20 20 40 74 79 70 65 20 7b 4f 62 6a 65 63 74 7d    @type {Object}
698d0 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
698e0 2e 41 75 74 6f 50 61 6e 6e 65 72 2e 64 65 66 61  .AutoPanner.defa
698f0 75 6c 74 73 20 3d 20 7b 0a 09 20 20 20 20 20 20  ults = {..      
69900 20 20 27 66 72 65 71 75 65 6e 63 79 27 3a 20 31    'frequency': 1
69910 2c 0a 09 20 20 20 20 20 20 20 20 27 74 79 70 65  ,..        'type
69920 27 3a 20 27 73 69 6e 65 27 2c 0a 09 20 20 20 20  ': 'sine',..    
69930 20 20 20 20 27 64 65 70 74 68 27 3a 20 31 0a 09      'depth': 1..
69940 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
69950 09 09 20 2a 20 53 74 61 72 74 20 74 68 65 20 65  .. * Start the e
69960 66 66 65 63 74 2e 0a 09 09 20 2a 20 40 70 61 72  ffect.... * @par
69970 61 6d 20 7b 54 69 6d 65 7d 20 5b 74 69 6d 65 3d  am {Time} [time=
69980 6e 6f 77 5d 20 57 68 65 6e 20 74 68 65 20 4c 46  now] When the LF
69990 4f 20 77 69 6c 6c 20 73 74 61 72 74 2e 20 0a 09  O will start. ..
699a0 09 20 2a 20 40 72 65 74 75 72 6e 73 20 7b 54 6f  . * @returns {To
699b0 6e 65 2e 41 75 74 6f 50 61 6e 6e 65 72 7d 20 74  ne.AutoPanner} t
699c0 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  his... */..    T
699d0 6f 6e 65 2e 41 75 74 6f 50 61 6e 6e 65 72 2e 70  one.AutoPanner.p
699e0 72 6f 74 6f 74 79 70 65 2e 73 74 61 72 74 20 3d  rototype.start =
699f0 20 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65 29   function (time)
69a00 20 7b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73   {..        this
69a10 2e 5f 6c 66 6f 2e 73 74 61 72 74 28 74 69 6d 65  ._lfo.start(time
69a20 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
69a30 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b  rn this;..    };
69a40 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 53  ..    /**... * S
69a50 74 6f 70 20 74 68 65 20 65 66 66 65 63 74 2e 0a  top the effect..
69a60 09 09 20 2a 20 40 70 61 72 61 6d 20 7b 54 69 6d  .. * @param {Tim
69a70 65 7d 20 5b 74 69 6d 65 3d 6e 6f 77 5d 20 57 68  e} [time=now] Wh
69a80 65 6e 20 74 68 65 20 4c 46 4f 20 77 69 6c 6c 20  en the LFO will 
69a90 73 74 6f 70 2e 20 0a 09 09 20 2a 20 40 72 65 74  stop. ... * @ret
69aa0 75 72 6e 73 20 7b 54 6f 6e 65 2e 41 75 74 6f 50  urns {Tone.AutoP
69ab0 61 6e 6e 65 72 7d 20 74 68 69 73 0a 09 09 20 2a  anner} this... *
69ac0 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 41 75 74 6f  /..    Tone.Auto
69ad0 50 61 6e 6e 65 72 2e 70 72 6f 74 6f 74 79 70 65  Panner.prototype
69ae0 2e 73 74 6f 70 20 3d 20 66 75 6e 63 74 69 6f 6e  .stop = function
69af0 20 28 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20   (time) {..     
69b00 20 20 20 74 68 69 73 2e 5f 6c 66 6f 2e 73 74 6f     this._lfo.sto
69b10 70 28 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20  p(time);..      
69b20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09    return this;..
69b30 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
69b40 09 09 20 2a 20 53 79 6e 63 20 74 68 65 20 70 61  .. * Sync the pa
69b50 6e 6e 65 72 20 74 6f 20 74 68 65 20 74 72 61 6e  nner to the tran
69b60 73 70 6f 72 74 2e 0a 09 09 20 2a 20 40 70 61 72  sport.... * @par
69b70 61 6d 20 7b 54 69 6d 65 7d 20 5b 64 65 6c 61 79  am {Time} [delay
69b80 3d 30 5d 20 44 65 6c 61 79 20 74 69 6d 65 20 62  =0] Delay time b
69b90 65 66 6f 72 65 20 73 74 61 72 74 69 6e 67 20 74  efore starting t
69ba0 68 65 20 65 66 66 65 63 74 20 61 66 74 65 72 20  he effect after 
69bb0 74 68 65 0a 09 09 20 2a 20 20 20 20 20 20 20 20  the... *        
69bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69bd0 20 20 20 20 20 20 20 54 72 61 6e 73 70 6f 72 74         Transport
69be0 20 68 61 73 20 73 74 61 72 74 65 64 2e 20 0a 09   has started. ..
69bf0 09 20 2a 20 40 72 65 74 75 72 6e 73 20 7b 54 6f  . * @returns {To
69c00 6e 65 2e 41 75 74 6f 50 61 6e 6e 65 72 7d 20 74  ne.AutoPanner} t
69c10 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  his... */..    T
69c20 6f 6e 65 2e 41 75 74 6f 50 61 6e 6e 65 72 2e 70  one.AutoPanner.p
69c30 72 6f 74 6f 74 79 70 65 2e 73 79 6e 63 20 3d 20  rototype.sync = 
69c40 66 75 6e 63 74 69 6f 6e 20 28 64 65 6c 61 79 29  function (delay)
69c50 20 7b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73   {..        this
69c60 2e 5f 6c 66 6f 2e 73 79 6e 63 28 64 65 6c 61 79  ._lfo.sync(delay
69c70 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
69c80 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b  rn this;..    };
69c90 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 55  ..    /**... * U
69ca0 6e 73 79 6e 63 20 74 68 65 20 70 61 6e 6e 65 72  nsync the panner
69cb0 20 66 72 6f 6d 20 74 68 65 20 74 72 61 6e 73 70   from the transp
69cc0 6f 72 74 0a 09 09 20 2a 20 40 72 65 74 75 72 6e  ort... * @return
69cd0 73 20 7b 54 6f 6e 65 2e 41 75 74 6f 50 61 6e 6e  s {Tone.AutoPann
69ce0 65 72 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09  er} this... */..
69cf0 20 20 20 20 54 6f 6e 65 2e 41 75 74 6f 50 61 6e      Tone.AutoPan
69d00 6e 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e 75 6e  ner.prototype.un
69d10 73 79 6e 63 20 3d 20 66 75 6e 63 74 69 6f 6e 20  sync = function 
69d20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 74 68  () {..        th
69d30 69 73 2e 5f 6c 66 6f 2e 75 6e 73 79 6e 63 28 29  is._lfo.unsync()
69d40 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
69d50 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a  n this;..    };.
69d60 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 79  .    /**... * Ty
69d70 70 65 20 6f 66 20 6f 73 63 69 6c 6c 61 74 6f 72  pe of oscillator
69d80 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
69d90 20 41 75 74 6f 46 69 6c 74 65 72 2e 20 0a 09 09   AutoFilter. ...
69da0 20 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75   * Possible valu
69db0 65 73 3a 20 22 73 69 6e 65 22 2c 20 22 73 71 75  es: "sine", "squ
69dc0 61 72 65 22 2c 20 22 74 72 69 61 6e 67 6c 65 22  are", "triangle"
69dd0 2c 20 22 73 61 77 74 6f 6f 74 68 22 2e 0a 09 09  , "sawtooth"....
69de0 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e   * @memberOf Ton
69df0 65 2e 41 75 74 6f 46 69 6c 74 65 72 23 0a 09 09  e.AutoFilter#...
69e00 20 2a 20 40 74 79 70 65 20 7b 73 74 72 69 6e 67   * @type {string
69e10 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 74 79 70  }... * @name typ
69e20 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a  e... */..    Obj
69e30 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72  ect.defineProper
69e40 74 79 28 54 6f 6e 65 2e 41 75 74 6f 50 61 6e 6e  ty(Tone.AutoPann
69e50 65 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 74  er.prototype, 't
69e60 79 70 65 27 2c 20 7b 0a 09 20 20 20 20 20 20 20  ype', {..       
69e70 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   get: function (
69e80 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
69e90 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 6c 66   return this._lf
69ea0 6f 2e 74 79 70 65 3b 0a 09 20 20 20 20 20 20 20  o.type;..       
69eb0 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74   },..        set
69ec0 3a 20 66 75 6e 63 74 69 6f 6e 20 28 74 79 70 65  : function (type
69ed0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
69ee0 20 74 68 69 73 2e 5f 6c 66 6f 2e 74 79 70 65 20   this._lfo.type 
69ef0 3d 20 74 79 70 65 3b 0a 09 20 20 20 20 20 20 20  = type;..       
69f00 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20   }..    });..   
69f10 20 2f 2a 2a 0a 09 09 20 2a 20 20 63 6c 65 61 6e   /**... *  clean
69f20 20 75 70 0a 09 09 20 2a 20 20 40 72 65 74 75 72   up... *  @retur
69f30 6e 73 20 7b 54 6f 6e 65 2e 41 75 74 6f 50 61 6e  ns {Tone.AutoPan
69f40 6e 65 72 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a  ner} this... */.
69f50 09 20 20 20 20 54 6f 6e 65 2e 41 75 74 6f 50 61  .    Tone.AutoPa
69f60 6e 6e 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e 64  nner.prototype.d
69f70 69 73 70 6f 73 65 20 3d 20 66 75 6e 63 74 69 6f  ispose = functio
69f80 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
69f90 54 6f 6e 65 2e 45 66 66 65 63 74 2e 70 72 6f 74  Tone.Effect.prot
69fa0 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 2e 63 61  otype.dispose.ca
69fb0 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20 20 20 20  ll(this);..     
69fc0 20 20 20 74 68 69 73 2e 5f 6c 66 6f 2e 64 69 73     this._lfo.dis
69fd0 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20  pose();..       
69fe0 20 74 68 69 73 2e 5f 6c 66 6f 20 3d 20 6e 75 6c   this._lfo = nul
69ff0 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  l;..        this
6a000 2e 5f 70 61 6e 6e 65 72 2e 64 69 73 70 6f 73 65  ._panner.dispose
6a010 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ();..        thi
6a020 73 2e 5f 70 61 6e 6e 65 72 20 3d 20 6e 75 6c 6c  s._panner = null
6a030 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
6a040 5f 77 72 69 74 61 62 6c 65 28 5b 0a 09 20 20 20  _writable([..   
6a050 20 20 20 20 20 20 20 20 20 27 64 65 70 74 68 27           'depth'
6a060 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
6a070 66 72 65 71 75 65 6e 63 79 27 0a 09 20 20 20 20  frequency'..    
6a080 20 20 20 20 5d 29 3b 0a 09 20 20 20 20 20 20 20      ]);..       
6a090 20 74 68 69 73 2e 66 72 65 71 75 65 6e 63 79 20   this.frequency 
6a0a0 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
6a0b0 20 74 68 69 73 2e 64 65 70 74 68 20 3d 20 6e 75   this.depth = nu
6a0c0 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74  ll;..        ret
6a0d0 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
6a0e0 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f  ;..    return To
6a0f0 6e 65 2e 41 75 74 6f 50 61 6e 6e 65 72 3b 0a 09  ne.AutoPanner;..
6a100 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63  });..Module(func
6a110 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20  tion (Tone) {.. 
6a120 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20     ..    /**... 
6a130 2a 20 20 40 63 6c 61 73 73 20 20 54 6f 6e 65 2e  *  @class  Tone.
6a140 41 75 74 6f 57 61 68 20 63 6f 6e 6e 65 63 74 73  AutoWah connects
6a150 20 61 20 54 6f 6e 65 2e 46 6f 6c 6c 6f 77 65 72   a Tone.Follower
6a160 20 74 6f 20 61 20 62 61 6e 64 70 61 73 73 20 66   to a bandpass f
6a170 69 6c 74 65 72 20 28 54 6f 6e 65 2e 46 69 6c 74  ilter (Tone.Filt
6a180 65 72 29 2e 0a 09 09 20 2a 20 20 20 20 20 20 20  er).... *       
6a190 20 20 20 54 68 65 20 66 72 65 71 75 65 6e 63 79     The frequency
6a1a0 20 6f 66 20 74 68 65 20 66 69 6c 74 65 72 20 69   of the filter i
6a1b0 73 20 61 64 6a 75 73 74 65 64 20 70 72 6f 70 6f  s adjusted propo
6a1c0 72 74 69 6f 6e 61 6c 6c 79 20 74 6f 20 74 68 65  rtionally to the
6a1d0 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20   ... *          
6a1e0 69 6e 63 6f 6d 69 6e 67 20 73 69 67 6e 61 6c 27  incoming signal'
6a1f0 73 20 61 6d 70 6c 69 74 75 64 65 2e 20 49 6e 73  s amplitude. Ins
6a200 70 69 72 61 74 69 6f 6e 20 66 72 6f 6d 20 5b 54  piration from [T
6a210 75 6e 61 2e 6a 73 5d 28 68 74 74 70 73 3a 2f 2f  una.js](https://
6a220 67 69 74 68 75 62 2e 63 6f 6d 2f 44 69 6e 61 68  github.com/Dinah
6a230 6d 6f 65 2f 74 75 6e 61 29 2e 0a 09 09 20 2a 0a  moe/tuna).... *.
6a240 09 09 20 2a 20 20 40 63 6f 6e 73 74 72 75 63 74  .. *  @construct
6a250 6f 72 0a 09 09 20 2a 20 20 40 65 78 74 65 6e 64  or... *  @extend
6a260 73 20 7b 54 6f 6e 65 2e 45 66 66 65 63 74 7d 0a  s {Tone.Effect}.
6a270 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 46 72  .. *  @param {Fr
6a280 65 71 75 65 6e 63 79 7c 4f 62 6a 65 63 74 7d 20  equency|Object} 
6a290 5b 62 61 73 65 46 72 65 71 75 65 6e 63 79 5d 20  [baseFrequency] 
6a2a0 54 68 65 20 66 72 65 71 75 65 6e 63 79 20 74 68  The frequency th
6a2b0 65 20 66 69 6c 74 65 72 20 69 73 20 73 65 74 20  e filter is set 
6a2c0 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 20  ... *           
6a2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a2f0 20 74 6f 20 61 74 20 74 68 65 20 6c 6f 77 20 70   to at the low p
6a300 6f 69 6e 74 20 6f 66 20 74 68 65 20 77 61 68 0a  oint of the wah.
6a310 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 50 6f  .. *  @param {Po
6a320 73 69 74 69 76 65 7d 20 5b 6f 63 74 61 76 65 73  sitive} [octaves
6a330 5d 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  ] The number of 
6a340 6f 63 74 61 76 65 73 20 61 62 6f 76 65 20 74 68  octaves above th
6a350 65 20 62 61 73 65 46 72 65 71 75 65 6e 63 79 0a  e baseFrequency.
6a360 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
6a370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a380 20 20 20 20 74 68 65 20 66 69 6c 74 65 72 20 77      the filter w
6a390 69 6c 6c 20 73 77 65 65 70 20 74 6f 20 77 68 65  ill sweep to whe
6a3a0 6e 20 66 75 6c 6c 79 20 6f 70 65 6e 0a 09 09 20  n fully open... 
6a3b0 2a 20 20 40 70 61 72 61 6d 20 7b 44 65 63 69 62  *  @param {Decib
6a3c0 65 6c 73 7d 20 5b 73 65 6e 73 69 74 69 76 69 74  els} [sensitivit
6a3d0 79 5d 20 54 68 65 20 64 65 63 69 62 65 6c 20 74  y] The decibel t
6a3e0 68 72 65 73 68 6f 6c 64 20 73 65 6e 73 69 74 69  hreshold sensiti
6a3f0 76 69 74 79 20 66 6f 72 20 0a 09 09 20 2a 20 20  vity for ... *  
6a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a420 20 74 68 65 20 69 6e 63 6f 6d 69 6e 67 20 73 69   the incoming si
6a430 67 6e 61 6c 2e 20 4e 6f 72 6d 61 6c 20 72 61 6e  gnal. Normal ran
6a440 67 65 20 6f 66 20 2d 34 30 20 74 6f 20 30 2e 20  ge of -40 to 0. 
6a450 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a  ... *  @example.
6a460 09 09 20 2a 20 76 61 72 20 61 75 74 6f 57 61 68  .. * var autoWah
6a470 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 41 75 74 6f   = new Tone.Auto
6a480 57 61 68 28 35 30 2c 20 36 2c 20 2d 33 30 29 2e  Wah(50, 6, -30).
6a490 74 6f 4d 61 73 74 65 72 28 29 3b 0a 09 09 20 2a  toMaster();... *
6a4a0 20 2f 2f 69 6e 69 74 69 61 6c 69 7a 65 20 74 68   //initialize th
6a4b0 65 20 73 79 6e 74 68 20 61 6e 64 20 63 6f 6e 6e  e synth and conn
6a4c0 65 63 74 20 74 6f 20 61 75 74 6f 77 61 68 0a 09  ect to autowah..
6a4d0 09 20 2a 20 76 61 72 20 73 79 6e 74 68 20 3d 20  . * var synth = 
6a4e0 6e 65 77 20 53 79 6e 74 68 2e 63 6f 6e 6e 65 63  new Synth.connec
6a4f0 74 28 61 75 74 6f 57 61 68 29 3b 0a 09 09 20 2a  t(autoWah);... *
6a500 20 2f 2f 51 20 76 61 6c 75 65 20 69 6e 66 6c 75   //Q value influ
6a510 65 6e 63 65 73 20 74 68 65 20 65 66 66 65 63 74  ences the effect
6a520 20 6f 66 20 74 68 65 20 77 61 68 20 2d 20 64 65   of the wah - de
6a530 66 61 75 6c 74 20 69 73 20 32 0a 09 09 20 2a 20  fault is 2... * 
6a540 61 75 74 6f 57 61 68 2e 51 2e 76 61 6c 75 65 20  autoWah.Q.value 
6a550 3d 20 36 3b 0a 09 09 20 2a 20 2f 2f 6d 6f 72 65  = 6;... * //more
6a560 20 61 75 64 69 62 6c 65 20 6f 6e 20 68 69 67 68   audible on high
6a570 65 72 20 6e 6f 74 65 73 0a 09 09 20 2a 20 73 79  er notes... * sy
6a580 6e 74 68 2e 74 72 69 67 67 65 72 41 74 74 61 63  nth.triggerAttac
6a590 6b 52 65 6c 65 61 73 65 28 22 43 34 22 2c 20 22  kRelease("C4", "
6a5a0 38 6e 22 29 0a 09 09 20 2a 2f 0a 09 20 20 20 20  8n")... */..    
6a5b0 54 6f 6e 65 2e 41 75 74 6f 57 61 68 20 3d 20 66  Tone.AutoWah = f
6a5c0 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
6a5d0 20 20 20 20 20 20 76 61 72 20 6f 70 74 69 6f 6e        var option
6a5e0 73 20 3d 20 74 68 69 73 2e 6f 70 74 69 6f 6e 73  s = this.options
6a5f0 4f 62 6a 65 63 74 28 61 72 67 75 6d 65 6e 74 73  Object(arguments
6a600 2c 20 5b 0a 09 20 20 20 20 20 20 20 20 20 20 20  , [..           
6a610 20 27 62 61 73 65 46 72 65 71 75 65 6e 63 79 27   'baseFrequency'
6a620 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
6a630 6f 63 74 61 76 65 73 27 2c 0a 09 20 20 20 20 20  octaves',..     
6a640 20 20 20 20 20 20 20 27 73 65 6e 73 69 74 69 76         'sensitiv
6a650 69 74 79 27 0a 09 20 20 20 20 20 20 20 20 5d 2c  ity'..        ],
6a660 20 54 6f 6e 65 2e 41 75 74 6f 57 61 68 2e 64 65   Tone.AutoWah.de
6a670 66 61 75 6c 74 73 29 3b 0a 09 20 20 20 20 20 20  faults);..      
6a680 20 20 54 6f 6e 65 2e 45 66 66 65 63 74 2e 63 61    Tone.Effect.ca
6a690 6c 6c 28 74 68 69 73 2c 20 6f 70 74 69 6f 6e 73  ll(this, options
6a6a0 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
6a6b0 09 09 09 20 2a 20 20 54 68 65 20 65 6e 76 65 6c  ... *  The envel
6a6c0 6f 70 65 20 66 6f 6c 6c 6f 77 65 72 2e 20 53 65  ope follower. Se
6a6d0 74 20 74 68 65 20 61 74 74 61 63 6b 2f 72 65 6c  t the attack/rel
6a6e0 65 61 73 65 0a 09 09 09 20 2a 20 20 74 69 6d 69  ease.... *  timi
6a6f0 6e 67 20 74 6f 20 61 64 6a 75 73 74 20 68 6f 77  ng to adjust how
6a700 20 74 68 65 20 65 6e 76 65 6c 6f 70 65 20 69 73   the envelope is
6a710 20 66 6f 6c 6c 6f 77 65 64 2e 20 0a 09 09 09 20   followed. .... 
6a720 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 46  *  @type {Tone.F
6a730 6f 6c 6c 6f 77 65 72 7d 0a 09 09 09 20 2a 20 20  ollower}.... *  
6a740 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a  @private.... */.
6a750 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 66 6f  .        this.fo
6a760 6c 6c 6f 77 65 72 20 3d 20 6e 65 77 20 54 6f 6e  llower = new Ton
6a770 65 2e 46 6f 6c 6c 6f 77 65 72 28 6f 70 74 69 6f  e.Follower(optio
6a780 6e 73 2e 66 6f 6c 6c 6f 77 65 72 29 3b 0a 09 20  ns.follower);.. 
6a790 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
6a7a0 20 20 73 63 61 6c 65 73 20 74 68 65 20 66 6f 6c    scales the fol
6a7b0 6c 6f 77 65 72 20 76 61 6c 75 65 20 74 6f 20 74  lower value to t
6a7c0 68 65 20 66 72 65 71 75 65 6e 63 79 20 64 6f 6d  he frequency dom
6a7d0 61 69 6e 0a 09 09 09 20 2a 20 20 40 74 79 70 65  ain.... *  @type
6a7e0 20 7b 54 6f 6e 65 7d 0a 09 09 09 20 2a 20 20 40   {Tone}.... *  @
6a7f0 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
6a800 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 77          this._sw
6a810 65 65 70 52 61 6e 67 65 20 3d 20 6e 65 77 20 54  eepRange = new T
6a820 6f 6e 65 2e 53 63 61 6c 65 45 78 70 28 30 2c 20  one.ScaleExp(0, 
6a830 31 2c 20 30 2e 35 29 3b 0a 09 20 20 20 20 20 20  1, 0.5);..      
6a840 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 40 74 79    /**.... *  @ty
6a850 70 65 20 7b 6e 75 6d 62 65 72 7d 0a 09 09 09 20  pe {number}.... 
6a860 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20  *  @private.... 
6a870 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
6a880 2e 5f 62 61 73 65 46 72 65 71 75 65 6e 63 79 20  ._baseFrequency 
6a890 3d 20 6f 70 74 69 6f 6e 73 2e 62 61 73 65 46 72  = options.baseFr
6a8a0 65 71 75 65 6e 63 79 3b 0a 09 20 20 20 20 20 20  equency;..      
6a8b0 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 40 74 79    /**.... *  @ty
6a8c0 70 65 20 7b 6e 75 6d 62 65 72 7d 0a 09 09 09 20  pe {number}.... 
6a8d0 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20  *  @private.... 
6a8e0 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
6a8f0 2e 5f 6f 63 74 61 76 65 73 20 3d 20 6f 70 74 69  ._octaves = opti
6a900 6f 6e 73 2e 6f 63 74 61 76 65 73 3b 0a 09 20 20  ons.octaves;..  
6a910 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
6a920 20 74 68 65 20 69 6e 70 75 74 20 67 61 69 6e 20   the input gain 
6a930 74 6f 20 61 64 6a 75 73 74 20 74 68 65 20 73 65  to adjust the se
6a940 6e 73 69 74 69 76 69 74 79 0a 09 09 09 20 2a 20  nsitivity.... * 
6a950 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 47 61 69   @type {Tone.Gai
6a960 6e 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61  n}.... *  @priva
6a970 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  te.... */..     
6a980 20 20 20 74 68 69 73 2e 5f 69 6e 70 75 74 42 6f     this._inputBo
6a990 6f 73 74 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 47  ost = new Tone.G
6a9a0 61 69 6e 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ain();..        
6a9b0 2f 2a 2a 0a 09 09 09 20 2a 20 20 40 74 79 70 65  /**.... *  @type
6a9c0 20 7b 42 69 71 75 61 64 46 69 6c 74 65 72 4e 6f   {BiquadFilterNo
6a9d0 64 65 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76  de}.... *  @priv
6a9e0 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  ate.... */..    
6a9f0 20 20 20 20 74 68 69 73 2e 5f 62 61 6e 64 70 61      this._bandpa
6aa00 73 73 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 46 69  ss = new Tone.Fi
6aa10 6c 74 65 72 28 7b 0a 09 20 20 20 20 20 20 20 20  lter({..        
6aa20 20 20 20 20 27 72 6f 6c 6c 6f 66 66 27 3a 20 2d      'rolloff': -
6aa30 34 38 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  48,..           
6aa40 20 27 66 72 65 71 75 65 6e 63 79 27 3a 20 30 2c   'frequency': 0,
6aa50 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 51  ..            'Q
6aa60 27 3a 20 6f 70 74 69 6f 6e 73 2e 51 0a 09 20 20  ': options.Q..  
6aa70 20 20 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 20        });..     
6aa80 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 40 74     /**.... *  @t
6aa90 79 70 65 20 7b 54 6f 6e 65 2e 46 69 6c 74 65 72  ype {Tone.Filter
6aaa0 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  }.... *  @privat
6aab0 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
6aac0 20 20 74 68 69 73 2e 5f 70 65 61 6b 69 6e 67 20    this._peaking 
6aad0 3d 20 6e 65 77 20 54 6f 6e 65 2e 46 69 6c 74 65  = new Tone.Filte
6aae0 72 28 30 2c 20 27 70 65 61 6b 69 6e 67 27 29 3b  r(0, 'peaking');
6aaf0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
6ab00 70 65 61 6b 69 6e 67 2e 67 61 69 6e 2e 76 61 6c  peaking.gain.val
6ab10 75 65 20 3d 20 6f 70 74 69 6f 6e 73 2e 67 61 69  ue = options.gai
6ab20 6e 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  n;..        /**.
6ab30 09 09 09 20 2a 20 54 68 65 20 67 61 69 6e 20 6f  ... * The gain o
6ab40 66 20 74 68 65 20 66 69 6c 74 65 72 2e 0a 09 09  f the filter....
6ab50 09 20 2a 20 40 74 79 70 65 20 7b 4e 75 6d 62 65  . * @type {Numbe
6ab60 72 7d 0a 09 09 09 20 2a 20 40 73 69 67 6e 61 6c  r}.... * @signal
6ab70 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
6ab80 20 74 68 69 73 2e 67 61 69 6e 20 3d 20 74 68 69   this.gain = thi
6ab90 73 2e 5f 70 65 61 6b 69 6e 67 2e 67 61 69 6e 3b  s._peaking.gain;
6aba0 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
6abb0 09 20 2a 20 54 68 65 20 71 75 61 6c 69 74 79 20  . * The quality 
6abc0 6f 66 20 74 68 65 20 66 69 6c 74 65 72 2e 0a 09  of the filter...
6abd0 09 09 20 2a 20 40 74 79 70 65 20 7b 50 6f 73 69  .. * @type {Posi
6abe0 74 69 76 65 7d 0a 09 09 09 20 2a 20 40 73 69 67  tive}.... * @sig
6abf0 6e 61 6c 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  nal.... */..    
6ac00 20 20 20 20 74 68 69 73 2e 51 20 3d 20 74 68 69      this.Q = thi
6ac10 73 2e 5f 62 61 6e 64 70 61 73 73 2e 51 3b 0a 09  s._bandpass.Q;..
6ac20 20 20 20 20 20 20 20 20 2f 2f 74 68 65 20 63 6f          //the co
6ac30 6e 74 72 6f 6c 20 73 69 67 6e 61 6c 20 70 61 74  ntrol signal pat
6ac40 68 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  h..        this.
6ac50 65 66 66 65 63 74 53 65 6e 64 2e 63 68 61 69 6e  effectSend.chain
6ac60 28 74 68 69 73 2e 5f 69 6e 70 75 74 42 6f 6f 73  (this._inputBoos
6ac70 74 2c 20 74 68 69 73 2e 66 6f 6c 6c 6f 77 65 72  t, this.follower
6ac80 2c 20 74 68 69 73 2e 5f 73 77 65 65 70 52 61 6e  , this._sweepRan
6ac90 67 65 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ge);..        th
6aca0 69 73 2e 5f 73 77 65 65 70 52 61 6e 67 65 2e 63  is._sweepRange.c
6acb0 6f 6e 6e 65 63 74 28 74 68 69 73 2e 5f 62 61 6e  onnect(this._ban
6acc0 64 70 61 73 73 2e 66 72 65 71 75 65 6e 63 79 29  dpass.frequency)
6acd0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
6ace0 5f 73 77 65 65 70 52 61 6e 67 65 2e 63 6f 6e 6e  _sweepRange.conn
6acf0 65 63 74 28 74 68 69 73 2e 5f 70 65 61 6b 69 6e  ect(this._peakin
6ad00 67 2e 66 72 65 71 75 65 6e 63 79 29 3b 0a 09 20  g.frequency);.. 
6ad10 20 20 20 20 20 20 20 2f 2f 74 68 65 20 66 69 6c         //the fil
6ad20 74 65 72 65 64 20 70 61 74 68 0a 09 20 20 20 20  tered path..    
6ad30 20 20 20 20 74 68 69 73 2e 65 66 66 65 63 74 53      this.effectS
6ad40 65 6e 64 2e 63 68 61 69 6e 28 74 68 69 73 2e 5f  end.chain(this._
6ad50 62 61 6e 64 70 61 73 73 2c 20 74 68 69 73 2e 5f  bandpass, this._
6ad60 70 65 61 6b 69 6e 67 2c 20 74 68 69 73 2e 65 66  peaking, this.ef
6ad70 66 65 63 74 52 65 74 75 72 6e 29 3b 0a 09 20 20  fectReturn);..  
6ad80 20 20 20 20 20 20 2f 2f 73 65 74 20 74 68 65 20        //set the 
6ad90 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 0a 09 20  initial value.. 
6ada0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 65 74         this._set
6adb0 53 77 65 65 70 52 61 6e 67 65 28 29 3b 0a 09 20  SweepRange();.. 
6adc0 20 20 20 20 20 20 20 74 68 69 73 2e 73 65 6e 73         this.sens
6add0 69 74 69 76 69 74 79 20 3d 20 6f 70 74 69 6f 6e  itivity = option
6ade0 73 2e 73 65 6e 73 69 74 69 76 69 74 79 3b 0a 09  s.sensitivity;..
6adf0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 72 65          this._re
6ae00 61 64 4f 6e 6c 79 28 5b 0a 09 20 20 20 20 20 20  adOnly([..      
6ae10 20 20 20 20 20 20 27 67 61 69 6e 27 2c 0a 09 20        'gain',.. 
6ae20 20 20 20 20 20 20 20 20 20 20 20 27 51 27 0a 09             'Q'..
6ae30 20 20 20 20 20 20 20 20 5d 29 3b 0a 09 20 20 20          ]);..   
6ae40 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65 2e 65 78   };..    Tone.ex
6ae50 74 65 6e 64 28 54 6f 6e 65 2e 41 75 74 6f 57 61  tend(Tone.AutoWa
6ae60 68 2c 20 54 6f 6e 65 2e 45 66 66 65 63 74 29 3b  h, Tone.Effect);
6ae70 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
6ae80 40 73 74 61 74 69 63 0a 09 09 20 2a 20 20 40 74  @static... *  @t
6ae90 79 70 65 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20  ype {Object}... 
6aea0 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 41 75 74  */..    Tone.Aut
6aeb0 6f 57 61 68 2e 64 65 66 61 75 6c 74 73 20 3d 20  oWah.defaults = 
6aec0 7b 0a 09 20 20 20 20 20 20 20 20 27 62 61 73 65  {..        'base
6aed0 46 72 65 71 75 65 6e 63 79 27 3a 20 31 30 30 2c  Frequency': 100,
6aee0 0a 09 20 20 20 20 20 20 20 20 27 6f 63 74 61 76  ..        'octav
6aef0 65 73 27 3a 20 36 2c 0a 09 20 20 20 20 20 20 20  es': 6,..       
6af00 20 27 73 65 6e 73 69 74 69 76 69 74 79 27 3a 20   'sensitivity': 
6af10 30 2c 0a 09 20 20 20 20 20 20 20 20 27 51 27 3a  0,..        'Q':
6af20 20 32 2c 0a 09 20 20 20 20 20 20 20 20 27 67 61   2,..        'ga
6af30 69 6e 27 3a 20 32 2c 0a 09 20 20 20 20 20 20 20  in': 2,..       
6af40 20 27 66 6f 6c 6c 6f 77 65 72 27 3a 20 7b 0a 09   'follower': {..
6af50 20 20 20 20 20 20 20 20 20 20 20 20 27 61 74 74              'att
6af60 61 63 6b 27 3a 20 30 2e 33 2c 0a 09 20 20 20 20  ack': 0.3,..    
6af70 20 20 20 20 20 20 20 20 27 72 65 6c 65 61 73 65          'release
6af80 27 3a 20 30 2e 35 0a 09 20 20 20 20 20 20 20 20  ': 0.5..        
6af90 7d 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  }..    };..    /
6afa0 2a 2a 0a 09 09 20 2a 20 54 68 65 20 6e 75 6d 62  **... * The numb
6afb0 65 72 20 6f 66 20 6f 63 74 61 76 65 73 20 74 68  er of octaves th
6afc0 61 74 20 74 68 65 20 66 69 6c 74 65 72 20 77 69  at the filter wi
6afd0 6c 6c 20 73 77 65 65 70 20 61 62 6f 76 65 20 74  ll sweep above t
6afe0 68 65 20 0a 09 09 20 2a 20 62 61 73 65 46 72 65  he ... * baseFre
6aff0 71 75 65 6e 63 79 2e 20 0a 09 09 20 2a 20 40 6d  quency. ... * @m
6b000 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 41 75 74  emberOf Tone.Aut
6b010 6f 57 61 68 23 0a 09 09 20 2a 20 40 74 79 70 65  oWah#... * @type
6b020 20 7b 4e 75 6d 62 65 72 7d 0a 09 09 20 2a 20 40   {Number}... * @
6b030 6e 61 6d 65 20 6f 63 74 61 76 65 73 0a 09 09 20  name octaves... 
6b040 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64  */..    Object.d
6b050 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f  efineProperty(To
6b060 6e 65 2e 41 75 74 6f 57 61 68 2e 70 72 6f 74 6f  ne.AutoWah.proto
6b070 74 79 70 65 2c 20 27 6f 63 74 61 76 65 73 27 2c  type, 'octaves',
6b080 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a   {..        get:
6b090 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
6b0a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
6b0b0 72 6e 20 74 68 69 73 2e 5f 6f 63 74 61 76 65 73  rn this._octaves
6b0c0 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20  ;..        },.. 
6b0d0 20 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63         set: func
6b0e0 74 69 6f 6e 20 28 6f 63 74 61 76 65 73 29 20 7b  tion (octaves) {
6b0f0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
6b100 69 73 2e 5f 6f 63 74 61 76 65 73 20 3d 20 6f 63  is._octaves = oc
6b110 74 61 76 65 73 3b 0a 09 20 20 20 20 20 20 20 20  taves;..        
6b120 20 20 20 20 74 68 69 73 2e 5f 73 65 74 53 77 65      this._setSwe
6b130 65 70 52 61 6e 67 65 28 29 3b 0a 09 20 20 20 20  epRange();..    
6b140 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09      }..    });..
6b150 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65      /**... * The
6b160 20 62 61 73 65 20 66 72 65 71 75 65 6e 63 79 20   base frequency 
6b170 66 72 6f 6d 20 77 68 69 63 68 20 74 68 65 20 73  from which the s
6b180 77 65 65 70 20 77 69 6c 6c 20 73 74 61 72 74 20  weep will start 
6b190 66 72 6f 6d 2e 0a 09 09 20 2a 20 40 6d 65 6d 62  from.... * @memb
6b1a0 65 72 4f 66 20 54 6f 6e 65 2e 41 75 74 6f 57 61  erOf Tone.AutoWa
6b1b0 68 23 0a 09 09 20 2a 20 40 74 79 70 65 20 7b 46  h#... * @type {F
6b1c0 72 65 71 75 65 6e 63 79 7d 0a 09 09 20 2a 20 40  requency}... * @
6b1d0 6e 61 6d 65 20 62 61 73 65 46 72 65 71 75 65 6e  name baseFrequen
6b1e0 63 79 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62  cy... */..    Ob
6b1f0 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65  ject.definePrope
6b200 72 74 79 28 54 6f 6e 65 2e 41 75 74 6f 57 61 68  rty(Tone.AutoWah
6b210 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 62 61 73  .prototype, 'bas
6b220 65 46 72 65 71 75 65 6e 63 79 27 2c 20 7b 0a 09  eFrequency', {..
6b230 20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e          get: fun
6b240 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
6b250 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
6b260 68 69 73 2e 5f 62 61 73 65 46 72 65 71 75 65 6e  his._baseFrequen
6b270 63 79 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a  cy;..        },.
6b280 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66 75  .        set: fu
6b290 6e 63 74 69 6f 6e 20 28 62 61 73 65 46 72 65 71  nction (baseFreq
6b2a0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
6b2b0 20 74 68 69 73 2e 5f 62 61 73 65 46 72 65 71 75   this._baseFrequ
6b2c0 65 6e 63 79 20 3d 20 62 61 73 65 46 72 65 71 3b  ency = baseFreq;
6b2d0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
6b2e0 69 73 2e 5f 73 65 74 53 77 65 65 70 52 61 6e 67  is._setSweepRang
6b2f0 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a  e();..        }.
6b300 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a  .    });..    /*
6b310 2a 0a 09 09 20 2a 20 54 68 65 20 73 65 6e 73 69  *... * The sensi
6b320 74 69 76 69 74 79 20 74 6f 20 63 6f 6e 74 72 6f  tivity to contro
6b330 6c 20 68 6f 77 20 72 65 73 70 6f 6e 73 69 76 65  l how responsive
6b340 20 74 6f 20 74 68 65 20 69 6e 70 75 74 20 73 69   to the input si
6b350 67 6e 61 6c 20 74 68 65 20 66 69 6c 74 65 72 20  gnal the filter 
6b360 69 73 2e 20 0a 09 09 20 2a 20 40 6d 65 6d 62 65  is. ... * @membe
6b370 72 4f 66 20 54 6f 6e 65 2e 41 75 74 6f 57 61 68  rOf Tone.AutoWah
6b380 23 0a 09 09 20 2a 20 40 74 79 70 65 20 7b 44 65  #... * @type {De
6b390 63 69 62 65 6c 73 7d 0a 09 09 20 2a 20 40 6e 61  cibels}... * @na
6b3a0 6d 65 20 73 65 6e 73 69 74 69 76 69 74 79 0a 09  me sensitivity..
6b3b0 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74  . */..    Object
6b3c0 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28  .defineProperty(
6b3d0 54 6f 6e 65 2e 41 75 74 6f 57 61 68 2e 70 72 6f  Tone.AutoWah.pro
6b3e0 74 6f 74 79 70 65 2c 20 27 73 65 6e 73 69 74 69  totype, 'sensiti
6b3f0 76 69 74 79 27 2c 20 7b 0a 09 20 20 20 20 20 20  vity', {..      
6b400 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    get: function 
6b410 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  () {..          
6b420 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 67 61    return this.ga
6b430 69 6e 54 6f 44 62 28 31 20 2f 20 74 68 69 73 2e  inToDb(1 / this.
6b440 5f 69 6e 70 75 74 42 6f 6f 73 74 2e 67 61 69 6e  _inputBoost.gain
6b450 2e 76 61 6c 75 65 29 3b 0a 09 20 20 20 20 20 20  .value);..      
6b460 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65    },..        se
6b470 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 73 65 6e  t: function (sen
6b480 73 69 74 69 76 79 29 20 7b 0a 09 20 20 20 20 20  sitivy) {..     
6b490 20 20 20 20 20 20 20 74 68 69 73 2e 5f 69 6e 70         this._inp
6b4a0 75 74 42 6f 6f 73 74 2e 67 61 69 6e 2e 76 61 6c  utBoost.gain.val
6b4b0 75 65 20 3d 20 31 20 2f 20 74 68 69 73 2e 64 62  ue = 1 / this.db
6b4c0 54 6f 47 61 69 6e 28 73 65 6e 73 69 74 69 76 79  ToGain(sensitivy
6b4d0 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  );..        }.. 
6b4e0 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a     });..    /**.
6b4f0 09 09 20 2a 20 20 73 65 74 73 20 74 68 65 20 73  .. *  sets the s
6b500 77 65 65 70 20 72 61 6e 67 65 20 6f 66 20 74 68  weep range of th
6b510 65 20 73 63 61 6c 65 72 0a 09 09 20 2a 20 20 40  e scaler... *  @
6b520 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20  private... */.. 
6b530 20 20 20 54 6f 6e 65 2e 41 75 74 6f 57 61 68 2e     Tone.AutoWah.
6b540 70 72 6f 74 6f 74 79 70 65 2e 5f 73 65 74 53 77  prototype._setSw
6b550 65 65 70 52 61 6e 67 65 20 3d 20 66 75 6e 63 74  eepRange = funct
6b560 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
6b570 20 20 74 68 69 73 2e 5f 73 77 65 65 70 52 61 6e    this._sweepRan
6b580 67 65 2e 6d 69 6e 20 3d 20 74 68 69 73 2e 5f 62  ge.min = this._b
6b590 61 73 65 46 72 65 71 75 65 6e 63 79 3b 0a 09 20  aseFrequency;.. 
6b5a0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 77 65         this._swe
6b5b0 65 70 52 61 6e 67 65 2e 6d 61 78 20 3d 20 4d 61  epRange.max = Ma
6b5c0 74 68 2e 6d 69 6e 28 74 68 69 73 2e 5f 62 61 73  th.min(this._bas
6b5d0 65 46 72 65 71 75 65 6e 63 79 20 2a 20 4d 61 74  eFrequency * Mat
6b5e0 68 2e 70 6f 77 28 32 2c 20 74 68 69 73 2e 5f 6f  h.pow(2, this._o
6b5f0 63 74 61 76 65 73 29 2c 20 74 68 69 73 2e 63 6f  ctaves), this.co
6b600 6e 74 65 78 74 2e 73 61 6d 70 6c 65 52 61 74 65  ntext.sampleRate
6b610 20 2f 20 32 29 3b 0a 09 20 20 20 20 7d 3b 0a 09   / 2);..    };..
6b620 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 6c      /**... *  Cl
6b630 65 61 6e 20 75 70 2e 0a 09 09 20 2a 20 20 40 72  ean up.... *  @r
6b640 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 41 75 74  eturns {Tone.Aut
6b650 6f 57 61 68 7d 20 74 68 69 73 0a 09 09 20 2a 2f  oWah} this... */
6b660 0a 09 20 20 20 20 54 6f 6e 65 2e 41 75 74 6f 57  ..    Tone.AutoW
6b670 61 68 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73  ah.prototype.dis
6b680 70 6f 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20  pose = function 
6b690 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 54 6f  () {..        To
6b6a0 6e 65 2e 45 66 66 65 63 74 2e 70 72 6f 74 6f 74  ne.Effect.protot
6b6b0 79 70 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c  ype.dispose.call
6b6c0 28 74 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20  (this);..       
6b6d0 20 74 68 69 73 2e 66 6f 6c 6c 6f 77 65 72 2e 64   this.follower.d
6b6e0 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20  ispose();..     
6b6f0 20 20 20 74 68 69 73 2e 66 6f 6c 6c 6f 77 65 72     this.follower
6b700 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
6b710 20 20 74 68 69 73 2e 5f 73 77 65 65 70 52 61 6e    this._sweepRan
6b720 67 65 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20  ge.dispose();.. 
6b730 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 77 65         this._swe
6b740 65 70 52 61 6e 67 65 20 3d 20 6e 75 6c 6c 3b 0a  epRange = null;.
6b750 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 62  .        this._b
6b760 61 6e 64 70 61 73 73 2e 64 69 73 70 6f 73 65 28  andpass.dispose(
6b770 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
6b780 2e 5f 62 61 6e 64 70 61 73 73 20 3d 20 6e 75 6c  ._bandpass = nul
6b790 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  l;..        this
6b7a0 2e 5f 70 65 61 6b 69 6e 67 2e 64 69 73 70 6f 73  ._peaking.dispos
6b7b0 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  e();..        th
6b7c0 69 73 2e 5f 70 65 61 6b 69 6e 67 20 3d 20 6e 75  is._peaking = nu
6b7d0 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ll;..        thi
6b7e0 73 2e 5f 69 6e 70 75 74 42 6f 6f 73 74 2e 64 69  s._inputBoost.di
6b7f0 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
6b800 20 20 74 68 69 73 2e 5f 69 6e 70 75 74 42 6f 6f    this._inputBoo
6b810 73 74 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  st = null;..    
6b820 20 20 20 20 74 68 69 73 2e 5f 77 72 69 74 61 62      this._writab
6b830 6c 65 28 5b 0a 09 20 20 20 20 20 20 20 20 20 20  le([..          
6b840 20 20 27 67 61 69 6e 27 2c 0a 09 20 20 20 20 20    'gain',..     
6b850 20 20 20 20 20 20 20 27 51 27 0a 09 20 20 20 20         'Q'..    
6b860 20 20 20 20 5d 29 3b 0a 09 20 20 20 20 20 20 20      ]);..       
6b870 20 74 68 69 73 2e 67 61 69 6e 20 3d 20 6e 75 6c   this.gain = nul
6b880 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  l;..        this
6b890 2e 51 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  .Q = null;..    
6b8a0 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b      return this;
6b8b0 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 72 65  ..    };..    re
6b8c0 74 75 72 6e 20 54 6f 6e 65 2e 41 75 74 6f 57 61  turn Tone.AutoWa
6b8d0 68 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28  h;..});..Module(
6b8e0 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20  function (Tone) 
6b8f0 7b 0a 09 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a  {..    ..    /**
6b900 0a 09 09 20 2a 20 20 40 63 6c 61 73 73 20 54 6f  ... *  @class To
6b910 6e 65 2e 42 69 74 63 72 75 73 68 65 72 20 64 6f  ne.Bitcrusher do
6b920 77 6e 73 61 6d 70 6c 65 73 20 74 68 65 20 69 6e  wnsamples the in
6b930 63 6f 6d 69 6e 67 20 73 69 67 6e 61 6c 20 74 6f  coming signal to
6b940 20 61 20 64 69 66 66 65 72 65 6e 74 20 62 69 74   a different bit
6b950 64 65 70 74 68 2e 20 0a 09 09 20 2a 20 20 20 20  depth. ... *    
6b960 20 20 20 20 20 4c 6f 77 65 72 69 6e 67 20 74 68       Lowering th
6b970 65 20 62 69 74 64 65 70 74 68 20 6f 66 20 74 68  e bitdepth of th
6b980 65 20 73 69 67 6e 61 6c 20 63 72 65 61 74 65 73  e signal creates
6b990 20 64 69 73 74 6f 72 74 69 6f 6e 2e 20 52 65 61   distortion. Rea
6b9a0 64 20 6d 6f 72 65 20 61 62 6f 75 74 20 42 69 74  d more about Bit
6b9b0 63 72 75 73 68 69 6e 67 0a 09 09 20 2a 20 20 20  crushing... *   
6b9c0 20 20 20 20 20 20 6f 6e 20 5b 57 69 6b 69 70 65        on [Wikipe
6b9d0 64 69 61 5d 28 68 74 74 70 73 3a 2f 2f 65 6e 2e  dia](https://en.
6b9e0 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
6b9f0 6b 69 2f 42 69 74 63 72 75 73 68 65 72 29 2e 0a  ki/Bitcrusher)..
6ba00 09 09 20 2a 0a 09 09 20 2a 20 20 40 63 6f 6e 73  .. *... *  @cons
6ba10 74 72 75 63 74 6f 72 0a 09 09 20 2a 20 20 40 65  tructor... *  @e
6ba20 78 74 65 6e 64 73 20 7b 54 6f 6e 65 2e 45 66 66  xtends {Tone.Eff
6ba30 65 63 74 7d 0a 09 09 20 2a 20 20 40 70 61 72 61  ect}... *  @para
6ba40 6d 20 7b 4e 75 6d 62 65 72 7d 20 62 69 74 73 20  m {Number} bits 
6ba50 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  The number of bi
6ba60 74 73 20 74 6f 20 64 6f 77 6e 73 61 6d 70 6c 65  ts to downsample
6ba70 20 74 68 65 20 73 69 67 6e 61 6c 2e 20 4e 6f 6d   the signal. Nom
6ba80 69 6e 61 6c 20 72 61 6e 67 65 0a 09 09 20 2a 20  inal range... * 
6ba90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6baa0 20 20 20 20 20 20 6f 66 20 31 20 74 6f 20 38 2e        of 1 to 8.
6bab0 20 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65   ... *  @example
6bac0 0a 09 09 20 2a 20 2f 2f 69 6e 69 74 69 61 6c 69  ... * //initiali
6bad0 7a 65 20 63 72 75 73 68 65 72 20 61 6e 64 20 72  ze crusher and r
6bae0 6f 75 74 65 20 61 20 73 79 6e 74 68 20 74 68 72  oute a synth thr
6baf0 6f 75 67 68 20 69 74 0a 09 09 20 2a 20 76 61 72  ough it... * var
6bb00 20 63 72 75 73 68 65 72 20 3d 20 6e 65 77 20 54   crusher = new T
6bb10 6f 6e 65 2e 42 69 74 43 72 75 73 68 65 72 28 34  one.BitCrusher(4
6bb20 29 2e 74 6f 4d 61 73 74 65 72 28 29 3b 0a 09 09  ).toMaster();...
6bb30 20 2a 20 76 61 72 20 73 79 6e 74 68 20 3d 20 6e   * var synth = n
6bb40 65 77 20 54 6f 6e 65 2e 4d 6f 6e 6f 53 79 6e 74  ew Tone.MonoSynt
6bb50 68 28 29 2e 63 6f 6e 6e 65 63 74 28 63 72 75 73  h().connect(crus
6bb60 68 65 72 29 3b 0a 09 09 20 2a 2f 0a 09 20 20 20  her);... */..   
6bb70 20 54 6f 6e 65 2e 42 69 74 43 72 75 73 68 65 72   Tone.BitCrusher
6bb80 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b   = function () {
6bb90 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 6f 70  ..        var op
6bba0 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e 6f 70 74  tions = this.opt
6bbb0 69 6f 6e 73 4f 62 6a 65 63 74 28 61 72 67 75 6d  ionsObject(argum
6bbc0 65 6e 74 73 2c 20 5b 27 62 69 74 73 27 5d 2c 20  ents, ['bits'], 
6bbd0 54 6f 6e 65 2e 42 69 74 43 72 75 73 68 65 72 2e  Tone.BitCrusher.
6bbe0 64 65 66 61 75 6c 74 73 29 3b 0a 09 20 20 20 20  defaults);..    
6bbf0 20 20 20 20 54 6f 6e 65 2e 45 66 66 65 63 74 2e      Tone.Effect.
6bc00 63 61 6c 6c 28 74 68 69 73 2c 20 6f 70 74 69 6f  call(this, optio
6bc10 6e 73 29 3b 0a 09 20 20 20 20 20 20 20 20 76 61  ns);..        va
6bc20 72 20 69 6e 76 53 74 65 70 53 69 7a 65 20 3d 20  r invStepSize = 
6bc30 31 20 2f 20 4d 61 74 68 2e 70 6f 77 28 32 2c 20  1 / Math.pow(2, 
6bc40 6f 70 74 69 6f 6e 73 2e 62 69 74 73 20 2d 20 31  options.bits - 1
6bc50 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
6bc60 09 09 09 20 2a 20 20 53 75 62 74 72 61 63 74 20  ... *  Subtract 
6bc70 74 68 65 20 69 6e 70 75 74 20 73 69 67 6e 61 6c  the input signal
6bc80 20 61 6e 64 20 74 68 65 20 6d 6f 64 75 6c 75 73   and the modulus
6bc90 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20 73 69   of the input si
6bca0 67 6e 61 6c 0a 09 09 09 20 2a 20 20 40 74 79 70  gnal.... *  @typ
6bcb0 65 20 7b 54 6f 6e 65 2e 53 75 62 74 72 61 63 74  e {Tone.Subtract
6bcc0 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  }.... *  @privat
6bcd0 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
6bce0 20 20 74 68 69 73 2e 5f 73 75 62 74 72 61 63 74    this._subtract
6bcf0 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53 75 62 74   = new Tone.Subt
6bd00 72 61 63 74 28 29 3b 0a 09 20 20 20 20 20 20 20  ract();..       
6bd10 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20   /**.... *  The 
6bd20 6d 6f 64 20 66 75 6e 63 74 69 6f 6e 0a 09 09 09  mod function....
6bd30 20 2a 20 20 40 74 79 70 65 20 20 7b 54 6f 6e 65   *  @type  {Tone
6bd40 2e 4d 6f 64 75 6c 6f 7d 0a 09 09 09 20 2a 20 20  .Modulo}.... *  
6bd50 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a  @private.... */.
6bd60 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d  .        this._m
6bd70 6f 64 75 6c 6f 20 3d 20 6e 65 77 20 54 6f 6e 65  odulo = new Tone
6bd80 2e 4d 6f 64 75 6c 6f 28 69 6e 76 53 74 65 70 53  .Modulo(invStepS
6bd90 69 7a 65 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  ize);..        /
6bda0 2a 2a 0a 09 09 09 20 2a 20 20 6b 65 65 70 73 20  **.... *  keeps 
6bdb0 74 72 61 63 6b 20 6f 66 20 74 68 65 20 62 69 74  track of the bit
6bdc0 73 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b  s.... *  @type {
6bdd0 6e 75 6d 62 65 72 7d 0a 09 09 09 20 2a 20 20 40  number}.... *  @
6bde0 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
6bdf0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 62 69          this._bi
6be00 74 73 20 3d 20 6f 70 74 69 6f 6e 73 2e 62 69 74  ts = options.bit
6be10 73 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 63 6f  s;..        //co
6be20 6e 6e 65 63 74 20 69 74 20 75 70 0a 09 20 20 20  nnect it up..   
6be30 20 20 20 20 20 74 68 69 73 2e 65 66 66 65 63 74       this.effect
6be40 53 65 6e 64 2e 66 61 6e 28 74 68 69 73 2e 5f 73  Send.fan(this._s
6be50 75 62 74 72 61 63 74 2c 20 74 68 69 73 2e 5f 6d  ubtract, this._m
6be60 6f 64 75 6c 6f 29 3b 0a 09 20 20 20 20 20 20 20  odulo);..       
6be70 20 74 68 69 73 2e 5f 6d 6f 64 75 6c 6f 2e 63 6f   this._modulo.co
6be80 6e 6e 65 63 74 28 74 68 69 73 2e 5f 73 75 62 74  nnect(this._subt
6be90 72 61 63 74 2c 20 30 2c 20 31 29 3b 0a 09 20 20  ract, 0, 1);..  
6bea0 20 20 20 20 20 20 74 68 69 73 2e 5f 73 75 62 74        this._subt
6beb0 72 61 63 74 2e 63 6f 6e 6e 65 63 74 28 74 68 69  ract.connect(thi
6bec0 73 2e 65 66 66 65 63 74 52 65 74 75 72 6e 29 3b  s.effectReturn);
6bed0 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f  ..    };..    To
6bee0 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 42  ne.extend(Tone.B
6bef0 69 74 43 72 75 73 68 65 72 2c 20 54 6f 6e 65 2e  itCrusher, Tone.
6bf00 45 66 66 65 63 74 29 3b 0a 09 20 20 20 20 2f 2a  Effect);..    /*
6bf10 2a 0a 09 09 20 2a 20 20 74 68 65 20 64 65 66 61  *... *  the defa
6bf20 75 6c 74 20 76 61 6c 75 65 73 0a 09 09 20 2a 20  ult values... * 
6bf30 20 40 73 74 61 74 69 63 0a 09 09 20 2a 20 20 40   @static... *  @
6bf40 74 79 70 65 20 7b 4f 62 6a 65 63 74 7d 0a 09 09  type {Object}...
6bf50 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 42 69   */..    Tone.Bi
6bf60 74 43 72 75 73 68 65 72 2e 64 65 66 61 75 6c 74  tCrusher.default
6bf70 73 20 3d 20 7b 20 27 62 69 74 73 27 3a 20 34 20  s = { 'bits': 4 
6bf80 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  };..    /**... *
6bf90 20 54 68 65 20 62 69 74 20 64 65 70 74 68 20 6f   The bit depth o
6bfa0 66 20 74 68 65 20 65 66 66 65 63 74 2e 20 4e 6f  f the effect. No
6bfb0 6d 69 6e 61 6c 20 72 61 6e 67 65 20 6f 66 20 31  minal range of 1
6bfc0 2d 38 2e 20 0a 09 09 20 2a 20 40 6d 65 6d 62 65  -8. ... * @membe
6bfd0 72 4f 66 20 54 6f 6e 65 2e 42 69 74 43 72 75 73  rOf Tone.BitCrus
6bfe0 68 65 72 23 0a 09 09 20 2a 20 40 74 79 70 65 20  her#... * @type 
6bff0 7b 6e 75 6d 62 65 72 7d 0a 09 09 20 2a 20 40 6e  {number}... * @n
6c000 61 6d 65 20 62 69 74 73 0a 09 09 20 2a 2f 0a 09  ame bits... */..
6c010 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e      Object.defin
6c020 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 42  eProperty(Tone.B
6c030 69 74 43 72 75 73 68 65 72 2e 70 72 6f 74 6f 74  itCrusher.protot
6c040 79 70 65 2c 20 27 62 69 74 73 27 2c 20 7b 0a 09  ype, 'bits', {..
6c050 20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e          get: fun
6c060 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
6c070 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
6c080 68 69 73 2e 5f 62 69 74 73 3b 0a 09 20 20 20 20  his._bits;..    
6c090 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20      },..        
6c0a0 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 62  set: function (b
6c0b0 69 74 73 29 20 7b 0a 09 20 20 20 20 20 20 20 20  its) {..        
6c0c0 20 20 20 20 74 68 69 73 2e 5f 62 69 74 73 20 3d      this._bits =
6c0d0 20 62 69 74 73 3b 0a 09 20 20 20 20 20 20 20 20   bits;..        
6c0e0 20 20 20 20 76 61 72 20 69 6e 76 53 74 65 70 53      var invStepS
6c0f0 69 7a 65 20 3d 20 31 20 2f 20 4d 61 74 68 2e 70  ize = 1 / Math.p
6c100 6f 77 28 32 2c 20 62 69 74 73 20 2d 20 31 29 3b  ow(2, bits - 1);
6c110 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
6c120 69 73 2e 5f 6d 6f 64 75 6c 6f 2e 76 61 6c 75 65  is._modulo.value
6c130 20 3d 20 69 6e 76 53 74 65 70 53 69 7a 65 3b 0a   = invStepSize;.
6c140 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
6c150 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  });..    /**... 
6c160 2a 20 20 43 6c 65 61 6e 20 75 70 2e 20 0a 09 09  *  Clean up. ...
6c170 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f   *  @returns {To
6c180 6e 65 2e 42 69 74 43 72 75 73 68 65 72 7d 20 74  ne.BitCrusher} t
6c190 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  his... */..    T
6c1a0 6f 6e 65 2e 42 69 74 43 72 75 73 68 65 72 2e 70  one.BitCrusher.p
6c1b0 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65  rototype.dispose
6c1c0 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b   = function () {
6c1d0 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 45  ..        Tone.E
6c1e0 66 66 65 63 74 2e 70 72 6f 74 6f 74 79 70 65 2e  ffect.prototype.
6c1f0 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69  dispose.call(thi
6c200 73 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  s);..        thi
6c210 73 2e 5f 73 75 62 74 72 61 63 74 2e 64 69 73 70  s._subtract.disp
6c220 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ose();..        
6c230 74 68 69 73 2e 5f 73 75 62 74 72 61 63 74 20 3d  this._subtract =
6c240 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
6c250 74 68 69 73 2e 5f 6d 6f 64 75 6c 6f 2e 64 69 73  this._modulo.dis
6c260 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20  pose();..       
6c270 20 74 68 69 73 2e 5f 6d 6f 64 75 6c 6f 20 3d 20   this._modulo = 
6c280 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 72  null;..        r
6c290 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20  eturn this;..   
6c2a0 20 7d 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20   };..    return 
6c2b0 54 6f 6e 65 2e 42 69 74 43 72 75 73 68 65 72 3b  Tone.BitCrusher;
6c2c0 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75  ..});..Module(fu
6c2d0 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a  nction (Tone) {.
6c2e0 09 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09  .    ..    /**..
6c2f0 09 20 2a 20 20 40 63 6c 61 73 73 20 54 6f 6e 65  . *  @class Tone
6c300 2e 43 68 65 62 79 53 68 65 76 20 69 73 20 61 20  .ChebyShev is a 
6c310 43 68 65 62 79 73 68 65 76 20 77 61 76 65 73 68  Chebyshev wavesh
6c320 61 70 65 72 2c 20 61 6e 20 65 66 66 65 63 74 20  aper, an effect 
6c330 77 68 69 63 68 20 69 73 20 67 6f 6f 64 20 0a 09  which is good ..
6c340 09 20 2a 20 20 20 20 20 20 20 20 20 66 6f 72 20  . *         for 
6c350 6d 61 6b 69 6e 67 20 64 69 66 66 65 72 65 6e 74  making different
6c360 20 74 79 70 65 73 20 6f 66 20 64 69 73 74 6f 72   types of distor
6c370 74 69 6f 6e 20 73 6f 75 6e 64 73 2e 0a 09 09 20  tion sounds.... 
6c380 2a 20 20 20 20 20 20 20 20 20 4e 6f 74 65 20 74  *         Note t
6c390 68 61 74 20 6f 64 64 20 6f 72 64 65 72 73 20 73  hat odd orders s
6c3a0 6f 75 6e 64 20 76 65 72 79 20 64 69 66 66 65 72  ound very differ
6c3b0 65 6e 74 20 66 72 6f 6d 20 65 76 65 6e 20 6f 6e  ent from even on
6c3c0 65 73 2c 20 0a 09 09 20 2a 20 20 20 20 20 20 20  es, ... *       
6c3d0 20 20 61 6e 64 20 6f 72 64 65 72 20 3d 20 31 20    and order = 1 
6c3e0 69 73 20 6e 6f 20 63 68 61 6e 67 65 2e 20 0a 09  is no change. ..
6c3f0 09 20 2a 20 20 20 20 20 20 20 20 20 52 65 61 64  . *         Read
6c400 20 6d 6f 72 65 20 61 74 20 5b 6d 75 73 69 63 2e   more at [music.
6c410 63 6f 6c 75 6d 62 69 61 2e 65 64 75 5d 28 68 74  columbia.edu](ht
6c420 74 70 3a 2f 2f 6d 75 73 69 63 2e 63 6f 6c 75 6d  tp://music.colum
6c430 62 69 61 2e 65 64 75 2f 63 6d 63 2f 6d 75 73 69  bia.edu/cmc/musi
6c440 63 61 6e 64 63 6f 6d 70 75 74 65 72 73 2f 63 68  candcomputers/ch
6c450 61 70 74 65 72 34 2f 30 34 5f 30 36 2e 70 68 70  apter4/04_06.php
6c460 29 2e 0a 09 09 20 2a 0a 09 09 20 2a 20 20 40 65  ).... *... *  @e
6c470 78 74 65 6e 64 73 20 7b 54 6f 6e 65 2e 45 66 66  xtends {Tone.Eff
6c480 65 63 74 7d 0a 09 09 20 2a 20 20 40 63 6f 6e 73  ect}... *  @cons
6c490 74 72 75 63 74 6f 72 0a 09 09 20 2a 20 20 40 70  tructor... *  @p
6c4a0 61 72 61 6d 20 7b 50 6f 73 69 74 69 76 65 7c 4f  aram {Positive|O
6c4b0 62 6a 65 63 74 7d 20 5b 6f 72 64 65 72 5d 20 54  bject} [order] T
6c4c0 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65 20  he order of the 
6c4d0 63 68 65 62 79 73 68 65 76 20 70 6f 6c 79 6e 6f  chebyshev polyno
6c4e0 6d 69 61 6c 2e 20 4e 6f 72 6d 61 6c 20 72 61 6e  mial. Normal ran
6c4f0 67 65 20 62 65 74 77 65 65 6e 20 31 2d 31 30 30  ge between 1-100
6c500 2e 20 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c  . ... *  @exampl
6c510 65 0a 09 09 20 2a 20 2f 2f 63 72 65 61 74 65 20  e... * //create 
6c520 61 20 6e 65 77 20 63 68 65 62 79 0a 09 09 20 2a  a new cheby... *
6c530 20 76 61 72 20 63 68 65 62 79 20 3d 20 6e 65 77   var cheby = new
6c540 20 54 6f 6e 65 2e 43 68 65 62 79 73 68 65 76 28   Tone.Chebyshev(
6c550 35 30 29 3b 0a 09 09 20 2a 20 2f 2f 63 72 65 61  50);... * //crea
6c560 74 65 20 61 20 6d 6f 6e 6f 73 79 6e 74 68 20 63  te a monosynth c
6c570 6f 6e 6e 65 63 74 65 64 20 74 6f 20 6f 75 72 20  onnected to our 
6c580 63 68 65 62 79 0a 09 09 20 2a 20 73 79 6e 74 68  cheby... * synth
6c590 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4d 6f 6e 6f   = new Tone.Mono
6c5a0 53 79 6e 74 68 28 29 2e 63 6f 6e 6e 65 63 74 28  Synth().connect(
6c5b0 63 68 65 62 79 29 3b 0a 09 09 20 2a 2f 0a 09 20  cheby);... */.. 
6c5c0 20 20 20 54 6f 6e 65 2e 43 68 65 62 79 73 68 65     Tone.Chebyshe
6c5d0 76 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  v = function () 
6c5e0 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 6f  {..        var o
6c5f0 70 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e 6f 70  ptions = this.op
6c600 74 69 6f 6e 73 4f 62 6a 65 63 74 28 61 72 67 75  tionsObject(argu
6c610 6d 65 6e 74 73 2c 20 5b 27 6f 72 64 65 72 27 5d  ments, ['order']
6c620 2c 20 54 6f 6e 65 2e 43 68 65 62 79 73 68 65 76  , Tone.Chebyshev
6c630 2e 64 65 66 61 75 6c 74 73 29 3b 0a 09 20 20 20  .defaults);..   
6c640 20 20 20 20 20 54 6f 6e 65 2e 45 66 66 65 63 74       Tone.Effect
6c650 2e 63 61 6c 6c 28 74 68 69 73 2c 20 6f 70 74 69  .call(this, opti
6c660 6f 6e 73 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  ons);..        /
6c670 2a 2a 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  **.... *  @type 
6c680 7b 57 61 76 65 53 68 61 70 65 72 4e 6f 64 65 7d  {WaveShaperNode}
6c690 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  .... *  @private
6c6a0 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
6c6b0 20 74 68 69 73 2e 5f 73 68 61 70 65 72 20 3d 20   this._shaper = 
6c6c0 6e 65 77 20 54 6f 6e 65 2e 57 61 76 65 53 68 61  new Tone.WaveSha
6c6d0 70 65 72 28 34 30 39 36 29 3b 0a 09 20 20 20 20  per(4096);..    
6c6e0 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 68 6f      /**.... * ho
6c6f0 6c 64 73 20 6f 6e 74 6f 20 74 68 65 20 6f 72 64  lds onto the ord
6c700 65 72 20 6f 66 20 74 68 65 20 66 69 6c 74 65 72  er of the filter
6c710 0a 09 09 09 20 2a 20 40 74 79 70 65 20 7b 6e 75  .... * @type {nu
6c720 6d 62 65 72 7d 0a 09 09 09 20 2a 20 40 70 72 69  mber}.... * @pri
6c730 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20  vate.... */..   
6c740 20 20 20 20 20 74 68 69 73 2e 5f 6f 72 64 65 72       this._order
6c750 20 3d 20 6f 70 74 69 6f 6e 73 2e 6f 72 64 65 72   = options.order
6c760 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
6c770 63 6f 6e 6e 65 63 74 45 66 66 65 63 74 28 74 68  connectEffect(th
6c780 69 73 2e 5f 73 68 61 70 65 72 29 3b 0a 09 20 20  is._shaper);..  
6c790 20 20 20 20 20 20 74 68 69 73 2e 6f 72 64 65 72        this.order
6c7a0 20 3d 20 6f 70 74 69 6f 6e 73 2e 6f 72 64 65 72   = options.order
6c7b0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
6c7c0 6f 76 65 72 73 61 6d 70 6c 65 20 3d 20 6f 70 74  oversample = opt
6c7d0 69 6f 6e 73 2e 6f 76 65 72 73 61 6d 70 6c 65 3b  ions.oversample;
6c7e0 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f  ..    };..    To
6c7f0 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 43  ne.extend(Tone.C
6c800 68 65 62 79 73 68 65 76 2c 20 54 6f 6e 65 2e 45  hebyshev, Tone.E
6c810 66 66 65 63 74 29 3b 0a 09 20 20 20 20 2f 2a 2a  ffect);..    /**
6c820 0a 09 09 20 2a 20 20 40 73 74 61 74 69 63 0a 09  ... *  @static..
6c830 09 20 2a 20 20 40 63 6f 6e 73 74 0a 09 09 20 2a  . *  @const... *
6c840 20 20 40 74 79 70 65 20 7b 4f 62 6a 65 63 74 7d    @type {Object}
6c850 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
6c860 2e 43 68 65 62 79 73 68 65 76 2e 64 65 66 61 75  .Chebyshev.defau
6c870 6c 74 73 20 3d 20 7b 0a 09 20 20 20 20 20 20 20  lts = {..       
6c880 20 27 6f 72 64 65 72 27 3a 20 31 2c 0a 09 20 20   'order': 1,..  
6c890 20 20 20 20 20 20 27 6f 76 65 72 73 61 6d 70 6c        'oversampl
6c8a0 65 27 3a 20 27 6e 6f 6e 65 27 0a 09 20 20 20 20  e': 'none'..    
6c8b0 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  };..    /**... *
6c8c0 20 20 67 65 74 20 74 68 65 20 63 6f 65 66 66 69    get the coeffi
6c8d0 63 69 65 6e 74 20 66 6f 72 20 74 68 61 74 20 64  cient for that d
6c8e0 65 67 72 65 65 0a 09 09 20 2a 20 20 40 70 61 72  egree... *  @par
6c8f0 61 6d 20 7b 6e 75 6d 62 65 72 7d 20 78 20 74 68  am {number} x th
6c900 65 20 78 20 76 61 6c 75 65 0a 09 09 20 2a 20 20  e x value... *  
6c910 40 70 61 72 61 6d 20 20 20 7b 6e 75 6d 62 65 72  @param   {number
6c920 7d 20 64 65 67 72 65 65 20 0a 09 09 20 2a 20 20  } degree ... *  
6c930 40 70 61 72 61 6d 20 7b 4f 62 6a 65 63 74 7d 20  @param {Object} 
6c940 6d 65 6d 6f 20 6d 65 6d 6f 69 7a 65 20 74 68 65  memo memoize the
6c950 20 63 6f 6d 70 75 74 65 64 20 76 61 6c 75 65 2e   computed value.
6c960 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20   ... *          
6c970 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
6c980 73 20 73 70 65 65 64 73 20 75 70 20 63 6f 6d 70  s speeds up comp
6c990 75 74 61 74 69 6f 6e 20 67 72 65 61 74 6c 79 2e  utation greatly.
6c9a0 20 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20   ... *  @return 
6c9b0 20 7b 6e 75 6d 62 65 72 7d 20 20 20 20 20 20 20   {number}       
6c9c0 74 68 65 20 63 6f 65 66 66 69 63 69 65 6e 74 20  the coefficient 
6c9d0 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
6c9e0 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
6c9f0 43 68 65 62 79 73 68 65 76 2e 70 72 6f 74 6f 74  Chebyshev.protot
6ca00 79 70 65 2e 5f 67 65 74 43 6f 65 66 66 69 63 69  ype._getCoeffici
6ca10 65 6e 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  ent = function (
6ca20 78 2c 20 64 65 67 72 65 65 2c 20 6d 65 6d 6f 29  x, degree, memo)
6ca30 20 7b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
6ca40 6d 65 6d 6f 2e 68 61 73 4f 77 6e 50 72 6f 70 65  memo.hasOwnPrope
6ca50 72 74 79 28 64 65 67 72 65 65 29 29 20 7b 0a 09  rty(degree)) {..
6ca60 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
6ca70 72 6e 20 6d 65 6d 6f 5b 64 65 67 72 65 65 5d 3b  rn memo[degree];
6ca80 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
6ca90 20 69 66 20 28 64 65 67 72 65 65 20 3d 3d 3d 20   if (degree === 
6caa0 30 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  0) {..          
6cab0 20 20 6d 65 6d 6f 5b 64 65 67 72 65 65 5d 20 3d    memo[degree] =
6cac0 20 30 3b 0a 09 20 20 20 20 20 20 20 20 7d 20 65   0;..        } e
6cad0 6c 73 65 20 69 66 20 28 64 65 67 72 65 65 20 3d  lse if (degree =
6cae0 3d 3d 20 31 29 20 7b 0a 09 20 20 20 20 20 20 20  == 1) {..       
6caf0 20 20 20 20 20 6d 65 6d 6f 5b 64 65 67 72 65 65       memo[degree
6cb00 5d 20 3d 20 78 3b 0a 09 20 20 20 20 20 20 20 20  ] = x;..        
6cb10 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20  } else {..      
6cb20 20 20 20 20 20 20 6d 65 6d 6f 5b 64 65 67 72 65        memo[degre
6cb30 65 5d 20 3d 20 32 20 2a 20 78 20 2a 20 74 68 69  e] = 2 * x * thi
6cb40 73 2e 5f 67 65 74 43 6f 65 66 66 69 63 69 65 6e  s._getCoefficien
6cb50 74 28 78 2c 20 64 65 67 72 65 65 20 2d 20 31 2c  t(x, degree - 1,
6cb60 20 6d 65 6d 6f 29 20 2d 20 74 68 69 73 2e 5f 67   memo) - this._g
6cb70 65 74 43 6f 65 66 66 69 63 69 65 6e 74 28 78 2c  etCoefficient(x,
6cb80 20 64 65 67 72 65 65 20 2d 20 32 2c 20 6d 65 6d   degree - 2, mem
6cb90 6f 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  o);..        }..
6cba0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d          return m
6cbb0 65 6d 6f 5b 64 65 67 72 65 65 5d 3b 0a 09 20 20  emo[degree];..  
6cbc0 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    };..    /**...
6cbd0 20 2a 20 54 68 65 20 6f 72 64 65 72 20 6f 66 20   * The order of 
6cbe0 74 68 65 20 43 68 65 62 79 73 68 65 76 20 70 6f  the Chebyshev po
6cbf0 6c 79 6e 6f 6d 69 61 6c 20 77 68 69 63 68 20 63  lynomial which c
6cc00 72 65 61 74 65 73 0a 09 09 20 2a 20 74 68 65 20  reates... * the 
6cc10 65 71 75 61 74 69 6f 6e 20 77 68 69 63 68 20 69  equation which i
6cc20 73 20 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65  s applied to the
6cc30 20 69 6e 63 6f 6d 69 6e 67 20 0a 09 09 20 2a 20   incoming ... * 
6cc40 73 69 67 6e 61 6c 20 74 68 72 6f 75 67 68 20 61  signal through a
6cc50 20 54 6f 6e 65 2e 57 61 76 65 53 68 61 70 65 72   Tone.WaveShaper
6cc60 2e 20 54 68 65 20 65 71 75 61 74 69 6f 6e 73 0a  . The equations.
6cc70 09 09 20 2a 20 61 72 65 20 69 6e 20 74 68 65 20  .. * are in the 
6cc80 66 6f 72 6d 3a 3c 62 72 3e 0a 09 09 20 2a 20 6f  form:<br>... * o
6cc90 72 64 65 72 20 32 3a 20 32 78 5e 32 20 2b 20 31  rder 2: 2x^2 + 1
6cca0 3c 62 72 3e 0a 09 09 20 2a 20 6f 72 64 65 72 20  <br>... * order 
6ccb0 33 3a 20 34 78 5e 33 20 2b 20 33 78 20 3c 62 72  3: 4x^3 + 3x <br
6ccc0 3e 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66  >... * @memberOf
6ccd0 20 54 6f 6e 65 2e 43 68 65 62 79 73 68 65 76 23   Tone.Chebyshev#
6cce0 0a 09 09 20 2a 20 40 74 79 70 65 20 7b 50 6f 73  ... * @type {Pos
6ccf0 69 74 69 76 65 7d 0a 09 09 20 2a 20 40 6e 61 6d  itive}... * @nam
6cd00 65 20 6f 72 64 65 72 0a 09 09 20 2a 2f 0a 09 20  e order... */.. 
6cd10 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65     Object.define
6cd20 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 43 68  Property(Tone.Ch
6cd30 65 62 79 73 68 65 76 2e 70 72 6f 74 6f 74 79 70  ebyshev.prototyp
6cd40 65 2c 20 27 6f 72 64 65 72 27 2c 20 7b 0a 09 20  e, 'order', {.. 
6cd50 20 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63         get: func
6cd60 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
6cd70 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
6cd80 69 73 2e 5f 6f 72 64 65 72 3b 0a 09 20 20 20 20  is._order;..    
6cd90 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20      },..        
6cda0 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 6f  set: function (o
6cdb0 72 64 65 72 29 20 7b 0a 09 20 20 20 20 20 20 20  rder) {..       
6cdc0 20 20 20 20 20 74 68 69 73 2e 5f 6f 72 64 65 72       this._order
6cdd0 20 3d 20 6f 72 64 65 72 3b 0a 09 20 20 20 20 20   = order;..     
6cde0 20 20 20 20 20 20 20 76 61 72 20 63 75 72 76 65         var curve
6cdf0 20 3d 20 6e 65 77 20 41 72 72 61 79 28 34 30 39   = new Array(409
6ce00 36 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  6);..           
6ce10 20 76 61 72 20 6c 65 6e 20 3d 20 63 75 72 76 65   var len = curve
6ce20 2e 6c 65 6e 67 74 68 3b 0a 09 20 20 20 20 20 20  .length;..      
6ce30 20 20 20 20 20 20 66 6f 72 20 28 76 61 72 20 69        for (var i
6ce40 20 3d 20 30 3b 20 69 20 3c 20 6c 65 6e 3b 20 2b   = 0; i < len; +
6ce50 2b 69 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  +i) {..         
6ce60 20 20 20 20 20 20 20 76 61 72 20 78 20 3d 20 69         var x = i
6ce70 20 2a 20 32 20 2f 20 6c 65 6e 20 2d 20 31 3b 0a   * 2 / len - 1;.
6ce80 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6ce90 20 69 66 20 28 78 20 3d 3d 3d 20 30 29 20 7b 0a   if (x === 0) {.
6cea0 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6ceb0 20 20 20 20 20 2f 2f 73 68 6f 75 6c 64 20 6f 75       //should ou
6cec0 74 70 75 74 20 30 20 77 68 65 6e 20 69 6e 70 75  tput 0 when inpu
6ced0 74 20 69 73 20 30 0a 09 20 20 20 20 20 20 20 20  t is 0..        
6cee0 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72 76              curv
6cef0 65 5b 69 5d 20 3d 20 30 3b 0a 09 20 20 20 20 20  e[i] = 0;..     
6cf00 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
6cf10 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e {..           
6cf20 20 20 20 20 20 20 20 20 20 63 75 72 76 65 5b 69           curve[i
6cf30 5d 20 3d 20 74 68 69 73 2e 5f 67 65 74 43 6f 65  ] = this._getCoe
6cf40 66 66 69 63 69 65 6e 74 28 78 2c 20 6f 72 64 65  fficient(x, orde
6cf50 72 2c 20 7b 7d 29 3b 0a 09 20 20 20 20 20 20 20  r, {});..       
6cf60 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20           }..    
6cf70 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
6cf80 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 68 61         this._sha
6cf90 70 65 72 2e 63 75 72 76 65 20 3d 20 63 75 72 76  per.curve = curv
6cfa0 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  e;..        }.. 
6cfb0 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a     });..    /**.
6cfc0 09 09 20 2a 20 54 68 65 20 6f 76 65 72 73 61 6d  .. * The oversam
6cfd0 70 6c 69 6e 67 20 6f 66 20 74 68 65 20 65 66 66  pling of the eff
6cfe0 65 63 74 2e 20 43 61 6e 20 65 69 74 68 65 72 20  ect. Can either 
6cff0 62 65 20 22 6e 6f 6e 65 22 2c 20 22 32 78 22 20  be "none", "2x" 
6d000 6f 72 20 22 34 78 22 2e 0a 09 09 20 2a 20 40 6d  or "4x".... * @m
6d010 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 43 68 65  emberOf Tone.Che
6d020 62 79 73 68 65 76 23 0a 09 09 20 2a 20 40 74 79  byshev#... * @ty
6d030 70 65 20 7b 73 74 72 69 6e 67 7d 0a 09 09 20 2a  pe {string}... *
6d040 20 40 6e 61 6d 65 20 6f 76 65 72 73 61 6d 70 6c   @name oversampl
6d050 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a  e... */..    Obj
6d060 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72  ect.defineProper
6d070 74 79 28 54 6f 6e 65 2e 43 68 65 62 79 73 68 65  ty(Tone.Chebyshe
6d080 76 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 6f 76  v.prototype, 'ov
6d090 65 72 73 61 6d 70 6c 65 27 2c 20 7b 0a 09 20 20  ersample', {..  
6d0a0 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74        get: funct
6d0b0 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
6d0c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
6d0d0 73 2e 5f 73 68 61 70 65 72 2e 6f 76 65 72 73 61  s._shaper.oversa
6d0e0 6d 70 6c 65 3b 0a 09 20 20 20 20 20 20 20 20 7d  mple;..        }
6d0f0 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20  ,..        set: 
6d100 66 75 6e 63 74 69 6f 6e 20 28 6f 76 65 72 73 61  function (oversa
6d110 6d 70 6c 69 6e 67 29 20 7b 0a 09 20 20 20 20 20  mpling) {..     
6d120 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 68 61         this._sha
6d130 70 65 72 2e 6f 76 65 72 73 61 6d 70 6c 65 20 3d  per.oversample =
6d140 20 6f 76 65 72 73 61 6d 70 6c 69 6e 67 3b 0a 09   oversampling;..
6d150 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d          }..    }
6d160 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  );..    /**... *
6d170 20 20 43 6c 65 61 6e 20 75 70 2e 20 0a 09 09 20    Clean up. ... 
6d180 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e  *  @returns {Ton
6d190 65 2e 43 68 65 62 79 73 68 65 76 7d 20 74 68 69  e.Chebyshev} thi
6d1a0 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  s... */..    Ton
6d1b0 65 2e 43 68 65 62 79 73 68 65 76 2e 70 72 6f 74  e.Chebyshev.prot
6d1c0 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20  otype.dispose = 
6d1d0 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
6d1e0 20 20 20 20 20 20 20 54 6f 6e 65 2e 45 66 66 65         Tone.Effe
6d1f0 63 74 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73  ct.prototype.dis
6d200 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b  pose.call(this);
6d210 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
6d220 73 68 61 70 65 72 2e 64 69 73 70 6f 73 65 28 29  shaper.dispose()
6d230 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
6d240 5f 73 68 61 70 65 72 20 3d 20 6e 75 6c 6c 3b 0a  _shaper = null;.
6d250 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
6d260 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20  this;..    };.. 
6d270 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 43     return Tone.C
6d280 68 65 62 79 73 68 65 76 3b 0a 09 7d 29 3b 0a 09  hebyshev;..});..
6d290 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20  Module(function 
6d2a0 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09  (Tone) {..    ..
6d2b0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63      /**... *  @c
6d2c0 6c 61 73 73 20 42 61 73 65 20 63 6c 61 73 73 20  lass Base class 
6d2d0 66 6f 72 20 53 74 65 72 65 6f 20 65 66 66 65 63  for Stereo effec
6d2e0 74 73 2e 20 50 72 6f 76 69 64 65 73 20 65 66 66  ts. Provides eff
6d2f0 65 63 74 53 65 6e 64 4c 2f 52 20 61 6e 64 20 65  ectSendL/R and e
6d300 66 66 65 63 74 52 65 74 75 72 6e 4c 2f 52 2e 20  ffectReturnL/R. 
6d310 0a 09 09 20 2a 0a 09 09 20 2a 09 40 63 6f 6e 73  ... *... *.@cons
6d320 74 72 75 63 74 6f 72 0a 09 09 20 2a 09 40 65 78  tructor... *.@ex
6d330 74 65 6e 64 73 20 7b 54 6f 6e 65 2e 45 66 66 65  tends {Tone.Effe
6d340 63 74 7d 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  ct}... */..    T
6d350 6f 6e 65 2e 53 74 65 72 65 6f 45 66 66 65 63 74  one.StereoEffect
6d360 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b   = function () {
6d370 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 63  ..        this.c
6d380 72 65 61 74 65 49 6e 73 4f 75 74 73 28 31 2c 20  reateInsOuts(1, 
6d390 31 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 67  1);..        //g
6d3a0 65 74 20 74 68 65 20 64 65 66 61 75 6c 74 73 0a  et the defaults.
6d3b0 09 20 20 20 20 20 20 20 20 76 61 72 20 6f 70 74  .        var opt
6d3c0 69 6f 6e 73 20 3d 20 74 68 69 73 2e 6f 70 74 69  ions = this.opti
6d3d0 6f 6e 73 4f 62 6a 65 63 74 28 61 72 67 75 6d 65  onsObject(argume
6d3e0 6e 74 73 2c 20 5b 27 77 65 74 27 5d 2c 20 54 6f  nts, ['wet'], To
6d3f0 6e 65 2e 45 66 66 65 63 74 2e 64 65 66 61 75 6c  ne.Effect.defaul
6d400 74 73 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a  ts);..        /*
6d410 2a 0a 09 09 09 20 2a 20 20 74 68 65 20 64 72 79  *.... *  the dry
6d420 77 65 74 20 6b 6e 6f 62 20 74 6f 20 63 6f 6e 74  wet knob to cont
6d430 72 6f 6c 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f  rol the amount o
6d440 66 20 65 66 66 65 63 74 0a 09 09 09 20 2a 20 20  f effect.... *  
6d450 40 74 79 70 65 20 7b 54 6f 6e 65 2e 43 72 6f 73  @type {Tone.Cros
6d460 73 46 61 64 65 7d 0a 09 09 09 20 2a 20 20 40 70  sFade}.... *  @p
6d470 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20  rivate.... */.. 
6d480 20 20 20 20 20 20 20 74 68 69 73 2e 5f 64 72 79         this._dry
6d490 57 65 74 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 43  Wet = new Tone.C
6d4a0 72 6f 73 73 46 61 64 65 28 6f 70 74 69 6f 6e 73  rossFade(options
6d4b0 2e 77 65 74 29 3b 0a 09 20 20 20 20 20 20 20 20  .wet);..        
6d4c0 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 77  /**.... *  The w
6d4d0 65 74 20 63 6f 6e 74 72 6f 6c 2c 20 69 2e 65 2e  et control, i.e.
6d4e0 20 68 6f 77 20 6d 75 63 68 20 6f 66 20 74 68 65   how much of the
6d4f0 20 65 66 66 65 63 74 65 64 0a 09 09 09 20 2a 20   effected.... * 
6d500 20 77 69 6c 6c 20 70 61 73 73 20 74 68 72 6f 75   will pass throu
6d510 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  gh to the output
6d520 2e 20 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  . .... *  @type 
6d530 7b 4e 6f 72 6d 61 6c 52 61 6e 67 65 7d 0a 09 09  {NormalRange}...
6d540 09 20 2a 20 20 40 73 69 67 6e 61 6c 0a 09 09 09  . *  @signal....
6d550 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
6d560 73 2e 77 65 74 20 3d 20 74 68 69 73 2e 5f 64 72  s.wet = this._dr
6d570 79 57 65 74 2e 66 61 64 65 3b 0a 09 20 20 20 20  yWet.fade;..    
6d580 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 74      /**.... *  t
6d590 68 65 6e 20 73 70 6c 69 74 20 69 74 0a 09 09 09  hen split it....
6d5a0 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e   *  @type {Tone.
6d5b0 53 70 6c 69 74 7d 0a 09 09 09 20 2a 20 20 40 70  Split}.... *  @p
6d5c0 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20  rivate.... */.. 
6d5d0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 70 6c         this._spl
6d5e0 69 74 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53 70  it = new Tone.Sp
6d5f0 6c 69 74 28 29 3b 0a 09 20 20 20 20 20 20 20 20  lit();..        
6d600 2f 2a 2a 0a 09 09 09 20 2a 20 20 74 68 65 20 65  /**.... *  the e
6d610 66 66 65 63 74 73 20 73 65 6e 64 20 4c 45 46 54  ffects send LEFT
6d620 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 47  .... *  @type {G
6d630 61 69 6e 4e 6f 64 65 7d 0a 09 09 09 20 2a 20 20  ainNode}.... *  
6d640 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a  @private.... */.
6d650 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 65 66  .        this.ef
6d660 66 65 63 74 53 65 6e 64 4c 20 3d 20 74 68 69 73  fectSendL = this
6d670 2e 5f 73 70 6c 69 74 2e 6c 65 66 74 3b 0a 09 20  ._split.left;.. 
6d680 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
6d690 20 20 74 68 65 20 65 66 66 65 63 74 73 20 73 65    the effects se
6d6a0 6e 64 20 52 49 47 48 54 0a 09 09 09 20 2a 20 20  nd RIGHT.... *  
6d6b0 40 74 79 70 65 20 7b 47 61 69 6e 4e 6f 64 65 7d  @type {GainNode}
6d6c0 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  .... *  @private
6d6d0 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
6d6e0 20 74 68 69 73 2e 65 66 66 65 63 74 53 65 6e 64   this.effectSend
6d6f0 52 20 3d 20 74 68 69 73 2e 5f 73 70 6c 69 74 2e  R = this._split.
6d700 72 69 67 68 74 3b 0a 09 20 20 20 20 20 20 20 20  right;..        
6d710 2f 2a 2a 0a 09 09 09 20 2a 20 20 74 68 65 20 73  /**.... *  the s
6d720 74 65 72 65 6f 20 65 66 66 65 63 74 20 6d 65 72  tereo effect mer
6d730 67 65 72 0a 09 09 09 20 2a 20 20 40 74 79 70 65  ger.... *  @type
6d740 20 7b 54 6f 6e 65 2e 4d 65 72 67 65 7d 0a 09 09   {Tone.Merge}...
6d750 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
6d760 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
6d770 69 73 2e 5f 6d 65 72 67 65 20 3d 20 6e 65 77 20  is._merge = new 
6d780 54 6f 6e 65 2e 4d 65 72 67 65 28 29 3b 0a 09 20  Tone.Merge();.. 
6d790 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
6d7a0 20 20 74 68 65 20 65 66 66 65 63 74 20 72 65 74    the effect ret
6d7b0 75 72 6e 20 4c 45 46 54 0a 09 09 09 20 2a 20 20  urn LEFT.... *  
6d7c0 40 74 79 70 65 20 7b 47 61 69 6e 4e 6f 64 65 7d  @type {GainNode}
6d7d0 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  .... *  @private
6d7e0 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
6d7f0 20 74 68 69 73 2e 65 66 66 65 63 74 52 65 74 75   this.effectRetu
6d800 72 6e 4c 20 3d 20 74 68 69 73 2e 5f 6d 65 72 67  rnL = this._merg
6d810 65 2e 6c 65 66 74 3b 0a 09 20 20 20 20 20 20 20  e.left;..       
6d820 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 74 68 65 20   /**.... *  the 
6d830 65 66 66 65 63 74 20 72 65 74 75 72 6e 20 52 49  effect return RI
6d840 47 48 54 0a 09 09 09 20 2a 20 20 40 74 79 70 65  GHT.... *  @type
6d850 20 7b 47 61 69 6e 4e 6f 64 65 7d 0a 09 09 09 20   {GainNode}.... 
6d860 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20  *  @private.... 
6d870 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
6d880 2e 65 66 66 65 63 74 52 65 74 75 72 6e 52 20 3d  .effectReturnR =
6d890 20 74 68 69 73 2e 5f 6d 65 72 67 65 2e 72 69 67   this._merge.rig
6d8a0 68 74 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 63  ht;..        //c
6d8b0 6f 6e 6e 65 63 74 69 6f 6e 73 0a 09 20 20 20 20  onnections..    
6d8c0 20 20 20 20 74 68 69 73 2e 69 6e 70 75 74 2e 63      this.input.c
6d8d0 6f 6e 6e 65 63 74 28 74 68 69 73 2e 5f 73 70 6c  onnect(this._spl
6d8e0 69 74 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f  it);..        //
6d8f0 64 72 79 20 77 65 74 20 63 6f 6e 6e 65 63 74 69  dry wet connecti
6d900 6f 6e 73 0a 09 20 20 20 20 20 20 20 20 74 68 69  ons..        thi
6d910 73 2e 69 6e 70 75 74 2e 63 6f 6e 6e 65 63 74 28  s.input.connect(
6d920 74 68 69 73 2e 5f 64 72 79 57 65 74 2c 20 30 2c  this._dryWet, 0,
6d930 20 30 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68   0);..        th
6d940 69 73 2e 5f 6d 65 72 67 65 2e 63 6f 6e 6e 65 63  is._merge.connec
6d950 74 28 74 68 69 73 2e 5f 64 72 79 57 65 74 2c 20  t(this._dryWet, 
6d960 30 2c 20 31 29 3b 0a 09 20 20 20 20 20 20 20 20  0, 1);..        
6d970 74 68 69 73 2e 5f 64 72 79 57 65 74 2e 63 6f 6e  this._dryWet.con
6d980 6e 65 63 74 28 74 68 69 73 2e 6f 75 74 70 75 74  nect(this.output
6d990 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
6d9a0 2e 5f 72 65 61 64 4f 6e 6c 79 28 5b 27 77 65 74  ._readOnly(['wet
6d9b0 27 5d 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  ']);..    };..  
6d9c0 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f    Tone.extend(To
6d9d0 6e 65 2e 53 74 65 72 65 6f 45 66 66 65 63 74 2c  ne.StereoEffect,
6d9e0 20 54 6f 6e 65 2e 45 66 66 65 63 74 29 3b 0a 09   Tone.Effect);..
6d9f0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 6c      /**... *  Cl
6da00 65 61 6e 20 75 70 2e 20 0a 09 09 20 2a 20 20 40  ean up. ... *  @
6da10 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 53 74  returns {Tone.St
6da20 65 72 65 6f 45 66 66 65 63 74 7d 20 74 68 69 73  ereoEffect} this
6da30 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
6da40 2e 53 74 65 72 65 6f 45 66 66 65 63 74 2e 70 72  .StereoEffect.pr
6da50 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20  ototype.dispose 
6da60 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  = function () {.
6da70 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 70 72  .        Tone.pr
6da80 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 2e  ototype.dispose.
6da90 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20 20  call(this);..   
6daa0 20 20 20 20 20 74 68 69 73 2e 5f 64 72 79 57 65       this._dryWe
6dab0 74 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20  t.dispose();..  
6dac0 20 20 20 20 20 20 74 68 69 73 2e 5f 64 72 79 57        this._dryW
6dad0 65 74 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  et = null;..    
6dae0 20 20 20 20 74 68 69 73 2e 5f 73 70 6c 69 74 2e      this._split.
6daf0 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20  dispose();..    
6db00 20 20 20 20 74 68 69 73 2e 5f 73 70 6c 69 74 20      this._split 
6db10 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
6db20 20 74 68 69 73 2e 5f 6d 65 72 67 65 2e 64 69 73   this._merge.dis
6db30 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20  pose();..       
6db40 20 74 68 69 73 2e 5f 6d 65 72 67 65 20 3d 20 6e   this._merge = n
6db50 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ull;..        th
6db60 69 73 2e 65 66 66 65 63 74 53 65 6e 64 4c 20 3d  is.effectSendL =
6db70 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
6db80 74 68 69 73 2e 65 66 66 65 63 74 53 65 6e 64 52  this.effectSendR
6db90 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
6dba0 20 20 74 68 69 73 2e 65 66 66 65 63 74 52 65 74    this.effectRet
6dbb0 75 72 6e 4c 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20  urnL = null;..  
6dbc0 20 20 20 20 20 20 74 68 69 73 2e 65 66 66 65 63        this.effec
6dbd0 74 52 65 74 75 72 6e 52 20 3d 20 6e 75 6c 6c 3b  tReturnR = null;
6dbe0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
6dbf0 77 72 69 74 61 62 6c 65 28 5b 27 77 65 74 27 5d  writable(['wet']
6dc00 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
6dc10 2e 77 65 74 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20  .wet = null;..  
6dc20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
6dc30 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  s;..    };..    
6dc40 72 65 74 75 72 6e 20 54 6f 6e 65 2e 53 74 65 72  return Tone.Ster
6dc50 65 6f 45 66 66 65 63 74 3b 0a 09 7d 29 3b 0a 09  eoEffect;..});..
6dc60 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20  Module(function 
6dc70 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09  (Tone) {..    ..
6dc80 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 09 40 63      /**... * .@c
6dc90 6c 61 73 73 20 20 54 6f 6e 65 2e 46 65 65 64 62  lass  Tone.Feedb
6dca0 61 63 6b 45 66 66 65 63 74 20 70 72 6f 76 69 64  ackEffect provid
6dcb0 65 73 20 61 20 6c 6f 6f 70 20 62 65 74 77 65 65  es a loop betwee
6dcc0 6e 20 61 6e 20 0a 09 09 20 2a 20 09 20 20 20 20  n an ... * .    
6dcd0 20 20 20 20 61 75 64 69 6f 20 73 6f 75 72 63 65      audio source
6dce0 20 61 6e 64 20 69 74 73 20 6f 77 6e 20 6f 75 74   and its own out
6dcf0 70 75 74 2e 20 54 68 69 73 20 69 73 20 61 20 62  put. This is a b
6dd00 61 73 65 2d 63 6c 61 73 73 0a 09 09 20 2a 20 09  ase-class... * .
6dd10 20 20 20 20 20 20 20 20 66 6f 72 20 66 65 65 64          for feed
6dd20 62 61 63 6b 20 65 66 66 65 63 74 73 2e 20 0a 09  back effects. ..
6dd30 09 20 2a 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74  . *... *  @const
6dd40 72 75 63 74 6f 72 0a 09 09 20 2a 20 20 40 65 78  ructor... *  @ex
6dd50 74 65 6e 64 73 20 7b 54 6f 6e 65 2e 45 66 66 65  tends {Tone.Effe
6dd60 63 74 7d 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  ct}... *  @param
6dd70 20 7b 4e 6f 72 6d 61 6c 52 61 6e 67 65 7c 4f 62   {NormalRange|Ob
6dd80 6a 65 63 74 7d 20 5b 66 65 65 64 62 61 63 6b 5d  ject} [feedback]
6dd90 20 54 68 65 20 69 6e 69 74 69 61 6c 20 66 65 65   The initial fee
6dda0 64 62 61 63 6b 20 76 61 6c 75 65 2e 0a 09 09 20  dback value.... 
6ddb0 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 46 65 65  */..    Tone.Fee
6ddc0 64 62 61 63 6b 45 66 66 65 63 74 20 3d 20 66 75  dbackEffect = fu
6ddd0 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
6dde0 20 20 20 20 20 76 61 72 20 6f 70 74 69 6f 6e 73       var options
6ddf0 20 3d 20 74 68 69 73 2e 6f 70 74 69 6f 6e 73 4f   = this.optionsO
6de00 62 6a 65 63 74 28 61 72 67 75 6d 65 6e 74 73 2c  bject(arguments,
6de10 20 5b 27 66 65 65 64 62 61 63 6b 27 5d 29 3b 0a   ['feedback']);.
6de20 09 20 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 73  .        options
6de30 20 3d 20 74 68 69 73 2e 64 65 66 61 75 6c 74 41   = this.defaultA
6de40 72 67 28 6f 70 74 69 6f 6e 73 2c 20 54 6f 6e 65  rg(options, Tone
6de50 2e 46 65 65 64 62 61 63 6b 45 66 66 65 63 74 2e  .FeedbackEffect.
6de60 64 65 66 61 75 6c 74 73 29 3b 0a 09 20 20 20 20  defaults);..    
6de70 20 20 20 20 54 6f 6e 65 2e 45 66 66 65 63 74 2e      Tone.Effect.
6de80 63 61 6c 6c 28 74 68 69 73 2c 20 6f 70 74 69 6f  call(this, optio
6de90 6e 73 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a  ns);..        /*
6dea0 2a 0a 09 09 09 20 2a 20 20 74 68 65 20 67 61 69  *.... *  the gai
6deb0 6e 20 77 68 69 63 68 20 63 6f 6e 74 72 6f 6c 73  n which controls
6dec0 20 74 68 65 20 66 65 65 64 62 61 63 6b 0a 09 09   the feedback...
6ded0 09 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65  . *  @type {Tone
6dee0 2e 47 61 69 6e 7d 0a 09 09 09 20 2a 20 20 40 70  .Gain}.... *  @p
6def0 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20  rivate.... */.. 
6df00 20 20 20 20 20 20 20 74 68 69 73 2e 5f 66 65 65         this._fee
6df10 64 62 61 63 6b 47 61 69 6e 20 3d 20 6e 65 77 20  dbackGain = new 
6df20 54 6f 6e 65 2e 47 61 69 6e 28 6f 70 74 69 6f 6e  Tone.Gain(option
6df30 73 2e 66 65 65 64 62 61 63 6b 2c 20 54 6f 6e 65  s.feedback, Tone
6df40 2e 54 79 70 65 2e 4e 6f 72 6d 61 6c 52 61 6e 67  .Type.NormalRang
6df50 65 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  e);..        /**
6df60 0a 09 09 09 20 2a 20 20 54 68 65 20 61 6d 6f 75  .... *  The amou
6df70 6e 74 20 6f 66 20 73 69 67 6e 61 6c 20 77 68 69  nt of signal whi
6df80 63 68 20 69 73 20 66 65 64 20 62 61 63 6b 20 69  ch is fed back i
6df90 6e 74 6f 20 74 68 65 20 65 66 66 65 63 74 20 69  nto the effect i
6dfa0 6e 70 75 74 2e 20 0a 09 09 09 20 2a 20 20 40 74  nput. .... *  @t
6dfb0 79 70 65 20 7b 4e 6f 72 6d 61 6c 52 61 6e 67 65  ype {NormalRange
6dfc0 7d 0a 09 09 09 20 2a 20 20 40 73 69 67 6e 61 6c  }.... *  @signal
6dfd0 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
6dfe0 20 74 68 69 73 2e 66 65 65 64 62 61 63 6b 20 3d   this.feedback =
6dff0 20 74 68 69 73 2e 5f 66 65 65 64 62 61 63 6b 47   this._feedbackG
6e000 61 69 6e 2e 67 61 69 6e 3b 0a 09 20 20 20 20 20  ain.gain;..     
6e010 20 20 20 2f 2f 74 68 65 20 66 65 65 64 62 61 63     //the feedbac
6e020 6b 20 6c 6f 6f 70 0a 09 20 20 20 20 20 20 20 20  k loop..        
6e030 74 68 69 73 2e 65 66 66 65 63 74 52 65 74 75 72  this.effectRetur
6e040 6e 2e 63 68 61 69 6e 28 74 68 69 73 2e 5f 66 65  n.chain(this._fe
6e050 65 64 62 61 63 6b 47 61 69 6e 2c 20 74 68 69 73  edbackGain, this
6e060 2e 65 66 66 65 63 74 53 65 6e 64 29 3b 0a 09 20  .effectSend);.. 
6e070 20 20 20 20 20 20 20 74 68 69 73 2e 5f 72 65 61         this._rea
6e080 64 4f 6e 6c 79 28 5b 27 66 65 65 64 62 61 63 6b  dOnly(['feedback
6e090 27 5d 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  ']);..    };..  
6e0a0 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f    Tone.extend(To
6e0b0 6e 65 2e 46 65 65 64 62 61 63 6b 45 66 66 65 63  ne.FeedbackEffec
6e0c0 74 2c 20 54 6f 6e 65 2e 45 66 66 65 63 74 29 3b  t, Tone.Effect);
6e0d0 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
6e0e0 40 73 74 61 74 69 63 0a 09 09 20 2a 20 20 40 74  @static... *  @t
6e0f0 79 70 65 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20  ype {Object}... 
6e100 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 46 65 65  */..    Tone.Fee
6e110 64 62 61 63 6b 45 66 66 65 63 74 2e 64 65 66 61  dbackEffect.defa
6e120 75 6c 74 73 20 3d 20 7b 20 27 66 65 65 64 62 61  ults = { 'feedba
6e130 63 6b 27 3a 20 30 2e 31 32 35 20 7d 3b 0a 09 20  ck': 0.125 };.. 
6e140 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 6c 65     /**... *  Cle
6e150 61 6e 20 75 70 2e 20 0a 09 09 20 2a 20 20 40 72  an up. ... *  @r
6e160 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 46 65 65  eturns {Tone.Fee
6e170 64 62 61 63 6b 45 66 66 65 63 74 7d 20 74 68 69  dbackEffect} thi
6e180 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  s... */..    Ton
6e190 65 2e 46 65 65 64 62 61 63 6b 45 66 66 65 63 74  e.FeedbackEffect
6e1a0 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f  .prototype.dispo
6e1b0 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  se = function ()
6e1c0 20 7b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65   {..        Tone
6e1d0 2e 45 66 66 65 63 74 2e 70 72 6f 74 6f 74 79 70  .Effect.prototyp
6e1e0 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74  e.dispose.call(t
6e1f0 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20 20 74  his);..        t
6e200 68 69 73 2e 5f 77 72 69 74 61 62 6c 65 28 5b 27  his._writable(['
6e210 66 65 65 64 62 61 63 6b 27 5d 29 3b 0a 09 20 20  feedback']);..  
6e220 20 20 20 20 20 20 74 68 69 73 2e 5f 66 65 65 64        this._feed
6e230 62 61 63 6b 47 61 69 6e 2e 64 69 73 70 6f 73 65  backGain.dispose
6e240 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ();..        thi
6e250 73 2e 5f 66 65 65 64 62 61 63 6b 47 61 69 6e 20  s._feedbackGain 
6e260 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
6e270 20 74 68 69 73 2e 66 65 65 64 62 61 63 6b 20 3d   this.feedback =
6e280 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
6e290 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20  return this;..  
6e2a0 20 20 7d 3b 0a 09 20 20 20 20 72 65 74 75 72 6e    };..    return
6e2b0 20 54 6f 6e 65 2e 46 65 65 64 62 61 63 6b 45 66   Tone.FeedbackEf
6e2c0 66 65 63 74 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75  fect;..});..Modu
6e2d0 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e  le(function (Ton
6e2e0 65 29 20 7b 0a 09 20 20 20 20 0a 09 20 20 20 20  e) {..    ..    
6e2f0 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61 73 73  /**... *  @class
6e300 20 4a 75 73 74 20 6c 69 6b 65 20 61 20 73 74 65   Just like a ste
6e310 72 65 6f 20 66 65 65 64 62 61 63 6b 20 65 66 66  reo feedback eff
6e320 65 63 74 2c 20 62 75 74 20 74 68 65 20 66 65 65  ect, but the fee
6e330 64 62 61 63 6b 20 69 73 20 72 6f 75 74 65 64 20  dback is routed 
6e340 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
6e350 68 74 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  ht... *         
6e360 61 6e 64 20 72 69 67 68 74 20 74 6f 20 6c 65 66  and right to lef
6e370 74 20 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e 20  t instead of on 
6e380 74 68 65 20 73 61 6d 65 20 63 68 61 6e 6e 65 6c  the same channel
6e390 2e 0a 09 09 20 2a 0a 09 09 20 2a 09 40 63 6f 6e  .... *... *.@con
6e3a0 73 74 72 75 63 74 6f 72 0a 09 09 20 2a 09 40 65  structor... *.@e
6e3b0 78 74 65 6e 64 73 20 7b 54 6f 6e 65 2e 46 65 65  xtends {Tone.Fee
6e3c0 64 62 61 63 6b 45 66 66 65 63 74 7d 0a 09 09 20  dbackEffect}... 
6e3d0 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 53 74 65  */..    Tone.Ste
6e3e0 72 65 6f 58 46 65 65 64 62 61 63 6b 45 66 66 65  reoXFeedbackEffe
6e3f0 63 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  ct = function ()
6e400 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20   {..        var 
6e410 6f 70 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e 6f  options = this.o
6e420 70 74 69 6f 6e 73 4f 62 6a 65 63 74 28 61 72 67  ptionsObject(arg
6e430 75 6d 65 6e 74 73 2c 20 5b 27 66 65 65 64 62 61  uments, ['feedba
6e440 63 6b 27 5d 2c 20 54 6f 6e 65 2e 46 65 65 64 62  ck'], Tone.Feedb
6e450 61 63 6b 45 66 66 65 63 74 2e 64 65 66 61 75 6c  ackEffect.defaul
6e460 74 73 29 3b 0a 09 20 20 20 20 20 20 20 20 54 6f  ts);..        To
6e470 6e 65 2e 53 74 65 72 65 6f 45 66 66 65 63 74 2e  ne.StereoEffect.
6e480 63 61 6c 6c 28 74 68 69 73 2c 20 6f 70 74 69 6f  call(this, optio
6e490 6e 73 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a  ns);..        /*
6e4a0 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 61 6d 6f  *.... *  The amo
6e4b0 75 6e 74 20 6f 66 20 66 65 65 64 62 61 63 6b 20  unt of feedback 
6e4c0 66 72 6f 6d 20 74 68 65 20 6f 75 74 70 75 74 0a  from the output.
6e4d0 09 09 09 20 2a 20 20 62 61 63 6b 20 69 6e 74 6f  ... *  back into
6e4e0 20 74 68 65 20 69 6e 70 75 74 20 6f 66 20 74 68   the input of th
6e4f0 65 20 65 66 66 65 63 74 20 28 72 6f 75 74 65 64  e effect (routed
6e500 0a 09 09 09 20 2a 20 20 61 63 72 6f 73 73 20 6c  .... *  across l
6e510 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 63 68  eft and right ch
6e520 61 6e 6e 65 6c 73 29 2e 0a 09 09 09 20 2a 20 20  annels)..... *  
6e530 40 74 79 70 65 20 7b 4e 6f 72 6d 61 6c 52 61 6e  @type {NormalRan
6e540 67 65 7d 0a 09 09 09 20 2a 20 20 40 73 69 67 6e  ge}.... *  @sign
6e550 61 6c 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  al.... */..     
6e560 20 20 20 74 68 69 73 2e 66 65 65 64 62 61 63 6b     this.feedback
6e570 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53 69 67 6e   = new Tone.Sign
6e580 61 6c 28 6f 70 74 69 6f 6e 73 2e 66 65 65 64 62  al(options.feedb
6e590 61 63 6b 2c 20 54 6f 6e 65 2e 54 79 70 65 2e 4e  ack, Tone.Type.N
6e5a0 6f 72 6d 61 6c 52 61 6e 67 65 29 3b 0a 09 20 20  ormalRange);..  
6e5b0 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
6e5c0 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 20 66   the left side f
6e5d0 65 65 62 61 63 6b 0a 09 09 09 20 2a 20 20 40 74  eeback.... *  @t
6e5e0 79 70 65 20 7b 54 6f 6e 65 2e 47 61 69 6e 7d 0a  ype {Tone.Gain}.
6e5f0 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
6e600 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
6e610 74 68 69 73 2e 5f 66 65 65 64 62 61 63 6b 4c 52  this._feedbackLR
6e620 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 47 61 69 6e   = new Tone.Gain
6e630 28 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  ();..        /**
6e640 0a 09 09 09 20 2a 20 20 74 68 65 20 72 69 67 68  .... *  the righ
6e650 74 20 73 69 64 65 20 66 65 65 62 61 63 6b 0a 09  t side feeback..
6e660 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e  .. *  @type {Ton
6e670 65 2e 47 61 69 6e 7d 0a 09 09 09 20 2a 20 20 40  e.Gain}.... *  @
6e680 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
6e690 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 66 65          this._fe
6e6a0 65 64 62 61 63 6b 52 4c 20 3d 20 6e 65 77 20 54  edbackRL = new T
6e6b0 6f 6e 65 2e 47 61 69 6e 28 29 3b 0a 09 20 20 20  one.Gain();..   
6e6c0 20 20 20 20 20 2f 2f 63 6f 6e 6e 65 63 74 20 69       //connect i
6e6d0 74 20 75 70 0a 09 20 20 20 20 20 20 20 20 74 68  t up..        th
6e6e0 69 73 2e 65 66 66 65 63 74 52 65 74 75 72 6e 4c  is.effectReturnL
6e6f0 2e 63 68 61 69 6e 28 74 68 69 73 2e 5f 66 65 65  .chain(this._fee
6e700 64 62 61 63 6b 4c 52 2c 20 74 68 69 73 2e 65 66  dbackLR, this.ef
6e710 66 65 63 74 53 65 6e 64 52 29 3b 0a 09 20 20 20  fectSendR);..   
6e720 20 20 20 20 20 74 68 69 73 2e 65 66 66 65 63 74       this.effect
6e730 52 65 74 75 72 6e 52 2e 63 68 61 69 6e 28 74 68  ReturnR.chain(th
6e740 69 73 2e 5f 66 65 65 64 62 61 63 6b 52 4c 2c 20  is._feedbackRL, 
6e750 74 68 69 73 2e 65 66 66 65 63 74 53 65 6e 64 4c  this.effectSendL
6e760 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
6e770 2e 66 65 65 64 62 61 63 6b 2e 66 61 6e 28 74 68  .feedback.fan(th
6e780 69 73 2e 5f 66 65 65 64 62 61 63 6b 4c 52 2e 67  is._feedbackLR.g
6e790 61 69 6e 2c 20 74 68 69 73 2e 5f 66 65 65 64 62  ain, this._feedb
6e7a0 61 63 6b 52 4c 2e 67 61 69 6e 29 3b 0a 09 20 20  ackRL.gain);..  
6e7b0 20 20 20 20 20 20 74 68 69 73 2e 5f 72 65 61 64        this._read
6e7c0 4f 6e 6c 79 28 5b 27 66 65 65 64 62 61 63 6b 27  Only(['feedback'
6e7d0 5d 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  ]);..    };..   
6e7e0 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e   Tone.extend(Ton
6e7f0 65 2e 53 74 65 72 65 6f 58 46 65 65 64 62 61 63  e.StereoXFeedbac
6e800 6b 45 66 66 65 63 74 2c 20 54 6f 6e 65 2e 46 65  kEffect, Tone.Fe
6e810 65 64 62 61 63 6b 45 66 66 65 63 74 29 3b 0a 09  edbackEffect);..
6e820 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 63 6c      /**... *  cl
6e830 65 61 6e 20 75 70 0a 09 09 20 2a 20 20 40 72 65  ean up... *  @re
6e840 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 53 74 65 72  turns {Tone.Ster
6e850 65 6f 58 46 65 65 64 62 61 63 6b 45 66 66 65 63  eoXFeedbackEffec
6e860 74 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20  t} this... */.. 
6e870 20 20 20 54 6f 6e 65 2e 53 74 65 72 65 6f 58 46     Tone.StereoXF
6e880 65 65 64 62 61 63 6b 45 66 66 65 63 74 2e 70 72  eedbackEffect.pr
6e890 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20  ototype.dispose 
6e8a0 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  = function () {.
6e8b0 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 53 74  .        Tone.St
6e8c0 65 72 65 6f 45 66 66 65 63 74 2e 70 72 6f 74 6f  ereoEffect.proto
6e8d0 74 79 70 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c  type.dispose.cal
6e8e0 6c 28 74 68 69 73 29 3b 0a 09 20 20 20 20 20 20  l(this);..      
6e8f0 20 20 74 68 69 73 2e 5f 77 72 69 74 61 62 6c 65    this._writable
6e900 28 5b 27 66 65 65 64 62 61 63 6b 27 5d 29 3b 0a  (['feedback']);.
6e910 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 66 65  .        this.fe
6e920 65 64 62 61 63 6b 2e 64 69 73 70 6f 73 65 28 29  edback.dispose()
6e930 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
6e940 66 65 65 64 62 61 63 6b 20 3d 20 6e 75 6c 6c 3b  feedback = null;
6e950 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
6e960 66 65 65 64 62 61 63 6b 4c 52 2e 64 69 73 70 6f  feedbackLR.dispo
6e970 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74  se();..        t
6e980 68 69 73 2e 5f 66 65 65 64 62 61 63 6b 4c 52 20  his._feedbackLR 
6e990 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
6e9a0 20 74 68 69 73 2e 5f 66 65 65 64 62 61 63 6b 52   this._feedbackR
6e9b0 4c 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20  L.dispose();..  
6e9c0 20 20 20 20 20 20 74 68 69 73 2e 5f 66 65 65 64        this._feed
6e9d0 62 61 63 6b 52 4c 20 3d 20 6e 75 6c 6c 3b 0a 09  backRL = null;..
6e9e0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
6e9f0 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  his;..    };..  
6ea00 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 53 74    return Tone.St
6ea10 65 72 65 6f 58 46 65 65 64 62 61 63 6b 45 66 66  ereoXFeedbackEff
6ea20 65 63 74 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c  ect;..});..Modul
6ea30 65 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65  e(function (Tone
6ea40 29 20 7b 0a 09 20 20 20 20 0a 09 20 20 20 20 2f  ) {..    ..    /
6ea50 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61 73 73 20  **... *  @class 
6ea60 54 6f 6e 65 2e 43 68 6f 72 75 73 20 69 73 20 61  Tone.Chorus is a
6ea70 20 73 74 65 72 65 6f 20 63 68 6f 72 75 73 20 65   stereo chorus e
6ea80 66 66 65 63 74 20 77 69 74 68 20 66 65 65 64 62  ffect with feedb
6ea90 61 63 6b 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20  ack composed of 
6eaa0 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 61 20  ... *         a 
6eab0 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 64  left and right d
6eac0 65 6c 61 79 20 77 69 74 68 20 61 20 54 6f 6e 65  elay with a Tone
6ead0 2e 4c 46 4f 20 61 70 70 6c 69 65 64 20 74 6f 20  .LFO applied to 
6eae0 74 68 65 20 64 65 6c 61 79 54 69 6d 65 20 6f 66  the delayTime of
6eaf0 20 65 61 63 68 20 63 68 61 6e 6e 65 6c 2e 20 0a   each channel. .
6eb00 09 09 20 2a 20 20 20 20 20 20 20 20 20 49 6e 73  .. *         Ins
6eb10 70 69 72 61 74 69 6f 6e 20 66 72 6f 6d 20 5b 54  piration from [T
6eb20 75 6e 61 2e 6a 73 5d 28 68 74 74 70 73 3a 2f 2f  una.js](https://
6eb30 67 69 74 68 75 62 2e 63 6f 6d 2f 44 69 6e 61 68  github.com/Dinah
6eb40 6d 6f 65 2f 74 75 6e 61 2f 62 6c 6f 62 2f 6d 61  moe/tuna/blob/ma
6eb50 73 74 65 72 2f 74 75 6e 61 2e 6a 73 29 2e 0a 09  ster/tuna.js)...
6eb60 09 20 2a 20 20 20 20 20 20 20 20 20 52 65 61 64  . *         Read
6eb70 20 6d 6f 72 65 20 6f 6e 20 74 68 65 20 63 68 6f   more on the cho
6eb80 72 75 73 20 65 66 66 65 63 74 20 6f 6e 20 5b 53  rus effect on [S
6eb90 6f 75 6e 64 4f 6e 53 6f 75 6e 64 5d 28 68 74 74  oundOnSound](htt
6eba0 70 3a 2f 2f 77 77 77 2e 73 6f 75 6e 64 6f 6e 73  p://www.soundons
6ebb0 6f 75 6e 64 2e 63 6f 6d 2f 73 6f 73 2f 6a 75 6e  ound.com/sos/jun
6ebc0 30 34 2f 61 72 74 69 63 6c 65 73 2f 73 79 6e 74  04/articles/synt
6ebd0 68 73 65 63 72 65 74 73 2e 68 74 6d 29 2e 0a 09  hsecrets.htm)...
6ebe0 09 20 2a 0a 09 09 20 2a 09 40 63 6f 6e 73 74 72  . *... *.@constr
6ebf0 75 63 74 6f 72 0a 09 09 20 2a 09 40 65 78 74 65  uctor... *.@exte
6ec00 6e 64 73 20 7b 54 6f 6e 65 2e 53 74 65 72 65 6f  nds {Tone.Stereo
6ec10 58 46 65 65 64 62 61 63 6b 45 66 66 65 63 74 7d  XFeedbackEffect}
6ec20 0a 09 09 20 2a 09 40 70 61 72 61 6d 20 7b 46 72  ... *.@param {Fr
6ec30 65 71 75 65 6e 63 79 7c 4f 62 6a 65 63 74 7d 20  equency|Object} 
6ec40 5b 66 72 65 71 75 65 6e 63 79 5d 20 54 68 65 20  [frequency] The 
6ec50 66 72 65 71 75 65 6e 63 79 20 6f 66 20 74 68 65  frequency of the
6ec60 20 4c 46 4f 2e 0a 09 09 20 2a 09 40 70 61 72 61   LFO.... *.@para
6ec70 6d 20 7b 4d 69 6c 6c 69 73 65 63 6f 6e 64 73 7d  m {Milliseconds}
6ec80 20 5b 64 65 6c 61 79 54 69 6d 65 5d 20 54 68 65   [delayTime] The
6ec90 20 64 65 6c 61 79 20 6f 66 20 74 68 65 20 63 68   delay of the ch
6eca0 6f 72 75 73 20 65 66 66 65 63 74 20 69 6e 20 6d  orus effect in m
6ecb0 73 2e 20 0a 09 09 20 2a 09 40 70 61 72 61 6d 20  s. ... *.@param 
6ecc0 7b 4e 6f 72 6d 61 6c 52 61 6e 67 65 7d 20 5b 64  {NormalRange} [d
6ecd0 65 70 74 68 5d 20 54 68 65 20 64 65 70 74 68 20  epth] The depth 
6ece0 6f 66 20 74 68 65 20 63 68 6f 72 75 73 2e 0a 09  of the chorus...
6ecf0 09 20 2a 09 40 65 78 61 6d 70 6c 65 0a 09 09 20  . *.@example... 
6ed00 2a 20 76 61 72 20 63 68 6f 72 75 73 20 3d 20 6e  * var chorus = n
6ed10 65 77 20 54 6f 6e 65 2e 43 68 6f 72 75 73 28 34  ew Tone.Chorus(4
6ed20 2c 20 32 2e 35 2c 20 30 2e 35 29 3b 0a 09 09 20  , 2.5, 0.5);... 
6ed30 2a 20 76 61 72 20 73 79 6e 74 68 20 3d 20 6e 65  * var synth = ne
6ed40 77 20 54 6f 6e 65 2e 50 6f 6c 79 53 79 6e 74 68  w Tone.PolySynth
6ed50 28 34 2c 20 54 6f 6e 65 2e 4d 6f 6e 6f 53 79 6e  (4, Tone.MonoSyn
6ed60 74 68 29 2e 63 6f 6e 6e 65 63 74 28 63 68 6f 72  th).connect(chor
6ed70 75 73 29 3b 0a 09 09 20 2a 20 73 79 6e 74 68 2e  us);... * synth.
6ed80 74 72 69 67 67 65 72 41 74 74 61 63 6b 52 65 6c  triggerAttackRel
6ed90 65 61 73 65 28 5b 22 43 33 22 2c 22 45 33 22 2c  ease(["C3","E3",
6eda0 22 47 33 22 5d 2c 20 22 38 6e 22 29 3b 0a 09 09  "G3"], "8n");...
6edb0 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 43 68   */..    Tone.Ch
6edc0 6f 72 75 73 20 3d 20 66 75 6e 63 74 69 6f 6e 20  orus = function 
6edd0 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61  () {..        va
6ede0 72 20 6f 70 74 69 6f 6e 73 20 3d 20 74 68 69 73  r options = this
6edf0 2e 6f 70 74 69 6f 6e 73 4f 62 6a 65 63 74 28 61  .optionsObject(a
6ee00 72 67 75 6d 65 6e 74 73 2c 20 5b 0a 09 20 20 20  rguments, [..   
6ee10 20 20 20 20 20 20 20 20 20 27 66 72 65 71 75 65           'freque
6ee20 6e 63 79 27 2c 0a 09 20 20 20 20 20 20 20 20 20  ncy',..         
6ee30 20 20 20 27 64 65 6c 61 79 54 69 6d 65 27 2c 0a     'delayTime',.
6ee40 09 20 20 20 20 20 20 20 20 20 20 20 20 27 64 65  .            'de
6ee50 70 74 68 27 0a 09 20 20 20 20 20 20 20 20 5d 2c  pth'..        ],
6ee60 20 54 6f 6e 65 2e 43 68 6f 72 75 73 2e 64 65 66   Tone.Chorus.def
6ee70 61 75 6c 74 73 29 3b 0a 09 20 20 20 20 20 20 20  aults);..       
6ee80 20 54 6f 6e 65 2e 53 74 65 72 65 6f 58 46 65 65   Tone.StereoXFee
6ee90 64 62 61 63 6b 45 66 66 65 63 74 2e 63 61 6c 6c  dbackEffect.call
6eea0 28 74 68 69 73 2c 20 6f 70 74 69 6f 6e 73 29 3b  (this, options);
6eeb0 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
6eec0 09 20 2a 20 20 74 68 65 20 64 65 70 74 68 20 6f  . *  the depth o
6eed0 66 20 74 68 65 20 63 68 6f 72 75 73 0a 09 09 09  f the chorus....
6eee0 20 2a 20 20 40 74 79 70 65 20 7b 6e 75 6d 62 65   *  @type {numbe
6eef0 72 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61  r}.... *  @priva
6ef00 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  te.... */..     
6ef10 20 20 20 74 68 69 73 2e 5f 64 65 70 74 68 20 3d     this._depth =
6ef20 20 6f 70 74 69 6f 6e 73 2e 64 65 70 74 68 3b 0a   options.depth;.
6ef30 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
6ef40 20 2a 20 20 74 68 65 20 64 65 6c 61 79 54 69 6d   *  the delayTim
6ef50 65 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b  e.... *  @type {
6ef60 6e 75 6d 62 65 72 7d 0a 09 09 09 20 2a 20 20 40  number}.... *  @
6ef70 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
6ef80 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 64 65          this._de
6ef90 6c 61 79 54 69 6d 65 20 3d 20 6f 70 74 69 6f 6e  layTime = option
6efa0 73 2e 64 65 6c 61 79 54 69 6d 65 20 2f 20 31 30  s.delayTime / 10
6efb0 30 30 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  00;..        /**
6efc0 0a 09 09 09 20 2a 20 20 74 68 65 20 6c 66 6f 20  .... *  the lfo 
6efd0 77 68 69 63 68 20 63 6f 6e 74 72 6f 6c 73 20 74  which controls t
6efe0 68 65 20 64 65 6c 61 79 54 69 6d 65 0a 09 09 09  he delayTime....
6eff0 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e   *  @type {Tone.
6f000 4c 46 4f 7d 0a 09 09 09 20 2a 20 20 40 70 72 69  LFO}.... *  @pri
6f010 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20  vate.... */..   
6f020 20 20 20 20 20 74 68 69 73 2e 5f 6c 66 6f 4c 20       this._lfoL 
6f030 3d 20 6e 65 77 20 54 6f 6e 65 2e 4c 46 4f 28 7b  = new Tone.LFO({
6f040 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 66  ..            'f
6f050 72 65 71 75 65 6e 63 79 27 3a 20 6f 70 74 69 6f  requency': optio
6f060 6e 73 2e 66 72 65 71 75 65 6e 63 79 2c 0a 09 20  ns.frequency,.. 
6f070 20 20 20 20 20 20 20 20 20 20 20 27 6d 69 6e 27             'min'
6f080 3a 20 30 2c 0a 09 20 20 20 20 20 20 20 20 20 20  : 0,..          
6f090 20 20 27 6d 61 78 27 3a 20 31 0a 09 20 20 20 20    'max': 1..    
6f0a0 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 20 20 20      });..       
6f0b0 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 61 6e 6f 74   /**.... *  anot
6f0c0 68 65 72 20 4c 46 4f 20 66 6f 72 20 74 68 65 20  her LFO for the 
6f0d0 72 69 67 68 74 20 73 69 64 65 20 77 69 74 68 20  right side with 
6f0e0 61 20 31 38 30 20 64 65 67 72 65 65 20 70 68 61  a 180 degree pha
6f0f0 73 65 20 64 69 66 66 0a 09 09 09 20 2a 20 20 40  se diff.... *  @
6f100 74 79 70 65 20 7b 54 6f 6e 65 2e 4c 46 4f 7d 0a  type {Tone.LFO}.
6f110 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
6f120 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
6f130 74 68 69 73 2e 5f 6c 66 6f 52 20 3d 20 6e 65 77  this._lfoR = new
6f140 20 54 6f 6e 65 2e 4c 46 4f 28 7b 0a 09 20 20 20   Tone.LFO({..   
6f150 20 20 20 20 20 20 20 20 20 27 66 72 65 71 75 65           'freque
6f160 6e 63 79 27 3a 20 6f 70 74 69 6f 6e 73 2e 66 72  ncy': options.fr
6f170 65 71 75 65 6e 63 79 2c 0a 09 20 20 20 20 20 20  equency,..      
6f180 20 20 20 20 20 20 27 6d 69 6e 27 3a 20 30 2c 0a        'min': 0,.
6f190 09 20 20 20 20 20 20 20 20 20 20 20 20 27 6d 61  .            'ma
6f1a0 78 27 3a 20 31 2c 0a 09 20 20 20 20 20 20 20 20  x': 1,..        
6f1b0 20 20 20 20 27 70 68 61 73 65 27 3a 20 31 38 30      'phase': 180
6f1c0 0a 09 20 20 20 20 20 20 20 20 7d 29 3b 0a 09 20  ..        });.. 
6f1d0 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
6f1e0 20 20 64 65 6c 61 79 20 66 6f 72 20 6c 65 66 74    delay for left
6f1f0 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54  .... *  @type {T
6f200 6f 6e 65 2e 44 65 6c 61 79 7d 0a 09 09 09 20 2a  one.Delay}.... *
6f210 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a    @private.... *
6f220 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
6f230 5f 64 65 6c 61 79 4e 6f 64 65 4c 20 3d 20 6e 65  _delayNodeL = ne
6f240 77 20 54 6f 6e 65 2e 44 65 6c 61 79 28 29 3b 0a  w Tone.Delay();.
6f250 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
6f260 20 2a 20 20 64 65 6c 61 79 20 66 6f 72 20 72 69   *  delay for ri
6f270 67 68 74 0a 09 09 09 20 2a 20 20 40 74 79 70 65  ght.... *  @type
6f280 20 7b 54 6f 6e 65 2e 44 65 6c 61 79 7d 0a 09 09   {Tone.Delay}...
6f290 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
6f2a0 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
6f2b0 69 73 2e 5f 64 65 6c 61 79 4e 6f 64 65 52 20 3d  is._delayNodeR =
6f2c0 20 6e 65 77 20 54 6f 6e 65 2e 44 65 6c 61 79 28   new Tone.Delay(
6f2d0 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
6f2e0 09 09 09 20 2a 20 54 68 65 20 66 72 65 71 75 65  ... * The freque
6f2f0 6e 63 79 20 6f 66 20 74 68 65 20 4c 46 4f 20 77  ncy of the LFO w
6f300 68 69 63 68 20 6d 6f 64 75 6c 61 74 65 73 20 74  hich modulates t
6f310 68 65 20 64 65 6c 61 79 54 69 6d 65 2e 20 0a 09  he delayTime. ..
6f320 09 09 20 2a 20 40 74 79 70 65 20 7b 46 72 65 71  .. * @type {Freq
6f330 75 65 6e 63 79 7d 0a 09 09 09 20 2a 20 40 73 69  uency}.... * @si
6f340 67 6e 61 6c 0a 09 09 09 20 2a 2f 0a 09 20 20 20  gnal.... */..   
6f350 20 20 20 20 20 74 68 69 73 2e 66 72 65 71 75 65       this.freque
6f360 6e 63 79 20 3d 20 74 68 69 73 2e 5f 6c 66 6f 4c  ncy = this._lfoL
6f370 2e 66 72 65 71 75 65 6e 63 79 3b 0a 09 20 20 20  .frequency;..   
6f380 20 20 20 20 20 2f 2f 63 6f 6e 6e 65 63 74 69 6f       //connectio
6f390 6e 73 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  ns..        this
6f3a0 2e 65 66 66 65 63 74 53 65 6e 64 4c 2e 63 68 61  .effectSendL.cha
6f3b0 69 6e 28 74 68 69 73 2e 5f 64 65 6c 61 79 4e 6f  in(this._delayNo
6f3c0 64 65 4c 2c 20 74 68 69 73 2e 65 66 66 65 63 74  deL, this.effect
6f3d0 52 65 74 75 72 6e 4c 29 3b 0a 09 20 20 20 20 20  ReturnL);..     
6f3e0 20 20 20 74 68 69 73 2e 65 66 66 65 63 74 53 65     this.effectSe
6f3f0 6e 64 52 2e 63 68 61 69 6e 28 74 68 69 73 2e 5f  ndR.chain(this._
6f400 64 65 6c 61 79 4e 6f 64 65 52 2c 20 74 68 69 73  delayNodeR, this
6f410 2e 65 66 66 65 63 74 52 65 74 75 72 6e 52 29 3b  .effectReturnR);
6f420 0a 09 20 20 20 20 20 20 20 20 2f 2f 61 6e 64 20  ..        //and 
6f430 70 61 73 73 20 74 68 72 6f 75 67 68 20 74 6f 20  pass through to 
6f440 6d 61 6b 65 20 74 68 65 20 64 65 74 75 6e 65 20  make the detune 
6f450 61 70 70 61 72 65 6e 74 0a 09 20 20 20 20 20 20  apparent..      
6f460 20 20 74 68 69 73 2e 65 66 66 65 63 74 53 65 6e    this.effectSen
6f470 64 4c 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e  dL.connect(this.
6f480 65 66 66 65 63 74 52 65 74 75 72 6e 4c 29 3b 0a  effectReturnL);.
6f490 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 65 66  .        this.ef
6f4a0 66 65 63 74 53 65 6e 64 52 2e 63 6f 6e 6e 65 63  fectSendR.connec
6f4b0 74 28 74 68 69 73 2e 65 66 66 65 63 74 52 65 74  t(this.effectRet
6f4c0 75 72 6e 52 29 3b 0a 09 20 20 20 20 20 20 20 20  urnR);..        
6f4d0 2f 2f 6c 66 6f 20 73 65 74 75 70 0a 09 20 20 20  //lfo setup..   
6f4e0 20 20 20 20 20 74 68 69 73 2e 5f 6c 66 6f 4c 2e       this._lfoL.
6f4f0 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e 5f 64 65  connect(this._de
6f500 6c 61 79 4e 6f 64 65 4c 2e 64 65 6c 61 79 54 69  layNodeL.delayTi
6f510 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  me);..        th
6f520 69 73 2e 5f 6c 66 6f 52 2e 63 6f 6e 6e 65 63 74  is._lfoR.connect
6f530 28 74 68 69 73 2e 5f 64 65 6c 61 79 4e 6f 64 65  (this._delayNode
6f540 52 2e 64 65 6c 61 79 54 69 6d 65 29 3b 0a 09 20  R.delayTime);.. 
6f550 20 20 20 20 20 20 20 2f 2f 73 74 61 72 74 20 74         //start t
6f560 68 65 20 6c 66 6f 0a 09 20 20 20 20 20 20 20 20  he lfo..        
6f570 74 68 69 73 2e 5f 6c 66 6f 4c 2e 73 74 61 72 74  this._lfoL.start
6f580 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ();..        thi
6f590 73 2e 5f 6c 66 6f 52 2e 73 74 61 72 74 28 29 3b  s._lfoR.start();
6f5a0 0a 09 20 20 20 20 20 20 20 20 2f 2f 68 61 76 65  ..        //have
6f5b0 20 6f 6e 65 20 4c 46 4f 20 66 72 65 71 75 65 6e   one LFO frequen
6f5c0 63 79 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20 6f  cy control the o
6f5d0 74 68 65 72 0a 09 20 20 20 20 20 20 20 20 74 68  ther..        th
6f5e0 69 73 2e 5f 6c 66 6f 4c 2e 66 72 65 71 75 65 6e  is._lfoL.frequen
6f5f0 63 79 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e  cy.connect(this.
6f600 5f 6c 66 6f 52 2e 66 72 65 71 75 65 6e 63 79 29  _lfoR.frequency)
6f610 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 73 65 74  ;..        //set
6f620 20 74 68 65 20 69 6e 69 74 69 61 6c 20 76 61 6c   the initial val
6f630 75 65 73 0a 09 20 20 20 20 20 20 20 20 74 68 69  ues..        thi
6f640 73 2e 64 65 70 74 68 20 3d 20 74 68 69 73 2e 5f  s.depth = this._
6f650 64 65 70 74 68 3b 0a 09 20 20 20 20 20 20 20 20  depth;..        
6f660 74 68 69 73 2e 66 72 65 71 75 65 6e 63 79 2e 76  this.frequency.v
6f670 61 6c 75 65 20 3d 20 6f 70 74 69 6f 6e 73 2e 66  alue = options.f
6f680 72 65 71 75 65 6e 63 79 3b 0a 09 20 20 20 20 20  requency;..     
6f690 20 20 20 74 68 69 73 2e 74 79 70 65 20 3d 20 6f     this.type = o
6f6a0 70 74 69 6f 6e 73 2e 74 79 70 65 3b 0a 09 20 20  ptions.type;..  
6f6b0 20 20 20 20 20 20 74 68 69 73 2e 5f 72 65 61 64        this._read
6f6c0 4f 6e 6c 79 28 5b 27 66 72 65 71 75 65 6e 63 79  Only(['frequency
6f6d0 27 5d 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ']);..        th
6f6e0 69 73 2e 73 70 72 65 61 64 20 3d 20 6f 70 74 69  is.spread = opti
6f6f0 6f 6e 73 2e 73 70 72 65 61 64 3b 0a 09 20 20 20  ons.spread;..   
6f700 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65 2e 65 78   };..    Tone.ex
6f710 74 65 6e 64 28 54 6f 6e 65 2e 43 68 6f 72 75 73  tend(Tone.Chorus
6f720 2c 20 54 6f 6e 65 2e 53 74 65 72 65 6f 58 46 65  , Tone.StereoXFe
6f730 65 64 62 61 63 6b 45 66 66 65 63 74 29 3b 0a 09  edbackEffect);..
6f740 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 73      /**... *  @s
6f750 74 61 74 69 63 0a 09 09 20 2a 20 20 40 74 79 70  tatic... *  @typ
6f760 65 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 2f  e {Object}... */
6f770 0a 09 20 20 20 20 54 6f 6e 65 2e 43 68 6f 72 75  ..    Tone.Choru
6f780 73 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b 0a 09  s.defaults = {..
6f790 20 20 20 20 20 20 20 20 27 66 72 65 71 75 65 6e          'frequen
6f7a0 63 79 27 3a 20 31 2e 35 2c 0a 09 20 20 20 20 20  cy': 1.5,..     
6f7b0 20 20 20 27 64 65 6c 61 79 54 69 6d 65 27 3a 20     'delayTime': 
6f7c0 33 2e 35 2c 0a 09 20 20 20 20 20 20 20 20 27 64  3.5,..        'd
6f7d0 65 70 74 68 27 3a 20 30 2e 37 2c 0a 09 20 20 20  epth': 0.7,..   
6f7e0 20 20 20 20 20 27 66 65 65 64 62 61 63 6b 27 3a       'feedback':
6f7f0 20 30 2e 31 2c 0a 09 20 20 20 20 20 20 20 20 27   0.1,..        '
6f800 74 79 70 65 27 3a 20 27 73 69 6e 65 27 2c 0a 09  type': 'sine',..
6f810 20 20 20 20 20 20 20 20 27 73 70 72 65 61 64 27          'spread'
6f820 3a 20 31 38 30 0a 09 20 20 20 20 7d 3b 0a 09 20  : 180..    };.. 
6f830 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65 20     /**... * The 
6f840 64 65 70 74 68 20 6f 66 20 74 68 65 20 65 66 66  depth of the eff
6f850 65 63 74 2e 20 41 20 64 65 70 74 68 20 6f 66 20  ect. A depth of 
6f860 31 20 6d 61 6b 65 73 20 74 68 65 20 64 65 6c 61  1 makes the dela
6f870 79 54 69 6d 65 0a 09 09 20 2a 20 6d 6f 64 75 6c  yTime... * modul
6f880 61 74 65 20 62 65 74 77 65 65 6e 20 30 20 61 6e  ate between 0 an
6f890 64 20 32 2a 64 65 6c 61 79 54 69 6d 65 20 28 63  d 2*delayTime (c
6f8a0 65 6e 74 65 72 65 64 20 61 72 6f 75 6e 64 20 74  entered around t
6f8b0 68 65 20 64 65 6c 61 79 54 69 6d 65 29 2e 20 0a  he delayTime). .
6f8c0 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54  .. * @memberOf T
6f8d0 6f 6e 65 2e 43 68 6f 72 75 73 23 0a 09 09 20 2a  one.Chorus#... *
6f8e0 20 40 74 79 70 65 20 7b 4e 6f 72 6d 61 6c 52 61   @type {NormalRa
6f8f0 6e 67 65 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20  nge}... * @name 
6f900 64 65 70 74 68 0a 09 09 20 2a 2f 0a 09 20 20 20  depth... */..   
6f910 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72   Object.definePr
6f920 6f 70 65 72 74 79 28 54 6f 6e 65 2e 43 68 6f 72  operty(Tone.Chor
6f930 75 73 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 64  us.prototype, 'd
6f940 65 70 74 68 27 2c 20 7b 0a 09 20 20 20 20 20 20  epth', {..      
6f950 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    get: function 
6f960 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  () {..          
6f970 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 64    return this._d
6f980 65 70 74 68 3b 0a 09 20 20 20 20 20 20 20 20 7d  epth;..        }
6f990 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20  ,..        set: 
6f9a0 66 75 6e 63 74 69 6f 6e 20 28 64 65 70 74 68 29  function (depth)
6f9b0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6f9c0 74 68 69 73 2e 5f 64 65 70 74 68 20 3d 20 64 65  this._depth = de
6f9d0 70 74 68 3b 0a 09 20 20 20 20 20 20 20 20 20 20  pth;..          
6f9e0 20 20 76 61 72 20 64 65 76 69 61 74 69 6f 6e 20    var deviation 
6f9f0 3d 20 74 68 69 73 2e 5f 64 65 6c 61 79 54 69 6d  = this._delayTim
6fa00 65 20 2a 20 64 65 70 74 68 3b 0a 09 20 20 20 20  e * depth;..    
6fa10 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 66          this._lf
6fa20 6f 4c 2e 6d 69 6e 20 3d 20 4d 61 74 68 2e 6d 61  oL.min = Math.ma
6fa30 78 28 74 68 69 73 2e 5f 64 65 6c 61 79 54 69 6d  x(this._delayTim
6fa40 65 20 2d 20 64 65 76 69 61 74 69 6f 6e 2c 20 30  e - deviation, 0
6fa50 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6fa60 74 68 69 73 2e 5f 6c 66 6f 4c 2e 6d 61 78 20 3d  this._lfoL.max =
6fa70 20 74 68 69 73 2e 5f 64 65 6c 61 79 54 69 6d 65   this._delayTime
6fa80 20 2b 20 64 65 76 69 61 74 69 6f 6e 3b 0a 09 20   + deviation;.. 
6fa90 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
6faa0 5f 6c 66 6f 52 2e 6d 69 6e 20 3d 20 4d 61 74 68  _lfoR.min = Math
6fab0 2e 6d 61 78 28 74 68 69 73 2e 5f 64 65 6c 61 79  .max(this._delay
6fac0 54 69 6d 65 20 2d 20 64 65 76 69 61 74 69 6f 6e  Time - deviation
6fad0 2c 20 30 29 3b 0a 09 20 20 20 20 20 20 20 20 20  , 0);..         
6fae0 20 20 20 74 68 69 73 2e 5f 6c 66 6f 52 2e 6d 61     this._lfoR.ma
6faf0 78 20 3d 20 74 68 69 73 2e 5f 64 65 6c 61 79 54  x = this._delayT
6fb00 69 6d 65 20 2b 20 64 65 76 69 61 74 69 6f 6e 3b  ime + deviation;
6fb10 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
6fb20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09   });..    /**...
6fb30 20 2a 20 54 68 65 20 64 65 6c 61 79 54 69 6d 65   * The delayTime
6fb40 20 69 6e 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73   in milliseconds
6fb50 20 6f 66 20 74 68 65 20 63 68 6f 72 75 73 2e 20   of the chorus. 
6fb60 41 20 6c 61 72 67 65 72 20 64 65 6c 61 79 54 69  A larger delayTi
6fb70 6d 65 0a 09 09 20 2a 20 77 69 6c 6c 20 67 69 76  me... * will giv
6fb80 65 20 61 20 6d 6f 72 65 20 70 72 6f 6e 6f 75 6e  e a more pronoun
6fb90 63 65 64 20 65 66 66 65 63 74 2e 20 4e 6f 6d 69  ced effect. Nomi
6fba0 6e 61 6c 20 72 61 6e 67 65 20 61 20 64 65 6c 61  nal range a dela
6fbb0 79 54 69 6d 65 0a 09 09 20 2a 20 69 73 20 62 65  yTime... * is be
6fbc0 74 77 65 65 6e 20 32 20 61 6e 64 20 32 30 6d 73  tween 2 and 20ms
6fbd0 2e 20 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f  . ... * @memberO
6fbe0 66 20 54 6f 6e 65 2e 43 68 6f 72 75 73 23 0a 09  f Tone.Chorus#..
6fbf0 09 20 2a 20 40 74 79 70 65 20 7b 4d 69 6c 6c 69  . * @type {Milli
6fc00 73 65 63 6f 6e 64 73 7d 0a 09 09 20 2a 20 40 6e  seconds}... * @n
6fc10 61 6d 65 20 64 65 6c 61 79 54 69 6d 65 0a 09 09  ame delayTime...
6fc20 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e   */..    Object.
6fc30 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54  defineProperty(T
6fc40 6f 6e 65 2e 43 68 6f 72 75 73 2e 70 72 6f 74 6f  one.Chorus.proto
6fc50 74 79 70 65 2c 20 27 64 65 6c 61 79 54 69 6d 65  type, 'delayTime
6fc60 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65  ', {..        ge
6fc70 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b  t: function () {
6fc80 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
6fc90 74 75 72 6e 20 74 68 69 73 2e 5f 64 65 6c 61 79  turn this._delay
6fca0 54 69 6d 65 20 2a 20 31 30 30 30 3b 0a 09 20 20  Time * 1000;..  
6fcb0 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20        },..      
6fcc0 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    set: function 
6fcd0 28 64 65 6c 61 79 54 69 6d 65 29 20 7b 0a 09 20  (delayTime) {.. 
6fce0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
6fcf0 5f 64 65 6c 61 79 54 69 6d 65 20 3d 20 64 65 6c  _delayTime = del
6fd00 61 79 54 69 6d 65 20 2f 20 31 30 30 30 3b 0a 09  ayTime / 1000;..
6fd10 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
6fd20 2e 64 65 70 74 68 20 3d 20 74 68 69 73 2e 5f 64  .depth = this._d
6fd30 65 70 74 68 3b 0a 09 20 20 20 20 20 20 20 20 7d  epth;..        }
6fd40 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f  ..    });..    /
6fd50 2a 2a 0a 09 09 20 2a 20 54 68 65 20 6f 73 63 69  **... * The osci
6fd60 6c 6c 61 74 6f 72 20 74 79 70 65 20 6f 66 20 74  llator type of t
6fd70 68 65 20 4c 46 4f 2e 20 0a 09 09 20 2a 20 40 6d  he LFO. ... * @m
6fd80 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 43 68 6f  emberOf Tone.Cho
6fd90 72 75 73 23 0a 09 09 20 2a 20 40 74 79 70 65 20  rus#... * @type 
6fda0 7b 73 74 72 69 6e 67 7d 0a 09 09 20 2a 20 40 6e  {string}... * @n
6fdb0 61 6d 65 20 74 79 70 65 0a 09 09 20 2a 2f 0a 09  ame type... */..
6fdc0 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e      Object.defin
6fdd0 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 43  eProperty(Tone.C
6fde0 68 6f 72 75 73 2e 70 72 6f 74 6f 74 79 70 65 2c  horus.prototype,
6fdf0 20 27 74 79 70 65 27 2c 20 7b 0a 09 20 20 20 20   'type', {..    
6fe00 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f      get: functio
6fe10 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
6fe20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
6fe30 5f 6c 66 6f 4c 2e 74 79 70 65 3b 0a 09 20 20 20  _lfoL.type;..   
6fe40 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20       },..       
6fe50 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   set: function (
6fe60 74 79 70 65 29 20 7b 0a 09 20 20 20 20 20 20 20  type) {..       
6fe70 20 20 20 20 20 74 68 69 73 2e 5f 6c 66 6f 4c 2e       this._lfoL.
6fe80 74 79 70 65 20 3d 20 74 79 70 65 3b 0a 09 20 20  type = type;..  
6fe90 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
6fea0 6c 66 6f 52 2e 74 79 70 65 20 3d 20 74 79 70 65  lfoR.type = type
6feb0 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20  ;..        }..  
6fec0 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 20 0a    });..    /** .
6fed0 09 09 20 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73  .. * Amount of s
6fee0 74 65 72 65 6f 20 73 70 72 65 61 64 2e 20 57 68  tereo spread. Wh
6fef0 65 6e 20 73 65 74 20 74 6f 20 30 2c 20 62 6f 74  en set to 0, bot
6ff00 68 20 4c 46 4f 27 73 20 77 69 6c 6c 20 62 65 20  h LFO's will be 
6ff10 70 61 6e 6e 65 64 20 63 65 6e 74 72 61 6c 6c 79  panned centrally
6ff20 2e 0a 09 09 20 2a 20 57 68 65 6e 20 73 65 74 20  .... * When set 
6ff30 74 6f 20 31 38 30 2c 20 4c 46 4f 27 73 20 77 69  to 180, LFO's wi
6ff40 6c 6c 20 62 65 20 70 61 6e 6e 65 64 20 68 61 72  ll be panned har
6ff50 64 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  d left and right
6ff60 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 09   respectively...
6ff70 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f  . * @memberOf To
6ff80 6e 65 2e 43 68 6f 72 75 73 23 0a 09 09 20 2a 20  ne.Chorus#... * 
6ff90 40 74 79 70 65 20 7b 44 65 67 72 65 65 73 7d 0a  @type {Degrees}.
6ffa0 09 09 20 2a 20 40 6e 61 6d 65 20 73 70 72 65 61  .. * @name sprea
6ffb0 64 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a  d... */..    Obj
6ffc0 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72  ect.defineProper
6ffd0 74 79 28 54 6f 6e 65 2e 43 68 6f 72 75 73 2e 70  ty(Tone.Chorus.p
6ffe0 72 6f 74 6f 74 79 70 65 2c 20 27 73 70 72 65 61  rototype, 'sprea
6fff0 64 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67  d', {..        g
70000 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  et: function () 
70010 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
70020 65 74 75 72 6e 20 74 68 69 73 2e 5f 6c 66 6f 52  eturn this._lfoR
70030 2e 70 68 61 73 65 20 2d 20 74 68 69 73 2e 5f 6c  .phase - this._l
70040 66 6f 4c 2e 70 68 61 73 65 3b 20 20 20 20 2f 2f  foL.phase;    //
70050 31 38 30 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a  180..        },.
70060 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66 75  .        set: fu
70070 6e 63 74 69 6f 6e 20 28 73 70 72 65 61 64 29 20  nction (spread) 
70080 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
70090 68 69 73 2e 5f 6c 66 6f 4c 2e 70 68 61 73 65 20  his._lfoL.phase 
700a0 3d 20 39 30 20 2d 20 73 70 72 65 61 64 20 2f 20  = 90 - spread / 
700b0 32 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  2;..            
700c0 74 68 69 73 2e 5f 6c 66 6f 52 2e 70 68 61 73 65  this._lfoR.phase
700d0 20 3d 20 73 70 72 65 61 64 20 2f 20 32 20 2b 20   = spread / 2 + 
700e0 39 30 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  90;..        }..
700f0 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a      });..    /**
70100 0a 09 09 20 2a 20 20 43 6c 65 61 6e 20 75 70 2e  ... *  Clean up.
70110 20 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73   ... *  @returns
70120 20 7b 54 6f 6e 65 2e 43 68 6f 72 75 73 7d 20 74   {Tone.Chorus} t
70130 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  his... */..    T
70140 6f 6e 65 2e 43 68 6f 72 75 73 2e 70 72 6f 74 6f  one.Chorus.proto
70150 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20 66  type.dispose = f
70160 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
70170 20 20 20 20 20 20 54 6f 6e 65 2e 53 74 65 72 65        Tone.Stere
70180 6f 58 46 65 65 64 62 61 63 6b 45 66 66 65 63 74  oXFeedbackEffect
70190 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f  .prototype.dispo
701a0 73 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09  se.call(this);..
701b0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 66          this._lf
701c0 6f 4c 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20  oL.dispose();.. 
701d0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 66 6f         this._lfo
701e0 4c 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20  L = null;..     
701f0 20 20 20 74 68 69 73 2e 5f 6c 66 6f 52 2e 64 69     this._lfoR.di
70200 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
70210 20 20 74 68 69 73 2e 5f 6c 66 6f 52 20 3d 20 6e    this._lfoR = n
70220 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ull;..        th
70230 69 73 2e 5f 64 65 6c 61 79 4e 6f 64 65 4c 2e 64  is._delayNodeL.d
70240 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20  ispose();..     
70250 20 20 20 74 68 69 73 2e 5f 64 65 6c 61 79 4e 6f     this._delayNo
70260 64 65 4c 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  deL = null;..   
70270 20 20 20 20 20 74 68 69 73 2e 5f 64 65 6c 61 79       this._delay
70280 4e 6f 64 65 52 2e 64 69 73 70 6f 73 65 28 29 3b  NodeR.dispose();
70290 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
702a0 64 65 6c 61 79 4e 6f 64 65 52 20 3d 20 6e 75 6c  delayNodeR = nul
702b0 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  l;..        this
702c0 2e 5f 77 72 69 74 61 62 6c 65 28 27 66 72 65 71  ._writable('freq
702d0 75 65 6e 63 79 27 29 3b 0a 09 20 20 20 20 20 20  uency');..      
702e0 20 20 74 68 69 73 2e 66 72 65 71 75 65 6e 63 79    this.frequency
702f0 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
70300 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09    return this;..
70310 20 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74 75      };..    retu
70320 72 6e 20 54 6f 6e 65 2e 43 68 6f 72 75 73 3b 0a  rn Tone.Chorus;.
70330 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e  .});..Module(fun
70340 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09  ction (Tone) {..
70350 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09      ..    /**...
70360 20 2a 20 20 40 63 6c 61 73 73 20 20 54 6f 6e 65   *  @class  Tone
70370 2e 43 6f 6e 76 6f 6c 76 65 72 20 69 73 20 61 20  .Convolver is a 
70380 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
70390 68 65 20 4e 61 74 69 76 65 20 57 65 62 20 41 75  he Native Web Au
703a0 64 69 6f 20 0a 09 09 20 2a 20 20 20 20 20 20 20  dio ... *       
703b0 20 20 20 5b 43 6f 6e 76 6f 6c 76 65 72 4e 6f 64     [ConvolverNod
703c0 65 5d 28 68 74 74 70 3a 2f 2f 77 65 62 61 75 64  e](http://webaud
703d0 69 6f 2e 67 69 74 68 75 62 2e 69 6f 2f 77 65 62  io.github.io/web
703e0 2d 61 75 64 69 6f 2d 61 70 69 2f 23 74 68 65 2d  -audio-api/#the-
703f0 63 6f 6e 76 6f 6c 76 65 72 6e 6f 64 65 2d 69 6e  convolvernode-in
70400 74 65 72 66 61 63 65 29 2e 0a 09 09 20 2a 20 20  terface).... *  
70410 20 20 20 20 20 20 20 20 43 6f 6e 76 6f 6c 75 74          Convolut
70420 69 6f 6e 20 69 73 20 75 73 65 66 75 6c 20 66 6f  ion is useful fo
70430 72 20 72 65 76 65 72 62 20 61 6e 64 20 66 69 6c  r reverb and fil
70440 74 65 72 20 65 6d 75 6c 61 74 69 6f 6e 2e 20 52  ter emulation. R
70450 65 61 64 20 6d 6f 72 65 20 61 62 6f 75 74 20 63  ead more about c
70460 6f 6e 76 6f 6c 75 74 69 6f 6e 20 72 65 76 65 72  onvolution rever
70470 62 20 6f 6e 0a 09 09 20 2a 20 20 20 20 20 20 20  b on... *       
70480 20 20 20 5b 57 69 6b 69 70 65 64 69 61 5d 28 68     [Wikipedia](h
70490 74 74 70 73 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65  ttps://en.wikipe
704a0 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 43 6f 6e  dia.org/wiki/Con
704b0 76 6f 6c 75 74 69 6f 6e 5f 72 65 76 65 72 62 29  volution_reverb)
704c0 2e 0a 09 09 20 2a 20 20 0a 09 09 20 2a 20 20 40  .... *  ... *  @
704d0 63 6f 6e 73 74 72 75 63 74 6f 72 0a 09 09 20 2a  constructor... *
704e0 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65    @extends {Tone
704f0 2e 45 66 66 65 63 74 7d 0a 09 09 20 2a 20 20 40  .Effect}... *  @
70500 70 61 72 61 6d 20 7b 73 74 72 69 6e 67 7c 54 6f  param {string|To
70510 6e 65 2e 42 75 66 66 65 72 7c 4f 62 6a 65 63 74  ne.Buffer|Object
70520 7d 20 5b 75 72 6c 5d 20 54 68 65 20 55 52 4c 20  } [url] The URL 
70530 6f 66 20 74 68 65 20 69 6d 70 75 6c 73 65 20 72  of the impulse r
70540 65 73 70 6f 6e 73 65 20 6f 72 20 74 68 65 20 54  esponse or the T
70550 6f 6e 65 2e 42 75 66 66 65 72 0a 09 09 20 2a 20  one.Buffer... * 
70560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70580 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 61            contia
70590 6e 69 6e 67 20 74 68 65 20 69 6d 70 75 6c 73 65  ning the impulse
705a0 20 72 65 73 70 6f 6e 73 65 2e 20 0a 09 09 20 2a   response. ... *
705b0 20 20 40 70 61 72 61 6d 20 7b 46 75 6e 63 74 69    @param {Functi
705c0 6f 6e 7d 20 6f 6e 6c 6f 61 64 20 54 68 65 20 63  on} onload The c
705d0 61 6c 6c 62 61 63 6b 20 74 6f 20 69 6e 76 6f 6b  allback to invok
705e0 65 20 77 68 65 6e 20 74 68 65 20 75 72 6c 20 69  e when the url i
705f0 73 20 6c 6f 61 64 65 64 2e 0a 09 09 20 2a 20 20  s loaded.... *  
70600 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 2f 2f  @example... * //
70610 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 74 68 65  initializing the
70620 20 63 6f 6e 76 6f 6c 76 65 72 20 77 69 74 68 20   convolver with 
70630 61 6e 20 69 6d 70 75 6c 73 65 20 72 65 73 70 6f  an impulse respo
70640 6e 73 65 0a 09 09 20 2a 20 76 61 72 20 63 6f 6e  nse... * var con
70650 76 6f 6c 76 65 72 20 3d 20 6e 65 77 20 54 6f 6e  volver = new Ton
70660 65 2e 43 6f 6e 76 6f 6c 76 65 72 28 22 2e 2f 70  e.Convolver("./p
70670 61 74 68 2f 74 6f 2f 69 72 2e 77 61 76 22 29 2e  ath/to/ir.wav").
70680 74 6f 4d 61 73 74 65 72 28 29 3b 0a 09 09 20 2a  toMaster();... *
70690 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 43 6f 6e 76  /..    Tone.Conv
706a0 6f 6c 76 65 72 20 3d 20 66 75 6e 63 74 69 6f 6e  olver = function
706b0 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 76   () {..        v
706c0 61 72 20 6f 70 74 69 6f 6e 73 20 3d 20 74 68 69  ar options = thi
706d0 73 2e 6f 70 74 69 6f 6e 73 4f 62 6a 65 63 74 28  s.optionsObject(
706e0 61 72 67 75 6d 65 6e 74 73 2c 20 5b 0a 09 20 20  arguments, [..  
706f0 20 20 20 20 20 20 20 20 20 20 27 75 72 6c 27 2c            'url',
70700 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 6f  ..            'o
70710 6e 6c 6f 61 64 27 0a 09 20 20 20 20 20 20 20 20  nload'..        
70720 5d 2c 20 54 6f 6e 65 2e 43 6f 6e 76 6f 6c 76 65  ], Tone.Convolve
70730 72 2e 64 65 66 61 75 6c 74 73 29 3b 0a 09 20 20  r.defaults);..  
70740 20 20 20 20 20 20 54 6f 6e 65 2e 45 66 66 65 63        Tone.Effec
70750 74 2e 63 61 6c 6c 28 74 68 69 73 2c 20 6f 70 74  t.call(this, opt
70760 69 6f 6e 73 29 3b 0a 09 20 20 20 20 20 20 20 20  ions);..        
70770 2f 2a 2a 0a 09 09 09 20 2a 20 20 63 6f 6e 76 6f  /**.... *  convo
70780 6c 76 65 72 20 6e 6f 64 65 0a 09 09 09 20 2a 20  lver node.... * 
70790 20 40 74 79 70 65 20 7b 43 6f 6e 76 6f 6c 76 65   @type {Convolve
707a0 72 4e 6f 64 65 7d 0a 09 09 09 20 2a 20 20 40 70  rNode}.... *  @p
707b0 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20  rivate.... */.. 
707c0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 63 6f 6e         this._con
707d0 76 6f 6c 76 65 72 20 3d 20 74 68 69 73 2e 63 6f  volver = this.co
707e0 6e 74 65 78 74 2e 63 72 65 61 74 65 43 6f 6e 76  ntext.createConv
707f0 6f 6c 76 65 72 28 29 3b 0a 09 20 20 20 20 20 20  olver();..      
70800 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 74 68 65    /**.... *  the
70810 20 63 6f 6e 76 6f 6c 75 74 69 6f 6e 20 62 75 66   convolution buf
70820 66 65 72 0a 09 09 09 20 2a 20 20 40 74 79 70 65  fer.... *  @type
70830 20 7b 54 6f 6e 65 2e 42 75 66 66 65 72 7d 0a 09   {Tone.Buffer}..
70840 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
70850 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
70860 68 69 73 2e 5f 62 75 66 66 65 72 20 3d 20 6e 65  his._buffer = ne
70870 77 20 54 6f 6e 65 2e 42 75 66 66 65 72 28 29 3b  w Tone.Buffer();
70880 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 74 68  ..        if (th
70890 69 73 2e 69 73 53 74 72 69 6e 67 28 6f 70 74 69  is.isString(opti
708a0 6f 6e 73 2e 75 72 6c 29 29 20 7b 0a 09 20 20 20  ons.url)) {..   
708b0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 62           this._b
708c0 75 66 66 65 72 2e 6c 6f 61 64 28 6f 70 74 69 6f  uffer.load(optio
708d0 6e 73 2e 75 72 6c 2c 20 66 75 6e 63 74 69 6f 6e  ns.url, function
708e0 20 28 62 75 66 66 65 72 29 20 7b 0a 09 20 20 20   (buffer) {..   
708f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
70900 73 2e 62 75 66 66 65 72 20 3d 20 62 75 66 66 65  s.buffer = buffe
70910 72 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  r;..            
70920 20 20 20 20 6f 70 74 69 6f 6e 73 2e 6f 6e 6c 6f      options.onlo
70930 61 64 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20  ad();..         
70940 20 20 20 7d 2e 62 69 6e 64 28 74 68 69 73 29 29     }.bind(this))
70950 3b 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73  ;..        } els
70960 65 20 69 66 20 28 6f 70 74 69 6f 6e 73 2e 75 72  e if (options.ur
70970 6c 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  l) {..          
70980 20 20 74 68 69 73 2e 62 75 66 66 65 72 20 3d 20    this.buffer = 
70990 6f 70 74 69 6f 6e 73 2e 75 72 6c 3b 0a 09 20 20  options.url;..  
709a0 20 20 20 20 20 20 20 20 20 20 6f 70 74 69 6f 6e            option
709b0 73 2e 6f 6e 6c 6f 61 64 28 29 3b 0a 09 20 20 20  s.onload();..   
709c0 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
709d0 74 68 69 73 2e 63 6f 6e 6e 65 63 74 45 66 66 65  this.connectEffe
709e0 63 74 28 74 68 69 73 2e 5f 63 6f 6e 76 6f 6c 76  ct(this._convolv
709f0 65 72 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  er);..    };..  
70a00 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f    Tone.extend(To
70a10 6e 65 2e 43 6f 6e 76 6f 6c 76 65 72 2c 20 54 6f  ne.Convolver, To
70a20 6e 65 2e 45 66 66 65 63 74 29 3b 0a 09 20 20 20  ne.Effect);..   
70a30 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 73 74 61 74   /**... *  @stat
70a40 69 63 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 0a  ic... *  @const.
70a50 09 09 20 2a 20 20 40 74 79 70 65 20 20 7b 4f 62  .. *  @type  {Ob
70a60 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a 09 20 20 20  ject}... */..   
70a70 20 54 6f 6e 65 2e 43 6f 6e 76 6f 6c 76 65 72 2e   Tone.Convolver.
70a80 64 65 66 61 75 6c 74 73 20 3d 20 7b 20 27 6f 6e  defaults = { 'on
70a90 6c 6f 61 64 27 3a 20 54 6f 6e 65 2e 6e 6f 4f 70  load': Tone.noOp
70aa0 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20   };..    /**... 
70ab0 2a 20 20 54 68 65 20 63 6f 6e 76 6f 6c 76 65 72  *  The convolver
70ac0 27 73 20 62 75 66 66 65 72 0a 09 09 20 2a 20 20  's buffer... *  
70ad0 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 43  @memberOf Tone.C
70ae0 6f 6e 76 6f 6c 76 65 72 23 0a 09 09 20 2a 20 20  onvolver#... *  
70af0 40 74 79 70 65 20 7b 41 75 64 69 6f 42 75 66 66  @type {AudioBuff
70b00 65 72 7d 0a 09 09 20 2a 20 20 40 6e 61 6d 65 20  er}... *  @name 
70b10 62 75 66 66 65 72 0a 09 09 20 2a 2f 0a 09 20 20  buffer... */..  
70b20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50    Object.defineP
70b30 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 43 6f 6e  roperty(Tone.Con
70b40 76 6f 6c 76 65 72 2e 70 72 6f 74 6f 74 79 70 65  volver.prototype
70b50 2c 20 27 62 75 66 66 65 72 27 2c 20 7b 0a 09 20  , 'buffer', {.. 
70b60 20 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63         get: func
70b70 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
70b80 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
70b90 69 73 2e 5f 62 75 66 66 65 72 2e 67 65 74 28 29  is._buffer.get()
70ba0 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20  ;..        },.. 
70bb0 20 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63         set: func
70bc0 74 69 6f 6e 20 28 62 75 66 66 65 72 29 20 7b 0a  tion (buffer) {.
70bd0 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
70be0 73 2e 5f 62 75 66 66 65 72 2e 73 65 74 28 62 75  s._buffer.set(bu
70bf0 66 66 65 72 29 3b 0a 09 20 20 20 20 20 20 20 20  ffer);..        
70c00 20 20 20 20 74 68 69 73 2e 5f 63 6f 6e 76 6f 6c      this._convol
70c10 76 65 72 2e 62 75 66 66 65 72 20 3d 20 74 68 69  ver.buffer = thi
70c20 73 2e 5f 62 75 66 66 65 72 2e 67 65 74 28 29 3b  s._buffer.get();
70c30 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
70c40 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09   });..    /**...
70c50 20 2a 20 20 4c 6f 61 64 20 61 6e 20 69 6d 70 75   *  Load an impu
70c60 6c 73 65 20 72 65 73 70 6f 6e 73 65 20 75 72 6c  lse response url
70c70 20 61 73 20 61 6e 20 61 75 64 69 6f 20 62 75 66   as an audio buf
70c80 66 65 72 2e 0a 09 09 20 2a 20 20 44 65 63 6f 64  fer.... *  Decod
70c90 65 73 20 74 68 65 20 61 75 64 69 6f 20 61 73 79  es the audio asy
70ca0 6e 63 68 72 6f 6e 6f 75 73 6c 79 20 61 6e 64 20  nchronously and 
70cb0 69 6e 76 6f 6b 65 73 0a 09 09 20 2a 20 20 74 68  invokes... *  th
70cc0 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20  e callback once 
70cd0 74 68 65 20 61 75 64 69 6f 20 62 75 66 66 65 72  the audio buffer
70ce0 20 6c 6f 61 64 73 2e 0a 09 09 20 2a 20 20 40 70   loads.... *  @p
70cf0 61 72 61 6d 20 7b 73 74 72 69 6e 67 7d 20 75 72  aram {string} ur
70d00 6c 20 54 68 65 20 75 72 6c 20 6f 66 20 74 68 65  l The url of the
70d10 20 62 75 66 66 65 72 20 74 6f 20 6c 6f 61 64 2e   buffer to load.
70d20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 20  ... *           
70d30 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 74             filet
70d40 79 70 65 20 73 75 70 70 6f 72 74 20 64 65 70 65  ype support depe
70d50 6e 64 73 20 6f 6e 20 74 68 65 0a 09 09 20 2a 20  nds on the... * 
70d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70d70 20 20 20 20 20 62 72 6f 77 73 65 72 2e 0a 09 09       browser....
70d80 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 66 75 6e   *  @param  {fun
70d90 63 74 69 6f 6e 3d 7d 20 63 61 6c 6c 62 61 63 6b  ction=} callback
70da0 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20  ... *  @returns 
70db0 7b 50 72 6f 6d 69 73 65 7d 0a 09 09 20 2a 2f 0a  {Promise}... */.
70dc0 09 20 20 20 20 54 6f 6e 65 2e 43 6f 6e 76 6f 6c  .    Tone.Convol
70dd0 76 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e 6c 6f  ver.prototype.lo
70de0 61 64 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 75  ad = function (u
70df0 72 6c 2c 20 63 61 6c 6c 62 61 63 6b 29 20 7b 0a  rl, callback) {.
70e00 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
70e10 74 68 69 73 2e 5f 62 75 66 66 65 72 2e 6c 6f 61  this._buffer.loa
70e20 64 28 75 72 6c 2c 20 66 75 6e 63 74 69 6f 6e 20  d(url, function 
70e30 28 62 75 66 66 29 20 7b 0a 09 20 20 20 20 20 20  (buff) {..      
70e40 20 20 20 20 20 20 74 68 69 73 2e 62 75 66 66 65        this.buffe
70e50 72 20 3d 20 62 75 66 66 3b 0a 09 20 20 20 20 20  r = buff;..     
70e60 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62         if (callb
70e70 61 63 6b 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ack) {..        
70e80 20 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63 6b          callback
70e90 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ();..           
70ea0 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 2e 62 69   }..        }.bi
70eb0 6e 64 28 74 68 69 73 29 29 3b 0a 09 20 20 20 20  nd(this));..    
70ec0 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  };..    /**... *
70ed0 20 20 43 6c 65 61 6e 20 75 70 2e 20 0a 09 09 20    Clean up. ... 
70ee0 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e  *  @returns {Ton
70ef0 65 2e 43 6f 6e 76 6f 6c 76 65 72 7d 20 74 68 69  e.Convolver} thi
70f00 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  s... */..    Ton
70f10 65 2e 43 6f 6e 76 6f 6c 76 65 72 2e 70 72 6f 74  e.Convolver.prot
70f20 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20  otype.dispose = 
70f30 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
70f40 20 20 20 20 20 20 20 54 6f 6e 65 2e 45 66 66 65         Tone.Effe
70f50 63 74 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73  ct.prototype.dis
70f60 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b  pose.call(this);
70f70 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
70f80 63 6f 6e 76 6f 6c 76 65 72 2e 64 69 73 63 6f 6e  convolver.discon
70f90 6e 65 63 74 28 29 3b 0a 09 20 20 20 20 20 20 20  nect();..       
70fa0 20 74 68 69 73 2e 5f 63 6f 6e 76 6f 6c 76 65 72   this._convolver
70fb0 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
70fc0 20 20 74 68 69 73 2e 5f 62 75 66 66 65 72 2e 64    this._buffer.d
70fd0 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20  ispose();..     
70fe0 20 20 20 74 68 69 73 2e 5f 62 75 66 66 65 72 20     this._buffer 
70ff0 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
71000 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20   return this;.. 
71010 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74 75 72     };..    retur
71020 6e 20 54 6f 6e 65 2e 43 6f 6e 76 6f 6c 76 65 72  n Tone.Convolver
71030 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66  ;..});..Module(f
71040 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b  unction (Tone) {
71050 0a 09 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a  ..    ..    /**.
71060 09 09 20 2a 20 20 40 63 6c 61 73 73 20 54 6f 6e  .. *  @class Ton
71070 65 2e 44 69 73 74 6f 72 74 69 6f 6e 20 69 73 20  e.Distortion is 
71080 61 20 73 69 6d 70 6c 65 20 64 69 73 74 6f 72 74  a simple distort
71090 69 6f 6e 20 65 66 66 65 63 74 20 75 73 69 6e 67  ion effect using
710a0 20 54 6f 6e 65 2e 57 61 76 65 53 68 61 70 65 72   Tone.WaveShaper
710b0 2e 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 41  .... *         A
710c0 6c 67 6f 72 69 74 68 6d 20 66 72 6f 6d 20 5b 61  lgorithm from [a
710d0 20 73 74 61 63 6b 6f 76 65 72 66 6c 6f 77 20 61   stackoverflow a
710e0 6e 73 77 65 72 5d 28 68 74 74 70 3a 2f 2f 73 74  nswer](http://st
710f0 61 63 6b 6f 76 65 72 66 6c 6f 77 2e 63 6f 6d 2f  ackoverflow.com/
71100 61 2f 32 32 33 31 33 34 30 38 29 2e 0a 09 09 20  a/22313408).... 
71110 2a 0a 09 09 20 2a 20 20 40 65 78 74 65 6e 64 73  *... *  @extends
71120 20 7b 54 6f 6e 65 2e 45 66 66 65 63 74 7d 0a 09   {Tone.Effect}..
71130 09 20 2a 20 20 40 63 6f 6e 73 74 72 75 63 74 6f  . *  @constructo
71140 72 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b  r... *  @param {
71150 4e 75 6d 62 65 72 7c 4f 62 6a 65 63 74 7d 20 5b  Number|Object} [
71160 64 69 73 74 6f 72 74 69 6f 6e 5d 20 54 68 65 20  distortion] The 
71170 61 6d 6f 75 6e 74 20 6f 66 20 64 69 73 74 6f 72  amount of distor
71180 74 69 6f 6e 20 28 6e 6f 6d 69 6e 61 6c 20 72 61  tion (nominal ra
71190 6e 67 65 20 6f 66 20 30 2d 31 29 0a 09 09 20 2a  nge of 0-1)... *
711a0 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20    @example... * 
711b0 76 61 72 20 64 69 73 74 20 3d 20 6e 65 77 20 54  var dist = new T
711c0 6f 6e 65 2e 44 69 73 74 6f 72 74 69 6f 6e 28 30  one.Distortion(0
711d0 2e 38 29 2e 74 6f 4d 61 73 74 65 72 28 29 3b 0a  .8).toMaster();.
711e0 09 09 20 2a 20 76 61 72 20 66 6d 20 3d 20 6e 65  .. * var fm = ne
711f0 77 20 54 6f 6e 65 2e 53 69 6d 70 6c 65 46 4d 28  w Tone.SimpleFM(
71200 29 2e 63 6f 6e 6e 65 63 74 28 64 69 73 74 29 3b  ).connect(dist);
71210 0a 09 09 20 2a 20 2f 2f 74 68 69 73 20 73 6f 75  ... * //this sou
71220 6e 64 73 20 67 6f 6f 64 20 6f 6e 20 62 61 73 73  nds good on bass
71230 20 6e 6f 74 65 73 0a 09 09 20 2a 20 66 6d 2e 74   notes... * fm.t
71240 72 69 67 67 65 72 41 74 74 61 63 6b 52 65 6c 65  riggerAttackRele
71250 61 73 65 28 22 41 31 22 2c 20 22 38 6e 22 29 3b  ase("A1", "8n");
71260 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
71270 2e 44 69 73 74 6f 72 74 69 6f 6e 20 3d 20 66 75  .Distortion = fu
71280 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
71290 20 20 20 20 20 76 61 72 20 6f 70 74 69 6f 6e 73       var options
712a0 20 3d 20 74 68 69 73 2e 6f 70 74 69 6f 6e 73 4f   = this.optionsO
712b0 62 6a 65 63 74 28 61 72 67 75 6d 65 6e 74 73 2c  bject(arguments,
712c0 20 5b 27 64 69 73 74 6f 72 74 69 6f 6e 27 5d 2c   ['distortion'],
712d0 20 54 6f 6e 65 2e 44 69 73 74 6f 72 74 69 6f 6e   Tone.Distortion
712e0 2e 64 65 66 61 75 6c 74 73 29 3b 0a 09 20 20 20  .defaults);..   
712f0 20 20 20 20 20 54 6f 6e 65 2e 45 66 66 65 63 74       Tone.Effect
71300 2e 63 61 6c 6c 28 74 68 69 73 2c 20 6f 70 74 69  .call(this, opti
71310 6f 6e 73 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  ons);..        /
71320 2a 2a 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  **.... *  @type 
71330 7b 54 6f 6e 65 2e 57 61 76 65 53 68 61 70 65 72  {Tone.WaveShaper
71340 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  }.... *  @privat
71350 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
71360 20 20 74 68 69 73 2e 5f 73 68 61 70 65 72 20 3d    this._shaper =
71370 20 6e 65 77 20 54 6f 6e 65 2e 57 61 76 65 53 68   new Tone.WaveSh
71380 61 70 65 72 28 34 30 39 36 29 3b 0a 09 20 20 20  aper(4096);..   
71390 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 68       /**.... * h
713a0 6f 6c 64 73 20 74 68 65 20 64 69 73 74 6f 72 74  olds the distort
713b0 69 6f 6e 20 61 6d 6f 75 6e 74 0a 09 09 09 20 2a  ion amount.... *
713c0 20 40 74 79 70 65 20 7b 6e 75 6d 62 65 72 7d 0a   @type {number}.
713d0 09 09 09 20 2a 20 40 70 72 69 76 61 74 65 0a 09  ... * @private..
713e0 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
713f0 68 69 73 2e 5f 64 69 73 74 6f 72 74 69 6f 6e 20  his._distortion 
71400 3d 20 6f 70 74 69 6f 6e 73 2e 64 69 73 74 6f 72  = options.distor
71410 74 69 6f 6e 3b 0a 09 20 20 20 20 20 20 20 20 74  tion;..        t
71420 68 69 73 2e 63 6f 6e 6e 65 63 74 45 66 66 65 63  his.connectEffec
71430 74 28 74 68 69 73 2e 5f 73 68 61 70 65 72 29 3b  t(this._shaper);
71440 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 64  ..        this.d
71450 69 73 74 6f 72 74 69 6f 6e 20 3d 20 6f 70 74 69  istortion = opti
71460 6f 6e 73 2e 64 69 73 74 6f 72 74 69 6f 6e 3b 0a  ons.distortion;.
71470 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f 76  .        this.ov
71480 65 72 73 61 6d 70 6c 65 20 3d 20 6f 70 74 69 6f  ersample = optio
71490 6e 73 2e 6f 76 65 72 73 61 6d 70 6c 65 3b 0a 09  ns.oversample;..
714a0 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65      };..    Tone
714b0 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 44 69 73  .extend(Tone.Dis
714c0 74 6f 72 74 69 6f 6e 2c 20 54 6f 6e 65 2e 45 66  tortion, Tone.Ef
714d0 66 65 63 74 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a  fect);..    /**.
714e0 09 09 20 2a 20 20 40 73 74 61 74 69 63 0a 09 09  .. *  @static...
714f0 20 2a 20 20 40 63 6f 6e 73 74 0a 09 09 20 2a 20   *  @const... * 
71500 20 40 74 79 70 65 20 7b 4f 62 6a 65 63 74 7d 0a   @type {Object}.
71510 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
71520 44 69 73 74 6f 72 74 69 6f 6e 2e 64 65 66 61 75  Distortion.defau
71530 6c 74 73 20 3d 20 7b 0a 09 20 20 20 20 20 20 20  lts = {..       
71540 20 27 64 69 73 74 6f 72 74 69 6f 6e 27 3a 20 30   'distortion': 0
71550 2e 34 2c 0a 09 20 20 20 20 20 20 20 20 27 6f 76  .4,..        'ov
71560 65 72 73 61 6d 70 6c 65 27 3a 20 27 6e 6f 6e 65  ersample': 'none
71570 27 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  '..    };..    /
71580 2a 2a 0a 09 09 20 2a 20 54 68 65 20 61 6d 6f 75  **... * The amou
71590 6e 74 20 6f 66 20 64 69 73 74 6f 72 74 69 6f 6e  nt of distortion
715a0 2e 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66  .... * @memberOf
715b0 20 54 6f 6e 65 2e 44 69 73 74 6f 72 74 69 6f 6e   Tone.Distortion
715c0 23 0a 09 09 20 2a 20 40 74 79 70 65 20 7b 4e 6f  #... * @type {No
715d0 72 6d 61 6c 52 61 6e 67 65 7d 0a 09 09 20 2a 20  rmalRange}... * 
715e0 40 6e 61 6d 65 20 64 69 73 74 6f 72 74 69 6f 6e  @name distortion
715f0 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65  ... */..    Obje
71600 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74  ct.definePropert
71610 79 28 54 6f 6e 65 2e 44 69 73 74 6f 72 74 69 6f  y(Tone.Distortio
71620 6e 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 64 69  n.prototype, 'di
71630 73 74 6f 72 74 69 6f 6e 27 2c 20 7b 0a 09 20 20  stortion', {..  
71640 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74        get: funct
71650 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
71660 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
71670 73 2e 5f 64 69 73 74 6f 72 74 69 6f 6e 3b 0a 09  s._distortion;..
71680 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20          },..    
71690 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f      set: functio
716a0 6e 20 28 61 6d 6f 75 6e 74 29 20 7b 0a 09 20 20  n (amount) {..  
716b0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
716c0 64 69 73 74 6f 72 74 69 6f 6e 20 3d 20 61 6d 6f  distortion = amo
716d0 75 6e 74 3b 0a 09 20 20 20 20 20 20 20 20 20 20  unt;..          
716e0 20 20 76 61 72 20 6b 20 3d 20 61 6d 6f 75 6e 74    var k = amount
716f0 20 2a 20 31 30 30 3b 0a 09 20 20 20 20 20 20 20   * 100;..       
71700 20 20 20 20 20 76 61 72 20 64 65 67 20 3d 20 4d       var deg = M
71710 61 74 68 2e 50 49 20 2f 20 31 38 30 3b 0a 09 20  ath.PI / 180;.. 
71720 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
71730 5f 73 68 61 70 65 72 2e 73 65 74 4d 61 70 28 66  _shaper.setMap(f
71740 75 6e 63 74 69 6f 6e 20 28 78 29 20 7b 0a 09 20  unction (x) {.. 
71750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
71760 66 20 28 4d 61 74 68 2e 61 62 73 28 78 29 20 3c  f (Math.abs(x) <
71770 20 30 2e 30 30 31 29 20 7b 0a 09 20 20 20 20 20   0.001) {..     
71780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
71790 2f 73 68 6f 75 6c 64 20 6f 75 74 70 75 74 20 30  /should output 0
717a0 20 77 68 65 6e 20 69 6e 70 75 74 20 69 73 20 30   when input is 0
717b0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
717c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a        return 0;.
717d0 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
717e0 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20   } else {..     
717f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
71800 65 74 75 72 6e 20 28 33 20 2b 20 6b 29 20 2a 20  eturn (3 + k) * 
71810 78 20 2a 20 32 30 20 2a 20 64 65 67 20 2f 20 28  x * 20 * deg / (
71820 4d 61 74 68 2e 50 49 20 2b 20 6b 20 2a 20 4d 61  Math.PI + k * Ma
71830 74 68 2e 61 62 73 28 78 29 29 3b 0a 09 20 20 20  th.abs(x));..   
71840 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09               }..
71850 20 20 20 20 20 20 20 20 20 20 20 20 7d 29 3b 0a              });.
71860 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
71870 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  });..    /**... 
71880 2a 20 54 68 65 20 6f 76 65 72 73 61 6d 70 6c 69  * The oversampli
71890 6e 67 20 6f 66 20 74 68 65 20 65 66 66 65 63 74  ng of the effect
718a0 2e 20 43 61 6e 20 65 69 74 68 65 72 20 62 65 20  . Can either be 
718b0 22 6e 6f 6e 65 22 2c 20 22 32 78 22 20 6f 72 20  "none", "2x" or 
718c0 22 34 78 22 2e 0a 09 09 20 2a 20 40 6d 65 6d 62  "4x".... * @memb
718d0 65 72 4f 66 20 54 6f 6e 65 2e 44 69 73 74 6f 72  erOf Tone.Distor
718e0 74 69 6f 6e 23 0a 09 09 20 2a 20 40 74 79 70 65  tion#... * @type
718f0 20 7b 73 74 72 69 6e 67 7d 0a 09 09 20 2a 20 40   {string}... * @
71900 6e 61 6d 65 20 6f 76 65 72 73 61 6d 70 6c 65 0a  name oversample.
71910 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63  .. */..    Objec
71920 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79  t.defineProperty
71930 28 54 6f 6e 65 2e 44 69 73 74 6f 72 74 69 6f 6e  (Tone.Distortion
71940 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 6f 76 65  .prototype, 'ove
71950 72 73 61 6d 70 6c 65 27 2c 20 7b 0a 09 20 20 20  rsample', {..   
71960 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69       get: functi
71970 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
71980 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
71990 2e 5f 73 68 61 70 65 72 2e 6f 76 65 72 73 61 6d  ._shaper.oversam
719a0 70 6c 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c  ple;..        },
719b0 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66  ..        set: f
719c0 75 6e 63 74 69 6f 6e 20 28 6f 76 65 72 73 61 6d  unction (oversam
719d0 70 6c 69 6e 67 29 20 7b 0a 09 20 20 20 20 20 20  pling) {..      
719e0 20 20 20 20 20 20 74 68 69 73 2e 5f 73 68 61 70        this._shap
719f0 65 72 2e 6f 76 65 72 73 61 6d 70 6c 65 20 3d 20  er.oversample = 
71a00 6f 76 65 72 73 61 6d 70 6c 69 6e 67 3b 0a 09 20  oversampling;.. 
71a10 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29         }..    })
71a20 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
71a30 20 43 6c 65 61 6e 20 75 70 2e 20 0a 09 09 20 2a   Clean up. ... *
71a40 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65    @returns {Tone
71a50 2e 44 69 73 74 6f 72 74 69 6f 6e 7d 20 74 68 69  .Distortion} thi
71a60 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  s... */..    Ton
71a70 65 2e 44 69 73 74 6f 72 74 69 6f 6e 2e 70 72 6f  e.Distortion.pro
71a80 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d  totype.dispose =
71a90 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
71aa0 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 45 66 66          Tone.Eff
71ab0 65 63 74 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69  ect.prototype.di
71ac0 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69 73 29  spose.call(this)
71ad0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
71ae0 5f 73 68 61 70 65 72 2e 64 69 73 70 6f 73 65 28  _shaper.dispose(
71af0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
71b00 2e 5f 73 68 61 70 65 72 20 3d 20 6e 75 6c 6c 3b  ._shaper = null;
71b10 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
71b20 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09   this;..    };..
71b30 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e      return Tone.
71b40 44 69 73 74 6f 72 74 69 6f 6e 3b 0a 09 7d 29 3b  Distortion;..});
71b50 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f  ..Module(functio
71b60 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20  n (Tone) {..    
71b70 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
71b80 40 63 6c 61 73 73 20 20 54 6f 6e 65 2e 46 65 65  @class  Tone.Fee
71b90 64 62 61 63 6b 44 65 6c 61 79 20 69 73 20 61 20  dbackDelay is a 
71ba0 44 65 6c 61 79 4e 6f 64 65 20 69 6e 20 77 68 69  DelayNode in whi
71bb0 63 68 20 70 61 72 74 20 6f 66 20 6f 75 74 70 75  ch part of outpu
71bc0 74 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20  t... *          
71bd0 73 69 67 6e 61 6c 20 69 73 20 66 65 64 20 62 61  signal is fed ba
71be0 63 6b 20 69 6e 74 6f 20 74 68 65 20 64 65 6c 61  ck into the dela
71bf0 79 2e 20 0a 09 09 20 2a 0a 09 09 20 2a 20 20 40  y. ... *... *  @
71c00 63 6f 6e 73 74 72 75 63 74 6f 72 0a 09 09 20 2a  constructor... *
71c10 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65    @extends {Tone
71c20 2e 46 65 65 64 62 61 63 6b 45 66 66 65 63 74 7d  .FeedbackEffect}
71c30 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 54  ... *  @param {T
71c40 69 6d 65 7c 4f 62 6a 65 63 74 7d 20 5b 64 65 6c  ime|Object} [del
71c50 61 79 54 69 6d 65 5d 20 54 68 65 20 64 65 6c 61  ayTime] The dela
71c60 79 20 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65  y applied to the
71c70 20 69 6e 63 6f 6d 69 6e 67 20 73 69 67 6e 61 6c   incoming signal
71c80 2e 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  . ... *  @param 
71c90 7b 4e 6f 72 6d 61 6c 52 61 6e 67 65 3d 7d 20 66  {NormalRange=} f
71ca0 65 65 64 62 61 63 6b 20 54 68 65 20 61 6d 6f 75  eedback The amou
71cb0 6e 74 20 6f 66 20 74 68 65 20 65 66 66 65 63 74  nt of the effect
71cc0 65 64 20 73 69 67 6e 61 6c 20 77 68 69 63 68 20  ed signal which 
71cd0 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 20  ... *           
71ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
71cf0 20 69 73 20 66 65 64 20 62 61 63 6b 20 74 68 72   is fed back thr
71d00 6f 75 67 68 20 74 68 65 20 64 65 6c 61 79 2e 0a  ough the delay..
71d10 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09  .. *  @example..
71d20 09 20 2a 20 76 61 72 20 66 65 65 64 62 61 63 6b  . * var feedback
71d30 44 65 6c 61 79 20 3d 20 6e 65 77 20 54 6f 6e 65  Delay = new Tone
71d40 2e 46 65 65 64 62 61 63 6b 44 65 6c 61 79 28 22  .FeedbackDelay("
71d50 38 6e 22 2c 20 30 2e 35 29 2e 74 6f 4d 61 73 74  8n", 0.5).toMast
71d60 65 72 28 29 3b 0a 09 09 20 2a 20 76 61 72 20 74  er();... * var t
71d70 6f 6d 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 44 72  om = new Tone.Dr
71d80 75 6d 53 79 6e 74 68 28 7b 0a 09 09 20 2a 20 09  umSynth({... * .
71d90 22 6f 63 74 61 76 65 73 22 20 3a 20 34 2c 0a 09  "octaves" : 4,..
71da0 09 20 2a 20 09 22 70 69 74 63 68 44 65 63 61 79  . * ."pitchDecay
71db0 22 20 3a 20 30 2e 31 0a 09 09 20 2a 20 7d 29 2e  " : 0.1... * }).
71dc0 63 6f 6e 6e 65 63 74 28 66 65 65 64 62 61 63 6b  connect(feedback
71dd0 44 65 6c 61 79 29 3b 0a 09 09 20 2a 20 74 6f 6d  Delay);... * tom
71de0 2e 74 72 69 67 67 65 72 41 74 74 61 63 6b 52 65  .triggerAttackRe
71df0 6c 65 61 73 65 28 22 41 32 22 2c 22 33 32 6e 22  lease("A2","32n"
71e00 29 3b 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  );... */..    To
71e10 6e 65 2e 46 65 65 64 62 61 63 6b 44 65 6c 61 79  ne.FeedbackDelay
71e20 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b   = function () {
71e30 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 6f 70  ..        var op
71e40 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e 6f 70 74  tions = this.opt
71e50 69 6f 6e 73 4f 62 6a 65 63 74 28 61 72 67 75 6d  ionsObject(argum
71e60 65 6e 74 73 2c 20 5b 0a 09 20 20 20 20 20 20 20  ents, [..       
71e70 20 20 20 20 20 27 64 65 6c 61 79 54 69 6d 65 27       'delayTime'
71e80 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
71e90 66 65 65 64 62 61 63 6b 27 0a 09 20 20 20 20 20  feedback'..     
71ea0 20 20 20 5d 2c 20 54 6f 6e 65 2e 46 65 65 64 62     ], Tone.Feedb
71eb0 61 63 6b 44 65 6c 61 79 2e 64 65 66 61 75 6c 74  ackDelay.default
71ec0 73 29 3b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e  s);..        Ton
71ed0 65 2e 46 65 65 64 62 61 63 6b 45 66 66 65 63 74  e.FeedbackEffect
71ee0 2e 63 61 6c 6c 28 74 68 69 73 2c 20 6f 70 74 69  .call(this, opti
71ef0 6f 6e 73 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  ons);..        /
71f00 2a 2a 0a 09 09 09 20 2a 20 20 74 68 65 20 64 65  **.... *  the de
71f10 6c 61 79 20 6e 6f 64 65 0a 09 09 09 20 2a 20 20  lay node.... *  
71f20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 44 65 6c 61  @type {Tone.Dela
71f30 79 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61  y}.... *  @priva
71f40 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  te.... */..     
71f50 20 20 20 74 68 69 73 2e 5f 64 65 6c 61 79 4e 6f     this._delayNo
71f60 64 65 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 44 65  de = new Tone.De
71f70 6c 61 79 28 6f 70 74 69 6f 6e 73 2e 64 65 6c 61  lay(options.dela
71f80 79 54 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20  yTime);..       
71f90 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20   /**.... *  The 
71fa0 64 65 6c 61 79 54 69 6d 65 20 6f 66 20 74 68 65  delayTime of the
71fb0 20 44 65 6c 61 79 4e 6f 64 65 2e 20 0a 09 09 09   DelayNode. ....
71fc0 20 2a 20 20 40 74 79 70 65 20 7b 54 69 6d 65 7d   *  @type {Time}
71fd0 0a 09 09 09 20 2a 20 20 40 73 69 67 6e 61 6c 0a  .... *  @signal.
71fe0 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
71ff0 74 68 69 73 2e 64 65 6c 61 79 54 69 6d 65 20 3d  this.delayTime =
72000 20 74 68 69 73 2e 5f 64 65 6c 61 79 4e 6f 64 65   this._delayNode
72010 2e 64 65 6c 61 79 54 69 6d 65 3b 0a 09 20 20 20  .delayTime;..   
72020 20 20 20 20 20 2f 2f 20 63 6f 6e 6e 65 63 74 20       // connect 
72030 69 74 20 75 70 0a 09 20 20 20 20 20 20 20 20 74  it up..        t
72040 68 69 73 2e 63 6f 6e 6e 65 63 74 45 66 66 65 63  his.connectEffec
72050 74 28 74 68 69 73 2e 5f 64 65 6c 61 79 4e 6f 64  t(this._delayNod
72060 65 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  e);..        thi
72070 73 2e 5f 72 65 61 64 4f 6e 6c 79 28 5b 27 64 65  s._readOnly(['de
72080 6c 61 79 54 69 6d 65 27 5d 29 3b 0a 09 20 20 20  layTime']);..   
72090 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65 2e 65 78   };..    Tone.ex
720a0 74 65 6e 64 28 54 6f 6e 65 2e 46 65 65 64 62 61  tend(Tone.Feedba
720b0 63 6b 44 65 6c 61 79 2c 20 54 6f 6e 65 2e 46 65  ckDelay, Tone.Fe
720c0 65 64 62 61 63 6b 45 66 66 65 63 74 29 3b 0a 09  edbackEffect);..
720d0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 68      /**... *  Th
720e0 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73  e default values
720f0 2e 20 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 0a  . ... *  @const.
72100 09 09 20 2a 20 20 40 73 74 61 74 69 63 0a 09 09  .. *  @static...
72110 20 2a 20 20 40 74 79 70 65 20 7b 4f 62 6a 65 63   *  @type {Objec
72120 74 7d 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  t}... */..    To
72130 6e 65 2e 46 65 65 64 62 61 63 6b 44 65 6c 61 79  ne.FeedbackDelay
72140 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b 20 27 64  .defaults = { 'd
72150 65 6c 61 79 54 69 6d 65 27 3a 20 30 2e 32 35 20  elayTime': 0.25 
72160 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  };..    /**... *
72170 20 20 63 6c 65 61 6e 20 75 70 0a 09 09 20 2a 20    clean up... * 
72180 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e   @returns {Tone.
72190 46 65 65 64 62 61 63 6b 44 65 6c 61 79 7d 20 74  FeedbackDelay} t
721a0 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  his... */..    T
721b0 6f 6e 65 2e 46 65 65 64 62 61 63 6b 44 65 6c 61  one.FeedbackDela
721c0 79 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70  y.prototype.disp
721d0 6f 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  ose = function (
721e0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e  ) {..        Ton
721f0 65 2e 46 65 65 64 62 61 63 6b 45 66 66 65 63 74  e.FeedbackEffect
72200 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f  .prototype.dispo
72210 73 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09  se.call(this);..
72220 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 64 65          this._de
72230 6c 61 79 4e 6f 64 65 2e 64 69 73 70 6f 73 65 28  layNode.dispose(
72240 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
72250 2e 5f 64 65 6c 61 79 4e 6f 64 65 20 3d 20 6e 75  ._delayNode = nu
72260 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ll;..        thi
72270 73 2e 5f 77 72 69 74 61 62 6c 65 28 5b 27 64 65  s._writable(['de
72280 6c 61 79 54 69 6d 65 27 5d 29 3b 0a 09 20 20 20  layTime']);..   
72290 20 20 20 20 20 74 68 69 73 2e 64 65 6c 61 79 54       this.delayT
722a0 69 6d 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  ime = null;..   
722b0 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
722c0 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 72  ;..    };..    r
722d0 65 74 75 72 6e 20 54 6f 6e 65 2e 46 65 65 64 62  eturn Tone.Feedb
722e0 61 63 6b 44 65 6c 61 79 3b 0a 09 7d 29 3b 0a 09  ackDelay;..});..
722f0 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20  Module(function 
72300 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09  (Tone) {..    ..
72310 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 61 6e      /**... *  an
72320 20 61 72 72 61 79 20 6f 66 20 63 6f 6d 62 20 66   array of comb f
72330 69 6c 74 65 72 20 64 65 6c 61 79 20 76 61 6c 75  ilter delay valu
72340 65 73 20 66 72 6f 6d 20 46 72 65 65 76 65 72 62  es from Freeverb
72350 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a   implementation.
72360 09 09 20 2a 20 20 40 73 74 61 74 69 63 0a 09 09  .. *  @static...
72370 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 20   *  @private... 
72380 2a 20 20 40 74 79 70 65 20 7b 41 72 72 61 79 7d  *  @type {Array}
72390 0a 09 09 20 2a 2f 0a 09 20 20 20 20 76 61 72 20  ... */..    var 
723a0 63 6f 6d 62 46 69 6c 74 65 72 54 75 6e 69 6e 67  combFilterTuning
723b0 73 20 3d 20 5b 0a 09 20 20 20 20 20 20 20 20 31  s = [..        1
723c0 35 35 37 20 2f 20 34 34 31 30 30 2c 0a 09 20 20  557 / 44100,..  
723d0 20 20 20 20 20 20 31 36 31 37 20 2f 20 34 34 31        1617 / 441
723e0 30 30 2c 0a 09 20 20 20 20 20 20 20 20 31 34 39  00,..        149
723f0 31 20 2f 20 34 34 31 30 30 2c 0a 09 20 20 20 20  1 / 44100,..    
72400 20 20 20 20 31 34 32 32 20 2f 20 34 34 31 30 30      1422 / 44100
72410 2c 0a 09 20 20 20 20 20 20 20 20 31 32 37 37 20  ,..        1277 
72420 2f 20 34 34 31 30 30 2c 0a 09 20 20 20 20 20 20  / 44100,..      
72430 20 20 31 33 35 36 20 2f 20 34 34 31 30 30 2c 0a    1356 / 44100,.
72440 09 20 20 20 20 20 20 20 20 31 31 38 38 20 2f 20  .        1188 / 
72450 34 34 31 30 30 2c 0a 09 20 20 20 20 20 20 20 20  44100,..        
72460 31 31 31 36 20 2f 20 34 34 31 30 30 0a 09 20 20  1116 / 44100..  
72470 20 20 5d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    ];..    /**...
72480 20 2a 20 20 61 6e 20 61 72 72 61 79 20 6f 66 20   *  an array of 
72490 61 6c 6c 70 61 73 73 20 66 69 6c 74 65 72 20 66  allpass filter f
724a0 72 65 71 75 65 6e 63 79 20 76 61 6c 75 65 73 20  requency values 
724b0 66 72 6f 6d 20 46 72 65 65 76 65 72 62 20 69 6d  from Freeverb im
724c0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 09 09 20  plementation... 
724d0 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a  *  @private... *
724e0 20 20 40 73 74 61 74 69 63 0a 09 09 20 2a 20 20    @static... *  
724f0 40 74 79 70 65 20 7b 41 72 72 61 79 7d 0a 09 09  @type {Array}...
72500 20 2a 2f 0a 09 20 20 20 20 76 61 72 20 61 6c 6c   */..    var all
72510 70 61 73 73 46 69 6c 74 65 72 46 72 65 71 75 65  passFilterFreque
72520 6e 63 69 65 73 20 3d 20 5b 0a 09 20 20 20 20 20  ncies = [..     
72530 20 20 20 32 32 35 2c 0a 09 20 20 20 20 20 20 20     225,..       
72540 20 35 35 36 2c 0a 09 20 20 20 20 20 20 20 20 34   556,..        4
72550 34 31 2c 0a 09 20 20 20 20 20 20 20 20 33 34 31  41,..        341
72560 0a 09 20 20 20 20 5d 3b 0a 09 20 20 20 20 2f 2a  ..    ];..    /*
72570 2a 0a 09 09 20 2a 20 20 40 63 6c 61 73 73 20 54  *... *  @class T
72580 6f 6e 65 2e 46 72 65 65 76 65 72 62 20 69 73 20  one.Freeverb is 
72590 61 20 72 65 76 65 72 62 20 62 61 73 65 64 20 6f  a reverb based o
725a0 6e 20 5b 46 72 65 65 76 65 72 62 5d 28 68 74 74  n [Freeverb](htt
725b0 70 73 3a 2f 2f 63 63 72 6d 61 2e 73 74 61 6e 66  ps://ccrma.stanf
725c0 6f 72 64 2e 65 64 75 2f 7e 6a 6f 73 2f 70 61 73  ord.edu/~jos/pas
725d0 70 2f 46 72 65 65 76 65 72 62 2e 68 74 6d 6c 29  p/Freeverb.html)
725e0 2e 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 52  .... *         R
725f0 65 61 64 20 6d 6f 72 65 20 6f 6e 20 72 65 76 65  ead more on reve
72600 72 62 20 6f 6e 20 5b 53 6f 75 6e 64 4f 6e 53 6f  rb on [SoundOnSo
72610 75 6e 64 5d 28 68 74 74 70 3a 2f 2f 77 77 77 2e  und](http://www.
72620 73 6f 75 6e 64 6f 6e 73 6f 75 6e 64 2e 63 6f 6d  soundonsound.com
72630 2f 73 6f 73 2f 6d 61 79 30 30 2f 61 72 74 69 63  /sos/may00/artic
72640 6c 65 73 2f 72 65 76 65 72 62 2e 68 74 6d 29 2e  les/reverb.htm).
72650 0a 09 09 20 2a 0a 09 09 20 2a 20 20 40 65 78 74  ... *... *  @ext
72660 65 6e 64 73 20 7b 54 6f 6e 65 2e 45 66 66 65 63  ends {Tone.Effec
72670 74 7d 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 72  t}... *  @constr
72680 75 63 74 6f 72 0a 09 09 20 2a 20 20 40 70 61 72  uctor... *  @par
72690 61 6d 20 7b 4e 6f 72 6d 61 6c 52 61 6e 67 65 7c  am {NormalRange|
726a0 4f 62 6a 65 63 74 7d 20 5b 72 6f 6f 6d 53 69 7a  Object} [roomSiz
726b0 65 5d 20 43 6f 72 72 65 6c 61 74 65 64 20 74 6f  e] Correlated to
726c0 20 74 68 65 20 64 65 63 61 79 20 74 69 6d 65 2e   the decay time.
726d0 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b   ... *  @param {
726e0 46 72 65 71 75 65 6e 63 79 7d 20 5b 64 61 6d 70  Frequency} [damp
726f0 65 6e 69 6e 67 5d 20 54 68 65 20 63 75 74 6f 66  ening] The cutof
72700 66 20 66 72 65 71 75 65 6e 63 79 20 6f 66 20 61  f frequency of a
72710 20 6c 6f 77 70 61 73 73 20 66 69 6c 74 65 72 20   lowpass filter 
72720 61 73 20 70 61 72 74 20 0a 09 09 20 2a 20 20 20  as part ... *   
72730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66                of
72750 20 74 68 65 20 72 65 76 65 72 62 2e 20 0a 09 09   the reverb. ...
72760 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20   *  @example... 
72770 2a 20 76 61 72 20 66 72 65 65 76 65 72 62 20 3d  * var freeverb =
72780 20 6e 65 77 20 54 6f 6e 65 2e 46 72 65 65 76 65   new Tone.Freeve
72790 72 62 28 29 2e 74 6f 4d 61 73 74 65 72 28 29 3b  rb().toMaster();
727a0 0a 09 09 20 2a 20 66 72 65 65 76 65 72 62 2e 64  ... * freeverb.d
727b0 61 6d 70 65 6e 69 6e 67 2e 76 61 6c 75 65 20 3d  ampening.value =
727c0 20 31 30 30 30 3b 0a 09 09 20 2a 20 2f 2f 72 6f   1000;... * //ro
727d0 75 74 69 6e 67 20 73 79 6e 74 68 20 74 68 72 6f  uting synth thro
727e0 75 67 68 20 74 68 65 20 72 65 76 65 72 62 0a 09  ugh the reverb..
727f0 09 20 2a 20 76 61 72 20 73 79 6e 74 68 20 3d 20  . * var synth = 
72800 6e 65 77 20 54 6f 6e 65 2e 41 4d 53 79 6e 74 68  new Tone.AMSynth
72810 28 29 2e 63 6f 6e 6e 65 63 74 28 66 72 65 65 76  ().connect(freev
72820 65 72 62 29 3b 0a 09 09 20 2a 2f 0a 09 20 20 20  erb);... */..   
72830 20 54 6f 6e 65 2e 46 72 65 65 76 65 72 62 20 3d   Tone.Freeverb =
72840 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
72850 20 20 20 20 20 20 20 20 76 61 72 20 6f 70 74 69          var opti
72860 6f 6e 73 20 3d 20 74 68 69 73 2e 6f 70 74 69 6f  ons = this.optio
72870 6e 73 4f 62 6a 65 63 74 28 61 72 67 75 6d 65 6e  nsObject(argumen
72880 74 73 2c 20 5b 0a 09 20 20 20 20 20 20 20 20 20  ts, [..         
72890 20 20 20 27 72 6f 6f 6d 53 69 7a 65 27 2c 0a 09     'roomSize',..
728a0 20 20 20 20 20 20 20 20 20 20 20 20 27 64 61 6d              'dam
728b0 70 65 6e 69 6e 67 27 0a 09 20 20 20 20 20 20 20  pening'..       
728c0 20 5d 2c 20 54 6f 6e 65 2e 46 72 65 65 76 65 72   ], Tone.Freever
728d0 62 2e 64 65 66 61 75 6c 74 73 29 3b 0a 09 20 20  b.defaults);..  
728e0 20 20 20 20 20 20 54 6f 6e 65 2e 53 74 65 72 65        Tone.Stere
728f0 6f 45 66 66 65 63 74 2e 63 61 6c 6c 28 74 68 69  oEffect.call(thi
72900 73 2c 20 6f 70 74 69 6f 6e 73 29 3b 0a 09 20 20  s, options);..  
72910 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
72920 20 54 68 65 20 72 6f 6f 6d 53 69 7a 65 20 76 61   The roomSize va
72930 6c 75 65 20 62 65 74 77 65 65 6e 2e 20 41 20 6c  lue between. A l
72940 61 72 67 65 72 20 72 6f 6f 6d 53 69 7a 65 0a 09  arger roomSize..
72950 09 09 20 2a 20 20 77 69 6c 6c 20 72 65 73 75 6c  .. *  will resul
72960 74 20 69 6e 20 61 20 6c 6f 6e 67 65 72 20 64 65  t in a longer de
72970 63 61 79 2e 20 0a 09 09 09 20 2a 20 20 40 74 79  cay. .... *  @ty
72980 70 65 20 7b 4e 6f 72 6d 61 6c 52 61 6e 67 65 7d  pe {NormalRange}
72990 0a 09 09 09 20 2a 20 20 40 73 69 67 6e 61 6c 0a  .... *  @signal.
729a0 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
729b0 74 68 69 73 2e 72 6f 6f 6d 53 69 7a 65 20 3d 20  this.roomSize = 
729c0 6e 65 77 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 28  new Tone.Signal(
729d0 6f 70 74 69 6f 6e 73 2e 72 6f 6f 6d 53 69 7a 65  options.roomSize
729e0 2c 20 54 6f 6e 65 2e 54 79 70 65 2e 4e 6f 72 6d  , Tone.Type.Norm
729f0 61 6c 52 61 6e 67 65 29 3b 0a 09 20 20 20 20 20  alRange);..     
72a00 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68     /**.... *  Th
72a10 65 20 61 6d 6f 75 6e 74 20 6f 66 20 64 61 6d 70  e amount of damp
72a20 65 6e 69 6e 67 20 6f 66 20 74 68 65 20 72 65 76  ening of the rev
72a30 65 72 62 65 72 61 6e 74 20 73 69 67 6e 61 6c 2e  erberant signal.
72a40 20 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b   .... *  @type {
72a50 46 72 65 71 75 65 6e 63 79 7d 0a 09 09 09 20 2a  Frequency}.... *
72a60 20 20 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f    @signal.... */
72a70 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 64  ..        this.d
72a80 61 6d 70 65 6e 69 6e 67 20 3d 20 6e 65 77 20 54  ampening = new T
72a90 6f 6e 65 2e 53 69 67 6e 61 6c 28 6f 70 74 69 6f  one.Signal(optio
72aa0 6e 73 2e 64 61 6d 70 65 6e 69 6e 67 2c 20 54 6f  ns.dampening, To
72ab0 6e 65 2e 54 79 70 65 2e 46 72 65 71 75 65 6e 63  ne.Type.Frequenc
72ac0 79 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  y);..        /**
72ad0 0a 09 09 09 20 2a 20 20 74 68 65 20 63 6f 6d 62  .... *  the comb
72ae0 20 66 69 6c 74 65 72 73 0a 09 09 09 20 2a 20 20   filters.... *  
72af0 40 74 79 70 65 20 7b 41 72 72 61 79 7d 0a 09 09  @type {Array}...
72b00 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
72b10 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
72b20 69 73 2e 5f 63 6f 6d 62 46 69 6c 74 65 72 73 20  is._combFilters 
72b30 3d 20 5b 5d 3b 0a 09 20 20 20 20 20 20 20 20 2f  = [];..        /
72b40 2a 2a 0a 09 09 09 20 2a 20 20 74 68 65 20 61 6c  **.... *  the al
72b50 6c 70 61 73 73 20 66 69 6c 74 65 72 73 20 6f 6e  lpass filters on
72b60 20 74 68 65 20 6c 65 66 74 0a 09 09 09 20 2a 20   the left.... * 
72b70 20 40 74 79 70 65 20 7b 41 72 72 61 79 7d 0a 09   @type {Array}..
72b80 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
72b90 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
72ba0 68 69 73 2e 5f 61 6c 6c 70 61 73 73 46 69 6c 74  his._allpassFilt
72bb0 65 72 73 4c 20 3d 20 5b 5d 3b 0a 09 20 20 20 20  ersL = [];..    
72bc0 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 74      /**.... *  t
72bd0 68 65 20 61 6c 6c 70 61 73 73 20 66 69 6c 74 65  he allpass filte
72be0 72 73 20 6f 6e 20 74 68 65 20 72 69 67 68 74 0a  rs on the right.
72bf0 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 41 72  ... *  @type {Ar
72c00 72 61 79 7d 0a 09 09 09 20 2a 20 20 40 70 72 69  ray}.... *  @pri
72c10 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20  vate.... */..   
72c20 20 20 20 20 20 74 68 69 73 2e 5f 61 6c 6c 70 61       this._allpa
72c30 73 73 46 69 6c 74 65 72 73 52 20 3d 20 5b 5d 3b  ssFiltersR = [];
72c40 0a 09 20 20 20 20 20 20 20 20 2f 2f 6d 61 6b 65  ..        //make
72c50 20 74 68 65 20 61 6c 6c 70 61 73 73 20 66 69 6c   the allpass fil
72c60 74 65 72 73 20 6f 6e 20 74 65 68 20 72 69 67 68  ters on teh righ
72c70 74 0a 09 20 20 20 20 20 20 20 20 66 6f 72 20 28  t..        for (
72c80 76 61 72 20 6c 20 3d 20 30 3b 20 6c 20 3c 20 61  var l = 0; l < a
72c90 6c 6c 70 61 73 73 46 69 6c 74 65 72 46 72 65 71  llpassFilterFreq
72ca0 75 65 6e 63 69 65 73 2e 6c 65 6e 67 74 68 3b 20  uencies.length; 
72cb0 6c 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20 20 20  l++) {..        
72cc0 20 20 20 20 76 61 72 20 61 6c 6c 70 61 73 73 4c      var allpassL
72cd0 20 3d 20 74 68 69 73 2e 63 6f 6e 74 65 78 74 2e   = this.context.
72ce0 63 72 65 61 74 65 42 69 71 75 61 64 46 69 6c 74  createBiquadFilt
72cf0 65 72 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20  er();..         
72d00 20 20 20 61 6c 6c 70 61 73 73 4c 2e 74 79 70 65     allpassL.type
72d10 20 3d 20 27 61 6c 6c 70 61 73 73 27 3b 0a 09 20   = 'allpass';.. 
72d20 20 20 20 20 20 20 20 20 20 20 20 61 6c 6c 70 61             allpa
72d30 73 73 4c 2e 66 72 65 71 75 65 6e 63 79 2e 76 61  ssL.frequency.va
72d40 6c 75 65 20 3d 20 61 6c 6c 70 61 73 73 46 69 6c  lue = allpassFil
72d50 74 65 72 46 72 65 71 75 65 6e 63 69 65 73 5b 6c  terFrequencies[l
72d60 5d 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
72d70 74 68 69 73 2e 5f 61 6c 6c 70 61 73 73 46 69 6c  this._allpassFil
72d80 74 65 72 73 4c 2e 70 75 73 68 28 61 6c 6c 70 61  tersL.push(allpa
72d90 73 73 4c 29 3b 0a 09 20 20 20 20 20 20 20 20 7d  ssL);..        }
72da0 0a 09 20 20 20 20 20 20 20 20 2f 2f 6d 61 6b 65  ..        //make
72db0 20 74 68 65 20 61 6c 6c 70 61 73 73 20 66 69 6c   the allpass fil
72dc0 74 65 72 73 20 6f 6e 20 74 68 65 20 6c 65 66 74  ters on the left
72dd0 0a 09 20 20 20 20 20 20 20 20 66 6f 72 20 28 76  ..        for (v
72de0 61 72 20 72 20 3d 20 30 3b 20 72 20 3c 20 61 6c  ar r = 0; r < al
72df0 6c 70 61 73 73 46 69 6c 74 65 72 46 72 65 71 75  lpassFilterFrequ
72e00 65 6e 63 69 65 73 2e 6c 65 6e 67 74 68 3b 20 72  encies.length; r
72e10 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ++) {..         
72e20 20 20 20 76 61 72 20 61 6c 6c 70 61 73 73 52 20     var allpassR 
72e30 3d 20 74 68 69 73 2e 63 6f 6e 74 65 78 74 2e 63  = this.context.c
72e40 72 65 61 74 65 42 69 71 75 61 64 46 69 6c 74 65  reateBiquadFilte
72e50 72 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20  r();..          
72e60 20 20 61 6c 6c 70 61 73 73 52 2e 74 79 70 65 20    allpassR.type 
72e70 3d 20 27 61 6c 6c 70 61 73 73 27 3b 0a 09 20 20  = 'allpass';..  
72e80 20 20 20 20 20 20 20 20 20 20 61 6c 6c 70 61 73            allpas
72e90 73 52 2e 66 72 65 71 75 65 6e 63 79 2e 76 61 6c  sR.frequency.val
72ea0 75 65 20 3d 20 61 6c 6c 70 61 73 73 46 69 6c 74  ue = allpassFilt
72eb0 65 72 46 72 65 71 75 65 6e 63 69 65 73 5b 72 5d  erFrequencies[r]
72ec0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  ;..            t
72ed0 68 69 73 2e 5f 61 6c 6c 70 61 73 73 46 69 6c 74  his._allpassFilt
72ee0 65 72 73 52 2e 70 75 73 68 28 61 6c 6c 70 61 73  ersR.push(allpas
72ef0 73 52 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a  sR);..        }.
72f00 09 20 20 20 20 20 20 20 20 2f 2f 6d 61 6b 65 20  .        //make 
72f10 74 68 65 20 63 6f 6d 62 20 66 69 6c 74 65 72 73  the comb filters
72f20 0a 09 20 20 20 20 20 20 20 20 66 6f 72 20 28 76  ..        for (v
72f30 61 72 20 63 20 3d 20 30 3b 20 63 20 3c 20 63 6f  ar c = 0; c < co
72f40 6d 62 46 69 6c 74 65 72 54 75 6e 69 6e 67 73 2e  mbFilterTunings.
72f50 6c 65 6e 67 74 68 3b 20 63 2b 2b 29 20 7b 0a 09  length; c++) {..
72f60 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20              var 
72f70 6c 66 70 66 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  lfpf = new Tone.
72f80 4c 6f 77 70 61 73 73 43 6f 6d 62 46 69 6c 74 65  LowpassCombFilte
72f90 72 28 63 6f 6d 62 46 69 6c 74 65 72 54 75 6e 69  r(combFilterTuni
72fa0 6e 67 73 5b 63 5d 29 3b 0a 09 20 20 20 20 20 20  ngs[c]);..      
72fb0 20 20 20 20 20 20 69 66 20 28 63 20 3c 20 63 6f        if (c < co
72fc0 6d 62 46 69 6c 74 65 72 54 75 6e 69 6e 67 73 2e  mbFilterTunings.
72fd0 6c 65 6e 67 74 68 20 2f 20 32 29 20 7b 0a 09 20  length / 2) {.. 
72fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
72ff0 68 69 73 2e 65 66 66 65 63 74 53 65 6e 64 4c 2e  his.effectSendL.
73000 63 68 61 69 6e 28 6c 66 70 66 2c 20 74 68 69 73  chain(lfpf, this
73010 2e 5f 61 6c 6c 70 61 73 73 46 69 6c 74 65 72 73  ._allpassFilters
73020 4c 5b 30 5d 29 3b 0a 09 20 20 20 20 20 20 20 20  L[0]);..        
73030 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20      } else {..  
73040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
73050 69 73 2e 65 66 66 65 63 74 53 65 6e 64 52 2e 63  is.effectSendR.c
73060 68 61 69 6e 28 6c 66 70 66 2c 20 74 68 69 73 2e  hain(lfpf, this.
73070 5f 61 6c 6c 70 61 73 73 46 69 6c 74 65 72 73 52  _allpassFiltersR
73080 5b 30 5d 29 3b 0a 09 20 20 20 20 20 20 20 20 20  [0]);..         
73090 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20     }..          
730a0 20 20 74 68 69 73 2e 72 6f 6f 6d 53 69 7a 65 2e    this.roomSize.
730b0 63 6f 6e 6e 65 63 74 28 6c 66 70 66 2e 72 65 73  connect(lfpf.res
730c0 6f 6e 61 6e 63 65 29 3b 0a 09 20 20 20 20 20 20  onance);..      
730d0 20 20 20 20 20 20 74 68 69 73 2e 64 61 6d 70 65        this.dampe
730e0 6e 69 6e 67 2e 63 6f 6e 6e 65 63 74 28 6c 66 70  ning.connect(lfp
730f0 66 2e 64 61 6d 70 65 6e 69 6e 67 29 3b 0a 09 20  f.dampening);.. 
73100 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
73110 5f 63 6f 6d 62 46 69 6c 74 65 72 73 2e 70 75 73  _combFilters.pus
73120 68 28 6c 66 70 66 29 3b 0a 09 20 20 20 20 20 20  h(lfpf);..      
73130 20 20 7d 0a 09 20 20 20 20 20 20 20 20 2f 2f 63    }..        //c
73140 68 61 69 6e 20 74 68 65 20 61 6c 6c 70 61 73 73  hain the allpass
73150 20 66 69 6c 74 65 72 73 20 74 6f 67 65 74 65 68   filters togeteh
73160 72 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  r..        this.
73170 63 6f 6e 6e 65 63 74 53 65 72 69 65 73 2e 61 70  connectSeries.ap
73180 70 6c 79 28 74 68 69 73 2c 20 74 68 69 73 2e 5f  ply(this, this._
73190 61 6c 6c 70 61 73 73 46 69 6c 74 65 72 73 4c 29  allpassFiltersL)
731a0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
731b0 63 6f 6e 6e 65 63 74 53 65 72 69 65 73 2e 61 70  connectSeries.ap
731c0 70 6c 79 28 74 68 69 73 2c 20 74 68 69 73 2e 5f  ply(this, this._
731d0 61 6c 6c 70 61 73 73 46 69 6c 74 65 72 73 52 29  allpassFiltersR)
731e0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
731f0 5f 61 6c 6c 70 61 73 73 46 69 6c 74 65 72 73 4c  _allpassFiltersL
73200 5b 74 68 69 73 2e 5f 61 6c 6c 70 61 73 73 46 69  [this._allpassFi
73210 6c 74 65 72 73 4c 2e 6c 65 6e 67 74 68 20 2d 20  ltersL.length - 
73220 31 5d 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e  1].connect(this.
73230 65 66 66 65 63 74 52 65 74 75 72 6e 4c 29 3b 0a  effectReturnL);.
73240 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 61  .        this._a
73250 6c 6c 70 61 73 73 46 69 6c 74 65 72 73 52 5b 74  llpassFiltersR[t
73260 68 69 73 2e 5f 61 6c 6c 70 61 73 73 46 69 6c 74  his._allpassFilt
73270 65 72 73 52 2e 6c 65 6e 67 74 68 20 2d 20 31 5d  ersR.length - 1]
73280 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e 65 66  .connect(this.ef
73290 66 65 63 74 52 65 74 75 72 6e 52 29 3b 0a 09 20  fectReturnR);.. 
732a0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 72 65 61         this._rea
732b0 64 4f 6e 6c 79 28 5b 0a 09 20 20 20 20 20 20 20  dOnly([..       
732c0 20 20 20 20 20 27 72 6f 6f 6d 53 69 7a 65 27 2c       'roomSize',
732d0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 64  ..            'd
732e0 61 6d 70 65 6e 69 6e 67 27 0a 09 20 20 20 20 20  ampening'..     
732f0 20 20 20 5d 29 3b 0a 09 20 20 20 20 7d 3b 0a 09     ]);..    };..
73300 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28      Tone.extend(
73310 54 6f 6e 65 2e 46 72 65 65 76 65 72 62 2c 20 54  Tone.Freeverb, T
73320 6f 6e 65 2e 53 74 65 72 65 6f 45 66 66 65 63 74  one.StereoEffect
73330 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  );..    /**... *
73340 20 20 40 73 74 61 74 69 63 0a 09 09 20 2a 20 20    @static... *  
73350 40 74 79 70 65 20 7b 4f 62 6a 65 63 74 7d 0a 09  @type {Object}..
73360 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 46  . */..    Tone.F
73370 72 65 65 76 65 72 62 2e 64 65 66 61 75 6c 74 73  reeverb.defaults
73380 20 3d 20 7b 0a 09 20 20 20 20 20 20 20 20 27 72   = {..        'r
73390 6f 6f 6d 53 69 7a 65 27 3a 20 30 2e 37 2c 0a 09  oomSize': 0.7,..
733a0 20 20 20 20 20 20 20 20 27 64 61 6d 70 65 6e 69          'dampeni
733b0 6e 67 27 3a 20 33 30 30 30 0a 09 20 20 20 20 7d  ng': 3000..    }
733c0 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
733d0 20 43 6c 65 61 6e 20 75 70 2e 20 0a 09 09 20 2a   Clean up. ... *
733e0 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65    @returns {Tone
733f0 2e 46 72 65 65 76 65 72 62 7d 20 74 68 69 73 0a  .Freeverb} this.
73400 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
73410 46 72 65 65 76 65 72 62 2e 70 72 6f 74 6f 74 79  Freeverb.prototy
73420 70 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75 6e  pe.dispose = fun
73430 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
73440 20 20 20 20 54 6f 6e 65 2e 53 74 65 72 65 6f 45      Tone.StereoE
73450 66 66 65 63 74 2e 70 72 6f 74 6f 74 79 70 65 2e  ffect.prototype.
73460 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69  dispose.call(thi
73470 73 29 3b 0a 09 20 20 20 20 20 20 20 20 66 6f 72  s);..        for
73480 20 28 76 61 72 20 61 6c 20 3d 20 30 3b 20 61 6c   (var al = 0; al
73490 20 3c 20 74 68 69 73 2e 5f 61 6c 6c 70 61 73 73   < this._allpass
734a0 46 69 6c 74 65 72 73 4c 2e 6c 65 6e 67 74 68 3b  FiltersL.length;
734b0 20 61 6c 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20   al++) {..      
734c0 20 20 20 20 20 20 74 68 69 73 2e 5f 61 6c 6c 70        this._allp
734d0 61 73 73 46 69 6c 74 65 72 73 4c 5b 61 6c 5d 2e  assFiltersL[al].
734e0 64 69 73 63 6f 6e 6e 65 63 74 28 29 3b 0a 09 20  disconnect();.. 
734f0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
73500 5f 61 6c 6c 70 61 73 73 46 69 6c 74 65 72 73 4c  _allpassFiltersL
73510 5b 61 6c 5d 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20  [al] = null;..  
73520 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
73530 20 74 68 69 73 2e 5f 61 6c 6c 70 61 73 73 46 69   this._allpassFi
73540 6c 74 65 72 73 4c 20 3d 20 6e 75 6c 6c 3b 0a 09  ltersL = null;..
73550 20 20 20 20 20 20 20 20 66 6f 72 20 28 76 61 72          for (var
73560 20 61 72 20 3d 20 30 3b 20 61 72 20 3c 20 74 68   ar = 0; ar < th
73570 69 73 2e 5f 61 6c 6c 70 61 73 73 46 69 6c 74 65  is._allpassFilte
73580 72 73 52 2e 6c 65 6e 67 74 68 3b 20 61 72 2b 2b  rsR.length; ar++
73590 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
735a0 20 74 68 69 73 2e 5f 61 6c 6c 70 61 73 73 46 69   this._allpassFi
735b0 6c 74 65 72 73 52 5b 61 72 5d 2e 64 69 73 63 6f  ltersR[ar].disco
735c0 6e 6e 65 63 74 28 29 3b 0a 09 20 20 20 20 20 20  nnect();..      
735d0 20 20 20 20 20 20 74 68 69 73 2e 5f 61 6c 6c 70        this._allp
735e0 61 73 73 46 69 6c 74 65 72 73 52 5b 61 72 5d 20  assFiltersR[ar] 
735f0 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
73600 20 7d 0a 09 20 20 20 20 20 20 20 20 74 68 69 73   }..        this
73610 2e 5f 61 6c 6c 70 61 73 73 46 69 6c 74 65 72 73  ._allpassFilters
73620 52 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20  R = null;..     
73630 20 20 20 66 6f 72 20 28 76 61 72 20 63 66 20 3d     for (var cf =
73640 20 30 3b 20 63 66 20 3c 20 74 68 69 73 2e 5f 63   0; cf < this._c
73650 6f 6d 62 46 69 6c 74 65 72 73 2e 6c 65 6e 67 74  ombFilters.lengt
73660 68 3b 20 63 66 2b 2b 29 20 7b 0a 09 20 20 20 20  h; cf++) {..    
73670 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 63 6f          this._co
73680 6d 62 46 69 6c 74 65 72 73 5b 63 66 5d 2e 64 69  mbFilters[cf].di
73690 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
736a0 20 20 20 20 20 20 74 68 69 73 2e 5f 63 6f 6d 62        this._comb
736b0 46 69 6c 74 65 72 73 5b 63 66 5d 20 3d 20 6e 75  Filters[cf] = nu
736c0 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  ll;..        }..
736d0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 63 6f          this._co
736e0 6d 62 46 69 6c 74 65 72 73 20 3d 20 6e 75 6c 6c  mbFilters = null
736f0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
73700 5f 77 72 69 74 61 62 6c 65 28 5b 0a 09 20 20 20  _writable([..   
73710 20 20 20 20 20 20 20 20 20 27 72 6f 6f 6d 53 69           'roomSi
73720 7a 65 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20  ze',..          
73730 20 20 27 64 61 6d 70 65 6e 69 6e 67 27 0a 09 20    'dampening'.. 
73740 20 20 20 20 20 20 20 5d 29 3b 0a 09 20 20 20 20         ]);..    
73750 20 20 20 20 74 68 69 73 2e 72 6f 6f 6d 53 69 7a      this.roomSiz
73760 65 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20  e.dispose();..  
73770 20 20 20 20 20 20 74 68 69 73 2e 72 6f 6f 6d 53        this.roomS
73780 69 7a 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  ize = null;..   
73790 20 20 20 20 20 74 68 69 73 2e 64 61 6d 70 65 6e       this.dampen
737a0 69 6e 67 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09  ing.dispose();..
737b0 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 61 6d          this.dam
737c0 70 65 6e 69 6e 67 20 3d 20 6e 75 6c 6c 3b 0a 09  pening = null;..
737d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
737e0 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  his;..    };..  
737f0 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 46 72    return Tone.Fr
73800 65 65 76 65 72 62 3b 0a 09 7d 29 3b 0a 09 4d 6f  eeverb;..});..Mo
73810 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28 54  dule(function (T
73820 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09 20 20  one) {..    ..  
73830 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 61 6e 20 61    /**... *  an a
73840 72 72 61 79 20 6f 66 20 74 68 65 20 63 6f 6d 62  rray of the comb
73850 20 66 69 6c 74 65 72 20 64 65 6c 61 79 20 74 69   filter delay ti
73860 6d 65 20 76 61 6c 75 65 73 0a 09 09 20 2a 20 20  me values... *  
73870 40 70 72 69 76 61 74 65 0a 09 09 20 2a 20 20 40  @private... *  @
73880 73 74 61 74 69 63 0a 09 09 20 2a 20 20 40 74 79  static... *  @ty
73890 70 65 20 7b 41 72 72 61 79 7d 0a 09 09 20 2a 2f  pe {Array}... */
738a0 0a 09 20 20 20 20 76 61 72 20 63 6f 6d 62 46 69  ..    var combFi
738b0 6c 74 65 72 44 65 6c 61 79 54 69 6d 65 73 20 3d  lterDelayTimes =
738c0 20 5b 0a 09 20 20 20 20 20 20 20 20 31 36 38 37   [..        1687
738d0 20 2f 20 32 35 30 30 30 2c 0a 09 20 20 20 20 20   / 25000,..     
738e0 20 20 20 31 36 30 31 20 2f 20 32 35 30 30 30 2c     1601 / 25000,
738f0 0a 09 20 20 20 20 20 20 20 20 32 30 35 33 20 2f  ..        2053 /
73900 20 32 35 30 30 30 2c 0a 09 20 20 20 20 20 20 20   25000,..       
73910 20 32 32 35 31 20 2f 20 32 35 30 30 30 0a 09 20   2251 / 25000.. 
73920 20 20 20 5d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09     ];..    /**..
73930 09 20 2a 20 20 74 68 65 20 72 65 73 6f 6e 61 6e  . *  the resonan
73940 63 65 73 20 6f 66 20 65 61 63 68 20 6f 66 20 74  ces of each of t
73950 68 65 20 63 6f 6d 62 20 66 69 6c 74 65 72 73 0a  he comb filters.
73960 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
73970 09 20 2a 20 20 40 73 74 61 74 69 63 0a 09 09 20  . *  @static... 
73980 2a 20 20 40 74 79 70 65 20 7b 41 72 72 61 79 7d  *  @type {Array}
73990 0a 09 09 20 2a 2f 0a 09 20 20 20 20 76 61 72 20  ... */..    var 
739a0 63 6f 6d 62 46 69 6c 74 65 72 52 65 73 6f 6e 61  combFilterResona
739b0 6e 63 65 73 20 3d 20 5b 0a 09 20 20 20 20 20 20  nces = [..      
739c0 20 20 30 2e 37 37 33 2c 0a 09 20 20 20 20 20 20    0.773,..      
739d0 20 20 30 2e 38 30 32 2c 0a 09 20 20 20 20 20 20    0.802,..      
739e0 20 20 30 2e 37 35 33 2c 0a 09 20 20 20 20 20 20    0.753,..      
739f0 20 20 30 2e 37 33 33 0a 09 20 20 20 20 5d 3b 0a    0.733..    ];.
73a00 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 74  .    /**... *  t
73a10 68 65 20 61 6c 6c 70 61 73 73 20 66 69 6c 74 65  he allpass filte
73a20 72 20 66 72 65 71 75 65 6e 63 69 65 73 0a 09 09  r frequencies...
73a30 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 20   *  @private... 
73a40 2a 20 20 40 73 74 61 74 69 63 0a 09 09 20 2a 20  *  @static... * 
73a50 20 40 74 79 70 65 20 7b 41 72 72 61 79 7d 0a 09   @type {Array}..
73a60 09 20 2a 2f 0a 09 20 20 20 20 76 61 72 20 61 6c  . */..    var al
73a70 6c 70 61 73 73 46 69 6c 74 65 72 46 72 65 71 73  lpassFilterFreqs
73a80 20 3d 20 5b 0a 09 20 20 20 20 20 20 20 20 33 34   = [..        34
73a90 37 2c 0a 09 20 20 20 20 20 20 20 20 31 31 33 2c  7,..        113,
73aa0 0a 09 20 20 20 20 20 20 20 20 33 37 0a 09 20 20  ..        37..  
73ab0 20 20 5d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    ];..    /**...
73ac0 20 2a 20 20 40 63 6c 61 73 73 20 54 6f 6e 65 2e   *  @class Tone.
73ad0 4a 43 52 65 76 65 72 62 20 69 73 20 61 20 73 69  JCReverb is a si
73ae0 6d 70 6c 65 20 5b 53 63 68 72 6f 65 64 65 72 20  mple [Schroeder 
73af0 52 65 76 65 72 62 65 72 61 74 6f 72 5d 28 68 74  Reverberator](ht
73b00 74 70 73 3a 2f 2f 63 63 72 6d 61 2e 73 74 61 6e  tps://ccrma.stan
73b10 66 6f 72 64 2e 65 64 75 2f 7e 6a 6f 73 2f 70 61  ford.edu/~jos/pa
73b20 73 70 2f 53 63 68 72 6f 65 64 65 72 5f 52 65 76  sp/Schroeder_Rev
73b30 65 72 62 65 72 61 74 6f 72 73 2e 68 74 6d 6c 29  erberators.html)
73b40 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 74 75  ... *         tu
73b50 6e 65 64 20 62 79 20 4a 6f 68 6e 20 43 68 6f 77  ned by John Chow
73b60 6e 69 6e 67 20 69 6e 20 31 39 37 30 2e 0a 09 09  ning in 1970....
73b70 20 2a 20 20 20 20 20 20 20 20 20 49 74 20 69 73   *         It is
73b80 20 6d 61 64 65 20 75 70 20 6f 66 20 74 68 72 65   made up of thre
73b90 65 20 61 6c 6c 70 61 73 73 20 66 69 6c 74 65 72  e allpass filter
73ba0 73 20 61 6e 64 20 66 6f 75 72 20 54 6f 6e 65 2e  s and four Tone.
73bb0 46 65 65 64 62 61 63 6b 43 6f 6d 62 46 69 6c 74  FeedbackCombFilt
73bc0 65 72 2e 20 0a 09 09 20 2a 20 20 20 20 20 20 20  er. ... *       
73bd0 20 20 0a 09 09 20 2a 0a 09 09 20 2a 20 20 40 65    ... *... *  @e
73be0 78 74 65 6e 64 73 20 7b 54 6f 6e 65 2e 45 66 66  xtends {Tone.Eff
73bf0 65 63 74 7d 0a 09 09 20 2a 20 20 40 63 6f 6e 73  ect}... *  @cons
73c00 74 72 75 63 74 6f 72 0a 09 09 20 2a 20 20 40 70  tructor... *  @p
73c10 61 72 61 6d 20 7b 4e 6f 72 6d 61 6c 52 61 6e 67  aram {NormalRang
73c20 65 7c 4f 62 6a 65 63 74 7d 20 5b 72 6f 6f 6d 53  e|Object} [roomS
73c30 69 7a 65 5d 20 43 6f 6f 72 65 6c 61 74 65 73 20  ize] Coorelates 
73c40 74 6f 20 74 68 65 20 64 65 63 61 79 20 74 69 6d  to the decay tim
73c50 65 2e 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c  e.... *  @exampl
73c60 65 0a 09 09 20 2a 20 76 61 72 20 72 65 76 65 72  e... * var rever
73c70 62 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4a 43 52  b = new Tone.JCR
73c80 65 76 65 72 62 28 30 2e 34 29 2e 63 6f 6e 6e 65  everb(0.4).conne
73c90 63 74 28 54 6f 6e 65 2e 4d 61 73 74 65 72 29 3b  ct(Tone.Master);
73ca0 0a 09 09 20 2a 20 76 61 72 20 64 65 6c 61 79 20  ... * var delay 
73cb0 3d 20 6e 65 77 20 54 6f 6e 65 2e 46 65 65 64 62  = new Tone.Feedb
73cc0 61 63 6b 44 65 6c 61 79 28 30 2e 35 29 3b 20 0a  ackDelay(0.5); .
73cd0 09 09 20 2a 20 2f 2f 63 6f 6e 6e 65 63 74 69 6e  .. * //connectin
73ce0 67 20 74 68 65 20 73 79 6e 74 68 20 74 6f 20 72  g the synth to r
73cf0 65 76 65 72 62 20 74 68 72 6f 75 67 68 20 64 65  everb through de
73d00 6c 61 79 0a 09 09 20 2a 20 76 61 72 20 73 79 6e  lay... * var syn
73d10 74 68 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 44 75  th = new Tone.Du
73d20 6f 53 79 6e 74 68 28 29 2e 63 68 61 69 6e 28 64  oSynth().chain(d
73d30 65 6c 61 79 2c 20 72 65 76 65 72 62 29 3b 0a 09  elay, reverb);..
73d40 09 20 2a 20 73 79 6e 74 68 2e 74 72 69 67 67 65  . * synth.trigge
73d50 72 41 74 74 61 63 6b 52 65 6c 65 61 73 65 28 22  rAttackRelease("
73d60 41 34 22 2c 22 38 6e 22 29 3b 0a 09 09 20 2a 2f  A4","8n");... */
73d70 0a 09 20 20 20 20 54 6f 6e 65 2e 4a 43 52 65 76  ..    Tone.JCRev
73d80 65 72 62 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  erb = function (
73d90 29 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72  ) {..        var
73da0 20 6f 70 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e   options = this.
73db0 6f 70 74 69 6f 6e 73 4f 62 6a 65 63 74 28 61 72  optionsObject(ar
73dc0 67 75 6d 65 6e 74 73 2c 20 5b 27 72 6f 6f 6d 53  guments, ['roomS
73dd0 69 7a 65 27 5d 2c 20 54 6f 6e 65 2e 4a 43 52 65  ize'], Tone.JCRe
73de0 76 65 72 62 2e 64 65 66 61 75 6c 74 73 29 3b 0a  verb.defaults);.
73df0 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 53 74  .        Tone.St
73e00 65 72 65 6f 45 66 66 65 63 74 2e 63 61 6c 6c 28  ereoEffect.call(
73e10 74 68 69 73 2c 20 6f 70 74 69 6f 6e 73 29 3b 0a  this, options);.
73e20 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
73e30 20 2a 20 20 72 6f 6f 6d 20 73 69 7a 65 20 63 6f   *  room size co
73e40 6e 74 72 6f 6c 20 76 61 6c 75 65 73 20 62 65 74  ntrol values bet
73e50 77 65 65 6e 20 5b 30 2c 31 5d 0a 09 09 09 20 2a  ween [0,1].... *
73e60 20 20 40 74 79 70 65 20 7b 4e 6f 72 6d 61 6c 52    @type {NormalR
73e70 61 6e 67 65 7d 0a 09 09 09 20 2a 20 20 40 73 69  ange}.... *  @si
73e80 67 6e 61 6c 0a 09 09 09 20 2a 2f 0a 09 20 20 20  gnal.... */..   
73e90 20 20 20 20 20 74 68 69 73 2e 72 6f 6f 6d 53 69       this.roomSi
73ea0 7a 65 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53 69  ze = new Tone.Si
73eb0 67 6e 61 6c 28 6f 70 74 69 6f 6e 73 2e 72 6f 6f  gnal(options.roo
73ec0 6d 53 69 7a 65 2c 20 54 6f 6e 65 2e 54 79 70 65  mSize, Tone.Type
73ed0 2e 4e 6f 72 6d 61 6c 52 61 6e 67 65 29 3b 0a 09  .NormalRange);..
73ee0 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
73ef0 2a 20 20 73 63 61 6c 65 20 74 68 65 20 72 6f 6f  *  scale the roo
73f00 6d 20 73 69 7a 65 0a 09 09 09 20 2a 20 20 40 74  m size.... *  @t
73f10 79 70 65 20 7b 54 6f 6e 65 2e 53 63 61 6c 65 7d  ype {Tone.Scale}
73f20 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  .... *  @private
73f30 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
73f40 20 74 68 69 73 2e 5f 73 63 61 6c 65 52 6f 6f 6d   this._scaleRoom
73f50 53 69 7a 65 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  Size = new Tone.
73f60 53 63 61 6c 65 28 2d 30 2e 37 33 33 2c 20 30 2e  Scale(-0.733, 0.
73f70 31 39 37 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  197);..        /
73f80 2a 2a 0a 09 09 09 20 2a 20 20 61 20 73 65 72 69  **.... *  a seri
73f90 65 73 20 6f 66 20 61 6c 6c 70 61 73 73 20 66 69  es of allpass fi
73fa0 6c 74 65 72 73 0a 09 09 09 20 2a 20 20 40 74 79  lters.... *  @ty
73fb0 70 65 20 7b 41 72 72 61 79 7d 0a 09 09 09 20 2a  pe {Array}.... *
73fc0 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a    @private.... *
73fd0 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
73fe0 5f 61 6c 6c 70 61 73 73 46 69 6c 74 65 72 73 20  _allpassFilters 
73ff0 3d 20 5b 5d 3b 0a 09 20 20 20 20 20 20 20 20 2f  = [];..        /
74000 2a 2a 0a 09 09 09 20 2a 20 20 70 61 72 61 6c 6c  **.... *  parall
74010 65 6c 20 66 65 65 64 62 61 63 6b 20 63 6f 6d 62  el feedback comb
74020 20 66 69 6c 74 65 72 73 0a 09 09 09 20 2a 20 20   filters.... *  
74030 40 74 79 70 65 20 7b 41 72 72 61 79 7d 0a 09 09  @type {Array}...
74040 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
74050 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
74060 69 73 2e 5f 66 65 65 64 62 61 63 6b 43 6f 6d 62  is._feedbackComb
74070 46 69 6c 74 65 72 73 20 3d 20 5b 5d 3b 0a 09 20  Filters = [];.. 
74080 20 20 20 20 20 20 20 2f 2f 6d 61 6b 65 20 74 68         //make th
74090 65 20 61 6c 6c 70 61 73 73 20 66 69 6c 74 65 72  e allpass filter
740a0 73 0a 09 20 20 20 20 20 20 20 20 66 6f 72 20 28  s..        for (
740b0 76 61 72 20 61 66 20 3d 20 30 3b 20 61 66 20 3c  var af = 0; af <
740c0 20 61 6c 6c 70 61 73 73 46 69 6c 74 65 72 46 72   allpassFilterFr
740d0 65 71 73 2e 6c 65 6e 67 74 68 3b 20 61 66 2b 2b  eqs.length; af++
740e0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
740f0 20 76 61 72 20 61 6c 6c 70 61 73 73 20 3d 20 74   var allpass = t
74100 68 69 73 2e 63 6f 6e 74 65 78 74 2e 63 72 65 61  his.context.crea
74110 74 65 42 69 71 75 61 64 46 69 6c 74 65 72 28 29  teBiquadFilter()
74120 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 61  ;..            a
74130 6c 6c 70 61 73 73 2e 74 79 70 65 20 3d 20 27 61  llpass.type = 'a
74140 6c 6c 70 61 73 73 27 3b 0a 09 20 20 20 20 20 20  llpass';..      
74150 20 20 20 20 20 20 61 6c 6c 70 61 73 73 2e 66 72        allpass.fr
74160 65 71 75 65 6e 63 79 2e 76 61 6c 75 65 20 3d 20  equency.value = 
74170 61 6c 6c 70 61 73 73 46 69 6c 74 65 72 46 72 65  allpassFilterFre
74180 71 73 5b 61 66 5d 3b 0a 09 20 20 20 20 20 20 20  qs[af];..       
74190 20 20 20 20 20 74 68 69 73 2e 5f 61 6c 6c 70 61       this._allpa
741a0 73 73 46 69 6c 74 65 72 73 2e 70 75 73 68 28 61  ssFilters.push(a
741b0 6c 6c 70 61 73 73 29 3b 0a 09 20 20 20 20 20 20  llpass);..      
741c0 20 20 7d 0a 09 20 20 20 20 20 20 20 20 2f 2f 61    }..        //a
741d0 6e 64 20 74 68 65 20 63 6f 6d 62 20 66 69 6c 74  nd the comb filt
741e0 65 72 73 0a 09 20 20 20 20 20 20 20 20 66 6f 72  ers..        for
741f0 20 28 76 61 72 20 63 66 20 3d 20 30 3b 20 63 66   (var cf = 0; cf
74200 20 3c 20 63 6f 6d 62 46 69 6c 74 65 72 44 65 6c   < combFilterDel
74210 61 79 54 69 6d 65 73 2e 6c 65 6e 67 74 68 3b 20  ayTimes.length; 
74220 63 66 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20 20  cf++) {..       
74230 20 20 20 20 20 76 61 72 20 66 62 63 66 20 3d 20       var fbcf = 
74240 6e 65 77 20 54 6f 6e 65 2e 46 65 65 64 62 61 63  new Tone.Feedbac
74250 6b 43 6f 6d 62 46 69 6c 74 65 72 28 63 6f 6d 62  kCombFilter(comb
74260 46 69 6c 74 65 72 44 65 6c 61 79 54 69 6d 65 73  FilterDelayTimes
74270 5b 63 66 5d 2c 20 30 2e 31 29 3b 0a 09 20 20 20  [cf], 0.1);..   
74280 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73           this._s
74290 63 61 6c 65 52 6f 6f 6d 53 69 7a 65 2e 63 6f 6e  caleRoomSize.con
742a0 6e 65 63 74 28 66 62 63 66 2e 72 65 73 6f 6e 61  nect(fbcf.resona
742b0 6e 63 65 29 3b 0a 09 20 20 20 20 20 20 20 20 20  nce);..         
742c0 20 20 20 66 62 63 66 2e 72 65 73 6f 6e 61 6e 63     fbcf.resonanc
742d0 65 2e 76 61 6c 75 65 20 3d 20 63 6f 6d 62 46 69  e.value = combFi
742e0 6c 74 65 72 52 65 73 6f 6e 61 6e 63 65 73 5b 63  lterResonances[c
742f0 66 5d 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  f];..           
74300 20 74 68 69 73 2e 5f 61 6c 6c 70 61 73 73 46 69   this._allpassFi
74310 6c 74 65 72 73 5b 74 68 69 73 2e 5f 61 6c 6c 70  lters[this._allp
74320 61 73 73 46 69 6c 74 65 72 73 2e 6c 65 6e 67 74  assFilters.lengt
74330 68 20 2d 20 31 5d 2e 63 6f 6e 6e 65 63 74 28 66  h - 1].connect(f
74340 62 63 66 29 3b 0a 09 20 20 20 20 20 20 20 20 20  bcf);..         
74350 20 20 20 69 66 20 28 63 66 20 3c 20 63 6f 6d 62     if (cf < comb
74360 46 69 6c 74 65 72 44 65 6c 61 79 54 69 6d 65 73  FilterDelayTimes
74370 2e 6c 65 6e 67 74 68 20 2f 20 32 29 20 7b 0a 09  .length / 2) {..
74380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74390 66 62 63 66 2e 63 6f 6e 6e 65 63 74 28 74 68 69  fbcf.connect(thi
743a0 73 2e 65 66 66 65 63 74 52 65 74 75 72 6e 4c 29  s.effectReturnL)
743b0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
743c0 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20   else {..       
743d0 20 20 20 20 20 20 20 20 20 66 62 63 66 2e 63 6f           fbcf.co
743e0 6e 6e 65 63 74 28 74 68 69 73 2e 65 66 66 65 63  nnect(this.effec
743f0 74 52 65 74 75 72 6e 52 29 3b 0a 09 20 20 20 20  tReturnR);..    
74400 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
74410 20 20 20 20 20 20 20 74 68 69 73 2e 5f 66 65 65         this._fee
74420 64 62 61 63 6b 43 6f 6d 62 46 69 6c 74 65 72 73  dbackCombFilters
74430 2e 70 75 73 68 28 66 62 63 66 29 3b 0a 09 20 20  .push(fbcf);..  
74440 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
74450 20 2f 2f 63 68 61 69 6e 20 74 68 65 20 61 6c 6c   //chain the all
74460 70 61 73 73 20 66 69 6c 74 65 72 73 20 74 6f 67  pass filters tog
74470 65 74 68 65 72 0a 09 20 20 20 20 20 20 20 20 74  ether..        t
74480 68 69 73 2e 72 6f 6f 6d 53 69 7a 65 2e 63 6f 6e  his.roomSize.con
74490 6e 65 63 74 28 74 68 69 73 2e 5f 73 63 61 6c 65  nect(this._scale
744a0 52 6f 6f 6d 53 69 7a 65 29 3b 0a 09 20 20 20 20  RoomSize);..    
744b0 20 20 20 20 74 68 69 73 2e 63 6f 6e 6e 65 63 74      this.connect
744c0 53 65 72 69 65 73 2e 61 70 70 6c 79 28 74 68 69  Series.apply(thi
744d0 73 2c 20 74 68 69 73 2e 5f 61 6c 6c 70 61 73 73  s, this._allpass
744e0 46 69 6c 74 65 72 73 29 3b 0a 09 20 20 20 20 20  Filters);..     
744f0 20 20 20 74 68 69 73 2e 65 66 66 65 63 74 53 65     this.effectSe
74500 6e 64 4c 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73  ndL.connect(this
74510 2e 5f 61 6c 6c 70 61 73 73 46 69 6c 74 65 72 73  ._allpassFilters
74520 5b 30 5d 29 3b 0a 09 20 20 20 20 20 20 20 20 74  [0]);..        t
74530 68 69 73 2e 65 66 66 65 63 74 53 65 6e 64 52 2e  his.effectSendR.
74540 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e 5f 61 6c  connect(this._al
74550 6c 70 61 73 73 46 69 6c 74 65 72 73 5b 30 5d 29  lpassFilters[0])
74560 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
74570 5f 72 65 61 64 4f 6e 6c 79 28 5b 27 72 6f 6f 6d  _readOnly(['room
74580 53 69 7a 65 27 5d 29 3b 0a 09 20 20 20 20 7d 3b  Size']);..    };
74590 0a 09 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e  ..    Tone.exten
745a0 64 28 54 6f 6e 65 2e 4a 43 52 65 76 65 72 62 2c  d(Tone.JCReverb,
745b0 20 54 6f 6e 65 2e 53 74 65 72 65 6f 45 66 66 65   Tone.StereoEffe
745c0 63 74 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09  ct);..    /**...
745d0 20 2a 20 20 74 68 65 20 64 65 66 61 75 6c 74 20   *  the default 
745e0 76 61 6c 75 65 73 0a 09 09 20 2a 20 20 40 73 74  values... *  @st
745f0 61 74 69 63 0a 09 09 20 2a 20 20 40 63 6f 6e 73  atic... *  @cons
74600 74 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4f  t... *  @type {O
74610 62 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a 09 20 20  bject}... */..  
74620 20 20 54 6f 6e 65 2e 4a 43 52 65 76 65 72 62 2e    Tone.JCReverb.
74630 64 65 66 61 75 6c 74 73 20 3d 20 7b 20 27 72 6f  defaults = { 'ro
74640 6f 6d 53 69 7a 65 27 3a 20 30 2e 35 20 7d 3b 0a  omSize': 0.5 };.
74650 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43  .    /**... *  C
74660 6c 65 61 6e 20 75 70 2e 20 0a 09 09 20 2a 20 20  lean up. ... *  
74670 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 4a  @returns {Tone.J
74680 43 52 65 76 65 72 62 7d 20 74 68 69 73 0a 09 09  CReverb} this...
74690 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4a 43   */..    Tone.JC
746a0 52 65 76 65 72 62 2e 70 72 6f 74 6f 74 79 70 65  Reverb.prototype
746b0 2e 64 69 73 70 6f 73 65 20 3d 20 66 75 6e 63 74  .dispose = funct
746c0 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
746d0 20 20 54 6f 6e 65 2e 53 74 65 72 65 6f 45 66 66    Tone.StereoEff
746e0 65 63 74 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69  ect.prototype.di
746f0 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69 73 29  spose.call(this)
74700 3b 0a 09 20 20 20 20 20 20 20 20 66 6f 72 20 28  ;..        for (
74710 76 61 72 20 61 70 66 20 3d 20 30 3b 20 61 70 66  var apf = 0; apf
74720 20 3c 20 74 68 69 73 2e 5f 61 6c 6c 70 61 73 73   < this._allpass
74730 46 69 6c 74 65 72 73 2e 6c 65 6e 67 74 68 3b 20  Filters.length; 
74740 61 70 66 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20  apf++) {..      
74750 20 20 20 20 20 20 74 68 69 73 2e 5f 61 6c 6c 70        this._allp
74760 61 73 73 46 69 6c 74 65 72 73 5b 61 70 66 5d 2e  assFilters[apf].
74770 64 69 73 63 6f 6e 6e 65 63 74 28 29 3b 0a 09 20  disconnect();.. 
74780 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
74790 5f 61 6c 6c 70 61 73 73 46 69 6c 74 65 72 73 5b  _allpassFilters[
747a0 61 70 66 5d 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20  apf] = null;..  
747b0 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
747c0 20 74 68 69 73 2e 5f 61 6c 6c 70 61 73 73 46 69   this._allpassFi
747d0 6c 74 65 72 73 20 3d 20 6e 75 6c 6c 3b 0a 09 20  lters = null;.. 
747e0 20 20 20 20 20 20 20 66 6f 72 20 28 76 61 72 20         for (var 
747f0 66 62 63 66 20 3d 20 30 3b 20 66 62 63 66 20 3c  fbcf = 0; fbcf <
74800 20 74 68 69 73 2e 5f 66 65 65 64 62 61 63 6b 43   this._feedbackC
74810 6f 6d 62 46 69 6c 74 65 72 73 2e 6c 65 6e 67 74  ombFilters.lengt
74820 68 3b 20 66 62 63 66 2b 2b 29 20 7b 0a 09 20 20  h; fbcf++) {..  
74830 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
74840 66 65 65 64 62 61 63 6b 43 6f 6d 62 46 69 6c 74  feedbackCombFilt
74850 65 72 73 5b 66 62 63 66 5d 2e 64 69 73 70 6f 73  ers[fbcf].dispos
74860 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20  e();..          
74870 20 20 74 68 69 73 2e 5f 66 65 65 64 62 61 63 6b    this._feedback
74880 43 6f 6d 62 46 69 6c 74 65 72 73 5b 66 62 63 66  CombFilters[fbcf
74890 5d 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20  ] = null;..     
748a0 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 74 68     }..        th
748b0 69 73 2e 5f 66 65 65 64 62 61 63 6b 43 6f 6d 62  is._feedbackComb
748c0 46 69 6c 74 65 72 73 20 3d 20 6e 75 6c 6c 3b 0a  Filters = null;.
748d0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 77  .        this._w
748e0 72 69 74 61 62 6c 65 28 5b 27 72 6f 6f 6d 53 69  ritable(['roomSi
748f0 7a 65 27 5d 29 3b 0a 09 20 20 20 20 20 20 20 20  ze']);..        
74900 74 68 69 73 2e 72 6f 6f 6d 53 69 7a 65 2e 64 69  this.roomSize.di
74910 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
74920 20 20 74 68 69 73 2e 72 6f 6f 6d 53 69 7a 65 20    this.roomSize 
74930 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
74940 20 74 68 69 73 2e 5f 73 63 61 6c 65 52 6f 6f 6d   this._scaleRoom
74950 53 69 7a 65 2e 64 69 73 70 6f 73 65 28 29 3b 0a  Size.dispose();.
74960 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73  .        this._s
74970 63 61 6c 65 52 6f 6f 6d 53 69 7a 65 20 3d 20 6e  caleRoomSize = n
74980 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 72 65  ull;..        re
74990 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20  turn this;..    
749a0 7d 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54  };..    return T
749b0 6f 6e 65 2e 4a 43 52 65 76 65 72 62 3b 0a 09 7d  one.JCReverb;..}
749c0 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74  );..Module(funct
749d0 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20  ion (Tone) {..  
749e0 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a    ..    /**... *
749f0 20 20 40 63 6c 61 73 73 20 4d 69 64 2f 53 69 64    @class Mid/Sid
74a00 65 20 70 72 6f 63 65 73 73 69 6e 67 20 73 65 70  e processing sep
74a10 61 72 61 74 65 73 20 74 68 65 20 74 68 65 20 27  arates the the '
74a20 6d 69 64 27 20 73 69 67 6e 61 6c 20 0a 09 09 20  mid' signal ... 
74a30 2a 20 20 20 20 20 20 20 20 20 28 77 68 69 63 68  *         (which
74a40 20 63 6f 6d 65 73 20 6f 75 74 20 6f 66 20 62 6f   comes out of bo
74a50 74 68 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20  th the left and 
74a60 74 68 65 20 72 69 67 68 74 20 63 68 61 6e 6e 65  the right channe
74a70 6c 29 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20  l) ... *        
74a80 20 61 6e 64 20 74 68 65 20 27 73 69 64 65 27 20   and the 'side' 
74a90 28 77 68 69 63 68 20 6f 6e 6c 79 20 63 6f 6d 65  (which only come
74aa0 73 20 6f 75 74 20 6f 66 20 74 68 65 20 74 68 65  s out of the the
74ab0 20 73 69 64 65 20 63 68 61 6e 6e 65 6c 73 29 20   side channels) 
74ac0 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 61 6e  ... *         an
74ad0 64 20 65 66 66 65 63 74 73 20 74 68 65 6d 20 73  d effects them s
74ae0 65 70 61 72 61 74 65 6c 79 20 62 65 66 6f 72 65  eparately before
74af0 20 62 65 69 6e 67 20 72 65 63 6f 6d 62 69 6e 65   being recombine
74b00 64 2e 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  d.... *         
74b10 41 70 70 6c 69 65 73 20 61 20 4d 69 64 2f 53 69  Applies a Mid/Si
74b20 64 65 20 73 65 70 65 72 61 74 69 6f 6e 20 61 6e  de seperation an
74b30 64 20 72 65 63 6f 6d 62 69 6e 61 74 69 6f 6e 2e  d recombination.
74b40 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 41 6c  ... *         Al
74b50 67 6f 72 69 74 68 6d 20 66 6f 75 6e 64 20 69 6e  gorithm found in
74b60 20 5b 6b 76 72 61 75 64 69 6f 20 66 6f 72 75 6d   [kvraudio forum
74b70 73 5d 28 68 74 74 70 3a 2f 2f 77 77 77 2e 6b 76  s](http://www.kv
74b80 72 61 75 64 69 6f 2e 63 6f 6d 2f 66 6f 72 75 6d  raudio.com/forum
74b90 2f 76 69 65 77 74 6f 70 69 63 2e 70 68 70 3f 74  /viewtopic.php?t
74ba0 3d 32 31 32 35 38 37 29 2e 0a 09 09 20 2a 20 20  =212587).... *  
74bb0 20 20 20 20 20 20 20 3c 62 72 3e 3c 62 72 3e 0a         <br><br>.
74bc0 09 09 20 2a 20 20 20 20 20 20 20 20 20 54 68 69  .. *         Thi
74bd0 73 20 69 73 20 61 20 62 61 73 65 2d 63 6c 61 73  s is a base-clas
74be0 73 20 66 6f 72 20 4d 69 64 2f 53 69 64 65 20 45  s for Mid/Side E
74bf0 66 66 65 63 74 73 2e 20 0a 09 09 20 2a 0a 09 09  ffects. ... *...
74c00 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f   *  @extends {To
74c10 6e 65 2e 45 66 66 65 63 74 7d 0a 09 09 20 2a 20  ne.Effect}... * 
74c20 20 40 63 6f 6e 73 74 72 75 63 74 6f 72 0a 09 09   @constructor...
74c30 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4d 69   */..    Tone.Mi
74c40 64 53 69 64 65 45 66 66 65 63 74 20 3d 20 66 75  dSideEffect = fu
74c50 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
74c60 20 20 20 20 20 54 6f 6e 65 2e 45 66 66 65 63 74       Tone.Effect
74c70 2e 61 70 70 6c 79 28 74 68 69 73 2c 20 61 72 67  .apply(this, arg
74c80 75 6d 65 6e 74 73 29 3b 0a 09 20 20 20 20 20 20  uments);..      
74c90 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65    /**.... *  The
74ca0 20 6d 69 64 2f 73 69 64 65 20 73 70 6c 69 74 0a   mid/side split.
74cb0 09 09 09 20 2a 20 20 40 74 79 70 65 20 20 7b 54  ... *  @type  {T
74cc0 6f 6e 65 2e 4d 69 64 53 69 64 65 53 70 6c 69 74  one.MidSideSplit
74cd0 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  }.... *  @privat
74ce0 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
74cf0 20 20 74 68 69 73 2e 5f 6d 69 64 53 69 64 65 53    this._midSideS
74d00 70 6c 69 74 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  plit = new Tone.
74d10 4d 69 64 53 69 64 65 53 70 6c 69 74 28 29 3b 0a  MidSideSplit();.
74d20 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
74d30 20 2a 20 20 54 68 65 20 6d 69 64 2f 73 69 64 65   *  The mid/side
74d40 20 6d 65 72 67 65 0a 09 09 09 20 2a 20 20 40 74   merge.... *  @t
74d50 79 70 65 20 20 7b 54 6f 6e 65 2e 4d 69 64 53 69  ype  {Tone.MidSi
74d60 64 65 4d 65 72 67 65 7d 0a 09 09 09 20 2a 20 20  deMerge}.... *  
74d70 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a  @private.... */.
74d80 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d  .        this._m
74d90 69 64 53 69 64 65 4d 65 72 67 65 20 3d 20 6e 65  idSideMerge = ne
74da0 77 20 54 6f 6e 65 2e 4d 69 64 53 69 64 65 4d 65  w Tone.MidSideMe
74db0 72 67 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20  rge();..        
74dc0 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 6d  /**.... *  The m
74dd0 69 64 20 73 65 6e 64 2e 20 43 6f 6e 6e 65 63 74  id send. Connect
74de0 20 74 6f 20 6d 69 64 20 70 72 6f 63 65 73 73 69   to mid processi
74df0 6e 67 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  ng.... *  @type 
74e00 7b 54 6f 6e 65 2e 45 78 70 72 7d 0a 09 09 09 20  {Tone.Expr}.... 
74e10 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20  *  @private.... 
74e20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
74e30 2e 6d 69 64 53 65 6e 64 20 3d 20 74 68 69 73 2e  .midSend = this.
74e40 5f 6d 69 64 53 69 64 65 53 70 6c 69 74 2e 6d 69  _midSideSplit.mi
74e50 64 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  d;..        /**.
74e60 09 09 09 20 2a 20 20 54 68 65 20 73 69 64 65 20  ... *  The side 
74e70 73 65 6e 64 2e 20 43 6f 6e 6e 65 63 74 20 74 6f  send. Connect to
74e80 20 73 69 64 65 20 70 72 6f 63 65 73 73 69 6e 67   side processing
74e90 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54  .... *  @type {T
74ea0 6f 6e 65 2e 45 78 70 72 7d 0a 09 09 09 20 2a 20  one.Expr}.... * 
74eb0 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f   @private.... */
74ec0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 73  ..        this.s
74ed0 69 64 65 53 65 6e 64 20 3d 20 74 68 69 73 2e 5f  ideSend = this._
74ee0 6d 69 64 53 69 64 65 53 70 6c 69 74 2e 73 69 64  midSideSplit.sid
74ef0 65 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  e;..        /**.
74f00 09 09 09 20 2a 20 20 54 68 65 20 6d 69 64 20 72  ... *  The mid r
74f10 65 74 75 72 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e  eturn connection
74f20 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 47  .... *  @type {G
74f30 61 69 6e 4e 6f 64 65 7d 0a 09 09 09 20 2a 20 20  ainNode}.... *  
74f40 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a  @private.... */.
74f50 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 6d 69  .        this.mi
74f60 64 52 65 74 75 72 6e 20 3d 20 74 68 69 73 2e 5f  dReturn = this._
74f70 6d 69 64 53 69 64 65 4d 65 72 67 65 2e 6d 69 64  midSideMerge.mid
74f80 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
74f90 09 09 20 2a 20 20 54 68 65 20 73 69 64 65 20 72  .. *  The side r
74fa0 65 74 75 72 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e  eturn connection
74fb0 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 47  .... *  @type {G
74fc0 61 69 6e 4e 6f 64 65 7d 0a 09 09 09 20 2a 20 20  ainNode}.... *  
74fd0 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a  @private.... */.
74fe0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 69  .        this.si
74ff0 64 65 52 65 74 75 72 6e 20 3d 20 74 68 69 73 2e  deReturn = this.
75000 5f 6d 69 64 53 69 64 65 4d 65 72 67 65 2e 73 69  _midSideMerge.si
75010 64 65 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 74  de;..        //t
75020 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 0a 09  he connections..
75030 20 20 20 20 20 20 20 20 74 68 69 73 2e 65 66 66          this.eff
75040 65 63 74 53 65 6e 64 2e 63 6f 6e 6e 65 63 74 28  ectSend.connect(
75050 74 68 69 73 2e 5f 6d 69 64 53 69 64 65 53 70 6c  this._midSideSpl
75060 69 74 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  it);..        th
75070 69 73 2e 5f 6d 69 64 53 69 64 65 4d 65 72 67 65  is._midSideMerge
75080 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e 65 66  .connect(this.ef
75090 66 65 63 74 52 65 74 75 72 6e 29 3b 0a 09 20 20  fectReturn);..  
750a0 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65 2e 65    };..    Tone.e
750b0 78 74 65 6e 64 28 54 6f 6e 65 2e 4d 69 64 53 69  xtend(Tone.MidSi
750c0 64 65 45 66 66 65 63 74 2c 20 54 6f 6e 65 2e 45  deEffect, Tone.E
750d0 66 66 65 63 74 29 3b 0a 09 20 20 20 20 2f 2a 2a  ffect);..    /**
750e0 0a 09 09 20 2a 20 20 43 6c 65 61 6e 20 75 70 2e  ... *  Clean up.
750f0 20 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73   ... *  @returns
75100 20 7b 54 6f 6e 65 2e 4d 69 64 53 69 64 65 45 66   {Tone.MidSideEf
75110 66 65 63 74 7d 20 74 68 69 73 0a 09 09 20 2a 2f  fect} this... */
75120 0a 09 20 20 20 20 54 6f 6e 65 2e 4d 69 64 53 69  ..    Tone.MidSi
75130 64 65 45 66 66 65 63 74 2e 70 72 6f 74 6f 74 79  deEffect.prototy
75140 70 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75 6e  pe.dispose = fun
75150 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
75160 20 20 20 20 54 6f 6e 65 2e 45 66 66 65 63 74 2e      Tone.Effect.
75170 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73  prototype.dispos
75180 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20  e.call(this);.. 
75190 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 69 64         this._mid
751a0 53 69 64 65 53 70 6c 69 74 2e 64 69 73 70 6f 73  SideSplit.dispos
751b0 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  e();..        th
751c0 69 73 2e 5f 6d 69 64 53 69 64 65 53 70 6c 69 74  is._midSideSplit
751d0 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
751e0 20 20 74 68 69 73 2e 5f 6d 69 64 53 69 64 65 4d    this._midSideM
751f0 65 72 67 65 2e 64 69 73 70 6f 73 65 28 29 3b 0a  erge.dispose();.
75200 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d  .        this._m
75210 69 64 53 69 64 65 4d 65 72 67 65 20 3d 20 6e 75  idSideMerge = nu
75220 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ll;..        thi
75230 73 2e 6d 69 64 53 65 6e 64 20 3d 20 6e 75 6c 6c  s.midSend = null
75240 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
75250 73 69 64 65 53 65 6e 64 20 3d 20 6e 75 6c 6c 3b  sideSend = null;
75260 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 6d  ..        this.m
75270 69 64 52 65 74 75 72 6e 20 3d 20 6e 75 6c 6c 3b  idReturn = null;
75280 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 73  ..        this.s
75290 69 64 65 52 65 74 75 72 6e 20 3d 20 6e 75 6c 6c  ideReturn = null
752a0 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
752b0 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a  n this;..    };.
752c0 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65  .    return Tone
752d0 2e 4d 69 64 53 69 64 65 45 66 66 65 63 74 3b 0a  .MidSideEffect;.
752e0 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e  .});..Module(fun
752f0 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09  ction (Tone) {..
75300 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09      ..    /**...
75310 20 2a 20 20 40 63 6c 61 73 73 20 54 6f 6e 65 2e   *  @class Tone.
75320 50 68 61 73 65 72 20 69 73 20 61 20 70 68 61 73  Phaser is a phas
75330 65 72 20 65 66 66 65 63 74 2e 20 50 68 61 73 65  er effect. Phase
75340 72 73 20 77 6f 72 6b 20 62 79 20 63 68 61 6e 67  rs work by chang
75350 69 6e 67 20 74 68 65 20 70 68 61 73 65 0a 09 09  ing the phase...
75360 20 2a 20 20 20 20 20 20 20 20 20 6f 66 20 64 69   *         of di
75370 66 66 65 72 65 6e 74 20 66 72 65 71 75 65 6e 63  fferent frequenc
75380 79 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20  y components of 
75390 61 6e 20 69 6e 63 6f 6d 69 6e 67 20 73 69 67 6e  an incoming sign
753a0 61 6c 2e 20 52 65 61 64 20 6d 6f 72 65 20 6f 6e  al. Read more on
753b0 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 5b   ... *         [
753c0 57 69 6b 69 70 65 64 69 61 5d 28 68 74 74 70 73  Wikipedia](https
753d0 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
753e0 6f 72 67 2f 77 69 6b 69 2f 50 68 61 73 65 72 5f  org/wiki/Phaser_
753f0 28 65 66 66 65 63 74 29 29 2e 20 0a 09 09 20 2a  (effect)). ... *
75400 20 20 20 20 20 20 20 20 20 49 6e 73 70 69 72 61           Inspira
75410 74 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 70 68  tion for this ph
75420 61 73 65 72 20 63 6f 6d 65 73 20 66 72 6f 6d 20  aser comes from 
75430 5b 54 75 6e 61 2e 6a 73 5d 28 68 74 74 70 73 3a  [Tuna.js](https:
75440 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 44 69 6e  //github.com/Din
75450 61 68 6d 6f 65 2f 74 75 6e 61 2f 29 2e 0a 09 09  ahmoe/tuna/)....
75460 20 2a 0a 09 09 20 2a 09 40 65 78 74 65 6e 64 73   *... *.@extends
75470 20 7b 54 6f 6e 65 2e 53 74 65 72 65 6f 45 66 66   {Tone.StereoEff
75480 65 63 74 7d 0a 09 09 20 2a 09 40 63 6f 6e 73 74  ect}... *.@const
75490 72 75 63 74 6f 72 0a 09 09 20 2a 09 40 70 61 72  ructor... *.@par
754a0 61 6d 20 7b 46 72 65 71 75 65 6e 63 79 7c 4f 62  am {Frequency|Ob
754b0 6a 65 63 74 7d 20 5b 66 72 65 71 75 65 6e 63 79  ject} [frequency
754c0 5d 20 54 68 65 20 73 70 65 65 64 20 6f 66 20 74  ] The speed of t
754d0 68 65 20 70 68 61 73 69 6e 67 2e 20 0a 09 09 20  he phasing. ... 
754e0 2a 09 40 70 61 72 61 6d 20 7b 6e 75 6d 62 65 72  *.@param {number
754f0 7d 20 5b 6f 63 74 61 76 65 73 5d 20 54 68 65 20  } [octaves] The 
75500 6f 63 74 61 76 65 73 20 6f 66 20 74 68 65 20 65  octaves of the e
75510 66 66 65 63 74 2e 20 0a 09 09 20 2a 09 40 70 61  ffect. ... *.@pa
75520 72 61 6d 20 7b 46 72 65 71 75 65 6e 63 79 7d 20  ram {Frequency} 
75530 5b 62 61 73 65 46 72 65 71 75 65 6e 63 79 5d 20  [baseFrequency] 
75540 54 68 65 20 62 61 73 65 20 66 72 65 71 75 65 6e  The base frequen
75550 63 79 20 6f 66 20 74 68 65 20 66 69 6c 74 65 72  cy of the filter
75560 73 2e 20 0a 09 09 20 2a 09 40 65 78 61 6d 70 6c  s. ... *.@exampl
75570 65 0a 09 09 20 2a 20 76 61 72 20 70 68 61 73 65  e... * var phase
75580 72 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 50 68 61  r = new Tone.Pha
75590 73 65 72 28 7b 0a 09 09 20 2a 20 09 22 66 72 65  ser({... * ."fre
755a0 71 75 65 6e 63 79 22 20 3a 20 31 35 2c 20 0a 09  quency" : 15, ..
755b0 09 20 2a 20 09 22 6f 63 74 61 76 65 73 22 20 3a  . * ."octaves" :
755c0 20 35 2c 20 0a 09 09 20 2a 20 09 22 62 61 73 65   5, ... * ."base
755d0 46 72 65 71 75 65 6e 63 79 22 20 3a 20 31 30 30  Frequency" : 100
755e0 30 0a 09 09 20 2a 20 7d 29 2e 74 6f 4d 61 73 74  0... * }).toMast
755f0 65 72 28 29 3b 0a 09 09 20 2a 20 76 61 72 20 73  er();... * var s
75600 79 6e 74 68 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  ynth = new Tone.
75610 46 4d 53 79 6e 74 68 28 29 2e 63 6f 6e 6e 65 63  FMSynth().connec
75620 74 28 70 68 61 73 65 72 29 3b 0a 09 09 20 2a 20  t(phaser);... * 
75630 73 79 6e 74 68 2e 74 72 69 67 67 65 72 41 74 74  synth.triggerAtt
75640 61 63 6b 52 65 6c 65 61 73 65 28 22 45 33 22 2c  ackRelease("E3",
75650 20 22 32 6e 22 29 3b 0a 09 09 20 2a 2f 0a 09 20   "2n");... */.. 
75660 20 20 20 54 6f 6e 65 2e 50 68 61 73 65 72 20 3d     Tone.Phaser =
75670 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
75680 20 20 20 20 20 20 20 20 2f 2f 73 65 74 20 74 68          //set th
75690 65 20 64 65 66 61 75 6c 74 73 0a 09 20 20 20 20  e defaults..    
756a0 20 20 20 20 76 61 72 20 6f 70 74 69 6f 6e 73 20      var options 
756b0 3d 20 74 68 69 73 2e 6f 70 74 69 6f 6e 73 4f 62  = this.optionsOb
756c0 6a 65 63 74 28 61 72 67 75 6d 65 6e 74 73 2c 20  ject(arguments, 
756d0 5b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  [..            '
756e0 66 72 65 71 75 65 6e 63 79 27 2c 0a 09 20 20 20  frequency',..   
756f0 20 20 20 20 20 20 20 20 20 27 6f 63 74 61 76 65           'octave
75700 73 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  s',..           
75710 20 27 62 61 73 65 46 72 65 71 75 65 6e 63 79 27   'baseFrequency'
75720 0a 09 20 20 20 20 20 20 20 20 5d 2c 20 54 6f 6e  ..        ], Ton
75730 65 2e 50 68 61 73 65 72 2e 64 65 66 61 75 6c 74  e.Phaser.default
75740 73 29 3b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e  s);..        Ton
75750 65 2e 53 74 65 72 65 6f 45 66 66 65 63 74 2e 63  e.StereoEffect.c
75760 61 6c 6c 28 74 68 69 73 2c 20 6f 70 74 69 6f 6e  all(this, option
75770 73 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  s);..        /**
75780 0a 09 09 09 20 2a 20 20 74 68 65 20 6c 66 6f 20  .... *  the lfo 
75790 77 68 69 63 68 20 63 6f 6e 74 72 6f 6c 73 20 74  which controls t
757a0 68 65 20 66 72 65 71 75 65 6e 63 79 20 6f 6e 20  he frequency on 
757b0 74 68 65 20 6c 65 66 74 20 73 69 64 65 0a 09 09  the left side...
757c0 09 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65  . *  @type {Tone
757d0 2e 4c 46 4f 7d 0a 09 09 09 20 2a 20 20 40 70 72  .LFO}.... *  @pr
757e0 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20  ivate.... */..  
757f0 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 66 6f 4c        this._lfoL
75800 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4c 46 4f 28   = new Tone.LFO(
75810 6f 70 74 69 6f 6e 73 2e 66 72 65 71 75 65 6e 63  options.frequenc
75820 79 2c 20 30 2c 20 31 29 3b 0a 09 20 20 20 20 20  y, 0, 1);..     
75830 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 74 68     /**.... *  th
75840 65 20 6c 66 6f 20 77 68 69 63 68 20 63 6f 6e 74  e lfo which cont
75850 72 6f 6c 73 20 74 68 65 20 66 72 65 71 75 65 6e  rols the frequen
75860 63 79 20 6f 6e 20 74 68 65 20 72 69 67 68 74 20  cy on the right 
75870 73 69 64 65 0a 09 09 09 20 2a 20 20 40 74 79 70  side.... *  @typ
75880 65 20 7b 54 6f 6e 65 2e 4c 46 4f 7d 0a 09 09 09  e {Tone.LFO}....
75890 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
758a0 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
758b0 73 2e 5f 6c 66 6f 52 20 3d 20 6e 65 77 20 54 6f  s._lfoR = new To
758c0 6e 65 2e 4c 46 4f 28 6f 70 74 69 6f 6e 73 2e 66  ne.LFO(options.f
758d0 72 65 71 75 65 6e 63 79 2c 20 30 2c 20 31 29 3b  requency, 0, 1);
758e0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
758f0 6c 66 6f 52 2e 70 68 61 73 65 20 3d 20 31 38 30  lfoR.phase = 180
75900 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
75910 09 09 20 2a 20 20 74 68 65 20 62 61 73 65 20 6d  .. *  the base m
75920 6f 64 75 6c 61 74 69 6f 6e 20 66 72 65 71 75 65  odulation freque
75930 6e 63 79 0a 09 09 09 20 2a 20 20 40 74 79 70 65  ncy.... *  @type
75940 20 7b 6e 75 6d 62 65 72 7d 0a 09 09 09 20 2a 20   {number}.... * 
75950 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f   @private.... */
75960 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
75970 62 61 73 65 46 72 65 71 75 65 6e 63 79 20 3d 20  baseFrequency = 
75980 6f 70 74 69 6f 6e 73 2e 62 61 73 65 46 72 65 71  options.baseFreq
75990 75 65 6e 63 79 3b 0a 09 20 20 20 20 20 20 20 20  uency;..        
759a0 2f 2a 2a 0a 09 09 09 20 2a 20 20 74 68 65 20 6f  /**.... *  the o
759b0 63 74 61 76 65 73 20 6f 66 20 74 68 65 20 70 68  ctaves of the ph
759c0 61 73 69 6e 67 0a 09 09 09 20 2a 20 20 40 74 79  asing.... *  @ty
759d0 70 65 20 7b 6e 75 6d 62 65 72 7d 0a 09 09 09 20  pe {number}.... 
759e0 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20  *  @private.... 
759f0 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
75a00 2e 5f 6f 63 74 61 76 65 73 20 3d 20 6f 70 74 69  ._octaves = opti
75a10 6f 6e 73 2e 6f 63 74 61 76 65 73 3b 0a 09 20 20  ons.octaves;..  
75a20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
75a30 20 54 68 65 20 71 75 61 6c 69 74 79 20 66 61 63   The quality fac
75a40 74 6f 72 20 6f 66 20 74 68 65 20 66 69 6c 74 65  tor of the filte
75a50 72 73 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  rs.... *  @type 
75a60 7b 50 6f 73 69 74 69 76 65 7d 0a 09 09 09 20 2a  {Positive}.... *
75a70 20 20 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f    @signal.... */
75a80 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 51  ..        this.Q
75a90 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53 69 67 6e   = new Tone.Sign
75aa0 61 6c 28 6f 70 74 69 6f 6e 73 2e 51 2c 20 54 6f  al(options.Q, To
75ab0 6e 65 2e 54 79 70 65 2e 50 6f 73 69 74 69 76 65  ne.Type.Positive
75ac0 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
75ad0 09 09 09 20 2a 20 20 74 68 65 20 61 72 72 61 79  ... *  the array
75ae0 20 6f 66 20 66 69 6c 74 65 72 73 20 66 6f 72 20   of filters for 
75af0 74 68 65 20 6c 65 66 74 20 73 69 64 65 0a 09 09  the left side...
75b00 09 20 2a 20 20 40 74 79 70 65 20 7b 41 72 72 61  . *  @type {Arra
75b10 79 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61  y}.... *  @priva
75b20 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  te.... */..     
75b30 20 20 20 74 68 69 73 2e 5f 66 69 6c 74 65 72 73     this._filters
75b40 4c 20 3d 20 74 68 69 73 2e 5f 6d 61 6b 65 46 69  L = this._makeFi
75b50 6c 74 65 72 73 28 6f 70 74 69 6f 6e 73 2e 73 74  lters(options.st
75b60 61 67 65 73 2c 20 74 68 69 73 2e 5f 6c 66 6f 4c  ages, this._lfoL
75b70 2c 20 74 68 69 73 2e 51 29 3b 0a 09 20 20 20 20  , this.Q);..    
75b80 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 74      /**.... *  t
75b90 68 65 20 61 72 72 61 79 20 6f 66 20 66 69 6c 74  he array of filt
75ba0 65 72 73 20 66 6f 72 20 74 68 65 20 6c 65 66 74  ers for the left
75bb0 20 73 69 64 65 0a 09 09 09 20 2a 20 20 40 74 79   side.... *  @ty
75bc0 70 65 20 7b 41 72 72 61 79 7d 0a 09 09 09 20 2a  pe {Array}.... *
75bd0 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a    @private.... *
75be0 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
75bf0 5f 66 69 6c 74 65 72 73 52 20 3d 20 74 68 69 73  _filtersR = this
75c00 2e 5f 6d 61 6b 65 46 69 6c 74 65 72 73 28 6f 70  ._makeFilters(op
75c10 74 69 6f 6e 73 2e 73 74 61 67 65 73 2c 20 74 68  tions.stages, th
75c20 69 73 2e 5f 6c 66 6f 52 2c 20 74 68 69 73 2e 51  is._lfoR, this.Q
75c30 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
75c40 09 09 09 20 2a 20 74 68 65 20 66 72 65 71 75 65  ... * the freque
75c50 6e 63 79 20 6f 66 20 74 68 65 20 65 66 66 65 63  ncy of the effec
75c60 74 0a 09 09 09 20 2a 20 40 74 79 70 65 20 7b 54  t.... * @type {T
75c70 6f 6e 65 2e 53 69 67 6e 61 6c 7d 0a 09 09 09 20  one.Signal}.... 
75c80 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
75c90 2e 66 72 65 71 75 65 6e 63 79 20 3d 20 74 68 69  .frequency = thi
75ca0 73 2e 5f 6c 66 6f 4c 2e 66 72 65 71 75 65 6e 63  s._lfoL.frequenc
75cb0 79 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  y;..        this
75cc0 2e 66 72 65 71 75 65 6e 63 79 2e 76 61 6c 75 65  .frequency.value
75cd0 20 3d 20 6f 70 74 69 6f 6e 73 2e 66 72 65 71 75   = options.frequ
75ce0 65 6e 63 79 3b 0a 09 20 20 20 20 20 20 20 20 2f  ency;..        /
75cf0 2f 63 6f 6e 6e 65 63 74 20 74 68 65 6d 20 75 70  /connect them up
75d00 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 65  ..        this.e
75d10 66 66 65 63 74 53 65 6e 64 4c 2e 63 6f 6e 6e 65  ffectSendL.conne
75d20 63 74 28 74 68 69 73 2e 5f 66 69 6c 74 65 72 73  ct(this._filters
75d30 4c 5b 30 5d 29 3b 0a 09 20 20 20 20 20 20 20 20  L[0]);..        
75d40 74 68 69 73 2e 65 66 66 65 63 74 53 65 6e 64 52  this.effectSendR
75d50 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e 5f 66  .connect(this._f
75d60 69 6c 74 65 72 73 52 5b 30 5d 29 3b 0a 09 20 20  iltersR[0]);..  
75d70 20 20 20 20 20 20 74 68 69 73 2e 5f 66 69 6c 74        this._filt
75d80 65 72 73 4c 5b 6f 70 74 69 6f 6e 73 2e 73 74 61  ersL[options.sta
75d90 67 65 73 20 2d 20 31 5d 2e 63 6f 6e 6e 65 63 74  ges - 1].connect
75da0 28 74 68 69 73 2e 65 66 66 65 63 74 52 65 74 75  (this.effectRetu
75db0 72 6e 4c 29 3b 0a 09 20 20 20 20 20 20 20 20 74  rnL);..        t
75dc0 68 69 73 2e 5f 66 69 6c 74 65 72 73 52 5b 6f 70  his._filtersR[op
75dd0 74 69 6f 6e 73 2e 73 74 61 67 65 73 20 2d 20 31  tions.stages - 1
75de0 5d 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e 65  ].connect(this.e
75df0 66 66 65 63 74 52 65 74 75 72 6e 52 29 3b 0a 09  ffectReturnR);..
75e00 20 20 20 20 20 20 20 20 2f 2f 63 6f 6e 74 72 6f          //contro
75e10 6c 20 74 68 65 20 66 72 65 71 75 65 6e 63 79 20  l the frequency 
75e20 77 69 74 68 20 6f 6e 65 20 4c 46 4f 0a 09 20 20  with one LFO..  
75e30 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 66 6f 4c        this._lfoL
75e40 2e 66 72 65 71 75 65 6e 63 79 2e 63 6f 6e 6e 65  .frequency.conne
75e50 63 74 28 74 68 69 73 2e 5f 6c 66 6f 52 2e 66 72  ct(this._lfoR.fr
75e60 65 71 75 65 6e 63 79 29 3b 0a 09 20 20 20 20 20  equency);..     
75e70 20 20 20 2f 2f 73 65 74 20 74 68 65 20 6f 70 74     //set the opt
75e80 69 6f 6e 73 0a 09 20 20 20 20 20 20 20 20 74 68  ions..        th
75e90 69 73 2e 62 61 73 65 46 72 65 71 75 65 6e 63 79  is.baseFrequency
75ea0 20 3d 20 6f 70 74 69 6f 6e 73 2e 62 61 73 65 46   = options.baseF
75eb0 72 65 71 75 65 6e 63 79 3b 0a 09 20 20 20 20 20  requency;..     
75ec0 20 20 20 74 68 69 73 2e 6f 63 74 61 76 65 73 20     this.octaves 
75ed0 3d 20 6f 70 74 69 6f 6e 73 2e 6f 63 74 61 76 65  = options.octave
75ee0 73 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 73 74  s;..        //st
75ef0 61 72 74 20 74 68 65 20 6c 66 6f 0a 09 20 20 20  art the lfo..   
75f00 20 20 20 20 20 74 68 69 73 2e 5f 6c 66 6f 4c 2e       this._lfoL.
75f10 73 74 61 72 74 28 29 3b 0a 09 20 20 20 20 20 20  start();..      
75f20 20 20 74 68 69 73 2e 5f 6c 66 6f 52 2e 73 74 61    this._lfoR.sta
75f30 72 74 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74  rt();..        t
75f40 68 69 73 2e 5f 72 65 61 64 4f 6e 6c 79 28 5b 0a  his._readOnly([.
75f50 09 20 20 20 20 20 20 20 20 20 20 20 20 27 66 72  .            'fr
75f60 65 71 75 65 6e 63 79 27 2c 0a 09 20 20 20 20 20  equency',..     
75f70 20 20 20 20 20 20 20 27 51 27 0a 09 20 20 20 20         'Q'..    
75f80 20 20 20 20 5d 29 3b 0a 09 20 20 20 20 7d 3b 0a      ]);..    };.
75f90 09 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64  .    Tone.extend
75fa0 28 54 6f 6e 65 2e 50 68 61 73 65 72 2c 20 54 6f  (Tone.Phaser, To
75fb0 6e 65 2e 53 74 65 72 65 6f 45 66 66 65 63 74 29  ne.StereoEffect)
75fc0 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
75fd0 20 64 65 66 61 75 6c 74 73 0a 09 09 20 2a 20 20   defaults... *  
75fe0 40 73 74 61 74 69 63 0a 09 09 20 2a 20 20 40 74  @static... *  @t
75ff0 79 70 65 20 7b 6f 62 6a 65 63 74 7d 0a 09 09 20  ype {object}... 
76000 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50 68 61  */..    Tone.Pha
76010 73 65 72 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b  ser.defaults = {
76020 0a 09 20 20 20 20 20 20 20 20 27 66 72 65 71 75  ..        'frequ
76030 65 6e 63 79 27 3a 20 30 2e 35 2c 0a 09 20 20 20  ency': 0.5,..   
76040 20 20 20 20 20 27 6f 63 74 61 76 65 73 27 3a 20       'octaves': 
76050 33 2c 0a 09 20 20 20 20 20 20 20 20 27 73 74 61  3,..        'sta
76060 67 65 73 27 3a 20 31 30 2c 0a 09 20 20 20 20 20  ges': 10,..     
76070 20 20 20 27 51 27 3a 20 31 30 2c 0a 09 20 20 20     'Q': 10,..   
76080 20 20 20 20 20 27 62 61 73 65 46 72 65 71 75 65       'baseFreque
76090 6e 63 79 27 3a 20 33 35 30 0a 09 20 20 20 20 7d  ncy': 350..    }
760a0 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
760b0 20 40 70 61 72 61 6d 20 7b 6e 75 6d 62 65 72 7d   @param {number}
760c0 20 73 74 61 67 65 73 0a 09 09 20 2a 20 20 40 72   stages... *  @r
760d0 65 74 75 72 6e 73 20 7b 41 72 72 61 79 7d 20 74  eturns {Array} t
760e0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 6c  he number of fil
760f0 74 65 72 73 20 61 6c 6c 20 63 6f 6e 6e 65 63 74  ters all connect
76100 65 64 20 74 6f 67 65 74 68 65 72 0a 09 09 20 2a  ed together... *
76110 20 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f    @private... */
76120 0a 09 20 20 20 20 54 6f 6e 65 2e 50 68 61 73 65  ..    Tone.Phase
76130 72 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 6d 61 6b  r.prototype._mak
76140 65 46 69 6c 74 65 72 73 20 3d 20 66 75 6e 63 74  eFilters = funct
76150 69 6f 6e 20 28 73 74 61 67 65 73 2c 20 63 6f 6e  ion (stages, con
76160 6e 65 63 74 54 6f 46 72 65 71 2c 20 51 29 20 7b  nectToFreq, Q) {
76170 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 66 69  ..        var fi
76180 6c 74 65 72 73 20 3d 20 6e 65 77 20 41 72 72 61  lters = new Arra
76190 79 28 73 74 61 67 65 73 29 3b 0a 09 20 20 20 20  y(stages);..    
761a0 20 20 20 20 2f 2f 6d 61 6b 65 20 61 6c 6c 20 74      //make all t
761b0 68 65 20 66 69 6c 74 65 72 73 0a 09 20 20 20 20  he filters..    
761c0 20 20 20 20 66 6f 72 20 28 76 61 72 20 69 20 3d      for (var i =
761d0 20 30 3b 20 69 20 3c 20 73 74 61 67 65 73 3b 20   0; i < stages; 
761e0 69 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20 20 20  i++) {..        
761f0 20 20 20 20 76 61 72 20 66 69 6c 74 65 72 20 3d      var filter =
76200 20 74 68 69 73 2e 63 6f 6e 74 65 78 74 2e 63 72   this.context.cr
76210 65 61 74 65 42 69 71 75 61 64 46 69 6c 74 65 72  eateBiquadFilter
76220 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ();..           
76230 20 66 69 6c 74 65 72 2e 74 79 70 65 20 3d 20 27   filter.type = '
76240 61 6c 6c 70 61 73 73 27 3b 0a 09 20 20 20 20 20  allpass';..     
76250 20 20 20 20 20 20 20 51 2e 63 6f 6e 6e 65 63 74         Q.connect
76260 28 66 69 6c 74 65 72 2e 51 29 3b 0a 09 20 20 20  (filter.Q);..   
76270 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
76280 54 6f 46 72 65 71 2e 63 6f 6e 6e 65 63 74 28 66  ToFreq.connect(f
76290 69 6c 74 65 72 2e 66 72 65 71 75 65 6e 63 79 29  ilter.frequency)
762a0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 66  ;..            f
762b0 69 6c 74 65 72 73 5b 69 5d 20 3d 20 66 69 6c 74  ilters[i] = filt
762c0 65 72 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  er;..        }..
762d0 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 6f 6e          this.con
762e0 6e 65 63 74 53 65 72 69 65 73 2e 61 70 70 6c 79  nectSeries.apply
762f0 28 74 68 69 73 2c 20 66 69 6c 74 65 72 73 29 3b  (this, filters);
76300 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
76310 20 66 69 6c 74 65 72 73 3b 0a 09 20 20 20 20 7d   filters;..    }
76320 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
76330 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6f 63  The number of oc
76340 74 61 76 65 73 20 74 68 65 20 70 68 61 73 65 20  taves the phase 
76350 67 6f 65 73 20 61 62 6f 76 65 0a 09 09 20 2a 20  goes above... * 
76360 74 68 65 20 62 61 73 65 46 72 65 71 75 65 6e 63  the baseFrequenc
76370 79 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66  y... * @memberOf
76380 20 54 6f 6e 65 2e 50 68 61 73 65 72 23 0a 09 09   Tone.Phaser#...
76390 20 2a 20 40 74 79 70 65 20 7b 50 6f 73 69 74 69   * @type {Positi
763a0 76 65 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 6f  ve}... * @name o
763b0 63 74 61 76 65 73 0a 09 09 20 2a 2f 0a 09 20 20  ctaves... */..  
763c0 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50    Object.defineP
763d0 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 50 68 61  roperty(Tone.Pha
763e0 73 65 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27  ser.prototype, '
763f0 6f 63 74 61 76 65 73 27 2c 20 7b 0a 09 20 20 20  octaves', {..   
76400 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69       get: functi
76410 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
76420 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
76430 2e 5f 6f 63 74 61 76 65 73 3b 0a 09 20 20 20 20  ._octaves;..    
76440 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20      },..        
76450 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 6f  set: function (o
76460 63 74 61 76 65 73 29 20 7b 0a 09 20 20 20 20 20  ctaves) {..     
76470 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6f 63 74         this._oct
76480 61 76 65 73 20 3d 20 6f 63 74 61 76 65 73 3b 0a  aves = octaves;.
76490 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72  .            var
764a0 20 6d 61 78 20 3d 20 74 68 69 73 2e 5f 62 61 73   max = this._bas
764b0 65 46 72 65 71 75 65 6e 63 79 20 2a 20 4d 61 74  eFrequency * Mat
764c0 68 2e 70 6f 77 28 32 2c 20 6f 63 74 61 76 65 73  h.pow(2, octaves
764d0 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
764e0 74 68 69 73 2e 5f 6c 66 6f 4c 2e 6d 61 78 20 3d  this._lfoL.max =
764f0 20 6d 61 78 3b 0a 09 20 20 20 20 20 20 20 20 20   max;..         
76500 20 20 20 74 68 69 73 2e 5f 6c 66 6f 52 2e 6d 61     this._lfoR.ma
76510 78 20 3d 20 6d 61 78 3b 0a 09 20 20 20 20 20 20  x = max;..      
76520 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20    }..    });..  
76530 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65 20 74    /**... * The t
76540 68 65 20 62 61 73 65 20 66 72 65 71 75 65 6e 63  he base frequenc
76550 79 20 6f 66 20 74 68 65 20 66 69 6c 74 65 72 73  y of the filters
76560 2e 20 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f  . ... * @memberO
76570 66 20 54 6f 6e 65 2e 50 68 61 73 65 72 23 0a 09  f Tone.Phaser#..
76580 09 20 2a 20 40 74 79 70 65 20 7b 6e 75 6d 62 65  . * @type {numbe
76590 72 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 62 61  r}... * @name ba
765a0 73 65 46 72 65 71 75 65 6e 63 79 0a 09 09 20 2a  seFrequency... *
765b0 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65  /..    Object.de
765c0 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e  fineProperty(Ton
765d0 65 2e 50 68 61 73 65 72 2e 70 72 6f 74 6f 74 79  e.Phaser.prototy
765e0 70 65 2c 20 27 62 61 73 65 46 72 65 71 75 65 6e  pe, 'baseFrequen
765f0 63 79 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20  cy', {..        
76600 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29  get: function ()
76610 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
76620 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 62 61 73  return this._bas
76630 65 46 72 65 71 75 65 6e 63 79 3b 0a 09 20 20 20  eFrequency;..   
76640 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20       },..       
76650 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   set: function (
76660 66 72 65 71 29 20 7b 0a 09 20 20 20 20 20 20 20  freq) {..       
76670 20 20 20 20 20 74 68 69 73 2e 5f 62 61 73 65 46       this._baseF
76680 72 65 71 75 65 6e 63 79 20 3d 20 66 72 65 71 3b  requency = freq;
76690 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
766a0 69 73 2e 5f 6c 66 6f 4c 2e 6d 69 6e 20 3d 20 66  is._lfoL.min = f
766b0 72 65 71 3b 0a 09 20 20 20 20 20 20 20 20 20 20  req;..          
766c0 20 20 74 68 69 73 2e 5f 6c 66 6f 52 2e 6d 69 6e    this._lfoR.min
766d0 20 3d 20 66 72 65 71 3b 0a 09 20 20 20 20 20 20   = freq;..      
766e0 20 20 20 20 20 20 74 68 69 73 2e 6f 63 74 61 76        this.octav
766f0 65 73 20 3d 20 74 68 69 73 2e 5f 6f 63 74 61 76  es = this._octav
76700 65 73 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  es;..        }..
76710 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a      });..    /**
76720 0a 09 09 20 2a 20 20 63 6c 65 61 6e 20 75 70 0a  ... *  clean up.
76730 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b  .. *  @returns {
76740 54 6f 6e 65 2e 50 68 61 73 65 72 7d 20 74 68 69  Tone.Phaser} thi
76750 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  s... */..    Ton
76760 65 2e 50 68 61 73 65 72 2e 70 72 6f 74 6f 74 79  e.Phaser.prototy
76770 70 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75 6e  pe.dispose = fun
76780 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
76790 20 20 20 20 54 6f 6e 65 2e 53 74 65 72 65 6f 45      Tone.StereoE
767a0 66 66 65 63 74 2e 70 72 6f 74 6f 74 79 70 65 2e  ffect.prototype.
767b0 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69  dispose.call(thi
767c0 73 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  s);..        thi
767d0 73 2e 5f 77 72 69 74 61 62 6c 65 28 5b 0a 09 20  s._writable([.. 
767e0 20 20 20 20 20 20 20 20 20 20 20 27 66 72 65 71             'freq
767f0 75 65 6e 63 79 27 2c 0a 09 20 20 20 20 20 20 20  uency',..       
76800 20 20 20 20 20 27 51 27 0a 09 20 20 20 20 20 20       'Q'..      
76810 20 20 5d 29 3b 0a 09 20 20 20 20 20 20 20 20 74    ]);..        t
76820 68 69 73 2e 51 2e 64 69 73 70 6f 73 65 28 29 3b  his.Q.dispose();
76830 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 51  ..        this.Q
76840 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
76850 20 20 74 68 69 73 2e 5f 6c 66 6f 4c 2e 64 69 73    this._lfoL.dis
76860 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20  pose();..       
76870 20 74 68 69 73 2e 5f 6c 66 6f 4c 20 3d 20 6e 75   this._lfoL = nu
76880 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ll;..        thi
76890 73 2e 5f 6c 66 6f 52 2e 64 69 73 70 6f 73 65 28  s._lfoR.dispose(
768a0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
768b0 2e 5f 6c 66 6f 52 20 3d 20 6e 75 6c 6c 3b 0a 09  ._lfoR = null;..
768c0 20 20 20 20 20 20 20 20 66 6f 72 20 28 76 61 72          for (var
768d0 20 69 20 3d 20 30 3b 20 69 20 3c 20 74 68 69 73   i = 0; i < this
768e0 2e 5f 66 69 6c 74 65 72 73 4c 2e 6c 65 6e 67 74  ._filtersL.lengt
768f0 68 3b 20 69 2b 2b 29 20 7b 0a 09 20 20 20 20 20  h; i++) {..     
76900 20 20 20 20 20 20 20 74 68 69 73 2e 5f 66 69 6c         this._fil
76910 74 65 72 73 4c 5b 69 5d 2e 64 69 73 63 6f 6e 6e  tersL[i].disconn
76920 65 63 74 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ect();..        
76930 20 20 20 20 74 68 69 73 2e 5f 66 69 6c 74 65 72      this._filter
76940 73 4c 5b 69 5d 20 3d 20 6e 75 6c 6c 3b 0a 09 20  sL[i] = null;.. 
76950 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
76960 20 20 74 68 69 73 2e 5f 66 69 6c 74 65 72 73 4c    this._filtersL
76970 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
76980 20 20 66 6f 72 20 28 76 61 72 20 6a 20 3d 20 30    for (var j = 0
76990 3b 20 6a 20 3c 20 74 68 69 73 2e 5f 66 69 6c 74  ; j < this._filt
769a0 65 72 73 52 2e 6c 65 6e 67 74 68 3b 20 6a 2b 2b  ersR.length; j++
769b0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
769c0 20 74 68 69 73 2e 5f 66 69 6c 74 65 72 73 52 5b   this._filtersR[
769d0 6a 5d 2e 64 69 73 63 6f 6e 6e 65 63 74 28 29 3b  j].disconnect();
769e0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
769f0 69 73 2e 5f 66 69 6c 74 65 72 73 52 5b 6a 5d 20  is._filtersR[j] 
76a00 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
76a10 20 7d 0a 09 20 20 20 20 20 20 20 20 74 68 69 73   }..        this
76a20 2e 5f 66 69 6c 74 65 72 73 52 20 3d 20 6e 75 6c  ._filtersR = nul
76a30 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  l;..        this
76a40 2e 66 72 65 71 75 65 6e 63 79 20 3d 20 6e 75 6c  .frequency = nul
76a50 6c 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75  l;..        retu
76a60 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b  rn this;..    };
76a70 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e  ..    return Ton
76a80 65 2e 50 68 61 73 65 72 3b 0a 09 7d 29 3b 0a 09  e.Phaser;..});..
76a90 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20  Module(function 
76aa0 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09  (Tone) {..    ..
76ab0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63      /**... *  @c
76ac0 6c 61 73 73 20 20 54 6f 6e 65 2e 50 69 6e 67 50  lass  Tone.PingP
76ad0 6f 6e 67 44 65 6c 61 79 20 69 73 20 61 20 66 65  ongDelay is a fe
76ae0 65 64 62 61 63 6b 20 64 65 6c 61 79 20 65 66 66  edback delay eff
76af0 65 63 74 20 77 68 65 72 65 20 74 68 65 20 65 63  ect where the ec
76b00 68 6f 20 69 73 20 68 65 61 72 64 0a 09 09 20 2a  ho is heard... *
76b10 20 20 20 20 20 20 20 20 20 20 66 69 72 73 74 20            first 
76b20 69 6e 20 6f 6e 65 20 63 68 61 6e 6e 65 6c 20 61  in one channel a
76b30 6e 64 20 6e 65 78 74 20 69 6e 20 74 68 65 20 6f  nd next in the o
76b40 70 70 6f 73 69 74 65 20 63 68 61 6e 6e 65 6c 2e  pposite channel.
76b50 20 49 6e 20 61 20 73 74 65 72 65 6f 0a 09 09 20   In a stereo... 
76b60 2a 20 20 20 20 20 20 20 20 20 20 73 79 73 74 65  *          syste
76b70 6d 20 74 68 65 73 65 20 61 72 65 20 74 68 65 20  m these are the 
76b80 72 69 67 68 74 20 61 6e 64 20 6c 65 66 74 20 63  right and left c
76b90 68 61 6e 6e 65 6c 73 2e 0a 09 09 20 2a 20 20 20  hannels.... *   
76ba0 20 20 20 20 20 20 20 50 69 6e 67 50 6f 6e 67 44         PingPongD
76bb0 65 6c 61 79 20 69 6e 20 6d 6f 72 65 20 73 69 6d  elay in more sim
76bc0 70 6c 69 66 69 65 64 20 74 65 72 6d 73 20 69 73  plified terms is
76bd0 20 74 77 6f 20 54 6f 6e 65 2e 46 65 65 64 62 61   two Tone.Feedba
76be0 63 6b 44 65 6c 61 79 73 20 0a 09 09 20 2a 20 20  ckDelays ... *  
76bf0 20 20 20 20 20 20 20 20 77 69 74 68 20 69 6e 64          with ind
76c00 65 70 65 6e 64 65 6e 74 20 64 65 6c 61 79 20 76  ependent delay v
76c10 61 6c 75 65 73 2e 20 45 61 63 68 20 64 65 6c 61  alues. Each dela
76c20 79 20 69 73 20 72 6f 75 74 65 64 20 74 6f 20 6f  y is routed to o
76c30 6e 65 20 63 68 61 6e 6e 65 6c 0a 09 09 20 2a 20  ne channel... * 
76c40 20 20 20 20 20 20 20 20 20 28 6c 65 66 74 20 6f           (left o
76c50 72 20 72 69 67 68 74 29 2c 20 61 6e 64 20 74 68  r right), and th
76c60 65 20 63 68 61 6e 6e 65 6c 20 74 72 69 67 67 65  e channel trigge
76c70 72 65 64 20 73 65 63 6f 6e 64 20 77 69 6c 6c 20  red second will 
76c80 61 6c 77 61 79 73 20 0a 09 09 20 2a 20 20 20 20  always ... *    
76c90 20 20 20 20 20 20 74 72 69 67 67 65 72 20 61 74        trigger at
76ca0 20 74 68 65 20 73 61 6d 65 20 69 6e 74 65 72 76   the same interv
76cb0 61 6c 20 61 66 74 65 72 20 74 68 65 20 66 69 72  al after the fir
76cc0 73 74 2e 0a 09 09 20 2a 0a 09 09 20 2a 20 09 40  st.... *... * .@
76cd0 63 6f 6e 73 74 72 75 63 74 6f 72 0a 09 09 20 2a  constructor... *
76ce0 20 09 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65   .@extends {Tone
76cf0 2e 53 74 65 72 65 6f 58 46 65 65 64 62 61 63 6b  .StereoXFeedback
76d00 45 66 66 65 63 74 7d 0a 09 09 20 2a 20 20 40 70  Effect}... *  @p
76d10 61 72 61 6d 20 7b 54 69 6d 65 7c 4f 62 6a 65 63  aram {Time|Objec
76d20 74 7d 20 5b 64 65 6c 61 79 54 69 6d 65 5d 20 54  t} [delayTime] T
76d30 68 65 20 64 65 6c 61 79 54 69 6d 65 20 62 65 74  he delayTime bet
76d40 77 65 65 6e 20 63 6f 6e 73 65 63 75 74 69 76 65  ween consecutive
76d50 20 65 63 68 6f 73 2e 0a 09 09 20 2a 20 20 40 70   echos.... *  @p
76d60 61 72 61 6d 20 7b 4e 6f 72 6d 61 6c 52 61 6e 67  aram {NormalRang
76d70 65 3d 7d 20 66 65 65 64 62 61 63 6b 20 54 68 65  e=} feedback The
76d80 20 61 6d 6f 75 6e 74 20 6f 66 20 74 68 65 20 65   amount of the e
76d90 66 66 65 63 74 65 64 20 73 69 67 6e 61 6c 20 77  ffected signal w
76da0 68 69 63 68 20 0a 09 09 20 2a 20 20 20 20 20 20  hich ... *      
76db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76dc0 20 20 20 20 20 20 20 20 20 20 20 69 73 20 66 65             is fe
76dd0 64 20 62 61 63 6b 20 74 68 72 6f 75 67 68 20 74  d back through t
76de0 68 65 20 64 65 6c 61 79 2e 0a 09 09 20 2a 20 20  he delay.... *  
76df0 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 76 61  @example... * va
76e00 72 20 70 69 6e 67 50 6f 6e 67 20 3d 20 6e 65 77  r pingPong = new
76e10 20 54 6f 6e 65 2e 50 69 6e 67 50 6f 6e 67 44 65   Tone.PingPongDe
76e20 6c 61 79 28 22 34 6e 22 2c 20 30 2e 32 29 2e 74  lay("4n", 0.2).t
76e30 6f 4d 61 73 74 65 72 28 29 3b 0a 09 09 20 2a 20  oMaster();... * 
76e40 76 61 72 20 64 72 75 6d 20 3d 20 6e 65 77 20 54  var drum = new T
76e50 6f 6e 65 2e 44 72 75 6d 53 79 6e 74 68 28 29 2e  one.DrumSynth().
76e60 63 6f 6e 6e 65 63 74 28 70 69 6e 67 50 6f 6e 67  connect(pingPong
76e70 29 3b 0a 09 09 20 2a 20 64 72 75 6d 2e 74 72 69  );... * drum.tri
76e80 67 67 65 72 41 74 74 61 63 6b 52 65 6c 65 61 73  ggerAttackReleas
76e90 65 28 22 43 34 22 2c 20 22 33 32 6e 22 29 3b 0a  e("C4", "32n");.
76ea0 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
76eb0 50 69 6e 67 50 6f 6e 67 44 65 6c 61 79 20 3d 20  PingPongDelay = 
76ec0 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
76ed0 20 20 20 20 20 20 20 76 61 72 20 6f 70 74 69 6f         var optio
76ee0 6e 73 20 3d 20 74 68 69 73 2e 6f 70 74 69 6f 6e  ns = this.option
76ef0 73 4f 62 6a 65 63 74 28 61 72 67 75 6d 65 6e 74  sObject(argument
76f00 73 2c 20 5b 0a 09 20 20 20 20 20 20 20 20 20 20  s, [..          
76f10 20 20 27 64 65 6c 61 79 54 69 6d 65 27 2c 0a 09    'delayTime',..
76f20 20 20 20 20 20 20 20 20 20 20 20 20 27 66 65 65              'fee
76f30 64 62 61 63 6b 27 0a 09 20 20 20 20 20 20 20 20  dback'..        
76f40 5d 2c 20 54 6f 6e 65 2e 50 69 6e 67 50 6f 6e 67  ], Tone.PingPong
76f50 44 65 6c 61 79 2e 64 65 66 61 75 6c 74 73 29 3b  Delay.defaults);
76f60 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 53  ..        Tone.S
76f70 74 65 72 65 6f 58 46 65 65 64 62 61 63 6b 45 66  tereoXFeedbackEf
76f80 66 65 63 74 2e 63 61 6c 6c 28 74 68 69 73 2c 20  fect.call(this, 
76f90 6f 70 74 69 6f 6e 73 29 3b 0a 09 20 20 20 20 20  options);..     
76fa0 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 74 68     /**.... *  th
76fb0 65 20 64 65 6c 61 79 20 6e 6f 64 65 20 6f 6e 20  e delay node on 
76fc0 74 68 65 20 6c 65 66 74 20 73 69 64 65 0a 09 09  the left side...
76fd0 09 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65  . *  @type {Tone
76fe0 2e 44 65 6c 61 79 7d 0a 09 09 09 20 2a 20 20 40  .Delay}.... *  @
76ff0 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
77000 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 65          this._le
77010 66 74 44 65 6c 61 79 20 3d 20 6e 65 77 20 54 6f  ftDelay = new To
77020 6e 65 2e 44 65 6c 61 79 28 30 2c 20 6f 70 74 69  ne.Delay(0, opti
77030 6f 6e 73 2e 6d 61 78 44 65 6c 61 79 54 69 6d 65  ons.maxDelayTime
77040 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
77050 09 09 09 20 2a 20 20 74 68 65 20 64 65 6c 61 79  ... *  the delay
77060 20 6e 6f 64 65 20 6f 6e 20 74 68 65 20 72 69 67   node on the rig
77070 68 74 20 73 69 64 65 0a 09 09 09 20 2a 20 20 40  ht side.... *  @
77080 74 79 70 65 20 7b 54 6f 6e 65 2e 44 65 6c 61 79  type {Tone.Delay
77090 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  }.... *  @privat
770a0 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
770b0 20 20 74 68 69 73 2e 5f 72 69 67 68 74 44 65 6c    this._rightDel
770c0 61 79 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 44 65  ay = new Tone.De
770d0 6c 61 79 28 30 2c 20 6f 70 74 69 6f 6e 73 2e 6d  lay(0, options.m
770e0 61 78 44 65 6c 61 79 54 69 6d 65 29 3b 0a 09 20  axDelayTime);.. 
770f0 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
77100 20 20 74 68 65 20 70 72 65 64 65 6c 61 79 20 6f    the predelay o
77110 6e 20 74 68 65 20 72 69 67 68 74 20 73 69 64 65  n the right side
77120 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54  .... *  @type {T
77130 6f 6e 65 2e 44 65 6c 61 79 7d 0a 09 09 09 20 2a  one.Delay}.... *
77140 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a    @private.... *
77150 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
77160 5f 72 69 67 68 74 50 72 65 44 65 6c 61 79 20 3d  _rightPreDelay =
77170 20 6e 65 77 20 54 6f 6e 65 2e 44 65 6c 61 79 28   new Tone.Delay(
77180 30 2c 20 6f 70 74 69 6f 6e 73 2e 6d 61 78 44 65  0, options.maxDe
77190 6c 61 79 54 69 6d 65 29 3b 0a 09 20 20 20 20 20  layTime);..     
771a0 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 74 68     /**.... *  th
771b0 65 20 64 65 6c 61 79 20 74 69 6d 65 20 73 69 67  e delay time sig
771c0 6e 61 6c 0a 09 09 09 20 2a 20 20 40 74 79 70 65  nal.... *  @type
771d0 20 7b 54 69 6d 65 7d 0a 09 09 09 20 2a 20 20 40   {Time}.... *  @
771e0 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f 0a 09 20  signal.... */.. 
771f0 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 6c 61         this.dela
77200 79 54 69 6d 65 20 3d 20 6e 65 77 20 54 6f 6e 65  yTime = new Tone
77210 2e 53 69 67 6e 61 6c 28 6f 70 74 69 6f 6e 73 2e  .Signal(options.
77220 64 65 6c 61 79 54 69 6d 65 2c 20 54 6f 6e 65 2e  delayTime, Tone.
77230 54 79 70 65 2e 54 69 6d 65 29 3b 0a 09 20 20 20  Type.Time);..   
77240 20 20 20 20 20 2f 2f 63 6f 6e 6e 65 63 74 20 69       //connect i
77250 74 20 75 70 0a 09 20 20 20 20 20 20 20 20 74 68  t up..        th
77260 69 73 2e 65 66 66 65 63 74 53 65 6e 64 4c 2e 63  is.effectSendL.c
77270 68 61 69 6e 28 74 68 69 73 2e 5f 6c 65 66 74 44  hain(this._leftD
77280 65 6c 61 79 2c 20 74 68 69 73 2e 65 66 66 65 63  elay, this.effec
77290 74 52 65 74 75 72 6e 4c 29 3b 0a 09 20 20 20 20  tReturnL);..    
772a0 20 20 20 20 74 68 69 73 2e 65 66 66 65 63 74 53      this.effectS
772b0 65 6e 64 52 2e 63 68 61 69 6e 28 74 68 69 73 2e  endR.chain(this.
772c0 5f 72 69 67 68 74 50 72 65 44 65 6c 61 79 2c 20  _rightPreDelay, 
772d0 74 68 69 73 2e 5f 72 69 67 68 74 44 65 6c 61 79  this._rightDelay
772e0 2c 20 74 68 69 73 2e 65 66 66 65 63 74 52 65 74  , this.effectRet
772f0 75 72 6e 52 29 3b 0a 09 20 20 20 20 20 20 20 20  urnR);..        
77300 74 68 69 73 2e 64 65 6c 61 79 54 69 6d 65 2e 66  this.delayTime.f
77310 61 6e 28 74 68 69 73 2e 5f 6c 65 66 74 44 65 6c  an(this._leftDel
77320 61 79 2e 64 65 6c 61 79 54 69 6d 65 2c 20 74 68  ay.delayTime, th
77330 69 73 2e 5f 72 69 67 68 74 44 65 6c 61 79 2e 64  is._rightDelay.d
77340 65 6c 61 79 54 69 6d 65 2c 20 74 68 69 73 2e 5f  elayTime, this._
77350 72 69 67 68 74 50 72 65 44 65 6c 61 79 2e 64 65  rightPreDelay.de
77360 6c 61 79 54 69 6d 65 29 3b 0a 09 20 20 20 20 20  layTime);..     
77370 20 20 20 2f 2f 72 65 61 72 72 61 6e 67 65 64 20     //rearranged 
77380 74 68 65 20 66 65 65 64 62 61 63 6b 20 74 6f 20  the feedback to 
77390 62 65 20 61 66 74 65 72 20 74 68 65 20 72 69 67  be after the rig
773a0 68 74 50 72 65 44 65 6c 61 79 0a 09 20 20 20 20  htPreDelay..    
773b0 20 20 20 20 74 68 69 73 2e 5f 66 65 65 64 62 61      this._feedba
773c0 63 6b 4c 52 2e 64 69 73 63 6f 6e 6e 65 63 74 28  ckLR.disconnect(
773d0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
773e0 2e 5f 66 65 65 64 62 61 63 6b 4c 52 2e 63 6f 6e  ._feedbackLR.con
773f0 6e 65 63 74 28 74 68 69 73 2e 5f 72 69 67 68 74  nect(this._right
77400 44 65 6c 61 79 29 3b 0a 09 20 20 20 20 20 20 20  Delay);..       
77410 20 74 68 69 73 2e 5f 72 65 61 64 4f 6e 6c 79 28   this._readOnly(
77420 5b 27 64 65 6c 61 79 54 69 6d 65 27 5d 29 3b 0a  ['delayTime']);.
77430 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e  .    };..    Ton
77440 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 50 69  e.extend(Tone.Pi
77450 6e 67 50 6f 6e 67 44 65 6c 61 79 2c 20 54 6f 6e  ngPongDelay, Ton
77460 65 2e 53 74 65 72 65 6f 58 46 65 65 64 62 61 63  e.StereoXFeedbac
77470 6b 45 66 66 65 63 74 29 3b 0a 09 20 20 20 20 2f  kEffect);..    /
77480 2a 2a 0a 09 09 20 2a 20 20 40 73 74 61 74 69 63  **... *  @static
77490 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4f 62  ... *  @type {Ob
774a0 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a 09 20 20 20  ject}... */..   
774b0 20 54 6f 6e 65 2e 50 69 6e 67 50 6f 6e 67 44 65   Tone.PingPongDe
774c0 6c 61 79 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b  lay.defaults = {
774d0 0a 09 20 20 20 20 20 20 20 20 27 64 65 6c 61 79  ..        'delay
774e0 54 69 6d 65 27 3a 20 30 2e 32 35 2c 0a 09 20 20  Time': 0.25,..  
774f0 20 20 20 20 20 20 27 6d 61 78 44 65 6c 61 79 54        'maxDelayT
77500 69 6d 65 27 3a 20 31 0a 09 20 20 20 20 7d 3b 0a  ime': 1..    };.
77510 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43  .    /**... *  C
77520 6c 65 61 6e 20 75 70 2e 20 0a 09 09 20 2a 20 20  lean up. ... *  
77530 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 50  @returns {Tone.P
77540 69 6e 67 50 6f 6e 67 44 65 6c 61 79 7d 20 74 68  ingPongDelay} th
77550 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  is... */..    To
77560 6e 65 2e 50 69 6e 67 50 6f 6e 67 44 65 6c 61 79  ne.PingPongDelay
77570 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f  .prototype.dispo
77580 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  se = function ()
77590 20 7b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65   {..        Tone
775a0 2e 53 74 65 72 65 6f 58 46 65 65 64 62 61 63 6b  .StereoXFeedback
775b0 45 66 66 65 63 74 2e 70 72 6f 74 6f 74 79 70 65  Effect.prototype
775c0 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68  .dispose.call(th
775d0 69 73 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  is);..        th
775e0 69 73 2e 5f 6c 65 66 74 44 65 6c 61 79 2e 64 69  is._leftDelay.di
775f0 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
77600 20 20 74 68 69 73 2e 5f 6c 65 66 74 44 65 6c 61    this._leftDela
77610 79 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20  y = null;..     
77620 20 20 20 74 68 69 73 2e 5f 72 69 67 68 74 44 65     this._rightDe
77630 6c 61 79 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09  lay.dispose();..
77640 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 72 69          this._ri
77650 67 68 74 44 65 6c 61 79 20 3d 20 6e 75 6c 6c 3b  ghtDelay = null;
77660 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
77670 72 69 67 68 74 50 72 65 44 65 6c 61 79 2e 64 69  rightPreDelay.di
77680 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
77690 20 20 74 68 69 73 2e 5f 72 69 67 68 74 50 72 65    this._rightPre
776a0 44 65 6c 61 79 20 3d 20 6e 75 6c 6c 3b 0a 09 20  Delay = null;.. 
776b0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 77 72 69         this._wri
776c0 74 61 62 6c 65 28 5b 27 64 65 6c 61 79 54 69 6d  table(['delayTim
776d0 65 27 5d 29 3b 0a 09 20 20 20 20 20 20 20 20 74  e']);..        t
776e0 68 69 73 2e 64 65 6c 61 79 54 69 6d 65 2e 64 69  his.delayTime.di
776f0 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
77700 20 20 74 68 69 73 2e 64 65 6c 61 79 54 69 6d 65    this.delayTime
77710 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
77720 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09    return this;..
77730 20 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74 75      };..    retu
77740 72 6e 20 54 6f 6e 65 2e 50 69 6e 67 50 6f 6e 67  rn Tone.PingPong
77750 44 65 6c 61 79 3b 0a 09 7d 29 3b 0a 09 4d 6f 64  Delay;..});..Mod
77760 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f  ule(function (To
77770 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09 20 20 20  ne) {..    ..   
77780 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61 73   /**... *  @clas
77790 73 20 54 6f 6e 65 2e 50 69 74 63 68 53 68 69 66  s Tone.PitchShif
777a0 74 20 64 6f 65 73 20 6e 65 61 72 2d 72 65 61 6c  t does near-real
777b0 74 69 6d 65 20 70 69 74 63 68 20 73 68 69 66 74  time pitch shift
777c0 69 6e 67 20 74 6f 20 74 68 65 20 69 6e 63 6f 6d  ing to the incom
777d0 69 6e 67 20 73 69 67 6e 61 6c 2e 20 0a 09 09 20  ing signal. ... 
777e0 2a 20 20 20 20 20 20 20 20 20 54 68 65 20 65 66  *         The ef
777f0 66 65 63 74 20 69 73 20 61 63 68 69 65 76 65 64  fect is achieved
77800 20 62 79 20 73 70 65 65 64 69 6e 67 20 75 70 20   by speeding up 
77810 6f 72 20 73 6c 6f 77 69 6e 67 20 64 6f 77 6e 20  or slowing down 
77820 74 68 65 20 64 65 6c 61 79 54 69 6d 65 0a 09 09  the delayTime...
77830 20 2a 20 20 20 20 20 20 20 20 20 6f 66 20 61 20   *         of a 
77840 44 65 6c 61 79 4e 6f 64 65 20 75 73 69 6e 67 20  DelayNode using 
77850 61 20 73 61 77 74 6f 6f 74 68 20 77 61 76 65 2e  a sawtooth wave.
77860 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 41   ... *         A
77870 6c 67 6f 72 69 74 68 6d 20 66 6f 75 6e 64 20 69  lgorithm found i
77880 6e 20 5b 74 68 69 73 20 70 64 66 5d 28 68 74 74  n [this pdf](htt
77890 70 3a 2f 2f 64 73 70 2d 62 6f 6f 6b 2e 6e 61 72  p://dsp-book.nar
778a0 6f 64 2e 72 75 2f 73 6f 75 6e 64 70 72 6f 63 2e  od.ru/soundproc.
778b0 70 64 66 29 2e 0a 09 09 20 2a 20 20 20 20 20 20  pdf).... *      
778c0 20 20 20 41 64 64 69 74 69 6f 6e 61 6c 20 72 65     Additional re
778d0 66 65 72 65 6e 63 65 20 62 79 20 5b 4d 69 6c 6c  ference by [Mill
778e0 65 72 20 50 75 63 6b 65 74 5d 28 68 74 74 70 3a  er Pucket](http:
778f0 2f 2f 6d 73 70 2e 75 63 73 64 2e 65 64 75 2f 74  //msp.ucsd.edu/t
77900 65 63 68 6e 69 71 75 65 73 2f 76 30 2e 31 31 2f  echniques/v0.11/
77910 62 6f 6f 6b 2d 68 74 6d 6c 2f 6e 6f 64 65 31 31  book-html/node11
77920 35 2e 68 74 6d 6c 29 2e 0a 09 09 20 2a 20 20 20  5.html).... *   
77930 20 20 20 20 20 20 0a 09 09 20 2a 20 20 40 65 78        ... *  @ex
77940 74 65 6e 64 73 20 7b 54 6f 6e 65 2e 46 65 65 64  tends {Tone.Feed
77950 62 61 63 6b 45 66 66 65 63 74 7d 0a 09 09 20 2a  backEffect}... *
77960 20 20 40 70 61 72 61 6d 20 7b 49 6e 74 65 72 76    @param {Interv
77970 61 6c 3d 7d 20 70 69 74 63 68 20 54 68 65 20 69  al=} pitch The i
77980 6e 74 65 72 76 61 6c 20 74 6f 20 74 72 61 6e 73  nterval to trans
77990 70 6f 73 65 20 74 68 65 20 69 6e 63 6f 6d 69 6e  pose the incomin
779a0 67 20 73 69 67 6e 61 6c 20 62 79 2e 20 0a 09 09  g signal by. ...
779b0 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50 69   */..    Tone.Pi
779c0 74 63 68 53 68 69 66 74 20 3d 20 66 75 6e 63 74  tchShift = funct
779d0 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
779e0 20 20 76 61 72 20 6f 70 74 69 6f 6e 73 20 3d 20    var options = 
779f0 74 68 69 73 2e 6f 70 74 69 6f 6e 73 4f 62 6a 65  this.optionsObje
77a00 63 74 28 61 72 67 75 6d 65 6e 74 73 2c 20 5b 27  ct(arguments, ['
77a10 70 69 74 63 68 27 5d 2c 20 54 6f 6e 65 2e 50 69  pitch'], Tone.Pi
77a20 74 63 68 53 68 69 66 74 2e 64 65 66 61 75 6c 74  tchShift.default
77a30 73 29 3b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e  s);..        Ton
77a40 65 2e 46 65 65 64 62 61 63 6b 45 66 66 65 63 74  e.FeedbackEffect
77a50 2e 63 61 6c 6c 28 74 68 69 73 2c 20 6f 70 74 69  .call(this, opti
77a60 6f 6e 73 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  ons);..        /
77a70 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 70 69  **.... *  The pi
77a80 74 63 68 20 73 69 67 6e 61 6c 0a 09 09 09 20 2a  tch signal.... *
77a90 20 20 40 74 79 70 65 20 20 7b 54 6f 6e 65 2e 53    @type  {Tone.S
77aa0 69 67 6e 61 6c 7d 0a 09 09 09 20 2a 20 20 40 70  ignal}.... *  @p
77ab0 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20  rivate.... */.. 
77ac0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 66 72 65         this._fre
77ad0 71 75 65 6e 63 79 20 3d 20 6e 65 77 20 54 6f 6e  quency = new Ton
77ae0 65 2e 53 69 67 6e 61 6c 28 30 29 3b 0a 09 20 20  e.Signal(0);..  
77af0 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
77b00 20 55 73 65 73 20 74 77 6f 20 44 65 6c 61 79 4e   Uses two DelayN
77b10 6f 64 65 73 20 74 6f 20 63 6f 76 65 72 20 75 70  odes to cover up
77b20 20 74 68 65 20 6a 75 6d 70 20 69 6e 0a 09 09 09   the jump in....
77b30 20 2a 20 20 74 68 65 20 73 61 77 74 6f 6f 74 68   *  the sawtooth
77b40 20 77 61 76 65 2e 20 0a 09 09 09 20 2a 20 20 40   wave. .... *  @
77b50 74 79 70 65 20 20 7b 44 65 6c 61 79 4e 6f 64 65  type  {DelayNode
77b60 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  }.... *  @privat
77b70 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
77b80 20 20 74 68 69 73 2e 5f 64 65 6c 61 79 41 20 3d    this._delayA =
77b90 20 6e 65 77 20 54 6f 6e 65 2e 44 65 6c 61 79 28   new Tone.Delay(
77ba0 30 2c 20 31 29 3b 0a 09 20 20 20 20 20 20 20 20  0, 1);..        
77bb0 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 66  /**.... *  The f
77bc0 69 72 73 74 20 4c 46 4f 2e 0a 09 09 09 20 2a 20  irst LFO..... * 
77bd0 20 40 74 79 70 65 20 20 7b 54 6f 6e 65 2e 4c 46   @type  {Tone.LF
77be0 4f 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61  O}.... *  @priva
77bf0 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  te.... */..     
77c00 20 20 20 74 68 69 73 2e 5f 6c 66 6f 41 20 3d 20     this._lfoA = 
77c10 6e 65 77 20 54 6f 6e 65 2e 4c 46 4f 28 7b 0a 09  new Tone.LFO({..
77c20 20 20 20 20 20 20 20 20 20 20 20 20 27 6d 69 6e              'min
77c30 27 3a 20 30 2c 0a 09 20 20 20 20 20 20 20 20 20  ': 0,..         
77c40 20 20 20 27 6d 61 78 27 3a 20 30 2e 31 2c 0a 09     'max': 0.1,..
77c50 20 20 20 20 20 20 20 20 20 20 20 20 27 74 79 70              'typ
77c60 65 27 3a 20 27 73 61 77 74 6f 6f 74 68 27 0a 09  e': 'sawtooth'..
77c70 20 20 20 20 20 20 20 20 7d 29 2e 63 6f 6e 6e 65          }).conne
77c80 63 74 28 74 68 69 73 2e 5f 64 65 6c 61 79 41 2e  ct(this._delayA.
77c90 64 65 6c 61 79 54 69 6d 65 29 3b 0a 09 20 20 20  delayTime);..   
77ca0 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
77cb0 54 68 65 20 73 65 63 6f 6e 64 20 44 65 6c 61 79  The second Delay
77cc0 4e 6f 64 65 0a 09 09 09 20 2a 20 20 40 74 79 70  Node.... *  @typ
77cd0 65 20 20 7b 44 65 6c 61 79 4e 6f 64 65 7d 0a 09  e  {DelayNode}..
77ce0 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
77cf0 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
77d00 68 69 73 2e 5f 64 65 6c 61 79 42 20 3d 20 6e 65  his._delayB = ne
77d10 77 20 54 6f 6e 65 2e 44 65 6c 61 79 28 30 2c 20  w Tone.Delay(0, 
77d20 31 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  1);..        /**
77d30 0a 09 09 09 20 2a 20 20 54 68 65 20 66 69 72 73  .... *  The firs
77d40 74 20 4c 46 4f 2e 0a 09 09 09 20 2a 20 20 40 74  t LFO..... *  @t
77d50 79 70 65 20 20 7b 54 6f 6e 65 2e 4c 46 4f 7d 0a  ype  {Tone.LFO}.
77d60 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
77d70 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
77d80 74 68 69 73 2e 5f 6c 66 6f 42 20 3d 20 6e 65 77  this._lfoB = new
77d90 20 54 6f 6e 65 2e 4c 46 4f 28 7b 0a 09 20 20 20   Tone.LFO({..   
77da0 20 20 20 20 20 20 20 20 20 27 6d 69 6e 27 3a 20           'min': 
77db0 30 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  0,..            
77dc0 27 6d 61 78 27 3a 20 30 2e 31 2c 0a 09 20 20 20  'max': 0.1,..   
77dd0 20 20 20 20 20 20 20 20 20 27 74 79 70 65 27 3a           'type':
77de0 20 27 73 61 77 74 6f 6f 74 68 27 2c 0a 09 20 20   'sawtooth',..  
77df0 20 20 20 20 20 20 20 20 20 20 27 70 68 61 73 65            'phase
77e00 27 3a 20 31 38 30 0a 09 20 20 20 20 20 20 20 20  ': 180..        
77e10 7d 29 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e  }).connect(this.
77e20 5f 64 65 6c 61 79 42 2e 64 65 6c 61 79 54 69 6d  _delayB.delayTim
77e30 65 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  e);..        /**
77e40 0a 09 09 09 20 2a 20 20 43 72 6f 73 73 66 61 64  .... *  Crossfad
77e50 65 20 71 75 69 63 6b 6c 79 20 62 65 74 77 65 65  e quickly betwee
77e60 6e 20 74 68 65 20 74 77 6f 20 64 65 6c 61 79 20  n the two delay 
77e70 6c 69 6e 65 73 0a 09 09 09 20 2a 20 20 74 6f 20  lines.... *  to 
77e80 63 6f 76 65 72 20 75 70 20 74 68 65 20 6a 75 6d  cover up the jum
77e90 70 20 69 6e 20 74 68 65 20 73 61 77 74 6f 6f 74  p in the sawtoot
77ea0 68 20 77 61 76 65 0a 09 09 09 20 2a 20 20 40 74  h wave.... *  @t
77eb0 79 70 65 20 20 7b 54 6f 6e 65 2e 43 72 6f 73 73  ype  {Tone.Cross
77ec0 46 61 64 65 7d 0a 09 09 09 20 2a 20 20 40 70 72  Fade}.... *  @pr
77ed0 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20  ivate.... */..  
77ee0 20 20 20 20 20 20 74 68 69 73 2e 5f 63 72 6f 73        this._cros
77ef0 73 46 61 64 65 20 3d 20 6e 65 77 20 54 6f 6e 65  sFade = new Tone
77f00 2e 43 72 6f 73 73 46 61 64 65 28 29 3b 0a 09 20  .CrossFade();.. 
77f10 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
77f20 20 20 4c 46 4f 20 77 68 69 63 68 20 61 6c 74 65    LFO which alte
77f30 72 6e 61 74 65 73 20 62 65 74 77 65 65 6e 20 74  rnates between t
77f40 68 65 20 74 77 6f 0a 09 09 09 20 2a 20 20 64 65  he two.... *  de
77f50 6c 61 79 20 6c 69 6e 65 73 20 74 6f 20 63 6f 76  lay lines to cov
77f60 65 72 20 75 70 20 74 68 65 20 64 69 73 70 61 72  er up the dispar
77f70 69 74 79 20 69 6e 20 74 68 65 0a 09 09 09 20 2a  ity in the.... *
77f80 20 20 73 61 77 74 6f 6f 74 68 20 77 61 76 65 2e    sawtooth wave.
77f90 20 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 20   .... *  @type  
77fa0 7b 54 6f 6e 65 2e 4c 46 4f 7d 0a 09 09 09 20 2a  {Tone.LFO}.... *
77fb0 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a    @private.... *
77fc0 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
77fd0 5f 63 72 6f 73 73 46 61 64 65 4c 46 4f 20 3d 20  _crossFadeLFO = 
77fe0 6e 65 77 20 54 6f 6e 65 2e 4c 46 4f 28 7b 0a 09  new Tone.LFO({..
77ff0 20 20 20 20 20 20 20 20 20 20 20 20 27 6d 69 6e              'min
78000 27 3a 20 30 2c 0a 09 20 20 20 20 20 20 20 20 20  ': 0,..         
78010 20 20 20 27 6d 61 78 27 3a 20 31 2c 0a 09 20 20     'max': 1,..  
78020 20 20 20 20 20 20 20 20 20 20 27 74 79 70 65 27            'type'
78030 3a 20 27 74 72 69 61 6e 67 6c 65 27 2c 0a 09 20  : 'triangle',.. 
78040 20 20 20 20 20 20 20 20 20 20 20 27 70 68 61 73             'phas
78050 65 27 3a 20 39 30 0a 09 20 20 20 20 20 20 20 20  e': 90..        
78060 7d 29 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e  }).connect(this.
78070 5f 63 72 6f 73 73 46 61 64 65 2e 66 61 64 65 29  _crossFade.fade)
78080 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
78090 09 09 20 2a 20 20 54 68 65 20 64 65 6c 61 79 20  .. *  The delay 
780a0 6e 6f 64 65 0a 09 09 09 20 2a 20 20 40 74 79 70  node.... *  @typ
780b0 65 20 7b 54 6f 6e 65 2e 44 65 6c 61 79 7d 0a 09  e {Tone.Delay}..
780c0 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
780d0 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
780e0 68 69 73 2e 5f 66 65 65 64 62 61 63 6b 44 65 6c  his._feedbackDel
780f0 61 79 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 44 65  ay = new Tone.De
78100 6c 61 79 28 6f 70 74 69 6f 6e 73 2e 64 65 6c 61  lay(options.dela
78110 79 54 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20  yTime);..       
78120 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20   /**.... *  The 
78130 61 6d 6f 75 6e 74 20 6f 66 20 64 65 6c 61 79 20  amount of delay 
78140 6f 6e 20 74 68 65 20 69 6e 70 75 74 20 73 69 67  on the input sig
78150 6e 61 6c 0a 09 09 09 20 2a 20 20 40 74 79 70 65  nal.... *  @type
78160 20 7b 54 69 6d 65 7d 0a 09 09 09 20 2a 20 20 40   {Time}.... *  @
78170 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f 0a 09 20  signal.... */.. 
78180 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 6c 61         this.dela
78190 79 54 69 6d 65 20 3d 20 74 68 69 73 2e 5f 66 65  yTime = this._fe
781a0 65 64 62 61 63 6b 44 65 6c 61 79 2e 64 65 6c 61  edbackDelay.dela
781b0 79 54 69 6d 65 3b 0a 09 20 20 20 20 20 20 20 20  yTime;..        
781c0 74 68 69 73 2e 5f 72 65 61 64 4f 6e 6c 79 28 27  this._readOnly('
781d0 64 65 6c 61 79 54 69 6d 65 27 29 3b 0a 09 20 20  delayTime');..  
781e0 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
781f0 20 48 6f 6c 64 20 74 68 65 20 63 75 72 72 65 6e   Hold the curren
78200 74 20 70 69 74 63 68 0a 09 09 09 20 2a 20 20 40  t pitch.... *  @
78210 74 79 70 65 20 7b 4e 75 6d 62 65 72 7d 0a 09 09  type {Number}...
78220 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
78230 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
78240 69 73 2e 5f 70 69 74 63 68 20 3d 20 6f 70 74 69  is._pitch = opti
78250 6f 6e 73 2e 70 69 74 63 68 3b 0a 09 20 20 20 20  ons.pitch;..    
78260 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 48      /**.... *  H
78270 6f 6c 64 20 74 68 65 20 63 75 72 72 65 6e 74 20  old the current 
78280 77 69 6e 64 6f 77 53 69 7a 65 0a 09 09 09 20 2a  windowSize.... *
78290 20 20 40 74 79 70 65 20 7b 4e 75 6d 62 65 72 7d    @type {Number}
782a0 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  .... *  @private
782b0 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
782c0 20 74 68 69 73 2e 5f 77 69 6e 64 6f 77 53 69 7a   this._windowSiz
782d0 65 20 3d 20 6f 70 74 69 6f 6e 73 2e 77 69 6e 64  e = options.wind
782e0 6f 77 53 69 7a 65 3b 0a 09 20 20 20 20 20 20 20  owSize;..       
782f0 20 2f 2f 63 6f 6e 6e 65 63 74 20 74 68 65 20 74   //connect the t
78300 77 6f 20 64 65 6c 61 79 20 6c 69 6e 65 73 20 75  wo delay lines u
78310 70 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  p..        this.
78320 5f 64 65 6c 61 79 41 2e 63 6f 6e 6e 65 63 74 28  _delayA.connect(
78330 74 68 69 73 2e 5f 63 72 6f 73 73 46 61 64 65 2e  this._crossFade.
78340 61 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  a);..        thi
78350 73 2e 5f 64 65 6c 61 79 42 2e 63 6f 6e 6e 65 63  s._delayB.connec
78360 74 28 74 68 69 73 2e 5f 63 72 6f 73 73 46 61 64  t(this._crossFad
78370 65 2e 62 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  e.b);..        /
78380 2f 63 6f 6e 6e 65 63 74 20 74 68 65 20 66 72 65  /connect the fre
78390 71 75 65 6e 63 79 0a 09 20 20 20 20 20 20 20 20  quency..        
783a0 74 68 69 73 2e 5f 66 72 65 71 75 65 6e 63 79 2e  this._frequency.
783b0 66 61 6e 28 74 68 69 73 2e 5f 6c 66 6f 41 2e 66  fan(this._lfoA.f
783c0 72 65 71 75 65 6e 63 79 2c 20 74 68 69 73 2e 5f  requency, this._
783d0 6c 66 6f 42 2e 66 72 65 71 75 65 6e 63 79 2c 20  lfoB.frequency, 
783e0 74 68 69 73 2e 5f 63 72 6f 73 73 46 61 64 65 4c  this._crossFadeL
783f0 46 4f 2e 66 72 65 71 75 65 6e 63 79 29 3b 0a 09  FO.frequency);..
78400 20 20 20 20 20 20 20 20 2f 2f 72 6f 75 74 65 20          //route 
78410 74 68 65 20 69 6e 70 75 74 0a 09 20 20 20 20 20  the input..     
78420 20 20 20 74 68 69 73 2e 65 66 66 65 63 74 53 65     this.effectSe
78430 6e 64 2e 66 61 6e 28 74 68 69 73 2e 5f 64 65 6c  nd.fan(this._del
78440 61 79 41 2c 20 74 68 69 73 2e 5f 64 65 6c 61 79  ayA, this._delay
78450 42 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  B);..        thi
78460 73 2e 5f 63 72 6f 73 73 46 61 64 65 2e 63 68 61  s._crossFade.cha
78470 69 6e 28 74 68 69 73 2e 5f 66 65 65 64 62 61 63  in(this._feedbac
78480 6b 44 65 6c 61 79 2c 20 74 68 69 73 2e 65 66 66  kDelay, this.eff
78490 65 63 74 52 65 74 75 72 6e 29 3b 0a 09 20 20 20  ectReturn);..   
784a0 20 20 20 20 20 2f 2f 73 74 61 72 74 20 74 68 65       //start the
784b0 20 4c 46 4f 73 20 61 74 20 74 68 65 20 73 61 6d   LFOs at the sam
784c0 65 20 74 69 6d 65 0a 09 20 20 20 20 20 20 20 20  e time..        
784d0 76 61 72 20 6e 6f 77 20 3d 20 74 68 69 73 2e 6e  var now = this.n
784e0 6f 77 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74  ow();..        t
784f0 68 69 73 2e 5f 6c 66 6f 41 2e 73 74 61 72 74 28  his._lfoA.start(
78500 6e 6f 77 29 3b 0a 09 20 20 20 20 20 20 20 20 74  now);..        t
78510 68 69 73 2e 5f 6c 66 6f 42 2e 73 74 61 72 74 28  his._lfoB.start(
78520 6e 6f 77 29 3b 0a 09 20 20 20 20 20 20 20 20 74  now);..        t
78530 68 69 73 2e 5f 63 72 6f 73 73 46 61 64 65 4c 46  his._crossFadeLF
78540 4f 2e 73 74 61 72 74 28 6e 6f 77 29 3b 0a 09 20  O.start(now);.. 
78550 20 20 20 20 20 20 20 2f 2f 73 65 74 20 74 68 65         //set the
78560 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 0a 09   initial value..
78570 20 20 20 20 20 20 20 20 74 68 69 73 2e 77 69 6e          this.win
78580 64 6f 77 53 69 7a 65 20 3d 20 74 68 69 73 2e 5f  dowSize = this._
78590 77 69 6e 64 6f 77 53 69 7a 65 3b 0a 09 20 20 20  windowSize;..   
785a0 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65 2e 65 78   };..    Tone.ex
785b0 74 65 6e 64 28 54 6f 6e 65 2e 50 69 74 63 68 53  tend(Tone.PitchS
785c0 68 69 66 74 2c 20 54 6f 6e 65 2e 46 65 65 64 62  hift, Tone.Feedb
785d0 61 63 6b 45 66 66 65 63 74 29 3b 0a 09 20 20 20  ackEffect);..   
785e0 20 2f 2a 2a 0a 09 09 20 2a 20 20 64 65 66 61 75   /**... *  defau
785f0 6c 74 20 76 61 6c 75 65 73 0a 09 09 20 2a 20 20  lt values... *  
78600 40 73 74 61 74 69 63 0a 09 09 20 2a 20 20 40 74  @static... *  @t
78610 79 70 65 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20  ype {Object}... 
78620 2a 20 20 40 63 6f 6e 73 74 0a 09 09 20 2a 2f 0a  *  @const... */.
78630 09 20 20 20 20 54 6f 6e 65 2e 50 69 74 63 68 53  .    Tone.PitchS
78640 68 69 66 74 2e 64 65 66 61 75 6c 74 73 20 3d 20  hift.defaults = 
78650 7b 0a 09 20 20 20 20 20 20 20 20 27 70 69 74 63  {..        'pitc
78660 68 27 3a 20 30 2c 0a 09 20 20 20 20 20 20 20 20  h': 0,..        
78670 27 77 69 6e 64 6f 77 53 69 7a 65 27 3a 20 30 2e  'windowSize': 0.
78680 31 2c 0a 09 20 20 20 20 20 20 20 20 27 64 65 6c  1,..        'del
78690 61 79 54 69 6d 65 27 3a 20 30 2c 0a 09 20 20 20  ayTime': 0,..   
786a0 20 20 20 20 20 27 66 65 65 64 62 61 63 6b 27 3a       'feedback':
786b0 20 30 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20   0..    };..    
786c0 2f 2a 2a 0a 09 09 20 2a 20 52 65 70 69 74 63 68  /**... * Repitch
786d0 20 74 68 65 20 69 6e 63 6f 6d 69 6e 67 20 73 69   the incoming si
786e0 67 6e 61 6c 20 62 79 20 73 6f 6d 65 20 69 6e 74  gnal by some int
786f0 65 72 76 61 6c 20 28 6d 65 61 73 75 72 65 64 0a  erval (measured.
78700 09 09 20 2a 20 69 6e 20 73 65 6d 69 2d 74 6f 6e  .. * in semi-ton
78710 65 73 29 2e 20 0a 09 09 20 2a 20 40 6d 65 6d 62  es). ... * @memb
78720 65 72 4f 66 20 54 6f 6e 65 2e 50 69 74 63 68 53  erOf Tone.PitchS
78730 68 69 66 74 23 0a 09 09 20 2a 20 40 74 79 70 65  hift#... * @type
78740 20 7b 49 6e 74 65 72 76 61 6c 7d 0a 09 09 20 2a   {Interval}... *
78750 20 40 6e 61 6d 65 20 70 69 74 63 68 0a 09 09 20   @name pitch... 
78760 2a 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20  * @example... * 
78770 70 69 74 63 68 53 68 69 66 74 2e 70 69 74 63 68  pitchShift.pitch
78780 20 3d 20 2d 31 32 3b 20 2f 2f 64 6f 77 6e 20 6f   = -12; //down o
78790 6e 65 20 6f 63 74 61 76 65 0a 09 09 20 2a 20 70  ne octave... * p
787a0 69 74 63 68 53 68 69 66 74 2e 70 69 74 63 68 20  itchShift.pitch 
787b0 3d 20 37 3b 20 2f 2f 75 70 20 61 20 66 69 66 74  = 7; //up a fift
787c0 68 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a  h... */..    Obj
787d0 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72  ect.defineProper
787e0 74 79 28 54 6f 6e 65 2e 50 69 74 63 68 53 68 69  ty(Tone.PitchShi
787f0 66 74 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 70  ft.prototype, 'p
78800 69 74 63 68 27 2c 20 7b 0a 09 20 20 20 20 20 20  itch', {..      
78810 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    get: function 
78820 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  () {..          
78830 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 70    return this._p
78840 69 74 63 68 3b 0a 09 20 20 20 20 20 20 20 20 7d  itch;..        }
78850 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20  ,..        set: 
78860 66 75 6e 63 74 69 6f 6e 20 28 69 6e 74 65 72 76  function (interv
78870 61 6c 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  al) {..         
78880 20 20 20 74 68 69 73 2e 5f 70 69 74 63 68 20 3d     this._pitch =
78890 20 69 6e 74 65 72 76 61 6c 3b 0a 09 20 20 20 20   interval;..    
788a0 20 20 20 20 20 20 20 20 76 61 72 20 66 61 63 74          var fact
788b0 6f 72 20 3d 20 30 3b 0a 09 20 20 20 20 20 20 20  or = 0;..       
788c0 20 20 20 20 20 69 66 20 28 69 6e 74 65 72 76 61       if (interva
788d0 6c 20 3c 20 30 29 20 7b 0a 09 20 20 20 20 20 20  l < 0) {..      
788e0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
788f0 6c 66 6f 41 2e 6d 69 6e 20 3d 20 30 3b 0a 09 20  lfoA.min = 0;.. 
78900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
78910 68 69 73 2e 5f 6c 66 6f 41 2e 6d 61 78 20 3d 20  his._lfoA.max = 
78920 74 68 69 73 2e 5f 77 69 6e 64 6f 77 53 69 7a 65  this._windowSize
78930 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
78940 20 20 20 74 68 69 73 2e 5f 6c 66 6f 42 2e 6d 69     this._lfoB.mi
78950 6e 20 3d 20 30 3b 0a 09 20 20 20 20 20 20 20 20  n = 0;..        
78960 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 66          this._lf
78970 6f 42 2e 6d 61 78 20 3d 20 74 68 69 73 2e 5f 77  oB.max = this._w
78980 69 6e 64 6f 77 53 69 7a 65 3b 0a 09 20 20 20 20  indowSize;..    
78990 20 20 20 20 20 20 20 20 20 20 20 20 66 61 63 74              fact
789a0 6f 72 20 3d 20 74 68 69 73 2e 69 6e 74 65 72 76  or = this.interv
789b0 61 6c 54 6f 46 72 65 71 75 65 6e 63 79 52 61 74  alToFrequencyRat
789c0 69 6f 28 69 6e 74 65 72 76 61 6c 20 2d 20 31 29  io(interval - 1)
789d0 20 2b 20 31 3b 0a 09 20 20 20 20 20 20 20 20 20   + 1;..         
789e0 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20     } else {..   
789f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
78a00 73 2e 5f 6c 66 6f 41 2e 6d 69 6e 20 3d 20 74 68  s._lfoA.min = th
78a10 69 73 2e 5f 77 69 6e 64 6f 77 53 69 7a 65 3b 0a  is._windowSize;.
78a20 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
78a30 20 74 68 69 73 2e 5f 6c 66 6f 41 2e 6d 61 78 20   this._lfoA.max 
78a40 3d 20 30 3b 0a 09 20 20 20 20 20 20 20 20 20 20  = 0;..          
78a50 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 66 6f 42        this._lfoB
78a60 2e 6d 69 6e 20 3d 20 74 68 69 73 2e 5f 77 69 6e  .min = this._win
78a70 64 6f 77 53 69 7a 65 3b 0a 09 20 20 20 20 20 20  dowSize;..      
78a80 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
78a90 6c 66 6f 42 2e 6d 61 78 20 3d 20 30 3b 0a 09 20  lfoB.max = 0;.. 
78aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
78ab0 61 63 74 6f 72 20 3d 20 74 68 69 73 2e 69 6e 74  actor = this.int
78ac0 65 72 76 61 6c 54 6f 46 72 65 71 75 65 6e 63 79  ervalToFrequency
78ad0 52 61 74 69 6f 28 69 6e 74 65 72 76 61 6c 29 20  Ratio(interval) 
78ae0 2d 20 31 3b 0a 09 20 20 20 20 20 20 20 20 20 20  - 1;..          
78af0 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20    }..           
78b00 20 74 68 69 73 2e 5f 66 72 65 71 75 65 6e 63 79   this._frequency
78b10 2e 76 61 6c 75 65 20 3d 20 66 61 63 74 6f 72 20  .value = factor 
78b20 2a 20 28 31 2e 32 20 2f 20 74 68 69 73 2e 5f 77  * (1.2 / this._w
78b30 69 6e 64 6f 77 53 69 7a 65 29 3b 0a 09 20 20 20  indowSize);..   
78b40 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a       }..    });.
78b50 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68  .    /**... * Th
78b60 65 20 77 69 6e 64 6f 77 20 73 69 7a 65 20 63 6f  e window size co
78b70 72 72 65 73 70 6f 6e 64 73 20 72 6f 75 67 68 6c  rresponds roughl
78b80 79 20 74 6f 20 74 68 65 20 73 61 6d 70 6c 65 20  y to the sample 
78b90 6c 65 6e 67 74 68 20 69 6e 20 61 20 6c 6f 6f 70  length in a loop
78ba0 69 6e 67 20 73 61 6d 70 6c 65 72 2e 20 0a 09 09  ing sampler. ...
78bb0 20 2a 20 53 6d 61 6c 6c 65 72 20 76 61 6c 75 65   * Smaller value
78bc0 73 20 61 72 65 20 64 65 73 69 72 61 62 6c 65 20  s are desirable 
78bd0 66 6f 72 20 61 20 6c 65 73 73 20 6e 6f 74 69 63  for a less notic
78be0 65 61 62 6c 65 20 64 65 6c 61 79 20 74 69 6d 65  eable delay time
78bf0 20 6f 66 20 74 68 65 20 70 69 74 63 68 20 73 68   of the pitch sh
78c00 69 66 74 65 64 0a 09 09 20 2a 20 73 69 67 6e 61  ifted... * signa
78c10 6c 2c 20 62 75 74 20 6c 61 72 67 65 72 20 76 61  l, but larger va
78c20 6c 75 65 73 20 77 69 6c 6c 20 72 65 73 75 6c 74  lues will result
78c30 20 69 6e 20 73 6d 6f 6f 74 68 65 72 20 70 69 74   in smoother pit
78c40 63 68 20 73 68 69 66 74 69 6e 67 20 66 6f 72 20  ch shifting for 
78c50 6c 61 72 67 65 72 20 69 6e 74 65 72 76 61 6c 73  larger intervals
78c60 2e 20 0a 09 09 20 2a 20 41 20 6e 6f 6d 69 6e 61  . ... * A nomina
78c70 6c 20 72 61 6e 67 65 20 6f 66 20 30 2e 30 33 20  l range of 0.03 
78c80 74 6f 20 30 2e 31 20 69 73 20 72 65 63 6f 6d 6d  to 0.1 is recomm
78c90 65 6e 64 65 64 2e 20 0a 09 09 20 2a 20 40 6d 65  ended. ... * @me
78ca0 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 50 69 74 63  mberOf Tone.Pitc
78cb0 68 53 68 69 66 74 23 0a 09 09 20 2a 20 40 74 79  hShift#... * @ty
78cc0 70 65 20 7b 54 69 6d 65 7d 0a 09 09 20 2a 20 40  pe {Time}... * @
78cd0 6e 61 6d 65 20 77 69 6e 64 6f 77 53 69 7a 65 0a  name windowSize.
78ce0 09 09 20 2a 20 40 65 78 61 6d 70 6c 65 0a 09 09  .. * @example...
78cf0 20 2a 20 70 69 74 63 68 53 68 69 66 74 2e 77 69   * pitchShift.wi
78d00 6e 64 6f 77 53 69 7a 65 20 3d 20 30 2e 31 3b 0a  ndowSize = 0.1;.
78d10 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63  .. */..    Objec
78d20 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79  t.defineProperty
78d30 28 54 6f 6e 65 2e 50 69 74 63 68 53 68 69 66 74  (Tone.PitchShift
78d40 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 77 69 6e  .prototype, 'win
78d50 64 6f 77 53 69 7a 65 27 2c 20 7b 0a 09 20 20 20  dowSize', {..   
78d60 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69       get: functi
78d70 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
78d80 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
78d90 2e 5f 77 69 6e 64 6f 77 53 69 7a 65 3b 0a 09 20  ._windowSize;.. 
78da0 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20         },..     
78db0 20 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e     set: function
78dc0 20 28 73 69 7a 65 29 20 7b 0a 09 20 20 20 20 20   (size) {..     
78dd0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 77 69 6e         this._win
78de0 64 6f 77 53 69 7a 65 20 3d 20 74 68 69 73 2e 74  dowSize = this.t
78df0 6f 53 65 63 6f 6e 64 73 28 73 69 7a 65 29 3b 0a  oSeconds(size);.
78e00 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
78e10 73 2e 70 69 74 63 68 20 3d 20 74 68 69 73 2e 5f  s.pitch = this._
78e20 70 69 74 63 68 3b 0a 09 20 20 20 20 20 20 20 20  pitch;..        
78e30 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20  }..    });..    
78e40 2f 2a 2a 0a 09 09 20 2a 20 20 43 6c 65 61 6e 20  /**... *  Clean 
78e50 75 70 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72  up.... *  @retur
78e60 6e 20 20 7b 54 6f 6e 65 2e 50 69 74 63 68 53 68  n  {Tone.PitchSh
78e70 69 66 74 7d 20 20 74 68 69 73 0a 09 09 20 2a 2f  ift}  this... */
78e80 0a 09 20 20 20 20 54 6f 6e 65 2e 50 69 74 63 68  ..    Tone.Pitch
78e90 53 68 69 66 74 2e 70 72 6f 74 6f 74 79 70 65 2e  Shift.prototype.
78ea0 64 69 73 70 6f 73 65 20 3d 20 66 75 6e 63 74 69  dispose = functi
78eb0 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
78ec0 20 54 6f 6e 65 2e 46 65 65 64 62 61 63 6b 45 66   Tone.FeedbackEf
78ed0 66 65 63 74 2e 70 72 6f 74 6f 74 79 70 65 2e 64  fect.prototype.d
78ee0 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69 73  ispose.call(this
78ef0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
78f00 2e 5f 66 72 65 71 75 65 6e 63 79 2e 64 69 73 70  ._frequency.disp
78f10 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ose();..        
78f20 74 68 69 73 2e 5f 66 72 65 71 75 65 6e 63 79 20  this._frequency 
78f30 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
78f40 20 74 68 69 73 2e 5f 64 65 6c 61 79 41 2e 64 69   this._delayA.di
78f50 73 63 6f 6e 6e 65 63 74 28 29 3b 0a 09 20 20 20  sconnect();..   
78f60 20 20 20 20 20 74 68 69 73 2e 5f 64 65 6c 61 79       this._delay
78f70 41 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20  A = null;..     
78f80 20 20 20 74 68 69 73 2e 5f 64 65 6c 61 79 42 2e     this._delayB.
78f90 64 69 73 63 6f 6e 6e 65 63 74 28 29 3b 0a 09 20  disconnect();.. 
78fa0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 64 65 6c         this._del
78fb0 61 79 42 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  ayB = null;..   
78fc0 20 20 20 20 20 74 68 69 73 2e 5f 6c 66 6f 41 2e       this._lfoA.
78fd0 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20  dispose();..    
78fe0 20 20 20 20 74 68 69 73 2e 5f 6c 66 6f 41 20 3d      this._lfoA =
78ff0 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
79000 74 68 69 73 2e 5f 6c 66 6f 42 2e 64 69 73 70 6f  this._lfoB.dispo
79010 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74  se();..        t
79020 68 69 73 2e 5f 6c 66 6f 42 20 3d 20 6e 75 6c 6c  his._lfoB = null
79030 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
79040 5f 63 72 6f 73 73 46 61 64 65 2e 64 69 73 70 6f  _crossFade.dispo
79050 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74  se();..        t
79060 68 69 73 2e 5f 63 72 6f 73 73 46 61 64 65 20 3d  his._crossFade =
79070 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
79080 74 68 69 73 2e 5f 63 72 6f 73 73 46 61 64 65 4c  this._crossFadeL
79090 46 4f 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20  FO.dispose();.. 
790a0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 63 72 6f         this._cro
790b0 73 73 46 61 64 65 4c 46 4f 20 3d 20 6e 75 6c 6c  ssFadeLFO = null
790c0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
790d0 5f 77 72 69 74 61 62 6c 65 28 27 64 65 6c 61 79  _writable('delay
790e0 54 69 6d 65 27 29 3b 0a 09 20 20 20 20 20 20 20  Time');..       
790f0 20 74 68 69 73 2e 5f 66 65 65 64 62 61 63 6b 44   this._feedbackD
79100 65 6c 61 79 2e 64 69 73 70 6f 73 65 28 29 3b 0a  elay.dispose();.
79110 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 66  .        this._f
79120 65 65 64 62 61 63 6b 44 65 6c 61 79 20 3d 20 6e  eedbackDelay = n
79130 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ull;..        th
79140 69 73 2e 64 65 6c 61 79 54 69 6d 65 20 3d 20 6e  is.delayTime = n
79150 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 72 65  ull;..        re
79160 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20  turn this;..    
79170 7d 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54  };..    return T
79180 6f 6e 65 2e 50 69 74 63 68 53 68 69 66 74 3b 0a  one.PitchShift;.
79190 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e  .});..Module(fun
791a0 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09  ction (Tone) {..
791b0 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09      ..    /**...
791c0 20 2a 20 20 40 63 6c 61 73 73 20 42 61 73 65 20   *  @class Base 
791d0 63 6c 61 73 73 20 66 6f 72 20 73 74 65 72 65 6f  class for stereo
791e0 20 66 65 65 64 62 61 63 6b 20 65 66 66 65 63 74   feedback effect
791f0 73 20 77 68 65 72 65 20 74 68 65 20 65 66 66 65  s where the effe
79200 63 74 52 65 74 75 72 6e 0a 09 09 20 2a 20 20 20  ctReturn... *   
79210 20 20 20 20 20 20 69 73 20 66 65 64 20 62 61 63        is fed bac
79220 6b 20 69 6e 74 6f 20 74 68 65 20 73 61 6d 65 20  k into the same 
79230 63 68 61 6e 6e 65 6c 2e 20 0a 09 09 20 2a 0a 09  channel. ... *..
79240 09 20 2a 09 40 63 6f 6e 73 74 72 75 63 74 6f 72  . *.@constructor
79250 0a 09 09 20 2a 09 40 65 78 74 65 6e 64 73 20 7b  ... *.@extends {
79260 54 6f 6e 65 2e 46 65 65 64 62 61 63 6b 45 66 66  Tone.FeedbackEff
79270 65 63 74 7d 0a 09 09 20 2a 2f 0a 09 20 20 20 20  ect}... */..    
79280 54 6f 6e 65 2e 53 74 65 72 65 6f 46 65 65 64 62  Tone.StereoFeedb
79290 61 63 6b 45 66 66 65 63 74 20 3d 20 66 75 6e 63  ackEffect = func
792a0 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
792b0 20 20 20 76 61 72 20 6f 70 74 69 6f 6e 73 20 3d     var options =
792c0 20 74 68 69 73 2e 6f 70 74 69 6f 6e 73 4f 62 6a   this.optionsObj
792d0 65 63 74 28 61 72 67 75 6d 65 6e 74 73 2c 20 5b  ect(arguments, [
792e0 27 66 65 65 64 62 61 63 6b 27 5d 2c 20 54 6f 6e  'feedback'], Ton
792f0 65 2e 46 65 65 64 62 61 63 6b 45 66 66 65 63 74  e.FeedbackEffect
79300 2e 64 65 66 61 75 6c 74 73 29 3b 0a 09 20 20 20  .defaults);..   
79310 20 20 20 20 20 54 6f 6e 65 2e 53 74 65 72 65 6f       Tone.Stereo
79320 45 66 66 65 63 74 2e 63 61 6c 6c 28 74 68 69 73  Effect.call(this
79330 2c 20 6f 70 74 69 6f 6e 73 29 3b 0a 09 20 20 20  , options);..   
79340 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
79350 63 6f 6e 74 72 6f 6c 73 20 74 68 65 20 61 6d 6f  controls the amo
79360 75 6e 74 20 6f 66 20 66 65 65 64 62 61 63 6b 0a  unt of feedback.
79370 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4e 6f  ... *  @type {No
79380 72 6d 61 6c 52 61 6e 67 65 7d 0a 09 09 09 20 2a  rmalRange}.... *
79390 20 20 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f    @signal.... */
793a0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 66  ..        this.f
793b0 65 65 64 62 61 63 6b 20 3d 20 6e 65 77 20 54 6f  eedback = new To
793c0 6e 65 2e 53 69 67 6e 61 6c 28 6f 70 74 69 6f 6e  ne.Signal(option
793d0 73 2e 66 65 65 64 62 61 63 6b 2c 20 54 6f 6e 65  s.feedback, Tone
793e0 2e 54 79 70 65 2e 4e 6f 72 6d 61 6c 52 61 6e 67  .Type.NormalRang
793f0 65 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  e);..        /**
79400 0a 09 09 09 20 2a 20 20 74 68 65 20 6c 65 66 74  .... *  the left
79410 20 73 69 64 65 20 66 65 65 62 61 63 6b 0a 09 09   side feeback...
79420 09 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65  . *  @type {Tone
79430 2e 47 61 69 6e 7d 0a 09 09 09 20 2a 20 20 40 70  .Gain}.... *  @p
79440 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20  rivate.... */.. 
79450 20 20 20 20 20 20 20 74 68 69 73 2e 5f 66 65 65         this._fee
79460 64 62 61 63 6b 4c 20 3d 20 6e 65 77 20 54 6f 6e  dbackL = new Ton
79470 65 2e 47 61 69 6e 28 29 3b 0a 09 20 20 20 20 20  e.Gain();..     
79480 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 74 68     /**.... *  th
79490 65 20 72 69 67 68 74 20 73 69 64 65 20 66 65 65  e right side fee
794a0 62 61 63 6b 0a 09 09 09 20 2a 20 20 40 74 79 70  back.... *  @typ
794b0 65 20 7b 54 6f 6e 65 2e 47 61 69 6e 7d 0a 09 09  e {Tone.Gain}...
794c0 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
794d0 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
794e0 69 73 2e 5f 66 65 65 64 62 61 63 6b 52 20 3d 20  is._feedbackR = 
794f0 6e 65 77 20 54 6f 6e 65 2e 47 61 69 6e 28 29 3b  new Tone.Gain();
79500 0a 09 20 20 20 20 20 20 20 20 2f 2f 63 6f 6e 6e  ..        //conn
79510 65 63 74 20 69 74 20 75 70 0a 09 20 20 20 20 20  ect it up..     
79520 20 20 20 74 68 69 73 2e 65 66 66 65 63 74 52 65     this.effectRe
79530 74 75 72 6e 4c 2e 63 68 61 69 6e 28 74 68 69 73  turnL.chain(this
79540 2e 5f 66 65 65 64 62 61 63 6b 4c 2c 20 74 68 69  ._feedbackL, thi
79550 73 2e 65 66 66 65 63 74 53 65 6e 64 4c 29 3b 0a  s.effectSendL);.
79560 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 65 66  .        this.ef
79570 66 65 63 74 52 65 74 75 72 6e 52 2e 63 68 61 69  fectReturnR.chai
79580 6e 28 74 68 69 73 2e 5f 66 65 65 64 62 61 63 6b  n(this._feedback
79590 52 2c 20 74 68 69 73 2e 65 66 66 65 63 74 53 65  R, this.effectSe
795a0 6e 64 52 29 3b 0a 09 20 20 20 20 20 20 20 20 74  ndR);..        t
795b0 68 69 73 2e 66 65 65 64 62 61 63 6b 2e 66 61 6e  his.feedback.fan
795c0 28 74 68 69 73 2e 5f 66 65 65 64 62 61 63 6b 4c  (this._feedbackL
795d0 2e 67 61 69 6e 2c 20 74 68 69 73 2e 5f 66 65 65  .gain, this._fee
795e0 64 62 61 63 6b 52 2e 67 61 69 6e 29 3b 0a 09 20  dbackR.gain);.. 
795f0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 72 65 61         this._rea
79600 64 4f 6e 6c 79 28 5b 27 66 65 65 64 62 61 63 6b  dOnly(['feedback
79610 27 5d 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  ']);..    };..  
79620 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f    Tone.extend(To
79630 6e 65 2e 53 74 65 72 65 6f 46 65 65 64 62 61 63  ne.StereoFeedbac
79640 6b 45 66 66 65 63 74 2c 20 54 6f 6e 65 2e 46 65  kEffect, Tone.Fe
79650 65 64 62 61 63 6b 45 66 66 65 63 74 29 3b 0a 09  edbackEffect);..
79660 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 63 6c      /**... *  cl
79670 65 61 6e 20 75 70 0a 09 09 20 2a 20 20 40 72 65  ean up... *  @re
79680 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 53 74 65 72  turns {Tone.Ster
79690 65 6f 46 65 65 64 62 61 63 6b 45 66 66 65 63 74  eoFeedbackEffect
796a0 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20  } this... */..  
796b0 20 20 54 6f 6e 65 2e 53 74 65 72 65 6f 46 65 65    Tone.StereoFee
796c0 64 62 61 63 6b 45 66 66 65 63 74 2e 70 72 6f 74  dbackEffect.prot
796d0 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20  otype.dispose = 
796e0 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
796f0 20 20 20 20 20 20 20 54 6f 6e 65 2e 53 74 65 72         Tone.Ster
79700 65 6f 45 66 66 65 63 74 2e 70 72 6f 74 6f 74 79  eoEffect.prototy
79710 70 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28  pe.dispose.call(
79720 74 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20 20  this);..        
79730 74 68 69 73 2e 5f 77 72 69 74 61 62 6c 65 28 5b  this._writable([
79740 27 66 65 65 64 62 61 63 6b 27 5d 29 3b 0a 09 20  'feedback']);.. 
79750 20 20 20 20 20 20 20 74 68 69 73 2e 66 65 65 64         this.feed
79760 62 61 63 6b 2e 64 69 73 70 6f 73 65 28 29 3b 0a  back.dispose();.
79770 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 66 65  .        this.fe
79780 65 64 62 61 63 6b 20 3d 20 6e 75 6c 6c 3b 0a 09  edback = null;..
79790 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 66 65          this._fe
797a0 65 64 62 61 63 6b 4c 2e 64 69 73 70 6f 73 65 28  edbackL.dispose(
797b0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
797c0 2e 5f 66 65 65 64 62 61 63 6b 4c 20 3d 20 6e 75  ._feedbackL = nu
797d0 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ll;..        thi
797e0 73 2e 5f 66 65 65 64 62 61 63 6b 52 2e 64 69 73  s._feedbackR.dis
797f0 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20  pose();..       
79800 20 74 68 69 73 2e 5f 66 65 65 64 62 61 63 6b 52   this._feedbackR
79810 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
79820 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09    return this;..
79830 20 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74 75      };..    retu
79840 72 6e 20 54 6f 6e 65 2e 53 74 65 72 65 6f 46 65  rn Tone.StereoFe
79850 65 64 62 61 63 6b 45 66 66 65 63 74 3b 0a 09 7d  edbackEffect;..}
79860 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74  );..Module(funct
79870 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20  ion (Tone) {..  
79880 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a    ..    /**... *
79890 20 20 40 63 6c 61 73 73 20 41 70 70 6c 69 65 73    @class Applies
798a0 20 61 20 77 69 64 74 68 20 66 61 63 74 6f 72 20   a width factor 
798b0 74 6f 20 74 68 65 20 6d 69 64 2f 73 69 64 65 20  to the mid/side 
798c0 73 65 70 65 72 61 74 69 6f 6e 2e 20 0a 09 09 20  seperation. ... 
798d0 2a 20 20 20 20 20 20 20 20 20 30 20 69 73 20 61  *         0 is a
798e0 6c 6c 20 6d 69 64 20 61 6e 64 20 31 20 69 73 20  ll mid and 1 is 
798f0 61 6c 6c 20 73 69 64 65 2e 0a 09 09 20 2a 20 20  all side.... *  
79900 20 20 20 20 20 20 20 41 6c 67 6f 72 69 74 68 6d         Algorithm
79910 20 66 6f 75 6e 64 20 69 6e 20 5b 6b 76 72 61 75   found in [kvrau
79920 64 69 6f 20 66 6f 72 75 6d 73 5d 28 68 74 74 70  dio forums](http
79930 3a 2f 2f 77 77 77 2e 6b 76 72 61 75 64 69 6f 2e  ://www.kvraudio.
79940 63 6f 6d 2f 66 6f 72 75 6d 2f 76 69 65 77 74 6f  com/forum/viewto
79950 70 69 63 2e 70 68 70 3f 74 3d 32 31 32 35 38 37  pic.php?t=212587
79960 29 2e 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  ).... *         
79970 3c 62 72 3e 3c 62 72 3e 0a 09 09 20 2a 20 20 20  <br><br>... *   
79980 20 20 20 20 20 20 3c 63 6f 64 65 3e 0a 09 09 20        <code>... 
79990 2a 20 20 20 20 20 20 20 20 20 4d 69 64 20 2a 3d  *         Mid *=
799a0 20 32 2a 28 31 2d 77 69 64 74 68 29 3c 62 72 3e   2*(1-width)<br>
799b0 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 53 69  ... *         Si
799c0 64 65 20 2a 3d 20 32 2a 77 69 64 74 68 0a 09 09  de *= 2*width...
799d0 20 2a 20 20 20 20 20 20 20 20 20 3c 2f 63 6f 64   *         </cod
799e0 65 3e 0a 09 09 20 2a 0a 09 09 20 2a 20 20 40 65  e>... *... *  @e
799f0 78 74 65 6e 64 73 20 7b 54 6f 6e 65 2e 4d 69 64  xtends {Tone.Mid
79a00 53 69 64 65 45 66 66 65 63 74 7d 0a 09 09 20 2a  SideEffect}... *
79a10 20 20 40 63 6f 6e 73 74 72 75 63 74 6f 72 0a 09    @constructor..
79a20 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 4e 6f 72  . *  @param {Nor
79a30 6d 61 6c 52 61 6e 67 65 7c 4f 62 6a 65 63 74 7d  malRange|Object}
79a40 20 5b 77 69 64 74 68 5d 20 54 68 65 20 73 74 65   [width] The ste
79a50 72 65 6f 20 77 69 64 74 68 2e 20 41 20 77 69 64  reo width. A wid
79a60 74 68 20 6f 66 20 30 20 69 73 20 6d 6f 6e 6f 20  th of 0 is mono 
79a70 61 6e 64 20 31 20 69 73 20 73 74 65 72 65 6f 2e  and 1 is stereo.
79a80 20 30 2e 35 20 69 73 20 6e 6f 20 63 68 61 6e 67   0.5 is no chang
79a90 65 2e 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  e.... */..    To
79aa0 6e 65 2e 53 74 65 72 65 6f 57 69 64 65 6e 65 72  ne.StereoWidener
79ab0 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b   = function () {
79ac0 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 6f 70  ..        var op
79ad0 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e 6f 70 74  tions = this.opt
79ae0 69 6f 6e 73 4f 62 6a 65 63 74 28 61 72 67 75 6d  ionsObject(argum
79af0 65 6e 74 73 2c 20 5b 27 77 69 64 74 68 27 5d 2c  ents, ['width'],
79b00 20 54 6f 6e 65 2e 53 74 65 72 65 6f 57 69 64 65   Tone.StereoWide
79b10 6e 65 72 2e 64 65 66 61 75 6c 74 73 29 3b 0a 09  ner.defaults);..
79b20 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 4d 69 64          Tone.Mid
79b30 53 69 64 65 45 66 66 65 63 74 2e 63 61 6c 6c 28  SideEffect.call(
79b40 74 68 69 73 2c 20 6f 70 74 69 6f 6e 73 29 3b 0a  this, options);.
79b50 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
79b60 20 2a 20 20 54 68 65 20 77 69 64 74 68 20 63 6f   *  The width co
79b70 6e 74 72 6f 6c 2e 20 30 20 3d 20 31 30 30 25 20  ntrol. 0 = 100% 
79b80 6d 69 64 2e 20 31 20 3d 20 31 30 30 25 20 73 69  mid. 1 = 100% si
79b90 64 65 2e 20 30 2e 35 20 3d 20 6e 6f 20 63 68 61  de. 0.5 = no cha
79ba0 6e 67 65 2e 20 0a 09 09 09 20 2a 20 20 40 74 79  nge. .... *  @ty
79bb0 70 65 20 7b 4e 6f 72 6d 61 6c 52 61 6e 67 65 7d  pe {NormalRange}
79bc0 0a 09 09 09 20 2a 20 20 40 73 69 67 6e 61 6c 0a  .... *  @signal.
79bd0 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
79be0 74 68 69 73 2e 77 69 64 74 68 20 3d 20 6e 65 77  this.width = new
79bf0 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 28 6f 70 74   Tone.Signal(opt
79c00 69 6f 6e 73 2e 77 69 64 74 68 2c 20 54 6f 6e 65  ions.width, Tone
79c10 2e 54 79 70 65 2e 4e 6f 72 6d 61 6c 52 61 6e 67  .Type.NormalRang
79c20 65 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  e);..        /**
79c30 0a 09 09 09 20 2a 20 20 4d 69 64 20 6d 75 6c 74  .... *  Mid mult
79c40 69 70 6c 69 65 72 0a 09 09 09 20 2a 20 20 40 74  iplier.... *  @t
79c50 79 70 65 20 7b 54 6f 6e 65 2e 45 78 70 72 7d 0a  ype {Tone.Expr}.
79c60 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
79c70 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
79c80 74 68 69 73 2e 5f 6d 69 64 4d 75 6c 74 20 3d 20  this._midMult = 
79c90 6e 65 77 20 54 6f 6e 65 2e 45 78 70 72 28 27 24  new Tone.Expr('$
79ca0 30 20 2a 20 28 24 31 20 2a 20 28 31 20 2d 20 24  0 * ($1 * (1 - $
79cb0 32 29 29 27 29 3b 0a 09 20 20 20 20 20 20 20 20  2))');..        
79cc0 2f 2a 2a 0a 09 09 09 20 2a 20 20 53 69 64 65 20  /**.... *  Side 
79cd0 6d 75 6c 74 69 70 6c 69 65 72 0a 09 09 09 20 2a  multiplier.... *
79ce0 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 45 78    @type {Tone.Ex
79cf0 70 72 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76  pr}.... *  @priv
79d00 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  ate.... */..    
79d10 20 20 20 20 74 68 69 73 2e 5f 73 69 64 65 4d 75      this._sideMu
79d20 6c 74 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 45 78  lt = new Tone.Ex
79d30 70 72 28 27 24 30 20 2a 20 28 24 31 20 2a 20 24  pr('$0 * ($1 * $
79d40 32 29 27 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  2)');..        /
79d50 2a 2a 0a 09 09 09 20 2a 20 20 63 6f 6e 73 74 61  **.... *  consta
79d60 6e 74 20 6f 75 74 70 75 74 20 6f 66 20 32 0a 09  nt output of 2..
79d70 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e  .. *  @type {Ton
79d80 65 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61  e}.... *  @priva
79d90 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  te.... */..     
79da0 20 20 20 74 68 69 73 2e 5f 74 77 6f 20 3d 20 6e     this._two = n
79db0 65 77 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 28 32  ew Tone.Signal(2
79dc0 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 74 68  );..        //th
79dd0 65 20 6d 69 64 20 63 68 61 69 6e 0a 09 20 20 20  e mid chain..   
79de0 20 20 20 20 20 74 68 69 73 2e 5f 74 77 6f 2e 63       this._two.c
79df0 6f 6e 6e 65 63 74 28 74 68 69 73 2e 5f 6d 69 64  onnect(this._mid
79e00 4d 75 6c 74 2c 20 30 2c 20 31 29 3b 0a 09 20 20  Mult, 0, 1);..  
79e10 20 20 20 20 20 20 74 68 69 73 2e 77 69 64 74 68        this.width
79e20 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e 5f 6d  .connect(this._m
79e30 69 64 4d 75 6c 74 2c 20 30 2c 20 32 29 3b 0a 09  idMult, 0, 2);..
79e40 20 20 20 20 20 20 20 20 2f 2f 74 68 65 20 73 69          //the si
79e50 64 65 20 63 68 61 69 6e 0a 09 20 20 20 20 20 20  de chain..      
79e60 20 20 74 68 69 73 2e 5f 74 77 6f 2e 63 6f 6e 6e    this._two.conn
79e70 65 63 74 28 74 68 69 73 2e 5f 73 69 64 65 4d 75  ect(this._sideMu
79e80 6c 74 2c 20 30 2c 20 31 29 3b 0a 09 20 20 20 20  lt, 0, 1);..    
79e90 20 20 20 20 74 68 69 73 2e 77 69 64 74 68 2e 63      this.width.c
79ea0 6f 6e 6e 65 63 74 28 74 68 69 73 2e 5f 73 69 64  onnect(this._sid
79eb0 65 4d 75 6c 74 2c 20 30 2c 20 32 29 3b 0a 09 20  eMult, 0, 2);.. 
79ec0 20 20 20 20 20 20 20 2f 2f 63 6f 6e 6e 65 63 74         //connect
79ed0 20 69 74 20 74 6f 20 74 68 65 20 65 66 66 65 63   it to the effec
79ee0 74 20 73 65 6e 64 2f 72 65 74 75 72 6e 0a 09 20  t send/return.. 
79ef0 20 20 20 20 20 20 20 74 68 69 73 2e 6d 69 64 53         this.midS
79f00 65 6e 64 2e 63 68 61 69 6e 28 74 68 69 73 2e 5f  end.chain(this._
79f10 6d 69 64 4d 75 6c 74 2c 20 74 68 69 73 2e 6d 69  midMult, this.mi
79f20 64 52 65 74 75 72 6e 29 3b 0a 09 20 20 20 20 20  dReturn);..     
79f30 20 20 20 74 68 69 73 2e 73 69 64 65 53 65 6e 64     this.sideSend
79f40 2e 63 68 61 69 6e 28 74 68 69 73 2e 5f 73 69 64  .chain(this._sid
79f50 65 4d 75 6c 74 2c 20 74 68 69 73 2e 73 69 64 65  eMult, this.side
79f60 52 65 74 75 72 6e 29 3b 0a 09 20 20 20 20 20 20  Return);..      
79f70 20 20 74 68 69 73 2e 5f 72 65 61 64 4f 6e 6c 79    this._readOnly
79f80 28 5b 27 77 69 64 74 68 27 5d 29 3b 0a 09 20 20  (['width']);..  
79f90 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65 2e 65    };..    Tone.e
79fa0 78 74 65 6e 64 28 54 6f 6e 65 2e 53 74 65 72 65  xtend(Tone.Stere
79fb0 6f 57 69 64 65 6e 65 72 2c 20 54 6f 6e 65 2e 4d  oWidener, Tone.M
79fc0 69 64 53 69 64 65 45 66 66 65 63 74 29 3b 0a 09  idSideEffect);..
79fd0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 74 68      /**... *  th
79fe0 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73  e default values
79ff0 0a 09 09 20 2a 20 20 40 73 74 61 74 69 63 0a 09  ... *  @static..
7a000 09 20 2a 20 20 40 74 79 70 65 20 7b 4f 62 6a 65  . *  @type {Obje
7a010 63 74 7d 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  ct}... */..    T
7a020 6f 6e 65 2e 53 74 65 72 65 6f 57 69 64 65 6e 65  one.StereoWidene
7a030 72 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b 20 27  r.defaults = { '
7a040 77 69 64 74 68 27 3a 20 30 2e 35 20 7d 3b 0a 09  width': 0.5 };..
7a050 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 6c      /**... *  Cl
7a060 65 61 6e 20 75 70 2e 20 0a 09 09 20 2a 20 20 40  ean up. ... *  @
7a070 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 53 74  returns {Tone.St
7a080 65 72 65 6f 57 69 64 65 6e 65 72 7d 20 74 68 69  ereoWidener} thi
7a090 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  s... */..    Ton
7a0a0 65 2e 53 74 65 72 65 6f 57 69 64 65 6e 65 72 2e  e.StereoWidener.
7a0b0 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73  prototype.dispos
7a0c0 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  e = function () 
7a0d0 7b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e  {..        Tone.
7a0e0 4d 69 64 53 69 64 65 45 66 66 65 63 74 2e 70 72  MidSideEffect.pr
7a0f0 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 2e  ototype.dispose.
7a100 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20 20  call(this);..   
7a110 20 20 20 20 20 74 68 69 73 2e 5f 77 72 69 74 61       this._writa
7a120 62 6c 65 28 5b 27 77 69 64 74 68 27 5d 29 3b 0a  ble(['width']);.
7a130 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 77 69  .        this.wi
7a140 64 74 68 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09  dth.dispose();..
7a150 20 20 20 20 20 20 20 20 74 68 69 73 2e 77 69 64          this.wid
7a160 74 68 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  th = null;..    
7a170 20 20 20 20 74 68 69 73 2e 5f 6d 69 64 4d 75 6c      this._midMul
7a180 74 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20  t.dispose();..  
7a190 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 69 64 4d        this._midM
7a1a0 75 6c 74 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  ult = null;..   
7a1b0 20 20 20 20 20 74 68 69 73 2e 5f 73 69 64 65 4d       this._sideM
7a1c0 75 6c 74 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09  ult.dispose();..
7a1d0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 69          this._si
7a1e0 64 65 4d 75 6c 74 20 3d 20 6e 75 6c 6c 3b 0a 09  deMult = null;..
7a1f0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 74 77          this._tw
7a200 6f 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20  o.dispose();..  
7a210 20 20 20 20 20 20 74 68 69 73 2e 5f 74 77 6f 20        this._two 
7a220 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
7a230 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20   return this;.. 
7a240 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74 75 72     };..    retur
7a250 6e 20 54 6f 6e 65 2e 53 74 65 72 65 6f 57 69 64  n Tone.StereoWid
7a260 65 6e 65 72 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75  ener;..});..Modu
7a270 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e  le(function (Ton
7a280 65 29 20 7b 0a 09 20 20 20 20 0a 09 20 20 20 20  e) {..    ..    
7a290 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61 73 73  /**... *  @class
7a2a0 20 54 6f 6e 65 2e 54 72 65 6d 6f 6c 6f 20 6d 6f   Tone.Tremolo mo
7a2b0 64 75 6c 61 74 65 73 20 74 68 65 20 61 6d 70 6c  dulates the ampl
7a2c0 69 74 75 64 65 20 6f 66 20 61 6e 20 69 6e 63 6f  itude of an inco
7a2d0 6d 69 6e 67 20 73 69 67 6e 61 6c 20 75 73 69 6e  ming signal usin
7a2e0 67 20 61 20 54 6f 6e 65 2e 4c 46 4f 2e 0a 09 09  g a Tone.LFO....
7a2f0 20 2a 20 20 20 20 20 20 20 20 20 54 68 65 20 74   *         The t
7a300 79 70 65 2c 20 66 72 65 71 75 65 6e 63 79 2c 20  ype, frequency, 
7a310 61 6e 64 20 64 65 70 74 68 20 6f 66 20 74 68 65  and depth of the
7a320 20 4c 46 4f 20 69 73 20 63 6f 6e 74 72 6f 6c 6c   LFO is controll
7a330 61 62 6c 65 2e 0a 09 09 20 2a 0a 09 09 20 2a 20  able.... *... * 
7a340 20 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65 2e   @extends {Tone.
7a350 53 74 65 72 65 6f 45 66 66 65 63 74 7d 0a 09 09  StereoEffect}...
7a360 20 2a 20 20 40 63 6f 6e 73 74 72 75 63 74 6f 72   *  @constructor
7a370 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 46  ... *  @param {F
7a380 72 65 71 75 65 6e 63 79 7d 20 5b 66 72 65 71 75  requency} [frequ
7a390 65 6e 63 79 5d 20 54 68 65 20 72 61 74 65 20 6f  ency] The rate o
7a3a0 66 20 74 68 65 20 65 66 66 65 63 74 2e 0a 09 09  f the effect....
7a3b0 20 2a 20 20 40 70 61 72 61 6d 20 7b 4e 6f 72 6d   *  @param {Norm
7a3c0 61 6c 52 61 6e 67 65 7d 20 5b 64 65 70 74 68 5d  alRange} [depth]
7a3d0 20 54 68 65 20 64 65 70 74 68 20 6f 66 20 74 68   The depth of th
7a3e0 65 20 65 66 66 65 63 74 2e 0a 09 09 20 2a 20 20  e effect.... *  
7a3f0 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 2f 2f  @example... * //
7a400 63 72 65 61 74 65 20 61 20 74 72 65 6d 6f 6c 6f  create a tremolo
7a410 20 61 6e 64 20 73 74 61 72 74 20 69 74 27 73 20   and start it's 
7a420 4c 46 4f 0a 09 09 20 2a 20 76 61 72 20 74 72 65  LFO... * var tre
7a430 6d 6f 6c 6f 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  molo = new Tone.
7a440 54 72 65 6d 6f 6c 6f 28 39 2c 20 30 2e 37 35 29  Tremolo(9, 0.75)
7a450 2e 74 6f 4d 61 73 74 65 72 28 29 2e 73 74 61 72  .toMaster().star
7a460 74 28 29 3b 0a 09 09 20 2a 20 2f 2f 72 6f 75 74  t();... * //rout
7a470 65 20 61 6e 20 6f 73 63 69 6c 6c 61 74 6f 72 20  e an oscillator 
7a480 74 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 6d  through the trem
7a490 6f 6c 6f 20 61 6e 64 20 73 74 61 72 74 20 69 74  olo and start it
7a4a0 0a 09 09 20 2a 20 76 61 72 20 6f 73 63 69 6c 6c  ... * var oscill
7a4b0 61 74 6f 72 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  ator = new Tone.
7a4c0 4f 73 63 69 6c 6c 61 74 6f 72 28 29 2e 63 6f 6e  Oscillator().con
7a4d0 6e 65 63 74 28 74 72 65 6d 6f 6c 6f 29 2e 73 74  nect(tremolo).st
7a4e0 61 72 74 28 29 3b 0a 09 09 20 2a 2f 0a 09 20 20  art();... */..  
7a4f0 20 20 54 6f 6e 65 2e 54 72 65 6d 6f 6c 6f 20 3d    Tone.Tremolo =
7a500 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
7a510 20 20 20 20 20 20 20 20 76 61 72 20 6f 70 74 69          var opti
7a520 6f 6e 73 20 3d 20 74 68 69 73 2e 6f 70 74 69 6f  ons = this.optio
7a530 6e 73 4f 62 6a 65 63 74 28 61 72 67 75 6d 65 6e  nsObject(argumen
7a540 74 73 2c 20 5b 0a 09 20 20 20 20 20 20 20 20 20  ts, [..         
7a550 20 20 20 27 66 72 65 71 75 65 6e 63 79 27 2c 0a     'frequency',.
7a560 09 20 20 20 20 20 20 20 20 20 20 20 20 27 64 65  .            'de
7a570 70 74 68 27 0a 09 20 20 20 20 20 20 20 20 5d 2c  pth'..        ],
7a580 20 54 6f 6e 65 2e 54 72 65 6d 6f 6c 6f 2e 64 65   Tone.Tremolo.de
7a590 66 61 75 6c 74 73 29 3b 0a 09 20 20 20 20 20 20  faults);..      
7a5a0 20 20 54 6f 6e 65 2e 53 74 65 72 65 6f 45 66 66    Tone.StereoEff
7a5b0 65 63 74 2e 63 61 6c 6c 28 74 68 69 73 2c 20 6f  ect.call(this, o
7a5c0 70 74 69 6f 6e 73 29 3b 0a 09 20 20 20 20 20 20  ptions);..      
7a5d0 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65    /**.... *  The
7a5e0 20 74 72 65 6d 65 6c 6f 20 4c 46 4f 20 69 6e 20   tremelo LFO in 
7a5f0 74 68 65 20 6c 65 66 74 20 63 68 61 6e 6e 65 6c  the left channel
7a600 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 20 7b  .... *  @type  {
7a610 54 6f 6e 65 2e 4c 46 4f 7d 0a 09 09 09 20 2a 20  Tone.LFO}.... * 
7a620 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f   @private.... */
7a630 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
7a640 6c 66 6f 4c 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  lfoL = new Tone.
7a650 4c 46 4f 28 7b 0a 09 20 20 20 20 20 20 20 20 20  LFO({..         
7a660 20 20 20 27 70 68 61 73 65 27 3a 20 6f 70 74 69     'phase': opti
7a670 6f 6e 73 2e 73 70 72 65 61 64 2c 0a 09 20 20 20  ons.spread,..   
7a680 20 20 20 20 20 20 20 20 20 27 6d 69 6e 27 3a 20           'min': 
7a690 31 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  1,..            
7a6a0 27 6d 61 78 27 3a 20 30 0a 09 20 20 20 20 20 20  'max': 0..      
7a6b0 20 20 7d 29 3b 0a 09 20 20 20 20 20 20 20 20 2f    });..        /
7a6c0 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 74 72  **.... *  The tr
7a6d0 65 6d 65 6c 6f 20 4c 46 4f 20 69 6e 20 74 68 65  emelo LFO in the
7a6e0 20 6c 65 66 74 20 63 68 61 6e 6e 65 6c 0a 09 09   left channel...
7a6f0 09 20 2a 20 20 40 74 79 70 65 20 20 7b 54 6f 6e  . *  @type  {Ton
7a700 65 2e 4c 46 4f 7d 0a 09 09 09 20 2a 20 20 40 70  e.LFO}.... *  @p
7a710 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20  rivate.... */.. 
7a720 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 66 6f         this._lfo
7a730 52 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4c 46 4f  R = new Tone.LFO
7a740 28 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ({..            
7a750 27 70 68 61 73 65 27 3a 20 6f 70 74 69 6f 6e 73  'phase': options
7a760 2e 73 70 72 65 61 64 2c 0a 09 20 20 20 20 20 20  .spread,..      
7a770 20 20 20 20 20 20 27 6d 69 6e 27 3a 20 31 2c 0a        'min': 1,.
7a780 09 20 20 20 20 20 20 20 20 20 20 20 20 27 6d 61  .            'ma
7a790 78 27 3a 20 30 0a 09 20 20 20 20 20 20 20 20 7d  x': 0..        }
7a7a0 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
7a7b0 09 09 09 20 2a 20 20 57 68 65 72 65 20 74 68 65  ... *  Where the
7a7c0 20 67 61 69 6e 20 69 73 20 6d 75 6c 74 69 70 6c   gain is multipl
7a7d0 69 65 64 0a 09 09 09 20 2a 20 20 40 74 79 70 65  ied.... *  @type
7a7e0 20 20 7b 54 6f 6e 65 2e 47 61 69 6e 7d 0a 09 09    {Tone.Gain}...
7a7f0 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
7a800 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
7a810 69 73 2e 5f 61 6d 70 6c 69 74 75 64 65 4c 20 3d  is._amplitudeL =
7a820 20 6e 65 77 20 54 6f 6e 65 2e 47 61 69 6e 28 29   new Tone.Gain()
7a830 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
7a840 09 09 20 2a 20 20 57 68 65 72 65 20 74 68 65 20  .. *  Where the 
7a850 67 61 69 6e 20 69 73 20 6d 75 6c 74 69 70 6c 69  gain is multipli
7a860 65 64 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  ed.... *  @type 
7a870 20 7b 54 6f 6e 65 2e 47 61 69 6e 7d 0a 09 09 09   {Tone.Gain}....
7a880 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
7a890 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
7a8a0 73 2e 5f 61 6d 70 6c 69 74 75 64 65 52 20 3d 20  s._amplitudeR = 
7a8b0 6e 65 77 20 54 6f 6e 65 2e 47 61 69 6e 28 29 3b  new Tone.Gain();
7a8c0 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
7a8d0 09 20 2a 20 20 54 68 65 20 66 72 65 71 75 65 6e  . *  The frequen
7a8e0 63 79 20 6f 66 20 74 68 65 20 74 72 65 6d 6f 6c  cy of the tremol
7a8f0 6f 2e 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  o..... *  @type 
7a900 20 7b 46 72 65 71 75 65 6e 63 79 7d 0a 09 09 09   {Frequency}....
7a910 20 2a 20 20 40 73 69 67 6e 61 6c 0a 09 09 09 20   *  @signal.... 
7a920 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
7a930 2e 66 72 65 71 75 65 6e 63 79 20 3d 20 6e 65 77  .frequency = new
7a940 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 28 6f 70 74   Tone.Signal(opt
7a950 69 6f 6e 73 2e 66 72 65 71 75 65 6e 63 79 2c 20  ions.frequency, 
7a960 54 6f 6e 65 2e 54 79 70 65 2e 46 72 65 71 75 65  Tone.Type.Freque
7a970 6e 63 79 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  ncy);..        /
7a980 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 64 65  **.... *  The de
7a990 70 74 68 20 6f 66 20 74 68 65 20 65 66 66 65 63  pth of the effec
7a9a0 74 2e 20 41 20 64 65 70 74 68 20 6f 66 20 30 2c  t. A depth of 0,
7a9b0 20 68 61 73 20 6e 6f 20 65 66 66 65 63 74 0a 09   has no effect..
7a9c0 09 09 20 2a 20 20 6f 6e 20 74 68 65 20 61 6d 70  .. *  on the amp
7a9d0 6c 69 74 75 64 65 2c 20 61 6e 64 20 61 20 64 65  litude, and a de
7a9e0 70 74 68 20 6f 66 20 31 20 6d 61 6b 65 73 20 74  pth of 1 makes t
7a9f0 68 65 20 61 6d 70 6c 69 74 75 64 65 0a 09 09 09  he amplitude....
7aa00 20 2a 20 20 6d 6f 64 75 6c 61 74 65 20 66 75 6c   *  modulate ful
7aa10 6c 79 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64  ly between 0 and
7aa20 20 31 2e 0a 09 09 09 20 2a 20 20 40 74 79 70 65   1..... *  @type
7aa30 20 20 7b 4e 6f 72 6d 61 6c 52 61 6e 67 65 7d 0a    {NormalRange}.
7aa40 09 09 09 20 2a 20 20 40 73 69 67 6e 61 6c 0a 09  ... *  @signal..
7aa50 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
7aa60 68 69 73 2e 64 65 70 74 68 20 3d 20 6e 65 77 20  his.depth = new 
7aa70 54 6f 6e 65 2e 53 69 67 6e 61 6c 28 6f 70 74 69  Tone.Signal(opti
7aa80 6f 6e 73 2e 64 65 70 74 68 2c 20 54 6f 6e 65 2e  ons.depth, Tone.
7aa90 54 79 70 65 2e 4e 6f 72 6d 61 6c 52 61 6e 67 65  Type.NormalRange
7aaa0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
7aab0 2e 5f 72 65 61 64 4f 6e 6c 79 28 5b 0a 09 20 20  ._readOnly([..  
7aac0 20 20 20 20 20 20 20 20 20 20 27 66 72 65 71 75            'frequ
7aad0 65 6e 63 79 27 2c 0a 09 20 20 20 20 20 20 20 20  ency',..        
7aae0 20 20 20 20 27 64 65 70 74 68 27 0a 09 20 20 20      'depth'..   
7aaf0 20 20 20 20 20 5d 29 3b 0a 09 20 20 20 20 20 20       ]);..      
7ab00 20 20 74 68 69 73 2e 65 66 66 65 63 74 53 65 6e    this.effectSen
7ab10 64 4c 2e 63 68 61 69 6e 28 74 68 69 73 2e 5f 61  dL.chain(this._a
7ab20 6d 70 6c 69 74 75 64 65 4c 2c 20 74 68 69 73 2e  mplitudeL, this.
7ab30 65 66 66 65 63 74 52 65 74 75 72 6e 4c 29 3b 0a  effectReturnL);.
7ab40 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 65 66  .        this.ef
7ab50 66 65 63 74 53 65 6e 64 52 2e 63 68 61 69 6e 28  fectSendR.chain(
7ab60 74 68 69 73 2e 5f 61 6d 70 6c 69 74 75 64 65 52  this._amplitudeR
7ab70 2c 20 74 68 69 73 2e 65 66 66 65 63 74 52 65 74  , this.effectRet
7ab80 75 72 6e 52 29 3b 0a 09 20 20 20 20 20 20 20 20  urnR);..        
7ab90 74 68 69 73 2e 5f 6c 66 6f 4c 2e 63 6f 6e 6e 65  this._lfoL.conne
7aba0 63 74 28 74 68 69 73 2e 5f 61 6d 70 6c 69 74 75  ct(this._amplitu
7abb0 64 65 4c 2e 67 61 69 6e 29 3b 0a 09 20 20 20 20  deL.gain);..    
7abc0 20 20 20 20 74 68 69 73 2e 5f 6c 66 6f 52 2e 63      this._lfoR.c
7abd0 6f 6e 6e 65 63 74 28 74 68 69 73 2e 5f 61 6d 70  onnect(this._amp
7abe0 6c 69 74 75 64 65 52 2e 67 61 69 6e 29 3b 0a 09  litudeR.gain);..
7abf0 20 20 20 20 20 20 20 20 74 68 69 73 2e 66 72 65          this.fre
7ac00 71 75 65 6e 63 79 2e 66 61 6e 28 74 68 69 73 2e  quency.fan(this.
7ac10 5f 6c 66 6f 4c 2e 66 72 65 71 75 65 6e 63 79 2c  _lfoL.frequency,
7ac20 20 74 68 69 73 2e 5f 6c 66 6f 52 2e 66 72 65 71   this._lfoR.freq
7ac30 75 65 6e 63 79 29 3b 0a 09 20 20 20 20 20 20 20  uency);..       
7ac40 20 74 68 69 73 2e 64 65 70 74 68 2e 66 61 6e 28   this.depth.fan(
7ac50 74 68 69 73 2e 5f 6c 66 6f 52 2e 61 6d 70 6c 69  this._lfoR.ampli
7ac60 74 75 64 65 2c 20 74 68 69 73 2e 5f 6c 66 6f 4c  tude, this._lfoL
7ac70 2e 61 6d 70 6c 69 74 75 64 65 29 3b 0a 09 20 20  .amplitude);..  
7ac80 20 20 20 20 20 20 74 68 69 73 2e 74 79 70 65 20        this.type 
7ac90 3d 20 6f 70 74 69 6f 6e 73 2e 74 79 70 65 3b 0a  = options.type;.
7aca0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 70  .        this.sp
7acb0 72 65 61 64 20 3d 20 6f 70 74 69 6f 6e 73 2e 73  read = options.s
7acc0 70 72 65 61 64 3b 0a 09 20 20 20 20 7d 3b 0a 09  pread;..    };..
7acd0 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28      Tone.extend(
7ace0 54 6f 6e 65 2e 54 72 65 6d 6f 6c 6f 2c 20 54 6f  Tone.Tremolo, To
7acf0 6e 65 2e 53 74 65 72 65 6f 45 66 66 65 63 74 29  ne.StereoEffect)
7ad00 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
7ad10 20 40 73 74 61 74 69 63 0a 09 09 20 2a 20 20 40   @static... *  @
7ad20 63 6f 6e 73 74 0a 09 09 20 2a 20 20 40 74 79 70  const... *  @typ
7ad30 65 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 2f  e {Object}... */
7ad40 0a 09 20 20 20 20 54 6f 6e 65 2e 54 72 65 6d 6f  ..    Tone.Tremo
7ad50 6c 6f 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b 0a  lo.defaults = {.
7ad60 09 20 20 20 20 20 20 20 20 27 66 72 65 71 75 65  .        'freque
7ad70 6e 63 79 27 3a 20 31 30 2c 0a 09 20 20 20 20 20  ncy': 10,..     
7ad80 20 20 20 27 74 79 70 65 27 3a 20 27 73 69 6e 65     'type': 'sine
7ad90 27 2c 0a 09 20 20 20 20 20 20 20 20 27 64 65 70  ',..        'dep
7ada0 74 68 27 3a 20 30 2e 35 2c 0a 09 20 20 20 20 20  th': 0.5,..     
7adb0 20 20 20 27 73 70 72 65 61 64 27 3a 20 31 38 30     'spread': 180
7adc0 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
7add0 2a 0a 09 09 20 2a 20 53 74 61 72 74 20 74 68 65  *... * Start the
7ade0 20 74 72 65 6d 6f 6c 6f 2e 0a 09 09 20 2a 20 40   tremolo.... * @
7adf0 70 61 72 61 6d 20 7b 54 69 6d 65 7d 20 5b 74 69  param {Time} [ti
7ae00 6d 65 3d 6e 6f 77 5d 20 57 68 65 6e 20 74 68 65  me=now] When the
7ae10 20 74 72 65 6d 6f 6c 6f 20 62 65 67 69 6e 73 2e   tremolo begins.
7ae20 0a 09 09 20 2a 20 40 72 65 74 75 72 6e 73 20 7b  ... * @returns {
7ae30 54 6f 6e 65 2e 54 72 65 6d 6f 6c 6f 7d 20 74 68  Tone.Tremolo} th
7ae40 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  is... */..    To
7ae50 6e 65 2e 54 72 65 6d 6f 6c 6f 2e 70 72 6f 74 6f  ne.Tremolo.proto
7ae60 74 79 70 65 2e 73 74 61 72 74 20 3d 20 66 75 6e  type.start = fun
7ae70 63 74 69 6f 6e 20 28 74 69 6d 65 29 20 7b 0a 09  ction (time) {..
7ae80 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 66          this._lf
7ae90 6f 4c 2e 73 74 61 72 74 28 74 69 6d 65 29 3b 0a  oL.start(time);.
7aea0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c  .        this._l
7aeb0 66 6f 52 2e 73 74 61 72 74 28 74 69 6d 65 29 3b  foR.start(time);
7aec0 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
7aed0 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09   this;..    };..
7aee0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 53 74 6f      /**... * Sto
7aef0 70 20 74 68 65 20 74 72 65 6d 6f 6c 6f 2e 0a 09  p the tremolo...
7af00 09 20 2a 20 40 70 61 72 61 6d 20 7b 54 69 6d 65  . * @param {Time
7af10 7d 20 5b 74 69 6d 65 3d 6e 6f 77 5d 20 57 68 65  } [time=now] Whe
7af20 6e 20 74 68 65 20 74 72 65 6d 6f 6c 6f 20 73 74  n the tremolo st
7af30 6f 70 73 2e 0a 09 09 20 2a 20 40 72 65 74 75 72  ops.... * @retur
7af40 6e 73 20 7b 54 6f 6e 65 2e 54 72 65 6d 6f 6c 6f  ns {Tone.Tremolo
7af50 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20  } this... */..  
7af60 20 20 54 6f 6e 65 2e 54 72 65 6d 6f 6c 6f 2e 70    Tone.Tremolo.p
7af70 72 6f 74 6f 74 79 70 65 2e 73 74 6f 70 20 3d 20  rototype.stop = 
7af80 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65 29 20  function (time) 
7af90 7b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  {..        this.
7afa0 5f 6c 66 6f 4c 2e 73 74 6f 70 28 74 69 6d 65 29  _lfoL.stop(time)
7afb0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
7afc0 5f 6c 66 6f 52 2e 73 74 6f 70 28 74 69 6d 65 29  _lfoR.stop(time)
7afd0 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
7afe0 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a  n this;..    };.
7aff0 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 53 79  .    /**... * Sy
7b000 6e 63 20 74 68 65 20 65 66 66 65 63 74 20 74 6f  nc the effect to
7b010 20 74 68 65 20 74 72 61 6e 73 70 6f 72 74 2e 0a   the transport..
7b020 09 09 20 2a 20 40 70 61 72 61 6d 20 7b 54 69 6d  .. * @param {Tim
7b030 65 7d 20 5b 64 65 6c 61 79 3d 30 5d 20 44 65 6c  e} [delay=0] Del
7b040 61 79 20 74 69 6d 65 20 62 65 66 6f 72 65 20 73  ay time before s
7b050 74 61 72 74 69 6e 67 20 74 68 65 20 65 66 66 65  tarting the effe
7b060 63 74 20 61 66 74 65 72 20 74 68 65 0a 09 09 20  ct after the... 
7b070 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
7b080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
7b090 72 61 6e 73 70 6f 72 74 20 68 61 73 20 73 74 61  ransport has sta
7b0a0 72 74 65 64 2e 0a 09 09 20 2a 20 40 72 65 74 75  rted.... * @retu
7b0b0 72 6e 73 20 7b 54 6f 6e 65 2e 41 75 74 6f 46 69  rns {Tone.AutoFi
7b0c0 6c 74 65 72 7d 20 74 68 69 73 0a 09 09 20 2a 2f  lter} this... */
7b0d0 0a 09 20 20 20 20 54 6f 6e 65 2e 54 72 65 6d 6f  ..    Tone.Tremo
7b0e0 6c 6f 2e 70 72 6f 74 6f 74 79 70 65 2e 73 79 6e  lo.prototype.syn
7b0f0 63 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 64 65  c = function (de
7b100 6c 61 79 29 20 7b 0a 09 20 20 20 20 20 20 20 20  lay) {..        
7b110 74 68 69 73 2e 5f 6c 66 6f 4c 2e 73 79 6e 63 28  this._lfoL.sync(
7b120 64 65 6c 61 79 29 3b 0a 09 20 20 20 20 20 20 20  delay);..       
7b130 20 74 68 69 73 2e 5f 6c 66 6f 52 2e 73 79 6e 63   this._lfoR.sync
7b140 28 64 65 6c 61 79 29 3b 0a 09 20 20 20 20 20 20  (delay);..      
7b150 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09    return this;..
7b160 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
7b170 09 09 20 2a 20 55 6e 73 79 6e 63 20 74 68 65 20  .. * Unsync the 
7b180 66 69 6c 74 65 72 20 66 72 6f 6d 20 74 68 65 20  filter from the 
7b190 74 72 61 6e 73 70 6f 72 74 0a 09 09 20 2a 20 40  transport... * @
7b1a0 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 54 72  returns {Tone.Tr
7b1b0 65 6d 6f 6c 6f 7d 20 74 68 69 73 0a 09 09 20 2a  emolo} this... *
7b1c0 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 54 72 65 6d  /..    Tone.Trem
7b1d0 6f 6c 6f 2e 70 72 6f 74 6f 74 79 70 65 2e 75 6e  olo.prototype.un
7b1e0 73 79 6e 63 20 3d 20 66 75 6e 63 74 69 6f 6e 20  sync = function 
7b1f0 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 74 68  () {..        th
7b200 69 73 2e 5f 6c 66 6f 4c 2e 75 6e 73 79 6e 63 28  is._lfoL.unsync(
7b210 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
7b220 2e 5f 6c 66 6f 52 2e 75 6e 73 79 6e 63 28 29 3b  ._lfoR.unsync();
7b230 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
7b240 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09   this;..    };..
7b250 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65      /**... * The
7b260 20 54 72 65 6d 6f 6c 6f 27 73 20 6f 73 63 69 6c   Tremolo's oscil
7b270 6c 61 74 6f 72 20 74 79 70 65 2e 0a 09 09 20 2a  lator type.... *
7b280 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e   @memberOf Tone.
7b290 54 72 65 6d 6f 6c 6f 23 0a 09 09 20 2a 20 40 74  Tremolo#... * @t
7b2a0 79 70 65 20 7b 73 74 72 69 6e 67 7d 0a 09 09 20  ype {string}... 
7b2b0 2a 20 40 6e 61 6d 65 20 74 79 70 65 0a 09 09 20  * @name type... 
7b2c0 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64  */..    Object.d
7b2d0 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f  efineProperty(To
7b2e0 6e 65 2e 54 72 65 6d 6f 6c 6f 2e 70 72 6f 74 6f  ne.Tremolo.proto
7b2f0 74 79 70 65 2c 20 27 74 79 70 65 27 2c 20 7b 0a  type, 'type', {.
7b300 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75  .        get: fu
7b310 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
7b320 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
7b330 74 68 69 73 2e 5f 6c 66 6f 4c 2e 74 79 70 65 3b  this._lfoL.type;
7b340 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20  ..        },..  
7b350 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74        set: funct
7b360 69 6f 6e 20 28 74 79 70 65 29 20 7b 0a 09 20 20  ion (type) {..  
7b370 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
7b380 6c 66 6f 4c 2e 74 79 70 65 20 3d 20 74 79 70 65  lfoL.type = type
7b390 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  ;..            t
7b3a0 68 69 73 2e 5f 6c 66 6f 52 2e 74 79 70 65 20 3d  his._lfoR.type =
7b3b0 20 74 79 70 65 3b 0a 09 20 20 20 20 20 20 20 20   type;..        
7b3c0 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20  }..    });..    
7b3d0 2f 2a 2a 20 0a 09 09 20 2a 20 41 6d 6f 75 6e 74  /** ... * Amount
7b3e0 20 6f 66 20 73 74 65 72 65 6f 20 73 70 72 65 61   of stereo sprea
7b3f0 64 2e 20 57 68 65 6e 20 73 65 74 20 74 6f 20 30  d. When set to 0
7b400 2c 20 62 6f 74 68 20 4c 46 4f 27 73 20 77 69 6c  , both LFO's wil
7b410 6c 20 62 65 20 70 61 6e 6e 65 64 20 63 65 6e 74  l be panned cent
7b420 72 61 6c 6c 79 2e 0a 09 09 20 2a 20 57 68 65 6e  rally.... * When
7b430 20 73 65 74 20 74 6f 20 31 38 30 2c 20 4c 46 4f   set to 180, LFO
7b440 27 73 20 77 69 6c 6c 20 62 65 20 70 61 6e 6e 65  's will be panne
7b450 64 20 68 61 72 64 20 6c 65 66 74 20 61 6e 64 20  d hard left and 
7b460 72 69 67 68 74 20 72 65 73 70 65 63 74 69 76 65  right respective
7b470 6c 79 2e 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72  ly.... * @member
7b480 4f 66 20 54 6f 6e 65 2e 54 72 65 6d 6f 6c 6f 23  Of Tone.Tremolo#
7b490 0a 09 09 20 2a 20 40 74 79 70 65 20 7b 44 65 67  ... * @type {Deg
7b4a0 72 65 65 73 7d 0a 09 09 20 2a 20 40 6e 61 6d 65  rees}... * @name
7b4b0 20 73 70 72 65 61 64 0a 09 09 20 2a 2f 0a 09 20   spread... */.. 
7b4c0 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65     Object.define
7b4d0 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 54 72  Property(Tone.Tr
7b4e0 65 6d 6f 6c 6f 2e 70 72 6f 74 6f 74 79 70 65 2c  emolo.prototype,
7b4f0 20 27 73 70 72 65 61 64 27 2c 20 7b 0a 09 20 20   'spread', {..  
7b500 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74        get: funct
7b510 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
7b520 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
7b530 73 2e 5f 6c 66 6f 52 2e 70 68 61 73 65 20 2d 20  s._lfoR.phase - 
7b540 74 68 69 73 2e 5f 6c 66 6f 4c 2e 70 68 61 73 65  this._lfoL.phase
7b550 3b 20 20 20 20 2f 2f 31 38 30 0a 09 20 20 20 20  ;    //180..    
7b560 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20      },..        
7b570 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 73  set: function (s
7b580 70 72 65 61 64 29 20 7b 0a 09 20 20 20 20 20 20  pread) {..      
7b590 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 66 6f 4c        this._lfoL
7b5a0 2e 70 68 61 73 65 20 3d 20 39 30 20 2d 20 73 70  .phase = 90 - sp
7b5b0 72 65 61 64 20 2f 20 32 3b 0a 09 20 20 20 20 20  read / 2;..     
7b5c0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 66 6f         this._lfo
7b5d0 52 2e 70 68 61 73 65 20 3d 20 73 70 72 65 61 64  R.phase = spread
7b5e0 20 2f 20 32 20 2b 20 39 30 3b 0a 09 20 20 20 20   / 2 + 90;..    
7b5f0 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09      }..    });..
7b600 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 63 6c      /**... *  cl
7b610 65 61 6e 20 75 70 0a 09 09 20 2a 20 20 40 72 65  ean up... *  @re
7b620 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 54 72 65 6d  turns {Tone.Trem
7b630 6f 6c 6f 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a  olo} this... */.
7b640 09 20 20 20 20 54 6f 6e 65 2e 54 72 65 6d 6f 6c  .    Tone.Tremol
7b650 6f 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70  o.prototype.disp
7b660 6f 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  ose = function (
7b670 29 20 7b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e  ) {..        Ton
7b680 65 2e 53 74 65 72 65 6f 45 66 66 65 63 74 2e 70  e.StereoEffect.p
7b690 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65  rototype.dispose
7b6a0 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20  .call(this);..  
7b6b0 20 20 20 20 20 20 74 68 69 73 2e 5f 77 72 69 74        this._writ
7b6c0 61 62 6c 65 28 5b 0a 09 20 20 20 20 20 20 20 20  able([..        
7b6d0 20 20 20 20 27 66 72 65 71 75 65 6e 63 79 27 2c      'frequency',
7b6e0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 64  ..            'd
7b6f0 65 70 74 68 27 0a 09 20 20 20 20 20 20 20 20 5d  epth'..        ]
7b700 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
7b710 2e 5f 6c 66 6f 4c 2e 64 69 73 70 6f 73 65 28 29  ._lfoL.dispose()
7b720 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
7b730 5f 6c 66 6f 4c 20 3d 20 6e 75 6c 6c 3b 0a 09 20  _lfoL = null;.. 
7b740 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 66 6f         this._lfo
7b750 52 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20  R.dispose();..  
7b760 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 66 6f 52        this._lfoR
7b770 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
7b780 20 20 74 68 69 73 2e 5f 61 6d 70 6c 69 74 75 64    this._amplitud
7b790 65 4c 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20  eL.dispose();.. 
7b7a0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 61 6d 70         this._amp
7b7b0 6c 69 74 75 64 65 4c 20 3d 20 6e 75 6c 6c 3b 0a  litudeL = null;.
7b7c0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 61  .        this._a
7b7d0 6d 70 6c 69 74 75 64 65 52 2e 64 69 73 70 6f 73  mplitudeR.dispos
7b7e0 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  e();..        th
7b7f0 69 73 2e 5f 61 6d 70 6c 69 74 75 64 65 52 20 3d  is._amplitudeR =
7b800 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
7b810 74 68 69 73 2e 66 72 65 71 75 65 6e 63 79 20 3d  this.frequency =
7b820 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
7b830 74 68 69 73 2e 64 65 70 74 68 20 3d 20 6e 75 6c  this.depth = nul
7b840 6c 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75  l;..        retu
7b850 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b  rn this;..    };
7b860 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e  ..    return Ton
7b870 65 2e 54 72 65 6d 6f 6c 6f 3b 0a 09 7d 29 3b 0a  e.Tremolo;..});.
7b880 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e  .Module(function
7b890 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a   (Tone) {..    .
7b8a0 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40  .    /**... *  @
7b8b0 63 6c 61 73 73 20 41 20 56 69 62 72 61 74 6f 20  class A Vibrato 
7b8c0 65 66 66 65 63 74 20 63 6f 6d 70 6f 73 65 64 20  effect composed 
7b8d0 6f 66 20 61 20 54 6f 6e 65 2e 44 65 6c 61 79 20  of a Tone.Delay 
7b8e0 61 6e 64 20 61 20 54 6f 6e 65 2e 4c 46 4f 2e 20  and a Tone.LFO. 
7b8f0 54 68 65 20 4c 46 4f 0a 09 09 20 2a 20 20 20 20  The LFO... *    
7b900 20 20 20 20 20 6d 6f 64 75 6c 61 74 65 73 20 74       modulates t
7b910 68 65 20 64 65 6c 61 79 54 69 6d 65 20 6f 66 20  he delayTime of 
7b920 74 68 65 20 64 65 6c 61 79 2c 20 63 61 75 73 69  the delay, causi
7b930 6e 67 20 74 68 65 20 70 69 74 63 68 20 74 6f 20  ng the pitch to 
7b940 72 69 73 65 0a 09 09 20 2a 20 20 20 20 20 20 20  rise... *       
7b950 20 20 61 6e 64 20 66 61 6c 6c 2e 20 0a 09 09 20    and fall. ... 
7b960 2a 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e  *  @extends {Ton
7b970 65 2e 45 66 66 65 63 74 7d 0a 09 09 20 2a 20 20  e.Effect}... *  
7b980 40 70 61 72 61 6d 20 7b 46 72 65 71 75 65 6e 63  @param {Frequenc
7b990 79 7d 20 66 72 65 71 75 65 6e 63 79 20 54 68 65  y} frequency The
7b9a0 20 66 72 65 71 75 65 6e 63 79 20 6f 66 20 74 68   frequency of th
7b9b0 65 20 76 69 62 72 61 74 6f 2e 0a 09 09 20 2a 20  e vibrato.... * 
7b9c0 20 40 70 61 72 61 6d 20 7b 4e 6f 72 6d 61 6c 52   @param {NormalR
7b9d0 61 6e 67 65 7d 20 64 65 70 74 68 20 54 68 65 20  ange} depth The 
7b9e0 61 6d 6f 75 6e 74 20 74 68 65 20 70 69 74 63 68  amount the pitch
7b9f0 20 69 73 20 6d 6f 64 75 6c 61 74 65 64 2e 0a 09   is modulated...
7ba00 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 56  . */..    Tone.V
7ba10 69 62 72 61 74 6f 20 3d 20 66 75 6e 63 74 69 6f  ibrato = functio
7ba20 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
7ba30 76 61 72 20 6f 70 74 69 6f 6e 73 20 3d 20 74 68  var options = th
7ba40 69 73 2e 6f 70 74 69 6f 6e 73 4f 62 6a 65 63 74  is.optionsObject
7ba50 28 61 72 67 75 6d 65 6e 74 73 2c 20 5b 0a 09 20  (arguments, [.. 
7ba60 20 20 20 20 20 20 20 20 20 20 20 27 66 72 65 71             'freq
7ba70 75 65 6e 63 79 27 2c 0a 09 20 20 20 20 20 20 20  uency',..       
7ba80 20 20 20 20 20 27 64 65 70 74 68 27 0a 09 20 20       'depth'..  
7ba90 20 20 20 20 20 20 5d 2c 20 54 6f 6e 65 2e 56 69        ], Tone.Vi
7baa0 62 72 61 74 6f 2e 64 65 66 61 75 6c 74 73 29 3b  brato.defaults);
7bab0 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 45  ..        Tone.E
7bac0 66 66 65 63 74 2e 63 61 6c 6c 28 74 68 69 73 2c  ffect.call(this,
7bad0 20 6f 70 74 69 6f 6e 73 29 3b 0a 09 20 20 20 20   options);..    
7bae0 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54      /**.... *  T
7baf0 68 65 20 64 65 6c 61 79 20 6e 6f 64 65 20 75 73  he delay node us
7bb00 65 64 20 66 6f 72 20 74 68 65 20 76 69 62 72 61  ed for the vibra
7bb10 74 6f 20 65 66 66 65 63 74 0a 09 09 09 20 2a 20  to effect.... * 
7bb20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 44 65 6c   @type {Tone.Del
7bb30 61 79 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76  ay}.... *  @priv
7bb40 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  ate.... */..    
7bb50 20 20 20 20 74 68 69 73 2e 5f 64 65 6c 61 79 4e      this._delayN
7bb60 6f 64 65 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 44  ode = new Tone.D
7bb70 65 6c 61 79 28 30 2c 20 6f 70 74 69 6f 6e 73 2e  elay(0, options.
7bb80 6d 61 78 44 65 6c 61 79 29 3b 0a 09 20 20 20 20  maxDelay);..    
7bb90 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54      /**.... *  T
7bba0 68 65 20 4c 46 4f 20 75 73 65 64 20 74 6f 20 63  he LFO used to c
7bbb0 6f 6e 74 72 6f 6c 20 74 68 65 20 76 69 62 72 61  ontrol the vibra
7bbc0 74 6f 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  to.... *  @type 
7bbd0 7b 54 6f 6e 65 2e 4c 46 4f 7d 0a 09 09 09 20 2a  {Tone.LFO}.... *
7bbe0 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a    @private.... *
7bbf0 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
7bc00 5f 6c 66 6f 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  _lfo = new Tone.
7bc10 4c 46 4f 28 7b 0a 09 20 20 20 20 20 20 20 20 20  LFO({..         
7bc20 20 20 20 27 74 79 70 65 27 3a 20 6f 70 74 69 6f     'type': optio
7bc30 6e 73 2e 74 79 70 65 2c 0a 09 20 20 20 20 20 20  ns.type,..      
7bc40 20 20 20 20 20 20 27 6d 69 6e 27 3a 20 30 2c 0a        'min': 0,.
7bc50 09 20 20 20 20 20 20 20 20 20 20 20 20 27 6d 61  .            'ma
7bc60 78 27 3a 20 6f 70 74 69 6f 6e 73 2e 6d 61 78 44  x': options.maxD
7bc70 65 6c 61 79 2c 0a 09 20 20 20 20 20 20 20 20 20  elay,..         
7bc80 20 20 20 27 66 72 65 71 75 65 6e 63 79 27 3a 20     'frequency': 
7bc90 6f 70 74 69 6f 6e 73 2e 66 72 65 71 75 65 6e 63  options.frequenc
7bca0 79 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
7bcb0 27 70 68 61 73 65 27 3a 20 2d 39 30 20 20 20 20  'phase': -90    
7bcc0 2f 2f 6f 66 66 73 65 20 74 68 65 20 70 68 61 73  //offse the phas
7bcd0 65 20 73 6f 20 74 68 65 20 72 65 73 74 69 6e 67  e so the resting
7bce0 20 70 6f 73 69 74 69 6f 6e 20 69 73 20 69 6e 20   position is in 
7bcf0 74 68 65 20 63 65 6e 74 65 72 0a 09 20 20 20 20  the center..    
7bd00 20 20 20 20 7d 29 2e 73 74 61 72 74 28 29 2e 63      }).start().c
7bd10 6f 6e 6e 65 63 74 28 74 68 69 73 2e 5f 64 65 6c  onnect(this._del
7bd20 61 79 4e 6f 64 65 2e 64 65 6c 61 79 54 69 6d 65  ayNode.delayTime
7bd30 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
7bd40 09 09 09 20 2a 20 20 54 68 65 20 66 72 65 71 75  ... *  The frequ
7bd50 65 6e 63 79 20 6f 66 20 74 68 65 20 76 69 62 72  ency of the vibr
7bd60 61 74 6f 0a 09 09 09 20 2a 20 20 40 74 79 70 65  ato.... *  @type
7bd70 20 7b 46 72 65 71 75 65 6e 63 79 7d 0a 09 09 09   {Frequency}....
7bd80 20 2a 20 20 40 73 69 67 6e 61 6c 0a 09 09 09 20   *  @signal.... 
7bd90 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
7bda0 2e 66 72 65 71 75 65 6e 63 79 20 3d 20 74 68 69  .frequency = thi
7bdb0 73 2e 5f 6c 66 6f 2e 66 72 65 71 75 65 6e 63 79  s._lfo.frequency
7bdc0 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
7bdd0 09 09 20 2a 20 20 54 68 65 20 64 65 70 74 68 20  .. *  The depth 
7bde0 6f 66 20 74 68 65 20 76 69 62 72 61 74 6f 2e 20  of the vibrato. 
7bdf0 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4e  .... *  @type {N
7be00 6f 72 6d 61 6c 52 61 6e 67 65 7d 0a 09 09 09 20  ormalRange}.... 
7be10 2a 20 20 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a  *  @signal.... *
7be20 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
7be30 64 65 70 74 68 20 3d 20 74 68 69 73 2e 5f 6c 66  depth = this._lf
7be40 6f 2e 61 6d 70 6c 69 74 75 64 65 3b 0a 09 20 20  o.amplitude;..  
7be50 20 20 20 20 20 20 74 68 69 73 2e 64 65 70 74 68        this.depth
7be60 2e 76 61 6c 75 65 20 3d 20 6f 70 74 69 6f 6e 73  .value = options
7be70 2e 64 65 70 74 68 3b 0a 09 20 20 20 20 20 20 20  .depth;..       
7be80 20 74 68 69 73 2e 5f 72 65 61 64 4f 6e 6c 79 28   this._readOnly(
7be90 5b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  [..            '
7bea0 66 72 65 71 75 65 6e 63 79 27 2c 0a 09 20 20 20  frequency',..   
7beb0 20 20 20 20 20 20 20 20 20 27 64 65 70 74 68 27           'depth'
7bec0 0a 09 20 20 20 20 20 20 20 20 5d 29 3b 0a 09 20  ..        ]);.. 
7bed0 20 20 20 20 20 20 20 74 68 69 73 2e 65 66 66 65         this.effe
7bee0 63 74 53 65 6e 64 2e 63 68 61 69 6e 28 74 68 69  ctSend.chain(thi
7bef0 73 2e 5f 64 65 6c 61 79 4e 6f 64 65 2c 20 74 68  s._delayNode, th
7bf00 69 73 2e 65 66 66 65 63 74 52 65 74 75 72 6e 29  is.effectReturn)
7bf10 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54  ;..    };..    T
7bf20 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e  one.extend(Tone.
7bf30 56 69 62 72 61 74 6f 2c 20 54 6f 6e 65 2e 45 66  Vibrato, Tone.Ef
7bf40 66 65 63 74 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a  fect);..    /**.
7bf50 09 09 20 2a 20 20 54 68 65 20 64 65 66 61 75 6c  .. *  The defaul
7bf60 74 73 0a 09 09 20 2a 20 20 40 74 79 70 65 20 20  ts... *  @type  
7bf70 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 20 20 40  {Object}... *  @
7bf80 63 6f 6e 73 74 0a 09 09 20 2a 2f 0a 09 20 20 20  const... */..   
7bf90 20 54 6f 6e 65 2e 56 69 62 72 61 74 6f 2e 64 65   Tone.Vibrato.de
7bfa0 66 61 75 6c 74 73 20 3d 20 7b 0a 09 20 20 20 20  faults = {..    
7bfb0 20 20 20 20 27 6d 61 78 44 65 6c 61 79 27 3a 20      'maxDelay': 
7bfc0 30 2e 30 30 35 2c 0a 09 20 20 20 20 20 20 20 20  0.005,..        
7bfd0 27 66 72 65 71 75 65 6e 63 79 27 3a 20 35 2c 0a  'frequency': 5,.
7bfe0 09 20 20 20 20 20 20 20 20 27 64 65 70 74 68 27  .        'depth'
7bff0 3a 20 30 2e 31 2c 0a 09 20 20 20 20 20 20 20 20  : 0.1,..        
7c000 27 74 79 70 65 27 3a 20 27 73 69 6e 65 27 0a 09  'type': 'sine'..
7c010 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
7c020 09 09 20 2a 20 54 79 70 65 20 6f 66 20 6f 73 63  .. * Type of osc
7c030 69 6c 6c 61 74 6f 72 20 61 74 74 61 63 68 65 64  illator attached
7c040 20 74 6f 20 74 68 65 20 56 69 62 72 61 74 6f 2e   to the Vibrato.
7c050 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20  ... * @memberOf 
7c060 54 6f 6e 65 2e 56 69 62 72 61 74 6f 23 0a 09 09  Tone.Vibrato#...
7c070 20 2a 20 40 74 79 70 65 20 7b 73 74 72 69 6e 67   * @type {string
7c080 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 74 79 70  }... * @name typ
7c090 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a  e... */..    Obj
7c0a0 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72  ect.defineProper
7c0b0 74 79 28 54 6f 6e 65 2e 56 69 62 72 61 74 6f 2e  ty(Tone.Vibrato.
7c0c0 70 72 6f 74 6f 74 79 70 65 2c 20 27 74 79 70 65  prototype, 'type
7c0d0 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65  ', {..        ge
7c0e0 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b  t: function () {
7c0f0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
7c100 74 75 72 6e 20 74 68 69 73 2e 5f 6c 66 6f 2e 74  turn this._lfo.t
7c110 79 70 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c  ype;..        },
7c120 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66  ..        set: f
7c130 75 6e 63 74 69 6f 6e 20 28 74 79 70 65 29 20 7b  unction (type) {
7c140 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
7c150 69 73 2e 5f 6c 66 6f 2e 74 79 70 65 20 3d 20 74  is._lfo.type = t
7c160 79 70 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a  ype;..        }.
7c170 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a  .    });..    /*
7c180 2a 0a 09 09 20 2a 20 20 43 6c 65 61 6e 20 75 70  *... *  Clean up
7c190 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73  .... *  @returns
7c1a0 20 7b 54 6f 6e 65 2e 56 69 62 72 61 74 6f 7d 20   {Tone.Vibrato} 
7c1b0 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20  this... */..    
7c1c0 54 6f 6e 65 2e 56 69 62 72 61 74 6f 2e 70 72 6f  Tone.Vibrato.pro
7c1d0 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d  totype.dispose =
7c1e0 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
7c1f0 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 45 66 66          Tone.Eff
7c200 65 63 74 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69  ect.prototype.di
7c210 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69 73 29  spose.call(this)
7c220 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
7c230 5f 64 65 6c 61 79 4e 6f 64 65 2e 64 69 73 70 6f  _delayNode.dispo
7c240 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74  se();..        t
7c250 68 69 73 2e 5f 64 65 6c 61 79 4e 6f 64 65 20 3d  his._delayNode =
7c260 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
7c270 74 68 69 73 2e 5f 6c 66 6f 2e 64 69 73 70 6f 73  this._lfo.dispos
7c280 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  e();..        th
7c290 69 73 2e 5f 6c 66 6f 20 3d 20 6e 75 6c 6c 3b 0a  is._lfo = null;.
7c2a0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 77  .        this._w
7c2b0 72 69 74 61 62 6c 65 28 5b 0a 09 20 20 20 20 20  ritable([..     
7c2c0 20 20 20 20 20 20 20 27 66 72 65 71 75 65 6e 63         'frequenc
7c2d0 79 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  y',..           
7c2e0 20 27 64 65 70 74 68 27 0a 09 20 20 20 20 20 20   'depth'..      
7c2f0 20 20 5d 29 3b 0a 09 20 20 20 20 20 20 20 20 74    ]);..        t
7c300 68 69 73 2e 66 72 65 71 75 65 6e 63 79 20 3d 20  his.frequency = 
7c310 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74  null;..        t
7c320 68 69 73 2e 64 65 70 74 68 20 3d 20 6e 75 6c 6c  his.depth = null
7c330 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 72  ;..    };..    r
7c340 65 74 75 72 6e 20 54 6f 6e 65 2e 56 69 62 72 61  eturn Tone.Vibra
7c350 74 6f 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65  to;..});..Module
7c360 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29  (function (Tone)
7c370 20 7b 0a 09 20 20 20 20 0a 09 20 20 20 20 2f 2a   {..    ..    /*
7c380 2a 0a 09 09 20 2a 20 20 40 63 6c 61 73 73 20 20  *... *  @class  
7c390 54 6f 6e 65 2e 45 76 65 6e 74 20 61 62 73 74 72  Tone.Event abstr
7c3a0 61 63 74 73 20 61 77 61 79 20 54 6f 6e 65 2e 54  acts away Tone.T
7c3b0 72 61 6e 73 70 6f 72 74 2e 73 63 68 65 64 75 6c  ransport.schedul
7c3c0 65 20 61 6e 64 20 70 72 6f 76 69 64 65 73 20 61  e and provides a
7c3d0 20 73 63 68 65 64 75 6c 61 62 6c 65 0a 09 09 20   schedulable... 
7c3e0 2a 20 20 20 20 20 20 20 20 20 20 63 61 6c 6c 62  *          callb
7c3f0 61 63 6b 20 66 6f 72 20 61 20 73 69 6e 67 6c 65  ack for a single
7c400 20 6f 72 20 72 65 70 65 61 74 61 62 6c 65 20 65   or repeatable e
7c410 76 65 6e 74 73 20 61 6c 6f 6e 67 20 74 68 65 20  vents along the 
7c420 74 69 6d 65 6c 69 6e 65 2e 20 0a 09 09 20 2a 0a  timeline. ... *.
7c430 09 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b  .. *  @extends {
7c440 54 6f 6e 65 7d 0a 09 09 20 2a 20 20 40 70 61 72  Tone}... *  @par
7c450 61 6d 20 7b 66 75 6e 63 74 69 6f 6e 7d 20 63 61  am {function} ca
7c460 6c 6c 62 61 63 6b 20 54 68 65 20 63 61 6c 6c 62  llback The callb
7c470 61 63 6b 20 74 6f 20 69 6e 76 6f 6b 65 20 61 74  ack to invoke at
7c480 20 74 68 65 20 74 69 6d 65 2e 20 0a 09 09 20 2a   the time. ... *
7c490 20 20 40 70 61 72 61 6d 20 7b 2a 7d 20 76 61 6c    @param {*} val
7c4a0 75 65 20 54 68 65 20 76 61 6c 75 65 20 6f 72 20  ue The value or 
7c4b0 76 61 6c 75 65 73 20 77 68 69 63 68 20 73 68 6f  values which sho
7c4c0 75 6c 64 20 62 65 20 70 61 73 73 65 64 20 74 6f  uld be passed to
7c4d0 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 20  ... *           
7c4e0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 63             the c
7c4f0 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e  allback function
7c500 20 6f 6e 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20   on invocation. 
7c510 20 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65   ... *  @example
7c520 0a 09 09 20 2a 20 76 61 72 20 63 68 6f 72 64 20  ... * var chord 
7c530 3d 20 6e 65 77 20 54 6f 6e 65 2e 45 76 65 6e 74  = new Tone.Event
7c540 28 66 75 6e 63 74 69 6f 6e 28 74 69 6d 65 2c 20  (function(time, 
7c550 63 68 6f 72 64 29 7b 0a 09 09 20 2a 20 09 2f 2f  chord){... * .//
7c560 74 68 65 20 63 68 6f 72 64 20 61 73 20 77 65 6c  the chord as wel
7c570 6c 20 61 73 20 74 68 65 20 65 78 61 63 74 20 74  l as the exact t
7c580 69 6d 65 20 6f 66 20 74 68 65 20 65 76 65 6e 74  ime of the event
7c590 0a 09 09 20 2a 20 09 2f 2f 61 72 65 20 70 61 73  ... * .//are pas
7c5a0 73 65 64 20 69 6e 20 61 73 20 61 72 67 75 6d 65  sed in as argume
7c5b0 6e 74 73 20 74 6f 20 74 68 65 20 63 61 6c 6c 62  nts to the callb
7c5c0 61 63 6b 20 66 75 6e 63 74 69 6f 6e 0a 09 09 20  ack function... 
7c5d0 2a 20 7d 2c 20 5b 22 44 34 22 2c 20 22 45 34 22  * }, ["D4", "E4"
7c5e0 2c 20 22 46 34 22 5d 29 3b 0a 09 09 20 2a 20 2f  , "F4"]);... * /
7c5f0 2f 73 74 61 72 74 20 74 68 65 20 63 68 6f 72 64  /start the chord
7c600 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
7c610 67 20 6f 66 20 74 68 65 20 74 72 61 6e 73 70 6f  g of the transpo
7c620 72 74 20 74 69 6d 65 6c 69 6e 65 0a 09 09 20 2a  rt timeline... *
7c630 20 63 68 6f 72 64 2e 73 74 61 72 74 28 29 3b 0a   chord.start();.
7c640 09 09 20 2a 20 2f 2f 6c 6f 6f 70 20 69 74 20 65  .. * //loop it e
7c650 76 65 72 79 20 6d 65 61 73 75 72 65 20 66 6f 72  very measure for
7c660 20 38 20 6d 65 61 73 75 72 65 73 0a 09 09 20 2a   8 measures... *
7c670 20 63 68 6f 72 64 2e 6c 6f 6f 70 20 3d 20 38 3b   chord.loop = 8;
7c680 0a 09 09 20 2a 20 63 68 6f 72 64 2e 6c 6f 6f 70  ... * chord.loop
7c690 45 6e 64 20 3d 20 22 31 6d 22 3b 0a 09 09 20 2a  End = "1m";... *
7c6a0 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 45 76 65 6e  /..    Tone.Even
7c6b0 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  t = function () 
7c6c0 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 6f  {..        var o
7c6d0 70 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e 6f 70  ptions = this.op
7c6e0 74 69 6f 6e 73 4f 62 6a 65 63 74 28 61 72 67 75  tionsObject(argu
7c6f0 6d 65 6e 74 73 2c 20 5b 0a 09 20 20 20 20 20 20  ments, [..      
7c700 20 20 20 20 20 20 27 63 61 6c 6c 62 61 63 6b 27        'callback'
7c710 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
7c720 76 61 6c 75 65 27 0a 09 20 20 20 20 20 20 20 20  value'..        
7c730 5d 2c 20 54 6f 6e 65 2e 45 76 65 6e 74 2e 64 65  ], Tone.Event.de
7c740 66 61 75 6c 74 73 29 3b 0a 09 20 20 20 20 20 20  faults);..      
7c750 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 4c 6f 6f    /**.... *  Loo
7c760 70 20 76 61 6c 75 65 0a 09 09 09 20 2a 20 20 40  p value.... *  @
7c770 74 79 70 65 20 20 7b 42 6f 6f 6c 65 61 6e 7c 50  type  {Boolean|P
7c780 6f 73 69 74 69 76 65 7d 0a 09 09 09 20 2a 20 20  ositive}.... *  
7c790 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a  @private.... */.
7c7a0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c  .        this._l
7c7b0 6f 6f 70 20 3d 20 6f 70 74 69 6f 6e 73 2e 6c 6f  oop = options.lo
7c7c0 6f 70 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  op;..        /**
7c7d0 0a 09 09 09 20 2a 20 20 54 68 65 20 63 61 6c 6c  .... *  The call
7c7e0 62 61 63 6b 20 74 6f 20 69 6e 76 6f 6b 65 2e 20  back to invoke. 
7c7f0 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 20 7b  .... *  @type  {
7c800 46 75 6e 63 74 69 6f 6e 7d 0a 09 09 09 20 2a 2f  Function}.... */
7c810 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 63  ..        this.c
7c820 61 6c 6c 62 61 63 6b 20 3d 20 6f 70 74 69 6f 6e  allback = option
7c830 73 2e 63 61 6c 6c 62 61 63 6b 3b 0a 09 20 20 20  s.callback;..   
7c840 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
7c850 54 68 65 20 76 61 6c 75 65 20 77 68 69 63 68 20  The value which 
7c860 69 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  is passed to the
7c870 0a 09 09 09 20 2a 20 20 63 61 6c 6c 62 61 63 6b  .... *  callback
7c880 20 66 75 6e 63 74 69 6f 6e 2e 0a 09 09 09 20 2a   function..... *
7c890 20 20 40 74 79 70 65 20 20 7b 2a 7d 0a 09 09 09    @type  {*}....
7c8a0 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
7c8b0 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
7c8c0 73 2e 76 61 6c 75 65 20 3d 20 6f 70 74 69 6f 6e  s.value = option
7c8d0 73 2e 76 61 6c 75 65 3b 0a 09 20 20 20 20 20 20  s.value;..      
7c8e0 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 57 68 65    /**.... *  Whe
7c8f0 6e 20 74 68 65 20 6e 6f 74 65 20 69 73 20 73 63  n the note is sc
7c900 68 65 64 75 6c 65 64 20 74 6f 20 73 74 61 72 74  heduled to start
7c910 2e 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 20  ..... *  @type  
7c920 7b 4e 75 6d 62 65 72 7d 0a 09 09 09 20 2a 20 20  {Number}.... *  
7c930 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a  @private.... */.
7c940 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c  .        this._l
7c950 6f 6f 70 53 74 61 72 74 20 3d 20 74 68 69 73 2e  oopStart = this.
7c960 74 6f 54 69 63 6b 73 28 6f 70 74 69 6f 6e 73 2e  toTicks(options.
7c970 6c 6f 6f 70 53 74 61 72 74 29 3b 0a 09 20 20 20  loopStart);..   
7c980 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
7c990 57 68 65 6e 20 74 68 65 20 6e 6f 74 65 20 69 73  When the note is
7c9a0 20 73 63 68 65 64 75 6c 65 64 20 74 6f 20 73 74   scheduled to st
7c9b0 61 72 74 2e 0a 09 09 09 20 2a 20 20 40 74 79 70  art..... *  @typ
7c9c0 65 20 20 7b 4e 75 6d 62 65 72 7d 0a 09 09 09 20  e  {Number}.... 
7c9d0 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20  *  @private.... 
7c9e0 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
7c9f0 2e 5f 6c 6f 6f 70 45 6e 64 20 3d 20 74 68 69 73  ._loopEnd = this
7ca00 2e 74 6f 54 69 63 6b 73 28 6f 70 74 69 6f 6e 73  .toTicks(options
7ca10 2e 6c 6f 6f 70 45 6e 64 29 3b 0a 09 20 20 20 20  .loopEnd);..    
7ca20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54      /**.... *  T
7ca30 72 61 63 6b 73 20 74 68 65 20 73 63 68 65 64 75  racks the schedu
7ca40 6c 65 64 20 65 76 65 6e 74 73 0a 09 09 09 20 2a  led events.... *
7ca50 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 54 69    @type {Tone.Ti
7ca60 6d 65 6c 69 6e 65 53 74 61 74 65 7d 0a 09 09 09  melineState}....
7ca70 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
7ca80 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
7ca90 73 2e 5f 73 74 61 74 65 20 3d 20 6e 65 77 20 54  s._state = new T
7caa0 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 53 74 61 74  one.TimelineStat
7cab0 65 28 54 6f 6e 65 2e 53 74 61 74 65 2e 53 74 6f  e(Tone.State.Sto
7cac0 70 70 65 64 29 3b 0a 09 20 20 20 20 20 20 20 20  pped);..        
7cad0 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 70  /**.... *  The p
7cae0 6c 61 79 62 61 63 6b 20 73 70 65 65 64 20 6f 66  layback speed of
7caf0 20 74 68 65 20 6e 6f 74 65 2e 20 41 20 73 70 65   the note. A spe
7cb00 65 64 20 6f 66 20 31 0a 09 09 09 20 2a 20 20 69  ed of 1.... *  i
7cb10 73 20 6e 6f 20 63 68 61 6e 67 65 2e 20 0a 09 09  s no change. ...
7cb20 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
7cb30 09 20 2a 20 20 40 74 79 70 65 20 7b 50 6f 73 69  . *  @type {Posi
7cb40 74 69 76 65 7d 0a 09 09 09 20 2a 2f 0a 09 20 20  tive}.... */..  
7cb50 20 20 20 20 20 20 74 68 69 73 2e 5f 70 6c 61 79        this._play
7cb60 62 61 63 6b 52 61 74 65 20 3d 20 31 3b 0a 09 20  backRate = 1;.. 
7cb70 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
7cb80 20 20 41 20 64 65 6c 61 79 20 74 69 6d 65 20 66    A delay time f
7cb90 72 6f 6d 20 77 68 65 6e 20 74 68 65 20 65 76 65  rom when the eve
7cba0 6e 74 20 69 73 20 73 63 68 65 64 75 6c 65 64 20  nt is scheduled 
7cbb0 74 6f 20 73 74 61 72 74 0a 09 09 09 20 2a 20 20  to start.... *  
7cbc0 40 74 79 70 65 20 7b 54 69 63 6b 73 7d 0a 09 09  @type {Ticks}...
7cbd0 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
7cbe0 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
7cbf0 69 73 2e 5f 73 74 61 72 74 4f 66 66 73 65 74 20  is._startOffset 
7cc00 3d 20 30 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a  = 0;..        /*
7cc10 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 70 72 6f  *.... *  The pro
7cc20 62 61 62 69 6c 69 74 79 20 74 68 61 74 20 74 68  bability that th
7cc30 65 20 63 61 6c 6c 62 61 63 6b 20 77 69 6c 6c 20  e callback will 
7cc40 62 65 20 69 6e 76 6f 6b 65 64 0a 09 09 09 20 2a  be invoked.... *
7cc50 20 20 61 74 20 74 68 65 20 73 63 68 65 64 75 6c    at the schedul
7cc60 65 64 20 74 69 6d 65 2e 20 0a 09 09 09 20 2a 20  ed time. .... * 
7cc70 20 40 74 79 70 65 20 7b 4e 6f 72 6d 61 6c 52 61   @type {NormalRa
7cc80 6e 67 65 7d 0a 09 09 09 20 2a 20 20 40 65 78 61  nge}.... *  @exa
7cc90 6d 70 6c 65 0a 09 09 09 20 2a 20 2f 2f 74 68 65  mple.... * //the
7cca0 20 63 61 6c 6c 62 61 63 6b 20 77 69 6c 6c 20 62   callback will b
7ccb0 65 20 69 6e 76 6f 6b 65 64 20 35 30 25 20 6f 66  e invoked 50% of
7ccc0 20 74 68 65 20 74 69 6d 65 0a 09 09 09 20 2a 20   the time.... * 
7ccd0 65 76 65 6e 74 2e 70 72 6f 62 61 62 69 6c 69 74  event.probabilit
7cce0 79 20 3d 20 30 2e 35 3b 0a 09 09 09 20 2a 2f 0a  y = 0.5;.... */.
7ccf0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 70 72  .        this.pr
7cd00 6f 62 61 62 69 6c 69 74 79 20 3d 20 6f 70 74 69  obability = opti
7cd10 6f 6e 73 2e 70 72 6f 62 61 62 69 6c 69 74 79 3b  ons.probability;
7cd20 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
7cd30 09 20 2a 20 20 49 66 20 73 65 74 20 74 6f 20 74  . *  If set to t
7cd40 72 75 65 2c 20 77 69 6c 6c 20 61 70 70 6c 79 20  rue, will apply 
7cd50 73 6d 61 6c 6c 20 28 2b 2f 2d 30 2e 30 32 20 73  small (+/-0.02 s
7cd60 65 63 6f 6e 64 73 29 20 72 61 6e 64 6f 6d 20 76  econds) random v
7cd70 61 72 69 61 74 69 6f 6e 0a 09 09 09 20 2a 20 20  ariation.... *  
7cd80 74 6f 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  to the callback 
7cd90 74 69 6d 65 2e 20 49 66 20 74 68 65 20 76 61 6c  time. If the val
7cda0 75 65 20 69 73 20 67 69 76 65 6e 20 61 73 20 61  ue is given as a
7cdb0 20 74 69 6d 65 2c 20 69 74 20 77 69 6c 6c 20 72   time, it will r
7cdc0 61 6e 64 6f 6d 69 7a 65 0a 09 09 09 20 2a 20 20  andomize.... *  
7cdd0 62 79 20 74 68 61 74 20 61 6d 6f 75 6e 74 2e 0a  by that amount..
7cde0 09 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a  ... *  @example.
7cdf0 09 09 09 20 2a 20 65 76 65 6e 74 2e 68 75 6d 61  ... * event.huma
7ce00 6e 69 7a 65 20 3d 20 74 72 75 65 3b 0a 09 09 09  nize = true;....
7ce10 20 2a 20 20 40 74 79 70 65 20 7b 42 6f 6f 6c 65   *  @type {Boole
7ce20 61 6e 7c 54 69 6d 65 7d 0a 09 09 09 20 2a 2f 0a  an|Time}.... */.
7ce30 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 68 75  .        this.hu
7ce40 6d 61 6e 69 7a 65 20 3d 20 6f 70 74 69 6f 6e 73  manize = options
7ce50 2e 68 75 6d 61 6e 69 7a 65 3b 0a 09 20 20 20 20  .humanize;..    
7ce60 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 49      /**.... *  I
7ce70 66 20 6d 75 74 65 20 69 73 20 74 72 75 65 2c 20  f mute is true, 
7ce80 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 77 6f 6e  the callback won
7ce90 27 74 20 62 65 0a 09 09 09 20 2a 20 20 69 6e 76  't be.... *  inv
7cea0 6f 6b 65 64 2e 0a 09 09 09 20 2a 20 20 40 74 79  oked..... *  @ty
7ceb0 70 65 20 7b 42 6f 6f 6c 65 61 6e 7d 0a 09 09 09  pe {Boolean}....
7cec0 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
7ced0 73 2e 6d 75 74 65 20 3d 20 6f 70 74 69 6f 6e 73  s.mute = options
7cee0 2e 6d 75 74 65 3b 0a 09 20 20 20 20 20 20 20 20  .mute;..        
7cef0 2f 2f 73 65 74 20 74 68 65 20 69 6e 69 74 69 61  //set the initia
7cf00 6c 20 76 61 6c 75 65 73 0a 09 20 20 20 20 20 20  l values..      
7cf10 20 20 74 68 69 73 2e 70 6c 61 79 62 61 63 6b 52    this.playbackR
7cf20 61 74 65 20 3d 20 6f 70 74 69 6f 6e 73 2e 70 6c  ate = options.pl
7cf30 61 79 62 61 63 6b 52 61 74 65 3b 0a 09 20 20 20  aybackRate;..   
7cf40 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65 2e 65 78   };..    Tone.ex
7cf50 74 65 6e 64 28 54 6f 6e 65 2e 45 76 65 6e 74 29  tend(Tone.Event)
7cf60 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
7cf70 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   The default val
7cf80 75 65 73 0a 09 09 20 2a 20 20 40 74 79 70 65 20  ues... *  @type 
7cf90 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 20 20   {Object}... *  
7cfa0 40 63 6f 6e 73 74 0a 09 09 20 2a 2f 0a 09 20 20  @const... */..  
7cfb0 20 20 54 6f 6e 65 2e 45 76 65 6e 74 2e 64 65 66    Tone.Event.def
7cfc0 61 75 6c 74 73 20 3d 20 7b 0a 09 20 20 20 20 20  aults = {..     
7cfd0 20 20 20 27 63 61 6c 6c 62 61 63 6b 27 3a 20 54     'callback': T
7cfe0 6f 6e 65 2e 6e 6f 4f 70 2c 0a 09 20 20 20 20 20  one.noOp,..     
7cff0 20 20 20 27 6c 6f 6f 70 27 3a 20 66 61 6c 73 65     'loop': false
7d000 2c 0a 09 20 20 20 20 20 20 20 20 27 6c 6f 6f 70  ,..        'loop
7d010 45 6e 64 27 3a 20 27 31 6d 27 2c 0a 09 20 20 20  End': '1m',..   
7d020 20 20 20 20 20 27 6c 6f 6f 70 53 74 61 72 74 27       'loopStart'
7d030 3a 20 30 2c 0a 09 20 20 20 20 20 20 20 20 27 70  : 0,..        'p
7d040 6c 61 79 62 61 63 6b 52 61 74 65 27 3a 20 31 2c  laybackRate': 1,
7d050 0a 09 20 20 20 20 20 20 20 20 27 76 61 6c 75 65  ..        'value
7d060 27 3a 20 6e 75 6c 6c 2c 0a 09 20 20 20 20 20 20  ': null,..      
7d070 20 20 27 70 72 6f 62 61 62 69 6c 69 74 79 27 3a    'probability':
7d080 20 31 2c 0a 09 20 20 20 20 20 20 20 20 27 6d 75   1,..        'mu
7d090 74 65 27 3a 20 66 61 6c 73 65 2c 0a 09 20 20 20  te': false,..   
7d0a0 20 20 20 20 20 27 68 75 6d 61 6e 69 7a 65 27 3a       'humanize':
7d0b0 20 66 61 6c 73 65 0a 09 20 20 20 20 7d 3b 0a 09   false..    };..
7d0c0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 52 65      /**... *  Re
7d0d0 73 63 68 65 64 75 6c 65 20 61 6c 6c 20 6f 66 20  schedule all of 
7d0e0 74 68 65 20 65 76 65 6e 74 73 20 61 6c 6f 6e 67  the events along
7d0f0 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 0a 09 09   the timeline...
7d100 20 2a 20 20 77 69 74 68 20 74 68 65 20 75 70 64   *  with the upd
7d110 61 74 65 64 20 76 61 6c 75 65 73 2e 0a 09 09 20  ated values.... 
7d120 2a 20 20 40 70 61 72 61 6d 20 7b 54 69 6d 65 7d  *  @param {Time}
7d130 20 61 66 74 65 72 20 4f 6e 6c 79 20 72 65 73 63   after Only resc
7d140 68 65 64 75 6c 65 73 20 65 76 65 6e 74 73 20 61  hedules events a
7d150 66 74 65 72 20 74 68 65 20 67 69 76 65 6e 20 74  fter the given t
7d160 69 6d 65 2e 0a 09 09 20 2a 20 20 40 72 65 74 75  ime.... *  @retu
7d170 72 6e 20 20 7b 54 6f 6e 65 2e 45 76 65 6e 74 7d  rn  {Tone.Event}
7d180 20 20 74 68 69 73 0a 09 09 20 2a 20 20 40 70 72    this... *  @pr
7d190 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20  ivate... */..   
7d1a0 20 54 6f 6e 65 2e 45 76 65 6e 74 2e 70 72 6f 74   Tone.Event.prot
7d1b0 6f 74 79 70 65 2e 5f 72 65 73 63 68 65 64 75 6c  otype._reschedul
7d1c0 65 45 76 65 6e 74 73 20 3d 20 66 75 6e 63 74 69  eEvents = functi
7d1d0 6f 6e 20 28 61 66 74 65 72 29 20 7b 0a 09 20 20  on (after) {..  
7d1e0 20 20 20 20 20 20 2f 2f 69 66 20 6e 6f 20 61 72        //if no ar
7d1f0 67 75 6d 65 6e 74 20 69 73 20 67 69 76 65 6e 2c  gument is given,
7d200 20 73 63 68 65 64 75 6c 65 73 20 61 6c 6c 20 6f   schedules all o
7d210 66 20 74 68 65 20 65 76 65 6e 74 73 0a 09 20 20  f the events..  
7d220 20 20 20 20 20 20 61 66 74 65 72 20 3d 20 74 68        after = th
7d230 69 73 2e 64 65 66 61 75 6c 74 41 72 67 28 61 66  is.defaultArg(af
7d240 74 65 72 2c 20 2d 31 29 3b 0a 09 20 20 20 20 20  ter, -1);..     
7d250 20 20 20 74 68 69 73 2e 5f 73 74 61 74 65 2e 66     this._state.f
7d260 6f 72 45 61 63 68 46 72 6f 6d 28 61 66 74 65 72  orEachFrom(after
7d270 2c 20 66 75 6e 63 74 69 6f 6e 20 28 65 76 65 6e  , function (even
7d280 74 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  t) {..          
7d290 20 20 76 61 72 20 64 75 72 61 74 69 6f 6e 3b 0a    var duration;.
7d2a0 09 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
7d2b0 28 65 76 65 6e 74 2e 73 74 61 74 65 20 3d 3d 3d  (event.state ===
7d2c0 20 54 6f 6e 65 2e 53 74 61 74 65 2e 53 74 61 72   Tone.State.Star
7d2d0 74 65 64 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ted) {..        
7d2e0 20 20 20 20 20 20 20 20 69 66 20 28 21 74 68 69          if (!thi
7d2f0 73 2e 69 73 55 6e 64 65 66 28 65 76 65 6e 74 2e  s.isUndef(event.
7d300 69 64 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20  id)) {..        
7d310 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6e 65              Tone
7d320 2e 54 72 61 6e 73 70 6f 72 74 2e 63 6c 65 61 72  .Transport.clear
7d330 28 65 76 65 6e 74 2e 69 64 29 3b 0a 09 20 20 20  (event.id);..   
7d340 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09               }..
7d350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d360 76 61 72 20 73 74 61 72 74 54 69 63 6b 20 3d 20  var startTick = 
7d370 65 76 65 6e 74 2e 74 69 6d 65 20 2b 20 4d 61 74  event.time + Mat
7d380 68 2e 72 6f 75 6e 64 28 74 68 69 73 2e 73 74 61  h.round(this.sta
7d390 72 74 4f 66 66 73 65 74 20 2f 20 74 68 69 73 2e  rtOffset / this.
7d3a0 5f 70 6c 61 79 62 61 63 6b 52 61 74 65 29 3b 0a  _playbackRate);.
7d3b0 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7d3c0 20 69 66 20 28 74 68 69 73 2e 5f 6c 6f 6f 70 29   if (this._loop)
7d3d0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7d3e0 20 20 20 20 20 20 20 20 64 75 72 61 74 69 6f 6e          duration
7d3f0 20 3d 20 49 6e 66 69 6e 69 74 79 3b 0a 09 20 20   = Infinity;..  
7d400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d410 20 20 69 66 20 28 74 68 69 73 2e 69 73 4e 75 6d    if (this.isNum
7d420 62 65 72 28 74 68 69 73 2e 5f 6c 6f 6f 70 29 29  ber(this._loop))
7d430 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7d440 20 20 20 20 20 20 20 20 20 20 20 20 64 75 72 61              dura
7d450 74 69 6f 6e 20 3d 20 74 68 69 73 2e 5f 6c 6f 6f  tion = this._loo
7d460 70 20 2a 20 74 68 69 73 2e 5f 67 65 74 4c 6f 6f  p * this._getLoo
7d470 70 44 75 72 61 74 69 6f 6e 28 29 3b 0a 09 20 20  pDuration();..  
7d480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d490 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20    }..           
7d4a0 20 20 20 20 20 20 20 20 20 76 61 72 20 6e 65 78           var nex
7d4b0 74 45 76 65 6e 74 20 3d 20 74 68 69 73 2e 5f 73  tEvent = this._s
7d4c0 74 61 74 65 2e 67 65 74 41 66 74 65 72 28 73 74  tate.getAfter(st
7d4d0 61 72 74 54 69 63 6b 29 3b 0a 09 20 20 20 20 20  artTick);..     
7d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
7d4f0 66 20 28 6e 65 78 74 45 76 65 6e 74 20 21 3d 3d  f (nextEvent !==
7d500 20 6e 75 6c 6c 29 20 7b 0a 09 20 20 20 20 20 20   null) {..      
7d510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d520 20 20 64 75 72 61 74 69 6f 6e 20 3d 20 4d 61 74    duration = Mat
7d530 68 2e 6d 69 6e 28 64 75 72 61 74 69 6f 6e 2c 20  h.min(duration, 
7d540 6e 65 78 74 45 76 65 6e 74 2e 74 69 6d 65 20 2d  nextEvent.time -
7d550 20 73 74 61 72 74 54 69 63 6b 29 3b 0a 09 20 20   startTick);..  
7d560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d570 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20    }..           
7d580 20 20 20 20 20 20 20 20 20 69 66 20 28 64 75 72           if (dur
7d590 61 74 69 6f 6e 20 21 3d 3d 20 49 6e 66 69 6e 69  ation !== Infini
7d5a0 74 79 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ty) {..         
7d5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7d5c0 2f 73 63 68 65 64 75 6c 65 20 61 20 73 74 6f 70  /schedule a stop
7d5d0 20 73 69 6e 63 65 20 69 74 27 73 20 66 69 6e 69   since it's fini
7d5e0 74 65 20 64 75 72 61 74 69 6f 6e 0a 09 20 20 20  te duration..   
7d5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d600 20 20 20 20 20 74 68 69 73 2e 5f 73 74 61 74 65       this._state
7d610 2e 73 65 74 53 74 61 74 65 41 74 54 69 6d 65 28  .setStateAtTime(
7d620 54 6f 6e 65 2e 53 74 61 74 65 2e 53 74 6f 70 70  Tone.State.Stopp
7d630 65 64 2c 20 73 74 61 72 74 54 69 63 6b 20 2b 20  ed, startTick + 
7d640 64 75 72 61 74 69 6f 6e 20 2b 20 31 29 3b 0a 09  duration + 1);..
7d650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d660 20 20 20 20 20 20 20 20 64 75 72 61 74 69 6f 6e          duration
7d670 20 3d 20 54 6f 6e 65 2e 54 69 6d 65 28 64 75 72   = Tone.Time(dur
7d680 61 74 69 6f 6e 2c 20 27 69 27 29 3b 0a 09 20 20  ation, 'i');..  
7d690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d6a0 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20    }..           
7d6b0 20 20 20 20 20 20 20 20 20 76 61 72 20 69 6e 74           var int
7d6c0 65 72 76 61 6c 20 3d 20 54 6f 6e 65 2e 54 69 6d  erval = Tone.Tim
7d6d0 65 28 74 68 69 73 2e 5f 67 65 74 4c 6f 6f 70 44  e(this._getLoopD
7d6e0 75 72 61 74 69 6f 6e 28 29 2c 20 27 69 27 29 3b  uration(), 'i');
7d6f0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7d700 20 20 20 20 20 20 65 76 65 6e 74 2e 69 64 20 3d        event.id =
7d710 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 2e   Tone.Transport.
7d720 73 63 68 65 64 75 6c 65 52 65 70 65 61 74 28 74  scheduleRepeat(t
7d730 68 69 73 2e 5f 74 69 63 6b 2e 62 69 6e 64 28 74  his._tick.bind(t
7d740 68 69 73 29 2c 20 69 6e 74 65 72 76 61 6c 2c 20  his), interval, 
7d750 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 54 69  Tone.TransportTi
7d760 6d 65 28 73 74 61 72 74 54 69 63 6b 2c 20 27 69  me(startTick, 'i
7d770 27 29 2c 20 64 75 72 61 74 69 6f 6e 29 3b 0a 09  '), duration);..
7d780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d790 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20  } else {..      
7d7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 76                ev
7d7b0 65 6e 74 2e 69 64 20 3d 20 54 6f 6e 65 2e 54 72  ent.id = Tone.Tr
7d7c0 61 6e 73 70 6f 72 74 2e 73 63 68 65 64 75 6c 65  ansport.schedule
7d7d0 28 74 68 69 73 2e 5f 74 69 63 6b 2e 62 69 6e 64  (this._tick.bind
7d7e0 28 74 68 69 73 29 2c 20 73 74 61 72 74 54 69 63  (this), startTic
7d7f0 6b 20 2b 20 27 69 27 29 3b 0a 09 20 20 20 20 20  k + 'i');..     
7d800 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20             }..  
7d810 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20            }..   
7d820 20 20 20 20 20 7d 2e 62 69 6e 64 28 74 68 69 73       }.bind(this
7d830 29 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74  ));..        ret
7d840 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
7d850 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
7d860 20 52 65 74 75 72 6e 73 20 74 68 65 20 70 6c 61   Returns the pla
7d870 79 62 61 63 6b 20 73 74 61 74 65 20 6f 66 20 74  yback state of t
7d880 68 65 20 6e 6f 74 65 2c 20 65 69 74 68 65 72 20  he note, either 
7d890 22 73 74 61 72 74 65 64 22 20 6f 72 20 22 73 74  "started" or "st
7d8a0 6f 70 70 65 64 22 2e 0a 09 09 20 2a 20 20 40 74  opped".... *  @t
7d8b0 79 70 65 20 7b 53 74 72 69 6e 67 7d 0a 09 09 20  ype {String}... 
7d8c0 2a 20 20 40 72 65 61 64 4f 6e 6c 79 0a 09 09 20  *  @readOnly... 
7d8d0 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e  *  @memberOf Ton
7d8e0 65 2e 45 76 65 6e 74 23 0a 09 09 20 2a 20 20 40  e.Event#... *  @
7d8f0 6e 61 6d 65 20 73 74 61 74 65 0a 09 09 20 2a 2f  name state... */
7d900 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66  ..    Object.def
7d910 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65  ineProperty(Tone
7d920 2e 45 76 65 6e 74 2e 70 72 6f 74 6f 74 79 70 65  .Event.prototype
7d930 2c 20 27 73 74 61 74 65 27 2c 20 7b 0a 09 20 20  , 'state', {..  
7d940 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74        get: funct
7d950 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
7d960 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
7d970 73 2e 5f 73 74 61 74 65 2e 67 65 74 56 61 6c 75  s._state.getValu
7d980 65 41 74 54 69 6d 65 28 54 6f 6e 65 2e 54 72 61  eAtTime(Tone.Tra
7d990 6e 73 70 6f 72 74 2e 74 69 63 6b 73 29 3b 0a 09  nsport.ticks);..
7d9a0 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d          }..    }
7d9b0 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  );..    /**... *
7d9c0 20 20 54 68 65 20 73 74 61 72 74 20 66 72 6f 6d    The start from
7d9d0 20 74 68 65 20 73 63 68 65 64 75 6c 65 64 20 73   the scheduled s
7d9e0 74 61 72 74 20 74 69 6d 65 0a 09 09 20 2a 20 20  tart time... *  
7d9f0 40 74 79 70 65 20 7b 54 69 63 6b 73 7d 0a 09 09  @type {Ticks}...
7da00 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f   *  @memberOf To
7da10 6e 65 2e 45 76 65 6e 74 23 0a 09 09 20 2a 20 20  ne.Event#... *  
7da20 40 6e 61 6d 65 20 73 74 61 72 74 4f 66 66 73 65  @name startOffse
7da30 74 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  t... *  @private
7da40 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65  ... */..    Obje
7da50 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74  ct.definePropert
7da60 79 28 54 6f 6e 65 2e 45 76 65 6e 74 2e 70 72 6f  y(Tone.Event.pro
7da70 74 6f 74 79 70 65 2c 20 27 73 74 61 72 74 4f 66  totype, 'startOf
7da80 66 73 65 74 27 2c 20 7b 0a 09 20 20 20 20 20 20  fset', {..      
7da90 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    get: function 
7daa0 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  () {..          
7dab0 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 73    return this._s
7dac0 74 61 72 74 4f 66 66 73 65 74 3b 0a 09 20 20 20  tartOffset;..   
7dad0 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20       },..       
7dae0 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   set: function (
7daf0 6f 66 66 73 65 74 29 20 7b 0a 09 20 20 20 20 20  offset) {..     
7db00 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 74 61         this._sta
7db10 72 74 4f 66 66 73 65 74 20 3d 20 6f 66 66 73 65  rtOffset = offse
7db20 74 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  t;..        }.. 
7db30 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a     });..    /**.
7db40 09 09 20 2a 20 20 53 74 61 72 74 20 74 68 65 20  .. *  Start the 
7db50 6e 6f 74 65 20 61 74 20 74 68 65 20 67 69 76 65  note at the give
7db60 6e 20 74 69 6d 65 2e 20 0a 09 09 20 2a 20 20 40  n time. ... *  @
7db70 70 61 72 61 6d 20 20 7b 54 69 6d 65 6c 69 6e 65  param  {Timeline
7db80 50 6f 73 69 74 69 6f 6e 7d 20 20 74 69 6d 65 20  Position}  time 
7db90 20 57 68 65 6e 20 74 68 65 20 6e 6f 74 65 20 73   When the note s
7dba0 68 6f 75 6c 64 20 73 74 61 72 74 2e 0a 09 09 20  hould start.... 
7dbb0 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 54 6f 6e  *  @return  {Ton
7dbc0 65 2e 45 76 65 6e 74 7d 20 20 74 68 69 73 0a 09  e.Event}  this..
7dbd0 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 45  . */..    Tone.E
7dbe0 76 65 6e 74 2e 70 72 6f 74 6f 74 79 70 65 2e 73  vent.prototype.s
7dbf0 74 61 72 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20  tart = function 
7dc00 28 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20  (time) {..      
7dc10 20 20 74 69 6d 65 20 3d 20 74 68 69 73 2e 74 6f    time = this.to
7dc20 54 69 63 6b 73 28 74 69 6d 65 29 3b 0a 09 20 20  Ticks(time);..  
7dc30 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 5f        if (this._
7dc40 73 74 61 74 65 2e 67 65 74 56 61 6c 75 65 41 74  state.getValueAt
7dc50 54 69 6d 65 28 74 69 6d 65 29 20 3d 3d 3d 20 54  Time(time) === T
7dc60 6f 6e 65 2e 53 74 61 74 65 2e 53 74 6f 70 70 65  one.State.Stoppe
7dc70 64 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  d) {..          
7dc80 20 20 74 68 69 73 2e 5f 73 74 61 74 65 2e 61 64    this._state.ad
7dc90 64 28 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  d({..           
7dca0 20 20 20 20 20 27 73 74 61 74 65 27 3a 20 54 6f       'state': To
7dcb0 6e 65 2e 53 74 61 74 65 2e 53 74 61 72 74 65 64  ne.State.Started
7dcc0 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
7dcd0 20 20 20 27 74 69 6d 65 27 3a 20 74 69 6d 65 2c     'time': time,
7dce0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7dcf0 20 20 27 69 64 27 3a 20 75 6e 64 65 66 69 6e 65    'id': undefine
7dd00 64 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  d..            }
7dd10 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
7dd20 74 68 69 73 2e 5f 72 65 73 63 68 65 64 75 6c 65  this._reschedule
7dd30 45 76 65 6e 74 73 28 74 69 6d 65 29 3b 0a 09 20  Events(time);.. 
7dd40 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
7dd50 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09    return this;..
7dd60 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
7dd70 09 09 20 2a 20 20 53 74 6f 70 20 74 68 65 20 45  .. *  Stop the E
7dd80 76 65 6e 74 20 61 74 20 74 68 65 20 67 69 76 65  vent at the give
7dd90 6e 20 74 69 6d 65 2e 0a 09 09 20 2a 20 20 40 70  n time.... *  @p
7dda0 61 72 61 6d 20 20 7b 54 69 6d 65 6c 69 6e 65 50  aram  {TimelineP
7ddb0 6f 73 69 74 69 6f 6e 7d 20 20 74 69 6d 65 20 20  osition}  time  
7ddc0 57 68 65 6e 20 74 68 65 20 6e 6f 74 65 20 73 68  When the note sh
7ddd0 6f 75 6c 64 20 73 74 6f 70 2e 0a 09 09 20 2a 20  ould stop.... * 
7dde0 20 40 72 65 74 75 72 6e 20 20 7b 54 6f 6e 65 2e   @return  {Tone.
7ddf0 45 76 65 6e 74 7d 20 20 74 68 69 73 0a 09 09 20  Event}  this... 
7de00 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 45 76 65  */..    Tone.Eve
7de10 6e 74 2e 70 72 6f 74 6f 74 79 70 65 2e 73 74 6f  nt.prototype.sto
7de20 70 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74 69  p = function (ti
7de30 6d 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 74  me) {..        t
7de40 68 69 73 2e 63 61 6e 63 65 6c 28 74 69 6d 65 29  his.cancel(time)
7de50 3b 0a 09 20 20 20 20 20 20 20 20 74 69 6d 65 20  ;..        time 
7de60 3d 20 74 68 69 73 2e 74 6f 54 69 63 6b 73 28 74  = this.toTicks(t
7de70 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 69  ime);..        i
7de80 66 20 28 74 68 69 73 2e 5f 73 74 61 74 65 2e 67  f (this._state.g
7de90 65 74 56 61 6c 75 65 41 74 54 69 6d 65 28 74 69  etValueAtTime(ti
7dea0 6d 65 29 20 3d 3d 3d 20 54 6f 6e 65 2e 53 74 61  me) === Tone.Sta
7deb0 74 65 2e 53 74 61 72 74 65 64 29 20 7b 0a 09 20  te.Started) {.. 
7dec0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
7ded0 5f 73 74 61 74 65 2e 73 65 74 53 74 61 74 65 41  _state.setStateA
7dee0 74 54 69 6d 65 28 54 6f 6e 65 2e 53 74 61 74 65  tTime(Tone.State
7def0 2e 53 74 6f 70 70 65 64 2c 20 74 69 6d 65 29 3b  .Stopped, time);
7df00 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61  ..            va
7df10 72 20 70 72 65 76 69 6f 75 73 45 76 65 6e 74 20  r previousEvent 
7df20 3d 20 74 68 69 73 2e 5f 73 74 61 74 65 2e 67 65  = this._state.ge
7df30 74 42 65 66 6f 72 65 28 74 69 6d 65 29 3b 0a 09  tBefore(time);..
7df40 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20              var 
7df50 72 65 73 63 68 65 64 75 6c 54 69 6d 65 20 3d 20  reschedulTime = 
7df60 74 69 6d 65 3b 0a 09 20 20 20 20 20 20 20 20 20  time;..         
7df70 20 20 20 69 66 20 28 70 72 65 76 69 6f 75 73 45     if (previousE
7df80 76 65 6e 74 20 21 3d 3d 20 6e 75 6c 6c 29 20 7b  vent !== null) {
7df90 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7dfa0 20 20 72 65 73 63 68 65 64 75 6c 54 69 6d 65 20    reschedulTime 
7dfb0 3d 20 70 72 65 76 69 6f 75 73 45 76 65 6e 74 2e  = previousEvent.
7dfc0 74 69 6d 65 3b 0a 09 20 20 20 20 20 20 20 20 20  time;..         
7dfd0 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20     }..          
7dfe0 20 20 74 68 69 73 2e 5f 72 65 73 63 68 65 64 75    this._reschedu
7dff0 6c 65 45 76 65 6e 74 73 28 72 65 73 63 68 65 64  leEvents(resched
7e000 75 6c 54 69 6d 65 29 3b 0a 09 20 20 20 20 20 20  ulTime);..      
7e010 20 20 7d 0a 09 20 20 20 20 20 20 20 20 72 65 74    }..        ret
7e020 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
7e030 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
7e040 20 43 61 6e 63 65 6c 20 61 6c 6c 20 73 63 68 65   Cancel all sche
7e050 64 75 6c 65 64 20 65 76 65 6e 74 73 20 67 72 65  duled events gre
7e060 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
7e070 61 6c 20 74 6f 20 74 68 65 20 67 69 76 65 6e 20  al to the given 
7e080 74 69 6d 65 0a 09 09 20 2a 20 20 40 70 61 72 61  time... *  @para
7e090 6d 20 20 7b 54 69 6d 65 6c 69 6e 65 50 6f 73 69  m  {TimelinePosi
7e0a0 74 69 6f 6e 7d 20 20 5b 74 69 6d 65 3d 30 5d 20  tion}  [time=0] 
7e0b0 20 54 68 65 20 74 69 6d 65 20 61 66 74 65 72 20   The time after 
7e0c0 77 68 69 63 68 20 65 76 65 6e 74 73 20 77 69 6c  which events wil
7e0d0 6c 20 62 65 20 63 61 6e 63 65 6c 2e 0a 09 09 20  l be cancel.... 
7e0e0 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 54 6f 6e  *  @return  {Ton
7e0f0 65 2e 45 76 65 6e 74 7d 20 20 74 68 69 73 0a 09  e.Event}  this..
7e100 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 45  . */..    Tone.E
7e110 76 65 6e 74 2e 70 72 6f 74 6f 74 79 70 65 2e 63  vent.prototype.c
7e120 61 6e 63 65 6c 20 3d 20 66 75 6e 63 74 69 6f 6e  ancel = function
7e130 20 28 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20   (time) {..     
7e140 20 20 20 74 69 6d 65 20 3d 20 74 68 69 73 2e 64     time = this.d
7e150 65 66 61 75 6c 74 41 72 67 28 74 69 6d 65 2c 20  efaultArg(time, 
7e160 2d 49 6e 66 69 6e 69 74 79 29 3b 0a 09 20 20 20  -Infinity);..   
7e170 20 20 20 20 20 74 69 6d 65 20 3d 20 74 68 69 73       time = this
7e180 2e 74 6f 54 69 63 6b 73 28 74 69 6d 65 29 3b 0a  .toTicks(time);.
7e190 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73  .        this._s
7e1a0 74 61 74 65 2e 66 6f 72 45 61 63 68 46 72 6f 6d  tate.forEachFrom
7e1b0 28 74 69 6d 65 2c 20 66 75 6e 63 74 69 6f 6e 20  (time, function 
7e1c0 28 65 76 65 6e 74 29 20 7b 0a 09 20 20 20 20 20  (event) {..     
7e1d0 20 20 20 20 20 20 20 54 6f 6e 65 2e 54 72 61 6e         Tone.Tran
7e1e0 73 70 6f 72 74 2e 63 6c 65 61 72 28 65 76 65 6e  sport.clear(even
7e1f0 74 2e 69 64 29 3b 0a 09 20 20 20 20 20 20 20 20  t.id);..        
7e200 7d 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  });..        thi
7e210 73 2e 5f 73 74 61 74 65 2e 63 61 6e 63 65 6c 28  s._state.cancel(
7e220 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20  time);..        
7e230 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20  return this;..  
7e240 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    };..    /**...
7e250 20 2a 20 20 54 68 65 20 63 61 6c 6c 62 61 63 6b   *  The callback
7e260 20 66 75 6e 63 74 69 6f 6e 20 69 6e 76 6f 6b 65   function invoke
7e270 72 2e 20 41 6c 73 6f 20 0a 09 09 20 2a 20 20 63  r. Also ... *  c
7e280 68 65 63 6b 73 20 69 66 20 74 68 65 20 45 76 65  hecks if the Eve
7e290 6e 74 20 69 73 20 64 6f 6e 65 20 70 6c 61 79 69  nt is done playi
7e2a0 6e 67 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  ng... *  @param 
7e2b0 20 7b 4e 75 6d 62 65 72 7d 20 20 74 69 6d 65 20   {Number}  time 
7e2c0 20 54 68 65 20 74 69 6d 65 20 6f 66 20 74 68 65   The time of the
7e2d0 20 65 76 65 6e 74 20 69 6e 20 73 65 63 6f 6e 64   event in second
7e2e0 73 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  s... *  @private
7e2f0 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
7e300 2e 45 76 65 6e 74 2e 70 72 6f 74 6f 74 79 70 65  .Event.prototype
7e310 2e 5f 74 69 63 6b 20 3d 20 66 75 6e 63 74 69 6f  ._tick = functio
7e320 6e 20 28 74 69 6d 65 29 20 7b 0a 09 20 20 20 20  n (time) {..    
7e330 20 20 20 20 69 66 20 28 21 74 68 69 73 2e 6d 75      if (!this.mu
7e340 74 65 20 26 26 20 74 68 69 73 2e 5f 73 74 61 74  te && this._stat
7e350 65 2e 67 65 74 56 61 6c 75 65 41 74 54 69 6d 65  e.getValueAtTime
7e360 28 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 2e  (Tone.Transport.
7e370 74 69 63 6b 73 29 20 3d 3d 3d 20 54 6f 6e 65 2e  ticks) === Tone.
7e380 53 74 61 74 65 2e 53 74 61 72 74 65 64 29 20 7b  State.Started) {
7e390 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
7e3a0 20 28 74 68 69 73 2e 70 72 6f 62 61 62 69 6c 69   (this.probabili
7e3b0 74 79 20 3c 20 31 20 26 26 20 4d 61 74 68 2e 72  ty < 1 && Math.r
7e3c0 61 6e 64 6f 6d 28 29 20 3e 20 74 68 69 73 2e 70  andom() > this.p
7e3d0 72 6f 62 61 62 69 6c 69 74 79 29 20 7b 0a 09 20  robability) {.. 
7e3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
7e3f0 65 74 75 72 6e 3b 0a 09 20 20 20 20 20 20 20 20  eturn;..        
7e400 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20      }..         
7e410 20 20 20 69 66 20 28 74 68 69 73 2e 68 75 6d 61     if (this.huma
7e420 6e 69 7a 65 29 20 7b 0a 09 20 20 20 20 20 20 20  nize) {..       
7e430 20 20 20 20 20 20 20 20 20 76 61 72 20 76 61 72           var var
7e440 69 61 74 69 6f 6e 20 3d 20 30 2e 30 32 3b 0a 09  iation = 0.02;..
7e450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e460 69 66 20 28 21 74 68 69 73 2e 69 73 42 6f 6f 6c  if (!this.isBool
7e470 65 61 6e 28 74 68 69 73 2e 68 75 6d 61 6e 69 7a  ean(this.humaniz
7e480 65 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  e)) {..         
7e490 20 20 20 20 20 20 20 20 20 20 20 76 61 72 69 61             varia
7e4a0 74 69 6f 6e 20 3d 20 74 68 69 73 2e 74 6f 53 65  tion = this.toSe
7e4b0 63 6f 6e 64 73 28 74 68 69 73 2e 68 75 6d 61 6e  conds(this.human
7e4c0 69 7a 65 29 3b 0a 09 20 20 20 20 20 20 20 20 20  ize);..         
7e4d0 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
7e4e0 20 20 20 20 20 20 20 20 20 20 74 69 6d 65 20 2b            time +
7e4f0 3d 20 28 4d 61 74 68 2e 72 61 6e 64 6f 6d 28 29  = (Math.random()
7e500 20 2a 20 32 20 2d 20 31 29 20 2a 20 76 61 72 69   * 2 - 1) * vari
7e510 61 74 69 6f 6e 3b 0a 09 20 20 20 20 20 20 20 20  ation;..        
7e520 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20      }..         
7e530 20 20 20 74 68 69 73 2e 63 61 6c 6c 62 61 63 6b     this.callback
7e540 28 74 69 6d 65 2c 20 74 68 69 73 2e 76 61 6c 75  (time, this.valu
7e550 65 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  e);..        }..
7e560 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
7e570 09 09 20 2a 20 20 47 65 74 20 74 68 65 20 64 75  .. *  Get the du
7e580 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 6f  ration of the lo
7e590 6f 70 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72  op.... *  @retur
7e5a0 6e 20 20 7b 54 69 63 6b 73 7d 0a 09 09 20 2a 20  n  {Ticks}... * 
7e5b0 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a   @private... */.
7e5c0 09 20 20 20 20 54 6f 6e 65 2e 45 76 65 6e 74 2e  .    Tone.Event.
7e5d0 70 72 6f 74 6f 74 79 70 65 2e 5f 67 65 74 4c 6f  prototype._getLo
7e5e0 6f 70 44 75 72 61 74 69 6f 6e 20 3d 20 66 75 6e  opDuration = fun
7e5f0 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
7e600 20 20 20 20 72 65 74 75 72 6e 20 4d 61 74 68 2e      return Math.
7e610 72 6f 75 6e 64 28 28 74 68 69 73 2e 5f 6c 6f 6f  round((this._loo
7e620 70 45 6e 64 20 2d 20 74 68 69 73 2e 5f 6c 6f 6f  pEnd - this._loo
7e630 70 53 74 61 72 74 29 20 2f 20 74 68 69 73 2e 5f  pStart) / this._
7e640 70 6c 61 79 62 61 63 6b 52 61 74 65 29 3b 0a 09  playbackRate);..
7e650 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
7e660 09 09 20 2a 20 20 49 66 20 74 68 65 20 6e 6f 74  .. *  If the not
7e670 65 20 73 68 6f 75 6c 64 20 6c 6f 6f 70 20 6f 72  e should loop or
7e680 20 6e 6f 74 0a 09 09 20 2a 20 20 62 65 74 77 65   not... *  betwe
7e690 65 6e 20 54 6f 6e 65 2e 45 76 65 6e 74 2e 6c 6f  en Tone.Event.lo
7e6a0 6f 70 53 74 61 72 74 20 61 6e 64 20 0a 09 09 20  opStart and ... 
7e6b0 2a 20 20 54 6f 6e 65 2e 45 76 65 6e 74 2e 6c 6f  *  Tone.Event.lo
7e6c0 6f 70 45 6e 64 2e 20 41 6e 20 69 6e 74 65 67 65  opEnd. An intege
7e6d0 72 0a 09 09 20 2a 20 20 76 61 6c 75 65 20 63 6f  r... *  value co
7e6e0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
7e6f0 20 6e 75 6d 62 65 72 20 6f 66 0a 09 09 20 2a 20   number of... * 
7e700 20 6c 6f 6f 70 73 20 74 68 65 20 45 76 65 6e 74   loops the Event
7e710 20 64 6f 65 73 20 61 66 74 65 72 20 69 74 20 73   does after it s
7e720 74 61 72 74 73 2e 0a 09 09 20 2a 20 20 40 6d 65  tarts.... *  @me
7e730 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 45 76 65 6e  mberOf Tone.Even
7e740 74 23 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b  t#... *  @type {
7e750 42 6f 6f 6c 65 61 6e 7c 50 6f 73 69 74 69 76 65  Boolean|Positive
7e760 7d 0a 09 09 20 2a 20 20 40 6e 61 6d 65 20 6c 6f  }... *  @name lo
7e770 6f 70 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62  op... */..    Ob
7e780 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65  ject.definePrope
7e790 72 74 79 28 54 6f 6e 65 2e 45 76 65 6e 74 2e 70  rty(Tone.Event.p
7e7a0 72 6f 74 6f 74 79 70 65 2c 20 27 6c 6f 6f 70 27  rototype, 'loop'
7e7b0 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74  , {..        get
7e7c0 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  : function () {.
7e7d0 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
7e7e0 75 72 6e 20 74 68 69 73 2e 5f 6c 6f 6f 70 3b 0a  urn this._loop;.
7e7f0 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20  .        },..   
7e800 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74 69       set: functi
7e810 6f 6e 20 28 6c 6f 6f 70 29 20 7b 0a 09 20 20 20  on (loop) {..   
7e820 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c           this._l
7e830 6f 6f 70 20 3d 20 6c 6f 6f 70 3b 0a 09 20 20 20  oop = loop;..   
7e840 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 72           this._r
7e850 65 73 63 68 65 64 75 6c 65 45 76 65 6e 74 73 28  escheduleEvents(
7e860 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  );..        }.. 
7e870 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a     });..    /**.
7e880 09 09 20 2a 20 09 54 68 65 20 70 6c 61 79 62 61  .. * .The playba
7e890 63 6b 20 72 61 74 65 20 6f 66 20 74 68 65 20 6e  ck rate of the n
7e8a0 6f 74 65 2e 20 44 65 66 61 75 6c 74 73 20 74 6f  ote. Defaults to
7e8b0 20 31 2e 0a 09 09 20 2a 20 20 40 6d 65 6d 62 65   1.... *  @membe
7e8c0 72 4f 66 20 54 6f 6e 65 2e 45 76 65 6e 74 23 0a  rOf Tone.Event#.
7e8d0 09 09 20 2a 20 20 40 74 79 70 65 20 7b 50 6f 73  .. *  @type {Pos
7e8e0 69 74 69 76 65 7d 0a 09 09 20 2a 20 20 40 6e 61  itive}... *  @na
7e8f0 6d 65 20 70 6c 61 79 62 61 63 6b 52 61 74 65 0a  me playbackRate.
7e900 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09  .. *  @example..
7e910 09 20 2a 20 6e 6f 74 65 2e 6c 6f 6f 70 20 3d 20  . * note.loop = 
7e920 74 72 75 65 3b 0a 09 09 20 2a 20 2f 2f 72 65 70  true;... * //rep
7e930 65 61 74 20 74 68 65 20 6e 6f 74 65 20 74 77 69  eat the note twi
7e940 63 65 20 61 73 20 66 61 73 74 0a 09 09 20 2a 20  ce as fast... * 
7e950 6e 6f 74 65 2e 70 6c 61 79 62 61 63 6b 52 61 74  note.playbackRat
7e960 65 20 3d 20 32 3b 0a 09 09 20 2a 2f 0a 09 20 20  e = 2;... */..  
7e970 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50    Object.defineP
7e980 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 45 76 65  roperty(Tone.Eve
7e990 6e 74 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 70  nt.prototype, 'p
7e9a0 6c 61 79 62 61 63 6b 52 61 74 65 27 2c 20 7b 0a  laybackRate', {.
7e9b0 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75  .        get: fu
7e9c0 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
7e9d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
7e9e0 74 68 69 73 2e 5f 70 6c 61 79 62 61 63 6b 52 61  this._playbackRa
7e9f0 74 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a  te;..        },.
7ea00 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66 75  .        set: fu
7ea10 6e 63 74 69 6f 6e 20 28 72 61 74 65 29 20 7b 0a  nction (rate) {.
7ea20 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
7ea30 73 2e 5f 70 6c 61 79 62 61 63 6b 52 61 74 65 20  s._playbackRate 
7ea40 3d 20 72 61 74 65 3b 0a 09 20 20 20 20 20 20 20  = rate;..       
7ea50 20 20 20 20 20 74 68 69 73 2e 5f 72 65 73 63 68       this._resch
7ea60 65 64 75 6c 65 45 76 65 6e 74 73 28 29 3b 0a 09  eduleEvents();..
7ea70 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d          }..    }
7ea80 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  );..    /**... *
7ea90 20 20 54 68 65 20 6c 6f 6f 70 45 6e 64 20 70 6f    The loopEnd po
7eaa0 69 6e 74 20 69 73 20 74 68 65 20 74 69 6d 65 20  int is the time 
7eab0 74 68 65 20 65 76 65 6e 74 20 77 69 6c 6c 20 6c  the event will l
7eac0 6f 6f 70 0a 09 09 20 2a 20 20 69 66 20 54 6f 6e  oop... *  if Ton
7ead0 65 2e 45 76 65 6e 74 2e 6c 6f 6f 70 20 69 73 20  e.Event.loop is 
7eae0 74 72 75 65 2e 0a 09 09 20 2a 20 20 40 6d 65 6d  true.... *  @mem
7eaf0 62 65 72 4f 66 20 54 6f 6e 65 2e 45 76 65 6e 74  berOf Tone.Event
7eb00 23 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54  #... *  @type {T
7eb10 72 61 6e 73 70 6f 72 74 54 69 6d 65 7d 0a 09 09  ransportTime}...
7eb20 20 2a 20 20 40 6e 61 6d 65 20 6c 6f 6f 70 45 6e   *  @name loopEn
7eb30 64 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a  d... */..    Obj
7eb40 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72  ect.defineProper
7eb50 74 79 28 54 6f 6e 65 2e 45 76 65 6e 74 2e 70 72  ty(Tone.Event.pr
7eb60 6f 74 6f 74 79 70 65 2c 20 27 6c 6f 6f 70 45 6e  ototype, 'loopEn
7eb70 64 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67  d', {..        g
7eb80 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  et: function () 
7eb90 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
7eba0 65 74 75 72 6e 20 54 6f 6e 65 2e 54 72 61 6e 73  eturn Tone.Trans
7ebb0 70 6f 72 74 54 69 6d 65 28 74 68 69 73 2e 5f 6c  portTime(this._l
7ebc0 6f 6f 70 45 6e 64 2c 20 27 69 27 29 2e 74 6f 4e  oopEnd, 'i').toN
7ebd0 6f 74 61 74 69 6f 6e 28 29 3b 0a 09 20 20 20 20  otation();..    
7ebe0 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20      },..        
7ebf0 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 6c  set: function (l
7ec00 6f 6f 70 45 6e 64 29 20 7b 0a 09 20 20 20 20 20  oopEnd) {..     
7ec10 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 6f 6f         this._loo
7ec20 70 45 6e 64 20 3d 20 74 68 69 73 2e 74 6f 54 69  pEnd = this.toTi
7ec30 63 6b 73 28 6c 6f 6f 70 45 6e 64 29 3b 0a 09 20  cks(loopEnd);.. 
7ec40 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
7ec50 68 69 73 2e 5f 6c 6f 6f 70 29 20 7b 0a 09 20 20  his._loop) {..  
7ec60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
7ec70 69 73 2e 5f 72 65 73 63 68 65 64 75 6c 65 45 76  is._rescheduleEv
7ec80 65 6e 74 73 28 29 3b 0a 09 20 20 20 20 20 20 20  ents();..       
7ec90 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
7eca0 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20  }..    });..    
7ecb0 2f 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20 74 69  /**... *  The ti
7ecc0 6d 65 20 77 68 65 6e 20 74 68 65 20 6c 6f 6f 70  me when the loop
7ecd0 20 73 68 6f 75 6c 64 20 73 74 61 72 74 2e 20 0a   should start. .
7ece0 09 09 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20  .. *  @memberOf 
7ecf0 54 6f 6e 65 2e 45 76 65 6e 74 23 0a 09 09 20 2a  Tone.Event#... *
7ed00 20 20 40 74 79 70 65 20 7b 54 72 61 6e 73 70 6f    @type {Transpo
7ed10 72 74 54 69 6d 65 7d 0a 09 09 20 2a 20 20 40 6e  rtTime}... *  @n
7ed20 61 6d 65 20 6c 6f 6f 70 53 74 61 72 74 0a 09 09  ame loopStart...
7ed30 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e   */..    Object.
7ed40 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54  defineProperty(T
7ed50 6f 6e 65 2e 45 76 65 6e 74 2e 70 72 6f 74 6f 74  one.Event.protot
7ed60 79 70 65 2c 20 27 6c 6f 6f 70 53 74 61 72 74 27  ype, 'loopStart'
7ed70 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74  , {..        get
7ed80 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  : function () {.
7ed90 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
7eda0 75 72 6e 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f  urn Tone.Transpo
7edb0 72 74 54 69 6d 65 28 74 68 69 73 2e 5f 6c 6f 6f  rtTime(this._loo
7edc0 70 53 74 61 72 74 2c 20 27 69 27 29 2e 74 6f 4e  pStart, 'i').toN
7edd0 6f 74 61 74 69 6f 6e 28 29 3b 0a 09 20 20 20 20  otation();..    
7ede0 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20      },..        
7edf0 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 6c  set: function (l
7ee00 6f 6f 70 53 74 61 72 74 29 20 7b 0a 09 20 20 20  oopStart) {..   
7ee10 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c           this._l
7ee20 6f 6f 70 53 74 61 72 74 20 3d 20 74 68 69 73 2e  oopStart = this.
7ee30 74 6f 54 69 63 6b 73 28 6c 6f 6f 70 53 74 61 72  toTicks(loopStar
7ee40 74 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  t);..           
7ee50 20 69 66 20 28 74 68 69 73 2e 5f 6c 6f 6f 70 29   if (this._loop)
7ee60 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7ee70 20 20 20 20 74 68 69 73 2e 5f 72 65 73 63 68 65      this._resche
7ee80 64 75 6c 65 45 76 65 6e 74 73 28 29 3b 0a 09 20  duleEvents();.. 
7ee90 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20             }..  
7eea0 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b        }..    });
7eeb0 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
7eec0 54 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 67  The current prog
7eed0 72 65 73 73 20 6f 66 20 74 68 65 20 6c 6f 6f 70  ress of the loop
7eee0 20 69 6e 74 65 72 76 61 6c 2e 0a 09 09 20 2a 20   interval.... * 
7eef0 20 52 65 74 75 72 6e 73 20 30 20 69 66 20 74 68   Returns 0 if th
7ef00 65 20 65 76 65 6e 74 20 69 73 20 6e 6f 74 20 73  e event is not s
7ef10 74 61 72 74 65 64 20 79 65 74 20 6f 72 0a 09 09  tarted yet or...
7ef20 20 2a 20 20 69 74 20 69 73 20 6e 6f 74 20 73 65   *  it is not se
7ef30 74 20 74 6f 20 6c 6f 6f 70 2e 0a 09 09 20 2a 20  t to loop.... * 
7ef40 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e   @memberOf Tone.
7ef50 45 76 65 6e 74 23 0a 09 09 20 2a 20 20 40 74 79  Event#... *  @ty
7ef60 70 65 20 7b 4e 6f 72 6d 61 6c 52 61 6e 67 65 7d  pe {NormalRange}
7ef70 0a 09 09 20 2a 20 20 40 6e 61 6d 65 20 70 72 6f  ... *  @name pro
7ef80 67 72 65 73 73 0a 09 09 20 2a 20 20 40 72 65 61  gress... *  @rea
7ef90 64 4f 6e 6c 79 0a 09 09 20 2a 2f 0a 09 20 20 20  dOnly... */..   
7efa0 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72   Object.definePr
7efb0 6f 70 65 72 74 79 28 54 6f 6e 65 2e 45 76 65 6e  operty(Tone.Even
7efc0 74 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 70 72  t.prototype, 'pr
7efd0 6f 67 72 65 73 73 27 2c 20 7b 0a 09 20 20 20 20  ogress', {..    
7efe0 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f      get: functio
7eff0 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
7f000 20 20 20 20 69 66 20 28 74 68 69 73 2e 5f 6c 6f      if (this._lo
7f010 6f 70 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  op) {..         
7f020 20 20 20 20 20 20 20 76 61 72 20 74 69 63 6b 73         var ticks
7f030 20 3d 20 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72   = Tone.Transpor
7f040 74 2e 74 69 63 6b 73 3b 0a 09 20 20 20 20 20 20  t.ticks;..      
7f050 20 20 20 20 20 20 20 20 20 20 76 61 72 20 6c 61            var la
7f060 73 74 45 76 65 6e 74 20 3d 20 74 68 69 73 2e 5f  stEvent = this._
7f070 73 74 61 74 65 2e 67 65 74 28 74 69 63 6b 73 29  state.get(ticks)
7f080 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
7f090 20 20 20 69 66 20 28 6c 61 73 74 45 76 65 6e 74     if (lastEvent
7f0a0 20 21 3d 3d 20 6e 75 6c 6c 20 26 26 20 6c 61 73   !== null && las
7f0b0 74 45 76 65 6e 74 2e 73 74 61 74 65 20 3d 3d 3d  tEvent.state ===
7f0c0 20 54 6f 6e 65 2e 53 74 61 74 65 2e 53 74 61 72   Tone.State.Star
7f0d0 74 65 64 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ted) {..        
7f0e0 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20              var 
7f0f0 6c 6f 6f 70 44 75 72 61 74 69 6f 6e 20 3d 20 74  loopDuration = t
7f100 68 69 73 2e 5f 67 65 74 4c 6f 6f 70 44 75 72 61  his._getLoopDura
7f110 74 69 6f 6e 28 29 3b 0a 09 20 20 20 20 20 20 20  tion();..       
7f120 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72               var
7f130 20 70 72 6f 67 72 65 73 73 20 3d 20 28 74 69 63   progress = (tic
7f140 6b 73 20 2d 20 6c 61 73 74 45 76 65 6e 74 2e 74  ks - lastEvent.t
7f150 69 6d 65 29 20 25 20 6c 6f 6f 70 44 75 72 61 74  ime) % loopDurat
7f160 69 6f 6e 3b 0a 09 20 20 20 20 20 20 20 20 20 20  ion;..          
7f170 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7f180 20 70 72 6f 67 72 65 73 73 20 2f 20 6c 6f 6f 70   progress / loop
7f190 44 75 72 61 74 69 6f 6e 3b 0a 09 20 20 20 20 20  Duration;..     
7f1a0 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
7f1b0 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e {..           
7f1c0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
7f1d0 30 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
7f1e0 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20      }..         
7f1f0 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20     } else {..   
7f200 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
7f210 75 72 6e 20 30 3b 0a 09 20 20 20 20 20 20 20 20  urn 0;..        
7f220 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d      }..        }
7f230 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f  ..    });..    /
7f240 2a 2a 0a 09 09 20 2a 20 20 43 6c 65 61 6e 20 75  **... *  Clean u
7f250 70 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20  p... *  @return 
7f260 20 7b 54 6f 6e 65 2e 45 76 65 6e 74 7d 20 20 74   {Tone.Event}  t
7f270 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  his... */..    T
7f280 6f 6e 65 2e 45 76 65 6e 74 2e 70 72 6f 74 6f 74  one.Event.protot
7f290 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75  ype.dispose = fu
7f2a0 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
7f2b0 20 20 20 20 20 74 68 69 73 2e 63 61 6e 63 65 6c       this.cancel
7f2c0 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ();..        thi
7f2d0 73 2e 5f 73 74 61 74 65 2e 64 69 73 70 6f 73 65  s._state.dispose
7f2e0 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ();..        thi
7f2f0 73 2e 5f 73 74 61 74 65 20 3d 20 6e 75 6c 6c 3b  s._state = null;
7f300 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 63  ..        this.c
7f310 61 6c 6c 62 61 63 6b 20 3d 20 6e 75 6c 6c 3b 0a  allback = null;.
7f320 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 61  .        this.va
7f330 6c 75 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  lue = null;..   
7f340 20 7d 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20   };..    return 
7f350 54 6f 6e 65 2e 45 76 65 6e 74 3b 0a 09 7d 29 3b  Tone.Event;..});
7f360 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f  ..Module(functio
7f370 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20  n (Tone) {..    
7f380 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61 73 73  /**... *  @class
7f390 20 54 6f 6e 65 2e 4c 6f 6f 70 20 63 72 65 61 74   Tone.Loop creat
7f3a0 65 73 20 61 20 6c 6f 6f 70 65 64 20 63 61 6c 6c  es a looped call
7f3b0 62 61 63 6b 20 61 74 20 74 68 65 20 0a 09 09 20  back at the ... 
7f3c0 2a 20 20 20 20 20 20 20 20 20 73 70 65 63 69 66  *         specif
7f3d0 69 65 64 20 69 6e 74 65 72 76 61 6c 2e 20 54 68  ied interval. Th
7f3e0 65 20 63 61 6c 6c 62 61 63 6b 20 63 61 6e 20 62  e callback can b
7f3f0 65 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  e ... *         
7f400 73 74 61 72 74 65 64 2c 20 73 74 6f 70 70 65 64  started, stopped
7f410 20 61 6e 64 20 73 63 68 65 64 75 6c 65 64 20 61   and scheduled a
7f420 6c 6f 6e 67 0a 09 09 20 2a 20 20 20 20 20 20 20  long... *       
7f430 20 20 74 68 65 20 54 72 61 6e 73 70 6f 72 74 27    the Transport'
7f440 73 20 74 69 6d 65 6c 69 6e 65 2e 20 0a 09 09 20  s timeline. ... 
7f450 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a  *  @example... *
7f460 20 76 61 72 20 6c 6f 6f 70 20 3d 20 6e 65 77 20   var loop = new 
7f470 54 6f 6e 65 2e 4c 6f 6f 70 28 66 75 6e 63 74 69  Tone.Loop(functi
7f480 6f 6e 28 74 69 6d 65 29 7b 0a 09 09 20 2a 20 09  on(time){... * .
7f490 2f 2f 74 72 69 67 67 65 72 65 64 20 65 76 65 72  //triggered ever
7f4a0 79 20 65 69 67 68 74 68 20 6e 6f 74 65 2e 20 0a  y eighth note. .
7f4b0 09 09 20 2a 20 09 63 6f 6e 73 6f 6c 65 2e 6c 6f  .. * .console.lo
7f4c0 67 28 74 69 6d 65 29 3b 0a 09 09 20 2a 20 7d 2c  g(time);... * },
7f4d0 20 22 38 6e 22 29 2e 73 74 61 72 74 28 30 29 3b   "8n").start(0);
7f4e0 0a 09 09 20 2a 20 54 6f 6e 65 2e 54 72 61 6e 73  ... * Tone.Trans
7f4f0 70 6f 72 74 2e 73 74 61 72 74 28 29 3b 0a 09 09  port.start();...
7f500 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f   *  @extends {To
7f510 6e 65 7d 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  ne}... *  @param
7f520 20 7b 46 75 6e 63 74 69 6f 6e 7d 20 63 61 6c 6c   {Function} call
7f530 62 61 63 6b 20 54 68 65 20 63 61 6c 6c 62 61 63  back The callbac
7f540 6b 20 74 6f 20 69 6e 76 6f 6b 65 20 77 69 74 68  k to invoke with
7f550 20 74 68 65 20 65 76 65 6e 74 2e 0a 09 09 20 2a   the event.... *
7f560 20 20 40 70 61 72 61 6d 20 7b 54 69 6d 65 7d 20    @param {Time} 
7f570 69 6e 74 65 72 76 61 6c 20 54 68 65 20 74 69 6d  interval The tim
7f580 65 20 62 65 74 77 65 65 6e 20 73 75 63 63 65 73  e between succes
7f590 73 69 76 65 20 63 61 6c 6c 62 61 63 6b 20 63 61  sive callback ca
7f5a0 6c 6c 73 2e 20 0a 09 09 20 2a 2f 0a 09 20 20 20  lls. ... */..   
7f5b0 20 54 6f 6e 65 2e 4c 6f 6f 70 20 3d 20 66 75 6e   Tone.Loop = fun
7f5c0 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
7f5d0 20 20 20 20 76 61 72 20 6f 70 74 69 6f 6e 73 20      var options 
7f5e0 3d 20 74 68 69 73 2e 6f 70 74 69 6f 6e 73 4f 62  = this.optionsOb
7f5f0 6a 65 63 74 28 61 72 67 75 6d 65 6e 74 73 2c 20  ject(arguments, 
7f600 5b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  [..            '
7f610 63 61 6c 6c 62 61 63 6b 27 2c 0a 09 20 20 20 20  callback',..    
7f620 20 20 20 20 20 20 20 20 27 69 6e 74 65 72 76 61          'interva
7f630 6c 27 0a 09 20 20 20 20 20 20 20 20 5d 2c 20 54  l'..        ], T
7f640 6f 6e 65 2e 4c 6f 6f 70 2e 64 65 66 61 75 6c 74  one.Loop.default
7f650 73 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  s);..        /**
7f660 0a 09 09 09 20 2a 20 20 54 68 65 20 65 76 65 6e  .... *  The even
7f670 74 20 77 68 69 63 68 20 70 72 6f 64 75 63 65 73  t which produces
7f680 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 73 0a 09   the callbacks..
7f690 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
7f6a0 68 69 73 2e 5f 65 76 65 6e 74 20 3d 20 6e 65 77  his._event = new
7f6b0 20 54 6f 6e 65 2e 45 76 65 6e 74 28 7b 0a 09 20   Tone.Event({.. 
7f6c0 20 20 20 20 20 20 20 20 20 20 20 27 63 61 6c 6c             'call
7f6d0 62 61 63 6b 27 3a 20 74 68 69 73 2e 5f 74 69 63  back': this._tic
7f6e0 6b 2e 62 69 6e 64 28 74 68 69 73 29 2c 0a 09 20  k.bind(this),.. 
7f6f0 20 20 20 20 20 20 20 20 20 20 20 27 6c 6f 6f 70             'loop
7f700 27 3a 20 74 72 75 65 2c 0a 09 20 20 20 20 20 20  ': true,..      
7f710 20 20 20 20 20 20 27 6c 6f 6f 70 45 6e 64 27 3a        'loopEnd':
7f720 20 6f 70 74 69 6f 6e 73 2e 69 6e 74 65 72 76 61   options.interva
7f730 6c 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
7f740 27 70 6c 61 79 62 61 63 6b 52 61 74 65 27 3a 20  'playbackRate': 
7f750 6f 70 74 69 6f 6e 73 2e 70 6c 61 79 62 61 63 6b  options.playback
7f760 52 61 74 65 2c 0a 09 20 20 20 20 20 20 20 20 20  Rate,..         
7f770 20 20 20 27 70 72 6f 62 61 62 69 6c 69 74 79 27     'probability'
7f780 3a 20 6f 70 74 69 6f 6e 73 2e 70 72 6f 62 61 62  : options.probab
7f790 69 6c 69 74 79 0a 09 20 20 20 20 20 20 20 20 7d  ility..        }
7f7a0 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
7f7b0 09 09 09 20 2a 20 20 54 68 65 20 63 61 6c 6c 62  ... *  The callb
7f7c0 61 63 6b 20 74 6f 20 69 6e 76 6f 6b 65 20 77 69  ack to invoke wi
7f7d0 74 68 20 74 68 65 20 6e 65 78 74 20 65 76 65 6e  th the next even
7f7e0 74 20 69 6e 20 74 68 65 20 70 61 74 74 65 72 6e  t in the pattern
7f7f0 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 46  .... *  @type {F
7f800 75 6e 63 74 69 6f 6e 7d 0a 09 09 09 20 2a 2f 0a  unction}.... */.
7f810 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 61  .        this.ca
7f820 6c 6c 62 61 63 6b 20 3d 20 6f 70 74 69 6f 6e 73  llback = options
7f830 2e 63 61 6c 6c 62 61 63 6b 3b 0a 09 20 20 20 20  .callback;..    
7f840 20 20 20 20 2f 2f 73 65 74 20 74 68 65 20 69 74      //set the it
7f850 65 72 61 74 69 6f 6e 73 0a 09 20 20 20 20 20 20  erations..      
7f860 20 20 74 68 69 73 2e 69 74 65 72 61 74 69 6f 6e    this.iteration
7f870 73 20 3d 20 6f 70 74 69 6f 6e 73 2e 69 74 65 72  s = options.iter
7f880 61 74 69 6f 6e 73 3b 0a 09 20 20 20 20 7d 3b 0a  ations;..    };.
7f890 09 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64  .    Tone.extend
7f8a0 28 54 6f 6e 65 2e 4c 6f 6f 70 29 3b 0a 09 20 20  (Tone.Loop);..  
7f8b0 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20    /**... *  The 
7f8c0 64 65 66 61 75 6c 74 73 0a 09 09 20 2a 20 20 40  defaults... *  @
7f8d0 63 6f 6e 73 74 0a 09 09 20 2a 20 20 40 74 79 70  const... *  @typ
7f8e0 65 20 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a  e  {Object}... *
7f8f0 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4c 6f 6f 70  /..    Tone.Loop
7f900 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b 0a 09 20  .defaults = {.. 
7f910 20 20 20 20 20 20 20 27 69 6e 74 65 72 76 61 6c         'interval
7f920 27 3a 20 27 34 6e 27 2c 0a 09 20 20 20 20 20 20  ': '4n',..      
7f930 20 20 27 63 61 6c 6c 62 61 63 6b 27 3a 20 54 6f    'callback': To
7f940 6e 65 2e 6e 6f 4f 70 2c 0a 09 20 20 20 20 20 20  ne.noOp,..      
7f950 20 20 27 70 6c 61 79 62 61 63 6b 52 61 74 65 27    'playbackRate'
7f960 3a 20 31 2c 0a 09 20 20 20 20 20 20 20 20 27 69  : 1,..        'i
7f970 74 65 72 61 74 69 6f 6e 73 27 3a 20 49 6e 66 69  terations': Infi
7f980 6e 69 74 79 2c 0a 09 20 20 20 20 20 20 20 20 27  nity,..        '
7f990 70 72 6f 62 61 62 69 6c 69 74 79 27 3a 20 74 72  probability': tr
7f9a0 75 65 2c 0a 09 20 20 20 20 20 20 20 20 27 6d 75  ue,..        'mu
7f9b0 74 65 27 3a 20 66 61 6c 73 65 0a 09 20 20 20 20  te': false..    
7f9c0 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  };..    /**... *
7f9d0 20 20 53 74 61 72 74 20 74 68 65 20 6c 6f 6f 70    Start the loop
7f9e0 20 61 74 20 74 68 65 20 73 70 65 63 69 66 69 65   at the specifie
7f9f0 64 20 74 69 6d 65 20 61 6c 6f 6e 67 20 74 68 65  d time along the
7fa00 20 54 72 61 6e 73 70 6f 72 74 27 73 0a 09 09 20   Transport's... 
7fa10 2a 20 20 74 69 6d 65 6c 69 6e 65 2e 0a 09 09 20  *  timeline.... 
7fa20 2a 20 20 40 70 61 72 61 6d 20 20 7b 54 69 6d 65  *  @param  {Time
7fa30 6c 69 6e 65 50 6f 73 69 74 69 6f 6e 3d 7d 20 20  linePosition=}  
7fa40 74 69 6d 65 20 20 57 68 65 6e 20 74 6f 20 73 74  time  When to st
7fa50 61 72 74 20 74 68 65 20 4c 6f 6f 70 2e 0a 09 09  art the Loop....
7fa60 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 54 6f   *  @return  {To
7fa70 6e 65 2e 4c 6f 6f 70 7d 20 20 74 68 69 73 0a 09  ne.Loop}  this..
7fa80 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4c  . */..    Tone.L
7fa90 6f 6f 70 2e 70 72 6f 74 6f 74 79 70 65 2e 73 74  oop.prototype.st
7faa0 61 72 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  art = function (
7fab0 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20 20  time) {..       
7fac0 20 74 68 69 73 2e 5f 65 76 65 6e 74 2e 73 74 61   this._event.sta
7fad0 72 74 28 74 69 6d 65 29 3b 0a 09 20 20 20 20 20  rt(time);..     
7fae0 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a     return this;.
7faf0 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
7fb00 0a 09 09 20 2a 20 20 53 74 6f 70 20 74 68 65 20  ... *  Stop the 
7fb10 6c 6f 6f 70 20 61 74 20 74 68 65 20 67 69 76 65  loop at the give
7fb20 6e 20 74 69 6d 65 2e 0a 09 09 20 2a 20 20 40 70  n time.... *  @p
7fb30 61 72 61 6d 20 20 7b 54 69 6d 65 6c 69 6e 65 50  aram  {TimelineP
7fb40 6f 73 69 74 69 6f 6e 3d 7d 20 20 74 69 6d 65 20  osition=}  time 
7fb50 20 57 68 65 6e 20 74 6f 20 73 74 6f 70 20 74 68   When to stop th
7fb60 65 20 41 72 70 65 67 67 69 6f 0a 09 09 20 2a 20  e Arpeggio... * 
7fb70 20 40 72 65 74 75 72 6e 20 20 7b 54 6f 6e 65 2e   @return  {Tone.
7fb80 4c 6f 6f 70 7d 20 20 74 68 69 73 0a 09 09 20 2a  Loop}  this... *
7fb90 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4c 6f 6f 70  /..    Tone.Loop
7fba0 2e 70 72 6f 74 6f 74 79 70 65 2e 73 74 6f 70 20  .prototype.stop 
7fbb0 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65  = function (time
7fbc0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ) {..        thi
7fbd0 73 2e 5f 65 76 65 6e 74 2e 73 74 6f 70 28 74 69  s._event.stop(ti
7fbe0 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65  me);..        re
7fbf0 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20  turn this;..    
7fc00 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  };..    /**... *
7fc10 20 20 43 61 6e 63 65 6c 20 61 6c 6c 20 73 63 68    Cancel all sch
7fc20 65 64 75 6c 65 64 20 65 76 65 6e 74 73 20 67 72  eduled events gr
7fc30 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
7fc40 75 61 6c 20 74 6f 20 74 68 65 20 67 69 76 65 6e  ual to the given
7fc50 20 74 69 6d 65 0a 09 09 20 2a 20 20 40 70 61 72   time... *  @par
7fc60 61 6d 20 20 7b 54 69 6d 65 6c 69 6e 65 50 6f 73  am  {TimelinePos
7fc70 69 74 69 6f 6e 7d 20 20 5b 74 69 6d 65 3d 30 5d  ition}  [time=0]
7fc80 20 20 54 68 65 20 74 69 6d 65 20 61 66 74 65 72    The time after
7fc90 20 77 68 69 63 68 20 65 76 65 6e 74 73 20 77 69   which events wi
7fca0 6c 6c 20 62 65 20 63 61 6e 63 65 6c 2e 0a 09 09  ll be cancel....
7fcb0 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 54 6f   *  @return  {To
7fcc0 6e 65 2e 4c 6f 6f 70 7d 20 20 74 68 69 73 0a 09  ne.Loop}  this..
7fcd0 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4c  . */..    Tone.L
7fce0 6f 6f 70 2e 70 72 6f 74 6f 74 79 70 65 2e 63 61  oop.prototype.ca
7fcf0 6e 63 65 6c 20 3d 20 66 75 6e 63 74 69 6f 6e 20  ncel = function 
7fd00 28 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20  (time) {..      
7fd10 20 20 74 68 69 73 2e 5f 65 76 65 6e 74 2e 63 61    this._event.ca
7fd20 6e 63 65 6c 28 74 69 6d 65 29 3b 0a 09 20 20 20  ncel(time);..   
7fd30 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
7fd40 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  ;..    };..    /
7fd50 2a 2a 0a 09 09 20 2a 20 20 49 6e 74 65 72 6e 61  **... *  Interna
7fd60 6c 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 65  l function calle
7fd70 64 20 77 68 65 6e 20 74 68 65 20 6e 6f 74 65 73  d when the notes
7fd80 20 73 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65   should be calle
7fd90 64 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20  d... *  @param  
7fda0 7b 4e 75 6d 62 65 72 7d 20 20 74 69 6d 65 20 20  {Number}  time  
7fdb0 54 68 65 20 74 69 6d 65 20 74 68 65 20 65 76 65  The time the eve
7fdc0 6e 74 20 6f 63 63 75 72 73 0a 09 09 20 2a 20 20  nt occurs... *  
7fdd0 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09  @private... */..
7fde0 20 20 20 20 54 6f 6e 65 2e 4c 6f 6f 70 2e 70 72      Tone.Loop.pr
7fdf0 6f 74 6f 74 79 70 65 2e 5f 74 69 63 6b 20 3d 20  ototype._tick = 
7fe00 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65 29 20  function (time) 
7fe10 7b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  {..        this.
7fe20 63 61 6c 6c 62 61 63 6b 28 74 69 6d 65 29 3b 0a  callback(time);.
7fe30 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
7fe40 0a 09 09 20 2a 20 20 54 68 65 20 73 74 61 74 65  ... *  The state
7fe50 20 6f 66 20 74 68 65 20 4c 6f 6f 70 2c 20 65 69   of the Loop, ei
7fe60 74 68 65 72 20 73 74 61 72 74 65 64 20 6f 72 20  ther started or 
7fe70 73 74 6f 70 70 65 64 2e 0a 09 09 20 2a 20 20 40  stopped.... *  @
7fe80 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 4c 6f  memberOf Tone.Lo
7fe90 6f 70 23 0a 09 09 20 2a 20 20 40 74 79 70 65 20  op#... *  @type 
7fea0 7b 53 74 72 69 6e 67 7d 0a 09 09 20 2a 20 20 40  {String}... *  @
7feb0 6e 61 6d 65 20 73 74 61 74 65 0a 09 09 20 2a 20  name state... * 
7fec0 20 40 72 65 61 64 4f 6e 6c 79 0a 09 09 20 2a 2f   @readOnly... */
7fed0 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66  ..    Object.def
7fee0 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65  ineProperty(Tone
7fef0 2e 4c 6f 6f 70 2e 70 72 6f 74 6f 74 79 70 65 2c  .Loop.prototype,
7ff00 20 27 73 74 61 74 65 27 2c 20 7b 0a 09 20 20 20   'state', {..   
7ff10 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69       get: functi
7ff20 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
7ff30 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
7ff40 2e 5f 65 76 65 6e 74 2e 73 74 61 74 65 3b 0a 09  ._event.state;..
7ff50 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d          }..    }
7ff60 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  );..    /**... *
7ff70 20 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 6f    The progress o
7ff80 66 20 74 68 65 20 6c 6f 6f 70 20 61 73 20 61 20  f the loop as a 
7ff90 76 61 6c 75 65 20 62 65 74 77 65 65 6e 20 30 2d  value between 0-
7ffa0 31 2e 20 30 2c 20 77 68 65 6e 0a 09 09 20 2a 20  1. 0, when... * 
7ffb0 20 74 68 65 20 6c 6f 6f 70 20 69 73 20 73 74 6f   the loop is sto
7ffc0 70 70 65 64 20 6f 72 20 64 6f 6e 65 20 69 74 65  pped or done ite
7ffd0 72 61 74 69 6e 67 2e 20 0a 09 09 20 2a 20 20 40  rating. ... *  @
7ffe0 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 4c 6f  memberOf Tone.Lo
7fff0 6f 70 23 0a 09 09 20 2a 20 20 40 74 79 70 65 20  op#... *  @type 
80000 7b 4e 6f 72 6d 61 6c 52 61 6e 67 65 7d 0a 09 09  {NormalRange}...
80010 20 2a 20 20 40 6e 61 6d 65 20 70 72 6f 67 72 65   *  @name progre
80020 73 73 0a 09 09 20 2a 20 20 40 72 65 61 64 4f 6e  ss... *  @readOn
80030 6c 79 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62  ly... */..    Ob
80040 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65  ject.definePrope
80050 72 74 79 28 54 6f 6e 65 2e 4c 6f 6f 70 2e 70 72  rty(Tone.Loop.pr
80060 6f 74 6f 74 79 70 65 2c 20 27 70 72 6f 67 72 65  ototype, 'progre
80070 73 73 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20  ss', {..        
80080 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29  get: function ()
80090 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
800a0 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 65 76 65  return this._eve
800b0 6e 74 2e 70 72 6f 67 72 65 73 73 3b 0a 09 20 20  nt.progress;..  
800c0 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b        }..    });
800d0 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
800e0 54 68 65 20 74 69 6d 65 20 62 65 74 77 65 65 6e  The time between
800f0 20 73 75 63 63 65 73 73 69 76 65 20 63 61 6c 6c   successive call
80100 62 61 63 6b 73 2e 20 0a 09 09 20 2a 20 20 40 65  backs. ... *  @e
80110 78 61 6d 70 6c 65 0a 09 09 20 2a 20 6c 6f 6f 70  xample... * loop
80120 2e 69 6e 74 65 72 76 61 6c 20 3d 20 22 38 6e 22  .interval = "8n"
80130 3b 20 2f 2f 6c 6f 6f 70 20 65 76 65 72 79 20 38  ; //loop every 8
80140 6e 0a 09 09 20 2a 20 20 40 6d 65 6d 62 65 72 4f  n... *  @memberO
80150 66 20 54 6f 6e 65 2e 4c 6f 6f 70 23 0a 09 09 20  f Tone.Loop#... 
80160 2a 20 20 40 74 79 70 65 20 7b 54 69 6d 65 7d 0a  *  @type {Time}.
80170 09 09 20 2a 20 20 40 6e 61 6d 65 20 69 6e 74 65  .. *  @name inte
80180 72 76 61 6c 0a 09 09 20 2a 2f 0a 09 20 20 20 20  rval... */..    
80190 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f  Object.definePro
801a0 70 65 72 74 79 28 54 6f 6e 65 2e 4c 6f 6f 70 2e  perty(Tone.Loop.
801b0 70 72 6f 74 6f 74 79 70 65 2c 20 27 69 6e 74 65  prototype, 'inte
801c0 72 76 61 6c 27 2c 20 7b 0a 09 20 20 20 20 20 20  rval', {..      
801d0 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    get: function 
801e0 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  () {..          
801f0 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 65    return this._e
80200 76 65 6e 74 2e 6c 6f 6f 70 45 6e 64 3b 0a 09 20  vent.loopEnd;.. 
80210 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20         },..     
80220 20 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e     set: function
80230 20 28 69 6e 74 65 72 76 61 6c 29 20 7b 0a 09 20   (interval) {.. 
80240 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
80250 5f 65 76 65 6e 74 2e 6c 6f 6f 70 45 6e 64 20 3d  _event.loopEnd =
80260 20 69 6e 74 65 72 76 61 6c 3b 0a 09 20 20 20 20   interval;..    
80270 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09      }..    });..
80280 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 68      /**... *  Th
80290 65 20 70 6c 61 79 62 61 63 6b 20 72 61 74 65 20  e playback rate 
802a0 6f 66 20 74 68 65 20 6c 6f 6f 70 2e 20 54 68 65  of the loop. The
802b0 20 6e 6f 72 6d 61 6c 20 70 6c 61 79 62 61 63 6b   normal playback
802c0 20 72 61 74 65 20 69 73 20 31 20 28 6e 6f 20 63   rate is 1 (no c
802d0 68 61 6e 67 65 29 2e 20 0a 09 09 20 2a 20 20 41  hange). ... *  A
802e0 20 60 70 6c 61 79 62 61 63 6b 52 61 74 65 60 20   `playbackRate` 
802f0 6f 66 20 32 20 77 6f 75 6c 64 20 62 65 20 74 77  of 2 would be tw
80300 69 63 65 20 61 73 20 66 61 73 74 2e 20 0a 09 09  ice as fast. ...
80310 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f   *  @memberOf To
80320 6e 65 2e 4c 6f 6f 70 23 0a 09 09 20 2a 20 20 40  ne.Loop#... *  @
80330 74 79 70 65 20 7b 54 69 6d 65 7d 0a 09 09 20 2a  type {Time}... *
80340 20 20 40 6e 61 6d 65 20 70 6c 61 79 62 61 63 6b    @name playback
80350 52 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20  Rate... */..    
80360 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f  Object.definePro
80370 70 65 72 74 79 28 54 6f 6e 65 2e 4c 6f 6f 70 2e  perty(Tone.Loop.
80380 70 72 6f 74 6f 74 79 70 65 2c 20 27 70 6c 61 79  prototype, 'play
80390 62 61 63 6b 52 61 74 65 27 2c 20 7b 0a 09 20 20  backRate', {..  
803a0 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74        get: funct
803b0 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
803c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
803d0 73 2e 5f 65 76 65 6e 74 2e 70 6c 61 79 62 61 63  s._event.playbac
803e0 6b 52 61 74 65 3b 0a 09 20 20 20 20 20 20 20 20  kRate;..        
803f0 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a  },..        set:
80400 20 66 75 6e 63 74 69 6f 6e 20 28 72 61 74 65 29   function (rate)
80410 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
80420 74 68 69 73 2e 5f 65 76 65 6e 74 2e 70 6c 61 79  this._event.play
80430 62 61 63 6b 52 61 74 65 20 3d 20 72 61 74 65 3b  backRate = rate;
80440 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
80450 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09   });..    /**...
80460 20 2a 20 20 52 61 6e 64 6f 6d 20 76 61 72 69 61   *  Random varia
80470 74 69 6f 6e 20 2b 2f 2d 30 2e 30 31 73 20 74 6f  tion +/-0.01s to
80480 20 74 68 65 20 73 63 68 65 64 75 6c 65 64 20 74   the scheduled t
80490 69 6d 65 2e 20 0a 09 09 20 2a 20 20 4f 72 20 67  ime. ... *  Or g
804a0 69 76 65 20 69 74 20 61 20 74 69 6d 65 20 76 61  ive it a time va
804b0 6c 75 65 20 77 68 69 63 68 20 69 74 20 77 69 6c  lue which it wil
804c0 6c 20 72 61 6e 64 6f 6d 69 7a 65 20 62 79 2e 0a  l randomize by..
804d0 09 09 20 2a 20 20 40 74 79 70 65 20 7b 42 6f 6f  .. *  @type {Boo
804e0 6c 65 61 6e 7c 54 69 6d 65 7d 0a 09 09 20 2a 20  lean|Time}... * 
804f0 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e   @memberOf Tone.
80500 4c 6f 6f 70 23 0a 09 09 20 2a 20 20 40 6e 61 6d  Loop#... *  @nam
80510 65 20 68 75 6d 61 6e 69 7a 65 0a 09 09 20 2a 2f  e humanize... */
80520 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66  ..    Object.def
80530 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65  ineProperty(Tone
80540 2e 4c 6f 6f 70 2e 70 72 6f 74 6f 74 79 70 65 2c  .Loop.prototype,
80550 20 27 68 75 6d 61 6e 69 7a 65 27 2c 20 7b 0a 09   'humanize', {..
80560 20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e          get: fun
80570 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
80580 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
80590 68 69 73 2e 5f 65 76 65 6e 74 2e 68 75 6d 61 6e  his._event.human
805a0 69 7a 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c  ize;..        },
805b0 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66  ..        set: f
805c0 75 6e 63 74 69 6f 6e 20 28 76 61 72 69 61 74 69  unction (variati
805d0 6f 6e 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  on) {..         
805e0 20 20 20 74 68 69 73 2e 5f 65 76 65 6e 74 2e 68     this._event.h
805f0 75 6d 61 6e 69 7a 65 20 3d 20 76 61 72 69 61 74  umanize = variat
80600 69 6f 6e 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a  ion;..        }.
80610 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a  .    });..    /*
80620 2a 0a 09 09 20 2a 20 20 54 68 65 20 70 72 6f 62  *... *  The prob
80630 61 62 6c 79 20 6f 66 20 74 68 65 20 63 61 6c 6c  ably of the call
80640 62 61 63 6b 20 62 65 69 6e 67 20 69 6e 76 6f 6b  back being invok
80650 65 64 2e 0a 09 09 20 2a 20 20 40 6d 65 6d 62 65  ed.... *  @membe
80660 72 4f 66 20 54 6f 6e 65 2e 4c 6f 6f 70 23 0a 09  rOf Tone.Loop#..
80670 09 20 2a 20 20 40 74 79 70 65 20 7b 4e 6f 72 6d  . *  @type {Norm
80680 61 6c 52 61 6e 67 65 7d 0a 09 09 20 2a 20 20 40  alRange}... *  @
80690 6e 61 6d 65 20 70 72 6f 62 61 62 69 6c 69 74 79  name probability
806a0 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65  ... */..    Obje
806b0 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74  ct.definePropert
806c0 79 28 54 6f 6e 65 2e 4c 6f 6f 70 2e 70 72 6f 74  y(Tone.Loop.prot
806d0 6f 74 79 70 65 2c 20 27 70 72 6f 62 61 62 69 6c  otype, 'probabil
806e0 69 74 79 27 2c 20 7b 0a 09 20 20 20 20 20 20 20  ity', {..       
806f0 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   get: function (
80700 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
80710 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 65 76   return this._ev
80720 65 6e 74 2e 70 72 6f 62 61 62 69 6c 69 74 79 3b  ent.probability;
80730 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20  ..        },..  
80740 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74        set: funct
80750 69 6f 6e 20 28 70 72 6f 62 29 20 7b 0a 09 20 20  ion (prob) {..  
80760 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
80770 65 76 65 6e 74 2e 70 72 6f 62 61 62 69 6c 69 74  event.probabilit
80780 79 20 3d 20 70 72 6f 62 3b 0a 09 20 20 20 20 20  y = prob;..     
80790 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20     }..    });.. 
807a0 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 4d 75 74     /**... *  Mut
807b0 69 6e 67 20 74 68 65 20 4c 6f 6f 70 20 6d 65 61  ing the Loop mea
807c0 6e 73 20 74 68 61 74 20 6e 6f 20 63 61 6c 6c 62  ns that no callb
807d0 61 63 6b 73 20 61 72 65 20 69 6e 76 6f 6b 65 64  acks are invoked
807e0 2e 0a 09 09 20 2a 20 20 40 6d 65 6d 62 65 72 4f  .... *  @memberO
807f0 66 20 54 6f 6e 65 2e 4c 6f 6f 70 23 0a 09 09 20  f Tone.Loop#... 
80800 2a 20 20 40 74 79 70 65 20 7b 42 6f 6f 6c 65 61  *  @type {Boolea
80810 6e 7d 0a 09 09 20 2a 20 20 40 6e 61 6d 65 20 6d  n}... *  @name m
80820 75 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f  ute... */..    O
80830 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70  bject.defineProp
80840 65 72 74 79 28 54 6f 6e 65 2e 4c 6f 6f 70 2e 70  erty(Tone.Loop.p
80850 72 6f 74 6f 74 79 70 65 2c 20 27 6d 75 74 65 27  rototype, 'mute'
80860 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74  , {..        get
80870 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  : function () {.
80880 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
80890 75 72 6e 20 74 68 69 73 2e 5f 65 76 65 6e 74 2e  urn this._event.
808a0 6d 75 74 65 3b 0a 09 20 20 20 20 20 20 20 20 7d  mute;..        }
808b0 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20  ,..        set: 
808c0 66 75 6e 63 74 69 6f 6e 20 28 6d 75 74 65 29 20  function (mute) 
808d0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
808e0 68 69 73 2e 5f 65 76 65 6e 74 2e 6d 75 74 65 20  his._event.mute 
808f0 3d 20 6d 75 74 65 3b 0a 09 20 20 20 20 20 20 20  = mute;..       
80900 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20   }..    });..   
80910 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20 6e   /**... *  The n
80920 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69  umber of iterati
80930 6f 6e 73 20 6f 66 20 74 68 65 20 6c 6f 6f 70 2e  ons of the loop.
80940 20 54 68 65 20 64 65 66 61 75 6c 74 0a 09 09 20   The default... 
80950 2a 20 20 76 61 6c 75 65 20 69 73 20 49 6e 66 69  *  value is Infi
80960 6e 69 74 79 20 28 6c 6f 6f 70 20 66 6f 72 65 76  nity (loop forev
80970 65 72 29 2e 0a 09 09 20 2a 20 20 40 6d 65 6d 62  er).... *  @memb
80980 65 72 4f 66 20 54 6f 6e 65 2e 4c 6f 6f 70 23 0a  erOf Tone.Loop#.
80990 09 09 20 2a 20 20 40 74 79 70 65 20 7b 50 6f 73  .. *  @type {Pos
809a0 69 74 69 76 65 7d 0a 09 09 20 2a 20 20 40 6e 61  itive}... *  @na
809b0 6d 65 20 69 74 65 72 61 74 69 6f 6e 73 0a 09 09  me iterations...
809c0 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e   */..    Object.
809d0 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54  defineProperty(T
809e0 6f 6e 65 2e 4c 6f 6f 70 2e 70 72 6f 74 6f 74 79  one.Loop.prototy
809f0 70 65 2c 20 27 69 74 65 72 61 74 69 6f 6e 73 27  pe, 'iterations'
80a00 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74  , {..        get
80a10 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  : function () {.
80a20 09 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
80a30 28 74 68 69 73 2e 5f 65 76 65 6e 74 2e 6c 6f 6f  (this._event.loo
80a40 70 20 3d 3d 3d 20 74 72 75 65 29 20 7b 0a 09 20  p === true) {.. 
80a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
80a60 65 74 75 72 6e 20 49 6e 66 69 6e 69 74 79 3b 0a  eturn Infinity;.
80a70 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
80a80 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20  lse {..         
80a90 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
80aa0 69 73 2e 5f 65 76 65 6e 74 2e 6c 6f 6f 70 3b 0a  is._event.loop;.
80ab0 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09  .            }..
80ac0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
80ad0 72 6e 20 74 68 69 73 2e 5f 70 61 74 74 65 72 6e  rn this._pattern
80ae0 2e 69 6e 64 65 78 3b 0a 09 20 20 20 20 20 20 20  .index;..       
80af0 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74   },..        set
80b00 3a 20 66 75 6e 63 74 69 6f 6e 20 28 69 74 65 72  : function (iter
80b10 73 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  s) {..          
80b20 20 20 69 66 20 28 69 74 65 72 73 20 3d 3d 3d 20    if (iters === 
80b30 49 6e 66 69 6e 69 74 79 29 20 7b 0a 09 20 20 20  Infinity) {..   
80b40 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
80b50 73 2e 5f 65 76 65 6e 74 2e 6c 6f 6f 70 20 3d 20  s._event.loop = 
80b60 74 72 75 65 3b 0a 09 20 20 20 20 20 20 20 20 20  true;..         
80b70 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20     } else {..   
80b80 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
80b90 73 2e 5f 65 76 65 6e 74 2e 6c 6f 6f 70 20 3d 20  s._event.loop = 
80ba0 69 74 65 72 73 3b 0a 09 20 20 20 20 20 20 20 20  iters;..        
80bb0 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d      }..        }
80bc0 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f  ..    });..    /
80bd0 2a 2a 0a 09 09 20 2a 20 20 43 6c 65 61 6e 20 75  **... *  Clean u
80be0 70 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20  p... *  @return 
80bf0 20 7b 54 6f 6e 65 2e 4c 6f 6f 70 7d 20 20 74 68   {Tone.Loop}  th
80c00 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  is... */..    To
80c10 6e 65 2e 4c 6f 6f 70 2e 70 72 6f 74 6f 74 79 70  ne.Loop.prototyp
80c20 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75 6e 63  e.dispose = func
80c30 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
80c40 20 20 20 74 68 69 73 2e 5f 65 76 65 6e 74 2e 64     this._event.d
80c50 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20  ispose();..     
80c60 20 20 20 74 68 69 73 2e 5f 65 76 65 6e 74 20 3d     this._event =
80c70 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
80c80 74 68 69 73 2e 63 61 6c 6c 62 61 63 6b 20 3d 20  this.callback = 
80c90 6e 75 6c 6c 3b 0a 09 20 20 20 20 7d 3b 0a 09 20  null;..    };.. 
80ca0 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 4c     return Tone.L
80cb0 6f 6f 70 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c  oop;..});..Modul
80cc0 65 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65  e(function (Tone
80cd0 29 20 7b 0a 09 20 20 20 20 0a 09 20 20 20 20 2f  ) {..    ..    /
80ce0 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61 73 73 20  **... *  @class 
80cf0 54 6f 6e 65 2e 50 61 72 74 20 69 73 20 61 20 63  Tone.Part is a c
80d00 6f 6c 6c 65 63 74 69 6f 6e 20 54 6f 6e 65 2e 45  ollection Tone.E
80d10 76 65 6e 74 73 20 77 68 69 63 68 20 63 61 6e 20  vents which can 
80d20 62 65 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  be... *         
80d30 73 74 61 72 74 65 64 2f 73 74 6f 70 65 64 20 61  started/stoped a
80d40 6e 64 20 6c 6f 6f 70 65 64 20 61 73 20 61 20 73  nd looped as a s
80d50 69 6e 67 6c 65 20 75 6e 69 74 2e 0a 09 09 20 2a  ingle unit.... *
80d60 0a 09 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20  ... *  @extends 
80d70 7b 54 6f 6e 65 2e 45 76 65 6e 74 7d 0a 09 09 20  {Tone.Event}... 
80d80 2a 20 20 40 70 61 72 61 6d 20 7b 46 75 6e 63 74  *  @param {Funct
80d90 69 6f 6e 7d 20 63 61 6c 6c 62 61 63 6b 20 54 68  ion} callback Th
80da0 65 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 69 6e  e callback to in
80db0 76 6f 6b 65 20 6f 6e 20 65 61 63 68 20 65 76 65  voke on each eve
80dc0 6e 74 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  nt... *  @param 
80dd0 7b 41 72 72 61 79 7d 20 65 76 65 6e 74 73 20 74  {Array} events t
80de0 68 65 20 61 72 72 61 79 20 6f 66 20 65 76 65 6e  he array of even
80df0 74 73 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c  ts... *  @exampl
80e00 65 0a 09 09 20 2a 20 76 61 72 20 70 61 72 74 20  e... * var part 
80e10 3d 20 6e 65 77 20 54 6f 6e 65 2e 50 61 72 74 28  = new Tone.Part(
80e20 66 75 6e 63 74 69 6f 6e 28 74 69 6d 65 2c 20 6e  function(time, n
80e30 6f 74 65 29 7b 0a 09 09 20 2a 20 09 2f 2f 74 68  ote){... * .//th
80e40 65 20 6e 6f 74 65 73 20 67 69 76 65 6e 20 61 73  e notes given as
80e50 20 74 68 65 20 73 65 63 6f 6e 64 20 65 6c 65 6d   the second elem
80e60 65 6e 74 20 69 6e 20 74 68 65 20 61 72 72 61 79  ent in the array
80e70 0a 09 09 20 2a 20 09 2f 2f 77 69 6c 6c 20 62 65  ... * .//will be
80e80 20 70 61 73 73 65 64 20 69 6e 20 61 73 20 74 68   passed in as th
80e90 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e  e second argumen
80ea0 74 0a 09 09 20 2a 20 09 73 79 6e 74 68 2e 74 72  t... * .synth.tr
80eb0 69 67 67 65 72 41 74 74 61 63 6b 52 65 6c 65 61  iggerAttackRelea
80ec0 73 65 28 6e 6f 74 65 2c 20 22 38 6e 22 2c 20 74  se(note, "8n", t
80ed0 69 6d 65 29 3b 0a 09 09 20 2a 20 7d 2c 20 5b 5b  ime);... * }, [[
80ee0 30 2c 20 22 43 32 22 5d 2c 20 5b 22 30 3a 32 22  0, "C2"], ["0:2"
80ef0 2c 20 22 43 33 22 5d 2c 20 5b 22 30 3a 33 3a 32  , "C3"], ["0:3:2
80f00 22 2c 20 22 47 32 22 5d 5d 29 3b 0a 09 09 20 2a  ", "G2"]]);... *
80f10 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20    @example... * 
80f20 2f 2f 75 73 65 20 61 6e 20 61 72 72 61 79 20 6f  //use an array o
80f30 66 20 6f 62 6a 65 63 74 73 20 61 73 20 6c 6f 6e  f objects as lon
80f40 67 20 61 73 20 74 68 65 20 6f 62 6a 65 63 74 20  g as the object 
80f50 68 61 73 20 61 20 22 74 69 6d 65 22 20 61 74 74  has a "time" att
80f60 72 69 62 75 74 65 0a 09 09 20 2a 20 76 61 72 20  ribute... * var 
80f70 70 61 72 74 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  part = new Tone.
80f80 50 61 72 74 28 66 75 6e 63 74 69 6f 6e 28 74 69  Part(function(ti
80f90 6d 65 2c 20 76 61 6c 75 65 29 7b 0a 09 09 20 2a  me, value){... *
80fa0 20 09 2f 2f 74 68 65 20 76 61 6c 75 65 20 69 73   .//the value is
80fb0 20 61 6e 20 6f 62 6a 65 63 74 20 77 68 69 63 68   an object which
80fc0 20 63 6f 6e 74 61 69 6e 73 20 62 6f 74 68 20 74   contains both t
80fd0 68 65 20 6e 6f 74 65 20 61 6e 64 20 74 68 65 20  he note and the 
80fe0 76 65 6c 6f 63 69 74 79 0a 09 09 20 2a 20 09 73  velocity... * .s
80ff0 79 6e 74 68 2e 74 72 69 67 67 65 72 41 74 74 61  ynth.triggerAtta
81000 63 6b 52 65 6c 65 61 73 65 28 76 61 6c 75 65 2e  ckRelease(value.
81010 6e 6f 74 65 2c 20 22 38 6e 22 2c 20 74 69 6d 65  note, "8n", time
81020 2c 20 76 61 6c 75 65 2e 76 65 6c 6f 63 69 74 79  , value.velocity
81030 29 3b 0a 09 09 20 2a 20 7d 2c 20 5b 7b 22 74 69  );... * }, [{"ti
81040 6d 65 22 20 3a 20 30 2c 20 22 6e 6f 74 65 22 20  me" : 0, "note" 
81050 3a 20 22 43 33 22 2c 20 22 76 65 6c 6f 63 69 74  : "C3", "velocit
81060 79 22 3a 20 30 2e 39 7d 2c 20 0a 09 09 20 2a 20  y": 0.9}, ... * 
81070 09 20 20 20 7b 22 74 69 6d 65 22 20 3a 20 22 30  .   {"time" : "0
81080 3a 32 22 2c 20 22 6e 6f 74 65 22 20 3a 20 22 43  :2", "note" : "C
81090 34 22 2c 20 22 76 65 6c 6f 63 69 74 79 22 3a 20  4", "velocity": 
810a0 30 2e 35 7d 0a 09 09 20 2a 20 5d 29 2e 73 74 61  0.5}... * ]).sta
810b0 72 74 28 30 29 3b 0a 09 09 20 2a 2f 0a 09 20 20  rt(0);... */..  
810c0 20 20 54 6f 6e 65 2e 50 61 72 74 20 3d 20 66 75    Tone.Part = fu
810d0 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
810e0 20 20 20 20 20 76 61 72 20 6f 70 74 69 6f 6e 73       var options
810f0 20 3d 20 74 68 69 73 2e 6f 70 74 69 6f 6e 73 4f   = this.optionsO
81100 62 6a 65 63 74 28 61 72 67 75 6d 65 6e 74 73 2c  bject(arguments,
81110 20 5b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   [..            
81120 27 63 61 6c 6c 62 61 63 6b 27 2c 0a 09 20 20 20  'callback',..   
81130 20 20 20 20 20 20 20 20 20 27 65 76 65 6e 74 73           'events
81140 27 0a 09 20 20 20 20 20 20 20 20 5d 2c 20 54 6f  '..        ], To
81150 6e 65 2e 50 61 72 74 2e 64 65 66 61 75 6c 74 73  ne.Part.defaults
81160 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
81170 09 09 09 20 2a 20 20 49 66 20 74 68 65 20 70 61  ... *  If the pa
81180 72 74 20 69 73 20 6c 6f 6f 70 69 6e 67 20 6f 72  rt is looping or
81190 20 6e 6f 74 0a 09 09 09 20 2a 20 20 40 74 79 70   not.... *  @typ
811a0 65 20 20 7b 42 6f 6f 6c 65 61 6e 7c 50 6f 73 69  e  {Boolean|Posi
811b0 74 69 76 65 7d 0a 09 09 09 20 2a 20 20 40 70 72  tive}.... *  @pr
811c0 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20  ivate.... */..  
811d0 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 6f 6f 70        this._loop
811e0 20 3d 20 6f 70 74 69 6f 6e 73 2e 6c 6f 6f 70 3b   = options.loop;
811f0 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
81200 09 20 2a 20 20 57 68 65 6e 20 74 68 65 20 6e 6f  . *  When the no
81210 74 65 20 69 73 20 73 63 68 65 64 75 6c 65 64 20  te is scheduled 
81220 74 6f 20 73 74 61 72 74 2e 0a 09 09 09 20 2a 20  to start..... * 
81230 20 40 74 79 70 65 20 20 7b 54 69 63 6b 73 7d 0a   @type  {Ticks}.
81240 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
81250 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
81260 74 68 69 73 2e 5f 6c 6f 6f 70 53 74 61 72 74 20  this._loopStart 
81270 3d 20 74 68 69 73 2e 74 6f 54 69 63 6b 73 28 6f  = this.toTicks(o
81280 70 74 69 6f 6e 73 2e 6c 6f 6f 70 53 74 61 72 74  ptions.loopStart
81290 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
812a0 09 09 09 20 2a 20 20 57 68 65 6e 20 74 68 65 20  ... *  When the 
812b0 6e 6f 74 65 20 69 73 20 73 63 68 65 64 75 6c 65  note is schedule
812c0 64 20 74 6f 20 73 74 61 72 74 2e 0a 09 09 09 20  d to start..... 
812d0 2a 20 20 40 74 79 70 65 20 20 7b 54 69 63 6b 73  *  @type  {Ticks
812e0 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  }.... *  @privat
812f0 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
81300 20 20 74 68 69 73 2e 5f 6c 6f 6f 70 45 6e 64 20    this._loopEnd 
81310 3d 20 74 68 69 73 2e 74 6f 54 69 63 6b 73 28 6f  = this.toTicks(o
81320 70 74 69 6f 6e 73 2e 6c 6f 6f 70 45 6e 64 29 3b  ptions.loopEnd);
81330 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
81340 09 20 2a 20 20 54 68 65 20 70 6c 61 79 62 61 63  . *  The playbac
81350 6b 20 72 61 74 65 20 6f 66 20 74 68 65 20 70 61  k rate of the pa
81360 72 74 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  rt.... *  @type 
81370 20 7b 50 6f 73 69 74 69 76 65 7d 0a 09 09 09 20   {Positive}.... 
81380 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20  *  @private.... 
81390 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
813a0 2e 5f 70 6c 61 79 62 61 63 6b 52 61 74 65 20 3d  ._playbackRate =
813b0 20 6f 70 74 69 6f 6e 73 2e 70 6c 61 79 62 61 63   options.playbac
813c0 6b 52 61 74 65 3b 0a 09 20 20 20 20 20 20 20 20  kRate;..        
813d0 2f 2a 2a 0a 09 09 09 20 2a 20 20 70 72 69 76 61  /**.... *  priva
813e0 74 65 20 68 6f 6c 64 65 72 20 6f 66 20 70 72 6f  te holder of pro
813f0 62 61 62 69 6c 69 74 79 20 76 61 6c 75 65 0a 09  bability value..
81400 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4e 6f 72  .. *  @type {Nor
81410 6d 61 6c 52 61 6e 67 65 7d 0a 09 09 09 20 2a 20  malRange}.... * 
81420 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f   @private.... */
81430 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
81440 70 72 6f 62 61 62 69 6c 69 74 79 20 3d 20 6f 70  probability = op
81450 74 69 6f 6e 73 2e 70 72 6f 62 61 62 69 6c 69 74  tions.probabilit
81460 79 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  y;..        /**.
81470 09 09 09 20 2a 20 20 74 68 65 20 61 6d 6f 75 6e  ... *  the amoun
81480 74 20 6f 66 20 76 61 72 69 61 74 69 6f 6e 20 66  t of variation f
81490 72 6f 6d 20 74 68 65 0a 09 09 09 20 2a 20 20 67  rom the.... *  g
814a0 69 76 65 6e 20 74 69 6d 65 2e 20 0a 09 09 09 20  iven time. .... 
814b0 2a 20 20 40 74 79 70 65 20 7b 42 6f 6f 6c 65 61  *  @type {Boolea
814c0 6e 7c 54 69 6d 65 7d 0a 09 09 09 20 2a 20 20 40  n|Time}.... *  @
814d0 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
814e0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 68 75          this._hu
814f0 6d 61 6e 69 7a 65 20 3d 20 6f 70 74 69 6f 6e 73  manize = options
81500 2e 68 75 6d 61 6e 69 7a 65 3b 0a 09 20 20 20 20  .humanize;..    
81510 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54      /**.... *  T
81520 68 65 20 73 74 61 72 74 20 6f 66 66 73 65 74 0a  he start offset.
81530 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54 69  ... *  @type {Ti
81540 63 6b 73 7d 0a 09 09 09 20 2a 20 20 40 70 72 69  cks}.... *  @pri
81550 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20  vate.... */..   
81560 20 20 20 20 20 74 68 69 73 2e 5f 73 74 61 72 74       this._start
81570 4f 66 66 73 65 74 20 3d 20 30 3b 0a 09 20 20 20  Offset = 0;..   
81580 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
81590 4b 65 65 70 73 20 74 72 61 63 6b 20 6f 66 20 74  Keeps track of t
815a0 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65  he current state
815b0 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54  .... *  @type {T
815c0 6f 6e 65 2e 54 69 6d 65 6c 69 6e 65 53 74 61 74  one.TimelineStat
815d0 65 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61  e}.... *  @priva
815e0 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  te.... */..     
815f0 20 20 20 74 68 69 73 2e 5f 73 74 61 74 65 20 3d     this._state =
81600 20 6e 65 77 20 54 6f 6e 65 2e 54 69 6d 65 6c 69   new Tone.Timeli
81610 6e 65 53 74 61 74 65 28 54 6f 6e 65 2e 53 74 61  neState(Tone.Sta
81620 74 65 2e 53 74 6f 70 70 65 64 29 3b 0a 09 20 20  te.Stopped);..  
81630 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
81640 20 41 6e 20 61 72 72 61 79 20 6f 66 20 4f 62 6a   An array of Obj
81650 65 63 74 73 2e 20 0a 09 09 09 20 2a 20 20 40 74  ects. .... *  @t
81660 79 70 65 20 20 7b 41 72 72 61 79 7d 0a 09 09 09  ype  {Array}....
81670 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
81680 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
81690 73 2e 5f 65 76 65 6e 74 73 20 3d 20 5b 5d 3b 0a  s._events = [];.
816a0 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
816b0 20 2a 20 20 54 68 65 20 63 61 6c 6c 62 61 63 6b   *  The callback
816c0 20 74 6f 20 69 6e 76 6f 6b 65 20 61 74 20 61 6c   to invoke at al
816d0 6c 20 74 68 65 20 73 63 68 65 64 75 6c 65 64 20  l the scheduled 
816e0 65 76 65 6e 74 73 2e 0a 09 09 09 20 2a 20 20 40  events..... *  @
816f0 74 79 70 65 20 7b 46 75 6e 63 74 69 6f 6e 7d 0a  type {Function}.
81700 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
81710 74 68 69 73 2e 63 61 6c 6c 62 61 63 6b 20 3d 20  this.callback = 
81720 6f 70 74 69 6f 6e 73 2e 63 61 6c 6c 62 61 63 6b  options.callback
81730 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
81740 09 09 20 2a 20 20 49 66 20 6d 75 74 65 20 69 73  .. *  If mute is
81750 20 74 72 75 65 2c 20 74 68 65 20 63 61 6c 6c 62   true, the callb
81760 61 63 6b 20 77 6f 6e 27 74 20 62 65 0a 09 09 09  ack won't be....
81770 20 2a 20 20 69 6e 76 6f 6b 65 64 2e 0a 09 09 09   *  invoked.....
81780 20 2a 20 20 40 74 79 70 65 20 7b 42 6f 6f 6c 65   *  @type {Boole
81790 61 6e 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  an}.... */..    
817a0 20 20 20 20 74 68 69 73 2e 6d 75 74 65 20 3d 20      this.mute = 
817b0 6f 70 74 69 6f 6e 73 2e 6d 75 74 65 3b 0a 09 20  options.mute;.. 
817c0 20 20 20 20 20 20 20 2f 2f 61 64 64 20 74 68 65         //add the
817d0 20 65 76 65 6e 74 73 0a 09 20 20 20 20 20 20 20   events..       
817e0 20 76 61 72 20 65 76 65 6e 74 73 20 3d 20 74 68   var events = th
817f0 69 73 2e 64 65 66 61 75 6c 74 41 72 67 28 6f 70  is.defaultArg(op
81800 74 69 6f 6e 73 2e 65 76 65 6e 74 73 2c 20 5b 5d  tions.events, []
81810 29 3b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
81820 21 74 68 69 73 2e 69 73 55 6e 64 65 66 28 6f 70  !this.isUndef(op
81830 74 69 6f 6e 73 2e 65 76 65 6e 74 73 29 29 20 7b  tions.events)) {
81840 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
81850 72 20 28 76 61 72 20 69 20 3d 20 30 3b 20 69 20  r (var i = 0; i 
81860 3c 20 65 76 65 6e 74 73 2e 6c 65 6e 67 74 68 3b  < events.length;
81870 20 69 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20 20   i++) {..       
81880 20 20 20 20 20 20 20 20 20 69 66 20 28 41 72 72           if (Arr
81890 61 79 2e 69 73 41 72 72 61 79 28 65 76 65 6e 74  ay.isArray(event
818a0 73 5b 69 5d 29 29 20 7b 0a 09 20 20 20 20 20 20  s[i])) {..      
818b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
818c0 69 73 2e 61 64 64 28 65 76 65 6e 74 73 5b 69 5d  is.add(events[i]
818d0 5b 30 5d 2c 20 65 76 65 6e 74 73 5b 69 5d 5b 31  [0], events[i][1
818e0 5d 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ]);..           
818f0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20       } else {.. 
81900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81910 20 20 20 74 68 69 73 2e 61 64 64 28 65 76 65 6e     this.add(even
81920 74 73 5b 69 5d 29 3b 0a 09 20 20 20 20 20 20 20  ts[i]);..       
81930 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20           }..    
81940 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
81950 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a 09 20 20     }..    };..  
81960 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f    Tone.extend(To
81970 6e 65 2e 50 61 72 74 2c 20 54 6f 6e 65 2e 45 76  ne.Part, Tone.Ev
81980 65 6e 74 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09  ent);..    /**..
81990 09 20 2a 20 20 54 68 65 20 64 65 66 61 75 6c 74  . *  The default
819a0 20 76 61 6c 75 65 73 0a 09 09 20 2a 20 20 40 74   values... *  @t
819b0 79 70 65 20 20 7b 4f 62 6a 65 63 74 7d 0a 09 09  ype  {Object}...
819c0 20 2a 20 20 40 63 6f 6e 73 74 0a 09 09 20 2a 2f   *  @const... */
819d0 0a 09 20 20 20 20 54 6f 6e 65 2e 50 61 72 74 2e  ..    Tone.Part.
819e0 64 65 66 61 75 6c 74 73 20 3d 20 7b 0a 09 20 20  defaults = {..  
819f0 20 20 20 20 20 20 27 63 61 6c 6c 62 61 63 6b 27        'callback'
81a00 3a 20 54 6f 6e 65 2e 6e 6f 4f 70 2c 0a 09 20 20  : Tone.noOp,..  
81a10 20 20 20 20 20 20 27 6c 6f 6f 70 27 3a 20 66 61        'loop': fa
81a20 6c 73 65 2c 0a 09 20 20 20 20 20 20 20 20 27 6c  lse,..        'l
81a30 6f 6f 70 45 6e 64 27 3a 20 27 31 6d 27 2c 0a 09  oopEnd': '1m',..
81a40 20 20 20 20 20 20 20 20 27 6c 6f 6f 70 53 74 61          'loopSta
81a50 72 74 27 3a 20 30 2c 0a 09 20 20 20 20 20 20 20  rt': 0,..       
81a60 20 27 70 6c 61 79 62 61 63 6b 52 61 74 65 27 3a   'playbackRate':
81a70 20 31 2c 0a 09 20 20 20 20 20 20 20 20 27 70 72   1,..        'pr
81a80 6f 62 61 62 69 6c 69 74 79 27 3a 20 31 2c 0a 09  obability': 1,..
81a90 20 20 20 20 20 20 20 20 27 68 75 6d 61 6e 69 7a          'humaniz
81aa0 65 27 3a 20 66 61 6c 73 65 2c 0a 09 20 20 20 20  e': false,..    
81ab0 20 20 20 20 27 6d 75 74 65 27 3a 20 66 61 6c 73      'mute': fals
81ac0 65 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  e..    };..    /
81ad0 2a 2a 0a 09 09 20 2a 20 20 53 74 61 72 74 20 74  **... *  Start t
81ae0 68 65 20 70 61 72 74 20 61 74 20 74 68 65 20 67  he part at the g
81af0 69 76 65 6e 20 74 69 6d 65 2e 20 0a 09 09 20 2a  iven time. ... *
81b00 20 20 40 70 61 72 61 6d 20 20 7b 54 72 61 6e 73    @param  {Trans
81b10 70 6f 72 74 54 69 6d 65 7d 20 20 74 69 6d 65 20  portTime}  time 
81b20 20 20 20 57 68 65 6e 20 74 6f 20 73 74 61 72 74     When to start
81b30 20 74 68 65 20 70 61 72 74 2e 0a 09 09 20 2a 20   the part.... * 
81b40 20 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 3d 7d   @param  {Time=}
81b50 20 20 6f 66 66 73 65 74 20 20 54 68 65 20 6f 66    offset  The of
81b60 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 73 74  fset from the st
81b70 61 72 74 20 6f 66 20 74 68 65 20 70 61 72 74 0a  art of the part.
81b80 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
81b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
81ba0 6f 20 62 65 67 69 6e 20 70 6c 61 79 69 6e 67 20  o begin playing 
81bb0 61 74 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72  at.... *  @retur
81bc0 6e 20 20 7b 54 6f 6e 65 2e 50 61 72 74 7d 20 20  n  {Tone.Part}  
81bd0 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20  this... */..    
81be0 54 6f 6e 65 2e 50 61 72 74 2e 70 72 6f 74 6f 74  Tone.Part.protot
81bf0 79 70 65 2e 73 74 61 72 74 20 3d 20 66 75 6e 63  ype.start = func
81c00 74 69 6f 6e 20 28 74 69 6d 65 2c 20 6f 66 66 73  tion (time, offs
81c10 65 74 29 20 7b 0a 09 20 20 20 20 20 20 20 20 76  et) {..        v
81c20 61 72 20 74 69 63 6b 73 20 3d 20 74 68 69 73 2e  ar ticks = this.
81c30 74 6f 54 69 63 6b 73 28 74 69 6d 65 29 3b 0a 09  toTicks(time);..
81c40 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73          if (this
81c50 2e 5f 73 74 61 74 65 2e 67 65 74 56 61 6c 75 65  ._state.getValue
81c60 41 74 54 69 6d 65 28 74 69 63 6b 73 29 20 21 3d  AtTime(ticks) !=
81c70 3d 20 54 6f 6e 65 2e 53 74 61 74 65 2e 53 74 61  = Tone.State.Sta
81c80 72 74 65 64 29 20 7b 0a 09 20 20 20 20 20 20 20  rted) {..       
81c90 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 5f 6c       if (this._l
81ca0 6f 6f 70 29 20 7b 0a 09 20 20 20 20 20 20 20 20  oop) {..        
81cb0 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 3d          offset =
81cc0 20 74 68 69 73 2e 64 65 66 61 75 6c 74 41 72 67   this.defaultArg
81cd0 28 6f 66 66 73 65 74 2c 20 74 68 69 73 2e 5f 6c  (offset, this._l
81ce0 6f 6f 70 53 74 61 72 74 29 3b 0a 09 20 20 20 20  oopStart);..    
81cf0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
81d00 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
81d10 20 20 6f 66 66 73 65 74 20 3d 20 74 68 69 73 2e    offset = this.
81d20 64 65 66 61 75 6c 74 41 72 67 28 6f 66 66 73 65  defaultArg(offse
81d30 74 2c 20 30 29 3b 0a 09 20 20 20 20 20 20 20 20  t, 0);..        
81d40 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20      }..         
81d50 20 20 20 6f 66 66 73 65 74 20 3d 20 74 68 69 73     offset = this
81d60 2e 74 6f 54 69 63 6b 73 28 6f 66 66 73 65 74 29  .toTicks(offset)
81d70 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  ;..            t
81d80 68 69 73 2e 5f 73 74 61 74 65 2e 61 64 64 28 7b  his._state.add({
81d90 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
81da0 20 20 27 73 74 61 74 65 27 3a 20 54 6f 6e 65 2e    'state': Tone.
81db0 53 74 61 74 65 2e 53 74 61 72 74 65 64 2c 0a 09  State.Started,..
81dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81dd0 27 74 69 6d 65 27 3a 20 74 69 63 6b 73 2c 0a 09  'time': ticks,..
81de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81df0 27 6f 66 66 73 65 74 27 3a 20 6f 66 66 73 65 74  'offset': offset
81e00 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 29  ..            })
81e10 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  ;..            t
81e20 68 69 73 2e 5f 66 6f 72 45 61 63 68 28 66 75 6e  his._forEach(fun
81e30 63 74 69 6f 6e 20 28 65 76 65 6e 74 29 20 7b 0a  ction (event) {.
81e40 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
81e50 20 74 68 69 73 2e 5f 73 74 61 72 74 4e 6f 74 65   this._startNote
81e60 28 65 76 65 6e 74 2c 20 74 69 63 6b 73 2c 20 6f  (event, ticks, o
81e70 66 66 73 65 74 29 3b 0a 09 20 20 20 20 20 20 20  ffset);..       
81e80 20 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 20 20       });..      
81e90 20 20 7d 0a 09 20 20 20 20 20 20 20 20 72 65 74    }..        ret
81ea0 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
81eb0 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
81ec0 20 53 74 61 72 74 20 74 68 65 20 65 76 65 6e 74   Start the event
81ed0 20 69 6e 20 74 68 65 20 67 69 76 65 6e 20 65 76   in the given ev
81ee0 65 6e 74 20 61 74 20 74 68 65 20 63 6f 72 72 65  ent at the corre
81ef0 63 74 20 74 69 6d 65 20 67 69 76 65 6e 0a 09 09  ct time given...
81f00 20 2a 20 20 74 68 65 20 74 69 63 6b 73 20 61 6e   *  the ticks an
81f10 64 20 6f 66 66 73 65 74 20 61 6e 64 20 6c 6f 6f  d offset and loo
81f20 70 69 6e 67 2e 0a 09 09 20 2a 20 20 40 70 61 72  ping.... *  @par
81f30 61 6d 20 20 7b 54 6f 6e 65 2e 45 76 65 6e 74 7d  am  {Tone.Event}
81f40 20 20 65 76 65 6e 74 20 0a 09 09 20 2a 20 20 40    event ... *  @
81f50 70 61 72 61 6d 20 20 7b 54 69 63 6b 73 7d 20 20  param  {Ticks}  
81f60 74 69 63 6b 73 0a 09 09 20 2a 20 20 40 70 61 72  ticks... *  @par
81f70 61 6d 20 20 7b 54 69 63 6b 73 7d 20 20 6f 66 66  am  {Ticks}  off
81f80 73 65 74 0a 09 09 20 2a 20 20 40 70 72 69 76 61  set... *  @priva
81f90 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  te... */..    To
81fa0 6e 65 2e 50 61 72 74 2e 70 72 6f 74 6f 74 79 70  ne.Part.prototyp
81fb0 65 2e 5f 73 74 61 72 74 4e 6f 74 65 20 3d 20 66  e._startNote = f
81fc0 75 6e 63 74 69 6f 6e 20 28 65 76 65 6e 74 2c 20  unction (event, 
81fd0 74 69 63 6b 73 2c 20 6f 66 66 73 65 74 29 20 7b  ticks, offset) {
81fe0 0a 09 20 20 20 20 20 20 20 20 74 69 63 6b 73 20  ..        ticks 
81ff0 2d 3d 20 6f 66 66 73 65 74 3b 0a 09 20 20 20 20  -= offset;..    
82000 20 20 20 20 69 66 20 28 74 68 69 73 2e 5f 6c 6f      if (this._lo
82010 6f 70 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  op) {..         
82020 20 20 20 69 66 20 28 65 76 65 6e 74 2e 73 74 61     if (event.sta
82030 72 74 4f 66 66 73 65 74 20 3e 3d 20 74 68 69 73  rtOffset >= this
82040 2e 5f 6c 6f 6f 70 53 74 61 72 74 20 26 26 20 65  ._loopStart && e
82050 76 65 6e 74 2e 73 74 61 72 74 4f 66 66 73 65 74  vent.startOffset
82060 20 3c 20 74 68 69 73 2e 5f 6c 6f 6f 70 45 6e 64   < this._loopEnd
82070 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
82080 20 20 20 20 20 69 66 20 28 65 76 65 6e 74 2e 73       if (event.s
82090 74 61 72 74 4f 66 66 73 65 74 20 3c 20 6f 66 66  tartOffset < off
820a0 73 65 74 29 20 7b 0a 09 20 20 20 20 20 20 20 20  set) {..        
820b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 73 74              //st
820c0 61 72 74 20 69 74 20 6f 6e 20 74 68 65 20 6e 65  art it on the ne
820d0 78 74 20 6c 6f 6f 70 0a 09 20 20 20 20 20 20 20  xt loop..       
820e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 69 63               tic
820f0 6b 73 20 2b 3d 20 74 68 69 73 2e 5f 67 65 74 4c  ks += this._getL
82100 6f 6f 70 44 75 72 61 74 69 6f 6e 28 29 3b 0a 09  oopDuration();..
82110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82120 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
82130 20 20 20 65 76 65 6e 74 2e 73 74 61 72 74 28 54     event.start(T
82140 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 54 69 6d  one.TransportTim
82150 65 28 74 69 63 6b 73 2c 20 27 69 27 29 29 3b 0a  e(ticks, 'i'));.
82160 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
82170 6c 73 65 20 69 66 20 28 65 76 65 6e 74 2e 73 74  lse if (event.st
82180 61 72 74 4f 66 66 73 65 74 20 3c 20 74 68 69 73  artOffset < this
82190 2e 5f 6c 6f 6f 70 53 74 61 72 74 20 26 26 20 65  ._loopStart && e
821a0 76 65 6e 74 2e 73 74 61 72 74 4f 66 66 73 65 74  vent.startOffset
821b0 20 3e 3d 20 6f 66 66 73 65 74 29 20 7b 0a 09 20   >= offset) {.. 
821c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
821d0 76 65 6e 74 2e 6c 6f 6f 70 20 3d 20 66 61 6c 73  vent.loop = fals
821e0 65 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
821f0 20 20 20 20 65 76 65 6e 74 2e 73 74 61 72 74 28      event.start(
82200 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 54 69  Tone.TransportTi
82210 6d 65 28 74 69 63 6b 73 2c 20 27 69 27 29 29 3b  me(ticks, 'i'));
82220 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ..            }.
82230 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else 
82240 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
82250 66 20 28 65 76 65 6e 74 2e 73 74 61 72 74 4f 66  f (event.startOf
82260 66 73 65 74 20 3e 3d 20 6f 66 66 73 65 74 29 20  fset >= offset) 
82270 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
82280 20 20 20 65 76 65 6e 74 2e 73 74 61 72 74 28 54     event.start(T
82290 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 54 69 6d  one.TransportTim
822a0 65 28 74 69 63 6b 73 2c 20 27 69 27 29 29 3b 0a  e(ticks, 'i'));.
822b0 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09  .            }..
822c0 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d          }..    }
822d0 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
822e0 20 54 68 65 20 73 74 61 72 74 20 66 72 6f 6d 20   The start from 
822f0 74 68 65 20 73 63 68 65 64 75 6c 65 64 20 73 74  the scheduled st
82300 61 72 74 20 74 69 6d 65 0a 09 09 20 2a 20 20 40  art time... *  @
82310 74 79 70 65 20 7b 54 69 63 6b 73 7d 0a 09 09 20  type {Ticks}... 
82320 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e  *  @memberOf Ton
82330 65 2e 50 61 72 74 23 0a 09 09 20 2a 20 20 40 6e  e.Part#... *  @n
82340 61 6d 65 20 73 74 61 72 74 4f 66 66 73 65 74 0a  ame startOffset.
82350 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
82360 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74  . */..    Object
82370 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28  .defineProperty(
82380 54 6f 6e 65 2e 50 61 72 74 2e 70 72 6f 74 6f 74  Tone.Part.protot
82390 79 70 65 2c 20 27 73 74 61 72 74 4f 66 66 73 65  ype, 'startOffse
823a0 74 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67  t', {..        g
823b0 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  et: function () 
823c0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
823d0 65 74 75 72 6e 20 74 68 69 73 2e 5f 73 74 61 72  eturn this._star
823e0 74 4f 66 66 73 65 74 3b 0a 09 20 20 20 20 20 20  tOffset;..      
823f0 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65    },..        se
82400 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 6f 66 66  t: function (off
82410 73 65 74 29 20 7b 0a 09 20 20 20 20 20 20 20 20  set) {..        
82420 20 20 20 20 74 68 69 73 2e 5f 73 74 61 72 74 4f      this._startO
82430 66 66 73 65 74 20 3d 20 6f 66 66 73 65 74 3b 0a  ffset = offset;.
82440 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
82450 73 2e 5f 66 6f 72 45 61 63 68 28 66 75 6e 63 74  s._forEach(funct
82460 69 6f 6e 20 28 65 76 65 6e 74 29 20 7b 0a 09 20  ion (event) {.. 
82470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
82480 76 65 6e 74 2e 73 74 61 72 74 4f 66 66 73 65 74  vent.startOffset
82490 20 2b 3d 20 74 68 69 73 2e 5f 73 74 61 72 74 4f   += this._startO
824a0 66 66 73 65 74 3b 0a 09 20 20 20 20 20 20 20 20  ffset;..        
824b0 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 20 20 20      });..       
824c0 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20   }..    });..   
824d0 20 2f 2a 2a 0a 09 09 20 2a 20 20 53 74 6f 70 20   /**... *  Stop 
824e0 74 68 65 20 70 61 72 74 20 61 74 20 74 68 65 20  the part at the 
824f0 67 69 76 65 6e 20 74 69 6d 65 2e 0a 09 09 20 2a  given time.... *
82500 20 20 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 6c    @param  {Timel
82510 69 6e 65 50 6f 73 69 74 69 6f 6e 7d 20 20 74 69  inePosition}  ti
82520 6d 65 20 20 57 68 65 6e 20 74 6f 20 73 74 6f 70  me  When to stop
82530 20 74 68 65 20 70 61 72 74 2e 0a 09 09 20 2a 20   the part.... * 
82540 20 40 72 65 74 75 72 6e 20 20 7b 54 6f 6e 65 2e   @return  {Tone.
82550 50 61 72 74 7d 20 20 74 68 69 73 0a 09 09 20 2a  Part}  this... *
82560 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50 61 72 74  /..    Tone.Part
82570 2e 70 72 6f 74 6f 74 79 70 65 2e 73 74 6f 70 20  .prototype.stop 
82580 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65  = function (time
82590 29 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61 72  ) {..        var
825a0 20 74 69 63 6b 73 20 3d 20 74 68 69 73 2e 74 6f   ticks = this.to
825b0 54 69 63 6b 73 28 74 69 6d 65 29 3b 0a 09 20 20  Ticks(time);..  
825c0 20 20 20 20 20 20 74 68 69 73 2e 5f 73 74 61 74        this._stat
825d0 65 2e 63 61 6e 63 65 6c 28 74 69 63 6b 73 29 3b  e.cancel(ticks);
825e0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
825f0 73 74 61 74 65 2e 73 65 74 53 74 61 74 65 41 74  state.setStateAt
82600 54 69 6d 65 28 54 6f 6e 65 2e 53 74 61 74 65 2e  Time(Tone.State.
82610 53 74 6f 70 70 65 64 2c 20 74 69 63 6b 73 29 3b  Stopped, ticks);
82620 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
82630 66 6f 72 45 61 63 68 28 66 75 6e 63 74 69 6f 6e  forEach(function
82640 20 28 65 76 65 6e 74 29 20 7b 0a 09 20 20 20 20   (event) {..    
82650 20 20 20 20 20 20 20 20 65 76 65 6e 74 2e 73 74          event.st
82660 6f 70 28 74 69 6d 65 29 3b 0a 09 20 20 20 20 20  op(time);..     
82670 20 20 20 7d 29 3b 0a 09 20 20 20 20 20 20 20 20     });..        
82680 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20  return this;..  
82690 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    };..    /**...
826a0 20 2a 20 20 47 65 74 2f 53 65 74 20 61 6e 20 45   *  Get/Set an E
826b0 76 65 6e 74 27 73 20 76 61 6c 75 65 20 61 74 20  vent's value at 
826c0 74 68 65 20 67 69 76 65 6e 20 74 69 6d 65 2e 20  the given time. 
826d0 0a 09 09 20 2a 20 20 49 66 20 61 20 76 61 6c 75  ... *  If a valu
826e0 65 20 69 73 20 70 61 73 73 65 64 20 69 6e 20 61  e is passed in a
826f0 6e 64 20 6e 6f 20 65 76 65 6e 74 20 65 78 69 73  nd no event exis
82700 74 73 20 61 74 0a 09 09 20 2a 20 20 74 68 65 20  ts at... *  the 
82710 67 69 76 65 6e 20 74 69 6d 65 2c 20 6f 6e 65 20  given time, one 
82720 77 69 6c 6c 20 62 65 20 63 72 65 61 74 65 64 20  will be created 
82730 77 69 74 68 20 74 68 61 74 20 76 61 6c 75 65 2e  with that value.
82740 20 0a 09 09 20 2a 20 20 49 66 20 74 77 6f 20 65   ... *  If two e
82750 76 65 6e 74 73 20 61 72 65 20 61 74 20 74 68 65  vents are at the
82760 20 73 61 6d 65 20 74 69 6d 65 2c 20 74 68 65 20   same time, the 
82770 66 69 72 73 74 20 6f 6e 65 20 77 69 6c 6c 0a 09  first one will..
82780 09 20 2a 20 20 62 65 20 72 65 74 75 72 6e 65 64  . *  be returned
82790 2e 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65  .... *  @example
827a0 0a 09 09 20 2a 20 70 61 72 74 2e 61 74 28 22 31  ... * part.at("1
827b0 6d 22 29 3b 20 2f 2f 72 65 74 75 72 6e 73 20 74  m"); //returns t
827c0 68 65 20 70 61 72 74 20 61 74 20 74 68 65 20 66  he part at the f
827d0 69 72 73 74 20 6d 65 61 73 75 72 65 0a 09 09 20  irst measure... 
827e0 2a 0a 09 09 20 2a 20 70 61 72 74 2e 61 74 28 22  *... * part.at("
827f0 32 6d 22 2c 20 22 43 32 22 29 3b 20 2f 2f 73 65  2m", "C2"); //se
82800 74 20 74 68 65 20 76 61 6c 75 65 20 61 74 20 22  t the value at "
82810 32 6d 22 20 74 6f 20 43 32 2e 20 0a 09 09 20 2a  2m" to C2. ... *
82820 20 2f 2f 69 66 20 61 6e 20 65 76 65 6e 74 20 64   //if an event d
82830 69 64 6e 27 74 20 65 78 69 73 74 20 61 74 20 74  idn't exist at t
82840 68 61 74 20 74 69 6d 65 2c 20 69 74 20 77 69 6c  hat time, it wil
82850 6c 20 62 65 20 63 72 65 61 74 65 64 2e 0a 09 09  l be created....
82860 20 2a 20 20 40 70 61 72 61 6d 20 7b 54 72 61 6e   *  @param {Tran
82870 73 70 6f 72 74 54 69 6d 65 7d 20 74 69 6d 65 20  sportTime} time 
82880 54 68 65 20 74 69 6d 65 20 6f 66 20 74 68 65 20  The time of the 
82890 65 76 65 6e 74 20 74 6f 20 67 65 74 20 6f 72 20  event to get or 
828a0 73 65 74 2e 0a 09 09 20 2a 20 20 40 70 61 72 61  set.... *  @para
828b0 6d 20 7b 2a 3d 7d 20 76 61 6c 75 65 20 49 66 20  m {*=} value If 
828c0 61 20 76 61 6c 75 65 20 69 73 20 70 61 73 73 65  a value is passe
828d0 64 20 69 6e 2c 20 74 68 65 20 76 61 6c 75 65 20  d in, the value 
828e0 6f 66 20 74 68 65 0a 09 09 20 2a 20 20 20 20 20  of the... *     
828f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
82900 76 65 6e 74 20 61 74 20 74 68 65 20 67 69 76 65  vent at the give
82910 6e 20 74 69 6d 65 20 77 69 6c 6c 20 62 65 20 73  n time will be s
82920 65 74 20 74 6f 20 69 74 2e 0a 09 09 20 2a 20 20  et to it.... *  
82930 40 72 65 74 75 72 6e 20 7b 54 6f 6e 65 2e 45 76  @return {Tone.Ev
82940 65 6e 74 7d 20 74 68 65 20 65 76 65 6e 74 20 61  ent} the event a
82950 74 20 74 68 65 20 74 69 6d 65 0a 09 09 20 2a 2f  t the time... */
82960 0a 09 20 20 20 20 54 6f 6e 65 2e 50 61 72 74 2e  ..    Tone.Part.
82970 70 72 6f 74 6f 74 79 70 65 2e 61 74 20 3d 20 66  prototype.at = f
82980 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65 2c 20 76  unction (time, v
82990 61 6c 75 65 29 20 7b 0a 09 20 20 20 20 20 20 20  alue) {..       
829a0 20 74 69 6d 65 20 3d 20 54 6f 6e 65 2e 54 72 61   time = Tone.Tra
829b0 6e 73 70 6f 72 74 54 69 6d 65 28 74 69 6d 65 29  nsportTime(time)
829c0 3b 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 74  ;..        var t
829d0 69 63 6b 54 69 6d 65 20 3d 20 54 6f 6e 65 2e 54  ickTime = Tone.T
829e0 69 6d 65 28 31 2c 20 27 69 27 29 2e 74 6f 53 65  ime(1, 'i').toSe
829f0 63 6f 6e 64 73 28 29 3b 0a 09 20 20 20 20 20 20  conds();..      
82a00 20 20 66 6f 72 20 28 76 61 72 20 69 20 3d 20 30    for (var i = 0
82a10 3b 20 69 20 3c 20 74 68 69 73 2e 5f 65 76 65 6e  ; i < this._even
82a20 74 73 2e 6c 65 6e 67 74 68 3b 20 69 2b 2b 29 20  ts.length; i++) 
82a30 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 76  {..            v
82a40 61 72 20 65 76 65 6e 74 20 3d 20 74 68 69 73 2e  ar event = this.
82a50 5f 65 76 65 6e 74 73 5b 69 5d 3b 0a 09 20 20 20  _events[i];..   
82a60 20 20 20 20 20 20 20 20 20 69 66 20 28 4d 61 74           if (Mat
82a70 68 2e 61 62 73 28 74 69 6d 65 2e 74 6f 54 69 63  h.abs(time.toTic
82a80 6b 73 28 29 20 2d 20 65 76 65 6e 74 2e 73 74 61  ks() - event.sta
82a90 72 74 4f 66 66 73 65 74 29 20 3c 20 74 69 63 6b  rtOffset) < tick
82aa0 54 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20 20  Time) {..       
82ab0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 74 68           if (!th
82ac0 69 73 2e 69 73 55 6e 64 65 66 28 76 61 6c 75 65  is.isUndef(value
82ad0 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  )) {..          
82ae0 20 20 20 20 20 20 20 20 20 20 65 76 65 6e 74 2e            event.
82af0 76 61 6c 75 65 20 3d 20 76 61 6c 75 65 3b 0a 09  value = value;..
82b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82b10 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
82b20 20 20 20 72 65 74 75 72 6e 20 65 76 65 6e 74 3b     return event;
82b30 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ..            }.
82b40 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
82b50 20 20 20 20 2f 2f 69 66 20 74 68 65 72 65 20 77      //if there w
82b60 61 73 20 6e 6f 20 65 76 65 6e 74 20 61 74 20 74  as no event at t
82b70 68 61 74 20 74 69 6d 65 2c 20 63 72 65 61 74 65  hat time, create
82b80 20 6f 6e 65 0a 09 20 20 20 20 20 20 20 20 69 66   one..        if
82b90 20 28 21 74 68 69 73 2e 69 73 55 6e 64 65 66 28   (!this.isUndef(
82ba0 76 61 6c 75 65 29 29 20 7b 0a 09 20 20 20 20 20  value)) {..     
82bb0 20 20 20 20 20 20 20 74 68 69 73 2e 61 64 64 28         this.add(
82bc0 74 69 6d 65 2c 20 76 61 6c 75 65 29 3b 0a 09 20  time, value);.. 
82bd0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 72 65 74             //ret
82be0 75 72 6e 20 74 68 65 20 6e 65 77 20 65 76 65 6e  urn the new even
82bf0 74 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72  t..            r
82c00 65 74 75 72 6e 20 74 68 69 73 2e 5f 65 76 65 6e  eturn this._even
82c10 74 73 5b 74 68 69 73 2e 5f 65 76 65 6e 74 73 2e  ts[this._events.
82c20 6c 65 6e 67 74 68 20 2d 20 31 5d 3b 0a 09 20 20  length - 1];..  
82c30 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09        } else {..
82c40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
82c50 72 6e 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20  rn null;..      
82c60 20 20 7d 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20    }..    };..   
82c70 20 2f 2a 2a 0a 09 09 20 2a 20 20 41 64 64 20 61   /**... *  Add a
82c80 20 61 6e 20 65 76 65 6e 74 20 74 6f 20 74 68 65   an event to the
82c90 20 70 61 72 74 2e 20 0a 09 09 20 2a 20 20 40 70   part. ... *  @p
82ca0 61 72 61 6d 20 7b 54 69 6d 65 7d 20 74 69 6d 65  aram {Time} time
82cb0 20 54 68 65 20 74 69 6d 65 20 74 68 65 20 6e 6f   The time the no
82cc0 74 65 20 73 68 6f 75 6c 64 20 73 74 61 72 74 2e  te should start.
82cd0 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 20  ... *           
82ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82cf0 20 49 66 20 61 6e 20 6f 62 6a 65 63 74 20 69 73   If an object is
82d00 20 70 61 73 73 65 64 20 69 6e 2c 20 69 74 20 73   passed in, it s
82d10 68 6f 75 6c 64 0a 09 09 20 2a 20 20 20 20 20 20  hould... *      
82d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82d30 20 20 20 20 20 20 68 61 76 65 20 61 20 27 74 69        have a 'ti
82d40 6d 65 27 20 61 74 74 72 69 62 75 74 65 20 61 6e  me' attribute an
82d50 64 20 74 68 65 20 72 65 73 74 0a 09 09 20 2a 20  d the rest... * 
82d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82d70 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68             of th
82d80 65 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65  e object will be
82d90 20 75 73 65 64 20 61 73 20 74 68 65 20 27 76 61   used as the 'va
82da0 6c 75 65 27 2e 0a 09 09 20 2a 20 20 40 70 61 72  lue'.... *  @par
82db0 61 6d 20 20 7b 54 6f 6e 65 2e 45 76 65 6e 74 7c  am  {Tone.Event|
82dc0 2a 7d 20 20 76 61 6c 75 65 20 0a 09 09 20 2a 20  *}  value ... * 
82dd0 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e   @returns {Tone.
82de0 50 61 72 74 7d 20 74 68 69 73 0a 09 09 20 2a 20  Part} this... * 
82df0 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 70   @example... * p
82e00 61 72 74 2e 61 64 64 28 22 31 6d 22 2c 20 22 43  art.add("1m", "C
82e10 23 2b 31 31 22 29 3b 0a 09 09 20 2a 2f 0a 09 20  #+11");... */.. 
82e20 20 20 20 54 6f 6e 65 2e 50 61 72 74 2e 70 72 6f     Tone.Part.pro
82e30 74 6f 74 79 70 65 2e 61 64 64 20 3d 20 66 75 6e  totype.add = fun
82e40 63 74 69 6f 6e 20 28 74 69 6d 65 2c 20 76 61 6c  ction (time, val
82e50 75 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 2f  ue) {..        /
82e60 2f 65 78 74 72 61 63 74 20 74 68 65 20 70 61 72  /extract the par
82e70 61 6d 65 74 65 72 73 0a 09 20 20 20 20 20 20 20  ameters..       
82e80 20 69 66 20 28 74 69 6d 65 2e 68 61 73 4f 77 6e   if (time.hasOwn
82e90 50 72 6f 70 65 72 74 79 28 27 74 69 6d 65 27 29  Property('time')
82ea0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
82eb0 20 76 61 6c 75 65 20 3d 20 74 69 6d 65 3b 0a 09   value = time;..
82ec0 20 20 20 20 20 20 20 20 20 20 20 20 74 69 6d 65              time
82ed0 20 3d 20 76 61 6c 75 65 2e 74 69 6d 65 3b 0a 09   = value.time;..
82ee0 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
82ef0 20 20 20 74 69 6d 65 20 3d 20 74 68 69 73 2e 74     time = this.t
82f00 6f 54 69 63 6b 73 28 74 69 6d 65 29 3b 0a 09 20  oTicks(time);.. 
82f10 20 20 20 20 20 20 20 76 61 72 20 65 76 65 6e 74         var event
82f20 3b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 76  ;..        if (v
82f30 61 6c 75 65 20 69 6e 73 74 61 6e 63 65 6f 66 20  alue instanceof 
82f40 54 6f 6e 65 2e 45 76 65 6e 74 29 20 7b 0a 09 20  Tone.Event) {.. 
82f50 20 20 20 20 20 20 20 20 20 20 20 65 76 65 6e 74             event
82f60 20 3d 20 76 61 6c 75 65 3b 0a 09 20 20 20 20 20   = value;..     
82f70 20 20 20 20 20 20 20 65 76 65 6e 74 2e 63 61 6c         event.cal
82f80 6c 62 61 63 6b 20 3d 20 74 68 69 73 2e 5f 74 69  lback = this._ti
82f90 63 6b 2e 62 69 6e 64 28 74 68 69 73 29 3b 0a 09  ck.bind(this);..
82fa0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
82fb0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 65 76  ..            ev
82fc0 65 6e 74 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 45  ent = new Tone.E
82fd0 76 65 6e 74 28 7b 0a 09 20 20 20 20 20 20 20 20  vent({..        
82fe0 20 20 20 20 20 20 20 20 27 63 61 6c 6c 62 61 63          'callbac
82ff0 6b 27 3a 20 74 68 69 73 2e 5f 74 69 63 6b 2e 62  k': this._tick.b
83000 69 6e 64 28 74 68 69 73 29 2c 0a 09 20 20 20 20  ind(this),..    
83010 20 20 20 20 20 20 20 20 20 20 20 20 27 76 61 6c              'val
83020 75 65 27 3a 20 76 61 6c 75 65 0a 09 20 20 20 20  ue': value..    
83030 20 20 20 20 20 20 20 20 7d 29 3b 0a 09 20 20 20          });..   
83040 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
83050 2f 2f 74 68 65 20 73 74 61 72 74 20 6f 66 66 73  //the start offs
83060 65 74 0a 09 20 20 20 20 20 20 20 20 65 76 65 6e  et..        even
83070 74 2e 73 74 61 72 74 4f 66 66 73 65 74 20 3d 20  t.startOffset = 
83080 74 69 6d 65 3b 0a 09 20 20 20 20 20 20 20 20 2f  time;..        /
83090 2f 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20  /initialize the 
830a0 76 61 6c 75 65 73 0a 09 20 20 20 20 20 20 20 20  values..        
830b0 65 76 65 6e 74 2e 73 65 74 28 7b 0a 09 20 20 20  event.set({..   
830c0 20 20 20 20 20 20 20 20 20 27 6c 6f 6f 70 45 6e           'loopEn
830d0 64 27 3a 20 74 68 69 73 2e 6c 6f 6f 70 45 6e 64  d': this.loopEnd
830e0 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
830f0 6c 6f 6f 70 53 74 61 72 74 27 3a 20 74 68 69 73  loopStart': this
83100 2e 6c 6f 6f 70 53 74 61 72 74 2c 0a 09 20 20 20  .loopStart,..   
83110 20 20 20 20 20 20 20 20 20 27 6c 6f 6f 70 27 3a           'loop':
83120 20 74 68 69 73 2e 6c 6f 6f 70 2c 0a 09 20 20 20   this.loop,..   
83130 20 20 20 20 20 20 20 20 20 27 68 75 6d 61 6e 69           'humani
83140 7a 65 27 3a 20 74 68 69 73 2e 68 75 6d 61 6e 69  ze': this.humani
83150 7a 65 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  ze,..           
83160 20 27 70 6c 61 79 62 61 63 6b 52 61 74 65 27 3a   'playbackRate':
83170 20 74 68 69 73 2e 70 6c 61 79 62 61 63 6b 52 61   this.playbackRa
83180 74 65 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  te,..           
83190 20 27 70 72 6f 62 61 62 69 6c 69 74 79 27 3a 20   'probability': 
831a0 74 68 69 73 2e 70 72 6f 62 61 62 69 6c 69 74 79  this.probability
831b0 0a 09 20 20 20 20 20 20 20 20 7d 29 3b 0a 09 20  ..        });.. 
831c0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 65 76 65         this._eve
831d0 6e 74 73 2e 70 75 73 68 28 65 76 65 6e 74 29 3b  nts.push(event);
831e0 0a 09 20 20 20 20 20 20 20 20 2f 2f 73 74 61 72  ..        //star
831f0 74 20 74 68 65 20 6e 6f 74 65 20 69 66 20 69 74  t the note if it
83200 20 73 68 6f 75 6c 64 20 62 65 20 70 6c 61 79 65   should be playe
83210 64 20 72 69 67 68 74 20 6e 6f 77 0a 09 20 20 20  d right now..   
83220 20 20 20 20 20 74 68 69 73 2e 5f 72 65 73 74 61       this._resta
83230 72 74 45 76 65 6e 74 28 65 76 65 6e 74 29 3b 0a  rtEvent(event);.
83240 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
83250 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20  this;..    };.. 
83260 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 52 65 73     /**... *  Res
83270 74 61 72 74 20 74 68 65 20 67 69 76 65 6e 20 65  tart the given e
83280 76 65 6e 74 0a 09 09 20 2a 20 20 40 70 61 72 61  vent... *  @para
83290 6d 20 20 7b 54 6f 6e 65 2e 45 76 65 6e 74 7d 20  m  {Tone.Event} 
832a0 20 65 76 65 6e 74 20 0a 09 09 20 2a 20 20 40 70   event ... *  @p
832b0 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20  rivate... */..  
832c0 20 20 54 6f 6e 65 2e 50 61 72 74 2e 70 72 6f 74    Tone.Part.prot
832d0 6f 74 79 70 65 2e 5f 72 65 73 74 61 72 74 45 76  otype._restartEv
832e0 65 6e 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  ent = function (
832f0 65 76 65 6e 74 29 20 7b 0a 09 20 20 20 20 20 20  event) {..      
83300 20 20 74 68 69 73 2e 5f 73 74 61 74 65 2e 66 6f    this._state.fo
83310 72 45 61 63 68 28 66 75 6e 63 74 69 6f 6e 20 28  rEach(function (
83320 73 74 61 74 65 45 76 65 6e 74 29 20 7b 0a 09 20  stateEvent) {.. 
83330 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
83340 74 61 74 65 45 76 65 6e 74 2e 73 74 61 74 65 20  tateEvent.state 
83350 3d 3d 3d 20 54 6f 6e 65 2e 53 74 61 74 65 2e 53  === Tone.State.S
83360 74 61 72 74 65 64 29 20 7b 0a 09 20 20 20 20 20  tarted) {..     
83370 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
83380 5f 73 74 61 72 74 4e 6f 74 65 28 65 76 65 6e 74  _startNote(event
83390 2c 20 73 74 61 74 65 45 76 65 6e 74 2e 74 69 6d  , stateEvent.tim
833a0 65 2c 20 73 74 61 74 65 45 76 65 6e 74 2e 6f 66  e, stateEvent.of
833b0 66 73 65 74 29 3b 0a 09 20 20 20 20 20 20 20 20  fset);..        
833c0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20      } else {..  
833d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
833e0 73 74 6f 70 20 74 68 65 20 6e 6f 74 65 0a 09 20  stop the note.. 
833f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
83400 76 65 6e 74 2e 73 74 6f 70 28 54 6f 6e 65 2e 54  vent.stop(Tone.T
83410 72 61 6e 73 70 6f 72 74 54 69 6d 65 28 73 74 61  ransportTime(sta
83420 74 65 45 76 65 6e 74 2e 74 69 6d 65 2c 20 27 69  teEvent.time, 'i
83430 27 29 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20  '));..          
83440 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 2e 62    }..        }.b
83450 69 6e 64 28 74 68 69 73 29 29 3b 0a 09 20 20 20  ind(this));..   
83460 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20   };..    /**... 
83470 2a 20 20 52 65 6d 6f 76 65 20 61 6e 20 65 76 65  *  Remove an eve
83480 6e 74 20 66 72 6f 6d 20 74 68 65 20 70 61 72 74  nt from the part
83490 2e 20 57 69 6c 6c 20 72 65 63 75 72 73 69 76 65  . Will recursive
834a0 6c 79 20 69 74 65 72 61 74 65 0a 09 09 20 2a 20  ly iterate... * 
834b0 20 69 6e 74 6f 20 6e 65 73 74 65 64 20 70 61 72   into nested par
834c0 74 73 20 74 6f 20 66 69 6e 64 20 74 68 65 20 65  ts to find the e
834d0 76 65 6e 74 2e 0a 09 09 20 2a 20 20 40 70 61 72  vent.... *  @par
834e0 61 6d 20 7b 54 69 6d 65 7d 20 74 69 6d 65 20 54  am {Time} time T
834f0 68 65 20 74 69 6d 65 20 6f 66 20 74 68 65 20 65  he time of the e
83500 76 65 6e 74 0a 09 09 20 2a 20 20 40 70 61 72 61  vent... *  @para
83510 6d 20 7b 2a 7d 20 76 61 6c 75 65 20 4f 70 74 69  m {*} value Opti
83520 6f 6e 61 6c 6c 79 20 73 65 6c 65 63 74 20 6f 6e  onally select on
83530 6c 79 20 61 20 73 70 65 63 69 66 69 63 20 65 76  ly a specific ev
83540 65 6e 74 20 76 61 6c 75 65 0a 09 09 20 2a 20 20  ent value... *  
83550 40 72 65 74 75 72 6e 20 20 7b 54 6f 6e 65 2e 50  @return  {Tone.P
83560 61 72 74 7d 20 20 74 68 69 73 0a 09 09 20 2a 2f  art}  this... */
83570 0a 09 20 20 20 20 54 6f 6e 65 2e 50 61 72 74 2e  ..    Tone.Part.
83580 70 72 6f 74 6f 74 79 70 65 2e 72 65 6d 6f 76 65  prototype.remove
83590 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d   = function (tim
835a0 65 2c 20 76 61 6c 75 65 29 20 7b 0a 09 20 20 20  e, value) {..   
835b0 20 20 20 20 20 2f 2f 65 78 74 72 61 63 74 20 74       //extract t
835c0 68 65 20 70 61 72 61 6d 65 74 65 72 73 0a 09 20  he parameters.. 
835d0 20 20 20 20 20 20 20 69 66 20 28 74 69 6d 65 2e         if (time.
835e0 68 61 73 4f 77 6e 50 72 6f 70 65 72 74 79 28 27  hasOwnProperty('
835f0 74 69 6d 65 27 29 29 20 7b 0a 09 20 20 20 20 20  time')) {..     
83600 20 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 74         value = t
83610 69 6d 65 3b 0a 09 20 20 20 20 20 20 20 20 20 20  ime;..          
83620 20 20 74 69 6d 65 20 3d 20 76 61 6c 75 65 2e 74    time = value.t
83630 69 6d 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a  ime;..        }.
83640 09 20 20 20 20 20 20 20 20 74 69 6d 65 20 3d 20  .        time = 
83650 74 68 69 73 2e 74 6f 54 69 63 6b 73 28 74 69 6d  this.toTicks(tim
83660 65 29 3b 0a 09 20 20 20 20 20 20 20 20 66 6f 72  e);..        for
83670 20 28 76 61 72 20 69 20 3d 20 74 68 69 73 2e 5f   (var i = this._
83680 65 76 65 6e 74 73 2e 6c 65 6e 67 74 68 20 2d 20  events.length - 
83690 31 3b 20 69 20 3e 3d 20 30 3b 20 69 2d 2d 29 20  1; i >= 0; i--) 
836a0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 76  {..            v
836b0 61 72 20 65 76 65 6e 74 20 3d 20 74 68 69 73 2e  ar event = this.
836c0 5f 65 76 65 6e 74 73 5b 69 5d 3b 0a 09 20 20 20  _events[i];..   
836d0 20 20 20 20 20 20 20 20 20 69 66 20 28 65 76 65           if (eve
836e0 6e 74 20 69 6e 73 74 61 6e 63 65 6f 66 20 54 6f  nt instanceof To
836f0 6e 65 2e 50 61 72 74 29 20 7b 0a 09 20 20 20 20  ne.Part) {..    
83700 20 20 20 20 20 20 20 20 20 20 20 20 65 76 65 6e              even
83710 74 2e 72 65 6d 6f 76 65 28 74 69 6d 65 2c 20 76  t.remove(time, v
83720 61 6c 75 65 29 3b 0a 09 20 20 20 20 20 20 20 20  alue);..        
83730 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20      } else {..  
83740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
83750 20 28 65 76 65 6e 74 2e 73 74 61 72 74 4f 66 66   (event.startOff
83760 73 65 74 20 3d 3d 3d 20 74 69 6d 65 29 20 7b 0a  set === time) {.
83770 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
83780 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 69 73       if (this.is
83790 55 6e 64 65 66 28 76 61 6c 75 65 29 20 7c 7c 20  Undef(value) || 
837a0 21 74 68 69 73 2e 69 73 55 6e 64 65 66 28 76 61  !this.isUndef(va
837b0 6c 75 65 29 20 26 26 20 65 76 65 6e 74 2e 76 61  lue) && event.va
837c0 6c 75 65 20 3d 3d 3d 20 76 61 6c 75 65 29 20 7b  lue === value) {
837d0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
837e0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
837f0 65 76 65 6e 74 73 2e 73 70 6c 69 63 65 28 69 2c  events.splice(i,
83800 20 31 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20   1);..          
83810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 76                ev
83820 65 6e 74 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09  ent.dispose();..
83830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83840 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20      }..         
83850 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
83860 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
83870 20 7d 0a 09 20 20 20 20 20 20 20 20 72 65 74 75   }..        retu
83880 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b  rn this;..    };
83890 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
838a0 52 65 6d 6f 76 65 20 61 6c 6c 20 6f 66 20 74 68  Remove all of th
838b0 65 20 6e 6f 74 65 73 20 66 72 6f 6d 20 74 68 65  e notes from the
838c0 20 67 72 6f 75 70 2e 20 0a 09 09 20 2a 20 20 40   group. ... *  @
838d0 72 65 74 75 72 6e 20 20 7b 54 6f 6e 65 2e 50 61  return  {Tone.Pa
838e0 72 74 7d 20 20 74 68 69 73 0a 09 09 20 2a 2f 0a  rt}  this... */.
838f0 09 20 20 20 20 54 6f 6e 65 2e 50 61 72 74 2e 70  .    Tone.Part.p
83900 72 6f 74 6f 74 79 70 65 2e 72 65 6d 6f 76 65 41  rototype.removeA
83910 6c 6c 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29  ll = function ()
83920 20 7b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73   {..        this
83930 2e 5f 66 6f 72 45 61 63 68 28 66 75 6e 63 74 69  ._forEach(functi
83940 6f 6e 20 28 65 76 65 6e 74 29 20 7b 0a 09 20 20  on (event) {..  
83950 20 20 20 20 20 20 20 20 20 20 65 76 65 6e 74 2e            event.
83960 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20  dispose();..    
83970 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 20 20 20      });..       
83980 20 74 68 69 73 2e 5f 65 76 65 6e 74 73 20 3d 20   this._events = 
83990 5b 5d 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74  [];..        ret
839a0 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
839b0 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
839c0 20 43 61 6e 63 65 6c 20 73 63 68 65 64 75 6c 65   Cancel schedule
839d0 64 20 73 74 61 74 65 20 63 68 61 6e 67 65 20 65  d state change e
839e0 76 65 6e 74 73 3a 20 69 2e 65 2e 20 22 73 74 61  vents: i.e. "sta
839f0 72 74 22 20 61 6e 64 20 22 73 74 6f 70 22 2e 0a  rt" and "stop"..
83a00 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 54 69  .. *  @param {Ti
83a10 6d 65 6c 69 6e 65 50 6f 73 69 74 69 6f 6e 7d 20  melinePosition} 
83a20 61 66 74 65 72 20 54 68 65 20 74 69 6d 65 20 61  after The time a
83a30 66 74 65 72 20 77 68 69 63 68 20 74 6f 20 63 61  fter which to ca
83a40 6e 63 65 6c 20 74 68 65 20 73 63 68 65 64 75 6c  ncel the schedul
83a50 65 64 20 65 76 65 6e 74 73 2e 0a 09 09 20 2a 20  ed events.... * 
83a60 20 40 72 65 74 75 72 6e 20 20 7b 54 6f 6e 65 2e   @return  {Tone.
83a70 50 61 72 74 7d 20 20 74 68 69 73 0a 09 09 20 2a  Part}  this... *
83a80 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50 61 72 74  /..    Tone.Part
83a90 2e 70 72 6f 74 6f 74 79 70 65 2e 63 61 6e 63 65  .prototype.cance
83aa0 6c 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 61 66  l = function (af
83ab0 74 65 72 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ter) {..        
83ac0 61 66 74 65 72 20 3d 20 74 68 69 73 2e 74 6f 54  after = this.toT
83ad0 69 63 6b 73 28 61 66 74 65 72 29 3b 0a 09 20 20  icks(after);..  
83ae0 20 20 20 20 20 20 74 68 69 73 2e 5f 66 6f 72 45        this._forE
83af0 61 63 68 28 66 75 6e 63 74 69 6f 6e 20 28 65 76  ach(function (ev
83b00 65 6e 74 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ent) {..        
83b10 20 20 20 20 65 76 65 6e 74 2e 63 61 6e 63 65 6c      event.cancel
83b20 28 61 66 74 65 72 29 3b 0a 09 20 20 20 20 20 20  (after);..      
83b30 20 20 7d 29 3b 0a 09 20 20 20 20 20 20 20 20 74    });..        t
83b40 68 69 73 2e 5f 73 74 61 74 65 2e 63 61 6e 63 65  his._state.cance
83b50 6c 28 61 66 74 65 72 29 3b 0a 09 20 20 20 20 20  l(after);..     
83b60 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a     return this;.
83b70 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
83b80 0a 09 09 20 2a 20 20 49 74 65 72 61 74 65 20 6f  ... *  Iterate o
83b90 76 65 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 65  ver all of the e
83ba0 76 65 6e 74 73 0a 09 09 20 2a 20 20 40 70 61 72  vents... *  @par
83bb0 61 6d 20 7b 46 75 6e 63 74 69 6f 6e 7d 20 63 61  am {Function} ca
83bc0 6c 6c 62 61 63 6b 0a 09 09 20 2a 20 20 40 70 61  llback... *  @pa
83bd0 72 61 6d 20 7b 4f 62 6a 65 63 74 7d 20 63 74 78  ram {Object} ctx
83be0 20 54 68 65 20 63 6f 6e 74 65 78 74 0a 09 09 20   The context... 
83bf0 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a  *  @private... *
83c00 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50 61 72 74  /..    Tone.Part
83c10 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 66 6f 72 45  .prototype._forE
83c20 61 63 68 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  ach = function (
83c30 63 61 6c 6c 62 61 63 6b 2c 20 63 74 78 29 20 7b  callback, ctx) {
83c40 0a 09 20 20 20 20 20 20 20 20 63 74 78 20 3d 20  ..        ctx = 
83c50 74 68 69 73 2e 64 65 66 61 75 6c 74 41 72 67 28  this.defaultArg(
83c60 63 74 78 2c 20 74 68 69 73 29 3b 0a 09 20 20 20  ctx, this);..   
83c70 20 20 20 20 20 66 6f 72 20 28 76 61 72 20 69 20       for (var i 
83c80 3d 20 74 68 69 73 2e 5f 65 76 65 6e 74 73 2e 6c  = this._events.l
83c90 65 6e 67 74 68 20 2d 20 31 3b 20 69 20 3e 3d 20  ength - 1; i >= 
83ca0 30 3b 20 69 2d 2d 29 20 7b 0a 09 20 20 20 20 20  0; i--) {..     
83cb0 20 20 20 20 20 20 20 76 61 72 20 65 20 3d 20 74         var e = t
83cc0 68 69 73 2e 5f 65 76 65 6e 74 73 5b 69 5d 3b 0a  his._events[i];.
83cd0 09 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
83ce0 28 65 20 69 6e 73 74 61 6e 63 65 6f 66 20 54 6f  (e instanceof To
83cf0 6e 65 2e 50 61 72 74 29 20 7b 0a 09 20 20 20 20  ne.Part) {..    
83d00 20 20 20 20 20 20 20 20 20 20 20 20 65 2e 5f 66              e._f
83d10 6f 72 45 61 63 68 28 63 61 6c 6c 62 61 63 6b 2c  orEach(callback,
83d20 20 63 74 78 29 3b 0a 09 20 20 20 20 20 20 20 20   ctx);..        
83d30 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20      } else {..  
83d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
83d50 6c 6c 62 61 63 6b 2e 63 61 6c 6c 28 63 74 78 2c  llback.call(ctx,
83d60 20 65 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20   e);..          
83d70 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 0a 09    }..        }..
83d80 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
83d90 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  his;..    };..  
83da0 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 53 65 74 20    /**... *  Set 
83db0 74 68 65 20 61 74 74 72 69 62 75 74 65 20 6f 66  the attribute of
83dc0 20 61 6c 6c 20 6f 66 20 74 68 65 20 65 76 65 6e   all of the even
83dd0 74 73 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  ts... *  @param 
83de0 20 7b 53 74 72 69 6e 67 7d 20 20 61 74 74 72 20   {String}  attr 
83df0 20 74 68 65 20 61 74 74 72 69 62 75 74 65 20 74   the attribute t
83e00 6f 20 73 65 74 0a 09 09 20 2a 20 20 40 70 61 72  o set... *  @par
83e10 61 6d 20 20 7b 2a 7d 20 20 76 61 6c 75 65 20 20  am  {*}  value  
83e20 20 20 20 20 54 68 65 20 76 61 6c 75 65 20 74 6f      The value to
83e30 20 73 65 74 20 69 74 20 74 6f 0a 09 09 20 2a 20   set it to... * 
83e40 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a   @private... */.
83e50 09 20 20 20 20 54 6f 6e 65 2e 50 61 72 74 2e 70  .    Tone.Part.p
83e60 72 6f 74 6f 74 79 70 65 2e 5f 73 65 74 41 6c 6c  rototype._setAll
83e70 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 61 74 74   = function (att
83e80 72 2c 20 76 61 6c 75 65 29 20 7b 0a 09 20 20 20  r, value) {..   
83e90 20 20 20 20 20 74 68 69 73 2e 5f 66 6f 72 45 61       this._forEa
83ea0 63 68 28 66 75 6e 63 74 69 6f 6e 20 28 65 76 65  ch(function (eve
83eb0 6e 74 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  nt) {..         
83ec0 20 20 20 65 76 65 6e 74 5b 61 74 74 72 5d 20 3d     event[attr] =
83ed0 20 76 61 6c 75 65 3b 0a 09 20 20 20 20 20 20 20   value;..       
83ee0 20 7d 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20   });..    };..  
83ef0 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 49 6e 74 65    /**... *  Inte
83f00 72 6e 61 6c 20 74 69 63 6b 20 6d 65 74 68 6f 64  rnal tick method
83f10 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b  ... *  @param  {
83f20 4e 75 6d 62 65 72 7d 20 20 74 69 6d 65 20 20 54  Number}  time  T
83f30 68 65 20 74 69 6d 65 20 6f 66 20 74 68 65 20 65  he time of the e
83f40 76 65 6e 74 20 69 6e 20 73 65 63 6f 6e 64 73 0a  vent in seconds.
83f50 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
83f60 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50  . */..    Tone.P
83f70 61 72 74 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 74  art.prototype._t
83f80 69 63 6b 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  ick = function (
83f90 74 69 6d 65 2c 20 76 61 6c 75 65 29 20 7b 0a 09  time, value) {..
83fa0 20 20 20 20 20 20 20 20 69 66 20 28 21 74 68 69          if (!thi
83fb0 73 2e 6d 75 74 65 29 20 7b 0a 09 20 20 20 20 20  s.mute) {..     
83fc0 20 20 20 20 20 20 20 74 68 69 73 2e 63 61 6c 6c         this.call
83fd0 62 61 63 6b 28 74 69 6d 65 2c 20 76 61 6c 75 65  back(time, value
83fe0 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  );..        }.. 
83ff0 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09     };..    /**..
84000 09 20 2a 20 20 44 65 74 65 72 6d 69 6e 65 20 69  . *  Determine i
84010 66 20 74 68 65 20 65 76 65 6e 74 20 73 68 6f 75  f the event shou
84020 6c 64 20 62 65 20 63 75 72 72 65 6e 74 6c 79 20  ld be currently 
84030 6c 6f 6f 70 69 6e 67 0a 09 09 20 2a 20 20 67 69  looping... *  gi
84040 76 65 6e 20 74 68 65 20 6c 6f 6f 70 20 62 6f 75  ven the loop bou
84050 6e 64 72 69 65 73 20 6f 66 20 74 68 69 73 20 50  ndries of this P
84060 61 72 74 2e 0a 09 09 20 2a 20 20 40 70 61 72 61  art.... *  @para
84070 6d 20 20 7b 54 6f 6e 65 2e 45 76 65 6e 74 7d 20  m  {Tone.Event} 
84080 20 65 76 65 6e 74 20 20 54 68 65 20 65 76 65 6e   event  The even
84090 74 20 74 6f 20 74 65 73 74 0a 09 09 20 2a 20 20  t to test... *  
840a0 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09  @private... */..
840b0 20 20 20 20 54 6f 6e 65 2e 50 61 72 74 2e 70 72      Tone.Part.pr
840c0 6f 74 6f 74 79 70 65 2e 5f 74 65 73 74 4c 6f 6f  ototype._testLoo
840d0 70 42 6f 75 6e 64 72 69 65 73 20 3d 20 66 75 6e  pBoundries = fun
840e0 63 74 69 6f 6e 20 28 65 76 65 6e 74 29 20 7b 0a  ction (event) {.
840f0 09 20 20 20 20 20 20 20 20 69 66 20 28 65 76 65  .        if (eve
84100 6e 74 2e 73 74 61 72 74 4f 66 66 73 65 74 20 3c  nt.startOffset <
84110 20 74 68 69 73 2e 5f 6c 6f 6f 70 53 74 61 72 74   this._loopStart
84120 20 7c 7c 20 65 76 65 6e 74 2e 73 74 61 72 74 4f   || event.startO
84130 66 66 73 65 74 20 3e 3d 20 74 68 69 73 2e 5f 6c  ffset >= this._l
84140 6f 6f 70 45 6e 64 29 20 7b 0a 09 20 20 20 20 20  oopEnd) {..     
84150 20 20 20 20 20 20 20 65 76 65 6e 74 2e 63 61 6e         event.can
84160 63 65 6c 28 30 29 3b 0a 09 20 20 20 20 20 20 20  cel(0);..       
84170 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20   } else {..     
84180 20 20 20 20 20 20 20 2f 2f 72 65 73 63 68 65 64         //resched
84190 75 6c 65 20 69 74 20 69 66 20 69 74 27 73 20 73  ule it if it's s
841a0 74 6f 70 70 65 64 0a 09 20 20 20 20 20 20 20 20  topped..        
841b0 20 20 20 20 69 66 20 28 65 76 65 6e 74 2e 73 74      if (event.st
841c0 61 74 65 20 3d 3d 3d 20 54 6f 6e 65 2e 53 74 61  ate === Tone.Sta
841d0 74 65 2e 53 74 6f 70 70 65 64 29 20 7b 0a 09 20  te.Stopped) {.. 
841e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
841f0 68 69 73 2e 5f 72 65 73 74 61 72 74 45 76 65 6e  his._restartEven
84200 74 28 65 76 65 6e 74 29 3b 0a 09 20 20 20 20 20  t(event);..     
84210 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
84220 20 20 7d 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20    }..    };..   
84230 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20 70   /**... *  The p
84240 72 6f 62 61 62 69 6c 69 74 79 20 6f 66 20 74 68  robability of th
84250 65 20 6e 6f 74 65 73 20 62 65 69 6e 67 20 74 72  e notes being tr
84260 69 67 67 65 72 65 64 2e 0a 09 09 20 2a 20 20 40  iggered.... *  @
84270 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 50 61  memberOf Tone.Pa
84280 72 74 23 0a 09 09 20 2a 20 20 40 74 79 70 65 20  rt#... *  @type 
84290 7b 4e 6f 72 6d 61 6c 52 61 6e 67 65 7d 0a 09 09  {NormalRange}...
842a0 20 2a 20 20 40 6e 61 6d 65 20 70 72 6f 62 61 62   *  @name probab
842b0 69 6c 69 74 79 0a 09 09 20 2a 2f 0a 09 20 20 20  ility... */..   
842c0 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72   Object.definePr
842d0 6f 70 65 72 74 79 28 54 6f 6e 65 2e 50 61 72 74  operty(Tone.Part
842e0 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 70 72 6f  .prototype, 'pro
842f0 62 61 62 69 6c 69 74 79 27 2c 20 7b 0a 09 20 20  bability', {..  
84300 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74        get: funct
84310 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
84320 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
84330 73 2e 5f 70 72 6f 62 61 62 69 6c 69 74 79 3b 0a  s._probability;.
84340 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20  .        },..   
84350 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74 69       set: functi
84360 6f 6e 20 28 70 72 6f 62 29 20 7b 0a 09 20 20 20  on (prob) {..   
84370 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70           this._p
84380 72 6f 62 61 62 69 6c 69 74 79 20 3d 20 70 72 6f  robability = pro
84390 62 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  b;..            
843a0 74 68 69 73 2e 5f 73 65 74 41 6c 6c 28 27 70 72  this._setAll('pr
843b0 6f 62 61 62 69 6c 69 74 79 27 2c 20 70 72 6f 62  obability', prob
843c0 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  );..        }.. 
843d0 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a     });..    /**.
843e0 09 09 20 2a 20 20 49 66 20 73 65 74 20 74 6f 20  .. *  If set to 
843f0 74 72 75 65 2c 20 77 69 6c 6c 20 61 70 70 6c 79  true, will apply
84400 20 73 6d 61 6c 6c 20 72 61 6e 64 6f 6d 20 76 61   small random va
84410 72 69 61 74 69 6f 6e 0a 09 09 20 2a 20 20 74 6f  riation... *  to
84420 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 74 69   the callback ti
84430 6d 65 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65  me. If the value
84440 20 69 73 20 67 69 76 65 6e 20 61 73 20 61 20 74   is given as a t
84450 69 6d 65 2c 20 69 74 20 77 69 6c 6c 20 72 61 6e  ime, it will ran
84460 64 6f 6d 69 7a 65 0a 09 09 20 2a 20 20 62 79 20  domize... *  by 
84470 74 68 61 74 20 61 6d 6f 75 6e 74 2e 0a 09 09 20  that amount.... 
84480 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a  *  @example... *
84490 20 65 76 65 6e 74 2e 68 75 6d 61 6e 69 7a 65 20   event.humanize 
844a0 3d 20 74 72 75 65 3b 0a 09 09 20 2a 20 20 40 74  = true;... *  @t
844b0 79 70 65 20 7b 42 6f 6f 6c 65 61 6e 7c 54 69 6d  ype {Boolean|Tim
844c0 65 7d 0a 09 09 20 2a 20 20 40 6e 61 6d 65 20 68  e}... *  @name h
844d0 75 6d 61 6e 69 7a 65 0a 09 09 20 2a 2f 0a 09 20  umanize... */.. 
844e0 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65     Object.define
844f0 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 50 61  Property(Tone.Pa
84500 72 74 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 68  rt.prototype, 'h
84510 75 6d 61 6e 69 7a 65 27 2c 20 7b 0a 09 20 20 20  umanize', {..   
84520 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69       get: functi
84530 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
84540 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
84550 2e 5f 68 75 6d 61 6e 69 7a 65 3b 0a 09 20 20 20  ._humanize;..   
84560 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20       },..       
84570 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   set: function (
84580 76 61 72 69 61 74 69 6f 6e 29 20 7b 0a 09 20 20  variation) {..  
84590 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
845a0 68 75 6d 61 6e 69 7a 65 20 3d 20 76 61 72 69 61  humanize = varia
845b0 74 69 6f 6e 3b 0a 09 20 20 20 20 20 20 20 20 20  tion;..         
845c0 20 20 20 74 68 69 73 2e 5f 73 65 74 41 6c 6c 28     this._setAll(
845d0 27 68 75 6d 61 6e 69 7a 65 27 2c 20 76 61 72 69  'humanize', vari
845e0 61 74 69 6f 6e 29 3b 0a 09 20 20 20 20 20 20 20  ation);..       
845f0 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20   }..    });..   
84600 20 2f 2a 2a 0a 09 09 20 2a 20 20 49 66 20 74 68   /**... *  If th
84610 65 20 70 61 72 74 20 73 68 6f 75 6c 64 20 6c 6f  e part should lo
84620 6f 70 20 6f 72 20 6e 6f 74 0a 09 09 20 2a 20 20  op or not... *  
84630 62 65 74 77 65 65 6e 20 54 6f 6e 65 2e 50 61 72  between Tone.Par
84640 74 2e 6c 6f 6f 70 53 74 61 72 74 20 61 6e 64 20  t.loopStart and 
84650 0a 09 09 20 2a 20 20 54 6f 6e 65 2e 50 61 72 74  ... *  Tone.Part
84660 2e 6c 6f 6f 70 45 6e 64 2e 20 41 6e 20 69 6e 74  .loopEnd. An int
84670 65 67 65 72 0a 09 09 20 2a 20 20 76 61 6c 75 65  eger... *  value
84680 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
84690 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 09 09  the number of...
846a0 20 2a 20 20 6c 6f 6f 70 73 20 74 68 65 20 50 61   *  loops the Pa
846b0 72 74 20 64 6f 65 73 20 61 66 74 65 72 20 69 74  rt does after it
846c0 20 73 74 61 72 74 73 2e 0a 09 09 20 2a 20 20 40   starts.... *  @
846d0 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 50 61  memberOf Tone.Pa
846e0 72 74 23 0a 09 09 20 2a 20 20 40 74 79 70 65 20  rt#... *  @type 
846f0 7b 42 6f 6f 6c 65 61 6e 7c 50 6f 73 69 74 69 76  {Boolean|Positiv
84700 65 7d 0a 09 09 20 2a 20 20 40 6e 61 6d 65 20 6c  e}... *  @name l
84710 6f 6f 70 0a 09 09 20 2a 20 20 40 65 78 61 6d 70  oop... *  @examp
84720 6c 65 0a 09 09 20 2a 20 2f 2f 6c 6f 6f 70 20 74  le... * //loop t
84730 68 65 20 70 61 72 74 20 38 20 74 69 6d 65 73 0a  he part 8 times.
84740 09 09 20 2a 20 70 61 72 74 2e 6c 6f 6f 70 20 3d  .. * part.loop =
84750 20 38 3b 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f   8;... */..    O
84760 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70  bject.defineProp
84770 65 72 74 79 28 54 6f 6e 65 2e 50 61 72 74 2e 70  erty(Tone.Part.p
84780 72 6f 74 6f 74 79 70 65 2c 20 27 6c 6f 6f 70 27  rototype, 'loop'
84790 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74  , {..        get
847a0 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  : function () {.
847b0 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
847c0 75 72 6e 20 74 68 69 73 2e 5f 6c 6f 6f 70 3b 0a  urn this._loop;.
847d0 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20  .        },..   
847e0 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74 69       set: functi
847f0 6f 6e 20 28 6c 6f 6f 70 29 20 7b 0a 09 20 20 20  on (loop) {..   
84800 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c           this._l
84810 6f 6f 70 20 3d 20 6c 6f 6f 70 3b 0a 09 20 20 20  oop = loop;..   
84820 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 66           this._f
84830 6f 72 45 61 63 68 28 66 75 6e 63 74 69 6f 6e 20  orEach(function 
84840 28 65 76 65 6e 74 29 20 7b 0a 09 20 20 20 20 20  (event) {..     
84850 20 20 20 20 20 20 20 20 20 20 20 65 76 65 6e 74             event
84860 2e 5f 6c 6f 6f 70 53 74 61 72 74 20 3d 20 74 68  ._loopStart = th
84870 69 73 2e 5f 6c 6f 6f 70 53 74 61 72 74 3b 0a 09  is._loopStart;..
84880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84890 65 76 65 6e 74 2e 5f 6c 6f 6f 70 45 6e 64 20 3d  event._loopEnd =
848a0 20 74 68 69 73 2e 5f 6c 6f 6f 70 45 6e 64 3b 0a   this._loopEnd;.
848b0 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
848c0 20 65 76 65 6e 74 2e 6c 6f 6f 70 20 3d 20 6c 6f   event.loop = lo
848d0 6f 70 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  op;..           
848e0 20 20 20 20 20 74 68 69 73 2e 5f 74 65 73 74 4c       this._testL
848f0 6f 6f 70 42 6f 75 6e 64 72 69 65 73 28 65 76 65  oopBoundries(eve
84900 6e 74 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20  nt);..          
84910 20 20 7d 29 3b 0a 09 20 20 20 20 20 20 20 20 7d    });..        }
84920 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f  ..    });..    /
84930 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20 6c 6f 6f  **... *  The loo
84940 70 45 6e 64 20 70 6f 69 6e 74 20 64 65 74 65 72  pEnd point deter
84950 6d 69 6e 65 73 20 77 68 65 6e 20 69 74 20 77 69  mines when it wi
84960 6c 6c 20 0a 09 09 20 2a 20 20 6c 6f 6f 70 20 69  ll ... *  loop i
84970 66 20 54 6f 6e 65 2e 50 61 72 74 2e 6c 6f 6f 70  f Tone.Part.loop
84980 20 69 73 20 74 72 75 65 2e 0a 09 09 20 2a 20 20   is true.... *  
84990 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 50  @memberOf Tone.P
849a0 61 72 74 23 0a 09 09 20 2a 20 20 40 74 79 70 65  art#... *  @type
849b0 20 7b 54 72 61 6e 73 70 6f 72 74 54 69 6d 65 7d   {TransportTime}
849c0 0a 09 09 20 2a 20 20 40 6e 61 6d 65 20 6c 6f 6f  ... *  @name loo
849d0 70 45 6e 64 0a 09 09 20 2a 2f 0a 09 20 20 20 20  pEnd... */..    
849e0 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f  Object.definePro
849f0 70 65 72 74 79 28 54 6f 6e 65 2e 50 61 72 74 2e  perty(Tone.Part.
84a00 70 72 6f 74 6f 74 79 70 65 2c 20 27 6c 6f 6f 70  prototype, 'loop
84a10 45 6e 64 27 2c 20 7b 0a 09 20 20 20 20 20 20 20  End', {..       
84a20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   get: function (
84a30 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
84a40 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 54 72 61   return Tone.Tra
84a50 6e 73 70 6f 72 74 54 69 6d 65 28 74 68 69 73 2e  nsportTime(this.
84a60 5f 6c 6f 6f 70 45 6e 64 2c 20 27 69 27 29 2e 74  _loopEnd, 'i').t
84a70 6f 4e 6f 74 61 74 69 6f 6e 28 29 3b 0a 09 20 20  oNotation();..  
84a80 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20        },..      
84a90 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    set: function 
84aa0 28 6c 6f 6f 70 45 6e 64 29 20 7b 0a 09 20 20 20  (loopEnd) {..   
84ab0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c           this._l
84ac0 6f 6f 70 45 6e 64 20 3d 20 74 68 69 73 2e 74 6f  oopEnd = this.to
84ad0 54 69 63 6b 73 28 6c 6f 6f 70 45 6e 64 29 3b 0a  Ticks(loopEnd);.
84ae0 09 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
84af0 28 74 68 69 73 2e 5f 6c 6f 6f 70 29 20 7b 0a 09  (this._loop) {..
84b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84b10 74 68 69 73 2e 5f 66 6f 72 45 61 63 68 28 66 75  this._forEach(fu
84b20 6e 63 74 69 6f 6e 20 28 65 76 65 6e 74 29 20 7b  nction (event) {
84b30 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
84b40 20 20 20 20 20 20 65 76 65 6e 74 2e 6c 6f 6f 70        event.loop
84b50 45 6e 64 20 3d 20 6c 6f 6f 70 45 6e 64 3b 0a 09  End = loopEnd;..
84b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84b70 20 20 20 20 74 68 69 73 2e 5f 74 65 73 74 4c 6f      this._testLo
84b80 6f 70 42 6f 75 6e 64 72 69 65 73 28 65 76 65 6e  opBoundries(even
84b90 74 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  t);..           
84ba0 20 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 20 20       });..      
84bb0 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
84bc0 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20   }..    });..   
84bd0 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20 6c   /**... *  The l
84be0 6f 6f 70 53 74 61 72 74 20 70 6f 69 6e 74 20 64  oopStart point d
84bf0 65 74 65 72 6d 69 6e 65 73 20 77 68 65 6e 20 69  etermines when i
84c00 74 20 77 69 6c 6c 20 0a 09 09 20 2a 20 20 6c 6f  t will ... *  lo
84c10 6f 70 20 69 66 20 54 6f 6e 65 2e 50 61 72 74 2e  op if Tone.Part.
84c20 6c 6f 6f 70 20 69 73 20 74 72 75 65 2e 0a 09 09  loop is true....
84c30 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f   *  @memberOf To
84c40 6e 65 2e 50 61 72 74 23 0a 09 09 20 2a 20 20 40  ne.Part#... *  @
84c50 74 79 70 65 20 7b 54 72 61 6e 73 70 6f 72 74 54  type {TransportT
84c60 69 6d 65 7d 0a 09 09 20 2a 20 20 40 6e 61 6d 65  ime}... *  @name
84c70 20 6c 6f 6f 70 53 74 61 72 74 0a 09 09 20 2a 2f   loopStart... */
84c80 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66  ..    Object.def
84c90 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65  ineProperty(Tone
84ca0 2e 50 61 72 74 2e 70 72 6f 74 6f 74 79 70 65 2c  .Part.prototype,
84cb0 20 27 6c 6f 6f 70 53 74 61 72 74 27 2c 20 7b 0a   'loopStart', {.
84cc0 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75  .        get: fu
84cd0 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
84ce0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
84cf0 54 6f 6e 65 2e 54 72 61 6e 73 70 6f 72 74 54 69  Tone.TransportTi
84d00 6d 65 28 74 68 69 73 2e 5f 6c 6f 6f 70 53 74 61  me(this._loopSta
84d10 72 74 2c 20 27 69 27 29 2e 74 6f 4e 6f 74 61 74  rt, 'i').toNotat
84d20 69 6f 6e 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ion();..        
84d30 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a  },..        set:
84d40 20 66 75 6e 63 74 69 6f 6e 20 28 6c 6f 6f 70 53   function (loopS
84d50 74 61 72 74 29 20 7b 0a 09 20 20 20 20 20 20 20  tart) {..       
84d60 20 20 20 20 20 74 68 69 73 2e 5f 6c 6f 6f 70 53       this._loopS
84d70 74 61 72 74 20 3d 20 74 68 69 73 2e 74 6f 54 69  tart = this.toTi
84d80 63 6b 73 28 6c 6f 6f 70 53 74 61 72 74 29 3b 0a  cks(loopStart);.
84d90 09 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
84da0 28 74 68 69 73 2e 5f 6c 6f 6f 70 29 20 7b 0a 09  (this._loop) {..
84db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84dc0 74 68 69 73 2e 5f 66 6f 72 45 61 63 68 28 66 75  this._forEach(fu
84dd0 6e 63 74 69 6f 6e 20 28 65 76 65 6e 74 29 20 7b  nction (event) {
84de0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
84df0 20 20 20 20 20 20 65 76 65 6e 74 2e 6c 6f 6f 70        event.loop
84e00 53 74 61 72 74 20 3d 20 74 68 69 73 2e 6c 6f 6f  Start = this.loo
84e10 70 53 74 61 72 74 3b 0a 09 20 20 20 20 20 20 20  pStart;..       
84e20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
84e30 73 2e 5f 74 65 73 74 4c 6f 6f 70 42 6f 75 6e 64  s._testLoopBound
84e40 72 69 65 73 28 65 76 65 6e 74 29 3b 0a 09 20 20  ries(event);..  
84e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 29                })
84e60 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
84e70 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
84e80 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09   });..    /**...
84e90 20 2a 20 09 54 68 65 20 70 6c 61 79 62 61 63 6b   * .The playback
84ea0 20 72 61 74 65 20 6f 66 20 74 68 65 20 70 61 72   rate of the par
84eb0 74 0a 09 09 20 2a 20 20 40 6d 65 6d 62 65 72 4f  t... *  @memberO
84ec0 66 20 54 6f 6e 65 2e 50 61 72 74 23 0a 09 09 20  f Tone.Part#... 
84ed0 2a 20 20 40 74 79 70 65 20 7b 50 6f 73 69 74 69  *  @type {Positi
84ee0 76 65 7d 0a 09 09 20 2a 20 20 40 6e 61 6d 65 20  ve}... *  @name 
84ef0 70 6c 61 79 62 61 63 6b 52 61 74 65 0a 09 09 20  playbackRate... 
84f00 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64  */..    Object.d
84f10 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f  efineProperty(To
84f20 6e 65 2e 50 61 72 74 2e 70 72 6f 74 6f 74 79 70  ne.Part.prototyp
84f30 65 2c 20 27 70 6c 61 79 62 61 63 6b 52 61 74 65  e, 'playbackRate
84f40 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65  ', {..        ge
84f50 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b  t: function () {
84f60 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
84f70 74 75 72 6e 20 74 68 69 73 2e 5f 70 6c 61 79 62  turn this._playb
84f80 61 63 6b 52 61 74 65 3b 0a 09 20 20 20 20 20 20  ackRate;..      
84f90 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65    },..        se
84fa0 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 72 61 74  t: function (rat
84fb0 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  e) {..          
84fc0 20 20 74 68 69 73 2e 5f 70 6c 61 79 62 61 63 6b    this._playback
84fd0 52 61 74 65 20 3d 20 72 61 74 65 3b 0a 09 20 20  Rate = rate;..  
84fe0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
84ff0 73 65 74 41 6c 6c 28 27 70 6c 61 79 62 61 63 6b  setAll('playback
85000 52 61 74 65 27 2c 20 72 61 74 65 29 3b 0a 09 20  Rate', rate);.. 
85010 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29         }..    })
85020 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
85030 09 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73  .The number of s
85040 63 68 65 64 75 6c 65 64 20 6e 6f 74 65 73 20 69  cheduled notes i
85050 6e 20 74 68 65 20 70 61 72 74 2e 20 0a 09 09 20  n the part. ... 
85060 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e  *  @memberOf Ton
85070 65 2e 50 61 72 74 23 0a 09 09 20 2a 20 20 40 74  e.Part#... *  @t
85080 79 70 65 20 7b 50 6f 73 69 74 69 76 65 7d 0a 09  ype {Positive}..
85090 09 20 2a 20 20 40 6e 61 6d 65 20 6c 65 6e 67 74  . *  @name lengt
850a0 68 0a 09 09 20 2a 20 20 40 72 65 61 64 4f 6e 6c  h... *  @readOnl
850b0 79 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a  y... */..    Obj
850c0 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72  ect.defineProper
850d0 74 79 28 54 6f 6e 65 2e 50 61 72 74 2e 70 72 6f  ty(Tone.Part.pro
850e0 74 6f 74 79 70 65 2c 20 27 6c 65 6e 67 74 68 27  totype, 'length'
850f0 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74  , {..        get
85100 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  : function () {.
85110 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
85120 75 72 6e 20 74 68 69 73 2e 5f 65 76 65 6e 74 73  urn this._events
85130 2e 6c 65 6e 67 74 68 3b 0a 09 20 20 20 20 20 20  .length;..      
85140 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20    }..    });..  
85150 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 6c 65 61    /**... *  Clea
85160 6e 20 75 70 0a 09 09 20 2a 20 20 40 72 65 74 75  n up... *  @retu
85170 72 6e 20 20 7b 54 6f 6e 65 2e 50 61 72 74 7d 20  rn  {Tone.Part} 
85180 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20   this... */..   
85190 20 54 6f 6e 65 2e 50 61 72 74 2e 70 72 6f 74 6f   Tone.Part.proto
851a0 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20 66  type.dispose = f
851b0 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
851c0 20 20 20 20 20 20 74 68 69 73 2e 72 65 6d 6f 76        this.remov
851d0 65 41 6c 6c 28 29 3b 0a 09 20 20 20 20 20 20 20  eAll();..       
851e0 20 74 68 69 73 2e 5f 73 74 61 74 65 2e 64 69 73   this._state.dis
851f0 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20  pose();..       
85200 20 74 68 69 73 2e 5f 73 74 61 74 65 20 3d 20 6e   this._state = n
85210 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ull;..        th
85220 69 73 2e 63 61 6c 6c 62 61 63 6b 20 3d 20 6e 75  is.callback = nu
85230 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ll;..        thi
85240 73 2e 5f 65 76 65 6e 74 73 20 3d 20 6e 75 6c 6c  s._events = null
85250 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
85260 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a  n this;..    };.
85270 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65  .    return Tone
85280 2e 50 61 72 74 3b 0a 09 7d 29 3b 0a 09 4d 6f 64  .Part;..});..Mod
85290 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f  ule(function (To
852a0 6e 65 29 20 7b 0a 09 20 20 20 20 2f 2a 2a 0a 09  ne) {..    /**..
852b0 09 20 2a 20 20 40 63 6c 61 73 73 20 54 6f 6e 65  . *  @class Tone
852c0 2e 50 61 74 74 65 72 6e 20 61 72 70 65 67 67 69  .Pattern arpeggi
852d0 61 74 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  ates between the
852e0 20 67 69 76 65 6e 20 6e 6f 74 65 73 0a 09 09 20   given notes... 
852f0 2a 20 20 20 20 20 20 20 20 20 69 6e 20 61 20 6e  *         in a n
85300 75 6d 62 65 72 20 6f 66 20 70 61 74 74 65 72 6e  umber of pattern
85310 73 2e 20 53 65 65 20 54 6f 6e 65 2e 43 74 72 6c  s. See Tone.Ctrl
85320 50 61 74 74 65 72 6e 20 66 6f 72 0a 09 09 20 2a  Pattern for... *
85330 20 20 20 20 20 20 20 20 20 61 20 66 75 6c 6c 20           a full 
85340 6c 69 73 74 20 6f 66 20 70 61 74 74 65 72 6e 73  list of patterns
85350 2e 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65  .... *  @example
85360 0a 09 09 20 2a 20 76 61 72 20 70 61 74 74 65 72  ... * var patter
85370 6e 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 50 61 74  n = new Tone.Pat
85380 74 65 72 6e 28 66 75 6e 63 74 69 6f 6e 28 74 69  tern(function(ti
85390 6d 65 2c 20 6e 6f 74 65 29 7b 0a 09 09 20 2a 20  me, note){... * 
853a0 20 20 2f 2f 74 68 65 20 6f 72 64 65 72 20 6f 66    //the order of
853b0 20 74 68 65 20 6e 6f 74 65 73 20 70 61 73 73 65   the notes passe
853c0 64 20 69 6e 20 64 65 70 65 6e 64 73 20 6f 6e 20  d in depends on 
853d0 74 68 65 20 70 61 74 74 65 72 6e 0a 09 09 20 2a  the pattern... *
853e0 20 7d 2c 20 5b 22 43 32 22 2c 20 22 44 34 22 2c   }, ["C2", "D4",
853f0 20 22 45 35 22 2c 20 22 41 36 22 5d 2c 20 22 75   "E5", "A6"], "u
85400 70 44 6f 77 6e 22 29 3b 0a 09 09 20 2a 20 20 40  pDown");... *  @
85410 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65 2e 4c 6f  extends {Tone.Lo
85420 6f 70 7d 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  op}... *  @param
85430 20 7b 46 75 6e 63 74 69 6f 6e 7d 20 63 61 6c 6c   {Function} call
85440 62 61 63 6b 20 54 68 65 20 63 61 6c 6c 62 61 63  back The callbac
85450 6b 20 74 6f 20 69 6e 76 6f 6b 65 20 77 69 74 68  k to invoke with
85460 20 74 68 65 0a 09 09 20 2a 20 20 20 20 20 20 20   the... *       
85470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85480 20 20 20 20 20 20 65 76 65 6e 74 2e 0a 09 09 20        event.... 
85490 2a 20 20 40 70 61 72 61 6d 20 7b 41 72 72 61 79  *  @param {Array
854a0 7d 20 76 61 6c 75 65 73 20 54 68 65 20 76 61 6c  } values The val
854b0 75 65 73 20 74 6f 20 61 72 70 65 67 67 69 61 74  ues to arpeggiat
854c0 65 20 6f 76 65 72 2e 0a 09 09 20 2a 2f 0a 09 20  e over.... */.. 
854d0 20 20 20 54 6f 6e 65 2e 50 61 74 74 65 72 6e 20     Tone.Pattern 
854e0 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  = function () {.
854f0 09 20 20 20 20 20 20 20 20 76 61 72 20 6f 70 74  .        var opt
85500 69 6f 6e 73 20 3d 20 74 68 69 73 2e 6f 70 74 69  ions = this.opti
85510 6f 6e 73 4f 62 6a 65 63 74 28 61 72 67 75 6d 65  onsObject(argume
85520 6e 74 73 2c 20 5b 0a 09 20 20 20 20 20 20 20 20  nts, [..        
85530 20 20 20 20 27 63 61 6c 6c 62 61 63 6b 27 2c 0a      'callback',.
85540 09 20 20 20 20 20 20 20 20 20 20 20 20 27 76 61  .            'va
85550 6c 75 65 73 27 2c 0a 09 20 20 20 20 20 20 20 20  lues',..        
85560 20 20 20 20 27 70 61 74 74 65 72 6e 27 0a 09 20      'pattern'.. 
85570 20 20 20 20 20 20 20 5d 2c 20 54 6f 6e 65 2e 50         ], Tone.P
85580 61 74 74 65 72 6e 2e 64 65 66 61 75 6c 74 73 29  attern.defaults)
85590 3b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e  ;..        Tone.
855a0 4c 6f 6f 70 2e 63 61 6c 6c 28 74 68 69 73 2c 20  Loop.call(this, 
855b0 6f 70 74 69 6f 6e 73 29 3b 0a 09 20 20 20 20 20  options);..     
855c0 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68     /**.... *  Th
855d0 65 20 70 61 74 74 65 72 6e 20 6d 61 6e 61 67 65  e pattern manage
855e0 72 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b  r.... *  @type {
855f0 54 6f 6e 65 2e 43 74 72 6c 50 61 74 74 65 72 6e  Tone.CtrlPattern
85600 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  }.... *  @privat
85610 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
85620 20 20 74 68 69 73 2e 5f 70 61 74 74 65 72 6e 20    this._pattern 
85630 3d 20 6e 65 77 20 54 6f 6e 65 2e 43 74 72 6c 50  = new Tone.CtrlP
85640 61 74 74 65 72 6e 28 7b 0a 09 20 20 20 20 20 20  attern({..      
85650 20 20 20 20 20 20 27 76 61 6c 75 65 73 27 3a 20        'values': 
85660 6f 70 74 69 6f 6e 73 2e 76 61 6c 75 65 73 2c 0a  options.values,.
85670 09 20 20 20 20 20 20 20 20 20 20 20 20 27 74 79  .            'ty
85680 70 65 27 3a 20 6f 70 74 69 6f 6e 73 2e 70 61 74  pe': options.pat
85690 74 65 72 6e 2c 0a 09 20 20 20 20 20 20 20 20 20  tern,..         
856a0 20 20 20 27 69 6e 64 65 78 27 3a 20 6f 70 74 69     'index': opti
856b0 6f 6e 73 2e 69 6e 64 65 78 0a 09 20 20 20 20 20  ons.index..     
856c0 20 20 20 7d 29 3b 0a 09 20 20 20 20 7d 3b 0a 09     });..    };..
856d0 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28      Tone.extend(
856e0 54 6f 6e 65 2e 50 61 74 74 65 72 6e 2c 20 54 6f  Tone.Pattern, To
856f0 6e 65 2e 4c 6f 6f 70 29 3b 0a 09 20 20 20 20 2f  ne.Loop);..    /
85700 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20 64 65 66  **... *  The def
85710 61 75 6c 74 73 0a 09 09 20 2a 20 20 40 63 6f 6e  aults... *  @con
85720 73 74 0a 09 09 20 2a 20 20 40 74 79 70 65 20 20  st... *  @type  
85730 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a 09  {Object}... */..
85740 20 20 20 20 54 6f 6e 65 2e 50 61 74 74 65 72 6e      Tone.Pattern
85750 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b 0a 09 20  .defaults = {.. 
85760 20 20 20 20 20 20 20 27 70 61 74 74 65 72 6e 27         'pattern'
85770 3a 20 54 6f 6e 65 2e 43 74 72 6c 50 61 74 74 65  : Tone.CtrlPatte
85780 72 6e 2e 54 79 70 65 2e 55 70 2c 0a 09 20 20 20  rn.Type.Up,..   
85790 20 20 20 20 20 27 76 61 6c 75 65 73 27 3a 20 5b       'values': [
857a0 5d 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  ]..    };..    /
857b0 2a 2a 0a 09 09 20 2a 20 20 49 6e 74 65 72 6e 61  **... *  Interna
857c0 6c 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 65  l function calle
857d0 64 20 77 68 65 6e 20 74 68 65 20 6e 6f 74 65 73  d when the notes
857e0 20 73 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65   should be calle
857f0 64 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20  d... *  @param  
85800 7b 4e 75 6d 62 65 72 7d 20 20 74 69 6d 65 20 20  {Number}  time  
85810 54 68 65 20 74 69 6d 65 20 74 68 65 20 65 76 65  The time the eve
85820 6e 74 20 6f 63 63 75 72 73 0a 09 09 20 2a 20 20  nt occurs... *  
85830 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09  @private... */..
85840 20 20 20 20 54 6f 6e 65 2e 50 61 74 74 65 72 6e      Tone.Pattern
85850 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 74 69 63 6b  .prototype._tick
85860 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d   = function (tim
85870 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 74 68  e) {..        th
85880 69 73 2e 63 61 6c 6c 62 61 63 6b 28 74 69 6d 65  is.callback(time
85890 2c 20 74 68 69 73 2e 5f 70 61 74 74 65 72 6e 2e  , this._pattern.
858a0 76 61 6c 75 65 29 3b 0a 09 20 20 20 20 20 20 20  value);..       
858b0 20 74 68 69 73 2e 5f 70 61 74 74 65 72 6e 2e 6e   this._pattern.n
858c0 65 78 74 28 29 3b 0a 09 20 20 20 20 7d 3b 0a 09  ext();..    };..
858d0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 68      /**... *  Th
858e0 65 20 63 75 72 72 65 6e 74 20 69 6e 64 65 78 20  e current index 
858f0 69 6e 20 74 68 65 20 76 61 6c 75 65 73 20 61 72  in the values ar
85900 72 61 79 2e 0a 09 09 20 2a 20 20 40 6d 65 6d 62  ray.... *  @memb
85910 65 72 4f 66 20 54 6f 6e 65 2e 50 61 74 74 65 72  erOf Tone.Patter
85920 6e 23 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b  n#... *  @type {
85930 50 6f 73 69 74 69 76 65 7d 0a 09 09 20 2a 20 20  Positive}... *  
85940 40 6e 61 6d 65 20 69 6e 64 65 78 0a 09 09 20 2a  @name index... *
85950 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65  /..    Object.de
85960 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e  fineProperty(Ton
85970 65 2e 50 61 74 74 65 72 6e 2e 70 72 6f 74 6f 74  e.Pattern.protot
85980 79 70 65 2c 20 27 69 6e 64 65 78 27 2c 20 7b 0a  ype, 'index', {.
85990 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75  .        get: fu
859a0 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
859b0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
859c0 74 68 69 73 2e 5f 70 61 74 74 65 72 6e 2e 69 6e  this._pattern.in
859d0 64 65 78 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c  dex;..        },
859e0 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66  ..        set: f
859f0 75 6e 63 74 69 6f 6e 20 28 69 29 20 7b 0a 09 20  unction (i) {.. 
85a00 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
85a10 5f 70 61 74 74 65 72 6e 2e 69 6e 64 65 78 20 3d  _pattern.index =
85a20 20 69 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09   i;..        }..
85a30 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a      });..    /**
85a40 0a 09 09 20 2a 20 20 54 68 65 20 61 72 72 61 79  ... *  The array
85a50 20 6f 66 20 65 76 65 6e 74 73 2e 0a 09 09 20 2a   of events.... *
85a60 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65    @memberOf Tone
85a70 2e 50 61 74 74 65 72 6e 23 0a 09 09 20 2a 20 20  .Pattern#... *  
85a80 40 74 79 70 65 20 7b 41 72 72 61 79 7d 0a 09 09  @type {Array}...
85a90 20 2a 20 20 40 6e 61 6d 65 20 76 61 6c 75 65 73   *  @name values
85aa0 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65  ... */..    Obje
85ab0 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74  ct.definePropert
85ac0 79 28 54 6f 6e 65 2e 50 61 74 74 65 72 6e 2e 70  y(Tone.Pattern.p
85ad0 72 6f 74 6f 74 79 70 65 2c 20 27 76 61 6c 75 65  rototype, 'value
85ae0 73 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67  s', {..        g
85af0 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  et: function () 
85b00 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
85b10 65 74 75 72 6e 20 74 68 69 73 2e 5f 70 61 74 74  eturn this._patt
85b20 65 72 6e 2e 76 61 6c 75 65 73 3b 0a 09 20 20 20  ern.values;..   
85b30 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20       },..       
85b40 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   set: function (
85b50 76 61 6c 73 29 20 7b 0a 09 20 20 20 20 20 20 20  vals) {..       
85b60 20 20 20 20 20 74 68 69 73 2e 5f 70 61 74 74 65       this._patte
85b70 72 6e 2e 76 61 6c 75 65 73 20 3d 20 76 61 6c 73  rn.values = vals
85b80 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20  ;..        }..  
85b90 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09    });..    /**..
85ba0 09 20 2a 20 20 54 68 65 20 63 75 72 72 65 6e 74  . *  The current
85bb0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 70 61   value of the pa
85bc0 74 74 65 72 6e 2e 0a 09 09 20 2a 20 20 40 6d 65  ttern.... *  @me
85bd0 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 50 61 74 74  mberOf Tone.Patt
85be0 65 72 6e 23 0a 09 09 20 2a 20 20 40 74 79 70 65  ern#... *  @type
85bf0 20 7b 2a 7d 0a 09 09 20 2a 20 20 40 6e 61 6d 65   {*}... *  @name
85c00 20 76 61 6c 75 65 0a 09 09 20 2a 20 20 40 72 65   value... *  @re
85c10 61 64 4f 6e 6c 79 0a 09 09 20 2a 2f 0a 09 20 20  adOnly... */..  
85c20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50    Object.defineP
85c30 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 50 61 74  roperty(Tone.Pat
85c40 74 65 72 6e 2e 70 72 6f 74 6f 74 79 70 65 2c 20  tern.prototype, 
85c50 27 76 61 6c 75 65 27 2c 20 7b 0a 09 20 20 20 20  'value', {..    
85c60 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f      get: functio
85c70 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
85c80 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
85c90 5f 70 61 74 74 65 72 6e 2e 76 61 6c 75 65 3b 0a  _pattern.value;.
85ca0 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
85cb0 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  });..    /**... 
85cc0 2a 20 20 54 68 65 20 70 61 74 74 65 72 6e 20 74  *  The pattern t
85cd0 79 70 65 2e 20 53 65 65 20 54 6f 6e 65 2e 43 74  ype. See Tone.Ct
85ce0 72 6c 50 61 74 74 65 72 6e 20 66 6f 72 20 74 68  rlPattern for th
85cf0 65 20 66 75 6c 6c 20 6c 69 73 74 20 6f 66 20 70  e full list of p
85d00 61 74 74 65 72 6e 73 2e 0a 09 09 20 2a 20 20 40  atterns.... *  @
85d10 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 50 61  memberOf Tone.Pa
85d20 74 74 65 72 6e 23 0a 09 09 20 2a 20 20 40 74 79  ttern#... *  @ty
85d30 70 65 20 7b 53 74 72 69 6e 67 7d 0a 09 09 20 2a  pe {String}... *
85d40 20 20 40 6e 61 6d 65 20 70 61 74 74 65 72 6e 0a    @name pattern.
85d50 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63  .. */..    Objec
85d60 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79  t.defineProperty
85d70 28 54 6f 6e 65 2e 50 61 74 74 65 72 6e 2e 70 72  (Tone.Pattern.pr
85d80 6f 74 6f 74 79 70 65 2c 20 27 70 61 74 74 65 72  ototype, 'patter
85d90 6e 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67  n', {..        g
85da0 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  et: function () 
85db0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
85dc0 65 74 75 72 6e 20 74 68 69 73 2e 5f 70 61 74 74  eturn this._patt
85dd0 65 72 6e 2e 74 79 70 65 3b 0a 09 20 20 20 20 20  ern.type;..     
85de0 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73     },..        s
85df0 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 70 61  et: function (pa
85e00 74 74 65 72 6e 29 20 7b 0a 09 20 20 20 20 20 20  ttern) {..      
85e10 20 20 20 20 20 20 74 68 69 73 2e 5f 70 61 74 74        this._patt
85e20 65 72 6e 2e 74 79 70 65 20 3d 20 70 61 74 74 65  ern.type = patte
85e30 72 6e 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  rn;..        }..
85e40 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a      });..    /**
85e50 0a 09 09 20 2a 20 20 43 6c 65 61 6e 20 75 70 0a  ... *  Clean up.
85e60 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b  .. *  @return  {
85e70 54 6f 6e 65 2e 50 61 74 74 65 72 6e 7d 20 20 74  Tone.Pattern}  t
85e80 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  his... */..    T
85e90 6f 6e 65 2e 50 61 74 74 65 72 6e 2e 70 72 6f 74  one.Pattern.prot
85ea0 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20  otype.dispose = 
85eb0 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
85ec0 20 20 20 20 20 20 20 54 6f 6e 65 2e 4c 6f 6f 70         Tone.Loop
85ed0 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f  .prototype.dispo
85ee0 73 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09  se.call(this);..
85ef0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70 61          this._pa
85f00 74 74 65 72 6e 2e 64 69 73 70 6f 73 65 28 29 3b  ttern.dispose();
85f10 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
85f20 70 61 74 74 65 72 6e 20 3d 20 6e 75 6c 6c 3b 0a  pattern = null;.
85f30 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74  .    };..    ret
85f40 75 72 6e 20 54 6f 6e 65 2e 50 61 74 74 65 72 6e  urn Tone.Pattern
85f50 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66  ;..});..Module(f
85f60 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b  unction (Tone) {
85f70 0a 09 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a  ..    ..    /**.
85f80 09 09 20 2a 20 20 40 63 6c 61 73 73 20 41 20 73  .. *  @class A s
85f90 65 71 75 65 6e 63 65 20 69 73 20 61 6e 20 61 6c  equence is an al
85fa0 74 65 72 6e 61 74 65 20 6e 6f 74 61 74 69 6f 6e  ternate notation
85fb0 20 6f 66 20 61 20 70 61 72 74 2e 20 49 6e 73 74   of a part. Inst
85fc0 65 61 64 0a 09 09 20 2a 20 20 20 20 20 20 20 20  ead... *        
85fd0 20 6f 66 20 70 61 73 73 69 6e 67 20 69 6e 20 61   of passing in a
85fe0 6e 20 61 72 72 61 79 20 6f 66 20 5b 74 69 6d 65  n array of [time
85ff0 2c 20 65 76 65 6e 74 5d 20 70 61 69 72 73 2c 20  , event] pairs, 
86000 70 61 73 73 0a 09 09 20 2a 20 20 20 20 20 20 20  pass... *       
86010 20 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66    in an array of
86020 20 65 76 65 6e 74 73 20 77 68 69 63 68 20 77 69   events which wi
86030 6c 6c 20 62 65 20 73 70 61 63 65 64 20 61 74 20  ll be spaced at 
86040 74 68 65 0a 09 09 20 2a 20 20 20 20 20 20 20 20  the... *        
86050 20 67 69 76 65 6e 20 73 75 62 64 69 76 69 73 69   given subdivisi
86060 6f 6e 2e 20 53 75 62 2d 61 72 72 61 79 73 20 77  on. Sub-arrays w
86070 69 6c 6c 20 73 75 62 64 69 76 69 64 65 20 74 68  ill subdivide th
86080 61 74 20 62 65 61 74 0a 09 09 20 2a 20 20 20 20  at beat... *    
86090 20 20 20 20 20 62 79 20 74 68 65 20 6e 75 6d 62       by the numb
860a0 65 72 20 6f 66 20 69 74 65 6d 73 20 61 72 65 20  er of items are 
860b0 69 6e 20 74 68 65 20 61 72 72 61 79 2e 20 0a 09  in the array. ..
860c0 09 20 2a 20 20 20 20 20 20 20 20 20 53 65 71 75  . *         Sequ
860d0 65 6e 63 65 20 6e 6f 74 61 74 69 6f 6e 20 69 6e  ence notation in
860e0 73 70 69 72 61 74 69 6f 6e 20 66 72 6f 6d 20 5b  spiration from [
860f0 54 69 64 61 6c 5d 28 68 74 74 70 3a 2f 2f 79 61  Tidal](http://ya
86100 78 75 2e 6f 72 67 2f 74 69 64 61 6c 2f 29 0a 09  xu.org/tidal/)..
86110 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 46 75  . *  @param  {Fu
86120 6e 63 74 69 6f 6e 7d 20 20 63 61 6c 6c 62 61 63  nction}  callbac
86130 6b 20 20 54 68 65 20 63 61 6c 6c 62 61 63 6b 20  k  The callback 
86140 74 6f 20 69 6e 76 6f 6b 65 20 77 69 74 68 20 65  to invoke with e
86150 76 65 72 79 20 6e 6f 74 65 0a 09 09 20 2a 20 20  very note... *  
86160 40 70 61 72 61 6d 20 20 7b 41 72 72 61 79 7d 20  @param  {Array} 
86170 20 20 20 65 76 65 6e 74 73 20 20 54 68 65 20 73     events  The s
86180 65 71 75 65 6e 63 65 0a 09 09 20 2a 20 20 40 70  equence... *  @p
86190 61 72 61 6d 20 20 7b 54 69 6d 65 7d 20 73 75 62  aram  {Time} sub
861a0 64 69 76 69 73 69 6f 6e 20 20 54 68 65 20 73 75  division  The su
861b0 62 64 69 76 69 73 69 6f 6e 20 62 65 74 77 65 65  bdivision betwee
861c0 6e 20 77 68 69 63 68 20 65 76 65 6e 74 73 20 61  n which events a
861d0 72 65 20 70 6c 61 63 65 64 2e 20 0a 09 09 20 2a  re placed. ... *
861e0 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65    @extends {Tone
861f0 2e 50 61 72 74 7d 0a 09 09 20 2a 20 20 40 65 78  .Part}... *  @ex
86200 61 6d 70 6c 65 0a 09 09 20 2a 20 76 61 72 20 73  ample... * var s
86210 65 71 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53 65  eq = new Tone.Se
86220 71 75 65 6e 63 65 28 66 75 6e 63 74 69 6f 6e 28  quence(function(
86230 74 69 6d 65 2c 20 6e 6f 74 65 29 7b 0a 09 09 20  time, note){... 
86240 2a 20 09 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 6e  * .console.log(n
86250 6f 74 65 29 3b 0a 09 09 20 2a 20 2f 2f 73 74 72  ote);... * //str
86260 61 69 67 68 74 20 71 75 61 74 65 72 20 6e 6f 74  aight quater not
86270 65 73 0a 09 09 20 2a 20 7d 2c 20 5b 22 43 34 22  es... * }, ["C4"
86280 2c 20 22 45 34 22 2c 20 22 47 34 22 2c 20 22 41  , "E4", "G4", "A
86290 34 22 5d 2c 20 22 34 6e 22 29 3b 0a 09 09 20 2a  4"], "4n");... *
862a0 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20    @example... * 
862b0 76 61 72 20 73 65 71 20 3d 20 6e 65 77 20 54 6f  var seq = new To
862c0 6e 65 2e 53 65 71 75 65 6e 63 65 28 66 75 6e 63  ne.Sequence(func
862d0 74 69 6f 6e 28 74 69 6d 65 2c 20 6e 6f 74 65 29  tion(time, note)
862e0 7b 0a 09 09 20 2a 20 09 63 6f 6e 73 6f 6c 65 2e  {... * .console.
862f0 6c 6f 67 28 6e 6f 74 65 29 3b 0a 09 09 20 2a 20  log(note);... * 
86300 2f 2f 73 75 62 64 69 76 69 73 69 6f 6e 73 20 61  //subdivisions a
86310 72 65 20 67 69 76 65 6e 20 61 73 20 73 75 62 61  re given as suba
86320 72 72 61 79 73 0a 09 09 20 2a 20 7d 2c 20 5b 22  rrays... * }, ["
86330 43 34 22 2c 20 5b 22 45 34 22 2c 20 22 44 34 22  C4", ["E4", "D4"
86340 2c 20 22 45 34 22 5d 2c 20 22 47 34 22 2c 20 5b  , "E4"], "G4", [
86350 22 41 34 22 2c 20 22 47 34 22 5d 5d 29 3b 0a 09  "A4", "G4"]]);..
86360 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 53  . */..    Tone.S
86370 65 71 75 65 6e 63 65 20 3d 20 66 75 6e 63 74 69  equence = functi
86380 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
86390 20 76 61 72 20 6f 70 74 69 6f 6e 73 20 3d 20 74   var options = t
863a0 68 69 73 2e 6f 70 74 69 6f 6e 73 4f 62 6a 65 63  his.optionsObjec
863b0 74 28 61 72 67 75 6d 65 6e 74 73 2c 20 5b 0a 09  t(arguments, [..
863c0 20 20 20 20 20 20 20 20 20 20 20 20 27 63 61 6c              'cal
863d0 6c 62 61 63 6b 27 2c 0a 09 20 20 20 20 20 20 20  lback',..       
863e0 20 20 20 20 20 27 65 76 65 6e 74 73 27 2c 0a 09       'events',..
863f0 20 20 20 20 20 20 20 20 20 20 20 20 27 73 75 62              'sub
86400 64 69 76 69 73 69 6f 6e 27 0a 09 20 20 20 20 20  division'..     
86410 20 20 20 5d 2c 20 54 6f 6e 65 2e 53 65 71 75 65     ], Tone.Seque
86420 6e 63 65 2e 64 65 66 61 75 6c 74 73 29 3b 0a 09  nce.defaults);..
86430 20 20 20 20 20 20 20 20 2f 2f 72 65 6d 6f 76 65          //remove
86440 20 74 68 65 20 65 76 65 6e 74 73 0a 09 20 20 20   the events..   
86450 20 20 20 20 20 76 61 72 20 65 76 65 6e 74 73 20       var events 
86460 3d 20 6f 70 74 69 6f 6e 73 2e 65 76 65 6e 74 73  = options.events
86470 3b 0a 09 20 20 20 20 20 20 20 20 64 65 6c 65 74  ;..        delet
86480 65 20 6f 70 74 69 6f 6e 73 2e 65 76 65 6e 74 73  e options.events
86490 3b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e  ;..        Tone.
864a0 50 61 72 74 2e 63 61 6c 6c 28 74 68 69 73 2c 20  Part.call(this, 
864b0 6f 70 74 69 6f 6e 73 29 3b 0a 09 20 20 20 20 20  options);..     
864c0 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68     /**.... *  Th
864d0 65 20 73 75 62 64 69 76 69 73 6f 6e 20 6f 66 20  e subdivison of 
864e0 65 61 63 68 20 6e 6f 74 65 0a 09 09 09 20 2a 20  each note.... * 
864f0 20 40 74 79 70 65 20 20 7b 54 69 63 6b 73 7d 0a   @type  {Ticks}.
86500 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
86510 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
86520 74 68 69 73 2e 5f 73 75 62 64 69 76 69 73 69 6f  this._subdivisio
86530 6e 20 3d 20 74 68 69 73 2e 74 6f 54 69 63 6b 73  n = this.toTicks
86540 28 6f 70 74 69 6f 6e 73 2e 73 75 62 64 69 76 69  (options.subdivi
86550 73 69 6f 6e 29 3b 0a 09 20 20 20 20 20 20 20 20  sion);..        
86560 2f 2f 69 66 20 6e 6f 20 74 69 6d 65 20 77 61 73  //if no time was
86570 20 70 61 73 73 65 64 20 69 6e 2c 20 74 68 65 20   passed in, the 
86580 6c 6f 6f 70 20 65 6e 64 20 69 73 20 74 68 65 20  loop end is the 
86590 65 6e 64 20 6f 66 20 74 68 65 20 63 79 63 6c 65  end of the cycle
865a0 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 74 68  ..        if (th
865b0 69 73 2e 69 73 55 6e 64 65 66 28 6f 70 74 69 6f  is.isUndef(optio
865c0 6e 73 2e 6c 6f 6f 70 45 6e 64 29 20 26 26 20 21  ns.loopEnd) && !
865d0 74 68 69 73 2e 69 73 55 6e 64 65 66 28 65 76 65  this.isUndef(eve
865e0 6e 74 73 29 29 20 7b 0a 09 20 20 20 20 20 20 20  nts)) {..       
865f0 20 20 20 20 20 74 68 69 73 2e 5f 6c 6f 6f 70 45       this._loopE
86600 6e 64 20 3d 20 65 76 65 6e 74 73 2e 6c 65 6e 67  nd = events.leng
86610 74 68 20 2a 20 74 68 69 73 2e 5f 73 75 62 64 69  th * this._subdi
86620 76 69 73 69 6f 6e 3b 0a 09 20 20 20 20 20 20 20  vision;..       
86630 20 7d 0a 09 20 20 20 20 20 20 20 20 2f 2f 64 65   }..        //de
86640 66 61 75 6c 74 73 20 74 6f 20 6c 6f 6f 70 69 6e  faults to loopin
86650 67 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  g..        this.
86660 5f 6c 6f 6f 70 20 3d 20 74 72 75 65 3b 0a 09 20  _loop = true;.. 
86670 20 20 20 20 20 20 20 2f 2f 61 64 64 20 61 6c 6c         //add all
86680 20 6f 66 20 74 68 65 20 65 76 65 6e 74 73 0a 09   of the events..
86690 20 20 20 20 20 20 20 20 69 66 20 28 21 74 68 69          if (!thi
866a0 73 2e 69 73 55 6e 64 65 66 28 65 76 65 6e 74 73  s.isUndef(events
866b0 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  )) {..          
866c0 20 20 66 6f 72 20 28 76 61 72 20 69 20 3d 20 30    for (var i = 0
866d0 3b 20 69 20 3c 20 65 76 65 6e 74 73 2e 6c 65 6e  ; i < events.len
866e0 67 74 68 3b 20 69 2b 2b 29 20 7b 0a 09 20 20 20  gth; i++) {..   
866f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
86700 73 2e 61 64 64 28 69 2c 20 65 76 65 6e 74 73 5b  s.add(i, events[
86710 69 5d 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20  i]);..          
86720 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 0a 09    }..        }..
86730 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65      };..    Tone
86740 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 53 65 71  .extend(Tone.Seq
86750 75 65 6e 63 65 2c 20 54 6f 6e 65 2e 50 61 72 74  uence, Tone.Part
86760 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  );..    /**... *
86770 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61    The default va
86780 6c 75 65 73 2e 0a 09 09 20 2a 20 20 40 74 79 70  lues.... *  @typ
86790 65 20 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a  e  {Object}... *
867a0 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 53 65 71 75  /..    Tone.Sequ
867b0 65 6e 63 65 2e 64 65 66 61 75 6c 74 73 20 3d 20  ence.defaults = 
867c0 7b 20 27 73 75 62 64 69 76 69 73 69 6f 6e 27 3a  { 'subdivision':
867d0 20 27 34 6e 27 20 7d 3b 0a 09 20 20 20 20 2f 2a   '4n' };..    /*
867e0 2a 0a 09 09 20 2a 20 20 54 68 65 20 73 75 62 64  *... *  The subd
867f0 69 76 69 73 69 6f 6e 20 6f 66 20 74 68 65 20 73  ivision of the s
86800 65 71 75 65 6e 63 65 2e 20 54 68 69 73 20 63 61  equence. This ca
86810 6e 20 6f 6e 6c 79 20 62 65 20 0a 09 09 20 2a 20  n only be ... * 
86820 20 73 65 74 20 69 6e 20 74 68 65 20 63 6f 6e 73   set in the cons
86830 74 72 75 63 74 6f 72 2e 20 54 68 65 20 73 75 62  tructor. The sub
86840 64 69 76 69 73 69 6f 6e 20 69 73 20 74 68 65 20  division is the 
86850 0a 09 09 20 2a 20 20 69 6e 74 65 72 76 61 6c 20  ... *  interval 
86860 62 65 74 77 65 65 6e 20 73 75 63 63 65 73 73 69  between successi
86870 76 65 20 73 74 65 70 73 2e 20 0a 09 09 20 2a 20  ve steps. ... * 
86880 20 40 74 79 70 65 20 7b 54 69 6d 65 7d 0a 09 09   @type {Time}...
86890 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f   *  @memberOf To
868a0 6e 65 2e 53 65 71 75 65 6e 63 65 23 0a 09 09 20  ne.Sequence#... 
868b0 2a 20 20 40 6e 61 6d 65 20 73 75 62 64 69 76 69  *  @name subdivi
868c0 73 69 6f 6e 0a 09 09 20 2a 20 20 40 72 65 61 64  sion... *  @read
868d0 4f 6e 6c 79 0a 09 09 20 2a 2f 0a 09 20 20 20 20  Only... */..    
868e0 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f  Object.definePro
868f0 70 65 72 74 79 28 54 6f 6e 65 2e 53 65 71 75 65  perty(Tone.Seque
86900 6e 63 65 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27  nce.prototype, '
86910 73 75 62 64 69 76 69 73 69 6f 6e 27 2c 20 7b 0a  subdivision', {.
86920 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75  .        get: fu
86930 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
86940 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
86950 54 6f 6e 65 2e 54 69 6d 65 28 74 68 69 73 2e 5f  Tone.Time(this._
86960 73 75 62 64 69 76 69 73 69 6f 6e 2c 20 27 69 27  subdivision, 'i'
86970 29 2e 74 6f 4e 6f 74 61 74 69 6f 6e 28 29 3b 0a  ).toNotation();.
86980 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
86990 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  });..    /**... 
869a0 2a 20 20 47 65 74 2f 53 65 74 20 61 6e 20 69 6e  *  Get/Set an in
869b0 64 65 78 20 6f 66 20 74 68 65 20 73 65 71 75 65  dex of the seque
869c0 6e 63 65 2e 20 49 66 20 74 68 65 20 69 6e 64 65  nce. If the inde
869d0 78 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 75 62  x contains a sub
869e0 61 72 72 61 79 2c 20 0a 09 09 20 2a 20 20 61 20  array, ... *  a 
869f0 54 6f 6e 65 2e 53 65 71 75 65 6e 63 65 20 72 65  Tone.Sequence re
86a00 70 72 65 73 65 6e 74 69 6e 67 20 74 68 61 74 20  presenting that 
86a10 73 75 62 2d 61 72 72 61 79 20 77 69 6c 6c 20 62  sub-array will b
86a20 65 20 72 65 74 75 72 6e 65 64 2e 20 0a 09 09 20  e returned. ... 
86a30 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a  *  @example... *
86a40 20 76 61 72 20 73 65 71 75 65 6e 63 65 20 3d 20   var sequence = 
86a50 6e 65 77 20 54 6f 6e 65 2e 53 65 71 75 65 6e 63  new Tone.Sequenc
86a60 65 28 70 6c 61 79 4e 6f 74 65 2c 20 5b 22 45 34  e(playNote, ["E4
86a70 22 2c 20 22 43 34 22 2c 20 22 46 23 34 22 2c 20  ", "C4", "F#4", 
86a80 5b 22 41 34 22 2c 20 22 42 62 33 22 5d 5d 29 0a  ["A4", "Bb3"]]).
86a90 09 09 20 2a 20 73 65 71 75 65 6e 63 65 2e 61 74  .. * sequence.at
86aa0 28 30 29 2f 2f 20 3d 3e 20 72 65 74 75 72 6e 73  (0)// => returns
86ab0 20 22 45 34 22 0a 09 09 20 2a 20 2f 2f 73 65 74   "E4"... * //set
86ac0 20 61 20 76 61 6c 75 65 0a 09 09 20 2a 20 73 65   a value... * se
86ad0 71 75 65 6e 63 65 2e 61 74 28 30 2c 20 22 47 33  quence.at(0, "G3
86ae0 22 29 3b 0a 09 09 20 2a 20 2f 2f 67 65 74 20 61  ");... * //get a
86af0 20 6e 65 73 74 65 64 20 73 65 71 75 65 6e 63 65   nested sequence
86b00 0a 09 09 20 2a 20 73 65 71 75 65 6e 63 65 2e 61  ... * sequence.a
86b10 74 28 33 29 2e 61 74 28 31 29 2f 2f 20 3d 3e 20  t(3).at(1)// => 
86b20 72 65 74 75 72 6e 73 20 22 42 62 33 22 0a 09 09  returns "Bb3"...
86b30 20 2a 20 40 70 61 72 61 6d 20 7b 50 6f 73 69 74   * @param {Posit
86b40 69 76 65 7d 20 69 6e 64 65 78 20 54 68 65 20 69  ive} index The i
86b50 6e 64 65 78 20 74 6f 20 67 65 74 20 6f 72 20 73  ndex to get or s
86b60 65 74 0a 09 09 20 2a 20 40 70 61 72 61 6d 20 7b  et... * @param {
86b70 2a 7d 20 76 61 6c 75 65 20 4f 70 74 69 6f 6e 61  *} value Optiona
86b80 6c 6c 79 20 70 61 73 73 20 69 6e 20 74 68 65 20  lly pass in the 
86b90 76 61 6c 75 65 20 74 6f 20 73 65 74 20 61 74 20  value to set at 
86ba0 74 68 65 20 67 69 76 65 6e 20 69 6e 64 65 78 2e  the given index.
86bb0 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
86bc0 2e 53 65 71 75 65 6e 63 65 2e 70 72 6f 74 6f 74  .Sequence.protot
86bd0 79 70 65 2e 61 74 20 3d 20 66 75 6e 63 74 69 6f  ype.at = functio
86be0 6e 20 28 69 6e 64 65 78 2c 20 76 61 6c 75 65 29  n (index, value)
86bf0 20 7b 0a 09 20 20 20 20 20 20 20 20 2f 2f 69 66   {..        //if
86c00 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 61 6e   the value is an
86c10 20 61 72 72 61 79 2c 20 0a 09 20 20 20 20 20 20   array, ..      
86c20 20 20 69 66 20 28 74 68 69 73 2e 69 73 41 72 72    if (this.isArr
86c30 61 79 28 76 61 6c 75 65 29 29 20 7b 0a 09 20 20  ay(value)) {..  
86c40 20 20 20 20 20 20 20 20 20 20 2f 2f 72 65 6d 6f            //remo
86c50 76 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 65  ve the current e
86c60 76 65 6e 74 20 61 74 20 74 68 61 74 20 69 6e 64  vent at that ind
86c70 65 78 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ex..            
86c80 74 68 69 73 2e 72 65 6d 6f 76 65 28 69 6e 64 65  this.remove(inde
86c90 78 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  x);..        }..
86ca0 20 20 20 20 20 20 20 20 2f 2f 63 61 6c 6c 20 74          //call t
86cb0 68 65 20 70 61 72 65 6e 74 27 73 20 6d 65 74 68  he parent's meth
86cc0 6f 64 0a 09 20 20 20 20 20 20 20 20 72 65 74 75  od..        retu
86cd0 72 6e 20 54 6f 6e 65 2e 50 61 72 74 2e 70 72 6f  rn Tone.Part.pro
86ce0 74 6f 74 79 70 65 2e 61 74 2e 63 61 6c 6c 28 74  totype.at.call(t
86cf0 68 69 73 2c 20 74 68 69 73 2e 5f 69 6e 64 65 78  his, this._index
86d00 54 69 6d 65 28 69 6e 64 65 78 29 2c 20 76 61 6c  Time(index), val
86d10 75 65 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  ue);..    };..  
86d20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 41 64 64 20    /**... *  Add 
86d30 61 6e 20 65 76 65 6e 74 20 61 74 20 61 6e 20 69  an event at an i
86d40 6e 64 65 78 2c 20 69 66 20 74 68 65 72 65 27 73  ndex, if there's
86d50 20 61 6c 72 65 61 64 79 20 73 6f 6d 65 74 68 69   already somethi
86d60 6e 67 0a 09 09 20 2a 20 20 61 74 20 74 68 61 74  ng... *  at that
86d70 20 69 6e 64 65 78 2c 20 6f 76 65 72 77 72 69 74   index, overwrit
86d80 65 20 69 74 2e 20 49 66 20 60 76 61 6c 75 65 60  e it. If `value`
86d90 20 69 73 20 61 6e 20 61 72 72 61 79 2c 20 0a 09   is an array, ..
86da0 09 20 2a 20 20 69 74 20 77 69 6c 6c 20 62 65 20  . *  it will be 
86db0 70 61 72 73 65 64 20 61 73 20 61 20 73 75 62 73  parsed as a subs
86dc0 65 71 75 65 6e 63 65 2e 0a 09 09 20 2a 20 20 40  equence.... *  @
86dd0 70 61 72 61 6d 20 7b 4e 75 6d 62 65 72 7d 20 69  param {Number} i
86de0 6e 64 65 78 20 54 68 65 20 69 6e 64 65 78 20 74  ndex The index t
86df0 6f 20 61 64 64 20 74 68 65 20 65 76 65 6e 74 20  o add the event 
86e00 74 6f 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  to... *  @param 
86e10 7b 2a 7d 20 76 61 6c 75 65 20 54 68 65 20 76 61  {*} value The va
86e20 6c 75 65 20 74 6f 20 61 64 64 20 61 74 20 74 68  lue to add at th
86e30 61 74 20 69 6e 64 65 78 0a 09 09 20 2a 20 20 40  at index... *  @
86e40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 53 65  returns {Tone.Se
86e50 71 75 65 6e 63 65 7d 20 74 68 69 73 0a 09 09 20  quence} this... 
86e60 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 53 65 71  */..    Tone.Seq
86e70 75 65 6e 63 65 2e 70 72 6f 74 6f 74 79 70 65 2e  uence.prototype.
86e80 61 64 64 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  add = function (
86e90 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 20 7b 0a  index, value) {.
86ea0 09 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c  .        if (val
86eb0 75 65 20 3d 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 09  ue === null) {..
86ec0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
86ed0 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 20 20  rn this;..      
86ee0 20 20 7d 0a 09 20 20 20 20 20 20 20 20 69 66 20    }..        if 
86ef0 28 74 68 69 73 2e 69 73 41 72 72 61 79 28 76 61  (this.isArray(va
86f00 6c 75 65 29 29 20 7b 0a 09 20 20 20 20 20 20 20  lue)) {..       
86f10 20 20 20 20 20 2f 2f 6d 61 6b 65 20 61 20 73 75       //make a su
86f20 62 73 65 71 75 65 6e 63 65 20 61 6e 64 20 61 64  bsequence and ad
86f30 64 20 74 68 61 74 20 74 6f 20 74 68 65 20 73 65  d that to the se
86f40 71 75 65 6e 63 65 0a 09 20 20 20 20 20 20 20 20  quence..        
86f50 20 20 20 20 76 61 72 20 73 75 62 53 75 62 64 69      var subSubdi
86f60 76 69 73 69 6f 6e 20 3d 20 4d 61 74 68 2e 72 6f  vision = Math.ro
86f70 75 6e 64 28 74 68 69 73 2e 5f 73 75 62 64 69 76  und(this._subdiv
86f80 69 73 69 6f 6e 20 2f 20 76 61 6c 75 65 2e 6c 65  ision / value.le
86f90 6e 67 74 68 29 3b 0a 09 20 20 20 20 20 20 20 20  ngth);..        
86fa0 20 20 20 20 76 61 6c 75 65 20 3d 20 6e 65 77 20      value = new 
86fb0 54 6f 6e 65 2e 53 65 71 75 65 6e 63 65 28 74 68  Tone.Sequence(th
86fc0 69 73 2e 5f 74 69 63 6b 2e 62 69 6e 64 28 74 68  is._tick.bind(th
86fd0 69 73 29 2c 20 76 61 6c 75 65 2c 20 54 6f 6e 65  is), value, Tone
86fe0 2e 54 69 6d 65 28 73 75 62 53 75 62 64 69 76 69  .Time(subSubdivi
86ff0 73 69 6f 6e 2c 20 27 69 27 29 29 3b 0a 09 20 20  sion, 'i'));..  
87000 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
87010 20 54 6f 6e 65 2e 50 61 72 74 2e 70 72 6f 74 6f   Tone.Part.proto
87020 74 79 70 65 2e 61 64 64 2e 63 61 6c 6c 28 74 68  type.add.call(th
87030 69 73 2c 20 74 68 69 73 2e 5f 69 6e 64 65 78 54  is, this._indexT
87040 69 6d 65 28 69 6e 64 65 78 29 2c 20 76 61 6c 75  ime(index), valu
87050 65 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74  e);..        ret
87060 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
87070 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
87080 20 52 65 6d 6f 76 65 20 61 20 76 61 6c 75 65 20   Remove a value 
87090 66 72 6f 6d 20 74 68 65 20 73 65 71 75 65 6e 63  from the sequenc
870a0 65 20 62 79 20 69 6e 64 65 78 0a 09 09 20 2a 20  e by index... * 
870b0 20 40 70 61 72 61 6d 20 7b 4e 75 6d 62 65 72 7d   @param {Number}
870c0 20 69 6e 64 65 78 20 54 68 65 20 69 6e 64 65 78   index The index
870d0 20 6f 66 20 74 68 65 20 65 76 65 6e 74 20 74 6f   of the event to
870e0 20 72 65 6d 6f 76 65 0a 09 09 20 2a 20 20 40 72   remove... *  @r
870f0 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 53 65 71  eturns {Tone.Seq
87100 75 65 6e 63 65 7d 20 74 68 69 73 0a 09 09 20 2a  uence} this... *
87110 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 53 65 71 75  /..    Tone.Sequ
87120 65 6e 63 65 2e 70 72 6f 74 6f 74 79 70 65 2e 72  ence.prototype.r
87130 65 6d 6f 76 65 20 3d 20 66 75 6e 63 74 69 6f 6e  emove = function
87140 20 28 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 20   (index, value) 
87150 7b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e  {..        Tone.
87160 50 61 72 74 2e 70 72 6f 74 6f 74 79 70 65 2e 72  Part.prototype.r
87170 65 6d 6f 76 65 2e 63 61 6c 6c 28 74 68 69 73 2c  emove.call(this,
87180 20 74 68 69 73 2e 5f 69 6e 64 65 78 54 69 6d 65   this._indexTime
87190 28 69 6e 64 65 78 29 2c 20 76 61 6c 75 65 29 3b  (index), value);
871a0 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
871b0 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09   this;..    };..
871c0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 47 65      /**... *  Ge
871d0 74 20 74 68 65 20 74 69 6d 65 20 6f 66 20 74 68  t the time of th
871e0 65 20 69 6e 64 65 78 20 67 69 76 65 6e 20 74 68  e index given th
871f0 65 20 53 65 71 75 65 6e 63 65 27 73 20 73 75 62  e Sequence's sub
87200 64 69 76 69 73 69 6f 6e 0a 09 09 20 2a 20 20 40  division... *  @
87210 70 61 72 61 6d 20 20 7b 4e 75 6d 62 65 72 7d 20  param  {Number} 
87220 20 69 6e 64 65 78 20 0a 09 09 20 2a 20 20 40 72   index ... *  @r
87230 65 74 75 72 6e 20 20 7b 54 69 6d 65 7d 20 20 54  eturn  {Time}  T
87240 68 65 20 74 69 6d 65 20 6f 66 20 74 68 61 74 20  he time of that 
87250 69 6e 64 65 78 0a 09 09 20 2a 20 20 40 70 72 69  index... *  @pri
87260 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20  vate... */..    
87270 54 6f 6e 65 2e 53 65 71 75 65 6e 63 65 2e 70 72  Tone.Sequence.pr
87280 6f 74 6f 74 79 70 65 2e 5f 69 6e 64 65 78 54 69  ototype._indexTi
87290 6d 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 69  me = function (i
872a0 6e 64 65 78 29 20 7b 0a 09 20 20 20 20 20 20 20  ndex) {..       
872b0 20 69 66 20 28 69 6e 64 65 78 20 69 6e 73 74 61   if (index insta
872c0 6e 63 65 6f 66 20 54 6f 6e 65 2e 54 72 61 6e 73  nceof Tone.Trans
872d0 70 6f 72 74 54 69 6d 65 29 20 7b 0a 09 20 20 20  portTime) {..   
872e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
872f0 69 6e 64 65 78 3b 0a 09 20 20 20 20 20 20 20 20  index;..        
87300 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20  } else {..      
87310 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e        return Ton
87320 65 2e 54 72 61 6e 73 70 6f 72 74 54 69 6d 65 28  e.TransportTime(
87330 69 6e 64 65 78 20 2a 20 74 68 69 73 2e 5f 73 75  index * this._su
87340 62 64 69 76 69 73 69 6f 6e 20 2b 20 74 68 69 73  bdivision + this
87350 2e 73 74 61 72 74 4f 66 66 73 65 74 2c 20 27 69  .startOffset, 'i
87360 27 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  ');..        }..
87370 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
87380 09 09 20 2a 20 20 43 6c 65 61 6e 20 75 70 2e 0a  .. *  Clean up..
87390 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 7b 54  .. *  @return {T
873a0 6f 6e 65 2e 53 65 71 75 65 6e 63 65 7d 20 74 68  one.Sequence} th
873b0 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  is... */..    To
873c0 6e 65 2e 53 65 71 75 65 6e 63 65 2e 70 72 6f 74  ne.Sequence.prot
873d0 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20  otype.dispose = 
873e0 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
873f0 20 20 20 20 20 20 20 54 6f 6e 65 2e 50 61 72 74         Tone.Part
87400 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f  .prototype.dispo
87410 73 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09  se.call(this);..
87420 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
87430 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  his;..    };..  
87440 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 53 65    return Tone.Se
87450 71 75 65 6e 63 65 3b 0a 09 7d 29 3b 0a 09 4d 6f  quence;..});..Mo
87460 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28 54  dule(function (T
87470 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09 20 20  one) {..    ..  
87480 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61    /**... *  @cla
87490 73 73 20 54 6f 6e 65 2e 50 75 6c 73 65 4f 73 63  ss Tone.PulseOsc
874a0 69 6c 6c 61 74 6f 72 20 69 73 20 61 20 70 75 6c  illator is a pul
874b0 73 65 20 6f 73 63 69 6c 6c 61 74 6f 72 20 77 69  se oscillator wi
874c0 74 68 20 63 6f 6e 74 72 6f 6c 20 6f 76 65 72 20  th control over 
874d0 70 75 6c 73 65 20 77 69 64 74 68 2c 0a 09 09 20  pulse width,... 
874e0 2a 20 20 20 20 20 20 20 20 20 61 6c 73 6f 20 6b  *         also k
874f0 6e 6f 77 6e 20 61 73 20 74 68 65 20 64 75 74 79  nown as the duty
87500 20 63 79 63 6c 65 2e 20 41 74 20 35 30 25 20 64   cycle. At 50% d
87510 75 74 79 20 63 79 63 6c 65 20 28 77 69 64 74 68  uty cycle (width
87520 20 3d 20 30 2e 35 29 20 74 68 65 20 77 61 76 65   = 0.5) the wave
87530 20 69 73 20 0a 09 09 20 2a 20 20 20 20 20 20 20   is ... *       
87540 20 20 61 20 73 71 75 61 72 65 20 61 6e 64 20 6f    a square and o
87550 6e 6c 79 20 6f 64 64 2d 6e 75 6d 62 65 72 65 64  nly odd-numbered
87560 20 68 61 72 6d 6f 6e 69 63 73 20 61 72 65 20 70   harmonics are p
87570 72 65 73 65 6e 74 2e 20 41 74 20 61 6c 6c 20 6f  resent. At all o
87580 74 68 65 72 20 77 69 64 74 68 73 20 0a 09 09 20  ther widths ... 
87590 2a 20 20 20 20 20 20 20 20 20 65 76 65 6e 2d 6e  *         even-n
875a0 75 6d 62 65 72 65 64 20 68 61 72 6d 6f 6e 69 63  umbered harmonic
875b0 73 20 61 72 65 20 70 72 65 73 65 6e 74 2e 20 52  s are present. R
875c0 65 61 64 20 6d 6f 72 65 20 0a 09 09 20 2a 20 20  ead more ... *  
875d0 20 20 20 20 20 20 20 5b 68 65 72 65 5d 28 68 74         [here](ht
875e0 74 70 73 3a 2f 2f 77 69 67 67 6c 65 77 61 76 65  tps://wigglewave
875f0 2e 77 6f 72 64 70 72 65 73 73 2e 63 6f 6d 2f 32  .wordpress.com/2
87600 30 31 34 2f 30 38 2f 31 36 2f 70 75 6c 73 65 2d  014/08/16/pulse-
87610 77 61 76 65 66 6f 72 6d 73 2d 61 6e 64 2d 68 61  waveforms-and-ha
87620 72 6d 6f 6e 69 63 73 2f 29 2e 0a 09 09 20 2a 0a  rmonics/).... *.
87630 09 09 20 2a 20 20 40 63 6f 6e 73 74 72 75 63 74  .. *  @construct
87640 6f 72 0a 09 09 20 2a 20 20 40 65 78 74 65 6e 64  or... *  @extend
87650 73 20 7b 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74  s {Tone.Oscillat
87660 6f 72 7d 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  or}... *  @param
87670 20 7b 46 72 65 71 75 65 6e 63 79 7d 20 5b 66 72   {Frequency} [fr
87680 65 71 75 65 6e 63 79 5d 20 54 68 65 20 66 72 65  equency] The fre
87690 71 75 65 6e 63 79 20 6f 66 20 74 68 65 20 6f 73  quency of the os
876a0 63 69 6c 6c 61 74 6f 72 0a 09 09 20 2a 20 20 40  cillator... *  @
876b0 70 61 72 61 6d 20 7b 4e 6f 72 6d 61 6c 52 61 6e  param {NormalRan
876c0 67 65 7d 20 5b 77 69 64 74 68 5d 20 54 68 65 20  ge} [width] The 
876d0 77 69 64 74 68 20 6f 66 20 74 68 65 20 70 75 6c  width of the pul
876e0 73 65 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c  se... *  @exampl
876f0 65 0a 09 09 20 2a 20 76 61 72 20 70 75 6c 73 65  e... * var pulse
87700 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 50 75 6c 73   = new Tone.Puls
87710 65 4f 73 63 69 6c 6c 61 74 6f 72 28 22 45 35 22  eOscillator("E5"
87720 2c 20 30 2e 34 29 2e 74 6f 4d 61 73 74 65 72 28  , 0.4).toMaster(
87730 29 2e 73 74 61 72 74 28 29 3b 0a 09 09 20 2a 2f  ).start();... */
87740 0a 09 20 20 20 20 54 6f 6e 65 2e 50 75 6c 73 65  ..    Tone.Pulse
87750 4f 73 63 69 6c 6c 61 74 6f 72 20 3d 20 66 75 6e  Oscillator = fun
87760 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
87770 20 20 20 20 76 61 72 20 6f 70 74 69 6f 6e 73 20      var options 
87780 3d 20 74 68 69 73 2e 6f 70 74 69 6f 6e 73 4f 62  = this.optionsOb
87790 6a 65 63 74 28 61 72 67 75 6d 65 6e 74 73 2c 20  ject(arguments, 
877a0 5b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  [..            '
877b0 66 72 65 71 75 65 6e 63 79 27 2c 0a 09 20 20 20  frequency',..   
877c0 20 20 20 20 20 20 20 20 20 27 77 69 64 74 68 27           'width'
877d0 0a 09 20 20 20 20 20 20 20 20 5d 2c 20 54 6f 6e  ..        ], Ton
877e0 65 2e 4f 73 63 69 6c 6c 61 74 6f 72 2e 64 65 66  e.Oscillator.def
877f0 61 75 6c 74 73 29 3b 0a 09 20 20 20 20 20 20 20  aults);..       
87800 20 54 6f 6e 65 2e 53 6f 75 72 63 65 2e 63 61 6c   Tone.Source.cal
87810 6c 28 74 68 69 73 2c 20 6f 70 74 69 6f 6e 73 29  l(this, options)
87820 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
87830 09 09 20 2a 20 20 54 68 65 20 77 69 64 74 68 20  .. *  The width 
87840 6f 66 20 74 68 65 20 70 75 6c 73 65 2e 20 0a 09  of the pulse. ..
87850 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4e 6f 72  .. *  @type {Nor
87860 6d 61 6c 52 61 6e 67 65 7d 0a 09 09 09 20 2a 20  malRange}.... * 
87870 20 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f 0a   @signal.... */.
87880 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 77 69  .        this.wi
87890 64 74 68 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53  dth = new Tone.S
878a0 69 67 6e 61 6c 28 6f 70 74 69 6f 6e 73 2e 77 69  ignal(options.wi
878b0 64 74 68 2c 20 54 6f 6e 65 2e 54 79 70 65 2e 4e  dth, Tone.Type.N
878c0 6f 72 6d 61 6c 52 61 6e 67 65 29 3b 0a 09 20 20  ormalRange);..  
878d0 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
878e0 20 67 61 74 65 20 74 68 65 20 77 69 64 74 68 20   gate the width 
878f0 61 6d 6f 75 6e 74 0a 09 09 09 20 2a 20 20 40 74  amount.... *  @t
87900 79 70 65 20 7b 54 6f 6e 65 2e 47 61 69 6e 7d 0a  ype {Tone.Gain}.
87910 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
87920 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
87930 74 68 69 73 2e 5f 77 69 64 74 68 47 61 74 65 20  this._widthGate 
87940 3d 20 6e 65 77 20 54 6f 6e 65 2e 47 61 69 6e 28  = new Tone.Gain(
87950 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
87960 09 09 09 20 2a 20 20 74 68 65 20 73 61 77 74 6f  ... *  the sawto
87970 6f 74 68 20 6f 73 63 69 6c 6c 61 74 6f 72 0a 09  oth oscillator..
87980 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e  .. *  @type {Ton
87990 65 2e 4f 73 63 69 6c 6c 61 74 6f 72 7d 0a 09 09  e.Oscillator}...
879a0 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
879b0 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
879c0 69 73 2e 5f 73 61 77 74 6f 6f 74 68 20 3d 20 6e  is._sawtooth = n
879d0 65 77 20 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74  ew Tone.Oscillat
879e0 6f 72 28 7b 0a 09 20 20 20 20 20 20 20 20 20 20  or({..          
879f0 20 20 66 72 65 71 75 65 6e 63 79 3a 20 6f 70 74    frequency: opt
87a00 69 6f 6e 73 2e 66 72 65 71 75 65 6e 63 79 2c 0a  ions.frequency,.
87a10 09 20 20 20 20 20 20 20 20 20 20 20 20 64 65 74  .            det
87a20 75 6e 65 3a 20 6f 70 74 69 6f 6e 73 2e 64 65 74  une: options.det
87a30 75 6e 65 2c 0a 09 20 20 20 20 20 20 20 20 20 20  une,..          
87a40 20 20 74 79 70 65 3a 20 27 73 61 77 74 6f 6f 74    type: 'sawtoot
87a50 68 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  h',..           
87a60 20 70 68 61 73 65 3a 20 6f 70 74 69 6f 6e 73 2e   phase: options.
87a70 70 68 61 73 65 0a 09 20 20 20 20 20 20 20 20 7d  phase..        }
87a80 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
87a90 09 09 09 20 2a 20 20 54 68 65 20 66 72 65 71 75  ... *  The frequ
87aa0 65 6e 63 79 20 63 6f 6e 74 72 6f 6c 2e 0a 09 09  ency control....
87ab0 09 20 2a 20 20 40 74 79 70 65 20 7b 46 72 65 71  . *  @type {Freq
87ac0 75 65 6e 63 79 7d 0a 09 09 09 20 2a 20 20 40 73  uency}.... *  @s
87ad0 69 67 6e 61 6c 0a 09 09 09 20 2a 2f 0a 09 20 20  ignal.... */..  
87ae0 20 20 20 20 20 20 74 68 69 73 2e 66 72 65 71 75        this.frequ
87af0 65 6e 63 79 20 3d 20 74 68 69 73 2e 5f 73 61 77  ency = this._saw
87b00 74 6f 6f 74 68 2e 66 72 65 71 75 65 6e 63 79 3b  tooth.frequency;
87b10 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
87b20 09 20 2a 20 20 54 68 65 20 64 65 74 75 6e 65 20  . *  The detune 
87b30 69 6e 20 63 65 6e 74 73 2e 20 0a 09 09 09 20 2a  in cents. .... *
87b40 20 20 40 74 79 70 65 20 7b 43 65 6e 74 73 7d 0a    @type {Cents}.
87b50 09 09 09 20 2a 20 20 40 73 69 67 6e 61 6c 0a 09  ... *  @signal..
87b60 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
87b70 68 69 73 2e 64 65 74 75 6e 65 20 3d 20 74 68 69  his.detune = thi
87b80 73 2e 5f 73 61 77 74 6f 6f 74 68 2e 64 65 74 75  s._sawtooth.detu
87b90 6e 65 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  ne;..        /**
87ba0 0a 09 09 09 20 2a 20 20 54 68 72 65 73 68 6f 6c  .... *  Threshol
87bb0 64 20 74 68 65 20 73 69 67 6e 61 6c 20 74 6f 20  d the signal to 
87bc0 74 75 72 6e 20 69 74 20 69 6e 74 6f 20 61 20 73  turn it into a s
87bd0 71 75 61 72 65 0a 09 09 09 20 2a 20 20 40 74 79  quare.... *  @ty
87be0 70 65 20 7b 54 6f 6e 65 2e 57 61 76 65 53 68 61  pe {Tone.WaveSha
87bf0 70 65 72 7d 0a 09 09 09 20 2a 20 20 40 70 72 69  per}.... *  @pri
87c00 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20  vate.... */..   
87c10 20 20 20 20 20 74 68 69 73 2e 5f 74 68 72 65 73       this._thres
87c20 68 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 57 61 76  h = new Tone.Wav
87c30 65 53 68 61 70 65 72 28 66 75 6e 63 74 69 6f 6e  eShaper(function
87c40 20 28 76 61 6c 29 20 7b 0a 09 20 20 20 20 20 20   (val) {..      
87c50 20 20 20 20 20 20 69 66 20 28 76 61 6c 20 3c 20        if (val < 
87c60 30 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  0) {..          
87c70 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b        return -1;
87c80 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  ..            } 
87c90 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20  else {..        
87ca0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31          return 1
87cb0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
87cc0 0a 09 20 20 20 20 20 20 20 20 7d 29 3b 0a 09 20  ..        });.. 
87cd0 20 20 20 20 20 20 20 2f 2f 63 6f 6e 6e 65 63 74         //connect
87ce0 69 6f 6e 73 0a 09 20 20 20 20 20 20 20 20 74 68  ions..        th
87cf0 69 73 2e 5f 73 61 77 74 6f 6f 74 68 2e 63 68 61  is._sawtooth.cha
87d00 69 6e 28 74 68 69 73 2e 5f 74 68 72 65 73 68 2c  in(this._thresh,
87d10 20 74 68 69 73 2e 6f 75 74 70 75 74 29 3b 0a 09   this.output);..
87d20 20 20 20 20 20 20 20 20 74 68 69 73 2e 77 69 64          this.wid
87d30 74 68 2e 63 68 61 69 6e 28 74 68 69 73 2e 5f 77  th.chain(this._w
87d40 69 64 74 68 47 61 74 65 2c 20 74 68 69 73 2e 5f  idthGate, this._
87d50 74 68 72 65 73 68 29 3b 0a 09 20 20 20 20 20 20  thresh);..      
87d60 20 20 74 68 69 73 2e 5f 72 65 61 64 4f 6e 6c 79    this._readOnly
87d70 28 5b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ([..            
87d80 27 77 69 64 74 68 27 2c 0a 09 20 20 20 20 20 20  'width',..      
87d90 20 20 20 20 20 20 27 66 72 65 71 75 65 6e 63 79        'frequency
87da0 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ',..            
87db0 27 64 65 74 75 6e 65 27 0a 09 20 20 20 20 20 20  'detune'..      
87dc0 20 20 5d 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20    ]);..    };.. 
87dd0 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54     Tone.extend(T
87de0 6f 6e 65 2e 50 75 6c 73 65 4f 73 63 69 6c 6c 61  one.PulseOscilla
87df0 74 6f 72 2c 20 54 6f 6e 65 2e 4f 73 63 69 6c 6c  tor, Tone.Oscill
87e00 61 74 6f 72 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a  ator);..    /**.
87e10 09 09 20 2a 20 20 54 68 65 20 64 65 66 61 75 6c  .. *  The defaul
87e20 74 20 70 61 72 61 6d 65 74 65 72 73 2e 0a 09 09  t parameters....
87e30 20 2a 20 20 40 73 74 61 74 69 63 0a 09 09 20 2a   *  @static... *
87e40 20 20 40 63 6f 6e 73 74 0a 09 09 20 2a 20 20 40    @const... *  @
87e50 74 79 70 65 20 7b 4f 62 6a 65 63 74 7d 0a 09 09  type {Object}...
87e60 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50 75   */..    Tone.Pu
87e70 6c 73 65 4f 73 63 69 6c 6c 61 74 6f 72 2e 64 65  lseOscillator.de
87e80 66 61 75 6c 74 73 20 3d 20 7b 0a 09 20 20 20 20  faults = {..    
87e90 20 20 20 20 27 66 72 65 71 75 65 6e 63 79 27 3a      'frequency':
87ea0 20 34 34 30 2c 0a 09 20 20 20 20 20 20 20 20 27   440,..        '
87eb0 64 65 74 75 6e 65 27 3a 20 30 2c 0a 09 20 20 20  detune': 0,..   
87ec0 20 20 20 20 20 27 70 68 61 73 65 27 3a 20 30 2c       'phase': 0,
87ed0 0a 09 20 20 20 20 20 20 20 20 27 77 69 64 74 68  ..        'width
87ee0 27 3a 20 30 2e 32 0a 09 20 20 20 20 7d 3b 0a 09  ': 0.2..    };..
87ef0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 73 74      /**... *  st
87f00 61 72 74 20 74 68 65 20 6f 73 63 69 6c 6c 61 74  art the oscillat
87f10 6f 72 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  or... *  @param 
87f20 20 7b 54 69 6d 65 7d 20 74 69 6d 65 20 0a 09 09   {Time} time ...
87f30 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 20   *  @private... 
87f40 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50 75 6c  */..    Tone.Pul
87f50 73 65 4f 73 63 69 6c 6c 61 74 6f 72 2e 70 72 6f  seOscillator.pro
87f60 74 6f 74 79 70 65 2e 5f 73 74 61 72 74 20 3d 20  totype._start = 
87f70 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65 29 20  function (time) 
87f80 7b 0a 09 20 20 20 20 20 20 20 20 74 69 6d 65 20  {..        time 
87f90 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73  = this.toSeconds
87fa0 28 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20  (time);..       
87fb0 20 74 68 69 73 2e 5f 73 61 77 74 6f 6f 74 68 2e   this._sawtooth.
87fc0 73 74 61 72 74 28 74 69 6d 65 29 3b 0a 09 20 20  start(time);..  
87fd0 20 20 20 20 20 20 74 68 69 73 2e 5f 77 69 64 74        this._widt
87fe0 68 47 61 74 65 2e 67 61 69 6e 2e 73 65 74 56 61  hGate.gain.setVa
87ff0 6c 75 65 41 74 54 69 6d 65 28 31 2c 20 74 69 6d  lueAtTime(1, tim
88000 65 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  e);..    };..   
88010 20 2f 2a 2a 0a 09 09 20 2a 20 20 73 74 6f 70 20   /**... *  stop 
88020 74 68 65 20 6f 73 63 69 6c 6c 61 74 6f 72 0a 09  the oscillator..
88030 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 54 69  . *  @param  {Ti
88040 6d 65 7d 20 74 69 6d 65 20 0a 09 09 20 2a 20 20  me} time ... *  
88050 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09  @private... */..
88060 20 20 20 20 54 6f 6e 65 2e 50 75 6c 73 65 4f 73      Tone.PulseOs
88070 63 69 6c 6c 61 74 6f 72 2e 70 72 6f 74 6f 74 79  cillator.prototy
88080 70 65 2e 5f 73 74 6f 70 20 3d 20 66 75 6e 63 74  pe._stop = funct
88090 69 6f 6e 20 28 74 69 6d 65 29 20 7b 0a 09 20 20  ion (time) {..  
880a0 20 20 20 20 20 20 74 69 6d 65 20 3d 20 74 68 69        time = thi
880b0 73 2e 74 6f 53 65 63 6f 6e 64 73 28 74 69 6d 65  s.toSeconds(time
880c0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
880d0 2e 5f 73 61 77 74 6f 6f 74 68 2e 73 74 6f 70 28  ._sawtooth.stop(
880e0 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20  time);..        
880f0 2f 2f 74 68 65 20 77 69 64 74 68 20 69 73 20 73  //the width is s
88100 74 69 6c 6c 20 63 6f 6e 6e 65 63 74 65 64 20 74  till connected t
88110 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 20 0a 09  o the output. ..
88120 20 20 20 20 20 20 20 20 2f 2f 74 68 61 74 20 6e          //that n
88130 65 65 64 73 20 74 6f 20 62 65 20 73 74 6f 70 70  eeds to be stopp
88140 65 64 20 61 6c 73 6f 0a 09 20 20 20 20 20 20 20  ed also..       
88150 20 74 68 69 73 2e 5f 77 69 64 74 68 47 61 74 65   this._widthGate
88160 2e 67 61 69 6e 2e 73 65 74 56 61 6c 75 65 41 74  .gain.setValueAt
88170 54 69 6d 65 28 30 2c 20 74 69 6d 65 29 3b 0a 09  Time(0, time);..
88180 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
88190 09 09 20 2a 20 54 68 65 20 70 68 61 73 65 20 6f  .. * The phase o
881a0 66 20 74 68 65 20 6f 73 63 69 6c 6c 61 74 6f 72  f the oscillator
881b0 20 69 6e 20 64 65 67 72 65 65 73 2e 0a 09 09 20   in degrees.... 
881c0 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65  * @memberOf Tone
881d0 2e 50 75 6c 73 65 4f 73 63 69 6c 6c 61 74 6f 72  .PulseOscillator
881e0 23 0a 09 09 20 2a 20 40 74 79 70 65 20 7b 44 65  #... * @type {De
881f0 67 72 65 65 73 7d 0a 09 09 20 2a 20 40 6e 61 6d  grees}... * @nam
88200 65 20 70 68 61 73 65 0a 09 09 20 2a 2f 0a 09 20  e phase... */.. 
88210 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65     Object.define
88220 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 50 75  Property(Tone.Pu
88230 6c 73 65 4f 73 63 69 6c 6c 61 74 6f 72 2e 70 72  lseOscillator.pr
88240 6f 74 6f 74 79 70 65 2c 20 27 70 68 61 73 65 27  ototype, 'phase'
88250 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74  , {..        get
88260 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  : function () {.
88270 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
88280 75 72 6e 20 74 68 69 73 2e 5f 73 61 77 74 6f 6f  urn this._sawtoo
88290 74 68 2e 70 68 61 73 65 3b 0a 09 20 20 20 20 20  th.phase;..     
882a0 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73     },..        s
882b0 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 70 68  et: function (ph
882c0 61 73 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ase) {..        
882d0 20 20 20 20 74 68 69 73 2e 5f 73 61 77 74 6f 6f      this._sawtoo
882e0 74 68 2e 70 68 61 73 65 20 3d 20 70 68 61 73 65  th.phase = phase
882f0 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20  ;..        }..  
88300 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09    });..    /**..
88310 09 20 2a 20 54 68 65 20 74 79 70 65 20 6f 66 20  . * The type of 
88320 74 68 65 20 6f 73 63 69 6c 6c 61 74 6f 72 2e 20  the oscillator. 
88330 41 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20 22  Always returns "
88340 70 75 6c 73 65 22 2e 0a 09 09 20 2a 20 40 72 65  pulse".... * @re
88350 61 64 4f 6e 6c 79 0a 09 09 20 2a 20 40 6d 65 6d  adOnly... * @mem
88360 62 65 72 4f 66 20 54 6f 6e 65 2e 50 75 6c 73 65  berOf Tone.Pulse
88370 4f 73 63 69 6c 6c 61 74 6f 72 23 0a 09 09 20 2a  Oscillator#... *
88380 20 40 74 79 70 65 20 7b 73 74 72 69 6e 67 7d 0a   @type {string}.
88390 09 09 20 2a 20 40 6e 61 6d 65 20 74 79 70 65 0a  .. * @name type.
883a0 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63  .. */..    Objec
883b0 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79  t.defineProperty
883c0 28 54 6f 6e 65 2e 50 75 6c 73 65 4f 73 63 69 6c  (Tone.PulseOscil
883d0 6c 61 74 6f 72 2e 70 72 6f 74 6f 74 79 70 65 2c  lator.prototype,
883e0 20 27 74 79 70 65 27 2c 20 7b 0a 09 20 20 20 20   'type', {..    
883f0 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f      get: functio
88400 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
88410 20 20 20 20 72 65 74 75 72 6e 20 27 70 75 6c 73      return 'puls
88420 65 27 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  e';..        }..
88430 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a      });..    /**
88440 0a 09 09 20 2a 20 54 68 65 20 70 61 72 74 69 61  ... * The partia
88450 6c 73 20 6f 66 20 74 68 65 20 77 61 76 65 66 6f  ls of the wavefo
88460 72 6d 2e 20 43 61 6e 6e 6f 74 20 73 65 74 20 70  rm. Cannot set p
88470 61 72 74 69 61 6c 73 20 66 6f 72 20 74 68 69 73  artials for this
88480 20 77 61 76 65 66 6f 72 6d 20 74 79 70 65 0a 09   waveform type..
88490 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f  . * @memberOf To
884a0 6e 65 2e 50 75 6c 73 65 4f 73 63 69 6c 6c 61 74  ne.PulseOscillat
884b0 6f 72 23 0a 09 09 20 2a 20 40 74 79 70 65 20 7b  or#... * @type {
884c0 41 72 72 61 79 7d 0a 09 09 20 2a 20 40 6e 61 6d  Array}... * @nam
884d0 65 20 70 61 72 74 69 61 6c 73 0a 09 09 20 2a 20  e partials... * 
884e0 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09  @private... */..
884f0 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e      Object.defin
88500 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 50  eProperty(Tone.P
88510 75 6c 73 65 4f 73 63 69 6c 6c 61 74 6f 72 2e 70  ulseOscillator.p
88520 72 6f 74 6f 74 79 70 65 2c 20 27 70 61 72 74 69  rototype, 'parti
88530 61 6c 73 27 2c 20 7b 0a 09 20 20 20 20 20 20 20  als', {..       
88540 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   get: function (
88550 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
88560 20 72 65 74 75 72 6e 20 5b 5d 3b 0a 09 20 20 20   return [];..   
88570 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a       }..    });.
88580 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43  .    /**... *  C
88590 6c 65 61 6e 20 75 70 20 6d 65 74 68 6f 64 2e 0a  lean up method..
885a0 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 7b 54  .. *  @return {T
885b0 6f 6e 65 2e 50 75 6c 73 65 4f 73 63 69 6c 6c 61  one.PulseOscilla
885c0 74 6f 72 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a  tor} this... */.
885d0 09 20 20 20 20 54 6f 6e 65 2e 50 75 6c 73 65 4f  .    Tone.PulseO
885e0 73 63 69 6c 6c 61 74 6f 72 2e 70 72 6f 74 6f 74  scillator.protot
885f0 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75  ype.dispose = fu
88600 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
88610 20 20 20 20 20 54 6f 6e 65 2e 53 6f 75 72 63 65       Tone.Source
88620 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f  .prototype.dispo
88630 73 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09  se.call(this);..
88640 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 61          this._sa
88650 77 74 6f 6f 74 68 2e 64 69 73 70 6f 73 65 28 29  wtooth.dispose()
88660 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
88670 5f 73 61 77 74 6f 6f 74 68 20 3d 20 6e 75 6c 6c  _sawtooth = null
88680 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
88690 5f 77 72 69 74 61 62 6c 65 28 5b 0a 09 20 20 20  _writable([..   
886a0 20 20 20 20 20 20 20 20 20 27 77 69 64 74 68 27           'width'
886b0 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
886c0 66 72 65 71 75 65 6e 63 79 27 2c 0a 09 20 20 20  frequency',..   
886d0 20 20 20 20 20 20 20 20 20 27 64 65 74 75 6e 65           'detune
886e0 27 0a 09 20 20 20 20 20 20 20 20 5d 29 3b 0a 09  '..        ]);..
886f0 20 20 20 20 20 20 20 20 74 68 69 73 2e 77 69 64          this.wid
88700 74 68 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20  th.dispose();.. 
88710 20 20 20 20 20 20 20 74 68 69 73 2e 77 69 64 74         this.widt
88720 68 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20  h = null;..     
88730 20 20 20 74 68 69 73 2e 5f 77 69 64 74 68 47 61     this._widthGa
88740 74 65 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20  te.dispose();.. 
88750 20 20 20 20 20 20 20 74 68 69 73 2e 5f 77 69 64         this._wid
88760 74 68 47 61 74 65 20 3d 20 6e 75 6c 6c 3b 0a 09  thGate = null;..
88770 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 74 68          this._th
88780 72 65 73 68 2e 64 69 73 70 6f 73 65 28 29 3b 0a  resh.dispose();.
88790 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 74  .        this._t
887a0 68 72 65 73 68 20 3d 20 6e 75 6c 6c 3b 0a 09 20  hresh = null;.. 
887b0 20 20 20 20 20 20 20 74 68 69 73 2e 66 72 65 71         this.freq
887c0 75 65 6e 63 79 20 3d 20 6e 75 6c 6c 3b 0a 09 20  uency = null;.. 
887d0 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 74 75         this.detu
887e0 6e 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  ne = null;..    
887f0 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b      return this;
88800 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 72 65  ..    };..    re
88810 74 75 72 6e 20 54 6f 6e 65 2e 50 75 6c 73 65 4f  turn Tone.PulseO
88820 73 63 69 6c 6c 61 74 6f 72 3b 0a 09 7d 29 3b 0a  scillator;..});.
88830 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e  .Module(function
88840 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a   (Tone) {..    .
88850 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40  .    /**... *  @
88860 63 6c 61 73 73 20 54 6f 6e 65 2e 50 57 4d 4f 73  class Tone.PWMOs
88870 63 69 6c 6c 61 74 6f 72 20 6d 6f 64 75 6c 61 74  cillator modulat
88880 65 73 20 74 68 65 20 77 69 64 74 68 20 6f 66 20  es the width of 
88890 61 20 54 6f 6e 65 2e 50 75 6c 73 65 4f 73 63 69  a Tone.PulseOsci
888a0 6c 6c 61 74 6f 72 20 0a 09 09 20 2a 20 20 20 20  llator ... *    
888b0 20 20 20 20 20 61 74 20 74 68 65 20 6d 6f 64 75       at the modu
888c0 6c 61 74 69 6f 6e 46 72 65 71 75 65 6e 63 79 2e  lationFrequency.
888d0 20 54 68 69 73 20 68 61 73 20 74 68 65 20 65 66   This has the ef
888e0 66 65 63 74 20 6f 66 20 63 6f 6e 74 69 6e 75 6f  fect of continuo
888f0 75 73 6c 79 0a 09 09 20 2a 20 20 20 20 20 20 20  usly... *       
88900 20 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 74    changing the t
88910 69 6d 62 72 65 20 6f 66 20 74 68 65 20 6f 73 63  imbre of the osc
88920 69 6c 6c 61 74 6f 72 20 62 79 20 61 6c 74 65 72  illator by alter
88930 69 6e 67 20 74 68 65 20 68 61 72 6d 6f 6e 69 63  ing the harmonic
88940 73 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  s ... *         
88950 67 65 6e 65 72 61 74 65 64 2e 0a 09 09 20 2a 0a  generated.... *.
88960 09 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b  .. *  @extends {
88970 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f 72 7d  Tone.Oscillator}
88980 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 72 75 63  ... *  @construc
88990 74 6f 72 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  tor... *  @param
889a0 20 7b 46 72 65 71 75 65 6e 63 79 7d 20 66 72 65   {Frequency} fre
889b0 71 75 65 6e 63 79 20 54 68 65 20 73 74 61 72 74  quency The start
889c0 69 6e 67 20 66 72 65 71 75 65 6e 63 79 20 6f 66  ing frequency of
889d0 20 74 68 65 20 6f 73 63 69 6c 6c 61 74 6f 72 2e   the oscillator.
889e0 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b   ... *  @param {
889f0 46 72 65 71 75 65 6e 63 79 7d 20 6d 6f 64 75 6c  Frequency} modul
88a00 61 74 69 6f 6e 46 72 65 71 75 65 6e 63 79 20 54  ationFrequency T
88a10 68 65 20 6d 6f 64 75 6c 61 74 69 6f 6e 20 66 72  he modulation fr
88a20 65 71 75 65 6e 63 79 20 6f 66 20 74 68 65 20 77  equency of the w
88a30 69 64 74 68 20 6f 66 20 74 68 65 20 70 75 6c 73  idth of the puls
88a40 65 2e 20 0a 09 09 20 2a 20 20 40 65 78 61 6d 70  e. ... *  @examp
88a50 6c 65 0a 09 09 20 2a 20 20 76 61 72 20 70 77 6d  le... *  var pwm
88a60 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 50 57 4d 4f   = new Tone.PWMO
88a70 73 63 69 6c 6c 61 74 6f 72 28 22 41 62 33 22 2c  scillator("Ab3",
88a80 20 30 2e 33 29 2e 74 6f 4d 61 73 74 65 72 28 29   0.3).toMaster()
88a90 2e 73 74 61 72 74 28 29 3b 0a 09 09 20 2a 2f 0a  .start();... */.
88aa0 09 20 20 20 20 54 6f 6e 65 2e 50 57 4d 4f 73 63  .    Tone.PWMOsc
88ab0 69 6c 6c 61 74 6f 72 20 3d 20 66 75 6e 63 74 69  illator = functi
88ac0 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
88ad0 20 76 61 72 20 6f 70 74 69 6f 6e 73 20 3d 20 74   var options = t
88ae0 68 69 73 2e 6f 70 74 69 6f 6e 73 4f 62 6a 65 63  his.optionsObjec
88af0 74 28 61 72 67 75 6d 65 6e 74 73 2c 20 5b 0a 09  t(arguments, [..
88b00 20 20 20 20 20 20 20 20 20 20 20 20 27 66 72 65              'fre
88b10 71 75 65 6e 63 79 27 2c 0a 09 20 20 20 20 20 20  quency',..      
88b20 20 20 20 20 20 20 27 6d 6f 64 75 6c 61 74 69 6f        'modulatio
88b30 6e 46 72 65 71 75 65 6e 63 79 27 0a 09 20 20 20  nFrequency'..   
88b40 20 20 20 20 20 5d 2c 20 54 6f 6e 65 2e 50 57 4d       ], Tone.PWM
88b50 4f 73 63 69 6c 6c 61 74 6f 72 2e 64 65 66 61 75  Oscillator.defau
88b60 6c 74 73 29 3b 0a 09 20 20 20 20 20 20 20 20 54  lts);..        T
88b70 6f 6e 65 2e 53 6f 75 72 63 65 2e 63 61 6c 6c 28  one.Source.call(
88b80 74 68 69 73 2c 20 6f 70 74 69 6f 6e 73 29 3b 0a  this, options);.
88b90 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
88ba0 20 2a 20 20 74 68 65 20 70 75 6c 73 65 20 6f 73   *  the pulse os
88bb0 63 69 6c 6c 61 74 6f 72 0a 09 09 09 20 2a 20 20  cillator.... *  
88bc0 40 74 79 70 65 20 7b 54 6f 6e 65 2e 50 75 6c 73  @type {Tone.Puls
88bd0 65 4f 73 63 69 6c 6c 61 74 6f 72 7d 0a 09 09 09  eOscillator}....
88be0 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
88bf0 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
88c00 73 2e 5f 70 75 6c 73 65 20 3d 20 6e 65 77 20 54  s._pulse = new T
88c10 6f 6e 65 2e 50 75 6c 73 65 4f 73 63 69 6c 6c 61  one.PulseOscilla
88c20 74 6f 72 28 6f 70 74 69 6f 6e 73 2e 6d 6f 64 75  tor(options.modu
88c30 6c 61 74 69 6f 6e 46 72 65 71 75 65 6e 63 79 29  lationFrequency)
88c40 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 63 68 61  ;..        //cha
88c50 6e 67 65 20 74 68 65 20 70 75 6c 73 65 20 6f 73  nge the pulse os
88c60 63 69 6c 6c 61 74 6f 72 20 74 79 70 65 0a 09 20  cillator type.. 
88c70 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70 75 6c         this._pul
88c80 73 65 2e 5f 73 61 77 74 6f 6f 74 68 2e 74 79 70  se._sawtooth.typ
88c90 65 20 3d 20 27 73 69 6e 65 27 3b 0a 09 20 20 20  e = 'sine';..   
88ca0 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
88cb0 74 68 65 20 6d 6f 64 75 6c 61 74 6f 72 0a 09 09  the modulator...
88cc0 09 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65  . *  @type {Tone
88cd0 2e 4f 73 63 69 6c 6c 61 74 6f 72 7d 0a 09 09 09  .Oscillator}....
88ce0 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
88cf0 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
88d00 73 2e 5f 6d 6f 64 75 6c 61 74 6f 72 20 3d 20 6e  s._modulator = n
88d10 65 77 20 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74  ew Tone.Oscillat
88d20 6f 72 28 7b 0a 09 20 20 20 20 20 20 20 20 20 20  or({..          
88d30 20 20 27 66 72 65 71 75 65 6e 63 79 27 3a 20 6f    'frequency': o
88d40 70 74 69 6f 6e 73 2e 66 72 65 71 75 65 6e 63 79  ptions.frequency
88d50 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
88d60 64 65 74 75 6e 65 27 3a 20 6f 70 74 69 6f 6e 73  detune': options
88d70 2e 64 65 74 75 6e 65 2c 0a 09 20 20 20 20 20 20  .detune,..      
88d80 20 20 20 20 20 20 27 70 68 61 73 65 27 3a 20 6f        'phase': o
88d90 70 74 69 6f 6e 73 2e 70 68 61 73 65 0a 09 20 20  ptions.phase..  
88da0 20 20 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 20        });..     
88db0 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 53 63     /**.... *  Sc
88dc0 61 6c 65 20 74 68 65 20 6f 73 63 69 6c 6c 61 74  ale the oscillat
88dd0 6f 72 20 73 6f 20 69 74 20 64 6f 65 73 6e 27 74  or so it doesn't
88de0 20 67 6f 20 73 69 6c 65 6e 74 20 0a 09 09 09 20   go silent .... 
88df0 2a 20 20 61 74 20 74 68 65 20 65 78 74 72 65 6d  *  at the extrem
88e00 65 20 76 61 6c 75 65 73 2e 0a 09 09 09 20 2a 20  e values..... * 
88e10 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 4d 75 6c   @type {Tone.Mul
88e20 74 69 70 6c 79 7d 0a 09 09 09 20 2a 20 20 40 70  tiply}.... *  @p
88e30 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20  rivate.... */.. 
88e40 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 63 61         this._sca
88e50 6c 65 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4d 75  le = new Tone.Mu
88e60 6c 74 69 70 6c 79 28 32 29 3b 0a 09 20 20 20 20  ltiply(2);..    
88e70 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54      /**.... *  T
88e80 68 65 20 66 72 65 71 75 65 6e 63 79 20 63 6f 6e  he frequency con
88e90 74 72 6f 6c 2e 0a 09 09 09 20 2a 20 20 40 74 79  trol..... *  @ty
88ea0 70 65 20 7b 46 72 65 71 75 65 6e 63 79 7d 0a 09  pe {Frequency}..
88eb0 09 09 20 2a 20 20 40 73 69 67 6e 61 6c 0a 09 09  .. *  @signal...
88ec0 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
88ed0 69 73 2e 66 72 65 71 75 65 6e 63 79 20 3d 20 74  is.frequency = t
88ee0 68 69 73 2e 5f 6d 6f 64 75 6c 61 74 6f 72 2e 66  his._modulator.f
88ef0 72 65 71 75 65 6e 63 79 3b 0a 09 20 20 20 20 20  requency;..     
88f00 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68     /**.... *  Th
88f10 65 20 64 65 74 75 6e 65 20 6f 66 20 74 68 65 20  e detune of the 
88f20 6f 73 63 69 6c 6c 61 74 6f 72 2e 0a 09 09 09 20  oscillator..... 
88f30 2a 20 20 40 74 79 70 65 20 7b 43 65 6e 74 73 7d  *  @type {Cents}
88f40 0a 09 09 09 20 2a 20 20 40 73 69 67 6e 61 6c 0a  .... *  @signal.
88f50 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
88f60 74 68 69 73 2e 64 65 74 75 6e 65 20 3d 20 74 68  this.detune = th
88f70 69 73 2e 5f 6d 6f 64 75 6c 61 74 6f 72 2e 64 65  is._modulator.de
88f80 74 75 6e 65 3b 0a 09 20 20 20 20 20 20 20 20 2f  tune;..        /
88f90 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 6d 6f  **.... *  The mo
88fa0 64 75 6c 61 74 69 6f 6e 20 72 61 74 65 20 6f 66  dulation rate of
88fb0 20 74 68 65 20 6f 73 63 69 6c 6c 61 74 6f 72 2e   the oscillator.
88fc0 20 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b   .... *  @type {
88fd0 46 72 65 71 75 65 6e 63 79 7d 0a 09 09 09 20 2a  Frequency}.... *
88fe0 20 20 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f    @signal.... */
88ff0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 6d  ..        this.m
89000 6f 64 75 6c 61 74 69 6f 6e 46 72 65 71 75 65 6e  odulationFrequen
89010 63 79 20 3d 20 74 68 69 73 2e 5f 70 75 6c 73 65  cy = this._pulse
89020 2e 66 72 65 71 75 65 6e 63 79 3b 0a 09 20 20 20  .frequency;..   
89030 20 20 20 20 20 2f 2f 63 6f 6e 6e 65 63 74 69 6f       //connectio
89040 6e 73 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  ns..        this
89050 2e 5f 6d 6f 64 75 6c 61 74 6f 72 2e 63 68 61 69  ._modulator.chai
89060 6e 28 74 68 69 73 2e 5f 73 63 61 6c 65 2c 20 74  n(this._scale, t
89070 68 69 73 2e 5f 70 75 6c 73 65 2e 77 69 64 74 68  his._pulse.width
89080 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
89090 2e 5f 70 75 6c 73 65 2e 63 6f 6e 6e 65 63 74 28  ._pulse.connect(
890a0 74 68 69 73 2e 6f 75 74 70 75 74 29 3b 0a 09 20  this.output);.. 
890b0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 72 65 61         this._rea
890c0 64 4f 6e 6c 79 28 5b 0a 09 20 20 20 20 20 20 20  dOnly([..       
890d0 20 20 20 20 20 27 6d 6f 64 75 6c 61 74 69 6f 6e       'modulation
890e0 46 72 65 71 75 65 6e 63 79 27 2c 0a 09 20 20 20  Frequency',..   
890f0 20 20 20 20 20 20 20 20 20 27 66 72 65 71 75 65           'freque
89100 6e 63 79 27 2c 0a 09 20 20 20 20 20 20 20 20 20  ncy',..         
89110 20 20 20 27 64 65 74 75 6e 65 27 0a 09 20 20 20     'detune'..   
89120 20 20 20 20 20 5d 29 3b 0a 09 20 20 20 20 7d 3b       ]);..    };
89130 0a 09 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e  ..    Tone.exten
89140 64 28 54 6f 6e 65 2e 50 57 4d 4f 73 63 69 6c 6c  d(Tone.PWMOscill
89150 61 74 6f 72 2c 20 54 6f 6e 65 2e 4f 73 63 69 6c  ator, Tone.Oscil
89160 6c 61 74 6f 72 29 3b 0a 09 20 20 20 20 2f 2a 2a  lator);..    /**
89170 0a 09 09 20 2a 20 20 64 65 66 61 75 6c 74 20 76  ... *  default v
89180 61 6c 75 65 73 0a 09 09 20 2a 20 20 40 73 74 61  alues... *  @sta
89190 74 69 63 0a 09 09 20 2a 20 20 40 74 79 70 65 20  tic... *  @type 
891a0 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 20 20 40  {Object}... *  @
891b0 63 6f 6e 73 74 0a 09 09 20 2a 2f 0a 09 20 20 20  const... */..   
891c0 20 54 6f 6e 65 2e 50 57 4d 4f 73 63 69 6c 6c 61   Tone.PWMOscilla
891d0 74 6f 72 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b  tor.defaults = {
891e0 0a 09 20 20 20 20 20 20 20 20 27 66 72 65 71 75  ..        'frequ
891f0 65 6e 63 79 27 3a 20 34 34 30 2c 0a 09 20 20 20  ency': 440,..   
89200 20 20 20 20 20 27 64 65 74 75 6e 65 27 3a 20 30       'detune': 0
89210 2c 0a 09 20 20 20 20 20 20 20 20 27 70 68 61 73  ,..        'phas
89220 65 27 3a 20 30 2c 0a 09 20 20 20 20 20 20 20 20  e': 0,..        
89230 27 6d 6f 64 75 6c 61 74 69 6f 6e 46 72 65 71 75  'modulationFrequ
89240 65 6e 63 79 27 3a 20 30 2e 34 0a 09 20 20 20 20  ency': 0.4..    
89250 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  };..    /**... *
89260 20 20 73 74 61 72 74 20 74 68 65 20 6f 73 63 69    start the osci
89270 6c 6c 61 74 6f 72 0a 09 09 20 2a 20 20 40 70 61  llator... *  @pa
89280 72 61 6d 20 20 7b 54 69 6d 65 7d 20 5b 74 69 6d  ram  {Time} [tim
89290 65 3d 6e 6f 77 5d 0a 09 09 20 2a 20 20 40 70 72  e=now]... *  @pr
892a0 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20  ivate... */..   
892b0 20 54 6f 6e 65 2e 50 57 4d 4f 73 63 69 6c 6c 61   Tone.PWMOscilla
892c0 74 6f 72 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 73  tor.prototype._s
892d0 74 61 72 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20  tart = function 
892e0 28 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20  (time) {..      
892f0 20 20 74 69 6d 65 20 3d 20 74 68 69 73 2e 74 6f    time = this.to
89300 53 65 63 6f 6e 64 73 28 74 69 6d 65 29 3b 0a 09  Seconds(time);..
89310 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 6f          this._mo
89320 64 75 6c 61 74 6f 72 2e 73 74 61 72 74 28 74 69  dulator.start(ti
89330 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  me);..        th
89340 69 73 2e 5f 70 75 6c 73 65 2e 73 74 61 72 74 28  is._pulse.start(
89350 74 69 6d 65 29 3b 0a 09 20 20 20 20 7d 3b 0a 09  time);..    };..
89360 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 73 74      /**... *  st
89370 6f 70 20 74 68 65 20 6f 73 63 69 6c 6c 61 74 6f  op the oscillato
89380 72 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20  r... *  @param  
89390 7b 54 69 6d 65 7d 20 74 69 6d 65 20 28 6f 70 74  {Time} time (opt
893a0 69 6f 6e 61 6c 29 20 74 69 6d 69 6e 67 20 70 61  ional) timing pa
893b0 72 61 6d 65 74 65 72 0a 09 09 20 2a 20 20 40 70  rameter... *  @p
893c0 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20  rivate... */..  
893d0 20 20 54 6f 6e 65 2e 50 57 4d 4f 73 63 69 6c 6c    Tone.PWMOscill
893e0 61 74 6f 72 2e 70 72 6f 74 6f 74 79 70 65 2e 5f  ator.prototype._
893f0 73 74 6f 70 20 3d 20 66 75 6e 63 74 69 6f 6e 20  stop = function 
89400 28 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20  (time) {..      
89410 20 20 74 69 6d 65 20 3d 20 74 68 69 73 2e 74 6f    time = this.to
89420 53 65 63 6f 6e 64 73 28 74 69 6d 65 29 3b 0a 09  Seconds(time);..
89430 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 6f          this._mo
89440 64 75 6c 61 74 6f 72 2e 73 74 6f 70 28 74 69 6d  dulator.stop(tim
89450 65 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  e);..        thi
89460 73 2e 5f 70 75 6c 73 65 2e 73 74 6f 70 28 74 69  s._pulse.stop(ti
89470 6d 65 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  me);..    };..  
89480 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65 20 74    /**... * The t
89490 79 70 65 20 6f 66 20 74 68 65 20 6f 73 63 69 6c  ype of the oscil
894a0 6c 61 74 6f 72 2e 20 41 6c 77 61 79 73 20 72 65  lator. Always re
894b0 74 75 72 6e 73 20 22 70 77 6d 22 2e 0a 09 09 20  turns "pwm".... 
894c0 2a 20 40 72 65 61 64 4f 6e 6c 79 0a 09 09 20 2a  * @readOnly... *
894d0 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e   @memberOf Tone.
894e0 50 57 4d 4f 73 63 69 6c 6c 61 74 6f 72 23 0a 09  PWMOscillator#..
894f0 09 20 2a 20 40 74 79 70 65 20 7b 73 74 72 69 6e  . * @type {strin
89500 67 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 74 79  g}... * @name ty
89510 70 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62  pe... */..    Ob
89520 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65  ject.definePrope
89530 72 74 79 28 54 6f 6e 65 2e 50 57 4d 4f 73 63 69  rty(Tone.PWMOsci
89540 6c 6c 61 74 6f 72 2e 70 72 6f 74 6f 74 79 70 65  llator.prototype
89550 2c 20 27 74 79 70 65 27 2c 20 7b 0a 09 20 20 20  , 'type', {..   
89560 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69       get: functi
89570 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
89580 20 20 20 20 20 72 65 74 75 72 6e 20 27 70 77 6d       return 'pwm
89590 27 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  ';..        }.. 
895a0 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a     });..    /**.
895b0 09 09 20 2a 20 54 68 65 20 70 61 72 74 69 61 6c  .. * The partial
895c0 73 20 6f 66 20 74 68 65 20 77 61 76 65 66 6f 72  s of the wavefor
895d0 6d 2e 20 43 61 6e 6e 6f 74 20 73 65 74 20 70 61  m. Cannot set pa
895e0 72 74 69 61 6c 73 20 66 6f 72 20 74 68 69 73 20  rtials for this 
895f0 77 61 76 65 66 6f 72 6d 20 74 79 70 65 0a 09 09  waveform type...
89600 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e   * @memberOf Ton
89610 65 2e 50 57 4d 4f 73 63 69 6c 6c 61 74 6f 72 23  e.PWMOscillator#
89620 0a 09 09 20 2a 20 40 74 79 70 65 20 7b 41 72 72  ... * @type {Arr
89630 61 79 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 70  ay}... * @name p
89640 61 72 74 69 61 6c 73 0a 09 09 20 2a 20 40 70 72  artials... * @pr
89650 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20  ivate... */..   
89660 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72   Object.definePr
89670 6f 70 65 72 74 79 28 54 6f 6e 65 2e 50 57 4d 4f  operty(Tone.PWMO
89680 73 63 69 6c 6c 61 74 6f 72 2e 70 72 6f 74 6f 74  scillator.protot
89690 79 70 65 2c 20 27 70 61 72 74 69 61 6c 73 27 2c  ype, 'partials',
896a0 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a   {..        get:
896b0 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
896c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
896d0 72 6e 20 5b 5d 3b 0a 09 20 20 20 20 20 20 20 20  rn [];..        
896e0 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20  }..    });..    
896f0 2f 2a 2a 0a 09 09 20 2a 20 54 68 65 20 70 68 61  /**... * The pha
89700 73 65 20 6f 66 20 74 68 65 20 6f 73 63 69 6c 6c  se of the oscill
89710 61 74 6f 72 20 69 6e 20 64 65 67 72 65 65 73 2e  ator in degrees.
89720 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20  ... * @memberOf 
89730 54 6f 6e 65 2e 50 57 4d 4f 73 63 69 6c 6c 61 74  Tone.PWMOscillat
89740 6f 72 23 0a 09 09 20 2a 20 40 74 79 70 65 20 7b  or#... * @type {
89750 6e 75 6d 62 65 72 7d 0a 09 09 20 2a 20 40 6e 61  number}... * @na
89760 6d 65 20 70 68 61 73 65 0a 09 09 20 2a 2f 0a 09  me phase... */..
89770 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e      Object.defin
89780 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 50  eProperty(Tone.P
89790 57 4d 4f 73 63 69 6c 6c 61 74 6f 72 2e 70 72 6f  WMOscillator.pro
897a0 74 6f 74 79 70 65 2c 20 27 70 68 61 73 65 27 2c  totype, 'phase',
897b0 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a   {..        get:
897c0 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
897d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
897e0 72 6e 20 74 68 69 73 2e 5f 6d 6f 64 75 6c 61 74  rn this._modulat
897f0 6f 72 2e 70 68 61 73 65 3b 0a 09 20 20 20 20 20  or.phase;..     
89800 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73     },..        s
89810 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 70 68  et: function (ph
89820 61 73 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ase) {..        
89830 20 20 20 20 74 68 69 73 2e 5f 6d 6f 64 75 6c 61      this._modula
89840 74 6f 72 2e 70 68 61 73 65 20 3d 20 70 68 61 73  tor.phase = phas
89850 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  e;..        }.. 
89860 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a     });..    /**.
89870 09 09 20 2a 20 20 43 6c 65 61 6e 20 75 70 2e 0a  .. *  Clean up..
89880 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 7b 54  .. *  @return {T
89890 6f 6e 65 2e 50 57 4d 4f 73 63 69 6c 6c 61 74 6f  one.PWMOscillato
898a0 72 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20  r} this... */.. 
898b0 20 20 20 54 6f 6e 65 2e 50 57 4d 4f 73 63 69 6c     Tone.PWMOscil
898c0 6c 61 74 6f 72 2e 70 72 6f 74 6f 74 79 70 65 2e  lator.prototype.
898d0 64 69 73 70 6f 73 65 20 3d 20 66 75 6e 63 74 69  dispose = functi
898e0 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
898f0 20 54 6f 6e 65 2e 53 6f 75 72 63 65 2e 70 72 6f   Tone.Source.pro
89900 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 2e 63  totype.dispose.c
89910 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20 20 20  all(this);..    
89920 20 20 20 20 74 68 69 73 2e 5f 70 75 6c 73 65 2e      this._pulse.
89930 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20  dispose();..    
89940 20 20 20 20 74 68 69 73 2e 5f 70 75 6c 73 65 20      this._pulse 
89950 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
89960 20 74 68 69 73 2e 5f 73 63 61 6c 65 2e 64 69 73   this._scale.dis
89970 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20  pose();..       
89980 20 74 68 69 73 2e 5f 73 63 61 6c 65 20 3d 20 6e   this._scale = n
89990 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ull;..        th
899a0 69 73 2e 5f 6d 6f 64 75 6c 61 74 6f 72 2e 64 69  is._modulator.di
899b0 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
899c0 20 20 74 68 69 73 2e 5f 6d 6f 64 75 6c 61 74 6f    this._modulato
899d0 72 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20  r = null;..     
899e0 20 20 20 74 68 69 73 2e 5f 77 72 69 74 61 62 6c     this._writabl
899f0 65 28 5b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e([..           
89a00 20 27 6d 6f 64 75 6c 61 74 69 6f 6e 46 72 65 71   'modulationFreq
89a10 75 65 6e 63 79 27 2c 0a 09 20 20 20 20 20 20 20  uency',..       
89a20 20 20 20 20 20 27 66 72 65 71 75 65 6e 63 79 27       'frequency'
89a30 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
89a40 64 65 74 75 6e 65 27 0a 09 20 20 20 20 20 20 20  detune'..       
89a50 20 5d 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68   ]);..        th
89a60 69 73 2e 66 72 65 71 75 65 6e 63 79 20 3d 20 6e  is.frequency = n
89a70 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ull;..        th
89a80 69 73 2e 64 65 74 75 6e 65 20 3d 20 6e 75 6c 6c  is.detune = null
89a90 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
89aa0 6d 6f 64 75 6c 61 74 69 6f 6e 46 72 65 71 75 65  modulationFreque
89ab0 6e 63 79 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  ncy = null;..   
89ac0 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
89ad0 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 72  ;..    };..    r
89ae0 65 74 75 72 6e 20 54 6f 6e 65 2e 50 57 4d 4f 73  eturn Tone.PWMOs
89af0 63 69 6c 6c 61 74 6f 72 3b 0a 09 7d 29 3b 0a 09  cillator;..});..
89b00 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20  Module(function 
89b10 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09  (Tone) {..    ..
89b20 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63      /**... *  @c
89b30 6c 61 73 73 20 54 6f 6e 65 2e 46 4d 4f 73 63 69  lass Tone.FMOsci
89b40 6c 6c 61 74 6f 72 20 0a 09 09 20 2a 0a 09 09 20  llator ... *... 
89b50 2a 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e  *  @extends {Ton
89b60 65 2e 4f 73 63 69 6c 6c 61 74 6f 72 7d 0a 09 09  e.Oscillator}...
89b70 20 2a 20 20 40 63 6f 6e 73 74 72 75 63 74 6f 72   *  @constructor
89b80 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 46  ... *  @param {F
89b90 72 65 71 75 65 6e 63 79 7d 20 66 72 65 71 75 65  requency} freque
89ba0 6e 63 79 20 54 68 65 20 73 74 61 72 74 69 6e 67  ncy The starting
89bb0 20 66 72 65 71 75 65 6e 63 79 20 6f 66 20 74 68   frequency of th
89bc0 65 20 6f 73 63 69 6c 6c 61 74 6f 72 2e 20 0a 09  e oscillator. ..
89bd0 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 53 74 72  . *  @param {Str
89be0 69 6e 67 7d 20 74 79 70 65 20 54 68 65 20 74 79  ing} type The ty
89bf0 70 65 20 6f 66 20 74 68 65 20 63 61 72 72 69 65  pe of the carrie
89c00 72 20 6f 73 63 69 6c 6c 61 74 6f 72 2e 0a 09 09  r oscillator....
89c10 20 2a 20 20 40 70 61 72 61 6d 20 7b 53 74 72 69   *  @param {Stri
89c20 6e 67 7d 20 6d 6f 64 75 6c 61 74 69 6f 6e 54 79  ng} modulationTy
89c30 70 65 20 54 68 65 20 74 79 70 65 20 6f 66 20 74  pe The type of t
89c40 68 65 20 6d 6f 64 75 6c 61 74 6f 72 20 6f 73 63  he modulator osc
89c50 69 6c 6c 61 74 6f 72 2e 0a 09 09 20 2a 20 20 40  illator.... *  @
89c60 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 2f 2f 61  example... * //a
89c70 20 73 69 6e 65 20 6f 73 63 69 6c 6c 61 74 6f 72   sine oscillator
89c80 20 66 72 65 71 75 65 6e 63 79 2d 6d 6f 64 75 6c   frequency-modul
89c90 61 74 65 64 20 62 79 20 61 20 73 71 75 61 72 65  ated by a square
89ca0 20 77 61 76 65 0a 09 09 20 2a 20 76 61 72 20 66   wave... * var f
89cb0 6d 4f 73 63 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  mOsc = new Tone.
89cc0 46 4d 4f 73 63 69 6c 6c 61 74 6f 72 28 22 41 62  FMOscillator("Ab
89cd0 33 22 2c 20 22 73 69 6e 65 22 2c 20 22 73 71 75  3", "sine", "squ
89ce0 61 72 65 22 29 2e 74 6f 4d 61 73 74 65 72 28 29  are").toMaster()
89cf0 2e 73 74 61 72 74 28 29 3b 0a 09 09 20 2a 2f 0a  .start();... */.
89d00 09 20 20 20 20 54 6f 6e 65 2e 46 4d 4f 73 63 69  .    Tone.FMOsci
89d10 6c 6c 61 74 6f 72 20 3d 20 66 75 6e 63 74 69 6f  llator = functio
89d20 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
89d30 76 61 72 20 6f 70 74 69 6f 6e 73 20 3d 20 74 68  var options = th
89d40 69 73 2e 6f 70 74 69 6f 6e 73 4f 62 6a 65 63 74  is.optionsObject
89d50 28 61 72 67 75 6d 65 6e 74 73 2c 20 5b 0a 09 20  (arguments, [.. 
89d60 20 20 20 20 20 20 20 20 20 20 20 27 66 72 65 71             'freq
89d70 75 65 6e 63 79 27 2c 0a 09 20 20 20 20 20 20 20  uency',..       
89d80 20 20 20 20 20 27 74 79 70 65 27 2c 0a 09 20 20       'type',..  
89d90 20 20 20 20 20 20 20 20 20 20 27 6d 6f 64 75 6c            'modul
89da0 61 74 69 6f 6e 54 79 70 65 27 0a 09 20 20 20 20  ationType'..    
89db0 20 20 20 20 5d 2c 20 54 6f 6e 65 2e 46 4d 4f 73      ], Tone.FMOs
89dc0 63 69 6c 6c 61 74 6f 72 2e 64 65 66 61 75 6c 74  cillator.default
89dd0 73 29 3b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e  s);..        Ton
89de0 65 2e 53 6f 75 72 63 65 2e 63 61 6c 6c 28 74 68  e.Source.call(th
89df0 69 73 2c 20 6f 70 74 69 6f 6e 73 29 3b 0a 09 20  is, options);.. 
89e00 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
89e10 20 20 54 68 65 20 63 61 72 72 69 65 72 20 6f 73    The carrier os
89e20 63 69 6c 6c 61 74 6f 72 0a 09 09 09 20 2a 20 20  cillator.... *  
89e30 40 74 79 70 65 20 7b 54 6f 6e 65 2e 4f 73 63 69  @type {Tone.Osci
89e40 6c 6c 61 74 6f 72 7d 0a 09 09 09 20 2a 20 20 40  llator}.... *  @
89e50 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
89e60 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 63 61          this._ca
89e70 72 72 69 65 72 20 3d 20 6e 65 77 20 54 6f 6e 65  rrier = new Tone
89e80 2e 4f 73 63 69 6c 6c 61 74 6f 72 28 6f 70 74 69  .Oscillator(opti
89e90 6f 6e 73 2e 66 72 65 71 75 65 6e 63 79 2c 20 6f  ons.frequency, o
89ea0 70 74 69 6f 6e 73 2e 74 79 70 65 29 3b 0a 09 20  ptions.type);.. 
89eb0 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
89ec0 20 20 54 68 65 20 6f 73 63 69 6c 6c 61 74 6f 72    The oscillator
89ed0 27 73 20 66 72 65 71 75 65 6e 63 79 0a 09 09 09  's frequency....
89ee0 20 2a 20 20 40 74 79 70 65 20 7b 46 72 65 71 75   *  @type {Frequ
89ef0 65 6e 63 79 7d 0a 09 09 09 20 2a 20 20 40 73 69  ency}.... *  @si
89f00 67 6e 61 6c 0a 09 09 09 20 2a 2f 0a 09 20 20 20  gnal.... */..   
89f10 20 20 20 20 20 74 68 69 73 2e 66 72 65 71 75 65       this.freque
89f20 6e 63 79 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53  ncy = new Tone.S
89f30 69 67 6e 61 6c 28 6f 70 74 69 6f 6e 73 2e 66 72  ignal(options.fr
89f40 65 71 75 65 6e 63 79 2c 20 54 6f 6e 65 2e 54 79  equency, Tone.Ty
89f50 70 65 2e 46 72 65 71 75 65 6e 63 79 29 3b 0a 09  pe.Frequency);..
89f60 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
89f70 2a 20 20 54 68 65 20 64 65 74 75 6e 65 20 63 6f  *  The detune co
89f80 6e 74 72 6f 6c 20 73 69 67 6e 61 6c 2e 0a 09 09  ntrol signal....
89f90 09 20 2a 20 20 40 74 79 70 65 20 7b 43 65 6e 74  . *  @type {Cent
89fa0 73 7d 0a 09 09 09 20 2a 20 20 40 73 69 67 6e 61  s}.... *  @signa
89fb0 6c 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  l.... */..      
89fc0 20 20 74 68 69 73 2e 64 65 74 75 6e 65 20 3d 20    this.detune = 
89fd0 74 68 69 73 2e 5f 63 61 72 72 69 65 72 2e 64 65  this._carrier.de
89fe0 74 75 6e 65 3b 0a 09 20 20 20 20 20 20 20 20 74  tune;..        t
89ff0 68 69 73 2e 64 65 74 75 6e 65 2e 76 61 6c 75 65  his.detune.value
8a000 20 3d 20 6f 70 74 69 6f 6e 73 2e 64 65 74 75 6e   = options.detun
8a010 65 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  e;..        /**.
8a020 09 09 09 20 2a 20 20 54 68 65 20 6d 6f 64 75 6c  ... *  The modul
8a030 61 74 69 6f 6e 20 69 6e 64 65 78 20 77 68 69 63  ation index whic
8a040 68 20 69 73 20 69 6e 20 65 73 73 65 6e 63 65 20  h is in essence 
8a050 74 68 65 20 64 65 70 74 68 20 6f 72 20 61 6d 6f  the depth or amo
8a060 75 6e 74 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  unt of the modul
8a070 61 74 69 6f 6e 2e 20 49 6e 20 6f 74 68 65 72 20  ation. In other 
8a080 74 65 72 6d 73 20 69 74 20 69 73 20 74 68 65 20  terms it is the 
8a090 0a 09 09 09 20 2a 20 20 72 61 74 69 6f 20 6f 66  .... *  ratio of
8a0a0 20 74 68 65 20 66 72 65 71 75 65 6e 63 79 20 6f   the frequency o
8a0b0 66 20 74 68 65 20 6d 6f 64 75 6c 61 74 69 6e 67  f the modulating
8a0c0 20 73 69 67 6e 61 6c 20 28 6d 66 29 20 74 6f 20   signal (mf) to 
8a0d0 74 68 65 20 61 6d 70 6c 69 74 75 64 65 20 6f 66  the amplitude of
8a0e0 20 74 68 65 20 0a 09 09 09 20 2a 20 20 6d 6f 64   the .... *  mod
8a0f0 75 6c 61 74 69 6e 67 20 73 69 67 6e 61 6c 20 28  ulating signal (
8a100 6d 61 29 20 2d 2d 20 61 73 20 69 6e 20 6d 61 2f  ma) -- as in ma/
8a110 6d 66 2e 20 0a 09 09 09 20 2a 09 40 74 79 70 65  mf. .... *.@type
8a120 20 7b 50 6f 73 69 74 69 76 65 7d 0a 09 09 09 20   {Positive}.... 
8a130 2a 09 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f  *.@signal.... */
8a140 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 6d  ..        this.m
8a150 6f 64 75 6c 61 74 69 6f 6e 49 6e 64 65 78 20 3d  odulationIndex =
8a160 20 6e 65 77 20 54 6f 6e 65 2e 4d 75 6c 74 69 70   new Tone.Multip
8a170 6c 79 28 6f 70 74 69 6f 6e 73 2e 6d 6f 64 75 6c  ly(options.modul
8a180 61 74 69 6f 6e 49 6e 64 65 78 29 3b 0a 09 20 20  ationIndex);..  
8a190 20 20 20 20 20 20 74 68 69 73 2e 6d 6f 64 75 6c        this.modul
8a1a0 61 74 69 6f 6e 49 6e 64 65 78 2e 75 6e 69 74 73  ationIndex.units
8a1b0 20 3d 20 54 6f 6e 65 2e 54 79 70 65 2e 50 6f 73   = Tone.Type.Pos
8a1c0 69 74 69 76 65 3b 0a 09 20 20 20 20 20 20 20 20  itive;..        
8a1d0 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 6d  /**.... *  The m
8a1e0 6f 64 75 6c 61 74 69 6e 67 20 6f 73 63 69 6c 6c  odulating oscill
8a1f0 61 74 6f 72 0a 09 09 09 20 2a 20 20 40 74 79 70  ator.... *  @typ
8a200 65 20 20 7b 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61  e  {Tone.Oscilla
8a210 74 6f 72 7d 0a 09 09 09 20 2a 20 20 40 70 72 69  tor}.... *  @pri
8a220 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20  vate.... */..   
8a230 20 20 20 20 20 74 68 69 73 2e 5f 6d 6f 64 75 6c       this._modul
8a240 61 74 6f 72 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  ator = new Tone.
8a250 4f 73 63 69 6c 6c 61 74 6f 72 28 6f 70 74 69 6f  Oscillator(optio
8a260 6e 73 2e 66 72 65 71 75 65 6e 63 79 2c 20 6f 70  ns.frequency, op
8a270 74 69 6f 6e 73 2e 6d 6f 64 75 6c 61 74 69 6f 6e  tions.modulation
8a280 54 79 70 65 29 3b 0a 09 20 20 20 20 20 20 20 20  Type);..        
8a290 2f 2a 2a 0a 09 09 09 20 2a 20 20 48 61 72 6d 6f  /**.... *  Harmo
8a2a0 6e 69 63 69 74 79 20 69 73 20 74 68 65 20 66 72  nicity is the fr
8a2b0 65 71 75 65 6e 63 79 20 72 61 74 69 6f 20 62 65  equency ratio be
8a2c0 74 77 65 65 6e 20 74 68 65 20 63 61 72 72 69 65  tween the carrie
8a2d0 72 20 61 6e 64 20 74 68 65 20 6d 6f 64 75 6c 61  r and the modula
8a2e0 74 6f 72 20 6f 73 63 69 6c 6c 61 74 6f 72 73 2e  tor oscillators.
8a2f0 20 0a 09 09 09 20 2a 20 20 41 20 68 61 72 6d 6f   .... *  A harmo
8a300 6e 69 63 69 74 79 20 6f 66 20 31 20 67 69 76 65  nicity of 1 give
8a310 73 20 62 6f 74 68 20 6f 73 63 69 6c 6c 61 74 6f  s both oscillato
8a320 72 73 20 74 68 65 20 73 61 6d 65 20 66 72 65 71  rs the same freq
8a330 75 65 6e 63 79 2e 20 0a 09 09 09 20 2a 20 20 48  uency. .... *  H
8a340 61 72 6d 6f 6e 69 63 69 74 79 20 3d 20 32 20 6d  armonicity = 2 m
8a350 65 61 6e 73 20 61 20 63 68 61 6e 67 65 20 6f 66  eans a change of
8a360 20 61 6e 20 6f 63 74 61 76 65 2e 20 0a 09 09 09   an octave. ....
8a370 20 2a 20 20 40 74 79 70 65 20 7b 50 6f 73 69 74   *  @type {Posit
8a380 69 76 65 7d 0a 09 09 09 20 2a 20 20 40 73 69 67  ive}.... *  @sig
8a390 6e 61 6c 0a 09 09 09 20 2a 20 20 40 65 78 61 6d  nal.... *  @exam
8a3a0 70 6c 65 0a 09 09 09 20 2a 20 2f 2f 70 69 74 63  ple.... * //pitc
8a3b0 68 20 74 68 65 20 6d 6f 64 75 6c 61 74 6f 72 20  h the modulator 
8a3c0 61 6e 20 6f 63 74 61 76 65 20 62 65 6c 6f 77 20  an octave below 
8a3d0 63 61 72 72 69 65 72 0a 09 09 09 20 2a 20 73 79  carrier.... * sy
8a3e0 6e 74 68 2e 68 61 72 6d 6f 6e 69 63 69 74 79 2e  nth.harmonicity.
8a3f0 76 61 6c 75 65 20 3d 20 30 2e 35 3b 0a 09 09 09  value = 0.5;....
8a400 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
8a410 73 2e 68 61 72 6d 6f 6e 69 63 69 74 79 20 3d 20  s.harmonicity = 
8a420 6e 65 77 20 54 6f 6e 65 2e 4d 75 6c 74 69 70 6c  new Tone.Multipl
8a430 79 28 6f 70 74 69 6f 6e 73 2e 68 61 72 6d 6f 6e  y(options.harmon
8a440 69 63 69 74 79 29 3b 0a 09 20 20 20 20 20 20 20  icity);..       
8a450 20 74 68 69 73 2e 68 61 72 6d 6f 6e 69 63 69 74   this.harmonicit
8a460 79 2e 75 6e 69 74 73 20 3d 20 54 6f 6e 65 2e 54  y.units = Tone.T
8a470 79 70 65 2e 50 6f 73 69 74 69 76 65 3b 0a 09 20  ype.Positive;.. 
8a480 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
8a490 20 20 74 68 65 20 6e 6f 64 65 20 77 68 65 72 65    the node where
8a4a0 20 74 68 65 20 6d 6f 64 75 6c 61 74 69 6f 6e 20   the modulation 
8a4b0 68 61 70 70 65 6e 73 0a 09 09 09 20 2a 20 20 40  happens.... *  @
8a4c0 74 79 70 65 20 7b 54 6f 6e 65 2e 47 61 69 6e 7d  type {Tone.Gain}
8a4d0 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  .... *  @private
8a4e0 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
8a4f0 20 74 68 69 73 2e 5f 6d 6f 64 75 6c 61 74 69 6f   this._modulatio
8a500 6e 4e 6f 64 65 20 3d 20 6e 65 77 20 54 6f 6e 65  nNode = new Tone
8a510 2e 47 61 69 6e 28 30 29 3b 0a 09 20 20 20 20 20  .Gain(0);..     
8a520 20 20 20 2f 2f 63 6f 6e 6e 65 63 74 69 6f 6e 73     //connections
8a530 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 66  ..        this.f
8a540 72 65 71 75 65 6e 63 79 2e 63 6f 6e 6e 65 63 74  requency.connect
8a550 28 74 68 69 73 2e 5f 63 61 72 72 69 65 72 2e 66  (this._carrier.f
8a560 72 65 71 75 65 6e 63 79 29 3b 0a 09 20 20 20 20  requency);..    
8a570 20 20 20 20 74 68 69 73 2e 66 72 65 71 75 65 6e      this.frequen
8a580 63 79 2e 63 68 61 69 6e 28 74 68 69 73 2e 68 61  cy.chain(this.ha
8a590 72 6d 6f 6e 69 63 69 74 79 2c 20 74 68 69 73 2e  rmonicity, this.
8a5a0 5f 6d 6f 64 75 6c 61 74 6f 72 2e 66 72 65 71 75  _modulator.frequ
8a5b0 65 6e 63 79 29 3b 0a 09 20 20 20 20 20 20 20 20  ency);..        
8a5c0 74 68 69 73 2e 66 72 65 71 75 65 6e 63 79 2e 63  this.frequency.c
8a5d0 68 61 69 6e 28 74 68 69 73 2e 6d 6f 64 75 6c 61  hain(this.modula
8a5e0 74 69 6f 6e 49 6e 64 65 78 2c 20 74 68 69 73 2e  tionIndex, this.
8a5f0 5f 6d 6f 64 75 6c 61 74 69 6f 6e 4e 6f 64 65 29  _modulationNode)
8a600 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
8a610 5f 6d 6f 64 75 6c 61 74 6f 72 2e 63 6f 6e 6e 65  _modulator.conne
8a620 63 74 28 74 68 69 73 2e 5f 6d 6f 64 75 6c 61 74  ct(this._modulat
8a630 69 6f 6e 4e 6f 64 65 2e 67 61 69 6e 29 3b 0a 09  ionNode.gain);..
8a640 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 6f          this._mo
8a650 64 75 6c 61 74 69 6f 6e 4e 6f 64 65 2e 63 6f 6e  dulationNode.con
8a660 6e 65 63 74 28 74 68 69 73 2e 5f 63 61 72 72 69  nect(this._carri
8a670 65 72 2e 66 72 65 71 75 65 6e 63 79 29 3b 0a 09  er.frequency);..
8a680 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 63 61          this._ca
8a690 72 72 69 65 72 2e 63 6f 6e 6e 65 63 74 28 74 68  rrier.connect(th
8a6a0 69 73 2e 6f 75 74 70 75 74 29 3b 0a 09 20 20 20  is.output);..   
8a6b0 20 20 20 20 20 74 68 69 73 2e 64 65 74 75 6e 65       this.detune
8a6c0 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e 5f 6d  .connect(this._m
8a6d0 6f 64 75 6c 61 74 6f 72 2e 64 65 74 75 6e 65 29  odulator.detune)
8a6e0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
8a6f0 70 68 61 73 65 20 3d 20 6f 70 74 69 6f 6e 73 2e  phase = options.
8a700 70 68 61 73 65 3b 0a 09 20 20 20 20 20 20 20 20  phase;..        
8a710 74 68 69 73 2e 5f 72 65 61 64 4f 6e 6c 79 28 5b  this._readOnly([
8a720 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 6d  ..            'm
8a730 6f 64 75 6c 61 74 69 6f 6e 49 6e 64 65 78 27 2c  odulationIndex',
8a740 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 66  ..            'f
8a750 72 65 71 75 65 6e 63 79 27 2c 0a 09 20 20 20 20  requency',..    
8a760 20 20 20 20 20 20 20 20 27 64 65 74 75 6e 65 27          'detune'
8a770 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
8a780 68 61 72 6d 6f 6e 69 63 69 74 79 27 0a 09 20 20  harmonicity'..  
8a790 20 20 20 20 20 20 5d 29 3b 0a 09 20 20 20 20 7d        ]);..    }
8a7a0 3b 0a 09 20 20 20 20 54 6f 6e 65 2e 65 78 74 65  ;..    Tone.exte
8a7b0 6e 64 28 54 6f 6e 65 2e 46 4d 4f 73 63 69 6c 6c  nd(Tone.FMOscill
8a7c0 61 74 6f 72 2c 20 54 6f 6e 65 2e 4f 73 63 69 6c  ator, Tone.Oscil
8a7d0 6c 61 74 6f 72 29 3b 0a 09 20 20 20 20 2f 2a 2a  lator);..    /**
8a7e0 0a 09 09 20 2a 20 20 64 65 66 61 75 6c 74 20 76  ... *  default v
8a7f0 61 6c 75 65 73 0a 09 09 20 2a 20 20 40 73 74 61  alues... *  @sta
8a800 74 69 63 0a 09 09 20 2a 20 20 40 74 79 70 65 20  tic... *  @type 
8a810 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 20 20 40  {Object}... *  @
8a820 63 6f 6e 73 74 0a 09 09 20 2a 2f 0a 09 20 20 20  const... */..   
8a830 20 54 6f 6e 65 2e 46 4d 4f 73 63 69 6c 6c 61 74   Tone.FMOscillat
8a840 6f 72 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b 0a  or.defaults = {.
8a850 09 20 20 20 20 20 20 20 20 27 66 72 65 71 75 65  .        'freque
8a860 6e 63 79 27 3a 20 34 34 30 2c 0a 09 20 20 20 20  ncy': 440,..    
8a870 20 20 20 20 27 64 65 74 75 6e 65 27 3a 20 30 2c      'detune': 0,
8a880 0a 09 20 20 20 20 20 20 20 20 27 70 68 61 73 65  ..        'phase
8a890 27 3a 20 30 2c 0a 09 20 20 20 20 20 20 20 20 27  ': 0,..        '
8a8a0 6d 6f 64 75 6c 61 74 69 6f 6e 49 6e 64 65 78 27  modulationIndex'
8a8b0 3a 20 32 2c 0a 09 20 20 20 20 20 20 20 20 27 6d  : 2,..        'm
8a8c0 6f 64 75 6c 61 74 69 6f 6e 54 79 70 65 27 3a 20  odulationType': 
8a8d0 27 73 71 75 61 72 65 27 2c 0a 09 20 20 20 20 20  'square',..     
8a8e0 20 20 20 27 68 61 72 6d 6f 6e 69 63 69 74 79 27     'harmonicity'
8a8f0 3a 20 31 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  : 1..    };..   
8a900 20 2f 2a 2a 0a 09 09 20 2a 20 20 73 74 61 72 74   /**... *  start
8a910 20 74 68 65 20 6f 73 63 69 6c 6c 61 74 6f 72 0a   the oscillator.
8a920 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 54  .. *  @param  {T
8a930 69 6d 65 7d 20 5b 74 69 6d 65 3d 6e 6f 77 5d 0a  ime} [time=now].
8a940 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
8a950 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 46  . */..    Tone.F
8a960 4d 4f 73 63 69 6c 6c 61 74 6f 72 2e 70 72 6f 74  MOscillator.prot
8a970 6f 74 79 70 65 2e 5f 73 74 61 72 74 20 3d 20 66  otype._start = f
8a980 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65 29 20 7b  unction (time) {
8a990 0a 09 20 20 20 20 20 20 20 20 74 69 6d 65 20 3d  ..        time =
8a9a0 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28   this.toSeconds(
8a9b0 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20  time);..        
8a9c0 74 68 69 73 2e 5f 6d 6f 64 75 6c 61 74 6f 72 2e  this._modulator.
8a9d0 73 74 61 72 74 28 74 69 6d 65 29 3b 0a 09 20 20  start(time);..  
8a9e0 20 20 20 20 20 20 74 68 69 73 2e 5f 63 61 72 72        this._carr
8a9f0 69 65 72 2e 73 74 61 72 74 28 74 69 6d 65 29 3b  ier.start(time);
8aa00 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
8aa10 2a 0a 09 09 20 2a 20 20 73 74 6f 70 20 74 68 65  *... *  stop the
8aa20 20 6f 73 63 69 6c 6c 61 74 6f 72 0a 09 09 20 2a   oscillator... *
8aa30 20 20 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 7d    @param  {Time}
8aa40 20 74 69 6d 65 20 28 6f 70 74 69 6f 6e 61 6c 29   time (optional)
8aa50 20 74 69 6d 69 6e 67 20 70 61 72 61 6d 65 74 65   timing paramete
8aa60 72 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  r... *  @private
8aa70 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
8aa80 2e 46 4d 4f 73 63 69 6c 6c 61 74 6f 72 2e 70 72  .FMOscillator.pr
8aa90 6f 74 6f 74 79 70 65 2e 5f 73 74 6f 70 20 3d 20  ototype._stop = 
8aaa0 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65 29 20  function (time) 
8aab0 7b 0a 09 20 20 20 20 20 20 20 20 74 69 6d 65 20  {..        time 
8aac0 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73  = this.toSeconds
8aad0 28 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20  (time);..       
8aae0 20 74 68 69 73 2e 5f 6d 6f 64 75 6c 61 74 6f 72   this._modulator
8aaf0 2e 73 74 6f 70 28 74 69 6d 65 29 3b 0a 09 20 20  .stop(time);..  
8ab00 20 20 20 20 20 20 74 68 69 73 2e 5f 63 61 72 72        this._carr
8ab10 69 65 72 2e 73 74 6f 70 28 74 69 6d 65 29 3b 0a  ier.stop(time);.
8ab20 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
8ab30 0a 09 09 20 2a 20 54 68 65 20 74 79 70 65 20 6f  ... * The type o
8ab40 66 20 74 68 65 20 63 61 72 72 69 65 72 20 6f 73  f the carrier os
8ab50 63 69 6c 6c 61 74 6f 72 0a 09 09 20 2a 20 40 6d  cillator... * @m
8ab60 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 46 4d 4f  emberOf Tone.FMO
8ab70 73 63 69 6c 6c 61 74 6f 72 23 0a 09 09 20 2a 20  scillator#... * 
8ab80 40 74 79 70 65 20 7b 73 74 72 69 6e 67 7d 0a 09  @type {string}..
8ab90 09 20 2a 20 40 6e 61 6d 65 20 74 79 70 65 0a 09  . * @name type..
8aba0 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74  . */..    Object
8abb0 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28  .defineProperty(
8abc0 54 6f 6e 65 2e 46 4d 4f 73 63 69 6c 6c 61 74 6f  Tone.FMOscillato
8abd0 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 74 79  r.prototype, 'ty
8abe0 70 65 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20  pe', {..        
8abf0 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29  get: function ()
8ac00 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8ac10 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 63 61 72  return this._car
8ac20 72 69 65 72 2e 74 79 70 65 3b 0a 09 20 20 20 20  rier.type;..    
8ac30 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20      },..        
8ac40 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 74  set: function (t
8ac50 79 70 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ype) {..        
8ac60 20 20 20 20 74 68 69 73 2e 5f 63 61 72 72 69 65      this._carrie
8ac70 72 2e 74 79 70 65 20 3d 20 74 79 70 65 3b 0a 09  r.type = type;..
8ac80 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d          }..    }
8ac90 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  );..    /**... *
8aca0 20 54 68 65 20 74 79 70 65 20 6f 66 20 74 68 65   The type of the
8acb0 20 6d 6f 64 75 6c 61 74 6f 72 20 6f 73 63 69 6c   modulator oscil
8acc0 6c 61 74 6f 72 0a 09 09 20 2a 20 40 6d 65 6d 62  lator... * @memb
8acd0 65 72 4f 66 20 54 6f 6e 65 2e 46 4d 4f 73 63 69  erOf Tone.FMOsci
8ace0 6c 6c 61 74 6f 72 23 0a 09 09 20 2a 20 40 74 79  llator#... * @ty
8acf0 70 65 20 7b 53 74 72 69 6e 67 7d 0a 09 09 20 2a  pe {String}... *
8ad00 20 40 6e 61 6d 65 20 6d 6f 64 75 6c 61 74 69 6f   @name modulatio
8ad10 6e 54 79 70 65 0a 09 09 20 2a 2f 0a 09 20 20 20  nType... */..   
8ad20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72   Object.definePr
8ad30 6f 70 65 72 74 79 28 54 6f 6e 65 2e 46 4d 4f 73  operty(Tone.FMOs
8ad40 63 69 6c 6c 61 74 6f 72 2e 70 72 6f 74 6f 74 79  cillator.prototy
8ad50 70 65 2c 20 27 6d 6f 64 75 6c 61 74 69 6f 6e 54  pe, 'modulationT
8ad60 79 70 65 27 2c 20 7b 0a 09 20 20 20 20 20 20 20  ype', {..       
8ad70 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   get: function (
8ad80 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
8ad90 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 6d 6f   return this._mo
8ada0 64 75 6c 61 74 6f 72 2e 74 79 70 65 3b 0a 09 20  dulator.type;.. 
8adb0 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20         },..     
8adc0 20 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e     set: function
8add0 20 28 74 79 70 65 29 20 7b 0a 09 20 20 20 20 20   (type) {..     
8ade0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 6f 64         this._mod
8adf0 75 6c 61 74 6f 72 2e 74 79 70 65 20 3d 20 74 79  ulator.type = ty
8ae00 70 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  pe;..        }..
8ae10 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a      });..    /**
8ae20 0a 09 09 20 2a 20 54 68 65 20 70 68 61 73 65 20  ... * The phase 
8ae30 6f 66 20 74 68 65 20 6f 73 63 69 6c 6c 61 74 6f  of the oscillato
8ae40 72 20 69 6e 20 64 65 67 72 65 65 73 2e 0a 09 09  r in degrees....
8ae50 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e   * @memberOf Ton
8ae60 65 2e 46 4d 4f 73 63 69 6c 6c 61 74 6f 72 23 0a  e.FMOscillator#.
8ae70 09 09 20 2a 20 40 74 79 70 65 20 7b 6e 75 6d 62  .. * @type {numb
8ae80 65 72 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 70  er}... * @name p
8ae90 68 61 73 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20  hase... */..    
8aea0 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f  Object.definePro
8aeb0 70 65 72 74 79 28 54 6f 6e 65 2e 46 4d 4f 73 63  perty(Tone.FMOsc
8aec0 69 6c 6c 61 74 6f 72 2e 70 72 6f 74 6f 74 79 70  illator.prototyp
8aed0 65 2c 20 27 70 68 61 73 65 27 2c 20 7b 0a 09 20  e, 'phase', {.. 
8aee0 20 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63         get: func
8aef0 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
8af00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
8af10 69 73 2e 5f 63 61 72 72 69 65 72 2e 70 68 61 73  is._carrier.phas
8af20 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09  e;..        },..
8af30 20 20 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e          set: fun
8af40 63 74 69 6f 6e 20 28 70 68 61 73 65 29 20 7b 0a  ction (phase) {.
8af50 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
8af60 73 2e 5f 63 61 72 72 69 65 72 2e 70 68 61 73 65  s._carrier.phase
8af70 20 3d 20 70 68 61 73 65 3b 0a 09 20 20 20 20 20   = phase;..     
8af80 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 6f 64         this._mod
8af90 75 6c 61 74 6f 72 2e 70 68 61 73 65 20 3d 20 70  ulator.phase = p
8afa0 68 61 73 65 3b 0a 09 20 20 20 20 20 20 20 20 7d  hase;..        }
8afb0 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f  ..    });..    /
8afc0 2a 2a 0a 09 09 20 2a 20 54 68 65 20 70 61 72 74  **... * The part
8afd0 69 61 6c 73 20 6f 66 20 74 68 65 20 63 61 72 72  ials of the carr
8afe0 69 65 72 20 77 61 76 65 66 6f 72 6d 2e 20 41 20  ier waveform. A 
8aff0 70 61 72 74 69 61 6c 20 72 65 70 72 65 73 65 6e  partial represen
8b000 74 73 20 0a 09 09 20 2a 20 74 68 65 20 61 6d 70  ts ... * the amp
8b010 6c 69 74 75 64 65 20 61 74 20 61 20 68 61 72 6d  litude at a harm
8b020 6f 6e 69 63 2e 20 54 68 65 20 66 69 72 73 74 20  onic. The first 
8b030 68 61 72 6d 6f 6e 69 63 20 69 73 20 74 68 65 20  harmonic is the 
8b040 0a 09 09 20 2a 20 66 75 6e 64 61 6d 65 6e 74 61  ... * fundamenta
8b050 6c 20 66 72 65 71 75 65 6e 63 79 2c 20 74 68 65  l frequency, the
8b060 20 73 65 63 6f 6e 64 20 69 73 20 74 68 65 20 6f   second is the o
8b070 63 74 61 76 65 20 61 6e 64 20 73 6f 20 6f 6e 0a  ctave and so on.
8b080 09 09 20 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  .. * following t
8b090 68 65 20 68 61 72 6d 6f 6e 69 63 20 73 65 72 69  he harmonic seri
8b0a0 65 73 2e 20 0a 09 09 20 2a 20 53 65 74 74 69 6e  es. ... * Settin
8b0b0 67 20 74 68 69 73 20 76 61 6c 75 65 20 77 69 6c  g this value wil
8b0c0 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  l automatically 
8b0d0 73 65 74 20 74 68 65 20 74 79 70 65 20 74 6f 20  set the type to 
8b0e0 22 63 75 73 74 6f 6d 22 2e 20 0a 09 09 20 2a 20  "custom". ... * 
8b0f0 54 68 65 20 76 61 6c 75 65 20 69 73 20 61 6e 20  The value is an 
8b100 65 6d 70 74 79 20 61 72 72 61 79 20 77 68 65 6e  empty array when
8b110 20 74 68 65 20 74 79 70 65 20 69 73 20 6e 6f 74   the type is not
8b120 20 22 63 75 73 74 6f 6d 22 2e 20 0a 09 09 20 2a   "custom". ... *
8b130 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e   @memberOf Tone.
8b140 46 4d 4f 73 63 69 6c 6c 61 74 6f 72 23 0a 09 09  FMOscillator#...
8b150 20 2a 20 40 74 79 70 65 20 7b 41 72 72 61 79 7d   * @type {Array}
8b160 0a 09 09 20 2a 20 40 6e 61 6d 65 20 70 61 72 74  ... * @name part
8b170 69 61 6c 73 0a 09 09 20 2a 20 40 65 78 61 6d 70  ials... * @examp
8b180 6c 65 0a 09 09 20 2a 20 6f 73 63 2e 70 61 72 74  le... * osc.part
8b190 69 61 6c 73 20 3d 20 5b 31 2c 20 30 2e 32 2c 20  ials = [1, 0.2, 
8b1a0 30 2e 30 31 5d 3b 0a 09 09 20 2a 2f 0a 09 20 20  0.01];... */..  
8b1b0 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50    Object.defineP
8b1c0 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 46 4d 4f  roperty(Tone.FMO
8b1d0 73 63 69 6c 6c 61 74 6f 72 2e 70 72 6f 74 6f 74  scillator.protot
8b1e0 79 70 65 2c 20 27 70 61 72 74 69 61 6c 73 27 2c  ype, 'partials',
8b1f0 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a   {..        get:
8b200 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
8b210 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
8b220 72 6e 20 74 68 69 73 2e 5f 63 61 72 72 69 65 72  rn this._carrier
8b230 2e 70 61 72 74 69 61 6c 73 3b 0a 09 20 20 20 20  .partials;..    
8b240 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20      },..        
8b250 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 70  set: function (p
8b260 61 72 74 69 61 6c 73 29 20 7b 0a 09 20 20 20 20  artials) {..    
8b270 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 63 61          this._ca
8b280 72 72 69 65 72 2e 70 61 72 74 69 61 6c 73 20 3d  rrier.partials =
8b290 20 70 61 72 74 69 61 6c 73 3b 0a 09 20 20 20 20   partials;..    
8b2a0 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09      }..    });..
8b2b0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 6c      /**... *  Cl
8b2c0 65 61 6e 20 75 70 2e 0a 09 09 20 2a 20 20 40 72  ean up.... *  @r
8b2d0 65 74 75 72 6e 20 7b 54 6f 6e 65 2e 46 4d 4f 73  eturn {Tone.FMOs
8b2e0 63 69 6c 6c 61 74 6f 72 7d 20 74 68 69 73 0a 09  cillator} this..
8b2f0 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 46  . */..    Tone.F
8b300 4d 4f 73 63 69 6c 6c 61 74 6f 72 2e 70 72 6f 74  MOscillator.prot
8b310 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20  otype.dispose = 
8b320 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
8b330 20 20 20 20 20 20 20 54 6f 6e 65 2e 53 6f 75 72         Tone.Sour
8b340 63 65 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73  ce.prototype.dis
8b350 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b  pose.call(this);
8b360 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
8b370 77 72 69 74 61 62 6c 65 28 5b 0a 09 20 20 20 20  writable([..    
8b380 20 20 20 20 20 20 20 20 27 6d 6f 64 75 6c 61 74          'modulat
8b390 69 6f 6e 49 6e 64 65 78 27 2c 0a 09 20 20 20 20  ionIndex',..    
8b3a0 20 20 20 20 20 20 20 20 27 66 72 65 71 75 65 6e          'frequen
8b3b0 63 79 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20  cy',..          
8b3c0 20 20 27 64 65 74 75 6e 65 27 2c 0a 09 20 20 20    'detune',..   
8b3d0 20 20 20 20 20 20 20 20 20 27 68 61 72 6d 6f 6e           'harmon
8b3e0 69 63 69 74 79 27 0a 09 20 20 20 20 20 20 20 20  icity'..        
8b3f0 5d 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ]);..        thi
8b400 73 2e 66 72 65 71 75 65 6e 63 79 2e 64 69 73 70  s.frequency.disp
8b410 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ose();..        
8b420 74 68 69 73 2e 66 72 65 71 75 65 6e 63 79 20 3d  this.frequency =
8b430 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
8b440 74 68 69 73 2e 64 65 74 75 6e 65 20 3d 20 6e 75  this.detune = nu
8b450 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ll;..        thi
8b460 73 2e 68 61 72 6d 6f 6e 69 63 69 74 79 2e 64 69  s.harmonicity.di
8b470 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
8b480 20 20 74 68 69 73 2e 68 61 72 6d 6f 6e 69 63 69    this.harmonici
8b490 74 79 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  ty = null;..    
8b4a0 20 20 20 20 74 68 69 73 2e 5f 63 61 72 72 69 65      this._carrie
8b4b0 72 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20  r.dispose();..  
8b4c0 20 20 20 20 20 20 74 68 69 73 2e 5f 63 61 72 72        this._carr
8b4d0 69 65 72 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  ier = null;..   
8b4e0 20 20 20 20 20 74 68 69 73 2e 5f 6d 6f 64 75 6c       this._modul
8b4f0 61 74 6f 72 2e 64 69 73 70 6f 73 65 28 29 3b 0a  ator.dispose();.
8b500 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d  .        this._m
8b510 6f 64 75 6c 61 74 6f 72 20 3d 20 6e 75 6c 6c 3b  odulator = null;
8b520 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
8b530 6d 6f 64 75 6c 61 74 69 6f 6e 4e 6f 64 65 2e 64  modulationNode.d
8b540 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20  ispose();..     
8b550 20 20 20 74 68 69 73 2e 5f 6d 6f 64 75 6c 61 74     this._modulat
8b560 69 6f 6e 4e 6f 64 65 20 3d 20 6e 75 6c 6c 3b 0a  ionNode = null;.
8b570 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 6d 6f  .        this.mo
8b580 64 75 6c 61 74 69 6f 6e 49 6e 64 65 78 2e 64 69  dulationIndex.di
8b590 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
8b5a0 20 20 74 68 69 73 2e 6d 6f 64 75 6c 61 74 69 6f    this.modulatio
8b5b0 6e 49 6e 64 65 78 20 3d 20 6e 75 6c 6c 3b 0a 09  nIndex = null;..
8b5c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
8b5d0 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  his;..    };..  
8b5e0 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 46 4d    return Tone.FM
8b5f0 4f 73 63 69 6c 6c 61 74 6f 72 3b 0a 09 7d 29 3b  Oscillator;..});
8b600 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f  ..Module(functio
8b610 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20  n (Tone) {..    
8b620 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
8b630 40 63 6c 61 73 73 20 54 6f 6e 65 2e 41 4d 4f 73  @class Tone.AMOs
8b640 63 69 6c 6c 61 74 6f 72 20 0a 09 09 20 2a 0a 09  cillator ... *..
8b650 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b 54  . *  @extends {T
8b660 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f 72 7d 0a  one.Oscillator}.
8b670 09 09 20 2a 20 20 40 63 6f 6e 73 74 72 75 63 74  .. *  @construct
8b680 6f 72 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  or... *  @param 
8b690 7b 46 72 65 71 75 65 6e 63 79 7d 20 66 72 65 71  {Frequency} freq
8b6a0 75 65 6e 63 79 20 54 68 65 20 73 74 61 72 74 69  uency The starti
8b6b0 6e 67 20 66 72 65 71 75 65 6e 63 79 20 6f 66 20  ng frequency of 
8b6c0 74 68 65 20 6f 73 63 69 6c 6c 61 74 6f 72 2e 20  the oscillator. 
8b6d0 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 53  ... *  @param {S
8b6e0 74 72 69 6e 67 7d 20 74 79 70 65 20 54 68 65 20  tring} type The 
8b6f0 74 79 70 65 20 6f 66 20 74 68 65 20 63 61 72 72  type of the carr
8b700 69 65 72 20 6f 73 63 69 6c 6c 61 74 6f 72 2e 0a  ier oscillator..
8b710 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 53 74  .. *  @param {St
8b720 72 69 6e 67 7d 20 6d 6f 64 75 6c 61 74 69 6f 6e  ring} modulation
8b730 54 79 70 65 20 54 68 65 20 74 79 70 65 20 6f 66  Type The type of
8b740 20 74 68 65 20 6d 6f 64 75 6c 61 74 6f 72 20 6f   the modulator o
8b750 73 63 69 6c 6c 61 74 6f 72 2e 0a 09 09 20 2a 20  scillator.... * 
8b760 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 2f   @example... * /
8b770 2f 61 20 73 69 6e 65 20 6f 73 63 69 6c 6c 61 74  /a sine oscillat
8b780 6f 72 20 66 72 65 71 75 65 6e 63 79 2d 6d 6f 64  or frequency-mod
8b790 75 6c 61 74 65 64 20 62 79 20 61 20 73 71 75 61  ulated by a squa
8b7a0 72 65 20 77 61 76 65 0a 09 09 20 2a 20 76 61 72  re wave... * var
8b7b0 20 66 6d 4f 73 63 20 3d 20 6e 65 77 20 54 6f 6e   fmOsc = new Ton
8b7c0 65 2e 41 4d 4f 73 63 69 6c 6c 61 74 6f 72 28 22  e.AMOscillator("
8b7d0 41 62 33 22 2c 20 22 73 69 6e 65 22 2c 20 22 73  Ab3", "sine", "s
8b7e0 71 75 61 72 65 22 29 2e 74 6f 4d 61 73 74 65 72  quare").toMaster
8b7f0 28 29 2e 73 74 61 72 74 28 29 3b 0a 09 09 20 2a  ().start();... *
8b800 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 41 4d 4f 73  /..    Tone.AMOs
8b810 63 69 6c 6c 61 74 6f 72 20 3d 20 66 75 6e 63 74  cillator = funct
8b820 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
8b830 20 20 76 61 72 20 6f 70 74 69 6f 6e 73 20 3d 20    var options = 
8b840 74 68 69 73 2e 6f 70 74 69 6f 6e 73 4f 62 6a 65  this.optionsObje
8b850 63 74 28 61 72 67 75 6d 65 6e 74 73 2c 20 5b 0a  ct(arguments, [.
8b860 09 20 20 20 20 20 20 20 20 20 20 20 20 27 66 72  .            'fr
8b870 65 71 75 65 6e 63 79 27 2c 0a 09 20 20 20 20 20  equency',..     
8b880 20 20 20 20 20 20 20 27 74 79 70 65 27 2c 0a 09         'type',..
8b890 20 20 20 20 20 20 20 20 20 20 20 20 27 6d 6f 64              'mod
8b8a0 75 6c 61 74 69 6f 6e 54 79 70 65 27 0a 09 20 20  ulationType'..  
8b8b0 20 20 20 20 20 20 5d 2c 20 54 6f 6e 65 2e 41 4d        ], Tone.AM
8b8c0 4f 73 63 69 6c 6c 61 74 6f 72 2e 64 65 66 61 75  Oscillator.defau
8b8d0 6c 74 73 29 3b 0a 09 20 20 20 20 20 20 20 20 54  lts);..        T
8b8e0 6f 6e 65 2e 53 6f 75 72 63 65 2e 63 61 6c 6c 28  one.Source.call(
8b8f0 74 68 69 73 2c 20 6f 70 74 69 6f 6e 73 29 3b 0a  this, options);.
8b900 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
8b910 20 2a 20 20 54 68 65 20 63 61 72 72 69 65 72 20   *  The carrier 
8b920 6f 73 63 69 6c 6c 61 74 6f 72 0a 09 09 09 20 2a  oscillator.... *
8b930 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 4f 73    @type {Tone.Os
8b940 63 69 6c 6c 61 74 6f 72 7d 0a 09 09 09 20 2a 20  cillator}.... * 
8b950 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f   @private.... */
8b960 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
8b970 63 61 72 72 69 65 72 20 3d 20 6e 65 77 20 54 6f  carrier = new To
8b980 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f 72 28 6f 70  ne.Oscillator(op
8b990 74 69 6f 6e 73 2e 66 72 65 71 75 65 6e 63 79 2c  tions.frequency,
8b9a0 20 6f 70 74 69 6f 6e 73 2e 74 79 70 65 29 3b 0a   options.type);.
8b9b0 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
8b9c0 20 2a 20 20 54 68 65 20 6f 73 63 69 6c 6c 61 74   *  The oscillat
8b9d0 6f 72 27 73 20 66 72 65 71 75 65 6e 63 79 0a 09  or's frequency..
8b9e0 09 09 20 2a 20 20 40 74 79 70 65 20 7b 46 72 65  .. *  @type {Fre
8b9f0 71 75 65 6e 63 79 7d 0a 09 09 09 20 2a 20 20 40  quency}.... *  @
8ba00 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f 0a 09 20  signal.... */.. 
8ba10 20 20 20 20 20 20 20 74 68 69 73 2e 66 72 65 71         this.freq
8ba20 75 65 6e 63 79 20 3d 20 74 68 69 73 2e 5f 63 61  uency = this._ca
8ba30 72 72 69 65 72 2e 66 72 65 71 75 65 6e 63 79 3b  rrier.frequency;
8ba40 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
8ba50 09 20 2a 20 20 54 68 65 20 64 65 74 75 6e 65 20  . *  The detune 
8ba60 63 6f 6e 74 72 6f 6c 20 73 69 67 6e 61 6c 2e 0a  control signal..
8ba70 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 43 65  ... *  @type {Ce
8ba80 6e 74 73 7d 0a 09 09 09 20 2a 20 20 40 73 69 67  nts}.... *  @sig
8ba90 6e 61 6c 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  nal.... */..    
8baa0 20 20 20 20 74 68 69 73 2e 64 65 74 75 6e 65 20      this.detune 
8bab0 3d 20 74 68 69 73 2e 5f 63 61 72 72 69 65 72 2e  = this._carrier.
8bac0 64 65 74 75 6e 65 3b 0a 09 20 20 20 20 20 20 20  detune;..       
8bad0 20 74 68 69 73 2e 64 65 74 75 6e 65 2e 76 61 6c   this.detune.val
8bae0 75 65 20 3d 20 6f 70 74 69 6f 6e 73 2e 64 65 74  ue = options.det
8baf0 75 6e 65 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a  une;..        /*
8bb00 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 6d 6f 64  *.... *  The mod
8bb10 75 6c 61 74 69 6e 67 20 6f 73 63 69 6c 6c 61 74  ulating oscillat
8bb20 6f 72 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  or.... *  @type 
8bb30 20 7b 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f   {Tone.Oscillato
8bb40 72 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61  r}.... *  @priva
8bb50 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  te.... */..     
8bb60 20 20 20 74 68 69 73 2e 5f 6d 6f 64 75 6c 61 74     this._modulat
8bb70 6f 72 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4f 73  or = new Tone.Os
8bb80 63 69 6c 6c 61 74 6f 72 28 6f 70 74 69 6f 6e 73  cillator(options
8bb90 2e 66 72 65 71 75 65 6e 63 79 2c 20 6f 70 74 69  .frequency, opti
8bba0 6f 6e 73 2e 6d 6f 64 75 6c 61 74 69 6f 6e 54 79  ons.modulationTy
8bbb0 70 65 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a  pe);..        /*
8bbc0 2a 0a 09 09 09 20 2a 20 20 63 6f 6e 76 65 72 74  *.... *  convert
8bbd0 20 74 68 65 20 2d 31 2c 31 20 6f 75 74 70 75 74   the -1,1 output
8bbe0 20 74 6f 20 30 2c 31 0a 09 09 09 20 2a 20 20 40   to 0,1.... *  @
8bbf0 74 79 70 65 20 7b 54 6f 6e 65 2e 41 75 64 69 6f  type {Tone.Audio
8bc00 54 6f 47 61 69 6e 7d 0a 09 09 09 20 2a 20 20 40  ToGain}.... *  @
8bc10 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
8bc20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 6f          this._mo
8bc30 64 75 6c 61 74 69 6f 6e 53 63 61 6c 65 20 3d 20  dulationScale = 
8bc40 6e 65 77 20 54 6f 6e 65 2e 41 75 64 69 6f 54 6f  new Tone.AudioTo
8bc50 47 61 69 6e 28 29 3b 0a 09 20 20 20 20 20 20 20  Gain();..       
8bc60 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 48 61 72 6d   /**.... *  Harm
8bc70 6f 6e 69 63 69 74 79 20 69 73 20 74 68 65 20 66  onicity is the f
8bc80 72 65 71 75 65 6e 63 79 20 72 61 74 69 6f 20 62  requency ratio b
8bc90 65 74 77 65 65 6e 20 74 68 65 20 63 61 72 72 69  etween the carri
8bca0 65 72 20 61 6e 64 20 74 68 65 20 6d 6f 64 75 6c  er and the modul
8bcb0 61 74 6f 72 20 6f 73 63 69 6c 6c 61 74 6f 72 73  ator oscillators
8bcc0 2e 20 0a 09 09 09 20 2a 20 20 41 20 68 61 72 6d  . .... *  A harm
8bcd0 6f 6e 69 63 69 74 79 20 6f 66 20 31 20 67 69 76  onicity of 1 giv
8bce0 65 73 20 62 6f 74 68 20 6f 73 63 69 6c 6c 61 74  es both oscillat
8bcf0 6f 72 73 20 74 68 65 20 73 61 6d 65 20 66 72 65  ors the same fre
8bd00 71 75 65 6e 63 79 2e 20 0a 09 09 09 20 2a 20 20  quency. .... *  
8bd10 48 61 72 6d 6f 6e 69 63 69 74 79 20 3d 20 32 20  Harmonicity = 2 
8bd20 6d 65 61 6e 73 20 61 20 63 68 61 6e 67 65 20 6f  means a change o
8bd30 66 20 61 6e 20 6f 63 74 61 76 65 2e 20 0a 09 09  f an octave. ...
8bd40 09 20 2a 20 20 40 74 79 70 65 20 7b 50 6f 73 69  . *  @type {Posi
8bd50 74 69 76 65 7d 0a 09 09 09 20 2a 20 20 40 73 69  tive}.... *  @si
8bd60 67 6e 61 6c 0a 09 09 09 20 2a 20 20 40 65 78 61  gnal.... *  @exa
8bd70 6d 70 6c 65 0a 09 09 09 20 2a 20 2f 2f 70 69 74  mple.... * //pit
8bd80 63 68 20 74 68 65 20 6d 6f 64 75 6c 61 74 6f 72  ch the modulator
8bd90 20 61 6e 20 6f 63 74 61 76 65 20 62 65 6c 6f 77   an octave below
8bda0 20 63 61 72 72 69 65 72 0a 09 09 09 20 2a 20 73   carrier.... * s
8bdb0 79 6e 74 68 2e 68 61 72 6d 6f 6e 69 63 69 74 79  ynth.harmonicity
8bdc0 2e 76 61 6c 75 65 20 3d 20 30 2e 35 3b 0a 09 09  .value = 0.5;...
8bdd0 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
8bde0 69 73 2e 68 61 72 6d 6f 6e 69 63 69 74 79 20 3d  is.harmonicity =
8bdf0 20 6e 65 77 20 54 6f 6e 65 2e 4d 75 6c 74 69 70   new Tone.Multip
8be00 6c 79 28 6f 70 74 69 6f 6e 73 2e 68 61 72 6d 6f  ly(options.harmo
8be10 6e 69 63 69 74 79 29 3b 0a 09 20 20 20 20 20 20  nicity);..      
8be20 20 20 74 68 69 73 2e 68 61 72 6d 6f 6e 69 63 69    this.harmonici
8be30 74 79 2e 75 6e 69 74 73 20 3d 20 54 6f 6e 65 2e  ty.units = Tone.
8be40 54 79 70 65 2e 50 6f 73 69 74 69 76 65 3b 0a 09  Type.Positive;..
8be50 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
8be60 2a 20 20 74 68 65 20 6e 6f 64 65 20 77 68 65 72  *  the node wher
8be70 65 20 74 68 65 20 6d 6f 64 75 6c 61 74 69 6f 6e  e the modulation
8be80 20 68 61 70 70 65 6e 73 0a 09 09 09 20 2a 20 20   happens.... *  
8be90 40 74 79 70 65 20 7b 54 6f 6e 65 2e 47 61 69 6e  @type {Tone.Gain
8bea0 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  }.... *  @privat
8beb0 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
8bec0 20 20 74 68 69 73 2e 5f 6d 6f 64 75 6c 61 74 69    this._modulati
8bed0 6f 6e 4e 6f 64 65 20 3d 20 6e 65 77 20 54 6f 6e  onNode = new Ton
8bee0 65 2e 47 61 69 6e 28 30 29 3b 0a 09 20 20 20 20  e.Gain(0);..    
8bef0 20 20 20 20 2f 2f 63 6f 6e 6e 65 63 74 69 6f 6e      //connection
8bf00 73 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  s..        this.
8bf10 66 72 65 71 75 65 6e 63 79 2e 63 68 61 69 6e 28  frequency.chain(
8bf20 74 68 69 73 2e 68 61 72 6d 6f 6e 69 63 69 74 79  this.harmonicity
8bf30 2c 20 74 68 69 73 2e 5f 6d 6f 64 75 6c 61 74 6f  , this._modulato
8bf40 72 2e 66 72 65 71 75 65 6e 63 79 29 3b 0a 09 20  r.frequency);.. 
8bf50 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 74 75         this.detu
8bf60 6e 65 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e  ne.connect(this.
8bf70 5f 6d 6f 64 75 6c 61 74 6f 72 2e 64 65 74 75 6e  _modulator.detun
8bf80 65 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  e);..        thi
8bf90 73 2e 5f 6d 6f 64 75 6c 61 74 6f 72 2e 63 68 61  s._modulator.cha
8bfa0 69 6e 28 74 68 69 73 2e 5f 6d 6f 64 75 6c 61 74  in(this._modulat
8bfb0 69 6f 6e 53 63 61 6c 65 2c 20 74 68 69 73 2e 5f  ionScale, this._
8bfc0 6d 6f 64 75 6c 61 74 69 6f 6e 4e 6f 64 65 2e 67  modulationNode.g
8bfd0 61 69 6e 29 3b 0a 09 20 20 20 20 20 20 20 20 74  ain);..        t
8bfe0 68 69 73 2e 5f 63 61 72 72 69 65 72 2e 63 68 61  his._carrier.cha
8bff0 69 6e 28 74 68 69 73 2e 5f 6d 6f 64 75 6c 61 74  in(this._modulat
8c000 69 6f 6e 4e 6f 64 65 2c 20 74 68 69 73 2e 6f 75  ionNode, this.ou
8c010 74 70 75 74 29 3b 0a 09 20 20 20 20 20 20 20 20  tput);..        
8c020 74 68 69 73 2e 70 68 61 73 65 20 3d 20 6f 70 74  this.phase = opt
8c030 69 6f 6e 73 2e 70 68 61 73 65 3b 0a 09 20 20 20  ions.phase;..   
8c040 20 20 20 20 20 74 68 69 73 2e 5f 72 65 61 64 4f       this._readO
8c050 6e 6c 79 28 5b 0a 09 20 20 20 20 20 20 20 20 20  nly([..         
8c060 20 20 20 27 66 72 65 71 75 65 6e 63 79 27 2c 0a     'frequency',.
8c070 09 20 20 20 20 20 20 20 20 20 20 20 20 27 64 65  .            'de
8c080 74 75 6e 65 27 2c 0a 09 20 20 20 20 20 20 20 20  tune',..        
8c090 20 20 20 20 27 68 61 72 6d 6f 6e 69 63 69 74 79      'harmonicity
8c0a0 27 0a 09 20 20 20 20 20 20 20 20 5d 29 3b 0a 09  '..        ]);..
8c0b0 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65      };..    Tone
8c0c0 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 41 4d 4f  .extend(Tone.AMO
8c0d0 73 63 69 6c 6c 61 74 6f 72 2c 20 54 6f 6e 65 2e  scillator, Tone.
8c0e0 4f 73 63 69 6c 6c 61 74 6f 72 29 3b 0a 09 20 20  Oscillator);..  
8c0f0 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 64 65 66 61    /**... *  defa
8c100 75 6c 74 20 76 61 6c 75 65 73 0a 09 09 20 2a 20  ult values... * 
8c110 20 40 73 74 61 74 69 63 0a 09 09 20 2a 20 20 40   @static... *  @
8c120 74 79 70 65 20 7b 4f 62 6a 65 63 74 7d 0a 09 09  type {Object}...
8c130 20 2a 20 20 40 63 6f 6e 73 74 0a 09 09 20 2a 2f   *  @const... */
8c140 0a 09 20 20 20 20 54 6f 6e 65 2e 41 4d 4f 73 63  ..    Tone.AMOsc
8c150 69 6c 6c 61 74 6f 72 2e 64 65 66 61 75 6c 74 73  illator.defaults
8c160 20 3d 20 7b 0a 09 20 20 20 20 20 20 20 20 27 66   = {..        'f
8c170 72 65 71 75 65 6e 63 79 27 3a 20 34 34 30 2c 0a  requency': 440,.
8c180 09 20 20 20 20 20 20 20 20 27 64 65 74 75 6e 65  .        'detune
8c190 27 3a 20 30 2c 0a 09 20 20 20 20 20 20 20 20 27  ': 0,..        '
8c1a0 70 68 61 73 65 27 3a 20 30 2c 0a 09 20 20 20 20  phase': 0,..    
8c1b0 20 20 20 20 27 6d 6f 64 75 6c 61 74 69 6f 6e 54      'modulationT
8c1c0 79 70 65 27 3a 20 27 73 71 75 61 72 65 27 2c 0a  ype': 'square',.
8c1d0 09 20 20 20 20 20 20 20 20 27 68 61 72 6d 6f 6e  .        'harmon
8c1e0 69 63 69 74 79 27 3a 20 31 0a 09 20 20 20 20 7d  icity': 1..    }
8c1f0 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
8c200 20 73 74 61 72 74 20 74 68 65 20 6f 73 63 69 6c   start the oscil
8c210 6c 61 74 6f 72 0a 09 09 20 2a 20 20 40 70 61 72  lator... *  @par
8c220 61 6d 20 20 7b 54 69 6d 65 7d 20 5b 74 69 6d 65  am  {Time} [time
8c230 3d 6e 6f 77 5d 0a 09 09 20 2a 20 20 40 70 72 69  =now]... *  @pri
8c240 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20  vate... */..    
8c250 54 6f 6e 65 2e 41 4d 4f 73 63 69 6c 6c 61 74 6f  Tone.AMOscillato
8c260 72 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 73 74 61  r.prototype._sta
8c270 72 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74  rt = function (t
8c280 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ime) {..        
8c290 74 69 6d 65 20 3d 20 74 68 69 73 2e 74 6f 53 65  time = this.toSe
8c2a0 63 6f 6e 64 73 28 74 69 6d 65 29 3b 0a 09 20 20  conds(time);..  
8c2b0 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 6f 64 75        this._modu
8c2c0 6c 61 74 6f 72 2e 73 74 61 72 74 28 74 69 6d 65  lator.start(time
8c2d0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
8c2e0 2e 5f 63 61 72 72 69 65 72 2e 73 74 61 72 74 28  ._carrier.start(
8c2f0 74 69 6d 65 29 3b 0a 09 20 20 20 20 7d 3b 0a 09  time);..    };..
8c300 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 73 74      /**... *  st
8c310 6f 70 20 74 68 65 20 6f 73 63 69 6c 6c 61 74 6f  op the oscillato
8c320 72 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20  r... *  @param  
8c330 7b 54 69 6d 65 7d 20 74 69 6d 65 20 28 6f 70 74  {Time} time (opt
8c340 69 6f 6e 61 6c 29 20 74 69 6d 69 6e 67 20 70 61  ional) timing pa
8c350 72 61 6d 65 74 65 72 0a 09 09 20 2a 20 20 40 70  rameter... *  @p
8c360 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20  rivate... */..  
8c370 20 20 54 6f 6e 65 2e 41 4d 4f 73 63 69 6c 6c 61    Tone.AMOscilla
8c380 74 6f 72 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 73  tor.prototype._s
8c390 74 6f 70 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  top = function (
8c3a0 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20 20  time) {..       
8c3b0 20 74 69 6d 65 20 3d 20 74 68 69 73 2e 74 6f 53   time = this.toS
8c3c0 65 63 6f 6e 64 73 28 74 69 6d 65 29 3b 0a 09 20  econds(time);.. 
8c3d0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 6f 64         this._mod
8c3e0 75 6c 61 74 6f 72 2e 73 74 6f 70 28 74 69 6d 65  ulator.stop(time
8c3f0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
8c400 2e 5f 63 61 72 72 69 65 72 2e 73 74 6f 70 28 74  ._carrier.stop(t
8c410 69 6d 65 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20  ime);..    };.. 
8c420 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65 20     /**... * The 
8c430 74 79 70 65 20 6f 66 20 74 68 65 20 63 61 72 72  type of the carr
8c440 69 65 72 20 6f 73 63 69 6c 6c 61 74 6f 72 0a 09  ier oscillator..
8c450 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f  . * @memberOf To
8c460 6e 65 2e 41 4d 4f 73 63 69 6c 6c 61 74 6f 72 23  ne.AMOscillator#
8c470 0a 09 09 20 2a 20 40 74 79 70 65 20 7b 73 74 72  ... * @type {str
8c480 69 6e 67 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20  ing}... * @name 
8c490 74 79 70 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20  type... */..    
8c4a0 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f  Object.definePro
8c4b0 70 65 72 74 79 28 54 6f 6e 65 2e 41 4d 4f 73 63  perty(Tone.AMOsc
8c4c0 69 6c 6c 61 74 6f 72 2e 70 72 6f 74 6f 74 79 70  illator.prototyp
8c4d0 65 2c 20 27 74 79 70 65 27 2c 20 7b 0a 09 20 20  e, 'type', {..  
8c4e0 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74        get: funct
8c4f0 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
8c500 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
8c510 73 2e 5f 63 61 72 72 69 65 72 2e 74 79 70 65 3b  s._carrier.type;
8c520 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20  ..        },..  
8c530 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74        set: funct
8c540 69 6f 6e 20 28 74 79 70 65 29 20 7b 0a 09 20 20  ion (type) {..  
8c550 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
8c560 63 61 72 72 69 65 72 2e 74 79 70 65 20 3d 20 74  carrier.type = t
8c570 79 70 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a  ype;..        }.
8c580 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a  .    });..    /*
8c590 2a 0a 09 09 20 2a 20 54 68 65 20 74 79 70 65 20  *... * The type 
8c5a0 6f 66 20 74 68 65 20 6d 6f 64 75 6c 61 74 6f 72  of the modulator
8c5b0 20 6f 73 63 69 6c 6c 61 74 6f 72 0a 09 09 20 2a   oscillator... *
8c5c0 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e   @memberOf Tone.
8c5d0 41 4d 4f 73 63 69 6c 6c 61 74 6f 72 23 0a 09 09  AMOscillator#...
8c5e0 20 2a 20 40 74 79 70 65 20 7b 73 74 72 69 6e 67   * @type {string
8c5f0 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 6d 6f 64  }... * @name mod
8c600 75 6c 61 74 69 6f 6e 54 79 70 65 0a 09 09 20 2a  ulationType... *
8c610 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65  /..    Object.de
8c620 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e  fineProperty(Ton
8c630 65 2e 41 4d 4f 73 63 69 6c 6c 61 74 6f 72 2e 70  e.AMOscillator.p
8c640 72 6f 74 6f 74 79 70 65 2c 20 27 6d 6f 64 75 6c  rototype, 'modul
8c650 61 74 69 6f 6e 54 79 70 65 27 2c 20 7b 0a 09 20  ationType', {.. 
8c660 20 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63         get: func
8c670 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
8c680 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
8c690 69 73 2e 5f 6d 6f 64 75 6c 61 74 6f 72 2e 74 79  is._modulator.ty
8c6a0 70 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a  pe;..        },.
8c6b0 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66 75  .        set: fu
8c6c0 6e 63 74 69 6f 6e 20 28 74 79 70 65 29 20 7b 0a  nction (type) {.
8c6d0 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
8c6e0 73 2e 5f 6d 6f 64 75 6c 61 74 6f 72 2e 74 79 70  s._modulator.typ
8c6f0 65 20 3d 20 74 79 70 65 3b 0a 09 20 20 20 20 20  e = type;..     
8c700 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20     }..    });.. 
8c710 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65 20     /**... * The 
8c720 70 68 61 73 65 20 6f 66 20 74 68 65 20 6f 73 63  phase of the osc
8c730 69 6c 6c 61 74 6f 72 20 69 6e 20 64 65 67 72 65  illator in degre
8c740 65 73 2e 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72  es.... * @member
8c750 4f 66 20 54 6f 6e 65 2e 41 4d 4f 73 63 69 6c 6c  Of Tone.AMOscill
8c760 61 74 6f 72 23 0a 09 09 20 2a 20 40 74 79 70 65  ator#... * @type
8c770 20 7b 6e 75 6d 62 65 72 7d 0a 09 09 20 2a 20 40   {number}... * @
8c780 6e 61 6d 65 20 70 68 61 73 65 0a 09 09 20 2a 2f  name phase... */
8c790 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66  ..    Object.def
8c7a0 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65  ineProperty(Tone
8c7b0 2e 41 4d 4f 73 63 69 6c 6c 61 74 6f 72 2e 70 72  .AMOscillator.pr
8c7c0 6f 74 6f 74 79 70 65 2c 20 27 70 68 61 73 65 27  ototype, 'phase'
8c7d0 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74  , {..        get
8c7e0 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  : function () {.
8c7f0 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
8c800 75 72 6e 20 74 68 69 73 2e 5f 63 61 72 72 69 65  urn this._carrie
8c810 72 2e 70 68 61 73 65 3b 0a 09 20 20 20 20 20 20  r.phase;..      
8c820 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65    },..        se
8c830 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 70 68 61  t: function (pha
8c840 73 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  se) {..         
8c850 20 20 20 74 68 69 73 2e 5f 63 61 72 72 69 65 72     this._carrier
8c860 2e 70 68 61 73 65 20 3d 20 70 68 61 73 65 3b 0a  .phase = phase;.
8c870 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
8c880 73 2e 5f 6d 6f 64 75 6c 61 74 6f 72 2e 70 68 61  s._modulator.pha
8c890 73 65 20 3d 20 70 68 61 73 65 3b 0a 09 20 20 20  se = phase;..   
8c8a0 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a       }..    });.
8c8b0 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68  .    /**... * Th
8c8c0 65 20 70 61 72 74 69 61 6c 73 20 6f 66 20 74 68  e partials of th
8c8d0 65 20 63 61 72 72 69 65 72 20 77 61 76 65 66 6f  e carrier wavefo
8c8e0 72 6d 2e 20 41 20 70 61 72 74 69 61 6c 20 72 65  rm. A partial re
8c8f0 70 72 65 73 65 6e 74 73 20 0a 09 09 20 2a 20 74  presents ... * t
8c900 68 65 20 61 6d 70 6c 69 74 75 64 65 20 61 74 20  he amplitude at 
8c910 61 20 68 61 72 6d 6f 6e 69 63 2e 20 54 68 65 20  a harmonic. The 
8c920 66 69 72 73 74 20 68 61 72 6d 6f 6e 69 63 20 69  first harmonic i
8c930 73 20 74 68 65 20 0a 09 09 20 2a 20 66 75 6e 64  s the ... * fund
8c940 61 6d 65 6e 74 61 6c 20 66 72 65 71 75 65 6e 63  amental frequenc
8c950 79 2c 20 74 68 65 20 73 65 63 6f 6e 64 20 69 73  y, the second is
8c960 20 74 68 65 20 6f 63 74 61 76 65 20 61 6e 64 20   the octave and 
8c970 73 6f 20 6f 6e 0a 09 09 20 2a 20 66 6f 6c 6c 6f  so on... * follo
8c980 77 69 6e 67 20 74 68 65 20 68 61 72 6d 6f 6e 69  wing the harmoni
8c990 63 20 73 65 72 69 65 73 2e 20 0a 09 09 20 2a 20  c series. ... * 
8c9a0 53 65 74 74 69 6e 67 20 74 68 69 73 20 76 61 6c  Setting this val
8c9b0 75 65 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69  ue will automati
8c9c0 63 61 6c 6c 79 20 73 65 74 20 74 68 65 20 74 79  cally set the ty
8c9d0 70 65 20 74 6f 20 22 63 75 73 74 6f 6d 22 2e 20  pe to "custom". 
8c9e0 0a 09 09 20 2a 20 54 68 65 20 76 61 6c 75 65 20  ... * The value 
8c9f0 69 73 20 61 6e 20 65 6d 70 74 79 20 61 72 72 61  is an empty arra
8ca00 79 20 77 68 65 6e 20 74 68 65 20 74 79 70 65 20  y when the type 
8ca10 69 73 20 6e 6f 74 20 22 63 75 73 74 6f 6d 22 2e  is not "custom".
8ca20 20 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66   ... * @memberOf
8ca30 20 54 6f 6e 65 2e 41 4d 4f 73 63 69 6c 6c 61 74   Tone.AMOscillat
8ca40 6f 72 23 0a 09 09 20 2a 20 40 74 79 70 65 20 7b  or#... * @type {
8ca50 41 72 72 61 79 7d 0a 09 09 20 2a 20 40 6e 61 6d  Array}... * @nam
8ca60 65 20 70 61 72 74 69 61 6c 73 0a 09 09 20 2a 20  e partials... * 
8ca70 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 6f 73  @example... * os
8ca80 63 2e 70 61 72 74 69 61 6c 73 20 3d 20 5b 31 2c  c.partials = [1,
8ca90 20 30 2e 32 2c 20 30 2e 30 31 5d 3b 0a 09 09 20   0.2, 0.01];... 
8caa0 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64  */..    Object.d
8cab0 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f  efineProperty(To
8cac0 6e 65 2e 41 4d 4f 73 63 69 6c 6c 61 74 6f 72 2e  ne.AMOscillator.
8cad0 70 72 6f 74 6f 74 79 70 65 2c 20 27 70 61 72 74  prototype, 'part
8cae0 69 61 6c 73 27 2c 20 7b 0a 09 20 20 20 20 20 20  ials', {..      
8caf0 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    get: function 
8cb00 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  () {..          
8cb10 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 63    return this._c
8cb20 61 72 72 69 65 72 2e 70 61 72 74 69 61 6c 73 3b  arrier.partials;
8cb30 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20  ..        },..  
8cb40 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74        set: funct
8cb50 69 6f 6e 20 28 70 61 72 74 69 61 6c 73 29 20 7b  ion (partials) {
8cb60 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
8cb70 69 73 2e 5f 63 61 72 72 69 65 72 2e 70 61 72 74  is._carrier.part
8cb80 69 61 6c 73 20 3d 20 70 61 72 74 69 61 6c 73 3b  ials = partials;
8cb90 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
8cba0 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09   });..    /**...
8cbb0 20 2a 20 20 43 6c 65 61 6e 20 75 70 2e 0a 09 09   *  Clean up....
8cbc0 20 2a 20 20 40 72 65 74 75 72 6e 20 7b 54 6f 6e   *  @return {Ton
8cbd0 65 2e 41 4d 4f 73 63 69 6c 6c 61 74 6f 72 7d 20  e.AMOscillator} 
8cbe0 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20  this... */..    
8cbf0 54 6f 6e 65 2e 41 4d 4f 73 63 69 6c 6c 61 74 6f  Tone.AMOscillato
8cc00 72 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70  r.prototype.disp
8cc10 6f 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  ose = function (
8cc20 29 20 7b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e  ) {..        Ton
8cc30 65 2e 53 6f 75 72 63 65 2e 70 72 6f 74 6f 74 79  e.Source.prototy
8cc40 70 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28  pe.dispose.call(
8cc50 74 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20 20  this);..        
8cc60 74 68 69 73 2e 5f 77 72 69 74 61 62 6c 65 28 5b  this._writable([
8cc70 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 66  ..            'f
8cc80 72 65 71 75 65 6e 63 79 27 2c 0a 09 20 20 20 20  requency',..    
8cc90 20 20 20 20 20 20 20 20 27 64 65 74 75 6e 65 27          'detune'
8cca0 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
8ccb0 68 61 72 6d 6f 6e 69 63 69 74 79 27 0a 09 20 20  harmonicity'..  
8ccc0 20 20 20 20 20 20 5d 29 3b 0a 09 20 20 20 20 20        ]);..     
8ccd0 20 20 20 74 68 69 73 2e 66 72 65 71 75 65 6e 63     this.frequenc
8cce0 79 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20  y = null;..     
8ccf0 20 20 20 74 68 69 73 2e 64 65 74 75 6e 65 20 3d     this.detune =
8cd00 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
8cd10 74 68 69 73 2e 68 61 72 6d 6f 6e 69 63 69 74 79  this.harmonicity
8cd20 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20  .dispose();..   
8cd30 20 20 20 20 20 74 68 69 73 2e 68 61 72 6d 6f 6e       this.harmon
8cd40 69 63 69 74 79 20 3d 20 6e 75 6c 6c 3b 0a 09 20  icity = null;.. 
8cd50 20 20 20 20 20 20 20 74 68 69 73 2e 5f 63 61 72         this._car
8cd60 72 69 65 72 2e 64 69 73 70 6f 73 65 28 29 3b 0a  rier.dispose();.
8cd70 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 63  .        this._c
8cd80 61 72 72 69 65 72 20 3d 20 6e 75 6c 6c 3b 0a 09  arrier = null;..
8cd90 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 6f          this._mo
8cda0 64 75 6c 61 74 6f 72 2e 64 69 73 70 6f 73 65 28  dulator.dispose(
8cdb0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
8cdc0 2e 5f 6d 6f 64 75 6c 61 74 6f 72 20 3d 20 6e 75  ._modulator = nu
8cdd0 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ll;..        thi
8cde0 73 2e 5f 6d 6f 64 75 6c 61 74 69 6f 6e 4e 6f 64  s._modulationNod
8cdf0 65 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20  e.dispose();..  
8ce00 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 6f 64 75        this._modu
8ce10 6c 61 74 69 6f 6e 4e 6f 64 65 20 3d 20 6e 75 6c  lationNode = nul
8ce20 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  l;..        this
8ce30 2e 5f 6d 6f 64 75 6c 61 74 69 6f 6e 53 63 61 6c  ._modulationScal
8ce40 65 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20  e.dispose();..  
8ce50 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 6f 64 75        this._modu
8ce60 6c 61 74 69 6f 6e 53 63 61 6c 65 20 3d 20 6e 75  lationScale = nu
8ce70 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74  ll;..        ret
8ce80 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
8ce90 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f  ;..    return To
8cea0 6e 65 2e 41 4d 4f 73 63 69 6c 6c 61 74 6f 72 3b  ne.AMOscillator;
8ceb0 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75  ..});..Module(fu
8cec0 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a  nction (Tone) {.
8ced0 09 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09  .    ..    /**..
8cee0 09 20 2a 20 20 40 63 6c 61 73 73 20 54 6f 6e 65  . *  @class Tone
8cef0 2e 46 61 74 4f 73 63 69 6c 6c 61 74 6f 72 20 0a  .FatOscillator .
8cf00 09 09 20 2a 0a 09 09 20 2a 20 20 40 65 78 74 65  .. *... *  @exte
8cf10 6e 64 73 20 7b 54 6f 6e 65 2e 4f 73 63 69 6c 6c  nds {Tone.Oscill
8cf20 61 74 6f 72 7d 0a 09 09 20 2a 20 20 40 63 6f 6e  ator}... *  @con
8cf30 73 74 72 75 63 74 6f 72 0a 09 09 20 2a 20 20 40  structor... *  @
8cf40 70 61 72 61 6d 20 7b 46 72 65 71 75 65 6e 63 79  param {Frequency
8cf50 7d 20 66 72 65 71 75 65 6e 63 79 20 54 68 65 20  } frequency The 
8cf60 73 74 61 72 74 69 6e 67 20 66 72 65 71 75 65 6e  starting frequen
8cf70 63 79 20 6f 66 20 74 68 65 20 6f 73 63 69 6c 6c  cy of the oscill
8cf80 61 74 6f 72 2e 20 0a 09 09 20 2a 20 20 40 70 61  ator. ... *  @pa
8cf90 72 61 6d 20 7b 53 74 72 69 6e 67 7d 20 74 79 70  ram {String} typ
8cfa0 65 20 54 68 65 20 74 79 70 65 20 6f 66 20 74 68  e The type of th
8cfb0 65 20 63 61 72 72 69 65 72 20 6f 73 63 69 6c 6c  e carrier oscill
8cfc0 61 74 6f 72 2e 0a 09 09 20 2a 20 20 40 70 61 72  ator.... *  @par
8cfd0 61 6d 20 7b 53 74 72 69 6e 67 7d 20 6d 6f 64 75  am {String} modu
8cfe0 6c 61 74 69 6f 6e 54 79 70 65 20 54 68 65 20 74  lationType The t
8cff0 79 70 65 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  ype of the modul
8d000 61 74 6f 72 20 6f 73 63 69 6c 6c 61 74 6f 72 2e  ator oscillator.
8d010 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a  ... *  @example.
8d020 09 09 20 2a 20 2f 2f 61 20 73 69 6e 65 20 6f 73  .. * //a sine os
8d030 63 69 6c 6c 61 74 6f 72 20 66 72 65 71 75 65 6e  cillator frequen
8d040 63 79 2d 6d 6f 64 75 6c 61 74 65 64 20 62 79 20  cy-modulated by 
8d050 61 20 73 71 75 61 72 65 20 77 61 76 65 0a 09 09  a square wave...
8d060 20 2a 20 76 61 72 20 66 6d 4f 73 63 20 3d 20 6e   * var fmOsc = n
8d070 65 77 20 54 6f 6e 65 2e 46 61 74 4f 73 63 69 6c  ew Tone.FatOscil
8d080 6c 61 74 6f 72 28 22 41 62 33 22 2c 20 22 73 69  lator("Ab3", "si
8d090 6e 65 22 2c 20 22 73 71 75 61 72 65 22 29 2e 74  ne", "square").t
8d0a0 6f 4d 61 73 74 65 72 28 29 2e 73 74 61 72 74 28  oMaster().start(
8d0b0 29 3b 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  );... */..    To
8d0c0 6e 65 2e 46 61 74 4f 73 63 69 6c 6c 61 74 6f 72  ne.FatOscillator
8d0d0 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b   = function () {
8d0e0 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 6f 70  ..        var op
8d0f0 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e 6f 70 74  tions = this.opt
8d100 69 6f 6e 73 4f 62 6a 65 63 74 28 61 72 67 75 6d  ionsObject(argum
8d110 65 6e 74 73 2c 20 5b 0a 09 20 20 20 20 20 20 20  ents, [..       
8d120 20 20 20 20 20 27 66 72 65 71 75 65 6e 63 79 27       'frequency'
8d130 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
8d140 74 79 70 65 27 2c 0a 09 20 20 20 20 20 20 20 20  type',..        
8d150 20 20 20 20 27 73 70 72 65 61 64 27 0a 09 20 20      'spread'..  
8d160 20 20 20 20 20 20 5d 2c 20 54 6f 6e 65 2e 46 61        ], Tone.Fa
8d170 74 4f 73 63 69 6c 6c 61 74 6f 72 2e 64 65 66 61  tOscillator.defa
8d180 75 6c 74 73 29 3b 0a 09 20 20 20 20 20 20 20 20  ults);..        
8d190 54 6f 6e 65 2e 53 6f 75 72 63 65 2e 63 61 6c 6c  Tone.Source.call
8d1a0 28 74 68 69 73 2c 20 6f 70 74 69 6f 6e 73 29 3b  (this, options);
8d1b0 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
8d1c0 09 20 2a 20 20 54 68 65 20 6f 73 63 69 6c 6c 61  . *  The oscilla
8d1d0 74 6f 72 27 73 20 66 72 65 71 75 65 6e 63 79 0a  tor's frequency.
8d1e0 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 46 72  ... *  @type {Fr
8d1f0 65 71 75 65 6e 63 79 7d 0a 09 09 09 20 2a 20 20  equency}.... *  
8d200 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f 0a 09  @signal.... */..
8d210 20 20 20 20 20 20 20 20 74 68 69 73 2e 66 72 65          this.fre
8d220 71 75 65 6e 63 79 20 3d 20 6e 65 77 20 54 6f 6e  quency = new Ton
8d230 65 2e 53 69 67 6e 61 6c 28 6f 70 74 69 6f 6e 73  e.Signal(options
8d240 2e 66 72 65 71 75 65 6e 63 79 2c 20 54 6f 6e 65  .frequency, Tone
8d250 2e 54 79 70 65 2e 46 72 65 71 75 65 6e 63 79 29  .Type.Frequency)
8d260 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
8d270 09 09 20 2a 20 20 54 68 65 20 64 65 74 75 6e 65  .. *  The detune
8d280 20 63 6f 6e 74 72 6f 6c 20 73 69 67 6e 61 6c 2e   control signal.
8d290 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 43  .... *  @type {C
8d2a0 65 6e 74 73 7d 0a 09 09 09 20 2a 20 20 40 73 69  ents}.... *  @si
8d2b0 67 6e 61 6c 0a 09 09 09 20 2a 2f 0a 09 20 20 20  gnal.... */..   
8d2c0 20 20 20 20 20 74 68 69 73 2e 64 65 74 75 6e 65       this.detune
8d2d0 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53 69 67 6e   = new Tone.Sign
8d2e0 61 6c 28 6f 70 74 69 6f 6e 73 2e 64 65 74 75 6e  al(options.detun
8d2f0 65 2c 20 54 6f 6e 65 2e 54 79 70 65 2e 43 65 6e  e, Tone.Type.Cen
8d300 74 73 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a  ts);..        /*
8d310 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 61 72 72  *.... *  The arr
8d320 61 79 20 6f 66 20 6f 73 63 69 6c 6c 61 74 6f 72  ay of oscillator
8d330 73 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b  s.... *  @type {
8d340 41 72 72 61 79 7d 0a 09 09 09 20 2a 20 20 40 70  Array}.... *  @p
8d350 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20  rivate.... */.. 
8d360 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6f 73 63         this._osc
8d370 69 6c 6c 61 74 6f 72 73 20 3d 20 5b 5d 3b 0a 09  illators = [];..
8d380 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
8d390 2a 20 20 54 68 65 20 74 6f 74 61 6c 20 73 70 72  *  The total spr
8d3a0 65 61 64 20 6f 66 20 74 68 65 20 6f 73 63 69 6c  ead of the oscil
8d3b0 6c 61 74 6f 72 73 0a 09 09 09 20 2a 20 20 40 74  lators.... *  @t
8d3c0 79 70 65 20 20 7b 43 65 6e 74 73 7d 0a 09 09 09  ype  {Cents}....
8d3d0 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
8d3e0 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
8d3f0 73 2e 5f 73 70 72 65 61 64 20 3d 20 6f 70 74 69  s._spread = opti
8d400 6f 6e 73 2e 73 70 72 65 61 64 3b 0a 09 20 20 20  ons.spread;..   
8d410 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
8d420 54 68 65 20 74 79 70 65 20 6f 66 20 74 68 65 20  The type of the 
8d430 6f 73 63 69 6c 6c 61 74 6f 72 0a 09 09 09 20 2a  oscillator.... *
8d440 20 20 40 74 79 70 65 20 7b 53 74 72 69 6e 67 7d    @type {String}
8d450 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  .... *  @private
8d460 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
8d470 20 74 68 69 73 2e 5f 74 79 70 65 20 3d 20 6f 70   this._type = op
8d480 74 69 6f 6e 73 2e 74 79 70 65 3b 0a 09 20 20 20  tions.type;..   
8d490 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
8d4a0 54 68 65 20 70 68 61 73 65 20 6f 66 20 74 68 65  The phase of the
8d4b0 20 6f 73 63 69 6c 6c 61 74 6f 72 73 0a 09 09 09   oscillators....
8d4c0 20 2a 20 20 40 74 79 70 65 20 7b 44 65 67 72 65   *  @type {Degre
8d4d0 65 73 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76  es}.... *  @priv
8d4e0 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  ate.... */..    
8d4f0 20 20 20 20 74 68 69 73 2e 5f 70 68 61 73 65 20      this._phase 
8d500 3d 20 6f 70 74 69 6f 6e 73 2e 70 68 61 73 65 3b  = options.phase;
8d510 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
8d520 09 20 2a 20 20 54 68 65 20 70 61 72 74 69 61 6c  . *  The partial
8d530 73 20 61 72 72 61 79 0a 09 09 09 20 2a 20 20 40  s array.... *  @
8d540 74 79 70 65 20 7b 41 72 72 61 79 7d 0a 09 09 09  type {Array}....
8d550 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
8d560 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
8d570 73 2e 5f 70 61 72 74 69 61 6c 73 20 3d 20 74 68  s._partials = th
8d580 69 73 2e 64 65 66 61 75 6c 74 41 72 67 28 6f 70  is.defaultArg(op
8d590 74 69 6f 6e 73 2e 70 61 72 74 69 61 6c 73 2c 20  tions.partials, 
8d5a0 5b 5d 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f  []);..        //
8d5b0 73 65 74 20 74 68 65 20 63 6f 75 6e 74 20 69 6e  set the count in
8d5c0 69 74 69 61 6c 6c 79 0a 09 20 20 20 20 20 20 20  itially..       
8d5d0 20 74 68 69 73 2e 63 6f 75 6e 74 20 3d 20 6f 70   this.count = op
8d5e0 74 69 6f 6e 73 2e 63 6f 75 6e 74 3b 0a 09 20 20  tions.count;..  
8d5f0 20 20 20 20 20 20 74 68 69 73 2e 5f 72 65 61 64        this._read
8d600 4f 6e 6c 79 28 5b 0a 09 20 20 20 20 20 20 20 20  Only([..        
8d610 20 20 20 20 27 66 72 65 71 75 65 6e 63 79 27 2c      'frequency',
8d620 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 64  ..            'd
8d630 65 74 75 6e 65 27 0a 09 20 20 20 20 20 20 20 20  etune'..        
8d640 5d 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  ]);..    };..   
8d650 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e   Tone.extend(Ton
8d660 65 2e 46 61 74 4f 73 63 69 6c 6c 61 74 6f 72 2c  e.FatOscillator,
8d670 20 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f 72   Tone.Oscillator
8d680 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  );..    /**... *
8d690 20 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73    default values
8d6a0 0a 09 09 20 2a 20 20 40 73 74 61 74 69 63 0a 09  ... *  @static..
8d6b0 09 20 2a 20 20 40 74 79 70 65 20 7b 4f 62 6a 65  . *  @type {Obje
8d6c0 63 74 7d 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74  ct}... *  @const
8d6d0 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
8d6e0 2e 46 61 74 4f 73 63 69 6c 6c 61 74 6f 72 2e 64  .FatOscillator.d
8d6f0 65 66 61 75 6c 74 73 20 3d 20 7b 0a 09 20 20 20  efaults = {..   
8d700 20 20 20 20 20 27 66 72 65 71 75 65 6e 63 79 27       'frequency'
8d710 3a 20 34 34 30 2c 0a 09 20 20 20 20 20 20 20 20  : 440,..        
8d720 27 64 65 74 75 6e 65 27 3a 20 30 2c 0a 09 20 20  'detune': 0,..  
8d730 20 20 20 20 20 20 27 70 68 61 73 65 27 3a 20 30        'phase': 0
8d740 2c 0a 09 20 20 20 20 20 20 20 20 27 73 70 72 65  ,..        'spre
8d750 61 64 27 3a 20 32 30 2c 0a 09 20 20 20 20 20 20  ad': 20,..      
8d760 20 20 27 63 6f 75 6e 74 27 3a 20 33 2c 0a 09 20    'count': 3,.. 
8d770 20 20 20 20 20 20 20 27 74 79 70 65 27 3a 20 27         'type': '
8d780 73 61 77 74 6f 6f 74 68 27 0a 09 20 20 20 20 7d  sawtooth'..    }
8d790 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
8d7a0 20 73 74 61 72 74 20 74 68 65 20 6f 73 63 69 6c   start the oscil
8d7b0 6c 61 74 6f 72 0a 09 09 20 2a 20 20 40 70 61 72  lator... *  @par
8d7c0 61 6d 20 20 7b 54 69 6d 65 7d 20 5b 74 69 6d 65  am  {Time} [time
8d7d0 3d 6e 6f 77 5d 0a 09 09 20 2a 20 20 40 70 72 69  =now]... *  @pri
8d7e0 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20  vate... */..    
8d7f0 54 6f 6e 65 2e 46 61 74 4f 73 63 69 6c 6c 61 74  Tone.FatOscillat
8d800 6f 72 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 73 74  or.prototype._st
8d810 61 72 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  art = function (
8d820 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20 20  time) {..       
8d830 20 74 69 6d 65 20 3d 20 74 68 69 73 2e 74 6f 53   time = this.toS
8d840 65 63 6f 6e 64 73 28 74 69 6d 65 29 3b 0a 09 20  econds(time);.. 
8d850 20 20 20 20 20 20 20 74 68 69 73 2e 5f 66 6f 72         this._for
8d860 45 61 63 68 28 66 75 6e 63 74 69 6f 6e 20 28 6f  Each(function (o
8d870 73 63 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  sc) {..         
8d880 20 20 20 6f 73 63 2e 73 74 61 72 74 28 74 69 6d     osc.start(tim
8d890 65 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 29 3b  e);..        });
8d8a0 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
8d8b0 2a 0a 09 09 20 2a 20 20 73 74 6f 70 20 74 68 65  *... *  stop the
8d8c0 20 6f 73 63 69 6c 6c 61 74 6f 72 0a 09 09 20 2a   oscillator... *
8d8d0 20 20 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 7d    @param  {Time}
8d8e0 20 74 69 6d 65 20 28 6f 70 74 69 6f 6e 61 6c 29   time (optional)
8d8f0 20 74 69 6d 69 6e 67 20 70 61 72 61 6d 65 74 65   timing paramete
8d900 72 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  r... *  @private
8d910 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
8d920 2e 46 61 74 4f 73 63 69 6c 6c 61 74 6f 72 2e 70  .FatOscillator.p
8d930 72 6f 74 6f 74 79 70 65 2e 5f 73 74 6f 70 20 3d  rototype._stop =
8d940 20 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65 29   function (time)
8d950 20 7b 0a 09 20 20 20 20 20 20 20 20 74 69 6d 65   {..        time
8d960 20 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64   = this.toSecond
8d970 73 28 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20  s(time);..      
8d980 20 20 74 68 69 73 2e 5f 66 6f 72 45 61 63 68 28    this._forEach(
8d990 66 75 6e 63 74 69 6f 6e 20 28 6f 73 63 29 20 7b  function (osc) {
8d9a0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 6f 73  ..            os
8d9b0 63 2e 73 74 6f 70 28 74 69 6d 65 29 3b 0a 09 20  c.stop(time);.. 
8d9c0 20 20 20 20 20 20 20 7d 29 3b 0a 09 20 20 20 20         });..    
8d9d0 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  };..    /**... *
8d9e0 20 20 49 74 65 72 61 74 65 20 6f 76 65 72 20 61    Iterate over a
8d9f0 6c 6c 20 6f 66 20 74 68 65 20 6f 73 63 69 6c 6c  ll of the oscill
8da00 61 74 6f 72 73 0a 09 09 20 2a 20 20 40 70 61 72  ators... *  @par
8da10 61 6d 20 20 7b 46 75 6e 63 74 69 6f 6e 7d 20 20  am  {Function}  
8da20 69 74 65 72 61 74 6f 72 20 20 54 68 65 20 69 74  iterator  The it
8da30 65 72 61 74 6f 72 20 66 75 6e 63 74 69 6f 6e 0a  erator function.
8da40 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
8da50 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 46  . */..    Tone.F
8da60 61 74 4f 73 63 69 6c 6c 61 74 6f 72 2e 70 72 6f  atOscillator.pro
8da70 74 6f 74 79 70 65 2e 5f 66 6f 72 45 61 63 68 20  totype._forEach 
8da80 3d 20 66 75 6e 63 74 69 6f 6e 20 28 69 74 65 72  = function (iter
8da90 61 74 6f 72 29 20 7b 0a 09 20 20 20 20 20 20 20  ator) {..       
8daa0 20 66 6f 72 20 28 76 61 72 20 69 20 3d 20 30 3b   for (var i = 0;
8dab0 20 69 20 3c 20 74 68 69 73 2e 5f 6f 73 63 69 6c   i < this._oscil
8dac0 6c 61 74 6f 72 73 2e 6c 65 6e 67 74 68 3b 20 69  lators.length; i
8dad0 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ++) {..         
8dae0 20 20 20 69 74 65 72 61 74 6f 72 2e 63 61 6c 6c     iterator.call
8daf0 28 74 68 69 73 2c 20 74 68 69 73 2e 5f 6f 73 63  (this, this._osc
8db00 69 6c 6c 61 74 6f 72 73 5b 69 5d 2c 20 69 29 3b  illators[i], i);
8db10 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
8db20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20   };..    /**... 
8db30 2a 20 54 68 65 20 74 79 70 65 20 6f 66 20 74 68  * The type of th
8db40 65 20 63 61 72 72 69 65 72 20 6f 73 63 69 6c 6c  e carrier oscill
8db50 61 74 6f 72 0a 09 09 20 2a 20 40 6d 65 6d 62 65  ator... * @membe
8db60 72 4f 66 20 54 6f 6e 65 2e 46 61 74 4f 73 63 69  rOf Tone.FatOsci
8db70 6c 6c 61 74 6f 72 23 0a 09 09 20 2a 20 40 74 79  llator#... * @ty
8db80 70 65 20 7b 73 74 72 69 6e 67 7d 0a 09 09 20 2a  pe {string}... *
8db90 20 40 6e 61 6d 65 20 74 79 70 65 0a 09 09 20 2a   @name type... *
8dba0 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65  /..    Object.de
8dbb0 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e  fineProperty(Ton
8dbc0 65 2e 46 61 74 4f 73 63 69 6c 6c 61 74 6f 72 2e  e.FatOscillator.
8dbd0 70 72 6f 74 6f 74 79 70 65 2c 20 27 74 79 70 65  prototype, 'type
8dbe0 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65  ', {..        ge
8dbf0 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b  t: function () {
8dc00 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
8dc10 74 75 72 6e 20 74 68 69 73 2e 5f 74 79 70 65 3b  turn this._type;
8dc20 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20  ..        },..  
8dc30 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74        set: funct
8dc40 69 6f 6e 20 28 74 79 70 65 29 20 7b 0a 09 20 20  ion (type) {..  
8dc50 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
8dc60 74 79 70 65 20 3d 20 74 79 70 65 3b 0a 09 20 20  type = type;..  
8dc70 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
8dc80 66 6f 72 45 61 63 68 28 66 75 6e 63 74 69 6f 6e  forEach(function
8dc90 20 28 6f 73 63 29 20 7b 0a 09 20 20 20 20 20 20   (osc) {..      
8dca0 20 20 20 20 20 20 20 20 20 20 6f 73 63 2e 74 79            osc.ty
8dcb0 70 65 20 3d 20 74 79 70 65 3b 0a 09 20 20 20 20  pe = type;..    
8dcc0 20 20 20 20 20 20 20 20 7d 29 3b 0a 09 20 20 20          });..   
8dcd0 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a       }..    });.
8dce0 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68  .    /**... * Th
8dcf0 65 20 64 65 74 75 6e 65 20 73 70 72 65 61 64 20  e detune spread 
8dd00 62 65 74 77 65 65 6e 20 74 68 65 20 6f 73 63 69  between the osci
8dd10 6c 6c 61 74 6f 72 73 2e 20 49 66 20 22 63 6f 75  llators. If "cou
8dd20 6e 74 22 20 69 73 0a 09 09 20 2a 20 73 65 74 20  nt" is... * set 
8dd30 74 6f 20 33 20 6f 73 63 69 6c 6c 61 74 6f 72 73  to 3 oscillators
8dd40 20 61 6e 64 20 74 68 65 20 22 73 70 72 65 61 64   and the "spread
8dd50 22 20 69 73 20 73 65 74 20 74 6f 20 34 30 2c 0a  " is set to 40,.
8dd60 09 09 20 2a 20 74 68 65 20 74 68 72 65 65 20 6f  .. * the three o
8dd70 73 63 69 6c 6c 61 74 6f 72 73 20 77 6f 75 6c 64  scillators would
8dd80 20 62 65 20 64 65 74 75 6e 65 64 20 6c 69 6b 65   be detuned like
8dd90 20 74 68 69 73 3a 20 5b 2d 32 30 2c 20 30 2c 20   this: [-20, 0, 
8dda0 32 30 5d 0a 09 09 20 2a 20 66 6f 72 20 61 20 74  20]... * for a t
8ddb0 6f 74 61 6c 20 64 65 74 75 6e 65 20 73 70 72 65  otal detune spre
8ddc0 61 64 20 6f 66 20 34 30 20 63 65 6e 74 73 2e 0a  ad of 40 cents..
8ddd0 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54  .. * @memberOf T
8dde0 6f 6e 65 2e 46 61 74 4f 73 63 69 6c 6c 61 74 6f  one.FatOscillato
8ddf0 72 23 0a 09 09 20 2a 20 40 74 79 70 65 20 7b 43  r#... * @type {C
8de00 65 6e 74 73 7d 0a 09 09 20 2a 20 40 6e 61 6d 65  ents}... * @name
8de10 20 73 70 72 65 61 64 0a 09 09 20 2a 2f 0a 09 20   spread... */.. 
8de20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65     Object.define
8de30 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 46 61  Property(Tone.Fa
8de40 74 4f 73 63 69 6c 6c 61 74 6f 72 2e 70 72 6f 74  tOscillator.prot
8de50 6f 74 79 70 65 2c 20 27 73 70 72 65 61 64 27 2c  otype, 'spread',
8de60 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a   {..        get:
8de70 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
8de80 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
8de90 72 6e 20 74 68 69 73 2e 5f 73 70 72 65 61 64 3b  rn this._spread;
8dea0 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20  ..        },..  
8deb0 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74        set: funct
8dec0 69 6f 6e 20 28 73 70 72 65 61 64 29 20 7b 0a 09  ion (spread) {..
8ded0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
8dee0 2e 5f 73 70 72 65 61 64 20 3d 20 73 70 72 65 61  ._spread = sprea
8def0 64 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
8df00 69 66 20 28 74 68 69 73 2e 5f 6f 73 63 69 6c 6c  if (this._oscill
8df10 61 74 6f 72 73 2e 6c 65 6e 67 74 68 20 3e 20 31  ators.length > 1
8df20 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
8df30 20 20 20 20 20 76 61 72 20 73 74 61 72 74 20 3d       var start =
8df40 20 2d 73 70 72 65 61 64 20 2f 20 32 3b 0a 09 20   -spread / 2;.. 
8df50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
8df60 61 72 20 73 74 65 70 20 3d 20 73 70 72 65 61 64  ar step = spread
8df70 20 2f 20 28 74 68 69 73 2e 5f 6f 73 63 69 6c 6c   / (this._oscill
8df80 61 74 6f 72 73 2e 6c 65 6e 67 74 68 20 2d 20 31  ators.length - 1
8df90 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
8dfa0 20 20 20 20 74 68 69 73 2e 5f 66 6f 72 45 61 63      this._forEac
8dfb0 68 28 66 75 6e 63 74 69 6f 6e 20 28 6f 73 63 2c  h(function (osc,
8dfc0 20 69 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20   i) {..         
8dfd0 20 20 20 20 20 20 20 20 20 20 20 6f 73 63 2e 64             osc.d
8dfe0 65 74 75 6e 65 2e 76 61 6c 75 65 20 3d 20 73 74  etune.value = st
8dff0 61 72 74 20 2b 20 73 74 65 70 20 2a 20 69 3b 0a  art + step * i;.
8e000 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8e010 20 7d 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20   });..          
8e020 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 0a 09    }..        }..
8e030 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a      });..    /**
8e040 0a 09 09 20 2a 20 54 68 65 20 6e 75 6d 62 65 72  ... * The number
8e050 20 6f 66 20 64 65 74 75 6e 65 64 20 6f 73 63 69   of detuned osci
8e060 6c 6c 61 74 6f 72 73 0a 09 09 20 2a 20 40 6d 65  llators... * @me
8e070 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 46 61 74 4f  mberOf Tone.FatO
8e080 73 63 69 6c 6c 61 74 6f 72 23 0a 09 09 20 2a 20  scillator#... * 
8e090 40 74 79 70 65 20 7b 4e 75 6d 62 65 72 7d 0a 09  @type {Number}..
8e0a0 09 20 2a 20 40 6e 61 6d 65 20 63 6f 75 6e 74 0a  . * @name count.
8e0b0 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63  .. */..    Objec
8e0c0 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79  t.defineProperty
8e0d0 28 54 6f 6e 65 2e 46 61 74 4f 73 63 69 6c 6c 61  (Tone.FatOscilla
8e0e0 74 6f 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27  tor.prototype, '
8e0f0 63 6f 75 6e 74 27 2c 20 7b 0a 09 20 20 20 20 20  count', {..     
8e100 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e     get: function
8e110 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20   () {..         
8e120 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f     return this._
8e130 6f 73 63 69 6c 6c 61 74 6f 72 73 2e 6c 65 6e 67  oscillators.leng
8e140 74 68 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a  th;..        },.
8e150 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66 75  .        set: fu
8e160 6e 63 74 69 6f 6e 20 28 63 6f 75 6e 74 29 20 7b  nction (count) {
8e170 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
8e180 75 6e 74 20 3d 20 4d 61 74 68 2e 6d 61 78 28 63  unt = Math.max(c
8e190 6f 75 6e 74 2c 20 31 29 3b 0a 09 20 20 20 20 20  ount, 1);..     
8e1a0 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e         if (this.
8e1b0 5f 6f 73 63 69 6c 6c 61 74 6f 72 73 2e 6c 65 6e  _oscillators.len
8e1c0 67 74 68 20 21 3d 3d 20 63 6f 75 6e 74 29 20 7b  gth !== count) {
8e1d0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e1e0 20 20 2f 2f 20 76 61 72 20 70 61 72 74 69 61 6c    // var partial
8e1f0 73 20 3d 20 74 68 69 73 2e 70 61 72 74 69 61 6c  s = this.partial
8e200 73 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  s;..            
8e210 20 20 20 20 2f 2f 20 76 61 72 20 74 79 70 65 20      // var type 
8e220 3d 20 74 68 69 73 2e 74 79 70 65 3b 0a 09 20 20  = this.type;..  
8e230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
8e240 64 69 73 70 6f 73 65 20 74 68 65 20 70 72 65 76  dispose the prev
8e250 69 6f 75 73 20 6f 73 63 69 6c 6c 61 74 6f 72 73  ious oscillators
8e260 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e270 20 20 74 68 69 73 2e 5f 66 6f 72 45 61 63 68 28    this._forEach(
8e280 66 75 6e 63 74 69 6f 6e 20 28 6f 73 63 29 20 7b  function (osc) {
8e290 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e2a0 20 20 20 20 20 20 6f 73 63 2e 64 69 73 70 6f 73        osc.dispos
8e2b0 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20  e();..          
8e2c0 20 20 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 20        });..     
8e2d0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
8e2e0 5f 6f 73 63 69 6c 6c 61 74 6f 72 73 20 3d 20 5b  _oscillators = [
8e2f0 5d 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
8e300 20 20 20 20 66 6f 72 20 28 76 61 72 20 69 20 3d      for (var i =
8e310 20 30 3b 20 69 20 3c 20 63 6f 75 6e 74 3b 20 69   0; i < count; i
8e320 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ++) {..         
8e330 20 20 20 20 20 20 20 20 20 20 20 76 61 72 20 6f             var o
8e340 73 63 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4f 73  sc = new Tone.Os
8e350 63 69 6c 6c 61 74 6f 72 28 29 3b 0a 09 20 20 20  cillator();..   
8e360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e370 20 69 66 20 28 74 68 69 73 2e 74 79 70 65 20 3d   if (this.type =
8e380 3d 3d 20 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74  == Tone.Oscillat
8e390 6f 72 2e 54 79 70 65 2e 43 75 73 74 6f 6d 29 20  or.Type.Custom) 
8e3a0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8e3b0 20 20 20 20 20 20 20 20 20 20 20 6f 73 63 2e 70             osc.p
8e3c0 61 72 74 69 61 6c 73 20 3d 20 74 68 69 73 2e 5f  artials = this._
8e3d0 70 61 72 74 69 61 6c 73 3b 0a 09 20 20 20 20 20  partials;..     
8e3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
8e3f0 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20   else {..       
8e400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e410 20 6f 73 63 2e 74 79 70 65 20 3d 20 74 68 69 73   osc.type = this
8e420 2e 5f 74 79 70 65 3b 0a 09 20 20 20 20 20 20 20  ._type;..       
8e430 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09               }..
8e440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e450 20 20 20 20 6f 73 63 2e 70 68 61 73 65 20 3d 20      osc.phase = 
8e460 74 68 69 73 2e 5f 70 68 61 73 65 3b 0a 09 20 20  this._phase;..  
8e470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e480 20 20 6f 73 63 2e 76 6f 6c 75 6d 65 2e 76 61 6c    osc.volume.val
8e490 75 65 20 3d 20 2d 36 20 2d 20 63 6f 75 6e 74 3b  ue = -6 - count;
8e4a0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e4b0 20 20 20 20 20 20 74 68 69 73 2e 66 72 65 71 75        this.frequ
8e4c0 65 6e 63 79 2e 63 6f 6e 6e 65 63 74 28 6f 73 63  ency.connect(osc
8e4d0 2e 66 72 65 71 75 65 6e 63 79 29 3b 0a 09 20 20  .frequency);..  
8e4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e4f0 20 20 74 68 69 73 2e 64 65 74 75 6e 65 2e 63 6f    this.detune.co
8e500 6e 6e 65 63 74 28 6f 73 63 2e 64 65 74 75 6e 65  nnect(osc.detune
8e510 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
8e520 20 20 20 20 20 20 20 20 6f 73 63 2e 63 6f 6e 6e          osc.conn
8e530 65 63 74 28 74 68 69 73 2e 6f 75 74 70 75 74 29  ect(this.output)
8e540 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
8e550 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6f 73 63         this._osc
8e560 69 6c 6c 61 74 6f 72 73 5b 69 5d 20 3d 20 6f 73  illators[i] = os
8e570 63 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  c;..            
8e580 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20      }..         
8e590 20 20 20 20 20 20 20 2f 2f 73 65 74 20 74 68 65         //set the
8e5a0 20 73 70 72 65 61 64 0a 09 20 20 20 20 20 20 20   spread..       
8e5b0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 70           this.sp
8e5c0 72 65 61 64 20 3d 20 74 68 69 73 2e 5f 73 70 72  read = this._spr
8e5d0 65 61 64 3b 0a 09 20 20 20 20 20 20 20 20 20 20  ead;..          
8e5e0 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 73        if (this.s
8e5f0 74 61 74 65 20 3d 3d 3d 20 54 6f 6e 65 2e 53 74  tate === Tone.St
8e600 61 74 65 2e 53 74 61 72 74 65 64 29 20 7b 0a 09  ate.Started) {..
8e610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e620 20 20 20 20 74 68 69 73 2e 5f 66 6f 72 45 61 63      this._forEac
8e630 68 28 66 75 6e 63 74 69 6f 6e 20 28 6f 73 63 29  h(function (osc)
8e640 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8e650 20 20 20 20 20 20 20 20 20 20 20 20 6f 73 63 2e              osc.
8e660 73 74 61 72 74 28 29 3b 0a 09 20 20 20 20 20 20  start();..      
8e670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 29                })
8e680 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
8e690 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20     }..          
8e6a0 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 0a 09    }..        }..
8e6b0 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a      });..    /**
8e6c0 0a 09 09 20 2a 20 54 68 65 20 70 68 61 73 65 20  ... * The phase 
8e6d0 6f 66 20 74 68 65 20 6f 73 63 69 6c 6c 61 74 6f  of the oscillato
8e6e0 72 20 69 6e 20 64 65 67 72 65 65 73 2e 0a 09 09  r in degrees....
8e6f0 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e   * @memberOf Ton
8e700 65 2e 46 61 74 4f 73 63 69 6c 6c 61 74 6f 72 23  e.FatOscillator#
8e710 0a 09 09 20 2a 20 40 74 79 70 65 20 7b 4e 75 6d  ... * @type {Num
8e720 62 65 72 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20  ber}... * @name 
8e730 70 68 61 73 65 0a 09 09 20 2a 2f 0a 09 20 20 20  phase... */..   
8e740 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72   Object.definePr
8e750 6f 70 65 72 74 79 28 54 6f 6e 65 2e 46 61 74 4f  operty(Tone.FatO
8e760 73 63 69 6c 6c 61 74 6f 72 2e 70 72 6f 74 6f 74  scillator.protot
8e770 79 70 65 2c 20 27 70 68 61 73 65 27 2c 20 7b 0a  ype, 'phase', {.
8e780 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75  .        get: fu
8e790 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
8e7a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
8e7b0 74 68 69 73 2e 5f 70 68 61 73 65 3b 0a 09 20 20  this._phase;..  
8e7c0 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20        },..      
8e7d0 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    set: function 
8e7e0 28 70 68 61 73 65 29 20 7b 0a 09 20 20 20 20 20  (phase) {..     
8e7f0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70 68 61         this._pha
8e800 73 65 20 3d 20 70 68 61 73 65 3b 0a 09 20 20 20  se = phase;..   
8e810 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 66           this._f
8e820 6f 72 45 61 63 68 28 66 75 6e 63 74 69 6f 6e 20  orEach(function 
8e830 28 6f 73 63 29 20 7b 0a 09 20 20 20 20 20 20 20  (osc) {..       
8e840 20 20 20 20 20 20 20 20 20 6f 73 63 2e 70 68 61           osc.pha
8e850 73 65 20 3d 20 70 68 61 73 65 3b 0a 09 20 20 20  se = phase;..   
8e860 20 20 20 20 20 20 20 20 20 7d 29 3b 0a 09 20 20           });..  
8e870 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b        }..    });
8e880 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54  ..    /**... * T
8e890 68 65 20 70 61 72 74 69 61 6c 73 20 6f 66 20 74  he partials of t
8e8a0 68 65 20 63 61 72 72 69 65 72 20 77 61 76 65 66  he carrier wavef
8e8b0 6f 72 6d 2e 20 41 20 70 61 72 74 69 61 6c 20 72  orm. A partial r
8e8c0 65 70 72 65 73 65 6e 74 73 20 0a 09 09 20 2a 20  epresents ... * 
8e8d0 74 68 65 20 61 6d 70 6c 69 74 75 64 65 20 61 74  the amplitude at
8e8e0 20 61 20 68 61 72 6d 6f 6e 69 63 2e 20 54 68 65   a harmonic. The
8e8f0 20 66 69 72 73 74 20 68 61 72 6d 6f 6e 69 63 20   first harmonic 
8e900 69 73 20 74 68 65 20 0a 09 09 20 2a 20 66 75 6e  is the ... * fun
8e910 64 61 6d 65 6e 74 61 6c 20 66 72 65 71 75 65 6e  damental frequen
8e920 63 79 2c 20 74 68 65 20 73 65 63 6f 6e 64 20 69  cy, the second i
8e930 73 20 74 68 65 20 6f 63 74 61 76 65 20 61 6e 64  s the octave and
8e940 20 73 6f 20 6f 6e 0a 09 09 20 2a 20 66 6f 6c 6c   so on... * foll
8e950 6f 77 69 6e 67 20 74 68 65 20 68 61 72 6d 6f 6e  owing the harmon
8e960 69 63 20 73 65 72 69 65 73 2e 20 0a 09 09 20 2a  ic series. ... *
8e970 20 53 65 74 74 69 6e 67 20 74 68 69 73 20 76 61   Setting this va
8e980 6c 75 65 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74  lue will automat
8e990 69 63 61 6c 6c 79 20 73 65 74 20 74 68 65 20 74  ically set the t
8e9a0 79 70 65 20 74 6f 20 22 63 75 73 74 6f 6d 22 2e  ype to "custom".
8e9b0 20 0a 09 09 20 2a 20 54 68 65 20 76 61 6c 75 65   ... * The value
8e9c0 20 69 73 20 61 6e 20 65 6d 70 74 79 20 61 72 72   is an empty arr
8e9d0 61 79 20 77 68 65 6e 20 74 68 65 20 74 79 70 65  ay when the type
8e9e0 20 69 73 20 6e 6f 74 20 22 63 75 73 74 6f 6d 22   is not "custom"
8e9f0 2e 20 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f  . ... * @memberO
8ea00 66 20 54 6f 6e 65 2e 46 61 74 4f 73 63 69 6c 6c  f Tone.FatOscill
8ea10 61 74 6f 72 23 0a 09 09 20 2a 20 40 74 79 70 65  ator#... * @type
8ea20 20 7b 41 72 72 61 79 7d 0a 09 09 20 2a 20 40 6e   {Array}... * @n
8ea30 61 6d 65 20 70 61 72 74 69 61 6c 73 0a 09 09 20  ame partials... 
8ea40 2a 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20  * @example... * 
8ea50 6f 73 63 2e 70 61 72 74 69 61 6c 73 20 3d 20 5b  osc.partials = [
8ea60 31 2c 20 30 2e 32 2c 20 30 2e 30 31 5d 3b 0a 09  1, 0.2, 0.01];..
8ea70 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74  . */..    Object
8ea80 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28  .defineProperty(
8ea90 54 6f 6e 65 2e 46 61 74 4f 73 63 69 6c 6c 61 74  Tone.FatOscillat
8eaa0 6f 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 70  or.prototype, 'p
8eab0 61 72 74 69 61 6c 73 27 2c 20 7b 0a 09 20 20 20  artials', {..   
8eac0 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69       get: functi
8ead0 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
8eae0 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
8eaf0 2e 5f 70 61 72 74 69 61 6c 73 3b 0a 09 20 20 20  ._partials;..   
8eb00 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20       },..       
8eb10 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   set: function (
8eb20 70 61 72 74 69 61 6c 73 29 20 7b 0a 09 20 20 20  partials) {..   
8eb30 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70           this._p
8eb40 61 72 74 69 61 6c 73 20 3d 20 70 61 72 74 69 61  artials = partia
8eb50 6c 73 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ls;..           
8eb60 20 74 68 69 73 2e 5f 74 79 70 65 20 3d 20 54 6f   this._type = To
8eb70 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f 72 2e 54 79  ne.Oscillator.Ty
8eb80 70 65 2e 43 75 73 74 6f 6d 3b 0a 09 20 20 20 20  pe.Custom;..    
8eb90 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 66 6f          this._fo
8eba0 72 45 61 63 68 28 66 75 6e 63 74 69 6f 6e 20 28  rEach(function (
8ebb0 6f 73 63 29 20 7b 0a 09 20 20 20 20 20 20 20 20  osc) {..        
8ebc0 20 20 20 20 20 20 20 20 6f 73 63 2e 70 61 72 74          osc.part
8ebd0 69 61 6c 73 20 3d 20 70 61 72 74 69 61 6c 73 3b  ials = partials;
8ebe0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 29  ..            })
8ebf0 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20  ;..        }..  
8ec00 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09    });..    /**..
8ec10 09 20 2a 20 20 43 6c 65 61 6e 20 75 70 2e 0a 09  . *  Clean up...
8ec20 09 20 2a 20 20 40 72 65 74 75 72 6e 20 7b 54 6f  . *  @return {To
8ec30 6e 65 2e 46 61 74 4f 73 63 69 6c 6c 61 74 6f 72  ne.FatOscillator
8ec40 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20  } this... */..  
8ec50 20 20 54 6f 6e 65 2e 46 61 74 4f 73 63 69 6c 6c    Tone.FatOscill
8ec60 61 74 6f 72 2e 70 72 6f 74 6f 74 79 70 65 2e 64  ator.prototype.d
8ec70 69 73 70 6f 73 65 20 3d 20 66 75 6e 63 74 69 6f  ispose = functio
8ec80 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
8ec90 54 6f 6e 65 2e 53 6f 75 72 63 65 2e 70 72 6f 74  Tone.Source.prot
8eca0 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 2e 63 61  otype.dispose.ca
8ecb0 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20 20 20 20  ll(this);..     
8ecc0 20 20 20 74 68 69 73 2e 5f 77 72 69 74 61 62 6c     this._writabl
8ecd0 65 28 5b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e([..           
8ece0 20 27 66 72 65 71 75 65 6e 63 79 27 2c 0a 09 20   'frequency',.. 
8ecf0 20 20 20 20 20 20 20 20 20 20 20 27 64 65 74 75             'detu
8ed00 6e 65 27 0a 09 20 20 20 20 20 20 20 20 5d 29 3b  ne'..        ]);
8ed10 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 66  ..        this.f
8ed20 72 65 71 75 65 6e 63 79 2e 64 69 73 70 6f 73 65  requency.dispose
8ed30 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ();..        thi
8ed40 73 2e 66 72 65 71 75 65 6e 63 79 20 3d 20 6e 75  s.frequency = nu
8ed50 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ll;..        thi
8ed60 73 2e 64 65 74 75 6e 65 2e 64 69 73 70 6f 73 65  s.detune.dispose
8ed70 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ();..        thi
8ed80 73 2e 64 65 74 75 6e 65 20 3d 20 6e 75 6c 6c 3b  s.detune = null;
8ed90 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
8eda0 66 6f 72 45 61 63 68 28 66 75 6e 63 74 69 6f 6e  forEach(function
8edb0 20 28 6f 73 63 29 20 7b 0a 09 20 20 20 20 20 20   (osc) {..      
8edc0 20 20 20 20 20 20 6f 73 63 2e 64 69 73 70 6f 73        osc.dispos
8edd0 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 29  e();..        })
8ede0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
8edf0 5f 6f 73 63 69 6c 6c 61 74 6f 72 73 20 3d 20 6e  _oscillators = n
8ee00 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ull;..        th
8ee10 69 73 2e 5f 70 61 72 74 69 61 6c 73 20 3d 20 6e  is._partials = n
8ee20 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 72 65  ull;..        re
8ee30 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20  turn this;..    
8ee40 7d 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54  };..    return T
8ee50 6f 6e 65 2e 46 61 74 4f 73 63 69 6c 6c 61 74 6f  one.FatOscillato
8ee60 72 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28  r;..});..Module(
8ee70 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20  function (Tone) 
8ee80 7b 0a 09 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a  {..    ..    /**
8ee90 0a 09 09 20 2a 20 20 40 63 6c 61 73 73 20 54 6f  ... *  @class To
8eea0 6e 65 2e 4f 6d 6e 69 4f 73 63 69 6c 6c 61 74 6f  ne.OmniOscillato
8eeb0 72 20 61 67 67 72 65 67 61 74 65 73 20 54 6f 6e  r aggregates Ton
8eec0 65 2e 4f 73 63 69 6c 6c 61 74 6f 72 2c 20 54 6f  e.Oscillator, To
8eed0 6e 65 2e 50 75 6c 73 65 4f 73 63 69 6c 6c 61 74  ne.PulseOscillat
8eee0 6f 72 2c 0a 09 09 20 2a 20 20 20 20 20 20 20 20  or,... *        
8eef0 20 54 6f 6e 65 2e 50 57 4d 4f 73 63 69 6c 6c 61   Tone.PWMOscilla
8ef00 74 6f 72 2c 20 54 6f 6e 65 2e 46 4d 4f 73 63 69  tor, Tone.FMOsci
8ef10 6c 6c 61 74 6f 72 2c 20 54 6f 6e 65 2e 41 4d 4f  llator, Tone.AMO
8ef20 73 63 69 6c 6c 61 74 6f 72 2c 20 61 6e 64 20 54  scillator, and T
8ef30 6f 6e 65 2e 46 61 74 4f 73 63 69 6c 6c 61 74 6f  one.FatOscillato
8ef40 72 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 69  r... *         i
8ef50 6e 74 6f 20 6f 6e 65 20 63 6c 61 73 73 2e 20 54  nto one class. T
8ef60 68 65 20 6f 73 63 69 6c 6c 61 74 6f 72 20 63 6c  he oscillator cl
8ef70 61 73 73 20 63 61 6e 20 62 65 20 63 68 61 6e 67  ass can be chang
8ef80 65 64 20 62 79 20 73 65 74 74 69 6e 67 20 74 68  ed by setting th
8ef90 65 20 60 74 79 70 65 60 2e 20 0a 09 09 20 2a 20  e `type`. ... * 
8efa0 20 20 20 20 20 20 20 20 60 6f 6d 6e 69 4f 73 63          `omniOsc
8efb0 2e 74 79 70 65 20 3d 20 22 70 77 6d 22 60 20 77  .type = "pwm"` w
8efc0 69 6c 6c 20 73 65 74 20 69 74 20 74 6f 20 74 68  ill set it to th
8efd0 65 20 54 6f 6e 65 2e 50 57 4d 4f 73 63 69 6c 6c  e Tone.PWMOscill
8efe0 61 74 6f 72 2e 20 50 72 65 66 69 78 69 6e 67 0a  ator. Prefixing.
8eff0 09 09 20 2a 20 20 20 20 20 20 20 20 20 61 6e 79  .. *         any
8f000 20 6f 66 20 74 68 65 20 62 61 73 69 63 20 74 79   of the basic ty
8f010 70 65 73 20 28 22 73 69 6e 65 22 2c 20 22 73 71  pes ("sine", "sq
8f020 75 61 72 65 34 22 2c 20 65 74 63 2e 29 20 77 69  uare4", etc.) wi
8f030 74 68 20 22 66 6d 22 2c 20 22 61 6d 22 2c 20 6f  th "fm", "am", o
8f040 72 20 22 66 61 74 22 0a 09 09 20 2a 20 20 20 20  r "fat"... *    
8f050 20 20 20 20 20 77 69 6c 6c 20 75 73 65 20 74 68       will use th
8f060 65 20 46 4d 4f 73 63 69 6c 6c 61 74 6f 72 2c 20  e FMOscillator, 
8f070 41 4d 4f 73 63 69 6c 6c 61 74 6f 72 20 6f 72 20  AMOscillator or 
8f080 46 61 74 4f 73 63 69 6c 6c 61 74 6f 72 20 72 65  FatOscillator re
8f090 73 70 65 63 74 69 76 65 6c 79 2e 20 0a 09 09 20  spectively. ... 
8f0a0 2a 20 20 20 20 20 20 20 20 20 46 6f 72 20 65 78  *         For ex
8f0b0 61 6d 70 6c 65 3a 20 60 6f 6d 6e 69 4f 73 63 2e  ample: `omniOsc.
8f0c0 74 79 70 65 20 3d 20 22 66 61 74 73 61 77 74 6f  type = "fatsawto
8f0d0 6f 74 68 22 60 20 77 69 6c 6c 20 63 72 65 61 74  oth"` will creat
8f0e0 65 20 73 65 74 20 74 68 65 20 6f 73 63 69 6c 6c  e set the oscill
8f0f0 61 74 6f 72 0a 09 09 20 2a 20 20 20 20 20 20 20  ator... *       
8f100 20 20 74 6f 20 61 20 46 61 74 4f 73 63 69 6c 6c    to a FatOscill
8f110 61 74 6f 72 20 6f 66 20 74 79 70 65 20 22 73 61  ator of type "sa
8f120 77 74 6f 6f 74 68 22 2e 20 0a 09 09 20 2a 0a 09  wtooth". ... *..
8f130 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b 54  . *  @extends {T
8f140 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f 72 7d 0a  one.Oscillator}.
8f150 09 09 20 2a 20 20 40 63 6f 6e 73 74 72 75 63 74  .. *  @construct
8f160 6f 72 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  or... *  @param 
8f170 7b 46 72 65 71 75 65 6e 63 79 7d 20 66 72 65 71  {Frequency} freq
8f180 75 65 6e 63 79 20 54 68 65 20 69 6e 69 74 69 61  uency The initia
8f190 6c 20 66 72 65 71 75 65 6e 63 79 20 6f 66 20 74  l frequency of t
8f1a0 68 65 20 6f 73 63 69 6c 6c 61 74 6f 72 2e 0a 09  he oscillator...
8f1b0 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 53 74 72  . *  @param {Str
8f1c0 69 6e 67 7d 20 74 79 70 65 20 54 68 65 20 74 79  ing} type The ty
8f1d0 70 65 20 6f 66 20 74 68 65 20 6f 73 63 69 6c 6c  pe of the oscill
8f1e0 61 74 6f 72 2e 0a 09 09 20 2a 20 20 40 65 78 61  ator.... *  @exa
8f1f0 6d 70 6c 65 0a 09 09 20 2a 20 20 76 61 72 20 6f  mple... *  var o
8f200 6d 6e 69 4f 73 63 20 3d 20 6e 65 77 20 54 6f 6e  mniOsc = new Ton
8f210 65 2e 4f 6d 6e 69 4f 73 63 69 6c 6c 61 74 6f 72  e.OmniOscillator
8f220 28 22 43 23 34 22 2c 20 22 70 77 6d 22 29 3b 0a  ("C#4", "pwm");.
8f230 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
8f240 4f 6d 6e 69 4f 73 63 69 6c 6c 61 74 6f 72 20 3d  OmniOscillator =
8f250 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
8f260 20 20 20 20 20 20 20 20 76 61 72 20 6f 70 74 69          var opti
8f270 6f 6e 73 20 3d 20 74 68 69 73 2e 6f 70 74 69 6f  ons = this.optio
8f280 6e 73 4f 62 6a 65 63 74 28 61 72 67 75 6d 65 6e  nsObject(argumen
8f290 74 73 2c 20 5b 0a 09 20 20 20 20 20 20 20 20 20  ts, [..         
8f2a0 20 20 20 27 66 72 65 71 75 65 6e 63 79 27 2c 0a     'frequency',.
8f2b0 09 20 20 20 20 20 20 20 20 20 20 20 20 27 74 79  .            'ty
8f2c0 70 65 27 0a 09 20 20 20 20 20 20 20 20 5d 2c 20  pe'..        ], 
8f2d0 54 6f 6e 65 2e 4f 6d 6e 69 4f 73 63 69 6c 6c 61  Tone.OmniOscilla
8f2e0 74 6f 72 2e 64 65 66 61 75 6c 74 73 29 3b 0a 09  tor.defaults);..
8f2f0 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 53 6f 75          Tone.Sou
8f300 72 63 65 2e 63 61 6c 6c 28 74 68 69 73 2c 20 6f  rce.call(this, o
8f310 70 74 69 6f 6e 73 29 3b 0a 09 20 20 20 20 20 20  ptions);..      
8f320 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65    /**.... *  The
8f330 20 66 72 65 71 75 65 6e 63 79 20 63 6f 6e 74 72   frequency contr
8f340 6f 6c 2e 0a 09 09 09 20 2a 20 20 40 74 79 70 65  ol..... *  @type
8f350 20 7b 46 72 65 71 75 65 6e 63 79 7d 0a 09 09 09   {Frequency}....
8f360 20 2a 20 20 40 73 69 67 6e 61 6c 0a 09 09 09 20   *  @signal.... 
8f370 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
8f380 2e 66 72 65 71 75 65 6e 63 79 20 3d 20 6e 65 77  .frequency = new
8f390 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 28 6f 70 74   Tone.Signal(opt
8f3a0 69 6f 6e 73 2e 66 72 65 71 75 65 6e 63 79 2c 20  ions.frequency, 
8f3b0 54 6f 6e 65 2e 54 79 70 65 2e 46 72 65 71 75 65  Tone.Type.Freque
8f3c0 6e 63 79 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  ncy);..        /
8f3d0 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 64 65  **.... *  The de
8f3e0 74 75 6e 65 20 63 6f 6e 74 72 6f 6c 0a 09 09 09  tune control....
8f3f0 20 2a 20 20 40 74 79 70 65 20 7b 43 65 6e 74 73   *  @type {Cents
8f400 7d 0a 09 09 09 20 2a 20 20 40 73 69 67 6e 61 6c  }.... *  @signal
8f410 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
8f420 20 74 68 69 73 2e 64 65 74 75 6e 65 20 3d 20 6e   this.detune = n
8f430 65 77 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 28 6f  ew Tone.Signal(o
8f440 70 74 69 6f 6e 73 2e 64 65 74 75 6e 65 2c 20 54  ptions.detune, T
8f450 6f 6e 65 2e 54 79 70 65 2e 43 65 6e 74 73 29 3b  one.Type.Cents);
8f460 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
8f470 09 20 2a 20 20 74 68 65 20 74 79 70 65 20 6f 66  . *  the type of
8f480 20 74 68 65 20 6f 73 63 69 6c 6c 61 74 6f 72 20   the oscillator 
8f490 73 6f 75 72 63 65 0a 09 09 09 20 2a 20 20 40 74  source.... *  @t
8f4a0 79 70 65 20 7b 53 74 72 69 6e 67 7d 0a 09 09 09  ype {String}....
8f4b0 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
8f4c0 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
8f4d0 73 2e 5f 73 6f 75 72 63 65 54 79 70 65 20 3d 20  s._sourceType = 
8f4e0 75 6e 64 65 66 69 6e 65 64 3b 0a 09 20 20 20 20  undefined;..    
8f4f0 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 74      /**.... *  t
8f500 68 65 20 6f 73 63 69 6c 6c 61 74 6f 72 0a 09 09  he oscillator...
8f510 09 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65  . *  @type {Tone
8f520 2e 4f 73 63 69 6c 6c 61 74 6f 72 7d 0a 09 09 09  .Oscillator}....
8f530 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
8f540 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
8f550 73 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72 20 3d 20  s._oscillator = 
8f560 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 2f  null;..        /
8f570 2f 73 65 74 20 74 68 65 20 6f 73 63 69 6c 6c 61  /set the oscilla
8f580 74 6f 72 0a 09 20 20 20 20 20 20 20 20 74 68 69  tor..        thi
8f590 73 2e 74 79 70 65 20 3d 20 6f 70 74 69 6f 6e 73  s.type = options
8f5a0 2e 74 79 70 65 3b 0a 09 20 20 20 20 20 20 20 20  .type;..        
8f5b0 74 68 69 73 2e 5f 72 65 61 64 4f 6e 6c 79 28 5b  this._readOnly([
8f5c0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 66  ..            'f
8f5d0 72 65 71 75 65 6e 63 79 27 2c 0a 09 20 20 20 20  requency',..    
8f5e0 20 20 20 20 20 20 20 20 27 64 65 74 75 6e 65 27          'detune'
8f5f0 0a 09 20 20 20 20 20 20 20 20 5d 29 3b 0a 09 20  ..        ]);.. 
8f600 20 20 20 20 20 20 20 2f 2f 73 65 74 20 74 68 65         //set the
8f610 20 6f 70 74 69 6f 6e 73 0a 09 20 20 20 20 20 20   options..      
8f620 20 20 74 68 69 73 2e 73 65 74 28 6f 70 74 69 6f    this.set(optio
8f630 6e 73 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  ns);..    };..  
8f640 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f    Tone.extend(To
8f650 6e 65 2e 4f 6d 6e 69 4f 73 63 69 6c 6c 61 74 6f  ne.OmniOscillato
8f660 72 2c 20 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74  r, Tone.Oscillat
8f670 6f 72 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09  or);..    /**...
8f680 20 2a 20 20 64 65 66 61 75 6c 74 20 76 61 6c 75   *  default valu
8f690 65 73 0a 09 09 20 2a 20 20 40 73 74 61 74 69 63  es... *  @static
8f6a0 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4f 62  ... *  @type {Ob
8f6b0 6a 65 63 74 7d 0a 09 09 20 2a 20 20 40 63 6f 6e  ject}... *  @con
8f6c0 73 74 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  st... */..    To
8f6d0 6e 65 2e 4f 6d 6e 69 4f 73 63 69 6c 6c 61 74 6f  ne.OmniOscillato
8f6e0 72 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b 0a 09  r.defaults = {..
8f6f0 20 20 20 20 20 20 20 20 27 66 72 65 71 75 65 6e          'frequen
8f700 63 79 27 3a 20 34 34 30 2c 0a 09 20 20 20 20 20  cy': 440,..     
8f710 20 20 20 27 64 65 74 75 6e 65 27 3a 20 30 2c 0a     'detune': 0,.
8f720 09 20 20 20 20 20 20 20 20 27 74 79 70 65 27 3a  .        'type':
8f730 20 27 73 69 6e 65 27 2c 0a 09 20 20 20 20 20 20   'sine',..      
8f740 20 20 27 70 68 61 73 65 27 3a 20 30 0a 09 20 20    'phase': 0..  
8f750 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    };..    /**...
8f760 20 2a 20 20 40 65 6e 75 6d 20 7b 53 74 72 69 6e   *  @enum {Strin
8f770 67 7d 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74  g}... *  @privat
8f780 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 76 61 72  e... */..    var
8f790 20 4f 6d 6e 69 4f 73 63 54 79 70 65 20 3d 20 7b   OmniOscType = {
8f7a0 0a 09 20 20 20 20 20 20 20 20 50 75 6c 73 65 3a  ..        Pulse:
8f7b0 20 27 50 75 6c 73 65 4f 73 63 69 6c 6c 61 74 6f   'PulseOscillato
8f7c0 72 27 2c 0a 09 20 20 20 20 20 20 20 20 50 57 4d  r',..        PWM
8f7d0 3a 20 27 50 57 4d 4f 73 63 69 6c 6c 61 74 6f 72  : 'PWMOscillator
8f7e0 27 2c 0a 09 20 20 20 20 20 20 20 20 4f 73 63 3a  ',..        Osc:
8f7f0 20 27 4f 73 63 69 6c 6c 61 74 6f 72 27 2c 0a 09   'Oscillator',..
8f800 20 20 20 20 20 20 20 20 46 4d 3a 20 27 46 4d 4f          FM: 'FMO
8f810 73 63 69 6c 6c 61 74 6f 72 27 2c 0a 09 20 20 20  scillator',..   
8f820 20 20 20 20 20 41 4d 3a 20 27 41 4d 4f 73 63 69       AM: 'AMOsci
8f830 6c 6c 61 74 6f 72 27 2c 0a 09 20 20 20 20 20 20  llator',..      
8f840 20 20 46 61 74 3a 20 27 46 61 74 4f 73 63 69 6c    Fat: 'FatOscil
8f850 6c 61 74 6f 72 27 0a 09 20 20 20 20 7d 3b 0a 09  lator'..    };..
8f860 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 73 74      /**... *  st
8f870 61 72 74 20 74 68 65 20 6f 73 63 69 6c 6c 61 74  art the oscillat
8f880 6f 72 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  or... *  @param 
8f890 7b 54 69 6d 65 7d 20 5b 74 69 6d 65 3d 6e 6f 77  {Time} [time=now
8f8a0 5d 20 74 68 65 20 74 69 6d 65 20 74 6f 20 73 74  ] the time to st
8f8b0 61 72 74 20 74 68 65 20 6f 73 63 69 6c 6c 61 74  art the oscillat
8f8c0 6f 72 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74  or... *  @privat
8f8d0 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  e... */..    Ton
8f8e0 65 2e 4f 6d 6e 69 4f 73 63 69 6c 6c 61 74 6f 72  e.OmniOscillator
8f8f0 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 73 74 61 72  .prototype._star
8f900 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74 69  t = function (ti
8f910 6d 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 74  me) {..        t
8f920 68 69 73 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72 2e  his._oscillator.
8f930 73 74 61 72 74 28 74 69 6d 65 29 3b 0a 09 20 20  start(time);..  
8f940 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    };..    /**...
8f950 20 2a 20 20 73 74 61 72 74 20 74 68 65 20 6f 73   *  start the os
8f960 63 69 6c 6c 61 74 6f 72 0a 09 09 20 2a 20 20 40  cillator... *  @
8f970 70 61 72 61 6d 20 7b 54 69 6d 65 7d 20 5b 74 69  param {Time} [ti
8f980 6d 65 3d 6e 6f 77 5d 20 74 68 65 20 74 69 6d 65  me=now] the time
8f990 20 74 6f 20 73 74 61 72 74 20 74 68 65 20 6f 73   to start the os
8f9a0 63 69 6c 6c 61 74 6f 72 0a 09 09 20 2a 20 20 40  cillator... *  @
8f9b0 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20  private... */.. 
8f9c0 20 20 20 54 6f 6e 65 2e 4f 6d 6e 69 4f 73 63 69     Tone.OmniOsci
8f9d0 6c 6c 61 74 6f 72 2e 70 72 6f 74 6f 74 79 70 65  llator.prototype
8f9e0 2e 5f 73 74 6f 70 20 3d 20 66 75 6e 63 74 69 6f  ._stop = functio
8f9f0 6e 20 28 74 69 6d 65 29 20 7b 0a 09 20 20 20 20  n (time) {..    
8fa00 20 20 20 20 74 68 69 73 2e 5f 6f 73 63 69 6c 6c      this._oscill
8fa10 61 74 6f 72 2e 73 74 6f 70 28 74 69 6d 65 29 3b  ator.stop(time);
8fa20 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
8fa30 2a 0a 09 09 20 2a 20 54 68 65 20 74 79 70 65 20  *... * The type 
8fa40 6f 66 20 74 68 65 20 6f 73 63 69 6c 6c 61 74 6f  of the oscillato
8fa50 72 2e 20 43 61 6e 20 62 65 20 61 6e 79 20 6f 66  r. Can be any of
8fa60 20 74 68 65 20 62 61 73 69 63 20 74 79 70 65 73   the basic types
8fa70 3a 20 73 69 6e 65 2c 20 73 71 75 61 72 65 2c 20  : sine, square, 
8fa80 74 72 69 61 6e 67 6c 65 2c 20 73 61 77 74 6f 6f  triangle, sawtoo
8fa90 74 68 2e 20 4f 72 0a 09 09 20 2a 20 70 72 65 66  th. Or... * pref
8faa0 69 78 20 74 68 65 20 62 61 73 69 63 20 74 79 70  ix the basic typ
8fab0 65 73 20 77 69 74 68 20 22 66 6d 22 2c 20 22 61  es with "fm", "a
8fac0 6d 22 2c 20 6f 72 20 22 66 61 74 22 20 74 6f 20  m", or "fat" to 
8fad0 75 73 65 20 74 68 65 20 46 4d 4f 73 63 69 6c 6c  use the FMOscill
8fae0 61 74 6f 72 2c 20 41 4d 4f 73 63 69 6c 6c 61 74  ator, AMOscillat
8faf0 6f 72 20 6f 72 20 46 61 74 4f 73 63 69 6c 6c 61  or or FatOscilla
8fb00 74 6f 72 0a 09 09 20 2a 20 74 79 70 65 73 2e 20  tor... * types. 
8fb10 54 68 65 20 6f 73 63 69 6c 6c 61 74 6f 72 20 63  The oscillator c
8fb20 6f 75 6c 64 20 61 6c 73 6f 20 62 65 20 73 65 74  ould also be set
8fb30 20 74 6f 20 22 70 77 6d 22 20 6f 72 20 22 70 75   to "pwm" or "pu
8fb40 6c 73 65 22 2e 20 41 6c 6c 20 6f 66 20 74 68 65  lse". All of the
8fb50 20 70 61 72 61 6d 65 74 65 72 73 20 6f 66 20 74   parameters of t
8fb60 68 65 0a 09 09 20 2a 20 6f 73 63 69 6c 6c 61 74  he... * oscillat
8fb70 6f 72 27 73 20 63 6c 61 73 73 20 61 72 65 20 61  or's class are a
8fb80 63 63 65 73 73 69 62 6c 65 20 77 68 65 6e 20 74  ccessible when t
8fb90 68 65 20 6f 73 63 69 6c 6c 61 74 6f 72 20 69 73  he oscillator is
8fba0 20 73 65 74 20 74 6f 20 74 68 61 74 20 74 79 70   set to that typ
8fbb0 65 2c 20 62 75 74 20 74 68 72 6f 77 73 20 61 6e  e, but throws an
8fbc0 20 65 72 72 6f 72 20 0a 09 09 20 2a 20 77 68 65   error ... * whe
8fbd0 6e 20 69 74 27 73 20 6e 6f 74 2e 0a 09 09 20 2a  n it's not.... *
8fbe0 20 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66   ... * @memberOf
8fbf0 20 54 6f 6e 65 2e 4f 6d 6e 69 4f 73 63 69 6c 6c   Tone.OmniOscill
8fc00 61 74 6f 72 23 0a 09 09 20 2a 20 40 74 79 70 65  ator#... * @type
8fc10 20 7b 53 74 72 69 6e 67 7d 0a 09 09 20 2a 20 40   {String}... * @
8fc20 6e 61 6d 65 20 74 79 70 65 0a 09 09 20 2a 20 40  name type... * @
8fc30 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 6f 6d 6e  example... * omn
8fc40 69 4f 73 63 2e 74 79 70 65 20 3d 20 22 70 77 6d  iOsc.type = "pwm
8fc50 22 3b 0a 09 09 20 2a 20 2f 2f 6d 6f 64 75 6c 61  ";... * //modula
8fc60 74 69 6f 6e 46 72 65 71 75 65 6e 63 79 20 69 73  tionFrequency is
8fc70 20 70 61 72 61 6d 65 74 65 72 20 77 68 69 63 68   parameter which
8fc80 20 69 73 20 61 76 61 69 6c 61 62 6c 65 0a 09 09   is available...
8fc90 20 2a 20 2f 2f 6f 6e 6c 79 20 77 68 65 6e 20 74   * //only when t
8fca0 68 65 20 74 79 70 65 20 69 73 20 22 70 77 6d 22  he type is "pwm"
8fcb0 2e 20 0a 09 09 20 2a 20 6f 6d 6e 69 4f 73 63 2e  . ... * omniOsc.
8fcc0 6d 6f 64 75 6c 61 74 69 6f 6e 46 72 65 71 75 65  modulationFreque
8fcd0 6e 63 79 2e 76 61 6c 75 65 20 3d 20 30 2e 35 3b  ncy.value = 0.5;
8fce0 0a 09 09 20 2a 20 40 65 78 61 6d 70 6c 65 0a 09  ... * @example..
8fcf0 09 20 2a 20 2f 2f 61 6e 20 73 71 75 61 72 65 20  . * //an square 
8fd00 77 61 76 65 20 66 72 65 71 75 65 6e 63 79 20 6d  wave frequency m
8fd10 6f 64 75 6c 61 74 65 64 20 62 79 20 61 20 73 61  odulated by a sa
8fd20 77 74 6f 6f 74 68 0a 09 09 20 2a 20 6f 6d 6e 69  wtooth... * omni
8fd30 4f 73 63 2e 74 79 70 65 20 3d 20 22 66 6d 73 71  Osc.type = "fmsq
8fd40 75 61 72 65 22 3b 0a 09 09 20 2a 20 6f 6d 6e 69  uare";... * omni
8fd50 4f 73 63 2e 6d 6f 64 75 6c 61 74 69 6f 6e 54 79  Osc.modulationTy
8fd60 70 65 20 3d 20 22 73 61 77 74 6f 6f 74 68 22 3b  pe = "sawtooth";
8fd70 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65  ... */..    Obje
8fd80 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74  ct.definePropert
8fd90 79 28 54 6f 6e 65 2e 4f 6d 6e 69 4f 73 63 69 6c  y(Tone.OmniOscil
8fda0 6c 61 74 6f 72 2e 70 72 6f 74 6f 74 79 70 65 2c  lator.prototype,
8fdb0 20 27 74 79 70 65 27 2c 20 7b 0a 09 20 20 20 20   'type', {..    
8fdc0 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f      get: functio
8fdd0 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
8fde0 20 20 20 20 76 61 72 20 70 72 65 66 69 78 20 3d      var prefix =
8fdf0 20 27 27 3b 0a 09 20 20 20 20 20 20 20 20 20 20   '';..          
8fe00 20 20 69 66 20 28 74 68 69 73 2e 5f 73 6f 75 72    if (this._sour
8fe10 63 65 54 79 70 65 20 3d 3d 3d 20 4f 6d 6e 69 4f  ceType === OmniO
8fe20 73 63 54 79 70 65 2e 46 4d 29 20 7b 0a 09 20 20  scType.FM) {..  
8fe30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72                pr
8fe40 65 66 69 78 20 3d 20 27 66 6d 27 3b 0a 09 20 20  efix = 'fm';..  
8fe50 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
8fe60 20 69 66 20 28 74 68 69 73 2e 5f 73 6f 75 72 63   if (this._sourc
8fe70 65 54 79 70 65 20 3d 3d 3d 20 4f 6d 6e 69 4f 73  eType === OmniOs
8fe80 63 54 79 70 65 2e 41 4d 29 20 7b 0a 09 20 20 20  cType.AM) {..   
8fe90 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65               pre
8fea0 66 69 78 20 3d 20 27 61 6d 27 3b 0a 09 20 20 20  fix = 'am';..   
8feb0 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else 
8fec0 69 66 20 28 74 68 69 73 2e 5f 73 6f 75 72 63 65  if (this._source
8fed0 54 79 70 65 20 3d 3d 3d 20 4f 6d 6e 69 4f 73 63  Type === OmniOsc
8fee0 54 79 70 65 2e 46 61 74 29 20 7b 0a 09 20 20 20  Type.Fat) {..   
8fef0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65               pre
8ff00 66 69 78 20 3d 20 27 66 61 74 27 3b 0a 09 20 20  fix = 'fat';..  
8ff10 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20            }..   
8ff20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
8ff30 70 72 65 66 69 78 20 2b 20 74 68 69 73 2e 5f 6f  prefix + this._o
8ff40 73 63 69 6c 6c 61 74 6f 72 2e 74 79 70 65 3b 0a  scillator.type;.
8ff50 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20  .        },..   
8ff60 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74 69       set: functi
8ff70 6f 6e 20 28 74 79 70 65 29 20 7b 0a 09 20 20 20  on (type) {..   
8ff80 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
8ff90 65 2e 73 75 62 73 74 72 28 30 2c 20 32 29 20 3d  e.substr(0, 2) =
8ffa0 3d 3d 20 27 66 6d 27 29 20 7b 0a 09 20 20 20 20  == 'fm') {..    
8ffb0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
8ffc0 2e 5f 63 72 65 61 74 65 4e 65 77 4f 73 63 69 6c  ._createNewOscil
8ffd0 6c 61 74 6f 72 28 4f 6d 6e 69 4f 73 63 54 79 70  lator(OmniOscTyp
8ffe0 65 2e 46 4d 29 3b 0a 09 20 20 20 20 20 20 20 20  e.FM);..        
8fff0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6f 73          this._os
90000 63 69 6c 6c 61 74 6f 72 2e 74 79 70 65 20 3d 20  cillator.type = 
90010 74 79 70 65 2e 73 75 62 73 74 72 28 32 29 3b 0a  type.substr(2);.
90020 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
90030 6c 73 65 20 69 66 20 28 74 79 70 65 2e 73 75 62  lse if (type.sub
90040 73 74 72 28 30 2c 20 32 29 20 3d 3d 3d 20 27 61  str(0, 2) === 'a
90050 6d 27 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  m') {..         
90060 20 20 20 20 20 20 20 74 68 69 73 2e 5f 63 72 65         this._cre
90070 61 74 65 4e 65 77 4f 73 63 69 6c 6c 61 74 6f 72  ateNewOscillator
90080 28 4f 6d 6e 69 4f 73 63 54 79 70 65 2e 41 4d 29  (OmniOscType.AM)
90090 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
900a0 20 20 20 74 68 69 73 2e 5f 6f 73 63 69 6c 6c 61     this._oscilla
900b0 74 6f 72 2e 74 79 70 65 20 3d 20 74 79 70 65 2e  tor.type = type.
900c0 73 75 62 73 74 72 28 32 29 3b 0a 09 20 20 20 20  substr(2);..    
900d0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69          } else i
900e0 66 20 28 74 79 70 65 2e 73 75 62 73 74 72 28 30  f (type.substr(0
900f0 2c 20 33 29 20 3d 3d 3d 20 27 66 61 74 27 29 20  , 3) === 'fat') 
90100 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
90110 20 20 20 74 68 69 73 2e 5f 63 72 65 61 74 65 4e     this._createN
90120 65 77 4f 73 63 69 6c 6c 61 74 6f 72 28 4f 6d 6e  ewOscillator(Omn
90130 69 4f 73 63 54 79 70 65 2e 46 61 74 29 3b 0a 09  iOscType.Fat);..
90140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90150 74 68 69 73 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72  this._oscillator
90160 2e 74 79 70 65 20 3d 20 74 79 70 65 2e 73 75 62  .type = type.sub
90170 73 74 72 28 33 29 3b 0a 09 20 20 20 20 20 20 20  str(3);..       
90180 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28       } else if (
90190 74 79 70 65 20 3d 3d 3d 20 27 70 77 6d 27 29 20  type === 'pwm') 
901a0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
901b0 20 20 20 74 68 69 73 2e 5f 63 72 65 61 74 65 4e     this._createN
901c0 65 77 4f 73 63 69 6c 6c 61 74 6f 72 28 4f 6d 6e  ewOscillator(Omn
901d0 69 4f 73 63 54 79 70 65 2e 50 57 4d 29 3b 0a 09  iOscType.PWM);..
901e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
901f0 73 65 20 69 66 20 28 74 79 70 65 20 3d 3d 3d 20  se if (type === 
90200 27 70 75 6c 73 65 27 29 20 7b 0a 09 20 20 20 20  'pulse') {..    
90210 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
90220 2e 5f 63 72 65 61 74 65 4e 65 77 4f 73 63 69 6c  ._createNewOscil
90230 6c 61 74 6f 72 28 4f 6d 6e 69 4f 73 63 54 79 70  lator(OmniOscTyp
90240 65 2e 50 75 6c 73 65 29 3b 0a 09 20 20 20 20 20  e.Pulse);..     
90250 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
90260 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
90270 20 74 68 69 73 2e 5f 63 72 65 61 74 65 4e 65 77   this._createNew
90280 4f 73 63 69 6c 6c 61 74 6f 72 28 4f 6d 6e 69 4f  Oscillator(OmniO
90290 73 63 54 79 70 65 2e 4f 73 63 29 3b 0a 09 20 20  scType.Osc);..  
902a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
902b0 69 73 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72 2e 74  is._oscillator.t
902c0 79 70 65 20 3d 20 74 79 70 65 3b 0a 09 20 20 20  ype = type;..   
902d0 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20           }..    
902e0 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09      }..    });..
902f0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65      /**... * The
90300 20 70 61 72 74 69 61 6c 73 20 6f 66 20 74 68 65   partials of the
90310 20 77 61 76 65 66 6f 72 6d 2e 20 41 20 70 61 72   waveform. A par
90320 74 69 61 6c 20 72 65 70 72 65 73 65 6e 74 73 20  tial represents 
90330 0a 09 09 20 2a 20 74 68 65 20 61 6d 70 6c 69 74  ... * the amplit
90340 75 64 65 20 61 74 20 61 20 68 61 72 6d 6f 6e 69  ude at a harmoni
90350 63 2e 20 54 68 65 20 66 69 72 73 74 20 68 61 72  c. The first har
90360 6d 6f 6e 69 63 20 69 73 20 74 68 65 20 0a 09 09  monic is the ...
90370 20 2a 20 66 75 6e 64 61 6d 65 6e 74 61 6c 20 66   * fundamental f
90380 72 65 71 75 65 6e 63 79 2c 20 74 68 65 20 73 65  requency, the se
90390 63 6f 6e 64 20 69 73 20 74 68 65 20 6f 63 74 61  cond is the octa
903a0 76 65 20 61 6e 64 20 73 6f 20 6f 6e 0a 09 09 20  ve and so on... 
903b0 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  * following the 
903c0 68 61 72 6d 6f 6e 69 63 20 73 65 72 69 65 73 2e  harmonic series.
903d0 20 0a 09 09 20 2a 20 53 65 74 74 69 6e 67 20 74   ... * Setting t
903e0 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 20 61  his value will a
903f0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 74  utomatically set
90400 20 74 68 65 20 74 79 70 65 20 74 6f 20 22 63 75   the type to "cu
90410 73 74 6f 6d 22 2e 20 0a 09 09 20 2a 20 54 68 65  stom". ... * The
90420 20 76 61 6c 75 65 20 69 73 20 61 6e 20 65 6d 70   value is an emp
90430 74 79 20 61 72 72 61 79 20 77 68 65 6e 20 74 68  ty array when th
90440 65 20 74 79 70 65 20 69 73 20 6e 6f 74 20 22 63  e type is not "c
90450 75 73 74 6f 6d 22 2e 20 0a 09 09 20 2a 20 54 68  ustom". ... * Th
90460 69 73 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61  is is not availa
90470 62 6c 65 20 6f 6e 20 22 70 77 6d 22 20 61 6e 64  ble on "pwm" and
90480 20 22 70 75 6c 73 65 22 20 6f 73 63 69 6c 6c 61   "pulse" oscilla
90490 74 6f 72 20 74 79 70 65 73 2e 0a 09 09 20 2a 20  tor types.... * 
904a0 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 4f  @memberOf Tone.O
904b0 6d 6e 69 4f 73 63 69 6c 6c 61 74 6f 72 23 0a 09  mniOscillator#..
904c0 09 20 2a 20 40 74 79 70 65 20 7b 41 72 72 61 79  . * @type {Array
904d0 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 70 61 72  }... * @name par
904e0 74 69 61 6c 73 0a 09 09 20 2a 20 40 65 78 61 6d  tials... * @exam
904f0 70 6c 65 0a 09 09 20 2a 20 6f 73 63 2e 70 61 72  ple... * osc.par
90500 74 69 61 6c 73 20 3d 20 5b 31 2c 20 30 2e 32 2c  tials = [1, 0.2,
90510 20 30 2e 30 31 5d 3b 0a 09 09 20 2a 2f 0a 09 20   0.01];... */.. 
90520 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65     Object.define
90530 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 4f 6d  Property(Tone.Om
90540 6e 69 4f 73 63 69 6c 6c 61 74 6f 72 2e 70 72 6f  niOscillator.pro
90550 74 6f 74 79 70 65 2c 20 27 70 61 72 74 69 61 6c  totype, 'partial
90560 73 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67  s', {..        g
90570 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  et: function () 
90580 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
90590 65 74 75 72 6e 20 74 68 69 73 2e 5f 6f 73 63 69  eturn this._osci
905a0 6c 6c 61 74 6f 72 2e 70 61 72 74 69 61 6c 73 3b  llator.partials;
905b0 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20  ..        },..  
905c0 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74        set: funct
905d0 69 6f 6e 20 28 70 61 72 74 69 61 6c 73 29 20 7b  ion (partials) {
905e0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
905f0 69 73 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72 2e 70  is._oscillator.p
90600 61 72 74 69 61 6c 73 20 3d 20 70 61 72 74 69 61  artials = partia
90610 6c 73 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  ls;..        }..
90620 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a      });..    /**
90630 0a 09 09 20 2a 20 20 53 65 74 20 61 20 6d 65 6d  ... *  Set a mem
90640 62 65 72 2f 61 74 74 72 69 62 75 74 65 20 6f 66  ber/attribute of
90650 20 74 68 65 20 6f 73 63 69 6c 6c 61 74 6f 72 2e   the oscillator.
90660 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b   ... *  @param {
90670 4f 62 6a 65 63 74 7c 53 74 72 69 6e 67 7d 20 70  Object|String} p
90680 61 72 61 6d 73 0a 09 09 20 2a 20 20 40 70 61 72  arams... *  @par
90690 61 6d 20 7b 6e 75 6d 62 65 72 3d 7d 20 76 61 6c  am {number=} val
906a0 75 65 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  ue... *  @param 
906b0 7b 54 69 6d 65 3d 7d 20 72 61 6d 70 54 69 6d 65  {Time=} rampTime
906c0 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20  ... *  @returns 
906d0 7b 54 6f 6e 65 2e 4f 6d 6e 69 4f 73 63 69 6c 6c  {Tone.OmniOscill
906e0 61 74 6f 72 7d 20 74 68 69 73 0a 09 09 20 2a 2f  ator} this... */
906f0 0a 09 20 20 20 20 54 6f 6e 65 2e 4f 6d 6e 69 4f  ..    Tone.OmniO
90700 73 63 69 6c 6c 61 74 6f 72 2e 70 72 6f 74 6f 74  scillator.protot
90710 79 70 65 2e 73 65 74 20 3d 20 66 75 6e 63 74 69  ype.set = functi
90720 6f 6e 20 28 70 61 72 61 6d 73 2c 20 76 61 6c 75  on (params, valu
90730 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 2f 2f  e) {..        //
90740 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 74 79  make sure the ty
90750 70 65 20 69 73 20 73 65 74 20 66 69 72 73 74 0a  pe is set first.
90760 09 20 20 20 20 20 20 20 20 69 66 20 28 70 61 72  .        if (par
90770 61 6d 73 20 3d 3d 3d 20 27 74 79 70 65 27 29 20  ams === 'type') 
90780 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
90790 68 69 73 2e 74 79 70 65 20 3d 20 76 61 6c 75 65  his.type = value
907a0 3b 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73  ;..        } els
907b0 65 20 69 66 20 28 74 68 69 73 2e 69 73 4f 62 6a  e if (this.isObj
907c0 65 63 74 28 70 61 72 61 6d 73 29 20 26 26 20 70  ect(params) && p
907d0 61 72 61 6d 73 2e 68 61 73 4f 77 6e 50 72 6f 70  arams.hasOwnProp
907e0 65 72 74 79 28 27 74 79 70 65 27 29 29 20 7b 0a  erty('type')) {.
907f0 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
90800 73 2e 74 79 70 65 20 3d 20 70 61 72 61 6d 73 2e  s.type = params.
90810 74 79 70 65 3b 0a 09 20 20 20 20 20 20 20 20 7d  type;..        }
90820 0a 09 20 20 20 20 20 20 20 20 2f 2f 74 68 65 6e  ..        //then
90830 20 73 65 74 20 74 68 65 20 72 65 73 74 0a 09 20   set the rest.. 
90840 20 20 20 20 20 20 20 54 6f 6e 65 2e 70 72 6f 74         Tone.prot
90850 6f 74 79 70 65 2e 73 65 74 2e 61 70 70 6c 79 28  otype.set.apply(
90860 74 68 69 73 2c 20 61 72 67 75 6d 65 6e 74 73 29  this, arguments)
90870 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
90880 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a  n this;..    };.
90890 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 63  .    /**... *  c
908a0 6f 6e 6e 65 63 74 20 74 68 65 20 6f 73 63 69 6c  onnect the oscil
908b0 6c 61 74 6f 72 20 74 6f 20 74 68 65 20 66 72 65  lator to the fre
908c0 71 75 65 6e 63 79 20 61 6e 64 20 64 65 74 75 6e  quency and detun
908d0 65 20 73 69 67 6e 61 6c 73 0a 09 09 20 2a 20 20  e signals... *  
908e0 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09  @private... */..
908f0 20 20 20 20 54 6f 6e 65 2e 4f 6d 6e 69 4f 73 63      Tone.OmniOsc
90900 69 6c 6c 61 74 6f 72 2e 70 72 6f 74 6f 74 79 70  illator.prototyp
90910 65 2e 5f 63 72 65 61 74 65 4e 65 77 4f 73 63 69  e._createNewOsci
90920 6c 6c 61 74 6f 72 20 3d 20 66 75 6e 63 74 69 6f  llator = functio
90930 6e 20 28 6f 73 63 54 79 70 65 29 20 7b 0a 09 20  n (oscType) {.. 
90940 20 20 20 20 20 20 20 69 66 20 28 6f 73 63 54 79         if (oscTy
90950 70 65 20 21 3d 3d 20 74 68 69 73 2e 5f 73 6f 75  pe !== this._sou
90960 72 63 65 54 79 70 65 29 20 7b 0a 09 20 20 20 20  rceType) {..    
90970 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 6f          this._so
90980 75 72 63 65 54 79 70 65 20 3d 20 6f 73 63 54 79  urceType = oscTy
90990 70 65 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  pe;..           
909a0 20 76 61 72 20 4f 73 63 69 6c 6c 61 74 6f 72 43   var OscillatorC
909b0 6f 6e 73 74 72 75 63 74 6f 72 20 3d 20 54 6f 6e  onstructor = Ton
909c0 65 5b 6f 73 63 54 79 70 65 5d 3b 0a 09 20 20 20  e[oscType];..   
909d0 20 20 20 20 20 20 20 20 20 2f 2f 73 68 6f 72 74           //short
909e0 20 64 65 6c 61 79 20 74 6f 20 61 76 6f 69 64 20   delay to avoid 
909f0 63 6c 69 63 6b 73 20 6f 6e 20 74 68 65 20 63 68  clicks on the ch
90a00 61 6e 67 65 0a 09 20 20 20 20 20 20 20 20 20 20  ange..          
90a10 20 20 76 61 72 20 6e 6f 77 20 3d 20 74 68 69 73    var now = this
90a20 2e 6e 6f 77 28 29 20 2b 20 74 68 69 73 2e 62 6c  .now() + this.bl
90a30 6f 63 6b 54 69 6d 65 3b 0a 09 20 20 20 20 20 20  ockTime;..      
90a40 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 5f        if (this._
90a50 6f 73 63 69 6c 6c 61 74 6f 72 20 21 3d 3d 20 6e  oscillator !== n
90a60 75 6c 6c 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ull) {..        
90a70 20 20 20 20 20 20 20 20 76 61 72 20 6f 6c 64 4f          var oldO
90a80 73 63 20 3d 20 74 68 69 73 2e 5f 6f 73 63 69 6c  sc = this._oscil
90a90 6c 61 74 6f 72 3b 0a 09 20 20 20 20 20 20 20 20  lator;..        
90aa0 20 20 20 20 20 20 20 20 6f 6c 64 4f 73 63 2e 73          oldOsc.s
90ab0 74 6f 70 28 6e 6f 77 29 3b 0a 09 20 20 20 20 20  top(now);..     
90ac0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 64 69 73             //dis
90ad0 70 6f 73 65 20 74 68 65 20 6f 6c 64 20 6f 6e 65  pose the old one
90ae0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
90af0 20 20 73 65 74 54 69 6d 65 6f 75 74 28 66 75 6e    setTimeout(fun
90b00 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
90b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90b20 6f 6c 64 4f 73 63 2e 64 69 73 70 6f 73 65 28 29  oldOsc.dispose()
90b30 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
90b40 20 20 20 20 20 20 20 6f 6c 64 4f 73 63 20 3d 20         oldOsc = 
90b50 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 20  null;..         
90b60 20 20 20 20 20 20 20 7d 2c 20 74 68 69 73 2e 62         }, this.b
90b70 6c 6f 63 6b 54 69 6d 65 20 2a 20 31 30 30 30 29  lockTime * 1000)
90b80 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
90b90 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
90ba0 69 73 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72 20 3d  is._oscillator =
90bb0 20 6e 65 77 20 4f 73 63 69 6c 6c 61 74 6f 72 43   new OscillatorC
90bc0 6f 6e 73 74 72 75 63 74 6f 72 28 29 3b 0a 09 20  onstructor();.. 
90bd0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
90be0 66 72 65 71 75 65 6e 63 79 2e 63 6f 6e 6e 65 63  frequency.connec
90bf0 74 28 74 68 69 73 2e 5f 6f 73 63 69 6c 6c 61 74  t(this._oscillat
90c00 6f 72 2e 66 72 65 71 75 65 6e 63 79 29 3b 0a 09  or.frequency);..
90c10 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
90c20 2e 64 65 74 75 6e 65 2e 63 6f 6e 6e 65 63 74 28  .detune.connect(
90c30 74 68 69 73 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72  this._oscillator
90c40 2e 64 65 74 75 6e 65 29 3b 0a 09 20 20 20 20 20  .detune);..     
90c50 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6f 73 63         this._osc
90c60 69 6c 6c 61 74 6f 72 2e 63 6f 6e 6e 65 63 74 28  illator.connect(
90c70 74 68 69 73 2e 6f 75 74 70 75 74 29 3b 0a 09 20  this.output);.. 
90c80 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
90c90 68 69 73 2e 73 74 61 74 65 20 3d 3d 3d 20 54 6f  his.state === To
90ca0 6e 65 2e 53 74 61 74 65 2e 53 74 61 72 74 65 64  ne.State.Started
90cb0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
90cc0 20 20 20 20 20 74 68 69 73 2e 5f 6f 73 63 69 6c       this._oscil
90cd0 6c 61 74 6f 72 2e 73 74 61 72 74 28 6e 6f 77 29  lator.start(now)
90ce0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
90cf0 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
90d00 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20   };..    /**... 
90d10 2a 20 54 68 65 20 70 68 61 73 65 20 6f 66 20 74  * The phase of t
90d20 68 65 20 6f 73 63 69 6c 6c 61 74 6f 72 20 69 6e  he oscillator in
90d30 20 64 65 67 72 65 65 73 2e 20 0a 09 09 20 2a 20   degrees. ... * 
90d40 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 4f  @memberOf Tone.O
90d50 6d 6e 69 4f 73 63 69 6c 6c 61 74 6f 72 23 0a 09  mniOscillator#..
90d60 09 20 2a 20 40 74 79 70 65 20 7b 44 65 67 72 65  . * @type {Degre
90d70 65 73 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 70  es}... * @name p
90d80 68 61 73 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20  hase... */..    
90d90 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f  Object.definePro
90da0 70 65 72 74 79 28 54 6f 6e 65 2e 4f 6d 6e 69 4f  perty(Tone.OmniO
90db0 73 63 69 6c 6c 61 74 6f 72 2e 70 72 6f 74 6f 74  scillator.protot
90dc0 79 70 65 2c 20 27 70 68 61 73 65 27 2c 20 7b 0a  ype, 'phase', {.
90dd0 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75  .        get: fu
90de0 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
90df0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
90e00 74 68 69 73 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72  this._oscillator
90e10 2e 70 68 61 73 65 3b 0a 09 20 20 20 20 20 20 20  .phase;..       
90e20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74   },..        set
90e30 3a 20 66 75 6e 63 74 69 6f 6e 20 28 70 68 61 73  : function (phas
90e40 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  e) {..          
90e50 20 20 74 68 69 73 2e 5f 6f 73 63 69 6c 6c 61 74    this._oscillat
90e60 6f 72 2e 70 68 61 73 65 20 3d 20 70 68 61 73 65  or.phase = phase
90e70 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20  ;..        }..  
90e80 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09    });..    /**..
90e90 09 20 2a 20 54 68 65 20 77 69 64 74 68 20 6f 66  . * The width of
90ea0 20 74 68 65 20 6f 73 63 69 6c 6c 61 74 6f 72 20   the oscillator 
90eb0 28 6f 6e 6c 79 20 69 66 20 74 68 65 20 6f 73 63  (only if the osc
90ec0 69 6c 6c 61 74 6f 72 20 69 73 20 73 65 74 20 74  illator is set t
90ed0 6f 20 22 70 75 6c 73 65 22 29 0a 09 09 20 2a 20  o "pulse")... * 
90ee0 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 4f  @memberOf Tone.O
90ef0 6d 6e 69 4f 73 63 69 6c 6c 61 74 6f 72 23 0a 09  mniOscillator#..
90f00 09 20 2a 20 40 74 79 70 65 20 7b 4e 6f 72 6d 61  . * @type {Norma
90f10 6c 52 61 6e 67 65 7d 0a 09 09 20 2a 20 40 73 69  lRange}... * @si
90f20 67 6e 61 6c 0a 09 09 20 2a 20 40 6e 61 6d 65 20  gnal... * @name 
90f30 77 69 64 74 68 0a 09 09 20 2a 20 40 65 78 61 6d  width... * @exam
90f40 70 6c 65 0a 09 09 20 2a 20 76 61 72 20 6f 6d 6e  ple... * var omn
90f50 69 4f 73 63 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  iOsc = new Tone.
90f60 4f 6d 6e 69 4f 73 63 69 6c 6c 61 74 6f 72 28 34  OmniOscillator(4
90f70 34 30 2c 20 22 70 75 6c 73 65 22 29 3b 0a 09 09  40, "pulse");...
90f80 20 2a 20 2f 2f 63 61 6e 20 61 63 63 65 73 73 20   * //can access 
90f90 74 68 65 20 77 69 64 74 68 20 61 74 74 72 69 62  the width attrib
90fa0 75 74 65 20 6f 6e 6c 79 20 69 66 20 74 79 70 65  ute only if type
90fb0 20 3d 3d 3d 20 22 70 75 6c 73 65 22 0a 09 09 20   === "pulse"... 
90fc0 2a 20 6f 6d 6e 69 4f 73 63 2e 77 69 64 74 68 2e  * omniOsc.width.
90fd0 76 61 6c 75 65 20 3d 20 30 2e 32 3b 20 0a 09 09  value = 0.2; ...
90fe0 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e   */..    Object.
90ff0 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54  defineProperty(T
91000 6f 6e 65 2e 4f 6d 6e 69 4f 73 63 69 6c 6c 61 74  one.OmniOscillat
91010 6f 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 77  or.prototype, 'w
91020 69 64 74 68 27 2c 20 7b 0a 09 20 20 20 20 20 20  idth', {..      
91030 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    get: function 
91040 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  () {..          
91050 20 20 69 66 20 28 74 68 69 73 2e 5f 73 6f 75 72    if (this._sour
91060 63 65 54 79 70 65 20 3d 3d 3d 20 4f 6d 6e 69 4f  ceType === OmniO
91070 73 63 54 79 70 65 2e 50 75 6c 73 65 29 20 7b 0a  scType.Pulse) {.
91080 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
91090 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 6f 73   return this._os
910a0 63 69 6c 6c 61 74 6f 72 2e 77 69 64 74 68 3b 0a  cillator.width;.
910b0 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09  .            }..
910c0 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d          }..    }
910d0 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  );..    /**... *
910e0 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   The number of d
910f0 65 74 75 6e 65 64 20 6f 73 63 69 6c 6c 61 74 6f  etuned oscillato
91100 72 73 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f  rs... * @memberO
91110 66 20 54 6f 6e 65 2e 4f 6d 6e 69 4f 73 63 69 6c  f Tone.OmniOscil
91120 6c 61 74 6f 72 23 0a 09 09 20 2a 20 40 74 79 70  lator#... * @typ
91130 65 20 7b 4e 75 6d 62 65 72 7d 0a 09 09 20 2a 20  e {Number}... * 
91140 40 6e 61 6d 65 20 63 6f 75 6e 74 0a 09 09 20 2a  @name count... *
91150 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65  /..    Object.de
91160 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e  fineProperty(Ton
91170 65 2e 4f 6d 6e 69 4f 73 63 69 6c 6c 61 74 6f 72  e.OmniOscillator
91180 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 63 6f 75  .prototype, 'cou
91190 6e 74 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20  nt', {..        
911a0 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29  get: function ()
911b0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
911c0 69 66 20 28 74 68 69 73 2e 5f 73 6f 75 72 63 65  if (this._source
911d0 54 79 70 65 20 3d 3d 3d 20 4f 6d 6e 69 4f 73 63  Type === OmniOsc
911e0 54 79 70 65 2e 46 61 74 29 20 7b 0a 09 20 20 20  Type.Fat) {..   
911f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
91200 75 72 6e 20 74 68 69 73 2e 5f 6f 73 63 69 6c 6c  urn this._oscill
91210 61 74 6f 72 2e 63 6f 75 6e 74 3b 0a 09 20 20 20  ator.count;..   
91220 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20           }..    
91230 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20      },..        
91240 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 63  set: function (c
91250 6f 75 6e 74 29 20 7b 0a 09 20 20 20 20 20 20 20  ount) {..       
91260 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 5f 73       if (this._s
91270 6f 75 72 63 65 54 79 70 65 20 3d 3d 3d 20 4f 6d  ourceType === Om
91280 6e 69 4f 73 63 54 79 70 65 2e 46 61 74 29 20 7b  niOscType.Fat) {
91290 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
912a0 20 20 74 68 69 73 2e 5f 6f 73 63 69 6c 6c 61 74    this._oscillat
912b0 6f 72 2e 63 6f 75 6e 74 20 3d 20 63 6f 75 6e 74  or.count = count
912c0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
912d0 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
912e0 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09   });..    /**...
912f0 20 2a 20 54 68 65 20 64 65 74 75 6e 65 20 73 70   * The detune sp
91300 72 65 61 64 20 62 65 74 77 65 65 6e 20 74 68 65  read between the
91310 20 6f 73 63 69 6c 6c 61 74 6f 72 73 2e 20 49 66   oscillators. If
91320 20 22 63 6f 75 6e 74 22 20 69 73 0a 09 09 20 2a   "count" is... *
91330 20 73 65 74 20 74 6f 20 33 20 6f 73 63 69 6c 6c   set to 3 oscill
91340 61 74 6f 72 73 20 61 6e 64 20 74 68 65 20 22 73  ators and the "s
91350 70 72 65 61 64 22 20 69 73 20 73 65 74 20 74 6f  pread" is set to
91360 20 34 30 2c 0a 09 09 20 2a 20 74 68 65 20 74 68   40,... * the th
91370 72 65 65 20 6f 73 63 69 6c 6c 61 74 6f 72 73 20  ree oscillators 
91380 77 6f 75 6c 64 20 62 65 20 64 65 74 75 6e 65 64  would be detuned
91390 20 6c 69 6b 65 20 74 68 69 73 3a 20 5b 2d 32 30   like this: [-20
913a0 2c 20 30 2c 20 32 30 5d 0a 09 09 20 2a 20 66 6f  , 0, 20]... * fo
913b0 72 20 61 20 74 6f 74 61 6c 20 64 65 74 75 6e 65  r a total detune
913c0 20 73 70 72 65 61 64 20 6f 66 20 34 30 20 63 65   spread of 40 ce
913d0 6e 74 73 2e 20 53 65 65 20 54 6f 6e 65 2e 46 61  nts. See Tone.Fa
913e0 74 4f 73 63 69 6c 6c 61 74 6f 72 0a 09 09 20 2a  tOscillator... *
913f0 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 2e 0a   for more info..
91400 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54  .. * @memberOf T
91410 6f 6e 65 2e 4f 6d 6e 69 4f 73 63 69 6c 6c 61 74  one.OmniOscillat
91420 6f 72 23 0a 09 09 20 2a 20 40 74 79 70 65 20 7b  or#... * @type {
91430 43 65 6e 74 73 7d 0a 09 09 20 2a 20 40 6e 61 6d  Cents}... * @nam
91440 65 20 73 70 72 65 61 64 0a 09 09 20 2a 2f 0a 09  e spread... */..
91450 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e      Object.defin
91460 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 4f  eProperty(Tone.O
91470 6d 6e 69 4f 73 63 69 6c 6c 61 74 6f 72 2e 70 72  mniOscillator.pr
91480 6f 74 6f 74 79 70 65 2c 20 27 73 70 72 65 61 64  ototype, 'spread
91490 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65  ', {..        ge
914a0 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b  t: function () {
914b0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
914c0 20 28 74 68 69 73 2e 5f 73 6f 75 72 63 65 54 79   (this._sourceTy
914d0 70 65 20 3d 3d 3d 20 4f 6d 6e 69 4f 73 63 54 79  pe === OmniOscTy
914e0 70 65 2e 46 61 74 29 20 7b 0a 09 20 20 20 20 20  pe.Fat) {..     
914f0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
91500 6e 20 74 68 69 73 2e 5f 6f 73 63 69 6c 6c 61 74  n this._oscillat
91510 6f 72 2e 73 70 72 65 61 64 3b 0a 09 20 20 20 20  or.spread;..    
91520 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
91530 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73     },..        s
91540 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 73 70  et: function (sp
91550 72 65 61 64 29 20 7b 0a 09 20 20 20 20 20 20 20  read) {..       
91560 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 5f 73       if (this._s
91570 6f 75 72 63 65 54 79 70 65 20 3d 3d 3d 20 4f 6d  ourceType === Om
91580 6e 69 4f 73 63 54 79 70 65 2e 46 61 74 29 20 7b  niOscType.Fat) {
91590 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
915a0 20 20 74 68 69 73 2e 5f 6f 73 63 69 6c 6c 61 74    this._oscillat
915b0 6f 72 2e 73 70 72 65 61 64 20 3d 20 73 70 72 65  or.spread = spre
915c0 61 64 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ad;..           
915d0 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20   }..        }.. 
915e0 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a     });..    /**.
915f0 09 09 20 2a 20 54 68 65 20 74 79 70 65 20 6f 66  .. * The type of
91600 20 74 68 65 20 6d 6f 64 75 6c 61 74 6f 72 20 6f   the modulator o
91610 73 63 69 6c 6c 61 74 6f 72 2e 20 4f 6e 6c 79 20  scillator. Only 
91620 69 66 20 74 68 65 20 6f 73 63 69 6c 6c 61 74 6f  if the oscillato
91630 72 0a 09 09 20 2a 20 69 73 20 73 65 74 20 74 6f  r... * is set to
91640 20 22 61 6d 22 20 6f 72 20 22 66 6d 22 20 74 79   "am" or "fm" ty
91650 70 65 73 2e 20 73 65 65 2e 20 54 6f 6e 65 2e 41  pes. see. Tone.A
91660 4d 4f 73 63 69 6c 6c 61 74 6f 72 20 6f 72 20 54  MOscillator or T
91670 6f 6e 65 2e 46 4d 4f 73 63 69 6c 6c 61 74 6f 72  one.FMOscillator
91680 0a 09 09 20 2a 20 66 6f 72 20 6d 6f 72 65 20 69  ... * for more i
91690 6e 66 6f 2e 20 0a 09 09 20 2a 20 40 6d 65 6d 62  nfo. ... * @memb
916a0 65 72 4f 66 20 54 6f 6e 65 2e 4f 6d 6e 69 4f 73  erOf Tone.OmniOs
916b0 63 69 6c 6c 61 74 6f 72 23 0a 09 09 20 2a 20 40  cillator#... * @
916c0 74 79 70 65 20 7b 53 74 72 69 6e 67 7d 0a 09 09  type {String}...
916d0 20 2a 20 40 6e 61 6d 65 20 6d 6f 64 75 6c 61 74   * @name modulat
916e0 69 6f 6e 54 79 70 65 0a 09 09 20 2a 2f 0a 09 20  ionType... */.. 
916f0 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65     Object.define
91700 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 4f 6d  Property(Tone.Om
91710 6e 69 4f 73 63 69 6c 6c 61 74 6f 72 2e 70 72 6f  niOscillator.pro
91720 74 6f 74 79 70 65 2c 20 27 6d 6f 64 75 6c 61 74  totype, 'modulat
91730 69 6f 6e 54 79 70 65 27 2c 20 7b 0a 09 20 20 20  ionType', {..   
91740 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69       get: functi
91750 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
91760 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 5f 73       if (this._s
91770 6f 75 72 63 65 54 79 70 65 20 3d 3d 3d 20 4f 6d  ourceType === Om
91780 6e 69 4f 73 63 54 79 70 65 2e 46 4d 20 7c 7c 20  niOscType.FM || 
91790 74 68 69 73 2e 5f 73 6f 75 72 63 65 54 79 70 65  this._sourceType
917a0 20 3d 3d 3d 20 4f 6d 6e 69 4f 73 63 54 79 70 65   === OmniOscType
917b0 2e 41 4d 29 20 7b 0a 09 20 20 20 20 20 20 20 20  .AM) {..        
917c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
917d0 68 69 73 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72 2e  his._oscillator.
917e0 6d 6f 64 75 6c 61 74 69 6f 6e 54 79 70 65 3b 0a  modulationType;.
917f0 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09  .            }..
91800 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20          },..    
91810 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f      set: functio
91820 6e 20 28 6d 54 79 70 65 29 20 7b 0a 09 20 20 20  n (mType) {..   
91830 20 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69           if (thi
91840 73 2e 5f 73 6f 75 72 63 65 54 79 70 65 20 3d 3d  s._sourceType ==
91850 3d 20 4f 6d 6e 69 4f 73 63 54 79 70 65 2e 46 4d  = OmniOscType.FM
91860 20 7c 7c 20 74 68 69 73 2e 5f 73 6f 75 72 63 65   || this._source
91870 54 79 70 65 20 3d 3d 3d 20 4f 6d 6e 69 4f 73 63  Type === OmniOsc
91880 54 79 70 65 2e 41 4d 29 20 7b 0a 09 20 20 20 20  Type.AM) {..    
91890 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
918a0 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72 2e 6d 6f 64  ._oscillator.mod
918b0 75 6c 61 74 69 6f 6e 54 79 70 65 20 3d 20 6d 54  ulationType = mT
918c0 79 70 65 3b 0a 09 20 20 20 20 20 20 20 20 20 20  ype;..          
918d0 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 0a 09    }..        }..
918e0 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a      });..    /**
918f0 0a 09 09 20 2a 20 54 68 65 20 6d 6f 64 75 6c 61  ... * The modula
91900 74 69 6f 6e 20 69 6e 64 65 78 20 77 68 69 63 68  tion index which
91910 20 69 73 20 69 6e 20 65 73 73 65 6e 63 65 20 74   is in essence t
91920 68 65 20 64 65 70 74 68 20 6f 72 20 61 6d 6f 75  he depth or amou
91930 6e 74 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 61  nt of the modula
91940 74 69 6f 6e 2e 20 49 6e 20 6f 74 68 65 72 20 74  tion. In other t
91950 65 72 6d 73 20 69 74 20 69 73 20 74 68 65 20 0a  erms it is the .
91960 09 09 20 2a 20 72 61 74 69 6f 20 6f 66 20 74 68  .. * ratio of th
91970 65 20 66 72 65 71 75 65 6e 63 79 20 6f 66 20 74  e frequency of t
91980 68 65 20 6d 6f 64 75 6c 61 74 69 6e 67 20 73 69  he modulating si
91990 67 6e 61 6c 20 28 6d 66 29 20 74 6f 20 74 68 65  gnal (mf) to the
919a0 20 61 6d 70 6c 69 74 75 64 65 20 6f 66 20 74 68   amplitude of th
919b0 65 20 0a 09 09 20 2a 20 6d 6f 64 75 6c 61 74 69  e ... * modulati
919c0 6e 67 20 73 69 67 6e 61 6c 20 28 6d 61 29 20 2d  ng signal (ma) -
919d0 2d 20 61 73 20 69 6e 20 6d 61 2f 6d 66 2e 20 0a  - as in ma/mf. .
919e0 09 09 20 2a 20 53 65 65 20 54 6f 6e 65 2e 46 4d  .. * See Tone.FM
919f0 4f 73 63 69 6c 6c 61 74 6f 72 20 66 6f 72 20 6d  Oscillator for m
91a00 6f 72 65 20 69 6e 66 6f 2e 20 0a 09 09 20 2a 20  ore info. ... * 
91a10 40 74 79 70 65 20 7b 50 6f 73 69 74 69 76 65 7d  @type {Positive}
91a20 0a 09 09 20 2a 20 40 73 69 67 6e 61 6c 0a 09 09  ... * @signal...
91a30 20 2a 20 40 6e 61 6d 65 20 6d 6f 64 75 6c 61 74   * @name modulat
91a40 69 6f 6e 49 6e 64 65 78 0a 09 09 20 2a 2f 0a 09  ionIndex... */..
91a50 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e      Object.defin
91a60 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 4f  eProperty(Tone.O
91a70 6d 6e 69 4f 73 63 69 6c 6c 61 74 6f 72 2e 70 72  mniOscillator.pr
91a80 6f 74 6f 74 79 70 65 2c 20 27 6d 6f 64 75 6c 61  ototype, 'modula
91a90 74 69 6f 6e 49 6e 64 65 78 27 2c 20 7b 0a 09 20  tionIndex', {.. 
91aa0 20 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63         get: func
91ab0 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
91ac0 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e         if (this.
91ad0 5f 73 6f 75 72 63 65 54 79 70 65 20 3d 3d 3d 20  _sourceType === 
91ae0 4f 6d 6e 69 4f 73 63 54 79 70 65 2e 46 4d 29 20  OmniOscType.FM) 
91af0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
91b00 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f     return this._
91b10 6f 73 63 69 6c 6c 61 74 6f 72 2e 6d 6f 64 75 6c  oscillator.modul
91b20 61 74 69 6f 6e 49 6e 64 65 78 3b 0a 09 20 20 20  ationIndex;..   
91b30 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20           }..    
91b40 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09      }..    });..
91b50 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 48 61      /**... *  Ha
91b60 72 6d 6f 6e 69 63 69 74 79 20 69 73 20 74 68 65  rmonicity is the
91b70 20 66 72 65 71 75 65 6e 63 79 20 72 61 74 69 6f   frequency ratio
91b80 20 62 65 74 77 65 65 6e 20 74 68 65 20 63 61 72   between the car
91b90 72 69 65 72 20 61 6e 64 20 74 68 65 20 6d 6f 64  rier and the mod
91ba0 75 6c 61 74 6f 72 20 6f 73 63 69 6c 6c 61 74 6f  ulator oscillato
91bb0 72 73 2e 20 0a 09 09 20 2a 20 20 41 20 68 61 72  rs. ... *  A har
91bc0 6d 6f 6e 69 63 69 74 79 20 6f 66 20 31 20 67 69  monicity of 1 gi
91bd0 76 65 73 20 62 6f 74 68 20 6f 73 63 69 6c 6c 61  ves both oscilla
91be0 74 6f 72 73 20 74 68 65 20 73 61 6d 65 20 66 72  tors the same fr
91bf0 65 71 75 65 6e 63 79 2e 20 0a 09 09 20 2a 20 20  equency. ... *  
91c00 48 61 72 6d 6f 6e 69 63 69 74 79 20 3d 20 32 20  Harmonicity = 2 
91c10 6d 65 61 6e 73 20 61 20 63 68 61 6e 67 65 20 6f  means a change o
91c20 66 20 61 6e 20 6f 63 74 61 76 65 2e 20 53 65 65  f an octave. See
91c30 20 54 6f 6e 65 2e 41 4d 4f 73 63 69 6c 6c 61 74   Tone.AMOscillat
91c40 6f 72 20 6f 72 20 54 6f 6e 65 2e 46 4d 4f 73 63  or or Tone.FMOsc
91c50 69 6c 6c 61 74 6f 72 0a 09 09 20 2a 20 20 66 6f  illator... *  fo
91c60 72 20 6d 6f 72 65 20 69 6e 66 6f 2e 20 0a 09 09  r more info. ...
91c70 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f   *  @memberOf To
91c80 6e 65 2e 4f 6d 6e 69 4f 73 63 69 6c 6c 61 74 6f  ne.OmniOscillato
91c90 72 23 0a 09 09 20 2a 20 20 40 73 69 67 6e 61 6c  r#... *  @signal
91ca0 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b 50 6f  ... *  @type {Po
91cb0 73 69 74 69 76 65 7d 0a 09 09 20 2a 20 20 40 6e  sitive}... *  @n
91cc0 61 6d 65 20 68 61 72 6d 6f 6e 69 63 69 74 79 0a  ame harmonicity.
91cd0 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63  .. */..    Objec
91ce0 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79  t.defineProperty
91cf0 28 54 6f 6e 65 2e 4f 6d 6e 69 4f 73 63 69 6c 6c  (Tone.OmniOscill
91d00 61 74 6f 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20  ator.prototype, 
91d10 27 68 61 72 6d 6f 6e 69 63 69 74 79 27 2c 20 7b  'harmonicity', {
91d20 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66  ..        get: f
91d30 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
91d40 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 68            if (th
91d50 69 73 2e 5f 73 6f 75 72 63 65 54 79 70 65 20 3d  is._sourceType =
91d60 3d 3d 20 4f 6d 6e 69 4f 73 63 54 79 70 65 2e 46  == OmniOscType.F
91d70 4d 20 7c 7c 20 74 68 69 73 2e 5f 73 6f 75 72 63  M || this._sourc
91d80 65 54 79 70 65 20 3d 3d 3d 20 4f 6d 6e 69 4f 73  eType === OmniOs
91d90 63 54 79 70 65 2e 41 4d 29 20 7b 0a 09 20 20 20  cType.AM) {..   
91da0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
91db0 75 72 6e 20 74 68 69 73 2e 5f 6f 73 63 69 6c 6c  urn this._oscill
91dc0 61 74 6f 72 2e 68 61 72 6d 6f 6e 69 63 69 74 79  ator.harmonicity
91dd0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
91de0 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
91df0 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09   });..    /**...
91e00 20 2a 20 54 68 65 20 6d 6f 64 75 6c 61 74 69 6f   * The modulatio
91e10 6e 46 72 65 71 75 65 6e 63 79 20 53 69 67 6e 61  nFrequency Signa
91e20 6c 20 6f 66 20 74 68 65 20 6f 73 63 69 6c 6c 61  l of the oscilla
91e30 74 6f 72 20 0a 09 09 20 2a 20 28 6f 6e 6c 79 20  tor ... * (only 
91e40 69 66 20 74 68 65 20 6f 73 63 69 6c 6c 61 74 6f  if the oscillato
91e50 72 20 74 79 70 65 20 69 73 20 73 65 74 20 74 6f  r type is set to
91e60 20 70 77 6d 29 2e 20 53 65 65 20 0a 09 09 20 2a   pwm). See ... *
91e70 20 54 6f 6e 65 2e 50 57 4d 4f 73 63 69 6c 6c 61   Tone.PWMOscilla
91e80 74 6f 72 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66  tor for more inf
91e90 6f 2e 20 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72  o. ... * @member
91ea0 4f 66 20 54 6f 6e 65 2e 4f 6d 6e 69 4f 73 63 69  Of Tone.OmniOsci
91eb0 6c 6c 61 74 6f 72 23 0a 09 09 20 2a 20 40 74 79  llator#... * @ty
91ec0 70 65 20 7b 46 72 65 71 75 65 6e 63 79 7d 0a 09  pe {Frequency}..
91ed0 09 20 2a 20 40 73 69 67 6e 61 6c 0a 09 09 20 2a  . * @signal... *
91ee0 20 40 6e 61 6d 65 20 6d 6f 64 75 6c 61 74 69 6f   @name modulatio
91ef0 6e 46 72 65 71 75 65 6e 63 79 0a 09 09 20 2a 20  nFrequency... * 
91f00 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 76 61  @example... * va
91f10 72 20 6f 6d 6e 69 4f 73 63 20 3d 20 6e 65 77 20  r omniOsc = new 
91f20 54 6f 6e 65 2e 4f 6d 6e 69 4f 73 63 69 6c 6c 61  Tone.OmniOscilla
91f30 74 6f 72 28 34 34 30 2c 20 22 70 77 6d 22 29 3b  tor(440, "pwm");
91f40 0a 09 09 20 2a 20 2f 2f 63 61 6e 20 61 63 63 65  ... * //can acce
91f50 73 73 20 74 68 65 20 6d 6f 64 75 6c 61 74 69 6f  ss the modulatio
91f60 6e 46 72 65 71 75 65 6e 63 79 20 61 74 74 72 69  nFrequency attri
91f70 62 75 74 65 20 6f 6e 6c 79 20 69 66 20 74 79 70  bute only if typ
91f80 65 20 3d 3d 3d 20 22 70 77 6d 22 0a 09 09 20 2a  e === "pwm"... *
91f90 20 6f 6d 6e 69 4f 73 63 2e 6d 6f 64 75 6c 61 74   omniOsc.modulat
91fa0 69 6f 6e 46 72 65 71 75 65 6e 63 79 2e 76 61 6c  ionFrequency.val
91fb0 75 65 20 3d 20 30 2e 32 3b 20 0a 09 09 20 2a 2f  ue = 0.2; ... */
91fc0 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66  ..    Object.def
91fd0 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65  ineProperty(Tone
91fe0 2e 4f 6d 6e 69 4f 73 63 69 6c 6c 61 74 6f 72 2e  .OmniOscillator.
91ff0 70 72 6f 74 6f 74 79 70 65 2c 20 27 6d 6f 64 75  prototype, 'modu
92000 6c 61 74 69 6f 6e 46 72 65 71 75 65 6e 63 79 27  lationFrequency'
92010 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74  , {..        get
92020 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  : function () {.
92030 09 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
92040 28 74 68 69 73 2e 5f 73 6f 75 72 63 65 54 79 70  (this._sourceTyp
92050 65 20 3d 3d 3d 20 4f 6d 6e 69 4f 73 63 54 79 70  e === OmniOscTyp
92060 65 2e 50 57 4d 29 20 7b 0a 09 20 20 20 20 20 20  e.PWM) {..      
92070 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
92080 20 74 68 69 73 2e 5f 6f 73 63 69 6c 6c 61 74 6f   this._oscillato
92090 72 2e 6d 6f 64 75 6c 61 74 69 6f 6e 46 72 65 71  r.modulationFreq
920a0 75 65 6e 63 79 3b 0a 09 20 20 20 20 20 20 20 20  uency;..        
920b0 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d      }..        }
920c0 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f  ..    });..    /
920d0 2a 2a 0a 09 09 20 2a 20 20 43 6c 65 61 6e 20 75  **... *  Clean u
920e0 70 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e  p.... *  @return
920f0 20 7b 54 6f 6e 65 2e 4f 6d 6e 69 4f 73 63 69 6c   {Tone.OmniOscil
92100 6c 61 74 6f 72 7d 20 74 68 69 73 0a 09 09 20 2a  lator} this... *
92110 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4f 6d 6e 69  /..    Tone.Omni
92120 4f 73 63 69 6c 6c 61 74 6f 72 2e 70 72 6f 74 6f  Oscillator.proto
92130 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20 66  type.dispose = f
92140 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
92150 20 20 20 20 20 20 54 6f 6e 65 2e 53 6f 75 72 63        Tone.Sourc
92160 65 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70  e.prototype.disp
92170 6f 73 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a  ose.call(this);.
92180 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 77  .        this._w
92190 72 69 74 61 62 6c 65 28 5b 0a 09 20 20 20 20 20  ritable([..     
921a0 20 20 20 20 20 20 20 27 66 72 65 71 75 65 6e 63         'frequenc
921b0 79 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  y',..           
921c0 20 27 64 65 74 75 6e 65 27 0a 09 20 20 20 20 20   'detune'..     
921d0 20 20 20 5d 29 3b 0a 09 20 20 20 20 20 20 20 20     ]);..        
921e0 74 68 69 73 2e 64 65 74 75 6e 65 2e 64 69 73 70  this.detune.disp
921f0 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ose();..        
92200 74 68 69 73 2e 64 65 74 75 6e 65 20 3d 20 6e 75  this.detune = nu
92210 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ll;..        thi
92220 73 2e 66 72 65 71 75 65 6e 63 79 2e 64 69 73 70  s.frequency.disp
92230 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ose();..        
92240 74 68 69 73 2e 66 72 65 71 75 65 6e 63 79 20 3d  this.frequency =
92250 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
92260 74 68 69 73 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72  this._oscillator
92270 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20  .dispose();..   
92280 20 20 20 20 20 74 68 69 73 2e 5f 6f 73 63 69 6c       this._oscil
92290 6c 61 74 6f 72 20 3d 20 6e 75 6c 6c 3b 0a 09 20  lator = null;.. 
922a0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 6f 75         this._sou
922b0 72 63 65 54 79 70 65 20 3d 20 6e 75 6c 6c 3b 0a  rceType = null;.
922c0 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
922d0 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20  this;..    };.. 
922e0 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 4f     return Tone.O
922f0 6d 6e 69 4f 73 63 69 6c 6c 61 74 6f 72 3b 0a 09  mniOscillator;..
92300 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63  });..Module(func
92310 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20  tion (Tone) {.. 
92320 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20     ..    /**... 
92330 2a 20 20 40 63 6c 61 73 73 20 20 42 61 73 65 2d  *  @class  Base-
92340 63 6c 61 73 73 20 66 6f 72 20 61 6c 6c 20 69 6e  class for all in
92350 73 74 72 75 6d 65 6e 74 73 0a 09 09 20 2a 20 20  struments... *  
92360 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 72 75 63  ... *  @construc
92370 74 6f 72 0a 09 09 20 2a 20 20 40 65 78 74 65 6e  tor... *  @exten
92380 64 73 20 7b 54 6f 6e 65 7d 0a 09 09 20 2a 2f 0a  ds {Tone}... */.
92390 09 20 20 20 20 54 6f 6e 65 2e 49 6e 73 74 72 75  .    Tone.Instru
923a0 6d 65 6e 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20  ment = function 
923b0 28 6f 70 74 69 6f 6e 73 29 20 7b 0a 09 20 20 20  (options) {..   
923c0 20 20 20 20 20 2f 2f 67 65 74 20 74 68 65 20 64       //get the d
923d0 65 66 61 75 6c 74 73 0a 09 20 20 20 20 20 20 20  efaults..       
923e0 20 6f 70 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e   options = this.
923f0 64 65 66 61 75 6c 74 41 72 67 28 6f 70 74 69 6f  defaultArg(optio
92400 6e 73 2c 20 54 6f 6e 65 2e 49 6e 73 74 72 75 6d  ns, Tone.Instrum
92410 65 6e 74 2e 64 65 66 61 75 6c 74 73 29 3b 0a 09  ent.defaults);..
92420 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
92430 2a 20 20 54 68 65 20 6f 75 74 70 75 74 20 61 6e  *  The output an
92440 64 20 76 6f 6c 75 6d 65 20 74 72 69 6d 69 6e 67  d volume triming
92450 20 6e 6f 64 65 0a 09 09 09 20 2a 20 20 40 74 79   node.... *  @ty
92460 70 65 20 20 7b 54 6f 6e 65 2e 56 6f 6c 75 6d 65  pe  {Tone.Volume
92470 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  }.... *  @privat
92480 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
92490 20 20 74 68 69 73 2e 5f 76 6f 6c 75 6d 65 20 3d    this._volume =
924a0 20 74 68 69 73 2e 6f 75 74 70 75 74 20 3d 20 6e   this.output = n
924b0 65 77 20 54 6f 6e 65 2e 56 6f 6c 75 6d 65 28 6f  ew Tone.Volume(o
924c0 70 74 69 6f 6e 73 2e 76 6f 6c 75 6d 65 29 3b 0a  ptions.volume);.
924d0 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
924e0 20 2a 20 54 68 65 20 76 6f 6c 75 6d 65 20 6f 66   * The volume of
924f0 20 74 68 65 20 6f 75 74 70 75 74 20 69 6e 20 64   the output in d
92500 65 63 69 62 65 6c 73 2e 0a 09 09 09 20 2a 20 40  ecibels..... * @
92510 74 79 70 65 20 7b 44 65 63 69 62 65 6c 73 7d 0a  type {Decibels}.
92520 09 09 09 20 2a 20 40 73 69 67 6e 61 6c 0a 09 09  ... * @signal...
92530 09 20 2a 20 40 65 78 61 6d 70 6c 65 0a 09 09 09  . * @example....
92540 20 2a 20 73 6f 75 72 63 65 2e 76 6f 6c 75 6d 65   * source.volume
92550 2e 76 61 6c 75 65 20 3d 20 2d 36 3b 0a 09 09 09  .value = -6;....
92560 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
92570 73 2e 76 6f 6c 75 6d 65 20 3d 20 74 68 69 73 2e  s.volume = this.
92580 5f 76 6f 6c 75 6d 65 2e 76 6f 6c 75 6d 65 3b 0a  _volume.volume;.
92590 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 72  .        this._r
925a0 65 61 64 4f 6e 6c 79 28 27 76 6f 6c 75 6d 65 27  eadOnly('volume'
925b0 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  );..    };..    
925c0 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65  Tone.extend(Tone
925d0 2e 49 6e 73 74 72 75 6d 65 6e 74 29 3b 0a 09 20  .Instrument);.. 
925e0 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 74 68 65     /**... *  the
925f0 20 64 65 66 61 75 6c 74 20 61 74 74 72 69 62 75   default attribu
92600 74 65 73 0a 09 09 20 2a 20 20 40 74 79 70 65 20  tes... *  @type 
92610 7b 6f 62 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a 09  {object}... */..
92620 20 20 20 20 54 6f 6e 65 2e 49 6e 73 74 72 75 6d      Tone.Instrum
92630 65 6e 74 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b  ent.defaults = {
92640 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 20 74 68  ..        /** th
92650 65 20 76 6f 6c 75 6d 65 20 6f 66 20 74 68 65 20  e volume of the 
92660 6f 75 74 70 75 74 20 69 6e 20 64 65 63 69 62 65  output in decibe
92670 6c 73 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 27  ls */..        '
92680 76 6f 6c 75 6d 65 27 3a 20 30 0a 09 20 20 20 20  volume': 0..    
92690 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  };..    /**... *
926a0 20 20 40 61 62 73 74 72 61 63 74 0a 09 09 20 2a    @abstract... *
926b0 20 20 40 70 61 72 61 6d 20 7b 73 74 72 69 6e 67    @param {string
926c0 7c 6e 75 6d 62 65 72 7d 20 6e 6f 74 65 20 74 68  |number} note th
926d0 65 20 6e 6f 74 65 20 74 6f 20 74 72 69 67 67 65  e note to trigge
926e0 72 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b  r... *  @param {
926f0 54 69 6d 65 7d 20 5b 74 69 6d 65 3d 6e 6f 77 5d  Time} [time=now]
92700 20 74 68 65 20 74 69 6d 65 20 74 6f 20 74 72 69   the time to tri
92710 67 67 65 72 20 74 68 65 20 6e 74 6f 65 0a 09 09  gger the ntoe...
92720 20 2a 20 20 40 70 61 72 61 6d 20 7b 6e 75 6d 62   *  @param {numb
92730 65 72 7d 20 5b 76 65 6c 6f 63 69 74 79 3d 31 5d  er} [velocity=1]
92740 20 74 68 65 20 76 65 6c 6f 63 69 74 79 20 74 6f   the velocity to
92750 20 74 72 69 67 67 65 72 20 74 68 65 20 6e 6f 74   trigger the not
92760 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  e... */..    Ton
92770 65 2e 49 6e 73 74 72 75 6d 65 6e 74 2e 70 72 6f  e.Instrument.pro
92780 74 6f 74 79 70 65 2e 74 72 69 67 67 65 72 41 74  totype.triggerAt
92790 74 61 63 6b 20 3d 20 54 6f 6e 65 2e 6e 6f 4f 70  tack = Tone.noOp
927a0 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
927b0 20 40 61 62 73 74 72 61 63 74 0a 09 09 20 2a 20   @abstract... * 
927c0 20 40 70 61 72 61 6d 20 7b 54 69 6d 65 7d 20 5b   @param {Time} [
927d0 74 69 6d 65 3d 6e 6f 77 5d 20 77 68 65 6e 20 74  time=now] when t
927e0 6f 20 74 72 69 67 67 65 72 20 74 68 65 20 72 65  o trigger the re
927f0 6c 65 61 73 65 0a 09 09 20 2a 2f 0a 09 20 20 20  lease... */..   
92800 20 54 6f 6e 65 2e 49 6e 73 74 72 75 6d 65 6e 74   Tone.Instrument
92810 2e 70 72 6f 74 6f 74 79 70 65 2e 74 72 69 67 67  .prototype.trigg
92820 65 72 52 65 6c 65 61 73 65 20 3d 20 54 6f 6e 65  erRelease = Tone
92830 2e 6e 6f 4f 70 3b 0a 09 20 20 20 20 2f 2a 2a 0a  .noOp;..    /**.
92840 09 09 20 2a 20 20 54 72 69 67 67 65 72 20 74 68  .. *  Trigger th
92850 65 20 61 74 74 61 63 6b 20 61 6e 64 20 74 68 65  e attack and the
92860 6e 20 74 68 65 20 72 65 6c 65 61 73 65 20 61 66  n the release af
92870 74 65 72 20 74 68 65 20 64 75 72 61 74 69 6f 6e  ter the duration
92880 2e 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  . ... *  @param 
92890 20 7b 46 72 65 71 75 65 6e 63 79 7d 20 6e 6f 74   {Frequency} not
928a0 65 20 20 20 20 20 54 68 65 20 6e 6f 74 65 20 74  e     The note t
928b0 6f 20 74 72 69 67 67 65 72 2e 0a 09 09 20 2a 20  o trigger.... * 
928c0 20 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 7d 20   @param  {Time} 
928d0 64 75 72 61 74 69 6f 6e 20 48 6f 77 20 6c 6f 6e  duration How lon
928e0 67 20 74 68 65 20 6e 6f 74 65 20 73 68 6f 75 6c  g the note shoul
928f0 64 20 62 65 20 68 65 6c 64 20 66 6f 72 20 62 65  d be held for be
92900 66 6f 72 65 0a 09 09 20 2a 20 20 20 20 20 20 20  fore... *       
92910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92920 20 20 20 74 72 69 67 67 65 72 69 6e 67 20 74 68     triggering th
92930 65 20 72 65 6c 65 61 73 65 2e 0a 09 09 20 2a 20  e release.... * 
92940 20 40 70 61 72 61 6d 20 7b 54 69 6d 65 7d 20 5b   @param {Time} [
92950 74 69 6d 65 3d 6e 6f 77 5d 20 20 57 68 65 6e 20  time=now]  When 
92960 74 68 65 20 6e 6f 74 65 20 73 68 6f 75 6c 64 20  the note should 
92970 62 65 20 74 72 69 67 67 65 72 65 64 2e 0a 09 09  be triggered....
92980 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 4e 6f 72   *  @param  {Nor
92990 6d 61 6c 52 61 6e 67 65 7d 20 5b 76 65 6c 6f 63  malRange} [veloc
929a0 69 74 79 3d 31 5d 20 54 68 65 20 76 65 6c 6f 63  ity=1] The veloc
929b0 69 74 79 20 74 68 65 20 6e 6f 74 65 20 73 68 6f  ity the note sho
929c0 75 6c 64 20 62 65 20 74 72 69 67 67 65 72 65 64  uld be triggered
929d0 20 61 74 2e 0a 09 09 20 2a 20 20 40 72 65 74 75   at.... *  @retu
929e0 72 6e 73 20 7b 54 6f 6e 65 2e 49 6e 73 74 72 75  rns {Tone.Instru
929f0 6d 65 6e 74 7d 20 74 68 69 73 0a 09 09 20 2a 20  ment} this... * 
92a00 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 2f   @example... * /
92a10 2f 74 72 69 67 67 65 72 20 22 43 34 22 20 66 6f  /trigger "C4" fo
92a20 72 20 74 68 65 20 64 75 72 61 74 69 6f 6e 20 6f  r the duration o
92a30 66 20 61 6e 20 38 74 68 20 6e 6f 74 65 0a 09 09  f an 8th note...
92a40 20 2a 20 73 79 6e 74 68 2e 74 72 69 67 67 65 72   * synth.trigger
92a50 41 74 74 61 63 6b 52 65 6c 65 61 73 65 28 22 43  AttackRelease("C
92a60 34 22 2c 20 22 38 6e 22 29 3b 0a 09 09 20 2a 2f  4", "8n");... */
92a70 0a 09 20 20 20 20 54 6f 6e 65 2e 49 6e 73 74 72  ..    Tone.Instr
92a80 75 6d 65 6e 74 2e 70 72 6f 74 6f 74 79 70 65 2e  ument.prototype.
92a90 74 72 69 67 67 65 72 41 74 74 61 63 6b 52 65 6c  triggerAttackRel
92aa0 65 61 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20  ease = function 
92ab0 28 6e 6f 74 65 2c 20 64 75 72 61 74 69 6f 6e 2c  (note, duration,
92ac0 20 74 69 6d 65 2c 20 76 65 6c 6f 63 69 74 79 29   time, velocity)
92ad0 20 7b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
92ae0 74 68 69 73 2e 69 73 55 6e 64 65 66 28 74 69 6d  this.isUndef(tim
92af0 65 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  e)) {..         
92b00 20 20 20 74 69 6d 65 20 3d 20 74 68 69 73 2e 6e     time = this.n
92b10 6f 77 28 29 20 2b 20 74 68 69 73 2e 62 6c 6f 63  ow() + this.bloc
92b20 6b 54 69 6d 65 3b 0a 09 20 20 20 20 20 20 20 20  kTime;..        
92b30 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20  } else {..      
92b40 20 20 20 20 20 20 74 69 6d 65 20 3d 20 74 68 69        time = thi
92b50 73 2e 74 6f 53 65 63 6f 6e 64 73 28 74 69 6d 65  s.toSeconds(time
92b60 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  );..        }.. 
92b70 20 20 20 20 20 20 20 64 75 72 61 74 69 6f 6e 20         duration 
92b80 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73  = this.toSeconds
92b90 28 64 75 72 61 74 69 6f 6e 29 3b 0a 09 20 20 20  (duration);..   
92ba0 20 20 20 20 20 74 68 69 73 2e 74 72 69 67 67 65       this.trigge
92bb0 72 41 74 74 61 63 6b 28 6e 6f 74 65 2c 20 74 69  rAttack(note, ti
92bc0 6d 65 2c 20 76 65 6c 6f 63 69 74 79 29 3b 0a 09  me, velocity);..
92bd0 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 72 69          this.tri
92be0 67 67 65 72 52 65 6c 65 61 73 65 28 74 69 6d 65  ggerRelease(time
92bf0 20 2b 20 64 75 72 61 74 69 6f 6e 29 3b 0a 09 20   + duration);.. 
92c00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
92c10 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  is;..    };..   
92c20 20 2f 2a 2a 0a 09 09 20 2a 20 20 63 6c 65 61 6e   /**... *  clean
92c30 20 75 70 0a 09 09 20 2a 20 20 40 72 65 74 75 72   up... *  @retur
92c40 6e 73 20 7b 54 6f 6e 65 2e 49 6e 73 74 72 75 6d  ns {Tone.Instrum
92c50 65 6e 74 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a  ent} this... */.
92c60 09 20 20 20 20 54 6f 6e 65 2e 49 6e 73 74 72 75  .    Tone.Instru
92c70 6d 65 6e 74 2e 70 72 6f 74 6f 74 79 70 65 2e 64  ment.prototype.d
92c80 69 73 70 6f 73 65 20 3d 20 66 75 6e 63 74 69 6f  ispose = functio
92c90 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
92ca0 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70 65 2e 64  Tone.prototype.d
92cb0 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69 73  ispose.call(this
92cc0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
92cd0 2e 5f 76 6f 6c 75 6d 65 2e 64 69 73 70 6f 73 65  ._volume.dispose
92ce0 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ();..        thi
92cf0 73 2e 5f 76 6f 6c 75 6d 65 20 3d 20 6e 75 6c 6c  s._volume = null
92d00 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
92d10 5f 77 72 69 74 61 62 6c 65 28 5b 27 76 6f 6c 75  _writable(['volu
92d20 6d 65 27 5d 29 3b 0a 09 20 20 20 20 20 20 20 20  me']);..        
92d30 74 68 69 73 2e 76 6f 6c 75 6d 65 20 3d 20 6e 75  this.volume = nu
92d40 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74  ll;..        ret
92d50 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
92d60 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f  ;..    return To
92d70 6e 65 2e 49 6e 73 74 72 75 6d 65 6e 74 3b 0a 09  ne.Instrument;..
92d80 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63  });..Module(func
92d90 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20  tion (Tone) {.. 
92da0 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20     ..    /**... 
92db0 2a 20 20 40 63 6c 61 73 73 20 20 54 68 69 73 20  *  @class  This 
92dc0 69 73 20 61 6e 20 61 62 73 74 72 61 63 74 20 62  is an abstract b
92dd0 61 73 65 20 63 6c 61 73 73 20 66 6f 72 20 6f 74  ase class for ot
92de0 68 65 72 20 6d 6f 6e 6f 70 68 6f 6e 69 63 20 69  her monophonic i
92df0 6e 73 74 72 75 6d 65 6e 74 73 20 74 6f 20 0a 09  nstruments to ..
92e00 09 20 2a 20 20 20 20 20 20 20 20 20 20 65 78 74  . *          ext
92e10 65 6e 64 2e 20 49 4d 50 4f 52 54 41 4e 54 3a 20  end. IMPORTANT: 
92e20 49 74 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65  It does not make
92e30 20 61 6e 79 20 73 6f 75 6e 64 20 6f 6e 20 69 74   any sound on it
92e40 73 20 6f 77 6e 20 61 6e 64 0a 09 09 20 2a 20 20  s own and... *  
92e50 20 20 20 20 20 20 20 20 73 68 6f 75 6c 64 6e 27          shouldn'
92e60 74 20 62 65 20 64 69 72 65 63 74 6c 79 20 69 6e  t be directly in
92e70 73 74 61 6e 74 69 61 74 65 64 2e 0a 09 09 20 2a  stantiated.... *
92e80 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 72 75 63  ... *  @construc
92e90 74 6f 72 0a 09 09 20 2a 20 20 40 61 62 73 74 72  tor... *  @abstr
92ea0 61 63 74 0a 09 09 20 2a 20 20 40 65 78 74 65 6e  act... *  @exten
92eb0 64 73 20 7b 54 6f 6e 65 2e 49 6e 73 74 72 75 6d  ds {Tone.Instrum
92ec0 65 6e 74 7d 0a 09 09 20 2a 2f 0a 09 20 20 20 20  ent}... */..    
92ed0 54 6f 6e 65 2e 4d 6f 6e 6f 70 68 6f 6e 69 63 20  Tone.Monophonic 
92ee0 3d 20 66 75 6e 63 74 69 6f 6e 20 28 6f 70 74 69  = function (opti
92ef0 6f 6e 73 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ons) {..        
92f00 2f 2f 67 65 74 20 74 68 65 20 64 65 66 61 75 6c  //get the defaul
92f10 74 73 0a 09 20 20 20 20 20 20 20 20 6f 70 74 69  ts..        opti
92f20 6f 6e 73 20 3d 20 74 68 69 73 2e 64 65 66 61 75  ons = this.defau
92f30 6c 74 41 72 67 28 6f 70 74 69 6f 6e 73 2c 20 54  ltArg(options, T
92f40 6f 6e 65 2e 4d 6f 6e 6f 70 68 6f 6e 69 63 2e 64  one.Monophonic.d
92f50 65 66 61 75 6c 74 73 29 3b 0a 09 20 20 20 20 20  efaults);..     
92f60 20 20 20 54 6f 6e 65 2e 49 6e 73 74 72 75 6d 65     Tone.Instrume
92f70 6e 74 2e 63 61 6c 6c 28 74 68 69 73 2c 20 6f 70  nt.call(this, op
92f80 74 69 6f 6e 73 29 3b 0a 09 20 20 20 20 20 20 20  tions);..       
92f90 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20   /**.... *  The 
92fa0 67 6c 69 64 65 20 74 69 6d 65 20 62 65 74 77 65  glide time betwe
92fb0 65 6e 20 6e 6f 74 65 73 2e 20 0a 09 09 09 20 2a  en notes. .... *
92fc0 20 20 40 74 79 70 65 20 7b 54 69 6d 65 7d 0a 09    @type {Time}..
92fd0 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
92fe0 68 69 73 2e 70 6f 72 74 61 6d 65 6e 74 6f 20 3d  his.portamento =
92ff0 20 6f 70 74 69 6f 6e 73 2e 70 6f 72 74 61 6d 65   options.portame
93000 6e 74 6f 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  nto;..    };..  
93010 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f    Tone.extend(To
93020 6e 65 2e 4d 6f 6e 6f 70 68 6f 6e 69 63 2c 20 54  ne.Monophonic, T
93030 6f 6e 65 2e 49 6e 73 74 72 75 6d 65 6e 74 29 3b  one.Instrument);
93040 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
93050 40 73 74 61 74 69 63 0a 09 09 20 2a 20 20 40 63  @static... *  @c
93060 6f 6e 73 74 0a 09 09 20 2a 20 20 40 74 79 70 65  onst... *  @type
93070 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a   {Object}... */.
93080 09 20 20 20 20 54 6f 6e 65 2e 4d 6f 6e 6f 70 68  .    Tone.Monoph
93090 6f 6e 69 63 2e 64 65 66 61 75 6c 74 73 20 3d 20  onic.defaults = 
930a0 7b 20 27 70 6f 72 74 61 6d 65 6e 74 6f 27 3a 20  { 'portamento': 
930b0 30 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09  0 };..    /**...
930c0 20 2a 20 20 54 72 69 67 67 65 72 20 74 68 65 20   *  Trigger the 
930d0 61 74 74 61 63 6b 20 6f 66 20 74 68 65 20 6e 6f  attack of the no
930e0 74 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 77 69  te optionally wi
930f0 74 68 20 61 20 67 69 76 65 6e 20 76 65 6c 6f 63  th a given veloc
93100 69 74 79 2e 20 0a 09 09 20 2a 20 20 0a 09 09 20  ity. ... *  ... 
93110 2a 20 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  *  ... *  @param
93120 20 20 7b 46 72 65 71 75 65 6e 63 79 7d 20 6e 6f    {Frequency} no
93130 74 65 20 20 20 20 20 54 68 65 20 6e 6f 74 65 20  te     The note 
93140 74 6f 20 74 72 69 67 67 65 72 2e 0a 09 09 20 2a  to trigger.... *
93150 20 20 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 7d    @param  {Time}
93160 20 5b 74 69 6d 65 3d 6e 6f 77 5d 20 20 20 20 20   [time=now]     
93170 57 68 65 6e 20 74 68 65 20 6e 6f 74 65 20 73 68  When the note sh
93180 6f 75 6c 64 20 73 74 61 72 74 2e 0a 09 09 20 2a  ould start.... *
93190 20 20 40 70 61 72 61 6d 20 20 7b 6e 75 6d 62 65    @param  {numbe
931a0 72 7d 20 5b 76 65 6c 6f 63 69 74 79 3d 31 5d 20  r} [velocity=1] 
931b0 76 65 6c 6f 63 69 74 79 20 54 68 65 20 76 65 6c  velocity The vel
931c0 6f 63 69 74 79 20 73 63 61 6c 65 72 20 0a 09 09  ocity scaler ...
931d0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
931e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
931f0 20 20 64 65 74 65 72 6d 69 6e 65 73 20 68 6f 77    determines how
93200 20 22 6c 6f 75 64 22 20 74 68 65 20 6e 6f 74 65   "loud" the note
93210 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20   ... *          
93220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93230 20 20 20 20 20 20 77 69 6c 6c 20 62 65 20 74 72        will be tr
93240 69 67 67 65 72 65 64 2e 0a 09 09 20 2a 20 20 40  iggered.... *  @
93250 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 4d 6f  returns {Tone.Mo
93260 6e 6f 70 68 6f 6e 69 63 7d 20 74 68 69 73 0a 09  nophonic} this..
93270 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09  . *  @example...
93280 20 2a 20 73 79 6e 74 68 2e 74 72 69 67 67 65 72   * synth.trigger
93290 41 74 74 61 63 6b 28 22 43 34 22 29 3b 0a 09 09  Attack("C4");...
932a0 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20   *  @example... 
932b0 2a 20 2f 2f 74 72 69 67 67 65 72 20 74 68 65 20  * //trigger the 
932c0 6e 6f 74 65 20 61 20 68 61 6c 66 20 73 65 63 6f  note a half seco
932d0 6e 64 20 66 72 6f 6d 20 6e 6f 77 20 61 74 20 68  nd from now at h
932e0 61 6c 66 20 76 65 6c 6f 63 69 74 79 0a 09 09 20  alf velocity... 
932f0 2a 20 73 79 6e 74 68 2e 74 72 69 67 67 65 72 41  * synth.triggerA
93300 74 74 61 63 6b 28 22 43 34 22 2c 20 22 2b 30 2e  ttack("C4", "+0.
93310 35 22 2c 20 30 2e 35 29 3b 0a 09 09 20 2a 2f 0a  5", 0.5);... */.
93320 09 20 20 20 20 54 6f 6e 65 2e 4d 6f 6e 6f 70 68  .    Tone.Monoph
93330 6f 6e 69 63 2e 70 72 6f 74 6f 74 79 70 65 2e 74  onic.prototype.t
93340 72 69 67 67 65 72 41 74 74 61 63 6b 20 3d 20 66  riggerAttack = f
93350 75 6e 63 74 69 6f 6e 20 28 6e 6f 74 65 2c 20 74  unction (note, t
93360 69 6d 65 2c 20 76 65 6c 6f 63 69 74 79 29 20 7b  ime, velocity) {
93370 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 74 68  ..        if (th
93380 69 73 2e 69 73 55 6e 64 65 66 28 74 69 6d 65 29  is.isUndef(time)
93390 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
933a0 20 74 69 6d 65 20 3d 20 74 68 69 73 2e 6e 6f 77   time = this.now
933b0 28 29 20 2b 20 74 68 69 73 2e 62 6c 6f 63 6b 54  () + this.blockT
933c0 69 6d 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 20  ime;..        } 
933d0 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20  else {..        
933e0 20 20 20 20 74 69 6d 65 20 3d 20 74 68 69 73 2e      time = this.
933f0 74 6f 53 65 63 6f 6e 64 73 28 74 69 6d 65 29 3b  toSeconds(time);
93400 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
93410 20 20 20 20 20 74 68 69 73 2e 5f 74 72 69 67 67       this._trigg
93420 65 72 45 6e 76 65 6c 6f 70 65 41 74 74 61 63 6b  erEnvelopeAttack
93430 28 74 69 6d 65 2c 20 76 65 6c 6f 63 69 74 79 29  (time, velocity)
93440 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
93450 73 65 74 4e 6f 74 65 28 6e 6f 74 65 2c 20 74 69  setNote(note, ti
93460 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65  me);..        re
93470 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20  turn this;..    
93480 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  };..    /**... *
93490 20 20 54 72 69 67 67 65 72 20 74 68 65 20 72 65    Trigger the re
934a0 6c 65 61 73 65 20 70 6f 72 74 69 6f 6e 20 6f 66  lease portion of
934b0 20 74 68 65 20 65 6e 76 65 6c 6f 70 65 0a 09 09   the envelope...
934c0 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 54 69 6d   *  @param  {Tim
934d0 65 7d 20 5b 74 69 6d 65 3d 6e 6f 77 5d 20 49 66  e} [time=now] If
934e0 20 6e 6f 20 74 69 6d 65 20 69 73 20 67 69 76 65   no time is give
934f0 6e 2c 20 74 68 65 20 72 65 6c 65 61 73 65 20 68  n, the release h
93500 61 70 70 65 6e 73 20 69 6d 6d 65 64 69 61 74 6c  appens immediatl
93510 79 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73  y... *  @returns
93520 20 7b 54 6f 6e 65 2e 4d 6f 6e 6f 70 68 6f 6e 69   {Tone.Monophoni
93530 63 7d 20 74 68 69 73 0a 09 09 20 2a 20 20 40 65  c} this... *  @e
93540 78 61 6d 70 6c 65 0a 09 09 20 2a 20 73 79 6e 74  xample... * synt
93550 68 2e 74 72 69 67 67 65 72 52 65 6c 65 61 73 65  h.triggerRelease
93560 28 29 3b 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  ();... */..    T
93570 6f 6e 65 2e 4d 6f 6e 6f 70 68 6f 6e 69 63 2e 70  one.Monophonic.p
93580 72 6f 74 6f 74 79 70 65 2e 74 72 69 67 67 65 72  rototype.trigger
93590 52 65 6c 65 61 73 65 20 3d 20 66 75 6e 63 74 69  Release = functi
935a0 6f 6e 20 28 74 69 6d 65 29 20 7b 0a 09 20 20 20  on (time) {..   
935b0 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 69 73       if (this.is
935c0 55 6e 64 65 66 28 74 69 6d 65 29 29 20 7b 0a 09  Undef(time)) {..
935d0 20 20 20 20 20 20 20 20 20 20 20 20 74 69 6d 65              time
935e0 20 3d 20 74 68 69 73 2e 6e 6f 77 28 29 20 2b 20   = this.now() + 
935f0 74 68 69 73 2e 62 6c 6f 63 6b 54 69 6d 65 3b 0a  this.blockTime;.
93600 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else 
93610 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
93620 69 6d 65 20 3d 20 74 68 69 73 2e 74 6f 53 65 63  ime = this.toSec
93630 6f 6e 64 73 28 74 69 6d 65 29 3b 0a 09 20 20 20  onds(time);..   
93640 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
93650 74 68 69 73 2e 5f 74 72 69 67 67 65 72 45 6e 76  this._triggerEnv
93660 65 6c 6f 70 65 52 65 6c 65 61 73 65 28 74 69 6d  elopeRelease(tim
93670 65 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74  e);..        ret
93680 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
93690 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
936a0 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 20 6d   override this m
936b0 65 74 68 6f 64 20 77 69 74 68 20 74 68 65 20 61  ethod with the a
936c0 63 74 75 61 6c 20 6d 65 74 68 6f 64 0a 09 09 20  ctual method... 
936d0 2a 20 20 40 61 62 73 74 72 61 63 74 0a 09 09 20  *  @abstract... 
936e0 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a  *  @private... *
936f0 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4d 6f 6e 6f  /..    Tone.Mono
93700 70 68 6f 6e 69 63 2e 70 72 6f 74 6f 74 79 70 65  phonic.prototype
93710 2e 5f 74 72 69 67 67 65 72 45 6e 76 65 6c 6f 70  ._triggerEnvelop
93720 65 41 74 74 61 63 6b 20 3d 20 66 75 6e 63 74 69  eAttack = functi
93730 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 7d 3b 0a  on () {..    };.
93740 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 6f  .    /**... *  o
93750 76 65 72 72 69 64 65 20 74 68 69 73 20 6d 65 74  verride this met
93760 68 6f 64 20 77 69 74 68 20 74 68 65 20 61 63 74  hod with the act
93770 75 61 6c 20 6d 65 74 68 6f 64 0a 09 09 20 2a 20  ual method... * 
93780 20 40 61 62 73 74 72 61 63 74 0a 09 09 20 2a 20   @abstract... * 
93790 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a   @private... */.
937a0 09 20 20 20 20 54 6f 6e 65 2e 4d 6f 6e 6f 70 68  .    Tone.Monoph
937b0 6f 6e 69 63 2e 70 72 6f 74 6f 74 79 70 65 2e 5f  onic.prototype._
937c0 74 72 69 67 67 65 72 45 6e 76 65 6c 6f 70 65 52  triggerEnvelopeR
937d0 65 6c 65 61 73 65 20 3d 20 66 75 6e 63 74 69 6f  elease = functio
937e0 6e 20 28 29 20 7b 0a 09 20 20 20 20 7d 3b 0a 09  n () {..    };..
937f0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 53 65      /**... *  Se
93800 74 20 74 68 65 20 6e 6f 74 65 20 61 74 20 74 68  t the note at th
93810 65 20 67 69 76 65 6e 20 74 69 6d 65 2e 20 49 66  e given time. If
93820 20 6e 6f 20 74 69 6d 65 20 69 73 20 67 69 76 65   no time is give
93830 6e 2c 20 74 68 65 20 6e 6f 74 65 0a 09 09 20 2a  n, the note... *
93840 20 20 77 69 6c 6c 20 73 65 74 20 69 6d 6d 65 64    will set immed
93850 69 61 74 65 6c 79 2e 20 0a 09 09 20 2a 20 20 40  iately. ... *  @
93860 70 61 72 61 6d 20 7b 46 72 65 71 75 65 6e 63 79  param {Frequency
93870 7d 20 6e 6f 74 65 20 54 68 65 20 6e 6f 74 65 20  } note The note 
93880 74 6f 20 63 68 61 6e 67 65 20 74 6f 2e 0a 09 09  to change to....
93890 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 54 69 6d   *  @param  {Tim
938a0 65 7d 20 5b 74 69 6d 65 3d 6e 6f 77 5d 20 54 68  e} [time=now] Th
938b0 65 20 74 69 6d 65 20 77 68 65 6e 20 74 68 65 20  e time when the 
938c0 6e 6f 74 65 20 73 68 6f 75 6c 64 20 62 65 20 73  note should be s
938d0 65 74 2e 20 0a 09 09 20 2a 20 20 40 72 65 74 75  et. ... *  @retu
938e0 72 6e 73 20 7b 54 6f 6e 65 2e 4d 6f 6e 6f 70 68  rns {Tone.Monoph
938f0 6f 6e 69 63 7d 20 74 68 69 73 0a 09 09 20 2a 20  onic} this... * 
93900 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 2f 2f  @example... * //
93910 63 68 61 6e 67 65 20 74 6f 20 46 23 36 20 69 6e  change to F#6 in
93920 20 6f 6e 65 20 71 75 61 72 74 65 72 20 6e 6f 74   one quarter not
93930 65 20 66 72 6f 6d 20 6e 6f 77 2e 0a 09 09 20 2a  e from now.... *
93940 20 73 79 6e 74 68 2e 73 65 74 4e 6f 74 65 28 22   synth.setNote("
93950 46 23 36 22 2c 20 22 2b 34 6e 22 29 3b 0a 09 09  F#6", "+4n");...
93960 20 2a 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a   * @example... *
93970 20 2f 2f 63 68 61 6e 67 65 20 74 6f 20 42 62 34   //change to Bb4
93980 20 72 69 67 68 74 20 6e 6f 77 0a 09 09 20 2a 20   right now... * 
93990 73 79 6e 74 68 2e 73 65 74 4e 6f 74 65 28 22 42  synth.setNote("B
939a0 62 34 22 29 3b 0a 09 09 20 2a 2f 0a 09 20 20 20  b4");... */..   
939b0 20 54 6f 6e 65 2e 4d 6f 6e 6f 70 68 6f 6e 69 63   Tone.Monophonic
939c0 2e 70 72 6f 74 6f 74 79 70 65 2e 73 65 74 4e 6f  .prototype.setNo
939d0 74 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 6e  te = function (n
939e0 6f 74 65 2c 20 74 69 6d 65 29 20 7b 0a 09 20 20  ote, time) {..  
939f0 20 20 20 20 20 20 74 69 6d 65 20 3d 20 74 68 69        time = thi
93a00 73 2e 74 6f 53 65 63 6f 6e 64 73 28 74 69 6d 65  s.toSeconds(time
93a10 29 3b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
93a20 74 68 69 73 2e 70 6f 72 74 61 6d 65 6e 74 6f 20  this.portamento 
93a30 3e 20 30 29 20 7b 0a 09 20 20 20 20 20 20 20 20  > 0) {..        
93a40 20 20 20 20 76 61 72 20 63 75 72 72 65 6e 74 4e      var currentN
93a50 6f 74 65 20 3d 20 74 68 69 73 2e 66 72 65 71 75  ote = this.frequ
93a60 65 6e 63 79 2e 76 61 6c 75 65 3b 0a 09 20 20 20  ency.value;..   
93a70 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 66 72           this.fr
93a80 65 71 75 65 6e 63 79 2e 73 65 74 56 61 6c 75 65  equency.setValue
93a90 41 74 54 69 6d 65 28 63 75 72 72 65 6e 74 4e 6f  AtTime(currentNo
93aa0 74 65 2c 20 74 69 6d 65 29 3b 0a 09 20 20 20 20  te, time);..    
93ab0 20 20 20 20 20 20 20 20 76 61 72 20 70 6f 72 74          var port
93ac0 54 69 6d 65 20 3d 20 74 68 69 73 2e 74 6f 53 65  Time = this.toSe
93ad0 63 6f 6e 64 73 28 74 68 69 73 2e 70 6f 72 74 61  conds(this.porta
93ae0 6d 65 6e 74 6f 29 3b 0a 09 20 20 20 20 20 20 20  mento);..       
93af0 20 20 20 20 20 74 68 69 73 2e 66 72 65 71 75 65       this.freque
93b00 6e 63 79 2e 65 78 70 6f 6e 65 6e 74 69 61 6c 52  ncy.exponentialR
93b10 61 6d 70 54 6f 56 61 6c 75 65 41 74 54 69 6d 65  ampToValueAtTime
93b20 28 6e 6f 74 65 2c 20 74 69 6d 65 20 2b 20 70 6f  (note, time + po
93b30 72 74 54 69 6d 65 29 3b 0a 09 20 20 20 20 20 20  rtTime);..      
93b40 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20    } else {..    
93b50 20 20 20 20 20 20 20 20 74 68 69 73 2e 66 72 65          this.fre
93b60 71 75 65 6e 63 79 2e 73 65 74 56 61 6c 75 65 41  quency.setValueA
93b70 74 54 69 6d 65 28 6e 6f 74 65 2c 20 74 69 6d 65  tTime(note, time
93b80 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  );..        }.. 
93b90 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
93ba0 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  is;..    };..   
93bb0 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 4d 6f 6e   return Tone.Mon
93bc0 6f 70 68 6f 6e 69 63 3b 0a 09 7d 29 3b 0a 09 4d  ophonic;..});..M
93bd0 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28  odule(function (
93be0 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09 20  Tone) {..    .. 
93bf0 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c     /**... *  @cl
93c00 61 73 73 20 20 54 6f 6e 65 2e 53 79 6e 74 68 20  ass  Tone.Synth 
93c10 69 73 20 63 6f 6d 70 6f 73 65 64 20 73 69 6d 70  is composed simp
93c20 6c 79 20 6f 66 20 61 20 54 6f 6e 65 2e 4f 6d 6e  ly of a Tone.Omn
93c30 69 4f 73 63 69 6c 6c 61 74 6f 72 0a 09 09 20 2a  iOscillator... *
93c40 20 20 20 20 20 20 20 20 20 20 72 6f 75 74 65 64            routed
93c50 20 74 68 72 6f 75 67 68 20 61 20 54 6f 6e 65 2e   through a Tone.
93c60 41 6d 70 6c 69 74 75 64 65 45 6e 76 65 6c 6f 70  AmplitudeEnvelop
93c70 65 2e 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20  e. ... *        
93c80 20 20 3c 69 6d 67 20 73 72 63 3d 22 68 74 74 70    <img src="http
93c90 73 3a 2f 2f 64 6f 63 73 2e 67 6f 6f 67 6c 65 2e  s://docs.google.
93ca0 63 6f 6d 2f 64 72 61 77 69 6e 67 73 2f 64 2f 31  com/drawings/d/1
93cb0 2d 31 5f 30 59 57 32 5a 31 4a 32 45 50 49 33 36  -1_0YW2Z1J2EPI36
93cc0 50 38 66 4e 43 4d 63 5a 47 37 4e 31 77 31 47 5a  P8fNCMcZG7N1w1GZ
93cd0 6c 75 50 73 34 6f 67 34 65 76 6f 2f 70 75 62 3f  luPs4og4evo/pub?
93ce0 77 3d 31 31 36 33 26 68 3d 32 33 31 22 3e 0a 09  w=1163&h=231">..
93cf0 09 20 2a 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74  . *... *  @const
93d00 72 75 63 74 6f 72 0a 09 09 20 2a 20 20 40 65 78  ructor... *  @ex
93d10 74 65 6e 64 73 20 7b 54 6f 6e 65 2e 4d 6f 6e 6f  tends {Tone.Mono
93d20 70 68 6f 6e 69 63 7d 0a 09 09 20 2a 20 20 40 70  phonic}... *  @p
93d30 61 72 61 6d 20 7b 4f 62 6a 65 63 74 7d 20 5b 6f  aram {Object} [o
93d40 70 74 69 6f 6e 73 5d 20 74 68 65 20 6f 70 74 69  ptions] the opti
93d50 6f 6e 73 20 61 76 61 69 6c 61 62 6c 65 20 66 6f  ons available fo
93d60 72 20 74 68 65 20 73 79 6e 74 68 20 0a 09 09 20  r the synth ... 
93d70 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
93d80 20 20 20 20 20 20 20 20 20 20 20 73 65 65 20 64             see d
93d90 65 66 61 75 6c 74 73 20 62 65 6c 6f 77 0a 09 09  efaults below...
93da0 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20   *  @example... 
93db0 2a 20 76 61 72 20 73 79 6e 74 68 20 3d 20 6e 65  * var synth = ne
93dc0 77 20 54 6f 6e 65 2e 53 79 6e 74 68 28 29 2e 74  w Tone.Synth().t
93dd0 6f 4d 61 73 74 65 72 28 29 3b 0a 09 09 20 2a 20  oMaster();... * 
93de0 73 79 6e 74 68 2e 74 72 69 67 67 65 72 41 74 74  synth.triggerAtt
93df0 61 63 6b 52 65 6c 65 61 73 65 28 22 43 34 22 2c  ackRelease("C4",
93e00 20 22 38 6e 22 29 3b 0a 09 09 20 2a 2f 0a 09 20   "8n");... */.. 
93e10 20 20 20 54 6f 6e 65 2e 53 79 6e 74 68 20 3d 20     Tone.Synth = 
93e20 66 75 6e 63 74 69 6f 6e 20 28 6f 70 74 69 6f 6e  function (option
93e30 73 29 20 7b 0a 09 20 20 20 20 20 20 20 20 2f 2f  s) {..        //
93e40 67 65 74 20 74 68 65 20 64 65 66 61 75 6c 74 73  get the defaults
93e50 0a 09 20 20 20 20 20 20 20 20 6f 70 74 69 6f 6e  ..        option
93e60 73 20 3d 20 74 68 69 73 2e 64 65 66 61 75 6c 74  s = this.default
93e70 41 72 67 28 6f 70 74 69 6f 6e 73 2c 20 54 6f 6e  Arg(options, Ton
93e80 65 2e 53 79 6e 74 68 2e 64 65 66 61 75 6c 74 73  e.Synth.defaults
93e90 29 3b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65  );..        Tone
93ea0 2e 4d 6f 6e 6f 70 68 6f 6e 69 63 2e 63 61 6c 6c  .Monophonic.call
93eb0 28 74 68 69 73 2c 20 6f 70 74 69 6f 6e 73 29 3b  (this, options);
93ec0 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
93ed0 09 20 2a 20 20 54 68 65 20 6f 73 63 69 6c 6c 61  . *  The oscilla
93ee0 74 6f 72 2e 0a 09 09 09 20 2a 20 20 40 74 79 70  tor..... *  @typ
93ef0 65 20 7b 54 6f 6e 65 2e 4f 6d 6e 69 4f 73 63 69  e {Tone.OmniOsci
93f00 6c 6c 61 74 6f 72 7d 0a 09 09 09 20 2a 2f 0a 09  llator}.... */..
93f10 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f 73 63          this.osc
93f20 69 6c 6c 61 74 6f 72 20 3d 20 6e 65 77 20 54 6f  illator = new To
93f30 6e 65 2e 4f 6d 6e 69 4f 73 63 69 6c 6c 61 74 6f  ne.OmniOscillato
93f40 72 28 6f 70 74 69 6f 6e 73 2e 6f 73 63 69 6c 6c  r(options.oscill
93f50 61 74 6f 72 29 3b 0a 09 20 20 20 20 20 20 20 20  ator);..        
93f60 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 66  /**.... *  The f
93f70 72 65 71 75 65 6e 63 79 20 63 6f 6e 74 72 6f 6c  requency control
93f80 2e 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b  ..... *  @type {
93f90 46 72 65 71 75 65 6e 63 79 7d 0a 09 09 09 20 2a  Frequency}.... *
93fa0 20 20 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f    @signal.... */
93fb0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 66  ..        this.f
93fc0 72 65 71 75 65 6e 63 79 20 3d 20 74 68 69 73 2e  requency = this.
93fd0 6f 73 63 69 6c 6c 61 74 6f 72 2e 66 72 65 71 75  oscillator.frequ
93fe0 65 6e 63 79 3b 0a 09 20 20 20 20 20 20 20 20 2f  ency;..        /
93ff0 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 64 65  **.... *  The de
94000 74 75 6e 65 20 63 6f 6e 74 72 6f 6c 2e 0a 09 09  tune control....
94010 09 20 2a 20 20 40 74 79 70 65 20 7b 43 65 6e 74  . *  @type {Cent
94020 73 7d 0a 09 09 09 20 2a 20 20 40 73 69 67 6e 61  s}.... *  @signa
94030 6c 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  l.... */..      
94040 20 20 74 68 69 73 2e 64 65 74 75 6e 65 20 3d 20    this.detune = 
94050 74 68 69 73 2e 6f 73 63 69 6c 6c 61 74 6f 72 2e  this.oscillator.
94060 64 65 74 75 6e 65 3b 0a 09 20 20 20 20 20 20 20  detune;..       
94070 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20   /**.... *  The 
94080 61 6d 70 6c 69 74 75 64 65 20 65 6e 76 65 6c 6f  amplitude envelo
94090 70 65 2e 0a 09 09 09 20 2a 20 20 40 74 79 70 65  pe..... *  @type
940a0 20 7b 54 6f 6e 65 2e 41 6d 70 6c 69 74 75 64 65   {Tone.Amplitude
940b0 45 6e 76 65 6c 6f 70 65 7d 0a 09 09 09 20 2a 2f  Envelope}.... */
940c0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 65  ..        this.e
940d0 6e 76 65 6c 6f 70 65 20 3d 20 6e 65 77 20 54 6f  nvelope = new To
940e0 6e 65 2e 41 6d 70 6c 69 74 75 64 65 45 6e 76 65  ne.AmplitudeEnve
940f0 6c 6f 70 65 28 6f 70 74 69 6f 6e 73 2e 65 6e 76  lope(options.env
94100 65 6c 6f 70 65 29 3b 0a 09 20 20 20 20 20 20 20  elope);..       
94110 20 2f 2f 63 6f 6e 6e 65 63 74 20 74 68 65 20 6f   //connect the o
94120 73 63 69 6c 6c 61 74 6f 72 73 20 74 6f 20 74 68  scillators to th
94130 65 20 6f 75 74 70 75 74 0a 09 20 20 20 20 20 20  e output..      
94140 20 20 74 68 69 73 2e 6f 73 63 69 6c 6c 61 74 6f    this.oscillato
94150 72 2e 63 68 61 69 6e 28 74 68 69 73 2e 65 6e 76  r.chain(this.env
94160 65 6c 6f 70 65 2c 20 74 68 69 73 2e 6f 75 74 70  elope, this.outp
94170 75 74 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f  ut);..        //
94180 73 74 61 72 74 20 74 68 65 20 6f 73 63 69 6c 6c  start the oscill
94190 61 74 6f 72 73 0a 09 20 20 20 20 20 20 20 20 74  ators..        t
941a0 68 69 73 2e 6f 73 63 69 6c 6c 61 74 6f 72 2e 73  his.oscillator.s
941b0 74 61 72 74 28 29 3b 0a 09 20 20 20 20 20 20 20  tart();..       
941c0 20 74 68 69 73 2e 5f 72 65 61 64 4f 6e 6c 79 28   this._readOnly(
941d0 5b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  [..            '
941e0 6f 73 63 69 6c 6c 61 74 6f 72 27 2c 0a 09 20 20  oscillator',..  
941f0 20 20 20 20 20 20 20 20 20 20 27 66 72 65 71 75            'frequ
94200 65 6e 63 79 27 2c 0a 09 20 20 20 20 20 20 20 20  ency',..        
94210 20 20 20 20 27 64 65 74 75 6e 65 27 2c 0a 09 20      'detune',.. 
94220 20 20 20 20 20 20 20 20 20 20 20 27 65 6e 76 65             'enve
94230 6c 6f 70 65 27 0a 09 20 20 20 20 20 20 20 20 5d  lope'..        ]
94240 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  );..    };..    
94250 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65  Tone.extend(Tone
94260 2e 53 79 6e 74 68 2c 20 54 6f 6e 65 2e 4d 6f 6e  .Synth, Tone.Mon
94270 6f 70 68 6f 6e 69 63 29 3b 0a 09 20 20 20 20 2f  ophonic);..    /
94280 2a 2a 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 0a  **... *  @const.
94290 09 09 20 2a 20 20 40 73 74 61 74 69 63 0a 09 09  .. *  @static...
942a0 20 2a 20 20 40 74 79 70 65 20 7b 4f 62 6a 65 63   *  @type {Objec
942b0 74 7d 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  t}... */..    To
942c0 6e 65 2e 53 79 6e 74 68 2e 64 65 66 61 75 6c 74  ne.Synth.default
942d0 73 20 3d 20 7b 0a 09 20 20 20 20 20 20 20 20 27  s = {..        '
942e0 6f 73 63 69 6c 6c 61 74 6f 72 27 3a 20 7b 20 27  oscillator': { '
942f0 74 79 70 65 27 3a 20 27 74 72 69 61 6e 67 6c 65  type': 'triangle
94300 27 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 27 65  ' },..        'e
94310 6e 76 65 6c 6f 70 65 27 3a 20 7b 0a 09 20 20 20  nvelope': {..   
94320 20 20 20 20 20 20 20 20 20 27 61 74 74 61 63 6b           'attack
94330 27 3a 20 30 2e 30 30 35 2c 0a 09 20 20 20 20 20  ': 0.005,..     
94340 20 20 20 20 20 20 20 27 64 65 63 61 79 27 3a 20         'decay': 
94350 30 2e 31 2c 0a 09 20 20 20 20 20 20 20 20 20 20  0.1,..          
94360 20 20 27 73 75 73 74 61 69 6e 27 3a 20 30 2e 33    'sustain': 0.3
94370 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
94380 72 65 6c 65 61 73 65 27 3a 20 31 0a 09 20 20 20  release': 1..   
94390 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a 09       }..    };..
943a0 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 73 74      /**... *  st
943b0 61 72 74 20 74 68 65 20 61 74 74 61 63 6b 20 70  art the attack p
943c0 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 65 6e  ortion of the en
943d0 76 65 6c 6f 70 65 0a 09 09 20 2a 20 20 40 70 61  velope... *  @pa
943e0 72 61 6d 20 7b 54 69 6d 65 7d 20 5b 74 69 6d 65  ram {Time} [time
943f0 3d 6e 6f 77 5d 20 74 68 65 20 74 69 6d 65 20 74  =now] the time t
94400 68 65 20 61 74 74 61 63 6b 20 73 68 6f 75 6c 64  he attack should
94410 20 73 74 61 72 74 0a 09 09 20 2a 20 20 40 70 61   start... *  @pa
94420 72 61 6d 20 7b 6e 75 6d 62 65 72 7d 20 5b 76 65  ram {number} [ve
94430 6c 6f 63 69 74 79 3d 31 5d 20 74 68 65 20 76 65  locity=1] the ve
94440 6c 6f 63 69 74 79 20 6f 66 20 74 68 65 20 6e 6f  locity of the no
94450 74 65 20 28 30 2d 31 29 0a 09 09 20 2a 20 20 40  te (0-1)... *  @
94460 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 53 79  returns {Tone.Sy
94470 6e 74 68 7d 20 74 68 69 73 0a 09 09 20 2a 20 20  nth} this... *  
94480 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09  @private... */..
94490 20 20 20 20 54 6f 6e 65 2e 53 79 6e 74 68 2e 70      Tone.Synth.p
944a0 72 6f 74 6f 74 79 70 65 2e 5f 74 72 69 67 67 65  rototype._trigge
944b0 72 45 6e 76 65 6c 6f 70 65 41 74 74 61 63 6b 20  rEnvelopeAttack 
944c0 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65  = function (time
944d0 2c 20 76 65 6c 6f 63 69 74 79 29 20 7b 0a 09 20  , velocity) {.. 
944e0 20 20 20 20 20 20 20 2f 2f 74 68 65 20 65 6e 76         //the env
944f0 65 6c 6f 70 65 73 0a 09 20 20 20 20 20 20 20 20  elopes..        
94500 74 68 69 73 2e 65 6e 76 65 6c 6f 70 65 2e 74 72  this.envelope.tr
94510 69 67 67 65 72 41 74 74 61 63 6b 28 74 69 6d 65  iggerAttack(time
94520 2c 20 76 65 6c 6f 63 69 74 79 29 3b 0a 09 20 20  , velocity);..  
94530 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
94540 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  s;..    };..    
94550 2f 2a 2a 0a 09 09 20 2a 20 20 73 74 61 72 74 20  /**... *  start 
94560 74 68 65 20 72 65 6c 65 61 73 65 20 70 6f 72 74  the release port
94570 69 6f 6e 20 6f 66 20 74 68 65 20 65 6e 76 65 6c  ion of the envel
94580 6f 70 65 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  ope... *  @param
94590 20 7b 54 69 6d 65 7d 20 5b 74 69 6d 65 3d 6e 6f   {Time} [time=no
945a0 77 5d 20 74 68 65 20 74 69 6d 65 20 74 68 65 20  w] the time the 
945b0 72 65 6c 65 61 73 65 20 73 68 6f 75 6c 64 20 73  release should s
945c0 74 61 72 74 0a 09 09 20 2a 20 20 40 72 65 74 75  tart... *  @retu
945d0 72 6e 73 20 7b 54 6f 6e 65 2e 53 79 6e 74 68 7d  rns {Tone.Synth}
945e0 20 74 68 69 73 0a 09 09 20 2a 20 20 40 70 72 69   this... *  @pri
945f0 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20  vate... */..    
94600 54 6f 6e 65 2e 53 79 6e 74 68 2e 70 72 6f 74 6f  Tone.Synth.proto
94610 74 79 70 65 2e 5f 74 72 69 67 67 65 72 45 6e 76  type._triggerEnv
94620 65 6c 6f 70 65 52 65 6c 65 61 73 65 20 3d 20 66  elopeRelease = f
94630 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65 29 20 7b  unction (time) {
94640 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 65  ..        this.e
94650 6e 76 65 6c 6f 70 65 2e 74 72 69 67 67 65 72 52  nvelope.triggerR
94660 65 6c 65 61 73 65 28 74 69 6d 65 29 3b 0a 09 20  elease(time);.. 
94670 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
94680 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  is;..    };..   
94690 20 2f 2a 2a 0a 09 09 20 2a 20 20 63 6c 65 61 6e   /**... *  clean
946a0 20 75 70 0a 09 09 20 2a 20 20 40 72 65 74 75 72   up... *  @retur
946b0 6e 73 20 7b 54 6f 6e 65 2e 53 79 6e 74 68 7d 20  ns {Tone.Synth} 
946c0 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20  this... */..    
946d0 54 6f 6e 65 2e 53 79 6e 74 68 2e 70 72 6f 74 6f  Tone.Synth.proto
946e0 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20 66  type.dispose = f
946f0 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
94700 20 20 20 20 20 20 54 6f 6e 65 2e 4d 6f 6e 6f 70        Tone.Monop
94710 68 6f 6e 69 63 2e 70 72 6f 74 6f 74 79 70 65 2e  honic.prototype.
94720 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69  dispose.call(thi
94730 73 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  s);..        thi
94740 73 2e 5f 77 72 69 74 61 62 6c 65 28 5b 0a 09 20  s._writable([.. 
94750 20 20 20 20 20 20 20 20 20 20 20 27 6f 73 63 69             'osci
94760 6c 6c 61 74 6f 72 27 2c 0a 09 20 20 20 20 20 20  llator',..      
94770 20 20 20 20 20 20 27 66 72 65 71 75 65 6e 63 79        'frequency
94780 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ',..            
94790 27 64 65 74 75 6e 65 27 2c 0a 09 20 20 20 20 20  'detune',..     
947a0 20 20 20 20 20 20 20 27 65 6e 76 65 6c 6f 70 65         'envelope
947b0 27 0a 09 20 20 20 20 20 20 20 20 5d 29 3b 0a 09  '..        ]);..
947c0 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f 73 63          this.osc
947d0 69 6c 6c 61 74 6f 72 2e 64 69 73 70 6f 73 65 28  illator.dispose(
947e0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
947f0 2e 6f 73 63 69 6c 6c 61 74 6f 72 20 3d 20 6e 75  .oscillator = nu
94800 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ll;..        thi
94810 73 2e 65 6e 76 65 6c 6f 70 65 2e 64 69 73 70 6f  s.envelope.dispo
94820 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74  se();..        t
94830 68 69 73 2e 65 6e 76 65 6c 6f 70 65 20 3d 20 6e  his.envelope = n
94840 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ull;..        th
94850 69 73 2e 66 72 65 71 75 65 6e 63 79 20 3d 20 6e  is.frequency = n
94860 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ull;..        th
94870 69 73 2e 64 65 74 75 6e 65 20 3d 20 6e 75 6c 6c  is.detune = null
94880 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
94890 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a  n this;..    };.
948a0 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65  .    return Tone
948b0 2e 53 79 6e 74 68 3b 0a 09 7d 29 3b 0a 09 4d 6f  .Synth;..});..Mo
948c0 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28 54  dule(function (T
948d0 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09 20 20  one) {..    ..  
948e0 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61    /**... *  @cla
948f0 73 73 20 20 41 4d 53 79 6e 74 68 20 75 73 65 73  ss  AMSynth uses
94900 20 74 68 65 20 6f 75 74 70 75 74 20 6f 66 20 6f   the output of o
94910 6e 65 20 54 6f 6e 65 2e 53 79 6e 74 68 20 74 6f  ne Tone.Synth to
94920 20 6d 6f 64 75 6c 61 74 65 20 74 68 65 0a 09 09   modulate the...
94930 20 2a 20 20 20 20 20 20 20 20 20 20 61 6d 70 6c   *          ampl
94940 69 74 75 64 65 20 6f 66 20 61 6e 6f 74 68 65 72  itude of another
94950 20 54 6f 6e 65 2e 53 79 6e 74 68 2e 20 54 68 65   Tone.Synth. The
94960 20 68 61 72 6d 6f 6e 69 63 69 74 79 20 28 74 68   harmonicity (th
94970 65 20 72 61 74 69 6f 20 62 65 74 77 65 65 6e 0a  e ratio between.
94980 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 74 68  .. *          th
94990 65 20 74 77 6f 20 73 69 67 6e 61 6c 73 29 20 61  e two signals) a
949a0 66 66 65 63 74 73 20 74 68 65 20 74 69 6d 62 72  ffects the timbr
949b0 65 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20  e of the output 
949c0 73 69 67 6e 61 6c 20 67 72 65 61 74 6c 79 2e 0a  signal greatly..
949d0 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 52 65  .. *          Re
949e0 61 64 20 6d 6f 72 65 20 61 62 6f 75 74 20 41 6d  ad more about Am
949f0 70 6c 69 74 75 64 65 20 4d 6f 64 75 6c 61 74 69  plitude Modulati
94a00 6f 6e 20 53 79 6e 74 68 65 73 69 73 20 6f 6e 20  on Synthesis on 
94a10 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 5b  ... *          [
94a20 53 6f 75 6e 64 4f 6e 53 6f 75 6e 64 5d 28 68 74  SoundOnSound](ht
94a30 74 70 3a 2f 2f 77 77 77 2e 73 6f 75 6e 64 6f 6e  tp://www.soundon
94a40 73 6f 75 6e 64 2e 63 6f 6d 2f 73 6f 73 2f 6d 61  sound.com/sos/ma
94a50 72 30 30 2f 61 72 74 69 63 6c 65 73 2f 73 79 6e  r00/articles/syn
94a60 74 68 73 65 63 72 65 74 73 2e 68 74 6d 29 2e 0a  thsecrets.htm)..
94a70 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 3c 69  .. *          <i
94a80 6d 67 20 73 72 63 3d 22 68 74 74 70 73 3a 2f 2f  mg src="https://
94a90 64 6f 63 73 2e 67 6f 6f 67 6c 65 2e 63 6f 6d 2f  docs.google.com/
94aa0 64 72 61 77 69 6e 67 73 2f 64 2f 31 54 51 75 38  drawings/d/1TQu8
94ab0 45 64 34 69 46 72 31 59 54 4c 4b 70 42 33 55 31  Ed4iFr1YTLKpB3U1
94ac0 5f 68 75 72 2d 55 77 42 72 68 35 67 64 42 58 63  _hur-UwBrh5gdBXc
94ad0 38 42 78 66 47 4b 77 2f 70 75 62 3f 77 3d 31 30  8BxfGKw/pub?w=10
94ae0 30 39 26 68 3d 34 35 37 22 3e 0a 09 09 20 2a 0a  09&h=457">... *.
94af0 09 09 20 2a 20 20 40 63 6f 6e 73 74 72 75 63 74  .. *  @construct
94b00 6f 72 0a 09 09 20 2a 20 20 40 65 78 74 65 6e 64  or... *  @extend
94b10 73 20 7b 54 6f 6e 65 2e 4d 6f 6e 6f 70 68 6f 6e  s {Tone.Monophon
94b20 69 63 7d 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  ic}... *  @param
94b30 20 7b 4f 62 6a 65 63 74 7d 20 5b 6f 70 74 69 6f   {Object} [optio
94b40 6e 73 5d 20 74 68 65 20 6f 70 74 69 6f 6e 73 20  ns] the options 
94b50 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68  available for th
94b60 65 20 73 79 6e 74 68 20 0a 09 09 20 2a 20 20 20  e synth ... *   
94b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94b80 20 20 20 20 20 20 20 20 20 73 65 65 20 64 65 66           see def
94b90 61 75 6c 74 73 20 62 65 6c 6f 77 0a 09 09 20 2a  aults below... *
94ba0 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20    @example... * 
94bb0 76 61 72 20 73 79 6e 74 68 20 3d 20 6e 65 77 20  var synth = new 
94bc0 54 6f 6e 65 2e 41 4d 53 79 6e 74 68 28 29 2e 74  Tone.AMSynth().t
94bd0 6f 4d 61 73 74 65 72 28 29 3b 0a 09 09 20 2a 20  oMaster();... * 
94be0 73 79 6e 74 68 2e 74 72 69 67 67 65 72 41 74 74  synth.triggerAtt
94bf0 61 63 6b 52 65 6c 65 61 73 65 28 22 43 34 22 2c  ackRelease("C4",
94c00 20 22 34 6e 22 29 3b 0a 09 09 20 2a 2f 0a 09 20   "4n");... */.. 
94c10 20 20 20 54 6f 6e 65 2e 41 4d 53 79 6e 74 68 20     Tone.AMSynth 
94c20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 6f 70 74 69  = function (opti
94c30 6f 6e 73 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ons) {..        
94c40 6f 70 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e 64  options = this.d
94c50 65 66 61 75 6c 74 41 72 67 28 6f 70 74 69 6f 6e  efaultArg(option
94c60 73 2c 20 54 6f 6e 65 2e 41 4d 53 79 6e 74 68 2e  s, Tone.AMSynth.
94c70 64 65 66 61 75 6c 74 73 29 3b 0a 09 20 20 20 20  defaults);..    
94c80 20 20 20 20 54 6f 6e 65 2e 4d 6f 6e 6f 70 68 6f      Tone.Monopho
94c90 6e 69 63 2e 63 61 6c 6c 28 74 68 69 73 2c 20 6f  nic.call(this, o
94ca0 70 74 69 6f 6e 73 29 3b 0a 09 20 20 20 20 20 20  ptions);..      
94cb0 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65    /**.... *  The
94cc0 20 63 61 72 72 69 65 72 20 76 6f 69 63 65 2e 20   carrier voice. 
94cd0 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54  .... *  @type {T
94ce0 6f 6e 65 2e 53 79 6e 74 68 7d 0a 09 09 09 20 2a  one.Synth}.... *
94cf0 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a    @private.... *
94d00 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
94d10 5f 63 61 72 72 69 65 72 20 3d 20 6e 65 77 20 54  _carrier = new T
94d20 6f 6e 65 2e 53 79 6e 74 68 28 29 3b 0a 09 20 20  one.Synth();..  
94d30 20 20 20 20 20 20 74 68 69 73 2e 5f 63 61 72 72        this._carr
94d40 69 65 72 2e 76 6f 6c 75 6d 65 2e 76 61 6c 75 65  ier.volume.value
94d50 20 3d 20 2d 31 30 3b 0a 09 20 20 20 20 20 20 20   = -10;..       
94d60 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20   /**.... *  The 
94d70 63 61 72 72 69 65 72 27 73 20 6f 73 63 69 6c 6c  carrier's oscill
94d80 61 74 6f 72 0a 09 09 09 20 2a 20 20 40 74 79 70  ator.... *  @typ
94d90 65 20 7b 54 6f 6e 65 2e 4f 73 63 69 6c 6c 61 74  e {Tone.Oscillat
94da0 6f 72 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  or}.... */..    
94db0 20 20 20 20 74 68 69 73 2e 6f 73 63 69 6c 6c 61      this.oscilla
94dc0 74 6f 72 20 3d 20 74 68 69 73 2e 5f 63 61 72 72  tor = this._carr
94dd0 69 65 72 2e 6f 73 63 69 6c 6c 61 74 6f 72 3b 0a  ier.oscillator;.
94de0 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
94df0 20 2a 20 20 54 68 65 20 63 61 72 72 69 65 72 27   *  The carrier'
94e00 73 20 65 6e 76 65 6c 6f 70 65 0a 09 09 09 20 2a  s envelope.... *
94e10 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 4f 73    @type {Tone.Os
94e20 63 69 6c 6c 61 74 6f 72 7d 0a 09 09 09 20 2a 2f  cillator}.... */
94e30 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 65  ..        this.e
94e40 6e 76 65 6c 6f 70 65 20 3d 20 74 68 69 73 2e 5f  nvelope = this._
94e50 63 61 72 72 69 65 72 2e 65 6e 76 65 6c 6f 70 65  carrier.envelope
94e60 2e 73 65 74 28 6f 70 74 69 6f 6e 73 2e 65 6e 76  .set(options.env
94e70 65 6c 6f 70 65 29 3b 0a 09 20 20 20 20 20 20 20  elope);..       
94e80 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20   /**.... *  The 
94e90 6d 6f 64 75 6c 61 74 6f 72 20 76 6f 69 63 65 2e  modulator voice.
94ea0 20 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b   .... *  @type {
94eb0 54 6f 6e 65 2e 53 79 6e 74 68 7d 0a 09 09 09 20  Tone.Synth}.... 
94ec0 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20  *  @private.... 
94ed0 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
94ee0 2e 5f 6d 6f 64 75 6c 61 74 6f 72 20 3d 20 6e 65  ._modulator = ne
94ef0 77 20 54 6f 6e 65 2e 53 79 6e 74 68 28 29 3b 0a  w Tone.Synth();.
94f00 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d  .        this._m
94f10 6f 64 75 6c 61 74 6f 72 2e 76 6f 6c 75 6d 65 2e  odulator.volume.
94f20 76 61 6c 75 65 20 3d 20 2d 31 30 3b 0a 09 20 20  value = -10;..  
94f30 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
94f40 20 54 68 65 20 6d 6f 64 75 6c 61 74 6f 72 27 73   The modulator's
94f50 20 6f 73 63 69 6c 6c 61 74 6f 72 20 77 68 69 63   oscillator whic
94f60 68 20 69 73 20 61 70 70 6c 69 65 64 0a 09 09 09  h is applied....
94f70 20 2a 20 20 74 6f 20 74 68 65 20 61 6d 70 6c 69   *  to the ampli
94f80 74 75 64 65 20 6f 66 20 74 68 65 20 6f 73 63 69  tude of the osci
94f90 6c 6c 61 74 6f 72 0a 09 09 09 20 2a 20 20 40 74  llator.... *  @t
94fa0 79 70 65 20 7b 54 6f 6e 65 2e 4f 73 63 69 6c 6c  ype {Tone.Oscill
94fb0 61 74 6f 72 7d 0a 09 09 09 20 2a 2f 0a 09 20 20  ator}.... */..  
94fc0 20 20 20 20 20 20 74 68 69 73 2e 6d 6f 64 75 6c        this.modul
94fd0 61 74 69 6f 6e 20 3d 20 74 68 69 73 2e 5f 6d 6f  ation = this._mo
94fe0 64 75 6c 61 74 6f 72 2e 6f 73 63 69 6c 6c 61 74  dulator.oscillat
94ff0 6f 72 2e 73 65 74 28 6f 70 74 69 6f 6e 73 2e 6d  or.set(options.m
95000 6f 64 75 6c 61 74 69 6f 6e 29 3b 0a 09 20 20 20  odulation);..   
95010 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
95020 54 68 65 20 6d 6f 64 75 6c 61 74 6f 72 27 73 20  The modulator's 
95030 65 6e 76 65 6c 6f 70 65 0a 09 09 09 20 2a 20 20  envelope.... *  
95040 40 74 79 70 65 20 7b 54 6f 6e 65 2e 4f 73 63 69  @type {Tone.Osci
95050 6c 6c 61 74 6f 72 7d 0a 09 09 09 20 2a 2f 0a 09  llator}.... */..
95060 20 20 20 20 20 20 20 20 74 68 69 73 2e 6d 6f 64          this.mod
95070 75 6c 61 74 69 6f 6e 45 6e 76 65 6c 6f 70 65 20  ulationEnvelope 
95080 3d 20 74 68 69 73 2e 5f 6d 6f 64 75 6c 61 74 6f  = this._modulato
95090 72 2e 65 6e 76 65 6c 6f 70 65 2e 73 65 74 28 6f  r.envelope.set(o
950a0 70 74 69 6f 6e 73 2e 6d 6f 64 75 6c 61 74 69 6f  ptions.modulatio
950b0 6e 45 6e 76 65 6c 6f 70 65 29 3b 0a 09 20 20 20  nEnvelope);..   
950c0 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
950d0 54 68 65 20 66 72 65 71 75 65 6e 63 79 2e 0a 09  The frequency...
950e0 09 09 20 2a 20 20 40 74 79 70 65 20 7b 46 72 65  .. *  @type {Fre
950f0 71 75 65 6e 63 79 7d 0a 09 09 09 20 2a 20 20 40  quency}.... *  @
95100 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f 0a 09 20  signal.... */.. 
95110 20 20 20 20 20 20 20 74 68 69 73 2e 66 72 65 71         this.freq
95120 75 65 6e 63 79 20 3d 20 6e 65 77 20 54 6f 6e 65  uency = new Tone
95130 2e 53 69 67 6e 61 6c 28 34 34 30 2c 20 54 6f 6e  .Signal(440, Ton
95140 65 2e 54 79 70 65 2e 46 72 65 71 75 65 6e 63 79  e.Type.Frequency
95150 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
95160 09 09 09 20 2a 20 20 54 68 65 20 64 65 74 75 6e  ... *  The detun
95170 65 20 69 6e 20 63 65 6e 74 73 0a 09 09 09 20 2a  e in cents.... *
95180 20 20 40 74 79 70 65 20 7b 43 65 6e 74 73 7d 0a    @type {Cents}.
95190 09 09 09 20 2a 20 20 40 73 69 67 6e 61 6c 0a 09  ... *  @signal..
951a0 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
951b0 68 69 73 2e 64 65 74 75 6e 65 20 3d 20 6e 65 77  his.detune = new
951c0 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 28 6f 70 74   Tone.Signal(opt
951d0 69 6f 6e 73 2e 64 65 74 75 6e 65 2c 20 54 6f 6e  ions.detune, Ton
951e0 65 2e 54 79 70 65 2e 43 65 6e 74 73 29 3b 0a 09  e.Type.Cents);..
951f0 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
95200 2a 20 20 48 61 72 6d 6f 6e 69 63 69 74 79 20 69  *  Harmonicity i
95210 73 20 74 68 65 20 72 61 74 69 6f 20 62 65 74 77  s the ratio betw
95220 65 65 6e 20 74 68 65 20 74 77 6f 20 76 6f 69 63  een the two voic
95230 65 73 2e 20 41 20 68 61 72 6d 6f 6e 69 63 69 74  es. A harmonicit
95240 79 20 6f 66 0a 09 09 09 20 2a 20 20 31 20 69 73  y of.... *  1 is
95250 20 6e 6f 20 63 68 61 6e 67 65 2e 20 48 61 72 6d   no change. Harm
95260 6f 6e 69 63 69 74 79 20 3d 20 32 20 6d 65 61 6e  onicity = 2 mean
95270 73 20 61 20 63 68 61 6e 67 65 20 6f 66 20 61 6e  s a change of an
95280 20 6f 63 74 61 76 65 2e 20 0a 09 09 09 20 2a 20   octave. .... * 
95290 20 40 74 79 70 65 20 7b 50 6f 73 69 74 69 76 65   @type {Positive
952a0 7d 0a 09 09 09 20 2a 20 20 40 73 69 67 6e 61 6c  }.... *  @signal
952b0 0a 09 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65  .... *  @example
952c0 0a 09 09 09 20 2a 20 2f 2f 70 69 74 63 68 20 76  .... * //pitch v
952d0 6f 69 63 65 31 20 61 6e 20 6f 63 74 61 76 65 20  oice1 an octave 
952e0 62 65 6c 6f 77 20 76 6f 69 63 65 30 0a 09 09 09  below voice0....
952f0 20 2a 20 73 79 6e 74 68 2e 68 61 72 6d 6f 6e 69   * synth.harmoni
95300 63 69 74 79 2e 76 61 6c 75 65 20 3d 20 30 2e 35  city.value = 0.5
95310 3b 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  ;.... */..      
95320 20 20 74 68 69 73 2e 68 61 72 6d 6f 6e 69 63 69    this.harmonici
95330 74 79 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4d 75  ty = new Tone.Mu
95340 6c 74 69 70 6c 79 28 6f 70 74 69 6f 6e 73 2e 68  ltiply(options.h
95350 61 72 6d 6f 6e 69 63 69 74 79 29 3b 0a 09 20 20  armonicity);..  
95360 20 20 20 20 20 20 74 68 69 73 2e 68 61 72 6d 6f        this.harmo
95370 6e 69 63 69 74 79 2e 75 6e 69 74 73 20 3d 20 54  nicity.units = T
95380 6f 6e 65 2e 54 79 70 65 2e 50 6f 73 69 74 69 76  one.Type.Positiv
95390 65 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  e;..        /**.
953a0 09 09 09 20 2a 20 20 63 6f 6e 76 65 72 74 20 74  ... *  convert t
953b0 68 65 20 2d 31 2c 31 20 6f 75 74 70 75 74 20 74  he -1,1 output t
953c0 6f 20 30 2c 31 0a 09 09 09 20 2a 20 20 40 74 79  o 0,1.... *  @ty
953d0 70 65 20 7b 54 6f 6e 65 2e 41 75 64 69 6f 54 6f  pe {Tone.AudioTo
953e0 47 61 69 6e 7d 0a 09 09 09 20 2a 20 20 40 70 72  Gain}.... *  @pr
953f0 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20  ivate.... */..  
95400 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 6f 64 75        this._modu
95410 6c 61 74 69 6f 6e 53 63 61 6c 65 20 3d 20 6e 65  lationScale = ne
95420 77 20 54 6f 6e 65 2e 41 75 64 69 6f 54 6f 47 61  w Tone.AudioToGa
95430 69 6e 28 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  in();..        /
95440 2a 2a 0a 09 09 09 20 2a 20 20 74 68 65 20 6e 6f  **.... *  the no
95450 64 65 20 77 68 65 72 65 20 74 68 65 20 6d 6f 64  de where the mod
95460 75 6c 61 74 69 6f 6e 20 68 61 70 70 65 6e 73 0a  ulation happens.
95470 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54 6f  ... *  @type {To
95480 6e 65 2e 47 61 69 6e 7d 0a 09 09 09 20 2a 20 20  ne.Gain}.... *  
95490 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a  @private.... */.
954a0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d  .        this._m
954b0 6f 64 75 6c 61 74 69 6f 6e 4e 6f 64 65 20 3d 20  odulationNode = 
954c0 6e 65 77 20 54 6f 6e 65 2e 47 61 69 6e 28 29 3b  new Tone.Gain();
954d0 0a 09 20 20 20 20 20 20 20 20 2f 2f 63 6f 6e 74  ..        //cont
954e0 72 6f 6c 20 74 68 65 20 74 77 6f 20 76 6f 69 63  rol the two voic
954f0 65 73 20 66 72 65 71 75 65 6e 63 79 0a 09 20 20  es frequency..  
95500 20 20 20 20 20 20 74 68 69 73 2e 66 72 65 71 75        this.frequ
95510 65 6e 63 79 2e 63 6f 6e 6e 65 63 74 28 74 68 69  ency.connect(thi
95520 73 2e 5f 63 61 72 72 69 65 72 2e 66 72 65 71 75  s._carrier.frequ
95530 65 6e 63 79 29 3b 0a 09 20 20 20 20 20 20 20 20  ency);..        
95540 74 68 69 73 2e 66 72 65 71 75 65 6e 63 79 2e 63  this.frequency.c
95550 68 61 69 6e 28 74 68 69 73 2e 68 61 72 6d 6f 6e  hain(this.harmon
95560 69 63 69 74 79 2c 20 74 68 69 73 2e 5f 6d 6f 64  icity, this._mod
95570 75 6c 61 74 6f 72 2e 66 72 65 71 75 65 6e 63 79  ulator.frequency
95580 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
95590 2e 64 65 74 75 6e 65 2e 66 61 6e 28 74 68 69 73  .detune.fan(this
955a0 2e 5f 63 61 72 72 69 65 72 2e 64 65 74 75 6e 65  ._carrier.detune
955b0 2c 20 74 68 69 73 2e 5f 6d 6f 64 75 6c 61 74 6f  , this._modulato
955c0 72 2e 64 65 74 75 6e 65 29 3b 0a 09 20 20 20 20  r.detune);..    
955d0 20 20 20 20 74 68 69 73 2e 5f 6d 6f 64 75 6c 61      this._modula
955e0 74 6f 72 2e 63 68 61 69 6e 28 74 68 69 73 2e 5f  tor.chain(this._
955f0 6d 6f 64 75 6c 61 74 69 6f 6e 53 63 61 6c 65 2c  modulationScale,
95600 20 74 68 69 73 2e 5f 6d 6f 64 75 6c 61 74 69 6f   this._modulatio
95610 6e 4e 6f 64 65 2e 67 61 69 6e 29 3b 0a 09 20 20  nNode.gain);..  
95620 20 20 20 20 20 20 74 68 69 73 2e 5f 63 61 72 72        this._carr
95630 69 65 72 2e 63 68 61 69 6e 28 74 68 69 73 2e 5f  ier.chain(this._
95640 6d 6f 64 75 6c 61 74 69 6f 6e 4e 6f 64 65 2c 20  modulationNode, 
95650 74 68 69 73 2e 6f 75 74 70 75 74 29 3b 0a 09 20  this.output);.. 
95660 20 20 20 20 20 20 20 74 68 69 73 2e 5f 72 65 61         this._rea
95670 64 4f 6e 6c 79 28 5b 0a 09 20 20 20 20 20 20 20  dOnly([..       
95680 20 20 20 20 20 27 66 72 65 71 75 65 6e 63 79 27       'frequency'
95690 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
956a0 68 61 72 6d 6f 6e 69 63 69 74 79 27 2c 0a 09 20  harmonicity',.. 
956b0 20 20 20 20 20 20 20 20 20 20 20 27 6f 73 63 69             'osci
956c0 6c 6c 61 74 6f 72 27 2c 0a 09 20 20 20 20 20 20  llator',..      
956d0 20 20 20 20 20 20 27 65 6e 76 65 6c 6f 70 65 27        'envelope'
956e0 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
956f0 6d 6f 64 75 6c 61 74 69 6f 6e 27 2c 0a 09 20 20  modulation',..  
95700 20 20 20 20 20 20 20 20 20 20 27 6d 6f 64 75 6c            'modul
95710 61 74 69 6f 6e 45 6e 76 65 6c 6f 70 65 27 2c 0a  ationEnvelope',.
95720 09 20 20 20 20 20 20 20 20 20 20 20 20 27 64 65  .            'de
95730 74 75 6e 65 27 0a 09 20 20 20 20 20 20 20 20 5d  tune'..        ]
95740 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  );..    };..    
95750 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65  Tone.extend(Tone
95760 2e 41 4d 53 79 6e 74 68 2c 20 54 6f 6e 65 2e 4d  .AMSynth, Tone.M
95770 6f 6e 6f 70 68 6f 6e 69 63 29 3b 0a 09 20 20 20  onophonic);..   
95780 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 73 74 61 74   /**... *  @stat
95790 69 63 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b  ic... *  @type {
957a0 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a 09 20  Object}... */.. 
957b0 20 20 20 54 6f 6e 65 2e 41 4d 53 79 6e 74 68 2e     Tone.AMSynth.
957c0 64 65 66 61 75 6c 74 73 20 3d 20 7b 0a 09 20 20  defaults = {..  
957d0 20 20 20 20 20 20 27 68 61 72 6d 6f 6e 69 63 69        'harmonici
957e0 74 79 27 3a 20 33 2c 0a 09 20 20 20 20 20 20 20  ty': 3,..       
957f0 20 27 64 65 74 75 6e 65 27 3a 20 30 2c 0a 09 20   'detune': 0,.. 
95800 20 20 20 20 20 20 20 27 6f 73 63 69 6c 6c 61 74         'oscillat
95810 6f 72 27 3a 20 7b 20 27 74 79 70 65 27 3a 20 27  or': { 'type': '
95820 73 69 6e 65 27 20 7d 2c 0a 09 20 20 20 20 20 20  sine' },..      
95830 20 20 27 65 6e 76 65 6c 6f 70 65 27 3a 20 7b 0a    'envelope': {.
95840 09 20 20 20 20 20 20 20 20 20 20 20 20 27 61 74  .            'at
95850 74 61 63 6b 27 3a 20 30 2e 30 31 2c 0a 09 20 20  tack': 0.01,..  
95860 20 20 20 20 20 20 20 20 20 20 27 64 65 63 61 79            'decay
95870 27 3a 20 30 2e 30 31 2c 0a 09 20 20 20 20 20 20  ': 0.01,..      
95880 20 20 20 20 20 20 27 73 75 73 74 61 69 6e 27 3a        'sustain':
95890 20 31 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20   1,..           
958a0 20 27 72 65 6c 65 61 73 65 27 3a 20 30 2e 35 0a   'release': 0.5.
958b0 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20  .        },..   
958c0 20 20 20 20 20 27 6d 6f 64 75 6c 61 74 69 6f 6e       'modulation
958d0 27 3a 20 7b 20 27 74 79 70 65 27 3a 20 27 73 71  ': { 'type': 'sq
958e0 75 61 72 65 27 20 7d 2c 0a 09 20 20 20 20 20 20  uare' },..      
958f0 20 20 27 6d 6f 64 75 6c 61 74 69 6f 6e 45 6e 76    'modulationEnv
95900 65 6c 6f 70 65 27 3a 20 7b 0a 09 20 20 20 20 20  elope': {..     
95910 20 20 20 20 20 20 20 27 61 74 74 61 63 6b 27 3a         'attack':
95920 20 30 2e 35 2c 0a 09 20 20 20 20 20 20 20 20 20   0.5,..         
95930 20 20 20 27 64 65 63 61 79 27 3a 20 30 2c 0a 09     'decay': 0,..
95940 20 20 20 20 20 20 20 20 20 20 20 20 27 73 75 73              'sus
95950 74 61 69 6e 27 3a 20 31 2c 0a 09 20 20 20 20 20  tain': 1,..     
95960 20 20 20 20 20 20 20 27 72 65 6c 65 61 73 65 27         'release'
95970 3a 20 30 2e 35 0a 09 20 20 20 20 20 20 20 20 7d  : 0.5..        }
95980 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
95990 2a 0a 09 09 20 2a 20 20 74 72 69 67 67 65 72 20  *... *  trigger 
959a0 74 68 65 20 61 74 74 61 63 6b 20 70 6f 72 74 69  the attack porti
959b0 6f 6e 20 6f 66 20 74 68 65 20 6e 6f 74 65 0a 09  on of the note..
959c0 09 20 2a 20 20 0a 09 09 20 2a 20 20 40 70 61 72  . *  ... *  @par
959d0 61 6d 20 20 7b 54 69 6d 65 7d 20 5b 74 69 6d 65  am  {Time} [time
959e0 3d 6e 6f 77 5d 20 74 68 65 20 74 69 6d 65 20 74  =now] the time t
959f0 68 65 20 6e 6f 74 65 20 77 69 6c 6c 20 6f 63 63  he note will occ
95a00 75 72 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  ur... *  @param 
95a10 7b 4e 6f 72 6d 61 6c 52 61 6e 67 65 7d 20 5b 76  {NormalRange} [v
95a20 65 6c 6f 63 69 74 79 3d 31 5d 20 74 68 65 20 76  elocity=1] the v
95a30 65 6c 6f 63 69 74 79 20 6f 66 20 74 68 65 20 6e  elocity of the n
95a40 6f 74 65 0a 09 09 20 2a 20 20 40 70 72 69 76 61  ote... *  @priva
95a50 74 65 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e  te... *  @return
95a60 73 20 7b 54 6f 6e 65 2e 41 4d 53 79 6e 74 68 7d  s {Tone.AMSynth}
95a70 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20   this... */..   
95a80 20 54 6f 6e 65 2e 41 4d 53 79 6e 74 68 2e 70 72   Tone.AMSynth.pr
95a90 6f 74 6f 74 79 70 65 2e 5f 74 72 69 67 67 65 72  ototype._trigger
95aa0 45 6e 76 65 6c 6f 70 65 41 74 74 61 63 6b 20 3d  EnvelopeAttack =
95ab0 20 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65 2c   function (time,
95ac0 20 76 65 6c 6f 63 69 74 79 29 20 7b 0a 09 20 20   velocity) {..  
95ad0 20 20 20 20 20 20 2f 2f 74 68 65 20 70 6f 72 74        //the port
95ae0 20 67 6c 69 64 65 0a 09 20 20 20 20 20 20 20 20   glide..        
95af0 74 69 6d 65 20 3d 20 74 68 69 73 2e 74 6f 53 65  time = this.toSe
95b00 63 6f 6e 64 73 28 74 69 6d 65 29 3b 0a 09 20 20  conds(time);..  
95b10 20 20 20 20 20 20 2f 2f 74 68 65 20 65 6e 76 65        //the enve
95b20 6c 6f 70 65 73 0a 09 20 20 20 20 20 20 20 20 74  lopes..        t
95b30 68 69 73 2e 65 6e 76 65 6c 6f 70 65 2e 74 72 69  his.envelope.tri
95b40 67 67 65 72 41 74 74 61 63 6b 28 74 69 6d 65 2c  ggerAttack(time,
95b50 20 76 65 6c 6f 63 69 74 79 29 3b 0a 09 20 20 20   velocity);..   
95b60 20 20 20 20 20 74 68 69 73 2e 6d 6f 64 75 6c 61       this.modula
95b70 74 69 6f 6e 45 6e 76 65 6c 6f 70 65 2e 74 72 69  tionEnvelope.tri
95b80 67 67 65 72 41 74 74 61 63 6b 28 74 69 6d 65 2c  ggerAttack(time,
95b90 20 76 65 6c 6f 63 69 74 79 29 3b 0a 09 20 20 20   velocity);..   
95ba0 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
95bb0 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  ;..    };..    /
95bc0 2a 2a 0a 09 09 20 2a 20 20 74 72 69 67 67 65 72  **... *  trigger
95bd0 20 74 68 65 20 72 65 6c 65 61 73 65 20 70 6f 72   the release por
95be0 74 69 6f 6e 20 6f 66 20 74 68 65 20 6e 6f 74 65  tion of the note
95bf0 0a 09 09 20 2a 20 20 0a 09 09 20 2a 20 20 40 70  ... *  ... *  @p
95c00 61 72 61 6d 20 20 7b 54 69 6d 65 7d 20 5b 74 69  aram  {Time} [ti
95c10 6d 65 3d 6e 6f 77 5d 20 74 68 65 20 74 69 6d 65  me=now] the time
95c20 20 74 68 65 20 6e 6f 74 65 20 77 69 6c 6c 20 72   the note will r
95c30 65 6c 65 61 73 65 0a 09 09 20 2a 20 20 40 70 72  elease... *  @pr
95c40 69 76 61 74 65 0a 09 09 20 2a 20 20 40 72 65 74  ivate... *  @ret
95c50 75 72 6e 73 20 7b 54 6f 6e 65 2e 41 4d 53 79 6e  urns {Tone.AMSyn
95c60 74 68 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09  th} this... */..
95c70 20 20 20 20 54 6f 6e 65 2e 41 4d 53 79 6e 74 68      Tone.AMSynth
95c80 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 74 72 69 67  .prototype._trig
95c90 67 65 72 45 6e 76 65 6c 6f 70 65 52 65 6c 65 61  gerEnvelopeRelea
95ca0 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74  se = function (t
95cb0 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ime) {..        
95cc0 74 68 69 73 2e 65 6e 76 65 6c 6f 70 65 2e 74 72  this.envelope.tr
95cd0 69 67 67 65 72 52 65 6c 65 61 73 65 28 74 69 6d  iggerRelease(tim
95ce0 65 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  e);..        thi
95cf0 73 2e 6d 6f 64 75 6c 61 74 69 6f 6e 45 6e 76 65  s.modulationEnve
95d00 6c 6f 70 65 2e 74 72 69 67 67 65 72 52 65 6c 65  lope.triggerRele
95d10 61 73 65 28 74 69 6d 65 29 3b 0a 09 20 20 20 20  ase(time);..    
95d20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b      return this;
95d30 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
95d40 2a 0a 09 09 20 2a 20 20 63 6c 65 61 6e 20 75 70  *... *  clean up
95d50 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20  ... *  @returns 
95d60 7b 54 6f 6e 65 2e 41 4d 53 79 6e 74 68 7d 20 74  {Tone.AMSynth} t
95d70 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  his... */..    T
95d80 6f 6e 65 2e 41 4d 53 79 6e 74 68 2e 70 72 6f 74  one.AMSynth.prot
95d90 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20  otype.dispose = 
95da0 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
95db0 20 20 20 20 20 20 20 54 6f 6e 65 2e 4d 6f 6e 6f         Tone.Mono
95dc0 70 68 6f 6e 69 63 2e 70 72 6f 74 6f 74 79 70 65  phonic.prototype
95dd0 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68  .dispose.call(th
95de0 69 73 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  is);..        th
95df0 69 73 2e 5f 77 72 69 74 61 62 6c 65 28 5b 0a 09  is._writable([..
95e00 20 20 20 20 20 20 20 20 20 20 20 20 27 66 72 65              'fre
95e10 71 75 65 6e 63 79 27 2c 0a 09 20 20 20 20 20 20  quency',..      
95e20 20 20 20 20 20 20 27 68 61 72 6d 6f 6e 69 63 69        'harmonici
95e30 74 79 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20  ty',..          
95e40 20 20 27 6f 73 63 69 6c 6c 61 74 6f 72 27 2c 0a    'oscillator',.
95e50 09 20 20 20 20 20 20 20 20 20 20 20 20 27 65 6e  .            'en
95e60 76 65 6c 6f 70 65 27 2c 0a 09 20 20 20 20 20 20  velope',..      
95e70 20 20 20 20 20 20 27 6d 6f 64 75 6c 61 74 69 6f        'modulatio
95e80 6e 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  n',..           
95e90 20 27 6d 6f 64 75 6c 61 74 69 6f 6e 45 6e 76 65   'modulationEnve
95ea0 6c 6f 70 65 27 2c 0a 09 20 20 20 20 20 20 20 20  lope',..        
95eb0 20 20 20 20 27 64 65 74 75 6e 65 27 0a 09 20 20      'detune'..  
95ec0 20 20 20 20 20 20 5d 29 3b 0a 09 20 20 20 20 20        ]);..     
95ed0 20 20 20 74 68 69 73 2e 5f 63 61 72 72 69 65 72     this._carrier
95ee0 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20  .dispose();..   
95ef0 20 20 20 20 20 74 68 69 73 2e 5f 63 61 72 72 69       this._carri
95f00 65 72 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  er = null;..    
95f10 20 20 20 20 74 68 69 73 2e 5f 6d 6f 64 75 6c 61      this._modula
95f20 74 6f 72 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09  tor.dispose();..
95f30 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 6f          this._mo
95f40 64 75 6c 61 74 6f 72 20 3d 20 6e 75 6c 6c 3b 0a  dulator = null;.
95f50 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 66 72  .        this.fr
95f60 65 71 75 65 6e 63 79 2e 64 69 73 70 6f 73 65 28  equency.dispose(
95f70 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
95f80 2e 66 72 65 71 75 65 6e 63 79 20 3d 20 6e 75 6c  .frequency = nul
95f90 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  l;..        this
95fa0 2e 64 65 74 75 6e 65 2e 64 69 73 70 6f 73 65 28  .detune.dispose(
95fb0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
95fc0 2e 64 65 74 75 6e 65 20 3d 20 6e 75 6c 6c 3b 0a  .detune = null;.
95fd0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 68 61  .        this.ha
95fe0 72 6d 6f 6e 69 63 69 74 79 2e 64 69 73 70 6f 73  rmonicity.dispos
95ff0 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  e();..        th
96000 69 73 2e 68 61 72 6d 6f 6e 69 63 69 74 79 20 3d  is.harmonicity =
96010 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
96020 74 68 69 73 2e 5f 6d 6f 64 75 6c 61 74 69 6f 6e  this._modulation
96030 53 63 61 6c 65 2e 64 69 73 70 6f 73 65 28 29 3b  Scale.dispose();
96040 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
96050 6d 6f 64 75 6c 61 74 69 6f 6e 53 63 61 6c 65 20  modulationScale 
96060 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
96070 20 74 68 69 73 2e 5f 6d 6f 64 75 6c 61 74 69 6f   this._modulatio
96080 6e 4e 6f 64 65 2e 64 69 73 70 6f 73 65 28 29 3b  nNode.dispose();
96090 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
960a0 6d 6f 64 75 6c 61 74 69 6f 6e 4e 6f 64 65 20 3d  modulationNode =
960b0 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
960c0 74 68 69 73 2e 6f 73 63 69 6c 6c 61 74 6f 72 20  this.oscillator 
960d0 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
960e0 20 74 68 69 73 2e 65 6e 76 65 6c 6f 70 65 20 3d   this.envelope =
960f0 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
96100 74 68 69 73 2e 6d 6f 64 75 6c 61 74 69 6f 6e 45  this.modulationE
96110 6e 76 65 6c 6f 70 65 20 3d 20 6e 75 6c 6c 3b 0a  nvelope = null;.
96120 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 6d 6f  .        this.mo
96130 64 75 6c 61 74 69 6f 6e 20 3d 20 6e 75 6c 6c 3b  dulation = null;
96140 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
96150 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09   this;..    };..
96160 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e      return Tone.
96170 41 4d 53 79 6e 74 68 3b 0a 09 7d 29 3b 0a 09 4d  AMSynth;..});..M
96180 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28  odule(function (
96190 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09 20  Tone) {..    .. 
961a0 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c     /**... *  @cl
961b0 61 73 73 20 20 54 6f 6e 65 2e 4d 6f 6e 6f 53 79  ass  Tone.MonoSy
961c0 6e 74 68 20 69 73 20 63 6f 6d 70 6f 73 65 64 20  nth is composed 
961d0 6f 66 20 6f 6e 65 20 6f 73 63 69 6c 6c 61 74 6f  of one oscillato
961e0 72 2c 20 6f 6e 65 20 66 69 6c 74 65 72 2c 20 61  r, one filter, a
961f0 6e 64 20 74 77 6f 20 65 6e 76 65 6c 6f 70 65 73  nd two envelopes
96200 2e 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20  .... *          
96210 54 68 65 20 61 6d 70 6c 69 74 75 64 65 20 6f 66  The amplitude of
96220 20 74 68 65 20 54 6f 6e 65 2e 4f 73 63 69 6c 6c   the Tone.Oscill
96230 61 74 6f 72 20 61 6e 64 20 74 68 65 20 63 75 74  ator and the cut
96240 6f 66 66 20 66 72 65 71 75 65 6e 63 79 20 6f 66  off frequency of
96250 20 74 68 65 20 0a 09 09 20 2a 20 20 20 20 20 20   the ... *      
96260 20 20 20 20 54 6f 6e 65 2e 46 69 6c 74 65 72 20      Tone.Filter 
96270 61 72 65 20 63 6f 6e 74 72 6f 6c 6c 65 64 20 62  are controlled b
96280 79 20 54 6f 6e 65 2e 45 6e 76 65 6c 6f 70 65 73  y Tone.Envelopes
96290 2e 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  . ... *         
962a0 20 3c 69 6d 67 20 73 72 63 3d 22 68 74 74 70 73   <img src="https
962b0 3a 2f 2f 64 6f 63 73 2e 67 6f 6f 67 6c 65 2e 63  ://docs.google.c
962c0 6f 6d 2f 64 72 61 77 69 6e 67 73 2f 64 2f 31 67  om/drawings/d/1g
962d0 61 59 31 44 46 39 5f 48 7a 6b 6f 64 71 66 38 4a  aY1DF9_Hzkodqf8J
962e0 49 31 43 67 32 56 5a 66 77 53 45 6c 70 46 51 66  I1Cg2VZfwSElpFQf
962f0 49 39 34 49 51 77 61 64 33 38 2f 70 75 62 3f 77  I94IQwad38/pub?w
96300 3d 39 32 34 26 68 3d 32 34 30 22 3e 0a 09 09 20  =924&h=240">... 
96310 2a 20 20 20 20 20 20 20 20 20 20 0a 09 09 20 2a  *          ... *
96320 20 20 40 63 6f 6e 73 74 72 75 63 74 6f 72 0a 09    @constructor..
96330 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b 54  . *  @extends {T
96340 6f 6e 65 2e 4d 6f 6e 6f 70 68 6f 6e 69 63 7d 0a  one.Monophonic}.
96350 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 4f 62  .. *  @param {Ob
96360 6a 65 63 74 7d 20 5b 6f 70 74 69 6f 6e 73 5d 20  ject} [options] 
96370 74 68 65 20 6f 70 74 69 6f 6e 73 20 61 76 61 69  the options avai
96380 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20 73 79  lable for the sy
96390 6e 74 68 20 0a 09 09 20 2a 20 20 20 20 20 20 20  nth ... *       
963a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
963b0 20 20 20 73 65 65 20 64 65 66 61 75 6c 74 73 20     see defaults 
963c0 62 65 6c 6f 77 0a 09 09 20 2a 20 20 40 65 78 61  below... *  @exa
963d0 6d 70 6c 65 0a 09 09 20 2a 20 76 61 72 20 73 79  mple... * var sy
963e0 6e 74 68 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4d  nth = new Tone.M
963f0 6f 6e 6f 53 79 6e 74 68 28 7b 0a 09 09 20 2a 20  onoSynth({... * 
96400 09 22 6f 73 63 69 6c 6c 61 74 6f 72 22 20 3a 20  ."oscillator" : 
96410 7b 0a 09 09 20 2a 20 09 09 22 74 79 70 65 22 20  {... * .."type" 
96420 3a 20 22 73 71 75 61 72 65 22 0a 09 09 20 2a 20  : "square"... * 
96430 20 7d 2c 0a 09 09 20 2a 20 20 22 65 6e 76 65 6c   },... *  "envel
96440 6f 70 65 22 20 3a 20 7b 0a 09 09 20 2a 20 20 09  ope" : {... *  .
96450 22 61 74 74 61 63 6b 22 20 3a 20 30 2e 31 0a 09  "attack" : 0.1..
96460 09 20 2a 20 20 7d 0a 09 09 20 2a 20 7d 29 2e 74  . *  }... * }).t
96470 6f 4d 61 73 74 65 72 28 29 3b 0a 09 09 20 2a 20  oMaster();... * 
96480 73 79 6e 74 68 2e 74 72 69 67 67 65 72 41 74 74  synth.triggerAtt
96490 61 63 6b 52 65 6c 65 61 73 65 28 22 43 34 22 2c  ackRelease("C4",
964a0 20 22 38 6e 22 29 3b 0a 09 09 20 2a 2f 0a 09 20   "8n");... */.. 
964b0 20 20 20 54 6f 6e 65 2e 4d 6f 6e 6f 53 79 6e 74     Tone.MonoSynt
964c0 68 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 6f 70  h = function (op
964d0 74 69 6f 6e 73 29 20 7b 0a 09 20 20 20 20 20 20  tions) {..      
964e0 20 20 2f 2f 67 65 74 20 74 68 65 20 64 65 66 61    //get the defa
964f0 75 6c 74 73 0a 09 20 20 20 20 20 20 20 20 6f 70  ults..        op
96500 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e 64 65 66  tions = this.def
96510 61 75 6c 74 41 72 67 28 6f 70 74 69 6f 6e 73 2c  aultArg(options,
96520 20 54 6f 6e 65 2e 4d 6f 6e 6f 53 79 6e 74 68 2e   Tone.MonoSynth.
96530 64 65 66 61 75 6c 74 73 29 3b 0a 09 20 20 20 20  defaults);..    
96540 20 20 20 20 54 6f 6e 65 2e 4d 6f 6e 6f 70 68 6f      Tone.Monopho
96550 6e 69 63 2e 63 61 6c 6c 28 74 68 69 73 2c 20 6f  nic.call(this, o
96560 70 74 69 6f 6e 73 29 3b 0a 09 20 20 20 20 20 20  ptions);..      
96570 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65    /**.... *  The
96580 20 6f 73 63 69 6c 6c 61 74 6f 72 2e 0a 09 09 09   oscillator.....
96590 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e   *  @type {Tone.
965a0 4f 6d 6e 69 4f 73 63 69 6c 6c 61 74 6f 72 7d 0a  OmniOscillator}.
965b0 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
965c0 74 68 69 73 2e 6f 73 63 69 6c 6c 61 74 6f 72 20  this.oscillator 
965d0 3d 20 6e 65 77 20 54 6f 6e 65 2e 4f 6d 6e 69 4f  = new Tone.OmniO
965e0 73 63 69 6c 6c 61 74 6f 72 28 6f 70 74 69 6f 6e  scillator(option
965f0 73 2e 6f 73 63 69 6c 6c 61 74 6f 72 29 3b 0a 09  s.oscillator);..
96600 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
96610 2a 20 20 54 68 65 20 66 72 65 71 75 65 6e 63 79  *  The frequency
96620 20 63 6f 6e 74 72 6f 6c 2e 0a 09 09 09 20 2a 20   control..... * 
96630 20 40 74 79 70 65 20 7b 46 72 65 71 75 65 6e 63   @type {Frequenc
96640 79 7d 0a 09 09 09 20 2a 20 20 40 73 69 67 6e 61  y}.... *  @signa
96650 6c 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  l.... */..      
96660 20 20 74 68 69 73 2e 66 72 65 71 75 65 6e 63 79    this.frequency
96670 20 3d 20 74 68 69 73 2e 6f 73 63 69 6c 6c 61 74   = this.oscillat
96680 6f 72 2e 66 72 65 71 75 65 6e 63 79 3b 0a 09 20  or.frequency;.. 
96690 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
966a0 20 20 54 68 65 20 64 65 74 75 6e 65 20 63 6f 6e    The detune con
966b0 74 72 6f 6c 2e 0a 09 09 09 20 2a 20 20 40 74 79  trol..... *  @ty
966c0 70 65 20 7b 43 65 6e 74 73 7d 0a 09 09 09 20 2a  pe {Cents}.... *
966d0 20 20 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f    @signal.... */
966e0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 64  ..        this.d
966f0 65 74 75 6e 65 20 3d 20 74 68 69 73 2e 6f 73 63  etune = this.osc
96700 69 6c 6c 61 74 6f 72 2e 64 65 74 75 6e 65 3b 0a  illator.detune;.
96710 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
96720 20 2a 20 20 54 68 65 20 66 69 6c 74 65 72 2e 0a   *  The filter..
96730 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54 6f  ... *  @type {To
96740 6e 65 2e 46 69 6c 74 65 72 7d 0a 09 09 09 20 2a  ne.Filter}.... *
96750 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
96760 66 69 6c 74 65 72 20 3d 20 6e 65 77 20 54 6f 6e  filter = new Ton
96770 65 2e 46 69 6c 74 65 72 28 6f 70 74 69 6f 6e 73  e.Filter(options
96780 2e 66 69 6c 74 65 72 29 3b 0a 09 20 20 20 20 20  .filter);..     
96790 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68     /**.... *  Th
967a0 65 20 66 69 6c 74 65 72 20 65 6e 76 65 6c 6f 70  e filter envelop
967b0 65 2e 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  e..... *  @type 
967c0 7b 54 6f 6e 65 2e 46 72 65 71 75 65 6e 63 79 45  {Tone.FrequencyE
967d0 6e 76 65 6c 6f 70 65 7d 0a 09 09 09 20 2a 2f 0a  nvelope}.... */.
967e0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 66 69  .        this.fi
967f0 6c 74 65 72 45 6e 76 65 6c 6f 70 65 20 3d 20 6e  lterEnvelope = n
96800 65 77 20 54 6f 6e 65 2e 46 72 65 71 75 65 6e 63  ew Tone.Frequenc
96810 79 45 6e 76 65 6c 6f 70 65 28 6f 70 74 69 6f 6e  yEnvelope(option
96820 73 2e 66 69 6c 74 65 72 45 6e 76 65 6c 6f 70 65  s.filterEnvelope
96830 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
96840 09 09 09 20 2a 20 20 54 68 65 20 61 6d 70 6c 69  ... *  The ampli
96850 74 75 64 65 20 65 6e 76 65 6c 6f 70 65 2e 0a 09  tude envelope...
96860 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e  .. *  @type {Ton
96870 65 2e 41 6d 70 6c 69 74 75 64 65 45 6e 76 65 6c  e.AmplitudeEnvel
96880 6f 70 65 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20  ope}.... */..   
96890 20 20 20 20 20 74 68 69 73 2e 65 6e 76 65 6c 6f       this.envelo
968a0 70 65 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 41 6d  pe = new Tone.Am
968b0 70 6c 69 74 75 64 65 45 6e 76 65 6c 6f 70 65 28  plitudeEnvelope(
968c0 6f 70 74 69 6f 6e 73 2e 65 6e 76 65 6c 6f 70 65  options.envelope
968d0 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 63 6f  );..        //co
968e0 6e 6e 65 63 74 20 74 68 65 20 6f 73 63 69 6c 6c  nnect the oscill
968f0 61 74 6f 72 73 20 74 6f 20 74 68 65 20 6f 75 74  ators to the out
96900 70 75 74 0a 09 20 20 20 20 20 20 20 20 74 68 69  put..        thi
96910 73 2e 6f 73 63 69 6c 6c 61 74 6f 72 2e 63 68 61  s.oscillator.cha
96920 69 6e 28 74 68 69 73 2e 66 69 6c 74 65 72 2c 20  in(this.filter, 
96930 74 68 69 73 2e 65 6e 76 65 6c 6f 70 65 2c 20 74  this.envelope, t
96940 68 69 73 2e 6f 75 74 70 75 74 29 3b 0a 09 20 20  his.output);..  
96950 20 20 20 20 20 20 2f 2f 73 74 61 72 74 20 74 68        //start th
96960 65 20 6f 73 63 69 6c 6c 61 74 6f 72 73 0a 09 20  e oscillators.. 
96970 20 20 20 20 20 20 20 74 68 69 73 2e 6f 73 63 69         this.osci
96980 6c 6c 61 74 6f 72 2e 73 74 61 72 74 28 29 3b 0a  llator.start();.
96990 09 20 20 20 20 20 20 20 20 2f 2f 63 6f 6e 6e 65  .        //conne
969a0 63 74 20 74 68 65 20 66 69 6c 74 65 72 20 65 6e  ct the filter en
969b0 76 65 6c 6f 70 65 0a 09 20 20 20 20 20 20 20 20  velope..        
969c0 74 68 69 73 2e 66 69 6c 74 65 72 45 6e 76 65 6c  this.filterEnvel
969d0 6f 70 65 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73  ope.connect(this
969e0 2e 66 69 6c 74 65 72 2e 66 72 65 71 75 65 6e 63  .filter.frequenc
969f0 79 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  y);..        thi
96a00 73 2e 5f 72 65 61 64 4f 6e 6c 79 28 5b 0a 09 20  s._readOnly([.. 
96a10 20 20 20 20 20 20 20 20 20 20 20 27 6f 73 63 69             'osci
96a20 6c 6c 61 74 6f 72 27 2c 0a 09 20 20 20 20 20 20  llator',..      
96a30 20 20 20 20 20 20 27 66 72 65 71 75 65 6e 63 79        'frequency
96a40 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ',..            
96a50 27 64 65 74 75 6e 65 27 2c 0a 09 20 20 20 20 20  'detune',..     
96a60 20 20 20 20 20 20 20 27 66 69 6c 74 65 72 27 2c         'filter',
96a70 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 66  ..            'f
96a80 69 6c 74 65 72 45 6e 76 65 6c 6f 70 65 27 2c 0a  ilterEnvelope',.
96a90 09 20 20 20 20 20 20 20 20 20 20 20 20 27 65 6e  .            'en
96aa0 76 65 6c 6f 70 65 27 0a 09 20 20 20 20 20 20 20  velope'..       
96ab0 20 5d 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20   ]);..    };..  
96ac0 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f    Tone.extend(To
96ad0 6e 65 2e 4d 6f 6e 6f 53 79 6e 74 68 2c 20 54 6f  ne.MonoSynth, To
96ae0 6e 65 2e 4d 6f 6e 6f 70 68 6f 6e 69 63 29 3b 0a  ne.Monophonic);.
96af0 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40  .    /**... *  @
96b00 63 6f 6e 73 74 0a 09 09 20 2a 20 20 40 73 74 61  const... *  @sta
96b10 74 69 63 0a 09 09 20 2a 20 20 40 74 79 70 65 20  tic... *  @type 
96b20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a 09  {Object}... */..
96b30 20 20 20 20 54 6f 6e 65 2e 4d 6f 6e 6f 53 79 6e      Tone.MonoSyn
96b40 74 68 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b 0a  th.defaults = {.
96b50 09 20 20 20 20 20 20 20 20 27 66 72 65 71 75 65  .        'freque
96b60 6e 63 79 27 3a 20 27 43 34 27 2c 0a 09 20 20 20  ncy': 'C4',..   
96b70 20 20 20 20 20 27 64 65 74 75 6e 65 27 3a 20 30       'detune': 0
96b80 2c 0a 09 20 20 20 20 20 20 20 20 27 6f 73 63 69  ,..        'osci
96b90 6c 6c 61 74 6f 72 27 3a 20 7b 20 27 74 79 70 65  llator': { 'type
96ba0 27 3a 20 27 73 71 75 61 72 65 27 20 7d 2c 0a 09  ': 'square' },..
96bb0 20 20 20 20 20 20 20 20 27 66 69 6c 74 65 72 27          'filter'
96bc0 3a 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  : {..           
96bd0 20 27 51 27 3a 20 36 2c 0a 09 20 20 20 20 20 20   'Q': 6,..      
96be0 20 20 20 20 20 20 27 74 79 70 65 27 3a 20 27 6c        'type': 'l
96bf0 6f 77 70 61 73 73 27 2c 0a 09 20 20 20 20 20 20  owpass',..      
96c00 20 20 20 20 20 20 27 72 6f 6c 6c 6f 66 66 27 3a        'rolloff':
96c10 20 2d 32 34 0a 09 20 20 20 20 20 20 20 20 7d 2c   -24..        },
96c20 0a 09 20 20 20 20 20 20 20 20 27 65 6e 76 65 6c  ..        'envel
96c30 6f 70 65 27 3a 20 7b 0a 09 20 20 20 20 20 20 20  ope': {..       
96c40 20 20 20 20 20 27 61 74 74 61 63 6b 27 3a 20 30       'attack': 0
96c50 2e 30 30 35 2c 0a 09 20 20 20 20 20 20 20 20 20  .005,..         
96c60 20 20 20 27 64 65 63 61 79 27 3a 20 30 2e 31 2c     'decay': 0.1,
96c70 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 73  ..            's
96c80 75 73 74 61 69 6e 27 3a 20 30 2e 39 2c 0a 09 20  ustain': 0.9,.. 
96c90 20 20 20 20 20 20 20 20 20 20 20 27 72 65 6c 65             'rele
96ca0 61 73 65 27 3a 20 31 0a 09 20 20 20 20 20 20 20  ase': 1..       
96cb0 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 27 66 69   },..        'fi
96cc0 6c 74 65 72 45 6e 76 65 6c 6f 70 65 27 3a 20 7b  lterEnvelope': {
96cd0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 61  ..            'a
96ce0 74 74 61 63 6b 27 3a 20 30 2e 30 36 2c 0a 09 20  ttack': 0.06,.. 
96cf0 20 20 20 20 20 20 20 20 20 20 20 27 64 65 63 61             'deca
96d00 79 27 3a 20 30 2e 32 2c 0a 09 20 20 20 20 20 20  y': 0.2,..      
96d10 20 20 20 20 20 20 27 73 75 73 74 61 69 6e 27 3a        'sustain':
96d20 20 30 2e 35 2c 0a 09 20 20 20 20 20 20 20 20 20   0.5,..         
96d30 20 20 20 27 72 65 6c 65 61 73 65 27 3a 20 32 2c     'release': 2,
96d40 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 62  ..            'b
96d50 61 73 65 46 72 65 71 75 65 6e 63 79 27 3a 20 32  aseFrequency': 2
96d60 30 30 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  00,..           
96d70 20 27 6f 63 74 61 76 65 73 27 3a 20 37 2c 0a 09   'octaves': 7,..
96d80 20 20 20 20 20 20 20 20 20 20 20 20 27 65 78 70              'exp
96d90 6f 6e 65 6e 74 27 3a 20 32 0a 09 20 20 20 20 20  onent': 2..     
96da0 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a 09 20 20     }..    };..  
96db0 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 73 74 61 72    /**... *  star
96dc0 74 20 74 68 65 20 61 74 74 61 63 6b 20 70 6f 72  t the attack por
96dd0 74 69 6f 6e 20 6f 66 20 74 68 65 20 65 6e 76 65  tion of the enve
96de0 6c 6f 70 65 0a 09 09 20 2a 20 20 40 70 61 72 61  lope... *  @para
96df0 6d 20 7b 54 69 6d 65 7d 20 5b 74 69 6d 65 3d 6e  m {Time} [time=n
96e00 6f 77 5d 20 74 68 65 20 74 69 6d 65 20 74 68 65  ow] the time the
96e10 20 61 74 74 61 63 6b 20 73 68 6f 75 6c 64 20 73   attack should s
96e20 74 61 72 74 0a 09 09 20 2a 20 20 40 70 61 72 61  tart... *  @para
96e30 6d 20 7b 4e 6f 72 6d 61 6c 52 61 6e 67 65 7d 20  m {NormalRange} 
96e40 5b 76 65 6c 6f 63 69 74 79 3d 31 5d 20 74 68 65  [velocity=1] the
96e50 20 76 65 6c 6f 63 69 74 79 20 6f 66 20 74 68 65   velocity of the
96e60 20 6e 6f 74 65 20 28 30 2d 31 29 0a 09 09 20 2a   note (0-1)... *
96e70 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65    @returns {Tone
96e80 2e 4d 6f 6e 6f 53 79 6e 74 68 7d 20 74 68 69 73  .MonoSynth} this
96e90 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
96ea0 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
96eb0 4d 6f 6e 6f 53 79 6e 74 68 2e 70 72 6f 74 6f 74  MonoSynth.protot
96ec0 79 70 65 2e 5f 74 72 69 67 67 65 72 45 6e 76 65  ype._triggerEnve
96ed0 6c 6f 70 65 41 74 74 61 63 6b 20 3d 20 66 75 6e  lopeAttack = fun
96ee0 63 74 69 6f 6e 20 28 74 69 6d 65 2c 20 76 65 6c  ction (time, vel
96ef0 6f 63 69 74 79 29 20 7b 0a 09 20 20 20 20 20 20  ocity) {..      
96f00 20 20 2f 2f 74 68 65 20 65 6e 76 65 6c 6f 70 65    //the envelope
96f10 73 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  s..        this.
96f20 65 6e 76 65 6c 6f 70 65 2e 74 72 69 67 67 65 72  envelope.trigger
96f30 41 74 74 61 63 6b 28 74 69 6d 65 2c 20 76 65 6c  Attack(time, vel
96f40 6f 63 69 74 79 29 3b 0a 09 20 20 20 20 20 20 20  ocity);..       
96f50 20 74 68 69 73 2e 66 69 6c 74 65 72 45 6e 76 65   this.filterEnve
96f60 6c 6f 70 65 2e 74 72 69 67 67 65 72 41 74 74 61  lope.triggerAtta
96f70 63 6b 28 74 69 6d 65 29 3b 0a 09 20 20 20 20 20  ck(time);..     
96f80 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a     return this;.
96f90 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
96fa0 0a 09 09 20 2a 20 20 73 74 61 72 74 20 74 68 65  ... *  start the
96fb0 20 72 65 6c 65 61 73 65 20 70 6f 72 74 69 6f 6e   release portion
96fc0 20 6f 66 20 74 68 65 20 65 6e 76 65 6c 6f 70 65   of the envelope
96fd0 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 54  ... *  @param {T
96fe0 69 6d 65 7d 20 5b 74 69 6d 65 3d 6e 6f 77 5d 20  ime} [time=now] 
96ff0 74 68 65 20 74 69 6d 65 20 74 68 65 20 72 65 6c  the time the rel
97000 65 61 73 65 20 73 68 6f 75 6c 64 20 73 74 61 72  ease should star
97010 74 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73  t... *  @returns
97020 20 7b 54 6f 6e 65 2e 4d 6f 6e 6f 53 79 6e 74 68   {Tone.MonoSynth
97030 7d 20 74 68 69 73 0a 09 09 20 2a 20 20 40 70 72  } this... *  @pr
97040 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20  ivate... */..   
97050 20 54 6f 6e 65 2e 4d 6f 6e 6f 53 79 6e 74 68 2e   Tone.MonoSynth.
97060 70 72 6f 74 6f 74 79 70 65 2e 5f 74 72 69 67 67  prototype._trigg
97070 65 72 45 6e 76 65 6c 6f 70 65 52 65 6c 65 61 73  erEnvelopeReleas
97080 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74 69  e = function (ti
97090 6d 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 74  me) {..        t
970a0 68 69 73 2e 65 6e 76 65 6c 6f 70 65 2e 74 72 69  his.envelope.tri
970b0 67 67 65 72 52 65 6c 65 61 73 65 28 74 69 6d 65  ggerRelease(time
970c0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
970d0 2e 66 69 6c 74 65 72 45 6e 76 65 6c 6f 70 65 2e  .filterEnvelope.
970e0 74 72 69 67 67 65 72 52 65 6c 65 61 73 65 28 74  triggerRelease(t
970f0 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 72  ime);..        r
97100 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20  eturn this;..   
97110 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20   };..    /**... 
97120 2a 20 20 63 6c 65 61 6e 20 75 70 0a 09 09 20 2a  *  clean up... *
97130 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65    @returns {Tone
97140 2e 4d 6f 6e 6f 53 79 6e 74 68 7d 20 74 68 69 73  .MonoSynth} this
97150 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
97160 2e 4d 6f 6e 6f 53 79 6e 74 68 2e 70 72 6f 74 6f  .MonoSynth.proto
97170 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20 66  type.dispose = f
97180 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
97190 20 20 20 20 20 20 54 6f 6e 65 2e 4d 6f 6e 6f 70        Tone.Monop
971a0 68 6f 6e 69 63 2e 70 72 6f 74 6f 74 79 70 65 2e  honic.prototype.
971b0 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69  dispose.call(thi
971c0 73 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  s);..        thi
971d0 73 2e 5f 77 72 69 74 61 62 6c 65 28 5b 0a 09 20  s._writable([.. 
971e0 20 20 20 20 20 20 20 20 20 20 20 27 6f 73 63 69             'osci
971f0 6c 6c 61 74 6f 72 27 2c 0a 09 20 20 20 20 20 20  llator',..      
97200 20 20 20 20 20 20 27 66 72 65 71 75 65 6e 63 79        'frequency
97210 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ',..            
97220 27 64 65 74 75 6e 65 27 2c 0a 09 20 20 20 20 20  'detune',..     
97230 20 20 20 20 20 20 20 27 66 69 6c 74 65 72 27 2c         'filter',
97240 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 66  ..            'f
97250 69 6c 74 65 72 45 6e 76 65 6c 6f 70 65 27 2c 0a  ilterEnvelope',.
97260 09 20 20 20 20 20 20 20 20 20 20 20 20 27 65 6e  .            'en
97270 76 65 6c 6f 70 65 27 0a 09 20 20 20 20 20 20 20  velope'..       
97280 20 5d 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68   ]);..        th
97290 69 73 2e 6f 73 63 69 6c 6c 61 74 6f 72 2e 64 69  is.oscillator.di
972a0 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
972b0 20 20 74 68 69 73 2e 6f 73 63 69 6c 6c 61 74 6f    this.oscillato
972c0 72 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20  r = null;..     
972d0 20 20 20 74 68 69 73 2e 65 6e 76 65 6c 6f 70 65     this.envelope
972e0 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20  .dispose();..   
972f0 20 20 20 20 20 74 68 69 73 2e 65 6e 76 65 6c 6f       this.envelo
97300 70 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  pe = null;..    
97310 20 20 20 20 74 68 69 73 2e 66 69 6c 74 65 72 45      this.filterE
97320 6e 76 65 6c 6f 70 65 2e 64 69 73 70 6f 73 65 28  nvelope.dispose(
97330 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
97340 2e 66 69 6c 74 65 72 45 6e 76 65 6c 6f 70 65 20  .filterEnvelope 
97350 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
97360 20 74 68 69 73 2e 66 69 6c 74 65 72 2e 64 69 73   this.filter.dis
97370 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20  pose();..       
97380 20 74 68 69 73 2e 66 69 6c 74 65 72 20 3d 20 6e   this.filter = n
97390 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ull;..        th
973a0 69 73 2e 66 72 65 71 75 65 6e 63 79 20 3d 20 6e  is.frequency = n
973b0 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ull;..        th
973c0 69 73 2e 64 65 74 75 6e 65 20 3d 20 6e 75 6c 6c  is.detune = null
973d0 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
973e0 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a  n this;..    };.
973f0 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65  .    return Tone
97400 2e 4d 6f 6e 6f 53 79 6e 74 68 3b 0a 09 7d 29 3b  .MonoSynth;..});
97410 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f  ..Module(functio
97420 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20  n (Tone) {..    
97430 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
97440 40 63 6c 61 73 73 20 20 54 6f 6e 65 2e 44 75 6f  @class  Tone.Duo
97450 53 79 6e 74 68 20 69 73 20 61 20 6d 6f 6e 6f 70  Synth is a monop
97460 68 6f 6e 69 63 20 73 79 6e 74 68 20 63 6f 6d 70  honic synth comp
97470 6f 73 65 64 20 6f 66 20 74 77 6f 20 0a 09 09 20  osed of two ... 
97480 2a 20 20 20 20 20 20 20 20 20 20 4d 6f 6e 6f 53  *          MonoS
97490 79 6e 74 68 73 20 72 75 6e 20 69 6e 20 70 61 72  ynths run in par
974a0 61 6c 6c 65 6c 20 77 69 74 68 20 63 6f 6e 74 72  allel with contr
974b0 6f 6c 20 6f 76 65 72 20 74 68 65 20 0a 09 09 20  ol over the ... 
974c0 2a 20 20 20 20 20 20 20 20 20 20 66 72 65 71 75  *          frequ
974d0 65 6e 63 79 20 72 61 74 69 6f 20 62 65 74 77 65  ency ratio betwe
974e0 65 6e 20 74 68 65 20 74 77 6f 20 76 6f 69 63 65  en the two voice
974f0 73 20 61 6e 64 20 76 69 62 72 61 74 6f 20 65 66  s and vibrato ef
97500 66 65 63 74 2e 0a 09 09 20 2a 20 20 20 20 20 20  fect.... *      
97510 20 20 20 20 3c 69 6d 67 20 73 72 63 3d 22 68 74      <img src="ht
97520 74 70 73 3a 2f 2f 64 6f 63 73 2e 67 6f 6f 67 6c  tps://docs.googl
97530 65 2e 63 6f 6d 2f 64 72 61 77 69 6e 67 73 2f 64  e.com/drawings/d
97540 2f 31 62 4c 34 47 58 76 66 52 4d 4d 6c 71 53 37  /1bL4GXvfRMMlqS7
97550 58 79 42 6d 39 43 6a 4c 39 4b 4a 50 53 55 4b 62  XyBm9CjL9KJPSUKb
97560 63 64 42 4e 70 71 4f 6c 6b 46 4c 78 6b 2f 70 75  cdBNpqOlkFLxk/pu
97570 62 3f 77 3d 31 30 31 32 26 68 3d 34 34 38 22 3e  b?w=1012&h=448">
97580 0a 09 09 20 2a 0a 09 09 20 2a 20 20 40 63 6f 6e  ... *... *  @con
97590 73 74 72 75 63 74 6f 72 0a 09 09 20 2a 20 20 40  structor... *  @
975a0 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65 2e 4d 6f  extends {Tone.Mo
975b0 6e 6f 70 68 6f 6e 69 63 7d 0a 09 09 20 2a 20 20  nophonic}... *  
975c0 40 70 61 72 61 6d 20 7b 4f 62 6a 65 63 74 7d 20  @param {Object} 
975d0 5b 6f 70 74 69 6f 6e 73 5d 20 74 68 65 20 6f 70  [options] the op
975e0 74 69 6f 6e 73 20 61 76 61 69 6c 61 62 6c 65 20  tions available 
975f0 66 6f 72 20 74 68 65 20 73 79 6e 74 68 20 0a 09  for the synth ..
97600 09 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
97610 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 65               see
97620 20 64 65 66 61 75 6c 74 73 20 62 65 6c 6f 77 0a   defaults below.
97630 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09  .. *  @example..
97640 09 20 2a 20 76 61 72 20 64 75 6f 53 79 6e 74 68  . * var duoSynth
97650 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 44 75 6f 53   = new Tone.DuoS
97660 79 6e 74 68 28 29 2e 74 6f 4d 61 73 74 65 72 28  ynth().toMaster(
97670 29 3b 0a 09 09 20 2a 20 64 75 6f 53 79 6e 74 68  );... * duoSynth
97680 2e 74 72 69 67 67 65 72 41 74 74 61 63 6b 52 65  .triggerAttackRe
97690 6c 65 61 73 65 28 22 43 34 22 2c 20 22 32 6e 22  lease("C4", "2n"
976a0 29 3b 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  );... */..    To
976b0 6e 65 2e 44 75 6f 53 79 6e 74 68 20 3d 20 66 75  ne.DuoSynth = fu
976c0 6e 63 74 69 6f 6e 20 28 6f 70 74 69 6f 6e 73 29  nction (options)
976d0 20 7b 0a 09 20 20 20 20 20 20 20 20 6f 70 74 69   {..        opti
976e0 6f 6e 73 20 3d 20 74 68 69 73 2e 64 65 66 61 75  ons = this.defau
976f0 6c 74 41 72 67 28 6f 70 74 69 6f 6e 73 2c 20 54  ltArg(options, T
97700 6f 6e 65 2e 44 75 6f 53 79 6e 74 68 2e 64 65 66  one.DuoSynth.def
97710 61 75 6c 74 73 29 3b 0a 09 20 20 20 20 20 20 20  aults);..       
97720 20 54 6f 6e 65 2e 4d 6f 6e 6f 70 68 6f 6e 69 63   Tone.Monophonic
97730 2e 63 61 6c 6c 28 74 68 69 73 2c 20 6f 70 74 69  .call(this, opti
97740 6f 6e 73 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  ons);..        /
97750 2a 2a 0a 09 09 09 20 2a 20 20 74 68 65 20 66 69  **.... *  the fi
97760 72 73 74 20 76 6f 69 63 65 0a 09 09 09 20 2a 20  rst voice.... * 
97770 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 4d 6f 6e   @type {Tone.Mon
97780 6f 53 79 6e 74 68 7d 0a 09 09 09 20 2a 2f 0a 09  oSynth}.... */..
97790 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 6f 69          this.voi
977a0 63 65 30 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4d  ce0 = new Tone.M
977b0 6f 6e 6f 53 79 6e 74 68 28 6f 70 74 69 6f 6e 73  onoSynth(options
977c0 2e 76 6f 69 63 65 30 29 3b 0a 09 20 20 20 20 20  .voice0);..     
977d0 20 20 20 74 68 69 73 2e 76 6f 69 63 65 30 2e 76     this.voice0.v
977e0 6f 6c 75 6d 65 2e 76 61 6c 75 65 20 3d 20 2d 31  olume.value = -1
977f0 30 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  0;..        /**.
97800 09 09 09 20 2a 20 20 74 68 65 20 73 65 63 6f 6e  ... *  the secon
97810 64 20 76 6f 69 63 65 0a 09 09 09 20 2a 20 20 40  d voice.... *  @
97820 74 79 70 65 20 7b 54 6f 6e 65 2e 4d 6f 6e 6f 53  type {Tone.MonoS
97830 79 6e 74 68 7d 0a 09 09 09 20 2a 2f 0a 09 20 20  ynth}.... */..  
97840 20 20 20 20 20 20 74 68 69 73 2e 76 6f 69 63 65        this.voice
97850 31 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4d 6f 6e  1 = new Tone.Mon
97860 6f 53 79 6e 74 68 28 6f 70 74 69 6f 6e 73 2e 76  oSynth(options.v
97870 6f 69 63 65 31 29 3b 0a 09 20 20 20 20 20 20 20  oice1);..       
97880 20 74 68 69 73 2e 76 6f 69 63 65 31 2e 76 6f 6c   this.voice1.vol
97890 75 6d 65 2e 76 61 6c 75 65 20 3d 20 2d 31 30 3b  ume.value = -10;
978a0 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
978b0 09 20 2a 20 20 54 68 65 20 76 69 62 72 61 74 6f  . *  The vibrato
978c0 20 4c 46 4f 2e 20 0a 09 09 09 20 2a 20 20 40 74   LFO. .... *  @t
978d0 79 70 65 20 7b 54 6f 6e 65 2e 4c 46 4f 7d 0a 09  ype {Tone.LFO}..
978e0 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
978f0 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
97900 68 69 73 2e 5f 76 69 62 72 61 74 6f 20 3d 20 6e  his._vibrato = n
97910 65 77 20 54 6f 6e 65 2e 4c 46 4f 28 6f 70 74 69  ew Tone.LFO(opti
97920 6f 6e 73 2e 76 69 62 72 61 74 6f 52 61 74 65 2c  ons.vibratoRate,
97930 20 2d 35 30 2c 20 35 30 29 3b 0a 09 20 20 20 20   -50, 50);..    
97940 20 20 20 20 74 68 69 73 2e 5f 76 69 62 72 61 74      this._vibrat
97950 6f 2e 73 74 61 72 74 28 29 3b 0a 09 20 20 20 20  o.start();..    
97960 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 74 68      /**.... * th
97970 65 20 76 69 62 72 61 74 6f 20 66 72 65 71 75 65  e vibrato freque
97980 6e 63 79 0a 09 09 09 20 2a 20 40 74 79 70 65 20  ncy.... * @type 
97990 7b 46 72 65 71 75 65 6e 63 79 7d 0a 09 09 09 20  {Frequency}.... 
979a0 2a 20 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f  * @signal.... */
979b0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 76  ..        this.v
979c0 69 62 72 61 74 6f 52 61 74 65 20 3d 20 74 68 69  ibratoRate = thi
979d0 73 2e 5f 76 69 62 72 61 74 6f 2e 66 72 65 71 75  s._vibrato.frequ
979e0 65 6e 63 79 3b 0a 09 20 20 20 20 20 20 20 20 2f  ency;..        /
979f0 2a 2a 0a 09 09 09 20 2a 20 20 74 68 65 20 76 69  **.... *  the vi
97a00 62 72 61 74 6f 20 67 61 69 6e 0a 09 09 09 20 2a  brato gain.... *
97a10 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 47 61    @type {Tone.Ga
97a20 69 6e 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76  in}.... *  @priv
97a30 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  ate.... */..    
97a40 20 20 20 20 74 68 69 73 2e 5f 76 69 62 72 61 74      this._vibrat
97a50 6f 47 61 69 6e 20 3d 20 6e 65 77 20 54 6f 6e 65  oGain = new Tone
97a60 2e 47 61 69 6e 28 6f 70 74 69 6f 6e 73 2e 76 69  .Gain(options.vi
97a70 62 72 61 74 6f 41 6d 6f 75 6e 74 2c 20 54 6f 6e  bratoAmount, Ton
97a80 65 2e 54 79 70 65 2e 50 6f 73 69 74 69 76 65 29  e.Type.Positive)
97a90 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
97aa0 09 09 20 2a 20 54 68 65 20 61 6d 6f 75 6e 74 20  .. * The amount 
97ab0 6f 66 20 76 69 62 72 61 74 6f 0a 09 09 09 20 2a  of vibrato.... *
97ac0 20 40 74 79 70 65 20 7b 50 6f 73 69 74 69 76 65   @type {Positive
97ad0 7d 0a 09 09 09 20 2a 20 40 73 69 67 6e 61 6c 0a  }.... * @signal.
97ae0 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
97af0 74 68 69 73 2e 76 69 62 72 61 74 6f 41 6d 6f 75  this.vibratoAmou
97b00 6e 74 20 3d 20 74 68 69 73 2e 5f 76 69 62 72 61  nt = this._vibra
97b10 74 6f 47 61 69 6e 2e 67 61 69 6e 3b 0a 09 20 20  toGain.gain;..  
97b20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
97b30 20 74 68 65 20 66 72 65 71 75 65 6e 63 79 20 63   the frequency c
97b40 6f 6e 74 72 6f 6c 0a 09 09 09 20 2a 20 20 40 74  ontrol.... *  @t
97b50 79 70 65 20 7b 46 72 65 71 75 65 6e 63 79 7d 0a  ype {Frequency}.
97b60 09 09 09 20 2a 20 20 40 73 69 67 6e 61 6c 0a 09  ... *  @signal..
97b70 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
97b80 68 69 73 2e 66 72 65 71 75 65 6e 63 79 20 3d 20  his.frequency = 
97b90 6e 65 77 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 28  new Tone.Signal(
97ba0 34 34 30 2c 20 54 6f 6e 65 2e 54 79 70 65 2e 46  440, Tone.Type.F
97bb0 72 65 71 75 65 6e 63 79 29 3b 0a 09 20 20 20 20  requency);..    
97bc0 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 48      /**.... *  H
97bd0 61 72 6d 6f 6e 69 63 69 74 79 20 69 73 20 74 68  armonicity is th
97be0 65 20 72 61 74 69 6f 20 62 65 74 77 65 65 6e 20  e ratio between 
97bf0 74 68 65 20 74 77 6f 20 76 6f 69 63 65 73 2e 20  the two voices. 
97c00 41 20 68 61 72 6d 6f 6e 69 63 69 74 79 20 6f 66  A harmonicity of
97c10 0a 09 09 09 20 2a 20 20 31 20 69 73 20 6e 6f 20  .... *  1 is no 
97c20 63 68 61 6e 67 65 2e 20 48 61 72 6d 6f 6e 69 63  change. Harmonic
97c30 69 74 79 20 3d 20 32 20 6d 65 61 6e 73 20 61 20  ity = 2 means a 
97c40 63 68 61 6e 67 65 20 6f 66 20 61 6e 20 6f 63 74  change of an oct
97c50 61 76 65 2e 20 0a 09 09 09 20 2a 20 20 40 74 79  ave. .... *  @ty
97c60 70 65 20 7b 50 6f 73 69 74 69 76 65 7d 0a 09 09  pe {Positive}...
97c70 09 20 2a 20 20 40 73 69 67 6e 61 6c 0a 09 09 09  . *  @signal....
97c80 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 09   *  @example....
97c90 20 2a 20 2f 2f 70 69 74 63 68 20 76 6f 69 63 65   * //pitch voice
97ca0 31 20 61 6e 20 6f 63 74 61 76 65 20 62 65 6c 6f  1 an octave belo
97cb0 77 20 76 6f 69 63 65 30 0a 09 09 09 20 2a 20 64  w voice0.... * d
97cc0 75 6f 53 79 6e 74 68 2e 68 61 72 6d 6f 6e 69 63  uoSynth.harmonic
97cd0 69 74 79 2e 76 61 6c 75 65 20 3d 20 30 2e 35 3b  ity.value = 0.5;
97ce0 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
97cf0 20 74 68 69 73 2e 68 61 72 6d 6f 6e 69 63 69 74   this.harmonicit
97d00 79 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4d 75 6c  y = new Tone.Mul
97d10 74 69 70 6c 79 28 6f 70 74 69 6f 6e 73 2e 68 61  tiply(options.ha
97d20 72 6d 6f 6e 69 63 69 74 79 29 3b 0a 09 20 20 20  rmonicity);..   
97d30 20 20 20 20 20 74 68 69 73 2e 68 61 72 6d 6f 6e       this.harmon
97d40 69 63 69 74 79 2e 75 6e 69 74 73 20 3d 20 54 6f  icity.units = To
97d50 6e 65 2e 54 79 70 65 2e 50 6f 73 69 74 69 76 65  ne.Type.Positive
97d60 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 63 6f 6e  ;..        //con
97d70 74 72 6f 6c 20 74 68 65 20 74 77 6f 20 76 6f 69  trol the two voi
97d80 63 65 73 20 66 72 65 71 75 65 6e 63 79 0a 09 20  ces frequency.. 
97d90 20 20 20 20 20 20 20 74 68 69 73 2e 66 72 65 71         this.freq
97da0 75 65 6e 63 79 2e 63 6f 6e 6e 65 63 74 28 74 68  uency.connect(th
97db0 69 73 2e 76 6f 69 63 65 30 2e 66 72 65 71 75 65  is.voice0.freque
97dc0 6e 63 79 29 3b 0a 09 20 20 20 20 20 20 20 20 74  ncy);..        t
97dd0 68 69 73 2e 66 72 65 71 75 65 6e 63 79 2e 63 68  his.frequency.ch
97de0 61 69 6e 28 74 68 69 73 2e 68 61 72 6d 6f 6e 69  ain(this.harmoni
97df0 63 69 74 79 2c 20 74 68 69 73 2e 76 6f 69 63 65  city, this.voice
97e00 31 2e 66 72 65 71 75 65 6e 63 79 29 3b 0a 09 20  1.frequency);.. 
97e10 20 20 20 20 20 20 20 74 68 69 73 2e 5f 76 69 62         this._vib
97e20 72 61 74 6f 2e 63 6f 6e 6e 65 63 74 28 74 68 69  rato.connect(thi
97e30 73 2e 5f 76 69 62 72 61 74 6f 47 61 69 6e 29 3b  s._vibratoGain);
97e40 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
97e50 76 69 62 72 61 74 6f 47 61 69 6e 2e 66 61 6e 28  vibratoGain.fan(
97e60 74 68 69 73 2e 76 6f 69 63 65 30 2e 64 65 74 75  this.voice0.detu
97e70 6e 65 2c 20 74 68 69 73 2e 76 6f 69 63 65 31 2e  ne, this.voice1.
97e80 64 65 74 75 6e 65 29 3b 0a 09 20 20 20 20 20 20  detune);..      
97e90 20 20 74 68 69 73 2e 76 6f 69 63 65 30 2e 63 6f    this.voice0.co
97ea0 6e 6e 65 63 74 28 74 68 69 73 2e 6f 75 74 70 75  nnect(this.outpu
97eb0 74 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  t);..        thi
97ec0 73 2e 76 6f 69 63 65 31 2e 63 6f 6e 6e 65 63 74  s.voice1.connect
97ed0 28 74 68 69 73 2e 6f 75 74 70 75 74 29 3b 0a 09  (this.output);..
97ee0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 72 65          this._re
97ef0 61 64 4f 6e 6c 79 28 5b 0a 09 20 20 20 20 20 20  adOnly([..      
97f00 20 20 20 20 20 20 27 76 6f 69 63 65 30 27 2c 0a        'voice0',.
97f10 09 20 20 20 20 20 20 20 20 20 20 20 20 27 76 6f  .            'vo
97f20 69 63 65 31 27 2c 0a 09 20 20 20 20 20 20 20 20  ice1',..        
97f30 20 20 20 20 27 66 72 65 71 75 65 6e 63 79 27 2c      'frequency',
97f40 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 76  ..            'v
97f50 69 62 72 61 74 6f 41 6d 6f 75 6e 74 27 2c 0a 09  ibratoAmount',..
97f60 20 20 20 20 20 20 20 20 20 20 20 20 27 76 69 62              'vib
97f70 72 61 74 6f 52 61 74 65 27 0a 09 20 20 20 20 20  ratoRate'..     
97f80 20 20 20 5d 29 3b 0a 09 20 20 20 20 7d 3b 0a 09     ]);..    };..
97f90 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28      Tone.extend(
97fa0 54 6f 6e 65 2e 44 75 6f 53 79 6e 74 68 2c 20 54  Tone.DuoSynth, T
97fb0 6f 6e 65 2e 4d 6f 6e 6f 70 68 6f 6e 69 63 29 3b  one.Monophonic);
97fc0 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
97fd0 40 73 74 61 74 69 63 0a 09 09 20 2a 20 20 40 74  @static... *  @t
97fe0 79 70 65 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20  ype {Object}... 
97ff0 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 44 75 6f  */..    Tone.Duo
98000 53 79 6e 74 68 2e 64 65 66 61 75 6c 74 73 20 3d  Synth.defaults =
98010 20 7b 0a 09 20 20 20 20 20 20 20 20 27 76 69 62   {..        'vib
98020 72 61 74 6f 41 6d 6f 75 6e 74 27 3a 20 30 2e 35  ratoAmount': 0.5
98030 2c 0a 09 20 20 20 20 20 20 20 20 27 76 69 62 72  ,..        'vibr
98040 61 74 6f 52 61 74 65 27 3a 20 35 2c 0a 09 20 20  atoRate': 5,..  
98050 20 20 20 20 20 20 27 68 61 72 6d 6f 6e 69 63 69        'harmonici
98060 74 79 27 3a 20 31 2e 35 2c 0a 09 20 20 20 20 20  ty': 1.5,..     
98070 20 20 20 27 76 6f 69 63 65 30 27 3a 20 7b 0a 09     'voice0': {..
98080 20 20 20 20 20 20 20 20 20 20 20 20 27 76 6f 6c              'vol
98090 75 6d 65 27 3a 20 2d 31 30 2c 0a 09 20 20 20 20  ume': -10,..    
980a0 20 20 20 20 20 20 20 20 27 70 6f 72 74 61 6d 65          'portame
980b0 6e 74 6f 27 3a 20 30 2c 0a 09 20 20 20 20 20 20  nto': 0,..      
980c0 20 20 20 20 20 20 27 6f 73 63 69 6c 6c 61 74 6f        'oscillato
980d0 72 27 3a 20 7b 20 27 74 79 70 65 27 3a 20 27 73  r': { 'type': 's
980e0 69 6e 65 27 20 7d 2c 0a 09 20 20 20 20 20 20 20  ine' },..       
980f0 20 20 20 20 20 27 66 69 6c 74 65 72 45 6e 76 65       'filterEnve
98100 6c 6f 70 65 27 3a 20 7b 0a 09 20 20 20 20 20 20  lope': {..      
98110 20 20 20 20 20 20 20 20 20 20 27 61 74 74 61 63            'attac
98120 6b 27 3a 20 30 2e 30 31 2c 0a 09 20 20 20 20 20  k': 0.01,..     
98130 20 20 20 20 20 20 20 20 20 20 20 27 64 65 63 61             'deca
98140 79 27 3a 20 30 2c 0a 09 20 20 20 20 20 20 20 20  y': 0,..        
98150 20 20 20 20 20 20 20 20 27 73 75 73 74 61 69 6e          'sustain
98160 27 3a 20 31 2c 0a 09 20 20 20 20 20 20 20 20 20  ': 1,..         
98170 20 20 20 20 20 20 20 27 72 65 6c 65 61 73 65 27         'release'
98180 3a 20 30 2e 35 0a 09 20 20 20 20 20 20 20 20 20  : 0.5..         
98190 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 20     },..         
981a0 20 20 20 27 65 6e 76 65 6c 6f 70 65 27 3a 20 7b     'envelope': {
981b0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
981c0 20 20 27 61 74 74 61 63 6b 27 3a 20 30 2e 30 31    'attack': 0.01
981d0 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
981e0 20 20 20 27 64 65 63 61 79 27 3a 20 30 2c 0a 09     'decay': 0,..
981f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98200 27 73 75 73 74 61 69 6e 27 3a 20 31 2c 0a 09 20  'sustain': 1,.. 
98210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27                 '
98220 72 65 6c 65 61 73 65 27 3a 20 30 2e 35 0a 09 20  release': 0.5.. 
98230 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20             }..  
98240 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20        },..      
98250 20 20 27 76 6f 69 63 65 31 27 3a 20 7b 0a 09 20    'voice1': {.. 
98260 20 20 20 20 20 20 20 20 20 20 20 27 76 6f 6c 75             'volu
98270 6d 65 27 3a 20 2d 31 30 2c 0a 09 20 20 20 20 20  me': -10,..     
98280 20 20 20 20 20 20 20 27 70 6f 72 74 61 6d 65 6e         'portamen
98290 74 6f 27 3a 20 30 2c 0a 09 20 20 20 20 20 20 20  to': 0,..       
982a0 20 20 20 20 20 27 6f 73 63 69 6c 6c 61 74 6f 72       'oscillator
982b0 27 3a 20 7b 20 27 74 79 70 65 27 3a 20 27 73 69  ': { 'type': 'si
982c0 6e 65 27 20 7d 2c 0a 09 20 20 20 20 20 20 20 20  ne' },..        
982d0 20 20 20 20 27 66 69 6c 74 65 72 45 6e 76 65 6c      'filterEnvel
982e0 6f 70 65 27 3a 20 7b 0a 09 20 20 20 20 20 20 20  ope': {..       
982f0 20 20 20 20 20 20 20 20 20 27 61 74 74 61 63 6b           'attack
98300 27 3a 20 30 2e 30 31 2c 0a 09 20 20 20 20 20 20  ': 0.01,..      
98310 20 20 20 20 20 20 20 20 20 20 27 64 65 63 61 79            'decay
98320 27 3a 20 30 2c 0a 09 20 20 20 20 20 20 20 20 20  ': 0,..         
98330 20 20 20 20 20 20 20 27 73 75 73 74 61 69 6e 27         'sustain'
98340 3a 20 31 2c 0a 09 20 20 20 20 20 20 20 20 20 20  : 1,..          
98350 20 20 20 20 20 20 27 72 65 6c 65 61 73 65 27 3a        'release':
98360 20 30 2e 35 0a 09 20 20 20 20 20 20 20 20 20 20   0.5..          
98370 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 20 20    },..          
98380 20 20 27 65 6e 76 65 6c 6f 70 65 27 3a 20 7b 0a    'envelope': {.
98390 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
983a0 20 27 61 74 74 61 63 6b 27 3a 20 30 2e 30 31 2c   'attack': 0.01,
983b0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
983c0 20 20 27 64 65 63 61 79 27 3a 20 30 2c 0a 09 20    'decay': 0,.. 
983d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27                 '
983e0 73 75 73 74 61 69 6e 27 3a 20 31 2c 0a 09 20 20  sustain': 1,..  
983f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 72                'r
98400 65 6c 65 61 73 65 27 3a 20 30 2e 35 0a 09 20 20  elease': 0.5..  
98410 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20            }..   
98420 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a 09       }..    };..
98430 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 73 74      /**... *  st
98440 61 72 74 20 74 68 65 20 61 74 74 61 63 6b 20 70  art the attack p
98450 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 65 6e  ortion of the en
98460 76 65 6c 6f 70 65 73 0a 09 09 20 2a 20 20 0a 09  velopes... *  ..
98470 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 54 69 6d  . *  @param {Tim
98480 65 7d 20 5b 74 69 6d 65 3d 6e 6f 77 5d 20 74 68  e} [time=now] th
98490 65 20 74 69 6d 65 20 74 68 65 20 61 74 74 61 63  e time the attac
984a0 6b 20 73 68 6f 75 6c 64 20 73 74 61 72 74 0a 09  k should start..
984b0 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 4e 6f 72  . *  @param {Nor
984c0 6d 61 6c 52 61 6e 67 65 7d 20 5b 76 65 6c 6f 63  malRange} [veloc
984d0 69 74 79 3d 31 5d 20 74 68 65 20 76 65 6c 6f 63  ity=1] the veloc
984e0 69 74 79 20 6f 66 20 74 68 65 20 6e 6f 74 65 20  ity of the note 
984f0 28 30 2d 31 29 0a 09 09 20 2a 20 20 40 72 65 74  (0-1)... *  @ret
98500 75 72 6e 73 20 7b 54 6f 6e 65 2e 44 75 6f 53 79  urns {Tone.DuoSy
98510 6e 74 68 7d 20 74 68 69 73 0a 09 09 20 2a 20 20  nth} this... *  
98520 40 70 72 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09  @private... */..
98530 20 20 20 20 54 6f 6e 65 2e 44 75 6f 53 79 6e 74      Tone.DuoSynt
98540 68 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 74 72 69  h.prototype._tri
98550 67 67 65 72 45 6e 76 65 6c 6f 70 65 41 74 74 61  ggerEnvelopeAtta
98560 63 6b 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74  ck = function (t
98570 69 6d 65 2c 20 76 65 6c 6f 63 69 74 79 29 20 7b  ime, velocity) {
98580 0a 09 20 20 20 20 20 20 20 20 74 69 6d 65 20 3d  ..        time =
98590 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28   this.toSeconds(
985a0 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20  time);..        
985b0 74 68 69 73 2e 76 6f 69 63 65 30 2e 65 6e 76 65  this.voice0.enve
985c0 6c 6f 70 65 2e 74 72 69 67 67 65 72 41 74 74 61  lope.triggerAtta
985d0 63 6b 28 74 69 6d 65 2c 20 76 65 6c 6f 63 69 74  ck(time, velocit
985e0 79 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  y);..        thi
985f0 73 2e 76 6f 69 63 65 31 2e 65 6e 76 65 6c 6f 70  s.voice1.envelop
98600 65 2e 74 72 69 67 67 65 72 41 74 74 61 63 6b 28  e.triggerAttack(
98610 74 69 6d 65 2c 20 76 65 6c 6f 63 69 74 79 29 3b  time, velocity);
98620 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 76  ..        this.v
98630 6f 69 63 65 30 2e 66 69 6c 74 65 72 45 6e 76 65  oice0.filterEnve
98640 6c 6f 70 65 2e 74 72 69 67 67 65 72 41 74 74 61  lope.triggerAtta
98650 63 6b 28 74 69 6d 65 29 3b 0a 09 20 20 20 20 20  ck(time);..     
98660 20 20 20 74 68 69 73 2e 76 6f 69 63 65 31 2e 66     this.voice1.f
98670 69 6c 74 65 72 45 6e 76 65 6c 6f 70 65 2e 74 72  ilterEnvelope.tr
98680 69 67 67 65 72 41 74 74 61 63 6b 28 74 69 6d 65  iggerAttack(time
98690 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
986a0 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b  rn this;..    };
986b0 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
986c0 73 74 61 72 74 20 74 68 65 20 72 65 6c 65 61 73  start the releas
986d0 65 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65  e portion of the
986e0 20 65 6e 76 65 6c 6f 70 65 73 0a 09 09 20 2a 20   envelopes... * 
986f0 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b   ... *  @param {
98700 54 69 6d 65 7d 20 5b 74 69 6d 65 3d 6e 6f 77 5d  Time} [time=now]
98710 20 74 68 65 20 74 69 6d 65 20 74 68 65 20 72 65   the time the re
98720 6c 65 61 73 65 20 73 68 6f 75 6c 64 20 73 74 61  lease should sta
98730 72 74 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e  rt... *  @return
98740 73 20 7b 54 6f 6e 65 2e 44 75 6f 53 79 6e 74 68  s {Tone.DuoSynth
98750 7d 20 74 68 69 73 0a 09 09 20 2a 20 20 40 70 72  } this... *  @pr
98760 69 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20  ivate... */..   
98770 20 54 6f 6e 65 2e 44 75 6f 53 79 6e 74 68 2e 70   Tone.DuoSynth.p
98780 72 6f 74 6f 74 79 70 65 2e 5f 74 72 69 67 67 65  rototype._trigge
98790 72 45 6e 76 65 6c 6f 70 65 52 65 6c 65 61 73 65  rEnvelopeRelease
987a0 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d   = function (tim
987b0 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 74 68  e) {..        th
987c0 69 73 2e 76 6f 69 63 65 30 2e 74 72 69 67 67 65  is.voice0.trigge
987d0 72 52 65 6c 65 61 73 65 28 74 69 6d 65 29 3b 0a  rRelease(time);.
987e0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 6f  .        this.vo
987f0 69 63 65 31 2e 74 72 69 67 67 65 72 52 65 6c 65  ice1.triggerRele
98800 61 73 65 28 74 69 6d 65 29 3b 0a 09 20 20 20 20  ase(time);..    
98810 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b      return this;
98820 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
98830 2a 0a 09 09 20 2a 20 20 63 6c 65 61 6e 20 75 70  *... *  clean up
98840 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20  ... *  @returns 
98850 7b 54 6f 6e 65 2e 44 75 6f 53 79 6e 74 68 7d 20  {Tone.DuoSynth} 
98860 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20  this... */..    
98870 54 6f 6e 65 2e 44 75 6f 53 79 6e 74 68 2e 70 72  Tone.DuoSynth.pr
98880 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20  ototype.dispose 
98890 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  = function () {.
988a0 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 4d 6f  .        Tone.Mo
988b0 6e 6f 70 68 6f 6e 69 63 2e 70 72 6f 74 6f 74 79  nophonic.prototy
988c0 70 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28  pe.dispose.call(
988d0 74 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20 20  this);..        
988e0 74 68 69 73 2e 5f 77 72 69 74 61 62 6c 65 28 5b  this._writable([
988f0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 76  ..            'v
98900 6f 69 63 65 30 27 2c 0a 09 20 20 20 20 20 20 20  oice0',..       
98910 20 20 20 20 20 27 76 6f 69 63 65 31 27 2c 0a 09       'voice1',..
98920 20 20 20 20 20 20 20 20 20 20 20 20 27 66 72 65              'fre
98930 71 75 65 6e 63 79 27 2c 0a 09 20 20 20 20 20 20  quency',..      
98940 20 20 20 20 20 20 27 76 69 62 72 61 74 6f 41 6d        'vibratoAm
98950 6f 75 6e 74 27 2c 0a 09 20 20 20 20 20 20 20 20  ount',..        
98960 20 20 20 20 27 76 69 62 72 61 74 6f 52 61 74 65      'vibratoRate
98970 27 0a 09 20 20 20 20 20 20 20 20 5d 29 3b 0a 09  '..        ]);..
98980 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 6f 69          this.voi
98990 63 65 30 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09  ce0.dispose();..
989a0 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 6f 69          this.voi
989b0 63 65 30 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  ce0 = null;..   
989c0 20 20 20 20 20 74 68 69 73 2e 76 6f 69 63 65 31       this.voice1
989d0 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20  .dispose();..   
989e0 20 20 20 20 20 74 68 69 73 2e 76 6f 69 63 65 31       this.voice1
989f0 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
98a00 20 20 74 68 69 73 2e 66 72 65 71 75 65 6e 63 79    this.frequency
98a10 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20  .dispose();..   
98a20 20 20 20 20 20 74 68 69 73 2e 66 72 65 71 75 65       this.freque
98a30 6e 63 79 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  ncy = null;..   
98a40 20 20 20 20 20 74 68 69 73 2e 5f 76 69 62 72 61       this._vibra
98a50 74 6f 47 61 69 6e 2e 64 69 73 70 6f 73 65 28 29  toGain.dispose()
98a60 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
98a70 5f 76 69 62 72 61 74 6f 47 61 69 6e 20 3d 20 6e  _vibratoGain = n
98a80 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ull;..        th
98a90 69 73 2e 5f 76 69 62 72 61 74 6f 20 3d 20 6e 75  is._vibrato = nu
98aa0 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ll;..        thi
98ab0 73 2e 68 61 72 6d 6f 6e 69 63 69 74 79 2e 64 69  s.harmonicity.di
98ac0 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
98ad0 20 20 74 68 69 73 2e 68 61 72 6d 6f 6e 69 63 69    this.harmonici
98ae0 74 79 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  ty = null;..    
98af0 20 20 20 20 74 68 69 73 2e 76 69 62 72 61 74 6f      this.vibrato
98b00 41 6d 6f 75 6e 74 2e 64 69 73 70 6f 73 65 28 29  Amount.dispose()
98b10 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
98b20 76 69 62 72 61 74 6f 41 6d 6f 75 6e 74 20 3d 20  vibratoAmount = 
98b30 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74  null;..        t
98b40 68 69 73 2e 76 69 62 72 61 74 6f 52 61 74 65 20  his.vibratoRate 
98b50 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
98b60 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20   return this;.. 
98b70 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74 75 72     };..    retur
98b80 6e 20 54 6f 6e 65 2e 44 75 6f 53 79 6e 74 68 3b  n Tone.DuoSynth;
98b90 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75  ..});..Module(fu
98ba0 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a  nction (Tone) {.
98bb0 09 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09  .    ..    /**..
98bc0 09 20 2a 20 20 40 63 6c 61 73 73 20 20 46 4d 53  . *  @class  FMS
98bd0 79 6e 74 68 20 69 73 20 63 6f 6d 70 6f 73 65 64  ynth is composed
98be0 20 6f 66 20 74 77 6f 20 54 6f 6e 65 2e 53 79 6e   of two Tone.Syn
98bf0 74 68 73 20 77 68 65 72 65 20 6f 6e 65 20 54 6f  ths where one To
98c00 6e 65 2e 53 79 6e 74 68 20 6d 6f 64 75 6c 61 74  ne.Synth modulat
98c10 65 73 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  es... *         
98c20 20 74 68 65 20 66 72 65 71 75 65 6e 63 79 20 6f   the frequency o
98c30 66 20 61 20 73 65 63 6f 6e 64 20 54 6f 6e 65 2e  f a second Tone.
98c40 53 79 6e 74 68 2e 20 41 20 6c 6f 74 20 6f 66 20  Synth. A lot of 
98c50 73 70 65 63 74 72 61 6c 20 63 6f 6e 74 65 6e 74  spectral content
98c60 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20   ... *          
98c70 63 61 6e 20 62 65 20 65 78 70 6c 6f 72 65 64 20  can be explored 
98c80 75 73 69 6e 67 20 74 68 65 20 6d 6f 64 75 6c 61  using the modula
98c90 74 69 6f 6e 49 6e 64 65 78 20 70 61 72 61 6d 65  tionIndex parame
98ca0 74 65 72 2e 20 52 65 61 64 20 6d 6f 72 65 20 61  ter. Read more a
98cb0 62 6f 75 74 0a 09 09 20 2a 20 20 20 20 20 20 20  bout... *       
98cc0 20 20 20 66 72 65 71 75 65 6e 63 79 20 6d 6f 64     frequency mod
98cd0 75 6c 61 74 69 6f 6e 20 73 79 6e 74 68 65 73 69  ulation synthesi
98ce0 73 20 6f 6e 20 5b 53 6f 75 6e 64 4f 6e 53 6f 75  s on [SoundOnSou
98cf0 6e 64 5d 28 68 74 74 70 3a 2f 2f 77 77 77 2e 73  nd](http://www.s
98d00 6f 75 6e 64 6f 6e 73 6f 75 6e 64 2e 63 6f 6d 2f  oundonsound.com/
98d10 73 6f 73 2f 61 70 72 30 30 2f 61 72 74 69 63 6c  sos/apr00/articl
98d20 65 73 2f 73 79 6e 74 68 73 65 63 72 65 74 73 2e  es/synthsecrets.
98d30 68 74 6d 29 2e 0a 09 09 20 2a 20 20 20 20 20 20  htm).... *      
98d40 20 20 20 20 3c 69 6d 67 20 73 72 63 3d 22 68 74      <img src="ht
98d50 74 70 73 3a 2f 2f 64 6f 63 73 2e 67 6f 6f 67 6c  tps://docs.googl
98d60 65 2e 63 6f 6d 2f 64 72 61 77 69 6e 67 73 2f 64  e.com/drawings/d
98d70 2f 31 68 30 50 55 44 5a 58 50 67 69 34 49 6b 78  /1h0PUDZXPgi4Ikx
98d80 36 62 56 54 36 6f 6e 63 72 59 50 4c 6c 75 46 4b  6bVT6oncrYPLluFK
98d90 79 37 6c 6a 35 33 70 75 78 6a 2d 44 4d 2f 70 75  y7lj53puxj-DM/pu
98da0 62 3f 77 3d 39 30 32 26 68 3d 34 36 32 22 3e 0a  b?w=902&h=462">.
98db0 09 09 20 2a 0a 09 09 20 2a 20 20 40 63 6f 6e 73  .. *... *  @cons
98dc0 74 72 75 63 74 6f 72 0a 09 09 20 2a 20 20 40 65  tructor... *  @e
98dd0 78 74 65 6e 64 73 20 7b 54 6f 6e 65 2e 4d 6f 6e  xtends {Tone.Mon
98de0 6f 70 68 6f 6e 69 63 7d 0a 09 09 20 2a 20 20 40  ophonic}... *  @
98df0 70 61 72 61 6d 20 7b 4f 62 6a 65 63 74 7d 20 5b  param {Object} [
98e00 6f 70 74 69 6f 6e 73 5d 20 74 68 65 20 6f 70 74  options] the opt
98e10 69 6f 6e 73 20 61 76 61 69 6c 61 62 6c 65 20 66  ions available f
98e20 6f 72 20 74 68 65 20 73 79 6e 74 68 20 0a 09 09  or the synth ...
98e30 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
98e40 20 20 20 20 20 20 20 20 20 20 20 20 73 65 65 20              see 
98e50 64 65 66 61 75 6c 74 73 20 62 65 6c 6f 77 0a 09  defaults below..
98e60 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09  . *  @example...
98e70 20 2a 20 76 61 72 20 66 6d 53 79 6e 74 68 20 3d   * var fmSynth =
98e80 20 6e 65 77 20 54 6f 6e 65 2e 46 4d 53 79 6e 74   new Tone.FMSynt
98e90 68 28 29 2e 74 6f 4d 61 73 74 65 72 28 29 3b 0a  h().toMaster();.
98ea0 09 09 20 2a 20 66 6d 53 79 6e 74 68 2e 74 72 69  .. * fmSynth.tri
98eb0 67 67 65 72 41 74 74 61 63 6b 52 65 6c 65 61 73  ggerAttackReleas
98ec0 65 28 22 43 35 22 2c 20 22 34 6e 22 29 3b 0a 09  e("C5", "4n");..
98ed0 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 46  . */..    Tone.F
98ee0 4d 53 79 6e 74 68 20 3d 20 66 75 6e 63 74 69 6f  MSynth = functio
98ef0 6e 20 28 6f 70 74 69 6f 6e 73 29 20 7b 0a 09 20  n (options) {.. 
98f00 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 20 3d         options =
98f10 20 74 68 69 73 2e 64 65 66 61 75 6c 74 41 72 67   this.defaultArg
98f20 28 6f 70 74 69 6f 6e 73 2c 20 54 6f 6e 65 2e 46  (options, Tone.F
98f30 4d 53 79 6e 74 68 2e 64 65 66 61 75 6c 74 73 29  MSynth.defaults)
98f40 3b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e  ;..        Tone.
98f50 4d 6f 6e 6f 70 68 6f 6e 69 63 2e 63 61 6c 6c 28  Monophonic.call(
98f60 74 68 69 73 2c 20 6f 70 74 69 6f 6e 73 29 3b 0a  this, options);.
98f70 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
98f80 20 2a 20 20 54 68 65 20 63 61 72 72 69 65 72 20   *  The carrier 
98f90 76 6f 69 63 65 2e 0a 09 09 09 20 2a 20 20 40 74  voice..... *  @t
98fa0 79 70 65 20 7b 54 6f 6e 65 2e 53 79 6e 74 68 7d  ype {Tone.Synth}
98fb0 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  .... *  @private
98fc0 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
98fd0 20 74 68 69 73 2e 5f 63 61 72 72 69 65 72 20 3d   this._carrier =
98fe0 20 6e 65 77 20 54 6f 6e 65 2e 53 79 6e 74 68 28   new Tone.Synth(
98ff0 6f 70 74 69 6f 6e 73 2e 63 61 72 72 69 65 72 29  options.carrier)
99000 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
99010 5f 63 61 72 72 69 65 72 2e 76 6f 6c 75 6d 65 2e  _carrier.volume.
99020 76 61 6c 75 65 20 3d 20 2d 31 30 3b 0a 09 20 20  value = -10;..  
99030 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
99040 20 54 68 65 20 63 61 72 72 69 65 72 27 73 20 6f   The carrier's o
99050 73 63 69 6c 6c 61 74 6f 72 0a 09 09 09 20 2a 20  scillator.... * 
99060 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 4f 73 63   @type {Tone.Osc
99070 69 6c 6c 61 74 6f 72 7d 0a 09 09 09 20 2a 2f 0a  illator}.... */.
99080 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f 73  .        this.os
99090 63 69 6c 6c 61 74 6f 72 20 3d 20 74 68 69 73 2e  cillator = this.
990a0 5f 63 61 72 72 69 65 72 2e 6f 73 63 69 6c 6c 61  _carrier.oscilla
990b0 74 6f 72 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a  tor;..        /*
990c0 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 63 61 72  *.... *  The car
990d0 72 69 65 72 27 73 20 65 6e 76 65 6c 6f 70 65 0a  rier's envelope.
990e0 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54 6f  ... *  @type {To
990f0 6e 65 2e 4f 73 63 69 6c 6c 61 74 6f 72 7d 0a 09  ne.Oscillator}..
99100 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
99110 68 69 73 2e 65 6e 76 65 6c 6f 70 65 20 3d 20 74  his.envelope = t
99120 68 69 73 2e 5f 63 61 72 72 69 65 72 2e 65 6e 76  his._carrier.env
99130 65 6c 6f 70 65 2e 73 65 74 28 6f 70 74 69 6f 6e  elope.set(option
99140 73 2e 65 6e 76 65 6c 6f 70 65 29 3b 0a 09 20 20  s.envelope);..  
99150 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
99160 20 54 68 65 20 6d 6f 64 75 6c 61 74 6f 72 20 76   The modulator v
99170 6f 69 63 65 2e 0a 09 09 09 20 2a 20 20 40 74 79  oice..... *  @ty
99180 70 65 20 7b 54 6f 6e 65 2e 53 79 6e 74 68 7d 0a  pe {Tone.Synth}.
99190 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
991a0 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
991b0 74 68 69 73 2e 5f 6d 6f 64 75 6c 61 74 6f 72 20  this._modulator 
991c0 3d 20 6e 65 77 20 54 6f 6e 65 2e 53 79 6e 74 68  = new Tone.Synth
991d0 28 6f 70 74 69 6f 6e 73 2e 6d 6f 64 75 6c 61 74  (options.modulat
991e0 6f 72 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  or);..        th
991f0 69 73 2e 5f 6d 6f 64 75 6c 61 74 6f 72 2e 76 6f  is._modulator.vo
99200 6c 75 6d 65 2e 76 61 6c 75 65 20 3d 20 2d 31 30  lume.value = -10
99210 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
99220 09 09 20 2a 20 20 54 68 65 20 6d 6f 64 75 6c 61  .. *  The modula
99230 74 6f 72 27 73 20 6f 73 63 69 6c 6c 61 74 6f 72  tor's oscillator
99240 20 77 68 69 63 68 20 69 73 20 61 70 70 6c 69 65   which is applie
99250 64 0a 09 09 09 20 2a 20 20 74 6f 20 74 68 65 20  d.... *  to the 
99260 61 6d 70 6c 69 74 75 64 65 20 6f 66 20 74 68 65  amplitude of the
99270 20 6f 73 63 69 6c 6c 61 74 6f 72 0a 09 09 09 20   oscillator.... 
99280 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 4f  *  @type {Tone.O
99290 73 63 69 6c 6c 61 74 6f 72 7d 0a 09 09 09 20 2a  scillator}.... *
992a0 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
992b0 6d 6f 64 75 6c 61 74 69 6f 6e 20 3d 20 74 68 69  modulation = thi
992c0 73 2e 5f 6d 6f 64 75 6c 61 74 6f 72 2e 6f 73 63  s._modulator.osc
992d0 69 6c 6c 61 74 6f 72 2e 73 65 74 28 6f 70 74 69  illator.set(opti
992e0 6f 6e 73 2e 6d 6f 64 75 6c 61 74 69 6f 6e 29 3b  ons.modulation);
992f0 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
99300 09 20 2a 20 20 54 68 65 20 6d 6f 64 75 6c 61 74  . *  The modulat
99310 6f 72 27 73 20 65 6e 76 65 6c 6f 70 65 0a 09 09  or's envelope...
99320 09 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65  . *  @type {Tone
99330 2e 4f 73 63 69 6c 6c 61 74 6f 72 7d 0a 09 09 09  .Oscillator}....
99340 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
99350 73 2e 6d 6f 64 75 6c 61 74 69 6f 6e 45 6e 76 65  s.modulationEnve
99360 6c 6f 70 65 20 3d 20 74 68 69 73 2e 5f 6d 6f 64  lope = this._mod
99370 75 6c 61 74 6f 72 2e 65 6e 76 65 6c 6f 70 65 2e  ulator.envelope.
99380 73 65 74 28 6f 70 74 69 6f 6e 73 2e 6d 6f 64 75  set(options.modu
99390 6c 61 74 69 6f 6e 45 6e 76 65 6c 6f 70 65 29 3b  lationEnvelope);
993a0 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
993b0 09 20 2a 20 20 54 68 65 20 66 72 65 71 75 65 6e  . *  The frequen
993c0 63 79 20 63 6f 6e 74 72 6f 6c 2e 0a 09 09 09 20  cy control..... 
993d0 2a 20 20 40 74 79 70 65 20 7b 46 72 65 71 75 65  *  @type {Freque
993e0 6e 63 79 7d 0a 09 09 09 20 2a 20 20 40 73 69 67  ncy}.... *  @sig
993f0 6e 61 6c 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  nal.... */..    
99400 20 20 20 20 74 68 69 73 2e 66 72 65 71 75 65 6e      this.frequen
99410 63 79 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53 69  cy = new Tone.Si
99420 67 6e 61 6c 28 34 34 30 2c 20 54 6f 6e 65 2e 54  gnal(440, Tone.T
99430 79 70 65 2e 46 72 65 71 75 65 6e 63 79 29 3b 0a  ype.Frequency);.
99440 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
99450 20 2a 20 20 54 68 65 20 64 65 74 75 6e 65 20 69   *  The detune i
99460 6e 20 63 65 6e 74 73 0a 09 09 09 20 2a 20 20 40  n cents.... *  @
99470 74 79 70 65 20 7b 43 65 6e 74 73 7d 0a 09 09 09  type {Cents}....
99480 20 2a 20 20 40 73 69 67 6e 61 6c 0a 09 09 09 20   *  @signal.... 
99490 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
994a0 2e 64 65 74 75 6e 65 20 3d 20 6e 65 77 20 54 6f  .detune = new To
994b0 6e 65 2e 53 69 67 6e 61 6c 28 6f 70 74 69 6f 6e  ne.Signal(option
994c0 73 2e 64 65 74 75 6e 65 2c 20 54 6f 6e 65 2e 54  s.detune, Tone.T
994d0 79 70 65 2e 43 65 6e 74 73 29 3b 0a 09 20 20 20  ype.Cents);..   
994e0 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
994f0 48 61 72 6d 6f 6e 69 63 69 74 79 20 69 73 20 74  Harmonicity is t
99500 68 65 20 72 61 74 69 6f 20 62 65 74 77 65 65 6e  he ratio between
99510 20 74 68 65 20 74 77 6f 20 76 6f 69 63 65 73 2e   the two voices.
99520 20 41 20 68 61 72 6d 6f 6e 69 63 69 74 79 20 6f   A harmonicity o
99530 66 0a 09 09 09 20 2a 20 20 31 20 69 73 20 6e 6f  f.... *  1 is no
99540 20 63 68 61 6e 67 65 2e 20 48 61 72 6d 6f 6e 69   change. Harmoni
99550 63 69 74 79 20 3d 20 32 20 6d 65 61 6e 73 20 61  city = 2 means a
99560 20 63 68 61 6e 67 65 20 6f 66 20 61 6e 20 6f 63   change of an oc
99570 74 61 76 65 2e 20 0a 09 09 09 20 2a 20 20 40 74  tave. .... *  @t
99580 79 70 65 20 7b 50 6f 73 69 74 69 76 65 7d 0a 09  ype {Positive}..
99590 09 09 20 2a 20 20 40 73 69 67 6e 61 6c 0a 09 09  .. *  @signal...
995a0 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09  . *  @example...
995b0 09 20 2a 20 2f 2f 70 69 74 63 68 20 76 6f 69 63  . * //pitch voic
995c0 65 31 20 61 6e 20 6f 63 74 61 76 65 20 62 65 6c  e1 an octave bel
995d0 6f 77 20 76 6f 69 63 65 30 0a 09 09 09 20 2a 20  ow voice0.... * 
995e0 73 79 6e 74 68 2e 68 61 72 6d 6f 6e 69 63 69 74  synth.harmonicit
995f0 79 2e 76 61 6c 75 65 20 3d 20 30 2e 35 3b 0a 09  y.value = 0.5;..
99600 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
99610 68 69 73 2e 68 61 72 6d 6f 6e 69 63 69 74 79 20  his.harmonicity 
99620 3d 20 6e 65 77 20 54 6f 6e 65 2e 4d 75 6c 74 69  = new Tone.Multi
99630 70 6c 79 28 6f 70 74 69 6f 6e 73 2e 68 61 72 6d  ply(options.harm
99640 6f 6e 69 63 69 74 79 29 3b 0a 09 20 20 20 20 20  onicity);..     
99650 20 20 20 74 68 69 73 2e 68 61 72 6d 6f 6e 69 63     this.harmonic
99660 69 74 79 2e 75 6e 69 74 73 20 3d 20 54 6f 6e 65  ity.units = Tone
99670 2e 54 79 70 65 2e 50 6f 73 69 74 69 76 65 3b 0a  .Type.Positive;.
99680 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
99690 20 2a 20 20 54 68 65 20 6d 6f 64 75 6c 61 74 69   *  The modulati
996a0 6f 6e 20 69 6e 64 65 78 20 77 68 69 63 68 20 65  on index which e
996b0 73 73 65 6e 74 69 61 6c 6c 79 20 74 68 65 20 64  ssentially the d
996c0 65 70 74 68 20 6f 72 20 61 6d 6f 75 6e 74 20 6f  epth or amount o
996d0 66 20 74 68 65 20 6d 6f 64 75 6c 61 74 69 6f 6e  f the modulation
996e0 2e 20 49 74 20 69 73 20 74 68 65 20 0a 09 09 09  . It is the ....
996f0 20 2a 20 20 72 61 74 69 6f 20 6f 66 20 74 68 65   *  ratio of the
99700 20 66 72 65 71 75 65 6e 63 79 20 6f 66 20 74 68   frequency of th
99710 65 20 6d 6f 64 75 6c 61 74 69 6e 67 20 73 69 67  e modulating sig
99720 6e 61 6c 20 28 6d 66 29 20 74 6f 20 74 68 65 20  nal (mf) to the 
99730 61 6d 70 6c 69 74 75 64 65 20 6f 66 20 74 68 65  amplitude of the
99740 20 0a 09 09 09 20 2a 20 20 6d 6f 64 75 6c 61 74   .... *  modulat
99750 69 6e 67 20 73 69 67 6e 61 6c 20 28 6d 61 29 20  ing signal (ma) 
99760 2d 2d 20 61 73 20 69 6e 20 6d 61 2f 6d 66 2e 20  -- as in ma/mf. 
99770 0a 09 09 09 20 2a 09 40 74 79 70 65 20 7b 50 6f  .... *.@type {Po
99780 73 69 74 69 76 65 7d 0a 09 09 09 20 2a 09 40 73  sitive}.... *.@s
99790 69 67 6e 61 6c 0a 09 09 09 20 2a 2f 0a 09 20 20  ignal.... */..  
997a0 20 20 20 20 20 20 74 68 69 73 2e 6d 6f 64 75 6c        this.modul
997b0 61 74 69 6f 6e 49 6e 64 65 78 20 3d 20 6e 65 77  ationIndex = new
997c0 20 54 6f 6e 65 2e 4d 75 6c 74 69 70 6c 79 28 6f   Tone.Multiply(o
997d0 70 74 69 6f 6e 73 2e 6d 6f 64 75 6c 61 74 69 6f  ptions.modulatio
997e0 6e 49 6e 64 65 78 29 3b 0a 09 20 20 20 20 20 20  nIndex);..      
997f0 20 20 74 68 69 73 2e 6d 6f 64 75 6c 61 74 69 6f    this.modulatio
99800 6e 49 6e 64 65 78 2e 75 6e 69 74 73 20 3d 20 54  nIndex.units = T
99810 6f 6e 65 2e 54 79 70 65 2e 50 6f 73 69 74 69 76  one.Type.Positiv
99820 65 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  e;..        /**.
99830 09 09 09 20 2a 20 20 74 68 65 20 6e 6f 64 65 20  ... *  the node 
99840 77 68 65 72 65 20 74 68 65 20 6d 6f 64 75 6c 61  where the modula
99850 74 69 6f 6e 20 68 61 70 70 65 6e 73 0a 09 09 09  tion happens....
99860 20 2a 20 20 40 74 79 70 65 20 7b 47 61 69 6e 4e   *  @type {GainN
99870 6f 64 65 7d 0a 09 09 09 20 2a 20 20 40 70 72 69  ode}.... *  @pri
99880 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20  vate.... */..   
99890 20 20 20 20 20 74 68 69 73 2e 5f 6d 6f 64 75 6c       this._modul
998a0 61 74 69 6f 6e 4e 6f 64 65 20 3d 20 6e 65 77 20  ationNode = new 
998b0 54 6f 6e 65 2e 47 61 69 6e 28 30 29 3b 0a 09 20  Tone.Gain(0);.. 
998c0 20 20 20 20 20 20 20 2f 2f 63 6f 6e 74 72 6f 6c         //control
998d0 20 74 68 65 20 74 77 6f 20 76 6f 69 63 65 73 20   the two voices 
998e0 66 72 65 71 75 65 6e 63 79 0a 09 20 20 20 20 20  frequency..     
998f0 20 20 20 74 68 69 73 2e 66 72 65 71 75 65 6e 63     this.frequenc
99900 79 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e 5f  y.connect(this._
99910 63 61 72 72 69 65 72 2e 66 72 65 71 75 65 6e 63  carrier.frequenc
99920 79 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  y);..        thi
99930 73 2e 66 72 65 71 75 65 6e 63 79 2e 63 68 61 69  s.frequency.chai
99940 6e 28 74 68 69 73 2e 68 61 72 6d 6f 6e 69 63 69  n(this.harmonici
99950 74 79 2c 20 74 68 69 73 2e 5f 6d 6f 64 75 6c 61  ty, this._modula
99960 74 6f 72 2e 66 72 65 71 75 65 6e 63 79 29 3b 0a  tor.frequency);.
99970 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 66 72  .        this.fr
99980 65 71 75 65 6e 63 79 2e 63 68 61 69 6e 28 74 68  equency.chain(th
99990 69 73 2e 6d 6f 64 75 6c 61 74 69 6f 6e 49 6e 64  is.modulationInd
999a0 65 78 2c 20 74 68 69 73 2e 5f 6d 6f 64 75 6c 61  ex, this._modula
999b0 74 69 6f 6e 4e 6f 64 65 29 3b 0a 09 20 20 20 20  tionNode);..    
999c0 20 20 20 20 74 68 69 73 2e 64 65 74 75 6e 65 2e      this.detune.
999d0 66 61 6e 28 74 68 69 73 2e 5f 63 61 72 72 69 65  fan(this._carrie
999e0 72 2e 64 65 74 75 6e 65 2c 20 74 68 69 73 2e 5f  r.detune, this._
999f0 6d 6f 64 75 6c 61 74 6f 72 2e 64 65 74 75 6e 65  modulator.detune
99a00 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
99a10 2e 5f 6d 6f 64 75 6c 61 74 6f 72 2e 63 6f 6e 6e  ._modulator.conn
99a20 65 63 74 28 74 68 69 73 2e 5f 6d 6f 64 75 6c 61  ect(this._modula
99a30 74 69 6f 6e 4e 6f 64 65 2e 67 61 69 6e 29 3b 0a  tionNode.gain);.
99a40 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d  .        this._m
99a50 6f 64 75 6c 61 74 69 6f 6e 4e 6f 64 65 2e 63 6f  odulationNode.co
99a60 6e 6e 65 63 74 28 74 68 69 73 2e 5f 63 61 72 72  nnect(this._carr
99a70 69 65 72 2e 66 72 65 71 75 65 6e 63 79 29 3b 0a  ier.frequency);.
99a80 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 63  .        this._c
99a90 61 72 72 69 65 72 2e 63 6f 6e 6e 65 63 74 28 74  arrier.connect(t
99aa0 68 69 73 2e 6f 75 74 70 75 74 29 3b 0a 09 20 20  his.output);..  
99ab0 20 20 20 20 20 20 74 68 69 73 2e 5f 72 65 61 64        this._read
99ac0 4f 6e 6c 79 28 5b 0a 09 20 20 20 20 20 20 20 20  Only([..        
99ad0 20 20 20 20 27 66 72 65 71 75 65 6e 63 79 27 2c      'frequency',
99ae0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 68  ..            'h
99af0 61 72 6d 6f 6e 69 63 69 74 79 27 2c 0a 09 20 20  armonicity',..  
99b00 20 20 20 20 20 20 20 20 20 20 27 6d 6f 64 75 6c            'modul
99b10 61 74 69 6f 6e 49 6e 64 65 78 27 2c 0a 09 20 20  ationIndex',..  
99b20 20 20 20 20 20 20 20 20 20 20 27 6f 73 63 69 6c            'oscil
99b30 6c 61 74 6f 72 27 2c 0a 09 20 20 20 20 20 20 20  lator',..       
99b40 20 20 20 20 20 27 65 6e 76 65 6c 6f 70 65 27 2c       'envelope',
99b50 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 6d  ..            'm
99b60 6f 64 75 6c 61 74 69 6f 6e 27 2c 0a 09 20 20 20  odulation',..   
99b70 20 20 20 20 20 20 20 20 20 27 6d 6f 64 75 6c 61           'modula
99b80 74 69 6f 6e 45 6e 76 65 6c 6f 70 65 27 2c 0a 09  tionEnvelope',..
99b90 20 20 20 20 20 20 20 20 20 20 20 20 27 64 65 74              'det
99ba0 75 6e 65 27 0a 09 20 20 20 20 20 20 20 20 5d 29  une'..        ])
99bb0 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54  ;..    };..    T
99bc0 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e  one.extend(Tone.
99bd0 46 4d 53 79 6e 74 68 2c 20 54 6f 6e 65 2e 4d 6f  FMSynth, Tone.Mo
99be0 6e 6f 70 68 6f 6e 69 63 29 3b 0a 09 20 20 20 20  nophonic);..    
99bf0 2f 2a 2a 0a 09 09 20 2a 20 20 40 73 74 61 74 69  /**... *  @stati
99c00 63 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4f  c... *  @type {O
99c10 62 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a 09 20 20  bject}... */..  
99c20 20 20 54 6f 6e 65 2e 46 4d 53 79 6e 74 68 2e 64    Tone.FMSynth.d
99c30 65 66 61 75 6c 74 73 20 3d 20 7b 0a 09 20 20 20  efaults = {..   
99c40 20 20 20 20 20 27 68 61 72 6d 6f 6e 69 63 69 74       'harmonicit
99c50 79 27 3a 20 33 2c 0a 09 20 20 20 20 20 20 20 20  y': 3,..        
99c60 27 6d 6f 64 75 6c 61 74 69 6f 6e 49 6e 64 65 78  'modulationIndex
99c70 27 3a 20 31 30 2c 0a 09 20 20 20 20 20 20 20 20  ': 10,..        
99c80 27 64 65 74 75 6e 65 27 3a 20 30 2c 0a 09 20 20  'detune': 0,..  
99c90 20 20 20 20 20 20 27 6f 73 63 69 6c 6c 61 74 6f        'oscillato
99ca0 72 27 3a 20 7b 20 27 74 79 70 65 27 3a 20 27 73  r': { 'type': 's
99cb0 69 6e 65 27 20 7d 2c 0a 09 20 20 20 20 20 20 20  ine' },..       
99cc0 20 27 65 6e 76 65 6c 6f 70 65 27 3a 20 7b 0a 09   'envelope': {..
99cd0 20 20 20 20 20 20 20 20 20 20 20 20 27 61 74 74              'att
99ce0 61 63 6b 27 3a 20 30 2e 30 31 2c 0a 09 20 20 20  ack': 0.01,..   
99cf0 20 20 20 20 20 20 20 20 20 27 64 65 63 61 79 27           'decay'
99d00 3a 20 30 2e 30 31 2c 0a 09 20 20 20 20 20 20 20  : 0.01,..       
99d10 20 20 20 20 20 27 73 75 73 74 61 69 6e 27 3a 20       'sustain': 
99d20 31 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  1,..            
99d30 27 72 65 6c 65 61 73 65 27 3a 20 30 2e 35 0a 09  'release': 0.5..
99d40 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20          },..    
99d50 20 20 20 20 27 6d 6f 64 75 6c 61 74 69 6f 6e 27      'modulation'
99d60 3a 20 7b 20 27 74 79 70 65 27 3a 20 27 73 71 75  : { 'type': 'squ
99d70 61 72 65 27 20 7d 2c 0a 09 20 20 20 20 20 20 20  are' },..       
99d80 20 27 6d 6f 64 75 6c 61 74 69 6f 6e 45 6e 76 65   'modulationEnve
99d90 6c 6f 70 65 27 3a 20 7b 0a 09 20 20 20 20 20 20  lope': {..      
99da0 20 20 20 20 20 20 27 61 74 74 61 63 6b 27 3a 20        'attack': 
99db0 30 2e 35 2c 0a 09 20 20 20 20 20 20 20 20 20 20  0.5,..          
99dc0 20 20 27 64 65 63 61 79 27 3a 20 30 2c 0a 09 20    'decay': 0,.. 
99dd0 20 20 20 20 20 20 20 20 20 20 20 27 73 75 73 74             'sust
99de0 61 69 6e 27 3a 20 31 2c 0a 09 20 20 20 20 20 20  ain': 1,..      
99df0 20 20 20 20 20 20 27 72 65 6c 65 61 73 65 27 3a        'release':
99e00 20 30 2e 35 0a 09 20 20 20 20 20 20 20 20 7d 0a   0.5..        }.
99e10 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
99e20 0a 09 09 20 2a 20 09 74 72 69 67 67 65 72 20 74  ... * .trigger t
99e30 68 65 20 61 74 74 61 63 6b 20 70 6f 72 74 69 6f  he attack portio
99e40 6e 20 6f 66 20 74 68 65 20 6e 6f 74 65 0a 09 09  n of the note...
99e50 20 2a 20 20 0a 09 09 20 2a 20 20 40 70 61 72 61   *  ... *  @para
99e60 6d 20 20 7b 54 69 6d 65 7d 20 5b 74 69 6d 65 3d  m  {Time} [time=
99e70 6e 6f 77 5d 20 74 68 65 20 74 69 6d 65 20 74 68  now] the time th
99e80 65 20 6e 6f 74 65 20 77 69 6c 6c 20 6f 63 63 75  e note will occu
99e90 72 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b  r... *  @param {
99ea0 6e 75 6d 62 65 72 7d 20 5b 76 65 6c 6f 63 69 74  number} [velocit
99eb0 79 3d 31 5d 20 74 68 65 20 76 65 6c 6f 63 69 74  y=1] the velocit
99ec0 79 20 6f 66 20 74 68 65 20 6e 6f 74 65 0a 09 09  y of the note...
99ed0 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f   *  @returns {To
99ee0 6e 65 2e 46 4d 53 79 6e 74 68 7d 20 74 68 69 73  ne.FMSynth} this
99ef0 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
99f00 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
99f10 46 4d 53 79 6e 74 68 2e 70 72 6f 74 6f 74 79 70  FMSynth.prototyp
99f20 65 2e 5f 74 72 69 67 67 65 72 45 6e 76 65 6c 6f  e._triggerEnvelo
99f30 70 65 41 74 74 61 63 6b 20 3d 20 66 75 6e 63 74  peAttack = funct
99f40 69 6f 6e 20 28 74 69 6d 65 2c 20 76 65 6c 6f 63  ion (time, veloc
99f50 69 74 79 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ity) {..        
99f60 74 69 6d 65 20 3d 20 74 68 69 73 2e 74 6f 53 65  time = this.toSe
99f70 63 6f 6e 64 73 28 74 69 6d 65 29 3b 0a 09 20 20  conds(time);..  
99f80 20 20 20 20 20 20 2f 2f 74 68 65 20 65 6e 76 65        //the enve
99f90 6c 6f 70 65 73 0a 09 20 20 20 20 20 20 20 20 74  lopes..        t
99fa0 68 69 73 2e 65 6e 76 65 6c 6f 70 65 2e 74 72 69  his.envelope.tri
99fb0 67 67 65 72 41 74 74 61 63 6b 28 74 69 6d 65 2c  ggerAttack(time,
99fc0 20 76 65 6c 6f 63 69 74 79 29 3b 0a 09 20 20 20   velocity);..   
99fd0 20 20 20 20 20 74 68 69 73 2e 6d 6f 64 75 6c 61       this.modula
99fe0 74 69 6f 6e 45 6e 76 65 6c 6f 70 65 2e 74 72 69  tionEnvelope.tri
99ff0 67 67 65 72 41 74 74 61 63 6b 28 74 69 6d 65 29  ggerAttack(time)
9a000 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
9a010 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a  n this;..    };.
9a020 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 74  .    /**... *  t
9a030 72 69 67 67 65 72 20 74 68 65 20 72 65 6c 65 61  rigger the relea
9a040 73 65 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68  se portion of th
9a050 65 20 6e 6f 74 65 0a 09 09 20 2a 20 20 0a 09 09  e note... *  ...
9a060 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 54 69 6d   *  @param  {Tim
9a070 65 7d 20 5b 74 69 6d 65 3d 6e 6f 77 5d 20 74 68  e} [time=now] th
9a080 65 20 74 69 6d 65 20 74 68 65 20 6e 6f 74 65 20  e time the note 
9a090 77 69 6c 6c 20 72 65 6c 65 61 73 65 0a 09 09 20  will release... 
9a0a0 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e  *  @returns {Ton
9a0b0 65 2e 46 4d 53 79 6e 74 68 7d 20 74 68 69 73 0a  e.FMSynth} this.
9a0c0 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
9a0d0 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 46  . */..    Tone.F
9a0e0 4d 53 79 6e 74 68 2e 70 72 6f 74 6f 74 79 70 65  MSynth.prototype
9a0f0 2e 5f 74 72 69 67 67 65 72 45 6e 76 65 6c 6f 70  ._triggerEnvelop
9a100 65 52 65 6c 65 61 73 65 20 3d 20 66 75 6e 63 74  eRelease = funct
9a110 69 6f 6e 20 28 74 69 6d 65 29 20 7b 0a 09 20 20  ion (time) {..  
9a120 20 20 20 20 20 20 74 69 6d 65 20 3d 20 74 68 69        time = thi
9a130 73 2e 74 6f 53 65 63 6f 6e 64 73 28 74 69 6d 65  s.toSeconds(time
9a140 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
9a150 2e 65 6e 76 65 6c 6f 70 65 2e 74 72 69 67 67 65  .envelope.trigge
9a160 72 52 65 6c 65 61 73 65 28 74 69 6d 65 29 3b 0a  rRelease(time);.
9a170 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 6d 6f  .        this.mo
9a180 64 75 6c 61 74 69 6f 6e 45 6e 76 65 6c 6f 70 65  dulationEnvelope
9a190 2e 74 72 69 67 67 65 72 52 65 6c 65 61 73 65 28  .triggerRelease(
9a1a0 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20  time);..        
9a1b0 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20  return this;..  
9a1c0 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    };..    /**...
9a1d0 20 2a 20 20 63 6c 65 61 6e 20 75 70 0a 09 09 20   *  clean up... 
9a1e0 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e  *  @returns {Ton
9a1f0 65 2e 46 4d 53 79 6e 74 68 7d 20 74 68 69 73 0a  e.FMSynth} this.
9a200 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
9a210 46 4d 53 79 6e 74 68 2e 70 72 6f 74 6f 74 79 70  FMSynth.prototyp
9a220 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75 6e 63  e.dispose = func
9a230 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
9a240 20 20 20 54 6f 6e 65 2e 4d 6f 6e 6f 70 68 6f 6e     Tone.Monophon
9a250 69 63 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73  ic.prototype.dis
9a260 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b  pose.call(this);
9a270 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
9a280 77 72 69 74 61 62 6c 65 28 5b 0a 09 20 20 20 20  writable([..    
9a290 20 20 20 20 20 20 20 20 27 66 72 65 71 75 65 6e          'frequen
9a2a0 63 79 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20  cy',..          
9a2b0 20 20 27 68 61 72 6d 6f 6e 69 63 69 74 79 27 2c    'harmonicity',
9a2c0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 6d  ..            'm
9a2d0 6f 64 75 6c 61 74 69 6f 6e 49 6e 64 65 78 27 2c  odulationIndex',
9a2e0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 6f  ..            'o
9a2f0 73 63 69 6c 6c 61 74 6f 72 27 2c 0a 09 20 20 20  scillator',..   
9a300 20 20 20 20 20 20 20 20 20 27 65 6e 76 65 6c 6f           'envelo
9a310 70 65 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20  pe',..          
9a320 20 20 27 6d 6f 64 75 6c 61 74 69 6f 6e 27 2c 0a    'modulation',.
9a330 09 20 20 20 20 20 20 20 20 20 20 20 20 27 6d 6f  .            'mo
9a340 64 75 6c 61 74 69 6f 6e 45 6e 76 65 6c 6f 70 65  dulationEnvelope
9a350 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ',..            
9a360 27 64 65 74 75 6e 65 27 0a 09 20 20 20 20 20 20  'detune'..      
9a370 20 20 5d 29 3b 0a 09 20 20 20 20 20 20 20 20 74    ]);..        t
9a380 68 69 73 2e 5f 63 61 72 72 69 65 72 2e 64 69 73  his._carrier.dis
9a390 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20  pose();..       
9a3a0 20 74 68 69 73 2e 5f 63 61 72 72 69 65 72 20 3d   this._carrier =
9a3b0 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
9a3c0 74 68 69 73 2e 5f 6d 6f 64 75 6c 61 74 6f 72 2e  this._modulator.
9a3d0 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20  dispose();..    
9a3e0 20 20 20 20 74 68 69 73 2e 5f 6d 6f 64 75 6c 61      this._modula
9a3f0 74 6f 72 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  tor = null;..   
9a400 20 20 20 20 20 74 68 69 73 2e 66 72 65 71 75 65       this.freque
9a410 6e 63 79 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09  ncy.dispose();..
9a420 20 20 20 20 20 20 20 20 74 68 69 73 2e 66 72 65          this.fre
9a430 71 75 65 6e 63 79 20 3d 20 6e 75 6c 6c 3b 0a 09  quency = null;..
9a440 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 74          this.det
9a450 75 6e 65 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09  une.dispose();..
9a460 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 74          this.det
9a470 75 6e 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  une = null;..   
9a480 20 20 20 20 20 74 68 69 73 2e 6d 6f 64 75 6c 61       this.modula
9a490 74 69 6f 6e 49 6e 64 65 78 2e 64 69 73 70 6f 73  tionIndex.dispos
9a4a0 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  e();..        th
9a4b0 69 73 2e 6d 6f 64 75 6c 61 74 69 6f 6e 49 6e 64  is.modulationInd
9a4c0 65 78 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  ex = null;..    
9a4d0 20 20 20 20 74 68 69 73 2e 68 61 72 6d 6f 6e 69      this.harmoni
9a4e0 63 69 74 79 2e 64 69 73 70 6f 73 65 28 29 3b 0a  city.dispose();.
9a4f0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 68 61  .        this.ha
9a500 72 6d 6f 6e 69 63 69 74 79 20 3d 20 6e 75 6c 6c  rmonicity = null
9a510 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
9a520 5f 6d 6f 64 75 6c 61 74 69 6f 6e 4e 6f 64 65 2e  _modulationNode.
9a530 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20  dispose();..    
9a540 20 20 20 20 74 68 69 73 2e 5f 6d 6f 64 75 6c 61      this._modula
9a550 74 69 6f 6e 4e 6f 64 65 20 3d 20 6e 75 6c 6c 3b  tionNode = null;
9a560 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f  ..        this.o
9a570 73 63 69 6c 6c 61 74 6f 72 20 3d 20 6e 75 6c 6c  scillator = null
9a580 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
9a590 65 6e 76 65 6c 6f 70 65 20 3d 20 6e 75 6c 6c 3b  envelope = null;
9a5a0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 6d  ..        this.m
9a5b0 6f 64 75 6c 61 74 69 6f 6e 45 6e 76 65 6c 6f 70  odulationEnvelop
9a5c0 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20  e = null;..     
9a5d0 20 20 20 74 68 69 73 2e 6d 6f 64 75 6c 61 74 69     this.modulati
9a5e0 6f 6e 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  on = null;..    
9a5f0 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b      return this;
9a600 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 72 65  ..    };..    re
9a610 74 75 72 6e 20 54 6f 6e 65 2e 46 4d 53 79 6e 74  turn Tone.FMSynt
9a620 68 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28  h;..});..Module(
9a630 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20  function (Tone) 
9a640 7b 0a 09 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a  {..    ..    /**
9a650 0a 09 09 20 2a 20 20 40 63 6c 61 73 73 20 20 54  ... *  @class  T
9a660 6f 6e 65 2e 4d 65 6d 62 72 61 6e 65 53 79 6e 74  one.MembraneSynt
9a670 68 20 6d 61 6b 65 73 20 6b 69 63 6b 20 61 6e 64  h makes kick and
9a680 20 74 6f 6d 20 73 6f 75 6e 64 73 20 75 73 69 6e   tom sounds usin
9a690 67 20 61 20 73 69 6e 67 6c 65 20 6f 73 63 69 6c  g a single oscil
9a6a0 6c 61 74 6f 72 0a 09 09 20 2a 20 20 20 20 20 20  lator... *      
9a6b0 20 20 20 20 77 69 74 68 20 61 6e 20 61 6d 70 6c      with an ampl
9a6c0 69 74 75 64 65 20 65 6e 76 65 6c 6f 70 65 20 61  itude envelope a
9a6d0 6e 64 20 66 72 65 71 75 65 6e 63 79 20 72 61 6d  nd frequency ram
9a6e0 70 2e 20 41 20 54 6f 6e 65 2e 4f 6d 6e 69 4f 73  p. A Tone.OmniOs
9a6f0 63 69 6c 6c 61 74 6f 72 0a 09 09 20 2a 20 20 20  cillator... *   
9a700 20 20 20 20 20 20 20 69 73 20 72 6f 75 74 65 64         is routed
9a710 20 74 68 72 6f 75 67 68 20 61 20 54 6f 6e 65 2e   through a Tone.
9a720 41 6d 70 6c 69 74 75 64 65 45 6e 76 65 6c 6f 70  AmplitudeEnvelop
9a730 65 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e  e to the output.
9a740 20 54 68 65 20 64 72 75 6d 0a 09 09 20 2a 20 20   The drum... *  
9a750 20 20 20 20 20 20 20 20 71 75 61 6c 69 74 79 20          quality 
9a760 6f 66 20 74 68 65 20 73 6f 75 6e 64 20 63 6f 6d  of the sound com
9a770 65 73 20 66 72 6f 6d 20 74 68 65 20 66 72 65 71  es from the freq
9a780 75 65 6e 63 79 20 65 6e 76 65 6c 6f 70 65 20 61  uency envelope a
9a790 70 70 6c 69 65 64 0a 09 09 20 2a 20 20 20 20 20  pplied... *     
9a7a0 20 20 20 20 20 64 75 72 69 6e 67 20 64 75 72 69       during duri
9a7b0 6e 67 20 54 6f 6e 65 2e 4d 65 6d 62 72 61 6e 65  ng Tone.Membrane
9a7c0 53 79 6e 74 68 2e 74 72 69 67 67 65 72 41 74 74  Synth.triggerAtt
9a7d0 61 63 6b 28 6e 6f 74 65 29 2e 20 54 68 65 20 66  ack(note). The f
9a7e0 72 65 71 75 65 6e 63 79 0a 09 09 20 2a 20 20 20  requency... *   
9a7f0 20 20 20 20 20 20 20 65 6e 76 65 6c 6f 70 65 20         envelope 
9a800 73 74 61 72 74 73 20 61 74 20 3c 63 6f 64 65 3e  starts at <code>
9a810 6e 6f 74 65 20 2a 20 2e 6f 63 74 61 76 65 73 3c  note * .octaves<
9a820 2f 63 6f 64 65 3e 20 61 6e 64 20 72 61 6d 70 73  /code> and ramps
9a830 20 74 6f 20 0a 09 09 20 2a 20 20 20 20 20 20 20   to ... *       
9a840 20 20 20 3c 63 6f 64 65 3e 6e 6f 74 65 3c 2f 63     <code>note</c
9a850 6f 64 65 3e 20 6f 76 65 72 20 74 68 65 20 64 75  ode> over the du
9a860 72 61 74 69 6f 6e 20 6f 66 20 3c 63 6f 64 65 3e  ration of <code>
9a870 2e 70 69 74 63 68 44 65 63 61 79 3c 2f 63 6f 64  .pitchDecay</cod
9a880 65 3e 2e 20 0a 09 09 20 2a 0a 09 09 20 2a 20 20  e>. ... *... *  
9a890 40 63 6f 6e 73 74 72 75 63 74 6f 72 0a 09 09 20  @constructor... 
9a8a0 2a 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e  *  @extends {Ton
9a8b0 65 2e 49 6e 73 74 72 75 6d 65 6e 74 7d 0a 09 09  e.Instrument}...
9a8c0 20 2a 20 20 40 70 61 72 61 6d 20 7b 4f 62 6a 65   *  @param {Obje
9a8d0 63 74 7d 20 5b 6f 70 74 69 6f 6e 73 5d 20 74 68  ct} [options] th
9a8e0 65 20 6f 70 74 69 6f 6e 73 20 61 76 61 69 6c 61  e options availa
9a8f0 62 6c 65 20 66 6f 72 20 74 68 65 20 73 79 6e 74  ble for the synt
9a900 68 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  h ... *         
9a910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a920 20 73 65 65 20 64 65 66 61 75 6c 74 73 20 62 65   see defaults be
9a930 6c 6f 77 0a 09 09 20 2a 20 20 40 65 78 61 6d 70  low... *  @examp
9a940 6c 65 0a 09 09 20 2a 20 76 61 72 20 73 79 6e 74  le... * var synt
9a950 68 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4d 65 6d  h = new Tone.Mem
9a960 62 72 61 6e 65 53 79 6e 74 68 28 29 2e 74 6f 4d  braneSynth().toM
9a970 61 73 74 65 72 28 29 3b 0a 09 09 20 2a 20 73 79  aster();... * sy
9a980 6e 74 68 2e 74 72 69 67 67 65 72 41 74 74 61 63  nth.triggerAttac
9a990 6b 52 65 6c 65 61 73 65 28 22 43 32 22 2c 20 22  kRelease("C2", "
9a9a0 38 6e 22 29 3b 0a 09 09 20 2a 2f 0a 09 20 20 20  8n");... */..   
9a9b0 20 54 6f 6e 65 2e 4d 65 6d 62 72 61 6e 65 53 79   Tone.MembraneSy
9a9c0 6e 74 68 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  nth = function (
9a9d0 6f 70 74 69 6f 6e 73 29 20 7b 0a 09 20 20 20 20  options) {..    
9a9e0 20 20 20 20 6f 70 74 69 6f 6e 73 20 3d 20 74 68      options = th
9a9f0 69 73 2e 64 65 66 61 75 6c 74 41 72 67 28 6f 70  is.defaultArg(op
9aa00 74 69 6f 6e 73 2c 20 54 6f 6e 65 2e 4d 65 6d 62  tions, Tone.Memb
9aa10 72 61 6e 65 53 79 6e 74 68 2e 64 65 66 61 75 6c  raneSynth.defaul
9aa20 74 73 29 3b 0a 09 20 20 20 20 20 20 20 20 54 6f  ts);..        To
9aa30 6e 65 2e 49 6e 73 74 72 75 6d 65 6e 74 2e 63 61  ne.Instrument.ca
9aa40 6c 6c 28 74 68 69 73 2c 20 6f 70 74 69 6f 6e 73  ll(this, options
9aa50 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
9aa60 09 09 09 20 2a 20 20 54 68 65 20 6f 73 63 69 6c  ... *  The oscil
9aa70 6c 61 74 6f 72 2e 0a 09 09 09 20 2a 20 20 40 74  lator..... *  @t
9aa80 79 70 65 20 7b 54 6f 6e 65 2e 4f 6d 6e 69 4f 73  ype {Tone.OmniOs
9aa90 63 69 6c 6c 61 74 6f 72 7d 0a 09 09 09 20 2a 2f  cillator}.... */
9aaa0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f  ..        this.o
9aab0 73 63 69 6c 6c 61 74 6f 72 20 3d 20 6e 65 77 20  scillator = new 
9aac0 54 6f 6e 65 2e 4f 6d 6e 69 4f 73 63 69 6c 6c 61  Tone.OmniOscilla
9aad0 74 6f 72 28 6f 70 74 69 6f 6e 73 2e 6f 73 63 69  tor(options.osci
9aae0 6c 6c 61 74 6f 72 29 2e 73 74 61 72 74 28 29 3b  llator).start();
9aaf0 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
9ab00 09 20 2a 20 20 54 68 65 20 61 6d 70 6c 69 74 75  . *  The amplitu
9ab10 64 65 20 65 6e 76 65 6c 6f 70 65 2e 0a 09 09 09  de envelope.....
9ab20 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e   *  @type {Tone.
9ab30 41 6d 70 6c 69 74 75 64 65 45 6e 76 65 6c 6f 70  AmplitudeEnvelop
9ab40 65 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  e}.... */..     
9ab50 20 20 20 74 68 69 73 2e 65 6e 76 65 6c 6f 70 65     this.envelope
9ab60 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 41 6d 70 6c   = new Tone.Ampl
9ab70 69 74 75 64 65 45 6e 76 65 6c 6f 70 65 28 6f 70  itudeEnvelope(op
9ab80 74 69 6f 6e 73 2e 65 6e 76 65 6c 6f 70 65 29 3b  tions.envelope);
9ab90 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
9aba0 09 20 2a 20 20 54 68 65 20 6e 75 6d 62 65 72 20  . *  The number 
9abb0 6f 66 20 6f 63 74 61 76 65 73 20 74 68 65 20 70  of octaves the p
9abc0 69 74 63 68 20 65 6e 76 65 6c 6f 70 65 20 72 61  itch envelope ra
9abd0 6d 70 73 2e 0a 09 09 09 20 2a 20 20 40 74 79 70  mps..... *  @typ
9abe0 65 20 7b 50 6f 73 69 74 69 76 65 7d 0a 09 09 09  e {Positive}....
9abf0 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
9ac00 73 2e 6f 63 74 61 76 65 73 20 3d 20 6f 70 74 69  s.octaves = opti
9ac10 6f 6e 73 2e 6f 63 74 61 76 65 73 3b 0a 09 20 20  ons.octaves;..  
9ac20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
9ac30 20 54 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 74   The amount of t
9ac40 69 6d 65 20 74 68 65 20 66 72 65 71 75 65 6e 63  ime the frequenc
9ac50 79 20 65 6e 76 65 6c 6f 70 65 20 74 61 6b 65 73  y envelope takes
9ac60 2e 20 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  . .... *  @type 
9ac70 7b 54 69 6d 65 7d 0a 09 09 09 20 2a 2f 0a 09 20  {Time}.... */.. 
9ac80 20 20 20 20 20 20 20 74 68 69 73 2e 70 69 74 63         this.pitc
9ac90 68 44 65 63 61 79 20 3d 20 6f 70 74 69 6f 6e 73  hDecay = options
9aca0 2e 70 69 74 63 68 44 65 63 61 79 3b 0a 09 20 20  .pitchDecay;..  
9acb0 20 20 20 20 20 20 74 68 69 73 2e 6f 73 63 69 6c        this.oscil
9acc0 6c 61 74 6f 72 2e 63 68 61 69 6e 28 74 68 69 73  lator.chain(this
9acd0 2e 65 6e 76 65 6c 6f 70 65 2c 20 74 68 69 73 2e  .envelope, this.
9ace0 6f 75 74 70 75 74 29 3b 0a 09 20 20 20 20 20 20  output);..      
9acf0 20 20 74 68 69 73 2e 5f 72 65 61 64 4f 6e 6c 79    this._readOnly
9ad00 28 5b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ([..            
9ad10 27 6f 73 63 69 6c 6c 61 74 6f 72 27 2c 0a 09 20  'oscillator',.. 
9ad20 20 20 20 20 20 20 20 20 20 20 20 27 65 6e 76 65             'enve
9ad30 6c 6f 70 65 27 0a 09 20 20 20 20 20 20 20 20 5d  lope'..        ]
9ad40 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  );..    };..    
9ad50 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65  Tone.extend(Tone
9ad60 2e 4d 65 6d 62 72 61 6e 65 53 79 6e 74 68 2c 20  .MembraneSynth, 
9ad70 54 6f 6e 65 2e 49 6e 73 74 72 75 6d 65 6e 74 29  Tone.Instrument)
9ad80 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
9ad90 20 40 73 74 61 74 69 63 0a 09 09 20 2a 20 20 40   @static... *  @
9ada0 74 79 70 65 20 7b 4f 62 6a 65 63 74 7d 0a 09 09  type {Object}...
9adb0 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4d 65   */..    Tone.Me
9adc0 6d 62 72 61 6e 65 53 79 6e 74 68 2e 64 65 66 61  mbraneSynth.defa
9add0 75 6c 74 73 20 3d 20 7b 0a 09 20 20 20 20 20 20  ults = {..      
9ade0 20 20 27 70 69 74 63 68 44 65 63 61 79 27 3a 20    'pitchDecay': 
9adf0 30 2e 30 35 2c 0a 09 20 20 20 20 20 20 20 20 27  0.05,..        '
9ae00 6f 63 74 61 76 65 73 27 3a 20 31 30 2c 0a 09 20  octaves': 10,.. 
9ae10 20 20 20 20 20 20 20 27 6f 73 63 69 6c 6c 61 74         'oscillat
9ae20 6f 72 27 3a 20 7b 20 27 74 79 70 65 27 3a 20 27  or': { 'type': '
9ae30 73 69 6e 65 27 20 7d 2c 0a 09 20 20 20 20 20 20  sine' },..      
9ae40 20 20 27 65 6e 76 65 6c 6f 70 65 27 3a 20 7b 0a    'envelope': {.
9ae50 09 20 20 20 20 20 20 20 20 20 20 20 20 27 61 74  .            'at
9ae60 74 61 63 6b 27 3a 20 30 2e 30 30 31 2c 0a 09 20  tack': 0.001,.. 
9ae70 20 20 20 20 20 20 20 20 20 20 20 27 64 65 63 61             'deca
9ae80 79 27 3a 20 30 2e 34 2c 0a 09 20 20 20 20 20 20  y': 0.4,..      
9ae90 20 20 20 20 20 20 27 73 75 73 74 61 69 6e 27 3a        'sustain':
9aea0 20 30 2e 30 31 2c 0a 09 20 20 20 20 20 20 20 20   0.01,..        
9aeb0 20 20 20 20 27 72 65 6c 65 61 73 65 27 3a 20 31      'release': 1
9aec0 2e 34 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20  .4,..           
9aed0 20 27 61 74 74 61 63 6b 43 75 72 76 65 27 3a 20   'attackCurve': 
9aee0 27 65 78 70 6f 6e 65 6e 74 69 61 6c 27 0a 09 20  'exponential'.. 
9aef0 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 3b         }..    };
9af00 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
9af10 54 72 69 67 67 65 72 20 74 68 65 20 6e 6f 74 65  Trigger the note
9af20 20 61 74 20 74 68 65 20 67 69 76 65 6e 20 74 69   at the given ti
9af30 6d 65 20 77 69 74 68 20 74 68 65 20 67 69 76 65  me with the give
9af40 6e 20 76 65 6c 6f 63 69 74 79 2e 20 0a 09 09 20  n velocity. ... 
9af50 2a 20 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  *  ... *  @param
9af60 20 20 7b 46 72 65 71 75 65 6e 63 79 7d 20 6e 6f    {Frequency} no
9af70 74 65 20 20 20 20 20 74 68 65 20 6e 6f 74 65 0a  te     the note.
9af80 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 54  .. *  @param  {T
9af90 69 6d 65 7d 20 5b 74 69 6d 65 3d 6e 6f 77 5d 20  ime} [time=now] 
9afa0 20 20 20 20 74 68 65 20 74 69 6d 65 2c 20 69 66      the time, if
9afb0 20 6e 6f 74 20 67 69 76 65 6e 20 69 73 20 6e 6f   not given is no
9afc0 77 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20  w... *  @param  
9afd0 7b 6e 75 6d 62 65 72 7d 20 5b 76 65 6c 6f 63 69  {number} [veloci
9afe0 74 79 3d 31 5d 20 76 65 6c 6f 63 69 74 79 20 64  ty=1] velocity d
9aff0 65 66 61 75 6c 74 73 20 74 6f 20 31 0a 09 09 20  efaults to 1... 
9b000 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e  *  @returns {Ton
9b010 65 2e 4d 65 6d 62 72 61 6e 65 53 79 6e 74 68 7d  e.MembraneSynth}
9b020 20 74 68 69 73 0a 09 09 20 2a 20 20 40 65 78 61   this... *  @exa
9b030 6d 70 6c 65 0a 09 09 20 2a 20 20 6b 69 63 6b 2e  mple... *  kick.
9b040 74 72 69 67 67 65 72 41 74 74 61 63 6b 28 36 30  triggerAttack(60
9b050 29 3b 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  );... */..    To
9b060 6e 65 2e 4d 65 6d 62 72 61 6e 65 53 79 6e 74 68  ne.MembraneSynth
9b070 2e 70 72 6f 74 6f 74 79 70 65 2e 74 72 69 67 67  .prototype.trigg
9b080 65 72 41 74 74 61 63 6b 20 3d 20 66 75 6e 63 74  erAttack = funct
9b090 69 6f 6e 20 28 6e 6f 74 65 2c 20 74 69 6d 65 2c  ion (note, time,
9b0a0 20 76 65 6c 6f 63 69 74 79 29 20 7b 0a 09 20 20   velocity) {..  
9b0b0 20 20 20 20 20 20 74 69 6d 65 20 3d 20 74 68 69        time = thi
9b0c0 73 2e 74 6f 53 65 63 6f 6e 64 73 28 74 69 6d 65  s.toSeconds(time
9b0d0 29 3b 0a 09 20 20 20 20 20 20 20 20 6e 6f 74 65  );..        note
9b0e0 20 3d 20 74 68 69 73 2e 74 6f 46 72 65 71 75 65   = this.toFreque
9b0f0 6e 63 79 28 6e 6f 74 65 29 3b 0a 09 20 20 20 20  ncy(note);..    
9b100 20 20 20 20 76 61 72 20 6d 61 78 4e 6f 74 65 20      var maxNote 
9b110 3d 20 6e 6f 74 65 20 2a 20 74 68 69 73 2e 6f 63  = note * this.oc
9b120 74 61 76 65 73 3b 0a 09 20 20 20 20 20 20 20 20  taves;..        
9b130 74 68 69 73 2e 6f 73 63 69 6c 6c 61 74 6f 72 2e  this.oscillator.
9b140 66 72 65 71 75 65 6e 63 79 2e 73 65 74 56 61 6c  frequency.setVal
9b150 75 65 41 74 54 69 6d 65 28 6d 61 78 4e 6f 74 65  ueAtTime(maxNote
9b160 2c 20 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20  , time);..      
9b170 20 20 74 68 69 73 2e 6f 73 63 69 6c 6c 61 74 6f    this.oscillato
9b180 72 2e 66 72 65 71 75 65 6e 63 79 2e 65 78 70 6f  r.frequency.expo
9b190 6e 65 6e 74 69 61 6c 52 61 6d 70 54 6f 56 61 6c  nentialRampToVal
9b1a0 75 65 41 74 54 69 6d 65 28 6e 6f 74 65 2c 20 74  ueAtTime(note, t
9b1b0 69 6d 65 20 2b 20 74 68 69 73 2e 74 6f 53 65 63  ime + this.toSec
9b1c0 6f 6e 64 73 28 74 68 69 73 2e 70 69 74 63 68 44  onds(this.pitchD
9b1d0 65 63 61 79 29 29 3b 0a 09 20 20 20 20 20 20 20  ecay));..       
9b1e0 20 74 68 69 73 2e 65 6e 76 65 6c 6f 70 65 2e 74   this.envelope.t
9b1f0 72 69 67 67 65 72 41 74 74 61 63 6b 28 74 69 6d  riggerAttack(tim
9b200 65 2c 20 76 65 6c 6f 63 69 74 79 29 3b 0a 09 20  e, velocity);.. 
9b210 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
9b220 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  is;..    };..   
9b230 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 72 69 67 67   /**... *  Trigg
9b240 65 72 20 74 68 65 20 72 65 6c 65 61 73 65 20 70  er the release p
9b250 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 6e 6f  ortion of the no
9b260 74 65 2e 0a 09 09 20 2a 20 20 0a 09 09 20 2a 20  te.... *  ... * 
9b270 20 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 7d 20   @param  {Time} 
9b280 5b 74 69 6d 65 3d 6e 6f 77 5d 20 74 68 65 20 74  [time=now] the t
9b290 69 6d 65 20 74 68 65 20 6e 6f 74 65 20 77 69 6c  ime the note wil
9b2a0 6c 20 72 65 6c 65 61 73 65 0a 09 09 20 2a 20 20  l release... *  
9b2b0 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 4d  @returns {Tone.M
9b2c0 65 6d 62 72 61 6e 65 53 79 6e 74 68 7d 20 74 68  embraneSynth} th
9b2d0 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  is... */..    To
9b2e0 6e 65 2e 4d 65 6d 62 72 61 6e 65 53 79 6e 74 68  ne.MembraneSynth
9b2f0 2e 70 72 6f 74 6f 74 79 70 65 2e 74 72 69 67 67  .prototype.trigg
9b300 65 72 52 65 6c 65 61 73 65 20 3d 20 66 75 6e 63  erRelease = func
9b310 74 69 6f 6e 20 28 74 69 6d 65 29 20 7b 0a 09 20  tion (time) {.. 
9b320 20 20 20 20 20 20 20 74 68 69 73 2e 65 6e 76 65         this.enve
9b330 6c 6f 70 65 2e 74 72 69 67 67 65 72 52 65 6c 65  lope.triggerRele
9b340 61 73 65 28 74 69 6d 65 29 3b 0a 09 20 20 20 20  ase(time);..    
9b350 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b      return this;
9b360 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
9b370 2a 0a 09 09 20 2a 20 20 43 6c 65 61 6e 20 75 70  *... *  Clean up
9b380 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73  .... *  @returns
9b390 20 7b 54 6f 6e 65 2e 4d 65 6d 62 72 61 6e 65 53   {Tone.MembraneS
9b3a0 79 6e 74 68 7d 20 74 68 69 73 0a 09 09 20 2a 2f  ynth} this... */
9b3b0 0a 09 20 20 20 20 54 6f 6e 65 2e 4d 65 6d 62 72  ..    Tone.Membr
9b3c0 61 6e 65 53 79 6e 74 68 2e 70 72 6f 74 6f 74 79  aneSynth.prototy
9b3d0 70 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75 6e  pe.dispose = fun
9b3e0 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
9b3f0 20 20 20 20 54 6f 6e 65 2e 49 6e 73 74 72 75 6d      Tone.Instrum
9b400 65 6e 74 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69  ent.prototype.di
9b410 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69 73 29  spose.call(this)
9b420 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
9b430 5f 77 72 69 74 61 62 6c 65 28 5b 0a 09 20 20 20  _writable([..   
9b440 20 20 20 20 20 20 20 20 20 27 6f 73 63 69 6c 6c           'oscill
9b450 61 74 6f 72 27 2c 0a 09 20 20 20 20 20 20 20 20  ator',..        
9b460 20 20 20 20 27 65 6e 76 65 6c 6f 70 65 27 0a 09      'envelope'..
9b470 20 20 20 20 20 20 20 20 5d 29 3b 0a 09 20 20 20          ]);..   
9b480 20 20 20 20 20 74 68 69 73 2e 6f 73 63 69 6c 6c       this.oscill
9b490 61 74 6f 72 2e 64 69 73 70 6f 73 65 28 29 3b 0a  ator.dispose();.
9b4a0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f 73  .        this.os
9b4b0 63 69 6c 6c 61 74 6f 72 20 3d 20 6e 75 6c 6c 3b  cillator = null;
9b4c0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 65  ..        this.e
9b4d0 6e 76 65 6c 6f 70 65 2e 64 69 73 70 6f 73 65 28  nvelope.dispose(
9b4e0 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  );..        this
9b4f0 2e 65 6e 76 65 6c 6f 70 65 20 3d 20 6e 75 6c 6c  .envelope = null
9b500 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
9b510 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a  n this;..    };.
9b520 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65  .    return Tone
9b530 2e 4d 65 6d 62 72 61 6e 65 53 79 6e 74 68 3b 0a  .MembraneSynth;.
9b540 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e  .});..Module(fun
9b550 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09  ction (Tone) {..
9b560 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 49 6e      /**... *  In
9b570 68 61 72 6d 6f 6e 69 63 20 72 61 74 69 6f 20 6f  harmonic ratio o
9b580 66 20 66 72 65 71 75 65 6e 63 69 65 73 20 62 61  f frequencies ba
9b590 73 65 64 20 6f 6e 20 74 68 65 20 52 6f 6c 61 6e  sed on the Rolan
9b5a0 64 20 54 52 2d 38 30 38 0a 09 09 20 2a 20 20 54  d TR-808... *  T
9b5b0 61 6b 65 6e 20 66 72 6f 6d 20 68 74 74 70 73 3a  aken from https:
9b5c0 2f 2f 63 63 72 6d 61 2e 73 74 61 6e 66 6f 72 64  //ccrma.stanford
9b5d0 2e 65 64 75 2f 70 61 70 65 72 73 2f 74 72 2d 38  .edu/papers/tr-8
9b5e0 30 38 2d 63 79 6d 62 61 6c 2d 70 68 79 73 69 63  08-cymbal-physic
9b5f0 61 6c 6c 79 2d 69 6e 66 6f 72 6d 65 64 2d 63 69  ally-informed-ci
9b600 72 63 75 69 74 2d 62 65 6e 64 61 62 6c 65 2d 64  rcuit-bendable-d
9b610 69 67 69 74 61 6c 2d 6d 6f 64 65 6c 0a 09 09 20  igital-model... 
9b620 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a  *  @private... *
9b630 20 20 40 73 74 61 74 69 63 0a 09 09 20 2a 20 20    @static... *  
9b640 40 74 79 70 65 20 7b 41 72 72 61 79 7d 0a 09 09  @type {Array}...
9b650 20 2a 2f 0a 09 20 20 20 20 76 61 72 20 69 6e 68   */..    var inh
9b660 61 72 6d 52 61 74 69 6f 73 20 3d 20 5b 0a 09 20  armRatios = [.. 
9b670 20 20 20 20 20 20 20 31 2c 0a 09 20 20 20 20 20         1,..     
9b680 20 20 20 31 2e 34 38 33 2c 0a 09 20 20 20 20 20     1.483,..     
9b690 20 20 20 31 2e 39 33 32 2c 0a 09 20 20 20 20 20     1.932,..     
9b6a0 20 20 20 32 2e 35 34 36 2c 0a 09 20 20 20 20 20     2.546,..     
9b6b0 20 20 20 32 2e 36 33 2c 0a 09 20 20 20 20 20 20     2.63,..      
9b6c0 20 20 33 2e 38 39 37 0a 09 20 20 20 20 5d 3b 0a    3.897..    ];.
9b6d0 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40  .    /**... *  @
9b6e0 63 6c 61 73 73 20 20 41 20 68 69 67 68 6c 79 20  class  A highly 
9b6f0 69 6e 68 61 72 6d 6f 6e 69 63 20 61 6e 64 20 73  inharmonic and s
9b700 70 65 63 74 72 61 6c 6c 79 20 63 6f 6d 70 6c 65  pectrally comple
9b710 78 20 73 6f 75 72 63 65 20 77 69 74 68 20 61 20  x source with a 
9b720 68 69 67 68 70 61 73 73 20 66 69 6c 74 65 72 0a  highpass filter.
9b730 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 61 6e  .. *          an
9b740 64 20 61 6d 70 6c 69 74 75 64 65 20 65 6e 76 65  d amplitude enve
9b750 6c 6f 70 65 20 77 68 69 63 68 20 69 73 20 67 6f  lope which is go
9b760 6f 64 20 66 6f 72 20 6d 61 6b 69 6e 67 20 6d 65  od for making me
9b770 74 61 6c 6f 70 68 6f 6e 65 20 73 6f 75 6e 64 73  talophone sounds
9b780 2e 20 42 61 73 65 64 0a 09 09 20 2a 20 20 20 20  . Based... *    
9b790 20 20 20 20 20 20 6f 6e 20 43 79 6d 62 61 6c 53        on CymbalS
9b7a0 79 6e 74 68 20 62 79 20 5b 40 70 6f 6c 79 72 68  ynth by [@polyrh
9b7b0 79 74 68 6d 61 74 69 63 5d 28 68 74 74 70 73 3a  ythmatic](https:
9b7c0 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 70 6f 6c  //github.com/pol
9b7d0 79 72 68 79 74 68 6d 61 74 69 63 29 2e 0a 09 09  yrhythmatic)....
9b7e0 20 2a 20 20 20 20 20 20 20 20 20 20 49 6e 73 70   *          Insp
9b7f0 69 72 61 74 69 6f 6e 20 66 72 6f 6d 20 5b 53 6f  iration from [So
9b800 75 6e 64 20 6f 6e 20 53 6f 75 6e 64 5d 28 68 74  und on Sound](ht
9b810 74 70 3a 2f 2f 77 77 77 2e 73 6f 75 6e 64 6f 6e  tp://www.soundon
9b820 73 6f 75 6e 64 2e 63 6f 6d 2f 73 6f 73 2f 6a 75  sound.com/sos/ju
9b830 6c 30 32 2f 61 72 74 69 63 6c 65 73 2f 73 79 6e  l02/articles/syn
9b840 74 68 73 65 63 72 65 74 73 30 37 30 32 2e 61 73  thsecrets0702.as
9b850 70 29 2e 0a 09 09 20 2a 0a 09 09 20 2a 20 20 40  p).... *... *  @
9b860 63 6f 6e 73 74 72 75 63 74 6f 72 0a 09 09 20 2a  constructor... *
9b870 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65    @extends {Tone
9b880 2e 49 6e 73 74 72 75 6d 65 6e 74 7d 0a 09 09 20  .Instrument}... 
9b890 2a 20 20 40 70 61 72 61 6d 20 7b 4f 62 6a 65 63  *  @param {Objec
9b8a0 74 7d 20 5b 6f 70 74 69 6f 6e 73 5d 20 54 68 65  t} [options] The
9b8b0 20 6f 70 74 69 6f 6e 73 20 61 76 61 69 6c 62 6c   options availbl
9b8c0 65 20 66 6f 72 20 74 68 65 20 73 79 6e 74 68 0a  e for the synth.
9b8d0 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
9b8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b8f0 20 73 65 65 20 64 65 66 61 75 6c 74 73 20 62 65   see defaults be
9b900 6c 6f 77 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  low... */..    T
9b910 6f 6e 65 2e 4d 65 74 61 6c 53 79 6e 74 68 20 3d  one.MetalSynth =
9b920 20 66 75 6e 63 74 69 6f 6e 20 28 6f 70 74 69 6f   function (optio
9b930 6e 73 29 20 7b 0a 09 20 20 20 20 20 20 20 20 6f  ns) {..        o
9b940 70 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e 64 65  ptions = this.de
9b950 66 61 75 6c 74 41 72 67 28 6f 70 74 69 6f 6e 73  faultArg(options
9b960 2c 20 54 6f 6e 65 2e 4d 65 74 61 6c 53 79 6e 74  , Tone.MetalSynt
9b970 68 2e 64 65 66 61 75 6c 74 73 29 3b 0a 09 20 20  h.defaults);..  
9b980 20 20 20 20 20 20 54 6f 6e 65 2e 49 6e 73 74 72        Tone.Instr
9b990 75 6d 65 6e 74 2e 63 61 6c 6c 28 74 68 69 73 2c  ument.call(this,
9b9a0 20 6f 70 74 69 6f 6e 73 29 3b 0a 09 20 20 20 20   options);..    
9b9b0 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54      /**.... *  T
9b9c0 68 65 20 66 72 65 71 75 65 6e 63 79 20 6f 66 20  he frequency of 
9b9d0 74 68 65 20 63 79 6d 62 61 6c 0a 09 09 09 20 2a  the cymbal.... *
9b9e0 20 20 40 74 79 70 65 20 20 7b 46 72 65 71 75 65    @type  {Freque
9b9f0 6e 63 79 7d 0a 09 09 09 20 2a 20 20 40 73 69 67  ncy}.... *  @sig
9ba00 6e 61 6c 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20  nal.... */..    
9ba10 20 20 20 20 74 68 69 73 2e 66 72 65 71 75 65 6e      this.frequen
9ba20 63 79 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53 69  cy = new Tone.Si
9ba30 67 6e 61 6c 28 6f 70 74 69 6f 6e 73 2e 66 72 65  gnal(options.fre
9ba40 71 75 65 6e 63 79 2c 20 54 6f 6e 65 2e 54 79 70  quency, Tone.Typ
9ba50 65 2e 46 72 65 71 75 65 6e 63 79 29 3b 0a 09 20  e.Frequency);.. 
9ba60 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
9ba70 20 20 54 68 65 20 61 72 72 61 79 20 6f 66 20 46    The array of F
9ba80 4d 4f 73 63 69 6c 6c 61 74 6f 72 73 0a 09 09 09  MOscillators....
9ba90 20 2a 20 20 40 74 79 70 65 20 20 7b 41 72 72 61   *  @type  {Arra
9baa0 79 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61  y}.... *  @priva
9bab0 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  te.... */..     
9bac0 20 20 20 74 68 69 73 2e 5f 6f 73 63 69 6c 6c 61     this._oscilla
9bad0 74 6f 72 73 20 3d 20 5b 5d 3b 0a 09 20 20 20 20  tors = [];..    
9bae0 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54      /**.... *  T
9baf0 68 65 20 66 72 65 71 75 65 6e 63 79 20 6d 75 6c  he frequency mul
9bb00 74 69 70 6c 69 65 72 73 0a 09 09 09 20 2a 20 20  tipliers.... *  
9bb10 40 74 79 70 65 20 7b 41 72 72 61 79 7d 0a 09 09  @type {Array}...
9bb20 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
9bb30 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
9bb40 69 73 2e 5f 66 72 65 71 4d 75 6c 74 69 70 6c 69  is._freqMultipli
9bb50 65 72 73 20 3d 20 5b 5d 3b 0a 09 20 20 20 20 20  ers = [];..     
9bb60 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68     /**.... *  Th
9bb70 65 20 61 6d 70 6c 69 74 75 64 65 20 66 6f 72 20  e amplitude for 
9bb80 74 68 65 20 62 6f 64 79 0a 09 09 09 20 2a 20 20  the body.... *  
9bb90 40 74 79 70 65 20 7b 54 6f 6e 65 2e 47 61 69 6e  @type {Tone.Gain
9bba0 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  }.... *  @privat
9bbb0 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
9bbc0 20 20 74 68 69 73 2e 5f 61 6d 70 6c 69 74 75 65    this._amplitue
9bbd0 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 47 61 69 6e   = new Tone.Gain
9bbe0 28 30 29 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73  (0).connect(this
9bbf0 2e 6f 75 74 70 75 74 29 3b 0a 09 20 20 20 20 20  .output);..     
9bc00 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 68 69     /**.... *  hi
9bc10 67 68 70 61 73 73 20 74 68 65 20 6f 75 74 70 75  ghpass the outpu
9bc20 74 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b  t.... *  @type {
9bc30 54 6f 6e 65 2e 46 69 6c 74 65 72 7d 0a 09 09 09  Tone.Filter}....
9bc40 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09   *  @private....
9bc50 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
9bc60 73 2e 5f 68 69 67 68 70 61 73 73 20 3d 20 6e 65  s._highpass = ne
9bc70 77 20 54 6f 6e 65 2e 46 69 6c 74 65 72 28 7b 0a  w Tone.Filter({.
9bc80 09 20 20 20 20 20 20 20 20 20 20 20 20 27 74 79  .            'ty
9bc90 70 65 27 3a 20 27 68 69 67 68 70 61 73 73 27 2c  pe': 'highpass',
9bca0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 51  ..            'Q
9bcb0 27 3a 20 2d 33 2e 30 31 30 32 39 39 39 35 36 36  ': -3.0102999566
9bcc0 33 39 38 31 32 35 0a 09 20 20 20 20 20 20 20 20  398125..        
9bcd0 7d 29 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e  }).connect(this.
9bce0 5f 61 6d 70 6c 69 74 75 65 29 3b 0a 09 20 20 20  _amplitue);..   
9bcf0 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
9bd00 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6f 63  The number of oc
9bd10 74 61 76 65 73 20 74 68 65 20 68 69 67 68 70 61  taves the highpa
9bd20 73 73 0a 09 09 09 20 2a 20 20 66 69 6c 74 65 72  ss.... *  filter
9bd30 20 66 72 65 71 75 65 6e 63 79 20 72 61 6d 70 73   frequency ramps
9bd40 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4e  .... *  @type {N
9bd50 75 6d 62 65 72 7d 0a 09 09 09 20 2a 20 20 40 70  umber}.... *  @p
9bd60 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20  rivate.... */.. 
9bd70 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6f 63 74         this._oct
9bd80 61 76 65 73 20 3d 20 6f 70 74 69 6f 6e 73 2e 6f  aves = options.o
9bd90 63 74 61 76 65 73 3b 0a 09 20 20 20 20 20 20 20  ctaves;..       
9bda0 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 53 63 61 6c   /**.... *  Scal
9bdb0 65 20 74 68 65 20 62 6f 64 79 20 65 6e 76 65 6c  e the body envel
9bdc0 6f 70 65 0a 09 09 09 20 2a 20 20 66 6f 72 20 74  ope.... *  for t
9bdd0 68 65 20 62 61 6e 64 70 61 73 73 0a 09 09 09 20  he bandpass.... 
9bde0 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 53  *  @type {Tone.S
9bdf0 63 61 6c 65 7d 0a 09 09 09 20 2a 20 20 40 70 72  cale}.... *  @pr
9be00 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20  ivate.... */..  
9be10 20 20 20 20 20 20 74 68 69 73 2e 5f 66 69 6c 74        this._filt
9be20 65 72 46 72 65 71 53 63 61 6c 65 72 20 3d 20 6e  erFreqScaler = n
9be30 65 77 20 54 6f 6e 65 2e 53 63 61 6c 65 28 6f 70  ew Tone.Scale(op
9be40 74 69 6f 6e 73 2e 72 65 73 6f 6e 61 6e 63 65 2c  tions.resonance,
9be50 20 37 30 30 30 29 3b 0a 09 20 20 20 20 20 20 20   7000);..       
9be60 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20   /**.... *  The 
9be70 65 6e 76 65 6c 6f 70 65 20 77 68 69 63 68 20 69  envelope which i
9be80 73 20 63 6f 6e 6e 65 63 74 65 64 20 62 6f 74 68  s connected both
9be90 20 74 6f 20 74 68 65 20 0a 09 09 09 20 2a 20 20   to the .... *  
9bea0 61 6d 70 6c 69 74 75 64 65 20 61 6e 64 20 68 69  amplitude and hi
9beb0 67 68 70 61 73 73 20 66 69 6c 74 65 72 27 73 20  ghpass filter's 
9bec0 63 75 74 6f 66 66 20 66 72 65 71 75 65 6e 63 79  cutoff frequency
9bed0 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 20 7b  .... *  @type  {
9bee0 54 6f 6e 65 2e 45 6e 76 65 6c 6f 70 65 7d 0a 09  Tone.Envelope}..
9bef0 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
9bf00 68 69 73 2e 65 6e 76 65 6c 6f 70 65 20 3d 20 6e  his.envelope = n
9bf10 65 77 20 54 6f 6e 65 2e 45 6e 76 65 6c 6f 70 65  ew Tone.Envelope
9bf20 28 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ({..            
9bf30 27 61 74 74 61 63 6b 27 3a 20 6f 70 74 69 6f 6e  'attack': option
9bf40 73 2e 65 6e 76 65 6c 6f 70 65 2e 61 74 74 61 63  s.envelope.attac
9bf50 6b 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
9bf60 27 61 74 74 61 63 6b 43 75 72 76 65 27 3a 20 27  'attackCurve': '
9bf70 6c 69 6e 65 61 72 27 2c 0a 09 20 20 20 20 20 20  linear',..      
9bf80 20 20 20 20 20 20 27 64 65 63 61 79 27 3a 20 6f        'decay': o
9bf90 70 74 69 6f 6e 73 2e 65 6e 76 65 6c 6f 70 65 2e  ptions.envelope.
9bfa0 64 65 63 61 79 2c 0a 09 20 20 20 20 20 20 20 20  decay,..        
9bfb0 20 20 20 20 27 73 75 73 74 61 69 6e 27 3a 20 30      'sustain': 0
9bfc0 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
9bfd0 72 65 6c 65 61 73 65 27 3a 20 6f 70 74 69 6f 6e  release': option
9bfe0 73 2e 65 6e 76 65 6c 6f 70 65 2e 72 65 6c 65 61  s.envelope.relea
9bff0 73 65 0a 09 20 20 20 20 20 20 20 20 7d 29 2e 63  se..        }).c
9c000 68 61 69 6e 28 74 68 69 73 2e 5f 66 69 6c 74 65  hain(this._filte
9c010 72 46 72 65 71 53 63 61 6c 65 72 2c 20 74 68 69  rFreqScaler, thi
9c020 73 2e 5f 68 69 67 68 70 61 73 73 2e 66 72 65 71  s._highpass.freq
9c030 75 65 6e 63 79 29 3b 0a 09 20 20 20 20 20 20 20  uency);..       
9c040 20 74 68 69 73 2e 65 6e 76 65 6c 6f 70 65 2e 63   this.envelope.c
9c050 6f 6e 6e 65 63 74 28 74 68 69 73 2e 5f 61 6d 70  onnect(this._amp
9c060 6c 69 74 75 65 2e 67 61 69 6e 29 3b 0a 09 20 20  litue.gain);..  
9c070 20 20 20 20 20 20 66 6f 72 20 28 76 61 72 20 69        for (var i
9c080 20 3d 20 30 3b 20 69 20 3c 20 69 6e 68 61 72 6d   = 0; i < inharm
9c090 52 61 74 69 6f 73 2e 6c 65 6e 67 74 68 3b 20 69  Ratios.length; i
9c0a0 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ++) {..         
9c0b0 20 20 20 76 61 72 20 6f 73 63 20 3d 20 6e 65 77     var osc = new
9c0c0 20 54 6f 6e 65 2e 46 4d 4f 73 63 69 6c 6c 61 74   Tone.FMOscillat
9c0d0 6f 72 28 7b 0a 09 20 20 20 20 20 20 20 20 20 20  or({..          
9c0e0 20 20 20 20 20 20 27 74 79 70 65 27 3a 20 27 73        'type': 's
9c0f0 71 75 61 72 65 27 2c 0a 09 20 20 20 20 20 20 20  quare',..       
9c100 20 20 20 20 20 20 20 20 20 27 6d 6f 64 75 6c 61           'modula
9c110 74 69 6f 6e 54 79 70 65 27 3a 20 27 73 71 75 61  tionType': 'squa
9c120 72 65 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20  re',..          
9c130 20 20 20 20 20 20 27 68 61 72 6d 6f 6e 69 63 69        'harmonici
9c140 74 79 27 3a 20 6f 70 74 69 6f 6e 73 2e 68 61 72  ty': options.har
9c150 6d 6f 6e 69 63 69 74 79 2c 0a 09 20 20 20 20 20  monicity,..     
9c160 20 20 20 20 20 20 20 20 20 20 20 27 6d 6f 64 75             'modu
9c170 6c 61 74 69 6f 6e 49 6e 64 65 78 27 3a 20 6f 70  lationIndex': op
9c180 74 69 6f 6e 73 2e 6d 6f 64 75 6c 61 74 69 6f 6e  tions.modulation
9c190 49 6e 64 65 78 0a 09 20 20 20 20 20 20 20 20 20  Index..         
9c1a0 20 20 20 7d 29 3b 0a 09 20 20 20 20 20 20 20 20     });..        
9c1b0 20 20 20 20 6f 73 63 2e 63 6f 6e 6e 65 63 74 28      osc.connect(
9c1c0 74 68 69 73 2e 5f 68 69 67 68 70 61 73 73 29 2e  this._highpass).
9c1d0 73 74 61 72 74 28 30 29 3b 0a 09 20 20 20 20 20  start(0);..     
9c1e0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6f 73 63         this._osc
9c1f0 69 6c 6c 61 74 6f 72 73 5b 69 5d 20 3d 20 6f 73  illators[i] = os
9c200 63 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  c;..            
9c210 76 61 72 20 6d 75 6c 74 20 3d 20 6e 65 77 20 54  var mult = new T
9c220 6f 6e 65 2e 4d 75 6c 74 69 70 6c 79 28 69 6e 68  one.Multiply(inh
9c230 61 72 6d 52 61 74 69 6f 73 5b 69 5d 29 3b 0a 09  armRatios[i]);..
9c240 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
9c250 2e 5f 66 72 65 71 4d 75 6c 74 69 70 6c 69 65 72  ._freqMultiplier
9c260 73 5b 69 5d 20 3d 20 6d 75 6c 74 3b 0a 09 20 20  s[i] = mult;..  
9c270 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 66            this.f
9c280 72 65 71 75 65 6e 63 79 2e 63 68 61 69 6e 28 6d  requency.chain(m
9c290 75 6c 74 2c 20 6f 73 63 2e 66 72 65 71 75 65 6e  ult, osc.frequen
9c2a0 63 79 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a  cy);..        }.
9c2b0 09 20 20 20 20 20 20 20 20 2f 2f 73 65 74 20 74  .        //set t
9c2c0 68 65 20 6f 63 74 61 76 65 73 0a 09 20 20 20 20  he octaves..    
9c2d0 20 20 20 20 74 68 69 73 2e 6f 63 74 61 76 65 73      this.octaves
9c2e0 20 3d 20 6f 70 74 69 6f 6e 73 2e 6f 63 74 61 76   = options.octav
9c2f0 65 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  es;..    };..   
9c300 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e   Tone.extend(Ton
9c310 65 2e 4d 65 74 61 6c 53 79 6e 74 68 2c 20 54 6f  e.MetalSynth, To
9c320 6e 65 2e 49 6e 73 74 72 75 6d 65 6e 74 29 3b 0a  ne.Instrument);.
9c330 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 64  .    /**... *  d
9c340 65 66 61 75 6c 74 20 76 61 6c 75 65 73 0a 09 09  efault values...
9c350 20 2a 20 20 40 73 74 61 74 69 63 0a 09 09 20 2a   *  @static... *
9c360 20 20 40 63 6f 6e 73 74 0a 09 09 20 2a 20 20 40    @const... *  @
9c370 74 79 70 65 20 7b 4f 62 6a 65 63 74 7d 0a 09 09  type {Object}...
9c380 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4d 65   */..    Tone.Me
9c390 74 61 6c 53 79 6e 74 68 2e 64 65 66 61 75 6c 74  talSynth.default
9c3a0 73 20 3d 20 7b 0a 09 20 20 20 20 20 20 20 20 27  s = {..        '
9c3b0 66 72 65 71 75 65 6e 63 79 27 3a 20 32 30 30 2c  frequency': 200,
9c3c0 0a 09 20 20 20 20 20 20 20 20 27 65 6e 76 65 6c  ..        'envel
9c3d0 6f 70 65 27 3a 20 7b 0a 09 20 20 20 20 20 20 20  ope': {..       
9c3e0 20 20 20 20 20 27 61 74 74 61 63 6b 27 3a 20 30       'attack': 0
9c3f0 2e 30 30 31 2c 0a 09 20 20 20 20 20 20 20 20 20  .001,..         
9c400 20 20 20 27 64 65 63 61 79 27 3a 20 31 2e 34 2c     'decay': 1.4,
9c410 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 72  ..            'r
9c420 65 6c 65 61 73 65 27 3a 20 30 2e 32 0a 09 20 20  elease': 0.2..  
9c430 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20        },..      
9c440 20 20 27 68 61 72 6d 6f 6e 69 63 69 74 79 27 3a    'harmonicity':
9c450 20 35 2e 31 2c 0a 09 20 20 20 20 20 20 20 20 27   5.1,..        '
9c460 6d 6f 64 75 6c 61 74 69 6f 6e 49 6e 64 65 78 27  modulationIndex'
9c470 3a 20 33 32 2c 0a 09 20 20 20 20 20 20 20 20 27  : 32,..        '
9c480 72 65 73 6f 6e 61 6e 63 65 27 3a 20 34 30 30 30  resonance': 4000
9c490 2c 0a 09 20 20 20 20 20 20 20 20 27 6f 63 74 61  ,..        'octa
9c4a0 76 65 73 27 3a 20 31 2e 35 0a 09 20 20 20 20 7d  ves': 1.5..    }
9c4b0 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
9c4c0 20 54 72 69 67 67 65 72 20 74 68 65 20 61 74 74   Trigger the att
9c4d0 61 63 6b 2e 0a 09 09 20 2a 20 20 40 70 61 72 61  ack.... *  @para
9c4e0 6d 20 20 7b 54 69 6d 65 7d 20 20 74 69 6d 65 20  m  {Time}  time 
9c4f0 20 20 20 20 20 57 68 65 6e 20 74 68 65 20 61 74       When the at
9c500 74 61 63 6b 20 73 68 6f 75 6c 64 20 62 65 20 74  tack should be t
9c510 72 69 67 67 65 72 65 64 2e 0a 09 09 20 2a 20 20  riggered.... *  
9c520 40 70 61 72 61 6d 20 20 7b 4e 6f 72 6d 61 6c 52  @param  {NormalR
9c530 61 6e 67 65 3d 31 7d 20 20 76 65 6c 6f 63 69 74  ange=1}  velocit
9c540 79 20 20 54 68 65 20 76 65 6c 6f 63 69 74 79 20  y  The velocity 
9c550 74 68 61 74 20 74 68 65 20 65 6e 76 65 6c 6f 70  that the envelop
9c560 65 20 73 68 6f 75 6c 64 20 62 65 20 74 72 69 67  e should be trig
9c570 67 65 72 65 64 20 61 74 2e 0a 09 09 20 2a 20 20  gered at.... *  
9c580 40 72 65 74 75 72 6e 20 20 7b 54 6f 6e 65 2e 4d  @return  {Tone.M
9c590 65 74 61 6c 53 79 6e 74 68 7d 20 20 74 68 69 73  etalSynth}  this
9c5a0 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
9c5b0 2e 4d 65 74 61 6c 53 79 6e 74 68 2e 70 72 6f 74  .MetalSynth.prot
9c5c0 6f 74 79 70 65 2e 74 72 69 67 67 65 72 41 74 74  otype.triggerAtt
9c5d0 61 63 6b 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  ack = function (
9c5e0 74 69 6d 65 2c 20 76 65 6c 29 20 7b 0a 09 20 20  time, vel) {..  
9c5f0 20 20 20 20 20 20 74 69 6d 65 20 3d 20 74 68 69        time = thi
9c600 73 2e 74 6f 53 65 63 6f 6e 64 73 28 74 69 6d 65  s.toSeconds(time
9c610 29 3b 0a 09 20 20 20 20 20 20 20 20 76 65 6c 20  );..        vel 
9c620 3d 20 74 68 69 73 2e 64 65 66 61 75 6c 74 41 72  = this.defaultAr
9c630 67 28 76 65 6c 2c 20 31 29 3b 0a 09 20 20 20 20  g(vel, 1);..    
9c640 20 20 20 20 74 68 69 73 2e 65 6e 76 65 6c 6f 70      this.envelop
9c650 65 2e 74 72 69 67 67 65 72 41 74 74 61 63 6b 28  e.triggerAttack(
9c660 74 69 6d 65 2c 20 76 65 6c 29 3b 0a 09 20 20 20  time, vel);..   
9c670 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
9c680 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  ;..    };..    /
9c690 2a 2a 0a 09 09 20 2a 20 20 54 72 69 67 67 65 72  **... *  Trigger
9c6a0 20 74 68 65 20 72 65 6c 65 61 73 65 20 6f 66 20   the release of 
9c6b0 74 68 65 20 65 6e 76 65 6c 6f 70 65 2e 0a 09 09  the envelope....
9c6c0 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 54 69 6d   *  @param  {Tim
9c6d0 65 7d 20 20 74 69 6d 65 20 20 20 20 20 20 57 68  e}  time      Wh
9c6e0 65 6e 20 74 68 65 20 72 65 6c 65 61 73 65 20 73  en the release s
9c6f0 68 6f 75 6c 64 20 62 65 20 74 72 69 67 67 65 72  hould be trigger
9c700 65 64 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72  ed.... *  @retur
9c710 6e 20 20 7b 54 6f 6e 65 2e 4d 65 74 61 6c 53 79  n  {Tone.MetalSy
9c720 6e 74 68 7d 20 20 74 68 69 73 0a 09 09 20 2a 2f  nth}  this... */
9c730 0a 09 20 20 20 20 54 6f 6e 65 2e 4d 65 74 61 6c  ..    Tone.Metal
9c740 53 79 6e 74 68 2e 70 72 6f 74 6f 74 79 70 65 2e  Synth.prototype.
9c750 74 72 69 67 67 65 72 52 65 6c 65 61 73 65 20 3d  triggerRelease =
9c760 20 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65 29   function (time)
9c770 20 7b 0a 09 20 20 20 20 20 20 20 20 74 69 6d 65   {..        time
9c780 20 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64   = this.toSecond
9c790 73 28 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20  s(time);..      
9c7a0 20 20 74 68 69 73 2e 65 6e 76 65 6c 6f 70 65 2e    this.envelope.
9c7b0 74 72 69 67 67 65 72 52 65 6c 65 61 73 65 28 74  triggerRelease(t
9c7c0 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 72  ime);..        r
9c7d0 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20  eturn this;..   
9c7e0 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20   };..    /**... 
9c7f0 2a 20 20 54 72 69 67 67 65 72 20 74 68 65 20 61  *  Trigger the a
9c800 74 74 61 63 6b 20 61 6e 64 20 72 65 6c 65 61 73  ttack and releas
9c810 65 20 6f 66 20 74 68 65 20 65 6e 76 65 6c 6f 70  e of the envelop
9c820 65 20 61 66 74 65 72 20 74 68 65 20 67 69 76 65  e after the give
9c830 6e 20 0a 09 09 20 2a 20 20 64 75 72 61 74 69 6f  n ... *  duratio
9c840 6e 2e 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  n. ... *  @param
9c850 20 20 7b 54 69 6d 65 7d 20 20 64 75 72 61 74 69    {Time}  durati
9c860 6f 6e 20 20 54 68 65 20 64 75 72 61 74 69 6f 6e  on  The duration
9c870 20 62 65 66 6f 72 65 20 74 72 69 67 67 65 72 69   before triggeri
9c880 6e 67 20 74 68 65 20 72 65 6c 65 61 73 65 0a 09  ng the release..
9c890 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 54 69  . *  @param  {Ti
9c8a0 6d 65 7d 20 20 74 69 6d 65 20 20 20 20 20 20 57  me}  time      W
9c8b0 68 65 6e 20 74 68 65 20 61 74 74 61 63 6b 20 73  hen the attack s
9c8c0 68 6f 75 6c 64 20 62 65 20 74 72 69 67 67 65 72  hould be trigger
9c8d0 65 64 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  ed.... *  @param
9c8e0 20 20 7b 4e 6f 72 6d 61 6c 52 61 6e 67 65 3d 31    {NormalRange=1
9c8f0 7d 20 20 76 65 6c 6f 63 69 74 79 20 20 54 68 65  }  velocity  The
9c900 20 76 65 6c 6f 63 69 74 79 20 74 68 61 74 20 74   velocity that t
9c910 68 65 20 65 6e 76 65 6c 6f 70 65 20 73 68 6f 75  he envelope shou
9c920 6c 64 20 62 65 20 74 72 69 67 67 65 72 65 64 20  ld be triggered 
9c930 61 74 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72  at.... *  @retur
9c940 6e 20 20 7b 54 6f 6e 65 2e 4d 65 74 61 6c 53 79  n  {Tone.MetalSy
9c950 6e 74 68 7d 20 20 74 68 69 73 0a 09 09 20 2a 2f  nth}  this... */
9c960 0a 09 20 20 20 20 54 6f 6e 65 2e 4d 65 74 61 6c  ..    Tone.Metal
9c970 53 79 6e 74 68 2e 70 72 6f 74 6f 74 79 70 65 2e  Synth.prototype.
9c980 74 72 69 67 67 65 72 41 74 74 61 63 6b 52 65 6c  triggerAttackRel
9c990 65 61 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20  ease = function 
9c9a0 28 64 75 72 61 74 69 6f 6e 2c 20 74 69 6d 65 2c  (duration, time,
9c9b0 20 76 65 6c 6f 63 69 74 79 29 20 7b 0a 09 20 20   velocity) {..  
9c9c0 20 20 20 20 20 20 74 69 6d 65 20 3d 20 74 68 69        time = thi
9c9d0 73 2e 74 6f 53 65 63 6f 6e 64 73 28 74 69 6d 65  s.toSeconds(time
9c9e0 29 3b 0a 09 20 20 20 20 20 20 20 20 64 75 72 61  );..        dura
9c9f0 74 69 6f 6e 20 3d 20 74 68 69 73 2e 74 6f 53 65  tion = this.toSe
9ca00 63 6f 6e 64 73 28 64 75 72 61 74 69 6f 6e 29 3b  conds(duration);
9ca10 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 74  ..        this.t
9ca20 72 69 67 67 65 72 41 74 74 61 63 6b 28 74 69 6d  riggerAttack(tim
9ca30 65 2c 20 76 65 6c 6f 63 69 74 79 29 3b 0a 09 20  e, velocity);.. 
9ca40 20 20 20 20 20 20 20 74 68 69 73 2e 74 72 69 67         this.trig
9ca50 67 65 72 52 65 6c 65 61 73 65 28 74 69 6d 65 20  gerRelease(time 
9ca60 2b 20 64 75 72 61 74 69 6f 6e 29 3b 0a 09 20 20  + duration);..  
9ca70 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
9ca80 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  s;..    };..    
9ca90 2f 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20 6d 6f  /**... *  The mo
9caa0 64 75 6c 61 74 69 6f 6e 49 6e 64 65 78 20 6f 66  dulationIndex of
9cab0 20 74 68 65 20 6f 73 63 69 6c 6c 61 74 6f 72 73   the oscillators
9cac0 20 77 68 69 63 68 20 6d 61 6b 65 20 75 70 20 74   which make up t
9cad0 68 65 20 73 6f 75 72 63 65 2e 0a 09 09 20 2a 20  he source.... * 
9cae0 20 73 65 65 20 54 6f 6e 65 2e 46 4d 4f 73 63 69   see Tone.FMOsci
9caf0 6c 6c 61 74 6f 72 2e 6d 6f 64 75 6c 61 74 69 6f  llator.modulatio
9cb00 6e 49 6e 64 65 78 0a 09 09 20 2a 20 20 40 6d 65  nIndex... *  @me
9cb10 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 4d 65 74 61  mberOf Tone.Meta
9cb20 6c 53 79 6e 74 68 23 0a 09 09 20 2a 20 20 40 74  lSynth#... *  @t
9cb30 79 70 65 20 7b 50 6f 73 69 74 69 76 65 7d 0a 09  ype {Positive}..
9cb40 09 20 2a 20 20 40 6e 61 6d 65 20 20 6d 6f 64 75  . *  @name  modu
9cb50 6c 61 74 69 6f 6e 49 6e 64 65 78 0a 09 09 20 2a  lationIndex... *
9cb60 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65  /..    Object.de
9cb70 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e  fineProperty(Ton
9cb80 65 2e 4d 65 74 61 6c 53 79 6e 74 68 2e 70 72 6f  e.MetalSynth.pro
9cb90 74 6f 74 79 70 65 2c 20 27 6d 6f 64 75 6c 61 74  totype, 'modulat
9cba0 69 6f 6e 49 6e 64 65 78 27 2c 20 7b 0a 09 20 20  ionIndex', {..  
9cbb0 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74        get: funct
9cbc0 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
9cbd0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
9cbe0 73 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72 73 5b 30  s._oscillators[0
9cbf0 5d 2e 6d 6f 64 75 6c 61 74 69 6f 6e 49 6e 64 65  ].modulationInde
9cc00 78 2e 76 61 6c 75 65 3b 0a 09 20 20 20 20 20 20  x.value;..      
9cc10 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65    },..        se
9cc20 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 76 61 6c  t: function (val
9cc30 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
9cc40 20 66 6f 72 20 28 76 61 72 20 69 20 3d 20 30 3b   for (var i = 0;
9cc50 20 69 20 3c 20 74 68 69 73 2e 5f 6f 73 63 69 6c   i < this._oscil
9cc60 6c 61 74 6f 72 73 2e 6c 65 6e 67 74 68 3b 20 69  lators.length; i
9cc70 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  ++) {..         
9cc80 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6f 73 63         this._osc
9cc90 69 6c 6c 61 74 6f 72 73 5b 69 5d 2e 6d 6f 64 75  illators[i].modu
9cca0 6c 61 74 69 6f 6e 49 6e 64 65 78 2e 76 61 6c 75  lationIndex.valu
9ccb0 65 20 3d 20 76 61 6c 3b 0a 09 20 20 20 20 20 20  e = val;..      
9ccc0 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
9ccd0 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20   }..    });..   
9cce0 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20 68   /**... *  The h
9ccf0 61 72 6d 6f 6e 69 63 69 74 79 20 6f 66 20 74 68  armonicity of th
9cd00 65 20 6f 73 63 69 6c 6c 61 74 6f 72 73 20 77 68  e oscillators wh
9cd10 69 63 68 20 6d 61 6b 65 20 75 70 20 74 68 65 20  ich make up the 
9cd20 73 6f 75 72 63 65 2e 0a 09 09 20 2a 20 20 73 65  source.... *  se
9cd30 65 20 54 6f 6e 65 2e 46 4d 4f 73 63 69 6c 6c 61  e Tone.FMOscilla
9cd40 74 6f 72 2e 68 61 72 6d 6f 6e 69 63 69 74 79 0a  tor.harmonicity.
9cd50 09 09 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20  .. *  @memberOf 
9cd60 54 6f 6e 65 2e 4d 65 74 61 6c 53 79 6e 74 68 23  Tone.MetalSynth#
9cd70 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b 50 6f  ... *  @type {Po
9cd80 73 69 74 69 76 65 7d 0a 09 09 20 2a 20 20 40 6e  sitive}... *  @n
9cd90 61 6d 65 20 20 68 61 72 6d 6f 6e 69 63 69 74 79  ame  harmonicity
9cda0 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65  ... */..    Obje
9cdb0 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74  ct.definePropert
9cdc0 79 28 54 6f 6e 65 2e 4d 65 74 61 6c 53 79 6e 74  y(Tone.MetalSynt
9cdd0 68 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 68 61  h.prototype, 'ha
9cde0 72 6d 6f 6e 69 63 69 74 79 27 2c 20 7b 0a 09 20  rmonicity', {.. 
9cdf0 20 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63         get: func
9ce00 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
9ce10 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
9ce20 69 73 2e 5f 6f 73 63 69 6c 6c 61 74 6f 72 73 5b  is._oscillators[
9ce30 30 5d 2e 68 61 72 6d 6f 6e 69 63 69 74 79 2e 76  0].harmonicity.v
9ce40 61 6c 75 65 3b 0a 09 20 20 20 20 20 20 20 20 7d  alue;..        }
9ce50 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20  ,..        set: 
9ce60 66 75 6e 63 74 69 6f 6e 20 28 76 61 6c 29 20 7b  function (val) {
9ce70 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
9ce80 72 20 28 76 61 72 20 69 20 3d 20 30 3b 20 69 20  r (var i = 0; i 
9ce90 3c 20 74 68 69 73 2e 5f 6f 73 63 69 6c 6c 61 74  < this._oscillat
9cea0 6f 72 73 2e 6c 65 6e 67 74 68 3b 20 69 2b 2b 29  ors.length; i++)
9ceb0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9cec0 20 20 20 20 74 68 69 73 2e 5f 6f 73 63 69 6c 6c      this._oscill
9ced0 61 74 6f 72 73 5b 69 5d 2e 68 61 72 6d 6f 6e 69  ators[i].harmoni
9cee0 63 69 74 79 2e 76 61 6c 75 65 20 3d 20 76 61 6c  city.value = val
9cef0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
9cf00 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
9cf10 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09   });..    /**...
9cf20 20 2a 20 20 54 68 65 20 66 72 65 71 75 65 6e 63   *  The frequenc
9cf30 79 20 6f 66 20 74 68 65 20 68 69 67 68 70 61 73  y of the highpas
9cf40 73 20 66 69 6c 74 65 72 20 61 74 74 61 63 68 65  s filter attache
9cf50 64 20 74 6f 20 74 68 65 20 65 6e 76 65 6c 6f 70  d to the envelop
9cf60 65 0a 09 09 20 2a 20 20 40 6d 65 6d 62 65 72 4f  e... *  @memberO
9cf70 66 20 54 6f 6e 65 2e 4d 65 74 61 6c 53 79 6e 74  f Tone.MetalSynt
9cf80 68 23 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b  h#... *  @type {
9cf90 46 72 65 71 75 65 6e 63 79 7d 0a 09 09 20 2a 20  Frequency}... * 
9cfa0 20 40 6e 61 6d 65 20 20 72 65 73 6f 6e 61 6e 63   @name  resonanc
9cfb0 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a  e... */..    Obj
9cfc0 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72  ect.defineProper
9cfd0 74 79 28 54 6f 6e 65 2e 4d 65 74 61 6c 53 79 6e  ty(Tone.MetalSyn
9cfe0 74 68 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 72  th.prototype, 'r
9cff0 65 73 6f 6e 61 6e 63 65 27 2c 20 7b 0a 09 20 20  esonance', {..  
9d000 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74        get: funct
9d010 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
9d020 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
9d030 73 2e 5f 66 69 6c 74 65 72 46 72 65 71 53 63 61  s._filterFreqSca
9d040 6c 65 72 2e 6d 69 6e 3b 0a 09 20 20 20 20 20 20  ler.min;..      
9d050 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65    },..        se
9d060 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 76 61 6c  t: function (val
9d070 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
9d080 20 74 68 69 73 2e 5f 66 69 6c 74 65 72 46 72 65   this._filterFre
9d090 71 53 63 61 6c 65 72 2e 6d 69 6e 20 3d 20 76 61  qScaler.min = va
9d0a0 6c 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
9d0b0 74 68 69 73 2e 6f 63 74 61 76 65 73 20 3d 20 74  this.octaves = t
9d0c0 68 69 73 2e 5f 6f 63 74 61 76 65 73 3b 0a 09 20  his._octaves;.. 
9d0d0 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29         }..    })
9d0e0 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
9d0f0 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6f   The number of o
9d100 63 74 61 76 65 73 20 61 62 6f 76 65 20 74 68 65  ctaves above the
9d110 20 22 72 65 73 6f 6e 61 6e 63 65 22 20 66 72 65   "resonance" fre
9d120 71 75 65 6e 63 79 0a 09 09 20 2a 20 20 74 68 61  quency... *  tha
9d130 74 20 74 68 65 20 66 69 6c 74 65 72 20 72 61 6d  t the filter ram
9d140 70 73 20 64 75 72 69 6e 67 20 74 68 65 20 61 74  ps during the at
9d150 74 61 63 6b 2f 64 65 63 61 79 20 65 6e 76 65 6c  tack/decay envel
9d160 6f 70 65 0a 09 09 20 2a 20 20 40 6d 65 6d 62 65  ope... *  @membe
9d170 72 4f 66 20 54 6f 6e 65 2e 4d 65 74 61 6c 53 79  rOf Tone.MetalSy
9d180 6e 74 68 23 0a 09 09 20 2a 20 20 40 74 79 70 65  nth#... *  @type
9d190 20 7b 4e 75 6d 62 65 72 7d 0a 09 09 20 2a 20 20   {Number}... *  
9d1a0 40 6e 61 6d 65 20 20 6f 63 74 61 76 65 73 0a 09  @name  octaves..
9d1b0 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74  . */..    Object
9d1c0 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28  .defineProperty(
9d1d0 54 6f 6e 65 2e 4d 65 74 61 6c 53 79 6e 74 68 2e  Tone.MetalSynth.
9d1e0 70 72 6f 74 6f 74 79 70 65 2c 20 27 6f 63 74 61  prototype, 'octa
9d1f0 76 65 73 27 2c 20 7b 0a 09 20 20 20 20 20 20 20  ves', {..       
9d200 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   get: function (
9d210 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
9d220 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 6f 63   return this._oc
9d230 74 61 76 65 73 3b 0a 09 20 20 20 20 20 20 20 20  taves;..        
9d240 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a  },..        set:
9d250 20 66 75 6e 63 74 69 6f 6e 20 28 6f 63 74 73 29   function (octs)
9d260 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9d270 74 68 69 73 2e 5f 6f 63 74 61 76 65 73 20 3d 20  this._octaves = 
9d280 6f 63 74 73 3b 0a 09 20 20 20 20 20 20 20 20 20  octs;..         
9d290 20 20 20 74 68 69 73 2e 5f 66 69 6c 74 65 72 46     this._filterF
9d2a0 72 65 71 53 63 61 6c 65 72 2e 6d 61 78 20 3d 20  reqScaler.max = 
9d2b0 74 68 69 73 2e 5f 66 69 6c 74 65 72 46 72 65 71  this._filterFreq
9d2c0 53 63 61 6c 65 72 2e 6d 69 6e 20 2a 20 4d 61 74  Scaler.min * Mat
9d2d0 68 2e 70 6f 77 28 32 2c 20 6f 63 74 73 29 3b 0a  h.pow(2, octs);.
9d2e0 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
9d2f0 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  });..    /**... 
9d300 2a 20 20 43 6c 65 61 6e 20 75 70 0a 09 09 20 2a  *  Clean up... *
9d310 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65    @returns {Tone
9d320 2e 4d 65 74 61 6c 53 79 6e 74 68 7d 20 74 68 69  .MetalSynth} thi
9d330 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  s... */..    Ton
9d340 65 2e 4d 65 74 61 6c 53 79 6e 74 68 2e 70 72 6f  e.MetalSynth.pro
9d350 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d  totype.dispose =
9d360 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
9d370 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 49 6e 73          Tone.Ins
9d380 74 72 75 6d 65 6e 74 2e 70 72 6f 74 6f 74 79 70  trument.prototyp
9d390 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74  e.dispose.call(t
9d3a0 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20 20 66  his);..        f
9d3b0 6f 72 20 28 76 61 72 20 69 20 3d 20 30 3b 20 69  or (var i = 0; i
9d3c0 20 3c 20 74 68 69 73 2e 5f 6f 73 63 69 6c 6c 61   < this._oscilla
9d3d0 74 6f 72 73 2e 6c 65 6e 67 74 68 3b 20 69 2b 2b  tors.length; i++
9d3e0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
9d3f0 20 74 68 69 73 2e 5f 6f 73 63 69 6c 6c 61 74 6f   this._oscillato
9d400 72 73 5b 69 5d 2e 64 69 73 70 6f 73 65 28 29 3b  rs[i].dispose();
9d410 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
9d420 69 73 2e 5f 66 72 65 71 4d 75 6c 74 69 70 6c 69  is._freqMultipli
9d430 65 72 73 5b 69 5d 2e 64 69 73 70 6f 73 65 28 29  ers[i].dispose()
9d440 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20  ;..        }..  
9d450 20 20 20 20 20 20 74 68 69 73 2e 5f 6f 73 63 69        this._osci
9d460 6c 6c 61 74 6f 72 73 20 3d 20 6e 75 6c 6c 3b 0a  llators = null;.
9d470 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 66  .        this._f
9d480 72 65 71 4d 75 6c 74 69 70 6c 69 65 72 73 20 3d  reqMultipliers =
9d490 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
9d4a0 74 68 69 73 2e 66 72 65 71 75 65 6e 63 79 2e 64  this.frequency.d
9d4b0 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20  ispose();..     
9d4c0 20 20 20 74 68 69 73 2e 66 72 65 71 75 65 6e 63     this.frequenc
9d4d0 79 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20  y = null;..     
9d4e0 20 20 20 74 68 69 73 2e 5f 66 69 6c 74 65 72 46     this._filterF
9d4f0 72 65 71 53 63 61 6c 65 72 2e 64 69 73 70 6f 73  reqScaler.dispos
9d500 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  e();..        th
9d510 69 73 2e 5f 66 69 6c 74 65 72 46 72 65 71 53 63  is._filterFreqSc
9d520 61 6c 65 72 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20  aler = null;..  
9d530 20 20 20 20 20 20 74 68 69 73 2e 5f 61 6d 70 6c        this._ampl
9d540 69 74 75 65 2e 64 69 73 70 6f 73 65 28 29 3b 0a  itue.dispose();.
9d550 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 61  .        this._a
9d560 6d 70 6c 69 74 75 65 20 3d 20 6e 75 6c 6c 3b 0a  mplitue = null;.
9d570 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 65 6e  .        this.en
9d580 76 65 6c 6f 70 65 2e 64 69 73 70 6f 73 65 28 29  velope.dispose()
9d590 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
9d5a0 65 6e 76 65 6c 6f 70 65 20 3d 20 6e 75 6c 6c 3b  envelope = null;
9d5b0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
9d5c0 68 69 67 68 70 61 73 73 2e 64 69 73 70 6f 73 65  highpass.dispose
9d5d0 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ();..        thi
9d5e0 73 2e 5f 68 69 67 68 70 61 73 73 20 3d 20 6e 75  s._highpass = nu
9d5f0 6c 6c 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  ll;..    };..   
9d600 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 4d 65 74   return Tone.Met
9d610 61 6c 53 79 6e 74 68 3b 0a 09 7d 29 3b 0a 09 4d  alSynth;..});..M
9d620 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28  odule(function (
9d630 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09 20  Tone) {..    .. 
9d640 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c     /**... *  @cl
9d650 61 73 73 20 20 54 6f 6e 65 2e 4e 6f 69 73 65 20  ass  Tone.Noise 
9d660 69 73 20 61 20 6e 6f 69 73 65 20 67 65 6e 65 72  is a noise gener
9d670 61 74 6f 72 2e 20 49 74 20 75 73 65 73 20 6c 6f  ator. It uses lo
9d680 6f 70 65 64 20 6e 6f 69 73 65 20 62 75 66 66 65  oped noise buffe
9d690 72 73 20 74 6f 20 73 61 76 65 20 6f 6e 20 70 65  rs to save on pe
9d6a0 72 66 6f 72 6d 61 6e 63 65 2e 0a 09 09 20 2a 20  rformance.... * 
9d6b0 20 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 4e 6f           Tone.No
9d6c0 69 73 65 20 73 75 70 70 6f 72 74 73 20 74 68 65  ise supports the
9d6d0 20 6e 6f 69 73 65 20 74 79 70 65 73 3a 20 22 70   noise types: "p
9d6e0 69 6e 6b 22 2c 20 22 77 68 69 74 65 22 2c 20 61  ink", "white", a
9d6f0 6e 64 20 22 62 72 6f 77 6e 22 2e 20 52 65 61 64  nd "brown". Read
9d700 20 6d 6f 72 65 20 61 62 6f 75 74 0a 09 09 20 2a   more about... *
9d710 20 20 20 20 20 20 20 20 20 20 63 6f 6c 6f 72 73            colors
9d720 20 6f 66 20 6e 6f 69 73 65 20 6f 6e 20 5b 57 69   of noise on [Wi
9d730 6b 69 70 65 64 69 61 5d 28 68 74 74 70 73 3a 2f  kipedia](https:/
9d740 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
9d750 67 2f 77 69 6b 69 2f 43 6f 6c 6f 72 73 5f 6f 66  g/wiki/Colors_of
9d760 5f 6e 6f 69 73 65 29 2e 0a 09 09 20 2a 0a 09 09  _noise).... *...
9d770 20 2a 20 20 40 63 6f 6e 73 74 72 75 63 74 6f 72   *  @constructor
9d780 0a 09 09 20 2a 20 20 40 65 78 74 65 6e 64 73 20  ... *  @extends 
9d790 7b 54 6f 6e 65 2e 53 6f 75 72 63 65 7d 0a 09 09  {Tone.Source}...
9d7a0 20 2a 20 20 40 70 61 72 61 6d 20 7b 73 74 72 69   *  @param {stri
9d7b0 6e 67 7d 20 74 79 70 65 20 74 68 65 20 6e 6f 69  ng} type the noi
9d7c0 73 65 20 74 79 70 65 20 28 77 68 69 74 65 7c 70  se type (white|p
9d7d0 69 6e 6b 7c 62 72 6f 77 6e 29 0a 09 09 20 2a 20  ink|brown)... * 
9d7e0 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 2f   @example... * /
9d7f0 2f 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20  /initialize the 
9d800 6e 6f 69 73 65 20 61 6e 64 20 73 74 61 72 74 0a  noise and start.
9d810 09 09 20 2a 20 76 61 72 20 6e 6f 69 73 65 20 3d  .. * var noise =
9d820 20 6e 65 77 20 54 6f 6e 65 2e 4e 6f 69 73 65 28   new Tone.Noise(
9d830 22 70 69 6e 6b 22 29 2e 73 74 61 72 74 28 29 3b  "pink").start();
9d840 0a 09 09 20 2a 20 0a 09 09 20 2a 20 2f 2f 6d 61  ... * ... * //ma
9d850 6b 65 20 61 6e 20 61 75 74 6f 66 69 6c 74 65 72  ke an autofilter
9d860 20 74 6f 20 73 68 61 70 65 20 74 68 65 20 6e 6f   to shape the no
9d870 69 73 65 0a 09 09 20 2a 20 76 61 72 20 61 75 74  ise... * var aut
9d880 6f 46 69 6c 74 65 72 20 3d 20 6e 65 77 20 54 6f  oFilter = new To
9d890 6e 65 2e 41 75 74 6f 46 69 6c 74 65 72 28 7b 0a  ne.AutoFilter({.
9d8a0 09 09 20 2a 20 09 22 66 72 65 71 75 65 6e 63 79  .. * ."frequency
9d8b0 22 20 3a 20 22 38 6d 22 2c 20 0a 09 09 20 2a 20  " : "8m", ... * 
9d8c0 09 22 6d 69 6e 22 20 3a 20 38 30 30 2c 20 0a 09  ."min" : 800, ..
9d8d0 09 20 2a 20 09 22 6d 61 78 22 20 3a 20 31 35 30  . * ."max" : 150
9d8e0 30 30 0a 09 09 20 2a 20 7d 29 2e 63 6f 6e 6e 65  00... * }).conne
9d8f0 63 74 28 54 6f 6e 65 2e 4d 61 73 74 65 72 29 3b  ct(Tone.Master);
9d900 0a 09 09 20 2a 20 0a 09 09 20 2a 20 2f 2f 63 6f  ... * ... * //co
9d910 6e 6e 65 63 74 20 74 68 65 20 6e 6f 69 73 65 0a  nnect the noise.
9d920 09 09 20 2a 20 6e 6f 69 73 65 2e 63 6f 6e 6e 65  .. * noise.conne
9d930 63 74 28 61 75 74 6f 46 69 6c 74 65 72 29 3b 0a  ct(autoFilter);.
9d940 09 09 20 2a 20 2f 2f 73 74 61 72 74 20 74 68 65  .. * //start the
9d950 20 61 75 74 6f 66 69 6c 74 65 72 20 4c 46 4f 0a   autofilter LFO.
9d960 09 09 20 2a 20 61 75 74 6f 46 69 6c 74 65 72 2e  .. * autoFilter.
9d970 73 74 61 72 74 28 29 0a 09 09 20 2a 2f 0a 09 20  start()... */.. 
9d980 20 20 20 54 6f 6e 65 2e 4e 6f 69 73 65 20 3d 20     Tone.Noise = 
9d990 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
9d9a0 20 20 20 20 20 20 20 76 61 72 20 6f 70 74 69 6f         var optio
9d9b0 6e 73 20 3d 20 74 68 69 73 2e 6f 70 74 69 6f 6e  ns = this.option
9d9c0 73 4f 62 6a 65 63 74 28 61 72 67 75 6d 65 6e 74  sObject(argument
9d9d0 73 2c 20 5b 27 74 79 70 65 27 5d 2c 20 54 6f 6e  s, ['type'], Ton
9d9e0 65 2e 4e 6f 69 73 65 2e 64 65 66 61 75 6c 74 73  e.Noise.defaults
9d9f0 29 3b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65  );..        Tone
9da00 2e 53 6f 75 72 63 65 2e 63 61 6c 6c 28 74 68 69  .Source.call(thi
9da10 73 2c 20 6f 70 74 69 6f 6e 73 29 3b 0a 09 20 20  s, options);..  
9da20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
9da30 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 20   @private.... * 
9da40 20 40 74 79 70 65 20 7b 41 75 64 69 6f 42 75 66   @type {AudioBuf
9da50 66 65 72 53 6f 75 72 63 65 4e 6f 64 65 7d 0a 09  ferSourceNode}..
9da60 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
9da70 68 69 73 2e 5f 73 6f 75 72 63 65 20 3d 20 6e 75  his._source = nu
9da80 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  ll;..        /**
9da90 0a 09 09 09 20 2a 20 20 74 68 65 20 62 75 66 66  .... *  the buff
9daa0 65 72 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61  er.... *  @priva
9dab0 74 65 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  te.... *  @type 
9dac0 7b 41 75 64 69 6f 42 75 66 66 65 72 7d 0a 09 09  {AudioBuffer}...
9dad0 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
9dae0 69 73 2e 5f 62 75 66 66 65 72 20 3d 20 6e 75 6c  is._buffer = nul
9daf0 6c 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  l;..        /**.
9db00 09 09 09 20 2a 20 20 54 68 65 20 70 6c 61 79 62  ... *  The playb
9db10 61 63 6b 20 72 61 74 65 20 6f 66 20 74 68 65 20  ack rate of the 
9db20 6e 6f 69 73 65 2e 20 41 66 66 65 63 74 73 0a 09  noise. Affects..
9db30 09 09 20 2a 20 20 74 68 65 20 22 66 72 65 71 75  .. *  the "frequ
9db40 65 6e 63 79 22 20 6f 66 20 74 68 65 20 6e 6f 69  ency" of the noi
9db50 73 65 2e 0a 09 09 09 20 2a 20 20 40 74 79 70 65  se..... *  @type
9db60 20 7b 50 6f 73 69 74 69 76 65 7d 0a 09 09 09 20   {Positive}.... 
9db70 2a 20 20 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a  *  @signal.... *
9db80 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
9db90 5f 70 6c 61 79 62 61 63 6b 52 61 74 65 20 3d 20  _playbackRate = 
9dba0 6f 70 74 69 6f 6e 73 2e 70 6c 61 79 62 61 63 6b  options.playback
9dbb0 52 61 74 65 3b 0a 09 20 20 20 20 20 20 20 20 74  Rate;..        t
9dbc0 68 69 73 2e 74 79 70 65 20 3d 20 6f 70 74 69 6f  his.type = optio
9dbd0 6e 73 2e 74 79 70 65 3b 0a 09 20 20 20 20 7d 3b  ns.type;..    };
9dbe0 0a 09 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e  ..    Tone.exten
9dbf0 64 28 54 6f 6e 65 2e 4e 6f 69 73 65 2c 20 54 6f  d(Tone.Noise, To
9dc00 6e 65 2e 53 6f 75 72 63 65 29 3b 0a 09 20 20 20  ne.Source);..   
9dc10 20 2f 2a 2a 0a 09 09 20 2a 20 20 74 68 65 20 64   /**... *  the d
9dc20 65 66 61 75 6c 74 20 70 61 72 61 6d 65 74 65 72  efault parameter
9dc30 73 0a 09 09 20 2a 0a 09 09 20 2a 20 20 40 73 74  s... *... *  @st
9dc40 61 74 69 63 0a 09 09 20 2a 20 20 40 63 6f 6e 73  atic... *  @cons
9dc50 74 0a 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4f  t... *  @type {O
9dc60 62 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a 09 20 20  bject}... */..  
9dc70 20 20 54 6f 6e 65 2e 4e 6f 69 73 65 2e 64 65 66    Tone.Noise.def
9dc80 61 75 6c 74 73 20 3d 20 7b 0a 09 20 20 20 20 20  aults = {..     
9dc90 20 20 20 27 74 79 70 65 27 3a 20 27 77 68 69 74     'type': 'whit
9dca0 65 27 2c 0a 09 20 20 20 20 20 20 20 20 27 70 6c  e',..        'pl
9dcb0 61 79 62 61 63 6b 52 61 74 65 27 3a 20 31 0a 09  aybackRate': 1..
9dcc0 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
9dcd0 09 09 20 2a 20 54 68 65 20 74 79 70 65 20 6f 66  .. * The type of
9dce0 20 74 68 65 20 6e 6f 69 73 65 2e 20 43 61 6e 20   the noise. Can 
9dcf0 62 65 20 22 77 68 69 74 65 22 2c 20 22 62 72 6f  be "white", "bro
9dd00 77 6e 22 2c 20 6f 72 20 22 70 69 6e 6b 22 2e 20  wn", or "pink". 
9dd10 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20  ... * @memberOf 
9dd20 54 6f 6e 65 2e 4e 6f 69 73 65 23 0a 09 09 20 2a  Tone.Noise#... *
9dd30 20 40 74 79 70 65 20 7b 73 74 72 69 6e 67 7d 0a   @type {string}.
9dd40 09 09 20 2a 20 40 6e 61 6d 65 20 74 79 70 65 0a  .. * @name type.
9dd50 09 09 20 2a 20 40 65 78 61 6d 70 6c 65 0a 09 09  .. * @example...
9dd60 20 2a 20 6e 6f 69 73 65 2e 74 79 70 65 20 3d 20   * noise.type = 
9dd70 22 77 68 69 74 65 22 3b 0a 09 09 20 2a 2f 0a 09  "white";... */..
9dd80 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e      Object.defin
9dd90 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 4e  eProperty(Tone.N
9dda0 6f 69 73 65 2e 70 72 6f 74 6f 74 79 70 65 2c 20  oise.prototype, 
9ddb0 27 74 79 70 65 27 2c 20 7b 0a 09 20 20 20 20 20  'type', {..     
9ddc0 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e     get: function
9ddd0 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20   () {..         
9dde0 20 20 20 69 66 20 28 74 68 69 73 2e 5f 62 75 66     if (this._buf
9ddf0 66 65 72 20 3d 3d 3d 20 5f 77 68 69 74 65 4e 6f  fer === _whiteNo
9de00 69 73 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ise) {..        
9de10 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 27          return '
9de20 77 68 69 74 65 27 3b 0a 09 20 20 20 20 20 20 20  white';..       
9de30 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28       } else if (
9de40 74 68 69 73 2e 5f 62 75 66 66 65 72 20 3d 3d 3d  this._buffer ===
9de50 20 5f 62 72 6f 77 6e 4e 6f 69 73 65 29 20 7b 0a   _brownNoise) {.
9de60 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9de70 20 72 65 74 75 72 6e 20 27 62 72 6f 77 6e 27 3b   return 'brown';
9de80 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  ..            } 
9de90 65 6c 73 65 20 69 66 20 28 74 68 69 73 2e 5f 62  else if (this._b
9dea0 75 66 66 65 72 20 3d 3d 3d 20 5f 70 69 6e 6b 4e  uffer === _pinkN
9deb0 6f 69 73 65 29 20 7b 0a 09 20 20 20 20 20 20 20  oise) {..       
9dec0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
9ded0 27 70 69 6e 6b 27 3b 0a 09 20 20 20 20 20 20 20  'pink';..       
9dee0 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
9def0 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a  },..        set:
9df00 20 66 75 6e 63 74 69 6f 6e 20 28 74 79 70 65 29   function (type)
9df10 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9df20 69 66 20 28 74 68 69 73 2e 74 79 70 65 20 21 3d  if (this.type !=
9df30 3d 20 74 79 70 65 29 20 7b 0a 09 20 20 20 20 20  = type) {..     
9df40 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63             switc
9df50 68 20 28 74 79 70 65 29 20 7b 0a 09 20 20 20 20  h (type) {..    
9df60 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
9df70 20 27 77 68 69 74 65 27 3a 0a 09 20 20 20 20 20   'white':..     
9df80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
9df90 68 69 73 2e 5f 62 75 66 66 65 72 20 3d 20 5f 77  his._buffer = _w
9dfa0 68 69 74 65 4e 6f 69 73 65 3b 0a 09 20 20 20 20  hiteNoise;..    
9dfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9dfc0 62 72 65 61 6b 3b 0a 09 20 20 20 20 20 20 20 20  break;..        
9dfd0 20 20 20 20 20 20 20 20 63 61 73 65 20 27 70 69          case 'pi
9dfe0 6e 6b 27 3a 0a 09 20 20 20 20 20 20 20 20 20 20  nk':..          
9dff0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
9e000 62 75 66 66 65 72 20 3d 20 5f 70 69 6e 6b 4e 6f  buffer = _pinkNo
9e010 69 73 65 3b 0a 09 20 20 20 20 20 20 20 20 20 20  ise;..          
9e020 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
9e030 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9e040 20 20 63 61 73 65 20 27 62 72 6f 77 6e 27 3a 0a    case 'brown':.
9e050 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9e060 20 20 20 20 20 74 68 69 73 2e 5f 62 75 66 66 65       this._buffe
9e070 72 20 3d 20 5f 62 72 6f 77 6e 4e 6f 69 73 65 3b  r = _brownNoise;
9e080 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9e090 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 09 20 20        break;..  
9e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
9e0b0 66 61 75 6c 74 3a 0a 09 20 20 20 20 20 20 20 20  fault:..        
9e0c0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
9e0d0 77 20 6e 65 77 20 54 79 70 65 45 72 72 6f 72 28  w new TypeError(
9e0e0 27 54 6f 6e 65 2e 4e 6f 69 73 65 3a 20 69 6e 76  'Tone.Noise: inv
9e0f0 61 6c 69 64 20 74 79 70 65 3a 20 27 20 2b 20 74  alid type: ' + t
9e100 79 70 65 29 3b 0a 09 20 20 20 20 20 20 20 20 20  ype);..         
9e110 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
9e120 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66 20 69            //if i
9e130 74 27 73 20 70 6c 61 79 69 6e 67 2c 20 73 74 6f  t's playing, sto
9e140 70 20 61 6e 64 20 72 65 73 74 61 72 74 20 69 74  p and restart it
9e150 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9e160 20 20 69 66 20 28 74 68 69 73 2e 73 74 61 74 65    if (this.state
9e170 20 3d 3d 3d 20 54 6f 6e 65 2e 53 74 61 74 65 2e   === Tone.State.
9e180 53 74 61 72 74 65 64 29 20 7b 0a 09 20 20 20 20  Started) {..    
9e190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e1a0 76 61 72 20 6e 6f 77 20 3d 20 74 68 69 73 2e 6e  var now = this.n
9e1b0 6f 77 28 29 20 2b 20 74 68 69 73 2e 62 6c 6f 63  ow() + this.bloc
9e1c0 6b 54 69 6d 65 3b 0a 09 20 20 20 20 20 20 20 20  kTime;..        
9e1d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 72 65              //re
9e1e0 6d 6f 76 65 20 74 68 65 20 6c 69 73 74 65 6e 65  move the listene
9e1f0 72 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
9e200 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 74 6f         this._sto
9e210 70 28 6e 6f 77 29 3b 0a 09 20 20 20 20 20 20 20  p(now);..       
9e220 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
9e230 73 2e 5f 73 74 61 72 74 28 6e 6f 77 29 3b 0a 09  s._start(now);..
9e240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e250 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
9e260 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
9e270 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09   });..    /**...
9e280 20 2a 20 20 54 68 65 20 70 6c 61 79 62 61 63 6b   *  The playback
9e290 20 72 61 74 65 20 6f 66 20 74 68 65 20 6e 6f 69   rate of the noi
9e2a0 73 65 2e 20 41 66 66 65 63 74 73 0a 09 09 20 2a  se. Affects... *
9e2b0 20 20 74 68 65 20 22 66 72 65 71 75 65 6e 63 79    the "frequency
9e2c0 22 20 6f 66 20 74 68 65 20 6e 6f 69 73 65 2e 0a  " of the noise..
9e2d0 09 09 20 2a 20 20 40 74 79 70 65 20 7b 50 6f 73  .. *  @type {Pos
9e2e0 69 74 69 76 65 7d 0a 09 09 20 2a 20 20 40 73 69  itive}... *  @si
9e2f0 67 6e 61 6c 0a 09 09 20 2a 2f 0a 09 20 20 20 20  gnal... */..    
9e300 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f  Object.definePro
9e310 70 65 72 74 79 28 54 6f 6e 65 2e 4e 6f 69 73 65  perty(Tone.Noise
9e320 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 70 6c 61  .prototype, 'pla
9e330 79 62 61 63 6b 52 61 74 65 27 2c 20 7b 0a 09 20  ybackRate', {.. 
9e340 20 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63         get: func
9e350 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
9e360 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
9e370 69 73 2e 5f 70 6c 61 79 62 61 63 6b 52 61 74 65  is._playbackRate
9e380 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20  ;..        },.. 
9e390 20 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63         set: func
9e3a0 74 69 6f 6e 20 28 72 61 74 65 29 20 7b 0a 09 20  tion (rate) {.. 
9e3b0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
9e3c0 5f 70 6c 61 79 62 61 63 6b 52 61 74 65 20 3d 20  _playbackRate = 
9e3d0 72 61 74 65 3b 0a 09 20 20 20 20 20 20 20 20 20  rate;..         
9e3e0 20 20 20 69 66 20 28 74 68 69 73 2e 5f 73 6f 75     if (this._sou
9e3f0 72 63 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20  rce) {..        
9e400 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 6f          this._so
9e410 75 72 63 65 2e 70 6c 61 79 62 61 63 6b 52 61 74  urce.playbackRat
9e420 65 2e 76 61 6c 75 65 20 3d 20 72 61 74 65 3b 0a  e.value = rate;.
9e430 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09  .            }..
9e440 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d          }..    }
9e450 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  );..    /**... *
9e460 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 72 74    internal start
9e470 20 6d 65 74 68 6f 64 0a 09 09 20 2a 0a 09 09 20   method... *... 
9e480 2a 20 20 40 70 61 72 61 6d 20 7b 54 69 6d 65 7d  *  @param {Time}
9e490 20 74 69 6d 65 0a 09 09 20 2a 20 20 40 70 72 69   time... *  @pri
9e4a0 76 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20  vate... */..    
9e4b0 54 6f 6e 65 2e 4e 6f 69 73 65 2e 70 72 6f 74 6f  Tone.Noise.proto
9e4c0 74 79 70 65 2e 5f 73 74 61 72 74 20 3d 20 66 75  type._start = fu
9e4d0 6e 63 74 69 6f 6e 20 28 74 69 6d 65 29 20 7b 0a  nction (time) {.
9e4e0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73  .        this._s
9e4f0 6f 75 72 63 65 20 3d 20 74 68 69 73 2e 63 6f 6e  ource = this.con
9e500 74 65 78 74 2e 63 72 65 61 74 65 42 75 66 66 65  text.createBuffe
9e510 72 53 6f 75 72 63 65 28 29 3b 0a 09 20 20 20 20  rSource();..    
9e520 20 20 20 20 74 68 69 73 2e 5f 73 6f 75 72 63 65      this._source
9e530 2e 62 75 66 66 65 72 20 3d 20 74 68 69 73 2e 5f  .buffer = this._
9e540 62 75 66 66 65 72 3b 0a 09 20 20 20 20 20 20 20  buffer;..       
9e550 20 74 68 69 73 2e 5f 73 6f 75 72 63 65 2e 6c 6f   this._source.lo
9e560 6f 70 20 3d 20 74 72 75 65 3b 0a 09 20 20 20 20  op = true;..    
9e570 20 20 20 20 74 68 69 73 2e 5f 73 6f 75 72 63 65      this._source
9e580 2e 70 6c 61 79 62 61 63 6b 52 61 74 65 2e 76 61  .playbackRate.va
9e590 6c 75 65 20 3d 20 74 68 69 73 2e 5f 70 6c 61 79  lue = this._play
9e5a0 62 61 63 6b 52 61 74 65 3b 0a 09 20 20 20 20 20  backRate;..     
9e5b0 20 20 20 74 68 69 73 2e 5f 73 6f 75 72 63 65 2e     this._source.
9e5c0 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e 6f 75 74  connect(this.out
9e5d0 70 75 74 29 3b 0a 09 20 20 20 20 20 20 20 20 74  put);..        t
9e5e0 68 69 73 2e 5f 73 6f 75 72 63 65 2e 73 74 61 72  his._source.star
9e5f0 74 28 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73  t(this.toSeconds
9e600 28 74 69 6d 65 29 2c 20 4d 61 74 68 2e 72 61 6e  (time), Math.ran
9e610 64 6f 6d 28 29 20 2a 20 28 74 68 69 73 2e 5f 62  dom() * (this._b
9e620 75 66 66 65 72 2e 64 75 72 61 74 69 6f 6e 20 2d  uffer.duration -
9e630 20 30 2e 30 30 31 29 29 3b 0a 09 20 20 20 20 7d   0.001));..    }
9e640 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
9e650 20 69 6e 74 65 72 6e 61 6c 20 73 74 6f 70 20 6d   internal stop m
9e660 65 74 68 6f 64 0a 09 09 20 2a 0a 09 09 20 2a 20  ethod... *... * 
9e670 20 40 70 61 72 61 6d 20 7b 54 69 6d 65 7d 20 74   @param {Time} t
9e680 69 6d 65 0a 09 09 20 2a 20 20 40 70 72 69 76 61  ime... *  @priva
9e690 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  te... */..    To
9e6a0 6e 65 2e 4e 6f 69 73 65 2e 70 72 6f 74 6f 74 79  ne.Noise.prototy
9e6b0 70 65 2e 5f 73 74 6f 70 20 3d 20 66 75 6e 63 74  pe._stop = funct
9e6c0 69 6f 6e 20 28 74 69 6d 65 29 20 7b 0a 09 20 20  ion (time) {..  
9e6d0 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 5f        if (this._
9e6e0 73 6f 75 72 63 65 29 20 7b 0a 09 20 20 20 20 20  source) {..     
9e6f0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 6f 75         this._sou
9e700 72 63 65 2e 73 74 6f 70 28 74 68 69 73 2e 74 6f  rce.stop(this.to
9e710 53 65 63 6f 6e 64 73 28 74 69 6d 65 29 29 3b 0a  Seconds(time));.
9e720 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
9e730 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  };..    /**... *
9e740 20 20 43 6c 65 61 6e 20 75 70 2e 0a 09 09 20 2a    Clean up.... *
9e750 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65    @returns {Tone
9e760 2e 4e 6f 69 73 65 7d 20 74 68 69 73 0a 09 09 20  .Noise} this... 
9e770 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4e 6f 69  */..    Tone.Noi
9e780 73 65 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73  se.prototype.dis
9e790 70 6f 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20  pose = function 
9e7a0 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 54 6f  () {..        To
9e7b0 6e 65 2e 53 6f 75 72 63 65 2e 70 72 6f 74 6f 74  ne.Source.protot
9e7c0 79 70 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c  ype.dispose.call
9e7d0 28 74 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20  (this);..       
9e7e0 20 69 66 20 28 74 68 69 73 2e 5f 73 6f 75 72 63   if (this._sourc
9e7f0 65 20 21 3d 3d 20 6e 75 6c 6c 29 20 7b 0a 09 20  e !== null) {.. 
9e800 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
9e810 5f 73 6f 75 72 63 65 2e 64 69 73 63 6f 6e 6e 65  _source.disconne
9e820 63 74 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20  ct();..         
9e830 20 20 20 74 68 69 73 2e 5f 73 6f 75 72 63 65 20     this._source 
9e840 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
9e850 20 7d 0a 09 20 20 20 20 20 20 20 20 74 68 69 73   }..        this
9e860 2e 5f 62 75 66 66 65 72 20 3d 20 6e 75 6c 6c 3b  ._buffer = null;
9e870 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
9e880 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09   this;..    };..
9e890 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
9e8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a  ///////////////.
9e8e0 09 20 20 20 20 2f 2f 20 54 48 45 20 42 55 46 46  .    // THE BUFF
9e8f0 45 52 53 0a 09 20 20 20 20 2f 2f 20 62 6f 72 72  ERS..    // borr
9e900 6f 77 65 64 20 68 65 61 76 69 6c 79 20 66 72 6f  owed heavily fro
9e910 6d 20 68 74 74 70 3a 2f 2f 6e 6f 69 73 65 68 61  m http://noiseha
9e920 63 6b 2e 63 6f 6d 2f 67 65 6e 65 72 61 74 65 2d  ck.com/generate-
9e930 6e 6f 69 73 65 2d 77 65 62 2d 61 75 64 69 6f 2d  noise-web-audio-
9e940 61 70 69 2f 0a 09 20 20 20 20 2f 2f 2f 2f 2f 2f  api/..    //////
9e950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e990 2f 2f 2f 2f 2f 0a 09 20 20 20 20 2f 2a 2a 0a 09  /////..    /**..
9e9a0 09 20 2a 09 73 74 61 74 69 63 20 6e 6f 69 73 65  . *.static noise
9e9b0 20 62 75 66 66 65 72 73 0a 09 09 20 2a 0a 09 09   buffers... *...
9e9c0 20 2a 20 20 40 73 74 61 74 69 63 0a 09 09 20 2a   *  @static... *
9e9d0 20 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a 20    @private... * 
9e9e0 20 40 74 79 70 65 20 7b 41 75 64 69 6f 42 75 66   @type {AudioBuf
9e9f0 66 65 72 7d 0a 09 09 20 2a 2f 0a 09 20 20 20 20  fer}... */..    
9ea00 76 61 72 20 5f 70 69 6e 6b 4e 6f 69 73 65 20 3d  var _pinkNoise =
9ea10 20 6e 75 6c 6c 2c 20 5f 62 72 6f 77 6e 4e 6f 69   null, _brownNoi
9ea20 73 65 20 3d 20 6e 75 6c 6c 2c 20 5f 77 68 69 74  se = null, _whit
9ea30 65 4e 6f 69 73 65 20 3d 20 6e 75 6c 6c 3b 0a 09  eNoise = null;..
9ea40 20 20 20 20 54 6f 6e 65 2e 5f 69 6e 69 74 41 75      Tone._initAu
9ea50 64 69 6f 43 6f 6e 74 65 78 74 28 66 75 6e 63 74  dioContext(funct
9ea60 69 6f 6e 20 28 61 75 64 69 6f 43 6f 6e 74 65 78  ion (audioContex
9ea70 74 29 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61  t) {..        va
9ea80 72 20 73 61 6d 70 6c 65 52 61 74 65 20 3d 20 61  r sampleRate = a
9ea90 75 64 69 6f 43 6f 6e 74 65 78 74 2e 73 61 6d 70  udioContext.samp
9eaa0 6c 65 52 61 74 65 3b 0a 09 20 20 20 20 20 20 20  leRate;..       
9eab0 20 2f 2f 66 6f 75 72 20 73 65 63 6f 6e 64 73 20   //four seconds 
9eac0 70 65 72 20 62 75 66 66 65 72 0a 09 20 20 20 20  per buffer..    
9ead0 20 20 20 20 76 61 72 20 62 75 66 66 65 72 4c 65      var bufferLe
9eae0 6e 67 74 68 20 3d 20 73 61 6d 70 6c 65 52 61 74  ngth = sampleRat
9eaf0 65 20 2a 20 34 3b 0a 09 20 20 20 20 20 20 20 20  e * 4;..        
9eb00 2f 2f 66 69 6c 6c 20 74 68 65 20 62 75 66 66 65  //fill the buffe
9eb10 72 73 0a 09 20 20 20 20 20 20 20 20 5f 70 69 6e  rs..        _pin
9eb20 6b 4e 6f 69 73 65 20 3d 20 66 75 6e 63 74 69 6f  kNoise = functio
9eb30 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
9eb40 20 20 20 20 76 61 72 20 62 75 66 66 65 72 20 3d      var buffer =
9eb50 20 61 75 64 69 6f 43 6f 6e 74 65 78 74 2e 63 72   audioContext.cr
9eb60 65 61 74 65 42 75 66 66 65 72 28 32 2c 20 62 75  eateBuffer(2, bu
9eb70 66 66 65 72 4c 65 6e 67 74 68 2c 20 73 61 6d 70  fferLength, samp
9eb80 6c 65 52 61 74 65 29 3b 0a 09 20 20 20 20 20 20  leRate);..      
9eb90 20 20 20 20 20 20 66 6f 72 20 28 76 61 72 20 63        for (var c
9eba0 68 61 6e 6e 65 6c 4e 75 6d 20 3d 20 30 3b 20 63  hannelNum = 0; c
9ebb0 68 61 6e 6e 65 6c 4e 75 6d 20 3c 20 62 75 66 66  hannelNum < buff
9ebc0 65 72 2e 6e 75 6d 62 65 72 4f 66 43 68 61 6e 6e  er.numberOfChann
9ebd0 65 6c 73 3b 20 63 68 61 6e 6e 65 6c 4e 75 6d 2b  els; channelNum+
9ebe0 2b 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  +) {..          
9ebf0 20 20 20 20 20 20 76 61 72 20 63 68 61 6e 6e 65        var channe
9ec00 6c 20 3d 20 62 75 66 66 65 72 2e 67 65 74 43 68  l = buffer.getCh
9ec10 61 6e 6e 65 6c 44 61 74 61 28 63 68 61 6e 6e 65  annelData(channe
9ec20 6c 4e 75 6d 29 3b 0a 09 20 20 20 20 20 20 20 20  lNum);..        
9ec30 20 20 20 20 20 20 20 20 76 61 72 20 62 30 2c 20          var b0, 
9ec40 62 31 2c 20 62 32 2c 20 62 33 2c 20 62 34 2c 20  b1, b2, b3, b4, 
9ec50 62 35 2c 20 62 36 3b 0a 09 20 20 20 20 20 20 20  b5, b6;..       
9ec60 20 20 20 20 20 20 20 20 20 62 30 20 3d 20 62 31           b0 = b1
9ec70 20 3d 20 62 32 20 3d 20 62 33 20 3d 20 62 34 20   = b2 = b3 = b4 
9ec80 3d 20 62 35 20 3d 20 62 36 20 3d 20 30 3b 0a 09  = b5 = b6 = 0;..
9ec90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9eca0 66 6f 72 20 28 76 61 72 20 69 20 3d 20 30 3b 20  for (var i = 0; 
9ecb0 69 20 3c 20 62 75 66 66 65 72 4c 65 6e 67 74 68  i < bufferLength
9ecc0 3b 20 69 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20  ; i++) {..      
9ecd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61                va
9ece0 72 20 77 68 69 74 65 20 3d 20 4d 61 74 68 2e 72  r white = Math.r
9ecf0 61 6e 64 6f 6d 28 29 20 2a 20 32 20 2d 20 31 3b  andom() * 2 - 1;
9ed00 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9ed10 20 20 20 20 20 20 62 30 20 3d 20 30 2e 39 39 38        b0 = 0.998
9ed20 38 36 20 2a 20 62 30 20 2b 20 77 68 69 74 65 20  86 * b0 + white 
9ed30 2a 20 30 2e 30 35 35 35 31 37 39 3b 0a 09 20 20  * 0.0555179;..  
9ed40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ed50 20 20 62 31 20 3d 20 30 2e 39 39 33 33 32 20 2a    b1 = 0.99332 *
9ed60 20 62 31 20 2b 20 77 68 69 74 65 20 2a 20 30 2e   b1 + white * 0.
9ed70 30 37 35 30 37 35 39 3b 0a 09 20 20 20 20 20 20  0750759;..      
9ed80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 32                b2
9ed90 20 3d 20 30 2e 39 36 39 20 2a 20 62 32 20 2b 20   = 0.969 * b2 + 
9eda0 77 68 69 74 65 20 2a 20 30 2e 31 35 33 38 35 32  white * 0.153852
9edb0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
9edc0 20 20 20 20 20 20 20 62 33 20 3d 20 30 2e 38 36         b3 = 0.86
9edd0 36 35 20 2a 20 62 33 20 2b 20 77 68 69 74 65 20  65 * b3 + white 
9ede0 2a 20 30 2e 33 31 30 34 38 35 36 3b 0a 09 20 20  * 0.3104856;..  
9edf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ee00 20 20 62 34 20 3d 20 30 2e 35 35 20 2a 20 62 34    b4 = 0.55 * b4
9ee10 20 2b 20 77 68 69 74 65 20 2a 20 30 2e 35 33 32   + white * 0.532
9ee20 39 35 32 32 3b 0a 09 20 20 20 20 20 20 20 20 20  9522;..         
9ee30 20 20 20 20 20 20 20 20 20 20 20 62 35 20 3d 20             b5 = 
9ee40 2d 30 2e 37 36 31 36 20 2a 20 62 35 20 2d 20 77  -0.7616 * b5 - w
9ee50 68 69 74 65 20 2a 20 30 2e 30 31 36 38 39 38 3b  hite * 0.016898;
9ee60 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9ee70 20 20 20 20 20 20 63 68 61 6e 6e 65 6c 5b 69 5d        channel[i]
9ee80 20 3d 20 62 30 20 2b 20 62 31 20 2b 20 62 32 20   = b0 + b1 + b2 
9ee90 2b 20 62 33 20 2b 20 62 34 20 2b 20 62 35 20 2b  + b3 + b4 + b5 +
9eea0 20 62 36 20 2b 20 77 68 69 74 65 20 2a 20 30 2e   b6 + white * 0.
9eeb0 35 33 36 32 3b 0a 09 20 20 20 20 20 20 20 20 20  5362;..         
9eec0 20 20 20 20 20 20 20 20 20 20 20 63 68 61 6e 6e             chann
9eed0 65 6c 5b 69 5d 20 2a 3d 20 30 2e 31 31 3b 0a 09  el[i] *= 0.11;..
9eee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9eef0 20 20 20 20 2f 2f 20 28 72 6f 75 67 68 6c 79 29      // (roughly)
9ef00 20 63 6f 6d 70 65 6e 73 61 74 65 20 66 6f 72 20   compensate for 
9ef10 67 61 69 6e 0a 09 20 20 20 20 20 20 20 20 20 20  gain..          
9ef20 20 20 20 20 20 20 20 20 20 20 62 36 20 3d 20 77            b6 = w
9ef30 68 69 74 65 20 2a 20 30 2e 31 31 35 39 32 36 3b  hite * 0.115926;
9ef40 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9ef50 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20    }..           
9ef60 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   }..            
9ef70 72 65 74 75 72 6e 20 62 75 66 66 65 72 3b 0a 09  return buffer;..
9ef80 20 20 20 20 20 20 20 20 7d 28 29 3b 0a 09 20 20          }();..  
9ef90 20 20 20 20 20 20 5f 62 72 6f 77 6e 4e 6f 69 73        _brownNois
9efa0 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  e = function () 
9efb0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 76  {..            v
9efc0 61 72 20 62 75 66 66 65 72 20 3d 20 61 75 64 69  ar buffer = audi
9efd0 6f 43 6f 6e 74 65 78 74 2e 63 72 65 61 74 65 42  oContext.createB
9efe0 75 66 66 65 72 28 32 2c 20 62 75 66 66 65 72 4c  uffer(2, bufferL
9eff0 65 6e 67 74 68 2c 20 73 61 6d 70 6c 65 52 61 74  ength, sampleRat
9f000 65 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e);..           
9f010 20 66 6f 72 20 28 76 61 72 20 63 68 61 6e 6e 65   for (var channe
9f020 6c 4e 75 6d 20 3d 20 30 3b 20 63 68 61 6e 6e 65  lNum = 0; channe
9f030 6c 4e 75 6d 20 3c 20 62 75 66 66 65 72 2e 6e 75  lNum < buffer.nu
9f040 6d 62 65 72 4f 66 43 68 61 6e 6e 65 6c 73 3b 20  mberOfChannels; 
9f050 63 68 61 6e 6e 65 6c 4e 75 6d 2b 2b 29 20 7b 0a  channelNum++) {.
9f060 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9f070 20 76 61 72 20 63 68 61 6e 6e 65 6c 20 3d 20 62   var channel = b
9f080 75 66 66 65 72 2e 67 65 74 43 68 61 6e 6e 65 6c  uffer.getChannel
9f090 44 61 74 61 28 63 68 61 6e 6e 65 6c 4e 75 6d 29  Data(channelNum)
9f0a0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
9f0b0 20 20 20 76 61 72 20 6c 61 73 74 4f 75 74 20 3d     var lastOut =
9f0c0 20 30 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20   0;..           
9f0d0 20 20 20 20 20 66 6f 72 20 28 76 61 72 20 69 20       for (var i 
9f0e0 3d 20 30 3b 20 69 20 3c 20 62 75 66 66 65 72 4c  = 0; i < bufferL
9f0f0 65 6e 67 74 68 3b 20 69 2b 2b 29 20 7b 0a 09 20  ength; i++) {.. 
9f100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f110 20 20 20 76 61 72 20 77 68 69 74 65 20 3d 20 4d     var white = M
9f120 61 74 68 2e 72 61 6e 64 6f 6d 28 29 20 2a 20 32  ath.random() * 2
9f130 20 2d 20 31 3b 0a 09 20 20 20 20 20 20 20 20 20   - 1;..         
9f140 20 20 20 20 20 20 20 20 20 20 20 63 68 61 6e 6e             chann
9f150 65 6c 5b 69 5d 20 3d 20 28 6c 61 73 74 4f 75 74  el[i] = (lastOut
9f160 20 2b 20 30 2e 30 32 20 2a 20 77 68 69 74 65 29   + 0.02 * white)
9f170 20 2f 20 31 2e 30 32 3b 0a 09 20 20 20 20 20 20   / 1.02;..      
9f180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61                la
9f190 73 74 4f 75 74 20 3d 20 63 68 61 6e 6e 65 6c 5b  stOut = channel[
9f1a0 69 5d 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  i];..           
9f1b0 20 20 20 20 20 20 20 20 20 63 68 61 6e 6e 65 6c           channel
9f1c0 5b 69 5d 20 2a 3d 20 33 2e 35 3b 20 20 20 20 2f  [i] *= 3.5;    /
9f1d0 2f 20 28 72 6f 75 67 68 6c 79 29 20 63 6f 6d 70  / (roughly) comp
9f1e0 65 6e 73 61 74 65 20 66 6f 72 20 67 61 69 6e 0a  ensate for gain.
9f1f0 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9f200 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   }..            
9f210 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72  }..            r
9f220 65 74 75 72 6e 20 62 75 66 66 65 72 3b 0a 09 20  eturn buffer;.. 
9f230 20 20 20 20 20 20 20 7d 28 29 3b 0a 09 20 20 20         }();..   
9f240 20 20 20 20 20 5f 77 68 69 74 65 4e 6f 69 73 65       _whiteNoise
9f250 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b   = function () {
9f260 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61  ..            va
9f270 72 20 62 75 66 66 65 72 20 3d 20 61 75 64 69 6f  r buffer = audio
9f280 43 6f 6e 74 65 78 74 2e 63 72 65 61 74 65 42 75  Context.createBu
9f290 66 66 65 72 28 32 2c 20 62 75 66 66 65 72 4c 65  ffer(2, bufferLe
9f2a0 6e 67 74 68 2c 20 73 61 6d 70 6c 65 52 61 74 65  ngth, sampleRate
9f2b0 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9f2c0 66 6f 72 20 28 76 61 72 20 63 68 61 6e 6e 65 6c  for (var channel
9f2d0 4e 75 6d 20 3d 20 30 3b 20 63 68 61 6e 6e 65 6c  Num = 0; channel
9f2e0 4e 75 6d 20 3c 20 62 75 66 66 65 72 2e 6e 75 6d  Num < buffer.num
9f2f0 62 65 72 4f 66 43 68 61 6e 6e 65 6c 73 3b 20 63  berOfChannels; c
9f300 68 61 6e 6e 65 6c 4e 75 6d 2b 2b 29 20 7b 0a 09  hannelNum++) {..
9f310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f320 76 61 72 20 63 68 61 6e 6e 65 6c 20 3d 20 62 75  var channel = bu
9f330 66 66 65 72 2e 67 65 74 43 68 61 6e 6e 65 6c 44  ffer.getChannelD
9f340 61 74 61 28 63 68 61 6e 6e 65 6c 4e 75 6d 29 3b  ata(channelNum);
9f350 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9f360 20 20 66 6f 72 20 28 76 61 72 20 69 20 3d 20 30    for (var i = 0
9f370 3b 20 69 20 3c 20 62 75 66 66 65 72 4c 65 6e 67  ; i < bufferLeng
9f380 74 68 3b 20 69 2b 2b 29 20 7b 0a 09 20 20 20 20  th; i++) {..    
9f390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f3a0 63 68 61 6e 6e 65 6c 5b 69 5d 20 3d 20 4d 61 74  channel[i] = Mat
9f3b0 68 2e 72 61 6e 64 6f 6d 28 29 20 2a 20 32 20 2d  h.random() * 2 -
9f3c0 20 31 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20   1;..           
9f3d0 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
9f3e0 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20      }..         
9f3f0 20 20 20 72 65 74 75 72 6e 20 62 75 66 66 65 72     return buffer
9f400 3b 0a 09 20 20 20 20 20 20 20 20 7d 28 29 3b 0a  ;..        }();.
9f410 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 72 65  .    });..    re
9f420 74 75 72 6e 20 54 6f 6e 65 2e 4e 6f 69 73 65 3b  turn Tone.Noise;
9f430 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75  ..});..Module(fu
9f440 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a  nction (Tone) {.
9f450 09 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09  .    ..    /**..
9f460 09 20 2a 20 20 40 63 6c 61 73 73 20 20 54 6f 6e  . *  @class  Ton
9f470 65 2e 4e 6f 69 73 65 53 79 6e 74 68 20 69 73 20  e.NoiseSynth is 
9f480 63 6f 6d 70 6f 73 65 64 20 6f 66 20 61 20 6e 6f  composed of a no
9f490 69 73 65 20 67 65 6e 65 72 61 74 6f 72 20 28 54  ise generator (T
9f4a0 6f 6e 65 2e 4e 6f 69 73 65 29 2c 20 6f 6e 65 20  one.Noise), one 
9f4b0 66 69 6c 74 65 72 20 28 54 6f 6e 65 2e 46 69 6c  filter (Tone.Fil
9f4c0 74 65 72 29 2c 20 0a 09 09 20 2a 20 20 20 20 20  ter), ... *     
9f4d0 20 20 20 20 20 61 6e 64 20 74 77 6f 20 65 6e 76       and two env
9f4e0 65 6c 6f 70 65 73 20 28 54 6f 6e 65 2e 45 6e 76  elopes (Tone.Env
9f4f0 65 6c 6f 70 29 2e 20 4f 6e 65 20 65 6e 76 65 6c  elop). One envel
9f500 6f 70 65 20 63 6f 6e 74 72 6f 6c 73 20 74 68 65  ope controls the
9f510 20 61 6d 70 6c 69 74 75 64 65 0a 09 09 20 2a 20   amplitude... * 
9f520 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20           of the 
9f530 6e 6f 69 73 65 20 61 6e 64 20 74 68 65 20 6f 74  noise and the ot
9f540 68 65 72 20 69 73 20 63 6f 6e 74 72 6f 6c 73 20  her is controls 
9f550 74 68 65 20 63 75 74 6f 66 66 20 66 72 65 71 75  the cutoff frequ
9f560 65 6e 63 79 20 6f 66 20 74 68 65 20 66 69 6c 74  ency of the filt
9f570 65 72 2e 20 0a 09 09 20 2a 20 20 20 20 20 20 20  er. ... *       
9f580 20 20 20 3c 69 6d 67 20 73 72 63 3d 22 68 74 74     <img src="htt
9f590 70 73 3a 2f 2f 64 6f 63 73 2e 67 6f 6f 67 6c 65  ps://docs.google
9f5a0 2e 63 6f 6d 2f 64 72 61 77 69 6e 67 73 2f 64 2f  .com/drawings/d/
9f5b0 31 72 71 7a 75 58 39 72 42 6c 68 54 35 30 4d 52  1rqzuX9rBlhT50MR
9f5c0 76 44 32 54 4b 6d 6c 39 62 6e 5a 68 63 5a 6d 7a  vD2TKml9bnZhcZmz
9f5d0 58 46 31 72 66 5f 6f 37 76 64 6e 45 2f 70 75 62  XF1rf_o7vdnE/pub
9f5e0 3f 77 3d 39 31 38 26 68 3d 32 34 32 22 3e 0a 09  ?w=918&h=242">..
9f5f0 09 20 2a 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74  . *... *  @const
9f600 72 75 63 74 6f 72 0a 09 09 20 2a 20 20 40 65 78  ructor... *  @ex
9f610 74 65 6e 64 73 20 7b 54 6f 6e 65 2e 49 6e 73 74  tends {Tone.Inst
9f620 72 75 6d 65 6e 74 7d 0a 09 09 20 2a 20 20 40 70  rument}... *  @p
9f630 61 72 61 6d 20 7b 4f 62 6a 65 63 74 7d 20 5b 6f  aram {Object} [o
9f640 70 74 69 6f 6e 73 5d 20 74 68 65 20 6f 70 74 69  ptions] the opti
9f650 6f 6e 73 20 61 76 61 69 6c 61 62 6c 65 20 66 6f  ons available fo
9f660 72 20 74 68 65 20 73 79 6e 74 68 20 0a 09 09 20  r the synth ... 
9f670 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
9f680 20 20 20 20 20 20 20 20 20 20 20 73 65 65 20 64             see d
9f690 65 66 61 75 6c 74 73 20 62 65 6c 6f 77 0a 09 09  efaults below...
9f6a0 20 2a 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a   * @example... *
9f6b0 20 76 61 72 20 6e 6f 69 73 65 53 79 6e 74 68 20   var noiseSynth 
9f6c0 3d 20 6e 65 77 20 54 6f 6e 65 2e 4e 6f 69 73 65  = new Tone.Noise
9f6d0 53 79 6e 74 68 28 29 2e 74 6f 4d 61 73 74 65 72  Synth().toMaster
9f6e0 28 29 3b 0a 09 09 20 2a 20 6e 6f 69 73 65 53 79  ();... * noiseSy
9f6f0 6e 74 68 2e 74 72 69 67 67 65 72 41 74 74 61 63  nth.triggerAttac
9f700 6b 52 65 6c 65 61 73 65 28 22 38 6e 22 29 3b 0a  kRelease("8n");.
9f710 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
9f720 4e 6f 69 73 65 53 79 6e 74 68 20 3d 20 66 75 6e  NoiseSynth = fun
9f730 63 74 69 6f 6e 20 28 6f 70 74 69 6f 6e 73 29 20  ction (options) 
9f740 7b 0a 09 20 20 20 20 20 20 20 20 2f 2f 67 65 74  {..        //get
9f750 20 74 68 65 20 64 65 66 61 75 6c 74 73 0a 09 20   the defaults.. 
9f760 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 20 3d         options =
9f770 20 74 68 69 73 2e 64 65 66 61 75 6c 74 41 72 67   this.defaultArg
9f780 28 6f 70 74 69 6f 6e 73 2c 20 54 6f 6e 65 2e 4e  (options, Tone.N
9f790 6f 69 73 65 53 79 6e 74 68 2e 64 65 66 61 75 6c  oiseSynth.defaul
9f7a0 74 73 29 3b 0a 09 20 20 20 20 20 20 20 20 54 6f  ts);..        To
9f7b0 6e 65 2e 49 6e 73 74 72 75 6d 65 6e 74 2e 63 61  ne.Instrument.ca
9f7c0 6c 6c 28 74 68 69 73 2c 20 6f 70 74 69 6f 6e 73  ll(this, options
9f7d0 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
9f7e0 09 09 09 20 2a 20 20 54 68 65 20 6e 6f 69 73 65  ... *  The noise
9f7f0 20 73 6f 75 72 63 65 2e 0a 09 09 09 20 2a 20 20   source..... *  
9f800 40 74 79 70 65 20 7b 54 6f 6e 65 2e 4e 6f 69 73  @type {Tone.Nois
9f810 65 7d 0a 09 09 09 20 2a 20 20 40 65 78 61 6d 70  e}.... *  @examp
9f820 6c 65 0a 09 09 09 20 2a 20 6e 6f 69 73 65 53 79  le.... * noiseSy
9f830 6e 74 68 2e 73 65 74 28 22 6e 6f 69 73 65 2e 74  nth.set("noise.t
9f840 79 70 65 22 2c 20 22 62 72 6f 77 6e 22 29 3b 0a  ype", "brown");.
9f850 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
9f860 74 68 69 73 2e 6e 6f 69 73 65 20 3d 20 6e 65 77  this.noise = new
9f870 20 54 6f 6e 65 2e 4e 6f 69 73 65 28 29 3b 0a 09   Tone.Noise();..
9f880 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
9f890 2a 20 20 54 68 65 20 61 6d 70 6c 69 74 75 64 65  *  The amplitude
9f8a0 20 65 6e 76 65 6c 6f 70 65 2e 20 0a 09 09 09 20   envelope. .... 
9f8b0 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e 41  *  @type {Tone.A
9f8c0 6d 70 6c 69 74 75 64 65 45 6e 76 65 6c 6f 70 65  mplitudeEnvelope
9f8d0 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  }.... */..      
9f8e0 20 20 74 68 69 73 2e 65 6e 76 65 6c 6f 70 65 20    this.envelope 
9f8f0 3d 20 6e 65 77 20 54 6f 6e 65 2e 41 6d 70 6c 69  = new Tone.Ampli
9f900 74 75 64 65 45 6e 76 65 6c 6f 70 65 28 6f 70 74  tudeEnvelope(opt
9f910 69 6f 6e 73 2e 65 6e 76 65 6c 6f 70 65 29 3b 0a  ions.envelope);.
9f920 09 20 20 20 20 20 20 20 20 2f 2f 63 6f 6e 6e 65  .        //conne
9f930 63 74 20 74 68 65 20 6e 6f 69 73 65 20 74 6f 20  ct the noise to 
9f940 74 68 65 20 6f 75 74 70 75 74 0a 09 20 20 20 20  the output..    
9f950 20 20 20 20 74 68 69 73 2e 6e 6f 69 73 65 2e 63      this.noise.c
9f960 68 61 69 6e 28 74 68 69 73 2e 65 6e 76 65 6c 6f  hain(this.envelo
9f970 70 65 2c 20 74 68 69 73 2e 6f 75 74 70 75 74 29  pe, this.output)
9f980 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 73 74 61  ;..        //sta
9f990 72 74 20 74 68 65 20 6e 6f 69 73 65 0a 09 20 20  rt the noise..  
9f9a0 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 69 73 65        this.noise
9f9b0 2e 73 74 61 72 74 28 29 3b 0a 09 20 20 20 20 20  .start();..     
9f9c0 20 20 20 74 68 69 73 2e 5f 72 65 61 64 4f 6e 6c     this._readOnl
9f9d0 79 28 5b 0a 09 20 20 20 20 20 20 20 20 20 20 20  y([..           
9f9e0 20 27 6e 6f 69 73 65 27 2c 0a 09 20 20 20 20 20   'noise',..     
9f9f0 20 20 20 20 20 20 20 27 65 6e 76 65 6c 6f 70 65         'envelope
9fa00 27 0a 09 20 20 20 20 20 20 20 20 5d 29 3b 0a 09  '..        ]);..
9fa10 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65      };..    Tone
9fa20 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 4e 6f 69  .extend(Tone.Noi
9fa30 73 65 53 79 6e 74 68 2c 20 54 6f 6e 65 2e 49 6e  seSynth, Tone.In
9fa40 73 74 72 75 6d 65 6e 74 29 3b 0a 09 20 20 20 20  strument);..    
9fa50 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74  /**... *  @const
9fa60 0a 09 09 20 2a 20 20 40 73 74 61 74 69 63 0a 09  ... *  @static..
9fa70 09 20 2a 20 20 40 74 79 70 65 20 7b 4f 62 6a 65  . *  @type {Obje
9fa80 63 74 7d 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  ct}... */..    T
9fa90 6f 6e 65 2e 4e 6f 69 73 65 53 79 6e 74 68 2e 64  one.NoiseSynth.d
9faa0 65 66 61 75 6c 74 73 20 3d 20 7b 0a 09 20 20 20  efaults = {..   
9fab0 20 20 20 20 20 27 6e 6f 69 73 65 27 3a 20 7b 20       'noise': { 
9fac0 27 74 79 70 65 27 3a 20 27 77 68 69 74 65 27 20  'type': 'white' 
9fad0 7d 2c 0a 09 20 20 20 20 20 20 20 20 27 65 6e 76  },..        'env
9fae0 65 6c 6f 70 65 27 3a 20 7b 0a 09 20 20 20 20 20  elope': {..     
9faf0 20 20 20 20 20 20 20 27 61 74 74 61 63 6b 27 3a         'attack':
9fb00 20 30 2e 30 30 35 2c 0a 09 20 20 20 20 20 20 20   0.005,..       
9fb10 20 20 20 20 20 27 64 65 63 61 79 27 3a 20 30 2e       'decay': 0.
9fb20 31 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  1,..            
9fb30 27 73 75 73 74 61 69 6e 27 3a 20 30 0a 09 20 20  'sustain': 0..  
9fb40 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a        }..    };.
9fb50 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 53  .    /**... *  S
9fb60 74 61 72 74 20 74 68 65 20 61 74 74 61 63 6b 20  tart the attack 
9fb70 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 65  portion of the e
9fb80 6e 76 65 6c 6f 70 65 73 2e 20 55 6e 6c 69 6b 65  nvelopes. Unlike
9fb90 20 6f 74 68 65 72 20 0a 09 09 20 2a 20 20 69 6e   other ... *  in
9fba0 73 74 72 75 6d 65 6e 74 73 2c 20 54 6f 6e 65 2e  struments, Tone.
9fbb0 4e 6f 69 73 65 53 79 6e 74 68 20 64 6f 65 73 6e  NoiseSynth doesn
9fbc0 27 74 20 68 61 76 65 20 61 20 6e 6f 74 65 2e 20  't have a note. 
9fbd0 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 54  ... *  @param {T
9fbe0 69 6d 65 7d 20 5b 74 69 6d 65 3d 6e 6f 77 5d 20  ime} [time=now] 
9fbf0 74 68 65 20 74 69 6d 65 20 74 68 65 20 61 74 74  the time the att
9fc00 61 63 6b 20 73 68 6f 75 6c 64 20 73 74 61 72 74  ack should start
9fc10 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 6e  ... *  @param {n
9fc20 75 6d 62 65 72 7d 20 5b 76 65 6c 6f 63 69 74 79  umber} [velocity
9fc30 3d 31 5d 20 74 68 65 20 76 65 6c 6f 63 69 74 79  =1] the velocity
9fc40 20 6f 66 20 74 68 65 20 6e 6f 74 65 20 28 30 2d   of the note (0-
9fc50 31 29 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e  1)... *  @return
9fc60 73 20 7b 54 6f 6e 65 2e 4e 6f 69 73 65 53 79 6e  s {Tone.NoiseSyn
9fc70 74 68 7d 20 74 68 69 73 0a 09 09 20 2a 20 20 40  th} this... *  @
9fc80 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 6e 6f 69  example... * noi
9fc90 73 65 53 79 6e 74 68 2e 74 72 69 67 67 65 72 41  seSynth.triggerA
9fca0 74 74 61 63 6b 28 29 3b 0a 09 09 20 2a 2f 0a 09  ttack();... */..
9fcb0 20 20 20 20 54 6f 6e 65 2e 4e 6f 69 73 65 53 79      Tone.NoiseSy
9fcc0 6e 74 68 2e 70 72 6f 74 6f 74 79 70 65 2e 74 72  nth.prototype.tr
9fcd0 69 67 67 65 72 41 74 74 61 63 6b 20 3d 20 66 75  iggerAttack = fu
9fce0 6e 63 74 69 6f 6e 20 28 74 69 6d 65 2c 20 76 65  nction (time, ve
9fcf0 6c 6f 63 69 74 79 29 20 7b 0a 09 20 20 20 20 20  locity) {..     
9fd00 20 20 20 2f 2f 74 68 65 20 65 6e 76 65 6c 6f 70     //the envelop
9fd10 65 73 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  es..        this
9fd20 2e 65 6e 76 65 6c 6f 70 65 2e 74 72 69 67 67 65  .envelope.trigge
9fd30 72 41 74 74 61 63 6b 28 74 69 6d 65 2c 20 76 65  rAttack(time, ve
9fd40 6c 6f 63 69 74 79 29 3b 0a 09 20 20 20 20 20 20  locity);..      
9fd50 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09    return this;..
9fd60 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
9fd70 09 09 20 2a 20 20 53 74 61 72 74 20 74 68 65 20  .. *  Start the 
9fd80 72 65 6c 65 61 73 65 20 70 6f 72 74 69 6f 6e 20  release portion 
9fd90 6f 66 20 74 68 65 20 65 6e 76 65 6c 6f 70 65 73  of the envelopes
9fda0 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b  .... *  @param {
9fdb0 54 69 6d 65 7d 20 5b 74 69 6d 65 3d 6e 6f 77 5d  Time} [time=now]
9fdc0 20 74 68 65 20 74 69 6d 65 20 74 68 65 20 72 65   the time the re
9fdd0 6c 65 61 73 65 20 73 68 6f 75 6c 64 20 73 74 61  lease should sta
9fde0 72 74 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e  rt... *  @return
9fdf0 73 20 7b 54 6f 6e 65 2e 4e 6f 69 73 65 53 79 6e  s {Tone.NoiseSyn
9fe00 74 68 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09  th} this... */..
9fe10 20 20 20 20 54 6f 6e 65 2e 4e 6f 69 73 65 53 79      Tone.NoiseSy
9fe20 6e 74 68 2e 70 72 6f 74 6f 74 79 70 65 2e 74 72  nth.prototype.tr
9fe30 69 67 67 65 72 52 65 6c 65 61 73 65 20 3d 20 66  iggerRelease = f
9fe40 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65 29 20 7b  unction (time) {
9fe50 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 65  ..        this.e
9fe60 6e 76 65 6c 6f 70 65 2e 74 72 69 67 67 65 72 52  nvelope.triggerR
9fe70 65 6c 65 61 73 65 28 74 69 6d 65 29 3b 0a 09 20  elease(time);.. 
9fe80 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
9fe90 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  is;..    };..   
9fea0 20 2f 2a 2a 0a 09 09 20 2a 20 20 54 72 69 67 67   /**... *  Trigg
9feb0 65 72 20 74 68 65 20 61 74 74 61 63 6b 20 61 6e  er the attack an
9fec0 64 20 74 68 65 6e 20 74 68 65 20 72 65 6c 65 61  d then the relea
9fed0 73 65 2e 20 0a 09 09 20 2a 20 20 40 70 61 72 61  se. ... *  @para
9fee0 6d 20 20 7b 54 69 6d 65 7d 20 64 75 72 61 74 69  m  {Time} durati
9fef0 6f 6e 20 74 68 65 20 64 75 72 61 74 69 6f 6e 20  on the duration 
9ff00 6f 66 20 74 68 65 20 6e 6f 74 65 0a 09 09 20 2a  of the note... *
9ff10 20 20 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 7d    @param  {Time}
9ff20 20 5b 74 69 6d 65 3d 6e 6f 77 5d 20 20 20 20 20   [time=now]     
9ff30 74 68 65 20 74 69 6d 65 20 6f 66 20 74 68 65 20  the time of the 
9ff40 61 74 74 61 63 6b 0a 09 09 20 2a 20 20 40 70 61  attack... *  @pa
9ff50 72 61 6d 20 20 7b 6e 75 6d 62 65 72 7d 20 5b 76  ram  {number} [v
9ff60 65 6c 6f 63 69 74 79 3d 31 5d 20 74 68 65 20 76  elocity=1] the v
9ff70 65 6c 6f 63 69 74 79 0a 09 09 20 2a 20 20 40 72  elocity... *  @r
9ff80 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 4e 6f 69  eturns {Tone.Noi
9ff90 73 65 53 79 6e 74 68 7d 20 74 68 69 73 0a 09 09  seSynth} this...
9ffa0 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4e 6f   */..    Tone.No
9ffb0 69 73 65 53 79 6e 74 68 2e 70 72 6f 74 6f 74 79  iseSynth.prototy
9ffc0 70 65 2e 74 72 69 67 67 65 72 41 74 74 61 63 6b  pe.triggerAttack
9ffd0 52 65 6c 65 61 73 65 20 3d 20 66 75 6e 63 74 69  Release = functi
9ffe0 6f 6e 20 28 64 75 72 61 74 69 6f 6e 2c 20 74 69  on (duration, ti
9fff0 6d 65 2c 20 76 65 6c 6f 63 69 74 79 29 20 7b 0a  me, velocity) {.
a0000 09 20 20 20 20 20 20 20 20 74 69 6d 65 20 3d 20  .        time = 
a0010 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28 74  this.toSeconds(t
a0020 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 64  ime);..        d
a0030 75 72 61 74 69 6f 6e 20 3d 20 74 68 69 73 2e 74  uration = this.t
a0040 6f 53 65 63 6f 6e 64 73 28 64 75 72 61 74 69 6f  oSeconds(duratio
a0050 6e 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  n);..        thi
a0060 73 2e 74 72 69 67 67 65 72 41 74 74 61 63 6b 28  s.triggerAttack(
a0070 74 69 6d 65 2c 20 76 65 6c 6f 63 69 74 79 29 3b  time, velocity);
a0080 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 74  ..        this.t
a0090 72 69 67 67 65 72 52 65 6c 65 61 73 65 28 74 69  riggerRelease(ti
a00a0 6d 65 20 2b 20 64 75 72 61 74 69 6f 6e 29 3b 0a  me + duration);.
a00b0 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
a00c0 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20  this;..    };.. 
a00d0 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43 6c 65     /**... *  Cle
a00e0 61 6e 20 75 70 2e 20 0a 09 09 20 2a 20 20 40 72  an up. ... *  @r
a00f0 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 4e 6f 69  eturns {Tone.Noi
a0100 73 65 53 79 6e 74 68 7d 20 74 68 69 73 0a 09 09  seSynth} this...
a0110 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4e 6f   */..    Tone.No
a0120 69 73 65 53 79 6e 74 68 2e 70 72 6f 74 6f 74 79  iseSynth.prototy
a0130 70 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75 6e  pe.dispose = fun
a0140 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
a0150 20 20 20 20 54 6f 6e 65 2e 49 6e 73 74 72 75 6d      Tone.Instrum
a0160 65 6e 74 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69  ent.prototype.di
a0170 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69 73 29  spose.call(this)
a0180 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
a0190 5f 77 72 69 74 61 62 6c 65 28 5b 0a 09 20 20 20  _writable([..   
a01a0 20 20 20 20 20 20 20 20 20 27 6e 6f 69 73 65 27           'noise'
a01b0 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
a01c0 65 6e 76 65 6c 6f 70 65 27 0a 09 20 20 20 20 20  envelope'..     
a01d0 20 20 20 5d 29 3b 0a 09 20 20 20 20 20 20 20 20     ]);..        
a01e0 74 68 69 73 2e 6e 6f 69 73 65 2e 64 69 73 70 6f  this.noise.dispo
a01f0 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74  se();..        t
a0200 68 69 73 2e 6e 6f 69 73 65 20 3d 20 6e 75 6c 6c  his.noise = null
a0210 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
a0220 65 6e 76 65 6c 6f 70 65 2e 64 69 73 70 6f 73 65  envelope.dispose
a0230 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ();..        thi
a0240 73 2e 65 6e 76 65 6c 6f 70 65 20 3d 20 6e 75 6c  s.envelope = nul
a0250 6c 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75  l;..        retu
a0260 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b  rn this;..    };
a0270 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e  ..    return Ton
a0280 65 2e 4e 6f 69 73 65 53 79 6e 74 68 3b 0a 09 7d  e.NoiseSynth;..}
a0290 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74  );..Module(funct
a02a0 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20  ion (Tone) {..  
a02b0 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a    ..    /**... *
a02c0 20 20 40 63 6c 61 73 73 20 4b 61 72 70 6c 75 73    @class Karplus
a02d0 2d 53 74 72 69 6e 67 20 73 74 72 69 6e 67 20 73  -String string s
a02e0 79 6e 74 68 65 73 69 73 2e 20 4f 66 74 65 6e 20  ynthesis. Often 
a02f0 6f 75 74 20 6f 66 20 74 75 6e 65 2e 20 0a 09 09  out of tune. ...
a0300 20 2a 20 20 20 20 20 20 20 20 20 57 69 6c 6c 20   *         Will 
a0310 63 68 61 6e 67 65 20 77 68 65 6e 20 74 68 65 20  change when the 
a0320 41 75 64 69 6f 57 6f 72 6b 65 72 4e 6f 64 65 20  AudioWorkerNode 
a0330 69 73 20 61 76 61 69 6c 61 62 6c 65 20 61 63 72  is available acr
a0340 6f 73 73 0a 09 09 20 2a 20 20 20 20 20 20 20 20  oss... *        
a0350 20 62 72 6f 77 73 65 72 73 2e 20 0a 09 09 20 2a   browsers. ... *
a0360 20 20 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 72    ... *  @constr
a0370 75 63 74 6f 72 0a 09 09 20 2a 20 20 40 65 78 74  uctor... *  @ext
a0380 65 6e 64 73 20 7b 54 6f 6e 65 2e 49 6e 73 74 72  ends {Tone.Instr
a0390 75 6d 65 6e 74 7d 0a 09 09 20 2a 20 20 40 70 61  ument}... *  @pa
a03a0 72 61 6d 20 7b 4f 62 6a 65 63 74 7d 20 5b 6f 70  ram {Object} [op
a03b0 74 69 6f 6e 73 5d 20 73 65 65 20 74 68 65 20 64  tions] see the d
a03c0 65 66 61 75 6c 74 73 0a 09 09 20 2a 20 20 40 65  efaults... *  @e
a03d0 78 61 6d 70 6c 65 0a 09 09 20 2a 20 76 61 72 20  xample... * var 
a03e0 70 6c 75 63 6b 79 20 3d 20 6e 65 77 20 54 6f 6e  plucky = new Ton
a03f0 65 2e 50 6c 75 63 6b 53 79 6e 74 68 28 29 2e 74  e.PluckSynth().t
a0400 6f 4d 61 73 74 65 72 28 29 3b 0a 09 09 20 2a 20  oMaster();... * 
a0410 70 6c 75 63 6b 79 2e 74 72 69 67 67 65 72 41 74  plucky.triggerAt
a0420 74 61 63 6b 28 22 43 34 22 29 3b 0a 09 09 20 2a  tack("C4");... *
a0430 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50 6c 75 63  /..    Tone.Pluc
a0440 6b 53 79 6e 74 68 20 3d 20 66 75 6e 63 74 69 6f  kSynth = functio
a0450 6e 20 28 6f 70 74 69 6f 6e 73 29 20 7b 0a 09 20  n (options) {.. 
a0460 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 20 3d         options =
a0470 20 74 68 69 73 2e 64 65 66 61 75 6c 74 41 72 67   this.defaultArg
a0480 28 6f 70 74 69 6f 6e 73 2c 20 54 6f 6e 65 2e 50  (options, Tone.P
a0490 6c 75 63 6b 53 79 6e 74 68 2e 64 65 66 61 75 6c  luckSynth.defaul
a04a0 74 73 29 3b 0a 09 20 20 20 20 20 20 20 20 54 6f  ts);..        To
a04b0 6e 65 2e 49 6e 73 74 72 75 6d 65 6e 74 2e 63 61  ne.Instrument.ca
a04c0 6c 6c 28 74 68 69 73 2c 20 6f 70 74 69 6f 6e 73  ll(this, options
a04d0 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  );..        /**.
a04e0 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 54 6f  ... *  @type {To
a04f0 6e 65 2e 4e 6f 69 73 65 7d 0a 09 09 09 20 2a 20  ne.Noise}.... * 
a0500 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f   @private.... */
a0510 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
a0520 6e 6f 69 73 65 20 3d 20 6e 65 77 20 54 6f 6e 65  noise = new Tone
a0530 2e 4e 6f 69 73 65 28 27 70 69 6e 6b 27 29 3b 0a  .Noise('pink');.
a0540 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
a0550 20 2a 20 20 54 68 65 20 61 6d 6f 75 6e 74 20 6f   *  The amount o
a0560 66 20 6e 6f 69 73 65 20 61 74 20 74 68 65 20 61  f noise at the a
a0570 74 74 61 63 6b 2e 20 0a 09 09 09 20 2a 20 20 4e  ttack. .... *  N
a0580 6f 6d 69 6e 61 6c 20 72 61 6e 67 65 20 6f 66 20  ominal range of 
a0590 5b 30 2e 31 2c 20 32 30 5d 0a 09 09 09 20 2a 20  [0.1, 20].... * 
a05a0 20 40 74 79 70 65 20 7b 6e 75 6d 62 65 72 7d 0a   @type {number}.
a05b0 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
a05c0 74 68 69 73 2e 61 74 74 61 63 6b 4e 6f 69 73 65  this.attackNoise
a05d0 20 3d 20 6f 70 74 69 6f 6e 73 2e 61 74 74 61 63   = options.attac
a05e0 6b 4e 6f 69 73 65 3b 0a 09 20 20 20 20 20 20 20  kNoise;..       
a05f0 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 74 68 65 20   /**.... *  the 
a0600 4c 46 43 46 0a 09 09 09 20 2a 20 20 40 74 79 70  LFCF.... *  @typ
a0610 65 20 7b 54 6f 6e 65 2e 4c 6f 77 70 61 73 73 43  e {Tone.LowpassC
a0620 6f 6d 62 46 69 6c 74 65 72 7d 0a 09 09 09 20 2a  ombFilter}.... *
a0630 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a    @private.... *
a0640 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
a0650 5f 6c 66 63 66 20 3d 20 6e 65 77 20 54 6f 6e 65  _lfcf = new Tone
a0660 2e 4c 6f 77 70 61 73 73 43 6f 6d 62 46 69 6c 74  .LowpassCombFilt
a0670 65 72 28 7b 0a 09 20 20 20 20 20 20 20 20 20 20  er({..          
a0680 20 20 27 72 65 73 6f 6e 61 6e 63 65 27 3a 20 6f    'resonance': o
a0690 70 74 69 6f 6e 73 2e 72 65 73 6f 6e 61 6e 63 65  ptions.resonance
a06a0 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
a06b0 64 61 6d 70 65 6e 69 6e 67 27 3a 20 6f 70 74 69  dampening': opti
a06c0 6f 6e 73 2e 64 61 6d 70 65 6e 69 6e 67 0a 09 20  ons.dampening.. 
a06d0 20 20 20 20 20 20 20 7d 29 3b 0a 09 20 20 20 20         });..    
a06e0 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54      /**.... *  T
a06f0 68 65 20 72 65 73 6f 6e 61 6e 63 65 20 63 6f 6e  he resonance con
a0700 74 72 6f 6c 2e 20 0a 09 09 09 20 2a 20 20 40 74  trol. .... *  @t
a0710 79 70 65 20 7b 4e 6f 72 6d 61 6c 52 61 6e 67 65  ype {NormalRange
a0720 7d 0a 09 09 09 20 2a 20 20 40 73 69 67 6e 61 6c  }.... *  @signal
a0730 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
a0740 20 74 68 69 73 2e 72 65 73 6f 6e 61 6e 63 65 20   this.resonance 
a0750 3d 20 74 68 69 73 2e 5f 6c 66 63 66 2e 72 65 73  = this._lfcf.res
a0760 6f 6e 61 6e 63 65 3b 0a 09 20 20 20 20 20 20 20  onance;..       
a0770 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20   /**.... *  The 
a0780 64 61 6d 70 65 6e 69 6e 67 20 63 6f 6e 74 72 6f  dampening contro
a0790 6c 2e 20 69 2e 65 2e 20 74 68 65 20 6c 6f 77 70  l. i.e. the lowp
a07a0 61 73 73 20 66 69 6c 74 65 72 20 66 72 65 71 75  ass filter frequ
a07b0 65 6e 63 79 20 6f 66 20 74 68 65 20 63 6f 6d 62  ency of the comb
a07c0 20 66 69 6c 74 65 72 0a 09 09 09 20 2a 20 20 40   filter.... *  @
a07d0 74 79 70 65 20 7b 46 72 65 71 75 65 6e 63 79 7d  type {Frequency}
a07e0 0a 09 09 09 20 2a 20 20 40 73 69 67 6e 61 6c 0a  .... *  @signal.
a07f0 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
a0800 74 68 69 73 2e 64 61 6d 70 65 6e 69 6e 67 20 3d  this.dampening =
a0810 20 74 68 69 73 2e 5f 6c 66 63 66 2e 64 61 6d 70   this._lfcf.damp
a0820 65 6e 69 6e 67 3b 0a 09 20 20 20 20 20 20 20 20  ening;..        
a0830 2f 2f 63 6f 6e 6e 65 63 74 69 6f 6e 73 0a 09 20  //connections.. 
a0840 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6e 6f 69         this._noi
a0850 73 65 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e  se.connect(this.
a0860 5f 6c 66 63 66 29 3b 0a 09 20 20 20 20 20 20 20  _lfcf);..       
a0870 20 74 68 69 73 2e 5f 6c 66 63 66 2e 63 6f 6e 6e   this._lfcf.conn
a0880 65 63 74 28 74 68 69 73 2e 6f 75 74 70 75 74 29  ect(this.output)
a0890 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
a08a0 5f 72 65 61 64 4f 6e 6c 79 28 5b 0a 09 20 20 20  _readOnly([..   
a08b0 20 20 20 20 20 20 20 20 20 27 72 65 73 6f 6e 61           'resona
a08c0 6e 63 65 27 2c 0a 09 20 20 20 20 20 20 20 20 20  nce',..         
a08d0 20 20 20 27 64 61 6d 70 65 6e 69 6e 67 27 0a 09     'dampening'..
a08e0 20 20 20 20 20 20 20 20 5d 29 3b 0a 09 20 20 20          ]);..   
a08f0 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65 2e 65 78   };..    Tone.ex
a0900 74 65 6e 64 28 54 6f 6e 65 2e 50 6c 75 63 6b 53  tend(Tone.PluckS
a0910 79 6e 74 68 2c 20 54 6f 6e 65 2e 49 6e 73 74 72  ynth, Tone.Instr
a0920 75 6d 65 6e 74 29 3b 0a 09 20 20 20 20 2f 2a 2a  ument);..    /**
a0930 0a 09 09 20 2a 20 20 40 73 74 61 74 69 63 0a 09  ... *  @static..
a0940 09 20 2a 20 20 40 63 6f 6e 73 74 0a 09 09 20 2a  . *  @const... *
a0950 20 20 40 74 79 70 65 20 7b 4f 62 6a 65 63 74 7d    @type {Object}
a0960 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
a0970 2e 50 6c 75 63 6b 53 79 6e 74 68 2e 64 65 66 61  .PluckSynth.defa
a0980 75 6c 74 73 20 3d 20 7b 0a 09 20 20 20 20 20 20  ults = {..      
a0990 20 20 27 61 74 74 61 63 6b 4e 6f 69 73 65 27 3a    'attackNoise':
a09a0 20 31 2c 0a 09 20 20 20 20 20 20 20 20 27 64 61   1,..        'da
a09b0 6d 70 65 6e 69 6e 67 27 3a 20 34 30 30 30 2c 0a  mpening': 4000,.
a09c0 09 20 20 20 20 20 20 20 20 27 72 65 73 6f 6e 61  .        'resona
a09d0 6e 63 65 27 3a 20 30 2e 39 0a 09 20 20 20 20 7d  nce': 0.9..    }
a09e0 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
a09f0 20 54 72 69 67 67 65 72 20 74 68 65 20 6e 6f 74   Trigger the not
a0a00 65 2e 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  e. ... *  @param
a0a10 20 7b 46 72 65 71 75 65 6e 63 79 7d 20 6e 6f 74   {Frequency} not
a0a20 65 20 54 68 65 20 6e 6f 74 65 20 74 6f 20 74 72  e The note to tr
a0a30 69 67 67 65 72 2e 0a 09 09 20 2a 20 20 40 70 61  igger.... *  @pa
a0a40 72 61 6d 20 7b 54 69 6d 65 7d 20 5b 74 69 6d 65  ram {Time} [time
a0a50 3d 6e 6f 77 5d 20 57 68 65 6e 20 74 68 65 20 6e  =now] When the n
a0a60 6f 74 65 20 73 68 6f 75 6c 64 20 62 65 20 74 72  ote should be tr
a0a70 69 67 67 65 72 65 64 2e 0a 09 09 20 2a 20 20 40  iggered.... *  @
a0a80 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 50 6c  returns {Tone.Pl
a0a90 75 63 6b 53 79 6e 74 68 7d 20 74 68 69 73 0a 09  uckSynth} this..
a0aa0 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50  . */..    Tone.P
a0ab0 6c 75 63 6b 53 79 6e 74 68 2e 70 72 6f 74 6f 74  luckSynth.protot
a0ac0 79 70 65 2e 74 72 69 67 67 65 72 41 74 74 61 63  ype.triggerAttac
a0ad0 6b 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 6e 6f  k = function (no
a0ae0 74 65 2c 20 74 69 6d 65 29 20 7b 0a 09 20 20 20  te, time) {..   
a0af0 20 20 20 20 20 6e 6f 74 65 20 3d 20 74 68 69 73       note = this
a0b00 2e 74 6f 46 72 65 71 75 65 6e 63 79 28 6e 6f 74  .toFrequency(not
a0b10 65 29 3b 0a 09 20 20 20 20 20 20 20 20 74 69 6d  e);..        tim
a0b20 65 20 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e  e = this.toSecon
a0b30 64 73 28 74 69 6d 65 29 3b 0a 09 20 20 20 20 20  ds(time);..     
a0b40 20 20 20 76 61 72 20 64 65 6c 61 79 41 6d 6f 75     var delayAmou
a0b50 6e 74 20 3d 20 31 20 2f 20 6e 6f 74 65 3b 0a 09  nt = 1 / note;..
a0b60 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 66          this._lf
a0b70 63 66 2e 64 65 6c 61 79 54 69 6d 65 2e 73 65 74  cf.delayTime.set
a0b80 56 61 6c 75 65 41 74 54 69 6d 65 28 64 65 6c 61  ValueAtTime(dela
a0b90 79 41 6d 6f 75 6e 74 2c 20 74 69 6d 65 29 3b 0a  yAmount, time);.
a0ba0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6e  .        this._n
a0bb0 6f 69 73 65 2e 73 74 61 72 74 28 74 69 6d 65 29  oise.start(time)
a0bc0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
a0bd0 5f 6e 6f 69 73 65 2e 73 74 6f 70 28 74 69 6d 65  _noise.stop(time
a0be0 20 2b 20 64 65 6c 61 79 41 6d 6f 75 6e 74 20 2a   + delayAmount *
a0bf0 20 74 68 69 73 2e 61 74 74 61 63 6b 4e 6f 69 73   this.attackNois
a0c00 65 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74  e);..        ret
a0c10 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
a0c20 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
a0c30 20 43 6c 65 61 6e 20 75 70 2e 20 0a 09 09 20 2a   Clean up. ... *
a0c40 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65    @returns {Tone
a0c50 2e 50 6c 75 63 6b 53 79 6e 74 68 7d 20 74 68 69  .PluckSynth} thi
a0c60 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  s... */..    Ton
a0c70 65 2e 50 6c 75 63 6b 53 79 6e 74 68 2e 70 72 6f  e.PluckSynth.pro
a0c80 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d  totype.dispose =
a0c90 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
a0ca0 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 49 6e 73          Tone.Ins
a0cb0 74 72 75 6d 65 6e 74 2e 70 72 6f 74 6f 74 79 70  trument.prototyp
a0cc0 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74  e.dispose.call(t
a0cd0 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20 20 74  his);..        t
a0ce0 68 69 73 2e 5f 6e 6f 69 73 65 2e 64 69 73 70 6f  his._noise.dispo
a0cf0 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74  se();..        t
a0d00 68 69 73 2e 5f 6c 66 63 66 2e 64 69 73 70 6f 73  his._lfcf.dispos
a0d10 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  e();..        th
a0d20 69 73 2e 5f 6e 6f 69 73 65 20 3d 20 6e 75 6c 6c  is._noise = null
a0d30 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
a0d40 5f 6c 66 63 66 20 3d 20 6e 75 6c 6c 3b 0a 09 20  _lfcf = null;.. 
a0d50 20 20 20 20 20 20 20 74 68 69 73 2e 5f 77 72 69         this._wri
a0d60 74 61 62 6c 65 28 5b 0a 09 20 20 20 20 20 20 20  table([..       
a0d70 20 20 20 20 20 27 72 65 73 6f 6e 61 6e 63 65 27       'resonance'
a0d80 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  ,..            '
a0d90 64 61 6d 70 65 6e 69 6e 67 27 0a 09 20 20 20 20  dampening'..    
a0da0 20 20 20 20 5d 29 3b 0a 09 20 20 20 20 20 20 20      ]);..       
a0db0 20 74 68 69 73 2e 64 61 6d 70 65 6e 69 6e 67 20   this.dampening 
a0dc0 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
a0dd0 20 74 68 69 73 2e 72 65 73 6f 6e 61 6e 63 65 20   this.resonance 
a0de0 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
a0df0 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20   return this;.. 
a0e00 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74 75 72     };..    retur
a0e10 6e 20 54 6f 6e 65 2e 50 6c 75 63 6b 53 79 6e 74  n Tone.PluckSynt
a0e20 68 3b 0a 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28  h;..});..Module(
a0e30 66 75 6e 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20  function (Tone) 
a0e40 7b 0a 09 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a  {..    ..    /**
a0e50 0a 09 09 20 2a 20 20 40 63 6c 61 73 73 20 20 54  ... *  @class  T
a0e60 6f 6e 65 2e 50 6f 6c 79 53 79 6e 74 68 20 68 61  one.PolySynth ha
a0e70 6e 64 6c 65 73 20 76 6f 69 63 65 20 63 72 65 61  ndles voice crea
a0e80 74 69 6f 6e 20 61 6e 64 20 61 6c 6c 6f 63 61 74  tion and allocat
a0e90 69 6f 6e 20 66 6f 72 20 61 6e 79 0a 09 09 20 2a  ion for any... *
a0ea0 20 20 20 20 20 20 20 20 20 20 69 6e 73 74 72 75            instru
a0eb0 6d 65 6e 74 73 20 70 61 73 73 65 64 20 69 6e 20  ments passed in 
a0ec0 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  as the second pa
a0ed0 72 61 6d 74 65 72 2e 20 50 6f 6c 79 53 79 6e 74  ramter. PolySynt
a0ee0 68 20 69 73 20 0a 09 09 20 2a 20 20 20 20 20 20  h is ... *      
a0ef0 20 20 20 20 6e 6f 74 20 61 20 73 79 6e 74 68 65      not a synthe
a0f00 73 69 7a 65 72 20 62 79 20 69 74 73 65 6c 66 2c  sizer by itself,
a0f10 20 69 74 20 6d 65 72 65 6c 79 20 6d 61 6e 61 67   it merely manag
a0f20 65 73 20 76 6f 69 63 65 73 20 6f 66 20 0a 09 09  es voices of ...
a0f30 20 2a 20 20 20 20 20 20 20 20 20 20 6f 6e 65 20   *          one 
a0f40 6f 66 20 74 68 65 20 6f 74 68 65 72 20 74 79 70  of the other typ
a0f50 65 73 20 6f 66 20 73 79 6e 74 68 73 2c 20 61 6c  es of synths, al
a0f60 6c 6f 77 69 6e 67 20 61 6e 79 20 6f 66 20 74 68  lowing any of th
a0f70 65 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  e ... *         
a0f80 20 6d 6f 6e 6f 70 68 6f 6e 69 63 20 73 79 6e 74   monophonic synt
a0f90 68 65 73 69 7a 65 72 73 20 74 6f 20 62 65 20 70  hesizers to be p
a0fa0 6f 6c 79 70 68 6f 6e 69 63 2e 20 0a 09 09 20 2a  olyphonic. ... *
a0fb0 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 72 75 63  ... *  @construc
a0fc0 74 6f 72 0a 09 09 20 2a 20 20 40 65 78 74 65 6e  tor... *  @exten
a0fd0 64 73 20 7b 54 6f 6e 65 2e 49 6e 73 74 72 75 6d  ds {Tone.Instrum
a0fe0 65 6e 74 7d 0a 09 09 20 2a 20 20 40 70 61 72 61  ent}... *  @para
a0ff0 6d 20 7b 6e 75 6d 62 65 72 7c 4f 62 6a 65 63 74  m {number|Object
a1000 7d 20 5b 70 6f 6c 79 70 68 6f 6e 79 3d 34 5d 20  } [polyphony=4] 
a1010 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 6f  The number of vo
a1020 69 63 65 73 20 74 6f 20 63 72 65 61 74 65 0a 09  ices to create..
a1030 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 66 75 6e  . *  @param {fun
a1040 63 74 69 6f 6e 7d 20 5b 76 6f 69 63 65 3d 54 6f  ction} [voice=To
a1050 6e 65 2e 53 79 6e 74 68 5d 20 54 68 65 20 63 6f  ne.Synth] The co
a1060 6e 73 74 72 75 63 74 6f 72 20 6f 66 20 74 68 65  nstructor of the
a1070 20 76 6f 69 63 65 73 0a 09 09 20 2a 20 20 20 20   voices... *    
a1080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a1090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a10a0 20 20 20 20 20 20 20 20 75 73 65 73 20 54 6f 6e          uses Ton
a10b0 65 2e 53 79 6e 74 68 20 62 79 20 64 65 66 61 75  e.Synth by defau
a10c0 6c 74 2e 20 0a 09 09 20 2a 20 20 40 65 78 61 6d  lt. ... *  @exam
a10d0 70 6c 65 0a 09 09 20 2a 20 2f 2f 61 20 70 6f 6c  ple... * //a pol
a10e0 79 73 79 6e 74 68 20 63 6f 6d 70 6f 73 65 64 20  ysynth composed 
a10f0 6f 66 20 36 20 56 6f 69 63 65 73 20 6f 66 20 53  of 6 Voices of S
a1100 79 6e 74 68 0a 09 09 20 2a 20 76 61 72 20 73 79  ynth... * var sy
a1110 6e 74 68 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 50  nth = new Tone.P
a1120 6f 6c 79 53 79 6e 74 68 28 36 2c 20 54 6f 6e 65  olySynth(6, Tone
a1130 2e 53 79 6e 74 68 29 2e 74 6f 4d 61 73 74 65 72  .Synth).toMaster
a1140 28 29 3b 0a 09 09 20 2a 20 2f 2f 73 65 74 20 74  ();... * //set t
a1150 68 65 20 61 74 74 72 69 62 75 74 65 73 20 75 73  he attributes us
a1160 69 6e 67 20 74 68 65 20 73 65 74 20 69 6e 74 65  ing the set inte
a1170 72 66 61 63 65 0a 09 09 20 2a 20 73 79 6e 74 68  rface... * synth
a1180 2e 73 65 74 28 22 64 65 74 75 6e 65 22 2c 20 2d  .set("detune", -
a1190 31 32 30 30 29 3b 0a 09 09 20 2a 20 2f 2f 70 6c  1200);... * //pl
a11a0 61 79 20 61 20 63 68 6f 72 64 0a 09 09 20 2a 20  ay a chord... * 
a11b0 73 79 6e 74 68 2e 74 72 69 67 67 65 72 41 74 74  synth.triggerAtt
a11c0 61 63 6b 52 65 6c 65 61 73 65 28 5b 22 43 34 22  ackRelease(["C4"
a11d0 2c 20 22 45 34 22 2c 20 22 41 34 22 5d 2c 20 22  , "E4", "A4"], "
a11e0 34 6e 22 29 3b 0a 09 09 20 2a 2f 0a 09 20 20 20  4n");... */..   
a11f0 20 54 6f 6e 65 2e 50 6f 6c 79 53 79 6e 74 68 20   Tone.PolySynth 
a1200 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  = function () {.
a1210 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 49 6e  .        Tone.In
a1220 73 74 72 75 6d 65 6e 74 2e 63 61 6c 6c 28 74 68  strument.call(th
a1230 69 73 29 3b 0a 09 20 20 20 20 20 20 20 20 76 61  is);..        va
a1240 72 20 6f 70 74 69 6f 6e 73 20 3d 20 74 68 69 73  r options = this
a1250 2e 6f 70 74 69 6f 6e 73 4f 62 6a 65 63 74 28 61  .optionsObject(a
a1260 72 67 75 6d 65 6e 74 73 2c 20 5b 0a 09 20 20 20  rguments, [..   
a1270 20 20 20 20 20 20 20 20 20 27 70 6f 6c 79 70 68           'polyph
a1280 6f 6e 79 27 2c 0a 09 20 20 20 20 20 20 20 20 20  ony',..         
a1290 20 20 20 27 76 6f 69 63 65 27 0a 09 20 20 20 20     'voice'..    
a12a0 20 20 20 20 5d 2c 20 54 6f 6e 65 2e 50 6f 6c 79      ], Tone.Poly
a12b0 53 79 6e 74 68 2e 64 65 66 61 75 6c 74 73 29 3b  Synth.defaults);
a12c0 0a 09 20 20 20 20 20 20 20 20 6f 70 74 69 6f 6e  ..        option
a12d0 73 20 3d 20 74 68 69 73 2e 64 65 66 61 75 6c 74  s = this.default
a12e0 41 72 67 28 6f 70 74 69 6f 6e 73 2c 20 54 6f 6e  Arg(options, Ton
a12f0 65 2e 49 6e 73 74 72 75 6d 65 6e 74 2e 64 65 66  e.Instrument.def
a1300 61 75 6c 74 73 29 3b 0a 09 20 20 20 20 20 20 20  aults);..       
a1310 20 2f 2f 6d 61 78 20 70 6f 6c 79 70 68 6f 6e 79   //max polyphony
a1320 0a 09 20 20 20 20 20 20 20 20 6f 70 74 69 6f 6e  ..        option
a1330 73 2e 70 6f 6c 79 70 68 6f 6e 79 20 3d 20 4d 61  s.polyphony = Ma
a1340 74 68 2e 6d 69 6e 28 54 6f 6e 65 2e 50 6f 6c 79  th.min(Tone.Poly
a1350 53 79 6e 74 68 2e 4d 41 58 5f 50 4f 4c 59 50 48  Synth.MAX_POLYPH
a1360 4f 4e 59 2c 20 6f 70 74 69 6f 6e 73 2e 70 6f 6c  ONY, options.pol
a1370 79 70 68 6f 6e 79 29 3b 0a 09 20 20 20 20 20 20  yphony);..      
a1380 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 74 68 65    /**.... *  the
a1390 20 61 72 72 61 79 20 6f 66 20 76 6f 69 63 65 73   array of voices
a13a0 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 41  .... *  @type {A
a13b0 72 72 61 79 7d 0a 09 09 09 20 2a 2f 0a 09 20 20  rray}.... */..  
a13c0 20 20 20 20 20 20 74 68 69 73 2e 76 6f 69 63 65        this.voice
a13d0 73 20 3d 20 6e 65 77 20 41 72 72 61 79 28 6f 70  s = new Array(op
a13e0 74 69 6f 6e 73 2e 70 6f 6c 79 70 68 6f 6e 79 29  tions.polyphony)
a13f0 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
a1400 09 09 20 2a 20 20 54 68 65 20 71 75 65 75 65 20  .. *  The queue 
a1410 6f 66 20 76 6f 69 63 65 73 20 77 69 74 68 20 64  of voices with d
a1420 61 74 61 20 61 62 6f 75 74 20 6c 61 73 74 20 74  ata about last t
a1430 72 69 67 67 65 72 0a 09 09 09 20 2a 20 20 61 6e  rigger.... *  an
a1440 64 20 74 68 65 20 74 72 69 67 67 65 72 65 64 20  d the triggered 
a1450 6e 6f 74 65 0a 09 09 09 20 2a 20 20 40 70 72 69  note.... *  @pri
a1460 76 61 74 65 0a 09 09 09 20 2a 20 20 40 74 79 70  vate.... *  @typ
a1470 65 20 7b 41 72 72 61 79 7d 0a 09 09 09 20 2a 2f  e {Array}.... */
a1480 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
a1490 74 72 69 67 67 65 72 73 20 3d 20 6e 65 77 20 41  triggers = new A
a14a0 72 72 61 79 28 6f 70 74 69 6f 6e 73 2e 70 6f 6c  rray(options.pol
a14b0 79 70 68 6f 6e 79 29 3b 0a 09 20 20 20 20 20 20  yphony);..      
a14c0 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65    /**.... *  The
a14d0 20 64 65 74 75 6e 65 20 69 6e 20 63 65 6e 74 73   detune in cents
a14e0 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 43  .... *  @type {C
a14f0 65 6e 74 73 7d 0a 09 09 09 20 2a 20 20 40 73 69  ents}.... *  @si
a1500 67 6e 61 6c 0a 09 09 09 20 2a 2f 0a 09 20 20 20  gnal.... */..   
a1510 20 20 20 20 20 74 68 69 73 2e 64 65 74 75 6e 65       this.detune
a1520 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53 69 67 6e   = new Tone.Sign
a1530 61 6c 28 6f 70 74 69 6f 6e 73 2e 64 65 74 75 6e  al(options.detun
a1540 65 2c 20 54 6f 6e 65 2e 54 79 70 65 2e 43 65 6e  e, Tone.Type.Cen
a1550 74 73 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ts);..        th
a1560 69 73 2e 5f 72 65 61 64 4f 6e 6c 79 28 27 64 65  is._readOnly('de
a1570 74 75 6e 65 27 29 3b 0a 09 20 20 20 20 20 20 20  tune');..       
a1580 20 2f 2f 63 72 65 61 74 65 20 74 68 65 20 76 6f   //create the vo
a1590 69 63 65 73 0a 09 20 20 20 20 20 20 20 20 66 6f  ices..        fo
a15a0 72 20 28 76 61 72 20 69 20 3d 20 30 3b 20 69 20  r (var i = 0; i 
a15b0 3c 20 6f 70 74 69 6f 6e 73 2e 70 6f 6c 79 70 68  < options.polyph
a15c0 6f 6e 79 3b 20 69 2b 2b 29 20 7b 0a 09 20 20 20  ony; i++) {..   
a15d0 20 20 20 20 20 20 20 20 20 76 61 72 20 76 20 3d           var v =
a15e0 20 6e 65 77 20 6f 70 74 69 6f 6e 73 2e 76 6f 69   new options.voi
a15f0 63 65 28 61 72 67 75 6d 65 6e 74 73 5b 32 5d 2c  ce(arguments[2],
a1600 20 61 72 67 75 6d 65 6e 74 73 5b 33 5d 29 3b 0a   arguments[3]);.
a1610 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
a1620 73 2e 76 6f 69 63 65 73 5b 69 5d 20 3d 20 76 3b  s.voices[i] = v;
a1630 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 76 2e  ..            v.
a1640 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e 6f 75 74  connect(this.out
a1650 70 75 74 29 3b 0a 09 20 20 20 20 20 20 20 20 20  put);..         
a1660 20 20 20 69 66 20 28 76 2e 68 61 73 4f 77 6e 50     if (v.hasOwnP
a1670 72 6f 70 65 72 74 79 28 27 64 65 74 75 6e 65 27  roperty('detune'
a1680 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  )) {..          
a1690 20 20 20 20 20 20 74 68 69 73 2e 64 65 74 75 6e        this.detun
a16a0 65 2e 63 6f 6e 6e 65 63 74 28 76 2e 64 65 74 75  e.connect(v.detu
a16b0 6e 65 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20  ne);..          
a16c0 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20    }..           
a16d0 20 74 68 69 73 2e 5f 74 72 69 67 67 65 72 73 5b   this._triggers[
a16e0 69 5d 20 3d 20 7b 0a 09 20 20 20 20 20 20 20 20  i] = {..        
a16f0 20 20 20 20 20 20 20 20 72 65 6c 65 61 73 65 3a          release:
a1700 20 2d 31 2c 0a 09 20 20 20 20 20 20 20 20 20 20   -1,..          
a1710 20 20 20 20 20 20 6e 6f 74 65 3a 20 6e 75 6c 6c        note: null
a1720 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a1730 20 20 20 76 6f 69 63 65 3a 20 76 0a 09 20 20 20     voice: v..   
a1740 20 20 20 20 20 20 20 20 20 7d 3b 0a 09 20 20 20           };..   
a1750 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
a1760 2f 2f 73 65 74 20 74 68 65 20 76 6f 6c 75 6d 65  //set the volume
a1770 20 69 6e 69 74 69 61 6c 6c 79 0a 09 20 20 20 20   initially..    
a1780 20 20 20 20 74 68 69 73 2e 76 6f 6c 75 6d 65 2e      this.volume.
a1790 76 61 6c 75 65 20 3d 20 6f 70 74 69 6f 6e 73 2e  value = options.
a17a0 76 6f 6c 75 6d 65 3b 0a 09 20 20 20 20 7d 3b 0a  volume;..    };.
a17b0 09 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64  .    Tone.extend
a17c0 28 54 6f 6e 65 2e 50 6f 6c 79 53 79 6e 74 68 2c  (Tone.PolySynth,
a17d0 20 54 6f 6e 65 2e 49 6e 73 74 72 75 6d 65 6e 74   Tone.Instrument
a17e0 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  );..    /**... *
a17f0 20 20 74 68 65 20 64 65 66 61 75 6c 74 73 0a 09    the defaults..
a1800 09 20 2a 20 20 40 63 6f 6e 73 74 0a 09 09 20 2a  . *  @const... *
a1810 20 20 40 73 74 61 74 69 63 0a 09 09 20 2a 20 20    @static... *  
a1820 40 74 79 70 65 20 7b 4f 62 6a 65 63 74 7d 0a 09  @type {Object}..
a1830 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50  . */..    Tone.P
a1840 6f 6c 79 53 79 6e 74 68 2e 64 65 66 61 75 6c 74  olySynth.default
a1850 73 20 3d 20 7b 0a 09 20 20 20 20 20 20 20 20 27  s = {..        '
a1860 70 6f 6c 79 70 68 6f 6e 79 27 3a 20 34 2c 0a 09  polyphony': 4,..
a1870 20 20 20 20 20 20 20 20 27 76 6f 6c 75 6d 65 27          'volume'
a1880 3a 20 30 2c 0a 09 20 20 20 20 20 20 20 20 27 64  : 0,..        'd
a1890 65 74 75 6e 65 27 3a 20 30 2c 0a 09 20 20 20 20  etune': 0,..    
a18a0 20 20 20 20 27 76 6f 69 63 65 27 3a 20 54 6f 6e      'voice': Ton
a18b0 65 2e 53 79 6e 74 68 0a 09 20 20 20 20 7d 3b 0a  e.Synth..    };.
a18c0 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 54  .    /**... *  T
a18d0 72 69 67 67 65 72 20 74 68 65 20 61 74 74 61 63  rigger the attac
a18e0 6b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65  k portion of the
a18f0 20 6e 6f 74 65 0a 09 09 20 2a 20 20 40 70 61 72   note... *  @par
a1900 61 6d 20 20 7b 46 72 65 71 75 65 6e 63 79 7c 41  am  {Frequency|A
a1910 72 72 61 79 7d 20 6e 6f 74 65 73 20 54 68 65 20  rray} notes The 
a1920 6e 6f 74 65 73 20 74 6f 20 70 6c 61 79 2e 20 41  notes to play. A
a1930 63 63 65 70 74 73 20 61 20 73 69 6e 67 6c 65 0a  ccepts a single.
a1940 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
a1950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a1960 20 20 20 20 20 20 46 72 65 71 75 65 6e 63 79 20        Frequency 
a1970 6f 72 20 61 6e 20 61 72 72 61 79 20 6f 66 20 66  or an array of f
a1980 72 65 71 75 65 6e 63 69 65 73 2e 0a 09 09 20 2a  requencies.... *
a1990 20 20 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 7d    @param  {Time}
a19a0 20 5b 74 69 6d 65 3d 6e 6f 77 5d 20 20 54 68 65   [time=now]  The
a19b0 20 73 74 61 72 74 20 74 69 6d 65 20 6f 66 20 74   start time of t
a19c0 68 65 20 6e 6f 74 65 2e 0a 09 09 20 2a 20 20 40  he note.... *  @
a19d0 70 61 72 61 6d 20 7b 6e 75 6d 62 65 72 7d 20 5b  param {number} [
a19e0 76 65 6c 6f 63 69 74 79 3d 31 5d 20 54 68 65 20  velocity=1] The 
a19f0 76 65 6c 6f 63 69 74 79 20 6f 66 20 74 68 65 20  velocity of the 
a1a00 6e 6f 74 65 2e 0a 09 09 20 2a 20 20 40 72 65 74  note.... *  @ret
a1a10 75 72 6e 73 20 7b 54 6f 6e 65 2e 50 6f 6c 79 53  urns {Tone.PolyS
a1a20 79 6e 74 68 7d 20 74 68 69 73 0a 09 09 20 2a 20  ynth} this... * 
a1a30 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 2f   @example... * /
a1a40 2f 74 72 69 67 67 65 72 20 61 20 63 68 6f 72 64  /trigger a chord
a1a50 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 77 69 74   immediately wit
a1a60 68 20 61 20 76 65 6c 6f 63 69 74 79 20 6f 66 20  h a velocity of 
a1a70 30 2e 32 0a 09 09 20 2a 20 70 6f 6c 79 2e 74 72  0.2... * poly.tr
a1a80 69 67 67 65 72 41 74 74 61 63 6b 28 5b 22 41 62  iggerAttack(["Ab
a1a90 33 22 2c 20 22 43 34 22 2c 20 22 46 35 22 5d 2c  3", "C4", "F5"],
a1aa0 20 75 6e 64 65 66 69 6e 65 64 2c 20 30 2e 32 29   undefined, 0.2)
a1ab0 3b 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  ;... */..    Ton
a1ac0 65 2e 50 6f 6c 79 53 79 6e 74 68 2e 70 72 6f 74  e.PolySynth.prot
a1ad0 6f 74 79 70 65 2e 74 72 69 67 67 65 72 41 74 74  otype.triggerAtt
a1ae0 61 63 6b 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  ack = function (
a1af0 6e 6f 74 65 73 2c 20 74 69 6d 65 2c 20 76 65 6c  notes, time, vel
a1b00 6f 63 69 74 79 29 20 7b 0a 09 20 20 20 20 20 20  ocity) {..      
a1b10 20 20 69 66 20 28 21 41 72 72 61 79 2e 69 73 41    if (!Array.isA
a1b20 72 72 61 79 28 6e 6f 74 65 73 29 29 20 7b 0a 09  rray(notes)) {..
a1b30 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 74 65              note
a1b40 73 20 3d 20 5b 6e 6f 74 65 73 5d 3b 0a 09 20 20  s = [notes];..  
a1b50 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
a1b60 20 74 69 6d 65 20 3d 20 74 68 69 73 2e 74 6f 53   time = this.toS
a1b70 65 63 6f 6e 64 73 28 74 69 6d 65 29 3b 0a 09 20  econds(time);.. 
a1b80 20 20 20 20 20 20 20 66 6f 72 20 28 76 61 72 20         for (var 
a1b90 69 20 3d 20 30 3b 20 69 20 3c 20 6e 6f 74 65 73  i = 0; i < notes
a1ba0 2e 6c 65 6e 67 74 68 3b 20 69 2b 2b 29 20 7b 0a  .length; i++) {.
a1bb0 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72  .            var
a1bc0 20 76 61 6c 20 3d 20 6e 6f 74 65 73 5b 69 5d 3b   val = notes[i];
a1bd0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
a1be0 74 72 69 67 67 65 72 20 74 68 65 20 6f 6c 64 65  trigger the olde
a1bf0 73 74 20 76 6f 69 63 65 0a 09 20 20 20 20 20 20  st voice..      
a1c00 20 20 20 20 20 20 76 61 72 20 6f 6c 64 65 73 74        var oldest
a1c10 20 3d 20 74 68 69 73 2e 5f 74 72 69 67 67 65 72   = this._trigger
a1c20 73 5b 30 5d 3b 0a 09 20 20 20 20 20 20 20 20 20  s[0];..         
a1c30 20 20 20 76 61 72 20 6f 6c 64 65 73 74 49 6e 64     var oldestInd
a1c40 65 78 20 3d 20 30 3b 0a 09 20 20 20 20 20 20 20  ex = 0;..       
a1c50 20 20 20 20 20 66 6f 72 20 28 76 61 72 20 6a 20       for (var j 
a1c60 3d 20 31 3b 20 6a 20 3c 20 74 68 69 73 2e 5f 74  = 1; j < this._t
a1c70 72 69 67 67 65 72 73 2e 6c 65 6e 67 74 68 3b 20  riggers.length; 
a1c80 6a 2b 2b 29 20 7b 0a 09 20 20 20 20 20 20 20 20  j++) {..        
a1c90 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73          if (this
a1ca0 2e 5f 74 72 69 67 67 65 72 73 5b 6a 5d 2e 72 65  ._triggers[j].re
a1cb0 6c 65 61 73 65 20 3c 20 6f 6c 64 65 73 74 2e 72  lease < oldest.r
a1cc0 65 6c 65 61 73 65 29 20 7b 0a 09 20 20 20 20 20  elease) {..     
a1cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
a1ce0 6c 64 65 73 74 20 3d 20 74 68 69 73 2e 5f 74 72  ldest = this._tr
a1cf0 69 67 67 65 72 73 5b 6a 5d 3b 0a 09 20 20 20 20  iggers[j];..    
a1d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a1d10 6f 6c 64 65 73 74 49 6e 64 65 78 20 3d 20 6a 3b  oldestIndex = j;
a1d20 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a1d30 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20    }..           
a1d40 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   }..            
a1d50 6f 6c 64 65 73 74 2e 72 65 6c 65 61 73 65 20 3d  oldest.release =
a1d60 20 49 6e 66 69 6e 69 74 79 3b 0a 09 20 20 20 20   Infinity;..    
a1d70 20 20 20 20 20 20 20 20 6f 6c 64 65 73 74 2e 6e          oldest.n
a1d80 6f 74 65 20 3d 20 4a 53 4f 4e 2e 73 74 72 69 6e  ote = JSON.strin
a1d90 67 69 66 79 28 76 61 6c 29 3b 0a 09 20 20 20 20  gify(val);..    
a1da0 20 20 20 20 20 20 20 20 6f 6c 64 65 73 74 2e 76          oldest.v
a1db0 6f 69 63 65 2e 74 72 69 67 67 65 72 41 74 74 61  oice.triggerAtta
a1dc0 63 6b 28 76 61 6c 2c 20 74 69 6d 65 2c 20 76 65  ck(val, time, ve
a1dd0 6c 6f 63 69 74 79 29 3b 0a 09 20 20 20 20 20 20  locity);..      
a1de0 20 20 7d 0a 09 20 20 20 20 20 20 20 20 72 65 74    }..        ret
a1df0 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
a1e00 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
a1e10 20 54 72 69 67 67 65 72 20 74 68 65 20 61 74 74   Trigger the att
a1e20 61 63 6b 20 61 6e 64 20 72 65 6c 65 61 73 65 20  ack and release 
a1e30 61 66 74 65 72 20 74 68 65 20 73 70 65 63 69 66  after the specif
a1e40 69 65 64 20 64 75 72 61 74 69 6f 6e 0a 09 09 20  ied duration... 
a1e50 2a 20 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  *  ... *  @param
a1e60 20 20 7b 46 72 65 71 75 65 6e 63 79 7c 41 72 72    {Frequency|Arr
a1e70 61 79 7d 20 6e 6f 74 65 73 20 54 68 65 20 6e 6f  ay} notes The no
a1e80 74 65 73 20 74 6f 20 70 6c 61 79 2e 20 41 63 63  tes to play. Acc
a1e90 65 70 74 73 20 61 20 73 69 6e 67 6c 65 0a 09 09  epts a single...
a1ea0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
a1eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a1ec0 20 20 20 20 46 72 65 71 75 65 6e 63 79 20 6f 72      Frequency or
a1ed0 20 61 6e 20 61 72 72 61 79 20 6f 66 20 66 72 65   an array of fre
a1ee0 71 75 65 6e 63 69 65 73 2e 0a 09 09 20 2a 20 20  quencies.... *  
a1ef0 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 7d 20 64  @param  {Time} d
a1f00 75 72 61 74 69 6f 6e 20 74 68 65 20 64 75 72 61  uration the dura
a1f10 74 69 6f 6e 20 6f 66 20 74 68 65 20 6e 6f 74 65  tion of the note
a1f20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b  ... *  @param  {
a1f30 54 69 6d 65 7d 20 5b 74 69 6d 65 3d 6e 6f 77 5d  Time} [time=now]
a1f40 20 20 20 20 20 69 66 20 6e 6f 20 74 69 6d 65 20       if no time 
a1f50 69 73 20 67 69 76 65 6e 2c 20 64 65 66 61 75 6c  is given, defaul
a1f60 74 73 20 74 6f 20 6e 6f 77 0a 09 09 20 2a 20 20  ts to now... *  
a1f70 40 70 61 72 61 6d 20 20 7b 6e 75 6d 62 65 72 7d  @param  {number}
a1f80 20 5b 76 65 6c 6f 63 69 74 79 3d 31 5d 20 74 68   [velocity=1] th
a1f90 65 20 76 65 6c 6f 63 69 74 79 20 6f 66 20 74 68  e velocity of th
a1fa0 65 20 61 74 74 61 63 6b 20 28 30 2d 31 29 0a 09  e attack (0-1)..
a1fb0 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54  . *  @returns {T
a1fc0 6f 6e 65 2e 50 6f 6c 79 53 79 6e 74 68 7d 20 74  one.PolySynth} t
a1fd0 68 69 73 0a 09 09 20 2a 20 20 40 65 78 61 6d 70  his... *  @examp
a1fe0 6c 65 0a 09 09 20 2a 20 2f 2f 74 72 69 67 67 65  le... * //trigge
a1ff0 72 20 61 20 63 68 6f 72 64 20 66 6f 72 20 61 20  r a chord for a 
a2000 64 75 72 61 74 69 6f 6e 20 6f 66 20 61 20 68 61  duration of a ha
a2010 6c 66 20 6e 6f 74 65 20 0a 09 09 20 2a 20 70 6f  lf note ... * po
a2020 6c 79 2e 74 72 69 67 67 65 72 41 74 74 61 63 6b  ly.triggerAttack
a2030 52 65 6c 65 61 73 65 28 5b 22 45 62 33 22 2c 20  Release(["Eb3", 
a2040 22 47 34 22 2c 20 22 43 35 22 5d 2c 20 22 32 6e  "G4", "C5"], "2n
a2050 22 29 3b 0a 09 09 20 2a 20 20 40 65 78 61 6d 70  ");... *  @examp
a2060 6c 65 0a 09 09 20 2a 20 2f 2f 63 61 6e 20 70 61  le... * //can pa
a2070 73 73 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  ss in an array o
a2080 66 20 64 75 72 61 74 69 6f 6e 73 20 61 73 20 77  f durations as w
a2090 65 6c 6c 0a 09 09 20 2a 20 70 6f 6c 79 2e 74 72  ell... * poly.tr
a20a0 69 67 67 65 72 41 74 74 61 63 6b 52 65 6c 65 61  iggerAttackRelea
a20b0 73 65 28 5b 22 45 62 33 22 2c 20 22 47 34 22 2c  se(["Eb3", "G4",
a20c0 20 22 43 35 22 5d 2c 20 5b 22 32 6e 22 2c 20 22   "C5"], ["2n", "
a20d0 34 6e 22 2c 20 22 34 6e 22 5d 29 3b 0a 09 09 20  4n", "4n"]);... 
a20e0 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50 6f 6c  */..    Tone.Pol
a20f0 79 53 79 6e 74 68 2e 70 72 6f 74 6f 74 79 70 65  ySynth.prototype
a2100 2e 74 72 69 67 67 65 72 41 74 74 61 63 6b 52 65  .triggerAttackRe
a2110 6c 65 61 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e  lease = function
a2120 20 28 6e 6f 74 65 73 2c 20 64 75 72 61 74 69 6f   (notes, duratio
a2130 6e 2c 20 74 69 6d 65 2c 20 76 65 6c 6f 63 69 74  n, time, velocit
a2140 79 29 20 7b 0a 09 20 20 20 20 20 20 20 20 74 69  y) {..        ti
a2150 6d 65 20 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f  me = this.toSeco
a2160 6e 64 73 28 74 69 6d 65 29 3b 0a 09 20 20 20 20  nds(time);..    
a2170 20 20 20 20 74 68 69 73 2e 74 72 69 67 67 65 72      this.trigger
a2180 41 74 74 61 63 6b 28 6e 6f 74 65 73 2c 20 74 69  Attack(notes, ti
a2190 6d 65 2c 20 76 65 6c 6f 63 69 74 79 29 3b 0a 09  me, velocity);..
a21a0 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73          if (this
a21b0 2e 69 73 41 72 72 61 79 28 64 75 72 61 74 69 6f  .isArray(duratio
a21c0 6e 29 20 26 26 20 74 68 69 73 2e 69 73 41 72 72  n) && this.isArr
a21d0 61 79 28 6e 6f 74 65 73 29 29 20 7b 0a 09 20 20  ay(notes)) {..  
a21e0 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 76            for (v
a21f0 61 72 20 69 20 3d 20 30 3b 20 69 20 3c 20 6e 6f  ar i = 0; i < no
a2200 74 65 73 2e 6c 65 6e 67 74 68 3b 20 69 2b 2b 29  tes.length; i++)
a2210 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a2220 20 20 20 20 76 61 72 20 64 20 3d 20 64 75 72 61      var d = dura
a2230 74 69 6f 6e 5b 4d 61 74 68 2e 6d 69 6e 28 69 2c  tion[Math.min(i,
a2240 20 64 75 72 61 74 69 6f 6e 2e 6c 65 6e 67 74 68   duration.length
a2250 20 2d 20 31 29 5d 3b 0a 09 20 20 20 20 20 20 20   - 1)];..       
a2260 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 72           this.tr
a2270 69 67 67 65 72 52 65 6c 65 61 73 65 28 6e 6f 74  iggerRelease(not
a2280 65 73 5b 69 5d 2c 20 74 69 6d 65 20 2b 20 74 68  es[i], time + th
a2290 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28 64 29 29  is.toSeconds(d))
a22a0 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
a22b0 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
a22c0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a22d0 74 68 69 73 2e 74 72 69 67 67 65 72 52 65 6c 65  this.triggerRele
a22e0 61 73 65 28 6e 6f 74 65 73 2c 20 74 69 6d 65 20  ase(notes, time 
a22f0 2b 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73  + this.toSeconds
a2300 28 64 75 72 61 74 69 6f 6e 29 29 3b 0a 09 20 20  (duration));..  
a2310 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
a2320 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20   return this;.. 
a2330 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09     };..    /**..
a2340 09 20 2a 20 20 54 72 69 67 67 65 72 20 74 68 65  . *  Trigger the
a2350 20 72 65 6c 65 61 73 65 20 6f 66 20 74 68 65 20   release of the 
a2360 6e 6f 74 65 2e 20 55 6e 6c 69 6b 65 20 6d 6f 6e  note. Unlike mon
a2370 6f 70 68 6f 6e 69 63 20 69 6e 73 74 72 75 6d 65  ophonic instrume
a2380 6e 74 73 2c 20 0a 09 09 20 2a 20 20 61 20 6e 6f  nts, ... *  a no
a2390 74 65 20 28 6f 72 20 61 72 72 61 79 20 6f 66 20  te (or array of 
a23a0 6e 6f 74 65 73 29 20 6e 65 65 64 73 20 74 6f 20  notes) needs to 
a23b0 62 65 20 70 61 73 73 65 64 20 69 6e 20 61 73 20  be passed in as 
a23c0 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  the first argume
a23d0 6e 74 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  nt.... *  @param
a23e0 20 20 7b 46 72 65 71 75 65 6e 63 79 7c 41 72 72    {Frequency|Arr
a23f0 61 79 7d 20 6e 6f 74 65 73 20 54 68 65 20 6e 6f  ay} notes The no
a2400 74 65 73 20 74 6f 20 70 6c 61 79 2e 20 41 63 63  tes to play. Acc
a2410 65 70 74 73 20 61 20 73 69 6e 67 6c 65 0a 09 09  epts a single...
a2420 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
a2430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2440 20 20 20 20 46 72 65 71 75 65 6e 63 79 20 6f 72      Frequency or
a2450 20 61 6e 20 61 72 72 61 79 20 6f 66 20 66 72 65   an array of fre
a2460 71 75 65 6e 63 69 65 73 2e 0a 09 09 20 2a 20 20  quencies.... *  
a2470 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 7d 20 5b  @param  {Time} [
a2480 74 69 6d 65 3d 6e 6f 77 5d 20 20 57 68 65 6e 20  time=now]  When 
a2490 74 68 65 20 72 65 6c 65 61 73 65 20 77 69 6c 6c  the release will
a24a0 20 62 65 20 74 72 69 67 67 65 72 65 64 2e 20 0a   be triggered. .
a24b0 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b  .. *  @returns {
a24c0 54 6f 6e 65 2e 50 6f 6c 79 53 79 6e 74 68 7d 20  Tone.PolySynth} 
a24d0 74 68 69 73 0a 09 09 20 2a 20 20 40 65 78 61 6d  this... *  @exam
a24e0 70 6c 65 0a 09 09 20 2a 20 70 6f 6c 79 2e 74 72  ple... * poly.tr
a24f0 69 67 67 65 72 52 65 6c 65 61 73 65 28 5b 22 41  iggerRelease(["A
a2500 62 33 22 2c 20 22 43 34 22 2c 20 22 46 35 22 5d  b3", "C4", "F5"]
a2510 2c 20 22 2b 32 6e 22 29 3b 0a 09 09 20 2a 2f 0a  , "+2n");... */.
a2520 09 20 20 20 20 54 6f 6e 65 2e 50 6f 6c 79 53 79  .    Tone.PolySy
a2530 6e 74 68 2e 70 72 6f 74 6f 74 79 70 65 2e 74 72  nth.prototype.tr
a2540 69 67 67 65 72 52 65 6c 65 61 73 65 20 3d 20 66  iggerRelease = f
a2550 75 6e 63 74 69 6f 6e 20 28 6e 6f 74 65 73 2c 20  unction (notes, 
a2560 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20 20  time) {..       
a2570 20 69 66 20 28 21 41 72 72 61 79 2e 69 73 41 72   if (!Array.isAr
a2580 72 61 79 28 6e 6f 74 65 73 29 29 20 7b 0a 09 20  ray(notes)) {.. 
a2590 20 20 20 20 20 20 20 20 20 20 20 6e 6f 74 65 73             notes
a25a0 20 3d 20 5b 6e 6f 74 65 73 5d 3b 0a 09 20 20 20   = [notes];..   
a25b0 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
a25c0 74 69 6d 65 20 3d 20 74 68 69 73 2e 74 6f 53 65  time = this.toSe
a25d0 63 6f 6e 64 73 28 74 69 6d 65 29 3b 0a 09 20 20  conds(time);..  
a25e0 20 20 20 20 20 20 66 6f 72 20 28 76 61 72 20 69        for (var i
a25f0 20 3d 20 30 3b 20 69 20 3c 20 6e 6f 74 65 73 2e   = 0; i < notes.
a2600 6c 65 6e 67 74 68 3b 20 69 2b 2b 29 20 7b 0a 09  length; i++) {..
a2610 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 67 65              //ge
a2620 74 20 74 68 65 20 76 6f 69 63 65 0a 09 20 20 20  t the voice..   
a2630 20 20 20 20 20 20 20 20 20 76 61 72 20 73 74 72           var str
a2640 69 6e 67 69 66 69 65 64 20 3d 20 4a 53 4f 4e 2e  ingified = JSON.
a2650 73 74 72 69 6e 67 69 66 79 28 6e 6f 74 65 73 5b  stringify(notes[
a2660 69 5d 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20  i]);..          
a2670 20 20 66 6f 72 20 28 76 61 72 20 76 20 3d 20 30    for (var v = 0
a2680 3b 20 76 20 3c 20 74 68 69 73 2e 5f 74 72 69 67  ; v < this._trig
a2690 67 65 72 73 2e 6c 65 6e 67 74 68 3b 20 76 2b 2b  gers.length; v++
a26a0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
a26b0 20 20 20 20 20 76 61 72 20 64 65 73 63 20 3d 20       var desc = 
a26c0 74 68 69 73 2e 5f 74 72 69 67 67 65 72 73 5b 76  this._triggers[v
a26d0 5d 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
a26e0 20 20 20 20 69 66 20 28 64 65 73 63 2e 6e 6f 74      if (desc.not
a26f0 65 20 3d 3d 3d 20 73 74 72 69 6e 67 69 66 69 65  e === stringifie
a2700 64 20 26 26 20 64 65 73 63 2e 72 65 6c 65 61 73  d && desc.releas
a2710 65 20 3e 20 74 69 6d 65 29 20 7b 0a 09 20 20 20  e > time) {..   
a2720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2730 20 64 65 73 63 2e 76 6f 69 63 65 2e 74 72 69 67   desc.voice.trig
a2740 67 65 72 52 65 6c 65 61 73 65 28 74 69 6d 65 29  gerRelease(time)
a2750 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
a2760 20 20 20 20 20 20 20 64 65 73 63 2e 72 65 6c 65         desc.rele
a2770 61 73 65 20 3d 20 74 69 6d 65 3b 0a 09 20 20 20  ase = time;..   
a2780 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09               }..
a2790 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20              }.. 
a27a0 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
a27b0 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09    return this;..
a27c0 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
a27d0 09 09 20 2a 20 20 53 65 74 20 61 20 6d 65 6d 62  .. *  Set a memb
a27e0 65 72 2f 61 74 74 72 69 62 75 74 65 20 6f 66 20  er/attribute of 
a27f0 74 68 65 20 76 6f 69 63 65 73 2e 20 0a 09 09 20  the voices. ... 
a2800 2a 20 20 40 70 61 72 61 6d 20 7b 4f 62 6a 65 63  *  @param {Objec
a2810 74 7c 73 74 72 69 6e 67 7d 20 70 61 72 61 6d 73  t|string} params
a2820 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 6e  ... *  @param {n
a2830 75 6d 62 65 72 3d 7d 20 76 61 6c 75 65 0a 09 09  umber=} value...
a2840 20 2a 20 20 40 70 61 72 61 6d 20 7b 54 69 6d 65   *  @param {Time
a2850 3d 7d 20 72 61 6d 70 54 69 6d 65 0a 09 09 20 2a  =} rampTime... *
a2860 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65    @returns {Tone
a2870 2e 50 6f 6c 79 53 79 6e 74 68 7d 20 74 68 69 73  .PolySynth} this
a2880 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a  ... *  @example.
a2890 09 09 20 2a 20 70 6f 6c 79 2e 73 65 74 28 7b 0a  .. * poly.set({.
a28a0 09 09 20 2a 20 09 22 66 69 6c 74 65 72 22 20 3a  .. * ."filter" :
a28b0 20 7b 0a 09 09 20 2a 20 09 09 22 74 79 70 65 22   {... * .."type"
a28c0 20 3a 20 22 68 69 67 68 70 61 73 73 22 0a 09 09   : "highpass"...
a28d0 20 2a 20 09 7d 2c 0a 09 09 20 2a 20 09 22 65 6e   * .},... * ."en
a28e0 76 65 6c 6f 70 65 22 20 3a 20 7b 0a 09 09 20 2a  velope" : {... *
a28f0 20 09 09 22 61 74 74 61 63 6b 22 20 3a 20 30 2e   .."attack" : 0.
a2900 32 35 0a 09 09 20 2a 20 09 7d 0a 09 09 20 2a 20  25... * .}... * 
a2910 7d 29 3b 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  });... */..    T
a2920 6f 6e 65 2e 50 6f 6c 79 53 79 6e 74 68 2e 70 72  one.PolySynth.pr
a2930 6f 74 6f 74 79 70 65 2e 73 65 74 20 3d 20 66 75  ototype.set = fu
a2940 6e 63 74 69 6f 6e 20 28 70 61 72 61 6d 73 2c 20  nction (params, 
a2950 76 61 6c 75 65 2c 20 72 61 6d 70 54 69 6d 65 29  value, rampTime)
a2960 20 7b 0a 09 20 20 20 20 20 20 20 20 66 6f 72 20   {..        for 
a2970 28 76 61 72 20 69 20 3d 20 30 3b 20 69 20 3c 20  (var i = 0; i < 
a2980 74 68 69 73 2e 76 6f 69 63 65 73 2e 6c 65 6e 67  this.voices.leng
a2990 74 68 3b 20 69 2b 2b 29 20 7b 0a 09 20 20 20 20  th; i++) {..    
a29a0 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 6f 69          this.voi
a29b0 63 65 73 5b 69 5d 2e 73 65 74 28 70 61 72 61 6d  ces[i].set(param
a29c0 73 2c 20 76 61 6c 75 65 2c 20 72 61 6d 70 54 69  s, value, rampTi
a29d0 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a  me);..        }.
a29e0 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
a29f0 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20  this;..    };.. 
a2a00 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 47 65 74     /**... *  Get
a2a10 20 74 68 65 20 73 79 6e 74 68 27 73 20 61 74 74   the synth's att
a2a20 72 69 62 75 74 65 73 2e 20 47 69 76 65 6e 20 6e  ributes. Given n
a2a30 6f 20 61 72 67 75 6d 65 6e 74 73 20 67 65 74 0a  o arguments get.
a2a40 09 09 20 2a 20 20 77 69 6c 6c 20 72 65 74 75 72  .. *  will retur
a2a50 6e 20 61 6c 6c 20 61 76 61 69 6c 61 62 6c 65 20  n all available 
a2a60 6f 62 6a 65 63 74 20 70 72 6f 70 65 72 74 69 65  object propertie
a2a70 73 20 61 6e 64 20 74 68 65 69 72 20 63 6f 72 72  s and their corr
a2a80 65 73 70 6f 6e 64 69 6e 67 0a 09 09 20 2a 20 20  esponding... *  
a2a90 76 61 6c 75 65 73 2e 20 50 61 73 73 20 69 6e 20  values. Pass in 
a2aa0 61 20 73 69 6e 67 6c 65 20 61 74 74 72 69 62 75  a single attribu
a2ab0 74 65 20 74 6f 20 72 65 74 72 69 65 76 65 20 6f  te to retrieve o
a2ac0 72 20 61 6e 20 61 72 72 61 79 0a 09 09 20 2a 20  r an array... * 
a2ad0 20 6f 66 20 61 74 74 72 69 62 75 74 65 73 2e 20   of attributes. 
a2ae0 54 68 65 20 61 74 74 72 69 62 75 74 65 20 73 74  The attribute st
a2af0 72 69 6e 67 73 20 63 61 6e 20 61 6c 73 6f 20 69  rings can also i
a2b00 6e 63 6c 75 64 65 20 61 20 22 2e 22 0a 09 09 20  nclude a "."... 
a2b10 2a 20 20 74 6f 20 61 63 63 65 73 73 20 64 65 65  *  to access dee
a2b20 70 65 72 20 70 72 6f 70 65 72 74 69 65 73 2e 0a  per properties..
a2b30 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 41 72  .. *  @param {Ar
a2b40 72 61 79 3d 7d 20 70 61 72 61 6d 73 20 74 68 65  ray=} params the
a2b50 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 67   parameters to g
a2b60 65 74 2c 20 6f 74 68 65 72 77 69 73 65 20 77 69  et, otherwise wi
a2b70 6c 6c 20 72 65 74 75 72 6e 20 0a 09 09 20 2a 20  ll return ... * 
a2b80 20 09 09 09 09 09 20 20 20 61 6c 6c 20 61 76 61   .....   all ava
a2b90 69 6c 61 62 6c 65 2e 0a 09 09 20 2a 2f 0a 09 20  ilable.... */.. 
a2ba0 20 20 20 54 6f 6e 65 2e 50 6f 6c 79 53 79 6e 74     Tone.PolySynt
a2bb0 68 2e 70 72 6f 74 6f 74 79 70 65 2e 67 65 74 20  h.prototype.get 
a2bc0 3d 20 66 75 6e 63 74 69 6f 6e 20 28 70 61 72 61  = function (para
a2bd0 6d 73 29 20 7b 0a 09 20 20 20 20 20 20 20 20 72  ms) {..        r
a2be0 65 74 75 72 6e 20 74 68 69 73 2e 76 6f 69 63 65  eturn this.voice
a2bf0 73 5b 30 5d 2e 67 65 74 28 70 61 72 61 6d 73 29  s[0].get(params)
a2c00 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  ;..    };..    /
a2c10 2a 2a 0a 09 09 20 2a 20 20 54 72 69 67 67 65 72  **... *  Trigger
a2c20 20 74 68 65 20 72 65 6c 65 61 73 65 20 70 6f 72   the release por
a2c30 74 69 6f 6e 20 6f 66 20 61 6c 6c 20 74 68 65 20  tion of all the 
a2c40 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65  currently active
a2c50 20 76 6f 69 63 65 73 2e 0a 09 09 20 2a 20 20 40   voices.... *  @
a2c60 70 61 72 61 6d 20 7b 54 69 6d 65 7d 20 5b 74 69  param {Time} [ti
a2c70 6d 65 3d 6e 6f 77 5d 20 57 68 65 6e 20 74 68 65  me=now] When the
a2c80 20 6e 6f 74 65 73 20 73 68 6f 75 6c 64 20 62 65   notes should be
a2c90 20 72 65 6c 65 61 73 65 64 2e 0a 09 09 20 2a 20   released.... * 
a2ca0 20 40 72 65 74 75 72 6e 20 7b 54 6f 6e 65 2e 50   @return {Tone.P
a2cb0 6f 6c 79 53 79 6e 74 68 7d 20 74 68 69 73 0a 09  olySynth} this..
a2cc0 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50  . */..    Tone.P
a2cd0 6f 6c 79 53 79 6e 74 68 2e 70 72 6f 74 6f 74 79  olySynth.prototy
a2ce0 70 65 2e 72 65 6c 65 61 73 65 41 6c 6c 20 3d 20  pe.releaseAll = 
a2cf0 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d 65 29 20  function (time) 
a2d00 7b 0a 09 20 20 20 20 20 20 20 20 74 69 6d 65 20  {..        time 
a2d10 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73  = this.toSeconds
a2d20 28 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20  (time);..       
a2d30 20 66 6f 72 20 28 76 61 72 20 69 20 3d 20 30 3b   for (var i = 0;
a2d40 20 69 20 3c 20 74 68 69 73 2e 5f 74 72 69 67 67   i < this._trigg
a2d50 65 72 73 2e 6c 65 6e 67 74 68 3b 20 69 2b 2b 29  ers.length; i++)
a2d60 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a2d70 76 61 72 20 64 65 73 63 20 3d 20 74 68 69 73 2e  var desc = this.
a2d80 5f 74 72 69 67 67 65 72 73 5b 69 5d 3b 0a 09 20  _triggers[i];.. 
a2d90 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
a2da0 65 73 63 2e 72 65 6c 65 61 73 65 20 3e 20 74 69  esc.release > ti
a2db0 6d 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  me) {..         
a2dc0 20 20 20 20 20 20 20 64 65 73 63 2e 72 65 6c 65         desc.rele
a2dd0 61 73 65 20 3d 20 74 69 6d 65 3b 0a 09 20 20 20  ase = time;..   
a2de0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
a2df0 63 2e 76 6f 69 63 65 2e 74 72 69 67 67 65 72 52  c.voice.triggerR
a2e00 65 6c 65 61 73 65 28 74 69 6d 65 29 3b 0a 09 20  elease(time);.. 
a2e10 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20             }..  
a2e20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
a2e30 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20   return this;.. 
a2e40 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09     };..    /**..
a2e50 09 20 2a 20 20 43 6c 65 61 6e 20 75 70 2e 0a 09  . *  Clean up...
a2e60 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54  . *  @returns {T
a2e70 6f 6e 65 2e 50 6f 6c 79 53 79 6e 74 68 7d 20 74  one.PolySynth} t
a2e80 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  his... */..    T
a2e90 6f 6e 65 2e 50 6f 6c 79 53 79 6e 74 68 2e 70 72  one.PolySynth.pr
a2ea0 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20  ototype.dispose 
a2eb0 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  = function () {.
a2ec0 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 49 6e  .        Tone.In
a2ed0 73 74 72 75 6d 65 6e 74 2e 70 72 6f 74 6f 74 79  strument.prototy
a2ee0 70 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28  pe.dispose.call(
a2ef0 74 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20 20  this);..        
a2f00 66 6f 72 20 28 76 61 72 20 69 20 3d 20 30 3b 20  for (var i = 0; 
a2f10 69 20 3c 20 74 68 69 73 2e 76 6f 69 63 65 73 2e  i < this.voices.
a2f20 6c 65 6e 67 74 68 3b 20 69 2b 2b 29 20 7b 0a 09  length; i++) {..
a2f30 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
a2f40 2e 76 6f 69 63 65 73 5b 69 5d 2e 64 69 73 70 6f  .voices[i].dispo
a2f50 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20  se();..         
a2f60 20 20 20 74 68 69 73 2e 76 6f 69 63 65 73 5b 69     this.voices[i
a2f70 5d 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20  ] = null;..     
a2f80 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 74 68     }..        th
a2f90 69 73 2e 5f 77 72 69 74 61 62 6c 65 28 27 64 65  is._writable('de
a2fa0 74 75 6e 65 27 29 3b 0a 09 20 20 20 20 20 20 20  tune');..       
a2fb0 20 74 68 69 73 2e 64 65 74 75 6e 65 2e 64 69 73   this.detune.dis
a2fc0 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20  pose();..       
a2fd0 20 74 68 69 73 2e 64 65 74 75 6e 65 20 3d 20 6e   this.detune = n
a2fe0 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ull;..        th
a2ff0 69 73 2e 76 6f 69 63 65 73 20 3d 20 6e 75 6c 6c  is.voices = null
a3000 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
a3010 5f 74 72 69 67 67 65 72 73 20 3d 20 6e 75 6c 6c  _triggers = null
a3020 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
a3030 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a  n this;..    };.
a3040 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 54  .    /**... *  T
a3050 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
a3060 72 20 6f 66 20 6e 6f 74 65 73 20 74 68 61 74 20  r of notes that 
a3070 63 61 6e 20 62 65 20 61 6c 6c 6f 63 61 74 65 64  can be allocated
a3080 20 0a 09 09 20 2a 20 20 74 6f 20 61 20 70 6f 6c   ... *  to a pol
a3090 79 73 79 6e 74 68 2e 20 0a 09 09 20 2a 20 20 40  ysynth. ... *  @
a30a0 74 79 70 65 20 20 7b 4e 75 6d 62 65 72 7d 0a 09  type  {Number}..
a30b0 09 20 2a 20 20 40 73 74 61 74 69 63 0a 09 09 20  . *  @static... 
a30c0 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50 6f 6c  */..    Tone.Pol
a30d0 79 53 79 6e 74 68 2e 4d 41 58 5f 50 4f 4c 59 50  ySynth.MAX_POLYP
a30e0 48 4f 4e 59 20 3d 20 32 30 3b 0a 09 20 20 20 20  HONY = 20;..    
a30f0 72 65 74 75 72 6e 20 54 6f 6e 65 2e 50 6f 6c 79  return Tone.Poly
a3100 53 79 6e 74 68 3b 0a 09 7d 29 3b 0a 09 4d 6f 64  Synth;..});..Mod
a3110 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28 54 6f  ule(function (To
a3120 6e 65 29 20 7b 0a 09 20 20 20 20 0a 09 20 20 20  ne) {..    ..   
a3130 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c 61 73   /**... *  @clas
a3140 73 20 20 54 6f 6e 65 2e 50 6c 61 79 65 72 20 69  s  Tone.Player i
a3150 73 20 61 6e 20 61 75 64 69 6f 20 66 69 6c 65 20  s an audio file 
a3160 70 6c 61 79 65 72 20 77 69 74 68 20 73 74 61 72  player with star
a3170 74 2c 20 6c 6f 6f 70 2c 20 61 6e 64 20 73 74 6f  t, loop, and sto
a3180 70 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 09 09 20  p functions.... 
a3190 2a 20 20 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74  *  ... *  @const
a31a0 72 75 63 74 6f 72 0a 09 09 20 2a 20 20 40 65 78  ructor... *  @ex
a31b0 74 65 6e 64 73 20 7b 54 6f 6e 65 2e 53 6f 75 72  tends {Tone.Sour
a31c0 63 65 7d 20 0a 09 09 20 2a 20 20 40 70 61 72 61  ce} ... *  @para
a31d0 6d 20 7b 73 74 72 69 6e 67 7c 41 75 64 69 6f 42  m {string|AudioB
a31e0 75 66 66 65 72 7d 20 75 72 6c 20 45 69 74 68 65  uffer} url Eithe
a31f0 72 20 74 68 65 20 41 75 64 69 6f 42 75 66 66 65  r the AudioBuffe
a3200 72 20 6f 72 20 74 68 65 20 75 72 6c 20 66 72 6f  r or the url fro
a3210 6d 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20  m... *          
a3220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a3230 20 20 20 20 20 20 20 20 77 68 69 63 68 20 74 6f          which to
a3240 20 6c 6f 61 64 20 74 68 65 20 41 75 64 69 6f 42   load the AudioB
a3250 75 66 66 65 72 0a 09 09 20 2a 20 20 40 70 61 72  uffer... *  @par
a3260 61 6d 20 7b 66 75 6e 63 74 69 6f 6e 3d 7d 20 6f  am {function=} o
a3270 6e 6c 6f 61 64 20 54 68 65 20 66 75 6e 63 74 69  nload The functi
a3280 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 20 77 68 65  on to invoke whe
a3290 6e 20 74 68 65 20 62 75 66 66 65 72 20 69 73 20  n the buffer is 
a32a0 6c 6f 61 64 65 64 2e 20 0a 09 09 20 2a 20 20 20  loaded. ... *   
a32b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a32c0 20 20 20 20 20 20 20 20 20 52 65 63 6f 6d 6d 65           Recomme
a32d0 6e 64 65 64 20 74 6f 20 75 73 65 20 54 6f 6e 65  nded to use Tone
a32e0 2e 42 75 66 66 65 72 2e 6f 6e 28 27 6c 6f 61 64  .Buffer.on('load
a32f0 27 29 20 69 6e 73 74 65 61 64 2e 0a 09 09 20 2a  ') instead.... *
a3300 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20    @example... * 
a3310 76 61 72 20 70 6c 61 79 65 72 20 3d 20 6e 65 77  var player = new
a3320 20 54 6f 6e 65 2e 50 6c 61 79 65 72 28 22 2e 2f   Tone.Player("./
a3330 70 61 74 68 2f 74 6f 2f 73 61 6d 70 6c 65 2e 6d  path/to/sample.m
a3340 70 33 22 29 2e 74 6f 4d 61 73 74 65 72 28 29 3b  p3").toMaster();
a3350 0a 09 09 20 2a 20 2f 2f 70 6c 61 79 20 61 73 20  ... * //play as 
a3360 73 6f 6f 6e 20 61 73 20 74 68 65 20 62 75 66 66  soon as the buff
a3370 65 72 20 69 73 20 6c 6f 61 64 65 64 0a 09 09 20  er is loaded... 
a3380 2a 20 70 6c 61 79 65 72 2e 61 75 74 6f 73 74 61  * player.autosta
a3390 72 74 20 3d 20 74 72 75 65 3b 0a 09 09 20 2a 2f  rt = true;... */
a33a0 0a 09 20 20 20 20 54 6f 6e 65 2e 50 6c 61 79 65  ..    Tone.Playe
a33b0 72 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 75 72  r = function (ur
a33c0 6c 29 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61  l) {..        va
a33d0 72 20 6f 70 74 69 6f 6e 73 3b 0a 09 20 20 20 20  r options;..    
a33e0 20 20 20 20 69 66 20 28 75 72 6c 20 69 6e 73 74      if (url inst
a33f0 61 6e 63 65 6f 66 20 54 6f 6e 65 2e 42 75 66 66  anceof Tone.Buff
a3400 65 72 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  er) {..         
a3410 20 20 20 75 72 6c 20 3d 20 75 72 6c 2e 67 65 74     url = url.get
a3420 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ();..           
a3430 20 6f 70 74 69 6f 6e 73 20 3d 20 54 6f 6e 65 2e   options = Tone.
a3440 50 6c 61 79 65 72 2e 64 65 66 61 75 6c 74 73 3b  Player.defaults;
a3450 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
a3460 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a3470 6f 70 74 69 6f 6e 73 20 3d 20 74 68 69 73 2e 6f  options = this.o
a3480 70 74 69 6f 6e 73 4f 62 6a 65 63 74 28 61 72 67  ptionsObject(arg
a3490 75 6d 65 6e 74 73 2c 20 5b 0a 09 20 20 20 20 20  uments, [..     
a34a0 20 20 20 20 20 20 20 20 20 20 20 27 75 72 6c 27             'url'
a34b0 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a34c0 20 20 20 27 6f 6e 6c 6f 61 64 27 0a 09 20 20 20     'onload'..   
a34d0 20 20 20 20 20 20 20 20 20 5d 2c 20 54 6f 6e 65           ], Tone
a34e0 2e 50 6c 61 79 65 72 2e 64 65 66 61 75 6c 74 73  .Player.defaults
a34f0 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  );..        }.. 
a3500 20 20 20 20 20 20 20 54 6f 6e 65 2e 53 6f 75 72         Tone.Sour
a3510 63 65 2e 63 61 6c 6c 28 74 68 69 73 2c 20 6f 70  ce.call(this, op
a3520 74 69 6f 6e 73 29 3b 0a 09 20 20 20 20 20 20 20  tions);..       
a3530 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 40 70 72 69   /**.... *  @pri
a3540 76 61 74 65 0a 09 09 09 20 2a 20 20 40 74 79 70  vate.... *  @typ
a3550 65 20 7b 41 75 64 69 6f 42 75 66 66 65 72 53 6f  e {AudioBufferSo
a3560 75 72 63 65 4e 6f 64 65 7d 0a 09 09 09 20 2a 2f  urceNode}.... */
a3570 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
a3580 73 6f 75 72 63 65 20 3d 20 6e 75 6c 6c 3b 0a 09  source = null;..
a3590 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
a35a0 2a 20 20 49 66 20 74 68 65 20 66 69 6c 65 20 73  *  If the file s
a35b0 68 6f 75 6c 64 20 70 6c 61 79 20 61 73 20 73 6f  hould play as so
a35c0 6f 6e 0a 09 09 09 20 2a 20 20 61 73 20 74 68 65  on.... *  as the
a35d0 20 62 75 66 66 65 72 20 69 73 20 6c 6f 61 64 65   buffer is loade
a35e0 64 2e 20 0a 09 09 09 20 2a 20 20 40 74 79 70 65  d. .... *  @type
a35f0 20 7b 62 6f 6f 6c 65 61 6e 7d 0a 09 09 09 20 2a   {boolean}.... *
a3600 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 09 20 2a    @example.... *
a3610 20 2f 2f 77 69 6c 6c 20 70 6c 61 79 20 61 73 20   //will play as 
a3620 73 6f 6f 6e 20 61 73 20 69 74 27 73 20 6c 6f 61  soon as it's loa
a3630 64 65 64 0a 09 09 09 20 2a 20 76 61 72 20 70 6c  ded.... * var pl
a3640 61 79 65 72 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  ayer = new Tone.
a3650 50 6c 61 79 65 72 28 7b 0a 09 09 09 20 2a 20 09  Player({.... * .
a3660 22 75 72 6c 22 20 3a 20 22 2e 2f 70 61 74 68 2f  "url" : "./path/
a3670 74 6f 2f 73 61 6d 70 6c 65 2e 6d 70 33 22 2c 0a  to/sample.mp3",.
a3680 09 09 09 20 2a 20 09 22 61 75 74 6f 73 74 61 72  ... * ."autostar
a3690 74 22 20 3a 20 74 72 75 65 2c 0a 09 09 09 20 2a  t" : true,.... *
a36a0 20 7d 29 2e 74 6f 4d 61 73 74 65 72 28 29 3b 0a   }).toMaster();.
a36b0 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
a36c0 74 68 69 73 2e 61 75 74 6f 73 74 61 72 74 20 3d  this.autostart =
a36d0 20 6f 70 74 69 6f 6e 73 2e 61 75 74 6f 73 74 61   options.autosta
a36e0 72 74 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  rt;..        /**
a36f0 0a 09 09 09 20 2a 20 20 74 68 65 20 62 75 66 66  .... *  the buff
a3700 65 72 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61  er.... *  @priva
a3710 74 65 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  te.... *  @type 
a3720 7b 54 6f 6e 65 2e 42 75 66 66 65 72 7d 0a 09 09  {Tone.Buffer}...
a3730 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
a3740 69 73 2e 5f 62 75 66 66 65 72 20 3d 20 6e 65 77  is._buffer = new
a3750 20 54 6f 6e 65 2e 42 75 66 66 65 72 28 7b 0a 09   Tone.Buffer({..
a3760 20 20 20 20 20 20 20 20 20 20 20 20 27 75 72 6c              'url
a3770 27 3a 20 6f 70 74 69 6f 6e 73 2e 75 72 6c 2c 0a  ': options.url,.
a3780 09 20 20 20 20 20 20 20 20 20 20 20 20 27 6f 6e  .            'on
a3790 6c 6f 61 64 27 3a 20 74 68 69 73 2e 5f 6f 6e 6c  load': this._onl
a37a0 6f 61 64 2e 62 69 6e 64 28 74 68 69 73 2c 20 6f  oad.bind(this, o
a37b0 70 74 69 6f 6e 73 2e 6f 6e 6c 6f 61 64 29 2c 0a  ptions.onload),.
a37c0 09 20 20 20 20 20 20 20 20 20 20 20 20 27 72 65  .            're
a37d0 76 65 72 73 65 27 3a 20 6f 70 74 69 6f 6e 73 2e  verse': options.
a37e0 72 65 76 65 72 73 65 0a 09 20 20 20 20 20 20 20  reverse..       
a37f0 20 7d 29 3b 0a 09 20 20 20 20 20 20 20 20 69 66   });..        if
a3800 20 28 75 72 6c 20 69 6e 73 74 61 6e 63 65 6f 66   (url instanceof
a3810 20 41 75 64 69 6f 42 75 66 66 65 72 29 20 7b 0a   AudioBuffer) {.
a3820 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
a3830 73 2e 5f 62 75 66 66 65 72 2e 73 65 74 28 75 72  s._buffer.set(ur
a3840 6c 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  l);..        }..
a3850 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
a3860 2a 20 20 69 66 20 74 68 65 20 62 75 66 66 65 72  *  if the buffer
a3870 20 73 68 6f 75 6c 64 20 6c 6f 6f 70 20 6f 6e 63   should loop onc
a3880 65 20 69 74 27 73 20 6f 76 65 72 0a 09 09 09 20  e it's over.... 
a3890 2a 20 20 40 74 79 70 65 20 7b 62 6f 6f 6c 65 61  *  @type {boolea
a38a0 6e 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61  n}.... *  @priva
a38b0 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  te.... */..     
a38c0 20 20 20 74 68 69 73 2e 5f 6c 6f 6f 70 20 3d 20     this._loop = 
a38d0 6f 70 74 69 6f 6e 73 2e 6c 6f 6f 70 3b 0a 09 20  options.loop;.. 
a38e0 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
a38f0 20 20 69 66 20 27 6c 6f 6f 70 27 20 69 73 20 74    if 'loop' is t
a3900 72 75 65 2c 20 74 68 65 20 6c 6f 6f 70 20 77 69  rue, the loop wi
a3910 6c 6c 20 73 74 61 72 74 20 61 74 20 74 68 69 73  ll start at this
a3920 20 70 6f 73 69 74 69 6f 6e 0a 09 09 09 20 2a 20   position.... * 
a3930 20 40 74 79 70 65 20 7b 54 69 6d 65 7d 0a 09 09   @type {Time}...
a3940 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
a3950 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
a3960 69 73 2e 5f 6c 6f 6f 70 53 74 61 72 74 20 3d 20  is._loopStart = 
a3970 6f 70 74 69 6f 6e 73 2e 6c 6f 6f 70 53 74 61 72  options.loopStar
a3980 74 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  t;..        /**.
a3990 09 09 09 20 2a 20 20 69 66 20 27 6c 6f 6f 70 27  ... *  if 'loop'
a39a0 20 69 73 20 74 72 75 65 2c 20 74 68 65 20 6c 6f   is true, the lo
a39b0 6f 70 20 77 69 6c 6c 20 65 6e 64 20 61 74 20 74  op will end at t
a39c0 68 69 73 20 70 6f 73 69 74 69 6f 6e 0a 09 09 09  his position....
a39d0 20 2a 20 20 40 74 79 70 65 20 7b 54 69 6d 65 7d   *  @type {Time}
a39e0 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  .... *  @private
a39f0 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
a3a00 20 74 68 69 73 2e 5f 6c 6f 6f 70 45 6e 64 20 3d   this._loopEnd =
a3a10 20 6f 70 74 69 6f 6e 73 2e 6c 6f 6f 70 45 6e 64   options.loopEnd
a3a20 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
a3a30 09 09 20 2a 20 20 74 68 65 20 70 6c 61 79 62 61  .. *  the playba
a3a40 63 6b 20 72 61 74 65 0a 09 09 09 20 2a 20 20 40  ck rate.... *  @
a3a50 70 72 69 76 61 74 65 0a 09 09 09 20 2a 20 20 40  private.... *  @
a3a60 74 79 70 65 20 7b 6e 75 6d 62 65 72 7d 0a 09 09  type {number}...
a3a70 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
a3a80 69 73 2e 5f 70 6c 61 79 62 61 63 6b 52 61 74 65  is._playbackRate
a3a90 20 3d 20 6f 70 74 69 6f 6e 73 2e 70 6c 61 79 62   = options.playb
a3aa0 61 63 6b 52 61 74 65 3b 0a 09 20 20 20 20 20 20  ackRate;..      
a3ab0 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 45 6e 61    /**.... *  Ena
a3ac0 62 6c 69 6e 67 20 72 65 74 72 69 67 67 65 72 20  bling retrigger 
a3ad0 77 69 6c 6c 20 61 6c 6c 6f 77 20 61 20 70 6c 61  will allow a pla
a3ae0 79 65 72 20 74 6f 20 62 65 20 72 65 73 74 61 72  yer to be restar
a3af0 74 65 64 0a 09 09 09 20 2a 20 20 62 65 66 6f 72  ted.... *  befor
a3b00 65 20 74 68 65 20 74 68 65 20 70 72 65 76 69 6f  e the the previo
a3b10 75 73 20 27 73 74 61 72 74 27 20 69 73 20 64 6f  us 'start' is do
a3b20 6e 65 20 70 6c 61 79 69 6e 67 2e 20 4f 74 68 65  ne playing. Othe
a3b30 72 77 69 73 65 2c 20 0a 09 09 09 20 2a 20 20 73  rwise, .... *  s
a3b40 75 63 63 65 73 73 69 76 65 20 63 61 6c 6c 73 20  uccessive calls 
a3b50 74 6f 20 54 6f 6e 65 2e 50 6c 61 79 65 72 2e 73  to Tone.Player.s
a3b60 74 61 72 74 20 77 69 6c 6c 20 6f 6e 6c 79 20 73  tart will only s
a3b70 74 61 72 74 0a 09 09 09 20 2a 20 20 74 68 65 20  tart.... *  the 
a3b80 73 61 6d 70 6c 65 20 69 66 20 69 74 20 68 61 64  sample if it had
a3b90 20 70 6c 61 79 65 64 20 61 6c 6c 20 74 68 65 20   played all the 
a3ba0 77 61 79 20 74 68 72 6f 75 67 68 2e 20 0a 09 09  way through. ...
a3bb0 09 20 2a 20 20 40 74 79 70 65 20 7b 62 6f 6f 6c  . *  @type {bool
a3bc0 65 61 6e 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20  ean}.... */..   
a3bd0 20 20 20 20 20 74 68 69 73 2e 72 65 74 72 69 67       this.retrig
a3be0 67 65 72 20 3d 20 6f 70 74 69 6f 6e 73 2e 72 65  ger = options.re
a3bf0 74 72 69 67 67 65 72 3b 0a 09 20 20 20 20 7d 3b  trigger;..    };
a3c00 0a 09 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e  ..    Tone.exten
a3c10 64 28 54 6f 6e 65 2e 50 6c 61 79 65 72 2c 20 54  d(Tone.Player, T
a3c20 6f 6e 65 2e 53 6f 75 72 63 65 29 3b 0a 09 20 20  one.Source);..  
a3c30 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 74 68 65 20    /**... *  the 
a3c40 64 65 66 61 75 6c 74 20 70 61 72 61 6d 65 74 65  default paramete
a3c50 72 73 0a 09 09 20 2a 20 20 40 73 74 61 74 69 63  rs... *  @static
a3c60 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 0a 09 09  ... *  @const...
a3c70 20 2a 20 20 40 74 79 70 65 20 7b 4f 62 6a 65 63   *  @type {Objec
a3c80 74 7d 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  t}... */..    To
a3c90 6e 65 2e 50 6c 61 79 65 72 2e 64 65 66 61 75 6c  ne.Player.defaul
a3ca0 74 73 20 3d 20 7b 0a 09 20 20 20 20 20 20 20 20  ts = {..        
a3cb0 27 6f 6e 6c 6f 61 64 27 3a 20 54 6f 6e 65 2e 6e  'onload': Tone.n
a3cc0 6f 4f 70 2c 0a 09 20 20 20 20 20 20 20 20 27 70  oOp,..        'p
a3cd0 6c 61 79 62 61 63 6b 52 61 74 65 27 3a 20 31 2c  laybackRate': 1,
a3ce0 0a 09 20 20 20 20 20 20 20 20 27 6c 6f 6f 70 27  ..        'loop'
a3cf0 3a 20 66 61 6c 73 65 2c 0a 09 20 20 20 20 20 20  : false,..      
a3d00 20 20 27 61 75 74 6f 73 74 61 72 74 27 3a 20 66    'autostart': f
a3d10 61 6c 73 65 2c 0a 09 20 20 20 20 20 20 20 20 27  alse,..        '
a3d20 6c 6f 6f 70 53 74 61 72 74 27 3a 20 30 2c 0a 09  loopStart': 0,..
a3d30 20 20 20 20 20 20 20 20 27 6c 6f 6f 70 45 6e 64          'loopEnd
a3d40 27 3a 20 30 2c 0a 09 20 20 20 20 20 20 20 20 27  ': 0,..        '
a3d50 72 65 74 72 69 67 67 65 72 27 3a 20 66 61 6c 73  retrigger': fals
a3d60 65 2c 0a 09 20 20 20 20 20 20 20 20 27 72 65 76  e,..        'rev
a3d70 65 72 73 65 27 3a 20 66 61 6c 73 65 0a 09 20 20  erse': false..  
a3d80 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    };..    /**...
a3d90 20 2a 20 20 4c 6f 61 64 20 74 68 65 20 61 75 64   *  Load the aud
a3da0 69 6f 20 66 69 6c 65 20 61 73 20 61 6e 20 61 75  io file as an au
a3db0 64 69 6f 20 62 75 66 66 65 72 2e 0a 09 09 20 2a  dio buffer.... *
a3dc0 20 20 44 65 63 6f 64 65 73 20 74 68 65 20 61 75    Decodes the au
a3dd0 64 69 6f 20 61 73 79 6e 63 68 72 6f 6e 6f 75 73  dio asynchronous
a3de0 6c 79 20 61 6e 64 20 69 6e 76 6f 6b 65 73 0a 09  ly and invokes..
a3df0 09 20 2a 20 20 74 68 65 20 63 61 6c 6c 62 61 63  . *  the callbac
a3e00 6b 20 6f 6e 63 65 20 74 68 65 20 61 75 64 69 6f  k once the audio
a3e10 20 62 75 66 66 65 72 20 6c 6f 61 64 73 2e 20 0a   buffer loads. .
a3e20 09 09 20 2a 20 20 4e 6f 74 65 3a 20 74 68 69 73  .. *  Note: this
a3e30 20 64 6f 65 73 20 6e 6f 74 20 6e 65 65 64 20 74   does not need t
a3e40 6f 20 62 65 20 63 61 6c 6c 65 64 20 69 66 20 61  o be called if a
a3e50 20 75 72 6c 0a 09 09 20 2a 20 20 77 61 73 20 70   url... *  was p
a3e60 61 73 73 65 64 20 69 6e 20 74 6f 20 74 68 65 20  assed in to the 
a3e70 63 6f 6e 73 74 72 75 63 74 6f 72 2e 20 4f 6e 6c  constructor. Onl
a3e80 79 20 75 73 65 20 74 68 69 73 0a 09 09 20 2a 20  y use this... * 
a3e90 20 69 66 20 79 6f 75 20 77 61 6e 74 20 74 6f 20   if you want to 
a3ea0 6d 61 6e 75 61 6c 6c 79 20 6c 6f 61 64 20 61 20  manually load a 
a3eb0 6e 65 77 20 75 72 6c 2e 20 0a 09 09 20 2a 20 40  new url. ... * @
a3ec0 70 61 72 61 6d 20 7b 73 74 72 69 6e 67 7d 20 75  param {string} u
a3ed0 72 6c 20 54 68 65 20 75 72 6c 20 6f 66 20 74 68  rl The url of th
a3ee0 65 20 62 75 66 66 65 72 20 74 6f 20 6c 6f 61 64  e buffer to load
a3ef0 2e 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20  .... *          
a3f00 20 20 20 20 20 20 20 20 20 20 20 46 69 6c 65 74             Filet
a3f10 79 70 65 20 73 75 70 70 6f 72 74 20 64 65 70 65  ype support depe
a3f20 6e 64 73 20 6f 6e 20 74 68 65 0a 09 09 20 2a 20  nds on the... * 
a3f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a3f40 20 20 20 20 62 72 6f 77 73 65 72 2e 0a 09 09 20      browser.... 
a3f50 2a 20 20 40 70 61 72 61 6d 20 20 7b 66 75 6e 63  *  @param  {func
a3f60 74 69 6f 6e 3d 7d 20 63 61 6c 6c 62 61 63 6b 20  tion=} callback 
a3f70 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  The function to 
a3f80 69 6e 76 6f 6b 65 20 6f 6e 63 65 0a 09 09 20 2a  invoke once... *
a3f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a3fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
a3fb0 68 65 20 73 61 6d 70 6c 65 20 69 73 20 6c 6f 61  he sample is loa
a3fc0 64 65 64 2e 0a 09 09 20 2a 20 20 40 72 65 74 75  ded.... *  @retu
a3fd0 72 6e 73 20 7b 50 72 6f 6d 69 73 65 7d 0a 09 09  rns {Promise}...
a3fe0 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50 6c   */..    Tone.Pl
a3ff0 61 79 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e 6c  ayer.prototype.l
a4000 6f 61 64 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  oad = function (
a4010 75 72 6c 2c 20 63 61 6c 6c 62 61 63 6b 29 20 7b  url, callback) {
a4020 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
a4030 20 74 68 69 73 2e 5f 62 75 66 66 65 72 2e 6c 6f   this._buffer.lo
a4040 61 64 28 75 72 6c 2c 20 74 68 69 73 2e 5f 6f 6e  ad(url, this._on
a4050 6c 6f 61 64 2e 62 69 6e 64 28 74 68 69 73 2c 20  load.bind(this, 
a4060 63 61 6c 6c 62 61 63 6b 29 29 3b 0a 09 20 20 20  callback));..   
a4070 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20   };..    /**... 
a4080 2a 20 49 6e 74 65 72 6e 61 6c 20 63 61 6c 6c 62  * Internal callb
a4090 61 63 6b 20 77 68 65 6e 20 74 68 65 20 62 75 66  ack when the buf
a40a0 66 65 72 20 69 73 20 6c 6f 61 64 65 64 2e 0a 09  fer is loaded...
a40b0 09 20 2a 20 40 70 72 69 76 61 74 65 0a 09 09 20  . * @private... 
a40c0 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50 6c 61  */..    Tone.Pla
a40d0 79 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 6f  yer.prototype._o
a40e0 6e 6c 6f 61 64 20 3d 20 66 75 6e 63 74 69 6f 6e  nload = function
a40f0 20 28 63 61 6c 6c 62 61 63 6b 29 20 7b 0a 09 20   (callback) {.. 
a4100 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 20         callback 
a4110 3d 20 74 68 69 73 2e 64 65 66 61 75 6c 74 41 72  = this.defaultAr
a4120 67 28 63 61 6c 6c 62 61 63 6b 2c 20 54 6f 6e 65  g(callback, Tone
a4130 2e 6e 6f 4f 70 29 3b 0a 09 20 20 20 20 20 20 20  .noOp);..       
a4140 20 63 61 6c 6c 62 61 63 6b 28 74 68 69 73 29 3b   callback(this);
a4150 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 74 68  ..        if (th
a4160 69 73 2e 61 75 74 6f 73 74 61 72 74 29 20 7b 0a  is.autostart) {.
a4170 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
a4180 73 2e 73 74 61 72 74 28 29 3b 0a 09 20 20 20 20  s.start();..    
a4190 20 20 20 20 7d 0a 09 20 20 20 20 7d 3b 0a 09 20      }..    };.. 
a41a0 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 50 6c 61     /**... *  Pla
a41b0 79 20 74 68 65 20 62 75 66 66 65 72 20 61 74 20  y the buffer at 
a41c0 74 68 65 20 67 69 76 65 6e 20 73 74 61 72 74 54  the given startT
a41d0 69 6d 65 2e 20 4f 70 74 69 6f 6e 61 6c 6c 79 20  ime. Optionally 
a41e0 61 64 64 20 61 6e 20 6f 66 66 73 65 74 0a 09 09  add an offset...
a41f0 20 2a 20 20 61 6e 64 2f 6f 72 20 64 75 72 61 74   *  and/or durat
a4200 69 6f 6e 20 77 68 69 63 68 20 77 69 6c 6c 20 70  ion which will p
a4210 6c 61 79 20 74 68 65 20 62 75 66 66 65 72 20 66  lay the buffer f
a4220 72 6f 6d 20 61 20 70 6f 73 69 74 69 6f 6e 0a 09  rom a position..
a4230 09 20 2a 20 20 77 69 74 68 69 6e 20 74 68 65 20  . *  within the 
a4240 62 75 66 66 65 72 20 66 6f 72 20 74 68 65 20 67  buffer for the g
a4250 69 76 65 6e 20 64 75 72 61 74 69 6f 6e 2e 20 0a  iven duration. .
a4260 09 09 20 2a 20 20 0a 09 09 20 2a 20 20 40 70 61  .. *  ... *  @pa
a4270 72 61 6d 20 20 7b 54 69 6d 65 7d 20 5b 73 74 61  ram  {Time} [sta
a4280 72 74 54 69 6d 65 3d 6e 6f 77 5d 20 57 68 65 6e  rtTime=now] When
a4290 20 74 68 65 20 70 6c 61 79 65 72 20 73 68 6f 75   the player shou
a42a0 6c 64 20 73 74 61 72 74 2e 0a 09 09 20 2a 20 20  ld start.... *  
a42b0 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 7d 20 5b  @param  {Time} [
a42c0 6f 66 66 73 65 74 3d 30 5d 20 54 68 65 20 6f 66  offset=0] The of
a42d0 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65  fset from the be
a42e0 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 73  ginning of the s
a42f0 61 6d 70 6c 65 0a 09 09 20 2a 20 20 20 20 20 20  ample... *      
a4300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4310 20 20 20 20 20 20 20 20 20 20 20 74 6f 20 73 74             to st
a4320 61 72 74 20 61 74 2e 20 0a 09 09 20 2a 20 20 40  art at. ... *  @
a4330 70 61 72 61 6d 20 20 7b 54 69 6d 65 3d 7d 20 64  param  {Time=} d
a4340 75 72 61 74 69 6f 6e 20 48 6f 77 20 6c 6f 6e 67  uration How long
a4350 20 74 68 65 20 73 61 6d 70 6c 65 20 73 68 6f 75   the sample shou
a4360 6c 64 20 70 6c 61 79 2e 20 49 66 20 6e 6f 20 64  ld play. If no d
a4370 75 72 61 74 69 6f 6e 0a 09 09 20 2a 20 20 20 20  uration... *    
a4380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4390 20 20 20 20 20 20 20 20 20 20 20 20 69 73 20 67              is g
a43a0 69 76 65 6e 2c 20 69 74 20 77 69 6c 6c 20 64 65  iven, it will de
a43b0 66 61 75 6c 74 20 74 6f 20 74 68 65 20 66 75 6c  fault to the ful
a43c0 6c 20 6c 65 6e 67 74 68 20 0a 09 09 20 2a 20 20  l length ... *  
a43d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a43e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66                of
a43f0 20 74 68 65 20 73 61 6d 70 6c 65 20 28 6d 69 6e   the sample (min
a4400 75 73 20 61 6e 79 20 6f 66 66 73 65 74 29 0a 09  us any offset)..
a4410 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54  . *  @returns {T
a4420 6f 6e 65 2e 50 6c 61 79 65 72 7d 20 74 68 69 73  one.Player} this
a4430 0a 09 09 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66  ... *  @memberOf
a4440 20 54 6f 6e 65 2e 50 6c 61 79 65 72 23 0a 09 09   Tone.Player#...
a4450 20 2a 20 20 40 6d 65 74 68 6f 64 20 73 74 61 72   *  @method star
a4460 74 0a 09 09 20 2a 20 20 40 6e 61 6d 65 20 73 74  t... *  @name st
a4470 61 72 74 0a 09 09 20 2a 2f 0a 09 20 20 20 20 2f  art... */..    /
a4480 2a 2a 0a 09 09 20 2a 20 20 49 6e 74 65 72 6e 61  **... *  Interna
a4490 6c 20 73 74 61 72 74 20 6d 65 74 68 6f 64 0a 09  l start method..
a44a0 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
a44b0 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50 6c   */..    Tone.Pl
a44c0 61 79 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e 5f  ayer.prototype._
a44d0 73 74 61 72 74 20 3d 20 66 75 6e 63 74 69 6f 6e  start = function
a44e0 20 28 73 74 61 72 74 54 69 6d 65 2c 20 6f 66 66   (startTime, off
a44f0 73 65 74 2c 20 64 75 72 61 74 69 6f 6e 29 20 7b  set, duration) {
a4500 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 74 68  ..        if (th
a4510 69 73 2e 5f 62 75 66 66 65 72 2e 6c 6f 61 64 65  is._buffer.loade
a4520 64 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  d) {..          
a4530 20 20 2f 2f 69 66 20 69 74 27 73 20 61 20 6c 6f    //if it's a lo
a4540 6f 70 20 74 68 65 20 64 65 66 61 75 6c 74 20 6f  op the default o
a4550 66 66 73 65 74 20 69 73 20 74 68 65 20 6c 6f 6f  ffset is the loo
a4560 70 73 74 61 72 74 20 70 6f 69 6e 74 0a 09 20 20  pstart point..  
a4570 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 68            if (th
a4580 69 73 2e 5f 6c 6f 6f 70 29 20 7b 0a 09 20 20 20  is._loop) {..   
a4590 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66               off
a45a0 73 65 74 20 3d 20 74 68 69 73 2e 64 65 66 61 75  set = this.defau
a45b0 6c 74 41 72 67 28 6f 66 66 73 65 74 2c 20 74 68  ltArg(offset, th
a45c0 69 73 2e 5f 6c 6f 6f 70 53 74 61 72 74 29 3b 0a  is._loopStart);.
a45d0 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
a45e0 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20  lse {..         
a45f0 20 20 20 20 20 20 20 2f 2f 6f 74 68 65 72 77 69         //otherwi
a4600 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 6f  se the default o
a4610 66 66 73 65 74 20 69 73 20 30 0a 09 20 20 20 20  ffset is 0..    
a4620 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73              offs
a4630 65 74 20 3d 20 74 68 69 73 2e 64 65 66 61 75 6c  et = this.defaul
a4640 74 41 72 67 28 6f 66 66 73 65 74 2c 20 30 29 3b  tArg(offset, 0);
a4650 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ..            }.
a4660 09 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66  .            off
a4670 73 65 74 20 3d 20 74 68 69 73 2e 74 6f 53 65 63  set = this.toSec
a4680 6f 6e 64 73 28 6f 66 66 73 65 74 29 3b 0a 09 20  onds(offset);.. 
a4690 20 20 20 20 20 20 20 20 20 20 20 2f 2f 6d 61 6b             //mak
a46a0 65 20 73 75 72 65 20 69 74 20 68 61 73 20 61 20  e sure it has a 
a46b0 70 6f 73 69 74 69 76 65 20 64 75 72 61 74 69 6f  positive duratio
a46c0 6e 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 64  n..            d
a46d0 75 72 61 74 69 6f 6e 20 3d 20 74 68 69 73 2e 64  uration = this.d
a46e0 65 66 61 75 6c 74 41 72 67 28 64 75 72 61 74 69  efaultArg(durati
a46f0 6f 6e 2c 20 4d 61 74 68 2e 6d 61 78 28 74 68 69  on, Math.max(thi
a4700 73 2e 5f 62 75 66 66 65 72 2e 64 75 72 61 74 69  s._buffer.durati
a4710 6f 6e 20 2d 20 6f 66 66 73 65 74 2c 20 30 29 29  on - offset, 0))
a4720 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 64  ;..            d
a4730 75 72 61 74 69 6f 6e 20 3d 20 74 68 69 73 2e 74  uration = this.t
a4740 6f 53 65 63 6f 6e 64 73 28 64 75 72 61 74 69 6f  oSeconds(duratio
a4750 6e 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  n);..           
a4760 20 2f 2f 74 68 65 20 76 61 6c 75 65 73 20 69 6e   //the values in
a4770 20 73 65 63 6f 6e 64 73 0a 09 20 20 20 20 20 20   seconds..      
a4780 20 20 20 20 20 20 73 74 61 72 74 54 69 6d 65 20        startTime 
a4790 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73  = this.toSeconds
a47a0 28 73 74 61 72 74 54 69 6d 65 29 3b 0a 09 20 20  (startTime);..  
a47b0 20 20 20 20 20 20 20 20 20 20 2f 2f 6d 61 6b 65            //make
a47c0 20 74 68 65 20 73 6f 75 72 63 65 0a 09 20 20 20   the source..   
a47d0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73           this._s
a47e0 6f 75 72 63 65 20 3d 20 74 68 69 73 2e 63 6f 6e  ource = this.con
a47f0 74 65 78 74 2e 63 72 65 61 74 65 42 75 66 66 65  text.createBuffe
a4800 72 53 6f 75 72 63 65 28 29 3b 0a 09 20 20 20 20  rSource();..    
a4810 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 6f          this._so
a4820 75 72 63 65 2e 62 75 66 66 65 72 20 3d 20 74 68  urce.buffer = th
a4830 69 73 2e 5f 62 75 66 66 65 72 2e 67 65 74 28 29  is._buffer.get()
a4840 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;..            /
a4850 2f 73 65 74 20 74 68 65 20 6c 6f 6f 70 69 6e 67  /set the looping
a4860 20 70 72 6f 70 65 72 74 69 65 73 0a 09 20 20 20   properties..   
a4870 20 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69           if (thi
a4880 73 2e 5f 6c 6f 6f 70 29 20 7b 0a 09 20 20 20 20  s._loop) {..    
a4890 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
a48a0 2e 5f 73 6f 75 72 63 65 2e 6c 6f 6f 70 20 3d 20  ._source.loop = 
a48b0 74 68 69 73 2e 5f 6c 6f 6f 70 3b 0a 09 20 20 20  this._loop;..   
a48c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
a48d0 73 2e 5f 73 6f 75 72 63 65 2e 6c 6f 6f 70 53 74  s._source.loopSt
a48e0 61 72 74 20 3d 20 74 68 69 73 2e 74 6f 53 65 63  art = this.toSec
a48f0 6f 6e 64 73 28 74 68 69 73 2e 5f 6c 6f 6f 70 53  onds(this._loopS
a4900 74 61 72 74 29 3b 0a 09 20 20 20 20 20 20 20 20  tart);..        
a4910 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 6f          this._so
a4920 75 72 63 65 2e 6c 6f 6f 70 45 6e 64 20 3d 20 74  urce.loopEnd = t
a4930 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28 74 68  his.toSeconds(th
a4940 69 73 2e 5f 6c 6f 6f 70 45 6e 64 29 3b 0a 09 20  is._loopEnd);.. 
a4950 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
a4960 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e {..           
a4970 20 20 20 20 20 2f 2f 69 66 20 69 74 27 73 20 6e       //if it's n
a4980 6f 74 20 6c 6f 6f 70 69 6e 67 2c 20 73 65 74 20  ot looping, set 
a4990 74 68 65 20 73 74 61 74 65 20 63 68 61 6e 67 65  the state change
a49a0 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
a49b0 68 65 20 73 61 6d 70 6c 65 0a 09 20 20 20 20 20  he sample..     
a49c0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
a49d0 5f 73 74 61 74 65 2e 73 65 74 53 74 61 74 65 41  _state.setStateA
a49e0 74 54 69 6d 65 28 54 6f 6e 65 2e 53 74 61 74 65  tTime(Tone.State
a49f0 2e 53 74 6f 70 70 65 64 2c 20 73 74 61 72 74 54  .Stopped, startT
a4a00 69 6d 65 20 2b 20 64 75 72 61 74 69 6f 6e 29 3b  ime + duration);
a4a10 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ..            }.
a4a20 09 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 61  .            //a
a4a30 6e 64 20 6f 74 68 65 72 20 70 72 6f 70 65 72 74  nd other propert
a4a40 69 65 73 0a 09 20 20 20 20 20 20 20 20 20 20 20  ies..           
a4a50 20 74 68 69 73 2e 5f 73 6f 75 72 63 65 2e 70 6c   this._source.pl
a4a60 61 79 62 61 63 6b 52 61 74 65 2e 76 61 6c 75 65  aybackRate.value
a4a70 20 3d 20 74 68 69 73 2e 5f 70 6c 61 79 62 61 63   = this._playbac
a4a80 6b 52 61 74 65 3b 0a 09 20 20 20 20 20 20 20 20  kRate;..        
a4a90 20 20 20 20 74 68 69 73 2e 5f 73 6f 75 72 63 65      this._source
a4aa0 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e 6f 75  .connect(this.ou
a4ab0 74 70 75 74 29 3b 0a 09 20 20 20 20 20 20 20 20  tput);..        
a4ac0 20 20 20 20 2f 2f 73 74 61 72 74 20 69 74 0a 09      //start it..
a4ad0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
a4ae0 74 68 69 73 2e 5f 6c 6f 6f 70 29 20 7b 0a 09 20  this._loop) {.. 
a4af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a4b00 2f 6d 6f 64 69 66 79 20 74 68 65 20 6f 66 66 73  /modify the offs
a4b10 65 74 20 69 66 20 69 74 27 73 20 67 72 65 61 74  et if it's great
a4b20 65 72 20 74 68 61 6e 20 74 68 65 20 6c 6f 6f 70  er than the loop
a4b30 20 74 69 6d 65 0a 09 20 20 20 20 20 20 20 20 20   time..         
a4b40 20 20 20 20 20 20 20 76 61 72 20 6c 6f 6f 70 45         var loopE
a4b50 6e 64 20 3d 20 74 68 69 73 2e 5f 73 6f 75 72 63  nd = this._sourc
a4b60 65 2e 6c 6f 6f 70 45 6e 64 20 7c 7c 20 74 68 69  e.loopEnd || thi
a4b70 73 2e 5f 62 75 66 66 65 72 2e 64 75 72 61 74 69  s._buffer.durati
a4b80 6f 6e 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  on;..           
a4b90 20 20 20 20 20 76 61 72 20 6c 6f 6f 70 53 74 61       var loopSta
a4ba0 72 74 20 3d 20 74 68 69 73 2e 5f 73 6f 75 72 63  rt = this._sourc
a4bb0 65 2e 6c 6f 6f 70 53 74 61 72 74 3b 0a 09 20 20  e.loopStart;..  
a4bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61                va
a4bd0 72 20 6c 6f 6f 70 44 75 72 61 74 69 6f 6e 20 3d  r loopDuration =
a4be0 20 6c 6f 6f 70 45 6e 64 20 2d 20 6c 6f 6f 70 53   loopEnd - loopS
a4bf0 74 61 72 74 3b 0a 09 20 20 20 20 20 20 20 20 20  tart;..         
a4c00 20 20 20 20 20 20 20 69 66 20 28 6f 66 66 73 65         if (offse
a4c10 74 20 3e 20 6c 6f 6f 70 45 6e 64 29 20 7b 0a 09  t > loopEnd) {..
a4c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4c30 20 20 20 20 2f 2f 6d 6f 76 65 20 74 68 65 20 6f      //move the o
a4c40 66 66 73 65 74 20 62 61 63 6b 0a 09 20 20 20 20  ffset back..    
a4c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4c60 77 68 69 6c 65 20 28 6f 66 66 73 65 74 20 3e 20  while (offset > 
a4c70 6c 6f 6f 70 45 6e 64 29 20 7b 0a 09 20 20 20 20  loopEnd) {..    
a4c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4c90 20 20 20 20 6f 66 66 73 65 74 20 2d 3d 20 6c 6f      offset -= lo
a4ca0 6f 70 44 75 72 61 74 69 6f 6e 3b 0a 09 20 20 20  opDuration;..   
a4cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4cc0 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   }..            
a4cd0 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20      }..         
a4ce0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 6f 75         this._sou
a4cf0 72 63 65 2e 73 74 61 72 74 28 73 74 61 72 74 54  rce.start(startT
a4d00 69 6d 65 2c 20 6f 66 66 73 65 74 29 3b 0a 09 20  ime, offset);.. 
a4d10 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
a4d20 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e {..           
a4d30 20 20 20 20 20 74 68 69 73 2e 5f 73 6f 75 72 63       this._sourc
a4d40 65 2e 73 74 61 72 74 28 73 74 61 72 74 54 69 6d  e.start(startTim
a4d50 65 2c 20 6f 66 66 73 65 74 2c 20 64 75 72 61 74  e, offset, durat
a4d60 69 6f 6e 29 3b 0a 09 20 20 20 20 20 20 20 20 20  ion);..         
a4d70 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 20     }..        } 
a4d80 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20  else {..        
a4d90 20 20 20 20 74 68 72 6f 77 20 45 72 72 6f 72 28      throw Error(
a4da0 27 54 6f 6e 65 2e 50 6c 61 79 65 72 3a 20 74 72  'Tone.Player: tr
a4db0 69 65 64 20 74 6f 20 73 74 61 72 74 20 50 6c 61  ied to start Pla
a4dc0 79 65 72 20 62 65 66 6f 72 65 20 74 68 65 20 62  yer before the b
a4dd0 75 66 66 65 72 20 77 61 73 20 6c 6f 61 64 65 64  uffer was loaded
a4de0 27 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  ');..        }..
a4df0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
a4e00 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  his;..    };..  
a4e10 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 53 74 6f 70    /**... *  Stop
a4e20 20 70 6c 61 79 62 61 63 6b 2e 0a 09 09 20 2a 20   playback.... * 
a4e30 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a 20 20   @private... *  
a4e40 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 7d 20 5b  @param  {Time} [
a4e50 74 69 6d 65 3d 6e 6f 77 5d 0a 09 09 20 2a 20 20  time=now]... *  
a4e60 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 50  @returns {Tone.P
a4e70 6c 61 79 65 72 7d 20 74 68 69 73 0a 09 09 20 2a  layer} this... *
a4e80 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 50 6c 61 79  /..    Tone.Play
a4e90 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e 5f 73 74  er.prototype._st
a4ea0 6f 70 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 74  op = function (t
a4eb0 69 6d 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ime) {..        
a4ec0 69 66 20 28 74 68 69 73 2e 5f 73 6f 75 72 63 65  if (this._source
a4ed0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
a4ee0 20 74 68 69 73 2e 5f 73 6f 75 72 63 65 2e 73 74   this._source.st
a4ef0 6f 70 28 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64  op(this.toSecond
a4f00 73 28 74 69 6d 65 29 29 3b 0a 09 20 20 20 20 20  s(time));..     
a4f10 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 6f 75         this._sou
a4f20 72 63 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20  rce = null;..   
a4f30 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
a4f40 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20  return this;..  
a4f50 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    };..    /**...
a4f60 20 2a 20 20 53 65 65 6b 20 74 6f 20 61 20 73 70   *  Seek to a sp
a4f70 65 63 69 66 69 63 20 74 69 6d 65 20 69 6e 20 74  ecific time in t
a4f80 68 65 20 70 6c 61 79 65 72 27 73 20 62 75 66 66  he player's buff
a4f90 65 72 2e 20 49 66 20 74 68 65 20 0a 09 09 20 2a  er. If the ... *
a4fa0 20 20 73 6f 75 72 63 65 20 69 73 20 6e 6f 20 6c    source is no l
a4fb0 6f 6e 67 65 72 20 70 6c 61 79 69 6e 67 20 61 74  onger playing at
a4fc0 20 74 68 61 74 20 74 69 6d 65 2c 20 69 74 20 77   that time, it w
a4fd0 69 6c 6c 20 73 74 6f 70 2e 0a 09 09 20 2a 20 20  ill stop.... *  
a4fe0 49 66 20 79 6f 75 20 73 65 65 6b 20 74 6f 20 61  If you seek to a
a4ff0 20 74 69 6d 65 20 74 68 61 74 20 0a 09 09 20 2a   time that ... *
a5000 20 20 40 70 61 72 61 6d 20 7b 54 69 6d 65 7d 20    @param {Time} 
a5010 6f 66 66 73 65 74 20 54 68 65 20 74 69 6d 65 20  offset The time 
a5020 74 6f 20 73 65 65 6b 20 74 6f 2e 0a 09 09 20 2a  to seek to.... *
a5030 20 20 40 70 61 72 61 6d 20 7b 54 69 6d 65 3d 7d    @param {Time=}
a5040 20 74 69 6d 65 20 54 68 65 20 74 69 6d 65 20 66   time The time f
a5050 6f 72 20 74 68 65 20 73 65 65 6b 20 65 76 65 6e  or the seek even
a5060 74 20 74 6f 20 6f 63 63 75 72 2e 0a 09 09 20 2a  t to occur.... *
a5070 20 20 40 72 65 74 75 72 6e 20 7b 54 6f 6e 65 2e    @return {Tone.
a5080 50 6c 61 79 65 72 7d 20 74 68 69 73 0a 09 09 20  Player} this... 
a5090 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a  *  @example... *
a50a0 20 73 6f 75 72 63 65 2e 73 74 61 72 74 28 30 2e   source.start(0.
a50b0 32 29 3b 0a 09 09 20 2a 20 73 6f 75 72 63 65 2e  2);... * source.
a50c0 73 74 6f 70 28 30 2e 34 29 3b 0a 09 09 20 2a 2f  stop(0.4);... */
a50d0 0a 09 20 20 20 20 54 6f 6e 65 2e 50 6c 61 79 65  ..    Tone.Playe
a50e0 72 2e 70 72 6f 74 6f 74 79 70 65 2e 73 65 65 6b  r.prototype.seek
a50f0 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 6f 66 66   = function (off
a5100 73 65 74 2c 20 74 69 6d 65 29 20 7b 0a 09 20 20  set, time) {..  
a5110 20 20 20 20 20 20 74 69 6d 65 20 3d 20 74 68 69        time = thi
a5120 73 2e 74 6f 53 65 63 6f 6e 64 73 28 74 69 6d 65  s.toSeconds(time
a5130 29 3b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
a5140 74 68 69 73 2e 5f 73 74 61 74 65 2e 67 65 74 56  this._state.getV
a5150 61 6c 75 65 41 74 54 69 6d 65 28 74 69 6d 65 29  alueAtTime(time)
a5160 20 3d 3d 3d 20 54 6f 6e 65 2e 53 74 61 74 65 2e   === Tone.State.
a5170 53 74 61 72 74 65 64 29 20 7b 0a 09 20 20 20 20  Started) {..    
a5180 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 3d          offset =
a5190 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28   this.toSeconds(
a51a0 6f 66 66 73 65 74 29 3b 0a 09 20 20 20 20 20 20  offset);..      
a51b0 20 20 20 20 20 20 2f 2f 20 69 66 20 69 74 27 73        // if it's
a51c0 20 63 75 72 72 65 6e 74 6c 79 20 70 6c 61 79 69   currently playi
a51d0 6e 67 2c 20 73 74 6f 70 20 69 74 0a 09 20 20 20  ng, stop it..   
a51e0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73           this._s
a51f0 74 6f 70 28 74 69 6d 65 29 3b 0a 09 20 20 20 20  top(time);..    
a5200 20 20 20 20 20 20 20 20 2f 2f 72 65 73 74 61 72          //restar
a5210 74 20 69 74 20 61 74 20 74 68 65 20 67 69 76 65  t it at the give
a5220 6e 20 74 69 6d 65 0a 09 20 20 20 20 20 20 20 20  n time..        
a5230 20 20 20 20 74 68 69 73 2e 5f 73 74 61 72 74 28      this._start(
a5240 74 69 6d 65 2c 20 6f 66 66 73 65 74 29 3b 0a 09  time, offset);..
a5250 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
a5260 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a     return this;.
a5270 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
a5280 0a 09 09 20 2a 20 20 53 65 74 20 74 68 65 20 6c  ... *  Set the l
a5290 6f 6f 70 20 73 74 61 72 74 20 61 6e 64 20 65 6e  oop start and en
a52a0 64 2e 20 57 69 6c 6c 20 6f 6e 6c 79 20 6c 6f 6f  d. Will only loo
a52b0 70 20 69 66 20 6c 6f 6f 70 20 69 73 20 0a 09 09  p if loop is ...
a52c0 20 2a 20 20 73 65 74 20 74 6f 20 74 72 75 65 2e   *  set to true.
a52d0 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b   ... *  @param {
a52e0 54 69 6d 65 7d 20 6c 6f 6f 70 53 74 61 72 74 20  Time} loopStart 
a52f0 54 68 65 20 6c 6f 6f 70 20 65 6e 64 20 74 69 6d  The loop end tim
a5300 65 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b  e... *  @param {
a5310 54 69 6d 65 7d 20 6c 6f 6f 70 45 6e 64 20 54 68  Time} loopEnd Th
a5320 65 20 6c 6f 6f 70 20 65 6e 64 20 74 69 6d 65 0a  e loop end time.
a5330 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b  .. *  @returns {
a5340 54 6f 6e 65 2e 50 6c 61 79 65 72 7d 20 74 68 69  Tone.Player} thi
a5350 73 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65  s... *  @example
a5360 0a 09 09 20 2a 20 2f 2f 6c 6f 6f 70 20 30 2e 31  ... * //loop 0.1
a5370 20 73 65 63 6f 6e 64 73 20 6f 66 20 74 68 65 20   seconds of the 
a5380 66 69 6c 65 2e 20 0a 09 09 20 2a 20 70 6c 61 79  file. ... * play
a5390 65 72 2e 73 65 74 4c 6f 6f 70 50 6f 69 6e 74 73  er.setLoopPoints
a53a0 28 30 2e 32 2c 20 30 2e 33 29 3b 0a 09 09 20 2a  (0.2, 0.3);... *
a53b0 20 70 6c 61 79 65 72 2e 6c 6f 6f 70 20 3d 20 74   player.loop = t
a53c0 72 75 65 3b 0a 09 09 20 2a 2f 0a 09 20 20 20 20  rue;... */..    
a53d0 54 6f 6e 65 2e 50 6c 61 79 65 72 2e 70 72 6f 74  Tone.Player.prot
a53e0 6f 74 79 70 65 2e 73 65 74 4c 6f 6f 70 50 6f 69  otype.setLoopPoi
a53f0 6e 74 73 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  nts = function (
a5400 6c 6f 6f 70 53 74 61 72 74 2c 20 6c 6f 6f 70 45  loopStart, loopE
a5410 6e 64 29 20 7b 0a 09 20 20 20 20 20 20 20 20 74  nd) {..        t
a5420 68 69 73 2e 6c 6f 6f 70 53 74 61 72 74 20 3d 20  his.loopStart = 
a5430 6c 6f 6f 70 53 74 61 72 74 3b 0a 09 20 20 20 20  loopStart;..    
a5440 20 20 20 20 74 68 69 73 2e 6c 6f 6f 70 45 6e 64      this.loopEnd
a5450 20 3d 20 6c 6f 6f 70 45 6e 64 3b 0a 09 20 20 20   = loopEnd;..   
a5460 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
a5470 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  ;..    };..    /
a5480 2a 2a 0a 09 09 20 2a 20 49 66 20 6c 6f 6f 70 20  **... * If loop 
a5490 69 73 20 74 72 75 65 2c 20 74 68 65 20 6c 6f 6f  is true, the loo
a54a0 70 20 77 69 6c 6c 20 73 74 61 72 74 20 61 74 20  p will start at 
a54b0 74 68 69 73 20 70 6f 73 69 74 69 6f 6e 2e 20 0a  this position. .
a54c0 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54  .. * @memberOf T
a54d0 6f 6e 65 2e 50 6c 61 79 65 72 23 0a 09 09 20 2a  one.Player#... *
a54e0 20 40 74 79 70 65 20 7b 54 69 6d 65 7d 0a 09 09   @type {Time}...
a54f0 20 2a 20 40 6e 61 6d 65 20 6c 6f 6f 70 53 74 61   * @name loopSta
a5500 72 74 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62  rt... */..    Ob
a5510 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65  ject.definePrope
a5520 72 74 79 28 54 6f 6e 65 2e 50 6c 61 79 65 72 2e  rty(Tone.Player.
a5530 70 72 6f 74 6f 74 79 70 65 2c 20 27 6c 6f 6f 70  prototype, 'loop
a5540 53 74 61 72 74 27 2c 20 7b 0a 09 20 20 20 20 20  Start', {..     
a5550 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e     get: function
a5560 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20   () {..         
a5570 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f     return this._
a5580 6c 6f 6f 70 53 74 61 72 74 3b 0a 09 20 20 20 20  loopStart;..    
a5590 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20      },..        
a55a0 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 6c  set: function (l
a55b0 6f 6f 70 53 74 61 72 74 29 20 7b 0a 09 20 20 20  oopStart) {..   
a55c0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c           this._l
a55d0 6f 6f 70 53 74 61 72 74 20 3d 20 6c 6f 6f 70 53  oopStart = loopS
a55e0 74 61 72 74 3b 0a 09 20 20 20 20 20 20 20 20 20  tart;..         
a55f0 20 20 20 69 66 20 28 74 68 69 73 2e 5f 73 6f 75     if (this._sou
a5600 72 63 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20  rce) {..        
a5610 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 6f          this._so
a5620 75 72 63 65 2e 6c 6f 6f 70 53 74 61 72 74 20 3d  urce.loopStart =
a5630 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28   this.toSeconds(
a5640 6c 6f 6f 70 53 74 61 72 74 29 3b 0a 09 20 20 20  loopStart);..   
a5650 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20           }..    
a5660 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09      }..    });..
a5670 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 49 66 20      /**... * If 
a5680 6c 6f 6f 70 20 69 73 20 74 72 75 65 2c 20 74 68  loop is true, th
a5690 65 20 6c 6f 6f 70 20 77 69 6c 6c 20 65 6e 64 20  e loop will end 
a56a0 61 74 20 74 68 69 73 20 70 6f 73 69 74 69 6f 6e  at this position
a56b0 2e 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66  .... * @memberOf
a56c0 20 54 6f 6e 65 2e 50 6c 61 79 65 72 23 0a 09 09   Tone.Player#...
a56d0 20 2a 20 40 74 79 70 65 20 7b 54 69 6d 65 7d 0a   * @type {Time}.
a56e0 09 09 20 2a 20 40 6e 61 6d 65 20 6c 6f 6f 70 45  .. * @name loopE
a56f0 6e 64 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62  nd... */..    Ob
a5700 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65  ject.definePrope
a5710 72 74 79 28 54 6f 6e 65 2e 50 6c 61 79 65 72 2e  rty(Tone.Player.
a5720 70 72 6f 74 6f 74 79 70 65 2c 20 27 6c 6f 6f 70  prototype, 'loop
a5730 45 6e 64 27 2c 20 7b 0a 09 20 20 20 20 20 20 20  End', {..       
a5740 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   get: function (
a5750 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
a5760 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 6c 6f   return this._lo
a5770 6f 70 45 6e 64 3b 0a 09 20 20 20 20 20 20 20 20  opEnd;..        
a5780 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a  },..        set:
a5790 20 66 75 6e 63 74 69 6f 6e 20 28 6c 6f 6f 70 45   function (loopE
a57a0 6e 64 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  nd) {..         
a57b0 20 20 20 74 68 69 73 2e 5f 6c 6f 6f 70 45 6e 64     this._loopEnd
a57c0 20 3d 20 6c 6f 6f 70 45 6e 64 3b 0a 09 20 20 20   = loopEnd;..   
a57d0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69           if (thi
a57e0 73 2e 5f 73 6f 75 72 63 65 29 20 7b 0a 09 20 20  s._source) {..  
a57f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
a5800 69 73 2e 5f 73 6f 75 72 63 65 2e 6c 6f 6f 70 45  is._source.loopE
a5810 6e 64 20 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f  nd = this.toSeco
a5820 6e 64 73 28 6c 6f 6f 70 45 6e 64 29 3b 0a 09 20  nds(loopEnd);.. 
a5830 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20             }..  
a5840 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b        }..    });
a5850 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54  ..    /**... * T
a5860 68 65 20 61 75 64 69 6f 20 62 75 66 66 65 72 20  he audio buffer 
a5870 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65  belonging to the
a5880 20 70 6c 61 79 65 72 2e 20 0a 09 09 20 2a 20 40   player. ... * @
a5890 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 50 6c  memberOf Tone.Pl
a58a0 61 79 65 72 23 0a 09 09 20 2a 20 40 74 79 70 65  ayer#... * @type
a58b0 20 7b 54 6f 6e 65 2e 42 75 66 66 65 72 7d 0a 09   {Tone.Buffer}..
a58c0 09 20 2a 20 40 6e 61 6d 65 20 62 75 66 66 65 72  . * @name buffer
a58d0 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65  ... */..    Obje
a58e0 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74  ct.definePropert
a58f0 79 28 54 6f 6e 65 2e 50 6c 61 79 65 72 2e 70 72  y(Tone.Player.pr
a5900 6f 74 6f 74 79 70 65 2c 20 27 62 75 66 66 65 72  ototype, 'buffer
a5910 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65  ', {..        ge
a5920 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b  t: function () {
a5930 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
a5940 74 75 72 6e 20 74 68 69 73 2e 5f 62 75 66 66 65  turn this._buffe
a5950 72 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09  r;..        },..
a5960 20 20 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e          set: fun
a5970 63 74 69 6f 6e 20 28 62 75 66 66 65 72 29 20 7b  ction (buffer) {
a5980 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
a5990 69 73 2e 5f 62 75 66 66 65 72 2e 73 65 74 28 62  is._buffer.set(b
a59a0 75 66 66 65 72 29 3b 0a 09 20 20 20 20 20 20 20  uffer);..       
a59b0 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20   }..    });..   
a59c0 20 2f 2a 2a 0a 09 09 20 2a 20 49 66 20 74 68 65   /**... * If the
a59d0 20 62 75 66 66 65 72 20 73 68 6f 75 6c 64 20 6c   buffer should l
a59e0 6f 6f 70 20 6f 6e 63 65 20 69 74 27 73 20 6f 76  oop once it's ov
a59f0 65 72 2e 20 0a 09 09 20 2a 20 40 6d 65 6d 62 65  er. ... * @membe
a5a00 72 4f 66 20 54 6f 6e 65 2e 50 6c 61 79 65 72 23  rOf Tone.Player#
a5a10 0a 09 09 20 2a 20 40 74 79 70 65 20 7b 62 6f 6f  ... * @type {boo
a5a20 6c 65 61 6e 7d 0a 09 09 20 2a 20 40 6e 61 6d 65  lean}... * @name
a5a30 20 6c 6f 6f 70 0a 09 09 20 2a 2f 0a 09 20 20 20   loop... */..   
a5a40 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72   Object.definePr
a5a50 6f 70 65 72 74 79 28 54 6f 6e 65 2e 50 6c 61 79  operty(Tone.Play
a5a60 65 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 6c  er.prototype, 'l
a5a70 6f 6f 70 27 2c 20 7b 0a 09 20 20 20 20 20 20 20  oop', {..       
a5a80 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   get: function (
a5a90 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
a5aa0 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 6c 6f   return this._lo
a5ab0 6f 70 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a  op;..        },.
a5ac0 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66 75  .        set: fu
a5ad0 6e 63 74 69 6f 6e 20 28 6c 6f 6f 70 29 20 7b 0a  nction (loop) {.
a5ae0 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
a5af0 73 2e 5f 6c 6f 6f 70 20 3d 20 6c 6f 6f 70 3b 0a  s._loop = loop;.
a5b00 09 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
a5b10 28 74 68 69 73 2e 5f 73 6f 75 72 63 65 29 20 7b  (this._source) {
a5b20 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a5b30 20 20 74 68 69 73 2e 5f 73 6f 75 72 63 65 2e 6c    this._source.l
a5b40 6f 6f 70 20 3d 20 6c 6f 6f 70 3b 0a 09 20 20 20  oop = loop;..   
a5b50 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20           }..    
a5b60 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09      }..    });..
a5b70 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65      /**... * The
a5b80 20 70 6c 61 79 62 61 63 6b 20 73 70 65 65 64 2e   playback speed.
a5b90 20 31 20 69 73 20 6e 6f 72 6d 61 6c 20 73 70 65   1 is normal spe
a5ba0 65 64 2e 20 54 68 69 73 20 69 73 20 6e 6f 74 20  ed. This is not 
a5bb0 61 20 73 69 67 6e 61 6c 20 62 65 63 61 75 73 65  a signal because
a5bc0 0a 09 09 20 2a 20 53 61 66 61 72 69 20 61 6e 64  ... * Safari and
a5bd0 20 69 4f 53 20 63 75 72 72 65 6e 74 6c 79 20 64   iOS currently d
a5be0 6f 6e 27 74 20 73 75 70 70 6f 72 74 20 70 6c 61  on't support pla
a5bf0 79 62 61 63 6b 52 61 74 65 20 61 73 20 61 20 73  ybackRate as a s
a5c00 69 67 6e 61 6c 2e 0a 09 09 20 2a 20 40 6d 65 6d  ignal.... * @mem
a5c10 62 65 72 4f 66 20 54 6f 6e 65 2e 50 6c 61 79 65  berOf Tone.Playe
a5c20 72 23 0a 09 09 20 2a 20 40 74 79 70 65 20 7b 6e  r#... * @type {n
a5c30 75 6d 62 65 72 7d 0a 09 09 20 2a 20 40 6e 61 6d  umber}... * @nam
a5c40 65 20 70 6c 61 79 62 61 63 6b 52 61 74 65 0a 09  e playbackRate..
a5c50 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74  . */..    Object
a5c60 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28  .defineProperty(
a5c70 54 6f 6e 65 2e 50 6c 61 79 65 72 2e 70 72 6f 74  Tone.Player.prot
a5c80 6f 74 79 70 65 2c 20 27 70 6c 61 79 62 61 63 6b  otype, 'playback
a5c90 52 61 74 65 27 2c 20 7b 0a 09 20 20 20 20 20 20  Rate', {..      
a5ca0 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    get: function 
a5cb0 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  () {..          
a5cc0 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 70    return this._p
a5cd0 6c 61 79 62 61 63 6b 52 61 74 65 3b 0a 09 20 20  laybackRate;..  
a5ce0 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20 20        },..      
a5cf0 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    set: function 
a5d00 28 72 61 74 65 29 20 7b 0a 09 20 20 20 20 20 20  (rate) {..      
a5d10 20 20 20 20 20 20 74 68 69 73 2e 5f 70 6c 61 79        this._play
a5d20 62 61 63 6b 52 61 74 65 20 3d 20 72 61 74 65 3b  backRate = rate;
a5d30 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
a5d40 20 28 74 68 69 73 2e 5f 73 6f 75 72 63 65 29 20   (this._source) 
a5d50 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a5d60 20 20 20 74 68 69 73 2e 5f 73 6f 75 72 63 65 2e     this._source.
a5d70 70 6c 61 79 62 61 63 6b 52 61 74 65 2e 76 61 6c  playbackRate.val
a5d80 75 65 20 3d 20 72 61 74 65 3b 0a 09 20 20 20 20  ue = rate;..    
a5d90 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
a5da0 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20     }..    });.. 
a5db0 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65 20     /**... * The 
a5dc0 64 69 72 65 63 74 69 6f 6e 20 74 68 65 20 62 75  direction the bu
a5dd0 66 66 65 72 20 73 68 6f 75 6c 64 20 70 6c 61 79  ffer should play
a5de0 20 69 6e 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72   in... * @member
a5df0 4f 66 20 54 6f 6e 65 2e 50 6c 61 79 65 72 23 0a  Of Tone.Player#.
a5e00 09 09 20 2a 20 40 74 79 70 65 20 7b 62 6f 6f 6c  .. * @type {bool
a5e10 65 61 6e 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20  ean}... * @name 
a5e20 72 65 76 65 72 73 65 0a 09 09 20 2a 2f 0a 09 20  reverse... */.. 
a5e30 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65     Object.define
a5e40 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 50 6c  Property(Tone.Pl
a5e50 61 79 65 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20  ayer.prototype, 
a5e60 27 72 65 76 65 72 73 65 27 2c 20 7b 0a 09 20 20  'reverse', {..  
a5e70 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74        get: funct
a5e80 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
a5e90 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
a5ea0 73 2e 5f 62 75 66 66 65 72 2e 72 65 76 65 72 73  s._buffer.revers
a5eb0 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09  e;..        },..
a5ec0 20 20 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e          set: fun
a5ed0 63 74 69 6f 6e 20 28 72 65 76 29 20 7b 0a 09 20  ction (rev) {.. 
a5ee0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
a5ef0 5f 62 75 66 66 65 72 2e 72 65 76 65 72 73 65 20  _buffer.reverse 
a5f00 3d 20 72 65 76 3b 0a 09 20 20 20 20 20 20 20 20  = rev;..        
a5f10 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20  }..    });..    
a5f20 2f 2a 2a 0a 09 09 20 2a 20 20 44 69 73 70 6f 73  /**... *  Dispos
a5f30 65 20 61 6e 64 20 64 69 73 63 6f 6e 6e 65 63 74  e and disconnect
a5f40 2e 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20  .... *  @return 
a5f50 7b 54 6f 6e 65 2e 50 6c 61 79 65 72 7d 20 74 68  {Tone.Player} th
a5f60 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  is... */..    To
a5f70 6e 65 2e 50 6c 61 79 65 72 2e 70 72 6f 74 6f 74  ne.Player.protot
a5f80 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75  ype.dispose = fu
a5f90 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
a5fa0 20 20 20 20 20 54 6f 6e 65 2e 53 6f 75 72 63 65       Tone.Source
a5fb0 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f  .prototype.dispo
a5fc0 73 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09  se.call(this);..
a5fd0 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73          if (this
a5fe0 2e 5f 73 6f 75 72 63 65 20 21 3d 3d 20 6e 75 6c  ._source !== nul
a5ff0 6c 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  l) {..          
a6000 20 20 74 68 69 73 2e 5f 73 6f 75 72 63 65 2e 64    this._source.d
a6010 69 73 63 6f 6e 6e 65 63 74 28 29 3b 0a 09 20 20  isconnect();..  
a6020 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
a6030 73 6f 75 72 63 65 20 3d 20 6e 75 6c 6c 3b 0a 09  source = null;..
a6040 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
a6050 20 20 20 74 68 69 73 2e 5f 62 75 66 66 65 72 2e     this._buffer.
a6060 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20  dispose();..    
a6070 20 20 20 20 74 68 69 73 2e 5f 62 75 66 66 65 72      this._buffer
a6080 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
a6090 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09    return this;..
a60a0 20 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74 75      };..    retu
a60b0 72 6e 20 54 6f 6e 65 2e 50 6c 61 79 65 72 3b 0a  rn Tone.Player;.
a60c0 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e  .});..Module(fun
a60d0 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09  ction (Tone) {..
a60e0 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09      ..    /**...
a60f0 20 2a 20 20 40 63 6c 61 73 73 20 53 61 6d 70 6c   *  @class Sampl
a6100 65 72 20 77 72 61 70 73 20 54 6f 6e 65 2e 50 6c  er wraps Tone.Pl
a6110 61 79 65 72 20 69 6e 20 61 6e 20 41 6d 70 6c 69  ayer in an Ampli
a6120 74 75 64 65 45 6e 76 65 6c 6f 70 65 2e 0a 09 09  tudeEnvelope....
a6130 20 2a 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 72   *... *  @constr
a6140 75 63 74 6f 72 0a 09 09 20 2a 20 20 40 65 78 74  uctor... *  @ext
a6150 65 6e 64 73 20 7b 54 6f 6e 65 2e 49 6e 73 74 72  ends {Tone.Instr
a6160 75 6d 65 6e 74 7d 0a 09 09 20 2a 20 20 40 70 61  ument}... *  @pa
a6170 72 61 6d 20 7b 53 74 72 69 6e 67 7d 20 75 72 6c  ram {String} url
a6180 20 74 68 65 20 75 72 6c 20 6f 66 20 74 68 65 20   the url of the 
a6190 61 75 64 69 6f 20 66 69 6c 65 0a 09 09 20 2a 20  audio file... * 
a61a0 20 40 70 61 72 61 6d 20 7b 46 75 6e 63 74 69 6f   @param {Functio
a61b0 6e 3d 7d 20 6f 6e 6c 6f 61 64 20 54 68 65 20 63  n=} onload The c
a61c0 61 6c 6c 62 61 63 6b 20 74 6f 20 69 6e 76 6f 6b  allback to invok
a61d0 65 20 77 68 65 6e 20 74 68 65 20 73 61 6d 70 6c  e when the sampl
a61e0 65 20 69 73 20 6c 6f 61 64 65 64 2e 0a 09 09 20  e is loaded.... 
a61f0 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a  *  @example... *
a6200 20 76 61 72 20 73 61 6d 70 6c 65 72 20 3d 20 6e   var sampler = n
a6210 65 77 20 53 61 6d 70 6c 65 72 28 22 2e 2f 61 75  ew Sampler("./au
a6220 64 69 6f 2f 63 61 73 69 6f 2f 41 31 2e 6d 70 33  dio/casio/A1.mp3
a6230 22 2c 20 66 75 6e 63 74 69 6f 6e 28 29 7b 0a 09  ", function(){..
a6240 09 20 2a 20 09 2f 2f 72 65 70 69 74 63 68 20 74  . * .//repitch t
a6250 68 65 20 73 61 6d 70 6c 65 20 64 6f 77 6e 20 61  he sample down a
a6260 20 68 61 6c 66 20 73 74 65 70 0a 09 09 20 2a 20   half step... * 
a6270 09 73 61 6d 70 6c 65 72 2e 74 72 69 67 67 65 72  .sampler.trigger
a6280 41 74 74 61 63 6b 28 2d 31 29 3b 0a 09 09 20 2a  Attack(-1);... *
a6290 20 7d 29 2e 74 6f 4d 61 73 74 65 72 28 29 3b 0a   }).toMaster();.
a62a0 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
a62b0 53 61 6d 70 6c 65 72 20 3d 20 66 75 6e 63 74 69  Sampler = functi
a62c0 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20  on () {..       
a62d0 20 76 61 72 20 6f 70 74 69 6f 6e 73 20 3d 20 74   var options = t
a62e0 68 69 73 2e 6f 70 74 69 6f 6e 73 4f 62 6a 65 63  his.optionsObjec
a62f0 74 28 61 72 67 75 6d 65 6e 74 73 2c 20 5b 0a 09  t(arguments, [..
a6300 20 20 20 20 20 20 20 20 20 20 20 20 27 75 72 6c              'url
a6310 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ',..            
a6320 27 6f 6e 6c 6f 61 64 27 0a 09 20 20 20 20 20 20  'onload'..      
a6330 20 20 5d 2c 20 54 6f 6e 65 2e 53 61 6d 70 6c 65    ], Tone.Sample
a6340 72 2e 64 65 66 61 75 6c 74 73 29 3b 0a 09 20 20  r.defaults);..  
a6350 20 20 20 20 20 20 54 6f 6e 65 2e 49 6e 73 74 72        Tone.Instr
a6360 75 6d 65 6e 74 2e 63 61 6c 6c 28 74 68 69 73 2c  ument.call(this,
a6370 20 6f 70 74 69 6f 6e 73 29 3b 0a 09 20 20 20 20   options);..    
a6380 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54      /**.... *  T
a6390 68 65 20 73 61 6d 70 6c 65 20 70 6c 61 79 65 72  he sample player
a63a0 2e 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b  ..... *  @type {
a63b0 54 6f 6e 65 2e 50 6c 61 79 65 72 7d 0a 09 09 09  Tone.Player}....
a63c0 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
a63d0 73 2e 70 6c 61 79 65 72 20 3d 20 6e 65 77 20 54  s.player = new T
a63e0 6f 6e 65 2e 50 6c 61 79 65 72 28 6f 70 74 69 6f  one.Player(optio
a63f0 6e 73 2e 75 72 6c 2c 20 6f 70 74 69 6f 6e 73 2e  ns.url, options.
a6400 6f 6e 6c 6f 61 64 29 3b 0a 09 20 20 20 20 20 20  onload);..      
a6410 20 20 74 68 69 73 2e 70 6c 61 79 65 72 2e 72 65    this.player.re
a6420 74 72 69 67 67 65 72 20 3d 20 74 72 75 65 3b 0a  trigger = true;.
a6430 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
a6440 20 2a 20 20 54 68 65 20 61 6d 70 6c 69 74 75 64   *  The amplitud
a6450 65 20 65 6e 76 65 6c 6f 70 65 2e 20 0a 09 09 09  e envelope. ....
a6460 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e   *  @type {Tone.
a6470 41 6d 70 6c 69 74 75 64 65 45 6e 76 65 6c 6f 70  AmplitudeEnvelop
a6480 65 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  e}.... */..     
a6490 20 20 20 74 68 69 73 2e 65 6e 76 65 6c 6f 70 65     this.envelope
a64a0 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 41 6d 70 6c   = new Tone.Ampl
a64b0 69 74 75 64 65 45 6e 76 65 6c 6f 70 65 28 6f 70  itudeEnvelope(op
a64c0 74 69 6f 6e 73 2e 65 6e 76 65 6c 6f 70 65 29 3b  tions.envelope);
a64d0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 70  ..        this.p
a64e0 6c 61 79 65 72 2e 63 68 61 69 6e 28 74 68 69 73  layer.chain(this
a64f0 2e 65 6e 76 65 6c 6f 70 65 2c 20 74 68 69 73 2e  .envelope, this.
a6500 6f 75 74 70 75 74 29 3b 0a 09 20 20 20 20 20 20  output);..      
a6510 20 20 74 68 69 73 2e 5f 72 65 61 64 4f 6e 6c 79    this._readOnly
a6520 28 5b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  ([..            
a6530 27 70 6c 61 79 65 72 27 2c 0a 09 20 20 20 20 20  'player',..     
a6540 20 20 20 20 20 20 20 27 65 6e 76 65 6c 6f 70 65         'envelope
a6550 27 0a 09 20 20 20 20 20 20 20 20 5d 29 3b 0a 09  '..        ]);..
a6560 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c 6f 6f          this.loo
a6570 70 20 3d 20 6f 70 74 69 6f 6e 73 2e 6c 6f 6f 70  p = options.loop
a6580 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
a6590 72 65 76 65 72 73 65 20 3d 20 6f 70 74 69 6f 6e  reverse = option
a65a0 73 2e 72 65 76 65 72 73 65 3b 0a 09 20 20 20 20  s.reverse;..    
a65b0 7d 3b 0a 09 20 20 20 20 54 6f 6e 65 2e 65 78 74  };..    Tone.ext
a65c0 65 6e 64 28 54 6f 6e 65 2e 53 61 6d 70 6c 65 72  end(Tone.Sampler
a65d0 2c 20 54 6f 6e 65 2e 49 6e 73 74 72 75 6d 65 6e  , Tone.Instrumen
a65e0 74 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  t);..    /**... 
a65f0 2a 20 20 74 68 65 20 64 65 66 61 75 6c 74 20 70  *  the default p
a6600 61 72 61 6d 65 74 65 72 73 0a 09 09 20 2a 20 20  arameters... *  
a6610 40 73 74 61 74 69 63 0a 09 09 20 2a 2f 0a 09 20  @static... */.. 
a6620 20 20 20 54 6f 6e 65 2e 53 61 6d 70 6c 65 72 2e     Tone.Sampler.
a6630 64 65 66 61 75 6c 74 73 20 3d 20 7b 0a 09 20 20  defaults = {..  
a6640 20 20 20 20 20 20 27 6f 6e 6c 6f 61 64 27 3a 20        'onload': 
a6650 54 6f 6e 65 2e 6e 6f 4f 70 2c 0a 09 20 20 20 20  Tone.noOp,..    
a6660 20 20 20 20 27 6c 6f 6f 70 27 3a 20 66 61 6c 73      'loop': fals
a6670 65 2c 0a 09 20 20 20 20 20 20 20 20 27 72 65 76  e,..        'rev
a6680 65 72 73 65 27 3a 20 66 61 6c 73 65 2c 0a 09 20  erse': false,.. 
a6690 20 20 20 20 20 20 20 27 65 6e 76 65 6c 6f 70 65         'envelope
a66a0 27 3a 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  ': {..          
a66b0 20 20 27 61 74 74 61 63 6b 27 3a 20 30 2e 30 30    'attack': 0.00
a66c0 31 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  1,..            
a66d0 27 64 65 63 61 79 27 3a 20 30 2c 0a 09 20 20 20  'decay': 0,..   
a66e0 20 20 20 20 20 20 20 20 20 27 73 75 73 74 61 69           'sustai
a66f0 6e 27 3a 20 31 2c 0a 09 20 20 20 20 20 20 20 20  n': 1,..        
a6700 20 20 20 20 27 72 65 6c 65 61 73 65 27 3a 20 30      'release': 0
a6710 2e 31 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  .1..        }.. 
a6720 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09     };..    /**..
a6730 09 20 2a 20 20 54 72 69 67 67 65 72 20 74 68 65  . *  Trigger the
a6740 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 73 61   start of the sa
a6750 6d 70 6c 65 2e 20 0a 09 09 20 2a 20 20 40 70 61  mple. ... *  @pa
a6760 72 61 6d 20 7b 49 6e 74 65 72 76 61 6c 7d 20 5b  ram {Interval} [
a6770 70 69 74 63 68 3d 30 5d 20 54 68 65 20 61 6d 6f  pitch=0] The amo
a6780 75 6e 74 20 74 68 65 20 73 61 6d 70 6c 65 20 73  unt the sample s
a6790 68 6f 75 6c 64 0a 09 09 20 2a 20 20 20 20 20 20  hould... *      
a67a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a67b0 20 20 20 20 20 20 20 20 62 65 20 72 65 70 69 74          be repit
a67c0 63 68 65 64 2e 20 0a 09 09 20 2a 20 20 40 70 61  ched. ... *  @pa
a67d0 72 61 6d 20 7b 54 69 6d 65 7d 20 5b 74 69 6d 65  ram {Time} [time
a67e0 3d 6e 6f 77 5d 20 54 68 65 20 74 69 6d 65 20 77  =now] The time w
a67f0 68 65 6e 20 74 68 65 20 73 61 6d 70 6c 65 20 73  hen the sample s
a6800 68 6f 75 6c 64 20 73 74 61 72 74 0a 09 09 20 2a  hould start... *
a6810 20 20 40 70 61 72 61 6d 20 7b 4e 6f 72 6d 61 6c    @param {Normal
a6820 52 61 6e 67 65 7d 20 5b 76 65 6c 6f 63 69 74 79  Range} [velocity
a6830 3d 31 5d 20 54 68 65 20 76 65 6c 6f 63 69 74 79  =1] The velocity
a6840 20 6f 66 20 74 68 65 20 6e 6f 74 65 0a 09 09 20   of the note... 
a6850 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54 6f 6e  *  @returns {Ton
a6860 65 2e 53 61 6d 70 6c 65 72 7d 20 74 68 69 73 0a  e.Sampler} this.
a6870 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09  .. *  @example..
a6880 09 20 2a 20 73 61 6d 70 6c 65 72 2e 74 72 69 67  . * sampler.trig
a6890 67 65 72 41 74 74 61 63 6b 28 30 2c 20 22 2b 30  gerAttack(0, "+0
a68a0 2e 31 22 2c 20 30 2e 35 29 3b 0a 09 09 20 2a 2f  .1", 0.5);... */
a68b0 0a 09 20 20 20 20 54 6f 6e 65 2e 53 61 6d 70 6c  ..    Tone.Sampl
a68c0 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e 74 72 69  er.prototype.tri
a68d0 67 67 65 72 41 74 74 61 63 6b 20 3d 20 66 75 6e  ggerAttack = fun
a68e0 63 74 69 6f 6e 20 28 70 69 74 63 68 2c 20 74 69  ction (pitch, ti
a68f0 6d 65 2c 20 76 65 6c 6f 63 69 74 79 29 20 7b 0a  me, velocity) {.
a6900 09 20 20 20 20 20 20 20 20 74 69 6d 65 20 3d 20  .        time = 
a6910 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28 74  this.toSeconds(t
a6920 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 70  ime);..        p
a6930 69 74 63 68 20 3d 20 74 68 69 73 2e 64 65 66 61  itch = this.defa
a6940 75 6c 74 41 72 67 28 70 69 74 63 68 2c 20 30 29  ultArg(pitch, 0)
a6950 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
a6960 70 6c 61 79 65 72 2e 70 6c 61 79 62 61 63 6b 52  player.playbackR
a6970 61 74 65 20 3d 20 74 68 69 73 2e 69 6e 74 65 72  ate = this.inter
a6980 76 61 6c 54 6f 46 72 65 71 75 65 6e 63 79 52 61  valToFrequencyRa
a6990 74 69 6f 28 70 69 74 63 68 29 3b 0a 09 20 20 20  tio(pitch);..   
a69a0 20 20 20 20 20 74 68 69 73 2e 70 6c 61 79 65 72       this.player
a69b0 2e 73 74 61 72 74 28 74 69 6d 65 29 3b 0a 09 20  .start(time);.. 
a69c0 20 20 20 20 20 20 20 74 68 69 73 2e 65 6e 76 65         this.enve
a69d0 6c 6f 70 65 2e 74 72 69 67 67 65 72 41 74 74 61  lope.triggerAtta
a69e0 63 6b 28 74 69 6d 65 2c 20 76 65 6c 6f 63 69 74  ck(time, velocit
a69f0 79 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74  y);..        ret
a6a00 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
a6a10 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
a6a20 20 53 74 61 72 74 20 74 68 65 20 72 65 6c 65 61   Start the relea
a6a30 73 65 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68  se portion of th
a6a40 65 20 73 61 6d 70 6c 65 2e 20 57 69 6c 6c 20 73  e sample. Will s
a6a50 74 6f 70 20 74 68 65 20 73 61 6d 70 6c 65 20 6f  top the sample o
a6a60 6e 63 65 20 74 68 65 20 0a 09 09 20 2a 20 20 65  nce the ... *  e
a6a70 6e 76 65 6c 6f 70 65 20 68 61 73 20 66 75 6c 6c  nvelope has full
a6a80 79 20 72 65 6c 65 61 73 65 64 2e 20 0a 09 09 20  y released. ... 
a6a90 2a 20 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  *  ... *  @param
a6aa0 20 7b 54 69 6d 65 7d 20 5b 74 69 6d 65 3d 6e 6f   {Time} [time=no
a6ab0 77 5d 20 54 68 65 20 74 69 6d 65 20 77 68 65 6e  w] The time when
a6ac0 20 74 68 65 20 6e 6f 74 65 20 73 68 6f 75 6c 64   the note should
a6ad0 20 72 65 6c 65 61 73 65 0a 09 09 20 2a 20 20 40   release... *  @
a6ae0 72 65 74 75 72 6e 73 20 7b 54 6f 6e 65 2e 53 61  returns {Tone.Sa
a6af0 6d 70 6c 65 72 7d 20 74 68 69 73 0a 09 09 20 2a  mpler} this... *
a6b00 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20    @example... * 
a6b10 73 61 6d 70 6c 65 72 2e 74 72 69 67 67 65 72 52  sampler.triggerR
a6b20 65 6c 65 61 73 65 28 29 3b 0a 09 09 20 2a 2f 0a  elease();... */.
a6b30 09 20 20 20 20 54 6f 6e 65 2e 53 61 6d 70 6c 65  .    Tone.Sample
a6b40 72 2e 70 72 6f 74 6f 74 79 70 65 2e 74 72 69 67  r.prototype.trig
a6b50 67 65 72 52 65 6c 65 61 73 65 20 3d 20 66 75 6e  gerRelease = fun
a6b60 63 74 69 6f 6e 20 28 74 69 6d 65 29 20 7b 0a 09  ction (time) {..
a6b70 20 20 20 20 20 20 20 20 74 69 6d 65 20 3d 20 74          time = t
a6b80 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28 74 69  his.toSeconds(ti
a6b90 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  me);..        th
a6ba0 69 73 2e 65 6e 76 65 6c 6f 70 65 2e 74 72 69 67  is.envelope.trig
a6bb0 67 65 72 52 65 6c 65 61 73 65 28 74 69 6d 65 29  gerRelease(time)
a6bc0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
a6bd0 70 6c 61 79 65 72 2e 73 74 6f 70 28 74 68 69 73  player.stop(this
a6be0 2e 74 6f 53 65 63 6f 6e 64 73 28 74 68 69 73 2e  .toSeconds(this.
a6bf0 65 6e 76 65 6c 6f 70 65 2e 72 65 6c 65 61 73 65  envelope.release
a6c00 29 20 2b 20 74 69 6d 65 29 3b 0a 09 20 20 20 20  ) + time);..    
a6c10 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b      return this;
a6c20 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
a6c30 2a 0a 09 09 20 2a 20 20 54 72 69 67 67 65 72 20  *... *  Trigger 
a6c40 74 68 65 20 61 74 74 61 63 6b 20 61 6e 64 20 74  the attack and t
a6c50 68 65 6e 20 74 68 65 20 72 65 6c 65 61 73 65 20  hen the release 
a6c60 61 66 74 65 72 20 74 68 65 20 64 75 72 61 74 69  after the durati
a6c70 6f 6e 2e 20 0a 09 09 20 2a 20 20 40 70 61 72 61  on. ... *  @para
a6c80 6d 20 20 7b 49 6e 74 65 72 76 61 6c 7d 20 69 6e  m  {Interval} in
a6c90 74 65 72 76 61 6c 20 20 20 20 20 54 68 65 20 69  terval     The i
a6ca0 6e 74 65 72 76 61 6c 20 69 6e 20 68 61 6c 66 2d  nterval in half-
a6cb0 73 74 65 70 73 20 74 68 61 74 20 74 68 65 0a 09  steps that the..
a6cc0 09 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
a6cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a6ce0 20 20 20 20 20 73 61 6d 70 6c 65 20 73 68 6f 75       sample shou
a6cf0 6c 64 20 62 65 20 70 69 74 63 68 20 73 68 69 66  ld be pitch shif
a6d00 74 65 64 2e 0a 09 09 20 2a 20 20 40 70 61 72 61  ted.... *  @para
a6d10 6d 20 20 7b 54 69 6d 65 7d 20 64 75 72 61 74 69  m  {Time} durati
a6d20 6f 6e 20 48 6f 77 20 6c 6f 6e 67 20 74 68 65 20  on How long the 
a6d30 6e 6f 74 65 20 73 68 6f 75 6c 64 20 62 65 20 68  note should be h
a6d40 65 6c 64 20 66 6f 72 20 62 65 66 6f 72 65 0a 09  eld for before..
a6d50 09 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
a6d60 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 69               tri
a6d70 67 67 65 72 69 6e 67 20 74 68 65 20 72 65 6c 65  ggering the rele
a6d80 61 73 65 2e 0a 09 09 20 2a 20 20 40 70 61 72 61  ase.... *  @para
a6d90 6d 20 7b 54 69 6d 65 7d 20 5b 74 69 6d 65 3d 6e  m {Time} [time=n
a6da0 6f 77 5d 20 20 57 68 65 6e 20 74 68 65 20 6e 6f  ow]  When the no
a6db0 74 65 20 73 68 6f 75 6c 64 20 62 65 20 74 72 69  te should be tri
a6dc0 67 67 65 72 65 64 2e 0a 09 09 20 2a 20 20 40 70  ggered.... *  @p
a6dd0 61 72 61 6d 20 20 7b 4e 6f 72 6d 61 6c 52 61 6e  aram  {NormalRan
a6de0 67 65 7d 20 5b 76 65 6c 6f 63 69 74 79 3d 31 5d  ge} [velocity=1]
a6df0 20 54 68 65 20 76 65 6c 6f 63 69 74 79 20 74 68   The velocity th
a6e00 65 20 6e 6f 74 65 20 73 68 6f 75 6c 64 20 62 65  e note should be
a6e10 20 74 72 69 67 67 65 72 65 64 20 61 74 2e 0a 09   triggered at...
a6e20 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b 54  . *  @returns {T
a6e30 6f 6e 65 2e 53 61 6d 70 6c 65 72 7d 20 74 68 69  one.Sampler} thi
a6e40 73 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65  s... *  @example
a6e50 0a 09 09 20 2a 20 2f 2f 74 72 69 67 67 65 72 20  ... * //trigger 
a6e60 74 68 65 20 75 6e 70 69 74 63 68 65 64 20 6e 6f  the unpitched no
a6e70 74 65 20 66 6f 72 20 74 68 65 20 64 75 72 61 74  te for the durat
a6e80 69 6f 6e 20 6f 66 20 61 6e 20 38 74 68 20 6e 6f  ion of an 8th no
a6e90 74 65 0a 09 09 20 2a 20 73 79 6e 74 68 2e 74 72  te... * synth.tr
a6ea0 69 67 67 65 72 41 74 74 61 63 6b 52 65 6c 65 61  iggerAttackRelea
a6eb0 73 65 28 30 2c 20 22 38 6e 22 29 3b 0a 09 09 20  se(0, "8n");... 
a6ec0 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e  *  @memberOf Ton
a6ed0 65 2e 53 61 6d 70 6c 65 72 23 0a 09 09 20 2a 20  e.Sampler#... * 
a6ee0 20 40 6e 61 6d 65 20 74 72 69 67 67 65 72 41 74   @name triggerAt
a6ef0 74 61 63 6b 52 65 6c 65 61 73 65 0a 09 09 20 2a  tackRelease... *
a6f00 20 20 40 6d 65 74 68 6f 64 20 74 72 69 67 67 65    @method trigge
a6f10 72 41 74 74 61 63 6b 52 65 6c 65 61 73 65 0a 09  rAttackRelease..
a6f20 09 20 2a 2f 0a 09 20 20 20 20 2f 2a 2a 0a 09 09  . */..    /**...
a6f30 20 2a 20 49 66 20 74 68 65 20 6f 75 74 70 75 74   * If the output
a6f40 20 73 61 6d 70 6c 65 20 73 68 6f 75 6c 64 20 6c   sample should l
a6f50 6f 6f 70 20 6f 72 20 6e 6f 74 2e 0a 09 09 20 2a  oop or not.... *
a6f60 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e   @memberOf Tone.
a6f70 53 61 6d 70 6c 65 72 23 0a 09 09 20 2a 20 40 74  Sampler#... * @t
a6f80 79 70 65 20 7b 6e 75 6d 62 65 72 7c 73 74 72 69  ype {number|stri
a6f90 6e 67 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 6c  ng}... * @name l
a6fa0 6f 6f 70 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f  oop... */..    O
a6fb0 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70  bject.defineProp
a6fc0 65 72 74 79 28 54 6f 6e 65 2e 53 61 6d 70 6c 65  erty(Tone.Sample
a6fd0 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 6c 6f  r.prototype, 'lo
a6fe0 6f 70 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20  op', {..        
a6ff0 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29  get: function ()
a7000 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a7010 72 65 74 75 72 6e 20 74 68 69 73 2e 70 6c 61 79  return this.play
a7020 65 72 2e 6c 6f 6f 70 3b 0a 09 20 20 20 20 20 20  er.loop;..      
a7030 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65    },..        se
a7040 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 6c 6f 6f  t: function (loo
a7050 70 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  p) {..          
a7060 20 20 74 68 69 73 2e 70 6c 61 79 65 72 2e 6c 6f    this.player.lo
a7070 6f 70 20 3d 20 6c 6f 6f 70 3b 0a 09 20 20 20 20  op = loop;..    
a7080 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09      }..    });..
a7090 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65      /**... * The
a70a0 20 64 69 72 65 63 74 69 6f 6e 20 74 68 65 20 62   direction the b
a70b0 75 66 66 65 72 20 73 68 6f 75 6c 64 20 70 6c 61  uffer should pla
a70c0 79 20 69 6e 0a 09 09 20 2a 20 40 6d 65 6d 62 65  y in... * @membe
a70d0 72 4f 66 20 54 6f 6e 65 2e 53 61 6d 70 6c 65 72  rOf Tone.Sampler
a70e0 23 0a 09 09 20 2a 20 40 74 79 70 65 20 7b 62 6f  #... * @type {bo
a70f0 6f 6c 65 61 6e 7d 0a 09 09 20 2a 20 40 6e 61 6d  olean}... * @nam
a7100 65 20 72 65 76 65 72 73 65 0a 09 09 20 2a 2f 0a  e reverse... */.
a7110 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69  .    Object.defi
a7120 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e  neProperty(Tone.
a7130 53 61 6d 70 6c 65 72 2e 70 72 6f 74 6f 74 79 70  Sampler.prototyp
a7140 65 2c 20 27 72 65 76 65 72 73 65 27 2c 20 7b 0a  e, 'reverse', {.
a7150 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75  .        get: fu
a7160 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
a7170 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
a7180 74 68 69 73 2e 70 6c 61 79 65 72 2e 72 65 76 65  this.player.reve
a7190 72 73 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c  rse;..        },
a71a0 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66  ..        set: f
a71b0 75 6e 63 74 69 6f 6e 20 28 72 65 76 29 20 7b 0a  unction (rev) {.
a71c0 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
a71d0 73 2e 70 6c 61 79 65 72 2e 72 65 76 65 72 73 65  s.player.reverse
a71e0 20 3d 20 72 65 76 3b 0a 09 20 20 20 20 20 20 20   = rev;..       
a71f0 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20   }..    });..   
a7200 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65 20 62 75   /**... * The bu
a7210 66 66 65 72 20 74 6f 20 70 6c 61 79 2e 0a 09 09  ffer to play....
a7220 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e   * @memberOf Ton
a7230 65 2e 53 61 6d 70 6c 65 72 23 0a 09 09 20 2a 20  e.Sampler#... * 
a7240 40 74 79 70 65 20 7b 54 6f 6e 65 2e 42 75 66 66  @type {Tone.Buff
a7250 65 72 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 62  er}... * @name b
a7260 75 66 66 65 72 0a 09 09 20 2a 2f 0a 09 20 20 20  uffer... */..   
a7270 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72   Object.definePr
a7280 6f 70 65 72 74 79 28 54 6f 6e 65 2e 53 61 6d 70  operty(Tone.Samp
a7290 6c 65 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27  ler.prototype, '
a72a0 62 75 66 66 65 72 27 2c 20 7b 0a 09 20 20 20 20  buffer', {..    
a72b0 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f      get: functio
a72c0 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
a72d0 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
a72e0 70 6c 61 79 65 72 2e 62 75 66 66 65 72 3b 0a 09  player.buffer;..
a72f0 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20          },..    
a7300 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f      set: functio
a7310 6e 20 28 62 75 66 66 29 20 7b 0a 09 20 20 20 20  n (buff) {..    
a7320 20 20 20 20 20 20 20 20 74 68 69 73 2e 70 6c 61          this.pla
a7330 79 65 72 2e 62 75 66 66 65 72 20 3d 20 62 75 66  yer.buffer = buf
a7340 66 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  f;..        }.. 
a7350 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a     });..    /**.
a7360 09 09 20 2a 20 20 43 6c 65 61 6e 20 75 70 2e 0a  .. *  Clean up..
a7370 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b  .. *  @returns {
a7380 54 6f 6e 65 2e 53 61 6d 70 6c 65 72 7d 20 74 68  Tone.Sampler} th
a7390 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  is... */..    To
a73a0 6e 65 2e 53 61 6d 70 6c 65 72 2e 70 72 6f 74 6f  ne.Sampler.proto
a73b0 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d 20 66  type.dispose = f
a73c0 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
a73d0 20 20 20 20 20 20 54 6f 6e 65 2e 49 6e 73 74 72        Tone.Instr
a73e0 75 6d 65 6e 74 2e 70 72 6f 74 6f 74 79 70 65 2e  ument.prototype.
a73f0 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74 68 69  dispose.call(thi
a7400 73 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  s);..        thi
a7410 73 2e 5f 77 72 69 74 61 62 6c 65 28 5b 0a 09 20  s._writable([.. 
a7420 20 20 20 20 20 20 20 20 20 20 20 27 70 6c 61 79             'play
a7430 65 72 27 2c 0a 09 20 20 20 20 20 20 20 20 20 20  er',..          
a7440 20 20 27 65 6e 76 65 6c 6f 70 65 27 0a 09 20 20    'envelope'..  
a7450 20 20 20 20 20 20 5d 29 3b 0a 09 20 20 20 20 20        ]);..     
a7460 20 20 20 74 68 69 73 2e 70 6c 61 79 65 72 2e 64     this.player.d
a7470 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20  ispose();..     
a7480 20 20 20 74 68 69 73 2e 70 6c 61 79 65 72 20 3d     this.player =
a7490 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
a74a0 74 68 69 73 2e 65 6e 76 65 6c 6f 70 65 2e 64 69  this.envelope.di
a74b0 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
a74c0 20 20 74 68 69 73 2e 65 6e 76 65 6c 6f 70 65 20    this.envelope 
a74d0 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
a74e0 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20   return this;.. 
a74f0 20 20 20 7d 3b 0a 09 20 20 20 20 72 65 74 75 72     };..    retur
a7500 6e 20 54 6f 6e 65 2e 53 61 6d 70 6c 65 72 3b 0a  n Tone.Sampler;.
a7510 09 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e  .});..Module(fun
a7520 63 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09  ction (Tone) {..
a7530 20 20 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09      ..    /**...
a7540 20 2a 20 20 40 63 6c 61 73 73 20 4d 61 70 73 20   *  @class Maps 
a7550 61 20 4e 6f 72 6d 61 6c 52 61 6e 67 65 20 5b 30  a NormalRange [0
a7560 2c 20 31 5d 20 74 6f 20 61 6e 20 41 75 64 69 6f  , 1] to an Audio
a7570 52 61 6e 67 65 20 5b 2d 31 2c 20 31 5d 2e 20 0a  Range [-1, 1]. .
a7580 09 09 20 2a 20 20 20 20 20 20 20 20 20 53 65 65  .. *         See
a7590 20 61 6c 73 6f 20 54 6f 6e 65 2e 41 75 64 69 6f   also Tone.Audio
a75a0 54 6f 47 61 69 6e 2e 20 0a 09 09 20 2a 0a 09 09  ToGain. ... *...
a75b0 20 2a 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f   *  @extends {To
a75c0 6e 65 2e 53 69 67 6e 61 6c 42 61 73 65 7d 0a 09  ne.SignalBase}..
a75d0 09 20 2a 20 20 40 63 6f 6e 73 74 72 75 63 74 6f  . *  @constructo
a75e0 72 0a 09 09 20 2a 20 20 40 65 78 61 6d 70 6c 65  r... *  @example
a75f0 0a 09 09 20 2a 20 76 61 72 20 67 32 61 20 3d 20  ... * var g2a = 
a7600 6e 65 77 20 54 6f 6e 65 2e 47 61 69 6e 54 6f 41  new Tone.GainToA
a7610 75 64 69 6f 28 29 3b 0a 09 09 20 2a 2f 0a 09 20  udio();... */.. 
a7620 20 20 20 54 6f 6e 65 2e 47 61 69 6e 54 6f 41 75     Tone.GainToAu
a7630 64 69 6f 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  dio = function (
a7640 29 20 7b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  ) {..        /**
a7650 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 57  .... *  @type {W
a7660 61 76 65 53 68 61 70 65 72 4e 6f 64 65 7d 0a 09  aveShaperNode}..
a7670 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
a7680 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
a7690 68 69 73 2e 5f 6e 6f 72 6d 20 3d 20 74 68 69 73  his._norm = this
a76a0 2e 69 6e 70 75 74 20 3d 20 74 68 69 73 2e 6f 75  .input = this.ou
a76b0 74 70 75 74 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  tput = new Tone.
a76c0 57 61 76 65 53 68 61 70 65 72 28 66 75 6e 63 74  WaveShaper(funct
a76d0 69 6f 6e 20 28 78 29 20 7b 0a 09 20 20 20 20 20  ion (x) {..     
a76e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 61         return Ma
a76f0 74 68 2e 61 62 73 28 78 29 20 2a 20 32 20 2d 20  th.abs(x) * 2 - 
a7700 31 3b 0a 09 20 20 20 20 20 20 20 20 7d 29 3b 0a  1;..        });.
a7710 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e  .    };..    Ton
a7720 65 2e 65 78 74 65 6e 64 28 54 6f 6e 65 2e 47 61  e.extend(Tone.Ga
a7730 69 6e 54 6f 41 75 64 69 6f 2c 20 54 6f 6e 65 2e  inToAudio, Tone.
a7740 53 69 67 6e 61 6c 42 61 73 65 29 3b 0a 09 20 20  SignalBase);..  
a7750 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 63 6c 65 61    /**... *  clea
a7760 6e 20 75 70 0a 09 09 20 2a 20 20 40 72 65 74 75  n up... *  @retu
a7770 72 6e 73 20 7b 54 6f 6e 65 2e 47 61 69 6e 54 6f  rns {Tone.GainTo
a7780 41 75 64 69 6f 7d 20 74 68 69 73 0a 09 09 20 2a  Audio} this... *
a7790 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 47 61 69 6e  /..    Tone.Gain
a77a0 54 6f 41 75 64 69 6f 2e 70 72 6f 74 6f 74 79 70  ToAudio.prototyp
a77b0 65 2e 64 69 73 70 6f 73 65 20 3d 20 66 75 6e 63  e.dispose = func
a77c0 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
a77d0 20 20 20 54 6f 6e 65 2e 70 72 6f 74 6f 74 79 70     Tone.prototyp
a77e0 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c 6c 28 74  e.dispose.call(t
a77f0 68 69 73 29 3b 0a 09 20 20 20 20 20 20 20 20 74  his);..        t
a7800 68 69 73 2e 5f 6e 6f 72 6d 2e 64 69 73 70 6f 73  his._norm.dispos
a7810 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  e();..        th
a7820 69 73 2e 5f 6e 6f 72 6d 20 3d 20 6e 75 6c 6c 3b  is._norm = null;
a7830 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
a7840 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09   this;..    };..
a7850 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e      return Tone.
a7860 47 61 69 6e 54 6f 41 75 64 69 6f 3b 0a 09 7d 29  GainToAudio;..})
a7870 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74 69  ;..Module(functi
a7880 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20 20  on (Tone) {..   
a7890 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20   ..    /**... * 
a78a0 20 40 63 6c 61 73 73 20 4e 6f 72 6d 61 6c 69 7a   @class Normaliz
a78b0 65 20 74 61 6b 65 73 20 61 6e 20 69 6e 70 75 74  e takes an input
a78c0 20 6d 69 6e 20 61 6e 64 20 6d 61 78 20 61 6e 64   min and max and
a78d0 20 6d 61 70 73 20 69 74 20 6c 69 6e 65 61 72 6c   maps it linearl
a78e0 79 20 74 6f 20 4e 6f 72 6d 61 6c 52 61 6e 67 65  y to NormalRange
a78f0 20 5b 30 2c 31 5d 0a 09 09 20 2a 0a 09 09 20 2a   [0,1]... *... *
a7900 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65    @extends {Tone
a7910 2e 53 69 67 6e 61 6c 42 61 73 65 7d 0a 09 09 20  .SignalBase}... 
a7920 2a 20 20 40 63 6f 6e 73 74 72 75 63 74 6f 72 0a  *  @constructor.
a7930 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 6e 75  .. *  @param {nu
a7940 6d 62 65 72 7d 20 69 6e 70 75 74 4d 69 6e 20 74  mber} inputMin t
a7950 68 65 20 6d 69 6e 20 69 6e 70 75 74 20 76 61 6c  he min input val
a7960 75 65 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  ue... *  @param 
a7970 7b 6e 75 6d 62 65 72 7d 20 69 6e 70 75 74 4d 61  {number} inputMa
a7980 78 20 74 68 65 20 6d 61 78 20 69 6e 70 75 74 20  x the max input 
a7990 76 61 6c 75 65 0a 09 09 20 2a 20 20 40 65 78 61  value... *  @exa
a79a0 6d 70 6c 65 0a 09 09 20 2a 20 76 61 72 20 6e 6f  mple... * var no
a79b0 72 6d 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4e 6f  rm = new Tone.No
a79c0 72 6d 61 6c 69 7a 65 28 32 2c 20 34 29 3b 0a 09  rmalize(2, 4);..
a79d0 09 20 2a 20 76 61 72 20 73 69 67 20 3d 20 6e 65  . * var sig = ne
a79e0 77 20 54 6f 6e 65 2e 53 69 67 6e 61 6c 28 33 29  w Tone.Signal(3)
a79f0 2e 63 6f 6e 6e 65 63 74 28 6e 6f 72 6d 29 3b 0a  .connect(norm);.
a7a00 09 09 20 2a 20 2f 2f 6f 75 74 70 75 74 20 6f 66  .. * //output of
a7a10 20 6e 6f 72 6d 20 69 73 20 30 2e 35 2e 20 0a 09   norm is 0.5. ..
a7a20 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4e  . */..    Tone.N
a7a30 6f 72 6d 61 6c 69 7a 65 20 3d 20 66 75 6e 63 74  ormalize = funct
a7a40 69 6f 6e 20 28 69 6e 70 75 74 4d 69 6e 2c 20 69  ion (inputMin, i
a7a50 6e 70 75 74 4d 61 78 29 20 7b 0a 09 20 20 20 20  nputMax) {..    
a7a60 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 74      /**.... *  t
a7a70 68 65 20 6d 69 6e 20 69 6e 70 75 74 20 76 61 6c  he min input val
a7a80 75 65 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  ue.... *  @type 
a7a90 7b 6e 75 6d 62 65 72 7d 0a 09 09 09 20 2a 20 20  {number}.... *  
a7aa0 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a  @private.... */.
a7ab0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 69  .        this._i
a7ac0 6e 70 75 74 4d 69 6e 20 3d 20 74 68 69 73 2e 64  nputMin = this.d
a7ad0 65 66 61 75 6c 74 41 72 67 28 69 6e 70 75 74 4d  efaultArg(inputM
a7ae0 69 6e 2c 20 30 29 3b 0a 09 20 20 20 20 20 20 20  in, 0);..       
a7af0 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 74 68 65 20   /**.... *  the 
a7b00 6d 61 78 20 69 6e 70 75 74 20 76 61 6c 75 65 0a  max input value.
a7b10 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 6e 75  ... *  @type {nu
a7b20 6d 62 65 72 7d 0a 09 09 09 20 2a 20 20 40 70 72  mber}.... *  @pr
a7b30 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20  ivate.... */..  
a7b40 20 20 20 20 20 20 74 68 69 73 2e 5f 69 6e 70 75        this._inpu
a7b50 74 4d 61 78 20 3d 20 74 68 69 73 2e 64 65 66 61  tMax = this.defa
a7b60 75 6c 74 41 72 67 28 69 6e 70 75 74 4d 61 78 2c  ultArg(inputMax,
a7b70 20 31 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a   1);..        /*
a7b80 2a 0a 09 09 09 20 2a 20 20 73 75 62 74 72 61 63  *.... *  subtrac
a7b90 74 20 74 68 65 20 6d 69 6e 20 66 72 6f 6d 20 74  t the min from t
a7ba0 68 65 20 69 6e 70 75 74 0a 09 09 09 20 2a 20 20  he input.... *  
a7bb0 40 74 79 70 65 20 7b 54 6f 6e 65 2e 41 64 64 7d  @type {Tone.Add}
a7bc0 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  .... *  @private
a7bd0 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
a7be0 20 74 68 69 73 2e 5f 73 75 62 20 3d 20 74 68 69   this._sub = thi
a7bf0 73 2e 69 6e 70 75 74 20 3d 20 6e 65 77 20 54 6f  s.input = new To
a7c00 6e 65 2e 41 64 64 28 30 29 3b 0a 09 20 20 20 20  ne.Add(0);..    
a7c10 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 64      /**.... *  d
a7c20 69 76 69 64 65 20 62 79 20 74 68 65 20 64 69 66  ivide by the dif
a7c30 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
a7c40 74 68 65 20 69 6e 70 75 74 20 61 6e 64 20 6f 75  the input and ou
a7c50 74 70 75 74 0a 09 09 09 20 2a 20 20 40 74 79 70  tput.... *  @typ
a7c60 65 20 7b 54 6f 6e 65 2e 4d 75 6c 74 69 70 6c 79  e {Tone.Multiply
a7c70 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  }.... *  @privat
a7c80 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
a7c90 20 20 74 68 69 73 2e 5f 64 69 76 20 3d 20 74 68    this._div = th
a7ca0 69 73 2e 6f 75 74 70 75 74 20 3d 20 6e 65 77 20  is.output = new 
a7cb0 54 6f 6e 65 2e 4d 75 6c 74 69 70 6c 79 28 31 29  Tone.Multiply(1)
a7cc0 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  ;..        this.
a7cd0 5f 73 75 62 2e 63 6f 6e 6e 65 63 74 28 74 68 69  _sub.connect(thi
a7ce0 73 2e 5f 64 69 76 29 3b 0a 09 20 20 20 20 20 20  s._div);..      
a7cf0 20 20 74 68 69 73 2e 5f 73 65 74 52 61 6e 67 65    this._setRange
a7d00 28 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  ();..    };..   
a7d10 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54 6f 6e   Tone.extend(Ton
a7d20 65 2e 4e 6f 72 6d 61 6c 69 7a 65 2c 20 54 6f 6e  e.Normalize, Ton
a7d30 65 2e 53 69 67 6e 61 6c 42 61 73 65 29 3b 0a 09  e.SignalBase);..
a7d40 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65      /**... * The
a7d50 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 20 74   minimum value t
a7d60 68 65 20 69 6e 70 75 74 20 73 69 67 6e 61 6c 20  he input signal 
a7d70 77 69 6c 6c 20 72 65 61 63 68 2e 0a 09 09 20 2a  will reach.... *
a7d80 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e   @memberOf Tone.
a7d90 4e 6f 72 6d 61 6c 69 7a 65 23 0a 09 09 20 2a 20  Normalize#... * 
a7da0 40 74 79 70 65 20 7b 6e 75 6d 62 65 72 7d 0a 09  @type {number}..
a7db0 09 20 2a 20 40 6e 61 6d 65 20 6d 69 6e 0a 09 09  . * @name min...
a7dc0 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e   */..    Object.
a7dd0 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54  defineProperty(T
a7de0 6f 6e 65 2e 4e 6f 72 6d 61 6c 69 7a 65 2e 70 72  one.Normalize.pr
a7df0 6f 74 6f 74 79 70 65 2c 20 27 6d 69 6e 27 2c 20  ototype, 'min', 
a7e00 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a 20  {..        get: 
a7e10 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20  function () {.. 
a7e20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
a7e30 6e 20 74 68 69 73 2e 5f 69 6e 70 75 74 4d 69 6e  n this._inputMin
a7e40 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20  ;..        },.. 
a7e50 20 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63         set: func
a7e60 74 69 6f 6e 20 28 6d 69 6e 29 20 7b 0a 09 20 20  tion (min) {..  
a7e70 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
a7e80 69 6e 70 75 74 4d 69 6e 20 3d 20 6d 69 6e 3b 0a  inputMin = min;.
a7e90 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
a7ea0 73 2e 5f 73 65 74 52 61 6e 67 65 28 29 3b 0a 09  s._setRange();..
a7eb0 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d          }..    }
a7ec0 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  );..    /**... *
a7ed0 20 54 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c   The maximum val
a7ee0 75 65 20 74 68 65 20 69 6e 70 75 74 20 73 69 67  ue the input sig
a7ef0 6e 61 6c 20 77 69 6c 6c 20 72 65 61 63 68 2e 0a  nal will reach..
a7f00 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54  .. * @memberOf T
a7f10 6f 6e 65 2e 4e 6f 72 6d 61 6c 69 7a 65 23 0a 09  one.Normalize#..
a7f20 09 20 2a 20 40 74 79 70 65 20 7b 6e 75 6d 62 65  . * @type {numbe
a7f30 72 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 6d 61  r}... * @name ma
a7f40 78 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a  x... */..    Obj
a7f50 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72  ect.defineProper
a7f60 74 79 28 54 6f 6e 65 2e 4e 6f 72 6d 61 6c 69 7a  ty(Tone.Normaliz
a7f70 65 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 6d 61  e.prototype, 'ma
a7f80 78 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67  x', {..        g
a7f90 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  et: function () 
a7fa0 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
a7fb0 65 74 75 72 6e 20 74 68 69 73 2e 5f 69 6e 70 75  eturn this._inpu
a7fc0 74 4d 61 78 3b 0a 09 20 20 20 20 20 20 20 20 7d  tMax;..        }
a7fd0 2c 0a 09 20 20 20 20 20 20 20 20 73 65 74 3a 20  ,..        set: 
a7fe0 66 75 6e 63 74 69 6f 6e 20 28 6d 61 78 29 20 7b  function (max) {
a7ff0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
a8000 69 73 2e 5f 69 6e 70 75 74 4d 61 78 20 3d 20 6d  is._inputMax = m
a8010 61 78 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ax;..           
a8020 20 74 68 69 73 2e 5f 73 65 74 52 61 6e 67 65 28   this._setRange(
a8030 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  );..        }.. 
a8040 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a     });..    /**.
a8050 09 09 20 2a 20 20 73 65 74 20 74 68 65 20 76 61  .. *  set the va
a8060 6c 75 65 73 0a 09 09 20 2a 20 20 40 70 72 69 76  lues... *  @priv
a8070 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  ate... */..    T
a8080 6f 6e 65 2e 4e 6f 72 6d 61 6c 69 7a 65 2e 70 72  one.Normalize.pr
a8090 6f 74 6f 74 79 70 65 2e 5f 73 65 74 52 61 6e 67  ototype._setRang
a80a0 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  e = function () 
a80b0 7b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  {..        this.
a80c0 5f 73 75 62 2e 76 61 6c 75 65 20 3d 20 2d 74 68  _sub.value = -th
a80d0 69 73 2e 5f 69 6e 70 75 74 4d 69 6e 3b 0a 09 20  is._inputMin;.. 
a80e0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 64 69 76         this._div
a80f0 2e 76 61 6c 75 65 20 3d 20 31 20 2f 20 28 74 68  .value = 1 / (th
a8100 69 73 2e 5f 69 6e 70 75 74 4d 61 78 20 2d 20 74  is._inputMax - t
a8110 68 69 73 2e 5f 69 6e 70 75 74 4d 69 6e 29 3b 0a  his._inputMin);.
a8120 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
a8130 0a 09 09 20 2a 20 20 63 6c 65 61 6e 20 75 70 0a  ... *  clean up.
a8140 09 09 20 2a 20 20 40 72 65 74 75 72 6e 73 20 7b  .. *  @returns {
a8150 54 6f 6e 65 2e 4e 6f 72 6d 61 6c 69 7a 65 7d 20  Tone.Normalize} 
a8160 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20  this... */..    
a8170 54 6f 6e 65 2e 4e 6f 72 6d 61 6c 69 7a 65 2e 70  Tone.Normalize.p
a8180 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65  rototype.dispose
a8190 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b   = function () {
a81a0 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 70  ..        Tone.p
a81b0 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65  rototype.dispose
a81c0 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20  .call(this);..  
a81d0 20 20 20 20 20 20 74 68 69 73 2e 5f 73 75 62 2e        this._sub.
a81e0 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20  dispose();..    
a81f0 20 20 20 20 74 68 69 73 2e 5f 73 75 62 20 3d 20      this._sub = 
a8200 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74  null;..        t
a8210 68 69 73 2e 5f 64 69 76 2e 64 69 73 70 6f 73 65  his._div.dispose
a8220 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ();..        thi
a8230 73 2e 5f 64 69 76 20 3d 20 6e 75 6c 6c 3b 0a 09  s._div = null;..
a8240 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
a8250 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20  his;..    };..  
a8260 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 4e 6f    return Tone.No
a8270 72 6d 61 6c 69 7a 65 3b 0a 09 7d 29 3b 0a 09 4d  rmalize;..});..M
a8280 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28  odule(function (
a8290 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 2f 2a 2a  Tone) {..    /**
a82a0 0a 09 09 20 2a 20 20 40 63 6c 61 73 73 20 57 72  ... *  @class Wr
a82b0 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65  apper around the
a82c0 20 6e 61 74 69 76 65 20 42 75 66 66 65 72 53 6f   native BufferSo
a82d0 75 72 63 65 4e 6f 64 65 2e 0a 09 09 20 2a 20 20  urceNode.... *  
a82e0 40 70 61 72 61 6d 20 20 7b 41 75 64 69 6f 42 75  @param  {AudioBu
a82f0 66 66 65 72 7c 54 6f 6e 65 2e 42 75 66 66 65 72  ffer|Tone.Buffer
a8300 7d 20 20 62 75 66 66 65 72 20 20 20 54 68 65 20  }  buffer   The 
a8310 62 75 66 66 65 72 20 74 6f 20 70 6c 61 79 0a 09  buffer to play..
a8320 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 46 75  . *  @param  {Fu
a8330 6e 63 74 69 6f 6e 7d 20 20 6f 6e 65 6e 64 65 64  nction}  onended
a8340 20 20 54 68 65 20 63 61 6c 6c 62 61 63 6b 20 74    The callback t
a8350 6f 20 69 6e 76 6f 6b 65 20 77 68 65 6e 20 74 68  o invoke when th
a8360 65 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  e ... *         
a8370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a8380 20 20 20 20 20 20 62 75 66 66 65 72 20 69 73 20        buffer is 
a8390 64 6f 6e 65 20 70 6c 61 79 69 6e 67 2e 0a 09 09  done playing....
a83a0 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 42 75   */..    Tone.Bu
a83b0 66 66 65 72 53 6f 75 72 63 65 20 3d 20 66 75 6e  fferSource = fun
a83c0 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
a83d0 20 20 20 20 76 61 72 20 6f 70 74 69 6f 6e 73 20      var options 
a83e0 3d 20 74 68 69 73 2e 6f 70 74 69 6f 6e 73 4f 62  = this.optionsOb
a83f0 6a 65 63 74 28 61 72 67 75 6d 65 6e 74 73 2c 20  ject(arguments, 
a8400 5b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27  [..            '
a8410 62 75 66 66 65 72 27 2c 0a 09 20 20 20 20 20 20  buffer',..      
a8420 20 20 20 20 20 20 27 6f 6e 65 6e 64 65 64 27 0a        'onended'.
a8430 09 20 20 20 20 20 20 20 20 5d 2c 20 54 6f 6e 65  .        ], Tone
a8440 2e 42 75 66 66 65 72 53 6f 75 72 63 65 2e 64 65  .BufferSource.de
a8450 66 61 75 6c 74 73 29 3b 0a 09 20 20 20 20 20 20  faults);..      
a8460 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65    /**.... *  The
a8470 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 69 6e 76   callback to inv
a8480 6f 6b 65 20 61 66 74 65 72 20 74 68 65 20 0a 09  oke after the ..
a8490 09 09 20 2a 20 20 62 75 66 66 65 72 20 73 6f 75  .. *  buffer sou
a84a0 72 63 65 20 69 73 20 64 6f 6e 65 20 70 6c 61 79  rce is done play
a84b0 69 6e 67 2e 20 0a 09 09 09 20 2a 20 20 40 74 79  ing. .... *  @ty
a84c0 70 65 20 20 7b 46 75 6e 63 74 69 6f 6e 7d 0a 09  pe  {Function}..
a84d0 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
a84e0 68 69 73 2e 6f 6e 65 6e 64 65 64 20 3d 20 6f 70  his.onended = op
a84f0 74 69 6f 6e 73 2e 6f 6e 65 6e 64 65 64 3b 0a 09  tions.onended;..
a8500 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
a8510 2a 20 20 54 68 65 20 74 69 6d 65 20 74 68 61 74  *  The time that
a8520 20 74 68 65 20 62 75 66 66 65 72 20 77 61 73 20   the buffer was 
a8530 73 74 61 72 74 65 64 2e 0a 09 09 09 20 2a 20 20  started..... *  
a8540 40 74 79 70 65 20 20 7b 4e 75 6d 62 65 72 7d 0a  @type  {Number}.
a8550 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
a8560 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
a8570 74 68 69 73 2e 5f 73 74 61 72 74 54 69 6d 65 20  this._startTime 
a8580 3d 20 2d 31 3b 0a 09 20 20 20 20 20 20 20 20 2f  = -1;..        /
a8590 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 74 69  **.... *  The ti
a85a0 6d 65 20 74 68 61 74 20 74 68 65 20 62 75 66 66  me that the buff
a85b0 65 72 20 69 73 20 73 63 68 65 64 75 6c 65 64 20  er is scheduled 
a85c0 74 6f 20 73 74 6f 70 2e 0a 09 09 09 20 2a 20 20  to stop..... *  
a85d0 40 74 79 70 65 20 20 7b 4e 75 6d 62 65 72 7d 0a  @type  {Number}.
a85e0 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a  ... *  @private.
a85f0 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
a8600 74 68 69 73 2e 5f 73 74 6f 70 54 69 6d 65 20 3d  this._stopTime =
a8610 20 2d 31 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a   -1;..        /*
a8620 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 67 61 69  *.... *  The gai
a8630 6e 20 6e 6f 64 65 20 77 68 69 63 68 20 65 6e 76  n node which env
a8640 65 6c 6f 70 65 73 20 74 68 65 20 42 75 66 66 65  elopes the Buffe
a8650 72 53 6f 75 72 63 65 0a 09 09 09 20 2a 20 20 40  rSource.... *  @
a8660 74 79 70 65 20 20 7b 54 6f 6e 65 2e 47 61 69 6e  type  {Tone.Gain
a8670 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  }.... *  @privat
a8680 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
a8690 20 20 74 68 69 73 2e 5f 67 61 69 6e 4e 6f 64 65    this._gainNode
a86a0 20 3d 20 74 68 69 73 2e 6f 75 74 70 75 74 20 3d   = this.output =
a86b0 20 6e 65 77 20 54 6f 6e 65 2e 47 61 69 6e 28 29   new Tone.Gain()
a86c0 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
a86d0 09 09 20 2a 20 20 54 68 65 20 62 75 66 66 65 72  .. *  The buffer
a86e0 20 73 6f 75 72 63 65 0a 09 09 09 20 2a 20 20 40   source.... *  @
a86f0 74 79 70 65 20 20 7b 41 75 64 69 6f 42 75 66 66  type  {AudioBuff
a8700 65 72 53 6f 75 72 63 65 4e 6f 64 65 7d 0a 09 09  erSourceNode}...
a8710 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
a8720 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
a8730 69 73 2e 5f 73 6f 75 72 63 65 20 3d 20 74 68 69  is._source = thi
a8740 73 2e 63 6f 6e 74 65 78 74 2e 63 72 65 61 74 65  s.context.create
a8750 42 75 66 66 65 72 53 6f 75 72 63 65 28 29 3b 0a  BufferSource();.
a8760 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73  .        this._s
a8770 6f 75 72 63 65 2e 63 6f 6e 6e 65 63 74 28 74 68  ource.connect(th
a8780 69 73 2e 5f 67 61 69 6e 4e 6f 64 65 29 3b 0a 09  is._gainNode);..
a8790 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
a87a0 2a 20 20 54 68 65 20 70 6c 61 79 62 61 63 6b 52  *  The playbackR
a87b0 61 74 65 20 6f 66 20 74 68 65 20 62 75 66 66 65  ate of the buffe
a87c0 72 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b  r.... *  @type {
a87d0 50 6f 73 69 74 69 76 65 7d 0a 09 09 09 20 2a 20  Positive}.... * 
a87e0 20 40 73 69 67 6e 61 6c 0a 09 09 09 20 2a 2f 0a   @signal.... */.
a87f0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 70 6c  .        this.pl
a8800 61 79 62 61 63 6b 52 61 74 65 20 3d 20 6e 65 77  aybackRate = new
a8810 20 54 6f 6e 65 2e 50 61 72 61 6d 28 74 68 69 73   Tone.Param(this
a8820 2e 5f 73 6f 75 72 63 65 2e 70 6c 61 79 62 61 63  ._source.playbac
a8830 6b 52 61 74 65 2c 20 54 6f 6e 65 2e 54 79 70 65  kRate, Tone.Type
a8840 2e 50 6f 73 69 74 69 76 65 29 3b 0a 09 20 20 20  .Positive);..   
a8850 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20       /**.... *  
a8860 54 68 65 20 66 61 64 65 49 6e 20 74 69 6d 65 20  The fadeIn time 
a8870 6f 66 20 74 68 65 20 61 6d 70 6c 69 74 75 64 65  of the amplitude
a8880 20 65 6e 76 65 6c 6f 70 65 2e 0a 09 09 09 20 2a   envelope..... *
a8890 20 20 40 74 79 70 65 20 7b 54 69 6d 65 7d 0a 09    @type {Time}..
a88a0 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74  .. */..        t
a88b0 68 69 73 2e 66 61 64 65 49 6e 20 3d 20 6f 70 74  his.fadeIn = opt
a88c0 69 6f 6e 73 2e 66 61 64 65 49 6e 3b 0a 09 20 20  ions.fadeIn;..  
a88d0 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
a88e0 20 54 68 65 20 66 61 64 65 4f 75 74 20 74 69 6d   The fadeOut tim
a88f0 65 20 6f 66 20 74 68 65 20 61 6d 70 6c 69 74 75  e of the amplitu
a8900 64 65 20 65 6e 76 65 6c 6f 70 65 2e 0a 09 09 09  de envelope.....
a8910 20 2a 20 20 40 74 79 70 65 20 7b 54 69 6d 65 7d   *  @type {Time}
a8920 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
a8930 20 74 68 69 73 2e 66 61 64 65 4f 75 74 20 3d 20   this.fadeOut = 
a8940 6f 70 74 69 6f 6e 73 2e 66 61 64 65 4f 75 74 3b  options.fadeOut;
a8950 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
a8960 09 20 2a 20 20 54 68 65 20 76 61 6c 75 65 20 74  . *  The value t
a8970 68 61 74 20 74 68 65 20 62 75 66 66 65 72 20 72  hat the buffer r
a8980 61 6d 70 73 20 74 6f 0a 09 09 09 20 2a 20 20 40  amps to.... *  @
a8990 74 79 70 65 20 7b 47 61 69 6e 7d 0a 09 09 09 20  type {Gain}.... 
a89a0 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20  *  @private.... 
a89b0 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  */..        this
a89c0 2e 5f 67 61 69 6e 20 3d 20 31 3b 0a 09 20 20 20  ._gain = 1;..   
a89d0 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 54       /**.... * T
a89e0 68 65 20 6f 6e 65 6e 64 65 64 20 74 69 6d 65 6f  he onended timeo
a89f0 75 74 0a 09 09 09 20 2a 20 40 74 79 70 65 20 7b  ut.... * @type {
a8a00 4e 75 6d 62 65 72 7d 0a 09 09 09 20 2a 20 40 70  Number}.... * @p
a8a10 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20  rivate.... */.. 
a8a20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6f 6e 65         this._one
a8a30 6e 64 65 64 54 69 6d 65 6f 75 74 20 3d 20 2d 31  ndedTimeout = -1
a8a40 3b 0a 09 20 20 20 20 20 20 20 20 2f 2f 73 65 74  ;..        //set
a8a50 20 74 68 65 20 62 75 66 66 65 72 20 69 6e 69 74   the buffer init
a8a60 69 61 6c 6c 79 0a 09 20 20 20 20 20 20 20 20 69  ially..        i
a8a70 66 20 28 21 74 68 69 73 2e 69 73 55 6e 64 65 66  f (!this.isUndef
a8a80 28 6f 70 74 69 6f 6e 73 2e 62 75 66 66 65 72 29  (options.buffer)
a8a90 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
a8aa0 20 74 68 69 73 2e 62 75 66 66 65 72 20 3d 20 6f   this.buffer = o
a8ab0 70 74 69 6f 6e 73 2e 62 75 66 66 65 72 3b 0a 09  ptions.buffer;..
a8ac0 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
a8ad0 20 20 20 74 68 69 73 2e 6c 6f 6f 70 20 3d 20 6f     this.loop = o
a8ae0 70 74 69 6f 6e 73 2e 6c 6f 6f 70 3b 0a 09 20 20  ptions.loop;..  
a8af0 20 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65 2e 65    };..    Tone.e
a8b00 78 74 65 6e 64 28 54 6f 6e 65 2e 42 75 66 66 65  xtend(Tone.Buffe
a8b10 72 53 6f 75 72 63 65 29 3b 0a 09 20 20 20 20 2f  rSource);..    /
a8b20 2a 2a 0a 09 09 20 2a 20 20 54 68 65 20 64 65 66  **... *  The def
a8b30 61 75 6c 74 73 0a 09 09 20 2a 20 20 40 63 6f 6e  aults... *  @con
a8b40 73 74 0a 09 09 20 2a 20 20 40 74 79 70 65 20 20  st... *  @type  
a8b50 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a 09  {Object}... */..
a8b60 20 20 20 20 54 6f 6e 65 2e 42 75 66 66 65 72 53      Tone.BufferS
a8b70 6f 75 72 63 65 2e 64 65 66 61 75 6c 74 73 20 3d  ource.defaults =
a8b80 20 7b 0a 09 20 20 20 20 20 20 20 20 27 6f 6e 65   {..        'one
a8b90 6e 64 65 64 27 3a 20 54 6f 6e 65 2e 6e 6f 4f 70  nded': Tone.noOp
a8ba0 2c 0a 09 20 20 20 20 20 20 20 20 27 66 61 64 65  ,..        'fade
a8bb0 49 6e 27 3a 20 30 2c 0a 09 20 20 20 20 20 20 20  In': 0,..       
a8bc0 20 27 66 61 64 65 4f 75 74 27 3a 20 30 0a 09 20   'fadeOut': 0.. 
a8bd0 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09     };..    /**..
a8be0 09 20 2a 20 20 52 65 74 75 72 6e 73 20 74 68 65  . *  Returns the
a8bf0 20 70 6c 61 79 62 61 63 6b 20 73 74 61 74 65 20   playback state 
a8c00 6f 66 20 74 68 65 20 73 6f 75 72 63 65 2c 20 65  of the source, e
a8c10 69 74 68 65 72 20 22 73 74 61 72 74 65 64 22 20  ither "started" 
a8c20 6f 72 20 22 73 74 6f 70 70 65 64 22 2e 0a 09 09  or "stopped"....
a8c30 20 2a 20 20 40 74 79 70 65 20 7b 54 6f 6e 65 2e   *  @type {Tone.
a8c40 53 74 61 74 65 7d 0a 09 09 20 2a 20 20 40 72 65  State}... *  @re
a8c50 61 64 4f 6e 6c 79 0a 09 09 20 2a 20 20 40 6d 65  adOnly... *  @me
a8c60 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 42 75 66 66  mberOf Tone.Buff
a8c70 65 72 53 6f 75 72 63 65 23 0a 09 09 20 2a 20 20  erSource#... *  
a8c80 40 6e 61 6d 65 20 73 74 61 74 65 0a 09 09 20 2a  @name state... *
a8c90 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65  /..    Object.de
a8ca0 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e  fineProperty(Ton
a8cb0 65 2e 42 75 66 66 65 72 53 6f 75 72 63 65 2e 70  e.BufferSource.p
a8cc0 72 6f 74 6f 74 79 70 65 2c 20 27 73 74 61 74 65  rototype, 'state
a8cd0 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65  ', {..        ge
a8ce0 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b  t: function () {
a8cf0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 76 61  ..            va
a8d00 72 20 6e 6f 77 20 3d 20 74 68 69 73 2e 6e 6f 77  r now = this.now
a8d10 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ();..           
a8d20 20 69 66 20 28 74 68 69 73 2e 5f 73 74 61 72 74   if (this._start
a8d30 54 69 6d 65 20 21 3d 3d 20 2d 31 20 26 26 20 6e  Time !== -1 && n
a8d40 6f 77 20 3e 3d 20 74 68 69 73 2e 5f 73 74 61 72  ow >= this._star
a8d50 74 54 69 6d 65 20 26 26 20 6e 6f 77 20 3c 20 74  tTime && now < t
a8d60 68 69 73 2e 5f 73 74 6f 70 54 69 6d 65 29 20 7b  his._stopTime) {
a8d70 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a8d80 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e 53 74    return Tone.St
a8d90 61 74 65 2e 53 74 61 72 74 65 64 3b 0a 09 20 20  ate.Started;..  
a8da0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
a8db0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a8dc0 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65 2e      return Tone.
a8dd0 53 74 61 74 65 2e 53 74 6f 70 70 65 64 3b 0a 09  State.Stopped;..
a8de0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20              }.. 
a8df0 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29         }..    })
a8e00 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
a8e10 20 53 74 61 72 74 20 74 68 65 20 62 75 66 66 65   Start the buffe
a8e20 72 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20  r... *  @param  
a8e30 7b 54 69 6d 65 7d 20 5b 73 74 61 72 74 54 69 6d  {Time} [startTim
a8e40 65 3d 6e 6f 77 5d 20 57 68 65 6e 20 74 68 65 20  e=now] When the 
a8e50 70 6c 61 79 65 72 20 73 68 6f 75 6c 64 20 73 74  player should st
a8e60 61 72 74 2e 0a 09 09 20 2a 20 20 40 70 61 72 61  art.... *  @para
a8e70 6d 20 20 7b 54 69 6d 65 7d 20 5b 6f 66 66 73 65  m  {Time} [offse
a8e80 74 3d 30 5d 20 54 68 65 20 6f 66 66 73 65 74 20  t=0] The offset 
a8e90 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
a8ea0 6e 67 20 6f 66 20 74 68 65 20 73 61 6d 70 6c 65  ng of the sample
a8eb0 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 20  ... *           
a8ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a8ed0 20 20 20 20 20 20 74 6f 20 73 74 61 72 74 20 61        to start a
a8ee0 74 2e 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  t. ... *  @param
a8ef0 20 20 7b 54 69 6d 65 3d 7d 20 64 75 72 61 74 69    {Time=} durati
a8f00 6f 6e 20 48 6f 77 20 6c 6f 6e 67 20 74 68 65 20  on How long the 
a8f10 73 61 6d 70 6c 65 20 73 68 6f 75 6c 64 20 70 6c  sample should pl
a8f20 61 79 2e 20 49 66 20 6e 6f 20 64 75 72 61 74 69  ay. If no durati
a8f30 6f 6e 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  on... *         
a8f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a8f50 20 20 20 20 20 20 20 69 73 20 67 69 76 65 6e 2c         is given,
a8f60 20 69 74 20 77 69 6c 6c 20 64 65 66 61 75 6c 74   it will default
a8f70 20 74 6f 20 74 68 65 20 66 75 6c 6c 20 6c 65 6e   to the full len
a8f80 67 74 68 20 0a 09 09 20 2a 20 20 20 20 20 20 20  gth ... *       
a8f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a8fa0 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20           of the 
a8fb0 73 61 6d 70 6c 65 20 28 6d 69 6e 75 73 20 61 6e  sample (minus an
a8fc0 79 20 6f 66 66 73 65 74 29 0a 09 09 20 2a 20 20  y offset)... *  
a8fd0 40 70 61 72 61 6d 20 20 7b 47 61 69 6e 7d 20 20  @param  {Gain}  
a8fe0 5b 67 61 69 6e 3d 31 5d 20 20 54 68 65 20 67 61  [gain=1]  The ga
a8ff0 69 6e 20 74 6f 20 70 6c 61 79 20 74 68 65 20 62  in to play the b
a9000 75 66 66 65 72 20 62 61 63 6b 20 61 74 2e 0a 09  uffer back at...
a9010 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 54 69  . *  @param  {Ti
a9020 6d 65 3d 7d 20 20 66 61 64 65 49 6e 54 69 6d 65  me=}  fadeInTime
a9030 20 20 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 66    The optional f
a9040 61 64 65 49 6e 20 72 61 6d 70 20 74 69 6d 65 2e  adeIn ramp time.
a9050 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 20  ... *  @return  
a9060 7b 54 6f 6e 65 2e 42 75 66 66 65 72 53 6f 75 72  {Tone.BufferSour
a9070 63 65 7d 20 20 74 68 69 73 0a 09 09 20 2a 2f 0a  ce}  this... */.
a9080 09 20 20 20 20 54 6f 6e 65 2e 42 75 66 66 65 72  .    Tone.Buffer
a9090 53 6f 75 72 63 65 2e 70 72 6f 74 6f 74 79 70 65  Source.prototype
a90a0 2e 73 74 61 72 74 20 3d 20 66 75 6e 63 74 69 6f  .start = functio
a90b0 6e 20 28 74 69 6d 65 2c 20 6f 66 66 73 65 74 2c  n (time, offset,
a90c0 20 64 75 72 61 74 69 6f 6e 2c 20 67 61 69 6e 2c   duration, gain,
a90d0 20 66 61 64 65 49 6e 54 69 6d 65 29 20 7b 0a 09   fadeInTime) {..
a90e0 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73          if (this
a90f0 2e 5f 73 74 61 72 74 54 69 6d 65 20 21 3d 3d 20  ._startTime !== 
a9100 2d 31 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  -1) {..         
a9110 20 20 20 74 68 72 6f 77 20 6e 65 77 20 45 72 72     throw new Err
a9120 6f 72 28 27 54 6f 6e 65 2e 42 75 66 66 65 72 53  or('Tone.BufferS
a9130 6f 75 72 63 65 3a 20 63 61 6e 20 6f 6e 6c 79 20  ource: can only 
a9140 62 65 20 73 74 61 72 74 65 64 20 6f 6e 63 65 2e  be started once.
a9150 27 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  ');..        }..
a9160 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73          if (this
a9170 2e 62 75 66 66 65 72 29 20 7b 0a 09 20 20 20 20  .buffer) {..    
a9180 20 20 20 20 20 20 20 20 74 69 6d 65 20 3d 20 74          time = t
a9190 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28 74 69  his.toSeconds(ti
a91a0 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20  me);..          
a91b0 20 20 2f 2f 69 66 20 69 74 27 73 20 61 20 6c 6f    //if it's a lo
a91c0 6f 70 20 74 68 65 20 64 65 66 61 75 6c 74 20 6f  op the default o
a91d0 66 66 73 65 74 20 69 73 20 74 68 65 20 6c 6f 6f  ffset is the loo
a91e0 70 73 74 61 72 74 20 70 6f 69 6e 74 0a 09 20 20  pstart point..  
a91f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 68            if (th
a9200 69 73 2e 6c 6f 6f 70 29 20 7b 0a 09 20 20 20 20  is.loop) {..    
a9210 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73              offs
a9220 65 74 20 3d 20 74 68 69 73 2e 64 65 66 61 75 6c  et = this.defaul
a9230 74 41 72 67 28 6f 66 66 73 65 74 2c 20 74 68 69  tArg(offset, thi
a9240 73 2e 6c 6f 6f 70 53 74 61 72 74 29 3b 0a 09 20  s.loopStart);.. 
a9250 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
a9260 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e {..           
a9270 20 20 20 20 20 2f 2f 6f 74 68 65 72 77 69 73 65       //otherwise
a9280 20 74 68 65 20 64 65 66 61 75 6c 74 20 6f 66 66   the default off
a9290 73 65 74 20 69 73 20 30 0a 09 20 20 20 20 20 20  set is 0..      
a92a0 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74            offset
a92b0 20 3d 20 74 68 69 73 2e 64 65 66 61 75 6c 74 41   = this.defaultA
a92c0 72 67 28 6f 66 66 73 65 74 2c 20 30 29 3b 0a 09  rg(offset, 0);..
a92d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20              }.. 
a92e0 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65             offse
a92f0 74 20 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e  t = this.toSecon
a9300 64 73 28 6f 66 66 73 65 74 29 3b 0a 09 20 20 20  ds(offset);..   
a9310 20 20 20 20 20 20 20 20 20 2f 2f 74 68 65 20 76           //the v
a9320 61 6c 75 65 73 20 69 6e 20 73 65 63 6f 6e 64 73  alues in seconds
a9330 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 69  ..            ti
a9340 6d 65 20 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f  me = this.toSeco
a9350 6e 64 73 28 74 69 6d 65 29 3b 0a 09 20 20 20 20  nds(time);..    
a9360 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73 6f          this._so
a9370 75 72 63 65 2e 73 74 61 72 74 28 74 69 6d 65 2c  urce.start(time,
a9380 20 6f 66 66 73 65 74 29 3b 0a 09 20 20 20 20 20   offset);..     
a9390 20 20 20 20 20 20 20 67 61 69 6e 20 3d 20 74 68         gain = th
a93a0 69 73 2e 64 65 66 61 75 6c 74 41 72 67 28 67 61  is.defaultArg(ga
a93b0 69 6e 2c 20 31 29 3b 0a 09 20 20 20 20 20 20 20  in, 1);..       
a93c0 20 20 20 20 20 74 68 69 73 2e 5f 67 61 69 6e 20       this._gain 
a93d0 3d 20 67 61 69 6e 3b 0a 09 20 20 20 20 20 20 20  = gain;..       
a93e0 20 20 20 20 20 2f 2f 74 68 65 20 66 61 64 65 49       //the fadeI
a93f0 6e 20 74 69 6d 65 0a 09 20 20 20 20 20 20 20 20  n time..        
a9400 20 20 20 20 69 66 20 28 74 68 69 73 2e 69 73 55      if (this.isU
a9410 6e 64 65 66 28 66 61 64 65 49 6e 54 69 6d 65 29  ndef(fadeInTime)
a9420 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
a9430 20 20 20 20 20 66 61 64 65 49 6e 54 69 6d 65 20       fadeInTime 
a9440 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73  = this.toSeconds
a9450 28 74 68 69 73 2e 66 61 64 65 49 6e 29 3b 0a 09  (this.fadeIn);..
a9460 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
a9470 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  se {..          
a9480 20 20 20 20 20 20 66 61 64 65 49 6e 54 69 6d 65        fadeInTime
a9490 20 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64   = this.toSecond
a94a0 73 28 66 61 64 65 49 6e 54 69 6d 65 29 3b 0a 09  s(fadeInTime);..
a94b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20              }.. 
a94c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
a94d0 61 64 65 49 6e 54 69 6d 65 20 3e 20 30 29 20 7b  adeInTime > 0) {
a94e0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a94f0 20 20 74 68 69 73 2e 5f 67 61 69 6e 4e 6f 64 65    this._gainNode
a9500 2e 67 61 69 6e 2e 73 65 74 56 61 6c 75 65 41 74  .gain.setValueAt
a9510 54 69 6d 65 28 30 2c 20 74 69 6d 65 29 3b 0a 09  Time(0, time);..
a9520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a9530 74 68 69 73 2e 5f 67 61 69 6e 4e 6f 64 65 2e 67  this._gainNode.g
a9540 61 69 6e 2e 6c 69 6e 65 61 72 52 61 6d 70 54 6f  ain.linearRampTo
a9550 56 61 6c 75 65 41 74 54 69 6d 65 28 74 68 69 73  ValueAtTime(this
a9560 2e 5f 67 61 69 6e 2c 20 74 69 6d 65 20 2b 20 66  ._gain, time + f
a9570 61 64 65 49 6e 54 69 6d 65 29 3b 0a 09 20 20 20  adeInTime);..   
a9580 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else 
a9590 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a95a0 20 20 20 74 68 69 73 2e 5f 67 61 69 6e 4e 6f 64     this._gainNod
a95b0 65 2e 67 61 69 6e 2e 73 65 74 56 61 6c 75 65 41  e.gain.setValueA
a95c0 74 54 69 6d 65 28 67 61 69 6e 2c 20 74 69 6d 65  tTime(gain, time
a95d0 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
a95e0 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  }..            t
a95f0 68 69 73 2e 5f 73 74 61 72 74 54 69 6d 65 20 3d  his._startTime =
a9600 20 74 69 6d 65 20 2b 20 66 61 64 65 49 6e 54 69   time + fadeInTi
a9610 6d 65 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  me;..           
a9620 20 69 66 20 28 21 74 68 69 73 2e 69 73 55 6e 64   if (!this.isUnd
a9630 65 66 28 64 75 72 61 74 69 6f 6e 29 29 20 7b 0a  ef(duration)) {.
a9640 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a9650 20 64 75 72 61 74 69 6f 6e 20 3d 20 74 68 69 73   duration = this
a9660 2e 64 65 66 61 75 6c 74 41 72 67 28 64 75 72 61  .defaultArg(dura
a9670 74 69 6f 6e 2c 20 74 68 69 73 2e 62 75 66 66 65  tion, this.buffe
a9680 72 2e 64 75 72 61 74 69 6f 6e 20 2d 20 6f 66 66  r.duration - off
a9690 73 65 74 29 3b 0a 09 20 20 20 20 20 20 20 20 20  set);..         
a96a0 20 20 20 20 20 20 20 64 75 72 61 74 69 6f 6e 20         duration 
a96b0 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73  = this.toSeconds
a96c0 28 64 75 72 61 74 69 6f 6e 29 3b 0a 09 20 20 20  (duration);..   
a96d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
a96e0 73 2e 73 74 6f 70 28 74 69 6d 65 20 2b 20 64 75  s.stop(time + du
a96f0 72 61 74 69 6f 6e 20 2b 20 66 61 64 65 49 6e 54  ration + fadeInT
a9700 69 6d 65 2c 20 66 61 64 65 49 6e 54 69 6d 65 29  ime, fadeInTime)
a9710 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
a9720 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20  ..        }..   
a9730 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
a9740 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f  ;..    };..    /
a9750 2a 2a 0a 09 09 20 2a 20 20 53 74 6f 70 20 74 68  **... *  Stop th
a9760 65 20 62 75 66 66 65 72 2e 20 4f 70 74 69 6f 6e  e buffer. Option
a9770 61 6c 6c 79 20 61 64 64 20 61 20 72 61 6d 70 20  ally add a ramp 
a9780 74 69 6d 65 20 74 6f 20 66 61 64 65 20 74 68 65  time to fade the
a9790 20 0a 09 09 20 2a 20 20 62 75 66 66 65 72 20 6f   ... *  buffer o
a97a0 75 74 2e 20 0a 09 09 20 2a 20 20 40 70 61 72 61  ut. ... *  @para
a97b0 6d 20 20 7b 54 69 6d 65 3d 7d 20 20 74 69 6d 65  m  {Time=}  time
a97c0 20 20 20 20 20 20 20 20 20 54 68 65 20 74 69 6d           The tim
a97d0 65 20 74 68 65 20 62 75 66 66 65 72 20 73 68 6f  e the buffer sho
a97e0 75 6c 64 20 73 74 6f 70 2e 0a 09 09 20 2a 20 20  uld stop.... *  
a97f0 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 3d 7d 20  @param  {Time=} 
a9800 20 66 61 64 65 4f 75 74 54 69 6d 65 20 20 48 6f   fadeOutTime  Ho
a9810 77 20 6c 6f 6e 67 20 74 68 65 20 67 61 69 6e 20  w long the gain 
a9820 73 68 6f 75 6c 64 20 66 61 64 65 20 6f 75 74 20  should fade out 
a9830 66 6f 72 0a 09 09 20 2a 20 20 40 72 65 74 75 72  for... *  @retur
a9840 6e 20 20 7b 54 6f 6e 65 2e 42 75 66 66 65 72 53  n  {Tone.BufferS
a9850 6f 75 72 63 65 7d 20 20 74 68 69 73 0a 09 09 20  ource}  this... 
a9860 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 42 75 66  */..    Tone.Buf
a9870 66 65 72 53 6f 75 72 63 65 2e 70 72 6f 74 6f 74  ferSource.protot
a9880 79 70 65 2e 73 74 6f 70 20 3d 20 66 75 6e 63 74  ype.stop = funct
a9890 69 6f 6e 20 28 74 69 6d 65 2c 20 66 61 64 65 4f  ion (time, fadeO
a98a0 75 74 54 69 6d 65 29 20 7b 0a 09 20 20 20 20 20  utTime) {..     
a98b0 20 20 20 69 66 20 28 74 68 69 73 2e 62 75 66 66     if (this.buff
a98c0 65 72 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20  er) {..         
a98d0 20 20 20 74 69 6d 65 20 3d 20 74 68 69 73 2e 74     time = this.t
a98e0 6f 53 65 63 6f 6e 64 73 28 74 69 6d 65 29 3b 0a  oSeconds(time);.
a98f0 09 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 74  .            //t
a9900 68 65 20 66 61 64 65 4f 75 74 20 74 69 6d 65 0a  he fadeOut time.
a9910 09 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
a9920 28 74 68 69 73 2e 69 73 55 6e 64 65 66 28 66 61  (this.isUndef(fa
a9930 64 65 4f 75 74 54 69 6d 65 29 29 20 7b 0a 09 20  deOutTime)) {.. 
a9940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
a9950 61 64 65 4f 75 74 54 69 6d 65 20 3d 20 74 68 69  adeOutTime = thi
a9960 73 2e 74 6f 53 65 63 6f 6e 64 73 28 74 68 69 73  s.toSeconds(this
a9970 2e 66 61 64 65 4f 75 74 29 3b 0a 09 20 20 20 20  .fadeOut);..    
a9980 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
a9990 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a99a0 20 20 66 61 64 65 4f 75 74 54 69 6d 65 20 3d 20    fadeOutTime = 
a99b0 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28 66  this.toSeconds(f
a99c0 61 64 65 4f 75 74 54 69 6d 65 29 3b 0a 09 20 20  adeOutTime);..  
a99d0 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20            }..   
a99e0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73           this._s
a99f0 74 6f 70 54 69 6d 65 20 3d 20 74 69 6d 65 20 2b  topTime = time +
a9a00 20 66 61 64 65 4f 75 74 54 69 6d 65 3b 0a 09 20   fadeOutTime;.. 
a9a10 20 20 20 20 20 20 20 20 20 20 20 2f 2f 63 61 6e             //can
a9a20 63 65 6c 20 74 68 65 20 65 6e 64 20 63 75 72 76  cel the end curv
a9a30 65 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74  e..            t
a9a40 68 69 73 2e 5f 67 61 69 6e 4e 6f 64 65 2e 67 61  his._gainNode.ga
a9a50 69 6e 2e 63 61 6e 63 65 6c 53 63 68 65 64 75 6c  in.cancelSchedul
a9a60 65 64 56 61 6c 75 65 73 28 74 68 69 73 2e 5f 73  edValues(this._s
a9a70 74 61 72 74 54 69 6d 65 20 2b 20 74 68 69 73 2e  tartTime + this.
a9a80 73 61 6d 70 6c 65 54 69 6d 65 29 3b 0a 09 20 20  sampleTime);..  
a9a90 20 20 20 20 20 20 20 20 20 20 2f 2f 73 65 74 20            //set 
a9aa0 61 20 6e 65 77 20 6f 6e 65 0a 09 20 20 20 20 20  a new one..     
a9ab0 20 20 20 20 20 20 20 69 66 20 28 66 61 64 65 4f         if (fadeO
a9ac0 75 74 54 69 6d 65 20 3e 20 30 29 20 7b 0a 09 20  utTime > 0) {.. 
a9ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
a9ae0 68 69 73 2e 5f 67 61 69 6e 4e 6f 64 65 2e 67 61  his._gainNode.ga
a9af0 69 6e 2e 73 65 74 56 61 6c 75 65 41 74 54 69 6d  in.setValueAtTim
a9b00 65 28 74 68 69 73 2e 5f 67 61 69 6e 2c 20 74 69  e(this._gain, ti
a9b10 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20  me);..          
a9b20 20 20 20 20 20 20 74 68 69 73 2e 5f 67 61 69 6e        this._gain
a9b30 4e 6f 64 65 2e 67 61 69 6e 2e 6c 69 6e 65 61 72  Node.gain.linear
a9b40 52 61 6d 70 54 6f 56 61 6c 75 65 41 74 54 69 6d  RampToValueAtTim
a9b50 65 28 30 2c 20 74 69 6d 65 20 2b 20 66 61 64 65  e(0, time + fade
a9b60 4f 75 74 54 69 6d 65 29 3b 0a 09 20 20 20 20 20  OutTime);..     
a9b70 20 20 20 20 20 20 20 20 20 20 20 74 69 6d 65 20             time 
a9b80 2b 3d 20 66 61 64 65 4f 75 74 54 69 6d 65 3b 0a  += fadeOutTime;.
a9b90 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
a9ba0 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20  lse {..         
a9bb0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 67 61 69         this._gai
a9bc0 6e 4e 6f 64 65 2e 67 61 69 6e 2e 73 65 74 56 61  nNode.gain.setVa
a9bd0 6c 75 65 41 74 54 69 6d 65 28 30 2c 20 74 69 6d  lueAtTime(0, tim
a9be0 65 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e);..           
a9bf0 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   }..            
a9c00 2f 2f 20 66 69 78 20 66 6f 72 20 73 61 66 61 72  // fix for safar
a9c10 69 20 62 75 67 20 61 6e 64 20 6f 6c 64 20 46 46  i bug and old FF
a9c20 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
a9c30 20 28 21 74 68 69 73 2e 69 73 4e 75 6d 62 65 72   (!this.isNumber
a9c40 28 74 68 69 73 2e 5f 73 6f 75 72 63 65 2e 70 6c  (this._source.pl
a9c50 61 79 62 61 63 6b 53 74 61 74 65 29 20 7c 7c 20  aybackState) || 
a9c60 74 68 69 73 2e 5f 73 6f 75 72 63 65 2e 70 6c 61  this._source.pla
a9c70 79 62 61 63 6b 53 74 61 74 65 20 3d 3d 3d 20 32  ybackState === 2
a9c80 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
a9c90 20 20 20 20 20 74 68 69 73 2e 5f 73 6f 75 72 63       this._sourc
a9ca0 65 2e 73 74 6f 70 28 74 69 6d 65 29 3b 0a 09 20  e.stop(time);.. 
a9cb0 20 20 20 20 20 20 20 20 20 20 20 7d 0a 09 20 20             }..  
a9cc0 20 20 20 20 20 20 20 20 20 20 63 6c 65 61 72 54            clearT
a9cd0 69 6d 65 6f 75 74 28 74 68 69 73 2e 5f 6f 6e 65  imeout(this._one
a9ce0 6e 64 65 64 54 69 6d 65 6f 75 74 29 3b 0a 09 20  ndedTimeout);.. 
a9cf0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
a9d00 5f 6f 6e 65 6e 64 65 64 54 69 6d 65 6f 75 74 20  _onendedTimeout 
a9d10 3d 20 73 65 74 54 69 6d 65 6f 75 74 28 74 68 69  = setTimeout(thi
a9d20 73 2e 5f 6f 6e 65 6e 64 65 64 2e 62 69 6e 64 28  s._onended.bind(
a9d30 74 68 69 73 29 2c 20 28 74 68 69 73 2e 5f 73 74  this), (this._st
a9d40 6f 70 54 69 6d 65 20 2d 20 74 68 69 73 2e 6e 6f  opTime - this.no
a9d50 77 28 29 29 20 2a 20 31 30 30 30 29 3b 0a 09 20  w()) * 1000);.. 
a9d60 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
a9d70 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09    return this;..
a9d80 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
a9d90 09 09 20 2a 20 20 49 6e 74 65 72 6e 61 6c 20 63  .. *  Internal c
a9da0 61 6c 6c 62 61 63 6b 20 77 68 65 6e 20 74 68 65  allback when the
a9db0 20 62 75 66 66 65 72 20 69 73 20 65 6e 64 65 64   buffer is ended
a9dc0 2e 20 0a 09 09 20 2a 20 20 49 6e 76 6f 6b 65 73  . ... *  Invokes
a9dd0 20 60 6f 6e 65 6e 64 65 64 60 20 61 6e 64 20 64   `onended` and d
a9de0 69 73 70 6f 73 65 73 20 74 68 65 20 6e 6f 64 65  isposes the node
a9df0 2e 0a 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  .... *  @private
a9e00 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
a9e10 2e 42 75 66 66 65 72 53 6f 75 72 63 65 2e 70 72  .BufferSource.pr
a9e20 6f 74 6f 74 79 70 65 2e 5f 6f 6e 65 6e 64 65 64  ototype._onended
a9e30 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b   = function () {
a9e40 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f  ..        this.o
a9e50 6e 65 6e 64 65 64 28 74 68 69 73 29 3b 0a 09 20  nended(this);.. 
a9e60 20 20 20 20 20 20 20 74 68 69 73 2e 64 69 73 70         this.disp
a9e70 6f 73 65 28 29 3b 0a 09 20 20 20 20 7d 3b 0a 09  ose();..    };..
a9e80 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 49 66 20      /**... * If 
a9e90 6c 6f 6f 70 20 69 73 20 74 72 75 65 2c 20 74 68  loop is true, th
a9ea0 65 20 6c 6f 6f 70 20 77 69 6c 6c 20 73 74 61 72  e loop will star
a9eb0 74 20 61 74 20 74 68 69 73 20 70 6f 73 69 74 69  t at this positi
a9ec0 6f 6e 2e 20 0a 09 09 20 2a 20 40 6d 65 6d 62 65  on. ... * @membe
a9ed0 72 4f 66 20 54 6f 6e 65 2e 42 75 66 66 65 72 53  rOf Tone.BufferS
a9ee0 6f 75 72 63 65 23 0a 09 09 20 2a 20 40 74 79 70  ource#... * @typ
a9ef0 65 20 7b 54 69 6d 65 7d 0a 09 09 20 2a 20 40 6e  e {Time}... * @n
a9f00 61 6d 65 20 6c 6f 6f 70 53 74 61 72 74 0a 09 09  ame loopStart...
a9f10 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e   */..    Object.
a9f20 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54  defineProperty(T
a9f30 6f 6e 65 2e 42 75 66 66 65 72 53 6f 75 72 63 65  one.BufferSource
a9f40 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 6c 6f 6f  .prototype, 'loo
a9f50 70 53 74 61 72 74 27 2c 20 7b 0a 09 20 20 20 20  pStart', {..    
a9f60 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f      get: functio
a9f70 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
a9f80 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
a9f90 5f 73 6f 75 72 63 65 2e 6c 6f 6f 70 53 74 61 72  _source.loopStar
a9fa0 74 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09  t;..        },..
a9fb0 20 20 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e          set: fun
a9fc0 63 74 69 6f 6e 20 28 6c 6f 6f 70 53 74 61 72 74  ction (loopStart
a9fd0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
a9fe0 20 74 68 69 73 2e 5f 73 6f 75 72 63 65 2e 6c 6f   this._source.lo
a9ff0 6f 70 53 74 61 72 74 20 3d 20 74 68 69 73 2e 74  opStart = this.t
aa000 6f 53 65 63 6f 6e 64 73 28 6c 6f 6f 70 53 74 61  oSeconds(loopSta
aa010 72 74 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a  rt);..        }.
aa020 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a  .    });..    /*
aa030 2a 0a 09 09 20 2a 20 49 66 20 6c 6f 6f 70 20 69  *... * If loop i
aa040 73 20 74 72 75 65 2c 20 74 68 65 20 6c 6f 6f 70  s true, the loop
aa050 20 77 69 6c 6c 20 65 6e 64 20 61 74 20 74 68 69   will end at thi
aa060 73 20 70 6f 73 69 74 69 6f 6e 2e 0a 09 09 20 2a  s position.... *
aa070 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e   @memberOf Tone.
aa080 42 75 66 66 65 72 53 6f 75 72 63 65 23 0a 09 09  BufferSource#...
aa090 20 2a 20 40 74 79 70 65 20 7b 54 69 6d 65 7d 0a   * @type {Time}.
aa0a0 09 09 20 2a 20 40 6e 61 6d 65 20 6c 6f 6f 70 45  .. * @name loopE
aa0b0 6e 64 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62  nd... */..    Ob
aa0c0 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65  ject.definePrope
aa0d0 72 74 79 28 54 6f 6e 65 2e 42 75 66 66 65 72 53  rty(Tone.BufferS
aa0e0 6f 75 72 63 65 2e 70 72 6f 74 6f 74 79 70 65 2c  ource.prototype,
aa0f0 20 27 6c 6f 6f 70 45 6e 64 27 2c 20 7b 0a 09 20   'loopEnd', {.. 
aa100 20 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63         get: func
aa110 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20  tion () {..     
aa120 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
aa130 69 73 2e 5f 73 6f 75 72 63 65 2e 6c 6f 6f 70 45  is._source.loopE
aa140 6e 64 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a  nd;..        },.
aa150 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66 75  .        set: fu
aa160 6e 63 74 69 6f 6e 20 28 6c 6f 6f 70 45 6e 64 29  nction (loopEnd)
aa170 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
aa180 74 68 69 73 2e 5f 73 6f 75 72 63 65 2e 6c 6f 6f  this._source.loo
aa190 70 45 6e 64 20 3d 20 74 68 69 73 2e 74 6f 53 65  pEnd = this.toSe
aa1a0 63 6f 6e 64 73 28 6c 6f 6f 70 45 6e 64 29 3b 0a  conds(loopEnd);.
aa1b0 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
aa1c0 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  });..    /**... 
aa1d0 2a 20 54 68 65 20 61 75 64 69 6f 20 62 75 66 66  * The audio buff
aa1e0 65 72 20 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20  er belonging to 
aa1f0 74 68 65 20 70 6c 61 79 65 72 2e 20 0a 09 09 20  the player. ... 
aa200 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65  * @memberOf Tone
aa210 2e 42 75 66 66 65 72 53 6f 75 72 63 65 23 0a 09  .BufferSource#..
aa220 09 20 2a 20 40 74 79 70 65 20 7b 41 75 64 69 6f  . * @type {Audio
aa230 42 75 66 66 65 72 7d 0a 09 09 20 2a 20 40 6e 61  Buffer}... * @na
aa240 6d 65 20 62 75 66 66 65 72 0a 09 09 20 2a 2f 0a  me buffer... */.
aa250 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69  .    Object.defi
aa260 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e  neProperty(Tone.
aa270 42 75 66 66 65 72 53 6f 75 72 63 65 2e 70 72 6f  BufferSource.pro
aa280 74 6f 74 79 70 65 2c 20 27 62 75 66 66 65 72 27  totype, 'buffer'
aa290 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74  , {..        get
aa2a0 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  : function () {.
aa2b0 09 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
aa2c0 28 74 68 69 73 2e 5f 73 6f 75 72 63 65 29 20 7b  (this._source) {
aa2d0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aa2e0 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 73    return this._s
aa2f0 6f 75 72 63 65 2e 62 75 66 66 65 72 3b 0a 09 20  ource.buffer;.. 
aa300 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
aa310 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e {..           
aa320 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
aa330 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
aa340 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20  ..        },..  
aa350 20 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74        set: funct
aa360 69 6f 6e 20 28 62 75 66 66 65 72 29 20 7b 0a 09  ion (buffer) {..
aa370 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
aa380 62 75 66 66 65 72 20 69 6e 73 74 61 6e 63 65 6f  buffer instanceo
aa390 66 20 54 6f 6e 65 2e 42 75 66 66 65 72 29 20 7b  f Tone.Buffer) {
aa3a0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aa3b0 20 20 74 68 69 73 2e 5f 73 6f 75 72 63 65 2e 62    this._source.b
aa3c0 75 66 66 65 72 20 3d 20 62 75 66 66 65 72 2e 67  uffer = buffer.g
aa3d0 65 74 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20  et();..         
aa3e0 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20     } else {..   
aa3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
aa400 73 2e 5f 73 6f 75 72 63 65 2e 62 75 66 66 65 72  s._source.buffer
aa410 20 3d 20 62 75 66 66 65 72 3b 0a 09 20 20 20 20   = buffer;..    
aa420 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
aa430 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20     }..    });.. 
aa440 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 49 66 20 74     /**... * If t
aa450 68 65 20 62 75 66 66 65 72 20 73 68 6f 75 6c 64  he buffer should
aa460 20 6c 6f 6f 70 20 6f 6e 63 65 20 69 74 27 73 20   loop once it's 
aa470 6f 76 65 72 2e 20 0a 09 09 20 2a 20 40 6d 65 6d  over. ... * @mem
aa480 62 65 72 4f 66 20 54 6f 6e 65 2e 42 75 66 66 65  berOf Tone.Buffe
aa490 72 53 6f 75 72 63 65 23 0a 09 09 20 2a 20 40 74  rSource#... * @t
aa4a0 79 70 65 20 7b 62 6f 6f 6c 65 61 6e 7d 0a 09 09  ype {boolean}...
aa4b0 20 2a 20 40 6e 61 6d 65 20 6c 6f 6f 70 0a 09 09   * @name loop...
aa4c0 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e   */..    Object.
aa4d0 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54  defineProperty(T
aa4e0 6f 6e 65 2e 42 75 66 66 65 72 53 6f 75 72 63 65  one.BufferSource
aa4f0 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 6c 6f 6f  .prototype, 'loo
aa500 70 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67  p', {..        g
aa510 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  et: function () 
aa520 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
aa530 65 74 75 72 6e 20 74 68 69 73 2e 5f 73 6f 75 72  eturn this._sour
aa540 63 65 2e 6c 6f 6f 70 3b 0a 09 20 20 20 20 20 20  ce.loop;..      
aa550 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65    },..        se
aa560 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 6c 6f 6f  t: function (loo
aa570 70 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  p) {..          
aa580 20 20 74 68 69 73 2e 5f 73 6f 75 72 63 65 2e 6c    this._source.l
aa590 6f 6f 70 20 3d 20 6c 6f 6f 70 3b 0a 09 20 20 20  oop = loop;..   
aa5a0 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a       }..    });.
aa5b0 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43  .    /**... *  C
aa5c0 6c 65 61 6e 20 75 70 2e 0a 09 09 20 2a 20 20 40  lean up.... *  @
aa5d0 72 65 74 75 72 6e 20 20 7b 54 6f 6e 65 2e 42 75  return  {Tone.Bu
aa5e0 66 66 65 72 53 6f 75 72 63 65 7d 20 20 74 68 69  fferSource}  thi
aa5f0 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e  s... */..    Ton
aa600 65 2e 42 75 66 66 65 72 53 6f 75 72 63 65 2e 70  e.BufferSource.p
aa610 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65  rototype.dispose
aa620 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b   = function () {
aa630 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f  ..        this.o
aa640 6e 65 6e 64 65 64 20 3d 20 6e 75 6c 6c 3b 0a 09  nended = null;..
aa650 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73          if (this
aa660 2e 5f 73 6f 75 72 63 65 29 20 7b 0a 09 20 20 20  ._source) {..   
aa670 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73           this._s
aa680 6f 75 72 63 65 2e 64 69 73 63 6f 6e 6e 65 63 74  ource.disconnect
aa690 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ();..           
aa6a0 20 74 68 69 73 2e 5f 73 6f 75 72 63 65 20 3d 20   this._source = 
aa6b0 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 7d  null;..        }
aa6c0 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 74 68  ..        if (th
aa6d0 69 73 2e 5f 67 61 69 6e 4e 6f 64 65 29 20 7b 0a  is._gainNode) {.
aa6e0 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
aa6f0 73 2e 5f 67 61 69 6e 4e 6f 64 65 2e 64 69 73 70  s._gainNode.disp
aa700 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ose();..        
aa710 20 20 20 20 74 68 69 73 2e 5f 67 61 69 6e 4e 6f      this._gainNo
aa720 64 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20  de = null;..    
aa730 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 74      }..        t
aa740 68 69 73 2e 5f 73 74 61 72 74 54 69 6d 65 20 3d  his._startTime =
aa750 20 2d 31 3b 0a 09 20 20 20 20 20 20 20 20 74 68   -1;..        th
aa760 69 73 2e 70 6c 61 79 62 61 63 6b 52 61 74 65 20  is.playbackRate 
aa770 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
aa780 20 74 68 69 73 2e 6f 75 74 70 75 74 20 3d 20 6e   this.output = n
aa790 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 63 6c  ull;..        cl
aa7a0 65 61 72 54 69 6d 65 6f 75 74 28 74 68 69 73 2e  earTimeout(this.
aa7b0 5f 6f 6e 65 6e 64 65 64 54 69 6d 65 6f 75 74 29  _onendedTimeout)
aa7c0 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
aa7d0 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a  n this;..    };.
aa7e0 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65  .    return Tone
aa7f0 2e 42 75 66 66 65 72 53 6f 75 72 63 65 3b 0a 09  .BufferSource;..
aa800 7d 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63  });..Module(func
aa810 74 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20  tion (Tone) {.. 
aa820 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 40 63 6c     /**... *  @cl
aa830 61 73 73 20 54 6f 6e 65 2e 4d 75 6c 74 69 50 6c  ass Tone.MultiPl
aa840 61 79 65 72 20 69 73 20 77 65 6c 6c 20 73 75 69  ayer is well sui
aa850 74 65 64 20 66 6f 72 20 6f 6e 65 2d 73 68 6f 74  ted for one-shot
aa860 73 2c 20 6d 75 6c 74 69 2d 73 61 6d 70 6c 65 64  s, multi-sampled
aa870 20 69 6e 73 74 72 75 6d 65 6e 74 73 0a 09 09 20   instruments... 
aa880 2a 20 20 20 20 20 20 20 20 20 6f 72 20 61 6e 79  *         or any
aa890 20 74 69 6d 65 20 79 6f 75 20 6e 65 65 64 20 74   time you need t
aa8a0 6f 20 70 6c 61 79 20 61 20 62 75 6e 63 68 20 6f  o play a bunch o
aa8b0 66 20 61 75 64 69 6f 20 62 75 66 66 65 72 73 2e  f audio buffers.
aa8c0 20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20   ... *  @param  
aa8d0 7b 4f 62 6a 65 63 74 7c 41 72 72 61 79 7c 54 6f  {Object|Array|To
aa8e0 6e 65 2e 42 75 66 66 65 72 73 7d 20 20 62 75 66  ne.Buffers}  buf
aa8f0 66 65 72 73 20 20 54 68 65 20 62 75 66 66 65 72  fers  The buffer
aa900 73 20 77 68 69 63 68 20 61 72 65 20 61 76 61 69  s which are avai
aa910 6c 61 62 6c 65 0a 09 09 20 2a 20 20 20 20 20 20  lable... *      
aa920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa940 20 20 20 20 20 20 20 20 20 20 74 6f 20 74 68 65            to the
aa950 20 4d 75 6c 74 69 50 6c 61 79 65 72 0a 09 09 20   MultiPlayer... 
aa960 2a 20 20 40 70 61 72 61 6d 20 7b 46 75 6e 63 74  *  @param {Funct
aa970 69 6f 6e 7d 20 6f 6e 6c 6f 61 64 20 54 68 65 20  ion} onload The 
aa980 63 61 6c 6c 62 61 63 6b 20 74 6f 20 69 6e 76 6f  callback to invo
aa990 6b 65 20 77 68 65 6e 20 61 6c 6c 20 6f 66 20 74  ke when all of t
aa9a0 68 65 20 62 75 66 66 65 72 73 20 61 72 65 20 6c  he buffers are l
aa9b0 6f 61 64 65 64 2e 0a 09 09 20 2a 20 20 40 65 78  oaded.... *  @ex
aa9c0 74 65 6e 64 73 20 7b 54 6f 6e 65 7d 0a 09 09 20  tends {Tone}... 
aa9d0 2a 20 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a  *  @example... *
aa9e0 20 76 61 72 20 6d 75 6c 74 69 50 6c 61 79 65 72   var multiPlayer
aa9f0 20 3d 20 6e 65 77 20 4d 75 6c 74 69 50 6c 61 79   = new MultiPlay
aaa00 65 72 28 7b 0a 09 09 20 2a 20 09 22 6b 69 63 6b  er({... * ."kick
aaa10 22 20 3a 20 22 70 61 74 68 2f 74 6f 2f 6b 69 63  " : "path/to/kic
aaa20 6b 2e 6d 70 33 22 2c 0a 09 09 20 2a 20 09 22 73  k.mp3",... * ."s
aaa30 6e 61 72 65 22 20 3a 20 22 70 61 74 68 2f 74 6f  nare" : "path/to
aaa40 2f 73 6e 61 72 65 2e 6d 70 33 22 2c 0a 09 09 20  /snare.mp3",... 
aaa50 2a 20 7d 2c 20 66 75 6e 63 74 69 6f 6e 28 29 7b  * }, function(){
aaa60 0a 09 09 20 2a 20 09 6d 75 6c 74 69 50 6c 61 79  ... * .multiPlay
aaa70 65 72 2e 73 74 61 72 74 28 22 6b 69 63 6b 22 29  er.start("kick")
aaa80 3b 0a 09 09 20 2a 20 7d 29 3b 0a 09 09 20 2a 20  ;... * });... * 
aaa90 20 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 2f   @example... * /
aaaa0 2f 63 61 6e 20 61 6c 73 6f 20 73 74 6f 72 65 20  /can also store 
aaab0 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 61 6e  the values in an
aaac0 20 61 72 72 61 79 0a 09 09 20 2a 20 76 61 72 20   array... * var 
aaad0 6d 75 6c 74 69 50 6c 61 79 65 72 20 3d 20 6e 65  multiPlayer = ne
aaae0 77 20 4d 75 6c 74 69 50 6c 61 79 65 72 28 5b 22  w MultiPlayer(["
aaaf0 70 61 74 68 2f 74 6f 2f 6b 69 63 6b 2e 6d 70 33  path/to/kick.mp3
aab00 22 2c 20 22 70 61 74 68 2f 74 6f 2f 73 6e 61 72  ", "path/to/snar
aab10 65 2e 6d 70 33 22 5d 2c 20 0a 09 09 20 2a 20 66  e.mp3"], ... * f
aab20 75 6e 63 74 69 6f 6e 28 29 7b 0a 09 09 20 2a 20  unction(){... * 
aab30 09 2f 2f 69 66 20 61 6e 20 61 72 72 61 79 20 69  .//if an array i
aab40 73 20 70 61 73 73 65 64 20 69 6e 2c 20 74 68 65  s passed in, the
aab50 20 73 61 6d 70 6c 65 73 20 61 72 65 20 72 65 66   samples are ref
aab60 65 72 65 6e 63 65 64 20 74 6f 20 62 79 20 69 6e  erenced to by in
aab70 64 65 78 0a 09 09 20 2a 20 09 6d 75 6c 74 69 50  dex... * .multiP
aab80 6c 61 79 65 72 2e 73 74 61 72 74 28 31 29 3b 0a  layer.start(1);.
aab90 09 09 20 2a 20 7d 29 3b 0a 09 09 20 2a 2f 0a 09  .. * });... */..
aaba0 20 20 20 20 54 6f 6e 65 2e 4d 75 6c 74 69 50 6c      Tone.MultiPl
aabb0 61 79 65 72 20 3d 20 66 75 6e 63 74 69 6f 6e 20  ayer = function 
aabc0 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 76 61  () {..        va
aabd0 72 20 6f 70 74 69 6f 6e 73 20 3d 20 74 68 69 73  r options = this
aabe0 2e 6f 70 74 69 6f 6e 73 4f 62 6a 65 63 74 28 61  .optionsObject(a
aabf0 72 67 75 6d 65 6e 74 73 2c 20 5b 0a 09 20 20 20  rguments, [..   
aac00 20 20 20 20 20 20 20 20 20 27 75 72 6c 73 27 2c           'urls',
aac10 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 27 6f  ..            'o
aac20 6e 6c 6f 61 64 27 0a 09 20 20 20 20 20 20 20 20  nload'..        
aac30 5d 2c 20 54 6f 6e 65 2e 4d 75 6c 74 69 50 6c 61  ], Tone.MultiPla
aac40 79 65 72 2e 64 65 66 61 75 6c 74 73 29 3b 0a 09  yer.defaults);..
aac50 20 20 20 20 20 20 20 20 69 66 20 28 6f 70 74 69          if (opti
aac60 6f 6e 73 2e 75 72 6c 73 20 69 6e 73 74 61 6e 63  ons.urls instanc
aac70 65 6f 66 20 54 6f 6e 65 2e 42 75 66 66 65 72 73  eof Tone.Buffers
aac80 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
aac90 20 2f 2a 2a 0a 09 09 09 09 20 2a 20 20 41 6c 6c   /**..... *  All
aaca0 20 74 68 65 20 62 75 66 66 65 72 73 20 62 65 6c   the buffers bel
aacb0 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65 20 70 6c  onging to the pl
aacc0 61 79 65 72 2e 0a 09 09 09 09 20 2a 20 20 40 74  ayer...... *  @t
aacd0 79 70 65 20 20 7b 54 6f 6e 65 2e 42 75 66 66 65  ype  {Tone.Buffe
aace0 72 73 7d 0a 09 09 09 09 20 2a 2f 0a 09 20 20 20  rs}..... */..   
aacf0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 62 75           this.bu
aad00 66 66 65 72 73 20 3d 20 6f 70 74 69 6f 6e 73 2e  ffers = options.
aad10 75 72 6c 73 3b 0a 09 20 20 20 20 20 20 20 20 7d  urls;..        }
aad20 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20   else {..       
aad30 20 20 20 20 20 74 68 69 73 2e 62 75 66 66 65 72       this.buffer
aad40 73 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 42 75 66  s = new Tone.Buf
aad50 66 65 72 73 28 6f 70 74 69 6f 6e 73 2e 75 72 6c  fers(options.url
aad60 73 2c 20 6f 70 74 69 6f 6e 73 2e 6f 6e 6c 6f 61  s, options.onloa
aad70 64 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09  d);..        }..
aad80 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
aad90 2a 20 20 4b 65 65 70 73 20 74 72 61 63 6b 20 6f  *  Keeps track o
aada0 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  f the currently 
aadb0 70 6c 61 79 69 6e 67 20 73 6f 75 72 63 65 73 2e  playing sources.
aadc0 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 20 7b  .... *  @type  {
aadd0 4f 62 6a 65 63 74 7d 0a 09 09 09 20 2a 20 20 40  Object}.... *  @
aade0 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
aadf0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 61 63          this._ac
aae00 74 69 76 65 53 6f 75 72 63 65 73 20 3d 20 7b 7d  tiveSources = {}
aae10 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09  ;..        /**..
aae20 09 09 20 2a 20 20 54 68 65 20 66 61 64 65 20 69  .. *  The fade i
aae30 6e 20 65 6e 76 65 6c 6f 70 65 20 77 68 69 63 68  n envelope which
aae40 20 69 73 20 61 70 70 6c 69 65 64 0a 09 09 09 20   is applied.... 
aae50 2a 20 20 74 6f 20 74 68 65 20 62 65 67 69 6e 6e  *  to the beginn
aae60 69 6e 67 20 6f 66 20 74 68 65 20 42 75 66 66 65  ing of the Buffe
aae70 72 53 6f 75 72 63 65 0a 09 09 09 20 2a 20 20 40  rSource.... *  @
aae80 74 79 70 65 20 20 7b 54 69 6d 65 7d 0a 09 09 09  type  {Time}....
aae90 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69   */..        thi
aaea0 73 2e 66 61 64 65 49 6e 20 3d 20 6f 70 74 69 6f  s.fadeIn = optio
aaeb0 6e 73 2e 66 61 64 65 49 6e 3b 0a 09 20 20 20 20  ns.fadeIn;..    
aaec0 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54      /**.... *  T
aaed0 68 65 20 66 61 64 65 20 6f 75 74 20 65 6e 76 65  he fade out enve
aaee0 6c 6f 70 65 20 77 68 69 63 68 20 69 73 20 61 70  lope which is ap
aaef0 70 6c 69 65 64 0a 09 09 09 20 2a 20 20 74 6f 20  plied.... *  to 
aaf00 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 42  the end of the B
aaf10 75 66 66 65 72 53 6f 75 72 63 65 0a 09 09 09 20  ufferSource.... 
aaf20 2a 20 20 40 74 79 70 65 20 20 7b 54 69 6d 65 7d  *  @type  {Time}
aaf30 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
aaf40 20 74 68 69 73 2e 66 61 64 65 4f 75 74 20 3d 20   this.fadeOut = 
aaf50 6f 70 74 69 6f 6e 73 2e 66 61 64 65 4f 75 74 3b  options.fadeOut;
aaf60 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09  ..        /**...
aaf70 09 20 2a 20 20 54 68 65 20 6f 75 74 70 75 74 20  . *  The output 
aaf80 76 6f 6c 75 6d 65 20 6e 6f 64 65 0a 09 09 09 20  volume node.... 
aaf90 2a 20 20 40 74 79 70 65 20 20 7b 54 6f 6e 65 2e  *  @type  {Tone.
aafa0 56 6f 6c 75 6d 65 7d 0a 09 09 09 20 2a 20 20 40  Volume}.... *  @
aafb0 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09  private.... */..
aafc0 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 76 6f          this._vo
aafd0 6c 75 6d 65 20 3d 20 74 68 69 73 2e 6f 75 74 70  lume = this.outp
aafe0 75 74 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 56 6f  ut = new Tone.Vo
aaff0 6c 75 6d 65 28 6f 70 74 69 6f 6e 73 2e 76 6f 6c  lume(options.vol
ab000 75 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  ume);..        /
ab010 2a 2a 0a 09 09 09 20 2a 20 54 68 65 20 76 6f 6c  **.... * The vol
ab020 75 6d 65 20 6f 66 20 74 68 65 20 6f 75 74 70 75  ume of the outpu
ab030 74 20 69 6e 20 64 65 63 69 62 65 6c 73 2e 0a 09  t in decibels...
ab040 09 09 20 2a 20 40 74 79 70 65 20 7b 44 65 63 69  .. * @type {Deci
ab050 62 65 6c 73 7d 0a 09 09 09 20 2a 20 40 73 69 67  bels}.... * @sig
ab060 6e 61 6c 0a 09 09 09 20 2a 20 40 65 78 61 6d 70  nal.... * @examp
ab070 6c 65 0a 09 09 09 20 2a 20 73 6f 75 72 63 65 2e  le.... * source.
ab080 76 6f 6c 75 6d 65 2e 76 61 6c 75 65 20 3d 20 2d  volume.value = -
ab090 36 3b 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  6;.... */..     
ab0a0 20 20 20 74 68 69 73 2e 76 6f 6c 75 6d 65 20 3d     this.volume =
ab0b0 20 74 68 69 73 2e 5f 76 6f 6c 75 6d 65 2e 76 6f   this._volume.vo
ab0c0 6c 75 6d 65 3b 0a 09 20 20 20 20 20 20 20 20 74  lume;..        t
ab0d0 68 69 73 2e 5f 72 65 61 64 4f 6e 6c 79 28 27 76  his._readOnly('v
ab0e0 6f 6c 75 6d 65 27 29 3b 0a 09 20 20 20 20 20 20  olume');..      
ab0f0 20 20 2f 2f 6d 61 6b 65 20 74 68 65 20 6f 75 74    //make the out
ab100 70 75 74 20 65 78 70 6c 69 63 69 74 6c 79 20 73  put explicitly s
ab110 74 65 72 65 6f 0a 09 20 20 20 20 20 20 20 20 74  tereo..        t
ab120 68 69 73 2e 5f 76 6f 6c 75 6d 65 2e 6f 75 74 70  his._volume.outp
ab130 75 74 2e 6f 75 74 70 75 74 2e 63 68 61 6e 6e 65  ut.output.channe
ab140 6c 43 6f 75 6e 74 20 3d 20 32 3b 0a 09 20 20 20  lCount = 2;..   
ab150 20 20 20 20 20 74 68 69 73 2e 5f 76 6f 6c 75 6d       this._volum
ab160 65 2e 6f 75 74 70 75 74 2e 6f 75 74 70 75 74 2e  e.output.output.
ab170 63 68 61 6e 6e 65 6c 43 6f 75 6e 74 4d 6f 64 65  channelCountMode
ab180 20 3d 20 27 65 78 70 6c 69 63 69 74 27 3b 0a 09   = 'explicit';..
ab190 20 20 20 20 20 20 20 20 2f 2f 6d 75 74 65 20 69          //mute i
ab1a0 6e 69 74 69 61 6c 6c 79 0a 09 20 20 20 20 20 20  nitially..      
ab1b0 20 20 74 68 69 73 2e 6d 75 74 65 20 3d 20 6f 70    this.mute = op
ab1c0 74 69 6f 6e 73 2e 6d 75 74 65 3b 0a 09 20 20 20  tions.mute;..   
ab1d0 20 7d 3b 0a 09 20 20 20 20 54 6f 6e 65 2e 65 78   };..    Tone.ex
ab1e0 74 65 6e 64 28 54 6f 6e 65 2e 4d 75 6c 74 69 50  tend(Tone.MultiP
ab1f0 6c 61 79 65 72 2c 20 54 6f 6e 65 2e 53 6f 75 72  layer, Tone.Sour
ab200 63 65 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09  ce);..    /**...
ab210 20 2a 20 20 54 68 65 20 64 65 66 61 75 6c 74 73   *  The defaults
ab220 0a 09 09 20 2a 20 20 40 74 79 70 65 20 20 7b 4f  ... *  @type  {O
ab230 62 6a 65 63 74 7d 0a 09 09 20 2a 2f 0a 09 20 20  bject}... */..  
ab240 20 20 54 6f 6e 65 2e 4d 75 6c 74 69 50 6c 61 79    Tone.MultiPlay
ab250 65 72 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b 0a  er.defaults = {.
ab260 09 20 20 20 20 20 20 20 20 27 6f 6e 6c 6f 61 64  .        'onload
ab270 27 3a 20 54 6f 6e 65 2e 6e 6f 4f 70 2c 0a 09 20  ': Tone.noOp,.. 
ab280 20 20 20 20 20 20 20 27 66 61 64 65 49 6e 27 3a         'fadeIn':
ab290 20 30 2c 0a 09 20 20 20 20 20 20 20 20 27 66 61   0,..        'fa
ab2a0 64 65 4f 75 74 27 3a 20 30 0a 09 20 20 20 20 7d  deOut': 0..    }
ab2b0 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
ab2c0 4d 61 6b 65 20 74 68 65 20 73 6f 75 72 63 65 20  Make the source 
ab2d0 66 72 6f 6d 20 74 68 65 20 62 75 66 66 65 72 6e  from the buffern
ab2e0 61 6d 65 0a 09 09 20 2a 20 40 70 61 72 61 6d 20  ame... * @param 
ab2f0 20 7b 53 74 72 69 6e 67 7d 20 62 75 66 66 65 72   {String} buffer
ab300 4e 61 6d 65 0a 09 09 20 2a 20 40 72 65 74 75 72  Name... * @retur
ab310 6e 20 7b 54 6f 6e 65 2e 42 75 66 66 65 72 53 6f  n {Tone.BufferSo
ab320 75 72 63 65 7d 0a 09 09 20 2a 20 40 70 72 69 76  urce}... * @priv
ab330 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  ate... */..    T
ab340 6f 6e 65 2e 4d 75 6c 74 69 50 6c 61 79 65 72 2e  one.MultiPlayer.
ab350 70 72 6f 74 6f 74 79 70 65 2e 5f 6d 61 6b 65 53  prototype._makeS
ab360 6f 75 72 63 65 20 3d 20 66 75 6e 63 74 69 6f 6e  ource = function
ab370 20 28 62 75 66 66 65 72 4e 61 6d 65 29 20 7b 0a   (bufferName) {.
ab380 09 20 20 20 20 20 20 20 20 76 61 72 20 62 75 66  .        var buf
ab390 66 65 72 3b 0a 09 20 20 20 20 20 20 20 20 69 66  fer;..        if
ab3a0 20 28 74 68 69 73 2e 69 73 53 74 72 69 6e 67 28   (this.isString(
ab3b0 62 75 66 66 65 72 4e 61 6d 65 29 20 7c 7c 20 74  bufferName) || t
ab3c0 68 69 73 2e 69 73 4e 75 6d 62 65 72 28 62 75 66  his.isNumber(buf
ab3d0 66 65 72 4e 61 6d 65 29 29 20 7b 0a 09 20 20 20  ferName)) {..   
ab3e0 20 20 20 20 20 20 20 20 20 62 75 66 66 65 72 20           buffer 
ab3f0 3d 20 74 68 69 73 2e 62 75 66 66 65 72 73 2e 67  = this.buffers.g
ab400 65 74 28 62 75 66 66 65 72 4e 61 6d 65 29 2e 67  et(bufferName).g
ab410 65 74 28 29 3b 0a 09 20 20 20 20 20 20 20 20 7d  et();..        }
ab420 20 65 6c 73 65 20 69 66 20 28 62 75 66 66 65 72   else if (buffer
ab430 4e 61 6d 65 20 69 6e 73 74 61 6e 63 65 6f 66 20  Name instanceof 
ab440 54 6f 6e 65 2e 42 75 66 66 65 72 29 20 7b 0a 09  Tone.Buffer) {..
ab450 20 20 20 20 20 20 20 20 20 20 20 20 62 75 66 66              buff
ab460 65 72 20 3d 20 62 75 66 66 65 72 4e 61 6d 65 2e  er = bufferName.
ab470 67 65 74 28 29 3b 0a 09 20 20 20 20 20 20 20 20  get();..        
ab480 7d 20 65 6c 73 65 20 69 66 20 28 62 75 66 66 65  } else if (buffe
ab490 72 4e 61 6d 65 20 69 6e 73 74 61 6e 63 65 6f 66  rName instanceof
ab4a0 20 41 75 64 69 6f 42 75 66 66 65 72 29 20 7b 0a   AudioBuffer) {.
ab4b0 09 20 20 20 20 20 20 20 20 20 20 20 20 62 75 66  .            buf
ab4c0 66 65 72 20 3d 20 62 75 66 66 65 72 4e 61 6d 65  fer = bufferName
ab4d0 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20  ;..        }..  
ab4e0 20 20 20 20 20 20 76 61 72 20 73 6f 75 72 63 65        var source
ab4f0 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 42 75 66 66   = new Tone.Buff
ab500 65 72 53 6f 75 72 63 65 28 62 75 66 66 65 72 29  erSource(buffer)
ab510 2e 63 6f 6e 6e 65 63 74 28 74 68 69 73 2e 6f 75  .connect(this.ou
ab520 74 70 75 74 29 3b 0a 09 20 20 20 20 20 20 20 20  tput);..        
ab530 69 66 20 28 21 74 68 69 73 2e 5f 61 63 74 69 76  if (!this._activ
ab540 65 53 6f 75 72 63 65 73 2e 68 61 73 4f 77 6e 50  eSources.hasOwnP
ab550 72 6f 70 65 72 74 79 28 62 75 66 66 65 72 4e 61  roperty(bufferNa
ab560 6d 65 29 29 20 7b 0a 09 20 20 20 20 20 20 20 20  me)) {..        
ab570 20 20 20 20 74 68 69 73 2e 5f 61 63 74 69 76 65      this._active
ab580 53 6f 75 72 63 65 73 5b 62 75 66 66 65 72 4e 61  Sources[bufferNa
ab590 6d 65 5d 20 3d 20 5b 5d 3b 0a 09 20 20 20 20 20  me] = [];..     
ab5a0 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 74 68     }..        th
ab5b0 69 73 2e 5f 61 63 74 69 76 65 53 6f 75 72 63 65  is._activeSource
ab5c0 73 5b 62 75 66 66 65 72 4e 61 6d 65 5d 2e 70 75  s[bufferName].pu
ab5d0 73 68 28 73 6f 75 72 63 65 29 3b 0a 09 20 20 20  sh(source);..   
ab5e0 20 20 20 20 20 72 65 74 75 72 6e 20 73 6f 75 72       return sour
ab5f0 63 65 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  ce;..    };..   
ab600 20 2f 2a 2a 0a 09 09 20 2a 20 20 53 74 61 72 74   /**... *  Start
ab610 20 61 20 62 75 66 66 65 72 20 62 79 20 6e 61 6d   a buffer by nam
ab620 65 2e 20 54 68 65 20 60 73 74 61 72 74 60 20 6d  e. The `start` m
ab630 65 74 68 6f 64 20 61 6c 6c 6f 77 73 20 61 20 6e  ethod allows a n
ab640 75 6d 62 65 72 20 6f 66 20 6f 70 74 69 6f 6e 73  umber of options
ab650 0a 09 09 20 2a 20 20 74 6f 20 62 65 20 70 61 73  ... *  to be pas
ab660 73 65 64 20 69 6e 20 73 75 63 68 20 61 73 20 6f  sed in such as o
ab670 66 66 73 65 74 2c 20 69 6e 74 65 72 76 61 6c 2c  ffset, interval,
ab680 20 61 6e 64 20 67 61 69 6e 2e 20 54 68 69 73 20   and gain. This 
ab690 69 73 20 67 6f 6f 64 20 66 6f 72 20 6d 75 6c 74  is good for mult
ab6a0 69 2d 73 61 6d 70 6c 65 64 20 0a 09 09 20 2a 20  i-sampled ... * 
ab6b0 20 69 6e 73 74 72 75 6d 65 6e 74 73 20 61 6e 64   instruments and
ab6c0 20 73 6f 75 6e 64 20 73 70 72 69 74 65 73 20 77   sound sprites w
ab6d0 68 65 72 65 20 73 61 6d 70 6c 65 73 20 61 72 65  here samples are
ab6e0 20 72 65 70 69 74 63 68 65 64 20 70 6c 61 79 65   repitched playe
ab6f0 64 20 62 61 63 6b 20 61 74 20 64 69 66 66 65 72  d back at differ
ab700 65 6e 74 20 76 65 6c 6f 63 69 74 69 65 73 2e 0a  ent velocities..
ab710 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 53  .. *  @param  {S
ab720 74 72 69 6e 67 7d 20 20 62 75 66 66 65 72 4e 61  tring}  bufferNa
ab730 6d 65 20 20 20 20 54 68 65 20 6e 61 6d 65 20 6f  me    The name o
ab740 66 20 74 68 65 20 62 75 66 66 65 72 20 74 6f 20  f the buffer to 
ab750 73 74 61 72 74 2e 0a 09 09 20 2a 20 20 40 70 61  start.... *  @pa
ab760 72 61 6d 20 20 7b 54 69 6d 65 7d 20 20 74 69 6d  ram  {Time}  tim
ab770 65 20 20 20 20 20 20 57 68 65 6e 20 74 6f 20 73  e      When to s
ab780 74 61 72 74 20 74 68 65 20 62 75 66 66 65 72 2e  tart the buffer.
ab790 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b  ... *  @param  {
ab7a0 54 69 6d 65 7d 20 20 5b 6f 66 66 73 65 74 3d 30  Time}  [offset=0
ab7b0 5d 20 20 20 20 54 68 65 20 6f 66 66 73 65 74 20  ]    The offset 
ab7c0 69 6e 74 6f 20 74 68 65 20 62 75 66 66 65 72 20  into the buffer 
ab7d0 74 6f 20 70 6c 61 79 20 66 72 6f 6d 2e 0a 09 09  to play from....
ab7e0 20 2a 20 20 40 70 61 72 61 6d 20 20 7b 54 69 6d   *  @param  {Tim
ab7f0 65 3d 7d 20 20 64 75 72 61 74 69 6f 6e 20 20 20  e=}  duration   
ab800 48 6f 77 20 6c 6f 6e 67 20 74 6f 20 70 6c 61 79  How long to play
ab810 20 74 68 65 20 62 75 66 66 65 72 20 66 6f 72 2e   the buffer for.
ab820 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b  ... *  @param  {
ab830 49 6e 74 65 72 76 61 6c 7d 20 20 5b 70 69 74 63  Interval}  [pitc
ab840 68 3d 30 5d 20 20 54 68 65 20 69 6e 74 65 72 76  h=0]  The interv
ab850 61 6c 20 74 6f 20 72 65 70 69 74 63 68 20 74 68  al to repitch th
ab860 65 20 62 75 66 66 65 72 2e 0a 09 09 20 2a 20 20  e buffer.... *  
ab870 40 70 61 72 61 6d 20 20 7b 47 61 69 6e 7d 20 20  @param  {Gain}  
ab880 5b 67 61 69 6e 3d 31 5d 20 20 20 20 20 20 54 68  [gain=1]      Th
ab890 65 20 67 61 69 6e 20 74 6f 20 70 6c 61 79 20 74  e gain to play t
ab8a0 68 65 20 73 61 6d 70 6c 65 20 61 74 2e 0a 09 09  he sample at....
ab8b0 20 2a 20 20 40 72 65 74 75 72 6e 20 20 7b 54 6f   *  @return  {To
ab8c0 6e 65 2e 4d 75 6c 74 69 50 6c 61 79 65 72 7d 20  ne.MultiPlayer} 
ab8d0 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20   this... */..   
ab8e0 20 54 6f 6e 65 2e 4d 75 6c 74 69 50 6c 61 79 65   Tone.MultiPlaye
ab8f0 72 2e 70 72 6f 74 6f 74 79 70 65 2e 73 74 61 72  r.prototype.star
ab900 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 62 75  t = function (bu
ab910 66 66 65 72 4e 61 6d 65 2c 20 74 69 6d 65 2c 20  fferName, time, 
ab920 6f 66 66 73 65 74 2c 20 64 75 72 61 74 69 6f 6e  offset, duration
ab930 2c 20 70 69 74 63 68 2c 20 67 61 69 6e 29 20 7b  , pitch, gain) {
ab940 0a 09 20 20 20 20 20 20 20 20 74 69 6d 65 20 3d  ..        time =
ab950 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28   this.toSeconds(
ab960 74 69 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20  time);..        
ab970 76 61 72 20 73 6f 75 72 63 65 20 3d 20 74 68 69  var source = thi
ab980 73 2e 5f 6d 61 6b 65 53 6f 75 72 63 65 28 62 75  s._makeSource(bu
ab990 66 66 65 72 4e 61 6d 65 29 3b 0a 09 20 20 20 20  fferName);..    
ab9a0 20 20 20 20 73 6f 75 72 63 65 2e 73 74 61 72 74      source.start
ab9b0 28 74 69 6d 65 2c 20 6f 66 66 73 65 74 2c 20 64  (time, offset, d
ab9c0 75 72 61 74 69 6f 6e 2c 20 74 68 69 73 2e 64 65  uration, this.de
ab9d0 66 61 75 6c 74 41 72 67 28 67 61 69 6e 2c 20 31  faultArg(gain, 1
ab9e0 29 2c 20 74 68 69 73 2e 66 61 64 65 49 6e 29 3b  ), this.fadeIn);
ab9f0 0a 09 20 20 20 20 20 20 20 20 69 66 20 28 64 75  ..        if (du
aba00 72 61 74 69 6f 6e 29 20 7b 0a 09 20 20 20 20 20  ration) {..     
aba10 20 20 20 20 20 20 20 73 6f 75 72 63 65 2e 73 74         source.st
aba20 6f 70 28 74 69 6d 65 20 2b 20 74 68 69 73 2e 74  op(time + this.t
aba30 6f 53 65 63 6f 6e 64 73 28 64 75 72 61 74 69 6f  oSeconds(duratio
aba40 6e 29 2c 20 74 68 69 73 2e 66 61 64 65 4f 75 74  n), this.fadeOut
aba50 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  );..        }.. 
aba60 20 20 20 20 20 20 20 70 69 74 63 68 20 3d 20 74         pitch = t
aba70 68 69 73 2e 64 65 66 61 75 6c 74 41 72 67 28 70  his.defaultArg(p
aba80 69 74 63 68 2c 20 30 29 3b 0a 09 20 20 20 20 20  itch, 0);..     
aba90 20 20 20 73 6f 75 72 63 65 2e 70 6c 61 79 62 61     source.playba
abaa0 63 6b 52 61 74 65 2e 76 61 6c 75 65 20 3d 20 74  ckRate.value = t
abab0 68 69 73 2e 69 6e 74 65 72 76 61 6c 54 6f 46 72  his.intervalToFr
abac0 65 71 75 65 6e 63 79 52 61 74 69 6f 28 70 69 74  equencyRatio(pit
abad0 63 68 29 3b 0a 09 20 20 20 20 20 20 20 20 72 65  ch);..        re
abae0 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20  turn this;..    
abaf0 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  };..    /**... *
abb00 20 20 53 74 61 72 74 20 61 20 6c 6f 6f 70 69 6e    Start a loopin
abb10 67 20 62 75 66 66 65 72 20 62 79 20 6e 61 6d 65  g buffer by name
abb20 2e 20 53 69 6d 69 6c 61 72 20 74 6f 20 60 73 74  . Similar to `st
abb30 61 72 74 60 2c 20 62 75 74 20 74 68 65 20 62 75  art`, but the bu
abb40 66 66 65 72 0a 09 09 20 2a 20 20 69 73 20 6c 6f  ffer... *  is lo
abb50 6f 70 65 64 20 69 6e 73 74 65 61 64 20 6f 66 20  oped instead of 
abb60 70 6c 61 79 65 64 20 73 74 72 61 69 67 68 74 20  played straight 
abb70 74 68 72 6f 75 67 68 2e 20 43 61 6e 20 73 74 69  through. Can sti
abb80 6c 6c 20 62 65 20 73 74 6f 70 70 65 64 20 77 69  ll be stopped wi
abb90 74 68 20 60 73 74 6f 70 60 2e 20 0a 09 09 20 2a  th `stop`. ... *
abba0 20 20 40 70 61 72 61 6d 20 20 7b 53 74 72 69 6e    @param  {Strin
abbb0 67 7d 20 20 62 75 66 66 65 72 4e 61 6d 65 20 20  g}  bufferName  
abbc0 20 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68    The name of th
abbd0 65 20 62 75 66 66 65 72 20 74 6f 20 73 74 61 72  e buffer to star
abbe0 74 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  t.... *  @param 
abbf0 20 7b 54 69 6d 65 7d 20 20 74 69 6d 65 20 20 20   {Time}  time   
abc00 20 20 20 57 68 65 6e 20 74 6f 20 73 74 61 72 74     When to start
abc10 20 74 68 65 20 62 75 66 66 65 72 2e 0a 09 09 20   the buffer.... 
abc20 2a 20 20 40 70 61 72 61 6d 20 20 7b 54 69 6d 65  *  @param  {Time
abc30 7d 20 20 5b 6f 66 66 73 65 74 3d 30 5d 20 20 20  }  [offset=0]   
abc40 20 54 68 65 20 6f 66 66 73 65 74 20 69 6e 74 6f   The offset into
abc50 20 74 68 65 20 62 75 66 66 65 72 20 74 6f 20 70   the buffer to p
abc60 6c 61 79 20 66 72 6f 6d 2e 0a 09 09 20 2a 20 20  lay from.... *  
abc70 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 3d 7d 20  @param  {Time=} 
abc80 20 6c 6f 6f 70 53 74 61 72 74 20 20 20 54 68 65   loopStart   The
abc90 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 6c 6f   start of the lo
abca0 6f 70 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  op.... *  @param
abcb0 20 20 7b 54 69 6d 65 3d 7d 20 20 6c 6f 6f 70 45    {Time=}  loopE
abcc0 6e 64 09 54 68 65 20 65 6e 64 20 6f 66 20 74 68  nd.The end of th
abcd0 65 20 6c 6f 6f 70 2e 0a 09 09 20 2a 20 20 40 70  e loop.... *  @p
abce0 61 72 61 6d 20 20 7b 49 6e 74 65 72 76 61 6c 7d  aram  {Interval}
abcf0 20 20 5b 70 69 74 63 68 3d 30 5d 20 20 54 68 65    [pitch=0]  The
abd00 20 69 6e 74 65 72 76 61 6c 20 74 6f 20 72 65 70   interval to rep
abd10 69 74 63 68 20 74 68 65 20 62 75 66 66 65 72 2e  itch the buffer.
abd20 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20 20 7b  ... *  @param  {
abd30 47 61 69 6e 7d 20 20 5b 67 61 69 6e 3d 31 5d 20  Gain}  [gain=1] 
abd40 20 20 20 20 20 54 68 65 20 67 61 69 6e 20 74 6f       The gain to
abd50 20 70 6c 61 79 20 74 68 65 20 73 61 6d 70 6c 65   play the sample
abd60 20 61 74 2e 0a 09 09 20 2a 20 20 40 72 65 74 75   at.... *  @retu
abd70 72 6e 20 20 7b 54 6f 6e 65 2e 4d 75 6c 74 69 50  rn  {Tone.MultiP
abd80 6c 61 79 65 72 7d 20 20 74 68 69 73 0a 09 09 20  layer}  this... 
abd90 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4d 75 6c  */..    Tone.Mul
abda0 74 69 50 6c 61 79 65 72 2e 70 72 6f 74 6f 74 79  tiPlayer.prototy
abdb0 70 65 2e 73 74 61 72 74 4c 6f 6f 70 20 3d 20 66  pe.startLoop = f
abdc0 75 6e 63 74 69 6f 6e 20 28 62 75 66 66 65 72 4e  unction (bufferN
abdd0 61 6d 65 2c 20 74 69 6d 65 2c 20 6f 66 66 73 65  ame, time, offse
abde0 74 2c 20 6c 6f 6f 70 53 74 61 72 74 2c 20 6c 6f  t, loopStart, lo
abdf0 6f 70 45 6e 64 2c 20 70 69 74 63 68 2c 20 67 61  opEnd, pitch, ga
abe00 69 6e 29 20 7b 0a 09 20 20 20 20 20 20 20 20 74  in) {..        t
abe10 69 6d 65 20 3d 20 74 68 69 73 2e 74 6f 53 65 63  ime = this.toSec
abe20 6f 6e 64 73 28 74 69 6d 65 29 3b 0a 09 20 20 20  onds(time);..   
abe30 20 20 20 20 20 76 61 72 20 73 6f 75 72 63 65 20       var source 
abe40 3d 20 74 68 69 73 2e 5f 6d 61 6b 65 53 6f 75 72  = this._makeSour
abe50 63 65 28 62 75 66 66 65 72 4e 61 6d 65 29 3b 0a  ce(bufferName);.
abe60 09 20 20 20 20 20 20 20 20 73 6f 75 72 63 65 2e  .        source.
abe70 6c 6f 6f 70 20 3d 20 74 72 75 65 3b 0a 09 20 20  loop = true;..  
abe80 20 20 20 20 20 20 73 6f 75 72 63 65 2e 6c 6f 6f        source.loo
abe90 70 53 74 61 72 74 20 3d 20 74 68 69 73 2e 74 6f  pStart = this.to
abea0 53 65 63 6f 6e 64 73 28 74 68 69 73 2e 64 65 66  Seconds(this.def
abeb0 61 75 6c 74 41 72 67 28 6c 6f 6f 70 53 74 61 72  aultArg(loopStar
abec0 74 2c 20 30 29 29 3b 0a 09 20 20 20 20 20 20 20  t, 0));..       
abed0 20 73 6f 75 72 63 65 2e 6c 6f 6f 70 45 6e 64 20   source.loopEnd 
abee0 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73  = this.toSeconds
abef0 28 74 68 69 73 2e 64 65 66 61 75 6c 74 41 72 67  (this.defaultArg
abf00 28 6c 6f 6f 70 45 6e 64 2c 20 30 29 29 3b 0a 09  (loopEnd, 0));..
abf10 20 20 20 20 20 20 20 20 73 6f 75 72 63 65 2e 73          source.s
abf20 74 61 72 74 28 74 69 6d 65 2c 20 6f 66 66 73 65  tart(time, offse
abf30 74 2c 20 75 6e 64 65 66 69 6e 65 64 2c 20 74 68  t, undefined, th
abf40 69 73 2e 64 65 66 61 75 6c 74 41 72 67 28 67 61  is.defaultArg(ga
abf50 69 6e 2c 20 31 29 2c 20 74 68 69 73 2e 66 61 64  in, 1), this.fad
abf60 65 49 6e 29 3b 0a 09 20 20 20 20 20 20 20 20 70  eIn);..        p
abf70 69 74 63 68 20 3d 20 74 68 69 73 2e 64 65 66 61  itch = this.defa
abf80 75 6c 74 41 72 67 28 70 69 74 63 68 2c 20 30 29  ultArg(pitch, 0)
abf90 3b 0a 09 20 20 20 20 20 20 20 20 73 6f 75 72 63  ;..        sourc
abfa0 65 2e 70 6c 61 79 62 61 63 6b 52 61 74 65 2e 76  e.playbackRate.v
abfb0 61 6c 75 65 20 3d 20 74 68 69 73 2e 69 6e 74 65  alue = this.inte
abfc0 72 76 61 6c 54 6f 46 72 65 71 75 65 6e 63 79 52  rvalToFrequencyR
abfd0 61 74 69 6f 28 70 69 74 63 68 29 3b 0a 09 20 20  atio(pitch);..  
abfe0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
abff0 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  s;..    };..    
ac000 2f 2a 2a 0a 09 09 20 2a 20 20 53 74 6f 70 20 74  /**... *  Stop t
ac010 68 65 20 66 69 72 73 74 20 70 6c 61 79 65 64 20  he first played 
ac020 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
ac030 62 75 66 66 65 72 20 6e 61 6d 65 2e 0a 09 09 20  buffer name.... 
ac040 2a 20 20 40 70 61 72 61 6d 20 20 7b 53 74 72 69  *  @param  {Stri
ac050 6e 67 7d 20 20 62 75 66 66 65 72 4e 61 6d 65 20  ng}  bufferName 
ac060 20 54 68 65 20 62 75 66 66 65 72 20 74 6f 20 73   The buffer to s
ac070 74 6f 70 2e 0a 09 09 20 2a 20 20 40 70 61 72 61  top.... *  @para
ac080 6d 20 20 7b 54 69 6d 65 3d 7d 20 20 74 69 6d 65  m  {Time=}  time
ac090 20 20 20 20 57 68 65 6e 20 74 6f 20 73 74 6f 70      When to stop
ac0a0 20 74 68 65 20 62 75 66 66 65 72 0a 09 09 20 2a   the buffer... *
ac0b0 20 20 40 72 65 74 75 72 6e 20 20 7b 54 6f 6e 65    @return  {Tone
ac0c0 2e 4d 75 6c 74 69 50 6c 61 79 65 72 7d 20 20 74  .MultiPlayer}  t
ac0d0 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54  his... */..    T
ac0e0 6f 6e 65 2e 4d 75 6c 74 69 50 6c 61 79 65 72 2e  one.MultiPlayer.
ac0f0 70 72 6f 74 6f 74 79 70 65 2e 73 74 6f 70 20 3d  prototype.stop =
ac100 20 66 75 6e 63 74 69 6f 6e 20 28 62 75 66 66 65   function (buffe
ac110 72 4e 61 6d 65 2c 20 74 69 6d 65 29 20 7b 0a 09  rName, time) {..
ac120 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73          if (this
ac130 2e 5f 61 63 74 69 76 65 53 6f 75 72 63 65 73 5b  ._activeSources[
ac140 62 75 66 66 65 72 4e 61 6d 65 5d 20 26 26 20 74  bufferName] && t
ac150 68 69 73 2e 5f 61 63 74 69 76 65 53 6f 75 72 63  his._activeSourc
ac160 65 73 5b 62 75 66 66 65 72 4e 61 6d 65 5d 2e 6c  es[bufferName].l
ac170 65 6e 67 74 68 29 20 7b 0a 09 20 20 20 20 20 20  ength) {..      
ac180 20 20 20 20 20 20 74 69 6d 65 20 3d 20 74 68 69        time = thi
ac190 73 2e 74 6f 53 65 63 6f 6e 64 73 28 74 69 6d 65  s.toSeconds(time
ac1a0 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
ac1b0 74 68 69 73 2e 5f 61 63 74 69 76 65 53 6f 75 72  this._activeSour
ac1c0 63 65 73 5b 62 75 66 66 65 72 4e 61 6d 65 5d 2e  ces[bufferName].
ac1d0 73 68 69 66 74 28 29 2e 73 74 6f 70 28 74 69 6d  shift().stop(tim
ac1e0 65 2c 20 74 68 69 73 2e 66 61 64 65 4f 75 74 29  e, this.fadeOut)
ac1f0 3b 0a 09 20 20 20 20 20 20 20 20 7d 20 65 6c 73  ;..        } els
ac200 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e {..           
ac210 20 74 68 72 6f 77 20 6e 65 77 20 45 72 72 6f 72   throw new Error
ac220 28 27 54 6f 6e 65 2e 4d 75 6c 74 69 50 6c 61 79  ('Tone.MultiPlay
ac230 65 72 3a 20 63 61 6e 6e 6f 74 20 73 74 6f 70 20  er: cannot stop 
ac240 61 20 62 75 66 66 65 72 20 74 68 61 74 20 68 61  a buffer that ha
ac250 73 6e 5c 27 74 20 62 65 65 6e 20 73 74 61 72 74  sn\'t been start
ac260 65 64 20 6f 72 20 69 73 20 61 6c 72 65 61 64 79  ed or is already
ac270 20 73 74 6f 70 70 65 64 27 29 3b 0a 09 20 20 20   stopped');..   
ac280 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
ac290 72 65 74 75 72 6e 20 74 68 69 73 3b 0a 09 20 20  return this;..  
ac2a0 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09    };..    /**...
ac2b0 20 2a 20 20 53 74 6f 70 20 61 6c 6c 20 63 75 72   *  Stop all cur
ac2c0 72 65 6e 74 6c 79 20 70 6c 61 79 69 6e 67 20 62  rently playing b
ac2d0 75 66 66 65 72 73 20 61 74 20 74 68 65 20 67 69  uffers at the gi
ac2e0 76 65 6e 20 74 69 6d 65 2e 0a 09 09 20 2a 20 20  ven time.... *  
ac2f0 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 3d 7d 20  @param  {Time=} 
ac300 20 74 69 6d 65 20 20 57 68 65 6e 20 74 6f 20 73   time  When to s
ac310 74 6f 70 20 74 68 65 20 62 75 66 66 65 72 73 2e  top the buffers.
ac320 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 20  ... *  @return  
ac330 7b 54 6f 6e 65 2e 4d 75 6c 74 69 50 6c 61 79 65  {Tone.MultiPlaye
ac340 72 7d 20 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09  r}  this... */..
ac350 20 20 20 20 54 6f 6e 65 2e 4d 75 6c 74 69 50 6c      Tone.MultiPl
ac360 61 79 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e 73  ayer.prototype.s
ac370 74 6f 70 41 6c 6c 20 3d 20 66 75 6e 63 74 69 6f  topAll = functio
ac380 6e 20 28 74 69 6d 65 29 20 7b 0a 09 20 20 20 20  n (time) {..    
ac390 20 20 20 20 74 69 6d 65 20 3d 20 74 68 69 73 2e      time = this.
ac3a0 74 6f 53 65 63 6f 6e 64 73 28 74 69 6d 65 29 3b  toSeconds(time);
ac3b0 0a 09 20 20 20 20 20 20 20 20 66 6f 72 20 28 76  ..        for (v
ac3c0 61 72 20 62 75 66 66 65 72 4e 61 6d 65 20 69 6e  ar bufferName in
ac3d0 20 74 68 69 73 2e 5f 61 63 74 69 76 65 53 6f 75   this._activeSou
ac3e0 72 63 65 73 29 20 7b 0a 09 20 20 20 20 20 20 20  rces) {..       
ac3f0 20 20 20 20 20 76 61 72 20 73 6f 75 72 63 65 73       var sources
ac400 20 3d 20 74 68 69 73 2e 5f 61 63 74 69 76 65 53   = this._activeS
ac410 6f 75 72 63 65 73 5b 62 75 66 66 65 72 4e 61 6d  ources[bufferNam
ac420 65 5d 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e];..           
ac430 20 66 6f 72 20 28 76 61 72 20 69 20 3d 20 30 3b   for (var i = 0;
ac440 20 69 20 3c 20 73 6f 75 72 63 65 73 2e 6c 65 6e   i < sources.len
ac450 67 74 68 3b 20 69 2b 2b 29 20 7b 0a 09 20 20 20  gth; i++) {..   
ac460 20 20 20 20 20 20 20 20 20 20 20 20 20 73 6f 75               sou
ac470 72 63 65 73 5b 69 5d 2e 73 74 6f 70 28 74 69 6d  rces[i].stop(tim
ac480 65 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e);..           
ac490 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20   }..        }.. 
ac4a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
ac4b0 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  is;..    };..   
ac4c0 20 2f 2a 2a 0a 09 09 20 2a 20 20 41 64 64 20 61   /**... *  Add a
ac4d0 6e 6f 74 68 65 72 20 62 75 66 66 65 72 20 74 6f  nother buffer to
ac4e0 20 74 68 65 20 61 76 61 69 6c 61 62 6c 65 20 62   the available b
ac4f0 75 66 66 65 72 73 2e 0a 09 09 20 2a 20 20 40 70  uffers.... *  @p
ac500 61 72 61 6d 20 7b 53 74 72 69 6e 67 7d 20 6e 61  aram {String} na
ac510 6d 65 20 54 68 65 20 6e 61 6d 65 20 74 6f 20 74  me The name to t
ac520 68 61 74 20 74 68 65 20 62 75 66 66 65 72 20 69  hat the buffer i
ac530 73 20 72 65 66 65 72 65 64 0a 09 09 20 2a 20 20  s refered... *  
ac540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac550 20 20 20 20 20 74 6f 20 69 6e 20 73 74 61 72 74       to in start
ac560 2f 73 74 6f 70 20 6d 65 74 68 6f 64 73 2e 20 0a  /stop methods. .
ac570 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 53 74  .. *  @param {St
ac580 72 69 6e 67 7c 54 6f 6e 65 2e 42 75 66 66 65 72  ring|Tone.Buffer
ac590 7d 20 75 72 6c 20 54 68 65 20 75 72 6c 20 6f 66  } url The url of
ac5a0 20 74 68 65 20 62 75 66 66 65 72 20 74 6f 20 6c   the buffer to l
ac5b0 6f 61 64 0a 09 09 20 2a 20 20 20 20 20 20 20 20  oad... *        
ac5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac5d0 20 20 20 20 20 20 20 20 20 20 6f 72 20 74 68 65            or the
ac5e0 20 62 75 66 66 65 72 2e 0a 09 09 20 2a 20 20 40   buffer.... *  @
ac5f0 70 61 72 61 6d 20 7b 46 75 6e 63 74 69 6f 6e 7d  param {Function}
ac600 20 63 61 6c 6c 62 61 63 6b 20 54 68 65 20 66 75   callback The fu
ac610 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65  nction to invoke
ac620 20 61 66 74 65 72 20 74 68 65 20 62 75 66 66 65   after the buffe
ac630 72 20 69 73 20 6c 6f 61 64 65 64 2e 0a 09 09 20  r is loaded.... 
ac640 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 4d 75 6c  */..    Tone.Mul
ac650 74 69 50 6c 61 79 65 72 2e 70 72 6f 74 6f 74 79  tiPlayer.prototy
ac660 70 65 2e 61 64 64 20 3d 20 66 75 6e 63 74 69 6f  pe.add = functio
ac670 6e 20 28 6e 61 6d 65 2c 20 75 72 6c 2c 20 63 61  n (name, url, ca
ac680 6c 6c 62 61 63 6b 29 20 7b 0a 09 20 20 20 20 20  llback) {..     
ac690 20 20 20 74 68 69 73 2e 62 75 66 66 65 72 73 2e     this.buffers.
ac6a0 61 64 64 28 6e 61 6d 65 2c 20 75 72 6c 2c 20 63  add(name, url, c
ac6b0 61 6c 6c 62 61 63 6b 29 3b 0a 09 20 20 20 20 20  allback);..     
ac6c0 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0a     return this;.
ac6d0 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
ac6e0 0a 09 09 20 2a 20 20 52 65 74 75 72 6e 73 20 74  ... *  Returns t
ac6f0 68 65 20 70 6c 61 79 62 61 63 6b 20 73 74 61 74  he playback stat
ac700 65 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 2e  e of the source.
ac710 20 22 73 74 61 72 74 65 64 22 0a 09 09 20 2a 20   "started"... * 
ac720 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61 6e   if there are an
ac730 79 20 62 75 66 66 65 72 73 20 70 6c 61 79 69 6e  y buffers playin
ac740 67 2e 20 22 73 74 6f 70 70 65 64 22 20 6f 74 68  g. "stopped" oth
ac750 65 72 77 69 73 65 2e 0a 09 09 20 2a 20 20 40 74  erwise.... *  @t
ac760 79 70 65 20 7b 54 6f 6e 65 2e 53 74 61 74 65 7d  ype {Tone.State}
ac770 0a 09 09 20 2a 20 20 40 72 65 61 64 4f 6e 6c 79  ... *  @readOnly
ac780 0a 09 09 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66  ... *  @memberOf
ac790 20 54 6f 6e 65 2e 4d 75 6c 74 69 50 6c 61 79 65   Tone.MultiPlaye
ac7a0 72 23 0a 09 09 20 2a 20 20 40 6e 61 6d 65 20 73  r#... *  @name s
ac7b0 74 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20  tate... */..    
ac7c0 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f  Object.definePro
ac7d0 70 65 72 74 79 28 54 6f 6e 65 2e 4d 75 6c 74 69  perty(Tone.Multi
ac7e0 50 6c 61 79 65 72 2e 70 72 6f 74 6f 74 79 70 65  Player.prototype
ac7f0 2c 20 27 73 74 61 74 65 27 2c 20 7b 0a 09 20 20  , 'state', {..  
ac800 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74        get: funct
ac810 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20  ion () {..      
ac820 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
ac830 73 2e 5f 61 63 74 69 76 65 53 6f 75 72 63 65 73  s._activeSources
ac840 2e 6c 65 6e 67 74 68 20 3e 20 30 20 3f 20 54 6f  .length > 0 ? To
ac850 6e 65 2e 53 74 61 74 65 2e 53 74 61 72 74 65 64  ne.State.Started
ac860 20 3a 20 54 6f 6e 65 2e 53 74 61 74 65 2e 53 74   : Tone.State.St
ac870 6f 70 70 65 64 3b 0a 09 20 20 20 20 20 20 20 20  opped;..        
ac880 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20  }..    });..    
ac890 2f 2a 2a 0a 09 09 20 2a 20 4d 75 74 65 20 74 68  /**... * Mute th
ac8a0 65 20 6f 75 74 70 75 74 2e 20 0a 09 09 20 2a 20  e output. ... * 
ac8b0 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 4d  @memberOf Tone.M
ac8c0 75 6c 74 69 50 6c 61 79 65 72 23 0a 09 09 20 2a  ultiPlayer#... *
ac8d0 20 40 74 79 70 65 20 7b 62 6f 6f 6c 65 61 6e 7d   @type {boolean}
ac8e0 0a 09 09 20 2a 20 40 6e 61 6d 65 20 6d 75 74 65  ... * @name mute
ac8f0 0a 09 09 20 2a 20 40 65 78 61 6d 70 6c 65 0a 09  ... * @example..
ac900 09 20 2a 20 2f 2f 6d 75 74 65 20 74 68 65 20 6f  . * //mute the o
ac910 75 74 70 75 74 0a 09 09 20 2a 20 73 6f 75 72 63  utput... * sourc
ac920 65 2e 6d 75 74 65 20 3d 20 74 72 75 65 3b 0a 09  e.mute = true;..
ac930 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74  . */..    Object
ac940 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28  .defineProperty(
ac950 54 6f 6e 65 2e 4d 75 6c 74 69 50 6c 61 79 65 72  Tone.MultiPlayer
ac960 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 6d 75 74  .prototype, 'mut
ac970 65 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67  e', {..        g
ac980 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  et: function () 
ac990 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
ac9a0 65 74 75 72 6e 20 74 68 69 73 2e 5f 76 6f 6c 75  eturn this._volu
ac9b0 6d 65 2e 6d 75 74 65 3b 0a 09 20 20 20 20 20 20  me.mute;..      
ac9c0 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65    },..        se
ac9d0 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 6d 75 74  t: function (mut
ac9e0 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  e) {..          
ac9f0 20 20 74 68 69 73 2e 5f 76 6f 6c 75 6d 65 2e 6d    this._volume.m
aca00 75 74 65 20 3d 20 6d 75 74 65 3b 0a 09 20 20 20  ute = mute;..   
aca10 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a       }..    });.
aca20 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43  .    /**... *  C
aca30 6c 65 61 6e 20 75 70 2e 0a 09 09 20 2a 20 20 40  lean up.... *  @
aca40 72 65 74 75 72 6e 20 20 7b 54 6f 6e 65 2e 4d 75  return  {Tone.Mu
aca50 6c 74 69 50 6c 61 79 65 72 7d 20 20 74 68 69 73  ltiPlayer}  this
aca60 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
aca70 2e 4d 75 6c 74 69 50 6c 61 79 65 72 2e 70 72 6f  .MultiPlayer.pro
aca80 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 20 3d  totype.dispose =
aca90 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
acaa0 20 20 20 20 20 20 20 20 54 6f 6e 65 2e 70 72 6f          Tone.pro
acab0 74 6f 74 79 70 65 2e 64 69 73 70 6f 73 65 2e 63  totype.dispose.c
acac0 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20 20 20 20  all(this);..    
acad0 20 20 20 20 74 68 69 73 2e 5f 76 6f 6c 75 6d 65      this._volume
acae0 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20  .dispose();..   
acaf0 20 20 20 20 20 74 68 69 73 2e 5f 76 6f 6c 75 6d       this._volum
acb00 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20  e = null;..     
acb10 20 20 20 74 68 69 73 2e 5f 77 72 69 74 61 62 6c     this._writabl
acb20 65 28 27 76 6f 6c 75 6d 65 27 29 3b 0a 09 20 20  e('volume');..  
acb30 20 20 20 20 20 20 74 68 69 73 2e 76 6f 6c 75 6d        this.volum
acb40 65 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20  e = null;..     
acb50 20 20 20 66 6f 72 20 28 76 61 72 20 62 75 66 66     for (var buff
acb60 65 72 4e 61 6d 65 20 69 6e 20 74 68 69 73 2e 5f  erName in this._
acb70 61 63 74 69 76 65 53 6f 75 72 63 65 73 29 20 7b  activeSources) {
acb80 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
acb90 69 73 2e 5f 61 63 74 69 76 65 53 6f 75 72 63 65  is._activeSource
acba0 73 5b 62 75 66 66 65 72 4e 61 6d 65 5d 2e 66 6f  s[bufferName].fo
acbb0 72 45 61 63 68 28 66 75 6e 63 74 69 6f 6e 20 28  rEach(function (
acbc0 73 6f 75 72 63 65 29 20 7b 0a 09 20 20 20 20 20  source) {..     
acbd0 20 20 20 20 20 20 20 20 20 20 20 73 6f 75 72 63             sourc
acbe0 65 2e 64 69 73 70 6f 73 65 28 29 3b 0a 09 20 20  e.dispose();..  
acbf0 20 20 20 20 20 20 20 20 20 20 7d 29 3b 0a 09 20            });.. 
acc00 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
acc10 20 20 74 68 69 73 2e 62 75 66 66 65 72 73 2e 64    this.buffers.d
acc20 69 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20  ispose();..     
acc30 20 20 20 74 68 69 73 2e 62 75 66 66 65 72 73 20     this.buffers 
acc40 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
acc50 20 74 68 69 73 2e 5f 61 63 74 69 76 65 53 6f 75   this._activeSou
acc60 72 63 65 73 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20  rces = null;..  
acc70 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
acc80 73 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20  s;..    };..    
acc90 72 65 74 75 72 6e 20 54 6f 6e 65 2e 4d 75 6c 74  return Tone.Mult
acca0 69 50 6c 61 79 65 72 3b 0a 09 7d 29 3b 0a 09 4d  iPlayer;..});..M
accb0 6f 64 75 6c 65 28 66 75 6e 63 74 69 6f 6e 20 28  odule(function (
accc0 54 6f 6e 65 29 20 7b 0a 09 20 20 20 20 2f 2a 2a  Tone) {..    /**
accd0 0a 09 09 20 2a 20 40 63 6c 61 73 73 20 54 6f 6e  ... * @class Ton
acce0 65 2e 47 72 61 69 6e 50 6c 61 79 65 72 20 69 6d  e.GrainPlayer im
accf0 70 6c 65 6d 65 6e 74 73 20 5b 67 72 61 6e 75 6c  plements [granul
acd00 61 72 20 73 79 6e 74 68 65 73 69 73 5d 28 68 74  ar synthesis](ht
acd10 74 70 73 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  tps://en.wikiped
acd20 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 47 72 61 6e  ia.org/wiki/Gran
acd30 75 6c 61 72 5f 73 79 6e 74 68 65 73 69 73 29 2e  ular_synthesis).
acd40 0a 09 09 20 2a 20 20 20 20 20 20 20 20 47 72 61  ... *        Gra
acd50 6e 75 6c 61 72 20 53 79 6e 74 68 65 73 69 73 20  nular Synthesis 
acd60 65 6e 61 62 6c 65 73 20 79 6f 75 20 74 6f 20 61  enables you to a
acd70 64 6a 75 73 74 20 70 69 74 63 68 20 61 6e 64 20  djust pitch and 
acd80 70 6c 61 79 62 61 63 6b 20 72 61 74 65 20 69 6e  playback rate in
acd90 64 65 70 65 6e 64 65 6e 74 6c 79 2e 20 54 68 65  dependently. The
acda0 20 67 72 61 69 6e 53 69 7a 65 20 69 73 20 74 68   grainSize is th
acdb0 65 20 0a 09 09 20 2a 20 20 20 20 20 20 20 20 61  e ... *        a
acdc0 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 65 61  mount of time ea
acdd0 63 68 20 73 6d 61 6c 6c 20 63 68 75 6e 6b 20 6f  ch small chunk o
acde0 66 20 61 75 64 69 6f 20 69 73 20 70 6c 61 79 65  f audio is playe
acdf0 64 20 66 6f 72 20 61 6e 64 20 74 68 65 20 6f 76  d for and the ov
ace00 65 72 6c 61 70 20 69 73 20 74 68 65 20 0a 09 09  erlap is the ...
ace10 20 2a 20 20 20 20 20 20 20 20 61 6d 6f 75 6e 74   *        amount
ace20 20 6f 66 20 63 72 6f 73 73 66 61 64 69 6e 67 20   of crossfading 
ace30 74 72 61 6e 73 69 74 69 6f 6e 20 74 69 6d 65 20  transition time 
ace40 62 65 74 77 65 65 6e 20 73 75 63 63 65 73 73 69  between successi
ace50 76 65 20 67 72 61 69 6e 73 2e 0a 09 09 20 2a 20  ve grains.... * 
ace60 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e 65 7d 0a  @extends {Tone}.
ace70 09 09 20 2a 20 40 70 61 72 61 6d 20 7b 53 74 72  .. * @param {Str
ace80 69 6e 67 7c 54 6f 6e 65 2e 42 75 66 66 65 72 7d  ing|Tone.Buffer}
ace90 20 75 72 6c 09 54 68 65 20 75 72 6c 20 74 6f 20   url.The url to 
acea0 6c 6f 61 64 2c 20 6f 72 20 74 68 65 20 54 6f 6e  load, or the Ton
aceb0 65 2e 42 75 66 66 65 72 20 74 6f 20 70 6c 61 79  e.Buffer to play
acec0 2e 0a 09 09 20 2a 20 40 70 61 72 61 6d 20 7b 46  .... * @param {F
aced0 75 6e 63 74 69 6f 6e 3d 7d 20 63 61 6c 6c 62 61  unction=} callba
acee0 63 6b 20 54 68 65 20 63 61 6c 6c 62 61 63 6b 20  ck The callback 
acef0 74 6f 20 69 6e 76 6f 6b 65 20 61 66 74 65 72 20  to invoke after 
acf00 74 68 65 20 75 72 6c 20 69 73 20 6c 6f 61 64 65  the url is loade
acf10 64 2e 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f  d.... */..    To
acf20 6e 65 2e 47 72 61 69 6e 50 6c 61 79 65 72 20 3d  ne.GrainPlayer =
acf30 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
acf40 20 20 20 20 20 20 20 20 76 61 72 20 6f 70 74 69          var opti
acf50 6f 6e 73 20 3d 20 74 68 69 73 2e 6f 70 74 69 6f  ons = this.optio
acf60 6e 73 4f 62 6a 65 63 74 28 61 72 67 75 6d 65 6e  nsObject(argumen
acf70 74 73 2c 20 5b 0a 09 20 20 20 20 20 20 20 20 20  ts, [..         
acf80 20 20 20 27 75 72 6c 27 2c 0a 09 20 20 20 20 20     'url',..     
acf90 20 20 20 20 20 20 20 27 6f 6e 6c 6f 61 64 27 0a         'onload'.
acfa0 09 20 20 20 20 20 20 20 20 5d 2c 20 54 6f 6e 65  .        ], Tone
acfb0 2e 47 72 61 69 6e 50 6c 61 79 65 72 2e 64 65 66  .GrainPlayer.def
acfc0 61 75 6c 74 73 29 3b 0a 09 20 20 20 20 20 20 20  aults);..       
acfd0 20 54 6f 6e 65 2e 53 6f 75 72 63 65 2e 63 61 6c   Tone.Source.cal
acfe0 6c 28 74 68 69 73 29 3b 0a 09 20 20 20 20 20 20  l(this);..      
acff0 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65    /**.... *  The
ad000 20 61 75 64 69 6f 20 62 75 66 66 65 72 20 62 65   audio buffer be
ad010 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 65 20 70  longing to the p
ad020 6c 61 79 65 72 2e 0a 09 09 09 20 2a 20 20 40 74  layer..... *  @t
ad030 79 70 65 20 20 7b 54 6f 6e 65 2e 42 75 66 66 65  ype  {Tone.Buffe
ad040 72 7d 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20  r}.... */..     
ad050 20 20 20 74 68 69 73 2e 62 75 66 66 65 72 20 3d     this.buffer =
ad060 20 6e 65 77 20 54 6f 6e 65 2e 42 75 66 66 65 72   new Tone.Buffer
ad070 28 6f 70 74 69 6f 6e 73 2e 75 72 6c 2c 20 6f 70  (options.url, op
ad080 74 69 6f 6e 73 2e 6f 6e 6c 6f 61 64 29 3b 0a 09  tions.onload);..
ad090 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
ad0a0 2a 20 20 50 6c 61 79 73 20 74 68 65 20 62 75 66  *  Plays the buf
ad0b0 66 65 72 20 77 69 74 68 20 61 20 73 6d 61 6c 6c  fer with a small
ad0c0 20 65 6e 76 65 6c 6f 70 65 0a 09 09 09 20 2a 20   envelope.... * 
ad0d0 20 40 74 79 70 65 20 20 7b 54 6f 6e 65 2e 4d 75   @type  {Tone.Mu
ad0e0 6c 74 69 50 6c 61 79 65 72 7d 0a 09 09 09 20 2a  ltiPlayer}.... *
ad0f0 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a    @private.... *
ad100 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
ad110 5f 70 6c 61 79 65 72 20 3d 20 74 68 69 73 2e 6f  _player = this.o
ad120 75 74 70 75 74 20 3d 20 6e 65 77 20 54 6f 6e 65  utput = new Tone
ad130 2e 4d 75 6c 74 69 50 6c 61 79 65 72 28 29 3b 0a  .MultiPlayer();.
ad140 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09  .        /**....
ad150 20 2a 20 20 43 72 65 61 74 65 20 61 20 72 65 70   *  Create a rep
ad160 65 61 74 69 6e 67 20 74 69 63 6b 20 74 6f 20 73  eating tick to s
ad170 63 68 65 64 75 6c 65 0a 09 09 09 20 2a 20 20 74  chedule.... *  t
ad180 68 65 20 67 72 61 69 6e 73 2e 0a 09 09 09 20 2a  he grains..... *
ad190 20 20 40 74 79 70 65 20 20 7b 54 6f 6e 65 2e 43    @type  {Tone.C
ad1a0 6c 6f 63 6b 7d 0a 09 09 09 20 2a 20 20 40 70 72  lock}.... *  @pr
ad1b0 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20  ivate.... */..  
ad1c0 20 20 20 20 20 20 74 68 69 73 2e 5f 63 6c 6f 63        this._cloc
ad1d0 6b 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 43 6c 6f  k = new Tone.Clo
ad1e0 63 6b 28 74 68 69 73 2e 5f 74 69 63 6b 2e 62 69  ck(this._tick.bi
ad1f0 6e 64 28 74 68 69 73 29 2c 20 31 29 3b 0a 09 20  nd(this), 1);.. 
ad200 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
ad210 20 20 40 74 79 70 65 20 20 7b 4e 75 6d 62 65 72    @type  {Number
ad220 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  }.... *  @privat
ad230 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
ad240 20 20 74 68 69 73 2e 5f 6c 6f 6f 70 53 74 61 72    this._loopStar
ad250 74 20 3d 20 30 3b 0a 09 20 20 20 20 20 20 20 20  t = 0;..        
ad260 2f 2a 2a 0a 09 09 09 20 2a 20 20 40 74 79 70 65  /**.... *  @type
ad270 20 20 7b 4e 75 6d 62 65 72 7d 0a 09 09 09 20 2a    {Number}.... *
ad280 20 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a    @private.... *
ad290 2f 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  /..        this.
ad2a0 5f 6c 6f 6f 70 45 6e 64 20 3d 20 30 3b 0a 09 20  _loopEnd = 0;.. 
ad2b0 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a         /**.... *
ad2c0 20 20 40 74 79 70 65 20 20 7b 4e 75 6d 62 65 72    @type  {Number
ad2d0 7d 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74  }.... *  @privat
ad2e0 65 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20  e.... */..      
ad2f0 20 20 74 68 69 73 2e 5f 70 6c 61 79 62 61 63 6b    this._playback
ad300 52 61 74 65 20 3d 20 6f 70 74 69 6f 6e 73 2e 70  Rate = options.p
ad310 6c 61 79 62 61 63 6b 52 61 74 65 3b 0a 09 20 20  laybackRate;..  
ad320 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20        /**.... * 
ad330 20 40 74 79 70 65 20 20 7b 4e 75 6d 62 65 72 7d   @type  {Number}
ad340 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  .... *  @private
ad350 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
ad360 20 74 68 69 73 2e 5f 67 72 61 69 6e 53 69 7a 65   this._grainSize
ad370 20 3d 20 6f 70 74 69 6f 6e 73 2e 67 72 61 69 6e   = options.grain
ad380 53 69 7a 65 3b 0a 09 20 20 20 20 20 20 20 20 2f  Size;..        /
ad390 2a 2a 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61  **.... *  @priva
ad3a0 74 65 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20  te.... *  @type 
ad3b0 7b 4e 75 6d 62 65 72 7d 0a 09 09 09 20 2a 2f 0a  {Number}.... */.
ad3c0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6f  .        this._o
ad3d0 76 65 72 6c 61 70 20 3d 20 6f 70 74 69 6f 6e 73  verlap = options
ad3e0 2e 6f 76 65 72 6c 61 70 3b 0a 09 20 20 20 20 20  .overlap;..     
ad3f0 20 20 20 2f 2a 2a 0a 09 09 09 20 2a 20 20 41 64     /**.... *  Ad
ad400 6a 75 73 74 20 74 68 65 20 70 69 74 63 68 20 69  just the pitch i
ad410 6e 64 65 70 65 6e 64 65 6e 74 6c 79 20 6f 66 20  ndependently of 
ad420 74 68 65 20 70 6c 61 79 62 61 63 6b 52 61 74 65  the playbackRate
ad430 2e 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 20  ..... *  @type  
ad440 7b 43 65 6e 74 73 7d 0a 09 09 09 20 2a 2f 0a 09  {Cents}.... */..
ad450 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 74          this.det
ad460 75 6e 65 20 3d 20 6f 70 74 69 6f 6e 73 2e 64 65  une = options.de
ad470 74 75 6e 65 3b 0a 09 20 20 20 20 20 20 20 20 2f  tune;..        /
ad480 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 61 6d  **.... *  The am
ad490 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 72 61 6e  ount of time ran
ad4a0 64 6f 6d 6c 79 20 61 64 64 65 64 0a 09 09 09 20  domly added.... 
ad4b0 2a 20 20 6f 72 20 73 75 62 74 72 61 63 74 65 64  *  or subtracted
ad4c0 20 66 72 6f 6d 20 74 68 65 20 67 72 61 69 6e 27   from the grain'
ad4d0 73 20 6f 66 66 73 65 74 0a 09 09 09 20 2a 20 20  s offset.... *  
ad4e0 40 74 79 70 65 20 20 7b 54 69 6d 65 7d 0a 09 09  @type  {Time}...
ad4f0 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20 74 68  . */..        th
ad500 69 73 2e 64 72 69 66 74 20 3d 20 6f 70 74 69 6f  is.drift = optio
ad510 6e 73 2e 64 72 69 66 74 3b 0a 09 20 20 20 20 20  ns.drift;..     
ad520 20 20 20 2f 2f 73 65 74 75 70 0a 09 20 20 20 20     //setup..    
ad530 20 20 20 20 74 68 69 73 2e 6f 76 65 72 6c 61 70      this.overlap
ad540 20 3d 20 6f 70 74 69 6f 6e 73 2e 6f 76 65 72 6c   = options.overl
ad550 61 70 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  ap;..        thi
ad560 73 2e 6c 6f 6f 70 20 3d 20 6f 70 74 69 6f 6e 73  s.loop = options
ad570 2e 6c 6f 6f 70 3b 0a 09 20 20 20 20 20 20 20 20  .loop;..        
ad580 74 68 69 73 2e 70 6c 61 79 62 61 63 6b 52 61 74  this.playbackRat
ad590 65 20 3d 20 6f 70 74 69 6f 6e 73 2e 70 6c 61 79  e = options.play
ad5a0 62 61 63 6b 52 61 74 65 3b 0a 09 20 20 20 20 20  backRate;..     
ad5b0 20 20 20 74 68 69 73 2e 67 72 61 69 6e 53 69 7a     this.grainSiz
ad5c0 65 20 3d 20 6f 70 74 69 6f 6e 73 2e 67 72 61 69  e = options.grai
ad5d0 6e 53 69 7a 65 3b 0a 09 20 20 20 20 20 20 20 20  nSize;..        
ad5e0 74 68 69 73 2e 6c 6f 6f 70 53 74 61 72 74 20 3d  this.loopStart =
ad5f0 20 6f 70 74 69 6f 6e 73 2e 6c 6f 6f 70 53 74 61   options.loopSta
ad600 72 74 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69  rt;..        thi
ad610 73 2e 6c 6f 6f 70 45 6e 64 20 3d 20 6f 70 74 69  s.loopEnd = opti
ad620 6f 6e 73 2e 6c 6f 6f 70 45 6e 64 3b 0a 09 20 20  ons.loopEnd;..  
ad630 20 20 20 20 20 20 74 68 69 73 2e 72 65 76 65 72        this.rever
ad640 73 65 20 3d 20 6f 70 74 69 6f 6e 73 2e 72 65 76  se = options.rev
ad650 65 72 73 65 3b 0a 09 20 20 20 20 7d 3b 0a 09 20  erse;..    };.. 
ad660 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e 64 28 54     Tone.extend(T
ad670 6f 6e 65 2e 47 72 61 69 6e 50 6c 61 79 65 72 2c  one.GrainPlayer,
ad680 20 54 6f 6e 65 2e 53 6f 75 72 63 65 29 3b 0a 09   Tone.Source);..
ad690 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 74 68      /**... *  th
ad6a0 65 20 64 65 66 61 75 6c 74 20 70 61 72 61 6d 65  e default parame
ad6b0 74 65 72 73 0a 09 09 20 2a 20 20 40 73 74 61 74  ters... *  @stat
ad6c0 69 63 0a 09 09 20 2a 20 20 40 63 6f 6e 73 74 0a  ic... *  @const.
ad6d0 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4f 62 6a  .. *  @type {Obj
ad6e0 65 63 74 7d 0a 09 09 20 2a 2f 0a 09 20 20 20 20  ect}... */..    
ad6f0 54 6f 6e 65 2e 47 72 61 69 6e 50 6c 61 79 65 72  Tone.GrainPlayer
ad700 2e 64 65 66 61 75 6c 74 73 20 3d 20 7b 0a 09 20  .defaults = {.. 
ad710 20 20 20 20 20 20 20 27 6f 6e 6c 6f 61 64 27 3a         'onload':
ad720 20 54 6f 6e 65 2e 6e 6f 4f 70 2c 0a 09 20 20 20   Tone.noOp,..   
ad730 20 20 20 20 20 27 6f 76 65 72 6c 61 70 27 3a 20       'overlap': 
ad740 30 2e 31 2c 0a 09 20 20 20 20 20 20 20 20 27 67  0.1,..        'g
ad750 72 61 69 6e 53 69 7a 65 27 3a 20 30 2e 32 2c 0a  rainSize': 0.2,.
ad760 09 20 20 20 20 20 20 20 20 27 64 72 69 66 74 27  .        'drift'
ad770 3a 20 30 2c 0a 09 20 20 20 20 20 20 20 20 27 70  : 0,..        'p
ad780 6c 61 79 62 61 63 6b 52 61 74 65 27 3a 20 31 2c  laybackRate': 1,
ad790 0a 09 20 20 20 20 20 20 20 20 27 64 65 74 75 6e  ..        'detun
ad7a0 65 27 3a 20 30 2c 0a 09 20 20 20 20 20 20 20 20  e': 0,..        
ad7b0 27 6c 6f 6f 70 27 3a 20 66 61 6c 73 65 2c 0a 09  'loop': false,..
ad7c0 20 20 20 20 20 20 20 20 27 6c 6f 6f 70 53 74 61          'loopSta
ad7d0 72 74 27 3a 20 30 2c 0a 09 20 20 20 20 20 20 20  rt': 0,..       
ad7e0 20 27 6c 6f 6f 70 45 6e 64 27 3a 20 30 2c 0a 09   'loopEnd': 0,..
ad7f0 20 20 20 20 20 20 20 20 27 72 65 76 65 72 73 65          'reverse
ad800 27 3a 20 66 61 6c 73 65 0a 09 20 20 20 20 7d 3b  ': false..    };
ad810 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20  ..    /**... *  
ad820 50 6c 61 79 20 74 68 65 20 62 75 66 66 65 72 20  Play the buffer 
ad830 61 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 61  at the given sta
ad840 72 74 54 69 6d 65 2e 20 4f 70 74 69 6f 6e 61 6c  rtTime. Optional
ad850 6c 79 20 61 64 64 20 61 6e 20 6f 66 66 73 65 74  ly add an offset
ad860 0a 09 09 20 2a 20 20 66 72 6f 6d 20 74 68 65 20  ... *  from the 
ad870 73 74 61 72 74 20 6f 66 20 74 68 65 20 62 75 66  start of the buf
ad880 66 65 72 20 74 6f 20 70 6c 61 79 20 66 72 6f 6d  fer to play from
ad890 2e 0a 09 09 20 2a 20 20 0a 09 09 20 2a 20 20 40  .... *  ... *  @
ad8a0 70 61 72 61 6d 20 20 7b 54 69 6d 65 7d 20 5b 73  param  {Time} [s
ad8b0 74 61 72 74 54 69 6d 65 3d 6e 6f 77 5d 20 57 68  tartTime=now] Wh
ad8c0 65 6e 20 74 68 65 20 70 6c 61 79 65 72 20 73 68  en the player sh
ad8d0 6f 75 6c 64 20 73 74 61 72 74 2e 0a 09 09 20 2a  ould start.... *
ad8e0 20 20 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 7d    @param  {Time}
ad8f0 20 5b 6f 66 66 73 65 74 3d 30 5d 20 54 68 65 20   [offset=0] The 
ad900 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20  offset from the 
ad910 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
ad920 20 73 61 6d 70 6c 65 0a 09 09 20 2a 20 20 20 20   sample... *    
ad930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad940 20 20 20 20 20 20 20 20 20 20 20 20 20 74 6f 20               to 
ad950 73 74 61 72 74 20 61 74 2e 20 0a 09 09 20 2a 20  start at. ... * 
ad960 40 72 65 74 75 72 6e 20 7b 54 6f 6e 65 2e 47 72  @return {Tone.Gr
ad970 61 69 6e 50 6c 61 79 65 72 7d 20 74 68 69 73 0a  ainPlayer} this.
ad980 09 09 20 2a 2f 0a 09 20 20 20 20 2f 2a 2a 0a 09  .. */..    /**..
ad990 09 20 2a 20 20 49 6e 74 65 72 6e 61 6c 20 73 74  . *  Internal st
ad9a0 61 72 74 20 6d 65 74 68 6f 64 0a 09 09 20 2a 20  art method... * 
ad9b0 20 40 70 61 72 61 6d 20 7b 54 69 6d 65 7d 20 74   @param {Time} t
ad9c0 69 6d 65 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  ime... *  @param
ad9d0 20 7b 54 69 6d 65 7d 20 6f 66 66 73 65 74 0a 09   {Time} offset..
ad9e0 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09  . *  @private...
ad9f0 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 47 72   */..    Tone.Gr
ada00 61 69 6e 50 6c 61 79 65 72 2e 70 72 6f 74 6f 74  ainPlayer.protot
ada10 79 70 65 2e 5f 73 74 61 72 74 20 3d 20 66 75 6e  ype._start = fun
ada20 63 74 69 6f 6e 20 28 74 69 6d 65 2c 20 6f 66 66  ction (time, off
ada30 73 65 74 29 20 7b 0a 09 20 20 20 20 20 20 20 20  set) {..        
ada40 6f 66 66 73 65 74 20 3d 20 74 68 69 73 2e 64 65  offset = this.de
ada50 66 61 75 6c 74 41 72 67 28 6f 66 66 73 65 74 2c  faultArg(offset,
ada60 20 30 29 3b 0a 09 20 20 20 20 20 20 20 20 6f 66   0);..        of
ada70 66 73 65 74 20 3d 20 74 68 69 73 2e 74 6f 53 65  fset = this.toSe
ada80 63 6f 6e 64 73 28 6f 66 66 73 65 74 29 3b 0a 09  conds(offset);..
ada90 20 20 20 20 20 20 20 20 74 69 6d 65 20 3d 20 74          time = t
adaa0 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28 74 69  his.toSeconds(ti
adab0 6d 65 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  me);..        th
adac0 69 73 2e 5f 6f 66 66 73 65 74 20 3d 20 6f 66 66  is._offset = off
adad0 73 65 74 3b 0a 09 20 20 20 20 20 20 20 20 74 68  set;..        th
adae0 69 73 2e 5f 63 6c 6f 63 6b 2e 73 74 61 72 74 28  is._clock.start(
adaf0 74 69 6d 65 29 3b 0a 09 20 20 20 20 7d 3b 0a 09  time);..    };..
adb00 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 49 6e      /**... *  In
adb10 74 65 72 6e 61 6c 20 73 74 61 72 74 20 6d 65 74  ternal start met
adb20 68 6f 64 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  hod... *  @param
adb30 20 7b 54 69 6d 65 7d 20 74 69 6d 65 0a 09 09 20   {Time} time... 
adb40 2a 20 20 40 70 72 69 76 61 74 65 0a 09 09 20 2a  *  @private... *
adb50 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 47 72 61 69  /..    Tone.Grai
adb60 6e 50 6c 61 79 65 72 2e 70 72 6f 74 6f 74 79 70  nPlayer.prototyp
adb70 65 2e 5f 73 74 6f 70 20 3d 20 66 75 6e 63 74 69  e._stop = functi
adb80 6f 6e 20 28 74 69 6d 65 29 20 7b 0a 09 20 20 20  on (time) {..   
adb90 20 20 20 20 20 74 68 69 73 2e 5f 63 6c 6f 63 6b       this._clock
adba0 2e 73 74 6f 70 28 74 69 6d 65 29 3b 0a 09 20 20  .stop(time);..  
adbb0 20 20 20 20 20 20 74 68 69 73 2e 5f 70 6c 61 79        this._play
adbc0 65 72 2e 73 74 6f 70 28 74 68 69 73 2e 62 75 66  er.stop(this.buf
adbd0 66 65 72 2c 20 74 69 6d 65 29 3b 0a 09 20 20 20  fer, time);..   
adbe0 20 20 20 20 20 74 68 69 73 2e 5f 6f 66 66 73 65       this._offse
adbf0 74 20 3d 20 30 3b 0a 09 20 20 20 20 7d 3b 0a 09  t = 0;..    };..
adc00 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 49 6e      /**... *  In
adc10 76 6f 6b 65 64 20 6f 6e 20 65 61 63 68 20 63 6c  voked on each cl
adc20 6f 63 6b 20 74 69 63 6b 2e 20 73 63 68 65 64 75  ock tick. schedu
adc30 6c 65 64 20 61 20 6e 65 77 0a 09 09 20 2a 20 20  led a new... *  
adc40 67 72 61 69 6e 20 61 74 20 74 68 69 73 20 74 69  grain at this ti
adc50 6d 65 2e 0a 09 09 20 2a 20 20 40 70 61 72 61 6d  me.... *  @param
adc60 20 20 7b 54 69 6d 65 7d 20 20 74 69 6d 65 20 0a    {Time}  time .
adc70 09 09 20 2a 20 20 40 70 72 69 76 61 74 65 0a 09  .. *  @private..
adc80 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 47  . */..    Tone.G
adc90 72 61 69 6e 50 6c 61 79 65 72 2e 70 72 6f 74 6f  rainPlayer.proto
adca0 74 79 70 65 2e 5f 74 69 63 6b 20 3d 20 66 75 6e  type._tick = fun
adcb0 63 74 69 6f 6e 20 28 74 69 6d 65 29 20 7b 0a 09  ction (time) {..
adcc0 20 20 20 20 20 20 20 20 76 61 72 20 62 75 66 66          var buff
adcd0 65 72 44 75 72 61 74 69 6f 6e 20 3d 20 74 68 69  erDuration = thi
adce0 73 2e 62 75 66 66 65 72 2e 64 75 72 61 74 69 6f  s.buffer.duratio
adcf0 6e 3b 0a 09 20 20 20 20 20 20 20 20 69 66 20 28  n;..        if (
add00 74 68 69 73 2e 6c 6f 6f 70 20 26 26 20 74 68 69  this.loop && thi
add10 73 2e 5f 6c 6f 6f 70 45 6e 64 20 3e 20 30 29 20  s._loopEnd > 0) 
add20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 62  {..            b
add30 75 66 66 65 72 44 75 72 61 74 69 6f 6e 20 3d 20  ufferDuration = 
add40 74 68 69 73 2e 5f 6c 6f 6f 70 45 6e 64 3b 0a 09  this._loopEnd;..
add50 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20          }..     
add60 20 20 20 76 61 72 20 64 72 69 66 74 20 3d 20 28     var drift = (
add70 4d 61 74 68 2e 72 61 6e 64 6f 6d 28 29 20 2a 20  Math.random() * 
add80 32 20 2d 20 31 29 20 2a 20 74 68 69 73 2e 64 72  2 - 1) * this.dr
add90 69 66 74 3b 0a 09 20 20 20 20 20 20 20 20 76 61  ift;..        va
adda0 72 20 6f 66 66 73 65 74 20 3d 20 74 68 69 73 2e  r offset = this.
addb0 5f 6f 66 66 73 65 74 20 2d 20 74 68 69 73 2e 5f  _offset - this._
addc0 6f 76 65 72 6c 61 70 20 2b 20 64 72 69 66 74 3b  overlap + drift;
addd0 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 64 65  ..        var de
adde0 74 75 6e 65 20 3d 20 74 68 69 73 2e 64 65 74 75  tune = this.detu
addf0 6e 65 20 2f 20 31 30 30 3b 0a 09 20 20 20 20 20  ne / 100;..     
ade00 20 20 20 76 61 72 20 6f 72 69 67 69 6e 61 6c 46     var originalF
ade10 61 64 65 49 6e 20 3d 20 74 68 69 73 2e 5f 70 6c  adeIn = this._pl
ade20 61 79 65 72 2e 66 61 64 65 49 6e 3b 0a 09 20 20  ayer.fadeIn;..  
ade30 20 20 20 20 20 20 69 66 20 28 74 68 69 73 2e 6c        if (this.l
ade40 6f 6f 70 20 26 26 20 74 68 69 73 2e 5f 6f 66 66  oop && this._off
ade50 73 65 74 20 3e 20 62 75 66 66 65 72 44 75 72 61  set > bufferDura
ade60 74 69 6f 6e 29 20 7b 0a 09 20 20 20 20 20 20 20  tion) {..       
ade70 20 20 20 20 20 2f 2f 70 6c 61 79 20 74 68 65 20       //play the 
ade80 65 6e 64 0a 09 20 20 20 20 20 20 20 20 20 20 20  end..           
ade90 20 76 61 72 20 65 6e 64 53 65 67 6d 65 6e 74 44   var endSegmentD
adea0 75 72 61 74 69 6f 6e 20 3d 20 74 68 69 73 2e 5f  uration = this._
adeb0 6f 66 66 73 65 74 20 2d 20 62 75 66 66 65 72 44  offset - bufferD
adec0 75 72 61 74 69 6f 6e 3b 0a 09 20 20 20 20 20 20  uration;..      
aded0 20 20 20 20 20 20 74 68 69 73 2e 5f 70 6c 61 79        this._play
adee0 65 72 2e 73 74 61 72 74 28 74 68 69 73 2e 62 75  er.start(this.bu
adef0 66 66 65 72 2c 20 74 69 6d 65 2c 20 6f 66 66 73  ffer, time, offs
adf00 65 74 2c 20 65 6e 64 53 65 67 6d 65 6e 74 44 75  et, endSegmentDu
adf10 72 61 74 69 6f 6e 20 2b 20 74 68 69 73 2e 5f 6f  ration + this._o
adf20 76 65 72 6c 61 70 2c 20 64 65 74 75 6e 65 29 3b  verlap, detune);
adf30 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
adf40 61 6e 64 20 70 6c 61 79 20 74 68 65 20 62 65 67  and play the beg
adf50 69 6e 6e 69 6e 67 20 0a 09 20 20 20 20 20 20 20  inning ..       
adf60 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20 74 68       offset = th
adf70 69 73 2e 5f 6f 66 66 73 65 74 20 25 20 62 75 66  is._offset % buf
adf80 66 65 72 44 75 72 61 74 69 6f 6e 3b 0a 09 20 20  ferDuration;..  
adf90 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f            this._
adfa0 6f 66 66 73 65 74 20 3d 20 74 68 69 73 2e 5f 6c  offset = this._l
adfb0 6f 6f 70 53 74 61 72 74 3b 0a 09 20 20 20 20 20  oopStart;..     
adfc0 20 20 20 20 20 20 20 74 68 69 73 2e 5f 70 6c 61         this._pla
adfd0 79 65 72 2e 66 61 64 65 49 6e 20 3d 20 30 3b 0a  yer.fadeIn = 0;.
adfe0 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
adff0 73 2e 5f 70 6c 61 79 65 72 2e 73 74 61 72 74 28  s._player.start(
ae000 74 68 69 73 2e 62 75 66 66 65 72 2c 20 74 69 6d  this.buffer, tim
ae010 65 20 2b 20 65 6e 64 53 65 67 6d 65 6e 74 44 75  e + endSegmentDu
ae020 72 61 74 69 6f 6e 2c 20 74 68 69 73 2e 5f 6f 66  ration, this._of
ae030 66 73 65 74 2c 20 6f 66 66 73 65 74 20 2b 20 74  fset, offset + t
ae040 68 69 73 2e 5f 6f 76 65 72 6c 61 70 2c 20 64 65  his._overlap, de
ae050 74 75 6e 65 29 3b 0a 09 20 20 20 20 20 20 20 20  tune);..        
ae060 7d 20 65 6c 73 65 20 69 66 20 28 74 68 69 73 2e  } else if (this.
ae070 5f 6f 66 66 73 65 74 20 3e 20 62 75 66 66 65 72  _offset > buffer
ae080 44 75 72 61 74 69 6f 6e 29 20 7b 0a 09 20 20 20  Duration) {..   
ae090 20 20 20 20 20 20 20 20 20 2f 2f 73 65 74 20 74           //set t
ae0a0 68 65 20 73 74 61 74 65 20 74 6f 20 73 74 6f 70  he state to stop
ae0b0 70 65 64 2e 20 0a 09 20 20 20 20 20 20 20 20 20  ped. ..         
ae0c0 20 20 20 74 68 69 73 2e 73 74 6f 70 28 74 69 6d     this.stop(tim
ae0d0 65 29 3b 0a 09 20 20 20 20 20 20 20 20 7d 20 65  e);..        } e
ae0e0 6c 73 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20  lse {..         
ae0f0 20 20 20 69 66 20 28 6f 66 66 73 65 74 20 3c 20     if (offset < 
ae100 30 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  0) {..          
ae110 20 20 20 20 20 20 74 68 69 73 2e 5f 70 6c 61 79        this._play
ae120 65 72 2e 66 61 64 65 49 6e 20 3d 20 4d 61 74 68  er.fadeIn = Math
ae130 2e 6d 61 78 28 74 68 69 73 2e 5f 70 6c 61 79 65  .max(this._playe
ae140 72 2e 66 61 64 65 49 6e 20 2b 20 6f 66 66 73 65  r.fadeIn + offse
ae150 74 2c 20 30 29 3b 0a 09 20 20 20 20 20 20 20 20  t, 0);..        
ae160 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 3d          offset =
ae170 20 30 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20   0;..           
ae180 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   }..            
ae190 74 68 69 73 2e 5f 70 6c 61 79 65 72 2e 73 74 61  this._player.sta
ae1a0 72 74 28 74 68 69 73 2e 62 75 66 66 65 72 2c 20  rt(this.buffer, 
ae1b0 74 69 6d 65 2c 20 6f 66 66 73 65 74 2c 20 74 68  time, offset, th
ae1c0 69 73 2e 67 72 61 69 6e 53 69 7a 65 20 2b 20 74  is.grainSize + t
ae1d0 68 69 73 2e 5f 6f 76 65 72 6c 61 70 2c 20 64 65  his._overlap, de
ae1e0 74 75 6e 65 29 3b 0a 09 20 20 20 20 20 20 20 20  tune);..        
ae1f0 7d 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e  }..        this.
ae200 5f 70 6c 61 79 65 72 2e 66 61 64 65 49 6e 20 3d  _player.fadeIn =
ae210 20 6f 72 69 67 69 6e 61 6c 46 61 64 65 49 6e 3b   originalFadeIn;
ae220 0a 09 20 20 20 20 20 20 20 20 2f 2f 69 6e 63 72  ..        //incr
ae230 65 6d 65 6e 74 20 74 68 65 20 6f 66 66 73 65 74  ement the offset
ae240 0a 09 20 20 20 20 20 20 20 20 76 61 72 20 64 75  ..        var du
ae250 72 61 74 69 6f 6e 20 3d 20 74 68 69 73 2e 5f 63  ration = this._c
ae260 6c 6f 63 6b 2e 5f 6e 65 78 74 54 69 63 6b 20 2d  lock._nextTick -
ae270 20 74 69 6d 65 3b 0a 09 20 20 20 20 20 20 20 20   time;..        
ae280 74 68 69 73 2e 5f 6f 66 66 73 65 74 20 2b 3d 20  this._offset += 
ae290 64 75 72 61 74 69 6f 6e 20 2a 20 74 68 69 73 2e  duration * this.
ae2a0 5f 70 6c 61 79 62 61 63 6b 52 61 74 65 3b 0a 09  _playbackRate;..
ae2b0 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a 0a      };..    /**.
ae2c0 09 09 20 2a 20 20 4a 75 6d 70 20 74 6f 20 61 20  .. *  Jump to a 
ae2d0 73 70 65 63 69 66 69 63 20 74 69 6d 65 20 61 6e  specific time an
ae2e0 64 20 70 6c 61 79 20 69 74 2e 0a 09 09 20 2a 20  d play it.... * 
ae2f0 20 40 70 61 72 61 6d 20 20 7b 54 69 6d 65 7d 20   @param  {Time} 
ae300 20 6f 66 66 73 65 74 20 20 54 68 65 20 6f 66 66   offset  The off
ae310 73 65 74 20 74 6f 20 6a 75 6d 70 20 74 6f 2e 0a  set to jump to..
ae320 09 09 20 2a 20 20 40 70 61 72 61 6d 20 7b 54 69  .. *  @param {Ti
ae330 6d 65 3d 7d 20 74 69 6d 65 20 57 68 65 6e 20 74  me=} time When t
ae340 6f 20 6d 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e  o make the jump.
ae350 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 20  ... *  @return  
ae360 7b 5b 74 79 70 65 5d 7d 20 20 5b 64 65 73 63 72  {[type]}  [descr
ae370 69 70 74 69 6f 6e 5d 0a 09 09 20 2a 2f 0a 09 20  iption]... */.. 
ae380 20 20 20 54 6f 6e 65 2e 47 72 61 69 6e 50 6c 61     Tone.GrainPla
ae390 79 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e 73 63  yer.prototype.sc
ae3a0 72 75 62 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  rub = function (
ae3b0 6f 66 66 73 65 74 2c 20 74 69 6d 65 29 20 7b 0a  offset, time) {.
ae3c0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6f  .        this._o
ae3d0 66 66 73 65 74 20 3d 20 74 68 69 73 2e 74 6f 53  ffset = this.toS
ae3e0 65 63 6f 6e 64 73 28 6f 66 66 73 65 74 29 3b 0a  econds(offset);.
ae3f0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 74  .        this._t
ae400 69 63 6b 28 74 68 69 73 2e 74 6f 53 65 63 6f 6e  ick(this.toSecon
ae410 64 73 28 74 69 6d 65 29 29 3b 0a 09 20 20 20 20  ds(time));..    
ae420 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 3b      return this;
ae430 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a  ..    };..    /*
ae440 2a 0a 09 09 20 2a 20 54 68 65 20 70 6c 61 79 62  *... * The playb
ae450 61 63 6b 20 72 61 74 65 20 6f 66 20 74 68 65 20  ack rate of the 
ae460 73 61 6d 70 6c 65 0a 09 09 20 2a 20 40 6d 65 6d  sample... * @mem
ae470 62 65 72 4f 66 20 54 6f 6e 65 2e 47 72 61 69 6e  berOf Tone.Grain
ae480 50 6c 61 79 65 72 23 0a 09 09 20 2a 20 40 74 79  Player#... * @ty
ae490 70 65 20 7b 50 6f 73 69 74 69 76 65 7d 0a 09 09  pe {Positive}...
ae4a0 20 2a 20 40 6e 61 6d 65 20 70 6c 61 79 62 61 63   * @name playbac
ae4b0 6b 52 61 74 65 0a 09 09 20 2a 2f 0a 09 20 20 20  kRate... */..   
ae4c0 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72   Object.definePr
ae4d0 6f 70 65 72 74 79 28 54 6f 6e 65 2e 47 72 61 69  operty(Tone.Grai
ae4e0 6e 50 6c 61 79 65 72 2e 70 72 6f 74 6f 74 79 70  nPlayer.prototyp
ae4f0 65 2c 20 27 70 6c 61 79 62 61 63 6b 52 61 74 65  e, 'playbackRate
ae500 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65  ', {..        ge
ae510 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b  t: function () {
ae520 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
ae530 74 75 72 6e 20 74 68 69 73 2e 5f 70 6c 61 79 62  turn this._playb
ae540 61 63 6b 52 61 74 65 3b 0a 09 20 20 20 20 20 20  ackRate;..      
ae550 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65    },..        se
ae560 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 72 61 74  t: function (rat
ae570 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  e) {..          
ae580 20 20 74 68 69 73 2e 5f 70 6c 61 79 62 61 63 6b    this._playback
ae590 52 61 74 65 20 3d 20 72 61 74 65 3b 0a 09 20 20  Rate = rate;..  
ae5a0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 67            this.g
ae5b0 72 61 69 6e 53 69 7a 65 20 3d 20 74 68 69 73 2e  rainSize = this.
ae5c0 5f 67 72 61 69 6e 53 69 7a 65 3b 0a 09 20 20 20  _grainSize;..   
ae5d0 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a       }..    });.
ae5e0 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68  .    /**... * Th
ae5f0 65 20 6c 6f 6f 70 20 73 74 61 72 74 20 74 69 6d  e loop start tim
ae600 65 2e 20 0a 09 09 20 2a 20 40 6d 65 6d 62 65 72  e. ... * @member
ae610 4f 66 20 54 6f 6e 65 2e 47 72 61 69 6e 50 6c 61  Of Tone.GrainPla
ae620 79 65 72 23 0a 09 09 20 2a 20 40 74 79 70 65 20  yer#... * @type 
ae630 7b 54 69 6d 65 7d 0a 09 09 20 2a 20 40 6e 61 6d  {Time}... * @nam
ae640 65 20 6c 6f 6f 70 53 74 61 72 74 0a 09 09 20 2a  e loopStart... *
ae650 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65  /..    Object.de
ae660 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e  fineProperty(Ton
ae670 65 2e 47 72 61 69 6e 50 6c 61 79 65 72 2e 70 72  e.GrainPlayer.pr
ae680 6f 74 6f 74 79 70 65 2c 20 27 6c 6f 6f 70 53 74  ototype, 'loopSt
ae690 61 72 74 27 2c 20 7b 0a 09 20 20 20 20 20 20 20  art', {..       
ae6a0 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   get: function (
ae6b0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
ae6c0 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 6c 6f   return this._lo
ae6d0 6f 70 53 74 61 72 74 3b 0a 09 20 20 20 20 20 20  opStart;..      
ae6e0 20 20 7d 2c 0a 09 20 20 20 20 20 20 20 20 73 65    },..        se
ae6f0 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 74 69 6d  t: function (tim
ae700 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  e) {..          
ae710 20 20 74 68 69 73 2e 5f 6c 6f 6f 70 53 74 61 72    this._loopStar
ae720 74 20 3d 20 74 68 69 73 2e 74 6f 53 65 63 6f 6e  t = this.toSecon
ae730 64 73 28 74 69 6d 65 29 3b 0a 09 20 20 20 20 20  ds(time);..     
ae740 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20     }..    });.. 
ae750 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 54 68 65 20     /**... * The 
ae760 6c 6f 6f 70 20 65 6e 64 20 74 69 6d 65 2e 20 0a  loop end time. .
ae770 09 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54  .. * @memberOf T
ae780 6f 6e 65 2e 47 72 61 69 6e 50 6c 61 79 65 72 23  one.GrainPlayer#
ae790 0a 09 09 20 2a 20 40 74 79 70 65 20 7b 54 69 6d  ... * @type {Tim
ae7a0 65 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 6c 6f  e}... * @name lo
ae7b0 6f 70 45 6e 64 0a 09 09 20 2a 2f 0a 09 20 20 20  opEnd... */..   
ae7c0 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72   Object.definePr
ae7d0 6f 70 65 72 74 79 28 54 6f 6e 65 2e 47 72 61 69  operty(Tone.Grai
ae7e0 6e 50 6c 61 79 65 72 2e 70 72 6f 74 6f 74 79 70  nPlayer.prototyp
ae7f0 65 2c 20 27 6c 6f 6f 70 45 6e 64 27 2c 20 7b 0a  e, 'loopEnd', {.
ae800 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75  .        get: fu
ae810 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20  nction () {..   
ae820 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
ae830 74 68 69 73 2e 5f 6c 6f 6f 70 45 6e 64 3b 0a 09  this._loopEnd;..
ae840 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20          },..    
ae850 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f      set: functio
ae860 6e 20 28 74 69 6d 65 29 20 7b 0a 09 20 20 20 20  n (time) {..    
ae870 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6c 6f          this._lo
ae880 6f 70 45 6e 64 20 3d 20 74 68 69 73 2e 74 6f 53  opEnd = this.toS
ae890 65 63 6f 6e 64 73 28 74 69 6d 65 29 3b 0a 09 20  econds(time);.. 
ae8a0 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29         }..    })
ae8b0 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
ae8c0 54 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 68  The direction th
ae8d0 65 20 62 75 66 66 65 72 20 73 68 6f 75 6c 64 20  e buffer should 
ae8e0 70 6c 61 79 20 69 6e 0a 09 09 20 2a 20 40 6d 65  play in... * @me
ae8f0 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 47 72 61 69  mberOf Tone.Grai
ae900 6e 50 6c 61 79 65 72 23 0a 09 09 20 2a 20 40 74  nPlayer#... * @t
ae910 79 70 65 20 7b 62 6f 6f 6c 65 61 6e 7d 0a 09 09  ype {boolean}...
ae920 20 2a 20 40 6e 61 6d 65 20 72 65 76 65 72 73 65   * @name reverse
ae930 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65  ... */..    Obje
ae940 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74  ct.definePropert
ae950 79 28 54 6f 6e 65 2e 47 72 61 69 6e 50 6c 61 79  y(Tone.GrainPlay
ae960 65 72 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 72  er.prototype, 'r
ae970 65 76 65 72 73 65 27 2c 20 7b 0a 09 20 20 20 20  everse', {..    
ae980 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f      get: functio
ae990 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
ae9a0 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
ae9b0 62 75 66 66 65 72 2e 72 65 76 65 72 73 65 3b 0a  buffer.reverse;.
ae9c0 09 20 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20  .        },..   
ae9d0 20 20 20 20 20 73 65 74 3a 20 66 75 6e 63 74 69       set: functi
ae9e0 6f 6e 20 28 72 65 76 29 20 7b 0a 09 20 20 20 20  on (rev) {..    
ae9f0 20 20 20 20 20 20 20 20 74 68 69 73 2e 62 75 66          this.buf
aea00 66 65 72 2e 72 65 76 65 72 73 65 20 3d 20 72 65  fer.reverse = re
aea10 76 3b 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20  v;..        }.. 
aea20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a     });..    /**.
aea30 09 09 20 2a 20 54 68 65 20 73 69 7a 65 20 6f 66  .. * The size of
aea40 20 65 61 63 68 20 63 68 75 6e 6b 20 6f 66 20 61   each chunk of a
aea50 75 64 69 6f 20 74 68 61 74 20 74 68 65 20 0a 09  udio that the ..
aea60 09 20 2a 20 62 75 66 66 65 72 20 69 73 20 63 68  . * buffer is ch
aea70 6f 70 70 65 64 20 69 6e 74 6f 20 61 6e 64 20 70  opped into and p
aea80 6c 61 79 65 64 20 62 61 63 6b 20 61 74 2e 0a 09  layed back at...
aea90 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f  . * @memberOf To
aeaa0 6e 65 2e 47 72 61 69 6e 50 6c 61 79 65 72 23 0a  ne.GrainPlayer#.
aeab0 09 09 20 2a 20 40 74 79 70 65 20 7b 54 69 6d 65  .. * @type {Time
aeac0 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 67 72 61  }... * @name gra
aead0 69 6e 53 69 7a 65 0a 09 09 20 2a 2f 0a 09 20 20  inSize... */..  
aeae0 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50    Object.defineP
aeaf0 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 47 72 61  roperty(Tone.Gra
aeb00 69 6e 50 6c 61 79 65 72 2e 70 72 6f 74 6f 74 79  inPlayer.prototy
aeb10 70 65 2c 20 27 67 72 61 69 6e 53 69 7a 65 27 2c  pe, 'grainSize',
aeb20 20 7b 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a   {..        get:
aeb30 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09   function () {..
aeb40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
aeb50 72 6e 20 74 68 69 73 2e 5f 67 72 61 69 6e 53 69  rn this._grainSi
aeb60 7a 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a  ze;..        },.
aeb70 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66 75  .        set: fu
aeb80 6e 63 74 69 6f 6e 20 28 73 69 7a 65 29 20 7b 0a  nction (size) {.
aeb90 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
aeba0 73 2e 5f 67 72 61 69 6e 53 69 7a 65 20 3d 20 74  s._grainSize = t
aebb0 68 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28 73 69  his.toSeconds(si
aebc0 7a 65 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20  ze);..          
aebd0 20 20 74 68 69 73 2e 5f 63 6c 6f 63 6b 2e 66 72    this._clock.fr
aebe0 65 71 75 65 6e 63 79 2e 76 61 6c 75 65 20 3d 20  equency.value = 
aebf0 74 68 69 73 2e 5f 70 6c 61 79 62 61 63 6b 52 61  this._playbackRa
aec00 74 65 20 2f 20 74 68 69 73 2e 5f 67 72 61 69 6e  te / this._grain
aec10 53 69 7a 65 3b 0a 09 20 20 20 20 20 20 20 20 7d  Size;..        }
aec20 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f  ..    });..    /
aec30 2a 2a 0a 09 09 20 2a 20 54 68 69 73 20 69 73 20  **... * This is 
aec40 74 68 65 20 64 75 72 61 74 69 6f 6e 20 6f 66 20  the duration of 
aec50 74 68 65 20 63 72 6f 73 73 2d 66 61 64 65 20 62  the cross-fade b
aec60 65 74 77 65 65 6e 20 0a 09 09 20 2a 20 73 75 63  etween ... * suc
aec70 65 73 73 69 76 65 20 67 72 61 69 6e 73 2e 0a 09  essive grains...
aec80 09 20 2a 20 40 6d 65 6d 62 65 72 4f 66 20 54 6f  . * @memberOf To
aec90 6e 65 2e 47 72 61 69 6e 50 6c 61 79 65 72 23 0a  ne.GrainPlayer#.
aeca0 09 09 20 2a 20 40 74 79 70 65 20 7b 54 69 6d 65  .. * @type {Time
aecb0 7d 0a 09 09 20 2a 20 40 6e 61 6d 65 20 6f 76 65  }... * @name ove
aecc0 72 6c 61 70 0a 09 09 20 2a 2f 0a 09 20 20 20 20  rlap... */..    
aecd0 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f  Object.definePro
aece0 70 65 72 74 79 28 54 6f 6e 65 2e 47 72 61 69 6e  perty(Tone.Grain
aecf0 50 6c 61 79 65 72 2e 70 72 6f 74 6f 74 79 70 65  Player.prototype
aed00 2c 20 27 6f 76 65 72 6c 61 70 27 2c 20 7b 0a 09  , 'overlap', {..
aed10 20 20 20 20 20 20 20 20 67 65 74 3a 20 66 75 6e          get: fun
aed20 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
aed30 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
aed40 68 69 73 2e 5f 6f 76 65 72 6c 61 70 3b 0a 09 20  his._overlap;.. 
aed50 20 20 20 20 20 20 20 7d 2c 0a 09 20 20 20 20 20         },..     
aed60 20 20 20 73 65 74 3a 20 66 75 6e 63 74 69 6f 6e     set: function
aed70 20 28 74 69 6d 65 29 20 7b 0a 09 20 20 20 20 20   (time) {..     
aed80 20 20 20 20 20 20 20 74 69 6d 65 20 3d 20 74 68         time = th
aed90 69 73 2e 74 6f 53 65 63 6f 6e 64 73 28 74 69 6d  is.toSeconds(tim
aeda0 65 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e);..           
aedb0 20 74 68 69 73 2e 5f 6f 76 65 72 6c 61 70 20 3d   this._overlap =
aedc0 20 74 69 6d 65 3b 0a 09 20 20 20 20 20 20 20 20   time;..        
aedd0 20 20 20 20 69 66 20 28 74 68 69 73 2e 5f 6f 76      if (this._ov
aede0 65 72 6c 61 70 20 3c 20 30 29 20 7b 0a 09 20 20  erlap < 0) {..  
aedf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
aee00 69 73 2e 5f 70 6c 61 79 65 72 2e 66 61 64 65 49  is._player.fadeI
aee10 6e 20 3d 20 30 2e 30 31 3b 0a 09 20 20 20 20 20  n = 0.01;..     
aee20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
aee30 5f 70 6c 61 79 65 72 2e 66 61 64 65 4f 75 74 20  _player.fadeOut 
aee40 3d 20 30 2e 30 31 3b 0a 09 20 20 20 20 20 20 20  = 0.01;..       
aee50 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 20       } else {.. 
aee60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
aee70 68 69 73 2e 5f 70 6c 61 79 65 72 2e 66 61 64 65  his._player.fade
aee80 49 6e 20 3d 20 74 69 6d 65 3b 0a 09 20 20 20 20  In = time;..    
aee90 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
aeea0 2e 5f 70 6c 61 79 65 72 2e 66 61 64 65 4f 75 74  ._player.fadeOut
aeeb0 20 3d 20 74 69 6d 65 3b 0a 09 20 20 20 20 20 20   = time;..      
aeec0 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20        }..       
aeed0 20 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20   }..    });..   
aeee0 20 2f 2a 2a 0a 09 09 20 2a 20 43 6c 65 61 6e 20   /**... * Clean 
aeef0 75 70 0a 09 09 20 2a 20 40 72 65 74 75 72 6e 20  up... * @return 
aef00 7b 54 6f 6e 65 2e 47 72 61 69 6e 50 6c 61 79 65  {Tone.GrainPlaye
aef10 72 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20  r} this... */.. 
aef20 20 20 20 54 6f 6e 65 2e 47 72 61 69 6e 50 6c 61     Tone.GrainPla
aef30 79 65 72 2e 70 72 6f 74 6f 74 79 70 65 2e 64 69  yer.prototype.di
aef40 73 70 6f 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e  spose = function
aef50 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 54   () {..        T
aef60 6f 6e 65 2e 53 6f 75 72 63 65 2e 70 72 6f 74 6f  one.Source.proto
aef70 74 79 70 65 2e 64 69 73 70 6f 73 65 2e 63 61 6c  type.dispose.cal
aef80 6c 28 74 68 69 73 29 3b 0a 09 20 20 20 20 20 20  l(this);..      
aef90 20 20 74 68 69 73 2e 62 75 66 66 65 72 2e 64 69    this.buffer.di
aefa0 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
aefb0 20 20 74 68 69 73 2e 62 75 66 66 65 72 20 3d 20    this.buffer = 
aefc0 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74  null;..        t
aefd0 68 69 73 2e 5f 70 6c 61 79 65 72 2e 64 69 73 70  his._player.disp
aefe0 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20  ose();..        
aeff0 74 68 69 73 2e 5f 70 6c 61 79 65 72 20 3d 20 6e  this._player = n
af000 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 74 68  ull;..        th
af010 69 73 2e 5f 63 6c 6f 63 6b 2e 64 69 73 70 6f 73  is._clock.dispos
af020 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  e();..        th
af030 69 73 2e 5f 63 6c 6f 63 6b 20 3d 20 6e 75 6c 6c  is._clock = null
af040 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
af050 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a  n this;..    };.
af060 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65  .    return Tone
af070 2e 47 72 61 69 6e 50 6c 61 79 65 72 3b 0a 09 7d  .GrainPlayer;..}
af080 29 3b 0a 09 4d 6f 64 75 6c 65 28 66 75 6e 63 74  );..Module(funct
af090 69 6f 6e 20 28 54 6f 6e 65 29 20 7b 0a 09 20 20  ion (Tone) {..  
af0a0 20 20 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a    ..    /**... *
af0b0 20 20 40 63 6c 61 73 73 20 20 54 6f 6e 65 2e 55    @class  Tone.U
af0c0 73 65 72 4d 65 64 69 61 20 75 73 65 73 20 4d 65  serMedia uses Me
af0d0 64 69 61 44 65 76 69 63 65 73 2e 67 65 74 55 73  diaDevices.getUs
af0e0 65 72 4d 65 64 69 61 20 74 6f 20 6f 70 65 6e 20  erMedia to open 
af0f0 75 70 0a 09 09 20 2a 20 20 20 20 20 20 20 20 20  up... *         
af100 20 61 6e 64 20 65 78 74 65 72 6e 61 6c 20 6d 69   and external mi
af110 63 72 6f 70 68 6f 6e 65 20 6f 72 20 61 75 64 69  crophone or audi
af120 6f 20 69 6e 70 75 74 2e 20 43 68 65 63 6b 20 0a  o input. Check .
af130 09 09 20 2a 20 20 20 20 20 20 20 20 20 20 5b 4d  .. *          [M
af140 65 64 69 61 44 65 76 69 63 65 73 20 41 50 49 20  ediaDevices API 
af150 53 75 70 70 6f 72 74 5d 28 68 74 74 70 73 3a 2f  Support](https:/
af160 2f 64 65 76 65 6c 6f 70 65 72 2e 6d 6f 7a 69 6c  /developer.mozil
af170 6c 61 2e 6f 72 67 2f 65 6e 2d 55 53 2f 64 6f 63  la.org/en-US/doc
af180 73 2f 57 65 62 2f 41 50 49 2f 4d 65 64 69 61 44  s/Web/API/MediaD
af190 65 76 69 63 65 73 2f 67 65 74 55 73 65 72 4d 65  evices/getUserMe
af1a0 64 69 61 29 0a 09 09 20 2a 20 20 20 20 20 20 20  dia)... *       
af1b0 20 20 20 74 6f 20 73 65 65 20 77 68 69 63 68 20     to see which 
af1c0 62 72 6f 77 73 65 72 73 20 61 72 65 20 73 75 70  browsers are sup
af1d0 70 6f 72 74 65 64 2e 20 41 63 63 65 73 73 20 74  ported. Access t
af1e0 6f 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 69 6e  o an external in
af1f0 70 75 74 0a 09 09 20 2a 20 20 20 20 20 20 20 20  put... *        
af200 20 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20    is limited to 
af210 73 65 63 75 72 65 20 28 48 54 54 50 53 29 20 63  secure (HTTPS) c
af220 6f 6e 6e 65 63 74 69 6f 6e 73 2e 0a 09 09 20 2a  onnections.... *
af230 20 20 20 20 20 20 20 20 20 0a 09 09 20 2a 20 20           ... *  
af240 40 63 6f 6e 73 74 72 75 63 74 6f 72 0a 09 09 20  @constructor... 
af250 2a 20 20 40 65 78 74 65 6e 64 73 20 7b 54 6f 6e  *  @extends {Ton
af260 65 7d 0a 09 09 20 2a 20 20 40 70 61 72 61 6d 20  e}... *  @param 
af270 7b 44 65 63 69 62 65 6c 73 3d 7d 20 76 6f 6c 75  {Decibels=} volu
af280 6d 65 20 54 68 65 20 6c 65 76 65 6c 20 6f 66 20  me The level of 
af290 74 68 65 20 69 6e 70 75 74 0a 09 09 20 2a 20 20  the input... *  
af2a0 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 2f 2f  @example... * //
af2b0 6c 69 73 74 20 74 68 65 20 69 6e 70 75 74 73 20  list the inputs 
af2c0 61 6e 64 20 6f 70 65 6e 20 74 68 65 20 74 68 69  and open the thi
af2d0 72 64 20 6f 6e 65 0a 09 09 20 2a 20 76 61 72 20  rd one... * var 
af2e0 6d 6f 74 75 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  motu = new Tone.
af2f0 55 73 65 72 4d 65 64 69 61 28 29 3b 0a 09 09 20  UserMedia();... 
af300 2a 20 0a 09 09 20 2a 20 2f 2f 6f 70 65 6e 69 6e  * ... * //openin
af310 67 20 74 68 65 20 69 6e 70 75 74 20 61 73 6b 73  g the input asks
af320 20 74 68 65 20 75 73 65 72 20 74 6f 20 61 63 74   the user to act
af330 69 76 61 74 65 20 74 68 65 69 72 20 6d 69 63 0a  ivate their mic.
af340 09 09 20 2a 20 6d 6f 74 75 2e 6f 70 65 6e 28 29  .. * motu.open()
af350 2e 74 68 65 6e 28 66 75 6e 63 74 69 6f 6e 28 29  .then(function()
af360 7b 0a 09 09 20 2a 20 09 2f 2f 6f 70 65 6e 69 6e  {... * .//openin
af370 67 20 69 73 20 61 63 74 69 76 61 74 65 73 20 74  g is activates t
af380 68 65 20 6d 69 63 72 6f 70 68 6f 6e 65 0a 09 09  he microphone...
af390 20 2a 20 09 2f 2f 73 74 61 72 74 69 6e 67 20 6c   * .//starting l
af3a0 65 74 73 20 61 75 64 69 6f 20 74 68 72 6f 75 67  ets audio throug
af3b0 68 0a 09 09 20 2a 20 09 6d 6f 74 75 2e 73 74 61  h... * .motu.sta
af3c0 72 74 28 31 30 29 3b 0a 09 09 20 2a 20 7d 29 3b  rt(10);... * });
af3d0 0a 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65  ... */..    Tone
af3e0 2e 55 73 65 72 4d 65 64 69 61 20 3d 20 66 75 6e  .UserMedia = fun
af3f0 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20 20 20  ction () {..    
af400 20 20 20 20 76 61 72 20 6f 70 74 69 6f 6e 73 20      var options 
af410 3d 20 74 68 69 73 2e 6f 70 74 69 6f 6e 73 4f 62  = this.optionsOb
af420 6a 65 63 74 28 61 72 67 75 6d 65 6e 74 73 2c 20  ject(arguments, 
af430 5b 27 76 6f 6c 75 6d 65 27 5d 2c 20 54 6f 6e 65  ['volume'], Tone
af440 2e 55 73 65 72 4d 65 64 69 61 2e 64 65 66 61 75  .UserMedia.defau
af450 6c 74 73 29 3b 0a 09 20 20 20 20 20 20 20 20 2f  lts);..        /
af460 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 4d 65  **.... *  The Me
af470 64 69 61 53 74 72 65 61 6d 4e 6f 64 65 20 0a 09  diaStreamNode ..
af480 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4d 65 64  .. *  @type {Med
af490 69 61 53 74 72 65 61 6d 41 75 64 69 6f 53 6f 75  iaStreamAudioSou
af4a0 72 63 65 4e 6f 64 65 7d 0a 09 09 09 20 2a 20 20  rceNode}.... *  
af4b0 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a  @private.... */.
af4c0 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d  .        this._m
af4d0 65 64 69 61 53 74 72 65 61 6d 20 3d 20 6e 75 6c  ediaStream = nul
af4e0 6c 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a 0a  l;..        /**.
af4f0 09 09 09 20 2a 20 20 54 68 65 20 6d 65 64 69 61  ... *  The media
af500 20 73 74 72 65 61 6d 20 63 72 65 61 74 65 64 20   stream created 
af510 62 79 20 67 65 74 55 73 65 72 4d 65 64 69 61 2e  by getUserMedia.
af520 0a 09 09 09 20 2a 20 20 40 74 79 70 65 20 7b 4c  .... *  @type {L
af530 6f 63 61 6c 4d 65 64 69 61 53 74 72 65 61 6d 7d  ocalMediaStream}
af540 0a 09 09 09 20 2a 20 20 40 70 72 69 76 61 74 65  .... *  @private
af550 0a 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20  .... */..       
af560 20 74 68 69 73 2e 5f 73 74 72 65 61 6d 20 3d 20   this._stream = 
af570 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 2f  null;..        /
af580 2a 2a 0a 09 09 09 20 2a 20 20 54 68 65 20 6f 70  **.... *  The op
af590 65 6e 20 64 65 76 69 63 65 0a 09 09 09 20 2a 20  en device.... * 
af5a0 20 40 74 79 70 65 20 20 7b 4d 65 64 69 61 44 65   @type  {MediaDe
af5b0 76 69 63 65 49 6e 66 6f 7d 0a 09 09 09 20 2a 20  viceInfo}.... * 
af5c0 20 40 70 72 69 76 61 74 65 0a 09 09 09 20 2a 2f   @private.... */
af5d0 0a 09 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f  ..        this._
af5e0 64 65 76 69 63 65 20 3d 20 6e 75 6c 6c 3b 0a 09  device = null;..
af5f0 20 20 20 20 20 20 20 20 2f 2a 2a 0a 09 09 09 20          /**.... 
af600 2a 20 20 54 68 65 20 6f 75 74 70 75 74 20 76 6f  *  The output vo
af610 6c 75 6d 65 20 6e 6f 64 65 0a 09 09 09 20 2a 20  lume node.... * 
af620 20 40 74 79 70 65 20 20 7b 54 6f 6e 65 2e 56 6f   @type  {Tone.Vo
af630 6c 75 6d 65 7d 0a 09 09 09 20 2a 20 20 40 70 72  lume}.... *  @pr
af640 69 76 61 74 65 0a 09 09 09 20 2a 2f 0a 09 20 20  ivate.... */..  
af650 20 20 20 20 20 20 74 68 69 73 2e 5f 76 6f 6c 75        this._volu
af660 6d 65 20 3d 20 74 68 69 73 2e 6f 75 74 70 75 74  me = this.output
af670 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 56 6f 6c 75   = new Tone.Volu
af680 6d 65 28 6f 70 74 69 6f 6e 73 2e 76 6f 6c 75 6d  me(options.volum
af690 65 29 3b 0a 09 20 20 20 20 20 20 20 20 2f 2a 2a  e);..        /**
af6a0 0a 09 09 09 20 2a 20 54 68 65 20 76 6f 6c 75 6d  .... * The volum
af6b0 65 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20  e of the output 
af6c0 69 6e 20 64 65 63 69 62 65 6c 73 2e 0a 09 09 09  in decibels.....
af6d0 20 2a 20 40 74 79 70 65 20 7b 44 65 63 69 62 65   * @type {Decibe
af6e0 6c 73 7d 0a 09 09 09 20 2a 20 40 73 69 67 6e 61  ls}.... * @signa
af6f0 6c 0a 09 09 09 20 2a 20 40 65 78 61 6d 70 6c 65  l.... * @example
af700 0a 09 09 09 20 2a 20 69 6e 70 75 74 2e 76 6f 6c  .... * input.vol
af710 75 6d 65 2e 76 61 6c 75 65 20 3d 20 2d 36 3b 0a  ume.value = -6;.
af720 09 09 09 20 2a 2f 0a 09 20 20 20 20 20 20 20 20  ... */..        
af730 74 68 69 73 2e 76 6f 6c 75 6d 65 20 3d 20 74 68  this.volume = th
af740 69 73 2e 5f 76 6f 6c 75 6d 65 2e 76 6f 6c 75 6d  is._volume.volum
af750 65 3b 0a 09 20 20 20 20 20 20 20 20 74 68 69 73  e;..        this
af760 2e 5f 72 65 61 64 4f 6e 6c 79 28 27 76 6f 6c 75  ._readOnly('volu
af770 6d 65 27 29 3b 0a 09 20 20 20 20 20 20 20 20 74  me');..        t
af780 68 69 73 2e 6d 75 74 65 20 3d 20 6f 70 74 69 6f  his.mute = optio
af790 6e 73 2e 6d 75 74 65 3b 0a 09 20 20 20 20 7d 3b  ns.mute;..    };
af7a0 0a 09 20 20 20 20 54 6f 6e 65 2e 65 78 74 65 6e  ..    Tone.exten
af7b0 64 28 54 6f 6e 65 2e 55 73 65 72 4d 65 64 69 61  d(Tone.UserMedia
af7c0 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a  );..    /**... *
af7d0 20 74 68 65 20 64 65 66 61 75 6c 74 20 70 61 72   the default par
af7e0 61 6d 65 74 65 72 73 0a 09 09 20 2a 20 40 74 79  ameters... * @ty
af7f0 70 65 20 7b 4f 62 6a 65 63 74 7d 0a 09 09 20 2a  pe {Object}... *
af800 2f 0a 09 20 20 20 20 54 6f 6e 65 2e 55 73 65 72  /..    Tone.User
af810 4d 65 64 69 61 2e 64 65 66 61 75 6c 74 73 20 3d  Media.defaults =
af820 20 7b 0a 09 20 20 20 20 20 20 20 20 27 76 6f 6c   {..        'vol
af830 75 6d 65 27 3a 20 30 2c 0a 09 20 20 20 20 20 20  ume': 0,..      
af840 20 20 27 6d 75 74 65 27 3a 20 66 61 6c 73 65 0a    'mute': false.
af850 09 20 20 20 20 7d 3b 0a 09 20 20 20 20 2f 2a 2a  .    };..    /**
af860 0a 09 09 20 2a 20 20 4f 70 65 6e 20 74 68 65 20  ... *  Open the 
af870 6d 65 64 69 61 20 73 74 72 65 61 6d 2e 20 49 66  media stream. If
af880 20 61 20 73 74 72 69 6e 67 20 69 73 20 70 61 73   a string is pas
af890 73 65 64 20 69 6e 2c 20 69 74 20 69 73 20 61 73  sed in, it is as
af8a0 73 75 6d 65 64 0a 09 09 20 2a 20 20 74 6f 20 62  sumed... *  to b
af8b0 65 20 74 68 65 20 6c 61 62 65 6c 20 6f 72 20 69  e the label or i
af8c0 64 20 6f 66 20 74 68 65 20 73 74 72 65 61 6d 2c  d of the stream,
af8d0 20 69 66 20 61 20 6e 75 6d 62 65 72 20 69 73 20   if a number is 
af8e0 70 61 73 73 65 64 20 69 6e 2c 0a 09 09 20 2a 20  passed in,... * 
af8f0 20 69 74 20 69 73 20 74 68 65 20 69 6e 70 75 74   it is the input
af900 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
af910 74 72 65 61 6d 2e 0a 09 09 20 2a 20 20 40 70 61  tream.... *  @pa
af920 72 61 6d 20 20 7b 53 74 72 69 6e 67 7c 4e 75 6d  ram  {String|Num
af930 62 65 72 7d 20 5b 6c 61 62 65 6c 4f 72 49 64 3d  ber} [labelOrId=
af940 22 64 65 66 61 75 6c 74 22 5d 20 54 68 65 20 6c  "default"] The l
af950 61 62 65 6c 20 6f 72 20 69 64 20 6f 66 20 74 68  abel or id of th
af960 65 20 61 75 64 69 6f 20 69 6e 70 75 74 20 6d 65  e audio input me
af970 64 69 61 20 64 65 76 69 63 65 2e 20 0a 09 09 20  dia device. ... 
af980 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
af990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af9b0 20 57 69 74 68 20 6e 6f 20 61 72 67 75 6d 65 6e   With no argumen
af9c0 74 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20 73  t, the default s
af9d0 74 72 65 61 6d 20 69 73 20 6f 70 65 6e 65 64 2e  tream is opened.
af9e0 0a 09 09 20 2a 20 20 40 72 65 74 75 72 6e 20 7b  ... *  @return {
af9f0 50 72 6f 6d 69 73 65 7d 20 54 68 65 20 70 72 6f  Promise} The pro
afa00 6d 69 73 65 20 69 73 20 72 65 73 6f 6c 76 65 64  mise is resolved
afa10 20 77 68 65 6e 20 74 68 65 20 73 74 72 65 61 6d   when the stream
afa20 20 69 73 20 6f 70 65 6e 2e 0a 09 09 20 2a 2f 0a   is open.... */.
afa30 09 20 20 20 20 54 6f 6e 65 2e 55 73 65 72 4d 65  .    Tone.UserMe
afa40 64 69 61 2e 70 72 6f 74 6f 74 79 70 65 2e 6f 70  dia.prototype.op
afa50 65 6e 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 6c  en = function (l
afa60 61 62 65 6c 4f 72 49 64 29 20 7b 0a 09 20 20 20  abelOrId) {..   
afa70 20 20 20 20 20 6c 61 62 65 6c 4f 72 49 64 20 3d       labelOrId =
afa80 20 74 68 69 73 2e 64 65 66 61 75 6c 74 41 72 67   this.defaultArg
afa90 28 6c 61 62 65 6c 4f 72 49 64 2c 20 27 64 65 66  (labelOrId, 'def
afaa0 61 75 6c 74 27 29 3b 0a 09 20 20 20 20 20 20 20  ault');..       
afab0 20 72 65 74 75 72 6e 20 74 68 69 73 2e 65 6e 75   return this.enu
afac0 6d 65 72 61 74 65 44 65 76 69 63 65 73 28 29 2e  merateDevices().
afad0 74 68 65 6e 28 66 75 6e 63 74 69 6f 6e 20 28 64  then(function (d
afae0 65 76 69 63 65 73 29 20 7b 0a 09 20 20 20 20 20  evices) {..     
afaf0 20 20 20 20 20 20 20 76 61 72 20 64 65 76 69 63         var devic
afb00 65 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
afb10 69 66 20 28 74 68 69 73 2e 69 73 4e 75 6d 62 65  if (this.isNumbe
afb20 72 28 6c 61 62 65 6c 4f 72 49 64 29 29 20 7b 0a  r(labelOrId)) {.
afb30 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
afb40 20 64 65 76 69 63 65 20 3d 20 64 65 76 69 63 65   device = device
afb50 73 5b 6c 61 62 65 6c 4f 72 49 64 5d 3b 0a 09 20  s[labelOrId];.. 
afb60 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
afb70 65 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  e {..           
afb80 20 20 20 20 20 64 65 76 69 63 65 20 3d 20 64 65       device = de
afb90 76 69 63 65 73 2e 66 69 6e 64 28 66 75 6e 63 74  vices.find(funct
afba0 69 6f 6e 20 28 64 65 76 69 63 65 29 20 7b 0a 09  ion (device) {..
afbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
afbc0 20 20 20 20 72 65 74 75 72 6e 20 64 65 76 69 63      return devic
afbd0 65 2e 6c 61 62 65 6c 20 3d 3d 3d 20 6c 61 62 65  e.label === labe
afbe0 6c 4f 72 49 64 20 7c 7c 20 64 65 76 69 63 65 2e  lOrId || device.
afbf0 64 65 76 69 63 65 49 64 20 3d 3d 3d 20 6c 61 62  deviceId === lab
afc00 65 6c 4f 72 49 64 3b 0a 09 20 20 20 20 20 20 20  elOrId;..       
afc10 20 20 20 20 20 20 20 20 20 7d 29 3b 0a 09 20 20           });..  
afc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
afc30 20 28 21 64 65 76 69 63 65 29 20 7b 0a 09 20 20   (!device) {..  
afc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
afc50 20 20 2f 2f 6f 74 68 65 72 77 69 73 65 20 6a 75    //otherwise ju
afc60 73 74 20 74 61 6b 65 20 74 68 65 20 66 69 72 73  st take the firs
afc70 74 20 6f 6e 65 0a 09 20 20 20 20 20 20 20 20 20  t one..         
afc80 20 20 20 20 20 20 20 20 20 20 20 64 65 76 69 63             devic
afc90 65 20 3d 20 64 65 76 69 63 65 73 5b 30 5d 3b 0a  e = devices[0];.
afca0 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
afcb0 20 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   }..            
afcc0 7d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 2f  }..            /
afcd0 2f 64 69 64 6e 27 74 20 66 69 6e 64 20 61 20 6d  /didn't find a m
afce0 61 74 63 68 69 6e 67 20 64 65 76 69 63 65 0a 09  atching device..
afcf0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
afd00 21 64 65 76 69 63 65 29 20 7b 0a 09 20 20 20 20  !device) {..    
afd10 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
afd20 77 20 6e 65 77 20 45 72 72 6f 72 28 27 54 6f 6e  w new Error('Ton
afd30 65 2e 55 73 65 72 4d 65 64 69 61 3a 20 6e 6f 20  e.UserMedia: no 
afd40 6d 61 74 63 68 69 6e 67 20 61 75 64 69 6f 20 69  matching audio i
afd50 6e 70 75 74 73 2e 27 29 3b 0a 09 20 20 20 20 20  nputs.');..     
afd60 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20         }..      
afd70 20 20 20 20 20 20 74 68 69 73 2e 5f 64 65 76 69        this._devi
afd80 63 65 20 3d 20 64 65 76 69 63 65 3b 0a 09 20 20  ce = device;..  
afd90 20 20 20 20 20 20 20 20 20 20 2f 2f 64 6f 20 67            //do g
afda0 65 74 55 73 65 72 4d 65 64 69 61 0a 09 20 20 20  etUserMedia..   
afdb0 20 20 20 20 20 20 20 20 20 76 61 72 20 63 6f 6e           var con
afdc0 73 74 72 61 69 6e 74 73 20 3d 20 7b 0a 09 20 20  straints = {..  
afdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 75                au
afde0 64 69 6f 3a 20 7b 0a 09 20 20 20 20 20 20 20 20  dio: {..        
afdf0 20 20 20 20 20 20 20 20 20 20 20 20 27 64 65 76              'dev
afe00 69 63 65 49 64 27 3a 20 64 65 76 69 63 65 2e 64  iceId': device.d
afe10 65 76 69 63 65 49 64 2c 0a 09 20 20 20 20 20 20  eviceId,..      
afe20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 65                'e
afe30 63 68 6f 43 61 6e 63 65 6c 6c 61 74 69 6f 6e 27  choCancellation'
afe40 3a 20 66 61 6c 73 65 2c 0a 09 20 20 20 20 20 20  : false,..      
afe50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 73                's
afe60 61 6d 70 6c 65 52 61 74 65 27 3a 20 74 68 69 73  ampleRate': this
afe70 2e 63 6f 6e 74 65 78 74 2e 73 61 6d 70 6c 65 52  .context.sampleR
afe80 61 74 65 0a 09 20 20 20 20 20 20 20 20 20 20 20  ate..           
afe90 20 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20       }..        
afea0 20 20 20 20 7d 3b 0a 09 20 20 20 20 20 20 20 20      };..        
afeb0 20 20 20 20 72 65 74 75 72 6e 20 6e 61 76 69 67      return navig
afec0 61 74 6f 72 2e 6d 65 64 69 61 44 65 76 69 63 65  ator.mediaDevice
afed0 73 2e 67 65 74 55 73 65 72 4d 65 64 69 61 28 63  s.getUserMedia(c
afee0 6f 6e 73 74 72 61 69 6e 74 73 29 2e 74 68 65 6e  onstraints).then
afef0 28 66 75 6e 63 74 69 6f 6e 20 28 73 74 72 65 61  (function (strea
aff00 6d 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  m) {..          
aff10 20 20 20 20 20 20 2f 2f 73 74 61 72 74 20 61 20        //start a 
aff20 6e 65 77 20 73 6f 75 72 63 65 20 6f 6e 6c 79 20  new source only 
aff30 69 66 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  if the previous 
aff40 6f 6e 65 20 69 73 20 63 6c 6f 73 65 64 0a 09 20  one is closed.. 
aff50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
aff60 66 20 28 21 74 68 69 73 2e 5f 73 74 72 65 61 6d  f (!this._stream
aff70 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
aff80 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 5f 73           this._s
aff90 74 72 65 61 6d 20 3d 20 73 74 72 65 61 6d 3b 0a  tream = stream;.
affa0 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
affb0 20 20 20 20 20 2f 2f 57 72 61 70 20 61 20 4d 65       //Wrap a Me
affc0 64 69 61 53 74 72 65 61 6d 53 6f 75 72 63 65 4e  diaStreamSourceN
affd0 6f 64 65 20 61 72 6f 75 6e 64 20 74 68 65 20 6c  ode around the l
affe0 69 76 65 20 69 6e 70 75 74 20 73 74 72 65 61 6d  ive input stream
afff0 2e 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
b0000 20 20 20 20 20 20 20 74 68 69 73 2e 5f 6d 65 64         this._med
b0010 69 61 53 74 72 65 61 6d 20 3d 20 74 68 69 73 2e  iaStream = this.
b0020 63 6f 6e 74 65 78 74 2e 63 72 65 61 74 65 4d 65  context.createMe
b0030 64 69 61 53 74 72 65 61 6d 53 6f 75 72 63 65 28  diaStreamSource(
b0040 73 74 72 65 61 6d 29 3b 0a 09 20 20 20 20 20 20  stream);..      
b0050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
b0060 43 6f 6e 6e 65 63 74 20 74 68 65 20 4d 65 64 69  Connect the Medi
b0070 61 53 74 72 65 61 6d 53 6f 75 72 63 65 4e 6f 64  aStreamSourceNod
b0080 65 20 74 6f 20 61 20 67 61 74 65 20 67 61 69 6e  e to a gate gain
b0090 20 6e 6f 64 65 0a 09 20 20 20 20 20 20 20 20 20   node..         
b00a0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
b00b0 5f 6d 65 64 69 61 53 74 72 65 61 6d 2e 63 6f 6e  _mediaStream.con
b00c0 6e 65 63 74 28 74 68 69 73 2e 6f 75 74 70 75 74  nect(this.output
b00d0 29 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b00e0 20 20 20 20 7d 0a 09 20 20 20 20 20 20 20 20 20      }..         
b00f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
b0100 69 73 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  is;..           
b0110 20 7d 2e 62 69 6e 64 28 74 68 69 73 29 29 3b 0a   }.bind(this));.
b0120 09 20 20 20 20 20 20 20 20 7d 2e 62 69 6e 64 28  .        }.bind(
b0130 74 68 69 73 29 29 3b 0a 09 20 20 20 20 7d 3b 0a  this));..    };.
b0140 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 43  .    /**... *  C
b0150 6c 6f 73 65 20 74 68 65 20 6d 65 64 69 61 20 73  lose the media s
b0160 74 72 65 61 6d 0a 09 09 20 2a 20 20 40 72 65 74  tream... *  @ret
b0170 75 72 6e 20 7b 54 6f 6e 65 2e 55 73 65 72 4d 65  urn {Tone.UserMe
b0180 64 69 61 7d 20 74 68 69 73 0a 09 09 20 2a 2f 0a  dia} this... */.
b0190 09 20 20 20 20 54 6f 6e 65 2e 55 73 65 72 4d 65  .    Tone.UserMe
b01a0 64 69 61 2e 70 72 6f 74 6f 74 79 70 65 2e 63 6c  dia.prototype.cl
b01b0 6f 73 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  ose = function (
b01c0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 69 66 20  ) {..        if 
b01d0 28 74 68 69 73 2e 5f 73 74 72 65 61 6d 29 20 7b  (this._stream) {
b01e0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
b01f0 69 73 2e 5f 73 74 72 65 61 6d 2e 67 65 74 41 75  is._stream.getAu
b0200 64 69 6f 54 72 61 63 6b 73 28 29 2e 66 6f 72 45  dioTracks().forE
b0210 61 63 68 28 66 75 6e 63 74 69 6f 6e 20 28 74 72  ach(function (tr
b0220 61 63 6b 29 20 7b 0a 09 20 20 20 20 20 20 20 20  ack) {..        
b0230 20 20 20 20 20 20 20 20 74 72 61 63 6b 2e 73 74          track.st
b0240 6f 70 28 29 3b 0a 09 20 20 20 20 20 20 20 20 20  op();..         
b0250 20 20 20 7d 29 3b 0a 09 20 20 20 20 20 20 20 20     });..        
b0260 20 20 20 20 74 68 69 73 2e 5f 73 74 72 65 61 6d      this._stream
b0270 20 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20   = null;..      
b0280 20 20 20 20 20 20 2f 2f 72 65 6d 6f 76 65 20 74        //remove t
b0290 68 65 20 6f 6c 64 20 6d 65 64 69 61 20 73 74 72  he old media str
b02a0 65 61 6d 0a 09 20 20 20 20 20 20 20 20 20 20 20  eam..           
b02b0 20 74 68 69 73 2e 5f 6d 65 64 69 61 53 74 72 65   this._mediaStre
b02c0 61 6d 2e 64 69 73 63 6f 6e 6e 65 63 74 28 29 3b  am.disconnect();
b02d0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
b02e0 69 73 2e 5f 6d 65 64 69 61 53 74 72 65 61 6d 20  is._mediaStream 
b02f0 3d 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20  = null;..       
b0300 20 7d 0a 09 20 20 20 20 20 20 20 20 74 68 69 73   }..        this
b0310 2e 5f 64 65 76 69 63 65 20 3d 20 6e 75 6c 6c 3b  ._device = null;
b0320 0a 09 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
b0330 20 74 68 69 73 3b 0a 09 20 20 20 20 7d 3b 0a 09   this;..    };..
b0340 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20 20 52 65      /**... *  Re
b0350 74 75 72 6e 73 20 61 20 70 72 6f 6d 69 73 65 20  turns a promise 
b0360 77 68 69 63 68 20 72 65 73 6f 6c 76 65 73 20 77  which resolves w
b0370 69 74 68 20 74 68 65 20 6c 69 73 74 20 6f 66 20  ith the list of 
b0380 61 75 64 69 6f 20 69 6e 70 75 74 20 64 65 76 69  audio input devi
b0390 63 65 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a 09  ces available...
b03a0 09 20 2a 20 20 40 72 65 74 75 72 6e 20 7b 50 72  . *  @return {Pr
b03b0 6f 6d 69 73 65 7d 20 54 68 65 20 70 72 6f 6d 69  omise} The promi
b03c0 73 65 20 74 68 61 74 20 69 73 20 72 65 73 6f 6c  se that is resol
b03d0 76 65 64 20 77 69 74 68 20 74 68 65 20 64 65 76  ved with the dev
b03e0 69 63 65 73 0a 09 09 20 2a 20 20 40 65 78 61 6d  ices... *  @exam
b03f0 70 6c 65 0a 09 09 20 2a 20 65 78 74 49 6e 70 75  ple... * extInpu
b0400 74 2e 65 6e 75 6d 65 72 61 74 65 44 65 76 69 63  t.enumerateDevic
b0410 65 73 28 29 2e 74 68 65 6e 28 66 75 6e 63 74 69  es().then(functi
b0420 6f 6e 28 64 65 76 69 63 65 73 29 7b 0a 09 09 20  on(devices){... 
b0430 2a 20 09 63 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 64  * .console.log(d
b0440 65 76 69 63 65 73 29 0a 09 09 20 2a 20 7d 29 0a  evices)... * }).
b0450 09 09 20 2a 2f 0a 09 20 20 20 20 54 6f 6e 65 2e  .. */..    Tone.
b0460 55 73 65 72 4d 65 64 69 61 2e 70 72 6f 74 6f 74  UserMedia.protot
b0470 79 70 65 2e 65 6e 75 6d 65 72 61 74 65 44 65 76  ype.enumerateDev
b0480 69 63 65 73 20 3d 20 66 75 6e 63 74 69 6f 6e 20  ices = function 
b0490 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 72 65  () {..        re
b04a0 74 75 72 6e 20 6e 61 76 69 67 61 74 6f 72 2e 6d  turn navigator.m
b04b0 65 64 69 61 44 65 76 69 63 65 73 2e 65 6e 75 6d  ediaDevices.enum
b04c0 65 72 61 74 65 44 65 76 69 63 65 73 28 29 2e 74  erateDevices().t
b04d0 68 65 6e 28 66 75 6e 63 74 69 6f 6e 20 28 64 65  hen(function (de
b04e0 76 69 63 65 73 29 20 7b 0a 09 20 20 20 20 20 20  vices) {..      
b04f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 65 76        return dev
b0500 69 63 65 73 2e 66 69 6c 74 65 72 28 66 75 6e 63  ices.filter(func
b0510 74 69 6f 6e 20 28 64 65 76 69 63 65 29 20 7b 0a  tion (device) {.
b0520 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b0530 20 72 65 74 75 72 6e 20 64 65 76 69 63 65 2e 6b   return device.k
b0540 69 6e 64 20 3d 3d 3d 20 27 61 75 64 69 6f 69 6e  ind === 'audioin
b0550 70 75 74 27 3b 0a 09 20 20 20 20 20 20 20 20 20  put';..         
b0560 20 20 20 7d 29 3b 0a 09 20 20 20 20 20 20 20 20     });..        
b0570 7d 29 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 20  });..    };..   
b0580 20 2f 2a 2a 0a 09 09 20 2a 20 20 52 65 74 75 72   /**... *  Retur
b0590 6e 73 20 74 68 65 20 70 6c 61 79 62 61 63 6b 20  ns the playback 
b05a0 73 74 61 74 65 20 6f 66 20 74 68 65 20 73 6f 75  state of the sou
b05b0 72 63 65 2c 20 22 73 74 61 72 74 65 64 22 20 77  rce, "started" w
b05c0 68 65 6e 20 74 68 65 20 6d 69 63 72 6f 70 68 6f  hen the micropho
b05d0 6e 65 20 69 73 20 6f 70 65 6e 0a 09 09 20 2a 20  ne is open... * 
b05e0 20 61 6e 64 20 22 73 74 6f 70 70 65 64 22 20 77   and "stopped" w
b05f0 68 65 6e 20 74 68 65 20 6d 69 63 20 69 73 20 63  hen the mic is c
b0600 6c 6f 73 65 64 2e 0a 09 09 20 2a 20 20 40 74 79  losed.... *  @ty
b0610 70 65 20 7b 54 6f 6e 65 2e 53 74 61 74 65 7d 0a  pe {Tone.State}.
b0620 09 09 20 2a 20 20 40 72 65 61 64 4f 6e 6c 79 0a  .. *  @readOnly.
b0630 09 09 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66 20  .. *  @memberOf 
b0640 54 6f 6e 65 2e 55 73 65 72 4d 65 64 69 61 23 0a  Tone.UserMedia#.
b0650 09 09 20 2a 20 20 40 6e 61 6d 65 20 73 74 61 74  .. *  @name stat
b0660 65 0a 09 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a  e... */..    Obj
b0670 65 63 74 2e 64 65 66 69 6e 65 50 72 6f 70 65 72  ect.defineProper
b0680 74 79 28 54 6f 6e 65 2e 55 73 65 72 4d 65 64 69  ty(Tone.UserMedi
b0690 61 2e 70 72 6f 74 6f 74 79 70 65 2c 20 27 73 74  a.prototype, 'st
b06a0 61 74 65 27 2c 20 7b 0a 09 20 20 20 20 20 20 20  ate', {..       
b06b0 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   get: function (
b06c0 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
b06d0 20 72 65 74 75 72 6e 20 74 68 69 73 2e 5f 73 74   return this._st
b06e0 72 65 61 6d 20 26 26 20 74 68 69 73 2e 5f 73 74  ream && this._st
b06f0 72 65 61 6d 2e 61 63 74 69 76 65 20 3f 20 54 6f  ream.active ? To
b0700 6e 65 2e 53 74 61 74 65 2e 53 74 61 72 74 65 64  ne.State.Started
b0710 20 3a 20 54 6f 6e 65 2e 53 74 61 74 65 2e 53 74   : Tone.State.St
b0720 6f 70 70 65 64 3b 0a 09 20 20 20 20 20 20 20 20  opped;..        
b0730 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20  }..    });..    
b0740 2f 2a 2a 0a 09 09 20 2a 20 09 52 65 74 75 72 6e  /**... * .Return
b0750 73 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  s an identifier 
b0760 66 6f 72 20 74 68 65 20 72 65 70 72 65 73 65 6e  for the represen
b0770 74 65 64 20 64 65 76 69 63 65 20 74 68 61 74 20  ted device that 
b0780 69 73 20 0a 09 09 20 2a 20 09 70 65 72 73 69 73  is ... * .persis
b0790 74 65 64 20 61 63 72 6f 73 73 20 73 65 73 73 69  ted across sessi
b07a0 6f 6e 73 2e 20 49 74 20 69 73 20 75 6e 2d 67 75  ons. It is un-gu
b07b0 65 73 73 61 62 6c 65 20 62 79 20 6f 74 68 65 72  essable by other
b07c0 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 61 6e   applications an
b07d0 64 20 0a 09 09 20 2a 20 09 75 6e 69 71 75 65 20  d ... * .unique 
b07e0 74 6f 20 74 68 65 20 6f 72 69 67 69 6e 20 6f 66  to the origin of
b07f0 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 61 70 70   the calling app
b0800 6c 69 63 61 74 69 6f 6e 2e 20 49 74 20 69 73 20  lication. It is 
b0810 72 65 73 65 74 20 77 68 65 6e 20 74 68 65 20 0a  reset when the .
b0820 09 09 20 2a 20 09 75 73 65 72 20 63 6c 65 61 72  .. * .user clear
b0830 73 20 63 6f 6f 6b 69 65 73 20 28 66 6f 72 20 50  s cookies (for P
b0840 72 69 76 61 74 65 20 42 72 6f 77 73 69 6e 67 2c  rivate Browsing,
b0850 20 61 20 64 69 66 66 65 72 65 6e 74 20 69 64 65   a different ide
b0860 6e 74 69 66 69 65 72 20 69 73 20 0a 09 09 20 2a  ntifier is ... *
b0870 20 09 75 73 65 64 20 74 68 61 74 20 69 73 20 6e   .used that is n
b0880 6f 74 20 70 65 72 73 69 73 74 65 64 20 61 63 72  ot persisted acr
b0890 6f 73 73 20 73 65 73 73 69 6f 6e 73 29 2e 20 52  oss sessions). R
b08a0 65 74 75 72 6e 73 20 75 6e 64 65 66 69 6e 65 64  eturns undefined
b08b0 20 77 68 65 6e 20 74 68 65 20 0a 09 09 20 2a 20   when the ... * 
b08c0 09 64 65 76 69 63 65 20 69 73 20 6e 6f 74 20 6f  .device is not o
b08d0 70 65 6e 2e 0a 09 09 20 2a 20 20 40 74 79 70 65  pen.... *  @type
b08e0 20 7b 53 74 72 69 6e 67 7d 0a 09 09 20 2a 20 20   {String}... *  
b08f0 40 72 65 61 64 4f 6e 6c 79 0a 09 09 20 2a 20 20  @readOnly... *  
b0900 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 55  @memberOf Tone.U
b0910 73 65 72 4d 65 64 69 61 23 0a 09 09 20 2a 20 20  serMedia#... *  
b0920 40 6e 61 6d 65 20 64 65 76 69 63 65 49 64 0a 09  @name deviceId..
b0930 09 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74  . */..    Object
b0940 2e 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28  .defineProperty(
b0950 54 6f 6e 65 2e 55 73 65 72 4d 65 64 69 61 2e 70  Tone.UserMedia.p
b0960 72 6f 74 6f 74 79 70 65 2c 20 27 64 65 76 69 63  rototype, 'devic
b0970 65 49 64 27 2c 20 7b 0a 09 20 20 20 20 20 20 20  eId', {..       
b0980 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28   get: function (
b0990 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20  ) {..           
b09a0 20 69 66 20 28 74 68 69 73 2e 5f 64 65 76 69 63   if (this._devic
b09b0 65 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  e) {..          
b09c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69        return thi
b09d0 73 2e 5f 64 65 76 69 63 65 2e 64 65 76 69 63 65  s._device.device
b09e0 49 64 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  Id;..           
b09f0 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20   }..        }.. 
b0a00 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a     });..    /**.
b0a10 09 09 20 2a 20 09 52 65 74 75 72 6e 73 20 61 20  .. * .Returns a 
b0a20 67 72 6f 75 70 20 69 64 65 6e 74 69 66 69 65 72  group identifier
b0a30 2e 20 54 77 6f 20 64 65 76 69 63 65 73 20 68 61  . Two devices ha
b0a40 76 65 20 74 68 65 20 0a 09 09 20 2a 20 09 73 61  ve the ... * .sa
b0a50 6d 65 20 67 72 6f 75 70 20 69 64 65 6e 74 69 66  me group identif
b0a60 69 65 72 20 69 66 20 74 68 65 79 20 62 65 6c 6f  ier if they belo
b0a70 6e 67 20 74 6f 20 74 68 65 20 73 61 6d 65 20 70  ng to the same p
b0a80 68 79 73 69 63 61 6c 20 64 65 76 69 63 65 2e 0a  hysical device..
b0a90 09 09 20 2a 20 09 52 65 74 75 72 6e 73 20 75 6e  .. * .Returns un
b0aa0 64 65 66 69 6e 65 64 20 77 68 65 6e 20 74 68 65  defined when the
b0ab0 20 64 65 76 69 63 65 20 69 73 20 6e 6f 74 20 6f   device is not o
b0ac0 70 65 6e 2e 0a 09 09 20 2a 20 20 40 74 79 70 65  pen.... *  @type
b0ad0 20 7b 53 74 72 69 6e 67 7d 0a 09 09 20 2a 20 20   {String}... *  
b0ae0 40 72 65 61 64 4f 6e 6c 79 0a 09 09 20 2a 20 20  @readOnly... *  
b0af0 40 6d 65 6d 62 65 72 4f 66 20 54 6f 6e 65 2e 55  @memberOf Tone.U
b0b00 73 65 72 4d 65 64 69 61 23 0a 09 09 20 2a 20 20  serMedia#... *  
b0b10 40 6e 61 6d 65 20 67 72 6f 75 70 49 64 0a 09 09  @name groupId...
b0b20 20 2a 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e   */..    Object.
b0b30 64 65 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54  defineProperty(T
b0b40 6f 6e 65 2e 55 73 65 72 4d 65 64 69 61 2e 70 72  one.UserMedia.pr
b0b50 6f 74 6f 74 79 70 65 2c 20 27 67 72 6f 75 70 49  ototype, 'groupI
b0b60 64 27 2c 20 7b 0a 09 20 20 20 20 20 20 20 20 67  d', {..        g
b0b70 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  et: function () 
b0b80 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
b0b90 66 20 28 74 68 69 73 2e 5f 64 65 76 69 63 65 29  f (this._device)
b0ba0 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b0bb0 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
b0bc0 5f 64 65 76 69 63 65 2e 67 72 6f 75 70 49 64 3b  _device.groupId;
b0bd0 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ..            }.
b0be0 09 20 20 20 20 20 20 20 20 7d 0a 09 20 20 20 20  .        }..    
b0bf0 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20  });..    /**... 
b0c00 2a 20 09 52 65 74 75 72 6e 73 20 61 20 6c 61 62  * .Returns a lab
b0c10 65 6c 20 64 65 73 63 72 69 62 69 6e 67 20 74 68  el describing th
b0c20 69 73 20 64 65 76 69 63 65 20 28 66 6f 72 20 65  is device (for e
b0c30 78 61 6d 70 6c 65 20 22 42 75 69 6c 74 2d 69 6e  xample "Built-in
b0c40 20 4d 69 63 72 6f 70 68 6f 6e 65 22 29 2e 20 0a   Microphone"). .
b0c50 09 09 20 2a 20 09 52 65 74 75 72 6e 73 20 75 6e  .. * .Returns un
b0c60 64 65 66 69 6e 65 64 20 77 68 65 6e 20 74 68 65  defined when the
b0c70 20 64 65 76 69 63 65 20 69 73 20 6e 6f 74 20 6f   device is not o
b0c80 70 65 6e 20 6f 72 20 6c 61 62 65 6c 20 69 73 20  pen or label is 
b0c90 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 09 09  not available...
b0ca0 20 2a 20 09 62 65 63 61 75 73 65 20 6f 66 20 70   * .because of p
b0cb0 65 72 6d 69 73 73 69 6f 6e 73 2e 0a 09 09 20 2a  ermissions.... *
b0cc0 20 20 40 74 79 70 65 20 7b 53 74 72 69 6e 67 7d    @type {String}
b0cd0 0a 09 09 20 2a 20 20 40 72 65 61 64 4f 6e 6c 79  ... *  @readOnly
b0ce0 0a 09 09 20 2a 20 20 40 6d 65 6d 62 65 72 4f 66  ... *  @memberOf
b0cf0 20 54 6f 6e 65 2e 55 73 65 72 4d 65 64 69 61 23   Tone.UserMedia#
b0d00 0a 09 09 20 2a 20 20 40 6e 61 6d 65 20 67 72 6f  ... *  @name gro
b0d10 75 70 49 64 0a 09 09 20 2a 2f 0a 09 20 20 20 20  upId... */..    
b0d20 4f 62 6a 65 63 74 2e 64 65 66 69 6e 65 50 72 6f  Object.definePro
b0d30 70 65 72 74 79 28 54 6f 6e 65 2e 55 73 65 72 4d  perty(Tone.UserM
b0d40 65 64 69 61 2e 70 72 6f 74 6f 74 79 70 65 2c 20  edia.prototype, 
b0d50 27 6c 61 62 65 6c 27 2c 20 7b 0a 09 20 20 20 20  'label', {..    
b0d60 20 20 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f      get: functio
b0d70 6e 20 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20  n () {..        
b0d80 20 20 20 20 69 66 20 28 74 68 69 73 2e 5f 64 65      if (this._de
b0d90 76 69 63 65 29 20 7b 0a 09 20 20 20 20 20 20 20  vice) {..       
b0da0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
b0db0 74 68 69 73 2e 5f 64 65 76 69 63 65 2e 6c 61 62  this._device.lab
b0dc0 65 6c 3b 0a 09 20 20 20 20 20 20 20 20 20 20 20  el;..           
b0dd0 20 7d 0a 09 20 20 20 20 20 20 20 20 7d 0a 09 20   }..        }.. 
b0de0 20 20 20 7d 29 3b 0a 09 20 20 20 20 2f 2a 2a 0a     });..    /**.
b0df0 09 09 20 2a 20 4d 75 74 65 20 74 68 65 20 6f 75  .. * Mute the ou
b0e00 74 70 75 74 2e 20 0a 09 09 20 2a 20 40 6d 65 6d  tput. ... * @mem
b0e10 62 65 72 4f 66 20 54 6f 6e 65 2e 55 73 65 72 4d  berOf Tone.UserM
b0e20 65 64 69 61 23 0a 09 09 20 2a 20 40 74 79 70 65  edia#... * @type
b0e30 20 7b 62 6f 6f 6c 65 61 6e 7d 0a 09 09 20 2a 20   {boolean}... * 
b0e40 40 6e 61 6d 65 20 6d 75 74 65 0a 09 09 20 2a 20  @name mute... * 
b0e50 40 65 78 61 6d 70 6c 65 0a 09 09 20 2a 20 2f 2f  @example... * //
b0e60 6d 75 74 65 20 74 68 65 20 6f 75 74 70 75 74 0a  mute the output.
b0e70 09 09 20 2a 20 75 73 65 72 4d 65 64 69 61 2e 6d  .. * userMedia.m
b0e80 75 74 65 20 3d 20 74 72 75 65 3b 0a 09 09 20 2a  ute = true;... *
b0e90 2f 0a 09 20 20 20 20 4f 62 6a 65 63 74 2e 64 65  /..    Object.de
b0ea0 66 69 6e 65 50 72 6f 70 65 72 74 79 28 54 6f 6e  fineProperty(Ton
b0eb0 65 2e 55 73 65 72 4d 65 64 69 61 2e 70 72 6f 74  e.UserMedia.prot
b0ec0 6f 74 79 70 65 2c 20 27 6d 75 74 65 27 2c 20 7b  otype, 'mute', {
b0ed0 0a 09 20 20 20 20 20 20 20 20 67 65 74 3a 20 66  ..        get: f
b0ee0 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 09 20 20  unction () {..  
b0ef0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
b0f00 20 74 68 69 73 2e 5f 76 6f 6c 75 6d 65 2e 6d 75   this._volume.mu
b0f10 74 65 3b 0a 09 20 20 20 20 20 20 20 20 7d 2c 0a  te;..        },.
b0f20 09 20 20 20 20 20 20 20 20 73 65 74 3a 20 66 75  .        set: fu
b0f30 6e 63 74 69 6f 6e 20 28 6d 75 74 65 29 20 7b 0a  nction (mute) {.
b0f40 09 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
b0f50 73 2e 5f 76 6f 6c 75 6d 65 2e 6d 75 74 65 20 3d  s._volume.mute =
b0f60 20 6d 75 74 65 3b 0a 09 20 20 20 20 20 20 20 20   mute;..        
b0f70 7d 0a 09 20 20 20 20 7d 29 3b 0a 09 20 20 20 20  }..    });..    
b0f80 2f 2a 2a 0a 09 09 20 2a 20 43 6c 65 61 6e 20 75  /**... * Clean u
b0f90 70 2e 0a 09 09 20 2a 20 40 72 65 74 75 72 6e 20  p.... * @return 
b0fa0 7b 54 6f 6e 65 2e 55 73 65 72 4d 65 64 69 61 7d  {Tone.UserMedia}
b0fb0 20 74 68 69 73 0a 09 09 20 2a 2f 0a 09 20 20 20   this... */..   
b0fc0 20 54 6f 6e 65 2e 55 73 65 72 4d 65 64 69 61 2e   Tone.UserMedia.
b0fd0 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73  prototype.dispos
b0fe0 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  e = function () 
b0ff0 7b 0a 09 20 20 20 20 20 20 20 20 54 6f 6e 65 2e  {..        Tone.
b1000 70 72 6f 74 6f 74 79 70 65 2e 64 69 73 70 6f 73  prototype.dispos
b1010 65 2e 63 61 6c 6c 28 74 68 69 73 29 3b 0a 09 20  e.call(this);.. 
b1020 20 20 20 20 20 20 20 74 68 69 73 2e 63 6c 6f 73         this.clos
b1030 65 28 29 3b 0a 09 20 20 20 20 20 20 20 20 74 68  e();..        th
b1040 69 73 2e 5f 77 72 69 74 61 62 6c 65 28 27 76 6f  is._writable('vo
b1050 6c 75 6d 65 27 29 3b 0a 09 20 20 20 20 20 20 20  lume');..       
b1060 20 74 68 69 73 2e 5f 76 6f 6c 75 6d 65 2e 64 69   this._volume.di
b1070 73 70 6f 73 65 28 29 3b 0a 09 20 20 20 20 20 20  spose();..      
b1080 20 20 74 68 69 73 2e 5f 76 6f 6c 75 6d 65 20 3d    this._volume =
b1090 20 6e 75 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20   null;..        
b10a0 74 68 69 73 2e 76 6f 6c 75 6d 65 20 3d 20 6e 75  this.volume = nu
b10b0 6c 6c 3b 0a 09 20 20 20 20 20 20 20 20 72 65 74  ll;..        ret
b10c0 75 72 6e 20 74 68 69 73 3b 0a 09 20 20 20 20 7d  urn this;..    }
b10d0 3b 0a 09 20 20 20 20 2f 2a 2a 0a 09 09 20 2a 20  ;..    /**... * 
b10e0 20 49 66 20 67 65 74 55 73 65 72 4d 65 64 69 61   If getUserMedia
b10f0 20 69 73 20 73 75 70 70 6f 72 74 65 64 20 62 79   is supported by
b1100 20 74 68 65 20 62 72 6f 77 73 65 72 2e 0a 09 09   the browser....
b1110 20 2a 20 20 40 74 79 70 65 20 20 7b 42 6f 6f 6c   *  @type  {Bool
b1120 65 61 6e 7d 0a 09 09 20 2a 20 20 40 6d 65 6d 62  ean}... *  @memb
b1130 65 72 4f 66 20 54 6f 6e 65 2e 55 73 65 72 4d 65  erOf Tone.UserMe
b1140 64 69 61 23 0a 09 09 20 2a 20 20 40 6e 61 6d 65  dia#... *  @name
b1150 20 73 75 70 70 6f 72 74 65 64 0a 09 09 20 2a 20   supported... * 
b1160 20 40 73 74 61 74 69 63 0a 09 09 20 2a 20 20 40   @static... *  @
b1170 72 65 61 64 4f 6e 6c 79 0a 09 09 20 2a 2f 0a 09  readOnly... */..
b1180 20 20 20 20 4f 62 6a 65 63 74 2e 64 65 66 69 6e      Object.defin
b1190 65 50 72 6f 70 65 72 74 79 28 54 6f 6e 65 2e 55  eProperty(Tone.U
b11a0 73 65 72 4d 65 64 69 61 2c 20 27 73 75 70 70 6f  serMedia, 'suppo
b11b0 72 74 65 64 27 2c 20 7b 0a 09 20 20 20 20 20 20  rted', {..      
b11c0 20 20 67 65 74 3a 20 66 75 6e 63 74 69 6f 6e 20    get: function 
b11d0 28 29 20 7b 0a 09 20 20 20 20 20 20 20 20 20 20  () {..          
b11e0 20 20 72 65 74 75 72 6e 20 21 54 6f 6e 65 2e 70    return !Tone.p
b11f0 72 6f 74 6f 74 79 70 65 2e 69 73 55 6e 64 65 66  rototype.isUndef
b1200 28 6e 61 76 69 67 61 74 6f 72 2e 6d 65 64 69 61  (navigator.media
b1210 44 65 76 69 63 65 73 29 20 26 26 20 54 6f 6e 65  Devices) && Tone
b1220 2e 70 72 6f 74 6f 74 79 70 65 2e 69 73 46 75 6e  .prototype.isFun
b1230 63 74 69 6f 6e 28 6e 61 76 69 67 61 74 6f 72 2e  ction(navigator.
b1240 6d 65 64 69 61 44 65 76 69 63 65 73 2e 67 65 74  mediaDevices.get
b1250 55 73 65 72 4d 65 64 69 61 29 3b 0a 09 20 20 20  UserMedia);..   
b1260 20 20 20 20 20 7d 0a 09 20 20 20 20 7d 29 3b 0a       }..    });.
b1270 09 20 20 20 20 72 65 74 75 72 6e 20 54 6f 6e 65  .    return Tone
b1280 2e 55 73 65 72 4d 65 64 69 61 3b 0a 09 7d 29 3b  .UserMedia;..});
b1290 0a 09 0a 09 72 65 74 75 72 6e 20 54 6f 6e 65 3b  ....return Tone;
b12a0 0a 7d 29 29 3b                                   .}));