问题标签 [audiolet]

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 回答
1829 浏览

javascript - 这个简单的 FM 合成器设计有什么问题?

我正在尝试使用 Audiolet(合成库,http : //oampo.github.io/音频/api.html )

Audiolet 允许您将合成器构建为节点图(振荡器、DSP、包络发生器等)。

OPL2 有九个通道,每个通道有两个运算符(振荡器)。通常,每个通道中的一个振荡器调制另一个的频率。为了模拟这一点,我为每个通道建立了一个节点链:

Synth 节点链(九个通道之一)

已实施的 OPL2 通道

节点链创建及连接代码:

然而,当我设置调制器和载波节点的参数(振荡器波形、相对频率、衰减、ADSR 参数)和触发音符时,输出与具有大致相同参数的体面 OPL2 仿真器几乎没有相似之处。有些声音在球场上。其他人则相当不愉快。

我对如何进行有一些想法(我想在不同阶段绘制输出将是一个很好的起点),但我希望有经验的人可以指出我正确的方向,或者指出我的明显错误我在做。我没有信号处理或强大的数学背景。我对FM没有深刻的直观理解。

我怀疑的一些问题是:

1) 我的 FM 实现(如上图)根本上是错误的。此外,播放音符的功能可能存在问题(设置振荡器频率,并在触发 ADSR 包络之前缩放和偏移调制器):

2) FM 合成器的输出可能对调制器 ADSR 包络形状的微小差异高度敏感(请告诉我这是不是真的!),而我的 ADSR 包络最多是真实 OPL2 中 ADSR 的粗略近似。我的实现还缺少一些看起来相对不重要的功能(例如键缩放),但可能会显着影响 FM 合成器的声音(同样,我不确定)。