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