Sdílet prostřednictvím


Převod textu na řeč

Projděte si ukázku. Procházení ukázky

Tento článek popisuje, jak můžete použít rozhraní .NET Multi-Platform App UI (.NET MAUI). ITextToSpeech Toto rozhraní umožňuje aplikaci využívat integrované moduly pro převod textu na řeč k zpětnému mluvení textu ze zařízení. Můžete ho také použít k dotazování na dostupné jazyky.

Výchozí implementace ITextToSpeech rozhraní je k dispozici prostřednictvím TextToSpeech.Default vlastnosti. Rozhraní ITextToSpeech i TextToSpeech třída jsou obsaženy v Microsoft.Maui.Media oboru názvů.

Začínáme

Pro přístup k funkcím převodu textu na řeč se vyžaduje následující nastavení specifické pro platformu.

Pokud je verze cílového Androidu vašeho projektu nastavená na Android 11 (R API 30) nebo vyšší, musíte aktualizovat manifest Androidu pomocí filtru záměru pro modul převodu textu na řeč (TTS). Další informace o záměrech najdete v dokumentaci Androidu k záměrům a filtrům záměrů.

V souboru Platforms/Android/AndroidManifest.xml přidejte do manifest uzlu následující queries/intent uzly:

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

Použití převodu textu na řeč

Převod textu na řeč funguje voláním SpeakAsync metody s textem, který má mluvit, jak ukazuje následující příklad kódu:

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

Tato metoda přebírá nepovinnou funkci CancellationToken , aby se po spuštění promluvy zastavila.

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

Převod textu na řeč automaticky zařadí požadavky na řeč ze stejného vlákna.

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

Nastavení

Pokud chcete ovládat hlasitost, výšku a národní prostředí hlasu, použijte SpeechOptions třídu. Předejte instanci této třídy metodě SpeakAsync(String, SpeechOptions, CancellationToken) . Metoda GetLocalesAsync() načte kolekci národních prostředí poskytovaných operačním systémem.

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

Následující hodnoty jsou podporované pro tyto parametry:

Parametr Minimum Maximum
Pitch 0 2.0
Volume 0 1.0

Omezení

  • Zařazování promluv do fronty není zaručeno, pokud se volá ve více vláknech.
  • Přehrávání zvuku na pozadí není oficiálně podporované.