|
|
@@ -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;
|