#ifndef IMPORTMIDI_TUPLET_H #define IMPORTMIDI_TUPLET_H #include "importmidi_fraction.h" namespace Ms { class MidiChord; class DurationElement; class TimeSigMap; class MTrack; class Staff; namespace MidiTuplet { struct TupletInfo; struct TupletData { int voice; ReducedFraction onTime; ReducedFraction len; int tupletNumber; ReducedFraction tupletQuant; std::vector elements; }; struct TupletLimits { // ratio - for conversion from tuplet durations to regular durations // for example, 8th note in triplet * 3/2 = regular 8th note ReducedFraction ratio; int minNoteCount; int minNoteCountAddVoice; int minNoteCountStaccato; }; const TupletLimits& tupletLimits(int tupletNumber); std::vector findTupletsInBarForDuration(int voice, const ReducedFraction &barStartTick, const ReducedFraction &durationOnTime, const ReducedFraction &durationLen, const std::multimap &tupletEvents); std::multimap::const_iterator findTupletForTimeRange(int voice, const ReducedFraction &onTime, const ReducedFraction &len, const std::multimap &tupletEvents); std::multimap::const_iterator findTupletContainsTime(int voice, const ReducedFraction &time, const std::multimap &tupletEvents); std::multimap findAllTuplets(std::multimap &chords, const TimeSigMap *sigmap, const ReducedFraction &lastTick); void removeEmptyTuplets(MTrack &track); void addElementToTuplet(int voice, const ReducedFraction &onTime, const ReducedFraction &len, DurationElement *el, std::multimap &tuplets); void createTuplets(Staff *staff, const std::multimap &tuplets); } // namespace MidiTuplet } // namespace Ms #endif // IMPORTMIDI_TUPLET_H