1. 程式人生 > >cocos creator 小遊戲框架 -- 音訊管理

cocos creator 小遊戲框架 -- 音訊管理

/**
 * author: xuao
 * time: 2018/04/11
 * func: 音樂,音效管理
 */
var AudioManager = {

    init: function(){
        this._playMusic         = {};             // 快取音樂,{name: ID}
        this._playEffect        = {};             // 快取音效,{name: ID}
        this._switchMusic       = false;          // 音樂開關
        this
._switchEffect = false; // 音效開關 this._effectVolume = 1; // 音效音量 this._musicVolume = 1; // 音樂音量 // 獲取本地設定音量大小 var audioSetting = JSON.parse(cc.sys.localStorage.getItem("audio")); this._effectVolume = audioSetting["effect"
] || 1; this._musicVolume = audioSetting["music"] || 1; //獲取本地開關設定 var switchSetting = JSON.parse(cc.sys.localStorage.getItem("audioSwitch")); this.initSwitch(switchSetting["switchMusic"], switchSetting["switchEffect"]); }, /** * 初始化音樂,音效開關 */ initSwitch: function(switchMusic, switchEffect){ this
._switchEffect = switchEffect || true; this._switchMusic = switchMusic || true; }, /** * 載入資料夾下所有音訊資源 * url: 資源所在資料夾 */ reLoadRes: function(url){ cc.loader.loadResDir(url, cc.AudioClip,function(err, res){ if(err) { cc.error("【音訊】資源載入錯誤"); return ; } }); }, /** * 播放音效檔案 * url: 音效檔案相對地址 * loop: 是否迴圈播放 */ playEffect: function(url, loop = false){ if(this._switchEffect){ var rawUrl = cc.url.raw("resources/" + url); if(cc.loader.getRes(rawUrl)){ var effectId = cc.audioEngine.playEffect(rawUrl, loop, this._musicVolume); this._playEffect[url] = effectId; } else{ cc.warn("【音訊】音效" + url + "檔案不存在"); } } }, /** * 轉換音效開關 */ switchEffectFunc: function(){ this._switchEffect = !this._switchEffect; if(!this._switchEffect){ this.setStopAllEffect(); } cc.sys.localStorage.setItem("audioSwitch", Json.stringify({switchEffect: this._switchEffect, switchMusic: this._switchMusic})); }, /** * 獲取音效開關狀態 */ getSwitchEffect: function(){ return this._switchEffect; }, /** * 設定音效聲音大小 * value: 0.0 - 1.0 */ setEffectVolume: function(value){ this._effectVolume = value; cc.audioEngine.setEffectsVolume(value); cc.sys.localStorage.setItem("audio", JSON.stringify({effect: this._effectVolume, music: this._musicVolume})); }, /** * 獲取音效大小 * @return 0.0 - 1.0 */ getEffectVolume: function(){ return cc.audioEngine.getEffectsVolume(); }, /** * 暫停指定音效 * url: 資源路徑 */ setPauseEffect: function(url){ var audio = this._playEffect[url]; if(audio){ cc.audioEngine.pauseEffect(audio); } else{ cc.error("【音訊】音效檔案" + url + "不存在"); } }, /** * 暫停正在播放的所有音效 */ setPauseAllEffect: function(){ cc.audioEngine.pauseAllEffects(); }, /** * 恢復指定音效 * url:資源路徑 */ setResumeEffect: function(url){ var audio = this._playEffect[url]; if(audio){ cc.audioEngine.resumeEffect(audio); } else{ cc.error("【音訊】音效檔案" + url + "不存在"); } }, /** * 恢復當前說暫停的所有音效 */ setResumeAllEffect: function(){ cc.audioEngine.resumeAllEffects(); }, /** * 停止播放指定音效 * url: 資源路徑 */ setStopEffect: function(url){ var audio = this._playEffect[url]; if(audio){ cc.audioEngine.stopEffect(audio); } else{ cc.error("【音訊】音效檔案" + url + "不存在"); } }, /** * 停止播放所有正在播放的音效 */ setStopAllEffect: function(){ cc.audioEngine.stopAllEffects(); }, /** * 背景音樂播放 * url: 資源路徑 * loop: 是否迴圈 */ playMusic : function(url, loop = false){ if(this._switchMusic){ var rawUrl = cc.url.raw(url); if(cc.loader.getRes(rawUrl)){ cc.audioEngine.playMusic(url, loop); } } }, /** * 轉換音樂按鈕開關 */ switchMusicFunc: function(){ this._switchMusic = !this._switchMusic; if(!this._switchMusic){ this.setStopMusic(); } cc.sys.localStorage.setItem("audioSwitch", Json.stringify({switchEffect: this._switchEffect, switchMusic: this._switchMusic})); }, /** * 獲取音樂開關狀態 */ getSwitchMusic: function(){ return this._switchMusic; }, /** * 暫停當前播放音樂 */ setPauseMusic: function(){ cc.audioEngine.pauseMusic(); }, /** * 恢復當前被暫停音樂音樂 */ setResumeMusic: function(){ cc.audioEngine.resumeMusic(); }, /** * 重新播放該背景音樂 */ replayMusic: function(){ cc.audioEngine.rewindMusic(); }, /** * 暫停播放音樂 * releaseData: 控制是否釋放音樂資源 true釋放資源 | false不釋放資源 */ setStopMusic: function(releaseData = true){ cc.audioEngine.stopMusic(releaseData); }, setMusicVolume: function(value){ this._musicVolume = value; cc.audioEngine.setMusicVolume(value); cc.sys.localStorage.setItem("audio", JSON.stringify({effect: this._effectVolume, music: this._musicVolume})); }, getMusicVolume: function(){ return cc.audioEngine.getMusicVolume(); }, /** * 音樂是否正在播放(驗證些方法來實現背景音樂是否播放完成) * return boolen */ isMusicPlaying : function(){ return cc.audioEngine.isMusicPlaying(); }, /** * 釋放指定音效資源 * url */ releaseAudio: function(url){ var rawUrl = cc.url.raw(url); if(cc.loader.getRes(rawUrl)){ cc.audioEngine.unloadEffect(rawUrl); } else{ cc.error("【音訊】資源" + url + "不存在, 釋放失敗"); } }, releaseAllAudio: function(){ cc.audioEngine.uncacheAll(); }, } game.AudioManager = module.exports = AudioManager;