虚幻引擎 | (类恐鬼症)玩家和NPC语音聊天(中)

虚幻引擎 | (类恐鬼症)玩家和NPC语音聊天-CSDN博客

上篇偏重实现步骤,中篇偏重校准和降低延迟,下篇优化上下文和口音

TTS通用参数


以下整理了Text to Speech的一些(通用)参数。重要性自上而下排序

Model size

基于OpenAI's Whisper models开源模型

用的模型越大,计算机实时计算的时间就越久。需要快速反应可以尝试最上面的Tiny Size。往下选择更大的模型,会有更高的准确性和自然度。它们拥有更多的参数和更复杂的网络结构,能够捕捉更多的语言细节和语音特征,从而生成更自然、更流畅的语音。(注意,每次切换project setting中的model size需要点上面的setup language model或者重启编辑器才能应用)

点击"设置语言模型"按钮,如果您的本地机器上尚未安装所选语言模型,它将要求您自动下载该模型。

下载完成后,编辑器将生成一个位于"Plugins/RuntimeSpeechRecognizer/Content/LanguageModels/LanguageModel.uasset"的语言模型资产。此语言模型资产将是唯一与您的项目一起打包的资产。

通过点击"清除语言模型"按钮删除任何本地下载的语言模型。

从open ai's whisper 模型的大小来看,纯英文的 TTS 模型(比如 ggml-tiny.en.binggml-medium.en.bin)和多语言模型(ggml-tiny.binggml-medium.bin)在文件大小上没有太大差异。这可能让人感到意外,因为多语言模型通常需要包含更多更复杂的语言数据,理应体积更大,但其架构可能已经做了优化,能在模型大小上保持接近单语言模型的水平。

如果有不能识别的语言,可以在Epic目录下的插件文件夹中加入自定义语音包

Alternatively, you can manually download and place language models from https://huggingface.co/ggerganov/whisper.cpp into the "Plugins/RuntimeSpeechRecognizer/Content" folder.

streaming && non-streaming

Streaming audio input

This example captures audio data from the microphone as a stream using the Capturable sound wave and passes it to the speech recognizer.流式音频输入,使用可捕获声波从麦克风捕获音频数据作为流,并将其传递给语音识别器。

Non-streaming audio input

imports audio data to the Imported sound wave and recognizes the full audio data once it has been imported.非流式音频输入将音频数据导入到导入的声波中,并在导入后识别完整的音频数据。

Temperature

"temperature" 是控制生成结果随机性的一种参数。当 temperature 值较低时,系统会倾向于生成较为确定和可预测的输出,而当 temperature 值较高时,系统会生成更多样化、更随机的输出。

这句话的意思是: 当解码过程未能满足某些阈值时,系统会通过增加 temperature 值来增加输出的随机性。也就是说,如果解码遇到困难,生成的结果不够理想,系统会增加 temperature 来尝试生成更灵活、更随机的内容。

Initial Prompt

Sets the initial prompt for the first window. This can be used to provide context for the recognition to make it more likely to predict the words correctly, e.g. custom vocabularies or proper nouns.

设置第一个窗口的初始提示。这可用于为识别提供上下文,使其更有可能正确预测单词,例如自定义词汇或专有名词。

在文字生成语音的过程中,通常是按文本逐字逐句"照读"的,但在某些高级的语音合成系统中,特别是当涉及到自然语言生成或调整发音的细节时,可能需要一定的随机性。这种随机性通常与语调、节奏、或情感表达相关,而不只是机械地"照读"。

以下是一些可能涉及随机性的场景:

  1. 语调和情感:为了让合成的语音听起来更自然、更像人类,系统可能会在语调、重音、或表达情感的过程中引入一些随机变化。通过这种方式,语音听起来就不会显得死板和单一,而是更接近真人的表达。

  2. 停顿和节奏:不同的语境下,停顿的长度和节奏可能有所不同。系统可以通过引入一定的随机性来模拟这些变化,从而生成更自然流畅的语音。

  3. 句子结构或表述方式的选择(适用于生成文本再语音的系统):有些系统在生成语音时,可能要先生成要表达的文本内容,而这个过程可能涉及到不同的句子结构或词汇选择。这时的随机性就是在文本生成阶段用到的,类似于 ChatGPT 生成文本的机制。

举个例子:

  • 低 temperature(如 0.2):系统会生成更稳定、预期一致的语音,几乎不会偏离最常见的发音方式,听起来像是机械地"照读"。
  • 高 temperature(如 0.8 或 1.0):生成的语音会包含更多变化,例如停顿、语调起伏、语速快慢的变化,这样语音可能更像一个自然的对话者,而不是按部就班地读文本。

然而,如果 temperature 设置过高,语音可能显得过于"随意",语调或情感表达可能不合适,甚至会导致不太符合语境的发音选择。

Set the number of beams in beam search. Only applicable when temperature is zero.

**束搜索(beam search)**算法的一个设置选项,特别是在生成任务(如文本生成或语音合成)中常用。我们来逐句分析这句话的意思:

1. "Set the number of beams in beam search"

  • 束搜索是一种搜索算法,用来在生成文本或语音时找到多个可能的候选结果,并最终选择最优的一个。这里的"beams"(束)指的是在每一步生成过程中,保留的多个候选项。你可以将其理解为在每一阶段,算法会保留多个可能的生成路径,而不是只选择一个。
  • "Set the number of beams" 意思是你可以设置要保留多少个候选项(路径)。比如,设为 3 就表示在每个生成步骤中保留 3 个候选方案,然后继续从这些方案中挑选最好的。

2. "Only applicable when temperature is zero"

  • 这一部分说明束搜索算法只在 temperature 为零时生效。
  • temperature 为零意味着系统不再引入随机性,而是严格选择最高概率的结果。在这种情况下,束搜索算法会非常有用,因为它可以保留多个可能的候选项进行评估,以确保找到最优解。
  • 如果 temperature 不为零,意味着系统引入了随机性,束搜索的严格性和效率会大大降低,因此束搜索只在完全确定性的环境(即 temperature = 0)下才有意义。

Step Size Ms

录入语音的毫秒数 1000ms=1s。

Sets the step size in milliseconds. Determines how often to send audio data for recognition. The default value is 5000 ms (5 seconds). 这句话描述的是设置步长大小(step size) ,即每隔多少毫秒发送一次音频数据用于识别 ,默认值为 5000 毫秒(5 秒)。理论上,步长越小 ,意味着数据会更频繁地发送,延迟会变小,但这并不总是意味着"越小越好",会缺失上下文影响。

如果启用了流式处理(streaming processing) ,那么**step size 的作用会显得不那么重要**,或者说其影响会大大减少。

※※加速库

Use Acceleration Libraries

whisper.cpp can accelerate the recognition process by using the following libraries: Core ML for Apple Silicon devices, OpenVINO on devices including x86 CPUs and Intel GPUs, Nvidia GPU Cuda on Windows or Linux, BLAS CPU support via OpenBLAS, BLAS CPU support via Intel MKL. Please note that these libraries are not included in the plugin by default and you need to install them manually, following the whisper.cpp instructions.

相关推荐
向宇it13 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
芋芋qwq14 小时前
Unity UI射线检测 道具拖拽
ui·unity·游戏引擎
tealcwu15 小时前
【Unity服务】关于Unity LevelPlay的基本情况
unity·游戏引擎
鹿野素材屋1 天前
Unity Dots下的动画合批工具:GPU ECS Animation Baker
unity·游戏引擎
小春熙子1 天前
Unity图形学之着色器之间传递参数
unity·游戏引擎·技术美术·着色器
虾球xz1 天前
游戏引擎学习第15天
学习·游戏引擎
Java Fans1 天前
在Unity中实现电梯升降功能的完整指南
unity·游戏引擎
GrimRaider2 天前
[Unity]TileMap开发,TileMap地图缝隙问题
unity·游戏引擎·tilemap
无敌最俊朗@2 天前
unity3d——基础篇小项目(开始界面)
unity·游戏引擎
suzh1qian2 天前
Unity类银河战士恶魔城学习总结(P133 Merge skill tree with Parry skill把技能树和格挡技能相组合)
学习·unity·c#·游戏引擎