如何正确清理音色.js

How to Correctly Clean Up timbre.js

本文关键字:js 何正确      更新时间:2023-09-26

我通过将Timbre.js与AudioContextMonkeyPatch耦合,在iOS 9.2上成功运行了它,并且我正在尝试使用这里发现的稍微修改过的代码版本:http://mohayonao.github.io/timbre.js/interval.html.代码(保存查找)为:

var freqs = T(function(count) {
  return [220, 440, 660, 880][count % 4];
});
var osc = T("sin", {freq:freqs, mul:0.5});
var env = T("perc", {a:50, r:500}, osc).bang();
var interval = T("param", {value:500}).linTo(50, "30sec");
T("interval", {interval:interval}, freqs, env).start();
env.play();

我想弄清楚的是如何开始,然后停止,然后重新开始声音。我想看看开发人员的示例"暂停"按钮是如何工作的,但我似乎找不到那个代码示例。我做一些基本的事情,比如"T().stop();env.pause();",然后是"env.play()"(在单独的onClick事件中),最后在第二个play事件中得到多个信号。真是令人沮丧。文档建议"removeAll"将删除加载到Timbre()(或T()?)中的所有项目,但将其应用于我的停止函数也不能提供令人满意的结果。有人知道暂停和重新启动这个脚本片段的正确方法吗?

为了启动和停止序列,您需要将最后一个T函数分配给一个变量。然后,您可以随心所欲地使用.start()和.stop():

code....
var interval = T("param", {value:500}).linTo(50, "30sec");
var audioSequence = T("interval", {interval:interval}, freqs, env);
env.play(); 
audioSequence.start(); // Start the Sequence 
interval.stop(); // Stop the interval
audioSequence.stop();  // Stop the Sequence
interval.start(); // Restart the Interval
audioSequence.start();  // Restart the Sequence

一开始有点令人困惑,因为play()/pause()用于振荡器或鼓,start()/stop()用于音程。