如何解决Tone.js 更改 Tone.Polysynth 的问题
在 Tone.js 中,我创建了一个创建合成器实例的类,其中 .play()
在音序器函数中被调用,从而播放声音。在下面的课程中,当 this.synth
中的 updateSynthType
是单音 Tone.Synth
时,绝对没有问题,但是当它是 Tone.polysynth
时整个事情都会中断,并且当我收到以下错误时试图呼叫 updateSynthType
。
Uncaught Error: Synth was already disposed
at ti (Tone.js:1)
at ra._scheduleEvent (Tone.js:21)
at Object.callback (Tone.js:21)
at Gi._timeoutLoop (Tone.js:21)
at Gi.emit (Tone.js:7)
我不明白为什么常规 Tone.Synth
不会发生这种情况,但是当我尝试更改 Tone.polySynth
时会出现错误。我正在尝试更新设置以在 polysynth 的类型(例如 Synth,AMSynth,MetalSyth
等)之间进行更改。我怎样才能阻止这个问题?为什么这个类只适用于普通的 Tone.Synth
?有没有更好的方法来更新这个类中的 polySynth 类型?
这是有问题的课程:
class polyInstrument {
constructor(){
this.synth = null
this.gain = new Tone.Gain()
this.gain.toDestination()
}
play(note = null,beat,time = null){
if (this.synth){
if (note === null){
time ? this.synth.triggerAttackRelease(beat,time) : this.synth.triggerAttackRelease(beat)
} else {
time ? this.synth.triggerAttackRelease(note,time) : this.synth.triggerAttackRelease(note,beat)
}
} else {
alert('error: no synth')
}
}
get defaultSettings(){
return {
Synth: {
oscillator: {
type: 'triangle'
},envelope: {
attack: 0.005,decay: 0.1,sustain: 0.3,release: 1
}
},AMSynth: {
harmonicity: 3,detune: 0,oscillator: {
type: 'sine'
},envelope: {
attack: 0.01,decay: 0.01,sustain: 1,release: 0.5
},modulation: {
type: 'square'
},modulationEnvelope: {
attack: 0.5,decay: 0,release: 0.5
}
}
}
}
updateSynthType(synthType){
if (this.synth){
this.synth.disconnect(this.gain)
this.synth.dispose()
}
let settings = this.defaultSettings[synthType] || {}
this.synth = new Tone.polySynth(Tone[synthType],settings)
this.synth.connect(this.gain)
this.play()
}
}
感谢阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。