C 具有(双)立方插值的音频振荡器

C 具有(双)立方插值的音频振荡器,c,audio,core-audio,C,Audio,Core Audio,这个问题是关于插值正弦波振荡器: 假设正弦波的振幅和频率轨迹由相应的断点函数定义或从用户界面读取,以下几行C代码显示了一种常用的正弦波振荡器范例,用于使用线性插值实时合成无数帧的单声道音频样本: 虽然总体上音乐上令人满意,但可以使用预先计算的正弦波表和指针算法优化性能,但有时可以听到线性插值伪影。我想知道是否有振幅和相位振荡器瞬时值的三次或双三次插值的自由示例?考虑到渲染线程至少在CoreAudio中具有实时优先级,重要的是保持它的轻量级,同时避免在渲染线程外插值时遇到太多低优先级线程问题。如果

这个问题是关于插值正弦波振荡器:

假设正弦波的振幅和频率轨迹由相应的断点函数定义或从用户界面读取,以下几行C代码显示了一种常用的正弦波振荡器范例,用于使用线性插值实时合成无数帧的单声道音频样本:

虽然总体上音乐上令人满意,但可以使用预先计算的正弦波表和指针算法优化性能,但有时可以听到线性插值伪影。我想知道是否有振幅和相位振荡器瞬时值的三次或双三次插值的自由示例?考虑到渲染线程至少在CoreAudio中具有实时优先级,重要的是保持它的轻量级,同时避免在渲染线程外插值时遇到太多低优先级线程问题。如果有人能给我举一个C语言中双三次插值正弦波振荡器算法的工作示例,无论它是多么简单或复杂,我都会非常感激。 提前谢谢

更新:

也许这幅插图可以阐明要插值的值的含义。紫色点表示通过线性插值连接的频率包络断点曲线。青色点表示叠加多项式插值的可能性。第一个和最后一个线段不按比例排列:


看看musicdsp.org,那里有一个帖子。文章的结尾包含您可能感兴趣的方法,下面是Ollie N的签名

float Oscillator::UpdateWithCubicInterpolation( float frequency )

如今,让CPU计算一个数学基函数通常比通过查表的瓶颈要快得多。@datenwolf:谢谢你的评论,尽管有点笼统和令人沮丧,IMHO。如果我相信这样一个概念,并且没有投资于个人研究,我就不会知道,在i7或xeon等现代处理器和OSX 10.10等现代操作系统上,使用设计合理的查找表和指针算法,仍然可以节省高达50%的cpu周期。当涉及到实时运行几千个振荡器时,它是值得考虑的。是的,总是轮廓。从技术上讲,我甚至会有你想要的代码,但是这个代码是公司的财产,我无权发布它。这正是我在@datenwolf之后的目标:研究、创建、配置和发布这样一段代码,使其公开,而不是某种保密协议公司的财产,每个人都只是小声谈论传说,而pd代码已经失效。-:然而,让我再次指出,我并不是在插入丢失的查找表值之后——几MB大小的正弦或任何一个表现在都不是问题。请看我对另一个答案的评论。这似乎是一个相关链接,尽管我希望代码更详细一点-谢谢@ruoho ruotsi。但是,我必须指出,我的问题不是插值缺少的查找表值,而是断点或GUI生成的频率或振幅轨迹。信封。目前我正在试验拉格朗日插值法。我会在收到值得发布的内容后尽快发布答案或问题更新你有没有关于这个问题的图像或视觉描述?我不完全理解你所说的振幅轨迹或断点生成频率是什么意思。我用一个例子更新了这个问题,谢谢@ruoho ruotsi
float Oscillator::UpdateWithCubicInterpolation( float frequency )