2016-08-29 14 views
5

Tôi muốn có một chức năng mà làm việc như thế này:Chơi tần số cụ thể với javascript

playSound(345, 1000) 

nào sẽ chơi một giai điệu của 345 hz cho 1000 mili giây. Cách đơn giản nhất để đạt được điều này trong JavaScript là gì? Tôi không ngại nếu nó sử dụng một mẫu (có thể là một làn sóng tội lỗi, hoặc piano), hoặc sử dụng phần cứng của máy tính để tạo ra âm thanh.

+4

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

+1

Không bao giờ nghĩ rằng điều này có thể được thực hiện có nghĩa là tạo ra dạng sóng trong một trình duyệt web. Đẹp nhất: D – Viney

+0

Tuyệt vời. Cảm ơn @Kaiido. Tôi có thể cần phải thực hiện một câu hỏi khác, nhưng bây giờ tôi muốn biết làm thế nào để hình thành một làn sóng tội lỗi để mô phỏng một ngã ba điều chỉnh, bao gồm cả tấn công và phân rã. Bất cứ ai đọc biết làm thế nào để làm điều này? – Robin

Trả lời

4

Như đã được chỉ ra trong các ý kiến, cách để làm điều đó là thông qua 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); 
} 

Ngoài ra, tôi làm một simple fiddle chơi Star Wars Imperial March

0

Có một thư viện gọi simpleTones.js mà rất nhiều đơn giản hoá API Web âm thanh để làm chính xác những gì bạn đang cố gắng.

Khi thư viện được bao gồm trong dự án của bạn, chơi một tần số theo thời gian dễ dàng như gọi

playTone(345, sine, 1)

345 là tần số trong Hz, sin là mô hình sóng (có những lựa chọn mô hình sóng khác cũng như) và "1" là một giây, hoặc 1000 mili giây.

Bạn có thể tải thư viện và đọc tài liệu ở đây: https://github.com/escottalexander/simpleTones.js

Best of luck vào dự án của bạn.

Các vấn đề liên quan