…Here’s the thing, I want to install the VOCALOID6 editor on Ubuntu Studio, so I followed the steps below (I put these steps together after spending about 40 hours and consulting countless resources).
To make sure the meaning of the steps below isn’t misunderstood, they haven’t been translated into English and are posted here in Chinese. Please use something like a browser translation feature to translate these steps into English. Sorry about that.
首先卸载Ubuntu Studio中通过apt安装的Wine(如果之前有安装的话,因为Ubuntu Studio通过apt安装的wine版本太旧),执行:
sudo apt remove wine
随后将Wine官方仓库添加进来,在此之前需要导入WineHQ的GPG密钥:
curl -fsSL https://dl.winehq.org/wine-builds/winehq.key | sudo gpg --dearmor -o /usr/share/keyrings/winehq.gpg
创建仓库配置文件:
cat <<EOF | sudo tee /etc/apt/sources.list.d/winehq.sources
Types: deb
URIs: https://dl.winehq.org/wine-builds/ubuntu
Suites: $(lsb_release -cs)
Components: main
Architectures: amd64
Signed-By: /usr/share/keyrings/winehq.gpg
EOF
应该是在Wine11.7...大概之后,Wine对VOCALOID6编辑器的兼容度有了大幅度的改善。截至撰写这部教程的时候,winehq-stable还是11.0,所以这次安装的是winehq-staging(现版本为11.12),验证APT包管理器是否成功识别了WineHQ仓库:
apt-cache policy winehq-staging
一切无误之后进行安装:
sudo apt install winehq-staging
安装完毕之后输入winecfg进行初始配置,可能会弹出需要依赖Mono等额外组建,务必安装。自动配置完毕之后,将Windows版本更为Windows11。
默认Wine文件夹安装位置为:/home/(用户名)/.wine。
这时候的Wine文件夹中只包含了最基本的与Windows兼容的模块,DLL等,需要使用winetricks进行配置。如果使用的是Ubuntu Studio通过apt获得的winetricks,可能需要在终端中运行;我使用的winetricks是在Github中下载的官方版本,不过即便如此,也需要在终端中运行。
首先安装这些字体以解决往后模块安装中的中文/日文/韩文文字乱码问题:
winetricks cjkfonts corefonts
随后安装这些DLL与模块,以实现VOCALOID6编辑器的部分功能...应该是。我得出这些模块列表耗费了10个小时多一些...
首先安装需要的媒体文件解码器:
winetricks allcodecs
如果安装过程中出现错误的话,改为这个命令:
winetricks dirac ffdshow cinepak l3codecx
这些媒体文件解码器还不完成,需要打开这两个网站下载名为mf-install与名为mf-installcab-steamdeck的库:
https://github.com/Kurumi78/mf-install
(运行时将mf-install.sh中的所有wine64的行注释掉,然后运行:WINEPREFIX=/home/(用户名)/.wine ./mf-install.sh)
https://github.com/fhsinchy/mf-installcab_steamdeck
(运行时将install-mf-64.sh中的所有python改为python3,py源文件中将wine64改为wine,然后运行:WINEPREFIX=/home/(用户名)/.wine ./install-mf-64.sh)
然后是一些库与DLL文件:
winetricks dotnet35 dotnet40 dotnet45
运行winecfg,将Windows版本调至Windows11,继续运行:
winetricks dotnet6 dotnet7 dotnet9 d3dcompiler_47 dotnetcore2 qedit quartz dxvk dxvk2071 vcrun2012 vcrun2022 msls31
winetricks dotnet48 dotnet461 dotnet462 dotnetdesktop6 dotnetdesktop7 dotnetdesktop8 dotnetdesktop9
将winecfg中的Windows版本再次改回Windows11。
最后下载并安装.Net Desktop Runtime 8.0.27,这是最新的VOCALOID6编辑器使用与依赖的库。
下载地址很好找,注意是微软官方的下载地址,下载完毕之后按照普通的程序安装流程安装即可。
如果之后无法运行VOCALOID6编辑器的话,或许8.0.13与8.0.21也需要下载并安装。
注意:x86(32位)与x64(64位)都需要安装。
现在开始安装VOCALOID6的编辑器与未来猫(初音未来)的声库。
直接在VOCALOID的官方网站下载试用版(之后如果运行一切没有问题的话,再使用正版密钥进行激活也可以)。
解压下载到的VOCALOID6_Update_6.13.0_Win.zip,安装解压好的VOCALOID6_Editor_Installer.exe。
再安装我预先通过正版下载码下载到的(没错,我买了正版的VOCALOID6编辑器+未来猫音源的软件包)未来猫音色库安装文件,此处不提供程序名称与下载地址。
将之前下载的mf-installcab_steamdeck文件夹中的mfplat.dll拷贝至VOCALOID6编辑器所在的目录之下(/home/(用户名)/.wine/drive_c/Program Files/VOCALOID6/Editor中)。
在其他网站之中下载wmiutils.dll,wbemcomn.dll,framedynos.dll,cimwin32.dll,wmisvc.dll,wbemcore.dll,fastprox.dll,esscli.dll,wbemsvc.dll,wbemdisp.dll,wbemprox.dll,32位与64位的都要下载。
【如果有在另外一台电脑之中安装Windows11的话,最好从那里直接拷贝这些dll文件。】
下载完毕之后,对于wmiutils.dll,wbemcomn.dll,cimwin32.dll(这个只下载64位的),wmisvc.dll(只下载64位),wbemcore.dll,fastprox.dll,esscli.dll,wbemsvc.dll,wbemdisp.dll,wbemprox.dll,32位的dll文件拷贝至.wine/drive_c/windows/syswow64/wbem中,64位的dll文件拷贝至.wine/drive_c/windows/system32/wbem中;
对于其他的dll,32位的dll文件拷贝至drive_c/windows/syswow64中,64位的dll拷贝至drive_c/windows/system32中。
如果文件夹中已有这些文件,记得对原文件进行备份。
随后打开syswow64与system32文件夹,运行:
接着打开syswow64/wbem与system32/wbem文件夹,运行:
wine regsvr32 fastprox.dll esscli.dll wmiutils.dll wbemcomn.dll cimwin32.dll wmisvc.dll wbemcore.dll wbemsvc.dll
(在打开syswow64/wbem注册时,请自行去除只下载了64位的文件)
运行wine regedit,进行以下注册表的录入:
[HKEY_CLASSES_ROOT\WOW6432Node\Interface\{9556DC99-828C-11CF-A37E-00AA003240C7}]
@="IWbemServices"
[HKEY_CLASSES_ROOT\WOW6432Node\Interface\{9556DC99-828C-11CF-A37E-00AA003240C7}\NumMethods]
@="40"
[HKEY_CLASSES_ROOT\WOW6432Node\Interface\{9556DC99-828C-11CF-A37E-00AA003240C7}\ProxyStubClsid32]
@="{D68AF00A-29CB-43FA-8504-CE99A996D9EA}"
[HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{D68AF00A-29CB-43FA-8504-CE99A996D9EA}]
@="Microsoft WBEM (non)Standard Marshaling for IWbemServices"
[HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{D68AF00A-29CB-43FA-8504-CE99A996D9EA}\InprocServer32]
@=hex(2):25,00,73,00,79,00,73,00,74,00,65,00,6d,00,72,00,6f,00,6f,00,74,00,25,\
00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,77,00,62,00,\
65,00,6d,00,5c,00,66,00,61,00,73,00,74,00,70,00,72,00,6f,00,78,00,2e,00,64,\
00,6c,00,6c,00,00,00
"ThreadingModel"="Both"
[HKEY_CLASSES_ROOT\WOW6432Node\Interface\{F50A28CF-5C9C-4F7E-9D80-E25E16E18C59}]
@="Internal_IWbemServices"
[HKEY_CLASSES_ROOT\WOW6432Node\Interface\{F50A28CF-5C9C-4F7E-9D80-E25E16E18C59}\NumMethods]
@="26"
[HKEY_CLASSES_ROOT\WOW6432Node\Interface\{F50A28CF-5C9C-4F7E-9D80-E25E16E18C59}\ProxyStubClsid32]
@="{7C857801-7381-11CF-884D-00AA004B2E24}"
[HKEY_CLASSES_ROOT\Interface\{F50A28CF-5C9C-4F7E-9D80-E25E16E18C59}]
@="Internal_IWbemServices"
[HKEY_CLASSES_ROOT\Interface\{F50A28CF-5C9C-4F7E-9D80-E25E16E18C59}\NumMethods]
@="26"
[HKEY_CLASSES_ROOT\Interface\{F50A28CF-5C9C-4F7E-9D80-E25E16E18C59}\ProxyStubClsid32]
@="{7C857801-7381-11CF-884D-00AA004B2E24}"
下载mscoree.dll,拷贝至64位system32文件夹与32位syswow64文件夹中,分别重新注册:
wine regsvr32 mscoree.dll
打开这里,下载最新版本的dxvk:
https://github.com/doitsujin/dxvk/releases
备份好所有原文件之后,解压所有x32文件夹下的文件至syswow64,解压所有x64文件夹下的文件至system32。
Then run the VOCALOID6 editor using this command:
DOTNET_ROOT="C:\Program Files\dotnet" WINEDEBUG=+loaddll wine "/home/nanochima/.wine/drive_c/Program Files/VOCALOID6/Editor/VOCALOID6.exe"
The following results are output in the terminal:
System.Windows.Markup.XamlParseException: Set property 'System.Windows.Controls.Primitives.ButtonBase.Command' threw an exception.
---> System.TypeInitializationException: The type initializer for 'Yamaha.VOCALOID.App' threw an exception.
---> System.InvalidCastException: Specified cast is not valid.
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(Int32 errorCode, IntPtr errorInfo)
at System.Management.ManagementObject.Initialize(Boolean getObject)
at System.Management.ManagementBaseObject.get_wbemObject()
at System.Management.ManagementBaseObject.get_ClassName()
at System.Management.ManagementClass.GetInstances(EnumerationOptions options)
at System.Management.ManagementClass.GetInstances()
at Yamaha.VOCALOID.App.<>c.<.cctor>b__124_2()
at Yamaha.VOCALOID.App.<>c.<.cctor>b__124_0()
at Yamaha.VOCALOID.App..cctor()
--- End of inner exception stack trace ---
at Yamaha.VOCALOID.App.get_ContentRenderDone()
at Yamaha.VOCALOID.DelegateCommand.CanExecute(Object parameter)
at System.Windows.Controls.Primitives.ButtonBase.UpdateCanExecute()
at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
at MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue(Object inst, XamlMember property, Object value)
--- End of inner exception stack trace ---
at System.Windows.Markup.XamlReader.RewrapException(Exception e, IXamlLineInfo lineInfo, Uri baseUri)
at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
at Yamaha.VOCALOID.MainWindow.InitializeComponent()
at Yamaha.VOCALOID.MainWindow..ctor()
at Yamaha.VOCALOID.App.OnStartup(StartupEventArgs e)
at System.Windows.Application.<.ctor>b__1_0(Object unused)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.DispatcherOperation.InvokeImpl()
at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
at System.Windows.Threading.DispatcherOperation.Invoke()
at System.Windows.Threading.Dispatcher.ProcessQueue()
at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
at System.Windows.Application.RunDispatcher(Object ignore)
at System.Windows.Application.RunInternal(Window window)
at Yamaha.VOCALOID.App.Main()
…In short, I can’t open the VOCALOID6 editor properly.
To repeat, I’ve already spent over 40 hours on this… Right now, I’m desperately asking for help, hoping someone can see this and help me solve it… I would be so grateful.