Possible to create an AudioBuffer from memory ie an Int8Array

僤鯓⒐⒋嵵緔 提交于 2019-12-08 05:06:21

问题


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.


回答1:


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!