gpt4 book ai didi

c - 具有(双)三次插值的音频振荡器

转载 作者:太空宇宙 更新时间:2023-11-04 04:38:25 25 4
gpt4 key购买 nike

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

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

// ... (pre-computing initial amplitude and phase values)...
for (UInt32 frame = 0; frame < inNumberFrames; frame++)
{
buffer[frame] = sinf(phasef) * ampf[frame];
phasef += osc->previousPartialPhaseIncrementf + df*frame;
if (phasef > TWO_PI) phasef -= TWO_PI;
}
// ... (storing current amplitude and phase values)...

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

更新:

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

enter image description here

最佳答案

查看 musicdsp.org,其中有关于 (almost) Ready-to-use oscillators 的帖子.文章末尾包含您可能感兴趣的方法,并带有以下签名(Ollie N.)

float Oscillator::UpdateWithCubicInterpolation( float frequency )

关于c - 具有(双)三次插值的音频振荡器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28878579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com