2014-09-26 39 views
3

我正在尋找將數據追加到已有現有AudioBuffer正在使用網絡音頻播放。將數據附加到已存在的AudioBuffer對象


在接收的音頻數據播放,創建一個AudioBuffer,然後將數據分配給ArrayBuffer響應。

var audioBuffer = context.createBuffer(1, audioToPlay.length, 16000); 
    audioBuffer.getChannelData(0).set(audioToPlay); 

然後我創建一個buffer source node並將音頻緩衝區掛接到Web音頻上下文。

var source = context.createBufferSource(); 
    source.buffer = audioBuffer; 
    source.connect(context.destination); 
    source.start(0); 

現在,我想這樣做是追加更多的數據(另一個ArrayBuffer)至當前播放緩衝,而避免不必使用onended回調創建一個新的緩衝什麼..

有沒有辦法做到這一點?據我所知,這似乎沒有支持。

+0

你看過http://stackoverflow.com/questions/14143652/web-audio-api-append-concatenate-different-audiobuffers-and-play-them-as-one-son – 2014-09-26 21:05:13

+0

是的 - 然而,在這種情況下,林處理流(我沒有所有的緩衝區前面) – 2014-09-26 21:06:10

回答

4

你不能這樣做。一旦播放緩衝區已通過start()傳遞給音頻線程,則無法對其進行修改。

但是,這說,你絕對不應該使用冒犯,要麼。你應該做的是跟蹤最後一個audiobuffer的預定時間和它開始的當前時間,並在time = lastCurrentTimeStart + lastBufferDuration創建並播放一個NEW音頻緩衝區。您應該能夠獲得流暢,不間斷的播放。

+1

感謝您的驗證。所以這聽起來像我也必須跟蹤球員的狀態? (即,如果用戶暫停,如果播放速率是差異等) – 2014-09-27 16:11:14

+1

是的,我很害怕。 – cwilso 2014-09-29 15:25:36