pre.js change test

This commit is contained in:
msqr1
2024-01-29 23:24:12 -08:00
parent c20efbeb29
commit 4fc670f2b8

View File

@@ -50,72 +50,77 @@ class Recognizer extends EventTarget {
} }
} }
class Model extends EventTarget { class Model extends EventTarget {
constructor() { constructor(url, storepath) {
super() super()
}
_init(url, storepath) {
this.obj = new Module.model(url, storepath, objs.length) this.obj = new Module.model(url, storepath, objs.length)
objs.push(this) }
delete() {
this.obj.delete()
}
}
class SpkModel extends EventTarget {
constructor(url, storepath) {
super()
this.obj = new Module.spkModel(url, storepath, objs.length)
}
delete() {
this.obj.delete()
} }
} }
Module.deleteAll = () => { Module.deleteAll = () => {
objs.forEach(obj => obj.delete()) objs.forEach(obj => obj.delete())
} }
Module.makeModel = async (url, storepath, id) => { Module.makeModel = async (url, storepath) => {
let mdl = new Model() let mdl = new Model(url, storepath)
mdl.obj(new Module.model(url, storepath, objs.length)) return new Promise((resolve, reject) => {
objs.push(mdl)
let retval = new Promise((resolve, reject) => {
rec.addEventListener("_continue", (ev) => {
if(mdl.checkModel()) { if(mdl.checkModel()) {
objs.push(mdl)
resolve(mdl)
} }
(async () => {
let res = await fetch(url)
if(!res.ok) {
reject("Unable to download model")
}
let arr = await res.arrayBuffer()
let mdlMem = Module._malloc(arr.byteLength) // Will free in C++
Module.HEAP8.set(new Int8Array(arr), mdlMem)
mdl.addEventListener("_continue", (ev) => {
if(ev.details === ".") { if(ev.details === ".") {
objs.push(mdl)
resolve(mdl) resolve(mdl)
} }
reject(ev.details) reject(ev.details)
}, {once : true}) }, {once : true})
})
let mdlMem
try {
let res = await fetch(url)
if(!res.ok) throw res.statusText
let arr = await res.arrayBuffer()
mdlMem = Module._malloc(arr.byteLength) // Will free in C++
Module.HEAP8.set(new Int8Array(arr), mdlMem)
mdl.afterFetch(mdlMem, arr.byteLength) mdl.afterFetch(mdlMem, arr.byteLength)
} })()
catch(e) { })
mdl.delete()
return Promise.reject(e.message || e)
}
objs.push(mdl)
return mdl
} }
Module.makeSpkModel = async (url, storepath, id) => { Module.makeSpkModel = async (url, storepath, id) => {
let mdl = new Module.SpkModel(storepath, id) let mdl = new Model(url, storepath)
let mdlMem return new Promise((resolve, reject) => {
try { if(mdl.checkModel()) {
if(mdl.checkModelFiles() && mdl.checkModelId()) {
objs.push(mdl) objs.push(mdl)
return mdl resolve(mdl)
} }
(async () => {
let res = await fetch(url) let res = await fetch(url)
if(!res.ok) throw res.statusText if(!res.ok) {
reject("Unable to download model")
}
let arr = await res.arrayBuffer() let arr = await res.arrayBuffer()
mdlMem = Module._malloc(arr.byteLength) let mdlMem = Module._malloc(arr.byteLength) // Will free in C++
Module.HEAP8.set(new Int8Array(arr), mdlMem) Module.HEAP8.set(new Int8Array(arr), mdlMem)
if(!mdl.afterFetch(mdlMem, arr.byteLength)) throw "Unable to extract model and write ID" mdl.addEventListener("_continue", (ev) => {
if(!mdl.checkModelFiles()) throw "Model contains invalid model files" if(ev.details === ".") {
}
catch(e) {
mdl.delete()
return Promise.reject(e.message || e)
}
objs.push(mdl) objs.push(mdl)
return mdl resolve(mdl)
}
reject(ev.details)
}, {once : true})
mdl.afterFetch(mdlMem, arr.byteLength)
})()
})
} }
Module.makeRecognizer = (model, sampleRate) => { Module.makeRecognizer = (model, sampleRate) => {
let rec = new Recognizer() let rec = new Recognizer()