123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254 |
- 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]);
- }
- }
|