最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Possible to create an AudioBuffer from memory ie an Int8Array - Stack Overflow

programmeradmin1浏览0评论

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 badges
Add a ment  | 

1 Answer 1

Reset to default 7

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)
发布评论

评论列表(0)

  1. 暂无评论