2023-03-22 21:06:30 +00:00
/*! p5.sound.min.js v0.3.8 2018-06-15 */
/ * *
2023-03-26 21:11:53 +00:00
* p5 . sound
2023-03-22 21:06:30 +00:00
* https : //p5js.org/reference/#/libraries/p5.sound
*
* From the Processing Foundation and contributors
* https : //github.com/processing/p5.js-sound/graphs/contributors
*
* MIT License ( MIT )
* https : //github.com/processing/p5.js-sound/blob/master/LICENSE
*
* Some of the many audio libraries & resources that inspire p5 . sound :
* - TONE . js ( c ) Yotam Mann . Licensed under The MIT License ( MIT ) . https : //github.com/TONEnoTONE/Tone.js
* - buzz . js ( c ) Jay Salvat . Licensed under The MIT License ( MIT ) . http : //buzz.jaysalvat.com/
* - Boris Smus Web Audio API book , 2013. Licensed under the Apache License http : //www.apache.org/licenses/LICENSE-2.0
* - wavesurfer . js https : //github.com/katspaugh/wavesurfer.js
* - Web Audio Components by Jordan Santell https : //github.com/web-audio-components
* - Wilm Thoben ' s Sound library for Processing https : //github.com/processing/processing/tree/master/java/libraries/sound
*
* Web Audio API : http : //w3.org/TR/webaudio/
* /
2023-03-26 21:11:53 +00:00
! ( function ( t , e ) {
'function' == typeof define && define . amd
? define ( 'p5.sound' , [ 'p5' ] , function ( t ) {
e ( t ) ;
} )
: e ( 'object' == typeof exports ? require ( '../p5' ) : t . p5 ) ;
} ) ( this , function ( t ) {
var e ;
e = ( function ( ) {
! ( function ( ) {
function t ( t ) {
t &&
( t . setTargetAtTime ||
( t . setTargetAtTime = t . setTargetValueAtTime ) ) ;
}
window . hasOwnProperty ( 'webkitAudioContext' ) &&
! window . hasOwnProperty ( 'AudioContext' ) &&
( ( window . AudioContext = window . webkitAudioContext ) ,
'function' != typeof AudioContext . prototype . createGain &&
( AudioContext . prototype . createGain =
AudioContext . prototype . createGainNode ) ,
'function' != typeof AudioContext . prototype . createDelay &&
( AudioContext . prototype . createDelay =
AudioContext . prototype . createDelayNode ) ,
'function' !=
typeof AudioContext . prototype . createScriptProcessor &&
( AudioContext . prototype . createScriptProcessor =
AudioContext . prototype . createJavaScriptNode ) ,
'function' !=
typeof AudioContext . prototype . createPeriodicWave &&
( AudioContext . prototype . createPeriodicWave =
AudioContext . prototype . createWaveTable ) ,
( AudioContext . prototype . internal _createGain =
AudioContext . prototype . createGain ) ,
( AudioContext . prototype . createGain = function ( ) {
var e = this . internal _createGain ( ) ;
return t ( e . gain ) , e ;
} ) ,
( AudioContext . prototype . internal _createDelay =
AudioContext . prototype . createDelay ) ,
( AudioContext . prototype . createDelay = function ( e ) {
var i = e
? this . internal _createDelay ( e )
: this . internal _createDelay ( ) ;
return t ( i . delayTime ) , i ;
} ) ,
( AudioContext . prototype . internal _createBufferSource =
AudioContext . prototype . createBufferSource ) ,
( AudioContext . prototype . createBufferSource = function ( ) {
var e = this . internal _createBufferSource ( ) ;
return (
e . start
? ( ( e . internal _start = e . start ) ,
( e . start = function ( t , i , n ) {
'undefined' != typeof n
? e . internal _start ( t || 0 , i , n )
: e . internal _start ( t || 0 , i || 0 ) ;
} ) )
: ( e . start = function ( t , e , i ) {
e || i
? this . noteGrainOn ( t || 0 , e , i )
: this . noteOn ( t || 0 ) ;
} ) ,
e . stop
? ( ( e . internal _stop = e . stop ) ,
( e . stop = function ( t ) {
e . internal _stop ( t || 0 ) ;
} ) )
: ( e . stop = function ( t ) {
this . noteOff ( t || 0 ) ;
} ) ,
t ( e . playbackRate ) ,
e
) ;
} ) ,
( AudioContext . prototype . internal _createDynamicsCompressor =
AudioContext . prototype . createDynamicsCompressor ) ,
( AudioContext . prototype . createDynamicsCompressor = function ( ) {
var e = this . internal _createDynamicsCompressor ( ) ;
return (
t ( e . threshold ) ,
t ( e . knee ) ,
t ( e . ratio ) ,
t ( e . reduction ) ,
t ( e . attack ) ,
t ( e . release ) ,
e
) ;
} ) ,
( AudioContext . prototype . internal _createBiquadFilter =
AudioContext . prototype . createBiquadFilter ) ,
( AudioContext . prototype . createBiquadFilter = function ( ) {
var e = this . internal _createBiquadFilter ( ) ;
return t ( e . frequency ) , t ( e . detune ) , t ( e . Q ) , t ( e . gain ) , e ;
} ) ,
'function' != typeof AudioContext . prototype . createOscillator &&
( ( AudioContext . prototype . internal _createOscillator =
AudioContext . prototype . createOscillator ) ,
( AudioContext . prototype . createOscillator = function ( ) {
var e = this . internal _createOscillator ( ) ;
return (
e . start
? ( ( e . internal _start = e . start ) ,
( e . start = function ( t ) {
e . internal _start ( t || 0 ) ;
} ) )
: ( e . start = function ( t ) {
this . noteOn ( t || 0 ) ;
} ) ,
e . stop
? ( ( e . internal _stop = e . stop ) ,
( e . stop = function ( t ) {
e . internal _stop ( t || 0 ) ;
} ) )
: ( e . stop = function ( t ) {
this . noteOff ( t || 0 ) ;
} ) ,
e . setPeriodicWave ||
( e . setPeriodicWave = e . setWaveTable ) ,
t ( e . frequency ) ,
t ( e . detune ) ,
e
) ;
} ) ) ) ,
window . hasOwnProperty ( 'webkitOfflineAudioContext' ) &&
! window . hasOwnProperty ( 'OfflineAudioContext' ) &&
( window . OfflineAudioContext =
window . webkitOfflineAudioContext ) ;
} ) ( window ) ,
( navigator . getUserMedia =
navigator . getUserMedia ||
navigator . webkitGetUserMedia ||
navigator . mozGetUserMedia ||
navigator . msGetUserMedia ) ;
var e = document . createElement ( 'audio' ) ;
t . prototype . isSupported = function ( ) {
return ! ! e . canPlayType ;
} ;
var i = function ( ) {
return (
! ! e . canPlayType &&
e . canPlayType ( 'audio/ogg; codecs="vorbis"' )
) ;
} ,
n = function ( ) {
return ! ! e . canPlayType && e . canPlayType ( 'audio/mpeg;' ) ;
} ,
o = function ( ) {
return (
! ! e . canPlayType && e . canPlayType ( 'audio/wav; codecs="1"' )
) ;
} ,
r = function ( ) {
return (
! ! e . canPlayType &&
( e . canPlayType ( 'audio/x-m4a;' ) ||
e . canPlayType ( 'audio/aac;' ) )
) ;
} ,
s = function ( ) {
return ! ! e . canPlayType && e . canPlayType ( 'audio/x-aiff;' ) ;
} ;
t . prototype . isFileSupported = function ( t ) {
switch ( t . toLowerCase ( ) ) {
case 'mp3' :
return n ( ) ;
case 'wav' :
return o ( ) ;
case 'ogg' :
return i ( ) ;
case 'aac' :
case 'm4a' :
case 'mp4' :
return r ( ) ;
case 'aif' :
case 'aiff' :
return s ( ) ;
default :
return ! 1 ;
}
} ;
} ) ( ) ;
var i ;
i = ( function ( ) {
var e = new window . AudioContext ( ) ;
t . prototype . getAudioContext = function ( ) {
return e ;
} ;
var i = navigator . userAgent . match ( /(iPad|iPhone|iPod)/g ) ? ! 0 : ! 1 ;
if ( i ) {
var n = ! 1 ,
o = function ( ) {
if ( ! n ) {
var t = e . createBuffer ( 1 , 1 , 22050 ) ,
i = e . createBufferSource ( ) ;
( i . buffer = t ) ,
i . connect ( e . destination ) ,
i . start ( 0 ) ,
console . log ( 'start ios!' ) ,
'running' === e . state && ( n = ! 0 ) ;
}
} ;
document . addEventListener ( 'touchend' , o , ! 1 ) ,
document . addEventListener ( 'touchstart' , o , ! 1 ) ;
}
return e ;
} ) ( ) ;
var n ;
n = ( function ( ) {
var e = function ( ) {
var e = t . prototype . getAudioContext ( ) ;
( this . input = e . createGain ( ) ) ,
( this . output = e . createGain ( ) ) ,
( this . limiter = e . createDynamicsCompressor ( ) ) ,
( this . limiter . threshold . value = 0 ) ,
( this . limiter . ratio . value = 20 ) ,
( this . audiocontext = e ) ,
this . output . disconnect ( ) ,
this . input . connect ( this . limiter ) ,
this . limiter . connect ( this . output ) ,
( this . meter = e . createGain ( ) ) ,
( this . fftMeter = e . createGain ( ) ) ,
this . output . connect ( this . meter ) ,
this . output . connect ( this . fftMeter ) ,
this . output . connect ( this . audiocontext . destination ) ,
( this . soundArray = [ ] ) ,
( this . parts = [ ] ) ,
( this . extensions = [ ] ) ;
} ,
i = new e ( ) ;
return (
( t . prototype . getMasterVolume = function ( ) {
return i . output . gain . value ;
} ) ,
( t . prototype . masterVolume = function ( t , e , n ) {
if ( 'number' == typeof t ) {
var e = e || 0 ,
n = n || 0 ,
o = i . audiocontext . currentTime ,
r = i . output . gain . value ;
i . output . gain . cancelScheduledValues ( o + n ) ,
i . output . gain . linearRampToValueAtTime ( r , o + n ) ,
i . output . gain . linearRampToValueAtTime ( t , o + n + e ) ;
} else {
if ( ! t ) return i . output . gain ;
t . connect ( i . output . gain ) ;
}
} ) ,
( t . prototype . soundOut = t . soundOut = i ) ,
( t . soundOut . _silentNode = i . audiocontext . createGain ( ) ) ,
( t . soundOut . _silentNode . gain . value = 0 ) ,
t . soundOut . _silentNode . connect ( i . audiocontext . destination ) ,
i
) ;
} ) ( ) ;
var o ;
o = ( function ( ) {
var e = n ;
( t . prototype . sampleRate = function ( ) {
return e . audiocontext . sampleRate ;
} ) ,
( t . prototype . freqToMidi = function ( t ) {
var e = Math . log ( t / 440 ) / Math . log ( 2 ) ,
i = Math . round ( 12 * e ) + 69 ;
return i ;
} ) ;
var i = ( t . prototype . midiToFreq = function ( t ) {
return 440 * Math . pow ( 2 , ( t - 69 ) / 12 ) ;
} ) ;
return (
( noteToFreq = function ( t ) {
if ( 'string' != typeof t ) return t ;
var e = { A : 21 , B : 23 , C : 24 , D : 26 , E : 28 , F : 29 , G : 31 } ,
n = e [ t [ 0 ] . toUpperCase ( ) ] ,
o = ~ ~ t . slice ( - 1 ) ;
switch ( ( ( n += 12 * ( o - 1 ) ) , t [ 1 ] ) ) {
case '#' :
n += 1 ;
break ;
case 'b' :
n -= 1 ;
}
return i ( n ) ;
} ) ,
( t . prototype . soundFormats = function ( ) {
e . extensions = [ ] ;
for ( var t = 0 ; t < arguments . length ; t ++ ) {
if (
( ( arguments [ t ] = arguments [ t ] . toLowerCase ( ) ) ,
! (
[ 'mp3' , 'wav' , 'ogg' , 'm4a' , 'aac' ] . indexOf (
arguments [ t ] ,
) > - 1
) )
)
throw arguments [ t ] + ' is not a valid sound format!' ;
e . extensions . push ( arguments [ t ] ) ;
}
} ) ,
( t . prototype . disposeSound = function ( ) {
for ( var t = 0 ; t < e . soundArray . length ; t ++ )
e . soundArray [ t ] . dispose ( ) ;
} ) ,
t . prototype . registerMethod ( 'remove' , t . prototype . disposeSound ) ,
( t . prototype . _checkFileFormats = function ( i ) {
var n ;
if ( 'string' == typeof i ) {
n = i ;
var o = n . split ( '.' ) . pop ( ) ;
if ( [ 'mp3' , 'wav' , 'ogg' , 'm4a' , 'aac' ] . indexOf ( o ) > - 1 )
if ( t . prototype . isFileSupported ( o ) ) n = n ;
else
for (
var r = n . split ( '.' ) ,
s = r [ r . length - 1 ] ,
a = 0 ;
a < e . extensions . length ;
a ++
) {
var u = e . extensions [ a ] ,
c = t . prototype . isFileSupported ( u ) ;
if ( c ) {
( s = '' ) , 2 === r . length && ( s += r [ 0 ] ) ;
for ( var a = 1 ; a <= r . length - 2 ; a ++ ) {
var p = r [ a ] ;
s += '.' + p ;
}
( n = s += '.' ) , ( n = n += u ) ;
break ;
}
}
else
for ( var a = 0 ; a < e . extensions . length ; a ++ ) {
var u = e . extensions [ a ] ,
c = t . prototype . isFileSupported ( u ) ;
if ( c ) {
n = n + '.' + u ;
break ;
}
}
} else if ( 'object' == typeof i )
for ( var a = 0 ; a < i . length ; a ++ ) {
var u = i [ a ] . split ( '.' ) . pop ( ) ,
c = t . prototype . isFileSupported ( u ) ;
if ( c ) {
n = i [ a ] ;
break ;
}
}
return n ;
} ) ,
( t . prototype . _mathChain = function ( t , e , i , n , o ) {
for ( var r in t . mathOps )
t . mathOps [ r ] instanceof o &&
( t . mathOps [ r ] . dispose ( ) ,
( i = r ) ,
i < t . mathOps . length - 1 && ( n = t . mathOps [ r + 1 ] ) ) ;
return (
t . mathOps [ i - 1 ] . disconnect ( ) ,
t . mathOps [ i - 1 ] . connect ( e ) ,
e . connect ( n ) ,
( t . mathOps [ i ] = e ) ,
t
) ;
} ) ,
{ midiToFreq : i , noteToFreq : noteToFreq }
) ;
} ) ( n ) ;
var r ;
r = ( function ( ) {
var t = function ( t , e , i ) {
var n ,
o ,
r = new Error ( ) ;
( r . name = t ) ,
( r . originalStack = r . stack + e ) ,
( n = r . stack + e ) ,
( r . failedPath = i ) ;
var o = n . split ( '\n' ) ;
return (
( o = o . filter ( function ( t ) {
return ! t . match ( /(p5.|native code|globalInit)/g ) ;
} ) ) ,
( r . stack = o . join ( '\n' ) ) ,
r
) ;
} ;
return t ;
} ) ( ) ;
var s ;
s = ( function ( ) {
var e = n ,
i = e . audiocontext ;
'undefined' != typeof i . createStereoPanner
? ( ( t . Panner = function ( t , e ) {
( this . stereoPanner = this . input = i . createStereoPanner ( ) ) ,
t . connect ( this . stereoPanner ) ,
this . stereoPanner . connect ( e ) ;
} ) ,
( t . Panner . prototype . pan = function ( t , e ) {
var n = e || 0 ,
o = i . currentTime + n ;
this . stereoPanner . pan . linearRampToValueAtTime ( t , o ) ;
} ) ,
( t . Panner . prototype . inputChannels = function ( ) { } ) ,
( t . Panner . prototype . connect = function ( t ) {
this . stereoPanner . connect ( t ) ;
} ) ,
( t . Panner . prototype . disconnect = function ( ) {
this . stereoPanner && this . stereoPanner . disconnect ( ) ;
} ) )
: ( ( t . Panner = function ( t , e , n ) {
( this . input = i . createGain ( ) ) ,
t . connect ( this . input ) ,
( this . left = i . createGain ( ) ) ,
( this . right = i . createGain ( ) ) ,
( this . left . channelInterpretation = 'discrete' ) ,
( this . right . channelInterpretation = 'discrete' ) ,
n > 1
? ( ( this . splitter = i . createChannelSplitter ( 2 ) ) ,
this . input . connect ( this . splitter ) ,
this . splitter . connect ( this . left , 1 ) ,
this . splitter . connect ( this . right , 0 ) )
: ( this . input . connect ( this . left ) ,
this . input . connect ( this . right ) ) ,
( this . output = i . createChannelMerger ( 2 ) ) ,
this . left . connect ( this . output , 0 , 1 ) ,
this . right . connect ( this . output , 0 , 0 ) ,
this . output . connect ( e ) ;
} ) ,
( t . Panner . prototype . pan = function ( t , e ) {
var n = e || 0 ,
o = i . currentTime + n ,
r = ( t + 1 ) / 2 ,
s = Math . cos ( ( r * Math . PI ) / 2 ) ,
a = Math . sin ( ( r * Math . PI ) / 2 ) ;
this . left . gain . linearRampToValueAtTime ( a , o ) ,
this . right . gain . linearRampToValueAtTime ( s , o ) ;
} ) ,
( t . Panner . prototype . inputChannels = function ( t ) {
1 === t
? ( this . input . disconnect ( ) ,
this . input . connect ( this . left ) ,
this . input . connect ( this . right ) )
: 2 === t &&
( ( this . splitter = i . createChannelSplitter ( 2 ) ) ,
this . input . disconnect ( ) ,
this . input . connect ( this . splitter ) ,
this . splitter . connect ( this . left , 1 ) ,
this . splitter . connect ( this . right , 0 ) ) ;
} ) ,
( t . Panner . prototype . connect = function ( t ) {
this . output . connect ( t ) ;
} ) ,
( t . Panner . prototype . disconnect = function ( ) {
this . output && this . output . disconnect ( ) ;
} ) ) ;
} ) ( n ) ;
var a ;
a = ( function ( ) {
function e ( t , e ) {
for ( var i = { } , n = t . length , o = 0 ; n > o ; o ++ ) {
if ( t [ o ] > e ) {
var r = t [ o ] ,
s = new d ( r , o ) ;
( i [ o ] = s ) , ( o += 6e3 ) ;
}
o ++ ;
}
return i ;
}
function i ( t ) {
for (
var e = [ ] , i = Object . keys ( t ) . sort ( ) , n = 0 ;
n < i . length ;
n ++
)
for ( var o = 0 ; 10 > o ; o ++ ) {
var r = t [ i [ n ] ] ,
s = t [ i [ n + o ] ] ;
if ( r && s ) {
var a = r . sampleIndex ,
u = s . sampleIndex ,
c = u - a ;
c > 0 && r . intervals . push ( c ) ;
var p = e . some ( function ( t ) {
return t . interval === c ? ( t . count ++ , t ) : void 0 ;
} ) ;
p || e . push ( { interval : c , count : 1 } ) ;
}
}
return e ;
}
function s ( t , e ) {
var i = [ ] ;
return (
t . forEach ( function ( t ) {
try {
var n = Math . abs ( 60 / ( t . interval / e ) ) ;
n = u ( n ) ;
var o = i . some ( function ( e ) {
return e . tempo === n
? ( e . count += t . count )
: void 0 ;
} ) ;
if ( ! o ) {
if ( isNaN ( n ) ) return ;
i . push ( { tempo : Math . round ( n ) , count : t . count } ) ;
}
} catch ( r ) {
throw r ;
}
} ) ,
i
) ;
}
function a ( t , e , i , n ) {
for (
var o = [ ] , r = Object . keys ( t ) . sort ( ) , s = 0 ;
s < r . length ;
s ++
)
for (
var a = r [ s ] , c = t [ a ] , p = 0 ;
p < c . intervals . length ;
p ++
) {
var h = Math . round ( Math . abs ( 60 / ( c . intervals [ p ] / i ) ) ) ;
( h = u ( h ) ) ,
Math . abs ( h - e ) < n && o . push ( c . sampleIndex / i ) ;
}
return ( o = o . filter ( function ( t , e , i ) {
var n = i [ e + 1 ] - t ;
return n > 0.01 ? ! 0 : void 0 ;
} ) ) ;
}
function u ( t ) {
if ( isFinite ( t ) && 0 !== t ) {
for ( ; 90 > t ; ) t *= 2 ;
for ( ; t > 180 && t > 90 ; ) t /= 2 ;
return t ;
}
}
var c = r ,
p = n ,
h = p . audiocontext ,
l = o . midiToFreq ;
( t . SoundFile = function ( e , i , n , o ) {
if ( 'undefined' != typeof e ) {
if ( 'string' == typeof e || 'string' == typeof e [ 0 ] ) {
var r = t . prototype . _checkFileFormats ( e ) ;
this . url = r ;
} else if (
'object' == typeof e &&
! (
window . File &&
window . FileReader &&
window . FileList &&
window . Blob
)
)
throw 'Unable to load file because the File API is not supported' ;
e . file && ( e = e . file ) , ( this . file = e ) ;
}
( this . _onended = function ( ) { } ) ,
( this . _looping = ! 1 ) ,
( this . _playing = ! 1 ) ,
( this . _paused = ! 1 ) ,
( this . _pauseTime = 0 ) ,
( this . _cues = [ ] ) ,
( this . _lastPos = 0 ) ,
( this . _counterNode = null ) ,
( this . _scopeNode = null ) ,
( this . bufferSourceNodes = [ ] ) ,
( this . bufferSourceNode = null ) ,
( this . buffer = null ) ,
( this . playbackRate = 1 ) ,
( this . input = p . audiocontext . createGain ( ) ) ,
( this . output = p . audiocontext . createGain ( ) ) ,
( this . reversed = ! 1 ) ,
( this . startTime = 0 ) ,
( this . endTime = null ) ,
( this . pauseTime = 0 ) ,
( this . mode = 'sustain' ) ,
( this . startMillis = null ) ,
( this . panPosition = 0 ) ,
( this . panner = new t . Panner ( this . output , p . input , 2 ) ) ,
( this . url || this . file ) && this . load ( i , n ) ,
p . soundArray . push ( this ) ,
'function' == typeof o
? ( this . _whileLoading = o )
: ( this . _whileLoading = function ( ) { } ) ;
} ) ,
t . prototype . registerPreloadMethod ( 'loadSound' , t . prototype ) ,
( t . prototype . loadSound = function ( e , i , n , o ) {
window . location . origin . indexOf ( 'file://' ) > - 1 &&
'undefined' === window . cordova &&
window . alert (
'This sketch may require a server to load external files. Please see http://bit.ly/1qcInwS' ,
) ;
var r = this ,
s = new t . SoundFile (
e ,
function ( ) {
'function' == typeof i && i . apply ( r , arguments ) ,
'function' == typeof r . _decrementPreload &&
r . _decrementPreload ( ) ;
} ,
n ,
o ,
) ;
return s ;
} ) ,
( t . SoundFile . prototype . load = function ( t , e ) {
var i = this ,
n = new Error ( ) . stack ;
if ( void 0 !== this . url && '' !== this . url ) {
var o = new XMLHttpRequest ( ) ;
o . addEventListener (
'progress' ,
function ( t ) {
i . _updateProgress ( t ) ;
} ,
! 1 ,
) ,
o . open ( 'GET' , this . url , ! 0 ) ,
( o . responseType = 'arraybuffer' ) ,
( o . onload = function ( ) {
if ( 200 === o . status )
h . decodeAudioData (
o . response ,
function ( e ) {
( i . buffer = e ) ,
i . panner . inputChannels (
e . numberOfChannels ,
) ,
t && t ( i ) ;
} ,
function ( ) {
var t = new c (
'decodeAudioData' ,
n ,
i . url ,
) ,
o =
'AudioContext error at decodeAudioData for ' +
i . url ;
e
? ( ( t . msg = o ) , e ( t ) )
: console . error (
o +
'\n The error stack trace includes: \n' +
t . stack ,
) ;
} ,
) ;
else {
var r = new c ( 'loadSound' , n , i . url ) ,
s =
'Unable to load ' +
i . url +
'. The request status was: ' +
o . status +
' (' +
o . statusText +
')' ;
e
? ( ( r . message = s ) , e ( r ) )
: console . error (
s +
'\n The error stack trace includes: \n' +
r . stack ,
) ;
}
} ) ,
( o . onerror = function ( ) {
var t = new c ( 'loadSound' , n , i . url ) ,
o =
'There was no response from the server at ' +
i . url +
'. Check the url and internet connectivity.' ;
e
? ( ( t . message = o ) , e ( t ) )
: console . error (
o +
'\n The error stack trace includes: \n' +
t . stack ,
) ;
} ) ,
o . send ( ) ;
} else if ( void 0 !== this . file ) {
var r = new FileReader ( ) ;
( r . onload = function ( ) {
h . decodeAudioData ( r . result , function ( e ) {
( i . buffer = e ) ,
i . panner . inputChannels ( e . numberOfChannels ) ,
t && t ( i ) ;
} ) ;
} ) ,
( r . onerror = function ( t ) {
onerror && onerror ( t ) ;
} ) ,
r . readAsArrayBuffer ( this . file ) ;
}
} ) ,
( t . SoundFile . prototype . _updateProgress = function ( t ) {
if ( t . lengthComputable ) {
var e = ( t . loaded / t . total ) * 0.99 ;
this . _whileLoading ( e , t ) ;
} else this . _whileLoading ( 'size unknown' ) ;
} ) ,
( t . SoundFile . prototype . isLoaded = function ( ) {
return this . buffer ? ! 0 : ! 1 ;
} ) ,
( t . SoundFile . prototype . play = function ( t , e , i , n , o ) {
if ( ! this . output )
return void console . warn (
'SoundFile.play() called after dispose' ,
) ;
var r ,
s ,
a = this ,
u = p . audiocontext . currentTime ,
c = t || 0 ;
if (
( 0 > c && ( c = 0 ) ,
( c += u ) ,
'undefined' != typeof e && this . rate ( e ) ,
'undefined' != typeof i && this . setVolume ( i ) ,
! this . buffer )
)
throw 'not ready to play file, buffer has yet to load. Try preload()' ;
if (
( ( this . _pauseTime = 0 ) ,
'restart' === this . mode &&
this . buffer &&
this . bufferSourceNode &&
( this . bufferSourceNode . stop ( c ) ,
this . _counterNode . stop ( c ) ) ,
'untildone' !== this . mode || ! this . isPlaying ( ) )
) {
if (
( ( this . bufferSourceNode = this . _initSourceNode ( ) ) ,
delete this . _counterNode ,
( this . _counterNode = this . _initCounterNode ( ) ) ,
n )
) {
if ( ! ( n >= 0 && n < this . buffer . duration ) )
throw 'start time out of range' ;
r = n ;
} else r = 0 ;
o &&
( o =
o <= this . buffer . duration - r
? o
: this . buffer . duration ) ,
this . _paused
? ( this . bufferSourceNode . start (
c ,
this . pauseTime ,
o ,
) ,
this . _counterNode . start ( c , this . pauseTime , o ) )
: ( this . bufferSourceNode . start ( c , r , o ) ,
this . _counterNode . start ( c , r , o ) ) ,
( this . _playing = ! 0 ) ,
( this . _paused = ! 1 ) ,
this . bufferSourceNodes . push ( this . bufferSourceNode ) ,
( this . bufferSourceNode . _arrayIndex =
this . bufferSourceNodes . length - 1 ) ;
var h = function ( ) {
( this . _playing = ! 1 ) ,
this . removeEventListener ( 'ended' , h , ! 1 ) ,
a . _onended ( a ) ,
a . bufferSourceNodes . forEach ( function ( t , e ) {
t . _playing === ! 1 &&
a . bufferSourceNodes . splice ( e ) ;
} ) ,
0 === a . bufferSourceNodes . length &&
( a . _playing = ! 1 ) ;
} ;
( this . bufferSourceNode . onended = h ) ,
( this . bufferSourceNode . loop = this . _looping ) ,
( this . _counterNode . loop = this . _looping ) ,
this . _looping === ! 0 &&
( ( s = o ? o : r - 1e-15 ) ,
( this . bufferSourceNode . loopStart = r ) ,
( this . bufferSourceNode . loopEnd = s ) ,
( this . _counterNode . loopStart = r ) ,
( this . _counterNode . loopEnd = s ) ) ;
}
} ) ,
( t . SoundFile . prototype . playMode = function ( t ) {
var e = t . toLowerCase ( ) ;
if ( 'restart' === e && this . buffer && this . bufferSourceNode )
for (
var i = 0 ;
i < this . bufferSourceNodes . length - 1 ;
i ++
) {
var n = p . audiocontext . currentTime ;
this . bufferSourceNodes [ i ] . stop ( n ) ;
}
if ( 'restart' !== e && 'sustain' !== e && 'untildone' !== e )
throw 'Invalid play mode. Must be either "restart" or "sustain"' ;
this . mode = e ;
} ) ,
( t . SoundFile . prototype . pause = function ( t ) {
var e = p . audiocontext . currentTime ,
i = t || 0 ,
n = i + e ;
this . isPlaying ( ) && this . buffer && this . bufferSourceNode
? ( ( this . pauseTime = this . currentTime ( ) ) ,
this . bufferSourceNode . stop ( n ) ,
this . _counterNode . stop ( n ) ,
( this . _paused = ! 0 ) ,
( this . _playing = ! 1 ) ,
( this . _pauseTime = this . currentTime ( ) ) )
: ( this . _pauseTime = 0 ) ;
} ) ,
( t . SoundFile . prototype . loop = function ( t , e , i , n , o ) {
( this . _looping = ! 0 ) , this . play ( t , e , i , n , o ) ;
} ) ,
( t . SoundFile . prototype . setLoop = function ( t ) {
if ( t === ! 0 ) this . _looping = ! 0 ;
else {
if ( t !== ! 1 )
throw 'Error: setLoop accepts either true or false' ;
this . _looping = ! 1 ;
}
this . bufferSourceNode &&
( ( this . bufferSourceNode . loop = this . _looping ) ,
( this . _counterNode . loop = this . _looping ) ) ;
} ) ,
( t . SoundFile . prototype . isLooping = function ( ) {
return this . bufferSourceNode &&
this . _looping === ! 0 &&
this . isPlaying ( ) === ! 0
? ! 0
: ! 1 ;
} ) ,
( t . SoundFile . prototype . isPlaying = function ( ) {
return this . _playing ;
} ) ,
( t . SoundFile . prototype . isPaused = function ( ) {
return this . _paused ;
} ) ,
( t . SoundFile . prototype . stop = function ( t ) {
var e = t || 0 ;
if ( 'sustain' === this . mode || 'untildone' === this . mode )
this . stopAll ( e ) ,
( this . _playing = ! 1 ) ,
( this . pauseTime = 0 ) ,
( this . _paused = ! 1 ) ;
else if ( this . buffer && this . bufferSourceNode ) {
var i = p . audiocontext . currentTime ,
n = e || 0 ;
( this . pauseTime = 0 ) ,
this . bufferSourceNode . stop ( i + n ) ,
this . _counterNode . stop ( i + n ) ,
( this . _playing = ! 1 ) ,
( this . _paused = ! 1 ) ;
}
} ) ,
( t . SoundFile . prototype . stopAll = function ( t ) {
var e = p . audiocontext . currentTime ,
i = t || 0 ;
if ( this . buffer && this . bufferSourceNode ) {
for ( var n = 0 ; n < this . bufferSourceNodes . length ; n ++ )
if ( void 0 !== typeof this . bufferSourceNodes [ n ] )
try {
( this . bufferSourceNodes [ n ] . onended =
function ( ) { } ) ,
this . bufferSourceNodes [ n ] . stop ( e + i ) ;
} catch ( o ) { }
this . _counterNode . stop ( e + i ) , this . _onended ( this ) ;
}
} ) ,
( t . SoundFile . prototype . setVolume = function ( t , e , i ) {
if ( 'number' == typeof t ) {
var n = e || 0 ,
o = i || 0 ,
r = p . audiocontext . currentTime ,
s = this . output . gain . value ;
this . output . gain . cancelScheduledValues ( r + o ) ,
this . output . gain . linearRampToValueAtTime ( s , r + o ) ,
this . output . gain . linearRampToValueAtTime ( t , r + o + n ) ;
} else {
if ( ! t ) return this . output . gain ;
t . connect ( this . output . gain ) ;
}
} ) ,
( t . SoundFile . prototype . amp = t . SoundFile . prototype . setVolume ) ,
( t . SoundFile . prototype . fade = t . SoundFile . prototype . setVolume ) ,
( t . SoundFile . prototype . getVolume = function ( ) {
return this . output . gain . value ;
} ) ,
( t . SoundFile . prototype . pan = function ( t , e ) {
( this . panPosition = t ) , this . panner . pan ( t , e ) ;
} ) ,
( t . SoundFile . prototype . getPan = function ( ) {
return this . panPosition ;
} ) ,
( t . SoundFile . prototype . rate = function ( t ) {
var e = ! 1 ;
if ( 'undefined' == typeof t ) return this . playbackRate ;
if (
( ( this . playbackRate = t ) ,
0 === t
? ( t = 1e-13 )
: 0 > t && ! this . reversed
? ( ( t = Math . abs ( t ) ) , ( e = ! 0 ) )
: t > 0 && this . reversed && ( e = ! 0 ) ,
this . bufferSourceNode )
) {
var i = p . audiocontext . currentTime ;
this . bufferSourceNode . playbackRate . cancelScheduledValues ( i ) ,
this . bufferSourceNode . playbackRate . linearRampToValueAtTime (
Math . abs ( t ) ,
i ,
) ,
this . _counterNode . playbackRate . cancelScheduledValues ( i ) ,
this . _counterNode . playbackRate . linearRampToValueAtTime (
Math . abs ( t ) ,
i ,
) ;
}
return e && this . reverseBuffer ( ) , this . playbackRate ;
} ) ,
( t . SoundFile . prototype . setPitch = function ( t ) {
var e = l ( t ) / l ( 60 ) ;
this . rate ( e ) ;
} ) ,
( t . SoundFile . prototype . getPlaybackRate = function ( ) {
return this . playbackRate ;
} ) ,
( t . SoundFile . prototype . duration = function ( ) {
return this . buffer ? this . buffer . duration : 0 ;
} ) ,
( t . SoundFile . prototype . currentTime = function ( ) {
return this . reversed
? Math . abs ( this . _lastPos - this . buffer . length ) /
h . sampleRate
: this . _lastPos / h . sampleRate ;
} ) ,
( t . SoundFile . prototype . jump = function ( t , e ) {
if ( 0 > t || t > this . buffer . duration )
throw 'jump time out of range' ;
if ( e > this . buffer . duration - t ) throw 'end time out of range' ;
var i = t || 0 ,
n = e || void 0 ;
this . isPlaying ( ) && this . stop ( 0 ) ,
this . play (
0 ,
this . playbackRate ,
this . output . gain . value ,
i ,
n ,
) ;
} ) ,
( t . SoundFile . prototype . channels = function ( ) {
return this . buffer . numberOfChannels ;
} ) ,
( t . SoundFile . prototype . sampleRate = function ( ) {
return this . buffer . sampleRate ;
} ) ,
( t . SoundFile . prototype . frames = function ( ) {
return this . buffer . length ;
} ) ,
( t . SoundFile . prototype . getPeaks = function ( t ) {
if ( ! this . buffer )
throw 'Cannot load peaks yet, buffer is not loaded' ;
if ( ( t || ( t = 5 * window . width ) , this . buffer ) ) {
for (
var e = this . buffer ,
i = e . length / t ,
n = ~ ~ ( i / 10 ) || 1 ,
o = e . numberOfChannels ,
r = new Float32Array ( Math . round ( t ) ) ,
s = 0 ;
o > s ;
s ++
)
for ( var a = e . getChannelData ( s ) , u = 0 ; t > u ; u ++ ) {
for (
var c = ~ ~ ( u * i ) , p = ~ ~ ( c + i ) , h = 0 , l = c ;
p > l ;
l += n
) {
var f = a [ l ] ;
f > h ? ( h = f ) : - f > h && ( h = f ) ;
}
( 0 === s || Math . abs ( h ) > r [ u ] ) && ( r [ u ] = h ) ;
}
return r ;
}
} ) ,
( t . SoundFile . prototype . reverseBuffer = function ( ) {
if ( ! this . buffer ) throw 'SoundFile is not done loading' ;
var t = this . _lastPos / h . sampleRate ,
e = this . getVolume ( ) ;
this . setVolume ( 0 , 0.001 ) ;
const i = this . buffer . numberOfChannels ;
for ( var n = 0 ; i > n ; n ++ )
this . buffer . getChannelData ( n ) . reverse ( ) ;
( this . reversed = ! this . reversed ) ,
t && this . jump ( this . duration ( ) - t ) ,
this . setVolume ( e , 0.001 ) ;
} ) ,
( t . SoundFile . prototype . onended = function ( t ) {
return ( this . _onended = t ) , this ;
} ) ,
( t . SoundFile . prototype . add = function ( ) { } ) ,
( t . SoundFile . prototype . dispose = function ( ) {
var t = p . audiocontext . currentTime ,
e = p . soundArray . indexOf ( this ) ;
if (
( p . soundArray . splice ( e , 1 ) ,
this . stop ( t ) ,
this . buffer && this . bufferSourceNode )
) {
for ( var i = 0 ; i < this . bufferSourceNodes . length - 1 ; i ++ )
if ( null !== this . bufferSourceNodes [ i ] ) {
this . bufferSourceNodes [ i ] . disconnect ( ) ;
try {
this . bufferSourceNodes [ i ] . stop ( t ) ;
} catch ( n ) {
console . warning (
'no buffer source node to dispose' ,
) ;
}
this . bufferSourceNodes [ i ] = null ;
}
if ( this . isPlaying ( ) ) {
try {
this . _counterNode . stop ( t ) ;
} catch ( n ) {
console . log ( n ) ;
}
this . _counterNode = null ;
}
}
this . output && ( this . output . disconnect ( ) , ( this . output = null ) ) ,
this . panner &&
( this . panner . disconnect ( ) , ( this . panner = null ) ) ;
} ) ,
( t . SoundFile . prototype . connect = function ( t ) {
t
? t . hasOwnProperty ( 'input' )
? this . panner . connect ( t . input )
: this . panner . connect ( t )
: this . panner . connect ( p . input ) ;
} ) ,
( t . SoundFile . prototype . disconnect = function ( ) {
this . panner && this . panner . disconnect ( ) ;
} ) ,
( t . SoundFile . prototype . getLevel = function ( ) {
console . warn (
'p5.SoundFile.getLevel has been removed from the library. Use p5.Amplitude instead' ,
) ;
} ) ,
( t . SoundFile . prototype . setPath = function ( e , i ) {
var n = t . prototype . _checkFileFormats ( e ) ;
( this . url = n ) , this . load ( i ) ;
} ) ,
( t . SoundFile . prototype . setBuffer = function ( t ) {
var e = t . length ,
i = t [ 0 ] . length ,
n = h . createBuffer ( e , i , h . sampleRate ) ;
t [ 0 ] instanceof Float32Array || ( t [ 0 ] = new Float32Array ( t [ 0 ] ) ) ;
for ( var o = 0 ; e > o ; o ++ ) {
var r = n . getChannelData ( o ) ;
r . set ( t [ o ] ) ;
}
( this . buffer = n ) , this . panner . inputChannels ( e ) ;
} ) ;
var f = function ( t ) {
const e = t . length ,
i = h . createBuffer ( 1 , t . length , h . sampleRate ) ,
n = i . getChannelData ( 0 ) ;
for ( var o = 0 ; e > o ; o ++ ) n [ o ] = o ;
return i ;
} ;
( t . SoundFile . prototype . _initCounterNode = function ( ) {
var e = this ,
i = h . currentTime ,
n = h . createBufferSource ( ) ;
return (
e . _scopeNode &&
( e . _scopeNode . disconnect ( ) ,
delete e . _scopeNode . onaudioprocess ,
delete e . _scopeNode ) ,
( e . _scopeNode = h . createScriptProcessor ( 256 , 1 , 1 ) ) ,
( n . buffer = f ( e . buffer ) ) ,
n . playbackRate . setValueAtTime ( e . playbackRate , i ) ,
n . connect ( e . _scopeNode ) ,
e . _scopeNode . connect ( t . soundOut . _silentNode ) ,
( e . _scopeNode . onaudioprocess = function ( t ) {
var i = t . inputBuffer . getChannelData ( 0 ) ;
( e . _lastPos = i [ i . length - 1 ] || 0 ) ,
e . _onTimeUpdate ( e . _lastPos ) ;
} ) ,
n
) ;
} ) ,
( t . SoundFile . prototype . _initSourceNode = function ( ) {
var t = h . createBufferSource ( ) ;
return (
( t . buffer = this . buffer ) ,
( t . playbackRate . value = this . playbackRate ) ,
t . connect ( this . output ) ,
t
) ;
} ) ,
( t . SoundFile . prototype . processPeaks = function ( t , n , o , r ) {
var u = this . buffer . length ,
c = this . buffer . sampleRate ,
p = this . buffer ,
h = [ ] ,
l = n || 0.9 ,
f = l ,
d = o || 0.22 ,
m = r || 200 ,
y = new window . OfflineAudioContext ( 1 , u , c ) ,
v = y . createBufferSource ( ) ;
v . buffer = p ;
var g = y . createBiquadFilter ( ) ;
( g . type = 'lowpass' ) ,
v . connect ( g ) ,
g . connect ( y . destination ) ,
v . start ( 0 ) ,
y . startRendering ( ) ,
( y . oncomplete = function ( n ) {
var o = n . renderedBuffer ,
r = o . getChannelData ( 0 ) ;
do ( h = e ( r , f ) ) , ( f -= 0.005 ) ;
while ( Object . keys ( h ) . length < m && f >= d ) ;
var u = i ( h ) ,
c = s ( u , o . sampleRate ) ,
p = c
. sort ( function ( t , e ) {
return e . count - t . count ;
} )
. splice ( 0 , 5 ) ;
this . tempo = p [ 0 ] . tempo ;
var l = 5 ,
y = a ( h , p [ 0 ] . tempo , o . sampleRate , l ) ;
t ( y ) ;
} ) ;
} ) ;
var d = function ( t , e ) {
( this . sampleIndex = e ) ,
( this . amplitude = t ) ,
( this . tempos = [ ] ) ,
( this . intervals = [ ] ) ;
} ,
m = function ( t , e , i , n ) {
( this . callback = t ) ,
( this . time = e ) ,
( this . id = i ) ,
( this . val = n ) ;
} ;
( t . SoundFile . prototype . addCue = function ( t , e , i ) {
var n = this . _cueIDCounter ++ ,
o = new m ( e , t , n , i ) ;
return this . _cues . push ( o ) , n ;
} ) ,
( t . SoundFile . prototype . removeCue = function ( t ) {
for ( var e = this . _cues . length , i = 0 ; e > i ; i ++ ) {
var n = this . _cues [ i ] ;
n . id === t && this . cues . splice ( i , 1 ) ;
}
0 === this . _cues . length ;
} ) ,
( t . SoundFile . prototype . clearCues = function ( ) {
this . _cues = [ ] ;
} ) ,
( t . SoundFile . prototype . _onTimeUpdate = function ( t ) {
for (
var e = t / this . buffer . sampleRate ,
i = this . _cues . length ,
n = 0 ;
i > n ;
n ++
) {
var o = this . _cues [ n ] ,
r = o . time ,
s = o . val ;
this . _prevTime < r && e >= r && o . callback ( s ) ;
}
this . _prevTime = e ;
} ) ;
} ) ( r , n , o ) ;
var u ;
u = ( function ( ) {
var e = n ;
( t . Amplitude = function ( t ) {
( this . bufferSize = 2048 ) ,
( this . audiocontext = e . audiocontext ) ,
( this . processor = this . audiocontext . createScriptProcessor (
this . bufferSize ,
2 ,
1 ,
) ) ,
( this . input = this . processor ) ,
( this . output = this . audiocontext . createGain ( ) ) ,
( this . smoothing = t || 0 ) ,
( this . volume = 0 ) ,
( this . average = 0 ) ,
( this . stereoVol = [ 0 , 0 ] ) ,
( this . stereoAvg = [ 0 , 0 ] ) ,
( this . stereoVolNorm = [ 0 , 0 ] ) ,
( this . volMax = 0.001 ) ,
( this . normalize = ! 1 ) ,
( this . processor . onaudioprocess = this . _audioProcess . bind ( this ) ) ,
this . processor . connect ( this . output ) ,
( this . output . gain . value = 0 ) ,
this . output . connect ( this . audiocontext . destination ) ,
e . meter . connect ( this . processor ) ,
e . soundArray . push ( this ) ;
} ) ,
( t . Amplitude . prototype . setInput = function ( i , n ) {
e . meter . disconnect ( ) ,
n && ( this . smoothing = n ) ,
null == i
? ( console . log (
'Amplitude input source is not ready! Connecting to master output instead' ,
) ,
e . meter . connect ( this . processor ) )
: i instanceof t . Signal
? i . output . connect ( this . processor )
: i
? ( i . connect ( this . processor ) ,
this . processor . disconnect ( ) ,
this . processor . connect ( this . output ) )
: e . meter . connect ( this . processor ) ;
} ) ,
( t . Amplitude . prototype . connect = function ( t ) {
t
? t . hasOwnProperty ( 'input' )
? this . output . connect ( t . input )
: this . output . connect ( t )
: this . output . connect ( this . panner . connect ( e . input ) ) ;
} ) ,
( t . Amplitude . prototype . disconnect = function ( ) {
this . output && this . output . disconnect ( ) ;
} ) ,
( t . Amplitude . prototype . _audioProcess = function ( t ) {
for ( var e = 0 ; e < t . inputBuffer . numberOfChannels ; e ++ ) {
for (
var i ,
n = t . inputBuffer . getChannelData ( e ) ,
o = n . length ,
r = 0 ,
s = 0 ,
a = 0 ;
o > a ;
a ++
)
( i = n [ a ] ) ,
this . normalize
? ( ( r += Math . max (
Math . min ( i / this . volMax , 1 ) ,
- 1 ,
) ) ,
( s +=
Math . max (
Math . min ( i / this . volMax , 1 ) ,
- 1 ,
) *
Math . max (
Math . min ( i / this . volMax , 1 ) ,
- 1 ,
) ) )
: ( ( r += i ) , ( s += i * i ) ) ;
var u = r / o ,
c = Math . sqrt ( s / o ) ;
( this . stereoVol [ e ] = Math . max (
c ,
this . stereoVol [ e ] * this . smoothing ,
) ) ,
( this . stereoAvg [ e ] = Math . max (
u ,
this . stereoVol [ e ] * this . smoothing ,
) ) ,
( this . volMax = Math . max (
this . stereoVol [ e ] ,
this . volMax ,
) ) ;
}
var p = this ,
h = this . stereoVol . reduce ( function ( t , e , i ) {
return (
( p . stereoVolNorm [ i - 1 ] = Math . max (
Math . min ( p . stereoVol [ i - 1 ] / p . volMax , 1 ) ,
0 ,
) ) ,
( p . stereoVolNorm [ i ] = Math . max (
Math . min ( p . stereoVol [ i ] / p . volMax , 1 ) ,
0 ,
) ) ,
t + e
) ;
} ) ;
( this . volume = h / this . stereoVol . length ) ,
( this . volNorm = Math . max (
Math . min ( this . volume / this . volMax , 1 ) ,
0 ,
) ) ;
} ) ,
( t . Amplitude . prototype . getLevel = function ( t ) {
return 'undefined' != typeof t
? this . normalize
? this . stereoVolNorm [ t ]
: this . stereoVol [ t ]
: this . normalize
? this . volNorm
: this . volume ;
} ) ,
( t . Amplitude . prototype . toggleNormalize = function ( t ) {
'boolean' == typeof t
? ( this . normalize = t )
: ( this . normalize = ! this . normalize ) ;
} ) ,
( t . Amplitude . prototype . smooth = function ( t ) {
t >= 0 && 1 > t
? ( this . smoothing = t )
: console . log ( 'Error: smoothing must be between 0 and 1' ) ;
} ) ,
( t . Amplitude . prototype . dispose = function ( ) {
var t = e . soundArray . indexOf ( this ) ;
e . soundArray . splice ( t , 1 ) ,
this . input && ( this . input . disconnect ( ) , delete this . input ) ,
this . output &&
( this . output . disconnect ( ) , delete this . output ) ,
delete this . processor ;
} ) ;
} ) ( n ) ;
var c ;
c = ( function ( ) {
var e = n ;
( t . FFT = function ( t , i ) {
( this . input = this . analyser = e . audiocontext . createAnalyser ( ) ) ,
Object . defineProperties ( this , {
bins : {
get : function ( ) {
return this . analyser . fftSize / 2 ;
} ,
set : function ( t ) {
this . analyser . fftSize = 2 * t ;
} ,
configurable : ! 0 ,
enumerable : ! 0 ,
} ,
smoothing : {
get : function ( ) {
return this . analyser . smoothingTimeConstant ;
} ,
set : function ( t ) {
this . analyser . smoothingTimeConstant = t ;
} ,
configurable : ! 0 ,
enumerable : ! 0 ,
} ,
} ) ,
this . smooth ( t ) ,
( this . bins = i || 1024 ) ,
e . fftMeter . connect ( this . analyser ) ,
( this . freqDomain = new Uint8Array (
this . analyser . frequencyBinCount ,
) ) ,
( this . timeDomain = new Uint8Array (
this . analyser . frequencyBinCount ,
) ) ,
( this . bass = [ 20 , 140 ] ) ,
( this . lowMid = [ 140 , 400 ] ) ,
( this . mid = [ 400 , 2600 ] ) ,
( this . highMid = [ 2600 , 5200 ] ) ,
( this . treble = [ 5200 , 14e3 ] ) ,
e . soundArray . push ( this ) ;
} ) ,
( t . FFT . prototype . setInput = function ( t ) {
t
? ( t . output
? t . output . connect ( this . analyser )
: t . connect && t . connect ( this . analyser ) ,
e . fftMeter . disconnect ( ) )
: e . fftMeter . connect ( this . analyser ) ;
} ) ,
( t . FFT . prototype . waveform = function ( ) {
for ( var e , i , n , o = 0 ; o < arguments . length ; o ++ )
'number' == typeof arguments [ o ] &&
( ( e = arguments [ o ] ) , ( this . analyser . fftSize = 2 * e ) ) ,
'string' == typeof arguments [ o ] && ( i = arguments [ o ] ) ;
if ( i && ! t . prototype . _isSafari ( ) )
return (
r ( this , this . timeDomain ) ,
this . analyser . getFloatTimeDomainData ( this . timeDomain ) ,
this . timeDomain
) ;
s ( this , this . timeDomain ) ,
this . analyser . getByteTimeDomainData ( this . timeDomain ) ;
for (
var n = new Array ( ) , a = 0 ;
a < this . timeDomain . length ;
a ++
) {
var u = t . prototype . map ( this . timeDomain [ a ] , 0 , 255 , - 1 , 1 ) ;
n . push ( u ) ;
}
return n ;
} ) ,
( t . FFT . prototype . analyze = function ( ) {
for ( var t , e = 0 ; e < arguments . length ; e ++ )
'number' == typeof arguments [ e ] &&
( ( this . bins = arguments [ e ] ) ,
( this . analyser . fftSize = 2 * this . bins ) ) ,
'string' == typeof arguments [ e ] && ( t = arguments [ e ] ) ;
if ( t && 'db' === t . toLowerCase ( ) )
return (
i ( this ) ,
this . analyser . getFloatFrequencyData ( this . freqDomain ) ,
this . freqDomain
) ;
o ( this , this . freqDomain ) ,
this . analyser . getByteFrequencyData ( this . freqDomain ) ;
var n = Array . apply ( [ ] , this . freqDomain ) ;
return (
n . length === this . analyser . fftSize ,
n . constructor === Array ,
n
) ;
} ) ,
( t . FFT . prototype . getEnergy = function ( t , i ) {
var n = e . audiocontext . sampleRate / 2 ;
if (
( 'bass' === t
? ( ( t = this . bass [ 0 ] ) , ( i = this . bass [ 1 ] ) )
: 'lowMid' === t
? ( ( t = this . lowMid [ 0 ] ) , ( i = this . lowMid [ 1 ] ) )
: 'mid' === t
? ( ( t = this . mid [ 0 ] ) , ( i = this . mid [ 1 ] ) )
: 'highMid' === t
? ( ( t = this . highMid [ 0 ] ) , ( i = this . highMid [ 1 ] ) )
: 'treble' === t &&
( ( t = this . treble [ 0 ] ) , ( i = this . treble [ 1 ] ) ) ,
'number' != typeof t )
)
throw 'invalid input for getEnergy()' ;
if ( i ) {
if ( t && i ) {
if ( t > i ) {
var o = i ;
( i = t ) , ( t = o ) ;
}
for (
var r = Math . round (
( t / n ) * this . freqDomain . length ,
) ,
s = Math . round (
( i / n ) * this . freqDomain . length ,
) ,
a = 0 ,
u = 0 ,
c = r ;
s >= c ;
c ++
)
( a += this . freqDomain [ c ] ) , ( u += 1 ) ;
var p = a / u ;
return p ;
}
throw 'invalid input for getEnergy()' ;
}
var h = Math . round ( ( t / n ) * this . freqDomain . length ) ;
return this . freqDomain [ h ] ;
} ) ,
( t . FFT . prototype . getFreq = function ( t , e ) {
console . log (
'getFreq() is deprecated. Please use getEnergy() instead.' ,
) ;
var i = this . getEnergy ( t , e ) ;
return i ;
} ) ,
( t . FFT . prototype . getCentroid = function ( ) {
for (
var t = e . audiocontext . sampleRate / 2 , i = 0 , n = 0 , o = 0 ;
o < this . freqDomain . length ;
o ++
)
( i += o * this . freqDomain [ o ] ) , ( n += this . freqDomain [ o ] ) ;
var r = 0 ;
0 !== n && ( r = i / n ) ;
var s = r * ( t / this . freqDomain . length ) ;
return s ;
} ) ,
( t . FFT . prototype . smooth = function ( t ) {
return (
'undefined' != typeof t && ( this . smoothing = t ) ,
this . smoothing
) ;
} ) ,
( t . FFT . prototype . dispose = function ( ) {
var t = e . soundArray . indexOf ( this ) ;
e . soundArray . splice ( t , 1 ) ,
this . analyser &&
( this . analyser . disconnect ( ) , delete this . analyser ) ;
} ) ,
( t . FFT . prototype . linAverages = function ( t ) {
for (
var t = t || 16 ,
e = this . freqDomain ,
i = e . length ,
n = Math . floor ( i / t ) ,
o = new Array ( t ) ,
r = 0 ,
s = 0 ;
i > s ;
s ++
)
( o [ r ] = void 0 !== o [ r ] ? ( o [ r ] + e [ s ] ) / 2 : e [ s ] ) ,
s % n === n - 1 && r ++ ;
return o ;
} ) ,
( t . FFT . prototype . logAverages = function ( t ) {
for (
var i = e . audiocontext . sampleRate / 2 ,
n = this . freqDomain ,
o = n . length ,
r = new Array ( t . length ) ,
s = 0 ,
a = 0 ;
o > a ;
a ++
) {
var u = Math . round ( ( a * i ) / this . freqDomain . length ) ;
u > t [ s ] . hi && s ++ ,
( r [ s ] = void 0 !== r [ s ] ? ( r [ s ] + n [ a ] ) / 2 : n [ a ] ) ;
}
return r ;
} ) ,
( t . FFT . prototype . getOctaveBands = function ( t , i ) {
var t = t || 3 ,
i = i || 15.625 ,
n = [ ] ,
o = {
lo : i / Math . pow ( 2 , 1 / ( 2 * t ) ) ,
ctr : i ,
hi : i * Math . pow ( 2 , 1 / ( 2 * t ) ) ,
} ;
n . push ( o ) ;
for ( var r = e . audiocontext . sampleRate / 2 ; o . hi < r ; ) {
var s = { } ;
( s . lo = o . hi ) ,
( s . ctr = o . ctr * Math . pow ( 2 , 1 / t ) ) ,
( s . hi = s . ctr * Math . pow ( 2 , 1 / ( 2 * t ) ) ) ,
n . push ( s ) ,
( o = s ) ;
}
return n ;
} ) ;
var i = function ( t ) {
t . freqDomain instanceof Float32Array == ! 1 &&
( t . freqDomain = new Float32Array (
t . analyser . frequencyBinCount ,
) ) ;
} ,
o = function ( t ) {
t . freqDomain instanceof Uint8Array == ! 1 &&
( t . freqDomain = new Uint8Array (
t . analyser . frequencyBinCount ,
) ) ;
} ,
r = function ( t ) {
t . timeDomain instanceof Float32Array == ! 1 &&
( t . timeDomain = new Float32Array (
t . analyser . frequencyBinCount ,
) ) ;
} ,
s = function ( t ) {
t . timeDomain instanceof Uint8Array == ! 1 &&
( t . timeDomain = new Uint8Array (
t . analyser . frequencyBinCount ,
) ) ;
} ;
} ) ( n ) ;
var p ;
p = ( function ( ) {
'use strict' ;
var t = function ( t , e ) {
this . isUndef ( t ) || 1 === t
? ( this . input = this . context . createGain ( ) )
: t > 1 && ( this . input = new Array ( t ) ) ,
this . isUndef ( e ) || 1 === e
? ( this . output = this . context . createGain ( ) )
: e > 1 && ( this . output = new Array ( t ) ) ;
} ;
( t . prototype . set = function ( e , i , n ) {
if ( this . isObject ( e ) ) n = i ;
else if ( this . isString ( e ) ) {
var o = { } ;
( o [ e ] = i ) , ( e = o ) ;
}
t : for ( var r in e ) {
i = e [ r ] ;
var s = this ;
if ( - 1 !== r . indexOf ( '.' ) ) {
for ( var a = r . split ( '.' ) , u = 0 ; u < a . length - 1 ; u ++ )
if ( ( ( s = s [ a [ u ] ] ) , s instanceof t ) ) {
a . splice ( 0 , u + 1 ) ;
var c = a . join ( '.' ) ;
s . set ( c , i ) ;
continue t ;
}
r = a [ a . length - 1 ] ;
}
var p = s [ r ] ;
this . isUndef ( p ) ||
( ( t . Signal && p instanceof t . Signal ) ||
( t . Param && p instanceof t . Param )
? p . value !== i &&
( this . isUndef ( n ) ? ( p . value = i ) : p . rampTo ( i , n ) )
: p instanceof AudioParam
? p . value !== i && ( p . value = i )
: p instanceof t
? p . set ( i )
: p !== i && ( s [ r ] = i ) ) ;
}
return this ;
} ) ,
( t . prototype . get = function ( e ) {
this . isUndef ( e )
? ( e = this . _collectDefaults ( this . constructor ) )
: this . isString ( e ) && ( e = [ e ] ) ;
for ( var i = { } , n = 0 ; n < e . length ; n ++ ) {
var o = e [ n ] ,
r = this ,
s = i ;
if ( - 1 !== o . indexOf ( '.' ) ) {
for (
var a = o . split ( '.' ) , u = 0 ;
u < a . length - 1 ;
u ++
) {
var c = a [ u ] ;
( s [ c ] = s [ c ] || { } ) , ( s = s [ c ] ) , ( r = r [ c ] ) ;
}
o = a [ a . length - 1 ] ;
}
var p = r [ o ] ;
this . isObject ( e [ o ] )
? ( s [ o ] = p . get ( ) )
: t . Signal && p instanceof t . Signal
? ( s [ o ] = p . value )
: t . Param && p instanceof t . Param
? ( s [ o ] = p . value )
: p instanceof AudioParam
? ( s [ o ] = p . value )
: p instanceof t
? ( s [ o ] = p . get ( ) )
: this . isFunction ( p ) || this . isUndef ( p ) || ( s [ o ] = p ) ;
}
return i ;
} ) ,
( t . prototype . _collectDefaults = function ( t ) {
var e = [ ] ;
if (
( this . isUndef ( t . defaults ) || ( e = Object . keys ( t . defaults ) ) ,
! this . isUndef ( t . _super ) )
)
for (
var i = this . _collectDefaults ( t . _super ) , n = 0 ;
n < i . length ;
n ++
)
- 1 === e . indexOf ( i [ n ] ) && e . push ( i [ n ] ) ;
return e ;
} ) ,
( t . prototype . toString = function ( ) {
for ( var e in t ) {
var i = e [ 0 ] . match ( /^[A-Z]$/ ) ,
n = t [ e ] === this . constructor ;
if ( this . isFunction ( t [ e ] ) && i && n ) return e ;
}
return 'Tone' ;
} ) ,
Object . defineProperty ( t . prototype , 'numberOfInputs' , {
get : function ( ) {
return this . input
? this . isArray ( this . input )
? this . input . length
: 1
: 0 ;
} ,
} ) ,
Object . defineProperty ( t . prototype , 'numberOfOutputs' , {
get : function ( ) {
return this . output
? this . isArray ( this . output )
? this . output . length
: 1
: 0 ;
} ,
} ) ,
( t . prototype . dispose = function ( ) {
return (
this . isUndef ( this . input ) ||
( this . input instanceof AudioNode &&
this . input . disconnect ( ) ,
( this . input = null ) ) ,
this . isUndef ( this . output ) ||
( this . output instanceof AudioNode &&
this . output . disconnect ( ) ,
( this . output = null ) ) ,
this
) ;
} ) ,
( t . prototype . connect = function ( t , e , i ) {
return (
Array . isArray ( this . output )
? ( ( e = this . defaultArg ( e , 0 ) ) ,
this . output [ e ] . connect ( t , 0 , i ) )
: this . output . connect ( t , e , i ) ,
this
) ;
} ) ,
( t . prototype . disconnect = function ( t , e , i ) {
this . isArray ( this . output )
? this . isNumber ( t )
? this . output [ t ] . disconnect ( )
: ( ( e = this . defaultArg ( e , 0 ) ) ,
this . output [ e ] . disconnect ( t , 0 , i ) )
: this . output . disconnect . apply ( this . output , arguments ) ;
} ) ,
( t . prototype . connectSeries = function ( ) {
if ( arguments . length > 1 )
for (
var t = arguments [ 0 ] , e = 1 ;
e < arguments . length ;
e ++
) {
var i = arguments [ e ] ;
t . connect ( i ) , ( t = i ) ;
}
return this ;
} ) ,
( t . prototype . chain = function ( ) {
if ( arguments . length > 0 )
for ( var t = this , e = 0 ; e < arguments . length ; e ++ ) {
var i = arguments [ e ] ;
t . connect ( i ) , ( t = i ) ;
}
return this ;
} ) ,
( t . prototype . fan = function ( ) {
if ( arguments . length > 0 )
for ( var t = 0 ; t < arguments . length ; t ++ )
this . connect ( arguments [ t ] ) ;
return this ;
} ) ,
( AudioNode . prototype . chain = t . prototype . chain ) ,
( AudioNode . prototype . fan = t . prototype . fan ) ,
( t . prototype . defaultArg = function ( t , e ) {
if ( this . isObject ( t ) && this . isObject ( e ) ) {
var i = { } ;
for ( var n in t ) i [ n ] = this . defaultArg ( e [ n ] , t [ n ] ) ;
for ( var o in e ) i [ o ] = this . defaultArg ( t [ o ] , e [ o ] ) ;
return i ;
}
return this . isUndef ( t ) ? e : t ;
} ) ,
( t . prototype . optionsObject = function ( t , e , i ) {
var n = { } ;
if ( 1 === t . length && this . isObject ( t [ 0 ] ) ) n = t [ 0 ] ;
else for ( var o = 0 ; o < e . length ; o ++ ) n [ e [ o ] ] = t [ o ] ;
return this . isUndef ( i ) ? n : this . defaultArg ( n , i ) ;
} ) ,
( t . prototype . isUndef = function ( t ) {
return 'undefined' == typeof t ;
} ) ,
( t . prototype . isFunction = function ( t ) {
return 'function' == typeof t ;
} ) ,
( t . prototype . isNumber = function ( t ) {
return 'number' == typeof t ;
} ) ,
( t . prototype . isObject = function ( t ) {
return (
'[object Object]' === Object . prototype . toString . call ( t ) &&
t . constructor === Object
) ;
} ) ,
( t . prototype . isBoolean = function ( t ) {
return 'boolean' == typeof t ;
} ) ,
( t . prototype . isArray = function ( t ) {
return Array . isArray ( t ) ;
} ) ,
( t . prototype . isString = function ( t ) {
return 'string' == typeof t ;
} ) ,
( t . noOp = function ( ) { } ) ,
( t . prototype . _readOnly = function ( t ) {
if ( Array . isArray ( t ) )
for ( var e = 0 ; e < t . length ; e ++ ) this . _readOnly ( t [ e ] ) ;
else
Object . defineProperty ( this , t , {
writable : ! 1 ,
enumerable : ! 0 ,
} ) ;
} ) ,
( t . prototype . _writable = function ( t ) {
if ( Array . isArray ( t ) )
for ( var e = 0 ; e < t . length ; e ++ ) this . _writable ( t [ e ] ) ;
else Object . defineProperty ( this , t , { writable : ! 0 } ) ;
} ) ,
( t . State = {
Started : 'started' ,
Stopped : 'stopped' ,
Paused : 'paused' ,
} ) ,
( t . prototype . equalPowerScale = function ( t ) {
var e = 0.5 * Math . PI ;
return Math . sin ( t * e ) ;
} ) ,
( t . prototype . dbToGain = function ( t ) {
return Math . pow ( 2 , t / 6 ) ;
} ) ,
( t . prototype . gainToDb = function ( t ) {
return 20 * ( Math . log ( t ) / Math . LN10 ) ;
} ) ,
( t . prototype . intervalToFrequencyRatio = function ( t ) {
return Math . pow ( 2 , t / 12 ) ;
} ) ,
( t . prototype . now = function ( ) {
return t . context . now ( ) ;
} ) ,
( t . now = function ( ) {
return t . context . now ( ) ;
} ) ,
( t . extend = function ( e , i ) {
function n ( ) { }
t . prototype . isUndef ( i ) && ( i = t ) ,
( n . prototype = i . prototype ) ,
( e . prototype = new n ( ) ) ,
( e . prototype . constructor = e ) ,
( e . _super = i ) ;
} ) ;
var e ;
return (
Object . defineProperty ( t , 'context' , {
get : function ( ) {
return e ;
} ,
set : function ( i ) {
( e =
t . Context && i instanceof t . Context
? i
: new t . Context ( i ) ) ,
t . Context && t . Context . emit ( 'init' , e ) ;
} ,
} ) ,
Object . defineProperty ( t . prototype , 'context' , {
get : function ( ) {
return t . context ;
} ,
} ) ,
( t . setContext = function ( e ) {
t . context = e ;
} ) ,
Object . defineProperty ( t . prototype , 'blockTime' , {
get : function ( ) {
return 128 / this . context . sampleRate ;
} ,
} ) ,
Object . defineProperty ( t . prototype , 'sampleTime' , {
get : function ( ) {
return 1 / this . context . sampleRate ;
} ,
} ) ,
Object . defineProperty ( t , 'supported' , {
get : function ( ) {
var t =
window . hasOwnProperty ( 'AudioContext' ) ||
window . hasOwnProperty ( 'webkitAudioContext' ) ,
e = window . hasOwnProperty ( 'Promise' ) ,
i = window . hasOwnProperty ( 'Worker' ) ;
return t && e && i ;
} ,
} ) ,
( t . version = 'r10' ) ,
! window . TONE _SILENCE _VERSION _LOGGING ,
t
) ;
} ) ( ) ;
var h ;
h = ( function ( t ) {
'use strict' ;
return (
( t . SignalBase = function ( ) { } ) ,
t . extend ( t . SignalBase ) ,
( t . SignalBase . prototype . connect = function ( e , i , n ) {
return (
( t . Signal && t . Signal === e . constructor ) ||
( t . Param && t . Param === e . constructor ) ||
( t . TimelineSignal && t . TimelineSignal === e . constructor )
? ( e . _param . cancelScheduledValues ( 0 ) ,
( e . _param . value = 0 ) ,
( e . overridden = ! 0 ) )
: e instanceof AudioParam &&
( e . cancelScheduledValues ( 0 ) , ( e . value = 0 ) ) ,
t . prototype . connect . call ( this , e , i , n ) ,
this
) ;
} ) ,
t . SignalBase
) ;
} ) ( p ) ;
var l ;
l = ( function ( t ) {
'use strict' ;
return (
( t . WaveShaper = function ( t , e ) {
( this . _shaper =
this . input =
this . output =
this . context . createWaveShaper ( ) ) ,
( this . _curve = null ) ,
Array . isArray ( t )
? ( this . curve = t )
: isFinite ( t ) || this . isUndef ( t )
? ( this . _curve = new Float32Array (
this . defaultArg ( t , 1024 ) ,
) )
: this . isFunction ( t ) &&
( ( this . _curve = new Float32Array (
this . defaultArg ( e , 1024 ) ,
) ) ,
this . setMap ( t ) ) ;
} ) ,
t . extend ( t . WaveShaper , t . SignalBase ) ,
( t . WaveShaper . prototype . setMap = function ( t ) {
for ( var e = 0 , i = this . _curve . length ; i > e ; e ++ ) {
var n = ( e / ( i - 1 ) ) * 2 - 1 ;
this . _curve [ e ] = t ( n , e ) ;
}
return ( this . _shaper . curve = this . _curve ) , this ;
} ) ,
Object . defineProperty ( t . WaveShaper . prototype , 'curve' , {
get : function ( ) {
return this . _shaper . curve ;
} ,
set : function ( t ) {
( this . _curve = new Float32Array ( t ) ) ,
( this . _shaper . curve = this . _curve ) ;
} ,
} ) ,
Object . defineProperty ( t . WaveShaper . prototype , 'oversample' , {
get : function ( ) {
return this . _shaper . oversample ;
} ,
set : function ( t ) {
if ( - 1 === [ 'none' , '2x' , '4x' ] . indexOf ( t ) )
throw new RangeError (
"Tone.WaveShaper: oversampling must be either 'none', '2x', or '4x'" ,
) ;
this . _shaper . oversample = t ;
} ,
} ) ,
( t . WaveShaper . prototype . dispose = function ( ) {
return (
t . prototype . dispose . call ( this ) ,
this . _shaper . disconnect ( ) ,
( this . _shaper = null ) ,
( this . _curve = null ) ,
this
) ;
} ) ,
t . WaveShaper
) ;
} ) ( p ) ;
var f ;
f = ( function ( t ) {
return (
( t . TimeBase = function ( e , i ) {
if ( ! ( this instanceof t . TimeBase ) ) return new t . TimeBase ( e , i ) ;
if ( ( ( this . _expr = this . _noOp ) , e instanceof t . TimeBase ) )
this . copy ( e ) ;
else if ( ! this . isUndef ( i ) || this . isNumber ( e ) ) {
i = this . defaultArg ( i , this . _defaultUnits ) ;
var n = this . _primaryExpressions [ i ] . method ;
this . _expr = n . bind ( this , e ) ;
} else
this . isString ( e )
? this . set ( e )
: this . isUndef ( e ) && ( this . _expr = this . _defaultExpr ( ) ) ;
} ) ,
t . extend ( t . TimeBase ) ,
( t . TimeBase . prototype . set = function ( t ) {
return ( this . _expr = this . _parseExprString ( t ) ) , this ;
} ) ,
( t . TimeBase . prototype . clone = function ( ) {
var t = new this . constructor ( ) ;
return t . copy ( this ) , t ;
} ) ,
( t . TimeBase . prototype . copy = function ( t ) {
var e = t . _expr ( ) ;
return this . set ( e ) ;
} ) ,
( t . TimeBase . prototype . _primaryExpressions = {
n : {
regexp : /^(\d+)n/i ,
method : function ( t ) {
return (
( t = parseInt ( t ) ) ,
1 === t
? this . _beatsToUnits ( this . _timeSignature ( ) )
: this . _beatsToUnits ( 4 / t )
) ;
} ,
} ,
t : {
regexp : /^(\d+)t/i ,
method : function ( t ) {
return (
( t = parseInt ( t ) ) ,
this . _beatsToUnits ( 8 / ( 3 * parseInt ( t ) ) )
) ;
} ,
} ,
m : {
regexp : /^(\d+)m/i ,
method : function ( t ) {
return this . _beatsToUnits (
parseInt ( t ) * this . _timeSignature ( ) ,
) ;
} ,
} ,
i : {
regexp : /^(\d+)i/i ,
method : function ( t ) {
return this . _ticksToUnits ( parseInt ( t ) ) ;
} ,
} ,
hz : {
regexp : /^(\d+(?:\.\d+)?)hz/i ,
method : function ( t ) {
return this . _frequencyToUnits ( parseFloat ( t ) ) ;
} ,
} ,
tr : {
regexp : /^(\d+(?:\.\d+)?):(\d+(?:\.\d+)?):?(\d+(?:\.\d+)?)?/ ,
method : function ( t , e , i ) {
var n = 0 ;
return (
t &&
'0' !== t &&
( n += this . _beatsToUnits (
this . _timeSignature ( ) * parseFloat ( t ) ,
) ) ,
e &&
'0' !== e &&
( n += this . _beatsToUnits ( parseFloat ( e ) ) ) ,
i &&
'0' !== i &&
( n += this . _beatsToUnits ( parseFloat ( i ) / 4 ) ) ,
n
) ;
} ,
} ,
s : {
regexp : /^(\d+(?:\.\d+)?s)/ ,
method : function ( t ) {
return this . _secondsToUnits ( parseFloat ( t ) ) ;
} ,
} ,
samples : {
regexp : /^(\d+)samples/ ,
method : function ( t ) {
return parseInt ( t ) / this . context . sampleRate ;
} ,
} ,
default : {
regexp : /^(\d+(?:\.\d+)?)/ ,
method : function ( t ) {
return this . _primaryExpressions [
this . _defaultUnits
] . method . call ( this , t ) ;
} ,
} ,
} ) ,
( t . TimeBase . prototype . _binaryExpressions = {
'+' : {
regexp : /^\+/ ,
precedence : 2 ,
method : function ( t , e ) {
return t ( ) + e ( ) ;
} ,
} ,
'-' : {
regexp : /^\-/ ,
precedence : 2 ,
method : function ( t , e ) {
return t ( ) - e ( ) ;
} ,
} ,
'*' : {
regexp : /^\*/ ,
precedence : 1 ,
method : function ( t , e ) {
return t ( ) * e ( ) ;
} ,
} ,
'/' : {
regexp : /^\// ,
precedence : 1 ,
method : function ( t , e ) {
return t ( ) / e ( ) ;
} ,
} ,
} ) ,
( t . TimeBase . prototype . _unaryExpressions = {
neg : {
regexp : /^\-/ ,
method : function ( t ) {
return - t ( ) ;
} ,
} ,
} ) ,
( t . TimeBase . prototype . _syntaxGlue = {
'(' : { regexp : /^\(/ } ,
')' : { regexp : /^\)/ } ,
} ) ,
( t . TimeBase . prototype . _tokenize = function ( t ) {
function e ( t , e ) {
for (
var i = [
'_binaryExpressions' ,
'_unaryExpressions' ,
'_primaryExpressions' ,
'_syntaxGlue' ,
] ,
n = 0 ;
n < i . length ;
n ++
) {
var o = e [ i [ n ] ] ;
for ( var r in o ) {
var s = o [ r ] ,
a = s . regexp ,
u = t . match ( a ) ;
if ( null !== u )
return {
method : s . method ,
precedence : s . precedence ,
regexp : s . regexp ,
value : u [ 0 ] ,
} ;
}
}
throw new SyntaxError (
'Tone.TimeBase: Unexpected token ' + t ,
) ;
}
for ( var i = - 1 , n = [ ] ; t . length > 0 ; ) {
t = t . trim ( ) ;
var o = e ( t , this ) ;
n . push ( o ) , ( t = t . substr ( o . value . length ) ) ;
}
return {
next : function ( ) {
return n [ ++ i ] ;
} ,
peek : function ( ) {
return n [ i + 1 ] ;
} ,
} ;
} ) ,
( t . TimeBase . prototype . _matchGroup = function ( t , e , i ) {
var n = ! 1 ;
if ( ! this . isUndef ( t ) )
for ( var o in e ) {
var r = e [ o ] ;
if ( r . regexp . test ( t . value ) ) {
if ( this . isUndef ( i ) ) return r ;
if ( r . precedence === i ) return r ;
}
}
return n ;
} ) ,
( t . TimeBase . prototype . _parseBinary = function ( t , e ) {
this . isUndef ( e ) && ( e = 2 ) ;
var i ;
i = 0 > e ? this . _parseUnary ( t ) : this . _parseBinary ( t , e - 1 ) ;
for (
var n = t . peek ( ) ;
n && this . _matchGroup ( n , this . _binaryExpressions , e ) ;
)
( n = t . next ( ) ) ,
( i = n . method . bind (
this ,
i ,
this . _parseBinary ( t , e - 1 ) ,
) ) ,
( n = t . peek ( ) ) ;
return i ;
} ) ,
( t . TimeBase . prototype . _parseUnary = function ( t ) {
var e , i ;
e = t . peek ( ) ;
var n = this . _matchGroup ( e , this . _unaryExpressions ) ;
return n
? ( ( e = t . next ( ) ) ,
( i = this . _parseUnary ( t ) ) ,
n . method . bind ( this , i ) )
: this . _parsePrimary ( t ) ;
} ) ,
( t . TimeBase . prototype . _parsePrimary = function ( t ) {
var e , i ;
if ( ( ( e = t . peek ( ) ) , this . isUndef ( e ) ) )
throw new SyntaxError (
'Tone.TimeBase: Unexpected end of expression' ,
) ;
if ( this . _matchGroup ( e , this . _primaryExpressions ) ) {
e = t . next ( ) ;
var n = e . value . match ( e . regexp ) ;
return e . method . bind ( this , n [ 1 ] , n [ 2 ] , n [ 3 ] ) ;
}
if ( e && '(' === e . value ) {
if (
( t . next ( ) ,
( i = this . _parseBinary ( t ) ) ,
( e = t . next ( ) ) ,
! e || ')' !== e . value )
)
throw new SyntaxError ( 'Expected )' ) ;
return i ;
}
throw new SyntaxError (
'Tone.TimeBase: Cannot process token ' + e . value ,
) ;
} ) ,
( t . TimeBase . prototype . _parseExprString = function ( t ) {
this . isString ( t ) || ( t = t . toString ( ) ) ;
var e = this . _tokenize ( t ) ,
i = this . _parseBinary ( e ) ;
return i ;
} ) ,
( t . TimeBase . prototype . _noOp = function ( ) {
return 0 ;
} ) ,
( t . TimeBase . prototype . _defaultExpr = function ( ) {
return this . _noOp ;
} ) ,
( t . TimeBase . prototype . _defaultUnits = 's' ) ,
( t . TimeBase . prototype . _frequencyToUnits = function ( t ) {
return 1 / t ;
} ) ,
( t . TimeBase . prototype . _beatsToUnits = function ( e ) {
return ( 60 / t . Transport . bpm . value ) * e ;
} ) ,
( t . TimeBase . prototype . _secondsToUnits = function ( t ) {
return t ;
} ) ,
( t . TimeBase . prototype . _ticksToUnits = function ( e ) {
return e * ( this . _beatsToUnits ( 1 ) / t . Transport . PPQ ) ;
} ) ,
( t . TimeBase . prototype . _timeSignature = function ( ) {
return t . Transport . timeSignature ;
} ) ,
( t . TimeBase . prototype . _pushExpr = function ( e , i , n ) {
return (
e instanceof t . TimeBase || ( e = new this . constructor ( e , n ) ) ,
( this . _expr = this . _binaryExpressions [ i ] . method . bind (
this ,
this . _expr ,
e . _expr ,
) ) ,
this
) ;
} ) ,
( t . TimeBase . prototype . add = function ( t , e ) {
return this . _pushExpr ( t , '+' , e ) ;
} ) ,
( t . TimeBase . prototype . sub = function ( t , e ) {
return this . _pushExpr ( t , '-' , e ) ;
} ) ,
( t . TimeBase . prototype . mult = function ( t , e ) {
return this . _pushExpr ( t , '*' , e ) ;
} ) ,
( t . TimeBase . prototype . div = function ( t , e ) {
return this . _pushExpr ( t , '/' , e ) ;
} ) ,
( t . TimeBase . prototype . valueOf = function ( ) {
return this . _expr ( ) ;
} ) ,
( t . TimeBase . prototype . dispose = function ( ) {
this . _expr = null ;
} ) ,
t . TimeBase
) ;
} ) ( p ) ;
var d ;
d = ( function ( t ) {
return (
( t . Time = function ( e , i ) {
return this instanceof t . Time
? ( ( this . _plusNow = ! 1 ) , void t . TimeBase . call ( this , e , i ) )
: new t . Time ( e , i ) ;
} ) ,
t . extend ( t . Time , t . TimeBase ) ,
( t . Time . prototype . _unaryExpressions = Object . create (
t . TimeBase . prototype . _unaryExpressions ,
) ) ,
( t . Time . prototype . _unaryExpressions . quantize = {
regexp : /^@/ ,
method : function ( e ) {
return t . Transport . nextSubdivision ( e ( ) ) ;
} ,
} ) ,
( t . Time . prototype . _unaryExpressions . now = {
regexp : /^\+/ ,
method : function ( t ) {
return ( this . _plusNow = ! 0 ) , t ( ) ;
} ,
} ) ,
( t . Time . prototype . quantize = function ( t , e ) {
return (
( e = this . defaultArg ( e , 1 ) ) ,
( this . _expr = function ( t , e , i ) {
( t = t ( ) ) , ( e = e . toSeconds ( ) ) ;
var n = Math . round ( t / e ) ,
o = n * e ,
r = o - t ;
return t + r * i ;
} . bind ( this , this . _expr , new this . constructor ( t ) , e ) ) ,
this
) ;
} ) ,
( t . Time . prototype . addNow = function ( ) {
return ( this . _plusNow = ! 0 ) , this ;
} ) ,
( t . Time . prototype . _defaultExpr = function ( ) {
return ( this . _plusNow = ! 0 ) , this . _noOp ;
} ) ,
( t . Time . prototype . copy = function ( e ) {
return (
t . TimeBase . prototype . copy . call ( this , e ) ,
( this . _plusNow = e . _plusNow ) ,
this
) ;
} ) ,
( t . Time . prototype . toNotation = function ( ) {
var t = this . toSeconds ( ) ,
e = [ '1m' , '2n' , '4n' , '8n' , '16n' , '32n' , '64n' , '128n' ] ,
i = this . _toNotationHelper ( t , e ) ,
n = [
'1m' ,
'2n' ,
'2t' ,
'4n' ,
'4t' ,
'8n' ,
'8t' ,
'16n' ,
'16t' ,
'32n' ,
'32t' ,
'64n' ,
'64t' ,
'128n' ,
] ,
o = this . _toNotationHelper ( t , n ) ;
return o . split ( '+' ) . length < i . split ( '+' ) . length ? o : i ;
} ) ,
( t . Time . prototype . _toNotationHelper = function ( t , e ) {
for (
var i = this . _notationToUnits ( e [ e . length - 1 ] ) ,
n = '' ,
o = 0 ;
o < e . length ;
o ++
) {
var r = this . _notationToUnits ( e [ o ] ) ,
s = t / r ,
a = 1e-6 ;
if (
( a > 1 - ( s % 1 ) && ( s += a ) ,
( s = Math . floor ( s ) ) ,
s > 0 )
) {
if (
( ( n += 1 === s ? e [ o ] : s . toString ( ) + '*' + e [ o ] ) ,
( t -= s * r ) ,
i > t )
)
break ;
n += ' + ' ;
}
}
return '' === n && ( n = '0' ) , n ;
} ) ,
( t . Time . prototype . _notationToUnits = function ( t ) {
for (
var e = this . _primaryExpressions ,
i = [ e . n , e . t , e . m ] ,
n = 0 ;
n < i . length ;
n ++
) {
var o = i [ n ] ,
r = t . match ( o . regexp ) ;
if ( r ) return o . method . call ( this , r [ 1 ] ) ;
}
} ) ,
( t . Time . prototype . toBarsBeatsSixteenths = function ( ) {
var t = this . _beatsToUnits ( 1 ) ,
e = this . toSeconds ( ) / t ,
i = Math . floor ( e / this . _timeSignature ( ) ) ,
n = ( e % 1 ) * 4 ;
( e = Math . floor ( e ) % this . _timeSignature ( ) ) ,
( n = n . toString ( ) ) ,
n . length > 3 && ( n = parseFloat ( n ) . toFixed ( 3 ) ) ;
var o = [ i , e , n ] ;
return o . join ( ':' ) ;
} ) ,
( t . Time . prototype . toTicks = function ( ) {
var e = this . _beatsToUnits ( 1 ) ,
i = this . valueOf ( ) / e ;
return Math . floor ( i * t . Transport . PPQ ) ;
} ) ,
( t . Time . prototype . toSamples = function ( ) {
return this . toSeconds ( ) * this . context . sampleRate ;
} ) ,
( t . Time . prototype . toFrequency = function ( ) {
return 1 / this . toSeconds ( ) ;
} ) ,
( t . Time . prototype . toSeconds = function ( ) {
return this . valueOf ( ) ;
} ) ,
( t . Time . prototype . toMilliseconds = function ( ) {
return 1e3 * this . toSeconds ( ) ;
} ) ,
( t . Time . prototype . valueOf = function ( ) {
var t = this . _expr ( ) ;
return t + ( this . _plusNow ? this . now ( ) : 0 ) ;
} ) ,
t . Time
) ;
} ) ( p ) ;
var m ;
m = ( function ( t ) {
( t . Frequency = function ( e , i ) {
return this instanceof t . Frequency
? void t . TimeBase . call ( this , e , i )
: new t . Frequency ( e , i ) ;
} ) ,
t . extend ( t . Frequency , t . TimeBase ) ,
( t . Frequency . prototype . _primaryExpressions = Object . create (
t . TimeBase . prototype . _primaryExpressions ,
) ) ,
( t . Frequency . prototype . _primaryExpressions . midi = {
regexp : /^(\d+(?:\.\d+)?midi)/ ,
method : function ( t ) {
return this . midiToFrequency ( t ) ;
} ,
} ) ,
( t . Frequency . prototype . _primaryExpressions . note = {
regexp : /^([a-g]{1}(?:b|#|x|bb)?)(-?[0-9]+)/i ,
method : function ( t , i ) {
var n = e [ t . toLowerCase ( ) ] ,
o = n + 12 * ( parseInt ( i ) + 1 ) ;
return this . midiToFrequency ( o ) ;
} ,
} ) ,
( t . Frequency . prototype . _primaryExpressions . tr = {
regexp : /^(\d+(?:\.\d+)?):(\d+(?:\.\d+)?):?(\d+(?:\.\d+)?)?/ ,
method : function ( t , e , i ) {
var n = 1 ;
return (
t &&
'0' !== t &&
( n *= this . _beatsToUnits (
this . _timeSignature ( ) * parseFloat ( t ) ,
) ) ,
e &&
'0' !== e &&
( n *= this . _beatsToUnits ( parseFloat ( e ) ) ) ,
i &&
'0' !== i &&
( n *= this . _beatsToUnits ( parseFloat ( i ) / 4 ) ) ,
n
) ;
} ,
} ) ,
( t . Frequency . prototype . transpose = function ( t ) {
return (
( this . _expr = function ( t , e ) {
var i = t ( ) ;
return i * this . intervalToFrequencyRatio ( e ) ;
} . bind ( this , this . _expr , t ) ) ,
this
) ;
} ) ,
( t . Frequency . prototype . harmonize = function ( t ) {
return (
( this . _expr = function ( t , e ) {
for ( var i = t ( ) , n = [ ] , o = 0 ; o < e . length ; o ++ )
n [ o ] = i * this . intervalToFrequencyRatio ( e [ o ] ) ;
return n ;
} . bind ( this , this . _expr , t ) ) ,
this
) ;
} ) ,
( t . Frequency . prototype . toMidi = function ( ) {
return this . frequencyToMidi ( this . valueOf ( ) ) ;
} ) ,
( t . Frequency . prototype . toNote = function ( ) {
var e = this . valueOf ( ) ,
n = Math . log ( e / t . Frequency . A4 ) / Math . LN2 ,
o = Math . round ( 12 * n ) + 57 ,
r = Math . floor ( o / 12 ) ;
0 > r && ( o += - 12 * r ) ;
var s = i [ o % 12 ] ;
return s + r . toString ( ) ;
} ) ,
( t . Frequency . prototype . toSeconds = function ( ) {
return 1 / this . valueOf ( ) ;
} ) ,
( t . Frequency . prototype . toFrequency = function ( ) {
return this . valueOf ( ) ;
} ) ,
( t . Frequency . prototype . toTicks = function ( ) {
var e = this . _beatsToUnits ( 1 ) ,
i = this . valueOf ( ) / e ;
return Math . floor ( i * t . Transport . PPQ ) ;
} ) ,
( t . Frequency . prototype . _frequencyToUnits = function ( t ) {
return t ;
} ) ,
( t . Frequency . prototype . _ticksToUnits = function ( e ) {
return (
1 / ( ( 60 * e ) / ( t . Transport . bpm . value * t . Transport . PPQ ) )
) ;
} ) ,
( t . Frequency . prototype . _beatsToUnits = function ( e ) {
return 1 / t . TimeBase . prototype . _beatsToUnits . call ( this , e ) ;
} ) ,
( t . Frequency . prototype . _secondsToUnits = function ( t ) {
return 1 / t ;
} ) ,
( t . Frequency . prototype . _defaultUnits = 'hz' ) ;
var e = {
cbb : - 2 ,
cb : - 1 ,
c : 0 ,
'c#' : 1 ,
cx : 2 ,
dbb : 0 ,
db : 1 ,
d : 2 ,
'd#' : 3 ,
dx : 4 ,
ebb : 2 ,
eb : 3 ,
e : 4 ,
'e#' : 5 ,
ex : 6 ,
fbb : 3 ,
fb : 4 ,
f : 5 ,
'f#' : 6 ,
fx : 7 ,
gbb : 5 ,
gb : 6 ,
g : 7 ,
'g#' : 8 ,
gx : 9 ,
abb : 7 ,
ab : 8 ,
a : 9 ,
'a#' : 10 ,
ax : 11 ,
bbb : 9 ,
bb : 10 ,
b : 11 ,
'b#' : 12 ,
bx : 13 ,
} ,
i = [
'C' ,
'C#' ,
'D' ,
'D#' ,
'E' ,
'F' ,
'F#' ,
'G' ,
'G#' ,
'A' ,
'A#' ,
'B' ,
] ;
return (
( t . Frequency . A4 = 440 ) ,
( t . Frequency . prototype . midiToFrequency = function ( e ) {
return t . Frequency . A4 * Math . pow ( 2 , ( e - 69 ) / 12 ) ;
} ) ,
( t . Frequency . prototype . frequencyToMidi = function ( e ) {
return 69 + ( 12 * Math . log ( e / t . Frequency . A4 ) ) / Math . LN2 ;
} ) ,
t . Frequency
) ;
} ) ( p ) ;
var y ;
y = ( function ( t ) {
return (
( t . TransportTime = function ( e , i ) {
return this instanceof t . TransportTime
? void t . Time . call ( this , e , i )
: new t . TransportTime ( e , i ) ;
} ) ,
t . extend ( t . TransportTime , t . Time ) ,
( t . TransportTime . prototype . _unaryExpressions = Object . create (
t . Time . prototype . _unaryExpressions ,
) ) ,
( t . TransportTime . prototype . _unaryExpressions . quantize = {
regexp : /^@/ ,
method : function ( e ) {
var i = this . _secondsToTicks ( e ( ) ) ,
n = Math . ceil ( t . Transport . ticks / i ) ;
return this . _ticksToUnits ( n * i ) ;
} ,
} ) ,
( t . TransportTime . prototype . _secondsToTicks = function ( e ) {
var i = this . _beatsToUnits ( 1 ) ,
n = e / i ;
return Math . round ( n * t . Transport . PPQ ) ;
} ) ,
( t . TransportTime . prototype . valueOf = function ( ) {
var e = this . _secondsToTicks ( this . _expr ( ) ) ;
return e + ( this . _plusNow ? t . Transport . ticks : 0 ) ;
} ) ,
( t . TransportTime . prototype . toTicks = function ( ) {
return this . valueOf ( ) ;
} ) ,
( t . TransportTime . prototype . toSeconds = function ( ) {
var e = this . _expr ( ) ;
return e + ( this . _plusNow ? t . Transport . seconds : 0 ) ;
} ) ,
( t . TransportTime . prototype . toFrequency = function ( ) {
return 1 / this . toSeconds ( ) ;
} ) ,
t . TransportTime
) ;
} ) ( p ) ;
var v ;
v = ( function ( t ) {
'use strict' ;
return (
( t . Emitter = function ( ) {
this . _events = { } ;
} ) ,
t . extend ( t . Emitter ) ,
( t . Emitter . prototype . on = function ( t , e ) {
for ( var i = t . split ( /\W+/ ) , n = 0 ; n < i . length ; n ++ ) {
var o = i [ n ] ;
this . _events . hasOwnProperty ( o ) || ( this . _events [ o ] = [ ] ) ,
this . _events [ o ] . push ( e ) ;
}
return this ;
} ) ,
( t . Emitter . prototype . off = function ( e , i ) {
for ( var n = e . split ( /\W+/ ) , o = 0 ; o < n . length ; o ++ )
if ( ( ( e = n [ o ] ) , this . _events . hasOwnProperty ( e ) ) )
if ( t . prototype . isUndef ( i ) ) this . _events [ e ] = [ ] ;
else
for (
var r = this . _events [ e ] , s = 0 ;
s < r . length ;
s ++
)
r [ s ] === i && r . splice ( s , 1 ) ;
return this ;
} ) ,
( t . Emitter . prototype . emit = function ( t ) {
if ( this . _events ) {
var e = Array . apply ( null , arguments ) . slice ( 1 ) ;
if ( this . _events . hasOwnProperty ( t ) )
for (
var i = this . _events [ t ] , n = 0 , o = i . length ;
o > n ;
n ++
)
i [ n ] . apply ( this , e ) ;
}
return this ;
} ) ,
( t . Emitter . mixin = function ( e ) {
var i = [ 'on' , 'off' , 'emit' ] ;
e . _events = { } ;
for ( var n = 0 ; n < i . length ; n ++ ) {
var o = i [ n ] ,
r = t . Emitter . prototype [ o ] ;
e [ o ] = r ;
}
} ) ,
( t . Emitter . prototype . dispose = function ( ) {
return (
t . prototype . dispose . call ( this ) , ( this . _events = null ) , this
) ;
} ) ,
t . Emitter
) ;
} ) ( p ) ;
var g ;
g = ( function ( t ) {
function e ( ) {
function e ( e , i , o ) {
if ( e . input )
Array . isArray ( e . input )
? ( t . prototype . isUndef ( o ) && ( o = 0 ) ,
this . connect ( e . input [ o ] ) )
: this . connect ( e . input , i , o ) ;
else
try {
e instanceof AudioNode
? n . call ( this , e , i , o )
: n . call ( this , e , i ) ;
} catch ( r ) {
throw new Error (
'error connecting to node: ' + e + '\n' + r ,
) ;
}
}
function i ( e , i , n ) {
if ( e && e . input && Array . isArray ( e . input ) )
t . prototype . isUndef ( n ) && ( n = 0 ) ,
this . disconnect ( e . input [ n ] , i , n ) ;
else if ( e && e . input ) this . disconnect ( e . input , i , n ) ;
else
try {
o . apply ( this , arguments ) ;
} catch ( r ) {
throw new Error (
'error disconnecting node: ' + e + '\n' + r ,
) ;
}
}
var n = AudioNode . prototype . connect ,
o = AudioNode . prototype . disconnect ;
AudioNode . prototype . connect !== e &&
( ( AudioNode . prototype . connect = e ) ,
( AudioNode . prototype . disconnect = i ) ) ;
}
return (
! window . hasOwnProperty ( 'AudioContext' ) &&
window . hasOwnProperty ( 'webkitAudioContext' ) &&
( window . AudioContext = window . webkitAudioContext ) ,
( t . Context = function ( e ) {
t . Emitter . call ( this ) ,
e || ( e = new window . AudioContext ( ) ) ,
( this . _context = e ) ;
for ( var i in this . _context )
this . _defineProperty ( this . _context , i ) ;
( this . _latencyHint = 'interactive' ) ,
( this . _lookAhead = 0.1 ) ,
( this . _updateInterval = this . _lookAhead / 3 ) ,
( this . _computedUpdateInterval = 0 ) ,
( this . _worker = this . _createWorker ( ) ) ,
( this . _constants = { } ) ;
} ) ,
t . extend ( t . Context , t . Emitter ) ,
t . Emitter . mixin ( t . Context ) ,
( t . Context . prototype . _defineProperty = function ( t , e ) {
this . isUndef ( this [ e ] ) &&
Object . defineProperty ( this , e , {
get : function ( ) {
return 'function' == typeof t [ e ]
? t [ e ] . bind ( t )
: t [ e ] ;
} ,
set : function ( i ) {
t [ e ] = i ;
} ,
} ) ;
} ) ,
( t . Context . prototype . now = function ( ) {
return this . _context . currentTime ;
} ) ,
( t . Context . prototype . _createWorker = function ( ) {
window . URL = window . URL || window . webkitURL ;
var t = new Blob ( [
'var timeoutTime = ' +
( 1e3 * this . _updateInterval ) . toFixed ( 1 ) +
";self.onmessage = function(msg){ timeoutTime = parseInt(msg.data);};function tick(){ setTimeout(tick, timeoutTime); self.postMessage('tick');}tick();" ,
] ) ,
e = URL . createObjectURL ( t ) ,
i = new Worker ( e ) ;
return (
i . addEventListener (
'message' ,
function ( ) {
this . emit ( 'tick' ) ;
} . bind ( this ) ,
) ,
i . addEventListener (
'message' ,
function ( ) {
var t = this . now ( ) ;
if ( this . isNumber ( this . _lastUpdate ) ) {
var e = t - this . _lastUpdate ;
this . _computedUpdateInterval = Math . max (
e ,
0.97 * this . _computedUpdateInterval ,
) ;
}
this . _lastUpdate = t ;
} . bind ( this ) ,
) ,
i
) ;
} ) ,
( t . Context . prototype . getConstant = function ( t ) {
if ( this . _constants [ t ] ) return this . _constants [ t ] ;
for (
var e = this . _context . createBuffer (
1 ,
128 ,
this . _context . sampleRate ,
) ,
i = e . getChannelData ( 0 ) ,
n = 0 ;
n < i . length ;
n ++
)
i [ n ] = t ;
var o = this . _context . createBufferSource ( ) ;
return (
( o . channelCount = 1 ) ,
( o . channelCountMode = 'explicit' ) ,
( o . buffer = e ) ,
( o . loop = ! 0 ) ,
o . start ( 0 ) ,
( this . _constants [ t ] = o ) ,
o
) ;
} ) ,
Object . defineProperty ( t . Context . prototype , 'lag' , {
get : function ( ) {
var t = this . _computedUpdateInterval - this . _updateInterval ;
return ( t = Math . max ( t , 0 ) ) ;
} ,
} ) ,
Object . defineProperty ( t . Context . prototype , 'lookAhead' , {
get : function ( ) {
return this . _lookAhead ;
} ,
set : function ( t ) {
this . _lookAhead = t ;
} ,
} ) ,
Object . defineProperty ( t . Context . prototype , 'updateInterval' , {
get : function ( ) {
return this . _updateInterval ;
} ,
set : function ( e ) {
( this . _updateInterval = Math . max ( e , t . prototype . blockTime ) ) ,
this . _worker . postMessage ( Math . max ( 1e3 * e , 1 ) ) ;
} ,
} ) ,
Object . defineProperty ( t . Context . prototype , 'latencyHint' , {
get : function ( ) {
return this . _latencyHint ;
} ,
set : function ( t ) {
var e = t ;
if ( ( ( this . _latencyHint = t ) , this . isString ( t ) ) )
switch ( t ) {
case 'interactive' :
( e = 0.1 ) , ( this . _context . latencyHint = t ) ;
break ;
case 'playback' :
( e = 0.8 ) , ( this . _context . latencyHint = t ) ;
break ;
case 'balanced' :
( e = 0.25 ) , ( this . _context . latencyHint = t ) ;
break ;
case 'fastest' :
e = 0.01 ;
}
( this . lookAhead = e ) , ( this . updateInterval = e / 3 ) ;
} ,
} ) ,
t . supported
? ( e ( ) , ( t . context = new t . Context ( ) ) )
: console . warn ( 'This browser does not support Tone.js' ) ,
t . Context
) ;
} ) ( p ) ;
var _ ;
_ = ( function ( t ) {
return (
( t . Type = {
Default : 'number' ,
Time : 'time' ,
Frequency : 'frequency' ,
TransportTime : 'transportTime' ,
Ticks : 'ticks' ,
NormalRange : 'normalRange' ,
AudioRange : 'audioRange' ,
Decibels : 'db' ,
Interval : 'interval' ,
BPM : 'bpm' ,
Positive : 'positive' ,
Cents : 'cents' ,
Degrees : 'degrees' ,
MIDI : 'midi' ,
BarsBeatsSixteenths : 'barsBeatsSixteenths' ,
Samples : 'samples' ,
Hertz : 'hertz' ,
Note : 'note' ,
Milliseconds : 'milliseconds' ,
Seconds : 'seconds' ,
Notation : 'notation' ,
} ) ,
( t . prototype . toSeconds = function ( e ) {
return this . isNumber ( e )
? e
: this . isUndef ( e )
? this . now ( )
: this . isString ( e )
? new t . Time ( e ) . toSeconds ( )
: e instanceof t . TimeBase
? e . toSeconds ( )
: void 0 ;
} ) ,
( t . prototype . toFrequency = function ( e ) {
return this . isNumber ( e )
? e
: this . isString ( e ) || this . isUndef ( e )
? new t . Frequency ( e ) . valueOf ( )
: e instanceof t . TimeBase
? e . toFrequency ( )
: void 0 ;
} ) ,
( t . prototype . toTicks = function ( e ) {
return this . isNumber ( e ) || this . isString ( e )
? new t . TransportTime ( e ) . toTicks ( )
: this . isUndef ( e )
? t . Transport . ticks
: e instanceof t . TimeBase
? e . toTicks ( )
: void 0 ;
} ) ,
t
) ;
} ) ( p , d , m , y ) ;
var T ;
T = ( function ( t ) {
'use strict' ;
return (
( t . Param = function ( ) {
var e = this . optionsObject (
arguments ,
[ 'param' , 'units' , 'convert' ] ,
t . Param . defaults ,
) ;
( this . _param = this . input = e . param ) ,
( this . units = e . units ) ,
( this . convert = e . convert ) ,
( this . overridden = ! 1 ) ,
( this . _lfo = null ) ,
this . isObject ( e . lfo )
? ( this . value = e . lfo )
: this . isUndef ( e . value ) || ( this . value = e . value ) ;
} ) ,
t . extend ( t . Param ) ,
( t . Param . defaults = {
units : t . Type . Default ,
convert : ! 0 ,
param : void 0 ,
} ) ,
Object . defineProperty ( t . Param . prototype , 'value' , {
get : function ( ) {
return this . _toUnits ( this . _param . value ) ;
} ,
set : function ( e ) {
if ( this . isObject ( e ) ) {
if ( this . isUndef ( t . LFO ) )
throw new Error (
"Include 'Tone.LFO' to use an LFO as a Param value." ,
) ;
this . _lfo && this . _lfo . dispose ( ) ,
( this . _lfo = new t . LFO ( e ) . start ( ) ) ,
this . _lfo . connect ( this . input ) ;
} else {
var i = this . _fromUnits ( e ) ;
this . _param . cancelScheduledValues ( 0 ) ,
( this . _param . value = i ) ;
}
} ,
} ) ,
( t . Param . prototype . _fromUnits = function ( e ) {
if ( ! this . convert && ! this . isUndef ( this . convert ) ) return e ;
switch ( this . units ) {
case t . Type . Time :
return this . toSeconds ( e ) ;
case t . Type . Frequency :
return this . toFrequency ( e ) ;
case t . Type . Decibels :
return this . dbToGain ( e ) ;
case t . Type . NormalRange :
return Math . min ( Math . max ( e , 0 ) , 1 ) ;
case t . Type . AudioRange :
return Math . min ( Math . max ( e , - 1 ) , 1 ) ;
case t . Type . Positive :
return Math . max ( e , 0 ) ;
default :
return e ;
}
} ) ,
( t . Param . prototype . _toUnits = function ( e ) {
if ( ! this . convert && ! this . isUndef ( this . convert ) ) return e ;
switch ( this . units ) {
case t . Type . Decibels :
return this . gainToDb ( e ) ;
default :
return e ;
}
} ) ,
( t . Param . prototype . _minOutput = 1e-5 ) ,
( t . Param . prototype . setValueAtTime = function ( t , e ) {
return (
( t = this . _fromUnits ( t ) ) ,
( e = this . toSeconds ( e ) ) ,
e <= this . now ( ) + this . blockTime
? ( this . _param . value = t )
: this . _param . setValueAtTime ( t , e ) ,
this
) ;
} ) ,
( t . Param . prototype . setRampPoint = function ( t ) {
t = this . defaultArg ( t , this . now ( ) ) ;
var e = this . _param . value ;
return (
0 === e && ( e = this . _minOutput ) ,
this . _param . setValueAtTime ( e , t ) ,
this
) ;
} ) ,
( t . Param . prototype . linearRampToValueAtTime = function ( t , e ) {
return (
( t = this . _fromUnits ( t ) ) ,
this . _param . linearRampToValueAtTime ( t , this . toSeconds ( e ) ) ,
this
) ;
} ) ,
( t . Param . prototype . exponentialRampToValueAtTime = function ( t , e ) {
return (
( t = this . _fromUnits ( t ) ) ,
( t = Math . max ( this . _minOutput , t ) ) ,
this . _param . exponentialRampToValueAtTime (
t ,
this . toSeconds ( e ) ,
) ,
this
) ;
} ) ,
( t . Param . prototype . exponentialRampToValue = function ( t , e , i ) {
return (
( i = this . toSeconds ( i ) ) ,
this . setRampPoint ( i ) ,
this . exponentialRampToValueAtTime ( t , i + this . toSeconds ( e ) ) ,
this
) ;
} ) ,
( t . Param . prototype . linearRampToValue = function ( t , e , i ) {
return (
( i = this . toSeconds ( i ) ) ,
this . setRampPoint ( i ) ,
this . linearRampToValueAtTime ( t , i + this . toSeconds ( e ) ) ,
this
) ;
} ) ,
( t . Param . prototype . setTargetAtTime = function ( t , e , i ) {
return (
( t = this . _fromUnits ( t ) ) ,
( t = Math . max ( this . _minOutput , t ) ) ,
( i = Math . max ( this . _minOutput , i ) ) ,
this . _param . setTargetAtTime ( t , this . toSeconds ( e ) , i ) ,
this
) ;
} ) ,
( t . Param . prototype . setValueCurveAtTime = function ( t , e , i ) {
for ( var n = 0 ; n < t . length ; n ++ ) t [ n ] = this . _fromUnits ( t [ n ] ) ;
return (
this . _param . setValueCurveAtTime (
t ,
this . toSeconds ( e ) ,
this . toSeconds ( i ) ,
) ,
this
) ;
} ) ,
( t . Param . prototype . cancelScheduledValues = function ( t ) {
return (
this . _param . cancelScheduledValues ( this . toSeconds ( t ) ) , this
) ;
} ) ,
( t . Param . prototype . rampTo = function ( e , i , n ) {
return (
( i = this . defaultArg ( i , 0 ) ) ,
this . units === t . Type . Frequency ||
this . units === t . Type . BPM ||
this . units === t . Type . Decibels
? this . exponentialRampToValue ( e , i , n )
: this . linearRampToValue ( e , i , n ) ,
this
) ;
} ) ,
Object . defineProperty ( t . Param . prototype , 'lfo' , {
get : function ( ) {
return this . _lfo ;
} ,
} ) ,
( t . Param . prototype . dispose = function ( ) {
return (
t . prototype . dispose . call ( this ) ,
( this . _param = null ) ,
this . _lfo && ( this . _lfo . dispose ( ) , ( this . _lfo = null ) ) ,
this
) ;
} ) ,
t . Param
) ;
} ) ( p ) ;
var b ;
b = ( function ( t ) {
'use strict' ;
return (
window . GainNode &&
! AudioContext . prototype . createGain &&
( AudioContext . prototype . createGain =
AudioContext . prototype . createGainNode ) ,
( t . Gain = function ( ) {
var e = this . optionsObject (
arguments ,
[ 'gain' , 'units' ] ,
t . Gain . defaults ,
) ;
( this . input =
this . output =
this . _gainNode =
this . context . createGain ( ) ) ,
( this . gain = new t . Param ( {
param : this . _gainNode . gain ,
units : e . units ,
value : e . gain ,
convert : e . convert ,
} ) ) ,
this . _readOnly ( 'gain' ) ;
} ) ,
t . extend ( t . Gain ) ,
( t . Gain . defaults = { gain : 1 , convert : ! 0 } ) ,
( t . Gain . prototype . dispose = function ( ) {
t . Param . prototype . dispose . call ( this ) ,
this . _gainNode . disconnect ( ) ,
( this . _gainNode = null ) ,
this . _writable ( 'gain' ) ,
this . gain . dispose ( ) ,
( this . gain = null ) ;
} ) ,
( t . prototype . createInsOuts = function ( e , i ) {
1 === e
? ( this . input = new t . Gain ( ) )
: e > 1 && ( this . input = new Array ( e ) ) ,
1 === i
? ( this . output = new t . Gain ( ) )
: i > 1 && ( this . output = new Array ( e ) ) ;
} ) ,
t . Gain
) ;
} ) ( p , T ) ;
var x ;
x = ( function ( t ) {
'use strict' ;
return (
( t . Signal = function ( ) {
var e = this . optionsObject (
arguments ,
[ 'value' , 'units' ] ,
t . Signal . defaults ,
) ;
( this . output = this . _gain = this . context . createGain ( ) ) ,
( e . param = this . _gain . gain ) ,
t . Param . call ( this , e ) ,
( this . input = this . _param = this . _gain . gain ) ,
this . context . getConstant ( 1 ) . chain ( this . _gain ) ;
} ) ,
t . extend ( t . Signal , t . Param ) ,
( t . Signal . defaults = {
value : 0 ,
units : t . Type . Default ,
convert : ! 0 ,
} ) ,
( t . Signal . prototype . connect = t . SignalBase . prototype . connect ) ,
( t . Signal . prototype . dispose = function ( ) {
return (
t . Param . prototype . dispose . call ( this ) ,
( this . _param = null ) ,
this . _gain . disconnect ( ) ,
( this . _gain = null ) ,
this
) ;
} ) ,
t . Signal
) ;
} ) ( p , l , _ , T ) ;
var S ;
S = ( function ( t ) {
'use strict' ;
return (
( t . Add = function ( e ) {
this . createInsOuts ( 2 , 0 ) ,
( this . _sum =
this . input [ 0 ] =
this . input [ 1 ] =
this . output =
new t . Gain ( ) ) ,
( this . _param = this . input [ 1 ] = new t . Signal ( e ) ) ,
this . _param . connect ( this . _sum ) ;
} ) ,
t . extend ( t . Add , t . Signal ) ,
( t . Add . prototype . dispose = function ( ) {
return (
t . prototype . dispose . call ( this ) ,
this . _sum . dispose ( ) ,
( this . _sum = null ) ,
this . _param . dispose ( ) ,
( this . _param = null ) ,
this
) ;
} ) ,
t . Add
) ;
} ) ( p , x ) ;
var w ;
w = ( function ( t ) {
'use strict' ;
return (
( t . Multiply = function ( e ) {
this . createInsOuts ( 2 , 0 ) ,
( this . _mult = this . input [ 0 ] = this . output = new t . Gain ( ) ) ,
( this . _param = this . input [ 1 ] = this . output . gain ) ,
( this . _param . value = this . defaultArg ( e , 0 ) ) ;
} ) ,
t . extend ( t . Multiply , t . Signal ) ,
( t . Multiply . prototype . dispose = function ( ) {
return (
t . prototype . dispose . call ( this ) ,
this . _mult . dispose ( ) ,
( this . _mult = null ) ,
( this . _param = null ) ,
this
) ;
} ) ,
t . Multiply
) ;
} ) ( p , x ) ;
var A ;
A = ( function ( t ) {
'use strict' ;
return (
( t . Scale = function ( e , i ) {
( this . _outputMin = this . defaultArg ( e , 0 ) ) ,
( this . _outputMax = this . defaultArg ( i , 1 ) ) ,
( this . _scale = this . input = new t . Multiply ( 1 ) ) ,
( this . _add = this . output = new t . Add ( 0 ) ) ,
this . _scale . connect ( this . _add ) ,
this . _setRange ( ) ;
} ) ,
t . extend ( t . Scale , t . SignalBase ) ,
Object . defineProperty ( t . Scale . prototype , 'min' , {
get : function ( ) {
return this . _outputMin ;
} ,
set : function ( t ) {
( this . _outputMin = t ) , this . _setRange ( ) ;
} ,
} ) ,
Object . defineProperty ( t . Scale . prototype , 'max' , {
get : function ( ) {
return this . _outputMax ;
} ,
set : function ( t ) {
( this . _outputMax = t ) , this . _setRange ( ) ;
} ,
} ) ,
( t . Scale . prototype . _setRange = function ( ) {
( this . _add . value = this . _outputMin ) ,
( this . _scale . value = this . _outputMax - this . _outputMin ) ;
} ) ,
( t . Scale . prototype . dispose = function ( ) {
return (
t . prototype . dispose . call ( this ) ,
this . _add . dispose ( ) ,
( this . _add = null ) ,
this . _scale . dispose ( ) ,
( this . _scale = null ) ,
this
) ;
} ) ,
t . Scale
) ;
} ) ( p , S , w ) ;
var P ;
P = ( function ( ) {
var e = x ,
i = S ,
o = w ,
r = A ,
s = p ,
a = n ;
s . setContext ( a . audiocontext ) ,
( t . Signal = function ( t ) {
var i = new e ( t ) ;
return i ;
} ) ,
( e . prototype . fade = e . prototype . linearRampToValueAtTime ) ,
( o . prototype . fade = e . prototype . fade ) ,
( i . prototype . fade = e . prototype . fade ) ,
( r . prototype . fade = e . prototype . fade ) ,
( e . prototype . setInput = function ( t ) {
t . connect ( this ) ;
} ) ,
( o . prototype . setInput = e . prototype . setInput ) ,
( i . prototype . setInput = e . prototype . setInput ) ,
( r . prototype . setInput = e . prototype . setInput ) ,
( e . prototype . add = function ( t ) {
var e = new i ( t ) ;
return this . connect ( e ) , e ;
} ) ,
( o . prototype . add = e . prototype . add ) ,
( i . prototype . add = e . prototype . add ) ,
( r . prototype . add = e . prototype . add ) ,
( e . prototype . mult = function ( t ) {
var e = new o ( t ) ;
return this . connect ( e ) , e ;
} ) ,
( o . prototype . mult = e . prototype . mult ) ,
( i . prototype . mult = e . prototype . mult ) ,
( r . prototype . mult = e . prototype . mult ) ,
( e . prototype . scale = function ( e , i , n , o ) {
var s , a ;
4 === arguments . length
? ( ( s = t . prototype . map ( n , e , i , 0 , 1 ) - 0.5 ) ,
( a = t . prototype . map ( o , e , i , 0 , 1 ) - 0.5 ) )
: ( ( s = arguments [ 0 ] ) , ( a = arguments [ 1 ] ) ) ;
var u = new r ( s , a ) ;
return this . connect ( u ) , u ;
} ) ,
( o . prototype . scale = e . prototype . scale ) ,
( i . prototype . scale = e . prototype . scale ) ,
( r . prototype . scale = e . prototype . scale ) ;
} ) ( x , S , w , A , p , n ) ;
var k ;
k = ( function ( ) {
var e = n ,
i = S ,
o = w ,
r = A ;
( t . Oscillator = function ( i , n ) {
if ( 'string' == typeof i ) {
var o = n ;
( n = i ) , ( i = o ) ;
}
if ( 'number' == typeof n ) {
var o = n ;
( n = i ) , ( i = o ) ;
}
( this . started = ! 1 ) ,
( this . phaseAmount = void 0 ) ,
( this . oscillator = e . audiocontext . createOscillator ( ) ) ,
( this . f = i || 440 ) ,
( this . oscillator . type = n || 'sine' ) ,
this . oscillator . frequency . setValueAtTime (
this . f ,
e . audiocontext . currentTime ,
) ,
( this . output = e . audiocontext . createGain ( ) ) ,
( this . _freqMods = [ ] ) ,
( this . output . gain . value = 0.5 ) ,
this . output . gain . setValueAtTime (
0.5 ,
e . audiocontext . currentTime ,
) ,
this . oscillator . connect ( this . output ) ,
( this . panPosition = 0 ) ,
( this . connection = e . input ) ,
( this . panner = new t . Panner ( this . output , this . connection , 1 ) ) ,
( this . mathOps = [ this . output ] ) ,
e . soundArray . push ( this ) ;
} ) ,
( t . Oscillator . prototype . start = function ( t , i ) {
if ( this . started ) {
var n = e . audiocontext . currentTime ;
this . stop ( n ) ;
}
if ( ! this . started ) {
var o = i || this . f ,
r = this . oscillator . type ;
this . oscillator &&
( this . oscillator . disconnect ( ) , delete this . oscillator ) ,
( this . oscillator = e . audiocontext . createOscillator ( ) ) ,
( this . oscillator . frequency . value = Math . abs ( o ) ) ,
( this . oscillator . type = r ) ,
this . oscillator . connect ( this . output ) ,
( t = t || 0 ) ,
this . oscillator . start ( t + e . audiocontext . currentTime ) ,
( this . freqNode = this . oscillator . frequency ) ;
for ( var s in this . _freqMods )
'undefined' != typeof this . _freqMods [ s ] . connect &&
this . _freqMods [ s ] . connect (
this . oscillator . frequency ,
) ;
this . started = ! 0 ;
}
} ) ,
( t . Oscillator . prototype . stop = function ( t ) {
if ( this . started ) {
var i = t || 0 ,
n = e . audiocontext . currentTime ;
this . oscillator . stop ( i + n ) , ( this . started = ! 1 ) ;
}
} ) ,
( t . Oscillator . prototype . amp = function ( t , i , n ) {
var o = this ;
if ( 'number' == typeof t ) {
var i = i || 0 ,
n = n || 0 ,
r = e . audiocontext . currentTime ;
this . output . gain . linearRampToValueAtTime ( t , r + n + i ) ;
} else {
if ( ! t ) return this . output . gain ;
t . connect ( o . output . gain ) ;
}
} ) ,
( t . Oscillator . prototype . fade = t . Oscillator . prototype . amp ) ,
( t . Oscillator . prototype . getAmp = function ( ) {
return this . output . gain . value ;
} ) ,
( t . Oscillator . prototype . freq = function ( t , i , n ) {
if ( 'number' != typeof t || isNaN ( t ) ) {
if ( ! t ) return this . oscillator . frequency ;
t . output && ( t = t . output ) ,
t . connect ( this . oscillator . frequency ) ,
this . _freqMods . push ( t ) ;
} else {
this . f = t ;
var o = e . audiocontext . currentTime ,
i = i || 0 ,
n = n || 0 ;
0 === i
? this . oscillator . frequency . setValueAtTime ( t , n + o )
: t > 0
? this . oscillator . frequency . exponentialRampToValueAtTime (
t ,
n + i + o ,
)
: this . oscillator . frequency . linearRampToValueAtTime (
t ,
n + i + o ,
) ,
this . phaseAmount && this . phase ( this . phaseAmount ) ;
}
} ) ,
( t . Oscillator . prototype . getFreq = function ( ) {
return this . oscillator . frequency . value ;
} ) ,
( t . Oscillator . prototype . setType = function ( t ) {
this . oscillator . type = t ;
} ) ,
( t . Oscillator . prototype . getType = function ( ) {
return this . oscillator . type ;
} ) ,
( t . Oscillator . prototype . connect = function ( t ) {
t
? t . hasOwnProperty ( 'input' )
? ( this . panner . connect ( t . input ) ,
( this . connection = t . input ) )
: ( this . panner . connect ( t ) , ( this . connection = t ) )
: this . panner . connect ( e . input ) ;
} ) ,
( t . Oscillator . prototype . disconnect = function ( ) {
this . output && this . output . disconnect ( ) ,
this . panner &&
( this . panner . disconnect ( ) ,
this . output && this . output . connect ( this . panner ) ) ,
( this . oscMods = [ ] ) ;
} ) ,
( t . Oscillator . prototype . pan = function ( t , e ) {
( this . panPosition = t ) , this . panner . pan ( t , e ) ;
} ) ,
( t . Oscillator . prototype . getPan = function ( ) {
return this . panPosition ;
} ) ,
( t . Oscillator . prototype . dispose = function ( ) {
var t = e . soundArray . indexOf ( this ) ;
if ( ( e . soundArray . splice ( t , 1 ) , this . oscillator ) ) {
var i = e . audiocontext . currentTime ;
this . stop ( i ) ,
this . disconnect ( ) ,
( this . panner = null ) ,
( this . oscillator = null ) ;
}
this . osc2 && this . osc2 . dispose ( ) ;
} ) ,
( t . Oscillator . prototype . phase = function ( i ) {
var n = t . prototype . map ( i , 0 , 1 , 0 , 1 / this . f ) ,
o = e . audiocontext . currentTime ;
( this . phaseAmount = i ) ,
this . dNode ||
( ( this . dNode = e . audiocontext . createDelay ( ) ) ,
this . oscillator . disconnect ( ) ,
this . oscillator . connect ( this . dNode ) ,
this . dNode . connect ( this . output ) ) ,
this . dNode . delayTime . setValueAtTime ( n , o ) ;
} ) ;
var s = function ( t , e , i , n , o ) {
var r = t . oscillator ;
for ( var s in t . mathOps )
t . mathOps [ s ] instanceof o &&
( r . disconnect ( ) ,
t . mathOps [ s ] . dispose ( ) ,
( i = s ) ,
i < t . mathOps . length - 2 && ( n = t . mathOps [ s + 1 ] ) ) ;
return (
i === t . mathOps . length - 1 && t . mathOps . push ( n ) ,
s > 0 && ( r = t . mathOps [ s - 1 ] ) ,
r . disconnect ( ) ,
r . connect ( e ) ,
e . connect ( n ) ,
( t . mathOps [ i ] = e ) ,
t
) ;
} ;
( t . Oscillator . prototype . add = function ( t ) {
var e = new i ( t ) ,
n = this . mathOps . length - 1 ,
o = this . output ;
return s ( this , e , n , o , i ) ;
} ) ,
( t . Oscillator . prototype . mult = function ( t ) {
var e = new o ( t ) ,
i = this . mathOps . length - 1 ,
n = this . output ;
return s ( this , e , i , n , o ) ;
} ) ,
( t . Oscillator . prototype . scale = function ( e , i , n , o ) {
var a , u ;
4 === arguments . length
? ( ( a = t . prototype . map ( n , e , i , 0 , 1 ) - 0.5 ) ,
( u = t . prototype . map ( o , e , i , 0 , 1 ) - 0.5 ) )
: ( ( a = arguments [ 0 ] ) , ( u = arguments [ 1 ] ) ) ;
var c = new r ( a , u ) ,
p = this . mathOps . length - 1 ,
h = this . output ;
return s ( this , c , p , h , r ) ;
} ) ,
( t . SinOsc = function ( e ) {
t . Oscillator . call ( this , e , 'sine' ) ;
} ) ,
( t . SinOsc . prototype = Object . create ( t . Oscillator . prototype ) ) ,
( t . TriOsc = function ( e ) {
t . Oscillator . call ( this , e , 'triangle' ) ;
} ) ,
( t . TriOsc . prototype = Object . create ( t . Oscillator . prototype ) ) ,
( t . SawOsc = function ( e ) {
t . Oscillator . call ( this , e , 'sawtooth' ) ;
} ) ,
( t . SawOsc . prototype = Object . create ( t . Oscillator . prototype ) ) ,
( t . SqrOsc = function ( e ) {
t . Oscillator . call ( this , e , 'square' ) ;
} ) ,
( t . SqrOsc . prototype = Object . create ( t . Oscillator . prototype ) ) ;
} ) ( n , S , w , A ) ;
var O ;
O = ( function ( t ) {
'use strict' ;
return (
( t . Timeline = function ( ) {
var e = this . optionsObject (
arguments ,
[ 'memory' ] ,
t . Timeline . defaults ,
) ;
( this . _timeline = [ ] ) ,
( this . _toRemove = [ ] ) ,
( this . _iterating = ! 1 ) ,
( this . memory = e . memory ) ;
} ) ,
t . extend ( t . Timeline ) ,
( t . Timeline . defaults = { memory : 1 / 0 } ) ,
Object . defineProperty ( t . Timeline . prototype , 'length' , {
get : function ( ) {
return this . _timeline . length ;
} ,
} ) ,
( t . Timeline . prototype . add = function ( t ) {
if ( this . isUndef ( t . time ) )
throw new Error (
'Tone.Timeline: events must have a time attribute' ,
) ;
if ( this . _timeline . length ) {
var e = this . _search ( t . time ) ;
this . _timeline . splice ( e + 1 , 0 , t ) ;
} else this . _timeline . push ( t ) ;
if ( this . length > this . memory ) {
var i = this . length - this . memory ;
this . _timeline . splice ( 0 , i ) ;
}
return this ;
} ) ,
( t . Timeline . prototype . remove = function ( t ) {
if ( this . _iterating ) this . _toRemove . push ( t ) ;
else {
var e = this . _timeline . indexOf ( t ) ;
- 1 !== e && this . _timeline . splice ( e , 1 ) ;
}
return this ;
} ) ,
( t . Timeline . prototype . get = function ( t ) {
var e = this . _search ( t ) ;
return - 1 !== e ? this . _timeline [ e ] : null ;
} ) ,
( t . Timeline . prototype . peek = function ( ) {
return this . _timeline [ 0 ] ;
} ) ,
( t . Timeline . prototype . shift = function ( ) {
return this . _timeline . shift ( ) ;
} ) ,
( t . Timeline . prototype . getAfter = function ( t ) {
var e = this . _search ( t ) ;
return e + 1 < this . _timeline . length
? this . _timeline [ e + 1 ]
: null ;
} ) ,
( t . Timeline . prototype . getBefore = function ( t ) {
var e = this . _timeline . length ;
if ( e > 0 && this . _timeline [ e - 1 ] . time < t )
return this . _timeline [ e - 1 ] ;
var i = this . _search ( t ) ;
return i - 1 >= 0 ? this . _timeline [ i - 1 ] : null ;
} ) ,
( t . Timeline . prototype . cancel = function ( t ) {
if ( this . _timeline . length > 1 ) {
var e = this . _search ( t ) ;
if ( e >= 0 )
if ( this . _timeline [ e ] . time === t ) {
for (
var i = e ;
i >= 0 && this . _timeline [ i ] . time === t ;
i --
)
e = i ;
this . _timeline = this . _timeline . slice ( 0 , e ) ;
} else this . _timeline = this . _timeline . slice ( 0 , e + 1 ) ;
else this . _timeline = [ ] ;
} else
1 === this . _timeline . length &&
this . _timeline [ 0 ] . time >= t &&
( this . _timeline = [ ] ) ;
return this ;
} ) ,
( t . Timeline . prototype . cancelBefore = function ( t ) {
if ( this . _timeline . length ) {
var e = this . _search ( t ) ;
e >= 0 && ( this . _timeline = this . _timeline . slice ( e + 1 ) ) ;
}
return this ;
} ) ,
( t . Timeline . prototype . _search = function ( t ) {
var e = 0 ,
i = this . _timeline . length ,
n = i ;
if ( i > 0 && this . _timeline [ i - 1 ] . time <= t ) return i - 1 ;
for ( ; n > e ; ) {
var o = Math . floor ( e + ( n - e ) / 2 ) ,
r = this . _timeline [ o ] ,
s = this . _timeline [ o + 1 ] ;
if ( r . time === t ) {
for ( var a = o ; a < this . _timeline . length ; a ++ ) {
var u = this . _timeline [ a ] ;
u . time === t && ( o = a ) ;
}
return o ;
}
if ( r . time < t && s . time > t ) return o ;
r . time > t ? ( n = o ) : r . time < t && ( e = o + 1 ) ;
}
return - 1 ;
} ) ,
( t . Timeline . prototype . _iterate = function ( t , e , i ) {
( this . _iterating = ! 0 ) ,
( e = this . defaultArg ( e , 0 ) ) ,
( i = this . defaultArg ( i , this . _timeline . length - 1 ) ) ;
for ( var n = e ; i >= n ; n ++ ) t ( this . _timeline [ n ] ) ;
if ( ( ( this . _iterating = ! 1 ) , this . _toRemove . length > 0 ) ) {
for ( var o = 0 ; o < this . _toRemove . length ; o ++ ) {
var r = this . _timeline . indexOf ( this . _toRemove [ o ] ) ;
- 1 !== r && this . _timeline . splice ( r , 1 ) ;
}
this . _toRemove = [ ] ;
}
} ) ,
( t . Timeline . prototype . forEach = function ( t ) {
return this . _iterate ( t ) , this ;
} ) ,
( t . Timeline . prototype . forEachBefore = function ( t , e ) {
var i = this . _search ( t ) ;
return - 1 !== i && this . _iterate ( e , 0 , i ) , this ;
} ) ,
( t . Timeline . prototype . forEachAfter = function ( t , e ) {
var i = this . _search ( t ) ;
return this . _iterate ( e , i + 1 ) , this ;
} ) ,
( t . Timeline . prototype . forEachFrom = function ( t , e ) {
for (
var i = this . _search ( t ) ;
i >= 0 && this . _timeline [ i ] . time >= t ;
)
i -- ;
return this . _iterate ( e , i + 1 ) , this ;
} ) ,
( t . Timeline . prototype . forEachAtTime = function ( t , e ) {
var i = this . _search ( t ) ;
return (
- 1 !== i &&
this . _iterate (
function ( i ) {
i . time === t && e ( i ) ;
} ,
0 ,
i ,
) ,
this
) ;
} ) ,
( t . Timeline . prototype . dispose = function ( ) {
t . prototype . dispose . call ( this ) ,
( this . _timeline = null ) ,
( this . _toRemove = null ) ;
} ) ,
t . Timeline
) ;
} ) ( p ) ;
var F ;
F = ( function ( t ) {
'use strict' ;
return (
( t . TimelineSignal = function ( ) {
var e = this . optionsObject (
arguments ,
[ 'value' , 'units' ] ,
t . Signal . defaults ,
) ;
( this . _events = new t . Timeline ( 10 ) ) ,
t . Signal . apply ( this , e ) ,
( e . param = this . _param ) ,
t . Param . call ( this , e ) ,
( this . _initial = this . _fromUnits ( this . _param . value ) ) ;
} ) ,
t . extend ( t . TimelineSignal , t . Param ) ,
( t . TimelineSignal . Type = {
Linear : 'linear' ,
Exponential : 'exponential' ,
Target : 'target' ,
Curve : 'curve' ,
Set : 'set' ,
} ) ,
Object . defineProperty ( t . TimelineSignal . prototype , 'value' , {
get : function ( ) {
var t = this . now ( ) ,
e = this . getValueAtTime ( t ) ;
return this . _toUnits ( e ) ;
} ,
set : function ( t ) {
var e = this . _fromUnits ( t ) ;
( this . _initial = e ) ,
this . cancelScheduledValues ( ) ,
( this . _param . value = e ) ;
} ,
} ) ,
( t . TimelineSignal . prototype . setValueAtTime = function ( e , i ) {
return (
( e = this . _fromUnits ( e ) ) ,
( i = this . toSeconds ( i ) ) ,
this . _events . add ( {
type : t . TimelineSignal . Type . Set ,
value : e ,
time : i ,
} ) ,
this . _param . setValueAtTime ( e , i ) ,
this
) ;
} ) ,
( t . TimelineSignal . prototype . linearRampToValueAtTime = function (
e ,
i ,
) {
return (
( e = this . _fromUnits ( e ) ) ,
( i = this . toSeconds ( i ) ) ,
this . _events . add ( {
type : t . TimelineSignal . Type . Linear ,
value : e ,
time : i ,
} ) ,
this . _param . linearRampToValueAtTime ( e , i ) ,
this
) ;
} ) ,
( t . TimelineSignal . prototype . exponentialRampToValueAtTime =
function ( e , i ) {
i = this . toSeconds ( i ) ;
var n = this . _searchBefore ( i ) ;
n &&
0 === n . value &&
this . setValueAtTime ( this . _minOutput , n . time ) ,
( e = this . _fromUnits ( e ) ) ;
var o = Math . max ( e , this . _minOutput ) ;
return (
this . _events . add ( {
type : t . TimelineSignal . Type . Exponential ,
value : o ,
time : i ,
} ) ,
e < this . _minOutput
? ( this . _param . exponentialRampToValueAtTime (
this . _minOutput ,
i - this . sampleTime ,
) ,
this . setValueAtTime ( 0 , i ) )
: this . _param . exponentialRampToValueAtTime ( e , i ) ,
this
) ;
} ) ,
( t . TimelineSignal . prototype . setTargetAtTime = function ( e , i , n ) {
return (
( e = this . _fromUnits ( e ) ) ,
( e = Math . max ( this . _minOutput , e ) ) ,
( n = Math . max ( this . _minOutput , n ) ) ,
( i = this . toSeconds ( i ) ) ,
this . _events . add ( {
type : t . TimelineSignal . Type . Target ,
value : e ,
time : i ,
constant : n ,
} ) ,
this . _param . setTargetAtTime ( e , i , n ) ,
this
) ;
} ) ,
( t . TimelineSignal . prototype . setValueCurveAtTime = function (
e ,
i ,
n ,
o ,
) {
o = this . defaultArg ( o , 1 ) ;
for ( var r = new Array ( e . length ) , s = 0 ; s < r . length ; s ++ )
r [ s ] = this . _fromUnits ( e [ s ] ) * o ;
( i = this . toSeconds ( i ) ) ,
( n = this . toSeconds ( n ) ) ,
this . _events . add ( {
type : t . TimelineSignal . Type . Curve ,
value : r ,
time : i ,
duration : n ,
} ) ,
this . _param . setValueAtTime ( r [ 0 ] , i ) ;
for ( var a = 1 ; a < r . length ; a ++ ) {
var u = i + ( a / ( r . length - 1 ) ) * n ;
this . _param . linearRampToValueAtTime ( r [ a ] , u ) ;
}
return this ;
} ) ,
( t . TimelineSignal . prototype . cancelScheduledValues = function ( t ) {
return (
( t = this . toSeconds ( t ) ) ,
this . _events . cancel ( t ) ,
this . _param . cancelScheduledValues ( t ) ,
this
) ;
} ) ,
( t . TimelineSignal . prototype . setRampPoint = function ( e ) {
e = this . toSeconds ( e ) ;
var i = this . _toUnits ( this . getValueAtTime ( e ) ) ,
n = this . _searchBefore ( e ) ;
if ( n && n . time === e )
this . cancelScheduledValues ( e + this . sampleTime ) ;
else if (
n &&
n . type === t . TimelineSignal . Type . Curve &&
n . time + n . duration > e
)
this . cancelScheduledValues ( e ) ,
this . linearRampToValueAtTime ( i , e ) ;
else {
var o = this . _searchAfter ( e ) ;
o &&
( this . cancelScheduledValues ( e ) ,
o . type === t . TimelineSignal . Type . Linear
? this . linearRampToValueAtTime ( i , e )
: o . type === t . TimelineSignal . Type . Exponential &&
this . exponentialRampToValueAtTime ( i , e ) ) ,
this . setValueAtTime ( i , e ) ;
}
return this ;
} ) ,
( t . TimelineSignal . prototype . linearRampToValueBetween = function (
t ,
e ,
i ,
) {
return (
this . setRampPoint ( e ) ,
this . linearRampToValueAtTime ( t , i ) ,
this
) ;
} ) ,
( t . TimelineSignal . prototype . exponentialRampToValueBetween =
function ( t , e , i ) {
return (
this . setRampPoint ( e ) ,
this . exponentialRampToValueAtTime ( t , i ) ,
this
) ;
} ) ,
( t . TimelineSignal . prototype . _searchBefore = function ( t ) {
return this . _events . get ( t ) ;
} ) ,
( t . TimelineSignal . prototype . _searchAfter = function ( t ) {
return this . _events . getAfter ( t ) ;
} ) ,
( t . TimelineSignal . prototype . getValueAtTime = function ( e ) {
e = this . toSeconds ( e ) ;
var i = this . _searchAfter ( e ) ,
n = this . _searchBefore ( e ) ,
o = this . _initial ;
if ( null === n ) o = this . _initial ;
else if ( n . type === t . TimelineSignal . Type . Target ) {
var r ,
s = this . _events . getBefore ( n . time ) ;
( r = null === s ? this . _initial : s . value ) ,
( o = this . _exponentialApproach (
n . time ,
r ,
n . value ,
n . constant ,
e ,
) ) ;
} else
o =
n . type === t . TimelineSignal . Type . Curve
? this . _curveInterpolate (
n . time ,
n . value ,
n . duration ,
e ,
)
: null === i
? n . value
: i . type === t . TimelineSignal . Type . Linear
? this . _linearInterpolate (
n . time ,
n . value ,
i . time ,
i . value ,
e ,
)
: i . type === t . TimelineSignal . Type . Exponential
? this . _exponentialInterpolate (
n . time ,
n . value ,
i . time ,
i . value ,
e ,
)
: n . value ;
return o ;
} ) ,
( t . TimelineSignal . prototype . connect =
t . SignalBase . prototype . connect ) ,
( t . TimelineSignal . prototype . _exponentialApproach = function (
t ,
e ,
i ,
n ,
o ,
) {
return i + ( e - i ) * Math . exp ( - ( o - t ) / n ) ;
} ) ,
( t . TimelineSignal . prototype . _linearInterpolate = function (
t ,
e ,
i ,
n ,
o ,
) {
return e + ( n - e ) * ( ( o - t ) / ( i - t ) ) ;
} ) ,
( t . TimelineSignal . prototype . _exponentialInterpolate = function (
t ,
e ,
i ,
n ,
o ,
) {
return (
( e = Math . max ( this . _minOutput , e ) ) ,
e * Math . pow ( n / e , ( o - t ) / ( i - t ) )
) ;
} ) ,
( t . TimelineSignal . prototype . _curveInterpolate = function (
t ,
e ,
i ,
n ,
) {
var o = e . length ;
if ( n >= t + i ) return e [ o - 1 ] ;
if ( t >= n ) return e [ 0 ] ;
var r = ( n - t ) / i ,
s = Math . floor ( ( o - 1 ) * r ) ,
a = Math . ceil ( ( o - 1 ) * r ) ,
u = e [ s ] ,
c = e [ a ] ;
return a === s
? u
: this . _linearInterpolate ( s , u , a , c , r * ( o - 1 ) ) ;
} ) ,
( t . TimelineSignal . prototype . dispose = function ( ) {
t . Signal . prototype . dispose . call ( this ) ,
t . Param . prototype . dispose . call ( this ) ,
this . _events . dispose ( ) ,
( this . _events = null ) ;
} ) ,
t . TimelineSignal
) ;
} ) ( p , x ) ;
var q ;
q = ( function ( ) {
var e = n ,
i = S ,
o = w ,
r = A ,
s = F ,
a = p ;
a . setContext ( e . audiocontext ) ,
( t . Envelope = function ( t , i , n , o , r , a ) {
( this . aTime = t || 0.1 ) ,
( this . aLevel = i || 1 ) ,
( this . dTime = n || 0.5 ) ,
( this . dLevel = o || 0 ) ,
( this . rTime = r || 0 ) ,
( this . rLevel = a || 0 ) ,
( this . _rampHighPercentage = 0.98 ) ,
( this . _rampLowPercentage = 0.02 ) ,
( this . output = e . audiocontext . createGain ( ) ) ,
( this . control = new s ( ) ) ,
this . _init ( ) ,
this . control . connect ( this . output ) ,
( this . connection = null ) ,
( this . mathOps = [ this . control ] ) ,
( this . isExponential = ! 1 ) ,
( this . sourceToClear = null ) ,
( this . wasTriggered = ! 1 ) ,
e . soundArray . push ( this ) ;
} ) ,
( t . Envelope . prototype . _init = function ( ) {
var t = e . audiocontext . currentTime ,
i = t ;
this . control . setTargetAtTime ( 1e-5 , i , 0.001 ) ,
this . _setRampAD ( this . aTime , this . dTime ) ;
} ) ,
( t . Envelope . prototype . set = function ( t , e , i , n , o , r ) {
( this . aTime = t ) ,
( this . aLevel = e ) ,
( this . dTime = i || 0 ) ,
( this . dLevel = n || 0 ) ,
( this . rTime = o || 0 ) ,
( this . rLevel = r || 0 ) ,
this . _setRampAD ( t , i ) ;
} ) ,
( t . Envelope . prototype . setADSR = function ( t , e , i , n ) {
( this . aTime = t ) ,
( this . dTime = e || 0 ) ,
( this . sPercent = i || 0 ) ,
( this . dLevel =
'undefined' != typeof i
? i * ( this . aLevel - this . rLevel ) + this . rLevel
: 0 ) ,
( this . rTime = n || 0 ) ,
this . _setRampAD ( t , e ) ;
} ) ,
( t . Envelope . prototype . setRange = function ( t , e ) {
( this . aLevel = t || 1 ) , ( this . rLevel = e || 0 ) ;
} ) ,
( t . Envelope . prototype . _setRampAD = function ( t , e ) {
( this . _rampAttackTime = this . checkExpInput ( t ) ) ,
( this . _rampDecayTime = this . checkExpInput ( e ) ) ;
var i = 1 ;
( i = Math . log (
1 / this . checkExpInput ( 1 - this . _rampHighPercentage ) ,
) ) ,
( this . _rampAttackTC = t / this . checkExpInput ( i ) ) ,
( i = Math . log ( 1 / this . _rampLowPercentage ) ) ,
( this . _rampDecayTC = e / this . checkExpInput ( i ) ) ;
} ) ,
( t . Envelope . prototype . setRampPercentages = function ( t , e ) {
( this . _rampHighPercentage = this . checkExpInput ( t ) ) ,
( this . _rampLowPercentage = this . checkExpInput ( e ) ) ;
var i = 1 ;
( i = Math . log (
1 / this . checkExpInput ( 1 - this . _rampHighPercentage ) ,
) ) ,
( this . _rampAttackTC =
this . _rampAttackTime / this . checkExpInput ( i ) ) ,
( i = Math . log ( 1 / this . _rampLowPercentage ) ) ,
( this . _rampDecayTC =
this . _rampDecayTime / this . checkExpInput ( i ) ) ;
} ) ,
( t . Envelope . prototype . setInput = function ( ) {
for ( var t = 0 ; t < arguments . length ; t ++ )
this . connect ( arguments [ t ] ) ;
} ) ,
( t . Envelope . prototype . setExp = function ( t ) {
this . isExponential = t ;
} ) ,
( t . Envelope . prototype . checkExpInput = function ( t ) {
return 0 >= t && ( t = 1e-8 ) , t ;
} ) ,
( t . Envelope . prototype . play = function ( t , e , i ) {
var n = e || 0 ,
i = i || 0 ;
t && this . connection !== t && this . connect ( t ) ,
this . triggerAttack ( t , n ) ,
this . triggerRelease ( t , n + this . aTime + this . dTime + i ) ;
} ) ,
( t . Envelope . prototype . triggerAttack = function ( t , i ) {
var n = e . audiocontext . currentTime ,
o = i || 0 ,
r = n + o ;
( this . lastAttack = r ) ,
( this . wasTriggered = ! 0 ) ,
t && this . connection !== t && this . connect ( t ) ;
var s = this . control . getValueAtTime ( r ) ;
this . isExponential === ! 0
? this . control . exponentialRampToValueAtTime (
this . checkExpInput ( s ) ,
r ,
)
: this . control . linearRampToValueAtTime ( s , r ) ,
( r += this . aTime ) ,
this . isExponential === ! 0
? ( this . control . exponentialRampToValueAtTime (
this . checkExpInput ( this . aLevel ) ,
r ,
) ,
( s = this . checkExpInput (
this . control . getValueAtTime ( r ) ,
) ) ,
this . control . cancelScheduledValues ( r ) ,
this . control . exponentialRampToValueAtTime ( s , r ) )
: ( this . control . linearRampToValueAtTime ( this . aLevel , r ) ,
( s = this . control . getValueAtTime ( r ) ) ,
this . control . cancelScheduledValues ( r ) ,
this . control . linearRampToValueAtTime ( s , r ) ) ,
( r += this . dTime ) ,
this . isExponential === ! 0
? ( this . control . exponentialRampToValueAtTime (
this . checkExpInput ( this . dLevel ) ,
r ,
) ,
( s = this . checkExpInput (
this . control . getValueAtTime ( r ) ,
) ) ,
this . control . cancelScheduledValues ( r ) ,
this . control . exponentialRampToValueAtTime ( s , r ) )
: ( this . control . linearRampToValueAtTime ( this . dLevel , r ) ,
( s = this . control . getValueAtTime ( r ) ) ,
this . control . cancelScheduledValues ( r ) ,
this . control . linearRampToValueAtTime ( s , r ) ) ;
} ) ,
( t . Envelope . prototype . triggerRelease = function ( t , i ) {
if ( this . wasTriggered ) {
var n = e . audiocontext . currentTime ,
o = i || 0 ,
r = n + o ;
t && this . connection !== t && this . connect ( t ) ;
var s = this . control . getValueAtTime ( r ) ;
this . isExponential === ! 0
? this . control . exponentialRampToValueAtTime (
this . checkExpInput ( s ) ,
r ,
)
: this . control . linearRampToValueAtTime ( s , r ) ,
( r += this . rTime ) ,
this . isExponential === ! 0
? ( this . control . exponentialRampToValueAtTime (
this . checkExpInput ( this . rLevel ) ,
r ,
) ,
( s = this . checkExpInput (
this . control . getValueAtTime ( r ) ,
) ) ,
this . control . cancelScheduledValues ( r ) ,
this . control . exponentialRampToValueAtTime ( s , r ) )
: ( this . control . linearRampToValueAtTime (
this . rLevel ,
r ,
) ,
( s = this . control . getValueAtTime ( r ) ) ,
this . control . cancelScheduledValues ( r ) ,
this . control . linearRampToValueAtTime ( s , r ) ) ,
( this . wasTriggered = ! 1 ) ;
}
} ) ,
( t . Envelope . prototype . ramp = function ( t , i , n , o ) {
var r = e . audiocontext . currentTime ,
s = i || 0 ,
a = r + s ,
u = this . checkExpInput ( n ) ,
c =
'undefined' != typeof o
? this . checkExpInput ( o )
: void 0 ;
t && this . connection !== t && this . connect ( t ) ;
var p = this . checkExpInput ( this . control . getValueAtTime ( a ) ) ;
u > p
? ( this . control . setTargetAtTime ( u , a , this . _rampAttackTC ) ,
( a += this . _rampAttackTime ) )
: p > u &&
( this . control . setTargetAtTime ( u , a , this . _rampDecayTC ) ,
( a += this . _rampDecayTime ) ) ,
void 0 !== c &&
( c > u
? this . control . setTargetAtTime (
c ,
a ,
this . _rampAttackTC ,
)
: u > c &&
this . control . setTargetAtTime (
c ,
a ,
this . _rampDecayTC ,
) ) ;
} ) ,
( t . Envelope . prototype . connect = function ( i ) {
( this . connection = i ) ,
( i instanceof t . Oscillator ||
i instanceof t . SoundFile ||
i instanceof t . AudioIn ||
i instanceof t . Reverb ||
i instanceof t . Noise ||
i instanceof t . Filter ||
i instanceof t . Delay ) &&
( i = i . output . gain ) ,
i instanceof AudioParam &&
i . setValueAtTime ( 0 , e . audiocontext . currentTime ) ,
i instanceof t . Signal && i . setValue ( 0 ) ,
this . output . connect ( i ) ;
} ) ,
( t . Envelope . prototype . disconnect = function ( ) {
this . output && this . output . disconnect ( ) ;
} ) ,
( t . Envelope . prototype . add = function ( e ) {
var n = new i ( e ) ,
o = this . mathOps . length ,
r = this . output ;
return t . prototype . _mathChain ( this , n , o , r , i ) ;
} ) ,
( t . Envelope . prototype . mult = function ( e ) {
var i = new o ( e ) ,
n = this . mathOps . length ,
r = this . output ;
return t . prototype . _mathChain ( this , i , n , r , o ) ;
} ) ,
( t . Envelope . prototype . scale = function ( e , i , n , o ) {
var s = new r ( e , i , n , o ) ,
a = this . mathOps . length ,
u = this . output ;
return t . prototype . _mathChain ( this , s , a , u , r ) ;
} ) ,
( t . Envelope . prototype . dispose = function ( ) {
var t = e . soundArray . indexOf ( this ) ;
e . soundArray . splice ( t , 1 ) ,
this . disconnect ( ) ,
this . control &&
( this . control . dispose ( ) , ( this . control = null ) ) ;
for ( var i = 1 ; i < this . mathOps . length ; i ++ )
this . mathOps [ i ] . dispose ( ) ;
} ) ,
( t . Env = function ( e , i , n , o , r , s ) {
console . warn (
'WARNING: p5.Env is now deprecated and may be removed in future versions. Please use the new p5.Envelope instead.' ,
) ,
t . Envelope . call ( this , e , i , n , o , r , s ) ;
} ) ,
( t . Env . prototype = Object . create ( t . Envelope . prototype ) ) ;
} ) ( n , S , w , A , F , p ) ;
var M ;
M = ( function ( ) {
function e ( ) {
for (
var t = i . audiocontext ,
e = t . createBuffer ( 1 , 2048 , t . sampleRate ) ,
n = e . getChannelData ( 0 ) ,
o = 0 ;
2048 > o ;
o ++
)
n [ o ] = 1 ;
var r = t . createBufferSource ( ) ;
return ( r . buffer = e ) , ( r . loop = ! 0 ) , r ;
}
var i = n ;
( t . Pulse = function ( n , o ) {
t . Oscillator . call ( this , n , 'sawtooth' ) ,
( this . w = o || 0 ) ,
( this . osc2 = new t . SawOsc ( n ) ) ,
( this . dNode = i . audiocontext . createDelay ( ) ) ,
( this . dcOffset = e ( ) ) ,
( this . dcGain = i . audiocontext . createGain ( ) ) ,
this . dcOffset . connect ( this . dcGain ) ,
this . dcGain . connect ( this . output ) ,
( this . f = n || 440 ) ;
var r = this . w / this . oscillator . frequency . value ;
( this . dNode . delayTime . value = r ) ,
( this . dcGain . gain . value = 1.7 * ( 0.5 - this . w ) ) ,
this . osc2 . disconnect ( ) ,
this . osc2 . panner . disconnect ( ) ,
this . osc2 . amp ( - 1 ) ,
this . osc2 . output . connect ( this . dNode ) ,
this . dNode . connect ( this . output ) ,
( this . output . gain . value = 1 ) ,
this . output . connect ( this . panner ) ;
} ) ,
( t . Pulse . prototype = Object . create ( t . Oscillator . prototype ) ) ,
( t . Pulse . prototype . width = function ( e ) {
if ( 'number' == typeof e ) {
if ( 1 >= e && e >= 0 ) {
this . w = e ;
var i = this . w / this . oscillator . frequency . value ;
this . dNode . delayTime . value = i ;
}
this . dcGain . gain . value = 1.7 * ( 0.5 - this . w ) ;
} else {
e . connect ( this . dNode . delayTime ) ;
var n = new t . SignalAdd ( - 0.5 ) ;
n . setInput ( e ) ,
( n = n . mult ( - 1 ) ) ,
( n = n . mult ( 1.7 ) ) ,
n . connect ( this . dcGain . gain ) ;
}
} ) ,
( t . Pulse . prototype . start = function ( t , n ) {
var o = i . audiocontext . currentTime ,
r = n || 0 ;
if ( ! this . started ) {
var s = t || this . f ,
a = this . oscillator . type ;
( this . oscillator = i . audiocontext . createOscillator ( ) ) ,
this . oscillator . frequency . setValueAtTime ( s , o ) ,
( this . oscillator . type = a ) ,
this . oscillator . connect ( this . output ) ,
this . oscillator . start ( r + o ) ,
( this . osc2 . oscillator =
i . audiocontext . createOscillator ( ) ) ,
this . osc2 . oscillator . frequency . setValueAtTime ( s , r + o ) ,
( this . osc2 . oscillator . type = a ) ,
this . osc2 . oscillator . connect ( this . osc2 . output ) ,
this . osc2 . start ( r + o ) ,
( this . freqNode = [
this . oscillator . frequency ,
this . osc2 . oscillator . frequency ,
] ) ,
( this . dcOffset = e ( ) ) ,
this . dcOffset . connect ( this . dcGain ) ,
this . dcOffset . start ( r + o ) ,
void 0 !== this . mods &&
void 0 !== this . mods . frequency &&
( this . mods . frequency . connect ( this . freqNode [ 0 ] ) ,
this . mods . frequency . connect ( this . freqNode [ 1 ] ) ) ,
( this . started = ! 0 ) ,
( this . osc2 . started = ! 0 ) ;
}
} ) ,
( t . Pulse . prototype . stop = function ( t ) {
if ( this . started ) {
var e = t || 0 ,
n = i . audiocontext . currentTime ;
this . oscillator . stop ( e + n ) ,
this . osc2 . oscillator &&
this . osc2 . oscillator . stop ( e + n ) ,
this . dcOffset . stop ( e + n ) ,
( this . started = ! 1 ) ,
( this . osc2 . started = ! 1 ) ;
}
} ) ,
( t . Pulse . prototype . freq = function ( t , e , n ) {
if ( 'number' == typeof t ) {
this . f = t ;
var o = i . audiocontext . currentTime ,
e = e || 0 ,
n = n || 0 ,
r = this . oscillator . frequency . value ;
this . oscillator . frequency . cancelScheduledValues ( o ) ,
this . oscillator . frequency . setValueAtTime ( r , o + n ) ,
this . oscillator . frequency . exponentialRampToValueAtTime (
t ,
n + e + o ,
) ,
this . osc2 . oscillator . frequency . cancelScheduledValues ( o ) ,
this . osc2 . oscillator . frequency . setValueAtTime ( r , o + n ) ,
this . osc2 . oscillator . frequency . exponentialRampToValueAtTime (
t ,
n + e + o ,
) ,
this . freqMod &&
( this . freqMod . output . disconnect ( ) ,
( this . freqMod = null ) ) ;
} else
t . output &&
( t . output . disconnect ( ) ,
t . output . connect ( this . oscillator . frequency ) ,
t . output . connect ( this . osc2 . oscillator . frequency ) ,
( this . freqMod = t ) ) ;
} ) ;
} ) ( n , k ) ;
var V ;
V = ( function ( ) {
var e = n ;
( t . Noise = function ( e ) {
var n ;
t . Oscillator . call ( this ) ,
delete this . f ,
delete this . freq ,
delete this . oscillator ,
( n = 'brown' === e ? r : 'pink' === e ? o : i ) ,
( this . buffer = n ) ;
} ) ,
( t . Noise . prototype = Object . create ( t . Oscillator . prototype ) ) ;
var i = ( function ( ) {
for (
var t = 2 * e . audiocontext . sampleRate ,
i = e . audiocontext . createBuffer (
1 ,
t ,
e . audiocontext . sampleRate ,
) ,
n = i . getChannelData ( 0 ) ,
o = 0 ;
t > o ;
o ++
)
n [ o ] = 2 * Math . random ( ) - 1 ;
return ( i . type = 'white' ) , i ;
} ) ( ) ,
o = ( function ( ) {
var t ,
i ,
n ,
o ,
r ,
s ,
a ,
u = 2 * e . audiocontext . sampleRate ,
c = e . audiocontext . createBuffer (
1 ,
u ,
e . audiocontext . sampleRate ,
) ,
p = c . getChannelData ( 0 ) ;
t = i = n = o = r = s = a = 0 ;
for ( var h = 0 ; u > h ; h ++ ) {
var l = 2 * Math . random ( ) - 1 ;
( t = 0.99886 * t + 0.0555179 * l ) ,
( i = 0.99332 * i + 0.0750759 * l ) ,
( n = 0.969 * n + 0.153852 * l ) ,
( o = 0.8665 * o + 0.3104856 * l ) ,
( r = 0.55 * r + 0.5329522 * l ) ,
( s = - 0.7616 * s - 0.016898 * l ) ,
( p [ h ] = t + i + n + o + r + s + a + 0.5362 * l ) ,
( p [ h ] *= 0.11 ) ,
( a = 0.115926 * l ) ;
}
return ( c . type = 'pink' ) , c ;
} ) ( ) ,
r = ( function ( ) {
for (
var t = 2 * e . audiocontext . sampleRate ,
i = e . audiocontext . createBuffer (
1 ,
t ,
e . audiocontext . sampleRate ,
) ,
n = i . getChannelData ( 0 ) ,
o = 0 ,
r = 0 ;
t > r ;
r ++
) {
var s = 2 * Math . random ( ) - 1 ;
( n [ r ] = ( o + 0.02 * s ) / 1.02 ) , ( o = n [ r ] ) , ( n [ r ] *= 3.5 ) ;
}
return ( i . type = 'brown' ) , i ;
} ) ( ) ;
( t . Noise . prototype . setType = function ( t ) {
switch ( t ) {
case 'white' :
this . buffer = i ;
break ;
case 'pink' :
this . buffer = o ;
break ;
case 'brown' :
this . buffer = r ;
break ;
default :
this . buffer = i ;
}
if ( this . started ) {
var n = e . audiocontext . currentTime ;
this . stop ( n ) , this . start ( n + 0.01 ) ;
}
} ) ,
( t . Noise . prototype . getType = function ( ) {
return this . buffer . type ;
} ) ,
( t . Noise . prototype . start = function ( ) {
this . started && this . stop ( ) ,
( this . noise = e . audiocontext . createBufferSource ( ) ) ,
( this . noise . buffer = this . buffer ) ,
( this . noise . loop = ! 0 ) ,
this . noise . connect ( this . output ) ;
var t = e . audiocontext . currentTime ;
this . noise . start ( t ) , ( this . started = ! 0 ) ;
} ) ,
( t . Noise . prototype . stop = function ( ) {
var t = e . audiocontext . currentTime ;
this . noise && ( this . noise . stop ( t ) , ( this . started = ! 1 ) ) ;
} ) ,
( t . Noise . prototype . dispose = function ( ) {
var t = e . audiocontext . currentTime ,
i = e . soundArray . indexOf ( this ) ;
e . soundArray . splice ( i , 1 ) ,
this . noise && ( this . noise . disconnect ( ) , this . stop ( t ) ) ,
this . output && this . output . disconnect ( ) ,
this . panner && this . panner . disconnect ( ) ,
( this . output = null ) ,
( this . panner = null ) ,
( this . buffer = null ) ,
( this . noise = null ) ;
} ) ;
} ) ( n ) ;
var E ;
E = ( function ( ) {
var e = n ;
( e . inputSources = [ ] ) ,
( t . AudioIn = function ( i ) {
( this . input = e . audiocontext . createGain ( ) ) ,
( this . output = e . audiocontext . createGain ( ) ) ,
( this . stream = null ) ,
( this . mediaStream = null ) ,
( this . currentSource = null ) ,
( this . enabled = ! 1 ) ,
( this . amplitude = new t . Amplitude ( ) ) ,
this . output . connect ( this . amplitude . input ) ,
( window . MediaStreamTrack &&
window . navigator . mediaDevices &&
window . navigator . mediaDevices . getUserMedia ) ||
( i
? i ( )
: window . alert (
'This browser does not support MediaStreamTrack and mediaDevices' ,
) ) ,
e . soundArray . push ( this ) ;
} ) ,
( t . AudioIn . prototype . start = function ( t , i ) {
var n = this ;
this . stream && this . stop ( ) ;
var o = e . inputSources [ n . currentSource ] ,
r = {
audio : {
sampleRate : e . audiocontext . sampleRate ,
echoCancellation : ! 1 ,
} ,
} ;
e . inputSources [ this . currentSource ] &&
( r . audio . deviceId = o . deviceId ) ,
window . navigator . mediaDevices
. getUserMedia ( r )
. then ( function ( i ) {
( n . stream = i ) ,
( n . enabled = ! 0 ) ,
( n . mediaStream =
e . audiocontext . createMediaStreamSource ( i ) ) ,
n . mediaStream . connect ( n . output ) ,
n . amplitude . setInput ( n . output ) ,
t && t ( ) ;
} )
[ 'catch' ] ( function ( t ) {
i ? i ( t ) : console . error ( t ) ;
} ) ;
} ) ,
( t . AudioIn . prototype . stop = function ( ) {
this . stream &&
( this . stream . getTracks ( ) . forEach ( function ( t ) {
t . stop ( ) ;
} ) ,
this . mediaStream . disconnect ( ) ,
delete this . mediaStream ,
delete this . stream ) ;
} ) ,
( t . AudioIn . prototype . connect = function ( t ) {
t
? t . hasOwnProperty ( 'input' )
? this . output . connect ( t . input )
: t . hasOwnProperty ( 'analyser' )
? this . output . connect ( t . analyser )
: this . output . connect ( t )
: this . output . connect ( e . input ) ;
} ) ,
( t . AudioIn . prototype . disconnect = function ( ) {
this . output &&
( this . output . disconnect ( ) ,
this . output . connect ( this . amplitude . input ) ) ;
} ) ,
( t . AudioIn . prototype . getLevel = function ( t ) {
return (
t && ( this . amplitude . smoothing = t ) ,
this . amplitude . getLevel ( )
) ;
} ) ,
( t . AudioIn . prototype . amp = function ( t , i ) {
if ( i ) {
var n = i || 0 ,
o = this . output . gain . value ;
this . output . gain . cancelScheduledValues (
e . audiocontext . currentTime ,
) ,
this . output . gain . setValueAtTime (
o ,
e . audiocontext . currentTime ,
) ,
this . output . gain . linearRampToValueAtTime (
t ,
n + e . audiocontext . currentTime ,
) ;
} else
this . output . gain . cancelScheduledValues (
e . audiocontext . currentTime ,
) ,
this . output . gain . setValueAtTime (
t ,
e . audiocontext . currentTime ,
) ;
} ) ,
( t . AudioIn . prototype . getSources = function ( t , i ) {
return new Promise ( function ( n , o ) {
window . navigator . mediaDevices
. enumerateDevices ( )
. then ( function ( i ) {
( e . inputSources = i . filter ( function ( t ) {
return 'audioinput' === t . kind ;
} ) ) ,
n ( e . inputSources ) ,
t && t ( e . inputSources ) ;
} )
[ 'catch' ] ( function ( t ) {
o ( t ) ,
i
? i ( t )
: console . error (
'This browser does not support MediaStreamTrack.getSources()' ,
) ;
} ) ;
} ) ;
} ) ,
( t . AudioIn . prototype . setSource = function ( t ) {
e . inputSources . length > 0 && t < e . inputSources . length
? ( ( this . currentSource = t ) ,
console . log (
'set source to ' ,
e . inputSources [ this . currentSource ] ,
) )
: console . log ( 'unable to set input source' ) ,
this . stream && this . stream . active && this . start ( ) ;
} ) ,
( t . AudioIn . prototype . dispose = function ( ) {
var t = e . soundArray . indexOf ( this ) ;
e . soundArray . splice ( t , 1 ) ,
this . stop ( ) ,
this . output && this . output . disconnect ( ) ,
this . amplitude && this . amplitude . disconnect ( ) ,
delete this . amplitude ,
delete this . output ;
} ) ;
} ) ( n ) ;
var C ;
C = ( function ( t ) {
'use strict' ;
return (
( t . Negate = function ( ) {
this . _multiply = this . input = this . output = new t . Multiply ( - 1 ) ;
} ) ,
t . extend ( t . Negate , t . SignalBase ) ,
( t . Negate . prototype . dispose = function ( ) {
return (
t . prototype . dispose . call ( this ) ,
this . _multiply . dispose ( ) ,
( this . _multiply = null ) ,
this
) ;
} ) ,
t . Negate
) ;
} ) ( p , w ) ;
var R ;
R = ( function ( t ) {
'use strict' ;
return (
( t . Subtract = function ( e ) {
this . createInsOuts ( 2 , 0 ) ,
( this . _sum = this . input [ 0 ] = this . output = new t . Gain ( ) ) ,
( this . _neg = new t . Negate ( ) ) ,
( this . _param = this . input [ 1 ] = new t . Signal ( e ) ) ,
this . _param . chain ( this . _neg , this . _sum ) ;
} ) ,
t . extend ( t . Subtract , t . Signal ) ,
( t . Subtract . prototype . dispose = function ( ) {
return (
t . prototype . dispose . call ( this ) ,
this . _neg . dispose ( ) ,
( this . _neg = null ) ,
this . _sum . disconnect ( ) ,
( this . _sum = null ) ,
this . _param . dispose ( ) ,
( this . _param = null ) ,
this
) ;
} ) ,
t . Subtract
) ;
} ) ( p , S , C , x ) ;
var D ;
D = ( function ( t ) {
'use strict' ;
return (
( t . GreaterThanZero = function ( ) {
( this . _thresh = this . output =
new t . WaveShaper ( function ( t ) {
return 0 >= t ? 0 : 1 ;
} , 127 ) ) ,
( this . _scale = this . input = new t . Multiply ( 1e4 ) ) ,
this . _scale . connect ( this . _thresh ) ;
} ) ,
t . extend ( t . GreaterThanZero , t . SignalBase ) ,
( t . GreaterThanZero . prototype . dispose = function ( ) {
return (
t . prototype . dispose . call ( this ) ,
this . _scale . dispose ( ) ,
( this . _scale = null ) ,
this . _thresh . dispose ( ) ,
( this . _thresh = null ) ,
this
) ;
} ) ,
t . GreaterThanZero
) ;
} ) ( p , x , w ) ;
var N ;
N = ( function ( t ) {
'use strict' ;
return (
( t . GreaterThan = function ( e ) {
this . createInsOuts ( 2 , 0 ) ,
( this . _param = this . input [ 0 ] = new t . Subtract ( e ) ) ,
( this . input [ 1 ] = this . _param . input [ 1 ] ) ,
( this . _gtz = this . output = new t . GreaterThanZero ( ) ) ,
this . _param . connect ( this . _gtz ) ;
} ) ,
t . extend ( t . GreaterThan , t . Signal ) ,
( t . GreaterThan . prototype . dispose = function ( ) {
return (
t . prototype . dispose . call ( this ) ,
this . _param . dispose ( ) ,
( this . _param = null ) ,
this . _gtz . dispose ( ) ,
( this . _gtz = null ) ,
this
) ;
} ) ,
t . GreaterThan
) ;
} ) ( p , D , R ) ;
var B ;
B = ( function ( t ) {
'use strict' ;
return (
( t . Abs = function ( ) {
this . _abs =
this . input =
this . output =
new t . WaveShaper ( function ( t ) {
return 0 === t ? 0 : Math . abs ( t ) ;
} , 127 ) ;
} ) ,
t . extend ( t . Abs , t . SignalBase ) ,
( t . Abs . prototype . dispose = function ( ) {
return (
t . prototype . dispose . call ( this ) ,
this . _abs . dispose ( ) ,
( this . _abs = null ) ,
this
) ;
} ) ,
t . Abs
) ;
} ) ( p , l ) ;
var U ;
U = ( function ( t ) {
'use strict' ;
return (
( t . Modulo = function ( e ) {
this . createInsOuts ( 1 , 0 ) ,
( this . _shaper = new t . WaveShaper ( Math . pow ( 2 , 16 ) ) ) ,
( this . _multiply = new t . Multiply ( ) ) ,
( this . _subtract = this . output = new t . Subtract ( ) ) ,
( this . _modSignal = new t . Signal ( e ) ) ,
this . input . fan ( this . _shaper , this . _subtract ) ,
this . _modSignal . connect ( this . _multiply , 0 , 0 ) ,
this . _shaper . connect ( this . _multiply , 0 , 1 ) ,
this . _multiply . connect ( this . _subtract , 0 , 1 ) ,
this . _setWaveShaper ( e ) ;
} ) ,
t . extend ( t . Modulo , t . SignalBase ) ,
( t . Modulo . prototype . _setWaveShaper = function ( t ) {
this . _shaper . setMap ( function ( e ) {
var i = Math . floor ( ( e + 1e-4 ) / t ) ;
return i ;
} ) ;
} ) ,
Object . defineProperty ( t . Modulo . prototype , 'value' , {
get : function ( ) {
return this . _modSignal . value ;
} ,
set : function ( t ) {
( this . _modSignal . value = t ) , this . _setWaveShaper ( t ) ;
} ,
} ) ,
( t . Modulo . prototype . dispose = function ( ) {
return (
t . prototype . dispose . call ( this ) ,
this . _shaper . dispose ( ) ,
( this . _shaper = null ) ,
this . _multiply . dispose ( ) ,
( this . _multiply = null ) ,
this . _subtract . dispose ( ) ,
( this . _subtract = null ) ,
this . _modSignal . dispose ( ) ,
( this . _modSignal = null ) ,
this
) ;
} ) ,
t . Modulo
) ;
} ) ( p , l , w ) ;
var I ;
I = ( function ( t ) {
'use strict' ;
return (
( t . Pow = function ( e ) {
( this . _exp = this . defaultArg ( e , 1 ) ) ,
( this . _expScaler =
this . input =
this . output =
new t . WaveShaper ( this . _expFunc ( this . _exp ) , 8192 ) ) ;
} ) ,
t . extend ( t . Pow , t . SignalBase ) ,
Object . defineProperty ( t . Pow . prototype , 'value' , {
get : function ( ) {
return this . _exp ;
} ,
set : function ( t ) {
( this . _exp = t ) ,
this . _expScaler . setMap ( this . _expFunc ( this . _exp ) ) ;
} ,
} ) ,
( t . Pow . prototype . _expFunc = function ( t ) {
return function ( e ) {
return Math . pow ( Math . abs ( e ) , t ) ;
} ;
} ) ,
( t . Pow . prototype . dispose = function ( ) {
return (
t . prototype . dispose . call ( this ) ,
this . _expScaler . dispose ( ) ,
( this . _expScaler = null ) ,
this
) ;
} ) ,
t . Pow
) ;
} ) ( p ) ;
var G ;
G = ( function ( t ) {
'use strict' ;
return (
( t . AudioToGain = function ( ) {
this . _norm =
this . input =
this . output =
new t . WaveShaper ( function ( t ) {
return ( t + 1 ) / 2 ;
} ) ;
} ) ,
t . extend ( t . AudioToGain , t . SignalBase ) ,
( t . AudioToGain . prototype . dispose = function ( ) {
return (
t . prototype . dispose . call ( this ) ,
this . _norm . dispose ( ) ,
( this . _norm = null ) ,
this
) ;
} ) ,
t . AudioToGain
) ;
} ) ( p , l ) ;
var L ;
L = ( function ( t ) {
'use strict' ;
function e ( t , e , i ) {
var n = new t ( ) ;
return (
i . _eval ( e [ 0 ] ) . connect ( n , 0 , 0 ) ,
i . _eval ( e [ 1 ] ) . connect ( n , 0 , 1 ) ,
n
) ;
}
function i ( t , e , i ) {
var n = new t ( ) ;
return i . _eval ( e [ 0 ] ) . connect ( n , 0 , 0 ) , n ;
}
function n ( t ) {
return t ? parseFloat ( t ) : void 0 ;
}
function o ( t ) {
return t && t . args ? parseFloat ( t . args ) : void 0 ;
}
return (
( t . Expr = function ( ) {
var t = this . _replacements (
Array . prototype . slice . call ( arguments ) ,
) ,
e = this . _parseInputs ( t ) ;
( this . _nodes = [ ] ) , ( this . input = new Array ( e ) ) ;
for ( var i = 0 ; e > i ; i ++ )
this . input [ i ] = this . context . createGain ( ) ;
var n ,
o = this . _parseTree ( t ) ;
try {
n = this . _eval ( o ) ;
} catch ( r ) {
throw (
( this . _disposeNodes ( ) ,
new Error ( 'Tone.Expr: Could evaluate expression: ' + t ) )
) ;
}
this . output = n ;
} ) ,
t . extend ( t . Expr , t . SignalBase ) ,
( t . Expr . _Expressions = {
value : {
signal : {
regexp : /^\d+\.\d+|^\d+/ ,
method : function ( e ) {
var i = new t . Signal ( n ( e ) ) ;
return i ;
} ,
} ,
input : {
regexp : /^\$\d/ ,
method : function ( t , e ) {
return e . input [ n ( t . substr ( 1 ) ) ] ;
} ,
} ,
} ,
glue : {
'(' : { regexp : /^\(/ } ,
')' : { regexp : /^\)/ } ,
',' : { regexp : /^,/ } ,
} ,
func : {
abs : { regexp : /^abs/ , method : i . bind ( this , t . Abs ) } ,
mod : {
regexp : /^mod/ ,
method : function ( e , i ) {
var n = o ( e [ 1 ] ) ,
r = new t . Modulo ( n ) ;
return i . _eval ( e [ 0 ] ) . connect ( r ) , r ;
} ,
} ,
pow : {
regexp : /^pow/ ,
method : function ( e , i ) {
var n = o ( e [ 1 ] ) ,
r = new t . Pow ( n ) ;
return i . _eval ( e [ 0 ] ) . connect ( r ) , r ;
} ,
} ,
a2g : {
regexp : /^a2g/ ,
method : function ( e , i ) {
var n = new t . AudioToGain ( ) ;
return i . _eval ( e [ 0 ] ) . connect ( n ) , n ;
} ,
} ,
} ,
binary : {
'+' : {
regexp : /^\+/ ,
precedence : 1 ,
method : e . bind ( this , t . Add ) ,
} ,
'-' : {
regexp : /^\-/ ,
precedence : 1 ,
method : function ( n , o ) {
return 1 === n . length
? i ( t . Negate , n , o )
: e ( t . Subtract , n , o ) ;
} ,
} ,
'*' : {
regexp : /^\*/ ,
precedence : 0 ,
method : e . bind ( this , t . Multiply ) ,
} ,
} ,
unary : {
'-' : { regexp : /^\-/ , method : i . bind ( this , t . Negate ) } ,
'!' : { regexp : /^\!/ , method : i . bind ( this , t . NOT ) } ,
} ,
} ) ,
( t . Expr . prototype . _parseInputs = function ( t ) {
var e = t . match ( /\$\d/g ) ,
i = 0 ;
if ( null !== e )
for ( var n = 0 ; n < e . length ; n ++ ) {
var o = parseInt ( e [ n ] . substr ( 1 ) ) + 1 ;
i = Math . max ( i , o ) ;
}
return i ;
} ) ,
( t . Expr . prototype . _replacements = function ( t ) {
for ( var e = t . shift ( ) , i = 0 ; i < t . length ; i ++ )
e = e . replace ( /\%/i , t [ i ] ) ;
return e ;
} ) ,
( t . Expr . prototype . _tokenize = function ( e ) {
function i ( e ) {
for ( var i in t . Expr . _Expressions ) {
var n = t . Expr . _Expressions [ i ] ;
for ( var o in n ) {
var r = n [ o ] ,
s = r . regexp ,
a = e . match ( s ) ;
if ( null !== a )
return { type : i , value : a [ 0 ] , method : r . method } ;
}
}
throw new SyntaxError ( 'Tone.Expr: Unexpected token ' + e ) ;
}
for ( var n = - 1 , o = [ ] ; e . length > 0 ; ) {
e = e . trim ( ) ;
var r = i ( e ) ;
o . push ( r ) , ( e = e . substr ( r . value . length ) ) ;
}
return {
next : function ( ) {
return o [ ++ n ] ;
} ,
peek : function ( ) {
return o [ n + 1 ] ;
} ,
} ;
} ) ,
( t . Expr . prototype . _parseTree = function ( e ) {
function i ( t , e ) {
return ! p ( t ) && 'glue' === t . type && t . value === e ;
}
function n ( e , i , n ) {
var o = ! 1 ,
r = t . Expr . _Expressions [ i ] ;
if ( ! p ( e ) )
for ( var s in r ) {
var a = r [ s ] ;
if ( a . regexp . test ( e . value ) ) {
if ( p ( n ) ) return ! 0 ;
if ( a . precedence === n ) return ! 0 ;
}
}
return o ;
}
function o ( t ) {
p ( t ) && ( t = 5 ) ;
var e ;
e = 0 > t ? r ( ) : o ( t - 1 ) ;
for ( var i = c . peek ( ) ; n ( i , 'binary' , t ) ; )
( i = c . next ( ) ) ,
( e = {
operator : i . value ,
method : i . method ,
args : [ e , o ( t - 1 ) ] ,
} ) ,
( i = c . peek ( ) ) ;
return e ;
}
function r ( ) {
var t , e ;
return (
( t = c . peek ( ) ) ,
n ( t , 'unary' )
? ( ( t = c . next ( ) ) ,
( e = r ( ) ) ,
{ operator : t . value , method : t . method , args : [ e ] } )
: s ( )
) ;
}
function s ( ) {
var t , e ;
if ( ( ( t = c . peek ( ) ) , p ( t ) ) )
throw new SyntaxError (
'Tone.Expr: Unexpected termination of expression' ,
) ;
if ( 'func' === t . type ) return ( t = c . next ( ) ) , a ( t ) ;
if ( 'value' === t . type )
return (
( t = c . next ( ) ) , { method : t . method , args : t . value }
) ;
if ( i ( t , '(' ) ) {
if ( ( c . next ( ) , ( e = o ( ) ) , ( t = c . next ( ) ) , ! i ( t , ')' ) ) )
throw new SyntaxError ( 'Expected )' ) ;
return e ;
}
throw new SyntaxError (
'Tone.Expr: Parse error, cannot process token ' +
t . value ,
) ;
}
function a ( t ) {
var e ,
n = [ ] ;
if ( ( ( e = c . next ( ) ) , ! i ( e , '(' ) ) )
throw new SyntaxError (
'Tone.Expr: Expected ( in a function call "' +
t . value +
'"' ,
) ;
if (
( ( e = c . peek ( ) ) ,
i ( e , ')' ) || ( n = u ( ) ) ,
( e = c . next ( ) ) ,
! i ( e , ')' ) )
)
throw new SyntaxError (
'Tone.Expr: Expected ) in a function call "' +
t . value +
'"' ,
) ;
return { method : t . method , args : n , name : name } ;
}
function u ( ) {
for ( var t , e , n = [ ] ; ; ) {
if ( ( ( e = o ( ) ) , p ( e ) ) ) break ;
if ( ( n . push ( e ) , ( t = c . peek ( ) ) , ! i ( t , ',' ) ) ) break ;
c . next ( ) ;
}
return n ;
}
var c = this . _tokenize ( e ) ,
p = this . isUndef . bind ( this ) ;
return o ( ) ;
} ) ,
( t . Expr . prototype . _eval = function ( t ) {
if ( ! this . isUndef ( t ) ) {
var e = t . method ( t . args , this ) ;
return this . _nodes . push ( e ) , e ;
}
} ) ,
( t . Expr . prototype . _disposeNodes = function ( ) {
for ( var t = 0 ; t < this . _nodes . length ; t ++ ) {
var e = this . _nodes [ t ] ;
this . isFunction ( e . dispose )
? e . dispose ( )
: this . isFunction ( e . disconnect ) && e . disconnect ( ) ,
( e = null ) ,
( this . _nodes [ t ] = null ) ;
}
this . _nodes = null ;
} ) ,
( t . Expr . prototype . dispose = function ( ) {
t . prototype . dispose . call ( this ) , this . _disposeNodes ( ) ;
} ) ,
t . Expr
) ;
} ) ( p , S , R , w , N , D , B , C , U , I ) ;
var j ;
j = ( function ( t ) {
'use strict' ;
return (
( t . EqualPowerGain = function ( ) {
this . _eqPower =
this . input =
this . output =
new t . WaveShaper (
function ( t ) {
return Math . abs ( t ) < 0.001
? 0
: this . equalPowerScale ( t ) ;
} . bind ( this ) ,
4096 ,
) ;
} ) ,
t . extend ( t . EqualPowerGain , t . SignalBase ) ,
( t . EqualPowerGain . prototype . dispose = function ( ) {
return (
t . prototype . dispose . call ( this ) ,
this . _eqPower . dispose ( ) ,
( this . _eqPower = null ) ,
this
) ;
} ) ,
t . EqualPowerGain
) ;
} ) ( p ) ;
var Z ;
Z = ( function ( t ) {
'use strict' ;
return (
( t . CrossFade = function ( e ) {
this . createInsOuts ( 2 , 1 ) ,
( this . a = this . input [ 0 ] = new t . Gain ( ) ) ,
( this . b = this . input [ 1 ] = new t . Gain ( ) ) ,
( this . fade = new t . Signal (
this . defaultArg ( e , 0.5 ) ,
t . Type . NormalRange ,
) ) ,
( this . _equalPowerA = new t . EqualPowerGain ( ) ) ,
( this . _equalPowerB = new t . EqualPowerGain ( ) ) ,
( this . _invert = new t . Expr ( '1 - $0' ) ) ,
this . a . connect ( this . output ) ,
this . b . connect ( this . output ) ,
this . fade . chain ( this . _equalPowerB , this . b . gain ) ,
this . fade . chain (
this . _invert ,
this . _equalPowerA ,
this . a . gain ,
) ,
this . _readOnly ( 'fade' ) ;
} ) ,
t . extend ( t . CrossFade ) ,
( t . CrossFade . prototype . dispose = function ( ) {
return (
t . prototype . dispose . call ( this ) ,
this . _writable ( 'fade' ) ,
this . _equalPowerA . dispose ( ) ,
( this . _equalPowerA = null ) ,
this . _equalPowerB . dispose ( ) ,
( this . _equalPowerB = null ) ,
this . fade . dispose ( ) ,
( this . fade = null ) ,
this . _invert . dispose ( ) ,
( this . _invert = null ) ,
this . a . dispose ( ) ,
( this . a = null ) ,
this . b . dispose ( ) ,
( this . b = null ) ,
this
) ;
} ) ,
t . CrossFade
) ;
} ) ( p , x , L , j ) ;
var X ;
X = ( function ( ) {
var e = n ,
i = Z ;
return (
( t . Effect = function ( ) {
( this . ac = e . audiocontext ) ,
( this . input = this . ac . createGain ( ) ) ,
( this . output = this . ac . createGain ( ) ) ,
( this . _drywet = new i ( 1 ) ) ,
( this . wet = this . ac . createGain ( ) ) ,
this . input . connect ( this . _drywet . a ) ,
this . wet . connect ( this . _drywet . b ) ,
this . _drywet . connect ( this . output ) ,
this . connect ( ) ,
e . soundArray . push ( this ) ;
} ) ,
( t . Effect . prototype . amp = function ( t , i , n ) {
var i = i || 0 ,
n = n || 0 ,
o = e . audiocontext . currentTime ,
r = this . output . gain . value ;
this . output . gain . cancelScheduledValues ( o ) ,
this . output . gain . linearRampToValueAtTime ( r , o + n + 0.001 ) ,
this . output . gain . linearRampToValueAtTime (
t ,
o + n + i + 0.001 ,
) ;
} ) ,
( t . Effect . prototype . chain = function ( ) {
if ( arguments . length > 0 ) {
this . connect ( arguments [ 0 ] ) ;
for ( var t = 1 ; t < arguments . length ; t += 1 )
arguments [ t - 1 ] . connect ( arguments [ t ] ) ;
}
return this ;
} ) ,
( t . Effect . prototype . drywet = function ( t ) {
return (
'undefined' != typeof t && ( this . _drywet . fade . value = t ) ,
this . _drywet . fade . value
) ;
} ) ,
( t . Effect . prototype . connect = function ( e ) {
var i = e || t . soundOut . input ;
this . output . connect ( i . input ? i . input : i ) ;
} ) ,
( t . Effect . prototype . disconnect = function ( ) {
this . output && this . output . disconnect ( ) ;
} ) ,
( t . Effect . prototype . dispose = function ( ) {
var t = e . soundArray . indexOf ( this ) ;
e . soundArray . splice ( t , 1 ) ,
this . input && ( this . input . disconnect ( ) , delete this . input ) ,
this . output &&
( this . output . disconnect ( ) , delete this . output ) ,
this . _drywet &&
( this . _drywet . disconnect ( ) , delete this . _drywet ) ,
this . wet && ( this . wet . disconnect ( ) , delete this . wet ) ,
( this . ac = void 0 ) ;
} ) ,
t . Effect
) ;
} ) ( n , Z ) ;
var Y ;
Y = ( function ( ) {
var e = X ;
return (
( t . Filter = function ( t ) {
e . call ( this ) ,
( this . biquad = this . ac . createBiquadFilter ( ) ) ,
this . input . connect ( this . biquad ) ,
this . biquad . connect ( this . wet ) ,
t && this . setType ( t ) ,
( this . _on = ! 0 ) ,
( this . _untoggledType = this . biquad . type ) ;
} ) ,
( t . Filter . prototype = Object . create ( e . prototype ) ) ,
( t . Filter . prototype . process = function ( t , e , i , n ) {
t . connect ( this . input ) , this . set ( e , i , n ) ;
} ) ,
( t . Filter . prototype . set = function ( t , e , i ) {
t && this . freq ( t , i ) , e && this . res ( e , i ) ;
} ) ,
( t . Filter . prototype . freq = function ( t , e ) {
var i = e || 0 ;
return (
0 >= t && ( t = 1 ) ,
'number' == typeof t
? ( ( this . biquad . frequency . value = t ) ,
this . biquad . frequency . cancelScheduledValues (
this . ac . currentTime + 0.01 + i ,
) ,
this . biquad . frequency . exponentialRampToValueAtTime (
t ,
this . ac . currentTime + 0.02 + i ,
) )
: t && t . connect ( this . biquad . frequency ) ,
this . biquad . frequency . value
) ;
} ) ,
( t . Filter . prototype . res = function ( t , e ) {
var i = e || 0 ;
return (
'number' == typeof t
? ( ( this . biquad . Q . value = t ) ,
this . biquad . Q . cancelScheduledValues (
this . ac . currentTime + 0.01 + i ,
) ,
this . biquad . Q . linearRampToValueAtTime (
t ,
this . ac . currentTime + 0.02 + i ,
) )
: t && t . connect ( this . biquad . Q ) ,
this . biquad . Q . value
) ;
} ) ,
( t . Filter . prototype . gain = function ( t , e ) {
var i = e || 0 ;
return (
'number' == typeof t
? ( ( this . biquad . gain . value = t ) ,
this . biquad . gain . cancelScheduledValues (
this . ac . currentTime + 0.01 + i ,
) ,
this . biquad . gain . linearRampToValueAtTime (
t ,
this . ac . currentTime + 0.02 + i ,
) )
: t && t . connect ( this . biquad . gain ) ,
this . biquad . gain . value
) ;
} ) ,
( t . Filter . prototype . toggle = function ( ) {
return (
( this . _on = ! this . _on ) ,
this . _on === ! 0
? ( this . biquad . type = this . _untoggledType )
: this . _on === ! 1 && ( this . biquad . type = 'allpass' ) ,
this . _on
) ;
} ) ,
( t . Filter . prototype . setType = function ( t ) {
( this . biquad . type = t ) ,
( this . _untoggledType = this . biquad . type ) ;
} ) ,
( t . Filter . prototype . dispose = function ( ) {
e . prototype . dispose . apply ( this ) ,
this . biquad &&
( this . biquad . disconnect ( ) , delete this . biquad ) ;
} ) ,
( t . LowPass = function ( ) {
t . Filter . call ( this , 'lowpass' ) ;
} ) ,
( t . LowPass . prototype = Object . create ( t . Filter . prototype ) ) ,
( t . HighPass = function ( ) {
t . Filter . call ( this , 'highpass' ) ;
} ) ,
( t . HighPass . prototype = Object . create ( t . Filter . prototype ) ) ,
( t . BandPass = function ( ) {
t . Filter . call ( this , 'bandpass' ) ;
} ) ,
( t . BandPass . prototype = Object . create ( t . Filter . prototype ) ) ,
t . Filter
) ;
} ) ( n , X ) ;
var z ;
z = ( function ( ) {
var e = Y ,
i = n ,
o = function ( t , i ) {
e . call ( this , 'peaking' ) ,
this . disconnect ( ) ,
this . set ( t , i ) ,
( this . biquad . gain . value = 0 ) ,
delete this . input ,
delete this . output ,
delete this . _drywet ,
delete this . wet ;
} ;
return (
( o . prototype = Object . create ( e . prototype ) ) ,
( o . prototype . amp = function ( ) {
console . warn (
'`amp()` is not available for p5.EQ bands. Use `.gain()`' ,
) ;
} ) ,
( o . prototype . drywet = function ( ) {
console . warn ( '`drywet()` is not available for p5.EQ bands.' ) ;
} ) ,
( o . prototype . connect = function ( e ) {
var i = e || t . soundOut . input ;
this . biquad
? this . biquad . connect ( i . input ? i . input : i )
: this . output . connect ( i . input ? i . input : i ) ;
} ) ,
( o . prototype . disconnect = function ( ) {
this . biquad && this . biquad . disconnect ( ) ;
} ) ,
( o . prototype . dispose = function ( ) {
var t = i . soundArray . indexOf ( this ) ;
i . soundArray . splice ( t , 1 ) ,
this . disconnect ( ) ,
delete this . biquad ;
} ) ,
o
) ;
} ) ( Y , n ) ;
var W ;
W = ( function ( ) {
var e = X ,
i = z ;
return (
( t . EQ = function ( t ) {
e . call ( this ) , ( t = 3 === t || 8 === t ? t : 3 ) ;
var i ;
( i = 3 === t ? Math . pow ( 2 , 3 ) : 2 ) , ( this . bands = [ ] ) ;
for ( var n , o , r = 0 ; t > r ; r ++ )
r === t - 1
? ( ( n = 21e3 ) , ( o = 0.01 ) )
: 0 === r
? ( ( n = 100 ) , ( o = 0.1 ) )
: 1 === r
? ( ( n = 3 === t ? 360 * i : 360 ) , ( o = 1 ) )
: ( ( n = this . bands [ r - 1 ] . freq ( ) * i ) , ( o = 1 ) ) ,
( this . bands [ r ] = this . _newBand ( n , o ) ) ,
r > 0
? this . bands [ r - 1 ] . connect ( this . bands [ r ] . biquad )
: this . input . connect ( this . bands [ r ] . biquad ) ;
this . bands [ t - 1 ] . connect ( this . output ) ;
} ) ,
( t . EQ . prototype = Object . create ( e . prototype ) ) ,
( t . EQ . prototype . process = function ( t ) {
t . connect ( this . input ) ;
} ) ,
( t . EQ . prototype . set = function ( ) {
if ( arguments . length === 2 * this . bands . length )
for ( var t = 0 ; t < arguments . length ; t += 2 )
this . bands [ t / 2 ] . freq ( arguments [ t ] ) ,
this . bands [ t / 2 ] . gain ( arguments [ t + 1 ] ) ;
else
console . error (
'Argument mismatch. .set() should be called with ' +
2 * this . bands . length +
' arguments. (one frequency and gain value pair for each band of the eq)' ,
) ;
} ) ,
( t . EQ . prototype . _newBand = function ( t , e ) {
return new i ( t , e ) ;
} ) ,
( t . EQ . prototype . dispose = function ( ) {
if ( ( e . prototype . dispose . apply ( this ) , this . bands ) ) {
for ( ; this . bands . length > 0 ; )
delete this . bands . pop ( ) . dispose ( ) ;
delete this . bands ;
}
} ) ,
t . EQ
) ;
} ) ( X , z ) ;
var Q ;
Q = ( function ( ) {
var e = X ;
return (
( t . Panner3D = function ( ) {
e . call ( this ) ,
( this . panner = this . ac . createPanner ( ) ) ,
( this . panner . panningModel = 'HRTF' ) ,
( this . panner . distanceModel = 'linear' ) ,
this . panner . connect ( this . output ) ,
this . input . connect ( this . panner ) ;
} ) ,
( t . Panner3D . prototype = Object . create ( e . prototype ) ) ,
( t . Panner3D . prototype . process = function ( t ) {
t . connect ( this . input ) ;
} ) ,
( t . Panner3D . prototype . set = function ( t , e , i , n ) {
return (
this . positionX ( t , n ) ,
this . positionY ( e , n ) ,
this . positionZ ( i , n ) ,
[
this . panner . positionX . value ,
this . panner . positionY . value ,
this . panner . positionZ . value ,
]
) ;
} ) ,
( t . Panner3D . prototype . positionX = function ( t , e ) {
var i = e || 0 ;
return (
'number' == typeof t
? ( ( this . panner . positionX . value = t ) ,
this . panner . positionX . cancelScheduledValues (
this . ac . currentTime + 0.01 + i ,
) ,
this . panner . positionX . linearRampToValueAtTime (
t ,
this . ac . currentTime + 0.02 + i ,
) )
: t && t . connect ( this . panner . positionX ) ,
this . panner . positionX . value
) ;
} ) ,
( t . Panner3D . prototype . positionY = function ( t , e ) {
var i = e || 0 ;
return (
'number' == typeof t
? ( ( this . panner . positionY . value = t ) ,
this . panner . positionY . cancelScheduledValues (
this . ac . currentTime + 0.01 + i ,
) ,
this . panner . positionY . linearRampToValueAtTime (
t ,
this . ac . currentTime + 0.02 + i ,
) )
: t && t . connect ( this . panner . positionY ) ,
this . panner . positionY . value
) ;
} ) ,
( t . Panner3D . prototype . positionZ = function ( t , e ) {
var i = e || 0 ;
return (
'number' == typeof t
? ( ( this . panner . positionZ . value = t ) ,
this . panner . positionZ . cancelScheduledValues (
this . ac . currentTime + 0.01 + i ,
) ,
this . panner . positionZ . linearRampToValueAtTime (
t ,
this . ac . currentTime + 0.02 + i ,
) )
: t && t . connect ( this . panner . positionZ ) ,
this . panner . positionZ . value
) ;
} ) ,
( t . Panner3D . prototype . orient = function ( t , e , i , n ) {
return (
this . orientX ( t , n ) ,
this . orientY ( e , n ) ,
this . orientZ ( i , n ) ,
[
this . panner . orientationX . value ,
this . panner . orientationY . value ,
this . panner . orientationZ . value ,
]
) ;
} ) ,
( t . Panner3D . prototype . orientX = function ( t , e ) {
var i = e || 0 ;
return (
'number' == typeof t
? ( ( this . panner . orientationX . value = t ) ,
this . panner . orientationX . cancelScheduledValues (
this . ac . currentTime + 0.01 + i ,
) ,
this . panner . orientationX . linearRampToValueAtTime (
t ,
this . ac . currentTime + 0.02 + i ,
) )
: t && t . connect ( this . panner . orientationX ) ,
this . panner . orientationX . value
) ;
} ) ,
( t . Panner3D . prototype . orientY = function ( t , e ) {
var i = e || 0 ;
return (
'number' == typeof t
? ( ( this . panner . orientationY . value = t ) ,
this . panner . orientationY . cancelScheduledValues (
this . ac . currentTime + 0.01 + i ,
) ,
this . panner . orientationY . linearRampToValueAtTime (
t ,
this . ac . currentTime + 0.02 + i ,
) )
: t && t . connect ( this . panner . orientationY ) ,
this . panner . orientationY . value
) ;
} ) ,
( t . Panner3D . prototype . orientZ = function ( t , e ) {
var i = e || 0 ;
return (
'number' == typeof t
? ( ( this . panner . orientationZ . value = t ) ,
this . panner . orientationZ . cancelScheduledValues (
this . ac . currentTime + 0.01 + i ,
) ,
this . panner . orientationZ . linearRampToValueAtTime (
t ,
this . ac . currentTime + 0.02 + i ,
) )
: t && t . connect ( this . panner . orientationZ ) ,
this . panner . orientationZ . value
) ;
} ) ,
( t . Panner3D . prototype . setFalloff = function ( t , e ) {
this . maxDist ( t ) , this . rolloff ( e ) ;
} ) ,
( t . Panner3D . prototype . maxDist = function ( t ) {
return (
'number' == typeof t && ( this . panner . maxDistance = t ) ,
this . panner . maxDistance
) ;
} ) ,
( t . Panner3D . prototype . rolloff = function ( t ) {
return (
'number' == typeof t && ( this . panner . rolloffFactor = t ) ,
this . panner . rolloffFactor
) ;
} ) ,
( t . Panner3D . dispose = function ( ) {
e . prototype . dispose . apply ( this ) ,
this . panner &&
( this . panner . disconnect ( ) , delete this . panner ) ;
} ) ,
t . Panner3D
) ;
} ) ( n , X ) ;
var H ;
H = ( function ( ) {
var e = n ;
return (
( t . Listener3D = function ( t ) {
( this . ac = e . audiocontext ) , ( this . listener = this . ac . listener ) ;
} ) ,
( t . Listener3D . prototype . process = function ( t ) {
t . connect ( this . input ) ;
} ) ,
( t . Listener3D . prototype . position = function ( t , e , i , n ) {
return (
this . positionX ( t , n ) ,
this . positionY ( e , n ) ,
this . positionZ ( i , n ) ,
[
this . listener . positionX . value ,
this . listener . positionY . value ,
this . listener . positionZ . value ,
]
) ;
} ) ,
( t . Listener3D . prototype . positionX = function ( t , e ) {
var i = e || 0 ;
return (
'number' == typeof t
? ( ( this . listener . positionX . value = t ) ,
this . listener . positionX . cancelScheduledValues (
this . ac . currentTime + 0.01 + i ,
) ,
this . listener . positionX . linearRampToValueAtTime (
t ,
this . ac . currentTime + 0.02 + i ,
) )
: t && t . connect ( this . listener . positionX ) ,
this . listener . positionX . value
) ;
} ) ,
( t . Listener3D . prototype . positionY = function ( t , e ) {
var i = e || 0 ;
return (
'number' == typeof t
? ( ( this . listener . positionY . value = t ) ,
this . listener . positionY . cancelScheduledValues (
this . ac . currentTime + 0.01 + i ,
) ,
this . listener . positionY . linearRampToValueAtTime (
t ,
this . ac . currentTime + 0.02 + i ,
) )
: t && t . connect ( this . listener . positionY ) ,
this . listener . positionY . value
) ;
} ) ,
( t . Listener3D . prototype . positionZ = function ( t , e ) {
var i = e || 0 ;
return (
'number' == typeof t
? ( ( this . listener . positionZ . value = t ) ,
this . listener . positionZ . cancelScheduledValues (
this . ac . currentTime + 0.01 + i ,
) ,
this . listener . positionZ . linearRampToValueAtTime (
t ,
this . ac . currentTime + 0.02 + i ,
) )
: t && t . connect ( this . listener . positionZ ) ,
this . listener . positionZ . value
) ;
} ) ,
( t . Listener3D . prototype . orient = function ( t , e , i , n , o , r , s ) {
return (
3 === arguments . length || 4 === arguments . length
? ( ( s = arguments [ 3 ] ) , this . orientForward ( t , e , i , s ) )
: ( 6 === arguments . length || 7 === arguments ) &&
( this . orientForward ( t , e , i ) ,
this . orientUp ( n , o , r , s ) ) ,
[
this . listener . forwardX . value ,
this . listener . forwardY . value ,
this . listener . forwardZ . value ,
this . listener . upX . value ,
this . listener . upY . value ,
this . listener . upZ . value ,
]
) ;
} ) ,
( t . Listener3D . prototype . orientForward = function ( t , e , i , n ) {
return (
this . forwardX ( t , n ) ,
this . forwardY ( e , n ) ,
this . forwardZ ( i , n ) ,
[
this . listener . forwardX ,
this . listener . forwardY ,
this . listener . forwardZ ,
]
) ;
} ) ,
( t . Listener3D . prototype . orientUp = function ( t , e , i , n ) {
return (
this . upX ( t , n ) ,
this . upY ( e , n ) ,
this . upZ ( i , n ) ,
[ this . listener . upX , this . listener . upY , this . listener . upZ ]
) ;
} ) ,
( t . Listener3D . prototype . forwardX = function ( t , e ) {
var i = e || 0 ;
return (
'number' == typeof t
? ( ( this . listener . forwardX . value = t ) ,
this . listener . forwardX . cancelScheduledValues (
this . ac . currentTime + 0.01 + i ,
) ,
this . listener . forwardX . linearRampToValueAtTime (
t ,
this . ac . currentTime + 0.02 + i ,
) )
: t && t . connect ( this . listener . forwardX ) ,
this . listener . forwardX . value
) ;
} ) ,
( t . Listener3D . prototype . forwardY = function ( t , e ) {
var i = e || 0 ;
return (
'number' == typeof t
? ( ( this . listener . forwardY . value = t ) ,
this . listener . forwardY . cancelScheduledValues (
this . ac . currentTime + 0.01 + i ,
) ,
this . listener . forwardY . linearRampToValueAtTime (
t ,
this . ac . currentTime + 0.02 + i ,
) )
: t && t . connect ( this . listener . forwardY ) ,
this . listener . forwardY . value
) ;
} ) ,
( t . Listener3D . prototype . forwardZ = function ( t , e ) {
var i = e || 0 ;
return (
'number' == typeof t
? ( ( this . listener . forwardZ . value = t ) ,
this . listener . forwardZ . cancelScheduledValues (
this . ac . currentTime + 0.01 + i ,
) ,
this . listener . forwardZ . linearRampToValueAtTime (
t ,
this . ac . currentTime + 0.02 + i ,
) )
: t && t . connect ( this . listener . forwardZ ) ,
this . listener . forwardZ . value
) ;
} ) ,
( t . Listener3D . prototype . upX = function ( t , e ) {
var i = e || 0 ;
return (
'number' == typeof t
? ( ( this . listener . upX . value = t ) ,
this . listener . upX . cancelScheduledValues (
this . ac . currentTime + 0.01 + i ,
) ,
this . listener . upX . linearRampToValueAtTime (
t ,
this . ac . currentTime + 0.02 + i ,
) )
: t && t . connect ( this . listener . upX ) ,
this . listener . upX . value
) ;
} ) ,
( t . Listener3D . prototype . upY = function ( t , e ) {
var i = e || 0 ;
return (
'number' == typeof t
? ( ( this . listener . upY . value = t ) ,
this . listener . upY . cancelScheduledValues (
this . ac . currentTime + 0.01 + i ,
) ,
this . listener . upY . linearRampToValueAtTime (
t ,
this . ac . currentTime + 0.02 + i ,
) )
: t && t . connect ( this . listener . upY ) ,
this . listener . upY . value
) ;
} ) ,
( t . Listener3D . prototype . upZ = function ( t , e ) {
var i = e || 0 ;
return (
'number' == typeof t
? ( ( this . listener . upZ . value = t ) ,
this . listener . upZ . cancelScheduledValues (
this . ac . currentTime + 0.01 + i ,
) ,
this . listener . upZ . linearRampToValueAtTime (
t ,
this . ac . currentTime + 0.02 + i ,
) )
: t && t . connect ( this . listener . upZ ) ,
this . listener . upZ . value
) ;
} ) ,
t . Listener3D
) ;
} ) ( n , X ) ;
var $ ;
$ = ( function ( ) {
var e = Y ,
i = X ;
( t . Delay = function ( ) {
i . call ( this ) ,
( this . _split = this . ac . createChannelSplitter ( 2 ) ) ,
( this . _merge = this . ac . createChannelMerger ( 2 ) ) ,
( this . _leftGain = this . ac . createGain ( ) ) ,
( this . _rightGain = this . ac . createGain ( ) ) ,
( this . leftDelay = this . ac . createDelay ( ) ) ,
( this . rightDelay = this . ac . createDelay ( ) ) ,
( this . _leftFilter = new e ( ) ) ,
( this . _rightFilter = new e ( ) ) ,
this . _leftFilter . disconnect ( ) ,
this . _rightFilter . disconnect ( ) ,
this . _leftFilter . biquad . frequency . setValueAtTime (
1200 ,
this . ac . currentTime ,
) ,
this . _rightFilter . biquad . frequency . setValueAtTime (
1200 ,
this . ac . currentTime ,
) ,
this . _leftFilter . biquad . Q . setValueAtTime (
0.3 ,
this . ac . currentTime ,
) ,
this . _rightFilter . biquad . Q . setValueAtTime (
0.3 ,
this . ac . currentTime ,
) ,
this . input . connect ( this . _split ) ,
this . leftDelay . connect ( this . _leftGain ) ,
this . rightDelay . connect ( this . _rightGain ) ,
this . _leftGain . connect ( this . _leftFilter . input ) ,
this . _rightGain . connect ( this . _rightFilter . input ) ,
this . _merge . connect ( this . wet ) ,
this . _leftFilter . biquad . gain . setValueAtTime (
1 ,
this . ac . currentTime ,
) ,
this . _rightFilter . biquad . gain . setValueAtTime (
1 ,
this . ac . currentTime ,
) ,
this . setType ( 0 ) ,
( this . _maxDelay = this . leftDelay . delayTime . maxValue ) ,
this . feedback ( 0.5 ) ;
} ) ,
( t . Delay . prototype = Object . create ( i . prototype ) ) ,
( t . Delay . prototype . process = function ( t , e , i , n ) {
var o = i || 0 ,
r = e || 0 ;
if ( o >= 1 )
throw new Error (
'Feedback value will force a positive feedback loop.' ,
) ;
if ( r >= this . _maxDelay )
throw new Error (
'Delay Time exceeds maximum delay time of ' +
this . _maxDelay +
' second.' ,
) ;
t . connect ( this . input ) ,
this . leftDelay . delayTime . setValueAtTime (
r ,
this . ac . currentTime ,
) ,
this . rightDelay . delayTime . setValueAtTime (
r ,
this . ac . currentTime ,
) ,
( this . _leftGain . gain . value = o ) ,
( this . _rightGain . gain . value = o ) ,
n && ( this . _leftFilter . freq ( n ) , this . _rightFilter . freq ( n ) ) ;
} ) ,
( t . Delay . prototype . delayTime = function ( t ) {
'number' != typeof t
? ( t . connect ( this . leftDelay . delayTime ) ,
t . connect ( this . rightDelay . delayTime ) )
: ( this . leftDelay . delayTime . cancelScheduledValues (
this . ac . currentTime ,
) ,
this . rightDelay . delayTime . cancelScheduledValues (
this . ac . currentTime ,
) ,
this . leftDelay . delayTime . linearRampToValueAtTime (
t ,
this . ac . currentTime ,
) ,
this . rightDelay . delayTime . linearRampToValueAtTime (
t ,
this . ac . currentTime ,
) ) ;
} ) ,
( t . Delay . prototype . feedback = function ( t ) {
if ( t && 'number' != typeof t )
t . connect ( this . _leftGain . gain ) ,
t . connect ( this . _rightGain . gain ) ;
else {
if ( t >= 1 )
throw new Error (
'Feedback value will force a positive feedback loop.' ,
) ;
'number' == typeof t &&
( ( this . _leftGain . gain . value = t ) ,
( this . _rightGain . gain . value = t ) ) ;
}
return this . _leftGain . gain . value ;
} ) ,
( t . Delay . prototype . filter = function ( t , e ) {
this . _leftFilter . set ( t , e ) , this . _rightFilter . set ( t , e ) ;
} ) ,
( t . Delay . prototype . setType = function ( t ) {
switch (
( 1 === t && ( t = 'pingPong' ) ,
this . _split . disconnect ( ) ,
this . _leftFilter . disconnect ( ) ,
this . _rightFilter . disconnect ( ) ,
this . _split . connect ( this . leftDelay , 0 ) ,
this . _split . connect ( this . rightDelay , 1 ) ,
t )
) {
case 'pingPong' :
this . _rightFilter . setType ( this . _leftFilter . biquad . type ) ,
this . _leftFilter . output . connect ( this . _merge , 0 , 0 ) ,
this . _rightFilter . output . connect ( this . _merge , 0 , 1 ) ,
this . _leftFilter . output . connect ( this . rightDelay ) ,
this . _rightFilter . output . connect ( this . leftDelay ) ;
break ;
default :
this . _leftFilter . output . connect ( this . _merge , 0 , 0 ) ,
this . _rightFilter . output . connect ( this . _merge , 0 , 1 ) ,
this . _leftFilter . output . connect ( this . leftDelay ) ,
this . _rightFilter . output . connect ( this . rightDelay ) ;
}
} ) ,
( t . Delay . prototype . dispose = function ( ) {
i . prototype . dispose . apply ( this ) ,
this . _split . disconnect ( ) ,
this . _leftFilter . dispose ( ) ,
this . _rightFilter . dispose ( ) ,
this . _merge . disconnect ( ) ,
this . _leftGain . disconnect ( ) ,
this . _rightGain . disconnect ( ) ,
this . leftDelay . disconnect ( ) ,
this . rightDelay . disconnect ( ) ,
( this . _split = void 0 ) ,
( this . _leftFilter = void 0 ) ,
( this . _rightFilter = void 0 ) ,
( this . _merge = void 0 ) ,
( this . _leftGain = void 0 ) ,
( this . _rightGain = void 0 ) ,
( this . leftDelay = void 0 ) ,
( this . rightDelay = void 0 ) ;
} ) ;
} ) ( Y , X ) ;
var J ;
J = ( function ( ) {
var e = r ,
i = X ;
( t . Reverb = function ( ) {
i . call ( this ) ,
( this . convolverNode = this . ac . createConvolver ( ) ) ,
( this . input . gain . value = 0.5 ) ,
this . input . connect ( this . convolverNode ) ,
this . convolverNode . connect ( this . wet ) ,
( this . _seconds = 3 ) ,
( this . _decay = 2 ) ,
( this . _reverse = ! 1 ) ,
this . _buildImpulse ( ) ;
} ) ,
( t . Reverb . prototype = Object . create ( i . prototype ) ) ,
( t . Reverb . prototype . process = function ( t , e , i , n ) {
t . connect ( this . input ) ;
var o = ! 1 ;
e && ( ( this . _seconds = e ) , ( o = ! 0 ) ) ,
i && ( this . _decay = i ) ,
n && ( this . _reverse = n ) ,
o && this . _buildImpulse ( ) ;
} ) ,
( t . Reverb . prototype . set = function ( t , e , i ) {
var n = ! 1 ;
t && ( ( this . _seconds = t ) , ( n = ! 0 ) ) ,
e && ( this . _decay = e ) ,
i && ( this . _reverse = i ) ,
n && this . _buildImpulse ( ) ;
} ) ,
( t . Reverb . prototype . _buildImpulse = function ( ) {
var t ,
e ,
i = this . ac . sampleRate ,
n = i * this . _seconds ,
o = this . _decay ,
r = this . ac . createBuffer ( 2 , n , i ) ,
s = r . getChannelData ( 0 ) ,
a = r . getChannelData ( 1 ) ;
for ( e = 0 ; n > e ; e ++ )
( t = this . _reverse ? n - e : e ) ,
( s [ e ] =
( 2 * Math . random ( ) - 1 ) * Math . pow ( 1 - t / n , o ) ) ,
( a [ e ] =
( 2 * Math . random ( ) - 1 ) * Math . pow ( 1 - t / n , o ) ) ;
this . convolverNode . buffer = r ;
} ) ,
( t . Reverb . prototype . dispose = function ( ) {
i . prototype . dispose . apply ( this ) ,
this . convolverNode &&
( ( this . convolverNode . buffer = null ) ,
( this . convolverNode = null ) ) ;
} ) ,
( t . Convolver = function ( t , e , n ) {
i . call ( this ) ,
( this . convolverNode = this . ac . createConvolver ( ) ) ,
( this . input . gain . value = 0.5 ) ,
this . input . connect ( this . convolverNode ) ,
this . convolverNode . connect ( this . wet ) ,
t
? ( ( this . impulses = [ ] ) , this . _loadBuffer ( t , e , n ) )
: ( ( this . _seconds = 3 ) ,
( this . _decay = 2 ) ,
( this . _reverse = ! 1 ) ,
this . _buildImpulse ( ) ) ;
} ) ,
( t . Convolver . prototype = Object . create ( t . Reverb . prototype ) ) ,
t . prototype . registerPreloadMethod ( 'createConvolver' , t . prototype ) ,
( t . prototype . createConvolver = function ( e , i , n ) {
window . location . origin . indexOf ( 'file://' ) > - 1 &&
'undefined' === window . cordova &&
alert (
'This sketch may require a server to load external files. Please see http://bit.ly/1qcInwS' ,
) ;
var o = this ,
r = new t . Convolver (
e ,
function ( t ) {
'function' == typeof i && i ( t ) ,
'function' == typeof o . _decrementPreload &&
o . _decrementPreload ( ) ;
} ,
n ,
) ;
return ( r . impulses = [ ] ) , r ;
} ) ,
( t . Convolver . prototype . _loadBuffer = function ( i , n , o ) {
var i = t . prototype . _checkFileFormats ( i ) ,
r = this ,
s = new Error ( ) . stack ,
a = t . prototype . getAudioContext ( ) ,
u = new XMLHttpRequest ( ) ;
u . open ( 'GET' , i , ! 0 ) ,
( u . responseType = 'arraybuffer' ) ,
( u . onload = function ( ) {
if ( 200 === u . status )
a . decodeAudioData (
u . response ,
function ( t ) {
var e = { } ,
o = i . split ( '/' ) ;
( e . name = o [ o . length - 1 ] ) ,
( e . audioBuffer = t ) ,
r . impulses . push ( e ) ,
( r . convolverNode . buffer =
e . audioBuffer ) ,
n && n ( e ) ;
} ,
function ( ) {
var t = new e ( 'decodeAudioData' , s , r . url ) ,
i =
'AudioContext error at decodeAudioData for ' +
r . url ;
o
? ( ( t . msg = i ) , o ( t ) )
: console . error (
i +
'\n The error stack trace includes: \n' +
t . stack ,
) ;
} ,
) ;
else {
var t = new e ( 'loadConvolver' , s , r . url ) ,
c =
'Unable to load ' +
r . url +
'. The request status was: ' +
u . status +
' (' +
u . statusText +
')' ;
o
? ( ( t . message = c ) , o ( t ) )
: console . error (
c +
'\n The error stack trace includes: \n' +
t . stack ,
) ;
}
} ) ,
( u . onerror = function ( ) {
var t = new e ( 'loadConvolver' , s , r . url ) ,
i =
'There was no response from the server at ' +
r . url +
'. Check the url and internet connectivity.' ;
o
? ( ( t . message = i ) , o ( t ) )
: console . error (
i +
'\n The error stack trace includes: \n' +
t . stack ,
) ;
} ) ,
u . send ( ) ;
} ) ,
( t . Convolver . prototype . set = null ) ,
( t . Convolver . prototype . process = function ( t ) {
t . connect ( this . input ) ;
} ) ,
( t . Convolver . prototype . impulses = [ ] ) ,
( t . Convolver . prototype . addImpulse = function ( t , e , i ) {
window . location . origin . indexOf ( 'file://' ) > - 1 &&
'undefined' === window . cordova &&
alert (
'This sketch may require a server to load external files. Please see http://bit.ly/1qcInwS' ,
) ,
this . _loadBuffer ( t , e , i ) ;
} ) ,
( t . Convolver . prototype . resetImpulse = function ( t , e , i ) {
window . location . origin . indexOf ( 'file://' ) > - 1 &&
'undefined' === window . cordova &&
alert (
'This sketch may require a server to load external files. Please see http://bit.ly/1qcInwS' ,
) ,
( this . impulses = [ ] ) ,
this . _loadBuffer ( t , e , i ) ;
} ) ,
( t . Convolver . prototype . toggleImpulse = function ( t ) {
if (
( 'number' == typeof t &&
t < this . impulses . length &&
( this . convolverNode . buffer =
this . impulses [ t ] . audioBuffer ) ,
'string' == typeof t )
)
for ( var e = 0 ; e < this . impulses . length ; e ++ )
if ( this . impulses [ e ] . name === t ) {
this . convolverNode . buffer =
this . impulses [ e ] . audioBuffer ;
break ;
}
} ) ,
( t . Convolver . prototype . dispose = function ( ) {
i . prototype . dispose . apply ( this ) ;
for ( var t in this . impulses )
this . impulses [ t ] && ( this . impulses [ t ] = null ) ;
this . convolverNode &&
( this . convolverNode . disconnect ( ) ,
( this . concolverNode = null ) ) ;
} ) ;
} ) ( r , X ) ;
var K ;
K = ( function ( t ) {
'use strict' ;
return (
( t . TimelineState = function ( e ) {
t . Timeline . call ( this ) , ( this . _initial = e ) ;
} ) ,
t . extend ( t . TimelineState , t . Timeline ) ,
( t . TimelineState . prototype . getValueAtTime = function ( t ) {
var e = this . get ( t ) ;
return null !== e ? e . state : this . _initial ;
} ) ,
( t . TimelineState . prototype . setStateAtTime = function ( t , e ) {
this . add ( { state : t , time : e } ) ;
} ) ,
t . TimelineState
) ;
} ) ( p , O ) ;
var tt ;
tt = ( function ( t ) {
'use strict' ;
return (
( t . Clock = function ( ) {
t . Emitter . call ( this ) ;
var e = this . optionsObject (
arguments ,
[ 'callback' , 'frequency' ] ,
t . Clock . defaults ,
) ;
( this . callback = e . callback ) ,
( this . _nextTick = 0 ) ,
( this . _lastState = t . State . Stopped ) ,
( this . frequency = new t . TimelineSignal (
e . frequency ,
t . Type . Frequency ,
) ) ,
this . _readOnly ( 'frequency' ) ,
( this . ticks = 0 ) ,
( this . _state = new t . TimelineState ( t . State . Stopped ) ) ,
( this . _boundLoop = this . _loop . bind ( this ) ) ,
this . context . on ( 'tick' , this . _boundLoop ) ;
} ) ,
t . extend ( t . Clock , t . Emitter ) ,
( t . Clock . defaults = {
callback : t . noOp ,
frequency : 1 ,
lookAhead : 'auto' ,
} ) ,
Object . defineProperty ( t . Clock . prototype , 'state' , {
get : function ( ) {
return this . _state . getValueAtTime ( this . now ( ) ) ;
} ,
} ) ,
( t . Clock . prototype . start = function ( e , i ) {
return (
( e = this . toSeconds ( e ) ) ,
this . _state . getValueAtTime ( e ) !== t . State . Started &&
this . _state . add ( {
state : t . State . Started ,
time : e ,
offset : i ,
} ) ,
this
) ;
} ) ,
( t . Clock . prototype . stop = function ( e ) {
return (
( e = this . toSeconds ( e ) ) ,
this . _state . cancel ( e ) ,
this . _state . setStateAtTime ( t . State . Stopped , e ) ,
this
) ;
} ) ,
( t . Clock . prototype . pause = function ( e ) {
return (
( e = this . toSeconds ( e ) ) ,
this . _state . getValueAtTime ( e ) === t . State . Started &&
this . _state . setStateAtTime ( t . State . Paused , e ) ,
this
) ;
} ) ,
( t . Clock . prototype . _loop = function ( ) {
for (
var e = this . now ( ) ,
i = this . context . lookAhead ,
n = this . context . updateInterval ,
o = 2 * this . context . lag ,
r = e + i + n + o ;
r > this . _nextTick && this . _state ;
) {
var s = this . _state . getValueAtTime ( this . _nextTick ) ;
if ( s !== this . _lastState ) {
this . _lastState = s ;
var a = this . _state . get ( this . _nextTick ) ;
s === t . State . Started
? ( ( this . _nextTick = a . time ) ,
this . isUndef ( a . offset ) || ( this . ticks = a . offset ) ,
this . emit ( 'start' , a . time , this . ticks ) )
: s === t . State . Stopped
? ( ( this . ticks = 0 ) , this . emit ( 'stop' , a . time ) )
: s === t . State . Paused &&
this . emit ( 'pause' , a . time ) ;
}
var u = this . _nextTick ;
this . frequency &&
( ( this . _nextTick +=
1 / this . frequency . getValueAtTime ( this . _nextTick ) ) ,
s === t . State . Started &&
( this . callback ( u ) , this . ticks ++ ) ) ;
}
} ) ,
( t . Clock . prototype . getStateAtTime = function ( t ) {
return ( t = this . toSeconds ( t ) ) , this . _state . getValueAtTime ( t ) ;
} ) ,
( t . Clock . prototype . dispose = function ( ) {
t . Emitter . prototype . dispose . call ( this ) ,
this . context . off ( 'tick' , this . _boundLoop ) ,
this . _writable ( 'frequency' ) ,
this . frequency . dispose ( ) ,
( this . frequency = null ) ,
( this . _boundLoop = null ) ,
( this . _nextTick = 1 / 0 ) ,
( this . callback = null ) ,
this . _state . dispose ( ) ,
( this . _state = null ) ;
} ) ,
t . Clock
) ;
} ) ( p , F , K , v ) ;
var et ;
et = ( function ( ) {
var e = n ,
i = tt ;
( t . Metro = function ( ) {
( this . clock = new i ( { callback : this . ontick . bind ( this ) } ) ) ,
( this . syncedParts = [ ] ) ,
( this . bpm = 120 ) ,
this . _init ( ) ,
( this . prevTick = 0 ) ,
( this . tatumTime = 0 ) ,
( this . tickCallback = function ( ) { } ) ;
} ) ,
( t . Metro . prototype . ontick = function ( t ) {
var i = t - this . prevTick ,
n = t - e . audiocontext . currentTime ;
if ( ! ( i - this . tatumTime <= - 0.02 ) ) {
this . prevTick = t ;
var o = this ;
this . syncedParts . forEach ( function ( t ) {
t . isPlaying &&
( t . incrementStep ( n ) ,
t . phrases . forEach ( function ( t ) {
var e = t . sequence ,
i = o . metroTicks % e . length ;
0 !== e [ i ] &&
( o . metroTicks < e . length || ! t . looping ) &&
t . callback ( n , e [ i ] ) ;
} ) ) ;
} ) ,
( this . metroTicks += 1 ) ,
this . tickCallback ( n ) ;
}
} ) ,
( t . Metro . prototype . setBPM = function ( t , i ) {
var n = 60 / ( t * this . tatums ) ,
o = e . audiocontext . currentTime ;
this . tatumTime = n ;
var i = i || 0 ;
this . clock . frequency . setValueAtTime (
this . clock . frequency . value ,
o ,
) ,
this . clock . frequency . linearRampToValueAtTime ( t , o + i ) ,
( this . bpm = t ) ;
} ) ,
( t . Metro . prototype . getBPM = function ( ) {
return ( this . clock . getRate ( ) / this . tatums ) * 60 ;
} ) ,
( t . Metro . prototype . _init = function ( ) {
this . metroTicks = 0 ;
} ) ,
( t . Metro . prototype . resetSync = function ( t ) {
this . syncedParts = [ t ] ;
} ) ,
( t . Metro . prototype . pushSync = function ( t ) {
this . syncedParts . push ( t ) ;
} ) ,
( t . Metro . prototype . start = function ( t ) {
var i = t || 0 ,
n = e . audiocontext . currentTime ;
this . clock . start ( n + i ) , this . setBPM ( this . bpm ) ;
} ) ,
( t . Metro . prototype . stop = function ( t ) {
var i = t || 0 ,
n = e . audiocontext . currentTime ;
this . clock . stop ( n + i ) ;
} ) ,
( t . Metro . prototype . beatLength = function ( t ) {
this . tatums = 1 / t / 4 ;
} ) ;
} ) ( n , tt ) ;
var it ;
it = ( function ( ) {
function e ( t ) {
t . currentPart ++ ,
t . currentPart >= t . parts . length
? ( ( t . scoreStep = 0 ) , t . onended ( ) )
: ( ( t . scoreStep = 0 ) ,
t . parts [ t . currentPart - 1 ] . stop ( ) ,
t . parts [ t . currentPart ] . start ( ) ) ;
}
var i = n ,
o = 120 ;
( t . prototype . setBPM = function ( t , e ) {
o = t ;
for ( var n in i . parts ) i . parts [ n ] && i . parts [ n ] . setBPM ( t , e ) ;
} ) ,
( t . Phrase = function ( t , e , i ) {
( this . phraseStep = 0 ) ,
( this . name = t ) ,
( this . callback = e ) ,
( this . sequence = i ) ;
} ) ,
( t . Part = function ( e , n ) {
( this . length = e || 0 ) ,
( this . partStep = 0 ) ,
( this . phrases = [ ] ) ,
( this . isPlaying = ! 1 ) ,
this . noLoop ( ) ,
( this . tatums = n || 0.0625 ) ,
( this . metro = new t . Metro ( ) ) ,
this . metro . _init ( ) ,
this . metro . beatLength ( this . tatums ) ,
this . metro . setBPM ( o ) ,
i . parts . push ( this ) ,
( this . callback = function ( ) { } ) ;
} ) ,
( t . Part . prototype . setBPM = function ( t , e ) {
this . metro . setBPM ( t , e ) ;
} ) ,
( t . Part . prototype . getBPM = function ( ) {
return this . metro . getBPM ( ) ;
} ) ,
( t . Part . prototype . start = function ( t ) {
if ( ! this . isPlaying ) {
( this . isPlaying = ! 0 ) , this . metro . resetSync ( this ) ;
var e = t || 0 ;
this . metro . start ( e ) ;
}
} ) ,
( t . Part . prototype . loop = function ( t ) {
( this . looping = ! 0 ) ,
( this . onended = function ( ) {
this . partStep = 0 ;
} ) ;
var e = t || 0 ;
this . start ( e ) ;
} ) ,
( t . Part . prototype . noLoop = function ( ) {
( this . looping = ! 1 ) ,
( this . onended = function ( ) {
this . stop ( ) ;
} ) ;
} ) ,
( t . Part . prototype . stop = function ( t ) {
( this . partStep = 0 ) , this . pause ( t ) ;
} ) ,
( t . Part . prototype . pause = function ( t ) {
this . isPlaying = ! 1 ;
var e = t || 0 ;
this . metro . stop ( e ) ;
} ) ,
( t . Part . prototype . addPhrase = function ( e , i , n ) {
var o ;
if ( 3 === arguments . length ) o = new t . Phrase ( e , i , n ) ;
else {
if ( ! ( arguments [ 0 ] instanceof t . Phrase ) )
throw 'invalid input. addPhrase accepts name, callback, array or a p5.Phrase' ;
o = arguments [ 0 ] ;
}
this . phrases . push ( o ) ,
o . sequence . length > this . length &&
( this . length = o . sequence . length ) ;
} ) ,
( t . Part . prototype . removePhrase = function ( t ) {
for ( var e in this . phrases )
this . phrases [ e ] . name === t && this . phrases . splice ( e , 1 ) ;
} ) ,
( t . Part . prototype . getPhrase = function ( t ) {
for ( var e in this . phrases )
if ( this . phrases [ e ] . name === t ) return this . phrases [ e ] ;
} ) ,
( t . Part . prototype . replaceSequence = function ( t , e ) {
for ( var i in this . phrases )
this . phrases [ i ] . name === t &&
( this . phrases [ i ] . sequence = e ) ;
} ) ,
( t . Part . prototype . incrementStep = function ( t ) {
this . partStep < this . length - 1
? ( this . callback ( t ) , ( this . partStep += 1 ) )
: this . looping ||
this . partStep !== this . length - 1 ||
( console . log ( 'done' ) , this . onended ( ) ) ;
} ) ,
( t . Part . prototype . onStep = function ( t ) {
this . callback = t ;
} ) ,
( t . Score = function ( ) {
( this . parts = [ ] ) , ( this . currentPart = 0 ) ;
var t = this ;
for ( var i in arguments )
arguments [ i ] &&
this . parts [ i ] &&
( ( this . parts [ i ] = arguments [ i ] ) ,
( this . parts [ i ] . nextPart = this . parts [ i + 1 ] ) ,
( this . parts [ i ] . onended = function ( ) {
t . resetPart ( i ) , e ( t ) ;
} ) ) ;
this . looping = ! 1 ;
} ) ,
( t . Score . prototype . onended = function ( ) {
this . looping
? this . parts [ 0 ] . start ( )
: ( this . parts [ this . parts . length - 1 ] . onended = function ( ) {
this . stop ( ) , this . resetParts ( ) ;
} ) ,
( this . currentPart = 0 ) ;
} ) ,
( t . Score . prototype . start = function ( ) {
this . parts [ this . currentPart ] . start ( ) , ( this . scoreStep = 0 ) ;
} ) ,
( t . Score . prototype . stop = function ( ) {
this . parts [ this . currentPart ] . stop ( ) ,
( this . currentPart = 0 ) ,
( this . scoreStep = 0 ) ;
} ) ,
( t . Score . prototype . pause = function ( ) {
this . parts [ this . currentPart ] . stop ( ) ;
} ) ,
( t . Score . prototype . loop = function ( ) {
( this . looping = ! 0 ) , this . start ( ) ;
} ) ,
( t . Score . prototype . noLoop = function ( ) {
this . looping = ! 1 ;
} ) ,
( t . Score . prototype . resetParts = function ( ) {
var t = this ;
this . parts . forEach ( function ( e ) {
t . resetParts [ e ] ;
} ) ;
} ) ,
( t . Score . prototype . resetPart = function ( t ) {
this . parts [ t ] . stop ( ) , ( this . parts [ t ] . partStep = 0 ) ;
for ( var e in this . parts [ t ] . phrases )
this . parts [ t ] && ( this . parts [ t ] . phrases [ e ] . phraseStep = 0 ) ;
} ) ,
( t . Score . prototype . setBPM = function ( t , e ) {
for ( var i in this . parts )
this . parts [ i ] && this . parts [ i ] . setBPM ( t , e ) ;
} ) ;
} ) ( n ) ;
var nt ;
nt = ( function ( ) {
var e = n ,
i = tt ;
return (
( t . SoundLoop = function ( t , n ) {
( this . callback = t ) ,
( this . musicalTimeMode =
'number' == typeof this . _interval ? ! 1 : ! 0 ) ,
( this . _interval = n || 1 ) ,
( this . _timeSignature = 4 ) ,
( this . _bpm = 60 ) ,
( this . isPlaying = ! 1 ) ,
( this . maxIterations = 1 / 0 ) ;
var o = this ;
this . clock = new i ( {
callback : function ( t ) {
var i = t - e . audiocontext . currentTime ;
i > 0 &&
o . iterations <= o . maxIterations &&
o . callback ( i ) ;
} ,
frequency : this . _calcFreq ( ) ,
} ) ;
} ) ,
( t . SoundLoop . prototype . start = function ( t ) {
var i = t || 0 ,
n = e . audiocontext . currentTime ;
this . isPlaying ||
( this . clock . start ( n + i ) , ( this . isPlaying = ! 0 ) ) ;
} ) ,
( t . SoundLoop . prototype . stop = function ( t ) {
var i = t || 0 ,
n = e . audiocontext . currentTime ;
this . isPlaying &&
( this . clock . stop ( n + i ) , ( this . isPlaying = ! 1 ) ) ;
} ) ,
( t . SoundLoop . prototype . pause = function ( t ) {
var i = t || 0 ,
n = e . audiocontext . currentTime ;
this . isPlaying &&
( this . clock . pause ( n + i ) , ( this . isPlaying = ! 1 ) ) ;
} ) ,
( t . SoundLoop . prototype . syncedStart = function ( t , i ) {
var n = i || 0 ,
o = e . audiocontext . currentTime ;
if ( t . isPlaying ) {
if ( t . isPlaying ) {
var r = t . clock . _nextTick - e . audiocontext . currentTime ;
this . clock . start ( o + r ) , ( this . isPlaying = ! 0 ) ;
}
} else
t . clock . start ( o + n ) ,
( t . isPlaying = ! 0 ) ,
this . clock . start ( o + n ) ,
( this . isPlaying = ! 0 ) ;
} ) ,
( t . SoundLoop . prototype . _update = function ( ) {
this . clock . frequency . value = this . _calcFreq ( ) ;
} ) ,
( t . SoundLoop . prototype . _calcFreq = function ( ) {
return 'number' == typeof this . _interval
? ( ( this . musicalTimeMode = ! 1 ) , 1 / this . _interval )
: 'string' == typeof this . _interval
? ( ( this . musicalTimeMode = ! 0 ) ,
( this . _bpm / 60 / this . _convertNotation ( this . _interval ) ) *
( this . _timeSignature / 4 ) )
: void 0 ;
} ) ,
( t . SoundLoop . prototype . _convertNotation = function ( t ) {
var e = t . slice ( - 1 ) ;
switch ( ( ( t = Number ( t . slice ( 0 , - 1 ) ) ) , e ) ) {
case 'm' :
return this . _measure ( t ) ;
case 'n' :
return this . _note ( t ) ;
default :
console . warn (
'Specified interval is not formatted correctly. See Tone.js timing reference for more info: https://github.com/Tonejs/Tone.js/wiki/Time' ,
) ;
}
} ) ,
( t . SoundLoop . prototype . _measure = function ( t ) {
return t * this . _timeSignature ;
} ) ,
( t . SoundLoop . prototype . _note = function ( t ) {
return this . _timeSignature / t ;
} ) ,
Object . defineProperty ( t . SoundLoop . prototype , 'bpm' , {
get : function ( ) {
return this . _bpm ;
} ,
set : function ( t ) {
this . musicalTimeMode ||
console . warn (
'Changing the BPM in "seconds" mode has no effect. BPM is only relevant in musicalTimeMode when the interval is specified as a string ("2n", "4n", "1m"...etc)' ,
) ,
( this . _bpm = t ) ,
this . _update ( ) ;
} ,
} ) ,
Object . defineProperty ( t . SoundLoop . prototype , 'timeSignature' , {
get : function ( ) {
return this . _timeSignature ;
} ,
set : function ( t ) {
this . musicalTimeMode ||
console . warn (
'Changing the timeSignature in "seconds" mode has no effect. BPM is only relevant in musicalTimeMode when the interval is specified as a string ("2n", "4n", "1m"...etc)' ,
) ,
( this . _timeSignature = t ) ,
this . _update ( ) ;
} ,
} ) ,
Object . defineProperty ( t . SoundLoop . prototype , 'interval' , {
get : function ( ) {
return this . _interval ;
} ,
set : function ( t ) {
( this . musicalTimeMode = 'Number' == typeof t ? ! 1 : ! 0 ) ,
( this . _interval = t ) ,
this . _update ( ) ;
} ,
} ) ,
Object . defineProperty ( t . SoundLoop . prototype , 'iterations' , {
get : function ( ) {
return this . clock . ticks ;
} ,
} ) ,
t . SoundLoop
) ;
} ) ( n , tt ) ;
var ot ;
ot = ( function ( ) {
'use strict' ;
var e = X ;
return (
( t . Compressor = function ( ) {
e . call ( this ) ,
( this . compressor = this . ac . createDynamicsCompressor ( ) ) ,
this . input . connect ( this . compressor ) ,
this . compressor . connect ( this . wet ) ;
} ) ,
( t . Compressor . prototype = Object . create ( e . prototype ) ) ,
( t . Compressor . prototype . process = function ( t , e , i , n , o , r ) {
t . connect ( this . input ) , this . set ( e , i , n , o , r ) ;
} ) ,
( t . Compressor . prototype . set = function ( t , e , i , n , o ) {
'undefined' != typeof t && this . attack ( t ) ,
'undefined' != typeof e && this . knee ( e ) ,
'undefined' != typeof i && this . ratio ( i ) ,
'undefined' != typeof n && this . threshold ( n ) ,
'undefined' != typeof o && this . release ( o ) ;
} ) ,
( t . Compressor . prototype . attack = function ( t , e ) {
var i = e || 0 ;
return (
'number' == typeof t
? ( ( this . compressor . attack . value = t ) ,
this . compressor . attack . cancelScheduledValues (
this . ac . currentTime + 0.01 + i ,
) ,
this . compressor . attack . linearRampToValueAtTime (
t ,
this . ac . currentTime + 0.02 + i ,
) )
: 'undefined' != typeof t &&
t . connect ( this . compressor . attack ) ,
this . compressor . attack . value
) ;
} ) ,
( t . Compressor . prototype . knee = function ( t , e ) {
var i = e || 0 ;
return (
'number' == typeof t
? ( ( this . compressor . knee . value = t ) ,
this . compressor . knee . cancelScheduledValues (
this . ac . currentTime + 0.01 + i ,
) ,
this . compressor . knee . linearRampToValueAtTime (
t ,
this . ac . currentTime + 0.02 + i ,
) )
: 'undefined' != typeof t &&
t . connect ( this . compressor . knee ) ,
this . compressor . knee . value
) ;
} ) ,
( t . Compressor . prototype . ratio = function ( t , e ) {
var i = e || 0 ;
return (
'number' == typeof t
? ( ( this . compressor . ratio . value = t ) ,
this . compressor . ratio . cancelScheduledValues (
this . ac . currentTime + 0.01 + i ,
) ,
this . compressor . ratio . linearRampToValueAtTime (
t ,
this . ac . currentTime + 0.02 + i ,
) )
: 'undefined' != typeof t &&
t . connect ( this . compressor . ratio ) ,
this . compressor . ratio . value
) ;
} ) ,
( t . Compressor . prototype . threshold = function ( t , e ) {
var i = e || 0 ;
return (
'number' == typeof t
? ( ( this . compressor . threshold . value = t ) ,
this . compressor . threshold . cancelScheduledValues (
this . ac . currentTime + 0.01 + i ,
) ,
this . compressor . threshold . linearRampToValueAtTime (
t ,
this . ac . currentTime + 0.02 + i ,
) )
: 'undefined' != typeof t &&
t . connect ( this . compressor . threshold ) ,
this . compressor . threshold . value
) ;
} ) ,
( t . Compressor . prototype . release = function ( t , e ) {
var i = e || 0 ;
return (
'number' == typeof t
? ( ( this . compressor . release . value = t ) ,
this . compressor . release . cancelScheduledValues (
this . ac . currentTime + 0.01 + i ,
) ,
this . compressor . release . linearRampToValueAtTime (
t ,
this . ac . currentTime + 0.02 + i ,
) )
: 'undefined' != typeof number &&
t . connect ( this . compressor . release ) ,
this . compressor . release . value
) ;
} ) ,
( t . Compressor . prototype . reduction = function ( ) {
return this . compressor . reduction . value ;
} ) ,
( t . Compressor . prototype . dispose = function ( ) {
e . prototype . dispose . apply ( this ) ,
this . compressor &&
( this . compressor . disconnect ( ) , delete this . compressor ) ;
} ) ,
t . Compressor
) ;
} ) ( n , X , r ) ;
var rt ;
rt = ( function ( ) {
function e ( t , e ) {
for (
var i = t . length + e . length ,
n = new Float32Array ( i ) ,
o = 0 ,
r = 0 ;
i > r ;
)
( n [ r ++ ] = t [ o ] ) , ( n [ r ++ ] = e [ o ] ) , o ++ ;
return n ;
}
function i ( t , e , i ) {
for ( var n = i . length , o = 0 ; n > o ; o ++ )
t . setUint8 ( e + o , i . charCodeAt ( o ) ) ;
}
var o = n ,
r = o . audiocontext ;
( t . SoundRecorder = function ( ) {
( this . input = r . createGain ( ) ) ,
( this . output = r . createGain ( ) ) ,
( this . recording = ! 1 ) ,
( this . bufferSize = 1024 ) ,
( this . _channels = 2 ) ,
this . _clear ( ) ,
( this . _jsNode = r . createScriptProcessor (
this . bufferSize ,
this . _channels ,
2 ,
) ) ,
( this . _jsNode . onaudioprocess = this . _audioprocess . bind ( this ) ) ,
( this . _callback = function ( ) { } ) ,
this . _jsNode . connect ( t . soundOut . _silentNode ) ,
this . setInput ( ) ,
o . soundArray . push ( this ) ;
} ) ,
( t . SoundRecorder . prototype . setInput = function ( e ) {
this . input . disconnect ( ) ,
( this . input = null ) ,
( this . input = r . createGain ( ) ) ,
this . input . connect ( this . _jsNode ) ,
this . input . connect ( this . output ) ,
e
? e . connect ( this . input )
: t . soundOut . output . connect ( this . input ) ;
} ) ,
( t . SoundRecorder . prototype . record = function ( t , e , i ) {
( this . recording = ! 0 ) ,
e && ( this . sampleLimit = Math . round ( e * r . sampleRate ) ) ,
t && i
? ( this . _callback = function ( ) {
( this . buffer = this . _getBuffer ( ) ) ,
t . setBuffer ( this . buffer ) ,
i ( ) ;
} )
: t &&
( this . _callback = function ( ) {
( this . buffer = this . _getBuffer ( ) ) ,
t . setBuffer ( this . buffer ) ;
} ) ;
} ) ,
( t . SoundRecorder . prototype . stop = function ( ) {
( this . recording = ! 1 ) , this . _callback ( ) , this . _clear ( ) ;
} ) ,
( t . SoundRecorder . prototype . _clear = function ( ) {
( this . _leftBuffers = [ ] ) ,
( this . _rightBuffers = [ ] ) ,
( this . recordedSamples = 0 ) ,
( this . sampleLimit = null ) ;
} ) ,
( t . SoundRecorder . prototype . _audioprocess = function ( t ) {
if ( this . recording !== ! 1 && this . recording === ! 0 )
if (
this . sampleLimit &&
this . recordedSamples >= this . sampleLimit
)
this . stop ( ) ;
else {
var e = t . inputBuffer . getChannelData ( 0 ) ,
i = t . inputBuffer . getChannelData ( 1 ) ;
this . _leftBuffers . push ( new Float32Array ( e ) ) ,
this . _rightBuffers . push ( new Float32Array ( i ) ) ,
( this . recordedSamples += this . bufferSize ) ;
}
} ) ,
( t . SoundRecorder . prototype . _getBuffer = function ( ) {
var t = [ ] ;
return (
t . push ( this . _mergeBuffers ( this . _leftBuffers ) ) ,
t . push ( this . _mergeBuffers ( this . _rightBuffers ) ) ,
t
) ;
} ) ,
( t . SoundRecorder . prototype . _mergeBuffers = function ( t ) {
for (
var e = new Float32Array ( this . recordedSamples ) ,
i = 0 ,
n = t . length ,
o = 0 ;
n > o ;
o ++
) {
var r = t [ o ] ;
e . set ( r , i ) , ( i += r . length ) ;
}
return e ;
} ) ,
( t . SoundRecorder . prototype . dispose = function ( ) {
this . _clear ( ) ;
var t = o . soundArray . indexOf ( this ) ;
o . soundArray . splice ( t , 1 ) ,
( this . _callback = function ( ) { } ) ,
this . input && this . input . disconnect ( ) ,
( this . input = null ) ,
( this . _jsNode = null ) ;
} ) ,
( t . prototype . saveSound = function ( n , o ) {
var r , s ;
( r = n . buffer . getChannelData ( 0 ) ) ,
( s =
n . buffer . numberOfChannels > 1
? n . buffer . getChannelData ( 1 )
: r ) ;
var a = e ( r , s ) ,
u = new window . ArrayBuffer ( 44 + 2 * a . length ) ,
c = new window . DataView ( u ) ;
i ( c , 0 , 'RIFF' ) ,
c . setUint32 ( 4 , 36 + 2 * a . length , ! 0 ) ,
i ( c , 8 , 'WAVE' ) ,
i ( c , 12 , 'fmt ' ) ,
c . setUint32 ( 16 , 16 , ! 0 ) ,
c . setUint16 ( 20 , 1 , ! 0 ) ,
c . setUint16 ( 22 , 2 , ! 0 ) ,
c . setUint32 ( 24 , 44100 , ! 0 ) ,
c . setUint32 ( 28 , 176400 , ! 0 ) ,
c . setUint16 ( 32 , 4 , ! 0 ) ,
c . setUint16 ( 34 , 16 , ! 0 ) ,
i ( c , 36 , 'data' ) ,
c . setUint32 ( 40 , 2 * a . length , ! 0 ) ;
for ( var p = a . length , h = 44 , l = 1 , f = 0 ; p > f ; f ++ )
c . setInt16 ( h , a [ f ] * ( 32767 * l ) , ! 0 ) , ( h += 2 ) ;
t . prototype . writeFile ( [ c ] , o , 'wav' ) ;
} ) ;
} ) ( n ) ;
var st ;
st = ( function ( ) {
( t . PeakDetect = function ( t , e , i , n ) {
( this . framesPerPeak = n || 20 ) ,
( this . framesSinceLastPeak = 0 ) ,
( this . decayRate = 0.95 ) ,
( this . threshold = i || 0.35 ) ,
( this . cutoff = 0 ) ,
( this . cutoffMult = 1.5 ) ,
( this . energy = 0 ) ,
( this . penergy = 0 ) ,
( this . currentValue = 0 ) ,
( this . isDetected = ! 1 ) ,
( this . f1 = t || 40 ) ,
( this . f2 = e || 2e4 ) ,
( this . _onPeak = function ( ) { } ) ;
} ) ,
( t . PeakDetect . prototype . update = function ( t ) {
var e = ( this . energy = t . getEnergy ( this . f1 , this . f2 ) / 255 ) ;
e > this . cutoff && e > this . threshold && e - this . penergy > 0
? ( this . _onPeak ( ) ,
( this . isDetected = ! 0 ) ,
( this . cutoff = e * this . cutoffMult ) ,
( this . framesSinceLastPeak = 0 ) )
: ( ( this . isDetected = ! 1 ) ,
this . framesSinceLastPeak <= this . framesPerPeak
? this . framesSinceLastPeak ++
: ( ( this . cutoff *= this . decayRate ) ,
( this . cutoff = Math . max (
this . cutoff ,
this . threshold ,
) ) ) ) ,
( this . currentValue = e ) ,
( this . penergy = e ) ;
} ) ,
( t . PeakDetect . prototype . onPeak = function ( t , e ) {
var i = this ;
i . _onPeak = function ( ) {
t ( i . energy , e ) ;
} ;
} ) ;
} ) ( ) ;
var at ;
at = ( function ( ) {
var e = n ;
( t . Gain = function ( ) {
( this . ac = e . audiocontext ) ,
( this . input = this . ac . createGain ( ) ) ,
( this . output = this . ac . createGain ( ) ) ,
( this . input . gain . value = 0.5 ) ,
this . input . connect ( this . output ) ,
e . soundArray . push ( this ) ;
} ) ,
( t . Gain . prototype . setInput = function ( t ) {
t . connect ( this . input ) ;
} ) ,
( t . Gain . prototype . connect = function ( e ) {
var i = e || t . soundOut . input ;
this . output . connect ( i . input ? i . input : i ) ;
} ) ,
( t . Gain . prototype . disconnect = function ( ) {
this . output && this . output . disconnect ( ) ;
} ) ,
( t . Gain . prototype . amp = function ( t , i , n ) {
var i = i || 0 ,
n = n || 0 ,
o = e . audiocontext . currentTime ,
r = this . output . gain . value ;
this . output . gain . cancelScheduledValues ( o ) ,
this . output . gain . linearRampToValueAtTime ( r , o + n ) ,
this . output . gain . linearRampToValueAtTime ( t , o + n + i ) ;
} ) ,
( t . Gain . prototype . dispose = function ( ) {
var t = e . soundArray . indexOf ( this ) ;
e . soundArray . splice ( t , 1 ) ,
this . output &&
( this . output . disconnect ( ) , delete this . output ) ,
this . input && ( this . input . disconnect ( ) , delete this . input ) ;
} ) ;
} ) ( n ) ;
var ut ;
ut = ( function ( ) {
var e = n ;
return (
( t . AudioVoice = function ( ) {
( this . ac = e . audiocontext ) ,
( this . output = this . ac . createGain ( ) ) ,
this . connect ( ) ,
e . soundArray . push ( this ) ;
} ) ,
( t . AudioVoice . prototype . play = function ( t , e , i , n ) { } ) ,
( t . AudioVoice . prototype . triggerAttack = function ( t , e , i ) { } ) ,
( t . AudioVoice . prototype . triggerRelease = function ( t ) { } ) ,
( t . AudioVoice . prototype . amp = function ( t , e ) { } ) ,
( t . AudioVoice . prototype . connect = function ( t ) {
var i = t || e . input ;
this . output . connect ( i . input ? i . input : i ) ;
} ) ,
( t . AudioVoice . prototype . disconnect = function ( ) {
this . output . disconnect ( ) ;
} ) ,
( t . AudioVoice . prototype . dispose = function ( ) {
this . output && ( this . output . disconnect ( ) , delete this . output ) ;
} ) ,
t . AudioVoice
) ;
} ) ( n ) ;
var ct ;
ct = ( function ( ) {
var e = n ,
i = ut ,
r = o . noteToFreq ,
s = 0.15 ;
( t . MonoSynth = function ( ) {
i . call ( this ) ,
( this . oscillator = new t . Oscillator ( ) ) ,
( this . env = new t . Envelope ( ) ) ,
this . env . setRange ( 1 , 0 ) ,
this . env . setExp ( ! 0 ) ,
this . setADSR ( 0.02 , 0.25 , 0.05 , 0.35 ) ,
( this . filter = new t . Filter ( 'highpass' ) ) ,
this . filter . set ( 5 , 1 ) ,
this . oscillator . disconnect ( ) ,
this . oscillator . connect ( this . filter ) ,
this . env . disconnect ( ) ,
this . env . setInput ( this . oscillator ) ,
this . filter . connect ( this . output ) ,
this . oscillator . start ( ) ,
this . connect ( ) ,
( this . _isOn = ! 1 ) ,
e . soundArray . push ( this ) ;
} ) ,
( t . MonoSynth . prototype = Object . create ( t . AudioVoice . prototype ) ) ,
( t . MonoSynth . prototype . play = function ( t , e , i , n ) {
this . triggerAttack ( t , e , ~ ~ i ) ,
this . triggerRelease ( ~ ~ i + ( n || s ) ) ;
} ) ,
( t . MonoSynth . prototype . triggerAttack = function ( t , e , i ) {
var i = ~ ~ i ,
n = r ( t ) ,
o = e || 0.1 ;
( this . _isOn = ! 0 ) ,
this . oscillator . freq ( n , 0 , i ) ,
this . env . ramp ( this . output , i , o ) ;
} ) ,
( t . MonoSynth . prototype . triggerRelease = function ( t ) {
var t = t || 0 ;
this . env . ramp ( this . output , t , 0 ) , ( this . _isOn = ! 1 ) ;
} ) ,
( t . MonoSynth . prototype . setADSR = function ( t , e , i , n ) {
this . env . setADSR ( t , e , i , n ) ;
} ) ,
Object . defineProperties ( t . MonoSynth . prototype , {
attack : {
get : function ( ) {
return this . env . aTime ;
} ,
set : function ( t ) {
this . env . setADSR (
t ,
this . env . dTime ,
this . env . sPercent ,
this . env . rTime ,
) ;
} ,
} ,
decay : {
get : function ( ) {
return this . env . dTime ;
} ,
set : function ( t ) {
this . env . setADSR (
this . env . aTime ,
t ,
this . env . sPercent ,
this . env . rTime ,
) ;
} ,
} ,
sustain : {
get : function ( ) {
return this . env . sPercent ;
} ,
set : function ( t ) {
this . env . setADSR (
this . env . aTime ,
this . env . dTime ,
t ,
this . env . rTime ,
) ;
} ,
} ,
release : {
get : function ( ) {
return this . env . rTime ;
} ,
set : function ( t ) {
this . env . setADSR (
this . env . aTime ,
this . env . dTime ,
this . env . sPercent ,
t ,
) ;
} ,
} ,
} ) ,
( t . MonoSynth . prototype . amp = function ( t , e ) {
var i = e || 0 ;
return (
'undefined' != typeof t && this . oscillator . amp ( t , i ) ,
this . oscillator . amp ( ) . value
) ;
} ) ,
( t . MonoSynth . prototype . connect = function ( t ) {
var i = t || e . input ;
this . output . connect ( i . input ? i . input : i ) ;
} ) ,
( t . MonoSynth . prototype . disconnect = function ( ) {
this . output && this . output . disconnect ( ) ;
} ) ,
( t . MonoSynth . prototype . dispose = function ( ) {
i . prototype . dispose . apply ( this ) ,
this . filter && this . filter . dispose ( ) ,
this . env && this . env . dispose ( ) ,
this . oscillator && this . oscillator . dispose ( ) ;
} ) ;
} ) ( n , ut , o ) ;
var pt ;
pt = ( function ( ) {
var e = n ,
i = F ,
r = o . noteToFreq ;
( t . PolySynth = function ( n , o ) {
( this . audiovoices = [ ] ) ,
( this . notes = { } ) ,
( this . _newest = 0 ) ,
( this . _oldest = 0 ) ,
( this . maxVoices = o || 8 ) ,
( this . AudioVoice = void 0 === n ? t . MonoSynth : n ) ,
( this . _voicesInUse = new i ( 0 ) ) ,
( this . output = e . audiocontext . createGain ( ) ) ,
this . connect ( ) ,
this . _allocateVoices ( ) ,
e . soundArray . push ( this ) ;
} ) ,
( t . PolySynth . prototype . _allocateVoices = function ( ) {
for ( var t = 0 ; t < this . maxVoices ; t ++ )
this . audiovoices . push ( new this . AudioVoice ( ) ) ,
this . audiovoices [ t ] . disconnect ( ) ,
this . audiovoices [ t ] . connect ( this . output ) ;
} ) ,
( t . PolySynth . prototype . play = function ( t , e , i , n ) {
var n = n || 1 ;
this . noteAttack ( t , e , i ) , this . noteRelease ( t , i + n ) ;
} ) ,
( t . PolySynth . prototype . noteADSR = function ( t , i , n , o , r , s ) {
var a = e . audiocontext . currentTime ,
s = s || 0 ,
u = a + s ;
this . audiovoices [ this . notes [ t ] . getValueAtTime ( u ) ] . setADSR (
i ,
n ,
o ,
r ,
) ;
} ) ,
( t . PolySynth . prototype . setADSR = function ( t , e , i , n ) {
this . audiovoices . forEach ( function ( o ) {
o . setADSR ( t , e , i , n ) ;
} ) ;
} ) ,
( t . PolySynth . prototype . noteAttack = function ( n , o , s ) {
var a ,
s = ~ ~ s ,
u = e . audiocontext . currentTime + s ,
c = r ( n ) ,
p = o || 0.1 ;
if (
( this . notes [ c ] &&
null !== this . notes [ c ] . getValueAtTime ( u ) &&
this . noteRelease ( c , 0 ) ,
this . _voicesInUse . getValueAtTime ( u ) < this . maxVoices )
)
a = Math . max ( ~ ~ this . _voicesInUse . getValueAtTime ( u ) , 0 ) ;
else {
a = this . _oldest ;
var h = t . prototype . freqToMidi (
this . audiovoices [ this . _oldest ] . oscillator . freq ( ) . value ,
) ;
this . noteRelease ( h ) ,
( this . _oldest =
( this . _oldest + 1 ) % ( this . maxVoices - 1 ) ) ;
}
( this . notes [ c ] = new i ( ) ) , this . notes [ c ] . setValueAtTime ( a , u ) ;
var l =
null === this . _voicesInUse . _searchBefore ( u )
? 0
: this . _voicesInUse . _searchBefore ( u ) . value ;
if (
( this . _voicesInUse . setValueAtTime ( l + 1 , u ) ,
this . _updateAfter ( u , 1 ) ,
( this . _newest = a ) ,
'number' == typeof p )
) {
var f = ( 1 / this . _voicesInUse . getValueAtTime ( u ) ) * 2 ;
p = p > f ? f : p ;
}
this . audiovoices [ a ] . triggerAttack ( c , p , s ) ;
} ) ,
( t . PolySynth . prototype . _updateAfter = function ( t , e ) {
if ( null !== this . _voicesInUse . _searchAfter ( t ) ) {
this . _voicesInUse . _searchAfter ( t ) . value += e ;
var i = this . _voicesInUse . _searchAfter ( t ) . time ;
this . _updateAfter ( i , e ) ;
}
} ) ,
( t . PolySynth . prototype . noteRelease = function ( t , i ) {
var n = e . audiocontext . currentTime ,
o = i || 0 ,
s = n + o ;
if ( t ) {
var a = r ( t ) ;
if (
this . notes [ a ] &&
null !== this . notes [ a ] . getValueAtTime ( s )
) {
var u = Math . max (
~ ~ this . _voicesInUse . getValueAtTime ( s ) . value ,
1 ,
) ;
this . _voicesInUse . setValueAtTime ( u - 1 , s ) ,
u > 0 && this . _updateAfter ( s , - 1 ) ,
this . audiovoices [
this . notes [ a ] . getValueAtTime ( s )
] . triggerRelease ( o ) ,
this . notes [ a ] . dispose ( ) ,
delete this . notes [ a ] ,
( this . _newest =
0 === this . _newest
? 0
: ( this . _newest - 1 ) %
( this . maxVoices - 1 ) ) ;
} else
console . warn (
'Cannot release a note that is not already playing' ,
) ;
} else {
this . audiovoices . forEach ( function ( t ) {
t . triggerRelease ( o ) ;
} ) ,
this . _voicesInUse . setValueAtTime ( 0 , s ) ;
for ( var c in this . notes )
this . notes [ c ] . dispose ( ) , delete this . notes [ c ] ;
}
} ) ,
( t . PolySynth . prototype . connect = function ( t ) {
var i = t || e . input ;
this . output . connect ( i . input ? i . input : i ) ;
} ) ,
( t . PolySynth . prototype . disconnect = function ( ) {
this . output && this . output . disconnect ( ) ;
} ) ,
( t . PolySynth . prototype . dispose = function ( ) {
this . audiovoices . forEach ( function ( t ) {
t . dispose ( ) ;
} ) ,
this . output &&
( this . output . disconnect ( ) , delete this . output ) ;
} ) ;
} ) ( n , F , o ) ;
var ht ;
ht = ( function ( ) {
function e ( t ) {
for (
var e ,
i = 'number' == typeof t ? t : 50 ,
n = 44100 ,
o = new Float32Array ( n ) ,
r = Math . PI / 180 ,
s = 0 ;
n > s ;
++ s
)
( e = ( 2 * s ) / n - 1 ) ,
( o [ s ] =
( ( 3 + i ) * e * 20 * r ) / ( Math . PI + i * Math . abs ( e ) ) ) ;
return o ;
}
var i = X ;
( t . Distortion = function ( n , o ) {
if (
( i . call ( this ) ,
'undefined' == typeof n && ( n = 0.25 ) ,
'number' != typeof n )
)
throw new Error ( 'amount must be a number' ) ;
if ( ( 'undefined' == typeof o && ( o = '2x' ) , 'string' != typeof o ) )
throw new Error ( 'oversample must be a String' ) ;
var r = t . prototype . map ( n , 0 , 1 , 0 , 2e3 ) ;
( this . waveShaperNode = this . ac . createWaveShaper ( ) ) ,
( this . amount = r ) ,
( this . waveShaperNode . curve = e ( r ) ) ,
( this . waveShaperNode . oversample = o ) ,
this . input . connect ( this . waveShaperNode ) ,
this . waveShaperNode . connect ( this . wet ) ;
} ) ,
( t . Distortion . prototype = Object . create ( i . prototype ) ) ,
( t . Distortion . prototype . process = function ( t , e , i ) {
t . connect ( this . input ) , this . set ( e , i ) ;
} ) ,
( t . Distortion . prototype . set = function ( i , n ) {
if ( i ) {
var o = t . prototype . map ( i , 0 , 1 , 0 , 2e3 ) ;
( this . amount = o ) , ( this . waveShaperNode . curve = e ( o ) ) ;
}
n && ( this . waveShaperNode . oversample = n ) ;
} ) ,
( t . Distortion . prototype . getAmount = function ( ) {
return this . amount ;
} ) ,
( t . Distortion . prototype . getOversample = function ( ) {
return this . waveShaperNode . oversample ;
} ) ,
( t . Distortion . prototype . dispose = function ( ) {
i . prototype . dispose . apply ( this ) ,
this . waveShaperNode &&
( this . waveShaperNode . disconnect ( ) ,
( this . waveShaperNode = null ) ) ;
} ) ;
} ) ( X ) ;
var lt ;
lt = ( function ( ) {
var t = n ;
return t ;
} ) (
e ,
i ,
n ,
o ,
r ,
s ,
a ,
u ,
c ,
P ,
k ,
q ,
M ,
V ,
E ,
Y ,
W ,
Q ,
H ,
$ ,
J ,
et ,
it ,
nt ,
ot ,
rt ,
st ,
at ,
ct ,
pt ,
ht ,
ut ,
ct ,
pt ,
) ;
} ) ;