是否可以在 Processing.JS 中生成正弦音调?

Is it possible to generate sine tones in Processing.JS?

我是一名业余音乐家,我向几乎没有或没有接受过音乐教育的学童教授音乐基础知识。

我编写了 a small app in Processing.JS,其中显示了西方音阶的 12 个音符(A、A#、B、C、C#、D、D#、E、F、F#、G、G#)一个圆圈,并突出显示音乐 scales/intervals 构成的它们之间的关系。

我希望能够触摸特定的音符名称并生成与该音符关联的正弦音调(非常明显的是 A = ..., 220Hz, 440Hz, 880Hz, ...)

所以分解一下,在 Processing.JS 中,是否可以在检测到鼠标事件时生成所需频率的正弦音?如果有人能帮我解决这个问题,我就能解决剩下的问题。

需要说明的是:我在 Javascript 方面不太擅长,我充其量只是在 Processing 方面中等。我知道 Javascript 可以做这样的事情,但我不知道如何在这个 webapp 中集成这两种语言。

正如您所暗示的,您将不得不在 JavaScript 中执行此操作。 George 的评论很到位:您应该先通读 this page.

但基本上,要记住的是 Processing.js 被转换为 JavaScript,因此您可以直接从 Processing.js 调用 JavaScript 代码。

我会先用谷歌搜索 "JavaScript sine tone" 之类的东西来获得大量结果。 Tone.js 似乎是一个可以满足您需求的库,但我敢肯定还有很多其他库。

要使用 Tone.js 库,您需要先将其导入 HTML,这与您导入 Processing.js 库的方式完全相同:

<script src="https://cdnjs.cloudflare.com/ajax/libs/tone/13.3.10/Tone.js"></script>

然后您可以在 Processing.js 代码中使用 Tone.js:

var synth ;

void setup(){
  //create a synth and connect it to the master output (your speakers)
  synth = new Tone.Synth().toMaster();
}

void mousePressed(){
  //play a middle 'C' for the duration of an 8th note
  synth.triggerAttackRelease('C4', '8n')
}

void draw(){}

请注意,Processing.js 在进行转换时会单独留下 JavaScript 代码,因此您的最终输出只是一堆 JavaScript 代码。这就是为什么您可以像这样混合使用 JavaScript 代码和 Processing.js 代码。

但也像 George 所说,您可能应该考虑切换到 P5.js,因为 Processing.js 不再维护了。

无耻的自我推销:here is a tutorial on Processing.js, and here 是 P5.js 上的一些教程。