微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

音调JS-Transport.stop;不适用于预定事件

如何解决音调JS-Transport.stop;不适用于预定事件

我正在使用Tone JS进行项目,并且正在使用Transport.scheduleOnceSampler安排事件。这是我到目前为止的内容,也是其中的fiddle(您可能需要单击“运行”几次才能听到小提琴最初加载时音频通过)

我的代码

\w++

我正在尝试使用const sound = 'https://archive.org/download/testmp3testfile/mpthreetest.mp3'; let samplerBuffer; const sampler = new Promise((resolve,reject) => { samplerBuffer = new Tone.Sampler( { A1: sound },{ onload: () => { resolve() }} ).toMaster(); }) sampler.then(() => { Tone.Transport.scheduleOnce(() => { samplerBuffer.triggerAttack(`A1`,`0:0`) }); Tone.Transport.start(); setTimeout(() => { console.log('Now should be stopping'); Tone.Transport.stop(); },1000) }) 方法在1秒钟后停止播放音频,但是似乎不起作用。我想我应该按照文档进行操作,所以哪里出问题了?

解决方法

Tone.Transport正在触发您的样本。
如果您只想播放“自动点唱机”之类的声音,则可以使用Tone.Player

如果您确实需要一个采样器,则应研究Envelopes,因为采样器使用了一个采样器。

简而言之:Tone.Transport就像音乐会中的指挥家一样。 Transport仅设置时间(仅设置BPM而不设置播放速度)。 Tone.Transport.start()将触发所有已注册的乐器(在您的情况下为采样器)开始执行您对其进行的编程设置。如果要停止在此模式下播放采样器。您可以执行samplerBuffer.releaseAll()

const sound = 'https://archive.org/download/testmp3testfile/mpthreetest.mp3';
let samplerBuffer;

const sampler = new Promise((resolve,reject) => {
   samplerBuffer = new Tone.Sampler(
    { 
      A1: sound
    },{
      onload: () => {
        resolve()
      }}
  ).toMaster();
})


sampler.then(() => {
  Tone.Transport.scheduleOnce(() => {
    samplerBuffer.triggerAttack(`A1`,`0:0`)
  });

  Tone.Transport.start();
  setTimeout(function() {
    console.log('Now should be stopping');
    samplerBuffer.releaseAll();
    // samplerBuffer.disconnect();
  },1000)
})

https://jsfiddle.net/9zns7jym/6/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。