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

This commit is contained in:
2026-03-11 10:13:20 +00:00
parent 418d25a781
commit df86472703

View File

@@ -16,6 +16,9 @@ import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import okhttp3.* import okhttp3.*
import java.util.Locale import java.util.Locale
import ai.picovoice.porcupine.PorcupineManager
import ai.picovoice.porcupine.PorcupineManagerCallback
import ai.picovoice.porcupine.Porcupine
class MainActivity : AppCompatActivity(), TextToSpeech.OnInitListener { class MainActivity : AppCompatActivity(), TextToSpeech.OnInitListener {
@@ -23,6 +26,7 @@ class MainActivity : AppCompatActivity(), TextToSpeech.OnInitListener {
private lateinit var tvStatus: TextView private lateinit var tvStatus: TextView
private lateinit var etUrl: EditText private lateinit var etUrl: EditText
private lateinit var spinnerVoices: Spinner private lateinit var spinnerVoices: Spinner
private var porcupineManager: PorcupineManager? = null
private val client = OkHttpClient() private val client = OkHttpClient()
private var webSocket: WebSocket? = null private var webSocket: WebSocket? = null
@@ -82,6 +86,8 @@ class MainActivity : AppCompatActivity(), TextToSpeech.OnInitListener {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) { if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.RECORD_AUDIO), 1) ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.RECORD_AUDIO), 1)
} }
// Wake-Word Engine starten, sobald die App offen ist
initWakeWord()
} }
private fun connectToServer(url: String) { private fun connectToServer(url: String) {
@@ -152,7 +158,42 @@ class MainActivity : AppCompatActivity(), TextToSpeech.OnInitListener {
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null, "") tts.speak(text, TextToSpeech.QUEUE_FLUSH, null, "")
} }
private fun initWakeWord() {
try {
// HIER DEINEN PICOVOICE ACCESS KEY EINTRAGEN:
val accessKey = "DEIN_KOPIERTER_PICOVOICE_KEY"
porcupineManager = PorcupineManager.Builder()
.setAccessKey(accessKey)
// Du kannst hier auch .COMPUTER, .BUMBLEBEE oder .PORCUPINE wählen
.setKeyword(Porcupine.BuiltInKeyword.JARVIS)
.build(applicationContext, PorcupineManagerCallback { keywordIndex ->
if (keywordIndex == 0) {
// Wake-Word wurde erkannt!
runOnUiThread {
tvStatus.text = "Wake-Word erkannt! Höre zu..."
// Startet sofort die Google-Spracherkennung für deinen Befehl
startVoiceInput()
}
}
})
// Startet das Dauerlauschen im Hintergrund
porcupineManager?.start()
Log.d("WakeWord", "Porcupine lauscht auf 'Jarvis'...")
} catch (e: Exception) {
Log.e("WakeWord", "Fehler beim Starten von Porcupine: ${e.message}")
runOnUiThread {
Toast.makeText(this, "Wake-Word Fehler: ${e.message}", Toast.LENGTH_LONG).show()
}
}
}
override fun onDestroy() { override fun onDestroy() {
// Wichtig: Beim Schließen der App aufräumen!
porcupineManager?.stop()
porcupineManager?.delete()
webSocket?.close(1000, "App Ende") webSocket?.close(1000, "App Ende")
tts.stop() tts.stop()
tts.shutdown() tts.shutdown()