Example #1
0
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";
}
Example #2
0
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";
    }
}