2016-08-29 19 views
5

chcę funkcję, która działa tak:play specyficzna częstotliwość javascript

playSound(345, 1000) 

Które odgrywać tonu 345 Hz do 1000 milisekund. Jaki jest najprostszy sposób osiągnięcia tego w JavaScript? Nie przeszkadza mi to, że używa próbki (może z fali grzechu lub fortepianu) lub używa sprzętu komputerowego do generowania dźwięku.

+4

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

+1

Nigdy nie myślałem, że to może oznaczać tworzenie przebiegu w przeglądarce internetowej. Niezły: D – Viney

+0

Awesome. Dzięki @Kaiido. Być może będę musiał zadać jeszcze jedno pytanie, ale chciałbym teraz wiedzieć, jak kształtować falę grzechu, aby emulować kamerton, w tym atak i rozpad. Czy ktoś czytający wie, jak to zrobić? – Robin

Odpowiedz

4

Jak już podkreślono w komentarzach, sposobem na zrobienie tego jest użycie 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); 
} 

Również zrobiłem simple fiddle gra Star Wars Imperial March

0

Jest biblioteka nazywa simpleTones.js który znacznie upraszcza Web Audio API zrobić dokładnie to, co próbujesz.

Gdy biblioteka jest zawarte w projekcie, grając czasowego częstotliwość jest tak proste jak wywołanie

playTone(345, sine, 1)

345 jest częstotliwość w Hz, sine będąc wzór fali (istnieją inne opcje wzór fala również) i "1" to jedna sekunda lub 1000 milisekund.

można pobrać z biblioteki i przeczytać dokumentację tutaj: https://github.com/escottalexander/simpleTones.js

Powodzenia w projekcie.

Powiązane problemy