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 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() {
|
||||||
|
|||||||
Reference in New Issue
Block a user