@mastra/voice-speechify 0.1.3-alpha.9 → 0.1.4-alpha.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.
- package/dist/index.cjs +5 -1
- package/dist/index.js +5 -1
- package/package.json +15 -12
- package/.turbo/turbo-build.log +0 -23
- package/CHANGELOG.md +0 -230
- package/eslint.config.js +0 -6
- package/src/index.test.ts +0 -101
- package/src/index.ts +0 -104
- package/src/voices.ts +0 -711
- package/tsconfig.json +0 -5
- package/vitest.config.ts +0 -8
package/dist/index.cjs
CHANGED
|
@@ -746,7 +746,11 @@ var SpeechifyVoice = class extends voice.MastraVoice {
|
|
|
746
746
|
async streamToString(stream) {
|
|
747
747
|
const chunks = [];
|
|
748
748
|
for await (const chunk of stream) {
|
|
749
|
-
|
|
749
|
+
if (typeof chunk === "string") {
|
|
750
|
+
chunks.push(Buffer.from(chunk));
|
|
751
|
+
} else {
|
|
752
|
+
chunks.push(chunk);
|
|
753
|
+
}
|
|
750
754
|
}
|
|
751
755
|
return Buffer.concat(chunks).toString("utf-8");
|
|
752
756
|
}
|
package/dist/index.js
CHANGED
|
@@ -744,7 +744,11 @@ var SpeechifyVoice = class extends MastraVoice {
|
|
|
744
744
|
async streamToString(stream) {
|
|
745
745
|
const chunks = [];
|
|
746
746
|
for await (const chunk of stream) {
|
|
747
|
-
|
|
747
|
+
if (typeof chunk === "string") {
|
|
748
|
+
chunks.push(Buffer.from(chunk));
|
|
749
|
+
} else {
|
|
750
|
+
chunks.push(chunk);
|
|
751
|
+
}
|
|
748
752
|
}
|
|
749
753
|
return Buffer.concat(chunks).toString("utf-8");
|
|
750
754
|
}
|
package/package.json
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/voice-speechify",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4-alpha.0",
|
|
4
4
|
"description": "Mastra Speechify voice integration",
|
|
5
5
|
"type": "module",
|
|
6
|
+
"files": [
|
|
7
|
+
"dist"
|
|
8
|
+
],
|
|
6
9
|
"main": "dist/index.js",
|
|
7
10
|
"types": "dist/index.d.ts",
|
|
8
11
|
"exports": {
|
|
@@ -19,21 +22,21 @@
|
|
|
19
22
|
"./package.json": "./package.json"
|
|
20
23
|
},
|
|
21
24
|
"dependencies": {
|
|
22
|
-
"@speechify/api-sdk": "^2.
|
|
23
|
-
"zod": "^3.24.
|
|
24
|
-
"@mastra/core": "^0.5.
|
|
25
|
+
"@speechify/api-sdk": "^2.4.1",
|
|
26
|
+
"zod": "^3.24.2",
|
|
27
|
+
"@mastra/core": "^0.5.1-alpha.0"
|
|
25
28
|
},
|
|
26
29
|
"devDependencies": {
|
|
27
|
-
"@microsoft/api-extractor": "^7.
|
|
28
|
-
"@types/node": "^22.13.
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"@internal/lint": "0.0.
|
|
30
|
+
"@microsoft/api-extractor": "^7.52.1",
|
|
31
|
+
"@types/node": "^22.13.10",
|
|
32
|
+
"eslint": "^9.22.0",
|
|
33
|
+
"tsup": "^8.4.0",
|
|
34
|
+
"typescript": "^5.8.2",
|
|
35
|
+
"vitest": "^2.1.9",
|
|
36
|
+
"@internal/lint": "0.0.1"
|
|
34
37
|
},
|
|
35
38
|
"scripts": {
|
|
36
|
-
"build": "tsup src/index.ts --format esm,cjs --experimental-dts --clean --treeshake",
|
|
39
|
+
"build": "tsup src/index.ts --format esm,cjs --experimental-dts --clean --treeshake=smallest --splitting",
|
|
37
40
|
"build:watch": "pnpm build --watch",
|
|
38
41
|
"lint": "eslint .",
|
|
39
42
|
"test": "vitest run"
|
package/.turbo/turbo-build.log
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
> @mastra/voice-speechify@0.1.3-alpha.9 build /home/runner/work/mastra/mastra/voice/speechify
|
|
3
|
-
> tsup src/index.ts --format esm,cjs --experimental-dts --clean --treeshake
|
|
4
|
-
|
|
5
|
-
[34mCLI[39m Building entry: src/index.ts
|
|
6
|
-
[34mCLI[39m Using tsconfig: tsconfig.json
|
|
7
|
-
[34mCLI[39m tsup v8.3.6
|
|
8
|
-
[34mTSC[39m Build start
|
|
9
|
-
[32mTSC[39m ⚡️ Build success in 6577ms
|
|
10
|
-
[34mDTS[39m Build start
|
|
11
|
-
[34mCLI[39m Target: es2022
|
|
12
|
-
Analysis will use the bundled TypeScript version 5.7.3
|
|
13
|
-
[36mWriting package typings: /home/runner/work/mastra/mastra/voice/speechify/dist/_tsup-dts-rollup.d.ts[39m
|
|
14
|
-
Analysis will use the bundled TypeScript version 5.7.3
|
|
15
|
-
[36mWriting package typings: /home/runner/work/mastra/mastra/voice/speechify/dist/_tsup-dts-rollup.d.cts[39m
|
|
16
|
-
[32mDTS[39m ⚡️ Build success in 9652ms
|
|
17
|
-
[34mCLI[39m Cleaning output folder
|
|
18
|
-
[34mESM[39m Build start
|
|
19
|
-
[34mCJS[39m Build start
|
|
20
|
-
[32mCJS[39m [1mdist/index.cjs [22m[32m10.31 KB[39m
|
|
21
|
-
[32mCJS[39m ⚡️ Build success in 515ms
|
|
22
|
-
[32mESM[39m [1mdist/index.js [22m[32m10.28 KB[39m
|
|
23
|
-
[32mESM[39m ⚡️ Build success in 523ms
|
package/CHANGELOG.md
DELETED
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
# @mastra/voice-speechify
|
|
2
|
-
|
|
3
|
-
## 0.1.3-alpha.9
|
|
4
|
-
|
|
5
|
-
### Patch Changes
|
|
6
|
-
|
|
7
|
-
- Updated dependencies [e9fbac5]
|
|
8
|
-
- Updated dependencies [1e8bcbc]
|
|
9
|
-
- Updated dependencies [aeb5e36]
|
|
10
|
-
- Updated dependencies [f2301de]
|
|
11
|
-
- @mastra/core@0.5.0-alpha.9
|
|
12
|
-
|
|
13
|
-
## 0.1.3-alpha.8
|
|
14
|
-
|
|
15
|
-
### Patch Changes
|
|
16
|
-
|
|
17
|
-
- Updated dependencies [506f1d5]
|
|
18
|
-
- @mastra/core@0.5.0-alpha.8
|
|
19
|
-
|
|
20
|
-
## 0.1.3-alpha.7
|
|
21
|
-
|
|
22
|
-
### Patch Changes
|
|
23
|
-
|
|
24
|
-
- Updated dependencies [ee667a2]
|
|
25
|
-
- @mastra/core@0.5.0-alpha.7
|
|
26
|
-
|
|
27
|
-
## 0.1.3-alpha.6
|
|
28
|
-
|
|
29
|
-
### Patch Changes
|
|
30
|
-
|
|
31
|
-
- Updated dependencies [f6678e4]
|
|
32
|
-
- @mastra/core@0.5.0-alpha.6
|
|
33
|
-
|
|
34
|
-
## 0.1.3-alpha.5
|
|
35
|
-
|
|
36
|
-
### Patch Changes
|
|
37
|
-
|
|
38
|
-
- Updated dependencies [22643eb]
|
|
39
|
-
- Updated dependencies [6feb23f]
|
|
40
|
-
- Updated dependencies [f2d6727]
|
|
41
|
-
- Updated dependencies [301e4ee]
|
|
42
|
-
- Updated dependencies [dfbe4e9]
|
|
43
|
-
- Updated dependencies [9e81f35]
|
|
44
|
-
- Updated dependencies [caefaa2]
|
|
45
|
-
- Updated dependencies [c151ae6]
|
|
46
|
-
- Updated dependencies [52e0418]
|
|
47
|
-
- Updated dependencies [03236ec]
|
|
48
|
-
- Updated dependencies [3764e71]
|
|
49
|
-
- Updated dependencies [df982db]
|
|
50
|
-
- Updated dependencies [0461849]
|
|
51
|
-
- Updated dependencies [2259379]
|
|
52
|
-
- Updated dependencies [358f069]
|
|
53
|
-
- @mastra/core@0.5.0-alpha.5
|
|
54
|
-
|
|
55
|
-
## 0.1.3-alpha.4
|
|
56
|
-
|
|
57
|
-
### Patch Changes
|
|
58
|
-
|
|
59
|
-
- Updated dependencies [d79aedf]
|
|
60
|
-
- @mastra/core@0.5.0-alpha.4
|
|
61
|
-
|
|
62
|
-
## 0.1.3-alpha.3
|
|
63
|
-
|
|
64
|
-
### Patch Changes
|
|
65
|
-
|
|
66
|
-
- Updated dependencies [3d0e290]
|
|
67
|
-
- @mastra/core@0.5.0-alpha.3
|
|
68
|
-
|
|
69
|
-
## 0.1.3-alpha.2
|
|
70
|
-
|
|
71
|
-
### Patch Changes
|
|
72
|
-
|
|
73
|
-
- Updated dependencies [02ffb7b]
|
|
74
|
-
- @mastra/core@0.5.0-alpha.2
|
|
75
|
-
|
|
76
|
-
## 0.1.3-alpha.1
|
|
77
|
-
|
|
78
|
-
### Patch Changes
|
|
79
|
-
|
|
80
|
-
- Updated dependencies [dab255b]
|
|
81
|
-
- @mastra/core@0.5.0-alpha.1
|
|
82
|
-
|
|
83
|
-
## 0.1.3-alpha.0
|
|
84
|
-
|
|
85
|
-
### Patch Changes
|
|
86
|
-
|
|
87
|
-
- Updated dependencies [59df7b6]
|
|
88
|
-
- Updated dependencies [29f3a82]
|
|
89
|
-
- Updated dependencies [59df7b6]
|
|
90
|
-
- Updated dependencies [c139344]
|
|
91
|
-
- @mastra/core@0.5.0-alpha.0
|
|
92
|
-
|
|
93
|
-
## 0.1.2
|
|
94
|
-
|
|
95
|
-
### Patch Changes
|
|
96
|
-
|
|
97
|
-
- Updated dependencies [1da20e7]
|
|
98
|
-
- @mastra/core@0.4.4
|
|
99
|
-
|
|
100
|
-
## 0.1.2-alpha.0
|
|
101
|
-
|
|
102
|
-
### Patch Changes
|
|
103
|
-
|
|
104
|
-
- Updated dependencies [1da20e7]
|
|
105
|
-
- @mastra/core@0.4.4-alpha.0
|
|
106
|
-
|
|
107
|
-
## 0.1.1
|
|
108
|
-
|
|
109
|
-
### Patch Changes
|
|
110
|
-
|
|
111
|
-
- bb4f447: Add support for commonjs
|
|
112
|
-
- Updated dependencies [0d185b1]
|
|
113
|
-
- Updated dependencies [ed55f1d]
|
|
114
|
-
- Updated dependencies [06aa827]
|
|
115
|
-
- Updated dependencies [0fd78ac]
|
|
116
|
-
- Updated dependencies [2512a93]
|
|
117
|
-
- Updated dependencies [e62de74]
|
|
118
|
-
- Updated dependencies [0d25b75]
|
|
119
|
-
- Updated dependencies [fd14a3f]
|
|
120
|
-
- Updated dependencies [8d13b14]
|
|
121
|
-
- Updated dependencies [3f369a2]
|
|
122
|
-
- Updated dependencies [3ee4831]
|
|
123
|
-
- Updated dependencies [4d4e1e1]
|
|
124
|
-
- Updated dependencies [bb4f447]
|
|
125
|
-
- Updated dependencies [108793c]
|
|
126
|
-
- Updated dependencies [5f28f44]
|
|
127
|
-
- Updated dependencies [dabecf4]
|
|
128
|
-
- @mastra/core@0.4.3
|
|
129
|
-
|
|
130
|
-
## 0.1.1-alpha.4
|
|
131
|
-
|
|
132
|
-
### Patch Changes
|
|
133
|
-
|
|
134
|
-
- Updated dependencies [dabecf4]
|
|
135
|
-
- @mastra/core@0.4.3-alpha.4
|
|
136
|
-
|
|
137
|
-
## 0.1.1-alpha.3
|
|
138
|
-
|
|
139
|
-
### Patch Changes
|
|
140
|
-
|
|
141
|
-
- bb4f447: Add support for commonjs
|
|
142
|
-
- Updated dependencies [0fd78ac]
|
|
143
|
-
- Updated dependencies [0d25b75]
|
|
144
|
-
- Updated dependencies [fd14a3f]
|
|
145
|
-
- Updated dependencies [3f369a2]
|
|
146
|
-
- Updated dependencies [4d4e1e1]
|
|
147
|
-
- Updated dependencies [bb4f447]
|
|
148
|
-
- @mastra/core@0.4.3-alpha.3
|
|
149
|
-
|
|
150
|
-
## 0.1.1-alpha.2
|
|
151
|
-
|
|
152
|
-
### Patch Changes
|
|
153
|
-
|
|
154
|
-
- Updated dependencies [2512a93]
|
|
155
|
-
- Updated dependencies [e62de74]
|
|
156
|
-
- @mastra/core@0.4.3-alpha.2
|
|
157
|
-
|
|
158
|
-
## 0.1.1-alpha.1
|
|
159
|
-
|
|
160
|
-
### Patch Changes
|
|
161
|
-
|
|
162
|
-
- Updated dependencies [0d185b1]
|
|
163
|
-
- Updated dependencies [ed55f1d]
|
|
164
|
-
- Updated dependencies [8d13b14]
|
|
165
|
-
- Updated dependencies [3ee4831]
|
|
166
|
-
- Updated dependencies [108793c]
|
|
167
|
-
- Updated dependencies [5f28f44]
|
|
168
|
-
- @mastra/core@0.4.3-alpha.1
|
|
169
|
-
|
|
170
|
-
## 0.1.1-alpha.0
|
|
171
|
-
|
|
172
|
-
### Patch Changes
|
|
173
|
-
|
|
174
|
-
- Updated dependencies [06aa827]
|
|
175
|
-
- @mastra/core@0.4.3-alpha.0
|
|
176
|
-
|
|
177
|
-
## 0.1.0
|
|
178
|
-
|
|
179
|
-
### Patch Changes
|
|
180
|
-
|
|
181
|
-
- f477df7: deprecate @mastra/speech-speechify for @mastra/voice-speechify
|
|
182
|
-
- Updated dependencies [7fceae1]
|
|
183
|
-
- Updated dependencies [8d94c3e]
|
|
184
|
-
- Updated dependencies [99dcdb5]
|
|
185
|
-
- Updated dependencies [6cb63e0]
|
|
186
|
-
- Updated dependencies [f626fbb]
|
|
187
|
-
- Updated dependencies [e752340]
|
|
188
|
-
- Updated dependencies [eb91535]
|
|
189
|
-
- @mastra/core@0.4.2
|
|
190
|
-
|
|
191
|
-
## 0.1.0-alpha.4
|
|
192
|
-
|
|
193
|
-
### Patch Changes
|
|
194
|
-
|
|
195
|
-
- Updated dependencies [8d94c3e]
|
|
196
|
-
- Updated dependencies [99dcdb5]
|
|
197
|
-
- Updated dependencies [e752340]
|
|
198
|
-
- Updated dependencies [eb91535]
|
|
199
|
-
- @mastra/core@0.4.2-alpha.2
|
|
200
|
-
|
|
201
|
-
## 0.1.0-alpha.3
|
|
202
|
-
|
|
203
|
-
### Patch Changes
|
|
204
|
-
|
|
205
|
-
- Updated dependencies [6cb63e0]
|
|
206
|
-
- @mastra/core@0.4.2-alpha.1
|
|
207
|
-
|
|
208
|
-
## 0.1.0-alpha.2
|
|
209
|
-
|
|
210
|
-
### Patch Changes
|
|
211
|
-
|
|
212
|
-
- f477df7: deprecate @mastra/speech-speechify for @mastra/voice-speechify
|
|
213
|
-
|
|
214
|
-
## 0.1.0 (2024-XX-XX)
|
|
215
|
-
|
|
216
|
-
This package replaces the deprecated @mastra/speech-speechify package. All functionality has been migrated to this new package with a more consistent naming scheme.
|
|
217
|
-
|
|
218
|
-
### Changes from @mastra/speech-speechify
|
|
219
|
-
|
|
220
|
-
- Package renamed from @mastra/speech-speechify to @mastra/voice-speechify
|
|
221
|
-
- API changes:
|
|
222
|
-
- `SpeechifyTTS` class renamed to `SpeechifyVoice`
|
|
223
|
-
- `generate()` and `stream()` methods combined into `speak()`
|
|
224
|
-
- `voices()` method renamed to `getSpeakers()`
|
|
225
|
-
- Constructor configuration simplified
|
|
226
|
-
- Added support for text stream input
|
|
227
|
-
- All core functionality remains the same
|
|
228
|
-
- Import paths should be updated from '@mastra/speech-speechify' to '@mastra/voice-speechify'
|
|
229
|
-
|
|
230
|
-
For a complete history of changes prior to the rename, please see the changelog of the original package.
|
package/eslint.config.js
DELETED
package/src/index.test.ts
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import { writeFileSync, mkdirSync } from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import { Readable } from 'stream';
|
|
4
|
-
import { describe, expect, it, beforeAll } from 'vitest';
|
|
5
|
-
|
|
6
|
-
import { SpeechifyVoice } from './index';
|
|
7
|
-
|
|
8
|
-
describe('SpeechifyVoice Integration Tests', () => {
|
|
9
|
-
let voice: SpeechifyVoice;
|
|
10
|
-
const outputDir = path.join(process.cwd(), 'test-outputs');
|
|
11
|
-
|
|
12
|
-
beforeAll(() => {
|
|
13
|
-
// Create output directory if it doesn't exist
|
|
14
|
-
try {
|
|
15
|
-
mkdirSync(outputDir, { recursive: true });
|
|
16
|
-
} catch (err) {
|
|
17
|
-
console.error('Failed to create output directory', err);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
voice = new SpeechifyVoice({
|
|
21
|
-
speechModel: {
|
|
22
|
-
name: 'simba-multilingual',
|
|
23
|
-
},
|
|
24
|
-
speaker: 'george',
|
|
25
|
-
});
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
describe('voices', () => {
|
|
29
|
-
it('should list available voices', async () => {
|
|
30
|
-
const voices = await voice.getSpeakers();
|
|
31
|
-
expect(voices).toBeInstanceOf(Array);
|
|
32
|
-
expect(voices.length).toBeGreaterThan(0);
|
|
33
|
-
expect(voices[0]).toHaveProperty('voiceId');
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
describe('speech', () => {
|
|
38
|
-
it('should generate audio and save to file from text input', async () => {
|
|
39
|
-
const result = await voice.speak('Hello from Mastra Voice - Speechify');
|
|
40
|
-
const outputPath = path.join(outputDir, 'speechify-speech-test.mp3');
|
|
41
|
-
const chunks: Buffer[] = [];
|
|
42
|
-
for await (const chunk of result) {
|
|
43
|
-
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
const audioBuffer = Buffer.concat(chunks);
|
|
47
|
-
expect(audioBuffer.length).toBeGreaterThan(0);
|
|
48
|
-
writeFileSync(outputPath, audioBuffer);
|
|
49
|
-
}, 10000);
|
|
50
|
-
|
|
51
|
-
it('should work with different parameters', async () => {
|
|
52
|
-
const result = await voice.speak('Test with parameters', { speaker: 'george' });
|
|
53
|
-
const chunks: Buffer[] = [];
|
|
54
|
-
for await (const chunk of result) {
|
|
55
|
-
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
56
|
-
}
|
|
57
|
-
const audioBuffer = Buffer.concat(chunks);
|
|
58
|
-
const outputPath = path.join(outputDir, 'speechify-speech-test-params.mp3');
|
|
59
|
-
writeFileSync(outputPath, audioBuffer);
|
|
60
|
-
}, 10000);
|
|
61
|
-
|
|
62
|
-
it('should generate audio from a stream input', async () => {
|
|
63
|
-
const inputStream = Readable.from(['Hello from stream input - Speechify']);
|
|
64
|
-
const result = await voice.speak(inputStream);
|
|
65
|
-
const chunks: Buffer[] = [];
|
|
66
|
-
for await (const chunk of result) {
|
|
67
|
-
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
const audioBuffer = Buffer.concat(chunks);
|
|
71
|
-
expect(audioBuffer.length).toBeGreaterThan(0);
|
|
72
|
-
const outputPath = path.join(outputDir, 'speechify-speech-test-stream.mp3');
|
|
73
|
-
writeFileSync(outputPath, audioBuffer);
|
|
74
|
-
}, 10000);
|
|
75
|
-
|
|
76
|
-
it('should generate audio using default SpeechifyVoice instance', async () => {
|
|
77
|
-
const defaultVoice = new SpeechifyVoice();
|
|
78
|
-
const result = await defaultVoice.speak('Hello from default SpeechifyVoice instance');
|
|
79
|
-
const chunks: Buffer[] = [];
|
|
80
|
-
for await (const chunk of result) {
|
|
81
|
-
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
const audioBuffer = Buffer.concat(chunks);
|
|
85
|
-
expect(audioBuffer.length).toBeGreaterThan(0);
|
|
86
|
-
const outputPath = path.join(outputDir, 'speechify-speech-test-default.mp3');
|
|
87
|
-
writeFileSync(outputPath, audioBuffer);
|
|
88
|
-
}, 10000);
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
// Error cases
|
|
92
|
-
describe('error handling', () => {
|
|
93
|
-
it('should handle empty text', async () => {
|
|
94
|
-
await expect(voice.speak('')).rejects.toThrow();
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
it('should handle invalid voice', async () => {
|
|
98
|
-
await expect(voice.speak('Test', { speaker: 'invalid_voice' })).rejects.toThrow();
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
});
|
package/src/index.ts
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { Readable } from 'stream';
|
|
2
|
-
|
|
3
|
-
import { MastraVoice } from '@mastra/core/voice';
|
|
4
|
-
import { Speechify } from '@speechify/api-sdk';
|
|
5
|
-
import type { AudioStreamRequest, VoiceModelName } from '@speechify/api-sdk';
|
|
6
|
-
|
|
7
|
-
import { SPEECHIFY_VOICES } from './voices';
|
|
8
|
-
import type { SpeechifyVoiceId } from './voices';
|
|
9
|
-
|
|
10
|
-
interface SpeechifyConfig {
|
|
11
|
-
name?: VoiceModelName;
|
|
12
|
-
apiKey?: string;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export class SpeechifyVoice extends MastraVoice {
|
|
16
|
-
private client: Speechify;
|
|
17
|
-
|
|
18
|
-
constructor({ speechModel, speaker }: { speechModel?: SpeechifyConfig; speaker?: SpeechifyVoiceId } = {}) {
|
|
19
|
-
super({
|
|
20
|
-
speechModel: {
|
|
21
|
-
name: speechModel?.name ?? 'simba-english',
|
|
22
|
-
apiKey: speechModel?.apiKey ?? process.env.SPEECHIFY_API_KEY,
|
|
23
|
-
},
|
|
24
|
-
speaker: speaker ?? 'george',
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
const apiKey = speechModel?.apiKey ?? process.env.SPEECHIFY_API_KEY;
|
|
28
|
-
if (!apiKey) {
|
|
29
|
-
throw new Error('SPEECHIFY_API_KEY is not set');
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
this.client = new Speechify({ apiKey });
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
async getSpeakers() {
|
|
36
|
-
return this.traced(
|
|
37
|
-
() =>
|
|
38
|
-
SPEECHIFY_VOICES.map(voice => ({
|
|
39
|
-
voiceId: voice,
|
|
40
|
-
name: voice,
|
|
41
|
-
})),
|
|
42
|
-
'voice.speechify.voices',
|
|
43
|
-
)();
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
private async streamToString(stream: NodeJS.ReadableStream): Promise<string> {
|
|
47
|
-
const chunks: Buffer[] = [];
|
|
48
|
-
for await (const chunk of stream) {
|
|
49
|
-
chunks.push(Buffer.from(chunk));
|
|
50
|
-
}
|
|
51
|
-
return Buffer.concat(chunks).toString('utf-8');
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
async speak(
|
|
55
|
-
input: string | NodeJS.ReadableStream,
|
|
56
|
-
options?: {
|
|
57
|
-
speaker?: string;
|
|
58
|
-
} & Omit<AudioStreamRequest, 'voiceId' | 'input'>,
|
|
59
|
-
): Promise<NodeJS.ReadableStream> {
|
|
60
|
-
const text = typeof input === 'string' ? input : await this.streamToString(input);
|
|
61
|
-
|
|
62
|
-
return this.traced(async () => {
|
|
63
|
-
const request: AudioStreamRequest = {
|
|
64
|
-
input: text,
|
|
65
|
-
model: (options?.model || this.speechModel?.name) as VoiceModelName,
|
|
66
|
-
voiceId: (options?.speaker || this.speaker) as SpeechifyVoiceId,
|
|
67
|
-
...options,
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
const webStream = await this.client.audioStream(request);
|
|
71
|
-
const reader = webStream.getReader();
|
|
72
|
-
|
|
73
|
-
const nodeStream = new Readable({
|
|
74
|
-
read: async function () {
|
|
75
|
-
try {
|
|
76
|
-
const { done, value } = await reader.read();
|
|
77
|
-
if (done) {
|
|
78
|
-
this.push(null);
|
|
79
|
-
} else {
|
|
80
|
-
this.push(value);
|
|
81
|
-
}
|
|
82
|
-
} catch (error) {
|
|
83
|
-
this.destroy(error as Error);
|
|
84
|
-
}
|
|
85
|
-
},
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
nodeStream.on('end', () => {
|
|
89
|
-
reader.releaseLock();
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
return nodeStream;
|
|
93
|
-
}, 'voice.speechify.speak')();
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
async listen(
|
|
97
|
-
_input: NodeJS.ReadableStream,
|
|
98
|
-
_options?: Record<string, unknown>,
|
|
99
|
-
): Promise<string | NodeJS.ReadableStream> {
|
|
100
|
-
throw new Error('Speechify does not support speech recognition');
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
export type { SpeechifyConfig, SpeechifyVoiceId };
|
package/src/voices.ts
DELETED
|
@@ -1,711 +0,0 @@
|
|
|
1
|
-
export const SPEECHIFY_VOICES = [
|
|
2
|
-
'henry',
|
|
3
|
-
'bwyneth',
|
|
4
|
-
'carly',
|
|
5
|
-
'kristy',
|
|
6
|
-
'oliver',
|
|
7
|
-
'tasha',
|
|
8
|
-
'joe',
|
|
9
|
-
'lisa',
|
|
10
|
-
'george',
|
|
11
|
-
'emily',
|
|
12
|
-
'rob',
|
|
13
|
-
'russell',
|
|
14
|
-
'benjamin',
|
|
15
|
-
'michael',
|
|
16
|
-
'kim',
|
|
17
|
-
'ankit',
|
|
18
|
-
'arun',
|
|
19
|
-
'carol',
|
|
20
|
-
'helen',
|
|
21
|
-
'julie',
|
|
22
|
-
'linda',
|
|
23
|
-
'mark',
|
|
24
|
-
'nick',
|
|
25
|
-
'elijah',
|
|
26
|
-
'beverly',
|
|
27
|
-
'collin',
|
|
28
|
-
'erin',
|
|
29
|
-
'jack',
|
|
30
|
-
'jesse',
|
|
31
|
-
'ken',
|
|
32
|
-
'lindsey',
|
|
33
|
-
'monica',
|
|
34
|
-
'phil',
|
|
35
|
-
'ron',
|
|
36
|
-
'stacy',
|
|
37
|
-
'archie',
|
|
38
|
-
'evelyn',
|
|
39
|
-
'freddie',
|
|
40
|
-
'harper',
|
|
41
|
-
'jacob',
|
|
42
|
-
'james',
|
|
43
|
-
'mason',
|
|
44
|
-
'victoria',
|
|
45
|
-
'christina',
|
|
46
|
-
'douglas',
|
|
47
|
-
'lauren',
|
|
48
|
-
'patricia',
|
|
49
|
-
'jennifer',
|
|
50
|
-
'robert',
|
|
51
|
-
'peter',
|
|
52
|
-
'jeremy',
|
|
53
|
-
'barbara',
|
|
54
|
-
'susan',
|
|
55
|
-
'charles',
|
|
56
|
-
'harold',
|
|
57
|
-
'sarah',
|
|
58
|
-
'karen',
|
|
59
|
-
'anthony',
|
|
60
|
-
'donald',
|
|
61
|
-
'paul',
|
|
62
|
-
'steven',
|
|
63
|
-
'andrew',
|
|
64
|
-
'kenneth',
|
|
65
|
-
'joshua',
|
|
66
|
-
'betty',
|
|
67
|
-
'margaret',
|
|
68
|
-
'kyle',
|
|
69
|
-
'edward',
|
|
70
|
-
'ronald',
|
|
71
|
-
'timothy',
|
|
72
|
-
'sandra',
|
|
73
|
-
'dorothy',
|
|
74
|
-
'jeffrey',
|
|
75
|
-
'kimberly',
|
|
76
|
-
'donna',
|
|
77
|
-
'walter',
|
|
78
|
-
'megan',
|
|
79
|
-
'richard',
|
|
80
|
-
'amanda',
|
|
81
|
-
'melissa',
|
|
82
|
-
'deborah',
|
|
83
|
-
'gary',
|
|
84
|
-
'rebecca',
|
|
85
|
-
'sharon',
|
|
86
|
-
'cynthia',
|
|
87
|
-
'kathleen',
|
|
88
|
-
'joan',
|
|
89
|
-
'shirley',
|
|
90
|
-
'angela',
|
|
91
|
-
'anna',
|
|
92
|
-
'brenda',
|
|
93
|
-
'larry',
|
|
94
|
-
'keith',
|
|
95
|
-
'scott',
|
|
96
|
-
'pamela',
|
|
97
|
-
'samuel',
|
|
98
|
-
'gregory',
|
|
99
|
-
'samantha',
|
|
100
|
-
'katherine',
|
|
101
|
-
'christine',
|
|
102
|
-
'frank',
|
|
103
|
-
'alexander',
|
|
104
|
-
'raymond',
|
|
105
|
-
'debra',
|
|
106
|
-
'patrick',
|
|
107
|
-
'catherine',
|
|
108
|
-
'carolyn',
|
|
109
|
-
'janet',
|
|
110
|
-
'ruth',
|
|
111
|
-
'zachary',
|
|
112
|
-
'heather',
|
|
113
|
-
'diane',
|
|
114
|
-
'dennis',
|
|
115
|
-
'jerry',
|
|
116
|
-
'tyler',
|
|
117
|
-
'aaron',
|
|
118
|
-
'virginia',
|
|
119
|
-
'joyce',
|
|
120
|
-
'judith',
|
|
121
|
-
'kelly',
|
|
122
|
-
'nathan',
|
|
123
|
-
'terry',
|
|
124
|
-
'carl',
|
|
125
|
-
'gerald',
|
|
126
|
-
'jaqueline',
|
|
127
|
-
'cheryl',
|
|
128
|
-
'christian',
|
|
129
|
-
'rohit',
|
|
130
|
-
'gloria',
|
|
131
|
-
'arthur',
|
|
132
|
-
'austin',
|
|
133
|
-
'sean',
|
|
134
|
-
'martha',
|
|
135
|
-
'randy',
|
|
136
|
-
'ralph',
|
|
137
|
-
'roy',
|
|
138
|
-
'alan',
|
|
139
|
-
'logan',
|
|
140
|
-
'willie',
|
|
141
|
-
'kathryn',
|
|
142
|
-
'frances',
|
|
143
|
-
'madison',
|
|
144
|
-
'bruce',
|
|
145
|
-
'billy',
|
|
146
|
-
'jordan',
|
|
147
|
-
'bryan',
|
|
148
|
-
'dylan',
|
|
149
|
-
'vincent',
|
|
150
|
-
'eugene',
|
|
151
|
-
'janice',
|
|
152
|
-
'jean',
|
|
153
|
-
'abigail',
|
|
154
|
-
'alice',
|
|
155
|
-
'bobby',
|
|
156
|
-
'julia',
|
|
157
|
-
'johnny',
|
|
158
|
-
'judy',
|
|
159
|
-
'bradley',
|
|
160
|
-
'hunter',
|
|
161
|
-
'dale',
|
|
162
|
-
'howard',
|
|
163
|
-
'fred',
|
|
164
|
-
'danielle',
|
|
165
|
-
'marilyn',
|
|
166
|
-
'blake',
|
|
167
|
-
'doris',
|
|
168
|
-
'denise',
|
|
169
|
-
'issac',
|
|
170
|
-
'theresa',
|
|
171
|
-
'natalie',
|
|
172
|
-
'aiden',
|
|
173
|
-
'brittany',
|
|
174
|
-
'charlotte',
|
|
175
|
-
'marie',
|
|
176
|
-
'kayla',
|
|
177
|
-
'alexis',
|
|
178
|
-
'lori',
|
|
179
|
-
'landon',
|
|
180
|
-
'tiffany',
|
|
181
|
-
'marcus',
|
|
182
|
-
'martin',
|
|
183
|
-
'curtis',
|
|
184
|
-
'kathy',
|
|
185
|
-
'todd',
|
|
186
|
-
'leonard',
|
|
187
|
-
'calvin',
|
|
188
|
-
'rose',
|
|
189
|
-
'ava',
|
|
190
|
-
'bonnie',
|
|
191
|
-
'peggy',
|
|
192
|
-
'edwin',
|
|
193
|
-
'don',
|
|
194
|
-
'ruby',
|
|
195
|
-
'crystal',
|
|
196
|
-
'craig',
|
|
197
|
-
'norma',
|
|
198
|
-
'paula',
|
|
199
|
-
'annie',
|
|
200
|
-
'shawn',
|
|
201
|
-
'lillian',
|
|
202
|
-
'robin',
|
|
203
|
-
'evan',
|
|
204
|
-
'garrette',
|
|
205
|
-
'francis',
|
|
206
|
-
'danny',
|
|
207
|
-
'stanley',
|
|
208
|
-
'lucy',
|
|
209
|
-
'jeffery',
|
|
210
|
-
'herbert',
|
|
211
|
-
'lee',
|
|
212
|
-
'april',
|
|
213
|
-
'anne',
|
|
214
|
-
'tammy',
|
|
215
|
-
'trevor',
|
|
216
|
-
'eleanor',
|
|
217
|
-
'regina',
|
|
218
|
-
'carrie',
|
|
219
|
-
'leah',
|
|
220
|
-
'beth',
|
|
221
|
-
'cody',
|
|
222
|
-
'shane',
|
|
223
|
-
'dana',
|
|
224
|
-
'allison',
|
|
225
|
-
'dawn',
|
|
226
|
-
'julian',
|
|
227
|
-
'wendy',
|
|
228
|
-
'travis',
|
|
229
|
-
'florence',
|
|
230
|
-
'tracy',
|
|
231
|
-
'adrian',
|
|
232
|
-
'phillis',
|
|
233
|
-
'carole',
|
|
234
|
-
'mildred',
|
|
235
|
-
'cameron',
|
|
236
|
-
'chad',
|
|
237
|
-
'connie',
|
|
238
|
-
'gladys',
|
|
239
|
-
'arlene',
|
|
240
|
-
'jana',
|
|
241
|
-
'leona',
|
|
242
|
-
'miriam',
|
|
243
|
-
'lorrie',
|
|
244
|
-
'velma',
|
|
245
|
-
'eduardo',
|
|
246
|
-
'bennie',
|
|
247
|
-
'rene',
|
|
248
|
-
'ed',
|
|
249
|
-
'stuart',
|
|
250
|
-
'terrence',
|
|
251
|
-
'delbert',
|
|
252
|
-
'colin',
|
|
253
|
-
'susanne',
|
|
254
|
-
'hugo',
|
|
255
|
-
'ignacio',
|
|
256
|
-
'sheldon',
|
|
257
|
-
'josefina',
|
|
258
|
-
'corinne',
|
|
259
|
-
'lana',
|
|
260
|
-
'cherry',
|
|
261
|
-
'erick',
|
|
262
|
-
'frankie',
|
|
263
|
-
'stewart',
|
|
264
|
-
'claudette',
|
|
265
|
-
'doyle',
|
|
266
|
-
'darrel',
|
|
267
|
-
'janine',
|
|
268
|
-
'simone',
|
|
269
|
-
'casey',
|
|
270
|
-
'leta',
|
|
271
|
-
'rogelio',
|
|
272
|
-
'lorraine',
|
|
273
|
-
'terence',
|
|
274
|
-
'santiago',
|
|
275
|
-
'alonzo',
|
|
276
|
-
'benny',
|
|
277
|
-
'elisa',
|
|
278
|
-
'dee',
|
|
279
|
-
'bert',
|
|
280
|
-
'elbert',
|
|
281
|
-
'charmaine',
|
|
282
|
-
'roslyn',
|
|
283
|
-
'shelley',
|
|
284
|
-
'ramiro',
|
|
285
|
-
'noel',
|
|
286
|
-
'mercedes',
|
|
287
|
-
'christie',
|
|
288
|
-
'laurel',
|
|
289
|
-
'spencer',
|
|
290
|
-
'pat',
|
|
291
|
-
'dorthy',
|
|
292
|
-
'jeanie',
|
|
293
|
-
'clare',
|
|
294
|
-
'aileen',
|
|
295
|
-
'grady',
|
|
296
|
-
'deana',
|
|
297
|
-
'cornelius',
|
|
298
|
-
'cecelia',
|
|
299
|
-
'maryann',
|
|
300
|
-
'rolando',
|
|
301
|
-
'lamar',
|
|
302
|
-
'susana',
|
|
303
|
-
'katharine',
|
|
304
|
-
'clay',
|
|
305
|
-
'liza',
|
|
306
|
-
'jerri',
|
|
307
|
-
'rochelle',
|
|
308
|
-
'cathy',
|
|
309
|
-
'percy',
|
|
310
|
-
'dexter',
|
|
311
|
-
'maribel',
|
|
312
|
-
'rosemarie',
|
|
313
|
-
'bradford',
|
|
314
|
-
'kari',
|
|
315
|
-
'nikki',
|
|
316
|
-
'bernadette',
|
|
317
|
-
'eugenia',
|
|
318
|
-
'merie',
|
|
319
|
-
'darie',
|
|
320
|
-
'amon',
|
|
321
|
-
'moses',
|
|
322
|
-
'concetta',
|
|
323
|
-
'irvin',
|
|
324
|
-
'rodolfo',
|
|
325
|
-
'christi',
|
|
326
|
-
'roman',
|
|
327
|
-
'janie',
|
|
328
|
-
'marcy',
|
|
329
|
-
'lindy',
|
|
330
|
-
'tommie',
|
|
331
|
-
'darnell',
|
|
332
|
-
'randal',
|
|
333
|
-
'selena',
|
|
334
|
-
'shari',
|
|
335
|
-
'antoinette',
|
|
336
|
-
'timmy',
|
|
337
|
-
'darrin',
|
|
338
|
-
'margo',
|
|
339
|
-
'sherri',
|
|
340
|
-
'erika',
|
|
341
|
-
'robbie',
|
|
342
|
-
'marcella',
|
|
343
|
-
'lela',
|
|
344
|
-
'winston',
|
|
345
|
-
'jeannine',
|
|
346
|
-
'brendan',
|
|
347
|
-
'christa',
|
|
348
|
-
'deloris',
|
|
349
|
-
'toby',
|
|
350
|
-
'elva',
|
|
351
|
-
'van',
|
|
352
|
-
'abel',
|
|
353
|
-
'myron',
|
|
354
|
-
'gracie',
|
|
355
|
-
'gwen',
|
|
356
|
-
'melba',
|
|
357
|
-
'boyd',
|
|
358
|
-
'shawna',
|
|
359
|
-
'courtney',
|
|
360
|
-
'marlena',
|
|
361
|
-
'cathie',
|
|
362
|
-
'ramesh',
|
|
363
|
-
'rita',
|
|
364
|
-
'joel',
|
|
365
|
-
'derek',
|
|
366
|
-
'earl',
|
|
367
|
-
'brett',
|
|
368
|
-
'ellis',
|
|
369
|
-
'ian',
|
|
370
|
-
'oscar',
|
|
371
|
-
'edna',
|
|
372
|
-
'ethel',
|
|
373
|
-
'gene',
|
|
374
|
-
'shannon',
|
|
375
|
-
'sheila',
|
|
376
|
-
'dustin',
|
|
377
|
-
'ellen',
|
|
378
|
-
'hilda',
|
|
379
|
-
'ray',
|
|
380
|
-
'marjorie',
|
|
381
|
-
'sylvia',
|
|
382
|
-
'barry',
|
|
383
|
-
'melvin',
|
|
384
|
-
'thelma',
|
|
385
|
-
'cindy',
|
|
386
|
-
'miranda',
|
|
387
|
-
'bernard',
|
|
388
|
-
'carlton',
|
|
389
|
-
'juanita',
|
|
390
|
-
'darrell',
|
|
391
|
-
'erik',
|
|
392
|
-
'jeremiah',
|
|
393
|
-
'nicolas',
|
|
394
|
-
'gordon',
|
|
395
|
-
'violet',
|
|
396
|
-
'mona',
|
|
397
|
-
'glen',
|
|
398
|
-
'willis',
|
|
399
|
-
'harvey',
|
|
400
|
-
'rudolph',
|
|
401
|
-
'preston',
|
|
402
|
-
'cole',
|
|
403
|
-
'june',
|
|
404
|
-
'pauline',
|
|
405
|
-
'leo',
|
|
406
|
-
'earnest',
|
|
407
|
-
'devin',
|
|
408
|
-
'audrey',
|
|
409
|
-
'claire',
|
|
410
|
-
'vivian',
|
|
411
|
-
'goldie',
|
|
412
|
-
'tommy',
|
|
413
|
-
'allen',
|
|
414
|
-
'glenn',
|
|
415
|
-
'wilson',
|
|
416
|
-
'jill',
|
|
417
|
-
'loretta',
|
|
418
|
-
'mabel',
|
|
419
|
-
'marsha',
|
|
420
|
-
'lillie',
|
|
421
|
-
'minnie',
|
|
422
|
-
'essie',
|
|
423
|
-
'madge',
|
|
424
|
-
'viola',
|
|
425
|
-
'nellie',
|
|
426
|
-
'pearl',
|
|
427
|
-
'marvin',
|
|
428
|
-
'mae',
|
|
429
|
-
'levi',
|
|
430
|
-
'lucille',
|
|
431
|
-
'hazel',
|
|
432
|
-
'nathaniel',
|
|
433
|
-
'lydia',
|
|
434
|
-
'bertha',
|
|
435
|
-
'ursula',
|
|
436
|
-
'kay',
|
|
437
|
-
'sue',
|
|
438
|
-
'dean',
|
|
439
|
-
'verna',
|
|
440
|
-
'teri',
|
|
441
|
-
'edith',
|
|
442
|
-
'dan',
|
|
443
|
-
'lewis',
|
|
444
|
-
'harriett',
|
|
445
|
-
'clifford',
|
|
446
|
-
'genevieve',
|
|
447
|
-
'colleen',
|
|
448
|
-
'gilbert',
|
|
449
|
-
'patrice',
|
|
450
|
-
'jared',
|
|
451
|
-
'elaine',
|
|
452
|
-
'maureen',
|
|
453
|
-
'edmund',
|
|
454
|
-
'nina',
|
|
455
|
-
'georgia',
|
|
456
|
-
'garrett',
|
|
457
|
-
'renee',
|
|
458
|
-
'bessie',
|
|
459
|
-
'leslie',
|
|
460
|
-
'max',
|
|
461
|
-
'leon',
|
|
462
|
-
'fannie',
|
|
463
|
-
'lowell',
|
|
464
|
-
'veronica',
|
|
465
|
-
'vanessa',
|
|
466
|
-
'joy',
|
|
467
|
-
'jim',
|
|
468
|
-
'faith',
|
|
469
|
-
'valerie',
|
|
470
|
-
'wanda',
|
|
471
|
-
'steve',
|
|
472
|
-
'naomi',
|
|
473
|
-
'miles',
|
|
474
|
-
'marcia',
|
|
475
|
-
'brent',
|
|
476
|
-
'clinton',
|
|
477
|
-
'jon',
|
|
478
|
-
'marshall',
|
|
479
|
-
'roberta',
|
|
480
|
-
'alexandra',
|
|
481
|
-
'doreen',
|
|
482
|
-
'daisy',
|
|
483
|
-
'della',
|
|
484
|
-
'minerva',
|
|
485
|
-
'cedric',
|
|
486
|
-
'patsy',
|
|
487
|
-
'kerry',
|
|
488
|
-
'lena',
|
|
489
|
-
'gregg',
|
|
490
|
-
'lois',
|
|
491
|
-
'kurt',
|
|
492
|
-
'lorene',
|
|
493
|
-
'susie',
|
|
494
|
-
'nora',
|
|
495
|
-
'lucinda',
|
|
496
|
-
'mathew',
|
|
497
|
-
'flora',
|
|
498
|
-
'rosie',
|
|
499
|
-
'sherman',
|
|
500
|
-
'lance',
|
|
501
|
-
'darcy',
|
|
502
|
-
'mattie',
|
|
503
|
-
'madeline',
|
|
504
|
-
'sylvester',
|
|
505
|
-
'cory',
|
|
506
|
-
'anita',
|
|
507
|
-
'allan',
|
|
508
|
-
'lula',
|
|
509
|
-
'nell',
|
|
510
|
-
'priscilla',
|
|
511
|
-
'kristin',
|
|
512
|
-
'rosemary',
|
|
513
|
-
'roosevelt',
|
|
514
|
-
'geneva',
|
|
515
|
-
'jeannette',
|
|
516
|
-
'bob',
|
|
517
|
-
'esther',
|
|
518
|
-
'michele',
|
|
519
|
-
'forrest',
|
|
520
|
-
'wilbert',
|
|
521
|
-
'cathleen',
|
|
522
|
-
'jaime',
|
|
523
|
-
'dwayne',
|
|
524
|
-
'inez',
|
|
525
|
-
'alberto',
|
|
526
|
-
'lynne',
|
|
527
|
-
'maxine',
|
|
528
|
-
'wilma',
|
|
529
|
-
'taylor',
|
|
530
|
-
'angelina',
|
|
531
|
-
'hope',
|
|
532
|
-
'margie',
|
|
533
|
-
'myrtle',
|
|
534
|
-
'misty',
|
|
535
|
-
'jimmie',
|
|
536
|
-
'eunice',
|
|
537
|
-
'everett',
|
|
538
|
-
'miracle',
|
|
539
|
-
'billie',
|
|
540
|
-
'leland',
|
|
541
|
-
'jackie',
|
|
542
|
-
'kristina',
|
|
543
|
-
'johnnie',
|
|
544
|
-
'isaac',
|
|
545
|
-
'bobbie',
|
|
546
|
-
'tonya',
|
|
547
|
-
'reba',
|
|
548
|
-
'kristine',
|
|
549
|
-
'amelia',
|
|
550
|
-
'cassandra',
|
|
551
|
-
'angie',
|
|
552
|
-
'maude',
|
|
553
|
-
'nichole',
|
|
554
|
-
'marguerite',
|
|
555
|
-
'justine',
|
|
556
|
-
'kelli',
|
|
557
|
-
'mandy',
|
|
558
|
-
'jeri',
|
|
559
|
-
'darla',
|
|
560
|
-
'shelia',
|
|
561
|
-
'jacquelin',
|
|
562
|
-
'cara',
|
|
563
|
-
'kellie',
|
|
564
|
-
'jolene',
|
|
565
|
-
'chelsea',
|
|
566
|
-
'autumn',
|
|
567
|
-
'glenda',
|
|
568
|
-
'lolita',
|
|
569
|
-
'jeanne',
|
|
570
|
-
'sherrie',
|
|
571
|
-
'toni',
|
|
572
|
-
'becky',
|
|
573
|
-
'jennie',
|
|
574
|
-
'jenna',
|
|
575
|
-
'leigh',
|
|
576
|
-
'cristina',
|
|
577
|
-
'blanche',
|
|
578
|
-
'clarissa',
|
|
579
|
-
'betsy',
|
|
580
|
-
'bridget',
|
|
581
|
-
'ginger',
|
|
582
|
-
'faye',
|
|
583
|
-
'candice',
|
|
584
|
-
'jaclyn',
|
|
585
|
-
'krista',
|
|
586
|
-
'marisa',
|
|
587
|
-
'gayle',
|
|
588
|
-
'meredith',
|
|
589
|
-
'angelica',
|
|
590
|
-
'rachael',
|
|
591
|
-
'candy',
|
|
592
|
-
'trisha',
|
|
593
|
-
'sandy',
|
|
594
|
-
'holly',
|
|
595
|
-
'alicia',
|
|
596
|
-
'melinda',
|
|
597
|
-
'geraldine',
|
|
598
|
-
'tara',
|
|
599
|
-
'isabel',
|
|
600
|
-
'adrienne',
|
|
601
|
-
'terra',
|
|
602
|
-
'rubye',
|
|
603
|
-
'antonia',
|
|
604
|
-
'guadalupe',
|
|
605
|
-
'cheri',
|
|
606
|
-
'janelle',
|
|
607
|
-
'constance',
|
|
608
|
-
'robyn',
|
|
609
|
-
'jodi',
|
|
610
|
-
'krystal',
|
|
611
|
-
'rosalie',
|
|
612
|
-
'deanna',
|
|
613
|
-
'debbie',
|
|
614
|
-
'josie',
|
|
615
|
-
'ronda',
|
|
616
|
-
'paulette',
|
|
617
|
-
'belinda',
|
|
618
|
-
'alton',
|
|
619
|
-
'rudy',
|
|
620
|
-
'kelvin',
|
|
621
|
-
'damon',
|
|
622
|
-
'johnathan',
|
|
623
|
-
'cesar',
|
|
624
|
-
'ira',
|
|
625
|
-
'horace',
|
|
626
|
-
'grant',
|
|
627
|
-
'lionel',
|
|
628
|
-
'wilbur',
|
|
629
|
-
'jake',
|
|
630
|
-
'jody',
|
|
631
|
-
'rickey',
|
|
632
|
-
'lester',
|
|
633
|
-
'pablo',
|
|
634
|
-
'neal',
|
|
635
|
-
'mack',
|
|
636
|
-
'orlando',
|
|
637
|
-
'alfonso',
|
|
638
|
-
'ernesto',
|
|
639
|
-
'rex',
|
|
640
|
-
'lynn',
|
|
641
|
-
'matt',
|
|
642
|
-
'lyle',
|
|
643
|
-
'kristopher',
|
|
644
|
-
'hubert',
|
|
645
|
-
'kenny',
|
|
646
|
-
'doug',
|
|
647
|
-
'sammy',
|
|
648
|
-
'homer',
|
|
649
|
-
'wendell',
|
|
650
|
-
'woodrow',
|
|
651
|
-
'felipe',
|
|
652
|
-
'garry',
|
|
653
|
-
'pete',
|
|
654
|
-
'marco',
|
|
655
|
-
'rufus',
|
|
656
|
-
'owen',
|
|
657
|
-
'bryant',
|
|
658
|
-
'abraham',
|
|
659
|
-
'irving',
|
|
660
|
-
'jermaine',
|
|
661
|
-
'julius',
|
|
662
|
-
'marty',
|
|
663
|
-
'alejandro',
|
|
664
|
-
'carmen',
|
|
665
|
-
'carlos',
|
|
666
|
-
'celia',
|
|
667
|
-
'lucas',
|
|
668
|
-
'luiza',
|
|
669
|
-
'diogo',
|
|
670
|
-
'agueda',
|
|
671
|
-
'raphael',
|
|
672
|
-
'elise',
|
|
673
|
-
'frederick',
|
|
674
|
-
'andra',
|
|
675
|
-
'frederik',
|
|
676
|
-
'freja',
|
|
677
|
-
'daan',
|
|
678
|
-
'lotte',
|
|
679
|
-
'eino',
|
|
680
|
-
'helmi',
|
|
681
|
-
'jakob',
|
|
682
|
-
'frida',
|
|
683
|
-
'kostas',
|
|
684
|
-
'eleni',
|
|
685
|
-
'lazzaro',
|
|
686
|
-
'alessia',
|
|
687
|
-
'mart',
|
|
688
|
-
'liis',
|
|
689
|
-
'trinh',
|
|
690
|
-
'thoa',
|
|
691
|
-
'lesya',
|
|
692
|
-
'taras',
|
|
693
|
-
'mikhail',
|
|
694
|
-
'olga',
|
|
695
|
-
'axel',
|
|
696
|
-
'ebba',
|
|
697
|
-
'hemant',
|
|
698
|
-
'priya',
|
|
699
|
-
'aicha',
|
|
700
|
-
'ismail',
|
|
701
|
-
'moshe',
|
|
702
|
-
'inbar',
|
|
703
|
-
'gil',
|
|
704
|
-
'lital',
|
|
705
|
-
'yusuf',
|
|
706
|
-
'elif',
|
|
707
|
-
'dominika',
|
|
708
|
-
'michal',
|
|
709
|
-
] as const;
|
|
710
|
-
|
|
711
|
-
export type SpeechifyVoiceId = (typeof SPEECHIFY_VOICES)[number];
|
package/tsconfig.json
DELETED