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 compatible with contetx.decodeAudio() which is easy to "emulate" in memory? Ie just a header or something.
It 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)
来源:https://stackoverflow.com/questions/14841708/possible-to-create-an-audiobuffer-from-memory-ie-an-int8array