-
Notifications
You must be signed in to change notification settings - Fork 4.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
支持自定义读音(多音字),非常灵活 #1728
base: main
Are you sure you want to change the base?
支持自定义读音(多音字),非常灵活 #1728
Conversation
你好,我想问下这个指定多音字读音的要怎么使用,我使用了最新代码,推理了一下,“这个字的读音是角(jue2)色,而不是角(jiao3)色”发现并没有生效 |
参考pr的文件改动修改代码内容,另外我这个是使用api.py进行推理的 |
代码已经改动了。同没生效,jue、jiao逐个字母读,2、3读汉字 |
大佬,你解决了吗? |
现在的版本会把(jue2)视为英文切割出来,导致custom_pinyin函数失效。
以及
这样代码无法处理中英文混合情况,但是可以处理多音字 |
两者共存不了,有点头疼 |
|
进入函数就加 |
还不行就直接看我仓库里面的提交记录,我fork仓库改的代码 |
可以了,谢谢大佬!但这个好像不是所有的都可以改正过来,例如:单(dan1)身,如果我写成单(shan4)身,最后的语音还是单(dan1)身,这个应该是底模的问题吧 你知道这个项目的停顿怎么加吗?就算自定义在某个地方添加停顿,例如:测试[1秒]停顿 |
作者说加多个句号可以停顿,但是有人说不行,我建议是在要停顿的地方将文本切成两半,中间添加零点几秒的空白音频zero_wav = np.zeros(int(hps.data.sampling_rate * 0.3), dtype=np.float16 if is_half == True else np.float32) |
没有特殊标记去分,在文本处理的时候“[1秒]”就直接变成了“1秒”,在里面没办法二次分割。我最开始也是像你那样想的,但是代码上没有实现出来。而且源码中本身分段就会停顿0.3,切分后就会多一个0.6出来,这样就很不好算值了 |
自己加个特殊标记然后改代码解析去解析呗 |
api_v2已支持多音字 |
和你的写法不一样吗?他改了些什么 |
有两个get_phones_and_bert函数,api.py和api_v2.py分别用了一个,之前只改了api.py的 |
支持使用在中文文本后通过英文括号包起来的TONE3格式的拼音
例如:这个字的读音是角(jue2)色,而不是角(jiao3)色
实现逻辑:
1、添加了一个处理自定义拼音的函数custom_pinyin,返回去除拼音后的中文文本和拼音列表
2、在_g2p函数中使用custom_pinyin函数,并使用获取到的自定义拼音替换g2pw模型推理出的拼音
3、去除拿词与拼音映射缓存的逻辑