I have Dev-C++ as an IDE and MinGW as the compiler, and I am running C programs on the IDE. I have this project where I have to write raw PCM data (unsigned 8-bit i.e bytes of PCM) as an array. I have figured out the reading part but when I view the output on the screen the starting bytes are missing and the remaining integers just display fine. Where did the bytes at the beginning go? Why cant I see the entire data?? I am using the fread() function to read the data and it returns the number of values read by it. The return value is also fine, nothing absurd and upto my expectations. Any reason why this is happening?

The code below is very specific and is tailored to my wav file. I have used MATLAB to read the header. Is there any problem in the code??

int main()
{FILE *fp;
fp=fopen("AE.wav", "rb");
unsigned char samples[4576];
fseek ( fp , 46 , SEEK_SET );
int nr = fread(samples, sizeof(char), 4576, fp);
int i;
printf("No. of samples read= %d", nr);
return 0;   

Are you sure you're fseeking to the right place to start reading the data? If you're missing the data at the start, perhaps you're going too far with the fseek.

I have used the wavread() function in MATLAB and thus I have seen the PCM samples, also using MATLAB I know what the header contains, hence it is very specific to my needs. Any ideas why the text file and the output on the screen don't match?

Any ideas why the text file and the output on the screen don't match?

One or both is reading them wrong, or reading the wrong place. Open the file with a hex editor and manually confirm the correct values.

Edited 3 Years Ago by Moschops

the problem is with the o/p of my program. When I use printf() to print the samples, I don't get all the samples on the screen. The starting samples, which otherwise appear on the .txt file when I write them using fprintf, don't appear on the screen. What could be the reason??

Ignore this - didn't spot that you were casting each char to an int.

Edited 3 Years Ago by Moschops

This article has been dead for over six months. Start a new discussion instead.