电脑不能录音,麦克风是新的,绝对没问题,用电脑里的录音器录音时,录音窗口没有波纹波动显示。怎么办?

电脑不能录音,麦克风是新的,绝对没问题,用电脑里的录音器录音时,录音窗口没有波纹波动显示。怎么办?,第1张

话筒和电脑的连接线不行或接入不良。

还有话筒和音箱太进,只会发出很尖或很粗的声音,专业点叫低频消叫 或高音消叫。/

电脑系统不能正常出声,首先检查音箱电源是否被打开、与电脑连接的音频线是否正确连接,然后检查声卡的驱动程序,发现Windows的系统托盘区域没有显示“小喇叭”图标,怀疑没有安装声卡驱动程序。打开“设备管理器”进行查看,看到其中有一个“未知设备”。打开它的属性窗口,单击按钮,根据安装向导一步步进行,指定声卡驱动程序的安装路径,安装了声卡的驱动程序。重启电脑后,故障排除。

提示:如果安装Windows 2000/XP *** 作系统,大部分情况下不用再安装声卡驱动程序, *** 作系统会自动识别并安装合适的驱动程序。而且,在Windows XP中,默认情况下不在系统托盘里显示“小喇叭”图标,但不代表没有安装声卡驱动程序。

电脑使用正常,通过音箱能够正常听见声音,但换成耳机后,听见的都是杂音,不能正常使用。

根据现象分析,使用音箱能够播放声音,说明声卡没有问题,更换为耳机出现故障,怀疑是耳机有问题。准备将耳机取下换到其他电脑上检查时,发现耳机插在了麦克风(MIC)端口。将耳机插到扬声器(Speaker)端口,故障消失。

很久没有使用音箱,某天打开使用,发现没有声音。

首先检查声卡驱动是否正确安装,查看音箱和声卡的连接是否正确,并确认音箱的电源已打开。调节音量旋钮,依然没有声音。怀疑是声卡与其他硬件有冲突,仔细查看有关设置,发现系统的音量控制中,波形控制被调成0了。拖动滑块调节音量,声音从音箱中逐渐传出。

使用电脑播放歌曲或者影片时,有时会出现失真的情况,在高音时有点变声。

声音失真的原因有多种,常见的有以下这些:

★ 声卡驱动程序不合适或者存在BUG,安装最新的配套声卡驱动程序即可解决问题。

★ 系统内存在硬件冲突。使用“设备管理器”检查,如果存在带有叹号标记的设备,查看属性,必要时修改设置或者重新安装。

★ 声卡和系统兼容性不好。如果安装最新的驱动程序没有效果,就只能更换声卡了。

★ 音箱质量对音效的影响很大,提高音箱的档次能显著提供声音的品质。

声卡和音箱工作基本世瞎正常,但在Windows 98系统中播放WAV音频文件时,总是报错,不能正常出声。

在检查系统设置时,通过“控制面板”打开多媒体属性窗口,在选项卡中发现音频设备列表中有两个设备。禁用其中一个后,故障消失。

新购一套带环绕立体声的5.1有源电脑音箱,接到电脑上后发现后置的两个环绕音箱没有声音。

根据现象分析,可能是播放音频文件的程序不支持环绕立体声,或者是设置不当造成的。在Windows *** 作系统中,可以设置所使用音箱的类型。以Windows XP为例,打开“控制面板”,双击图标,打开窗口,单击选区里的按钮,在打开的对话框的选项卡中,展开下拉列表,选择所使用的音箱类型,例如。确认后关闭各窗口。

以前可以使用麦克风进行录音,某日发现不能录音了。录音时,声音可以从耳机里正常传出,但系统不能记录下来。

根据现象分析,耳机和麦克风都没有问题,声卡本身也正常,可能是设置方面的问题。从“控制面板”中打开声音属性的设置窗口,发现录音的首选项设置成了调制解调器的音频设备,改为声卡后故障解决。推断为在安装具有语音功能的调制解调器的驱动程序时,其Wave for Modem程序“抢夺”了系统录音的“地位”。

Windows 98 *** 作系统,Yamaha声卡,只能播放一个程序的声音,例如听歌时打开其他能发声的程序就没有声音了,提示“MMSYSTEM 004指定的设备已经在使用中”。

出现这种情况说明声卡硬件和驱动程序只支持一路数字/模拟转换,不支持多音频流混音。更换为更高版本的驱动程序即可解决此问题,或者升级 *** 作系统,安装高版本 *** 作系统的配套驱动程序。

一台组装电脑,在100MHz外频下各方面正常,超频至120MHz后系统其他方面都正常,但干什么都没声音了。通过替换法检查了声埋返简卡和音箱,都没有损坏。

通过现象分析,可以确定是超频导致了声卡不能正常工作,因为120MHz外频不是一个标准工作频率。将系统外频调回100MHz,声卡恢复了正常。如果系统其他硬件的性能和状态允许,可以尝试一下133MHz外弯裤频,因为这也是一个标准的工作频率,声卡应该能够正常工作。

注意:CPU超频使用能够有限地提高系统的性能,但同时会带来很多问题,可能会引起多种故障,甚至造成硬件损坏。

新安装一块声卡后,一直没有声音。

如果能确定声卡和音箱无硬件故障,驱动程序安装正确,设置无问题,则可能是设备冲突的问题。对于设备冲突导致的无声故障,通常可以采用以下方法解决:

★ 在“设备管理器”中检查声卡属性,查看选项卡中是否报告了冲突现象。如果存在冲突,修改声卡或者发生冲突的设备的中断端口、输入/输出范围地址。如果没有选中复选项,将其选中,试试系统能否自动解决冲突。

★ 进入系统保留资源项目,查看声卡使用的资源是否能设置为保留,不让其他设备使用。

★ 关闭非必需的系统资源占用,例如红外等设备对中断端口的占用。

★ 将声卡更换一个远离AGP插槽的位置,AGP显卡容易和距其最近的PCI插槽上的设备发生冲突。

声卡工作一直不太正常,在有的程序中不能出声,还有些时候播放的声音不连续,甚至变音。

根据现象分析,可能是硬件设备之间兼容性不好所致。登录声卡厂商网站,下载相应型号的最新驱动程序,将原驱动程序更新后,故障排除。

提示:如果升级声卡驱动程序不能解决问题,可以尝试更换声卡插槽,或者换一块声卡使用。

新组装一台电脑,VIA芯片组主板,赛扬CPU,声卡为主板集成,安装了Windows XP *** 作系统。使用电脑听CD光盘时,发现只有一个音箱出声。播放各种音频文件,换成耳机也是一样的问题。

根据现象分析,不是硬件设备的问题,怀疑是主板和 *** 作系统的兼容性不太好,升级为最新声卡驱动程序后故障消失。原来,安装 *** 作系统时,系统自动安装了声卡的驱动程序,但并不能很好地配合硬件工作,应该使用主板自带的驱动程序。

由于某原因需要重装Windows 98 *** 作系统,装完后发现声卡驱动程序怎么也装不上。根据声卡说明书上所说的型号,在安装向导中指定了相应文件的路径,但 *** 作系统就是说找不到所需的信息。

根据所出现的情况分析,怀疑是说明书上所说的型号有误,尝试安装声卡附带光盘上的多个其他版本驱动程序,但都没有成功。后来,进入主板BIOS设置程序,启用了Reset Configutionration Data选项,让系统自动检测一下硬件的信息,再进入 *** 作系统安装声卡驱动程序。选择了说明书上所说的型号后,安装成功。

电脑使用时,音箱里经常出现杂音或者爆音。

使用替换法检查,音箱安装到其他电脑上工作正常,说明音箱无故障。开机准备卸下声卡,发现声卡并没有完全插入主板插槽。由于机箱设计不合理,拧紧固定螺丝后,声卡的另一端就会翘起来,不能很好地和插槽接触。将声卡完全插入插槽,适当固定后,开机检查,故障消失。

使用豪杰超级解霸播放VCD影片时,声音效果不好,总有跳跃、间断的现象。

豪杰超级解霸采用浮点运算进行声音解码,处理立体声、环绕等效果时,会占用很大的系统资源,如果系统的硬件配置不够高,就会出现声音跳跃的现象。对于此问题,最好的处理方法就是增加内存、升级CPU,如果条件不具备,可以尝试将超级解霸的声音效果降低(将声音的频率调低,例如22 050Hz),并注意在播放视频时将所有非必要的程序全关闭,以释放尽可能多的内存空间。

在使用电脑时,发出的声音效果不是很好,伴随着正常系统的各种声音总是有“沙沙”的杂音。

首先检查了声卡驱动程序,没有什么问题。接着排除了系统染毒的可能,疑点集中在音箱上。将音箱安装到其他电脑上检查,发现有同样问题,确定为音箱有质量问题。更换音箱后,故障排除。

安装了一块内置调制解调器以后,有时候音箱会突然发出“嘟嘟”的声音,好像轮船的汽笛声。

由于故障出现在安装调制解调器之后,怀疑是它与声卡之间存在电磁干扰。打开机箱,发现声卡和调制解调器安装在相邻的两个PCI插槽上。将调制解调器拔下,安装到远离声卡的插槽,开机检查,故障消失。

提示:有些声卡的抗电磁干扰的能力较差,连CPU、硬盘数据线、网卡等设备都能对它造成较大的干扰,从而引起杂音等问题。如果不能更换声卡,则需要调整各设备的位置,理顺线缆,或者为声卡自制金属屏蔽层。

电脑在工作时,从音箱里不断地发出“咔咔”杂音,重新安装驱动也没有用。

打开“设备管理器”查看,没有任何冲突和其他异常现象。使用替换法检查声卡、音箱等设备,无故障现象。使用杀毒软件扫描系统,发现声卡驱动程序被病毒感染。清除系统中所有病毒后,重新安装声卡驱动程序,故障排除。

使用电脑播放音乐时,一个音箱有声,另一个没有声音。将音箱接到其他电脑上使用正常。

根据现象分析,音箱无故障,问题出在声卡或者播放软件上。在检查音量控制时,发现的滑块被调到了最左边。将滑块调回中间,声音恢复正常。

电脑使用一直正常,某日在用耳机听歌曲时发现只有一个耳朵有声音了。

使用替换法检查,更换一个耳机使用,故障消失。断定为耳机损坏。在使用故障耳机时,晃动插头附近的线,间断出现两个耳朵都有声音的情况,说明插头中的一根线断路。

在Windows *** 作系统下,声卡工作一切正常,进入DOS游戏后,就没有声音了。

经过检查,发现电脑使用的是主板集成的AC'97声卡,这种配置是不支持DOS环境的。如果需要在DOS下使用声卡,最好再安装一块ISA或者PCI声卡。

系统各方面原本工作正常,安装了某版本的DirectX后,声卡没有声音了。

这种现象是声卡和该版本DirectX兼容性不佳导致的,解决方法是几种:卸载DirectX不使用,尝试安装更高版本的DirectX,升级声卡的驱动程序。

使用电脑播放WAV等文件正常,但播放MIDI文件却不能出声。

在Windows 98 *** 作系统的“控制面板”中双击图标,接着选择选项卡,打开有关MIDI输出的下拉列表。选择列表中的各个设备,分别检查能否正常播放MIDI音频文件。如果 *** 作系统是Windows 2000,“控制面板”中的相应图标是,Windows XP中是。

在Windows 98 *** 作系统中,使用系统自带的录音工具,不能进行录音工作。

对于此问题,可以用以下几个方法进行处理:

★ 检查电脑是否正常播放声音,麦克风是否能正常工作,插头是否插入正确的插孔。

★ 从“控制面板”中打开窗口,查看选项卡的是否被禁用,在选项卡中,单击按钮,在d出的对话框中查看麦克风和输入音量是否设置正确。

★ 如果选项卡中的选项为灰色,则说明声卡的安装有问题,建议重新安装声卡驱动程序。

★ 如果声卡自带应用程序,尝试使用该程序进行录音工作。

新购一块声卡,准备安装到电脑中,但主板中原来就集成了声卡,如何禁用它而使用新安装的声卡。

针对不同的主板,禁用集成声卡的方法可能略有不同,但基本上需要从主板跳线或者BIOS设置入手。具体情况可以查看主板说明书,设置主板跳线,或者在主板BIOS中禁用所有和集成声卡有关的选项即可。

用Windows 98 *** 作系统的“CD播放器”播放音乐CD时没有一点声音,但播放器工作正常。

遇到此类问题时,首先应该检查是否采用了WDM版的声卡驱动程序,打开“设备管理器”查看选项下的设备驱动,发现声卡驱动程序没有WDM字样。上网下载了最新WDM版驱动程序,安装后故障排除。另外,使用音频线将声卡与光驱正确连接也可以解决此问题。

说明:WDM(Win32 Driver Model),即Win32驱动程序模型,用于通过提供一种灵活的方式来简化驱动程序的开发。在实现对新硬件的支持上,减少并降低了所必须开发的驱动程序的数量和复杂性。除了通用的平台服务和扩展外,WDM还实现了一个模块化、分层次的微型驱动程序结构。WDM驱动的主要特点是可以让不支持多音频流的声卡支持多音频流,不使用音频线直接听音乐CD等。

新安装一块旧声卡后,系统无法启动,黑屏死机。安装声卡以前系统工作正常。

根据现象分析,在安装声卡以前系统无故障,而声卡的安装导致故障出现,可能是声卡本身或者主板的插槽存在问题。更换声卡检查,发现能正常启动,说明声卡损坏。如果声卡还在保修期,联系维修单位更换或者修改。如果过了保修期,建议再购买一块新的,目前声卡的价格已经很低了,维修的费用都可以买一块新的了。

一台组装电脑,VIA芯片组主板,PCI接口声卡,在使用时声卡总是不太正常, *** 作系统的启动音乐十分尖细,运行程序时偶然出现爆音,播放视频文件时存在声音间断的现象。更新了声卡驱动程序后故障依旧。

此故障看来是VIA芯片组主板和声卡不兼容造成的,如果更新声卡的驱动程序没有作用,可以尝试更新主板的BIOS程序。下载最新主板BIOS文件,成功更新后故障排除。

声卡工作不正常,在Windows *** 作系统的“设备管理器”中,声卡设备上总是显示一个叹号标记。重新安装多次声卡驱动程序,仍不能解决问题。

首先检查声卡驱动程序是否正确,或者下载最新的驱动程序。进入“设备管理器”,卸载声卡,为保险起见,运行注册表编辑器,在其中搜索和声卡有关的键值,备份后删除。重启电脑,系统提示检测到新硬件,跟随安装向导一步步 *** 作,指定驱动程序保存路径,安装声卡的驱动程序。

也可以打开机箱,将声卡换一个插槽重新安装试试。

一台组装电脑,主板集成的声卡,安装了从网上下载的最新驱动程序,一直工作正常。为使用Netmeeting进行可视聊天,新购买一个麦克风,安装好后使用正常,但在Netmeeting中无法使用麦克风,系统总提示“录音设备被占用”,语音传不过去。

经过反复检查,排除了硬件故障和设置问题,问题集中在声卡驱动程序上。从系统中完全卸载了所安装的新版驱动程序,重新安装主板附带光盘上的声卡驱动程序后,故障消失。看来,并不是最新版本的驱动程序就是最好的,只要没有出现问题,就不需要更新驱动程序的版本。

听说安装SoundMAX 3.0可以极大提高AC'97声卡的音效效果,便下载了其最新驱动,但安装时总是失败。

SoundMAX是由Analog Device公司(AC'97标准的制定者之一)推出的,是一种集成在主板上或安装在CNR插槽上的声卡技术,是高质量AC'97音频方案的代表。不过,只有采用AD1885 CODEC的主板才能直接安装SoundMAX 3.0,对于采用AD1881或AD1881a Codec的主板并不能直接安装SoundMAX 3.0。

但是,采用下面的方法可以在非AD1885 CODEC的主板上安装SoundMAX 3.0。

首先使用DirectX诊断工具来查找声卡的Device ID,把诊断信息存为文件,并在其中查找声卡信息,例如Sound Devices Device ID: PCI\VEN_8086&&DEV_2415&&SUBSYS_004011D4。

接下来,在下载的驱动文件中找到相应 *** 作系统的INF文件(例如smwdmCH2.inf或者smwdm.inf),使用“记事本”打开,查找以下字段:

[AnalogDevices]

%*WDM_AC97AUD.DeviceDesc%=WDM_ODMSPDF, pci\ven_8086&&dev_ 2445&&subsys_A0001458

%*WDM_AC97AUD.DeviceDesc%=WDM_ODMSPDFA, pci\ven_8086&&dev_ 2445&&subsys_80B01043

%*WDM_AC97AUD.DeviceDesc%=WDM_ODMSPDFN, pci\ven_8086&&dev_ 2445&&subsys_537011

……

在这些字段的后面加入%*WDM_AC97AUD.DeviceDesc%=WDM_ICHAUD,PCI\VEN_8086&&DEV_ 2415&&SUBSYS_004011D4(即所找到的Device ID),保存并退出。

然后安装SoundMAX 3.0,按照提示重启系统。重启之后,系统提示“No ADI CODEC Found”,关闭提示框,进入声卡的属性窗口,使用修改后的INF文件升级声卡驱动程序。

最后,重新启动系统,完成最后的配置。

使用电脑播放MP3歌曲时,总发生不连贯的现象,特别是在同时打开多个应用程序的时候。

MP3是一种压缩格式文件,播放此类歌曲时需要很大计算量,会占用不小的CPU和内存资源。如果系统配置不够高,同时运行多个应用程序时,就会出现资源不够用的情况,程序就会出现间断现象。如果不能提高电脑的硬件配置,可以将系统虚拟内存适当加大,并转移到可用空间较大的磁盘分区。也可以在播放软件中将歌曲播放的中断级别调高,这样,在多个程序同时要求CPU进行处理时,会优先保证歌曲播放的进行,但此方法会影响其他程序的运行状况。

一台组装电脑,使用的是2.1有源音箱,在播放音频文件时,有一点杂音。声卡和音箱都检查过,没有问题。

首先检查有关声音的设置选项,没发现什么问题。怀疑是音频线质量不好,但更换后故障依旧。后来,查看声卡说明书,得知有源音箱(带有功率放大器)应插在声卡的音频输出(Line Out)端,而不是扬声器(Speaker)端。因为音频输出端输出的信号没有经过功率放大,噪声会小一些。更换插孔后故障消失。

注意:有的声卡只有一个输出端口,而需要通过跳线设置区分Line Out和Speaker。查看声卡说明书可获取有关设置方法。

一台新组装的电脑,使用时音箱中经常出现杂音,检查过声卡和音箱,都是好的,连接没有错误,装完系统后也没有修改过什么设置。

经过反复检查,最后发现是和音频线交叠在一起的其他电线干扰太大所致,将电脑音箱的音频线避开其他线路单独走线,故障消失。

电脑使用的是PCI接口声卡和显卡,在处理声音信息的同时,运行其他大型应用程序,在诸如打开下拉菜单,拖动滚动条,使图形画面变化时,就会发出间歇的“噼啪”声。

这种现象是由于PCI BUS Master控制权引起的。由于很多PCI显卡被默认设置为BUS Master工作方式,这样,在放音时,画面有所动作,显卡瞬间抢过了PCI BUS Master的主控权,势必造成PCI声卡受到干扰,以至出现瞬间的爆音。对于此问题,常用解决方法有两个:一是更换为AGP接口显卡,二是修改system.ini文件。

使用“记事本”打开 *** 作系统安装目录下的system.ini文件,添加或寻找这样两段语句:

[display]

busthrottle=1

optimization=1

如果这两段语句已存在,则将其变量都设为1。保存文件并重新启动电脑,故障即可解决。

最简单的回答:麦克风是将声变成电,扬声器是将电变成声的.也就是麦克风是接收声音并将声转换成电,而扬声器辅射声音的,就是将电转换成声音.

如果要复杂点的话,可以去打电声方面的书,就可以了解全面了.

事实上,声卡是PC的一种多媒体设备,所以可以用Windows 的MCI(Media Control I nterface)命令来控制声卡。MCI它提供了一组与设备无关的控制命令,是一种访问迟握多媒体设备的高层次方法。也正因为它属于一种高层次方法,所以它提供给程序员的灵活性有限,利用MCI命令来控制声卡录音时,程序员不能在录音的过程中访问内存中的采样数据,只有在录音完成后通过访问*.WAV文件才可以得到采样数据,尽管最终还是得到了采样数据,但是这样做一方面嫌其麻烦,更重要的是存取文件需要耗费时间,声卡在采样的过程中有可能会停止下来等待文件 *** 作,造成了采样的断续。在一些实时性要扒旦高求比较高的场合(比如波形分析,实时控制等),断续的采样明显是不行的。 Windows的低级波形音频函数提供了对声卡的最大灵活性的 *** 作,它允许在采样过程中随机地访问内存中的每个采样数据,完全可以克服使用MCI命令所遇到的实时性问题。 Windows以动态连接库Mmsystem.dll的形式提供低级波形音频函数,在Mmsystem.dll中总共包括了以下几个有关波形录入的函数:

waveInAddBuffer :向声音输入设备发送缓冲区 ;waveInClose :关闭声音输入设备

waveInGetDevCaps:获取声音输入设备性能; waveInGetErrorText:获取声音出错信息文本

waveInGetID :获取声音输入设备ID; waveInGetNumDevs:返回声音输入设备数量

waveInGetPosition :获取声音设备输入位置; waveInMessage :向声音输入设备发送信息

waveInOpen :打开声音输入设备; waveInPrepareHeader:预备声音输入缓冲区

waveInReset :停止声音输入设备工作; waveInStart :停止声音输入设备工作

waveInStop :停止声音输入; waveInUnprepareHeader : 清除预备的声音文件头

需要说明的是:不同的编程工具多会含有对这些低级波形音频函数进行说明的头文件(比如在Delphi4.0中,对Mmsystem.dll说明的文件是Mmsystem.pas),所以在不同的编程工具中调用这些函数时有可能会使用不同的名称。

与使用其他设备一样,要想用波形音频函数来控制声卡,必须要经春尺过以下的步骤:

1. 打开波形输入设备。函数waveInOpen用于打开波形输入设备,其原型如下:

① WORD waveInOpen(lphWaveIn,wDeviceID,lpFormat,dwCallback,dwCallbackInstan ce, dwFlags) LPHWaveIn: lphWaveIn 该变量用来接收波形输入设备的句柄,该句柄应当保存下来,因为其他的波形输入函数还会用到它.

②WORD wDeviceID 该变量用来指明波形输入设备的标记号.当PC中有多块声卡(准确地说是波形输入设备)时, *** 作系统会为每一块声卡分配一个标记号.可以用waveInGetNumDev s函数来得到能够作为波形输入设备的数目N,则wDeviceID的取值范围为0~N-1.如果想得到没个标记号所对应的录音性能,可以使用函数waveInGetDevCaps.若把wDeviceID设为W AVE_MAPPER(即-1),则系统会自动选择一符合要求的设备(根据lpFormat的要求). ③lpFormat是一个指向PCMWAVEFORMAT数据结构的指针,应当在这个数据结构中指明所期望的采样模式,这个数据结构的定义是这样的:

Typedef structure pcmwaveformat_tag { WAVEFORMAT wf//有关PCM格式设置的另外一种数据结构

WORD wBitsPerSample//量化位数

}PCMWAVEFORMAT

Typedef structure waveformat_tag {

WORD wFormatTag//采样数据格式,目前只能用PCM格式

WORD nChannels//通道数目(1或2)

DWORD nSamplesPerSec//采样速率

DWORD nAvgBytesPerSec//每秒采样得到的数据

WORD nBlockAlign//记录区块对齐的单位。此值为nChannels*wBitsPerSample/8 }WAVEFORMAT

④ DWORD dwCallback.定义回调函数的地址或回调窗口的句柄。回调函数的地址或回调窗口用来处理波形输入设备产生的消息。

⑤DWORD dwCallbackInstance。这是一个用户自定义的数据,该数据会一并传给回调函数(或窗口)。

⑥DWORD dwFlags。定义打开波形输入设备的标记。

CALLBACK_WINDOW 定义dwCallback为窗口句柄。

CALLBACK_FUNCTION 定义dwCallback为函数地址。

另外还可以在此指定:

WAVE_FORMAT_QUERY 只查询波形输入设备是否支持给定格式而不真的打开波形输入设备。

WAVE_ALLOWSYNC 同步方式开启波形输入设备,录音工作在后台进行。

下面一段Delphi程序说明了打开波形输入设备的过程:

type

TRecorder = class

private

FWaveFmt : TWaveFormatEx//Delphi中,WAVEFORMAT和PCMWAVEFORMAT合为TwaveFor

matEx。

WaveHandle : HWaveIn

WaveHdr1 : PWAVEHDR//数据缓冲区头结构的指针 (见下文)

WaveBuffer1 : lpstr//数据缓冲区的指针 (见下文)

procedure CallBack(uMsg,dwInstance,dwParam1,dwParam2 : DWORD)stdcall

end

Recorder:=TRecorder.Create

Recorder.FWaveFmt.wFormatTag:=WAVE_FORMAT_PCM

Recorder.FWaveFmt.wBitsPerSample:=16

Recorder.FWaveFmt.nSamplesPerSec:=11025

Recorder.FWaveFmt.nAvgBytesPerSec:=22050;

Recorder.FWaveFmt.nBlockAlign:=2

WaveInOpen(@Recorder.WaveHandle,Wave_Mapper,mailto:@Recorder.FWaveFmt,

DWORD(@TRecorder.CallBack),DWORD(@Recorder),CALLBACK_FUNCTION + WAVE_ALLOW

SYNC)

2. 为采样数据分配缓冲空间

在Windows环境,可以用GlobalAllocPtr来获取一段内存空间,但是由于Windows *** 作系统采用了虚拟存储管理机制,这块内存空间随时有可能会被置换到硬盘上,读写硬盘所耗费的时间会造成采样的不连续。因此,在将缓冲区送往波形输入设备之前,必须调用WaveInPrepareHeader函数以保证缓冲区不会被置换到硬盘上。当然在用GlobalFreeP tr来释放缓冲区之前,必须先要用WaveInUnprepareHeader函数来解除这种保护。

下面几行Delphi语句说明了使用录音缓冲区的过程。

Recorder.WaveHdr1:=GlobalAllocPtr(GHND or GMEM_SHARE,Sizeof(WAVEHDR))

Recorder.WaveBuffer1:=GlobalAllocPtr(GHND or GMEM_SHARE,1024)

Recorder.WaveHdr1.lpData := Recorder.WaveBuffer1

Recorder.WaveHdr1.dwBufferLength:=1024

WaveInPrepareHeader(Recorder.WaveHandle, Recorder.WaveHdr1, sizeof(WAVEHDR

))

WaveInAddBuffer(Recorder.WaveHandle, Recorder.WaveHdr1, sizeof(WAVEHDR))

WaveInUnprepareHeader(Recorder.WaveHandle, Recorder.WaveHdr1, sizeof(TWAVE

HDR))

GlobalFreePtr(Recorder.WaveBuffer1)

但是,如果只为波形输入设备开辟一个缓冲区,则当该缓冲区被采样数据填满后,波形输入设备就无缓冲区可用,不得不停止采样,从而造成了采样的断续。所以在实际应用中,至少要为波形输入设备准备两个缓冲区,用上述方法同时送给波形输入设备。

3. 启动波形输入设备

当上述一切都准备好后,用WaveInStart启动波形输入设备,即可开始进行数据采集,在采集的过程中,一旦有缓冲区被采样数据填满,系统就回调WaveInOpen中指定的dwCa llback函数(或向指定的窗口发送消息)。在Delphi4.0中,回调函数的格式是这样的: procedure CallBack(uMsg,dwInstance,dwParam1,dwParam2 : DWORD)stdcall其中uMsg是Windows的消息标记号,有三种情况:

MM_WIM_OPEN 表示波形输入设备开启成功

MM_WIM_DATA 表示一个缓冲区已满。

此时dwParam1中携带有数据缓冲区头结的指针。正是通过这个指针,才可以随机地访问缓冲区中的每一个采样数据。如下面程序所示:

procedure TRecorder.CallBack(uMsg,dwInstance,dwParam1,dwParam2 : DWORD)

stdcall

var i:Integer

SPByte : ^Byte//假设在打开设备时采用8位量化

SingleData : Integer

BEGIN

case uMsg of //uMsg是Windows的消息标记号

MM_WIM_OPEN : //波形输入设备开启成功发回的消息

MM_WIM_DATA : //一个缓冲区已满发回的消息

begin

SPByte := Pointer(dwParam1)

for i :=0 to Recorder.DataLength-1 do

begin

SingleData := SPByte^//通过SPByte来访问缓冲区中的数据

Inc(SPByte)

end

end

MM_WIM_CLOSE : //波形输入设备关闭成功发回的消息

end

END

MM_WIM_CLOSE 表示波形输入设备关闭成功。当波形输入设备关闭后,别忘了用Wave InPrepareHeader和GlobalFreePtr来释放缓冲区内存。

4. 关闭语音输入设备

waveInStop(hWaveIn) 停止语音输入

waveInReset(hWaveIn) 重置语音输入设备

waveInClose(hWaveIn) 关闭语音输入设备。其中hWaveIn是WaveInOpen得到的设备句柄。

在关闭语音输入设备前,必须重置语音输入设备,否则系统会出现这样的错误提示: "MMSYSTEM033 媒体数据仍在播放中,请重置设备或等到数据播放完毕"。但是只有当一个缓冲区填满数据后,才能重置语音输入设备

以上波形输入函数,若调用成功则返回0;否则返回非0,此时可以用waveInGetErrorText函数来得到出错信息,这样做的目的是方便调试。

三、必须注意的几点

以上阐述了作为A/D卡的声卡编程技术,但是还必须注意以下几点

1. 声卡的采样频率并不只限于11025Hz,22050Hz,44100 Hz三种,大多数声卡的采样频率在一定的范围内是可调的(当然会存在一定的偏差)。有的声卡的最高采样频率可达200K Hz(有可能随不同品牌而异)。

2. 缓冲区不能设得太小,否则也会造成采样的不连续。在作者的声卡上,若采用16为量化,22050Hz的采样速率,缓冲区设为1K字节,理论上每秒钟可以得到22050*2个字节的数据,实际上每秒钟只能得到大约16000*2个字节的数据。若缓冲区设为2K字节,则与理论值一致。

3. A/D转化后的数据格式是PCM格式,即:若是8位量化,对应着8位无符号数据,0对应着负满幅值,128对应着零电平,255对应着正满幅值;若是16位量化,对应着16位有符号数据,-32768对应着负满幅值,0对应着零电平,32767对应着正满幅值。编程过程中应注意所声明的数据类型是否与之相符合,比如在Delphi4.0中,8位无符号数据对应着 Byte型数据,16位有符号数据对应着SmallInt型数据。

4. 由于声卡的输入端往往带有隔直电容,所以不能用声卡直接对直流量进行采集。解决的办法就是将这个隔直电容短接。

5. 同样地,利用windows的API函数和声卡的D/A功能也可以使声卡产生模拟音频信号输出。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12400041.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存