Use-v4v3v2lib-on-v5v6
来自【VOCAKEY.WIKI】VOCAKEY愿你唱出心中的歌
更多操作
VOCALOID5/6不识别V4/3/2声库的解决方案
VocaReg
来源:https://www.reddit.com/r/VocaTorrent/comments/1i9ygzg
作者:Kartoffelkeks87
由于直接分享文件的链接可能频繁失效,这里给出使用源代码自行编译的教程。别担心,这并不复杂。
1.准备工作
1.1 获取源代码
- VocaReg 34: https://pastebin.com/kmH3iLGy——让V5和V6编辑器读取到V3声库,V3版本的V2声库和V4的声库。一般来说,您应该选择这个。
- VocaReg Legacy 2: https://pastebin.com/GPgn8i5n——让V5编辑器读取到V2声库(纯V2)
- VocaReg Legacy 3: https://pastebin.com/x61rappB——让V5编辑器读取到V3版本的V2声库
您可以选择访问以上链接或复制此处代码
以下为源代码(过长 为保证阅读 已经折叠)
VocaReg 34
;
; VocaReg 34.au3
; Version 1.1
; 25.01.2025
; Copyright (c) 2025, Kartoffelkeks87
;
; This file is distributed under the Creative Commons 4.0 CC BY-NC-SA
; https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode
;
#RequireAdmin
#include <MsgBoxConstants.au3>
Global $sScriptTitle = "VocaReg"
Global $sKeys[4][3]
$sKeys[0][0] = "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\VOCALOID3\DATABASE\VOICE2"
$sKeys[0][1] = "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\POCALOID3\DATABASE\VOICE2"
$sKeys[0][2] = "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\VCLDASGN3\DATABASE\VOICE2"
$sKeys[1][0] = "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\VOCALOID3\DATABASE\VOICE3"
$sKeys[1][1] = "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\POCALOID3\DATABASE\VOICE3"
$sKeys[1][2] = "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\VCLDASGN3\DATABASE\VOICE3"
$sKeys[2][0] = "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\VOCALOID4\DATABASE"
$sKeys[2][1] = "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\POCALOID4\DATABASE"
$sKeys[2][2] = "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\VCLDFREE4\DATABASE"
$sKeys[3][0] = "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\VOCALOID4\DATABASE41"
$sKeys[3][1] = "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\POCALOID4\DATABASE41"
$sKeys[3][2] = "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\VCLDFREE4\DATABASE41"
Global $aRegValueType[12] = ["REG_NONE", "REG_SZ", "REG_EXPAND_SZ", "REG_BINARY", _
"REG_DWORD", "REG_DWORD", "REG_LINK", _
"REG_MULTI_SZ", "REG_RESOURCE_LIST", "REG_FULL_RESOURCE_DESCRIPTOR", _
"REG_RESOURCE_REQUIREMENTS_LIST", "REG_QWORD"]
Func ProcessKeys($sSource, $sDest)
For $i = 1 To 256
Local $sKey = RegEnumKey($sSource, $i)
If @error then ExitLoop
ConsoleWrite($sSource & '\' & $sKey & @CRLF)
CopyKey($sSource & '\' & $sKey, $sDest & '\' & $sKey)
Next
EndFunc
Func CopyKey($sSourceKey, $sDestKey)
Local $sName = RegRead($sSourceKey, "NAME")
If @error Then return
Local $sPath = RegRead($sSourceKey, "PATH")
If @error Then return
Local $iInstalled = RegRead($sSourceKey, "INSTALLED")
If @error Then return
If $iInstalled <> 1 Then return
Local $sTime = RegRead($sSourceKey, "TIME")
If @error Then $sTime = "BHMN74F9ED86FKAB"
Local $sDRP = RegRead($sSourceKey, "DRP")
If @error Then $sDRP = "0B0032"
Local $sKey = RegRead($sSourceKey & "\KEYS", "default")
If @error Then $sKey = "c845cfd4b8a90614d5b0f09eba7144d1"
RegWrite($sDestKey, "NAME", "REG_SZ", $sName)
RegWrite($sDestKey, "PATH", "REG_SZ", $sPath)
RegWrite($sDestKey, "INSTALLED", "REG_DWORD", 1)
RegWrite($sDestKey, "TIME", "REG_SZ", $sTime)
RegWrite($sDestKey, "DRP", "REG_SZ", $sDRP)
RegWrite($sDestKey & "\KEYS", "default", "REG_SZ", $sKey)
CloneKeys($sSourceKey & "\Presets", $sDestKey & "\Presets")
EndFunc
Func CloneKeys($sSource, $sDest)
For $i = 1 To 256
Local $sValue = RegEnumVal($sSource, $i)
If @error then ExitLoop
Local $iType = @extended
Local $sData = RegRead($sSource, $sValue)
;ConsoleWrite($aRegValueType[$iType] & ' - ' & $sValue & ': ' & $sData & @CRLF)
RegWrite($sDest, $sValue, $aRegValueType[$iType], $sData)
If @error Then MsgBox($MB_OK + $MB_ICONERROR, $sScriptTitle, "Error writing registry.")
Next
For $i = 1 To 256
Local $sKey = RegEnumKey($sSource, $i)
If @error then ExitLoop
;ConsoleWrite($sSource & '\' & $sKey & @CRLF)
CloneKeys($sSource & '\' & $sKey, $sDest & '\' & $sKey)
Next
EndFunc
If MsgBox($MB_YESNO, $sScriptTitle, "Register all Vocaloid 3/4 FE voices for Vocaloid 5/6?") = $IDYES Then
For $iKey = 0 To UBound($sKeys)-1
For $iSubKey = 1 To UBound($sKeys,2)-1
ProcessKeys($sKeys[$iKey][$iSubKey], $sKeys[$iKey][0])
Next
Next
ConsoleWrite(@CRLF & $sScriptTitle & " by Kartoffelkeks87")
MsgBox(0, $sScriptTitle, "Finished!" & @CRLF & @CRLF & $sScriptTitle & " by Kartoffelkeks87")
Else
ConsoleWrite("Abort by user.")
EndIf
VocaReg Legacy 2
;
; VocaReg Legacy 2.au3
; Version 1.0
; 27.05.2021
; Copyright (c) 2021, Kartoffelkeks87
;
; This file is distributed under the Creative Commons 4.0 CC BY-NC-SA
; https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode
;
#RequireAdmin
#include <Array.au3>
#include <MsgBoxConstants.au3>
Global $sScriptTitle = "VocaReg Legacy 2"
Global $sSrcKeys2[3]
$sSrcKeys2[0] = "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\VOCALOID2\DATABASE\VOICE\"
$sSrcKeys2[1] = "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\POCALOID2\DATABASE\VOICE\"
$sSrcKeys2[2] = "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\FOCALOID2\DATABASE\VOICE\"
Global $sDestKey = "HKEY_LOCAL_MACHINE64\SOFTWARE\VOCALOID5\Voice\Components\"
Global $aList[0][6]
Global $sList
For $iKey = 0 To UBound($sSrcKeys2)-1
For $i = 1 To 256
Local $sKey = RegEnumKey($sSrcKeys2[$iKey], $i)
If @error Then ExitLoop
Local $sPath = RegRead($sSrcKeys2[$iKey] & $sKey, "INSTALLDIR")
If @error Then ContinueLoop
Local $sName = RegRead($sSrcKeys2[$iKey] & $sKey, "NAME")
If Not @error Then
Local $aName = StringRegExp($sName, "(?i)\((.*?)\)", $STR_REGEXPARRAYGLOBALMATCH, 1)
If Not @error Then
$sName = $aName[0]
If UBound($aName) > 1 Then $sName = $sName & " (" & $aName[1] & ")"
EndIf
Else
$sName = $sPath
If StringRight($sName, 1) = '\' Then $sName = StringTrimRight($sName, 1)
$aName = StringSplit($sName, "\")
$sName = $aName[UBound($aName)-1]
$sName = StringReplace($sName, "\", " ")
EndIf
$sName = StringReplace($sName, "_", " ") & " (v2)"
Local $sTime = RegRead($sSrcKeys2[$iKey] & $sKey, "TIME")
If @error Then $sTime = "BKLHK5E5TNTKW5D6"
Local $sDRP = RegRead($sSrcKeys2[$iKey] & $sKey, "DRP")
If @error Then $sDRP = "060011"
Local $sReg = RegRead($sSrcKeys2[$iKey] & $sKey & "\KEYS", "default")
If @error Then $sReg = "65a9e9e2d3076f4d0839f883ad4f20f8"
If _ArraySearch($aList, $sKey, 0, 0, 0, 0, 1, 0) = -1 Then
_ArrayAdd($aList, $sKey, 0)
$aList[UBound($aList)-1][1] = $sName
$aList[UBound($aList)-1][2] = $sPath
$aList[UBound($aList)-1][3] = $sTime
$aList[UBound($aList)-1][4] = $sDRP
$aList[UBound($aList)-1][5] = $sReg
$sList = $sList & $sName & @CRLF
ConsoleWrite($sKey & " " & $sName & " found." & @CRLF)
Else
ConsoleWrite($sKey & " " & $sName & " already in list." & @CRLF)
EndIf
Next
Next
If MsgBox($MB_YESNO, $sScriptTitle, UBound($aList) & " Vocaloid2 voices found:" & @CRLF & @CRLF & $sList & @CRLF & @CRLF & "Register all for Vocaloid5?") = $IDYES Then
For $i = 0 To UBound($aList)-1
Local $sID = $aList[$i][0]
Local $sName = $aList[$i][1]
Local $sPath = $aList[$i][2]
Local $sTime = $aList[$i][3]
Local $sDRP = $aList[$i][4]
Local $sReg = $aList[$i][5]
RegWrite($sDestKey & $sID, "Name", "REG_SZ", $sName)
If @error Then
If @error Then MsgBox($MB_OK + $MB_ICONERROR, $sScriptTitle, "Error writing registry.")
EndIf
RegWrite($sDestKey & $sID, "BankName", "REG_SZ", $sName)
RegWrite($sDestKey & $sID, "Path", "REG_SZ", $sPath)
RegWrite($sDestKey & $sID, "Date", "REG_SZ", $sTime)
RegWrite($sDestKey & $sID, "DRP", "REG_SZ", $sDRP)
RegWrite($sDestKey & $sID, "Key", "REG_SZ", $sReg)
RegWrite($sDestKey & $sID & "\Version", "Major", "REG_DWORD", 5)
RegWrite($sDestKey & $sID & "\Version", "Minor", "REG_DWORD", 0)
RegWrite($sDestKey & $sID & "\Version", "Revision", "REG_DWORD", 1)
ConsoleWrite(@error & '>')
Next
ConsoleWrite(@CRLF & $sScriptTitle & " by Kartoffelkeks87")
MsgBox(0, $sScriptTitle, "Finished!" & @CRLF & @CRLF & $sScriptTitle & " by Kartoffelkeks87")
Else
ConsoleWrite("Abort by user.")
EndIf
VocaReg Legacy 3
;
; VocaReg Legacy 3.au3
; Version 1.0
; 27.05.2021
; Copyright (c) 2021, Kartoffelkeks87
;
; This file is distributed under the Creative Commons 4.0 CC BY-NC-SA
; https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode
;
#RequireAdmin
#include <Array.au3>
#include <MsgBoxConstants.au3>
Global $sScriptTitle = "VocaReg Legacy 3"
Global $sSrcKeys3[3]
$sSrcKeys3[0] = "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\VOCALOID3\DATABASE\VOICE2\"
$sSrcKeys3[1] = "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\POCALOID3\DATABASE\VOICE2\"
$sSrcKeys3[2] = "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\VCLDASGN3\DATABASE\VOICE2\"
Global $sDestKey = "HKEY_LOCAL_MACHINE64\SOFTWARE\VOCALOID5\Voice\Components\"
Global $aList[0][6]
Global $sList
For $iKey = 0 To UBound($sSrcKeys3)-1
For $i = 1 To 256
Local $sKey = RegEnumKey($sSrcKeys3[$iKey], $i)
If @error Then ExitLoop
Local $sPath = RegRead($sSrcKeys3[$iKey] & $sKey, "PATH")
If @error Then ContinueLoop
Local $sName = RegRead($sSrcKeys3[$iKey] & $sKey, "NAME")
If Not @error Then
Local $aName = StringRegExp($sName, "(?i)\((.*?)\)", $STR_REGEXPARRAYGLOBALMATCH, 1)
If Not @error Then
$sName = $aName[0]
If UBound($aName) > 1 Then $sName = $sName & " (" & $aName[1] & ")"
$sName = StringReplace($sName, "_", " ")
EndIf
Else
$sName = $sPath
If StringRight($sName, 1) = '\' Then $sName = StringTrimRight($sName, 1)
$aName = StringSplit($sName, "\")
$sName = $aName[UBound($aName)-1]
$sName = StringReplace($sName, "\", " ") & " (V2)"
EndIf
$sName = StringReplace($sName, "_", " ")
$sKey = RegRead($sSrcKeys3[$iKey] & $sKey, "ORGID")
If @error Then MsgBox($MB_OK + $MB_ICONERROR, $sScriptTitle, "Error reading key.")
Local $sTime = RegRead($sSrcKeys3[$iKey] & $sKey, "TIME")
If @error Then $sTime = "BKLHK5E5TNTKW5D6"
Local $sDRP = RegRead($sSrcKeys3[$iKey] & $sKey, "DRP")
If @error Then $sDRP = "060011"
Local $sReg = RegRead($sSrcKeys3[$iKey] & $sKey & "\KEYS", "default")
If @error Then $sReg = "65a9e9e2d3076f4d0839f883ad4f20f8"
If _ArraySearch($aList, $sKey, 0, 0, 0, 0, 1, 0) = -1 Then
_ArrayAdd($aList, $sKey, 0)
$aList[UBound($aList)-1][1] = $sName
$aList[UBound($aList)-1][2] = $sPath
$aList[UBound($aList)-1][3] = $sTime
$aList[UBound($aList)-1][4] = $sDRP
$aList[UBound($aList)-1][5] = $sReg
$sList = $sList & $sName & @CRLF
ConsoleWrite($sKey & " " & $sName & " found." & @CRLF)
Else
ConsoleWrite($sKey & " " & $sName & " already in list." & @CRLF)
EndIf
Next
Next
If MsgBox($MB_YESNO, $sScriptTitle, UBound($aList) & " Vocaloid3 V2 voices found:" & @CRLF & @CRLF & $sList & @CRLF & @CRLF & "Register all for Vocaloid5?") = $IDYES Then
For $i = 0 To UBound($aList)-1
Local $sID = $aList[$i][0]
Local $sName = $aList[$i][1]
Local $sPath = $aList[$i][2]
Local $sTime = $aList[$i][3]
Local $sDRP = $aList[$i][4]
Local $sReg = $aList[$i][5]
RegWrite($sDestKey & $sID, "Name", "REG_SZ", $sName)
If @error Then
If @error Then MsgBox($MB_OK + $MB_ICONERROR, $sScriptTitle, "Error writing registry.")
EndIf
RegWrite($sDestKey & $sID, "BankName", "REG_SZ", $sName)
RegWrite($sDestKey & $sID, "Path", "REG_SZ", $sPath)
RegWrite($sDestKey & $sID, "Date", "REG_SZ", $sTime)
RegWrite($sDestKey & $sID, "DRP", "REG_SZ", $sDRP)
RegWrite($sDestKey & $sID, "Key", "REG_SZ", $sReg)
RegWrite($sDestKey & $sID & "\Version", "Major", "REG_DWORD", 5)
RegWrite($sDestKey & $sID & "\Version", "Minor", "REG_DWORD", 0)
RegWrite($sDestKey & $sID & "\Version", "Revision", "REG_DWORD", 1)
ConsoleWrite(@error & '>')
Next
ConsoleWrite(@CRLF & $sScriptTitle & " by Kartoffelkeks87")
MsgBox(0, $sScriptTitle, "Finished!" & @CRLF & @CRLF & $sScriptTitle & " by Kartoffelkeks87")
Else
ConsoleWrite("Abort by user.")
EndIf
- 如果选择访问链接,您会在网页中看到“download”按钮,点击即可。
- 您也可以新建文本文档然后复制代码并保存。
至此,您应该获得了xx.txt,请将后缀修改为.au3(如VocaReg 34.au3)。
1.2 获取AutoIt工具
点击下载https://www.autoitscript.com/cgi-bin/getfile.pl?autoit3/autoit-v3.zip ,解压到合适的地方。
2.将源代码编译成exe
解压后您应当可以在图示路径找到Aut2exe_x64.exe
打开后如图设置(文件路径请根据您的实际情况修改),点击Convert
3.运行exe
如果一切顺利,它会显示成功了。您可以打开编辑器检查是否有效,然后您可以将刚刚下载的文件全部删除,您不再需要它们了。