Udostępnij za pośrednictwem


Zamiana tekstu na mowę

Przeglądaj przykład. Przeglądanie przykładu

W tym artykule opisano sposób używania interfejsu użytkownika aplikacji wieloplatformowej platformy .NET (.NET MAUI). ITextToSpeech Ten interfejs umożliwia aplikacji korzystanie z wbudowanych aparatów zamiany tekstu na mowę w celu wypowiadania tekstu zwrotnego z urządzenia. Można go również użyć do wykonywania zapytań o dostępne języki.

Domyślna implementacja interfejsu ITextToSpeech jest dostępna za pośrednictwem TextToSpeech.Default właściwości . Zarówno interfejs, jak ITextToSpeech i TextToSpeech klasa są zawarte w Microsoft.Maui.Media przestrzeni nazw.

Rozpocznij

Aby uzyskać dostęp do funkcji zamiany tekstu na mowę, wymagana jest następująca konfiguracja specyficzna dla platformy.

Jeśli docelowa wersja systemu Android projektu jest ustawiona na Android 11 (R API 30) lub nowszą, musisz zaktualizować manifest systemu Android za pomocą filtru intencji dla aparatu zamiany tekstu na mowę (TTS). Aby uzyskać więcej informacji na temat intencji, zobacz dokumentację systemu Android dotyczącą intencji i filtrów intencji.

W pliku Platformy/Android/AndroidManifest.xml dodaj następujące queries/intent węzły do węzłamanifest:

<queries>
  <intent>
    <action android:name="android.intent.action.TTS_SERVICE" />
  </intent>
</queries>

Używanie zamiany tekstu na mowę

Zamiana tekstu na mowę działa przez wywołanie SpeakAsync metody z tekstem do mówienia, jak pokazano w poniższym przykładzie kodu:

public async void Speak() =>
    await TextToSpeech.Default.SpeakAsync("Hello World");

Ta metoda przyjmuje wartość opcjonalną CancellationToken , aby zatrzymać wypowiedź po jej uruchomieniu.

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();
}

Zamiana tekstu na mowę spowoduje automatyczne kolejkowanie żądań mowy z tego samego wątku.

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());
}

Ustawienia

Aby sterować głośnością, skokami i ustawieniami regionalnymi głosu, użyj SpeechOptions klasy . Przekaż wystąpienie tej klasy do SpeakAsync(String, SpeechOptions, CancellationToken) metody . Metoda GetLocalesAsync() pobiera kolekcję ustawień regionalnych dostarczonych przez system operacyjny.

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);
}

Następujące wartości są obsługiwane dla tych parametrów:

Parametr Minimum Maksimum
Pitch 0 2.0
Volume 0 1.0

Ograniczenia

  • Kolejkowanie wypowiedzi nie jest gwarantowane, jeśli jest wywoływane między wieloma wątkami.
  • Odtwarzanie dźwięku w tle nie jest oficjalnie obsługiwane.