在.Net中对音素的演讲

问题是我想用C#语言获取音频语音的音素。 假设你有一个像“x.wav”这样的音频文件,上面写着“你好亲爱的Shamim”。 我想提取演讲的所有音素和他们的相对时间。 如下图所示:

Phoneme Editor

我使用System.Speech库( recognitionsynthesis命名空间)但我找不到我想要的东西。 现在别搞错了! 我不希望句子的音素“你好亲爱的Shamim”,我想从未知的音频输入中提取音素和英语句子。 我尝试过System.Speech.Recognition但它尝试从音频文件中提取出来的单词,而不是手机! 正如你可能猜到的那样,这些词是错误的! ;)

与单词识别相比,音素识别需要一些专门的设置,并且大多数引擎不直接支持它(单声道“单词”的字典通常不会产生良好的准确性)。 一个很大的原因是音素识别远不如单词识别准确,因为单词识别受到更多约束(它过滤掉所有不映射到真实单词的电话组合,其中大部分都是如此)。 但HTK确实支持它。 您可以通过执行shell命令来使用它(从C#中执行此操作没有任何恶意)或对库进行pinvoking。

尝试使用带有字符串参数的System.Speech.Recognition.DictationGrammar构造函数,并传递“grammar:dictation#pronunciation”作为参数。 或者,原始SAPI(使用SpeechLib互操作程序集)可以通过ISpRecoGrammar::LoadDictation指定发音语法,并指定“发音”作为听写主题。

您可以将隐藏马尔可夫模型工具包与pinvoke绑定到您的c#代码或尝试使用Accord.net框架 ,该框架是托管的并具有HMM类,但没有具体的方法来提取音素。

这是为了vanilla .net,还是你可以使用SAPI(你知道,语音API)吗? 演讲api 很好 ,似乎有你想要的东西。 最重要的是,在Windows环境中,它比外部库更容易获得(更不用说无论应用程序如何都没有太多的许可问题)。

您是否注意到System.Speech.Recognition.RecognizedWordUnit ? 这似乎与您正在寻找的大致相同。