欢迎光临112期刊网!
网站首页 > 论文范文 > 计算机论文 > 计算机应用 > 在 DOS 下使用Windows *.WAV 文件

在 DOS 下使用Windows *.WAV 文件

日期:2023-01-24 阅读量:0 所属栏目:计算机应用


摘 要 该文介绍了windows声波文件(*.wav)的格式,然后分析了在dos下不使用声音适配卡播放声波文件的关键问题,并给出了程序清单。

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

过去许多文章中都讨论过windows图像文件(*.bmp,*.pcx)的格式及其用于美化dos程序界面的方法。在ms wimdows3.1以后,windows又提供了标准的声波文件(*.wav),因此我们可以利用已有的声波文件镶嵌在自己的软件中,在dos下实现语音或其它音响的播放,提高我们的软件质量。

一、声波文件格式分析

*.wav文件作为多媒体中使用的声波文件格式之一,它是以riff格式为标准的。riff是英文resource interchange file format的缩写,每个wav文件的头四个字节便是“riff”。
常见的声波文件主要有两种,分别对应于单声道(11.025khz采样率、8bit的采样值)和双声道(44.1khz采样率、16bit的采样值)。这里,采样率是指:声波信号[模→数]转换过程中单位时间内采样的次数。采样值是指每一次采样周期内声波模拟信号的积分值,在编程播放过程中我们认为它是扬声器在此周期单位时间段的音量。
*.wav文件由文件头和数据体两大部分组成。其中文件头又分为riff/wav文件标识段和声波数据格式说明段两部分。
wav文件各部分内容及格式见附表。
对于单声道声波文件,采样数据为八位的短整数(short int 00h-ffh);而对于双声道立体声声波文件,每次采样数据为一个16位的整数(int),高八位和低八位分别代表左右两个声道。
@@;*.wav文件格式说明表@@

二、wav文件编程

在没有声音适配卡的条件下,利用pc机内部扬声器发声需解决几个关键问题。
首先是如何产生按指定采样率要求的标准时间间隔段,以此为基础控制扬声器发声。
由于此时间段要求精确且非常短暂,因此实现起来有一定的难度。解决该问题的思路是修改8253定时器芯片的计数器0(地址:040h)的初始值,改变系统时钟中断频率使其和采样率相一致,建立用户的时钟中断例程,最终产生标准的时间间隔段。但是在我们修改原有系统时钟中断(int 08h)以后,最终必须恢复原有18.2hz的系统时钟中断。
其次是如何快速地打开和关闭扬声器。解决这个问题的方法是直接向8255芯片端口(地址:061h)写操作。由于pc机机内扬声器发声只有开/闭两种状态,并不能控制音量大小。
因此还须考虑如何通过开闭扬声器来摸拟实现音量大小的控制。实现方法是:在每个时间单位内通过改变扬声器打开延时的长短代表音量的大小。例如:对于8bit单声道声波文件,采样数据的最大值是0ffh,那么在每个标准时间单位内扬声器打开时间应为delay=(采样值/256)*标准时间段长度。在此思想下可以将该方法简化,设扬声器延时只有0、1(时间单位)两种情况,即在每个时间单位内,如果采样值大于128则发声,如果采样值小于128就不发声。显然这样做是以抛弃大量声波信息为代价的,采用的信息量只占原有用信息的1/12
8,所以这种方法产生的音质较差。

三、程序实例

下面是一个能播放11.025khz/8bit/单声道声波文件的演示程序。关于使用*.wav文件的其它细节,可通过阅读本程序得到。它采用了第二种延时方式,如果读者有兴趣提高音质可将其改成使用第一种方法,只需将newint08h中的声音开/关判断(与128比较)部分改成循环等待即可。
循环次数通过i=int(vol[counter]/256)*maxtimes得到。
式中maxtimes为延长一个标准时间单位的循环次数。
程度运行环境:486兼容机,ms dos6.0,tc2.0编译系统。
/*/*/*
*.wav文件播放程序 demo.c,石宁 1994.12
*/*/*/
#include "dos.h"
#include "stdio.h"
#include"string.h"
#define maxsize 50000
struct wave-file_head /*声波*/
{ /*文件头*/
char riff_id[4];/*结构体*/
long int size0;
char wave-fmt[8];
lont int sizel;
int fmttag;
int channel;
long int samplespersec;
long int bytepersec;
int blockalign;
int bitpersamples;
} filehead;
long int datasize, counter=0;
unsigned char vol[maxsize];
unsigned clkdiv;
int oldclk=0,running=1;
void soundon();
void soundoff();
void interrupt(*oldint8h)();
void interrupt newint8h()
{ /*用户中断例程*/
if(running)
{

unsigned int i;
disable();/*屏蔽中断*/
running=0;
if(vol[counter]>=128)
{
i=inportb(0x61);/*开扬*/
i=i|0x03;
outportb(0x61,i);/*声器*/
}
else
{
i=inportb(0x61);/*关扬*/
i=i&0x00fc;
outportb(0x61,i);/*声器*/
}
counter+=1;
enable();/*打开中断*/
if(counter>=datasize) counter=0;
outportb(0x20,0x20);
running=1;
}
}
void soundon()
{
clkdiv=spersec;
/*计算8253计数器0初始值*/
oldint8h=getvect(0x08);/*保存旧的08h中断向量*/
setvect(0x08,newint8h);/*置新的08h中断例程*/
outportb(0x43,0xb6);/*初始化*/
outportb(0x42,1);/*8253计数器3/
outportb(0x42,0)

;/*初始值*/
outportb(0x43,0x36); /*修改8253*/
outport(0x40,clkdiv&0x00ff);/*计数器0*/
outport(0x40,(clkdiv>>8)&0x00ff);/*初始值*/
}
void soundoff()
{
int i;
setvect(0x08,oldint8h);/*恢复旧的08h中断向量*/
outportb(0x43,0x36);/*恢复正常*/
outport(0x40,0)/*的时钟中*/
outport(0x40,0);/*断频率*/
i=inportb(0x61);/*关扬*/
i=i&0x00fc;
outportb(0x61,i);/*声器*/
}
void main(int argc, char *argv[])
{
long j;
int key;
char *s;
file *fp;/
if(argc==1)
{
printf("%s\n","and the wav filename in command line!");
exit(0);
}
else
{
if ((fp=fopen(argv[l],"rb"))==null)
{
printf("cannot open the data file %s\n",argv[1];
exit(0);
}
}
if(fread(&filehead,sizeof(struct wave-file-head),1,fp)==null)
{
printf("file read error!\n");
exit(0);
}
fseek(fp,4,seek-cur);
fread(&datasize,4,1,fp);
for(j=0;jclose(fp);
printf("%s\n","now sound on, press esc to stop!");
soundon();
for(;;)
{
key=getch();
if(key==27)
{
soundoff();
printf("%s\n","sound off!");
break;
}
}
}

本文链接:http://www.qk112.com/lwfw/jsjlw/jisuanjiyingyong/244272.html

论文中心更多

发表指导
期刊知识
职称指导
论文百科
写作指导
论文指导
论文格式 论文题目 论文开题 参考文献 论文致谢 论文前言
教育论文
美术教育 小学教育 学前教育 高等教育 职业教育 体育教育 英语教育 数学教育 初等教育 音乐教育 幼儿园教育 中教教育 教育理论 教育管理 中等教育 教育教学 成人教育 艺术教育 影视教育 特殊教育 心理学教育 师范教育 语文教育 研究生论文 化学教育 图书馆论文 文教资料 其他教育
医学论文
医学护理 医学检验 药学论文 畜牧兽医 中医学 临床医学 外科学 内科学 生物制药 基础医学 预防卫生 肿瘤论文 儿科学论文 妇产科 遗传学 其他医学
经济论文
国际贸易 市场营销 财政金融 农业经济 工业经济 财务审计 产业经济 交通运输 房地产经济 微观经济学 政治经济学 宏观经济学 西方经济学 其他经济 发展战略论文 国际经济 行业经济 证券投资论文 保险经济论文
法学论文
民法 国际法 刑法 行政法 经济法 宪法 司法制度 法学理论 其他法学
计算机论文
计算机网络 软件技术 计算机应用 信息安全 信息管理 智能科技 应用电子技术 通讯论文
会计论文
预算会计 财务会计 成本会计 会计电算化 管理会计 国际会计 会计理论 会计控制 审计会计
文学论文
中国哲学 艺术理论 心理学 伦理学 新闻 美学 逻辑学 音乐舞蹈 喜剧表演 广告学 电视电影 哲学理论 世界哲学 文史论文 美术论文
管理论文
行政管理论文 工商管理论文 市场营销论文 企业管理论文 成本管理论文 人力资源论文 项目管理论文 旅游管理论文 电子商务管理论文 公共管理论文 质量管理论文 物流管理论文 经济管理论文 财务管理论文 管理学论文 秘书文秘 档案管理
社科论文
三农问题 环境保护 伦理道德 城镇建设 人口生育 资本主义 科技论文 社会论文 工程论文 环境科学