繁体   English   中英

如何使用createPeriodicWave而不是createScriptProcessor和getChannelData

[英]How to use createPeriodicWave instead of createScriptProcessor and getChannelData

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

其中一个(Band.js)使用createOscillator() ,结合振荡器类型(正弦,方形,......) 见源

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

所以,我发现使用第一32次谐波作为基质组合与另一个库(musical.js) createPeriodicWave 看到源 音色很棒,你可以

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

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

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

所以我的主要问题

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

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

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

问题本身对我很有意思,我正在弹吉他,但从来没有机会(直到现在)用代码触摸音乐。 我读了一些理论并用music.js演奏,我觉得我还远没有解决方案。

这里有一些注意事项,希望它们有用:

1)我把 web-audio-test.js 提取的代码简化示例放在一起,参见web-audio-test.jsweb-audio.html

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

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

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

注意:第一个振荡器可以加倍另一个振荡音频+音色失谐。

因此,我们创建一个振荡器(或两个)+滤波器+ ADSR增益来播放每个音符。 这样我们就可以创建很多音频节点。 Musicial.js通过创建一个笔记队列来处理这个问题,并且只向Web音频API传递一组有限的笔记。

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

2)我在musicial.js中使用了不同的参数,但仍然听起来像钢琴。

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

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

用于将实数/图像中的谐波内插到更高频率的multfreq阵列可能更重要,但如果我们将它们保持为空(无插值),则仪器仍然听起来像钢琴。

实际上需要改变以调整声音对我来说仍然是一个难题。

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

3)有用的链接/工具

Google音频示例不包含我们在此处所需的任何内容。 最接近的是波表合成器示例 ,您可以在不同的波表之间切换。

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

4)实用的解决方案。

你可能已经知道了,目前我会同时使用musicial.js和guitar-synth。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM