如何编写 DirectX 音频推送源
Posted
技术标签:
【中文标题】如何编写 DirectX 音频推送源【英文标题】:How to write a DirectX audio push source 【发布时间】:2011-09-22 23:05:52 【问题描述】:我想创建一个 DirectX“过滤器”,用于获取单个音频通道。我看过 Platform SDK 示例项目,但缺点是需要 ATL 库。
有没有一种方法可以创建 DirectX 过滤器不借助 ATL 或 MFC?即,以某种方式仅使用 gcc(例如 MinGW)和其他实际免费的工具?
【问题讨论】:
【参考方案1】:如果我理解正确,过滤器必须是 COM 组件。如果需要,您可以从大多数编译器中编写那些。
然而,所涉及的样板文件将是难以置信,我有一个 18kloc 代码库,当变成 COM 组件时变成了 25kloc(最终把它转回来只是因为样板文件 COM 多于实际小插件的代码)。
据我所知,编写 COM 组件并不需要或总是涉及 MFC。
ATL 通过提供模板和函数在编译时处理大量细节,大大简化了这一过程。您也许可以从 GCC 使用它,但我不确定会发生什么;我怀疑它是否能正常工作,尽管它可能会起作用。
没有 ATL,您需要 MIDL 并从那里生成代码。使用免费工具可以做到这一点,它在 Wine 项目的几个地方完成;你可以在那里查看代码和工具链。
无论你在哪里做,如果你坚持使用“实际上免费”的工具(因为它们不是专门为与 COM 一起工作而设计的),这将是一种痛苦,而且是一种严重的痛苦。
【讨论】:
是的,我意识到我正在逆流而上,DirectX 就是这样。我活在希望中。 它确实有效,您可以使用免费工具来完成,但这是一种皇家痛苦。葡萄酒将是第一个寻找例子的地方;很有可能有代码可以做到这一点。【参考方案2】:如果您有 DirectShow 过滤器,最好的起点是PushSource Windows SDK Sample,它会生成视频并使其生成音频。
还要注意 DirectShow 基类是最早的 COM 基类之一,它们不使用 ATL/MFC。基类本身也包含在 Windows SDK 中。
【讨论】:
在我拥有的平台 SDK 中,我尝试的三个示例项目都在寻找 atls.lib 时感到窒息,奇怪的是,他们试图在平台 SDK 目录本身中找到它。有问题的 PSDK 是 2003 版本。是否期望以某种方式将 PSDK“安装”到 MSVC 中,以便 MSVC 将必要的文件添加到 PSDK 中? 我检查了更早的集合 - DirectX 9.0 SDK Update (February 2005) Extras,那里也有这个 PushSource 示例。 atlbase.h 被提到过一次,但我不记得它到底用在哪里了,而且一些基本的 ATL 东西在代码中重复了,所以我认为在没有 ATL 的情况下让它链接起来并不难。以上是关于如何编写 DirectX 音频推送源的主要内容,如果未能解决你的问题,请参考以下文章