vosk-koffi
Version:
Vosk node API based on Koffi.
2 lines (1 loc) • 4.28 kB
JavaScript
var h=Object.defineProperty;var _=(s,e)=>{for(var n in e)h(s,n,{get:e[n],enumerable:!0})};import{fileURLToPath as z}from"url";import R from"path";var b=()=>z(import.meta.url),w=()=>R.dirname(b()),t=w();var m={};_(m,{Model:()=>k,SpeakerModel:()=>p,libvosk:()=>r});import l from"path";import c from"koffi";c.opaque("VoskModel");c.opaque("VoskSpkModel");c.opaque("VoskRecognizer");function x(){let s=l.resolve(t,"..",`bin-${process.platform}-${process.arch}`);return process.platform=="win32"?(process.env.Path=s+l.delimiter+process.env.Path,l.join(s,"libvosk.dll")):process.platform=="darwin"?l.join(s,"libvosk.dylib"):l.join(s,"libvosk.so")}var o=c.load(x()),r={vosk_set_log_level:o.func("void vosk_set_log_level(int log_level)"),vosk_model_new:o.func("VoskModel *vosk_model_new(const char *model_path)"),vosk_model_free:o.func("void vosk_model_free(VoskModel *model)"),vosk_spk_model_new:o.func("VoskSpkModel *vosk_spk_model_new(const char *model_path)"),vosk_spk_model_free:o.func("void vosk_spk_model_free(VoskSpkModel *model)"),vosk_recognizer_new_spk:o.func("VoskRecognizer *vosk_recognizer_new_spk(VoskModel *model, float sample_rate, VoskSpkModel *spk_model)"),vosk_recognizer_new:o.func("VoskRecognizer *vosk_recognizer_new(VoskModel *model, float sample_rate)"),vosk_recognizer_new_grm:o.func("VoskRecognizer *vosk_recognizer_new_grm(VoskModel *model, float sample_rate, const char *grammar)"),vosk_recognizer_free:o.func("void vosk_recognizer_free(VoskRecognizer *recognizer)"),vosk_recognizer_set_max_alternatives:o.func("void vosk_recognizer_set_max_alternatives(VoskRecognizer *recognizer, int max_alternatives)"),vosk_recognizer_set_words:o.func("void vosk_recognizer_set_words(VoskRecognizer *recognizer, int words)"),vosk_recognizer_set_partial_words:o.func("void vosk_recognizer_set_partial_words(VoskRecognizer *recognizer, int partial_words)"),vosk_recognizer_set_spk_model:o.func("void vosk_recognizer_set_spk_model(VoskRecognizer *recognizer, VoskSpkModel *spk_model)"),vosk_recognizer_accept_waveform:o.func("int vosk_recognizer_accept_waveform(VoskRecognizer *recognizer, const char *data, int length)"),vosk_recognizer_result:o.func("const char *vosk_recognizer_result(VoskRecognizer *recognizer)"),vosk_recognizer_final_result:o.func("const char *vosk_recognizer_final_result(VoskRecognizer *recognizer)"),vosk_recognizer_partial_result:o.func("const char *vosk_recognizer_partial_result(VoskRecognizer *recognizer)"),vosk_recognizer_reset:o.func("void vosk_recognizer_reset(VoskRecognizer *recognizer)")},k=class{constructor(e){this.handle=r.vosk_model_new(e)}free(){r.vosk_model_free(this.handle)}},p=class{constructor(e){this.handle=r.vosk_spk_model_new(e)}free(){r.vosk_spk_model_free(this.handle)}};var d={};_(d,{setLogLevel:()=>V});function V(s){r.vosk_set_log_level(s)}var g={};_(g,{Recognizer:()=>u});var u=class{constructor(e){let{model:n,sampleRate:i}=e;if(e.speakerModel&&e.grammar)throw new Error("grammar and speakerModel cannot be used together for now.");this.handle=e.speakerModel?r.vosk_recognizer_new_spk(n.handle,i,e.speakerModel.handle):e.grammar?r.vosk_recognizer_new_grm(n.handle,i,JSON.stringify(e.grammar)):r.vosk_recognizer_new(n.handle,i)}free(){r.vosk_recognizer_free(this.handle)}setMaxAlternatives(e){return r.vosk_recognizer_set_max_alternatives(this.handle,e),this}setWords(e){return r.vosk_recognizer_set_words(this.handle,Number(e)),this}setPartialWords(e){return r.vosk_recognizer_set_partial_words(this.handle,Number(e)),this}setSpkModel(e){return r.vosk_recognizer_set_spk_model(this.handle,e.handle),this}acceptWaveform(e){return!!r.vosk_recognizer_accept_waveform(this.handle,e,e.length)}acceptWaveformAsync(e){return new Promise((n,i)=>{r.vosk_recognizer_accept_waveform.async(this.handle,e,e.length,function(v,f){v?i(v):n(!!f)})})}resultString(){return r.vosk_recognizer_result(this.handle)}result(){return JSON.parse(r.vosk_recognizer_result(this.handle)||"null")}partialResult(){return JSON.parse(r.vosk_recognizer_partial_result(this.handle)||"null")}finalResult(){return JSON.parse(r.vosk_recognizer_final_result(this.handle)||"null")}reset(){return r.vosk_recognizer_reset(this.handle),this}};var B={...m,...d,...g};export{k as Model,u as Recognizer,p as SpeakerModel,B as default,r as libvosk,V as setLogLevel};