00001 /* 00002 00003 This file is part of la Marmite. 00004 Copyright (C) 2005 Nicolas Falquet. 00005 00006 La Marmite is free software ; you can redistribute it and/or 00007 modify it under the terms of the GNU General Public License as 00008 published by the Free Software Foundation ; either version 2 of 00009 the License, or (at your option) any later version. 00010 00011 La Marmite is distributed in the hope that it will be useful, but 00012 WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 General Public License for more details. 00015 00016 You should have received a copy of the GNU General Public License 00017 along with la Marmite ; if not, write to the Free Software 00018 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 00019 02111-1307 USA 00020 00021 */ 00022 00023 #ifndef M_CLIENT_H 00024 #define M_CLIENT_H 00025 00026 using namespace std; 00027 00028 #include <string> 00029 #include <vector> 00030 #include <jack/jack.h> 00031 00032 #include "MModule.h" 00033 00034 class MProcess; 00035 class MClientPort; 00036 class MClientAudioInputPort; 00037 class MClientAudioOutputPort; 00038 class MClientControlInputPort; 00039 class MClientControlOutputPort; 00040 00055 class MClient /*abstract*/ : public MModule 00056 { 00057 00058 Q_OBJECT 00059 00060 public : 00061 00062 // destructor 00063 00072 virtual ~ MClient ( ); 00073 00074 // functions 00075 00080 virtual jack_client_t * JACKHandle ( ) const; 00081 00085 virtual MProcess * Callback ( ) const; 00086 00094 virtual MClientAudioInputPort * AudioInput ( const unsigned int n ) const; 00095 00103 virtual MClientAudioOutputPort * AudioOutput ( const unsigned int n ) const; 00104 00112 virtual MClientControlInputPort * ControlInput ( const unsigned int n ) const; 00113 00121 virtual MClientControlOutputPort * ControlOutput ( const unsigned int n ) const; 00122 00123 virtual MAudioInputPort * ModuleAudioInput ( const unsigned int n ) const; 00124 virtual MAudioOutputPort * ModuleAudioOutput ( const unsigned int n ) const; 00125 virtual MControlInputPort * ModuleControlInput ( const unsigned int n ) const; 00126 virtual MControlOutputPort * ModuleControlOutput ( const unsigned int n ) const; 00127 00132 virtual unsigned int NumberOfAudioInputs ( ) const; 00133 00138 virtual unsigned int NumberOfAudioOutputs ( ) const; 00139 00144 virtual unsigned int NumberOfControlInputs ( ) const; 00145 00150 virtual unsigned int NumberOfControlOutputs ( ) const; 00151 00152 // methods 00153 00162 virtual void ResetInputs ( ); 00163 00164 public slots : 00165 00166 virtual void Activate ( ); 00167 00168 virtual void Deactivate ( ); 00169 00183 virtual void Run ( const unsigned int n ); 00184 00185 protected : 00186 00187 // protected constructor 00188 00196 MClient ( const string & name, jack_client_t * jackClient, QObject * parent = 0 ); 00197 00215 static jack_client_t * createJackClient ( const string & name ); 00216 00217 // protected methods 00218 00219 // methods 00220 00237 virtual MClientAudioInputPort * createAudioInput ( const string & portName ); 00238 00255 virtual MClientAudioOutputPort * createAudioOutput ( const string & portName ); 00256 00257 // virtual void createControlInput ( const string & portName ); 00258 // virtual void createControlOutput ( const string & portName ); 00259 00272 virtual MClientAudioInputPort * addAudioInput ( jack_port_t * jackPort ); 00273 00286 virtual MClientAudioOutputPort * addAudioOutput ( jack_port_t * jackPort ); 00287 00297 virtual void removePort ( MPort * port ); 00298 00307 virtual void setCallbackProcess ( MProcess * callback ); 00308 00314 virtual void removeCallbackProcess ( ); 00315 00316 // attributes 00317 00319 jack_client_t * _jack_client; 00320 00322 MProcess * _callback; 00323 00325 vector < MClientAudioInputPort * > _audioInput; 00326 00328 vector < MClientAudioOutputPort * > _audioOutput; 00329 00331 vector < MClientControlInputPort * > _controlInput; 00332 00334 vector < MClientControlOutputPort * > _controlOutput; 00335 00336 }; 00337 00338 #include "MClientAudioInputPort.h" 00339 #include "MClientAudioOutputPort.h" 00340 #include "MClientControlInputPort.h" 00341 #include "MClientControlOutputPort.h" 00342 00343 #endif // M_CLIENT_H