Delphi 如何使用DSPACK将自定义音频缓冲区注入DirectX过滤器图形?

Delphi 如何使用DSPACK将自定义音频缓冲区注入DirectX过滤器图形?,delphi,directx,directshow,skype,dspack,Delphi,Directx,Directshow,Skype,Dspack,我正在使用Delphi6和DSPACK来做一些涉及音频和DirectX的操作。我找到了“输入”端,在这里我将一个枚举音频输入设备分配给一个TFilter对象,并将该过滤器连接到一个TSampleGrabber对象,这为我提供了向Skype发送音频所需的音频缓冲区。我需要弄清楚的是这个图的逻辑倒数。我通过套接字从Skype接收音频缓冲区。我需要创建一个具有过滤器的图形,该过滤器将作为TSampleGrabber的补充。换句话说,如果一个TFilter没有像TSampleGrabber那样在新音频可

我正在使用Delphi6和DSPACK来做一些涉及音频和DirectX的操作。我找到了“输入”端,在这里我将一个枚举音频输入设备分配给一个TFilter对象,并将该过滤器连接到一个TSampleGrabber对象,这为我提供了向Skype发送音频所需的音频缓冲区。我需要弄清楚的是这个图的逻辑倒数。我通过套接字从Skype接收音频缓冲区。我需要创建一个具有过滤器的图形,该过滤器将作为TSampleGrabber的补充。换句话说,如果一个TFilter没有像TSampleGrabber那样在新音频可用时触发的事件期间提供音频缓冲区,那么它将有一个类似的事件,在需要新音频为图表提供信息时触发。在该“输出”图的末尾,将有一个指定给其中一个枚举音频输出设备的TFilter,该设备的输入引脚将连接到该TSampleGrabber反向倍频器的输出引脚


有人知道怎么做吗?当然,我更愿意避免编写自己的自定义过滤器COM对象来完成这项工作。我希望有一个现有的TFilter,它可以接受将自定义音频缓冲区混合到DirectX筛选器图中。

数据注入筛选器的一个常见起点是。这将创建一个带有仅输出引脚的过滤器,该引脚将数据注入DirectShow管道,数据可以是任何类型,通常是视频或音频


正如您提到的Delphi和DSPack,后者已移植了此示例(请参阅\Demos\D6-D7\Filters\PushSource)。

谢谢@Roman R。关于将一个过滤器连接到多个输出过滤器,您有什么提示或注意事项吗?也就是说,从多个过滤器的输出引脚到同一个过滤器的输入引脚进行多个连接调用,特别是在设置媒体格式类型时,情况并非如此。每个过滤器图都有一个单独的过滤器实例,DirectShow本身不提供将实例连接在一起的方法。不过你可以自己做。任何筛选器实例只能参与一个图形,一个管脚只能有一个管脚用于对等连接。因此,如果您计划在多个应用程序中使用多个连接的过滤器,那么管理内部连接的部分完全取决于您。我可能已经在Roman R中糟糕地表达了我的问题。我不是说混合图,相反,我希望将同一图形中两个过滤器的输出管脚连接到同一图形中另一个过滤器的输入管脚(多对一连接)。例如,将两个推源滤波器的输出管脚连接到另一个滤波器的相同输入管脚,从而将两个推源滤波器的音频混合在一起。这可能吗?如果可能的话,有什么提示或注意事项吗,特别是在音频媒体格式类型方面?这是可能的,而且基本上是好的-所有多路复用过滤器都是这样工作的。不过,您需要注意一件事:您应该仔细地给输出样本加上时间戳,以便来自2+个源的样本在时间上匹配。音频数据确实有时间戳,它们非常重要。我可以立即想到一些音频时间戳很重要的事情:(a)视频+音频播放的唇同步,否则如何计算特定音频片段在特定时间段内准确播放?(b) 确保音频数据是连续的,没有任何间隙?如果没有时间戳,下游节点将不得不假设数据是连续的,而它可能不是(c)实时源的速率匹配需要知道原始源时间戳。