DSN is composed of two projects, a plugin and a background service.
The dsn_plugin is a DLL written in C++
which hooks into SkyrimVR/SE and communicates with the background service.
The background service dsn_service is a Windows application written in C#
which uses Microsoft's System.Speech
API to do speech recognition. It communicates with the dsn_plugin over stdin/stdout.
Build dsn_service only
You need a Visual Studio with .NET Desktop Development
modules.
Then enter dsn_service directory and double-click dsn_service.sln
, a Visual Studio C# project will be loaded.
Build dsn_plugin only
You need a Visual Studio (with C++ Desktop Development
module) and a CMake.
Then enter dsn_plugin directory and double-click configure.bat
, a Visual Studio project will be created by Cmake and loaded automatically.
When you run configure.bat
for the first time, you are asked about the installation path of SkyrimVR and SkyrimSE. If you want to enable the automatic installation feature, please provide the root directory of your games. If you want to disable the installation, just press Enter.
An example:
Set plugin install directories after building:
SkyrimVR game root path (empty to disable installation): E:/Games/SteamLibrary/steamapps/common/SkyrimVR
SkyrimSE game root path (empty to disable installation): E:/Games/SteamLibrary/steamapps/common/Skyrim Special Edition
CMakeFlags: -DSVR_DIR="E:/Games/SteamLibrary/steamapps/common/SkyrimVR" -DSSE_DIR="E:/Games/SteamLibrary/steamapps/common/Skyrim Special Edition"
And these commands will be execute for the example:
md build
cd build
cmake -A x64 -DSVR_DIR="E:/Games/SteamLibrary/steamapps/common/SkyrimVR" -DSSE_DIR="E:/Games/SteamLibrary/steamapps/common/Skyrim Special Edition" ..
start dsn_plugin.sln
A file named install-path.ini
will be created after the first running of configure.bat
.
You can delete it and run configure.bat
again to reset the path, or edit it directly.
The installation will be triggered each time you build dsn_plugin_xx
.
Notice: The Visual Studio project INSTALL
is generated by CMake
for the project PACKAGE
which is used to generate a FOMod/NMM/Vortex Compatible ZIP MOD file.
It will only copy files into the build/package_tmp
directory.
It is different from the auto install mentioned here.
name | description |
---|---|
dsn_plugin/ | The code of the plugin itself. |
sse/ | The SKSE64 codes for linking to dsn_plugin to generate a SkyrimSE-compatible DLL. |
svr/ | The SKSEVR codes for linking to dsn_plugin to generate a SkyrimVR-compatible DLL. |
CMakeLists.txt | A project description file used by the CMake build tool. |
configure.bat | A script to create a Visual Studio project in the build directory via CMake and load it. |
build/ | After you run configure.bat , the directory will be created automatically to hold the Visual Studio project and all build outputs. You can delete this directory at any time and re-run configure.bat to generate it. Files in this directory should not be commited to the repository. |
They are the same directory and have the same codes. Modifying the code in one place is equivalent to modifying the other.
The only difference between the two is that they linked to different SKSE libraries and header files.
Build dsn_service and dsn_plugin at the same time
Double-click configure.bat
in the root directory of the repo, a Visual Studio project will be created by Cmake and loaded automatically.
You can build the Visual Studio project PACKAGE
to Generate a ZIP Package for dsn_service
and dsn_plugin
.
A fomod
directory will be added to so the ZIP can be installed via NMM and Vortex.
The package name will be build/DSN-0.1.1-win64.zip
.
3>------ Build started: Project: dsn_service, Configuration: Debug x64 ------
3>C:\work\DragonbornSpeaksNaturally\dsn_service\dsn_service\CommandList.cs(1,7,1,16): error CS0246: The type or namespace name 'IniParser' could not be found (are you missing a using directive or an assembly reference?)
3>C:\work\DragonbornSpeaksNaturally\dsn_service\dsn_service\Configuration.cs(64,24,64,31): error CS0246: The type or namespace name 'IniData' could not be found (are you missing a using directive or an assembly reference?)
...
For technical reasons, CMake can't automatically restore the NuGet package and update references for project dsn_service.
If you met assembly missing, please restore and reinstall NuGet packages manually:
-
open
NuGet Package Manager Console
first:Tools
>NuGet Package Manager
>Package Manager Console
-
A prompt box will appear:
Some NuGet packages are missing from this solution. Click to restore from your online package sources.
Click the
restore
button. If you can't find it, just skip this step. The restore may be finished automatically. -
Run this command in your NuGet Package Manager Console:
Update-Package -reinstall -projectname dsn_service
-
Then you can build
dsn_service
normally.