En este video te mostrare como crear un piano en menos de 10 minutos utilizando javascript, sin la necesidad de tener un mp3 o wav, y solo con un navegador y código.
Piano (pícale a las teclas)
CSS
* { box-sizing:border-box; } body{ margin:0; background:#222; } ul { height:18.875em; width:34em; margin:5em auto; padding:3em 0 0 3em; position:relative; border:1px solid #160801; border-radius:1em; background:-webkit-gradient(linear, right bottom, left top, color-stop(0%,rgba(0,0,0,0.3)), color-stop(100%,rgba(0,0,0,0))), url('https://f.cl.ly/items/2q1f3t0C3R1b0g081w3n/vwood.png'); box-shadow:0 0 50px rgba(0,0,0,0.5) inset, 0 1px rgba(212,152,125,0.2) inset,0 5px 15px rgba(0,0,0,0.5); } li { margin:0; padding:0; list-style:none; position:relative; float:left; } ul .white { height:16em; width:4em; z-index:1; border-left:1px solid #bbb; border-bottom:1px solid #bbb; border-radius:0 0 5px 5px; box-shadow:-1px 0 0 rgba(255,255,255,0.8) inset, 0 0 5px #ccc inset, 0 0 3px rgba(0,0,0,0.2); background: linear-gradient(top, #eee 0%,#fff 100%); } ul .white:active { border-top:1px solid #777; border-left:1px solid #999; border-bottom:1px solid #999; box-shadow:2px 0 3px rgba(0,0,0,0.1) inset, -5px 5px 20px rgba(0,0,0,0.2) inset,0 0 3px rgba(0,0,0,0.2); background: linear-gradient(top, #fff 0%,#e9e9e9 100%); } .black { height:8em; width:2em; margin:0 0 0 -1em; z-index:2; border:1px solid #000; border-radius:0 0 3px 3px; box-shadow:-1px -1px 2px rgba(255,255,255,0.2) inset, 0 -5px 2px 3px rgba(0,0,0,0.6) inset, 0 2px 4px rgba(0,0,0,0.5); background:linear-gradient(45deg, #222 0%,#555 100%); } .black:active { box-shadow:-1px -1px 2px rgba(255,255,255,0.2) inset, 0 -2px 2px 3px rgba(0,0,0,0.6) inset, 0 1px 2px rgba(0,0,0,0.5); background:linear-gradient(left, #444 0%,#222 100%); } .a,.g,.f,.d,.c { margin:0 0 0 -1em; } ul li:first-child { border-radius:5px 0 5px 5px; } ul li:last-child { border-radius:0 5px 5px 5px; }
HTML
<ul class="set"> <li onclick=" jsNota(174.614)" class="white b"></li> <li onclick=" jsNota(184.997)" class="black as"></li> <li onclick=" jsNota(195.998)" class="white a"></li> <li onclick=" jsNota(207.652)" class="black gs"></li> <li onclick=" jsNota(220.000)" class="white g"></li> <li onclick=" jsNota(233.082)" class="black fs"></li> <li onclick=" jsNota(246.942)" class="white f"></li> <li onclick=" jsNota(261.626)" class="white e"></li> <li onclick=" jsNota(277.183)" class="black ds"></li> <li onclick=" jsNota(293.665)" class="white d"></li> <li onclick=" jsNota(311.127)" class="black cs"></li> <li onclick=" jsNota(329.628)" class="white c"></li> </ul>
Javascript
var context= new AudioContext(); function jsNota(frecuencia){ var o= context.createOscillator(); g=context.createGain(); o.connect(g); o.type="sawtooth"; o.frequency.value=frecuencia; g.connect(context.destination); o.start(0); g.gain.exponentialRampToValueAtTime(0.00001,context.currentTime +1.5); }