5

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

音素编辑器

我使用System.Speech了库(recognitionsynthesis命名空间),但我没有找到我想要的。现在不要弄错了!我不想要句子“hello Dear Shamim”的音素,我想从说话的未知音频输入和英语句子中提取音素。我试过System.Speech.Recognition了,但它试图从音频文件中提取单词,而不是音素!正如您可能猜到的那样,这些词有 30% 是错误的!;)

4

4 回答 4

3

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

于 2013-12-25T20:49:23.827 回答
2

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

于 2013-12-26T04:52:38.470 回答
1

您可以将Hidden Markov Model Tool Kit与 pinvoke 绑定到您的 c# 代码或尝试使用Accord.net 框架,该框架是托管的并具有 HMM 类,但没有提取音素的具体方法。

于 2013-12-25T11:29:55.270 回答
1

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

你注意到System.Speech.Recognition.RecognizedWordUnit了吗?这似乎是您正在寻找的大致内容。

于 2013-12-25T21:10:42.407 回答