- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
让我开始这个话题,声明我是 WebRtc 的新手,如果我提到任何半诙谐的话,请耐心等待一种可以原谅的方式。
我正在编写一个应用程序,用于比较 Speex 和 Web RTC AEC3 之间的回声消除性能。[WebRtc AEC3代码库(最新分支):https://webrtc.googlesource.com/src/+/branch-heads/72]
应用程序读取 WAV 文件并将样本提供给 AEC 模块,WAV 编写器保存回声消除的输出,
我有两个输入:1) 扬声器输入或渲染信号或远端信号2) MicInput or Captured Signal or NearEnd Signal
还有一个输出:1) MicOutput- 回声消除的结果。
现在对于 Speex 模块,我看到了一种行为良好的方式。请查看以下文件,它在取消渲染信号方面做得很好捕获的信号。
但是,当我使用 WebRtc Aec3 传递相同的文件时,我收到了一个平坦的信号。下面是AEC3的结果。
它似乎也在抵消原始麦克风信号。
我正在使用以下参数(从 Wav 文件阅读器中提取):采样率:8000 channel : 1位/样本:16 sample 数量:270399一次送入 AEC 的样本数:(10 * SampleRate)/1000 = 80
这是初始化:
m_streamConfig.set_sample_rate_hz(sampleRate);
m_streamConfig.set_num_channels(CHANNEL_COUNT);
// Create a temporary buffer to convert our RTOP input audio data into the webRTC required AudioBuffer.
m_tempBuffer[0] = static_cast<float*> (malloc(sizeof(float) * m_samplesPerBlock));
// Create AEC3.
m_echoCanceller3.reset(new EchoCanceller3(m_echoCanceller3Config, sampleRate, true)); //use high pass filter is true
// Create noise suppression.
m_noiseSuppression.reset(new NoiseSuppressionImpl(&m_criticalSection));
m_noiseSuppression->Initialize(CHANNEL_COUNT, sampleRate);
这就是我调用 API 的方式:
auto renderAudioBuffer = CreateAudioBuffer(spkSamples);
auto capturedAudioBuffer = CreateAudioBuffer(micSamples);
// Analyze capture buffer
m_echoCanceller3->AnalyzeCapture(capturedAudioBuffer.get());
// Analyze render buffer
m_echoCanceller3->AnalyzeRender(renderAudioBuffer.get());
// Cancel echo
m_echoCanceller3->ProcessCapture(
capturedAudioBuffer.get(), false);
// Assuming the analog level is not changed.
//If we want to detect change, need to use gain controller and remember the previously rendered audio's analog level
// Copy the Captured audio out
capturedAudioBuffer->CopyTo(m_streamConfig, m_tempBuffer);
arrayCopy_32f(m_tempBuffer[0], micOut, m_samplesPerBlock);
还有关于参数(delay、echoModel、reverb、noisefloor 等),我使用所有默认值。
谁能告诉我我做错了什么?或者如何通过调整合适的参数让它变得更好?
更新日期:(02/22/2019)找出为什么回声输出静音。似乎 Webrtc AEC3 无法处理 8k 和 16k 采样率,尽管在源代码中有迹象表明它们支持 4 种不同的采样率:8k、16k、32k 和 48k。在输入 32k 和 48k 样本后,我得到了回声消除输出。但是,我没有看到任何回声消除。它只是在为 NearEnd/Mic/Captured 输入输入时吐出准确的样本。是的,可能我缺少关键参数设置。仍在寻求帮助。
最佳答案
最重要的是“delay”这个东西,你可以在audio_processing.h中找到它的定义
设置|延迟|在接收远端的 ProcessReverseStream() 之间的毫秒数frame 和 ProcessStream() 接收包含的近端帧相应的回声。在客户端,这可以表示为延迟 = (t_render - t_analyze) + (t_process - t_capture)在哪里,
- t_analyze is the time a frame is passed to ProcessReverseStream() and
t_render is the time the first sample of the same frame is rendered by
the audio hardware.
- t_capture is the time the first sample of a frame is captured by the
audio hardware and t_process is the time the same frame is passed to
ProcessStream().
2。 EchoCanceller3 延迟
SetAudioBufferDelay(int dealy);
关于c++ - WebRtc Acoustic Echo Cancellation3 (AEC3) 在回声消除后提供平坦的 MicOutPut,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54717086/
在我的 Android 应用程序中,我运行一个计时器并在其他事件发生时取消它: class MyTimerTask extends TimerTask { override bool
如果有待处理的警报,PendingIntent.cancel() 如何影响 AlarmManager。 我应该对两个对象( Intent 和警报管理器)调用取消来取消警报吗?有人可以解释一下他们是如何
我正在研究如何取消闹钟,我遇到了这两种方法。应该在什么情况下使用哪一个,为什么?它们是一样的吗? 我目前正在这样做: Intent alarmIntent = new Intent(ChangeAla
我与一位同事讨论了在表单中取消的“网络标准”是什么。在我们的讨论中,我们以“更改密码”页面为例。我们设计了“发送”按钮和“取消”按钮。两者设计相同。 他声称在网络标准中,取消按钮不再是一个按钮,而是一
我一直在探索协程,我很惊讶地发现在 Job 上调用的 cancel 实际上并没有取消作业,而 cancel 在 scope 上调用会立即取消从 scope 启动的协程。谁能解释一下? 作业取消示例。
我正在使用 iOS 应用内购买。 我想请求最新的取消日期和取消总数,最好是 100% 正确的结果。 我正在使用 Apple 的 verifyreceipt 调用 ( https://developer
我在 ionic 2 应用程序中使用谷歌地图,我希望我的标记根据 map 的缩放级别显示/消失。所以我在函数“ionViewDidEnter”中添加了以下行: this.map.addList
在我们的网络应用程序中,我将 Angular-Materials $mdDialog 与确认对象一起使用。是否可以将按钮的顺序从取消-确定更改为确定-取消?并将初始焦点设置为取消按钮?也许通过 CSS
在我的表单“别名”的Form_beforeupdate()事件上,我有这个... If IsNull(Me.txtFName) And IsNull(Me.txtLName) Then MsgBox
在 QInputDialog 中,如何去掉 OK 和 Cancel 按钮中的图标? 注意取消和确定的图标。我查看了属性按钮,不知道如何删除它们。 最佳答案 解决方案的策略是先获取按钮,但是这些属于QD
我正在使用 MFMailComposeViewController Controller ,如下所示: MFMailComposeViewController *picker1 = [[MFMailC
当我尝试连接在不同机器上运行的对等点时出现此错误。我在订购者的 docker 日志中发现此错误。在不同机器上运行的 peer2 的 docker 日志中有错误 获取连接失败:无法连接到任何端点:[or
我注意到,当用户通过提示窗口输入文本时,提示将返回null并继续继续执行代码。我希望取消按钮按照其指示执行操作并取消。我尝试了几个 if 语句,包括: var x= prompt("Please en
我有一个定制对话框winform。在它上面,我有一个标签,文本框和2个按钮(“确定”和“取消”)。它还声明并定义重载的执行方法以传递不同的参数列表。 对话框Winform的调用方式如下: var th
我刚刚使用 Visual Studio 2017 安装了 Xamarin 并创建了一个新的空白应用程序。 当我按 F5 运行应用程序时,出现以下错误:构建已被取消。但是在构建解决方案时(ctrl+sh
Closed. This question needs debugging details。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。 3年前关闭。 I
我在使用 NgRx 的 Angular 应用程序中使用轮询方案。 为了简化事情,我有如下内容: public stopPolling$ = createEffect(() => this.ac
在我读到的规范中: The bubbles and cancelable attributes must return the values they were initialized to. 我找不
我有一个 dataGetter 类,在其中加载必要的数据(部分 url 地址、电子邮件等),然后调用 AsyncTask。我使用一个抽屉菜单,其中每个 fragment 在创建时都会从新线程调用 da
我在使用 NgRx 的 Angular 应用程序中使用轮询方案。 为了简化事情,我有如下内容: public stopPolling$ = createEffect(() => this.ac
我是一名优秀的程序员,十分优秀!