语音回声问题

发布于 2024-07-14 09:54:02 字数 358 浏览 11 评论 0原文

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

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

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

任何帮助,将不胜感激。

I'm trying to build a video chat program using Adobe Flex but there is a giant problem with echos. If the participants arn't using headsets, everything they say echos. Worse, they can actually create positive feedback loop of echos that won't end until the mics are muted.

Has anyone found a solution for this on the Flex/Flash platform?

My software is using the Speex codec and I've done my best to eliminate all buffering (i.e. it's a live stream and I set the buffer length to 0). The loop back option is turned off and the "Use Echo Suppression" is turned on. I'm using the Red5 server for the video and audio streaming.

Any help would be appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

梦纸 2024-07-21 09:54:02

这是 Adob​​e 软件中的一个已知问题,目前尚无解决方案。

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

您应该在应用程序中实现一键通模式,并让用户在遇到音质问题时能够轻松切换到一键通。

如果应用程序的所有用户都拥有耳机,那么他们就不必求助于一键通功能。

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

使用基于建议的方法tst可能会可以让应用程序检查哪些人正在讲话,然后自动授予发言者令牌,而不是让用户手动请求它。 显然,必须进行可用性测试以确保其在实践中运行良好。

有关该错误的更多信息

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

Bug 描述如下:

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

This is a known problem in Adobe's software for which there is no fix presently.

For now you can only work around the problem.

You should implement a Push-to-Talk mode in your application and make it easy for users to switch to Push-to-Talk if they are experiencing sound quality problems.

If all users of the application have headsets then they won't have to resort to Push-to-Talk.

If your application is doing many-to-many conferencing it might be an interesting idea to allow users to request a speaker token.

Using an approach based on the suggestion of tst it might be possible to have the application checking which people are talking and then granting the speaker token automatically, rather than have users manually requesting it. Obviously usability testing would have to conducted to ensure this works well in practice.

More info on the bug

You can refer to the following Adobe bug report for more details:

The bug description reads as follows:

Flash player has no AEC support yet. There is no AEC support in Flash player 10 beta also. Developers need built-in AEC to create convenient webservices with live audio/video communication without requirement for user to have a headset. According to Speex project website Speex supports AEC. Please add AEC support for release version of Flash Player 10 to make suitable for communication webservices.

软糯酥胸 2024-07-21 09:54:02

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

You'll need to implement some filtering to make sure that everything output from the speakers is eliminated from the mic input (or as close as possible). I'm not aware of the specific tools to do this, but the basic idea is that you take parallel time slices of the input and output, and you subtract the wave form of the output from the input. Due to latency, you might have to introduce an offset so things match up.

回眸一笑 2024-07-21 09:54:02

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

every 50ms check Microphone.activityLevel

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

I had the same problem in my webconference system and I couldn't find any solution on the web. As far as I understand, "Use Echo Suppression" will cancel only echo made by a loop back. But I've made a simple solution - not perfect, but still better than nothing:

every 50ms check Microphone.activityLevel

if during last 1500ms activityLevel was greater than 20
then Microphone.gain *= 0.8
夜无邪 2024-07-21 09:54:02

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

Also You can pass stream via low-pass filter for some reducing echoing

轻拂→两袖风尘 2024-07-21 09:54:02

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

Another partial solution is to stop sending when the input level drops below some threshold. This way, echoes will die down once someone stops talking.

酷炫老祖宗 2024-07-21 09:54:02

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

You might try a convolution filter, which would attempt to correlate microphone input with recent output that you sent to the speakers. When you detect that the microphone input is similar to the recent output, just mute the microphone until the correlation disappears. (but IANAX, I am not an eXpert)

流绪微梦 2024-07-21 09:54:02

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

2) 请注意,与大多数软件问题不同,在这个领域中,不存在任何问题100% 有效的解决方案,而是由多种方法组成的解决方案,并且通常只能很好地工作,但并非始终有效。

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

a)首先调整录音、增益等的级别...

b)尝试插入从记录样本到时间的延迟它被播放了。
为了计算延迟,使用了试错法。

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

如果你的努力不起作用,问题会更严重,你需要在 Flex 中找到,或者实施某种“回声消除”,这可以简单或智能地完成,我确信某个地方有开源的。

1) You should define the problem -
if this happens when no one is talking, right after a sound is heard from the speakers, or only when a lot of people talk at once etc...

2) note that in this field unlike most software problems, there isn't one solution that works 100%, rather the solution is composed of several methods, and only works very good usually but not all the time.

thus you should implement some of the idea's above, to add mine to this respected list:

a) start by adjusting the levels of recording, gain, etc...

b)try to insert a delay from the time the samples are recorded to time it is played.
to figure the delay a try and error method is used.

c)Have you any equalizer?
adjust it - sometimes the trouble is in a single frequency range, probably the low level ones...

if your efforts doesn't work the problem is more severe, you'll need to either find in Flex, or to implement some sort of 'echo cancellation', This can be done simply or smart, I'm sure that there is open source some where.

空宴 2024-07-21 09:54:02

我妻子做了一个关于用于回声消除的自适应冷杉滤波的硕士项目。 只要您知道一个来源,它似乎就能够管理可变延迟,而您确实知道这一点。 对于您的应用程序来说,这似乎有点矫枉过正。 查看关于自适应过滤器fir 过滤器,以及 Wolfram fir 过滤 代码为起点。

my wife did a masters project on adaptive fir filtering for echo cancelling. it seemed to be able to manage variable delay as long as you knew one source, which you do. this seems like overkill though for your application. check out the wikipedia pages on adaptive filter, fir filter, and the wolfram fir filter code in matlab for a starting point.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文