【发布时间】:2012-08-18 14:18:45
【问题描述】:
我需要计算三角形和锯齿波,但由于我的模型和我能够使用的数据,这有点复杂(但也许我只是感到困惑)。
我能够计算我的正弦波,但我并没有真正使用帧计数器。我要做的是,计算一个theta_increment 变量,下次我需要计算样本时可以使用它。像这样工作:
float x = note.frequency / AppSettings::sampleRate;
float theta_increment = 2.0f * M_PI * x;
float value = 0;
if(waveType == SINE){
value = sin(note.theta) * fixedAmplitude;
}
现在我有了当前帧/样本的值,我将 theta_increment 存储在我的 note.theta 成员中,以便我可以将其用于下一个样本:
note.theta += theta_increment;
我查看了大量关于如何计算锯子或三角形的示例,但我无法弄清楚。 (我只有上面提到的数据可供我使用)这是我最后一次尝试,但它不起作用并给我带来了大量的故障:
value = 1.0f - (2.0f * ((float)note.theta / (float)44100));
【问题讨论】:
标签: c++ math waveform trigonometry