2016-02-03 105 views
6

這裏發生了一些奇怪的事情。 我在一個變量創建音頻緩衝存儲器中,並嘗試重新使用它幾次 - 但它似乎已損壞網絡音頻緩衝區奇怪的行爲

我做一些按鈕

<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; 

我可以評估播放()多次沒有錯誤

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創建一個指針到緩衝區,而不是一個副本

這是錯誤還是功能?

回答

1

因此,這是有趣的,這將始終如一要麼玩部分,而沒有停止:

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); 
} 
+0

是的 - 謝謝這是在https://webaudio.github.io/web-audio-api/#the-audi的規範部分2.10.2 obuffer接口 –