Procházet zdrojové kódy

业务代码 音频管理

薛鸿潇 před 5 roky
rodič
revize
ba368b43cb

+ 247 - 0
mk_framework/assets/script/game/AudioManager.ts

@@ -0,0 +1,247 @@
+/**
+ * 音频模块
+ * @author xhx
+ */
+export default class AudioManager {
+
+    /** 音乐开关 */
+    private _switchMusic: boolean = true;
+    /** 音效开关 */
+    private _switchEffect: boolean = true;
+    /** 音效音量 */
+    private _effectVolume: number = 1;
+    /** 音乐音量 */
+    private _musicVolume: number = 1;
+    /** 暂时音效开关 */
+    private _switchTempEffect: boolean = true;
+    /** 音频map */
+    private _map_audio: Map<AUDIO_NAME, cc.AudioClip> = new Map();
+
+    /** 初始化 */
+    public init() {
+        // 获取本地开关设置
+        let effect = cc.sys.localStorage.getItem("switchEffect");
+        if (effect) {
+            if (effect == "true") {
+                this._switchEffect = true;
+            } else {
+                this._switchEffect = false;
+            }
+        }
+
+        let music = cc.sys.localStorage.getItem("switchMusic");
+        if (music) {
+            if (music == "true") {
+                this._switchMusic = true;
+            } else {
+                this._switchMusic = false;
+            }
+        }
+
+        if (this._switchMusic) {
+            this.playMusic('bgm', true)
+        }
+    }
+
+    /**
+     * 播放音乐文件
+     * @param audio_name 音频名字
+     * @param loop 是否循环【默认循环】
+     */
+    public async playMusic(audio_name: AUDIO_NAME, loop: boolean = true) {
+        let asset = this._map_audio.get(audio_name);
+        if (!asset) {
+            asset = await mk.loader.loadAssetByType(AUDIO_PATH + audio_name, cc.AudioClip);
+            this._map_audio.set(audio_name, asset);
+        }
+        mk.audio.playMusic(asset, loop);
+    }
+
+    /**
+     * 播放音效文件
+     * @param audio_name 音频名字
+     * @param loop 是否循环【默认不循环】
+     */
+    public async playEffect(audio_name: AUDIO_NAME, loop: boolean = false) {
+        if (this._switchEffect && this._switchTempEffect) {
+            let asset = this._map_audio.get(audio_name);
+            if (!asset) {
+                asset = await mk.loader.loadAssetByType(AUDIO_PATH + audio_name, cc.AudioClip);
+                this._map_audio.set(audio_name, asset);
+            }
+            mk.audio.playEffect(asset, loop);
+        }
+    }
+
+    /**
+     * 停止播放音效
+     * @param audio_id 音频id
+     */
+    public stopEffect(audio_id: number) {
+        mk.audio.stopEffect(audio_id);
+    }
+
+    /**
+     * 转换音效开关
+     */
+    public switchEffectFunc() {
+        this._switchEffect = !this._switchEffect;
+        if (!this._switchEffect) {
+            this.setStopAllEffect();
+        }
+        cc.sys.localStorage.setItem("switchEffect", this._switchEffect.toString());
+    }
+
+    /**
+     * 获取音效开关状态
+     * @returns {boolean}
+     */
+    public getSwitchEffect(): boolean {
+        return this._switchEffect;
+    }
+
+    /**
+     * 设置音效声音大小
+     * value: 0.0 - 1.0
+     */
+    public setEffectVolume(value: number) {
+        this._effectVolume = value;
+        mk.audio.setEffectVolume(value);
+        cc.sys.localStorage.setItem("audio", JSON.stringify({ effect: this._effectVolume, music: this._musicVolume }));
+    }
+
+    /**
+     * 获取音效大小
+     * @return {number} 0.0 - 1.0
+     */
+    public getEffectVolume(): number {
+        return mk.audio.getEffectVolume();
+    }
+
+    /**
+     * 恢复当前说暂停的所有音效
+     */
+    public setResumeAllEffect() {
+        if (this._switchEffect) {
+            mk.audio.resumeAllEffects();
+        }
+    }
+
+    /**
+     * 停止播放所有正在播放的音效
+     */
+    public setStopAllEffect() {
+        mk.audio.stopAllEffects();
+    }
+
+    /** 暂时开启关闭音效开关
+     * @param state true  打开  false 关闭
+     */
+    public setTempEffect(state: boolean) {
+        this._switchTempEffect = state;
+    }
+
+    /**
+     * 转换音乐按钮开关
+     */
+    public switchMusicFunc() {
+        this._switchMusic = !this._switchMusic;
+        if (!this._switchMusic) {
+            this.stopMusic();
+        } else {
+            this.playMusic('bgm');
+        }
+        cc.sys.localStorage.setItem("switchMusic", this._switchMusic.toString());
+    }
+
+    /**
+     * 获取音乐开关状态
+     * @returns {boolean}
+     */
+    public getSwitchMusic() {
+        return this._switchMusic;
+    }
+
+    /**
+     * 暂停当前播放音乐
+     */
+    public setPauseMusic() {
+        mk.audio.pauseMusic();
+    }
+
+    /**
+     * 恢复当前被暂停音乐音乐
+     */
+    public setResumeMusic() {
+        if (this._switchMusic) {
+            mk.audio.resumeMusic();
+        }
+    }
+
+    /**
+     * 暂停所有 music
+     */
+    public stopMusic() {
+        mk.audio.stopMusic();
+    }
+
+    /**
+     * 设置music音量
+     * @param value 音量
+     */
+    public setMusicVolume(value: number) {
+        this._musicVolume = value;
+        mk.audio.setMusicVolume(value);
+        cc.sys.localStorage.setItem("audio", JSON.stringify({ effect: this._effectVolume, music: this._musicVolume }));
+    }
+
+    /**
+     * 获取当前music音量
+     * @returns {number} 音量
+     */
+    public getMusicVolume() {
+        return mk.audio.getMusicVolume();
+    }
+
+    /**
+     * 音乐是否正在播放(验证些方法来实现背景音乐是否播放完成)
+     * @returns {boolen}
+     */
+    public isMusicPlaying() {
+        return mk.audio.isMusicPlaying();
+    }
+
+    /**
+     * 释放指定音效资源
+     * @param audio 音频资源
+     */
+    public releaseAudio(audio: cc.AudioClip) {
+        if (!audio) {
+            cc.error("【音频】资源" + audio + "不存在, 释放失败")
+            return;
+        }
+        mk.audio.releaseAudio(audio);
+    }
+
+    /** 停止所有音效 */
+    public stopAllAudio() {
+        mk.audio.stopAllAudio();
+    }
+
+    /** 卸载所有音频 */
+    public releaseAllAudio() {
+        mk.audio.releaseAllAudio();
+    }
+}
+/** 音频路径 */
+const AUDIO_PATH = 'music/';
+/** 声音枚举 */
+enum AUDIO_TYPE {
+    bgm = 'Background_music1',           //背景音乐
+    button = 'Button_click',            //按钮点击音效
+    turntableDraw = 'turntable1',           //转盘抽奖结束
+    turntableDrawEnd = 'turntable_2',           //转盘抽奖音效
+    getGold = 'Get_gold',       //获取金币音效
+}
+/** 外部读取到的类型 */
+type AUDIO_NAME = keyof typeof AUDIO_TYPE;

+ 9 - 0
mk_framework/assets/script/game/AudioManager.ts.meta

@@ -0,0 +1,9 @@
+{
+  "ver": "1.0.8",
+  "uuid": "23fb4f4f-fbcf-4147-8940-a4e141f50f3c",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}