精华内容
下载资源
问答
  • 分离webrtc的降噪(Noise Suppression)部分 webrtc是Google开源的优秀音视频...语音降噪模块就包含在audio processing中。本文的降噪算法引用自https://github.com/cpuimage/WebRTC_NS,用c语言编写,需要编译成ex...

     

    分离webrtc的降噪(Noise Suppression)部分

    webrtc是Google开源的优秀音视频处理及传输代码库,其中包含了audio processing、video processing算法。语音降噪模块就包含在audio processing中。本文的降噪算法引用自https://github.com/cpuimage/WebRTC_NS,用c语言编写,需要编译成exe可执行程序供c#程序调用。

    使用cmake生成vs2017工程

    cmake是一款生成c/c++项目的工具,下载地址:https://cmake.org/download/。
    https://github.com/cpuimage/WebRTC_NS源码中包含了cmake所需的CMakeLists.txt.使用cmake工具生成vs工程的时候有两个坑需要注意:

    • CMakeLists.txt的最后一句“target_link_libraries(ns m)”需要注释掉,否则会报link-error.
    • cmake生成的工程main.c编码为uft.因为源文件里边有汉字,需改变编码为GBK。改变编码的方法为在vs2017打开的工程中,点击“文件”下面的“高级保存选项”。如果没有“高级保存选项”的请百度如何调出。

    编译c源程序

    在vs2017中按f5编译源程序。生成完之后会在debug文件下出现:
    生成的目标文件
    使用方法:拖一个.wav文件到ns.exe上面,出现命令行窗口。命令行执行完毕后会在.wav文件旁边生成一个降噪后的.wav文件。
    本人之前的项目HtwMedia(https://blog.csdn.net/u014220286/article/details/88895867)中就用到了ns.exe程序,对语音识别性能提高还是比较明显的。

    C#中调用ns.exe

    	  string wav = "wav文件绝对路径";
                using (Process proc = new Process())
                {
                    proc.StartInfo.FileName = "ns.exe";
                    proc.StartInfo.Arguments = string.Format(@" ""{0}""", wav);
                    proc.Start();
                    proc.WaitForExit();
                }
    

    上述ns.exe要是绝对路径。可以设置环境变量只写ns.exe.c#中设置环境变量的方法:

    Environment.SetEnvironmentVariable("Path", Environment.GetEnvironmentVariable("Path") + ";exe路径");
    

    上述语句要写两遍才执行,具体原因未可知。

    转载于:https://www.cnblogs.com/Hard/p/csharp-use-webrtc-noisesuppression.html

    展开全文
  • WebRTC语音对讲无声音

    千次阅读 2019-09-12 15:41:20
    最近在搞Webrtc对讲的降噪和回音消除,找了代码然后改了非常多。。。。发现一个很无语的Bug:进入程序进行语音对讲,有偶发扬声器无法播放声音,但如果首先进行视频通话,再语音,刚正常。 刚开始怀疑是代码改了...

    最近在搞Webrtc对讲的降噪和回音消除,找了代码然后改了非常多。。。。发现一个很无语的Bug:进入程序进行语音对讲,有偶发扬声器无法播放声音,但如果首先进行视频通话,再语音,刚正常。

    刚开始怀疑是代码改了哪里改错了,查了很多资料,Webrtc输出的每行日志都排查了,还是不行,后来直接通过查看喇叭设置,发现那个setSpeakerphoneOn已被关闭了,真是Orz.....

    然后直接在启动程序时,先检查下喇叭是否关了,如果关了就重新打开,下面附上打开和关闭的代码吧:

    打开扬声器:

    //检查是否关闭扬声器了,有些机子开机时,默认是关闭状态,此时需要打开,否则出不了声
        private void openSpeaker() {
            try{
                AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
                audioManager.setMode(AudioManager.ROUTE_SPEAKER);
                if(!audioManager.isSpeakerphoneOn()) {
                    audioManager.setMode(AudioManager.MODE_IN_CALL);
                    audioManager.setSpeakerphoneOn(true);
                    audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,
                            audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL ),
                            AudioManager.STREAM_VOICE_CALL);
                    Log.e(PeerConnectionHelper.TAG, "single chat room speaker close,now is going to open it..." + audioManager.isSpeakerphoneOn());
                }else{
                    Log.e(PeerConnectionHelper.TAG, "single chat room speaker have open..." + audioManager.isSpeakerphoneOn());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    然后关闭扬声器代码:

    public void closeSpeaker() {
            try {
                AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
                if(audioManager != null) {
                    if(audioManager.isSpeakerphoneOn()) {
                        audioManager.setSpeakerphoneOn(false);
                        audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL ,AudioManager.STREAM_VOICE_CALL);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

     

    展开全文
  • 本博客记录webRTC降噪(NS)模块的编译与测试过程获取NS功能、测试代码以及测试语音文件,点击链接使用VS2015打开方案文件并生成在VS右侧资源管理器中,右键选择生成在debug文件夹中生成结果文件将“byby_8K_1C_...

    本博文记录webRTC中降噪(NS)、自动增益控制(AGC)模块的编译与测试过程

    获取NS功能、测试代码以及测试语音文件,点击链接

    使用VS(我的版本是2015)打开方案文件并生成


    在VS右侧资源管理器中,右键选择生成


    在debug文件夹中生成结果文件


    将“byby_8K_1C_16bit.pcm”、“lhydd_1C_16bit_32K.pcm”复制到和WebRtcAudioTest.exe文件统一个路径下


    执行WebRtcAudioTest.exe,对两个音频文件进行处理,产生结果文件


    将音频文件导入到audacity中,对比处理效果




    展开全文
  • webrtc 单通道降噪算法(ANS)简析

    千次阅读 2018-06-26 11:10:06
    WebRtcNs_ProcessCore 降噪处理核心函数1、分为高频、低频子带进行处理,采样率为8-16K时,一般只用到低频处理。2、计算输入带噪语音数据帧的能量值。3、FFT傅里叶变换4、计算维纳滤波增益,通过直接判决法计算先验...

    WebRtcNs_ProcessCore 降噪处理核心函数

    1、分为高频、低频子带进行处理,采样率为8-16K时,一般只用到低频处理。

    2、计算输入带噪语音数据帧的能量值。

    3FFT傅里叶变换

    4、计算维纳滤波增益,通过直接判决法计算先验信噪比。

      theFilter=snrPrior / (self->overdrive+ snrPrior);

    5、对维纳增益值根据用户设置的降噪等级,进行下溢与上溢处理。

    6、进行维纳滤波,并将增益后的频域数据(频率降噪通过IFFT转为时域数据。

    7、对降噪等级进行判断,如果等级为0 ,则维纳滤波输出则为最后的降噪结果。否则,继续处理。

    8、计算维纳滤波后的帧数据能量,并计算与步骤2中的能量比值,  gain = (float)sqrt(energy2/ (energy1 + 1.f));

    9、当gain值大于0.5,计算因子1factor1= 1.f + 1.3f * (gain - B_LIM);并判断gain *factor1是否大于1。如果大于1,因子1则为  factor1 = 1.f / gain;

    10、当gain值小于0.5,判断gain是否小于增益下限值(用户设定),如果小于,则  gain = self->denoiseBound;计算因子2factor2= 1.f - 0.3f * (B_LIM - gain);

    11、结合先验语音概率计算最终的增益因子。

            factor = self->priorSpeechProb* factor1  +  (1.f - self->priorSpeechProb) * factor2;

    12、在时域,将维纳滤波处理后的数据与facror相乘,得到最后的降噪结果。

    13、如果对信号进行了分子带处理,则接下来需要对高频部分的自带进行处理。

      13.1 计算高频部分的先验语音概率,这是是用低频子带求平均得到  

               avgProbSpeechHB = avgProbSpeechHB / ((float)deltaBweHB); 

      13.2 将上一步计算的结果进行缩放,乘以上一帧处理后的输出信噪比。

              avgProbSpeechHB*= sumMagnProcess / sumMagnAnalyze;

      13.3 对先验语音概率进行映射,得到初步的增益值。  

             gainModHB = 0.5f * (1.f + (float)tanh(gainMapParHB* avgProbSpeechHBTmp));

      13.4 计算第四步中得到的各频点的维纳滤波增益的平均值。

            avgFilterGainHB= avgFilterGainHB / ((float)(deltaGainHB));

      13.5 将上两步中得到的结果进行平滑,得到高频部分最终的增益因子。

            gainTimeDomainHB= 0.5f * gainModHB + 0.5f * avgFilterGainHB;

     

    WebRtcNs_AnalyzeCore 噪声及语音概率估计核心函数。

        噪声估计和过滤包括:初始噪声估计、后验和先验SNR的判决引导(DD)更新、语音/噪声可能性测定,可能性测定是基于似然比(LR)因子进行的,而似然比是使用后验和先验SNR,以及语音概率密度函数(HF)模型 (如高斯、拉普拉斯算子、伽马、超高斯等),还有根据特征建模、噪声估计更新。

        初始噪声估计是以分位数噪声估计为基础。噪声估计受分位数参数控制,该参数以q表示。根据初始噪声估计步骤确定的噪声估计,仅能用作促进噪声更新/估计的后续流程的初始条件。

    1、对输入的时域帧数据进行FFT

    2、计算能量和幅度

    3、初始噪声估计

    4、利用前50帧,计算得到高斯白噪声、粉红噪声模型,联合白噪声、粉红噪声模型,得到建模的混合噪声模型。

    5、对初始估计的噪声利用上一步建好的模型进行加权。

    6、直接判决法计算先验信噪比和后验信噪比。

    7、提取 LRT特征、频谱平坦度、频谱差异度三个特征。

    8、利用三个特征以及先验信噪比和后验信噪比分别计算语音/噪声概率检测。

       indicator0 = 0.5f *((float)tanh(widthPrior* (logLrtTimeAvgKsum - threshPrior0)) + 1.f);

       indicator1 = 0.5f * ((float)tanh((float)sgnMap* widthPrior * (threshPrior1 - tmpFloat1)) + 1.f);

       indicator2 = 0.5f * ((float)tanh(widthPrior* (tmpFloat1 - threshPrior2)) + 1.f);

    9、对上述三个概率值进行加权求和,得到综合概率。

       indPrior = weightIndPrior0 * indicator0 +weightIndPrior1 * indicator1 + weightIndPrior2 * indicator2;

    10、通过前面得到的噪声估计值、语音/噪声概率值,对噪声估计进行更新,得到最后的噪声估计值。

    noiseUpdateTmp = 0.9 * self->noisePrev[i]+ 0.1* (probNonSpeech * magn[i] +  probSpeech *

    self->noisePrev[i]);


    参考资料:https://blog.csdn.net/shichaog/article/details/52514816

    展开全文
  • webrtc中的VAD 语音检测

    千次阅读 2019-10-16 11:41:42
    VAD(Voice Activity Detection)算法的作用是检测是否是人的语音,它的使用范围极广,降噪语音识别等领域都需要有vad检测。vad检测有很多方法,这里我们之介绍一下webrtc里面的vad检测。  webrtc的vad检测原理...
  • 源码:https://edu.csdn.net/course/play/8542 课程计划:
  • 不是,有些公司语音效果也很牛b,只不过他们的产品的终端用户不是个人,所以我们很少听说,但这不影响他们在业界的口碑,为了避嫌,名字我就不说了,大家以后有用到的时候自然会知道。 2、做图像识别和语音识别的...
  • 基本思想是把时域信号转换到频域进行...使用C#对语音信号降噪处理比较困难,查阅资料知道可以使用Webrtc或者speex进行降噪,不过核心思想都是把C++转成dll库供C#调用,由于对C++不是很熟悉,折腾了好久都没有实现,...
  • 范围极广,降噪语音识别等领域都需要有vad检测。vad检测有很多方法,这里我们之介绍一 下webrtc里面的vad检测。  webrtc的vad检测原理是根据人声的频谱范围,把输入的频谱分成六个子带 (80Hz~250Hz,250Hz~...
  • webrtc中的噪声抑制之二:噪声估计模型 ...使用维纳滤波进行语音降噪的过程,其实是把降噪过程视为一个线性时不变系统,当带噪语音通过这个系统时,在均方误差最小化准则下,使得系统的输出与期望的纯净语音信号...
  • 关于WebRtc的一些个人理解

    千次阅读 2015-11-11 15:48:35
    update2019-04-23:技术日新月异,webrtc成长很快,相关的音视频问题逐一得到解决,特别是语音效果(回音、降噪、增益、静音检测)和视频拥塞控制已展露锋芒,音视频效果越来越优秀,同时苹果也宣布支持。...
  • WebRTC简介 WebRTC是一个由Google发起的实时通信解决方案, 其中包含音视频采集、编解码、数据传输、音视频展示等功能。 虽然其名为WebRTC,但是实际上它不仅支持Web之间...NetEQ语音信号处理 回声消除和降噪 会话管理
  • 从刚开始的离线录音降噪,到后来的实时语音(类似王者农药的开黑)。背景(熟悉什么是语音活动检测的同学可以略过)以王者里面的5人小房间开黑为例子,大家并不是一直在房间里嚷嚷,总有安安静静打怪的时候,这个...
  • 这些传统的方法大多数都被前辈大佬们研究透了,也已经很成熟了,也是目前工业上用于前端去噪的常用方法,经典的webrtc中的降噪目前使用的就是基于维纳滤波的降噪算法,有兴趣的可以拿来webrtc语音处理的c代码一下,...
  • webrtc音频引擎之audio_processing介绍

    千次阅读 2015-10-15 17:49:21
    audio_processing模块为语音处理的精华,包含音频的回音处理、降噪处理、自动增益处理等音频的核心处理业务算法,(静音检测在另外一个模块,不知道新版与这基本算法放到了同一个模块木有) , 模块结构为: ...
  • 这些传统的方法大多数都被前辈大佬们研究透了,也已经很成熟了,也是目前工业上用于前端去噪的常用方法,经典的webrtc中的降噪目前使用的就是基于维纳滤波的降噪算法,有兴趣的可以拿来webrtc语音处理的c代码一下,...
  • 这些传统的方法大多数都被前辈大佬们研究透了,也已经很成熟了,也是目前工业上用于前端去噪的常用方法,经典的webrtc中的降噪目前使用的就是基于维纳滤波的降噪算法,有兴趣的可以拿来webrtc语音处理的c代码一下,...
  • 文章目录需求规格设计Socket TCP/IP通信讯飞语音转写Json解析音频文件解析说话人识别jar包的使用...WebRTC降噪原理 Socket TCP/IP通信 19/07/01 #Java实现,可在客户端与服务端间传输文件 讯飞语音转写 19/0...
  • 对音频进行vad及降噪处理

    千次阅读 2018-07-26 23:25:01
    这几天在小组比赛中负责对语音进行处理,处理有两个,一个是用vad对音频进行端点确定,即把静音部分去掉,第二个是对音频进行降噪处理,之前在网上找了许多资料,才找到谷歌之前开发过一个叫webrtc的轮子,里面集成...
  • 如何做一个Windows端的多人语音通话?目前我知道可以做音频采集的有DirectSound,portAudio,Naudio。但语音的网络数据怎么传输不知道,mic的噪音如何抑制,回声消除?多人语音接收端的混音算法...降噪已知Speex,Webrtc
  • 最近在做一个语音广播的项目,实现语音广播的过程主要是:音频采集、音频编码、音频发送、音频解码和音频播放,这个过程在这里不展开说明,本文主要讲述其中的音频重采样和音频降噪的问题和记录如何解决的思路。...
  • VAD检测原理及其过程

    2020-11-26 09:43:23
    范围极广,降噪语音识别等领域都需要有vad检测。vad检测有很多方法,这里我们之介绍一 下webrtc里面的vad检测。  webrtc的vad检测原理是根据人声的频谱范围,把输入的频谱分成六个子带 (80Hz250Hz,250Hz500Hz,...

空空如也

空空如也

1 2
收藏数 24
精华内容 9
关键字:

webrtc语音降噪