2013-06-06 36 views
8

Tôi đã kiểm tra tài liệu API Web âm thanh và các hướng dẫn nhưng không yên tĩnh tìm ra cách tiếp cận vấn đề này.API âm thanh trên web: lập lịch âm thanh và xuất kết hợp

Giả sử tôi tải vài tệp wav qua XMLHttpRequest và sau đó tạo vùng đệm. Tôi biết tôi có thể lên lịch khi phát lại bắt đầu chính xác. Nhưng nếu tôi không muốn chơi chúng, nhưng thay vì muốn lưu trữ và sắp xếp chúng trong một bộ đệm.

Ví dụ thực: Tôi muốn tạo một trình tự đơn giản, nơi bạn lên lịch trống và xuất toàn bộ kết hợp thành wav (không ghi âm bằng RecorderJS hoặc gì đó). Bất kỳ ý tưởng, thư viện?

Trả lời

4

Chỉ cần làm điều gì đó tương tự như thế này.

Về cơ bản, bạn sẽ cần phải tạo ra một bối cảnh ẩn:

var offline = new webkitOfflineAudioContext(numChannels, lengthInSamples, sampleRate) 

Bạn sẽ phải tạo lại tất cả BufferSources bạn sử dụng bối cảnh mới này:

var newBufferSource = offline.createBufferSource(); 
newBufferSource.buffer = someAudioBuffer; 
newBufferSource.connect(offline.destination); 

Sau đó, lên lịch phát lại của bạn:

newBufferSource.start(offline.currentTime + 10); 

Sau đó liên kết với sự kiện complete cho bạn ngoại tuyến dering:

offline.onComplete = function(ev){ 
    doSomething(ev.renderedBuffer); 
} 

Sau đó bắt đầu 'vẽ':

offline.startRendering(); 

Một khi bạn đã ev.renderedBuffer, bạn có thể làm bất cứ điều gì bạn muốn với nó. Trong ứng dụng của tôi, tôi có một bộ mã hóa WAV mà tôi đã tự mình viết - nhưng bạn có thể sửa đổi Recorder.js để làm điều tương tự khá dễ dàng.

Chỉ cần thông báo: webkitOfflineAudioContext hiện chỉ có Chrome. Đây là liên kết nếu bạn quan tâm: OfflineAudioContext

+1

Bằng cách nào đó tôi không tìm ra mục đích của ngữ cảnh ngoại tuyến này chỉ bằng cách xem tài liệu. Cảm ơn bạn rất nhiều :) Đây là một ví dụ làm việc tôi đã thực hiện: http://jsfiddle.net/jC6rd/ –

+0

Awesome. Vui vì bạn đã đứng dậy và chạy. –

+0

offline.startRendering(); không làm việc trong safari, giải pháp nào cho việc này? –