我用waveIn进行录音,感觉没有对着话筒说话时录进去了很多噪音。而windows附件下的录音机也录了噪音,但比我的要小,请问怎么使录进去的噪音小一点,或者是这样判别是否为噪音?我分析了噪音值和有声音的值,好象值都差不多啊!

解决方案 »

  1.   

    呵呵,我的程序是这样,我想它可能是用了某种静噪算法,或者干脆就是用DirectSound来采样的?一起研究一下吧。
      

  2.   

    谢谢2ndboy(丢丢) !
    用DirectSound来采样效果也不好,我觉得还没有waveIn...好
      

  3.   

    //---------------------------------------------------------------------------
    //过滤没有音频数据的音包,减少网络负载
    //---------------------------------------------------------------------------
    BOOL CAudioMgr::HaveEnoughVoiceData(char *wavebuf, int buflen)
    {
    float totalcount=0;
    float avercount=0;
    int GoodCount=0;
    for(int i=0; i<buflen; i++)
    totalcount += (float)wavebuf[i];
    avercount = (float)(totalcount/buflen); for(i=0; i<buflen; i++)
    {
    if((float)wavebuf[i] > (avercount*(1+0.03)) || (float)wavebuf[i] < (avercount*(1-0.03)))
    GoodCount++;
    }
    if((float)(GoodCount/buflen) >0.05)
    return TRUE;
    else 
    return FALSE;
    }
      

  4.   

    see this
    http://www.codeproject.com/audio/fister.asp
    http://www.codeproject.com/audio/wave_class_for_playing_and_recording.asp
      

  5.   

    99263() ,我觉得你这种方法只能判断这个时候是否全是噪音,如果说话时还不是把噪音也包括进去了?而且,我试了一下好象判断的也不准确。 wuxuan(真心英雄) ,你说的两个网址我好象都打不开。
      

  6.   

    freelybird(阿愚)的方法 我试过了,也没什么效果,因为噪音好象每个值是差不多大的(比如我取的数据长度是1024,那么这1024个值基本上是相同的),所以在以后的声音录制过程重减去差不多大的数据是没有什么效果的。而且我觉得不应该单纯减去噪音值,减完了后还要加上静音时的值才行。