GSP222

概览
借助 Text-to-Speech API,您可以创建机器生成(又称“合成”)的人类语音音频文件。您可以使用文本或语音合成标记语言 (SSML) 来提供内容,指定“语音”(即具有独特语调和语音的“朗读者”),并配置输出;Text-to-Speech API 就会使用您指定的语音,将您发送的内容转换成音频数据并返回给您。
在此实验中,您将使用 Text-to-Speech API 创建一系列音频文件,然后收听这些音频,并比较它们之间有何差异。
学习内容
在本实验中,您将使用 Text-to-Speech API 完成以下任务:
- 创建一系列音频文件。
- 聆听并比较音频文件。
- 配置音频输出。
设置和要求
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。
为完成此实验,您需要:
- 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。
如何开始实验并登录 Google Cloud 控制台
-
点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。左侧是“实验详细信息”窗格,其中包含以下各项:
- “打开 Google Cloud 控制台”按钮
- 剩余时间
- 进行该实验时必须使用的临时凭据
- 帮助您逐步完成本实验所需的其他信息(如果需要)
-
点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。
该实验会启动资源并打开另一个标签页,显示“登录”页面。
提示:将这些标签页安排在不同的窗口中,并排显示。
注意:如果您看见选择账号对话框,请点击使用其他账号。
-
如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。
{{{user_0.username | "<用户名>"}}}
您也可以在“实验详细信息”窗格中找到“用户名”。
-
点击下一步。
-
复制下面的密码,然后将其粘贴到欢迎对话框中。
{{{user_0.password | "<密码>"}}}
您也可以在“实验详细信息”窗格中找到“密码”。
-
点击下一步。
重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。
注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
-
继续在后续页面中点击以完成相应操作:
- 接受条款及条件。
- 由于这是临时账号,请勿添加账号恢复选项或双重验证。
- 请勿注册免费试用。
片刻之后,系统会在此标签页中打开 Google Cloud 控制台。
注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。
激活 Cloud Shell
Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。
-
点击 Google Cloud 控制台顶部的激活 Cloud Shell
。
-
在弹出的窗口中执行以下操作:
- 继续完成 Cloud Shell 信息窗口中的设置。
- 授权 Cloud Shell 使用您的凭据进行 Google Cloud API 调用。
如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 Project_ID 。输出内容中有一行说明了此会话的 Project_ID:
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud
是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。
- (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
- 点击授权。
输出:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (可选)您可以通过此命令列出项目 ID:
gcloud config list project
输出:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注意:如需查看在 Google Cloud 中使用 gcloud
的完整文档,请参阅 gcloud CLI 概览指南。
为项目设置区域
在 Cloud Shell 中,输入以下命令,设置要在本实验中运行项目的区域:
gcloud config set compute/region {{{project_0.default_region | Region}}}
任务 1. 启用 Text-to-Speech API
Cloud Text-to-Speech API 页面会显示详细信息、指标等。
启用 API:
-
在导航菜单 (
) 中,依次点击 API 和服务 > 库。
-
在搜索 API 和服务框中输入文字转语音,然后在搜索结果中点击 Cloud Text-to-Speech API。
-
点击启用以启用 Cloud Text-to-Speech API。
等待几秒钟,以便为项目启用 API。
点击检查我的进度以验证是否完成了以下目标:
启用 Text-to-Speech API
任务 2. 创建虚拟环境
Python 虚拟环境用于将软件包安装与系统隔离开来。
- 安装
virtualenv
环境:
sudo apt-get install -y virtualenv
- 构建虚拟环境:
python3 -m venv venv
- 激活此虚拟环境:
source venv/bin/activate
任务 3. 创建服务账号
使用服务账号对 Text-to-Speech API 调用进行身份验证。
创建服务账号:
- 在 Cloud Shell 中运行以下命令:
gcloud iam service-accounts create tts-qwiklab
- 生成密钥以使用该服务账号:
gcloud iam service-accounts keys create tts-qwiklab.json --iam-account tts-qwiklab@{{{project_0.project_id | Project ID}}}.iam.gserviceaccount.com
- 最后,将
GOOGLE_APPLICATION_CREDENTIALS
环境变量设置为密钥文件的位置:
export GOOGLE_APPLICATION_CREDENTIALS=tts-qwiklab.json
点击检查我的进度以验证是否完成了以下目标:
创建服务账号
任务 4. 获取可用语音列表
Text-to-Speech API 提供了不同的语音和语言,可用于创建音频文件。您可以使用任何可用语音来朗读内容。
注意:Text-to-Speech API 包含多种称为 WaveNet 语音的高级语音,可用于生成听起来更自然的合成语音。这些语音的价格也比其他语音略贵。如需了解详情,请参阅 Cloud Text-to-Speech 价格页面。
- 使用 Text-to-Speech API 创建合成语音时,在 Cloud Shell 中使用以下
curl
命令可列出可用的语音:
curl -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
"https://texttospeech.googleapis.com/v1/voices"
Text-to-Speech API 将返回一个 JSON 格式的结果,与以下内容类似:
{
"voices": [
{
"languageCodes": [
"es-ES"
],
"name": "es-ES-Standard-A",
"ssmlGender": "FEMALE",
"naturalSampleRateHertz": 24000
},
{
"languageCodes": [
"ja-JP"
],
"name": "ja-JP-Standard-A",
"ssmlGender": "FEMALE",
"naturalSampleRateHertz": 22050
},
{
"languageCodes": [
"pt-BR"
],
"name": "pt-BR-Standard-A",
"ssmlGender": "FEMALE",
"naturalSampleRateHertz": 24000
},
...
]
}
请注意,在 curl
命令的结果中,每种语音包含四个字段:
-
name
:您提供的用于请求的语音 ID。
-
ssmlGender
:用于朗读文本的语音的性别,如 SSML W3 建议中所定义。
-
naturalSampleRateHertz
:语音的采样率。
-
languageCodes
:与该语音关联的语言代码列表。
另请注意,有些语言有多种语音可供选择。
- 将 API 返回的结果限定为仅包含一种语言代码:
curl -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
"https://texttospeech.googleapis.com/v1/voices?language_code=en"
任务 5. 根据文本创建合成语音
现在,您已经了解了如何获取用于朗读文本的语音名称,接下来该创建合成语音了!
构建请求
使用 Cloud Shell 编辑器在名为 synthesize-text.json
的文本文件中构建对 Text-to-Speech API 的请求。
-
在 Cloud Shell 中,点击打开编辑器,以打开 Cloud Shell 编辑器。
-
在操作栏中,依次点击文件 > 新建文件。
-
在选择文件类型或输入文件名字段中,输入 synthesize-text.json。
-
点击确定。
-
将以下代码添加到 synthesize-text.json
文件中:
{
'input':{
'text':'Cloud Text-to-Speech API allows developers to include
natural-sounding, synthetic human speech as playable audio in
their applications. Text-to-Speech API 会将文本或语音合成标记语言 (SSML) 输入转换为音频数据,例如 MP3 或 LINEAR16(WAV 文件中使用的编码)。},
'voice':{
'languageCode':'en-gb',
'name':'en-GB-Standard-A',
'ssmlGender':'FEMALE'
},
'audioConfig':{
'audioEncoding':'MP3'
}
}
- 依次点击文件 > 保存,以保存文件。
JSON 格式的请求会提供三个对象:
-
input
:提供要转换为合成语音的文本。
-
voice
:一个对象,用于指定合成语音要使用的语音。
-
audioConfig
:指定 Text-to-Speech API 要返回的音频编码。
-
点击打开终端以返回终端。
-
调用 Text-to-Speech API:
curl -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d @synthesize-text.json "https://texttospeech.googleapis.com/v1/text:synthesize" \
> synthesize-text.txt
此调用的输出将保存到名为 synthesize-text.txt
的文件中。
- 点击打开编辑器,然后打开
synthesize-text.txt
文件。请注意,Text-to-Speech API 会以 base64 编码文本的形式提供音频输出,并且会将其分配给 audioContent
字段,如下所示:
{
"audioContent": "//NExAASGoHwABhGudEACdzqFXfRE4EY3AACkD/zX4ADf/6J/[...]"
}
转换回答
为了将回答转换成音频,您需要选择 synthesize-text.txt
中包含的音频数据,并将其解码为音频文件(在本实验中为 MP3 文件)。很多方法都可以实现此目的,本实验提供了一些简单的 Python 代码。
-
在操作栏中,依次点击文件 > 新建文件。
-
在选择文件类型或输入文件名字段中,输入 tts_decode.py,然后按 Enter 键。
-
点击确定。
-
将以下内容输入或复制到 tts_decode.py
中:
import argparse
from base64 import decodebytes
import json
"""
Usage:
python tts_decode.py --input "synthesize-text.txt" \
--output "synthesize-text-audio.mp3"
"""
def decode_tts_output(input_file, output_file):
""" Decode output from Cloud Text-to-Speech.
input_file: the response from Cloud Text-to-Speech
output_file: the name of the audio file to create
"""
with open(input_file) as input:
response = json.load(input)
audio_data = response['audioContent']
with open(output_file, "wb") as new_file:
new_file.write(decodebytes(audio_data.encode('utf-8')))
if __name__ == '__main__':
parser = argparse.ArgumentParser(
description="Decode output from Cloud Text-to-Speech",
formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument('--input',
help='The response from the Text-to-Speech API.',
required=True)
parser.add_argument('--output',
help='The name of the audio file to create',
required=True)
args = parser.parse_args()
decode_tts_output(args.input, args.output)
- 保存
tts_decode.py
。
创建并运行音频文件
如需根据从 Text-to-Speech API 收到的响应创建音频文件,请执行以下操作:
-
点击打开终端以返回 Cloud Shell。
-
创建音频文件 synthesize-text-audio.mp3
:
python tts_decode.py --input "synthesize-text.txt" --output "synthesize-text-audio.mp3"
-
点击打开编辑器以打开 Cloud Shell 编辑器。
-
点击左侧窗格中的 synthesize-text-audio.mp3
以打开该文件。
-
播放音频,收听文件。您会听到合成语音朗读您提供的文本!
任务 6. 根据 SSML 创建合成语音
除了使用文本之外,您还可以使用语音合成标记语言 (SSML) 格式向 Text-to-Speech API 提供输入。SSML 定义了一种用于表示合成语音的 XML 格式。使用 SSML 输入,您可以更精确地控制合成语音输出中的停顿、强调、发音、音调、语速和其他语音品质。
构建请求
首先,在名为 synthesize-ssml.json
的文本文件中构建对 Text-to-Speech API 的请求。
-
在 Cloud Shell 编辑器中,在操作栏中点击文件 > 新建文件。
-
在选择文件类型或输入文件名字段中,输入 synthesize-ssml.json,然后按 Enter 键。
-
点击确定。
-
将以下内容输入或复制到 synthesize-ssml.json
中:
{
'input':{
'ssml':'<speak><s>
<emphasis level="moderate">Cloud Text-to-Speech API</emphasis>
allows developers to include natural-sounding
<break strength="x-weak"/>
synthetic human speech as playable audio in their
applications.</s>
<s>The Text-to-Speech API converts text or
<prosody rate="slow">Speech Synthesis Markup Language</prosody>
<say-as interpret-as=\"characters\">SSML</say-as>
input into audio data
like <say-as interpret-as=\"characters\">MP3</say-as> or
<sub alias="linear sixteen">LINEAR16</sub>
<break strength="weak"/>
(the encoding used in
<sub alias="wave">WAV</sub> files).</s></speak>'
},
'voice':{
'languageCode':'en-gb',
'name':'en-GB-Standard-A',
'ssmlGender':'FEMALE'
},
'audioConfig':{
'audioEncoding':'MP3'
}
}
请注意,这次要发送的 JSON 载荷的 input
对象中包含的内容有所不同:
- 该
input
对象没有 text
字段,但是有 ssml
字段。
-
ssml
字段包含 XML 格式的内容,并以 <speak>
元素作为根元素。
XML 输入文件中的每个元素都会影响合成语音的输出。
具体来说,此示例中的元素具有以下效果:
-
<s>
包含一个句子。
-
<emphasis>
表示要强调所括的字词或词组。
-
<break>
会在语音中插入停顿。
-
<prosody>
可根据 rate
、pitch
或 volume
属性的值,自定义所括文本的音高、语速或音量。
-
<say-as>
提供了更多关于如何解读和朗读所括文本的指示,例如,对于一连串数字,是读作序数,还是读作基数。
-
<sub>
用于指定所括文本的朗读替换值。
注意:您可以查看 SSML 参考,了解 Cloud Text-to-Speech 支持的 SSML 元素的完整列表。
-
点击打开终端以打开 Cloud Shell 终端。
-
调用 Text-to-Speech API,并将输出保存到名为 synthesize-ssml.txt
的文件中:
curl -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d @synthesize-ssml.json "https://texttospeech.googleapis.com/v1/text:synthesize" \
> synthesize-ssml.txt
创建并运行音频文件
同样,您需要先对 Text-to-Speech API 的输出进行解码,然后才能听到音频。
- 点击打开终端。运行以下命令,使用之前创建的
tts_decode.py
实用程序生成名为 synthesize-ssml-audio.mp3
的音频文件:
python tts_decode.py --input "synthesize-ssml.txt" --output "synthesize-ssml-audio.mp3"
-
点击打开编辑器。
-
点击左侧窗格中的 synthesize-ssml-audio.mp3
,然后播放嵌入的音频文件。
请注意,SSML 输出与文本文件输出之间的差异:虽然两个音频文件说的内容相同,但 SSML 输出在朗读时会略有不同,它会为缩写添加停顿和不同的发音。
任务 7. 配置音频输出和设备配置文件
除了 SSML 之外,您还可以为 Text-to-Speech API 创建的合成语音输出提供更多自定义选项。您可以指定其他音频编码、更改音频输出的音调,甚至要求针对特定类型的硬件优化输出。
构建请求
在名为 synthesize-with-settings.json
的文本文件中构建对 Text-to-Speech API 的请求:
-
在操作栏中,依次点击文件 > 新建文件。
-
在选择文件类型或输入文件名字段中,输入 synthesize-with-settings.json,然后按 Enter 键。
-
点击确定。
-
将以下内容输入或复制到 synthesize-with-settings.json
中:
{
'input':{
'text':'The Text-to-Speech API is ideal for any application
that plays audio of human speech to users. It allows you
to convert arbitrary strings, words, and sentences into
the sound of a person speaking the same things.'
},
'voice':{
'languageCode':'en-us',
'name':'en-GB-Standard-A',
'ssmlGender':'FEMALE'
},
'audioConfig':{
'speakingRate': 1.15,
'pitch': -2,
'audioEncoding':'OGG_OPUS',
'effectsProfileId': ['headphone-class-device']
}
}
- 保存文件。
请注意,audioConfig
对象现在包含几个其他字段:
-
speakingRate
字段用于指定朗读者的语速。值为 1.0 表示正常语速,0.5 表示正常语速的一半,2.0 表示正常语速的两倍。
-
pitch
字段用于指定朗读字词时的音调差异。此处的数值表示在朗读这些字词时,音调要降低(负数)或升高(正数)的半音数。
-
audioEncoding
字段指定要用于数据的音频编码。此字段可接受的值为 LINEAR16
、MP3
和 OGG_OPUS
。
-
effectsProfileId
字段用于请求 Text-to-Speech API 针对特定播放设备优化音频输出。该 API 会将预定义的音频配置文件应用于输出,从而提升在指定设备类别上的音频质量。
注意:音频配置文件功能目前是 Beta 版。请参阅指南,详细了解如何在应用中使用此功能。此处介绍的所有其他设置均已正式发布,可在应用中正常使用。
-
点击打开终端。
-
调用 Text-to-Speech API:
curl -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d @synthesize-with-settings.json "https://texttospeech.googleapis.com/v1beta1/text:synthesize" \
> synthesize-with-settings.txt
此调用的输出将保存到名为 synthesize-with-settings.txt
的文件中。
创建并运行音频文件
- 运行以下命令,根据从 Text-to-Speech API 收到的输出生成一个名为
synthesize-with-settings-audio.mp3
的音频文件:
python tts_decode.py --input "synthesize-with-settings.txt" --output "synthesize-with-settings-audio.ogg"
-
点击打开编辑器以打开 Cloud Shell 编辑器。
-
点击左侧窗格中的 synthesize-with-settings-audio.mp3
以打开该文件,然后播放音频。
-
播放 synthesize-with-settings-audio.mp3
音频文件以及您在本实验中创建的其他音频文件。请注意,该音频的语速比其他音频文件的语速更快,但音调更低。
恭喜!
您学习了如何使用 Cloud Text-to-Speech API 创建合成语音。您已经了解了以下内容:
- 列出可通过 Text-to-Speech API 使用的所有合成语音
- 创建 Text-to-Speech API 请求,并使用 curl 命令调用该 API,同时提供文本和 SSML
- 配置音频输出设置,包括指定播放音频的设备配置文件
后续步骤/了解详情
Google Cloud 培训和认证
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
上次更新手册的时间:2025 年 9 月 5 日
上次测试实验的时间:2024 年 11 月 4 日
版权所有 2025 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。