Upload 27 files
Browse files- dictionaries/LICENSE_cmudict-0.7b.txt +28 -0
- dictionaries/cmudict-0.7b +0 -0
- js-esm/arpa_to_ipa.js +315 -0
- js-esm/cmudict_loader.js +62 -0
- js-esm/matcha_tts_raw.js +177 -0
- js-esm/ort-wasm-simd-threaded.mjs +80 -0
- js-esm/ort-wasm-simd-threaded.wasm +3 -0
- js-esm/ort.min.js +0 -0
- js-esm/ort.min.js.map +0 -0
- js-esm/text_to_arpa.js +92 -0
- js-esm/web_wav_play.js +68 -0
- matcha_tts_speak_en001.html +123 -0
- models/matcha-tts/en001_ep6399_univ_simplify_q8.onnx +3 -0
- models/matcha-tts/ljspeech_sim_q8.onnx +3 -0
- models/matcha-tts/vctk_t2_simplify.onnx +3 -0
- models/matcha-tts/vctk_t2_simplify_q8.onnx +3 -0
- models/matcha-tts/vctk_univ_simplify.onnx +3 -0
- models/matcha-tts/vctk_univ_simplify_q8.onnx +3 -0
- models/mini-bart-g2p/LICENSE +201 -0
- models/mini-bart-g2p/config.json +47 -0
- models/mini-bart-g2p/decoder_model_merged.onnx +3 -0
- models/mini-bart-g2p/encoder_model.onnx +3 -0
- models/mini-bart-g2p/generation_config.json +9 -0
- models/mini-bart-g2p/onnx/decoder_model_merged.onnx +3 -0
- models/mini-bart-g2p/onnx/encoder_model.onnx +3 -0
- models/mini-bart-g2p/tokenizer.json +191 -0
- models/mini-bart-g2p/tokenizer_config.json +16 -0
dictionaries/LICENSE_cmudict-0.7b.txt
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Copyright (c) 2015, Carnegie Mellon University
|
2 |
+
All rights reserved.
|
3 |
+
|
4 |
+
Redistribution and use in source and binary forms, with or without
|
5 |
+
modification, are permitted provided that the following conditions are met:
|
6 |
+
|
7 |
+
* Redistributions of source code must retain the above copyright notice, this
|
8 |
+
list of conditions and the following disclaimer.
|
9 |
+
|
10 |
+
* Redistributions in binary form must reproduce the above copyright notice,
|
11 |
+
this list of conditions and the following disclaimer in the documentation
|
12 |
+
and/or other materials provided with the distribution.
|
13 |
+
|
14 |
+
* Neither the name of dictTools nor the names of its
|
15 |
+
contributors may be used to endorse or promote products derived from
|
16 |
+
this software without specific prior written permission.
|
17 |
+
|
18 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
19 |
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
20 |
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
21 |
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
22 |
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
23 |
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
24 |
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
25 |
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
26 |
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
27 |
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
28 |
+
|
dictionaries/cmudict-0.7b
ADDED
The diff for this file is too large to render.
See raw diff
|
|
js-esm/arpa_to_ipa.js
ADDED
@@ -0,0 +1,315 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
//ver 0.1
|
2 |
+
|
3 |
+
const vowels = {
|
4 |
+
//apply rule owel length is indicated (AA -> ɑː, ER -> ɝː, IY -> iː, UW -> uː). However, unstressed word-final ER and IY are short (i.e., ER0 -> ɝ and IY -> i when word-final).
|
5 |
+
'AA0': 'ɑː',
|
6 |
+
'AA1': 'ɑː',
|
7 |
+
'AA2': 'ɑː',
|
8 |
+
'AE0': 'æ',
|
9 |
+
'AE1': 'æ',
|
10 |
+
'AE2': 'æ',
|
11 |
+
'AH0': 'ə',
|
12 |
+
'AH1': 'ʌ',
|
13 |
+
'AH2': 'ə',//AH is converted to ʌ when bearing primary stress and to ə otherwise (AH1 -> ʌ; AH0, AH2 -> ə) from https://github.com/menelik3/cmudict-ipa
|
14 |
+
'AO0': 'ɔ',
|
15 |
+
'AO1': 'ɔ',
|
16 |
+
'AO2': 'ɔ',
|
17 |
+
'AW0': 'aʊ',
|
18 |
+
'AW1': 'aʊ',
|
19 |
+
'AW2': 'aʊ',
|
20 |
+
'AY0': 'aɪ',
|
21 |
+
'AY1': 'aɪ',
|
22 |
+
'AY2': 'aɪ',
|
23 |
+
'EH0': 'ɛ',
|
24 |
+
'EH1': 'ɛ',
|
25 |
+
'EH2': 'ɛ',
|
26 |
+
'ER0': 'ɝ',//somehow this way betters
|
27 |
+
'ER1': 'ɝː',
|
28 |
+
'ER2': 'ɝː',
|
29 |
+
'EY0': 'eɪ',
|
30 |
+
'EY1': 'eɪ',
|
31 |
+
'EY2': 'eɪ',
|
32 |
+
'IH0': 'ɪ',
|
33 |
+
'IH1': 'ɪ',
|
34 |
+
'IH2': 'ɪ',
|
35 |
+
'IY0': 'iː',
|
36 |
+
'IY1': 'iː',
|
37 |
+
'IY2': 'iː',
|
38 |
+
'OW0': 'oʊ',
|
39 |
+
'OW1': 'oʊ',
|
40 |
+
'OW2': 'oʊ',
|
41 |
+
'OY0': 'ɔɪ',
|
42 |
+
'OY1': 'ɔɪ',
|
43 |
+
'OY2': 'ɔɪ',
|
44 |
+
'UH0': 'ʊ',
|
45 |
+
'UH1': 'ʊ',
|
46 |
+
'UH2': 'ʊ',
|
47 |
+
'UW0': 'uː',
|
48 |
+
'UW1': 'uː',
|
49 |
+
'UW2': 'uː'
|
50 |
+
};
|
51 |
+
|
52 |
+
const consonants = {
|
53 |
+
'B': 'b',
|
54 |
+
'CH': 'tʃ',
|
55 |
+
'D': 'd',
|
56 |
+
'DH': 'ð',
|
57 |
+
'F': 'f',
|
58 |
+
'G': 'g',
|
59 |
+
'HH': 'h',
|
60 |
+
'JH': 'dʒ',
|
61 |
+
'K': 'k',
|
62 |
+
'L': 'l',
|
63 |
+
'M': 'm',
|
64 |
+
'N': 'n',
|
65 |
+
'NG': 'ŋ',
|
66 |
+
'P': 'p',
|
67 |
+
'R': 'r',
|
68 |
+
'S': 's',
|
69 |
+
'SH': 'ʃ',
|
70 |
+
'T': 't',
|
71 |
+
'TH': 'θ',
|
72 |
+
'V': 'v',
|
73 |
+
'W': 'w',
|
74 |
+
'Y': 'j',
|
75 |
+
'Z': 'z',
|
76 |
+
'ZH': 'ʒ'
|
77 |
+
};
|
78 |
+
|
79 |
+
|
80 |
+
const AccentMode ={
|
81 |
+
SIMPLIFIED_VOWEL_ALIGNED:"SIMPLIFIED_VOWEL_ALIGNED",//Stable not for Human
|
82 |
+
STANDARD:"STANDARd",//for Human but broken ,it's hard to split syallable constraints correctly
|
83 |
+
NONE:"NONE"
|
84 |
+
};
|
85 |
+
|
86 |
+
const arpa_to_ipa_lookup_tables = {
|
87 |
+
...vowels,
|
88 |
+
...consonants
|
89 |
+
};
|
90 |
+
|
91 |
+
class Syllable {
|
92 |
+
constructor(ontop,nucleus, coder,accent,ontop_arpa) {
|
93 |
+
this.ontop = ontop;
|
94 |
+
this.ontop_arpa = ontop_arpa
|
95 |
+
this.nucleus = nucleus; // vowel
|
96 |
+
|
97 |
+
this.coder = coder
|
98 |
+
this.accent = accent;
|
99 |
+
}
|
100 |
+
|
101 |
+
|
102 |
+
display() {
|
103 |
+
console.log(`Ontop: ${this.ontop} Nucleus: ${this.nucleus}, Coder: ${this.coder}, Accent: ${this.accent}`);
|
104 |
+
}
|
105 |
+
}
|
106 |
+
|
107 |
+
//for AccentMode.STANDARD but not good
|
108 |
+
const consonantClusters = [
|
109 |
+
"PL", "PR", "TR", "BR", "KR", "GR", "DR", "GL", "FL", "BL", "KL",
|
110 |
+
// Stop + Nasal
|
111 |
+
"TN", "DN", "PN", "GN", "BM", "DM", "PM", "GM", "TM",
|
112 |
+
// Fricative + Approximant/Lateral
|
113 |
+
"SL", "SW", "SHL", "SHR", "VL", "VR", "ZL", "ZR", "THL", "THR",
|
114 |
+
"FTH", "VTH", "ZTH",
|
115 |
+
// Other important combinations
|
116 |
+
"FY", "KY", "MY", "NY", "HY", "BY", "PY", "LY",
|
117 |
+
//add
|
118 |
+
"KW","DW",
|
119 |
+
// 3-phoneme Clusters
|
120 |
+
"SPR", "STR", "SKR", "SPL", "STL", "SKL", "SHT", "SPT", "STK", "SPN"
|
121 |
+
];
|
122 |
+
|
123 |
+
// for AccentMode.STANDARD but not good
|
124 |
+
function splitCodaOnset(consonants,pre_nucleus=null,post_nucleus=null) {
|
125 |
+
if (consonants.length==0){
|
126 |
+
return [[],[]];
|
127 |
+
}else if (consonants.length==1){
|
128 |
+
return [[],consonants];
|
129 |
+
}
|
130 |
+
let peakIndex = 1
|
131 |
+
const cluster=consonants.join("")
|
132 |
+
if ((cluster == "DM" || cluster == "DN") && (pre_nucleus == "ə" || pre_nucleus=="æ")){ //AD
|
133 |
+
peakIndex = 1
|
134 |
+
}else if (consonantClusters.includes(cluster)){
|
135 |
+
return [[],consonants];
|
136 |
+
}
|
137 |
+
|
138 |
+
|
139 |
+
if (cluster == "RDV"){
|
140 |
+
peakIndex = 2
|
141 |
+
}
|
142 |
+
else{
|
143 |
+
if (consonants.length>3){
|
144 |
+
const last_cluster=consonants.slice(1).join("")
|
145 |
+
//console.log(head_cluster)
|
146 |
+
if (consonantClusters.includes(last_cluster)){
|
147 |
+
peakIndex = 1
|
148 |
+
}else{
|
149 |
+
peakIndex = 2
|
150 |
+
}
|
151 |
+
}
|
152 |
+
}
|
153 |
+
|
154 |
+
const coda = consonants.slice(0, peakIndex);
|
155 |
+
const onset = consonants.slice(peakIndex);
|
156 |
+
|
157 |
+
return [ coda, onset ];
|
158 |
+
}
|
159 |
+
|
160 |
+
// Function to convert Arpabet to IPA
|
161 |
+
function arpa_to_ipa(arpa_text,accent_mode=AccentMode.SIMPLIFIED_VOWEL_ALIGNED) {
|
162 |
+
arpa_text = arpa_text.replaceAll(",","\t,").replaceAll(".","\t.").replaceAll("?","\t?").replaceAll("!","\t!")
|
163 |
+
console.log(arpa_text)
|
164 |
+
const words = arpa_text.split("\t")
|
165 |
+
const ipa_texts = []
|
166 |
+
words.forEach(function(word){
|
167 |
+
word = word.trim()
|
168 |
+
//console.log(`'${word}'`)
|
169 |
+
if (word == ""){
|
170 |
+
return
|
171 |
+
}
|
172 |
+
else if (word == "." || word ==","|| word =="!"|| word =="?"){
|
173 |
+
ipa_texts.push(word)
|
174 |
+
}else{
|
175 |
+
|
176 |
+
let syllable = arpa_to_ipa_with_syllables(word)
|
177 |
+
const ipa_text = syallablesToString(syllable,accent_mode)
|
178 |
+
|
179 |
+
ipa_texts.push(ipa_text)
|
180 |
+
ipa_texts.push(" ") //word separator
|
181 |
+
}
|
182 |
+
|
183 |
+
});
|
184 |
+
|
185 |
+
return ipa_texts.join("").replaceAll(" .",".").replaceAll(" ,",",").replaceAll(" ?","?").replaceAll(" !","!")
|
186 |
+
|
187 |
+
|
188 |
+
}
|
189 |
+
|
190 |
+
function arpas_symbol_to_ipa(phonemes){
|
191 |
+
let ipaText = ""
|
192 |
+
for (let i = 0; i < phonemes.length; i++) {
|
193 |
+
const phoneme = phonemes[i];
|
194 |
+
let ipaSymbol = arpa_to_ipa_lookup_tables[phoneme];
|
195 |
+
if (ipaSymbol === undefined) {
|
196 |
+
console.log(`Invalid Arpabet phoneme: ${phoneme}`);
|
197 |
+
continue; // Skip invalid phonemes
|
198 |
+
}
|
199 |
+
ipaText+=ipaSymbol
|
200 |
+
}
|
201 |
+
return ipaText
|
202 |
+
}
|
203 |
+
|
204 |
+
// Function to convert Arpabet to IPA and extract syllable information
|
205 |
+
function arpa_to_ipa_with_syllables(arpa) {
|
206 |
+
arpa = arpa.toUpperCase();
|
207 |
+
const phonemes = arpa.split(' ');
|
208 |
+
let syllables = [];
|
209 |
+
let currentSyllable = { nucleus: null, ontop: "", coder:"", accent: -1 ,ontop_arpa:[]}; // Default accent is -1
|
210 |
+
|
211 |
+
for (let i = 0; i < phonemes.length; i++) {
|
212 |
+
const phoneme = phonemes[i];
|
213 |
+
let ipaSymbol = arpa_to_ipa_lookup_tables[phoneme];
|
214 |
+
if (ipaSymbol === undefined) {//for omitted vowel
|
215 |
+
ipaSymbol = arpa_to_ipa_lookup_tables[phoneme+"0"];
|
216 |
+
}
|
217 |
+
|
218 |
+
if (ipaSymbol === undefined) {
|
219 |
+
console.log(`Invalid Arpabet phoneme: ${phoneme}`);
|
220 |
+
continue; // Skip invalid phonemes
|
221 |
+
}
|
222 |
+
|
223 |
+
// Check for vowel (Corrected condition)
|
224 |
+
if (phoneme in vowels) {
|
225 |
+
|
226 |
+
let accent = -1; // Default accent is -1
|
227 |
+
const lastChar = phoneme.slice(-1);
|
228 |
+
if (!isNaN(lastChar)) { // Check if the last character is a number
|
229 |
+
accent = parseInt(lastChar, 10);
|
230 |
+
}
|
231 |
+
|
232 |
+
syllables.push(new Syllable(currentSyllable.ontop,ipaSymbol, currentSyllable.coder, accent,currentSyllable.ontop_arpa));
|
233 |
+
//}
|
234 |
+
|
235 |
+
currentSyllable = { nucleus: null, ontop: "", coder:"",accent: -1 ,ontop_arpa:[]};
|
236 |
+
} else {
|
237 |
+
currentSyllable.ontop += ipaSymbol;
|
238 |
+
currentSyllable.ontop_arpa.push(phoneme)
|
239 |
+
}
|
240 |
+
}
|
241 |
+
|
242 |
+
|
243 |
+
// Add the last syllable if it has content
|
244 |
+
if (currentSyllable.nucleus !== null || currentSyllable.ontop !== "") {
|
245 |
+
syllables.push(new Syllable(currentSyllable.ontop,currentSyllable.nucleus, currentSyllable.coder, currentSyllable.accent));
|
246 |
+
}
|
247 |
+
|
248 |
+
// merge last syallable
|
249 |
+
let last_syallable = syllables[syllables.length-1]
|
250 |
+
// move single last ontop to pre-coder
|
251 |
+
if (last_syallable.nucleus == null){
|
252 |
+
const pre_syallable = syllables[syllables.length-2]
|
253 |
+
pre_syallable.coder += last_syallable.ontop
|
254 |
+
syllables = syllables.slice(0,syllables.length-1)
|
255 |
+
}
|
256 |
+
|
257 |
+
for(let i=1;i<syllables.length;i++){
|
258 |
+
const result = splitCodaOnset(syllables[i].ontop_arpa, syllables[i-1].nucleus, syllables[i].nucleus)
|
259 |
+
const coder = arpas_symbol_to_ipa(result[0])
|
260 |
+
const onset = arpas_symbol_to_ipa(result[1])
|
261 |
+
syllables[i-1].coder = coder
|
262 |
+
syllables[i].ontop = onset
|
263 |
+
}
|
264 |
+
|
265 |
+
|
266 |
+
|
267 |
+
|
268 |
+
last_syallable = syllables[syllables.length-1]
|
269 |
+
if (last_syallable.nucleus!=null){
|
270 |
+
if (last_syallable.accent<1){
|
271 |
+
if(last_syallable.nucleus.endsWith("iː") && last_syallable.coder==""){
|
272 |
+
last_syallable.nucleus = last_syallable.nucleus.substring(0, last_syallable.nucleus.length-1)
|
273 |
+
}
|
274 |
+
else if(last_syallable.nucleus.endsWith("ɝː")){
|
275 |
+
last_syallable.nucleus = last_syallable.nucleus.substring(0, last_syallable.nucleus.length-1)
|
276 |
+
}
|
277 |
+
}
|
278 |
+
}
|
279 |
+
|
280 |
+
return syllables;
|
281 |
+
}
|
282 |
+
|
283 |
+
function syallablesToString(syllables,accent_mode=AccentMode.SIMPLIFIED_VOWEL_ALIGNED) {
|
284 |
+
let ipaString = "";
|
285 |
+
|
286 |
+
|
287 |
+
for (let i = 0; i < syllables.length; i++) {
|
288 |
+
const syllable = syllables[i];
|
289 |
+
//console.log(syllable.consonant)
|
290 |
+
const nucleus = (syllable.nucleus != null) ? syllable.nucleus : "";
|
291 |
+
let accent = ""
|
292 |
+
|
293 |
+
//console.log(ipaString)
|
294 |
+
|
295 |
+
if (syllable.accent === 1) {
|
296 |
+
accent = "ˈ";
|
297 |
+
} else if (syllable.accent === 2) {
|
298 |
+
accent = "ˌ";
|
299 |
+
} else if (syllable.accent === 0) {
|
300 |
+
//ipaString = "ˌ" + ipaString;
|
301 |
+
}
|
302 |
+
if (accent_mode == AccentMode.STANDARD){
|
303 |
+
ipaString += accent+syllable.ontop + nucleus+syllable.coder;
|
304 |
+
}else if (accent_mode == AccentMode.SIMPLIFIED_VOWEL_ALIGNED){
|
305 |
+
ipaString += syllable.ontop + accent+nucleus+syllable.coder;
|
306 |
+
}else{
|
307 |
+
ipaString += syllable.ontop + nucleus+syllable.coder;
|
308 |
+
}
|
309 |
+
|
310 |
+
}
|
311 |
+
|
312 |
+
return ipaString;
|
313 |
+
}
|
314 |
+
|
315 |
+
export { arpa_to_ipa };
|
js-esm/cmudict_loader.js
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
//ver 0.1
|
2 |
+
async function loadCmudict(obj=cmudict,path='./cmudict-0.7b',splitter=" ") { //split double-space
|
3 |
+
return new Promise(async (resolve, reject) => {
|
4 |
+
try {
|
5 |
+
const response = await fetch(path);
|
6 |
+
const responseText = await response.text();
|
7 |
+
|
8 |
+
const lines = responseText.split('\n');
|
9 |
+
|
10 |
+
lines.forEach(line => {
|
11 |
+
let data = line.trim().split(splitter);
|
12 |
+
obj[data[0]] = data[1];
|
13 |
+
});
|
14 |
+
|
15 |
+
resolve(true);
|
16 |
+
} catch (error) {
|
17 |
+
console.error('Error:', error);
|
18 |
+
}
|
19 |
+
});
|
20 |
+
}
|
21 |
+
|
22 |
+
//let cmudictReady =loadCmudict();
|
23 |
+
|
24 |
+
function get_arpa(cmudict,word){
|
25 |
+
return cmudict[word.toUpperCase()]
|
26 |
+
}
|
27 |
+
|
28 |
+
|
29 |
+
function textToArpa(cmudict,text){
|
30 |
+
var keep_words = [",",".","!","?"]
|
31 |
+
let inputText = text.toUpperCase()
|
32 |
+
keep_words.forEach(function(key){
|
33 |
+
inputText = inputText.replaceAll(key," "+key+" ");
|
34 |
+
});
|
35 |
+
//console.log(`replaced ${inputText}`)
|
36 |
+
|
37 |
+
let result = []
|
38 |
+
let non_converted = []
|
39 |
+
var words = inputText.split(" ")
|
40 |
+
|
41 |
+
words.forEach(word => {
|
42 |
+
|
43 |
+
if (keep_words.includes(word)){//,.!? just keep
|
44 |
+
result.push(word)
|
45 |
+
}else if (word ==""){
|
46 |
+
|
47 |
+
}else{
|
48 |
+
const arpa = get_arpa(cmudict,word)
|
49 |
+
|
50 |
+
if (typeof arpa == "undefined"){
|
51 |
+
result.push("@"+word)
|
52 |
+
non_converted.push(word)
|
53 |
+
}else{
|
54 |
+
result.push(arpa)
|
55 |
+
}
|
56 |
+
}
|
57 |
+
});
|
58 |
+
|
59 |
+
return {"result":result,"non_converted":non_converted}
|
60 |
+
}
|
61 |
+
|
62 |
+
export { textToArpa, loadCmudict};
|
js-esm/matcha_tts_raw.js
ADDED
@@ -0,0 +1,177 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const _pad = "_";
|
2 |
+
const _punctuation = ";:,.!?¡¿—…\"«»“” ";
|
3 |
+
const _letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
4 |
+
const _letters_ipa = "ɑɐɒæɓʙβɔɕçɗɖðʤəɘɚɛɜɝɞɟʄɡɠɢʛɦɧħɥʜɨɪʝɭɬɫɮʟɱɯɰŋɳɲɴøɵɸθœɶʘɹɺɾɻʀʁɽʂʃʈʧʉʊʋⱱʌɣɤʍχʎʏʑʐʒʔʡʕʢǀǁǂǃˈˌːˑʼʴʰʱʲʷˠˤ˞↓↑→↗↘'̩'ᵻ";
|
5 |
+
|
6 |
+
// below code called Spread syntax
|
7 |
+
const Symbols = [_pad, ..._punctuation, ..._letters, ..._letters_ipa];
|
8 |
+
|
9 |
+
const SpaceId = Symbols.indexOf(' ');
|
10 |
+
|
11 |
+
const symbolToId = {};
|
12 |
+
const idToSymbol = {};
|
13 |
+
|
14 |
+
// initialize symbolToId and idToSymbol
|
15 |
+
for (let i = 0; i < Symbols.length; i++) {
|
16 |
+
symbolToId[Symbols[i]] = i;
|
17 |
+
idToSymbol[i] = Symbols[i];
|
18 |
+
}
|
19 |
+
|
20 |
+
class MatchaTTSRaw {
|
21 |
+
constructor() {
|
22 |
+
this.processing = false
|
23 |
+
}
|
24 |
+
async load_model(model_path,options={}){
|
25 |
+
this.session = await ort.InferenceSession.create(model_path,options);
|
26 |
+
console.log(this.session)
|
27 |
+
const inputNames = this.session.inputNames;
|
28 |
+
this.need_spks = inputNames.includes("spks")
|
29 |
+
console.log(`this model need spks = ${this.need_spks}`);
|
30 |
+
return this.session
|
31 |
+
}
|
32 |
+
|
33 |
+
get_output_names_html(){
|
34 |
+
if (typeof this.session=='undefined'){
|
35 |
+
return null
|
36 |
+
}
|
37 |
+
let outputNamesString = '[outputNames]<br>';
|
38 |
+
const outputNames = this.session.outputNames;
|
39 |
+
for (let outputName of outputNames) {
|
40 |
+
console.log(outputName)
|
41 |
+
outputNamesString+=outputName+"<br>"
|
42 |
+
}
|
43 |
+
return outputNamesString.trim()
|
44 |
+
}
|
45 |
+
|
46 |
+
get_input_names_html(){
|
47 |
+
if (typeof this.session=='undefined'){
|
48 |
+
return null
|
49 |
+
}
|
50 |
+
|
51 |
+
let inputNamesString = '[inputNames]<br>';
|
52 |
+
const inputNames = this.session.inputNames;
|
53 |
+
|
54 |
+
for (let inputName of inputNames) {
|
55 |
+
console.log(inputName)
|
56 |
+
inputNamesString+=inputName+"<br>"
|
57 |
+
}
|
58 |
+
return inputNamesString.trim()
|
59 |
+
}
|
60 |
+
|
61 |
+
|
62 |
+
processText(text) {
|
63 |
+
const x = this.intersperse(this.textToSequence(text));
|
64 |
+
const x_phones = this.sequenceToText(x);
|
65 |
+
const textList = [];
|
66 |
+
for (let i = 1; i < x_phones.length; i += 2) {
|
67 |
+
textList.push(x_phones[i]);
|
68 |
+
}
|
69 |
+
|
70 |
+
return {
|
71 |
+
x: x,
|
72 |
+
x_length: x.length,
|
73 |
+
x_phones: x_phones,
|
74 |
+
x_phones_label: textList.join(""),
|
75 |
+
};
|
76 |
+
}
|
77 |
+
|
78 |
+
|
79 |
+
basicCleaners2(text, lowercase = false) {
|
80 |
+
if (lowercase) {
|
81 |
+
text = text.toLowerCase();
|
82 |
+
}
|
83 |
+
text = text.replace(/\s+/g, " ");
|
84 |
+
return text;
|
85 |
+
}
|
86 |
+
|
87 |
+
textToSequence(text) {
|
88 |
+
const sequenceList = [];
|
89 |
+
const clean_text = this.basicCleaners2(text);
|
90 |
+
for (let i = 0; i < clean_text.length; i++) {
|
91 |
+
const symbol = clean_text[i];
|
92 |
+
sequenceList.push(symbolToId[symbol]);
|
93 |
+
}
|
94 |
+
return sequenceList;
|
95 |
+
}
|
96 |
+
|
97 |
+
intersperse(sequence, item = 0) {
|
98 |
+
const sequenceList = [item];
|
99 |
+
for (let i = 0; i < sequence.length; i++) {
|
100 |
+
sequenceList.push(sequence[i]);
|
101 |
+
sequenceList.push(item);
|
102 |
+
}
|
103 |
+
return sequenceList;
|
104 |
+
}
|
105 |
+
|
106 |
+
sequenceToText(sequence) {
|
107 |
+
const textList = [];
|
108 |
+
for (let i = 0; i < sequence.length; i++) {
|
109 |
+
const symbol = idToSymbol[sequence[i]];
|
110 |
+
textList.push(symbol);
|
111 |
+
}
|
112 |
+
return textList.join("");
|
113 |
+
}
|
114 |
+
|
115 |
+
async infer(text, temperature, speed,spks=0) {
|
116 |
+
if(this.processing){
|
117 |
+
console.error("already processing")
|
118 |
+
return null
|
119 |
+
}
|
120 |
+
this.processing = true
|
121 |
+
try{
|
122 |
+
|
123 |
+
|
124 |
+
const dic = this.processText(text);
|
125 |
+
console.log(`x:${dic.x.join(", ")}`);
|
126 |
+
console.log(`x_length:${dic.x_length}`);
|
127 |
+
console.log(`x_phones_label:${dic.x_phones_label}`);
|
128 |
+
console.log(`temperature=${temperature} speed = ${speed} spks=${spks}`);
|
129 |
+
|
130 |
+
|
131 |
+
const dataX = new BigInt64Array(dic.x.length)
|
132 |
+
for (let i = 0; i < dic.x.length; i++) {
|
133 |
+
//console.log(dic.x[i])
|
134 |
+
dataX[i] = BigInt(dic.x[i]); // Convert each number to a BigInt
|
135 |
+
}
|
136 |
+
const data_x_length = new BigInt64Array(1)
|
137 |
+
data_x_length[0] = BigInt(dic.x_length)
|
138 |
+
|
139 |
+
//const dataX = Int32Array.from([dic.x_length])
|
140 |
+
const tensorX = new ort.Tensor('int64', dataX, [1, dic.x.length]);
|
141 |
+
// const data_x_length = Int32Array.from([dic.x_length])
|
142 |
+
const tensor_x_length = new ort.Tensor('int64', data_x_length, [1]);
|
143 |
+
const data_scale = Float32Array.from( [temperature, speed])
|
144 |
+
const tensor_scale = new ort.Tensor('float32', data_scale, [2]);
|
145 |
+
|
146 |
+
|
147 |
+
const send_data = {
|
148 |
+
x: tensorX,
|
149 |
+
x_lengths: tensor_x_length,
|
150 |
+
scales: tensor_scale,
|
151 |
+
}
|
152 |
+
|
153 |
+
//for vctk need speaker id
|
154 |
+
if (this.need_spks){
|
155 |
+
const data_spks = new BigInt64Array(1)
|
156 |
+
data_spks[0] = BigInt(spks)
|
157 |
+
const tensor_spks = new ort.Tensor('int64', data_spks, [1]);
|
158 |
+
send_data.spks = tensor_spks
|
159 |
+
}
|
160 |
+
// Run inference
|
161 |
+
const output = await this.session.run(send_data);
|
162 |
+
//If your onnx not connect hifigun difference output return (not tested)
|
163 |
+
const wav_array = output.wav.data;
|
164 |
+
const x_lengths_array = output.wav_lengths.data;
|
165 |
+
|
166 |
+
this.processing = false
|
167 |
+
return wav_array;
|
168 |
+
}catch (exception){
|
169 |
+
this.processing = false
|
170 |
+
return null
|
171 |
+
}
|
172 |
+
}
|
173 |
+
|
174 |
+
|
175 |
+
}
|
176 |
+
|
177 |
+
export { MatchaTTSRaw };
|
js-esm/ort-wasm-simd-threaded.mjs
ADDED
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
var ortWasmThreaded = (() => {
|
3 |
+
var _scriptName = import.meta.url;
|
4 |
+
|
5 |
+
return (
|
6 |
+
async function(moduleArg = {}) {
|
7 |
+
var moduleRtn;
|
8 |
+
|
9 |
+
function aa(){g.buffer!=l.buffer&&m();return l}function n(){g.buffer!=l.buffer&&m();return ba}function r(){g.buffer!=l.buffer&&m();return ca}function u(){g.buffer!=l.buffer&&m();return da}function ea(){g.buffer!=l.buffer&&m();return fa}var w=Object.assign({},moduleArg),ha,x,ia=new Promise((a,b)=>{ha=a;x=b}),ja="object"==typeof window,A="function"==typeof importScripts,B="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,C=A&&"em-pthread"==self.name;
|
10 |
+
if(B){const {createRequire:a}=await import("module");var require=a(import.meta.url),D=require("worker_threads");global.Worker=D.Worker;C=(A=!D.lb)&&"em-pthread"==D.workerData}"use strict";w.mountExternalData=(a,b)=>{(w.Ua||(w.Ua=new Map)).set(a,b)};w.unmountExternalData=()=>{delete w.Ua};
|
11 |
+
var SharedArrayBuffer=globalThis.SharedArrayBuffer??(new WebAssembly.Memory({initial:0,maximum:0,shared:!0})).buffer.constructor,ka=Object.assign({},w),la="./this.program",E=(a,b)=>{throw b;},F="",ma,G,H;
|
12 |
+
if(B){var fs=require("fs"),na=require("path");F=require("url").fileURLToPath(new URL("./",import.meta.url));ma=(a,b)=>{a=oa(a)?new URL(a):na.normalize(a);return fs.readFileSync(a,b?void 0:"utf8")};H=a=>{a=ma(a,!0);a.buffer||(a=new Uint8Array(a));return a};G=(a,b,c,d=!0)=>{a=oa(a)?new URL(a):na.normalize(a);fs.readFile(a,d?void 0:"utf8",(f,h)=>{f?c(f):b(d?h.buffer:h)})};!w.thisProgram&&1<process.argv.length&&(la=process.argv[1].replace(/\\/g,"/"));process.argv.slice(2);E=(a,b)=>{process.exitCode=
|
13 |
+
a;throw b;}}else if(ja||A)A?F=self.location.href:"undefined"!=typeof document&&document.currentScript&&(F=document.currentScript.src),_scriptName&&(F=_scriptName),F.startsWith("blob:")?F="":F=F.substr(0,F.replace(/[?#].*/,"").lastIndexOf("/")+1),B||(ma=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.send(null);return b.responseText},A&&(H=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}),G=(a,b,c)=>{var d=new XMLHttpRequest;
|
14 |
+
d.open("GET",a,!0);d.responseType="arraybuffer";d.onload=()=>{200==d.status||0==d.status&&d.response?b(d.response):c()};d.onerror=c;d.send(null)});B&&"undefined"==typeof performance&&(global.performance=require("perf_hooks").performance);var pa=console.log.bind(console),qa=console.error.bind(console);B&&(pa=(...a)=>fs.writeSync(1,a.join(" ")+"\n"),qa=(...a)=>fs.writeSync(2,a.join(" ")+"\n"));var ra=pa,I=qa;Object.assign(w,ka);ka=null;
|
15 |
+
if(C){var sa;if(B){var ta=D.parentPort;ta.on("message",b=>onmessage({data:b}));Object.assign(globalThis,{self:global,importScripts:()=>{},postMessage:b=>ta.postMessage(b),performance:global.performance||{now:Date.now}})}var ua=!1;I=function(...b){b=b.join(" ");B?fs.writeSync(2,b+"\n"):console.error(b)};self.alert=function(...b){postMessage({Za:"alert",text:b.join(" "),mb:K()})};w.instantiateWasm=(b,c)=>new Promise(d=>{sa=f=>{f=new WebAssembly.Instance(f,va());c(f);d()}});self.onunhandledrejection=
|
16 |
+
b=>{throw b.reason||b;};function a(b){try{var c=b.data,d=c.cmd;if("load"===d){let f=[];self.onmessage=h=>f.push(h);self.startWorker=()=>{postMessage({cmd:"loaded"});for(let h of f)a(h);self.onmessage=a};for(const h of c.handlers)if(!w[h]||w[h].proxy)w[h]=(...k)=>{postMessage({Za:"callHandler",kb:h,args:k})},"print"==h&&(ra=w[h]),"printErr"==h&&(I=w[h]);g=c.wasmMemory;m();sa(c.wasmModule)}else if("run"===d){wa(c.pthread_ptr,0,0,1,0,0);xa(c.pthread_ptr);ya();za();ua||=!0;try{Aa(c.start_routine,c.arg)}catch(f){if("unwind"!=
|
17 |
+
f)throw f;}}else"cancel"===d?K()&&Ba(-1):"setimmediate"!==c.target&&("checkMailbox"===d?ua&&Ca():d&&(I(`worker: received unknown command ${d}`),I(c)))}catch(f){throw Da(),f;}}self.onmessage=a}var L;w.wasmBinary&&(L=w.wasmBinary);var g,Ea,Fa=!1,M,l,ba,ca,da,N,fa;
|
18 |
+
function m(){var a=g.buffer;w.HEAP8=l=new Int8Array(a);w.HEAP16=new Int16Array(a);w.HEAPU8=ba=new Uint8Array(a);w.HEAPU16=new Uint16Array(a);w.HEAP32=ca=new Int32Array(a);w.HEAPU32=da=new Uint32Array(a);w.HEAPF32=new Float32Array(a);w.HEAPF64=fa=new Float64Array(a);w.HEAP64=N=new BigInt64Array(a);w.HEAPU64=new BigUint64Array(a)}
|
19 |
+
if(!C){g=new WebAssembly.Memory({initial:256,maximum:65536,shared:!0});if(!(g.buffer instanceof SharedArrayBuffer))throw I("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"),B&&I("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"),Error("bad memory");m()}
|
20 |
+
var Ga=[],Ha=[],Ia=[],O=0,Ja=null,P=null;function Ka(){O--;if(0==O&&(null!==Ja&&(clearInterval(Ja),Ja=null),P)){var a=P;P=null;a()}}function La(a){a="Aborted("+a+")";I(a);Fa=!0;M=1;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");x(a);throw a;}var Ma=a=>a.startsWith("data:application/octet-stream;base64,"),oa=a=>a.startsWith("file://"),Na;function Oa(a){if(a==Na&&L)return new Uint8Array(L);if(H)return H(a);throw"both async and sync fetching of the wasm failed";}
|
21 |
+
function Pa(a){if(!L&&(ja||A)){if("function"==typeof fetch&&!oa(a))return fetch(a,{credentials:"same-origin"}).then(b=>{if(!b.ok)throw`failed to load wasm binary file at '${a}'`;return b.arrayBuffer()}).catch(()=>Oa(a));if(G)return new Promise((b,c)=>{G(a,d=>b(new Uint8Array(d)),c)})}return Promise.resolve().then(()=>Oa(a))}function Qa(a,b,c){return Pa(a).then(d=>WebAssembly.instantiate(d,b)).then(c,d=>{I(`failed to asynchronously prepare wasm: ${d}`);La(d)})}
|
22 |
+
function Ra(a,b){var c=Na;return L||"function"!=typeof WebAssembly.instantiateStreaming||Ma(c)||oa(c)||B||"function"!=typeof fetch?Qa(c,a,b):fetch(c,{credentials:"same-origin"}).then(d=>WebAssembly.instantiateStreaming(d,a).then(b,function(f){I(`wasm streaming compile failed: ${f}`);I("falling back to ArrayBuffer instantiation");return Qa(c,a,b)}))}
|
23 |
+
function va(){Sa={j:Ta,b:Ua,E:Va,g:Wa,V:Xa,A:Ya,C:Za,W:$a,T:ab,L:bb,S:cb,o:db,B:eb,y:fb,U:gb,z:hb,_:ib,Z:jb,P:kb,w:lb,F:mb,k:nb,O:xa,Y:ob,I:pb,J:qb,K:rb,G:sb,H:tb,v:ub,q:vb,l:wb,p:xb,e:yb,X:zb,x:Ab,d:Bb,f:Cb,i:Db,u:Eb,t:Fb,s:Gb,Q:Hb,R:Ib,D:Jb,h:Kb,n:Lb,M:Mb,m:Nb,a:g,r:Ob,N:Pb,c:Qb};return{a:Sa}}
|
24 |
+
var Rb={821972:(a,b,c,d)=>{if("undefined"==typeof w||!w.Ua)return 1;a=Q(a>>>0);a.startsWith("./")&&(a=a.substring(2));a=w.Ua.get(a);if(!a)return 2;b>>>=0;c>>>=0;d>>>=0;if(b+c>a.byteLength)return 3;try{return n().set(a.subarray(b,b+c),d>>>0),0}catch{return 4}},822473:()=>"undefined"!==typeof wasmOffsetConverter};function Ta(){return"undefined"!==typeof wasmOffsetConverter}function Sb(a){this.name="ExitStatus";this.message=`Program terminated with exit(${a})`;this.status=a}
|
25 |
+
var Tb=a=>{a.terminate();a.onmessage=()=>{}},Wb=a=>{0==R.length&&(Ub(),Vb(R[0]));var b=R.pop();if(!b)return 6;S.push(b);T[a.Ra]=b;b.Ra=a.Ra;var c={cmd:"run",start_routine:a.cb,arg:a.ab,pthread_ptr:a.Ra};B&&b.unref();b.postMessage(c,a.ib);return 0},U=0,V=(a,b,...c)=>{for(var d=2*c.length,f=$b(),h=ac(8*d),k=h>>>3,q=0;q<c.length;q++){var y=c[q];"bigint"==typeof y?(N[k+2*q]=1n,N[k+2*q+1]=y):(N[k+2*q]=0n,ea()[k+2*q+1>>>0]=y)}a=bc(a,0,d,h,b);cc(f);return a};
|
26 |
+
function Ob(a){if(C)return V(0,1,a);M=a;if(!(0<U)){for(var b of S)Tb(b);for(b of R)Tb(b);R=[];S=[];T=[];Fa=!0}E(a,new Sb(a))}function dc(a){if(C)return V(1,0,a);Jb(a)}var Jb=a=>{M=a;if(C)throw dc(a),"unwind";Ob(a)},R=[],S=[],ec=[],T={};function fc(){for(var a=w.numThreads-1;a--;)Ub();Ga.unshift(()=>{O++;gc(()=>Ka())})}var ic=a=>{var b=a.Ra;delete T[b];R.push(a);S.splice(S.indexOf(a),1);a.Ra=0;hc(b)};function za(){ec.forEach(a=>a())}
|
27 |
+
var Vb=a=>new Promise(b=>{a.onmessage=h=>{h=h.data;var k=h.cmd;if(h.targetThread&&h.targetThread!=K()){var q=T[h.targetThread];q?q.postMessage(h,h.transferList):I(`Internal error! Worker sent a message "${k}" to target pthread ${h.targetThread}, but that thread no longer exists!`)}else if("checkMailbox"===k)Ca();else if("spawnThread"===k)Wb(h);else if("cleanupThread"===k)ic(T[h.thread]);else if("killThread"===k)h=h.thread,k=T[h],delete T[h],Tb(k),hc(h),S.splice(S.indexOf(k),1),k.Ra=0;else if("cancelThread"===
|
28 |
+
k)T[h.thread].postMessage({cmd:"cancel"});else if("loaded"===k)a.loaded=!0,B&&!a.Ra&&a.unref(),b(a);else if("alert"===k)alert(`Thread ${h.threadId}: ${h.text}`);else if("setimmediate"===h.target)a.postMessage(h);else if("callHandler"===k)w[h.handler](...h.args);else k&&I(`worker sent an unknown command ${k}`)};a.onerror=h=>{I(`${"worker sent an error!"} ${h.filename}:${h.lineno}: ${h.message}`);throw h;};B&&(a.on("message",h=>a.onmessage({data:h})),a.on("error",h=>a.onerror(h)));var c=[],d=[],f;for(f of d)w.hasOwnProperty(f)&&
|
29 |
+
c.push(f);a.postMessage({cmd:"load",handlers:c,wasmMemory:g,wasmModule:Ea})});function gc(a){C?a():Promise.all(R.map(Vb)).then(a)}function Ub(){var a=new Worker(new URL(import.meta.url),{type:"module",workerData:"em-pthread",name:"em-pthread"});R.push(a)}var jc=a=>{for(;0<a.length;)a.shift()(w)},ya=()=>{var a=K(),b=u()[a+52>>>2>>>0];a=u()[a+56>>>2>>>0];kc(b,b-a);cc(b)},lc=[],mc,Aa=(a,b)=>{U=0;var c=lc[a];c||(a>=lc.length&&(lc.length=a+1),lc[a]=c=mc.get(a));a=c(b);0<U?M=a:Ba(a)};
|
30 |
+
class nc{constructor(a){this.Xa=a-24}}var oc=0,pc=0;function Ua(a,b,c){a>>>=0;var d=new nc(a);b>>>=0;c>>>=0;u()[d.Xa+16>>>2>>>0]=0;u()[d.Xa+4>>>2>>>0]=b;u()[d.Xa+8>>>2>>>0]=c;oc=a;pc++;throw oc;}function qc(a,b,c,d){return C?V(2,1,a,b,c,d):Va(a,b,c,d)}
|
31 |
+
function Va(a,b,c,d){a>>>=0;b>>>=0;c>>>=0;d>>>=0;if("undefined"==typeof SharedArrayBuffer)return I("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var f=[];if(C&&0===f.length)return qc(a,b,c,d);a={cb:c,Ra:a,ab:d,ib:f};return C?(a.Za="spawnThread",postMessage(a,f),0):Wb(a)}
|
32 |
+
var rc="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0,sc=(a,b,c)=>{b>>>=0;var d=b+c;for(c=b;a[c]&&!(c>=d);)++c;if(16<c-b&&a.buffer&&rc)return rc.decode(a.buffer instanceof SharedArrayBuffer?a.slice(b,c):a.subarray(b,c));for(d="";b<c;){var f=a[b++];if(f&128){var h=a[b++]&63;if(192==(f&224))d+=String.fromCharCode((f&31)<<6|h);else{var k=a[b++]&63;f=224==(f&240)?(f&15)<<12|h<<6|k:(f&7)<<18|h<<12|k<<6|a[b++]&63;65536>f?d+=String.fromCharCode(f):(f-=65536,d+=String.fromCharCode(55296|f>>
|
33 |
+
10,56320|f&1023))}}else d+=String.fromCharCode(f)}return d},Q=(a,b)=>(a>>>=0)?sc(n(),a,b):"";function Wa(a,b,c){return C?V(3,1,a,b,c):0}function Xa(a,b){if(C)return V(4,1,a,b)}
|
34 |
+
var tc=a=>{for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);127>=d?b++:2047>=d?b+=2:55296<=d&&57343>=d?(b+=4,++c):b+=3}return b},uc=(a,b,c,d)=>{c>>>=0;if(!(0<d))return 0;var f=c;d=c+d-1;for(var h=0;h<a.length;++h){var k=a.charCodeAt(h);if(55296<=k&&57343>=k){var q=a.charCodeAt(++h);k=65536+((k&1023)<<10)|q&1023}if(127>=k){if(c>=d)break;b[c++>>>0]=k}else{if(2047>=k){if(c+1>=d)break;b[c++>>>0]=192|k>>6}else{if(65535>=k){if(c+2>=d)break;b[c++>>>0]=224|k>>12}else{if(c+3>=d)break;b[c++>>>0]=240|k>>
|
35 |
+
18;b[c++>>>0]=128|k>>12&63}b[c++>>>0]=128|k>>6&63}b[c++>>>0]=128|k&63}}b[c>>>0]=0;return c-f},W=(a,b,c)=>uc(a,n(),b,c);function Ya(a,b){if(C)return V(5,1,a,b)}function Za(a,b,c){if(C)return V(6,1,a,b,c)}function $a(a,b,c){return C?V(7,1,a,b,c):0}function ab(a,b){if(C)return V(8,1,a,b)}function bb(a,b,c){if(C)return V(9,1,a,b,c)}function cb(a,b,c,d){if(C)return V(10,1,a,b,c,d)}function db(a,b,c,d){if(C)return V(11,1,a,b,c,d)}function eb(a,b,c,d){if(C)return V(12,1,a,b,c,d)}
|
36 |
+
function fb(a){if(C)return V(13,1,a)}function gb(a,b){if(C)return V(14,1,a,b)}function hb(a,b,c){if(C)return V(15,1,a,b,c)}var ib=()=>{La("")},jb=()=>1;function kb(a){wa(a>>>0,!A,1,!ja,131072,!1);za()}function xa(a){a>>>=0;"function"===typeof Atomics.jb&&(Atomics.jb(r(),a>>>2,a).value.then(Ca),a+=128,Atomics.store(r(),a>>>2,1))}
|
37 |
+
var Ca=()=>{var a=K();if(a&&(xa(a),a=vc,!Fa))try{if(a(),!(0<U))try{C?Ba(M):Jb(M)}catch(b){b instanceof Sb||"unwind"==b||E(1,b)}}catch(b){b instanceof Sb||"unwind"==b||E(1,b)}};function lb(a,b){a>>>=0;a==b>>>0?setTimeout(Ca):C?postMessage({targetThread:a,cmd:"checkMailbox"}):(a=T[a])&&a.postMessage({cmd:"checkMailbox"})}var wc=[];function mb(a,b,c,d,f){b>>>=0;d/=2;wc.length=d;c=f>>>0>>>3;for(f=0;f<d;f++)wc[f]=N[c+2*f]?N[c+2*f+1]:ea()[c+2*f+1>>>0];return(b?Rb[b]:xc[a])(...wc)}
|
38 |
+
function nb(a){a>>>=0;C?postMessage({cmd:"cleanupThread",thread:a}):ic(T[a])}function ob(a){B&&T[a>>>0].ref()}
|
39 |
+
function pb(a,b){a=-9007199254740992>a||9007199254740992<a?NaN:Number(a);b>>>=0;a=new Date(1E3*a);r()[b>>>2>>>0]=a.getUTCSeconds();r()[b+4>>>2>>>0]=a.getUTCMinutes();r()[b+8>>>2>>>0]=a.getUTCHours();r()[b+12>>>2>>>0]=a.getUTCDate();r()[b+16>>>2>>>0]=a.getUTCMonth();r()[b+20>>>2>>>0]=a.getUTCFullYear()-1900;r()[b+24>>>2>>>0]=a.getUTCDay();a=(a.getTime()-Date.UTC(a.getUTCFullYear(),0,1,0,0,0,0))/864E5|0;r()[b+28>>>2>>>0]=a}
|
40 |
+
var X=a=>0===a%4&&(0!==a%100||0===a%400),yc=[0,31,60,91,121,152,182,213,244,274,305,335],zc=[0,31,59,90,120,151,181,212,243,273,304,334];
|
41 |
+
function qb(a,b){a=-9007199254740992>a||9007199254740992<a?NaN:Number(a);b>>>=0;a=new Date(1E3*a);r()[b>>>2>>>0]=a.getSeconds();r()[b+4>>>2>>>0]=a.getMinutes();r()[b+8>>>2>>>0]=a.getHours();r()[b+12>>>2>>>0]=a.getDate();r()[b+16>>>2>>>0]=a.getMonth();r()[b+20>>>2>>>0]=a.getFullYear()-1900;r()[b+24>>>2>>>0]=a.getDay();var c=(X(a.getFullYear())?yc:zc)[a.getMonth()]+a.getDate()-1|0;r()[b+28>>>2>>>0]=c;r()[b+36>>>2>>>0]=-(60*a.getTimezoneOffset());c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset();
|
42 |
+
var d=(new Date(a.getFullYear(),0,1)).getTimezoneOffset();a=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0;r()[b+32>>>2>>>0]=a}
|
43 |
+
function rb(a){a>>>=0;var b=new Date(r()[a+20>>>2>>>0]+1900,r()[a+16>>>2>>>0],r()[a+12>>>2>>>0],r()[a+8>>>2>>>0],r()[a+4>>>2>>>0],r()[a>>>2>>>0],0),c=r()[a+32>>>2>>>0],d=b.getTimezoneOffset(),f=(new Date(b.getFullYear(),6,1)).getTimezoneOffset(),h=(new Date(b.getFullYear(),0,1)).getTimezoneOffset(),k=Math.min(h,f);0>c?r()[a+32>>>2>>>0]=Number(f!=h&&k==d):0<c!=(k==d)&&(f=Math.max(h,f),b.setTime(b.getTime()+6E4*((0<c?k:f)-d)));r()[a+24>>>2>>>0]=b.getDay();c=(X(b.getFullYear())?yc:zc)[b.getMonth()]+
|
44 |
+
b.getDate()-1|0;r()[a+28>>>2>>>0]=c;r()[a>>>2>>>0]=b.getSeconds();r()[a+4>>>2>>>0]=b.getMinutes();r()[a+8>>>2>>>0]=b.getHours();r()[a+12>>>2>>>0]=b.getDate();r()[a+16>>>2>>>0]=b.getMonth();r()[a+20>>>2>>>0]=b.getYear();a=b.getTime();return BigInt(isNaN(a)?-1:a/1E3)}function sb(a,b,c,d,f,h,k){return C?V(16,1,a,b,c,d,f,h,k):-52}function tb(a,b,c,d,f,h){if(C)return V(17,1,a,b,c,d,f,h)}
|
45 |
+
function ub(a,b,c,d){a>>>=0;b>>>=0;c>>>=0;d>>>=0;var f=(new Date).getFullYear(),h=new Date(f,0,1),k=new Date(f,6,1);f=h.getTimezoneOffset();var q=k.getTimezoneOffset(),y=Math.max(f,q);u()[a>>>2>>>0]=60*y;r()[b>>>2>>>0]=Number(f!=q);a=v=>v.toLocaleTimeString(void 0,{hour12:!1,timeZoneName:"short"}).split(" ")[1];h=a(h);k=a(k);q<f?(W(h,c,17),W(k,d,17)):(W(h,d,17),W(k,c,17))}var Ac=[];
|
46 |
+
function vb(a,b,c){a>>>=0;b>>>=0;c>>>=0;Ac.length=0;for(var d;d=n()[b++>>>0];){var f=105!=d;f&=112!=d;c+=f&&c%8?4:0;Ac.push(112==d?u()[c>>>2>>>0]:106==d?N[c>>>3]:105==d?r()[c>>>2>>>0]:ea()[c>>>3>>>0]);c+=f?8:4}return Rb[a](...Ac)}var wb=()=>{},xb=()=>Date.now();function yb(a,b){return I(Q(a>>>0,b>>>0))}var zb=()=>{U+=1;throw"unwind";};function Ab(){return 4294901760}var Bb;Bb=()=>performance.timeOrigin+performance.now();var Cb=()=>B?require("os").cpus().length:navigator.hardwareConcurrency;
|
47 |
+
function Db(){La("Cannot use emscripten_pc_get_function without -sUSE_OFFSET_CONVERTER");return 0}function Eb(a){a>>>=0;var b=n().length;if(a<=b||4294901760<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);var f=Math;d=Math.max(a,d);a:{f=(f.min.call(f,4294901760,d+(65536-d%65536)%65536)-g.buffer.byteLength+65535)/65536;try{g.grow(f);m();var h=1;break a}catch(k){}h=void 0}if(h)return!0}return!1}
|
48 |
+
var Bc=()=>{La("Cannot use convertFrameToPC (needed by __builtin_return_address) without -sUSE_OFFSET_CONVERTER");return 0},Y={},Cc=a=>{a.forEach(b=>{var c=Bc();c&&(Y[c]=b)})};function Fb(){var a=Error().stack.toString().split("\n");"Error"==a[0]&&a.shift();Cc(a);Y.$a=Bc();Y.bb=a;return Y.$a}
|
49 |
+
function Gb(a,b,c){a>>>=0;b>>>=0;if(Y.$a==a)var d=Y.bb;else d=Error().stack.toString().split("\n"),"Error"==d[0]&&d.shift(),Cc(d);for(var f=3;d[f]&&Bc()!=a;)++f;for(a=0;a<c&&d[a+f];++a)r()[b+4*a>>>2>>>0]=Bc();return a}
|
50 |
+
var Dc={},Fc=()=>{if(!Ec){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:la||"./this.program"},b;for(b in Dc)void 0===Dc[b]?delete a[b]:a[b]=Dc[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);Ec=c}return Ec},Ec;
|
51 |
+
function Hb(a,b){if(C)return V(18,1,a,b);a>>>=0;b>>>=0;var c=0;Fc().forEach((d,f)=>{var h=b+c;f=u()[a+4*f>>>2>>>0]=h;for(h=0;h<d.length;++h)aa()[f++>>>0]=d.charCodeAt(h);aa()[f>>>0]=0;c+=d.length+1});return 0}function Ib(a,b){if(C)return V(19,1,a,b);a>>>=0;b>>>=0;var c=Fc();u()[a>>>2>>>0]=c.length;var d=0;c.forEach(f=>d+=f.length+1);u()[b>>>2>>>0]=d;return 0}function Kb(a){return C?V(20,1,a):52}function Lb(a,b,c,d){return C?V(21,1,a,b,c,d):52}function Mb(a,b,c,d){return C?V(22,1,a,b,c,d):70}
|
52 |
+
var Gc=[null,[],[]];function Nb(a,b,c,d){if(C)return V(23,1,a,b,c,d);b>>>=0;c>>>=0;d>>>=0;for(var f=0,h=0;h<c;h++){var k=u()[b>>>2>>>0],q=u()[b+4>>>2>>>0];b+=8;for(var y=0;y<q;y++){var v=n()[k+y>>>0],z=Gc[a];0===v||10===v?((1===a?ra:I)(sc(z,0)),z.length=0):z.push(v)}f+=q}u()[d>>>2>>>0]=f;return 0}var Hc=[31,29,31,30,31,30,31,31,30,31,30,31],Ic=[31,28,31,30,31,30,31,31,30,31,30,31];function Jc(a){var b=Array(tc(a)+1);uc(a,b,0,b.length);return b}var Kc=(a,b)=>{aa().set(a,b>>>0)};
|
53 |
+
function Pb(a,b,c,d){function f(e,p,t){for(e="number"==typeof e?e.toString():e||"";e.length<p;)e=t[0]+e;return e}function h(e,p){return f(e,p,"0")}function k(e,p){function t(Xb){return 0>Xb?-1:0<Xb?1:0}var J;0===(J=t(e.getFullYear()-p.getFullYear()))&&0===(J=t(e.getMonth()-p.getMonth()))&&(J=t(e.getDate()-p.getDate()));return J}function q(e){switch(e.getDay()){case 0:return new Date(e.getFullYear()-1,11,29);case 1:return e;case 2:return new Date(e.getFullYear(),0,3);case 3:return new Date(e.getFullYear(),
|
54 |
+
0,2);case 4:return new Date(e.getFullYear(),0,1);case 5:return new Date(e.getFullYear()-1,11,31);case 6:return new Date(e.getFullYear()-1,11,30)}}function y(e){var p=e.Sa;for(e=new Date((new Date(e.Ta+1900,0,1)).getTime());0<p;){var t=e.getMonth(),J=(X(e.getFullYear())?Hc:Ic)[t];if(p>J-e.getDate())p-=J-e.getDate()+1,e.setDate(1),11>t?e.setMonth(t+1):(e.setMonth(0),e.setFullYear(e.getFullYear()+1));else{e.setDate(e.getDate()+p);break}}t=new Date(e.getFullYear()+1,0,4);p=q(new Date(e.getFullYear(),
|
55 |
+
0,4));t=q(t);return 0>=k(p,e)?0>=k(t,e)?e.getFullYear()+1:e.getFullYear():e.getFullYear()-1}a>>>=0;b>>>=0;c>>>=0;d>>>=0;var v=u()[d+40>>>2>>>0];d={gb:r()[d>>>2>>>0],fb:r()[d+4>>>2>>>0],Va:r()[d+8>>>2>>>0],Ya:r()[d+12>>>2>>>0],Wa:r()[d+16>>>2>>>0],Ta:r()[d+20>>>2>>>0],Qa:r()[d+24>>>2>>>0],Sa:r()[d+28>>>2>>>0],nb:r()[d+32>>>2>>>0],eb:r()[d+36>>>2>>>0],hb:v?Q(v):""};c=Q(c);v={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y",
|
56 |
+
"%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var z in v)c=c.replace(new RegExp(z,"g"),v[z]);var Yb="Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),Zb="January February March April May June July August September October November December".split(" ");v={"%a":e=>Yb[e.Qa].substring(0,3),
|
57 |
+
"%A":e=>Yb[e.Qa],"%b":e=>Zb[e.Wa].substring(0,3),"%B":e=>Zb[e.Wa],"%C":e=>h((e.Ta+1900)/100|0,2),"%d":e=>h(e.Ya,2),"%e":e=>f(e.Ya,2," "),"%g":e=>y(e).toString().substring(2),"%G":y,"%H":e=>h(e.Va,2),"%I":e=>{e=e.Va;0==e?e=12:12<e&&(e-=12);return h(e,2)},"%j":e=>{for(var p=0,t=0;t<=e.Wa-1;p+=(X(e.Ta+1900)?Hc:Ic)[t++]);return h(e.Ya+p,3)},"%m":e=>h(e.Wa+1,2),"%M":e=>h(e.fb,2),"%n":()=>"\n","%p":e=>0<=e.Va&&12>e.Va?"AM":"PM","%S":e=>h(e.gb,2),"%t":()=>"\t","%u":e=>e.Qa||7,"%U":e=>h(Math.floor((e.Sa+
|
58 |
+
7-e.Qa)/7),2),"%V":e=>{var p=Math.floor((e.Sa+7-(e.Qa+6)%7)/7);2>=(e.Qa+371-e.Sa-2)%7&&p++;if(p)53==p&&(t=(e.Qa+371-e.Sa)%7,4==t||3==t&&X(e.Ta)||(p=1));else{p=52;var t=(e.Qa+7-e.Sa-1)%7;(4==t||5==t&&X(e.Ta%400-1))&&p++}return h(p,2)},"%w":e=>e.Qa,"%W":e=>h(Math.floor((e.Sa+7-(e.Qa+6)%7)/7),2),"%y":e=>(e.Ta+1900).toString().substring(2),"%Y":e=>e.Ta+1900,"%z":e=>{e=e.eb;var p=0<=e;e=Math.abs(e)/60;return(p?"+":"-")+String("0000"+(e/60*100+e%60)).slice(-4)},"%Z":e=>e.hb,"%%":()=>"%"};c=c.replace(/%%/g,
|
59 |
+
"\x00\x00");for(z in v)c.includes(z)&&(c=c.replace(new RegExp(z,"g"),v[z](d)));c=c.replace(/\0\0/g,"%");z=Jc(c);if(z.length>b)return 0;Kc(z,a);return z.length-1}function Qb(a,b,c,d){return Pb(a>>>0,b>>>0,c>>>0,d>>>0)}C||fc();
|
60 |
+
var xc=[Ob,dc,qc,Wa,Xa,Ya,Za,$a,ab,bb,cb,db,eb,fb,gb,hb,sb,tb,Hb,Ib,Kb,Lb,Mb,Nb],Sa,Z=function(){function a(c,d){Z=c.exports;Z=Lc();ec.push(Z.Ea);mc=Z.Fa;Ha.unshift(Z.$);Ea=d;Ka();return Z}var b=va();O++;if(w.instantiateWasm)try{return w.instantiateWasm(b,a)}catch(c){I(`Module.instantiateWasm callback failed with error: ${c}`),x(c)}Na||=w.locateFile?Ma("ort-wasm-simd-threaded.wasm")?"ort-wasm-simd-threaded.wasm":w.locateFile?w.locateFile("ort-wasm-simd-threaded.wasm",F):F+"ort-wasm-simd-threaded.wasm":
|
61 |
+
(new URL("ort-wasm-simd-threaded.wasm",import.meta.url)).href;Ra(b,function(c){a(c.instance,c.module)}).catch(x);return{}}();w._OrtInit=(a,b)=>(w._OrtInit=Z.aa)(a,b);w._OrtGetLastError=(a,b)=>(w._OrtGetLastError=Z.ba)(a,b);w._OrtCreateSessionOptions=(a,b,c,d,f,h,k,q,y,v)=>(w._OrtCreateSessionOptions=Z.ca)(a,b,c,d,f,h,k,q,y,v);w._OrtAppendExecutionProvider=(a,b)=>(w._OrtAppendExecutionProvider=Z.da)(a,b);w._OrtAddFreeDimensionOverride=(a,b,c)=>(w._OrtAddFreeDimensionOverride=Z.ea)(a,b,c);
|
62 |
+
w._OrtAddSessionConfigEntry=(a,b,c)=>(w._OrtAddSessionConfigEntry=Z.fa)(a,b,c);w._OrtReleaseSessionOptions=a=>(w._OrtReleaseSessionOptions=Z.ga)(a);w._OrtCreateSession=(a,b,c)=>(w._OrtCreateSession=Z.ha)(a,b,c);w._OrtReleaseSession=a=>(w._OrtReleaseSession=Z.ia)(a);w._OrtGetInputOutputCount=(a,b,c)=>(w._OrtGetInputOutputCount=Z.ja)(a,b,c);w._OrtGetInputName=(a,b)=>(w._OrtGetInputName=Z.ka)(a,b);w._OrtGetOutputName=(a,b)=>(w._OrtGetOutputName=Z.la)(a,b);w._OrtFree=a=>(w._OrtFree=Z.ma)(a);
|
63 |
+
w._OrtCreateTensor=(a,b,c,d,f,h)=>(w._OrtCreateTensor=Z.na)(a,b,c,d,f,h);w._OrtGetTensorData=(a,b,c,d,f)=>(w._OrtGetTensorData=Z.oa)(a,b,c,d,f);w._OrtReleaseTensor=a=>(w._OrtReleaseTensor=Z.pa)(a);w._OrtCreateRunOptions=(a,b,c,d)=>(w._OrtCreateRunOptions=Z.qa)(a,b,c,d);w._OrtAddRunConfigEntry=(a,b,c)=>(w._OrtAddRunConfigEntry=Z.ra)(a,b,c);w._OrtReleaseRunOptions=a=>(w._OrtReleaseRunOptions=Z.sa)(a);w._OrtCreateBinding=a=>(w._OrtCreateBinding=Z.ta)(a);
|
64 |
+
w._OrtBindInput=(a,b,c)=>(w._OrtBindInput=Z.ua)(a,b,c);w._OrtBindOutput=(a,b,c,d)=>(w._OrtBindOutput=Z.va)(a,b,c,d);w._OrtClearBoundOutputs=a=>(w._OrtClearBoundOutputs=Z.wa)(a);w._OrtReleaseBinding=a=>(w._OrtReleaseBinding=Z.xa)(a);w._OrtRunWithBinding=(a,b,c,d,f)=>(w._OrtRunWithBinding=Z.ya)(a,b,c,d,f);w._OrtRun=(a,b,c,d,f,h,k,q)=>(w._OrtRun=Z.za)(a,b,c,d,f,h,k,q);w._OrtEndProfiling=a=>(w._OrtEndProfiling=Z.Aa)(a);var K=()=>(K=Z.Ba)();w._malloc=a=>(w._malloc=Z.Ca)(a);w._free=a=>(w._free=Z.Da)(a);
|
65 |
+
var wa=(a,b,c,d,f,h)=>(wa=Z.Ga)(a,b,c,d,f,h),Da=()=>(Da=Z.Ha)(),bc=(a,b,c,d,f)=>(bc=Z.Ia)(a,b,c,d,f),hc=a=>(hc=Z.Ja)(a),Ba=a=>(Ba=Z.Ka)(a),vc=()=>(vc=Z.La)(),kc=(a,b)=>(kc=Z.Ma)(a,b),cc=a=>(cc=Z.Na)(a),ac=a=>(ac=Z.Oa)(a),$b=()=>($b=Z.Pa)();w.___start_em_js=822530;w.___stop_em_js=822591;
|
66 |
+
function Lc(){var a=Z;a=Object.assign({},a);var b=d=>()=>d()>>>0,c=d=>f=>d(f)>>>0;a.Ba=b(a.Ba);a.Ca=c(a.Ca);a.emscripten_main_runtime_thread_id=b(a.emscripten_main_runtime_thread_id);a.Oa=c(a.Oa);a.Pa=b(a.Pa);return a}w.stackSave=()=>$b();w.stackRestore=a=>cc(a);w.stackAlloc=a=>ac(a);w.UTF8ToString=Q;w.stringToUTF8=W;w.lengthBytesUTF8=tc;var Mc;P=function Nc(){Mc||Oc();Mc||(P=Nc)};
|
67 |
+
function Oc(){0<O||(C?(ha(w),C||jc(Ha),startWorker(w)):(jc(Ga),0<O||Mc||(Mc=!0,w.calledRun=!0,Fa||(C||jc(Ha),ha(w),C||jc(Ia)))))}Oc();moduleRtn=ia;
|
68 |
+
|
69 |
+
|
70 |
+
return moduleRtn;
|
71 |
+
}
|
72 |
+
);
|
73 |
+
})();
|
74 |
+
export default ortWasmThreaded;
|
75 |
+
var isPthread = globalThis.self?.name === 'em-pthread';
|
76 |
+
var isNode = typeof globalThis.process?.versions?.node == 'string';
|
77 |
+
if (isNode) isPthread = (await import('worker_threads')).workerData === 'em-pthread';
|
78 |
+
|
79 |
+
// When running as a pthread, construct a new instance on startup
|
80 |
+
isPthread && ortWasmThreaded();
|
js-esm/ort-wasm-simd-threaded.wasm
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:9a5219201ef1b107170a042bfe91ae128f9d6736b7b061a3eef299a23d813569
|
3 |
+
size 11018122
|
js-esm/ort.min.js
ADDED
The diff for this file is too large to render.
See raw diff
|
|
js-esm/ort.min.js.map
ADDED
The diff for this file is too large to render.
See raw diff
|
|
js-esm/text_to_arpa.js
ADDED
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { pipeline, env } from 'https://cdn.jsdelivr.net/npm/@xenova/transformers@2.17.2';
|
2 |
+
|
3 |
+
|
4 |
+
async function text2text_generation(words,convert_ipa=false) {
|
5 |
+
const generator = await pipeline('text2text-generation', 'mini-bart-g2p',{quantized: false});
|
6 |
+
const inputTexts = words;
|
7 |
+
const options = { max_new_tokens: 100 };
|
8 |
+
const outputs = await generator(inputTexts, options);
|
9 |
+
|
10 |
+
if (convert_ipa){
|
11 |
+
const ipas = []
|
12 |
+
outputs.forEach(output => {
|
13 |
+
const ipa = arpa_to_ipa(output.generated_text).replace(/\s/g, "")
|
14 |
+
ipas.push(ipa)
|
15 |
+
});
|
16 |
+
return ipas
|
17 |
+
}else{
|
18 |
+
return outputs //arpa
|
19 |
+
}
|
20 |
+
|
21 |
+
}
|
22 |
+
|
23 |
+
|
24 |
+
async function textToArpa(cmudict,text,replace_questions=false){
|
25 |
+
if (replace_questions){
|
26 |
+
text = text.replaceAll("!",".").replaceAll("?",".")
|
27 |
+
}
|
28 |
+
const cleanedString = text.replace(/[^a-zA-Z0-9.,!? ]/g, '');
|
29 |
+
|
30 |
+
const dict = wordsToArpa(cmudict,cleanedString)
|
31 |
+
|
32 |
+
|
33 |
+
|
34 |
+
const result = dict["result"]
|
35 |
+
const non_converted = dict["non_converted"]
|
36 |
+
|
37 |
+
let arpa_text = result.join(" ");
|
38 |
+
|
39 |
+
//console.log(non_converted.length)
|
40 |
+
if (non_converted.length > 0){
|
41 |
+
console.log("non_converted length = "+non_converted.length)
|
42 |
+
const arpas = await text2text_generation(non_converted)
|
43 |
+
console.log(arpas)
|
44 |
+
for (let i = 0; i < non_converted.length; i++) {
|
45 |
+
const word = non_converted[i]
|
46 |
+
const arpa = arpas[i].generated_text
|
47 |
+
console.log("@"+word,arpa)
|
48 |
+
arpa_text = arpa_text.replace("@"+word,arpa)
|
49 |
+
}
|
50 |
+
}
|
51 |
+
return arpa_text
|
52 |
+
|
53 |
+
}
|
54 |
+
|
55 |
+
function get_arpa(cmudict,word){
|
56 |
+
return cmudict[word.toUpperCase()]
|
57 |
+
}
|
58 |
+
|
59 |
+
function wordsToArpa(cmudict,text){
|
60 |
+
var keep_words = [",",".","!","?"]
|
61 |
+
let inputText = text.toUpperCase()
|
62 |
+
keep_words.forEach(function(key){
|
63 |
+
inputText = inputText.replaceAll(key," "+key+" ");
|
64 |
+
});
|
65 |
+
//console.log(`replaced ${inputText}`)
|
66 |
+
|
67 |
+
let result = []
|
68 |
+
let non_converted = []
|
69 |
+
var words = inputText.split(" ")
|
70 |
+
|
71 |
+
words.forEach(word => {
|
72 |
+
|
73 |
+
if (keep_words.includes(word)){//,.!? just keep
|
74 |
+
result.push(word)
|
75 |
+
}else if (word ==""){
|
76 |
+
|
77 |
+
}else{
|
78 |
+
const arpa = get_arpa(cmudict,word)
|
79 |
+
|
80 |
+
if (typeof arpa == "undefined"){
|
81 |
+
result.push("@"+word)
|
82 |
+
non_converted.push(word)
|
83 |
+
}else{
|
84 |
+
result.push(arpa)
|
85 |
+
}
|
86 |
+
}
|
87 |
+
});
|
88 |
+
|
89 |
+
return {"result":result,"non_converted":non_converted}
|
90 |
+
}
|
91 |
+
|
92 |
+
export{env,textToArpa}
|
js-esm/web_wav_play.js
ADDED
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
|
3 |
+
function webWavPlay(f32array){
|
4 |
+
const blob = float32ArrayToWav(f32array)
|
5 |
+
const url = createObjectUrlFromBlob(blob)
|
6 |
+
playAudioFromUrl(url)
|
7 |
+
return blob
|
8 |
+
}
|
9 |
+
|
10 |
+
function createObjectUrlFromBlob(blob) {
|
11 |
+
const url = URL.createObjectURL(blob);
|
12 |
+
return url;
|
13 |
+
}
|
14 |
+
|
15 |
+
function playAudioFromUrl(url) {
|
16 |
+
const audio = new Audio(url);
|
17 |
+
audio.play().catch(error => console.error('Failed to play audio:', error));
|
18 |
+
}
|
19 |
+
|
20 |
+
|
21 |
+
//I copied
|
22 |
+
//https://huggingface.co/spaces/k2-fsa/web-assembly-tts-sherpa-onnx-de/blob/main/app-tts.js
|
23 |
+
// this function is copied/modified from
|
24 |
+
// https://gist.github.com/meziantou/edb7217fddfbb70e899e
|
25 |
+
function float32ArrayToWav(floatSamples, sampleRate=22050) {
|
26 |
+
let samples = new Int16Array(floatSamples.length);
|
27 |
+
for (let i = 0; i < samples.length; ++i) {
|
28 |
+
let s = floatSamples[i];
|
29 |
+
if (s >= 1)
|
30 |
+
s = 1;
|
31 |
+
else if (s <= -1)
|
32 |
+
s = -1;
|
33 |
+
|
34 |
+
samples[i] = s * 32767;
|
35 |
+
}
|
36 |
+
|
37 |
+
let buf = new ArrayBuffer(44 + samples.length * 2);
|
38 |
+
var view = new DataView(buf);
|
39 |
+
|
40 |
+
// http://soundfile.sapp.org/doc/WaveFormat/
|
41 |
+
// F F I R
|
42 |
+
view.setUint32(0, 0x46464952, true); // chunkID
|
43 |
+
view.setUint32(4, 36 + samples.length * 2, true); // chunkSize
|
44 |
+
// E V A W
|
45 |
+
view.setUint32(8, 0x45564157, true); // format
|
46 |
+
//
|
47 |
+
// t m f
|
48 |
+
view.setUint32(12, 0x20746d66, true); // subchunk1ID
|
49 |
+
view.setUint32(16, 16, true); // subchunk1Size, 16 for PCM
|
50 |
+
view.setUint32(20, 1, true); // audioFormat, 1 for PCM
|
51 |
+
view.setUint16(22, 1, true); // numChannels: 1 channel
|
52 |
+
view.setUint32(24, sampleRate, true); // sampleRate
|
53 |
+
view.setUint32(28, sampleRate * 2, true); // byteRate
|
54 |
+
view.setUint16(32, 2, true); // blockAlign
|
55 |
+
view.setUint16(34, 16, true); // bitsPerSample
|
56 |
+
view.setUint32(36, 0x61746164, true); // Subchunk2ID
|
57 |
+
view.setUint32(40, samples.length * 2, true); // subchunk2Size
|
58 |
+
|
59 |
+
let offset = 44;
|
60 |
+
for (let i = 0; i < samples.length; ++i) {
|
61 |
+
view.setInt16(offset, samples[i], true);
|
62 |
+
offset += 2;
|
63 |
+
}
|
64 |
+
|
65 |
+
return new Blob([view], {type: 'audio/wav'});
|
66 |
+
}
|
67 |
+
|
68 |
+
export { webWavPlay };
|
matcha_tts_speak_en001.html
ADDED
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html lang="en">
|
3 |
+
<head>
|
4 |
+
<meta charset="UTF-8">
|
5 |
+
<title>Match-TTS Onnx En001-English</title>
|
6 |
+
</head>
|
7 |
+
<body>
|
8 |
+
<h1>Match-TTS Onnx En001-English(Faster GPU Version)</h1>
|
9 |
+
<div>this example using Quantized version(lowquality and slow) because of Github Page 100MB limitation</div>
|
10 |
+
<p><a href = "https://huggingface.co/Akjava/matcha_tts_common_voice_01_en_001">common_voice_01_en_001</a> - my trained model.you can create too!</p>
|
11 |
+
<br>
|
12 |
+
<script src="https://cdn.jsdelivr.net/npm/onnxruntime-web/dist/ort.webgpu.min.js" ></script>
|
13 |
+
|
14 |
+
|
15 |
+
<script type="module">
|
16 |
+
import { MatchaTTSRaw } from "./js-esm/matcha_tts_raw.js";
|
17 |
+
import { webWavPlay } from "./js-esm/web_wav_play.js";
|
18 |
+
import { arpa_to_ipa } from "./js-esm/arpa_to_ipa.js";
|
19 |
+
import { loadCmudict } from "./js-esm/cmudict_loader.js";
|
20 |
+
import { env,textToArpa} from "./js-esm/text_to_arpa.js";
|
21 |
+
|
22 |
+
env.allowLocalModels = true;
|
23 |
+
env.localModelPath = "./models/";
|
24 |
+
env.backends.onnx.logLevel = "fatal";
|
25 |
+
|
26 |
+
let matcha_tts_raw
|
27 |
+
let cmudict ={}
|
28 |
+
let speaking = false
|
29 |
+
async function main() {
|
30 |
+
if (speaking){
|
31 |
+
console.log("speaking return")
|
32 |
+
}
|
33 |
+
speaking = true
|
34 |
+
console.log("main called")
|
35 |
+
if(!matcha_tts_raw){
|
36 |
+
matcha_tts_raw = new MatchaTTSRaw()
|
37 |
+
console.time("load model");
|
38 |
+
await matcha_tts_raw.load_model('./models/matcha-tts/en001_ep6399_univ_simplify_q8.onnx',{ executionProviders: ['webgpu','wasm'] });
|
39 |
+
|
40 |
+
console.timeEnd("load model");
|
41 |
+
|
42 |
+
let cmudictReady = loadCmudict(cmudict,'./dictionaries/cmudict-0.7b')
|
43 |
+
await cmudictReady
|
44 |
+
|
45 |
+
}else{
|
46 |
+
console.log("session exist skip load model")
|
47 |
+
}
|
48 |
+
const text = document.getElementById('textInput').value
|
49 |
+
const arpa_text = await textToArpa(cmudict,text)
|
50 |
+
const ipa_text = arpa_to_ipa(arpa_text).replace(/\s/g, "");
|
51 |
+
console.log(ipa_text)
|
52 |
+
|
53 |
+
const spks = 0
|
54 |
+
const speed = document.getElementById('speed').value
|
55 |
+
const tempature = document.getElementById('temperature').value
|
56 |
+
|
57 |
+
console.time("infer");
|
58 |
+
const result = await matcha_tts_raw.infer(ipa_text, tempature, speed,spks);
|
59 |
+
console.timeEnd("infer");
|
60 |
+
if (result!=null){
|
61 |
+
webWavPlay(result)
|
62 |
+
|
63 |
+
}
|
64 |
+
|
65 |
+
speaking = false
|
66 |
+
}
|
67 |
+
function update_range(){
|
68 |
+
const value = document.getElementById('spks').value
|
69 |
+
let formattedNumber = value.toString().padStart(3, '0');
|
70 |
+
document.getElementById('spks_label').textContent = formattedNumber
|
71 |
+
}
|
72 |
+
function update_range2(){
|
73 |
+
const value = document.getElementById('temperature').value
|
74 |
+
//let formattedNumber = value.toString().padStart(3, '0');
|
75 |
+
document.getElementById('tempature_label').textContent = value//formattedNumber
|
76 |
+
}
|
77 |
+
function update_range3(){
|
78 |
+
const value = document.getElementById('speed').value
|
79 |
+
//let formattedNumber = value.toString().padStart(3, '0');
|
80 |
+
document.getElementById('speed_label').textContent = value//sformattedNumber
|
81 |
+
}
|
82 |
+
|
83 |
+
window.onload = async function(){
|
84 |
+
document.getElementById('textInput').onchange = main;
|
85 |
+
document.getElementById('myButton').onclick = main;
|
86 |
+
|
87 |
+
document.getElementById('temperature').onchange = update_range2
|
88 |
+
document.getElementById('speed').onchange = update_range3
|
89 |
+
}
|
90 |
+
|
91 |
+
|
92 |
+
</script>
|
93 |
+
|
94 |
+
<input type="text" id="textInput" value ="Hello." placeholder="Enter some text here...">
|
95 |
+
|
96 |
+
<button id="myButton">Text To Speak</button><br>
|
97 |
+
|
98 |
+
|
99 |
+
<label for ="temperature" style="width: 110px;display: inline-block;">Temperature</label>
|
100 |
+
<input type="range" id="temperature" min="0" max="1.0" value="0.5" step="0.1"/>
|
101 |
+
<label for ="temperature" id="tempature_label">0.5</label><br>
|
102 |
+
|
103 |
+
<label for ="speed" style="width: 110px;display: inline-block;">Speed</label>
|
104 |
+
<input type="range" id="speed" min="0.1" max="2.0" value="1.0" step="0.1"/>
|
105 |
+
<label for ="speed" id="speed_label">1.0</label>
|
106 |
+
<br>
|
107 |
+
<br>
|
108 |
+
<div id="footer">
|
109 |
+
<b>Credits</b><br>
|
110 |
+
<a href="https://github.com/akjava/Matcha-TTS-Japanese" style="font-size: 9px" target="link">Matcha-TTS-Japanese</a> |
|
111 |
+
<a href = "http://www.udialogue.org/download/cstr-vctk-corpus.html" style="font-size: 9px" target="link">CSTR VCTK Corpus</a> |
|
112 |
+
<a href = "https://github.com/cmusphinx/cmudict" style="font-size: 9px" target="link">CMUDict</a> |
|
113 |
+
<a href = "https://huggingface.co/docs/transformers.js/index" style="font-size: 9px" target="link">Transformer.js</a> |
|
114 |
+
<a href = "https://huggingface.co/cisco-ai/mini-bart-g2p" style="font-size: 9px" target="link">mini-bart-g2p</a> |
|
115 |
+
<a href = "https://onnxruntime.ai/docs/get-started/with-javascript/web.html" style="font-size: 9px" target="link">ONNXRuntime-Web</a> |
|
116 |
+
<a href = "https://github.com/akjava/English-To-IPA-Collections" style="font-size: 9px" target="link">English-To-IPA-Collections</a> |
|
117 |
+
<a href ="https://huggingface.co/papers/2309.03199" style="font-size: 9px" target="link">Matcha-TTS Paper</a>
|
118 |
+
</div>
|
119 |
+
|
120 |
+
|
121 |
+
|
122 |
+
</body>
|
123 |
+
</html>
|
models/matcha-tts/en001_ep6399_univ_simplify_q8.onnx
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:099b031fbd30e993268800f94996c3b6eca6b1bd99762dae65a9ab246178c505
|
3 |
+
size 40571491
|
models/matcha-tts/ljspeech_sim_q8.onnx
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:68a5a21d82e2a759bc9217e8ed989142943839feb1355c72b59e73b4b0f638e8
|
3 |
+
size 40571490
|
models/matcha-tts/vctk_t2_simplify.onnx
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:e246cf870d0d2b3eebda1679a6041a1cce6e18891675dd5d9db75675e344168c
|
3 |
+
size 129268532
|
models/matcha-tts/vctk_t2_simplify_q8.onnx
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:0c3a8587e792275725ad42f72992a16b89eeff6ad9b83b48368c2ca0f9cd7585
|
3 |
+
size 43168516
|
models/matcha-tts/vctk_univ_simplify.onnx
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:1a70a6eca480c62f851e5508947fdb3a61d98666a9ad98ca77f7193aca376fd2
|
3 |
+
size 129268532
|
models/matcha-tts/vctk_univ_simplify_q8.onnx
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:84753ce259d950725007de2a40af23d3fb52331b7167f7f816a2f2c0d202ea3a
|
3 |
+
size 43168515
|
models/mini-bart-g2p/LICENSE
ADDED
@@ -0,0 +1,201 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Apache License
|
2 |
+
Version 2.0, January 2004
|
3 |
+
http://www.apache.org/licenses/
|
4 |
+
|
5 |
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
6 |
+
|
7 |
+
1. Definitions.
|
8 |
+
|
9 |
+
"License" shall mean the terms and conditions for use, reproduction,
|
10 |
+
and distribution as defined by Sections 1 through 9 of this document.
|
11 |
+
|
12 |
+
"Licensor" shall mean the copyright owner or entity authorized by
|
13 |
+
the copyright owner that is granting the License.
|
14 |
+
|
15 |
+
"Legal Entity" shall mean the union of the acting entity and all
|
16 |
+
other entities that control, are controlled by, or are under common
|
17 |
+
control with that entity. For the purposes of this definition,
|
18 |
+
"control" means (i) the power, direct or indirect, to cause the
|
19 |
+
direction or management of such entity, whether by contract or
|
20 |
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
21 |
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
22 |
+
|
23 |
+
"You" (or "Your") shall mean an individual or Legal Entity
|
24 |
+
exercising permissions granted by this License.
|
25 |
+
|
26 |
+
"Source" form shall mean the preferred form for making modifications,
|
27 |
+
including but not limited to software source code, documentation
|
28 |
+
source, and configuration files.
|
29 |
+
|
30 |
+
"Object" form shall mean any form resulting from mechanical
|
31 |
+
transformation or translation of a Source form, including but
|
32 |
+
not limited to compiled object code, generated documentation,
|
33 |
+
and conversions to other media types.
|
34 |
+
|
35 |
+
"Work" shall mean the work of authorship, whether in Source or
|
36 |
+
Object form, made available under the License, as indicated by a
|
37 |
+
copyright notice that is included in or attached to the work
|
38 |
+
(an example is provided in the Appendix below).
|
39 |
+
|
40 |
+
"Derivative Works" shall mean any work, whether in Source or Object
|
41 |
+
form, that is based on (or derived from) the Work and for which the
|
42 |
+
editorial revisions, annotations, elaborations, or other modifications
|
43 |
+
represent, as a whole, an original work of authorship. For the purposes
|
44 |
+
of this License, Derivative Works shall not include works that remain
|
45 |
+
separable from, or merely link (or bind by name) to the interfaces of,
|
46 |
+
the Work and Derivative Works thereof.
|
47 |
+
|
48 |
+
"Contribution" shall mean any work of authorship, including
|
49 |
+
the original version of the Work and any modifications or additions
|
50 |
+
to that Work or Derivative Works thereof, that is intentionally
|
51 |
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
52 |
+
or by an individual or Legal Entity authorized to submit on behalf of
|
53 |
+
the copyright owner. For the purposes of this definition, "submitted"
|
54 |
+
means any form of electronic, verbal, or written communication sent
|
55 |
+
to the Licensor or its representatives, including but not limited to
|
56 |
+
communication on electronic mailing lists, source code control systems,
|
57 |
+
and issue tracking systems that are managed by, or on behalf of, the
|
58 |
+
Licensor for the purpose of discussing and improving the Work, but
|
59 |
+
excluding communication that is conspicuously marked or otherwise
|
60 |
+
designated in writing by the copyright owner as "Not a Contribution."
|
61 |
+
|
62 |
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
63 |
+
on behalf of whom a Contribution has been received by Licensor and
|
64 |
+
subsequently incorporated within the Work.
|
65 |
+
|
66 |
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
67 |
+
this License, each Contributor hereby grants to You a perpetual,
|
68 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
69 |
+
copyright license to reproduce, prepare Derivative Works of,
|
70 |
+
publicly display, publicly perform, sublicense, and distribute the
|
71 |
+
Work and such Derivative Works in Source or Object form.
|
72 |
+
|
73 |
+
3. Grant of Patent License. Subject to the terms and conditions of
|
74 |
+
this License, each Contributor hereby grants to You a perpetual,
|
75 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
76 |
+
(except as stated in this section) patent license to make, have made,
|
77 |
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
78 |
+
where such license applies only to those patent claims licensable
|
79 |
+
by such Contributor that are necessarily infringed by their
|
80 |
+
Contribution(s) alone or by combination of their Contribution(s)
|
81 |
+
with the Work to which such Contribution(s) was submitted. If You
|
82 |
+
institute patent litigation against any entity (including a
|
83 |
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
84 |
+
or a Contribution incorporated within the Work constitutes direct
|
85 |
+
or contributory patent infringement, then any patent licenses
|
86 |
+
granted to You under this License for that Work shall terminate
|
87 |
+
as of the date such litigation is filed.
|
88 |
+
|
89 |
+
4. Redistribution. You may reproduce and distribute copies of the
|
90 |
+
Work or Derivative Works thereof in any medium, with or without
|
91 |
+
modifications, and in Source or Object form, provided that You
|
92 |
+
meet the following conditions:
|
93 |
+
|
94 |
+
(a) You must give any other recipients of the Work or
|
95 |
+
Derivative Works a copy of this License; and
|
96 |
+
|
97 |
+
(b) You must cause any modified files to carry prominent notices
|
98 |
+
stating that You changed the files; and
|
99 |
+
|
100 |
+
(c) You must retain, in the Source form of any Derivative Works
|
101 |
+
that You distribute, all copyright, patent, trademark, and
|
102 |
+
attribution notices from the Source form of the Work,
|
103 |
+
excluding those notices that do not pertain to any part of
|
104 |
+
the Derivative Works; and
|
105 |
+
|
106 |
+
(d) If the Work includes a "NOTICE" text file as part of its
|
107 |
+
distribution, then any Derivative Works that You distribute must
|
108 |
+
include a readable copy of the attribution notices contained
|
109 |
+
within such NOTICE file, excluding those notices that do not
|
110 |
+
pertain to any part of the Derivative Works, in at least one
|
111 |
+
of the following places: within a NOTICE text file distributed
|
112 |
+
as part of the Derivative Works; within the Source form or
|
113 |
+
documentation, if provided along with the Derivative Works; or,
|
114 |
+
within a display generated by the Derivative Works, if and
|
115 |
+
wherever such third-party notices normally appear. The contents
|
116 |
+
of the NOTICE file are for informational purposes only and
|
117 |
+
do not modify the License. You may add Your own attribution
|
118 |
+
notices within Derivative Works that You distribute, alongside
|
119 |
+
or as an addendum to the NOTICE text from the Work, provided
|
120 |
+
that such additional attribution notices cannot be construed
|
121 |
+
as modifying the License.
|
122 |
+
|
123 |
+
You may add Your own copyright statement to Your modifications and
|
124 |
+
may provide additional or different license terms and conditions
|
125 |
+
for use, reproduction, or distribution of Your modifications, or
|
126 |
+
for any such Derivative Works as a whole, provided Your use,
|
127 |
+
reproduction, and distribution of the Work otherwise complies with
|
128 |
+
the conditions stated in this License.
|
129 |
+
|
130 |
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
131 |
+
any Contribution intentionally submitted for inclusion in the Work
|
132 |
+
by You to the Licensor shall be under the terms and conditions of
|
133 |
+
this License, without any additional terms or conditions.
|
134 |
+
Notwithstanding the above, nothing herein shall supersede or modify
|
135 |
+
the terms of any separate license agreement you may have executed
|
136 |
+
with Licensor regarding such Contributions.
|
137 |
+
|
138 |
+
6. Trademarks. This License does not grant permission to use the trade
|
139 |
+
names, trademarks, service marks, or product names of the Licensor,
|
140 |
+
except as required for reasonable and customary use in describing the
|
141 |
+
origin of the Work and reproducing the content of the NOTICE file.
|
142 |
+
|
143 |
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
144 |
+
agreed to in writing, Licensor provides the Work (and each
|
145 |
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
146 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
147 |
+
implied, including, without limitation, any warranties or conditions
|
148 |
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
149 |
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
150 |
+
appropriateness of using or redistributing the Work and assume any
|
151 |
+
risks associated with Your exercise of permissions under this License.
|
152 |
+
|
153 |
+
8. Limitation of Liability. In no event and under no legal theory,
|
154 |
+
whether in tort (including negligence), contract, or otherwise,
|
155 |
+
unless required by applicable law (such as deliberate and grossly
|
156 |
+
negligent acts) or agreed to in writing, shall any Contributor be
|
157 |
+
liable to You for damages, including any direct, indirect, special,
|
158 |
+
incidental, or consequential damages of any character arising as a
|
159 |
+
result of this License or out of the use or inability to use the
|
160 |
+
Work (including but not limited to damages for loss of goodwill,
|
161 |
+
work stoppage, computer failure or malfunction, or any and all
|
162 |
+
other commercial damages or losses), even if such Contributor
|
163 |
+
has been advised of the possibility of such damages.
|
164 |
+
|
165 |
+
9. Accepting Warranty or Additional Liability. While redistributing
|
166 |
+
the Work or Derivative Works thereof, You may choose to offer,
|
167 |
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
168 |
+
or other liability obligations and/or rights consistent with this
|
169 |
+
License. However, in accepting such obligations, You may act only
|
170 |
+
on Your own behalf and on Your sole responsibility, not on behalf
|
171 |
+
of any other Contributor, and only if You agree to indemnify,
|
172 |
+
defend, and hold each Contributor harmless for any liability
|
173 |
+
incurred by, or claims asserted against, such Contributor by reason
|
174 |
+
of your accepting any such warranty or additional liability.
|
175 |
+
|
176 |
+
END OF TERMS AND CONDITIONS
|
177 |
+
|
178 |
+
APPENDIX: How to apply the Apache License to your work.
|
179 |
+
|
180 |
+
To apply the Apache License to your work, attach the following
|
181 |
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
182 |
+
replaced with your own identifying information. (Don't include
|
183 |
+
the brackets!) The text should be enclosed in the appropriate
|
184 |
+
comment syntax for the file format. We also recommend that a
|
185 |
+
file or class name and description of purpose be included on the
|
186 |
+
same "printed page" as the copyright notice for easier
|
187 |
+
identification within third-party archives.
|
188 |
+
|
189 |
+
Copyright [yyyy] [name of copyright owner]
|
190 |
+
|
191 |
+
Licensed under the Apache License, Version 2.0 (the "License");
|
192 |
+
you may not use this file except in compliance with the License.
|
193 |
+
You may obtain a copy of the License at
|
194 |
+
|
195 |
+
http://www.apache.org/licenses/LICENSE-2.0
|
196 |
+
|
197 |
+
Unless required by applicable law or agreed to in writing, software
|
198 |
+
distributed under the License is distributed on an "AS IS" BASIS,
|
199 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
200 |
+
See the License for the specific language governing permissions and
|
201 |
+
limitations under the License.
|
models/mini-bart-g2p/config.json
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"_name_or_path": "outputs_config_10",
|
3 |
+
"activation_dropout": 0.1,
|
4 |
+
"activation_function": "gelu",
|
5 |
+
"add_cross_attention": true,
|
6 |
+
"architectures": [
|
7 |
+
"BartForConditionalGeneration"
|
8 |
+
],
|
9 |
+
"attention_dropout": 0.1,
|
10 |
+
"bos_token_id": 0,
|
11 |
+
"classifier_dropout": 0.0,
|
12 |
+
"cross_attention_hidden_size": 256,
|
13 |
+
"d_model": 256,
|
14 |
+
"decoder_attention_heads": 4,
|
15 |
+
"decoder_ffn_dim": 512,
|
16 |
+
"decoder_layerdrop": 0.1,
|
17 |
+
"decoder_layers": 3,
|
18 |
+
"decoder_start_token_id": 2,
|
19 |
+
"dropout": 0.3,
|
20 |
+
"encoder_attention_heads": 4,
|
21 |
+
"encoder_ffn_dim": 512,
|
22 |
+
"encoder_layerdrop": 0.1,
|
23 |
+
"encoder_layers": 3,
|
24 |
+
"eos_token_id": 2,
|
25 |
+
"forced_eos_token_id": 2,
|
26 |
+
"id2label": {
|
27 |
+
"0": "LABEL_0",
|
28 |
+
"1": "LABEL_1",
|
29 |
+
"2": "LABEL_2"
|
30 |
+
},
|
31 |
+
"init_std": 0.02,
|
32 |
+
"is_encoder_decoder": true,
|
33 |
+
"label2id": {
|
34 |
+
"LABEL_0": 0,
|
35 |
+
"LABEL_1": 1,
|
36 |
+
"LABEL_2": 2
|
37 |
+
},
|
38 |
+
"max_length": 128,
|
39 |
+
"max_position_embeddings": 128,
|
40 |
+
"model_type": "bart",
|
41 |
+
"num_hidden_layers": 3,
|
42 |
+
"pad_token_id": 1,
|
43 |
+
"scale_embedding": true,
|
44 |
+
"transformers_version": "4.28.0.dev0",
|
45 |
+
"use_cache": true,
|
46 |
+
"vocab_size": 103
|
47 |
+
}
|
models/mini-bart-g2p/decoder_model_merged.onnx
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:dfdbe66a7c5876074c6fe12d50fb5ddfd8134f7c424cc7bb544d0cb46a2e3c7b
|
3 |
+
size 10090299
|
models/mini-bart-g2p/encoder_model.onnx
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:8d9aae528c64a7d81d793a394b4b71ea22106cc01ff5efd13c3fd19bc6854927
|
3 |
+
size 6629277
|
models/mini-bart-g2p/generation_config.json
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"bos_token_id": 0,
|
3 |
+
"decoder_start_token_id": 2,
|
4 |
+
"eos_token_id": 2,
|
5 |
+
"forced_eos_token_id": 2,
|
6 |
+
"max_length": 128,
|
7 |
+
"pad_token_id": 1,
|
8 |
+
"transformers_version": "4.28.0.dev0"
|
9 |
+
}
|
models/mini-bart-g2p/onnx/decoder_model_merged.onnx
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:dfdbe66a7c5876074c6fe12d50fb5ddfd8134f7c424cc7bb544d0cb46a2e3c7b
|
3 |
+
size 10090299
|
models/mini-bart-g2p/onnx/encoder_model.onnx
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:8d9aae528c64a7d81d793a394b4b71ea22106cc01ff5efd13c3fd19bc6854927
|
3 |
+
size 6629277
|
models/mini-bart-g2p/tokenizer.json
ADDED
@@ -0,0 +1,191 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"version": "1.0",
|
3 |
+
"truncation": {
|
4 |
+
"direction": "Right",
|
5 |
+
"max_length": 128,
|
6 |
+
"strategy": "LongestFirst",
|
7 |
+
"stride": 0
|
8 |
+
},
|
9 |
+
"padding": null,
|
10 |
+
"added_tokens": [
|
11 |
+
{
|
12 |
+
"id": 0,
|
13 |
+
"content": "<s>",
|
14 |
+
"single_word": false,
|
15 |
+
"lstrip": false,
|
16 |
+
"rstrip": false,
|
17 |
+
"normalized": false,
|
18 |
+
"special": true
|
19 |
+
},
|
20 |
+
{
|
21 |
+
"id": 1,
|
22 |
+
"content": "<pad>",
|
23 |
+
"single_word": false,
|
24 |
+
"lstrip": false,
|
25 |
+
"rstrip": false,
|
26 |
+
"normalized": false,
|
27 |
+
"special": true
|
28 |
+
},
|
29 |
+
{
|
30 |
+
"id": 2,
|
31 |
+
"content": "</s>",
|
32 |
+
"single_word": false,
|
33 |
+
"lstrip": false,
|
34 |
+
"rstrip": false,
|
35 |
+
"normalized": false,
|
36 |
+
"special": true
|
37 |
+
},
|
38 |
+
{
|
39 |
+
"id": 3,
|
40 |
+
"content": "<unk>",
|
41 |
+
"single_word": false,
|
42 |
+
"lstrip": false,
|
43 |
+
"rstrip": false,
|
44 |
+
"normalized": false,
|
45 |
+
"special": true
|
46 |
+
},
|
47 |
+
{
|
48 |
+
"id": 4,
|
49 |
+
"content": "<mask>",
|
50 |
+
"single_word": false,
|
51 |
+
"lstrip": true,
|
52 |
+
"rstrip": false,
|
53 |
+
"normalized": false,
|
54 |
+
"special": true
|
55 |
+
}
|
56 |
+
],
|
57 |
+
"normalizer": {
|
58 |
+
"type": "Lowercase"
|
59 |
+
},
|
60 |
+
"pre_tokenizer": {
|
61 |
+
"type": "Split",
|
62 |
+
"pattern": {
|
63 |
+
"String": ""
|
64 |
+
},
|
65 |
+
"behavior": "Removed",
|
66 |
+
"invert": false
|
67 |
+
},
|
68 |
+
"post_processor": {
|
69 |
+
"type": "RobertaProcessing",
|
70 |
+
"sep": [
|
71 |
+
"</s>",
|
72 |
+
2
|
73 |
+
],
|
74 |
+
"cls": [
|
75 |
+
"<s>",
|
76 |
+
0
|
77 |
+
],
|
78 |
+
"trim_offsets": true,
|
79 |
+
"add_prefix_space": false
|
80 |
+
},
|
81 |
+
"decoder": null,
|
82 |
+
"model": {
|
83 |
+
"type": "WordLevel",
|
84 |
+
"vocab": {
|
85 |
+
"<s>": 0,
|
86 |
+
"<pad>": 1,
|
87 |
+
"</s>": 2,
|
88 |
+
"<unk>": 3,
|
89 |
+
"<mask>": 4,
|
90 |
+
"e": 5,
|
91 |
+
"a": 6,
|
92 |
+
"s": 7,
|
93 |
+
"i": 8,
|
94 |
+
"r": 9,
|
95 |
+
"n": 10,
|
96 |
+
"AH0": 11,
|
97 |
+
"o": 12,
|
98 |
+
"N": 13,
|
99 |
+
"t": 14,
|
100 |
+
"l": 15,
|
101 |
+
"S": 16,
|
102 |
+
"L": 17,
|
103 |
+
"T": 18,
|
104 |
+
"R": 19,
|
105 |
+
"K": 20,
|
106 |
+
"c": 21,
|
107 |
+
"d": 22,
|
108 |
+
"D": 23,
|
109 |
+
"u": 24,
|
110 |
+
"IH0": 25,
|
111 |
+
"m": 26,
|
112 |
+
"M": 27,
|
113 |
+
"Z": 28,
|
114 |
+
"h": 29,
|
115 |
+
"g": 30,
|
116 |
+
"p": 31,
|
117 |
+
"ER0": 32,
|
118 |
+
"IY0": 33,
|
119 |
+
"b": 34,
|
120 |
+
"B": 35,
|
121 |
+
"P": 36,
|
122 |
+
"EH1": 37,
|
123 |
+
"AE1": 38,
|
124 |
+
"AA1": 39,
|
125 |
+
"y": 40,
|
126 |
+
"k": 41,
|
127 |
+
"IH1": 42,
|
128 |
+
"F": 43,
|
129 |
+
"f": 44,
|
130 |
+
"G": 45,
|
131 |
+
"w": 46,
|
132 |
+
"V": 47,
|
133 |
+
"v": 48,
|
134 |
+
"NG": 49,
|
135 |
+
"'": 50,
|
136 |
+
"IY1": 51,
|
137 |
+
"EY1": 52,
|
138 |
+
"HH": 53,
|
139 |
+
"W": 54,
|
140 |
+
"SH": 55,
|
141 |
+
"OW1": 56,
|
142 |
+
"AO1": 57,
|
143 |
+
"OW0": 58,
|
144 |
+
"AH1": 59,
|
145 |
+
"UW1": 60,
|
146 |
+
"AY1": 61,
|
147 |
+
"JH": 62,
|
148 |
+
"z": 63,
|
149 |
+
"CH": 64,
|
150 |
+
"Y": 65,
|
151 |
+
"AA0": 66,
|
152 |
+
"ER1": 67,
|
153 |
+
"EH2": 68,
|
154 |
+
"IH2": 69,
|
155 |
+
"TH": 70,
|
156 |
+
"AY2": 71,
|
157 |
+
"AE2": 72,
|
158 |
+
"EY2": 73,
|
159 |
+
"AA2": 74,
|
160 |
+
"EH0": 75,
|
161 |
+
"j": 76,
|
162 |
+
"AW1": 77,
|
163 |
+
"OW2": 78,
|
164 |
+
"x": 79,
|
165 |
+
"IY2": 80,
|
166 |
+
"UW0": 81,
|
167 |
+
"AO2": 82,
|
168 |
+
"UH1": 83,
|
169 |
+
"AE0": 84,
|
170 |
+
"q": 85,
|
171 |
+
"AO0": 86,
|
172 |
+
"AH2": 87,
|
173 |
+
"UW2": 88,
|
174 |
+
"AY0": 89,
|
175 |
+
"OY1": 90,
|
176 |
+
"-": 91,
|
177 |
+
"EY0": 92,
|
178 |
+
"DH": 93,
|
179 |
+
"AW2": 94,
|
180 |
+
"ER2": 95,
|
181 |
+
"ZH": 96,
|
182 |
+
"UH2": 97,
|
183 |
+
"AW0": 98,
|
184 |
+
"UH0": 99,
|
185 |
+
"OY2": 100,
|
186 |
+
"OY0": 101,
|
187 |
+
".": 102
|
188 |
+
},
|
189 |
+
"unk_token": "<unk>"
|
190 |
+
}
|
191 |
+
}
|
models/mini-bart-g2p/tokenizer_config.json
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"add_prefix_space": false,
|
3 |
+
"bos_token": "<s>",
|
4 |
+
"clean_up_tokenization_spaces": true,
|
5 |
+
"cls_token": "<s>",
|
6 |
+
"eos_token": "</s>",
|
7 |
+
"errors": "replace",
|
8 |
+
"mask_token": "<mask>",
|
9 |
+
"model_max_length": 1000000000000000019884624838656,
|
10 |
+
"pad_token": "<pad>",
|
11 |
+
"sep_token": "</s>",
|
12 |
+
"special_tokens_map_file": null,
|
13 |
+
"tokenizer_class": "BartTokenizer",
|
14 |
+
"trim_offsets": true,
|
15 |
+
"unk_token": "<unk>"
|
16 |
+
}
|