2009-10-28 12 views
11

Wracam do programu stacji skanera ID, który zbudowaliśmy wieki temu i mam prośbę od użytkowników o wygenerowanie sygnału dźwiękowego. Zastanawiamy się nad przeniesieniem systemu do przeglądarki internetowej, ale czy można wywołać dźwięk głośnika za pośrednictwem javascript? Nie musi być kompatybilny z wieloma przeglądarkami, ale prawdopodobnie musi działać w systemie Windows lub Linux. Wspomniane stacje są nie wyposażone w kartę dźwiękową lub głośniki zewnętrzne, stąd prośba o dostęp do głośników PC.Sygnał głośnika komputera PC za pośrednictwem javascript?

Wiem, że ktoś to powie, więc zajmę się tym z góry: nie obchodzi mnie, co myślisz o hałasowaniu aplikacji, to nie jest dla ciebie. Użytkownicy żądają tego, ma to sens, a skaner sprzętu i tak już robi hałas. Tak, dajemy wizualną informację zwrotną, z rozróżnialnym tekstem i kolorem, ale uważamy, że ludzie akceptują istniejący sygnał dźwiękowy jako pozytywne sprzężenie zwrotne i pomocna byłaby dodatkowa kontekstowość dźwięku.

+1

Jeśli nie muszą być specyficzne dla przeglądarki, co przeglądarka ty kierowania? –

+0

Cokolwiek działa. Firefox, IE, Chrome, Safari (sans OSX). Patrzyłem na Mozillę Prism, ale dodatkowe sprzężenie audio jest prawdopodobnie priorytetem. – jldugger

+0

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

Odpowiedz

9

Korzystanie z JavaScript, to niemożliwe - JavaScript nie ma dostępu do komputera klienckiego z wyjątkiem ciasteczka i nowym HTML5 pamięci lokalnej.

Możesz jednak użyć apletu Java, który będzie sterowany przez JavaScript - ukryty lub nie.

Możesz znaleźć example here.

Wymaga to zainstalowania środowiska wykonawczego Java na komputerze klienckim.

1

Nie jest to możliwe w macierzystym Javascript. Możliwe, że możesz napisać kontrolkę ActiveX, aby to zrobić.

+0

O ile zgodność OP pod względem przeglądarek nie stanowi problemu, ActiveX zdecydowanie nie jest najlepszym wyborem, jeśli rozważana jest jakakolwiek forma wzajemnej (tj. Krzyżowej) kompatybilności. –

+1

@Alan Zgadzam się, chociaż aplety sprawiają, że czuję się prawie tak samo jak ActiveX. –

2

Myślę, że najlepiej byłoby applet java robi robotę ...

0

Szczerze nie testowałem tego, ale warto byłoby spojrzenie,

Real Java's how to emit a beep ale to nie zależy, że jesteś w stanie zapewnić klientowi posiada odpowiednią wersję JDK zainstalowane na każdym komputerze jesteś kierowanie.

+0

NIE pracować bez karty dźwiękowej –

4

Jest to możliwe dzięki dzisiejszej obsłudze JavaScript.

Oto szybkie & brudny funkcja pisałem ...

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

daje błąd 'Uncaught TypeError: osc.noteOn nie jest zakresie funkcji –

+2

NIE DZIAŁA BEZ karty dźwiękowej –

3

Spróbuj według następującego schematu: To może dla ciebie łatwe ....

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

nie działa bez karty dźwiękowej –

1

Rozwiązanie przez Alex dał mi Uncaught TypeError: osc.noteOn is not a function

Ten zrobił to jednak:

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

Nadzieja to zaoszczędzić trochę czasu

+0

NIE DZIAŁA BEZ karty dźwiękowej –

Powiązane problemy