在DOS下使用Windows*.WAV文件

在DOS下使用Windows*.WAV文件,第1张

在DOS下使用Windows*.WAV文件,第2张

本文介绍了Windows声波文件(* .WAV),然后分析了在DOS下不使用声卡播放声波文件的关键问题,并给出了程序清单。

关键词DOS应用软件开发多媒体声波文件在DOS应用软件开发过程中,我们非常希望在不增加任何硬件设备的情况下,实现一些简单的多媒体功能。

过去的许多文章都讨论了Windows映像文件的格式(*。BMP,*。PCX)和美化DOS程序界面的方法。在MS WIMDOWS3.1之后,Windows已经提供了标准的声波文件(*。WAV),所以我们可以利用自己软件中嵌入的现有声波文件,实现DOS下的语音或其他音频播放,提高我们软件的质量。

首先,分析声波文件格式

*.WAV文件是多媒体中使用的声波文件格式之一,基于RIFF格式。RIFF是英文资源交换文件格式的缩写,每个WAV文件的前四个字节为“RIFF”。

常见的声波文件有两种,分别对应单声道(11.025KHz采样率,8位采样值)和双声道(44.1KHz采样率,16位采样值)。这里的采样率是指声学信号[模拟→数字]转换过程中单位时间内的采样次数。采样值是指声学模拟信号在每个采样周期内的积分值。在编程和播放的过程中,我们认为是这个时间段单位时间段内扬声器的音量。

*.WAV文件由文件头和数据体组成。文件头分为两部分:RIFF/WAV文件标识部分和声学数据格式描述部分。

WAV文件的内容和格式见附表。

对于单声道声波文件,采样数据为八位短整数(short int 00h-ffh);对于双声道立体声声波文件,每个采样数据是一个16位整数(int),高8位和低8位分别代表左右声道。

二、WAV文件编程

在没有声卡的情况下,使用PC内置扬声器需要解决几个关键问题。第一,如何产生指定采样率所需的标准时间间隔,进而控制扬声器的声音。

因为这个时间段要求很精确,很短,很难实现。解决这个问题的思路是修改8253定时器芯片的计数器0(地址:040H)的初始值,改变系统时钟中断频率使其与采样率一致,建立用户的时钟中断例程,最终生成标准时间间隔。但是,在我们修改了原来的系统时钟中断(Int 08H)之后,我们必须最终恢复原来的18.2Hz的系统时钟中断。

二是如何快速打开和关闭扬声器。解决这个问题的方法是直接写入8255芯片端口(地址:061H)。因为PC中的扬声器只有开/关状态,不能控制音量。

所以还需要考虑如何通过打开和关闭音箱来控制音量。实现方法是:在每个时间单位内,通过改变扬声器的开启延迟来表示音量。例如,对于8-8Bit单声道声波文件,采样数据值为0FFH,那么每个标准时间单位内的扬声器开启时间应为Delay=(采样值/256)*标准时间段长度。在这种思路下,方法可以简化,假设扬声器延迟只有0和1(时间单位),即在每个时间单位内,采样值大于128就发声,采样值小于128就不发声。显然,这是以放弃大量声学信息为代价的,所用的信息量只占原始信息量的1/128,所以这种方法产生的音质较差。

三。程序示例

下面是一个可以播放11.025KHz/8Bit/单声道声波文件的演示程序。关于使用*的其他详细信息。通过阅读这个程序可以获得WAV文件。它采用第二种延时方法。如果读者对提高音质感兴趣,可以改成第一种方法,只需把newint08h中的声音开/关判断(对比128)改成循环等待即可。

周期数由I = int(vol[counter]/256)* max times得到。

MAXTIMES是扩展标准时间单位的周期数。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 在DOS下使用Windows*.WAV文件

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情