将语音文化转换为其他语言

时间:2017-11-24 10:05:05

标签: c# text-to-speech culture speech-synthesis

我有一些除英国文化之外的文字。 例如:泰米尔文化。

如果我不提及文化,将会采用默认英语。

如何将文本转换为语音(英语除外)?

代码段:

英语语言:

public static void ConvertTextToVoice()
    {
        SpeechSynthesizer speech = new SpeechSynthesizer();
        speech.Volume = 100;
        speech.Rate = 0;            
        speech.Speak("Welcome to india");
    }

对于其他语言:

public static void ConvertTextToVoice()
{
    SpeechSynthesizer speech = new SpeechSynthesizer();
    speech.Volume = 100;
    speech.Rate = 0;

    //Tamil Text
    string text = "பெயர்ச் சொல் சகோதரன் பிரதி பெயர்கள் வினைச் சொல் வினை அடை";

    PromptBuilder builder = new PromptBuilder(new System.Globalization.CultureInfo("ta-IN"));
    builder.AppendText(text);           
    speech.SpeakAsync(builder);
}

1 个答案:

答案 0 :(得分:1)

默认情况下,可能默认使用操作系统的语言,区域设置,这就是为什么它在不明确设置区域性的情况下也适用于美国文化的原因。

因此,如果您希望程序在不同的计算机上以不同的语言读取文本,则可能不需要其他设置。每台机器应具有与应在其中读取文本的相同的地区/语言设置。

如果没有,那么您有两个选择。

选项1:您可以像在泰米尔语代码示例中所做的那样,在PromptBuilder上为每个段落或每个句子设置区域性。

选项2:您可以使用SSML

MSDN documentation at this link中所述,您可以生成SSML,在其中可以使用 lang 指定语言。然后,您可以使用SpeakSsml或SpeakSsmlAsync API读取内容。

  // Initialize a new instance of the SpeechSynthesizer.  
  SpeechSynthesizer synth = new SpeechSynthesizer();  

  // Configure the audio output.   
  synth.SetOutputToDefaultAudioDevice();  

  // Build an SSML prompt in a string.  
  string str = "<speak version=\"1.0\"";  
  str += " xmlns=\"http://www.w3.org/2001/10/synthesis\"";  
  str += " xml:lang=\"en-US\">";  
  str += "<say-as type=\"date:mdy\"> 1/29/2009 </say-as>";  
  str += "</speak>";  

  // Speak the contents of the prompt asynchronously.  
  synth.SpeakSsmlAsync(str);  

希望这对您有所帮助。