рдЬрдмрдХрд┐ рдлреЛрди рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдХреЛ рдХрд┐рд╕реА рдкрддрд▓реЗ рдХреЗ рд╕рд╛рде рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдорд╛рдкрдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ, рдХрд┐рд╕реА рдХреЗ рд╕рд╛рде рдХрдоред
рдореИрдВрдиреЗ рдЗрд╕
рд╡рд┐рд╢реЗрд╖ рд╕рд╣рдЬ рдХреЛрдбрд┐рдВрдЧ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдФрд░ рдореБрдЭреЗ рдЕрдкрдиреА рдПрдХ рдкреНрд░реЗрдорд┐рдХрд╛-рд╕рдВрдЧреАрддрдХрд╛рд░ рдХреЗ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХреЛ рдпрд╛рдж рдЖрдпрд╛: "рдпрджрд┐ рдЖрдк рдЦреЗрд▓рддреЗ рд╣реИрдВ, рддреЛ рдкрд┐рдпрд╛рдиреЛред" рдФрд░ рдЙрд╕рдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛: рддреЛ рдРрд╕рд╛ рд╣реА рд╣реЛред рдЦреЗрд▓рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ рдПрдХ рдкрд┐рдпрд╛рдиреЛ рд▓рд┐рдЦреВрдВрдЧрд╛ред
рдФрд░ рд▓рд┐рдЦ рджрд┐рдпрд╛ ред
рдореИрдВ рддреБрд░рдВрдд рдЖрд░рдХреНрд╖рдг рдХрд░ рджреВрдВрдЧрд╛: рдореИрдВ рдХрднреА рд╕рдВрдЧреАрддрдХрд╛рд░ рдирд╣реАрдВ рд╣реВрдВ, рдореЗрд░реА рд╕рдВрдЧреАрдд рд╢рд┐рдХреНрд╖рд╛ рдПрдХ рдкрд░реЗрд╢рд╛рди рдЧрд┐рдЯрд╛рд░ рдкрд░ рдПрдХ рджрд░реНрдЬрди рдЪреЛрд░ рдЧреАрддреЛрдВ рддрдХ рд╕реАрдорд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЗ рд╕рд╛рде рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдИрд╢реНрд╡рд░рд╡рд┐рд╣реАрди рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореБрдЭреЗ рдЗрд╕рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдП рддреЛ рдореБрдЭреЗ рдмрд╣реБрдд рдЦреБрд╢реА рд╣реЛрдЧреАредрддреЛ рдЪрд▓реЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдХреНрд▓рд╛рд╕рд┐рдХрд▓ рдкрд┐рдпрд╛рдиреЛ рдХреЗ рдХреАрдмреЛрд░реНрдб рдореЗрдВ A0 (рд▓рд╛ рд╕рдм-рдХрд╛рдЙрдВрдЯрд░-рдСрдХреНрдЯреЗрд╡, рд╕рд╛рдЙрдВрдб рдлреНрд░реАрдХреНрд╡реЗрдВрд╕реА 27.5 Hz) рд╕реЗ рд▓реЗрдХрд░ C8 (рдкрд╛рдВрдЪрд╡реЗрдВ рдСрдХреНрдЯреЗрд╡ рддрдХ, рдлреНрд░реАрдХреНрд╡реЗрдВрд╕реА 4186 Hz) рддрдХ рдХреА рд░реЗрдВрдЬ рдореЗрдВ 88 рдХреАрдЬрд╝ рд╣реЛрддреА рд╣реИрдВред рдХреАрдмреЛрд░реНрдб рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕рдкреНрддрдХ рдореЗрдВ рдмрд╛рд░рд╣ рдиреЛрдЯ рд╣реЛрддреЗ рд╣реИрдВ:
рд╕реА ,
рд╕реА рддреЗрдЬ , рдбреА,
рд╕реА рддреЗрдЬ , рдПрдордЖрдИ, рдПрдлрдП,
рд╕реА рддреЗрдЬ , рдирдордХ,
рдЬреА рддреЗрдЬ , рдП,
рдПрдХ рддреЗрдЬ / рдмреА рдлреНрд▓реИрдЯ , рд╕реАред рдКрдкрд░реА рдкрдВрдХреНрддрд┐ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдмреЛрд▓реНрдб рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡реЗ рдЖрдорддреМрд░ рдкрд░ рдХреАрдмреЛрд░реНрдб рдкрд░ рдХрд╛рд▓реЗ рд╣реЛрддреЗ рд╣реИрдВред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рд╕рдкреНрддрдХ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдмрд╕
рд▓рдЧрдиреЗ рд╡рд╛рд▓реЗ рдиреЛрдЯреЛрдВ рдХреА рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП , рдкреИрдЯрд░реНрди рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ: рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХрд╛ рд╕рдкреНрддрдХ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рджреЛрдЧреБрдирд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐:
Nx = N1 ├Ч 2
x-1 , рдЬрд╣рд╛рдВ:
- рдПрди рдиреЛрдЯ рдХрд╛ рдирд╛рдо рд╣реИ;
- x рдЕрд╖реНрдЯрдХ рд╕рдВрдЦреНрдпрд╛ рд╣реИ (0 рд╕реЗ 8 рддрдХ);
- рдПрдирдПрдХреНрд╕, рдХреНрд░рдорд╢рдГ, рд╕рдкреНрддрдХ рдПрдХреНрд╕ рдХреЗ рдиреЛрдЯ рдПрди рдХреЗ рдЕрдиреБрд░реВрдк рдзреНрд╡рдирд┐ рдХреА рдЖрд╡реГрддреНрддрд┐;
рд╕реВрддреНрд░ рдореЗрдВ, N1 N0 рдХреЗ рдмрдЬрд╛рдп рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрдк-рдХрд╛рдЙрдВрдЯрд░-рдСрдХреНрдЯреЗрд╡ (N0) рдХреЗ рдиреЛрдЯреЛрдВ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдорд╛рдирд╡ рдХрд╛рди рджреНрд╡рд╛рд░рд╛ рд╢реНрд░рд╡рдг рдХреА рджрд╣рд▓реАрдЬ рдХреЗ рдиреАрдЪреЗ рдПрдХ рдзреНрд╡рдирд┐ рдЖрд╡реГрддреНрддрд┐ рд╣реЛрддреА рд╣реИ (<20 Hz)ред
рдиреЛрдЯреЛрдВ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрдВрдЯреНрд░реЛрд╡рд░реНрд╕реА рдХреЗ рдиреЛрдЯреЛрдВ рдХреА рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдХрд╛рдлреА рд╕рдЯреАрдХ рдорд╛рдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рдирд╕реЗ рд╣рдо рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣рд╛рдБ рд╡реЗ рд╣реИрдВ:
C: 32.703,
C #: 34.648,
рдбреА: 36.708,
рдбреА #: 38.891,
рдИ: 41.203,
рдПрдл: 43.654,
рдПрдл #: 46.249,
рдЬреА: 48.999,
рдЬреА #: 51.913,
рдПрдХ: 55,
рдП #: 58.27,
рдмреА: 61.735
рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ
"A4"
рдпрд╛
"C5#"
рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдВрдЬреА рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреА рдзреНрд╡рдирд┐ рдХреА рдЖрд╡реГрддреНрддрд┐ рд▓реМрдЯрд╛рддрд╛ рд╣реИ:
function play(key) { var controctave = { 'C': 32.703, '#': 34.648, 'D': 36.708, 'D#': 38.891, 'E': 41.203, 'F': 43.654, 'F#': 46.249, 'G': 48.999, 'G#': 51.913, 'A': 55, 'A#': 58.27, 'B': 61.735, }, note = key[0].toUpperCase(), octave = parseInt(key[1]), sharp = key[2] == '#' ? true : false; if (sharp) { return controctave[note + '#'] * Math.pow(2, octave-1); } else { return controctave[note] * Math.pow(2, octave-1); } }
рдЕрд░реЗ рд╣рд╛рдБ, рд╣рдо рд╕реБрдВрджрд░ рдирд╣реАрдВ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╢реАрдШреНрд░ рд╣реАред рдереЛрдбрд╝рд╛ рдЫреЛрдЯрд╛:
function play(key) { var controctave = { 'C': 32.703, '#': 34.648, 'D': 36.708, 'D#': 38.891, 'E': 41.203, 'F': 43.654, 'F#': 46.249, 'G': 48.999, 'G#': 51.913, 'A': 55, 'A#': 58.27, 'B': 61.735}; freq = key[2] == '#' ? controctave[key[0].toUpperCase() + '#'] * Math.pow(2, (key[1]|0) - 1) : controctave[key[0].toUpperCase()] * Math.pow(2, (key[1]|0) - 1); return freq; }
рдХреЛрдб рдХреА рдЪрд╛рд░ рд▓рд╛рдЗрдиреЗрдВ рдкрд╣рд▓реЗ рд╣реА рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рдЪреБрдХреА рд╣реИрдВред
рдЖрдЗрдП рдПрдХ рдХреАрдмреЛрд░реНрдб рдбреНрд░рд╛ рдХрд░реЗрдВ
88 рдХреАрдмреЛрд░реНрдб рдХреАрдЬрд╝ A рдиреЛрдЯ (A0) рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВред
рддрджрдиреБрд╕рд╛рд░, рдЪрдХреНрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛: рдЪрдХреНрд░ рдореЗрдВ рд╣рдо 12 рдЪрд╛рдмрд┐рдпрд╛рдБ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рд╣рд░
рджреВрд╕рд░реЗ, рдЪреМрдереЗ, рд╕рд╛рддрд╡реЗрдВ, рдиреМрд╡реЗрдВ рдФрд░ рдЧреНрдпрд╛рд░рд╣рд╡реЗрдВ рдХрд╛рд▓реЗ рдмрдирд╛рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдХреБрдВрдЬреА рдХреЛ рдиреЛрдЯ рдХреЗ рдЕрдиреБрд░реВрдк рдПрдХ рдЖрдИрдбреА рджреА рдЬрд╛рдПрдЧреА рдЬрд┐рд╕реЗ рджрдмрд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдЙрд╕реЗ рдЦреЗрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЗрд╕ рддрд░рд╣:
var width = 1000; var deck = document.createElement('div'), octave = ['A', 'A#', 'B', 'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#'], id = "", keynumber = 0, whitekeys = 0, keys = []; deck.style.width = width; parent: for (var i = 0; i < 8; i++) { for (var j = 0; j < 12; j++) { keynumber = (i * 12) + j; if (keynumber >= 88) break parent; keys[keynumber] = document.createElement('div'); keys[keynumber].style.border = "1px solid black"; keys[keynumber].style.position = "absolute"; id = (octave[j][1] == '#') ? octave[j] + i + 's' : octave[j] + i; keys[keynumber].id = id; switch(j%12) { case 1: case 3: case 6: case 8: case 10: keys[keynumber].style.backgroundColor = 'black'; keys[keynumber].style.left = ((width / 50 * whitekeys) - (width / 200)) + 'px'; keys[keynumber].style.width = width/100 + "px"; keys[keynumber].style.height = "200px"; keys[keynumber].style.zIndex = 10; break; default: keys[keynumber].style.backgroundColor = 'white'; keys[keynumber].style.left = (width / 50 * whitekeys) + 'px'; keys[keynumber].style.width = width/50 + "px"; keys[keynumber].style.height = "300px"; whitekeys++; } deck.appendChild(keys[keynumber]); } } document.body.appendChild(deck);
рдФрд░ рдлрд┐рд░, рд╣рдо
рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдб рдХреЛ рдПрдХ рдЕрдкрдардиреАрдп рдЧрдВрджрдЧреА рдореЗрдВ рдмрджрд▓ рджреЗрддреЗ
рд╣реИрдВ, рд╣рдо рдереЛрдбрд╝рд╛ рдЕрдиреБрдХреВрд▓рди рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред
var width = 1000, octave = ['A', 'A#', 'B', 'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#'], id = "", div, whitekeys=0, keys = []; parent: for (var i = 0; i < 8; i++) { for (var j = 0; j < 12; j++) { if ((i * 12) + j >= 88) break parent; div = document.createElement('div'); div.id = (octave[j][1] == '#') ? octave[j][0] + ((((i * 12) + j + 9) / 12)|0) + 's' : octave[j] + ((((i * 12) + j + 9) / 12)|0); if (j % 12 == 1 || j % 12 == 4 || j % 12 == 6 || j % 12 == 9 || j % 12 == 11) { div.setAttribute('style', 'border:1px solid black; position:absolute; background-color:black; left:' + ((width / 50 * whitekeys) - (width / 200)) + 'px; width:' + width/100 + 'px; height: 200px; z-index:1;');} else { div.setAttribute('style', 'border:1px solid black; position:absolute; background-color:white; left:' + (width / 50 * whitekeys) + 'px; width:' + width/50 + 'px; height:300px;'); whitekeys++; } document.body.appendChild(div);}}
рд╣рдордиреЗ рдПрдХ рдФрд░ 13 рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рд▓рдЧрддрд╛ рд╣реИ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдпрд╛рдиреЛ рд╕рд┐рдЦрд╛рдУ
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ
рд╡реЗрдм рдСрдбрд┐рдпреЛ рдПрдкреАрдЖрдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛
рд╣реИ , рдЬреЛ рдлрд┐рд▓рд╣рд╛рд▓ рдХреЗрд╡рд▓ рд╡реЗрдмрдХрд┐рдЯ-рдЖрдзрд╛рд░рд┐рдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИред
рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдШреЛрд╖рдгрд╛ рд▓рд╛рдЗрди рдореЗрдВ рдСрдбрд┐рдпреЛ рд╕рдВрджрд░реНрдн рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЬреЛрдбрд╝реЗрдВ:
context = window.AudioContext ? new AudioContext() : new webkitAudioContext();
рдПрдХ рдХреАрд╕реНрдЯреНрд░реЛрдХ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝реЗрдВ:
document.body.addEventListener('click', play);
рдФрд░ рдкреНрд▓реЗ рдлрдВрдХреНрд╢рди рдХреЛ рд╣реА рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдмрджрд▓реЗрдВ:
function play(e) { var controctave = { 'C': 32.703, 'Cs': 34.648, 'D': 36.708, 'Ds': 38.891, 'E': 41.203, 'F': 43.654, 'Fs': 46.249, 'G': 48.999, 'Gs': 51.913, 'A': 55, 'As': 58.27, 'B': 61.735}, osc = context.createOscillator(); osc.frequency.value = e.target.id[2] == 's' ? controctave[e.target.id[0] + 's'] * Math.pow(2, (e.target.id[1]|0) - 1) : controctave[e.target.id[0]] * Math.pow(2, (e.target.id[1]|0) - 1); osc.type = "square"; osc.connect(context.destination); osc.start(0); setTimeout(function() { osc.stop(0); osc.disconnect(context.destination); }, 1000 / 2);}
рдпрд╣рд╛рдВ рд╣рдордиреЗ рдПрдХ рдерд░рдерд░рд╛рдирд╡рд╛рд▓рд╛ рдмрдирд╛рдпрд╛:
osc = context.createOscillator();
, рдЙрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдзреНрд╡рдирд┐ рдЖрд╡реГрддреНрддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ:
osc.frequency.value = e.target.id[2] == 's' ? controctave[e.target.id[0] + 's'] * Math.pow(2, (e.target.id[1]|0) - 1) : controctave[e.target.id[0]] * Math.pow(2, (e.target.id[1]|0) - 1);
osc.frequency.value = e.target.id[2] == 's' ? controctave[e.target.id[0] + 's'] * Math.pow(2, (e.target.id[1]|0) - 1) : controctave[e.target.id[0]] * Math.pow(2, (e.target.id[1]|0) - 1);
(рдареАрдХ рд╣реИ, рд╣рдо рдХреЛрдб рдХреА рд╕рдлрд╛рдИ рдФрд░ рд╕рд╛рдл-рд╕рдлрд╛рдИ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдареАрдХ рд╣реИ?), рддрд░рдВрдЧ рд╕реЗрдЯ рдХрд░реЗрдВ:
osc.type = "square";
(рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣
osc.connect(context.destination);
рдерд╛) рдЗрд╕реЗ рдзреНрд╡рдирд┐ рдЖрдЙрдЯрдкреБрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛:
osc.connect(context.destination);
, рдФрд░ рдкреНрд▓реЗрдмреИрдХ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдЖрджреЗрд╢ рджрд┐рдпрд╛:
osc.start(0);
ред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдереЛрдбрд╝реА рджреЗрд░ (500ms) рдХреЗ рдмрд╛рдж рдХреБрдВрдЬреА рдХреЛ рдЪреБрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдЪреАрдЦрд╝ рдЬрд╛рдПрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рд▓рд┐рдкрдЯреЗ
osc.stop(0)
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЕрдирд┐рд╡рд╛рд░реНрдп рддрддреНрд╡ -
osc.disconnect(context.destination);
- рдЖрдЙрдЯрдкреБрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдерд░рдерд░рд╛рдирд╡рд╛рд▓рд╛ рдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред
рд╣рдо рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХрд╣рддреЗ рд╣реИрдВ: рд╣рдореЗрдВ рдЗрддрдирд╛ рд╕рд░рд▓ рдХреЛрдб рдорд┐рд▓рд╛:
var width = 1000, octave = ['A', 'A#', 'B', 'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#'], id = "", div, whitekeys=0, keys = [],context = window.AudioContext ? new AudioContext() : new webkitAudioContext(); parent: for (var i = 0; i < 8; i++) { for (var j = 0; j < 12; j++) { if ((i * 12) + j >= 88) break parent; div = document.createElement('div'); div.id = (octave[j][1] == '#') ? octave[j][0] + ((((i * 12) + j + 9) / 12)|0) + 's' : octave[j] + ((((i * 12) + j + 9) / 12)|0); if (j % 12 == 1 || j % 12 == 4 || j % 12 == 6 || j % 12 == 9 || j % 12 == 11) { div.setAttribute('style', 'border:1px solid black; position:absolute; background-color:black; left:' + ((width / 50 * whitekeys) - (width / 200)) + 'px; width:' + width/100 + 'px; height: 200px; z-index:1;');} else { div.setAttribute('style', 'border:1px solid black; position:absolute; background-color:white; left:' + (width / 50 * whitekeys) + 'px; width:' + width/50 + 'px; height:300px;'); whitekeys++; } document.body.appendChild(div);}} document.body.addEventListener('click', play); function play(e) { var controctave = { 'C': 32.703, 'Cs': 34.648, 'D': 36.708, 'Ds': 38.891, 'E': 41.203, 'F': 43.654, 'Fs': 46.249, 'G': 48.999, 'Gs': 51.913, 'A': 55, 'As': 58.27, 'B': 61.735}, osc = context.createOscillator(); osc.frequency.value = e.target.id[2] == 's' ? controctave[e.target.id[0] + 's'] * Math.pow(2, (e.target.id[1]|0) - 1) : controctave[e.target.id[0]] * Math.pow(2, (e.target.id[1]|0) - 1); osc.type = "square"; osc.connect(context.destination); osc.start(0); setTimeout(function() { osc.stop(0); osc.disconnect(context.destination); }, 1000 / 2);}
рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐
рдЕрдм рдореБрдЭреЗ реирез рд╡реАрдВ рд╕рджреА рдХреЗ рд╕реНрдЯреНрд░реИрдбрд┐рд╡реЗрд░рд┐рдпрд╕ рд╡реЗрдм рдСрдбрд┐рдпреЛ рдПрдкреАрдЖрдИ
рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдПрдХ рдмрд╣реБрдд рд╣реА рд╢рд╛рдВрдд рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬред рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдкрдврд╝ рд╕рдХрддреЗ
рд╣реИрдВ , рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ,
рдПрдордбреАрдПрди рдкрд░ , рдореИрдВ
HTML5Rocks рдкрд░ рдПрдХ
рдЕрдЪреНрдЫрд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдФрд░
рдПрдХ рдФрд░ рдордЬреЗрджрд╛рд░ рдкреНрд░рдпреЛрдЧ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдФрд░ рдкрд┐рдпрд╛рдиреЛ рдмрд╣реБрдд рдЖрджрд┐рдо рдирд┐рдХрд▓рд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рдкреНрд░рдпреЛрдЧ рд╕реЗ рдЦреБрд╢ рд╣реВрдВред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рднреА рд░реБрдЪрд┐ рд░рдЦрддреЗ рдереЗред
рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдПрдХреЛрдб рджреЗрдЦреЗрдВрдкреАрдПрд╕ рдореИрдХрдмреБрдХ рд╕реНрдкреАрдХрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЫреЛрдЯреЗ рдСрдХреНрдЯреЗрд╡ (рдпрд╛рдиреА 130 рд╣рд░реНрдЯреНрдЬ рддрдХ) рдХреЗ рд▓рд┐рдП рд╢реНрд░рд╡реНрдп рдзреНрд╡рдирд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрджрд┐ рдХреАрдмреЛрд░реНрдб рдХреА рдмрд╛рдИрдВ рдУрд░ рдзреНрд╡рдирд┐ рдирд╣реАрдВ рд▓рдЧрддреА рд╣реИ рддреЛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рди рд╣реЛрдВред