我正在为项目的一部分进行文本到语音转换,Matlab具有一些引入.NET程序集but with very limited documentation的功能。我在调用某些方法来更改声音时遇到麻烦。 Microsoft's SystemSpeech documentation implies that this should work,但尝试时出现此错误:
objspeech.SelectVoice('Anna')
Message: Cannot set voice. No matching voice is installed or the voice was
disabled.
Source: System.Speech
HelpLink:
这是我的代码的最低工作版本:
NET.addAssembly('System.Speech');
objspeech = System.Speech.Synthesis.SpeechSynthesizer;
% objspeech.SelectVoice('Anna');
objspeech.Volume = 100;
SpeakAsync(objspeech, 'Hello World');
唯一的失败是与SelectVoice有关。我不知道如何更改它。运行objspeech.GetInstalledVoices返回:
ReadOnlyCollection<System*Speech*Synthesis*InstalledVoice> with properties:
Count: 2
有人知道为什么SelectVoice无法正常工作吗?
答案 0 :(得分:0)
这是我最终获得所有声音并选择其他声音的方法:
resultEnumerable = NET.explicitCast(result,'System.Collections.IEnumerable');
resultEnumerator = resultEnumerable.GetEnumerator();
resultEnumerator = NET.explicitCast(resultEnumerator, 'System.Collections.IEnumerator');
while (resultEnumerator.MoveNext)
v1=resultEnumerator.Current;
v1.VoiceInfo.Name
end
objspeech.SelectVoice(v1)
这里我的v1是“ Microsoft Zira Desktop”,因此objspeech.SelectVoice('Microsoft Zira Desktop')
可以工作。奇怪的是,在Windows设置中,我已经安装并运行了Microsoft David,Mark和Zira,但是只能通过.NET访问David和Zira。