<!-- SS · part 173 -->
e,maxDelay:t.maxDelay}),this.delayTime=this._delayNode.delayTime,this.connectEffect(this._delayNode),Di(this,"delayTime")}static getDefaults(){return Object.assign(Ca.getDefaults(),{delayTime:.25,maxDelay:1})}dispose(){return super.dispose(),this._delayNode.dispose(),this.delayTime.dispose(),this}}class Da extends io{constructor(t){super(t),this.name="PhaseShiftAllpass",this.input=new ho({context:this.context}),this.output=new ho({context:this.context}),this.offset90=new ho({context:this.context}),this._bank0=this._createAllPassFilterBank([.6923878,.9360654322959,.988229522686,.9987488452737]),this._bank1=this._createAllPassFilterBank([.4021921162426,.856171088242,.9722909545651,.9952884791278]),this._oneSampleDelay=this.context.createIIRFilter([0,1],[1,0]),oo(this.input,...this._bank0,this._oneSampleDelay,this.output),oo(this.input,...this._bank1,this.offset90)}_createAllPassFilterBank(t){return t.map((t=>{const e=[[t*t,0,-1],[1,0,-t*t]];return this.context.createIIRFilter(e[0],e[1])}))}dispose(){return super.dispose(),this.input.dispose(),this.output.dispose(),this.offset90.dispose(),this._bank0.forEach((t=>t.disconnect())),this._bank1.forEach((t=>t.disconnect())),this._oneSampleDelay.disconnect(),this}}class Ma extends la{constructor(){const t=ui(Ma.getDefaults(),arguments,["frequency"]);super(t),this.name="FrequencyShifter",this.frequency=new po({context:this.context,units:"frequency",value:t.frequency,minValue:-this.context.sampleRate/2,maxValue:this.context.sampleRate/2}),this._sine=new Zo({context:this.context,type:"sine"}),this._cosine=new Xo({context:this.context,phase:-90,type:"sine"}),this._sineMultiply=new $o({context:this.context}),this._cosineMultiply=new $o({context:this.context}),this._negate=new _r({context:this.context}),this._add=new ir({context:this.context}),this._phaseShifter=new Da({context:this.context}),this.effectSend.connect(this._phaseShifter),this.frequency.fan(this._sine.frequency,this._cosine.frequency),this._phaseShifter.offset90.connect(this._cosineMultiply),this._cosine.connect(this._cosineMultiply.factor),this._phaseShifter.connect(this._sineMultiply),this._sine.connect(this._sineMultiply.factor),this._sineMultiply.connect(this._negate),this._cosineMultiply.connect(this._add),this._negate.connect(this._add.addend),this._add.connect(this.effectReturn);const e=this.immediate();this._sine.start(e),this._cosine.start(e)}static getDefaults(){return Object.assign(la.getDefaults(),{frequency:0})}dispose(){return super.dispose(),this.frequency.dispose(),this._add.dispose(),this._cosine.dispose(),this._cosineMultiply.dispose(),this._negate.dispose(),this._phaseShifter.dispose(),this._sine.dispose(),this._sineMultiply.dispose(),this}}const Ea=[1557/44100,1617/44100,1491/44100,1422/44100,1277/44100,1356/44100,1188/44100,1116/44100],Ra=[225,556,441,341];class qa extends Ta{constructor(){const t=ui(qa.getDefaults(),arguments,["roomSize","dampening"]);super(t),this.name="Freeverb",this._combFilters=[],this._allpassFiltersL=[],this._allpassFiltersR=[],this.roomSize=new po({context:this.context,value:t.roomSize,units:"normalRange"}),this._allpassFiltersL=Ra.map((t=>{const e=this.context.createBiquadFilter();return e.type="allpass",e.frequency.value=t,e})),this._allpassFiltersR=Ra.map((t=>{const e=this.context.createBiquadFilter();return e.type="allpass",e.frequency.value=t,e})),this._combFilters=Ea.map(((e,s)=>{const n=new Qr({context:this.context,dampening:t.dampening,delayTime:e});return s<Ea.length/2?this.connectEffectLeft(n,...this._allpassFiltersL):this.connectEffectRight(n,...this._allpassFiltersR),this.roomSize.connect(n.resonance),n})),Di(this,["roomSize"])}static getDefaults(){return Object.assign(Ta.getDefaults(),{roomSize:.7,dampening:3e3})}get dampening(){return this._combFilters[0].dampening}set dampening(t){this._combFilters.forEach((e=>e.dampening=t))}dispose(){return super.dispose(),this._allpassFiltersL.forEach((t=>t.disconnect())),this._allpassFiltersR.forEach((t=>t.disconnect())),this._combFilters.forEach((t=>t.dispose())),this.roomSize.dispose(),this}}const Ia=[.06748,.06404,.08212,.09004],Fa=[.773,.802,.753,.733],Va=[347,113,37];class Na extends Ta{constructor(){const t=ui(Na.getDefaults(),arguments,["roomSize"]);super(t),this.name="JCReverb",this._allpassFilters=[],this._feedbackCombFilters=[],this.roomSize=new po({context:this.context,value:t.roomSize,units:"normalRange"}),this._scaleRoomSize=new or({context:this.context,min:-.733,max:.197}),this._allpassFilters=Va.map((t=>{const e=this.context.createBiquadFilter();return e.type="allpass",e.frequency.value=t,e})),this._feedbackCombFilters=Ia.map(((t,e)=>{const s=new Ur({context:this.context,delayTime:t});return this._scaleRoomSize.connect(s.resonance),s.resonance.value=Fa[e],e<Ia.length/2?this.connectEffectLeft(...this._allpassFilters,s):this.connectEffectRight(...this._allpassFilters,s),s})),this.roomSize.connect(this._scaleRoomSize),Di(this,["roomSize"])}static getDefaults(){return Object.