Abstraktes Header-Bild in den Farben von tsjdev apps

Blogbeitrag

Xamarin.Forms: TextToSpeech

Ich hatte es ja bereits in meinem Beitrag zur Vorstellung des Projekts XFWeather angekündigt und hier ist nun auch schon der erste Beitrag. Ich möchte nämlich gerne hilfreiche NuGet-Packages vorstellen, welche einem plattformspezifische Implementierungen abnehmen sollen. Dies hat dann den großen Vorteil, dass man noch mehr Code über die verschiedene Plattformen hinweg teilen kann und den größten Anteil im portablen Teil des Projekts abbilden kann. In diesem Beitrag ich mich gerne mit dem Thema TextToSpeech befassen.

Manchmal möchte man dem Nutzer etwas per Sprache ausgeben. Hierfür gibt es auf den verschiedenen mobilen Betriebssystemen auch jeweils eine Lösung. So gibt es unter iOS zum Beispiel die Klasse AVSpeechSynthesizer oder unter UWP die Klasse SpeechSynthesizer . Damit könnte ich jetzt natürlich ein Interface erstellen und dann entsprechend drei plattformspezifische Implementierungen vornehmen, aber glücklicherweise brauchen wir dies nicht machen. Wir benötigen nur das NuGet Package Xam.Plugins.TextToSpeech von James Montemagno. Dieses installieren wir in alle Projekte und können es anschließend direkt verwenden.

Uns werden durch die Installation zwei Methoden zur Verfügung gestellt, welche wir im portablen Teil unserer Xamarin.Forms App verwenden können. Zum einen gibt es eine Methode, welche alle verfügbaren Sprachen zurück liefert und so können wir auch die Ausgabe in unterschiedlichen Sprachen durchführen.

/// <summary>
/// Get all installed and valide lanaguages
/// </summary>
Task<IEnumerable<CrossLocale>> GetInstalledLanguages();

Zum anderen gibt es eine Speak-Methode, welche die eigentliche Sprachausgabe durchführt. Die Signatur der Methode lautet:

/// <summary>
/// Speack back text
/// </summary>
/// <param name="text">Text to speak</param>
/// <param name="crossLocale">Locale of voice</param>
/// <param name="pitch">Pitch of voice (All 0.0 - 2.0f)</param>
/// <param name="speakRate">Speak Rate of voice (All) (0.0 - 2.0f)</param>
/// <param name="volume">Volume of voice (0.0-1.0)</param>
/// <param name="cancelToken">Cancel the current speech</param>
Task Speak(
    string text, 
    CrossLocale crossLocale = null, 
    float? pitch = null, 
    float? speakRate = null, 
    float? volume = null, 
    CancellationToken cancelToken = default(CancellationToken))

Der einfachste Aufruf ist hierbei einfach die Übergabe des Textes als String und schon wird dieser mit der Standard-Stimme ausgegeben. Es gibt aber noch zahlreiche Anpassungen, wie zum Beispiel die Sprache, der Pitch oder auch die Lautstärke. Der einfachste Aufruf lautet nun wie folgt:

await CrossTextToSpeech.Current.Speak("This text will be spoken!");

Zur Verdeutlichung habe ich eine kleine Sample-App geschrieben, welche zum einen in einer Liste alle verfügbaren Sprachen anzeigt und bei der Auswahl einer Sprache wird ein frei definierbarer Text in der ausgewählten Sprache vorgelesen.

Zu finden ist das Projekt in meinem GitHub-Repository xf-playground . Hier habe ich einen Ordner TextToSpeech angelegt, da ich plane noch weitere Dinge in diesem Repository auszuprobieren.

Da es sich hier um ein reines Test-Projekt handelt, habe ich auf die Verwendung eines ViewModels verzichtet und bilde alles in der Code-Behind Datei der MainPage.xaml ab.

Dieses Beispiel soll verdeutlichen, wie einfach es ist sich ausgewählten Text auf verschiedenen Plattformen vorlesen zu lassen.

Weiterempfehlen

Diesen Beitrag teilen

Wenn dir der Beitrag gefallen hat: gern weiterreichen. Gute Links dürfen sich ruhig schnell verbreiten.

Vorheriger/Nächster Beitrag

Alexa-Skill über VSTS auf AWS veröffentlichen Vorheriger Beitrag Alexa-Skill über VSTS auf AWS veröffentlichen Tech Summit in Frankfurt Nächster Beitrag Tech Summit in Frankfurt
Meine .NET MAUI Controls Library – jetzt auf NuGet verfügbar! Meine .NET MAUI Controls Library – jetzt auf NuGet verfügbar! Azure.AI.OpenAI NuGet Package in Version 2.0.0 veröffentlicht Azure.AI.OpenAI NuGet Package in Version 2.0.0 veröffentlicht NuGet-Paket mit einem Icon versehen NuGet-Paket mit einem Icon versehen NuGet: tsjdevapps.MauiControlsLib NuGet: tsjdevapps.MauiControlsLib
Lust auf ein kurzes digitales Hallo? Wenn du eine Idee teilen, eine Frage loswerden oder ein Projekt anschieben willst: mein Posteingang ist deutlich zuverlässiger als Brieftauben. apps@tsjdev-apps.de Mail schicken