wav file fade in/out help

Discussion in 'C++' started by jase_dukerider, Apr 14, 2005.

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


    }
     
    jase_dukerider, Apr 14, 2005
    #1
    1. Advertisements

  2. 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
     
    Victor Bazarov, Apr 14, 2005
    #2
    1. Advertisements

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 (here). After that, you can post your question and our members will help you out.