wav file fade in/out help

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*/


}
 
V

Victor Bazarov

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!
[...]

The code you posted seems to be rather C and not C++, it uses 'void main'
(which is known to be a non-standard extension on some compilers), and
your problem is not of the _language_ nature. Is there any particular
reason you didn't post your question on fading in/out in an audio forum?

All I know about fading is that samples need to be scaled accordingly, but
scaling of samples is not a language problem (unless you're unsure how to
use the multiplication operator).

So, here is your guidance: They must
know much more about fading of sounds than all the language newsgroups
combined.

V
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,226
Members
46,815
Latest member
treekmostly22

Latest Threads

Top