"use strict"; cc._RF.push(module, 'bc4a4MWKJdKhY0ZzpXtIyrx', 'nx.audio'); // Scripts/nx/kernel/nx.audio.js "use strict"; /****************************************************************** * Copyright(C) 2019 - 2020 Nx Studio * * 声音管理 * * 2018.03.30 ******************************************************************/ var NxMod = require("nx.mod"); var nxAudios = cc.Class({ "extends": NxMod, name: "nxAudios", // 初始化 initialize: function initialize(_args) { // 初始化 this._super(_args); // 插件 nx.plugin.add(this, ["view"]); // 视图附着 this.vattach("Frame"); // 服务开启 nx.audio = this; // 音量默认 this.setBGMVolume(nx.storage.get("LKVolumeBG", 1)); this.setSFXVolume(nx.storage.get("LKVolumeSFX", 1)); this.setVoiceVolume(nx.storage.get("LKVolumeVOC", 1)); this.bgmRes = null; return true; }, // 销毁 uninitialize: function uninitialize() { // 服务注销 nx.audio = null; // USPER return this._super(); }, // ================================================ // 音乐相关 // ================================================ // 播放背景音乐 playBGM: function playBGM(_path) { // 重复播放判断 if (this.bgmRes == _path && cc.audioEngine.isMusicPlaying()) { return this.bgmRes; } // 先停止 this.stopBGM(); // Clip直接播放 if (_path instanceof cc.AudioClip) { this.bgmRes = _path.name; cc.audioEngine.playMusic(_path, true); return this.bgmRes; } // 读取Clip this.bgmRes = _path; nx.res.loadAudio(_path, function (_error, _clip) { // 播放 if (_clip) { cc.audioEngine.playMusic(_clip, true); return; } }); return this.bgmRes; }, // 停止背景音乐 stopBGM: function stopBGM() { cc.audioEngine.stopMusic(); this.bgmRes = ""; }, // 获取背景音量 getBGMVolume: function getBGMVolume() { return this.vget("BgmVolume"); }, // 设置背景音量 setBGMVolume: function setBGMVolume(_vol, _fading) { if (_fading === void 0) { _fading = false; } var vol = parseFloat(_vol) || 0; cc.audioEngine.setMusicVolume(vol); if (!_fading) { nx.storage.set("LKVolumeBG", vol); this.vset("BgmVolume", vol); } }, // ================================================ // 音效相关 // ================================================ // 播放音效 // @ 路径直传 OR cc.AudioClip对象 playSFX: function playSFX(_path, _loop, _cb) { // Clip直接播放 if (_path instanceof cc.AudioClip) { var id = cc.audioEngine.playEffect(_path, !!_loop); nx.dt.fnInvoke(_cb, null, id); return; } // 参数检查 if (nx.dt.strEmpty(_path)) { nx.error("[音频管理]音效播放失败,无效路径!"); return; } // 播放 nx.res.loadAudio(_path, function (_error, _clip) { // 读取失败返回 if (_error) { nx.dt.fnInvoke(_cb, _error); return; } // 播放 var id = cc.audioEngine.playEffect(_clip, !!_loop); nx.dt.fnInvoke(_cb, null, id, _path); }); }, // 停止音效 stopSFX: function stopSFX(_handle) { cc.audioEngine.stopEffect(_handle); }, // 音效是否在播放 // {ERROR: -1, INITIALZING: 0, PLAYING: 1, PAUSED: 2, STOPPED: 3} isSFXPlaying: function isSFXPlaying(_handle) { var state = cc.audioEngine.getState(_handle); return state == 1; }, // 停止所有音效 stopSFXAll: function stopSFXAll() { cc.audioEngine.stopAllEffects(); }, // 获取音效音量 getSFXVolume: function getSFXVolume() { return this.vget("SfxVolume"); }, // 设置音效音量 setSFXVolume: function setSFXVolume(_vol) { var vol = parseFloat(_vol) || 0; nx.storage.set("LKVolumeSFX", vol); this.vset("SfxVolume", vol); cc.audioEngine.setEffectsVolume(vol); }, // ================================================ // 语音相关 // ================================================ // 播放语音 // @ 路径直传 OR cc.AudioClip对象 playVoice: function playVoice(_path, _cb) { var _this = this; // Clip直接播放 if (_path instanceof cc.AudioClip) { var id = cc.audioEngine.playEffect(_path, false); nx.dt.fnInvoke(_cb, null, id); return; } // 参数检查 if (nx.dt.strEmpty(_path)) { nx.error("[音频管理]语音播放失败,无效路径!"); return; } // 播放 nx.res.loadAudio(_path, function (_error, _clip) { // 读取失败返回 if (_error) { nx.dt.fnInvoke(_cb, _error); return; } // 播放 var id = cc.audioEngine.playEffect(_clip, false); cc.audioEngine.setVolume(id, _this.getVoiceVolume()); nx.dt.fnInvoke(_cb, null, id, _path); }); }, // 停止语音 stopVoice: function stopVoice(_handle) { cc.audioEngine.stopEffect(_handle); }, // 获取语音音量 getVoiceVolume: function getVoiceVolume() { return this.vget("VocVolume"); }, // 设置语音音量 setVoiceVolume: function setVoiceVolume(_vol) { var vol = parseFloat(_vol) || 0; this.vset("VocVolume", vol); nx.storage.set("LKVolumeVOC", vol); }, // ================================================ // 总控制 // ================================================ // 暂停 pauseAll: function pauseAll() { nx.debug("声音暂停"); cc.audioEngine.pauseAll(); }, // 恢复 resumeAll: function resumeAll() { nx.debug("声音恢复"); cc.audioEngine.resumeAll(); }, // 全部关闭 stopAll: function stopAll() { nx.debug("声音全部关闭"); cc.audioEngine.stopAll(); this.bgmRes = ""; } }); module.exports = nxAudios; cc._RF.pop();