テキスト読み上げ
この記事では、.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 |
制限事項
- 複数のスレッドから呼び出された場合、発話のキューは保証されません。
- バックグラウンドでのオーディオ再生は、公式にはサポートされていません。
.NET MAUI