PC Speaker подать звуковой сигнал через JavaScript? - PullRequest
11 голосов
/ 29 октября 2009

Я пересматриваю программу станции ID-сканера, которую мы создали много лет назад, и у меня есть запрос от пользователей сделать системный звуковой сигнал. Мы рассматриваем возможность переноса системы в веб-браузер, но возможно ли вызвать звуковой сигнал динамика через javascript или что-то еще? Он не должен быть кросс-браузерным, но, вероятно, должен работать на Windows или Linux. Рассматриваемые станции не оснащены звуковой картой или внешними громкоговорителями , поэтому запрос на доступ к громкоговорителю ПК.

Я знаю, что кто-то скажет это, поэтому я сразу же расскажу об этом: мне все равно, что вы думаете о приложениях, создающих шум, это не для вас Пользователи просят об этом, это имеет смысл, и аппаратный сканер уже все равно шумит. Да, мы даем визуальную обратную связь с различимым текстом и цветом, но мы находим, что люди принимают существующий звуковой сигнал как положительный отзыв, и добавление большего количества аудио контекста поможет.

Ответы [ 8 ]

9 голосов
/ 29 октября 2009

Используя JavaScript, это невозможно - JavaScript не имеет доступа к клиентскому компьютеру, кроме файлов cookie и нового локального хранилища HTML5.

Однако вы можете использовать Java-апплет, который будет управляться через JavaScript - скрытый или нет.

Вы можете найти пример здесь .

Для этого на клиентском компьютере должна быть установлена ​​среда выполнения Java.

4 голосов
/ 02 ноября 2012

Сегодня это возможно с JavaScript.

Вот быстрая и грязная функция, которую я написал ...

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 .

3 голосов
/ 02 апреля 2015

Попробуйте следующим образом: Это может быть легко для вас ....

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();" />
2 голосов
/ 29 октября 2009

Я думаю, что лучшим вариантом будет Java-апплет, выполняющий работу ...

1 голос
/ 26 сентября 2016

Решение от Алекса дало мне 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)

Взял отсюда

Надеюсь, это сэкономит вам время

1 голос
/ 29 октября 2009

Это невозможно с нативным Javascript. Вы можете написать элемент управления ActiveX для этого.

0 голосов
/ 17 апреля 2019

На самом деле это возможно, возможно, из-за новых функций, реализованных в 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.com/blog/2016/11/01/javascript-audio/, где я нашел решение.

0 голосов
/ 29 октября 2009

Честно говоря, я не проверял это, но стоило бы посмотреть,

Реальная Java - это способ подачи звукового сигнала , но это зависит от того, сможете ли вы убедиться, что у вашего клиента установлена ​​соответствующая версия JDK, установленная на каждой целевой машине.

...