一种基于WINDOWS系统的通过软件拦截声音的方法,其特征在于包括以下步骤: A.通过一通用声卡驱动DLL实现仿真一个声音设备; B.将原始声音数据通过该声音设备复制到共享内存区; C.将共享内存区内的声音数据进行格式转换; D.存储和/或发送转换后的声音数据。(*该技术在2022年保护过期,可自由使用*)
【技术实现步骤摘要】
本专利技术涉及通过软件处理计算机外部数据的方法,尤指一种基于用户态仿真声音驱动动态链接库(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.存储和/或发本文档来自技高网...
【技术保护点】
【技术特征摘要】
【专利技术属性】
技术研发人员:孙成昆,刘渤,徐超,易贤群,
申请(专利权)人:联想北京有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。