Звуковой сигнал динамика ПК через javascript?
-
08-07-2019 - |
Вопрос
Я возвращаюсь к программе ID scanner station, которую мы создали много лет назад, и у меня есть запрос от пользователей издать системный звуковой сигнал.Мы рассматриваем возможность переноса системы в веб-браузер, но возможно ли вызвать звуковой сигнал динамика с помощью javascript или чего-то еще?Он не обязательно должен быть совместим с несколькими браузерами, но, вероятно, должен работать в Windows или Linux.Станциями, о которых идет речь, являются не оснащен звуковой картой или внешними динамиками, отсюда и запрос на доступ к громкоговорителю ПК.
Я знаю, что кто-то собирается это сказать, поэтому я обращусь к этому заранее:Меня не волнует, что вы думаете о приложениях, создающих шум, это не для тебя.Пользователи запрашивают это, это имеет смысл, и аппаратный сканер все равно уже издает шум.Да, мы предоставляем визуальную обратную связь с различимым текстом и цветом, но мы обнаруживаем, что люди воспринимают существующий звуковой сигнал как положительный отзыв, и добавление большего звукового контекста помогло бы.
Решение
Используя JavaScript, это невозможно - JavaScript не имеет доступа к клиентскому компьютеру, кроме файлов cookie и нового локального хранилища HTML5.
Однако что вы можете сделать, так это использовать Java-апплет, который будет управляться с помощью JavaScript - скрытого или нет.
Вы можете найти пример здесь.
Для этого на клиентском компьютере должна быть установлена среда выполнения Java.
Другие советы
Сегодня это возможно с JavaScript.
Вот быстрый & amp; грязная функция, которую я написал ...
var beep = function(duration, type, finishedCallback) {
if (!(window.audioContext || window.webkitAudioContext)) {
throw Error("Your browser does not support Audio Context.");
}
duration = +duration;
// Only 0-4 are valid types.
type = (type % 5) || 0;
if (typeof finishedCallback != "function") {
finishedCallback = function() {};
}
var ctx = new (window.audioContext || window.webkitAudioContext);
var osc = ctx.createOscillator();
osc.type = type;
osc.connect(ctx.destination);
osc.noteOn(0);
setTimeout(function() {
osc.noteOff(0);
finishedCallback();
}, duration);
};
jsFiddle .
Попробуйте следующий способ: Это может быть легко для вас....
function play_beep() {
var snd = new Audio("http://www.externalharddrive.com/waves/computer/hello.wav");
snd.play();
return false;
}
<input type="submit" value="Play Beep" onclick="return play_beep();" />
Я думаю, что лучшим вариантом будет Java-апплет, выполняющий работу ...
Это невозможно с нативным Javascript. Вы можете написать элемент управления ActiveX для этого.
Решение, которое дал мне Алекс Uncaught TypeError: osc.noteOn is not a function
Однако это сделало свое дело:
Play = (function() {
var ctx = new(AudioContext || webkitAudioContext);
return function(duration, freq, finishedCallback) {
duration = +duration;
if (typeof finishedCallback != "function") {
finishedCallback = function() {};
}
var osc = ctx.createOscillator();
osc.type = 0;
osc.connect(ctx.destination);
osc.frequency.value = freq;
if (osc.start) osc.start();
else osc.noteOn(0);
setTimeout(
function() {
if (osc.stop) osc.stop(0);
else osc.noteOff(0);
finishedCallback();
}, duration
);
};
})();
Play(42, 666)
Надеюсь, это сэкономит вам немного времени
Честно говоря, я этого не тестировал, но на это стоило бы взглянуть,
Настоящая Java - это то, как издавать звуковой сигнал но это зависит от того, сможете ли вы убедиться, что у вашего клиента установлена соответствующая версия JDK на каждой машине, на которую вы ориентируетесь.
На самом деле это возможно, возможно, благодаря новым функциям, реализованным в Java. Вот краткий пример:
var context = new AudioContext();
var o = context.createOscillator();
o.type = "sine";
o.connect(context.destination);
o.start();
setTimeout(function(){
o.stop();
}, 100);
Чтобы получить больше информации, посетите этот сайт https: // marcgg. ru / blog / 2016/11/01 / javascript-audio / , где я нашел решение.