连续波形音频合成器

Raf*_*ega 7 c++ audio synthesis

我开始编写一个具有特殊特性的软合成器:振荡器将有一个"连续波形"旋钮,允许用户以连续的方式选择正弦波,方波和锯齿波.也就是说,如果旋钮一直向左,输出将是一个正弦波,如果它在中间它将是一个锯齿波,如果它一直向右,它将是一个方波然后中间位置将输出经典波的"插值"版本的波. - 可以改变旋钮位置和波浪类型,但需要连续改变波形的方法 -

我想到了几种实现振荡器的方法:

  1. 提出一个功能,它采用旋钮位置并计算实际信号的频谱(幅度和频率阵列),然后使用一串正弦函数和一个和块来实现输出信号.

  2. 类似于1.但应用反向傅立叶变换而不是正弦和求和(好的,此时我不确定它们是否实际上是相同的东西.)

  3. 为每个可能的旋钮位置生成波形表,并使用波表合成技术生成输出信号.

  4. 从2个锯齿波开始(它们包含偶数和奇数谐波),反转一个并求它们,并用旋钮控制每个齿的振幅.波形不会

我有几个问题:

答:我读过1号技术是处理器密集型的,并不是真的可行.这适用于ARM处理器,例如iPad上的处理器吗?

B.无论我最终选择什么技术,只需将低通滤波器连接到振荡器的输出就可以解决混叠问题?

C.关于如何实施这种振荡器的任何其他建议?

D.关于使用哪个C++工具包的任何建议?我一直在看CCRMA的STK,但我不知道是否还有其他更合适的库.

祝我好运!;)

编辑:昨晚有人指我吵闹.贝塞尔曲线是另一个需要考虑的选择.

Red*_*eye 5

我不确定你是不是太复杂了.如果我理解正确的话,你用连续波形旋钮做的所有事情都可以有效地将3个波形的不同数量混合在一起.因此,只需始终生成所有3个波形,然后根据您描述的波形混合将它们与不同的增益相加.

对于带宽限制波形合成以避免混叠,您可能会在这里找到您需要的大部分内容.

希望有所帮助.


use*_*018 1

傅里叶变换是线性的,因此对方波和锯齿波进行 FFT 并对每个谐波进行线性交叉渐变,然后通过 iFFT 或正弦求和将其带回到时域,应该给出与锯齿波和锯齿波交叉渐变完全相同的输出直接方波信号。我不确定这是否是您想要做的,但如果是,则无需进行 FFT 或计算中间表。

当然,还有许多其他方法可以在波形之间平滑“淡入淡出” - 例如,您可以使用相位失真,使用由线性段组成的失真曲线,将其从生成正方形的位置移动到生成锯齿状的位置。以固有带宽限制的方式实现这一点可能非常棘手。

实际上,通常可以使用过采样和过滤或仅过滤来解决混叠问题。使用频带限制技术更好,因为混叠总是会产生一些噪音,但您通常可以将其过滤得足够低,使其听不见,这对于音频合成来说很重要。