【发布时间】:2020-07-24 04:45:55
【问题描述】:
我正在使用 ToneJS 的网站上创建多个切换按钮。基本上,我希望不同的按钮播放不同的曲目。
我已经像这样创建了两个相同的按钮。
按钮 1:
function togglePlay() {
const status = Tone.Transport.state; // Is either 'started', 'stopped' or 'paused'
const element = document.getElementById("play-stop-toggle");
if (status == "started") {
element.innerText = "PLAY";
Tone.Transport.stop()
} else {
element.innerText = "STOP";
Tone.Transport.start()
}
document.querySelector('#status').textContent = status;
}
按钮 2:
function togglePlay2() {
const status = Tone.Transport.state; // Is either 'started', 'stopped' or 'paused'
const element = document.getElementById("play-stop-toggle2");
if (status == "started") {
element.innerText = "PLAY";
Tone.Transport.stop()
} else {
element.innerText = "STOP";
Tone.Transport.start()
}
document.querySelector('#status').textContent = status;
}
目前他们正在播放相同的循环,因为下面的代码是全局定义的:
var filter = new Tone.Filter({
type: 'lowpass',
Q: 12
}).toMaster()
var synth = new Tone.MembraneSynth().toMaster()
//create a loop
var loop = new Tone.Loop(function(time){
synth.triggerAttackRelease("A1", "8n", time)
}, "2n")
//play the loop between 0-2m on the transport
loop.start(0)
// loop.start(0).stop('2m')
如何将filter、synth 和loop 嵌套在每个function togglePlay() 中,以便根据切换的按钮定义不同的声音?
【问题讨论】:
-
也许我没有正确理解您的问题,但如果
filter、synth和loop是全局定义的,那么您的函数togglePlay()和togglePlay2()都可以访问他们。您可以在全局范围内定义任意数量的过滤器、循环等,并且每个按钮的功能都可以调用您想要与之关联的功能。有什么问题? -
@EvanMorrison - 对。我的问题是超级基本的。我在问一个非常简单的问题,即如何——作为语法级别——将它们从全局上下文中删除并将它们嵌套在函数中。
-
啊,好吧,那么你能不能不把全局代码放在切换函数中,每个函数都有不同的选项?它们会以某种方式发生冲突吗?我对 Tone 的 API 一无所知。你试过什么?
标签: javascript tone.js