Android kann Text in Sprache synthetisieren und abspielen.
Mit der TTS Library können Sie sehr einfach diese Funktion in Ihre Anwendung einfügen.
Das Englische Originaltutorial.
Wir haben ein TTS Objekt mit dem Namen TTS1 als Prozess globale Variable deklariert.
In Sub Activity_Resume überprüfen wir ob das Objekt initialisiert ist und wenn nicht wird es initialisiert.
Das Ready-Event wird ausgelöst wenn das Text-to-Speech-Engine bereit ist.
Nun aktivieren wir alle Views, die zuvor im Designer deaktiviert wurden.
Die SpeechRate und Pitch Eigenschaften erwarten einen Float-Wert. Mit 1 als Standardwert.
Die SeekBar gibt nur ganzzahlige Werte zurück, deshalb dividieren wir ihn durch 10 (sein MaxValue Parameter wurde auf 20 gesetzt).
TTS1 wird in Sub Activity_Pause deaktiviert. Deshalb müssen wir es in Activity_Resume wieder neu initialisieren.
Edit: Der Language Parameter wird jetzt erst gesetzt wenn EngineReady = True ist.
Programme:
TTSExample.zip
TTS.apk
Mit der TTS Library können Sie sehr einfach diese Funktion in Ihre Anwendung einfügen.
Das Englische Originaltutorial.
B4X:
Sub Process_Globals
Dim TTS1 As TTS
End Sub
Sub Globals
Dim barPitch As SeekBar
Dim barSpeechRate As SeekBar
Dim btnSpeak As Button
Dim EditText1 As EditText
Dim spnrLanguages As Spinner
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("1")
spnrLanguages.AddAll(Array As String("en", "fr", "de"))
End Sub
Sub TTS1_Ready (Success As Boolean)
If Success Then
'enable all views
For i = 0 To Activity.NumberOfViews - 1
Activity.GetView(i).Enabled = True
Next
btnSpeak_Click 'play first sentence
Else
Msgbox("Error initializing TTS engine.", "")
End If
End Sub
Sub Activity_Resume
If TTS1.IsInitialized = False Then
TTS1.Initialize("TTS1")
End If
End Sub
Sub Activity_Pause (UserClosed As Boolean)
TTS1.Release
End Sub
Sub btnSpeak_Click
If EditText1.Text.Length > 0 Then
TTS1.Speak(EditText1.Text, True)
EditText1.SelectAll
End If
End Sub
Sub barSpeechRate_ValueChanged (Value As Int, UserChanged As Boolean)
If UserChanged Then
tts1.SpeechRate = Value / 10
End If
End Sub
Sub barPitch_ValueChanged (Value As Int, UserChanged As Boolean)
If UserChanged Then
tts1.Pitch = Value / 10
End If
End Sub
Sub spnrLanguages_ItemClick (Position As Int, Value As Object)
If tts1.SetLanguage(Value, "") = False Then
ToastMessageShow("Language data not found.", True)
Return
End If
End Sub
In Sub Activity_Resume überprüfen wir ob das Objekt initialisiert ist und wenn nicht wird es initialisiert.
Das Ready-Event wird ausgelöst wenn das Text-to-Speech-Engine bereit ist.
Nun aktivieren wir alle Views, die zuvor im Designer deaktiviert wurden.
Die SpeechRate und Pitch Eigenschaften erwarten einen Float-Wert. Mit 1 als Standardwert.
Die SeekBar gibt nur ganzzahlige Werte zurück, deshalb dividieren wir ihn durch 10 (sein MaxValue Parameter wurde auf 20 gesetzt).
TTS1 wird in Sub Activity_Pause deaktiviert. Deshalb müssen wir es in Activity_Resume wieder neu initialisieren.
Edit: Der Language Parameter wird jetzt erst gesetzt wenn EngineReady = True ist.
Programme:
TTS.apk