DOS下DSP播音的编程_第1页
DOS下DSP播音的编程_第2页
DOS下DSP播音的编程_第3页
DOS下DSP播音的编程_第4页
DOS下DSP播音的编程_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、DOS下DSP播音的编程摘要该文介绍了dsp编程的根本原那么和方法,并给出程序实例帮助理解,读者可以此为根底来拓展、生成自己的实用程序。在ds下编程,将声音转化为数据记录下来,或将数据转化为声音,通过声卡上配置的喇叭回放出来,是一项很有实用价值和开发魅力的技术。时下流行的声卡,如sundblasterpr及其兼容卡,都配有数字声音处理器dsp芯片(digitalsundpressr),专门用于对声音进展数字记录及回放,是声音数字处理的根底硬件。而av文件、v文件等,那么都是这些数据记载的详细形式。reative公司为了方便用户,提供了一组t-vie驱动程序,专门针对v文件,作为开发利用dsp功

2、能的软接口,使用比拟方便。但是,也造成了某些限制。对于开发者而言,直接对dsp硬件编程,实现其功能,也许是更有吸引力的。声音,无论是从扬声器输出的,还是从话筒输入的,都是模拟量。而数据,无论是内存里操作的,还是磁盘上存储的都是数字量。因此,微机处理声音,大多离不开ad与da两种转换。由于声音数据的数据量比拟大,在声音的数字处理中,除直接由pu进展传输外,批量数据常采用da方式传输,以节省较多的pu时间。总括起来,ad与da两种转换方式,直接传输和da传输这两种传输方式,再加上不同的压缩方式,如喇叭控制、静寂等等,所有这些的不同组合,就构成了dsp的各种功能。根据dsp的硬件原理,其各种功能都规

3、定了一定的操作步骤。一、dsp编程要点在dsp编程中,主要注意命令与端口两个层次的操作。1.dsp命令。dsp的功能一般以一个操作码(称作命令号)的写操作为中心,按规定的步骤,配合假设干必要的辅助操作,构成一串操作的组合,称为dsp命令。如8位直接播放功能命令号为10h,8位直接录音功能命令号为20h,喇叭的通断功能命令号分别为d1h与d3h等等。2.端口操作。dsp命令主要靠端口操作来实现。端口操作包括dsp初始化、写dsp命令(即发dsp命令)、读dsp状态参数、dsp中断等。所涉及的端口地址及相应的用处如表1。表1dsp端口及用处端口地址由基址2x0h加6、0ah、0h、0eh等形成,其

4、中,x可取值1、2、3、4、5、6等,详细情况随硬件设置而定,多数卡在出厂被默认设置为2,即基址为220h。通过跳线,可改变此值,防止与其它设备口地址冲突。二、编程实例dsp的功能是比拟丰富的,限于篇幅,本文只简要介绍其中的8位直接播放功能,由此举一反三,其它功能的用法不难得知。各功能的规定操作可参考文献1和2。1.命令操作步骤。8位直接播放功能的操作步骤如下:写命令号10h;写数据字节(即播放声音的8位数据);按采样率所需时间周期延时。以此三步操作为循环体,进展n次循环,即完成播放。其中,n为声音数据字节数。2.2xh端口写操作。在dsp编程中,无论是发送命令,还是发送数据,都是通过写端口2

5、xh来完成的。在写端口2xh之前,应先读此端口,直到所得值的bit7为0,这才说明此端口处于可写状态,才能进展写操作。此过程的语言形式如下:hile(inprtb(0 x22)0 x80);utprtb(0 x22,byte);这里假定端口基址为220h。句中byte可以是命令号,也可以是数据。3.定时器。为使播放按一定的采样率进展,需对数据发送进展定时控制。这一般是借用主机定时中断int8,将其调用频率进步到与采样率相当的程度,利用其监视、控制数据发送的时间,来满足播音频率的要求。关于定时中断的编程技术已有过许多介绍,限于篇幅,不再赘述,读读文后的程序清单,即一目了然。应该说明的是,对于pu

6、较慢的机型如386,由于计时代码本身的执行时间可能已经超过采样率对应的时间周期,定时控制就达不到预期的效果。这种情况下,用一个空循环来定时,调整循环次数,即可满足频率要求。此法的缺点是定时精度差,参数因pu速度而异。所幸的是,目前多数配置多媒体的p机,其pu都在486以上。4.内存利用。人耳可辨声音的最高频率可达20khz以上,因此dsp的采样率至少也要到达与此相当的程度,而为了包容立体声双声道信息,采样率还要再翻一倍。常见的av声音的采样率有44100、22050、11025等。在这么高的采样率下,声音的数据量自然很大,如44k采样率下,20秒的录音数据长达800多k。为在ds常规内存内处理

7、这种规模的数据,实例程序采取了分块处理的方式,将数据分成以当前剩余自由内存大小为单位的块,将其逐次读入,逐次处理。同时,由于语言的read()函数每次读操作的字节数最多不过64k-1,因此,每一个分块又需分假设干次读入。实例说明,经此法处理的播放程序不受av文件长度的限制,笔者在inds下录制的长达5多的av文件(11k采样率,约8分钟)也照播不误。5.声音文件。本文提供的程序实例其声音数据取自av文件,其实,对于v文件,本播放技术也一样适用,只不过数据的读取格式有所不同而已。关于av文件的格式,可参考文献3,v文件的格式参考献1和2。实例程序用brland+3.1编译,在配置pti386主板

8、、海洋486主板及多种与sundblasterpr兼容声卡的兼容机上运行通过。三、源程序清单#inludei.h#inludeds.h#inludeni.h#inludestdi.h#inludefntl.h#inludestdlib.h#inludestring.h#inludeall.h#inludetier.h#definen120#definen2100strutavheadharriff4;lngsize0;haraveft8;lngsize1;intfttag;inthannel;lngsaplesperse;lngbytesperse;intblkalign;intbitsper

9、saple;harflg4;head;unsignedprt=0 x210;harfund=0;unsignednt1,nt2;vidprtreset();vidutave(unsignedharhuge*,lng);vidriteprt(unsignedhar);viderrexit(har*);vidain()intfp;unsignedn,r,nn,i,j;harnae32;lngfere,rr,datasize;unsignedharhuge*data,huge*p;if(arg2)errexit(issfilenaen);strpy(nae,argv1);strat(nae,.av)

10、;fp=-pen(nae,0-rdnly);if(fp=-1)errexit(errrpenfilen);-read(fp,head,sizef(avhead);if(head.blkalign=1strnp(head.flg,data,4)=0)elseif(head.blkalign=2strnp(head.flg,fat,4)=0)lseek(fp,12l,1);elseerrexit(errrfilestrutn);fare=farreleft();p=data=(unsignedharhuge*)farall(datasize);n=datasize/32768;r=datasize

11、%32768;fr(i=0;in;i+,p+=32768)-read(fp,p,32768);-read(fp,p,r);utave(data,datasize);data=(unsignedharhuge*)farall(fare);p=data;fr(j=0;jn;j+,p+=32768)-read(fp,p,32768);-read(fp,p,r);p=data;fr(i=0;in;i+,p+=32768)-read(fp,p,32768);-read(fp,p,r);farfree(data);-lse(fp);nt1=n1;hile(prt0 x260)!fund)utprtb(pr

12、t+6,1);utprtb(prt+6,0);nt2=n2;hile(nt22inprtb(prt+0 xe)128)-nt2;if(nt2=0|inprtb(prt+0 xa)!=xaa)-nt1;if(nt1=0)nt1=n1;prt=prt+0 x10;vidutave(unsignedharhuge*p,lnglen)lngi;intspl;spl=44100/head.saplesperse/head.blkalign;fr(i=0;ilen;i+)vidriteprt(unsignedharv)viderrexit(har*sg)-ax=3;asint10hprintf(sg);exit(0);#inludds.h#defineldtierint0 x60unsignedlngunter;unsignedunterint8,fpi8;vidsettier(vidinterrupt(*rut)(),unsignedfreq)intint;asliint=1193180/freq;utprtb(0 x43,0 x36);utprtb(0 x40,int

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论