svcore  1.9
MIDIInput.h
Go to the documentation of this file.
00001 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
00002 
00003 /*
00004     Sonic Visualiser
00005     An audio file viewer and annotation editor.
00006     Centre for Digital Music, Queen Mary, University of London.
00007     This file copyright 2006-2009 Chris Cannam and QMUL.
00008     
00009     This program is free software; you can redistribute it and/or
00010     modify it under the terms of the GNU General Public License as
00011     published by the Free Software Foundation; either version 2 of the
00012     License, or (at your option) any later version.  See the file
00013     COPYING included with this distribution for more information.
00014 */
00015 
00016 #ifndef _MIDI_INPUT_H_
00017 #define _MIDI_INPUT_H_
00018 
00019 #include <QObject>
00020 #include "MIDIEvent.h"
00021 
00022 #include <vector>
00023 #include "base/RingBuffer.h"
00024 #include "base/FrameTimer.h"
00025 
00026 class RtMidiIn;
00027 
00028 class MIDIInput : public QObject
00029 {
00030     Q_OBJECT
00031 
00032 public:
00033     MIDIInput(QString name, FrameTimer *timer);
00034     virtual ~MIDIInput();
00035 
00036     bool isOK() const { return m_rtmidi != 0; }
00037 
00038     bool isEmpty() const { return getEventsAvailable() == 0; }
00039     int getEventsAvailable() const { return m_buffer.getReadSpace(); }
00040     MIDIEvent readEvent();
00041 
00042 signals:
00043     void eventsAvailable();
00044 
00045 protected:
00046     RtMidiIn *m_rtmidi;
00047     FrameTimer *m_frameTimer;
00048 
00049     static void staticCallback(double, std::vector<unsigned char> *, void *);
00050     void callback(double, std::vector<unsigned char> *);
00051 
00052     void postEvent(MIDIEvent);
00053     RingBuffer<MIDIEvent *> m_buffer;
00054 };
00055 
00056 #endif
00057