跳到主要内容

如何使用该插件

Runtime Text To Speech 插件通过可下载的语音模型将文本合成为语音。这些模型在编辑器内的插件设置中进行管理、下载并打包以供运行时使用。请按照以下步骤开始使用。

编辑器端

根据此处的说明下载适合您项目的语音模型。您可以同时下载多个语音模型。

运行时端

使用 CreateRuntimeTextToSpeech 函数创建合成器。请确保保持对它的引用(例如在 Blueprints 中作为单独的变量或在 C++ 中使用 UPROPERTY),以防止其被垃圾回收。

在 Blueprints 中创建 Runtime Text To Speech 合成器的示例

语音合成

该插件提供两种文本转语音合成模式:

  1. 常规文本转语音:合成完整文本并在完成后返回全部音频
  2. 流式文本转语音:实时生成音频片段,支持流式处理

每种模式支持两种选择语音模型的方法:

  • 按名称选择:通过语音模型名称选择(推荐用于UE 5.4+)
  • 按对象引用:直接引用语音模型对象(推荐用于UE 5.3及更早版本)

常规文本转语音

按名称选择

UE 5.4开始,Text To Speech (By Name)函数在蓝图中使用更为便捷。它允许您从已下载模型的下拉列表中选择语音模型。在UE 5.3及以下版本中,此下拉列表不会显示,因此如果您使用的是旧版本,需要手动遍历GetDownloadedVoiceModels返回的语音模型数组来选择所需模型。

蓝图中使用按名称文本转语音的示例

按对象调用

Text To Speech (By Object) 函数在所有版本的虚幻引擎中均可使用,但会将语音模型显示为资源引用下拉列表,这种方式不够直观。此方法适用于 UE 5.3 及更早版本,或者您的项目因某些原因需要直接引用语音模型资源。

在蓝图中使用按对象调用文本转语音的示例

如果您已下载模型但无法看到它们,请打开 Voice Model 下拉菜单,点击设置(齿轮图标),并启用 Show Plugin ContentShow Engine Content 以使模型可见。

流式文本转语音

对于较长文本或需要实时处理生成音频数据的场景,您可以使用以下流式版本的文本转语音功能:

  • Streaming Text To Speech (By Name) (C++中为StreamingTextToSpeechByName
  • Streaming Text To Speech (By Object) (C++中为StreamingTextToSpeechByObject

这些函数会在音频数据生成时以分块形式提供,允许立即处理而无需等待整个合成过程完成。这对于实时音频播放、实时可视化等需要增量处理语音数据的应用场景非常有用。

通过名称流式处理

Streaming Text To Speech (By Name) 函数与常规版本类似,但会通过On Speech Chunk委托以分块形式提供音频数据。

在蓝图中使用Streaming Text To Speech by Name的示例

按对象流式传输

Streaming Text To Speech (By Object) 函数提供相同的流式功能,但需要传入语音模型对象引用。

在蓝图中使用 Streaming Text To Speech by Object 的示例

音频播放

对于常规(非流式)文本转语音,On Speech Result 委托会提供合成的音频作为 PCM 数据(浮点格式,在 Blueprints 中以字节数组形式呈现,在 C++ 中以 TArray<uint8> 形式呈现),同时包含 Sample Rate(采样率)和 Num Of Channels(通道数)。

对于播放,推荐使用 Runtime Audio Importer 插件将原始音频数据转换为可播放的声音波形。

以下是合成文本并播放音频的 Blueprint 节点示例(可复制节点):

取消文本转语音

您可以通过在合成器实例上调用 CancelSpeechSynthesis 函数随时取消正在进行的文本转语音合成操作:

在蓝图中取消文本转语音

当合成被取消时:

  • 合成过程将尽快停止
  • 任何正在执行的回调将被终止
  • 完成委托会被调用,参数为 bSuccess = false 并附带表明合成已取消的错误信息
  • 为合成分配的所有资源都将被正确清理

这对于长文本或需要中断当前播放以开始新合成的情况特别有用。

说话人选择

两个文本转语音函数都接受可选的说话人ID参数,这在处理支持多说话人的语音模型时非常有用。您可以使用GetSpeakerCountFromVoiceModelGetSpeakerCountFromModelName函数来检查所选语音模型是否支持多说话人。如果存在多个说话人,只需在调用文本转语音函数时指定所需的说话人ID即可。某些语音模型提供丰富的选择——例如English LibriTTS包含超过900个不同的说话人可供选择。

Runtime Audio Importer插件还提供了其他功能,如将音频数据导出到文件、传递到SoundCue、MetaSound等。更多详情请参阅Runtime Audio Importer文档