Skip to content

Commit

Permalink
feat: added microtonal accidentals midi export (#21504)
Browse files Browse the repository at this point in the history
  • Loading branch information
mikekirin authored and igorkorsukov committed Feb 14, 2024
1 parent 9d48aaa commit 1b4ecba
Showing 1 changed file with 18 additions and 0 deletions.
18 changes: 18 additions & 0 deletions src/engraving/compat/midi/compatmidirenderinternal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
#include "style/style.h"
#include "types/constants.h"

#include "dom/accidental.h"
#include "dom/arpeggio.h"
#include "dom/articulation.h"
#include "dom/bend.h"
Expand Down Expand Up @@ -243,6 +244,23 @@ static void playNote(EventsHolder& events, const Note* note, PlayNoteParams para
}

events[params.channel].insert(std::pair<int, NPlayEvent>(std::max(0, params.onTime - params.offset), ev));
Accidental* acc = note->accidental();
if (acc) {
AccidentalType type = acc->accidentalType();
double cents = Accidental::subtype2centOffset(type);
if (!RealIsNull(cents)) {
double pwValue = cents / 100.0 * (double)wheelSpec.mLimit / (double)wheelSpec.mAmplitude;
PitchWheelRenderer::PitchWheelFunction func;
func.mStartTick = params.onTime - params.offset;
func.mEndTick = params.offTime - params.offset;
auto microtonalPW = [pwValue](uint32_t tick) {
UNUSED(tick);
return static_cast<int>(std::round(pwValue));
};
func.func = microtonalPW;
pitchWheelRenderer.addPitchWheelFunction(func, params.channel, params.staffIdx, MidiInstrumentEffect::NONE);
}
}
// adds portamento for continuous glissando
for (Spanner* spanner : note->spannerFor()) {
if (spanner->type() == ElementType::GLISSANDO) {
Expand Down

0 comments on commit 1b4ecba

Please sign in to comment.