这里正在发生一些奇怪的事情。
我创建了一个音频缓冲区,将它存储在一个变量中,并尝试多次重复使用它 - 但它似乎已损坏
我做了一些按钮
<button onclick="play();">play(0)</button>
<button onclick="playsection();">play section</button>
<button onclick="stop();">stop()</button>
获取一些音频数据
context = new AudioContext();
var getWav = new XMLHttpRequest();
var wavbuf;
getWav.open("GET", "/wav/test.wav", true);
getWav.responseType = "arraybuffer";
getWav.onload = function() {
context.decodeAudioData(getWav.response, function(buffer){
wavbuf = buffer;
});
}
getWav.send();
var p;
我可以多次评估 play() 没有错误
function play(){
p = context.createBufferSource();
p.buffer = wavbuf;
p.connect(context.destination);
p.start(0);
}
playsection 似乎只工作一次 - 或者偶尔不止一次,如果
我在停止(10)评估之前按停止
function playsection(){
p = context.createBufferSource();
p.buffer = wavbuf;
p.connect(context.destination);
p.start(0, 6); // start after 6 seconds
p.stop(10); // stop after 10 seconds
}
function stop(){
p.stop();
}
似乎 p.buffer = wavbuf 创建了一个指向缓冲区的指针而不是一个副本
这是错误还是功能?
最佳答案
所以这很有趣,它会不间断地播放该部分:
function playsection(){
p = context.createBufferSource();
p.buffer = wavbuf;
p.connect(context.destination);
p.start(0, 6); // start after 6 seconds
}
或没有偏移量:
function playsection(){
p = context.createBufferSource();
p.buffer = wavbuf;
p.connect(context.destination);
p.start(0);
p.stop(10); // stop after 10 seconds
}
甚至在开始时声明偏移量和持续时间:
function playsection(){
p = context.createBufferSource();
p.buffer = wavbuf;
p.connect(context.destination);
p.start(0,6,10);
}
关于audio - 网络音频缓冲区奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35173551/