Math 在程序代码中实现三角形、锯齿形和反向锯齿形公式
我已经看过了这些波的公式,但我不知道如何实现它们。我可以计算出正弦波和方波:Math 在程序代码中实现三角形、锯齿形和反向锯齿形公式,math,trigonometry,Math,Trigonometry,我已经看过了这些波的公式,但我不知道如何实现它们。我可以计算出正弦波和方波: float x = note.frequency / AppSettings::sampleRate; float theta_increment = 2.0f * M_PI * x; float value = 0; if(waveType == SINE){ value = sin(theta_increment); } else if (waveType == SQUARE){ value =
float x = note.frequency / AppSettings::sampleRate;
float theta_increment = 2.0f * M_PI * x;
float value = 0;
if(waveType == SINE){
value = sin(theta_increment);
}
else if (waveType == SQUARE){
value = sin(note.theta);
value = (value > 0) - (value < 0);
}
但这会产生一个非常低沉的音调,频率的变化似乎没有任何影响(反正我听不到)。有人能帮我实现锯齿形和三角形吗?一些解释将非常有帮助,因为与正弦和平方不同,我不太理解这些公式。Delphi代码。我希望公式是明确的。频率和震级是一致的
w := 1.0; // angular frequency
for i := 0 to 999 do begin
t := i * 2 * Pi / 400 - 3/2 * Pi; // just X-axis scale
wt := w * t;
f := wt / (2.0 * Pi); //frequency
sn := sin(wt); // sine wave
saw := 2.0 * (f - Floor(f)) - 1.0; //sawtooth
f := f + 0.25;
tr := Abs(4 * (f - Floor(f + 0.5))) - 1.0; //triangle
Series1.AddXY(t, sn);
Series2.AddXY(t, saw);
Series3.AddXY(t, tr);
end;
结果:
德尔福代码。我希望公式是明确的。频率和震级是一致的
w := 1.0; // angular frequency
for i := 0 to 999 do begin
t := i * 2 * Pi / 400 - 3/2 * Pi; // just X-axis scale
wt := w * t;
f := wt / (2.0 * Pi); //frequency
sn := sin(wt); // sine wave
saw := 2.0 * (f - Floor(f)) - 1.0; //sawtooth
f := f + 0.25;
tr := Abs(4 * (f - Floor(f + 0.5))) - 1.0; //triangle
Series1.AddXY(t, sn);
Series2.AddXY(t, saw);
Series3.AddXY(t, tr);
end;
结果: