Text-zu-Sprache
In diesem Artikel wird beschrieben, wie Sie die .NET Multi-Platform App UI (.NET MAUI) ITextToSpeech-Schnittstelle verwenden können. Diese Schnittstelle ermöglicht es einer Anwendung, integrierte Text-Sprach-Module zu nutzen, um Text auf dem Gerät wiederzugeben. Sie können es auch verwenden, um die verfügbaren Sprachen abzufragen.
Die Standardimplementierung der ITextToSpeech
-Schnittstelle ist über die Eigenschaft TextToSpeech.Default verfügbar. Sowohl die ITextToSpeech
-Schnittstelle als auch die TextToSpeech
-Klasse sind im Microsoft.Maui.Media
-Namespace enthalten.
Erste Schritte
Für den Zugriff auf die Text-Sprach-Funktionen ist die folgende plattformspezifische Einrichtung erforderlich.
Wenn die Android-Zielversion Ihres Projekts auf Android 11 (R API 30) oder höher eingestellt ist, müssen Sie Ihr Android-Manifest mit einem Absichtsfilter für das Text-Sprach-Modul (TTS) aktualisieren. Weitere Informationen über Absichten finden Sie in der Android-Dokumentation zu Absichten und Absichtsfiltern.
Fügen Sie in der Datei Platforms/Android/AndroidManifest.xml die folgenden queries/intent
-Knoten zum Knoten manifest
hinzu:
<queries>
<intent>
<action android:name="android.intent.action.TTS_SERVICE" />
</intent>
</queries>
Verwenden von Text-zu-Sprache
Text-zu-Sprache funktioniert, indem die Methode SpeakAsync mit dem zu sprechenden Text aufgerufen wird, wie das folgende Codebeispiel zeigt:
public async void Speak() =>
await TextToSpeech.Default.SpeakAsync("Hello World");
Diese Methode beinhaltet ein optionales CancellationToken
-Element, um die Äußerung zu beenden, sobald sie beginnt.
CancellationTokenSource cts;
public async Task SpeakNowDefaultSettingsAsync()
{
cts = new CancellationTokenSource();
await TextToSpeech.Default.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-zu-Sprache fügt Sprachanforderungen vom gleichen Thread automatisch der Warteschlange hinzu.
bool isBusy = false;
public void SpeakMultiple()
{
isBusy = true;
Task.WhenAll(
TextToSpeech.Default.SpeakAsync("Hello World 1"),
TextToSpeech.Default.SpeakAsync("Hello World 2"),
TextToSpeech.Default.SpeakAsync("Hello World 3"))
.ContinueWith((t) => { isBusy = false; }, TaskScheduler.FromCurrentSynchronizationContext());
}
Einstellungen
Verwenden Sie die Klasse SpeechOptions zur Steuerung der Lautstärke, der Tonhöhe und des Gebietsschemas der Stimme. Übergeben Sie eine Instanz dieser Klasse an die Methode SpeakAsync(String, SpeechOptions, CancellationToken). Die Methode GetLocalesAsync() ruft eine Sammlung von Gebietsschemata ab, die vom Betriebssystem zur Verfügung gestellt werden.
public async void SpeakSettings()
{
IEnumerable<Locale> locales = await TextToSpeech.Default.GetLocalesAsync();
SpeechOptions options = new SpeechOptions()
{
Pitch = 1.5f, // 0.0 - 2.0
Volume = 0.75f, // 0.0 - 1.0
Locale = locales.FirstOrDefault()
};
await TextToSpeech.Default.SpeakAsync("How nice to meet you!", options);
}
Die folgenden Werte werden für diese Parameter unterstützt:
Parameter | Minimum | Maximum |
---|---|---|
Pitch |
0 | 2,0 |
Volume |
0 | 1,0 |
Begrenzungen
- Die Warteschlange für Äußerungen ist keine Garantie für den Fall, dass sie von mehreren Threads aufgerufen wird.
- Das Abspielen von Audio im Hintergrund wird offiziell nicht unterstützt.