亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

最后一課的問題 希望老師回答(關于decodeAudioData是不是異步的問題)

我存了3首歌曲 大概都是4M左右 decodeAudioData大概3秒的樣子 當我連續點擊了很多首以后 感覺大量buffer囤積在解碼部分 每五秒完成一次 導致我的最后一次點擊的歌曲要很長時間才能播放 但是看您的視頻最后的延時 似乎并沒有等待太多時間 是我的代碼寫的有問題么??

如果是decodeAudioData同步的問題 那改如何解決? 請老師回答....謝謝


54c379b200019f1105000259.jpg

54c379b20001216705000236.jpg


正在回答

1 回答

好仔細啊,贊!


明白你的意思了,你面臨的問題,我也同樣面臨著!


首先說明:decodeAudioData方法是異步執行的,解碼過程是在一個不同于主線程的線程中進行

但是同一個AudioContext對象的decodeAudioData過程是在同一線程中,等待解碼的arraybuffer數據會以一個隊列的形式在線程中依次進行解碼

decodeAudioData方法又必須一次性解碼完成才能進行后續動作(成功回調或失敗回調),沒有類似于onprocess這種過程監聽事件,并且webAudio API也沒有提供可以阻斷解碼過程的方法,所以一旦進入解碼過程,就必須等待起解碼完畢(無論成功或失?。┎拍苓M行后續操作

其實webAudio 這些API并不適合(至少目前)播放較大的音頻資源,解碼播放很小的音樂片段還是很好的,因為解碼過程確實太耗時,并且還面臨以上問題。


但是嫩,基于你我面臨的這個問題我仍然還是嘗試過兩種解決方案,但都失敗了:

一:使用web Worker,但是由于WorkerGlobalScope(worker子線程中的全局對象)中并不存在AudioContext對象,也就沒辦法在該子線程中解碼得到AudioBuffer,并且postMessage方法也不能傳遞AudioContext這樣的對象到子線程中,所以也沒辦法在該子線程中得到AudioBuffer

二:每次解碼數據時都new 一個新的AudioContext實例對象,但由于每次創建AudioContext對象時資源消耗嚴重,性能極低,并且同一個document中最多只能創建6個,也就是說這個方法也失敗了(所以還是記住,一個document中通常只new 一個AudioContext實例對象)


嘿嘿,也真是黔驢技窮了,本人不才,到現在也還沒找出什么有效的解決方案,抱歉啦!當然如果你找到什么行之有效的方法,一定私信我哦,感謝!

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

最后一課的問題 希望老師回答(關于decodeAudioData是不是異步的問題)

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號