我需要计算一个三角形和锯齿波,但由于我的模型和我能够使用的数据,它有点复杂(但也许我只是感到困惑)。
我能够计算出我的正弦波,但我并没有真正使用帧计数器。我所做的是,计算一个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));