В то время верный ответ был верным, но теперь неверным; Вы можете сделать это в чистом JavaScript. Но один ответ с использованием javascript больше не работает, а другие ответы довольно ограничены или не используют чистый javascript.
Я создал собственное решение, которое хорошо работает и позволяет вам контролировать громкость, частоту и тип волны.
//if you have another AudioContext class use that one, as some browsers have a limit
var audioCtx = new (window.AudioContext || window.webkitAudioContext || window.audioContext);
//All arguments are optional:
//duration of the tone in milliseconds. Default is 500
//frequency of the tone in hertz. default is 440
//volume of the tone. Default is 1, off is 0.
//type of tone. Possible values are sine, square, sawtooth, triangle, and custom. Default is sine.
//callback to use on end of tone
function beep(duration, frequency, volume, type, callback) {
var oscillator = audioCtx.createOscillator();
var gainNode = audioCtx.createGain();
oscillator.connect(gainNode);
gainNode.connect(audioCtx.destination);
if (volume){gainNode.gain.value = volume;};
if (frequency){oscillator.frequency.value = frequency;}
if (type){oscillator.type = type;}
if (callback){oscillator.onended = callback;}
oscillator.start();
setTimeout(function(){oscillator.stop()}, (duration ? duration : 500));
};
Кто-то предложил мне отредактировать это, чтобы отметить, что оно работает только в некоторых браузерах. Однако, насколько я могу судить, Audiocontext, похоже, поддерживается во всех современных браузерах. Это не поддерживается в IE, но это было прекращено Microsoft. Если у вас есть какие-либо проблемы с этим в конкретном браузере, пожалуйста, сообщите об этом.