⌈⌋ branch:  Bitrhythm


Hex Artifact Content

Artifact cd65abe2e76ab39d4059b5491f7db8920720f73b143d457cd51c7dfab7cb6c90:

  • File source/demo.md — part of check-in [a03a381331] at 2021-11-16 10:11:35 on branch trunk — Cleanup of Docs (user: dev size: 22715)

0000: 23 20 47 65 74 74 69 6e 67 20 53 74 61 72 74 65  # Getting Starte
0010: 64 0a 0a 23 23 20 54 75 74 6f 72 69 61 6c 0a 0a  d..## Tutorial..
0020: 3c 69 66 72 61 6d 65 20 77 69 64 74 68 3d 22 35  <iframe width="5
0030: 36 30 22 20 68 65 69 67 68 74 3d 22 33 31 35 22  60" height="315"
0040: 20 73 72 63 3d 22 68 74 74 70 73 3a 2f 2f 77 77   src="https://ww
0050: 77 2e 79 6f 75 74 75 62 65 2e 63 6f 6d 2f 65 6d  w.youtube.com/em
0060: 62 65 64 2f 6f 36 38 33 76 34 64 74 36 52 4d 22  bed/o683v4dt6RM"
0070: 20 74 69 74 6c 65 3d 22 59 6f 75 54 75 62 65 20   title="YouTube 
0080: 76 69 64 65 6f 20 70 6c 61 79 65 72 22 20 66 72  video player" fr
0090: 61 6d 65 62 6f 72 64 65 72 3d 22 30 22 20 61 6c  ameborder="0" al
00a0: 6c 6f 77 3d 22 61 63 63 65 6c 65 72 6f 6d 65 74  low="acceleromet
00b0: 65 72 3b 20 61 75 74 6f 70 6c 61 79 3b 20 63 6c  er; autoplay; cl
00c0: 69 70 62 6f 61 72 64 2d 77 72 69 74 65 3b 20 65  ipboard-write; e
00d0: 6e 63 72 79 70 74 65 64 2d 6d 65 64 69 61 3b 20  ncrypted-media; 
00e0: 67 79 72 6f 73 63 6f 70 65 3b 20 70 69 63 74 75  gyroscope; pictu
00f0: 72 65 2d 69 6e 2d 70 69 63 74 75 72 65 22 20 61  re-in-picture" a
0100: 6c 6c 6f 77 66 75 6c 6c 73 63 72 65 65 6e 3e 3c  llowfullscreen><
0110: 2f 69 66 72 61 6d 65 3e 0a 0a 54 68 69 73 20 69  /iframe>..This i
0120: 6c 6c 75 73 74 72 61 74 65 73 20 74 68 65 20 63  llustrates the c
0130: 6f 72 65 20 63 6f 6e 63 65 70 74 73 20 6f 66 20  ore concepts of 
0140: 62 69 74 72 68 79 74 68 6d 2e 0a 0a 31 2e 20 53  bitrhythm...1. S
0150: 61 6d 70 6c 65 73 20 28 54 6f 6e 65 2e 53 61 6d  amples (Tone.Sam
0160: 70 6c 65 72 29 0a 32 2e 20 44 69 61 6c 73 20 28  pler).2. Dials (
0170: 75 73 65 20 63 65 6c 6c 78 20 69 6e 74 65 72 6e  use cellx intern
0180: 61 6c 6c 79 29 0a 33 2e 20 4f 62 73 65 72 76 65  ally).3. Observe
0190: 72 73 20 28 63 65 6c 6c 78 29 0a 0a 53 65 65 20  rs (cellx)..See 
01a0: 3c 68 74 74 70 73 3a 2f 2f 74 6f 6e 65 6a 73 2e  <https://tonejs.
01b0: 67 69 74 68 75 62 2e 69 6f 2f 3e 20 66 6f 72 20  github.io/> for 
01c0: 6d 6f 72 65 20 6e 6f 74 65 73 2e 0a 0a 46 6f 72  more notes...For
01d0: 20 61 6e 20 75 6e 64 65 72 73 74 61 6e 64 69 6e   an understandin
01e0: 67 20 6f 66 20 74 68 65 20 67 6c 6f 62 61 6c 20  g of the global 
01f0: 76 61 72 69 61 62 6c 65 73 20 73 65 65 20 74 68  variables see th
0200: 65 20 63 6f 6e 63 65 70 74 73 20 61 6e 64 20 63  e concepts and c
0210: 6f 64 65 20 77 61 6c 6b 74 68 72 6f 75 67 68 20  ode walkthrough 
0220: 73 65 63 74 69 6f 6e 2e 0a 0a 20 20 20 20 2d 20  section...    - 
0230: 70 61 74 74 65 72 6e 73 20 61 6e 64 20 74 72 61  patterns and tra
0240: 63 6b 5f 6e 6f 0a 20 20 20 20 2d 20 69 73 48 69  ck_no.    - isHi
0250: 74 2c 20 64 65 6c 74 61 0a 20 20 20 20 2d 20 73  t, delta.    - s
0260: 61 6d 70 6c 65 73 0a 20 20 20 20 2d 20 64 69 61  amples.    - dia
0270: 6c 73 0a 20 20 20 20 2d 20 54 6f 6e 65 0a 20 20  ls.    - Tone.  
0280: 20 20 2d 20 63 65 6c 6c 78 0a 20 20 20 20 2d 20    - cellx.    - 
0290: 77 69 6e 64 6f 77 20 61 6e 64 20 61 6e 79 20 74  window and any t
02a0: 68 69 6e 67 20 69 6e 63 6c 75 64 65 64 20 77 69  hing included wi
02b0: 74 68 20 74 68 65 20 73 63 72 69 70 74 20 74 61  th the script ta
02c0: 67 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 68  g is available h
02d0: 65 72 65 0a 0a 60 6d 65 6d 60 20 69 73 20 73 68  ere..`mem` is sh
02e0: 6f 72 74 20 66 6f 72 20 6d 65 6d 6f 72 79 2e 20  ort for memory. 
02f0: 41 6c 6c 20 69 6e 73 74 72 75 6d 65 6e 74 73 20  All instruments 
0300: 61 6e 64 20 65 66 66 65 63 74 73 20 61 72 65 20  and effects are 
0310: 73 61 76 65 64 20 68 65 72 65 20 73 6f 20 74 68  saved here so th
0320: 61 74 20 74 68 65 79 20 63 61 6e 20 62 65 20 61  at they can be a
0330: 63 63 65 73 73 65 64 20 65 76 65 72 79 77 68 65  ccessed everywhe
0340: 72 65 2e 0a 0a 53 74 65 70 20 74 6f 20 63 72 65  re...Step to cre
0350: 61 74 65 20 74 68 65 20 62 61 73 69 63 20 73 6f  ate the basic so
0360: 6e 67 2e 0a 0a 31 2e 20 43 6c 69 63 6b 20 6f 6e  ng...1. Click on
0370: 20 60 41 64 64 20 53 61 6d 70 6c 65 20 55 52 4c   `Add Sample URL
0380: 60 20 74 6f 20 61 64 64 20 74 68 65 20 66 6f 6c  ` to add the fol
0390: 6c 6f 77 69 6e 67 20 55 52 4c 73 0a 0a 20 20 20  lowing URLs..   
03a0: 20 2d 20 2f 4b 69 63 6b 30 31 2e 77 61 76 0a 20   - /Kick01.wav. 
03b0: 20 20 20 2d 20 2f 53 6e 61 72 65 31 39 2e 77 61     - /Snare19.wa
03c0: 76 0a 20 20 20 20 2d 20 2f 43 6c 6f 73 65 64 68  v.    - /Closedh
03d0: 61 74 30 31 2e 77 61 76 0a 20 20 20 20 2d 20 2f  at01.wav.    - /
03e0: 4d 69 73 63 53 79 6e 74 68 53 74 61 62 30 34 2e  MiscSynthStab04.
03f0: 77 61 76 0a 0a 32 2e 20 43 6c 69 63 6b 20 6f 6e  wav..2. Click on
0400: 20 60 41 64 64 20 44 69 61 6c 60 0a 0a 33 2e 20   `Add Dial`..3. 
0410: 45 6e 74 65 72 20 74 68 65 20 66 6f 6c 6c 6f 77  Enter the follow
0420: 69 6e 67 20 69 6e 74 6f 20 74 68 65 20 77 69 6e  ing into the win
0430: 64 6f 77 0a 0a 60 60 60 0a 73 63 65 6e 65 31 20  dow..```.scene1 
0440: 3d 20 5b 0a 20 20 20 20 63 65 6c 6c 78 28 22 70  = [.    cellx("p
0450: 20 31 30 30 30 20 31 30 30 30 20 31 30 30 30 20   1000 1000 1000 
0460: 31 30 30 30 22 29 2c 0a 20 20 20 20 63 65 6c 6c  1000"),.    cell
0470: 78 28 22 70 20 30 30 78 30 20 30 30 78 30 20 30  x("p 00x0 00x0 0
0480: 30 78 30 20 30 30 78 30 22 29 2c 0a 20 20 20 20  0x0 00x0"),.    
0490: 63 65 6c 6c 78 28 22 70 20 30 30 30 30 20 78 30  cellx("p 0000 x0
04a0: 30 30 20 30 30 30 30 20 78 30 30 30 22 29 2c 0a  00 0000 x000"),.
04b0: 5d 0a 0a 73 63 65 6e 65 32 20 3d 20 5b 0a 20 20  ]..scene2 = [.  
04c0: 20 20 63 65 6c 6c 78 28 22 70 20 31 30 31 31 20    cellx("p 1011 
04d0: 31 30 30 31 20 31 30 30 30 20 31 30 30 30 22 29  1001 1000 1000")
04e0: 2c 0a 20 20 20 20 63 65 6c 6c 78 28 22 70 20 30  ,.    cellx("p 0
04f0: 30 78 30 20 30 30 78 30 20 30 30 78 30 20 30 30  0x0 00x0 00x0 00
0500: 78 30 22 29 2c 0a 20 20 20 20 63 65 6c 6c 78 28  x0"),.    cellx(
0510: 22 70 20 30 30 30 30 20 78 30 30 30 20 30 30 30  "p 0000 x000 000
0520: 30 20 78 30 30 30 22 29 2c 0a 5d 0a 0a 70 61 74  0 x000"),.]..pat
0530: 74 65 72 6e 73 20 3d 20 73 63 65 6e 65 31 0a 0a  terns = scene1..
0540: 76 61 72 20 6f 6e 63 65 20 3d 20 66 75 6e 63 74  var once = funct
0550: 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 54 6f 6e  ion () {.    Ton
0560: 65 2e 4d 61 73 74 65 72 2e 76 6f 6c 75 6d 65 2e  e.Master.volume.
0570: 76 61 6c 75 65 20 3d 20 2d 33 30 0a 20 20 20 20  value = -30.    
0580: 6d 65 6d 2e 6d 61 73 74 65 72 20 3d 20 6e 65 77  mem.master = new
0590: 20 54 6f 6e 65 2e 43 68 61 6e 6e 65 6c 28 7b 63   Tone.Channel({c
05a0: 68 61 6e 6e 65 6c 43 6f 75 6e 74 3a 20 32 2c 20  hannelCount: 2, 
05b0: 76 6f 6c 75 6d 65 3a 20 2d 31 30 7d 29 2e 63 68  volume: -10}).ch
05c0: 61 69 6e 28 20 54 6f 6e 65 2e 44 65 73 74 69 6e  ain( Tone.Destin
05d0: 61 74 69 6f 6e 29 3b 0a 20 20 20 20 6d 65 6d 2e  ation);.    mem.
05e0: 76 6f 6c 75 6d 65 5f 67 75 61 72 64 20 3d 20 67  volume_guard = g
05f0: 75 61 72 64 28 5b 2d 32 30 2c 2d 31 30 5d 29 3b  uard([-20,-10]);
0600: 0a 0a 20 20 20 20 53 61 6d 70 6c 65 28 22 6b 22  ..    Sample("k"
0610: 2c 20 30 29 3b 0a 20 20 20 20 53 61 6d 70 6c 65  , 0);.    Sample
0620: 28 22 68 22 2c 20 31 29 3b 0a 20 20 20 20 53 61  ("h", 1);.    Sa
0630: 6d 70 6c 65 28 22 73 6e 22 2c 20 32 29 3b 0a 0a  mple("sn", 2);..
0640: 20 20 20 20 68 61 6e 64 6c 65 72 73 5b 22 65 78      handlers["ex
0650: 22 5d 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 76  "] = function (v
0660: 61 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 69 66  al) {.        if
0670: 20 28 76 61 6c 20 3e 20 30 2e 35 29 20 7b 0a 20   (val > 0.5) {. 
0680: 20 20 20 20 20 20 20 20 20 20 20 6d 65 6d 5b 22             mem["
0690: 73 74 61 72 74 5f 73 6e 61 72 65 22 5d 20 3d 20  start_snare"] = 
06a0: 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a  true;.        }.
06b0: 20 20 20 20 7d 0a 0a 20 20 20 20 64 69 61 6c 73      }..    dials
06c0: 5b 30 5d 5b 22 63 65 6c 6c 22 5d 2e 6f 6e 43 68  [0]["cell"].onCh
06d0: 61 6e 67 65 28 66 75 6e 63 74 69 6f 6e 20 28 65  ange(function (e
06e0: 29 20 7b 0a 20 20 20 20 20 20 20 20 76 61 72 20  ) {.        var 
06f0: 76 61 6c 20 3d 20 70 61 72 73 65 46 6c 6f 61 74  val = parseFloat
0700: 28 65 5b 22 64 61 74 61 22 5d 2e 76 61 6c 75 65  (e["data"].value
0710: 29 3b 0a 20 20 20 20 20 20 20 20 68 61 6e 64 6c  );.        handl
0720: 65 72 73 5b 22 65 78 22 5d 28 76 61 6c 29 3b 0a  ers["ex"](val);.
0730: 20 20 20 20 7d 29 0a 0a 7d 0a 0a 69 66 20 28 62      })..}..if (b
0740: 61 72 73 20 3c 3d 20 33 20 29 20 7b 0a 20 20 20  ars <= 3 ) {.   
0750: 20 74 72 61 6e 73 69 74 69 6f 6e 20 3d 20 6f 6e   transition = on
0760: 63 65 3b 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 20  ce;.} else {.   
0770: 20 74 72 61 6e 73 69 74 69 6f 6e 20 3d 20 74 77   transition = tw
0780: 65 61 6b 3b 0a 7d 0a 0a 69 66 20 28 69 73 48 69  eak;.}..if (isHi
0790: 74 29 20 7b 0a 20 20 20 20 69 66 20 28 74 72 61  t) {.    if (tra
07a0: 63 6b 5f 6e 6f 20 3d 3d 20 31 29 20 7b 0a 20 20  ck_no == 1) {.  
07b0: 20 20 20 20 20 20 70 28 30 29 3b 0a 20 20 20 20        p(0);.    
07c0: 7d 0a 20 20 20 20 69 66 20 28 74 72 61 63 6b 5f  }.    if (track_
07d0: 6e 6f 20 3d 3d 20 32 29 20 7b 0a 20 20 20 20 20  no == 2) {.     
07e0: 20 20 20 70 28 31 29 3b 0a 20 20 20 20 7d 0a 20     p(1);.    }. 
07f0: 20 20 20 69 66 20 28 74 72 61 63 6b 5f 6e 6f 20     if (track_no 
0800: 3d 3d 20 33 29 20 7b 0a 20 20 20 20 20 20 20 20  == 3) {.        
0810: 69 66 20 28 6d 65 6d 5b 22 73 74 61 72 74 5f 73  if (mem["start_s
0820: 6e 61 72 65 22 5d 29 20 7b 0a 20 20 20 20 20 20  nare"]) {.      
0830: 20 20 20 20 20 20 70 28 32 29 3b 0a 20 20 20 20        p(2);.    
0840: 20 20 20 20 7d 3b 0a 20 20 20 20 7d 0a 7d 0a 0a      };.    }.}..
0850: 0a 60 60 60 0a 0a 4e 6f 77 20 74 72 79 20 63 68  .```..Now try ch
0860: 61 6e 67 69 6e 67 20 74 68 65 20 63 6f 64 65 2e  anging the code.
0870: 0a 0a 60 60 60 0a 70 61 74 74 65 72 6e 73 20 3d  ..```.patterns =
0880: 20 73 63 65 6e 65 32 0a 60 60 60 0a 0a 49 6e 63   scene2.```..Inc
0890: 72 65 61 73 65 20 74 68 65 20 64 69 61 6c 20 74  rease the dial t
08a0: 6f 20 73 65 65 20 74 68 65 20 61 64 64 69 74 69  o see the additi
08b0: 6f 6e 20 6f 66 20 74 68 65 20 73 6e 61 72 65 2e  on of the snare.
08c0: 20 54 68 69 73 20 69 73 20 68 6f 77 20 79 6f 75   This is how you
08d0: 20 63 61 6e 20 75 73 65 20 6f 62 73 65 72 76 65   can use observe
08e0: 72 73 20 74 6f 20 74 72 69 67 67 65 72 20 75 6e  rs to trigger un
08f0: 72 65 6c 61 74 65 64 20 63 68 61 6e 67 65 73 2e  related changes.
0900: 20 49 20 63 61 6c 6c 20 74 68 65 6d 20 73 69 64   I call them sid
0910: 65 65 76 65 6e 74 73 2c 20 61 73 20 74 68 65 20  eevents, as the 
0920: 6c 6f 67 69 63 20 69 73 20 73 69 6d 69 6c 61 72  logic is similar
0930: 20 74 6f 20 73 69 64 65 63 68 61 69 6e 2c 20 77   to sidechain, w
0940: 68 69 63 68 20 74 79 70 69 63 61 6c 6c 79 20 6f  hich typically o
0950: 62 73 65 72 76 65 72 73 20 74 68 65 20 76 6f 6c  bservers the vol
0960: 75 6d 65 2e 0a 0a 43 6f 6d 6d 65 6e 74 20 61 6e  ume...Comment an
0970: 64 20 55 6e 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65  d Uncomment line
0980: 73 20 69 6e 20 74 68 65 20 60 69 66 20 28 69 73  s in the `if (is
0990: 48 69 74 29 60 20 62 6c 6f 63 6b 2e 20 54 6f 20  Hit)` block. To 
09a0: 6d 75 74 65 20 61 6e 64 20 75 6e 6d 75 74 65 20  mute and unmute 
09b0: 73 65 63 74 69 6f 6e 73 2e 0a 0a 2a 4e 6f 74 65  sections...*Note
09c0: 3a 2a 20 60 6d 65 6d 5b 22 6b 30 5f 63 68 61 6e  :* `mem["k0_chan
09d0: 6e 65 6c 22 5d 2e 73 6f 6c 6f 20 3d 20 74 72 75  nel"].solo = tru
09e0: 65 3b 60 20 69 73 20 6e 6f 74 20 77 6f 72 6b 69  e;` is not worki
09f0: 6e 67 2e 0a 0a 2a 2a 56 69 73 75 61 6c 73 2a 2a  ng...**Visuals**
0a00: 0a 0a 43 68 61 6e 67 65 20 74 68 65 20 6f 6e 63  ..Change the onc
0a10: 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68  e function to th
0a20: 69 73 20 61 6e 64 20 63 6c 69 63 6b 20 60 2b 20  is and click `+ 
0a30: 45 78 65 63 75 74 65 20 4f 6e 63 65 60 0a 0a 43  Execute Once`..C
0a40: 6f 64 65 20 69 73 20 74 61 6b 65 6e 20 66 72 6f  ode is taken fro
0a50: 6d 20 62 75 74 74 65 72 63 68 75 72 6e 2e 20 54  m butterchurn. T
0a60: 72 79 20 63 68 61 6e 67 69 6e 67 20 5b 70 72 65  ry changing [pre
0a70: 73 65 74 73 5d 28 68 74 74 70 73 3a 2f 2f 62 75  sets](https://bu
0a80: 74 74 65 72 63 68 75 72 6e 76 69 7a 2e 63 6f 6d  tterchurnviz.com
0a90: 2f 29 20 74 6f 20 67 65 74 20 64 69 66 66 65 72  /) to get differ
0aa0: 65 6e 74 20 76 69 73 75 61 6c 73 2e 0a 0a 60 60  ent visuals...``
0ab0: 60 0a 76 61 72 20 74 77 65 61 6b 20 3d 20 66 75  `.var tweak = fu
0ac0: 6e 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 69  nction() {.    i
0ad0: 6e 69 74 57 69 6e 61 6d 70 28 22 5f 41 64 65 72  nitWinamp("_Ader
0ae0: 72 61 73 69 20 2d 20 57 61 6e 64 65 72 65 72 20  rasi - Wanderer 
0af0: 69 6e 20 43 75 72 76 65 64 20 53 70 61 63 65 20  in Curved Space 
0b00: 2d 20 6d 61 73 68 30 30 30 30 20 2d 20 66 61 63  - mash0000 - fac
0b10: 6c 65 6d 70 74 20 6b 69 62 69 74 7a 69 6e 67 20  lempt kibitzing 
0b20: 6d 65 73 68 75 67 67 61 6e 61 20 73 63 68 6d 61  meshuggana schma
0b30: 6c 74 7a 20 28 47 65 69 73 73 20 63 6f 6c 6f 72  ltz (Geiss color
0b40: 20 6d 69 78 29 22 29 3b 0a 0a 20 20 20 20 72 65   mix)");..    re
0b50: 6e 64 65 72 5f 6c 6f 6f 70 20 3d 20 66 75 6e 63  nder_loop = func
0b60: 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20 20  tion () {.      
0b70: 20 20 77 69 6e 64 6f 77 2e 76 69 73 75 61 6c 69    window.visuali
0b80: 7a 65 72 2e 72 65 6e 64 65 72 28 29 3b 0a 20 20  zer.render();.  
0b90: 20 20 7d 0a 7d 0a 60 60 60 0a 0a 2a 2a 54 77 65    }.}.```..**Twe
0ba0: 61 6b 69 6e 67 2a 2a 0a 0a 46 69 72 73 74 20 63  aking**..First c
0bb0: 6c 69 63 6b 20 60 2b 20 4e 75 6d 62 65 72 60 2e  lick `+ Number`.
0bc0: 20 54 68 69 73 20 69 73 20 75 73 65 66 75 6c 20   This is useful 
0bd0: 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65 20  to check if the 
0be0: 6b 6e 6f 62 20 66 75 6e 63 74 69 6f 6e 20 69 73  knob function is
0bf0: 20 61 63 74 75 61 6c 6c 79 20 77 6f 72 6b 69 6e   actually workin
0c00: 67 2e 20 41 6e 64 20 63 6c 69 63 6b 20 60 2b 20  g. And click `+ 
0c10: 45 78 65 63 75 74 65 20 4f 6e 63 65 60 0a 0a 60  Execute Once`..`
0c20: 60 60 0a 76 61 72 20 74 77 65 61 6b 20 3d 20 66  ``.var tweak = f
0c30: 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20  unction () {.   
0c40: 20 6d 65 6d 2e 6b 31 20 3d 20 6b 6e 6f 62 28 7b   mem.k1 = knob({
0c50: 72 61 6d 70 20 3a 20 5b 30 2e 30 39 2c 31 2e 38  ramp : [0.09,1.8
0c60: 2c 20 30 2e 34 2c 20 32 2c 20 31 2e 35 2c 20 31  , 0.4, 2, 1.5, 1
0c70: 2c 20 30 2e 35 2c 20 33 2c 20 35 2c 20 38 2c 20  , 0.5, 3, 5, 8, 
0c80: 32 5d 2c 20 22 6e 75 6d 62 65 72 22 3a 20 6e 75  2], "number": nu
0c90: 6d 62 65 72 73 5b 30 5d 5b 22 76 22 5d 20 7d 29  mbers[0]["v"] })
0ca0: 3b 0a 20 20 20 20 61 6c 77 61 79 73 20 3d 20 66  ;.    always = f
0cb0: 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20  unction () {.   
0cc0: 20 20 20 20 20 6d 65 6d 5b 22 6b 30 5f 66 69 6c       mem["k0_fil
0cd0: 74 65 72 22 5d 2e 66 72 65 71 75 65 6e 63 79 2e  ter"].frequency.
0ce0: 76 61 6c 75 65 20 3d 20 6d 65 6d 2e 6b 31 2e 6d  value = mem.k1.m
0cf0: 6f 76 65 28 29 20 2a 20 31 30 30 30 3b 0a 20 20  ove() * 1000;.  
0d00: 20 20 7d 0a 7d 0a 60 60 60 0a 0a 41 73 20 79 6f    }.}.```..As yo
0d10: 75 20 63 61 6e 20 73 65 72 65 20 6e 75 6d 62 65  u can sere numbe
0d20: 72 73 20 61 6e 64 20 64 69 61 6c 73 20 77 69 6c  rs and dials wil
0d30: 6c 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20 61  l be available a
0d40: 73 20 61 20 67 6c 6f 62 61 6c 20 61 72 72 61 79  s a global array
0d50: 2e 0a 0a 54 68 65 72 65 20 69 73 20 6e 6f 20 77  ...There is no w
0d60: 61 79 20 74 6f 20 72 65 6d 6f 76 65 20 74 68 65  ay to remove the
0d70: 6d 20 73 6f 20 62 65 20 63 61 72 65 66 75 6c 20  m so be careful 
0d80: 61 62 6f 75 74 20 74 68 65 20 6f 72 64 65 72 20  about the order 
0d90: 69 6e 20 77 68 69 63 68 20 79 6f 75 20 61 64 64  in which you add
0da0: 20 74 68 65 6d 2e 0a 0a 54 68 65 20 66 6f 6c 6c   them...The foll
0db0: 6f 77 69 6e 67 20 63 6f 64 65 20 77 69 6c 6c 20  owing code will 
0dc0: 61 6c 77 61 79 73 20 62 65 20 65 78 65 63 75 74  always be execut
0dd0: 65 64 20 61 73 20 69 74 73 20 61 74 20 74 68 65  ed as its at the
0de0: 20 74 6f 70 20 6c 65 76 65 6c 2e 20 41 73 20 79   top level. As y
0df0: 6f 75 20 63 61 6e 20 73 65 65 20 74 68 69 73 20  ou can see this 
0e00: 63 6f 64 65 20 69 6d 70 6c 69 65 73 20 74 68 61  code implies tha
0e10: 74 20 74 68 65 20 66 69 72 73 74 20 64 69 61 6c  t the first dial
0e20: 20 69 73 20 63 6f 6e 6e 65 63 74 65 64 20 74 6f   is connected to
0e30: 20 74 68 65 20 6d 61 73 74 65 72 20 76 6f 6c 75   the master volu
0e40: 6d 65 2e 20 55 73 65 20 67 75 61 72 64 73 20 74  me. Use guards t
0e50: 6f 20 61 76 6f 69 64 20 67 6f 69 6e 67 20 64 65  o avoid going de
0e60: 61 66 20 61 73 20 73 6f 6d 65 75 6e 64 65 66 69  af as someundefi
0e70: 6e 65 64 73 20 65 64 69 74 69 6e 67 20 63 61 6e  neds editing can
0e80: 20 63 72 65 61 74 65 64 20 62 61 64 20 66 72 65   created bad fre
0e90: 71 75 65 6e 63 79 20 6e 75 6d 62 65 72 73 2e 0a  quency numbers..
0ea0: 0a 60 60 60 0a 54 6f 6e 65 2e 4d 61 73 74 65 72  .```.Tone.Master
0eb0: 2e 76 6f 6c 75 6d 65 2e 76 61 6c 75 65 20 3d 20  .volume.value = 
0ec0: 76 6f 6c 75 6d 65 5f 67 75 61 72 64 28 28 31 20  volume_guard((1 
0ed0: 2d 20 64 69 61 6c 73 5b 30 5d 5b 22 63 65 6c 6c  - dials[0]["cell
0ee0: 22 5d 28 29 29 20 2a 20 2d 33 30 29 3b 0a 60 60  "]()) * -30);.``
0ef0: 60 0a 0a 23 23 23 20 4d 61 6b 69 6e 67 20 61 20  `..### Making a 
0f00: 62 61 73 69 63 20 6c 6f 6f 70 0a 0a 2d 20 4b 69  basic loop..- Ki
0f10: 63 6b 20 2b 20 46 69 6c 74 65 72 0a 2d 20 53 6e  ck + Filter.- Sn
0f20: 61 72 65 20 2b 20 46 69 6c 74 65 72 0a 2d 20 53  are + Filter.- S
0f30: 6e 61 72 65 20 2b 20 46 69 6c 74 65 72 20 2b 20  nare + Filter + 
0f40: 44 65 6c 61 79 0a 2d 20 48 69 67 68 20 48 61 74  Delay.- High Hat
0f50: 0a 2d 20 4c 65 61 64 20 2b 20 46 69 6c 74 65 72  .- Lead + Filter
0f60: 0a 2d 20 44 75 62 20 53 74 61 62 20 2b 20 46 69  .- Dub Stab + Fi
0f70: 6c 74 65 72 20 2b 20 52 65 76 65 72 62 0a 0a 54  lter + Reverb..T
0f80: 69 70 3a 20 49 6e 20 54 6f 6e 65 2e 6a 73 20 79  ip: In Tone.js y
0f90: 6f 75 20 63 61 6e 27 74 20 63 61 6c 6c 20 63 6f  ou can't call co
0fa0: 6e 6e 65 63 74 20 6f 6e 65 20 61 66 74 65 72 20  nnect one after 
0fb0: 61 6e 6f 74 68 65 72 2c 20 79 6f 75 20 6e 65 65  another, you nee
0fc0: 64 20 74 6f 20 75 73 65 20 63 68 61 69 6e 2e 0a  d to use chain..
0fd0: 0a 54 4f 44 4f 3a 20 41 64 64 20 67 6c 69 64 65  .TODO: Add glide
0fe0: 20 74 6f 20 4c 65 61 64 20 74 6f 20 6d 61 6b 65   to Lead to make
0ff0: 20 69 74 20 6d 6f 72 65 20 33 30 33 20 73 6f 75   it more 303 sou
1000: 6e 64 69 6e 67 0a 0a 4d 61 73 74 65 72 20 69 73  nding..Master is
1010: 20 63 6f 6e 6e 65 63 74 65 64 20 77 69 74 68 20   connected with 
1020: 53 75 72 72 6f 75 6e 64 20 61 6e 64 20 56 6f 6c  Surround and Vol
1030: 75 6d 65 20 4c 69 6d 69 74 65 72 2e 0a 55 73 65  ume Limiter..Use
1040: 20 47 61 74 65 73 20 61 6e 64 20 4c 69 6d 69 74   Gates and Limit
1050: 65 72 73 20 74 6f 20 61 76 6f 69 64 20 67 6f 69  ers to avoid goi
1060: 6e 67 20 64 65 61 66 2e 0a 0a 54 6f 6e 65 2e 4d  ng deaf...Tone.M
1070: 75 6c 74 69 49 6e 73 74 72 75 6d 65 6e 74 20 67  ultiInstrument g
1080: 61 76 65 20 6c 6f 74 73 20 6f 66 20 67 6c 69 74  ave lots of glit
1090: 63 68 65 73 2c 20 73 6f 20 63 75 73 74 6f 6d 20  ches, so custom 
10a0: 76 6f 69 63 65 73 20 61 72 65 20 77 72 69 74 74  voices are writt
10b0: 65 6e 20 69 6e 20 74 68 65 20 76 6f 69 63 65 20  en in the voice 
10c0: 66 75 6e 63 74 69 6f 6e 0a 0a 43 68 61 6e 6e 65  function..Channe
10d0: 6c 73 20 70 72 6f 76 69 64 65 0a 2d 20 4d 75 74  ls provide.- Mut
10e0: 65 0a 2d 20 53 6f 6c 6f 0a 0a 4d 6f 72 65 20 69  e.- Solo..More i
10f0: 6d 70 72 6f 76 65 6d 65 6e 74 73 20 66 6f 72 20  mprovements for 
1100: 74 68 65 20 53 74 61 62 0a 0a 20 20 20 20 2d 20  the Stab..    - 
1110: 43 68 6f 72 75 73 20 6f 72 20 50 68 61 73 65 72  Chorus or Phaser
1120: 0a 20 20 20 20 2d 20 43 6f 6d 70 72 65 73 73 6f  .    - Compresso
1130: 72 0a 20 20 20 20 2d 20 44 65 63 61 79 20 69 6e  r.    - Decay in
1140: 20 65 6e 76 65 6c 6f 70 65 0a 20 20 20 20 2d 20   envelope.    - 
1150: 53 65 70 61 72 61 74 65 20 66 69 6c 74 65 72 73  Separate filters
1160: 0a 20 20 20 20 2d 20 45 51 0a 20 20 20 20 2d 20  .    - EQ.    - 
1170: 53 65 6e 64 73 20 66 6f 72 20 6d 6f 72 65 20 64  Sends for more d
1180: 65 6c 61 79 0a 20 20 20 20 2d 20 4c 46 4f 20 66  elay.    - LFO f
1190: 6f 72 20 66 69 6c 74 65 72 73 0a 0a 0a 46 72 65  or filters...Fre
11a0: 65 76 65 72 62 20 64 6f 65 73 20 6e 6f 74 20 77  everb does not w
11b0: 6f 72 6b 20 61 6e 64 20 61 6c 73 6f 20 6e 65 65  ork and also nee
11c0: 64 73 20 4d 6f 6e 6f 20 74 6f 20 66 75 6e 63 74  ds Mono to funct
11d0: 69 6f 6e 20 70 72 6f 70 65 72 6c 79 0a 0a 60 60  ion properly..``
11e0: 60 0a 76 61 72 20 72 65 76 65 72 62 20 3d 20 6e  `.var reverb = n
11f0: 65 77 20 54 6f 6e 65 2e 46 72 65 65 76 65 72 62  ew Tone.Freeverb
1200: 28 29 2e 74 6f 44 65 73 74 69 6e 61 74 69 6f 6e  ().toDestination
1210: 28 29 3b 0a 76 61 72 20 72 65 76 65 72 62 5f 6d  ();.var reverb_m
1220: 6f 6e 6f 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 4d  ono = new Tone.M
1230: 6f 6e 6f 28 29 2e 63 6f 6e 6e 65 63 74 28 72 65  ono().connect(re
1240: 76 65 72 62 29 3b 0a 72 65 76 65 72 62 2e 64 61  verb);.reverb.da
1250: 6d 70 65 6e 69 6e 67 20 3d 20 31 30 30 3b 0a 72  mpening = 100;.r
1260: 65 76 65 72 62 2e 72 6f 6f 6d 53 69 7a 65 20 3d  everb.roomSize =
1270: 20 30 2e 39 3b 0a 60 60 60 0a 0a 23 23 23 20 46   0.9;.```..### F
1280: 75 6c 6c 20 43 6f 64 65 0a 0a 60 60 60 0a 76 6f  ull Code..```.vo
1290: 6c 75 6d 65 5f 67 75 61 72 64 31 20 3d 20 67 75  lume_guard1 = gu
12a0: 61 72 64 28 5b 2d 32 30 2c 31 35 5d 29 0a 54 6f  ard([-20,15]).To
12b0: 6e 65 2e 4d 61 73 74 65 72 2e 76 6f 6c 75 6d 65  ne.Master.volume
12c0: 2e 76 61 6c 75 65 20 3d 20 76 6f 6c 75 6d 65 5f  .value = volume_
12d0: 67 75 61 72 64 31 28 4d 61 74 68 2e 72 6f 75 6e  guard1(Math.roun
12e0: 64 28 64 69 61 6c 73 5b 30 5d 5b 22 63 65 6c 6c  d(dials[0]["cell
12f0: 22 5d 28 29 20 2a 20 33 30 29 20 2d 32 30 29 3b  "]() * 30) -20);
1300: 0a 2f 2f 20 6d 65 6d 5b 22 73 74 61 62 5f 63 68  .// mem["stab_ch
1310: 61 6e 6e 65 6c 22 5d 2e 76 6f 6c 75 6d 65 2e 76  annel"].volume.v
1320: 61 6c 75 65 20 3d 20 76 6f 6c 75 6d 65 5f 67 75  alue = volume_gu
1330: 61 72 64 32 28 2d 32 29 3b 0a 2f 2f 20 6d 65 6d  ard2(-2);.// mem
1340: 5b 22 73 74 61 62 5f 66 69 6c 74 65 72 22 5d 2e  ["stab_filter"].
1350: 66 72 65 71 75 65 6e 63 79 2e 76 61 6c 75 65 20  frequency.value 
1360: 3d 20 4d 61 74 68 2e 72 6f 75 6e 64 28 64 69 61  = Math.round(dia
1370: 6c 73 5b 31 5d 5b 22 63 65 6c 6c 22 5d 28 29 20  ls[1]["cell"]() 
1380: 2a 20 31 30 30 30 30 29 3b 0a 0a 73 63 65 6e 65  * 10000);..scene
1390: 31 20 3d 20 5b 0a 20 20 20 20 63 65 6c 6c 78 28  1 = [.    cellx(
13a0: 22 70 20 31 30 30 30 20 31 30 30 30 20 31 30 30  "p 1000 1000 100
13b0: 30 20 31 30 30 30 22 29 2c 0a 20 20 20 20 63 65  0 1000"),.    ce
13c0: 6c 6c 78 28 22 70 20 30 30 78 30 20 30 30 78 30  llx("p 00x0 00x0
13d0: 20 30 30 78 30 20 30 30 78 30 22 29 2c 0a 20 20   00x0 00x0"),.  
13e0: 20 20 63 65 6c 6c 78 28 22 70 20 30 78 30 30 20    cellx("p 0x00 
13f0: 30 30 30 30 20 30 30 30 30 20 78 30 30 30 22 29  0000 0000 x000")
1400: 2c 0a 20 20 20 20 63 65 6c 6c 78 28 22 70 20 30  ,.    cellx("p 0
1410: 30 30 30 20 78 30 30 30 20 30 30 30 30 20 78 30  000 x000 0000 x0
1420: 30 30 22 29 2c 0a 20 20 20 20 63 65 6c 6c 78 28  00"),.    cellx(
1430: 22 70 20 78 78 30 78 20 63 30 78 30 20 78 30 78  "p xx0x c0x0 x0x
1440: 30 20 78 30 78 78 22 29 2c 0a 20 20 20 20 63 65  0 x0xx"),.    ce
1450: 6c 6c 78 28 22 70 20 78 30 30 30 20 78 30 78 30  llx("p x000 x0x0
1460: 20 30 30 30 30 20 78 30 78 30 22 29 2c 0a 5d 0a   0000 x0x0"),.].
1470: 0a 70 61 74 74 65 72 6e 73 20 3d 20 73 63 65 6e  .patterns = scen
1480: 65 31 0a 0a 66 75 6e 63 74 69 6f 6e 20 4e 6f 69  e1..function Noi
1490: 73 65 53 79 6e 74 68 20 28 6e 61 6d 65 29 20 7b  seSynth (name) {
14a0: 0a 20 20 20 20 6e 61 6d 65 20 3d 20 6e 61 6d 65  .    name = name
14b0: 20 7c 7c 20 22 77 66 22 3b 0a 20 20 20 20 6d 65   || "wf";.    me
14c0: 6d 5b 6e 61 6d 65 20 2b 20 22 5f 73 74 65 72 65  m[name + "_stere
14d0: 6f 22 5d 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 53  o"] = new Tone.S
14e0: 74 65 72 65 6f 57 69 64 65 6e 65 72 28 7b 77 69  tereoWidener({wi
14f0: 64 74 68 3a 20 31 7d 29 3b 0a 20 20 20 20 6d 65  dth: 1});.    me
1500: 6d 5b 6e 61 6d 65 5d 20 3d 20 20 6e 65 77 20 54  m[name] =  new T
1510: 6f 6e 65 2e 4e 6f 69 73 65 28 22 70 69 6e 6b 22  one.Noise("pink"
1520: 29 2e 73 74 61 72 74 28 29 3b 0a 20 20 20 20 6d  ).start();.    m
1530: 65 6d 5b 6e 61 6d 65 20 2b 20 22 5f 66 69 6c 74  em[name + "_filt
1540: 65 72 22 5d 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  er"] = new Tone.
1550: 46 69 6c 74 65 72 28 34 30 30 2c 20 27 6c 6f 77  Filter(400, 'low
1560: 70 61 73 73 27 2c 20 2d 39 36 29 3b 0a 20 20 20  pass', -96);.   
1570: 20 6d 65 6d 5b 6e 61 6d 65 20 2b 20 22 5f 63 68   mem[name + "_ch
1580: 61 6e 6e 65 6c 22 5d 20 3d 20 6e 65 77 20 54 6f  annel"] = new To
1590: 6e 65 2e 43 68 61 6e 6e 65 6c 28 7b 63 68 61 6e  ne.Channel({chan
15a0: 6e 65 6c 43 6f 75 6e 74 3a 20 32 2c 20 76 6f 6c  nelCount: 2, vol
15b0: 75 6d 65 3a 20 2d 31 30 2c 20 70 61 6e 3a 20 2d  ume: -10, pan: -
15c0: 30 2e 38 7d 29 2e 63 68 61 69 6e 28 6d 65 6d 5b  0.8}).chain(mem[
15d0: 6e 61 6d 65 20 2b 20 22 5f 66 69 6c 74 65 72 22  name + "_filter"
15e0: 5d 2c 20 6d 65 6d 5b 6e 61 6d 65 20 2b 20 22 5f  ], mem[name + "_
15f0: 73 74 65 72 65 6f 22 5d 2c 20 6d 65 6d 2e 6d 61  stereo"], mem.ma
1600: 73 74 65 72 29 3b 0a 20 20 20 20 6d 65 6d 5b 6e  ster);.    mem[n
1610: 61 6d 65 5d 2e 63 6f 6e 6e 65 63 74 28 6d 65 6d  ame].connect(mem
1620: 5b 6e 61 6d 65 20 2b 20 22 5f 63 68 61 6e 6e 65  [name + "_channe
1630: 6c 22 5d 29 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e  l"]).}..function
1640: 20 53 74 61 62 28 6e 61 6d 65 29 20 7b 0a 20 20   Stab(name) {.  
1650: 20 20 6e 61 6d 65 20 3d 20 6e 61 6d 65 20 7c 7c    name = name ||
1660: 20 22 73 74 61 62 22 3b 0a 0a 20 20 20 20 6d 65   "stab";..    me
1670: 6d 5b 6e 61 6d 65 20 2b 20 22 5f 66 69 6c 74 65  m[name + "_filte
1680: 72 22 5d 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 46  r"] = new Tone.F
1690: 69 6c 74 65 72 28 35 32 35 30 2c 20 27 6c 6f 77  ilter(5250, 'low
16a0: 70 61 73 73 27 2c 20 2d 39 36 29 3b 0a 20 20 20  pass', -96);.   
16b0: 20 6d 65 6d 5b 6e 61 6d 65 20 2b 20 22 5f 68 66   mem[name + "_hf
16c0: 69 6c 74 65 72 22 5d 20 3d 20 6e 65 77 20 54 6f  ilter"] = new To
16d0: 6e 65 2e 46 69 6c 74 65 72 28 38 30 2c 20 27 68  ne.Filter(80, 'h
16e0: 69 67 68 70 61 73 73 27 2c 20 2d 39 36 29 3b 0a  ighpass', -96);.
16f0: 20 20 20 20 6d 65 6d 5b 6e 61 6d 65 20 2b 20 22      mem[name + "
1700: 5f 72 65 76 65 72 62 22 5d 20 3d 20 6e 65 77 20  _reverb"] = new 
1710: 54 6f 6e 65 2e 52 65 76 65 72 62 28 30 2e 31 29  Tone.Reverb(0.1)
1720: 3b 0a 20 20 20 20 6d 65 6d 5b 6e 61 6d 65 20 2b  ;.    mem[name +
1730: 20 22 5f 64 65 6c 61 79 22 5d 20 3d 20 6e 65 77   "_delay"] = new
1740: 20 54 6f 6e 65 2e 46 65 65 64 62 61 63 6b 44 65   Tone.FeedbackDe
1750: 6c 61 79 28 22 34 6e 22 2c 20 30 2e 34 29 3b 0a  lay("4n", 0.4);.
1760: 20 20 20 20 2f 2f 20 6d 65 6d 5b 6e 61 6d 65 20      // mem[name 
1770: 2b 20 22 5f 70 64 65 6c 61 79 22 5d 20 3d 20 6e  + "_pdelay"] = n
1780: 65 77 20 54 6f 6e 65 2e 50 69 6e 67 50 6f 6e 67  ew Tone.PingPong
1790: 44 65 6c 61 79 28 22 32 6e 22 2c 20 30 2e 31 29  Delay("2n", 0.1)
17a0: 3b 0a 20 20 20 20 6d 65 6d 5b 6e 61 6d 65 20 2b  ;.    mem[name +
17b0: 20 22 5f 73 74 65 72 65 6f 22 5d 20 3d 20 6e 65   "_stereo"] = ne
17c0: 77 20 54 6f 6e 65 2e 53 74 65 72 65 6f 57 69 64  w Tone.StereoWid
17d0: 65 6e 65 72 28 7b 77 69 64 74 68 3a 20 30 2e 32  ener({width: 0.2
17e0: 35 7d 29 3b 0a 20 20 20 20 6d 65 6d 5b 6e 61 6d  5});.    mem[nam
17f0: 65 20 2b 20 22 5f 63 68 61 6e 6e 65 6c 22 5d 20  e + "_channel"] 
1800: 3d 20 6e 65 77 20 54 6f 6e 65 2e 43 68 61 6e 6e  = new Tone.Chann
1810: 65 6c 28 7b 63 68 61 6e 6e 65 6c 43 6f 75 6e 74  el({channelCount
1820: 3a 20 32 2c 20 76 6f 6c 75 6d 65 3a 20 2d 32 7d  : 2, volume: -2}
1830: 29 2e 63 68 61 69 6e 28 6d 65 6d 5b 6e 61 6d 65  ).chain(mem[name
1840: 20 2b 20 22 5f 66 69 6c 74 65 72 22 5d 20 2c 20   + "_filter"] , 
1850: 20 20 6d 65 6d 5b 6e 61 6d 65 20 2b 20 22 5f 64    mem[name + "_d
1860: 65 6c 61 79 22 5d 2c 20 6d 65 6d 5b 6e 61 6d 65  elay"], mem[name
1870: 20 2b 20 22 5f 72 65 76 65 72 62 22 5d 2c 20 20   + "_reverb"],  
1880: 6d 65 6d 5b 6e 61 6d 65 20 2b 20 22 5f 68 66 69  mem[name + "_hfi
1890: 6c 74 65 72 22 5d 20 2c 6d 65 6d 5b 6e 61 6d 65  lter"] ,mem[name
18a0: 20 2b 20 22 5f 73 74 65 72 65 6f 22 5d 2c 20 6d   + "_stereo"], m
18b0: 65 6d 2e 6d 61 73 74 65 72 29 0a 0a 0a 20 20 20  em.master)...   
18c0: 20 66 75 6e 63 74 69 6f 6e 20 76 6f 69 63 65 28   function voice(
18d0: 6e 6f 2c 20 74 79 70 65 29 20 7b 0a 20 20 20 20  no, type) {.    
18e0: 20 20 20 20 6d 65 6d 5b 6e 61 6d 65 20 2b 20 22      mem[name + "
18f0: 5f 73 79 6e 74 68 22 20 2b 20 6e 6f 5d 20 3d 20  _synth" + no] = 
1900: 6e 65 77 20 54 6f 6e 65 2e 4d 6f 6e 6f 53 79 6e  new Tone.MonoSyn
1910: 74 68 28 7b 0a 20 20 20 20 20 20 20 20 20 20 20  th({.           
1920: 20 6f 73 63 69 6c 6c 61 74 6f 72 3a 20 7b 0a 20   oscillator: {. 
1930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1940: 79 70 65 3a 20 74 79 70 65 0a 20 20 20 20 20 20  ype: type.      
1950: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1960: 7d 29 0a 20 20 20 20 20 20 20 20 6d 65 6d 5b 6e  }).        mem[n
1970: 61 6d 65 20 2b 20 22 5f 73 79 6e 74 68 22 20 2b  ame + "_synth" +
1980: 20 6e 6f 5d 2e 63 6f 6e 6e 65 63 74 28 6d 65 6d   no].connect(mem
1990: 5b 6e 61 6d 65 20 2b 20 22 5f 63 68 61 6e 6e 65  [name + "_channe
19a0: 6c 22 5d 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  l"]);.    }..   
19b0: 20 76 6f 69 63 65 28 31 2c 20 22 73 61 77 74 6f   voice(1, "sawto
19c0: 6f 74 68 22 29 0a 20 20 20 20 76 6f 69 63 65 28  oth").    voice(
19d0: 32 2c 20 22 73 61 77 74 6f 6f 74 68 22 29 0a 20  2, "sawtooth"). 
19e0: 20 20 20 76 6f 69 63 65 28 33 2c 20 22 73 61 77     voice(3, "saw
19f0: 74 6f 6f 74 68 22 29 0a 20 20 20 20 76 6f 69 63  tooth").    voic
1a00: 65 28 34 2c 20 22 70 77 6d 22 29 0a 20 20 20 20  e(4, "pwm").    
1a10: 76 6f 69 63 65 28 35 2c 20 22 70 77 6d 22 29 0a  voice(5, "pwm").
1a20: 20 20 20 20 76 6f 69 63 65 28 36 2c 20 22 70 77      voice(6, "pw
1a30: 6d 22 29 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20  m").}..function 
1a40: 73 28 76 65 6c 2c 20 6e 6f 74 65 73 2c 20 64 75  s(vel, notes, du
1a50: 72 61 74 69 6f 6e 29 20 7b 0a 20 20 20 20 76 65  ration) {.    ve
1a60: 6c 20 3d 20 76 65 6c 20 7c 7c 20 31 2e 30 3b 0a  l = vel || 1.0;.
1a70: 20 20 20 20 64 75 72 61 74 69 6f 6e 20 3d 20 64      duration = d
1a80: 75 72 61 74 69 6f 6e 20 7c 7c 20 22 32 6e 22 3b  uration || "2n";
1a90: 0a 20 20 20 20 6e 6f 74 65 73 20 3d 20 6e 6f 74  .    notes = not
1aa0: 65 73 20 7c 7c 20 20 5b 22 45 32 22 2c 20 22 42  es ||  ["E2", "B
1ab0: 32 22 2c 20 22 47 32 22 5d 3b 0a 20 20 20 20 6d  2", "G2"];.    m
1ac0: 65 6d 5b 22 73 74 61 62 5f 73 79 6e 74 68 31 22  em["stab_synth1"
1ad0: 5d 2e 74 72 69 67 67 65 72 41 74 74 61 63 6b 52  ].triggerAttackR
1ae0: 65 6c 65 61 73 65 28 6e 6f 74 65 73 5b 30 5d 2c  elease(notes[0],
1af0: 20 64 75 72 61 74 69 6f 6e 2c 20 75 6e 64 65 66   duration, undef
1b00: 69 6e 65 64 2c 20 76 65 6c 29 3b 0a 20 20 20 20  ined, vel);.    
1b10: 6d 65 6d 5b 22 73 74 61 62 5f 73 79 6e 74 68 32  mem["stab_synth2
1b20: 22 5d 2e 74 72 69 67 67 65 72 41 74 74 61 63 6b  "].triggerAttack
1b30: 52 65 6c 65 61 73 65 28 6e 6f 74 65 73 5b 31 5d  Release(notes[1]
1b40: 2c 20 64 75 72 61 74 69 6f 6e 2c 20 75 6e 64 65  , duration, unde
1b50: 66 69 6e 65 64 2c 20 76 65 6c 29 3b 0a 20 20 20  fined, vel);.   
1b60: 20 6d 65 6d 5b 22 73 74 61 62 5f 73 79 6e 74 68   mem["stab_synth
1b70: 33 22 5d 2e 74 72 69 67 67 65 72 41 74 74 61 63  3"].triggerAttac
1b80: 6b 52 65 6c 65 61 73 65 28 6e 6f 74 65 73 5b 32  kRelease(notes[2
1b90: 5d 2c 20 64 75 72 61 74 69 6f 6e 2c 20 75 6e 64  ], duration, und
1ba0: 65 66 69 6e 65 64 2c 20 76 65 6c 29 3b 0a 0a 20  efined, vel);.. 
1bb0: 20 20 20 6d 65 6d 5b 22 73 74 61 62 5f 73 79 6e     mem["stab_syn
1bc0: 74 68 34 22 5d 2e 74 72 69 67 67 65 72 41 74 74  th4"].triggerAtt
1bd0: 61 63 6b 52 65 6c 65 61 73 65 28 6e 6f 74 65 73  ackRelease(notes
1be0: 5b 30 5d 2c 20 64 75 72 61 74 69 6f 6e 2c 20 75  [0], duration, u
1bf0: 6e 64 65 66 69 6e 65 64 2c 20 76 65 6c 29 3b 0a  ndefined, vel);.
1c00: 20 20 20 20 6d 65 6d 5b 22 73 74 61 62 5f 73 79      mem["stab_sy
1c10: 6e 74 68 35 22 5d 2e 74 72 69 67 67 65 72 41 74  nth5"].triggerAt
1c20: 74 61 63 6b 52 65 6c 65 61 73 65 28 6e 6f 74 65  tackRelease(note
1c30: 73 5b 31 5d 2c 20 64 75 72 61 74 69 6f 6e 2c 20  s[1], duration, 
1c40: 75 6e 64 65 66 69 6e 65 64 2c 20 76 65 6c 29 3b  undefined, vel);
1c50: 0a 20 20 20 20 6d 65 6d 5b 22 73 74 61 62 5f 73  .    mem["stab_s
1c60: 79 6e 74 68 36 22 5d 2e 74 72 69 67 67 65 72 41  ynth6"].triggerA
1c70: 74 74 61 63 6b 52 65 6c 65 61 73 65 28 6e 6f 74  ttackRelease(not
1c80: 65 73 5b 32 5d 2c 20 64 75 72 61 74 69 6f 6e 2c  es[2], duration,
1c90: 20 75 6e 64 65 66 69 6e 65 64 2c 20 76 65 6c 29   undefined, vel)
1ca0: 3b 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20 6f 6e  ;.}..function on
1cb0: 63 65 28 29 20 7b 0a 20 20 20 20 76 61 72 20 70  ce() {.    var p
1cc0: 72 3b 0a 20 20 20 20 63 6f 6e 73 74 20 73 20 3d  r;.    const s =
1cd0: 20 28 20 70 20 29 20 3d 3e 20 7b 0a 20 20 20 20   ( p ) => {.    
1ce0: 20 20 20 20 70 72 20 3d 20 70 3b 0a 20 20 20 20      pr = p;.    
1cf0: 20 20 20 20 76 61 72 20 69 6d 67 3b 0a 20 20 20      var img;.   
1d00: 20 20 20 20 20 6c 65 74 20 78 20 3d 20 31 30 30       let x = 100
1d10: 3b 0a 20 20 20 20 20 20 20 20 6c 65 74 20 79 20  ;.        let y 
1d20: 3d 20 31 30 30 3b 0a 0a 20 20 20 20 20 20 20 20  = 100;..        
1d30: 70 2e 73 65 74 75 70 20 3d 20 66 75 6e 63 74 69  p.setup = functi
1d40: 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20 20 20 20  on() {.         
1d50: 20 20 20 76 61 72 20 78 20 3d 20 70 2e 63 72 65     var x = p.cre
1d60: 61 74 65 43 61 6e 76 61 73 28 37 30 30 2c 20 34  ateCanvas(700, 4
1d70: 31 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  10);.           
1d80: 20 78 2e 63 61 6e 76 61 73 2e 73 74 79 6c 65 2e   x.canvas.style.
1d90: 70 6f 73 69 74 69 6f 6e 20 3d 20 22 61 62 73 6f  position = "abso
1da0: 6c 75 74 65 22 3b 0a 20 20 20 20 20 20 20 20 20  lute";.         
1db0: 20 20 20 70 2e 66 72 61 6d 65 52 61 74 65 28 33     p.frameRate(3
1dc0: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
1dd0: 69 6d 67 20 3d 20 70 2e 6c 6f 61 64 49 6d 61 67  img = p.loadImag
1de0: 65 28 27 2f 74 65 73 74 2e 70 6e 67 27 29 3b 0a  e('/test.png');.
1df0: 20 20 20 20 20 20 20 20 7d 3b 0a 0a 20 20 20 20          };..    
1e00: 20 20 20 20 70 2e 64 72 61 77 20 3d 20 66 75 6e      p.draw = fun
1e10: 63 74 69 6f 6e 28 29 20 7b 0a 20 20 20 20 20 20  ction() {.      
1e20: 20 20 20 20 20 20 76 61 72 20 65 20 3d 20 67 65        var e = ge
1e30: 74 52 61 6e 64 6f 6d 49 6e 74 28 32 29 3b 0a 20  tRandomInt(2);. 
1e40: 20 20 20 20 20 20 20 20 20 20 20 70 2e 63 6c 65             p.cle
1e50: 61 72 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ar();.          
1e60: 20 20 69 66 20 28 65 20 3d 3d 20 30 29 20 7b 0a    if (e == 0) {.
1e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e80: 2f 2f 20 20 20 70 2e 66 69 6c 6c 28 31 32 33 29  //   p.fill(123)
1e90: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
1ea0: 20 20 2f 2f 20 20 70 2e 72 65 63 74 28 78 2c 79    //  p.rect(x,y
1eb0: 2c 35 30 2c 35 30 29 3b 0a 20 20 20 20 20 20 20  ,50,50);.       
1ec0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20       } else {.  
1ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1ee0: 20 20 70 2e 69 6d 61 67 65 28 69 6d 67 2c 20 30    p.image(img, 0
1ef0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
1f00: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 3b 0a 20    }.        };. 
1f10: 20 20 20 7d 3b 0a 0a 20 20 20 20 6c 65 74 20 6d     };..    let m
1f20: 79 70 35 20 3d 20 6e 65 77 20 70 35 28 73 2c 20  yp5 = new p5(s, 
1f30: 20 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65   document.getEle
1f40: 6d 65 6e 74 42 79 49 64 28 27 63 61 6e 76 61 73  mentById('canvas
1f50: 2d 63 6f 6e 74 61 69 6e 65 72 27 29 29 3b 0a 20  -container'));. 
1f60: 20 20 20 0a 0a 20 20 20 20 76 61 72 20 76 69 73     ..    var vis
1f70: 75 61 6c 69 7a 65 72 20 3d 20 69 6e 69 74 57 69  ualizer = initWi
1f80: 6e 61 6d 70 28 22 5f 41 64 65 72 72 61 73 69 20  namp("_Aderrasi 
1f90: 2d 20 57 61 6e 64 65 72 65 72 20 69 6e 20 43 75  - Wanderer in Cu
1fa0: 72 76 65 64 20 53 70 61 63 65 20 2d 20 6d 61 73  rved Space - mas
1fb0: 68 30 30 30 30 20 2d 20 66 61 63 6c 65 6d 70 74  h0000 - faclempt
1fc0: 20 6b 69 62 69 74 7a 69 6e 67 20 6d 65 73 68 75   kibitzing meshu
1fd0: 67 67 61 6e 61 20 73 63 68 6d 61 6c 74 7a 20 28  ggana schmaltz (
1fe0: 47 65 69 73 73 20 63 6f 6c 6f 72 20 6d 69 78 29  Geiss color mix)
1ff0: 22 29 3b 0a 0a 20 20 20 20 72 65 6e 64 65 72 5f  ");..    render_
2000: 6c 6f 6f 70 20 3d 20 66 75 6e 63 74 69 6f 6e 20  loop = function 
2010: 28 29 20 7b 0a 20 20 20 20 20 20 20 20 76 69 73  () {.        vis
2020: 75 61 6c 69 7a 65 72 2e 72 65 6e 64 65 72 28 29  ualizer.render()
2030: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 0a 20 20 20  ;.    }.    .   
2040: 20 54 6f 6e 65 2e 4d 61 73 74 65 72 2e 76 6f 6c   Tone.Master.vol
2050: 75 6d 65 2e 76 61 6c 75 65 20 3d 20 2d 33 30 3b  ume.value = -30;
2060: 0a 20 20 20 20 6d 65 6d 2e 6d 61 73 74 65 72 20  .    mem.master 
2070: 3d 20 6e 65 77 20 54 6f 6e 65 2e 43 68 61 6e 6e  = new Tone.Chann
2080: 65 6c 28 7b 63 68 61 6e 6e 65 6c 43 6f 75 6e 74  el({channelCount
2090: 3a 20 32 2c 20 76 6f 6c 75 6d 65 3a 20 2d 31 30  : 2, volume: -10
20a0: 7d 29 2e 63 68 61 69 6e 28 54 6f 6e 65 2e 44 65  }).chain(Tone.De
20b0: 73 74 69 6e 61 74 69 6f 6e 29 3b 0a 0a 20 20 20  stination);..   
20c0: 20 2f 2f 20 4e 6f 69 73 65 53 79 6e 74 68 28 29   // NoiseSynth()
20d0: 3b 0a 20 20 20 20 53 74 61 62 28 29 3b 0a 20 20  ;.    Stab();.  
20e0: 20 20 53 61 6d 70 6c 65 28 22 6b 22 2c 20 30 2c    Sample("k", 0,
20f0: 20 33 30 30 30 2c 20 33 29 3b 0a 20 20 20 20 53   3000, 3);.    S
2100: 61 6d 70 6c 65 28 22 68 22 2c 20 31 2c 20 37 30  ample("h", 1, 70
2110: 30 30 2c 20 2d 31 35 29 3b 0a 20 20 20 20 53 61  00, -15);.    Sa
2120: 6d 70 6c 65 28 22 73 6e 22 2c 32 2c 20 36 30 30  mple("sn",2, 600
2130: 30 2c 20 2d 31 35 29 3b 0a 20 20 20 20 53 61 6d  0, -15);.    Sam
2140: 70 6c 65 28 22 63 22 2c 20 33 2c 20 36 32 30 2c  ple("c", 3, 620,
2150: 20 32 29 3b 0a 20 20 20 20 53 61 6d 70 6c 65 28   2);.    Sample(
2160: 22 6c 22 2c 20 34 2c 20 34 32 30 2c 20 2d 31 35  "l", 4, 420, -15
2170: 29 3b 0a 0a 20 20 20 20 68 61 6e 64 6c 65 72 73  );..    handlers
2180: 5b 22 31 22 5d 20 3d 20 66 75 6e 63 74 69 6f 6e  ["1"] = function
2190: 20 28 76 61 6c 29 20 7b 0a 20 20 20 20 20 20 20   (val) {.       
21a0: 20 69 66 20 28 76 61 6c 20 3e 20 30 2e 35 29 20   if (val > 0.5) 
21b0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 65  {.            me
21c0: 6d 5b 22 73 74 61 72 74 5f 73 6e 61 72 65 22 5d  m["start_snare"]
21d0: 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20   = true;.       
21e0: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
21f0: 20 20 20 20 20 20 6d 65 6d 5b 22 73 74 61 72 74        mem["start
2200: 5f 73 6e 61 72 65 22 5d 20 3d 20 66 61 6c 73 65  _snare"] = false
2210: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
2220: 20 20 20 20 6d 65 6d 5b 22 73 74 61 62 5f 66 69      mem["stab_fi
2230: 6c 74 65 72 22 5d 2e 51 2e 76 61 6c 75 65 20 3d  lter"].Q.value =
2240: 20 4d 61 74 68 2e 72 6f 75 6e 64 28 76 61 6c 20   Math.round(val 
2250: 2a 20 35 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  * 5);.    }..   
2260: 20 64 69 61 6c 73 5b 31 5d 5b 22 63 65 6c 6c 22   dials[1]["cell"
2270: 5d 2e 6f 6e 43 68 61 6e 67 65 28 66 75 6e 63 74  ].onChange(funct
2280: 69 6f 6e 20 28 65 29 20 7b 0a 20 20 20 20 20 20  ion (e) {.      
2290: 20 20 76 61 72 20 76 61 6c 20 3d 20 70 61 72 73    var val = pars
22a0: 65 46 6c 6f 61 74 28 65 5b 22 64 61 74 61 22 5d  eFloat(e["data"]
22b0: 2e 76 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 20  .value);.       
22c0: 20 68 61 6e 64 6c 65 72 73 5b 22 31 22 5d 28 76   handlers["1"](v
22d0: 61 6c 29 3b 0a 20 20 20 20 7d 29 0a 0a 7d 0a 0a  al);.    })..}..
22e0: 66 75 6e 63 74 69 6f 6e 20 74 77 65 61 6b 20 28  function tweak (
22f0: 29 20 7b 0a 20 20 20 20 6d 65 6d 2e 6b 31 20 3d  ) {.    mem.k1 =
2300: 20 6b 6e 6f 62 28 7b 72 61 6d 70 20 3a 20 5b 30   knob({ramp : [0
2310: 2e 35 32 35 2c 20 30 2e 38 2c 20 30 2e 34 2c 20  .525, 0.8, 0.4, 
2320: 31 2c 20 30 2e 32 35 2c 20 30 2e 37 35 2c 20 31  1, 0.25, 0.75, 1
2330: 2c 20 30 2e 32 35 2c 20 30 2e 31 5d 2c 20 22 6e  , 0.25, 0.1], "n
2340: 75 6d 62 65 72 22 3a 20 64 69 61 6c 73 5b 32 5d  umber": dials[2]
2350: 5b 22 63 65 6c 6c 22 5d 20 7d 29 3b 0a 20 20 20  ["cell"] });.   
2360: 20 61 6c 77 61 79 73 20 3d 20 66 75 6e 63 74 69   always = functi
2370: 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20 20 20 20  on () {.        
2380: 6d 65 6d 5b 22 73 74 61 62 5f 66 69 6c 74 65 72  mem["stab_filter
2390: 22 5d 2e 66 72 65 71 75 65 6e 63 79 2e 76 61 6c  "].frequency.val
23a0: 75 65 20 3d 20 6d 65 6d 2e 6b 31 2e 6d 6f 76 65  ue = mem.k1.move
23b0: 28 29 20 2a 20 31 30 30 30 30 3b 0a 20 20 20 20  () * 10000;.    
23c0: 7d 0a 7d 0a 0a 69 66 20 28 62 61 72 73 20 3c 3d  }.}..if (bars <=
23d0: 20 33 20 29 20 7b 0a 20 20 20 20 74 72 61 6e 73   3 ) {.    trans
23e0: 69 74 69 6f 6e 20 3d 20 6f 6e 63 65 3b 0a 7d 20  ition = once;.} 
23f0: 65 6c 73 65 20 7b 0a 20 20 20 20 74 72 61 6e 73  else {.    trans
2400: 69 74 69 6f 6e 20 3d 20 74 77 65 61 6b 3b 0a 7d  ition = tweak;.}
2410: 0a 0a 69 66 20 28 69 73 48 69 74 29 20 7b 0a 20  ..if (isHit) {. 
2420: 20 20 20 69 66 20 28 74 72 61 63 6b 5f 6e 6f 20     if (track_no 
2430: 3d 3d 20 31 29 20 7b 0a 20 20 20 20 20 20 20 20  == 1) {.        
2440: 69 66 20 28 62 61 72 73 20 3e 20 30 20 29 20 7b  if (bars > 0 ) {
2450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 28 30  .            p(0
2460: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
2470: 20 7d 0a 20 20 20 20 69 66 20 28 74 72 61 63 6b   }.    if (track
2480: 5f 6e 6f 20 3d 3d 20 32 29 20 7b 0a 20 20 20 20  _no == 2) {.    
2490: 20 20 20 20 69 66 20 28 62 61 72 73 20 3e 20 38      if (bars > 8
24a0: 20 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20   ) {.           
24b0: 20 70 28 31 29 3b 0a 20 20 20 20 20 20 20 20 7d   p(1);.        }
24c0: 20 20 20 0a 20 20 20 20 7d 0a 20 20 20 20 69 66     .    }.    if
24d0: 20 28 74 72 61 63 6b 5f 6e 6f 20 3d 3d 20 33 29   (track_no == 3)
24e0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 62   {.        if (b
24f0: 61 72 73 20 3e 20 34 20 29 20 7b 0a 20 20 20 20  ars > 4 ) {.    
2500: 20 20 20 20 20 20 20 20 2f 2f 20 73 28 29 3b 0a          // s();.
2510: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2520: 20 20 69 66 20 28 62 61 72 73 20 3d 3d 20 36 29    if (bars == 6)
2530: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 74   {.            t
2540: 72 61 6e 73 69 74 69 6f 6e 28 29 3b 0a 20 20 20  ransition();.   
2550: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
2560: 20 69 66 20 28 74 72 61 63 6b 5f 6e 6f 20 3d 3d   if (track_no ==
2570: 20 34 29 20 7b 0a 20 20 20 20 20 20 20 20 69 66   4) {.        if
2580: 20 28 6d 65 6d 5b 22 73 74 61 72 74 5f 73 6e 61   (mem["start_sna
2590: 72 65 22 5d 29 20 7b 0a 20 20 20 20 20 20 20 20  re"]) {.        
25a0: 20 20 20 20 70 28 32 29 3b 0a 20 20 20 20 20 20      p(2);.      
25b0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
25c0: 20 28 74 72 61 63 6b 5f 6e 6f 20 3d 3d 20 35 29   (track_no == 5)
25d0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 62   {.        if (b
25e0: 61 72 73 20 3e 20 31 32 29 20 7b 0a 20 20 20 20  ars > 12) {.    
25f0: 20 20 20 20 20 20 20 20 70 28 33 29 0a 20 20 20          p(3).   
2600: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
2610: 20 69 66 20 28 74 72 61 63 6b 5f 6e 6f 20 3d 3d   if (track_no ==
2620: 20 36 29 20 7b 0a 20 20 20 20 20 20 20 2f 2f 20   6) {.       // 
2630: 70 28 34 2c 20 22 43 33 22 29 0a 20 20 20 20 7d  p(4, "C3").    }
2640: 0a 7d 0a 0a 69 66 20 28 63 6f 75 6e 74 20 3d 3d  .}..if (count ==
2650: 20 28 6d 65 6d 5b 22 6b 5f 6c 61 73 74 22 5d 20   (mem["k_last"] 
2660: 2b 20 33 29 29 20 7b 0a 20 20 20 20 70 6e 28 22  + 3)) {.    pn("
2670: 68 22 29 3b 0a 7d 0a 60 60 60 0a 0a 0a 23 23 20  h");.}.```...## 
2680: 44 65 6d 6f 20 53 6f 6e 67 20 31 20 2f 2f 20 54  Demo Song 1 // T
2690: 65 63 68 6e 6f 0a 0a 3c 69 66 72 61 6d 65 20 77  echno..<iframe w
26a0: 69 64 74 68 3d 22 35 36 30 22 20 68 65 69 67 68  idth="560" heigh
26b0: 74 3d 22 33 31 35 22 20 73 72 63 3d 22 68 74 74  t="315" src="htt
26c0: 70 73 3a 2f 2f 77 77 77 2e 79 6f 75 74 75 62 65  ps://www.youtube
26d0: 2e 63 6f 6d 2f 65 6d 62 65 64 2f 47 54 66 6d 54  .com/embed/GTfmT
26e0: 4d 72 53 70 61 67 22 20 74 69 74 6c 65 3d 22 59  MrSpag" title="Y
26f0: 6f 75 54 75 62 65 20 76 69 64 65 6f 20 70 6c 61  ouTube video pla
2700: 79 65 72 22 20 66 72 61 6d 65 62 6f 72 64 65 72  yer" frameborder
2710: 3d 22 30 22 20 61 6c 6c 6f 77 3d 22 61 63 63 65  ="0" allow="acce
2720: 6c 65 72 6f 6d 65 74 65 72 3b 20 61 75 74 6f 70  lerometer; autop
2730: 6c 61 79 3b 20 63 6c 69 70 62 6f 61 72 64 2d 77  lay; clipboard-w
2740: 72 69 74 65 3b 20 65 6e 63 72 79 70 74 65 64 2d  rite; encrypted-
2750: 6d 65 64 69 61 3b 20 67 79 72 6f 73 63 6f 70 65  media; gyroscope
2760: 3b 20 70 69 63 74 75 72 65 2d 69 6e 2d 70 69 63  ; picture-in-pic
2770: 74 75 72 65 22 20 61 6c 6c 6f 77 66 75 6c 6c 73  ture" allowfulls
2780: 63 72 65 65 6e 3e 3c 2f 69 66 72 61 6d 65 3e 0a  creen></iframe>.
2790: 0a 50 6f 73 74 70 72 6f 63 65 73 73 65 64 20 75  .Postprocessed u
27a0: 73 69 6e 67 20 52 65 61 70 65 72 20 77 69 74 68  sing Reaper with
27b0: 20 45 51 20 61 6e 64 20 53 75 72 72 6f 75 6e 64   EQ and Surround
27c0: 20 65 66 66 65 63 74 73 20 74 6f 20 61 64 64 20   effects to add 
27d0: 73 6f 6d 65 20 73 70 61 72 6b 6c 65 2e 0a 56 69  some sparkle..Vi
27e0: 64 65 6f 20 69 73 20 72 65 63 6f 72 64 65 64 20  deo is recorded 
27f0: 77 69 74 68 20 74 68 65 20 68 65 6c 70 20 6f 66  with the help of
2800: 20 42 6c 61 63 6b 68 6f 6c 65 20 61 6e 64 20 4b   Blackhole and K
2810: 61 70 20 61 6e 64 20 72 65 6e 64 65 72 65 64 20  ap and rendered 
2820: 62 79 20 52 65 61 70 65 72 2e 0a 0a 53 61 6d 70  by Reaper...Samp
2830: 6c 65 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 44  les taken from D
2840: 65 65 70 20 54 65 63 68 6e 6f 20 61 6e 64 20 44  eep Techno and D
2850: 75 62 20 54 65 63 68 6e 6f 20 63 6f 6c 6c 65 63  ub Techno collec
2860: 74 69 6f 6e 73 20 66 72 6f 6d 20 73 70 6c 69 63  tions from splic
2870: 65 2e 20 53 61 64 6c 79 20 49 20 63 61 6e 27 74  e. Sadly I can't
2880: 20 64 69 73 74 72 69 62 75 74 65 20 74 68 65 20   distribute the 
2890: 73 6f 6e 67 20 69 74 73 65 6c 66 20 61 73 20 49  song itself as I
28a0: 20 77 6f 75 6c 64 20 61 6c 73 6f 20 68 61 76 65   would also have
28b0: 20 74 6f 20 64 69 73 74 72 69 62 75 74 65 20 74   to distribute t
28c0: 68 65 20 73 61 6d 70 6c 65 73 20 77 69 74 68 20  he samples with 
28d0: 69 74 2e 20 20 0a 0a 43 6f 64 65 20 66 6f 72 20  it.  ..Code for 
28e0: 74 68 65 20 44 65 6d 6f 20 53 6f 6e 67 2e 20 54  the Demo Song. T
28f0: 68 65 20 76 69 73 75 61 6c 69 73 61 74 69 6f 6e  he visualisation
2900: 20 77 61 73 20 64 69 73 61 62 6c 65 64 20 69 6e   was disabled in
2910: 20 74 68 65 20 44 65 6d 6f 20 61 73 20 69 74 20   the Demo as it 
2920: 77 61 73 20 63 61 75 73 69 6e 67 20 61 20 68 75  was causing a hu
2930: 67 65 20 6c 61 67 20 77 68 69 6c 65 20 72 65 63  ge lag while rec
2940: 6f 72 64 69 6e 67 20 6f 6e 20 62 6f 74 68 20 77  ording on both w
2950: 69 6e 64 6f 77 73 20 61 6e 64 20 6d 61 63 2e 0a  indows and mac..
2960: 0a 4e 6f 74 65 3a 20 43 6f 75 6c 64 20 63 6f 75  .Note: Could cou
2970: 6c 64 20 62 65 20 6f 75 74 64 61 74 65 64 20 64  ld be outdated d
2980: 75 65 20 74 6f 20 6c 61 74 65 73 74 20 63 68 61  ue to latest cha
2990: 6e 67 65 73 20 74 6f 20 74 68 65 20 41 50 49 2e  nges to the API.
29a0: 0a 0a 60 60 60 0a 76 6f 6c 75 6d 65 5f 67 75 61  ..```.volume_gua
29b0: 72 64 31 20 3d 20 67 75 61 72 64 28 5b 2d 32 30  rd1 = guard([-20
29c0: 2c 31 35 5d 29 0a 76 6f 6c 75 6d 65 5f 67 75 61  ,15]).volume_gua
29d0: 72 64 32 20 3d 20 67 75 61 72 64 28 5b 2d 32 30  rd2 = guard([-20
29e0: 2c 31 35 5d 29 0a 54 6f 6e 65 2e 4d 61 73 74 65  ,15]).Tone.Maste
29f0: 72 2e 76 6f 6c 75 6d 65 2e 76 61 6c 75 65 20 3d  r.volume.value =
2a00: 20 76 6f 6c 75 6d 65 5f 67 75 61 72 64 31 28 4d   volume_guard1(M
2a10: 61 74 68 2e 72 6f 75 6e 64 28 64 69 61 6c 73 5b  ath.round(dials[
2a20: 30 5d 5b 22 63 65 6c 6c 22 5d 28 29 20 2a 20 33  0]["cell"]() * 3
2a30: 30 29 20 2d 32 30 29 3b 0a 20 2f 2f 6d 65 6d 5b  0) -20);. //mem[
2a40: 22 73 74 61 62 5f 63 68 61 6e 6e 65 6c 22 5d 2e  "stab_channel"].
2a50: 76 6f 6c 75 6d 65 2e 76 61 6c 75 65 20 3d 20 76  volume.value = v
2a60: 6f 6c 75 6d 65 5f 67 75 61 72 64 32 28 2d 32 29  olume_guard2(-2)
2a70: 3b 0a 20 2f 2f 6d 65 6d 5b 22 73 74 61 62 5f 66  ;. //mem["stab_f
2a80: 69 6c 74 65 72 22 5d 2e 66 72 65 71 75 65 6e 63  ilter"].frequenc
2a90: 79 2e 76 61 6c 75 65 20 3d 20 4d 61 74 68 2e 72  y.value = Math.r
2aa0: 6f 75 6e 64 28 64 69 61 6c 73 5b 31 5d 5b 22 63  ound(dials[1]["c
2ab0: 65 6c 6c 22 5d 28 29 20 2a 20 31 30 30 30 30 29  ell"]() * 10000)
2ac0: 3b 0a 2f 2f 6d 65 6d 5b 22 6c 5f 66 69 6c 74 65  ;.//mem["l_filte
2ad0: 72 22 5d 2e 66 72 65 71 75 65 6e 63 79 2e 76 61  r"].frequency.va
2ae0: 6c 75 65 20 3d 20 4d 61 74 68 2e 72 6f 75 6e 64  lue = Math.round
2af0: 28 64 69 61 6c 73 5b 31 5d 5b 22 63 65 6c 6c 22  (dials[1]["cell"
2b00: 5d 28 29 20 2a 20 31 30 30 30 29 3b 0a 0a 0a 73  ]() * 1000);...s
2b10: 63 65 6e 65 31 20 3d 20 5b 0a 20 20 20 20 63 65  cene1 = [.    ce
2b20: 6c 6c 78 28 22 70 20 31 30 30 30 20 31 30 30 30  llx("p 1000 1000
2b30: 20 31 30 30 30 20 31 30 30 30 22 29 2c 0a 20 20   1000 1000"),.  
2b40: 20 20 63 65 6c 6c 78 28 22 70 20 78 30 30 30 20    cellx("p x000 
2b50: 30 30 30 30 20 30 30 30 30 20 30 30 30 30 22 29  0000 0000 0000")
2b60: 2c 0a 20 20 20 20 63 65 6c 6c 78 28 22 70 20 30  ,.    cellx("p 0
2b70: 78 30 30 20 30 30 30 30 20 30 78 30 30 20 78 30  x00 0000 0x00 x0
2b80: 30 30 22 29 2c 0a 20 20 20 20 63 65 6c 6c 78 28  00"),.    cellx(
2b90: 22 70 20 30 30 30 30 20 78 30 30 30 20 30 30 30  "p 0000 x000 000
2ba0: 30 20 78 30 30 30 22 29 2c 0a 20 20 20 20 63 65  0 x000"),.    ce
2bb0: 6c 6c 78 28 22 70 20 78 30 30 30 20 30 30 78 30  llx("p x000 00x0
2bc0: 20 30 78 30 30 20 78 30 78 78 22 29 2c 0a 20 20   0x00 x0xx"),.  
2bd0: 20 20 63 65 6c 6c 78 28 22 70 20 30 30 78 30 20    cellx("p 00x0 
2be0: 30 30 78 30 20 30 30 30 30 20 30 30 78 30 22 29  00x0 0000 00x0")
2bf0: 2c 0a 20 20 20 20 63 65 6c 6c 78 28 22 70 20 30  ,.    cellx("p 0
2c00: 30 78 30 20 30 30 78 30 20 30 30 78 30 20 30 30  0x0 00x0 00x0 00
2c10: 78 30 22 29 2c 0a 5d 0a 0a 70 61 74 74 65 72 6e  x0"),.]..pattern
2c20: 73 20 3d 20 73 63 65 6e 65 31 0a 0a 61 6c 77 61  s = scene1..alwa
2c30: 79 73 28 29 3b 0a 0a 66 75 6e 63 74 69 6f 6e 20  ys();..function 
2c40: 53 61 6d 70 6c 65 28 6e 61 6d 65 2c 20 6e 6f 2c  Sample(name, no,
2c50: 20 66 69 6c 74 65 72 2c 20 76 6f 6c 75 6d 65 29   filter, volume)
2c60: 20 7b 0a 20 20 20 20 6e 61 6d 65 20 3d 20 6e 61   {.    name = na
2c70: 6d 65 0a 20 20 20 20 66 69 6c 74 65 72 20 3d 20  me.    filter = 
2c80: 66 69 6c 74 65 72 20 7c 7c 20 31 30 30 30 30 0a  filter || 10000.
2c90: 20 20 20 20 76 6f 6c 75 6d 65 20 3d 20 76 6f 6c      volume = vol
2ca0: 75 6d 65 20 7c 7c 20 30 0a 20 20 20 20 6d 65 6d  ume || 0.    mem
2cb0: 5b 6e 61 6d 65 20 2b 20 22 5f 66 69 6c 74 65 72  [name + "_filter
2cc0: 22 5d 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 46 69  "] = new Tone.Fi
2cd0: 6c 74 65 72 28 66 69 6c 74 65 72 2c 20 27 6c 6f  lter(filter, 'lo
2ce0: 77 70 61 73 73 27 2c 20 2d 39 36 29 3b 0a 20 20  wpass', -96);.  
2cf0: 20 20 6d 65 6d 5b 6e 61 6d 65 20 2b 20 22 5f 63    mem[name + "_c
2d00: 68 61 6e 6e 65 6c 22 5d 20 3d 20 6e 65 77 20 54  hannel"] = new T
2d10: 6f 6e 65 2e 43 68 61 6e 6e 65 6c 28 7b 63 68 61  one.Channel({cha
2d20: 6e 6e 65 6c 43 6f 75 6e 74 3a 20 32 2c 20 76 6f  nnelCount: 2, vo
2d30: 6c 75 6d 65 3a 20 76 6f 6c 75 6d 65 7d 29 2e 63  lume: volume}).c
2d40: 68 61 69 6e 28 6d 65 6d 5b 6e 61 6d 65 20 2b 20  hain(mem[name + 
2d50: 22 5f 66 69 6c 74 65 72 22 5d 2c 20 6d 65 6d 2e  "_filter"], mem.
2d60: 6d 61 73 74 65 72 29 0a 20 20 20 20 73 61 6d 70  master).    samp
2d70: 6c 65 73 5b 6e 6f 5d 2e 63 6f 6e 6e 65 63 74 28  les[no].connect(
2d80: 6d 65 6d 5b 6e 61 6d 65 20 2b 20 22 5f 63 68 61  mem[name + "_cha
2d90: 6e 6e 65 6c 22 5d 29 3b 0a 7d 0a 0a 66 75 6e 63  nnel"]);.}..func
2da0: 74 69 6f 6e 20 70 28 73 2c 20 6e 6f 74 65 2c 20  tion p(s, note, 
2db0: 6c 65 6e 29 20 7b 0a 20 20 20 20 6e 6f 74 65 20  len) {.    note 
2dc0: 3d 20 6e 6f 74 65 20 7c 7c 20 22 43 33 22 0a 20  = note || "C3". 
2dd0: 20 20 20 6c 65 6e 20 3d 20 6c 65 6e 20 7c 7c 20     len = len || 
2de0: 22 31 36 6e 22 0a 20 20 20 20 73 61 6d 70 6c 65  "16n".    sample
2df0: 73 5b 73 5d 2e 74 72 69 67 67 65 72 41 74 74 61  s[s].triggerAtta
2e00: 63 6b 52 65 6c 65 61 73 65 28 6e 6f 74 65 2c 20  ckRelease(note, 
2e10: 6c 65 6e 2c 20 75 6e 64 65 66 69 6e 65 64 29 3b  len, undefined);
2e20: 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20 6f 6e 63  .}..function onc
2e30: 65 20 28 29 20 7b 0a 20 20 20 20 0a 09 76 61 72  e () {.    ..var
2e40: 20 76 69 73 20 3d 20 69 6e 69 74 57 69 6e 61 6d   vis = initWinam
2e50: 70 28 22 43 6f 70 65 20 2d 20 54 68 65 20 4e 65  p("Cope - The Ne
2e60: 76 65 72 65 6e 64 69 6e 67 20 45 78 70 6c 6f 73  verending Explos
2e70: 69 6f 6e 20 6f 66 20 52 65 64 20 4c 69 71 75 69  ion of Red Liqui
2e80: 64 20 46 69 72 65 22 29 3b 0a 20 20 20 20 72 65  d Fire");.    re
2e90: 6e 64 65 72 5f 6c 6f 6f 70 20 3d 20 66 75 6e 63  nder_loop = func
2ea0: 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20 20  tion () {.      
2eb0: 20 76 69 73 2e 72 65 6e 64 65 72 28 29 3b 0a 20   vis.render();. 
2ec0: 20 20 20 7d 0a 0a 20 20 20 20 54 6f 6e 65 2e 4d     }..    Tone.M
2ed0: 61 73 74 65 72 2e 76 6f 6c 75 6d 65 2e 76 61 6c  aster.volume.val
2ee0: 75 65 20 3d 20 2d 33 30 0a 20 20 20 20 6d 65 6d  ue = -30.    mem
2ef0: 2e 6d 61 73 74 65 72 20 3d 20 6e 65 77 20 54 6f  .master = new To
2f00: 6e 65 2e 43 68 61 6e 6e 65 6c 28 7b 63 68 61 6e  ne.Channel({chan
2f10: 6e 65 6c 43 6f 75 6e 74 3a 20 32 2c 20 76 6f 6c  nelCount: 2, vol
2f20: 75 6d 65 3a 20 2d 31 30 7d 29 2e 63 68 61 69 6e  ume: -10}).chain
2f30: 28 54 6f 6e 65 2e 44 65 73 74 69 6e 61 74 69 6f  (Tone.Destinatio
2f40: 6e 29 3b 0a 0a 20 20 20 20 53 61 6d 70 6c 65 28  n);..    Sample(
2f50: 22 6b 22 2c 20 30 2c 20 32 30 30 30 30 2c 20 35  "k", 0, 20000, 5
2f60: 29 3b 0a 20 20 20 20 53 61 6d 70 6c 65 28 22 68  );.    Sample("h
2f70: 22 2c 20 31 2c 20 32 30 30 30 30 2c 20 2d 35 29  ", 1, 20000, -5)
2f80: 3b 0a 20 20 20 20 53 61 6d 70 6c 65 28 22 73 6e  ;.    Sample("sn
2f90: 22 2c 32 2c 20 36 30 30 30 2c 20 2d 33 29 3b 0a  ",2, 6000, -3);.
2fa0: 20 20 20 20 53 61 6d 70 6c 65 28 22 63 22 2c 20      Sample("c", 
2fb0: 33 2c 20 31 32 30 30 2c 20 2d 31 30 29 3b 0a 20  3, 1200, -10);. 
2fc0: 20 20 20 53 61 6d 70 6c 65 28 22 73 74 61 62 22     Sample("stab"
2fd0: 2c 20 34 2c 20 34 32 30 2c 20 31 30 29 3b 0a 20  , 4, 420, 10);. 
2fe0: 20 20 20 53 61 6d 70 6c 65 28 22 6c 22 2c 20 35     Sample("l", 5
2ff0: 2c 20 32 30 30 30 30 2c 20 38 29 3b 0a 20 20 20  , 20000, 8);.   
3000: 20 53 61 6d 70 6c 65 28 22 6f 22 2c 20 36 2c 20   Sample("o", 6, 
3010: 32 30 30 30 30 2c 20 2d 38 29 3b 0a 0a 0a 20 20  20000, -8);...  
3020: 20 20 68 61 6e 64 6c 65 72 73 5b 22 31 22 5d 20    handlers["1"] 
3030: 3d 20 66 75 6e 63 74 69 6f 6e 20 28 76 61 6c 29  = function (val)
3040: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 76   {.        if (v
3050: 61 6c 20 3e 20 30 2e 35 29 20 7b 0a 20 20 20 20  al > 0.5) {.    
3060: 20 20 20 20 20 20 20 20 6d 65 6d 5b 22 73 74 61          mem["sta
3070: 72 74 5f 73 6e 61 72 65 22 5d 20 3d 20 74 72 75  rt_snare"] = tru
3080: 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  e;.        }.   
3090: 20 7d 0a 0a 20 20 20 20 64 69 61 6c 73 5b 31 5d   }..    dials[1]
30a0: 5b 22 63 65 6c 6c 22 5d 2e 6f 6e 43 68 61 6e 67  ["cell"].onChang
30b0: 65 28 66 75 6e 63 74 69 6f 6e 20 28 65 29 20 7b  e(function (e) {
30c0: 0a 20 20 20 20 20 20 20 20 76 61 72 20 76 61 6c  .        var val
30d0: 20 3d 20 70 61 72 73 65 46 6c 6f 61 74 28 65 5b   = parseFloat(e[
30e0: 22 64 61 74 61 22 5d 2e 76 61 6c 75 65 29 3b 0a  "data"].value);.
30f0: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 72 73          handlers
3100: 5b 22 31 22 5d 28 76 61 6c 29 3b 0a 20 20 20 20  ["1"](val);.    
3110: 7d 29 0a 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20  })..}..function 
3120: 74 77 65 61 6b 20 28 29 20 7b 0a 09 6d 65 6d 2e  tweak () {..mem.
3130: 6b 31 20 3d 20 6b 6e 6f 62 28 7b 69 6e 69 74 69  k1 = knob({initi
3140: 61 6c 20 3a 20 30 2e 34 32 2c 20 72 61 6d 70 20  al : 0.42, ramp 
3150: 3a 20 5b 30 2e 34 32 2c 20 30 2e 35 32 35 2c 20  : [0.42, 0.525, 
3160: 30 2e 38 2c 20 30 2e 34 2c 20 31 2c 20 30 2e 36  0.8, 0.4, 1, 0.6
3170: 35 2c 20 30 2e 37 35 2c 20 31 2c 20 30 2e 38 5d  5, 0.75, 1, 0.8]
3180: 2c 20 22 6e 75 6d 62 65 72 22 3a 20 64 69 61 6c  , "number": dial
3190: 73 5b 32 5d 5b 22 63 65 6c 6c 22 5d 20 7d 29 3b  s[2]["cell"] });
31a0: 0a 20 20 20 20 61 6c 77 61 79 73 20 3d 20 66 75  .    always = fu
31b0: 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20  nction () {.    
31c0: 20 20 20 20 6d 65 6d 5b 22 73 74 61 62 5f 66 69      mem["stab_fi
31d0: 6c 74 65 72 22 5d 2e 66 72 65 71 75 65 6e 63 79  lter"].frequency
31e0: 2e 76 61 6c 75 65 20 3d 20 6d 65 6d 2e 6b 31 2e  .value = mem.k1.
31f0: 6d 6f 76 65 28 29 20 2a 20 31 30 30 30 3b 0a 20  move() * 1000;. 
3200: 20 20 20 7d 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e     }.}..function
3210: 20 73 61 6d 70 6c 65 54 65 73 74 20 28 29 20 7b   sampleTest () {
3220: 0a 20 20 20 20 53 61 6d 70 6c 65 28 22 6c 22 2c  .    Sample("l",
3230: 20 34 2c 20 31 30 30 30 30 2c 20 2d 35 29 3b 0a   4, 10000, -5);.
3240: 0a 7d 0a 0a 69 66 20 28 62 61 72 73 20 3c 3d 20  .}..if (bars <= 
3250: 33 20 29 20 7b 0a 09 74 72 61 6e 73 69 74 69 6f  3 ) {..transitio
3260: 6e 20 3d 20 6f 6e 63 65 3b 0a 7d 20 65 6c 73 65  n = once;.} else
3270: 20 7b 0a 09 74 72 61 6e 73 69 74 69 6f 6e 20 3d   {..transition =
3280: 20 74 77 65 61 6b 3b 0a 7d 0a 0a 69 66 20 28 69   tweak;.}..if (i
3290: 73 48 69 74 29 20 7b 0a 20 20 20 20 69 66 20 28  sHit) {.    if (
32a0: 74 72 61 63 6b 5f 6e 6f 20 3d 3d 20 31 29 20 7b  track_no == 1) {
32b0: 0a 20 20 20 09 09 20 69 66 20 28 62 61 72 73 20  .   .. if (bars 
32c0: 3e 20 34 20 29 20 7b 0a 20 20 20 20 20 20 20 09  > 4 ) {.       .
32d0: 09 20 70 28 30 29 3b 0a 20 20 20 20 20 20 20 20  . p(0);.        
32e0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20 28  }.    }.    if (
32f0: 74 72 61 63 6b 5f 6e 6f 20 3d 3d 20 32 29 20 7b  track_no == 2) {
3300: 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61 72  .        if (bar
3310: 73 20 3e 20 38 20 29 20 7b 0a 20 20 20 20 20 20  s > 8 ) {.      
3320: 20 09 20 09 70 28 31 2c 20 20 22 43 33 22 2c 20   . .p(1,  "C3", 
3330: 22 31 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 7d  "1n");.        }
3340: 09 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20 28  ..    }.    if (
3350: 74 72 61 63 6b 5f 6e 6f 20 3d 3d 20 33 29 20 7b  track_no == 3) {
3360: 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 61 72  .        if (bar
3370: 73 20 3e 20 30 20 29 20 7b 0a 20 20 20 20 09 09  s > 0 ) {.    ..
3380: 70 28 34 2c 20 22 43 33 22 2c 20 22 31 6e 22 29  p(4, "C3", "1n")
3390: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
33a0: 20 20 20 20 69 66 20 28 62 61 72 73 20 3d 3d 20      if (bars == 
33b0: 31 35 29 20 7b 0a 20 20 20 20 20 20 20 20 09 74  15) {.        .t
33c0: 72 61 6e 73 69 74 69 6f 6e 28 29 3b 0a 20 20 20  ransition();.   
33d0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
33e0: 20 69 66 20 28 74 72 61 63 6b 5f 6e 6f 20 3d 3d   if (track_no ==
33f0: 20 34 29 20 7b 0a 09 09 20 20 69 66 28 20 6d 65   4) {...  if( me
3400: 6d 5b 22 73 74 61 72 74 5f 73 6e 61 72 65 22 5d  m["start_snare"]
3410: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 70  ) {.           p
3420: 28 32 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  (2);.        }. 
3430: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20 28 74  .    }.    if (t
3440: 72 61 63 6b 5f 6e 6f 20 3d 3d 20 35 29 20 7b 0a  rack_no == 5) {.
3450: 20 20 20 20 7d 0a 20 20 20 20 69 66 20 28 74 72      }.    if (tr
3460: 61 63 6b 5f 6e 6f 20 3d 3d 20 36 29 20 7b 0a 20  ack_no == 6) {. 
3470: 20 20 20 20 20 20 69 66 20 28 62 61 72 73 20 3e        if (bars >
3480: 20 31 32 29 20 7b 0a 09 20 20 20 20 20 20 20 70   12) {..       p
3490: 28 35 2c 20 22 46 32 22 2c 20 22 31 36 6e 22 29  (5, "F2", "16n")
34a0: 0a 20 20 20 20 20 20 20 7d 20 0a 20 20 20 20 7d  .       } .    }
34b0: 0a 09 69 66 20 28 74 72 61 63 6b 5f 6e 6f 20 3d  ..if (track_no =
34c0: 3d 20 37 29 20 7b 0a 20 20 20 20 20 20 20 69 66  = 7) {.       if
34d0: 20 28 62 61 72 73 20 3e 20 34 38 29 20 7b 0a 0a   (bars > 48) {..
34e0: 20 20 20 20 20 09 09 70 28 36 2c 20 22 43 33 22       ..p(6, "C3"
34f0: 2c 20 22 34 38 6e 22 29 0a 20 20 20 20 20 20 20  , "48n").       
3500: 7d 0a 20 20 20 20 7d 0a 0a 7d 0a 60 60 60 0a 0a  }.    }..}.```..
3510: 23 23 20 44 65 6d 6f 20 53 6f 6e 67 20 32 20 2f  ## Demo Song 2 /
3520: 2f 20 55 4b 20 48 69 70 20 48 6f 70 0a 0a 3c 69  / UK Hip Hop..<i
3530: 66 72 61 6d 65 20 77 69 64 74 68 3d 22 35 36 30  frame width="560
3540: 22 20 68 65 69 67 68 74 3d 22 33 31 35 22 20 73  " height="315" s
3550: 72 63 3d 22 68 74 74 70 73 3a 2f 2f 77 77 77 2e  rc="https://www.
3560: 79 6f 75 74 75 62 65 2e 63 6f 6d 2f 65 6d 62 65  youtube.com/embe
3570: 64 2f 39 65 61 41 42 67 4a 4a 6c 55 6f 22 20 74  d/9eaABgJJlUo" t
3580: 69 74 6c 65 3d 22 59 6f 75 54 75 62 65 20 76 69  itle="YouTube vi
3590: 64 65 6f 20 70 6c 61 79 65 72 22 20 66 72 61 6d  deo player" fram
35a0: 65 62 6f 72 64 65 72 3d 22 30 22 20 61 6c 6c 6f  eborder="0" allo
35b0: 77 3d 22 61 63 63 65 6c 65 72 6f 6d 65 74 65 72  w="accelerometer
35c0: 3b 20 61 75 74 6f 70 6c 61 79 3b 20 63 6c 69 70  ; autoplay; clip
35d0: 62 6f 61 72 64 2d 77 72 69 74 65 3b 20 65 6e 63  board-write; enc
35e0: 72 79 70 74 65 64 2d 6d 65 64 69 61 3b 20 67 79  rypted-media; gy
35f0: 72 6f 73 63 6f 70 65 3b 20 70 69 63 74 75 72 65  roscope; picture
3600: 2d 69 6e 2d 70 69 63 74 75 72 65 22 20 61 6c 6c  -in-picture" all
3610: 6f 77 66 75 6c 6c 73 63 72 65 65 6e 3e 3c 2f 69  owfullscreen></i
3620: 66 72 61 6d 65 3e 0a 0a 60 60 60 6a 73 0a 76 6f  frame>..```js.vo
3630: 6c 75 6d 65 5f 67 75 61 72 64 31 20 3d 20 67 75  lume_guard1 = gu
3640: 61 72 64 28 5b 2d 32 30 2c 31 35 5d 29 0a 54 6f  ard([-20,15]).To
3650: 6e 65 2e 4d 61 73 74 65 72 2e 76 6f 6c 75 6d 65  ne.Master.volume
3660: 2e 76 61 6c 75 65 20 3d 20 76 6f 6c 75 6d 65 5f  .value = volume_
3670: 67 75 61 72 64 31 28 4d 61 74 68 2e 72 6f 75 6e  guard1(Math.roun
3680: 64 28 64 69 61 6c 73 5b 30 5d 5b 22 63 65 6c 6c  d(dials[0]["cell
3690: 22 5d 28 29 20 2a 20 33 30 29 20 2d 32 30 29 3b  "]() * 30) -20);
36a0: 0a 0a 69 6e 74 72 6f 20 3d 20 5b 0a 20 20 20 63  ..intro = [.   c
36b0: 65 6c 6c 78 28 22 70 20 78 30 30 30 20 30 30 30  ellx("p x000 000
36c0: 30 20 30 30 30 30 20 30 30 30 30 20 22 29 2c 0a  0 0000 0000 "),.
36d0: 5d 0a 0a 6d 61 69 6e 20 3d 20 5b 0a 20 20 20 20  ]..main = [.    
36e0: 63 65 6c 6c 78 28 22 70 20 78 5b 32 3b 5e 43 32  cellx("p x[2;^C2
36f0: 3b 2b 30 2e 30 31 5d 30 30 30 20 30 30 30 30 20  ;+0.01]000 0000 
3700: 78 5b 30 2e 31 5d 30 78 5b 31 5d 30 20 30 30 78  x[0.1]0x[1]0 00x
3710: 5b 31 5d 30 20 22 29 2c 0a 20 20 20 20 63 65 6c  [1]0 "),.    cel
3720: 6c 78 28 22 70 20 30 30 30 30 20 78 30 30 30 20  lx("p 0000 x000 
3730: 30 30 30 30 20 78 30 30 30 20 22 29 2c 0a 20 20  0000 x000 "),.  
3740: 20 20 63 65 6c 6c 78 28 22 70 20 78 30 78 30 20    cellx("p x0x0 
3750: 78 30 78 30 20 78 30 78 30 20 78 30 78 30 20 22  x0x0 x0x0 x0x0 "
3760: 29 2c 0a 20 20 20 20 63 65 6c 6c 78 28 22 70 20  ),.    cellx("p 
3770: 78 30 30 30 20 30 30 30 30 20 30 30 30 30 20 30  x000 0000 0000 0
3780: 30 30 30 20 22 29 2c 0a 20 20 20 20 63 65 6c 6c  000 "),.    cell
3790: 78 28 22 70 20 30 30 30 30 20 30 30 30 30 20 30  x("p 0000 0000 0
37a0: 30 30 30 20 30 30 30 30 22 29 2c 0a 20 20 20 20  000 0000"),.    
37b0: 63 65 6c 6c 78 28 22 70 20 30 30 30 30 20 30 30  cellx("p 0000 00
37c0: 30 30 20 30 30 30 30 20 30 30 30 30 22 29 2c 0a  00 0000 0000"),.
37d0: 5d 0a 0a 62 61 73 73 20 3d 20 5b 0a 20 20 20 20  ]..bass = [.    
37e0: 63 65 6c 6c 78 28 22 70 20 78 5b 32 3b 5e 43 32  cellx("p x[2;^C2
37f0: 3b 2b 30 2e 30 31 5d 30 30 30 20 30 30 30 30 20  ;+0.01]000 0000 
3800: 78 5b 30 2e 31 5d 30 78 5b 31 5d 30 20 30 30 78  x[0.1]0x[1]0 00x
3810: 5b 31 5d 30 20 22 29 2c 0a 20 20 20 20 63 65 6c  [1]0 "),.    cel
3820: 6c 78 28 22 70 20 30 30 30 30 20 78 30 30 30 20  lx("p 0000 x000 
3830: 30 30 30 30 20 78 30 30 30 20 22 29 2c 0a 20 20  0000 x000 "),.  
3840: 20 20 63 65 6c 6c 78 28 22 70 20 78 30 78 30 20    cellx("p x0x0 
3850: 78 30 78 30 20 78 30 78 30 20 78 30 78 30 20 22  x0x0 x0x0 x0x0 "
3860: 29 2c 0a 20 20 20 20 63 65 6c 6c 78 28 22 70 20  ),.    cellx("p 
3870: 78 30 30 30 20 30 30 30 30 20 30 30 30 30 20 30  x000 0000 0000 0
3880: 30 30 30 20 22 29 2c 0a 20 20 20 20 63 65 6c 6c  000 "),.    cell
3890: 78 28 22 70 20 78 5b 5e 42 32 5d 78 2e 30 30 20  x("p x[^B2]x.00 
38a0: 78 5b 5e 42 32 5d 78 2e 78 5b 5e 42 32 5d 78 2e  x[^B2]x.x[^B2]x.
38b0: 20 78 5b 5e 42 32 5d 78 2e 78 5b 5e 42 32 5d 78   x[^B2]x.x[^B2]x
38c0: 2e 78 5b 5e 42 32 5d 78 2e 30 20 22 29 2c 0a 20  .x[^B2]x.0 "),. 
38d0: 20 20 20 63 65 6c 6c 78 28 22 70 20 30 30 78 5b     cellx("p 00x[
38e0: 5e 44 33 5d 30 20 30 30 30 78 5b 5e 41 32 5d 20  ^D3]0 000x[^A2] 
38f0: 30 30 78 5b 5e 41 32 5d 78 5b 5e 41 32 5d 20 30  00x[^A2]x[^A2] 0
3900: 78 5b 5e 41 32 5d 30 78 5b 5e 41 32 5d 20 22 29  x[^A2]0x[^A2] ")
3910: 2c 20 0a 5d 0a 0a 65 6e 64 20 3d 20 5b 0a 20 20  , .]..end = [.  
3920: 20 20 63 65 6c 6c 78 28 22 70 20 78 5b 32 3b 5e    cellx("p x[2;^
3930: 43 32 3b 2b 30 2e 30 31 5d 30 30 30 20 30 30 30  C2;+0.01]000 000
3940: 30 20 78 5b 30 2e 31 5d 30 78 5b 31 5d 30 20 30  0 x[0.1]0x[1]0 0
3950: 30 78 5b 31 5d 30 20 22 29 2c 0a 20 20 20 20 63  0x[1]0 "),.    c
3960: 65 6c 6c 78 28 22 70 20 30 30 30 30 20 78 30 30  ellx("p 0000 x00
3970: 30 20 30 30 30 30 20 78 30 30 30 20 22 29 2c 0a  0 0000 x000 "),.
3980: 20 20 20 20 63 65 6c 6c 78 28 22 70 20 78 31 30      cellx("p x10
3990: 78 30 20 78 30 78 30 20 78 30 78 30 20 78 30 78  x0 x0x0 x0x0 x0x
39a0: 30 20 22 29 2c 0a 5d 0a 0a 73 6f 6c 6f 20 3d 20  0 "),.]..solo = 
39b0: 5b 0a 20 20 20 20 63 65 6c 6c 78 28 22 70 20 30  [.    cellx("p 0
39c0: 30 30 30 20 30 30 30 30 20 30 30 30 30 20 30 30  000 0000 0000 00
39d0: 30 30 22 29 2c 0a 20 20 20 20 63 65 6c 6c 78 28  00"),.    cellx(
39e0: 22 70 20 30 30 30 30 20 30 30 30 30 20 30 30 30  "p 0000 0000 000
39f0: 30 20 30 30 30 30 22 29 2c 0a 20 20 20 20 63 65  0 0000"),.    ce
3a00: 6c 6c 78 28 22 70 20 30 30 30 30 20 30 30 30 30  llx("p 0000 0000
3a10: 20 30 30 30 30 20 30 30 30 30 22 29 2c 0a 5d 0a   0000 0000"),.].
3a20: 0a 66 69 6e 20 3d 20 73 6f 6c 6f 3b 0a 0a 65 6e  .fin = solo;..en
3a30: 64 67 61 6d 65 20 3d 20 5b 0a 20 20 20 20 63 65  dgame = [.    ce
3a40: 6c 6c 78 28 22 70 20 78 5b 32 3b 5e 43 32 3b 2b  llx("p x[2;^C2;+
3a50: 30 2e 30 31 5d 30 30 30 20 30 30 30 30 20 78 5b  0.01]000 0000 x[
3a60: 30 2e 31 5d 30 78 5b 31 5d 30 20 30 30 78 5b 31  0.1]0x[1]0 00x[1
3a70: 5d 30 20 22 29 2c 0a 20 20 20 20 63 65 6c 6c 78  ]0 "),.    cellx
3a80: 28 22 70 20 30 30 30 30 20 78 30 30 30 20 30 30  ("p 0000 x000 00
3a90: 30 30 20 78 30 30 30 20 22 29 2c 0a 20 20 20 20  00 x000 "),.    
3aa0: 63 65 6c 6c 78 28 22 70 20 78 30 78 30 20 78 30  cellx("p x0x0 x0
3ab0: 78 30 20 78 30 78 30 20 78 30 78 30 20 22 29 2c  x0 x0x0 x0x0 "),
3ac0: 0a 20 20 20 20 63 65 6c 6c 78 28 22 70 20 78 30  .    cellx("p x0
3ad0: 30 30 20 30 30 30 30 20 30 30 30 30 20 30 30 30  00 0000 0000 000
3ae0: 30 20 22 29 2c 0a 20 20 20 20 63 65 6c 6c 78 28  0 "),.    cellx(
3af0: 22 70 20 78 5b 5e 42 32 5d 78 2e 30 30 20 78 5b  "p x[^B2]x.00 x[
3b00: 5e 42 32 5d 78 2e 78 5b 5e 42 32 5d 78 2e 20 78  ^B2]x.x[^B2]x. x
3b10: 5b 5e 42 32 5d 78 2e 78 5b 5e 42 32 5d 78 2e 78  [^B2]x.x[^B2]x.x
3b20: 5b 5e 42 32 5d 78 2e 30 20 22 29 2c 0a 5d 0a 0a  [^B2]x.0 "),.]..
3b30: 0a 0a 0a 65 6d 70 74 79 20 3d 20 63 65 6c 6c 78  ...empty = cellx
3b40: 28 22 70 20 30 30 30 30 20 30 30 30 30 20 30 30  ("p 0000 0000 00
3b50: 30 30 20 30 30 30 30 22 29 0a 0a 0a 66 75 6e 63  00 0000")...func
3b60: 74 69 6f 6e 20 6f 6e 63 65 20 28 29 20 7b 0a 20  tion once () {. 
3b70: 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 63 6f  .    .        co
3b80: 6e 73 74 20 73 65 74 75 70 20 3d 20 28 20 69 6e  nst setup = ( in
3b90: 73 74 61 6e 63 65 20 29 20 3d 3e 20 7b 0a 20 20  stance ) => {.  
3ba0: 20 20 20 20 20 20 76 61 72 20 69 6e 74 72 6f 20        var intro 
3bb0: 3d 20 5b 5d 0a 20 20 20 20 20 20 20 20 76 61 72  = [].        var
3bc0: 20 6d 61 69 6e 20 3d 20 5b 5d 0a 20 20 20 20 20   main = [].     
3bd0: 20 20 20 76 61 72 20 62 61 73 73 20 3d 20 6d 61     var bass = ma
3be0: 69 6e 0a 20 20 20 20 20 20 20 20 76 61 72 20 65  in.        var e
3bf0: 6e 64 20 3d 20 5b 5d 20 0a 20 20 20 20 20 20 20  nd = [] .       
3c00: 20 76 61 72 20 73 6f 6c 6f 20 3d 20 65 6e 64 0a   var solo = end.
3c10: 20 20 20 20 20 20 20 20 76 61 72 20 66 69 6e 20          var fin 
3c20: 3d 20 65 6e 64 0a 20 20 20 20 20 20 20 0a 20 20  = end.       .  
3c30: 20 20 20 20 20 76 61 72 20 63 6f 75 6e 74 20 3d       var count =
3c40: 20 30 3b 0a 20 20 20 20 20 20 20 20 76 61 72 20   0;.        var 
3c50: 6f 6c 64 5f 73 63 65 6e 65 20 3d 20 22 22 3b 0a  old_scene = "";.
3c60: 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20          .       
3c70: 20 0a 0a 20 20 20 20 20 20 20 20 6c 65 74 20 78   ..        let x
3c80: 20 3d 20 31 30 30 3b 0a 20 20 20 20 20 20 20 20   = 100;.        
3c90: 6c 65 74 20 79 20 3d 20 31 30 30 3b 0a 0a 20 20  let y = 100;..  
3ca0: 20 20 20 20 20 20 69 6e 73 74 61 6e 63 65 2e 73        instance.s
3cb0: 65 74 75 70 20 3d 20 66 75 6e 63 74 69 6f 6e 28  etup = function(
3cc0: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
3cd0: 76 61 72 20 78 20 3d 20 69 6e 73 74 61 6e 63 65  var x = instance
3ce0: 2e 63 72 65 61 74 65 43 61 6e 76 61 73 28 31 32  .createCanvas(12
3cf0: 38 30 2c 20 34 31 30 29 3b 0a 20 20 20 20 20 20  80, 410);.      
3d00: 20 20 20 20 20 20 78 2e 63 61 6e 76 61 73 2e 73        x.canvas.s
3d10: 74 79 6c 65 2e 70 6f 73 69 74 69 6f 6e 20 3d 20  tyle.position = 
3d20: 22 61 62 73 6f 6c 75 74 65 22 3b 0a 20 20 20 20  "absolute";.    
3d30: 20 20 20 20 20 20 20 20 69 6e 73 74 61 6e 63 65          instance
3d40: 2e 66 72 61 6d 65 52 61 74 65 28 30 2e 32 35 29  .frameRate(0.25)
3d50: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ;.            in
3d60: 74 72 6f 2e 70 75 73 68 28 69 6e 73 74 61 6e 63  tro.push(instanc
3d70: 65 2e 6c 6f 61 64 49 6d 61 67 65 28 27 2f 63 6c  e.loadImage('/cl
3d80: 6f 73 65 64 2f 69 6e 74 72 6f 2f 31 2e 70 6e 67  osed/intro/1.png
3d90: 27 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  '));.           
3da0: 20 6d 61 69 6e 2e 70 75 73 68 28 69 6e 73 74 61   main.push(insta
3db0: 6e 63 65 2e 6c 6f 61 64 49 6d 61 67 65 28 27 2f  nce.loadImage('/
3dc0: 63 6c 6f 73 65 64 2f 6d 61 69 6e 2f 31 2e 70 6e  closed/main/1.pn
3dd0: 67 27 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20  g'));.          
3de0: 20 20 6d 61 69 6e 2e 70 75 73 68 28 69 6e 73 74    main.push(inst
3df0: 61 6e 63 65 2e 6c 6f 61 64 49 6d 61 67 65 28 27  ance.loadImage('
3e00: 2f 63 6c 6f 73 65 64 2f 6d 61 69 6e 2f 32 2e 70  /closed/main/2.p
3e10: 6e 67 27 29 29 3b 0a 20 20 20 20 20 20 20 20 20  ng'));.         
3e20: 20 20 20 6d 61 69 6e 2e 70 75 73 68 28 69 6e 73     main.push(ins
3e30: 74 61 6e 63 65 2e 6c 6f 61 64 49 6d 61 67 65 28  tance.loadImage(
3e40: 27 2f 63 6c 6f 73 65 64 2f 6d 61 69 6e 2f 33 2e  '/closed/main/3.
3e50: 70 6e 67 27 29 29 3b 0a 20 20 20 20 20 20 20 20  png'));.        
3e60: 20 20 20 20 20 6d 61 69 6e 2e 70 75 73 68 28 69       main.push(i
3e70: 6e 73 74 61 6e 63 65 2e 6c 6f 61 64 49 6d 61 67  nstance.loadImag
3e80: 65 28 27 2f 63 6c 6f 73 65 64 2f 6d 61 69 6e 2f  e('/closed/main/
3e90: 34 2e 70 6e 67 27 29 29 3b 0a 20 20 20 20 20 20  4.png'));.      
3ea0: 20 20 20 20 20 20 20 20 6d 61 69 6e 2e 70 75 73          main.pus
3eb0: 68 28 69 6e 73 74 61 6e 63 65 2e 6c 6f 61 64 49  h(instance.loadI
3ec0: 6d 61 67 65 28 27 2f 63 6c 6f 73 65 64 2f 6d 61  mage('/closed/ma
3ed0: 69 6e 2f 35 2e 70 6e 67 27 29 29 3b 0a 20 20 20  in/5.png'));.   
3ee0: 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 69 6e              main
3ef0: 2e 70 75 73 68 28 69 6e 73 74 61 6e 63 65 2e 6c  .push(instance.l
3f00: 6f 61 64 49 6d 61 67 65 28 27 2f 63 6c 6f 73 65  oadImage('/close
3f10: 64 2f 6d 61 69 6e 2f 36 2e 70 6e 67 27 29 29 3b  d/main/6.png'));
3f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3f30: 20 6d 61 69 6e 2e 70 75 73 68 28 69 6e 73 74 61   main.push(insta
3f40: 6e 63 65 2e 6c 6f 61 64 49 6d 61 67 65 28 27 2f  nce.loadImage('/
3f50: 63 6c 6f 73 65 64 2f 6d 61 69 6e 2f 37 2e 70 6e  closed/main/7.pn
3f60: 67 27 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20  g'));.          
3f70: 20 20 65 6e 64 2e 70 75 73 68 28 69 6e 73 74 61    end.push(insta
3f80: 6e 63 65 2e 6c 6f 61 64 49 6d 61 67 65 28 27 2f  nce.loadImage('/
3f90: 63 6c 6f 73 65 64 2f 65 6e 64 2f 31 2e 70 6e 67  closed/end/1.png
3fa0: 27 29 29 3b 0a 20 20 20 20 20 20 20 20 7d 3b 0a  '));.        };.
3fb0: 0a 20 20 20 20 20 20 20 20 69 6e 73 74 61 6e 63  .        instanc
3fc0: 65 2e 64 72 61 77 20 3d 20 66 75 6e 63 74 69 6f  e.draw = functio
3fd0: 6e 28 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20  n() {.          
3fe0: 20 20 69 66 20 28 6f 6c 64 5f 73 63 65 6e 65 20    if (old_scene 
3ff0: 21 3d 20 63 75 72 72 65 6e 74 5f 73 63 65 6e 65  != current_scene
4000: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
4010: 20 20 20 20 6f 6c 64 5f 73 63 65 6e 65 20 3d 20      old_scene = 
4020: 63 75 72 72 65 6e 74 5f 73 63 65 6e 65 3b 0a 20  current_scene;. 
4030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
4040: 6f 75 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  ount = 0;.      
4050: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
4060: 20 20 20 69 6e 73 74 61 6e 63 65 2e 63 6c 65 61     instance.clea
4070: 72 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  r();.           
4080: 20 76 61 72 20 63 20 3d 20 65 76 61 6c 28 60 24   var c = eval(`$
4090: 7b 63 75 72 72 65 6e 74 5f 73 63 65 6e 65 7d 60  {current_scene}`
40a0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ).            in
40b0: 73 74 61 6e 63 65 2e 69 6d 61 67 65 28 63 5b 63  stance.image(c[c
40c0: 6f 75 6e 74 5d 2c 20 30 2c 20 30 29 3b 0a 20 20  ount], 0, 0);.  
40d0: 20 20 20 20 20 20 20 20 20 20 63 6f 75 6e 74 20            count 
40e0: 2b 3d 20 31 0a 20 20 20 20 20 20 20 20 20 20 20  += 1.           
40f0: 20 63 6f 75 6e 74 20 3d 20 63 6f 75 6e 74 20 25   count = count %
4100: 20 63 2e 6c 65 6e 67 74 68 3b 0a 0a 20 20 20 20   c.length;..    
4110: 20 20 20 20 7d 3b 0a 20 20 20 20 7d 3b 0a 0a 20      };.    };.. 
4120: 20 20 20 6c 65 74 20 6d 79 70 35 20 3d 20 6e 65     let myp5 = ne
4130: 77 20 70 35 28 73 65 74 75 70 2c 20 20 64 6f 63  w p5(setup,  doc
4140: 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74  ument.getElement
4150: 42 79 49 64 28 27 63 61 6e 76 61 73 2d 63 6f 6e  ById('canvas-con
4160: 74 61 69 6e 65 72 27 29 29 3b 0a 0a 0a 20 20 20  tainer'));...   
4170: 20 54 6f 6e 65 2e 4d 61 73 74 65 72 2e 76 6f 6c   Tone.Master.vol
4180: 75 6d 65 2e 76 61 6c 75 65 20 3d 20 2d 33 30 0a  ume.value = -30.
4190: 0a 20 20 20 20 64 69 61 6c 73 5b 32 5d 5b 22 63  .    dials[2]["c
41a0: 65 6c 6c 22 5d 28 31 29 0a 20 20 20 20 6d 65 6d  ell"](1).    mem
41b0: 5b 22 6d 61 73 74 65 72 5f 66 69 6c 74 65 72 22  ["master_filter"
41c0: 5d 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 46 69 6c  ] = new Tone.Fil
41d0: 74 65 72 28 31 30 30 30 30 2c 20 27 6c 6f 77 70  ter(10000, 'lowp
41e0: 61 73 73 27 2c 20 2d 39 36 29 3b 0a 20 20 20 20  ass', -96);.    
41f0: 6d 65 6d 5b 22 6d 61 73 74 65 72 5f 73 74 65 72  mem["master_ster
4200: 65 6f 22 5d 20 3d 20 6e 65 77 20 54 6f 6e 65 2e  eo"] = new Tone.
4210: 53 74 65 72 65 6f 57 69 64 65 6e 65 72 28 7b 77  StereoWidener({w
4220: 69 64 74 68 3a 20 30 2e 35 30 7d 29 3b 0a 20 20  idth: 0.50});.  
4230: 20 20 0a 20 20 20 20 64 69 61 6c 73 5b 32 5d 5b    .    dials[2][
4240: 22 63 65 6c 6c 22 5d 2e 6f 6e 43 68 61 6e 67 65  "cell"].onChange
4250: 28 66 75 6e 63 74 69 6f 6e 20 28 65 29 20 7b 0a  (function (e) {.
4260: 20 20 20 20 20 20 20 20 76 61 72 20 76 61 6c 20          var val 
4270: 3d 20 70 61 72 73 65 46 6c 6f 61 74 28 65 5b 22  = parseFloat(e["
4280: 64 61 74 61 22 5d 2e 76 61 6c 75 65 29 3b 0a 20  data"].value);. 
4290: 20 20 20 20 20 20 20 76 61 72 20 63 75 74 6f 66         var cutof
42a0: 66 5f 67 75 61 72 64 20 3d 20 67 75 61 72 64 28  f_guard = guard(
42b0: 5b 31 30 2c 20 32 30 30 30 30 5d 29 3b 0a 20 20  [10, 20000]);.  
42c0: 20 20 20 20 20 20 6d 65 6d 5b 22 6d 61 73 74 65        mem["maste
42d0: 72 5f 66 69 6c 74 65 72 22 5d 2e 66 72 65 71 75  r_filter"].frequ
42e0: 65 6e 63 79 2e 76 61 6c 75 65 20 3d 20 63 75 74  ency.value = cut
42f0: 6f 66 66 5f 67 75 61 72 64 28 76 61 6c 20 2a 20  off_guard(val * 
4300: 31 30 30 30 30 29 3b 0a 20 20 20 20 7d 29 0a 20  10000);.    }). 
4310: 20 20 20 0a 20 20 20 20 64 69 61 6c 73 5b 33 5d     .    dials[3]
4320: 5b 22 63 65 6c 6c 22 5d 28 30 29 0a 20 20 20 20  ["cell"](0).    
4330: 0a 20 20 20 20 64 69 61 6c 73 5b 33 5d 5b 22 63  .    dials[3]["c
4340: 65 6c 6c 22 5d 2e 6f 6e 43 68 61 6e 67 65 28 66  ell"].onChange(f
4350: 75 6e 63 74 69 6f 6e 20 28 65 29 20 7b 0a 20 20  unction (e) {.  
4360: 20 20 20 20 20 20 76 61 72 20 76 61 6c 20 3d 20        var val = 
4370: 70 61 72 73 65 46 6c 6f 61 74 28 65 5b 22 64 61  parseFloat(e["da
4380: 74 61 22 5d 2e 76 61 6c 75 65 29 3b 0a 20 20 20  ta"].value);.   
4390: 20 20 20 20 20 76 61 72 20 76 6f 6c 75 6d 65 5f       var volume_
43a0: 67 75 61 72 64 31 20 3d 20 67 75 61 72 64 28 5b  guard1 = guard([
43b0: 30 2c 31 5d 29 0a 20 20 20 20 20 20 20 20 61 75  0,1]).        au
43c0: 64 69 6f 2e 6d 61 73 74 65 72 2e 69 6e 2e 67 61  dio.master.in.ga
43d0: 69 6e 2e 76 61 6c 75 65 20 3d 20 76 6f 6c 75 6d  in.value = volum
43e0: 65 5f 67 75 61 72 64 31 28 76 61 6c 20 2f 20 31  e_guard1(val / 1
43f0: 30 29 3b 0a 20 20 20 20 7d 29 0a 20 20 20 20 0a  0);.    }).    .
4400: 20 20 20 20 6d 65 6d 2e 6d 61 73 74 65 72 20 3d      mem.master =
4410: 20 6e 65 77 20 54 6f 6e 65 2e 43 68 61 6e 6e 65   new Tone.Channe
4420: 6c 28 7b 63 68 61 6e 6e 65 6c 43 6f 75 6e 74 3a  l({channelCount:
4430: 20 32 2c 20 76 6f 6c 75 6d 65 3a 20 2d 31 30 7d   2, volume: -10}
4440: 29 2e 63 68 61 69 6e 28 20 20 6d 65 6d 5b 22 6d  ).chain(  mem["m
4450: 61 73 74 65 72 5f 66 69 6c 74 65 72 22 5d 2c 20  aster_filter"], 
4460: 20 6d 65 6d 5b 22 6d 61 73 74 65 72 5f 73 74 65   mem["master_ste
4470: 72 65 6f 22 5d 2c 20 54 6f 6e 65 2e 44 65 73 74  reo"], Tone.Dest
4480: 69 6e 61 74 69 6f 6e 29 3b 0a 20 20 20 20 53 61  ination);.    Sa
4490: 6d 70 6c 65 28 22 6b 22 2c 20 30 2c 20 6e 75 6c  mple("k", 0, nul
44a0: 6c 2c 20 2d 35 29 3b 0a 20 20 20 20 53 61 6d 70  l, -5);.    Samp
44b0: 6c 65 28 22 73 6e 31 22 2c 31 2c 20 6e 75 6c 6c  le("sn1",1, null
44c0: 2c 20 30 29 3b 0a 20 20 20 20 53 61 6d 70 6c 65  , 0);.    Sample
44d0: 28 22 68 22 2c 32 2c 20 35 30 30 30 2c 20 2d 33  ("h",2, 5000, -3
44e0: 35 29 3b 0a 20 20 20 20 53 61 6d 70 6c 65 28 22  5);.    Sample("
44f0: 6d 22 2c 33 2c 20 6e 75 6c 6c 2c 20 2d 31 35 29  m",3, null, -15)
4500: 3b 0a 20 20 20 20 53 61 6d 70 6c 65 28 22 66 22  ;.    Sample("f"
4510: 2c 34 2c 20 6e 75 6c 6c 2c 20 2d 31 35 29 3b 0a  ,4, null, -15);.
4520: 20 20 20 20 0a 20 20 20 20 6e 61 6d 65 20 3d 20      .    name = 
4530: 22 73 22 0a 20 20 20 20 66 69 6c 74 65 72 20 3d  "s".    filter =
4540: 20 32 30 30 30 0a 20 20 20 20 76 6f 6c 75 6d 65   2000.    volume
4550: 20 3d 20 2d 31 35 20 0a 20 20 20 20 6d 65 6d 5b   = -15 .    mem[
4560: 6e 61 6d 65 20 2b 20 22 5f 66 69 6c 74 65 72 22  name + "_filter"
4570: 5d 20 3d 20 6e 65 77 20 54 6f 6e 65 2e 46 69 6c  ] = new Tone.Fil
4580: 74 65 72 28 66 69 6c 74 65 72 2c 20 27 6c 6f 77  ter(filter, 'low
4590: 70 61 73 73 27 2c 20 2d 39 36 29 3b 0a 20 20 20  pass', -96);.   
45a0: 20 6d 65 6d 5b 6e 61 6d 65 20 2b 20 22 5f 64 65   mem[name + "_de
45b0: 6c 61 79 22 5d 20 3d 20 6e 65 77 20 54 6f 6e 65  lay"] = new Tone
45c0: 2e 46 65 65 64 62 61 63 6b 44 65 6c 61 79 28 22  .FeedbackDelay("
45d0: 34 6e 22 2c 20 30 2e 34 29 3b 0a 20 20 20 20 6d  4n", 0.4);.    m
45e0: 65 6d 5b 6e 61 6d 65 20 2b 20 22 5f 63 68 61 6e  em[name + "_chan
45f0: 6e 65 6c 22 5d 20 3d 20 6e 65 77 20 54 6f 6e 65  nel"] = new Tone
4600: 2e 43 68 61 6e 6e 65 6c 28 7b 63 68 61 6e 6e 65  .Channel({channe
4610: 6c 43 6f 75 6e 74 3a 20 32 2c 20 76 6f 6c 75 6d  lCount: 2, volum
4620: 65 3a 20 76 6f 6c 75 6d 65 2c 20 70 61 6e 3a 20  e: volume, pan: 
4630: 2d 30 2e 32 35 7d 29 2e 63 68 61 69 6e 28 6d 65  -0.25}).chain(me
4640: 6d 5b 6e 61 6d 65 20 2b 20 22 5f 66 69 6c 74 65  m[name + "_filte
4650: 72 22 5d 2c 20 20 20 6d 65 6d 5b 6e 61 6d 65 20  r"],   mem[name 
4660: 2b 20 22 5f 64 65 6c 61 79 22 5d 2c 20 6d 65 6d  + "_delay"], mem
4670: 2e 6d 61 73 74 65 72 29 0a 20 20 20 20 73 61 6d  .master).    sam
4680: 70 6c 65 73 5b 35 5d 2e 63 6f 6e 6e 65 63 74 28  ples[5].connect(
4690: 6d 65 6d 5b 6e 61 6d 65 20 2b 20 22 5f 63 68 61  mem[name + "_cha
46a0: 6e 6e 65 6c 22 5d 29 3b 0a 20 20 20 20 68 69 74  nnel"]);.    hit
46b0: 5f 6d 61 70 5b 6e 61 6d 65 5d 20 3d 20 35 3b 0a  _map[name] = 5;.
46c0: 20 20 0a 20 20 0a 0a 20 20 20 20 0a 20 20 20 20    .  ..    .    
46d0: 0a 20 20 20 20 53 61 6d 70 6c 65 28 22 6d 61 6e  .    Sample("man
46e0: 61 67 65 72 22 2c 36 2c 20 6e 75 6c 6c 2c 20 2d  ager",6, null, -
46f0: 35 29 3b 0a 20 20 20 20 53 61 6d 70 6c 65 28 22  5);.    Sample("
4700: 6f 72 64 65 72 22 2c 37 2c 20 6e 75 6c 6c 2c 20  order",7, null, 
4710: 2d 31 35 29 3b 0a 20 20 20 20 53 61 6d 70 6c 65  -15);.    Sample
4720: 28 22 63 72 22 2c 38 2c 20 6e 75 6c 6c 2c 20 2d  ("cr",8, null, -
4730: 31 35 29 3b 0a 20 20 20 20 53 61 6d 70 6c 65 28  15);.    Sample(
4740: 22 70 69 61 6e 6f 22 2c 39 2c 20 34 30 30 2c 20  "piano",9, 400, 
4750: 2d 35 29 3b 0a 20 20 20 20 53 61 6d 70 6c 65 28  -5);.    Sample(
4760: 22 73 69 74 61 72 22 2c 31 30 2c 20 35 30 30 30  "sitar",10, 5000
4770: 2c 20 2d 31 35 29 3b 0a 20 20 20 20 0a 20 20 20  , -15);.    .   
4780: 20 63 6f 6e 73 74 20 61 75 64 69 6f 20 3d 20 41   const audio = A
4790: 75 64 69 6f 28 29 3b 0a 20 20 20 20 63 6f 6e 73  udio();.    cons
47a0: 74 20 74 68 72 65 65 20 3d 20 54 68 72 65 65 4f  t three = ThreeO
47b0: 68 55 6e 69 74 28 61 75 64 69 6f 2c 20 22 73 61  hUnit(audio, "sa
47c0: 77 74 6f 6f 74 68 22 2c 20 7b 0a 20 20 20 20 20  wtooth", {.     
47d0: 20 20 20 20 20 20 20 22 63 75 74 6f 66 66 22 3a         "cutoff":
47e0: 20 37 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20   78,.           
47f0: 20 22 72 65 73 6f 6e 61 6e 63 65 22 3a 20 31 35   "resonance": 15
4800: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 65  ,.            "e
4810: 6e 76 4d 6f 64 22 3a 20 34 30 30 30 2c 0a 20 20  nvMod": 4000,.  
4820: 20 20 20 20 20 20 20 20 20 20 22 64 65 63 61 79            "decay
4830: 22 3a 20 30 2e 35 0a 20 20 20 20 20 20 20 20 7d  ": 0.5.        }
4840: 0a 20 20 20 20 29 0a 20 20 20 20 61 75 64 69 6f  .    ).    audio
4850: 2e 6d 61 73 74 65 72 2e 69 6e 2e 67 61 69 6e 2e  .master.in.gain.
4860: 76 61 6c 75 65 20 3d 20 30 3b 0a 20 20 20 20 6d  value = 0;.    m
4870: 65 6d 5b 22 74 68 72 65 65 22 5d 20 3d 20 74 68  em["three"] = th
4880: 72 65 65 0a 20 20 20 20 0a 20 20 20 20 2f 2f 20  ree.    .    // 
4890: 63 75 74 6f 66 66 20 5b 33 30 2c 20 37 30 30 5d  cutoff [30, 700]
48a0: 2c 20 34 30 30 0a 20 20 20 20 2f 2f 20 72 65 73  , 400.    // res
48b0: 6f 6e 61 6e 63 65 3a 20 5b 31 2c 20 33 30 5d 2c  onance: [1, 30],
48c0: 20 31 35 0a 20 20 20 20 2f 2f 20 65 6e 76 4d 6f   15.    // envMo
48d0: 64 3a 20 5b 30 2c 20 38 30 30 30 5d 2c 20 34 30  d: [0, 8000], 40
48e0: 30 30 0a 20 20 20 20 2f 2f 20 64 65 63 61 79 3a  00.    // decay:
48f0: 20 5b 30 2e 31 2c 20 30 2e 39 5d 2c 20 30 2e 35   [0.1, 0.9], 0.5
4900: 0a 20 20 20 20 0a 20 20 20 20 64 69 61 6c 73 5b  .    .    dials[
4910: 31 5d 5b 22 63 65 6c 6c 22 5d 28 30 2e 30 37 38  1]["cell"](0.078
4920: 32 35 29 0a 0a 20 20 20 20 64 69 61 6c 73 5b 31  25)..    dials[1
4930: 5d 5b 22 63 65 6c 6c 22 5d 2e 6f 6e 43 68 61 6e  ]["cell"].onChan
4940: 67 65 28 66 75 6e 63 74 69 6f 6e 20 28 65 29 20  ge(function (e) 
4950: 7b 0a 20 20 20 20 20 20 20 20 76 61 72 20 76 61  {.        var va
4960: 6c 20 3d 20 70 61 72 73 65 46 6c 6f 61 74 28 65  l = parseFloat(e
4970: 5b 22 64 61 74 61 22 5d 2e 76 61 6c 75 65 29 3b  ["data"].value);
4980: 0a 20 20 20 20 20 20 20 20 63 75 74 6f 66 66 5f  .        cutoff_
4990: 67 75 61 72 64 20 3d 20 67 75 61 72 64 28 5b 33  guard = guard([3
49a0: 30 2c 20 37 30 30 5d 29 3b 0a 20 20 20 20 20 20  0, 700]);.      
49b0: 20 20 74 68 72 65 65 2e 70 61 72 61 6d 73 2e 63    three.params.c
49c0: 75 74 6f 66 66 2e 76 61 6c 75 65 20 3d 20 63 75  utoff.value = cu
49d0: 74 6f 66 66 5f 67 75 61 72 64 28 76 61 6c 20 2a  toff_guard(val *
49e0: 20 31 30 30 30 29 3b 0a 20 20 20 20 7d 29 0a 20   1000);.    }). 
49f0: 20 20 20 0a 20 20 20 20 0a 20 20 20 20 6d 65 6d     .    .    mem
4a00: 2e 6b 31 20 3d 20 6b 6e 6f 62 28 7b 72 61 6d 70  .k1 = knob({ramp
4a10: 20 3a 20 5b 30 2e 35 32 35 2c 20 30 2e 38 2c 20   : [0.525, 0.8, 
4a20: 30 2e 34 2c 20 30 2e 32 35 2c 20 30 2e 37 35 2c  0.4, 0.25, 0.75,
4a30: 20 30 2e 32 35 5d 2c 20 73 74 65 70 3a 20 30 2e   0.25], step: 0.
4a40: 30 30 35 2c 20 22 6e 75 6d 62 65 72 22 3a 20 64  005, "number": d
4a50: 69 61 6c 73 5b 31 5d 5b 22 63 65 6c 6c 22 5d 20  ials[1]["cell"] 
4a60: 7d 29 3b 0a 20 20 20 20 61 6c 77 61 79 73 20 3d  });.    always =
4a70: 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20   function () {. 
4a80: 20 20 20 20 20 20 20 6c 65 74 20 63 75 74 6f 66         let cutof
4a90: 66 5f 67 75 61 72 64 20 3d 20 67 75 61 72 64 28  f_guard = guard(
4aa0: 5b 33 30 2c 20 39 30 30 5d 29 3b 0a 20 20 20 20  [30, 900]);.    
4ab0: 20 20 20 20 74 68 72 65 65 2e 70 61 72 61 6d 73      three.params
4ac0: 2e 63 75 74 6f 66 66 2e 76 61 6c 75 65 20 3d 20  .cutoff.value = 
4ad0: 63 75 74 6f 66 66 5f 67 75 61 72 64 28 6d 65 6d  cutoff_guard(mem
4ae0: 2e 6b 31 2e 6d 6f 76 65 28 29 20 2a 20 31 30 30  .k1.move() * 100
4af0: 30 29 3b 0a 20 20 20 20 7d 0a 7d 0a 0a 66 75 6e  0);.    }.}..fun
4b00: 63 74 69 6f 6e 20 74 77 65 61 6b 28 29 20 7b 0a  ction tweak() {.
4b10: 20 0a 20 20 20 20 76 61 72 20 73 6e 61 72 65 5f   .    var snare_
4b20: 63 6f 75 6e 74 20 3d 20 63 65 6c 6c 78 28 30 29  count = cellx(0)
4b30: 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 0a  ;.    .        .
4b40: 20 20 20 20 73 6e 61 72 65 5f 63 6f 75 6e 74 2e      snare_count.
4b50: 6f 6e 43 68 61 6e 67 65 28 66 75 6e 63 74 69 6f  onChange(functio
4b60: 6e 20 28 65 29 20 7b 0a 20 20 20 20 20 20 20 20  n (e) {.        
4b70: 76 61 72 20 76 61 6c 20 3d 20 70 61 72 73 65 49  var val = parseI
4b80: 6e 74 28 65 5b 22 64 61 74 61 22 5d 2e 76 61 6c  nt(e["data"].val
4b90: 75 65 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20  ue);.        if 
4ba0: 28 76 61 6c 20 3d 3d 20 32 32 29 20 7b 0a 20 20  (val == 22) {.  
4bb0: 20 20 20 20 20 20 20 20 20 20 63 75 72 72 65 6e            curren
4bc0: 74 5f 73 63 65 6e 65 20 3d 20 22 66 69 6e 22 3b  t_scene = "fin";
4bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 70 31  .             p1
4be0: 28 38 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20  (8, null, null, 
4bf0: 31 32 2e 32 35 29 3b 0a 20 20 20 20 20 20 20 20  12.25);.        
4c00: 7d 20 0a 20 20 20 20 7d 29 0a 20 20 20 20 0a 20  } .    }).    . 
4c10: 20 20 20 0a 20 20 20 20 0a 20 20 20 20 4d 6f 75     .    .    Mou
4c20: 73 65 74 72 61 70 2e 62 69 6e 64 28 5b 27 66 32  setrap.bind(['f2
4c30: 27 5d 2c 20 66 75 6e 63 74 69 6f 6e 28 65 29 20  '], function(e) 
4c40: 7b 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 73  {.    .        s
4c50: 6e 61 72 65 5f 63 6f 75 6e 74 28 73 6e 61 72 65  nare_count(snare
4c60: 5f 63 6f 75 6e 74 28 29 20 2b 20 31 29 0a 20 20  _count() + 1).  
4c70: 20 20 20 20 20 20 69 66 20 28 73 6e 61 72 65 5f        if (snare_
4c80: 63 6f 75 6e 74 28 29 20 3c 3d 20 32 30 29 20 7b  count() <= 20) {
4c90: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 54 69  .          setTi
4ca0: 6d 65 6f 75 74 28 66 75 6e 63 74 69 6f 6e 20 28  meout(function (
4cb0: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
4cc0: 20 20 70 28 30 2c 20 6e 75 6c 6c 2c 20 6e 75 6c    p(0, null, nul
4cd0: 6c 2c 20 22 32 34 6e 22 2c 20 6e 75 6c 6c 20 29  l, "24n", null )
4ce0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
4cf0: 20 20 73 65 74 54 69 6d 65 6f 75 74 28 66 75 6e    setTimeout(fun
4d00: 63 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20  ction () {.     
4d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
4d20: 28 38 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20  (8, null, null, 
4d30: 22 32 6e 22 20 29 3b 0a 20 20 20 20 20 20 20 20  "2n" );.        
4d40: 20 20 20 20 20 20 20 20 20 20 20 20 70 28 31 30              p(10
4d50: 2c 20 30 2e 35 2c 20 22 41 32 22 2c 20 31 29 3b  , 0.5, "A2", 1);
4d60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4d70: 20 7d 2c 20 64 65 6c 74 61 20 2a 20 32 29 0a 20   }, delta * 2). 
4d80: 20 0a 20 20 20 20 20 20 20 20 20 20 7d 2c 20 64   .          }, d
4d90: 65 6c 74 61 20 2a 20 31 2e 35 29 0a 20 20 20 20  elta * 1.5).    
4da0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 0a 20      }.        . 
4db0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
4dc0: 6c 73 65 3b 0a 20 20 20 20 7d 29 0a 0a 0a 20 20  lse;.    })...  
4dd0: 20 20 0a 7d 0a 0a 0a 0a 74 72 61 6e 73 69 74 69    .}....transiti
4de0: 6f 6e 20 3d 20 6f 6e 63 65 3b 0a 0a 69 66 20 28  on = once;..if (
4df0: 62 61 72 73 20 3c 3d 20 32 29 20 7b 0a 20 20 20  bars <= 2) {.   
4e00: 20 63 75 72 72 65 6e 74 5f 73 63 65 6e 65 20 3d   current_scene =
4e10: 20 22 69 6e 74 72 6f 22 3b 0a 7d 20 65 6c 73 65   "intro";.} else
4e20: 20 7b 0a 2f 2f 20 20 20 20 20 20 20 6d 65 6d 5b   {.//       mem[
4e30: 22 74 68 72 65 65 22 5d 2e 73 74 65 70 28 22 6f  "three"].step("o
4e40: 66 66 22 29 3b 0a 69 66 20 28 62 61 72 73 20 3d  ff");.if (bars =
4e50: 3d 20 33 29 20 7b 0a 20 20 20 20 65 76 61 6c 5f  = 3) {.    eval_
4e60: 67 75 61 72 64 20 3f 20 63 75 65 28 22 53 74 61  guard ? cue("Sta
4e70: 72 74 20 69 6e 74 72 6f 22 29 20 3a 20 22 22 3b  rt intro") : "";
4e80: 0a 20 20 20 20 63 75 72 72 65 6e 74 5f 73 63 65  .    current_sce
4e90: 6e 65 20 3d 20 22 69 6e 74 72 6f 22 3b 0a 0a 7d  ne = "intro";..}
4ea0: 0a 0a 69 66 20 28 62 61 72 73 20 3d 3d 20 35 29  ..if (bars == 5)
4eb0: 20 7b 0a 20 20 20 20 65 76 61 6c 5f 67 75 61 72   {.    eval_guar
4ec0: 64 20 3f 20 63 75 65 28 22 53 74 61 72 74 20 64  d ? cue("Start d
4ed0: 72 75 6d 73 22 29 20 3a 20 22 22 3b 0a 20 20 20  rums") : "";.   
4ee0: 20 20 20 20 20 63 75 72 72 65 6e 74 5f 73 63 65       current_sce
4ef0: 6e 65 20 3d 20 22 6d 61 69 6e 22 3b 0a 7d 0a 0a  ne = "main";.}..
4f00: 0a 69 66 20 28 62 61 72 73 20 3d 3d 20 31 32 29  .if (bars == 12)
4f10: 20 7b 0a 20 20 20 20 65 76 61 6c 5f 67 75 61 72   {.    eval_guar
4f20: 64 20 3f 20 63 75 65 28 22 41 64 64 20 62 61 73  d ? cue("Add bas
4f30: 73 22 29 3a 20 22 22 3b 0a 20 20 20 20 63 75 72  s"): "";.    cur
4f40: 72 65 6e 74 5f 73 63 65 6e 65 20 3d 20 22 62 61  rent_scene = "ba
4f50: 73 73 22 3b 0a 0a 7d 0a 0a 69 66 20 28 62 61 72  ss";..}..if (bar
4f60: 73 20 3d 3d 20 33 32 29 20 7b 0a 20 20 20 20 65  s == 32) {.    e
4f70: 76 61 6c 5f 67 75 61 72 64 20 3f 63 75 65 28 22  val_guard ?cue("
4f80: 52 65 76 65 72 73 65 20 22 29 3a 20 22 22 3b 0a  Reverse "): "";.
4f90: 20 20 20 20 63 75 72 72 65 6e 74 5f 73 63 65 6e      current_scen
4fa0: 65 20 3d 20 22 62 61 73 73 22 3b 0a 0a 7d 0a 0a  e = "bass";..}..
4fb0: 69 66 20 28 62 61 72 73 20 3d 3d 20 34 32 29 20  if (bars == 42) 
4fc0: 7b 0a 20 20 20 20 65 76 61 6c 5f 67 75 61 72 64  {.    eval_guard
4fd0: 20 3f 20 63 75 65 28 22 45 6e 64 20 22 29 3a 20   ? cue("End "): 
4fe0: 22 22 0a 20 20 20 20 63 75 72 72 65 6e 74 5f 73  "".    current_s
4ff0: 63 65 6e 65 20 3d 20 22 65 6e 64 22 3b 0a 0a 7d  cene = "end";..}
5000: 0a 0a 69 66 20 28 62 61 72 73 20 3d 3d 20 34 38  ..if (bars == 48
5010: 29 20 7b 0a 20 20 20 20 65 76 61 6c 5f 67 75 61  ) {.    eval_gua
5020: 72 64 20 3f 20 63 75 65 28 22 53 6f 6c 6f 20 22  rd ? cue("Solo "
5030: 29 3a 20 22 22 0a 20 20 20 20 63 75 72 72 65 6e  ): "".    curren
5040: 74 5f 73 63 65 6e 65 20 3d 20 22 73 6f 6c 6f 22  t_scene = "solo"
5050: 3b 0a 7d 0a 0a 0a 20 20 20 20 74 72 61 6e 73 69  ;.}...    transi
5060: 74 69 6f 6e 20 3d 20 74 77 65 61 6b 3b 0a 7d 0a  tion = tweak;.}.
5070: 0a 0a 70 61 74 74 65 72 6e 73 20 3d 20 65 76 61  ..patterns = eva
5080: 6c 28 60 24 7b 63 75 72 72 65 6e 74 5f 73 63 65  l(`${current_sce
5090: 6e 65 7d 60 29 3b 0a 61 6c 77 61 79 73 28 29 3b  ne}`);.always();
50a0: 0a 0a 69 66 20 28 74 72 61 63 6b 5f 6e 6f 20 3d  ..if (track_no =
50b0: 3d 20 31 29 20 7b 0a 69 66 20 28 63 6f 75 6e 74  = 1) {.if (count
50c0: 20 3d 3d 20 30 29 20 7b 0a 20 20 20 20 63 75 65   == 0) {.    cue
50d0: 28 22 53 61 6d 70 6c 65 22 29 0a 20 20 20 20 70  ("Sample").    p
50e0: 31 28 37 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c  1(7, null, null,
50f0: 20 31 32 2e 32 35 29 3b 0a 7d 0a 7d 0a 0a 20 20   12.25);.}.}..  
5100: 20 20 20 0a 0a 69 66 20 28 69 73 48 69 74 29 20     ..if (isHit) 
5110: 7b 0a 20 20 20 20 69 66 20 28 63 75 72 72 65 6e  {.    if (curren
5120: 74 5f 73 63 65 6e 65 20 3d 3d 20 22 69 6e 74 72  t_scene == "intr
5130: 6f 22 29 20 7b 0a 20 20 20 20 20 20 20 20 69 66  o") {.        if
5140: 20 28 74 72 61 63 6b 5f 6e 6f 20 3d 3d 20 31 29   (track_no == 1)
5150: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 70 28 33   {.          p(3
5160: 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 22 31  , null, null, "1
5170: 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  n");.        }. 
5180: 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 63 75     } else if (cu
5190: 72 72 65 6e 74 5f 73 63 65 6e 65 20 3d 3d 20 22  rrent_scene == "
51a0: 66 69 6e 22 29 20 7b 0a 20 20 20 0a 20 20 20 20  fin") {.   .    
51b0: 7d 20 65 6c 73 65 20 69 66 20 28 63 75 72 72 65  } else if (curre
51c0: 6e 74 5f 73 63 65 6e 65 20 3d 3d 20 22 73 6f 6c  nt_scene == "sol
51d0: 6f 22 29 20 7b 0a 0a 20 0a 20 20 20 20 7d 20 65  o") {.. .    } e
51e0: 6c 73 65 20 69 66 20 28 63 75 72 72 65 6e 74 5f  lse if (current_
51f0: 73 63 65 6e 65 20 3d 3d 20 22 65 6e 64 22 29 20  scene == "end") 
5200: 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 74 72  {.        if (tr
5210: 61 63 6b 5f 6e 6f 20 3d 3d 20 31 29 20 7b 0a 20  ack_no == 1) {. 
5220: 20 20 20 20 20 20 20 20 20 20 20 70 28 30 2c 20             p(0, 
5230: 6d 65 74 61 5b 74 69 63 6b 5d 5b 22 76 6f 6c 75  meta[tick]["volu
5240: 6d 65 22 5d 2c 20 6d 65 74 61 5b 74 69 63 6b 5d  me"], meta[tick]
5250: 5b 22 70 69 74 63 68 22 5d 2c 20 22 32 34 6e 22  ["pitch"], "24n"
5260: 2c 20 6d 65 74 61 5b 74 69 63 6b 5d 5b 22 64 65  , meta[tick]["de
5270: 6c 61 79 22 5d 20 29 3b 0a 20 20 20 20 20 20 20  lay"] );.       
5280: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 28 74   }.        if (t
5290: 72 61 63 6b 5f 6e 6f 20 3d 3d 20 32 29 20 7b 0a  rack_no == 2) {.
52a0: 20 20 20 20 20 20 20 20 20 20 20 20 70 28 31 29              p(1)
52b0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
52c0: 20 20 20 20 69 66 20 28 74 72 61 63 6b 5f 6e 6f      if (track_no
52d0: 20 3d 3d 20 33 29 20 7b 0a 20 20 20 20 20 20 20   == 3) {.       
52e0: 20 20 20 20 20 70 28 32 29 0a 20 20 20 20 20 20       p(2).      
52f0: 20 20 7d 0a 20 20 20 20 20 20 20 20 0a 20 20 20    }.        .   
5300: 20 7d 20 65 6c 73 65 20 69 66 20 28 63 75 72 72   } else if (curr
5310: 65 6e 74 5f 73 63 65 6e 65 20 3d 3d 20 22 6d 61  ent_scene == "ma
5320: 69 6e 22 29 20 7b 0a 20 20 20 20 20 20 20 20 69  in") {.        i
5330: 66 20 28 74 72 61 63 6b 5f 6e 6f 20 3d 3d 20 31  f (track_no == 1
5340: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
5350: 70 28 30 2c 20 6d 65 74 61 5b 74 69 63 6b 5d 5b  p(0, meta[tick][
5360: 22 76 6f 6c 75 6d 65 22 5d 2c 20 6d 65 74 61 5b  "volume"], meta[
5370: 74 69 63 6b 5d 5b 22 70 69 74 63 68 22 5d 2c 20  tick]["pitch"], 
5380: 22 32 34 6e 22 2c 20 6d 65 74 61 5b 74 69 63 6b  "24n", meta[tick
5390: 5d 5b 22 64 65 6c 61 79 22 5d 20 29 3b 0a 20 20  ]["delay"] );.  
53a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
53b0: 69 66 20 28 74 72 61 63 6b 5f 6e 6f 20 3d 3d 20  if (track_no == 
53c0: 32 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  2) {.           
53d0: 20 70 28 31 29 3b 0a 20 20 20 20 20 20 20 20 7d   p(1);.        }
53e0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 74 72 61  .        if (tra
53f0: 63 6b 5f 6e 6f 20 3d 3d 20 33 29 20 7b 0a 20 20  ck_no == 3) {.  
5400: 20 20 20 20 20 20 20 20 20 20 70 28 32 29 0a 20            p(2). 
5410: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
5420: 20 69 66 20 28 74 72 61 63 6b 5f 6e 6f 20 3d 3d   if (track_no ==
5430: 20 34 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20   4) {.          
5440: 20 20 70 28 33 2c 20 6e 75 6c 6c 2c 20 6e 75 6c    p(3, null, nul
5450: 6c 2c 20 22 31 6e 22 29 3b 0a 20 20 20 20 20 20  l, "1n");.      
5460: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 28    }.        if (
5470: 74 72 61 63 6b 5f 6e 6f 20 3d 3d 20 35 29 20 7b  track_no == 5) {
5480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
5490: 28 6d 65 74 61 5b 74 69 63 6b 5d 5b 22 70 69 74  (meta[tick]["pit
54a0: 63 68 22 5d 29 20 7b 0a 20 20 20 20 20 20 20 20  ch"]) {.        
54b0: 20 20 20 20 20 20 2f 2f 20 20 6d 65 6d 5b 22 74        //  mem["t
54c0: 68 72 65 65 22 5d 2e 73 74 65 70 28 7b 22 67 6c  hree"].step({"gl
54d0: 69 64 65 22 3a 20 74 72 75 65 2c 20 22 61 63 63  ide": true, "acc
54e0: 65 6e 74 22 3a 20 66 61 6c 73 65 2c 20 22 6e 6f  ent": false, "no
54f0: 74 65 22 3a 20 6d 65 74 61 5b 74 69 63 6b 5d 5b  te": meta[tick][
5500: 22 70 69 74 63 68 22 5d 7d 29 3b 0a 20 20 20 20  "pitch"]});.    
5510: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
5520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  .              /
5530: 2f 20 20 6d 65 6d 5b 22 74 68 72 65 65 22 5d 2e  /  mem["three"].
5540: 73 74 65 70 28 22 6f 66 66 22 29 3b 0a 20 20 20  step("off");.   
5550: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
5560: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20     }.        if 
5570: 28 74 72 61 63 6b 5f 6e 6f 20 3d 3d 20 36 29 20  (track_no == 6) 
5580: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 70 28 35  {.           p(5
5590: 2c 20 6e 75 6c 6c 2c 20 6d 65 74 61 5b 74 69 63  , null, meta[tic
55a0: 6b 5d 5b 22 70 69 74 63 68 22 5d 2c 20 22 31 6e  k]["pitch"], "1n
55b0: 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ");.        }.  
55c0: 20 20 0a 20 20 20 20 20 7d 20 65 6c 73 65 20 69    .     } else i
55d0: 66 20 28 63 75 72 72 65 6e 74 5f 73 63 65 6e 65  f (current_scene
55e0: 20 3d 3d 20 22 62 61 73 73 22 29 20 7b 0a 20 20   == "bass") {.  
55f0: 20 20 20 20 20 20 69 66 20 28 74 72 61 63 6b 5f        if (track_
5600: 6e 6f 20 3d 3d 20 31 29 20 7b 0a 20 20 20 20 20  no == 1) {.     
5610: 20 20 20 20 20 70 28 30 2c 20 6d 65 74 61 5b 74       p(0, meta[t
5620: 69 63 6b 5d 5b 22 76 6f 6c 75 6d 65 22 5d 2c 20  ick]["volume"], 
5630: 6d 65 74 61 5b 74 69 63 6b 5d 5b 22 70 69 74 63  meta[tick]["pitc
5640: 68 22 5d 2c 20 22 32 34 6e 22 2c 20 6d 65 74 61  h"], "24n", meta
5650: 5b 74 69 63 6b 5d 5b 22 64 65 6c 61 79 22 5d 20  [tick]["delay"] 
5660: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
5670: 20 20 20 20 20 69 66 20 28 74 72 61 63 6b 5f 6e       if (track_n
5680: 6f 20 3d 3d 20 32 29 20 7b 0a 20 20 20 20 20 20  o == 2) {.      
5690: 20 20 20 20 20 20 70 28 31 29 3b 0a 20 20 20 20        p(1);.    
56a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
56b0: 20 28 74 72 61 63 6b 5f 6e 6f 20 3d 3d 20 33 29   (track_no == 3)
56c0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 70 28   {.           p(
56d0: 32 29 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  2).        }.   
56e0: 20 20 20 20 20 69 66 20 28 74 72 61 63 6b 5f 6e       if (track_n
56f0: 6f 20 3d 3d 20 34 29 20 7b 0a 20 20 20 20 20 20  o == 4) {.      
5700: 20 20 20 20 20 20 70 28 33 2c 20 6e 75 6c 6c 2c        p(3, null,
5710: 20 6e 75 6c 6c 2c 20 22 31 6e 22 29 3b 0a 20 20   null, "1n");.  
5720: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5730: 69 66 20 28 74 72 61 63 6b 5f 6e 6f 20 3d 3d 20  if (track_no == 
5740: 35 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  5) {.           
5750: 20 69 66 20 28 6d 65 74 61 5b 74 69 63 6b 5d 5b   if (meta[tick][
5760: 22 70 69 74 63 68 22 5d 29 20 7b 0a 20 20 20 20  "pitch"]) {.    
5770: 20 20 20 20 20 20 20 20 20 20 20 20 6d 65 6d 5b              mem[
5780: 22 74 68 72 65 65 22 5d 2e 73 74 65 70 28 7b 22  "three"].step({"
5790: 67 6c 69 64 65 22 3a 20 74 72 75 65 2c 20 22 61  glide": true, "a
57a0: 63 63 65 6e 74 22 3a 20 66 61 6c 73 65 2c 20 22  ccent": false, "
57b0: 6e 6f 74 65 22 3a 20 6d 65 74 61 5b 74 69 63 6b  note": meta[tick
57c0: 5d 5b 22 70 69 74 63 68 22 5d 7d 29 3b 0a 20 20  ]["pitch"]});.  
57d0: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
57e0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
57f0: 20 20 20 6d 65 6d 5b 22 74 68 72 65 65 22 5d 2e     mem["three"].
5800: 73 74 65 70 28 22 6f 66 66 22 29 3b 0a 20 20 20  step("off");.   
5810: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
5820: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20     }.        if 
5830: 28 74 72 61 63 6b 5f 6e 6f 20 3d 3d 20 36 29 20  (track_no == 6) 
5840: 7b 0a 20 2f 2f 20 20 20 20 20 20 20 20 20 20 70  {. //          p
5850: 28 35 2c 20 30 2e 31 35 2c 20 6d 65 74 61 5b 74  (5, 0.15, meta[t
5860: 69 63 6b 5d 5b 22 70 69 74 63 68 22 5d 2c 20 31  ick]["pitch"], 1
5870: 29 3b 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 70  );.        //  p
5880: 28 39 2c 20 31 2c 20 6d 65 74 61 5b 74 69 63 6b  (9, 1, meta[tick
5890: 5d 5b 22 70 69 74 63 68 22 5d 2c 20 31 29 3b 0a  ]["pitch"], 1);.
58a0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  .        }.    }
58b0: 20 0a 0a 0a 7d 0a 60 60 60 0a 0a                  ...}.```..