@speech-sdk/core 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Speech SDK
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/@speech-sdk/core)
|
|
4
|
+
[](https://www.npmjs.com/package/@speech-sdk/core)
|
|
5
|
+
[](https://github.com/Jellypod-Inc/speech-sdk/blob/main/LICENSE)
|
|
6
|
+
|
|
3
7
|
The Speech SDK is a lightweight, provider-agnostic TypeScript toolkit designed to help build text-to-speech powered applications using popular providers like OpenAI, ElevenLabs, Deepgram, Cartesia, Google, and more. Cross-platform (Node.js, Edge, Browser) with minimal dependencies.
|
|
4
8
|
|
|
5
9
|
To learn more about the Speech SDK, check out [https://speechsdk.dev/](https://speechsdk.dev/).
|
|
@@ -187,6 +191,7 @@ console.log(result.warnings); // undefined — eleven_v3 supports all tags
|
|
|
187
191
|
|---|---|
|
|
188
192
|
| OpenAI (`gpt-4o-mini-tts`) | Tags mapped to the `instructions` field for expressive delivery control |
|
|
189
193
|
| ElevenLabs (`eleven_v3`) | All `[tag]` passed through natively |
|
|
194
|
+
| Google (`gemini-3.1-flash-tts-preview`) | All `[tag]` passed through natively (e.g. `[whispers]`, `[shouting]`, `[sighs]`, `[laugh]`) |
|
|
190
195
|
| Cartesia (`sonic-3`) | Emotion tags (`[happy]`, `[sad]`, `[angry]`, etc.) converted to SSML; `[laughter]` passed through; unknown tags stripped |
|
|
191
196
|
| All others | Tags stripped and warnings returned |
|
|
192
197
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ResolvedModel, type SpeechProvider } from "../../speech-provider.js";
|
|
2
2
|
export interface GoogleSpeechProviderConfig {
|
|
3
3
|
apiKey?: string;
|
|
4
4
|
baseURL?: string;
|
|
@@ -7,7 +7,13 @@ export interface GoogleSpeechProviderConfig {
|
|
|
7
7
|
export declare class GoogleSpeechProvider implements SpeechProvider<string, string> {
|
|
8
8
|
readonly id = "google";
|
|
9
9
|
readonly defaultModel = "gemini-2.5-flash-preview-tts";
|
|
10
|
+
private static readonly GEMINI_LANGUAGES;
|
|
10
11
|
readonly models: readonly [{
|
|
12
|
+
readonly id: "gemini-3.1-flash-tts-preview";
|
|
13
|
+
readonly releaseDate: "2026-04-15";
|
|
14
|
+
readonly languages: readonly ["en", "fr", "de", "es", "pt", "zh", "ja", "ko", "hi", "it", "nl", "pl", "ru", "sv", "tr", "id", "ar", "cs", "da", "fi", "el", "hu", "ro", "uk"];
|
|
15
|
+
readonly features: readonly ["streaming", "audio-tags"];
|
|
16
|
+
}, {
|
|
11
17
|
readonly id: "gemini-2.5-flash-preview-tts";
|
|
12
18
|
readonly releaseDate: "2025-05-01";
|
|
13
19
|
readonly languages: readonly ["en", "fr", "de", "es", "pt", "zh", "ja", "ko", "hi", "it", "nl", "pl", "ru", "sv", "tr", "id", "ar", "cs", "da", "fi", "el", "hu", "ro", "uk"];
|
|
@@ -22,6 +28,10 @@ export declare class GoogleSpeechProvider implements SpeechProvider<string, stri
|
|
|
22
28
|
private readonly baseURL;
|
|
23
29
|
private readonly fetchFn;
|
|
24
30
|
constructor(config: GoogleSpeechProviderConfig);
|
|
31
|
+
processAudioTags(text: string, modelId: string): {
|
|
32
|
+
text: string;
|
|
33
|
+
warnings: string[];
|
|
34
|
+
};
|
|
25
35
|
generate(options: {
|
|
26
36
|
modelId: string;
|
|
27
37
|
text: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/google/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/google/index.ts"],"names":[],"mappings":"AASA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,0BAA0B,CAAC;AA+DlC,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAED,qBAAa,oBAAqB,YAAW,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;IACzE,QAAQ,CAAC,EAAE,YAAY;IACvB,QAAQ,CAAC,YAAY,kCAAkC;IAEvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAyB7B;IAEX,QAAQ,CAAC,MAAM;;;;;;;;;;;;;;;OAmBJ;IAEX,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;gBAEtC,MAAM,EAAE,0BAA0B;IAU9C,gBAAgB,CACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE;IASjC,QAAQ,CAAC,OAAO,EAAE;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,GAAG,OAAO,CAAC;QACV,KAAK,EAAE,UAAU,CAAC;QAClB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,SAAS,EAAE,MAAM,CAAC;QAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC5C,CAAC;IAgFI,MAAM,CAAC,OAAO,EAAE;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,GAAG,OAAO,CAAC;QACV,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;QACnC,SAAS,EAAE,MAAM,CAAC;QAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC5C,CAAC;CAUH;AAED,wBAAgB,YAAY,CAAC,MAAM,GAAE,0BAA+B,IAG3C,UAAU,MAAM,KAAG,aAAa,CAAC,MAAM,CAAC,CAMhE"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { BufferTarget, EncodedAudioPacketSource, EncodedPacket, Output, WavOutputFormat, } from "mediabunny";
|
|
2
|
+
import { stripAudioTags } from "../../audio-tags.js";
|
|
2
3
|
import { handleErrorResponse, resolveApiKey } from "../../provider-utils.js";
|
|
4
|
+
import { hasFeature, } from "../../speech-provider.js";
|
|
3
5
|
const DEFAULT_GEMINI_SAMPLE_RATE = 24_000;
|
|
4
6
|
// biome-ignore lint/performance/useTopLevelRegex: single-use parser
|
|
5
7
|
const RATE_PARAM = /(?:^|;)\s*rate=(\d+)/i;
|
|
@@ -55,67 +57,49 @@ async function pcmToWav(pcm, sampleRate) {
|
|
|
55
57
|
export class GoogleSpeechProvider {
|
|
56
58
|
id = "google";
|
|
57
59
|
defaultModel = "gemini-2.5-flash-preview-tts";
|
|
60
|
+
static GEMINI_LANGUAGES = [
|
|
61
|
+
"en",
|
|
62
|
+
"fr",
|
|
63
|
+
"de",
|
|
64
|
+
"es",
|
|
65
|
+
"pt",
|
|
66
|
+
"zh",
|
|
67
|
+
"ja",
|
|
68
|
+
"ko",
|
|
69
|
+
"hi",
|
|
70
|
+
"it",
|
|
71
|
+
"nl",
|
|
72
|
+
"pl",
|
|
73
|
+
"ru",
|
|
74
|
+
"sv",
|
|
75
|
+
"tr",
|
|
76
|
+
"id",
|
|
77
|
+
"ar",
|
|
78
|
+
"cs",
|
|
79
|
+
"da",
|
|
80
|
+
"fi",
|
|
81
|
+
"el",
|
|
82
|
+
"hu",
|
|
83
|
+
"ro",
|
|
84
|
+
"uk",
|
|
85
|
+
];
|
|
58
86
|
models = [
|
|
87
|
+
{
|
|
88
|
+
id: "gemini-3.1-flash-tts-preview",
|
|
89
|
+
releaseDate: "2026-04-15",
|
|
90
|
+
languages: GoogleSpeechProvider.GEMINI_LANGUAGES,
|
|
91
|
+
features: ["streaming", "audio-tags"],
|
|
92
|
+
},
|
|
59
93
|
{
|
|
60
94
|
id: "gemini-2.5-flash-preview-tts",
|
|
61
95
|
releaseDate: "2025-05-01",
|
|
62
|
-
languages:
|
|
63
|
-
"en",
|
|
64
|
-
"fr",
|
|
65
|
-
"de",
|
|
66
|
-
"es",
|
|
67
|
-
"pt",
|
|
68
|
-
"zh",
|
|
69
|
-
"ja",
|
|
70
|
-
"ko",
|
|
71
|
-
"hi",
|
|
72
|
-
"it",
|
|
73
|
-
"nl",
|
|
74
|
-
"pl",
|
|
75
|
-
"ru",
|
|
76
|
-
"sv",
|
|
77
|
-
"tr",
|
|
78
|
-
"id",
|
|
79
|
-
"ar",
|
|
80
|
-
"cs",
|
|
81
|
-
"da",
|
|
82
|
-
"fi",
|
|
83
|
-
"el",
|
|
84
|
-
"hu",
|
|
85
|
-
"ro",
|
|
86
|
-
"uk",
|
|
87
|
-
],
|
|
96
|
+
languages: GoogleSpeechProvider.GEMINI_LANGUAGES,
|
|
88
97
|
features: ["streaming"],
|
|
89
98
|
},
|
|
90
99
|
{
|
|
91
100
|
id: "gemini-2.5-pro-preview-tts",
|
|
92
101
|
releaseDate: "2025-05-01",
|
|
93
|
-
languages:
|
|
94
|
-
"en",
|
|
95
|
-
"fr",
|
|
96
|
-
"de",
|
|
97
|
-
"es",
|
|
98
|
-
"pt",
|
|
99
|
-
"zh",
|
|
100
|
-
"ja",
|
|
101
|
-
"ko",
|
|
102
|
-
"hi",
|
|
103
|
-
"it",
|
|
104
|
-
"nl",
|
|
105
|
-
"pl",
|
|
106
|
-
"ru",
|
|
107
|
-
"sv",
|
|
108
|
-
"tr",
|
|
109
|
-
"id",
|
|
110
|
-
"ar",
|
|
111
|
-
"cs",
|
|
112
|
-
"da",
|
|
113
|
-
"fi",
|
|
114
|
-
"el",
|
|
115
|
-
"hu",
|
|
116
|
-
"ro",
|
|
117
|
-
"uk",
|
|
118
|
-
],
|
|
102
|
+
languages: GoogleSpeechProvider.GEMINI_LANGUAGES,
|
|
119
103
|
features: ["streaming"],
|
|
120
104
|
},
|
|
121
105
|
];
|
|
@@ -128,6 +112,15 @@ export class GoogleSpeechProvider {
|
|
|
128
112
|
config.baseURL ?? "https://generativelanguage.googleapis.com/v1beta";
|
|
129
113
|
this.fetchFn = config.fetch ?? globalThis.fetch.bind(globalThis);
|
|
130
114
|
}
|
|
115
|
+
// Gemini 3.1 Flash TTS supports inline audio tags (e.g. [whispers],
|
|
116
|
+
// [shouting], [sighs], [laugh]) natively — pass them through verbatim.
|
|
117
|
+
// Older Gemini TTS models do not, so strip them with a warning.
|
|
118
|
+
processAudioTags(text, modelId) {
|
|
119
|
+
if (this.models.some((m) => m.id === modelId && hasFeature(m, "audio-tags"))) {
|
|
120
|
+
return { text, warnings: [] };
|
|
121
|
+
}
|
|
122
|
+
return stripAudioTags(text, `google/${modelId}`);
|
|
123
|
+
}
|
|
131
124
|
async generate(options) {
|
|
132
125
|
const apiKey = resolveApiKey(this.apiKey, "GOOGLE_API_KEY", "Google");
|
|
133
126
|
const voiceName = options.voice ?? "Kore";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/google/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,aAAa,EACb,MAAM,EACN,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/google/index.ts"],"names":[],"mappings":"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"}
|