PDA

View Full Version : 想使用DirectShow实现“调音、混音”,


jallon
05-22-2009, 02:52 PM
达人们,向大家求问几个问题:
我想使用DirectShow实现“对几个音频文 (可以是不同的格式)”进行“调节 音调、音色、响度,以及混音的操作 ,我刚刚开始接触DShow,对这方面不 了解。
我的大概思路是:(以两个音频文件 例)
不知道是否可行?请大侠们指教一下 多谢!!!

1.在FilterGraph建立两个Source Filter,然后使用Render分别形成一条音 处理链路,
2.然后枚举Filter Graph中的所有Filter找到每条分支的Render Filter(只有输入Pin,分别为C、D),顺 次找到分别与之直接相连的Filter(A、B );
3.接下来的解决思路我想有两种:
(方法1)创建一个Transform Filter(由CBaseFilter继承),实现一个多 inPin单outPin的Filter。需要设定input pin的数量(需要设定一个上限)。由 需要改写CBaseFilter和与之相关的类( inputPin、outputPin、PropertyPage、Media Type等)的相关函数,剩下的交给Render Filter(可以是音频设备,也可以是写 视频文件中)。其中,对音频文件的 有操作可以再这个Transform进行操作, 最后的Render Filter只负责播放或者写文件。
(方法2)同样实现一个Transform Filter,但这个是一个inPin和一个outPin的 ,只负责每一路的音频文件的处理, 负责混音的操作(这相对方法1的Transf orm Filter要简单些,但同样需要处理与之 关的类的相关操作)。同时,这种方 还需要自己实现一个Render Filter,是多输入的,用于混音操作( 别人说这要比实现一个Transform Filter复杂得多);
4.将AC、BD断开,并将自己的Filter添加 Filter Graph中,并连接起来,然后删除多余的 Filter,最后Run。