Skip to content

Commit

Permalink
encapsulate min/max note pitch values into MidiTrackNotes
Browse files Browse the repository at this point in the history
  • Loading branch information
smoothdeveloper committed May 17, 2022
1 parent f471c98 commit ba90398
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 23 deletions.
22 changes: 7 additions & 15 deletions src/plugins/score-plugin-midi/Midi/MidiDrop.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ void DropHandler::dropData(
track.notes.apply_scale_ratio(ratio);
}
disp.submit(new Midi::ReplaceNotes{
midi, track.notes, track.min, track.max, actualDuration});
midi, track.notes, track.notes.minimum_pitch_noticed(), track.notes.maximum_pitch_noticed(), actualDuration});
};
vec.push_back(std::move(p));
}
Expand Down Expand Up @@ -273,11 +273,7 @@ static void parseEvent_format0(const libremidi::track_event& ev, std::vector<Mid
note.setStart(delta * (tick / total));
note.setPitch(pitch);
note.setVelocity(vel);
if (note.pitch() < nv.min)
nv.min = note.pitch();
else if (note.pitch() > nv.max)
nv.max = note.pitch();

nv.notes.notice_pitch(note.pitch());
notes.insert({note.pitch(), note});
}
else
Expand All @@ -287,7 +283,7 @@ static void parseEvent_format0(const libremidi::track_event& ev, std::vector<Mid
{
NoteData note = it->second;
note.setDuration(delta * (tick / total - note.start()));
nv.notes.push_back(note);
nv.notes.append(note);
}
notes.erase(pitch);
}
Expand All @@ -305,7 +301,7 @@ static void parseEvent_format0(const libremidi::track_event& ev, std::vector<Mid
{
NoteData note = it->second;
note.setDuration(delta * (tick / total - note.start()));
nv.notes.push_back(note);
nv.notes.append(note);
}
notes.erase(ev.m.bytes[1]);
break;
Expand Down Expand Up @@ -356,11 +352,7 @@ void parseEvent(const libremidi::track_event& ev, MidiTrack& nv, midi_note_map&
note.setStart(delta * (tick / total));
note.setPitch(pitch);
note.setVelocity(vel);
if (note.pitch() < nv.min)
nv.min = note.pitch();
else if (note.pitch() > nv.max)
nv.max = note.pitch();

nv.notes.notice_pitch(note.pitch());
notes.insert({note.pitch(), note});
}
else
Expand All @@ -370,7 +362,7 @@ void parseEvent(const libremidi::track_event& ev, MidiTrack& nv, midi_note_map&
{
NoteData note = it->second;
note.setDuration(delta * (tick / total - note.start()));
nv.notes.push_back(note);
nv.notes.append(note);
}
notes.erase(pitch);
}
Expand All @@ -383,7 +375,7 @@ void parseEvent(const libremidi::track_event& ev, MidiTrack& nv, midi_note_map&
{
NoteData note = it->second;
note.setDuration(delta * (tick / total - note.start()));
nv.notes.push_back(note);
nv.notes.append(note);
}
notes.erase(ev.m.bytes[1]);

Expand Down
25 changes: 18 additions & 7 deletions src/plugins/score-plugin-midi/Midi/MidiDrop.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,10 @@ struct NoteOffData {
};
struct MidiTrackEvent {
static MidiTrackEvent make_note_off(const double start, const midi_size_t ch, const midi_size_t n, const midi_size_t v){
return MidiTrackEvent{m_start: start, m_message: Midi::NoteOffData{channel: ch, note: n, velocity: v}};
return MidiTrackEvent{.m_start = start, .m_message = Midi::NoteOffData{.channel = ch, .note = n, .velocity = v}};
}
static MidiTrackEvent make_note_on(const double start, const midi_size_t ch, const midi_size_t n, const midi_size_t v){
return MidiTrackEvent{m_start: start, m_message: Midi::NoteOnData{channel: ch, note: n, velocity: v}};
return MidiTrackEvent{.m_start = start, .m_message = Midi::NoteOnData{.channel = ch, .note = n, .velocity = v}};
}
double m_start{};

Expand All @@ -60,17 +60,17 @@ struct MidiTrackEvent {
struct MidiTrackEvents {
void push_back(double delta, int tick, double total, Midi::ControllerData c){
const double start = delta * (tick / total);
trackEvents.push_back(MidiTrackEvent{m_start:start, m_message: c});
trackEvents.push_back(MidiTrackEvent{.m_start = start, .m_message = c});
}

void push_back(double delta, int tick, double total, Midi::NoteOnData n){
const double start = delta * (tick / total);
trackEvents.push_back(MidiTrackEvent{m_start:start, m_message: n});
trackEvents.push_back(MidiTrackEvent{.m_start = start, .m_message = n});
}

void push_back(double delta, int tick, double total, Midi::NoteOffData n){
const double start = delta * (tick / total);
trackEvents.push_back(MidiTrackEvent{m_start:start, m_message: n});
trackEvents.push_back(MidiTrackEvent{.m_start = start, .m_message = n});
}

void apply_scale_ratio(const double ratio){
Expand All @@ -84,11 +84,23 @@ struct MidiTrackEvents {
};

struct MidiTrackNotes {
using pitch = int;
std::vector<Midi::NoteData> notes;
void push_back(Midi::NoteData note){
pitch min{127}, max{0};
pitch minimum_pitch_noticed() const { return min; }
pitch maximum_pitch_noticed() const { return max; }
void append(Midi::NoteData note){
notes.push_back(note);
}

void notice_pitch(int pitch){
if (pitch < min) {
min = pitch;
}
else if (pitch > max) {
max = pitch;
}
}
auto begin() { return notes.begin(); }
auto end() { return notes.end(); }
auto cbegin() const { return notes.begin(); }
Expand All @@ -114,7 +126,6 @@ struct MidiTrack

MidiTrackNotes notes;
MidiTrackEvents trackEvents;
int min{127}, max{0};

struct MidiSong
{
Expand Down
2 changes: 1 addition & 1 deletion src/plugins/score-plugin-midi/Midi/MidiPresenter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -375,7 +375,7 @@ void Presenter::on_drop(const QPointF& pos, const QMimeData& md)
track.notes.apply_scale_ratio(ratio);
track.trackEvents.apply_scale_ratio(ratio);
disp.submit<Midi::ReplaceNotes>(
model(), track.notes, track.min, track.max, model().duration());
model(), track.notes, track.notes.minimum_pitch_noticed(), track.notes.maximum_pitch_noticed(), model().duration());
}

std::vector<Id<Note>> Presenter::selectedNotes() const
Expand Down

0 comments on commit ba90398

Please sign in to comment.