@pie-players/tts-server-google 0.1.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.
@@ -0,0 +1,454 @@
1
+ /**
2
+ * Google Cloud Text-to-Speech server-side TTS provider
3
+ * @module @pie-players/tts-server-google
4
+ */
5
+ import { v1beta1, protos } from "@google-cloud/text-to-speech";
6
+ import { BaseTTSProvider, TTSError, TTSErrorCode, } from "@pie-players/tts-server-core";
7
+ /**
8
+ * Google Cloud Text-to-Speech Server Provider
9
+ *
10
+ * Provides high-quality neural text-to-speech with precise word-level timing
11
+ * through Google Cloud Text-to-Speech API.
12
+ *
13
+ * Features:
14
+ * - Speech marks support via SSML mark injection (millisecond precision)
15
+ * - WaveNet (neural), Standard, and Studio voice types
16
+ * - 200+ voices across 50+ languages
17
+ * - Full SSML support
18
+ * - Single API call for audio + speech marks
19
+ */
20
+ export class GoogleCloudTTSProvider extends BaseTTSProvider {
21
+ providerId = "google-cloud-tts";
22
+ providerName = "Google Cloud Text-to-Speech";
23
+ version = "1.0.0";
24
+ client;
25
+ voiceType = "wavenet";
26
+ defaultVoice = "en-US-Wavenet-A";
27
+ audioEncoding = "MP3";
28
+ enableLogging = false;
29
+ /**
30
+ * Initialize the Google Cloud TTS provider.
31
+ *
32
+ * This is FAST and lightweight - only validates config and creates the client.
33
+ * Does NOT fetch voices or make test API calls.
34
+ *
35
+ * @param config - Google Cloud TTS configuration
36
+ * @performance Completes in ~10-50ms
37
+ */
38
+ async initialize(config) {
39
+ if (!config.projectId) {
40
+ throw new TTSError(TTSErrorCode.INITIALIZATION_ERROR, "Google Cloud project ID is required", undefined, this.providerId);
41
+ }
42
+ this.config = config;
43
+ this.voiceType = config.voiceType || "wavenet";
44
+ this.defaultVoice = config.defaultVoice || "en-US-Wavenet-A";
45
+ this.audioEncoding = config.audioEncoding || "MP3";
46
+ this.enableLogging = config.enableLogging || false;
47
+ try {
48
+ // Initialize Google Cloud TTS client
49
+ const clientConfig = {
50
+ projectId: config.projectId,
51
+ };
52
+ // Handle different credential types
53
+ if (config.credentials) {
54
+ if (typeof config.credentials === "string") {
55
+ // Path to service account JSON file
56
+ clientConfig.keyFilename = config.credentials;
57
+ }
58
+ else if ("apiKey" in config.credentials) {
59
+ // API key authentication
60
+ clientConfig.apiKey = config.credentials.apiKey;
61
+ }
62
+ else {
63
+ // Service account key object
64
+ clientConfig.credentials = config.credentials;
65
+ }
66
+ }
67
+ // Else: Use Application Default Credentials (ADC)
68
+ this.client = new v1beta1.TextToSpeechClient(clientConfig);
69
+ this.initialized = true;
70
+ if (this.enableLogging) {
71
+ console.log("[GoogleCloudTTS] Initialized successfully");
72
+ }
73
+ }
74
+ catch (error) {
75
+ throw new TTSError(TTSErrorCode.INITIALIZATION_ERROR, `Failed to initialize Google Cloud TTS: ${error instanceof Error ? error.message : String(error)}`, { error }, this.providerId);
76
+ }
77
+ }
78
+ /**
79
+ * Synthesize speech with Google Cloud TTS
80
+ */
81
+ async synthesize(request) {
82
+ this.ensureInitialized();
83
+ const capabilities = this.getCapabilities();
84
+ this.validateRequest(request, capabilities);
85
+ const voice = request.voice || this.defaultVoice;
86
+ const startTime = Date.now();
87
+ try {
88
+ // Check if speech marks are requested
89
+ if (request.includeSpeechMarks !== false) {
90
+ // Use SSML marks injection for precise word timing
91
+ const result = await this.synthesizeWithSpeechMarks(request, voice);
92
+ const duration = (Date.now() - startTime) / 1000;
93
+ return {
94
+ audio: result.audio,
95
+ contentType: result.contentType,
96
+ speechMarks: result.speechMarks,
97
+ metadata: {
98
+ providerId: this.providerId,
99
+ voice,
100
+ duration,
101
+ charCount: request.text.length,
102
+ cached: false,
103
+ timestamp: new Date().toISOString(),
104
+ },
105
+ };
106
+ }
107
+ else {
108
+ // Audio only (no speech marks)
109
+ const result = await this.synthesizeAudio(request, voice);
110
+ const duration = (Date.now() - startTime) / 1000;
111
+ return {
112
+ audio: result.audio,
113
+ contentType: result.contentType,
114
+ speechMarks: [],
115
+ metadata: {
116
+ providerId: this.providerId,
117
+ voice,
118
+ duration,
119
+ charCount: request.text.length,
120
+ cached: false,
121
+ timestamp: new Date().toISOString(),
122
+ },
123
+ };
124
+ }
125
+ }
126
+ catch (error) {
127
+ throw this.mapGoogleErrorToTTSError(error);
128
+ }
129
+ }
130
+ /**
131
+ * Synthesize audio stream only (no speech marks)
132
+ */
133
+ async synthesizeAudio(request, voice) {
134
+ // Detect if text contains SSML tags
135
+ const isSsml = this.detectSSML(request.text);
136
+ if (isSsml && this.enableLogging) {
137
+ console.log("[GoogleCloudTTS] Detected SSML content");
138
+ }
139
+ // Parse voice name to extract language code
140
+ const languageCode = voice.split("-").slice(0, 2).join("-"); // e.g., "en-US" from "en-US-Wavenet-A"
141
+ // Map our audio encoding to Google's enum
142
+ const audioEncodingMap = {
143
+ MP3: "MP3",
144
+ LINEAR16: "LINEAR16",
145
+ OGG_OPUS: "OGG_OPUS",
146
+ };
147
+ const [response] = await this.client.synthesizeSpeech({
148
+ input: isSsml ? { ssml: request.text } : { text: request.text },
149
+ voice: {
150
+ languageCode,
151
+ name: voice,
152
+ },
153
+ audioConfig: {
154
+ audioEncoding: audioEncodingMap[this.audioEncoding],
155
+ sampleRateHertz: request.sampleRate || 24000,
156
+ },
157
+ });
158
+ if (!response.audioContent) {
159
+ throw new Error("No audio content received from Google Cloud TTS");
160
+ }
161
+ // Convert Uint8Array to Buffer
162
+ const audioBuffer = Buffer.from(response.audioContent);
163
+ const contentTypeMap = {
164
+ MP3: "audio/mpeg",
165
+ LINEAR16: "audio/wav",
166
+ OGG_OPUS: "audio/ogg",
167
+ };
168
+ return {
169
+ audio: audioBuffer,
170
+ contentType: contentTypeMap[this.audioEncoding],
171
+ };
172
+ }
173
+ /**
174
+ * Synthesize with speech marks using SSML mark injection
175
+ */
176
+ async synthesizeWithSpeechMarks(request, voice) {
177
+ // Check if the text is already SSML
178
+ const isUserSSML = this.detectSSML(request.text);
179
+ // If user provided SSML, we need to inject marks within the existing SSML
180
+ // For simplicity in v1, we'll inject marks for plain text only
181
+ const { ssml, wordMap } = isUserSSML
182
+ ? this.extractWordsFromSSML(request.text)
183
+ : this.injectSSMLMarks(request.text);
184
+ if (this.enableLogging) {
185
+ console.log(`[GoogleCloudTTS] Injected ${wordMap.length} SSML marks`);
186
+ }
187
+ // Parse voice name to extract language code
188
+ const languageCode = voice.split("-").slice(0, 2).join("-");
189
+ // Map our audio encoding to Google's enum
190
+ const audioEncodingMap = {
191
+ MP3: "MP3",
192
+ LINEAR16: "LINEAR16",
193
+ OGG_OPUS: "OGG_OPUS",
194
+ };
195
+ // Single API call with timepoint tracking enabled
196
+ const responseArray = await this.client.synthesizeSpeech({
197
+ input: { ssml },
198
+ voice: {
199
+ languageCode,
200
+ name: voice,
201
+ },
202
+ audioConfig: {
203
+ audioEncoding: audioEncodingMap[this.audioEncoding],
204
+ sampleRateHertz: request.sampleRate || 24000,
205
+ },
206
+ enableTimePointing: [
207
+ protos.google.cloud.texttospeech.v1beta1.SynthesizeSpeechRequest
208
+ .TimepointType.SSML_MARK,
209
+ ],
210
+ });
211
+ const response = responseArray[0];
212
+ if (!response.audioContent) {
213
+ throw new Error("No audio content received from Google Cloud TTS");
214
+ }
215
+ // Convert Uint8Array to Buffer
216
+ const audioBuffer = Buffer.from(response.audioContent);
217
+ const contentTypeMap = {
218
+ MP3: "audio/mpeg",
219
+ LINEAR16: "audio/wav",
220
+ OGG_OPUS: "audio/ogg",
221
+ };
222
+ // Extract speech marks from timepoints
223
+ const speechMarks = this.extractSpeechMarksFromTimepoints(response.timepoints || [], wordMap);
224
+ if (this.enableLogging) {
225
+ console.log(`[GoogleCloudTTS] Extracted ${speechMarks.length} speech marks`);
226
+ }
227
+ return {
228
+ audio: audioBuffer,
229
+ contentType: contentTypeMap[this.audioEncoding],
230
+ speechMarks,
231
+ };
232
+ }
233
+ /**
234
+ * Inject SSML marks before each word in plain text
235
+ */
236
+ injectSSMLMarks(text) {
237
+ const words = [];
238
+ const wordRegex = /\b[\w']+\b/g;
239
+ let match;
240
+ let markIndex = 0;
241
+ while ((match = wordRegex.exec(text)) !== null) {
242
+ const word = match[0];
243
+ const start = match.index;
244
+ const end = start + word.length;
245
+ const markName = `w${markIndex++}`;
246
+ words.push({ word, start, end, markName });
247
+ }
248
+ // Build SSML with marks
249
+ let ssml = "<speak>";
250
+ let lastEnd = 0;
251
+ for (const { word, start, end, markName } of words) {
252
+ // Add text before word (including whitespace and punctuation)
253
+ ssml += this.escapeSSML(text.slice(lastEnd, start));
254
+ // Add marked word
255
+ ssml += `<mark name="${markName}"/>${this.escapeSSML(word)}`;
256
+ lastEnd = end;
257
+ }
258
+ // Add remaining text
259
+ ssml += this.escapeSSML(text.slice(lastEnd)) + "</speak>";
260
+ return { ssml, wordMap: words };
261
+ }
262
+ /**
263
+ * Extract words from existing SSML (simplified version for v1)
264
+ */
265
+ extractWordsFromSSML(ssmlText) {
266
+ // For now, just strip SSML tags and inject marks
267
+ // More sophisticated SSML parsing can be added in future versions
268
+ const plainText = ssmlText
269
+ .replace(/<[^>]+>/g, " ") // Remove all tags
270
+ .replace(/\s+/g, " ") // Normalize whitespace
271
+ .trim();
272
+ return this.injectSSMLMarks(plainText);
273
+ }
274
+ /**
275
+ * Escape special XML characters for SSML
276
+ */
277
+ escapeSSML(text) {
278
+ return text
279
+ .replace(/&/g, "&amp;")
280
+ .replace(/</g, "&lt;")
281
+ .replace(/>/g, "&gt;")
282
+ .replace(/"/g, "&quot;")
283
+ .replace(/'/g, "&apos;");
284
+ }
285
+ /**
286
+ * Extract speech marks from Google's timepoints
287
+ */
288
+ extractSpeechMarksFromTimepoints(timepoints, wordMap) {
289
+ if (!timepoints || timepoints.length === 0) {
290
+ return [];
291
+ }
292
+ const speechMarks = [];
293
+ for (const timepoint of timepoints) {
294
+ // Find corresponding word in our map
295
+ const wordInfo = wordMap.find((w) => w.markName === timepoint.markName);
296
+ if (wordInfo &&
297
+ timepoint.timeSeconds !== undefined &&
298
+ timepoint.timeSeconds !== null) {
299
+ speechMarks.push({
300
+ time: Math.round(timepoint.timeSeconds * 1000), // Convert to ms
301
+ type: "word",
302
+ start: wordInfo.start,
303
+ end: wordInfo.end,
304
+ value: wordInfo.word,
305
+ });
306
+ }
307
+ }
308
+ // Sort by time
309
+ return speechMarks.sort((a, b) => a.time - b.time);
310
+ }
311
+ /**
312
+ * Detect if text contains SSML markup
313
+ */
314
+ detectSSML(text) {
315
+ return (text.includes("<speak") ||
316
+ text.includes("<prosody") ||
317
+ text.includes("<emphasis") ||
318
+ text.includes("<break") ||
319
+ text.includes("<phoneme") ||
320
+ text.includes("<say-as") ||
321
+ text.includes("<mark"));
322
+ }
323
+ /**
324
+ * Get available voices from Google Cloud TTS
325
+ */
326
+ async getVoices(options) {
327
+ this.ensureInitialized();
328
+ try {
329
+ const [response] = await this.client.listVoices({
330
+ languageCode: options?.language,
331
+ });
332
+ if (!response.voices) {
333
+ return [];
334
+ }
335
+ return response.voices
336
+ .map((voice) => this.mapGoogleVoiceToVoice(voice))
337
+ .filter((voice) => {
338
+ // Apply filters
339
+ if (options?.gender && voice.gender !== options.gender) {
340
+ return false;
341
+ }
342
+ if (options?.quality && voice.quality !== options.quality) {
343
+ return false;
344
+ }
345
+ return true;
346
+ });
347
+ }
348
+ catch (error) {
349
+ throw new TTSError(TTSErrorCode.PROVIDER_ERROR, `Failed to get voices: ${error instanceof Error ? error.message : String(error)}`, { error }, this.providerId);
350
+ }
351
+ }
352
+ /**
353
+ * Map Google Cloud voice to unified Voice interface
354
+ */
355
+ mapGoogleVoiceToVoice(googleVoice) {
356
+ const voiceName = googleVoice.name || "";
357
+ // Determine quality based on voice type
358
+ let quality = "standard";
359
+ if (voiceName.includes("Wavenet")) {
360
+ quality = "neural";
361
+ }
362
+ else if (voiceName.includes("Studio")) {
363
+ quality = "premium";
364
+ }
365
+ // Map SSML gender to our gender type
366
+ const genderMap = {
367
+ MALE: "male",
368
+ FEMALE: "female",
369
+ NEUTRAL: "neutral",
370
+ };
371
+ const gender = genderMap[googleVoice.ssmlGender || "NEUTRAL"] || "neutral";
372
+ return {
373
+ id: voiceName,
374
+ name: voiceName,
375
+ language: googleVoice.languageCodes?.[0] || "Unknown",
376
+ languageCode: googleVoice.languageCodes?.[0] || "",
377
+ gender,
378
+ quality,
379
+ supportedFeatures: {
380
+ ssml: true,
381
+ emotions: false, // Google doesn't have built-in emotions
382
+ styles: false, // Google doesn't have speaking styles
383
+ },
384
+ providerMetadata: {
385
+ naturalSampleRateHertz: googleVoice.naturalSampleRateHertz,
386
+ languageCodes: googleVoice.languageCodes,
387
+ ssmlGender: googleVoice.ssmlGender,
388
+ },
389
+ };
390
+ }
391
+ /**
392
+ * Get Google Cloud TTS capabilities
393
+ */
394
+ getCapabilities() {
395
+ return {
396
+ // W3C Standard features
397
+ standard: {
398
+ supportsSSML: true, // ✅ Full SSML 1.1 support
399
+ supportsPitch: true, // ✅ Via SSML <prosody pitch>
400
+ supportsRate: true, // ✅ Via SSML <prosody rate>
401
+ supportsVolume: false, // ❌ Not supported (handle client-side)
402
+ supportsMultipleVoices: true, // ✅ 200+ voices across 50+ languages
403
+ maxTextLength: 5000, // Google Cloud TTS limit per request
404
+ },
405
+ // Provider-specific extensions
406
+ extensions: {
407
+ supportsSpeechMarks: true, // ✅ Via SSML marks + timepoints
408
+ supportedFormats: ["mp3", "wav", "ogg"], // MP3, LINEAR16, OGG_OPUS
409
+ supportsSampleRate: true, // ✅ Configurable sample rate
410
+ // Google Cloud-specific features
411
+ providerSpecific: {
412
+ voiceTypes: ["standard", "wavenet", "studio"],
413
+ voicesCount: 200, // ~200+ voices available
414
+ languagesCount: 50, // 50+ languages supported
415
+ supportsAudioProfiles: true, // Audio device profiles
416
+ supportsEffects: false, // No built-in effects
417
+ supportsEmotions: false, // No emotion control
418
+ supportsStyles: false, // No speaking styles
419
+ },
420
+ },
421
+ };
422
+ }
423
+ /**
424
+ * Map Google Cloud errors to TTSError codes
425
+ */
426
+ mapGoogleErrorToTTSError(error) {
427
+ const message = error.message || String(error);
428
+ // Check for specific Google Cloud error codes
429
+ if (error.code === 7) {
430
+ // PERMISSION_DENIED
431
+ return new TTSError(TTSErrorCode.AUTHENTICATION_ERROR, `Google Cloud authentication failed: ${message}`, { error }, this.providerId);
432
+ }
433
+ if (error.code === 8) {
434
+ // RESOURCE_EXHAUSTED
435
+ return new TTSError(TTSErrorCode.RATE_LIMIT_EXCEEDED, `Google Cloud rate limit exceeded: ${message}`, { error }, this.providerId);
436
+ }
437
+ if (error.code === 3) {
438
+ // INVALID_ARGUMENT
439
+ return new TTSError(TTSErrorCode.INVALID_REQUEST, `Invalid request to Google Cloud TTS: ${message}`, { error }, this.providerId);
440
+ }
441
+ // Default to provider error
442
+ return new TTSError(TTSErrorCode.PROVIDER_ERROR, `Google Cloud TTS error: ${message}`, { error }, this.providerId);
443
+ }
444
+ /**
445
+ * Clean up Google Cloud TTS client
446
+ */
447
+ async destroy() {
448
+ if (this.client) {
449
+ await this.client.close();
450
+ }
451
+ await super.destroy();
452
+ }
453
+ }
454
+ //# sourceMappingURL=GoogleCloudTTSProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GoogleCloudTTSProvider.js","sourceRoot":"","sources":["../src/GoogleCloudTTSProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Google Cloud Text-to-Speech server-side TTS provider
3
+ * @module @pie-players/tts-server-google
4
+ */
5
+ export type { GoogleCloudTTSConfig } from "./GoogleCloudTTSProvider.js";
6
+ export { GoogleCloudTTSProvider } from "./GoogleCloudTTSProvider.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Google Cloud Text-to-Speech server-side TTS provider
3
+ * @module @pie-players/tts-server-google
4
+ */
5
+ export { GoogleCloudTTSProvider } from "./GoogleCloudTTSProvider.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC"}