MuseScore/mscore/importmidi_tuplet.h

79 lines
2.4 KiB
C++

#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<DurationElement *> 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<TupletData>
findTupletsInBarForDuration(int voice,
const ReducedFraction &barStartTick,
const ReducedFraction &durationOnTime,
const ReducedFraction &durationLen,
const std::multimap<ReducedFraction, TupletData> &tupletEvents);
std::multimap<ReducedFraction, MidiTuplet::TupletData>::const_iterator
findTupletForTimeRange(int voice,
const ReducedFraction &onTime,
const ReducedFraction &len,
const std::multimap<ReducedFraction, TupletData> &tupletEvents);
std::multimap<ReducedFraction, MidiTuplet::TupletData>::const_iterator
findTupletContainsTime(int voice,
const ReducedFraction &time,
const std::multimap<ReducedFraction, TupletData> &tupletEvents);
std::multimap<ReducedFraction, TupletData>
findAllTuplets(std::multimap<ReducedFraction, MidiChord> &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<ReducedFraction, TupletData> &tuplets);
void createTuplets(Staff *staff,
const std::multimap<ReducedFraction, TupletData> &tuplets);
} // namespace MidiTuplet
} // namespace Ms
#endif // IMPORTMIDI_TUPLET_H