Attempt to fix MacOs #13
This commit is contained in:
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
BIN
Vosklet.wasm
BIN
Vosklet.wasm
Binary file not shown.
@@ -7,7 +7,7 @@ index bf7eda6..5fedaf6 100644
|
|||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
|
|
||||||
-CFLAGS = -DADD_ -O3
|
-CFLAGS = -DADD_ -O3
|
||||||
+CFLAGS = -DADD_ -O3 -flto -msimd128 -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals
|
+CFLAGS = -DADD_ -O3 -flto -msimd128 -matomics -mbulk-memory -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals
|
||||||
|
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
# Archive programs and flags
|
# Archive programs and flags
|
||||||
@@ -20,7 +20,7 @@ index 80037d0..a964b2d 100644
|
|||||||
# if no wrapping of the blas library is needed, uncomment next line
|
# if no wrapping of the blas library is needed, uncomment next line
|
||||||
CC = emcc # -DNO_BLAS_WRAP
|
CC = emcc # -DNO_BLAS_WRAP
|
||||||
-CFLAGS = -I$(TOPDIR)/INCLUDE -I$(TOPDIR)/../libf2c -O3
|
-CFLAGS = -I$(TOPDIR)/INCLUDE -I$(TOPDIR)/../libf2c -O3
|
||||||
+CFLAGS = -I$(TOPDIR)/INCLUDE -I$(TOPDIR)/../libf2c -O3 -fno-rtti -fno-exceptions -flto -msimd128 -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals
|
+CFLAGS = -I$(TOPDIR)/INCLUDE -I$(TOPDIR)/../libf2c -O3 -fno-rtti -fno-exceptions -flto -msimd128 -matomics -mbulk-memory -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals
|
||||||
LOADER = $(CC)
|
LOADER = $(CC)
|
||||||
LOADOPTS =
|
LOADOPTS =
|
||||||
NOOPT = -O0 -I$(TOPDIR)/INCLUDE -I$(TOPDIR)/../libf2c
|
NOOPT = -O0 -I$(TOPDIR)/INCLUDE -I$(TOPDIR)/../libf2c
|
||||||
@@ -33,7 +33,7 @@ index e071614..4647c2b 100644
|
|||||||
#
|
#
|
||||||
CC = emcc
|
CC = emcc
|
||||||
-CFLAGS = -I../libf2c -O3
|
-CFLAGS = -I../libf2c -O3
|
||||||
+CFLAGS = -I../libf2c -O3 -fno-rtti -fno-exceptions -flto -msimd128 -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals
|
+CFLAGS = -I../libf2c -O3 -fno-rtti -fno-exceptions -flto -msimd128 -matomics -mbulk-memory -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals
|
||||||
DRVOPTS = $(OPTS)
|
DRVOPTS = $(OPTS)
|
||||||
NOOPT =
|
NOOPT =
|
||||||
LOADER = emcc
|
LOADER = emcc
|
||||||
@@ -46,7 +46,7 @@ index 6221401..d93b87f 100644
|
|||||||
CC = emcc
|
CC = emcc
|
||||||
SHELL = /bin/sh
|
SHELL = /bin/sh
|
||||||
-CFLAGS = -DNON_UNIX_STDIO -O3
|
-CFLAGS = -DNON_UNIX_STDIO -O3
|
||||||
+CFLAGS = -DNON_UNIX_STDIO -O3 -fno-rtti -fno-exceptions -flto -msimd128 -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals
|
+CFLAGS = -DNON_UNIX_STDIO -O3 -fno-rtti -fno-exceptions -flto -msimd128 -matomics -mbulk-memory -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals
|
||||||
|
|
||||||
LD = wasm-ld
|
LD = wasm-ld
|
||||||
RANLIB = emranlib
|
RANLIB = emranlib
|
||||||
|
|||||||
219
src/Wrapper.js
219
src/Wrapper.js
@@ -1,166 +1,177 @@
|
|||||||
let objs = []
|
let objs = [];
|
||||||
let events = ["status", "partialResult", "result"]
|
let events = ["status", "partialResult", "result"];
|
||||||
|
let storageWorkerURL = URL.createObjectURL(new Blob(['(', (() => {
|
||||||
|
let txtDecoder = new TextDecoder();
|
||||||
|
let txtEncoder = new TextEncoder();
|
||||||
|
onmessage = async msg => {
|
||||||
|
msg = msg.data;
|
||||||
|
let components = msg.storepath.split("/");
|
||||||
|
let prevDir = await navigator.storage.getDirectory();
|
||||||
|
for(let component of components) prevDir = await prevDir.getDirectoryHandle(component, { create: true });
|
||||||
|
let idHandle = await prevDir.getFileHandle("id", { create: true });
|
||||||
|
let mdlHandle = await prevDir.getFileHandle("model.tgz", { create: true });
|
||||||
|
let idFile = await idHandle.createSyncAccessHandle();
|
||||||
|
let mdlFile = await mdlHandle.createSyncAccessHandle();
|
||||||
|
let oldIdBuf = new ArrayBuffer(idFile.getSize());
|
||||||
|
idFile.read(oldIdBuf);
|
||||||
|
let tar, tgz;
|
||||||
|
if(txtDecoder.decode(oldIdBuf) == msg.id) {
|
||||||
|
tgz = new ArrayBuffer(mdlFile.getSize());
|
||||||
|
mdlFile.read(tgz);
|
||||||
|
tar = await new Response(new Response(tgz).body.pipeThrough(new DecompressionStream("gzip"))).arrayBuffer();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
let res = await fetch(msg.url);
|
||||||
|
if(!res.ok) {
|
||||||
|
postMessage("Unable to download model");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let teed = res.body.tee();
|
||||||
|
tgz = await new Response(teed[0].pipeThrough(new CompressionStream("gzip"))).arrayBuffer();
|
||||||
|
mdlFile.write(tgz, { at: 0 });
|
||||||
|
mdlFile.truncate(tgz.byteLength);
|
||||||
|
let newId = txtEncoder.encode(msg.id);
|
||||||
|
idFile.write(newId, { at: 0 });
|
||||||
|
idFile.truncate(newId.length);
|
||||||
|
tar = await new Response(teed[1]).arrayBuffer();
|
||||||
|
}
|
||||||
|
idFile.close();
|
||||||
|
mdlFile.close();
|
||||||
|
self.postMessage(tar, [tar]);
|
||||||
|
}
|
||||||
|
}).toString(), ')()'], { type: "text/javascript" }))
|
||||||
|
let storageWorker = new Worker(storageWorkerURL);
|
||||||
let processorURL = URL.createObjectURL(new Blob(['(', (() => {
|
let processorURL = URL.createObjectURL(new Blob(['(', (() => {
|
||||||
registerProcessor("VoskletTransferer", class extends AudioWorkletProcessor {
|
registerProcessor("VoskletTransferer", class extends AudioWorkletProcessor {
|
||||||
constructor(opts) {
|
constructor(opts) {
|
||||||
super()
|
super();
|
||||||
this.count = 0
|
this.count = 0;
|
||||||
this.maxCount = opts.processorOptions.maxCount
|
this.maxCount = opts.processorOptions.maxCount;
|
||||||
this.buffer = new Float32Array(this.maxCount * 128)
|
this.buffer = new Float32Array(this.maxCount * 128);
|
||||||
}
|
}
|
||||||
process(inputs) {
|
process(inputs) {
|
||||||
if(!inputs[0][0]) return true
|
if(!inputs[0][0]) return true;
|
||||||
this.buffer.set(inputs[0][0], this.count * 128)
|
this.buffer.set(inputs[0][0], this.count++ * 128);
|
||||||
this.count++
|
|
||||||
if(this.count >= this.maxCount) {
|
if(this.count >= this.maxCount) {
|
||||||
this.count = 0
|
this.count = 0;
|
||||||
this.port.postMessage(this.buffer, [this.buffer.buffer])
|
this.port.postMessage(this.buffer, [this.buffer.buffer]);
|
||||||
this.buffer = new Float32Array(this.maxCount * 128)
|
this.buffer = new Float32Array(this.maxCount * 128);
|
||||||
}
|
}
|
||||||
return true
|
return true;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}).toString(), ')()'], { type : "text/javascript" }))
|
}).toString(), ')()'], { type: "text/javascript" }));
|
||||||
|
|
||||||
Module.cleanUp = async () => {
|
Module.cleanUp = async () => {
|
||||||
for(let obj of objs) await obj.delete()
|
for(let obj of objs) await obj.delete();
|
||||||
URL.revokeObjectURL(processorURL)
|
URL.revokeObjectURL(processorURL);
|
||||||
|
URL.revokeObjectURL(storageWorkerURL);
|
||||||
|
storageWorker.terminate();
|
||||||
}
|
}
|
||||||
|
|
||||||
Module.createTransferer = async (ctx, bufferSize) => {
|
Module.createTransferer = async (ctx, bufferSize) => {
|
||||||
await ctx.audioWorklet.addModule(processorURL)
|
await ctx.audioWorklet.addModule(processorURL);
|
||||||
return new AudioWorkletNode(ctx, "VoskletTransferer", {
|
return new AudioWorkletNode(ctx, "VoskletTransferer", {
|
||||||
channelCountMode: "explicit",
|
channelCountMode: "explicit",
|
||||||
numberOfInputs: 1,
|
numberOfInputs: 1,
|
||||||
numberOfOutputs: 0,
|
numberOfOutputs: 0,
|
||||||
channelCount: 1,
|
channelCount: 1,
|
||||||
processorOptions: { maxCount: bufferSize / 128 }
|
processorOptions: { maxCount: bufferSize / 128 }
|
||||||
})
|
});
|
||||||
}
|
|
||||||
|
|
||||||
getFileHandle = async (path, create = false) => {
|
|
||||||
let components = path.split("/")
|
|
||||||
let prevDir = await navigator.storage.getDirectory()
|
|
||||||
for(let component of components.slice(0, -1)) prevDir = await prevDir.getDirectoryHandle(component, { create : create })
|
|
||||||
return prevDir.getFileHandle(components[components.length - 1], { create : create })
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class CommonModel extends EventTarget {
|
class CommonModel extends EventTarget {
|
||||||
constructor() {
|
constructor() {
|
||||||
super()
|
super();
|
||||||
objs.push(this)
|
objs.push(this);
|
||||||
}
|
}
|
||||||
delete() {
|
delete() {
|
||||||
this.obj.delete()
|
this.obj.delete();
|
||||||
}
|
}
|
||||||
static async create(url, storepath, id, normalMdl) {
|
static async mk(url, storepath, id, normalMdl) {
|
||||||
let mdl = new CommonModel()
|
let mdl = new CommonModel();
|
||||||
let result = new Promise((resolve, reject) => {
|
let result = new Promise((resolve, reject) => {
|
||||||
mdl.addEventListener("status", ev => {
|
mdl.addEventListener("status", ev => {
|
||||||
if(!ev.detail) {
|
if(!ev.detail) {
|
||||||
if(normalMdl) mdl.findWord = (word) => mdl.obj.findWord(word)
|
if(normalMdl) mdl.findWord = word => mdl.obj.findWord(word)
|
||||||
resolve(mdl)
|
resolve(mdl)
|
||||||
}
|
}
|
||||||
else reject(ev.detail)
|
else reject(ev.detail)
|
||||||
}, { once : true })
|
}, { once : true })
|
||||||
})
|
});
|
||||||
let tar
|
storageWorker.addEventListener("message", tar => {
|
||||||
try {
|
tar = tar.data;
|
||||||
let dataFile = await (await getFileHandle(storepath + "/model.tgz")).getFile()
|
let tarStart = _malloc(tar.byteLength);
|
||||||
let idFile = await (await getFileHandle(storepath + "/id")).getFile()
|
HEAPU8.set(new Uint8Array(tar), tarStart);
|
||||||
if(await idFile.text() != id) throw ""
|
mdl.obj = new Module.CommonModel(objs.length - 1, normalMdl, "/" + storepath, id, tarStart, tar.byteLength);
|
||||||
tar = await new Response(dataFile.stream().pipeThrough(new DecompressionStream("gzip"))).arrayBuffer()
|
}, { once: true });
|
||||||
}
|
storageWorker.postMessage({
|
||||||
catch {
|
url: url,
|
||||||
try {
|
storepath: storepath,
|
||||||
let res = await fetch(url)
|
id: id
|
||||||
if (!res.ok) throw "Unable to download model"
|
});
|
||||||
let teedBody = res.body.tee()
|
return result;
|
||||||
let newDataFile = await (await getFileHandle(storepath + "/model.tgz", true)).createWritable()
|
|
||||||
await newDataFile.write(await new Response(teedBody[0].pipeThrough(new CompressionStream("gzip"))).arrayBuffer())
|
|
||||||
await newDataFile.close()
|
|
||||||
let newIDFile = await (await getFileHandle(storepath + "/id", true)).createWritable()
|
|
||||||
await newIDFile.write(id)
|
|
||||||
await newIDFile.close()
|
|
||||||
tar = await new Response(teedBody[1]).arrayBuffer()
|
|
||||||
}
|
|
||||||
catch(e) {
|
|
||||||
mdl.delete()
|
|
||||||
throw e
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let tarStart = _malloc(tar.byteLength)
|
|
||||||
HEAPU8.set(new Uint8Array(tar), tarStart)
|
|
||||||
mdl.obj = new Module.CommonModel(objs.length - 1, normalMdl, "/" + storepath, id, tarStart, tar.byteLength)
|
|
||||||
return result
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Module.createModel = async (url, storepath, id) => {
|
Module.createModel = async (url, storepath, id) =>
|
||||||
return CommonModel.create(url, storepath, id, true)
|
CommonModel.mk(url, storepath, id, true);
|
||||||
}
|
|
||||||
|
|
||||||
Module.createSpkModel = async (url, storepath, id) => {
|
Module.createSpkModel = async (url, storepath, id) =>
|
||||||
return CommonModel.create(url, storepath, id, false)
|
CommonModel.mk(url, storepath, id, false);
|
||||||
}
|
|
||||||
|
|
||||||
class Recognizer extends EventTarget {
|
class Recognizer extends EventTarget {
|
||||||
constructor() {
|
constructor() {
|
||||||
super()
|
super();
|
||||||
objs.push(this)
|
objs.push(this);
|
||||||
return new Proxy(this, {
|
return new Proxy(this, {
|
||||||
get(self, prop, _) {
|
get(self, prop, _) {
|
||||||
if(self[prop] == undefined && self.obj[prop] == undefined) return undefined
|
if(self[prop] == undefined && self.obj[prop] == undefined) return;
|
||||||
let p = self[prop]
|
let p = self[prop];
|
||||||
if(p) return p.bind ? p.bind(self) : p
|
if(p) return p.bind ? p.bind(self) : p;
|
||||||
p = self.obj[prop]
|
p = self.obj[prop];
|
||||||
return p.bind ? p.bind(self.obj) : p
|
return p.bind ? p.bind(self.obj) : p;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
acceptWaveform(audioData) {
|
acceptWaveform(audioData) {
|
||||||
let start = _malloc(audioData.length * 4)
|
let start = _malloc(audioData.length * 4);
|
||||||
HEAPF32.set(audioData, start / 4)
|
HEAPF32.set(audioData, start / 4);
|
||||||
this.obj.acceptWaveform(start, audioData.length)
|
this.obj.acceptWaveform(start, audioData.length);
|
||||||
}
|
}
|
||||||
async delete(processCurrent = false) {
|
async delete(processCurrent = false) {
|
||||||
let result = new Promise((resolve, _) => this.addEventListener("status", _ => {
|
let result = new Promise((resolve, _) => this.addEventListener("status", _ => {
|
||||||
this.obj.delete()
|
this.obj.delete();
|
||||||
resolve()
|
resolve();
|
||||||
}, { once : true }))
|
}, { once: true }));
|
||||||
this.obj.safeDelete(processCurrent)
|
this.obj.safeDelete(processCurrent);
|
||||||
return result
|
return result;
|
||||||
}
|
}
|
||||||
static async create(model, sampleRate, mode, grammar, spkModel) {
|
static async mk(model, sampleRate, mode, grammar, spkModel) {
|
||||||
let rec = new Recognizer()
|
let rec = new Recognizer();
|
||||||
let result = new Promise((resolve, reject) => {
|
let result = new Promise((resolve, reject) => {
|
||||||
rec.addEventListener("status", ev => {
|
rec.addEventListener("status", ev => {
|
||||||
if(!ev.detail) resolve(rec)
|
if(!ev.detail) resolve(rec);
|
||||||
else reject(ev.detail)
|
else reject(ev.detail);
|
||||||
}, { once : true })
|
}, { once: true });
|
||||||
})
|
})
|
||||||
switch(mode) {
|
switch(mode) {
|
||||||
case 1:
|
case 1:
|
||||||
rec.obj = new Module.Recognizer(objs.length - 1, sampleRate, model)
|
rec.obj = new Module.Recognizer(objs.length - 1, sampleRate, model);
|
||||||
break
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
rec.obj = new Module.Recognizer(objs.length -1, sampleRate, model, spkModel)
|
rec.obj = new Module.Recognizer(objs.length -1, sampleRate, model, spkModel);
|
||||||
break
|
break;
|
||||||
default:
|
default:
|
||||||
rec.obj = new Module.Recognizer(objs.length - 1, sampleRate, model, grammar, 0)
|
rec.obj = new Module.Recognizer(objs.length - 1, sampleRate, model, grammar, 0);
|
||||||
}
|
}
|
||||||
return result
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Module.createRecognizer = (model, sampleRate) =>
|
||||||
|
Recognizer.mk(model.obj, sampleRate, 1);
|
||||||
|
|
||||||
Module.createRecognizer = (model, sampleRate) => {
|
Module.createRecognizerWithSpkModel = (model, sampleRate, spkModel) =>
|
||||||
return Recognizer.create(model.obj, sampleRate, 1)
|
Recognizer.mk(model.obj, sampleRate, 2, null, spkModel.obj);
|
||||||
}
|
|
||||||
|
|
||||||
Module.createRecognizerWithSpkModel = (model, sampleRate, spkModel) => {
|
Module.createRecognizerWithGrm = (model, sampleRate, grammar) =>
|
||||||
return Recognizer.create(model.obj, sampleRate, 2, null, spkModel.obj)
|
Recognizer.mk(model.obj, sampleRate, 3, grammar, null);
|
||||||
}
|
|
||||||
|
|
||||||
Module.createRecognizerWithGrm = (model, sampleRate, grammar) => {
|
|
||||||
return Recognizer.create(model.obj, sampleRate, 3, grammar, null)
|
|
||||||
}
|
|
||||||
|
|||||||
10
src/make
10
src/make
@@ -42,7 +42,7 @@ if [ ! -d "$OPENFST" ]; then
|
|||||||
git clone --depth=1 https://github.com/alphacep/openfst /tmp/openfst &&
|
git clone --depth=1 https://github.com/alphacep/openfst /tmp/openfst &&
|
||||||
cd /tmp/openfst &&
|
cd /tmp/openfst &&
|
||||||
autoreconf -is &&
|
autoreconf -is &&
|
||||||
CXXFLAGS="-r -O3 -fno-rtti -flto -msimd128 -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals -flto" emconfigure ./configure --prefix="$OPENFST" --enable-static --disable-shared --enable-lookahead-fsts --enable-ngram-fsts --disable-bin &&
|
CXXFLAGS="-r -O3 -fno-rtti -flto -msimd128 -matomics -mbulk-memory -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals -flto" emconfigure ./configure --prefix="$OPENFST" --enable-static --disable-shared --enable-lookahead-fsts --enable-ngram-fsts --disable-bin &&
|
||||||
emmake make -j"$JOBS" install &&
|
emmake make -j"$JOBS" install &&
|
||||||
echo "PACKAGE_VERSION = 1.8.0" >> "$OPENFST"/Makefile
|
echo "PACKAGE_VERSION = 1.8.0" >> "$OPENFST"/Makefile
|
||||||
fi
|
fi
|
||||||
@@ -58,7 +58,7 @@ if [ ! -d "$KALDI" ]; then
|
|||||||
git clone -b vosk --depth=1 https://github.com/alphacep/kaldi "$KALDI" &&
|
git clone -b vosk --depth=1 https://github.com/alphacep/kaldi "$KALDI" &&
|
||||||
cd "$KALDI"/src &&
|
cd "$KALDI"/src &&
|
||||||
git apply "$SRC"/Kaldi.patch &&
|
git apply "$SRC"/Kaldi.patch &&
|
||||||
CXXFLAGS="-O3 -UHAVE_EXECINFO_H -DEMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0 -flto -msimd128 -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals -Wno-unused-variable -Wno-unused-but-set-variable -g0" LDFLAGS="-lembind" emconfigure ./configure --use-cuda=no --with-cudadecoder=no --static --static-math=yes --static-fst=yes --debug-level=0 --fst-root="$OPENFST" --clapack-root="$CLAPACK_WASM" --host=WASM &&
|
CXXFLAGS="-O3 -UHAVE_EXECINFO_H -DEMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0 -flto -msimd128 -matomics -mbulk-memory -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals -Wno-unused-variable -Wno-unused-but-set-variable -g0" LDFLAGS="-lembind" emconfigure ./configure --use-cuda=no --with-cudadecoder=no --static --static-math=yes --static-fst=yes --debug-level=0 --fst-root="$OPENFST" --clapack-root="$CLAPACK_WASM" --host=WASM &&
|
||||||
emmake make -j"$JOBS" online2 rnnlm
|
emmake make -j"$JOBS" online2 rnnlm
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -67,12 +67,12 @@ if [ ! -d "$VOSK" ]; then
|
|||||||
cd "$VOSK"/src &&
|
cd "$VOSK"/src &&
|
||||||
git apply "$SRC"/Vosk.patch &&
|
git apply "$SRC"/Vosk.patch &&
|
||||||
VOSK_FILES="recognizer.cc language_model.cc model.cc spk_model.cc vosk_api.cc" &&
|
VOSK_FILES="recognizer.cc language_model.cc model.cc spk_model.cc vosk_api.cc" &&
|
||||||
em++ -O3 -flto -msimd128 -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals -Wno-deprecated -I. -I"$KALDI"/src -I"$OPENFST"/include $VOSK_FILES -c &&
|
em++ -O3 -flto -msimd128 -matomics -mbulk-memory -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals -Wno-deprecated -I. -I"$KALDI"/src -I"$OPENFST"/include $VOSK_FILES -c &&
|
||||||
emar -rcs vosk.a ${VOSK_FILES//.cc/.o}
|
emar -rcs vosk.a ${VOSK_FILES//.cc/.o}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd "$SRC" &&
|
cd "$SRC" &&
|
||||||
em++ Util.cc CommonModel.cc Recognizer.cc Bindings.cc -O3 -DEMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0 -fno-rtti -DMAX_WORKERS="$MAX_THREADS" -sWASMFS -sWASM_BIGINT -sMODULARIZE -sWASM_EXNREF -sTEXTDECODER=2 -sWASM_WORKERS=2 -sEVAL_CTORS=2 -sINITIAL_MEMORY="$INITIAL_MEMORY" -sALLOW_MEMORY_GROWTH -sPOLYFILL=0 -sEXIT_RUNTIME=0 -sINVOKE_RUN=0 -sSUPPORT_LONGJMP=0 -sEXPORTED_FUNCTIONS=_malloc -sEXPORT_NAME=loadVosklet -sMALLOC=emmalloc -sEXPORTED_RUNTIME_METHODS=UTF8ToString -sENVIRONMENT=web,worker -I. -I"$VOSK"/src -L"$KALDI"/src -l:online2/kaldi-online2.a -l:decoder/kaldi-decoder.a -l:ivector/kaldi-ivector.a -l:gmm/kaldi-gmm.a -l:tree/kaldi-tree.a -l:feat/kaldi-feat.a -l:cudamatrix/kaldi-cudamatrix.a -l:lat/kaldi-lat.a -l:lm/kaldi-lm.a -l:rnnlm/kaldi-rnnlm.a -l:hmm/kaldi-hmm.a -l:nnet3/kaldi-nnet3.a -l:transform/kaldi-transform.a -l:matrix/kaldi-matrix.a -l:fstext/kaldi-fstext.a -l:util/kaldi-util.a -l:base/kaldi-base.a -L"$OPENFST"/lib -l:libfst.a -l:libfstngram.a -L"$CLAPACK_WASM" -l:CBLAS/lib/cblas.a -l:CLAPACK-3.2.1/lapack.a -l:CLAPACK-3.2.1/libcblaswr.a -l:f2c_BLAS-3.8.0/blas.a -l:libf2c/libf2c.a -L"$VOSK"/src -l:vosk.a -lembind -flto -msimd128 -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals --pre-js Wrapper.js -o ../Vosklet.js
|
em++ Util.cc CommonModel.cc Recognizer.cc Bindings.cc -O3 -DEMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0 -fno-rtti -DMAX_WORKERS="$MAX_THREADS" -sWASMFS -sWASM_BIGINT -sMODULARIZE -sWASM_EXNREF -sTEXTDECODER=2 -sWASM_WORKERS=2 -sEVAL_CTORS=2 -sINITIAL_MEMORY="$INITIAL_MEMORY" -sALLOW_MEMORY_GROWTH -sPOLYFILL=0 -sEXIT_RUNTIME=0 -sINVOKE_RUN=0 -sSUPPORT_LONGJMP=0 -sEXPORTED_FUNCTIONS=_malloc -sEXPORT_NAME=loadVosklet -sMALLOC=emmalloc -sEXPORTED_RUNTIME_METHODS=UTF8ToString -sENVIRONMENT=web,worker -I. -I"$VOSK"/src -L"$KALDI"/src -l:online2/kaldi-online2.a -l:decoder/kaldi-decoder.a -l:ivector/kaldi-ivector.a -l:gmm/kaldi-gmm.a -l:tree/kaldi-tree.a -l:feat/kaldi-feat.a -l:cudamatrix/kaldi-cudamatrix.a -l:lat/kaldi-lat.a -l:lm/kaldi-lm.a -l:rnnlm/kaldi-rnnlm.a -l:hmm/kaldi-hmm.a -l:nnet3/kaldi-nnet3.a -l:transform/kaldi-transform.a -l:matrix/kaldi-matrix.a -l:fstext/kaldi-fstext.a -l:util/kaldi-util.a -l:base/kaldi-base.a -L"$OPENFST"/lib -l:libfst.a -l:libfstngram.a -L"$CLAPACK_WASM" -l:CBLAS/lib/cblas.a -l:CLAPACK-3.2.1/lapack.a -l:CLAPACK-3.2.1/libcblaswr.a -l:f2c_BLAS-3.8.0/blas.a -l:libf2c/libf2c.a -L"$VOSK"/src -l:vosk.a -lembind -flto -msimd128 -matomics -mbulk-memory -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals --pre-js Wrapper.js -o ../Vosklet.js
|
||||||
cd .. &&
|
cd .. &&
|
||||||
rm -f Vosklet.worker.js
|
rm -f Vosklet.worker.js
|
||||||
|
|
||||||
@@ -80,6 +80,6 @@ cp Vosklet.js Examples/Vosklet.js &&
|
|||||||
cp Vosklet.wasm Examples/Vosklet.wasm &&
|
cp Vosklet.wasm Examples/Vosklet.wasm &&
|
||||||
|
|
||||||
# Can't serve files from raw.githubusercontent with Content-Encoding: gzip header so the browser won't decompress automatically. Manually decompressing instead.
|
# Can't serve files from raw.githubusercontent with Content-Encoding: gzip header so the browser won't decompress automatically. Manually decompressing instead.
|
||||||
sed -i 's/res.body/new Response(res.body.pipeThrough(new DecompressionStream("gzip"))).body/' Examples/Vosklet.js &&
|
sed -i 's/.pipeThrough(new CompressionStream("gzip"))//;s/teed\[1\]/teed[1].pipeThrough(new DecompressionStream("gzip"))/' Examples/Vosklet.js &&
|
||||||
|
|
||||||
rm -rf /tmp/openfst
|
rm -rf /tmp/openfst
|
||||||
8
test
8
test
@@ -36,13 +36,13 @@ OPENFST=$(realpath openfst)
|
|||||||
CLAPACK_WASM=$(realpath clapack-wasm)
|
CLAPACK_WASM=$(realpath clapack-wasm)
|
||||||
|
|
||||||
cd src &&
|
cd src &&
|
||||||
MODE=1 && # 0: Debug, 1: Optimized release, else custom
|
MODE=0 && # 0: Debug, 1: Optimized release, else custom
|
||||||
echo "Mode = $MODE" &&
|
echo "Mode = $MODE" &&
|
||||||
if [ "$MODE" = 0 ]; then
|
if [ "$MODE" = 0 ]; then
|
||||||
em++ Util.cc CommonModel.cc Recognizer.cc Bindings.cc -O0 -DEMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0 -fno-rtti -DMAX_WORKERS="$MAX_THREADS" -sWASMFS -sWASM_BIGINT -sMODULARIZE -sWASM_EXNREF -sTEXTDECODER=2 -sWASM_WORKERS=2 -sEVAL_CTORS=2 -sSTACK_OVERFLOW_CHECK=2 -sASSERTIONS=2 -sINITIAL_MEMORY="$INITIAL_MEMORY" -sALLOW_MEMORY_GROWTH -sRUNTIME_DEBUG -sPOLYFILL=0 -sEXIT_RUNTIME=0 -sINVOKE_RUN=0 -sDISABLE_EXCEPTION_CATCHING=0 -sEXPORTED_FUNCTIONS=_malloc -sEXPORT_NAME=loadVosklet -sMALLOC=emmalloc -sEXPORTED_RUNTIME_METHODS=UTF8ToString -sENVIRONMENT=web,worker -I. -I"$VOSK"/src -L"$KALDI"/src -l:online2/kaldi-online2.a -l:decoder/kaldi-decoder.a -l:ivector/kaldi-ivector.a -l:gmm/kaldi-gmm.a -l:tree/kaldi-tree.a -l:feat/kaldi-feat.a -l:cudamatrix/kaldi-cudamatrix.a -l:lat/kaldi-lat.a -l:lm/kaldi-lm.a -l:rnnlm/kaldi-rnnlm.a -l:hmm/kaldi-hmm.a -l:nnet3/kaldi-nnet3.a -l:transform/kaldi-transform.a -l:matrix/kaldi-matrix.a -l:fstext/kaldi-fstext.a -l:util/kaldi-util.a -l:base/kaldi-base.a -L"$OPENFST"/lib -l:libfst.a -l:libfstngram.a -L"$CLAPACK_WASM" -l:CBLAS/lib/cblas.a -l:CLAPACK-3.2.1/lapack.a -l:CLAPACK-3.2.1/libcblaswr.a -l:f2c_BLAS-3.8.0/blas.a -l:libf2c/libf2c.a -L"$VOSK"/src -l:vosk.a -lembind -msimd128 -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals --pre-js Wrapper.js -o ../test.js
|
em++ Util.cc CommonModel.cc Recognizer.cc Bindings.cc -O0 -g3 -Wall -Werror -DEMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0 -fno-rtti -DMAX_WORKERS="$MAX_THREADS" -sWASMFS -sWASM_BIGINT -sMODULARIZE -sWASM_EXNREF -sTEXTDECODER=2 -sWASM_WORKERS=2 -sEVAL_CTORS=2 -sSTACK_OVERFLOW_CHECK=2 -sASSERTIONS=2 -sINITIAL_MEMORY="$INITIAL_MEMORY" -sALLOW_MEMORY_GROWTH -sRUNTIME_DEBUG -sPOLYFILL=0 -sEXIT_RUNTIME=0 -sINVOKE_RUN=0 -sDISABLE_EXCEPTION_CATCHING=0 -sEXPORTED_FUNCTIONS=_malloc -sEXPORT_NAME=loadVosklet -sMALLOC=emmalloc -sEXPORTED_RUNTIME_METHODS=UTF8ToString -sENVIRONMENT=web,worker -I. -I"$VOSK"/src -L"$KALDI"/src -l:online2/kaldi-online2.a -l:decoder/kaldi-decoder.a -l:ivector/kaldi-ivector.a -l:gmm/kaldi-gmm.a -l:tree/kaldi-tree.a -l:feat/kaldi-feat.a -l:cudamatrix/kaldi-cudamatrix.a -l:lat/kaldi-lat.a -l:lm/kaldi-lm.a -l:rnnlm/kaldi-rnnlm.a -l:hmm/kaldi-hmm.a -l:nnet3/kaldi-nnet3.a -l:transform/kaldi-transform.a -l:matrix/kaldi-matrix.a -l:fstext/kaldi-fstext.a -l:util/kaldi-util.a -l:base/kaldi-base.a -L"$OPENFST"/lib -l:libfst.a -l:libfstngram.a -L"$CLAPACK_WASM" -l:CBLAS/lib/cblas.a -l:CLAPACK-3.2.1/lapack.a -l:CLAPACK-3.2.1/libcblaswr.a -l:f2c_BLAS-3.8.0/blas.a -l:libf2c/libf2c.a -L"$VOSK"/src -l:vosk.a -lembind -msimd128 -matomics -mbulk-memory -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals --pre-js Wrapper.js -o ../test.js
|
||||||
elif [ "$MODE" = 1 ]; then
|
elif [ "$MODE" = 1 ]; then
|
||||||
em++ Util.cc CommonModel.cc Recognizer.cc Bindings.cc -O3 -Wall -Werror -DEMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0 -fno-rtti -DMAX_WORKERS="$MAX_THREADS" -sWASMFS -sWASM_BIGINT -sMODULARIZE -sWASM_EXNREF -sTEXTDECODER=2 -sWASM_WORKERS=2 -sEVAL_CTORS=2 -sINITIAL_MEMORY="$INITIAL_MEMORY" -sALLOW_MEMORY_GROWTH -sPOLYFILL=0 -sEXIT_RUNTIME=0 -sINVOKE_RUN=0 -sSUPPORT_LONGJMP=0 -sEXPORTED_FUNCTIONS=_malloc -sEXPORT_NAME=loadVosklet -sMALLOC=emmalloc -sEXPORTED_RUNTIME_METHODS=UTF8ToString -sENVIRONMENT=web,worker -I. -I"$VOSK"/src -L"$KALDI"/src -l:online2/kaldi-online2.a -l:decoder/kaldi-decoder.a -l:ivector/kaldi-ivector.a -l:gmm/kaldi-gmm.a -l:tree/kaldi-tree.a -l:feat/kaldi-feat.a -l:cudamatrix/kaldi-cudamatrix.a -l:lat/kaldi-lat.a -l:lm/kaldi-lm.a -l:rnnlm/kaldi-rnnlm.a -l:hmm/kaldi-hmm.a -l:nnet3/kaldi-nnet3.a -l:transform/kaldi-transform.a -l:matrix/kaldi-matrix.a -l:fstext/kaldi-fstext.a -l:util/kaldi-util.a -l:base/kaldi-base.a -L"$OPENFST"/lib -l:libfst.a -l:libfstngram.a -L"$CLAPACK_WASM" -l:CBLAS/lib/cblas.a -l:CLAPACK-3.2.1/lapack.a -l:CLAPACK-3.2.1/libcblaswr.a -l:f2c_BLAS-3.8.0/blas.a -l:libf2c/libf2c.a -L"$VOSK"/src -l:vosk.a -lembind -flto -msimd128 -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals --pre-js Wrapper.js -o ../test.js
|
em++ Util.cc CommonModel.cc Recognizer.cc Bindings.cc -O3 -Wall -Werror -DEMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0 -fno-rtti -DMAX_WORKERS="$MAX_THREADS" -sWASMFS -sWASM_BIGINT -sMODULARIZE -sWASM_EXNREF -sTEXTDECODER=2 -sWASM_WORKERS=2 -sEVAL_CTORS=2 -sINITIAL_MEMORY="$INITIAL_MEMORY" -sALLOW_MEMORY_GROWTH -sPOLYFILL=0 -sEXIT_RUNTIME=0 -sINVOKE_RUN=0 -sSUPPORT_LONGJMP=0 -sEXPORTED_FUNCTIONS=_malloc -sEXPORT_NAME=loadVosklet -sMALLOC=emmalloc -sEXPORTED_RUNTIME_METHODS=UTF8ToString -sENVIRONMENT=web,worker -I. -I"$VOSK"/src -L"$KALDI"/src -l:online2/kaldi-online2.a -l:decoder/kaldi-decoder.a -l:ivector/kaldi-ivector.a -l:gmm/kaldi-gmm.a -l:tree/kaldi-tree.a -l:feat/kaldi-feat.a -l:cudamatrix/kaldi-cudamatrix.a -l:lat/kaldi-lat.a -l:lm/kaldi-lm.a -l:rnnlm/kaldi-rnnlm.a -l:hmm/kaldi-hmm.a -l:nnet3/kaldi-nnet3.a -l:transform/kaldi-transform.a -l:matrix/kaldi-matrix.a -l:fstext/kaldi-fstext.a -l:util/kaldi-util.a -l:base/kaldi-base.a -L"$OPENFST"/lib -l:libfst.a -l:libfstngram.a -L"$CLAPACK_WASM" -l:CBLAS/lib/cblas.a -l:CLAPACK-3.2.1/lapack.a -l:CLAPACK-3.2.1/libcblaswr.a -l:f2c_BLAS-3.8.0/blas.a -l:libf2c/libf2c.a -L"$VOSK"/src -l:vosk.a -lembind -flto -msimd128 -matomics -mbulk-memory -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals --pre-js Wrapper.js -o ../test.js
|
||||||
fi
|
fi
|
||||||
cd .. &&
|
cd .. &&
|
||||||
sed -i 's/res.body/new Response(res.body.pipeThrough(new DecompressionStream("gzip"))).body/' test.js &&
|
sed -i 's/.pipeThrough(new CompressionStream("gzip"))//;s/teed\[1\]/teed[1].pipeThrough(new DecompressionStream("gzip"))/' test.js &&
|
||||||
rm -f test.worker.js
|
rm -f test.worker.js
|
||||||
Reference in New Issue
Block a user