Aracılığıyla paylaş


Metinden Sese

Örneğe göz atın. Örneğe göz atın

Bu makalede .NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI) ITextToSpeech arabirimini nasıl kullanabileceğiniz açıklanmaktadır. Bu arabirim, bir uygulamanın yerleşik metni sese çevirme motorlarını kullanarak cihazdan metni seslendirmesini sağlar. Kullanılabilir dilleri sorgulamak için de kullanabilirsiniz.

Arabirimin ITextToSpeech varsayılan uygulaması, TextToSpeech.Default özelliği aracılığıyla kullanılabilir. ITextToSpeech arabirimi ile TextToSpeech sınıfı, Microsoft.Maui.Media ad alanında yer alır.

Kullanmaya başlayın

Metin okuma işlevine erişmek için aşağıdaki platforma özgü kurulum gereklidir.

Projenizin Hedef Android sürümü Android 11 (R API 30) veya üzeri olarak ayarlandıysa, Android Bildiriminizi metin okuma (TTS) altyapısı için bir amaç filtresiyle güncelleştirmeniz gerekir. Amaçlar hakkında daha fazla bilgi için Bkz. Android'in Amaçlar ve Amaç Filtreleri belgeleri.

Platformlar/Android/AndroidManifest.xml dosyasında, manifest düğümüne aşağıdaki queries/intent düğümlerini ekleyin:

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

Metinden Sese teknolojisini kullanma

Metin okuma, konuşulacak metni belirterek SpeakAsync yöntemini çağırmak suretiyle çalışır; bu, aşağıdaki kod örneğinde gösterildiği gibi gösterilir.

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

Bu yöntem, konuşma başladığında durdurmak için isteğe bağlı bir CancellationToken alır.

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

Metin Okuma, aynı iş parçacığından gelen konuşma isteklerini otomatik olarak kuyruğa alır.

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

Ayarlar

Sesin ses düzeyini, perdesini ve yerel ayarını denetlemek için sınıfını SpeechOptions kullanın. Bu sınıfın bir örneğini SpeakAsync(String, SpeechOptions, CancellationToken) yöntemine geçirin. yöntemi, GetLocalesAsync() işletim sistemi tarafından sağlanan yerel ayarların bir koleksiyonunu alır.

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

Bu parametreler için desteklenen değerler şunlardır:

Parametre Minimum Maksimum
Pitch 0 2.0
Volume 0 1.0

Sesin ses düzeyini, perdesini, hızını ve yerel ayarını denetlemek için SpeechOptions sınıfını kullanın. Yöntemine bu sınıfın bir örneğini SpeakAsync(String, SpeechOptions, CancellationToken) geçirin. GetLocalesAsync() yöntemi, işletim sistemi tarafından sağlanan yerel ayarların bir koleksiyonunu getirir.

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
        Rate = 1.5f,    // 0.1 - 2.0
        Locale = locales.FirstOrDefault()
    };

    await TextToSpeech.Default.SpeakAsync("How nice to meet you!", options);
}

Bu parametreler için desteklenen değerler şunlardır:

Parametre Minimum Maksimum
Pitch 0 2.0
Volume 0 1.0
Rate 0.1 2.0

Sınırlamalar

  • Birden çok iş parçacığı arasında çağrıldığında sesli komutların kuyruğa alınması garanti edilmez.
  • Arka planda ses oynatma resmi olarak desteklenmez.