當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
CreateJS-SoundJS翻译
生活随笔
收集整理的這篇文章主要介紹了
CreateJS-SoundJS翻译
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
SoundJSSoundJS庫管理網(wǎng)絡(luò)上的音頻播放。它通過 '抽象出實(shí)際音頻實(shí)現(xiàn)' 的插件來工作,所以可能在任何平臺上播放的,而不必了解聲音播放的機(jī)制。使用SoundJS,可以使用 'Sound' 類的公共API。該API是:安裝音頻播放插件注冊(和預(yù)加載)聲音創(chuàng)建和播放聲音主音量、靜音以及一次性停止對所有聲音的控制控制聲音播放聲音,會創(chuàng)建 'AbstractSoundInstance' 實(shí)例,該實(shí)例可以單獨(dú)進(jìn)行控制。暫停、恢復(fù)、搜索、停止聲音控制聲音的音量、靜音、聲像監(jiān)聽聲音實(shí)例的事件,播放完成、循環(huán)、失敗時(shí)觸發(fā)通知示例: createjs.Sound.alternateExtensions = ['mp3'];createjs.Sound.on('fileload', this.loadHandler, this);createjs.Sound.resisterSound('path/sound/聲音.ogg', 'sound1');function loadHandler(event){// 每個(gè)注冊的聲音都會觸發(fā)var instance = createjs.Sound.play('sound1'); // 播放指定id的聲音(這里是上面注冊的 'sound1'),也可以使用 '聲音的全路徑' 或 'event.src'instance.on('complete', this.handleComplete, this);instance.volume = 0.5;}瀏覽器支持:音頻可以在支持 'Web Audio'(http://caniuse.com/audio-api) 或 'HTMLAudioElement'(http://caniuse.com/audio) 的瀏覽器上使用。Flash fallback可用于任何支持Flash播放器的瀏覽器,Cordova插件可用于任何支持 Cordova.Media 的web視圖。不支持IE8和更早版本,及時(shí)是 Flash fallback 也不支持。要支持以前的瀏覽器,可使用舊版本的SoundJS(0.5.2之前)大致看了下提供的類文件,有分類特性:// Sound庫其他SoundJSSoundAudioSpritePlayPropsConfig// 2個(gè)基類AbstractPluginAbstractSoundInstance// 上面提到的4個(gè)不同的插件WebAudioLoaderWebAudioPluginWebAudioSoundInstanceHTMLAudioPluginHTMLAudioSoundInstanceHTMLAudioTagPoolFlashAudioLoaderFlashAudioPluginFlashAudioSoundInstanceCordovaAudioLoaderCordovaAudioPluginCordovaAudioSoundInstance// 額外的事件對象ErrorEvent// CreateJS 套件里公共部分EventEventDispatcherUtility Methods1.SoundJSSoundJS 是一個(gè)靜態(tài)類,可獲取類庫的具體信息,例如:庫的版本、構(gòu)建日期等。SoundJS類已經(jīng)被重命名為 Sound。查看 'Sound' 獲取更多信息2.SoundSound類是公共API,用于創(chuàng)建聲音,控制整體聲音級別,以及管理插件。該類上所有的聲音API都是靜態(tài)的。注冊和預(yù)加載播放聲音前,必須先進(jìn)行注冊。可以使用 'registerSound' 方法,注冊多個(gè)聲音使用 'registerSounds' 方法。如果在 使用 'play' 方法來嘗試播放它,或使用 'createInstance' 來創(chuàng)建它 之前,沒有注冊聲音,將會自動注冊聲音源,但是播放將會失敗,因?yàn)槁曇粼催€未準(zhǔn)備好。如果使用 'PreloadJS',則會在預(yù)加載聲音時(shí),自動處理聲音注冊。建議預(yù)先加載聲音,不管是通過內(nèi)部的注冊函數(shù)還是外部的 'PreloadJS',以便在使用聲音時(shí)準(zhǔn)備就緒。播放在聲音注冊和預(yù)加載后,立即播放聲音,使用 'play' 方法。該方法返回一個(gè) 'AbstractSoundInstance' 實(shí)例,可以用來暫停、恢復(fù)、靜音等操作。可以查看 'AbstractSoundInstance' 獲取更多信息。插件默認(rèn)情況下,使用 'WebAudioPlugin' 或 'HTMLAudioPlugin' 插件(當(dāng)可用時(shí)),但開發(fā)人員可以更改插件優(yōu)先級,或添加新的插件(例如:提供的 'FlashAudioPlugin' 插件)。安裝插件,或指定不同的插件順序,查看 'Sound/intallPlugins'。示例:createjs.FlashAudioPlugin.swfPath = '../src/flashaudio';createjs.Sound.registerPlugins([createjs.WebAudioPlugin, createjs.FlashAudioPlugin]);createjs.Sound.alternateExtensions(['mp3']);createjs.Sound.on('fileload', this.loadHandler, this);createjs.Sound.registerSound('path/sound/聲音.ogg', 'sound1');function loadHandler(event){// 每個(gè)注冊的聲音都會觸發(fā)var instance = createjs.Sound.play('sound1'); // 播放指定id的聲音(這里是上面注冊的 'sound1'),也可以使用 '聲音的全路徑' 或 'event.src'instance.on('complete', this.handleComplete, this);instance.volume = 0.5;}可以在 'registerSound' 的 'data' 參數(shù)中,指定 '同一聲音同時(shí)播放的最大實(shí)例數(shù)'。注意:如果未置頂,則會使用默認(rèn)的最大限制數(shù)。目前 'HTMLAudioPlugin' 默認(rèn)限制為2,而 'WebAudioPlugin' 和 'FlashAudioPlugin' 默認(rèn)限制為100。createjs.Sound.registerSound('聲音.mp3', 'sound1', 4);'Sound' 可以作為 'PreloadJS' 插件使用,以幫助正確預(yù)加載音頻。通過 'PreloadJS' 預(yù)加載的音頻,會自動注冊到 'Sound' 類。當(dāng)音頻未預(yù)加載時(shí),'Sound' 將自動執(zhí)行內(nèi)部加載。因此,如果音頻未完成加載,可能會在第一次播放時(shí),播放失敗。使用 'fileload' 事件可以確定,聲音什么時(shí)候完成的預(yù)加載。建議在播放所有聲音前,預(yù)先加載。var queue = new createjs.LoadQueue();queue.installPlugin(createjs.Sound);音頻精靈(audio sprites - 音頻雪碧圖)從0.6.0版本后,'SoundJS' 增加了對 'AudioSprite' 的支持。對不熟悉 '音頻精靈' 的人來說,'音頻精靈' 類似 'CSS精靈' 或 '精靈表單':多個(gè)音頻資源分組合并到單個(gè)文件中。示例:var assetsPath = './assets/';var sounds = [{src: 'MyAudioSprite.ogg', data: {audioSprite: [{id: 'sound1', startTime: 0, duration: 500},{id: 'sound2', startTime: 1000, duration: 400},{id: 'sound3', startTime: 1700, duration: 1000}]}}];createjs.Sound.alternateExtensions = ['mp3'];createjs.Sound.on('fileload', loadSound);createjs.Sound.registerSounds(sounds, assetsPath);// 加載完成后播放createjs.Sound.play('sound2');手機(jī)播放運(yùn)行iOS的設(shè)備需要通過在用戶發(fā)起的事件(例如觸摸/點(diǎn)擊)中播放至少一個(gè)聲音來“解鎖”WebAudio上下文。 早期版本的SoundJS包含了一個(gè)“MobileSafe”示例,但SoundJS 0.6.2不再需要這個(gè)示例。1.在SoundJS 0.4.1及以上版本中,您可以初始化插件,也可以在用戶輸入事件的調(diào)用堆棧中使用playEmptySound方法手動解鎖音頻上下文2.在SoundJS 0.6.2及以上版本中,SoundJS將自動偵聽第一個(gè)文檔級別的“mousedown”和“touchend”事件,并解鎖WebAudio。這將繼續(xù)檢查這些事件,直到WebAudio上下文變?yōu)椤敖怄i”(從“暫停”變?yōu)椤罢谶\(yùn)行”)3.“mousedown”和“touchend”事件都可以用來在iOS9 +中解鎖音頻,“touchstart”事件可以在iOS8及更低版本中使用。當(dāng)手勢被解釋為“點(diǎn)擊”時(shí),“touchend”事件將僅在iOS9中起作用,所以如果用戶長按按鈕,它將不再起作用。4.當(dāng)使用EaselJS Touch類時(shí),由于MouseEvents被阻止,單擊畫布時(shí),“mousedown”事件不會觸發(fā),以確保只有觸摸事件觸發(fā)。為了解決這個(gè)問題,你可以依靠“touchend”,或者:1.將Touch類構(gòu)造函數(shù)的allowDefault屬性設(shè)置為true(默認(rèn)為false)。2.將EaselJS Stage上的preventSelection屬性設(shè)置為false。這些設(shè)置可能會改變您的應(yīng)用程序的行為,不建議。加載備用路徑和無擴(kuò)展文件'SoundJS' 支持加載備用路徑和無擴(kuò)展文件,通過給 'src' 屬性,傳遞一個(gè)對象來代替字符串,該屬性是使用hash格式:{extension: 'path', extension2: 'path2'}。'SoundJS' 通過extension名,來判斷是否支持該格式的文件。可以將不同格式的文件,存放到不同的目錄下,或CDN上。按順序依次嘗試是否支持該格式,一旦支持則停止檢測。對于 'SoundJS' 內(nèi)部加載或通過 'PreloadJS' 加載,都有效。注意:播放需要一個(gè) 'id'示例:var sounds = {path: './audioPath/',manifest: [{id: 'cool', src: {mp3: 'mp3/聲音.mp3', ogg: 'ogg/聲音.ogg'}}]};已知的瀏覽器和操作系統(tǒng)問題不翻譯了,看文檔3.AudioSprite注意:AudioSprite不是一個(gè)類,但是它的用法很容易在文檔中被忽略,所以單獨(dú)提出來,可稱為快速參考。'音頻精靈' 很像 'CSS精靈' 或 圖像 '精靈表單':將多個(gè)音頻資源分組合并為一個(gè)文件。'音頻精靈' 可以解決某些瀏覽器的一次只能加載和播放一個(gè)聲音的限制。建議在音頻剪輯之間至少保持300ms的靜音,來處理HTML音頻標(biāo)簽不準(zhǔn)確的情況,以防止意外播放相鄰剪輯的音頻。音頻精靈的優(yōu)點(diǎn)1.對于僅允許單個(gè)音頻實(shí)例的舊版瀏覽器和設(shè)備提供更強(qiáng)大的支持(如:iOS 5)。2.為IE9 audio標(biāo)簽限制提供了解決方法,IE9 audio 標(biāo)簽嚴(yán)格限制了一次可以加載多種不同的聲音。3.加載更快,將多次請求合并為一次。特別是在移動設(shè)備上,每個(gè)文件的網(wǎng)絡(luò)往返行程會有明顯延遲。音頻精靈的缺點(diǎn)1.使用HTML或Flash音頻時(shí)不能保證平滑的循環(huán)。如果需要平滑的循環(huán),并且要支持非網(wǎng)絡(luò)音頻的瀏覽器,盡量避免使用 '音頻精靈'2.不能保證HTML音頻會立即播放,特別是第一次播放。在某些瀏覽器(chrome!),HTML音頻只能以當(dāng)前下載速度加載,所以我們依靠 'canplaythrough' 事件,來確定音頻是否已加載。因?yàn)?'音頻精靈' 必須跳到前方,來播放特定的聲音,音頻可能還沒有完全下載下來。3.'音頻精靈' 共享同樣的核心資源,因此,如果有一個(gè)包含5個(gè)聲音的 '音頻精靈',并且被限制只能同時(shí)播放2個(gè)實(shí)例,就只能同時(shí)播放2個(gè)聲音。示例:createjs.Sound.initializeDefaultPlugins();var assetsPath = './assets/';var sounds = [{src: 'MyAudioSprite.ogg', data: {audioSprite: [{id: 'sound1', startTime: 0, duration: 500},{id: 'sound2', startTime: 1000, duration: 400},{id: 'sound3', startTime: 1700, duration: 1000}]}}];createjs.Sound.alternateExtensions = ['mp3'];createjs.Sound.on('fileload', loadSound);createjs.Sound.registerSounds(sounds, assetsPath);// 加載完成后播放createjs.Sound.play('sound2');當(dāng)創(chuàng)建新的 'AbstractSoundInstance' 時(shí),也可以通過設(shè)置 'startTime' 和 'duration' 來在線創(chuàng)建 '音頻精靈'createjs.Sound.play('MyAudioSprite', {startTime: 1000, duration: 400});優(yōu)秀的 CreateJS社區(qū) 已經(jīng)創(chuàng)建了一個(gè)工具來創(chuàng)建 '音頻精靈',在https://github.com/tonistiigi/audiosprite 查看源碼,以及 'jsfiddle'(http://jsfiddle.net/bharat_battu/g8fFP/12/) 將輸出轉(zhuǎn)換為 SoundJS 格式。4.PlayPropsConfigPlayPropsConfig 類,是一個(gè)存儲可選的播放屬性的類,以傳遞給 'Sound:play' 和 'AbstractSoundInstance:play' 調(diào)用。可選的播放屬性包括:interrupt - 如果已經(jīng)播放了最大個(gè)數(shù)的聲音實(shí)例,如何中斷正在播放的具有相同資源的任意的音頻實(shí)例。可選值定義在 'Sound' 類的 'INTERRUPT_TYPE' 常量,默認(rèn)由 'defaultInterruptBehavior' 定義。delay - 音頻開始播放的延遲時(shí)間,單位 'ms'offset - 音頻開始播放的偏移時(shí)間量,單位 'ms'loop - 音頻循環(huán)播放次數(shù)。默認(rèn)是 '0-不循環(huán)', -1 - 無限循環(huán)volume - 聲音的音量,0-1之間。注意:主音量應(yīng)用于單個(gè)音量pan - 聲音的左-右聲部(如果支持),在-1(左)和1(右)之間。startTime - 創(chuàng)建 '音頻精靈'(和 duration 一起使用) 開始播放和循環(huán)時(shí)的初始偏移量,單位 'ms' duration - 創(chuàng)建 '音頻精靈'(和 startTime 一起使用) 播放剪輯的時(shí)間量,單位 'ms' 示例:var props = new createjs.PlayPropsConfig().set({interrupt: createjs.Sound.INTERRUPT_ANY, loop: -1, volume: 0.5});createjs.Sound.play('聲音.mp3', props); // Sound:playmySoundInstance.play(props); // AbstractSoundInstance:play5.AbstractPlugin所有其他插件類的基類6.AbstractSoundInstance當(dāng)調(diào)用 'Sound API' 的 'play' 或 'createInstance' 方法時(shí),都會創(chuàng)建 'AbstractSoundInstance' 實(shí)例。根據(jù)當(dāng)前活動插件(4種不同插件類型),返回 'AbstractSoundInstance' 實(shí)例,以供用戶后續(xù)控制示例:var myInstance = createjs.Sound.play('聲音.mp3');額外的附加參數(shù),提供了一個(gè)快速方法,來決定如何播放聲音。請參閱 'Sound API' 的 'play' 方法,查看播放參數(shù)列表一旦創(chuàng)建了 'AbstractSoundInstance',就可以存儲一個(gè)直接通過 'AbstractSoundInstance' 控制音頻的引用。如果未存儲引用,'AbstractSoundInstance' 將播放它的音頻(和任何循環(huán)),然后從 'Sound' 類取消引用,標(biāo)記為可清除,之后被垃圾回收清除。如果音頻播放已完成,簡單的調(diào)用 'play' 方法,將重建引用,來控制聲音。var myInstance = createjs.Sound.play('聲音.mp3', {loop: 2});myInstance.on('loop', handleLoop);function handleLoop(event){myInstance.volume = myInstance.volume * 0.5;}當(dāng)聲音播放完成、循環(huán)播放或播放失敗,事件分發(fā)會通知事件監(jiān)聽器var myInstance = createjs.Sound.play('聲音.mp3', {loop: 2});myInstance.on('complete', handleComplete);myInstance.on('loop', handleLoop);myInstance.on('failed', handleFailed);7.WebAudioLoader8.WebAudioPlugin9.WebAudioSoundInstance10.HTMLAudioPlugin11.HTMLAudioSoundInstance12.HTMLAudioTagPool13.FlashAudioLoader14.FlashAudioPlugin15.FlashAudioSoundInstance16.CordovaAudioLoader17.CordovaAudioPlugin18.CordovaAudioSoundInstance19.ErrorEvent通用錯誤事件,描述發(fā)生的錯誤,以及任何細(xì)節(jié)// 下面幾個(gè),在 CreateJS 套件里是公共的
20.Event21.EventDispatcher22.Utility Methods
總結(jié)
以上是生活随笔為你收集整理的CreateJS-SoundJS翻译的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java怎么提升编程能力_怎样提升jav
- 下一篇: 都市丽人全方位能力升维,增长驱动力强劲