cocos creator 小遊戲框架 -- 音訊管理
阿新 • • 發佈:2019-02-18
/**
* 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;