0

これらの波の公式を見てきましたが、それらを実装する方法がわかりません。SINE 波と SQUARE 波を計算できました。

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);
}

私が試した式は、この例とwikiの説明に基づいていました:

square(t) = sgn(sin(2πt))

// this is how I tried to implement it
theta_increment - floor(theta_increment - 0.5f);

しかし、これは非常に低いサウンドのトーンを生成し、周波数の変更は何の効果もないようです (とにかく私が聞くことができるものではありません)。誰かがのこぎり歯と三角形の実装を手伝ってくれますか? サインやスクエアとは異なり、私はこれらの式をよく理解していないので、いくつかの説明が非常に役立ちます.

4

1 に答える 1

3

デルファイ コード。式が明確であることを願っています。周波数と大きさは一貫しています。

  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;

結果:

ここに画像の説明を入力

于 2012-08-17T04:27:25.273 に答える