问题标签 [tonejs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
164 浏览

vuejs3 - Vue3:创建的钩子与数据字段中的对象实例化

我正在将一个项目从 Vue2 迁移到 3,并试图了解在组件数据上创建字段时出现的错误。使用 ToneJS,我可以new Synth()在方法体中或在 created 钩子中创建一个,然后在我的playNote方法中调用它。但是,当合成器定义为 上的字段时data,单击“播放”按钮时出现以下错误。

在 Vue2 中我没有这样的问题。想知道是否有人可以解释这里发生了什么?为什么创建的钩子有效但数据字段无效?

感谢您对此的任何帮助!错误的全文:

runtime-core.esm-bundler.js?5c40:6568 [Vue 警告]:在 <Main onVnodeUnmounted=fn ref=Ref< Proxy {playNote: ƒ, ...} >> at warn @ 处执行本机事件处理程序期间出现未处理错误runtime-core.esm-bundler.js?5c40:6568 logError @ runtime-core.esm-bundler.js?5c40:6742 handleError @ runtime-core.esm-bundler.js?5c40:6734 eval @ runtime-core.esm -bundler.js?5c40:6697 Promise.catch (async) callWithAsyncErrorHandling@runtime-core.esm-bundler.js?5c40:6696 调用者@runtime-dom.esm-bundler.js?830f:347 localhost/:1 未捕获(承诺)DOMException

0 投票
1 回答
34 浏览

web-audio-api - 网络音频计时性能

下面的文件使用 ToneJS 播放稳定的八分音符。根据计时记录,这些 8 分音符正好相隔 0.25 秒。

但是,它们甚至听起来都不是。音符之间的时间间隔明显不规则。

为什么会这样?有什么可以做的吗?或者这是 Javascript/webaudio-api 的性能限制?我已经在 Chrome、Firefox 和 Safari 中对其进行了测试,结果都是一样的。

感谢您提供有关此的任何信息或建议!

0 投票
0 回答
21 浏览

tonejs - 如何将音频文件播放到 Tone.Offline 缓冲区输出

问题

如何在内部播放本地音频文件,Tone.Offline以便在完成并返回承诺的缓冲区时,它将包含播放的音频?

代码

问题

我注意到里面的回调部分transport.schedule从来没有发生过,所以我从来没有建立最终的缓冲区。

0 投票
0 回答
22 浏览

javascript - 使用混响效果实现 ToneJS 播放器

当然是一个愚蠢的问题,但我不知道如何用混响效果实现我的播放器。

我已经尝试过了:

但它给了我这个错误:

错误:未捕获(承诺中):InvalidAccessError:给定目的地未连接

它在没有混响效果的情况下完美地工作,所以也许我错过了一些东西......

请帮助我,我从 2 小时开始搜索....

0 投票
0 回答
31 浏览

javascript - ToneJS - 如何从 Midi 文件中获取音符和暂停

我正在使用 ToneJS 处理 MIDI 文件,到目前为止,我能够获得一个音符列表,但是当我播放它们时,它们听起来很奇怪,因为没有停顿,我如何获得停顿?

0 投票
0 回答
50 浏览

reactjs - 如何使用 Tone.JS 使用音符/间隔数组正确定时播放

我正在制作一个基于使用 Tonejs 的合成器的项目。我创建了一个录制选项(不是声音,而是音符和音符之间的间隔)。我的问题从尝试播放“录音”时开始。我不确定如何跟踪整个时间范围并在正确的时间触发音频上下文。

记录功能:

我得到了按键之间的间隔,但没有得到整体时间线,但即使有了整体时间线,我也不知道如何将其传递给 Tonejs。

播放功能:

你可以在我的 github 的 src 文件夹中找到完整的代码

播放有时会起作用,但大多数时候至少一个音符是时间,通常不止一个。如果当前音符的间隔短于它首先播放的前一个音符,那么如果你要减去间隔,则前一个音符会在剩余的时间内播放(至少我认为这是正在发生的)

0 投票
1 回答
27 浏览

tone.js - 为什么外部音频链接不适用于tone.js

我正在尝试使用tone.js 播放来自我的主机的音频样本,但没有声音。

我从tone.js尝试了这段代码,它可以工作:

当我用我的直接主机链接更改链接“https://tonejs.github.io/audio/berklee/gong_1.mp3”时,没有声音。

0 投票
1 回答
34 浏览

javascript - Tone.js 发布/停止采样器

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

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

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

不起作用的是sampler.dispose(),因为它本质上断开了采样器乐器与输出的连接。但我需要在关闭采样器后不久继续使用采样器重新触发相同的音符。


我正在尝试使用按钮来停止播放当前正在播放的“采样器”音符。我认为触发发布阶段会这样做(如下面的代码所示),但这似乎没有任何效果。我尝试了很多方法。这个问题没有回答我的问题,部分原因是它是针对“Polysynth”而不是“Sampler”的。提前致谢!

0 投票
0 回答
17 浏览

javascript - Tone.js:Tone.start 不是函数

我正在努力让 Tone.js 完全正常工作。起初我意识到我需要在单击按钮时激活网络音频上下文。但是,现在我遇到了这个问题:Tone.start is not a function.

我的代码是我能得到的最简单、最短的代码:

索引.html:

应用程序.js:

这是基于“启动音频”下的官方文档。另外作为参考,我在 Chrome 中运行它。

0 投票
1 回答
21 浏览

javascript - Tone.js:实时调整合成器参数时得到意想不到的结果(例如失谐、调制指数、攻击等)

我从事 Tone.js 合成器项目已经有一段时间了。

作为记录,我将包括链接: 回购 部署 (它仍在开发中,因为我遇到了这个问题)

我遇到了一个我无法解决的严重问题。我将 PolySynth 与 FMSynth 一起使用,但我尝试过的所有其他合成器类型都遇到了同样的问题。

每当我尝试实时调整合成器的参数时(例如失谐、调制指数、幅度包络等),我都会得到意想不到的行为:

大多数情况下,当我更改参数的值时,它会立即起作用,因此声音会根据我所做的更改进行修改,但即使我不断更改值,声音也会停留在第一个修改后的值上的参数。

然后有时我每在合成器上演奏一个音符时就会得到修改后的声音。一次我得到修改后的声音,然后下一次得到没有任何修改的原始声音,然后再次获得修改后的声音,依此类推。

有时它可以工作,但我仍然坚持第一次修改。

有时它会在先弹奏一些音符后随机工作。

有时它会立即起作用,但随后一些特定的音符会产生未经修改的原始声音,而不管我的修改如何(并且合成器仍然停止响应任何进一步的参数更改)。

除了volume:volume每次都按预期工作时,每个参数都会发生这种情况。

让我们以调制指数为例(失谐、谐波和起音也是如此——这些是我暂时实现的参数)。最初,我使用 NexusUI 组件,但为此我将使用常规的 HTML 滑块(以证明 NexusUI 不是问题)。它可以在我提供的部署网站和 repo 中找到。这是我的代码:

在主 JavaScript 文件中,我创建了合成器并将其发送到目的地:

在 HTML 文件中,我创建了一个简单的滑块:

每次表盘移动时,我都会相应地更改调制指数值:

如您所见,我正在使用以下方法设置新的调制指数值:

我对其他参数遵循完全相同的方法,例如。

等等。

我在 Ubuntu 上使用 Tone.js 14.8.37,使用 CDN、Chrome 98-99。

非常感谢任何可能提供帮助的人:-)

PS我也就此问题提出了一个问题,可以在这里找到

https://github.com/Tonejs/Tone.js/issues/1045