Clef::Clef( ClefAttr *clefAttr ): LayerElement("clef-") { Clef(); this->SetShape(clefAttr->GetClefShape()); this->SetLine(clefAttr->GetClefLine()); this->SetDis(clefAttr->GetClefDis()); this->SetDisPlace(clefAttr->GetClefDisPlace()); }
void SegmentAutoSplitCommand::execute() { if (m_newSegments.empty()) { std::vector<AutoSplitPoint> splitPoints; Clef clef; Key key; timeT segmentStart = m_segment->getStartTime(); timeT lastSoundTime = segmentStart; timeT lastSplitTime = segmentStart - 1; for (Segment::iterator i = m_segment->begin(); m_segment->isBeforeEndMarker(i); ++i) { timeT myTime = (*i)->getAbsoluteTime(); int barNo = m_composition->getBarNumber(myTime); if ((*i)->isa(Clef::EventType)) { clef = Clef(**i); } else if ((*i)->isa(Key::EventType)) { key = Key(**i); } if (myTime <= lastSplitTime) continue; bool newTimeSig = false; TimeSignature tsig = m_composition->getTimeSignatureInBar(barNo, newTimeSig); if (newTimeSig) { // If there's a new time sig in this bar and we haven't // already made a split in this bar, make one if (splitPoints.empty() || m_composition->getBarNumber (splitPoints[splitPoints.size() - 1].time) < barNo) { splitPoints.push_back(AutoSplitPoint(myTime, lastSoundTime, clef, key)); lastSoundTime = lastSplitTime = myTime; } } else if ((*i)->isa(Note::EventRestType)) { // Otherwise never start a subsegment on a rest continue; } else { // When we meet a non-rest event, start a new split // if an entire bar has passed since the last non-rest event int lastSoundBarNo = m_composition->getBarNumber(lastSoundTime); if (lastSoundBarNo < barNo - 1 || (lastSoundBarNo == barNo - 1 && m_composition->getBarStartForTime(lastSoundTime) == lastSoundTime && lastSoundTime > segmentStart)) { splitPoints.push_back (AutoSplitPoint (m_composition->getBarStartForTime(myTime), lastSoundTime, clef, key)); lastSplitTime = myTime; } } lastSoundTime = std::max(lastSoundTime, myTime + (*i)->getDuration()); } for (size_t split = 0; split <= splitPoints.size(); ++split) { Segment *newSegment = new Segment(); newSegment->setTrack(m_segment->getTrack()); std::string label = m_segment->getLabel(); newSegment->setLabel(appendLabel(label, qstrtostr(tr("(part %1)").arg(split + 1)))); newSegment->setColourIndex(m_segment->getColourIndex()); timeT startTime = segmentStart; if (split > 0) { RG_DEBUG << "Auto-split point " << split - 1 << ": time " << splitPoints[split - 1].time << ", lastSoundTime " << splitPoints[split - 1].lastSoundTime << endl; startTime = splitPoints[split - 1].time; newSegment->insert(splitPoints[split - 1].clef.getAsEvent(startTime)); newSegment->insert(splitPoints[split - 1].key.getAsEvent(startTime)); } Segment::iterator i = m_segment->findTime(startTime); // A segment has to contain at least one note to be a worthy // candidate for adding back into the composition bool haveNotes = false; while (m_segment->isBeforeEndMarker(i)) { timeT t = (*i)->getAbsoluteTime(); if (split < splitPoints.size() && t >= splitPoints[split].lastSoundTime) break; if ((*i)->isa(Note::EventType)) haveNotes = true; newSegment->insert(new Event(**i)); ++i; } if (haveNotes) m_newSegments.push_back(newSegment); else delete newSegment; } } m_composition->detachSegment(m_segment); for (size_t i = 0; i < m_newSegments.size(); ++i) { m_composition->addSegment(m_newSegments[i]); } m_detached = true; }
const Rosegarden::Clef clefIndexToClef(int index) { Rosegarden::Clef clef; // insert an initial clef from track parameters switch (index) { case TrebleClef: clef = Clef(Clef::Treble); break; case BassClef: clef = Clef(Clef::Bass); break; case CrotalesClef: clef = Clef(Clef::Treble, 2); break; case XylophoneClef: clef = Clef(Clef::Treble, 1); break; case GuitarClef: clef = Clef(Clef::Treble, -1); break; case ContrabassClef: clef = Clef(Clef::Bass, -1); break; case CelestaClef: clef = Clef(Clef::Bass, 2); break; case OldCelestaClef: clef = Clef(Clef::Bass, 1); break; case FrenchClef: clef = Clef(Clef::French); break; case SopranoClef: clef = Clef(Clef::Soprano); break; case MezzosopranoClef: clef = Clef(Clef::Mezzosoprano); break; case AltoClef: clef = Clef(Clef::Alto); break; case TenorClef: clef = Clef(Clef::Tenor); break; case BaritoneClef: clef = Clef(Clef::Baritone); break; case VarbaritoneClef: clef = Clef(Clef::Varbaritone); break; case SubbassClef: clef = Clef(Clef::Subbass); break; default: clef = Clef(Clef::Treble); break; } return clef; }