fmode-ng 0.0.41 → 0.0.43
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/esm2022/fmode-ng.mjs +10 -5
- package/esm2022/lib/aigc/agent/agent.prompt.mjs +10 -122
- package/esm2022/lib/aigc/agent/index.mjs +10 -2
- 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 -97
- package/esm2022/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs +10 -104
- package/esm2022/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +10 -111
- 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 -166
- package/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs +10 -36
- package/esm2022/lib/aigc/chat/chat-header-area/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-list/chat-list.component.mjs +8 -141
- 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 -92
- package/esm2022/lib/aigc/chat/chat-message-card/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-modal-input/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.mjs +8 -207
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-input.component.mjs +10 -236
- package/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs +10 -137
- package/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs +10 -69
- 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 -269
- 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 -94
- package/esm2022/lib/aigc/index.mjs +10 -13
- package/esm2022/lib/aigc/service-fmai/fmai.service.mjs +10 -21
- package/esm2022/lib/aigc/service-fmai/service-chat/chat-class.mjs +8 -736
- package/esm2022/lib/aigc/service-fmai/service-chat/chat.service.mjs +8 -181
- 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.service.mjs +8 -229
- package/esm2022/lib/aigc/service-fmai/service-imagine/index.mjs +10 -2
- package/esm2022/lib/aigc/voice/audio.player.mjs +10 -52
- package/esm2022/lib/aigc/voice/class-asr.mjs +8 -79
- package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +8 -501
- package/esm2022/lib/aigc/voice/index.mjs +10 -3
- package/esm2022/lib/aigc/voice/lib/pcm2wav.mjs +10 -38
- package/esm2022/lib/aigc/voice/lib/resample.mjs +10 -34
- package/esm2022/lib/aigc/voice/stream.player.mjs +10 -0
- package/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs +8 -233
- package/esm2022/lib/aigc/voice/tts/index.mjs +10 -2
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.component.mjs +10 -190
- 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 -110
- package/esm2022/lib/map/page-map.start/page-map.start.component.mjs +8 -98
- package/esm2022/lib/map/page-plan-route/page-plan-route.component.mjs +8 -100
- package/esm2022/lib/nova-cloud/index.mjs +10 -2
- package/esm2022/lib/nova-cloud/nova-cloud.service.mjs +10 -148
- package/esm2022/lib/platform/cross.service.mjs +10 -63
- 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 -236
- 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 -130
- package/esm2022/lib/storage/service-upload/index.mjs +10 -2
- package/esm2022/lib/storage/service-upload/nova-upload.service.mjs +8 -462
- package/esm2022/lib/storage/service-upload/util-file-md5.mjs +10 -28
- package/esm2022/lib/storage/storage.module.mjs +10 -41
- package/esm2022/lib/user/account/account.service.mjs +10 -221
- package/esm2022/lib/user/captcha/captcha.component.mjs +10 -135
- package/esm2022/lib/user/comp-user-avatar/comp-user-avatar.component.mjs +10 -62
- 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 -373
- package/esm2022/lib/user/login/login.component.mjs +10 -913
- package/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs +10 -273
- 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 -115
- package/esm2022/lib/user/profile/profile.module.mjs +10 -57
- 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 -106
- 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 -13
- package/fesm2022/fmode-ng.mjs +7 -8895
- package/fesm2022/fmode-ng.mjs.map +1 -1
- package/lib/aigc/voice/fmode-voice.service.d.ts +18 -1
- package/lib/aigc/voice/stream.player.d.ts +10 -0
- package/lib/aigc/voice/tts/fmode-tts-class.d.ts +2 -2
- package/package.json +1 -1
|
@@ -1,97 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import *
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
this.animClass = "waiting";
|
|
12
|
-
this.imageMap = {};
|
|
13
|
-
}
|
|
14
|
-
playWave() {
|
|
15
|
-
if (!this.wave && Recorder.WaveView) {
|
|
16
|
-
this.wave = Recorder.WaveView({ elem: ".record-wave-avatar", keep: false });
|
|
17
|
-
}
|
|
18
|
-
// 生成随机的pcmData
|
|
19
|
-
function generatePcmData(length) {
|
|
20
|
-
const pcmData = [];
|
|
21
|
-
for (let i = 0; i < length; i++) {
|
|
22
|
-
pcmData.push(Math.floor(Math.random() * 65536) - 32768);
|
|
23
|
-
}
|
|
24
|
-
return pcmData;
|
|
25
|
-
}
|
|
26
|
-
// 生成随机的powerLevel
|
|
27
|
-
function generatePowerLevel() {
|
|
28
|
-
return Math.random() * 100;
|
|
29
|
-
}
|
|
30
|
-
// 生成随机的sampleRate
|
|
31
|
-
function generateSampleRate() {
|
|
32
|
-
const sampleRates = [44100, 48000, 88200, 96000];
|
|
33
|
-
return sampleRates[Math.floor(Math.random() * sampleRates.length)];
|
|
34
|
-
}
|
|
35
|
-
// 生成示例数据
|
|
36
|
-
let powerLevel = generatePowerLevel(); // 生成随机的powerLevel
|
|
37
|
-
// 使用生成的数据调用wave.input函数
|
|
38
|
-
this.waveInterval = setInterval(() => {
|
|
39
|
-
let sampleRate = generateSampleRate(); // 生成随机的sampleRate
|
|
40
|
-
let pcmData = generatePcmData(1000); // 生成长度为1000的pcmData数组
|
|
41
|
-
this.wave.input(pcmData, powerLevel, sampleRate);
|
|
42
|
-
}, 40);
|
|
43
|
-
}
|
|
44
|
-
stopWave() {
|
|
45
|
-
clearInterval(this.waveInterval);
|
|
46
|
-
}
|
|
47
|
-
ngAfterViewInit() {
|
|
48
|
-
}
|
|
49
|
-
ngOnInit() {
|
|
50
|
-
setTimeout(() => {
|
|
51
|
-
this.imageMap = this.fmodeChat.avatarConfig?.image;
|
|
52
|
-
this.avatarImage.nativeElement.src = this.imageMap?.waiting;
|
|
53
|
-
// 绑定当前形象插件动作函数
|
|
54
|
-
this.fmodeChat.playAnimation = this.playAnimation;
|
|
55
|
-
}, 1500);
|
|
56
|
-
}
|
|
57
|
-
playAnimation() {
|
|
58
|
-
let that = this;
|
|
59
|
-
return (name) => {
|
|
60
|
-
let img = that.avatarImage.nativeElement;
|
|
61
|
-
that.animClass = name;
|
|
62
|
-
that.stopWave();
|
|
63
|
-
switch (name) {
|
|
64
|
-
case "thinking":
|
|
65
|
-
img.style.animationPlayState = 'running';
|
|
66
|
-
break;
|
|
67
|
-
case "talking":
|
|
68
|
-
img.style.animationPlayState = 'running';
|
|
69
|
-
that.playWave();
|
|
70
|
-
break;
|
|
71
|
-
case "listening":
|
|
72
|
-
img.style.animationPlayState = 'pause';
|
|
73
|
-
break;
|
|
74
|
-
case "waiting":
|
|
75
|
-
img.style.animationPlayState = 'running';
|
|
76
|
-
break;
|
|
77
|
-
default:
|
|
78
|
-
img.style.animationPlayState = 'paused';
|
|
79
|
-
break;
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CompAvatarRoleImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
84
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CompAvatarRoleImageComponent, isStandalone: true, selector: "fm-avatar-role-image", inputs: { fmodeChat: "fmodeChat", role: "role" }, viewQueries: [{ propertyName: "avatarImage", first: true, predicate: ["avatarImage"], descendants: true }], ngImport: i0, template: "<div class=\"page\">\n <div class=\"avatar\" [class]=\"animClass\">\n <div class=\"avatar-photo\">\n <img #avatarImage alt=\"\">\n <!-- \u97F3\u9891\u6CE2\u52A8 -->\n <div class=\"record-wave-avatar\">\n </div>\n </div>\n </div>\n</div>", styles: [".page{position:relative;width:100vw;height:100%;top:0;left:0;display:flex;justify-content:center;align-items:center;background-color:#000}.avatar{width:100%;display:flex;justify-content:center;align-items:center}.avatar .avatar-photo{position:relative;margin-top:-10vh;width:80%}.avatar .avatar-photo img{border-radius:10px}.avatar .record-wave-avatar{height:50px;width:100%;position:absolute;float:left;left:0;bottom:0}.thinking,.listening,.waiting,.talking{animation-duration:2s;animation-play-state:running;animation-iteration-count:infinite;animation-timing-function:ease-in-out}@keyframes waitingAnimation{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(1)}}@keyframes thinkingAnimation{0%{transform:rotate(0)}30%{transform:rotate(10deg)}60%{transform:rotate(-10deg)}to{transform:rotate(0)}}.thinking{animation-name:thinkingAnimation}.waiting{animation-name:waitingAnimation}.listening{animation-name:listeningAnimation}.talking{animation-name:talkingAnimation}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }] }); }
|
|
85
|
-
}
|
|
86
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CompAvatarRoleImageComponent, decorators: [{
|
|
87
|
-
type: Component,
|
|
88
|
-
args: [{ selector: 'fm-avatar-role-image', standalone: true, imports: [CommonModule, FormsModule], template: "<div class=\"page\">\n <div class=\"avatar\" [class]=\"animClass\">\n <div class=\"avatar-photo\">\n <img #avatarImage alt=\"\">\n <!-- \u97F3\u9891\u6CE2\u52A8 -->\n <div class=\"record-wave-avatar\">\n </div>\n </div>\n </div>\n</div>", styles: [".page{position:relative;width:100vw;height:100%;top:0;left:0;display:flex;justify-content:center;align-items:center;background-color:#000}.avatar{width:100%;display:flex;justify-content:center;align-items:center}.avatar .avatar-photo{position:relative;margin-top:-10vh;width:80%}.avatar .avatar-photo img{border-radius:10px}.avatar .record-wave-avatar{height:50px;width:100%;position:absolute;float:left;left:0;bottom:0}.thinking,.listening,.waiting,.talking{animation-duration:2s;animation-play-state:running;animation-iteration-count:infinite;animation-timing-function:ease-in-out}@keyframes waitingAnimation{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(1)}}@keyframes thinkingAnimation{0%{transform:rotate(0)}30%{transform:rotate(10deg)}60%{transform:rotate(-10deg)}to{transform:rotate(0)}}.thinking{animation-name:thinkingAnimation}.waiting{animation-name:waitingAnimation}.listening{animation-name:listeningAnimation}.talking{animation-name:talkingAnimation}\n"] }]
|
|
89
|
-
}], propDecorators: { avatarImage: [{
|
|
90
|
-
type: ViewChild,
|
|
91
|
-
args: ["avatarImage"]
|
|
92
|
-
}], fmodeChat: [{
|
|
93
|
-
type: Input
|
|
94
|
-
}], role: [{
|
|
95
|
-
type: Input
|
|
96
|
-
}] } });
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcC1hdmF0YXItcm9sZS1pbWFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvYXZhdGFyL2NvbXAtYXZhdGFyLXJvbGUtaW1hZ2UvY29tcC1hdmF0YXItcm9sZS1pbWFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvYXZhdGFyL2NvbXAtYXZhdGFyLXJvbGUtaW1hZ2UvY29tcC1hdmF0YXItcm9sZS1pbWFnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXdCLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHL0MsT0FBTyxRQUFRLE1BQU0sZUFBZSxDQUFBO0FBQ3BDLE9BQU8sdUNBQXVDLENBQUE7QUFFOUMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNENBQTRDLENBQUM7O0FBU3ZFLE1BQU0sT0FBTyw0QkFBNEI7SUFQekM7UUFTRSxjQUFTLEdBQVUsU0FBUyxDQUFBO1FBK0M1QixhQUFRLEdBQU8sRUFBRSxDQUFBO0tBbUNsQjtJQTVFQyxRQUFRO1FBQ04sSUFBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUUsUUFBUSxDQUFDLFFBQVEsRUFBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxJQUFJLEdBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFDLElBQUksRUFBQyxxQkFBcUIsRUFBQyxJQUFJLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQztR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QUssQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUM7b0JBQ3pDLE1BQU07Z0JBQ1I7b0JBQ0UsR0FBRyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxRQUFRLENBQUM7b0JBQ3hDLE1BQU07WUFDVixDQUFDO1FBQ0gsQ0FBQyxDQUFBO0lBQ0gsQ0FBQzsrR0FuRlUsNEJBQTRCO21HQUE1Qiw0QkFBNEIsOE9DbEJ6Qyw4U0FTTSxvaENES00sWUFBWSw4QkFBQyxXQUFXOzs0RkFJdkIsNEJBQTRCO2tCQVB4QyxTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUMsV0FBVyxDQUFDOzhCQUtULFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFHZixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsT25Jbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGbW9kZUF2YXRhclJvbGVDb21wIH0gZnJvbSAnLi4vaW50ZXJmYWNlLWF2YXRhci1yb2xlJztcblxuaW1wb3J0IFJlY29yZGVyIGZyb20gJ3JlY29yZGVyLWNvcmUnXG5pbXBvcnQgJ3JlY29yZGVyLWNvcmUvc3JjL2V4dGVuc2lvbnMvd2F2ZXZpZXcnXG5cbmltcG9ydCBQYXJzZSBmcm9tIFwicGFyc2VcIjtcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm1vZGVDaGF0IH0gZnJvbSAnLi4vLi4vc2VydmljZS1mbWFpL3NlcnZpY2UtY2hhdC9jaGF0LWNsYXNzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZm0tYXZhdGFyLXJvbGUtaW1hZ2UnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLEZvcm1zTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbXAtYXZhdGFyLXJvbGUtaW1hZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb21wLWF2YXRhci1yb2xlLWltYWdlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ29tcEF2YXRhclJvbGVJbWFnZUNvbXBvbmVudCBpbXBsZW1lbnRzIEZtb2RlQXZhdGFyUm9sZUNvbXAsQWZ0ZXJWaWV3SW5pdCxPbkluaXQge1xuICBAVmlld0NoaWxkKFwiYXZhdGFySW1hZ2VcIikgYXZhdGFySW1hZ2U6RWxlbWVudFJlZlxuICBhbmltQ2xhc3M6c3RyaW5nID0gXCJ3YWl0aW5nXCJcblxuICBASW5wdXQoKSBmbW9kZUNoYXQ6Rm1vZGVDaGF0O1xuICBASW5wdXQoKSByb2xlOlBhcnNlLk9iamVjdDtcbiAgd2F2ZTphbnlcbiAgd2F2ZUludGVydmFsOmFueVxuICBwbGF5V2F2ZSgpe1xuICAgIGlmKCF0aGlzLndhdmUmJlJlY29yZGVyLldhdmVWaWV3KXtcbiAgICAgIHRoaXMud2F2ZT1SZWNvcmRlci5XYXZlVmlldyh7ZWxlbTpcIi5yZWNvcmQtd2F2ZS1hdmF0YXJcIixrZWVwOmZhbHNlfSk7XG4gICAgfVxuXG4gICAgICAgICAgICAvLyDnlJ/miJDpmo/mnLrnmoRwY21EYXRhXG4gICAgICAgIGZ1bmN0aW9uIGdlbmVyYXRlUGNtRGF0YShsZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBwY21EYXRhID0gW107XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcGNtRGF0YS5wdXNoKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDY1NTM2KSAtIDMyNzY4KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHBjbURhdGE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDnlJ/miJDpmo/mnLrnmoRwb3dlckxldmVsXG4gICAgICAgIGZ1bmN0aW9uIGdlbmVyYXRlUG93ZXJMZXZlbCgpIHtcbiAgICAgICAgICByZXR1cm4gTWF0aC5yYW5kb20oKSAqIDEwMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOeUn+aIkOmaj+acuueahHNhbXBsZVJhdGVcbiAgICAgICAgZnVuY3Rpb24gZ2VuZXJhdGVTYW1wbGVSYXRlKCkge1xuICAgICAgICAgIGNvbnN0IHNhbXBsZVJhdGVzID0gWzQ0MTAwLCA0ODAwMCwgODgyMDAsIDk2MDAwXTtcbiAgICAgICAgICByZXR1cm4gc2FtcGxlUmF0ZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogc2FtcGxlUmF0ZXMubGVuZ3RoKV07XG4gICAgICAgIH1cbiAgICAgICAgLy8g55Sf5oiQ56S65L6L5pWw5o2uXG4gICAgICAgIFxuICAgICAgICBsZXQgcG93ZXJMZXZlbCA9IGdlbmVyYXRlUG93ZXJMZXZlbCgpOyAvLyDnlJ/miJDpmo/mnLrnmoRwb3dlckxldmVsXG4gICAgICAgIC8vIOS9v+eUqOeUn+aIkOeahOaVsOaNruiwg+eUqHdhdmUuaW5wdXTlh73mlbBcbiAgICAgICAgdGhpcy53YXZlSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKT0+e1xuICAgICAgICAgIGxldCBzYW1wbGVSYXRlID0gZ2VuZXJhdGVTYW1wbGVSYXRlKCk7IC8vIOeUn+aIkOmaj+acuueahHNhbXBsZVJhdGVcbiAgICAgICAgICBsZXQgcGNtRGF0YSA9IGdlbmVyYXRlUGNtRGF0YSgxMDAwKTsgLy8g55Sf5oiQ6ZW/5bqm5Li6MTAwMOeahHBjbURhdGHmlbDnu4RcbiAgICAgICAgICB0aGlzLndhdmUuaW5wdXQocGNtRGF0YSwgcG93ZXJMZXZlbCwgc2FtcGxlUmF0ZSk7XG4gICAgICAgIH0sNDApXG4gIH1cbiAgc3RvcFdhdmUoKXtcbiAgICBjbGVhckludGVydmFsKHRoaXMud2F2ZUludGVydmFsKVxuICB9XG4gIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuXG4gIH1cblxuICBpbWFnZU1hcDphbnkgPSB7fVxuICBuZ09uSW5pdCgpe1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pbWFnZU1hcCA9IHRoaXMuZm1vZGVDaGF0LmF2YXRhckNvbmZpZz8uaW1hZ2U7XG4gICAgICB0aGlzLmF2YXRhckltYWdlLm5hdGl2ZUVsZW1lbnQuc3JjID0gdGhpcy5pbWFnZU1hcD8ud2FpdGluZztcbiAgICAgIC8vIOe7keWumuW9k+WJjeW9ouixoeaPkuS7tuWKqOS9nOWHveaVsFxuICAgICAgdGhpcy5mbW9kZUNoYXQucGxheUFuaW1hdGlvbiA9IHRoaXMucGxheUFuaW1hdGlvbiBcbiAgICB9LCAxNTAwKTtcbiAgfVxuICBwbGF5QW5pbWF0aW9uKCl7XG4gICAgbGV0IHRoYXQgPSB0aGlzXG4gICAgcmV0dXJuIChuYW1lOnN0cmluZyk9PntcbiAgICAgIGxldCBpbWcgPSAgdGhhdC5hdmF0YXJJbWFnZS5uYXRpdmVFbGVtZW50XG4gICAgICB0aGF0LmFuaW1DbGFzcyA9IG5hbWVcbiAgICAgIHRoYXQuc3RvcFdhdmUoKVxuICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgIGNhc2UgXCJ0aGlua2luZ1wiOlxuICAgICAgICAgIGltZy5zdHlsZS5hbmltYXRpb25QbGF5U3RhdGUgPSAncnVubmluZyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ0YWxraW5nXCI6XG4gICAgICAgICAgaW1nLnN0eWxlLmFuaW1hdGlvblBsYXlTdGF0ZSA9ICdydW5uaW5nJztcbiAgICAgICAgICB0aGF0LnBsYXlXYXZlKClcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImxpc3RlbmluZ1wiOlxuICAgICAgICAgIGltZy5zdHlsZS5hbmltYXRpb25QbGF5U3RhdGUgPSAncGF1c2UnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwid2FpdGluZ1wiOlxuICAgICAgICAgIGltZy5zdHlsZS5hbmltYXRpb25QbGF5U3RhdGUgPSAncnVubmluZyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaW1nLnN0eWxlLmFuaW1hdGlvblBsYXlTdGF0ZSA9ICdwYXVzZWQnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInBhZ2VcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyXCIgW2NsYXNzXT1cImFuaW1DbGFzc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLXBob3RvXCI+XG4gICAgICAgICAgICA8aW1nICNhdmF0YXJJbWFnZSBhbHQ9XCJcIj5cbiAgICAgICAgICAgIDwhLS0g6Z+z6aKR5rOi5YqoIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC13YXZlLWF2YXRhclwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|
|
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/avatar/comp-avatar-role-image/comp-avatar-role-image.component.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Component,ElementRef,Input,ViewChild}from"@angular/core";import{CommonModule}from"@angular/common";import Recorder from"recorder-core";import"recorder-core/src/extensions/waveview";import Parse from"parse";import{FormsModule}from"@angular/forms";import{FmodeChat}from"../../service-fmai/service-chat/chat-class";import*as i0 from"@angular/core";export class CompAvatarRoleImageComponent{constructor(){this.animClass="waiting",this.imageMap={}}playWave(){!this.wave&&Recorder.WaveView&&(this.wave=Recorder.WaveView({elem:".record-wave-avatar",keep:!1}));let a=function generatePowerLevel(){return 100*Math.random()}();this.waveInterval=setInterval((()=>{let t=function generateSampleRate(){const a=[44100,48e3,88200,96e3];return a[Math.floor(Math.random()*a.length)]}(),e=function generatePcmData(a){const t=[];for(let e=0;e<a;e++)t.push(Math.floor(65536*Math.random())-32768);return t}(1e3);this.wave.input(e,a,t)}),40)}stopWave(){clearInterval(this.waveInterval)}ngAfterViewInit(){}ngOnInit(){setTimeout((()=>{this.imageMap=this.fmodeChat.avatarConfig?.image,this.avatarImage.nativeElement.src=this.imageMap?.waiting,this.fmodeChat.playAnimation=this.playAnimation}),1500)}playAnimation(){let a=this;return t=>{let e=a.avatarImage.nativeElement;switch(a.animClass=t,a.stopWave(),t){case"thinking":case"waiting":e.style.animationPlayState="running";break;case"talking":e.style.animationPlayState="running",a.playWave();break;case"listening":e.style.animationPlayState="pause";break;default:e.style.animationPlayState="paused"}}}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CompAvatarRoleImageComponent,deps:[],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:CompAvatarRoleImageComponent,isStandalone:!0,selector:"fm-avatar-role-image",inputs:{fmodeChat:"fmodeChat",role:"role"},viewQueries:[{propertyName:"avatarImage",first:!0,predicate:["avatarImage"],descendants:!0}],ngImport:i0,template:'<div class="page">\n <div class="avatar" [class]="animClass">\n <div class="avatar-photo">\n <img #avatarImage alt="">\n \x3c!-- 音频波动 --\x3e\n <div class="record-wave-avatar">\n </div>\n </div>\n </div>\n</div>',styles:[".page{position:relative;width:100vw;height:100%;top:0;left:0;display:flex;justify-content:center;align-items:center;background-color:#000}.avatar{width:100%;display:flex;justify-content:center;align-items:center}.avatar .avatar-photo{position:relative;margin-top:-10vh;width:80%}.avatar .avatar-photo img{border-radius:10px}.avatar .record-wave-avatar{height:50px;width:100%;position:absolute;float:left;left:0;bottom:0}.thinking,.listening,.waiting,.talking{animation-duration:2s;animation-play-state:running;animation-iteration-count:infinite;animation-timing-function:ease-in-out}@keyframes waitingAnimation{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(1)}}@keyframes thinkingAnimation{0%{transform:rotate(0)}30%{transform:rotate(10deg)}60%{transform:rotate(-10deg)}to{transform:rotate(0)}}.thinking{animation-name:thinkingAnimation}.waiting{animation-name:waitingAnimation}.listening{animation-name:listeningAnimation}.talking{animation-name:talkingAnimation}\n"],dependencies:[{kind:"ngmodule",type:CommonModule},{kind:"ngmodule",type:FormsModule}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CompAvatarRoleImageComponent,decorators:[{type:Component,args:[{selector:"fm-avatar-role-image",standalone:!0,imports:[CommonModule,FormsModule],template:'<div class="page">\n <div class="avatar" [class]="animClass">\n <div class="avatar-photo">\n <img #avatarImage alt="">\n \x3c!-- 音频波动 --\x3e\n <div class="record-wave-avatar">\n </div>\n </div>\n </div>\n</div>',styles:[".page{position:relative;width:100vw;height:100%;top:0;left:0;display:flex;justify-content:center;align-items:center;background-color:#000}.avatar{width:100%;display:flex;justify-content:center;align-items:center}.avatar .avatar-photo{position:relative;margin-top:-10vh;width:80%}.avatar .avatar-photo img{border-radius:10px}.avatar .record-wave-avatar{height:50px;width:100%;position:absolute;float:left;left:0;bottom:0}.thinking,.listening,.waiting,.talking{animation-duration:2s;animation-play-state:running;animation-iteration-count:infinite;animation-timing-function:ease-in-out}@keyframes waitingAnimation{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(1)}}@keyframes thinkingAnimation{0%{transform:rotate(0)}30%{transform:rotate(10deg)}60%{transform:rotate(-10deg)}to{transform:rotate(0)}}.thinking{animation-name:thinkingAnimation}.waiting{animation-name:waitingAnimation}.listening{animation-name:listeningAnimation}.talking{animation-name:talkingAnimation}\n"]}]}],propDecorators:{avatarImage:[{type:ViewChild,args:["avatarImage"]}],fmodeChat:[{type:Input}],role:[{type:Input}]}});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2F2YXRhci9jb21wLWF2YXRhci1yb2xlLWltYWdlL2NvbXAtYXZhdGFyLXJvbGUtaW1hZ2UuY29tcG9uZW50Lm1qcw==`
|
|
10
|
+
|
|
@@ -1,104 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import { FmVideoComponent }
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
import * as i1 from "@ionic/angular/standalone";
|
|
12
|
-
export class CompAvatarRoleVideoComponent {
|
|
13
|
-
constructor(navCtrl) {
|
|
14
|
-
this.navCtrl = navCtrl;
|
|
15
|
-
this.animClass = "waiting";
|
|
16
|
-
this.onClose = new EventEmitter;
|
|
17
|
-
this.videoMap = {};
|
|
18
|
-
}
|
|
19
|
-
close() {
|
|
20
|
-
this.onClose.emit(true);
|
|
21
|
-
this.fmodeChat.isAvatarShow = false;
|
|
22
|
-
}
|
|
23
|
-
goBack() {
|
|
24
|
-
this.navCtrl.back();
|
|
25
|
-
}
|
|
26
|
-
playWave() {
|
|
27
|
-
if (!this.wave && Recorder.WaveView) {
|
|
28
|
-
this.wave = Recorder.WaveView({ elem: ".record-wave-avatar", keep: false });
|
|
29
|
-
}
|
|
30
|
-
// 生成随机的pcmData
|
|
31
|
-
function generatePcmData(length) {
|
|
32
|
-
const pcmData = [];
|
|
33
|
-
for (let i = 0; i < length; i++) {
|
|
34
|
-
pcmData.push(Math.floor(Math.random() * 65536) - 32768);
|
|
35
|
-
}
|
|
36
|
-
return pcmData;
|
|
37
|
-
}
|
|
38
|
-
// 生成随机的powerLevel
|
|
39
|
-
function generatePowerLevel() {
|
|
40
|
-
return Math.random() * 100;
|
|
41
|
-
}
|
|
42
|
-
// 生成随机的sampleRate
|
|
43
|
-
function generateSampleRate() {
|
|
44
|
-
const sampleRates = [44100, 48000, 88200, 96000];
|
|
45
|
-
return sampleRates[Math.floor(Math.random() * sampleRates.length)];
|
|
46
|
-
}
|
|
47
|
-
// 生成示例数据
|
|
48
|
-
let powerLevel = generatePowerLevel(); // 生成随机的powerLevel
|
|
49
|
-
// 使用生成的数据调用wave.input函数
|
|
50
|
-
this.waveInterval = setInterval(() => {
|
|
51
|
-
let sampleRate = generateSampleRate(); // 生成随机的sampleRate
|
|
52
|
-
let pcmData = generatePcmData(1000); // 生成长度为1000的pcmData数组
|
|
53
|
-
this.wave.input(pcmData, powerLevel, sampleRate);
|
|
54
|
-
}, 40);
|
|
55
|
-
}
|
|
56
|
-
stopWave() {
|
|
57
|
-
clearInterval(this.waveInterval);
|
|
58
|
-
}
|
|
59
|
-
ngAfterViewInit() {
|
|
60
|
-
}
|
|
61
|
-
ngOnInit() {
|
|
62
|
-
setTimeout(() => {
|
|
63
|
-
this.videoMap = this.fmodeChat.avatarConfig?.video;
|
|
64
|
-
this.playVideo(this.videoMap?.waiting);
|
|
65
|
-
// 绑定当前形象插件动作函数
|
|
66
|
-
this.fmodeChat.playAnimation = this.playAnimation;
|
|
67
|
-
}, 1500);
|
|
68
|
-
}
|
|
69
|
-
playAnimation() {
|
|
70
|
-
let that = this;
|
|
71
|
-
return (name) => {
|
|
72
|
-
that.animClass = name;
|
|
73
|
-
that.stopWave();
|
|
74
|
-
that.playVideo(that.videoMap[name]);
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
playVideo(src) {
|
|
78
|
-
this.avatarVideo.play(src);
|
|
79
|
-
// this.avatarVideo.nativeElement.autoplay = true;
|
|
80
|
-
// this.avatarVideo.nativeElement.loop = true;
|
|
81
|
-
// this.avatarVideo.nativeElement.controls = false;
|
|
82
|
-
// this.avatarVideo.nativeElement.src = src;
|
|
83
|
-
// this.avatarVideo.nativeElement.play();
|
|
84
|
-
}
|
|
85
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CompAvatarRoleVideoComponent, deps: [{ token: i1.NavController }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
86
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CompAvatarRoleVideoComponent, isStandalone: true, selector: "fm-avatar-role-video", inputs: { fmodeChat: "fmodeChat", role: "role" }, outputs: { onClose: "onClose" }, viewQueries: [{ propertyName: "avatarVideo", first: true, predicate: FmVideoComponent, descendants: true }], ngImport: i0, template: "<div class=\"page\">\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"goBack()\">\n <ion-icon name=\"chevron-back-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"close()\"> <ion-icon name=\"chevron-collapse-outline\"></ion-icon> </ion-button>\n </ion-buttons>\n </ion-toolbar>\n <div class=\"avatar\" [class]=\"animClass\">\n <div class=\"avatar-photo\">\n <fm-video #avatarVideo alt=\"\"></fm-video>\n <!-- \u97F3\u9891\u6CE2\u52A8 -->\n <div class=\"record-wave-avatar\">\n </div>\n </div>\n </div>\n</div>", styles: ["ion-toolbar{position:fixed;top:0;left:0;width:100vw;--background:transparent}.page{position:relative;width:100vw;height:100%;top:0;left:0;display:flex;justify-content:center;align-items:center;background-color:#000}.avatar{height:100%;width:100%;display:flex;justify-content:center;align-items:center}.avatar .avatar-photo{position:relative;display:flex;justify-content:center;width:80%;max-height:100%}.avatar .avatar-photo fm-video{border-radius:50%;max-height:100%;max-width:100%}.avatar .record-wave-avatar{height:50px;width:100%;position:absolute;float:left;left:0;bottom:0}.thinking,.listening,.waiting,.talking{animation-duration:2s;animation-play-state:running;animation-iteration-count:infinite;animation-timing-function:ease-in-out}@keyframes waitingAnimation{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(1)}}@keyframes thinkingAnimation{0%{transform:rotate(0)}30%{transform:rotate(10deg)}60%{transform:rotate(-10deg)}to{transform:rotate(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: FmVideoComponent, selector: "fm-video", inputs: ["url", "canvasStyle"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }] }); }
|
|
87
|
-
}
|
|
88
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CompAvatarRoleVideoComponent, decorators: [{
|
|
89
|
-
type: Component,
|
|
90
|
-
args: [{ selector: 'fm-avatar-role-video', standalone: true, imports: [CommonModule, FormsModule, FmVideoComponent,
|
|
91
|
-
IonIcon,
|
|
92
|
-
IonToolbar, IonButtons, IonButton,
|
|
93
|
-
], template: "<div class=\"page\">\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"goBack()\">\n <ion-icon name=\"chevron-back-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"close()\"> <ion-icon name=\"chevron-collapse-outline\"></ion-icon> </ion-button>\n </ion-buttons>\n </ion-toolbar>\n <div class=\"avatar\" [class]=\"animClass\">\n <div class=\"avatar-photo\">\n <fm-video #avatarVideo alt=\"\"></fm-video>\n <!-- \u97F3\u9891\u6CE2\u52A8 -->\n <div class=\"record-wave-avatar\">\n </div>\n </div>\n </div>\n</div>", styles: ["ion-toolbar{position:fixed;top:0;left:0;width:100vw;--background:transparent}.page{position:relative;width:100vw;height:100%;top:0;left:0;display:flex;justify-content:center;align-items:center;background-color:#000}.avatar{height:100%;width:100%;display:flex;justify-content:center;align-items:center}.avatar .avatar-photo{position:relative;display:flex;justify-content:center;width:80%;max-height:100%}.avatar .avatar-photo fm-video{border-radius:50%;max-height:100%;max-width:100%}.avatar .record-wave-avatar{height:50px;width:100%;position:absolute;float:left;left:0;bottom:0}.thinking,.listening,.waiting,.talking{animation-duration:2s;animation-play-state:running;animation-iteration-count:infinite;animation-timing-function:ease-in-out}@keyframes waitingAnimation{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(1)}}@keyframes thinkingAnimation{0%{transform:rotate(0)}30%{transform:rotate(10deg)}60%{transform:rotate(-10deg)}to{transform:rotate(0)}}\n"] }]
|
|
94
|
-
}], ctorParameters: () => [{ type: i1.NavController }], propDecorators: { avatarVideo: [{
|
|
95
|
-
type: ViewChild,
|
|
96
|
-
args: [FmVideoComponent]
|
|
97
|
-
}], fmodeChat: [{
|
|
98
|
-
type: Input
|
|
99
|
-
}], role: [{
|
|
100
|
-
type: Input
|
|
101
|
-
}], onClose: [{
|
|
102
|
-
type: Output
|
|
103
|
-
}] } });
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcC1hdmF0YXItcm9sZS12aWRlby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvYXZhdGFyL2NvbXAtYXZhdGFyLXJvbGUtdmlkZW8vY29tcC1hdmF0YXItcm9sZS12aWRlby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvYXZhdGFyL2NvbXAtYXZhdGFyLXJvbGUtdmlkZW8vY29tcC1hdmF0YXItcm9sZS12aWRlby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXdCLFNBQVMsRUFBYyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sUUFBUSxNQUFNLGVBQWUsQ0FBQTtBQUNwQyxPQUFPLHVDQUF1QyxDQUFBO0FBRTlDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7OztBQVd0RyxNQUFNLE9BQU8sNEJBQTRCO0lBVXZDLFlBQ1UsT0FBcUI7UUFBckIsWUFBTyxHQUFQLE9BQU8sQ0FBYztRQVQvQixjQUFTLEdBQVUsU0FBUyxDQUFBO1FBT2xCLFlBQU8sR0FBeUIsSUFBSSxZQUFxQixDQUFB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QUUsQ0FBQTtZQUVmLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRXRDLENBQUMsQ0FBQTtJQUNILENBQUM7SUFDRCxTQUFTLENBQUMsR0FBVTtRQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUzQixrREFBa0Q7UUFDbEQsOENBQThDO1FBQzlDLG1EQUFtRDtRQUNuRCw0Q0FBNEM7UUFDNUMseUNBQXlDO0lBQzNDLENBQUM7K0dBMUZVLDRCQUE0QjttR0FBNUIsNEJBQTRCLGdOQUM1QixnQkFBZ0IsZ0RDdkI3QixvdUJBbUJNLHlnQ0RKTSxZQUFZLDhCQUFDLFdBQVcsK0JBQUMsZ0JBQWdCLHFGQUNqRCxPQUFPLDJKQUNQLFVBQVUsbUZBQUMsVUFBVSw4RUFBQyxTQUFTOzs0RkFLdEIsNEJBQTRCO2tCQVZ4QyxTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUMsV0FBVyxFQUFDLGdCQUFnQjt3QkFDakQsT0FBTzt3QkFDUCxVQUFVLEVBQUMsVUFBVSxFQUFDLFNBQVM7cUJBQ2hDO2tGQUs0QixXQUFXO3NCQUF2QyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFHbEIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUksT0FBTztzQkFBaEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsT25Jbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBWaWV3Q2hpbGQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm1vZGVBdmF0YXJSb2xlQ29tcCB9IGZyb20gJy4uL2ludGVyZmFjZS1hdmF0YXItcm9sZSc7XG5cbmltcG9ydCBSZWNvcmRlciBmcm9tICdyZWNvcmRlci1jb3JlJ1xuaW1wb3J0ICdyZWNvcmRlci1jb3JlL3NyYy9leHRlbnNpb25zL3dhdmV2aWV3J1xuXG5pbXBvcnQgUGFyc2UgZnJvbSBcInBhcnNlXCI7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZtb2RlQ2hhdCB9IGZyb20gJy4uLy4uL3NlcnZpY2UtZm1haS9zZXJ2aWNlLWNoYXQvY2hhdC1jbGFzcyc7XG5pbXBvcnQgeyBGbVZpZGVvQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdmlkZW8nO1xuaW1wb3J0IHsgSW9uQnV0dG9uLCBJb25CdXR0b25zLCBJb25JY29uLCBJb25Ub29sYmFyLCBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmbS1hdmF0YXItcm9sZS12aWRlbycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsRm9ybXNNb2R1bGUsRm1WaWRlb0NvbXBvbmVudCxcbiAgICBJb25JY29uLFxuICAgIElvblRvb2xiYXIsSW9uQnV0dG9ucyxJb25CdXR0b24sXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9jb21wLWF2YXRhci1yb2xlLXZpZGVvLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29tcC1hdmF0YXItcm9sZS12aWRlby5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENvbXBBdmF0YXJSb2xlVmlkZW9Db21wb25lbnQgaW1wbGVtZW50cyBGbW9kZUF2YXRhclJvbGVDb21wLEFmdGVyVmlld0luaXQsT25Jbml0IHtcbiAgQFZpZXdDaGlsZChGbVZpZGVvQ29tcG9uZW50KSBhdmF0YXJWaWRlbzpGbVZpZGVvQ29tcG9uZW50XG4gIGFuaW1DbGFzczpzdHJpbmcgPSBcIndhaXRpbmdcIlxuXG4gIEBJbnB1dCgpIGZtb2RlQ2hhdDpGbW9kZUNoYXQ7XG4gIEBJbnB1dCgpIHJvbGU6UGFyc2UuT2JqZWN0O1xuICB3YXZlOmFueVxuICB3YXZlSW50ZXJ2YWw6YW55XG5cbiAgQE91dHB1dCgpIG9uQ2xvc2U6RXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPlxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5hdkN0cmw6TmF2Q29udHJvbGxlclxuICApe1xuXG4gIH1cbiAgY2xvc2UoKXtcbiAgICB0aGlzLm9uQ2xvc2UuZW1pdCh0cnVlKTtcbiAgICB0aGlzLmZtb2RlQ2hhdC5pc0F2YXRhclNob3cgPSBmYWxzZTtcbiAgfVxuICBnb0JhY2soKXtcbiAgICB0aGlzLm5hdkN0cmwuYmFjaygpO1xuICB9XG4gIHBsYXlXYXZlKCl7XG4gICAgaWYoIXRoaXMud2F2ZSYmUmVjb3JkZXIuV2F2ZVZpZXcpe1xuICAgICAgdGhpcy53YXZlPVJlY29yZGVyLldhdmVWaWV3KHtlbGVtOlwiLnJlY29yZC13YXZlLWF2YXRhclwiLGtlZXA6ZmFsc2V9KTtcbiAgICB9XG5cbiAgICAgICAgICAgIC8vIOeUn+aIkOmaj+acuueahHBjbURhdGFcbiAgICAgICAgZnVuY3Rpb24gZ2VuZXJhdGVQY21EYXRhKGxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHBjbURhdGEgPSBbXTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBwY21EYXRhLnB1c2goTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNjU1MzYpIC0gMzI3NjgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcGNtRGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOeUn+aIkOmaj+acuueahHBvd2VyTGV2ZWxcbiAgICAgICAgZnVuY3Rpb24gZ2VuZXJhdGVQb3dlckxldmVsKCkge1xuICAgICAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogMTAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g55Sf5oiQ6ZqP5py655qEc2FtcGxlUmF0ZVxuICAgICAgICBmdW5jdGlvbiBnZW5lcmF0ZVNhbXBsZVJhdGUoKSB7XG4gICAgICAgICAgY29uc3Qgc2FtcGxlUmF0ZXMgPSBbNDQxMDAsIDQ4MDAwLCA4ODIwMCwgOTYwMDBdO1xuICAgICAgICAgIHJldHVybiBzYW1wbGVSYXRlc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBzYW1wbGVSYXRlcy5sZW5ndGgpXTtcbiAgICAgICAgfVxuICAgICAgICAvLyDnlJ/miJDnpLrkvovmlbDmja5cbiAgICAgICAgXG4gICAgICAgIGxldCBwb3dlckxldmVsID0gZ2VuZXJhdGVQb3dlckxldmVsKCk7IC8vIOeUn+aIkOmaj+acuueahHBvd2VyTGV2ZWxcbiAgICAgICAgLy8g5L2/55So55Sf5oiQ55qE5pWw5o2u6LCD55Sod2F2ZS5pbnB1dOWHveaVsFxuICAgICAgICB0aGlzLndhdmVJbnRlcnZhbCA9IHNldEludGVydmFsKCgpPT57XG4gICAgICAgICAgbGV0IHNhbXBsZVJhdGUgPSBnZW5lcmF0ZVNhbXBsZVJhdGUoKTsgLy8g55Sf5oiQ6ZqP5py655qEc2FtcGxlUmF0ZVxuICAgICAgICAgIGxldCBwY21EYXRhID0gZ2VuZXJhdGVQY21EYXRhKDEwMDApOyAvLyDnlJ/miJDplb/luqbkuLoxMDAw55qEcGNtRGF0YeaVsOe7hFxuICAgICAgICAgIHRoaXMud2F2ZS5pbnB1dChwY21EYXRhLCBwb3dlckxldmVsLCBzYW1wbGVSYXRlKTtcbiAgICAgICAgfSw0MClcbiAgfVxuICBzdG9wV2F2ZSgpe1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy53YXZlSW50ZXJ2YWwpXG4gIH1cbiAgbmdBZnRlclZpZXdJbml0KCl7XG5cbiAgfVxuXG4gIHZpZGVvTWFwOmFueSA9IHt9XG4gIG5nT25Jbml0KCl7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnZpZGVvTWFwID0gdGhpcy5mbW9kZUNoYXQuYXZhdGFyQ29uZmlnPy52aWRlbztcbiAgICAgIHRoaXMucGxheVZpZGVvKHRoaXMudmlkZW9NYXA/LndhaXRpbmcpXG4gICAgICAvLyDnu5HlrprlvZPliY3lvaLosaHmj5Lku7bliqjkvZzlh73mlbBcbiAgICAgIHRoaXMuZm1vZGVDaGF0LnBsYXlBbmltYXRpb24gPSB0aGlzLnBsYXlBbmltYXRpb24gXG4gICAgfSwgMTUwMCk7XG4gIH1cbiAgcGxheUFuaW1hdGlvbigpe1xuICAgIGxldCB0aGF0ID0gdGhpc1xuICAgIHJldHVybiAobmFtZTpzdHJpbmcpPT57XG4gICAgICB0aGF0LmFuaW1DbGFzcyA9IG5hbWVcbiAgICAgIHRoYXQuc3RvcFdhdmUoKVxuXG4gICAgICB0aGF0LnBsYXlWaWRlbyh0aGF0LnZpZGVvTWFwW25hbWVdKTtcblxuICAgIH1cbiAgfVxuICBwbGF5VmlkZW8oc3JjOnN0cmluZyl7XG4gICAgdGhpcy5hdmF0YXJWaWRlby5wbGF5KHNyYyk7XG5cbiAgICAvLyB0aGlzLmF2YXRhclZpZGVvLm5hdGl2ZUVsZW1lbnQuYXV0b3BsYXkgPSB0cnVlO1xuICAgIC8vIHRoaXMuYXZhdGFyVmlkZW8ubmF0aXZlRWxlbWVudC5sb29wID0gdHJ1ZTtcbiAgICAvLyB0aGlzLmF2YXRhclZpZGVvLm5hdGl2ZUVsZW1lbnQuY29udHJvbHMgPSBmYWxzZTtcbiAgICAvLyB0aGlzLmF2YXRhclZpZGVvLm5hdGl2ZUVsZW1lbnQuc3JjID0gc3JjO1xuICAgIC8vIHRoaXMuYXZhdGFyVmlkZW8ubmF0aXZlRWxlbWVudC5wbGF5KCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwYWdlXCI+XG4gICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCI+XG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiZ29CYWNrKClcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNoZXZyb24tYmFjay1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cImNsb3NlKClcIj4gPGlvbi1pY29uIG5hbWU9XCJjaGV2cm9uLWNvbGxhcHNlLW91dGxpbmVcIj48L2lvbi1pY29uPiA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgPC9pb24tdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyXCIgW2NsYXNzXT1cImFuaW1DbGFzc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLXBob3RvXCI+XG4gICAgICAgICAgICA8Zm0tdmlkZW8gI2F2YXRhclZpZGVvIGFsdD1cIlwiPjwvZm0tdmlkZW8+XG4gICAgICAgICAgICA8IS0tIOmfs+mikeazouWKqCAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtd2F2ZS1hdmF0YXJcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|
|
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/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Component,Input,ViewChild,Output,EventEmitter}from"@angular/core";import{CommonModule}from"@angular/common";import Recorder from"recorder-core";import"recorder-core/src/extensions/waveview";import Parse from"parse";import{FormsModule}from"@angular/forms";import{FmodeChat}from"../../service-fmai/service-chat/chat-class";import{FmVideoComponent}from"../../../video";import{IonButton,IonButtons,IonIcon,IonToolbar,NavController}from"@ionic/angular/standalone";import*as i0 from"@angular/core";import*as i1 from"@ionic/angular/standalone";export class CompAvatarRoleVideoComponent{constructor(t){this.navCtrl=t,this.animClass="waiting",this.onClose=new EventEmitter,this.videoMap={}}close(){this.onClose.emit(!0),this.fmodeChat.isAvatarShow=!1}goBack(){this.navCtrl.back()}playWave(){!this.wave&&Recorder.WaveView&&(this.wave=Recorder.WaveView({elem:".record-wave-avatar",keep:!1}));let t=function generatePowerLevel(){return 100*Math.random()}();this.waveInterval=setInterval((()=>{let o=function generateSampleRate(){const t=[44100,48e3,88200,96e3];return t[Math.floor(Math.random()*t.length)]}(),n=function generatePcmData(t){const o=[];for(let n=0;n<t;n++)o.push(Math.floor(65536*Math.random())-32768);return o}(1e3);this.wave.input(n,t,o)}),40)}stopWave(){clearInterval(this.waveInterval)}ngAfterViewInit(){}ngOnInit(){setTimeout((()=>{this.videoMap=this.fmodeChat.avatarConfig?.video,this.playVideo(this.videoMap?.waiting),this.fmodeChat.playAnimation=this.playAnimation}),1500)}playAnimation(){let t=this;return o=>{t.animClass=o,t.stopWave(),t.playVideo(t.videoMap[o])}}playVideo(t){this.avatarVideo.play(t)}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CompAvatarRoleVideoComponent,deps:[{token:i1.NavController}],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:CompAvatarRoleVideoComponent,isStandalone:!0,selector:"fm-avatar-role-video",inputs:{fmodeChat:"fmodeChat",role:"role"},outputs:{onClose:"onClose"},viewQueries:[{propertyName:"avatarVideo",first:!0,predicate:FmVideoComponent,descendants:!0}],ngImport:i0,template:'<div class="page">\n <ion-toolbar>\n <ion-buttons slot="start">\n <ion-button (click)="goBack()">\n <ion-icon name="chevron-back-outline"></ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-buttons slot="end">\n <ion-button (click)="close()"> <ion-icon name="chevron-collapse-outline"></ion-icon> </ion-button>\n </ion-buttons>\n </ion-toolbar>\n <div class="avatar" [class]="animClass">\n <div class="avatar-photo">\n <fm-video #avatarVideo alt=""></fm-video>\n \x3c!-- 音频波动 --\x3e\n <div class="record-wave-avatar">\n </div>\n </div>\n </div>\n</div>',styles:["ion-toolbar{position:fixed;top:0;left:0;width:100vw;--background:transparent}.page{position:relative;width:100vw;height:100%;top:0;left:0;display:flex;justify-content:center;align-items:center;background-color:#000}.avatar{height:100%;width:100%;display:flex;justify-content:center;align-items:center}.avatar .avatar-photo{position:relative;display:flex;justify-content:center;width:80%;max-height:100%}.avatar .avatar-photo fm-video{border-radius:50%;max-height:100%;max-width:100%}.avatar .record-wave-avatar{height:50px;width:100%;position:absolute;float:left;left:0;bottom:0}.thinking,.listening,.waiting,.talking{animation-duration:2s;animation-play-state:running;animation-iteration-count:infinite;animation-timing-function:ease-in-out}@keyframes waitingAnimation{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(1)}}@keyframes thinkingAnimation{0%{transform:rotate(0)}30%{transform:rotate(10deg)}60%{transform:rotate(-10deg)}to{transform:rotate(0)}}\n"],dependencies:[{kind:"ngmodule",type:CommonModule},{kind:"ngmodule",type:FormsModule},{kind:"component",type:FmVideoComponent,selector:"fm-video",inputs:["url","canvasStyle"]},{kind:"component",type:IonIcon,selector:"ion-icon",inputs:["color","flipRtl","icon","ios","lazy","md","mode","name","sanitize","size","src"]},{kind:"component",type:IonToolbar,selector:"ion-toolbar",inputs:["color","mode"]},{kind:"component",type:IonButtons,selector:"ion-buttons",inputs:["collapse"]},{kind:"component",type:IonButton,selector:"ion-button",inputs:["buttonType","color","disabled","download","expand","fill","form","href","mode","rel","routerAnimation","routerDirection","shape","size","strong","target","type"]}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CompAvatarRoleVideoComponent,decorators:[{type:Component,args:[{selector:"fm-avatar-role-video",standalone:!0,imports:[CommonModule,FormsModule,FmVideoComponent,IonIcon,IonToolbar,IonButtons,IonButton],template:'<div class="page">\n <ion-toolbar>\n <ion-buttons slot="start">\n <ion-button (click)="goBack()">\n <ion-icon name="chevron-back-outline"></ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-buttons slot="end">\n <ion-button (click)="close()"> <ion-icon name="chevron-collapse-outline"></ion-icon> </ion-button>\n </ion-buttons>\n </ion-toolbar>\n <div class="avatar" [class]="animClass">\n <div class="avatar-photo">\n <fm-video #avatarVideo alt=""></fm-video>\n \x3c!-- 音频波动 --\x3e\n <div class="record-wave-avatar">\n </div>\n </div>\n </div>\n</div>',styles:["ion-toolbar{position:fixed;top:0;left:0;width:100vw;--background:transparent}.page{position:relative;width:100vw;height:100%;top:0;left:0;display:flex;justify-content:center;align-items:center;background-color:#000}.avatar{height:100%;width:100%;display:flex;justify-content:center;align-items:center}.avatar .avatar-photo{position:relative;display:flex;justify-content:center;width:80%;max-height:100%}.avatar .avatar-photo fm-video{border-radius:50%;max-height:100%;max-width:100%}.avatar .record-wave-avatar{height:50px;width:100%;position:absolute;float:left;left:0;bottom:0}.thinking,.listening,.waiting,.talking{animation-duration:2s;animation-play-state:running;animation-iteration-count:infinite;animation-timing-function:ease-in-out}@keyframes waitingAnimation{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(1)}}@keyframes thinkingAnimation{0%{transform:rotate(0)}30%{transform:rotate(10deg)}60%{transform:rotate(-10deg)}to{transform:rotate(0)}}\n"]}]}],ctorParameters:()=>[{type:i1.NavController}],propDecorators:{avatarVideo:[{type:ViewChild,args:[FmVideoComponent]}],fmodeChat:[{type:Input}],role:[{type:Input}],onClose:[{type:Output}]}});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2F2YXRhci9jb21wLWF2YXRhci1yb2xlLXZpZGVvL2NvbXAtYXZhdGFyLXJvbGUtdmlkZW8uY29tcG9uZW50Lm1qcw==`
|
|
10
|
+
|
|
@@ -1,111 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import { FormsModule } from '@angular/forms';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
import { NovaCloudService } from '../../../nova-cloud/nova-cloud.service';
|
|
12
|
-
import { HidexmlPipe } from '../../service-fmai/service-chat';
|
|
13
|
-
import { ModalChatVoiceInputComponent } from '../modal-chat-voice-input/modal-chat-voice-input.component';
|
|
14
|
-
import { Diagnostic } from '@awesome-cordova-plugins/diagnostic/ngx';
|
|
15
|
-
import * as i0 from "@angular/core";
|
|
16
|
-
import * as i1 from "../../voice";
|
|
17
|
-
import * as i2 from "@ionic/angular";
|
|
18
|
-
import * as i3 from "@angular/router";
|
|
19
|
-
import * as i4 from "../../service-fmai/service-chat";
|
|
20
|
-
import * as i5 from "../../../nova-cloud/nova-cloud.service";
|
|
21
|
-
import * as i6 from "@angular/common";
|
|
22
|
-
export class CompAvatarTalkComponent {
|
|
23
|
-
constructor(voiceServ, platform, router, navCtrl, route, chatServ, ncloud) {
|
|
24
|
-
this.voiceServ = voiceServ;
|
|
25
|
-
this.platform = platform;
|
|
26
|
-
this.router = router;
|
|
27
|
-
this.navCtrl = navCtrl;
|
|
28
|
-
this.route = route;
|
|
29
|
-
this.chatServ = chatServ;
|
|
30
|
-
this.ncloud = ncloud;
|
|
31
|
-
this.route.paramMap.subscribe(params => {
|
|
32
|
-
this.roleId = params.get("roleId");
|
|
33
|
-
this.loadAvatarRole(this.roleId);
|
|
34
|
-
});
|
|
35
|
-
// 切换黑暗模式
|
|
36
|
-
document.body.classList.add('dark');
|
|
37
|
-
}
|
|
38
|
-
ngOnInit() {
|
|
39
|
-
}
|
|
40
|
-
ngOnDestroy() {
|
|
41
|
-
document.body.classList.remove('dark');
|
|
42
|
-
this.voiceServ.resultText = null;
|
|
43
|
-
if (this.fmodeChat) {
|
|
44
|
-
this.fmodeChat.latestAIResponse = null;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
goBack() {
|
|
48
|
-
document.body.classList.remove('dark');
|
|
49
|
-
let backUrl = this.avatarRole?.get("backUrl");
|
|
50
|
-
try {
|
|
51
|
-
if (backUrl) {
|
|
52
|
-
this.navCtrl.navigateRoot(backUrl);
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
this.navCtrl.navigateRoot('/chat/pro/role/' + this.roleId);
|
|
56
|
-
}
|
|
57
|
-
catch (err) {
|
|
58
|
-
this.navCtrl.navigateRoot('/chat/pro/role/' + this.roleId);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
// 根据ID加载数字角色
|
|
62
|
-
async loadAvatarRole(roleId) {
|
|
63
|
-
let query = new Parse.Query("AvatarRole");
|
|
64
|
-
this.avatarRole = await query.get(roleId);
|
|
65
|
-
let chat = await this.chatServ.createNewRoleChat(this.roleId);
|
|
66
|
-
chat.isTalkMode = true;
|
|
67
|
-
this.fmodeChat = chat;
|
|
68
|
-
this.fmodeChat.showAvatar();
|
|
69
|
-
}
|
|
70
|
-
ngAfterViewInit() {
|
|
71
|
-
this.listenDivChange();
|
|
72
|
-
}
|
|
73
|
-
listenDivChange() {
|
|
74
|
-
// 创建 MutationObserver 实例
|
|
75
|
-
let observer = new MutationObserver(() => {
|
|
76
|
-
this.scrollToBottom(this.aiRespComp);
|
|
77
|
-
});
|
|
78
|
-
// 配置观察选项
|
|
79
|
-
let config = { childList: true, subtree: true, attributes: true };
|
|
80
|
-
// 开始观察
|
|
81
|
-
observer.observe(this.aiRespComp.nativeElement, config);
|
|
82
|
-
}
|
|
83
|
-
scrollToBottom(comp) {
|
|
84
|
-
if (comp?.nativeElement?.scrollHeight) {
|
|
85
|
-
comp.nativeElement.scrollTop = comp.nativeElement.scrollHeight;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CompAvatarTalkComponent, deps: [{ token: i1.FmodeVoiceService }, { token: i2.Platform }, { token: i3.Router }, { token: i2.NavController }, { token: i3.ActivatedRoute }, { token: i4.ChatService }, { token: i5.NovaCloudService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
89
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CompAvatarTalkComponent, isStandalone: true, selector: "app-comp-avatar-talk", providers: [
|
|
90
|
-
FmodeVoiceService, NovaCloudService, ChatService, Diagnostic,
|
|
91
|
-
ModalController,
|
|
92
|
-
], viewQueries: [{ propertyName: "avatarComp", first: true, predicate: ["avatar"], descendants: true }, { propertyName: "aiRespComp", first: true, predicate: ["aiRespComp"], descendants: true }], ngImport: i0, template: "<ion-menu #menu contentId=\"main-content\" side=\"end\">\n <ion-header>\n <ion-toolbar>\n <ion-title>\u8D44\u6599</ion-title>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n\n <ion-card style=\"margin: 0px;\">\n <img [src]=\"avatarRole?.get('thumb')\" alt=\"\">\n <ion-card-header>\n <ion-card-subtitle>{{avatarRole?.get('tags')}}</ion-card-subtitle>\n <ion-card-title>{{avatarRole?.get(\"name\")}}</ion-card-title>\n </ion-card-header>\n \n <ion-card-content>\n {{avatarRole?.get(\"desc\")}}\n\n <ion-list [inset]=\"true\" style=\"margin:0px;\">\n <!-- <ion-item>\n <ion-avatar *ngIf=\"avatarRole?.get('thumb')\" aria-hidden=\"true\" slot=\"start\">\n <img [src]=\"avatarRole?.get('thumb')\" />\n </ion-avatar>\n <ion-label>{{avatarRole?.get(\"name\")}}</ion-label>\n </ion-item> -->\n <ion-item lines=\"none\" *ngIf=\"avatarRole?.get('age')\">\n <ion-note slot=\"start\">\u5E74\u9F84</ion-note>\n <ion-label>{{avatarRole?.get(\"age\")}}</ion-label>\n </ion-item>\n <ion-item lines=\"none\" *ngIf=\"avatarRole?.get('gender')\">\n <ion-note slot=\"start\">\u6027\u522B</ion-note>\n <ion-label>{{avatarRole?.get(\"gender\")}}</ion-label>\n </ion-item>\n <ion-item lines=\"none\">\n <ion-note slot=\"start\">\u79F0\u53F7</ion-note>\n <ion-label>{{avatarRole?.get(\"title\")}}</ion-label>\n </ion-item>\n \n <ion-item lines=\"none\">\n <ion-note slot=\"start\">\u64C5\u957F</ion-note>\n <ion-label>{{avatarRole?.get(\"tags\")?.join(',')}}</ion-label>\n </ion-item>\n\n </ion-list>\n </ion-card-content>\n </ion-card>\n \n \n \n </ion-content>\n</ion-menu>\n\n<div class=\"ion-page\" id=\"main-content\">\n <ion-header class=\"ion-no-border\">\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"goBack()\"> <ion-icon name=\"chevron-back-outline\"></ion-icon> </ion-button>\n </ion-buttons>\n <ion-title>\n <ion-chip *ngIf=\"avatarRole?.get('title')\">{{avatarRole?.get(\"title\")}}</ion-chip>\n </ion-title>\n <ion-buttons slot=\"end\">\n <!-- <ion-button (click)=\"playTTSTeting()\">TTS\u6D4B\u8BD5</ion-button> -->\n {{avatarRole?.get(\"name\")}}\n <ion-button (click)=\"menu.toggle()\"> <ion-icon name=\"ellipsis-horizontal-outline\"></ion-icon> </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n\n <!-- <ion-segment value=\"voice\">\n <ion-segment-button (click)=\"chatServ.createChatPanel(avatarRole)\" value=\"chat\">\n <ion-label>\u804A\u5929</ion-label>\n </ion-segment-button>\n <ion-segment-button routerLink=\"{{'/avatar/role/'+avatarRole?.id}}\" value=\"voice\">\n <ion-label>\u8BED\u97F3</ion-label>\n </ion-segment-button>\n </ion-segment> -->\n\n <!-- \u6570\u5B57\u5F62\u8C61\uFF1A\u52A8\u753B\u6548\u679C -->\n <fm-avatar-role-image *ngIf=\"avatarRole&&fmodeChat\" [fmodeChat]=\"fmodeChat\" [role]=\"avatarRole\" #avatar class=\"avatar\"></fm-avatar-role-image>\n <!-- <fm-avatar-role-particle #avatar class=\"avatar\"></fm-avatar-role-particle> -->\n\n <!-- AI\u56DE\u590D\u7684\u6700\u65B0\u6D88\u606F -->\n <div class=\"ai-resp-input\" #aiRespComp>{{fmodeChat?.latestAIResponse | hidexml}}</div>\n\n <fm-modal-chat-voice-input *ngIf=\"fmodeChat\" [fmodeChat]=\"fmodeChat\"></fm-modal-chat-voice-input>\n\n</div>\n\n", styles: ["ion-menu ion-note{color:#ccc;font-weight:700}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.avatar{display:block;width:100%;height:100%}.ai-resp-input{font-size:1rem;color:#fff;position:fixed;top:60px;max-height:15vh;overflow-y:scroll;padding:0 10px}.user-asr-input{font-size:1rem;color:#fff;position:fixed;bottom:6vh;padding:0 10px}.test-button-group{color:#00f;position:fixed;bottom:20vh}.test-button-group button{padding:10px;margin:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: IonicModule }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i2.IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonChip, selector: "ion-chip", inputs: ["color", "disabled", "mode", "outline"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2.IonMenu, selector: "ion-menu", inputs: ["contentId", "disabled", "maxEdgeStart", "menuId", "side", "swipeGesture", "type"] }, { kind: "component", type: i2.IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: CompAvatarRoleImageComponent, selector: "fm-avatar-role-image", inputs: ["fmodeChat", "role"] }, { kind: "component", type: ModalChatVoiceInputComponent, selector: "fm-modal-chat-voice-input", inputs: ["fmodeChat", "talkMode"] }, { kind: "pipe", type: HidexmlPipe, name: "hidexml" }] }); }
|
|
93
|
-
}
|
|
94
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CompAvatarTalkComponent, decorators: [{
|
|
95
|
-
type: Component,
|
|
96
|
-
args: [{ selector: 'app-comp-avatar-talk', standalone: true, imports: [
|
|
97
|
-
CommonModule, RouterModule, FormsModule, IonicModule, CompAvatarParticleComponent, CompAvatarRoleImageComponent,
|
|
98
|
-
ModalChatVoiceInputComponent,
|
|
99
|
-
HidexmlPipe
|
|
100
|
-
], providers: [
|
|
101
|
-
FmodeVoiceService, NovaCloudService, ChatService, Diagnostic,
|
|
102
|
-
ModalController,
|
|
103
|
-
], template: "<ion-menu #menu contentId=\"main-content\" side=\"end\">\n <ion-header>\n <ion-toolbar>\n <ion-title>\u8D44\u6599</ion-title>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n\n <ion-card style=\"margin: 0px;\">\n <img [src]=\"avatarRole?.get('thumb')\" alt=\"\">\n <ion-card-header>\n <ion-card-subtitle>{{avatarRole?.get('tags')}}</ion-card-subtitle>\n <ion-card-title>{{avatarRole?.get(\"name\")}}</ion-card-title>\n </ion-card-header>\n \n <ion-card-content>\n {{avatarRole?.get(\"desc\")}}\n\n <ion-list [inset]=\"true\" style=\"margin:0px;\">\n <!-- <ion-item>\n <ion-avatar *ngIf=\"avatarRole?.get('thumb')\" aria-hidden=\"true\" slot=\"start\">\n <img [src]=\"avatarRole?.get('thumb')\" />\n </ion-avatar>\n <ion-label>{{avatarRole?.get(\"name\")}}</ion-label>\n </ion-item> -->\n <ion-item lines=\"none\" *ngIf=\"avatarRole?.get('age')\">\n <ion-note slot=\"start\">\u5E74\u9F84</ion-note>\n <ion-label>{{avatarRole?.get(\"age\")}}</ion-label>\n </ion-item>\n <ion-item lines=\"none\" *ngIf=\"avatarRole?.get('gender')\">\n <ion-note slot=\"start\">\u6027\u522B</ion-note>\n <ion-label>{{avatarRole?.get(\"gender\")}}</ion-label>\n </ion-item>\n <ion-item lines=\"none\">\n <ion-note slot=\"start\">\u79F0\u53F7</ion-note>\n <ion-label>{{avatarRole?.get(\"title\")}}</ion-label>\n </ion-item>\n \n <ion-item lines=\"none\">\n <ion-note slot=\"start\">\u64C5\u957F</ion-note>\n <ion-label>{{avatarRole?.get(\"tags\")?.join(',')}}</ion-label>\n </ion-item>\n\n </ion-list>\n </ion-card-content>\n </ion-card>\n \n \n \n </ion-content>\n</ion-menu>\n\n<div class=\"ion-page\" id=\"main-content\">\n <ion-header class=\"ion-no-border\">\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"goBack()\"> <ion-icon name=\"chevron-back-outline\"></ion-icon> </ion-button>\n </ion-buttons>\n <ion-title>\n <ion-chip *ngIf=\"avatarRole?.get('title')\">{{avatarRole?.get(\"title\")}}</ion-chip>\n </ion-title>\n <ion-buttons slot=\"end\">\n <!-- <ion-button (click)=\"playTTSTeting()\">TTS\u6D4B\u8BD5</ion-button> -->\n {{avatarRole?.get(\"name\")}}\n <ion-button (click)=\"menu.toggle()\"> <ion-icon name=\"ellipsis-horizontal-outline\"></ion-icon> </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n\n <!-- <ion-segment value=\"voice\">\n <ion-segment-button (click)=\"chatServ.createChatPanel(avatarRole)\" value=\"chat\">\n <ion-label>\u804A\u5929</ion-label>\n </ion-segment-button>\n <ion-segment-button routerLink=\"{{'/avatar/role/'+avatarRole?.id}}\" value=\"voice\">\n <ion-label>\u8BED\u97F3</ion-label>\n </ion-segment-button>\n </ion-segment> -->\n\n <!-- \u6570\u5B57\u5F62\u8C61\uFF1A\u52A8\u753B\u6548\u679C -->\n <fm-avatar-role-image *ngIf=\"avatarRole&&fmodeChat\" [fmodeChat]=\"fmodeChat\" [role]=\"avatarRole\" #avatar class=\"avatar\"></fm-avatar-role-image>\n <!-- <fm-avatar-role-particle #avatar class=\"avatar\"></fm-avatar-role-particle> -->\n\n <!-- AI\u56DE\u590D\u7684\u6700\u65B0\u6D88\u606F -->\n <div class=\"ai-resp-input\" #aiRespComp>{{fmodeChat?.latestAIResponse | hidexml}}</div>\n\n <fm-modal-chat-voice-input *ngIf=\"fmodeChat\" [fmodeChat]=\"fmodeChat\"></fm-modal-chat-voice-input>\n\n</div>\n\n", styles: ["ion-menu ion-note{color:#ccc;font-weight:700}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.avatar{display:block;width:100%;height:100%}.ai-resp-input{font-size:1rem;color:#fff;position:fixed;top:60px;max-height:15vh;overflow-y:scroll;padding:0 10px}.user-asr-input{font-size:1rem;color:#fff;position:fixed;bottom:6vh;padding:0 10px}.test-button-group{color:#00f;position:fixed;bottom:20vh}.test-button-group button{padding:10px;margin:10px}\n"] }]
|
|
104
|
-
}], ctorParameters: () => [{ type: i1.FmodeVoiceService }, { type: i2.Platform }, { type: i3.Router }, { type: i2.NavController }, { type: i3.ActivatedRoute }, { type: i4.ChatService }, { type: i5.NovaCloudService }], propDecorators: { avatarComp: [{
|
|
105
|
-
type: ViewChild,
|
|
106
|
-
args: ["avatar"]
|
|
107
|
-
}], aiRespComp: [{
|
|
108
|
-
type: ViewChild,
|
|
109
|
-
args: ["aiRespComp"]
|
|
110
|
-
}] } });
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcC1hdmF0YXItdGFsay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvYXZhdGFyL2NvbXAtYXZhdGFyLXRhbGsvY29tcC1hdmF0YXItdGFsay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvYXZhdGFyL2NvbXAtYXZhdGFyLXRhbGsvY29tcC1hdmF0YXItdGFsay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxVQUFVLEVBQW9CLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBdUIsTUFBTSxpQ0FBaUMsQ0FBQztBQUVuRixPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUMsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDckYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLHdEQUF3RCxDQUFBO0FBQ2xHLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLDREQUE0RCxDQUFBO0FBQ3ZHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQTtBQUM5QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMxRSxPQUFPLEVBQVksV0FBVyxFQUFFLE1BQU0saUNBQWlD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VUFBVTtzQkFBOUIsU0FBUzt1QkFBQyxRQUFRO2dCQTZETSxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm1vZGVWb2ljZVNlcnZpY2UgfSBmcm9tICcuLi8uLi92b2ljZSc7XG5pbXBvcnQgeyBDaGF0U2VydmljZSwgRm1vZGVDaGF0Q29tcGxldGlvbiB9IGZyb20gJy4uLy4uL3NlcnZpY2UtZm1haS9zZXJ2aWNlLWNoYXQnO1xuaW1wb3J0IHsgRm1vZGVBdmF0YXJSb2xlQ29tcCB9IGZyb20gJy4uL2ludGVyZmFjZS1hdmF0YXItcm9sZSc7XG5pbXBvcnQgeyBJb25pY01vZHVsZSwgTmF2Q29udHJvbGxlciwgUGxhdGZvcm0sTW9kYWxDb250cm9sbGVyIH0gZnJvbSBcIkBpb25pYy9hbmd1bGFyXCJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0NvbXBBdmF0YXJQYXJ0aWNsZUNvbXBvbmVudH0gZnJvbSBcIi4uL2NvbXAtYXZhdGFyLXBhcnRpY2xlL2NvbXAtYXZhdGFyLXBhcnRpY2xlLmNvbXBvbmVudFwiXG5pbXBvcnQge0NvbXBBdmF0YXJSb2xlSW1hZ2VDb21wb25lbnR9IGZyb20gXCIuLi9jb21wLWF2YXRhci1yb2xlLWltYWdlL2NvbXAtYXZhdGFyLXJvbGUtaW1hZ2UuY29tcG9uZW50XCJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciwgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCAqIGFzIFBhcnNlIGZyb20gXCJwYXJzZVwiXG5pbXBvcnQgeyBOb3ZhQ2xvdWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vbm92YS1jbG91ZC9ub3ZhLWNsb3VkLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm1vZGVDaGF0LEhpZGV4bWxQaXBlIH0gZnJvbSAnLi4vLi4vc2VydmljZS1mbWFpL3NlcnZpY2UtY2hhdCc7XG5pbXBvcnQgeyBNb2RhbENoYXRWb2ljZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vbW9kYWwtY2hhdC12b2ljZS1pbnB1dC9tb2RhbC1jaGF0LXZvaWNlLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaWFnbm9zdGljIH0gZnJvbSAnQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL2RpYWdub3N0aWMvbmd4JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNvbXAtYXZhdGFyLXRhbGsnLFxuICBzdGFuZGFsb25lOnRydWUsXG4gIGltcG9ydHM6W1xuICAgIENvbW1vbk1vZHVsZSxSb3V0ZXJNb2R1bGUsRm9ybXNNb2R1bGUsSW9uaWNNb2R1bGUsQ29tcEF2YXRhclBhcnRpY2xlQ29tcG9uZW50LENvbXBBdmF0YXJSb2xlSW1hZ2VDb21wb25lbnQsXG4gICAgTW9kYWxDaGF0Vm9pY2VJbnB1dENvbXBvbmVudCxcbiAgICBIaWRleG1sUGlwZVxuICBdLFxuICBwcm92aWRlcnM6W1xuICAgIEZtb2RlVm9pY2VTZXJ2aWNlLE5vdmFDbG91ZFNlcnZpY2UsQ2hhdFNlcnZpY2UsRGlhZ25vc3RpYyxcbiAgICBNb2RhbENvbnRyb2xsZXIsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9jb21wLWF2YXRhci10YWxrLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29tcC1hdmF0YXItdGFsay5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENvbXBBdmF0YXJUYWxrQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCxPbkRlc3Ryb3l7XG4gICAgQFZpZXdDaGlsZChcImF2YXRhclwiKSBhdmF0YXJDb21wOkZtb2RlQXZhdGFyUm9sZUNvbXBcbiAgICByb2xlSWQ6c3RyaW5nXG4gICAgYXZhdGFyUm9sZTpQYXJzZS5PYmplY3Q7XG4gICAgZm1vZGVDaGF0OkZtb2RlQ2hhdDtcbiAgIFxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgcHVibGljIHZvaWNlU2VydjpGbW9kZVZvaWNlU2VydmljZSxcbiAgICAgIHByaXZhdGUgcGxhdGZvcm06UGxhdGZvcm0sXG4gICAgICBwcml2YXRlIHJvdXRlcjpSb3V0ZXIsXG4gICAgICBwcml2YXRlIG5hdkN0cmw6TmF2Q29udHJvbGxlcixcbiAgICAgIHByaXZhdGUgcm91dGU6QWN0aXZhdGVkUm91dGUsXG4gICAgICBwdWJsaWMgY2hhdFNlcnY6Q2hhdFNlcnZpY2UsXG4gICAgICBwcml2YXRlIG5jbG91ZDpOb3ZhQ2xvdWRTZXJ2aWNlLFxuICAgICl7XG5cbiAgICAgIHRoaXMucm91dGUucGFyYW1NYXAuc3Vic2NyaWJlKHBhcmFtcz0+e1xuICAgICAgICB0aGlzLnJvbGVJZCA9IHBhcmFtcy5nZXQoXCJyb2xlSWRcIik7XG4gICAgICAgIHRoaXMubG9hZEF2YXRhclJvbGUodGhpcy5yb2xlSWQpXG4gICAgICB9KVxuICAgICAgLy8g5YiH5o2i6buR5pqX5qih5byPXG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2RhcmsnKTtcbiAgICB9XG4gICBcbiAgICBuZ09uSW5pdCgpe1xuXG4gICAgfVxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdkYXJrJyk7XG4gICAgICB0aGlzLnZvaWNlU2Vydi5yZXN1bHRUZXh0ID0gbnVsbDtcbiAgICAgIGlmKHRoaXMuZm1vZGVDaGF0KXtcbiAgICAgICAgdGhpcy5mbW9kZUNoYXQubGF0ZXN0QUlSZXNwb25zZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGdvQmFjaygpe1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdkYXJrJyk7XG4gICAgICBsZXQgYmFja1VybCA9IHRoaXMuYXZhdGFyUm9sZT8uZ2V0KFwiYmFja1VybFwiKVxuICAgICAgdHJ5e1xuICAgICAgICBpZihiYWNrVXJsKXtcbiAgICAgICAgICB0aGlzLm5hdkN0cmwubmF2aWdhdGVSb290KGJhY2tVcmwpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uYXZDdHJsLm5hdmlnYXRlUm9vdCgnL2NoYXQvcHJvL3JvbGUvJyt0aGlzLnJvbGVJZClcbiAgICAgIH1jYXRjaChlcnIpe1xuICAgICAgICB0aGlzLm5hdkN0cmwubmF2aWdhdGVSb290KCcvY2hhdC9wcm8vcm9sZS8nK3RoaXMucm9sZUlkKVxuICAgICAgfVxuICAgIH1cbiAgICAvLyDmoLnmja5JROWKoOi9veaVsOWtl+inkuiJslxuICAgIGFzeW5jIGxvYWRBdmF0YXJSb2xlKHJvbGVJZCl7XG4gICAgICBsZXQgcXVlcnkgPSBuZXcgUGFyc2UuUXVlcnkoXCJBdmF0YXJSb2xlXCIpXG4gICAgICB0aGlzLmF2YXRhclJvbGUgPSBhd2FpdCBxdWVyeS5nZXQocm9sZUlkKTtcbiAgICAgIGxldCBjaGF0ID0gYXdhaXQgdGhpcy5jaGF0U2Vydi5jcmVhdGVOZXdSb2xlQ2hhdCh0aGlzLnJvbGVJZClcbiAgICAgIGNoYXQuaXNUYWxrTW9kZSA9IHRydWU7XG4gICAgICB0aGlzLmZtb2RlQ2hhdCA9IGNoYXQ7XG4gICAgICB0aGlzLmZtb2RlQ2hhdC5zaG93QXZhdGFyKCk7XG4gICAgfVxuXG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKXtcbiAgXG4gICAgICB0aGlzLmxpc3RlbkRpdkNoYW5nZSgpXG4gICAgfVxuICAgIEBWaWV3Q2hpbGQoXCJhaVJlc3BDb21wXCIpIGFpUmVzcENvbXA6RWxlbWVudFJlZlxuICAgIGxpc3RlbkRpdkNoYW5nZSgpe1xuICAgICAgLy8g5Yib5bu6IE11dGF0aW9uT2JzZXJ2ZXIg5a6e5L6LXG4gICAgICBsZXQgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20odGhpcy5haVJlc3BDb21wKTtcbiAgICAgIH0pO1xuICAgICAgLy8g6YWN572u6KeC5a+f6YCJ6aG5XG4gICAgICBsZXQgY29uZmlnID0geyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUsIGF0dHJpYnV0ZXM6dHJ1ZSB9O1xuICAgICAgLy8g5byA5aeL6KeC5a+fXG4gICAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMuYWlSZXNwQ29tcC5uYXRpdmVFbGVtZW50LCBjb25maWcpO1xuICAgIH1cbiAgICBzY3JvbGxUb0JvdHRvbShjb21wOkVsZW1lbnRSZWYpe1xuICAgICAgaWYoY29tcD8ubmF0aXZlRWxlbWVudD8uc2Nyb2xsSGVpZ2h0KXtcbiAgICAgICAgY29tcC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IGNvbXAubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHRcbiAgICAgIH1cbiAgICB9XG4gICBcblxuICAgIC8qKlxuICAgICAqIEFJ5ZON5bqU5YaF5a65IGZtb2RlQ2hhdC5sYXRlc3RBSVJlc3BvbnNlXG4gICAgICovXG4gICAgXG4gICBcbn1cbiIsIjxpb24tbWVudSAjbWVudSBjb250ZW50SWQ9XCJtYWluLWNvbnRlbnRcIiBzaWRlPVwiZW5kXCI+XG4gIDxpb24taGVhZGVyPlxuICAgIDxpb24tdG9vbGJhcj5cbiAgICAgIDxpb24tdGl0bGU+6LWE5paZPC9pb24tdGl0bGU+XG4gICAgPC9pb24tdG9vbGJhcj5cbiAgPC9pb24taGVhZGVyPlxuICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuXG4gICAgPGlvbi1jYXJkIHN0eWxlPVwibWFyZ2luOiAwcHg7XCI+XG4gICAgICA8aW1nIFtzcmNdPVwiYXZhdGFyUm9sZT8uZ2V0KCd0aHVtYicpXCIgYWx0PVwiXCI+XG4gICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+e3thdmF0YXJSb2xlPy5nZXQoJ3RhZ3MnKX19PC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgPGlvbi1jYXJkLXRpdGxlPnt7YXZhdGFyUm9sZT8uZ2V0KFwibmFtZVwiKX19PC9pb24tY2FyZC10aXRsZT5cbiAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgIFxuICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgIHt7YXZhdGFyUm9sZT8uZ2V0KFwiZGVzY1wiKX19XG5cbiAgICAgICAgICAgIDxpb24tbGlzdCBbaW5zZXRdPVwidHJ1ZVwiIHN0eWxlPVwibWFyZ2luOjBweDtcIj5cbiAgICAgICAgICAgICAgPCEtLSA8aW9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgPGlvbi1hdmF0YXIgKm5nSWY9XCJhdmF0YXJSb2xlPy5nZXQoJ3RodW1iJylcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBzbG90PVwic3RhcnRcIj5cbiAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJhdmF0YXJSb2xlPy5nZXQoJ3RodW1iJylcIiAvPlxuICAgICAgICAgICAgICAgIDwvaW9uLWF2YXRhcj5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPnt7YXZhdGFyUm9sZT8uZ2V0KFwibmFtZVwiKX19PC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWl0ZW0+IC0tPlxuICAgICAgICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCIgKm5nSWY9XCJhdmF0YXJSb2xlPy5nZXQoJ2FnZScpXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1ub3RlIHNsb3Q9XCJzdGFydFwiPuW5tOm+hDwvaW9uLW5vdGU+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbD57e2F2YXRhclJvbGU/LmdldChcImFnZVwiKX19PC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgICAgICAgIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIiAqbmdJZj1cImF2YXRhclJvbGU/LmdldCgnZ2VuZGVyJylcIj5cbiAgICAgICAgICAgICAgICA8aW9uLW5vdGUgc2xvdD1cInN0YXJ0XCI+5oCn5YirPC9pb24tbm90ZT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPnt7YXZhdGFyUm9sZT8uZ2V0KFwiZ2VuZGVyXCIpfX08L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgICAgICAgPGlvbi1pdGVtIGxpbmVzPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgIDxpb24tbm90ZSBzbG90PVwic3RhcnRcIj7np7Dlj7c8L2lvbi1ub3RlPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWw+e3thdmF0YXJSb2xlPy5nZXQoXCJ0aXRsZVwiKX19PC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgIFxuICAgICAgICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1ub3RlIHNsb3Q9XCJzdGFydFwiPuaThemVvzwvaW9uLW5vdGU+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbD57e2F2YXRhclJvbGU/LmdldChcInRhZ3NcIik/LmpvaW4oJywnKX19PC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XG5cbiAgICAgICAgICAgIDwvaW9uLWxpc3Q+XG4gICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgIDwvaW9uLWNhcmQ+XG4gICAgXG4gIFxuICAgIFxuICA8L2lvbi1jb250ZW50PlxuPC9pb24tbWVudT5cblxuPGRpdiBjbGFzcz1cImlvbi1wYWdlXCIgaWQ9XCJtYWluLWNvbnRlbnRcIj5cbiAgPGlvbi1oZWFkZXIgY2xhc3M9XCJpb24tbm8tYm9yZGVyXCI+XG4gICAgPGlvbi10b29sYmFyPlxuICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiZ29CYWNrKClcIj4gPGlvbi1pY29uIG5hbWU9XCJjaGV2cm9uLWJhY2stb3V0bGluZVwiPjwvaW9uLWljb24+IDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8aW9uLXRpdGxlPlxuICAgICAgICA8aW9uLWNoaXAgKm5nSWY9XCJhdmF0YXJSb2xlPy5nZXQoJ3RpdGxlJylcIj57e2F2YXRhclJvbGU/LmdldChcInRpdGxlXCIpfX08L2lvbi1jaGlwPlxuICAgICAgPC9pb24tdGl0bGU+XG4gICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICA8IS0tIDxpb24tYnV0dG9uIChjbGljayk9XCJwbGF5VFRTVGV0aW5nKClcIj5UVFPmtYvor5U8L2lvbi1idXR0b24+IC0tPlxuICAgICAgICB7e2F2YXRhclJvbGU/LmdldChcIm5hbWVcIil9fVxuICAgICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwibWVudS50b2dnbGUoKVwiPiA8aW9uLWljb24gbmFtZT1cImVsbGlwc2lzLWhvcml6b250YWwtb3V0bGluZVwiPjwvaW9uLWljb24+IDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgPC9pb24tdG9vbGJhcj5cbiAgPC9pb24taGVhZGVyPlxuXG4gIDwhLS0gPGlvbi1zZWdtZW50IHZhbHVlPVwidm9pY2VcIj5cbiAgICA8aW9uLXNlZ21lbnQtYnV0dG9uIChjbGljayk9XCJjaGF0U2Vydi5jcmVhdGVDaGF0UGFuZWwoYXZhdGFyUm9sZSlcIiB2YWx1ZT1cImNoYXRcIj5cbiAgICAgIDxpb24tbGFiZWw+6IGK5aSpPC9pb24tbGFiZWw+XG4gICAgPC9pb24tc2VnbWVudC1idXR0b24+XG4gICAgPGlvbi1zZWdtZW50LWJ1dHRvbiByb3V0ZXJMaW5rPVwie3snL2F2YXRhci9yb2xlLycrYXZhdGFyUm9sZT8uaWR9fVwiIHZhbHVlPVwidm9pY2VcIj5cbiAgICAgIDxpb24tbGFiZWw+6K+t6Z+zPC9pb24tbGFiZWw+XG4gICAgPC9pb24tc2VnbWVudC1idXR0b24+XG4gIDwvaW9uLXNlZ21lbnQ+IC0tPlxuXG4gICAgPCEtLSDmlbDlrZflvaLosaHvvJrliqjnlLvmlYjmnpwgLS0+XG4gICAgPGZtLWF2YXRhci1yb2xlLWltYWdlICpuZ0lmPVwiYXZhdGFyUm9sZSYmZm1vZGVDaGF0XCIgW2Ztb2RlQ2hhdF09XCJmbW9kZUNoYXRcIiBbcm9sZV09XCJhdmF0YXJSb2xlXCIgI2F2YXRhciBjbGFzcz1cImF2YXRhclwiPjwvZm0tYXZhdGFyLXJvbGUtaW1hZ2U+XG4gICAgPCEtLSA8Zm0tYXZhdGFyLXJvbGUtcGFydGljbGUgI2F2YXRhciBjbGFzcz1cImF2YXRhclwiPjwvZm0tYXZhdGFyLXJvbGUtcGFydGljbGU+IC0tPlxuXG4gICAgPCEtLSBBSeWbnuWkjeeahOacgOaWsOa2iOaBryAgLS0+XG4gICAgPGRpdiBjbGFzcz1cImFpLXJlc3AtaW5wdXRcIiAjYWlSZXNwQ29tcD57e2Ztb2RlQ2hhdD8ubGF0ZXN0QUlSZXNwb25zZSB8IGhpZGV4bWx9fTwvZGl2PlxuXG4gICAgPGZtLW1vZGFsLWNoYXQtdm9pY2UtaW5wdXQgKm5nSWY9XCJmbW9kZUNoYXRcIiBbZm1vZGVDaGF0XT1cImZtb2RlQ2hhdFwiPjwvZm0tbW9kYWwtY2hhdC12b2ljZS1pbnB1dD5cblxuPC9kaXY+XG5cbiJdfQ==
|
|
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/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Component,ElementRef,ViewChild}from"@angular/core";import{FmodeVoiceService}from"../../voice";import{ChatService}from"../../service-fmai/service-chat";import{IonicModule,NavController,Platform,ModalController}from"@ionic/angular";import{CommonModule}from"@angular/common";import{CompAvatarParticleComponent}from"../comp-avatar-particle/comp-avatar-particle.component";import{CompAvatarRoleImageComponent}from"../comp-avatar-role-image/comp-avatar-role-image.component";import{FormsModule}from"@angular/forms";import{ActivatedRoute,Router,RouterModule}from"@angular/router";import*as Parse from"parse";import{NovaCloudService}from"../../../nova-cloud/nova-cloud.service";import{HidexmlPipe}from"../../service-fmai/service-chat";import{ModalChatVoiceInputComponent}from"../modal-chat-voice-input/modal-chat-voice-input.component";import{Diagnostic}from"@awesome-cordova-plugins/diagnostic/ngx";import*as i0 from"@angular/core";import*as i1 from"../../voice";import*as i2 from"@ionic/angular";import*as i3 from"@angular/router";import*as i4 from"../../service-fmai/service-chat";import*as i5 from"../../../nova-cloud/nova-cloud.service";import*as i6 from"@angular/common";export class CompAvatarTalkComponent{constructor(o,e,n,t,i,a,r){this.voiceServ=o,this.platform=e,this.router=n,this.navCtrl=t,this.route=i,this.chatServ=a,this.ncloud=r,this.route.paramMap.subscribe((o=>{this.roleId=o.get("roleId"),this.loadAvatarRole(this.roleId)})),document.body.classList.add("dark")}ngOnInit(){}ngOnDestroy(){document.body.classList.remove("dark"),this.voiceServ.resultText=null,this.fmodeChat&&(this.fmodeChat.latestAIResponse=null)}goBack(){document.body.classList.remove("dark");let o=this.avatarRole?.get("backUrl");try{if(o)return void this.navCtrl.navigateRoot(o);this.navCtrl.navigateRoot("/chat/pro/role/"+this.roleId)}catch(o){this.navCtrl.navigateRoot("/chat/pro/role/"+this.roleId)}}async loadAvatarRole(o){let e=new Parse.Query("AvatarRole");this.avatarRole=await e.get(o);let n=await this.chatServ.createNewRoleChat(this.roleId);n.isTalkMode=!0,this.fmodeChat=n,this.fmodeChat.showAvatar()}ngAfterViewInit(){this.listenDivChange()}listenDivChange(){new MutationObserver((()=>{this.scrollToBottom(this.aiRespComp)})).observe(this.aiRespComp.nativeElement,{childList:!0,subtree:!0,attributes:!0})}scrollToBottom(o){o?.nativeElement?.scrollHeight&&(o.nativeElement.scrollTop=o.nativeElement.scrollHeight)}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CompAvatarTalkComponent,deps:[{token:i1.FmodeVoiceService},{token:i2.Platform},{token:i3.Router},{token:i2.NavController},{token:i3.ActivatedRoute},{token:i4.ChatService},{token:i5.NovaCloudService}],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:CompAvatarTalkComponent,isStandalone:!0,selector:"app-comp-avatar-talk",providers:[FmodeVoiceService,NovaCloudService,ChatService,Diagnostic,ModalController],viewQueries:[{propertyName:"avatarComp",first:!0,predicate:["avatar"],descendants:!0},{propertyName:"aiRespComp",first:!0,predicate:["aiRespComp"],descendants:!0}],ngImport:i0,template:'<ion-menu #menu contentId="main-content" side="end">\n <ion-header>\n <ion-toolbar>\n <ion-title>资料</ion-title>\n </ion-toolbar>\n </ion-header>\n <ion-content class="ion-padding">\n\n <ion-card style="margin: 0px;">\n <img [src]="avatarRole?.get(\'thumb\')" alt="">\n <ion-card-header>\n <ion-card-subtitle>{{avatarRole?.get(\'tags\')}}</ion-card-subtitle>\n <ion-card-title>{{avatarRole?.get("name")}}</ion-card-title>\n </ion-card-header>\n \n <ion-card-content>\n {{avatarRole?.get("desc")}}\n\n <ion-list [inset]="true" style="margin:0px;">\n \x3c!-- <ion-item>\n <ion-avatar *ngIf="avatarRole?.get(\'thumb\')" aria-hidden="true" slot="start">\n <img [src]="avatarRole?.get(\'thumb\')" />\n </ion-avatar>\n <ion-label>{{avatarRole?.get("name")}}</ion-label>\n </ion-item> --\x3e\n <ion-item lines="none" *ngIf="avatarRole?.get(\'age\')">\n <ion-note slot="start">年龄</ion-note>\n <ion-label>{{avatarRole?.get("age")}}</ion-label>\n </ion-item>\n <ion-item lines="none" *ngIf="avatarRole?.get(\'gender\')">\n <ion-note slot="start">性别</ion-note>\n <ion-label>{{avatarRole?.get("gender")}}</ion-label>\n </ion-item>\n <ion-item lines="none">\n <ion-note slot="start">称号</ion-note>\n <ion-label>{{avatarRole?.get("title")}}</ion-label>\n </ion-item>\n \n <ion-item lines="none">\n <ion-note slot="start">擅长</ion-note>\n <ion-label>{{avatarRole?.get("tags")?.join(\',\')}}</ion-label>\n </ion-item>\n\n </ion-list>\n </ion-card-content>\n </ion-card>\n \n \n \n </ion-content>\n</ion-menu>\n\n<div class="ion-page" id="main-content">\n <ion-header class="ion-no-border">\n <ion-toolbar>\n <ion-buttons slot="start">\n <ion-button (click)="goBack()"> <ion-icon name="chevron-back-outline"></ion-icon> </ion-button>\n </ion-buttons>\n <ion-title>\n <ion-chip *ngIf="avatarRole?.get(\'title\')">{{avatarRole?.get("title")}}</ion-chip>\n </ion-title>\n <ion-buttons slot="end">\n \x3c!-- <ion-button (click)="playTTSTeting()">TTS测试</ion-button> --\x3e\n {{avatarRole?.get("name")}}\n <ion-button (click)="menu.toggle()"> <ion-icon name="ellipsis-horizontal-outline"></ion-icon> </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n\n \x3c!-- <ion-segment value="voice">\n <ion-segment-button (click)="chatServ.createChatPanel(avatarRole)" value="chat">\n <ion-label>聊天</ion-label>\n </ion-segment-button>\n <ion-segment-button routerLink="{{\'/avatar/role/\'+avatarRole?.id}}" value="voice">\n <ion-label>语音</ion-label>\n </ion-segment-button>\n </ion-segment> --\x3e\n\n \x3c!-- 数字形象:动画效果 --\x3e\n <fm-avatar-role-image *ngIf="avatarRole&&fmodeChat" [fmodeChat]="fmodeChat" [role]="avatarRole" #avatar class="avatar"></fm-avatar-role-image>\n \x3c!-- <fm-avatar-role-particle #avatar class="avatar"></fm-avatar-role-particle> --\x3e\n\n \x3c!-- AI回复的最新消息 --\x3e\n <div class="ai-resp-input" #aiRespComp>{{fmodeChat?.latestAIResponse | hidexml}}</div>\n\n <fm-modal-chat-voice-input *ngIf="fmodeChat" [fmodeChat]="fmodeChat"></fm-modal-chat-voice-input>\n\n</div>\n\n',styles:["ion-menu ion-note{color:#ccc;font-weight:700}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.avatar{display:block;width:100%;height:100%}.ai-resp-input{font-size:1rem;color:#fff;position:fixed;top:60px;max-height:15vh;overflow-y:scroll;padding:0 10px}.user-asr-input{font-size:1rem;color:#fff;position:fixed;bottom:6vh;padding:0 10px}.test-button-group{color:#00f;position:fixed;bottom:20vh}.test-button-group button{padding:10px;margin:10px}\n"],dependencies:[{kind:"ngmodule",type:CommonModule},{kind:"directive",type:i6.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"ngmodule",type:RouterModule},{kind:"ngmodule",type:FormsModule},{kind:"ngmodule",type:IonicModule},{kind:"component",type:i2.IonButton,selector:"ion-button",inputs:["buttonType","color","disabled","download","expand","fill","form","href","mode","rel","routerAnimation","routerDirection","shape","size","strong","target","type"]},{kind:"component",type:i2.IonButtons,selector:"ion-buttons",inputs:["collapse"]},{kind:"component",type:i2.IonCard,selector:"ion-card",inputs:["button","color","disabled","download","href","mode","rel","routerAnimation","routerDirection","target","type"]},{kind:"component",type:i2.IonCardContent,selector:"ion-card-content",inputs:["mode"]},{kind:"component",type:i2.IonCardHeader,selector:"ion-card-header",inputs:["color","mode","translucent"]},{kind:"component",type:i2.IonCardSubtitle,selector:"ion-card-subtitle",inputs:["color","mode"]},{kind:"component",type:i2.IonCardTitle,selector:"ion-card-title",inputs:["color","mode"]},{kind:"component",type:i2.IonChip,selector:"ion-chip",inputs:["color","disabled","mode","outline"]},{kind:"component",type:i2.IonContent,selector:"ion-content",inputs:["color","fixedSlotPlacement","forceOverscroll","fullscreen","scrollEvents","scrollX","scrollY"]},{kind:"component",type:i2.IonHeader,selector:"ion-header",inputs:["collapse","mode","translucent"]},{kind:"component",type:i2.IonIcon,selector:"ion-icon",inputs:["color","flipRtl","icon","ios","lazy","md","mode","name","sanitize","size","src"]},{kind:"component",type:i2.IonItem,selector:"ion-item",inputs:["button","color","detail","detailIcon","disabled","download","href","lines","mode","rel","routerAnimation","routerDirection","target","type"]},{kind:"component",type:i2.IonLabel,selector:"ion-label",inputs:["color","mode","position"]},{kind:"component",type:i2.IonList,selector:"ion-list",inputs:["inset","lines","mode"]},{kind:"component",type:i2.IonMenu,selector:"ion-menu",inputs:["contentId","disabled","maxEdgeStart","menuId","side","swipeGesture","type"]},{kind:"component",type:i2.IonNote,selector:"ion-note",inputs:["color","mode"]},{kind:"component",type:i2.IonTitle,selector:"ion-title",inputs:["color","size"]},{kind:"component",type:i2.IonToolbar,selector:"ion-toolbar",inputs:["color","mode"]},{kind:"component",type:CompAvatarRoleImageComponent,selector:"fm-avatar-role-image",inputs:["fmodeChat","role"]},{kind:"component",type:ModalChatVoiceInputComponent,selector:"fm-modal-chat-voice-input",inputs:["fmodeChat","talkMode"]},{kind:"pipe",type:HidexmlPipe,name:"hidexml"}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CompAvatarTalkComponent,decorators:[{type:Component,args:[{selector:"app-comp-avatar-talk",standalone:!0,imports:[CommonModule,RouterModule,FormsModule,IonicModule,CompAvatarParticleComponent,CompAvatarRoleImageComponent,ModalChatVoiceInputComponent,HidexmlPipe],providers:[FmodeVoiceService,NovaCloudService,ChatService,Diagnostic,ModalController],template:'<ion-menu #menu contentId="main-content" side="end">\n <ion-header>\n <ion-toolbar>\n <ion-title>资料</ion-title>\n </ion-toolbar>\n </ion-header>\n <ion-content class="ion-padding">\n\n <ion-card style="margin: 0px;">\n <img [src]="avatarRole?.get(\'thumb\')" alt="">\n <ion-card-header>\n <ion-card-subtitle>{{avatarRole?.get(\'tags\')}}</ion-card-subtitle>\n <ion-card-title>{{avatarRole?.get("name")}}</ion-card-title>\n </ion-card-header>\n \n <ion-card-content>\n {{avatarRole?.get("desc")}}\n\n <ion-list [inset]="true" style="margin:0px;">\n \x3c!-- <ion-item>\n <ion-avatar *ngIf="avatarRole?.get(\'thumb\')" aria-hidden="true" slot="start">\n <img [src]="avatarRole?.get(\'thumb\')" />\n </ion-avatar>\n <ion-label>{{avatarRole?.get("name")}}</ion-label>\n </ion-item> --\x3e\n <ion-item lines="none" *ngIf="avatarRole?.get(\'age\')">\n <ion-note slot="start">年龄</ion-note>\n <ion-label>{{avatarRole?.get("age")}}</ion-label>\n </ion-item>\n <ion-item lines="none" *ngIf="avatarRole?.get(\'gender\')">\n <ion-note slot="start">性别</ion-note>\n <ion-label>{{avatarRole?.get("gender")}}</ion-label>\n </ion-item>\n <ion-item lines="none">\n <ion-note slot="start">称号</ion-note>\n <ion-label>{{avatarRole?.get("title")}}</ion-label>\n </ion-item>\n \n <ion-item lines="none">\n <ion-note slot="start">擅长</ion-note>\n <ion-label>{{avatarRole?.get("tags")?.join(\',\')}}</ion-label>\n </ion-item>\n\n </ion-list>\n </ion-card-content>\n </ion-card>\n \n \n \n </ion-content>\n</ion-menu>\n\n<div class="ion-page" id="main-content">\n <ion-header class="ion-no-border">\n <ion-toolbar>\n <ion-buttons slot="start">\n <ion-button (click)="goBack()"> <ion-icon name="chevron-back-outline"></ion-icon> </ion-button>\n </ion-buttons>\n <ion-title>\n <ion-chip *ngIf="avatarRole?.get(\'title\')">{{avatarRole?.get("title")}}</ion-chip>\n </ion-title>\n <ion-buttons slot="end">\n \x3c!-- <ion-button (click)="playTTSTeting()">TTS测试</ion-button> --\x3e\n {{avatarRole?.get("name")}}\n <ion-button (click)="menu.toggle()"> <ion-icon name="ellipsis-horizontal-outline"></ion-icon> </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n\n \x3c!-- <ion-segment value="voice">\n <ion-segment-button (click)="chatServ.createChatPanel(avatarRole)" value="chat">\n <ion-label>聊天</ion-label>\n </ion-segment-button>\n <ion-segment-button routerLink="{{\'/avatar/role/\'+avatarRole?.id}}" value="voice">\n <ion-label>语音</ion-label>\n </ion-segment-button>\n </ion-segment> --\x3e\n\n \x3c!-- 数字形象:动画效果 --\x3e\n <fm-avatar-role-image *ngIf="avatarRole&&fmodeChat" [fmodeChat]="fmodeChat" [role]="avatarRole" #avatar class="avatar"></fm-avatar-role-image>\n \x3c!-- <fm-avatar-role-particle #avatar class="avatar"></fm-avatar-role-particle> --\x3e\n\n \x3c!-- AI回复的最新消息 --\x3e\n <div class="ai-resp-input" #aiRespComp>{{fmodeChat?.latestAIResponse | hidexml}}</div>\n\n <fm-modal-chat-voice-input *ngIf="fmodeChat" [fmodeChat]="fmodeChat"></fm-modal-chat-voice-input>\n\n</div>\n\n',styles:["ion-menu ion-note{color:#ccc;font-weight:700}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.avatar{display:block;width:100%;height:100%}.ai-resp-input{font-size:1rem;color:#fff;position:fixed;top:60px;max-height:15vh;overflow-y:scroll;padding:0 10px}.user-asr-input{font-size:1rem;color:#fff;position:fixed;bottom:6vh;padding:0 10px}.test-button-group{color:#00f;position:fixed;bottom:20vh}.test-button-group button{padding:10px;margin:10px}\n"]}]}],ctorParameters:()=>[{type:i1.FmodeVoiceService},{type:i2.Platform},{type:i3.Router},{type:i2.NavController},{type:i3.ActivatedRoute},{type:i4.ChatService},{type:i5.NovaCloudService}],propDecorators:{avatarComp:[{type:ViewChild,args:["avatar"]}],aiRespComp:[{type:ViewChild,args:["aiRespComp"]}]}});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2F2YXRhci9jb21wLWF2YXRhci10YWxrL2NvbXAtYXZhdGFyLXRhbGsuY29tcG9uZW50Lm1qcw==`
|
|
10
|
+
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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/avatar/index.mjs
|
|
7
|
+
*/
|
|
8
|
+
export*from"./avatar.module";export*from"./interface-avatar-role";export*from"./comp-avatar-particle";export*from"./comp-avatar-role-image/comp-avatar-role-image.component";export*from"./comp-avatar-role-video/comp-avatar-role-video.component";export*from"./comp-avatar-talk/comp-avatar-talk.component";export*from"./modal-chat-voice-input/modal-chat-voice-input.component";
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2F2YXRhci9pbmRleC5tanM=`
|
|
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/avatar/interface-avatar-role.mjs
|
|
7
|
+
*/
|
|
8
|
+
export{};
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2F2YXRhci9pbnRlcmZhY2UtYXZhdGFyLXJvbGUubWpz`
|
|
10
|
+
|