【问题标题】:Using SAPI is there a way to dictate Chinese name and get pinyin or words just record the pronunciation?使用SAPI有没有办法听写中文名字并获得拼音或单词只是记录发音?
【发布时间】:2016-03-01 03:13:59
【问题描述】:

目标是用SAPI口述中文名字,并得到拼音或同音字来记录名字的读音。但是当像下面这样使用 DictationGrammar 时,

var engine = new SpeechRecognitionEngine(CultureInfo.CurrentCulture);
engine.SetInputToDefaultAudioDevice();
var dictationGrammar = new DictationGrammar();
engine.LoadGrammar(dictationGrammar);

结果是在口述一些中文名字时总是试图得到一些有意义的短语。

有没有办法达到我的目标?谢谢。

【问题讨论】:

  • 您需要提供更多详细信息。具体来说,CultureInfo.CurrentCulture 是什么?
  • 另外,你愿意改用 C++ 吗?原生 API 有很多未在托管包装器中公开的功能,其中一些是您想要做的事情所需要的。
  • @Eric,CultureInfo.CurrentCulture 是中文,更具体地说,是“zh-CN”。 C++ 可能是一个选项,虽然整个架构是 C#,但我可以包装一些 c++ dll 来使用。

标签: c# text-to-speech sapi


【解决方案1】:

使用 Grammar builder() 函数创建自己的语法,而不是使用听写语法,并将其与 Load grammar()-功能,因为听写语法仅适用于英语单词。即使使用您自己的语法,但您的口音应该是美国口音。

Choices sList = new Choices(); 
sList.Add(new string[] { "pinyin" });
Grammar gr = new Grammar(new GrammarBuilder(sList));
engine.LoadGrammar(slist);

希望对您有所帮助!

【讨论】:

    【解决方案2】:

    尝试使用发音语法。

    var engine = new SpeechRecognitionEngine(CultureInfo.CurrentCulture);
    engine.SetInputToDefaultAudioDevice();
    var dictationGrammar = new DictationGrammar("Pronunciation");
    engine.LoadGrammar(dictationGrammar);
    

    这将在Chinese phoneme set 中返回一组音素,并且不会尝试将其映射到字符串中。

    【讨论】:

    • 我试过这个,但它不起作用。实际上,使用发音语法仍然是首先尝试识别一些有意义的字符串,然后从该字符串中设置一个音素,而不是直接从音频中获取。所以这不适用于人名。
    • @ManShen 你能扩展一下吗?我对中文引擎不是很熟悉,但是英文引擎不是这样工作的;如果您加载了发音模型(没有其他内容),它会返回原始音素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 2021-03-24
    • 1970-01-01
    相关资源
    最近更新 更多