Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается, как использовать интерфейс многоплатформенного приложения .NET (.NET MAUI). ITextToSpeech Этот интерфейс позволяет приложению использовать встроенные подсистемы преобразования текста в речь для обратного перевода текста с устройства. Вы также можете использовать его для запроса на доступные языки.
Реализация интерфейса по умолчанию ITextToSpeech
доступна через TextToSpeech.Default свойство. Интерфейс ITextToSpeech
и TextToSpeech
класс содержатся в Microsoft.Maui.Media
пространстве имен.
Начало работы
Для доступа к функциям преобразования текста в речь требуется следующая настройка для конкретной платформы.
Если версия Android, на которую нацелен ваш проект, установлена как Android 11 (R API 30) или выше, необходимо обновить Android Manifest, добавив фильтр намерений для движка текст-в-речь (TTS). Дополнительные сведения о намерениях см. в документации Android по намерениям и фильтрам намерений.
В файле Platform/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 |
Чтобы контролировать громкость, тон, скорость и локаль голоса, используйте класс 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
Rate = 1.5f, // 0.1 - 2.0
Locale = locales.FirstOrDefault()
};
await TextToSpeech.Default.SpeakAsync("How nice to meet you!", options);
}
Ниже приведены поддерживаемые значения этих параметров.
Параметр | Минимум | Максимум |
---|---|---|
Pitch |
0 | 2.0 |
Volume |
0 | 1.0 |
Rate |
0.1 | 2.0 |
Ограничения
- Не гарантируется постановка в очередь речевых фрагментов при их вызове из нескольких потоков.
- Фоновое воспроизведение звука официально не поддерживается.