From 1fb22035172a0bf077e8cdb85a5d5a597cc4f401 Mon Sep 17 00:00:00 2001 From: reuk Date: Fri, 2 Jul 2021 18:02:49 +0100 Subject: [PATCH] MidiFile: Allow reporting the type of parsed files --- modules/juce_audio_basics/midi/juce_MidiFile.cpp | 15 ++++++++++++--- modules/juce_audio_basics/midi/juce_MidiFile.h | 6 +++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/modules/juce_audio_basics/midi/juce_MidiFile.cpp b/modules/juce_audio_basics/midi/juce_MidiFile.cpp index f1be520328..270f4f9a7e 100644 --- a/modules/juce_audio_basics/midi/juce_MidiFile.cpp +++ b/modules/juce_audio_basics/midi/juce_MidiFile.cpp @@ -356,7 +356,9 @@ double MidiFile::getLastTimestamp() const } //============================================================================== -bool MidiFile::readFrom (InputStream& sourceStream, bool createMatchingNoteOffs) +bool MidiFile::readFrom (InputStream& sourceStream, + bool createMatchingNoteOffs, + int* fileType) { clear(); MemoryBlock data; @@ -405,7 +407,12 @@ bool MidiFile::readFrom (InputStream& sourceStream, bool createMatchingNoteOffs) d += chunkSize; } - return size == 0; + const auto successful = (size == 0); + + if (successful && fileType != nullptr) + *fileType = header.fileType; + + return successful; } void MidiFile::readNextTrack (const uint8* data, int size, bool createMatchingNoteOffs) @@ -778,7 +785,9 @@ struct MidiFileTest : public UnitTest MemoryInputStream is (os.getData(), os.getDataSize(), false); MidiFile mf; - if (mf.readFrom (is)) + int fileType = 0; + + if (mf.readFrom (is, true, &fileType)) return mf; return {}; diff --git a/modules/juce_audio_basics/midi/juce_MidiFile.h b/modules/juce_audio_basics/midi/juce_MidiFile.h index 3ab4229a89..de043ed9a2 100644 --- a/modules/juce_audio_basics/midi/juce_MidiFile.h +++ b/modules/juce_audio_basics/midi/juce_MidiFile.h @@ -160,10 +160,14 @@ public: @param createMatchingNoteOffs if true, any missing note-offs for previous note-ons will be automatically added at the end of the file by calling MidiMessageSequence::updateMatchedPairs on each track. + @param midiFileType if not nullptr, the integer at this address will be set + to 0, 1, or 2 depending on the type of the midi file @returns true if the stream was read successfully */ - bool readFrom (InputStream& sourceStream, bool createMatchingNoteOffs = true); + bool readFrom (InputStream& sourceStream, + bool createMatchingNoteOffs = true, + int* midiFileType = nullptr); /** Writes the midi tracks as a standard midi file. The midiFileType value is written as the file's format type, which can be 0, 1