【发布时间】:2016-02-17 13:00:26
【问题描述】:
我正在尝试通过计量为录音机制作三角波。我正在使用 AVAudioRecorder 这意味着快速傅里叶变换在这种情况下将不起作用(其次,我没有足够的知识来实现它)。我在 github 上找到了this project。在这个项目中,作者使用以下方程来制作平滑的正弦波:
CGFloat y = scaling * self.maxAmplitude * normedAmplitude * sinf(2 * M_PI *(x / self.waveWidth) * self.frequency + self.phase) + (self.waveHeight * 0.5);
如果你考虑方程的这个sinf(2 * M_PI *(x / self.waveWidth) * self.frequency + self.phase) 部分,你会发现它是正弦波方程(wikipedia)。如果我用三角方程方程(wikipedia)替换这部分,它仍然会产生几乎没有差异的正弦波。我想把这个方程转换成三角波而不是正弦波。
我的三角波方程是这样的:
CGFloat t = x / self.waveWidth;
CGFloat numerator = sinf( (2.0 * M_PI * (2.0 * self.amplitude + 1.0) * self.frequency * t) );
CGFloat denominator = (2.0 * self.amplitude + 1.0) * (2.0 * self.amplitude + 1.0);
CGFloat multiplyer = (8.0 / pow(M_PI, 2.0));
CGFloat result = multiplyer * (numerator / denominator);
那么最后y位置的计算公式为:
y = (result * scaling * self.maxAmplitude * normedAmplitude) + (self.waveHeight * 0.5);
动画看起来也不自然。这个方程的输出是:
谢谢
【问题讨论】:
-
等一下,您想根据麦克风输入(输入频率、幅度等)生成三角波吗?您所依据的方程式中的 waveWidth 是什么?
-
如果你查看代码'Waver',你会发现waveWidth等于视图的宽度。
-
只是想澄清一下,您已经尝试放入三角波,但您仍然得到正弦波形状?
-
是的!但波的幅度变小了。
-
这是一个疯狂的镜头,但是当你增加振幅时发生了什么?我可以看看你的三角波方程吗?
标签: ios objective-c avaudiorecorder waveform