CLAM-Development  1.4.0
JACKNetworkPlayer.hxx
Go to the documentation of this file.
1 #ifndef JACKNetworkPlayer_hxx
2 #define JACKNetworkPlayer_hxx
3 
4 #include <iostream>
5 #include <string>
6 #include <vector>
7 #include "NetworkPlayer.hxx"
8 #include "Network.hxx"
9 #include <jack/jack.h>
10 
11 namespace CLAM
12 {
13 
15 {
16 private:
17  typedef std::vector<jack_port_t*> JackPorts;
18  const char * PortName(jack_port_t * port)
19  {
20  return jack_port_name(port);
21  }
23  struct JackConnection
24  {
25  std::string processingName;
26  const char ** outsideConnections;
27  };
28  typedef std::list<JackConnection> JackConnections;
29 
30 private:
31  int _jackSampleRate;
32  int _jackBufferSize;
33  bool _autoConnect;
34 
35  JackPorts _sourceJackPorts;
36  JackPorts _sinkJackPorts;
37 
38  JackConnections _incomingJackConnections;
39  JackConnections _outgoingJackConnections;
40 
41  std::string _jackOutPortAutoConnectList;
42  std::string _jackInPortAutoConnectList;
43 
44  //JACK CODE
45  jack_client_t * _jackClient;
46  std::string _jackClientName;
47 
48 public:
49  JACKNetworkPlayer(const std::string & name="CLAM network player");
50  virtual ~JACKNetworkPlayer();
51 
52  void InitClient();
53  bool IsWorking();
54 
55  virtual bool IsRealTime() const { return true; }
56 
57  std::string NonWorkingReason();
58 
59  //JACK sever (un)registration methods
60  void RegisterPorts();
61  void RegisterInputPorts(const Network& net);
62  void RegisterOutputPorts(const Network& net);
63  void UnRegisterPorts();
64  void OnShutdown();
65 
66  //Buffer copying methods
67  void CopyJackBuffersToSources(const jack_nframes_t nframes);
68  void CopySinksToJackBuffers(const jack_nframes_t nframes);
69  void BlankJackBuffers(const jack_nframes_t nframes);
70 
71  virtual void Start();
72  virtual void Stop();
73  virtual void Init();
74 
75  virtual unsigned BackendBufferSize()
76  {
77  return _jackBufferSize;
78  }
79 
80  virtual unsigned BackendSampleRate() { return _jackSampleRate; }
81 
82  void Do(const jack_nframes_t nframes);
83 
84  //Saves/loads the connections made to our local in/out jack ports
85  void StoreConnections();
86  void RestoreConnections();
87 
88 
89  void AutoConnectPorts();
90 };
91 } //namespace CLAM
92 
93 #endif
94