

Using (RegistryKey key = (RegistryKey newKey = RegistryRights.FullControl)) This is a c# code example for copy the Speech_OnceCore Registry entry to Speech Registry entry (to be used with as SAPI Voice): public List CopySpeechRegistryEntryFromOneCore() "407"="Microsoft Stefan - German (Germany)" Windows Registry Editor Version Stefan - German (Germany)" With the modifications it should look like this (take special notice to the key paths):

Remove the entire line for the attributed called SayAsSupport, it is not needed by SAPI. All you have to do is change both references from Speech_OneCore to Speech. Both will make a reference to the key Speech_OneCore. Open the exported file with Notepad or similar. The easiest thing is to right click the voice key (MSTTS_V110_deDE_StefanM) and from the context menu select Export to save the entire voice structure to a file (this will later allow you to easily replicate all these steps into a couple of clicks if you want to do this in another computer). The German male voice in my case is called MSTTS_V110_deDE_StefanM. There you will find each WinRT voice registered under its own key. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices\Tokens But after studying the Windows registry and a couple of files referenced in there, I noticed that both APIs use the same data files so I copied the registry keys from the German male voice registered in WinRT API into the corresponding SAPI section. In Windows 8+ there are two speech synthesis programming interfaces (like explained by Eric Brown). Works for 32 and 64 bit programs (natively or WOW). So I did this "hack" and surprisingly worked right away (Windows 10 version 1803). I needed to make a desktop (not universal app) program in C# that utilized the male voice but it was not available through SAPI. In my case, under Windows 10, I installed the German language with TTS package and it installed a female voice (WinRT and SAPI) plus a male voice (WinRT only). I managed to fix this issue by modifying the Windows registry.
