- From: Chris Rogers <crogers@google.com>
- Date: Thu, 15 Jul 2010 16:49:32 -0700
- To: Corban Brook <corbanbrook@gmail.com>
- Cc: Ricard Marxer Piñón <ricardmp@gmail.com>, public-xg-audio@w3.org
- Message-ID: <AANLkTikGAeVGw-uK7-9QrGdEUTlmbRTz9AZyW8qlSjyL@mail.gmail.com>
Here's a version of the JavaScriptProcessor API which deals with the sample data in a non-interleaved way and which allows the number of input channels to be different from the number of output channels. I prefer this way, but would like other people's perspectives: var context; var jsProcessor; function init() { context = new AudioContext(); } function setupJavascriptProcessing() { // bufferSize == 4096, number of output channels == 2 jsProcessor = context.createJavaScriptProcessor(4096, 2); jsProcessor.onprocess = process; var audio = document.getElementById('audioElement'); audio.audioSource.connect(jsProcessor); jsProcessor.connect(context.destination); } // This function gets called periodically to process a single buffer's worth of audio function process(event) { var inputBuffer = event.inputBuffer; // an AudioBuffer var outputBuffer = event.outputBuffer; // an AudioBuffer var n = inputBuffer.length; // number of sample-frames // it is assumed that outputBuffer.length is guaranteed to equal inputBuffer.length // further, this value will equal the argument passed to createJavaScriptProcessor() // and will never change // Often we'll have both stereo input and stereo output, but the API should handle // other cases. var numInputChannels = inputBuffer.numberOfChannels; var numOutputChannels = outputBuffer.numberOfChannels; // will equal value passed to createJavaScriptProcessor() // If numInputChannels == numOutputChannels == 2 var inputSamplesL = inputBuffer.getChannelData(0); // a Float32Array var inputSamplesR = inputBuffer.getChannelData(1); // a Float32Array var outputSamplesL = outputBuffer.getChannelData(0); // a Float32Array var outputSamplesR = outputBuffer.getChannelData(1); // a Float32Array // DSP magic here where you would process n sample-frames from inputSamples -> outputSamples... // We might need to have a commit() method (or something) here at the end - hopefully not though... event.commit(); }
Received on Thursday, 15 July 2010 23:50:02 UTC