如何将C#语法转换为Matlab?

时间:2019-03-28 20:15:24

标签: c# .net matlab

我正在为项目的一部分进行文本到语音转换,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无法正常工作吗?

1 个答案:

答案 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。