全網(wǎng)最全!語(yǔ)音合成軟件——MoeSS 完整教程專(zhuān)欄

用戶(hù)協(xié)議
使用該項(xiàng)目代表你同意如下幾點(diǎn):
1、你愿意自行承擔(dān)由于使用該項(xiàng)目而造成的一切后果。
2、你承諾不會(huì)出售該程序以及其附屬模型,若由于出售而造成的一切后果由你自己承擔(dān)。
3、你不會(huì)使用之從事違法活動(dòng),若從事違法活動(dòng),造成的一切后果由你自己承擔(dān)。
4、禁止用于任何商業(yè)游戲、低創(chuàng)游戲以及Galgame制作,不反對(duì)無(wú)償?shù)木酚螒蛑谱饕约癕od制作。
5、禁止使用該項(xiàng)目及該項(xiàng)目衍生物以及發(fā)布模型等制作各種電子垃圾(比方說(shuō)AIGalgame,AI游戲制作等)
6、引用該項(xiàng)目請(qǐng)注明該項(xiàng)目倉(cāng)庫(kù)。該項(xiàng)目暫時(shí)無(wú)法編譯(由于使用到的界面庫(kù)未開(kāi)源)
使用本項(xiàng)目進(jìn)行二創(chuàng)時(shí)請(qǐng)標(biāo)注本項(xiàng)目倉(cāng)庫(kù)地址 (https://github.com/NaruseMioShirakana/MoeSS) 或作者bilibili空間地址:(https://space.bilibili.com/108592413)

Q&A
Q:該項(xiàng)目以后會(huì)收費(fèi)嗎?
A:該項(xiàng)目為永久免費(fèi)、暫時(shí)閉源的項(xiàng)目,如果在其他地方存在本軟件的收費(fèi)版本,請(qǐng)立即舉報(bào)且不要購(gòu)買(mǎi),本軟件永久免費(fèi)。
如果想用瘋狂星期四塞滿(mǎn)白葉,可以前往愛(ài)發(fā)癲 https://afdian.net/a/NaruseMioShirakana
Q:是否提供有償模型代訓(xùn)練?
A:原則上不提供,訓(xùn)練TTS模型比較簡(jiǎn)單,沒(méi)必要花冤枉錢(qián),按照網(wǎng)上教程一步一步走就可以了。提供免費(fèi)的Onnx轉(zhuǎn)換。
Q:電子垃圾評(píng)判標(biāo)準(zhǔn)是什么?
A:1、原創(chuàng)度。自己的東西在整個(gè)項(xiàng)目中的比例(對(duì)于AI來(lái)說(shuō),使用完全由你獨(dú)立訓(xùn)練模型的創(chuàng)作屬于你自己;使用他人模型的創(chuàng)作屬于別人)。涵蓋的方面包括但不限于程序、美工、音頻、策劃等等。舉個(gè)例子,套用Unity等引擎模板換皮屬于電子垃圾。
2、開(kāi)發(fā)者態(tài)度。作者開(kāi)發(fā)的態(tài)度是不是撈一波流量和錢(qián)走人或單純虛榮。比方說(shuō)打了無(wú)數(shù)的tag,像什么“國(guó)產(chǎn)”“首個(gè)”“最強(qiáng)”“自制”這種引流宣傳,結(jié)果是非常爛或是平庸的東西,且作者明顯沒(méi)有好好制作該項(xiàng)目的想法,屬于電子垃圾。
3、反對(duì)一切使用未授權(quán)的數(shù)據(jù)集訓(xùn)練出來(lái)的AI模型商用的行為。
Q:技術(shù)支持?
A:如果能夠確定你做的不是電子垃圾,我會(huì)提供一些力所能及的技術(shù)支持。

Moe Speech Synthesis
一個(gè)基于各種開(kāi)源TTS、VC以及SVS項(xiàng)目的完全C++Speech Synthesis UI軟件
支持的項(xiàng)目的倉(cāng)庫(kù):
????????DeepLearningExamples (https://github.com/NVIDIA/DeepLearningExamples)
????????VITS (https://github.com/jaywalnut310/vits)
????????SoVits (https://github.com/innnky/so-vits-svc/tree/32k)
????????DiffSvc (https://github.com/prophesier/diff-SVC)
????????DiffSinger (https://github.com/openvpi/DiffSinger)
使用的圖像素材來(lái)源于:
????????SummerPockets (http://key.visualarts.gr.jp/summer/)

使用方法
在release中下載軟件壓縮包,解壓之
在上文 [Vocoder & HiddenUnitBert] 倉(cāng)庫(kù)中下載相應(yīng)的前置模型或附加模塊,并放置到相應(yīng)文件夾,前置模型與項(xiàng)目的對(duì)應(yīng)關(guān)系會(huì)在下文提到
將模型放置在Mods文件夾中,在左上方模型選擇模塊中選擇模型,標(biāo)準(zhǔn)模型結(jié)構(gòu)請(qǐng)查閱下文“支持的項(xiàng)目”
在下方輸入框中輸入要轉(zhuǎn)換的文字,點(diǎn)擊“啟用插件”可以執(zhí)行文本Cleaner,換行為批量轉(zhuǎn)換的分句符號(hào)(SoVits/DiffSvc需要輸入音頻路徑,DiffSinger需要輸入ds或json項(xiàng)目文件的路徑)
點(diǎn)擊開(kāi)始合成,即可開(kāi)始合成語(yǔ)音,等待進(jìn)度完成后,可以在右上方播放器預(yù)覽,也可以在右上方直接保存
可以使用命令行啟動(dòng):(僅1.X版本) Shell:& '.\xxx.exe' "ModDir" "InputText." "outputDir" "Symbol" CMD:"xxx.exe" "ModDir" "InputText." "outputDir" "Symbol" 其中ModDir為"模型路徑\\模型名" 如預(yù)置模型的"Mods\\Shiroha\\Shiroha" InputText為需要轉(zhuǎn)換的文字(僅支持空格逗號(hào)句號(hào)以及字母) outputDir為輸出文件名(不是路徑,是文件名,不需要加后綴) Symbol見(jiàn)下文 輸出文件默認(rèn)在tmpDir中

模型制作
本軟件標(biāo)準(zhǔn)化了模型讀取模塊,模型保存在Mods文件夾下的子文件夾中********.json文件用于聲明模型路徑以及其顯示名稱(chēng),需要將模型轉(zhuǎn)換為Onnx,轉(zhuǎn)換的倉(cāng)庫(kù)在我GitHub主頁(yè)P(yáng)in了出來(lái)。
通用參數(shù)(不管是啥模型都必須填的,不填就不識(shí)別):
????????Folder:保存模型的文件夾名
????????Name:模型在UI中的顯示名稱(chēng)
????????Type:模型類(lèi)別
????????Rate:采樣率(必須和你訓(xùn)練時(shí)候的一模一樣,不明白原因建議去學(xué)計(jì)算機(jī)音頻相關(guān)的知識(shí))

Tacotron2:
{ ? ?
"Folder" : "Atri", ? ?
"Name" : "亞托莉-Tacotron2", ? ?
"Type" : "Tacotron2", ? ?
"Rate" : 22050, ? ?
"Symbol" : "_-!'(),.:;? ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", ??
"Cleaner" : "JapaneseCleaner", ? ?
"Hifigan": "hifigan"
}
Symbol:模型的Symbol,不知道Symbol是啥的建議多看幾個(gè)視頻了解了解TTS的基礎(chǔ)知識(shí),這一項(xiàng)在Tacotron2中必須填。
Cleaner:插件名,可以不填,填了就必須要在Cleaner文件夾防止相應(yīng)的CleanerDll,如果Dll不存在或者是Dll內(nèi)部有問(wèn)題,則會(huì)在加載模型時(shí)報(bào)插件錯(cuò)誤
Hifigan:Hifigan模型名,必須填且必須將在前置模型中下載到的hifigan放置到hifigan文件夾

Vits:
{
"Folder" : "SummerPockets",
"Name" : "SummerPocketsReflectionBlue",
"Type" : "Vits",
"Rate" : 22050,
"Symbol" : "_,.!?-~…AEINOQUabdefghijkmnoprstuvwyz???↓↑ ",
"Cleaner" : "JapaneseCleaner",
"Characters" : ["鳴瀬しろは","空門(mén)蒼","鷹原うみ","紬ヴェンダース","神山識(shí)","水織靜久","野村美希","久島鴎","岬鏡子"]
}
Symbol:模型的Symbol,不知道Symbol是啥的建議多看幾個(gè)視頻了解了解TTS的基礎(chǔ)知識(shí),這一項(xiàng)在Vits中必須填。
Cleaner:插件名,可以不填,填了就必須要在Cleaner文件夾防止相應(yīng)的CleanerDll,如果Dll不存在或者是Dll內(nèi)部有問(wèn)題,則會(huì)在加載模型時(shí)報(bào)插件錯(cuò)誤
Characters:如果是多角色模型必須填寫(xiě)為你的角色名稱(chēng)組成的列表,如果是單角色模型可以不填

SoVits:
{
"Folder" : "NyaruTaffySo",
"Name" : "NyaruTaffy-SoVits",
"Type" : "SoVits",
"Rate" : 32000,
"Hop" : 320,
"Cleaner" : "",
"Hubert": "hubert",
"SoVits3": true,
"SoVits4": false,
"Characters" : ["Taffy","Nyaru"]
}
Hop:模型的HopLength,不知道HopLength是啥的建議多看幾個(gè)視頻了解了解音頻的基礎(chǔ)知識(shí),這一項(xiàng)在SoVits中必須填。(數(shù)值必須為你訓(xùn)練時(shí)的數(shù)值,可以在你訓(xùn)練模型時(shí)候的配置文件里看到)
Cleaner:插件名,可以不填,填了就必須要在Cleaner文件夾防止相應(yīng)的CleanerDll,如果Dll不存在或者是Dll內(nèi)部有問(wèn)題,則會(huì)在加載模型時(shí)報(bào)插件錯(cuò)誤
Hubert:Hubert模型名,必須填且必須將在前置模型中下載到的Hubert放置到Hubert文件夾
SoVits3:是否為SoVits3.0的,如果不是SoVits3.0統(tǒng)一False
SoVits4:是否為SoVits4.0的,如果不是SoVits4.0統(tǒng)一False
Characters:如果是多角色模型必須填寫(xiě)為你的角色名稱(chēng)組成的列表,如果是單角色模型可以不填

DiffSVC:
{
"Folder" : "DiffShiroha",
"Name" : "白羽",
"Type" : "DiffSvc",
"Rate" : 44100,
"Hop" : 512,
"MelBins" : 128,
"Cleaner" : "",
"Hifigan": "nsf_hifigan",
"Hubert": "hubert",
"Characters" : [],
"Pndm" : 100,
"V2" : true
}
Hop:模型的HopLength,不知道HopLength是啥的建議多看幾個(gè)視頻了解了解音頻的基礎(chǔ)知識(shí),這一項(xiàng)在SoVits中必須填。(數(shù)值必須為你訓(xùn)練時(shí)的數(shù)值,可以在你訓(xùn)練模型時(shí)候的配置文件里看到)
MelBins:模型的MelBins,不知道MelBins是啥的建議多看幾個(gè)視頻了解了解梅爾基礎(chǔ)知識(shí),這一項(xiàng)在SoVits中必須填。(數(shù)值必須為你訓(xùn)練時(shí)的數(shù)值,可以在你訓(xùn)練模型時(shí)候的配置文件里看到)
Cleaner:插件名,可以不填,填了就必須要在Cleaner文件夾防止相應(yīng)的CleanerDll,如果Dll不存在或者是Dll內(nèi)部有問(wèn)題,則會(huì)在加載模型時(shí)報(bào)插件錯(cuò)誤
Hubert:Hubert模型名,必須填且必須將在前置模型中下載到的Hubert放置到Hubert文件夾
Hifigan:Hifigan模型名,必須填且必須將在前置模型中下載到的nsf_hifigan放置到hifigan文件夾
Characters:如果是多角色模型必須填寫(xiě)為你的角色名稱(chēng)組成的列表,如果是單角色模型可以不填
Pndm:加速倍數(shù),如果是V1模型則必填且必須為導(dǎo)出時(shí)設(shè)置的加速倍率
V2:是否為V2模型,V2模型就是后來(lái)我分4個(gè)模塊導(dǎo)出的那個(gè)

DiffSinger:
{
"Folder" : "utagoe",
"Name" : "utagoe",
"Type" : "DiffSinger",
"Rate" : 44100,
"Hop" : 512,
"Cleaner" : "",
"Hifigan": "singer_nsf_hifigan",
"Characters" : [],
"MelBins" : 128
}
Hop:模型的HopLength,不知道HopLength是啥的建議多看幾個(gè)視頻了解了解音頻的基礎(chǔ)知識(shí),這一項(xiàng)在SoVits中必須填。(數(shù)值必須為你訓(xùn)練時(shí)的數(shù)值,可以在你訓(xùn)練模型時(shí)候的配置文件里看到)
Cleaner:插件名,可以不填,填了就必須要在Cleaner文件夾防止相應(yīng)的CleanerDll,如果Dll不存在或者是Dll內(nèi)部有問(wèn)題,則會(huì)在加載模型時(shí)報(bào)插件錯(cuò)誤
Hifigan:Hifigan模型名,必須填且必須將在前置模型中下載到的singer_nsf_hifigan放置到hifigan文件夾
Characters:如果是多角色模型必須填寫(xiě)為你的角色名稱(chēng)組成的列表,如果是單角色模型可以不填
MelBins:模型的MelBins,不知道MelBins是啥的建議多看幾個(gè)視頻了解了解梅爾基礎(chǔ)知識(shí),這一項(xiàng)在SoVits中必須填。(數(shù)值必須為你訓(xùn)練時(shí)的數(shù)值,可以在你訓(xùn)練模型時(shí)候的配置文件里看到)

支持的項(xiàng)目
${xxx}代表將花括號(hào)內(nèi)變量表示的字符串替換到此處,以下是多個(gè)不同項(xiàng)目需要的模型文件(需要放置在對(duì)應(yīng)的模型文件夾下)。
?Tacotron2: ?${Folder}_decoder_iter.onnx ? ?${Folder}_encoder.onnx ? ?${Folder}_postnet.onnx
?Vits (單角色):? ? ${Folder}_dec.onnx ? ?${Folder}_flow.onnx ? ?${Folder}_enc_p.onnx ? ?${Folder}_dp.onnx
?Vits (多角色):? ? ${Folder}_dec.onnx ? ?${Folder}_emb.onnx ? ?${Folder}_flow.onnx ? ?${Folder}_enc_p.onnx ? ?${Folder}_dp.onnx
?SoVits: ? ?${Folder}_SoVits.onnx
?DiffSvc: ? ?${Folder}_diffSvc.onnx
?DiffSvc: V2 ? ?${Folder}_encoder.onnx ? ?${Folder}_denoise.onnx ? ?${Folder}_pred.onnx ? ?${Folder}_after.onnx
?DiffSinger: OpenVpiVersion ? ?${Folder}_diffSinger.onnx
?DiffSinger: ? ?${Folder}_encoder.onnx ? ?${Folder}_denoise.onnx ? ?${Folder}_pred.onnx ? ?${Folder}_after.onnx

Symbol
例如:_-!'(),.:;? ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
打開(kāi)你訓(xùn)練模型的項(xiàng)目,打開(kāi)text\symbol.py,如圖按照劃線(xiàn)的List順序?qū)⑸厦娴?個(gè)字符串連接即可

Cleaner
Cleaner請(qǐng)放置于根目錄的Cleaners文件夾內(nèi),應(yīng)該是一個(gè)按照要求定義的動(dòng)態(tài)庫(kù)(.dll),dll應(yīng)當(dāng)命名為Cleaner名,Cleaner名即為模型定義Json文件中Cleaner一欄填寫(xiě)的內(nèi)容。所有的插件dll需要定義以下函數(shù),函數(shù)名必須為PluginMain,Dll名必須為插件名(或Cleaner名):
const wchar_t* PluginMain(const wchar_t*);
該接口只要求輸入輸出一致,并不要求功能一致,也就是說(shuō),你可以在改Dll中實(shí)現(xiàn)任何想要的功能,比方說(shuō)ChatGpt,機(jī)器翻譯等等。
以ChatGpt為例,PluginMain函數(shù)傳入了一個(gè)輸入字符串input,將該輸入傳入ChatGpt,再將ChatGpt的輸出傳入PluginMain,最后返回輸出。
wchar_t* PluginMain(wchar_t* input){
? ? wchar_t* tmpOutput = ChatGpt(input);
? ? return Clean(tmpOutput);
}
注意:導(dǎo)出dll時(shí)請(qǐng)使用 extern "C" 關(guān)鍵字來(lái)防止C++語(yǔ)言的破壞性命名。

目錄結(jié)構(gòu)







Onnx導(dǎo)出
Vits:https://github.com/Winter-of-Cirno/MoeGoeONNX 中的to_onnx.py
SoVits:https://github.com/innnky/so-vits-svc/tree/32k 中的onnx_export.py
DiffSvc:https://github.com/prophesier/diff-svc 中的onnx_export.py
FishDiffusion:https://github.com/fishaudio/fish-diffusion 中的tools/onnx/export_moess.py
DiffSinger:https://github.com/NaruseMioShirakana/DiffSingerONNXForMoeSS 中的onnx/export/export_acoustic.py 或?https://github.com/openvpi/DiffSinger 中的?onnx/export/export_acoustic.py
