From 221e926ca2b857747d92fc0ceca178ddb55a6d5c Mon Sep 17 00:00:00 2001 From: "info@pi-farm.de" Date: Wed, 11 Mar 2026 14:54:16 +0000 Subject: [PATCH] app/src/main/java/com/example/jarvis_stts/MainActivity.kt aktualisiert --- .../com/example/jarvis_stts/MainActivity.kt | 36 ++++++++++++------- 1 file changed, 24 insertions(+), 12 deletions(-) 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 7851231..a3971be 100644 --- a/app/src/main/java/com/example/jarvis_stts/MainActivity.kt +++ b/app/src/main/java/com/example/jarvis_stts/MainActivity.kt @@ -45,7 +45,6 @@ class MainActivity : AppCompatActivity(), RecognitionListener, TextToSpeech.OnIn super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) - // 1. UI initialisieren tvStatus = findViewById(R.id.tvStatus) etUrl = findViewById(R.id.etUrl) spinnerVoices = findViewById(R.id.spinnerVoices) @@ -54,7 +53,6 @@ class MainActivity : AppCompatActivity(), RecognitionListener, TextToSpeech.OnIn tts = TextToSpeech(this, this) - // 2. SharedPreferences val prefs = getSharedPreferences("JarvisPrefs", MODE_PRIVATE) etUrl.setText(prefs.getString("server_url", "")) @@ -66,9 +64,11 @@ class MainActivity : AppCompatActivity(), RecognitionListener, TextToSpeech.OnIn } } - btnSpeak.setOnClickListener { startVoiceInput() } + btnSpeak.setOnClickListener { + voskService?.stop() // Vosk stoppen, wenn man manuell klickt + startVoiceInput() + } - // 3. Vosk Modell laden & Berechtigungen if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.RECORD_AUDIO), 1) } else { @@ -76,6 +76,14 @@ class MainActivity : AppCompatActivity(), RecognitionListener, TextToSpeech.OnIn } } + // KORREKTUR: Damit Jarvis sofort nach der Erlaubnis startet + override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + if (requestCode == 1 && grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + initVoskModel() + } + } + private fun initVoskModel() { StorageService.unpack(this, "model-de", "model", { model: Model -> @@ -91,12 +99,14 @@ class MainActivity : AppCompatActivity(), RecognitionListener, TextToSpeech.OnIn private fun startVosk() { try { if (voskModel == null) return - // Wir horchen auf "jarvis". [unk] lässt unbekannte Wörter zu. - val rec = Recognizer(voskModel, 16000.0f, "[\"computer\", \"[unk]\"]") - //val rec = Recognizer(voskModel, 16000.0f, "[\"jarvis\", \"[unk]\"]") + // Falls noch ein alter Service läuft, sicherheitshalber stoppen + voskService?.stop() + voskService?.shutdown() + + val rec = Recognizer(voskModel, 16000.0f, "[\"computer\", \"jarvis\", \"[unk]\"]") voskService = SpeechService(rec, 16000.0f) voskService?.startListening(this) - runOnUiThread { tvStatus.text = "Bereit (Warte auf 'Jarvis')" } + runOnUiThread { tvStatus.text = "Bereit (Warte auf 'Computer')" } } catch (e: Exception) { Log.e("JARVIS", "Vosk Start Fehler: ${e.message}") } @@ -111,8 +121,9 @@ class MainActivity : AppCompatActivity(), RecognitionListener, TextToSpeech.OnIn val recognizedText = extractText(hypothesis) Log.d("JARVIS", "Vosk hört: $recognizedText") - if (recognizedText.contains("computer") || recognizedText.contains("jarvis")) { - voskService?.stop() // Pause statt Stop ist oft schneller + // KORREKTUR: ignoreCase hinzugefügt für mehr Sicherheit + if (recognizedText.contains("computer", true) || recognizedText.contains("jarvis", true)) { + voskService?.stop() startVoiceInput() } } @@ -126,8 +137,9 @@ class MainActivity : AppCompatActivity(), RecognitionListener, TextToSpeech.OnIn tvStatus.text = "Ich: $spokenText" webSocket?.send(spokenText) } - // WICHTIG: Warte kurz oder prüfe, ob TTS spricht, bevor du das hier machst: - voskService?.startVosk() + + // KORREKTUR: Einfach die Funktion aufrufen, nicht über voskService + startVosk() } override fun onResult(hypothesis: String) {}