gpt4 book ai didi

algorithm - 避免在音频合成器中调用 sin()

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:48:07 25 4
gpt4 key购买 nike

一个朴素的正弦波发生器采用一组 n 个值并对它们中的每一个调用 sin 函数:

for i = 0; i < 2*pi ; i = i+step {
output = append(output, sin(i) )
}

但是,这会大量调用可能代价高昂的 sin 函数,并且无法利用所有样本都是连续的、之前已经计算过并将四舍五入为整数 (PCM) 的事实。那么,还有哪些替代方案?

我正在想象一些类似 Bresenham's circle algorithm 的东西或预先计算高分辨率样本,然后通过每第 n 个条目缩小尺寸,但如果有解决此问题的“工业强度”解决方案,我很乐意听到。

最佳答案

当您添加到 (1,0) 时,您可以计算向量 z 得到 (cos theta, sin theta),其中 theta = 2*pi/step。然后将此向量添加到 (1,0) 并获得下一个 sin 值作为总和的 y 坐标。然后将 z 旋转角度 theta(通过乘以角度 theta 的旋转矩阵)并将其添加到您之前的向量(cos theta,sin theta),以获得下一个 sin 值作为合成和向量的 y 坐标。等等。这只需要计算 cos theta 和 sin theta 一次,然后每次更新由 2x2 矩阵与 2-d 向量的矩阵乘法给出,然后是简单的加法,这比使用幂级数计算 sin() 更快扩张。

关于algorithm - 避免在音频合成器中调用 sin(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22209937/

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