2016-04-08 5 views
3

Ich habe einen einfachen Synthesizer machen, die für eine gewisse Zeitdauer eine Note spielt:Wie das Audio von einem Synthesizer zu einem Puffer (Array von PCM-Wert) mit dem Web Audio API

// Creating audio graph 
var audioCtx = new (window.AudioContext || window.webkitAudioContext)(); 
var oscillator = audioCtx.createOscillator(); 
var gainNode = audioCtx.createGain(); 
oscillator.connect(gainNode); 
gainNode.connect(audioCtx.destination); 

// Setting parameters 
oscillator.type = "sine"; 
oscillator.frequency.value = 2500; 

// Run audio graph 
var currentTime = offlineCtx.currentTime; 
oscillator.start(currentTime); 
oscillator.stop(currentTime + 1); 

Wie kann ich Holen Sie sich die PCM-Daten des Sounds, den der Synthesizer erzeugt? Ich habe es mit Audio-Samples unter Verwendung von decodeAudioData geschafft, aber ich finde keine Entsprechung für ein Audio-Diagramm, das nicht auf dem Laden eines Samples basiert.

Ich möchte speziell die Audio-Grafik mit der OfflineAudioContext rendern, da ich nur darauf bedacht bin, die PCM-Daten so schnell wie möglich abzurufen.

Danke!

+0

Probieren Sie meinen Artikel hier, können Sie eine bestimmte Anzahl von Sekunden in eine Gruppe von Frames, die Sie verarbeiten können: http://stackoverflow.com/questions/37728518/how-to-export-last-3s -Daten eines Web-Audio-Stream/38638448 # 38638448 –

Antwort

2

Sie sagen, kombinieren Sie eine Offline-Kontext verwenden möchten, und dann eigentlich Sie kein offline verwenden Kontext. So sollten Sie tun

var offlineCtx = new OfflineAudioContext(nc, length, rate) 

wo nc = Anzahl der Kanäle, length die Anzahl der Proben ist, und rate ist die Abtastrate die Sie verwenden möchten.

Ihr Diagramm erstellen, alles beginnen und dann

offlineCtx.startRendering().then(function (buffer) { 
    // buffer has the PCM data you want. Save it somewhere, 
    // or whatever 
}) 

tun (ich bin nicht sicher, dass alle Browser Versprechen von einem Offline-Kontext unterstützen. Wenn nicht, offlineCtx.oncomplete verwenden, um die Daten zu erhalten. Siehe spec .)

0

Irgendwann fand ich eine Antwort hier: http://www.pp4s.co.uk/main/tu-sms-audio-recording.html#co-tu-sms-audio-recording__js, aber Sie werden es nicht mögen. Offensichtlich ist die Audio-API nicht standardisiert genug, um auf allen Browsern zu funktionieren. So konnte ich den obigen Code in Firefox ausführen, aber nicht in Chrome.

Grundideen:

Verwandte Themen