2016-08-29 6 views
5

Ich mag eine Funktion, die wie folgt funktioniert:Wiedergabe bestimmte Frequenz mit Javascript

playSound(345, 1000) 

, die einen Ton von 345 Hz für 1000 Millisekunden spielen würden. Was ist der einfachste Weg, dies in JavaScript zu erreichen? Es macht mir nichts aus, wenn es ein Sample (vielleicht eine Sinuswelle oder ein Piano) verwendet oder die Hardware des Computers verwendet, um den Sound zu erzeugen.

+4

WebAudioAPI und [AudioContext.createOscillator] (https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/createOscillator)? – Kaiido

+1

Hätte nie gedacht, dass dies getan werden kann, ich meine Wellenform in einem Web-Browser erstellen. Nice one: D – Viney

+0

Ehrfürchtig. Danke @Kaiido. Ich muss vielleicht eine andere Frage stellen, aber ich würde jetzt gerne wissen, wie man eine Sinuswelle formt, um eine Stimmgabel zu emulieren, einschließlich Attack und Decay. Wer liest das? – Robin

Antwort

4

Wie bereits in den Kommentaren erwähnt, ist der Weg durch den OscillatorNode.

var audioCtx = new (window.AudioContext || window.webkitAudioContext)(); 

function playNote(frequency, duration) { 
// create Oscillator node 
var oscillator = audioCtx.createOscillator(); 

oscillator.type = 'square'; 
oscillator.frequency.value = frequency; // value in hertz 
oscillator.connect(audioCtx.destination); 
oscillator.start(); 

setTimeout(
    function(){ 
     oscillator.stop(); 
    }, duration); 
} 

Auch habe ich ein simple fiddle den Star Wars Imperial March

0

Es gibt eine Bibliothek namens simpleTones.js, die stark das Web Audio API vereinfacht spielen genau das zu tun, was Sie versuchen.

Sobald die Bibliothek in Ihrem Projekt enthalten ist, ist wie der Aufruf so einfach eine zeitliche Frequenz spielen

playTone(345, sine, 1)

345 die Frequenz in Hz ist, sine die Wellenmuster zu sein (es gibt auch andere Wellenoptionen Muster ebenso) und "1" ist eine Sekunde oder 1000 Millisekunden.

Sie können die Bibliothek herunterladen und lesen Sie die Dokumentation hier: https://github.com/escottalexander/simpleTones.js

Viel Glück auf Ihrem Projekt.