@memori.ai/memori-react 7.7.1 → 7.8.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/components/Avatar/Avatar.js +2 -2
  3. package/dist/components/Avatar/Avatar.js.map +1 -1
  4. package/dist/components/Avatar/AvatarView/AvatarComponent/avatarComponent.d.ts +6 -3
  5. package/dist/components/Avatar/AvatarView/AvatarComponent/avatarComponent.js +10 -6
  6. package/dist/components/Avatar/AvatarView/AvatarComponent/avatarComponent.js.map +1 -1
  7. package/dist/components/Avatar/AvatarView/AvatarComponent/components/fullbodyAvatar.d.ts +13 -17
  8. package/dist/components/Avatar/AvatarView/AvatarComponent/components/fullbodyAvatar.js +110 -111
  9. package/dist/components/Avatar/AvatarView/AvatarComponent/components/fullbodyAvatar.js.map +1 -1
  10. package/dist/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.d.ts +3 -4
  11. package/dist/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.js +77 -52
  12. package/dist/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.js.map +1 -1
  13. package/dist/components/Avatar/AvatarView/index.d.ts +7 -3
  14. package/dist/components/Avatar/AvatarView/index.js +2 -2
  15. package/dist/components/Avatar/AvatarView/index.js.map +1 -1
  16. package/dist/components/MemoriWidget/MemoriWidget.js +34 -22
  17. package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
  18. package/dist/components/layouts/ZoomedFullBody.js +1 -8
  19. package/dist/components/layouts/ZoomedFullBody.js.map +1 -1
  20. package/dist/components/layouts/zoomed-full-body.css +5 -1
  21. package/dist/context/visemeContext.d.ts +9 -15
  22. package/dist/context/visemeContext.js +73 -190
  23. package/dist/context/visemeContext.js.map +1 -1
  24. package/esm/components/Avatar/Avatar.js +2 -2
  25. package/esm/components/Avatar/Avatar.js.map +1 -1
  26. package/esm/components/Avatar/AvatarView/AvatarComponent/avatarComponent.d.ts +6 -3
  27. package/esm/components/Avatar/AvatarView/AvatarComponent/avatarComponent.js +10 -6
  28. package/esm/components/Avatar/AvatarView/AvatarComponent/avatarComponent.js.map +1 -1
  29. package/esm/components/Avatar/AvatarView/AvatarComponent/components/fullbodyAvatar.d.ts +13 -17
  30. package/esm/components/Avatar/AvatarView/AvatarComponent/components/fullbodyAvatar.js +112 -113
  31. package/esm/components/Avatar/AvatarView/AvatarComponent/components/fullbodyAvatar.js.map +1 -1
  32. package/esm/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.d.ts +3 -4
  33. package/esm/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.js +81 -55
  34. package/esm/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.js.map +1 -1
  35. package/esm/components/Avatar/AvatarView/index.d.ts +7 -3
  36. package/esm/components/Avatar/AvatarView/index.js +2 -2
  37. package/esm/components/Avatar/AvatarView/index.js.map +1 -1
  38. package/esm/components/MemoriWidget/MemoriWidget.js +34 -22
  39. package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
  40. package/esm/components/layouts/ZoomedFullBody.js +1 -8
  41. package/esm/components/layouts/ZoomedFullBody.js.map +1 -1
  42. package/esm/components/layouts/zoomed-full-body.css +5 -1
  43. package/esm/context/visemeContext.d.ts +9 -15
  44. package/esm/context/visemeContext.js +74 -191
  45. package/esm/context/visemeContext.js.map +1 -1
  46. package/package.json +1 -1
  47. package/src/components/Avatar/Avatar.tsx +5 -5
  48. package/src/components/Avatar/AvatarView/AvatarComponent/avatarComponent.tsx +33 -19
  49. package/src/components/Avatar/AvatarView/AvatarComponent/components/fullbodyAvatar.tsx +181 -158
  50. package/src/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.tsx +116 -71
  51. package/src/components/Avatar/AvatarView/AvatarView.stories.tsx +12 -24
  52. package/src/components/Avatar/AvatarView/index.tsx +9 -8
  53. package/src/components/MemoriWidget/MemoriWidget.tsx +45 -38
  54. package/src/components/layouts/ZoomedFullBody.tsx +6 -11
  55. package/src/components/layouts/zoomed-full-body.css +5 -1
  56. package/src/context/visemeContext.tsx +130 -283
  57. package/dist/components/AttachmentMediaModal/AttachmentMediaModal.d.ts +0 -14
  58. package/dist/components/AttachmentMediaModal/AttachmentMediaModal.js +0 -66
  59. package/dist/components/AttachmentMediaModal/AttachmentMediaModal.js.map +0 -1
  60. package/dist/components/Avatar/AvatarView/components/controls.d.ts +0 -23
  61. package/dist/components/Avatar/AvatarView/components/controls.js +0 -55
  62. package/dist/components/Avatar/AvatarView/components/controls.js.map +0 -1
  63. package/dist/components/Avatar/AvatarView/components/fullbodyAvatar.d.ts +0 -19
  64. package/dist/components/Avatar/AvatarView/components/fullbodyAvatar.js +0 -61
  65. package/dist/components/Avatar/AvatarView/components/fullbodyAvatar.js.map +0 -1
  66. package/dist/components/Avatar/AvatarView/components/halfbodyAvatar.d.ts +0 -9
  67. package/dist/components/Avatar/AvatarView/components/halfbodyAvatar.js +0 -39
  68. package/dist/components/Avatar/AvatarView/components/halfbodyAvatar.js.map +0 -1
  69. package/dist/components/Avatar/AvatarView/components/loader.d.ts +0 -5
  70. package/dist/components/Avatar/AvatarView/components/loader.js +0 -12
  71. package/dist/components/Avatar/AvatarView/components/loader.js.map +0 -1
  72. package/dist/components/Avatar/AvatarView/utils/useMouthSpeaking.d.ts +0 -2
  73. package/dist/components/Avatar/AvatarView/utils/useMouthSpeaking.js +0 -68
  74. package/dist/components/Avatar/AvatarView/utils/useMouthSpeaking.js.map +0 -1
  75. package/dist/components/AvatarView/components/avatar.d.ts +0 -9
  76. package/dist/components/AvatarView/components/avatar.js +0 -35
  77. package/dist/components/AvatarView/components/avatar.js.map +0 -1
  78. package/dist/components/AvatarView/components/fullbodyAvatar.d.ts +0 -10
  79. package/dist/components/AvatarView/components/fullbodyAvatar.js +0 -62
  80. package/dist/components/AvatarView/components/fullbodyAvatar.js.map +0 -1
  81. package/dist/components/AvatarView/components/loader.d.ts +0 -5
  82. package/dist/components/AvatarView/components/loader.js +0 -12
  83. package/dist/components/AvatarView/components/loader.js.map +0 -1
  84. package/dist/components/AvatarView/index.d.ts +0 -17
  85. package/dist/components/AvatarView/index.js +0 -35
  86. package/dist/components/AvatarView/index.js.map +0 -1
  87. package/dist/components/AvatarView/utils/useEyeBlink.d.ts +0 -2
  88. package/dist/components/AvatarView/utils/useEyeBlink.js +0 -40
  89. package/dist/components/AvatarView/utils/useEyeBlink.js.map +0 -1
  90. package/dist/components/AvatarView/utils/useHeadMovement.d.ts +0 -2
  91. package/dist/components/AvatarView/utils/useHeadMovement.js +0 -53
  92. package/dist/components/AvatarView/utils/useHeadMovement.js.map +0 -1
  93. package/dist/components/AvatarView/utils/useLoadingMorphAnim.d.ts +0 -2
  94. package/dist/components/AvatarView/utils/useLoadingMorphAnim.js +0 -34
  95. package/dist/components/AvatarView/utils/useLoadingMorphAnim.js.map +0 -1
  96. package/dist/components/AvatarView/utils/useMouthSpeaking.d.ts +0 -2
  97. package/dist/components/AvatarView/utils/useMouthSpeaking.js +0 -60
  98. package/dist/components/AvatarView/utils/useMouthSpeaking.js.map +0 -1
  99. package/dist/components/AvatarView/utils/useSmile.d.ts +0 -2
  100. package/dist/components/AvatarView/utils/useSmile.js +0 -30
  101. package/dist/components/AvatarView/utils/useSmile.js.map +0 -1
  102. package/dist/components/AvatarView/utils/utils.d.ts +0 -13
  103. package/dist/components/AvatarView/utils/utils.js +0 -42
  104. package/dist/components/AvatarView/utils/utils.js.map +0 -1
  105. package/dist/components/ImageUpload/ImageUpload.css +0 -168
  106. package/dist/components/ImageUpload/ImageUpload.d.ts +0 -28
  107. package/dist/components/ImageUpload/ImageUpload.js +0 -163
  108. package/dist/components/ImageUpload/ImageUpload.js.map +0 -1
  109. package/dist/components/layouts/Default.d.ts +0 -17
  110. package/dist/components/layouts/Default.js +0 -8
  111. package/dist/components/layouts/Default.js.map +0 -1
  112. package/dist/components/ui/Message.d.ts +0 -17
  113. package/dist/components/ui/Message.js +0 -13
  114. package/dist/components/ui/Message.js.map +0 -1
  115. package/esm/components/AttachmentMediaModal/AttachmentMediaModal.d.ts +0 -14
  116. package/esm/components/AttachmentMediaModal/AttachmentMediaModal.js +0 -63
  117. package/esm/components/AttachmentMediaModal/AttachmentMediaModal.js.map +0 -1
  118. package/esm/components/Avatar/AvatarView/components/controls.d.ts +0 -23
  119. package/esm/components/Avatar/AvatarView/components/controls.js +0 -52
  120. package/esm/components/Avatar/AvatarView/components/controls.js.map +0 -1
  121. package/esm/components/Avatar/AvatarView/components/fullbodyAvatar.d.ts +0 -19
  122. package/esm/components/Avatar/AvatarView/components/fullbodyAvatar.js +0 -57
  123. package/esm/components/Avatar/AvatarView/components/fullbodyAvatar.js.map +0 -1
  124. package/esm/components/Avatar/AvatarView/components/halfbodyAvatar.d.ts +0 -9
  125. package/esm/components/Avatar/AvatarView/components/halfbodyAvatar.js +0 -35
  126. package/esm/components/Avatar/AvatarView/components/halfbodyAvatar.js.map +0 -1
  127. package/esm/components/Avatar/AvatarView/components/loader.d.ts +0 -5
  128. package/esm/components/Avatar/AvatarView/components/loader.js +0 -9
  129. package/esm/components/Avatar/AvatarView/components/loader.js.map +0 -1
  130. package/esm/components/Avatar/AvatarView/utils/useMouthSpeaking.d.ts +0 -2
  131. package/esm/components/Avatar/AvatarView/utils/useMouthSpeaking.js +0 -65
  132. package/esm/components/Avatar/AvatarView/utils/useMouthSpeaking.js.map +0 -1
  133. package/esm/components/AvatarView/components/avatar.d.ts +0 -9
  134. package/esm/components/AvatarView/components/avatar.js +0 -31
  135. package/esm/components/AvatarView/components/avatar.js.map +0 -1
  136. package/esm/components/AvatarView/components/fullbodyAvatar.d.ts +0 -10
  137. package/esm/components/AvatarView/components/fullbodyAvatar.js +0 -58
  138. package/esm/components/AvatarView/components/fullbodyAvatar.js.map +0 -1
  139. package/esm/components/AvatarView/components/loader.d.ts +0 -5
  140. package/esm/components/AvatarView/components/loader.js +0 -9
  141. package/esm/components/AvatarView/components/loader.js.map +0 -1
  142. package/esm/components/AvatarView/index.d.ts +0 -17
  143. package/esm/components/AvatarView/index.js +0 -31
  144. package/esm/components/AvatarView/index.js.map +0 -1
  145. package/esm/components/AvatarView/utils/useEyeBlink.d.ts +0 -2
  146. package/esm/components/AvatarView/utils/useEyeBlink.js +0 -37
  147. package/esm/components/AvatarView/utils/useEyeBlink.js.map +0 -1
  148. package/esm/components/AvatarView/utils/useHeadMovement.d.ts +0 -2
  149. package/esm/components/AvatarView/utils/useHeadMovement.js +0 -50
  150. package/esm/components/AvatarView/utils/useHeadMovement.js.map +0 -1
  151. package/esm/components/AvatarView/utils/useLoadingMorphAnim.d.ts +0 -2
  152. package/esm/components/AvatarView/utils/useLoadingMorphAnim.js +0 -31
  153. package/esm/components/AvatarView/utils/useLoadingMorphAnim.js.map +0 -1
  154. package/esm/components/AvatarView/utils/useMouthSpeaking.d.ts +0 -2
  155. package/esm/components/AvatarView/utils/useMouthSpeaking.js +0 -57
  156. package/esm/components/AvatarView/utils/useMouthSpeaking.js.map +0 -1
  157. package/esm/components/AvatarView/utils/useSmile.d.ts +0 -2
  158. package/esm/components/AvatarView/utils/useSmile.js +0 -27
  159. package/esm/components/AvatarView/utils/useSmile.js.map +0 -1
  160. package/esm/components/AvatarView/utils/utils.d.ts +0 -13
  161. package/esm/components/AvatarView/utils/utils.js +0 -33
  162. package/esm/components/AvatarView/utils/utils.js.map +0 -1
  163. package/esm/components/ImageUpload/ImageUpload.css +0 -168
  164. package/esm/components/ImageUpload/ImageUpload.d.ts +0 -28
  165. package/esm/components/ImageUpload/ImageUpload.js +0 -160
  166. package/esm/components/ImageUpload/ImageUpload.js.map +0 -1
  167. package/esm/components/layouts/Default.d.ts +0 -17
  168. package/esm/components/layouts/Default.js +0 -5
  169. package/esm/components/layouts/Default.js.map +0 -1
  170. package/esm/components/ui/Message.d.ts +0 -17
  171. package/esm/components/ui/Message.js +0 -10
  172. package/esm/components/ui/Message.js.map +0 -1
@@ -1,13 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { createContext, useContext, useState, useCallback, useRef, useEffect, } from 'react';
3
- import { MathUtils } from 'three';
2
+ import { createContext, useContext, useRef, useCallback, useState, } from 'react';
4
3
  const VisemeContext = createContext(undefined);
5
- const VISEME_SMOOTHING = 0.3;
6
- const DEFAULT_VISEME_DURATION = 0.1;
7
- const MINIMUM_ELAPSED_TIME = 0.01;
8
- const VISEME_SPEED_FACTOR = 1;
9
- const AUDIO_PLAYBACK_RATE = 1;
10
- const VISEME_BASE_SPEED = 1;
11
4
  const VISEME_MAP = {
12
5
  0: 'viseme_sil',
13
6
  1: 'viseme_PP',
@@ -32,208 +25,98 @@ const VISEME_MAP = {
32
25
  20: 'viseme_kk',
33
26
  21: 'viseme_PP',
34
27
  };
28
+ const DEFAULT_VISEME_DURATION = 0.04;
29
+ const VISEME_OVERLAP = 0.15;
30
+ const SMOOTHING_FACTOR = 0.35;
31
+ const TIME_OFFSET = -0.04;
32
+ const PRELOAD_TIME = 1;
35
33
  export const VisemeProvider = ({ children, }) => {
36
- const [isMeshSet, setIsMeshSet] = useState(false);
37
- const [emotion, setEmotion] = useState('Neutral');
38
- const isAnimatingRef = useRef(false);
39
- const currentVisemesRef = useRef([]);
40
34
  const visemeQueueRef = useRef([]);
41
- const animationFrameRef = useRef(null);
42
35
  const startTimeRef = useRef(null);
43
- const currentVisemeWeightRef = useRef({});
44
- const meshRef = useRef(null);
45
- const lerp = (start, end, alpha) => {
46
- return start * (1 - alpha) + end * alpha;
47
- };
48
- const easeInOutQuad = (x) => {
49
- return x < 0.5 ? 2 * x * x : 1 - Math.pow(-2 * x + 2, 2) / 2;
50
- };
51
- const setMeshRef = useCallback((mesh) => {
52
- if (mesh && mesh.morphTargetDictionary && mesh.morphTargetInfluences) {
53
- meshRef.current = mesh;
54
- setIsMeshSet(true);
55
- }
56
- else {
57
- console.error('Invalid mesh provided:', mesh);
36
+ const [isProcessing, setIsProcessing] = useState(false);
37
+ const lastVisemeRef = useRef(null);
38
+ const addViseme = useCallback((visemeId, audioOffset) => {
39
+ const visemeName = VISEME_MAP[visemeId] || 'viseme_sil';
40
+ const startTime = audioOffset / 10000000 + TIME_OFFSET;
41
+ const endTime = startTime + DEFAULT_VISEME_DURATION;
42
+ const newViseme = {
43
+ name: visemeName,
44
+ weight: 0,
45
+ startTime,
46
+ endTime,
47
+ };
48
+ visemeQueueRef.current.push(newViseme);
49
+ if (!isProcessing) {
50
+ startProcessing();
58
51
  }
59
- }, [meshRef]);
60
- const addVisemeToQueue = useCallback((viseme) => {
61
- visemeQueueRef.current.push(viseme);
62
- }, []);
63
- const getCurrentViseme = useCallback((elapsedTime) => {
64
- if (elapsedTime < MINIMUM_ELAPSED_TIME)
52
+ }, [isProcessing]);
53
+ const updateCurrentViseme = useCallback((currentTime) => {
54
+ if (!isProcessing || startTimeRef.current === null) {
55
+ console.log('StartTimeRef not set');
65
56
  return null;
66
- return currentVisemesRef.current.find((viseme, index) => {
67
- const nextViseme = currentVisemesRef.current[index + 1];
68
- return (elapsedTime >= viseme.startTime &&
69
- (!nextViseme || elapsedTime < nextViseme.startTime));
70
- });
71
- }, []);
72
- const getDynamicSpeedFactor = (visemeDuration) => {
73
- const baseDuration = 0.1;
74
- return (VISEME_BASE_SPEED * (baseDuration / visemeDuration) * AUDIO_PLAYBACK_RATE);
75
- };
76
- const applyViseme = useCallback((viseme, elapsedTime) => {
77
- var _a;
78
- if (!meshRef.current) {
79
- console.error('Mesh not set');
80
- return;
81
57
  }
82
- const visemeProgress = Math.min((elapsedTime - viseme.startTime) / viseme.duration, 1);
83
- const dynamicSpeedFactor = getDynamicSpeedFactor(viseme.duration);
84
- const adjustedProgress = visemeProgress * dynamicSpeedFactor;
85
- const easedProgress = easeInOutQuad(adjustedProgress);
86
- const targetWeight = Math.sin(easedProgress * Math.PI) * viseme.weight;
87
- currentVisemeWeightRef.current[viseme.name] = MathUtils.lerp(currentVisemeWeightRef.current[viseme.name] || 0, targetWeight, VISEME_SMOOTHING);
88
- const visemeIndex = (_a = meshRef.current.morphTargetDictionary) === null || _a === void 0 ? void 0 : _a[viseme.name];
89
- if (typeof visemeIndex === 'number' &&
90
- meshRef.current.morphTargetInfluences) {
91
- meshRef.current.morphTargetInfluences[visemeIndex] =
92
- currentVisemeWeightRef.current[viseme.name];
93
- }
94
- else {
95
- console.error(`Viseme not found in morph target dictionary: ${viseme.name}`);
96
- }
97
- Object.keys(currentVisemeWeightRef.current).forEach((visemeName) => {
98
- var _a;
99
- if (visemeName !== viseme.name) {
100
- currentVisemeWeightRef.current[visemeName] = lerp(currentVisemeWeightRef.current[visemeName], 0, VISEME_SMOOTHING * 0.5);
101
- const index = (_a = meshRef.current.morphTargetDictionary) === null || _a === void 0 ? void 0 : _a[visemeName];
102
- if (typeof index === 'number' && meshRef.current.morphTargetInfluences) {
103
- meshRef.current.morphTargetInfluences[index] = currentVisemeWeightRef.current[visemeName];
104
- }
105
- }
106
- });
107
- }, []);
108
- const animate = useCallback((time) => {
109
- if (startTimeRef.current === null) {
110
- startTimeRef.current = time;
111
- }
112
- const elapsedTime = ((time - startTimeRef.current) / 1000) * VISEME_SPEED_FACTOR;
113
- const currentViseme = getCurrentViseme(elapsedTime);
58
+ const elapsedTime = currentTime - startTimeRef.current + PRELOAD_TIME;
59
+ visemeQueueRef.current = visemeQueueRef.current.filter(v => v.endTime > elapsedTime);
60
+ const currentViseme = visemeQueueRef.current.find(v => v.startTime <= elapsedTime && v.endTime > elapsedTime - VISEME_OVERLAP);
114
61
  if (currentViseme) {
115
- applyViseme(currentViseme, elapsedTime);
116
- }
117
- if (currentVisemesRef.current.length > 0 &&
118
- elapsedTime <
119
- currentVisemesRef.current[currentVisemesRef.current.length - 1]
120
- .startTime +
121
- currentVisemesRef.current[currentVisemesRef.current.length - 1]
122
- .duration) {
123
- animationFrameRef.current = requestAnimationFrame(animate);
124
- }
125
- else {
126
- clearVisemes();
62
+ console.log('CurrentViseme Found!');
63
+ const visemeProgress = (elapsedTime - currentViseme.startTime) /
64
+ (currentViseme.endTime - currentViseme.startTime);
65
+ const targetWeight = Math.sin(Math.PI * Math.min(visemeProgress, 1));
66
+ const smoothedWeight = lastVisemeRef.current
67
+ ? lastVisemeRef.current.weight +
68
+ (targetWeight - lastVisemeRef.current.weight) * SMOOTHING_FACTOR
69
+ : targetWeight;
70
+ const updatedViseme = { ...currentViseme, weight: smoothedWeight };
71
+ lastVisemeRef.current = updatedViseme;
72
+ return updatedViseme;
127
73
  }
128
- }, [getCurrentViseme, applyViseme]);
129
- const processVisemeQueue = useCallback(() => {
130
- const azureVisemes = [...visemeQueueRef.current];
131
- visemeQueueRef.current = [];
132
- if (azureVisemes.length === 0) {
133
- return [];
134
- }
135
- const processedVisemes = azureVisemes.map((currentViseme, i) => {
136
- const nextViseme = azureVisemes[i + 1];
137
- const duration = nextViseme
138
- ? (nextViseme.audioOffset - currentViseme.audioOffset) / 10000000
139
- : DEFAULT_VISEME_DURATION;
140
- const processedViseme = {
141
- name: VISEME_MAP[currentViseme.visemeId] || 'viseme_sil',
142
- duration,
143
- weight: 1,
144
- startTime: currentViseme.audioOffset / 10000000,
145
- };
146
- return processedViseme;
147
- });
148
- const interpolatedVisemes = [];
149
- for (let i = 0; i < processedVisemes.length - 1; i++) {
150
- const currentViseme = processedVisemes[i];
151
- const nextViseme = processedVisemes[i + 1];
152
- interpolatedVisemes.push(currentViseme);
153
- const intermediateDuration = (nextViseme.startTime - currentViseme.startTime) * 0.5;
154
- interpolatedVisemes.push({
155
- name: 'viseme_sil',
156
- duration: intermediateDuration,
157
- weight: 0.5,
158
- startTime: currentViseme.startTime + intermediateDuration,
159
- });
160
- }
161
- interpolatedVisemes.push(processedVisemes[processedVisemes.length - 1]);
162
- currentVisemesRef.current = interpolatedVisemes;
163
- if (!isAnimatingRef.current) {
164
- isAnimatingRef.current = true;
165
- startTimeRef.current = performance.now();
166
- animationFrameRef.current = requestAnimationFrame(animate);
167
- }
168
- else {
169
- if (startTimeRef.current !== null) {
170
- const currentTime = performance.now();
171
- const elapsedTime = ((currentTime - startTimeRef.current) / 1000) * VISEME_SPEED_FACTOR;
172
- startTimeRef.current =
173
- currentTime - (elapsedTime / VISEME_SPEED_FACTOR) * 1000;
74
+ if (lastVisemeRef.current) {
75
+ const reducedWeight = lastVisemeRef.current.weight * (1 - SMOOTHING_FACTOR);
76
+ if (reducedWeight > 0.01) {
77
+ lastVisemeRef.current = {
78
+ ...lastVisemeRef.current,
79
+ weight: reducedWeight,
80
+ };
81
+ return lastVisemeRef.current;
174
82
  }
175
83
  }
176
- return interpolatedVisemes;
177
- }, [animate]);
178
- const clearVisemes = useCallback(() => {
179
- var _a, _b;
180
- currentVisemesRef.current = [];
181
- visemeQueueRef.current = [];
182
- if (animationFrameRef.current !== null) {
183
- cancelAnimationFrame(animationFrameRef.current);
184
- animationFrameRef.current = null;
185
- }
186
- if (((_a = meshRef.current) === null || _a === void 0 ? void 0 : _a.morphTargetDictionary) &&
187
- ((_b = meshRef.current) === null || _b === void 0 ? void 0 : _b.morphTargetInfluences)) {
188
- Object.values(meshRef.current.morphTargetDictionary).forEach(index => {
189
- if (typeof index === 'number') {
190
- meshRef.current.morphTargetInfluences[index] = 0;
191
- }
192
- });
193
- }
194
- currentVisemeWeightRef.current = {};
84
+ lastVisemeRef.current = null;
85
+ return null;
86
+ }, [isProcessing]);
87
+ const startProcessing = useCallback(() => {
88
+ startTimeRef.current = performance.now() / 1000;
89
+ setIsProcessing(true);
90
+ }, [isProcessing]);
91
+ const stopProcessing = useCallback(() => {
92
+ setIsProcessing(false);
195
93
  startTimeRef.current = null;
196
- isAnimatingRef.current = false;
94
+ lastVisemeRef.current = null;
197
95
  }, []);
198
- const emotionMap = {
199
- Gioia: { Gioria: 1 },
200
- Rabbia: { Rabbia: 1 },
201
- Sorpresa: { Sorpresa: 1 },
202
- Tristezza: { Tristezza: 1 },
203
- Timore: { Timore: 1 },
204
- };
205
- const emotionToAzureStyleMap = {
206
- Gioia: 'cheerful',
207
- Rabbia: 'angry',
208
- Sorpresa: 'excited',
209
- Tristezza: 'sad',
210
- Timore: 'terrified',
211
- };
212
- function getAzureStyleForEmotion(emotion) {
213
- return emotionToAzureStyleMap[emotion] || 'neutral';
214
- }
215
- useEffect(() => {
216
- return () => {
217
- if (animationFrameRef.current !== null) {
218
- cancelAnimationFrame(animationFrameRef.current);
219
- }
220
- };
96
+ const resetVisemeQueue = useCallback(() => {
97
+ visemeQueueRef.current = [];
98
+ lastVisemeRef.current = null;
221
99
  }, []);
100
+ const resetAndStartProcessing = useCallback(() => {
101
+ stopProcessing();
102
+ resetVisemeQueue();
103
+ startTimeRef.current = performance.now() / 1000;
104
+ setIsProcessing(true);
105
+ }, [stopProcessing, resetVisemeQueue]);
222
106
  const contextValue = {
223
- setMeshRef,
224
- addVisemeToQueue,
225
- processVisemeQueue,
226
- clearVisemes,
227
- isMeshSet,
228
- setEmotion,
229
- emotion,
230
- getAzureStyleForEmotion,
107
+ addViseme,
108
+ updateCurrentViseme,
109
+ startProcessing,
110
+ stopProcessing,
111
+ resetAndStartProcessing,
112
+ resetVisemeQueue,
113
+ isProcessing,
231
114
  };
232
115
  return (_jsx(VisemeContext.Provider, { value: contextValue, children: children }));
233
116
  };
234
117
  export const useViseme = () => {
235
118
  const context = useContext(VisemeContext);
236
- if (context === undefined) {
119
+ if (!context) {
237
120
  throw new Error('useViseme must be used within a VisemeProvider');
238
121
  }
239
122
  return context;
@@ -1 +1 @@
1
- {"version":3,"file":"visemeContext.js","sourceRoot":"","sources":["../../src/context/visemeContext.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"visemeContext.js","sourceRoot":"","sources":["../../src/context/visemeContext.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "7.7.1",
2
+ "version": "7.8.0-rc.0",
3
3
  "name": "@memori.ai/memori-react",
4
4
  "author": "Memori Srl",
5
5
  "main": "dist/index.js",
@@ -57,7 +57,7 @@ const Avatar: React.FC<Props> = ({
57
57
  const { t } = useTranslation();
58
58
  const [isClient, setIsClient] = useState(false);
59
59
 
60
- const { setMeshRef, clearVisemes, setEmotion } = useViseme();
60
+ const { stopProcessing, updateCurrentViseme, resetVisemeQueue } = useViseme();
61
61
 
62
62
  useEffect(() => {
63
63
  setIsClient(true);
@@ -132,6 +132,7 @@ const Avatar: React.FC<Props> = ({
132
132
  }
133
133
  >
134
134
  <ContainerAvatarView
135
+ updateCurrentViseme={updateCurrentViseme}
135
136
  url={integrationConfig.avatarURL}
136
137
  sex={memori.voiceType === 'FEMALE' ? 'FEMALE' : 'MALE'}
137
138
  fallbackImg={getAvatarUrl()}
@@ -142,11 +143,10 @@ const Avatar: React.FC<Props> = ({
142
143
  speaking={isPlayingAudio}
143
144
  loading={loading}
144
145
  style={getAvatarStyle()}
145
- clearVisemes={clearVisemes}
146
- setMeshRef={setMeshRef}
147
- isZoomed={isZoomed}
146
+ stopProcessing={stopProcessing}
147
+ resetVisemeQueue={resetVisemeQueue}
148
+ isZoomed={isZoomed}
148
149
  chatEmission={chatProps?.dialogState?.emission}
149
- setEmotion={setEmotion}
150
150
  />
151
151
  </ErrorBoundary>
152
152
  );
@@ -14,9 +14,9 @@ interface Props {
14
14
  speaking: boolean;
15
15
  isZoomed: boolean;
16
16
  chatEmission: any;
17
- setMeshRef: any;
18
- clearVisemes: () => void;
19
- setEmotion: (emotion: string) => void;
17
+ stopProcessing: () => void;
18
+ resetVisemeQueue: () => void;
19
+ updateCurrentViseme: (currentTime: number) => { name: string; weight: number } | null;
20
20
  }
21
21
 
22
22
  interface BaseAction {
@@ -50,9 +50,9 @@ const baseActions: Record<string, BaseAction> = {
50
50
  Loading3: { weight: 0 },
51
51
  };
52
52
 
53
+
53
54
  export const AvatarView: React.FC<Props & { halfBody: boolean }> = ({
54
- setMeshRef,
55
- clearVisemes,
55
+ stopProcessing,
56
56
  chatEmission,
57
57
  showControls,
58
58
  animation,
@@ -64,7 +64,8 @@ export const AvatarView: React.FC<Props & { halfBody: boolean }> = ({
64
64
  halfBody,
65
65
  loading,
66
66
  isZoomed,
67
- setEmotion,
67
+ updateCurrentViseme,
68
+ resetVisemeQueue,
68
69
  }) => {
69
70
  const [currentBaseAction, setCurrentBaseAction] = useState({
70
71
  action: animation || 'Idle1',
@@ -77,6 +78,9 @@ export const AvatarView: React.FC<Props & { halfBody: boolean }> = ({
77
78
  const [morphTargetDictionary, setMorphTargetDictionary] = useState<{
78
79
  [key: string]: number;
79
80
  }>({});
81
+ const [emotionMorphTargets, setEmotionMorphTargets] = useState<{
82
+ [key: string]: number;
83
+ }>({});
80
84
 
81
85
  const [timeScale, setTimeScale] = useState(0.8);
82
86
 
@@ -93,7 +97,7 @@ export const AvatarView: React.FC<Props & { halfBody: boolean }> = ({
93
97
 
94
98
  //remove the last character from the action
95
99
  const newEmotion = action.slice(0, -1);
96
- setEmotion(newEmotion);
100
+ // setEmotion(newEmotion);
97
101
 
98
102
  const defaultEmotions = Object.keys(emotionMap).reduce((acc, key) => {
99
103
  acc[key] = 0;
@@ -105,9 +109,8 @@ export const AvatarView: React.FC<Props & { halfBody: boolean }> = ({
105
109
  const emotionValues =
106
110
  emotion === 'default' ? defaultEmotions : emotionMap[emotion];
107
111
 
108
- setMorphTargetInfluences(prevInfluences => ({
109
- ...prevInfluences,
110
- ...defaultEmotions,
112
+ setEmotionMorphTargets(prevEmotions => ({
113
+ ...prevEmotions,
111
114
  ...emotionValues,
112
115
  }));
113
116
  }, []);
@@ -162,6 +165,11 @@ export const AvatarView: React.FC<Props & { halfBody: boolean }> = ({
162
165
  const emotion = `${outputContent}${randomNumber}`;
163
166
 
164
167
  onBaseActionChange(emotion);
168
+ } else {
169
+ //Set a random idle animation
170
+ const randomNumber = Math.floor(Math.random() * 5) + 1;
171
+ const animation = `Idle${randomNumber === 3 ? 4 : randomNumber}`;
172
+ onBaseActionChange(animation);
165
173
  }
166
174
  }, [chatEmission]);
167
175
 
@@ -174,6 +182,13 @@ export const AvatarView: React.FC<Props & { halfBody: boolean }> = ({
174
182
  }
175
183
  }, [loading]);
176
184
 
185
+ // useEffect(() => {
186
+ // if (speaking && currentBaseAction.action !== 'Idle1') {
187
+ // const animation = `Idle1`;
188
+ // onBaseActionChange(animation);
189
+ // }
190
+ // }, [speaking]);
191
+
177
192
  return (
178
193
  <>
179
194
  {showControls && (
@@ -191,30 +206,29 @@ export const AvatarView: React.FC<Props & { halfBody: boolean }> = ({
191
206
  {halfBody ? (
192
207
  <HalfBodyAvatar
193
208
  url={url}
194
- setMeshRef={setMeshRef}
195
- setMorphTargetInfluences={setMorphTargetInfluences}
196
209
  headMovement={headMovement}
197
210
  speaking={speaking}
198
211
  eyeBlink={eyeBlink}
199
212
  morphTargetInfluences={morphTargetInfluences}
200
- clearVisemes={clearVisemes}
213
+ setMorphTargetInfluences={setMorphTargetInfluences}
201
214
  setMorphTargetDictionary={setMorphTargetDictionary}
215
+ updateCurrentViseme={updateCurrentViseme}
202
216
  />
203
217
  ) : (
204
218
  <FullbodyAvatar
205
219
  url={url}
206
220
  sex={sex}
221
+ resetVisemeQueue={resetVisemeQueue}
207
222
  eyeBlink={eyeBlink}
208
- speaking={speaking}
209
223
  currentBaseAction={currentBaseAction}
210
224
  timeScale={timeScale}
211
- setMorphTargetInfluences={setMorphTargetInfluences}
212
- setMorphTargetDictionary={setMorphTargetDictionary}
213
225
  morphTargetInfluences={morphTargetInfluences}
214
- morphTargetDictionary={morphTargetDictionary}
215
226
  isZoomed={isZoomed}
216
- setMeshRef={setMeshRef}
217
- clearVisemes={clearVisemes}
227
+ updateCurrentViseme={updateCurrentViseme}
228
+ stopProcessing={stopProcessing}
229
+ setMorphTargetDictionary={setMorphTargetDictionary}
230
+ setMorphTargetInfluences={setMorphTargetInfluences}
231
+ emotionMorphTargets={emotionMorphTargets}
218
232
  />
219
233
  )}
220
234
  </>