void alterDivisions( DOMElement *measure, int ratio, int staffNo ){ cout << "Altering notes\n"; DOMNodeList *notes = measure->getElementsByTagName(XS("note")); for( int i=0; i<notes->getLength(); i++ ){ DOMElement *note = (DOMElement*)notes->item(i); //cout << "note " << i << endl; DOMElement *durEl = getSingleElement(note,"duration"); if( durEl != NULL ){ // grace notes have no duration int dur = atoi(getText(durEl).c_str()); cout << " dur " << dur << endl; setText( durEl, itoa(dur*ratio) ); } //set staff no DOMElement *staff = getSingleElement(note,"staff"); if( staff == NULL ){ staff = m_doc->createElement(XS("staff")); DOMElement *before = getSingleElement( note, "beam" ); if( !before ) before = getSingleElement( note, "notations" ); if( before ) note->insertBefore( staff, before ); else note->appendChild(staff); } setText(staff,itoa(staffNo)); } cout << "Notes & rests altered\n"; DOMNodeList *backups = measure->getElementsByTagName(XS("backup")); for( int i=0; i<backups->getLength(); i++ ){ DOMElement *durEl = getSingleElement( (DOMElement*)backups->item(i), "duration" ); int dur = atoi(getText(durEl).c_str()); setText( durEl, itoa(dur*ratio) ); } cout << "Backups altered\n"; DOMNodeList *forwards = measure->getElementsByTagName(XS("forward")); for( int i=0; i<forwards->getLength(); i++ ){ DOMElement *durEl = getSingleElement( (DOMElement*)forwards->item(i), "duration" ); int dur = atoi(getText(durEl).c_str()); setText( durEl, itoa(dur*ratio) ); } cout << "Forwards altered\n"; }