@rydr/game-sdk 3.4.0 → 3.7.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 (52) hide show
  1. package/README.md +5 -0
  2. package/dist/client/PlatformClient.d.ts +19 -0
  3. package/dist/client/PlatformClient.d.ts.map +1 -1
  4. package/dist/client/PlatformClient.js +14 -2
  5. package/dist/client/PlatformClient.js.map +1 -1
  6. package/dist/conversations/hash.d.ts +34 -0
  7. package/dist/conversations/hash.d.ts.map +1 -0
  8. package/dist/conversations/hash.js +41 -0
  9. package/dist/conversations/hash.js.map +1 -0
  10. package/dist/conversations/index.d.ts +170 -0
  11. package/dist/conversations/index.d.ts.map +1 -0
  12. package/dist/conversations/index.js +430 -0
  13. package/dist/conversations/index.js.map +1 -0
  14. package/dist/conversations/voices.d.ts +16 -0
  15. package/dist/conversations/voices.d.ts.map +1 -0
  16. package/dist/conversations/voices.js +36 -0
  17. package/dist/conversations/voices.js.map +1 -0
  18. package/dist/host/PlatformHost.d.ts +14 -0
  19. package/dist/host/PlatformHost.d.ts.map +1 -1
  20. package/dist/host/PlatformHost.js +11 -0
  21. package/dist/host/PlatformHost.js.map +1 -1
  22. package/dist/protocol/boards.d.ts +16 -0
  23. package/dist/protocol/boards.d.ts.map +1 -1
  24. package/dist/protocol/boards.js.map +1 -1
  25. package/dist/protocol/characters.d.ts +13 -0
  26. package/dist/protocol/characters.d.ts.map +1 -1
  27. package/dist/protocol/conversations.d.ts +99 -0
  28. package/dist/protocol/conversations.d.ts.map +1 -0
  29. package/dist/protocol/conversations.js +23 -0
  30. package/dist/protocol/conversations.js.map +1 -0
  31. package/dist/protocol/guards.d.ts.map +1 -1
  32. package/dist/protocol/guards.js +1 -0
  33. package/dist/protocol/guards.js.map +1 -1
  34. package/dist/protocol/index.d.ts +1 -0
  35. package/dist/protocol/index.d.ts.map +1 -1
  36. package/dist/protocol/index.js +1 -0
  37. package/dist/protocol/index.js.map +1 -1
  38. package/dist/protocol/messages.d.ts +33 -2
  39. package/dist/protocol/messages.d.ts.map +1 -1
  40. package/dist/protocol/version.d.ts +2 -2
  41. package/dist/protocol/version.d.ts.map +1 -1
  42. package/dist/protocol/version.js +8 -2
  43. package/dist/protocol/version.js.map +1 -1
  44. package/dist/ui/dialogue-card.d.ts +18 -2
  45. package/dist/ui/dialogue-card.d.ts.map +1 -1
  46. package/dist/ui/dialogue-card.js +35 -9
  47. package/dist/ui/dialogue-card.js.map +1 -1
  48. package/dist/voiceover-editor/index.d.ts +60 -0
  49. package/dist/voiceover-editor/index.d.ts.map +1 -0
  50. package/dist/voiceover-editor/index.js +641 -0
  51. package/dist/voiceover-editor/index.js.map +1 -0
  52. package/package.json +9 -1
@@ -0,0 +1,430 @@
1
+ import { CONVERSATIONS_COLLECTION, VOICE_CAST_COLLECTION, DEFAULT_VOICEOVER_SPEED, synthDirection, } from "../protocol/conversations.js";
2
+ import { lineHash } from "./hash.js";
3
+ import { mountDialogueCard, } from "../ui/dialogue-card.js";
4
+ export * from "./hash.js";
5
+ export * from "./voices.js";
6
+ export { CONVERSATIONS_COLLECTION, VOICE_CAST_COLLECTION, DEFAULT_VOICEOVER_SPEED, synthDirection, } from "../protocol/conversations.js";
7
+ /** Normalize authored spec lines to {@link ConversationLine}s (authored fields only). */
8
+ function normalize(id, spec) {
9
+ return spec.map((l, i) => ({
10
+ id: l.id ?? `${id}:${i}`,
11
+ characterId: l.speaker,
12
+ text: l.text,
13
+ style: l.style,
14
+ speed: l.speed,
15
+ lang: "fr",
16
+ }));
17
+ }
18
+ /** Load a game's speaker characters once, de-duped. */
19
+ async function resolveCharacters(session, lines) {
20
+ const out = new Map();
21
+ for (const l of lines) {
22
+ if (out.has(l.characterId))
23
+ continue;
24
+ out.set(l.characterId, await session.getCharacter(l.characterId).catch(() => null));
25
+ }
26
+ return out;
27
+ }
28
+ /** Load the per-game voice cast for each speaker once, de-duped. */
29
+ async function resolveCast(session, lines) {
30
+ const out = new Map();
31
+ for (const l of lines) {
32
+ if (out.has(l.characterId))
33
+ continue;
34
+ const doc = await session.getContent(VOICE_CAST_COLLECTION, l.characterId).catch(() => null);
35
+ out.set(l.characterId, doc?.data ?? null);
36
+ }
37
+ return out;
38
+ }
39
+ /** Resolve a line's effective voice, delivery direction, and speed from cast → catalog → defaults. */
40
+ function resolveLine(line, character, cast) {
41
+ const voice = cast?.voice ?? character?.voice;
42
+ const context = cast?.context ?? character?.voiceStyle;
43
+ const speed = line.speed ?? cast?.speed ?? DEFAULT_VOICEOVER_SPEED;
44
+ return { voice, direction: synthDirection(context, line.style), speed };
45
+ }
46
+ /** Default `"auto"` hold factor — visible time = factor × audio duration. */
47
+ const DEFAULT_HOLD_FACTOR = 1.5;
48
+ /** Virtual duration for a line with no/blocked audio, so `"auto"`/silent lines still pace (2s → 3s at 1.5×). */
49
+ const SILENT_DURATION_MS = 2000;
50
+ /** Extra grace beyond a `"none"` clip's duration before we force-resolve `"timeout"` (blocked autoplay). */
51
+ const TIMEOUT_SLACK_MS = 1500;
52
+ /** A setTimeout that can pause/resume (so it can freeze while the game/tab is hidden). Wall-clock based. */
53
+ class PausableTimer {
54
+ cb;
55
+ handle = null;
56
+ remaining;
57
+ startedAt = 0;
58
+ done = false;
59
+ constructor(ms, cb) {
60
+ this.cb = cb;
61
+ this.remaining = Math.max(0, ms);
62
+ this.resume();
63
+ }
64
+ resume() {
65
+ if (this.done || this.handle !== null)
66
+ return;
67
+ this.startedAt = Date.now();
68
+ this.handle = setTimeout(() => { this.done = true; this.handle = null; this.cb(); }, this.remaining);
69
+ }
70
+ pause() {
71
+ if (this.handle === null)
72
+ return;
73
+ clearTimeout(this.handle);
74
+ this.handle = null;
75
+ this.remaining = Math.max(0, this.remaining - (Date.now() - this.startedAt));
76
+ }
77
+ cancel() {
78
+ if (this.handle !== null)
79
+ clearTimeout(this.handle);
80
+ this.handle = null;
81
+ this.done = true;
82
+ }
83
+ }
84
+ export function defineConversation(id, spec) {
85
+ const lines = normalize(id, spec);
86
+ /** Resolve each line to its display name + CURRENT audio URL (stored audio whose hash still matches).
87
+ * Shared by open() (card sequence) and player()/audio() (imperative playback). */
88
+ const resolveDialogue = async (session) => {
89
+ const [chars, cast] = await Promise.all([resolveCharacters(session, lines), resolveCast(session, lines)]);
90
+ const stored = (await session.getContent(CONVERSATIONS_COLLECTION, id).catch(() => null));
91
+ const storedLines = new Map();
92
+ for (const l of stored?.data?.lines ?? [])
93
+ storedLines.set(l.id, l);
94
+ const out = [];
95
+ for (const l of lines) {
96
+ const ch = chars.get(l.characterId) ?? null;
97
+ const { voice, direction, speed } = resolveLine(l, ch, cast.get(l.characterId) ?? null);
98
+ let audioUrl;
99
+ if (voice) {
100
+ const hash = await lineHash({ text: l.text, voice, style: direction, speed, lang: l.lang });
101
+ const s = storedLines.get(l.id);
102
+ if (s?.audioUrl && s.audioHash === hash)
103
+ audioUrl = s.audioUrl;
104
+ }
105
+ out.push({ id: l.id, characterId: l.characterId, name: ch?.label ?? l.characterId, text: l.text, audioUrl });
106
+ }
107
+ return out;
108
+ };
109
+ const register = async (session) => {
110
+ if (!session.identity.isAdmin)
111
+ return; // shell gates `shared` writes; don't even try as a player
112
+ const [chars, cast] = await Promise.all([resolveCharacters(session, lines), resolveCast(session, lines)]);
113
+ const existing = (await session.getContent(CONVERSATIONS_COLLECTION, id).catch(() => null));
114
+ const prevData = existing?.data;
115
+ const prev = new Map();
116
+ for (const l of prevData?.lines ?? [])
117
+ prev.set(l.id, l);
118
+ const merged = [];
119
+ for (const l of lines) {
120
+ const { voice, direction, speed } = resolveLine(l, chars.get(l.characterId) ?? null, cast.get(l.characterId) ?? null);
121
+ const out = { ...l, voice };
122
+ if (voice) {
123
+ const hash = await lineHash({ text: l.text, voice, style: direction, speed, lang: l.lang });
124
+ const p = prev.get(l.id);
125
+ if (p?.audioUrl && p.audioHash === hash) {
126
+ out.audioUrl = p.audioUrl;
127
+ out.audioHash = p.audioHash;
128
+ out.generatedAt = p.generatedAt;
129
+ }
130
+ }
131
+ merged.push(out);
132
+ }
133
+ const doc = { id, label: prevData?.label ?? id, lines: merged, origin: "code" };
134
+ await session.saveContent(CONVERSATIONS_COLLECTION, id, doc);
135
+ };
136
+ const open = async (host, session, opts) => {
137
+ if (session.identity.isAdmin && !opts?.noRegister) {
138
+ await register(session).catch(() => { });
139
+ }
140
+ const resolved = await resolveDialogue(session);
141
+ const dlg = resolved.map((r) => ({ text: r.text, name: r.name, audioUrl: r.audioUrl }));
142
+ const card = mountDialogueCard(host, opts);
143
+ card.open(dlg[0]?.name ?? "", dlg);
144
+ return {
145
+ card,
146
+ advance: () => card.advance(),
147
+ close: () => card.close(),
148
+ dispose: () => card.dispose(),
149
+ };
150
+ };
151
+ const player = (host, session, opts) => {
152
+ const defaultDisplay = opts?.display ?? (host ? "card" : "none");
153
+ const defaultFactor = opts?.holdFactor ?? DEFAULT_HOLD_FACTOR;
154
+ // Text is code-defined → available NOW (sync); speaker name falls back to the id.
155
+ const linesById = new Map(lines.map((l) => [l.id, l]));
156
+ // Audio URLs need a gamedata read → resolve in the BACKGROUND and fill the pool. Until then (or for a
157
+ // line with no generated clip) `play()` finds nothing and runs silent — voice-over is a pure enhancement.
158
+ const pool = new Map();
159
+ let disposed = false;
160
+ void (async () => {
161
+ if (session.identity.isAdmin && !opts?.noRegister)
162
+ await register(session).catch(() => { });
163
+ const resolved = await resolveDialogue(session).catch(() => []);
164
+ if (disposed)
165
+ return;
166
+ for (const r of resolved) {
167
+ if (r.audioUrl) {
168
+ const a = new Audio(r.audioUrl);
169
+ a.preload = "auto";
170
+ pool.set(r.id, a);
171
+ }
172
+ }
173
+ })();
174
+ // The card is our TEXT surface only (audio:false) — the controller owns audio so it can time it.
175
+ const cardOpts = {
176
+ button: opts?.button, inline: opts?.inline, typeMs: opts?.typeMs, press: opts?.press,
177
+ maxLines: opts?.maxLines, maxChars: opts?.maxChars, onLine: opts?.onLine, audio: false,
178
+ };
179
+ let card = null;
180
+ const ensureCard = () => {
181
+ if (!host)
182
+ return null;
183
+ if (!card)
184
+ card = mountDialogueCard(host, cardOpts);
185
+ return card;
186
+ };
187
+ let unlocked = false;
188
+ let current = null; // the line the caller is currently awaiting (the "gate")
189
+ let pending = null; // a line whose autoplay was blocked, awaiting unlock()
190
+ const detached = new Set(); // lines that gated early (waitMs) and keep playing out
191
+ let cardOwner = null; // the single card shows at most one beat's text at a time
192
+ /** Resolve the gate promise exactly once (does NOT stop the presentation). */
193
+ const settle = (b, done) => {
194
+ if (b.settled)
195
+ return;
196
+ b.settled = true;
197
+ b.resolve({ done });
198
+ };
199
+ /** Stop presentation + free resources for a beat (does NOT resolve the gate). */
200
+ const teardown = (b) => {
201
+ b.timer?.cancel();
202
+ b.gateTimer?.cancel();
203
+ for (const off of b.offs)
204
+ off();
205
+ b.offs = [];
206
+ if (b.audio) {
207
+ b.audio.pause();
208
+ try {
209
+ b.audio.currentTime = 0;
210
+ }
211
+ catch { /* ignore */ }
212
+ }
213
+ if (b.usedCard && cardOwner === b) {
214
+ card?.close();
215
+ cardOwner = null;
216
+ }
217
+ if (current === b)
218
+ current = null;
219
+ if (pending === b)
220
+ pending = null;
221
+ detached.delete(b);
222
+ };
223
+ /** Natural end / interruption: resolve the gate (if open) AND tear the presentation down. */
224
+ const finish = (b, done) => { settle(b, done); teardown(b); };
225
+ /** waitMs elapsed: resolve `"gated"` and DETACH — the line keeps playing to its own natural end. */
226
+ const detachBeat = (b) => {
227
+ if (b.settled)
228
+ return; // a shorter natural end already won the race
229
+ settle(b, "gated");
230
+ if (current === b)
231
+ current = null;
232
+ detached.add(b); // its own end handlers will teardown() it later
233
+ };
234
+ const activeBeats = () => (current ? [current, ...detached] : [...detached]);
235
+ // Pause audio + freeze timers on ALL live lines while the tab is hidden; resume on return.
236
+ const onVisibility = () => {
237
+ for (const b of activeBeats()) {
238
+ if (document.hidden) {
239
+ if (b.audio && !b.audio.paused) {
240
+ b.audio.pause();
241
+ b.pausedByVis = true;
242
+ }
243
+ b.timer?.pause();
244
+ b.gateTimer?.pause();
245
+ }
246
+ else {
247
+ b.timer?.resume();
248
+ b.gateTimer?.resume();
249
+ if (b.audio && b.pausedByVis && !b.audio.ended) {
250
+ b.pausedByVis = false;
251
+ void b.audio.play().catch(() => { });
252
+ }
253
+ }
254
+ }
255
+ };
256
+ document.addEventListener("visibilitychange", onVisibility);
257
+ const play = (lineId, pOpts) => {
258
+ if (current)
259
+ finish(current, "interrupted"); // supersede the gating line (detached lines keep going)
260
+ const line = linesById.get(lineId); // text/speaker are sync (code-defined)
261
+ const want = pOpts?.display ?? defaultDisplay;
262
+ const dlgCard = want !== "none" ? ensureCard() : null;
263
+ // A card mode with no host degrades to audio-only "none".
264
+ const mode = want !== "none" && !dlgCard ? "none" : want;
265
+ const factor = pOpts?.holdFactor ?? defaultFactor;
266
+ const audio = pool.get(lineId) ?? null; // background-resolved; null until the clip lands / if silent
267
+ return new Promise((resolve) => {
268
+ const b = { resolve, settled: false, timer: null, gateTimer: null, audio, offs: [], usedCard: mode !== "none", pausedByVis: false };
269
+ current = b;
270
+ if (pOpts?.signal) {
271
+ if (pOpts.signal.aborted) {
272
+ finish(b, "interrupted");
273
+ return;
274
+ }
275
+ const signal = pOpts.signal;
276
+ const onAbort = () => finish(b, "interrupted");
277
+ signal.addEventListener("abort", onAbort, { once: true });
278
+ b.offs.push(() => signal.removeEventListener("abort", onAbort));
279
+ }
280
+ // Taking the card closes whatever it was showing (incl. a detached subtitle) — one text at a time.
281
+ if (dlgCard && mode !== "none") {
282
+ cardOwner = b;
283
+ dlgCard.open(line?.characterId ?? "", [{ text: line?.text ?? "" }]);
284
+ }
285
+ const startAudio = () => {
286
+ if (!audio)
287
+ return;
288
+ try {
289
+ audio.currentTime = 0;
290
+ }
291
+ catch { /* ignore */ }
292
+ void audio.play().then(() => { unlocked = true; }).catch(() => { if (!unlocked)
293
+ pending = b; });
294
+ };
295
+ b.startAudio = startAudio;
296
+ startAudio();
297
+ // The gate: resolve after waitMs and keep the line playing (independent of its natural end below).
298
+ if (pOpts?.waitMs != null)
299
+ b.gateTimer = new PausableTimer(pOpts.waitMs, () => detachBeat(b));
300
+ const durMs = () => (audio && isFinite(audio.duration) && audio.duration > 0 ? audio.duration * 1000 : SILENT_DURATION_MS);
301
+ const hasMeta = () => !!audio && isFinite(audio.duration) && audio.duration > 0;
302
+ if (mode === "card") {
303
+ return; // natural end = advance(); a waitMs gate may resolve earlier and leave the card up
304
+ }
305
+ if (mode === "auto") {
306
+ const arm = () => {
307
+ b.timer?.cancel();
308
+ b.timer = new PausableTimer(pOpts?.holdMs ?? factor * durMs(), () => finish(b, "ended"));
309
+ };
310
+ if (audio && pOpts?.holdMs == null && !hasMeta()) {
311
+ const onMeta = () => arm();
312
+ audio.addEventListener("loadedmetadata", onMeta, { once: true });
313
+ b.offs.push(() => audio.removeEventListener("loadedmetadata", onMeta));
314
+ }
315
+ arm();
316
+ return;
317
+ }
318
+ // mode === "none": finish on real audio end, with a bounded fallback so it can never hang.
319
+ if (audio) {
320
+ const onEnded = () => finish(b, "ended");
321
+ audio.addEventListener("ended", onEnded, { once: true });
322
+ b.offs.push(() => audio.removeEventListener("ended", onEnded));
323
+ const arm = () => { b.timer?.cancel(); b.timer = new PausableTimer(durMs() + TIMEOUT_SLACK_MS, () => finish(b, "timeout")); };
324
+ if (!hasMeta()) {
325
+ const onMeta = () => arm();
326
+ audio.addEventListener("loadedmetadata", onMeta, { once: true });
327
+ b.offs.push(() => audio.removeEventListener("loadedmetadata", onMeta));
328
+ }
329
+ arm();
330
+ }
331
+ else {
332
+ b.timer = new PausableTimer(SILENT_DURATION_MS, () => finish(b, "ended"));
333
+ }
334
+ });
335
+ };
336
+ const advance = () => {
337
+ const b = current;
338
+ if (!b)
339
+ return false;
340
+ if (b.usedCard && card && cardOwner === b) {
341
+ const more = card.advance(); // first press finishes the typewriter, next closes the single-line card
342
+ if (more)
343
+ return true;
344
+ finish(b, "ended");
345
+ return false;
346
+ }
347
+ finish(b, "skipped"); // auto/none → A skips early
348
+ return false;
349
+ };
350
+ return {
351
+ get card() { return card; },
352
+ text: (lineId) => linesById.get(lineId)?.text ?? "",
353
+ play,
354
+ advance,
355
+ stop: () => { if (current)
356
+ finish(current, "interrupted"); },
357
+ unlock: () => {
358
+ if (unlocked)
359
+ return;
360
+ unlocked = true;
361
+ if (pending)
362
+ pending.startAudio?.(); // works even if that line has since detached
363
+ pending = null;
364
+ },
365
+ dispose: () => {
366
+ disposed = true; // a still-pending background resolve won't allocate audio after this
367
+ if (current)
368
+ finish(current, "interrupted");
369
+ for (const b of [...detached])
370
+ finish(b, "interrupted");
371
+ document.removeEventListener("visibilitychange", onVisibility);
372
+ card?.dispose();
373
+ card = null;
374
+ for (const a of pool.values()) {
375
+ a.pause();
376
+ a.removeAttribute("src");
377
+ }
378
+ pool.clear();
379
+ },
380
+ };
381
+ };
382
+ const audio = (session) => player(null, session, { display: "none" });
383
+ const del = async (session) => {
384
+ if (!session.identity.isAdmin)
385
+ return;
386
+ await session.deleteContent(CONVERSATIONS_COLLECTION, id).catch(() => { });
387
+ };
388
+ const def = { id, lines, register, delete: del, open, player, audio };
389
+ REGISTRY.set(id, def); // track for syncConversations() (re-defining an id replaces it)
390
+ return def;
391
+ }
392
+ /** Every conversation defined via {@link defineConversation} this session, for {@link syncConversations}. */
393
+ const REGISTRY = new Map();
394
+ /** All conversations declared in code so far. */
395
+ export function listDefinedConversations() {
396
+ return [...REGISTRY.values()];
397
+ }
398
+ /**
399
+ * Reconcile ALL code-declared conversations to the game's `shared` gamedata in one call — for a
400
+ * dev-only "Sync" button. Upserts every {@link defineConversation} (preserving generated audio for
401
+ * unchanged lines); with `prune`, deletes stored conversations whose id no longer exists in code.
402
+ * Admin only (no-op otherwise). Returns the ids pushed and pruned.
403
+ */
404
+ export async function syncConversations(session, opts) {
405
+ if (!session.identity.isAdmin)
406
+ return { pushed: [], pruned: [] };
407
+ const defs = listDefinedConversations();
408
+ const pushed = [];
409
+ for (const d of defs) {
410
+ await d.register(session);
411
+ pushed.push(d.id);
412
+ }
413
+ const pruned = [];
414
+ if (opts?.prune) {
415
+ const defined = new Set(defs.map((d) => d.id));
416
+ const stored = await session.listContent(CONVERSATIONS_COLLECTION).catch(() => []);
417
+ for (const doc of stored) {
418
+ if (defined.has(doc.id))
419
+ continue;
420
+ // Prune ONLY code-authored orphans — never editor-authored (or legacy unmarked) docs. A doc gains
421
+ // `origin: "code"` when register()/sync pushes it; anything else fails safe (kept).
422
+ if (doc.data?.origin !== "code")
423
+ continue;
424
+ await session.deleteContent(CONVERSATIONS_COLLECTION, doc.id).catch(() => { });
425
+ pruned.push(doc.id);
426
+ }
427
+ }
428
+ return { pushed, pruned };
429
+ }
430
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/conversations/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * The prebuilt Gemini TTS voices, for character/voice pickers (Character Studio, the VO editor).
3
+ * The names are Gemini's own; `label` adds the documented timbre hint. Language is auto-detected at
4
+ * synthesis (we always feed French text), so a voice is just a timbre, not a locale.
5
+ */
6
+ export interface GeminiVoice {
7
+ /** The exact voice name passed to the TTS API (also stored on {@link CatalogCharacter.voice}). */
8
+ id: string;
9
+ /** Human hint for pickers. */
10
+ label: string;
11
+ }
12
+ /** The 30 prebuilt voices (Gemini 2.5/3.1 flash TTS). */
13
+ export declare const GEMINI_VOICES: readonly GeminiVoice[];
14
+ /** Default voice when a character has none set. */
15
+ export declare const DEFAULT_VOICE = "Charon";
16
+ //# sourceMappingURL=voices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voices.d.ts","sourceRoot":"","sources":["../../src/conversations/voices.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,kGAAkG;IAClG,EAAE,EAAE,MAAM,CAAC;IACX,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,yDAAyD;AACzD,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EA+B/C,CAAC;AAEF,mDAAmD;AACnD,eAAO,MAAM,aAAa,WAAW,CAAC"}
@@ -0,0 +1,36 @@
1
+ /** The 30 prebuilt voices (Gemini 2.5/3.1 flash TTS). */
2
+ export const GEMINI_VOICES = [
3
+ { id: "Zephyr", label: "Zephyr — bright" },
4
+ { id: "Puck", label: "Puck — upbeat" },
5
+ { id: "Charon", label: "Charon — informative" },
6
+ { id: "Kore", label: "Kore — firm" },
7
+ { id: "Fenrir", label: "Fenrir — excitable" },
8
+ { id: "Leda", label: "Leda — youthful" },
9
+ { id: "Orus", label: "Orus — firm" },
10
+ { id: "Aoede", label: "Aoede — breezy" },
11
+ { id: "Callirrhoe", label: "Callirrhoe — easy-going" },
12
+ { id: "Autonoe", label: "Autonoe — bright" },
13
+ { id: "Enceladus", label: "Enceladus — breathy" },
14
+ { id: "Iapetus", label: "Iapetus — clear" },
15
+ { id: "Umbriel", label: "Umbriel — easy-going" },
16
+ { id: "Algieba", label: "Algieba — smooth" },
17
+ { id: "Despina", label: "Despina — smooth" },
18
+ { id: "Erinome", label: "Erinome — clear" },
19
+ { id: "Algenib", label: "Algenib — gravelly" },
20
+ { id: "Rasalgethi", label: "Rasalgethi — informative" },
21
+ { id: "Laomedeia", label: "Laomedeia — upbeat" },
22
+ { id: "Achernar", label: "Achernar — soft" },
23
+ { id: "Alnilam", label: "Alnilam — firm" },
24
+ { id: "Schedar", label: "Schedar — even" },
25
+ { id: "Gacrux", label: "Gacrux — mature" },
26
+ { id: "Pulcherrima", label: "Pulcherrima — forward" },
27
+ { id: "Achird", label: "Achird — friendly" },
28
+ { id: "Zubenelgenubi", label: "Zubenelgenubi — casual" },
29
+ { id: "Vindemiatrix", label: "Vindemiatrix — gentle" },
30
+ { id: "Sadachbia", label: "Sadachbia — lively" },
31
+ { id: "Sadaltager", label: "Sadaltager — knowledgeable" },
32
+ { id: "Sulafat", label: "Sulafat — warm" },
33
+ ];
34
+ /** Default voice when a character has none set. */
35
+ export const DEFAULT_VOICE = "Charon";
36
+ //# sourceMappingURL=voices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voices.js","sourceRoot":"","sources":["../../src/conversations/voices.ts"],"names":[],"mappings":"AAYA,yDAAyD;AACzD,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE;IAC1C,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE;IACtC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,sBAAsB,EAAE;IAC/C,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE;IACpC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,oBAAoB,EAAE;IAC7C,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE;IACxC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE;IACpC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE;IACxC,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,yBAAyB,EAAE;IACtD,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,EAAE;IAC5C,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,qBAAqB,EAAE;IACjD,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,EAAE;IAC3C,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,sBAAsB,EAAE;IAChD,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,EAAE;IAC5C,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,EAAE;IAC5C,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,EAAE;IAC3C,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,oBAAoB,EAAE;IAC9C,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,0BAA0B,EAAE;IACvD,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,oBAAoB,EAAE;IAChD,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE;IAC5C,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE;IAC1C,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE;IAC1C,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE;IAC1C,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,uBAAuB,EAAE;IACrD,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,mBAAmB,EAAE;IAC5C,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,wBAAwB,EAAE;IACxD,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,uBAAuB,EAAE;IACtD,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,oBAAoB,EAAE;IAChD,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,4BAA4B,EAAE;IACzD,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE;CAC3C,CAAC;AAEF,mDAAmD;AACnD,MAAM,CAAC,MAAM,aAAa,GAAG,QAAQ,CAAC"}
@@ -148,6 +148,20 @@ export interface PlatformHostOptions {
148
148
  url?: string;
149
149
  error?: string;
150
150
  }>;
151
+ /** The game/editor asked to synthesise voice-over for a line; the shell calls its `tts-generate`
152
+ * function (holding the TTS key) and returns the cached MP3 URL + content hash. Author-gated. */
153
+ onGenerateVoiceover?(req: {
154
+ text: string;
155
+ voice: string;
156
+ style?: string;
157
+ speed?: number;
158
+ lang: string;
159
+ }): Promise<{
160
+ url?: string;
161
+ hash?: string;
162
+ cached?: boolean;
163
+ error?: string;
164
+ }>;
151
165
  /** The game requested a presigned upload URL for a captured highlight (still/clip); mint and return it. */
152
166
  onSaveMedia?(req: {
153
167
  kind: "image" | "video";
@@ -1 +1 @@
1
- {"version":3,"file":"PlatformHost.d.ts","sourceRoot":"","sources":["../../src/host/PlatformHost.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PlatformHost.d.ts","sourceRoot":"","sources":["../../src/host/PlatformHost.ts"],"names":[],"mappings":"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"}
@@ -164,6 +164,17 @@ export function createPlatformHost(options) {
164
164
  });
165
165
  break;
166
166
  }
167
+ case "rydr/voiceover.generate": {
168
+ const { nonce } = msg;
169
+ const handler = options.onGenerateVoiceover ?? (async () => ({ error: "voiceover not supported" }));
170
+ void handler({ text: msg.text, voice: msg.voice, style: msg.style, speed: msg.speed, lang: msg.lang })
171
+ .then((r) => post({ rydr: true, type: "rydr/voiceover.generateResult", nonce, ...r }))
172
+ .catch((err) => {
173
+ console.error("[rydr-host] voiceover.generate failed:", err);
174
+ post({ rydr: true, type: "rydr/voiceover.generateResult", nonce, error: String(err) });
175
+ });
176
+ break;
177
+ }
167
178
  case "rydr/media.uploadUrl": {
168
179
  const { nonce } = msg;
169
180
  const handler = options.onSaveMedia ?? (async () => ({ error: "media capture not supported" }));