Skip to content

Commit

Permalink
Update SeqTrackContentViewer MIDI temp
Browse files Browse the repository at this point in the history
  • Loading branch information
FangCunWuChang committed May 22, 2024
1 parent 6ca2268 commit 7bb5d5e
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 1 deletion.
25 changes: 24 additions & 1 deletion src/ui/component/sequencer/SeqTrackContentViewer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ void SeqTrackContentViewer::updateData() {
this->audioDataTemp = {};
this->midiDataTemp = juce::MidiFile{};
this->audioPointTemp.clear();
this->midiMinNote = this->midiMaxNote = 0;

/** Get Audio Data */
if (this->audioValid) {
Expand Down Expand Up @@ -190,7 +191,11 @@ void SeqTrackContentViewer::updateDataImage() {

/** MIDI Data */
if (this->midiValid) {
/** TODO Update MIDI */
/** Update MIDI */
this->updateMIDINoteTempInternal();

/** Repaint */
this->repaint();
}
}

Expand Down Expand Up @@ -304,3 +309,21 @@ void SeqTrackContentViewer::setAudioPointTempInternal(
const juce::Array<juce::MemoryBlock>& temp) {
this->audioPointTemp = temp;
}

void SeqTrackContentViewer::updateMIDINoteTempInternal() {
/** Get Note Zone */
int minNote = 127, maxNote = 0;
int midiTracks = this->midiDataTemp.getNumTracks();
for (int i = 0; i < midiTracks; i++) {
auto track = this->midiDataTemp.getTrack(i);
for (auto e : (*track)) {
if (e->message.isNoteOn(true)) {
minNote = std::min(minNote, e->message.getNoteNumber());
maxNote = std::max(maxNote, e->message.getNoteNumber());
}
}
}
if (maxNote < minNote) { maxNote = minNote = 0; }
this->midiMinNote = minNote;
this->midiMaxNote = maxNote;
}
2 changes: 2 additions & 0 deletions src/ui/component/sequencer/SeqTrackContentViewer.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,13 @@ class SeqTrackContentViewer final : public juce::Component {
juce::MidiFile midiDataTemp;

juce::Array<juce::MemoryBlock> audioPointTemp;
int midiMinNote = 0, midiMaxNote = 0;

std::unique_ptr<juce::Timer> blockImageUpdateTimer = nullptr;

void updateBlockInternal(int blockIndex);
void setAudioPointTempInternal(const juce::Array<juce::MemoryBlock>& temp);
void updateMIDINoteTempInternal();

JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(SeqTrackContentViewer)
};

0 comments on commit 7bb5d5e

Please sign in to comment.