float notenum_from_notetext(char *notetext){ int chroma, octave, sharp; char *stripped = strip_whitespace(notetext); char *notename; int comma_pos = string_charpos(stripped, ','); if (comma_pos != -1) notename = substring(stripped,0,comma_pos); else notename = stripped; printf("stripped: -%s-, notename: -%s-\n",stripped,notename); if(strlen(notename)==2){ chroma = get_chroma(notename[0]); sharp = 0; octave = get_octave(notename[1]); } else if(strlen(notename)==3){ chroma = get_chroma(notename[0]); sharp = get_sharp(notename[1]); octave = get_octave(notename[2]); } else return -1; if(chroma==-1 || sharp==-2 || octave==-1) return -1; float decimals = 0.0f; if (comma_pos != -1) { char *decimaltext = stripped + comma_pos + 1; #ifdef TEST_NOTES decimals = atof(decimaltext) / 100.0f; #else decimals = OS_get_double_from_string(decimaltext) / 100.0f; #endif printf("decimaltext: -%s-, dec: %f\n",decimaltext,decimals); } float notenum = octave*12 + chroma + sharp + decimals; if(notenum<=0 || notenum>127.99) return -1; else return notenum; }
char *parse_note_string(char *ptr, struct defaults *def, struct note *note){ char len_string[3]; char pitch_string[3]; char octave_string[2]; char dot[2]; // eat whitespace / commas and advance the pointer char* dummy = malloc(strlen(ptr)+1); if (dummy == NULL){ error("malloc failed");} dummy[0] = '\0'; sscanf(ptr,"%[ ,]",dummy); ptr += strlen(dummy); free(dummy); DEBUG&&printf("Begin Parsing Note String...\n"); ptr = get_len(ptr, len_string, def->len); DEBUG&&printf("get_len Successful...\n"); ptr = get_pitch(ptr, pitch_string); DEBUG&&printf("get_pitch Successful...\n"); ptr = get_octave(ptr, octave_string, def->oct); DEBUG&&printf("get_octave Successful...\n"); ptr = get_dot(ptr, dot); DEBUG&&printf("get_dot Successful...\n"); strcpy(note->pitch, pitch_string); sscanf(len_string, "%d", &(note->length)); sscanf(octave_string, "%d", &(note->octave)); note->divisor = calc_divisor(pitch_string, octave_string); DEBUG&&printf("divisor successful\n"); note->cycles = calc_cycles(def, len_string, dot); DEBUG&&printf("cycles successful\n"); return ptr; }