【问题标题】:Phonetic characters to speech音标转语音
【发布时间】:2011-05-25 10:13:34
【问题描述】:

我的目的是能够让我的应用程序使用不太流行的语言(例如福建话、马来语等)进行交流。我目前的方法是使用录制的 mp3。

我想知道 .net 或任何平台是否存在“语音字符到语音”引擎?

这里的拼音字符就像纸质词典中的拼音条目。有什么想法吗?

【问题讨论】:

  • 好吧,用这种方法可能无法很好地工作的一件事是,语言比一系列“预先录制的”声音要复杂得多。例如,像汉语这样的声调语言真的很烂。

标签: c# .net c++ c vb.net


【解决方案1】:

您需要的是大词汇量 TTS 引擎。 Microsoft 有一个speech SDK,允许您在输入时说出其他内容,还有Windows SAPI(语音 API - 不确定 SDK 和 API 是否相同)。我知道他们确实有英语的男性和女性声音,但可能没有其他语言,例如马来语(可能还没有太大的市场)。你可能想看看Festival Project at CMU。他们通常有很多不同语言的声音,但一些鲜为人知的声音可能不如英语的声音那么发达。

进一步更新:
检查MBROLA site。它是一个开源项目,用于开发多语言大型词汇 TTS 引擎,它们也有一个马来语扩展。我不知道它有多好。我试用了印地语,感觉还有很多工作要做。

另外,请查看BabelFish site。他们有很多免费的 TTS 引擎的链接,这些引擎应该支持马来语。

更新 3: 我不知道这是否适合您的目的,但如果应用程序必须说出的文本很少,那么您也可以尝试 concatenative speech synthesis 而不是 limited vocabulary .用马来语(或任何其他语言)记录句子片段,并将程序的输出传递到您自己的有限词汇 tts 引擎,您可以在其中创建输出。一个例子可以是(用英语):“是最有价值的球员”。在这里,“曾是最有价值球员”成为一个片段,而“球员X”可以随意更改。如果它符合您的目的,这应该可以很好地工作。

【讨论】:

    【解决方案2】:

    这是 VB.NET 代码:

    'create the object. This object will store your phonetic 'characters'
    Dim PBuilder As New System.Speech.Synthesis.PromptBuilder
    
    'add your phonetic 'characters' here. Just ignore the first parameter.
    'The second parameter is your phonetic 'characters'
    PBuilder.AppendTextWithPronunciation("test", "riːdɪŋ")
    
    'now create a speaker to speak your phonetic 'characters'
    Dim SpeechSynthesizer2 As New System.Speech.Synthesis.SpeechSynthesizer
    
    'now actually speaking. It will speak 'reading'
    SpeechSynthesizer2.Speak(PBuilder)
    

    这是转换后的 C# 代码:

    //create the object. This object will store your phonetic 'characters'
    System.Speech.Synthesis.PromptBuilder PBuilder = new System.Speech.Synthesis.PromptBuilder();
    
    //add your phonetic 'characters' here. Just ignore the first parameter.
    //The second parameter is your phonetic 'characters'
    PBuilder.AppendTextWithPronunciation("test", "riːdɪŋ");
    
    //now create a speaker to speak your phonetic 'characters'
    System.Speech.Synthesis.SpeechSynthesizer SpeechSynthesizer2 = new System.Speech.Synthesis.SpeechSynthesizer();
    
    //now actually speaking. It will speak 'reading'
    SpeechSynthesizer2.Speak(PBuilder);
    

    【讨论】:

    • 所以这个 tts 系统只会将电话连接在一起并读取结果波形?这是这样做的吗?
    • @Sriram:只要把任何语音“字符”放在那里,如果该语音“字符”是可发音的,那么系统调用就会说出来。详情请参考.Net SDK。
    【解决方案3】:

    您查看过System.Speech 命名空间吗?

    尤其是 System.Speech.SynthesisSystem.Speech.Synthesis.TtsEngine 命名空间。

    【讨论】:

    • AFAIK,仅支持流行语言,例如英语。我的目标是针对不太流行的语言,甚至是新语言。
    【解决方案4】:

    .Net System.Speech.Synthesis.PromptBuilder 类将从 SSML 字符串创建音频。您可以使用它们从原始音素和采样音频构建声音。音频不依赖于语言。

    【讨论】:

      【解决方案5】:

      也许是这个? System.Speech.Recognition.SrgsGrammar.SrgsPhoneticAlphabet

      【讨论】:

        【解决方案6】:

        我已经尝试过 System.Speech.Synthesis.PromptBuilder。而且我不得不说,目前拼音字符的实现非常初级且不准确。例如,PromptBuilder 缺少语音语调,并且单词中缺少重音强调。 PromptBuilder 只能输出单调和机器人的声音,很烦人。

        我的建议是继续使用您当前的方法。就翻译完美语音字符所需的时间而言,使用 mp3 传递信息更自然且更具成本效益。

        【讨论】:

          猜你喜欢
          • 2015-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-14
          • 2018-09-25
          • 2012-09-29
          • 1970-01-01
          • 2019-01-06
          相关资源
          最近更新 更多