@famibee/skynovel 1.65.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/README.md +3 -3
  2. package/dist/Button.js +131 -163
  3. package/dist/Button.js.map +1 -1
  4. package/dist/CallStack.js +19 -22
  5. package/dist/CallStack.js.map +1 -1
  6. package/dist/CmnInterface.js +91 -0
  7. package/dist/CmnInterface.js.map +1 -0
  8. package/dist/CmnLib.js +94 -0
  9. package/dist/CmnLib.js.map +1 -0
  10. package/dist/Config.js +26 -0
  11. package/dist/Config.js.map +1 -0
  12. package/dist/ConfigBase.js +152 -0
  13. package/dist/ConfigBase.js.map +1 -0
  14. package/dist/DebugMng.js +89 -102
  15. package/dist/DebugMng.js.map +1 -1
  16. package/dist/EventListenerCtn.js +21 -0
  17. package/dist/EventListenerCtn.js.map +1 -0
  18. package/dist/EventMng.js +1435 -1577
  19. package/dist/EventMng.js.map +1 -1
  20. package/dist/Grammar.js +194 -0
  21. package/dist/Grammar.js.map +1 -0
  22. package/dist/GrpLayer.js +163 -195
  23. package/dist/GrpLayer.js.map +1 -1
  24. package/dist/Layer.js +260 -0
  25. package/dist/Layer.js.map +1 -0
  26. package/dist/LayerMng.js +810 -991
  27. package/dist/LayerMng.js.map +1 -1
  28. package/dist/Main.js +144 -393
  29. package/dist/Main.js.map +1 -1
  30. package/dist/PropParser.js +936 -834
  31. package/dist/PropParser.js.map +1 -1
  32. package/dist/Reading.js +917 -786
  33. package/dist/Reading.js.map +1 -1
  34. package/dist/RubySpliter.js +59 -92
  35. package/dist/RubySpliter.js.map +1 -1
  36. package/dist/ScriptIterator.js +805 -1034
  37. package/dist/ScriptIterator.js.map +1 -1
  38. package/dist/SndBuf.js +1097 -1332
  39. package/dist/SndBuf.js.map +1 -1
  40. package/dist/SoundMng.js +124 -135
  41. package/dist/SoundMng.js.map +1 -1
  42. package/dist/SpritesMng.js +220 -232
  43. package/dist/SpritesMng.js.map +1 -1
  44. package/dist/SysBase.js +1729 -0
  45. package/dist/SysBase.js.map +1 -0
  46. package/dist/TxtLayer.js +1212 -1397
  47. package/dist/TxtLayer.js.map +1 -1
  48. package/dist/Variable.js +398 -466
  49. package/dist/Variable.js.map +1 -1
  50. package/dist/chunk.js +18 -0
  51. package/dist/gamepad.js +723 -511
  52. package/dist/gamepad.js.map +1 -1
  53. package/dist/pixi.js +13422 -0
  54. package/dist/pixi.js.map +1 -0
  55. package/dist/platform.js +424 -369
  56. package/dist/platform.js.map +1 -1
  57. package/dist/sn/AnalyzeTagArg.d.ts +1 -1
  58. package/dist/sn/AnalyzeTagArg.d.ts.map +1 -1
  59. package/dist/sn/CmnInterface.d.ts +3 -1
  60. package/dist/sn/CmnInterface.d.ts.map +1 -1
  61. package/dist/sn/CmnLib.d.ts.map +1 -1
  62. package/dist/sn/CmnTween.d.ts +3 -3
  63. package/dist/sn/CmnTween.d.ts.map +1 -1
  64. package/dist/sn/EventMng.d.ts.map +1 -1
  65. package/dist/sn/Grammar.d.ts +1 -1
  66. package/dist/sn/Grammar.d.ts.map +1 -1
  67. package/dist/sn/PropParser.d.ts +2 -2
  68. package/dist/sn/PropParser.d.ts.map +1 -1
  69. package/dist/sn/Reading.d.ts +6 -0
  70. package/dist/sn/Reading.d.ts.map +1 -1
  71. package/dist/sn/ScriptIterator.d.ts.map +1 -1
  72. package/dist/sn/SndBuf.d.ts +27 -16
  73. package/dist/sn/SndBuf.d.ts.map +1 -1
  74. package/dist/sn/SoundMng.d.ts +4 -1
  75. package/dist/sn/SoundMng.d.ts.map +1 -1
  76. package/dist/sn/SysBase.d.ts.map +1 -1
  77. package/dist/sn/TxtStage.d.ts +2 -1
  78. package/dist/sn/TxtStage.d.ts.map +1 -1
  79. package/dist/test/ValTest.d.ts +1 -1
  80. package/dist/test/ValTest.d.ts.map +1 -1
  81. package/dist/web.js +653 -8
  82. package/dist/web.js.map +1 -1
  83. package/dist_app/Button.js +131 -163
  84. package/dist_app/Button.js.map +1 -1
  85. package/dist_app/CallStack.js +19 -22
  86. package/dist_app/CallStack.js.map +1 -1
  87. package/dist_app/CmnInterface.js +91 -0
  88. package/dist_app/CmnInterface.js.map +1 -0
  89. package/dist_app/CmnLib.js +94 -0
  90. package/dist_app/CmnLib.js.map +1 -0
  91. package/dist_app/Config.js +26 -0
  92. package/dist_app/Config.js.map +1 -0
  93. package/dist_app/ConfigBase.js +152 -0
  94. package/dist_app/ConfigBase.js.map +1 -0
  95. package/dist_app/DebugMng.js +92 -0
  96. package/dist_app/DebugMng.js.map +1 -0
  97. package/dist_app/EventListenerCtn.js +21 -0
  98. package/dist_app/EventListenerCtn.js.map +1 -0
  99. package/dist_app/EventMng.js +1435 -1577
  100. package/dist_app/EventMng.js.map +1 -1
  101. package/dist_app/Grammar.js +194 -0
  102. package/dist_app/Grammar.js.map +1 -0
  103. package/dist_app/GrpLayer.js +163 -195
  104. package/dist_app/GrpLayer.js.map +1 -1
  105. package/dist_app/Layer.js +260 -0
  106. package/dist_app/Layer.js.map +1 -0
  107. package/dist_app/LayerMng.js +810 -991
  108. package/dist_app/LayerMng.js.map +1 -1
  109. package/dist_app/Main.js +144 -392
  110. package/dist_app/Main.js.map +1 -1
  111. package/dist_app/PropParser.js +936 -834
  112. package/dist_app/PropParser.js.map +1 -1
  113. package/dist_app/Reading.js +917 -786
  114. package/dist_app/Reading.js.map +1 -1
  115. package/dist_app/RubySpliter.js +59 -92
  116. package/dist_app/RubySpliter.js.map +1 -1
  117. package/dist_app/ScriptIterator.js +805 -1033
  118. package/dist_app/ScriptIterator.js.map +1 -1
  119. package/dist_app/SndBuf.js +1097 -1332
  120. package/dist_app/SndBuf.js.map +1 -1
  121. package/dist_app/SoundMng.js +124 -135
  122. package/dist_app/SoundMng.js.map +1 -1
  123. package/dist_app/SpritesMng.js +220 -231
  124. package/dist_app/SpritesMng.js.map +1 -1
  125. package/dist_app/SysBase.js +1729 -0
  126. package/dist_app/SysBase.js.map +1 -0
  127. package/dist_app/TxtLayer.js +1212 -1396
  128. package/dist_app/TxtLayer.js.map +1 -1
  129. package/dist_app/Variable.js +398 -466
  130. package/dist_app/Variable.js.map +1 -1
  131. package/dist_app/app.js +211 -8
  132. package/dist_app/app.js.map +1 -1
  133. package/dist_app/appMain.js +20 -21
  134. package/dist_app/appMain.js.map +1 -1
  135. package/dist_app/chunk.js +18 -0
  136. package/dist_app/gamepad.js +723 -511
  137. package/dist_app/gamepad.js.map +1 -1
  138. package/dist_app/pixi.js +11181 -0
  139. package/dist_app/pixi.js.map +1 -0
  140. package/dist_app/platform.js +424 -369
  141. package/dist_app/platform.js.map +1 -1
  142. package/dist_app/preload.js +2 -2
  143. package/dist_app/preload.js.map +1 -1
  144. package/dist_app/sn/AnalyzeTagArg.d.ts +1 -1
  145. package/dist_app/sn/AnalyzeTagArg.d.ts.map +1 -1
  146. package/dist_app/sn/CmnInterface.d.ts +3 -1
  147. package/dist_app/sn/CmnInterface.d.ts.map +1 -1
  148. package/dist_app/sn/CmnLib.d.ts.map +1 -1
  149. package/dist_app/sn/CmnTween.d.ts +3 -3
  150. package/dist_app/sn/CmnTween.d.ts.map +1 -1
  151. package/dist_app/sn/EventMng.d.ts.map +1 -1
  152. package/dist_app/sn/Grammar.d.ts +1 -1
  153. package/dist_app/sn/Grammar.d.ts.map +1 -1
  154. package/dist_app/sn/PropParser.d.ts +2 -2
  155. package/dist_app/sn/PropParser.d.ts.map +1 -1
  156. package/dist_app/sn/Reading.d.ts +6 -0
  157. package/dist_app/sn/Reading.d.ts.map +1 -1
  158. package/dist_app/sn/ScriptIterator.d.ts.map +1 -1
  159. package/dist_app/sn/SndBuf.d.ts +27 -16
  160. package/dist_app/sn/SndBuf.d.ts.map +1 -1
  161. package/dist_app/sn/SoundMng.d.ts +4 -1
  162. package/dist_app/sn/SoundMng.d.ts.map +1 -1
  163. package/dist_app/sn/SysBase.d.ts.map +1 -1
  164. package/dist_app/sn/TxtStage.d.ts +2 -1
  165. package/dist_app/sn/TxtStage.d.ts.map +1 -1
  166. package/dist_app/test/ValTest.d.ts +1 -1
  167. package/dist_app/test/ValTest.d.ts.map +1 -1
  168. package/package.json +23 -13
  169. package/dist/CmnTween.js +0 -1005
  170. package/dist/CmnTween.js.map +0 -1
  171. package/dist/web2.js +0 -21644
  172. package/dist/web2.js.map +0 -1
  173. package/dist_app/CmnTween.js +0 -1005
  174. package/dist_app/CmnTween.js.map +0 -1
  175. package/dist_app/app2.js +0 -18547
  176. package/dist_app/app2.js.map +0 -1
@@ -1,136 +1,125 @@
1
- import { k as b, e as m } from "./app2.js";
2
- import { I as v, S as f, R as r, B as n, a as u } from "./SndBuf.js";
3
- class V {
4
- constructor(s, t, o, i, l) {
5
- this.val = o, t.volume = (e) => this.#c(e), t.fadebgm = (e) => this.#n(e), t.fadeoutbgm = (e) => this.#m(e), t.fadeoutse = (e) => this.#b(e), t.fadese = (e) => this.#t(e), t.playbgm = (e) => this.#u(e), t.playse = (e) => this.#i(e), t.stop_allse = () => this.#e(), t.stopbgm = (e) => this.#v(e), t.stopse = (e) => this.#o(e), t.wb = (e) => this.#d(e), t.wf = (e) => this.#a(e), t.stopfadese = (e) => this.#f(e), t.wl = (e) => this.#p(e), t.ws = (e) => this.#r(e), t.xchgbuf = (e) => this.#_(e), o.setVal_Nochk("save", "const.sn.loopPlaying", "{}"), o.setVal_Nochk("tmp", "const.sn.sound.codecs", JSON.stringify(v.supported)), f.init(s, o, i, l, this.#s), r.disableAutoPause = !0;
6
- }
7
- #s = {};
8
- #l;
9
- setEvtMng(s) {
10
- this.#l = s, f.setEvtMng(s);
11
- }
12
- setNoticeChgVolume(s, t) {
13
- this.val.defValTrg("sys:sn.sound.global_volume", (o, i) => s(r.volumeAll = Number(i))), this.val.defValTrg("sys:sn.sound.movie_volume", (o, i) => t(Number(i))), this.val.setVal_Nochk("sys", "sn.sound.global_volume", this.val.getVal("sys:sn.sound.global_volume", 1)), this.val.setVal_Nochk("sys", "sn.sound.movie_volume", this.val.getVal("sys:sn.sound.movie_volume", 1));
14
- }
15
- //MARK: 音量設定(独自拡張)
16
- #c(s) {
17
- const { buf: t = n } = s, o = "const.sn.sound." + t + ".volume", i = this.#h(s, 1);
18
- return Number(this.val.getVal("sys:" + o)) === i ? !1 : (this.val.setVal_Nochk("sys", o, i), this.val.flush(), s.time = 0, s.volume = Number(this.val.getVal("save:" + o)), this.#t(s));
19
- }
20
- #h(s, t) {
21
- const o = b(s, "volume", t);
22
- return o < 0 ? 0 : o > 1 ? 1 : o;
23
- }
24
- //MARK: BGM/効果音のフェードアウト(loadから使うのでマクロ化禁止)
25
- #m(s) {
26
- return s.volume = 0, this.#n(s);
27
- }
28
- //MARK: 効果音のフェードアウト(loadから使うのでマクロ化禁止)
29
- #b(s) {
30
- return s.volume = 0, this.#t(s);
31
- }
32
- //MARK: BGMのフェード(loadから使うのでマクロ化禁止)
33
- #n(s) {
34
- return s.buf = u, this.#t(s);
35
- }
36
- //MARK: 効果音のフェード
37
- #t(s) {
38
- const { buf: t = n } = s;
39
- return this.#f(s), this.#s[t]?.fade(s), !1;
40
- }
41
- //MARK: BGM の演奏
42
- #u(s) {
43
- return s.buf = u, s.canskip = !1, m(s, "loop", !0), this.#i(s);
44
- }
45
- //MARK: 効果音の再生
46
- #i(s) {
47
- const { buf: t = n, fn: o } = s;
48
- if (this.#o({ buf: t }), !o) throw `fnは必須です buf:${t}`;
49
- return m(s, "canskip", !0) && this.#l.isSkipping ? !1 : (this.#s[t] = new f(s, t, o)).needLoad;
50
- }
51
- clearCache() {
52
- r.removeAll();
53
- }
54
- //MARK: 全効果音再生の停止
55
- #e() {
56
- for (const s of Object.keys(this.#s)) this.#o({ buf: s });
57
- return this.#s = {}, r.stopAll(), !1;
58
- }
59
- //MARK: BGM 演奏の停止(loadから使うのでマクロ化禁止)
60
- #v(s) {
61
- return s.buf = u, this.#o(s);
62
- }
63
- //MARK: 効果音再生の停止
64
- #o(s) {
65
- const { buf: t = n } = s;
66
- return this.#s[t]?.stopse(s), !1;
67
- }
68
- //MARK: BGM フェードの終了待ち
69
- #d(s) {
70
- return s.buf = u, this.#a(s);
71
- }
72
- //MARK: 効果音フェードの終了待ち
73
- #a(s) {
74
- const { buf: t = n } = s;
75
- return this.#s[t]?.wf(s) ?? !1;
76
- }
77
- //MARK: 音声フェードの停止
78
- #f(s) {
79
- const { buf: t = n } = s;
80
- return this.#s[t]?.stopfadese(s), !1;
81
- }
82
- //MARK: BGM 再生の終了待ち
83
- #p(s) {
84
- return s.buf = u, this.#r(s);
85
- }
86
- //MARK: 効果音再生の終了待ち
87
- #r(s) {
88
- const { buf: t = n } = s;
89
- return this.#s[t]?.ws(s) ?? !1;
90
- }
91
- //MARK: 再生トラックの交換
92
- #_(s) {
93
- const { buf: t = n, buf2: o = n } = s;
94
- if (t === o) return !1;
95
- const i = this.#s[t], l = this.#s[o];
96
- return i ? this.#s[o] = i : delete this.#s[o], l ? this.#s[t] = l : delete this.#s[t], f.xchgbuf(s), !1;
97
- }
98
- //MARK: しおりの読込(BGM状態復元)
99
- playLoopFromSaveObj(s) {
100
- const t = String(this.val.getVal("save:const.sn.loopPlaying", "{}"));
101
- if (t === "{}")
102
- return this.#e(), this.clearCache(), [];
103
- const o = JSON.parse(t);
104
- if (s)
105
- this.#e(), this.clearCache();
106
- else for (const [i, l] of Object.entries(this.#s))
107
- i in o || l.stopse({ buf: i });
108
- return Object.entries(o).map(([i, l]) => new Promise((e) => {
109
- const h = this.#s[i];
110
- if (!s && h && h.fn === l) {
111
- e();
112
- return;
113
- }
114
- const a = "save:const.sn.sound." + i + ".", c = {
115
- fn: l,
116
- buf: i,
117
- join: !1,
118
- loop: !0,
119
- volume: Number(this.val.getVal(a + "volume")),
120
- start_ms: Number(this.val.getVal(a + "start_ms")),
121
- end_ms: Number(this.val.getVal(a + "end_ms")),
122
- ret_ms: Number(this.val.getVal(a + "ret_ms")),
123
- fnc: e
124
- // loaded
125
- };
126
- c.buf === u ? this.#u(c) : this.#i(c);
127
- }));
128
- }
129
- destroy() {
130
- this.#e(), this.clearCache();
131
- }
132
- }
133
- export {
134
- V as SoundMng
1
+ import { l as argChk_Num, s as argChk_Boolean } from "./CmnLib.js";
2
+ import "./pixi.js";
3
+ import "./EventListenerCtn.js";
4
+ import "./ConfigBase.js";
5
+ import "./Reading.js";
6
+ import { a as require_howler, i as xchgbuf, n as BUF_SE, r as SndBuf, t as BUF_BGM } from "./SndBuf.js";
7
+ var import_howler = require_howler(), SoundMng = class {
8
+ #e = {};
9
+ #t(e) {
10
+ return this.#e[e];
11
+ }
12
+ constructor(e, r, i, a, o) {
13
+ this.val = i, r.volume = (e) => this.#r(e), r.fadebgm = (e) => this.#s(e), r.fadeoutbgm = (e) => this.#a(e), r.fadeoutse = (e) => this.#o(e), r.fadese = (e) => this.#c(e), r.playbgm = (e) => this.#l(e), r.playse = (e) => this.#u(e), r.stop_allse = () => this.#f(), r.stopbgm = (e) => this.#p(e), r.stopse = (e) => this.#m(e), r.wb = (e) => this.#h(e), r.wf = (e) => this.#g(e), r.stopfadese = () => !1, r.wl = (e) => this.#_(e), r.ws = (e) => this.#v(e), r.xchgbuf = (e) => this.#y(e), i.setVal_Nochk("save", "const.sn.loopPlaying", "{}");
14
+ let c = {};
15
+ for (let e of "aac,caf,dolby,flac,m4a,m4b,mp3,mp4,mpeg,oga,ogg,opus,wav,weba,webm".split(",")) c[e] = import_howler.Howler.codecs(e);
16
+ i.setVal_Nochk("tmp", "const.sn.sound.codecs", JSON.stringify(c)), SndBuf.init(e, i, a, o, (e) => this.#t(e));
17
+ }
18
+ #n;
19
+ setEvtMng(e) {
20
+ this.#n = e, SndBuf.setEvtMng(e);
21
+ }
22
+ setNoticeChgVolume(e, r) {
23
+ this.val.defValTrg("sys:sn.sound.global_volume", (r, i) => {
24
+ let a = Number(i);
25
+ import_howler.Howler.volume(a), e(a);
26
+ }), this.val.defValTrg("sys:sn.sound.movie_volume", (e, i) => r(Number(i))), this.val.setVal_Nochk("sys", "sn.sound.global_volume", this.val.getVal("sys:sn.sound.global_volume", 1)), this.val.setVal_Nochk("sys", "sn.sound.movie_volume", this.val.getVal("sys:sn.sound.movie_volume", 1));
27
+ }
28
+ #r(e) {
29
+ let { buf: r = "SE" } = e, i = "const.sn.sound." + r + ".volume", a = this.#i(e, 1);
30
+ return Number(this.val.getVal("sys:" + i)) === a ? !1 : (this.val.setVal_Nochk("sys", i, a), this.val.flush(), e.time = 0, e.volume = Number(this.val.getVal("save:" + i)), this.#c(e));
31
+ }
32
+ #i(r, i) {
33
+ let a = argChk_Num(r, "volume", i);
34
+ return a < 0 ? 0 : a > 1 ? 1 : a;
35
+ }
36
+ #a(e) {
37
+ return e.volume = 0, this.#s(e);
38
+ }
39
+ #o(e) {
40
+ return e.volume = 0, this.#c(e);
41
+ }
42
+ #s(e) {
43
+ return e.buf = "BGM", this.#c(e);
44
+ }
45
+ #c(e) {
46
+ let { buf: r = "SE" } = e;
47
+ return this.#e[r]?.fade(e), !1;
48
+ }
49
+ #l(e) {
50
+ return e.buf = "BGM", e.canskip = !1, argChk_Boolean(e, "loop", !0), this.#u(e);
51
+ }
52
+ #u(e) {
53
+ let { buf: i = "SE" } = e;
54
+ if (this.#m({ buf: i }), argChk_Boolean(e, "canskip", !0) && this.#n.isSkipping) return !1;
55
+ this.#d();
56
+ let a = argChk_Boolean(e, "join", !0);
57
+ return this.#e[i] = SndBuf.generate(e, i, a), a;
58
+ }
59
+ #d = () => {
60
+ import_howler.Howler.volume(Number(this.val.getVal("sys:sn.sound.global_volume", 1))), this.#d = () => {};
61
+ };
62
+ #f() {
63
+ for (let e of Object.keys(this.#e)) this.#m({ buf: e });
64
+ return this.#e = {}, import_howler.Howler.unload(), !1;
65
+ }
66
+ #p(e) {
67
+ return e.buf = "BGM", this.#m(e);
68
+ }
69
+ #m(e) {
70
+ let { buf: r = "SE" } = e;
71
+ return this.#e[r]?.stopse(), !1;
72
+ }
73
+ #h(e) {
74
+ return e.buf = "BGM", this.#g(e);
75
+ }
76
+ #g(e) {
77
+ let { buf: r = "SE" } = e;
78
+ return this.#e[r]?.wf(e) ?? !1;
79
+ }
80
+ #_(e) {
81
+ return e.buf = "BGM", this.#v(e);
82
+ }
83
+ #v(e) {
84
+ let { buf: r = "SE" } = e;
85
+ return this.#e[r]?.ws(e) ?? !1;
86
+ }
87
+ #y(e) {
88
+ let { buf: r = "SE", buf2: i = "SE" } = e;
89
+ if (r === i) return !1;
90
+ let o = this.#e[r], s = this.#e[i];
91
+ return o ? this.#e[i] = o : delete this.#e[i], s ? this.#e[r] = s : delete this.#e[r], xchgbuf(e), !1;
92
+ }
93
+ playLoopFromSaveObj(e) {
94
+ let r = String(this.val.getVal("save:const.sn.loopPlaying", "{}"));
95
+ if (r === "{}") return this.#f(), [];
96
+ let i = JSON.parse(r);
97
+ if (e) this.#f();
98
+ else for (let [e, r] of Object.entries(this.#e)) e in i || r.stopse();
99
+ return Object.entries(i).map(([r, i]) => new Promise((a) => {
100
+ let o = this.#e[r];
101
+ if (!e && o && o.fn === i) {
102
+ a();
103
+ return;
104
+ }
105
+ let s = "save:const.sn.sound." + r + ".", c = {
106
+ fn: i,
107
+ buf: r,
108
+ join: !1,
109
+ loop: !0,
110
+ volume: Number(this.val.getVal(s + "volume")),
111
+ start_ms: Number(this.val.getVal(s + "start_ms")),
112
+ end_ms: Number(this.val.getVal(s + "end_ms")),
113
+ ret_ms: Number(this.val.getVal(s + "ret_ms")),
114
+ fnc: a
115
+ };
116
+ c.buf === "BGM" ? this.#l(c) : this.#u(c);
117
+ }));
118
+ }
119
+ destroy() {
120
+ this.#f();
121
+ }
135
122
  };
136
- //# sourceMappingURL=SoundMng.js.map
123
+ export { SoundMng };
124
+
125
+ //# sourceMappingURL=SoundMng.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SoundMng.js","sources":["../src/sn/SoundMng.ts"],"sourcesContent":["/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2018-2025 Famibee (famibee.blog38.fc2.com)\n\n\tThis software is released under the MIT License.\n\thttp://opensource.org/licenses/mit-license.php\n** ***** END LICENSE BLOCK ***** */\n\nimport {type IEvtMng, argChk_Boolean, argChk_Num} from './CmnLib';\nimport type {T_HTag, TArg} from './Grammar';\nimport type {T_Variable, T_Main, T_NoticeChgVolume} from './CmnInterface';\nimport type {Config} from './Config';\nimport type {SysBase} from './SysBase';\nimport {BUF_BGM, BUF_SE, type HSndBuf, SndBuf} from './SndBuf';\n\nimport {sound, utils} from '@pixi/sound';\n\n\nexport class SoundMng {\n\t#hSndBuf\t: HSndBuf\t= {};\n\n\tconstructor(cfg: Config, hTag: T_HTag, private readonly val: T_Variable, main: T_Main, sys: SysBase) {\n\t\thTag.volume\t\t= o=> this.#volume(o);\t\t// 音量設定(独自拡張)\n\t\thTag.fadebgm\t= o=> this.#fadebgm(o);\t\t// BGMのフェード\n\t\thTag.fadeoutbgm\t= o=> this.#fadeoutbgm(o);\t// BGMのフェードアウト\n\t\thTag.fadeoutse\t= o=> this.#fadeoutse(o);\t// 効果音のフェードアウト\n\t\thTag.fadese\t\t= o=> this.#fadese(o);\t\t// 効果音のフェード\n\t\thTag.playbgm\t= o=> this.#playbgm(o);\t\t// BGM の演奏\n\t\thTag.playse\t\t= o=> this.#playse(o);\t\t// 効果音の再生\n\t\thTag.stop_allse\t= ()=> this.#stop_allse();\t// 全効果音再生の停止\n\t\thTag.stopbgm\t= o=> this.#stopbgm(o);\t\t// BGM 演奏の停止\n\t\thTag.stopse\t\t= o=> this.#stopse(o);\t\t// 効果音再生の停止\n\t\thTag.wb\t\t\t= o=> this.#wb(o);\t\t\t// BGM フェードの終了待ち\n\t\thTag.wf\t\t\t= o=> this.#wf(o);\t\t\t// 効果音フェードの終了待ち\n\t\thTag.stopfadese\t= o=> this.#stopfadese(o);\t// 音声フェードの停止\n\t\thTag.wl\t\t\t= o=> this.#wl(o);\t\t\t// BGM 再生の終了待ち\n\t\thTag.ws\t\t\t= o=> this.#ws(o);\t\t\t// 効果音再生の終了待ち\n\t\thTag.xchgbuf\t= o=> this.#xchgbuf(o);\t\t// 再生トラックの交換\n\n\t\tval.setVal_Nochk('save', 'const.sn.loopPlaying', '{}');\n\n\t\tval.setVal_Nochk('tmp', 'const.sn.sound.codecs', JSON.stringify(utils.supported));\n\n\t\tSndBuf.init(cfg, val, main, sys, this.#hSndBuf);\n\t\tsound.disableAutoPause = true;\n\t}\n\n\t#evtMng\t: IEvtMng;\n\tsetEvtMng(evtMng: IEvtMng) {this.#evtMng = evtMng; SndBuf.setEvtMng(evtMng)}\n\tsetNoticeChgVolume(setGlbVol: T_NoticeChgVolume, setMovVol: T_NoticeChgVolume) {\n\t\tthis.val.defValTrg('sys:sn.sound.global_volume', (_, val)=> setGlbVol(sound.volumeAll = Number(val)));\n\t\tthis.val.defValTrg('sys:sn.sound.movie_volume', (_, val)=> setMovVol(Number(val)));\n\n\t\t// 起動時初期値セット\n\t\tthis.val.setVal_Nochk('sys', 'sn.sound.global_volume', <number>this.val.getVal('sys:sn.sound.global_volume', 1));\n\t\tthis.val.setVal_Nochk('sys', 'sn.sound.movie_volume', <number>this.val.getVal('sys:sn.sound.movie_volume', 1));\n\t}\n\n\t//MARK: 音量設定(独自拡張)\n\t#volume(hArg: TArg) {\n\t\tconst {buf = BUF_SE} = hArg;\n\t\tconst vnV = 'const.sn.sound.'+ buf +'.volume';\n\t\tconst arg_vol = this.#getVol(hArg, 1);\n\t\tif (Number(this.val.getVal('sys:'+ vnV)) === arg_vol) return false;\n\n\t\tthis.val.setVal_Nochk('sys', vnV, arg_vol)\t// 基準音量(sys:)\n\t\tthis.val.flush();\t// fadese()内で必ずしも呼ばれないので\n\n\t\t// 再生中音声の一時的音量も変更\n\t\thArg.time = 0;\n\t\thArg.volume = Number(this.val.getVal('save:'+ vnV));\t// 目標音量(save:)\n\t\treturn this.#fadese(hArg);\n\t}\n\t#getVol(hArg: TArg, def: number) {\n\t\tconst vol = argChk_Num(hArg, 'volume', def);\n\t\tif (vol < 0) return 0;\n\t\tif (vol > 1) return 1;\n\t\treturn vol;\n\t}\n\n\t//MARK: BGM/効果音のフェードアウト(loadから使うのでマクロ化禁止)\n\t#fadeoutbgm(hArg: TArg) {hArg.volume = 0; return this.#fadebgm(hArg)}\n\t//MARK: 効果音のフェードアウト(loadから使うのでマクロ化禁止)\n\t#fadeoutse(hArg: TArg) {hArg.volume = 0; return this.#fadese(hArg)}\n\t//MARK: BGMのフェード(loadから使うのでマクロ化禁止)\n\t#fadebgm(hArg: TArg) {hArg.buf = BUF_BGM; return this.#fadese(hArg)}\n\t//MARK: 効果音のフェード\n\t#fadese(hArg: TArg) {\n\t\tconst {buf = BUF_SE} = hArg;\n\t\tthis.#stopfadese(hArg);\n\t\tthis.#hSndBuf[buf]?.fade(hArg);\n\n\t\treturn false;\n\t}\n\n\t//MARK: BGM の演奏\n\t#playbgm(hArg: TArg) {\n\t\thArg.buf = BUF_BGM;\n\t\thArg.canskip = false;\n\t\targChk_Boolean(hArg, 'loop', true);\n\t\treturn this.#playse(hArg);\n\t}\n\n\t//MARK: 効果音の再生\n\t#playse(hArg: TArg) {\n\t\tconst {buf = BUF_SE, fn} = hArg;\n\t\tthis.#stopse({buf});\n\t\tif (! fn) throw `fnは必須です buf:${buf}`;\n\n\t\t// isSkipping()は此処のみとする。タイミングによって変わる\n\t\tif (argChk_Boolean(hArg, 'canskip', true) && this.#evtMng.isSkipping) return false;\n\n\t\tconst sb = this.#hSndBuf[buf] = new SndBuf(hArg, buf, fn);\n\t\treturn sb.needLoad;\n\t}\n\n\tclearCache() {sound.removeAll()}\n\n\t//MARK: 全効果音再生の停止\n\t#stop_allse() {\n\t\tfor (const buf of Object.keys(this.#hSndBuf)) this.#stopse({buf});\n\t\tthis.#hSndBuf = {};\n\n\t\tsound.stopAll();\t// 念のため\n\n\t\treturn false;\n\t}\n\t//MARK: BGM 演奏の停止(loadから使うのでマクロ化禁止)\n\t#stopbgm(hArg: TArg) {hArg.buf = BUF_BGM; return this.#stopse(hArg)}\n\t//MARK: 効果音再生の停止\n\t#stopse(hArg: TArg) {\n\t\tconst {buf = BUF_SE} = hArg;\n\t\tthis.#hSndBuf[buf]?.stopse(hArg);\n\n\t\treturn false;\n\t}\n\n\t//MARK: BGM フェードの終了待ち\n\t#wb(hArg: TArg) {hArg.buf = BUF_BGM; return this.#wf(hArg)}\n\n\t//MARK: 効果音フェードの終了待ち\n\t#wf(hArg: TArg) {\n\t\tconst {buf = BUF_SE} = hArg;\n\t\treturn this.#hSndBuf[buf]?.wf(hArg) ?? false;\n\t}\n\n\t//MARK: 音声フェードの停止\n\t#stopfadese(hArg: TArg) {\n\t\tconst {buf = BUF_SE} = hArg;\n\t\tthis.#hSndBuf[buf]?.stopfadese(hArg);\n\n\t\treturn false;\n\t}\n\n\t//MARK: BGM 再生の終了待ち\n\t#wl(hArg: TArg) {hArg.buf = BUF_BGM; return this.#ws(hArg)}\n\t//MARK: 効果音再生の終了待ち\n\t#ws(hArg: TArg) {\n\t\tconst {buf = BUF_SE} = hArg;\n\t\treturn this.#hSndBuf[buf]?.ws(hArg) ?? false;\n\t}\n\n\t//MARK: 再生トラックの交換\n\t#xchgbuf(hArg: TArg) {\n\t\tconst {buf: buf1 = BUF_SE, buf2 = BUF_SE} = hArg;\n\t\tif (buf1 === buf2) return false;\n\n\t\tconst a = this.#hSndBuf[buf1];\t// 分割代入の変数交換だと noUncheckedIndexedAccess エラーになるので\n\t\tconst b = this.#hSndBuf[buf2];\n\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\tif (a) this.#hSndBuf[buf2] = a; else delete this.#hSndBuf[buf2];\n\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\tif (b) this.#hSndBuf[buf1] = b; else delete this.#hSndBuf[buf1];\n\n\t\tSndBuf.xchgbuf(hArg);\n\n\t\treturn false;\n\t}\n\n\t//MARK: しおりの読込(BGM状態復元)\n\tplayLoopFromSaveObj(all_stop_and_play: boolean): Promise<void>[] {\n\t\tconst lp = String(this.val.getVal('save:const.sn.loopPlaying', '{}'));\n\t\tif (lp === '{}') {this.#stop_allse(); this.clearCache(); return []}\n/*\n\t\t\t\t\t(Now)#hSndBuf\n\t\t\t\t\tstop\tplay\n\thSaveLP\tstop\t-\t\tstop\t\t--[1]\n\t(to)\tplay\tplay\tstop/play\t--[2]\n\t\t\teq play\tplay\t-\t\t\t--[2]\n*/\n\t\tconst hSaveLP = <{[buf: string]: string}>JSON.parse(lp);\n\t\tif (all_stop_and_play) {this.#stop_allse(); this.clearCache()}\n\t\telse for (const [buf, sb] of Object.entries(this.#hSndBuf)) {\n\t\t\t// [1] #hSndBuf(再生中)だが hSaveLP(再生予定) にない buf -> stop\n\t\t\tif (! (buf in hSaveLP)) sb.stopse({buf});\n\t\t}\n\n\t\t// [2] hSaveLP(再生予定)を再生。だが#hSndBuf(再生中)の状況で処理変更\n\t\treturn Object.entries(hSaveLP).map(([buf, fn])=> new Promise(re=> {\n\t\t\tconst sb = this.#hSndBuf[buf]\n\t\t\tif (! all_stop_and_play && sb) {\n\t\t\t\tif (sb.fn === fn) {re(); return}\n\t\t\t\t//sb.stopse({buf});\t// 再生中 fn !== 再生予定 fn なら stop\n\t\t\t\t\t// #playbgm()、#playse() 内で stop するので省略\n\t\t\t}\n\n\t\t\tconst vm = 'save:const.sn.sound.'+ buf +'.';\n\t\t\tconst hArg = {\n\t\t\t\tfn,\n\t\t\t\tbuf,\n\t\t\t\tjoin\t: false,\n\t\t\t\tloop\t: true,\n\t\t\t\tvolume\t: Number(this.val.getVal(vm +'volume')),\n\t\t\t\tstart_ms: Number(this.val.getVal(vm +'start_ms')),\n\t\t\t\tend_ms\t: Number(this.val.getVal(vm +'end_ms')),\n\t\t\t\tret_ms\t: Number(this.val.getVal(vm +'ret_ms')),\n\t\t\t\tfnc\t\t: re,\t// loaded\n\t\t\t};\n\t\t\tif (hArg.buf === BUF_BGM) this.#playbgm(hArg);\n\t\t\telse this.#playse(hArg);\n\t\t}));\n\t}\n\n\tdestroy() {this.#stop_allse(); this.clearCache()}\n\n}\n"],"names":["SoundMng","cfg","hTag","val","main","sys","o","#volume","#fadebgm","#fadeoutbgm","#fadeoutse","#fadese","#playbgm","#playse","#stop_allse","#stopbgm","#stopse","#wb","#wf","#stopfadese","#wl","#ws","#xchgbuf","utils","SndBuf","#hSndBuf","sound","#evtMng","evtMng","setGlbVol","setMovVol","_","hArg","buf","BUF_SE","vnV","arg_vol","#getVol","def","vol","argChk_Num","BUF_BGM","argChk_Boolean","fn","buf1","buf2","a","b","all_stop_and_play","lp","hSaveLP","sb","re","vm"],"mappings":"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"}
1
+ {"version":3,"file":"SoundMng.js","names":["#hSndBuf","val: T_Variable","#volume","#fadebgm","#fadeoutbgm","#fadeoutse","#fadese","#playbgm","#playse","#stop_allse","#stopbgm","#stopse","#wb","#wf","#wl","#ws","#xchgbuf","codecs: {[ext: string]: boolean}","#getSndBuf","#evtMng","#getVol","#initVol"],"sources":["../src/sn/SoundMng.ts"],"sourcesContent":["/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2018-2025 Famibee (famibee.blog38.fc2.com)\n\n\tThis software is released under the MIT License.\n\thttp://opensource.org/licenses/mit-license.php\n** ***** END LICENSE BLOCK ***** */\n\nimport {type IEvtMng, argChk_Boolean, argChk_Num} from './CmnLib';\nimport type {T_HTag, TArg} from './Grammar';\nimport type {T_Variable, T_Main, T_NoticeChgVolume} from './CmnInterface';\nimport type {Config} from './Config';\nimport type {SysBase} from './SysBase';\nimport {BUF_BGM, BUF_SE, SndBuf, xchgbuf} from './SndBuf';\n\nimport {Howler} from 'howler';\n\n\nexport type HSndBuf = {[buf: string]: SndBuf}\n\n\nexport class SoundMng {\n\t#hSndBuf\t: HSndBuf\t= {};\n\t#getSndBuf(buf: string) {return this.#hSndBuf[buf]}\n\n\tconstructor(cfg: Config, hTag: T_HTag, private readonly val: T_Variable, main: T_Main, sys: SysBase) {\n\t\thTag.volume\t\t= o=> this.#volume(o);\t\t// 音量設定(独自拡張)\n\t\thTag.fadebgm\t= o=> this.#fadebgm(o);\t\t// BGMのフェード\n\t\thTag.fadeoutbgm\t= o=> this.#fadeoutbgm(o);\t// BGMのフェードアウト\n\t\thTag.fadeoutse\t= o=> this.#fadeoutse(o);\t// 効果音のフェードアウト\n\t\thTag.fadese\t\t= o=> this.#fadese(o);\t\t// 効果音のフェード\n\t\thTag.playbgm\t= o=> this.#playbgm(o);\t\t// BGM の演奏\n\t\thTag.playse\t\t= o=> this.#playse(o);\t\t// 効果音の再生\n\t\thTag.stop_allse\t= ()=> this.#stop_allse();\t// 全効果音再生の停止\n\t\thTag.stopbgm\t= o=> this.#stopbgm(o);\t\t// BGM 演奏の停止\n\t\thTag.stopse\t\t= o=> this.#stopse(o);\t\t// 効果音再生の停止\n\t\thTag.wb\t\t\t= o=> this.#wb(o);\t\t\t// BGM フェードの終了待ち\n\t\thTag.wf\t\t\t= o=> this.#wf(o);\t\t\t// 効果音フェードの終了待ち\n\t\thTag.stopfadese\t= ()=> false;\t\t\t\t// 音声フェードの停止(廃止)\n\t\thTag.wl\t\t\t= o=> this.#wl(o);\t\t\t// BGM 再生の終了待ち\n\t\thTag.ws\t\t\t= o=> this.#ws(o);\t\t\t// 効果音再生の終了待ち\n\t\thTag.xchgbuf\t= o=> this.#xchgbuf(o);\t\t// 再生トラックの交換\n\n\t\tval.setVal_Nochk('save', 'const.sn.loopPlaying', '{}');\n\n\t\tconst codecs: {[ext: string]: boolean} = {};\n\t\tfor (const ext of 'aac,caf,dolby,flac,m4a,m4b,mp3,mp4,mpeg,oga,ogg,opus,wav,weba,webm'.split(',')) codecs[ext] = Howler.codecs(ext);\n\t\tval.setVal_Nochk('tmp', 'const.sn.sound.codecs', JSON.stringify(codecs));\n\t\t// - PixiJS Sound\n\t\t// aiff,caf,mid,mp3,mpeg,oga,ogg,opus,wav,wma\n\t\t// - Howl\n\t\t// aac,caf,dolby,flac,m4a,m4b,mp3,mp4,mpeg,oga,ogg,opus,wav,weba,webm\n\n\t\tSndBuf.init(cfg, val, main, sys, buf=> this.#getSndBuf(buf));\n\t}\n\n\t#evtMng\t: IEvtMng;\n\tsetEvtMng(evtMng: IEvtMng) {this.#evtMng = evtMng; SndBuf.setEvtMng(evtMng)}\n\tsetNoticeChgVolume(setGlbVol: T_NoticeChgVolume, setMovVol: T_NoticeChgVolume) {\n\t\tthis.val.defValTrg('sys:sn.sound.global_volume', (_, val)=> {\n\t\t\tconst v = Number(val);\n\t\t\tHowler.volume(v);\n\t\t\tsetGlbVol(v);\n\t\t});\n\t\tthis.val.defValTrg('sys:sn.sound.movie_volume', (_, val)=> setMovVol(Number(val)));\n\n\t\t// 起動時初期値セット\n\t\tthis.val.setVal_Nochk('sys', 'sn.sound.global_volume', <number>this.val.getVal('sys:sn.sound.global_volume', 1));\n\t\tthis.val.setVal_Nochk('sys', 'sn.sound.movie_volume', <number>this.val.getVal('sys:sn.sound.movie_volume', 1));\n\t}\n\n\t//MARK: 音量設定(独自拡張)\n\t#volume(hArg: TArg) {\n\t\tconst {buf = BUF_SE} = hArg;\n\t\tconst vnV = 'const.sn.sound.'+ buf +'.volume';\n\t\tconst arg_vol = this.#getVol(hArg, 1);\n\t\tif (Number(this.val.getVal('sys:'+ vnV)) === arg_vol) return false;\n\n\t\tthis.val.setVal_Nochk('sys', vnV, arg_vol)\t// 基準音量(sys:)\n\t\tthis.val.flush();\t// fadese()内で必ずしも呼ばれないので\n\n\t\t// 再生中音声の一時的音量も変更\n\t\thArg.time = 0;\n\t\thArg.volume = Number(this.val.getVal('save:'+ vnV));\t// 目標音量(save:)\n\t\treturn this.#fadese(hArg);\n\t}\n\t#getVol(hArg: TArg, def: number) {\n\t\tconst vol = argChk_Num(hArg, 'volume', def);\n\t\tif (vol < 0) return 0;\n\t\tif (vol > 1) return 1;\n\t\treturn vol;\n\t}\n\n\t//MARK: BGM/効果音のフェードアウト(loadから使うのでマクロ化禁止)\n\t#fadeoutbgm(hArg: TArg) {hArg.volume = 0; return this.#fadebgm(hArg)}\n\t//MARK: 効果音のフェードアウト(loadから使うのでマクロ化禁止)\n\t#fadeoutse(hArg: TArg) {hArg.volume = 0; return this.#fadese(hArg)}\n\t//MARK: BGMのフェード(loadから使うのでマクロ化禁止)\n\t#fadebgm(hArg: TArg) {hArg.buf = BUF_BGM; return this.#fadese(hArg)}\n\t//MARK: 効果音のフェード\n\t#fadese(hArg: TArg) {\n\t\tconst {buf = BUF_SE} = hArg;\n\t\tthis.#hSndBuf[buf]?.fade(hArg);\n\n\t\treturn false;\n\t}\n\n\t//MARK: BGM の演奏\n\t#playbgm(hArg: TArg) {\n\t\thArg.buf = BUF_BGM;\n\t\thArg.canskip = false;\n\t\targChk_Boolean(hArg, 'loop', true);\n\t\treturn this.#playse(hArg);\n\t}\n\n\t//MARK: 効果音の再生\n\t#playse(hArg: TArg) {\n\t\tconst {buf = BUF_SE} = hArg;\n\t\tthis.#stopse({buf});\n\n\t\t// isSkipping()は此処のみとする。タイミングによって変わる\n\t\tif (argChk_Boolean(hArg, 'canskip', true) && this.#evtMng.isSkipping) return false;\n\n\t\tthis.#initVol();\n\n\t\tconst join = argChk_Boolean(hArg, 'join', true);\n\t\t\t// an時代・瀬戸愛羅さんより https://famibee.blog.fc2.com/blog-entry-106.html\n\t\t\t// デフォルトでjoin=trueの方が初心者に優しい\n\t\tthis.#hSndBuf[buf] = SndBuf.generate(hArg, buf, join);\n\n\t\treturn join;\n\t}\n\t#initVol = ()=> {\n\t\tHowler.volume(Number(this.val.getVal('sys:sn.sound.global_volume', 1)));\n\t\tthis.#initVol = ()=> { /* empty */ };\n\t};\n\n\t//MARK: 全効果音再生の停止\n\t#stop_allse() {\n\t\tfor (const buf of Object.keys(this.#hSndBuf)) this.#stopse({buf});\n\t\tthis.#hSndBuf = {};\n\n\t\tHowler.unload();\n\n\t\treturn false;\n\t}\n\t//MARK: BGM 演奏の停止(loadから使うのでマクロ化禁止)\n\t#stopbgm(hArg: TArg) {hArg.buf = BUF_BGM; return this.#stopse(hArg)}\n\t//MARK: 効果音再生の停止\n\t#stopse(hArg: TArg) {\n\t\tconst {buf = BUF_SE} = hArg;\n\t\tthis.#hSndBuf[buf]?.stopse();\n\n\t\treturn false;\n\t}\n\n\t//MARK: BGM フェードの終了待ち\n\t#wb(hArg: TArg) {hArg.buf = BUF_BGM; return this.#wf(hArg)}\n\n\t//MARK: 効果音フェードの終了待ち\n\t#wf(hArg: TArg) {\n\t\tconst {buf = BUF_SE} = hArg;\n\t\treturn this.#hSndBuf[buf]?.wf(hArg) ?? false;\n\t}\n\n\t//MARK: BGM 再生の終了待ち\n\t#wl(hArg: TArg) {hArg.buf = BUF_BGM; return this.#ws(hArg)}\n\t//MARK: 効果音再生の終了待ち\n\t#ws(hArg: TArg) {\n\t\tconst {buf = BUF_SE} = hArg;\n\t\treturn this.#hSndBuf[buf]?.ws(hArg) ?? false;\n\t}\n\n\t//MARK: 再生トラックの交換\n\t#xchgbuf(hArg: TArg) {\n\t\tconst {buf: buf1 = BUF_SE, buf2 = BUF_SE} = hArg;\n\t\tif (buf1 === buf2) return false;\n\n\t\tconst a = this.#hSndBuf[buf1];\t// 分割代入の変数交換だと noUncheckedIndexedAccess エラーになるので\n\t\tconst b = this.#hSndBuf[buf2];\n\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\tif (a) this.#hSndBuf[buf2] = a; else delete this.#hSndBuf[buf2];\n\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\tif (b) this.#hSndBuf[buf1] = b; else delete this.#hSndBuf[buf1];\n\n\t\txchgbuf(hArg);\n\n\t\treturn false;\n\t}\n\n\t//MARK: しおりの読込(BGM状態復元)\n\tplayLoopFromSaveObj(all_stop_and_play: boolean): Promise<void>[] {\n\t\tconst lp = String(this.val.getVal('save:const.sn.loopPlaying', '{}'));\n\t\tif (lp === '{}') {this.#stop_allse(); return []}\n/*\n\t\t\t\t\t(Now)#hSndBuf\n\t\t\t\t\tstop\tplay\n\thSaveLP\tstop\t-\t\tstop\t\t--[1]\n\t(to)\tplay\tplay\tstop/play\t--[2]\n\t\t\teq play\tplay\t-\t\t\t--[2]\n*/\n\t\tconst hSaveLP = <{[buf: string]: string}>JSON.parse(lp);\n\t\tif (all_stop_and_play) this.#stop_allse();\n\t\telse for (const [buf, sb] of Object.entries(this.#hSndBuf)) {\n\t\t\t// [1] #hSndBuf(再生中)だが hSaveLP(再生予定) にない buf -> stop\n\t\t\tif (! (buf in hSaveLP)) sb.stopse();\n\t\t}\n\n\t\t// [2] hSaveLP(再生予定)を再生。だが#hSndBuf(再生中)の状況で処理変更\n\t\treturn Object.entries(hSaveLP).map(([buf, fn])=> new Promise(re=> {\n\t\t\tconst sb = this.#hSndBuf[buf]\n\t\t\tif (! all_stop_and_play && sb) {\n\t\t\t\tif (sb.fn === fn) {re(); return}\n\t\t\t\t//sb.stopse({buf});\t// 再生中 fn !== 再生予定 fn なら stop\n\t\t\t\t\t// #playbgm()、#playse() 内で stop するので省略\n\t\t\t}\n\n\t\t\tconst vm = 'save:const.sn.sound.'+ buf +'.';\n\t\t\tconst hArg = {\n\t\t\t\tfn,\n\t\t\t\tbuf,\n\t\t\t\tjoin\t: false,\n\t\t\t\tloop\t: true,\n\t\t\t\tvolume\t: Number(this.val.getVal(vm +'volume')),\n\t\t\t\tstart_ms: Number(this.val.getVal(vm +'start_ms')),\n\t\t\t\tend_ms\t: Number(this.val.getVal(vm +'end_ms')),\n\t\t\t\tret_ms\t: Number(this.val.getVal(vm +'ret_ms')),\n\t\t\t\tfnc\t\t: re,\t// loaded\n\t\t\t};\n\t\t\tif (hArg.buf === BUF_BGM) this.#playbgm(hArg);\n\t\t\telse this.#playse(hArg);\n\t\t}));\n\t}\n\n\tdestroy() {this.#stop_allse()}\n\n}\n"],"mappings":"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"}