플러그인 사용 방법
Runtime Text To Speech 플러그인은 다운로드 가능한 음성 모델을 사용하여 텍스트를 음성으로 합성합니다. 이러한 모델들은 에디터 내 플러그인 설정에서 관리되며, 다운로드 후 런타임 사용을 위해 패키징됩니다. 시작하려면 아래 단계를 따르세요.
에디터 측면
여기에 설명된 대로 프로젝트에 적합한 음성 모델을 다운로드하세요. 동시에 여러 음성 모델을 다운로드할 수 있습니다.
런타임 측면
CreateRuntimeTextToSpeech
함수를 사용하여 합성기를 생성하세요. 가비지 컬렉션으로부터 보호하기 위해 (예: Blueprints에서 별도의 변수로 또는 C++의 UPROPERTY로) 해당 참조를 유지해야 합니다.
- 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 (By Name)
(TextToSpeechByName
C++에서)Text To Speech (By Object)
(TextToSpeechByObject
C++에서)
By Name
- Blueprint
- C++
Text To Speech (By Name)
함수는 UE 5.4부터 Blueprint에서 더 편리합니다. 이 함수는 다운로드된 모델 목록의 드롭다운에서 보이스 모델을 선택할 수 있게 해줍니다. 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([](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([](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;
}