文字转语音清点

时间:2018-04-16 02:29:00

标签: .net vb.net text-to-speech

使用以下代码,我可以列出Windows中安装的所有语音(或者我认为):

Imports System.Speech.Synthesis

...

Dim sp As New SpeechSynthesizer

Each InstalledVoice As InstalledVoice In sp.GetInstalledVoices()
           ListOfInstalledVoices.Add(InstalledVoice)
Next

sp.Dispose()

问题是在我的机器上它只列出了两个声音(Microsoft David Desktop和Microsoft Zira Desktop)但是当我进入Windows文本到语音设置时,列出了五种声音(David,Linda,Zira,Marc)和理查德)。

最初我认为我必须使用32位对64位(如此处引用:SpeechSynthesizer doesn't get all installed voices),但它没有(我尝试使用x86和x64进行编译,没有区别)。

我也许也想过,Marc可能是大卫,他的年龄设置不同,但是因为我不能改变大卫的年龄属性(这是只读的)。

任何帮助将不胜感激。

修改

有人建议我使用语音sdk 11 / sdk11运行时 - 然而,尝试使用sdk 11 / runtime使事情变得更糟。我删除了对System.Speech及其相关导入的引用,下载并安装了Microsoft Speech Platform - 软件开发工具包(SDK)(版本11)microsoft.com/en-us/download/details.aspx?id=27226添加了相关联dll(64位)作为参考并添加了'Imports System.Speech.Synthesis',之后,当我编译为x64,x86或AnyCPU时,没有报告任何设备。然后,我通过下载sdk11运行时并包含随附的dll来尝试相同的操作。没爱。恢复到原来的状态使我回到原来的问题。

1 个答案:

答案 0 :(得分:0)

这将通过VB输出文本到语音的列表:

Imports System.Speech.Synthesis

Module Module1
    Sub Main()
        Dim synth As SpeechSynthesizer = New SpeechSynthesizer()
        For Each voice In synth.GetInstalledVoices()
            Console.WriteLine(voice.VoiceInfo.Name)
        Next
        Console.ReadLine()
    End Sub
End Module

我最初是为C#here找到的。希望有帮助!