<!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>
|