From fb4f04e4d18dd845c93d7ed3c3faaa657a4224ea Mon Sep 17 00:00:00 2001 From: reuk Date: Thu, 6 Mar 2025 16:26:44 +0000 Subject: [PATCH] MIDI: Add span getters for MidiMessage and MidiMessageMetadata --- modules/juce_audio_basics/midi/juce_MidiBuffer.h | 7 +++++++ modules/juce_audio_basics/midi/juce_MidiMessage.h | 7 +++++++ modules/juce_audio_basics/midi/ump/juce_UMPConversion.h | 6 ++---- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/modules/juce_audio_basics/midi/juce_MidiBuffer.h b/modules/juce_audio_basics/midi/juce_MidiBuffer.h index 32a0283236..7994ea76f3 100644 --- a/modules/juce_audio_basics/midi/juce_MidiBuffer.h +++ b/modules/juce_audio_basics/midi/juce_MidiBuffer.h @@ -60,6 +60,13 @@ struct MidiMessageMetadata */ MidiMessage getMessage() const { return MidiMessage (data, numBytes, samplePosition); } + Span asSpan() const& + { + return { reinterpret_cast (data), (size_t) numBytes }; + } + + Span asSpan() const&& = delete; + /** Pointer to the first byte of a MIDI message. */ const uint8* data = nullptr; diff --git a/modules/juce_audio_basics/midi/juce_MidiMessage.h b/modules/juce_audio_basics/midi/juce_MidiMessage.h index 0e8bcd61af..65a118edb0 100644 --- a/modules/juce_audio_basics/midi/juce_MidiMessage.h +++ b/modules/juce_audio_basics/midi/juce_MidiMessage.h @@ -987,6 +987,13 @@ public: static uint16 pitchbendToPitchwheelPos (float pitchbendInSemitones, float pitchbendRangeInSemitones) noexcept; + Span asSpan() const& + { + return { reinterpret_cast (getRawData()), (size_t) getRawDataSize() }; + } + + Span asSpan() const&& = delete; + private: //============================================================================== /** @cond */ diff --git a/modules/juce_audio_basics/midi/ump/juce_UMPConversion.h b/modules/juce_audio_basics/midi/ump/juce_UMPConversion.h index 371f01b757..57f8387e79 100644 --- a/modules/juce_audio_basics/midi/ump/juce_UMPConversion.h +++ b/modules/juce_audio_basics/midi/ump/juce_UMPConversion.h @@ -51,13 +51,11 @@ struct BytestreamMidiView to a temporary. */ explicit BytestreamMidiView (const MidiMessage* msg) - : bytes (unalignedPointerCast (msg->getRawData()), - static_cast (msg->getRawDataSize())), + : bytes (msg->asSpan()), timestamp (msg->getTimeStamp()) {} explicit BytestreamMidiView (const MidiMessageMetadata msg) - : bytes (unalignedPointerCast (msg.data), - static_cast (msg.numBytes)), + : bytes (msg.asSpan()), timestamp (msg.samplePosition) {} MidiMessage getMessage() const