void Demidify::reduceParts(Song *song, size_t trackNo) { if (verbose >= 2) out << " | | +- Trying to compact Parts (there are " << (*song)[trackNo]->size() << ")...\n"; size_t pos = 0; size_t partsCompacted = 0; while (pos < (*song)[trackNo]->size()-1) { Part *first = (*(*song)[trackNo])[pos]; Part *second = (*(*song)[trackNo])[pos+1]; if (first->phrase()->title() == second->phrase()->title()) { if (!first->repeat()) { first->setRepeat(second->start() - first->start()); (*song)[trackNo]->remove(second); first->setEnd(second->end()); delete second; ++partsCompacted; continue; } else { Clock startTime = first->start(); Clock repeat = first->repeat(); while(startTime+repeat <= second->start()) startTime += repeat; if (startTime != second->start()) { ++pos; continue; } if (second->end() - second->start() > repeat) { ++pos; continue; } (*song)[trackNo]->remove(second); first->setEnd(second->end()); delete second; ++partsCompacted; } } else { ++pos; } } if (verbose >= 2) out << " | | | +- compacted " << partsCompacted << " Parts\n"; }
void display(Song *s) { for (int n = 0; n < s->size(); ++n) { Track *t = s->track(n); cout << "-- "; for (int m = 0; m < t->size(); ++m) { Part *p = (*t)[m]; cout << "|"<<p->phrase()->title(); cout << ","<<p->start()<<"-"<<p->end(); cout <<"| "; } cout << "\n"; } }