问题标签 [echo-cancellation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
google-chrome - Chrome WebRTC 回声消除和外部音频源
我正在使用 Electron(版本 10,Chrome v75)和 WebRTC 构建视频会议应用程序。该应用程序有多个窗口,在每个窗口中,我都有一个单独的 RTCPeerConnection 与不同的应用程序用户。问题是,如果我不使用耳机,会有强烈的回声使应用程序几乎无法使用。
我尝试设置各种getUserMedia
选项,例如echoCancellation: true
or googEchoCancellation: true
, echoCancellationType: "browser"/"system"
,但没有一个能够消除来自各种声源的回声。
这个问题只出现在 Mac 和 Linux 上,而 Windows 非常有效地抑制了回声。
我发现这个 Chromium 问题更详细地描述了一个类似的问题。
此外,当我在 Chrome + Mac 或 Linux 上试用这个Fiddle时(尽管 Chrome 并不适合这种情况,请在此处找到更多详细信息),我看不到回声消除的效果,并且回声仍然存在。然而,同样的事情在 Chrome + Windows 或 Firefox + 任何操作系统上都能完美运行。
Chrome中的AEC(回声消除)是否真的没有考虑到所有声源,有人知道解决方法吗?
c# - Csharp 回声消除 Speex
我想使用 naudio 通过网络与 csharp 进行语音对话。然而,回声正在发生。我使用 libspeexdsp.dll 来避免回声,但回声仍在继续,几乎没用。我想知道我在哪里做错了。我的声音回到我身边。我计算了任何延迟。我想知道我是否应该考虑 speex 数据的其他替代方案。
ios - 在 iOS 上禁用 RemoteIO 和 VPIO 的输入/输出 AGC
由于缺乏文档,CoreAudio 一直是个谜。最近我又碰到了一块石头:
在我的程序中,我来回调用 RemoteIO 和 VoiceProcessingIO (VPIO),并在两者之间更改 AVAudiosession。我尝试使用以下代码关闭 VPIO 上的 AGC:
好吧,我仍然不确定此代码是否会在 VPIO 上禁用麦克风侧或扬声器侧的 AGC,但无论如何,让我们继续。以下是重现问题的顺序:
创建一个具有 PlayAndRecord 音频会话类别的 RemoteIO 输出音频单元,使用它并销毁该单元;
将音频会话切换到仅播放类别;
再次将音频会话切换到 PlayAndRecord 并创建另一个 VPIO,使用它并销毁它;
将音频会话切换到 Playback 然后 PlayAndRecord 类别;
在这些步骤之后,之后创建的任何 RemoteIO/VPIO 都将承载这个放大的麦克风信号(好像总是应用一个巨大的 AGC)并且没有办法返回,直到手动终止应用程序并重新开始。
也许是我的特定序列触发了这个,想知道是否有人以前看过这个并且可能知道正确的解决方法?
java - 用java录音获得巨大的回声
使用 java sound api 录制时,我得到了巨大的回声。但我希望录音没有任何回声。我怎样才能做到这一点 ?或者我的以下两个班级可能有什么问题?
记录器.java
播放器.java
以上两个类是在这个会议应用程序运行时独立运行的简单线程。即使在两个人的谈话中,我也得到了巨大的回响。而这个问题随着更多人的通话而变得更加严重。奇怪的是,即使使用耳机连接的电脑也会出现这个问题。我确定我的代码在这里犯了一些错误。迫切需要一些帮助。
webrtc - 当远端有噪声时,AEC3 抑制近端音频
我将 Chromium 的 AEC3 用于我的应用程序的声学回声消除。回声消除工作正常。但只要扬声器中播放噪音,NearEnd 音频(来自我的麦克风的声音)就会抑制。
我使用这里使用的默认配置https://chromium.googlesource.com/external/webrtc/+/refs/heads/main/api/audio/echo_canceller3_config.h
采样率:48k
我的代码:
有什么我做错了或需要更改任何配置吗?
任何帮助将不胜感激,在此先感谢。
azure - 如果不使用耳机,Azure 语音服务的“回声消除”
我Azure Speech SDK
在我的应用程序中使用语音识别(chrome 扩展)。我现在面临的问题是,如果我不使用耳机,那么会议中另一个人(回声)的讲话就会被识别出来。这不是预期的。
任何人都可以建议一种在 chrome 扩展中echo cancellation
使用的方法吗?Azure Speech SDK
google-chrome - 在 windows 中共享桌面音频时,chrome 如何进行回声消除
众所周知,chrome有一个api接口“getdisplaymedia”,可以捕获桌面和扬声器的音频。请考虑一种基于 webrtc 的会议应用程序。如果一个人(A)将他的桌面和音频分享给其他人,其他人(B)说话,所以 A 的电脑会接收到声音,它会捕获并发送回 A,所以 A 会听到回声,所以我们需要清除回声。我检查了 chrome 的代码,我没有找到任何关于此的代码。但是铬没有这个问题,没有回声产生,铬应该如何让它发生?
java - 如何在 java 应用程序中使用 webRTC 特定模块
我有一个简单的java 应用程序,应用程序客户端可以向服务器发送/接收纯音频 UDP 数据包,服务器会将音频数据包中继给除发件人以外的所有人。
现在如何在我的应用程序端使用webRTC EchoCancellation模块或其他功能模块?我发现可以使用 JNI 和 webRTC c/c++ 库(尝试并失败),但我需要一个良好的启动来了解我应该使用庞大的 webRTC 代码库的哪一部分以及如何使其工作。
任何帮助都非常感谢,并在此先感谢..!!
javascript - 使用 getDisplayMedia() 捕获系统音频时防止回声
我正在构建一个 JavaScript 应用程序以在单个页面上同时显示屏幕共享和相机输入。目的是使用这些应用程序自己的共享工具将该浏览器选项卡共享到其他应用程序(Zoom 等)中(所以我自己没有使用 WebRTC)。一切都很好,除了音频。
我感兴趣的音频来自单个(非基于网络的)应用程序,所以我知道捕获它的唯一方法是捕获整个屏幕和系统音频。但是,如果我将这个媒体分配给一个视频对象(练习的重点),我就会被困在一块石头和一个坚硬的地方之间。如果我将视频对象静音,听起来不错,但是,将选项卡共享给外部应用程序不会发送任何音频,因为。如果我不使视频对象静音,我会得到回声——不是来自我的麦克风,而仅仅是因为来自视频对象的声音现在是系统音频的一部分,然后会反馈到屏幕共享中。
问题对我来说很清楚,解决方案不是。原则上,echoCancellation 设置似乎是为处理这个问题量身定做的,但它没有任何效果。否则我没有正确使用它。我将它作为对 getDisplayMedia() 调用的约束:
并调用:
关于它是如何工作的,我有什么遗漏吗?或者我可以使用一些技巧来使我的应用程序的输出作为“标签音频”提供给想要共享标签的程序,但不知何故不将其包含在系统音频中?
我尝试阅读有关 Web Audio API 的内容,看看是否有帮助,这似乎很有希望,但它也相当令人难以抗拒。我真的是一个新手。
audio - 串音取消
我有一个关于“串扰消除”技术的一般问题。
在那里完成的大部分工作是“单个听众的串音消除,两个扬声器与头部/听众对称”
例如,如果有人想消除来自远离听众的扬声器的串音,那么消除扬声器的最佳位置是什么?一般来说,我的问题是,如果消除扬声器应该尽可能靠近给出串音的扬声器以获得最大消除?或者任何职位都可以帮助取消?
假设房间是反光的,而不是一个完美的消声室。