2010-07-07 57 views
1

我需要将多达16个通道的PCM音频流分成几个立体声流。 因为我还没有找到任何能够做到的事情,所以我试图编写我的第一个directshow过滤器。能够分裂音频如何分割音频或在directshow中写入分路器滤波器?

任何将非常欢迎,但我假设,所以有我做了什么我必须这样做:

起初,我试图创建一个基于ITransformFilter的过滤器。但是,它似乎只考虑了只有一个输入引脚和一个输出引脚的滤波器。因为我需要几个输出引脚,所以我忽略了它,但也许它可以比我想象的更容易调整,所以任何建议都非常感谢。

然后,我开始基于IBaseFilter。我设法做了一些事情。当输入引脚连接时,我创建必要的输出引脚,并在输入断开连接时销毁它们。但是,当我将任何输出引脚连接到ACM Wrapper(仅用于测试它)时,输入会尝试重新连接,破坏所有输出引脚。 我试图只是不摧毁他们,但后来我检查了我的输入引脚的媒体类型,它已经改变为立体声流。我没有从我的代码中调用QueryAccept。

我怎样才能避免重新连接,或者什么是正确的方法来做分路器滤波器?

编辑2010-07-09: 我已经回到ITransformFilter,但我正在创建必要的引脚。但是我遇到了与IBaseFilter相同的问题:当我将输出引脚连接到ACM Wrapper时,输入引脚将其媒体类型更改为2个通道。 不知道现在该怎么做......

回答

1

您可以看看Windows Server 2003 R2平台SDK中的DMOSample。它也包含在较早的directx sdk中,但不包含在较新的Windows sdk中。您可以在Samples \ Multimedia \ DirectShow \ DMO \ DMOSample中找到它。 Here是本示例的文档。

我看到有人创建了一个基于此的过滤器,它有一个立体声输入和两个单声道输出。不幸的是,我无法发布源代码。

+0

非常感谢!我会看看它。 – raven 2010-07-13 16:50:36

+0

我不确定这是我需要的。看来输出引脚必须预先声明。能够实时创建它们会很好,因为我不知道在输入连接之前有多少频道。如果没有人在一两天内回答,你会选择你的答案。 – raven 2010-07-13 17:28:56

+0

您可以创建16个输出引脚,并只使用所需的引脚。 – wimh 2010-07-15 06:02:27