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