Artifact
78e19673af2563cc90b2e1528963a90e7c2847bc55e2f409a8f53fe60274da8c:
0000: 27 75 73 65 20 73 74 72 69 63 74 27 3b 0a 0a 6c 'use strict';..l
0010: 65 74 20 64 6f 6d 20 3d 20 72 65 71 75 69 72 65 et dom = require
0020: 28 27 2e 2e 2f 75 74 69 6c 2f 64 6f 6d 27 29 3b ('../util/dom');
0030: 0a 6c 65 74 20 6d 61 74 68 20 3d 20 72 65 71 75 .let math = requ
0040: 69 72 65 28 27 2e 2e 2f 75 74 69 6c 2f 6d 61 74 ire('../util/mat
0050: 68 27 29 3b 0a 6c 65 74 20 49 6e 74 65 72 66 61 h');.let Interfa
0060: 63 65 20 3d 20 72 65 71 75 69 72 65 28 27 2e 2e ce = require('..
0070: 2f 63 6f 72 65 2f 69 6e 74 65 72 66 61 63 65 27 /core/interface'
0080: 29 3b 0a 0a 2f 2a 2a 0a 20 2a 20 4d 65 74 65 72 );../**. * Meter
0090: 0a 20 2a 0a 20 2a 20 40 64 65 73 63 72 69 70 74 . *. * @descript
00a0: 69 6f 6e 20 53 74 65 72 65 6f 20 64 65 63 69 62 ion Stereo decib
00b0: 65 6c 20 6d 65 74 65 72 0a 20 2a 0a 20 2a 20 40 el meter. *. * @
00c0: 64 65 6d 6f 20 3c 73 70 61 6e 20 6e 65 78 75 73 demo <span nexus
00d0: 2d 75 69 3d 22 6d 65 74 65 72 22 3e 3c 2f 73 70 -ui="meter"></sp
00e0: 61 6e 3e 0a 20 2a 0a 20 2a 20 40 65 78 61 6d 70 an>. *. * @examp
00f0: 6c 65 0a 20 2a 20 76 61 72 20 6d 65 74 65 72 20 le. * var meter
0100: 3d 20 6e 65 77 20 4e 65 78 75 73 2e 4d 65 74 65 = new Nexus.Mete
0110: 72 28 27 23 74 61 72 67 65 74 27 29 0a 20 2a 20 r('#target'). *
0120: 6d 65 74 65 72 2e 63 6f 6e 6e 65 63 74 28 6d 79 meter.connect(my
0130: 57 65 62 41 75 64 69 6f 4e 6f 64 65 29 0a 20 2a WebAudioNode). *
0140: 0a 20 2a 20 40 65 78 61 6d 70 6c 65 0a 20 2a 20 . * @example. *
0150: 76 61 72 20 6d 65 74 65 72 20 3d 20 6e 65 77 20 var meter = new
0160: 4e 65 78 75 73 2e 4d 65 74 65 72 28 27 23 74 61 Nexus.Meter('#ta
0170: 72 67 65 74 27 2c 20 7b 0a 20 2a 20 20 20 73 69 rget', {. * si
0180: 7a 65 3a 20 5b 37 35 2c 37 35 5d 0a 20 2a 20 7d ze: [75,75]. * }
0190: 29 0a 20 2a 20 6d 65 74 65 72 2e 63 6f 6e 6e 65 ). * meter.conne
01a0: 63 74 28 6d 79 57 65 62 41 75 64 69 6f 4e 6f 64 ct(myWebAudioNod
01b0: 65 29 0a 20 2a 0a 20 2a 20 40 6f 75 74 70 75 74 e). *. * @output
01c0: 0a 20 2a 20 26 6e 62 73 70 3b 0a 20 2a 20 4e 6f . * . * No
01d0: 20 65 76 65 6e 74 73 0a 20 2a 0a 20 2a 2f 0a 0a events. *. */..
01e0: 65 78 70 6f 72 74 20 64 65 66 61 75 6c 74 20 63 export default c
01f0: 6c 61 73 73 20 4d 65 74 65 72 20 65 78 74 65 6e lass Meter exten
0200: 64 73 20 49 6e 74 65 72 66 61 63 65 20 7b 0a 20 ds Interface {.
0210: 20 63 6f 6e 73 74 72 75 63 74 6f 72 28 29 20 7b constructor() {
0220: 0a 20 20 20 20 6c 65 74 20 6f 70 74 69 6f 6e 73 . let options
0230: 20 3d 20 5b 5d 3b 0a 0a 20 20 20 20 6c 65 74 20 = [];.. let
0240: 64 65 66 61 75 6c 74 73 20 3d 20 7b 0a 20 20 20 defaults = {.
0250: 20 20 20 73 69 7a 65 3a 20 5b 33 30 2c 20 31 30 size: [30, 10
0260: 30 5d 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20 73 0]. };.. s
0270: 75 70 65 72 28 61 72 67 75 6d 65 6e 74 73 2c 20 uper(arguments,
0280: 6f 70 74 69 6f 6e 73 2c 20 64 65 66 61 75 6c 74 options, default
0290: 73 29 3b 0a 0a 20 20 20 20 74 68 69 73 2e 63 68 s);.. this.ch
02a0: 61 6e 6e 65 6c 73 20 3d 20 32 3b 0a 20 20 20 20 annels = 2;.
02b0: 74 68 69 73 2e 73 70 6c 69 74 74 65 72 20 3d 20 this.splitter =
02c0: 6e 75 6c 6c 3b 0a 20 20 20 20 74 68 69 73 2e 61 null;. this.a
02d0: 6e 61 6c 79 73 65 72 73 20 3d 20 5b 5d 3b 0a 20 nalysers = [];.
02e0: 20 20 20 74 68 69 73 2e 62 75 66 66 65 72 4c 65 this.bufferLe
02f0: 6e 67 74 68 20 3d 20 30 3b 0a 20 20 20 20 74 68 ngth = 0;. th
0300: 69 73 2e 64 61 74 61 41 72 72 61 79 20 3d 20 6e is.dataArray = n
0310: 75 6c 6c 3b 0a 20 20 20 20 74 68 69 73 2e 61 63 ull;. this.ac
0320: 74 69 76 65 20 3d 20 66 61 6c 73 65 3b 0a 20 20 tive = false;.
0330: 20 20 74 68 69 73 2e 73 6f 75 72 63 65 20 3d 20 this.source =
0340: 6e 75 6c 6c 3b 0a 20 20 20 20 74 68 69 73 2e 64 null;. this.d
0350: 62 20 3d 20 2d 49 6e 66 69 6e 69 74 79 3b 0a 0a b = -Infinity;..
0360: 20 20 20 20 74 68 69 73 2e 69 6e 69 74 28 29 3b this.init();
0370: 0a 0a 20 20 20 20 74 68 69 73 2e 6d 65 74 65 72 .. this.meter
0380: 57 69 64 74 68 20 3d 20 74 68 69 73 2e 63 61 6e Width = this.can
0390: 76 61 73 2e 65 6c 65 6d 65 6e 74 2e 77 69 64 74 vas.element.widt
03a0: 68 20 2f 20 74 68 69 73 2e 63 68 61 6e 6e 65 6c h / this.channel
03b0: 73 3b 0a 0a 20 20 20 20 74 68 69 73 2e 72 65 6e s;.. this.ren
03c0: 64 65 72 28 29 3b 0a 20 20 7d 0a 0a 20 20 62 75 der();. }.. bu
03d0: 69 6c 64 46 72 61 6d 65 28 29 20 7b 0a 20 20 20 ildFrame() {.
03e0: 20 74 68 69 73 2e 63 61 6e 76 61 73 20 3d 20 6e this.canvas = n
03f0: 65 77 20 64 6f 6d 2e 53 6d 61 72 74 43 61 6e 76 ew dom.SmartCanv
0400: 61 73 28 74 68 69 73 2e 70 61 72 65 6e 74 29 3b as(this.parent);
0410: 0a 20 20 20 20 74 68 69 73 2e 65 6c 65 6d 65 6e . this.elemen
0420: 74 20 3d 20 74 68 69 73 2e 63 61 6e 76 61 73 2e t = this.canvas.
0430: 65 6c 65 6d 65 6e 74 3b 0a 20 20 7d 0a 0a 20 20 element;. }..
0440: 73 69 7a 65 49 6e 74 65 72 66 61 63 65 28 29 20 sizeInterface()
0450: 7b 0a 20 20 20 20 74 68 69 73 2e 63 61 6e 76 61 {. this.canva
0460: 73 2e 72 65 73 69 7a 65 28 74 68 69 73 2e 77 69 s.resize(this.wi
0470: 64 74 68 2c 20 74 68 69 73 2e 68 65 69 67 68 74 dth, this.height
0480: 29 3b 0a 20 20 7d 0a 0a 20 20 63 6f 6c 6f 72 49 );. }.. colorI
0490: 6e 74 65 72 66 61 63 65 28 29 20 7b 0a 20 20 20 nterface() {.
04a0: 20 74 68 69 73 2e 63 61 6e 76 61 73 2e 65 6c 65 this.canvas.ele
04b0: 6d 65 6e 74 2e 73 74 79 6c 65 2e 62 61 63 6b 67 ment.style.backg
04c0: 72 6f 75 6e 64 43 6f 6c 6f 72 20 3d 20 74 68 69 roundColor = thi
04d0: 73 2e 63 6f 6c 6f 72 73 2e 66 69 6c 6c 3b 0a 20 s.colors.fill;.
04e0: 20 7d 0a 0a 20 20 72 65 6e 64 65 72 28 29 20 7b }.. render() {
04f0: 0a 20 20 20 20 69 66 20 28 74 68 69 73 2e 61 63 . if (this.ac
0500: 74 69 76 65 29 20 7b 0a 20 20 20 20 20 20 72 65 tive) {. re
0510: 71 75 65 73 74 41 6e 69 6d 61 74 69 6f 6e 46 72 questAnimationFr
0520: 61 6d 65 28 74 68 69 73 2e 72 65 6e 64 65 72 2e ame(this.render.
0530: 62 69 6e 64 28 74 68 69 73 29 29 3b 0a 20 20 20 bind(this));.
0540: 20 7d 0a 0a 20 20 20 20 74 68 69 73 2e 63 61 6e }.. this.can
0550: 76 61 73 2e 63 6f 6e 74 65 78 74 2e 66 69 6c 6c vas.context.fill
0560: 53 74 79 6c 65 20 3d 20 74 68 69 73 2e 63 6f 6c Style = this.col
0570: 6f 72 73 2e 66 69 6c 6c 3b 0a 20 20 20 20 74 68 ors.fill;. th
0580: 69 73 2e 63 61 6e 76 61 73 2e 63 6f 6e 74 65 78 is.canvas.contex
0590: 74 2e 66 69 6c 6c 52 65 63 74 28 0a 20 20 20 20 t.fillRect(.
05a0: 20 20 30 2c 0a 20 20 20 20 20 20 30 2c 0a 20 20 0,. 0,.
05b0: 20 20 20 20 74 68 69 73 2e 63 61 6e 76 61 73 2e this.canvas.
05c0: 65 6c 65 6d 65 6e 74 2e 77 69 64 74 68 2c 0a 20 element.width,.
05d0: 20 20 20 20 20 74 68 69 73 2e 63 61 6e 76 61 73 this.canvas
05e0: 2e 65 6c 65 6d 65 6e 74 2e 68 65 69 67 68 74 0a .element.height.
05f0: 20 20 20 20 29 3b 0a 0a 20 20 20 20 66 6f 72 20 );.. for
0600: 28 6c 65 74 20 69 20 3d 20 30 3b 20 69 20 3c 20 (let i = 0; i <
0610: 74 68 69 73 2e 61 6e 61 6c 79 73 65 72 73 2e 6c this.analysers.l
0620: 65 6e 67 74 68 3b 20 69 2b 2b 29 20 7b 0a 20 20 ength; i++) {.
0630: 20 20 20 20 69 66 20 28 74 68 69 73 2e 73 6f 75 if (this.sou
0640: 72 63 65 29 20 7b 0a 20 20 20 20 20 20 20 20 74 rce) {. t
0650: 68 69 73 2e 61 6e 61 6c 79 73 65 72 73 5b 69 5d his.analysers[i]
0660: 2e 67 65 74 46 6c 6f 61 74 54 69 6d 65 44 6f 6d .getFloatTimeDom
0670: 61 69 6e 44 61 74 61 28 74 68 69 73 2e 64 61 74 ainData(this.dat
0680: 61 41 72 72 61 79 29 3b 0a 0a 20 20 20 20 20 20 aArray);..
0690: 20 20 6c 65 74 20 72 6d 73 20 3d 20 30 3b 0a 0a let rms = 0;..
06a0: 20 20 20 20 20 20 20 20 66 6f 72 20 28 6c 65 74 for (let
06b0: 20 69 20 3d 20 30 3b 20 69 20 3c 20 74 68 69 73 i = 0; i < this
06c0: 2e 64 61 74 61 41 72 72 61 79 2e 6c 65 6e 67 74 .dataArray.lengt
06d0: 68 3b 20 69 2b 2b 29 20 7b 0a 20 20 20 20 20 20 h; i++) {.
06e0: 20 20 20 20 72 6d 73 20 2b 3d 20 74 68 69 73 2e rms += this.
06f0: 64 61 74 61 41 72 72 61 79 5b 69 5d 20 2a 20 74 dataArray[i] * t
0700: 68 69 73 2e 64 61 74 61 41 72 72 61 79 5b 69 5d his.dataArray[i]
0710: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 ;. }..
0720: 20 20 20 20 20 72 6d 73 20 3d 20 4d 61 74 68 2e rms = Math.
0730: 73 71 72 74 28 72 6d 73 20 2f 20 74 68 69 73 2e sqrt(rms / this.
0740: 64 61 74 61 41 72 72 61 79 2e 6c 65 6e 67 74 68 dataArray.length
0750: 29 3b 0a 0a 20 20 20 20 20 20 20 20 74 68 69 73 );.. this
0760: 2e 64 62 20 3d 20 32 30 20 2a 20 4d 61 74 68 2e .db = 20 * Math.
0770: 6c 6f 67 31 30 28 72 6d 73 29 3b 0a 20 20 20 20 log10(rms);.
0780: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 74 68 69 } else if (thi
0790: 73 2e 64 62 20 3e 20 2d 32 30 30 20 26 26 20 74 s.db > -200 && t
07a0: 68 69 73 2e 64 62 20 21 3d 3d 20 2d 49 6e 66 69 his.db !== -Infi
07b0: 6e 69 74 79 29 20 7b 0a 20 20 20 20 20 20 20 20 nity) {.
07c0: 74 68 69 73 2e 64 62 20 2d 3d 20 31 3b 0a 20 20 this.db -= 1;.
07d0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 } else {.
07e0: 20 20 20 20 20 74 68 69 73 2e 64 62 20 3d 20 2d this.db = -
07f0: 49 6e 66 69 6e 69 74 79 3b 0a 20 20 20 20 20 20 Infinity;.
0800: 7d 0a 0a 20 20 20 20 20 20 2f 2f 63 6f 6e 73 6f }.. //conso
0810: 6c 65 2e 6c 6f 67 28 64 62 29 0a 0a 20 20 20 20 le.log(db)..
0820: 20 20 69 66 20 28 74 68 69 73 2e 64 62 20 3e 20 if (this.db >
0830: 2d 37 30 29 20 7b 0a 20 20 20 20 20 20 20 20 6c -70) {. l
0840: 65 74 20 6c 69 6e 65 61 72 20 3d 20 6d 61 74 68 et linear = math
0850: 2e 6e 6f 72 6d 61 6c 69 7a 65 28 74 68 69 73 2e .normalize(this.
0860: 64 62 2c 20 2d 37 30 2c 20 35 29 3b 0a 20 20 20 db, -70, 5);.
0870: 20 20 20 20 20 6c 65 74 20 65 78 70 20 3d 20 6c let exp = l
0880: 69 6e 65 61 72 20 2a 20 6c 69 6e 65 61 72 3b 0a inear * linear;.
0890: 20 20 20 20 20 20 20 20 6c 65 74 20 79 20 3d 20 let y =
08a0: 6d 61 74 68 2e 73 63 61 6c 65 28 65 78 70 2c 20 math.scale(exp,
08b0: 30 2c 20 31 2c 20 74 68 69 73 2e 65 6c 65 6d 65 0, 1, this.eleme
08c0: 6e 74 2e 68 65 69 67 68 74 2c 20 30 29 3b 0a 0a nt.height, 0);..
08d0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 61 6e this.can
08e0: 76 61 73 2e 63 6f 6e 74 65 78 74 2e 66 69 6c 6c vas.context.fill
08f0: 53 74 79 6c 65 20 3d 20 74 68 69 73 2e 63 6f 6c Style = this.col
0900: 6f 72 73 2e 61 63 63 65 6e 74 3b 0a 20 20 20 20 ors.accent;.
0910: 20 20 20 20 74 68 69 73 2e 63 61 6e 76 61 73 2e this.canvas.
0920: 63 6f 6e 74 65 78 74 2e 66 69 6c 6c 52 65 63 74 context.fillRect
0930: 28 0a 20 20 20 20 20 20 20 20 20 20 74 68 69 73 (. this
0940: 2e 6d 65 74 65 72 57 69 64 74 68 20 2a 20 69 2c .meterWidth * i,
0950: 0a 20 20 20 20 20 20 20 20 20 20 79 2c 0a 20 20 . y,.
0960: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6d 65 74 this.met
0970: 65 72 57 69 64 74 68 2c 0a 20 20 20 20 20 20 20 erWidth,.
0980: 20 20 20 74 68 69 73 2e 63 61 6e 76 61 73 2e 65 this.canvas.e
0990: 6c 65 6d 65 6e 74 2e 68 65 69 67 68 74 20 2d 20 lement.height -
09a0: 79 0a 20 20 20 20 20 20 20 20 29 3b 0a 0a 20 20 y. );..
09b0: 20 20 20 20 20 20 2f 2f 63 6f 6e 73 6f 6c 65 2e //console.
09c0: 6c 6f 67 28 22 72 65 6e 64 65 72 69 6e 67 2e 2e log("rendering..
09d0: 2e 22 29 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 ."). }.
09e0: 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 45 }. }.. /**. E
09f0: 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 22 70 61 quivalent to "pa
0a00: 74 63 68 69 6e 67 20 69 6e 22 20 61 6e 20 61 75 tching in" an au
0a10: 64 69 6f 20 6e 6f 64 65 20 74 6f 20 76 69 73 75 dio node to visu
0a20: 61 6c 69 7a 65 2e 0a 20 20 40 70 61 72 61 6d 20 alize.. @param
0a30: 6e 6f 64 65 20 7b 41 75 64 69 6f 4e 6f 64 65 7d node {AudioNode}
0a40: 20 54 68 65 20 61 75 64 69 6f 20 6e 6f 64 65 20 The audio node
0a50: 74 6f 20 76 69 73 75 61 6c 69 7a 65 0a 20 20 40 to visualize. @
0a60: 70 61 72 61 6d 20 63 68 61 6e 6e 65 6c 73 20 7b param channels {
0a70: 6e 75 6d 62 65 72 7d 20 28 6f 70 74 69 6f 6e 61 number} (optiona
0a80: 6c 29 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 l) The number of
0a90: 20 63 68 61 6e 6e 65 6c 73 20 69 6e 20 74 68 65 channels in the
0aa0: 20 73 6f 75 72 63 65 20 6e 6f 64 65 20 74 6f 20 source node to
0ab0: 77 61 74 63 68 2e 20 49 66 20 6e 6f 74 20 73 70 watch. If not sp
0ac0: 65 63 69 66 69 65 64 2c 20 74 68 65 20 69 6e 74 ecified, the int
0ad0: 65 72 66 61 63 65 20 77 69 6c 6c 20 6c 6f 6f 6b erface will look
0ae0: 20 66 6f 72 20 61 20 2e 63 68 61 6e 6e 65 6c 43 for a .channelC
0af0: 6f 75 6e 74 20 70 72 6f 70 65 72 74 79 20 6f 6e ount property on
0b00: 20 74 68 65 20 69 6e 70 75 74 20 6e 6f 64 65 2e the input node.
0b10: 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 If it does not
0b20: 65 78 69 73 74 2c 20 74 68 65 20 69 6e 74 65 72 exist, the inter
0b30: 66 61 63 65 20 77 69 6c 6c 20 64 65 66 61 75 6c face will defaul
0b40: 74 20 74 6f 20 31 20 63 68 61 6e 6e 65 6c 2e 0a t to 1 channel..
0b50: 20 20 40 65 78 61 6d 70 6c 65 20 6d 65 74 65 72 @example meter
0b60: 2e 63 6f 6e 6e 65 63 74 28 20 54 6f 6e 65 2e 4d .connect( Tone.M
0b70: 61 73 74 65 72 2c 20 32 20 29 3b 0a 20 20 2a 2f aster, 2 );. */
0b80: 0a 20 20 63 6f 6e 6e 65 63 74 28 6e 6f 64 65 2c . connect(node,
0b90: 20 63 68 61 6e 6e 65 6c 73 29 20 7b 0a 20 20 20 channels) {.
0ba0: 20 69 66 20 28 74 68 69 73 2e 73 6f 75 72 63 65 if (this.source
0bb0: 29 20 7b 0a 20 20 20 20 20 20 74 68 69 73 2e 64 ) {. this.d
0bc0: 69 73 63 6f 6e 6e 65 63 74 28 29 3b 0a 20 20 20 isconnect();.
0bd0: 20 7d 0a 0a 20 20 20 20 74 68 69 73 2e 63 68 61 }.. this.cha
0be0: 6e 6e 65 6c 73 20 3d 20 63 68 61 6e 6e 65 6c 73 nnels = channels
0bf0: 20 7c 7c 20 6e 6f 64 65 2e 63 68 61 6e 6e 65 6c || node.channel
0c00: 43 6f 75 6e 74 20 7c 7c 20 32 3b 0a 0a 20 20 20 Count || 2;..
0c10: 20 74 68 69 73 2e 73 70 6c 69 74 74 65 72 20 3d this.splitter =
0c20: 20 6e 6f 64 65 2e 63 6f 6e 74 65 78 74 2e 63 72 node.context.cr
0c30: 65 61 74 65 43 68 61 6e 6e 65 6c 53 70 6c 69 74 eateChannelSplit
0c40: 74 65 72 28 74 68 69 73 2e 63 68 61 6e 6e 65 6c ter(this.channel
0c50: 73 29 3b 0a 0a 20 20 20 20 74 68 69 73 2e 61 6e s);.. this.an
0c60: 61 6c 79 73 65 72 73 20 3d 20 5b 5d 3b 0a 20 20 alysers = [];.
0c70: 20 20 66 6f 72 20 28 6c 65 74 20 69 20 3d 20 30 for (let i = 0
0c80: 3b 20 69 20 3c 20 74 68 69 73 2e 63 68 61 6e 6e ; i < this.chann
0c90: 65 6c 73 3b 20 69 2b 2b 29 20 7b 0a 20 20 20 20 els; i++) {.
0ca0: 20 20 63 6f 6e 73 74 20 61 6e 61 6c 79 73 65 72 const analyser
0cb0: 20 3d 20 6e 6f 64 65 2e 63 6f 6e 74 65 78 74 2e = node.context.
0cc0: 63 72 65 61 74 65 41 6e 61 6c 79 73 65 72 28 29 createAnalyser()
0cd0: 3b 0a 20 20 20 20 20 20 61 6e 61 6c 79 73 65 72 ;. analyser
0ce0: 2e 66 66 74 53 69 7a 65 20 3d 20 31 30 32 34 3b .fftSize = 1024;
0cf0: 0a 20 20 20 20 20 20 61 6e 61 6c 79 73 65 72 2e . analyser.
0d00: 73 6d 6f 6f 74 68 69 6e 67 54 69 6d 65 43 6f 6e smoothingTimeCon
0d10: 73 74 61 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 stant = 1;.
0d20: 20 74 68 69 73 2e 73 70 6c 69 74 74 65 72 2e 63 this.splitter.c
0d30: 6f 6e 6e 65 63 74 28 61 6e 61 6c 79 73 65 72 2c onnect(analyser,
0d40: 20 69 29 3b 0a 20 20 20 20 20 20 74 68 69 73 2e i);. this.
0d50: 61 6e 61 6c 79 73 65 72 73 2e 70 75 73 68 28 61 analysers.push(a
0d60: 6e 61 6c 79 73 65 72 29 3b 0a 20 20 20 20 7d 0a nalyser);. }.
0d70: 20 20 20 20 74 68 69 73 2e 62 75 66 66 65 72 4c this.bufferL
0d80: 65 6e 67 74 68 20 3d 20 74 68 69 73 2e 61 6e 61 ength = this.ana
0d90: 6c 79 73 65 72 73 5b 30 5d 2e 66 72 65 71 75 65 lysers[0].freque
0da0: 6e 63 79 42 69 6e 43 6f 75 6e 74 3b 0a 20 20 20 ncyBinCount;.
0db0: 20 74 68 69 73 2e 64 61 74 61 41 72 72 61 79 20 this.dataArray
0dc0: 3d 20 6e 65 77 20 46 6c 6f 61 74 33 32 41 72 72 = new Float32Arr
0dd0: 61 79 28 74 68 69 73 2e 62 75 66 66 65 72 4c 65 ay(this.bufferLe
0de0: 6e 67 74 68 29 3b 0a 0a 20 20 20 20 74 68 69 73 ngth);.. this
0df0: 2e 61 63 74 69 76 65 20 3d 20 74 72 75 65 3b 0a .active = true;.
0e00: 0a 20 20 20 20 74 68 69 73 2e 6d 65 74 65 72 57 . this.meterW
0e10: 69 64 74 68 20 3d 20 74 68 69 73 2e 63 61 6e 76 idth = this.canv
0e20: 61 73 2e 65 6c 65 6d 65 6e 74 2e 77 69 64 74 68 as.element.width
0e30: 20 2f 20 74 68 69 73 2e 63 68 61 6e 6e 65 6c 73 / this.channels
0e40: 3b 0a 0a 20 20 20 20 74 68 69 73 2e 73 6f 75 72 ;.. this.sour
0e50: 63 65 20 3d 20 6e 6f 64 65 3b 0a 20 20 20 20 74 ce = node;. t
0e60: 68 69 73 2e 73 6f 75 72 63 65 2e 63 6f 6e 6e 65 his.source.conne
0e70: 63 74 28 74 68 69 73 2e 73 70 6c 69 74 74 65 72 ct(this.splitter
0e80: 29 3b 0a 0a 20 20 20 20 74 68 69 73 2e 72 65 6e );.. this.ren
0e90: 64 65 72 28 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a der();. }.. /*
0ea0: 2a 0a 20 20 53 74 6f 70 20 76 69 73 75 61 6c 69 *. Stop visuali
0eb0: 7a 69 6e 67 20 74 68 65 20 73 6f 75 72 63 65 20 zing the source
0ec0: 6e 6f 64 65 20 61 6e 64 20 64 69 73 63 6f 6e 6e node and disconn
0ed0: 65 63 74 20 69 74 2e 0a 20 20 2a 2f 0a 20 20 64 ect it.. */. d
0ee0: 69 73 63 6f 6e 6e 65 63 74 28 29 20 7b 0a 20 20 isconnect() {.
0ef0: 20 20 69 66 20 28 74 68 69 73 2e 73 6f 75 72 63 if (this.sourc
0f00: 65 29 20 7b 0a 20 20 20 20 20 20 74 68 69 73 2e e) {. this.
0f10: 73 6f 75 72 63 65 2e 64 69 73 63 6f 6e 6e 65 63 source.disconnec
0f20: 74 28 74 68 69 73 2e 73 70 6c 69 74 74 65 72 29 t(this.splitter)
0f30: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 68 69 ;. }.. thi
0f40: 73 2e 73 70 6c 69 74 74 65 72 20 3d 20 6e 75 6c s.splitter = nul
0f50: 6c 3b 0a 20 20 20 20 74 68 69 73 2e 61 6e 61 6c l;. this.anal
0f60: 79 73 65 72 73 20 3d 20 5b 5d 3b 0a 20 20 20 20 ysers = [];.
0f70: 74 68 69 73 2e 62 75 66 66 65 72 4c 65 6e 67 74 this.bufferLengt
0f80: 68 20 3d 20 30 3b 0a 20 20 20 20 74 68 69 73 2e h = 0;. this.
0f90: 64 61 74 61 41 72 72 61 79 20 3d 20 6e 75 6c 6c dataArray = null
0fa0: 3b 0a 20 20 20 20 74 68 69 73 2e 61 63 74 69 76 ;. this.activ
0fb0: 65 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 74 e = false;. t
0fc0: 68 69 73 2e 73 6f 75 72 63 65 20 3d 20 6e 75 6c his.source = nul
0fd0: 6c 3b 0a 20 20 7d 0a 0a 20 20 63 6c 69 63 6b 28 l;. }.. click(
0fe0: 29 20 7b 0a 20 20 20 20 74 68 69 73 2e 61 63 74 ) {. this.act
0ff0: 69 76 65 20 3d 20 21 74 68 69 73 2e 61 63 74 69 ive = !this.acti
1000: 76 65 20 26 26 20 74 68 69 73 2e 73 6f 75 72 63 ve && this.sourc
1010: 65 3b 0a 20 20 20 20 74 68 69 73 2e 72 65 6e 64 e;. this.rend
1020: 65 72 28 29 3b 0a 20 20 7d 0a 0a 20 20 63 75 73 er();. }.. cus
1030: 74 6f 6d 44 65 73 74 72 6f 79 28 29 20 7b 0a 20 tomDestroy() {.
1040: 20 20 20 74 68 69 73 2e 61 63 74 69 76 65 20 3d this.active =
1050: 20 66 61 6c 73 65 3b 0a 20 20 7d 0a 7d 0a false;. }.}.