<form id="sFuncT12" onshow="sMake()"> <label>f0<input type="range" step="any" min="100" max="10000" value="1000" name="f0" ></label> <label>Q <input type="range" step="any" min="0.1" max="5" value="0.7" name="Q" ></label> <canvas name="sCanvas" width="300" height="200"></canvas> <textarea name="HPF1" value="1" cols=30 rows="1">w0=2PI*f0; 1/(1+w0/s);</textarea><input type="button" value="HPF1"/> <textarea name="LPF1" value="1" cols=30 rows="1">w0=2PI*f0;1/(1+s/w0);</textarea><input type="button" value="LPF1"/> <textarea name="HPF2" value="1" cols=30 rows="1">w0=2PI*f0;w2=w0*w0;s2/((w2+w0/Q*s+s2); </textarea> <input type="button" value="HPF2"/> <textarea name="LPF2" value="1" cols=30 rows="1">w0=2PI*f0;w2=w0*w0;w2/(w2+w0/Q*s+s2); </textarea> <input type="button" value="LPF2"/> <textarea name="BPF2" value="1" cols=30 rows="1">w0=2PI*f0;w2=w0*w0;w0/Q*s/(w2+w0/Q*s+s2);</textarea> <input type="button" value="BPF2"/> <textarea name="BEF2" value="1" cols=30 rows="1">w0=2PI*f0;w2=w0*w0;(s2+w2)/(w2+w0/Q*s+s2);</textarea> <input type="button" value="BEF2"/> <textarea name="APF2" value="1" cols=30 rows="1">w0=2PI*f0;w2=w0*w0;(w2-w0/Q*s+s2)/(w2+w0/Q*s+s2);</textarea> <input type="button" value="APF2"/> <textarea name="funcPrt" value="3" cols=33 rows="5">ここに計算式</textarea>
<script type="text/javascript" src="./ujs/sFuncMk.js"></script> <script type="text/javascript" src="./ujs/PaintLogLev.js"></script> <script type="text/javascript"> /* 原作:裏目小僧 (日本語以外に翻訳禁止 以外は自由にご利用下さい)*/ function ZbaseMk(fs){ this.L={fs:fs}; //サンプルレート this.dBmax=25; this.dBmin=-50; this.fmin=5; this.fmax=fs/2; this.z=this; return this; } function sMake(FormName){ var z=ZbaseMk(44100); z.frm= document.getElementById(FormName); z.frm.z=z; function OnSl(e){ let n=e.target.name; z[n]=Math.exp(e.target.value); makesFunc();} function slset(e){let v=e.value;e.step="any"; e.min=Math.log(e.min);e.max=Math.log(e.max);e.value=Math.log(v); e.addEventListener(`input`,OnSl); z.L[e.name]=v; }; slset(z.frm.f0); slset(z.frm.Q ); z.cvs=z.frm.children['sCanvas']; z.cv =z.cvs.getContext("2d"); z.btnA=[]; for(let btn of z.frm)if(btn.type==='button'){ btn.txt=z.frm.children[btn.value]; btn.onclick = function (e){z.txt=e.target.txt;z.funcTxt=sfResponseMk( z.txt.value,z.L );makFunc(); offc=60; }; z.btnA.push(btn); }
const GraphDR = function(z){ z.cv.fillStyle="#ffffff"; z.cv.fillRect(0, 0, z.xs,z.ys); PaintLogLev(z.cv, z.xs, z.ys, 25, -50, z.fmax, z.fmin, z.zav,TFFTViewF, clGray ); if(z.fMark) z.cv.MarkV( z,z.fMark,3); }; z.makFunc = function (){ z.pg=Function("fi","LB",z.funcTxt); z.frqResponse= function (f){ this.pg(f ,this.z.L); }; z.zav=[z]; z.xs = z.cvs.width; z.ys = z.cvs.height; GraphDR(z); if(z.frm.funcPrt)z.frm.funcPrt.value=z.funcTxt.replace(/;/g,";\n"); };
var offc=0; var btnNo=-1; z.onTim= function (e){ if(offc>0) {if(--offc===0)z.fMark=null ;return;} if(btnNo>=0){ z.txt.style.backgroundColor = ''; z.btnA[btnNo].style.backgroundColor = ''; } if(++btnNo >= z.btnA.length)btnNo=0; z.txt=z.btnA[btnNo].txt; z.txt.style.backgroundColor = clAqua; z.btnA[btnNo].style.backgroundColor = clAqua; z.funcTxt=sfResponseMk( z.txt.value, z.L); z.makFunc(); } z.Interval = setInterval(z.onTim , 1000,z); z.onTim(); function onMouseMove(e) { let x=e.offsetX; z.fMark=z_XtoFrq(z.cv,x); GraphDR(z); offc=5; }; z.cvs.addEventListener('mousemove', onMouseMove); return z; }
let sFuncT12= sMake("sFuncT12");
</script> </form>
プライバシーポリシー本文は日本語以外に翻訳禁止