Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Класс TextToSpeech позволяет приложению использовать встроенные механизмы преобразования текста в речь, чтобы озвучивать текст на устройстве, а также запрашивать доступные языки, которые может поддерживать подсистема.
Начало работы
Чтобы начать использовать этот API, ознакомьтесь с руководством по началу работы с Xamarin.Essentials, чтобы правильно настроить и установить библиотеку в проектах.
Для доступа к функции TextToSpeech нужно создать описанную ниже конфигурацию для конкретной платформы.
Если целевой версией Android для проекта является Android 11 (API R 30), необходимо обновить манифест Android с помощью запросов, которые используются с новыми требованиями к видимости пакета.
Откройте файл AndroidManifest.xml в папке Properties и добавьте приведенный ниже код в узел manifest:
<queries>
<intent>
<action android:name="android.intent.action.TTS_SERVICE" />
</intent>
</queries>
Использование преобразования текста в речь
Добавьте ссылку на Xamarin.Essentials в своем классе:
using Xamarin.Essentials;
При преобразовании текста в речь вызывается метод SpeakAsync с текстом и дополнительными параметрами и выполняется возврат после завершения фрагмента речи.
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());
}
Этот метод принимает необязательный параметр CancellationToken, чтобы остановить высказывание после его запуска.
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();
}
Функция преобразования текста в речь автоматически ставит в очередь запросы на озвучивание речи из одного и того же потока.
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());
}
Параметры речи
Для более высокого уровня контроля над воспроизведением звука применяется параметр SpeechOptions, который позволяет установить громкость, высоту тона и языковой стандарт.
public async Task SpeakNow()
{
var settings = new SpeechOptions()
{
Volume = .75f,
Pitch = 1.0f
};
await TextToSpeech.SpeakAsync("Hello World", settings);
}
Ниже приведены поддерживаемые значения этих параметров.
| Параметр | Минимум | Максимум |
|---|---|---|
| Тон | 0 | 2.0 |
| Громкость | 0 | 1.0 |
Языковой стандарт
Каждая платформа поддерживает разные языковые стандарты, чтобы применять разные языки и акценты. Платформы используют разные коды и способы указания языкового стандарта. Поэтому Xamarin.Essentials предоставляет кроссплатформенный класс Locale и способ запросить их с помощью GetLocalesAsync.
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);
}
Ограничения
- Порядок очереди запросов на озвучивание не гарантируется при вызове нескольких потоков.
- Воспроизведение фонового звука официально не поддерживается.