Wednesday, June 16, 2010

read_data

Digital Signal Processing Library

Voice Lab


read_data



int read_data(FILE *in_file, int data_size, int sample_rate, int *result)
{
unsigned char c[4];
int i, count;

/* read and return the data */
switch(data_size) {
case 1:
count = fread(&c, sizeof(char), data_size, in_file);
(*result) = (int) c[0];
break;
case 2:
count = fread(&c, sizeof(char), data_size, in_file);
(*result) = c[0];
(*result) |= c[1] << 8;
if(c[1] & 0x80) {
for(i = 2; i < sizeof(int); i++) {
(*result) |= 0xFF<<(i*8);
}
}
break;
case 3:
count = fread(&c, sizeof(char), data_size, in_file);
(*result) = c[0];
(*result) |= c[1] << 8;
(*result) |= c[2] << 16;
if(c[2] & 0x80) {
for(i = 3; i < sizeof(int); i++) {
(*result) |= 0xFF<<(i*8);
}
}
break;
case 4:
count = fread(&c, sizeof(char), data_size, in_file);
(*result) = c[0];
(*result) |= c[1] << 8;
(*result) |= c[2] << 16;
(*result) |= c[3] << 24;
if(c[3] & 0x80) {
for(i = 4; i < sizeof(int); i++) {
(*result) |= 0xFF<<(i*8);
}
}
break;
default:
fprintf(stderr, "Data_length out of range:(%d)! What to do?\n", data_size);
exit(1);
}
return(count);
}


No comments:

Post a Comment