fmode-ng 0.0.113 → 0.0.115

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 (275) hide show
  1. package/LICENSE.md +8 -0
  2. package/README.md +37 -37
  3. package/esm2022/fmode-ng.mjs +10 -5
  4. package/esm2022/lib/aigc/agent/fm-agent-task/fm-agent-task.component.mjs +8 -92
  5. package/esm2022/lib/aigc/agent/index.mjs +10 -3
  6. package/esm2022/lib/aigc/avatar/avatar.module.mjs +10 -45
  7. package/esm2022/lib/aigc/avatar/comp-avatar-particle/avatar.role.mjs +10 -2
  8. package/esm2022/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.mjs +10 -315
  9. package/esm2022/lib/aigc/avatar/comp-avatar-particle/index.mjs +10 -3
  10. package/esm2022/lib/aigc/avatar/comp-avatar-particle/role-points.class.mjs +10 -57
  11. package/esm2022/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.mjs +10 -98
  12. package/esm2022/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs +10 -107
  13. package/esm2022/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +10 -113
  14. package/esm2022/lib/aigc/avatar/index.mjs +10 -8
  15. package/esm2022/lib/aigc/avatar/interface-avatar-role.mjs +10 -2
  16. package/esm2022/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs +8 -164
  17. package/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs +10 -49
  18. package/esm2022/lib/aigc/chat/chat-header-area/index.mjs +10 -2
  19. package/esm2022/lib/aigc/chat/chat-list/chat-list.component.mjs +8 -155
  20. package/esm2022/lib/aigc/chat/chat-list/index.mjs +10 -2
  21. package/esm2022/lib/aigc/chat/chat-message-area/comp-message-area.component.mjs +10 -40
  22. package/esm2022/lib/aigc/chat/chat-message-area/index.mjs +10 -2
  23. package/esm2022/lib/aigc/chat/chat-message-card/comp-message-card.component.mjs +10 -140
  24. package/esm2022/lib/aigc/chat/chat-message-card/duration-str.pipe.mjs +10 -29
  25. package/esm2022/lib/aigc/chat/chat-message-card/index.mjs +10 -3
  26. package/esm2022/lib/aigc/chat/chat-modal-input/index.mjs +10 -3
  27. package/esm2022/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.mjs +8 -193
  28. package/esm2022/lib/aigc/chat/chat-modal-input/modal-input.component.mjs +10 -331
  29. package/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs +8 -249
  30. package/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs +10 -83
  31. package/esm2022/lib/aigc/chat/comp-role-prompt/index.mjs +10 -2
  32. package/esm2022/lib/aigc/chat/index.mjs +10 -8
  33. package/esm2022/lib/aigc/comp-markdown-preview/clipboard.service.mjs +10 -82
  34. package/esm2022/lib/aigc/comp-markdown-preview/markdown-parse.mjs +8 -367
  35. package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.component.mjs +10 -51
  36. package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.module.mjs +10 -24
  37. package/esm2022/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.mjs +10 -115
  38. package/esm2022/lib/aigc/index.mjs +10 -14
  39. package/esm2022/lib/aigc/service-fmai/fmai.service.mjs +10 -21
  40. package/esm2022/lib/aigc/service-fmai/service-chat/chat-class.mjs +10 -2
  41. package/esm2022/lib/aigc/service-fmai/service-chat/chat.service.mjs +8 -174
  42. package/esm2022/lib/aigc/service-fmai/service-chat/index.mjs +10 -7
  43. package/esm2022/lib/aigc/service-fmai/service-chat/mask-list.mjs +9 -194
  44. package/esm2022/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.mjs +10 -27
  45. package/esm2022/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.mjs +10 -27
  46. package/esm2022/lib/aigc/service-fmai/service-chat/utilnow.pipe.mjs +10 -68
  47. package/esm2022/lib/aigc/service-fmai/service-imagine/imagine-func.mjs +9 -162
  48. package/esm2022/lib/aigc/service-fmai/service-imagine/imagine-work.mjs +10 -68
  49. package/esm2022/lib/aigc/service-fmai/service-imagine/imagine.service.mjs +8 -313
  50. package/esm2022/lib/aigc/service-fmai/service-imagine/index.mjs +10 -4
  51. package/esm2022/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.mjs +10 -62
  52. package/esm2022/lib/aigc/story/fm-story-card/fm-story-card.component.mjs +10 -87
  53. package/esm2022/lib/aigc/story/fm-story-list/fm-story-list.component.mjs +10 -345
  54. package/esm2022/lib/aigc/story/fm-story-list/story-preview.mjs +10 -81
  55. package/esm2022/lib/aigc/story/fm-story-loader/fm-story-loader.component.mjs +10 -152
  56. package/esm2022/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.mjs +10 -42
  57. package/esm2022/lib/aigc/story/index.mjs +10 -6
  58. package/esm2022/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.mjs +10 -47
  59. package/esm2022/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.mjs +10 -95
  60. package/esm2022/lib/aigc/story/modal-chat-story/modal-chat-story.component.mjs +10 -253
  61. package/esm2022/lib/aigc/story/story.service.mjs +10 -35
  62. package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +10 -636
  63. package/esm2022/lib/aigc/voice/index.mjs +10 -7
  64. package/esm2022/lib/aigc/voice/lib/audio/audio.player.mjs +10 -55
  65. package/esm2022/lib/aigc/voice/lib/audio/audio.streamer.mjs +10 -2
  66. package/esm2022/lib/aigc/voice/lib/audio/streamer.microsoft.mjs +10 -96
  67. package/esm2022/lib/aigc/voice/lib/audio/streamer.pcm.mjs +8 -177
  68. package/esm2022/lib/aigc/voice/lib/pcm2wav.mjs +10 -38
  69. package/esm2022/lib/aigc/voice/lib/recorder/extension-waveview.mjs +10 -215
  70. package/esm2022/lib/aigc/voice/lib/resample.mjs +10 -34
  71. package/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs +10 -189
  72. package/esm2022/lib/aigc/voice/tts/index.mjs +10 -5
  73. package/esm2022/lib/aigc/voice/tts/int-tts-provider.mjs +10 -2
  74. package/esm2022/lib/aigc/voice/tts/provider-doubao.mjs +8 -346
  75. package/esm2022/lib/code/fm-codemirror/fm-codemirror.component.mjs +8 -342
  76. package/esm2022/lib/code/index.mjs +10 -2
  77. package/esm2022/lib/core/agent/chat/completion/fmode-completion.mjs +8 -430
  78. package/esm2022/lib/core/agent/chat/completion/index.mjs +10 -2
  79. package/esm2022/lib/core/agent/chat/completion/int-gpt-chat-options.mjs +10 -2
  80. package/esm2022/lib/core/agent/chat/fmode-chat.mjs +8 -617
  81. package/esm2022/lib/core/agent/chat/index.mjs +10 -4
  82. package/esm2022/lib/core/agent/chat/interface.mjs +10 -2
  83. package/esm2022/lib/core/agent/index.mjs +10 -6
  84. package/esm2022/lib/core/agent/prompt/agent.prompt.mjs +10 -133
  85. package/esm2022/lib/core/agent/prompt/index.mjs +10 -2
  86. package/esm2022/lib/core/agent/prompt/prompt-util.mjs +10 -16
  87. package/esm2022/lib/core/agent/story/agent.story.mjs +10 -64
  88. package/esm2022/lib/core/agent/story/index.mjs +10 -2
  89. package/esm2022/lib/core/agent/task/agent.task.mjs +10 -90
  90. package/esm2022/lib/core/agent/task/index.mjs +10 -2
  91. package/esm2022/lib/core/agent/waiting/index.mjs +10 -3
  92. package/esm2022/lib/core/agent/waiting/loading/loading.ctrl.mjs +10 -279
  93. package/esm2022/lib/core/agent/waiting/tips/tips.ctrl.mjs +8 -190
  94. package/esm2022/lib/core/index.mjs +10 -4
  95. package/esm2022/lib/core/parse/datatype/acl.mjs +10 -57
  96. package/esm2022/lib/core/parse/datatype/file.mjs +10 -69
  97. package/esm2022/lib/core/parse/datatype/geopoint.mjs +10 -57
  98. package/esm2022/lib/core/parse/datatype/relation.mjs +10 -56
  99. package/esm2022/lib/core/parse/fmode.cloud.mjs +10 -0
  100. package/esm2022/lib/core/parse/fmode.object.mjs +10 -232
  101. package/esm2022/lib/core/parse/fmode.parse.mjs +10 -84
  102. package/esm2022/lib/core/parse/fmode.query.mjs +8 -500
  103. package/esm2022/lib/core/parse/fmode.user.mjs +10 -275
  104. package/esm2022/lib/core/parse/index.mjs +10 -5
  105. package/esm2022/lib/core/parse/types.mjs +10 -2
  106. package/esm2022/lib/core/voice/index.mjs +10 -3
  107. package/esm2022/lib/core/voice/tts/index.mjs +10 -2
  108. package/esm2022/lib/icon/filetype/audio.svg.mjs +10 -3
  109. package/esm2022/lib/icon/filetype/avatar.svg.mjs +10 -14
  110. package/esm2022/lib/icon/filetype/chat.svg.mjs +10 -3
  111. package/esm2022/lib/icon/filetype/docx.svg.mjs +10 -3
  112. package/esm2022/lib/icon/filetype/file.svg.mjs +10 -3
  113. package/esm2022/lib/icon/filetype/filetype.pipe.mjs +10 -57
  114. package/esm2022/lib/icon/filetype/index.mjs +10 -12
  115. package/esm2022/lib/icon/filetype/md.svg.mjs +10 -3
  116. package/esm2022/lib/icon/filetype/pdf.svg.mjs +10 -3
  117. package/esm2022/lib/icon/filetype/pptx.svg.mjs +10 -3
  118. package/esm2022/lib/icon/filetype/svgtoblob.mjs +10 -8
  119. package/esm2022/lib/icon/filetype/video.svg.mjs +10 -3
  120. package/esm2022/lib/icon/filetype/xlsx.svg.mjs +10 -3
  121. package/esm2022/lib/icon/index.mjs +10 -2
  122. package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.component.mjs +10 -209
  123. package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.module.mjs +10 -33
  124. package/esm2022/lib/map/index.mjs +10 -4
  125. package/esm2022/lib/map/map.module.mjs +10 -61
  126. package/esm2022/lib/map/page-loca-scatter/page-loca-scatter.component.mjs +10 -132
  127. package/esm2022/lib/map/page-map.start/page-map.start.component.mjs +8 -115
  128. package/esm2022/lib/map/page-plan-route/page-plan-route.component.mjs +8 -118
  129. package/esm2022/lib/nova-cloud/index.mjs +10 -3
  130. package/esm2022/lib/nova-cloud/ncloud-api-func.mjs +10 -91
  131. package/esm2022/lib/nova-cloud/nova-cloud.service.mjs +10 -53
  132. package/esm2022/lib/payment/index.mjs +10 -2
  133. package/esm2022/lib/payment/payment/payment.component.mjs +10 -543
  134. package/esm2022/lib/payment/payment.service.mjs +10 -202
  135. package/esm2022/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.mjs +10 -48
  136. package/esm2022/lib/person/comp-person-item/comp-person-item.component.mjs +10 -29
  137. package/esm2022/lib/person/comp-person-story/comp-person-story.component.mjs +10 -211
  138. package/esm2022/lib/person/edit-upload/edit-upload.component.mjs +8 -412
  139. package/esm2022/lib/person/edit-upload/edit-upload.module.mjs +10 -50
  140. package/esm2022/lib/person/index.mjs +10 -5
  141. package/esm2022/lib/person/modal-person-select/modal-person-select.component.mjs +10 -144
  142. package/esm2022/lib/person/modal-user-verify/secret-text.pipe.mjs +10 -41
  143. package/esm2022/lib/person/modal-user-verify/user-verify.component.mjs +10 -595
  144. package/esm2022/lib/person/person-detail/person-detail.component.mjs +10 -172
  145. package/esm2022/lib/person/person.service.mjs +8 -193
  146. package/esm2022/lib/platform/cross.service.mjs +10 -62
  147. package/esm2022/lib/platform/index.mjs +10 -2
  148. package/esm2022/lib/social/index.mjs +10 -2
  149. package/esm2022/lib/social/wechat/wechat-jssdk.service.mjs +8 -230
  150. package/esm2022/lib/storage/comp-hwobs-manager/hwobs-manager.component.mjs +10 -59
  151. package/esm2022/lib/storage/index.mjs +10 -5
  152. package/esm2022/lib/storage/service-hwobs/hwobs.service.mjs +8 -131
  153. package/esm2022/lib/storage/service-hwobs/index.mjs +10 -3
  154. package/esm2022/lib/storage/service-hwobs/typings/esdk-obs-browser.mjs +1 -1
  155. package/esm2022/lib/storage/service-upload/index.mjs +10 -2
  156. package/esm2022/lib/storage/service-upload/nova-upload.service.mjs +8 -513
  157. package/esm2022/lib/storage/service-upload/util-file-md5.mjs +10 -28
  158. package/esm2022/lib/storage/service-upload/util-file-metadata.mjs +10 -93
  159. package/esm2022/lib/storage/storage.module.mjs +10 -42
  160. package/esm2022/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.mjs +10 -72
  161. package/esm2022/lib/text/fm-article-editor/article.service.mjs +10 -237
  162. package/esm2022/lib/text/fm-article-editor/comp-upload-book-banners/comp-upload-book-banners.component.mjs +8 -72
  163. package/esm2022/lib/text/fm-article-editor/draft.service.mjs +10 -207
  164. package/esm2022/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.mjs +8 -227
  165. package/esm2022/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.mjs +10 -303
  166. package/esm2022/lib/text/fm-article-editor/fm-article-editor.component.mjs +8 -371
  167. package/esm2022/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.mjs +10 -94
  168. package/esm2022/lib/text/fm-article-editor/fm-article-outline-leftitem/fm-article-outline-leftitem.component.mjs +10 -36
  169. package/esm2022/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.mjs +10 -281
  170. package/esm2022/lib/text/fm-article-editor/fm-article-write-options/fm-article-write-options.component.mjs +10 -72
  171. package/esm2022/lib/text/fm-article-editor/outline-count.pipe.mjs +10 -22
  172. package/esm2022/lib/text/fm-article-editor/prompt/prompt-insertion-article.mjs +10 -169
  173. package/esm2022/lib/text/fm-article-editor/task-article-generation.mjs +10 -69
  174. package/esm2022/lib/text/fm-article-editor/tasks/task-article-draft-create.mjs +10 -65
  175. package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline-edit.mjs +10 -55
  176. package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline.mjs +10 -142
  177. package/esm2022/lib/text/fm-article-editor/tasks/task-article-preview.mjs +10 -35
  178. package/esm2022/lib/text/fm-article-editor/tasks/task-article-writing-options.mjs +10 -81
  179. package/esm2022/lib/text/fm-article-editor/tasks/task-document-select.mjs +10 -50
  180. package/esm2022/lib/text/fm-text-quill/fm-text-quill.component.mjs +10 -145
  181. package/esm2022/lib/text/index.mjs +10 -4
  182. package/esm2022/lib/user/account/account.service.mjs +10 -222
  183. package/esm2022/lib/user/captcha/captcha.component.mjs +10 -135
  184. package/esm2022/lib/user/comp-user-avatar/comp-user-avatar.component.mjs +10 -66
  185. package/esm2022/lib/user/index.mjs +10 -17
  186. package/esm2022/lib/user/login/auth.guard.mjs +10 -28
  187. package/esm2022/lib/user/login/auth.service.mjs +8 -433
  188. package/esm2022/lib/user/login/login.component.mjs +10 -916
  189. package/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs +10 -311
  190. package/esm2022/lib/user/profile/auth-profile.guard.mjs +10 -27
  191. package/esm2022/lib/user/profile/auth-profile.service.mjs +10 -122
  192. package/esm2022/lib/user/profile/profile-bind/profile-bind.component.mjs +10 -164
  193. package/esm2022/lib/user/profile/profile-bind/profile-confirm-modal.component.mjs +10 -79
  194. package/esm2022/lib/user/profile/profile.module.mjs +10 -54
  195. package/esm2022/lib/user/staff/index.mjs +10 -4
  196. package/esm2022/lib/user/staff/staff.guard.mjs +10 -26
  197. package/esm2022/lib/user/staff/staff.module.mjs +10 -18
  198. package/esm2022/lib/user/staff/staff.service.mjs +10 -85
  199. package/esm2022/lib/user/user-name.pipe.mjs +10 -29
  200. package/esm2022/lib/user/user.module.mjs +10 -102
  201. package/esm2022/lib/video/fm-video/fm-video.component.mjs +10 -67
  202. package/esm2022/lib/video/index.mjs +10 -2
  203. package/esm2022/public-api.mjs +10 -21
  204. package/fesm2022/fmode-ng.mjs +7 -19788
  205. package/fesm2022/fmode-ng.mjs.map +1 -1
  206. package/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.d.ts +2 -2
  207. package/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.d.ts +2 -2
  208. package/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.d.ts +2 -2
  209. package/lib/aigc/chat/chat-list/chat-list.component.d.ts +3 -2
  210. package/lib/aigc/chat/chat-message-card/comp-message-card.component.d.ts +3 -3
  211. package/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.d.ts +2 -2
  212. package/lib/aigc/chat/chat-modal-input/modal-input.component.d.ts +3 -3
  213. package/lib/aigc/service-fmai/service-imagine/imagine-func.d.ts +3 -3
  214. package/lib/aigc/service-fmai/service-imagine/imagine-work.d.ts +4 -4
  215. package/lib/aigc/service-fmai/service-imagine/imagine.service.d.ts +6 -6
  216. package/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.d.ts +2 -2
  217. package/lib/aigc/story/fm-story-card/fm-story-card.component.d.ts +2 -1
  218. package/lib/aigc/story/fm-story-list/fm-story-list.component.d.ts +6 -6
  219. package/lib/aigc/story/fm-story-list/story-preview.d.ts +4 -4
  220. package/lib/aigc/story/fm-story-loader/fm-story-loader.component.d.ts +3 -3
  221. package/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.d.ts +2 -2
  222. package/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.d.ts +3 -2
  223. package/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.d.ts +3 -2
  224. package/lib/aigc/story/modal-chat-story/modal-chat-story.component.d.ts +6 -6
  225. package/lib/aigc/story/story.service.d.ts +3 -2
  226. package/lib/aigc/voice/tts/fmode-tts-class.d.ts +2 -2
  227. package/lib/core/agent/chat/fmode-chat.d.ts +11 -11
  228. package/lib/core/agent/story/agent.story.d.ts +8 -8
  229. package/lib/core/parse/datatype/geopoint.d.ts +5 -1
  230. package/lib/core/parse/fmode.cloud.d.ts +32 -0
  231. package/lib/core/parse/fmode.object.d.ts +2 -2
  232. package/lib/core/parse/fmode.parse.d.ts +15 -9
  233. package/lib/core/parse/fmode.query.d.ts +41 -2
  234. package/lib/core/parse/fmode.user.d.ts +1 -0
  235. package/lib/core/parse/index.d.ts +1 -0
  236. package/lib/core/parse/types.d.ts +2 -0
  237. package/lib/map/comp-poi-picker/comp-poi-picker.component.d.ts +5 -5
  238. package/lib/payment/payment/payment.component.d.ts +3 -3
  239. package/lib/payment/payment.service.d.ts +4 -4
  240. package/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.d.ts +2 -1
  241. package/lib/person/comp-person-item/comp-person-item.component.d.ts +2 -1
  242. package/lib/person/comp-person-story/comp-person-story.component.d.ts +13 -13
  243. package/lib/person/edit-upload/edit-upload.component.d.ts +1 -1
  244. package/lib/person/modal-person-select/modal-person-select.component.d.ts +5 -5
  245. package/lib/person/modal-user-verify/user-verify.component.d.ts +5 -5
  246. package/lib/person/person-detail/person-detail.component.d.ts +4 -4
  247. package/lib/person/person.service.d.ts +7 -7
  248. package/lib/storage/service-hwobs/hwobs.service.d.ts +4 -5
  249. package/lib/storage/service-upload/nova-upload.service.d.ts +5 -5
  250. package/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.d.ts +2 -1
  251. package/lib/text/fm-article-editor/article.service.d.ts +12 -12
  252. package/lib/text/fm-article-editor/draft.service.d.ts +5 -5
  253. package/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.d.ts +3 -2
  254. package/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.d.ts +16 -17
  255. package/lib/text/fm-article-editor/fm-article-editor.component.d.ts +3 -3
  256. package/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.d.ts +11 -10
  257. package/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.d.ts +2 -2
  258. package/lib/text/fm-article-editor/prompt/prompt-insertion-article.d.ts +3 -3
  259. package/lib/text/fm-article-editor/task-article-generation.d.ts +5 -4
  260. package/lib/text/fm-article-editor/tasks/task-article-draft-create.d.ts +3 -3
  261. package/lib/text/fm-article-editor/tasks/task-article-outline-edit.d.ts +3 -3
  262. package/lib/text/fm-article-editor/tasks/task-article-outline.d.ts +3 -3
  263. package/lib/text/fm-article-editor/tasks/task-article-preview.d.ts +2 -1
  264. package/lib/text/fm-article-editor/tasks/task-article-writing-options.d.ts +3 -3
  265. package/lib/text/fm-article-editor/tasks/task-document-select.d.ts +3 -3
  266. package/lib/user/account/account.service.d.ts +2 -2
  267. package/lib/user/comp-user-avatar/comp-user-avatar.component.d.ts +2 -2
  268. package/lib/user/login/auth.service.d.ts +5 -5
  269. package/lib/user/login/login.component.d.ts +3 -3
  270. package/lib/user/profile/auth-profile.service.d.ts +8 -8
  271. package/lib/user/profile/profile-bind/profile-bind.component.d.ts +7 -7
  272. package/lib/user/profile/profile-bind/profile-confirm-modal.component.d.ts +2 -2
  273. package/lib/user/staff/staff.service.d.ts +3 -3
  274. package/lib/user/user-name.pipe.d.ts +2 -2
  275. package/package.json +12 -18
@@ -1,7 +1,10 @@
1
- export * from "./fmode-voice.service";
2
- export * from "./lib/audio/audio.player";
3
- export * from "./lib/audio/streamer.microsoft";
4
- // export * from "./class-asr"
5
- export * from "./tts";
6
- export * from "./lib/audio/streamer.microsoft";
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2Mvdm9pY2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQTtBQUVyQyxjQUFjLDBCQUEwQixDQUFBO0FBQ3hDLGNBQWMsZ0NBQWdDLENBQUE7QUFFOUMsOEJBQThCO0FBQzlCLGNBQWMsT0FBTyxDQUFBO0FBQ3JCLGNBQWMsZ0NBQWdDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9mbW9kZS12b2ljZS5zZXJ2aWNlXCJcclxuXHJcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9hdWRpby9hdWRpby5wbGF5ZXJcIlxyXG5leHBvcnQgKiBmcm9tIFwiLi9saWIvYXVkaW8vc3RyZWFtZXIubWljcm9zb2Z0XCJcclxuXHJcbi8vIGV4cG9ydCAqIGZyb20gXCIuL2NsYXNzLWFzclwiXHJcbmV4cG9ydCAqIGZyb20gXCIuL3R0c1wiXHJcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9hdWRpby9zdHJlYW1lci5taWNyb3NvZnRcIiJdfQ==
1
+
2
+ /**
3
+ * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
+ * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
+ * 保留所有权利 All Rights Reserved.
6
+ * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/aigc/voice/index.mjs
7
+ */
8
+ export*from"./fmode-voice.service";export*from"./lib/audio/audio.player";export*from"./lib/audio/streamer.microsoft";export*from"./tts";export*from"./lib/audio/streamer.microsoft";
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL3ZvaWNlL2luZGV4Lm1qcw==`
10
+
@@ -1,55 +1,10 @@
1
- // audio-player.ts
2
- export class AudioPlayer {
3
- static { this.instance = null; }
4
- // 私有构造函数,防止外部实例化
5
- constructor() {
6
- this.audio = new Audio();
7
- }
8
- // 获取单例实例的方法
9
- static getInstance() {
10
- if (!AudioPlayer.instance) {
11
- AudioPlayer.instance = new AudioPlayer();
12
- }
13
- return AudioPlayer.instance;
14
- }
15
- setAudioEvent(event, func) {
16
- this.audio[event] = func;
17
- }
18
- get duration() {
19
- return this.audio.duration;
20
- }
21
- get src() {
22
- return this.audio.src;
23
- }
24
- stop() {
25
- this.audio.pause();
26
- }
27
- async play(src) {
28
- return new Promise((resolve, reject) => {
29
- // 如果当前播放的音频与要播放的音频不同,则停止当前音频
30
- if (this.audio.src !== src) {
31
- this.audio.src = src;
32
- this.audio.play().then(() => {
33
- resolve();
34
- }).catch(() => {
35
- reject();
36
- });
37
- }
38
- else {
39
- // 如果点击的是正在播放的音频,则暂停
40
- if (!this.audio.paused) {
41
- this.audio.pause();
42
- }
43
- else {
44
- this.audio.play().then(() => {
45
- resolve();
46
- }).catch(() => {
47
- reject();
48
- });
49
- }
50
- }
51
- // reject()
52
- });
53
- }
54
- }
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW8ucGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL3ZvaWNlL2xpYi9hdWRpby9hdWRpby5wbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCO0FBQ2xCLE1BQU0sT0FBTyxXQUFXO2FBQ0wsYUFBUSxHQUF1QixJQUFJLENBQUM7SUFHbkQsaUJBQWlCO0lBQ2pCO1FBQ0ksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxZQUFZO0lBQ0wsTUFBTSxDQUFDLFdBQVc7UUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QixXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDN0MsQ0FBQztRQUNELE9BQU8sV0FBVyxDQUFDLFFBQVEsQ0FBQztJQUNoQyxDQUFDO0lBRU0sYUFBYSxDQUFDLEtBQUssRUFBQyxJQUFJO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUMsSUFBSSxDQUFBO0lBQzFCLENBQUM7SUFDRCxJQUFXLFFBQVE7UUFDZixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQy9CLENBQUM7SUFDRCxJQUFXLEdBQUc7UUFDVixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQzFCLENBQUM7SUFDTSxJQUFJO1FBQ1AsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBQ00sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFXO1FBQ3pCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUMsTUFBTSxFQUFDLEVBQUU7WUFFakMsNkJBQTZCO1lBQzdCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztnQkFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRSxFQUFFO29CQUN2QixPQUFPLEVBQUUsQ0FBQztnQkFDZCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRSxFQUFFO29CQUNULE1BQU0sRUFBRSxDQUFDO2dCQUNiLENBQUMsQ0FBQyxDQUFBO1lBQ04sQ0FBQztpQkFBTSxDQUFDO2dCQUNKLG9CQUFvQjtnQkFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3ZCLENBQUM7cUJBQU0sQ0FBQztvQkFDSixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFFLEVBQUU7d0JBQ3ZCLE9BQU8sRUFBRSxDQUFDO29CQUNkLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFFLEVBQUU7d0JBQ1QsTUFBTSxFQUFFLENBQUM7b0JBQ2IsQ0FBQyxDQUFDLENBQUE7Z0JBQ04sQ0FBQztZQUNMLENBQUM7WUFDRCxXQUFXO1FBQ2YsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gYXVkaW8tcGxheWVyLnRzXHJcbmV4cG9ydCBjbGFzcyBBdWRpb1BsYXllciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogQXVkaW9QbGF5ZXIgfCBudWxsID0gbnVsbDtcclxuICAgIHByaXZhdGUgYXVkaW86IEhUTUxBdWRpb0VsZW1lbnQ7XHJcblxyXG4gICAgLy8g56eB5pyJ5p6E6YCg5Ye95pWw77yM6Ziy5q2i5aSW6YOo5a6e5L6L5YyWXHJcbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuYXVkaW8gPSBuZXcgQXVkaW8oKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDojrflj5bljZXkvovlrp7kvovnmoTmlrnms5VcclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0SW5zdGFuY2UoKTogQXVkaW9QbGF5ZXIge1xyXG4gICAgICAgIGlmICghQXVkaW9QbGF5ZXIuaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgQXVkaW9QbGF5ZXIuaW5zdGFuY2UgPSBuZXcgQXVkaW9QbGF5ZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEF1ZGlvUGxheWVyLmluc3RhbmNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRBdWRpb0V2ZW50KGV2ZW50LGZ1bmMpe1xyXG4gICAgICAgIHRoaXMuYXVkaW9bZXZlbnRdPWZ1bmNcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgZHVyYXRpb24oKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5hdWRpby5kdXJhdGlvbjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgc3JjKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXVkaW8uc3JjO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0b3AoKXtcclxuICAgICAgICB0aGlzLmF1ZGlvLnBhdXNlKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgYXN5bmMgcGxheShzcmM6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSxyZWplY3QpPT57XHJcblxyXG4gICAgICAgICAgICAvLyDlpoLmnpzlvZPliY3mkq3mlL7nmoTpn7PpopHkuI7opoHmkq3mlL7nmoTpn7PpopHkuI3lkIzvvIzliJnlgZzmraLlvZPliY3pn7PpopFcclxuICAgICAgICAgICAgaWYgKHRoaXMuYXVkaW8uc3JjICE9PSBzcmMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXVkaW8uc3JjID0gc3JjO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdWRpby5wbGF5KCkudGhlbigoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKCgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8g5aaC5p6c54K55Ye755qE5piv5q2j5Zyo5pKt5pS+55qE6Z+z6aKR77yM5YiZ5pqC5YGcXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYXVkaW8ucGF1c2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdWRpby5wYXVzZSgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1ZGlvLnBsYXkoKS50aGVuKCgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHJlamVjdCgpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxufSJdfQ==
1
+
2
+ /**
3
+ * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
+ * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
+ * 保留所有权利 All Rights Reserved.
6
+ * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/aigc/voice/lib/audio/audio.player.mjs
7
+ */
8
+ export class AudioPlayer{static{this.instance=null}constructor(){this.audio=new Audio}static getInstance(){return AudioPlayer.instance||(AudioPlayer.instance=new AudioPlayer),AudioPlayer.instance}setAudioEvent(t,i){this.audio[t]=i}get duration(){return this.audio.duration}get src(){return this.audio.src}stop(){this.audio.pause()}async play(t){return new Promise(((i,a)=>{this.audio.src!==t?(this.audio.src=t,this.audio.play().then((()=>{i()})).catch((()=>{a()}))):this.audio.paused?this.audio.play().then((()=>{i()})).catch((()=>{a()})):this.audio.pause()}))}}
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL3ZvaWNlL2xpYi9hdWRpby9hdWRpby5wbGF5ZXIubWpz`
10
+
@@ -1,2 +1,10 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW8uc3RyZWFtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2Mvdm9pY2UvbGliL2F1ZGlvL2F1ZGlvLnN0cmVhbWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogSW50ZXJmYWNlIGZvciBhdWRpbyBzdHJlYW1pbmcgY29tcG9uZW50c1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBBdWRpb1N0cmVhbWVyIHtcclxuICAgIC8qKlxyXG4gICAgICogV3JpdGVzIGF1ZGlvIGRhdGEgdG8gdGhlIHN0cmVhbVxyXG4gICAgICogQHBhcmFtIGF1ZGlvRGF0YSBUaGUgYXVkaW8gZGF0YSB0byB3cml0ZVxyXG4gICAgICovXHJcbiAgICB3cml0ZShhdWRpb0RhdGE6IEFycmF5QnVmZmVyKTogdm9pZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3BzIHBsYXliYWNrIGFuZCBjbGVhbnMgdXAgcmVzb3VyY2VzXHJcbiAgICAgKi9cclxuICAgIHN0b3AoKTogdm9pZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb3NlcyB0aGUgc3RyZWFtIChmaW5hbGl6ZXMgcGxheWJhY2spXHJcbiAgICAgKi9cclxuICAgIC8vIGNsb3NlPygpOiB2b2lkO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0cmVhbSBpcyBjdXJyZW50bHkgcGxheWluZyBhdWRpb1xyXG4gICAgICovXHJcbiAgICBpc1BsYXlpbmc6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgc3RyZWFtIGhhcyBiZWVuIGNsb3NlZFxyXG4gICAgICovXHJcbiAgICBpc0Nsb3NlZD86IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPcHRpb25hbCBldmVudCBlbWl0dGVyL2NhbGxiYWNrIHN5c3RlbSBmb3Igc3RyZWFtIGV2ZW50c1xyXG4gICAgICovXHJcbiAgICBldmVudE1hcD86IHtcclxuICAgICAgICBvblN0YXJ0PzogKCkgPT4gdm9pZDtcclxuICAgICAgICBvblN0b3A/OiAoKSA9PiB2b2lkO1xyXG4gICAgICAgIG9uRXJyb3I/OiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xyXG4gICAgICAgIC8vIEFkZCBvdGhlciByZWxldmFudCBldmVudHMgYXMgbmVlZGVkXHJcbiAgICB9O1xyXG59Il19
1
+
2
+ /**
3
+ * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
+ * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
+ * 保留所有权利 All Rights Reserved.
6
+ * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/aigc/voice/lib/audio/audio.streamer.mjs
7
+ */
8
+ export{};
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL3ZvaWNlL2xpYi9hdWRpby9hdWRpby5zdHJlYW1lci5tanM=`
10
+
@@ -1,96 +1,10 @@
1
- import { Subject } from 'rxjs';
2
- import { bufferWhen, filter, takeUntil } from 'rxjs/operators';
3
- // 创建一个自定义的音频输出流
4
- export class FmPushAudioOutputStreamCallback {
5
- constructor() {
6
- this.audioDataSubject = new Subject(); // 创建一个 Subject 用于音频数据流
7
- this.playedSubject = new Subject(); // 创建一个 Subject 用于记录音频播放开始和结束
8
- this.isPlaying = false;
9
- this.isClosed = false;
10
- this.audioBufferQueue = []; // 用于存储音频数据
11
- this.maxBufferSize = 10; // 最大缓冲区大小
12
- // 当有音频数据可用时调用
13
- this.writeCount = 0;
14
- this.audioContext = new (window.AudioContext || window.webkitAudioContext)(); // 创建音频上下文
15
- /**
16
- * 订阅音频数据流并处理播放
17
- * @desc
18
- * audioDataSubject 接收原始数据
19
- * playedSubject 控制播放缓冲时间
20
- * 1.前十条 触发playedSubject
21
- * 2.每播放完成一次 触发playedSubject
22
- */
23
- this.audioDataSubject.pipe(bufferWhen(() => this.playedSubject), // 只在传递 true 时触发
24
- // bufferTime(25), // 后续数据按时间缓冲,比如25ms
25
- takeUntil(this.audioDataSubject.pipe(filter(() => this.isClosed)))).subscribe(buffers => {
26
- // console.log(buffers);
27
- this.playAudio(buffers);
28
- });
29
- }
30
- async write(data) {
31
- this.writeCount++;
32
- if (this.writeCount == 10) {
33
- this.playedSubject.next(true);
34
- }
35
- // 将数据推送到 Subject
36
- this.audioDataSubject.next(data);
37
- }
38
- // 播放音频
39
- async playAudio(buffers) {
40
- this.isPlaying = true;
41
- // 合并所有的 ArrayBuffer
42
- const partBuffer = this.mergeArrayBuffers(buffers);
43
- let audioBuffer;
44
- try {
45
- audioBuffer = await this.audioContext.decodeAudioData(partBuffer);
46
- }
47
- catch (err) { }
48
- if (audioBuffer) {
49
- // 创建音频源
50
- const source = this.audioContext.createBufferSource();
51
- source.buffer = audioBuffer;
52
- // 连接到音频上下文的输出
53
- source.connect(this.audioContext.destination);
54
- // 播放音频
55
- source.start();
56
- // 等待音频播放结束
57
- await new Promise(resolve => {
58
- source.onended = resolve;
59
- });
60
- this.playedSubject.next(true);
61
- }
62
- this.isPlaying = false;
63
- }
64
- mergeArrayBuffers(arrayBuffers) {
65
- // 计算总长度
66
- const totalLength = arrayBuffers.reduce((sum, buffer) => sum + buffer.byteLength, 0);
67
- // 创建一个新的 Uint8Array,用于存储合并后的数据
68
- const mergedUint8Array = new Uint8Array(totalLength);
69
- // 当前写入的偏移量
70
- let offset = 0;
71
- // 遍历每个 ArrayBuffer
72
- for (const buffer of arrayBuffers) {
73
- const uint8Array = new Uint8Array(buffer);
74
- mergedUint8Array.set(uint8Array, offset);
75
- offset += uint8Array.length;
76
- }
77
- return mergedUint8Array.buffer;
78
- }
79
- async stop() {
80
- this.isClosed = true;
81
- this.audioDataSubject && this.audioDataSubject.unsubscribe();
82
- this.playedSubject && this.playedSubject.unsubscribe();
83
- this.audioContext && this.audioContext.close();
84
- }
85
- // 结束流
86
- async close() {
87
- console.log("close 数据加载完成");
88
- // if (this.isClosed) return;
89
- this.isClosed = true;
90
- // 如果当前没有播放,关闭音频上下文
91
- // if (!this.isPlaying) {
92
- // await this.audioContext.close();
93
- // }
94
- }
95
- }
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtZXIubWljcm9zb2Z0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL3ZvaWNlL2xpYi9hdWRpby9zdHJlYW1lci5taWNyb3NvZnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFRLE9BQU8sRUFBUyxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQWMsVUFBVSxFQUFhLE1BQU0sRUFBdUIsU0FBUyxFQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFHaEgsZ0JBQWdCO0FBQ2hCLE1BQU0sT0FBTywrQkFBK0I7SUFVeEM7UUFSQSxxQkFBZ0IsR0FBeUIsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLHVCQUF1QjtRQUMvRSxrQkFBYSxHQUFxQixJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsNkJBQTZCO1FBQzlFLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUUxQixxQkFBZ0IsR0FBUyxFQUFFLENBQUMsQ0FBQyxXQUFXO1FBQ3hDLGtCQUFhLEdBQVUsRUFBRSxDQUFDLENBQUMsVUFBVTtRQXdCckMsY0FBYztRQUNkLGVBQVUsR0FBVSxDQUFDLENBQUE7UUF0QmpCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUssTUFBYyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVU7UUFFakc7Ozs7Ozs7V0FPRztRQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQ3RCLFVBQVUsQ0FBQyxHQUFFLEVBQUUsQ0FBQSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsZ0JBQWdCO1FBQ3BELHNDQUFzQztRQUN0QyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFB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QUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckQsSUFBSSxDQUFDLFlBQVksSUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRCxNQUFNO0lBQ04sS0FBSyxDQUFDLEtBQUs7UUFDUCxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQzNCLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixtQkFBbUI7UUFDbkIseUJBQXlCO1FBQ3pCLHVDQUF1QztRQUN2QyxJQUFJO0lBQ1IsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZnJvbSwgU3ViamVjdCwgdGltZXIgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgYnVmZmVyVGltZSwgYnVmZmVyV2hlbiwgY29uY2F0TWFwLCBmaWx0ZXIsIG1lcmdlTWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBBdWRpb1N0cmVhbWVyIH0gZnJvbSBcIi4vYXVkaW8uc3RyZWFtZXJcIjtcclxuXHJcbi8vIOWIm+W7uuS4gOS4quiHquWumuS5ieeahOmfs+mikei+k+WHuua1gVxyXG5leHBvcnQgY2xhc3MgRm1QdXNoQXVkaW9PdXRwdXRTdHJlYW1DYWxsYmFjayBpbXBsZW1lbnRzIEF1ZGlvU3RyZWFtZXJ7XHJcbiAgICBhdWRpb0NvbnRleHQ6IEF1ZGlvQ29udGV4dDtcclxuICAgIGF1ZGlvRGF0YVN1YmplY3Q6IFN1YmplY3Q8QXJyYXlCdWZmZXI+ID0gbmV3IFN1YmplY3QoKTsgLy8g5Yib5bu65LiA5LiqIFN1YmplY3Qg55So5LqO6Z+z6aKR5pWw5o2u5rWBXHJcbiAgICBwbGF5ZWRTdWJqZWN0OiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoKTsgLy8g5Yib5bu65LiA5LiqIFN1YmplY3Qg55So5LqO6K6w5b2V6Z+z6aKR5pKt5pS+5byA5aeL5ZKM57uT5p2fXHJcbiAgICBpc1BsYXlpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlzQ2xvc2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBcclxuICAgIGF1ZGlvQnVmZmVyUXVldWU6YW55W10gPSBbXTsgLy8g55So5LqO5a2Y5YKo6Z+z6aKR5pWw5o2uXHJcbiAgICBtYXhCdWZmZXJTaXplOm51bWJlciA9IDEwOyAvLyDmnIDlpKfnvJPlhrLljLrlpKflsI9cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmF1ZGlvQ29udGV4dCA9IG5ldyAod2luZG93LkF1ZGlvQ29udGV4dCB8fCAod2luZG93IGFzIGFueSkud2Via2l0QXVkaW9Db250ZXh0KSgpOyAvLyDliJvlu7rpn7PpopHkuIrkuIvmlodcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICog6K6i6ZiF6Z+z6aKR5pWw5o2u5rWB5bm25aSE55CG5pKt5pS+XHJcbiAgICAgICAgICogQGRlc2NcclxuICAgICAgICAgKiBhdWRpb0RhdGFTdWJqZWN0IOaOpeaUtuWOn+Wni+aVsOaNrlxyXG4gICAgICAgICAqIHBsYXllZFN1YmplY3Qg5o6n5Yi25pKt5pS+57yT5Yay5pe26Ze0XHJcbiAgICAgICAgICogMS7liY3ljYHmnaEg6Kem5Y+RcGxheWVkU3ViamVjdFxyXG4gICAgICAgICAqIDIu5q+P5pKt5pS+5a6M5oiQ5LiA5qyhIOinpuWPkXBsYXllZFN1YmplY3RcclxuICAgICAgICAgKi8gXHJcbiAgICAgICAgdGhpcy5hdWRpb0RhdGFTdWJqZWN0LnBpcGUoXHJcbiAgICAgICAgICAgIGJ1ZmZlcldoZW4oKCk9PnRoaXMucGxheWVkU3ViamVjdCksIC8vIOWPquWcqOS8oOmAkiB0cnVlIOaXtuinpuWPkVxyXG4gICAgICAgICAgICAvLyBidWZmZXJUaW1lKDI1KSwgLy8g5ZCO57ut5pWw5o2u5oyJ5pe26Ze057yT5Yay77yM5q+U5aaCMjVtc1xyXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5hdWRpb0RhdGFTdWJqZWN0LnBpcGUoZmlsdGVyKCgpID0+IHRoaXMuaXNDbG9zZWQpKSlcclxuICAgICAgICApLnN1YnNjcmliZShidWZmZXJzID0+IHtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYnVmZmVycyk7XHJcbiAgICAgICAgICAgIHRoaXMucGxheUF1ZGlvKGJ1ZmZlcnMpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyDlvZPmnInpn7PpopHmlbDmja7lj6/nlKjml7bosIPnlKhcclxuICAgIHdyaXRlQ291bnQ6bnVtYmVyID0gMFxyXG4gICAgYXN5bmMgd3JpdGUoZGF0YTogQXJyYXlCdWZmZXIpIHtcclxuICAgICAgICB0aGlzLndyaXRlQ291bnQrKztcclxuICAgICAgICBpZih0aGlzLndyaXRlQ291bnQ9PTEwKXtcclxuICAgICAgICAgICAgdGhpcy5wbGF5ZWRTdWJqZWN0Lm5leHQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIOWwhuaVsOaNruaOqOmAgeWIsCBTdWJqZWN0XHJcbiAgICAgICAgdGhpcy5hdWRpb0RhdGFTdWJqZWN0Lm5leHQoZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5pKt5pS+6Z+z6aKRXHJcbiAgICBhc3luYyBwbGF5QXVkaW8oYnVmZmVyczogQXJyYXlCdWZmZXJbXSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRoaXMuaXNQbGF5aW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8g5ZCI5bm25omA5pyJ55qEIEFycmF5QnVmZmVyXHJcbiAgICAgICAgY29uc3QgcGFydEJ1ZmZlciA9IHRoaXMubWVyZ2VBcnJheUJ1ZmZlcnMoYnVmZmVycyk7XHJcbiAgICAgICAgbGV0IGF1ZGlvQnVmZmVyXHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICBhdWRpb0J1ZmZlciA9IGF3YWl0IHRoaXMuYXVkaW9Db250ZXh0LmRlY29kZUF1ZGlvRGF0YShwYXJ0QnVmZmVyKTtcclxuICAgICAgICB9Y2F0Y2goZXJyKXt9XHJcblxyXG4gICAgICAgIGlmIChhdWRpb0J1ZmZlcikge1xyXG4gICAgICAgICAgICAvLyDliJvlu7rpn7PpopHmupBcclxuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5hdWRpb0NvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7XHJcbiAgICAgICAgICAgIHNvdXJjZS5idWZmZXIgPSBhdWRpb0J1ZmZlcjtcclxuXHJcbiAgICAgICAgICAgIC8vIOi/nuaOpeWIsOmfs+mikeS4iuS4i+aWh+eahOi+k+WHulxyXG4gICAgICAgICAgICBzb3VyY2UuY29ubmVjdCh0aGlzLmF1ZGlvQ29udGV4dC5kZXN0aW5hdGlvbik7XHJcblxyXG4gICAgICAgICAgICAvLyDmkq3mlL7pn7PpopFcclxuICAgICAgICAgICAgc291cmNlLnN0YXJ0KCk7XHJcblxyXG4gICAgICAgICAgICAvLyDnrYnlvoXpn7PpopHmkq3mlL7nu5PmnZ9cclxuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2Uub25lbmRlZCA9IHJlc29sdmU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnBsYXllZFN1YmplY3QubmV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbWVyZ2VBcnJheUJ1ZmZlcnMoYXJyYXlCdWZmZXJzOiBBcnJheUJ1ZmZlcltdKTogQXJyYXlCdWZmZXIge1xyXG4gICAgICAgIC8vIOiuoeeul+aAu+mVv+W6plxyXG4gICAgICAgIGNvbnN0IHRvdGFsTGVuZ3RoID0gYXJyYXlCdWZmZXJzLnJlZHVjZSgoc3VtLCBidWZmZXIpID0+IHN1bSArIGJ1ZmZlci5ieXRlTGVuZ3RoLCAwKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyDliJvlu7rkuIDkuKrmlrDnmoQgVWludDhBcnJhee+8jOeUqOS6juWtmOWCqOWQiOW5tuWQjueahOaVsOaNrlxyXG4gICAgICAgIGNvbnN0IG1lcmdlZFVpbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheSh0b3RhbExlbmd0aCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g5b2T5YmN5YaZ5YWl55qE5YGP56e76YePXHJcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g6YGN5Y6G5q+P5LiqIEFycmF5QnVmZmVyXHJcbiAgICAgICAgZm9yIChjb25zdCBidWZmZXIgb2YgYXJyYXlCdWZmZXJzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVpbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xyXG4gICAgICAgICAgICBtZXJnZWRVaW50OEFycmF5LnNldCh1aW50OEFycmF5LCBvZmZzZXQpO1xyXG4gICAgICAgICAgICBvZmZzZXQgKz0gdWludDhBcnJheS5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBtZXJnZWRVaW50OEFycmF5LmJ1ZmZlcjtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzdG9wKCkge1xyXG4gICAgICAgIHRoaXMuaXNDbG9zZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYXVkaW9EYXRhU3ViamVjdCYmdGhpcy5hdWRpb0RhdGFTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgdGhpcy5wbGF5ZWRTdWJqZWN0JiZ0aGlzLnBsYXllZFN1YmplY3QudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB0aGlzLmF1ZGlvQ29udGV4dCYmdGhpcy5hdWRpb0NvbnRleHQuY2xvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDnu5PmnZ/mtYFcclxuICAgIGFzeW5jIGNsb3NlKCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiY2xvc2Ug5pWw5o2u5Yqg6L295a6M5oiQXCIpXHJcbiAgICAgICAgLy8gaWYgKHRoaXMuaXNDbG9zZWQpIHJldHVybjtcclxuICAgICAgICB0aGlzLmlzQ2xvc2VkID0gdHJ1ZTtcclxuICAgICAgICAvLyDlpoLmnpzlvZPliY3msqHmnInmkq3mlL7vvIzlhbPpl63pn7PpopHkuIrkuIvmlodcclxuICAgICAgICAvLyBpZiAoIXRoaXMuaXNQbGF5aW5nKSB7XHJcbiAgICAgICAgLy8gICAgIGF3YWl0IHRoaXMuYXVkaW9Db250ZXh0LmNsb3NlKCk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgfVxyXG59Il19
1
+
2
+ /**
3
+ * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
+ * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
+ * 保留所有权利 All Rights Reserved.
6
+ * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/aigc/voice/lib/audio/streamer.microsoft.mjs
7
+ */
8
+ import{Subject}from"rxjs";import{bufferWhen,filter,takeUntil}from"rxjs/operators";export class FmPushAudioOutputStreamCallback{constructor(){this.audioDataSubject=new Subject,this.playedSubject=new Subject,this.isPlaying=!1,this.isClosed=!1,this.audioBufferQueue=[],this.maxBufferSize=10,this.writeCount=0,this.audioContext=new(window.AudioContext||window.webkitAudioContext),this.audioDataSubject.pipe(bufferWhen((()=>this.playedSubject)),takeUntil(this.audioDataSubject.pipe(filter((()=>this.isClosed))))).subscribe((t=>{this.playAudio(t)}))}async write(t){this.writeCount++,10==this.writeCount&&this.playedSubject.next(!0),this.audioDataSubject.next(t)}async playAudio(t){this.isPlaying=!0;const e=this.mergeArrayBuffers(t);let i;try{i=await this.audioContext.decodeAudioData(e)}catch(t){}if(i){const t=this.audioContext.createBufferSource();t.buffer=i,t.connect(this.audioContext.destination),t.start(),await new Promise((e=>{t.onended=e})),this.playedSubject.next(!0)}this.isPlaying=!1}mergeArrayBuffers(t){const e=t.reduce(((t,e)=>t+e.byteLength),0),i=new Uint8Array(e);let s=0;for(const e of t){const t=new Uint8Array(e);i.set(t,s),s+=t.length}return i.buffer}async stop(){this.isClosed=!0,this.audioDataSubject&&this.audioDataSubject.unsubscribe(),this.playedSubject&&this.playedSubject.unsubscribe(),this.audioContext&&this.audioContext.close()}async close(){console.log("close 数据加载完成"),this.isClosed=!0}}
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL3ZvaWNlL2xpYi9hdWRpby9zdHJlYW1lci5taWNyb3NvZnQubWpz`
10
+
@@ -1,179 +1,10 @@
1
- export class PCMStreamer {
2
- constructor(sampleRate = 24000, numChannels = 1, bitsPerSample = 16) {
3
- this.bufferQueue = [];
4
- this.isPlaying = false;
5
- this.currentSource = null;
6
- this.nextPlayTime = 0;
7
- this.bufferedDuration = 0;
8
- // 配置参数
9
- this.minBufferDuration = 0.5; // 最小缓冲时间(秒) // 提高最小缓冲时间,确保初始缓冲足够
10
- this.targetBufferDuration = 1.0; // 目标缓冲时间(秒) // 增加目标缓冲时间
11
- this.maxBufferDuration = 1.5; // 最大缓冲时间(秒) // 增加最大缓冲时间
12
- this.mergeThreshold = 0.05; // 合并小缓冲区的阈值(秒) // 降低合并阈值,更积极地合并小缓冲区
13
- this.sampleRate = sampleRate;
14
- this.numChannels = numChannels;
15
- this.bitsPerSample = bitsPerSample;
16
- // 创建音频上下文并处理可能的挂起状态
17
- const AudioContext = window.AudioContext || window.webkitAudioContext;
18
- this.audioContext = new AudioContext();
19
- // 恢复音频上下文(某些浏览器需要用户交互后才会自动恢复)
20
- document.addEventListener('click', () => {
21
- if (this.audioContext.state === 'suspended') {
22
- this.audioContext.resume();
23
- }
24
- }, { once: true });
25
- }
1
+
26
2
  /**
27
- * 写入PCM数据到缓冲区
3
+ * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
+ * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
+ * 保留所有权利 All Rights Reserved.
6
+ * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/aigc/voice/lib/audio/streamer.pcm.mjs
28
7
  */
29
- write(pcmData) {
30
- if (pcmData.byteLength === 0)
31
- return;
32
- // 计算当前数据块的持续时间
33
- const duration = this.calculateDuration(pcmData);
34
- this.bufferedDuration += duration;
35
- this.bufferQueue.push(pcmData);
36
- // 如果缓冲足够且没有在播放,开始播放
37
- if (!this.isPlaying && this.bufferedDuration >= this.minBufferDuration) {
38
- this.startPlayback();
39
- }
40
- }
41
- /**
42
- * 开始播放流程
43
- */
44
- startPlayback() {
45
- if (this.isPlaying)
46
- return;
47
- this.isPlaying = true;
48
- this.nextPlayTime = this.audioContext.currentTime;
49
- this.processBuffer();
50
- }
51
- /**
52
- * 处理缓冲区数据
53
- */
54
- processBuffer() {
55
- // 确保音频上下文处于运行状态
56
- if (this.audioContext.state !== 'running') {
57
- this.audioContext.resume().then(() => {
58
- setTimeout(() => this.processBuffer(), 50);
59
- });
60
- return;
61
- }
62
- // 检查是否有足够数据
63
- if (this.bufferedDuration < this.minBufferDuration) {
64
- this.isPlaying = false;
65
- return;
66
- }
67
- // 合并缓冲区数据
68
- const { mergedBuffer, totalDuration } = this.mergeBuffers();
69
- this.bufferedDuration -= totalDuration;
70
- // 创建音频缓冲区
71
- const frameCount = mergedBuffer.byteLength / (this.bitsPerSample / 8) / this.numChannels;
72
- const audioBuffer = this.audioContext.createBuffer(this.numChannels, frameCount, this.sampleRate);
73
- this.fillAudioBuffer(audioBuffer, mergedBuffer);
74
- // 创建并配置音频源
75
- const source = this.audioContext.createBufferSource();
76
- source.buffer = audioBuffer;
77
- source.connect(this.audioContext.destination);
78
- // 设置精确的播放时间
79
- const now = this.audioContext.currentTime;
80
- this.nextPlayTime = Math.max(this.nextPlayTime, now);
81
- source.start(this.nextPlayTime);
82
- this.nextPlayTime += audioBuffer.duration;
83
- // 设置播放结束回调
84
- source.onended = () => {
85
- this.currentSource = null;
86
- // 使用setTimeout给浏览器喘息时间,避免连续播放导致的卡顿
87
- setTimeout(() => this.processBuffer(), 5);
88
- };
89
- this.currentSource = source;
90
- }
91
- /**
92
- * 智能合并缓冲区
93
- */
94
- mergeBuffers() {
95
- let totalBytes = 0;
96
- let totalDuration = 0;
97
- const buffersToMerge = [];
98
- // 合并小缓冲区直到达到目标缓冲时间
99
- while (this.bufferQueue.length > 0) {
100
- const nextBuffer = this.bufferQueue[0];
101
- const nextDuration = this.calculateDuration(nextBuffer);
102
- // 如果添加下一个缓冲区会超过最大缓冲时间,且已经有足够数据,则停止合并
103
- if (totalDuration > 0 &&
104
- totalDuration + nextDuration > this.maxBufferDuration) {
105
- break;
106
- }
107
- buffersToMerge.push(this.bufferQueue.shift());
108
- totalBytes += nextBuffer.byteLength;
109
- totalDuration += nextDuration;
110
- // 达到目标缓冲时间后,检查是否需要继续合并小缓冲区
111
- if (totalDuration >= this.targetBufferDuration) {
112
- // 如果下一个缓冲区很小,继续合并以避免频繁播放
113
- if (this.bufferQueue.length > 0 &&
114
- this.calculateDuration(this.bufferQueue[0]) < this.mergeThreshold) {
115
- continue;
116
- }
117
- break;
118
- }
119
- }
120
- // 合并所有选中的缓冲区
121
- const merged = new Uint8Array(totalBytes);
122
- let offset = 0;
123
- for (const buffer of buffersToMerge) {
124
- merged.set(new Uint8Array(buffer), offset);
125
- offset += buffer.byteLength;
126
- }
127
- return { mergedBuffer: merged.buffer, totalDuration };
128
- }
129
- /**
130
- * 计算PCM数据的持续时间(秒)
131
- */
132
- calculateDuration(pcmData) {
133
- const bytesPerSample = this.bitsPerSample / 8;
134
- const frameCount = pcmData.byteLength / bytesPerSample / this.numChannels;
135
- return frameCount / this.sampleRate;
136
- }
137
- /**
138
- * 填充音频缓冲区
139
- */
140
- fillAudioBuffer(audioBuffer, pcmData) {
141
- const bytesPerSample = this.bitsPerSample / 8;
142
- const view = new DataView(pcmData);
143
- for (let channel = 0; channel < this.numChannels; channel++) {
144
- const channelData = audioBuffer.getChannelData(channel);
145
- let dataOffset = channel * bytesPerSample;
146
- for (let i = 0; i < channelData.length; i++) {
147
- let sample;
148
- if (this.bitsPerSample === 16) {
149
- sample = view.getInt16(dataOffset, true) / 32768;
150
- }
151
- else if (this.bitsPerSample === 8) {
152
- sample = (view.getUint8(dataOffset) - 128) / 128;
153
- }
154
- else if (this.bitsPerSample === 32) {
155
- sample = view.getInt32(dataOffset, true) / 2147483648;
156
- }
157
- else {
158
- throw new Error(`Unsupported bit depth: ${this.bitsPerSample}`);
159
- }
160
- channelData[i] = sample;
161
- dataOffset += bytesPerSample * this.numChannels;
162
- }
163
- }
164
- }
165
- /**
166
- * 停止播放并清空缓冲区
167
- */
168
- stop() {
169
- if (this.currentSource) {
170
- this.currentSource.stop();
171
- this.currentSource = null;
172
- }
173
- this.bufferQueue = [];
174
- this.isPlaying = false;
175
- this.bufferedDuration = 0;
176
- this.nextPlayTime = 0;
177
- }
178
- }
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtZXIucGNtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL3ZvaWNlL2xpYi9hdWRpby9zdHJlYW1lci5wY20udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLFdBQVc7SUFpQnBCLFlBQVksYUFBcUIsS0FBSyxFQUFFLGNBQXNCLENBQUMsRUFBRSxnQkFBd0IsRUFBRTtRQWJuRixnQkFBVyxHQUFrQixFQUFFLENBQUM7UUFDeEMsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUVuQixrQkFBYSxHQUFpQyxJQUFJLENBQUM7UUFDbkQsaUJBQVksR0FBVyxDQUFDLENBQUM7UUFDekIscUJBQWdCLEdBQVcsQ0FBQyxDQUFDO1FBRXJDLE9BQU87UUFDVSxzQkFBaUIsR0FBVyxHQUFHLENBQUMsQ0FBQyxpQ0FBaUM7UUFDbEUseUJBQW9CLEdBQVcsR0FBRyxDQUFDLENBQUMsd0JBQXdCO1FBQzVELHNCQUFpQixHQUFXLEdBQUcsQ0FBQyxDQUFDLHdCQUF3QjtRQUN6RCxtQkFBYyxHQUFXLElBQUksQ0FBQyxDQUFDLG9DQUFvQztRQUdoRixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUVuQyxvQkFBb0I7UUFDcEIsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksSUFBSyxNQUFjLENBQUMsa0JBQWtCLENBQUM7UUFDL0UsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXZDLDhCQUE4QjtRQUM5QixRQUFRLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUNwQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxLQUFLLFdBQVcsRUFB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QUk7UUFDQSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzlCLENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF1ZGlvU3RyZWFtZXIgfSBmcm9tIFwiLi9hdWRpby5zdHJlYW1lclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBDTVN0cmVhbWVyIGltcGxlbWVudHMgQXVkaW9TdHJlYW1lciB7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNhbXBsZVJhdGU6IG51bWJlcjtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbnVtQ2hhbm5lbHM6IG51bWJlcjtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgYml0c1BlclNhbXBsZTogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBidWZmZXJRdWV1ZTogQXJyYXlCdWZmZXJbXSA9IFtdO1xyXG4gICAgaXNQbGF5aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGF1ZGlvQ29udGV4dDogQXVkaW9Db250ZXh0O1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50U291cmNlOiBBdWRpb0J1ZmZlclNvdXJjZU5vZGUgfCBudWxsID0gbnVsbDtcclxuICAgIHByaXZhdGUgbmV4dFBsYXlUaW1lOiBudW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBidWZmZXJlZER1cmF0aW9uOiBudW1iZXIgPSAwO1xyXG4gICAgXHJcbiAgICAvLyDphY3nva7lj4LmlbBcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWluQnVmZmVyRHVyYXRpb246IG51bWJlciA9IDAuNTsgLy8g5pyA5bCP57yT5Yay5pe26Ze0KOenkikgLy8g5o+Q6auY5pyA5bCP57yT5Yay5pe26Ze077yM56Gu5L+d5Yid5aeL57yT5Yay6Laz5aSfXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhcmdldEJ1ZmZlckR1cmF0aW9uOiBudW1iZXIgPSAxLjA7IC8vIOebruagh+e8k+WGsuaXtumXtCjnp5IpIC8vIOWinuWKoOebruagh+e8k+WGsuaXtumXtFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBtYXhCdWZmZXJEdXJhdGlvbjogbnVtYmVyID0gMS41OyAvLyDmnIDlpKfnvJPlhrLml7bpl7Qo56eSKSAvLyDlop7liqDmnIDlpKfnvJPlhrLml7bpl7RcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVyZ2VUaHJlc2hvbGQ6IG51bWJlciA9IDAuMDU7IC8vIOWQiOW5tuWwj+e8k+WGsuWMuueahOmYiOWAvCjnp5IpIC8vIOmZjeS9juWQiOW5tumYiOWAvO+8jOabtOenr+aegeWcsOWQiOW5tuWwj+e8k+WGsuWMulxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNhbXBsZVJhdGU6IG51bWJlciA9IDI0MDAwLCBudW1DaGFubmVsczogbnVtYmVyID0gMSwgYml0c1BlclNhbXBsZTogbnVtYmVyID0gMTYpIHtcclxuICAgICAgICB0aGlzLnNhbXBsZVJhdGUgPSBzYW1wbGVSYXRlO1xyXG4gICAgICAgIHRoaXMubnVtQ2hhbm5lbHMgPSBudW1DaGFubmVscztcclxuICAgICAgICB0aGlzLmJpdHNQZXJTYW1wbGUgPSBiaXRzUGVyU2FtcGxlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIOWIm+W7uumfs+mikeS4iuS4i+aWh+W5tuWkhOeQhuWPr+iDveeahOaMgui1t+eKtuaAgVxyXG4gICAgICAgIGNvbnN0IEF1ZGlvQ29udGV4dCA9IHdpbmRvdy5BdWRpb0NvbnRleHQgfHwgKHdpbmRvdyBhcyBhbnkpLndlYmtpdEF1ZGlvQ29udGV4dDtcclxuICAgICAgICB0aGlzLmF1ZGlvQ29udGV4dCA9IG5ldyBBdWRpb0NvbnRleHQoKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyDmgaLlpI3pn7PpopHkuIrkuIvmloco5p+Q5Lqb5rWP6KeI5Zmo6ZyA6KaB55So5oi35Lqk5LqS5ZCO5omN5Lya6Ieq5Yqo5oGi5aSNKVxyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hdWRpb0NvbnRleHQuc3RhdGUgPT09ICdzdXNwZW5kZWQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1ZGlvQ29udGV4dC5yZXN1bWUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHsgb25jZTogdHJ1ZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOWGmeWFpVBDTeaVsOaNruWIsOe8k+WGsuWMulxyXG4gICAgICovXHJcbiAgICB3cml0ZShwY21EYXRhOiBBcnJheUJ1ZmZlcik6IHZvaWQge1xyXG4gICAgICAgIGlmIChwY21EYXRhLmJ5dGVMZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8g6K6h566X5b2T5YmN5pWw5o2u5Z2X55qE5oyB57ut5pe26Ze0XHJcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSB0aGlzLmNhbGN1bGF0ZUR1cmF0aW9uKHBjbURhdGEpO1xyXG4gICAgICAgIHRoaXMuYnVmZmVyZWREdXJhdGlvbiArPSBkdXJhdGlvbjtcclxuICAgICAgICB0aGlzLmJ1ZmZlclF1ZXVlLnB1c2gocGNtRGF0YSk7XHJcblxyXG4gICAgICAgIC8vIOWmguaenOe8k+WGsui2s+Wkn+S4lOayoeacieWcqOaSreaUvu+8jOW8gOWni+aSreaUvlxyXG4gICAgICAgIGlmICghdGhpcy5pc1BsYXlpbmcgJiYgdGhpcy5idWZmZXJlZER1cmF0aW9uID49IHRoaXMubWluQnVmZmVyRHVyYXRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFydFBsYXliYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5byA5aeL5pKt5pS+5rWB56iLXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3RhcnRQbGF5YmFjaygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5pc1BsYXlpbmcpIHJldHVybjtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmlzUGxheWluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5uZXh0UGxheVRpbWUgPSB0aGlzLmF1ZGlvQ29udGV4dC5jdXJyZW50VGltZTtcclxuICAgICAgICB0aGlzLnByb2Nlc3NCdWZmZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOWkhOeQhue8k+WGsuWMuuaVsOaNrlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHByb2Nlc3NCdWZmZXIoKTogdm9pZCB7XHJcbiAgICAgICAgLy8g56Gu5L+d6Z+z6aKR5LiK5LiL5paH5aSE5LqO6L+Q6KGM54q25oCBXHJcbiAgICAgICAgaWYgKHRoaXMuYXVkaW9Db250ZXh0LnN0YXRlICE9PSAncnVubmluZycpIHtcclxuICAgICAgICAgICAgdGhpcy5hdWRpb0NvbnRleHQucmVzdW1lKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucHJvY2Vzc0J1ZmZlcigpLCA1MCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDmo4Dmn6XmmK/lkKbmnInotrPlpJ/mlbDmja5cclxuICAgICAgICBpZiAodGhpcy5idWZmZXJlZER1cmF0aW9uIDwgdGhpcy5taW5CdWZmZXJEdXJhdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDlkIjlubbnvJPlhrLljLrmlbDmja5cclxuICAgICAgICBjb25zdCB7IG1lcmdlZEJ1ZmZlciwgdG90YWxEdXJhdGlvbiB9ID0gdGhpcy5tZXJnZUJ1ZmZlcnMoKTtcclxuICAgICAgICB0aGlzLmJ1ZmZlcmVkRHVyYXRpb24gLT0gdG90YWxEdXJhdGlvbjtcclxuXHJcbiAgICAgICAgLy8g5Yib5bu66Z+z6aKR57yT5Yay5Yy6XHJcbiAgICAgICAgY29uc3QgZnJhbWVDb3VudCA9IG1lcmdlZEJ1ZmZlci5ieXRlTGVuZ3RoIC8gKHRoaXMuYml0c1BlclNhbXBsZSAvIDgpIC8gdGhpcy5udW1DaGFubmVscztcclxuICAgICAgICBjb25zdCBhdWRpb0J1ZmZlciA9IHRoaXMuYXVkaW9Db250ZXh0LmNyZWF0ZUJ1ZmZlcihcclxuICAgICAgICAgICAgdGhpcy5udW1DaGFubmVscyxcclxuICAgICAgICAgICAgZnJhbWVDb3VudCxcclxuICAgICAgICAgICAgdGhpcy5zYW1wbGVSYXRlXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpbGxBdWRpb0J1ZmZlcihhdWRpb0J1ZmZlciwgbWVyZ2VkQnVmZmVyKTtcclxuXHJcbiAgICAgICAgLy8g5Yib5bu65bm26YWN572u6Z+z6aKR5rqQXHJcbiAgICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5hdWRpb0NvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7XHJcbiAgICAgICAgc291cmNlLmJ1ZmZlciA9IGF1ZGlvQnVmZmVyO1xyXG4gICAgICAgIHNvdXJjZS5jb25uZWN0KHRoaXMuYXVkaW9Db250ZXh0LmRlc3RpbmF0aW9uKTtcclxuXHJcbiAgICAgICAgLy8g6K6+572u57K+56Gu55qE5pKt5pS+5pe26Ze0XHJcbiAgICAgICAgY29uc3Qgbm93ID0gdGhpcy5hdWRpb0NvbnRleHQuY3VycmVudFRpbWU7XHJcbiAgICAgICAgdGhpcy5uZXh0UGxheVRpbWUgPSBNYXRoLm1heCh0aGlzLm5leHRQbGF5VGltZSwgbm93KTtcclxuICAgICAgICBcclxuICAgICAgICBzb3VyY2Uuc3RhcnQodGhpcy5uZXh0UGxheVRpbWUpO1xyXG4gICAgICAgIHRoaXMubmV4dFBsYXlUaW1lICs9IGF1ZGlvQnVmZmVyLmR1cmF0aW9uO1xyXG5cclxuICAgICAgICAvLyDorr7nva7mkq3mlL7nu5PmnZ/lm57osINcclxuICAgICAgICBzb3VyY2Uub25lbmRlZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U291cmNlID0gbnVsbDtcclxuICAgICAgICAgICAgLy8g5L2/55Soc2V0VGltZW91dOe7mea1j+iniOWZqOWWmOaBr+aXtumXtO+8jOmBv+WFjei/nue7reaSreaUvuWvvOiHtOeahOWNoemhv1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucHJvY2Vzc0J1ZmZlcigpLCA1KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRTb3VyY2UgPSBzb3VyY2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmmbrog73lkIjlubbnvJPlhrLljLpcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBtZXJnZUJ1ZmZlcnMoKTogeyBtZXJnZWRCdWZmZXI6IEFycmF5QnVmZmVyOyB0b3RhbER1cmF0aW9uOiBudW1iZXIgfSB7XHJcbiAgICAgICAgbGV0IHRvdGFsQnl0ZXMgPSAwO1xyXG4gICAgICAgIGxldCB0b3RhbER1cmF0aW9uID0gMDtcclxuICAgICAgICBjb25zdCBidWZmZXJzVG9NZXJnZTogQXJyYXlCdWZmZXJbXSA9IFtdO1xyXG5cclxuICAgICAgICAvLyDlkIjlubblsI/nvJPlhrLljLrnm7TliLDovr7liLDnm67moIfnvJPlhrLml7bpl7RcclxuICAgICAgICB3aGlsZSAodGhpcy5idWZmZXJRdWV1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5leHRCdWZmZXIgPSB0aGlzLmJ1ZmZlclF1ZXVlWzBdO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0RHVyYXRpb24gPSB0aGlzLmNhbGN1bGF0ZUR1cmF0aW9uKG5leHRCdWZmZXIpO1xyXG5cclxuICAgICAgICAgICAgLy8g5aaC5p6c5re75Yqg5LiL5LiA5Liq57yT5Yay5Yy65Lya6LaF6L+H5pyA5aSn57yT5Yay5pe26Ze077yM5LiU5bey57uP5pyJ6Laz5aSf5pWw5o2u77yM5YiZ5YGc5q2i5ZCI5bm2XHJcbiAgICAgICAgICAgIGlmICh0b3RhbER1cmF0aW9uID4gMCAmJiBcclxuICAgICAgICAgICAgICAgIHRvdGFsRHVyYXRpb24gKyBuZXh0RHVyYXRpb24gPiB0aGlzLm1heEJ1ZmZlckR1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYnVmZmVyc1RvTWVyZ2UucHVzaCh0aGlzLmJ1ZmZlclF1ZXVlLnNoaWZ0KCkhKTtcclxuICAgICAgICAgICAgdG90YWxCeXRlcyArPSBuZXh0QnVmZmVyLmJ5dGVMZW5ndGg7XHJcbiAgICAgICAgICAgIHRvdGFsRHVyYXRpb24gKz0gbmV4dER1cmF0aW9uO1xyXG5cclxuICAgICAgICAgICAgLy8g6L6+5Yiw55uu5qCH57yT5Yay5pe26Ze05ZCO77yM5qOA5p+l5piv5ZCm6ZyA6KaB57un57ut5ZCI5bm25bCP57yT5Yay5Yy6XHJcbiAgICAgICAgICAgIGlmICh0b3RhbER1cmF0aW9uID49IHRoaXMudGFyZ2V0QnVmZmVyRHVyYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIC8vIOWmguaenOS4i+S4gOS4que8k+WGsuWMuuW+iOWwj++8jOe7p+e7reWQiOW5tuS7pemBv+WFjemikee5geaSreaUvlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYnVmZmVyUXVldWUubGVuZ3RoID4gMCAmJiBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUR1cmF0aW9uKHRoaXMuYnVmZmVyUXVldWVbMF0pIDwgdGhpcy5tZXJnZVRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOWQiOW5tuaJgOaciemAieS4reeahOe8k+WGsuWMulxyXG4gICAgICAgIGNvbnN0IG1lcmdlZCA9IG5ldyBVaW50OEFycmF5KHRvdGFsQnl0ZXMpO1xyXG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xyXG4gICAgICAgIGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnNUb01lcmdlKSB7XHJcbiAgICAgICAgICAgIG1lcmdlZC5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSwgb2Zmc2V0KTtcclxuICAgICAgICAgICAgb2Zmc2V0ICs9IGJ1ZmZlci5ieXRlTGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHsgbWVyZ2VkQnVmZmVyOiBtZXJnZWQuYnVmZmVyLCB0b3RhbER1cmF0aW9uIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDorqHnrpdQQ03mlbDmja7nmoTmjIHnu63ml7bpl7Qo56eSKVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNhbGN1bGF0ZUR1cmF0aW9uKHBjbURhdGE6IEFycmF5QnVmZmVyKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBieXRlc1BlclNhbXBsZSA9IHRoaXMuYml0c1BlclNhbXBsZSAvIDg7XHJcbiAgICAgICAgY29uc3QgZnJhbWVDb3VudCA9IHBjbURhdGEuYnl0ZUxlbmd0aCAvIGJ5dGVzUGVyU2FtcGxlIC8gdGhpcy5udW1DaGFubmVscztcclxuICAgICAgICByZXR1cm4gZnJhbWVDb3VudCAvIHRoaXMuc2FtcGxlUmF0ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOWhq+WFhemfs+mikee8k+WGsuWMulxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGZpbGxBdWRpb0J1ZmZlcihhdWRpb0J1ZmZlcjogQXVkaW9CdWZmZXIsIHBjbURhdGE6IEFycmF5QnVmZmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgYnl0ZXNQZXJTYW1wbGUgPSB0aGlzLmJpdHNQZXJTYW1wbGUgLyA4O1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcocGNtRGF0YSk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgdGhpcy5udW1DaGFubmVsczsgY2hhbm5lbCsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoYW5uZWxEYXRhID0gYXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2hhbm5lbCk7XHJcbiAgICAgICAgICAgIGxldCBkYXRhT2Zmc2V0ID0gY2hhbm5lbCAqIGJ5dGVzUGVyU2FtcGxlO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGFubmVsRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNhbXBsZTogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYml0c1BlclNhbXBsZSA9PT0gMTYpIHtcclxuICAgICAgICAgICAgICAgICAgICBzYW1wbGUgPSB2aWV3LmdldEludDE2KGRhdGFPZmZzZXQsIHRydWUpIC8gMzI3Njg7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYml0c1BlclNhbXBsZSA9PT0gOCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNhbXBsZSA9ICh2aWV3LmdldFVpbnQ4KGRhdGFPZmZzZXQpIC0gMTI4KSAvIDEyODtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5iaXRzUGVyU2FtcGxlID09PSAzMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHNhbXBsZSA9IHZpZXcuZ2V0SW50MzIoZGF0YU9mZnNldCwgdHJ1ZSkgLyAyMTQ3NDgzNjQ4O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGJpdCBkZXB0aDogJHt0aGlzLmJpdHNQZXJTYW1wbGV9YCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNoYW5uZWxEYXRhW2ldID0gc2FtcGxlO1xyXG4gICAgICAgICAgICAgICAgZGF0YU9mZnNldCArPSBieXRlc1BlclNhbXBsZSAqIHRoaXMubnVtQ2hhbm5lbHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDlgZzmraLmkq3mlL7lubbmuIXnqbrnvJPlhrLljLpcclxuICAgICAqL1xyXG4gICAgc3RvcCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U291cmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNvdXJjZS5zdG9wKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNvdXJjZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYnVmZmVyUXVldWUgPSBbXTtcclxuICAgICAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuYnVmZmVyZWREdXJhdGlvbiA9IDA7XHJcbiAgICAgICAgdGhpcy5uZXh0UGxheVRpbWUgPSAwO1xyXG4gICAgfVxyXG59Il19
8
+ export class PCMStreamer{constructor(t=24e3,e=1,i=16){this.bufferQueue=[],this.isPlaying=!1,this.currentSource=null,this.nextPlayTime=0,this.bufferedDuration=0,this.minBufferDuration=.5,this.targetBufferDuration=1,this.maxBufferDuration=1.5,this.mergeThreshold=.05,this.sampleRate=t,this.numChannels=e,this.bitsPerSample=i;const s=window.AudioContext||window.webkitAudioContext;this.audioContext=new s,document.addEventListener("click",(()=>{"suspended"===this.audioContext.state&&this.audioContext.resume()}),{once:!0})}write(t){if(0===t.byteLength)return;const e=this.calculateDuration(t);this.bufferedDuration+=e,this.bufferQueue.push(t),!this.isPlaying&&this.bufferedDuration>=this.minBufferDuration&&this.startPlayback()}startPlayback(){this.isPlaying||(this.isPlaying=!0,this.nextPlayTime=this.audioContext.currentTime,this.processBuffer())}processBuffer(){if("running"!==this.audioContext.state)return void this.audioContext.resume().then((()=>{setTimeout((()=>this.processBuffer()),50)}));if(this.bufferedDuration<this.minBufferDuration)return void(this.isPlaying=!1);const{mergedBuffer:t,totalDuration:e}=this.mergeBuffers();this.bufferedDuration-=e;const i=t.byteLength/(this.bitsPerSample/8)/this.numChannels,s=this.audioContext.createBuffer(this.numChannels,i,this.sampleRate);this.fillAudioBuffer(s,t);const r=this.audioContext.createBufferSource();r.buffer=s,r.connect(this.audioContext.destination);const n=this.audioContext.currentTime;this.nextPlayTime=Math.max(this.nextPlayTime,n),r.start(this.nextPlayTime),this.nextPlayTime+=s.duration,r.onended=()=>{this.currentSource=null,setTimeout((()=>this.processBuffer()),5)},this.currentSource=r}mergeBuffers(){let t=0,e=0;const i=[];for(;this.bufferQueue.length>0;){const s=this.bufferQueue[0],r=this.calculateDuration(s);if(e>0&&e+r>this.maxBufferDuration)break;if(i.push(this.bufferQueue.shift()),t+=s.byteLength,e+=r,e>=this.targetBufferDuration){if(this.bufferQueue.length>0&&this.calculateDuration(this.bufferQueue[0])<this.mergeThreshold)continue;break}}const s=new Uint8Array(t);let r=0;for(const t of i)s.set(new Uint8Array(t),r),r+=t.byteLength;return{mergedBuffer:s.buffer,totalDuration:e}}calculateDuration(t){const e=this.bitsPerSample/8;return t.byteLength/e/this.numChannels/this.sampleRate}fillAudioBuffer(t,e){const i=this.bitsPerSample/8,s=new DataView(e);for(let e=0;e<this.numChannels;e++){const r=t.getChannelData(e);let n=e*i;for(let t=0;t<r.length;t++){let e;if(16===this.bitsPerSample)e=s.getInt16(n,!0)/32768;else if(8===this.bitsPerSample)e=(s.getUint8(n)-128)/128;else{if(32!==this.bitsPerSample)throw new Error(`Unsupported bit depth: ${this.bitsPerSample}`);e=s.getInt32(n,!0)/2147483648}r[t]=e,n+=i*this.numChannels}}}stop(){this.currentSource&&(this.currentSource.stop(),this.currentSource=null),this.bufferQueue=[],this.isPlaying=!1,this.bufferedDuration=0,this.nextPlayTime=0}}
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL3ZvaWNlL2xpYi9hdWRpby9zdHJlYW1lci5wY20ubWpz`
10
+
@@ -1,38 +1,10 @@
1
- export function pcmtoWav(pcmsrt, sampleRate, numChannels, bitsPerSample) {
2
- //参数->(base64编码的pcm流,采样频率,声道数,采样位数)
3
- let header = {
4
- // OFFS SIZE NOTES
5
- chunkId: [0x52, 0x49, 0x46, 0x46], // 0 4 "RIFF" = 0x52494646
6
- chunkSize: 0, // 4 4 36+SubChunk2Size = 4+(8+SubChunk1Size)+(8+SubChunk2Size)
7
- format: [0x57, 0x41, 0x56, 0x45], // 8 4 "WAVE" = 0x57415645
8
- subChunk1Id: [0x66, 0x6d, 0x74, 0x20], // 12 4 "fmt " = 0x666d7420
9
- subChunk1Size: 16, // 16 4 16 for PCM
10
- audioFormat: 1, // 20 2 PCM = 1
11
- numChannels: numChannels || 1, // 22 2 Mono = 1, Stereo = 2...
12
- sampleRate: sampleRate || 16000, // 24 4 8000, 44100...
13
- byteRate: 0, // 28 4 SampleRate*NumChannels*BitsPerSample/8
14
- blockAlign: 0, // 32 2 NumChannels*BitsPerSample/8
15
- bitsPerSample: bitsPerSample || 16, // 34 2 8 bits = 8, 16 bits = 16
16
- subChunk2Id: [0x64, 0x61, 0x74, 0x61], // 36 4 "data" = 0x64617461
17
- subChunk2Size: 0, // 40 4 data size = NumSamples*NumChannels*BitsPerSample/8
18
- };
19
- function u32ToArray(i) {
20
- return [i & 0xff, (i >> 8) & 0xff, (i >> 16) & 0xff, (i >> 24) & 0xff];
21
- }
22
- function u16ToArray(i) {
23
- return [i & 0xff, (i >> 8) & 0xff];
24
- }
25
- let pcm = new Uint8Array(pcmsrt);
26
- header.blockAlign = (header.numChannels * header.bitsPerSample) >> 3;
27
- header.byteRate = header.blockAlign * header.sampleRate;
28
- header.subChunk2Size = pcm.length * (header.bitsPerSample >> 3);
29
- header.chunkSize = 36 + header.subChunk2Size;
30
- let wavHeader = header.chunkId.concat(u32ToArray(header.chunkSize), header.format, header.subChunk1Id, u32ToArray(header.subChunk1Size), u16ToArray(header.audioFormat), u16ToArray(header.numChannels), u32ToArray(header.sampleRate), u32ToArray(header.byteRate), u16ToArray(header.blockAlign), u16ToArray(header.bitsPerSample), header.subChunk2Id, u32ToArray(header.subChunk2Size));
31
- let wavHeaderUnit8 = new Uint8Array(wavHeader);
32
- let mergedArray = new Uint8Array(wavHeaderUnit8.length + pcm.length);
33
- mergedArray.set(wavHeaderUnit8);
34
- mergedArray.set(pcm, wavHeaderUnit8.length);
35
- let blob = new Blob([mergedArray], { type: 'audio/wav' });
36
- return blob;
37
- }
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGNtMndhdi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvYWlnYy92b2ljZS9saWIvcGNtMndhdi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxNQUFNLFVBQVUsUUFBUSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGFBQWE7SUFDckUsbUNBQW1DO0lBQ25DLElBQUksTUFBTSxHQUFHO1FBQ1gsa0JBQWtCO1FBQ2xCLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLGdDQUFnQztRQUNuRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLHFFQUFxRTtRQUNuRixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxnQ0FBZ0M7UUFDbEUsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsZ0NBQWdDO1FBQ3ZFLGFBQWEsRUFBRSxFQUFFLEVBQUUsdUJBQXVCO1FBQzFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsb0JBQW9CO1FBQ3BDLFdBQVcsRUFBRSxXQUFXLElBQUksQ0FBQyxFQUFFLG9DQUFvQztRQUNuRSxVQUFVLEVBQUUsVUFBVSxJQUFJLEtBQUssRUFBRSwyQkFBMkI7UUFDNUQsUUFBUSxFQUFFLENBQUMsRUFBRSxtREFBbUQ7UUFDaEUsVUFBVSxFQUFFLENBQUMsRUFBRSx3Q0FBd0M7UUFDdkQsYUFBYSxFQUFFLGFBQWEsSUFBSSxFQUFFLEVBQUUscUNBQXFDO1FBQ3pFLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLGdDQUFnQztRQUN2RSxhQUFhLEVBQUUsQ0FBQyxFQUFFLCtEQUErRDtLQUNsRixDQUFBO0lBQ0QsU0FBUyxVQUFVLENBQUMsQ0FBQztRQUNuQixPQUFPLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFBO0lBQ3hFLENBQUM7SUFDRCxTQUFTLFVBQVUsQ0FBQyxDQUFDO1FBQ25CLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFBO0lBQ3BDLENBQUM7SUFDRCxJQUFJLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNoQyxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3BFLE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFBO0lBQ3ZELE1BQU0sQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDL0QsTUFBTSxDQUFDLFNBQVMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQTtJQUU1QyxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDbkMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFDNUIsTUFBTSxDQUFDLE1BQU0sRUFDYixNQUFNLENBQUMsV0FBVyxFQUNsQixVQUFVLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUNoQyxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUM5QixVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUM5QixVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUM3QixVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUMzQixVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUM3QixVQUFVLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUNoQyxNQUFNLENBQUMsV0FBVyxFQUNsQixVQUFVLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUNqQyxDQUFBO0lBQ0QsSUFBSSxjQUFjLEdBQUcsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUE7SUFFOUMsSUFBSSxXQUFXLEdBQUcsSUFBSSxVQUFVLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDcEUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUMvQixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDM0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFBO0lBQ3pELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5leHBvcnQgZnVuY3Rpb24gcGNtdG9XYXYocGNtc3J0LCBzYW1wbGVSYXRlLCBudW1DaGFubmVscywgYml0c1BlclNhbXBsZSkge1xyXG4gIC8v5Y+C5pWwLT7vvIhiYXNlNjTnvJbnoIHnmoRwY23mtYHvvIzph4fmoLfpopHnjofvvIzlo7DpgZPmlbDvvIzph4fmoLfkvY3mlbDvvIlcclxuICBsZXQgaGVhZGVyID0ge1xyXG4gICAgLy8gT0ZGUyBTSVpFIE5PVEVTXHJcbiAgICBjaHVua0lkOiBbMHg1MiwgMHg0OSwgMHg0NiwgMHg0Nl0sIC8vIDAgICAgNCAgICBcIlJJRkZcIiA9IDB4NTI0OTQ2NDZcclxuICAgIGNodW5rU2l6ZTogMCwgLy8gNCAgICA0ICAgIDM2K1N1YkNodW5rMlNpemUgPSA0Kyg4K1N1YkNodW5rMVNpemUpKyg4K1N1YkNodW5rMlNpemUpXHJcbiAgICBmb3JtYXQ6IFsweDU3LCAweDQxLCAweDU2LCAweDQ1XSwgLy8gOCAgICA0ICAgIFwiV0FWRVwiID0gMHg1NzQxNTY0NVxyXG4gICAgc3ViQ2h1bmsxSWQ6IFsweDY2LCAweDZkLCAweDc0LCAweDIwXSwgLy8gMTIgICA0ICAgIFwiZm10IFwiID0gMHg2NjZkNzQyMFxyXG4gICAgc3ViQ2h1bmsxU2l6ZTogMTYsIC8vIDE2ICAgNCAgICAxNiBmb3IgUENNXHJcbiAgICBhdWRpb0Zvcm1hdDogMSwgLy8gMjAgICAyICAgIFBDTSA9IDFcclxuICAgIG51bUNoYW5uZWxzOiBudW1DaGFubmVscyB8fCAxLCAvLyAyMiAgIDIgICAgTW9ubyA9IDEsIFN0ZXJlbyA9IDIuLi5cclxuICAgIHNhbXBsZVJhdGU6IHNhbXBsZVJhdGUgfHwgMTYwMDAsIC8vIDI0ICAgNCAgICA4MDAwLCA0NDEwMC4uLlxyXG4gICAgYnl0ZVJhdGU6IDAsIC8vIDI4ICAgNCAgICBTYW1wbGVSYXRlKk51bUNoYW5uZWxzKkJpdHNQZXJTYW1wbGUvOFxyXG4gICAgYmxvY2tBbGlnbjogMCwgLy8gMzIgICAyICAgIE51bUNoYW5uZWxzKkJpdHNQZXJTYW1wbGUvOFxyXG4gICAgYml0c1BlclNhbXBsZTogYml0c1BlclNhbXBsZSB8fCAxNiwgLy8gMzQgICAyICAgIDggYml0cyA9IDgsIDE2IGJpdHMgPSAxNlxyXG4gICAgc3ViQ2h1bmsySWQ6IFsweDY0LCAweDYxLCAweDc0LCAweDYxXSwgLy8gMzYgICA0ICAgIFwiZGF0YVwiID0gMHg2NDYxNzQ2MVxyXG4gICAgc3ViQ2h1bmsyU2l6ZTogMCwgLy8gNDAgICA0ICAgIGRhdGEgc2l6ZSA9IE51bVNhbXBsZXMqTnVtQ2hhbm5lbHMqQml0c1BlclNhbXBsZS84XHJcbiAgfVxyXG4gIGZ1bmN0aW9uIHUzMlRvQXJyYXkoaSkge1xyXG4gICAgcmV0dXJuIFtpICYgMHhmZiwgKGkgPj4gOCkgJiAweGZmLCAoaSA+PiAxNikgJiAweGZmLCAoaSA+PiAyNCkgJiAweGZmXVxyXG4gIH1cclxuICBmdW5jdGlvbiB1MTZUb0FycmF5KGkpIHtcclxuICAgIHJldHVybiBbaSAmIDB4ZmYsIChpID4+IDgpICYgMHhmZl1cclxuICB9XHJcbiAgbGV0IHBjbSA9IG5ldyBVaW50OEFycmF5KHBjbXNydClcclxuICBoZWFkZXIuYmxvY2tBbGlnbiA9IChoZWFkZXIubnVtQ2hhbm5lbHMgKiBoZWFkZXIuYml0c1BlclNhbXBsZSkgPj4gM1xyXG4gIGhlYWRlci5ieXRlUmF0ZSA9IGhlYWRlci5ibG9ja0FsaWduICogaGVhZGVyLnNhbXBsZVJhdGVcclxuICBoZWFkZXIuc3ViQ2h1bmsyU2l6ZSA9IHBjbS5sZW5ndGggKiAoaGVhZGVyLmJpdHNQZXJTYW1wbGUgPj4gMylcclxuICBoZWFkZXIuY2h1bmtTaXplID0gMzYgKyBoZWFkZXIuc3ViQ2h1bmsyU2l6ZVxyXG5cclxuICBsZXQgd2F2SGVhZGVyID0gaGVhZGVyLmNodW5rSWQuY29uY2F0KFxyXG4gICAgdTMyVG9BcnJheShoZWFkZXIuY2h1bmtTaXplKSxcclxuICAgIGhlYWRlci5mb3JtYXQsXHJcbiAgICBoZWFkZXIuc3ViQ2h1bmsxSWQsXHJcbiAgICB1MzJUb0FycmF5KGhlYWRlci5zdWJDaHVuazFTaXplKSxcclxuICAgIHUxNlRvQXJyYXkoaGVhZGVyLmF1ZGlvRm9ybWF0KSxcclxuICAgIHUxNlRvQXJyYXkoaGVhZGVyLm51bUNoYW5uZWxzKSxcclxuICAgIHUzMlRvQXJyYXkoaGVhZGVyLnNhbXBsZVJhdGUpLFxyXG4gICAgdTMyVG9BcnJheShoZWFkZXIuYnl0ZVJhdGUpLFxyXG4gICAgdTE2VG9BcnJheShoZWFkZXIuYmxvY2tBbGlnbiksXHJcbiAgICB1MTZUb0FycmF5KGhlYWRlci5iaXRzUGVyU2FtcGxlKSxcclxuICAgIGhlYWRlci5zdWJDaHVuazJJZCxcclxuICAgIHUzMlRvQXJyYXkoaGVhZGVyLnN1YkNodW5rMlNpemUpXHJcbiAgKVxyXG4gIGxldCB3YXZIZWFkZXJVbml0OCA9IG5ldyBVaW50OEFycmF5KHdhdkhlYWRlcilcclxuXHJcbiAgbGV0IG1lcmdlZEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkod2F2SGVhZGVyVW5pdDgubGVuZ3RoICsgcGNtLmxlbmd0aClcclxuICBtZXJnZWRBcnJheS5zZXQod2F2SGVhZGVyVW5pdDgpXHJcbiAgbWVyZ2VkQXJyYXkuc2V0KHBjbSwgd2F2SGVhZGVyVW5pdDgubGVuZ3RoKVxyXG4gIGxldCBibG9iID0gbmV3IEJsb2IoW21lcmdlZEFycmF5XSwgeyB0eXBlOiAnYXVkaW8vd2F2JyB9KVxyXG4gIHJldHVybiBibG9iXHJcbn1cclxuIl19
1
+
2
+ /**
3
+ * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
+ * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
+ * 保留所有权利 All Rights Reserved.
6
+ * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/aigc/voice/lib/pcm2wav.mjs
7
+ */
8
+ export function pcmtoWav(e,n,u,r){let a={chunkId:[82,73,70,70],chunkSize:0,format:[87,65,86,69],subChunk1Id:[102,109,116,32],subChunk1Size:16,audioFormat:1,numChannels:u||1,sampleRate:n||16e3,byteRate:0,blockAlign:0,bitsPerSample:r||16,subChunk2Id:[100,97,116,97],subChunk2Size:0};function u32ToArray(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function u16ToArray(e){return[255&e,e>>8&255]}let t=new Uint8Array(e);a.blockAlign=a.numChannels*a.bitsPerSample>>3,a.byteRate=a.blockAlign*a.sampleRate,a.subChunk2Size=t.length*(a.bitsPerSample>>3),a.chunkSize=36+a.subChunk2Size;let o=a.chunkId.concat(u32ToArray(a.chunkSize),a.format,a.subChunk1Id,u32ToArray(a.subChunk1Size),u16ToArray(a.audioFormat),u16ToArray(a.numChannels),u32ToArray(a.sampleRate),u32ToArray(a.byteRate),u16ToArray(a.blockAlign),u16ToArray(a.bitsPerSample),a.subChunk2Id,u32ToArray(a.subChunk2Size)),i=new Uint8Array(o),l=new Uint8Array(i.length+t.length);return l.set(i),l.set(t,i.length),new Blob([l],{type:"audio/wav"})}
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL3ZvaWNlL2xpYi9wY20yd2F2Lm1qcw==`
10
+