// ->★2次IIRによるサイン波
//次:★2相サイン波
//
const f=440;
var
 fs,w, b1, wk, y1,y:Double;
  i:Integer;
procedure Main();
begin
 fs:=cmd('fs');      // "fs"はサンプルレートでマウス右ボタンで設定出来ます
 msg(format('fs =%5.0f',[fs]));//画面右上に文字列出力
  w:=2*PI()*f/fs;
  b1:=2*cos(w);
  y1:=-sin(w)*$7f00;
  y:=0;
   for i:=1 to trunc(fs*3) do begin          //とりあえず３秒のデータを作成します
    wk:= y;
    y := b1*y - y1;
    y1:= wk;
    if not OutData(Trunc(y)) then exit;//GUIでF9を押せば途中ストップします
  end;
end;
{
for ループの中では 掛け算が1回しか使われていない事に注目して下さい
もっとも簡単なサイン波の作り方です
次は90度違う=sin/cos同時に作成する２相のサイン波の作り方です
}
//次:★2相サイン波