如何将 Riva TTS API 与开箱即用的语音合成模型一起使用?
本章节将向您介绍 Riva Speech Skills 的 TTS 服务的基础知识,特别介绍如何将 Riva TTS API 与开箱即用的模型一起使用。
NVIDIA Riva 概述
NVIDIA Riva 是一个 GPU 加速的 SDK,用于帮助您构建定制化的语音 AI 应用程序并提供实时性能。Riva 提供丰富的语音和自然语言理解服务,例如:
- 自动语音识别 (ASR)
- 文本到语音合成 (TTS)
- 自然语言处理 (NLP) 服务的集合,例如命名实体识别 (NER)、自动加标点、意图分类等。
使用 Riva TTS API 生成语音
-
Riva TTS 服务基于两阶段管道:Riva 首先使用第一个模型生成梅尔频谱图,然后使用第二个模型生成语音。该管道形成了一个从文本到语音的系统,使您能够从原始转录中合成自然发音的语音,而无需任何例如语音模式或节奏的额外信息。
-
Riva 提供两种最先进的英语语音(一种男性语音和一种女性语音),可以使用 Riva 快速启动脚本轻松部署。 Riva 还支持以各种方式轻松定制 TTS,以满足您的特定需求。
-
后续的 Riva 版本将包括模型注册等功能,以支持具有相同 API 的多种语言/语音,并支持重新采样到替代采样率。
有关详细信息,请参阅 Riva TTS 文档
使用 Riva TTS API 进行语音合成“从文字到语音”
1 启动 Riva Speech Skills 服务器和客户端
在运行本脚本之前,按照 Riva 快速入门指南中的说明,首先启动 Riva Speech Skills 服务器和客户端,初始化部署开箱即用的TTS模型并启动客户端服务(默认情况下仅自动部署英文模型,非英语模型需要自定义部署)。
ngc registry resource download-version nvidia/riva/riva_quickstart:2.1.0
cd riva_quickstart_v2.1.0
bash riva_init.sh
bash riva_start.sh
bash riva_start_client.sh
jupyter notebook --ip=0.0.0.0 --allow-root
2 导入 Riva 客户端库
进入Jupyter并打开ipynb文件之后,首先让我们导入一些包括 Riva Client在内的必要的工具库:
import numpy as np
import IPython.display as ipd
import grpc #google开源的微服务框架
import riva_api.riva_tts_pb2 as rtts # riva tts工具类
import riva_api.riva_tts_pb2_grpc as rtts_srv # riva tts微服务工具类
import riva_api.riva_audio_pb2 as ra# riva音频处理工具类
3 创建一个Riva客户端并连接到Riva Speech API服务器¶
Note:下面的“localhost:50051”是Riva Speech API服务器的本地部署在默认端口上。如果服务器部署在不同的主机上或通过Kubernetes上的Helm图表,请使用适当的URI。
channel = grpc.insecure_channel('localhost:50051')
riva_tts = rtts_srv.RivaSpeechSynthesisStub(channel)
4 批处理模式 TTS
- Riva TTS 支持流式和批处理推理模式。
- 在批处理模式下,直到生成请求文本的完整音频序列后才会返回音频,并且可以实现更高的吞吐量。
- 在流式处理模型下,当发出流式请求时,音频会在生成后立即返回,从而减少了大型请求的延迟。
让我们看一个显示批处理模式 TTS API 用法的示例:
以批推理模式向Riva Speech服务器发出一个用于TTS的gRPC请求。
req = rtts.SynthesizeSpeechRequest(
text = "Is it recognize speech or wreck a nice beach?",
language_code = "en-US",
encoding = ra.AudioEncoding.LINEAR_PCM, # 目前TTS仅支持 LINEAR_PCM音频编码格式
sample_rate_hz = 44100, # 生成44.1KHz采样精度的音频
voice_name = "English-US-Female-1" # 生成女性语音样本的声音
)
resp = riva_tts.Synthesize(req)
audio_samples = np.frombuffer(resp.audio, dtype=np.int16)
ipd.Audio(audio_samples, rate=req.sample_rate_hz)
5 了解 TTS API 参数
Riva TTS 在向 gRPC 端点发出文本转语音请求时支持许多选项,如上所示。让我们进一步了解这些参数:
- language_code - 生成音频的语言。 “en-US”代表英语(美国),是目前唯一支持 OOTB 的语言。
- encoding - 要生成的音频编码类型,目前仅支持 LINEAR_PCM。
- sample_rate_hz - 生成音频的采样率,取决于麦克风,通常为 22khz 或 44khz。
- voice_name - 用于合成音频的语音样本。目前Riva 提供两种 OOTB 语音(English-US-Female-1、English-US-Male-1)
6 深入了解 Riva 功能
-
现在您已经对 Riva TTS API 有了基本的了解,在此处查看更多 Riva TTS和ASR教程,了解如何使用 Riva TTS的一些高级功能,包括根据您的特定需求定制 TTS。
-
有关如何在实际应用中使用 Riva 技能的更多示例,您可以关注虚拟助手演示
-
有关微服务gRPC可以参考 gRPC gRPC & Protocol Buffers
-
更多的客户端命令行可参考 API Command-line Clients
-
要了解有关 Riva 技能的更多信息,请访问 NVIDIA Riva 开发者主页NVIDIA Riva | NVIDIA Developer。
-
更多精彩内容,请扫描下方二维码或者访问https://developer.nvidia.com/zh-cn/developer-program 来加入NVIDIA开发者计划。