J
jase_dukerider
Hi I have an assignment to hand in shortly for which I am after some
guidance. The task is to read a WAV file, request a fade in /out time
for the track from the user and the do the fade by modifying the binary
file then writing it as a new file I have attached my code so far but
do not know how to do the fade and how to write it as a new file.
Please help!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main ()
{
FILE *oldwav,*newwav;
char *stgfilename;
char riff[5];
char wave[5];
char fmt[5];
char data[5];
unsigned long int length, binary, stereo, mono, bits, sample, bps,
bpsam, bitsps, sound, ldata;
int s, m, time, count;
float fadein, track, track1, fadeout;
/* */
stgfilename=(char*)malloc(81);
printf("Please enter the file path of your wav file\n\r");
gets(stgfilename);
oldwav=fopen(stgfilename,"rb+");
if(oldwav==NULL)
{
printf("Cannot find the file specified\n\r");
exit(1);
}
/* To start the RIFF Chunk must be determined*/
fread(riff,1,4,oldwav);
riff[4]='\0';
printf("header contains %s this is a wav file!!\n\r", riff);
if (strcmp(riff,"RIFF")!=0)
{
printf("error in header not wav file\n\r");
fclose(oldwav);
exit(1);
}
fread(&length,4,1,oldwav);
printf("The length of the wav file is %lx hex\n\r", length);
printf("The length of the wav file is %ld decimal\n\r", length);
fread(wave,1,4,oldwav);
wave[5]='\0';
printf("the format header contains %s\n\r", wave);
if (strcmp(wave,"WAVE")!=0)
{
printf("error not in WAV format\n\r");
fclose(oldwav);
exit(1);
}
/* Secondly the FORMAT Chunk must be determined*/
fread(fmt,1,4,oldwav);
fmt[3]='\0';
fmt[4]='\0';
printf("the format header contains %s\n\r", fmt);
if (strcmp(fmt,"fmt")!=0)
{
printf("error\n\r");
fclose(oldwav);
exit(1);
}
fread(&binary,4,1,oldwav);
if (binary!=0X10)
{
printf("error\n\r");
fclose(oldwav);
exit(1);
}
printf("header file contains %lx\n\r",binary);
fread(&bits,2,1,oldwav);
if (bits!=0X01)
{
printf("error corrupted file this should be 01 always!\n\r");
fclose(oldwav);
exit(1);
}
printf("Check bytes 8-9 are 01 ---> Correct 01\n\r");
fread (&stereo,2,1,oldwav);
if (stereo!=0X02)
{
printf("the file is not stereo\n\r");
}
if (stereo==0x02)
{
printf("the file is stereo\n\r");
s=2;
}
if (stereo!=0X01)
{
printf("the file is not mono\n\r");
}
if (stereo==0x01)
{
printf("the file is mono\n\r");
m=1;
}
fread(&sample,4,1,oldwav);
printf("The sample rate of the wav file is %lx hex\n\r", sample);
printf("The sample rate of the wav file is %ld decimal\n\r", sample);
fread(&bps,4,1,oldwav);
printf("The bytes per second of the wav file is %lx hex\n\r", bps);
printf("The bytes per second of the wav file is %ld decimal\n\r", bps);
fread(&bpsam,2,1,oldwav);
printf("The bytes per sample of the wav file is %lx hex\n\r", bpsam);
printf("The bytes per sample of the wav file is %ld decimal\n\r",
bpsam);
if (bpsam==0x01)
{
printf("this is 8 bit mono!!\n\r");
s=1;
}
if (bpsam==0X02)
{
printf("this is 8 bit stereo or 16 bit mono!!\n\r");
s=2;
}
if (bpsam==0X04)
{
printf("this is 16 bit stereo!!\n\r");
s=4;
}
printf("the value of s is ---> %d this a multiplier for?\n\r",s);
fread(&bitsps,2,1,oldwav);
printf("the bits per sample of this wav file is %lx hex\n\r", bitsps);
printf("the bits per sample of this wav file is %ld decimal\n\r",
bitsps);
/* Thirdly the DATA Chunk must be determined*/
fread(data,1,4,oldwav);
data[4]='\0';
if (strcmp(data,"data")!=0)
{
printf("error\n\r");
fclose(oldwav);
exit(1);
}
printf("third line contains %s !!\n\r", data);
fread(&sound,4,1,oldwav);
printf("length of data to follow %lx hex\n\r", sound);
printf("length of data to follow %ld decimal\n\r", sound);
/* Convert the length of the file into seconds */
time=sound/(s*sample);
printf("time of track = %d seconds\n\r",time);
/* Providing the fadein time the user requires*/
printf("INPUT TIME FOR FADEIN FROM START...\n\r");
scanf("%f",&fadein);
printf("The fade in time is %f seconds\n\n\r",fadein);
track=(fadein*bps);
printf("the fadein in bytes = %f\n\r",track);
/* Check the fadein time to make sure it is not less than or equal to
zero*/
if (fadein<=0)
{
printf("error time can't be less than or equal to zero\n\r");
printf(" INPUT TIME FOR FADEIN FROM START...\n\r");
scanf("%f",&fadein);
printf("The fade in time is %f seconds\n\n\r",fadein);
track=fadein*bps;
printf("the fadein in bytes = %f\n\r",track);
}
if (fadein>=time)
{
printf("error time can't be more than or equal time of
track\n\r");
printf(" INPUT TIME FOR FADEIN FROM START...\n\r");
scanf("%f",&fadein);
printf("The fade in time is %f seconds\n\n\r",fadein);
track=fadein*bps;
printf("the fadein in bytes = %f\n\r",track);
}
/* Providing the fadeout time the user requires*/
printf("INPUT TIME FOR FADEOUT TO START...\n\r");
scanf("%f",&fadeout);
printf("The fade out time is %f seconds\n\n\r",fadeout);
track1=fadeout*bps;
printf("the fadeout in bytes = %f\n\r",track1);
/* Check the fadeout time to make sure it is not less than or equal
to zero*/
if (fadeout>=time)
{
printf("error time can't be more than or equal to the length of the
track\n\r");
printf(" INPUT TIME FOR FADEOUT TO START...\n\r");
scanf("%f",&fadeout);
printf("The fade out time is %f seconds\n\n\r",fadeout);
track1=fadeout*bps;
printf("the fadeout in bytes = %f\n\r",track1);
}
if (fadeout<=fadein)
{
printf("THIS IS IMPOSSIBLE PLEASE CHECK YOUR FADE OUT
TIME\n\r");
printf(" INPUT TIME FOR FADEOUT TO START...\n\r");
scanf("%f",&fadeout);
printf("The fade out time is %f seconds\n\n\r",fadeout);
track1=fadeout*bps;
printf("the fadeout in bytes = %f\n\r",track1);
}
/* Fade in Calculation*/
}
guidance. The task is to read a WAV file, request a fade in /out time
for the track from the user and the do the fade by modifying the binary
file then writing it as a new file I have attached my code so far but
do not know how to do the fade and how to write it as a new file.
Please help!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main ()
{
FILE *oldwav,*newwav;
char *stgfilename;
char riff[5];
char wave[5];
char fmt[5];
char data[5];
unsigned long int length, binary, stereo, mono, bits, sample, bps,
bpsam, bitsps, sound, ldata;
int s, m, time, count;
float fadein, track, track1, fadeout;
/* */
stgfilename=(char*)malloc(81);
printf("Please enter the file path of your wav file\n\r");
gets(stgfilename);
oldwav=fopen(stgfilename,"rb+");
if(oldwav==NULL)
{
printf("Cannot find the file specified\n\r");
exit(1);
}
/* To start the RIFF Chunk must be determined*/
fread(riff,1,4,oldwav);
riff[4]='\0';
printf("header contains %s this is a wav file!!\n\r", riff);
if (strcmp(riff,"RIFF")!=0)
{
printf("error in header not wav file\n\r");
fclose(oldwav);
exit(1);
}
fread(&length,4,1,oldwav);
printf("The length of the wav file is %lx hex\n\r", length);
printf("The length of the wav file is %ld decimal\n\r", length);
fread(wave,1,4,oldwav);
wave[5]='\0';
printf("the format header contains %s\n\r", wave);
if (strcmp(wave,"WAVE")!=0)
{
printf("error not in WAV format\n\r");
fclose(oldwav);
exit(1);
}
/* Secondly the FORMAT Chunk must be determined*/
fread(fmt,1,4,oldwav);
fmt[3]='\0';
fmt[4]='\0';
printf("the format header contains %s\n\r", fmt);
if (strcmp(fmt,"fmt")!=0)
{
printf("error\n\r");
fclose(oldwav);
exit(1);
}
fread(&binary,4,1,oldwav);
if (binary!=0X10)
{
printf("error\n\r");
fclose(oldwav);
exit(1);
}
printf("header file contains %lx\n\r",binary);
fread(&bits,2,1,oldwav);
if (bits!=0X01)
{
printf("error corrupted file this should be 01 always!\n\r");
fclose(oldwav);
exit(1);
}
printf("Check bytes 8-9 are 01 ---> Correct 01\n\r");
fread (&stereo,2,1,oldwav);
if (stereo!=0X02)
{
printf("the file is not stereo\n\r");
}
if (stereo==0x02)
{
printf("the file is stereo\n\r");
s=2;
}
if (stereo!=0X01)
{
printf("the file is not mono\n\r");
}
if (stereo==0x01)
{
printf("the file is mono\n\r");
m=1;
}
fread(&sample,4,1,oldwav);
printf("The sample rate of the wav file is %lx hex\n\r", sample);
printf("The sample rate of the wav file is %ld decimal\n\r", sample);
fread(&bps,4,1,oldwav);
printf("The bytes per second of the wav file is %lx hex\n\r", bps);
printf("The bytes per second of the wav file is %ld decimal\n\r", bps);
fread(&bpsam,2,1,oldwav);
printf("The bytes per sample of the wav file is %lx hex\n\r", bpsam);
printf("The bytes per sample of the wav file is %ld decimal\n\r",
bpsam);
if (bpsam==0x01)
{
printf("this is 8 bit mono!!\n\r");
s=1;
}
if (bpsam==0X02)
{
printf("this is 8 bit stereo or 16 bit mono!!\n\r");
s=2;
}
if (bpsam==0X04)
{
printf("this is 16 bit stereo!!\n\r");
s=4;
}
printf("the value of s is ---> %d this a multiplier for?\n\r",s);
fread(&bitsps,2,1,oldwav);
printf("the bits per sample of this wav file is %lx hex\n\r", bitsps);
printf("the bits per sample of this wav file is %ld decimal\n\r",
bitsps);
/* Thirdly the DATA Chunk must be determined*/
fread(data,1,4,oldwav);
data[4]='\0';
if (strcmp(data,"data")!=0)
{
printf("error\n\r");
fclose(oldwav);
exit(1);
}
printf("third line contains %s !!\n\r", data);
fread(&sound,4,1,oldwav);
printf("length of data to follow %lx hex\n\r", sound);
printf("length of data to follow %ld decimal\n\r", sound);
/* Convert the length of the file into seconds */
time=sound/(s*sample);
printf("time of track = %d seconds\n\r",time);
/* Providing the fadein time the user requires*/
printf("INPUT TIME FOR FADEIN FROM START...\n\r");
scanf("%f",&fadein);
printf("The fade in time is %f seconds\n\n\r",fadein);
track=(fadein*bps);
printf("the fadein in bytes = %f\n\r",track);
/* Check the fadein time to make sure it is not less than or equal to
zero*/
if (fadein<=0)
{
printf("error time can't be less than or equal to zero\n\r");
printf(" INPUT TIME FOR FADEIN FROM START...\n\r");
scanf("%f",&fadein);
printf("The fade in time is %f seconds\n\n\r",fadein);
track=fadein*bps;
printf("the fadein in bytes = %f\n\r",track);
}
if (fadein>=time)
{
printf("error time can't be more than or equal time of
track\n\r");
printf(" INPUT TIME FOR FADEIN FROM START...\n\r");
scanf("%f",&fadein);
printf("The fade in time is %f seconds\n\n\r",fadein);
track=fadein*bps;
printf("the fadein in bytes = %f\n\r",track);
}
/* Providing the fadeout time the user requires*/
printf("INPUT TIME FOR FADEOUT TO START...\n\r");
scanf("%f",&fadeout);
printf("The fade out time is %f seconds\n\n\r",fadeout);
track1=fadeout*bps;
printf("the fadeout in bytes = %f\n\r",track1);
/* Check the fadeout time to make sure it is not less than or equal
to zero*/
if (fadeout>=time)
{
printf("error time can't be more than or equal to the length of the
track\n\r");
printf(" INPUT TIME FOR FADEOUT TO START...\n\r");
scanf("%f",&fadeout);
printf("The fade out time is %f seconds\n\n\r",fadeout);
track1=fadeout*bps;
printf("the fadeout in bytes = %f\n\r",track1);
}
if (fadeout<=fadein)
{
printf("THIS IS IMPOSSIBLE PLEASE CHECK YOUR FADE OUT
TIME\n\r");
printf(" INPUT TIME FOR FADEOUT TO START...\n\r");
scanf("%f",&fadeout);
printf("The fade out time is %f seconds\n\n\r",fadeout);
track1=fadeout*bps;
printf("the fadeout in bytes = %f\n\r",track1);
}
/* Fade in Calculation*/
}