/**作者说明
-
author: haoyu
-
time: 2021-08-17
-
func: 音乐,音效管理,ccc2.4.6测试 */
let AudioManager = { init: function(){ this._playMusic = {}; // 缓存音乐,{name: ID} this._playEffect = {}; // 缓存音效,{name: ID} this._switchMusic = false; // 音乐开关 this._switchEffect = false; // 音效开关 this._effectVolume = 1; // 音效音量 this._musicVolume = 1; // 音乐音量
// 获取本地设置音量大小 let audioSetting = JSON.parse(cc.sys.localStorage.getItem("audio")); if(!audioSetting){ audioSetting = { effect:1,music:1 }; } this._effectVolume = audioSetting["effect"] || 1; this._musicVolume = audioSetting["music"] || 1; //获取本地开关设置 let switchSetting = JSON.parse(cc.sys.localStorage.getItem("audioSwitch")); if(!switchSetting){ switchSetting = { switchMusic:true,switchEffect:true }; } this.initSwitch(switchSetting["switchMusic"], switchSetting["switchEffect"]); cc.log('音频管理器初始化-----完成-------');},
/**
- 初始化音乐,音效开关 */
initSwitch: function(switchMusic, switchEffect){ this._switchEffect = switchEffect || true; this._switchMusic = switchMusic || true; },
/**
- 加载文件夹下所有音频资源,默认只加载resources/audio文件夹下的资源
- //url: 资源所在文件夹 */ reLoadRes: function(){ //cc.loader.loadResDir(url, cc.AudioClip,function(err, res){3 cc.resources.loadDir("audio/", cc.AudioClip,function(err, res){ if(err) { cc.error("加载文件夹下所有音频资源,【音频】资源加载错误"); return ; } }); },
/**
- 播放音效文件
- effectName: 音效文件名称
- loop: 是否循环播放
*/
playEffect: function(effectName, loop = false){
if(this._switchEffect){
cc.resources.load("audio/"+effectName,cc.AudioClip,(err,audio)=>{
if(err){
cc.log(
播放音效文件,【音频】音效:${"audio/"+effectName}文件不存在,err=,err); return; } let effectId = cc.audioEngine.playEffect(audio, loop, this._musicVolume); if(!this._playEffect[effectName] && this._playEffect[effectName] !== 0){ this._playEffect[effectName] = effectId; } }); } },
/**
- 转换音效开关 */ 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(effectName){ let audio = this._playEffect[effectName]; if(audio >= 0){ cc.audioEngine.pauseEffect(audio); }else{ cc.error("暂停指定音效,【音频】音效文件:" + effectName + "不存在"); } //cc.log('this._playEffect::',this._playEffect); },
/**
- 暂停正在播放的所有音效 */ setPauseAllEffect: function(){ cc.audioEngine.pauseAllEffects(); },
/**
- 恢复指定音效
- effectName: 音效文件名称 */ setResumeEffect: function(effectName){ let audio = this._playEffect[effectName]; if(audio >= 0){ cc.audioEngine.resumeEffect(audio); }else{ cc.error("恢复指定音效,【音频】音效文件" + effectName + "不存在"); } },
/**
- 恢复当前说暂停的所有音效 */ setResumeAllEffect: function(){ cc.audioEngine.resumeAllEffects(); },
/**
- 停止播放指定音效
- effectName: 音效文件名称 */ setStopEffect: function(effectName){ let audio = this._playEffect[effectName]; if(audio >= 0){ cc.audioEngine.stopEffect(audio); }else{ cc.error("停止播放指定音效,【音频】音效文件" + effectName + "不存在"); } },
/**
- 停止播放所有正在播放的音效 */ setStopAllEffect: function(){ cc.audioEngine.stopAllEffects(); },
/**
- 背景音乐播放
- musicName: 音乐名称
- loop: 是否循环
*/
playMusic : function(musicName, loop = false){
if(this._switchMusic){
cc.resources.load("audio/"+musicName,cc.AudioClip,(err,audio)=>{
if(err){
cc.log(
载入音乐:${"audio/"+musicName},err=,err); return; } cc.audioEngine.playMusic(audio, 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(){ this.setStopMusic(); this.playMusic('bgm'); },
/**
- 停止播放音乐
- 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(); },
/**
- 释放指定音效资源
- effectName: 音效文件名称 */ releaseAudio: function(effectName){ let effect = this._playEffect['resources/audio/'+effectName]; if(effect){ cc.audioEngine.uncache(effectName); }else{ cc.error("释放指定音效资源,【音频】资源" + url + "不存在, 释放失败"); }
},
releaseAllAudio: function(){ cc.audioEngine.uncacheAll(); },
}
//game.AudioManager = module.exports = AudioManager; //module.exports = AudioManager; window.AudioManager = AudioManager;
`/*使用方式: onMusicClick(e,d){ if(d == 'playMusic'){ AudioManager.playMusic('bgm'); } else if (d == 'setPauseMusic') { AudioManager.setPauseMusic(); } else if (d == 'setResumeMusic') { AudioManager.setResumeMusic(); } else if (d == 'replayMusic') { AudioManager.replayMusic(); } else if (d == 'setStopMusic') { AudioManager.setStopMusic(); } else if (d == 'setMusicVolume') { if(this.Volume){ this.Volume -= 0.3; }else{ this.Volume = 0.8; } cc.log('音量为:',this.Volume); AudioManager.setMusicVolume(this.Volume); }else if(d == 'getMusicVolume'){ cc.log('当前音量为:',AudioManager.getMusicVolume()); }else if(d == 'isMusicPlaying'){ cc.log('当前音乐状态:',AudioManager.isMusicPlaying()); } else if(d == 'playEffect'){ let r = Math.random(); if(r > 0.5){ AudioManager.playEffect('click'); }else{ AudioManager.playEffect('gold'); }
} else if (d == 'setPauseEffect') {
AudioManager.setPauseEffect('gold');
} else if (d == 'setResumeEffect') {
AudioManager.setResumeEffect('click');
} else if (d == 'setResumeAllEffect') {
AudioManager.setResumeAllEffect();
} else if (d == 'setStopEffect') {
AudioManager.setStopEffect('click');
} else if (d == 'setEffectVolume') {
if(this.EffectVolume){
this.EffectVolume -= 0.3;
}else{
this.EffectVolume = 0.8;
}
cc.log('音效音量为:',this.EffectVolume);
AudioManager.setEffectVolume(this.EffectVolume);
}else if(d == 'getEffectVolume'){
cc.log('当前音效音量为:',AudioManager.getEffectVolume());
}else if(d == 'setStopAllEffect'){
cc.log('停止所有音效状态:',AudioManager.setStopAllEffect());
}
}
*/`