免责声明:这不是官方的Google产品。
语音构建器是一种开放源文本到语音(TTS)语音构建工具,专注于简单,灵活性和协作。我们的工具允许任何具有基本计算机技能的人进行语音训练实验并聆听由此产生的合成声音。
我们希望该工具通过使实验更快和跨学科的协作更加容易,从而减少创造新声音和加速TTS研究的障碍。我们认为,我们的工具可以帮助改善TTS研究,尤其是对于低资源的语言,在这些语言中,通常需要进行更多的实验来充分利用有限的数据。
出版物-https://ai.google/research/pubs/pub46977
在Google Cloud平台(GCP)上创建一个项目。
如果您还没有帐户,请自己创建一个。
启用帐单并要求您的项目更多配额
安装Docker
访问firebase.com并将项目导入到firebase平台
如果您还没有帐户,请自己创建一个。
通过安装云SDK安装GCLOUD CMD线工具
安装node.js
安装Firebase CMD线工具
启用以下所有GCP服务:
使用此URL一次启用它们。
通常,启用API和GCP将需要几分钟的时间将您带到另一个页面以设置这些凭据。请跳过并关闭页面,因为我们不需要任何新的凭据设置。
[可选]设置自己的自定义数据出口商
如果您尚未完成所有先决条件,请在以下步骤进一步之前进行。
通过以下方式克隆该项目到您当前的目录
git clone https://github.com/google/voice-builder.git && cd voice-builder
如果您尚未通过GCLOUD登录您的帐户,请登录:
gcloud auth login
另外,如果您尚未通过Firebase登录您的帐户,请登录:
firebase login --no-localhost
打开deploy.sh并编辑以下变量:
创建用于语音构建器的GCS存储器来存储每个工作数据
./deploy.sh initial_setup
部署云功能组件
./deploy.sh cloud_functions
部署UI组件
./deploy.sh ui create
部署后,您应该获得一个可以从命令行的结果访问的IP(external_ip)。您可以在浏览器中访问http:// external_ip:3389来访问语音构建器实例。
在此步骤中,您应该拥有所有组件,并且可以在http:// external_ip:3389上访问UI。 VoiceBuilder最初为您提供了两个示例TTS引擎(节日和Merlin),以及来自语言资源回购的公共数据。
您可以通过使用我们提供的节日引擎创建新的声音来测试一切是否正常工作:
数据出口商是您可以添加到系统的另一个附加组件。通常,语音构建器可以在没有数据出口商的情况下工作。没有它,语音构建器只会按原样使用输入文件。
但是,在某些情况下,您需要在将输入文件馈送到TTS算法之前对输入文件进行一些转换。例如:
语音构建器使您可以灵活地添加自己的数据导出器,在运行实际的TTS算法之前,您可以使用该数据出口商来操纵数据。您的自定义数据出口商将获得包含文件位置,选择的TTS算法,调谐参数等的语音规范。您可以使用这些信息来操纵/转换数据。最后,您的数据出口商应将所有必要的文件放入指定的工作文件夹中,以触发实际的TTS算法运行。
首先,您需要让数据出口商访问GCS存储桶。
打开 /deploy.sh并编辑以下变量:
运行命令提供data_exporter_service_account ACL访问GCS桶
./deploy.sh acl_for_data_exporter
其次,您需要在config.js中设置数据出口商的URL,以便语音构建器知道将语音规范信息发送到哪里。
open /config.js并将data_exporter_api添加到配置中,如下所示:
DATA_EXPORTER_API: {
BASE_URL: '<DATA_EXPORTER_URL>',
API_KEY: '<DATA_EXPORTER_API_KEY>',
}
如果base_url是您的数据出口商URL,而API_KEY是数据出口商的API键。
Redeploy语音构建器UI实例现在具有新的配置,并且知道如何发送语音规范信息。到您的数据出口商
./deploy.sh ui update
尝试创建一份新工作!语音构建器现在应使用创建作业的语音规范向您的data_exporter_url发送请求。
VoiceBuildingSpecification是语音规范的JSON定义。当用户从UI触发语音构建请求时,语音构建器后端创建了此规范。数据出口商(通过其API传递给数据出口商)可以使用它来转换文件和TTS引擎的培训参数。
{
"id": int,
"voice_name": string,
"created_by": string,
"job_folder": string,
"lexicon_path": object(Path),
"phonology_path": object(Path),
"wavs_path": object(Path),
"wavs_info_path": object(Path),
"sample_rate": int,
"tts_engine": string,
"engine_params": [object(EngineParam)],
}
| 字段 | 描述 |
|---|---|
| ID | 独特的全球工作ID。 |
| Voice_name | 用户友好的语音名称(例如多扬声器语音)。 |
| 创建了_BY | 创建声音的用户的名称。 |
| Job_folder | GCS工作文件夹的路径。这是与作业相关的所有数据都是存储的地方。 |
| Lexicon_Path | 通往词典的路径。 |
| Phonology_path | 通往语音的路径。 |
| wavs_path | 通往WAV的路径(应该是焦油文件)。 |
| wavs_info_path | 包含WAV名称和提示的映射的文件的路径。 |
| sample_rate | 应构建声音的样本率。 |
| tts_engine | TTS引擎的类型训练声音。该值的值是从选定的TTS引擎引擎。 |
| Engine_params | TTS引擎的其他参数。 |
EngineParam包含TTS后端发动机的参数。
{
"key": string,
"value": string
}
| 字段 | 描述 |
|---|---|
| 钥匙 | 参数键。 |
| 价值 | 参数键的值。 |
Path包含有关文件路径的信息。
{
"path": string
"file_type": string
}
| 字段 | 描述 |
|---|---|
| 小路 | 文件的路径。 |
| file_type | 文件的格式。 |
例如,如果您设置了数据出口商,则使用我们预定义的节日引擎创建语音时,语音构建器会将请求主体类似于以下的请求主体。然后,您的数据出口商必须预处理数据并将其放置在job_folder位置(在此示例中为gs://your-voice-builder-jobs/1 )。将所有必要的文件放在文件夹中后,实际的语音构建过程将根据预期自动开始。
{
"id": 1,
"voice_name": "my_voice",
"createdBy": "[email protected]",
“job_folder”: "gs://your-voice-builder-jobs/1";
"engine_params": [
{
"key": "param_for_festival1",
"value": "50"
},
{
"key": "param_for_festival2",
"value": "30"
}
],
"sample_rate": "22050",
"tts_engine": "festival",
"lexicon_path": {
"path": "gs://voice-builder-public-data/examples/sinhala/lexicon.scm",
"file_type": "SCM"
},
"phonology_path": {
"path": "gs://voice-builder-public-data/examples/sinhala/phonology.json",
"file_type": "JSON_EXTERNAL_PHONOLOGY"
},
"wavs_path": {
"path": "gs://voice-builder-public-data/examples/sinhala/wavs.tar.gz",
"file_type": "TAR"
},
"wavs_info_path": {
"path": "gs://voice-builder-public-data/examples/sinhala/txt.done.data",
"file_type": "LINE_INDEX"
},
}