接口: Phoneme的放出no-ref-no-vae/mix-phoneme版本的, 只要中文声音

1. c++编译并使用.so

g++ demo.cpp CrystalDll.so -o main

export LD_LIBRARY_PATH="./"
./main

2. 对接CrystalTTS的边界情况和标贝数据的边界情况以及声韵母统一.

CrystalTTS: 

这是个测试,有没有装你好啊汪仔。

zh-e4|sh-iy4|g-e5|@c-e4|sh-iy4|@。iou3|m-ei2|iou3|@zh-uang1|n-i6|h-ao3|a5|@uang1|z-ix1|@。

标贝: 

中文韵律结构标注包含韵律词(#1)、韵律短语(#2)、语调短语(#3)、句末(#4)四个层级的标注。

该公司#1 当时#1 表示#3,将于#1 本周一#2 公布#1 正式#1 消息#4。

gai1 gong1 si1 dang1 shi2 biao3 shi4 jiang1 yu2 ben3 zhou1 yi1 gong1 bu4 zheng4 shi4 xiao1 xi5

后来预处理的是静北师兄的G2P:

所以对比起来, https://blog.csdn.net/brandon2015/article/details/50218777和标贝的实际上不好区分, 而Crystal明显最小单位是韵律短语#2, 而#1的停顿太小, 忽略掉, 去尝试. 

目前是加成#2, 然后中间多些标点, 能够弥补语调短语.

声韵母类别是统一的, 静北师兄的G2P和Crystal是一个库, 但是有些结尾的转换是不同的, 上下文和算法的不同所导致, 都是正确的, 对于合成也没有影响. 但是下一版自己数据的设定需要统一.

3. python调用C++的.so库, 并且修正handle指针的4字节和8字节

https://www.douban.com/note/133696430/

https://bbs.csdn.net/topics/392194401

def __init__(self, dllpath = u'./CrystalDll.so'):
        self._dllpath = dllpath
        print(os.path.abspath(dllpath))
        self._libc = ctypes.cdll.LoadLibrary(self._dllpath)
        print('load ok')
        self._tts = None

    #def initialize(self, textpath = u'CrystalTTS/data/putonghua/text'):
    def initialize(self, textpath = u'../data/putonghua/text'):
        langtag = c_wchar_p(u"zh-cmn")
        dirtext = c_wchar_p(textpath)
        dirvoice= c_wchar_p(u"")
        
        class handle_t(Structure):
            pass
        self._libc.ttsInitialize.restype = POINTER(handle_t)

        self._tts = self._libc.ttsInitialize(langtag, dirtext, dirvoice)

综合起来, 使用如下(注意路径):

# Crasytal TTS./home/ec2-user/Tmp_why_interface_for_Demo_child0.2/tmp_tacotron_why_child0.2/CrystalTTS/demo
sys.path.append('/home/ec2-user/Tmp_why_interface_for_Demo_child0.2/tmp_tacotron_why_child0.2/CrystalTTS/demo')
from CrystalTTS import CrystalTTS

CTOP = CrystalTTS(dllpath = u'/home/ec2-user/Tmp_why_interface_for_Demo_child0.2/tmp_tacotron_why_child0.2/CrystalTTS/demo/CrystalDll.so')
CTOP.initialize(textpath = u'/home/ec2-user/Tmp_why_interface_for_Demo_child0.2/tmp_tacotron_why_child0.2/CrystalTTS/data/putonghua/text')


c2p = settings.CTOP
	
	text = str
	print(text)
	Crystal_file_name = 'child0.2_' +time.strftime('%Y-%m-%d%H-%M-%S_', time.localtime(time.time())) + change_int2str(random.randint(100000, 999999)) + '.txt'
	tag_ans = c2p.textAnalyze(text, Crystal_file_name)
	if tag_ans != 1:
		return HttpResponse('CtystalTTS is wrong, try again~')
	with open(Crystal_file_name, 'r', encoding='utf-8-sig') as f:
		raw_phoneme = f.read().strip()
	print(raw_phoneme)
	phoneme = raw_phoneme.replace('-', '_').replace('|', '_ _').replace('@', '/_2_ _').replace('。', '。_ _').replace('1', '_1').replace('2', '_2').replace('3', '_3').replace('4', '_4').replace('5', '_5').replace('6', '_6')
	

4. 综合搭建

[hujk17@mjrc-server10 Tmp_why_interface_for_DemoAndIterate]$ scp -r CrystalTTS 54.175.104.170@ec2-user:/home/ec2-user/Tmp_why_interface_for_Demo_child0.2/tmp_tacotron_why_child0.2/
ssh: Could not resolve hostname ec2-user: Name or service not known
lost connection

http://54.175.104.170:8000/rango/index/wai4_dao4_ke1_ji4_shi4_yi5_ge4_hen3_bang4_de5_tuan2_dui4_yi5_ge4_hen3_bang4_de5_tuan2_dui4/

标点符号不能出现在url中, 是个问题.如何解决?

韵律边界当做#2, 会有些不舒服,

所以重新训练模型, 使用Crystal前端处理. 查看效果.

Crystal retrain child0.2 效果

1.7w的效果就很好, 只是好像又把标点符号弄没了. 在训练。

解决标点符号:

https://regexcheatsheet.com/

https://docs.djangoproject.com/en/1.9/topics/http/urls/

测试它:

合并实验:

1.7w步的实验还挺好, 为了对接, 直接迁入到测试过的网站中.

Tensorflow 同时加载多个模型,以及与keras模型混用:

https://blog.csdn.net/googler_offer/article/details/91416521

但是现在先不用, 浪费时间, 采取多个端口开django的方法.


但是科研的时候, 仍使用: 训练语料都有标注好的韵律边界信息.

注意utf-8-sig的使用, 测一下第一个文本的发音. UTF-8文件的boom问题. *********以前的实验都有点漏掉这个! 

声调中有6?这是怎么回事?

python的replace太难受了. 只能一连串的用.

直观上, teacherForce的结果更有韵律, 所以思考如何接近, 或者启用那个rate.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章