美文网首页流媒体
Speex 双声道回声消除中frame_size的含义

Speex 双声道回声消除中frame_size的含义

作者: FlyingPenguin | 来源:发表于2018-04-19 18:22 被阅读29次

Speex中的回声消除默认是按单声道处理的
那么Speex支持直接对双声道的数据进行回声消除吗?
答案是肯定的,10年前,Speex的作者Jean-Marc Valin已经给出了答案。

Two related news here.
First, I've merged in support for stereo (or more channels) acoustic echo cancellation in mainline. The standard AEC remains the same, but I added a speex_echo_state_init_mc() call that takes the number of speakers and microphones.

作者说可以用speex_echo_state_init_mc函数来提供对多声道的支持。

speex_echo_state_init_mc定义如下:

speex_echo_state_init_mc

nb_mic表示麦克风(近端数据)的通道数
nb_speakers 表示扬声器(远端数据)的通道数

查看speex_echo_state_init的源码:

/** Creates a new echo canceller state */
EXPORT SpeexEchoState *speex_echo_state_init(int frame_size, int filter_length)
{
    return speex_echo_state_init_mc(frame_size, filter_length, 1, 1);
}

可以看出speex_echo_state_init中实质就是调用了speex_echo_state_init_mc
其中nb_mic和nb_speakers默认设置为1,也就是按单声道处理。

frame_size的含义

Speex中通过speex_echo_state_init函数来初始化frame_size和滤波器长度filter_length:

speex_echo_state_init

speex_echo_state_init_mcspeex_echo_state_init有一个共同的参数。

frame_size  
Number of samples to process at one time (should correspond to 10-20 ms)

frame_size代表啥? 对于单声道和双声道有什么区别?

单声道

如果单声道,假设采样率48k,这里取10ms的数据:

frame_size = 48000 * 10 / 1000 = 480
双声道

对于双声道中frame_size的含义,以下是Jean-Marc Valin对一位提问者的回答。

1
2
3
4

总结成一句话:

Jean-Marc Valin escreveu:
In stereo mode, you need to use the init_mc() call and consider the
number of samples per channel. Also, more than 20 ms frames are a bad idea.

frame_size表示the number of samples per channel,也就是单个声道的采样点数,所以双声道甚至多声道时,frame_size和单声道时一样的。

References:

http://lists.xiph.org/pipermail/speex-dev/2008-June/006760.html
http://speex.sourcearchive.com/documentation/1.2~beta4-2/group__SpeexEchoState_g9a7e6da4baf118ea3dcbe2273ccdea30.html
http://lists.xiph.org/pipermail/speex-dev/2009-March/007151.html

相关文章

  • Speex 双声道回声消除中frame_size的含义

    Speex中的回声消除默认是按单声道处理的。那么Speex支持直接对双声道的数据进行回声消除吗?答案是肯定的,10...

  • Speex 一个双声道回声消除的小demo

    Speex中的回声消除可以对双声道(aec stereo)或多声道的数据进行直接处理。以下以双声道进行举例:主要注...

  • Speex回声消除

    1. 概述 Speex AEC是开源的回声消除代码。 回声消除框架图如下 AEC一般的方法使用自适应FIR滤波器设...

  • android 用WebRTC做回音消除

    之前使用speex做回音消除,不知道是没有用对还是其他什么原因,导致回音消除的效果非常差。 好在在GitHub找到...

  • 回声消除概述

    在一般的VOIP软件或视频会议系统中,假设我们只有A和B两个人在通话, 首先,A的声音传给B,B然后用喇叭放出来,...

  • 视频会议的回声发现与消除

    回声是中最常见的声音问题之一。在的调试过程中,回声的发现与消除,是需要系统维护人员重点解决的一个课题。 一、 回声...

  • android 用speex做回音消除

    Android回音消除困扰了我将近一个星期终于解决了。 项目一边是使用Java FX的PC端,一边是Android...

  • 音视频笔记1

    关于 Speex Speex官网:http://speex.org/由于语音对话编解码需要一个免费的开源软件,所以...

  • WebRTC回声消除技术

    1 WebRTC简介 WebRTC是谷歌公司2011年发布的一项技术。WebRTC技术主要用于在支持HTML5的浏...

  • YY语音消除回声

    平时开黑一直用微信语音,最近试了下YY,发现自己说话有很大的回声,百度搜了一下大部分是说调节麦克风的属性,我这边修...

网友评论

    本文标题:Speex 双声道回声消除中frame_size的含义

    本文链接:https://www.haomeiwen.com/subject/ysfgkftx.html