2013-06-06 6 views
8

Ich habe die Web-Audio-API-Dokumentation und die Lernprogramme überprüft, habe aber noch nicht herausgefunden, wie ich dieses Problem angehen kann.Web-Audio-API: Planen von Sounds und Exportieren der Mischung

Angenommen, ich lade einige WAV-Dateien über XMLHttpRequest und dann erstellen Pufferquellen. Ich weiß, dass ich planen kann, wann die Wiedergabe genau beginnt. Aber was, wenn ich sie nicht spielen möchte, sondern sie in einem Puffer speichern und planen will.

Ein echtes Beispiel: Ich möchte einen einfachen Sequenzer erstellen, wo Sie Drums planen und dann den gesamten Mix nach WAV exportieren (ohne ihn mit RecorderJS oder etwas aufzunehmen). Irgendwelche Ideen, Bibliotheken?

Antwort

4

Ich habe gerade etwas ein bisschen so gemacht.

Im Wesentlichen müssen Sie eine Offline-Kontext erstellen:

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

Sie werden alle Ihre BufferSources neu erstellen müssen, um diesen neuen Kontext mit:

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

dann Ihre Wiedergabe planen:

newBufferSource.start(offline.currentTime + 10); 

Dann binden Sie an das complete Ereignis für Ihre offline ren dering:

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

Then 'Rendering' beginnen:

offline.startRendering(); 

Sobald Sie ev.renderedBuffer haben, können Sie tun, was Sie wollen mit ihm. In meiner App habe ich einen WAV-Encoder, den ich selbst geschrieben habe - aber Sie könnten Recorder.js modifizieren, um das Gleiche ziemlich einfach zu machen.

Nur ein Heads-Up: webkitOfflineAudioContext ist Chrome nur im Moment. Hier ist ein Link, wenn Sie interessiert sind: OfflineAudioContext

+1

Irgendwie habe ich nicht den Zweck dieses Offline-Kontext nur durch das Betrachten der Dokumentation. Vielen Dank :) Hier ist ein Arbeitsbeispiel, das ich gemacht habe: http://jsfiddle.net/jC6rd/ –

+0

Awesome. Ich bin froh, dass du aufgestanden bist. –

+0

offline.startRendering(); nicht in Safari arbeiten, keine Lösung dafür? –