blob: 76753eece559057fe1ce7424995dab5999de5393 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
//=========================================================
// MusE
// Linux Music Editor
// $Id: jackaudio.h,v 1.20.2.4 2009/12/20 05:00:35 terminator356 Exp $
// (C) Copyright 2002 Werner Schweer (ws@seh.de)
//=========================================================
#ifndef __JACKAUDIO_H__
#define __JACKAUDIO_H__
#include <jack/jack.h>
#include "audiodev.h"
class MidiPlayEvent;
//---------------------------------------------------------
// JackAudioDevice
//---------------------------------------------------------
bool checkAudioDevice();
class JackAudioDevice : public AudioDevice {
jack_client_t* _client;
double sampleTime;
int samplePos;
jack_transport_state_t transportState;
jack_position_t pos;
char jackRegisteredName[8];
int dummyState;
int dummyPos;
// Free-running frame counter incremented always in process.
jack_nframes_t _frameCounter;
static int processAudio(jack_nframes_t frames, void*);
public:
JackAudioDevice(jack_client_t* cl, char * jack_id_string);
virtual ~JackAudioDevice();
virtual void nullify_client() { _client = 0; }
//virtual void start();
virtual void start(int);
virtual void stop ();
virtual bool dummySync(int state); // Artificial sync when not using Jack transport.
virtual int framePos() const;
virtual unsigned frameTime() const { return _frameCounter; }
virtual float* getBuffer(void* port, unsigned long nframes) {
return (float*)jack_port_get_buffer((jack_port_t*)port, nframes);
}
virtual std::list<QString> outputPorts();
virtual std::list<QString> inputPorts();
virtual void registerClient();
virtual void* registerOutPort(const char* name);
virtual void* registerInPort(const char* name);
virtual char* getJackName();
virtual void unregisterPort(void*);
virtual void connect(void*, void*);
virtual void disconnect(void*, void*);
virtual void setPortName(void* p, const char* n) { jack_port_set_name((jack_port_t*)p, n); }
virtual void* findPort(const char* name);
virtual QString portName(void* port);
virtual int getState();
virtual unsigned int getCurFrame();
virtual bool isRealtime() { return jack_is_realtime(_client); }
virtual int realtimePriority() const;
virtual void startTransport();
virtual void stopTransport();
virtual void seekTransport(unsigned frame);
virtual void seekTransport(const Pos &p);
virtual void setFreewheel(bool f);
jack_transport_state_t transportQuery(jack_position_t* pos);
void graphChanged();
virtual int setMaster(bool f);
// Port is not midi port, it is the port(s) created for MusE.
virtual bool putEvent(int port, const MidiPlayEvent&);
//static bool jackStarted;
};
#endif
|