app/src/main/java/com/example/jarvis_stts/MainActivity.kt aktualisiert
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user