app/src/main/java/com/example/jarvis_stts/MainActivity.kt aktualisiert

This commit is contained in:
2026-03-11 16:44:44 +00:00
parent 9bbd0e9f84
commit 4c1407a61c

View File

@@ -22,6 +22,7 @@ import org.vosk.android.SpeechService
import org.vosk.android.StorageService import org.vosk.android.StorageService
import java.io.IOException import java.io.IOException
import java.util.Locale import java.util.Locale
import android.speech.tts.UtteranceProgressListener
class MainActivity : AppCompatActivity(), RecognitionListener, TextToSpeech.OnInitListener { class MainActivity : AppCompatActivity(), RecognitionListener, TextToSpeech.OnInitListener {
@@ -52,9 +53,12 @@ class MainActivity : AppCompatActivity(), RecognitionListener, TextToSpeech.OnIn
val spokenText = result.data!!.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS)?.get(0) ?: "" val spokenText = result.data!!.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS)?.get(0) ?: ""
tvStatus.text = "Ich: $spokenText" tvStatus.text = "Ich: $spokenText"
webSocket?.send(spokenText) webSocket?.send(spokenText)
} // HIER STARTEN WIR VOSK NOCH NICHT! Wir warten auf die Antwort des Servers.
} else {
// Nur wenn wir nichts gesagt oder abgebrochen haben, geht Vosk direkt wieder an
startVosk() startVosk()
} }
}
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@@ -203,6 +207,28 @@ class MainActivity : AppCompatActivity(), RecognitionListener, TextToSpeech.OnIn
if (status == TextToSpeech.SUCCESS) { if (status == TextToSpeech.SUCCESS) {
tts.language = Locale.GERMAN tts.language = Locale.GERMAN
setupVoiceSpinner() setupVoiceSpinner()
// NEU: Wir horchen darauf, wann Jarvis aufhört zu sprechen
tts.setOnUtteranceProgressListener(object : UtteranceProgressListener() {
override fun onStart(utteranceId: String?) {
// Jarvis fängt an zu sprechen
}
override fun onDone(utteranceId: String?) {
// Jarvis ist fertig! Wake-Word wieder aktivieren.
if (utteranceId == "TTS_DONE") {
// onDone läuft im Hintergrund, UI/Vosk Updates müssen in den Main Thread
runOnUiThread {
startVosk()
}
}
}
@Deprecated("Deprecated in Java")
override fun onError(utteranceId: String?) {
runOnUiThread { startVosk() } // Bei einem Fehler auch wieder zuhören
}
})
} }
} }
@@ -229,10 +255,9 @@ class MainActivity : AppCompatActivity(), RecognitionListener, TextToSpeech.OnIn
private fun speakOut(text: String) { private fun speakOut(text: String) {
// Wir können hier Vosk stoppen, damit Jarvis sich nicht selbst hört // Wir können hier Vosk stoppen, damit Jarvis sich nicht selbst hört
voskService?.stop() voskService?.stop()
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null, "TTS_DONE")
// Nach dem Sprechen müssen wir Vosk wieder starten. // Die ID "TTS_DONE" triggert unseren Listener, wenn der Text fertig gesprochen wurde
// Das machen wir am besten über einen Listener (siehe unten). tts.speak(text, TextToSpeech.QUEUE_FLUSH, null, "TTS_DONE")
} }
override fun onDestroy() { override fun onDestroy() {