【问题标题】:Voice Echo Problem语音回声问题
【发布时间】:2009-02-26 19:31:00
【问题描述】:

我正在尝试使用 Adob​​e Flex 构建视频聊天程序,但回声存在很大问题。如果参与者不使用耳机,他们所说的一切都会回声。更糟糕的是,它们实际上可以创建回声的正反馈循环,直到麦克风静音才会结束。

有人在 Flex/Flash 平台上找到了解决方案吗?

我的软件正在使用 Speex 编解码器,我已尽最大努力消除所有缓冲(即,它是实时流,我将缓冲长度设置为 0)。环回选项关闭,“使用回声抑制”打开。我正在使用Red5 服务器进行视频和音频流传输。

任何帮助将不胜感激。

【问题讨论】:

    标签: apache-flex flash red5 signal-processing


    【解决方案1】:

    这是 Adob​​e 软件中的一个已知问题,目前没有解决办法。

    目前你只能解决这个问题。

    您应该在您的应用程序中实现 Push-to-Talk 模式,让用户在遇到音质问题时可以轻松切换到 Push-to-Talk。

    如果应用程序的所有用户都有耳机,那么他们就不必诉诸一键通

    如果您的应用程序正在进行多对多会议,允许用户请求发言人令牌可能是一个有趣的想法。

    使用基于suggestion of tst 的方法,可以让应用程序检查哪些人在说话,然后自动授予扬声器令牌,而不是让用户手动请求它。显然,必须进行可用性测试以确保这在实践中运作良好。

    有关该错误的更多信息

    您可以参考以下 Adob​​e 错误报告了解更多详情:

    错误描述如下:

    Flash 播放器尚不支持 AEC。 Flash player 10 beta 也没有 AEC 支持。开发人员需要内置 AEC 来创建方便的 Web 服务,并提供实时音频/视频通信,而无需用户佩戴耳机。根据 Speex 项目网站,Speex 支持 AEC。请为 Flash Player 10 的发布版本添加 AEC 支持,以使其适合通信 web 服务。

    【讨论】:

    • AEC 可从 Adob​​e 获得,但它位于其专有播放器中(如果我没记错的话,用于 Connect)。使用 Red5 + Xuggle 在服务器上进行 AEC 是可能的,但从与我交谈过的每个人看来,这很难做到。
    【解决方案2】:

    您需要实施一些过滤,以确保扬声器的所有输出都从麦克风输入中消除(或尽可能接近)。我不知道执行此操作的具体工具,但基本思想是您获取输入和输出的并行时间片,然后从输入中减去输出的波形。由于延迟,您可能必须引入偏移量以使事情匹配。

    【讨论】:

      【解决方案3】:

      我在网络会议系统中遇到了同样的问题,但我在网络上找不到任何解决方案。据我了解,“使用回声抑制”将仅取消由环回产生的回声。但我提出了一个简单的解决方案 - 并不完美,但总比没有好:

      every 50ms check Microphone.activityLevel
      
      if during last 1500ms activityLevel was greater than 20
      then Microphone.gain *= 0.8
      

      【讨论】:

        【解决方案4】:

        您还可以通过低通滤波器传递流以减少回声

        【讨论】:

        • 回波为什么会是高频?
        • 低通滤波器会在一定程度上减少正反馈循环,并且在某些情况下会破坏反馈循环。
        【解决方案5】:

        另一个部分解决方案是在输入电平低于某个阈值时停止发送。这样,一旦有人停止说话,回声就会消失。

        【讨论】:

          【解决方案6】:

          您可以尝试使用卷积过滤器,它会尝试将麦克风输入与您发送到扬声器的最近输出相关联。当您检测到麦克风输入与最近的输出相似时,只需将麦克风静音,直到相关性消失。 (但 IANAX,我不是专家)

          【讨论】:

          • 如果你必须解释你的首字母缩写词,也许你不应该使用它。只是一个想法。
          【解决方案7】:

          1) 你应该定义问题 - 如果这种情况发生在没有人说话、扬声器发出声音之后,或者只有当很多人同时说话时等等......

          2) 请注意,与大多数软件问题不同,在该领域中,没有一种解决方案可以 100% 有效,而是由多种方法组成,并且通常效果很好,但并非一直有效。

          因此,您应该实现上面的一些想法,将我的想法添加到这个受人尊敬的列表中:

          a) 首先调整录音电平、增益等...

          b) 尝试插入从样本录制到播放时间的延迟。 使用尝试和错误方法来计算延迟。

          c)你有均衡器吗? 调整它 - 有时问题出在单个频率范围内,可能是低电平的......

          如果你的努力没有奏效,问题更严重,你需要在 Flex 中找到,或者实现某种“回声消除”,这可以简单或智能地完成,我相信有些地方有开源。

          【讨论】:

            【解决方案8】:

            我的妻子做了一个关于回声消除的自适应冷杉滤波的硕士项目。只要你知道一个来源,它似乎就能够管理可变延迟,你知道。尽管对于您的应用程序来说,这似乎有点过头了。查看adaptive filterfir filter 上的维基百科页面和 matlab 中的 wolfram fir filter 代码作为起点。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-06-24
              • 1970-01-01
              • 2012-08-24
              • 1970-01-01
              • 1970-01-01
              • 2011-08-20
              • 1970-01-01
              • 2011-04-18
              相关资源
              最近更新 更多