58ac9e3face67776cf62017ec670fd538847c246.js 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. System.register(["__unresolved_0", "cc", "__unresolved_1", "__unresolved_2", "__unresolved_3"], function (_export, _context) {
  2. "use strict";
  3. var _reporterNs, _cclegacy, __checkObsolete__, __checkObsoleteInNamespace__, AudioClip, Node, NodePool, oops, resLoader, AudioEffect, AudioEffectPool, _crd, AE_ID_MAX;
  4. function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
  5. function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
  6. function _reportPossibleCrUseOfoops(extras) {
  7. _reporterNs.report("oops", "../../Oops", _context.meta, extras);
  8. }
  9. function _reportPossibleCrUseOfresLoader(extras) {
  10. _reporterNs.report("resLoader", "../loader/ResLoader", _context.meta, extras);
  11. }
  12. function _reportPossibleCrUseOfAudioEffect(extras) {
  13. _reporterNs.report("AudioEffect", "./AudioEffect", _context.meta, extras);
  14. }
  15. _export("AudioEffectPool", void 0);
  16. return {
  17. setters: [function (_unresolved_) {
  18. _reporterNs = _unresolved_;
  19. }, function (_cc) {
  20. _cclegacy = _cc.cclegacy;
  21. __checkObsolete__ = _cc.__checkObsolete__;
  22. __checkObsoleteInNamespace__ = _cc.__checkObsoleteInNamespace__;
  23. AudioClip = _cc.AudioClip;
  24. Node = _cc.Node;
  25. NodePool = _cc.NodePool;
  26. }, function (_unresolved_2) {
  27. oops = _unresolved_2.oops;
  28. }, function (_unresolved_3) {
  29. resLoader = _unresolved_3.resLoader;
  30. }, function (_unresolved_4) {
  31. AudioEffect = _unresolved_4.AudioEffect;
  32. }],
  33. execute: function () {
  34. _crd = true;
  35. _cclegacy._RF.push({}, "01278BDjrtCr4CBpmO5DZlN", "AudioEffectPool", undefined);
  36. __checkObsolete__(['AudioClip', 'Node', 'NodePool']);
  37. AE_ID_MAX = 30000;
  38. /** 音效池 */
  39. _export("AudioEffectPool", AudioEffectPool = class AudioEffectPool {
  40. constructor() {
  41. this._switch = true;
  42. this._volume = 1;
  43. /** 音效播放器对象池 */
  44. this.pool = new NodePool();
  45. /** 对象池集合 */
  46. this.effects = new Map();
  47. /** 用过的音效资源记录 */
  48. this.res = new Map();
  49. this._aeId = 0;
  50. }
  51. /** 音效开关 */
  52. get switch() {
  53. return this._switch;
  54. }
  55. set switch(value) {
  56. this._switch = value;
  57. if (value) this.stop();
  58. }
  59. /** 所有音效音量 */
  60. get volume() {
  61. return this._volume;
  62. }
  63. set volume(value) {
  64. this._volume = value;
  65. this.effects.forEach(ae => {
  66. ae.volume = value;
  67. });
  68. }
  69. /** 获取请求唯一编号 */
  70. getAeId() {
  71. if (this._aeId == AE_ID_MAX) this._aeId = 1;
  72. this._aeId++;
  73. return this._aeId;
  74. }
  75. /**
  76. * 加载与播放音效
  77. * @param url 音效资源地址与音效资源
  78. * @param bundleName 资源包名
  79. * @param onPlayComplete 播放完成回调
  80. * @returns
  81. */
  82. load(url, bundleName, onPlayComplete) {
  83. var _this = this;
  84. return _asyncToGenerator(function* () {
  85. if (bundleName === void 0) {
  86. bundleName = (_crd && resLoader === void 0 ? (_reportPossibleCrUseOfresLoader({
  87. error: Error()
  88. }), resLoader) : resLoader).defaultBundleName;
  89. }
  90. return new Promise( /*#__PURE__*/_asyncToGenerator(function* (resolve, reject) {
  91. if (!_this.switch) return resolve(-1); // 创建音效资源
  92. var clip;
  93. if (url instanceof AudioClip) {
  94. clip = url;
  95. } else {
  96. clip = (_crd && resLoader === void 0 ? (_reportPossibleCrUseOfresLoader({
  97. error: Error()
  98. }), resLoader) : resLoader).get(url, AudioClip, bundleName);
  99. if (!clip) {
  100. _this.res.set(bundleName, url);
  101. clip = yield (_crd && resLoader === void 0 ? (_reportPossibleCrUseOfresLoader({
  102. error: Error()
  103. }), resLoader) : resLoader).loadAsync(bundleName, url, AudioClip);
  104. }
  105. } // 资源已被释放
  106. if (!clip.isValid) {
  107. resolve(-1);
  108. return;
  109. }
  110. var aeid = _this.getAeId();
  111. var key;
  112. if (url instanceof AudioClip) {
  113. key = url.uuid;
  114. } else {
  115. key = bundleName + "_" + url;
  116. }
  117. key += "_" + aeid; // 获取音效果播放器播放音乐
  118. var ae;
  119. var node = null;
  120. if (_this.pool.size() == 0) {
  121. node = new Node();
  122. node.name = "AudioEffect";
  123. node.parent = (_crd && oops === void 0 ? (_reportPossibleCrUseOfoops({
  124. error: Error()
  125. }), oops) : oops).audio.node;
  126. ae = node.addComponent(_crd && AudioEffect === void 0 ? (_reportPossibleCrUseOfAudioEffect({
  127. error: Error()
  128. }), AudioEffect) : AudioEffect);
  129. } else {
  130. node = _this.pool.get();
  131. ae = node.getComponent(_crd && AudioEffect === void 0 ? (_reportPossibleCrUseOfAudioEffect({
  132. error: Error()
  133. }), AudioEffect) : AudioEffect);
  134. }
  135. ae.onComplete = () => {
  136. _this.put(aeid, url, bundleName); // 播放完回收对象
  137. onPlayComplete && onPlayComplete(); // console.log(`【音效】回收,池中剩余音效播放器【${this.pool.size()}】`);
  138. }; // 记录正在播放的音效播放器
  139. _this.effects.set(key, ae);
  140. ae.volume = _this.volume;
  141. ae.clip = clip;
  142. ae.play();
  143. resolve(aeid);
  144. }));
  145. })();
  146. }
  147. /**
  148. * 回收音效播放器
  149. * @param aeid 播放器编号
  150. * @param url 音效路径
  151. * @param bundleName 资源包名
  152. */
  153. put(aeid, url, bundleName) {
  154. if (bundleName === void 0) {
  155. bundleName = (_crd && resLoader === void 0 ? (_reportPossibleCrUseOfresLoader({
  156. error: Error()
  157. }), resLoader) : resLoader).defaultBundleName;
  158. }
  159. var key;
  160. if (url instanceof AudioClip) {
  161. key = url.uuid;
  162. } else {
  163. key = bundleName + "_" + url;
  164. }
  165. key += "_" + aeid;
  166. var ae = this.effects.get(key);
  167. if (ae && ae.clip) {
  168. this.effects.delete(key);
  169. ae.stop();
  170. this.pool.put(ae.node);
  171. }
  172. }
  173. /** 释放所有音效资源与对象池中播放器 */
  174. release() {
  175. // 释放正在播放的音效
  176. this.effects.forEach(ae => {
  177. ae.node.destroy();
  178. });
  179. this.effects.clear(); // 释放音效资源
  180. this.res.forEach((url, bundleName) => {
  181. (_crd && resLoader === void 0 ? (_reportPossibleCrUseOfresLoader({
  182. error: Error()
  183. }), resLoader) : resLoader).release(bundleName, url);
  184. }); // 释放池中播放器
  185. this.pool.clear();
  186. }
  187. /** 停止播放所有音效 */
  188. stop() {
  189. this.effects.forEach(ae => {
  190. ae.stop();
  191. });
  192. }
  193. /** 恢复所有音效 */
  194. play() {
  195. if (!this.switch) return;
  196. this.effects.forEach(ae => {
  197. ae.play();
  198. });
  199. }
  200. /** 暂停所有音效 */
  201. pause() {
  202. if (!this.switch) return;
  203. this.effects.forEach(ae => {
  204. ae.pause();
  205. });
  206. }
  207. });
  208. _cclegacy._RF.pop();
  209. _crd = false;
  210. }
  211. };
  212. });
  213. //# sourceMappingURL=58ac9e3face67776cf62017ec670fd538847c246.js.map