Una forma para crear sonido sin utilizar una pista de sonido es utilizando la interface OscillatorNode la cual sirve para reproducir frecuencias en específico, esta interface nos ofrece algunos tipos de sonido y solo basta con crear el objeto y poner los atributos deseados, en el siguiente ejemplo tengo un arreglo el cual tiene las frecuencias de las notas musicales (hay unas redondeadas espero que no me crucifiquen los músicos) y dependiendo el botón presionado se ejecuta el sonido:
Demo:
Código HTML
<div> <button onclick="Sonido(0)">DO</button> <button onclick="Sonido(1)">DO#</button> <button onclick="Sonido(2)">RE</button> <button onclick="Sonido(3)">RE#</button> <button onclick="Sonido(4)">MI</button> <button onclick="Sonido(5)">FA</button> <button onclick="Sonido(6)">FA#</button> <button onclick="Sonido(7)">SOL</button> <button onclick="Sonido(8)">SOL#</button> <button onclick="Sonido(9)">LA</button> <button onclick="Sonido(10)">LA#</button> <button onclick="Sonido(11)">SI</button> </div>
Código JS
//contiene la vibración por segundo de la nota //posición en el arreglo: do=0,do#=1,re=2........ var Sonidos= [261,277,293,311,329,349,369,392,415,440,466,493]; //creamos contexto var context = new (window.AudioContext || window.webkitAudioContext)(); function Sonido(nota){ //creamos oscilador var osc = context.createOscillator(); // admite: sine, square, sawtooth, triangle osc.type = 'sawtooth'; osc.frequency.value=Sonidos[nota]; //asignamos el destino para el sonido osc.connect(context.destination); //iniciamos la nota osc.start(); //detenemos la nota medio segundo despues osc.stop(context.currentTime + .5); }