CMU Sphinx

来源:互联网 发布:嗟乎哀哉 编辑:程序博客网 时间:2024/05/21 15:48
cmusphinx,很好的开源项目

一直在想一个语音识别的项目,这是一个我自己想的项目,完全来源于我自己的生活,简单说起来就是,现在大家不是常常去卡拉ok玩吗,常常有些歌曲想不起来名字,也记不清楚歌词,只是知道调子,只能哼两句,我就想做这样一个软件,只要你能对着mic哼唱两句,不用记得歌词歌名,系统马上通过查找匹配,在很短的时间内找到要找的歌曲。

看到了一个语音识别方面的开源项目,http://cmusphinx.sourceforge.net/html/cmusphinx.php她是CMU的开源语音识别项目,得到了sunMitsubishi等很多公司的资助,所有代码公开,他们的最新的版本sphinx4是完全基于JAVA来做的。

不过,我有些困惑的是,我觉得我这个项目的想法,并不稀奇,为什么没有看到过有相关公司或者人员做这方面的研究或者开发,因为我对语音识别方面的了解也非常粗浅,不知道是不是从理论上说,对这种音乐歌曲旋律的匹配、比较、识别是一件从理论上来说都很难的事情?据我了解,大多数的语音识别项目,都是针对于人类某种语言的识别(英语或汉语),sphinx这个项目也是对于语言的识别(主要是英语),而且大多数都是基于有限词汇量的语音识别,同时因为有识别速度的要求,识别主要靠的是提前的预判,在用户说出下一个音节之前,已经提前预判了基本上属于一个什么样的范围,否则如果每次都全局搜索速度上是达不到的;而音乐歌曲旋律的识别,基本上相当于无限词汇量的识别,是不是理论上就很难解决呢?

粗浅想法描述一下,这样的一个项目,可大可小,如果认真做起来,三个模块其中的任一个都有很多工作可以做,软件模块主要分三个方面:

A:音乐的预整理。对歌曲的音频进行过滤,将这首音乐的keyfeature取出来,或者是音调,或者是针对一个时间序列的采样,把这些元数据提取出来,然后保存下来,以备将来的匹配比较。

B:数据的重组和查找。将采样下来的数据,进行一种最优的保存,或者是数据库,或者是建内存表(B+树或者),总之是进行一种格式化的存贮,目的是当C模块将所需要查找的序列作为关键字查找时,能够迅速的进行匹配,并搜索出最相似的结果集返回,这部分工作,对搜索算法算法有较高的要求,因为如果即使语音识别的问题解决了,速度上太慢的话,也是没有太大意义的。

C:语音识别部分。用户哼唱一首歌曲,实时的将音频数据保存,并分析用户哼唱的片断,调用B模块进行分析。

不过我看了一下代码,真多啊,sigh,也不知道有没有戏