Wednesday, June 16, 2010

check_nsp

Digital Signal Processing Library

Voice Lab

check_nsp

int check_nsp(FILE *in_file_ptr, int *data_length, int *sample_rate)
{
int header_length;
int size, i, quit;
char c, header[MAX_HEADER_LENGTH], month[20], day[20], hour[30], year[30], txt[120];

(*sample_rate) = -1;

/* information on header format taken from http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/CSL/CSL.html */
fseek(in_file_ptr,0,0);
fread(header, sizeof(char), 4, in_file_ptr);
if(strncmp(header, "FORM", strlen("FORM")) != 0) {
/* file is not NSP */
fseek(in_file_ptr,0,0);
return(0);
}

fread(header, sizeof(char), 4, in_file_ptr);
/* The chunk identifier DS16 indicates that the sound data is 16-bit integer. */
if(strncmp(header, "DS16", strlen("DS16")) != 0) {
/* file is not valid NSP */
fseek(in_file_ptr,0,0);
return(0);
}
(*data_length) = 2;

fread(&size, sizeof(char), 4, in_file_ptr);

fread(header, sizeof(char), 4, in_file_ptr);
if(strncmp(header, "HEDR", strlen("HEDR")) != 0) {
/* file is not valid NSP */
fseek(in_file_ptr,0,0);
return(0);
}

fread(&size, sizeof(char), 4, in_file_ptr);

fscanf(in_file_ptr, "%s ", &month);

fscanf(in_file_ptr, "%s ", &day);

fscanf(in_file_ptr, "%s ", &hour);

fread(header, sizeof(char), 4, in_file_ptr);
header[4] = '\0';
sscanf(header, "%s ", &year);

printf("Date: %s %s %s\n", day, month, year);
printf("Time: %s\n", hour);

fread(&(*sample_rate), sizeof(char), 4, in_file_ptr);
printf("Sample Rate: %d\n", (*sample_rate));

fread(&size, sizeof(char), 4, in_file_ptr);

fread(&size, sizeof(char), 2, in_file_ptr);

fread(&size, sizeof(char), 2, in_file_ptr);

fread(header, sizeof(char), 4, in_file_ptr);
if(strncmp(header, "NOTE", strlen("NOTE")) != 0) {
/* file is not valid NSP */
header[4] = '\0';
printf("string = %s\n", header);
fseek(in_file_ptr,0,0);
(*sample_rate) = -1;
return(0);
}

fread(&size, sizeof(char), 4, in_file_ptr);

/* make size end on an even boundary */
if(size%2) size++;

if(size >= MAX_HEADER_LENGTH) {
fprintf(stderr, "Please increase MAX_HEADER_LENGTH to at least %d and re-compile programs\n", size+1);
exit(1);
}

for(i = 0; i < size; i++) {
fread(&c, sizeof(char), 1, in_file_ptr);
header[i] = c;
}
header[i] = '\0';

fread(header, sizeof(char), 4, in_file_ptr);
header[4] = '\0';

fread(&size, sizeof(char), 4, in_file_ptr);
printf("Data segment length = %d\n", size);

header_length = ftell(in_file_ptr);
return(header_length);
}


No comments:

Post a Comment