Skip to content

Commit b4e4d63

Browse files
Update midi note-on with velocity 0 as note-off
1 parent 20bcb3f commit b4e4d63

File tree

5 files changed

+12
-7
lines changed

5 files changed

+12
-7
lines changed

src/audioCore/Utils.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1069,4 +1069,6 @@ namespace utils {
10691069
}
10701070
return true;
10711071
}
1072+
1073+
bool regardVel0NoteAsNoteOff() { return true; }
10721074
}

src/audioCore/Utils.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,8 @@ namespace utils {
157157
const juce::File& base = utils::getProjectDir());
158158
bool writeBlockToFile(const juce::String& path, const juce::MemoryBlock& block,
159159
const juce::File& base = utils::getProjectDir());
160+
161+
bool regardVel0NoteAsNoteOff();
160162
}
161163

162164
#define UNUSED(var) (void)var

src/audioCore/graph/SeqSourceProcessor.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -667,10 +667,10 @@ void SeqSourceProcessor::processBlock(
667667
/** Set Note State */
668668
for (auto i : midiMessages) {
669669
auto mes = i.getMessage();
670-
if (mes.isNoteOn(true)) {
670+
if (mes.isNoteOn(!utils::regardVel0NoteAsNoteOff())) {
671671
this->activeNoteSet.insert({ mes.getChannel(), mes.getNoteNumber() });
672672
}
673-
else if (mes.isNoteOff(false)) {
673+
else if (mes.isNoteOff(utils::regardVel0NoteAsNoteOff())) {
674674
this->activeNoteSet.erase({ mes.getChannel(), mes.getNoteNumber() });
675675
}
676676
}

src/audioCore/source/SourceMIDITemp.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include "SourceMIDITemp.h"
2+
#include "../Utils.h"
23

34
void SourceMIDITemp::setData(const juce::MidiFile& data) {
45
this->sourceData = data;
@@ -27,7 +28,7 @@ void SourceMIDITemp::update() {
2728
/** For Each Track */
2829
for (int i = 0; i < this->sourceData.getNumTracks(); i++) {
2930
juce::MidiMessageSequence track{ *(this->sourceData.getTrack(i)) };
30-
track.updateMatchedPairs();
31+
track.updateMatchedPairs(utils::regardVel0NoteAsNoteOff());
3132
double endTime = track.getEndTime();
3233

3334
/** Track Event Temp */
@@ -51,15 +52,15 @@ void SourceMIDITemp::update() {
5152
auto event = track.getEventPointer(i);
5253

5354
/** Get Notes */
54-
if (event->message.isNoteOn(true)) {
55+
if (event->message.isNoteOn(!utils::regardVel0NoteAsNoteOff())) {
5556
Note note{};
5657
note.channel = (uint8_t)event->message.getChannel();
5758
note.startSec = event->message.getTimeStamp();
5859
note.endSec = event->noteOffObject ? event->noteOffObject->message.getTimeStamp() : endTime;
5960
note.pitch = (uint8_t)event->message.getNoteNumber();
6061
note.vel = event->message.getVelocity();
6162

62-
auto& lastLyrics = lastLyricsTemp[(size_t)note.channel - 1];
63+
auto& lastLyrics = lastLyricsTemp[note.channel];
6364
if (juce::approximatelyEqual(std::get<0>(lastLyrics), note.startSec)) {
6465
note.lyrics = std::get<1>(lastLyrics);
6566
lastLyrics = initLyricsItem;
@@ -73,7 +74,7 @@ void SourceMIDITemp::update() {
7374
/** Get Lyrics */
7475
if (event->message.isMetaEvent() && event->message.getMetaEventType() == 0x05) {
7576
uint8_t channel = event->message.getChannel();
76-
lastLyricsTemp[(size_t)channel - 1] = { event->message.getTimeStamp(), event->message.getTextFromTextMetaEvent() };
77+
lastLyricsTemp[channel] = { event->message.getTimeStamp(), event->message.getTextFromTextMetaEvent() };
7778
continue;
7879
}
7980
/** Sustain Pedal */

0 commit comments

Comments
 (0)