recommend:
Welcome to join
Mandarin/Chinese Text to Speech based on statistical parameter speech synthesis using merlin toolkit
This is just a demo on the front end of the pronunciation synthesis. It does not provide text regularization and rhythm prediction functions. Use pypinyin to convert text to pinyin, and use stuttering to participle. The accuracy of these two is not as good as the commercial level.
For other voice synthesis projects, the portal end-to-end is a good direction, and the naturalness is better than that of Merlin.
This is only a demo of mandarin frontend which is lack of some parts like "text normalization" and "prosody prediction", and the phone set && Question Set this project use havn't fully tested yet.
A rough documentation: A draft documentation written in Mandarin
There is no open-source mandarin speech synthesis dataset on the internet, this proj used thchs30 dataset to demostrate speech synthesis
UPDATE
open-source mandarin speech synthesis data from data-banker company, open source Chinese speech synthesis data, thanks to Biaobei Company
【Data download】 https://weixinxcxdb.oss-cn-beijing.aliyuncs.com/gwYinPinKu/BZNSYP.rar 【Data description】 http://www.data-baker.com/open_source.html
Listen to https://jackiexiao.github.io/MTTS/
Python: python3.6
System: linux(tested on ubuntu16.04)
pip install jieba pypinyin
sudo apt-get install libatlas3-base
Run bash tools/install_mtts.sh
Or download file by yourself
Run Demo
bash run_demo.sh
python src/mtts.py txtfile wav_directory_path output_directory_path (Absolute path or relative path) Then you will get HTS label, if you have your own acoustic model trained by monthreal-forced-aligner, add -a your_acoustic_model.zip , otherwise, this project use thchs30.zip acoustic model as defaulttxtfile example
A_01 这是一段文本
A_02 这是第二段文本
wav_directory example (Sampleing Rate should larger than 16khz)
A_01.wav
A_02.wav
python src/mandarin_frontend.py txtfile output_directory_path from mandarin_frontend import txt2label
result = txt2label('向香港特别行政区同胞澳门和台湾同胞海外侨胞')
[print(line) for line in result]
# with prosody mark and alignment file (sfs file)
# result = txt2label('向#1香港#2特别#1行政区#1同胞#4澳门#2和#1台湾#1同胞#4海外#1侨胞',
sfsfile='example_file/example.sfs')
see source code for more information, but pay attention to the alignment file(sfs file), the format is endtime phone_type not start_time, phone_type (which is different from speech ocean's data)
This project use Montreal-Forced-Aligner to do forced alignment, if you want to get a better alignment, use your data to train a alignment-model, see mfa: algin-using-only-the-dataset
misc/thchs30.zip , the dictionary we use mandarin_mtts.lexicon. If you use larger dataset than thchs30, you may get better alignment.You can generate HTS Label without prosody mark. we assume that word segment is smaller than prosodic word(which is adjusted in code)
"#0","#1", "#2","#3" and "#4" are the prosody labeling symbols.