基于windows系统的通过软件拦截声音的方法

文档序号:6602787阅读:918来源:国知局
专利名称:基于windows系统的通过软件拦截声音的方法
技术领域
本发明涉及通过软件处理计算机外部数据的方法,尤指一种基于用户态仿真声音驱动动态链接库(DLL),在WINDOWS系统下实现拦截声音的方法。
背景技术
目前,通用的基于WINDOWS系统的通过软件拦截声音的方法为利用WINDOWS操作系统的控制面板内的多媒体工具,将立体声混音作为录音设备的输入;再利用WINDOWS系统内有关录音(如WaveIn)的API(应用程序接口)或DirectCaptureSound(声音捕获DirectX硬件程序接口)对象,实时捕获声音的输入;再通过ACM(Audio Codec Manager音频编解码管理器)将所捕获声音转换为相应的编码格式;然后将转换后的数据保存到文件或通过网络发送出去。
如图1所示,根据微软公司公开的技术,其WINDOWS NT/2K/XP操作系统的用户态声音的驱动过程为应用程序调用WINDOWS提供的标准多媒体库WINMM.DLL(包含各种有关多媒体如声频和视频操作的API),对WAVE、MIDI等不同格式的声音进行操作(如回放和录音等);再利用管理不同声音格式的编码与解码的库MSACM32.DLL和MSACM32.DRV以及各种ACM对声音数据进行处理;之后将处理后的数据保存为文件或通过网络发送出去。过程中用到的声卡驱动DLL是由声卡硬件厂商提供的DLL,用于调用传递WINMM.DLL的API给操作系统内核(或者说内核态驱动程序),从而实现上述对声音的操作。
但是,使用此方法存在明显的缺陷1、声音数据来自声卡设备的输入,不可避免地带来其他信号的干扰(如麦克风等),导致音质下降,杂音较多,声音失真严重。
2、由于应用程序捕获地是声卡设备的输入,即使在不进行任何声音操作的情况下,应用程序仍在不断的捕获声卡输入设备的模拟信号,这样不仅大大降低系统性能,而且在捕获的声音数据中夹杂了大量的白噪音(静态背景),造成如存储空间、网络带宽等的浪费,增加了后期处理的难度。
3、真实声卡驱动DLL通常是由特定的硬件厂商提供的,既不具有通用性,也不提供任何声音数据的输出接口。

发明内容
为了克服上述缺陷,本发明的目的是提供一种基于WINDOWS系统的通过软件拦截声音的方法,它可提高音质、减少白噪音,并且具有良好的通用性。
为实现上述目的,本发明采用以下技术方案一种基于WINDOWS系统的通过软件拦截声音的方法,它包括以下步骤A、过一通用声卡驱动DLL实现仿真一个声音设备;B、原始声音数据通过该声音设备复制到共享内存区;C、将共享内存区内的声音数据进行格式转换;D、存储和/或发送转换后的声音数据。
其中,通过一通用声卡驱动DLL实现仿真一个声音设备,包括以下步骤a、调用WINMM.DLL提供的API,找到一个真实的物理设备;b、获得找到的真实物理设备的属性,并传递给该仿真声音设备;c、通过控制面板中的声音和音频设备CPL或通过系统提供的混音设备API,将仿真后的声音设备设为首选;d、启动通用声卡驱动DLL仿真声音设备,将对该仿真设备的操作映射为对真实设备的操作。
其中,调用WINMM.DLL提供的API,找到一个真实的物理设备,它具体包括以下步骤(1)、识别系统当前安装的声音设备的个数n;(2)、从0到n-1记录该数值;(3)、查询每个设备的属性;(4)、找到真实的物理设备。
本发明一种基于WINDOWS系统的通过软件拦截声音的方法,采用以上步骤,可利用软件在声音数据到达声音设备前进行拦截,这样其得到的是原始数字信号,而不是从声音设备输出后的模拟信号,可以保证音质不会失真;由于只有当系统向声音设备输出声音,本发明才会产生数据输出,因此本发明不会夹杂由声音播放设备产生的大量白噪音,减少了后期数据处理的难度,从而提高系统的利用率;同时该通用声卡驱动DLL仿真系统已安装的声音设备,不受硬件厂商的限制,具有良好的通用性;此外由于本发明利用系统通过系统提供的ACM(音频编解码管理器)进行压缩,只要系统安装了相应的Codec(音频编解码模块),便可以产生任何形式的音频流输出。


图1为本发明的现有技术原理框2为本发明的实现总流程3为本发明仿真声音播放设备的流程4为本发明查找真实物理设备的流程图具体实施方式
为使本发明的目的、技术方案和效果更加清楚明白,以下结合附图及实施例对本发明再做进一步详细的说明。
如图2所示,本发明一种基于WINDOWS系统的通过软件拦截声音的方法,此方法的实现包括以下具体步骤A.通过通用声卡驱动DLL实现仿真一个声音设备;B.原始声音数据通过该声音设备复制到共享内存区;C.将共享内存区内的声音数据进行格式转换;D.存储和/或发送转换后的声音数据。
所述步骤A.通过通用声卡驱动DLL实现仿真一个声音设备,其中的通用声卡驱动DLL是按照Windows标准Installabe Driver(可安装驱动)格式编写的。按照此标准编写的DLL,在装入系统后,仿真一个声音设备。
如图3所示,仿真声音播放设备,包括以下具体步骤a、调用WINMM.DLL提供的函数waveOutGetNumDevs的API,找到一个真实的物理设备;b、处理WODM_GETDEVCAPS消息,调用WINMM.DLL提供的函数waveOutGetDevCaps的API得到所找到的真实物理设备的属性,将其传递给该仿真的声音设备;c、通过Windows控制面板中的声音和音频设备CPL(计算机程序库)或通过系统提供的混音设备API,将仿真后的声音设备设为首选;d、通用声卡驱动DLL启动仿真声音设备,并通过处理仿真设备的消息队列(包括WODM_OPEN,WODM_CLOSE,WODM_WRITE,WODM_PAUSE等消息)将对仿真设备的操作映射为真实设备的操作。
如图4所示,找到一个真实的物理设备,包括以下具体步骤(1)、记录系统安装的声音设备个数-n;(2)、将该数值减1,实现从0开始计算系统设备个数,以确定在函数中使用的系统当前安装的声音设备的标记0-n-1;(3)、从0-n-1依次查询每个设备的属性;(4)、将对比值为真的设备,确定为真实的物理设备。
所述步骤B.原始声音数据通过该声音设备复制到共享内存区。对于WODM_WRITE(声音输出设备写消息)来说,通用声卡驱动DLL将数据传递给真实设备后,同时拷贝一个声音数据的副本,之后,将其复制到共享内存区保存。
所述步骤C.以阻塞或非阻塞方式从共享内存区读取声音数据,并对其进行格式转换。
其中,以非阻塞方式读取声音数据,如果共享内存区没有声音数据,对共享内存区的读操作会马上返回一个错误,停止此次读操作;对于以阻塞方式读取声音数据,如果共享内存区没有声音数据,则对共享内存区的读操作会被阻塞在调用处,直到此次操作有数据返回才停止。
所述的步骤C中的声音数据转换,可以对声音数据按照一定的编码格式进行压缩。本实施例中,声音数据转换采用了目前流行的Mp3(MPEG Layer 3)压缩格式,通过系统提供的ACM(音频编解码管理库)调用Lame Mp3 Codec(Mp3编解码器)将读取到的声音数据压缩为Mp3格式音频流。(其中MPEG为Motion Picture Experts Group动态图象专家组,即一种压缩比率较大的活动图像和声音的压缩标准)所述步骤D.存储和/或发送转换后的声音数据。在本实施例中,可将传递来的MP3音频流按照完整的Frame(帧)格式打包分组,通过TCP/IP(传输控制协议/网际协议)、RTP(实时传输协议)或HTTP(超文本传输协议)等网络协议发送到网络。
权利要求
1.一种基于WINDOWS系统的通过软件拦截声音的方法,其特征在于包括以下步骤A.通过一通用声卡驱动DLL实现仿真一个声音设备;B.将原始声音数据通过该声音设备复制到共享内存区;C.将共享内存区内的声音数据进行格式转换;D.存储和/或发送转换后的声音数据。
2.根据权利要求1所述的一种基于WINDOWS系统的通过软件拦截声音的方法,其特征在于所述的步骤A.进一步包括以下步骤a、调用WINMM.DLL提供的API,找到一个真实的物理设备;b、获得找到的真实物理设备的属性,并传递给该仿真声音设备;c、通过控制面板中的声音和音频设备CPL或通过系统提供的混音设备API,将仿真后的声音设备设为首选;d、启动通用声卡驱动DLL仿真声音设备,将对该仿真设备的操作映射为对真实设备的操作。
3.根据权利要求2所述的一种基于WINDOWS系统的通过软件拦截声音的方法,其特征在于所述的步骤a.进一步包括以下步骤(1)、识别系统当前安装的声音设备的个数n;(2)、从0到n-1记录该数值;(3)、查询每个设备的属性;(4)、找到真实的物理设备。
全文摘要
本发明公开了一种基于WINDOWS系统的通过软件拦截声音的方法,它包括以下步骤A通过一通用声卡驱动DLL实现仿真一个声音设备;B将声音数据通过该声音设备复制到共享内存区;C将共享内存区内的声音数据进行格式转换;D存储和/或发送转换后的声音数据。采用本发明一种利用软件拦截Windows声音的方法所拦截的是原始的声音数据,因此可以保证音质不失真、减少了白噪声,并且具有良好的通用性,能够应用于远程播放、多媒体教学等领域。
文档编号G06F9/455GK1506818SQ0215550
公开日2004年6月23日 申请日期2002年12月9日 优先权日2002年12月9日
发明者孙成昆, 刘渤, 徐超, 易贤群 申请人:联想(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1