From 1e4414b79d2bc6600f49a2e9dc8bd588d60c156f Mon Sep 17 00:00:00 2001 From: flxkrmr Date: Tue, 3 Nov 2015 16:14:06 +0100 Subject: [PATCH 1/3] added wrapper for jack_midi_get_event_count function --- global.h | 1 + midibuffer.cpp | 4 ++++ midibuffer.h | 5 +++++ 3 files changed, 10 insertions(+) diff --git a/global.h b/global.h index a631ee9..6d9b12d 100644 --- a/global.h +++ b/global.h @@ -26,6 +26,7 @@ // JACK includes #include #include +#include namespace QtJack { typedef jack_default_audio_sample_t AudioSample; diff --git a/midibuffer.cpp b/midibuffer.cpp index 5e09047..cfc81e2 100644 --- a/midibuffer.cpp +++ b/midibuffer.cpp @@ -104,4 +104,8 @@ bool MidiBuffer::pop(MidiRingBuffer &ringBuffer) { return false; } +unsigned int MidiBuffer::getEventCount() { + return (int)jack_midi_get_event_count(_jackBuffer); +} + } // namespace QtJack diff --git a/midibuffer.h b/midibuffer.h index d527097..675a8e7 100644 --- a/midibuffer.h +++ b/midibuffer.h @@ -68,6 +68,11 @@ class MidiBuffer : public Buffer { */ bool pop(MidiRingBuffer& ringBuffer) REALTIME_SAFE; + /** + * @returns the number of midi events in the buffer. + */ + unsigned int getEventCount(); + protected: MidiBuffer(int size, void *buffer); }; From 177dfed2dedeee1357cc662b3efa6b75888a12b1 Mon Sep 17 00:00:00 2001 From: flxkrmr Date: Tue, 3 Nov 2015 17:54:26 +0100 Subject: [PATCH 2/3] fixed wrong return type in getEventCount() --- midibuffer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/midibuffer.cpp b/midibuffer.cpp index cfc81e2..b716733 100644 --- a/midibuffer.cpp +++ b/midibuffer.cpp @@ -105,7 +105,7 @@ bool MidiBuffer::pop(MidiRingBuffer &ringBuffer) { } unsigned int MidiBuffer::getEventCount() { - return (int)jack_midi_get_event_count(_jackBuffer); + return (unsigned int)jack_midi_get_event_count(_jackBuffer); } } // namespace QtJack From 7be4f58d34c619abfc831bb6cb03954438eb6a24 Mon Sep 17 00:00:00 2001 From: flxkrmr Date: Tue, 3 Nov 2015 18:57:59 +0100 Subject: [PATCH 3/3] Disabled most of the MidiBuffer functions, switched typedef MidiSample from char to jack_midi_event_t, renamed MidiSample to MidiEvent, fixed MidiBuffer.read() --- global.h | 2 +- midibuffer.cpp | 19 ++++++++++++++++--- midibuffer.h | 6 +++++- ringbuffer.h | 2 +- 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/global.h b/global.h index 6d9b12d..1520907 100644 --- a/global.h +++ b/global.h @@ -30,7 +30,7 @@ namespace QtJack { typedef jack_default_audio_sample_t AudioSample; -typedef char MidiSample; +typedef jack_midi_event_t MidiEvent; enum TransportState { TransportStateStopped, diff --git a/midibuffer.cpp b/midibuffer.cpp index b716733..390f8f2 100644 --- a/midibuffer.cpp +++ b/midibuffer.cpp @@ -41,6 +41,7 @@ MidiBuffer::MidiBuffer(int size, void *buffer) MidiBuffer::~MidiBuffer() { } +#if 0 bool MidiBuffer::clear() { if(!isValid()) { return false; @@ -50,21 +51,31 @@ bool MidiBuffer::clear() { } return true; } +#endif -MidiSample MidiBuffer::read(int i, bool *ok) const { +bool MidiBuffer::read(MidiEvent *ms, int i, bool *ok) const { if(!isValid()) { if(ok) { (*ok) = false; } - return 0.0; + return false; } if(ok) { (*ok) = true; } - return (double)((i >= 0 && i < _size) ? ((MidiSample*)(_jackBuffer))[i] : 0.0); + +#if 0 + if(i < 0 || i >= this->getEventCount()) { + return false; + } +#endif + + return (jack_midi_event_get(ms, _jackBuffer, i) ? false : true); } +#if 0 + bool MidiBuffer::write(int i, MidiSample value) { if(!isValid()) { return false; @@ -104,6 +115,8 @@ bool MidiBuffer::pop(MidiRingBuffer &ringBuffer) { return false; } +#endif + unsigned int MidiBuffer::getEventCount() { return (unsigned int)jack_midi_get_event_count(_jackBuffer); } diff --git a/midibuffer.h b/midibuffer.h index 675a8e7..8c48bf9 100644 --- a/midibuffer.h +++ b/midibuffer.h @@ -36,12 +36,15 @@ class MidiBuffer : public Buffer { MidiBuffer(const MidiBuffer& other); virtual ~MidiBuffer(); +#if 0 /** Sets all samples to zero. */ bool clear() REALTIME_SAFE; +#endif /** @returns sample at position i in the midi buffer. */ - MidiSample read(int i, bool *ok = 0) const REALTIME_SAFE; + bool read(MidiEvent *ms, int i, bool *ok = 0) const REALTIME_SAFE; +#if 0 /** Writes sample at position i in the midi buffer. */ bool write(int i, MidiSample value) REALTIME_SAFE; @@ -67,6 +70,7 @@ class MidiBuffer : public Buffer { * @returns true on succes, false otherwise. */ bool pop(MidiRingBuffer& ringBuffer) REALTIME_SAFE; +#endif /** * @returns the number of midi events in the buffer. diff --git a/ringbuffer.h b/ringbuffer.h index 07e25e4..54b902c 100644 --- a/ringbuffer.h +++ b/ringbuffer.h @@ -117,6 +117,6 @@ class RingBuffer { }; typedef RingBuffer AudioRingBuffer; -typedef RingBuffer MidiRingBuffer; +typedef RingBuffer MidiRingBuffer; } // namespace QtJack