├── .gitignore
├── LICENSE
├── README.md
├── index.html
├── index.js
├── style.css
├── text2meljs
├── group1-shard10of30.bin
├── group1-shard11of30.bin
├── group1-shard12of30.bin
├── group1-shard13of30.bin
├── group1-shard14of30.bin
├── group1-shard15of30.bin
├── group1-shard16of30.bin
├── group1-shard17of30.bin
├── group1-shard18of30.bin
├── group1-shard19of30.bin
├── group1-shard1of30.bin
├── group1-shard20of30.bin
├── group1-shard21of30.bin
├── group1-shard22of30.bin
├── group1-shard23of30.bin
├── group1-shard24of30.bin
├── group1-shard25of30.bin
├── group1-shard26of30.bin
├── group1-shard27of30.bin
├── group1-shard28of30.bin
├── group1-shard29of30.bin
├── group1-shard2of30.bin
├── group1-shard30of30.bin
├── group1-shard3of30.bin
├── group1-shard4of30.bin
├── group1-shard5of30.bin
├── group1-shard6of30.bin
├── group1-shard7of30.bin
├── group1-shard8of30.bin
├── group1-shard9of30.bin
└── model.json
├── text2meljstiny
├── group1-shard1of8.bin
├── group1-shard2of8.bin
├── group1-shard3of8.bin
├── group1-shard4of8.bin
├── group1-shard5of8.bin
├── group1-shard6of8.bin
├── group1-shard7of8.bin
├── group1-shard8of8.bin
└── model.json
├── vocoderjs
├── group1-shard1of3.bin
├── group1-shard2of3.bin
├── group1-shard3of3.bin
└── model.json
└── vocoderjstiny
├── group1-shard1of1.bin
└── model.json
/.gitignore:
--------------------------------------------------------------------------------
1 | .python-version
2 | venv/
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Taylor
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | TensorflowTTS in Tensorflow.js
2 | ==============================
3 | A simple port of [TensorflowTTS][TensorflowTTS]'s FastSpeech2 and MB-MelGAN LJSpeech models.
4 |
5 | `-tiny` models are used by default. They use the maximum compression strength in `tensorflowjs-wizard`.
6 |
7 | Licensing
8 | ---------
9 | All code is MIT licensed. **Models are not MIT licensed. See the [TensorflowTTS][TensorflowTTS] page for model licensing information.**
10 |
11 | [TensorflowTTS]: https://github.com/TensorSpeech/TensorflowTTS
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | TensorflowTTS in Tensorflow.js
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | TensorflowTTS in Tensorflow.js
15 |
16 |
17 |
18 | Speak
19 |
20 |
21 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | tf.enableProdMode()
2 |
3 | const text2mel = tf.loadGraphModel('text2meljstiny/model.json');
4 | const vocoder = tf.loadGraphModel('vocoderjstiny/model.json');
5 |
6 | const audioContext = new AudioContext();
7 | async function playAudio(wav) {
8 | const buf = audioContext.createBuffer(1, wav.shape[1], 22050);
9 | buf.copyToChannel(await wav.data(), 0);
10 | var source = audioContext.createBufferSource();
11 | source.buffer = buf;
12 | source.connect(audioContext.destination);
13 | source.start();
14 | }
15 |
16 | const symbols = ['pad',
17 | '-',
18 | '!',
19 | "'",
20 | '(',
21 | ')',
22 | ',',
23 | '.',
24 | ':',
25 | ';',
26 | '?',
27 | ' ',
28 | 'A',
29 | 'B',
30 | 'C',
31 | 'D',
32 | 'E',
33 | 'F',
34 | 'G',
35 | 'H',
36 | 'I',
37 | 'J',
38 | 'K',
39 | 'L',
40 | 'M',
41 | 'N',
42 | 'O',
43 | 'P',
44 | 'Q',
45 | 'R',
46 | 'S',
47 | 'T',
48 | 'U',
49 | 'V',
50 | 'W',
51 | 'X',
52 | 'Y',
53 | 'Z',
54 | 'a',
55 | 'b',
56 | 'c',
57 | 'd',
58 | 'e',
59 | 'f',
60 | 'g',
61 | 'h',
62 | 'i',
63 | 'j',
64 | 'k',
65 | 'l',
66 | 'm',
67 | 'n',
68 | 'o',
69 | 'p',
70 | 'q',
71 | 'r',
72 | 's',
73 | 't',
74 | 'u',
75 | 'v',
76 | 'w',
77 | 'x',
78 | 'y',
79 | 'z',
80 | '@AA',
81 | '@AA0',
82 | '@AA1',
83 | '@AA2',
84 | '@AE',
85 | '@AE0',
86 | '@AE1',
87 | '@AE2',
88 | '@AH',
89 | '@AH0',
90 | '@AH1',
91 | '@AH2',
92 | '@AO',
93 | '@AO0',
94 | '@AO1',
95 | '@AO2',
96 | '@AW',
97 | '@AW0',
98 | '@AW1',
99 | '@AW2',
100 | '@AY',
101 | '@AY0',
102 | '@AY1',
103 | '@AY2',
104 | '@B',
105 | '@CH',
106 | '@D',
107 | '@DH',
108 | '@EH',
109 | '@EH0',
110 | '@EH1',
111 | '@EH2',
112 | '@ER',
113 | '@ER0',
114 | '@ER1',
115 | '@ER2',
116 | '@EY',
117 | '@EY0',
118 | '@EY1',
119 | '@EY2',
120 | '@F',
121 | '@G',
122 | '@HH',
123 | '@IH',
124 | '@IH0',
125 | '@IH1',
126 | '@IH2',
127 | '@IY',
128 | '@IY0',
129 | '@IY1',
130 | '@IY2',
131 | '@JH',
132 | '@K',
133 | '@L',
134 | '@M',
135 | '@N',
136 | '@NG',
137 | '@OW',
138 | '@OW0',
139 | '@OW1',
140 | '@OW2',
141 | '@OY',
142 | '@OY0',
143 | '@OY1',
144 | '@OY2',
145 | '@P',
146 | '@R',
147 | '@S',
148 | '@SH',
149 | '@T',
150 | '@TH',
151 | '@UH',
152 | '@UH0',
153 | '@UH1',
154 | '@UH2',
155 | '@UW',
156 | '@UW0',
157 | '@UW1',
158 | '@UW2',
159 | '@V',
160 | '@W',
161 | '@Y',
162 | '@Z',
163 | '@ZH',
164 | 'eos'];
165 |
166 | function symbolId(symbol) {
167 | return symbols.indexOf(symbol);
168 | }
169 |
170 | const curly_re = /(.*?)\{(.+?)\}(.*)/;
171 |
172 | function convertText(text) {
173 | let sequence = [];
174 | while (text.length != 0) {
175 | let m = text.match(curly_re);
176 | if (m == null) {
177 | sequence = sequence.concat(convertSymbols(cleanText(text)));
178 | break;
179 | }
180 | sequence = sequence.concat(convertSymbols(cleanText(m[1])));
181 | sequence = sequence.concat(convertArpabet(m[2]));
182 | text = m[3];
183 | }
184 |
185 | sequence = sequence.concat(symbolId("eos"));
186 | return sequence;
187 | }
188 |
189 | function convertSymbols(text) {
190 | if (typeof text == 'string') {
191 | text = text.split('');
192 | }
193 | return text.filter(keepSymbol).map(symbolId);
194 | }
195 |
196 | function convertArpabet(text) {
197 | return convertSymbols(text.split(/\s+/).map(char => "@" + char));
198 | }
199 |
200 | function keepSymbol(symbol) {
201 | return symbols.indexOf(symbol) != -1 && symbol != "_" && symbol != "~";
202 | }
203 |
204 | function cleanText(text) {
205 | text = transliterate(text);
206 | text = text.toLowerCase();
207 | text = expandNumbers(text);
208 | text = expandAbbreviations(text);
209 | text = collapseWhitespace(text);
210 | return text;
211 | }
212 |
213 | function collapseWhitespace(text) {
214 | text.replace(/\s+/, " ");
215 | return text;
216 | }
217 |
218 | const abbreviations = {
219 | "mrs": "misess",
220 | "mr": "mister",
221 | "dr": "doctor",
222 | "st": "saint",
223 | "co": "company",
224 | "jr": "junior",
225 | "maj": "major",
226 | "gen": "general",
227 | "drs": "doctors",
228 | "rev": "reverend",
229 | "lt": "lieutenant",
230 | "hon": "honorable",
231 | "sgt": "sergeant",
232 | "capt": "captain",
233 | "esq": "esquire",
234 | "ltd": "limited",
235 | "col": "colonel",
236 | "ft": "fort",
237 | };
238 |
239 | function expandAbbreviations(text) {
240 | for (const key of Object.keys(abbreviations)) {
241 | const val = abbreviations[key];
242 | text = text.replace(key, val);
243 | }
244 | return text;
245 | }
246 |
247 | const comma_number_re = /([0-9][0-9\,]+[0-9])/;
248 | const decimal_number_re = /([0-9]+\.[0-9]+)/;
249 | const dollars_re = /\$([0-9\.\,]*[0-9]+)/;
250 | const ordinal_re = /[0-9]+(st|nd|rd|th)/;
251 | const number_re = /[0-9]+/;
252 |
253 | function expandNumbers(text) {
254 | text = text.replace(comma_number_re, remove_commas);
255 | text = text.replace(dollars_re, expand_dollars);
256 | text = text.replace(decimal_number_re, expand_decimal_point);
257 | text = text.replace(ordinal_re, expand_ordinal);
258 | text = text.replace(number_re, expand_number);
259 | return text;
260 | }
261 |
262 | function remove_commas(match, group) {
263 | return group.replace(",", "");
264 | }
265 |
266 |
267 | function expand_decimal_point(match, group) {
268 | return group.replace(".", " point ");
269 | }
270 |
271 |
272 | function expand_dollars(_, match) {
273 | const parts = match.split(".");
274 | if (parts.length > 2)
275 | return match + " dollars" // Unexpected format
276 | const dollars = parts[0] ? parseInt(parts[0]) : 0;
277 | const cents = parts[1] ? parseInt(parts[1]) : 0;
278 | const dollar_unit = dollars == 1 ? "dollar" : "dollars";
279 | const cent_unit = cents == 1 ? "cent" : "cents";
280 | if (dollars && cents) {
281 | return `${dollars} ${dollar_unit}, ${cents} ${cent_unit}`;
282 | } else if (dollars) {
283 | return `${dollars} ${dollar_unit}`;
284 | } else if (cents) {
285 | return `${cents} ${cent_unit}`;
286 | } else {
287 | return "zero dollars";
288 | }
289 | }
290 |
291 | function expand_ordinal(match) {
292 | return numberToWords.toWordsOrdinal(match);
293 | }
294 |
295 |
296 | function expand_number(match) {
297 | const num = parseInt(match);
298 | return numberToWords.toWords(num);
299 | }
300 |
301 | async function tts(text, ttsStatus) {
302 | ttsStatus.innerText = "Converting input";
303 | const input_ids = tf.tensor([convertText(text)], null, 'int32');
304 | inputs = {
305 | "input_ids": input_ids,
306 | "speaker_ids": tf.tensor([0], null, 'int32'),
307 | "speed_ratios:0": tf.tensor([1.0], null, 'float32'),
308 | "f0_ratios": tf.tensor([1.0], null, 'float32'),
309 | "energy_ratios": tf.tensor([1.0], null, 'float32'),
310 | };
311 | ttsStatus.innerText = "Generating mel spectrogram (be patient)";
312 | console.time("inference");
313 | console.time("mel generation");
314 | const mel = await (await text2mel).executeAsync(inputs);
315 | console.timeEnd("mel generation");
316 | console.time("vocoding");
317 | ttsStatus.innerText = "Generating waveform (be patient)";
318 | const wav = (await vocoder).execute(mel[0]);
319 | console.timeEnd("vocoding");
320 | console.timeEnd("inference");
321 | ttsStatus.innerText = "Done!";
322 | playAudio(wav);
323 | for (let i = 0; i < inputs.length; i++) {
324 | inputs[i].dispose();
325 | }
326 | }
327 |
328 | document.addEventListener('DOMContentLoaded', function () {
329 | const ttsInput = document.getElementById("tts-input");
330 | const ttsStart = document.getElementById("tts-start");
331 | const ttsStatus = document.getElementById("tts-status");
332 | ttsStart.addEventListener("click", async function () {
333 | await tts(ttsInput.value, ttsStatus);
334 | });
335 | });
--------------------------------------------------------------------------------
/style.css:
--------------------------------------------------------------------------------
1 | body {
2 | text-align: center;
3 | }
4 |
5 | * {
6 | font-family: sans-serif;
7 | }
8 |
9 | #tts-status {
10 | margin: 8 0 8 0;
11 | }
12 |
13 | #tts-input {
14 | width: 50vw;
15 | height: 12em;
16 | }
17 |
18 | #tts-start {
19 | font-size: large;
20 | margin: 4px;
21 | padding: 5px;
22 | background: #ddd;
23 | border: 1px solid rgb(44, 44, 44);
24 | border-radius: 0.25em;
25 | }
--------------------------------------------------------------------------------
/text2meljs/group1-shard10of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard10of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard11of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard11of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard12of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard12of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard13of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard13of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard14of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard14of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard15of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard15of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard16of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard16of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard17of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard17of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard18of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard18of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard19of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard19of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard1of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard1of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard20of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard20of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard21of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard21of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard22of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard22of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard23of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard23of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard24of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard24of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard25of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard25of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard26of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard26of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard27of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard27of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard28of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard28of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard29of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard29of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard2of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard2of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard30of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard30of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard3of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard3of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard4of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard4of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard5of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard5of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard6of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard6of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard7of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard7of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard8of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard8of30.bin
--------------------------------------------------------------------------------
/text2meljs/group1-shard9of30.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljs/group1-shard9of30.bin
--------------------------------------------------------------------------------
/text2meljstiny/group1-shard1of8.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljstiny/group1-shard1of8.bin
--------------------------------------------------------------------------------
/text2meljstiny/group1-shard2of8.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljstiny/group1-shard2of8.bin
--------------------------------------------------------------------------------
/text2meljstiny/group1-shard3of8.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljstiny/group1-shard3of8.bin
--------------------------------------------------------------------------------
/text2meljstiny/group1-shard4of8.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljstiny/group1-shard4of8.bin
--------------------------------------------------------------------------------
/text2meljstiny/group1-shard5of8.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljstiny/group1-shard5of8.bin
--------------------------------------------------------------------------------
/text2meljstiny/group1-shard6of8.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljstiny/group1-shard6of8.bin
--------------------------------------------------------------------------------
/text2meljstiny/group1-shard7of8.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljstiny/group1-shard7of8.bin
--------------------------------------------------------------------------------
/text2meljstiny/group1-shard8of8.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/text2meljstiny/group1-shard8of8.bin
--------------------------------------------------------------------------------
/vocoderjs/group1-shard1of3.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/vocoderjs/group1-shard1of3.bin
--------------------------------------------------------------------------------
/vocoderjs/group1-shard2of3.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/vocoderjs/group1-shard2of3.bin
--------------------------------------------------------------------------------
/vocoderjs/group1-shard3of3.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/vocoderjs/group1-shard3of3.bin
--------------------------------------------------------------------------------
/vocoderjstiny/group1-shard1of1.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MightyAlex200/tfjs-tts/6f47ec3d3d79e66e57f16c500b563a32b418d4f9/vocoderjstiny/group1-shard1of1.bin
--------------------------------------------------------------------------------