我正在尝试通过测光为录音机制作三角波。我正在使用AVAudioRecorder,这意味着在这种情况下快速傅立叶变换将不起作用(其次,我没有足够的知识来实现它)。我在github上发现了this project。在这个项目中笔者使用的是下面的公式,使平滑的正弦波:使用AVAudioRecorder测光来制作三角波
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)代替这部分,它仍然会产生正弦波,差别不大。我想以这样一种方式来转换这个方程,即它使三角波代替正弦波。
我的三角波方程如下:
y = (result * scaling * self.maxAmplitude * normedAmplitude) + (self.waveHeight * 0.5);
动画也看起来不自然:
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位置的计算方法。这个方程的输出是:
感谢
等等,您希望根据麦克风输入(输入频率,幅度等)生成三角波吗?什么是您正在建立这个关系的方程中的波宽? –
如果你看代码'Waver',你会发现waveWidth等于视图的宽度。 –
只是想澄清一下,你已经尝试过放入一个三角波,但你仍然得到正弦波形? –