Attempt to fix MacOs #13

This commit is contained in:
msqr1
2024-09-23 22:56:25 -07:00
parent c35cd06b14
commit 14c913d44c
10 changed files with 137 additions and 126 deletions

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@@ -7,7 +7,7 @@
// All data is collected and transfered to the main thread so the AudioContext won't output anything. Set sinkId type to none to save power // All data is collected and transfered to the main thread so the AudioContext won't output anything. Set sinkId type to none to save power
let ctx = new AudioContext({sinkId: {type: "none"}}) let ctx = new AudioContext({sinkId: {type: "none"}})
let module = await loadVosklet() let module = await loadVosklet()
let model = await module.createModel("https://ccoreilly.github.io/vosk-browser/models/vosk-model-small-en-us-0.15.tar.gz","English","vosk-model-small-en-us-0.15") let model = await module.createModel("https://ccoreilly.github.io/vosk-browser/models/vosk-model-small-en-us-0.15.tar.gz", "English", "vosk-model-small-en-us-0.15")
let recognizer = await module.createRecognizer(model, ctx.sampleRate) let recognizer = await module.createRecognizer(model, ctx.sampleRate)
// Listen for result and partial result // Listen for result and partial result

View File

@@ -19,7 +19,7 @@
// Load Vosklet module, model and recognizer // Load Vosklet module, model and recognizer
let module = await loadVosklet() let module = await loadVosklet()
let model = await module.createModel("https://ccoreilly.github.io/vosk-browser/models/vosk-model-small-en-us-0.15.tar.gz","English","vosk-model-small-en-us-0.15") let model = await module.createModel("https://ccoreilly.github.io/vosk-browser/models/vosk-model-small-en-us-0.15.tar.gz", "English", "vosk-model-small-en-us-0.15")
let recognizer = await module.createRecognizer(model, ctx.sampleRate) let recognizer = await module.createRecognizer(model, ctx.sampleRate)
// Listen for result and partial result // Listen for result and partial result

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@@ -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

View File

@@ -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)
}

View File

@@ -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
View File

@@ -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