@memori.ai/memori-react 7.8.4 → 7.8.5
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/CHANGELOG.md +19 -0
- package/dist/components/Avatar/Avatar.js.map +1 -1
- package/dist/components/Avatar/AvatarView/AvatarComponent/avatarComponent.js +4 -2
- package/dist/components/Avatar/AvatarView/AvatarComponent/avatarComponent.js.map +1 -1
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/AnimationController.d.ts +34 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/AnimationController.js +147 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/AnimationController.js.map +1 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/MorhTargetController.d.ts +17 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/MorhTargetController.js +73 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/MorhTargetController.js.map +1 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/constants.d.ts +17 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/constants.js +25 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/constants.js.map +1 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.d.ts +2 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js +83 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js.map +1 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/types.d.ts +35 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/types.js +10 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/types.js.map +1 -0
- package/dist/components/Avatar/AvatarView/index.js.map +1 -1
- package/dist/context/visemeContext.d.ts +1 -1
- package/dist/context/visemeContext.js +2 -2
- package/dist/context/visemeContext.js.map +1 -1
- package/esm/components/Avatar/Avatar.js.map +1 -1
- package/esm/components/Avatar/AvatarView/AvatarComponent/avatarComponent.js +4 -2
- package/esm/components/Avatar/AvatarView/AvatarComponent/avatarComponent.js.map +1 -1
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/AnimationController.d.ts +34 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/AnimationController.js +143 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/AnimationController.js.map +1 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/MorhTargetController.d.ts +17 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/MorhTargetController.js +69 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/MorhTargetController.js.map +1 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/constants.d.ts +17 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/constants.js +22 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/constants.js.map +1 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.d.ts +2 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js +80 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js.map +1 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/types.d.ts +35 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/types.js +7 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/types.js.map +1 -0
- package/esm/components/Avatar/AvatarView/index.js.map +1 -1
- package/esm/context/visemeContext.d.ts +1 -1
- package/esm/context/visemeContext.js +2 -2
- package/esm/context/visemeContext.js.map +1 -1
- package/package.json +1 -1
- package/src/components/Avatar/Avatar.tsx +2 -3
- package/src/components/Avatar/AvatarView/AvatarComponent/avatarComponent.tsx +6 -13
- package/src/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/AnimationController.ts +260 -0
- package/src/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/MorhTargetController.ts +123 -0
- package/src/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/constants.ts +28 -0
- package/src/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.tsx +147 -0
- package/src/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/types.ts +40 -0
- package/src/components/Avatar/AvatarView/index.tsx +4 -4
- package/src/context/visemeContext.tsx +2 -2
- package/src/components/Avatar/AvatarView/AvatarComponent/components/fullbodyAvatar.tsx +0 -281
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
+
## [7.8.5](https://github.com/memori-ai/memori-react/compare/v7.8.4...v7.8.5) (2024-11-07)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* added idle random after every animation except for Loading ([18264fa](https://github.com/memori-ai/memori-react/commit/18264fa892a77bb7154548566039a3fc297d544b))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* condition to avoid repeating the same idle animation twice ([6137575](https://github.com/memori-ai/memori-react/commit/61375754dbc176a6e3875b9d25d34cc2d822251b))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Changes
|
|
17
|
+
|
|
18
|
+
* fine tuned lip sync constant values ([2756914](https://github.com/memori-ai/memori-react/commit/2756914a023b6ccc90316698ccc2dbba8df7b4c1))
|
|
19
|
+
* handle full body avatar animation and morph target in separated classes ([f8c20d1](https://github.com/memori-ai/memori-react/commit/f8c20d15ff67c6b7c6857f893c1ec14dd88660c9))
|
|
20
|
+
* removed logs and set max idle count ([12d06b7](https://github.com/memori-ai/memori-react/commit/12d06b7f154387cfe405545f0db8ba3ade5fd966))
|
|
21
|
+
|
|
3
22
|
## [7.8.4](https://github.com/memori-ai/memori-react/compare/v7.8.3...v7.8.4) (2024-10-31)
|
|
4
23
|
|
|
5
24
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.js","sourceRoot":"","sources":["../../../src/components/Avatar/Avatar.tsx"],"names":[],"mappings":";;;;AAAA,iCAAyD;AAMzD,2FAA2D;AAC3D,oEAAoC;AACpC,+CAAqD;AACrD,gEAAgC;AAChC,8FAA8D;AAC9D,kEAAkC;AAClC,iDAA+C;AAC/C,+DAA+B;AAC/B,iFAAiD;AACjD,iEAAiC;AACjC,oEAA4B;AAC5B,sEAA+C;AAC/C,+DAAwD;AAoBxD,MAAM,MAAM,GAAoB,CAAC,EAC/B,MAAM,EACN,WAAW,EACX,iBAAiB,EACjB,MAAM,EACN,QAAQ,GAAG,KAAK,EAChB,eAAe,GAAG,KAAK,EACvB,kBAAkB,EAClB,qBAAqB,GAAG,KAAK,EAC7B,cAAc,GAAG,KAAK,EACtB,OAAO,GAAG,KAAK,EACf,OAAO,EACP,MAAM,EACN,SAAS,EACT,QAAQ,GAAG,KAAK,EAChB,SAAS,GACV,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"Avatar.js","sourceRoot":"","sources":["../../../src/components/Avatar/Avatar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
6
|
const react_1 = require("react");
|
|
7
7
|
const controls_1 = tslib_1.__importDefault(require("./components/controls"));
|
|
8
|
-
const fullbodyAvatar_1 = tslib_1.__importDefault(require("./components/fullbodyAvatar"));
|
|
8
|
+
const fullbodyAvatar_1 = tslib_1.__importDefault(require("./components/FullbodyAvatar/fullbodyAvatar"));
|
|
9
9
|
const halfbodyAvatar_1 = tslib_1.__importDefault(require("./components/halfbodyAvatar"));
|
|
10
10
|
const baseActions = {
|
|
11
11
|
Gioia1: { weight: 0 },
|
|
@@ -42,7 +42,9 @@ const AvatarView = ({ stopProcessing, chatEmission, showControls, animation, url
|
|
|
42
42
|
const [emotionMorphTargets, setEmotionMorphTargets] = (0, react_1.useState)({});
|
|
43
43
|
const [timeScale, setTimeScale] = (0, react_1.useState)(0.8);
|
|
44
44
|
const setEmotionMorphTargetInfluences = (0, react_1.useCallback)((action) => {
|
|
45
|
-
if (action === 'Loading1' ||
|
|
45
|
+
if (action === 'Loading1' ||
|
|
46
|
+
action === 'Loading2' ||
|
|
47
|
+
action === 'Loading3') {
|
|
46
48
|
return;
|
|
47
49
|
}
|
|
48
50
|
const emotionMap = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avatarComponent.js","sourceRoot":"","sources":["../../../../../src/components/Avatar/AvatarView/AvatarComponent/avatarComponent.tsx"],"names":[],"mappings":";;;;;AAAA,iCAAgE;AAChE,6EAA0D;AAC1D,
|
|
1
|
+
{"version":3,"file":"avatarComponent.js","sourceRoot":"","sources":["../../../../../src/components/Avatar/AvatarView/AvatarComponent/avatarComponent.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { AnimationState, AnimationConfig } from './types';
|
|
2
|
+
import { AnimationAction, AnimationMixer } from 'three';
|
|
3
|
+
export declare class AnimationController {
|
|
4
|
+
private currentState;
|
|
5
|
+
private currentAction;
|
|
6
|
+
private mixer;
|
|
7
|
+
private actions;
|
|
8
|
+
private config;
|
|
9
|
+
private lastIdleIndex;
|
|
10
|
+
private isTransitioning;
|
|
11
|
+
private currentIdleLoopCount;
|
|
12
|
+
private readonly MAX_IDLE_LOOPS;
|
|
13
|
+
private lastAnimationTime;
|
|
14
|
+
private isChatAlreadyStarted;
|
|
15
|
+
constructor(mixer: AnimationMixer, actions: Record<string, AnimationAction>, config?: AnimationConfig);
|
|
16
|
+
private checkForLoop;
|
|
17
|
+
private forceIdleChange;
|
|
18
|
+
private getNextIdleAnimation;
|
|
19
|
+
transitionTo(state: AnimationState, emotionName?: string): void;
|
|
20
|
+
update(delta: number): void;
|
|
21
|
+
getCurrentState(): AnimationState;
|
|
22
|
+
getLoopCount(): number;
|
|
23
|
+
setTimeScale(timeScale: number): void;
|
|
24
|
+
updateIsChatAlreadyStarted(isChatAlreadyStarted: boolean): void;
|
|
25
|
+
getDebugInfo(): {
|
|
26
|
+
currentState: AnimationState;
|
|
27
|
+
currentIdleIndex: number;
|
|
28
|
+
loopCount: number;
|
|
29
|
+
currentTime: number;
|
|
30
|
+
lastTime: number;
|
|
31
|
+
isTransitioning: boolean;
|
|
32
|
+
isChatAlreadyStarted: boolean;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AnimationController = void 0;
|
|
4
|
+
const types_1 = require("./types");
|
|
5
|
+
const three_1 = require("three");
|
|
6
|
+
const constants_1 = require("./constants");
|
|
7
|
+
class AnimationController {
|
|
8
|
+
constructor(mixer, actions, config = constants_1.DEFAULT_CONFIG) {
|
|
9
|
+
this.currentState = types_1.AnimationState.LOADING;
|
|
10
|
+
this.currentAction = null;
|
|
11
|
+
this.lastIdleIndex = -1;
|
|
12
|
+
this.isTransitioning = false;
|
|
13
|
+
this.currentIdleLoopCount = 0;
|
|
14
|
+
this.MAX_IDLE_LOOPS = 5;
|
|
15
|
+
this.lastAnimationTime = 0;
|
|
16
|
+
this.isChatAlreadyStarted = false;
|
|
17
|
+
this.mixer = mixer;
|
|
18
|
+
this.actions = actions;
|
|
19
|
+
this.config = config;
|
|
20
|
+
}
|
|
21
|
+
checkForLoop() {
|
|
22
|
+
if (!this.currentAction || this.currentState !== types_1.AnimationState.IDLE)
|
|
23
|
+
return;
|
|
24
|
+
const clip = this.currentAction.getClip();
|
|
25
|
+
const currentTime = this.currentAction.time;
|
|
26
|
+
if (currentTime < this.lastAnimationTime) {
|
|
27
|
+
this.currentIdleLoopCount++;
|
|
28
|
+
if (this.currentIdleLoopCount >= this.MAX_IDLE_LOOPS) {
|
|
29
|
+
this.forceIdleChange();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
this.lastAnimationTime = currentTime;
|
|
33
|
+
}
|
|
34
|
+
forceIdleChange() {
|
|
35
|
+
this.currentIdleLoopCount = 0;
|
|
36
|
+
this.lastAnimationTime = 0;
|
|
37
|
+
this.transitionTo(types_1.AnimationState.IDLE);
|
|
38
|
+
}
|
|
39
|
+
getNextIdleAnimation() {
|
|
40
|
+
let nextIndex;
|
|
41
|
+
do {
|
|
42
|
+
nextIndex = Math.floor(Math.random() * this.config.idleCount) + 1;
|
|
43
|
+
} while (nextIndex === this.lastIdleIndex);
|
|
44
|
+
if (this.isChatAlreadyStarted && nextIndex === 3) {
|
|
45
|
+
nextIndex = this.lastIdleIndex !== 4 ? 4 : 2;
|
|
46
|
+
}
|
|
47
|
+
this.lastIdleIndex = nextIndex;
|
|
48
|
+
const idleAction = this.actions[`Idle${nextIndex}`];
|
|
49
|
+
if (!idleAction) {
|
|
50
|
+
throw new Error(`Idle animation ${nextIndex} not found`);
|
|
51
|
+
}
|
|
52
|
+
return idleAction;
|
|
53
|
+
}
|
|
54
|
+
transitionTo(state, emotionName) {
|
|
55
|
+
if (this.isTransitioning) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
this.isTransitioning = true;
|
|
59
|
+
try {
|
|
60
|
+
let nextAction = null;
|
|
61
|
+
switch (state) {
|
|
62
|
+
case types_1.AnimationState.LOADING:
|
|
63
|
+
nextAction = this.actions[emotionName || 'Loading1'];
|
|
64
|
+
this.currentIdleLoopCount = 0;
|
|
65
|
+
this.lastAnimationTime = 0;
|
|
66
|
+
break;
|
|
67
|
+
case types_1.AnimationState.EMOTION:
|
|
68
|
+
nextAction = this.actions[emotionName || 'Timore1'];
|
|
69
|
+
this.currentIdleLoopCount = 0;
|
|
70
|
+
this.lastAnimationTime = 0;
|
|
71
|
+
break;
|
|
72
|
+
case types_1.AnimationState.IDLE:
|
|
73
|
+
nextAction = this.getNextIdleAnimation();
|
|
74
|
+
if (this.currentState !== types_1.AnimationState.IDLE) {
|
|
75
|
+
this.currentIdleLoopCount = 0;
|
|
76
|
+
this.lastAnimationTime = 0;
|
|
77
|
+
}
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
if (!nextAction) {
|
|
81
|
+
throw new Error(`No animation found for state: ${state}`);
|
|
82
|
+
}
|
|
83
|
+
if (this.currentAction) {
|
|
84
|
+
this.currentAction.fadeOut(this.config.fadeOutDuration);
|
|
85
|
+
}
|
|
86
|
+
nextAction.reset().fadeIn(this.config.fadeInDuration).play();
|
|
87
|
+
nextAction.timeScale = this.config.timeScale;
|
|
88
|
+
if (state !== types_1.AnimationState.IDLE) {
|
|
89
|
+
nextAction.setLoop(three_1.LoopOnce, 1);
|
|
90
|
+
nextAction.clampWhenFinished = true;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
nextAction.setLoop(Infinity, Infinity);
|
|
94
|
+
}
|
|
95
|
+
this.currentAction = nextAction;
|
|
96
|
+
this.currentState = state;
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
console.error('[AnimationController] Error during animation transition:', error);
|
|
100
|
+
if (state !== types_1.AnimationState.IDLE) {
|
|
101
|
+
this.transitionTo(types_1.AnimationState.IDLE);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
this.isTransitioning = false;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
update(delta) {
|
|
109
|
+
if (!this.currentAction)
|
|
110
|
+
return;
|
|
111
|
+
this.checkForLoop();
|
|
112
|
+
if (this.currentState !== types_1.AnimationState.IDLE &&
|
|
113
|
+
this.currentAction.time >= this.currentAction.getClip().duration * 0.9) {
|
|
114
|
+
this.transitionTo(types_1.AnimationState.IDLE);
|
|
115
|
+
}
|
|
116
|
+
this.mixer.update(delta);
|
|
117
|
+
}
|
|
118
|
+
getCurrentState() {
|
|
119
|
+
return this.currentState;
|
|
120
|
+
}
|
|
121
|
+
getLoopCount() {
|
|
122
|
+
return this.currentIdleLoopCount;
|
|
123
|
+
}
|
|
124
|
+
setTimeScale(timeScale) {
|
|
125
|
+
this.config.timeScale = timeScale;
|
|
126
|
+
if (this.currentAction) {
|
|
127
|
+
this.currentAction.timeScale = timeScale;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
updateIsChatAlreadyStarted(isChatAlreadyStarted) {
|
|
131
|
+
this.isChatAlreadyStarted = isChatAlreadyStarted;
|
|
132
|
+
}
|
|
133
|
+
getDebugInfo() {
|
|
134
|
+
var _a;
|
|
135
|
+
return {
|
|
136
|
+
currentState: this.currentState,
|
|
137
|
+
currentIdleIndex: this.lastIdleIndex,
|
|
138
|
+
loopCount: this.currentIdleLoopCount,
|
|
139
|
+
currentTime: ((_a = this.currentAction) === null || _a === void 0 ? void 0 : _a.time) || 0,
|
|
140
|
+
lastTime: this.lastAnimationTime,
|
|
141
|
+
isTransitioning: this.isTransitioning,
|
|
142
|
+
isChatAlreadyStarted: this.isChatAlreadyStarted,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
exports.AnimationController = AnimationController;
|
|
147
|
+
//# sourceMappingURL=AnimationController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnimationController.js","sourceRoot":"","sources":["../../../../../../../src/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/AnimationController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { SkinnedMesh } from 'three';
|
|
2
|
+
export declare class MorphTargetController {
|
|
3
|
+
private headMesh;
|
|
4
|
+
private currentEmotionValues;
|
|
5
|
+
private previousEmotionKeys;
|
|
6
|
+
constructor(headMesh: SkinnedMesh);
|
|
7
|
+
updateMorphTargets(currentTime: number, emotionMorphTargets: Record<string, number>, currentViseme: {
|
|
8
|
+
name: string;
|
|
9
|
+
weight: number;
|
|
10
|
+
} | null, eyeBlink: boolean, blinkState: {
|
|
11
|
+
isBlinking: boolean;
|
|
12
|
+
lastBlinkTime: number;
|
|
13
|
+
nextBlinkTime: number;
|
|
14
|
+
blinkStartTime: number;
|
|
15
|
+
}): void;
|
|
16
|
+
private calculateBlinkValue;
|
|
17
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MorphTargetController = void 0;
|
|
4
|
+
const three_1 = require("three");
|
|
5
|
+
const constants_1 = require("./constants");
|
|
6
|
+
class MorphTargetController {
|
|
7
|
+
constructor(headMesh) {
|
|
8
|
+
this.currentEmotionValues = {};
|
|
9
|
+
this.previousEmotionKeys = new Set();
|
|
10
|
+
this.headMesh = headMesh;
|
|
11
|
+
}
|
|
12
|
+
updateMorphTargets(currentTime, emotionMorphTargets, currentViseme, eyeBlink, blinkState) {
|
|
13
|
+
if (!this.headMesh.morphTargetDictionary ||
|
|
14
|
+
!this.headMesh.morphTargetInfluences) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const blinkValue = this.calculateBlinkValue(currentTime, blinkState, eyeBlink);
|
|
18
|
+
const currentEmotionKeys = new Set(Object.keys(emotionMorphTargets));
|
|
19
|
+
Object.entries(this.headMesh.morphTargetDictionary).forEach(([key, index]) => {
|
|
20
|
+
if (typeof index !== 'number')
|
|
21
|
+
return;
|
|
22
|
+
let targetValue = 0;
|
|
23
|
+
if (currentEmotionKeys.has(key)) {
|
|
24
|
+
const targetEmotionValue = emotionMorphTargets[key];
|
|
25
|
+
const currentEmotionValue = this.currentEmotionValues[key] || 0;
|
|
26
|
+
const newEmotionValue = three_1.MathUtils.lerp(currentEmotionValue, targetEmotionValue * 2.5, constants_1.EMOTION_SMOOTHING);
|
|
27
|
+
this.currentEmotionValues[key] = newEmotionValue;
|
|
28
|
+
targetValue += newEmotionValue;
|
|
29
|
+
}
|
|
30
|
+
if (currentViseme && key === currentViseme.name) {
|
|
31
|
+
targetValue += currentViseme.weight;
|
|
32
|
+
}
|
|
33
|
+
if (key === 'eyesClosed' && eyeBlink) {
|
|
34
|
+
targetValue += blinkValue;
|
|
35
|
+
}
|
|
36
|
+
targetValue = three_1.MathUtils.clamp(targetValue, 0, 1);
|
|
37
|
+
if (this.headMesh.morphTargetInfluences) {
|
|
38
|
+
this.headMesh.morphTargetInfluences[index] = three_1.MathUtils.lerp(this.headMesh.morphTargetInfluences[index] || 0, targetValue, constants_1.VISEME_SMOOTHING);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
this.previousEmotionKeys = currentEmotionKeys;
|
|
42
|
+
}
|
|
43
|
+
calculateBlinkValue(currentTime, blinkState, eyeBlink) {
|
|
44
|
+
if (!eyeBlink)
|
|
45
|
+
return 0;
|
|
46
|
+
let blinkValue = 0;
|
|
47
|
+
if (currentTime >= blinkState.nextBlinkTime && !blinkState.isBlinking) {
|
|
48
|
+
blinkState.isBlinking = true;
|
|
49
|
+
blinkState.blinkStartTime = currentTime;
|
|
50
|
+
blinkState.lastBlinkTime = currentTime;
|
|
51
|
+
blinkState.nextBlinkTime =
|
|
52
|
+
currentTime +
|
|
53
|
+
Math.random() * (constants_1.BLINK_CONFIG.maxInterval - constants_1.BLINK_CONFIG.minInterval) +
|
|
54
|
+
constants_1.BLINK_CONFIG.minInterval;
|
|
55
|
+
}
|
|
56
|
+
if (blinkState.isBlinking) {
|
|
57
|
+
const blinkProgress = (currentTime - blinkState.blinkStartTime) / constants_1.BLINK_CONFIG.blinkDuration;
|
|
58
|
+
if (blinkProgress <= 0.5) {
|
|
59
|
+
blinkValue = blinkProgress * 2;
|
|
60
|
+
}
|
|
61
|
+
else if (blinkProgress <= 1) {
|
|
62
|
+
blinkValue = 2 - blinkProgress * 2;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
blinkState.isBlinking = false;
|
|
66
|
+
blinkValue = 0;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return blinkValue;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.MorphTargetController = MorphTargetController;
|
|
73
|
+
//# sourceMappingURL=MorhTargetController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MorhTargetController.js","sourceRoot":"","sources":["../../../../../../../src/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/MorhTargetController.ts"],"names":[],"mappings":"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"}
|
package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/constants.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Vector3, Euler } from 'three';
|
|
2
|
+
import { AnimationConfig } from './types';
|
|
3
|
+
export declare const AVATAR_POSITION: Vector3;
|
|
4
|
+
export declare const AVATAR_ROTATION: Euler;
|
|
5
|
+
export declare const AVATAR_POSITION_ZOOMED: Vector3;
|
|
6
|
+
export declare const ANIMATION_URLS: {
|
|
7
|
+
MALE: string;
|
|
8
|
+
FEMALE: string;
|
|
9
|
+
};
|
|
10
|
+
export declare const BLINK_CONFIG: {
|
|
11
|
+
minInterval: number;
|
|
12
|
+
maxInterval: number;
|
|
13
|
+
blinkDuration: number;
|
|
14
|
+
};
|
|
15
|
+
export declare const DEFAULT_CONFIG: AnimationConfig;
|
|
16
|
+
export declare const EMOTION_SMOOTHING = 0.3;
|
|
17
|
+
export declare const VISEME_SMOOTHING = 0.5;
|
package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/constants.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VISEME_SMOOTHING = exports.EMOTION_SMOOTHING = exports.DEFAULT_CONFIG = exports.BLINK_CONFIG = exports.ANIMATION_URLS = exports.AVATAR_POSITION_ZOOMED = exports.AVATAR_ROTATION = exports.AVATAR_POSITION = void 0;
|
|
4
|
+
const three_1 = require("three");
|
|
5
|
+
exports.AVATAR_POSITION = new three_1.Vector3(0, -1, 0);
|
|
6
|
+
exports.AVATAR_ROTATION = new three_1.Euler(0.175, 0, 0);
|
|
7
|
+
exports.AVATAR_POSITION_ZOOMED = new three_1.Vector3(0, -1.45, 0);
|
|
8
|
+
exports.ANIMATION_URLS = {
|
|
9
|
+
MALE: 'https://assets.memori.ai/api/v2/asset/2c5e88a4-cf62-408b-9ef0-518b099dfcb2.glb',
|
|
10
|
+
FEMALE: 'https://assets.memori.ai/api/v2/asset/8d1a5853-f05a-4a34-9f99-6eff64986081.glb',
|
|
11
|
+
};
|
|
12
|
+
exports.BLINK_CONFIG = {
|
|
13
|
+
minInterval: 1000,
|
|
14
|
+
maxInterval: 5000,
|
|
15
|
+
blinkDuration: 150,
|
|
16
|
+
};
|
|
17
|
+
exports.DEFAULT_CONFIG = {
|
|
18
|
+
fadeInDuration: 0.8,
|
|
19
|
+
fadeOutDuration: 0.8,
|
|
20
|
+
idleCount: 5,
|
|
21
|
+
timeScale: 1.0,
|
|
22
|
+
};
|
|
23
|
+
exports.EMOTION_SMOOTHING = 0.3;
|
|
24
|
+
exports.VISEME_SMOOTHING = 0.5;
|
|
25
|
+
//# sourceMappingURL=constants.js.map
|
package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/constants.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../../src/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/constants.ts"],"names":[],"mappings":";;;AAAA,iCAAuC;AAG1B,QAAA,eAAe,GAAG,IAAI,eAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACxC,QAAA,eAAe,GAAG,IAAI,aAAK,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACzC,QAAA,sBAAsB,GAAG,IAAI,eAAO,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAElD,QAAA,cAAc,GAAG;IAC5B,IAAI,EAAE,gFAAgF;IACtF,MAAM,EACJ,gFAAgF;CACnF,CAAC;AAEW,QAAA,YAAY,GAAG;IAC1B,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,IAAI;IACjB,aAAa,EAAE,GAAG;CACnB,CAAC;AAEW,QAAA,cAAc,GAAoB;IAC7C,cAAc,EAAE,GAAG;IACnB,eAAe,EAAE,GAAG;IACpB,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,GAAG;CACf,CAAC;AAEW,QAAA,iBAAiB,GAAG,GAAG,CAAC;AACxB,QAAA,gBAAgB,GAAG,GAAG,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { FullbodyAvatarProps } from './types';
|
|
2
|
+
export default function FullbodyAvatar({ url, sex, currentBaseAction, timeScale, isZoomed, eyeBlink, updateCurrentViseme, setMorphTargetDictionary, setMorphTargetInfluences, emotionMorphTargets, }: FullbodyAvatarProps): JSX.Element;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const three_1 = require("three");
|
|
6
|
+
const drei_1 = require("@react-three/drei");
|
|
7
|
+
const fiber_1 = require("@react-three/fiber");
|
|
8
|
+
const types_1 = require("./types");
|
|
9
|
+
const AnimationController_1 = require("./AnimationController");
|
|
10
|
+
const MorhTargetController_1 = require("./MorhTargetController");
|
|
11
|
+
const constants_1 = require("./constants");
|
|
12
|
+
function FullbodyAvatar({ url, sex, currentBaseAction, timeScale, isZoomed, eyeBlink, updateCurrentViseme, setMorphTargetDictionary, setMorphTargetInfluences, emotionMorphTargets, }) {
|
|
13
|
+
const { scene } = (0, drei_1.useGLTF)(url);
|
|
14
|
+
const { animations } = (0, drei_1.useGLTF)(constants_1.ANIMATION_URLS[sex]);
|
|
15
|
+
const { actions } = (0, drei_1.useAnimations)(animations, scene);
|
|
16
|
+
const animationControllerRef = (0, react_1.useRef)();
|
|
17
|
+
const morphTargetControllerRef = (0, react_1.useRef)();
|
|
18
|
+
const blinkStateRef = (0, react_1.useRef)({
|
|
19
|
+
isBlinking: false,
|
|
20
|
+
lastBlinkTime: 0,
|
|
21
|
+
nextBlinkTime: 0,
|
|
22
|
+
blinkStartTime: 0,
|
|
23
|
+
});
|
|
24
|
+
const headMesh = (0, react_1.useMemo)(() => {
|
|
25
|
+
let foundMesh;
|
|
26
|
+
scene.traverse((object) => {
|
|
27
|
+
if (object instanceof three_1.SkinnedMesh &&
|
|
28
|
+
(object.name === 'GBNL__Head' || object.name === 'Wolf3D_Avatar')) {
|
|
29
|
+
foundMesh = object;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
return foundMesh;
|
|
33
|
+
}, [scene]);
|
|
34
|
+
(0, react_1.useEffect)(() => {
|
|
35
|
+
if (!actions || !headMesh)
|
|
36
|
+
return;
|
|
37
|
+
const mixer = new three_1.AnimationMixer(scene);
|
|
38
|
+
animationControllerRef.current = new AnimationController_1.AnimationController(mixer, actions, { ...constants_1.DEFAULT_CONFIG });
|
|
39
|
+
morphTargetControllerRef.current = new MorhTargetController_1.MorphTargetController(headMesh);
|
|
40
|
+
if (headMesh.morphTargetDictionary && headMesh.morphTargetInfluences) {
|
|
41
|
+
setMorphTargetDictionary(headMesh.morphTargetDictionary);
|
|
42
|
+
const initialInfluences = Object.keys(headMesh.morphTargetDictionary).reduce((acc, key) => ({ ...acc, [key]: 0 }), {});
|
|
43
|
+
setMorphTargetInfluences(initialInfluences);
|
|
44
|
+
}
|
|
45
|
+
}, [
|
|
46
|
+
actions,
|
|
47
|
+
headMesh,
|
|
48
|
+
scene,
|
|
49
|
+
setMorphTargetDictionary,
|
|
50
|
+
setMorphTargetInfluences,
|
|
51
|
+
timeScale,
|
|
52
|
+
]);
|
|
53
|
+
(0, react_1.useEffect)(() => {
|
|
54
|
+
if (!animationControllerRef.current)
|
|
55
|
+
return;
|
|
56
|
+
if (currentBaseAction.action.startsWith('Loading')) {
|
|
57
|
+
animationControllerRef.current.transitionTo(types_1.AnimationState.LOADING, currentBaseAction.action);
|
|
58
|
+
}
|
|
59
|
+
else if (currentBaseAction.action.startsWith('Idle')) {
|
|
60
|
+
animationControllerRef.current.transitionTo(types_1.AnimationState.IDLE);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
animationControllerRef.current.updateIsChatAlreadyStarted(true);
|
|
64
|
+
animationControllerRef.current.transitionTo(types_1.AnimationState.EMOTION, currentBaseAction.action);
|
|
65
|
+
}
|
|
66
|
+
}, [currentBaseAction]);
|
|
67
|
+
(0, react_1.useEffect)(() => {
|
|
68
|
+
var _a;
|
|
69
|
+
(_a = animationControllerRef.current) === null || _a === void 0 ? void 0 : _a.setTimeScale(timeScale);
|
|
70
|
+
}, [timeScale]);
|
|
71
|
+
(0, fiber_1.useFrame)(state => {
|
|
72
|
+
var _a;
|
|
73
|
+
const currentTime = state.clock.elapsedTime * 1000;
|
|
74
|
+
(_a = animationControllerRef.current) === null || _a === void 0 ? void 0 : _a.update(state.clock.getDelta());
|
|
75
|
+
if (morphTargetControllerRef.current) {
|
|
76
|
+
const currentViseme = updateCurrentViseme(currentTime / 1000);
|
|
77
|
+
morphTargetControllerRef.current.updateMorphTargets(currentTime, emotionMorphTargets, currentViseme, eyeBlink || false, blinkStateRef.current);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
return ((0, jsx_runtime_1.jsx)("group", { position: isZoomed ? constants_1.AVATAR_POSITION_ZOOMED : constants_1.AVATAR_POSITION, rotation: constants_1.AVATAR_ROTATION, children: (0, jsx_runtime_1.jsx)("primitive", { object: scene }) }));
|
|
81
|
+
}
|
|
82
|
+
exports.default = FullbodyAvatar;
|
|
83
|
+
//# sourceMappingURL=fullbodyAvatar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fullbodyAvatar.js","sourceRoot":"","sources":["../../../../../../../src/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.tsx"],"names":[],"mappings":"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"}
|
package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/types.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export declare enum AnimationState {
|
|
2
|
+
LOADING = "LOADING",
|
|
3
|
+
EMOTION = "EMOTION",
|
|
4
|
+
IDLE = "IDLE"
|
|
5
|
+
}
|
|
6
|
+
export interface AnimationConfig {
|
|
7
|
+
fadeInDuration: number;
|
|
8
|
+
fadeOutDuration: number;
|
|
9
|
+
idleCount: number;
|
|
10
|
+
timeScale: number;
|
|
11
|
+
}
|
|
12
|
+
export interface FullbodyAvatarProps {
|
|
13
|
+
url: string;
|
|
14
|
+
sex: 'MALE' | 'FEMALE';
|
|
15
|
+
onLoaded?: () => void;
|
|
16
|
+
currentBaseAction: {
|
|
17
|
+
action: string;
|
|
18
|
+
weight: number;
|
|
19
|
+
};
|
|
20
|
+
timeScale: number;
|
|
21
|
+
isZoomed?: boolean;
|
|
22
|
+
eyeBlink?: boolean;
|
|
23
|
+
stopProcessing: () => void;
|
|
24
|
+
resetVisemeQueue: () => void;
|
|
25
|
+
updateCurrentViseme: (currentTime: number) => {
|
|
26
|
+
name: string;
|
|
27
|
+
weight: number;
|
|
28
|
+
} | null;
|
|
29
|
+
smoothMorphTarget?: boolean;
|
|
30
|
+
morphTargetSmoothing?: number;
|
|
31
|
+
morphTargetInfluences: Record<string, number>;
|
|
32
|
+
setMorphTargetDictionary: (morphTargetDictionary: Record<string, number>) => void;
|
|
33
|
+
setMorphTargetInfluences: (morphTargetInfluences: Record<string, number>) => void;
|
|
34
|
+
emotionMorphTargets: Record<string, number>;
|
|
35
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AnimationState = void 0;
|
|
4
|
+
var AnimationState;
|
|
5
|
+
(function (AnimationState) {
|
|
6
|
+
AnimationState["LOADING"] = "LOADING";
|
|
7
|
+
AnimationState["EMOTION"] = "EMOTION";
|
|
8
|
+
AnimationState["IDLE"] = "IDLE";
|
|
9
|
+
})(AnimationState = exports.AnimationState || (exports.AnimationState = {}));
|
|
10
|
+
//# sourceMappingURL=types.js.map
|
package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/types.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../src/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/types.ts"],"names":[],"mappings":";;;AAAA,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,qCAAmB,CAAA;IACnB,qCAAmB,CAAA;IACnB,+BAAa,CAAA;AACf,CAAC,EAJW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAIzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/Avatar/AvatarView/index.tsx"],"names":[],"mappings":";;;;AACA,iCAAwC;AACxC,8CAA4C;AAC5C,4CAA0E;AAC1E,kDAA0D;AAC1D,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/Avatar/AvatarView/index.tsx"],"names":[],"mappings":";;;;AACA,iCAAwC;AACxC,8CAA4C;AAC5C,4CAA0E;AAC1E,kDAA0D;AAC1D,uEAA+D;AAC/D,yFAAyD;AA0BzD,MAAM,aAAa,GAAG;IACpB,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,OAAO;QAClB,eAAe,EAAE,OAAO;QACxB,YAAY,EAAE,MAAM;KACrB;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,OAAO;QACf,eAAe,EAAE,OAAO;KACzB;CACF,CAAC;AAGF,MAAM,iBAAiB,GAAG,CAAC,QAAiB,EAAE,QAAkB,EAAE,EAAE,CAClE,QAAQ;IACN,CAAC,CAAC;QACE,GAAG,EAAE,EAAE;QACP,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;KACtB;IACH,CAAC,CAAC,CAAC,QAAQ,IAAI,QAAQ;QACvB,CAAC,CAAC;YAEE,GAAG,EAAE,EAAE;YACP,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;SACvB;QACH,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC;AAE/C,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAChC,IAAA,iBAAS,GAAE,IAAI,IAAA,aAAK,GAAE,CAAC,CAAC,CAAC,CACvB,uBAAC,gBAAS,IACR,QAAQ,EAAE,GAAG,EACb,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,EAC3B,KAAK,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAClB,WAAW,EAAE,CAAC,EACd,UAAU,EAAE,CAAC,GACb,CACH,CAAC,CAAC,CAAC,CACF,uBAAC,kBAAW,IAAC,KAAK,EAAC,+GAA+G,GAAG,CACtI,CAAC;AAEJ,SAAwB,mBAAmB,CAAC,EAC1C,GAAG,EACH,GAAG,EACH,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,QAAQ,GAAG,IAAI,EACf,OAAO,EACP,SAAS,EACT,YAAY,GAAG,KAAK,EACpB,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,mBAAmB,GACb;IACN,OAAO,CACL,uBAAC,cAAM,IACL,KAAK,EACH,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,EAEvE,MAAM,EAAE,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAQ,YAEpD,wBAAC,gBAAQ,IAAC,QAAQ,EAAE,QAAQ,IAAI,uBAAC,gBAAM,IAAC,WAAW,EAAE,WAAW,GAAI,aACjE,oBAAoB,EAAE,EACtB,YAAY,IAAI,uBAAC,oBAAa,IAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,GAAI,EACvE,uBAAC,4BAAU,IACT,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,OAAO,IAAI,KAAK,EACzB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,IAAI,KAAK,EAC3B,QAAQ,EAAE,QAAQ,IAAI,KAAK,EAC3B,YAAY,EAAE,YAAY,IAAI,KAAK,EACnC,QAAQ,EAAE,QAAQ,IAAI,KAAK,EAC3B,QAAQ,EAAE,QAAQ,IAAI,KAAK,EAC3B,YAAY,EAAE,YAAY,EAC1B,mBAAmB,EAAE,mBAAmB,EACxC,cAAc,EAAE,cAAc,EAC9B,gBAAgB,EAAE,gBAAgB,GAClC,IACO,GACJ,CACV,CAAC;AACJ,CAAC;AAjDD,sCAiDC"}
|
|
@@ -16,7 +16,7 @@ interface VisemeContextType {
|
|
|
16
16
|
isProcessing: boolean;
|
|
17
17
|
setAudioContext: (ctx: IAudioContext) => void;
|
|
18
18
|
}
|
|
19
|
-
export declare const DEFAULT_VISEME_DURATION: 0.1, VISEME_OVERLAP: 0.
|
|
19
|
+
export declare const DEFAULT_VISEME_DURATION: 0.1, VISEME_OVERLAP: 0.02, SMOOTHING_FACTOR: 0.4, LOG_INTERVAL: 60, PRELOAD: 0.5, WEIGHT_MULTIPLIER: 0.8;
|
|
20
20
|
export declare const VisemeProvider: React.FC<{
|
|
21
21
|
children: React.ReactNode;
|
|
22
22
|
}>;
|