app/src/main/java/com/example/jarvis_stts/MainActivity.kt aktualisiert
This commit is contained in:
@@ -22,6 +22,7 @@ import org.vosk.android.SpeechService
|
||||
import org.vosk.android.StorageService
|
||||
import java.io.IOException
|
||||
import java.util.Locale
|
||||
import android.speech.tts.UtteranceProgressListener
|
||||
|
||||
class MainActivity : AppCompatActivity(), RecognitionListener, TextToSpeech.OnInitListener {
|
||||
|
||||
@@ -43,18 +44,21 @@ class MainActivity : AppCompatActivity(), RecognitionListener, TextToSpeech.OnIn
|
||||
private var voiceNames = mutableListOf<String>()
|
||||
|
||||
// Launcher für Google Spracherkennung
|
||||
private val speechRecognizerLauncher = registerForActivityResult(
|
||||
ActivityResultContracts.StartActivityForResult()
|
||||
) { result ->
|
||||
isInteracting = false // WICHTIG: Sperre wieder aufheben!
|
||||
|
||||
if (result.resultCode == RESULT_OK && result.data != null) {
|
||||
val spokenText = result.data!!.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS)?.get(0) ?: ""
|
||||
tvStatus.text = "Ich: $spokenText"
|
||||
webSocket?.send(spokenText)
|
||||
private val speechRecognizerLauncher = registerForActivityResult(
|
||||
ActivityResultContracts.StartActivityForResult()
|
||||
) { result ->
|
||||
isInteracting = false // WICHTIG: Sperre wieder aufheben!
|
||||
|
||||
if (result.resultCode == RESULT_OK && result.data != null) {
|
||||
val spokenText = result.data!!.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS)?.get(0) ?: ""
|
||||
tvStatus.text = "Ich: $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?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
@@ -203,6 +207,28 @@ class MainActivity : AppCompatActivity(), RecognitionListener, TextToSpeech.OnIn
|
||||
if (status == TextToSpeech.SUCCESS) {
|
||||
tts.language = Locale.GERMAN
|
||||
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) {
|
||||
// Wir können hier Vosk stoppen, damit Jarvis sich nicht selbst hört
|
||||
voskService?.stop()
|
||||
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null, "TTS_DONE")
|
||||
|
||||
// Nach dem Sprechen müssen wir Vosk wieder starten.
|
||||
// Das machen wir am besten über einen Listener (siehe unten).
|
||||
// Die ID "TTS_DONE" triggert unseren Listener, wenn der Text fertig gesprochen wurde
|
||||
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null, "TTS_DONE")
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
|
||||
Reference in New Issue
Block a user