每个合成器都始于振荡器。这篇文章记录 TaroSynth 的第一步:用 JUCE 的 DSP 模块实现 Sine、Saw、Square 三种基础波形,并让它们响应 MIDI 音高。
关键经验是:音频回调里永远不要分配内存、不要加锁。所有查找表和缓冲区都在 prepareToPlay 里预分配好,processBlock 只做纯计算。
下一篇讲包络——让声音有“形状”的 ADSR。
The Journal ·
Sine、Saw、Square —— 三种基础波形如何生成,以及实时音频线程里为什么不能分配内存。
每个合成器都始于振荡器。这篇文章记录 TaroSynth 的第一步:用 JUCE 的 DSP 模块实现 Sine、Saw、Square 三种基础波形,并让它们响应 MIDI 音高。
关键经验是:音频回调里永远不要分配内存、不要加锁。所有查找表和缓冲区都在 prepareToPlay 里预分配好,processBlock 只做纯计算。
下一篇讲包络——让声音有“形状”的 ADSR。