2009-10-28 15 views
11

Ich besuche ein ID-Scanner-Station-Programm, das wir vor Ewigkeiten erstellt haben und ich habe eine Anfrage von Benutzern, ein System-Piep zu machen. Wir überlegen, das System in einen Webbrowser zu verschieben, aber ist es möglich, einen Lautsprecherton per Javascript oder etwas Ähnlichem aufzurufen? Es muss nicht browserübergreifend kompatibel sein, aber es muss wahrscheinlich unter Windows oder Linux funktionieren. Die betreffenden Stationen sind nicht mit einer Soundkarte oder externen Lautsprechern ausgestattet, daher die Anforderung für einen PC-Lautsprecher-Zugang.PC-Lautsprecher Piepton über Javascript?

Ich weiß, jemand wird es sagen, also werde ich das im Voraus ansprechen: Es ist mir egal, was Sie über Anwendungen denken, die Lärm machen, das ist nicht für Sie. Benutzer fragen es, es macht Sinn, und der Hardware-Scanner macht sowieso schon Lärm. Ja, wir geben visuelles Feedback, mit unterscheidbarem Text und Farbe, aber wir stellen fest, dass die Leute den vorhandenen Piepton als positives Feedback akzeptieren und mehr Audiokontext hinzufügen würde.

+1

Wenn es spezifische, nicht Browser sein müssen, welche Browser zielen Sie ab? –

+0

Was auch immer funktioniert. Firefox, IE, Chrome, Safari (ohne OSX). Ich habe mir Mozilla Prism angeschaut, aber zusätzliches Audio-Feedback ist wahrscheinlich eine höhere Priorität. – jldugger

+0

Duplizieren http://stackoverflow.com/questions/879152/how-do-i-make-javascript-beep –

Antwort

9

Verwendung von JavaScript wäre, ist es unmöglich - JavaScript hat keinen Zugriff auf den Client-Computer mit Ausnahme von Cookies und dem neuen HTML5 lokalen Speicher.

Was Sie jedoch tun können, ist ein Java-Applet zu verwenden, das über JavaScript steuerbar ist - versteckt oder nicht.

Sie können eine example here finden.

Dazu muss Java-Laufzeitumgebung auf dem Clientcomputer installiert sein.

1

Dies ist mit nativem Javascript nicht möglich. Sie könnten jedoch möglicherweise ein ActiveX-Steuerelement dafür schreiben.

+0

Während das OP sagte, Cross-Browser-Kompatibilität ist kein Problem, ActiveX ist definitiv nicht die beste Wahl, wenn jede Form der systemübergreifenden (d. H. Cross-OS) Kompatibilität in Betracht gezogen werden soll. –

+1

@Alan Ich stimme zu, obwohl Applets mich fast so sehr zusammenziehen wie ActiveX. –

2

Ich denke, die beste Wahl ein Java-Applet, den Job ...

0

ich ehrlich gesagt habe nicht getestet, aber es wäre ein Blick,

Real Java's how to emit a beep aber es hängt davon ab, Sie in der Lage sein, um sicherzustellen, Ihren Kunden wert zu sein hat eine entsprechende Version des auf jedem Rechner installiert JDK Sie sind Ausrichtung.

+0

FUNKTIONIERT NICHT OHNE SOUNDCARD –

4

Dies ist heute mit JavaScript möglich.

Hier ist ein schnell & schmutzig Funktion schrieb ich ...

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.

+1

gibt Fehler 'Uncaught TypeError: osc.noteOn ist keine Funktion' –

+2

FUNKTIONIERT NICHT OHNE SOUNDCARD –

3

Versuchen Sie folgenden Weg: Es kann einfach für Sie ....

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

+0

FUNKTIONIERT NICHT OHNE SOUNDCARD –

1

Lösung von Alex gab mir Uncaught TypeError: osc.noteOn is not a function

Das tat es aber:

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)

Took it from here

Hoffnung das spart Ihnen einige Zeit

+0

FUNKTIONIERT NICHT OHNE SOUNDCARD –