Bump Emscripten to 3.1.58, bump Vosk to 0.3.50, small refactor and doc.

This commit is contained in:
msqr1
2024-04-23 20:59:04 -07:00
parent 5f5a7a7571
commit 64e4c4c117
10 changed files with 26 additions and 32 deletions

View File

@@ -4,12 +4,13 @@ genericModel::genericModel(int index, bool normalMdl, std::string storepath, std
void genericModel::extractAndLoad(int tarStart, int tarSize) {
static fs::path path{};
static int fd{};
func = [this, tarStart, tarSize](){
void* tar{reinterpret_cast<void*>(tarStart)};
func = [this, tar, tarSize](){
archive* src {archive_read_new()};
archive_read_support_format_tar(src);
archive_read_open_memory(src, reinterpret_cast<void*>(tarStart), tarSize);
archive_read_open_memory(src, tar, tarSize);
if(archive_errno(src) != 0) {
free(reinterpret_cast<void*>(tarStart));
free(tar);
fireEv(index, "Unable to open tar in WASM memory");
return;
}
@@ -38,12 +39,12 @@ void genericModel::extractAndLoad(int tarStart, int tarSize) {
return;
}
}
free(reinterpret_cast<void*>(tarStart));
free(tar);
archive_read_free(src);
if(normalMdl) mdl = vosk_model_new(storepath.c_str());
else vosk_spk_model_new(storepath.c_str());
if(normalMdl ? std::get<0>(mdl) == nullptr : std::get<1>(mdl) == nullptr) fireEv(index, "Unable to load model for recognition");
else fireEv(index, "0");
else mdl = vosk_spk_model_new(storepath.c_str());
if(normalMdl ? std::get<VoskModel*>(mdl) != nullptr : std::get<VoskSpkModel*>(mdl) != nullptr) fireEv(index, "0");
else fireEv(index, "Unable to load model for recognition");
fs::remove_all(storepath);
};
std::thread t{[this](){
@@ -55,6 +56,6 @@ void genericModel::extractAndLoad(int tarStart, int tarSize) {
}
genericModel::~genericModel() {
archive_entry_free(entry);
if(normalMdl) vosk_model_free(std::get<0>(mdl));
else vosk_spk_model_free(std::get<1>(mdl));
if(normalMdl) vosk_model_free(std::get<VoskModel*>(mdl));
else vosk_spk_model_free(std::get<VoskSpkModel*>(mdl));
}

View File

@@ -2,6 +2,7 @@
#include "link.h"
#include <filesystem>
#include <functional>
#include <variant>
#include <fcntl.h>

View File

@@ -1,13 +1,7 @@
#include "link.h"
auto dstThrd = pthread_self();
ProxyingQueue glbQ{};
void fireEv(int index, const char* content, const char* type) {
auto proxy{[index, content, type](){
EM_ASM({
objs[$0].dispatchEvent(new CustomEvent($2 === 0 ? "0" : UTF8ToString($2), { "detail" : UTF8ToString($1) }));
}, index, content, type);
}};
if(dstThrd == pthread_self()) proxy();
else glbQ.proxySync(dstThrd, proxy);
MAIN_THREAD_EM_ASM({
objs[$0].dispatchEvent(new CustomEvent($2 === 0 ? "0" : UTF8ToString($2), { "detail" : UTF8ToString($1) }));
}, index, content, type);
}

View File

@@ -2,7 +2,5 @@
#include <thread>
#include <emscripten/em_asm.h>
#include <emscripten/proxying.h>
using namespace emscripten;
void fireEv(int index, const char* content, const char* type = nullptr); // Normal
void fireEv(int index, const char* content, const char* type = nullptr);

View File

@@ -75,7 +75,7 @@ if [ ! -d $KALDI ]; then
fi
if [ ! -d $VOSK ]; then
git clone -b go/v0.3.46 --depth=1 https://github.com/alphacep/vosk-api $VOSK &&
git clone -b v0.3.50 --depth=1 https://github.com/alphacep/vosk-api $VOSK &&
cd $VOSK/src &&
git apply $SRC/vosk.patch &&
VOSK_FILES="recognizer.cc language_model.cc model.cc spk_model.cc vosk_api.cc" &&

View File

@@ -1,12 +1,12 @@
#include "recognizer.h"
recognizer::recognizer(int index, float sampleRate, genericModel* model) : index{index}, rec{vosk_recognizer_new(std::get<0>(model->mdl),sampleRate)} {
recognizer::recognizer(int index, float sampleRate, genericModel* model) : index{index}, rec{vosk_recognizer_new(std::get<VoskModel*>(model->mdl),sampleRate)} {
finishConstruction(model);
}
recognizer::recognizer(int index, float sampleRate, genericModel* model, genericModel* spkModel) : index{index}, rec{vosk_recognizer_new_spk(std::get<0>(model->mdl), sampleRate, std::get<1>(spkModel->mdl))} {
recognizer::recognizer(int index, float sampleRate, genericModel* model, genericModel* spkModel) : index{index}, rec{vosk_recognizer_new_spk(std::get<VoskModel*>(model->mdl), sampleRate, std::get<VoskSpkModel*>(spkModel->mdl))} {
finishConstruction(model, spkModel);
}
recognizer::recognizer(int index, float sampleRate, genericModel* model, const std::string& grm, int dummy) : index{index}, rec{vosk_recognizer_new_grm(std::get<0>(model->mdl), sampleRate, grm.c_str())} {
recognizer::recognizer(int index, float sampleRate, genericModel* model, const std::string& grm, int dummy) : index{index}, rec{vosk_recognizer_new_grm(std::get<VoskModel*>(model->mdl), sampleRate, grm.c_str())} {
finishConstruction(model);
}
recognizer::~recognizer() {
@@ -71,7 +71,7 @@ void recognizer::setGrm(const std::string& grm) {
vosk_recognizer_set_grm(rec, grm.c_str());
}
void recognizer::setSpkModel(genericModel* spkModel) {
vosk_recognizer_set_spk_model(rec, std::get<1>(spkModel->mdl));
vosk_recognizer_set_spk_model(rec, std::get<VoskSpkModel*>(spkModel->mdl));
}
void recognizer::setWords(bool words) {
vosk_recognizer_set_words(rec,words);