首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tone.js释放/停止采样器

Tone.js释放/停止采样器
EN

Stack Overflow用户
提问于 2022-02-06 13:33:05
回答 1查看 410关注 0票数 1

编辑:更新其他尝试。下面问题的关键部分是行sampler.triggerRelease(["A1"], 'now'),它不起作用。我尝试过的其他事情包括:

  • sampler.releaseAll(Tone.now())
  • sampler.releaseAll()
  • sampler.triggerRelease(["A1"], Tone.now())

Tone.js文档的相关部分是这里

不能工作的是sampler.dispose(),因为它实际上切断了采样仪器与输出的连接。但我需要继续使用取样器重新触发相同的音符后不久,关闭它。

我试图使用按钮按下停止播放‘采样器’音符,而它目前正在播放。我认为触发发布阶段会做到这一点(如下面的代码所示),但这似乎没有任何效果。我尝试过很多方法。这个问题没有回答我的问题,部分原因是因为它是为了“多元合成器”而不是“采样器”。提前感谢!

代码语言:javascript
复制
const readyOverlay = document.querySelector('#readyOverlay')
readyOverlay.addEventListener('click', async () => {
    readyOverlay.style.display = 'none'
    await Tone.start()

    const sampler = new Tone.Sampler({
        urls: {
            A1: "A1.mp3"
        },
        baseUrl: "https://tonejs.github.io/audio/casio/",
        onload: () => {
            sampler.triggerAttackRelease(["A1"], 5);
        }
    }).toDestination();
    sampler.release = 0
    document.querySelector('#stop').addEventListener('click', () => {
        sampler.triggerRelease(["A1"], 'now')
    })
})
代码语言:javascript
复制
        #readyOverlay {
    position: absolute;
    z-index: 9;
    width: 100%;
    height: 100%;
    background: white;
    text-align: center;
    display: flex;
    flex-direction: column;
    justify-content: center;
}
代码语言:javascript
复制
<script src="https://unpkg.com/tone@14.7.77/build/Tone.js"></script>
    <div id="readyOverlay">Press anywhere to start!</div>
    <button id="stop" >stop</button>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-08 21:56:48

triggerAttackRelease替换为只使用triggerAttack是可行的:

代码语言:javascript
复制
const readyOverlay = document.querySelector('#readyOverlay')
readyOverlay.addEventListener('click', async () => {
    readyOverlay.style.display = 'none'
    await Tone.start()

    const sampler = new Tone.Sampler({
        urls: {
            A1: "A1.mp3"
        },
        baseUrl: "https://tonejs.github.io/audio/casio/",
        onload: () => {
            sampler.triggerAttack(["A1"]);
        }
    }).toDestination();
    sampler.release = 0;
    document.querySelector('#stop').addEventListener('click', () => {
        sampler.triggerRelease(["A1"]);
    })
})
代码语言:javascript
复制
        #readyOverlay {
    position: absolute;
    z-index: 9;
    width: 100%;
    height: 100%;
    background: white;
    text-align: center;
    display: flex;
    flex-direction: column;
    justify-content: center;
}
代码语言:javascript
复制
<script src="https://unpkg.com/tone@14.7.77/build/Tone.js"></script>
    <div id="readyOverlay">Press anywhere to start!</div>
    <button id="stop" >stop</button>

triggerAttackRelease只是triggerAttacktriggerRelease调用的序列。这意味着您已经在初始示例中的onload回调中计划了一个便笺发布。

Tone.js忽略了第二个发布调用,因为sampler已经将"A1“标记为released (语句确保只在攻击后释放一次注释。)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71007688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档