Use closure compiler in build for JS size reduction
This commit is contained in:
File diff suppressed because one or more lines are too long
70
Vosklet.js
70
Vosklet.js
File diff suppressed because one or more lines are too long
@@ -1,3 +1,8 @@
|
||||
/**
|
||||
* @fileoverview
|
||||
* @suppress {undefinedVars|checkTypes}
|
||||
*/
|
||||
|
||||
let objs = [];
|
||||
let events = ["status", "partialResult", "result"];
|
||||
let storageWorkerURL = URL.createObjectURL(new Blob(['(', (() => {
|
||||
@@ -61,14 +66,15 @@ let processorURL = URL.createObjectURL(new Blob(['(', (() => {
|
||||
}
|
||||
})
|
||||
}).toString(), ')()'], { type: "text/javascript" }));
|
||||
Module.cleanUp = async () => {
|
||||
|
||||
Module['cleanUp'] = async () => {
|
||||
for(let obj of objs) await obj.delete();
|
||||
URL.revokeObjectURL(processorURL);
|
||||
URL.revokeObjectURL(storageWorkerURL);
|
||||
storageWorker.terminate();
|
||||
}
|
||||
|
||||
Module.createTransferer = async (ctx, bufferSize) => {
|
||||
Module['createTransferer'] = async (ctx, bufferSize) => {
|
||||
await ctx.audioWorklet.addModule(processorURL);
|
||||
return new AudioWorkletNode(ctx, "VoskletTransferer", {
|
||||
channelCountMode: "explicit",
|
||||
@@ -92,7 +98,7 @@ class CommonModel extends EventTarget {
|
||||
let result = new Promise((resolve, reject) => {
|
||||
mdl.addEventListener("status", ev => {
|
||||
if(!ev.detail) {
|
||||
if(normalMdl) mdl.findWord = word => mdl.obj.findWord(word)
|
||||
if(normalMdl) mdl['findWord'] = word => mdl.obj['findWord'](word)
|
||||
resolve(mdl)
|
||||
}
|
||||
else reject(ev.detail)
|
||||
@@ -102,7 +108,7 @@ class CommonModel extends EventTarget {
|
||||
tar = tar.data;
|
||||
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);
|
||||
mdl.obj = new Module['CommonModel'](objs.length - 1, normalMdl, "/" + storepath, id, tarStart, tar.byteLength);
|
||||
}, { once: true });
|
||||
storageWorker.postMessage({
|
||||
url: url,
|
||||
@@ -113,15 +119,21 @@ class CommonModel extends EventTarget {
|
||||
}
|
||||
}
|
||||
|
||||
Module.createModel = async (url, storepath, id) =>
|
||||
Module['createModel'] = async (url, storepath, id) =>
|
||||
CommonModel.mk(url, storepath, id, true);
|
||||
|
||||
Module.createSpkModel = async (url, storepath, id) =>
|
||||
Module['createSpkModel'] = async (url, storepath, id) =>
|
||||
CommonModel.mk(url, storepath, id, false);
|
||||
|
||||
class Recognizer extends EventTarget {
|
||||
constructor() {
|
||||
constructor() {
|
||||
super();
|
||||
// Closure workaround, this is removed if I put it as a regular class function. For some reason delete() doesn't
|
||||
this['acceptWaveform'] = audioData => {
|
||||
let start = _malloc(audioData.length * 4);
|
||||
HEAPF32.set(audioData, start / 4);
|
||||
this.obj['acceptWaveform'](start, audioData.length);
|
||||
}
|
||||
objs.push(this);
|
||||
return new Proxy(this, {
|
||||
get(self, prop, _) {
|
||||
@@ -133,11 +145,6 @@ class Recognizer extends EventTarget {
|
||||
}
|
||||
})
|
||||
}
|
||||
acceptWaveform(audioData) {
|
||||
let start = _malloc(audioData.length * 4);
|
||||
HEAPF32.set(audioData, start / 4);
|
||||
this.obj.acceptWaveform(start, audioData.length);
|
||||
}
|
||||
async delete(processCurrent = false) {
|
||||
let result = new Promise((resolve, _) => this.addEventListener("status", _ => {
|
||||
this.obj.delete();
|
||||
@@ -156,22 +163,25 @@ class Recognizer extends EventTarget {
|
||||
})
|
||||
switch(mode) {
|
||||
case 1:
|
||||
rec.obj = new Module.Recognizer(objs.length - 1, sampleRate, model);
|
||||
rec.obj = new Module['Recognizer'](objs.length - 1, sampleRate, model);
|
||||
break;
|
||||
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;
|
||||
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;
|
||||
}
|
||||
}
|
||||
Module.createRecognizer = (model, sampleRate) =>
|
||||
|
||||
Module['createRecognizer'] = (model, sampleRate) =>
|
||||
Recognizer.mk(model.obj, sampleRate, 1);
|
||||
|
||||
Module.createRecognizerWithSpkModel = (model, sampleRate, spkModel) =>
|
||||
Module['createRecognizerWithSpkModel'] = (model, sampleRate, spkModel) =>
|
||||
Recognizer.mk(model.obj, sampleRate, 2, null, spkModel.obj);
|
||||
|
||||
Module.createRecognizerWithGrm = (model, sampleRate, grammar) =>
|
||||
Module['createRecognizerWithGrm'] = (model, sampleRate, grammar) =>
|
||||
Recognizer.mk(model.obj, sampleRate, 3, grammar, null);
|
||||
|
||||
|
||||
|
||||
4
src/make
4
src/make
@@ -72,7 +72,7 @@ if [ ! -d "$VOSK" ]; then
|
||||
fi
|
||||
|
||||
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 -matomics -mbulk-memory -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 --closure 1 -o ../Vosklet.js
|
||||
cd .. &&
|
||||
rm -f Vosklet.worker.js
|
||||
|
||||
@@ -80,6 +80,6 @@ cp Vosklet.js Examples/Vosklet.js &&
|
||||
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.
|
||||
sed -i 's/.pipeThrough(new CompressionStream("gzip"))//;s/teed\[1\]/teed[1].pipeThrough(new DecompressionStream("gzip"))/' Examples/Vosklet.js &&
|
||||
sed -i 's/.pipeThrough(new CompressionStream("gzip"))//;s/\[1\])/[1]).pipeThrough(new DecompressionStream("gzip"))/' Examples/Vosklet.js &&
|
||||
|
||||
rm -rf /tmp/openfst
|
||||
4
test
4
test
@@ -41,8 +41,8 @@ echo "Mode = $MODE" &&
|
||||
if [ "$MODE" = 0 ]; then
|
||||
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
|
||||
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
|
||||
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 --closure 1 -o ../test.js
|
||||
fi
|
||||
cd .. &&
|
||||
sed -i 's/.pipeThrough(new CompressionStream("gzip"))//;s/teed\[1\]/teed[1].pipeThrough(new DecompressionStream("gzip"))/' test.js &&
|
||||
sed -i 's/.pipeThrough(new CompressionStream("gzip"))//;s/\[1\])/[1]).pipeThrough(new DecompressionStream("gzip"))/' test.js &&
|
||||
rm -f test.worker.js
|
||||
Reference in New Issue
Block a user