【问题标题】:How to use voices from different languages in SSML speech?如何在 SSML 语音中使用不同语言的声音?
【发布时间】:2022-01-21 15:48:07
【问题描述】:

我有一个 TTS(文本到语音)UWP 桌面应用程序,我需要在其中在对话中执行不同语言的语音。问题是标签只能有一个 xml:lang 元素,它会覆盖所有声音的语言,从而生成带重音的语音。任何帮助都是最受欢迎的。谢谢。

string strSSML =
  @"<speak version='1.0' " +     
  "xmlns='http://www.w3.org/2001/10/synthesis' xml:lang='en'> " +
  " <voice name='Microsoft David'> This is a test of different voices in a speech. </voice>" +
  " <voice name='Microsoft Daniel'> Este é um teste de diferentes vozes em uma fala. </voice>" +
  "</speak>";

SpeechSynthesisStream stream = await WAMVariables.Synthesizer.SynthesizeSsmlToStreamAsync(strSSML);
mediaPlayer.Source = MediaSource.CreateFromStream(stream, stream.ContentType);
mediaPlayer.Play();

【问题讨论】:

    标签: c# uwp text-to-speech ssml


    【解决方案1】:

    要在 TTS 中添加不同的语言,您必须为其添加不同的 SSML 文本。这些 SSML 文本之间的唯一区别是您已经注意到的 xml:lang 标记。该标记使 SSML 适用于不同的语言。

    例如,您发布了一个英文版 SSML。如果要添加法语,请复制 strSSML 并将其命名为 strSSML2,然后将 xml:lang 标签从 en 更改为 fr-FR

    喜欢:

     @"<speak version='1.0' " +     
      "xmlns='http://www.w3.org/2001/10/synthesis' xml:lang='fr-FR'> " +
      " <voice name='Microsoft David'> This is a test of different voices in a speech. </voice>" +
      " <voice name='Microsoft Daniel'> Este é um teste de diferentes vozes em uma fala. </voice>" +
      "</speak>";
    

    Github 上有一个关于 TTS 的官方示例:SpeechRecognitionAndSynthesis。在scenario1 - Synthesizing text to Speech中,您可以执行不同语言的 TTS。当你检查Strings文件夹时,你会看到不同的语言文件夹,打开LocalizationTTSResources.resw文件,你可以看到除了xml:lang标签之外的字符串是一样的。所以这就是它的工作原理,您需要做的是添加一些具有不同语言标签的 SSML 文本。

    【讨论】:

    • Roy,使用这种方法,我理解我们将有两个流,我们必须按顺序运行这两个。问题是我需要录制对话的单个 MP3。是否可以使用两个流来做到这一点?
    • @JoseAfonso 我认为答案是否定的。您需要在录制过程中一一播放。
    猜你喜欢
    • 2019-09-21
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2014-12-22
    • 2012-04-28
    • 2010-09-23
    • 1970-01-01
    相关资源
    最近更新 更多