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 objs = [];
|
||||||
let events = ["status", "partialResult", "result"];
|
let events = ["status", "partialResult", "result"];
|
||||||
let storageWorkerURL = URL.createObjectURL(new Blob(['(', (() => {
|
let storageWorkerURL = URL.createObjectURL(new Blob(['(', (() => {
|
||||||
@@ -61,14 +66,15 @@ let processorURL = URL.createObjectURL(new Blob(['(', (() => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}).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);
|
URL.revokeObjectURL(storageWorkerURL);
|
||||||
storageWorker.terminate();
|
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",
|
||||||
@@ -92,7 +98,7 @@ class CommonModel extends EventTarget {
|
|||||||
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)
|
||||||
@@ -102,7 +108,7 @@ class CommonModel extends EventTarget {
|
|||||||
tar = tar.data;
|
tar = tar.data;
|
||||||
let tarStart = _malloc(tar.byteLength);
|
let tarStart = _malloc(tar.byteLength);
|
||||||
HEAPU8.set(new Uint8Array(tar), tarStart);
|
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 });
|
}, { once: true });
|
||||||
storageWorker.postMessage({
|
storageWorker.postMessage({
|
||||||
url: url,
|
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);
|
CommonModel.mk(url, storepath, id, true);
|
||||||
|
|
||||||
Module.createSpkModel = async (url, storepath, id) =>
|
Module['createSpkModel'] = async (url, storepath, id) =>
|
||||||
CommonModel.mk(url, storepath, id, false);
|
CommonModel.mk(url, storepath, id, false);
|
||||||
|
|
||||||
class Recognizer extends EventTarget {
|
class Recognizer extends EventTarget {
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
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);
|
objs.push(this);
|
||||||
return new Proxy(this, {
|
return new Proxy(this, {
|
||||||
get(self, prop, _) {
|
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) {
|
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();
|
||||||
@@ -156,22 +163,25 @@ class Recognizer extends EventTarget {
|
|||||||
})
|
})
|
||||||
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) =>
|
|
||||||
|
Module['createRecognizer'] = (model, sampleRate) =>
|
||||||
Recognizer.mk(model.obj, sampleRate, 1);
|
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);
|
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);
|
Recognizer.mk(model.obj, sampleRate, 3, grammar, null);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
4
src/make
4
src/make
@@ -72,7 +72,7 @@ if [ ! -d "$VOSK" ]; then
|
|||||||
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 -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 .. &&
|
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/.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
|
rm -rf /tmp/openfst
|
||||||
4
test
4
test
@@ -41,8 +41,8 @@ echo "Mode = $MODE" &&
|
|||||||
if [ "$MODE" = 0 ]; then
|
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
|
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 -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
|
fi
|
||||||
cd .. &&
|
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
|
rm -f test.worker.js
|
||||||
Reference in New Issue
Block a user