void MuseScore::addTempo() { ChordRest* cr = cs->getSelectedChordRest(); if (!cr) return; // double bps = 2.0; SigEvent event = cs->sigmap()->timesig(cr->tick()); Fraction f = event.nominal(); QString text(QString("%1%2 = 80").arg(QChar(0xd834)).arg(QChar(0xdd5f))); switch (f.denominator()) { case 1: text = QString("%1%2 = 80").arg(QChar(0xd834)).arg(QChar(0xdd5d)); break; case 2: text = QString("%1%2 = 80").arg(QChar(0xd834)).arg(QChar(0xdd5e)); break; case 4: text = QString("%1%2 = 80").arg(QChar(0xd834)).arg(QChar(0xdd5f)); break; case 8: if(f.numerator() % 3 == 0) text = QString("%1%2%3%4 = 80").arg(QChar(0xd834)).arg(QChar(0xdd5f)).arg(QChar(0xd834)).arg(QChar(0xdd6d)); else text = QString("%1%2 = 80").arg(QChar(0xd834)).arg(QChar(0xdd60)); break; case 16: if(f.numerator() % 3 == 0) text = QString("%1%2%3%4 = 80").arg(QChar(0xd834)).arg(QChar(0xdd60)).arg(QChar(0xd834)).arg(QChar(0xdd6d)); else text = text = QString("%1%2 = 80").arg(QChar(0xd834)).arg(QChar(0xdd61)); break; case 32: if(f.numerator() % 3 == 0) text = QString("%1%2%3%4 = 80").arg(QChar(0xd834)).arg(QChar(0xdd61)).arg(QChar(0xd834)).arg(QChar(0xdd6d)); else text = text = QString("%1%2 = 80").arg(QChar(0xd834)).arg(QChar(0xdd62)); break; case 64: if(f.numerator() % 3 == 0) text = QString("%1%2%3%4 = 80").arg(QChar(0xd834)).arg(QChar(0xdd62)).arg(QChar(0xd834)).arg(QChar(0xdd6d)); else text = text = QString("%1%2 = 80").arg(QChar(0xd834)).arg(QChar(0xdd63)); break; default: break; } TempoText* tt = new TempoText(cs); tt->setParent(cr->segment()); tt->setTrack(cr->track()); tt->setText(text); tt->setFollowText(true); //tt->setTempo(bps); cs->undoAddElement(tt); cv->startEdit(tt); }
void MuseScore::addTempo() { ChordRest* cr = cs->getSelectedChordRest(); if (!cr) return; // double bps = 2.0; SigEvent event = cs->sigmap()->timesig(cr->tick()); Fraction f = event.nominal(); QString text("<sym>noteQuarterUp</sym> = 80"); switch (f.denominator()) { case 1: text = "<sym>noteWhole</sym> = 80"; break; case 2: text = "<sym>noteHalfUp</sym> = 80"; break; case 4: text = "<sym>noteQuarterUp</sym> = 80"; break; case 8: if(f.numerator() % 3 == 0) text = "<sym>noteQuarterUp</sym><sym>textAugmentationDot</sym> = 80"; else text = "<sym>note8thUp</sym> = 80"; break; case 16: if(f.numerator() % 3 == 0) text = text = "<sym>note8thUp</sym><sym>textAugmentationDot</sym> = 80"; else text = "<sym>note16thUp</sym> = 80"; break; case 32: if(f.numerator() % 3 == 0) text = "<sym>note16thUp</sym><sym>textAugmentationDot</sym> = 80"; else text = "<sym>note32thUp</sym> = 80"; break; case 64: if(f.numerator() % 3 == 0) text = "<sym>note32thUp</sym><sym>textAugmentationDot</sym> = 80"; else text = "<sym>note64thUp</sym> = 80"; break; default: break; } TempoText* tt = new TempoText(cs); tt->setParent(cr->segment()); tt->setTrack(cr->track()); tt->setText(text); tt->setFollowText(true); //tt->setTempo(bps); cs->undoAddElement(tt); cv->startEdit(tt); }
ArticulationProperties::ArticulationProperties(Articulation* na, QWidget* parent) : QDialog(parent) { setupUi(this); setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint); articulation = na; ChordRest* cr = articulation->chordRest(); if (cr) { Segment* segment = cr->segment(); Part* part = articulation->staff()->part(); Instrument* instrument = part->instr(segment->tick()); // const QList<NamedEventList>& midiActions() const; // const QList<MidiArticulation>& articulation() const; // const QList<Channel>& channel() const; foreach(const Channel& a, instrument->channel()) { if (a.name.isEmpty() || a.name == "normal") channelList->addItem(tr("normal")); else channelList->addItem(a.name); } foreach(const NamedEventList& el, instrument->midiActions()) { midiActionList->addItem(el.name); } } #if 0 foreach(const NamedEventList& e, instrument->midiActions) midiActionList->addItem(e.name); articulationChange->setChecked(!articulation->articulationName().isEmpty()); midiAction->setChecked(!articulation->midiActionName().isEmpty()); if (!articulation->articulationName().isEmpty()) { QList<QListWidgetItem*> wl = articulationList ->findItems(st->articulationName(), Qt::MatchExactly); if (!wl.isEmpty()) articulationList->setCurrentRow(articulationList->row(wl[0])); } if (!articulation->midiActionName().isEmpty()) { QList<QListWidgetItem*> wl = midiActionList ->findItems(st->midiActionName(), Qt::MatchExactly); if (!wl.isEmpty()) midiActionList->setCurrentRow(midiActionList->row(wl[0])); } #endif direction->setCurrentIndex(int(articulation->direction())); anchor->setCurrentIndex(int(articulation->anchor())); connect(this, SIGNAL(accepted()), SLOT(saveValues())); }
QPointF Pedal::linePos(GripLine grip, System** sys) const { qreal x; qreal nhw = score()->noteHeadWidth(); System* s; if (grip == GripLine::START) { ChordRest* c = static_cast<ChordRest*>(startElement()); s = c->segment()->system(); x = c->pos().x() + c->segment()->pos().x() + c->segment()->measure()->pos().x(); if (beginHook() && beginHookType() == HookType::HOOK_45) x += nhw * .5; } else { ChordRest* c = static_cast<ChordRest*>(endElement()); if (c) { s = c->segment()->system(); x = c->pos().x() + c->segment()->pos().x() + c->segment()->measure()->pos().x(); } else { int t = tick2(); Measure* m = score()->tick2measure(t); s = m->system(); x = m->tick2pos(t); } if (endHook() && endHookType() == HookType::HOOK_45) x += nhw * .5; else x += nhw; } *sys = s; return QPointF(x, 0); }
void TestChordSymbol::testAddPart() { MasterScore* score = test_pre("add-part"); Segment* seg = score->firstSegment(Segment::Type::ChordRest); ChordRest* cr = seg->cr(0); Harmony* harmony = new Harmony(score); harmony->setHarmony("C7"); harmony->setTrack(cr->track()); harmony->setParent(cr->segment()); score->undoAddElement(harmony); score->doLayout(); test_post(score, "add-part"); }
QPointF Pedal::linePos(GripLine grip, System** sys) const { qreal x; qreal nhw = score()->noteHeadWidth(); System* s = nullptr; if (grip == GripLine::START) { ChordRest* c = static_cast<ChordRest*>(startElement()); s = c->segment()->system(); x = c->pos().x() + c->segment()->pos().x() + c->segment()->measure()->pos().x(); if (beginHook() && beginHookType() == HookType::HOOK_45) x += nhw * .5; } else { ChordRest* c = nullptr; Element* e = endElement(); if (!e || e == startElement()) { // pedal marking on single note - extend to next note or end of measure Segment* seg = startSegment(); if (seg) { seg = seg->next(); for ( ; seg; seg = seg->next()) { if (seg->segmentType() == Segment::Type::ChordRest) { if (seg->element(track())) break; } else if (seg->segmentType() == Segment::Type::EndBarLine) { break; } } } if (seg) { s = seg->system(); x = seg->pos().x() + seg->measure()->pos().x() - nhw * 2; } } else { c = static_cast<ChordRest*>(endElement()); if (c) { s = c->segment()->system(); x = c->pos().x() + c->segment()->pos().x() + c->segment()->measure()->pos().x(); } } if (!s) { int t = tick2(); Measure* m = score()->tick2measure(t); s = m->system(); x = m->tick2pos(t); } if (endHook() && endHookType() == HookType::HOOK_45) x += nhw * .5; else x += nhw; } *sys = s; return QPointF(x, 0); }
void MuseScore::addTempo() { ChordRest* cr = cs->getSelectedChordRest(); if (!cr) return; if (editTempo == 0) editTempo = new EditTempo(0); int rv = editTempo->exec(); if (rv == 1) { double bps = editTempo->bpm() / 60.0; TempoText* tt = new TempoText(cs); tt->setParent(cr->segment()); tt->setTrack(cr->track()); tt->setText(editTempo->text()); tt->setTempo(bps); cs->undoAddElement(tt); cs->addRefresh(tt->abbox()); // ?? } }
bool Lyrics::isMelisma() const { // entered as melisma using underscore? if (_ticks > 0) return true; // hyphenated? // if so, it is a melisma only if there is no lyric in same verse on next CR if (_syllabic == Syllabic::BEGIN || _syllabic == Syllabic::MIDDLE) { // find next CR on same track and check for existence of lyric in same verse ChordRest* cr = chordRest(); Segment* s = cr->segment()->next1(); ChordRest* ncr = s ? s->nextChordRest(cr->track()) : nullptr; if (ncr && !ncr->lyrics(_no)) return true; } // default - not a melisma return false; }
void SwingDetector::applySwing() { if (elements.size() != 2 && elements.size() != 3) return; Tuplet *tuplet = nullptr; for (ChordRest *el: elements) { el->setDurationType(TDuration::DurationType::V_EIGHTH); el->setTicks(Fraction(1, 8)); el->setDots(0); if (el->tuplet()) { if (!tuplet) tuplet = el->tuplet(); tuplet->remove(el); el->setTuplet(nullptr); } } const ChordRest *first = elements.front(); const int startTick = first->segment()->tick().ticks(); ChordRest *last = elements.back(); last->segment()->remove(last); Segment *s = last->measure()->getSegment(SegmentType::ChordRest, Fraction::fromTicks(startTick + MScore::division / 2)); s->add(last); if (elements.size() == 3) { // remove central rest ChordRest *cr = elements[1]; cr->score()->removeElement(cr); delete cr; } if (tuplet) { // delete tuplet delete tuplet; tuplet = nullptr; } if (!swingApplied) swingApplied = true; }
QPointF Pedal::linePos(Grip grip, System** sys) const { qreal x = 0.0; qreal nhw = score()->noteHeadWidth(); System* s = nullptr; if (grip == Grip::START) { ChordRest* c = toChordRest(startElement()); if (c) { s = c->segment()->system(); x = c->pos().x() + c->segment()->pos().x() + c->segment()->measure()->pos().x(); if (c->type() == ElementType::REST && c->durationType() == TDuration::DurationType::V_MEASURE) x -= c->x(); if (beginHookType() == HookType::HOOK_45) x += nhw * .5; } } else { Element* e = endElement(); ChordRest* c = toChordRest(endElement()); if (!e || e == startElement() || (endHookType() == HookType::HOOK_90)) { // pedal marking on single note or ends with non-angled hook: // extend to next note or end of measure Segment* seg = nullptr; if (!e) seg = startSegment(); else seg = c->segment(); if (seg) { seg = seg->next(); for ( ; seg; seg = seg->next()) { if (seg->segmentType() == SegmentType::ChordRest) { // look for a chord/rest in any voice on this staff bool crFound = false; int track = staffIdx() * VOICES; for (int i = 0; i < VOICES; ++i) { if (seg->element(track + i)) { crFound = true; break; } } if (crFound) break; } else if (seg->segmentType() == SegmentType::EndBarLine) { break; } } } if (seg) { s = seg->system(); x = seg->pos().x() + seg->measure()->pos().x() - nhw * 2; } } else if (c) { s = c->segment()->system(); x = c->pos().x() + c->segment()->pos().x() + c->segment()->measure()->pos().x(); if (c->type() == ElementType::REST && c->durationType() == TDuration::DurationType::V_MEASURE) x -= c->x(); } if (!s) { int t = tick2(); Measure* m = score()->tick2measure(t); s = m->system(); x = m->tick2pos(t); } if (endHookType() == HookType::HOOK_45) x += nhw * .5; else x += nhw; } *sys = s; return QPointF(x, 0); }