打开/关闭菜单
12
16
46
348
【VOCAKEY.WIKI】VOCAKEY愿你唱出心中的歌
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

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

;
; 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
WaimS4IFdlqK9Mc.png
打开后如图设置(文件路径请根据您的实际情况修改),点击Convert
s7urEm84CwlSWdY.png

3.运行exe

如果一切顺利,它会显示成功了。您可以打开编辑器检查是否有效,然后您可以将刚刚下载的文件全部删除,您不再需要它们了。