Xamarin.Essentials: Text-zu-Sprache
Mit der Klasse TextToSpeech kann eine Anwendung die integrierten Text-to-Speech-Engines verwenden, um Text auf dem Gerät wiederzugeben und verfügbare Sprachen abzufragen, die die Engine unterstützt.
Erste Schritte
Lesen Sie zum Einstieg in die Verwendung dieser API den Leitfaden mit ersten Schritte für Xamarin.Essentials, um sicherzustellen, dass die Bibliothek ordnungsgemäß installiert und in Ihren Projekten eingerichtet ist.
Für den Zugriff auf die TextToSpeech-Funktionen ist die folgende plattformspezifische Einrichtung erforderlich.
Wenn die Android-Zielversion des Projekts auf Android 11 (R API 30) festgelegt ist, müssen Sie Ihr Android-Manifest mit Abfragen aktualisieren, die mit den neuen Paketsichtbarkeitsanforderungen verwendet werden.
Öffnen Sie die Datei AndroidManifest.xml im Ordner Eigenschaften, und fügen Sie Folgendes im Knoten Manifest hinzu:
<queries>
<intent>
<action android:name="android.intent.action.TTS_SERVICE" />
</intent>
</queries>
Verwenden von Text-to-Speech
Fügen Sie in Ihrer Klasse einen Verweis auf Xamarin.Essentials hinzu:
using Xamarin.Essentials;
Text-to-Speech ruft die SpeakAsync
-Methode mit Text und optionalen Parametern auf und wird nach dem Ende der Äußerung zurückgegeben.
public async Task SpeakNowDefaultSettings()
{
await TextToSpeech.SpeakAsync("Hello World");
// This method will block until utterance finishes.
}
public void SpeakNowDefaultSettings2()
{
TextToSpeech.SpeakAsync("Hello World").ContinueWith((t) =>
{
// Logic that will run after utterance finishes.
}, TaskScheduler.FromCurrentSynchronizationContext());
}
Diese Methode beinhaltet ein optionales CancellationToken
-Element, um die Äußerung zu beenden, sobald sie beginnt.
CancellationTokenSource cts;
public async Task SpeakNowDefaultSettings()
{
cts = new CancellationTokenSource();
await TextToSpeech.SpeakAsync("Hello World", cancelToken: cts.Token);
// This method will block until utterance finishes.
}
// Cancel speech if a cancellation token exists & hasn't been already requested.
public void CancelSpeech()
{
if (cts?.IsCancellationRequested ?? true)
return;
cts.Cancel();
}
Text-to-Speech fügt Sprachanforderungen vom gleichen Thread automatisch der Warteschlange hinzu.
bool isBusy = false;
public void SpeakMultiple()
{
isBusy = true;
Task.Run(async () =>
{
await TextToSpeech.SpeakAsync("Hello World 1");
await TextToSpeech.SpeakAsync("Hello World 2");
await TextToSpeech.SpeakAsync("Hello World 3");
isBusy = false;
});
// or you can query multiple without a Task:
Task.WhenAll(
TextToSpeech.SpeakAsync("Hello World 1"),
TextToSpeech.SpeakAsync("Hello World 2"),
TextToSpeech.SpeakAsync("Hello World 3"))
.ContinueWith((t) => { isBusy = false; }, TaskScheduler.FromCurrentSynchronizationContext());
}
Spracheinstellungen
Sie können gut steuern, wie Audio mit SpeechOptions
zurückgegeben wird, womit Lautstärke, Tonhöhe und Gebietsschema festgelegt werden können.
public async Task SpeakNow()
{
var settings = new SpeechOptions()
{
Volume = .75f,
Pitch = 1.0f
};
await TextToSpeech.SpeakAsync("Hello World", settings);
}
Die folgenden Werte werden für diese Parameter unterstützt:
Parameter | Minimum | Maximum |
---|---|---|
Tonhöhe | 0 | 2.0 |
Lautstärke | 0 | 1.0 |
Gebietsschema der Sprache
Jede Plattform unterstützt verschiedene Gebietsschemas, um Text in verschiedenen Sprachen und Akzenten wiederzugeben. Plattformen verfügen über unterschiedliche Codes und Möglichkeiten zur Angabe des Gebietsschemas. Deshalb werden in Xamarin.Essentials eine plattformübergreifende Locale
-Klasse und die Abfrageoption mit GetLocalesAsync
bereitgestellt.
public async Task SpeakNow()
{
var locales = await TextToSpeech.GetLocalesAsync();
// Grab the first locale
var locale = locales.FirstOrDefault();
var settings = new SpeechOptions()
{
Volume = .75f,
Pitch = 1.0f,
Locale = locale
};
await TextToSpeech.SpeakAsync("Hello World", settings);
}
Einschränkungen
- Die Warteschlange für Äußerungen ist nicht gewährleistet, wenn sie über mehrere Threads aufgerufen wird.
- Die Audiowiedergabe im Hintergrund wird offiziell nicht unterstützt.
API
Zugehörige Videos
Auf Channel 9 und auf YouTube finden Sie weitere Videos zu Xamarin.