andrew@49: /* andrew@49: * jnmrMidiPlayerannotations.cpp andrew@49: * matchJNMRannotationReader andrew@49: * andrew@49: * Created by Andrew on 23/03/2012. andrew@49: * Copyright 2012 QMUL. All rights reserved. andrew@49: * andrew@49: */ andrew@49: andrew@49: #include "jnmrMidiPlayerAnnotations.h" andrew@49: andrew@49: andrew@49: void jnmrMidiPlayerAnnotations::readInjnmrMidiPlayerFile(std::string& pathName){ andrew@49: andrew@49: jnmrMidiPlayerData.clear(); andrew@49: differences.clear(); andrew@49: andrew@50: // printf("jnmrMidiPlayer : READ FILE %s\n", pathName.c_str()); andrew@49: ifstream file ( pathName.c_str()); andrew@49: string value, tmpLine; andrew@49: stringstream iss; andrew@49: int count = 0; andrew@49: andrew@49: while ( file.good() ) andrew@49: { andrew@49: getline(file, tmpLine); andrew@49: iss << tmpLine; andrew@49: // printf("tmp line %s\n", tmpLine.c_str()); andrew@49: while(getline ( iss, value, '\t' )){ // read a string until next comma: http://www.cplusplus.com/reference/string/getline/ andrew@49: jnmrMidiPlayerNotation n; andrew@49: // string::size_type start = value.find_first_not_of(" ,\t\v\n"); andrew@49: // string part = value.substr(start, string::npos); andrew@49: andrew@49: string::size_type start = value.find_first_not_of(" ,\t\v\n"); andrew@49: string firstpart = value.substr(start, string::npos); andrew@49: string::size_type end = firstpart.find_first_of(" ,\t\v\n"); andrew@49: string part = firstpart.substr(0, end); andrew@49: string secondpart = firstpart.substr(end, string::npos); andrew@49: start = secondpart.find_first_not_of(" ,\t\v\n"); andrew@49: secondpart = secondpart.substr(start , string::npos); andrew@49: andrew@49: end = secondpart.find_first_of(" ,\t\v\n"); andrew@49: secondpart = secondpart.substr(0, end); andrew@49: andrew@49: n.difference = atof(secondpart.c_str()); andrew@49: n.midiTime = 0; andrew@49: n.audioTime = 0; andrew@49: jnmrMidiPlayerData.push_back(n); andrew@49: differences.push_back(atof(secondpart.c_str())); andrew@49: andrew@49: // printf("%s (%i) second part:%s\n", part.c_str(), count, secondpart.c_str()); andrew@49: float my_float; andrew@49: int my_int; andrew@49: // printf("reading %s\n", part.c_str()); andrew@49: switch (count%4) { andrew@49: andrew@49: case 0: andrew@49: my_float = atof(part.c_str()); andrew@49: n.midiTime = my_float; andrew@49: break; andrew@49: andrew@49: case 1: andrew@49: andrew@49: my_float = atof(part.c_str()); andrew@49: // printf("count%i, DIFF %f\n", count, my_float); andrew@49: n.difference = my_float; andrew@49: break; andrew@49: case 2: andrew@49: andrew@49: my_float = atof(part.c_str()); andrew@49: n.audioTime = my_float; andrew@49: break; andrew@49: andrew@49: case 3: andrew@49: andrew@49: my_float = atof(part.c_str()); andrew@49: n.midiTime = my_float; andrew@49: jnmrMidiPlayerData.push_back(n); andrew@49: break; andrew@49: andrew@49: andrew@49: default: andrew@49: break; andrew@49: andrew@49: andrew@49: } andrew@49: count++; andrew@49: andrew@49: }//end while reading line andrew@49: iss.clear(); andrew@49: andrew@49: andrew@49: }//end while andrew@49: andrew@49: //printAnnotations(); andrew@50: // printf("There are %i JNMR annotations\n", (int)jnmrMidiPlayerData.size()); andrew@49: andrew@49: } andrew@49: andrew@49: void jnmrMidiPlayerAnnotations::printAnnotations(){ andrew@49: //rwcAnnotations.size() andrew@49: for (int i = 0;i < min(200, (int)jnmrMidiPlayerData.size());i++){ andrew@49: // printf("jnmrMidiPlayer audio times %f, midi played time %f \n", andrew@49: // jnmrMidiPlayerData[i].audioTime, andrew@49: // jnmrMidiPlayerData[i].midiTime); andrew@49: andrew@49: printf("jnmrMidiPlayer diff %f \n", andrew@49: jnmrMidiPlayerData[i].difference); andrew@49: } andrew@49: } andrew@49: