Eine einfache und effiziente Bibliothek, die Text-zu-Sprache-Funktionen für Android-Anwendungen bietet.
Fügen Sie die Bibliothek mit Gradle zu Ihrem Projekt hinzu:
allprojects {
repositories {
maven { url ' https://jitpack.io ' }
}
}dependencies {
implementation ' com.github.aiyu-ayaan:tts-engine:Tag '
}Die Verwendung der Bibliothek ist einfach und einfach. Hier ist ein Beispiel dafür, wie Sie es in Ihrem Code verwenden:
TextToSpeechHelper
.getInstance(activity)
.registerLifecycle(owner)
.speak(message)
.highlight()
.onHighlight { pair ->
Log .d( TAG , " speak: ${pair.first} - ${pair.second} " )
}
.onDone {
Log .d( TAG , " speak: done " )
}
.onError {
Log .d( TAG , " speak: $it " )
} activity ist die Aktivität, mit der die TTS -Engine initialisiert wird.
owner ist der Lebenszyklusbesitzer, mit dem der TTS Engine Lifecycle Observer registriert wird und die Lebenszyklusereignisse verarbeiten kann.
message ist der Text, der gesprochen wird.
highlight() ist eine optionale Methode, die die gesprochenen Wörter im Text hervorhebt.
onHighlight() ist eine optionale Methode, die aufgerufen wird, wenn ein Wort gesprochen wird.
onDone() ist eine Methode, die aufgerufen wird, wenn der Text gesprochen wird.
onError() ist eine Methode, die aufgerufen wird, wenn ein Fehler auftritt.
MainActivity.kt
class MainActivity : ComponentActivity () {
override fun onCreate ( savedInstanceState : Bundle ? ) {
super .onCreate(savedInstanceState)
setContent {
TTSLibraryTheme {
val viewModel = MainViewModel ()
val resource = stringResource(id = R .string.des)
val text = remember { resource }
// screen
Surface (
modifier = Modifier .fillMaxSize(),
color = MaterialTheme .colorScheme.background
) {
Screen (
state = text,
viewModel = viewModel,
) {
speak(
this ,
this as LifecycleOwner ,
text,
viewModel
)
}
}
}
}
}
}
@Composable
fun Screen (
modifier : Modifier = Modifier ,
viewModel : MainViewModel ,
state : String ,
onButtonClick : () -> Unit = {},
) {
Column (
modifier = modifier
.fillMaxSize()
.padding( 16 .dp),
verticalArrangement = Arrangement . Center ,
horizontalAlignment = Alignment . CenterHorizontally
) {
val s = viewModel.getState().value
TTSText (
textAlign = TextAlign . Center ,
textHighlightBuilder = TextHighlightBuilder (
text = state,
s
),
)
Spacer (modifier = Modifier .padding( 16 .dp))
Button (onClick = onButtonClick) {
Text (text = stringResource(id = R .string.speak))
}
}
}
private fun speak (
activity : Activity ,
owner : LifecycleOwner ,
message : String ,
viewModel : MainViewModel
) {
TextToSpeechHelper
.getInstance(activity)
.registerLifecycle(owner)
.speak(message)
.highlight()
.onHighlight { pair ->
viewModel.updateState(pair)
}
.onDone {
Log .d( TAG , " speak: done " )
}
.onError {
Log .d( TAG , " speak: $it " )
}
}
MainViewModel.kt
class MainViewModel : ViewModel () {
private val state = mutableStateOf( Pair ( 0 , 0 ))
fun updateState ( pair : Pair < Int , Int >) {
state.value = pair
}
fun getState (): State < Pair < Int , Int >> = state
} class MainActivity : AppCompatActivity () {
override fun onCreate ( savedInstanceState : Bundle ? ) {
super .onCreate(savedInstanceState)
setContentView( R .layout.activity_main)
val textView = findViewById< TextView >( R .id.text_view)
val button = findViewById< Button >( R .id.button)
val message = getString( R .string.des)
button.setOnClickListener {
speak(
this ,
this as LifecycleOwner ,
message,
textView
)
}
}
private fun speak (
activity : Activity ,
owner : LifecycleOwner ,
message : String ,
textView : TextView
) {
TextToSpeechHelper
.getInstance(activity)
.registerLifecycle(owner)
.speak(message)
.highlight()
.onHighlight { pair ->
textView.highlightText(pair.first, pair.second)
}
.onDone {
Log .d( TAG , " speak: done " )
}
.onError {
Log .d( TAG , " speak: $it " )
}
}
}TextView.highlightText() ist eine Erweiterungsmethode, die die gesprochenen Wörter im Text hervorhebt. Method 1: registerLifecycle(owner: LifecycleOwner) registriert den Lebenszyklus des gegebenen Eigentümers.
Method 2: initTTS() initialisiert die Text-zu-Sprach-Engine.
Method 3: speak(message: String) generiert Sprache aus der angegebenen Nachricht.
Method 4: highlight() zeigt den Text in der Textansicht hervor.
Method 5: removeHighlight() entfernt das Highlight aus dem Text im Textview.
Method 6: destroy(action: (() -> Unit)) zerstört die Text-zu-Sprache-Engine und entfernt alle Hörer.
Method 7: onStart(onStartListener: () -> Unit) legt den OnStart -Listener fest.
Method 8: onDone(onCompleteListener: () -> Unit) legt den Ondone -Hörer fest.
Method 9: onError(onErrorListener: (String) -> Unit) Legt den OnError -Listener fest.
Method 10: onHighlight(onHighlightListener: (Pair<Int, Int>) -> Unit) Legt den OnHighlight -Hörer fest.
Method 11: setCustomActionForDestroy(action: () -> Unit) Legt die benutzerdefinierte Aktion fest, die ausgeführt wird, wenn die Text-zu-Sprache-Engine zerstört wird.
Method 12: setLanguage(locale: Locale) Legt die Sprache für die Text-zu-Sprache-Engine fest.
Method 13: setPitchAndSpeed(pitch: Float, speed: Float) Legt die Tonhöhe und die Geschwindigkeit der von der Text-zu-Sprach-Engine erzeugten Sprache fest.
Method 14: resetPitchAndSpeed() setzt die Tonhöhe und Geschwindigkeit der von der Text-zu-Sprache-Engine erzeugten Sprache auf die Standardwerte zurück.
Wenn Sie zur Bibliothek beitragen möchten, geben Sie bitte das Repository aus und erstellen Sie eine Pull -Anfrage.
MIT License
Copyright (c) 2023 Ayaan
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
`