Share via


音声合成

Browse sample. サンプルを参照する

この記事では、.NET マルチプラットフォーム アプリ UI (.NET MAUI) ITextToSpeech インターフェイスを使用する方法について説明します。 このインターフェイスを使用すると、アプリケーションは組み込みのテキスト読み上げエンジンを使用して、デバイスからテキストを読み上げることができます。 これを使用して、使用可能な言語のクエリを実行することもできます。

ITextToSpeech インターフェイスの既定の実装は、TextToSpeech.Default プロパティを通じて使用できます。 ITextToSpeech インターフェイスと TextToSpeech クラスはどちらも Microsoft.Maui.Media 名前空間に含まれています。

作業の開始

テキスト読み上げ機能にアクセスするには、次のプラットフォーム固有の設定が必要です。

プロジェクトのターゲット Android バージョンが Android 11 (R API 30) 以降に設定されている場合は、テキスト読み上げ (TTS) エンジンの意図フィルターで Android マニフェスト を更新する必要があります。 意図の詳細については、意図と意図フィルターに関する Android の説明書をご覧ください。

Platforms/Android/AndroidManifest.xml ファイルで、次の queries/intent ノードを manifest ノードに追加します。

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

音声合成の使用

テキスト読み上げは、次のコード例に示すように、読み上げるテキストで SpeakAsync メソッドを呼び出すことによって機能します。

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

このメソッドは、開始した後で発話を停止するために、オプションの CancellationToken を受け取ります。

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

音声合成は、同じスレッドからの音声の要求を自動的にキューに登録します。

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

設定

音声の音量、ピッチ、ロケールを制御するには、SpeechOptions クラスを使用します。 このクラスのインスタンスを SpeakAsync(String, SpeechOptions, CancellationToken) メソッドに渡します。 GetLocalesAsync() メソッドは、オペレーティング システムによって提供されるロケールのコレクションを取得します。

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

これらのパラメーターに使用できる値は次のとおりです。

パラメーター 最小要件 最大値
Pitch 0 2.0
Volume 0 1.0

制限事項

  • 複数のスレッドから呼び出された場合、発話のキューは保証されません。
  • バックグラウンドでのオーディオ再生は、公式にはサポートされていません。