如何使用createPeriodicWave而不是createScriptProcessor和getChannelData

tim*_*hew 23 javascript synthesizer signal-processing web-audio-api

我找到了一些用Web Audio API进行仪器合成的库.

其中一人(Band.js)使用createOscillator(),结合振荡器型(正弦波,方波,...)看到源.

但它听起来太合成了(例如,听)我想要听起来更真实的东西,但我不想使用任何预编译的声音字体,所以它应该被合成.它也适用于移动设备.

所以我找到了另一个库(musical.js),它使用前32个谐波作为矩阵与createPeriodicWave see source结合使用.音色很棒,你可以

正如它在源代码的注释中所写,谐波来自该钢琴样本文件.还有更多其他乐器的示例文件.我试图取代谐波,甚至整个2000年,但它听起来总是像钢琴.

还有一些值可以调整和插入谐波和ADSR值.也许他们只针对钢琴声音进行了优化?

然后我找到了另一个库(吉他合成器),它有一个非常好的吉他音色,听听它.但是这个库不使用任何createPeriodicWaveAPI.相反,它使用createScriptProcessorgetChannelData结合一些"简单"计算,但没有像其他库中的谐波那样,请参阅源代码

所以我的主要问题

可以将吉他合成器移植到使用createPeriodicWaveAPI吗?我想在musicjs中使用吉他音色.这样我就可以在钢琴音色和吉他音色之间切换.

BTW:找到了另一个合成声音乐器的库.这是演示,这里是源代码.声音也很好听,但是music.js音乐库的音色更加美妙.但它看起来也像使用像getChannelDataWAVE 一样编码的东西.它也无法在我的Android移动设备上运行.

Bor*_*rov 3

这不是答案,只是关于该主题的一些想法和注释。

这个问题本身对我来说很有趣,我正在弹吉他,但从来没有机会(直到现在)接触代码中的音乐。我读了一些理论并使用musical.js 进行了演奏,我觉得我距离解决方案还很远。

以下是一些注意事项,希望对您有用:

1)我将从musicial.js 中提取的代码简化示例放在一起,请参阅web-audio-test.jsweb-audio.html

如果我没记错的话,musical.js 的音频节点设置是这样的:

有一个“尾部”部分,它对所有节点来说都是通用的,并且永久保留,而“头”部分是为播放每个音符而创建的节点集

| ------ HEAD (for each note)------ | --- TAIL (for all notes)----------- |
|                                   |                                     |
[ |Oscillator|->|Biquad|->|Gain|-> ] [|Gain|->|Dynamics  |->|Destination| ]
  | Periodic |  |Filter|  |ADSR|              |Compressor|
  | Wave     |
Run Code Online (Sandbox Code Playgroud)

注意:第一个振荡器可以被另一个振荡器加倍,以演奏音符频率+音色失谐。

因此,我们创建一个振荡器(或两个)+ 滤波器 + ADSR 增益来演奏每个音符。这样我们就创建了很多音频节点。Musicial.js 通过创建音符队列并仅将一组有限的音符传递给 Web 音频 API 来处理此问题。

吉他合成器设置看起来更简单,它只是一个|Script Processor| -> | Output |. 吉他声音样本是从代码生成的,并馈送到充当声源的 ScriptProcessor 节点(就像从文件加载样本一样)。不确定,但也许 Musical.js 也可以使用这种方法来简化代码。

2)我在 musicial.js 中使用了不同的参数进行演奏,但一切听起来仍然像钢琴一样。

当我应用波表示例中的低音或吉他系数时,它听起来不同,但仍然像钢琴(尤其是高音)。

ADSR 设置不会改变这种“钢琴”声音,但我认为它们实际上无法将一种乐器的声音转换为另一种乐器的声音。

mult用于将实数/映像中的谐波插值到更高频率的和数组freq可能更重要,但如果我们将它们保留为空(无插值),则乐器听起来仍然像钢琴。

实际上需要改变什么来调整声音对我来说仍然是一个谜。

我看到你在github上发布的问题,希望 musicial.js 作者至少能够给出一些提示。

3)有用的链接/工具

Google 音频样本不包含我们这里需要的任何内容。最接近的是波表合成器示例,您可以在其中在不同的波表之间切换。

Firefox 有一个“Web 音频编辑器”,您可以在其中看到音频节点的图表,非常方便学习音频设置。

4)实用的解决方案。

你可能已经想到了这一点,目前我会使用 musicial.js 和吉他合成器。

一个简单的包装器可以统一界面并提供钢琴和吉他乐器。