概述
由於工作需要,學習了一下soundJs庫,把心得記錄下來,供以后開發時參考,相信對其他人也有用。
soundJs是createJs的一部分,它提供了強大的API來處理音頻,是音頻類H5的一個比較好的解決方案。
使用方法
我們主要想利用soundJs來實現一個音頻的淡出效果。
對於soundJs,有兩個非常重量級而且常用的類:
- Sound類:通過createjs.Sound直接使用;用來創建聲音。
- AbstractSoundInstance類:它是通過play方法或者createInstance方法返回的;用來控制聲音。
首先我們注冊聲音源。"../../media/bgm3.mp3"表示聲音源;"myID"是聲音id;3是聲音頻道,主要用於多種聲音混合播放,我們只播放一種聲音,所以這里隨便用一個頻道3。
createjs.Sound.registerSound("../../media/bgm3.mp3", "myID", 3);
然后我們給聲音源注冊插件。我們優先使用createjs.WebAudioPlugin插件即Web Audio Api;其次是createjs.HTMLAudioPlugin即html的audio標簽功能;最后是createjs.FlashAudioPlugin即flash的audio功能。(很遺憾,經測試,加上這條代碼會報錯。stackoverflow上面說,現在版本的soundjs會自動使用默認插件方法,不需要使用registerPlugins和createjs.WebAudioPlugin.playEmptySound()方法了)
createjs.Sound.registerPlugins([createjs.WebAudioPlugin, createjs.HTMLAudioPlugin, createjs.FlashAudioPlugin]);
我們標記聲音源為mp3:
createjs.Sound.alternateExtensions = ["mp3"];
注冊的音頻是需要加載的,我們在它加載完成之后加入一個回調進行一些音頻處理,在回調中我們可以控制音頻的播放,調節音量等。
createjs.Sound.on("fileload", handleLoad);
在回調函數里面,我們把AbstractSoundInstance類引出來以實現后續的控制效果:
var myInstance;
function handleLoad() {
myInstance = createjs.Sound.play("myID", {loop:-1});
myInstance.volume = 1;
}
在某個適當的時機,我們執行audioFadeOut函數來修改它的volume以實現音頻的淡出效果:
function audioFadeOut() {
var count = 50;
var interval = setInterval(function() {
if(count < 0) {
myInstance.paused = true;
clearInterval(interval);
} else {
myInstance.volume = count/50;
}
}, 70);
}
ios
上面的代碼在PC端的chrome瀏覽器上面能正常運行,在ios的safara上面不能播放,原因不明。。。。。