Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14497796
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:56:13

下载本文示例代码
天极IT资讯短信服务 电脑小技巧 function check4() { if (dn.mobile.value.length!=11) { alert("手机号码不正确!"); dn.mobile.focus(); return false; } return true; } 资费:包月5元手机: 介绍:细处着手,巧处用功。高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些。电脑小技巧收集最新奇招高招,让你轻松踏上高手之路。   现在的所谓多媒体电脑一般都会有声卡(软声卡或硬声卡),有声卡就能进行音频的捕捉。大家一定熟悉Windows自带的附件“录音机”程序,可以通过麦克风进行录音,最终生成一个Wave文件。读完本文之后,你就会发现,自己使用DirectShow写一个音频捕捉的应用程序,原来也是这么的容易!  大家知道,DirectShow对硬件的支持是通过特定的包装Filter来实现的。声卡使用的是Audio Capture Filter,Filter内部使用以waveIn开头的一套API实现(如waveInOpen等)。运行GraphEdit,插入Filter时,在“Audio Capture Sources”目录下,我们就能看到所有代表本地机器上的声卡的各个Filter(有的机器装了几张声卡,这里就会有几个Filter)。在Filter Graph中加入这个Filter,我们发现这个Filter有很多Input pin,如Line In、CD Audio、Microphone、Stereo Mix等等;有一个Capture output pin。需要说明的是,在Filter Graph中,这些Input pin并没有真正的数据流入,它们只是声卡的各个输入端子的象征性表示;所以这些Input pin永远也不用连接。  下面我们来看一下如何创建一个音频捕捉程序。首先,当然是加入一个Audio Capture Filter。大家知道,DirectShow加入一个硬件Filter,都是要靠“枚举”;声卡Filter也不例外。代表声卡的Filter都注册在CLSID_AudioInputDeviceCategory目录下,使用系统设备枚举器枚举这个目录,就能发现我们想要创建的声卡对象。(如何枚举这里就不再赘述了。)当成功加入声卡Filter后,接下去的问题就是要将这个Filter与其他Filter相连。比如,我们想捕捉生成一个Wave文件,那么我们还需加入一个Wave Dest Filter和一个File Writer Filter,然后依次将它们相连。需要说明的是,Wave Dest Filter是微软DirectX SDK带的一个例子,在samples\Multimedia\DirectShow\Filters\WavDest目录下,我们必须首先编译这个例子并且注册这个Filter;这个Filter的功能是,当我们结束捕捉时,往Wave文件中写入一个文件头信息。下图是在GraphEdit中的Filter连接图:  下面是一段创建音频捕捉程序的框架代码,可供参考: void BuildAudioCaptureGraph(void) // Warning! No error checking here.{ IBaseFilter *pSrc = NULL, *pWaveDest = NULL, *pWriter = NULL; IFileSinkFilter *pSink= NULL; IGraphBuilder *pGraph; // Create the Filter Graph Manager. CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**)&pGraph); // Add the audio capture filter.  FindAudioCapture(&pSrc); // Assume that this function enumerates  // audio capture devices and picks one. pGraph->AddFilter(pSrc, L"Capture"); // Add the WavDest and the File Writer. AddFilterByClsid(pGraph, L"WavDest", CLSID_WavDest, &pWavDest); AddFilterByClsid(pGraph, L"File Writer", CLSID_FileWriter, &pWriter); // Set the file name. pWriter->QueryInterface(IID_IFileSinkFilter, (void**)&pSink); pSink->SetFileName(L"C:\\MyWackyWav.wav", NULL); // Hook everything up. ConnectTwoFilters(pGraph, pSrc, pWavDest); ConnectTwoFilters(pGraph, pWavDest, pWriter);} 共2页。 1 2 : 天极IT资讯短信服务 电脑小技巧 function check4() { if (dn.mobile.value.length!=11) { alert("手机号码不正确!"); dn.mobile.focus(); return false; } return true; } 资费:包月5元手机: 介绍:细处着手,巧处用功。高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些。电脑小技巧收集最新奇招高招,让你轻松踏上高手之路。   现在的所谓多媒体电脑一般都会有声卡(软声卡或硬声卡),有声卡就能进行音频的捕捉。大家一定熟悉Windows自带的附件“录音机”程序,可以通过麦克风进行录音,最终生成一个Wave文件。读完本文之后,你就会发现,自己使用DirectShow写一个音频捕捉的应用程序,原来也是这么的容易!  大家知道,DirectShow对硬件的支持是通过特定的包装Filter来实现的。声卡使用的是Audio Capture Filter,Filter内部使用以waveIn开头的一套API实现(如waveInOpen等)。运行GraphEdit,插入Filter时,在“Audio Capture Sources”目录下,我们就能看到所有代表本地机器上的声卡的各个Filter(有的机器装了几张声卡,这里就会有几个Filter)。在Filter Graph中加入这个Filter,我们发现这个Filter有很多Input pin,如Line In、CD Audio、Microphone、Stereo Mix等等;有一个Capture output pin。需要说明的是,在Filter Graph中,这些Input pin并没有真正的数据流入,它们只是声卡的各个输入端子的象征性表示;所以这些Input pin永远也不用连接。  下面我们来看一下如何创建一个音频捕捉程序。首先,当然是加入一个Audio Capture Filter。大家知道,DirectShow加入一个硬件Filter,都是要靠“枚举”;声卡Filter也不例外。代表声卡的Filter都注册在CLSID_AudioInputDeviceCategory目录下,使用系统设备枚举器枚举这个目录,就能发现我们想要创建的声卡对象。(如何枚举这里就不再赘述了。)当成功加入声卡Filter后,接下去的问题就是要将这个Filter与其他Filter相连。比如,我们想捕捉生成一个Wave文件,那么我们还需加入一个Wave Dest Filter和一个File Writer Filter,然后依次将它们相连。需要说明的是,Wave Dest Filter是微软DirectX SDK带的一个例子,在samples\Multimedia\DirectShow\Filters\WavDest目录下,我们必须首先编译这个例子并且注册这个Filter;这个Filter的功能是,当我们结束捕捉时,往Wave文件中写入一个文件头信息。下图是在GraphEdit中的Filter连接图:  下面是一段创建音频捕捉程序的框架代码,可供参考: void BuildAudioCaptureGraph(void) // Warning! No error checking here.{ IBaseFilter *pSrc = NULL, *pWaveDest = NULL, *pWriter = NULL; IFileSinkFilter *pSink= NULL; IGraphBuilder *pGraph; // Create the Filter Graph Manager. CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**)&pGraph); // Add the audio capture filter.  FindAudioCapture(&pSrc); // Assume that this function enumerates  // audio capture devices and picks one. pGraph->AddFilter(pSrc, L"Capture"); // Add the WavDest and the File Writer. AddFilterByClsid(pGraph, L"WavDest", CLSID_WavDest, &pWavDest); AddFilterByClsid(pGraph, L"File Writer", CLSID_FileWriter, &pWriter); // Set the file name. pWriter->QueryInterface(IID_IFileSinkFilter, (void**)&pSink); pSink->SetFileName(L"C:\\MyWackyWav.wav", NULL); // Hook everything up. ConnectTwoFilters(pGraph, pSrc, pWavDest); ConnectTwoFilters(pGraph, pWavDest, pWriter);} 共2页。 1 2 : 下载本文示例代码


DirectShow应用——音频捕捉DirectShow应用——音频捕捉DirectShow应用——音频捕捉DirectShow应用——音频捕捉DirectShow应用——音频捕捉DirectShow应用——音频捕捉DirectShow应用——音频捕捉DirectShow应用——音频捕捉DirectShow应用——音频捕捉DirectShow应用——音频捕捉DirectShow应用——音频捕捉DirectShow应用——音频捕捉DirectShow应用——音频捕捉DirectShow应用——音频捕捉DirectShow应用——音频捕捉
阅读(286) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~