调试程序: C:/DXSDK/Samples/C++/DirectShow/Capture/AudioCap/AudioCap.sln
调试环境:VS2005
过程:
1、BaseClasses编译
Debug版本生成strmbasd.lib, Release版本生成strmbase.lib 。
编译时出现的错误和修改方法在上一章。
2、VS2005配置
配置方法在上一章。
3、注册Filter
(1)WavDest
主要完成的功能是,在结束采集时,即PCM数据全部写入文件之后,再在文件头位置插入一个WAVE格式的数据块。
路径:<dxsdk>/samples/c++/directshow/filters/WavDest下
不需要编译第2个组件
(2)InfTee
实现边听边录音功能。
路径:<dxsdk>/samples/c++/directshow/filters/inftee
编译以上两个工程时都提示找不到largeint.lib的错误。因为VS2005不提供独立的largeint库,所以在工程设置中直接把该库删除即可。
方法: 右键工程名--》属性,在弹出的“***属性页”对话框中找到:配置属性--》链接器--》输入,在右边弹出的对话框中找到“附加依赖项”,点击最右边的“…”按钮,在弹出的对话框中找到 largeint.lib 并删除之。
编译通过后,在相应的Debug or Release版本下可以找到 .ax 文件。如:
C:/DXSDK/Samples/C++/DirectShow/Filters/INFTee/Debug 下可以找到 inftee.ax 文件
进行注册。在命令行状态下(即执行“运行”--》 cmd)执行:
regsvr32 C:/DXSDK/Samples/C++/DirectShow/Filters/WavDest/Debug /wavdest.ax
注销Filter使用命令行参数 /u , 即执行 regsvr32 /u 路径
命令行参数/s 可以禁止执行 regsvr32.exe时弹出提示对话框。
注册完这两个Filter之后,运行AudioCap就可以把录音写入指定文件和边听边录功能了。
现在疑问是,在《DirectShow开发指南》第6章 音频采集 中提到实现边听边录功能的一个方法就是上面提到的手动插入一个Infinite Pin Tee Filter。“其实, 使用ICaptureGraphBuiler2::RenderStream实现起来更简单。它会根据需要自动插入一个Smart Tee Filter,(一个类似于Infinite Pin Tee Filter 的DirectShow标准Filter)。”,可是,没装 InfTee 或者注销掉时,没有边听边录功能。跟踪了代码 这个函数是有运行的,但不知为何实现不了,为什么呢?
我错了~~~~~~原来是不用注册Inftee组件的,开发指南那里说的确实是实现了的。没有听到声音的原因是,运行AudioCap后,“Select an input pin”选项默认的是立体声混音,点击“麦克风音量”后就可以了~~~