问题标签 [tone.js]

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 投票
0 回答
65 浏览

reactjs - 为什么我的自定义 React Context 不能与这个第三方库 (Tone.js) 一起使用

我正在重构一个旧项目,并且正在尝试仅使用功能组件、挂钩等。该项目是一个步进音序器(即一个应用程序,它允许您通过切换按钮网格来创建自己的音乐循环/vamps )。

我想将所有 WebAudio 逻辑抽象到一个单独的文件中。我创建了一个 React Context,它模仿类组件中所做的一切,并通过useContext钩子公开必要的数据/函数,但由于某种原因,使用函数组件和钩子的版本无法与 Tone.js 交互。

我创建了一个 CodeSandbox,您可以在其中轻松地在 Class 和 Functional 版本之间切换,这样您就可以看到我在说什么。

我希望我能更具体地说明什么不起作用,但老实说,我不知道为什么一切都坏了。我想我很困惑,因为 Tone.js 是一个事件驱动的框架,很难在这种思维模式和 React 中使用的声明性模型之间切换。

Tone.js 文档

在此先感谢您的帮助!

0 投票
2 回答
197 浏览

javascript - Tone.PitchShift 和 Howler.js 问题

我喜欢在我的 (Meteor) 应用程序中使用 Howler.js。但是,播放速率功能导致了我不想要的音高偏移(我只想要时间拉伸,并保持音高)。因此,我的解决方案是对其实施音高转换以“纠正”音高。看起来很简单,这就是我选择使用https://tonejs.github.io/的原因

唯一的问题是,我一辈子都无法让它正常工作。在阅读了 Web Audio API 和 Tone.js 文档以及在线讨论/疑难解答论坛数小时后,我得到的最接近潜在解决方案的方法是这样的(在我的应用程序渲染期间调用,以防万一问题不得不解决)过早加载):

当我运行它时,我收到以下错误消息:

Tracker afterFlush 函数的异常:meteor.js?hash=857dafb4b9dff17e29ed8498a22ea5b1a3d6b41d:1059 TypeError:无法在“AudioNode”上执行“connect”:重载解析失败。

我还注意到,这些命令下方的 console.log() 命令甚至没有出现在控制台中,这很奇怪。但是,当我删除最后一行(mastergain.connect 到 pShift)时,它们会这样做。

我尝试了一些其他技术,例如https://github.com/mmckegg/soundbank-pitch-shift/(它有效,但无论我放置什么设置,它都会播放音高变化的声音和非音高变化的声音它在),或者只是使用 AudioBufferSourceNode.detune (我不知道如何让它与 Howler.js 一起工作,因为 Howler 只有可以公开 GainNode 和 AudioContext 的函数,无法弄清楚如何在仍然使用 Howler 的同时从那里读取输出)。

任何帮助/线索将不胜感激!

0 投票
0 回答
78 浏览

javascript - Tone.js PitchShift“金属”失真问题

所以我有一个应用程序可以在音乐图表中播放和弦,允许您为歌曲构建背景音轨。我正在使用 Web Audio API(特别是 Howler.js,因为它的实用性和简单性),因为当我尝试使用 HTML5 音频时,它遇到了滞后问题。唯一的问题是,当我调整音频的播放速率时,音调也会发生变化!(这不是 HTML5 的问题,但我不得不再次放弃它)。由于这是一个音乐应用程序,您可以在其中动态更改 BPM 并仍然播放每个和弦,因此需要通过更改播放速率来保持音高。

我最初的解决方案是在更改播放速率后使用 Tone.js 的 PitchShift 效果来“纠正”音高。当我必须提高音高时(当歌曲变慢时)它效果最好,但是当歌曲加速时(因此需要降低音高以保持它)它会稍微走调并且非常金属的声音,即使我添加了一个小的“校正器”。然而,即使提高音高也会产生轻微的金属般的声音,尽管不太明显。

我有几个潜在的解决方案,但老实说,我并不精通音频处理领域,尤其是在网络上。因此,如果可能的话,我想帮助选择解决此问题的最佳解决方案。解决方案包括:

  1. 添加另一个 Tone.js 组件/效果,例如 EQ3,并尝试纠正金属声音。不幸的是,如上所述,我不确定应该使用哪种效果(如果有的话)。我试图切换到 .WAV 而不是 .FLAC 看看这是否有所作为,但遗憾的是并没有太大影响。

  2. 以某种方式连接 Tone.js GrainPlayer,因为它据称“使您能够独立调整音高和播放速率”,而不必担心在更改速率后必须纠正音高。但是,我知道 GrainPlayer 是一个源并且需要一个 AudioBuffer,并且我不知道如何将 Howl 连接到它或任何东西(Howl 是 Howler 用来播放声音的对象。)Howler 只提供对其 AudioContext 和它的主增益节点。

  1. 只需使用上面列出的 GrainPlayer 方法直接加载我的所有声音,然后忘记使用 Howler.js。我可以做到这一点,我唯一的问题是我希望仍然不存在滞后问题(当我使用 HTML5 音频元素时它们是一个问题,所以有可能它不会成为 Tone.js 的问题)。在这方面,我应该将它们保存为 .FLAC 文件吗?还是换成别的?共有 36 个声音文件,当它们是 .FLAC 时,每个文件的大小约为 130KB,但不幸的是,当涉及到网页认为“大型音频文件”时,我没有参考框架。

如果我遗漏了一些明显的东西,再次道歉,对音频处理来说仍然很新!

0 投票
1 回答
42 浏览

javascript - Tone.js 对结构的帮助

我有一个用于创作音乐的音乐应用程序,我最多可以演奏 3 种乐器,并且有 2 种效果可用,音高变化和混响。

我目前正在使用标准的网络音频 API,但有时我会在一次播放太多音符时遇到问题,音频会变得混乱。另外,我喜欢tone.js 提供的一些功能。

我想尝试使用tone.js 来解决这些问题(如果可能的话)并拥有我以前拥有的所有功能。问题是我快速浏览了文档,但我并不真正了解我应该如何构建事物。我有 21 个音频文件,每个音符一个,对于所有 3 种乐器,我的问题是:

  1. 我应该研究什么来实现我想要的?所以让 3 种乐器一起演奏,有混响和提高音高的可能性,从音频文件加载。
  2. 我应该担心性能吗?
  3. 是否有某种教程/入门指南可以做与我想做的类似的事情?

也欢迎任何建议。网站是:这里

0 投票
0 回答
7 浏览

tone.js - v13 默认为 v14.7.77

使用 v13 文档,我们可以从 DEAULT 部分复制和粘贴乐器预设,这是一个有用的起点。有没有办法用当前的 Tone.js 做类似的事情?

示例: https ://tonejs.github.io/docs/r13/AMSynth

0 投票
1 回答
45 浏览

javascript - 如何在 Tone.js 中一个接一个地演奏多个音符

我想出了这个解决方案:

但是代码太多,只能弹7个音符左右;

是否有一个简单的快捷方式,只需几行?

0 投票
1 回答
64 浏览

android - 当我尝试加载 mp3 文件时,Cordova 和 Tone.js “错误:缓冲区未设置或未加载”

也许你可以帮帮我,我一直在寻找所有信息,以解决我的这个问题,但是没有,我无法使用cordova的播放器......

在实践中,我无法加载 mp3 文件,无论它们是本地还是远程,我总是收到此错误:“错误:缓冲区未设置或未加载”,路径中的文件在那里。

我尝试使用 Tone 的示波器来查看是否在加载 Tone 时遇到问题,但这工作正常。

它可能取决于一些授权,特别是我可能会丢失吗?

例如使用科尔多瓦媒体插件我可以重现音频,但我需要使用 Tonejs。

你有什么想法吗,这可能取决于什么。或者我可以尝试做什么?...

即使是这个简单的例子,在设备准备好之后也不去:

已经与 Tone 和 Cordova 合作过的你,给我希望它可以以某种方式使用,如果你有任何想法,请提前告诉我!

- - 更新:

目前,当应用程序启动时,我的行为是这样的(我声明它是为网站开发的代码的移植,并且一切正常加载它等等):

0 投票
1 回答
60 浏览

android - Cordova,我可以远程使用文件但不能在本地使用文件,我错了什么?

为了尝试解决 Tone.js 库和音频缓冲区的另一个问题(请参见此处),我创建了一个“默认的 cordova hello world 应用程序”,并添加了“cordova-plugin-file”插件。

我不明白为什么,我可以处理一个远程文件并播放它,但是本地相同的文件,我不能播放它,我错了什么?

我从我的 index.html 中删除了所有“Content-Security-Policy”...我更改了 Config.xml 文件中的权限,如下所示:

然后在 deviceready 中,如果我切换到 Tone.js Player,外部 url 有效,本地 url 没有,我错在哪里?

//本地 NO ok!: "cdvfile://localhost/persistent/1_Hat.mp3"

//远程OK!: “https://vivo-vivendo-musica.com/sample/1_Hat.mp3”

我认为这几乎可以肯定是一个安全问题,但我不明白缺少什么,我尝试了各种方法来获取这个文件,它存在于 www 文件夹中。

0 投票
1 回答
27 浏览

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

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

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

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

0 投票
0 回答
6 浏览

javascript - 状态改变——用按钮改变声音和天空盒?

任何人都可以帮助我。我正在尝试通过单击按钮使天空盒和声音从一个变为另一个,但它不起作用。

我究竟做错了什么?我不知道我是在正确的轨道上还是完全关闭,但按钮没有做任何事情,并且出现了无限循环警告。

https://codesandbox.io/s/assignment-jan-again-current-22st-jan-state-change-attempt-b20n5