diff options
Diffstat (limited to 'attic/muse2-oom/muse2/muse/driver/jackmidi.h')
-rw-r--r-- | attic/muse2-oom/muse2/muse/driver/jackmidi.h | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/attic/muse2-oom/muse2/muse/driver/jackmidi.h b/attic/muse2-oom/muse2/muse/driver/jackmidi.h new file mode 100644 index 00000000..f7b5eb94 --- /dev/null +++ b/attic/muse2-oom/muse2/muse/driver/jackmidi.h @@ -0,0 +1,168 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: jackmidi.h,v 1.1.1.1 2010/01/27 09:06:43 terminator356 Exp $ +// (C) Copyright 1999-2010 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __JACKMIDI_H__ +#define __JACKMIDI_H__ + +//#include <config.h> + +#include <map> + +#include <jack/jack.h> +#include <jack/midiport.h> + +#include "mididev.h" +#include "route.h" + +class QString; +class MidiFifo; +class MidiRecordEvent; +class MidiPlayEvent; +//class RouteList; +class Xml; + +// Turn on to show multiple devices, work in progress, +// not working fully yet, can't seem to connect... +//#define JACK_MIDI_SHOW_MULTIPLE_DEVICES + +// It appears one client port per remote port will be necessary. +// Jack doesn't seem to like manipulation of non-local ports buffers. +//#define JACK_MIDI_USE_MULTIPLE_CLIENT_PORTS + +/* jack-midi channels */ +//#define JACK_MIDI_CHANNELS 32 + +/* jack-midi buffer size */ +//#define JACK_MIDI_BUFFER_SIZE 32 + +/* +typedef struct { + int give; + int take; + // 32 parallel midi events, where each event contains three + // midi-bytes and one busy-byte + char buffer[4 * JACK_MIDI_BUFFER_SIZE]; +} muse_jack_midi_buffer; +*/ + +/* +struct JackMidiPort +{ + jack_port_t* _jackPort; + QString _name; + int _flags; // 1 = writable, 2 = readable - do not mix + JackMidiPort(jack_port_t* jp, const QString& s, int f) + { + _jackPort = jp; + _name = QString(s); + _flags = f; + } +}; + +typedef std::map<jack_port_t*, JackMidiPort, std::less<jack_port_t*> >::iterator iJackMidiPort; +typedef std::map<jack_port_t*, JackMidiPort, std::less<jack_port_t*> >::const_iterator ciJackMidiPort; + +class JackMidiPortList : public std::map<jack_port_t*, JackMidiPort, std::less<jack_port_t*> > +{ + private: + static int _nextOutIdNum; + static int _nextInIdNum; + + public: + JackMidiPortList(); + ~JackMidiPortList(); + iJackMidiPort createClientPort(int flags); + bool removeClientPort(jack_port_t* port); +}; + +extern JackMidiPortList jackMidiClientPorts; +*/ + +//--------------------------------------------------------- +// MidiJackDevice +//--------------------------------------------------------- + +class MidiJackDevice : public MidiDevice { + public: + //int adr; + + private: + // fifo for midi events sent from gui + // direct to midi port: + MidiFifo eventFifo; + + //static int _nextOutIdNum; + //static int _nextInIdNum; + + //jack_port_t* _client_jackport; + // p3.3.55 + jack_port_t* _in_client_jackport; + jack_port_t* _out_client_jackport; + + //RouteList _routes; + + virtual QString open(); + virtual void close(); + //bool putEvent(int*); + + void processEvent(const MidiPlayEvent&); + // Port is not midi port, it is the port(s) created for MusE. + bool queueEvent(const MidiPlayEvent&); + + virtual bool putMidiEvent(const MidiPlayEvent&); + //bool sendEvent(const MidiPlayEvent&); + + void eventReceived(jack_midi_event_t*); + + public: + //MidiJackDevice() {} // p3.3.55 Removed. + //MidiJackDevice(const int&, const QString& name); + + //MidiJackDevice(jack_port_t* jack_port, const QString& name); + //MidiJackDevice(jack_port_t* in_jack_port, jack_port_t* out_jack_port, const QString& name); // p3.3.55 In or out port can be null. + MidiJackDevice(const QString& name); + + //static MidiDevice* createJackMidiDevice(QString /*name*/, int /*rwflags*/); // 1:Writable 2: Readable. Do not mix. + static MidiDevice* createJackMidiDevice(QString name = "", int rwflags = 3); // p3.3.55 1:Writable 2: Readable 3: Writable + Readable + + virtual inline int deviceType() { return JACK_MIDI; } + + virtual void setName(const QString&); + + virtual void processMidi(); + virtual ~MidiJackDevice(); + //virtual int selectRfd(); + //virtual int selectWfd(); + //virtual void processInput(); + + virtual void recordEvent(MidiRecordEvent&); + + virtual bool putEvent(const MidiPlayEvent&); + virtual void collectMidiEvents(); + + //virtual jack_port_t* jackPort() { return _jackport; } + //virtual jack_port_t* clientJackPort() { return _client_jackport; } + + //virtual void* clientPort() { return (void*)_client_jackport; } + // p3.3.55 + virtual void* inClientPort() { return (void*) _in_client_jackport; } + virtual void* outClientPort() { return (void*) _out_client_jackport; } + + //RouteList* routes() { return &_routes; } + //bool noRoute() const { return _routes.empty(); } + virtual void writeRouting(int, Xml&) const; + }; + +extern bool initMidiJack(); +//extern int jackSelectRfd(); +//extern int jackSelectWfd(); +//extern void jackProcessMidiInput(); +//extern void jackScanMidiPorts(); + +#endif + + |