Sayaka在哪里?

问题描述 投票:0回答:1

Windows 10.我已经在“设置”中安装了日语TTS语音。现在,当我在Speech API 5.4 OneCore中使用语音枚举时(虽然在5.4中不是正确的),我得到6种语音:

  • David
  • Zira
  • Ayumi
  • 标记
  • 一郎

“语音设置”页面还显示了这6个。但是注册表中的Sayaka(HKLM\SOFTWARE\WOW6432Node\Microsoft\Speech_OneCore\Voices\Tokens\MSTTS_V110_jaJP_SayakaM)显然是第七个。其文件位于C:\windows\Speech_OneCore\Engines\TTS\ja-JP下。与其余的相比,有一个额外的文件.heq。为什么不枚举?

枚举代码为:

    #import "libid:E6DA930B-BBA5-44DF-AC6F-FE60C1EDDEC8" rename_namespace("SAPI") //v5.4 OneCore

    HRESULT hr;
    SAPI::ISpVoicePtr v;
    v.CreateInstance(__uuidof(SAPI::SpVoice));
    SAPI::ISpObjectTokenPtr tok;
    hr = v->GetVoice(&tok); //Retrieve the default voice
    SAPI::ISpObjectTokenCategoryPtr cat;
    hr = tok->GetCategory(&cat); //Retrieve the voices category
    SAPI::IEnumSpObjectTokensPtr toks;
    hr = cat->EnumTokens(0, 0, &toks);

    //And enumerate
    unsigned long i, n;
    hr = toks->GetCount(&n);
    LPWSTR ws;
    for (i = 0; i < n; i++)
    {
        hr = toks->Item(i, &tok);
        hr = tok->GetId(&ws);
        CoTaskMemFree(ws);
    }

我唯一能找到的在线Sayaka就是here

编辑:通过Reset()/ Next()进行枚举将得到相同的6。尝试直接在注册表路径周围创建令牌将产生错误0x8004503a(SPERR_NOT_FOUND)。 [在使用Process Monitor观看时这样做揭示了一个有趣的事实:该过程而不是HKLM下的Sayaka,而是询问以下密钥

HKCU \ Software \ Microsoft \ Speech_OneCore \ Isolated \ 7WUiMB20NMV5Y7TgZ2WJXbUw32iGZQSvSkeaf0AevtQ \ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Speech_OneCore \ Voices \ Tokens \ MSTTS_Vka_ja>

[在HKCU中确实有一个键,它包含HKLM和HKCU的SAPI设置的副本,并且该键中的Voices下确实没有Sayaka。我刚才提到的六个。

所以正在进行某种隔离,将SAPI设置复制到多个副本中。 Isolated下有7个不同的子键,而这些下的音色集也不同。其中两个包含与我们所知道的声音没有共同点的声音,而这些声音与Cortana有关。很难说出隔离的单位是什么-也许是用户,也许是应用程序包(就UWP而言)。

编辑:就像我怀疑的那样,正在进行基于应用程序包的隔离。我用相同的代码创建了一个全新的项目,运行它,并获得了另一个隔离键-F2yLLxINh6S1e3y3MkJo4ilfh036RB_9pHLEVL88yL0。看起来每次您运行启用了SAPI的应用程序时,它都会创建一个全新的隔离配置文件。不久之前,该隔离配置文件不存在,现在已经存在。因此它是由SAPI即时创建的。我不认为声音是硬编码的,因此它从主列表的某个位置复制了声音在隔离配置文件中。问题-主列表在哪里?不是HKLM\...\Speech_OneCore,因为可以看到Sayaka在那儿。可能是tokens_TTS_ja-JP.xml下的C:\Windows\SysWOW64\Speech_OneCore\Common\ja-JP,因为此处列出了Ayumi / Ichiro / Haruka,但Sayaka并未列出。不过,该文件的安全性非常严格,即使拥有管理员权限,我也无法编辑该文件。另外,这是C:\Windows\WinSxS\wow64_microsoft-windows-t..peech-ja-jp-onecore_31bf3856ad364e35_10.0.18362.1_none_46741f8a666da90a的第二个硬链接。

SysWOW64\Speech_OneCore文件夹允许管理员写入,但SysWOW64\Speech_OneCore\Common不允许。只有TrustedInstaller可以编写它。

Windows 10.我已经在“设置”中安装了日语TTS语音。现在,当我在Speech API 5.4 OneCore中使用语音枚举时(虽然不是在5.4中正确使用),我会收到6种声音:David Zira Ayumi Haruka ...

text-to-speech speech sapi
1个回答
0
投票

不是解决方案,而是解决方法。

© www.soinside.com 2019 - 2024. All rights reserved.