// ->★2相サイン波
//次:ピ～ン音を2次IIRによる指数減衰で
const f=440;
var
  fs,w, ds,dc,ws,wc,wk:Double;
  i,j:Integer;
procedure Main();
begin
cmd('bufSize=fs*0.2');//バッファサイズを小さくしておきます
 fs:=cmd('fs');  // "fs"はサンプルレートでマウス右ボタンで設定出来ます
  dc:=$7F00;
  ds:=0;

for j:=0 to 10 do begin
   w:=2*PI()*f/fs;//制御性の良さを見る為に周波数を変更してみましょう
   w:=w*(1+0.2*sin(2*PI()*j/10));
   ws:=sin(w);
   wc:=cos(w);
  for i:=1 to trunc(fs*0.2) do begin//約0.2秒ごとに
    wk:=ds;
    ds:=ds*wc+dc*ws;  // wc wsが係数 dc　dsgaが変数
    dc:=dc*wc-wk*ws;  //        wc = cos(w0)    ws = sin(w0)
    OutData(trunc(ds));
  end;
 if isStop then exit; //終了フラグで停止します
 end;
end;
{
さて、前回と違ってループ中の掛け算が４回になりました。
比べてみましょう(下をクリック)
//次:★2次IIRによるサイン波

この方式の利点は動作中に周波数を変更しても動作が安定してる事です
2次IIR方式では周波数を変更するにはゲイン調性が必要になり厄介です
だから周波数を動的に変化させるならこちらが便利です

//次:ピ～ン音を2次IIRによる指数減衰で
}
