- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试使用 Speex 编解码器库执行回声消除 (AEC)。根据 Speex 文档,我需要执行两个调用:
speex_echo_playback(echo_state, echo_frame);
每次播放一个音频帧,并且
speex_echo_capture(echo_state, input_frame, output_frame);
对于捕获的每一帧。
因为我使用的是 DirectSound,所以我想我可以在调用 speex_echo_playback 时使用主 DirectSound 缓冲区作为 echo_frame,例如,
DWORD offset = 0;
DWORD length = 0;
LPVOID block1, block2;
DWORD length1, length2;
DWORD flags = DSBLOCK_ENTIREBUFFER;
HRESULT hr = primary_buffer->Lock(
offset
, length
, &block1
, &length1
, &block2
, &length2
, flags
);
// Would like to convert the buffer into a form that
// speex_echo_capture() can use.
// Why does length1 == length2 == 0 always?
hr = primary_buffer->Unlock( block1, length1, block2, length2 );
文档上确实说这些是只写指针,但无论如何我自己都不能使用缓冲区数据吗?
这基本上就是我创建缓冲区的方式:
CComPtr< IDirectSoundBuffer > primary_buffer;
DSBUFFERDESC primarydesc = { sizeof( DSBUFFERDESC ),
DSBCAPS_PRIMARYBUFFER | DSBCAPS_CTRL3D | DSBCAPS_LOCHARDWARE,
0, 0, NULL, DS3DALG_HRTF_LIGHT };
HRESULT hr = directsound_->CreateSoundBuffer(
&primarydesc, &primary_buffer, NULL );
看来,使用 DirectSound 缓冲区本身的替代方法是使用 speex_decode() 的输出并进行我自己的软件混合。
对于让 Speex 和 DirectSound 协同工作有什么建议或建议吗?感谢您的帮助。
最佳答案
我做过一次。但我的方法如下:
我从来没有直接使用过主缓冲区。相反,我只使用一个辅助缓冲区。我有两个线程——回放线程和捕获线程。此外,我还使用了另一个 speex 函数 - speex_echo_cancellation .
因此,在我的播放线程中,我将当前播放帧保存在全局缓冲区中,并在名为 speex_echo_cancellation 函数的捕获线程中保存了当前捕获帧和先前存储的播放帧。
DMO 不适用于我,因为我还必须支持 Windows XP。
您还可以查看 - speex mailing lists archive甚至更好subscribe here获取更多有趣的信息。
祝你好运
安东尼
关于c++ - 使用 Speex 和 DirectSound 的回声消除 (AEC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/826554/
当我输入echo $ JAVA_HOME时,我得到的是$ JAVA_HOME而不是jdk的位置。 我正确设置了环境变量的路径: 变量名称:JAVA_HOME 变量值:C:\ Program Files
所以我今天了解到可以通过以下命令设置换行符: set nl=^&echo. 例如: set nl=^&echo. echo Hello%nl%world 产量 Hello world 但是为什么这行
我正在尝试为我在 android 中的音频播放器项目设置音效高音和回声,但我不知道如何去做。 我已经在谷歌上搜索了很多,并问了一个也与之相关的问题,但那东西现在不起作用。 任何帮助将不胜感激.....
还有其他问题and answers在这个站点上建议,要创建回声或延迟效果,您只需添加一个音频样本以及过去存储的音频样本。因此,我有以下 Java 类: public class DelayAMod e
首先感谢您的阅读。让我解释一下我面临的问题。所以我成功安装了 Pusher 和 Laravel Echo 并尝试在我的 dash.blade.php 中使用它,这就是我导入 app.js 的方式文件:
你好,我正在尝试从我的其他脚本调用的外部 python 脚本中获取结果(我知道是 1)。什么时候回显$?从命令行我得到 1 但是当我尝试调用 echo $?从 python 获取 python 脚本的
我已经使用 webRTC 和 tomcat 7 创建了一个应用程序。我能够连接两个客户端进行视频聊天。一个客户端在索尼笔记本电脑中,另一个在 HP 台式电脑(带有罗技网络摄像头)中。视频工作正常,但音
在 CAKEPHP 中,函数 $this->element('sql_dump') 在屏幕上打印执行的 sql 查询。$this->element('sql_dump') 仅适用于 debug mod
所以 - 我正在使用图像捕获工具 (snagit)。默认情况下,图像本身会保存到剪贴板(捕获后)。我希望将图像的路径存储在剪贴板中。 该应用程序允许我(而不是)保存文件,并将图像作为参数传递给外部应用
您能给我推荐一些简单、免费的库来修改输入 wav 文件吗?我发现并尝试使用irrKlang,但它缺少自定义效果(它没有任何级别的自定义。您可以只使用效果失真,但不能设置任何内容) 如果有类似的库,那就
我正在两台设备之间传输麦克风音频,一切正常,但回声很差。 这是我在做什么 阅读线程 int sampleFreq = 22050; int channelConfig = AudioF
我有一个在本地运行 Redis 的 Laravel-echo-server。 我创建了一个测试 API 端点,它发出可广播的事件。 在 http://localhost:8000/api/web-so
所以我现在面临着一个问题。任何建议都会很好。首先,我使用我的代码从 arduino 接收数据,然后我使用 bluetoothChat 并更改了 uuid,我可以配对,一切都很好,但是如果我将整个字符串
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭
这个问题在这里已经有了答案: What is the $? (dollar question mark) variable in shell scripting? [duplicate] (9 个回
我正在尝试使用 pusher 来处理 laravel echo,我正在 windows localhost (wamp/laravel 5.8) 上工作 所以我已经安装了所需的库 我的包.json {
我正在使用 electron-vue 和 laravel 后端构建一个桌面应用程序。我在项目中设置 Laravel Echo 并使用 Echo.channel()工作得很好。现在我尝试使用带有 Ech
我可以使用 HTTPS 设置在本地环境中运行 laravel-echo-server 就好了。但是,我的生产服务器(基于 Forge)似乎存在问题: Client cannot be authenti
这是负责向 string 添加新行的命令 echo "string" | xclip -selection clipboard 最佳答案 echo -n "string" | xclip -selec
我是一名优秀的程序员,十分优秀!