![]() |
<!DOCTYPE HTML> <HTML LANG="ja"> <HEAD> <META CHARSET="Shift_JIS"> <TITLE>トーン ダイアラー(Web Audio API 版)</TITLE> </HEAD> <BODY STYLE="background-color:#CCFFFF"> <DIV STYLE="text-align:center"> <BR><BR> <B>トーン ダイアラー(Web Audio API 版)</B> <BR><BR> <FORM onSubmit="return false"> 番号: <INPUT TYPE=TEXT ID="data" SIZE=50> <BR><BR> <INPUT TYPE=BUTTON ID="btn" VALUE="ダイアル" onClick="dial()"> <BR> </FORM> </DIV> <SCRIPT TYPE="text/javascript"> <!-- function dial() { var data = document.getElementById("data").value; // データ if(!data.length) // 未入力 return; elem_btn.disabled = true; var time = aud_ctx.currentTime; var osc_l, osc_h; osc_l = undefined; for(var i_data = 0; i_data < data.length; i_data++) { var freq_l, freq_h; // 低群,高群周波数 switch(data[i_data]) { case "1": freq_l = 697; freq_h = 1209; break; case "2": freq_l = 697; freq_h = 1336; break; case "3": freq_l = 697; freq_h = 1477; break; case "A": freq_l = 697; freq_h = 1633; break; case "4": freq_l = 770; freq_h = 1209; break; case "5": freq_l = 770; freq_h = 1336; break; case "6": freq_l = 770; freq_h = 1477; break; case "B": freq_l = 770; freq_h = 1633; break; case "7": freq_l = 852; freq_h = 1209; break; case "8": freq_l = 852; freq_h = 1336; break; case "9": freq_l = 852; freq_h = 1477; break; case "C": freq_l = 852; freq_h = 1633; break; case "*": freq_l = 941; freq_h = 1209; break; case "0": freq_l = 941; freq_h = 1336; break; case "#": freq_l = 941; freq_h = 1477; break; case "D": freq_l = 941; freq_h = 1633; break; case ",": time += 2; // 2 秒ディレイ continue; default: continue; } with(osc_l = aud_ctx.createOscillator()) { type = "sine"; frequency.value = freq_l; onended = osc_ended; // Firefox 25,26 では機能しない connect(gain_l); } with(osc_h = aud_ctx.createOscillator()) { type = "sine"; frequency.value = freq_h; onended = osc_ended; connect(gain_h); } osc_l.start(time); osc_h.start(time); time += 0.07; // 70 ms トーン osc_l.stop(time); osc_h.stop(time); time += 0.05; // 50 ms ポーズ } if(osc_l == undefined) elem_btn.disabled = false; else osc_l.onended = osc_ended_fin; } function osc_ended(e) { e.currentTarget.disconnect(); } function osc_ended_fin(e) { e.currentTarget.disconnect(); elem_btn.disabled = false; } with(aud_ctx = (window.webkitAudioContext == undefined) ? new AudioContext() : new webkitAudioContext()) { gain_l = createGain(); gain_l.gain.value = 0.5; gain_l.connect(destination); gain_h = createGain(); gain_h.gain.value = 0.5; gain_h.connect(destination); } elem_btn = document.getElementById("btn"); // ページを再ロードしたときのため document.forms[0].reset(); elem_btn.disabled = false; //--> </SCRIPT> </BODY> </HTML> |