【问题标题】:How to Correctly Clean Up timbre.js如何正确清理 timbre.js
【发布时间】:2015-12-22 23:49:53
【问题描述】:

通过将 Timbre.js 与 AudioContextMonkeyPatch 耦合,我在 iOS 9.2 上成功运行了 Timbre.js,并且我正在尝试使用此处找到的稍微修改过的代码版本: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 事件中),我最终在第二个播放事件上收到了多个信号。真令人沮丧。文档建议“removeAll”将删除加载到 Timbre()(或 T()?)中的所有项目,但在我的停止函数中应用它也不能提供令人满意的结果。 有人知道暂停和重新启动此脚本 sn-p 的正确方法吗?

【问题讨论】:

    标签: javascript ios web-audio-api audiocontext


    【解决方案1】:

    为了启动和停止序列,您需要将最后一个 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() 用于间隔。

    【讨论】:

    • 我建议将此问题重命名为“如何启动/停止 TImbre.js 间隔/序列?”
    猜你喜欢
    • 1970-01-01
    • 2021-01-26
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 2020-10-27
    • 1970-01-01
    • 2011-04-16
    相关资源
    最近更新 更多