@convai/web-sdk 0.2.4 → 0.3.0-beta.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 (73) hide show
  1. package/README.md +535 -1031
  2. package/dist/core/AudioManager.d.ts.map +1 -1
  3. package/dist/core/AudioManager.js +0 -5
  4. package/dist/core/AudioManager.js.map +1 -1
  5. package/dist/core/BlendshapeQueue.d.ts +128 -0
  6. package/dist/core/BlendshapeQueue.d.ts.map +1 -0
  7. package/dist/core/BlendshapeQueue.js +229 -0
  8. package/dist/core/BlendshapeQueue.js.map +1 -0
  9. package/dist/core/ConvaiClient.d.ts +19 -0
  10. package/dist/core/ConvaiClient.d.ts.map +1 -1
  11. package/dist/core/ConvaiClient.js +67 -29
  12. package/dist/core/ConvaiClient.js.map +1 -1
  13. package/dist/core/MessageHandler.d.ts +7 -0
  14. package/dist/core/MessageHandler.d.ts.map +1 -1
  15. package/dist/core/MessageHandler.js +35 -2
  16. package/dist/core/MessageHandler.js.map +1 -1
  17. package/dist/core/ScreenShareManager.d.ts.map +1 -1
  18. package/dist/core/ScreenShareManager.js +0 -3
  19. package/dist/core/ScreenShareManager.js.map +1 -1
  20. package/dist/core/VideoManager.d.ts.map +1 -1
  21. package/dist/core/VideoManager.js +0 -4
  22. package/dist/core/VideoManager.js.map +1 -1
  23. package/dist/core/index.d.ts +2 -0
  24. package/dist/core/index.d.ts.map +1 -1
  25. package/dist/core/index.js +2 -0
  26. package/dist/core/index.js.map +1 -1
  27. package/dist/core/types.d.ts +19 -0
  28. package/dist/core/types.d.ts.map +1 -1
  29. package/dist/index.d.ts +2 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +2 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/lipsync-helpers/arkitBlendshapeHelpers.d.ts +80 -0
  34. package/dist/lipsync-helpers/arkitBlendshapeHelpers.d.ts.map +1 -0
  35. package/dist/lipsync-helpers/arkitBlendshapeHelpers.js +201 -0
  36. package/dist/lipsync-helpers/arkitBlendshapeHelpers.js.map +1 -0
  37. package/dist/lipsync-helpers/arkitOrder61.d.ts +121 -0
  38. package/dist/lipsync-helpers/arkitOrder61.d.ts.map +1 -0
  39. package/dist/lipsync-helpers/arkitOrder61.js +287 -0
  40. package/dist/lipsync-helpers/arkitOrder61.js.map +1 -0
  41. package/dist/lipsync-helpers/arkitPhonemeReference.d.ts +155 -0
  42. package/dist/lipsync-helpers/arkitPhonemeReference.d.ts.map +1 -0
  43. package/dist/lipsync-helpers/arkitPhonemeReference.js +362 -0
  44. package/dist/lipsync-helpers/arkitPhonemeReference.js.map +1 -0
  45. package/dist/lipsync-helpers/index.d.ts +10 -0
  46. package/dist/lipsync-helpers/index.d.ts.map +1 -0
  47. package/dist/lipsync-helpers/index.js +21 -0
  48. package/dist/lipsync-helpers/index.js.map +1 -0
  49. package/dist/lipsync-helpers/metahumanOrder251.d.ts +115 -0
  50. package/dist/lipsync-helpers/metahumanOrder251.d.ts.map +1 -0
  51. package/dist/lipsync-helpers/metahumanOrder251.js +432 -0
  52. package/dist/lipsync-helpers/metahumanOrder251.js.map +1 -0
  53. package/dist/lipsync-helpers/neurosyncBlendshapeMapper.d.ts +30 -0
  54. package/dist/lipsync-helpers/neurosyncBlendshapeMapper.d.ts.map +1 -0
  55. package/dist/lipsync-helpers/neurosyncBlendshapeMapper.js +315 -0
  56. package/dist/lipsync-helpers/neurosyncBlendshapeMapper.js.map +1 -0
  57. package/dist/react/components/ConvaiWidget.d.ts.map +1 -1
  58. package/dist/react/components/ConvaiWidget.js +43 -3
  59. package/dist/react/components/ConvaiWidget.js.map +1 -1
  60. package/dist/react/hooks/useCharacterInfo.d.ts.map +1 -1
  61. package/dist/react/hooks/useCharacterInfo.js +1 -1
  62. package/dist/react/hooks/useCharacterInfo.js.map +1 -1
  63. package/dist/react/hooks/useConvaiClient.d.ts.map +1 -1
  64. package/dist/react/hooks/useConvaiClient.js +5 -0
  65. package/dist/react/hooks/useConvaiClient.js.map +1 -1
  66. package/dist/utils/speakerManagement.d.ts.map +1 -1
  67. package/dist/utils/speakerManagement.js +0 -5
  68. package/dist/utils/speakerManagement.js.map +1 -1
  69. package/dist/vanilla/AudioRenderer.d.ts +5 -0
  70. package/dist/vanilla/AudioRenderer.d.ts.map +1 -1
  71. package/dist/vanilla/AudioRenderer.js +27 -18
  72. package/dist/vanilla/AudioRenderer.js.map +1 -1
  73. package/package.json +4 -4
@@ -0,0 +1,287 @@
1
+ /**
2
+ * ARKit 61-Element Custom Order Mapper
3
+ * Maps the custom 61-element ARKit blendshape array to standard ARKit indices
4
+ *
5
+ * This ordering includes:
6
+ * - 52 standard ARKit facial blendshapes (in custom order)
7
+ * - 9 additional values for head and eye rotations
8
+ */
9
+ /**
10
+ * Custom ARKit 61-element ordering
11
+ * This is the order in which blendshapes are received from the server
12
+ */
13
+ export const ARKIT_ORDER_61 = [
14
+ "EyeBlinkLeft", // 0
15
+ "EyeLookDownLeft", // 1
16
+ "EyeLookInLeft", // 2
17
+ "EyeLookOutLeft", // 3
18
+ "EyeLookUpLeft", // 4
19
+ "EyeSquintLeft", // 5
20
+ "EyeWideLeft", // 6
21
+ "EyeBlinkRight", // 7
22
+ "EyeLookDownRight", // 8
23
+ "EyeLookInRight", // 9
24
+ "EyeLookOutRight", // 10
25
+ "EyeLookUpRight", // 11
26
+ "EyeSquintRight", // 12
27
+ "EyeWideRight", // 13
28
+ "JawForward", // 14
29
+ "JawRight", // 15
30
+ "JawLeft", // 16
31
+ "JawOpen", // 17 🔑 KEY for mouth opening
32
+ "MouthClose", // 18 🔑 KEY for mouth closing
33
+ "MouthFunnel", // 19 🔑 KEY for "O" sounds
34
+ "MouthPucker", // 20 🔑 KEY for "U" sounds
35
+ "MouthRight", // 21
36
+ "MouthLeft", // 22
37
+ "MouthSmileLeft", // 23 🔑 KEY for "ee" sounds
38
+ "MouthSmileRight", // 24 🔑 KEY for "ee" sounds
39
+ "MouthFrownLeft", // 25
40
+ "MouthFrownRight", // 26
41
+ "MouthDimpleLeft", // 27
42
+ "MouthDimpleRight", // 28
43
+ "MouthStretchLeft", // 29 🔑 KEY for wide mouth
44
+ "MouthStretchRight", // 30 🔑 KEY for wide mouth
45
+ "MouthRollLower", // 31
46
+ "MouthRollUpper", // 32
47
+ "MouthShrugLower", // 33
48
+ "MouthShrugUpper", // 34
49
+ "MouthPressLeft", // 35
50
+ "MouthPressRight", // 36
51
+ "MouthLowerDownLeft", // 37
52
+ "MouthLowerDownRight", // 38
53
+ "MouthUpperUpLeft", // 39
54
+ "MouthUpperUpRight", // 40
55
+ "BrowDownLeft", // 41
56
+ "BrowDownRight", // 42
57
+ "BrowInnerUp", // 43
58
+ "BrowOuterUpLeft", // 44
59
+ "BrowOuterUpRight", // 45
60
+ "CheekPuff", // 46
61
+ "CheekSquintLeft", // 47
62
+ "CheekSquintRight", // 48
63
+ "NoseSneerLeft", // 49
64
+ "NoseSneerRight", // 50
65
+ "TongueOut", // 51 🔑 KEY for "th" sounds
66
+ "HeadYaw", // 52 - Head rotation left/right
67
+ "HeadPitch", // 53 - Head rotation up/down
68
+ "HeadRoll", // 54 - Head rotation tilt
69
+ "LeftEyeYaw", // 55 - Left eye rotation left/right
70
+ "LeftEyePitch", // 56 - Left eye rotation up/down
71
+ "LeftEyeRoll", // 57 - Left eye rotation roll
72
+ "RightEyeYaw", // 58 - Right eye rotation left/right
73
+ "RightEyePitch", // 59 - Right eye rotation up/down
74
+ "RightEyeRoll", // 60 - Right eye rotation roll
75
+ ];
76
+ /**
77
+ * Standard ARKit blendshape order (52 elements)
78
+ * This is Apple's official ordering
79
+ */
80
+ export const STANDARD_ARKIT_ORDER = [
81
+ "BrowDownLeft", // 0
82
+ "BrowDownRight", // 1
83
+ "BrowInnerUp", // 2
84
+ "BrowOuterUpLeft", // 3
85
+ "BrowOuterUpRight", // 4
86
+ "CheekPuff", // 5
87
+ "CheekSquintLeft", // 6
88
+ "CheekSquintRight", // 7
89
+ "EyeBlinkLeft", // 8
90
+ "EyeBlinkRight", // 9
91
+ "EyeLookDownLeft", // 10
92
+ "EyeLookDownRight", // 11
93
+ "EyeLookInLeft", // 12
94
+ "EyeLookInRight", // 13
95
+ "EyeLookOutLeft", // 14
96
+ "EyeLookOutRight", // 15
97
+ "EyeLookUpLeft", // 16
98
+ "EyeLookUpRight", // 17
99
+ "EyeSquintLeft", // 18
100
+ "EyeSquintRight", // 19
101
+ "EyeWideLeft", // 20
102
+ "EyeWideRight", // 21
103
+ "JawForward", // 22
104
+ "JawLeft", // 23
105
+ "JawOpen", // 24
106
+ "JawRight", // 25
107
+ "MouthClose", // 26
108
+ "MouthDimpleLeft", // 27
109
+ "MouthDimpleRight", // 28
110
+ "MouthFrownLeft", // 29
111
+ "MouthFrownRight", // 30
112
+ "MouthFunnel", // 31
113
+ "MouthLeft", // 32
114
+ "MouthLowerDownLeft", // 33
115
+ "MouthLowerDownRight", // 34
116
+ "MouthPressLeft", // 35
117
+ "MouthPressRight", // 36
118
+ "MouthPucker", // 37
119
+ "MouthRight", // 38
120
+ "MouthRollLower", // 39
121
+ "MouthRollUpper", // 40
122
+ "MouthShrugLower", // 41
123
+ "MouthShrugUpper", // 42
124
+ "MouthSmileLeft", // 43
125
+ "MouthSmileRight", // 44
126
+ "MouthStretchLeft", // 45
127
+ "MouthStretchRight", // 46
128
+ "MouthUpperUpLeft", // 47
129
+ "MouthUpperUpRight", // 48
130
+ "NoseSneerLeft", // 49
131
+ "NoseSneerRight", // 50
132
+ "TongueOut", // 51
133
+ ];
134
+ /**
135
+ * Mapping from custom 61-order indices to standard ARKit indices
136
+ * Maps ARKIT_ORDER_61[i] -> STANDARD_ARKIT_ORDER[j]
137
+ */
138
+ const ORDER_61_TO_STANDARD_MAP = new Map();
139
+ // Build the mapping at module initialization
140
+ for (let i = 0; i < ARKIT_ORDER_61.length; i++) {
141
+ const name = ARKIT_ORDER_61[i];
142
+ // Only map the first 52 (standard ARKit blendshapes)
143
+ if (i < 52) {
144
+ const standardIndex = STANDARD_ARKIT_ORDER.indexOf(name);
145
+ if (standardIndex !== -1) {
146
+ ORDER_61_TO_STANDARD_MAP.set(i, standardIndex);
147
+ }
148
+ }
149
+ }
150
+ /**
151
+ * Convert 61-element custom order array to standard 52-element ARKit array
152
+ * @param values61 - 61-element array in custom order
153
+ * @returns 52-element array in standard ARKit order
154
+ */
155
+ export function convertOrder61ToStandard(values61) {
156
+ const standardArray = new Array(52).fill(0);
157
+ for (let i = 0; i < Math.min(52, values61.length); i++) {
158
+ const standardIndex = ORDER_61_TO_STANDARD_MAP.get(i);
159
+ if (standardIndex !== undefined) {
160
+ standardArray[standardIndex] = values61[i];
161
+ }
162
+ }
163
+ return standardArray;
164
+ }
165
+ /**
166
+ * Map 61-element array to named object (all 61 values)
167
+ * @param values61 - 61-element array in custom order
168
+ * @returns Object with blendshape/rotation names as keys
169
+ */
170
+ export function mapOrder61ToNames(values61) {
171
+ const mapped = {};
172
+ for (let i = 0; i < Math.min(values61.length, ARKIT_ORDER_61.length); i++) {
173
+ // Convert to camelCase (lowercase first letter)
174
+ const name = ARKIT_ORDER_61[i];
175
+ const camelCaseName = name.charAt(0).toLowerCase() + name.slice(1);
176
+ mapped[camelCaseName] = values61[i];
177
+ }
178
+ return mapped;
179
+ }
180
+ /**
181
+ * Get specific blendshape value by name from 61-element array
182
+ * @param values61 - 61-element array in custom order
183
+ * @param name - Name of the blendshape (case-insensitive)
184
+ * @returns The value, or 0 if not found
185
+ */
186
+ export function getBlendshapeValueFromOrder61(values61, name) {
187
+ const upperName = name.charAt(0).toUpperCase() + name.slice(1);
188
+ const index = ARKIT_ORDER_61.indexOf(upperName);
189
+ if (index !== -1 && index < values61.length) {
190
+ return values61[index];
191
+ }
192
+ return 0;
193
+ }
194
+ /**
195
+ * Extract head rotation values from 61-element array
196
+ * @param values61 - 61-element array in custom order
197
+ * @returns Object with head rotation values (yaw, pitch, roll)
198
+ */
199
+ export function getHeadRotation(values61) {
200
+ return {
201
+ yaw: values61[52] || 0,
202
+ pitch: values61[53] || 0,
203
+ roll: values61[54] || 0,
204
+ };
205
+ }
206
+ /**
207
+ * Extract eye rotation values from 61-element array
208
+ * @param values61 - 61-element array in custom order
209
+ * @returns Object with left and right eye rotation values
210
+ */
211
+ export function getEyeRotations(values61) {
212
+ return {
213
+ left: {
214
+ yaw: values61[55] || 0,
215
+ pitch: values61[56] || 0,
216
+ roll: values61[57] || 0,
217
+ },
218
+ right: {
219
+ yaw: values61[58] || 0,
220
+ pitch: values61[59] || 0,
221
+ roll: values61[60] || 0,
222
+ },
223
+ };
224
+ }
225
+ /**
226
+ * Get key lip-sync blendshapes from 61-element array
227
+ * These are the most important values for facial animation
228
+ */
229
+ export function getLipSyncValuesFromOrder61(values61) {
230
+ return {
231
+ jawOpen: values61[17] || 0,
232
+ mouthClose: values61[18] || 0,
233
+ mouthFunnel: values61[19] || 0,
234
+ mouthPucker: values61[20] || 0,
235
+ mouthSmileLeft: values61[23] || 0,
236
+ mouthSmileRight: values61[24] || 0,
237
+ mouthStretchLeft: values61[29] || 0,
238
+ mouthStretchRight: values61[30] || 0,
239
+ mouthRollLower: values61[31] || 0,
240
+ mouthRollUpper: values61[32] || 0,
241
+ tongueOut: values61[51] || 0,
242
+ };
243
+ }
244
+ /**
245
+ * Get active blendshapes from 61-element array (above threshold)
246
+ * @param values61 - 61-element array in custom order
247
+ * @param threshold - Minimum value to consider "active" (default: 0.01)
248
+ * @returns Sorted array of active blendshapes
249
+ */
250
+ export function getActiveBlendshapesFromOrder61(values61, threshold = 0.01) {
251
+ const active = [];
252
+ for (let i = 0; i < Math.min(values61.length, ARKIT_ORDER_61.length); i++) {
253
+ if (Math.abs(values61[i]) > threshold) {
254
+ const name = ARKIT_ORDER_61[i];
255
+ const camelCaseName = name.charAt(0).toLowerCase() + name.slice(1);
256
+ active.push({
257
+ name: camelCaseName,
258
+ value: values61[i],
259
+ index: i,
260
+ });
261
+ }
262
+ }
263
+ // Sort by absolute value (descending)
264
+ return active.sort((a, b) => Math.abs(b.value) - Math.abs(a.value));
265
+ }
266
+ /**
267
+ * Format 61-element array for logging
268
+ * @param values61 - 61-element array in custom order
269
+ * @param threshold - Only show values above this (default: 0.01)
270
+ * @param maxEntries - Maximum entries to show (default: 20)
271
+ */
272
+ export function formatOrder61ForLogging(values61, threshold = 0.01, maxEntries = 20) {
273
+ const active = getActiveBlendshapesFromOrder61(values61, threshold)
274
+ .slice(0, maxEntries)
275
+ .reduce((acc, item) => {
276
+ acc[item.name] = Number(item.value.toFixed(4));
277
+ return acc;
278
+ }, {});
279
+ return {
280
+ active,
281
+ total: values61.length,
282
+ activeCount: Object.keys(active).length,
283
+ headRotation: getHeadRotation(values61),
284
+ eyeRotations: getEyeRotations(values61),
285
+ };
286
+ }
287
+ //# sourceMappingURL=arkitOrder61.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arkitOrder61.js","sourceRoot":"","sources":["../../src/lipsync-helpers/arkitOrder61.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * ARKit Blendshape Reference Values for Phonemes/Visemes
3
+ *
4
+ * This file provides reference values for ARKit's 52 standard facial blendshapes
5
+ * when forming different phonemes (speech sounds). These values are based on
6
+ * industry standards from systems like OVR LipSync, Oculus Audio, and ARKit face tracking.
7
+ *
8
+ * All blendshape values range from 0.0 (no activation) to 1.0 (full activation)
9
+ *
10
+ * ARKit Blendshapes: Indices 0-51
11
+ * Meta Human Extended: Indices 52-250
12
+ */
13
+ export interface PhonemeBlendshapes {
14
+ jawOpen?: number;
15
+ jawForward?: number;
16
+ jawLeft?: number;
17
+ jawRight?: number;
18
+ mouthClose?: number;
19
+ mouthFunnel?: number;
20
+ mouthPucker?: number;
21
+ mouthLeft?: number;
22
+ mouthRight?: number;
23
+ mouthSmileLeft?: number;
24
+ mouthSmileRight?: number;
25
+ mouthStretchLeft?: number;
26
+ mouthStretchRight?: number;
27
+ mouthFrownLeft?: number;
28
+ mouthFrownRight?: number;
29
+ mouthDimpleLeft?: number;
30
+ mouthDimpleRight?: number;
31
+ mouthRollLower?: number;
32
+ mouthRollUpper?: number;
33
+ mouthShrugLower?: number;
34
+ mouthShrugUpper?: number;
35
+ mouthPressLeft?: number;
36
+ mouthPressRight?: number;
37
+ mouthLowerDownLeft?: number;
38
+ mouthLowerDownRight?: number;
39
+ mouthUpperUpLeft?: number;
40
+ mouthUpperUpRight?: number;
41
+ tongueOut?: number;
42
+ noseSneerLeft?: number;
43
+ noseSneerRight?: number;
44
+ cheekPuff?: number;
45
+ description: string;
46
+ }
47
+ /**
48
+ * Reference values for common phonemes
49
+ * Based on International Phonetic Alphabet (IPA) and Arpabet standards
50
+ */
51
+ export declare const ARKIT_PHONEME_REFERENCE_VALUES: Record<string, PhonemeBlendshapes>;
52
+ /**
53
+ * ARKit Blendshape Indices (0-51)
54
+ * These are Apple's standard 52 facial blendshapes
55
+ */
56
+ export declare const ARKIT_BLENDSHAPE_INDICES: {
57
+ browDownLeft: number;
58
+ browDownRight: number;
59
+ browInnerUp: number;
60
+ browOuterUpLeft: number;
61
+ browOuterUpRight: number;
62
+ cheekPuff: number;
63
+ cheekSquintLeft: number;
64
+ cheekSquintRight: number;
65
+ eyeBlinkLeft: number;
66
+ eyeBlinkRight: number;
67
+ eyeLookDownLeft: number;
68
+ eyeLookDownRight: number;
69
+ eyeLookInLeft: number;
70
+ eyeLookInRight: number;
71
+ eyeLookOutLeft: number;
72
+ eyeLookOutRight: number;
73
+ eyeLookUpLeft: number;
74
+ eyeLookUpRight: number;
75
+ eyeSquintLeft: number;
76
+ eyeSquintRight: number;
77
+ eyeWideLeft: number;
78
+ eyeWideRight: number;
79
+ jawForward: number;
80
+ jawLeft: number;
81
+ jawOpen: number;
82
+ jawRight: number;
83
+ mouthClose: number;
84
+ mouthDimpleLeft: number;
85
+ mouthDimpleRight: number;
86
+ mouthFrownLeft: number;
87
+ mouthFrownRight: number;
88
+ mouthFunnel: number;
89
+ mouthLeft: number;
90
+ mouthLowerDownLeft: number;
91
+ mouthLowerDownRight: number;
92
+ mouthPressLeft: number;
93
+ mouthPressRight: number;
94
+ mouthPucker: number;
95
+ mouthRight: number;
96
+ mouthRollLower: number;
97
+ mouthRollUpper: number;
98
+ mouthShrugLower: number;
99
+ mouthShrugUpper: number;
100
+ mouthSmileLeft: number;
101
+ mouthSmileRight: number;
102
+ mouthStretchLeft: number;
103
+ mouthStretchRight: number;
104
+ mouthUpperUpLeft: number;
105
+ mouthUpperUpRight: number;
106
+ noseSneerLeft: number;
107
+ noseSneerRight: number;
108
+ tongueOut: number;
109
+ };
110
+ /**
111
+ * Generate a complete 251-length blendshape array for a specific phoneme
112
+ * @param phoneme - The phoneme key from ARKIT_PHONEME_REFERENCE_VALUES
113
+ * @returns Array of 251 blendshape values
114
+ */
115
+ export declare function generatePhonemeBlendshapes(phoneme: keyof typeof ARKIT_PHONEME_REFERENCE_VALUES): number[];
116
+ /**
117
+ * Pre-generated sample blendshapes for testing and visualization
118
+ * Use these to test your visualization system
119
+ */
120
+ export declare const SAMPLE_PHONEME_TESTS: {
121
+ Silence: number[];
122
+ 'A (ah - father)': number[];
123
+ 'E (eh - bed)': number[];
124
+ 'I (ee - see)': number[];
125
+ 'O (oh - go)': number[];
126
+ 'U (oo - food)': number[];
127
+ 'P/B/M': number[];
128
+ 'F/V': number[];
129
+ 'TH (think)': number[];
130
+ 'S/Z': number[];
131
+ 'SH (shoe)': number[];
132
+ 'CH (church)': number[];
133
+ 'W (wet)': number[];
134
+ 'R (red)': number[];
135
+ 'L (lap)': number[];
136
+ 'K/G': number[];
137
+ };
138
+ /**
139
+ * Get a formatted string showing active blendshapes for a phoneme
140
+ * Useful for debugging and documentation
141
+ */
142
+ export declare function getPhonemeDescription(phoneme: keyof typeof ARKIT_PHONEME_REFERENCE_VALUES): string;
143
+ /**
144
+ * Quick reference guide for key blendshapes
145
+ */
146
+ export declare const BLENDSHAPE_QUICK_GUIDE: {
147
+ 'Open mouth': string[];
148
+ 'Close mouth': string[];
149
+ 'Round lips (O, oo)': string[];
150
+ 'Smile (ee)': string[];
151
+ 'Lips pressed (p, b, m)': string[];
152
+ 'Teeth on lip (f, v)': string[];
153
+ 'Tongue visible (th, l)': string[];
154
+ };
155
+ //# sourceMappingURL=arkitPhonemeReference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arkitPhonemeReference.d.ts","sourceRoot":"","sources":["../../src/lipsync-helpers/arkitPhonemeReference.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,kBAAkB;IAEjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAG1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAG3B,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAqQ7E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDpC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,OAAO,8BAA8B,GAAG,MAAM,EAAE,CAazG;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;CAiBhC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,OAAO,8BAA8B,GAAG,MAAM,CAWlG;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;CAQlC,CAAC"}