我正在寻找将Float32Array转换为Int16Array.
这就是我所拥有的(我没有提供data).
var data = ...; /*new Float32Array();*/
var dataAsInt16Array = new Int16Array(data.length);
for(var i=0; i<data.length; i++){
dataAsInt16Array[i] = parseInt(data[i]*32767,10);
}
Run Code Online (Sandbox Code Playgroud)
我不相信我正确地做到了并且正在寻找一些方向.
我期待数据追加到已经存在的AudioBuffer正在被使用的网络音频播放。
接收到要播放的音频数据后,我将创建一个AudioBuffer,然后将数据分配给ArrayBuffer响应。
var audioBuffer = context.createBuffer(1, audioToPlay.length, 16000);
audioBuffer.getChannelData(0).set(audioToPlay);
Run Code Online (Sandbox Code Playgroud)
然后,我创建一个缓冲区源节点,并将音频缓冲区连接到Web音频上下文。
var source = context.createBufferSource();
source.buffer = audioBuffer;
source.connect(context.destination);
source.start(0);
Run Code Online (Sandbox Code Playgroud)
现在,我想做的是将更多数据(另一个ArrayBuffer)追加到当前正在播放的缓冲区中,同时避免必须使用onended回调来创建新的缓冲区。
有什么办法吗?据我所知,这似乎不受支持。