00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef DRUMSTICK_PLAYTHREAD_H
00021 #define DRUMSTICK_PLAYTHREAD_H
00022
00023 #include "alsaevent.h"
00024 #include <QThread>
00025 #include <QReadWriteLock>
00026
00034 namespace drumstick {
00035
00036 class MidiClient;
00037 class MidiQueue;
00038
00047 class DRUMSTICK_EXPORT SequencerOutputThread : public QThread
00048 {
00049 Q_OBJECT
00050
00051 public:
00052 SequencerOutputThread(MidiClient *seq, int portId);
00053 virtual void run();
00058 virtual unsigned int getInitialPosition() { return 0; }
00065 virtual unsigned int getEchoResolution() { return 0; }
00072 virtual bool hasNext() = 0;
00079 virtual SequencerEvent* nextEvent() = 0;
00080
00084 virtual void stop();
00085
00086 signals:
00090 void finished();
00091
00096 void stopped();
00097
00098 public slots:
00099 void start( Priority priority = InheritPriority );
00100
00101 protected:
00102 virtual void sendEchoEvent(int tick);
00103 virtual void sendSongEvent(SequencerEvent* ev);
00104 virtual void drainOutput();
00105 virtual void syncOutput();
00106 virtual bool stopRequested();
00107
00108 MidiClient *m_MidiClient;
00109 MidiQueue *m_Queue;
00110 int m_PortId;
00111 bool m_Stopped;
00112 int m_QueueId;
00113 int m_npfds;
00114 pollfd* m_pfds;
00115 QReadWriteLock m_mutex;
00116 };
00117
00118 }
00119
00122 #endif