diff --git a/global.h b/global.h index a631ee9..1520907 100644 --- a/global.h +++ b/global.h @@ -26,10 +26,11 @@ // JACK includes #include #include +#include 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 5e09047..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,4 +115,10 @@ bool MidiBuffer::pop(MidiRingBuffer &ringBuffer) { return false; } +#endif + +unsigned int MidiBuffer::getEventCount() { + return (unsigned int)jack_midi_get_event_count(_jackBuffer); +} + } // namespace QtJack diff --git a/midibuffer.h b/midibuffer.h index d527097..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,12 @@ 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. + */ + unsigned int getEventCount(); protected: MidiBuffer(int size, void *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