Is there a way to add raw data from memory as a sample to the Web Audio Api? I would like to add a Int8Array (or Int16Array) as a buffer, the buffer just have the samples and no format as WAV or MP3. I have tried the audioContext.createBuffer and such without succes.
Something like this:
var buffer = audioContext.createBuffer(1,8192, 22000);
var intArray = new Int8Array(....);
// -- fill intarray
buffer.buffer = intArray;
...
var source = context.createBufferSource();
source.buffer = buffer;
source.connect(context.destination);
If that is not possible is there a sound format patible with contetx.decodeAudio() which is easy to "emulate" in memory? Ie just a header or something.
Is there a way to add raw data from memory as a sample to the Web Audio Api? I would like to add a Int8Array (or Int16Array) as a buffer, the buffer just have the samples and no format as WAV or MP3. I have tried the audioContext.createBuffer and such without succes.
Something like this:
var buffer = audioContext.createBuffer(1,8192, 22000);
var intArray = new Int8Array(....);
// -- fill intarray
buffer.buffer = intArray;
...
var source = context.createBufferSource();
source.buffer = buffer;
source.connect(context.destination);
If that is not possible is there a sound format patible with contetx.decodeAudio() which is easy to "emulate" in memory? Ie just a header or something.
Share Improve this question edited Feb 12, 2013 at 22:39 kr1 7,4851 gold badge29 silver badges30 bronze badges asked Feb 12, 2013 at 20:58 PertyPerty 9212 gold badges9 silver badges14 bronze badges1 Answer
Reset to default 7It is neither very intuitive, nor explicitly documented in the specs and also not really easy to find on the net:
but, you can simply modify the Float32Array
which is returned by getChannelData(<idx of channel>)
on any buffer.
don't forget to scale your samples to the range [-1, 1]
for your example you would scale and copy the values in the intArray to the floatArray obtained by calling:
floatArray = buffer.getChannelData(0)