網友評分:
5分
MoeSS是一款功能強大的人物模型軟件。重寫了Tacotron2、Vits、SoftVits以及DiffSvc的推理函數及網絡結構,并將處理后的網絡轉換為Onnx并在C++上編寫了推理軟件,使得使用上述項目不再需要附加一系列臃腫的依賴庫,同時Cpu的推理速度也顯著提升。
模型導入:
// 本軟件標準化了模型讀取模塊,模型保存在Mods文件夾下的子文件夾中********.json文件用于聲明模型路徑以及其顯示名稱,以我的模型為例(SummerPockets.json)
{
"Folder" : "SummerPockets",
"Name" : "SummerPocketsReflectionBlue",
"Type" : "VITS_VCTK",
"Symbol" : "_,.!?-~…AEINOQUabdefghijkmnoprstuvwyz???↓↑" ,
"Cleaner" : "LowerCharacters",
"Rate" : 22050,
"Hop" : 0,
"Hifigan": "hifigan",
"SoVits3": false,
"Hubert": "hubert",
"Pndm" : 100,
"MelBins" : 128,
"Characters" : ["鳴瀬しろは","空門蒼","鷹原うみ","紬ヴェンダース","神山識","水織靜久","野村美希","久島鴎","岬鏡子"]
}
// 其中必填項目為Folder,Name,Type,Rate
// TTS(Tacotron2,Vits,串聯用模型)需要填寫Symbol,Cleaner
// 無自帶聲碼器的項目(Tacotron2,DiffSvc)需要填寫Hifigan(hifigan模型應該放置于hifigan,該項設置為模型文件名(不帶后綴))
// VC(Sovits,DiffSvc)需要填寫Hop和Hubert(Hubert放到Hubert文件夾下)
// SoVits3為Sovits3.0的標記,如果該模型基于SoVits3.0訓練則需要填寫為true
// DiffSvc需要填寫Pndm(就是你導出模型時的加速倍率),MelBins(在你的模型config.yaml里面的前幾項有一個帶mel_bins的一項)
// 含多角色embidding的(Vits多人模型,Sovits)需要填寫Characters
支持的model項目
// ${xxx}是什么意思大家應該都知道吧,總之以下是多個不同項目需要的模型文件(需要放置在對應的模型文件夾下)。
// Tacotron2:
${Folder}_decoder_iter.onnx
${Folder}_encoder.onnx
${Folder}_postnet.onnx
// VITS_LJS: 單角色VITS
${Folder}_dec.onnx
${Folder}_flow.onnx
${Folder}_enc_p.onnx
${Folder}_dp.onnx
// VITS_VCTK: 多角色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
Symbol的設置
例如:_-!'(),.:;? ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
打開你訓練模型的項目,打開text\symbol.py,如圖按照劃線的List順序將上面的4個字符串連接即可
image
Cleaner的設置
/*
Cleaner請放置于根目錄的Cleaners文件夾內,應該是一個按照要求定義的動態庫(.dll),dll應當命名為Cleaner名,Cleaner名即為模型定義Json文件中Cleaner一欄填寫的內容。
所有的插件dll需要定義以下函數,函數名必須為PluginMain,Dll名必須為插件名(或Cleaner名):
*/
const wchar_t* PluginMain(const wchar_t*);
// 該接口只要求輸入輸出一致,并不要求功能一致,也就是說,你可以在改Dll中實現任何想要的功能,比方說AI機器人,機器翻譯等等。
// 以AI機器人為例,PluginMain函數傳入了一個輸入字符串input,將該輸入傳入AI機器人,再將AI機器人的輸出傳入PluginMain,最后返回輸出。
wchar_t* PluginMain(wchar_t* input){
wchar_t* tmpOutput = AI機器人(input);
return Clean(tmpOutput);
}
// 注意:導出dll時請使用 extern "C" 關鍵字來防止C++語言的破壞性命名。
1、打開MoeSS.exe
2、在左上方Mods模塊中選擇模型
3、在下方輸入框中輸入要轉換的文字,點擊“清理”可以執行文本Cleaner,換行為批量轉換的分句符號。(SoVits需要輸入音頻路徑)
4、點擊開始合成,即可開始合成語音,等待進度完成后,可以在右上方播放器預覽,也可以在右上方直接保存。
5、可以使用命令行啟動:(僅1.X版本)
Shell:& '.\xxx.exe' "ModDir" "InputText." "outputDir" "Symbol"
CMD:"xxx.exe" "ModDir" "InputText." "outputDir" "Symbol"
其中ModDir為"模型路徑\\模型名" 如預置模型的"Mods\\Shiroha\\Shiroha"
InputText為需要轉換的文字(僅支持空格逗號句號以及字母)
outputDir為輸出文件名(不是路徑,是文件名,不需要加后綴)
Symbol見下文
輸出文件默認在tmpDir中