diff options
author | Tim E. Real <termtech@rogers.com> | 2011-02-09 22:37:27 +0000 |
---|---|---|
committer | Tim E. Real <termtech@rogers.com> | 2011-02-09 22:37:27 +0000 |
commit | d7f4820023196bfc7d40ef5fa134bc46a6e55849 (patch) | |
tree | fa00ee04c060c2ece1122f9d3fee382b0d5f043c /muse2/muse/mpevent.h | |
parent | e11f572d97bb761d848fad41991d0ed747bad111 (diff) |
Mini MIDI overhaul. Please see ChangeLog.
Diffstat (limited to 'muse2/muse/mpevent.h')
-rw-r--r-- | muse2/muse/mpevent.h | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/muse2/muse/mpevent.h b/muse2/muse/mpevent.h index 6df7b0c0..b9b21e08 100644 --- a/muse2/muse/mpevent.h +++ b/muse2/muse/mpevent.h @@ -14,7 +14,14 @@ #include "evdata.h" #include "memory.h" -#define MIDI_FIFO_SIZE 512 +// Play events ring buffer size +//#define MIDI_FIFO_SIZE 512 +// Increased. FE/6/11 p4.0.15 Tim. +#define MIDI_FIFO_SIZE 2100 + +// Record events ring buffer size +//#define MIDI_REC_FIFO_SIZE 512 +#define MIDI_REC_FIFO_SIZE 160 class Event; class EvData; @@ -132,8 +139,9 @@ class MidiPlayEvent : public MEvent { typedef std::multiset<MidiPlayEvent, std::less<MidiPlayEvent>, audioRTalloc<MidiPlayEvent> > MPEL; struct MPEventList : public MPEL { - void add(const MidiPlayEvent& ev) { MPEL::insert(ev); } - }; + //void add(const MidiPlayEvent& ev) { MPEL::insert(ev); } + iterator add(const MidiPlayEvent& ev) { return MPEL::insert(ev); } // p4.0.15 We need the iterator. +}; typedef MPEventList::iterator iMPEvent; typedef MPEventList::const_iterator ciMPEvent; @@ -170,9 +178,31 @@ class MidiFifo { public: MidiFifo() { clear(); } - bool put(const MidiPlayEvent& event); // returns true on fifo overflow + bool put(const MidiPlayEvent& /*event*/); // returns true on fifo overflow + MidiPlayEvent get(); + const MidiPlayEvent& peek(int = 0); + void remove(); + bool isEmpty() const { return size == 0; } + void clear() { size = 0, wIndex = 0, rIndex = 0; } + int getSize() const { return size; } + }; + +//--------------------------------------------------------- +// MidiRecFifo +// (Same as MidiFifo, but with a smaller size.) +//--------------------------------------------------------- + +class MidiRecFifo { + MidiPlayEvent fifo[MIDI_REC_FIFO_SIZE]; + volatile int size; + int wIndex; + int rIndex; + + public: + MidiRecFifo() { clear(); } + bool put(const MidiPlayEvent& /*event*/); // returns true on fifo overflow MidiPlayEvent get(); - const MidiPlayEvent& peek(int n = 0); + const MidiPlayEvent& peek(int = 0); void remove(); bool isEmpty() const { return size == 0; } void clear() { size = 0, wIndex = 0, rIndex = 0; } |