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.
- package/LICENSE.md +8 -0
- package/README.md +37 -37
- package/esm2022/fmode-ng.mjs +10 -5
- package/esm2022/lib/aigc/agent/fm-agent-task/fm-agent-task.component.mjs +8 -92
- package/esm2022/lib/aigc/agent/index.mjs +10 -3
- package/esm2022/lib/aigc/avatar/avatar.module.mjs +10 -45
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/avatar.role.mjs +10 -2
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.mjs +10 -315
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/index.mjs +10 -3
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/role-points.class.mjs +10 -57
- package/esm2022/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.mjs +10 -98
- package/esm2022/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs +10 -107
- package/esm2022/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +10 -113
- package/esm2022/lib/aigc/avatar/index.mjs +10 -8
- package/esm2022/lib/aigc/avatar/interface-avatar-role.mjs +10 -2
- package/esm2022/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs +8 -164
- package/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs +10 -49
- package/esm2022/lib/aigc/chat/chat-header-area/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-list/chat-list.component.mjs +8 -155
- package/esm2022/lib/aigc/chat/chat-list/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-message-area/comp-message-area.component.mjs +10 -40
- package/esm2022/lib/aigc/chat/chat-message-area/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-message-card/comp-message-card.component.mjs +10 -140
- package/esm2022/lib/aigc/chat/chat-message-card/duration-str.pipe.mjs +10 -29
- package/esm2022/lib/aigc/chat/chat-message-card/index.mjs +10 -3
- package/esm2022/lib/aigc/chat/chat-modal-input/index.mjs +10 -3
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.mjs +8 -193
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-input.component.mjs +10 -331
- package/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs +8 -249
- package/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs +10 -83
- package/esm2022/lib/aigc/chat/comp-role-prompt/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/index.mjs +10 -8
- package/esm2022/lib/aigc/comp-markdown-preview/clipboard.service.mjs +10 -82
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-parse.mjs +8 -367
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.component.mjs +10 -51
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.module.mjs +10 -24
- package/esm2022/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.mjs +10 -115
- package/esm2022/lib/aigc/index.mjs +10 -14
- package/esm2022/lib/aigc/service-fmai/fmai.service.mjs +10 -21
- package/esm2022/lib/aigc/service-fmai/service-chat/chat-class.mjs +10 -2
- package/esm2022/lib/aigc/service-fmai/service-chat/chat.service.mjs +8 -174
- package/esm2022/lib/aigc/service-fmai/service-chat/index.mjs +10 -7
- package/esm2022/lib/aigc/service-fmai/service-chat/mask-list.mjs +9 -194
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.mjs +10 -27
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.mjs +10 -27
- package/esm2022/lib/aigc/service-fmai/service-chat/utilnow.pipe.mjs +10 -68
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine-func.mjs +9 -162
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine-work.mjs +10 -68
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine.service.mjs +8 -313
- package/esm2022/lib/aigc/service-fmai/service-imagine/index.mjs +10 -4
- package/esm2022/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.mjs +10 -62
- package/esm2022/lib/aigc/story/fm-story-card/fm-story-card.component.mjs +10 -87
- package/esm2022/lib/aigc/story/fm-story-list/fm-story-list.component.mjs +10 -345
- package/esm2022/lib/aigc/story/fm-story-list/story-preview.mjs +10 -81
- package/esm2022/lib/aigc/story/fm-story-loader/fm-story-loader.component.mjs +10 -152
- package/esm2022/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.mjs +10 -42
- package/esm2022/lib/aigc/story/index.mjs +10 -6
- package/esm2022/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.mjs +10 -47
- package/esm2022/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.mjs +10 -95
- package/esm2022/lib/aigc/story/modal-chat-story/modal-chat-story.component.mjs +10 -253
- package/esm2022/lib/aigc/story/story.service.mjs +10 -35
- package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +10 -636
- package/esm2022/lib/aigc/voice/index.mjs +10 -7
- package/esm2022/lib/aigc/voice/lib/audio/audio.player.mjs +10 -55
- package/esm2022/lib/aigc/voice/lib/audio/audio.streamer.mjs +10 -2
- package/esm2022/lib/aigc/voice/lib/audio/streamer.microsoft.mjs +10 -96
- package/esm2022/lib/aigc/voice/lib/audio/streamer.pcm.mjs +8 -177
- package/esm2022/lib/aigc/voice/lib/pcm2wav.mjs +10 -38
- package/esm2022/lib/aigc/voice/lib/recorder/extension-waveview.mjs +10 -215
- package/esm2022/lib/aigc/voice/lib/resample.mjs +10 -34
- package/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs +10 -189
- package/esm2022/lib/aigc/voice/tts/index.mjs +10 -5
- package/esm2022/lib/aigc/voice/tts/int-tts-provider.mjs +10 -2
- package/esm2022/lib/aigc/voice/tts/provider-doubao.mjs +8 -346
- package/esm2022/lib/code/fm-codemirror/fm-codemirror.component.mjs +8 -342
- package/esm2022/lib/code/index.mjs +10 -2
- package/esm2022/lib/core/agent/chat/completion/fmode-completion.mjs +8 -430
- package/esm2022/lib/core/agent/chat/completion/index.mjs +10 -2
- package/esm2022/lib/core/agent/chat/completion/int-gpt-chat-options.mjs +10 -2
- package/esm2022/lib/core/agent/chat/fmode-chat.mjs +8 -617
- package/esm2022/lib/core/agent/chat/index.mjs +10 -4
- package/esm2022/lib/core/agent/chat/interface.mjs +10 -2
- package/esm2022/lib/core/agent/index.mjs +10 -6
- package/esm2022/lib/core/agent/prompt/agent.prompt.mjs +10 -133
- package/esm2022/lib/core/agent/prompt/index.mjs +10 -2
- package/esm2022/lib/core/agent/prompt/prompt-util.mjs +10 -16
- package/esm2022/lib/core/agent/story/agent.story.mjs +10 -64
- package/esm2022/lib/core/agent/story/index.mjs +10 -2
- package/esm2022/lib/core/agent/task/agent.task.mjs +10 -90
- package/esm2022/lib/core/agent/task/index.mjs +10 -2
- package/esm2022/lib/core/agent/waiting/index.mjs +10 -3
- package/esm2022/lib/core/agent/waiting/loading/loading.ctrl.mjs +10 -279
- package/esm2022/lib/core/agent/waiting/tips/tips.ctrl.mjs +8 -190
- package/esm2022/lib/core/index.mjs +10 -4
- package/esm2022/lib/core/parse/datatype/acl.mjs +10 -57
- package/esm2022/lib/core/parse/datatype/file.mjs +10 -69
- package/esm2022/lib/core/parse/datatype/geopoint.mjs +10 -57
- package/esm2022/lib/core/parse/datatype/relation.mjs +10 -56
- package/esm2022/lib/core/parse/fmode.cloud.mjs +10 -0
- package/esm2022/lib/core/parse/fmode.object.mjs +10 -232
- package/esm2022/lib/core/parse/fmode.parse.mjs +10 -84
- package/esm2022/lib/core/parse/fmode.query.mjs +8 -500
- package/esm2022/lib/core/parse/fmode.user.mjs +10 -275
- package/esm2022/lib/core/parse/index.mjs +10 -5
- package/esm2022/lib/core/parse/types.mjs +10 -2
- package/esm2022/lib/core/voice/index.mjs +10 -3
- package/esm2022/lib/core/voice/tts/index.mjs +10 -2
- package/esm2022/lib/icon/filetype/audio.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/avatar.svg.mjs +10 -14
- package/esm2022/lib/icon/filetype/chat.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/docx.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/file.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/filetype.pipe.mjs +10 -57
- package/esm2022/lib/icon/filetype/index.mjs +10 -12
- package/esm2022/lib/icon/filetype/md.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/pdf.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/pptx.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/svgtoblob.mjs +10 -8
- package/esm2022/lib/icon/filetype/video.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/xlsx.svg.mjs +10 -3
- package/esm2022/lib/icon/index.mjs +10 -2
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.component.mjs +10 -209
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.module.mjs +10 -33
- package/esm2022/lib/map/index.mjs +10 -4
- package/esm2022/lib/map/map.module.mjs +10 -61
- package/esm2022/lib/map/page-loca-scatter/page-loca-scatter.component.mjs +10 -132
- package/esm2022/lib/map/page-map.start/page-map.start.component.mjs +8 -115
- package/esm2022/lib/map/page-plan-route/page-plan-route.component.mjs +8 -118
- package/esm2022/lib/nova-cloud/index.mjs +10 -3
- package/esm2022/lib/nova-cloud/ncloud-api-func.mjs +10 -91
- package/esm2022/lib/nova-cloud/nova-cloud.service.mjs +10 -53
- package/esm2022/lib/payment/index.mjs +10 -2
- package/esm2022/lib/payment/payment/payment.component.mjs +10 -543
- package/esm2022/lib/payment/payment.service.mjs +10 -202
- package/esm2022/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.mjs +10 -48
- package/esm2022/lib/person/comp-person-item/comp-person-item.component.mjs +10 -29
- package/esm2022/lib/person/comp-person-story/comp-person-story.component.mjs +10 -211
- package/esm2022/lib/person/edit-upload/edit-upload.component.mjs +8 -412
- package/esm2022/lib/person/edit-upload/edit-upload.module.mjs +10 -50
- package/esm2022/lib/person/index.mjs +10 -5
- package/esm2022/lib/person/modal-person-select/modal-person-select.component.mjs +10 -144
- package/esm2022/lib/person/modal-user-verify/secret-text.pipe.mjs +10 -41
- package/esm2022/lib/person/modal-user-verify/user-verify.component.mjs +10 -595
- package/esm2022/lib/person/person-detail/person-detail.component.mjs +10 -172
- package/esm2022/lib/person/person.service.mjs +8 -193
- package/esm2022/lib/platform/cross.service.mjs +10 -62
- package/esm2022/lib/platform/index.mjs +10 -2
- package/esm2022/lib/social/index.mjs +10 -2
- package/esm2022/lib/social/wechat/wechat-jssdk.service.mjs +8 -230
- package/esm2022/lib/storage/comp-hwobs-manager/hwobs-manager.component.mjs +10 -59
- package/esm2022/lib/storage/index.mjs +10 -5
- package/esm2022/lib/storage/service-hwobs/hwobs.service.mjs +8 -131
- package/esm2022/lib/storage/service-hwobs/index.mjs +10 -3
- package/esm2022/lib/storage/service-hwobs/typings/esdk-obs-browser.mjs +1 -1
- package/esm2022/lib/storage/service-upload/index.mjs +10 -2
- package/esm2022/lib/storage/service-upload/nova-upload.service.mjs +8 -513
- package/esm2022/lib/storage/service-upload/util-file-md5.mjs +10 -28
- package/esm2022/lib/storage/service-upload/util-file-metadata.mjs +10 -93
- package/esm2022/lib/storage/storage.module.mjs +10 -42
- package/esm2022/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.mjs +10 -72
- package/esm2022/lib/text/fm-article-editor/article.service.mjs +10 -237
- package/esm2022/lib/text/fm-article-editor/comp-upload-book-banners/comp-upload-book-banners.component.mjs +8 -72
- package/esm2022/lib/text/fm-article-editor/draft.service.mjs +10 -207
- package/esm2022/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.mjs +8 -227
- package/esm2022/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.mjs +10 -303
- package/esm2022/lib/text/fm-article-editor/fm-article-editor.component.mjs +8 -371
- package/esm2022/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.mjs +10 -94
- package/esm2022/lib/text/fm-article-editor/fm-article-outline-leftitem/fm-article-outline-leftitem.component.mjs +10 -36
- package/esm2022/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.mjs +10 -281
- package/esm2022/lib/text/fm-article-editor/fm-article-write-options/fm-article-write-options.component.mjs +10 -72
- package/esm2022/lib/text/fm-article-editor/outline-count.pipe.mjs +10 -22
- package/esm2022/lib/text/fm-article-editor/prompt/prompt-insertion-article.mjs +10 -169
- package/esm2022/lib/text/fm-article-editor/task-article-generation.mjs +10 -69
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-draft-create.mjs +10 -65
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline-edit.mjs +10 -55
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline.mjs +10 -142
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-preview.mjs +10 -35
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-writing-options.mjs +10 -81
- package/esm2022/lib/text/fm-article-editor/tasks/task-document-select.mjs +10 -50
- package/esm2022/lib/text/fm-text-quill/fm-text-quill.component.mjs +10 -145
- package/esm2022/lib/text/index.mjs +10 -4
- package/esm2022/lib/user/account/account.service.mjs +10 -222
- package/esm2022/lib/user/captcha/captcha.component.mjs +10 -135
- package/esm2022/lib/user/comp-user-avatar/comp-user-avatar.component.mjs +10 -66
- package/esm2022/lib/user/index.mjs +10 -17
- package/esm2022/lib/user/login/auth.guard.mjs +10 -28
- package/esm2022/lib/user/login/auth.service.mjs +8 -433
- package/esm2022/lib/user/login/login.component.mjs +10 -916
- package/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs +10 -311
- package/esm2022/lib/user/profile/auth-profile.guard.mjs +10 -27
- package/esm2022/lib/user/profile/auth-profile.service.mjs +10 -122
- package/esm2022/lib/user/profile/profile-bind/profile-bind.component.mjs +10 -164
- package/esm2022/lib/user/profile/profile-bind/profile-confirm-modal.component.mjs +10 -79
- package/esm2022/lib/user/profile/profile.module.mjs +10 -54
- package/esm2022/lib/user/staff/index.mjs +10 -4
- package/esm2022/lib/user/staff/staff.guard.mjs +10 -26
- package/esm2022/lib/user/staff/staff.module.mjs +10 -18
- package/esm2022/lib/user/staff/staff.service.mjs +10 -85
- package/esm2022/lib/user/user-name.pipe.mjs +10 -29
- package/esm2022/lib/user/user.module.mjs +10 -102
- package/esm2022/lib/video/fm-video/fm-video.component.mjs +10 -67
- package/esm2022/lib/video/index.mjs +10 -2
- package/esm2022/public-api.mjs +10 -21
- package/fesm2022/fmode-ng.mjs +7 -19788
- package/fesm2022/fmode-ng.mjs.map +1 -1
- package/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.d.ts +2 -2
- package/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.d.ts +2 -2
- package/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.d.ts +2 -2
- package/lib/aigc/chat/chat-list/chat-list.component.d.ts +3 -2
- package/lib/aigc/chat/chat-message-card/comp-message-card.component.d.ts +3 -3
- package/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.d.ts +2 -2
- package/lib/aigc/chat/chat-modal-input/modal-input.component.d.ts +3 -3
- package/lib/aigc/service-fmai/service-imagine/imagine-func.d.ts +3 -3
- package/lib/aigc/service-fmai/service-imagine/imagine-work.d.ts +4 -4
- package/lib/aigc/service-fmai/service-imagine/imagine.service.d.ts +6 -6
- package/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.d.ts +2 -2
- package/lib/aigc/story/fm-story-card/fm-story-card.component.d.ts +2 -1
- package/lib/aigc/story/fm-story-list/fm-story-list.component.d.ts +6 -6
- package/lib/aigc/story/fm-story-list/story-preview.d.ts +4 -4
- package/lib/aigc/story/fm-story-loader/fm-story-loader.component.d.ts +3 -3
- package/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.d.ts +2 -2
- package/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.d.ts +3 -2
- package/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.d.ts +3 -2
- package/lib/aigc/story/modal-chat-story/modal-chat-story.component.d.ts +6 -6
- package/lib/aigc/story/story.service.d.ts +3 -2
- package/lib/aigc/voice/tts/fmode-tts-class.d.ts +2 -2
- package/lib/core/agent/chat/fmode-chat.d.ts +11 -11
- package/lib/core/agent/story/agent.story.d.ts +8 -8
- package/lib/core/parse/datatype/geopoint.d.ts +5 -1
- package/lib/core/parse/fmode.cloud.d.ts +32 -0
- package/lib/core/parse/fmode.object.d.ts +2 -2
- package/lib/core/parse/fmode.parse.d.ts +15 -9
- package/lib/core/parse/fmode.query.d.ts +41 -2
- package/lib/core/parse/fmode.user.d.ts +1 -0
- package/lib/core/parse/index.d.ts +1 -0
- package/lib/core/parse/types.d.ts +2 -0
- package/lib/map/comp-poi-picker/comp-poi-picker.component.d.ts +5 -5
- package/lib/payment/payment/payment.component.d.ts +3 -3
- package/lib/payment/payment.service.d.ts +4 -4
- package/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.d.ts +2 -1
- package/lib/person/comp-person-item/comp-person-item.component.d.ts +2 -1
- package/lib/person/comp-person-story/comp-person-story.component.d.ts +13 -13
- package/lib/person/edit-upload/edit-upload.component.d.ts +1 -1
- package/lib/person/modal-person-select/modal-person-select.component.d.ts +5 -5
- package/lib/person/modal-user-verify/user-verify.component.d.ts +5 -5
- package/lib/person/person-detail/person-detail.component.d.ts +4 -4
- package/lib/person/person.service.d.ts +7 -7
- package/lib/storage/service-hwobs/hwobs.service.d.ts +4 -5
- package/lib/storage/service-upload/nova-upload.service.d.ts +5 -5
- package/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.d.ts +2 -1
- package/lib/text/fm-article-editor/article.service.d.ts +12 -12
- package/lib/text/fm-article-editor/draft.service.d.ts +5 -5
- package/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.d.ts +3 -2
- package/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.d.ts +16 -17
- package/lib/text/fm-article-editor/fm-article-editor.component.d.ts +3 -3
- package/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.d.ts +11 -10
- package/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.d.ts +2 -2
- package/lib/text/fm-article-editor/prompt/prompt-insertion-article.d.ts +3 -3
- package/lib/text/fm-article-editor/task-article-generation.d.ts +5 -4
- package/lib/text/fm-article-editor/tasks/task-article-draft-create.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-article-outline-edit.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-article-outline.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-article-preview.d.ts +2 -1
- package/lib/text/fm-article-editor/tasks/task-article-writing-options.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-document-select.d.ts +3 -3
- package/lib/user/account/account.service.d.ts +2 -2
- package/lib/user/comp-user-avatar/comp-user-avatar.component.d.ts +2 -2
- package/lib/user/login/auth.service.d.ts +5 -5
- package/lib/user/login/login.component.d.ts +3 -3
- package/lib/user/profile/auth-profile.service.d.ts +8 -8
- package/lib/user/profile/profile-bind/profile-bind.component.d.ts +7 -7
- package/lib/user/profile/profile-bind/profile-confirm-modal.component.d.ts +2 -2
- package/lib/user/staff/staff.service.d.ts +3 -3
- package/lib/user/user-name.pipe.d.ts +2 -2
- package/package.json +12 -18
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
2
|
-
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
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
|
-
*
|
|
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(
|
|
30
|
-
|
|
31
|
-
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
+
|