研究Web Audio Api的主要緣由是:工做中須要在ios中實現聲音的淡出效果,主要是經過setInterval來改audio標籤的volume屬性實現的,可是ios上面volume屬性是只讀的,因此在ios上面改volume屬性無效。ios
這個時候只能使用H5的Audio Api或者一些封裝了Audio Api的庫好比soundJs來解決。這篇博文記錄了我學習原生Audio Api的心得,記錄下來供之後開發時參考,相信對其餘人也有用。web
參考資料: 努力翻譯一篇中文最友好的,Web Audio API的使用相關的文章 mdn Web Audio APIchrome
Web Audio API是對<audio>標籤
功能上的補充,它的強大之處在於:canvas
使用Web Audio API的基本流程以下:segmentfault
<audio>
裏面的,也能夠是經過網址自行下載的,也能夠是利用oscillator模擬的。下面是一個使用<audio>源
播放的代碼,主要實現聲音的淡出效果:api
//初始化音頻api window.AudioContext = window.AudioContext || window.webkitAudioContext; var audioCtx = new AudioContext(); //設置音頻的源,使用id爲Jaudio2的<audio>標籤 var myAudio = document.querySelector("#Jaudio2"); var source = audioCtx.createMediaElementSource(myAudio); //初始化音量控制節點 var gainNode = audioCtx.createGain(); //初始化音量,爲1 gainNode.gain.setValueAtTime(1, audioCtx.currentTime); //把節點鏈接起來。audioCtx.destination就是最終輸出節點。 source.connect(gainNode); gainNode.connect(audioCtx.destination); //播放 myAudio.play(); //設置淡出效果,在2秒內音量遞減到0 gainNode.gain.linearRampToValueAtTime(0, audioCtx.currentTime + 2); //暫停聲音 audioCtx.suspend();
在具體的使用中,碰到一個問題,就是在移動端ios設備上利用上述代碼播放不了音頻,可是在PC端的chrome瀏覽器上能夠正常播放而且實現淡出。瀏覽器
最後在看soundJs插件的時候,它的文檔裏面說,在ios上須要用戶操做來解鎖Web Audio!咱們都知道在ios上面須要用戶操做來解鎖<audio>
或者<video>標籤
,難道說Web Audio的初始化也須要用戶操做來解鎖嗎?ide
等我找個時間試試看了。若是不行的話只能用封裝了Web Audio的庫好比soundJs了。學習
經測試,可行!!!Web Audio在safara瀏覽器上的初始化也須要用戶操做(最好是用戶點擊)。測試