原项目只支持纯中文或纯英文发音,故在此将其模型混搭使用,可以处理中英混合文本,但由于两个模型音色不同,故总体音色有点不协调,而且英文模型对部分单字母发音错误。
模型文件在 https://github.com/jark006/SummerTTS/releases 下载,也可以到原作者百度网盘下载: https://pan.baidu.com/s/1rYhtznOYQH7m8g-xZ_2VVQ?pwd=2d5h 提取码: 2d5h
使用 VisualStudio 2022
打开 SummerTTS_VS.sln
编译即可,生成可执行文件位于 ./x64/Release/SummerTTS_VS.exe
# 命令行执行
.\SummerTTS_VS.exe textPath CN_modelPath EN_modelPath outputPath
# 例如
.\SummerTTS_VS.exe .\test.txt D:\SummerTTSModels\single_speaker_fast.bin D:\SummerTTSModels\single_speaker_english_fast.bin out.wav
本工程适用于Windows / VisualStudio 2022
。另有仓库适用于 Linux, Win(mingw64/ucrt64)
链接:https://github.com/jark006/SummerTTS
将本项目的代码克隆到本地,最好是Ubuntu Linux 环境
从以下的百度网盘地址下载模型,放入本项目的model目录中: 链接: https://pan.baidu.com/s/1rYhtznOYQH7m8g-xZ_2VVQ?pwd=2d5h 提取码: 2d5h
模型文件放入后,models目录结构如下:
models/
├── multi_speakers.bin
├── single_speaker_mid.bin
├── single_speaker_english.bin
├── single_speaker_english_fast.bin
└── single_speaker_fast.bin
进入Build 目录,执行以下命令:
cmake ..
make
编译完成后,会在Build 目录中生成 tts_test 执行程序
运行下列命令,测试中文语音合成(TTS):
./tts_test ../test.txt ../models/single_speaker_fast.bin out.wav
运行下列命令,测试英文语音合成(TTS):
./tts_test ../test_eng.txt ../models/single_speaker_english.bin out_eng.wav
该命令行中:
第一个参数为是文本文件的路径,该文件包含需要被合成语音的文本。
第二个参数是前面提到的模型的路径,文件名开头的single 和 multi 表示模型包含了单个说话人还是多个说话人。推荐单说话人模型:single_speaker_fast.bin, 合成的速度较快,合成的音质也还行。
第三个参数是合成的音频文件,程序运行完之后生成该文件,可以用播放器打开。
以上的测试程序实现在 test/main.cpp 中,具体合成的接口定义在 include/SynthesizerTrn.h, 如下:
int16_t * infer(const string & line, int32_t sid, float lengthScale, int32_t & dataLen)
该接口的:
第一个参数是待合成的语音的字符串。
第二个参数指定说话人的id 用于合成语音,该参数对多说话人模型有效,对单说话人模型,固定为0。说话人的个数可由接口 int32_t getSpeakerNum() 返回,有效id 为 0 到 该接口返回的说话人数量减1。
第三个参数 lengthScale 表示合成语音的语速,其值越大表示语速越慢。
待合成的文本中可以包含阿拉伯数字和标点,但因为本项目的 文本正则化(TN) 模块还很粗糙,对于英文字符,会直接忽略。也因为文本正则化(TN) 模块还很粗糙,对不同语境下的多音字发音有时候会不准确。
本项目在源代码和算法方面使用了下列方案,在此表示感谢, 若可能引发任何法律问题,请及时联系我协调解决