import bundleManager from "../../manager/bundleManager"; import utils from "../utils/utils"; /** * 音乐类 */ function getVolume(key, value) { // var val = Utils.getLocalStorageItem(key); // if (val === null) { // return value; // } // val = Number(val); // if (isNaN(val)) { // return value; // } return 0.7; } export default class AudioManager { // 背景音乐音量 static get BGMVolume() { return getVolume('BGMVolume', 1); } static set BGMVolume(val) { utils.setLocalStorageItem('BGMVolume', this.BGMVolume); this.setGroupVolume('BGMVolume', this.BGMVolume); } // 音乐音量 static get volume() { return getVolume('volume', 1); } static set volume(val) { utils.setLocalStorageItem('volume', val); this.setGroupVolume('default', val); }; static music = {}; // 存储音乐 static music_ID = {}; // 存储音乐实例或id static musicGroup = { // 音乐分组 default: {} // 默认存在一个分组 }; /** * 播放音乐 * @param name 音乐的名字 * @param volume 音量,没有则跟随全局音量 * @param loop 是否循环播放 * @param group 音乐分组,没有则默认default分组 */ static play(name: string, volume?: number, loop?: boolean, group?: string) { volume = volume ? volume : 1; if (this.music[name] == null) { return this.loadMusic(name, volume, loop, group); } //this.pause(name); //防止出错持续播放 this.addMusic(name, group); //把音乐添加到分组 this.music_ID[name] = cc.audioEngine.play(this.music[name], loop, volume); //播放音乐 return this.music_ID[name]; } /** * 添加音乐 */ static addMusic(name, group) { var group_obj = this.isGroup(group); group_obj[name] = this.music[name]; } /** * 是否存在分组,没有则创建一个分组 * @param group 分组名字 */ static isGroup(group) { group = group || 'default'; if (!this.musicGroup[group]) { this.musicGroup[group] = {}; } return this.musicGroup[group]; } /** * 关闭音乐 * @param name 音乐的名字 */ static stop(name) { if (this.music_ID[name] == null) { return; } cc.audioEngine.stop(this.music_ID[name]); } /** * 停止一个分组所有音乐 * @param group 分组 */ static stopGroupMusic(group) { var obj = this.musicGroup[group]; if (!obj) { return; } for (let i in obj) { this.stop(i); } } /** * 停止所有音乐 */ static stopAllMusic() { cc.audioEngine.stopAll(); } /** * 暂停音乐 * @param name 名字 */ static pause(name) { cc.audioEngine.pause(this.music_ID[name]); } /** * 暂停一个分组的音乐 * @param group 分组名称 */ static pauseGroupMusic(group) { var obj = this.musicGroup[group]; if (!obj) { return; } for (let i in obj) { this.pause(i); } } /** * 暂停所有音乐 */ static pauseAllMusic() { cc.audioEngine.pauseAll(); } /** * 恢复音乐 * @param name 名字 */ static resume(name) { cc.audioEngine.resume(this.music_ID[name]); } /** * 恢复一个分组的音乐 * @param group 分组名称 */ static resumeGroupMusic(group) { var obj = this.musicGroup[group]; if (!obj) { return; } for (let i in obj) { this.resume(i); } } /** * 恢复所有音乐 */ static resumeAllMusic() { cc.audioEngine.resumeAll(); } /** * 调节单个音乐的音量 * @param name 音乐名字 * @param volume 音量 */ static setVolume(name, volume) { cc.audioEngine.setVolume(this.music_ID[name], volume); } /** * 设置分组音量 * @param group 分组名称 * @param volume 音量 */ static setGroupVolume(group, volume) { var obj = this.musicGroup[group]; if (!obj) { return; } for (let i in obj) { this.setVolume(i, volume); } } /** * 调节全部音乐的音量 * @param volume 音量 */ static setAllVolume(volume) { this.volume = volume = parseInt(volume); var obj = this.music_ID; for (let i in obj) { this.setVolume(i, volume); } } /** * 加载音乐 * @param path 音乐名字 * @param volume 音量 * @param loop 是否循环 * @param group 分组 */ static loadMusic(path, volume, loop, group) { let musicBunle = bundleManager.getBundleByName('music'); musicBunle.load(path, cc.AudioClip, (err, audio) => { if (err) { console.error('播放' + path + '失败', err); return; } this.music[path] = audio; this.play(path, volume, loop, group); }); } /** * 释放音乐 * @param name 音乐名字 */ static releaseMusic(name) { if (!this.music[name] || typeof this.music[name] === 'string') { return this.music[name] = null; } // AssetsManager.release(this.music[name], true); this.music[name] = null; } static getState(name) { if (this.music_ID[name] == null) { return; } return cc.audioEngine.getState(this.music_ID[name]); } }