diff --git a/app/src/main/java/com/example/jarvis_stts/MainActivity.kt b/app/src/main/java/com/example/jarvis_stts/MainActivity.kt index e63ded9..963b514 100644 --- a/app/src/main/java/com/example/jarvis_stts/MainActivity.kt +++ b/app/src/main/java/com/example/jarvis_stts/MainActivity.kt @@ -16,17 +16,24 @@ import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import okhttp3.* import java.util.Locale -import ai.picovoice.porcupine.PorcupineManager -import ai.picovoice.porcupine.PorcupineManagerCallback -import ai.picovoice.porcupine.Porcupine +//import ai.picovoice.porcupine.PorcupineManager +//import ai.picovoice.porcupine.PorcupineManagerCallback +//import ai.picovoice.porcupine.Porcupine +import org.vosk.Model +import org.vosk.Recognizer +import org.vosk.android.SpeechService +import org.vosk.android.StorageService +import org.vosk.android.RecognitionLi -class MainActivity : AppCompatActivity(), TextToSpeech.OnInitListener { +class MainActivity : AppCompatActivity(), RecognitionListener { - private lateinit var tts: TextToSpeech - private lateinit var tvStatus: TextView - private lateinit var etUrl: EditText - private lateinit var spinnerVoices: Spinner - private var porcupineManager: PorcupineManager? = null + private var voskService: SpeechService? = null + private var voskModel: Model? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + initVosk() + } private val client = OkHttpClient() private var webSocket: WebSocket? = null @@ -52,6 +59,46 @@ class MainActivity : AppCompatActivity(), TextToSpeech.OnInitListener { } } + private fun initVosk() { + StorageService.unpack(this, "model-de", "model", + { model: Model -> + voskModel = model + startVosk() + }, + { exception: IOException -> + Log.e("JARVIS", "Vosk Fehler: ${exception.message}") + } + ) + } + + private fun startVosk() { + try { + // "jarvis" als Hotword im Recognizer definieren + val rec = Recognizer(voskModel, 16000.0f, "[\"jarvis\", \"[unk]\"]") + voskService = SpeechService(rec, 16000.0f) + voskService?.startListening(this) + tvStatus.text = "Bereit (Vosk)" + } catch (e: Exception) { + Log.e("JARVIS", "Vosk Start Fehler: ${e.message}") + } + } + + // --- RecognitionListener Methoden --- + + override fun onPartialResult(hypothesis: String) { + // Hier prüfen wir, ob "jarvis" im Teil-Ergebnis steht + if (hypothesis.contains("jarvis")) { + voskService?.stop() // Kurz Pause machen + startSpeechRecognition() // Dein Google STT starten + } + } + + override fun onResult(hypothesis: String) { } + override fun onFinalResult(hypothesis: String) { } + override fun onError(exception: Exception) { } + override fun onTimeout() { } + + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main)