JACKNetworkPlayer.hxx

Go to the documentation of this file.
00001 #ifndef JACKNetworkPlayer_hxx
00002 #define JACKNetworkPlayer_hxx
00003 
00004 #include <iostream>
00005 #include <string>
00006 #include "NetworkPlayer.hxx"
00007 #include "Network.hxx"
00008 #include <jack/jack.h>
00009 
00010 namespace CLAM
00011 {
00012 class JACKNetworkPlayer : public NetworkPlayer
00013 {
00014 private:
00015         //Structures to keep information about every external input and output processing
00016         struct SourceJackBinding //TODO use mAudioSources/Sinks in the parent class instead.
00017         {
00018                 const char* PortName() 
00019                 {
00020                         return jack_port_name(jackPort);
00021                 }
00022                 jack_port_t* jackPort;
00023                 AudioSource* source;
00024         };
00025 
00026         struct SinkJackBinding
00027         {
00028                 const char* PortName() 
00029                 {
00030                         return jack_port_name(jackPort);
00031                 }
00032                 jack_port_t* jackPort;
00033                 AudioSink* sink;
00034         };
00035         typedef std::vector<SourceJackBinding> SourceJackBindings;
00036         typedef std::vector<SinkJackBinding> SinkJackBindings;
00037         struct JackConnection
00038         {
00039                 std::string processingName;
00040                 const char ** outsideConnections;
00041         };
00042         typedef std::list<JackConnection> JackConnections;
00043 private:
00044         int _jackSampleRate;
00045         int _jackBufferSize;
00046         bool _autoConnect;
00047 
00048         JackConnections _incomingJackConnections;
00049         JackConnections _outgoingJackConnections;
00050 
00051         SourceJackBindings _sourceJackBindings;
00052         SinkJackBindings _sinkJackBindings;
00053 
00054         std::string _jackOutPortAutoConnectList;
00055         std::string _jackInPortAutoConnectList;
00056         
00057         //JACK CODE
00058         jack_client_t * _jackClient;
00059         std::string _jackClientName;
00060 
00061 public:
00062         JACKNetworkPlayer(const std::string & name="CLAM network player");
00063         virtual ~JACKNetworkPlayer();
00064 
00065         void InitClient();
00066         bool IsWorking() const;
00067         std::string NonWorkingReason() const;
00068         
00069         //JACK sever (un)registration methods
00070         void RegisterPorts();
00071         void RegisterInputPorts(const Network& net);
00072         void RegisterOutputPorts(const Network& net);
00073         void UnRegisterPorts();
00074         void OnShutdown();
00075 
00076         //Buffer copying methods
00077         void CopyJackBuffersToGenerators(const jack_nframes_t nframes);
00078         void CopySinksToJackBuffers(const jack_nframes_t nframes);
00079         
00080         virtual void Start();
00081         virtual void Stop();
00082         virtual void Init();
00083         virtual unsigned BackendBufferSize() 
00084         {
00085                 std::cout << "JACKNetworkPlayer::BackendBufferSize" << std::endl;
00086                 return _jackBufferSize; 
00087         }
00088         virtual unsigned BackendSampleRate() { return _jackSampleRate; }
00089         
00090         void Do(const jack_nframes_t nframes);
00091 
00092         //Saves/loads the connections made to our local in/out jack ports
00093         void StoreConnections();
00094         void RestoreConnections();
00095         
00096         
00097         void AutoConnectPorts();
00098 };
00099 } //namespace CLAM
00100 
00101 #endif
00102 

Generated on Tue Aug 12 22:33:43 2008 for CLAM by  doxygen 1.5.5