From 78a3bbc69d881df6ace0284a9d6679aef1d4f4ca Mon Sep 17 00:00:00 2001 From: KingDCreations Date: Tue, 14 Mar 2023 13:34:46 +0100 Subject: [PATCH 1/2] Cleaning recognizer properly on android --- .../java/com/reactnativevosk/VoskModule.kt | 45 ++++++++++--------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/android/src/main/java/com/reactnativevosk/VoskModule.kt b/android/src/main/java/com/reactnativevosk/VoskModule.kt index 14a5612..b21e6a5 100644 --- a/android/src/main/java/com/reactnativevosk/VoskModule.kt +++ b/android/src/main/java/com/reactnativevosk/VoskModule.kt @@ -13,6 +13,7 @@ class VoskModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaMo private var model: Model? = null private var speechService: SpeechService? = null private var context: ReactApplicationContext? = reactContext + private var recognizer: Recognizer? = null override fun getName(): String { return "Vosk" @@ -23,10 +24,8 @@ class VoskModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaMo val text = getHypothesisText(hypothesis) // Stop recording if data found - if (text != null && text.isNotEmpty() && speechService != null) { - speechService!!.stop() - speechService = null - // Display data + if (text != null && text.isNotEmpty()) { + cleanRecognizer(); sendEvent("onResult", text) } } @@ -93,10 +92,6 @@ class VoskModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaMo @ReactMethod fun loadModel(path: String, promise: Promise) { - if (this.model != null) { - this.model!!.close(); // unload model - this.model = null; - } StorageService.unpack(context, path, "models", { model: Model? -> this.model = model @@ -118,13 +113,13 @@ class VoskModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaMo sendEvent("onError", "Recognizer is already in use") } else { try { - val rec = + recognizer = if (grammar != null) Recognizer(model, 16000.0f, makeGrammar(grammar)) else Recognizer(model, 16000.0f) - speechService = SpeechService(rec, 16000.0f) + speechService = SpeechService(recognizer, 16000.0f) speechService!!.startListening(this) sendEvent("onStart") @@ -133,27 +128,33 @@ class VoskModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaMo } } } - - @ReactMethod - fun stop() { - + private fun cleanRecognizer() { if (speechService != null) { speechService!!.stop() + speechService!!.shutdown(); speechService = null } + if (recognizer != null) { + recognizer!!.close(); + recognizer = null; + } } - @ReactMethod - fun unload() { - + private fun cleanModel() { if (this.model != null) { - this.model!!.close(); // unload model + this.model!!.close(); this.model = null; } + } - if (speechService != null) { - speechService!!.stop(); - speechService!!.shutdown(); - } + @ReactMethod + fun stop() { + cleanRecognizer(); + } + + @ReactMethod + fun unload() { + cleanRecognizer(); + cleanModel(); } } From 85bec26cf9aaac6a08494b4e57e93f05de95ce1c Mon Sep 17 00:00:00 2001 From: KingDCreations Date: Tue, 14 Mar 2023 14:23:32 +0100 Subject: [PATCH 2/2] cleaning model if not clean yet before load model --- android/src/main/java/com/reactnativevosk/VoskModule.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/android/src/main/java/com/reactnativevosk/VoskModule.kt b/android/src/main/java/com/reactnativevosk/VoskModule.kt index b21e6a5..0e2b659 100644 --- a/android/src/main/java/com/reactnativevosk/VoskModule.kt +++ b/android/src/main/java/com/reactnativevosk/VoskModule.kt @@ -92,6 +92,7 @@ class VoskModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaMo @ReactMethod fun loadModel(path: String, promise: Promise) { + cleanModel(); StorageService.unpack(context, path, "models", { model: Model? -> this.model = model