Pergunta

Estou revisitando um programa da estação do scanner ID construímos há séculos e tenho um pedido dos usuários para fazer um sinal sonoro do sistema. Estamos pensando em mudar o sistema para um navegador web, mas é possível invocar um sinal sonoro alto-falante via javascript ou algo assim? Ele não precisa ser cross-browser compatível, mas provavelmente precisa de trabalho no Windows ou Linux. As estações em questão são não equipada com uma placa de som ou alto-falantes externos , daí o pedido de acesso altifalante do PC.

Eu sei que alguém vai dizer isso, então eu vou abordar isso de cara: Eu não me importo o que você pensa sobre as aplicações que fazem o ruído, isso não é para você . Usuários solicitá-lo, faz sentido, eo scanner hardware já faz barulho de qualquer maneira. Sim, nós dar feedback visual, com texto distinguíveis e cor, mas nós achamos que as pessoas aceitam o sinal existente como um feedback positivo e adicionando contexto mais audio ajudaria.

Foi útil?

Solução

Usando JavaScript, é impossível -. JavaScript não tem acesso ao computador do cliente, exceto os cookies eo novo armazenamento local HTML5

O que você pode fazer, no entanto, é usar um applet Java que será controlável via JavaScript - escondido ou não.

Você pode encontrar um exemplo aqui .

Isto requer tempo de execução Java para ser instalado no computador do cliente.

Outras dicas

É possível com JavaScript hoje.

Aqui está um rápida e suja função que eu escrevi ...

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 .

Tentar seguinte forma: Pode fácil para você ....

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();" />

Eu acho que sua melhor aposta seria um applet java fazendo o trabalho ...

Isto não é possível com Javascript nativa. Você poderia escrever um controle ActiveX para fazê-lo, no entanto.

Solução de Alex me deu Uncaught TypeError: osc.noteOn is not a function

Este fez no entanto:

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)

Tomou daqui

Hope isso poupa-lhe algum tempo

Eu honestamente não testei isso, mas seria vale uma olhada,

real Java de como emitir um beep mas não depende de você ser capaz de garantir o seu cliente tem uma versão apropriada do JDK instalado em cada máquina que você está alvejando.

Na verdade isso é possível, provavelmente devido às novas funções implementadas em Java, entretanto. Aqui está um pequeno exemplo:

var context = new AudioContext();
var o = context.createOscillator();
o.type = "sine";
o.connect(context.destination);
o.start();
setTimeout(function(){ 
        o.stop();
}, 100);

Para obter mais informações, visite este site https: // marcgg. com / blog / 2016/11/01 / javascript de áudio / onde eu encontrei a solução.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top