Udostępnij za pośrednictwem


Xamarin.Essentials: zamiana tekstu na mowę

Klasa TextToSpeech umożliwia aplikacji korzystanie z wbudowanych aparatów zamiany tekstu na mowę w celu wypowiadania tekstu zwrotnego z urządzenia, a także wykonywania zapytań o dostępne języki, które aparat może obsługiwać.

Rozpocznij

Aby rozpocząć korzystanie z tego interfejsu API, przeczytaj przewodnik wprowadzający , Xamarin.Essentials aby upewnić się, że biblioteka jest prawidłowo zainstalowana i skonfigurowana w projektach.

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

Jeśli docelowa wersja systemu Android projektu jest ustawiona na Android 11 (R API 30), musisz zaktualizować manifest systemu Android za pomocą zapytań, które są używane z nowymi wymaganiami dotyczącymi widoczności pakietu.

Otwórz plik AndroidManifest.xml w folderze Właściwości i dodaj następujące elementy w węźle manifestu:

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

Używanie zamiany tekstu na mowę

Dodaj odwołanie do Xamarin.Essentials klasy:

using Xamarin.Essentials;

Zamiana tekstu na mowę działa przez wywołanie SpeakAsync metody z parametrami tekstowymi i opcjonalnymi oraz zwracane po zakończeniu wypowiedzi.

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

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

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

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

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

Ustawienia mowy

Aby uzyskać większą kontrolę nad tym, jak dźwięk jest mówiony z SpeechOptions powrotem, dzięki czemu umożliwia ustawienie głośności, skoku i ustawień regionalnych.

public async Task SpeakNow()
{
    var settings = new SpeechOptions()
        {
            Volume = .75f,
            Pitch = 1.0f
        };

    await TextToSpeech.SpeakAsync("Hello World", settings);
}

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

Parametr Minimum Maksimum
Wysokość głosu 0 2.0
Objętość 0 1.0

Ustawienia regionalne mowy

Każda platforma obsługuje różne ustawienia regionalne, aby mówić z powrotem tekst w różnych językach i akcentach. Platformy mają różne kody i sposoby określania ustawień regionalnych, dlatego Xamarin.Essentials udostępnia klasę międzyplatformową Locale i sposób wykonywania zapytań za pomocą GetLocalesAsyncpolecenia .

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

Ograniczenia

  • Kolejka wypowiedzi nie jest gwarantowana, jeśli jest wywoływana w wielu wątkach.
  • Odtwarzanie dźwięku w tle nie jest oficjalnie obsługiwane.

interfejs API

Więcej filmów na platformie Xamarin można znaleźć w witrynach Channel 9 i YouTube.