Hi Alberto, Thank you for your help. The information at the link you provided will probably be everything I need for explanation.
Dave AD5JO --- In [email protected], "i2phd" <[EMAIL PROTECTED]> wrote: > > --- In [email protected], "David WardenDurkee" <dwarden2@> > wrote: > > > > Hi Alberto or anyone on the list, > > Can you help me with understanding the RIFF chunk of a wav file? > > [snip] > > David, > > you are mixing two different things. What you have posted are the > typical instructions used for initializing a structure (named wformat > in that sample of code) that will then be used with the waveInOpen or > the waveOutOpen APIs, to manage the flow of audio sample to and from > the sound card. This has nothing to do with reading or writing from/to > a WAV file... > > I attach here following the OutOpen method of the class WavIO, as > coded in my program Spectran, followed by the declaration of the > various structures needed. I never tried to write wav files with 24 > bits per sample, but logically the instructions affected should be these: > > fmthdr.nSamplesPerSec = (int) rate; > fmthdr.nAvgBytesPerSec = (int) rate * 2; > fmthdr.nBlockAlign = 2; > fmthdr.nBitsPerSample = 16; > > The first two are trivial, you must specify the sampling rate, 96kHz > in your case. The fourth one will assign a value of 24 in your case. > For the third one, this is the explanation fromthe Borland Developer site: > > > If wFormatTag is WAVE_FORMAT_PCM, nBlockAlign should be equal > > to the product of nChannels and wBitsPerSample divided by 8 > > (bits per byte). > > So, if you want to write a stereo wav file, with 24 bit samples, the > value to assign to nBlockAlign will be 6. > > A good place where to spend some time reading could be this one: > http://bdn.borland.com/article/0,1410,21300,00.html > > 73 Alberto I2PHD > -------------------------------------- > > bool WavIO::OutOpen(char *name) > { > strcpy(outname, name); > outhandle = FileCreate(outname); > > if(outhandle > 0) > { strncpy(riffhdr.riff, "RIFF", 4); > riffhdr.filesize = 0L; > strncpy(riffhdr.wave, "WAVE", 4); > strncpy(fmthdr.ckID, "fmt ", 4); > fmthdr.nChunkSize = 16L; > fmthdr.wFormatTag = 1; > fmthdr.nChannels = 1; > fmthdr.nSamplesPerSec = (int) rate; > fmthdr.nAvgBytesPerSec = (int) rate * 2; > fmthdr.nBlockAlign = 2; > fmthdr.nBitsPerSample = 16; > strncpy(datahdr.ckID, "data", 4); > datahdr.nChunkSize = 0L; > if(12!=FileWrite(outhandle, &riffhdr, 12)) return false; > if(24!=FileWrite(outhandle, &fmthdr, 24)) return false; > if(8 !=FileWrite(outhandle, &datahdr, 8)) return false; > return true; > } > > return false; > } > //------------------------------------------------------------------ --------- > struct riffhdr > { > char riff[4]; // RIFF string > long filesize; // filesize > char wave[4]; // WAVE string > }; > > struct fmthdr > { > char ckID[4]; > long nChunkSize; > short wFormatTag; > short nChannels; > long nSamplesPerSec; > long nAvgBytesPerSec; > short nBlockAlign; > short nBitsPerSample; > }; > > struct facthdr > { > char ckID[4]; > long nChunkSize; > }; > > struct datahdr > { > char ckID[4]; > long nChunkSize; > }; > //------------------------------------------------------------------ --------- > Yahoo! Groups Links <*> To visit your group on the web, go to: http://groups.yahoo.com/group/soft_radio/ <*> To unsubscribe from this group, send an email to: [EMAIL PROTECTED] <*> Your use of Yahoo! Groups is subject to: http://docs.yahoo.com/info/terms/
