我最后的50分送给个位大侠了,请来帮帮忙...... ( 积分: 50 )

  • 主题发起人 linuxcici
  • 开始时间
L

linuxcici

Unregistered / Unconfirmed
GUEST, unregistred user!
#include<stdio.h>
#include<string.h>
#include<process.h>
#include<dos.h>
#include<alloc.h>
#define NumberOfTimes1 50
#define NumberOfTimes2 100
#define OldTimerInt 0x60
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
unsigned long Counter;
unsigned CounterInt8,fpI8;
unsigned Port=0x210;
char Found=0;
unsigned Cnt1,Cnt2;
FILE *fp;
long num;
int smp1;
unsigned char a[64000];

struct wavhead
{
char riffid[4];
long cksize;
char fcctype[4];
char fmtid[4];
long ck16;
unsigned fortag;
unsigned nchan;
long nsamps;
long navgbgs;
unsigned nblocka;
unsigned wbpsam;
char dataid[4];
long datalen;
}wfhead;

void Testsb();
void PlayWavBg();
void interrupt NewTimer(__CPPARGS);
void SetTimer(void interrupt(*Rout)(__CPPARGS),unsigned freq);
void RestoreTimer();

void main(int argc,char *argv[])
{
argc=2;
argv[1]="a.wav";
if(argc<2)
{
printf("/nUsage:display filename.wav!!!");
exit(0);
}
if(!(strstr(argv[1],".wav")||strstr(argv[1],".WAV")))
{
printf("/ntype of the file is wrong!please insert *.wav/n");
exit(0);
}
if((fp=fopen(argv[1],"r+b"))==NULL)
{
printf("cannot open the file/n");
exit(0);
}
fseek(fp,22L,0);
fread(&wfhead.nchan,sizeof(int),1,fp);
fseek(fp,24L,0);
fread(&wfhead.nsamps,sizeof(long),1,fp);
fseek(fp,34L,0);
fread(&wfhead.wbpsam,sizeof(int),1,fp);
fseek(fp,40L,0);
fread(&num,sizeof(long),1,fp);
fread(a, sizeof(unsigned char), 64000, fp);
Testsb();
PlayWavBg();
while(!kbhit())
printf(".");
fclose(fp);
RestoreTimer();
}

void Testsb()
{
Cnt1=NumberOfTimes1;
while((Port<=0x260)&&!Found)
{
outportb(Port+0x6,1);
outportb(Port+0x6,0);
Cnt2=NumberOfTimes2;
while((Cnt2>0)&&(inportb(Port+0xE)<128))
--Cnt2;
if((Cnt2==0)||(inportb(Port+0xA)!=0xAA))
{
--Cnt1;
if(Cnt1==0)
{
Cnt1=NumberOfTimes1;
Port=Port+0x10;
}
}
else
Found=1;
}
if(!Found)
{
printf("Nobase port found!/n");
printf("/nDSP not reseted!/n");
exit(0);
}
}

void PlayWavBg()
{
smp1=44100/wfhead.nsamps;
Counter=1;
fseek(fp,44L,0);
if(wfhead.wbpsam==16)
num=num/2;
SetTimer(NewTimer,44100);
}

void SetTimer(void interrupt(*Rout)(__CPPARGS),unsigned freq)
{
int ICnt;
unsigned char intreg21;
fpI8=(freq+9)/18;
intreg21=inportb(0x21);
outportb(0x21,255);
ICnt=1193180/freq;
outportb(0x43,0x36);
outportb(0x40,ICnt&255);
outportb(0x40,ICnt>>8);
setvect(OldTimerInt,getvect(8));
setvect(8,Rout);
outportb(0x21,intreg21);
}

void RestoreTimer()
{
unsigned char intreg21;
intreg21=inportb(0x21);
outportb(0x21,255);
outportb(0x43,0x36);
outportb(0x40,0);
outportb(0x40,0);
setvect(8,getvect(OldTimerInt));
outportb(0x21,intreg21);
}

void interrupt NewTimer(__CPPARGS)
{
struct REGPACK R;
static long i=0;
Counter++;
if((Counter>=smp1&&i<num)||i==0)
{
i++;
outportb(Port+0xC,0x10);
while(inportb(Port+0xC)&0x80);
outportb(Port+0xC,a[i%64000]);
Counter=0;
}

if(--CounterInt8==0)
{
intr(OldTimerInt,&R);
CounterInt8=fpI8;
}
else outportb(0x20,0x20);
}

假设同目录中有a.wav这个文件.
(本程序是由<C游戏从入门到高手>这本书的一段代码,目的是播放背景音乐.音乐播放的时
侯不会影响到程序的正常运行.)
问题就是:程序运行没有效果,请问各位大侠应该如何修改呢?
 
#include<stdio.h>
#include<string.h>
#include<process.h>
#include<dos.h>
#include<alloc.h>
#define NumberOfTimes1 50
#define NumberOfTimes2 100
#define OldTimerInt 0x60
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
unsigned long Counter;
unsigned CounterInt8,fpI8;
unsigned Port=0x210;
char Found=0;
unsigned Cnt1,Cnt2;
FILE *fp;
long num;
int smp1;
unsigned char a[64000];

struct wavhead
{
char riffid[4];
long cksize;
char fcctype[4];
char fmtid[4];
long ck16;
unsigned fortag;
unsigned nchan;
long nsamps;
long navgbgs;
unsigned nblocka;
unsigned wbpsam;
char dataid[4];
long datalen;
}wfhead;

void Testsb();
void PlayWavBg();
void interrupt NewTimer(__CPPARGS);
void SetTimer(void interrupt(*Rout)(__CPPARGS),unsigned freq);
void RestoreTimer();

void main(int argc,char *argv[])
{
argc=2;
argv[1]="a.wav";
if(argc<2)
{
printf("/nUsage:display filename.wav!!!");
exit(0);
}
if(!(strstr(argv[1],".wav")||strstr(argv[1],".WAV")))
{
printf("/ntype of the file is wrong!please insert *.wav/n");
exit(0);
}
if((fp=fopen(argv[1],"r+b"))==NULL)
{
printf("cannot open the file/n");
exit(0);
}
fseek(fp,22L,0);
fread(&wfhead.nchan,sizeof(int),1,fp);
fseek(fp,24L,0);
fread(&wfhead.nsamps,sizeof(long),1,fp);
fseek(fp,34L,0);
fread(&wfhead.wbpsam,sizeof(int),1,fp);
fseek(fp,40L,0);
fread(&num,sizeof(long),1,fp);
fread(a, sizeof(unsigned char), 64000, fp);
Testsb();
PlayWavBg();
while(!kbhit())
printf(".");
fclose(fp);
RestoreTimer();
}

void Testsb()
{
Cnt1=NumberOfTimes1;
while((Port<=0x260)&&!Found)
{
outportb(Port+0x6,1);
outportb(Port+0x6,0);
Cnt2=NumberOfTimes2;
while((Cnt2>0)&&(inportb(Port+0xE)<128))
--Cnt2;
if((Cnt2==0)||(inportb(Port+0xA)!=0xAA))
{
--Cnt1;
if(Cnt1==0)
{
Cnt1=NumberOfTimes1;
Port=Port+0x10;
}
}
else
Found=1;
}
if(!Found)
{
printf("Nobase port found!/n");
printf("/nDSP not reseted!/n");
exit(0);
}
}

void PlayWavBg()
{
smp1=44100/wfhead.nsamps;
Counter=1;
fseek(fp,44L,0);
if(wfhead.wbpsam==16)
num=num/2;
SetTimer(NewTimer,44100);
}

void SetTimer(void interrupt(*Rout)(__CPPARGS),unsigned freq)
{
int ICnt;
unsigned char intreg21;
fpI8=(freq+9)/18;
intreg21=inportb(0x21);
outportb(0x21,255);
ICnt=1193180/freq;
outportb(0x43,0x36);
outportb(0x40,ICnt&255);
outportb(0x40,ICnt>>8);
setvect(OldTimerInt,getvect(8));
setvect(8,Rout);
outportb(0x21,intreg21);
}

void RestoreTimer()
{
unsigned char intreg21;
intreg21=inportb(0x21);
outportb(0x21,255);
outportb(0x43,0x36);
outportb(0x40,0);
outportb(0x40,0);
setvect(8,getvect(OldTimerInt));
outportb(0x21,intreg21);
}

void interrupt NewTimer(__CPPARGS)
{
struct REGPACK R;
static long i=0;
Counter++;
if((Counter>=smp1&&i<num)||i==0)
{
i++;
outportb(Port+0xC,0x10);
while(inportb(Port+0xC)&0x80);
outportb(Port+0xC,a[i%64000]);
Counter=0;
}

if(--CounterInt8==0)
{
intr(OldTimerInt,&R);
CounterInt8=fpI8;
}
else outportb(0x20,0x20);
}

假设同目录中有a.wav这个文件.
(本程序是由<C游戏从入门到高手>这本书的一段代码,目的是播放背景音乐.音乐播放的时
侯不会影响到程序的正常运行.)
问题就是:程序运行没有效果,请问各位大侠应该如何修改呢?
 
请各位帮帮忙啊,我在线等啊
 
请各位高手教教我这个大一的小学生啊
 
请各位帮帮忙啊
 
好象是用Pc喇叭演奏呀!~?
Testsb();
PlayWavBg(); //播放?
while(!kbhit())
printf("."); //按任意键推出
fclose(fp);
RestoreTimer();



void PlayWavBg()
{
smp1=44100/wfhead.nsamps;
Counter=1;
fseek(fp,44L,0);
if(wfhead.wbpsam==16)
num=num/2;
SetTimer(NewTimer,44100);
}
是不是源码有问题
 
顶部