查了很多资料,都只有语音合成和录音的。没有语音识别的资料。
既然不能实现语音识别那么可不可以让程序监控麦克风,比如当麦克风音量大于50时触发一个事件。

解决方案 »

  1.   

    说实话,我现在对这个话题很敏感.前段时间有个GG老是发这个类似的标题的帖子来倒粪.
    音量是可以检测出来的.捕获到声音数据之后可以计算声音的能量.例如进行FFT变换之后显示波形,这个都是根据声音的能量来计算的.
      

  2.   

    关于语音识别C++的例子我这里有个,在PUDN上找的.
    这方面C#的例子应该比较少.
    音量检测不难.找找FFT的例子或者低通滤波的例子看看就OK了.
      

  3.   

    我这里有些例子,不过都是C++的
    1.捕获声音数据(这个步骤LZ应该会吧?就是调用WINDOWS API wave系列函数就可以.用directsound也行)
    如果声音是来自文件的就更简单的,例如是wav的,这样就直接读里面的数据,directsound的例子里有封装好的类,使用起来很方便,如果是mp3等格式的,要先解码.
    2.得到数据就好办了,计算读到的每一桢数据的能量,如果大于某个门限值则触发相应事件.
    3.计算能量可以用fft变化,也可以不变化直接计算.和静音检测的原理一样的.
      

  4.   

    第一点之前做过,直接调用的windows api 保存成wav文件。但是边采集边判断音量就不懂了(就是试试监控每一秒的音量,不等录完以后再判断)。对于第二和第三点之前完全没接触过。看来我还停留在入门阶段呀。。
      

  5.   

    G.723 里有静音检测的代码,你可以下载一个研究一下,静音检测部分在VAD.C这个文件里.
    Init_Vad();
    if (Comp_Vad((short*)tmp)>40)
    {
      //声音能量大于40....
    }
    这样调用一下就可以了.
      

  6.   

            [DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)]
            public static extern int mciSendString(
             string lpstrCommand,
             string lpstrReturnString,
             int uReturnLength,
             int hwndCallback
            );这个是我之前录音的时候的一段代码,直接调用的dll.发送相关命令就可以录音暂停保存。但是在程序中却无法获得保存在内存中的数据。
      

  7.   

    捕获MM_WIM_DATA消息就可以得到数据了.
    void OnMM_WIM_DATA(UINT parm1, LONG parm2);
    parm2里就是声音数据了.
    先找个c++的例子看看吧,然后在试试能不能用c#做个类似的.不知道c#有没有封装好的类,如果有就方便了.
      

  8.   

    说实话,我现在对这个话题很敏感.前段时间有个GG老是发这个类似的标题的帖子来倒粪. 
    音量是可以检测出来的.捕获到声音数据之后可以计算声音的能量.例如进行FFT变换之后显示波形,这个都是根据声音的能量来计算的.