fmode-ng 0.0.39 → 0.0.41
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/esm2022/fmode-ng.mjs +5 -10
- package/esm2022/lib/aigc/agent/agent.prompt.mjs +122 -10
- package/esm2022/lib/aigc/agent/index.mjs +2 -10
- package/esm2022/lib/aigc/avatar/avatar.module.mjs +45 -10
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/avatar.role.mjs +2 -10
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.mjs +315 -10
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/index.mjs +3 -10
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/role-points.class.mjs +57 -10
- package/esm2022/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.mjs +97 -10
- package/esm2022/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs +104 -10
- package/esm2022/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +111 -10
- package/esm2022/lib/aigc/avatar/index.mjs +8 -10
- package/esm2022/lib/aigc/avatar/interface-avatar-role.mjs +2 -10
- package/esm2022/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs +166 -8
- package/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs +36 -10
- package/esm2022/lib/aigc/chat/chat-header-area/index.mjs +2 -10
- package/esm2022/lib/aigc/chat/chat-list/chat-list.component.mjs +141 -8
- package/esm2022/lib/aigc/chat/chat-list/index.mjs +2 -10
- package/esm2022/lib/aigc/chat/chat-message-area/comp-message-area.component.mjs +40 -10
- package/esm2022/lib/aigc/chat/chat-message-area/index.mjs +2 -10
- package/esm2022/lib/aigc/chat/chat-message-card/comp-message-card.component.mjs +92 -10
- package/esm2022/lib/aigc/chat/chat-message-card/index.mjs +2 -10
- package/esm2022/lib/aigc/chat/chat-modal-input/index.mjs +2 -10
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.mjs +207 -8
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-input.component.mjs +236 -10
- package/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs +137 -10
- package/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs +69 -10
- package/esm2022/lib/aigc/chat/comp-role-prompt/index.mjs +2 -10
- package/esm2022/lib/aigc/chat/index.mjs +8 -10
- package/esm2022/lib/aigc/comp-markdown-preview/clipboard.service.mjs +82 -10
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-parse.mjs +269 -8
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.component.mjs +51 -10
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.module.mjs +24 -10
- package/esm2022/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.mjs +94 -10
- package/esm2022/lib/aigc/index.mjs +13 -10
- package/esm2022/lib/aigc/service-fmai/fmai.service.mjs +21 -10
- package/esm2022/lib/aigc/service-fmai/service-chat/chat-class.mjs +736 -8
- package/esm2022/lib/aigc/service-fmai/service-chat/chat.service.mjs +181 -8
- package/esm2022/lib/aigc/service-fmai/service-chat/index.mjs +7 -10
- package/esm2022/lib/aigc/service-fmai/service-chat/mask-list.mjs +194 -9
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.mjs +27 -10
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.mjs +27 -10
- package/esm2022/lib/aigc/service-fmai/service-chat/utilnow.pipe.mjs +68 -10
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine.service.mjs +229 -8
- package/esm2022/lib/aigc/service-fmai/service-imagine/index.mjs +2 -10
- package/esm2022/lib/aigc/voice/audio.player.mjs +52 -10
- package/esm2022/lib/aigc/voice/class-asr.mjs +79 -8
- package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +501 -8
- package/esm2022/lib/aigc/voice/index.mjs +3 -10
- package/esm2022/lib/aigc/voice/lib/pcm2wav.mjs +38 -10
- package/esm2022/lib/aigc/voice/lib/resample.mjs +34 -10
- package/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs +233 -8
- package/esm2022/lib/aigc/voice/tts/index.mjs +2 -10
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.component.mjs +190 -10
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.module.mjs +33 -10
- package/esm2022/lib/map/index.mjs +4 -10
- package/esm2022/lib/map/map.module.mjs +61 -10
- package/esm2022/lib/map/page-loca-scatter/page-loca-scatter.component.mjs +110 -10
- package/esm2022/lib/map/page-map.start/page-map.start.component.mjs +98 -8
- package/esm2022/lib/map/page-plan-route/page-plan-route.component.mjs +100 -8
- package/esm2022/lib/nova-cloud/index.mjs +2 -10
- package/esm2022/lib/nova-cloud/nova-cloud.service.mjs +148 -10
- package/esm2022/lib/platform/cross.service.mjs +63 -10
- package/esm2022/lib/platform/index.mjs +2 -10
- package/esm2022/lib/social/index.mjs +2 -10
- package/esm2022/lib/social/wechat/wechat-jssdk.service.mjs +236 -8
- package/esm2022/lib/storage/comp-hwobs-manager/hwobs-manager.component.mjs +59 -10
- package/esm2022/lib/storage/index.mjs +5 -10
- package/esm2022/lib/storage/service-hwobs/hwobs.service.mjs +130 -8
- package/esm2022/lib/storage/service-upload/index.mjs +2 -10
- package/esm2022/lib/storage/service-upload/nova-upload.service.mjs +462 -8
- package/esm2022/lib/storage/service-upload/util-file-md5.mjs +28 -10
- package/esm2022/lib/storage/storage.module.mjs +41 -10
- package/esm2022/lib/user/account/account.service.mjs +221 -10
- package/esm2022/lib/user/captcha/captcha.component.mjs +135 -10
- package/esm2022/lib/user/comp-user-avatar/comp-user-avatar.component.mjs +62 -10
- package/esm2022/lib/user/index.mjs +17 -10
- package/esm2022/lib/user/login/auth.guard.mjs +28 -10
- package/esm2022/lib/user/login/auth.service.mjs +373 -8
- package/esm2022/lib/user/login/login.component.mjs +913 -10
- package/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs +273 -10
- package/esm2022/lib/user/profile/auth-profile.guard.mjs +27 -10
- package/esm2022/lib/user/profile/auth-profile.service.mjs +122 -10
- package/esm2022/lib/user/profile/profile-bind/profile-bind.component.mjs +115 -10
- package/esm2022/lib/user/profile/profile.module.mjs +57 -10
- package/esm2022/lib/user/staff/index.mjs +4 -10
- package/esm2022/lib/user/staff/staff.guard.mjs +26 -10
- package/esm2022/lib/user/staff/staff.module.mjs +18 -10
- package/esm2022/lib/user/staff/staff.service.mjs +85 -10
- package/esm2022/lib/user/user-name.pipe.mjs +29 -10
- package/esm2022/lib/user/user.module.mjs +106 -10
- package/esm2022/lib/video/fm-video/fm-video.component.mjs +67 -10
- package/esm2022/lib/video/index.mjs +2 -10
- package/esm2022/public-api.mjs +13 -10
- package/fesm2022/fmode-ng.mjs +8895 -7
- package/fesm2022/fmode-ng.mjs.map +1 -1
- package/lib/user/login/auth.service.d.ts +18 -3
- package/lib/user/modal-user-login/modal-user-login.component.d.ts +4 -2
- package/package.json +1 -1
- package/LICENSE.md +0 -8
|
@@ -1,10 +1,38 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGNtMndhdi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvYWlnYy92b2ljZS9saWIvcGNtMndhdi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxNQUFNLFVBQVUsUUFBUSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGFBQWE7SUFDckUsbUNBQW1DO0lBQ25DLElBQUksTUFBTSxHQUFHO1FBQ1gsa0JBQWtCO1FBQ2xCLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLGdDQUFnQztRQUNuRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLHFFQUFxRTtRQUNuRixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxnQ0FBZ0M7UUFDbEUsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsZ0NBQWdDO1FBQ3ZFLGFBQWEsRUFBRSxFQUFFLEVBQUUsdUJBQXVCO1FBQzFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsb0JBQW9CO1FBQ3BDLFdBQVcsRUFBRSxXQUFXLElBQUksQ0FBQyxFQUFFLG9DQUFvQztRQUNuRSxVQUFVLEVBQUUsVUFBVSxJQUFJLEtBQUssRUFBRSwyQkFBMkI7UUFDNUQsUUFBUSxFQUFFLENBQUMsRUFBRSxtREFBbUQ7UUFDaEUsVUFBVSxFQUFFLENBQUMsRUFBRSx3Q0FBd0M7UUFDdkQsYUFBYSxFQUFFLGFBQWEsSUFBSSxFQUFFLEVBQUUscUNBQXFDO1FBQ3pFLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLGdDQUFnQztRQUN2RSxhQUFhLEVBQUUsQ0FBQyxFQUFFLCtEQUErRDtLQUNsRixDQUFBO0lBQ0QsU0FBUyxVQUFVLENBQUMsQ0FBQztRQUNuQixPQUFPLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFBO0lBQ3hFLENBQUM7SUFDRCxTQUFTLFVBQVUsQ0FBQyxDQUFDO1FBQ25CLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFBO0lBQ3BDLENBQUM7SUFDRCxJQUFJLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNoQyxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3BFLE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFBO0lBQ3ZELE1BQU0sQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDL0QsTUFBTSxDQUFDLFNBQVMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQTtJQUU1QyxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDbkMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFDNUIsTUFBTSxDQUFDLE1BQU0sRUFDYixNQUFNLENBQUMsV0FBVyxFQUNsQixVQUFVLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUNoQyxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUM5QixVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUM5QixVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUM3QixVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUMzQixVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUM3QixVQUFVLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUNoQyxNQUFNLENBQUMsV0FBVyxFQUNsQixVQUFVLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUNqQyxDQUFBO0lBQ0QsSUFBSSxjQUFjLEdBQUcsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUE7SUFFOUMsSUFBSSxXQUFXLEdBQUcsSUFBSSxVQUFVLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDcEUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUMvQixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDM0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFBO0lBQ3pELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxuZXhwb3J0IGZ1bmN0aW9uIHBjbXRvV2F2KHBjbXNydCwgc2FtcGxlUmF0ZSwgbnVtQ2hhbm5lbHMsIGJpdHNQZXJTYW1wbGUpIHtcbiAgLy/lj4LmlbAtPu+8iGJhc2U2NOe8lueggeeahHBjbea1ge+8jOmHh+agt+mikeeOh++8jOWjsOmBk+aVsO+8jOmHh+agt+S9jeaVsO+8iVxuICBsZXQgaGVhZGVyID0ge1xuICAgIC8vIE9GRlMgU0laRSBOT1RFU1xuICAgIGNodW5rSWQ6IFsweDUyLCAweDQ5LCAweDQ2LCAweDQ2XSwgLy8gMCAgICA0ICAgIFwiUklGRlwiID0gMHg1MjQ5NDY0NlxuICAgIGNodW5rU2l6ZTogMCwgLy8gNCAgICA0ICAgIDM2K1N1YkNodW5rMlNpemUgPSA0Kyg4K1N1YkNodW5rMVNpemUpKyg4K1N1YkNodW5rMlNpemUpXG4gICAgZm9ybWF0OiBbMHg1NywgMHg0MSwgMHg1NiwgMHg0NV0sIC8vIDggICAgNCAgICBcIldBVkVcIiA9IDB4NTc0MTU2NDVcbiAgICBzdWJDaHVuazFJZDogWzB4NjYsIDB4NmQsIDB4NzQsIDB4MjBdLCAvLyAxMiAgIDQgICAgXCJmbXQgXCIgPSAweDY2NmQ3NDIwXG4gICAgc3ViQ2h1bmsxU2l6ZTogMTYsIC8vIDE2ICAgNCAgICAxNiBmb3IgUENNXG4gICAgYXVkaW9Gb3JtYXQ6IDEsIC8vIDIwICAgMiAgICBQQ00gPSAxXG4gICAgbnVtQ2hhbm5lbHM6IG51bUNoYW5uZWxzIHx8IDEsIC8vIDIyICAgMiAgICBNb25vID0gMSwgU3RlcmVvID0gMi4uLlxuICAgIHNhbXBsZVJhdGU6IHNhbXBsZVJhdGUgfHwgMTYwMDAsIC8vIDI0ICAgNCAgICA4MDAwLCA0NDEwMC4uLlxuICAgIGJ5dGVSYXRlOiAwLCAvLyAyOCAgIDQgICAgU2FtcGxlUmF0ZSpOdW1DaGFubmVscypCaXRzUGVyU2FtcGxlLzhcbiAgICBibG9ja0FsaWduOiAwLCAvLyAzMiAgIDIgICAgTnVtQ2hhbm5lbHMqQml0c1BlclNhbXBsZS84XG4gICAgYml0c1BlclNhbXBsZTogYml0c1BlclNhbXBsZSB8fCAxNiwgLy8gMzQgICAyICAgIDggYml0cyA9IDgsIDE2IGJpdHMgPSAxNlxuICAgIHN1YkNodW5rMklkOiBbMHg2NCwgMHg2MSwgMHg3NCwgMHg2MV0sIC8vIDM2ICAgNCAgICBcImRhdGFcIiA9IDB4NjQ2MTc0NjFcbiAgICBzdWJDaHVuazJTaXplOiAwLCAvLyA0MCAgIDQgICAgZGF0YSBzaXplID0gTnVtU2FtcGxlcypOdW1DaGFubmVscypCaXRzUGVyU2FtcGxlLzhcbiAgfVxuICBmdW5jdGlvbiB1MzJUb0FycmF5KGkpIHtcbiAgICByZXR1cm4gW2kgJiAweGZmLCAoaSA+PiA4KSAmIDB4ZmYsIChpID4+IDE2KSAmIDB4ZmYsIChpID4+IDI0KSAmIDB4ZmZdXG4gIH1cbiAgZnVuY3Rpb24gdTE2VG9BcnJheShpKSB7XG4gICAgcmV0dXJuIFtpICYgMHhmZiwgKGkgPj4gOCkgJiAweGZmXVxuICB9XG4gIGxldCBwY20gPSBuZXcgVWludDhBcnJheShwY21zcnQpXG4gIGhlYWRlci5ibG9ja0FsaWduID0gKGhlYWRlci5udW1DaGFubmVscyAqIGhlYWRlci5iaXRzUGVyU2FtcGxlKSA+PiAzXG4gIGhlYWRlci5ieXRlUmF0ZSA9IGhlYWRlci5ibG9ja0FsaWduICogaGVhZGVyLnNhbXBsZVJhdGVcbiAgaGVhZGVyLnN1YkNodW5rMlNpemUgPSBwY20ubGVuZ3RoICogKGhlYWRlci5iaXRzUGVyU2FtcGxlID4+IDMpXG4gIGhlYWRlci5jaHVua1NpemUgPSAzNiArIGhlYWRlci5zdWJDaHVuazJTaXplXG5cbiAgbGV0IHdhdkhlYWRlciA9IGhlYWRlci5jaHVua0lkLmNvbmNhdChcbiAgICB1MzJUb0FycmF5KGhlYWRlci5jaHVua1NpemUpLFxuICAgIGhlYWRlci5mb3JtYXQsXG4gICAgaGVhZGVyLnN1YkNodW5rMUlkLFxuICAgIHUzMlRvQXJyYXkoaGVhZGVyLnN1YkNodW5rMVNpemUpLFxuICAgIHUxNlRvQXJyYXkoaGVhZGVyLmF1ZGlvRm9ybWF0KSxcbiAgICB1MTZUb0FycmF5KGhlYWRlci5udW1DaGFubmVscyksXG4gICAgdTMyVG9BcnJheShoZWFkZXIuc2FtcGxlUmF0ZSksXG4gICAgdTMyVG9BcnJheShoZWFkZXIuYnl0ZVJhdGUpLFxuICAgIHUxNlRvQXJyYXkoaGVhZGVyLmJsb2NrQWxpZ24pLFxuICAgIHUxNlRvQXJyYXkoaGVhZGVyLmJpdHNQZXJTYW1wbGUpLFxuICAgIGhlYWRlci5zdWJDaHVuazJJZCxcbiAgICB1MzJUb0FycmF5KGhlYWRlci5zdWJDaHVuazJTaXplKVxuICApXG4gIGxldCB3YXZIZWFkZXJVbml0OCA9IG5ldyBVaW50OEFycmF5KHdhdkhlYWRlcilcblxuICBsZXQgbWVyZ2VkQXJyYXkgPSBuZXcgVWludDhBcnJheSh3YXZIZWFkZXJVbml0OC5sZW5ndGggKyBwY20ubGVuZ3RoKVxuICBtZXJnZWRBcnJheS5zZXQod2F2SGVhZGVyVW5pdDgpXG4gIG1lcmdlZEFycmF5LnNldChwY20sIHdhdkhlYWRlclVuaXQ4Lmxlbmd0aClcbiAgbGV0IGJsb2IgPSBuZXcgQmxvYihbbWVyZ2VkQXJyYXldLCB7IHR5cGU6ICdhdWRpby93YXYnIH0pXG4gIHJldHVybiBibG9iXG59XG4iXX0=
|
|
@@ -1,10 +1,34 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
export function resampleAudio(frameBuffer, inputSampleRate, outputSampleRate) {
|
|
2
|
+
let inputLength = frameBuffer.length;
|
|
3
|
+
let outputLength = Math.floor((inputLength / inputSampleRate) * outputSampleRate);
|
|
4
|
+
let outputBuffer = [];
|
|
5
|
+
for (let i = 0; i < outputLength; i++) {
|
|
6
|
+
let index = Math.floor(i * (inputSampleRate / outputSampleRate));
|
|
7
|
+
outputBuffer[i] = frameBuffer[index];
|
|
8
|
+
}
|
|
9
|
+
return outputBuffer;
|
|
10
|
+
}
|
|
11
|
+
export function convertFrameBufferToBase64(frameBuffer) {
|
|
12
|
+
// 创建一个存储转换后数据的Uint8Array
|
|
13
|
+
const uint8Array = new Uint8Array(frameBuffer.length * 2); // 16位小端LE,每个样本占用2个字节
|
|
14
|
+
// 将frameBuffer中的每个样本转换为16位小端字节序
|
|
15
|
+
for (let i = 0; i < frameBuffer.length; i++) {
|
|
16
|
+
const sample = frameBuffer[i];
|
|
17
|
+
uint8Array[i * 2] = sample & 0xff; // 低字节
|
|
18
|
+
uint8Array[i * 2 + 1] = (sample >> 8) & 0xff; // 高字节
|
|
19
|
+
}
|
|
20
|
+
// 使用btoa函数将Uint8Array转换为base64字符串
|
|
21
|
+
const base64String = btoa(String.fromCharCode.apply(null, uint8Array));
|
|
22
|
+
return base64String;
|
|
23
|
+
}
|
|
24
|
+
export function resampleBuffer(buffer, fromRate, toRate) {
|
|
25
|
+
const ratio = fromRate / toRate;
|
|
26
|
+
const length = Math.round(buffer.length / ratio);
|
|
27
|
+
const result = new Int16Array(length);
|
|
28
|
+
for (let i = 0; i < length; i++) {
|
|
29
|
+
const j = Math.floor(i * ratio);
|
|
30
|
+
result[i] = buffer[j];
|
|
31
|
+
}
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzYW1wbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2Mvdm9pY2UvbGliL3Jlc2FtcGxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxhQUFhLENBQUMsV0FBcUIsRUFBRSxlQUF1QixFQUFFLGdCQUF3QjtJQUNsRyxJQUFJLFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQ3JDLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEdBQUcsZUFBZSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztJQUNsRixJQUFJLFlBQVksR0FBYSxFQUFFLENBQUM7SUFFaEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3RDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUNqRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDO0FBRUgsTUFBTSxVQUFVLDBCQUEwQixDQUFDLFdBQXFCO0lBQ2hFLHlCQUF5QjtJQUN6QixNQUFNLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCO0lBRWhGLGdDQUFnQztJQUNoQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzFDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxNQUFNO1FBQ3pDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLE1BQU07SUFDeEQsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFFdkUsT0FBTyxZQUFZLENBQUM7QUFDcEIsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBa0IsRUFBRSxRQUFnQixFQUFFLE1BQWM7SUFDakYsTUFBTSxLQUFLLEdBQUcsUUFBUSxHQUFHLE1BQU0sQ0FBQztJQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDakQsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFdEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gcmVzYW1wbGVBdWRpbyhmcmFtZUJ1ZmZlcjogbnVtYmVyW10sIGlucHV0U2FtcGxlUmF0ZTogbnVtYmVyLCBvdXRwdXRTYW1wbGVSYXRlOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgbGV0IGlucHV0TGVuZ3RoID0gZnJhbWVCdWZmZXIubGVuZ3RoO1xuICAgIGxldCBvdXRwdXRMZW5ndGggPSBNYXRoLmZsb29yKChpbnB1dExlbmd0aCAvIGlucHV0U2FtcGxlUmF0ZSkgKiBvdXRwdXRTYW1wbGVSYXRlKTtcbiAgICBsZXQgb3V0cHV0QnVmZmVyOiBudW1iZXJbXSA9IFtdO1xuICBcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dExlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgaW5kZXggPSBNYXRoLmZsb29yKGkgKiAoaW5wdXRTYW1wbGVSYXRlIC8gb3V0cHV0U2FtcGxlUmF0ZSkpO1xuICAgICAgb3V0cHV0QnVmZmVyW2ldID0gZnJhbWVCdWZmZXJbaW5kZXhdO1xuICAgIH1cbiAgXG4gICAgcmV0dXJuIG91dHB1dEJ1ZmZlcjtcbiAgfVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEZyYW1lQnVmZmVyVG9CYXNlNjQoZnJhbWVCdWZmZXI6IG51bWJlcltdKTogc3RyaW5nIHtcbi8vIOWIm+W7uuS4gOS4quWtmOWCqOi9rOaNouWQjuaVsOaNrueahFVpbnQ4QXJyYXlcbmNvbnN0IHVpbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJheShmcmFtZUJ1ZmZlci5sZW5ndGggKiAyKTsgLy8gMTbkvY3lsI/nq69MRe+8jOavj+S4quagt+acrOWNoOeUqDLkuKrlrZfoioJcblxuLy8g5bCGZnJhbWVCdWZmZXLkuK3nmoTmr4/kuKrmoLfmnKzovazmjaLkuLoxNuS9jeWwj+err+Wtl+iKguW6j1xuZm9yIChsZXQgaSA9IDA7IGkgPCBmcmFtZUJ1ZmZlci5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHNhbXBsZSA9IGZyYW1lQnVmZmVyW2ldO1xuICAgIHVpbnQ4QXJyYXlbaSAqIDJdID0gc2FtcGxlICYgMHhmZjsgLy8g5L2O5a2X6IqCXG4gICAgdWludDhBcnJheVtpICogMiArIDFdID0gKHNhbXBsZSA+PiA4KSAmIDB4ZmY7IC8vIOmrmOWtl+iKglxufVxuXG4vLyDkvb/nlKhidG9h5Ye95pWw5bCGVWludDhBcnJheei9rOaNouS4umJhc2U2NOWtl+espuS4slxuY29uc3QgYmFzZTY0U3RyaW5nID0gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHVpbnQ4QXJyYXkpKTtcblxucmV0dXJuIGJhc2U2NFN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2FtcGxlQnVmZmVyKGJ1ZmZlcjogSW50MTZBcnJheSwgZnJvbVJhdGU6IG51bWJlciwgdG9SYXRlOiBudW1iZXIpOiBJbnQxNkFycmF5IHtcbiAgY29uc3QgcmF0aW8gPSBmcm9tUmF0ZSAvIHRvUmF0ZTtcbiAgY29uc3QgbGVuZ3RoID0gTWF0aC5yb3VuZChidWZmZXIubGVuZ3RoIC8gcmF0aW8pO1xuICBjb25zdCByZXN1bHQgPSBuZXcgSW50MTZBcnJheShsZW5ndGgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBqID0gTWF0aC5mbG9vcihpICogcmF0aW8pO1xuICAgIHJlc3VsdFtpXSA9IGJ1ZmZlcltqXTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59Il19
|
|
@@ -1,10 +1,235 @@
|
|
|
1
|
-
|
|
1
|
+
// import "microsoft-cognitiveservices-speech-sdk/distrib/browser/microsoft.cognitiveservices.speech.sdk.bundle-min";
|
|
2
|
+
import { SpeechSynthesizer } from "microsoft-cognitiveservices-speech-sdk/distrib/lib/src/sdk/SpeechSynthesizer";
|
|
3
|
+
import { SpeechConfig } from "microsoft-cognitiveservices-speech-sdk/distrib/lib/src/sdk/SpeechConfig";
|
|
4
|
+
import { ResultReason } from "microsoft-cognitiveservices-speech-sdk/distrib/lib/src/sdk/ResultReason";
|
|
5
|
+
import Parse from "parse";
|
|
6
|
+
import { AudioPlayer } from "../audio.player";
|
|
7
|
+
/**
|
|
8
|
+
* FmodeTTS
|
|
9
|
+
* 每个类,表示一次独立的语音合成服务
|
|
10
|
+
*/
|
|
11
|
+
export class FmodeTTS {
|
|
12
|
+
constructor(config, uploadServ) {
|
|
13
|
+
this.uploadServ = uploadServ;
|
|
14
|
+
this.subscriptionKey = config?.subscriptionKey;
|
|
15
|
+
this.authorizationToken = config?.token;
|
|
16
|
+
this.region = config?.region;
|
|
17
|
+
if (this.subscriptionKey) { // 直接资源APIKEY,调试或后端是使用
|
|
18
|
+
this.speechConfig = SpeechConfig.fromSubscription(this.subscriptionKey, this.region);
|
|
19
|
+
}
|
|
20
|
+
if (this.authorizationToken) { // 加载调用STSToken,客户端使用
|
|
21
|
+
this.speechConfig = SpeechConfig.fromAuthorizationToken(this.authorizationToken, this.region);
|
|
22
|
+
// console.log(this.authorizationToken,this.speechConfig)
|
|
23
|
+
}
|
|
24
|
+
// console.log(this.speechConfig)
|
|
25
|
+
// this.audioConfig = AudioConfig.fromDefaultSpeakerOutput();
|
|
26
|
+
// this.synthesizer = new Microsoft.CognitiveServices.SpeechSDK.SpeechSynthesizer(this.speechConfig, this.audioConfig);
|
|
27
|
+
this.synthesizer = new SpeechSynthesizer(this.speechConfig
|
|
28
|
+
// this.audioConfig
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
extractTextFromXML(inputString) {
|
|
32
|
+
// 正则表达式匹配 XML 标签,并提取标签之间的文本内容
|
|
33
|
+
const regex = />([^<]+)</g;
|
|
34
|
+
let matches;
|
|
35
|
+
let result = [];
|
|
36
|
+
// 使用 exec 方法循环查找所有匹配
|
|
37
|
+
while ((matches = regex.exec(inputString)) !== null) {
|
|
38
|
+
// matches[1] 是标签之间的文本内容,去除首尾空白
|
|
39
|
+
const text = matches[1].trim();
|
|
40
|
+
if (text) {
|
|
41
|
+
result.push(text);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// 返回合并后的纯文本内容(用空格衔接)
|
|
45
|
+
return result.join(' ');
|
|
46
|
+
}
|
|
47
|
+
extractSSMLContent(inputString) {
|
|
48
|
+
var regex = /<speak.*?<\/speak>/s;
|
|
49
|
+
var match = inputString.match(regex);
|
|
50
|
+
if (match) {
|
|
51
|
+
return match[0];
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
return inputString;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
2
57
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
58
|
+
* 合成语言并播放
|
|
59
|
+
* @param textOrSSML
|
|
60
|
+
* @desc
|
|
61
|
+
* 普通文本
|
|
62
|
+
* SSML https://learn.microsoft.com/zh-cn/azure/ai-services/speech-service/how-to-speech-synthesis?tabs=browserjs%2Cterminal&pivots=programming-language-javascript#use-ssml-to-customize-speech-characteristics
|
|
63
|
+
* @returns
|
|
7
64
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
65
|
+
async speakAsync(textOrSSML, chatVoice, eventMap) {
|
|
66
|
+
// 初始化本次合成语音数据对象
|
|
67
|
+
if (!chatVoice) {
|
|
68
|
+
let ChatVoice = Parse.Object.extend("ChatVoice");
|
|
69
|
+
chatVoice = new ChatVoice();
|
|
70
|
+
chatVoice.set("ssml", textOrSSML);
|
|
71
|
+
chatVoice.set("content", this.extractTextFromXML(textOrSSML));
|
|
72
|
+
let company = localStorage.getItem("company");
|
|
73
|
+
company && chatVoice.set("company", { __type: "Pointer", className: "Company", objectId: company });
|
|
74
|
+
Parse.User.current()?.id && chatVoice.set("user", Parse.User.current().toPointer());
|
|
75
|
+
}
|
|
76
|
+
// 加载缓存中存在的音频文件
|
|
77
|
+
if (!chatVoice?.get("voiceFile")) {
|
|
78
|
+
let orList = [];
|
|
79
|
+
if (chatVoice?.get("content")) {
|
|
80
|
+
orList.push({ content: chatVoice?.get("content") });
|
|
81
|
+
}
|
|
82
|
+
if (textOrSSML) {
|
|
83
|
+
orList.push({ ssml: textOrSSML });
|
|
84
|
+
}
|
|
85
|
+
let query = Parse.Query.fromJSON("ChatVoice", {
|
|
86
|
+
include: "voiceFile",
|
|
87
|
+
where: {
|
|
88
|
+
$or: orList
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
let exists = await query.first();
|
|
92
|
+
chatVoice.set("voiceFile", exists?.get("voiceFile"));
|
|
93
|
+
}
|
|
94
|
+
if (chatVoice?.get("voiceFile")) { // 存在音频则加载后直接播放
|
|
95
|
+
this.playAudioData(chatVoice?.get("voiceFile")?.get("url"), chatVoice, eventMap);
|
|
96
|
+
return chatVoice;
|
|
97
|
+
}
|
|
98
|
+
// 正则匹配SSML部分
|
|
99
|
+
textOrSSML = this.extractSSMLContent(textOrSSML);
|
|
100
|
+
// console.log(textOrSSML)
|
|
101
|
+
// 播放语音
|
|
102
|
+
return new Promise((resolve, reject) => {
|
|
103
|
+
const startTime = Date.now();
|
|
104
|
+
let speekType = 'speakTextAsync';
|
|
105
|
+
if (textOrSSML?.indexOf("<") > -1) {
|
|
106
|
+
speekType = "speakSsmlAsync";
|
|
107
|
+
}
|
|
108
|
+
// 音频输出流
|
|
109
|
+
// Create an audio output stream
|
|
110
|
+
// const audioOutputStream = Microsoft.CognitiveServices.SpeechSDK.AudioOutputStream.createPullStream();
|
|
111
|
+
// Create an audio configuration using the audio output stream
|
|
112
|
+
// const audioConfig = Microsoft.CognitiveServices.SpeechSDK.AudioConfig.fromStreamOutput(audioOutputStream);
|
|
113
|
+
// 播放组件
|
|
114
|
+
// Get the audio data from the callback and create a Blob
|
|
115
|
+
// const audioBlob = audioOutputStream.audioBlob();
|
|
116
|
+
// const audioUrl = URL.createObjectURL(audioBlob);
|
|
117
|
+
// const audioElement = new Audio(audioUrl);
|
|
118
|
+
// console.log(textOrSSML)
|
|
119
|
+
this.eventMap?.onSpeakBefore && this.eventMap?.onSpeakBefore();
|
|
120
|
+
this.synthesizer[speekType](textOrSSML, result => {
|
|
121
|
+
/**
|
|
122
|
+
*
|
|
123
|
+
* @desc
|
|
124
|
+
* {
|
|
125
|
+
privAudioData: undefined
|
|
126
|
+
privAudioDuration: undefined
|
|
127
|
+
privErrorDetails: "Unable to contact server. StatusCode: 1006,\n wss://eastasia.tts.speech.microsoft.com/cognitiveservices/websocket/v1 Reason: undefined"
|
|
128
|
+
privProperties: PropertyCollection {privKeys: Array(1), privValues: Array(1)}
|
|
129
|
+
privReason: 1
|
|
130
|
+
privResultId: "539694CFA6CB4BAD97F90AF76E608E69"
|
|
131
|
+
audioData: (...)
|
|
132
|
+
audioDuration: (...)
|
|
133
|
+
errorDetails: (...)
|
|
134
|
+
properties: (...)
|
|
135
|
+
reason: (...)
|
|
136
|
+
resultId: (...)
|
|
137
|
+
}
|
|
138
|
+
*/
|
|
139
|
+
// console.log(result)
|
|
140
|
+
// console.log(result.resultId)
|
|
141
|
+
// console.log(result.reason)
|
|
142
|
+
console.log(result);
|
|
143
|
+
if (result.reason === ResultReason.SynthesizingAudioCompleted) {
|
|
144
|
+
this.eventMap?.onAudioCompleted && this.eventMap?.onAudioCompleted();
|
|
145
|
+
const endTime = Date.now();
|
|
146
|
+
let audioData = result?.audioData;
|
|
147
|
+
chatVoice.set("duration", Number(result?.audioDuration) / 10000);
|
|
148
|
+
this.playAudioData(audioData, chatVoice, eventMap);
|
|
149
|
+
console.log(`Audio synthesis finished. Duration: ${endTime - startTime} ms`);
|
|
150
|
+
setTimeout(() => {
|
|
151
|
+
eventMap?.onStop() && eventMap?.onStop();
|
|
152
|
+
}, 2000);
|
|
153
|
+
resolve(chatVoice);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
reject(`Speech synthesis failed. Reason: ${result.errorDetails}`);
|
|
157
|
+
}
|
|
158
|
+
}, error => {
|
|
159
|
+
reject(`Error occurred during synthesis: ${error}`);
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
// 把打断时的事件
|
|
164
|
+
onBreak(options) {
|
|
165
|
+
}
|
|
166
|
+
playAudioData(audioData, chatVoice, eventMap) {
|
|
167
|
+
let url;
|
|
168
|
+
console.log("audioData", audioData);
|
|
169
|
+
if (audioData?.indexOf && audioData?.indexOf("http") >= -1) { // 播放URL
|
|
170
|
+
url = audioData;
|
|
171
|
+
}
|
|
172
|
+
else { // 播放音频数据
|
|
173
|
+
let blob = new Blob([audioData], { type: 'audio/wav' });
|
|
174
|
+
url = URL.createObjectURL(blob);
|
|
175
|
+
this.uploadAndSaveVoice(blob, chatVoice);
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
// 仅URL需要播放,tts合成会自动播放
|
|
179
|
+
// let audio = new Audio(url)
|
|
180
|
+
const audioPlayer = AudioPlayer.getInstance();
|
|
181
|
+
eventMap?.onStart && eventMap?.onStart(chatVoice);
|
|
182
|
+
audioPlayer.setAudioEvent("onloadeddata", () => {
|
|
183
|
+
let duration = audioPlayer.duration * 1000;
|
|
184
|
+
console.log("duration", duration);
|
|
185
|
+
if (!chatVoice?.get("duration")) {
|
|
186
|
+
chatVoice?.set("duration", duration);
|
|
187
|
+
chatVoice?.save();
|
|
188
|
+
}
|
|
189
|
+
eventMap?.onLoaded && eventMap?.onLoaded(audioPlayer);
|
|
190
|
+
});
|
|
191
|
+
audioPlayer.setAudioEvent("onabort", () => {
|
|
192
|
+
eventMap?.onStop && eventMap?.onStop();
|
|
193
|
+
});
|
|
194
|
+
audioPlayer.setAudioEvent("onerror", () => {
|
|
195
|
+
eventMap?.onStop && eventMap?.onStop();
|
|
196
|
+
});
|
|
197
|
+
audioPlayer.setAudioEvent("onpause", () => {
|
|
198
|
+
eventMap?.onStop && eventMap?.onStop();
|
|
199
|
+
});
|
|
200
|
+
audioPlayer.setAudioEvent("onended", () => {
|
|
201
|
+
eventMap?.onStop && eventMap?.onStop();
|
|
202
|
+
});
|
|
203
|
+
audioPlayer.setAudioEvent("onclose", () => {
|
|
204
|
+
eventMap?.onStop && eventMap?.onStop();
|
|
205
|
+
});
|
|
206
|
+
let playAudio = () => {
|
|
207
|
+
audioPlayer.play(url).then(() => {
|
|
208
|
+
}).catch(() => {
|
|
209
|
+
setTimeout(() => {
|
|
210
|
+
console.log("playAudio");
|
|
211
|
+
playAudio();
|
|
212
|
+
}, 200);
|
|
213
|
+
});
|
|
214
|
+
};
|
|
215
|
+
playAudio();
|
|
216
|
+
}
|
|
217
|
+
async uploadAndSaveVoice(blob, chatVoice) {
|
|
218
|
+
if (this.uploadServ) {
|
|
219
|
+
let id = chatVoice?.id || this.uploadServ?.genMd5(chatVoice?.get("content") || chatVoice?.get("ssml"));
|
|
220
|
+
let now = new Date();
|
|
221
|
+
let filename = id + now.getFullYear() + (now.getMonth() + 1) + now.getDate() + now.getHours() + now.getMinutes() + now.getSeconds() + ".wav";
|
|
222
|
+
let file = new File([blob], filename, { type: 'audio/wav' });
|
|
223
|
+
let fileResult = await this.uploadServ.upload(file, (res) => {
|
|
224
|
+
console.log(res); // 上传进度,可以同步更新页面上传百分比
|
|
225
|
+
});
|
|
226
|
+
let attachPointer = { __type: "Pointer", className: "Attachment", objectId: fileResult?.id };
|
|
227
|
+
if (attachPointer?.objectId) {
|
|
228
|
+
chatVoice.set("voiceFile", attachPointer);
|
|
229
|
+
chatVoice = await chatVoice.save();
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm1vZGUtdHRzLWNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL3ZvaWNlL3R0cy9mbW9kZS10dHMtY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEscUhBQXFIO0FBQ3JILE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDhFQUE4RSxDQUFDO0FBQy9HLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx5RUFBeUUsQ0FBQztBQUNyRyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0seUVBQXlFLENBQUM7QUFDckcsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQVc5Qzs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQVNqQixZQUFZLE1BSVgsRUFBQyxVQUE2QjtRQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sRUFBRSxlQUFlLENBQUM7UUFDL0MsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sRUFBRSxLQUFLLENBQUM7UUFDeEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEVBQUUsTUFBTSxDQUFDO1FBQzdCLElBQUcsSUFBSSxDQUFDLGVBQWUsRUFBQyxDQUFDLENBQUMsc0JBQXNCO1lBQzVDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pGLENBQUM7UUFDRCxJQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBQyxDQUFDLENBQUMscUJBQXFCO1lBQzlDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxJ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QztRQUNsRCxXQUFXLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxHQUFFLEVBQUU7WUFDMUMsSUFBSSxRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDM0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUMsUUFBUSxDQUFDLENBQUM7WUFDakMsSUFBRyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUMsQ0FBQztnQkFDNUIsU0FBUyxFQUFFLEdBQUcsQ0FBQyxVQUFVLEVBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3BDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUN0QixDQUFDO1lBQ0QsUUFBUSxFQUFFLFFBQVEsSUFBSSxRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFBO1FBRUYsV0FBVyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsR0FBRSxFQUFFO1lBQ3JDLFFBQVEsRUFBRSxNQUFNLElBQUksUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFBO1FBQ0YsV0FBVyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsR0FBRSxFQUFFO1lBQ3JDLFFBQVEsRUFBRSxNQUFNLElBQUksUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFBO1FBQ0YsV0FBVyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsR0FBRSxFQUFFO1lBQ3JDLFFBQVEsRUFBRSxNQUFNLElBQUksUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFBO1FBQ0YsV0FBVyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsR0FBRSxFQUFFO1lBQ3JDLFFBQVEsRUFBRSxNQUFNLElBQUksUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFBO1FBQ0YsV0FBVyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsR0FBRSxFQUFFO1lBQ3JDLFFBQVEsRUFBRSxNQUFNLElBQUksUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxTQUFTLEdBQUcsR0FBRSxFQUFFO1lBQ2hCLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUUsRUFBRTtZQUMvQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRSxFQUFFO2dCQUNULFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQTtvQkFDeEIsU0FBUyxFQUFFLENBQUM7Z0JBQ2hCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNaLENBQUMsQ0FBQyxDQUFBO1FBQ04sQ0FBQyxDQUFBO1FBQ0QsU0FBUyxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUNELEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUMsU0FBUztRQUNuQyxJQUFHLElBQUksQ0FBQyxVQUFVLEVBQUMsQ0FBQztZQUNoQixJQUFJLEVBQUUsR0FBRyxTQUFTLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO1lBQ3BHLElBQUksR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDckIsSUFBSSxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsR0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsR0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsTUFBTSxDQUFBO1lBQ2hJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDN0QsSUFBSSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUMsQ0FBQyxHQUFHLEVBQUMsRUFBRTtnQkFDdEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQSxDQUFDLHFCQUFxQjtZQUMxQyxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksYUFBYSxHQUFHLEVBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsWUFBWSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUUsRUFBRSxFQUFDLENBQUE7WUFDckYsSUFBRyxhQUFhLEVBQUUsUUFBUSxFQUFDLENBQUM7Z0JBQ3hCLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFDLGFBQWEsQ0FBQyxDQUFBO2dCQUN4QyxTQUFTLEdBQUcsTUFBTSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkMsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFNO0lBQ1YsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaW1wb3J0ICogYXMgc2RrIGZyb20gXCJtaWNyb3NvZnQtY29nbml0aXZlc2VydmljZXMtc3BlZWNoLXNka1wiO1xuZGVjbGFyZSB2YXIgTWljcm9zb2Z0OmFueVxuLy8gaW1wb3J0IFwibWljcm9zb2Z0LWNvZ25pdGl2ZXNlcnZpY2VzLXNwZWVjaC1zZGsvZGlzdHJpYi9icm93c2VyL21pY3Jvc29mdC5jb2duaXRpdmVzZXJ2aWNlcy5zcGVlY2guc2RrLmJ1bmRsZS1taW5cIjtcbmltcG9ydCB7U3BlZWNoU3ludGhlc2l6ZXJ9IGZyb20gXCJtaWNyb3NvZnQtY29nbml0aXZlc2VydmljZXMtc3BlZWNoLXNkay9kaXN0cmliL2xpYi9zcmMvc2RrL1NwZWVjaFN5bnRoZXNpemVyXCI7XG5pbXBvcnQge1NwZWVjaENvbmZpZ30gZnJvbSBcIm1pY3Jvc29mdC1jb2duaXRpdmVzZXJ2aWNlcy1zcGVlY2gtc2RrL2Rpc3RyaWIvbGliL3NyYy9zZGsvU3BlZWNoQ29uZmlnXCI7XG5pbXBvcnQge1Jlc3VsdFJlYXNvbn0gZnJvbSBcIm1pY3Jvc29mdC1jb2duaXRpdmVzZXJ2aWNlcy1zcGVlY2gtc2RrL2Rpc3RyaWIvbGliL3NyYy9zZGsvUmVzdWx0UmVhc29uXCI7XG5pbXBvcnQgUGFyc2UgZnJvbSBcInBhcnNlXCI7XG5pbXBvcnQgeyBOb3ZhVXBsb2FkU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zdG9yYWdlL3NlcnZpY2UtdXBsb2FkL25vdmEtdXBsb2FkLnNlcnZpY2VcIjtcbmltcG9ydCB7IEF1ZGlvQ29uZmlnIH0gZnJvbSBcIm1pY3Jvc29mdC1jb2duaXRpdmVzZXJ2aWNlcy1zcGVlY2gtc2RrL2Rpc3RyaWIvbGliL3NyYy9zZGsvQXVkaW8vQXVkaW9Db25maWdcIjtcbmltcG9ydCB7IEF1ZGlvUGxheWVyIH0gZnJvbSBcIi4uL2F1ZGlvLnBsYXllclwiO1xuXG4vLyBNaWNyb3NvZnQ/LkNvZ25pdGl2ZVNlcnZpY2VzPy5TcGVlY2hTREs/XG5pbnRlcmZhY2UgRm1vZGVUVFNFdmVudHtcbiAgICAgICAgLy8g5byA5aeL5YmNXG4gICAgICAgIG9uU3BlYWtCZWZvcmU/KCk6dm9pZDtcbiAgICAgICAgLy8g5rWB5Yqg6L2956ys5LiA5q616Z+z6aKR5byA5aeLXG4gICAgICAgIG9uU3RyZWFtU3RhcnRlZD8oKTp2b2lkO1xuICAgICAgICAvLyDpn7PpopHlhajpg6jliqDovb3lrozmiJBcbiAgICAgICAgb25BdWRpb0NvbXBsZXRlZD8oKTp2b2lkOyAvLyBzc21s6ISa5pys5ZCI5oiQXG59XG4vKipcbiAqIEZtb2RlVFRTXG4gKiDmr4/kuKrnsbvvvIzooajnpLrkuIDmrKHni6znq4vnmoTor63pn7PlkIjmiJDmnI3liqFcbiAqL1xuZXhwb3J0IGNsYXNzIEZtb2RlVFRTe1xuICAgIHByaXZhdGUgc3BlZWNoQ29uZmlnOmFueTtcbiAgICBwcml2YXRlIGF1ZGlvQ29uZmlnOmFueTtcbiAgICBwcml2YXRlIHN5bnRoZXNpemVyOmFueTtcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbktleTogc3RyaW5nO1xuICAgIHByaXZhdGUgYXV0aG9yaXphdGlvblRva2VuOnN0cmluZztcbiAgICBwcml2YXRlIHJlZ2lvbjogc3RyaW5nO1xuICAgIGV2ZW50TWFwOkZtb2RlVFRTRXZlbnRcbiAgICB1cGxvYWRTZXJ2PzpOb3ZhVXBsb2FkU2VydmljZVxuICAgIGNvbnN0cnVjdG9yKGNvbmZpZzp7XG4gICAgICAgIHJlZ2lvbjpzdHJpbmcsXG4gICAgICAgIHN1YnNjcmlwdGlvbktleTpzdHJpbmcsXG4gICAgICAgIHRva2VuOnN0cmluZyxcbiAgICB9LHVwbG9hZFNlcnY/Ok5vdmFVcGxvYWRTZXJ2aWNlKXtcbiAgICAgICAgdGhpcy51cGxvYWRTZXJ2ID0gdXBsb2FkU2VydjtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25LZXkgPSBjb25maWc/LnN1YnNjcmlwdGlvbktleTtcbiAgICAgICAgdGhpcy5hdXRob3JpemF0aW9uVG9rZW4gPSBjb25maWc/LnRva2VuO1xuICAgICAgICB0aGlzLnJlZ2lvbiA9IGNvbmZpZz8ucmVnaW9uO1xuICAgICAgICBpZih0aGlzLnN1YnNjcmlwdGlvbktleSl7IC8vIOebtOaOpei1hOa6kEFQSUtFWe+8jOiwg+ivleaIluWQjuerr+aYr+S9v+eUqFxuICAgICAgICAgICAgdGhpcy5zcGVlY2hDb25maWcgPSBTcGVlY2hDb25maWcuZnJvbVN1YnNjcmlwdGlvbih0aGlzLnN1YnNjcmlwdGlvbktleSwgdGhpcy5yZWdpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMuYXV0aG9yaXphdGlvblRva2VuKXsgLy8g5Yqg6L296LCD55SoU1RTVG9rZW7vvIzlrqLmiLfnq6/kvb/nlKhcbiAgICAgICAgICAgIHRoaXMuc3BlZWNoQ29uZmlnID0gU3BlZWNoQ29uZmlnLmZyb21BdXRob3JpemF0aW9uVG9rZW4odGhpcy5hdXRob3JpemF0aW9uVG9rZW4sIHRoaXMucmVnaW9uKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuYXV0aG9yaXphdGlvblRva2VuLHRoaXMuc3BlZWNoQ29uZmlnKVxuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuc3BlZWNoQ29uZmlnKVxuICAgICAgICAvLyB0aGlzLmF1ZGlvQ29uZmlnID0gQXVkaW9Db25maWcuZnJvbURlZmF1bHRTcGVha2VyT3V0cHV0KCk7XG4gICAgICAgIC8vIHRoaXMuc3ludGhlc2l6ZXIgPSBuZXcgTWljcm9zb2Z0LkNvZ25pdGl2ZVNlcnZpY2VzLlNwZWVjaFNESy5TcGVlY2hTeW50aGVzaXplcih0aGlzLnNwZWVjaENvbmZpZywgdGhpcy5hdWRpb0NvbmZpZyk7XG4gICAgICAgIHRoaXMuc3ludGhlc2l6ZXIgPSBuZXcgU3BlZWNoU3ludGhlc2l6ZXIodGhpcy5zcGVlY2hDb25maWdcbiAgICAgICAgICAgIC8vIHRoaXMuYXVkaW9Db25maWdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBleHRyYWN0VGV4dEZyb21YTUwoaW5wdXRTdHJpbmcpe1xuICAgICAgICAvLyDmraPliJnooajovr7lvI/ljLnphY0gWE1MIOagh+etvu+8jOW5tuaPkOWPluagh+etvuS5i+mXtOeahOaWh+acrOWGheWuuVxuICAgICAgICBjb25zdCByZWdleCA9IC8+KFtePF0rKTwvZztcbiAgICAgICAgbGV0IG1hdGNoZXM7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcblxuICAgICAgICAvLyDkvb/nlKggZXhlYyDmlrnms5Xlvqrnjq/mn6Xmib7miYDmnInljLnphY1cbiAgICAgICAgd2hpbGUgKChtYXRjaGVzID0gcmVnZXguZXhlYyhpbnB1dFN0cmluZykpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBtYXRjaGVzWzFdIOaYr+agh+etvuS5i+mXtOeahOaWh+acrOWGheWuue+8jOWOu+mZpOmmluWwvuepuueZvVxuICAgICAgICAgICAgY29uc3QgdGV4dCA9IG1hdGNoZXNbMV0udHJpbSgpO1xuICAgICAgICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOi/lOWbnuWQiOW5tuWQjueahOe6r+aWh+acrOWGheWuue+8iOeUqOepuuagvOihlOaOpe+8iVxuICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyAnKTtcbiAgICB9XG4gICAgZXh0cmFjdFNTTUxDb250ZW50KGlucHV0U3RyaW5nKSB7XG4gICAgICAgIHZhciByZWdleCA9IC88c3BlYWsuKj88XFwvc3BlYWs+L3M7XG4gICAgICAgIHZhciBtYXRjaCA9IGlucHV0U3RyaW5nLm1hdGNoKHJlZ2V4KTtcbiAgICAgICAgXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0U3RyaW5nO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8qKlxuICAgICAqIOWQiOaIkOivreiogOW5tuaSreaUvlxuICAgICAqIEBwYXJhbSB0ZXh0T3JTU01MIFxuICAgICAqIEBkZXNjXG4gICAgICog5pmu6YCa5paH5pysXG4gICAgICogU1NNTCBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vemgtY24vYXp1cmUvYWktc2VydmljZXMvc3BlZWNoLXNlcnZpY2UvaG93LXRvLXNwZWVjaC1zeW50aGVzaXM/dGFicz1icm93c2VyanMlMkN0ZXJtaW5hbCZwaXZvdHM9cHJvZ3JhbW1pbmctbGFuZ3VhZ2UtamF2YXNjcmlwdCN1c2Utc3NtbC10by1jdXN0b21pemUtc3BlZWNoLWNoYXJhY3RlcmlzdGljc1xuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHB1YmxpYyBhc3luYyBzcGVha0FzeW5jKHRleHRPclNTTUw6IHN0cmluZyxjaGF0Vm9pY2U/OlBhcnNlLk9iamVjdCxldmVudE1hcD86YW55KTogUHJvbWlzZTxQYXJzZS5PYmplY3Q+IHtcblxuICAgICAgICAvLyDliJ3lp4vljJbmnKzmrKHlkIjmiJDor63pn7PmlbDmja7lr7nosaFcbiAgICAgICAgaWYoIWNoYXRWb2ljZSl7XG4gICAgICAgICAgICBsZXQgQ2hhdFZvaWNlID0gUGFyc2UuT2JqZWN0LmV4dGVuZChcIkNoYXRWb2ljZVwiKTtcbiAgICAgICAgICAgIGNoYXRWb2ljZSA9IG5ldyBDaGF0Vm9pY2UoKTtcbiAgICAgICAgICAgIGNoYXRWb2ljZS5zZXQoXCJzc21sXCIsdGV4dE9yU1NNTCk7XG4gICAgICAgICAgICBjaGF0Vm9pY2Uuc2V0KFwiY29udGVudFwiLHRoaXMuZXh0cmFjdFRleHRGcm9tWE1MKHRleHRPclNTTUwpKTtcbiAgICAgICAgICAgIGxldCBjb21wYW55ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJjb21wYW55XCIpXG4gICAgICAgICAgICBjb21wYW55JiZjaGF0Vm9pY2Uuc2V0KFwiY29tcGFueVwiLHtfX3R5cGU6XCJQb2ludGVyXCIsY2xhc3NOYW1lOlwiQ29tcGFueVwiLG9iamVjdElkOmNvbXBhbnl9KTtcbiAgICAgICAgICAgIFBhcnNlLlVzZXIuY3VycmVudCgpPy5pZCYmY2hhdFZvaWNlLnNldChcInVzZXJcIixQYXJzZS5Vc2VyLmN1cnJlbnQoKS50b1BvaW50ZXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8g5Yqg6L2957yT5a2Y5Lit5a2Y5Zyo55qE6Z+z6aKR5paH5Lu2XG4gICAgICAgIGlmKCFjaGF0Vm9pY2U/LmdldChcInZvaWNlRmlsZVwiKSl7XG4gICAgICAgICAgICBsZXQgb3JMaXN0ID0gW11cbiAgICAgICAgICAgIGlmKGNoYXRWb2ljZT8uZ2V0KFwiY29udGVudFwiKSl7XG4gICAgICAgICAgICAgICAgb3JMaXN0LnB1c2goe2NvbnRlbnQ6Y2hhdFZvaWNlPy5nZXQoXCJjb250ZW50XCIpfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHRleHRPclNTTUwpe1xuICAgICAgICAgICAgICAgIG9yTGlzdC5wdXNoKHtzc21sOnRleHRPclNTTUx9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gUGFyc2UuUXVlcnkuZnJvbUpTT04oXCJDaGF0Vm9pY2VcIix7XG4gICAgICAgICAgICAgICAgaW5jbHVkZTpcInZvaWNlRmlsZVwiLFxuICAgICAgICAgICAgICAgIHdoZXJlOntcbiAgICAgICAgICAgICAgICAgICAgJG9yOm9yTGlzdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGV0IGV4aXN0cyA9IGF3YWl0IHF1ZXJ5LmZpcnN0KCk7XG4gICAgICAgICAgICBjaGF0Vm9pY2Uuc2V0KFwidm9pY2VGaWxlXCIsZXhpc3RzPy5nZXQoXCJ2b2ljZUZpbGVcIikpXG4gICAgICAgIH1cblxuICAgICAgICBpZihjaGF0Vm9pY2U/LmdldChcInZvaWNlRmlsZVwiKSl7IC8vIOWtmOWcqOmfs+mikeWImeWKoOi9veWQjuebtOaOpeaSreaUvlxuICAgICAgICAgICAgdGhpcy5wbGF5QXVkaW9EYXRhKGNoYXRWb2ljZT8uZ2V0KFwidm9pY2VGaWxlXCIpPy5nZXQoXCJ1cmxcIiksY2hhdFZvaWNlLGV2ZW50TWFwKVxuICAgICAgICAgICAgcmV0dXJuIGNoYXRWb2ljZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOato+WImeWMuemFjVNTTUzpg6jliIZcbiAgICAgICAgdGV4dE9yU1NNTCA9IHRoaXMuZXh0cmFjdFNTTUxDb250ZW50KHRleHRPclNTTUwpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyh0ZXh0T3JTU01MKVxuICAgICAgICAvLyDmkq3mlL7or63pn7NcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBsZXQgc3BlZWtUeXBlID0gJ3NwZWFrVGV4dEFzeW5jJ1xuICAgICAgICAgICAgaWYodGV4dE9yU1NNTD8uaW5kZXhPZihcIjxcIik+LTEpe1xuICAgICAgICAgICAgICAgIHNwZWVrVHlwZSA9IFwic3BlYWtTc21sQXN5bmNcIlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyDpn7PpopHovpPlh7rmtYFcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhbiBhdWRpbyBvdXRwdXQgc3RyZWFtXG4gICAgICAgICAgICAvLyBjb25zdCBhdWRpb091dHB1dFN0cmVhbSA9IE1pY3Jvc29mdC5Db2duaXRpdmVTZXJ2aWNlcy5TcGVlY2hTREsuQXVkaW9PdXRwdXRTdHJlYW0uY3JlYXRlUHVsbFN0cmVhbSgpO1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGFuIGF1ZGlvIGNvbmZpZ3VyYXRpb24gdXNpbmcgdGhlIGF1ZGlvIG91dHB1dCBzdHJlYW1cbiAgICAgICAgICAgIC8vIGNvbnN0IGF1ZGlvQ29uZmlnID0gTWljcm9zb2Z0LkNvZ25pdGl2ZVNlcnZpY2VzLlNwZWVjaFNESy5BdWRpb0NvbmZpZy5mcm9tU3RyZWFtT3V0cHV0KGF1ZGlvT3V0cHV0U3RyZWFtKTtcblxuICAgICAgICAgICAgLy8g5pKt5pS+57uE5Lu2XG4gICAgICAgICAgICAgLy8gR2V0IHRoZSBhdWRpbyBkYXRhIGZyb20gdGhlIGNhbGxiYWNrIGFuZCBjcmVhdGUgYSBCbG9iXG4gICAgICAgICAgICAvLyAgY29uc3QgYXVkaW9CbG9iID0gYXVkaW9PdXRwdXRTdHJlYW0uYXVkaW9CbG9iKCk7XG4gICAgICAgICAgICAvLyAgY29uc3QgYXVkaW9VcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGF1ZGlvQmxvYik7XG4gICAgICAgICAgICAvLyAgY29uc3QgYXVkaW9FbGVtZW50ID0gbmV3IEF1ZGlvKGF1ZGlvVXJsKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRleHRPclNTTUwpXG4gICAgICAgICAgICB0aGlzLmV2ZW50TWFwPy5vblNwZWFrQmVmb3JlICYmIHRoaXMuZXZlbnRNYXA/Lm9uU3BlYWtCZWZvcmUoKVxuICAgICAgICAgICAgdGhpcy5zeW50aGVzaXplcltzcGVla1R5cGVdKFxuICAgICAgICAgICAgICAgIHRleHRPclNTTUwsXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFxuICAgICAgICAgICAgICAgICAgICAgKiBAZGVzY1xuICAgICAgICAgICAgICAgICAgICAgKiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdkF1ZGlvRGF0YTogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdkF1ZGlvRHVyYXRpb246IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZFcnJvckRldGFpbHM6IFwiVW5hYmxlIHRvIGNvbnRhY3Qgc2VydmVyLiBTdGF0dXNDb2RlOiAxMDA2LFxcbiAgICAgICAgICAgICAgICAgICAgd3NzOi8vZWFzdGFzaWEudHRzLnNwZWVjaC5taWNyb3NvZnQuY29tL2NvZ25pdGl2ZXNlcnZpY2VzL3dlYnNvY2tldC92MSBSZWFzb246ICB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZQcm9wZXJ0aWVzOiBQcm9wZXJ0eUNvbGxlY3Rpb24ge3ByaXZLZXlzOiBBcnJheSgxKSwgcHJpdlZhbHVlczogQXJyYXkoMSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdlJlYXNvbjogMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZSZXN1bHRJZDogXCI1Mzk2OTRDRkE2Q0I0QkFEOTdGOTBBRjc2RTYwOEU2OVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9EYXRhOiAoLi4uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvRHVyYXRpb246ICguLi4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JEZXRhaWxzOiAoLi4uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6ICguLi4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOiAoLi4uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdElkOiAoLi4uKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXN1bHQpXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJlc3VsdC5yZXN1bHRJZClcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocmVzdWx0LnJlYXNvbilcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KVxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gUmVzdWx0UmVhc29uLlN5bnRoZXNpemluZ0F1ZGlvQ29tcGxldGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZW50TWFwPy5vbkF1ZGlvQ29tcGxldGVkICYmIHRoaXMuZXZlbnRNYXA/Lm9uQXVkaW9Db21wbGV0ZWQoKSAgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGF1ZGlvRGF0YSA9IHJlc3VsdD8uYXVkaW9EYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhdFZvaWNlLnNldChcImR1cmF0aW9uXCIsTnVtYmVyKHJlc3VsdD8uYXVkaW9EdXJhdGlvbikvMTAwMDApXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYXlBdWRpb0RhdGEoYXVkaW9EYXRhLGNoYXRWb2ljZSxldmVudE1hcClcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBBdWRpbyBzeW50aGVzaXMgZmluaXNoZWQuIER1cmF0aW9uOiAke2VuZFRpbWUgLSBzdGFydFRpbWV9IG1zYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudE1hcD8ub25TdG9wKCkmJmV2ZW50TWFwPy5vblN0b3AoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNoYXRWb2ljZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoYFNwZWVjaCBzeW50aGVzaXMgZmFpbGVkLiBSZWFzb246ICR7cmVzdWx0LmVycm9yRGV0YWlsc31gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoYEVycm9yIG9jY3VycmVkIGR1cmluZyBzeW50aGVzaXM6ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8g5oqK5omT5pat5pe255qE5LqL5Lu2XG4gICAgb25CcmVhayhvcHRpb25zOntcbiAgICAgICAgcGxheWVkVGltZTpzdHJpbmcgLy8g5bey5pKt5pS+5pe26ZW/XG4gICAgICAgIHBsYXllZFRleHQ6c3RyaW5nIC8vIOW3suaSreaUvuaWh+acrFxuICAgICAgICBsZWZ0VGV4dDpzdHJpbmcgLy8g5Ymp5L2Z5paH5pysXG4gICAgfSl7XG4gICAgICAgIFxuICAgIH1cblxuICAgIHBsYXlBdWRpb0RhdGEoYXVkaW9EYXRhOnN0cmluZyxjaGF0Vm9pY2U6UGFyc2UuT2JqZWN0LGV2ZW50TWFwOmFueSl7XG4gICAgICAgIGxldCB1cmxcbiAgICAgICAgY29uc29sZS5sb2coXCJhdWRpb0RhdGFcIixhdWRpb0RhdGEpXG4gICAgICAgIGlmKGF1ZGlvRGF0YT8uaW5kZXhPZiYmYXVkaW9EYXRhPy5pbmRleE9mKFwiaHR0cFwiKT49LTEpeyAvLyDmkq3mlL5VUkxcbiAgICAgICAgICAgIHVybCA9IGF1ZGlvRGF0YVxuICAgICAgICB9ZWxzZXsgLy8g5pKt5pS+6Z+z6aKR5pWw5o2uXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFthdWRpb0RhdGFdLHt0eXBlOidhdWRpby93YXYnfSk7XG4gICAgICAgICAgICB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICAgICAgdGhpcy51cGxvYWRBbmRTYXZlVm9pY2UoYmxvYixjaGF0Vm9pY2UpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOS7hVVSTOmcgOimgeaSreaUvu+8jHR0c+WQiOaIkOS8muiHquWKqOaSreaUvlxuICAgICAgICAvLyBsZXQgYXVkaW8gPSBuZXcgQXVkaW8odXJsKVxuICAgICAgICBcbiAgICAgICAgY29uc3QgYXVkaW9QbGF5ZXIgPSBBdWRpb1BsYXllci5nZXRJbnN0YW5jZSgpO1xuXG4gICAgICAgIGV2ZW50TWFwPy5vblN0YXJ0ICYmIGV2ZW50TWFwPy5vblN0YXJ0KGNoYXRWb2ljZSk7XG4gICAgICAgIGF1ZGlvUGxheWVyLnNldEF1ZGlvRXZlbnQoXCJvbmxvYWRlZGRhdGFcIiwgKCk9PntcbiAgICAgICAgICAgIGxldCBkdXJhdGlvbiA9IGF1ZGlvUGxheWVyLmR1cmF0aW9uICogMTAwMDtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZHVyYXRpb25cIixkdXJhdGlvbik7XG4gICAgICAgICAgICBpZighY2hhdFZvaWNlPy5nZXQoXCJkdXJhdGlvblwiKSl7XG4gICAgICAgICAgICAgICAgY2hhdFZvaWNlPy5zZXQoXCJkdXJhdGlvblwiLGR1cmF0aW9uKTtcbiAgICAgICAgICAgICAgICBjaGF0Vm9pY2U/LnNhdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV2ZW50TWFwPy5vbkxvYWRlZCAmJiBldmVudE1hcD8ub25Mb2FkZWQoYXVkaW9QbGF5ZXIpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGF1ZGlvUGxheWVyLnNldEF1ZGlvRXZlbnQoXCJvbmFib3J0XCIsICgpPT57XG4gICAgICAgICAgICBldmVudE1hcD8ub25TdG9wICYmIGV2ZW50TWFwPy5vblN0b3AoKTtcbiAgICAgICAgfSlcbiAgICAgICAgYXVkaW9QbGF5ZXIuc2V0QXVkaW9FdmVudChcIm9uZXJyb3JcIiwgKCk9PntcbiAgICAgICAgICAgIGV2ZW50TWFwPy5vblN0b3AgJiYgZXZlbnRNYXA/Lm9uU3RvcCgpO1xuICAgICAgICB9KVxuICAgICAgICBhdWRpb1BsYXllci5zZXRBdWRpb0V2ZW50KFwib25wYXVzZVwiLCAoKT0+e1xuICAgICAgICAgICAgZXZlbnRNYXA/Lm9uU3RvcCAmJiBldmVudE1hcD8ub25TdG9wKCk7XG4gICAgICAgIH0pXG4gICAgICAgIGF1ZGlvUGxheWVyLnNldEF1ZGlvRXZlbnQoXCJvbmVuZGVkXCIsICgpPT57XG4gICAgICAgICAgICBldmVudE1hcD8ub25TdG9wICYmIGV2ZW50TWFwPy5vblN0b3AoKTtcbiAgICAgICAgfSlcbiAgICAgICAgYXVkaW9QbGF5ZXIuc2V0QXVkaW9FdmVudChcIm9uY2xvc2VcIiwgKCk9PntcbiAgICAgICAgICAgIGV2ZW50TWFwPy5vblN0b3AgJiYgZXZlbnRNYXA/Lm9uU3RvcCgpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGxldCBwbGF5QXVkaW8gPSAoKT0+e1xuICAgICAgICAgICAgYXVkaW9QbGF5ZXIucGxheSh1cmwpLnRoZW4oKCk9PnsgLy8g6Ziy5q2i55So5oi35peg5Lqk5LqS5LiN6IO96buY6K6k5pKt5pS+XG4gICAgICAgICAgICB9KS5jYXRjaCgoKT0+e1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInBsYXlBdWRpb1wiKVxuICAgICAgICAgICAgICAgICAgICBwbGF5QXVkaW8oKTtcbiAgICAgICAgICAgICAgICB9LCAyMDApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBwbGF5QXVkaW8oKTtcbiAgICB9XG4gICAgYXN5bmMgdXBsb2FkQW5kU2F2ZVZvaWNlKGJsb2IsY2hhdFZvaWNlKXtcbiAgICAgICAgaWYodGhpcy51cGxvYWRTZXJ2KXtcbiAgICAgICAgICAgIGxldCBpZCA9IGNoYXRWb2ljZT8uaWQgfHwgdGhpcy51cGxvYWRTZXJ2Py5nZW5NZDUoY2hhdFZvaWNlPy5nZXQoXCJjb250ZW50XCIpfHxjaGF0Vm9pY2U/LmdldChcInNzbWxcIikpXG4gICAgICAgICAgICBsZXQgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIGxldCBmaWxlbmFtZSA9IGlkICsgbm93LmdldEZ1bGxZZWFyKCkrKG5vdy5nZXRNb250aCgpKzEpK25vdy5nZXREYXRlKCkrbm93LmdldEhvdXJzKCkrbm93LmdldE1pbnV0ZXMoKStub3cuZ2V0U2Vjb25kcygpICsgXCIud2F2XCJcbiAgICAgICAgICAgIGxldCBmaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBmaWxlbmFtZSwgeyB0eXBlOiAnYXVkaW8vd2F2JyB9KTtcbiAgICAgICAgICAgIGxldCBmaWxlUmVzdWx0ID0gYXdhaXQgdGhpcy51cGxvYWRTZXJ2LnVwbG9hZChmaWxlLChyZXMpPT57XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzKSAvLyDkuIrkvKDov5vluqbvvIzlj6/ku6XlkIzmraXmm7TmlrDpobXpnaLkuIrkvKDnmb7liIbmr5RcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGV0IGF0dGFjaFBvaW50ZXIgPSB7X190eXBlOlwiUG9pbnRlclwiLGNsYXNzTmFtZTpcIkF0dGFjaG1lbnRcIixvYmplY3RJZDpmaWxlUmVzdWx0Py5pZH1cbiAgICAgICAgICAgIGlmKGF0dGFjaFBvaW50ZXI/Lm9iamVjdElkKXtcbiAgICAgICAgICAgICAgICBjaGF0Vm9pY2Uuc2V0KFwidm9pY2VGaWxlXCIsYXR0YWNoUG9pbnRlcilcbiAgICAgICAgICAgICAgICBjaGF0Vm9pY2UgPSBhd2FpdCBjaGF0Vm9pY2Uuc2F2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgIH1cbn0iXX0=
|
|
@@ -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/tts/index.mjs
|
|
7
|
-
*/
|
|
8
|
-
export*from"./fmode-tts-class";
|
|
9
|
-
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL3ZvaWNlL3R0cy9pbmRleC5tanM=`
|
|
10
|
-
|
|
1
|
+
export * from "./fmode-tts-class";
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2Mvdm9pY2UvdHRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQW1CLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9mbW9kZS10dHMtY2xhc3NcIiJdfQ==
|