Как использовать плагин
Плагин Runtime Text To Speech синтезирует текст в речь с использованием загружаемых голосовых моделей. Эти модели управляются в настройках плагина внутри редактора, загружаются и упаковываются для использования во время выполнения. Следуйте инструкциям ниже, чтобы начать работу.
В редакторе
Загрузите подходящие голосовые модели для вашего проекта, как описано здесь. Вы можете загрузить несколько голосовых моделей одновременно.
Во время выполнения
Создайте синтезатор с помощью функции CreateRuntimeTextToSpeech
. Убедитесь, что вы сохраняете ссылку на него (например, как отдельную переменную в Blueprints или UPROPERTY в C++), чтобы предотвратить его удаление сборщиком мусора.
- Blueprint
- C++
// Create the Runtime Text To Speech synthesizer in C++
URuntimeTextToSpeech* Synthesizer = URuntimeTextToSpeech::CreateRuntimeTextToSpeech();
// Ensure the synthesizer is referenced correctly to prevent garbage collection (e.g. as a UPROPERTY)
Синтез речи
Плагин предлагает два режима синтеза речи из текста:
- Обычный Text-to-Speech: Синтезирует весь текст и возвращает готовый аудиофайл по завершении
- Потоковый Text-to-Speech: Предоставляет аудиофрагменты по мере их генерации, позволяя обрабатывать их в реальном времени
Каждый режим поддерживает два метода выбора голосовых моделей:
- По имени: Выбор голосовой модели по её названию (рекомендуется для UE 5.4+)
- По объекту: Выбор голосовой модели через прямую ссылку (рекомендуется для UE 5.3 и более ранних версий)
Обычный Text-to-Speech
По имени
- Blueprint
- C++
Функция Text To Speech (By Name)
более удобна в Blueprints начиная с UE 5.4. Она позволяет выбирать голосовые модели из выпадающего списка загруженных моделей. В UE версиях ниже 5.3 этот выпадающий список не отображается, поэтому при использовании более старых версий вам потребуется вручную пере бирать массив голосовых моделей, возвращаемый функцией GetDownloadedVoiceModels
, чтобы выбрать нужную.
В C++ выбор голосовых моделей может быть немного сложнее из-за отсутствия выпадающего списка. Вы можете использовать функцию GetDownloadedVoiceModelNames
для получения названий загруженных голосовых моделей и выбрать нужную. После этого можно вызвать функцию TextToSpeechByName
для синтеза текста с использованием выбранного имени голосовой модели.
// Assuming "Synthesizer" is a valid and referenced URuntimeTextToSpeech object (ensure it is not eligible for garbage collection during the callback)
TArray<FName> DownloadedVoiceNames = URuntimeTTSLibrary::GetDownloadedVoiceModelNames();
// If there are downloaded voice models, use the first one to synthesize text, just as an example
if (DownloadedVoiceNames.Num() > 0)
{
const FName& VoiceName = DownloadedVoiceNames[0]; // Select the first available voice model
Synthesizer->TextToSpeechByName(VoiceName, 0, TEXT("Text example 123"), FOnTTSResultDelegateFast::CreateLambda([](URuntimeTextToSpeech* TextToSpeechInstance, bool bSuccess, const TArray<uint8>& AudioData, int32 SampleRate, int32 NumChannels)
{
UE_LOG(LogTemp, Log, TEXT("TextToSpeech result: %s, AudioData size: %d, SampleRate: %d, NumChannels: %d"), bSuccess ? TEXT("Success") : TEXT("Failed"), AudioData.Num(), SampleRate, NumChannels);
}));
return;
}
По объекту
- Blueprint
- C++
Функция Text To Speech (By Object)
работает во всех версиях Unreal Engine, но отображает голосовые модели в виде выпадающего списка ссылок на ассеты, что менее интуитивно. Этот метод подходит для UE 5.3 и более ранних версий, или если ваш проект требует прямого указания на ассет голосовой модели по какой-либо причине.
Если вы загрузили модели, но не видите их, откройте выпадающий список Voice Model, нажмите на настройки (иконка шестерёнки) и активируйте Show Plugin Content и Show Engine Content, чтобы модели стали видны.
В C++ выбор голосовых моделей может быть немного сложнее из-за отсутствия выпадающего списка. Вы можете использовать функцию GetDownloadedVoiceModelNames
для получения названий загруженных голосовых моделей и выбрать нужную. Затем вызовите функцию GetVoiceModelFromName
, чтобы получить объект г олосовой модели, и передайте его в функцию TextToSpeechByObject
для синтеза текста.
// Assuming "Synthesizer" is a valid and referenced URuntimeTextToSpeech object (ensure it is not eligible for garbage collection during the callback)
TArray<FName> DownloadedVoiceNames = URuntimeTTSLibrary::GetDownloadedVoiceModelNames();
// If there are downloaded voice models, use the first one to synthesize text, for example
if (DownloadedVoiceNames.Num() > 0)
{
const FName& VoiceName = DownloadedVoiceNames[0]; // Select the first available voice model
TSoftObjectPtr<URuntimeTTSModel> VoiceModel;
if (!URuntimeTTSLibrary::GetVoiceModelFromName(VoiceName, VoiceModel))
{
UE_LOG(LogTemp, Error, TEXT("Failed to get voice model from name: %s"), *VoiceName.ToString());
return;
}
Synthesizer->TextToSpeechByObject(VoiceModel, 0, TEXT("Text example 123"), FOnTTSResultDelegateFast::CreateLambda([](URuntimeTextToSpeech* TextToSpeechInstance, bool bSuccess, const TArray<uint8>& AudioData, int32 SampleRate, int32 NumChannels)
{
UE_LOG(LogTemp, Log, TEXT("TextToSpeech result: %s, AudioData size: %d, SampleRate: %d, NumChannels: %d"), bSuccess ? TEXT("Success") : TEXT("Failed"), AudioData.Num(), SampleRate, NumChannels);
}));
return;
}