JackTrip
JackTrip.h
Go to the documentation of this file.
1 //*****************************************************************
2 /*
3  JackTrip: A System for High-Quality Audio Network Performance
4  over the Internet
5 
6  Copyright (c) 2008 Juan-Pablo Caceres, Chris Chafe.
7  SoundWIRE group at CCRMA, Stanford University.
8 
9  Permission is hereby granted, free of charge, to any person
10  obtaining a copy of this software and associated documentation
11  files (the "Software"), to deal in the Software without
12  restriction, including without limitation the rights to use,
13  copy, modify, merge, publish, distribute, sublicense, and/or sell
14  copies of the Software, and to permit persons to whom the
15  Software is furnished to do so, subject to the following
16  conditions:
17 
18  The above copyright notice and this permission notice shall be
19  included in all copies or substantial portions of the Software.
20 
21  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
23  OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
25  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
26  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
27  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
28  OTHER DEALINGS IN THE SOFTWARE.
29 */
30 //*****************************************************************
31 
38 #ifndef __JACKTRIP_H__
39 #define __JACKTRIP_H__
40 
41 //#include <tr1/memory> //for shared_ptr
42 #include <stdexcept>
43 
44 #include <QObject>
45 #include <QString>
46 #include <QUdpSocket>
47 #include <QTcpSocket>
48 #include <QTimer>
49 #include <QSharedPointer>
50 
51 #include "DataProtocol.h"
52 #include "AudioInterface.h"
53 
54 #ifndef __NO_JACK__
55 #include "JackAudioInterface.h"
56 #endif //__NO_JACK__
57 
58 #include "PacketHeader.h"
59 #include "RingBuffer.h"
60 #include "AudioTester.h"
61 
62 //#include <signal.h>
71 class JackTrip : public QObject
72 {
73  Q_OBJECT;
74 
75 public:
76 
77  //----------ENUMS------------------------------------------
80  UDP,
81  TCP,
82  SCTP
83  };
84 
91  };
92 
96  ZEROS
97  };
98 
102  RTAUDIO
103  };
104 
109  JAMTEST
110  };
111 
119  NOAUTO
120  };
121  //---------------------------------------------------------
122 
123 
132  JackTrip(jacktripModeT JacktripMode = CLIENT,
133  dataProtocolT DataProtocolType = UDP,
134  int NumChans = gDefaultNumInChannels,
135  #ifdef WAIR // wair
136  int NumNetRevChans = 0,
137  #endif // endwhere
138  int BufferQueueLength = gDefaultQueueLength,
139  unsigned int redundancy = gDefaultRedundancy,
140  AudioInterface::audioBitResolutionT AudioBitResolution =
142  DataProtocol::packetHeaderTypeT PacketHeaderType =
144  underrunModeT UnderRunMode = WAVETABLE,
145  int receiver_bind_port = gDefaultPort,
146  int sender_bind_port = gDefaultPort,
147  int receiver_peer_port = gDefaultPort,
148  int sender_peer_port = gDefaultPort,
149  int tcp_peer_port = gDefaultPort);
150 
152  virtual ~JackTrip();
153 
154  static void sigIntHandler(__attribute__((unused)) int unused)
155  { std::cout << std::endl << "Shutting Down..." << std::endl; sSigInt = true; }
156  static bool sSigInt;
157  static bool sJackStopped;
158 
160  /*virtual void run() {
161  if (gVerboseFlag) std::cout << "Settings:startJackTrip before mJackTrip->run" << std::endl;
162  }*/
163 
165  virtual void setPeerAddress(QString PeerHostOrIP);
166 
170  //void appendProcessPlugin(const std::tr1::shared_ptr<ProcessPlugin> plugin);
171  virtual void appendProcessPluginToNetwork(ProcessPlugin* plugin);
172  virtual void appendProcessPluginFromNetwork(ProcessPlugin* plugin);
173 
175  virtual void startProcess(
176  #ifdef WAIRTOHUB // wair
177  int ID
178  #endif // endwhere
179  );
180  virtual void completeConnection();
181 
183  virtual void stop(QString errorMessage = "");
184 
187  virtual void waitThreads();
188 
191  virtual void checkIfPortIsBinded(int port);
192 
193  //------------------------------------------------------------------------------------
195 
196  //
198  virtual void setJackTripMode(jacktripModeT JacktripMode)
199  { mJackTripMode = JacktripMode; }
201  virtual void setDataProtocoType(dataProtocolT DataProtocolType)
202  { mDataProtocol = DataProtocolType; }
205  {
206  mPacketHeaderType = PacketHeaderType;
207  delete mPacketHeader;
208  mPacketHeader = NULL;
209  createHeader(mPacketHeaderType);
210  }
212  virtual void setBufferQueueLength(int BufferQueueLength)
213  { mBufferQueueLength = BufferQueueLength; }
214  virtual void setBufferStrategy(int BufferStrategy)
215  { mBufferStrategy = BufferStrategy; }
218  { mAudioBitResolution = AudioBitResolution; }
220  virtual void setUnderRunMode(underrunModeT UnderRunMode)
221  { mUnderRunMode = UnderRunMode; }
223  virtual void setStopOnTimeout(bool stopOnTimeout)
224  { mStopOnTimeout = stopOnTimeout; }
227  virtual void setAllPorts(int port)
228  {
229  mReceiverBindPort = port;
230  mSenderPeerPort = port;
231  mSenderBindPort = port;
232  mReceiverPeerPort = port;
233  }
235  void setBindPorts(int port)
236  {
237  mReceiverBindPort = port;
238  mSenderBindPort = port;
239  }
241  void setPeerPorts(int port)
242  {
243  mSenderPeerPort = port;
244  mReceiverPeerPort = port;
245  }
247  virtual void setClientName(QString clientName)
248  { mJackClientName = clientName; }
249  virtual void setRemoteClientName(QString remoteClientName)
250  { mRemoteClientName = remoteClientName; }
252  virtual void setNumChannels(int num_chans)
253  { mNumChans = num_chans; }
254 
255  virtual void setIOStatTimeout(int timeout) { mIOStatTimeout = timeout; }
256  virtual void setIOStatStream(QSharedPointer<std::ofstream> statStream) { mIOStatStream = statStream; }
257 
259  virtual void setConnectDefaultAudioPorts(bool connect)
260  {mConnectDefaultAudioPorts = connect;}
261 
262  virtual int getReceiverBindPort() const
263  { return mReceiverBindPort; }
264  virtual int getSenderPeerPort() const
265  { return mSenderPeerPort; }
266  virtual int getSenderBindPort() const
267  { return mSenderBindPort; }
268  virtual int getReceiverPeerPort() const
269  { return mReceiverPeerPort; }
270 
272  { return mDataProtocolSender; }
274  { return mDataProtocolReceiver; }
275  virtual void setDataProtocolSender(DataProtocol* const DataProtocolSender)
276  { mDataProtocolSender = DataProtocolSender; }
277  virtual void setDataProtocolReceiver(DataProtocol* const DataProtocolReceiver)
278  { mDataProtocolReceiver = DataProtocolReceiver; }
279 
280  virtual RingBuffer* getSendRingBuffer() const
281  { return mSendRingBuffer; }
283  { return mReceiveRingBuffer; }
284  virtual void setSendRingBuffer(RingBuffer* const SendRingBuffer)
285  { mSendRingBuffer = SendRingBuffer; }
286  virtual void setReceiveRingBuffer(RingBuffer* const ReceiveRingBuffer)
287  { mReceiveRingBuffer = ReceiveRingBuffer; }
288 
290  { mPacketHeader = PacketHeader; }
291 
293  { return getTotalAudioPacketSizeInBytes(); }
294 
295  virtual void setAudiointerfaceMode(JackTrip::audiointerfaceModeT audiointerface_mode)
296  { mAudiointerfaceMode = audiointerface_mode; }
298  { mAudioInterface = AudioInterface; }
299  virtual void setLoopBack(bool b)
300  { mLoopBack = b; }
301  virtual void setAudioTesterP(AudioTester* atp) { mAudioTesterP = atp; }
302 
303  void setSampleRate(uint32_t sample_rate)
304  { mSampleRate = sample_rate; }
305  void setDeviceID(uint32_t device_id)
306  { mDeviceID = device_id; }
308  { mAudioBufferSize = buf_size; }
309 
310 
312  { return mConnectionMode; }
314  { mConnectionMode = connection_mode; }
315 
317  { return mHubConnectionModeT; }
319  { mHubConnectionModeT = connection_mode; }
320 
322  { return mJackTripMode; }
323 
324  QString getPeerAddress() const
325  { return mPeerAddress; }
326 
328  { return mReceivedConnection; }
329 
331  { return mTcpConnectionError; }
332 
334  //------------------------------------------------------------------------------------
335 
336 
337  //------------------------------------------------------------------------------------
339 
340  virtual void createHeader(const DataProtocol::packetHeaderTypeT headertype);
342  void putHeaderInPacket(int8_t* full_packet, int8_t* audio_packet);
343  virtual int getPacketSizeInBytes();
344  void parseAudioPacket(int8_t* full_packet, int8_t* audio_packet);
345  virtual void sendNetworkPacket(const int8_t* ptrToSlot)
346  { mSendRingBuffer->insertSlotNonBlocking(ptrToSlot, 0, 0); }
347  virtual void receiveBroadcastPacket(int8_t* ptrToReadSlot)
348  { mReceiveRingBuffer->readBroadcastSlot(ptrToReadSlot); }
349  virtual void receiveNetworkPacket(int8_t* ptrToReadSlot)
350  { mReceiveRingBuffer->readSlotNonBlocking(ptrToReadSlot); }
351  virtual void readAudioBuffer(int8_t* ptrToReadSlot)
352  { mSendRingBuffer->readSlotBlocking(ptrToReadSlot); }
353  virtual bool writeAudioBuffer(const int8_t* ptrToSlot, int len, int lostLen)
354  { return mReceiveRingBuffer->insertSlotNonBlocking(ptrToSlot, len, lostLen); }
356  { return mAudioBufferSize; /*return mAudioInterface->getBufferSizeInSamples();*/ }
358  { return mDeviceID; /*return mAudioInterface->mDeviceID();*/ }
359 
361  { return mAudioInterface->getSampleRateType(); }
362  int getSampleRate() const
363  { return mSampleRate; /*return mAudioInterface->getSampleRate();*/ }
364 
366  { return mAudioBitResolution*8; /*return mAudioInterface->getAudioBitResolution();*/ }
367  unsigned int getNumInputChannels() const
368  { return mNumChans; /*return mAudioInterface->getNumInputChannels();*/ }
369  unsigned int getNumOutputChannels() const
370  { return mNumChans; /*return mAudioInterface->getNumOutputChannels();*/ }
371  unsigned int getNumChannels() const
372  {
374  { return getNumInputChannels(); }
375  else { return 0; }
376  }
377  virtual void checkPeerSettings(int8_t* full_packet);
379  { mPacketHeader->increaseSequenceNumber(); }
380  int getSequenceNumber() const
381  { return mPacketHeader->getSequenceNumber(); }
382 
383  uint64_t getPeerTimeStamp(int8_t* full_packet) const
384  { return mPacketHeader->getPeerTimeStamp(full_packet); }
385 
387  { return mPacketHeader->getPeerSequenceNumber(full_packet); }
388 
389  uint16_t getPeerBufferSize(int8_t* full_packet) const
390  { return mPacketHeader->getPeerBufferSize(full_packet); }
391 
392  uint8_t getPeerSamplingRate(int8_t* full_packet) const
393  { return mPacketHeader->getPeerSamplingRate(full_packet); }
394 
395  uint8_t getPeerBitResolution(int8_t* full_packet) const
396  { return mPacketHeader->getPeerBitResolution(full_packet); }
397 
398  uint8_t getPeerNumChannels(int8_t* full_packet) const
399  { return mPacketHeader->getPeerNumChannels(full_packet); }
400 
402  { return mPacketHeader->getPeerConnectionMode(full_packet); }
403 
405  { return mAudioInterface->getSizeInBytesPerChannel(); }
407  { return mPacketHeader->getHeaderSizeInBytes(); }
408  virtual int getTotalAudioPacketSizeInBytes() const
409  {
410 #ifdef WAIR // WAIR
411  if (mNumNetRevChans)
412  return mAudioInterface->getSizeInBytesPerChannel() * mNumNetRevChans;
413  else // not wair
414 #endif // endwhere
415  return mAudioInterface->getSizeInBytesPerChannel() * mNumChans;
416  }
418  //------------------------------------------------------------------------------------
419 
420  void printTextTest() {std::cout << "=== JackTrip PRINT ===" << std::endl;}
421  void printTextTest2() {std::cout << "=== JackTrip PRINT2 ===" << std::endl;}
422 
423  void setNetIssuesSimulation(double loss, double jitter, double delay_rel)
424  {
425  mSimulatedLossRate = loss;
426  mSimulatedJitterRate = jitter;
427  mSimulatedDelayRel = delay_rel;
428  }
429  void setBroadcast(int broadcast_queue) {mBroadcastQueueLength = broadcast_queue;}
430  void setUseRtUdpPriority(bool use) {mUseRtUdpPriority = use;}
431 
432 public slots:
434  virtual void slotStopProcesses()
435  { this->stop(); }
436  virtual void slotStopProcessesDueToError(const QString &errorMessage)
437  { this->stop(errorMessage); }
438 
445  {
446  int wait_time = 10000; // msec
447  if ( !(wait_msec%wait_time) ) {
448  std::cerr << "UDP WAITED MORE THAN 10 seconds." << std::endl;
449  if (mStopOnTimeout) {
450  stop("No network data received for 10 seconds");
451  }
453  }
454  }
456  { emit signalUdpWaitingTooLong(); }
458  { std::cout << "=== TESTING ===" << std::endl; }
460  { mReceivedConnection = true; emit signalReceivedConnectionFromPeer(); }
461  void onStatTimer();
462 
463 private slots:
464  void receivedConnectionTCP();
465  void receivedDataTCP();
466  void receivedDataUDP();
467  void udpTimerTick();
468  void tcpTimerTick();
469 
470 signals:
471  //void signalUdpTimeOut();
477  void signalError(const QString &errorMessage);
480 
481 public:
482 
484  virtual void setupAudio(
485  #ifdef WAIRTOHUB // WAIR
486  int ID
487  #endif // endwhere
488  );
490  void closeAudio();
492  virtual void setupDataProtocol();
494  void setupRingBuffers();
496  void clientStart();
501  int serverStart(bool timeout = false, int udpTimeout = gTimeOutMultiThreadedServer);
504  virtual int clientPingToServerStart();
505 
506 private:
507  //void bindReceiveSocket(QUdpSocket& UdpSocket, int bind_port,
508  // QHostAddress PeerHostAddress, int peer_port)
509  //throw(std::runtime_error);
510 
511 
512  jacktripModeT mJackTripMode;
513  dataProtocolT mDataProtocol;
514  DataProtocol::packetHeaderTypeT mPacketHeaderType;
515  JackTrip::audiointerfaceModeT mAudiointerfaceMode;
516 
517  int mNumChans;
518 #ifdef WAIR // WAIR
519  int mNumNetRevChans;
520 #endif // endwhere
521  int mBufferQueueLength;
522  int mBufferStrategy;
523  int mBroadcastQueueLength;
524  uint32_t mSampleRate;
525  uint32_t mDeviceID;
526  uint32_t mAudioBufferSize;
527  AudioInterface::audioBitResolutionT mAudioBitResolution;
528  bool mLoopBack;
529  QString mPeerAddress;
530 
532  DataProtocol* mDataProtocolSender;
534  DataProtocol* mDataProtocolReceiver;
535  AudioInterface* mAudioInterface;
536  PacketHeader* mPacketHeader;
537  underrunModeT mUnderRunMode;
538  bool mStopOnTimeout;
539 
541  RingBuffer* mSendRingBuffer;
543  RingBuffer* mReceiveRingBuffer;
544 
545  int mReceiverBindPort;
546  int mSenderPeerPort;
547  int mSenderBindPort;
548  int mReceiverPeerPort;
549  int mTcpServerPort;
550 
551  unsigned int mRedundancy;
552  QString mJackClientName;
553  QString mRemoteClientName;
554 
555  JackTrip::connectionModeT mConnectionMode;
556  JackTrip::hubConnectionModeT mHubConnectionModeT;
557 
558  QVector<ProcessPlugin*> mProcessPluginsFromNetwork;
559  QVector<ProcessPlugin*> mProcessPluginsToNetwork;
560 
561  QTimer mTimeoutTimer;
562  int mSleepTime;
563  int mElapsedTime;
564  int mEndTime;
565  QTcpSocket mTcpClient;
566  QUdpSocket mUdpSockTemp;
567 
568  volatile bool mReceivedConnection;
569  volatile bool mTcpConnectionError;
570  volatile bool mStopped;
571  volatile bool mHasShutdown;
572 
573  bool mConnectDefaultAudioPorts;
574  QSharedPointer<std::ofstream> mIOStatStream;
575  int mIOStatTimeout;
576  std::ostream mIOStatLogStream;
577  double mSimulatedLossRate;
578  double mSimulatedJitterRate;
579  double mSimulatedDelayRel;
580  bool mUseRtUdpPriority;
581 
582  AudioTester* mAudioTesterP;
583 };
584 
585 #endif
Base Class that provides an interface with audio.
Definition: AudioInterface.h:58
virtual samplingRateT getSampleRateType() const
Get the Jack Server Sampling Rate Enum Type samplingRateT.
Definition: AudioInterface.cpp:667
virtual size_t getSizeInBytesPerChannel() const
Definition: AudioInterface.cpp:210
samplingRateT
Sampling Rates supported by JACK.
Definition: AudioInterface.h:70
audioBitResolutionT
Enum for Audio Resolution in bits.
Definition: AudioInterface.h:62
@ BIT16
16 bits (default)
Definition: AudioInterface.h:64
Definition: AudioTester.h:54
Base class that defines the transmission protocol.
Definition: DataProtocol.h:94
packetHeaderTypeT
Enum to define packet header types.
Definition: DataProtocol.h:101
@ DEFAULT
Default application header.
Definition: DataProtocol.h:102
Main class to creates a SERVER (to listen) or a CLIENT (to connect to a listening server) to send aud...
Definition: JackTrip.h:72
uint16_t getPeerBufferSize(int8_t *full_packet) const
Definition: JackTrip.h:389
bool tcpConnectionError()
Definition: JackTrip.h:330
virtual void setRemoteClientName(QString remoteClientName)
Definition: JackTrip.h:249
virtual int getSenderPeerPort() const
Definition: JackTrip.h:264
virtual void setDataProtocolReceiver(DataProtocol *const DataProtocolReceiver)
Definition: JackTrip.h:277
virtual DataProtocol * getDataProtocolReceiver() const
Definition: JackTrip.h:273
jacktripModeT
Enum for the JackTrip mode.
Definition: JackTrip.h:86
@ SERVER
Run in P2P Server Mode.
Definition: JackTrip.h:87
@ SERVERPINGSERVER
Server of the MultiThreaded JackTrip.
Definition: JackTrip.h:90
@ CLIENT
Run in P2P Client Mode.
Definition: JackTrip.h:88
@ CLIENTTOPINGSERVER
Client of the Ping Server Mode.
Definition: JackTrip.h:89
static void sigIntHandler(__attribute__((unused)) int unused)
Definition: JackTrip.h:154
uint64_t getPeerTimeStamp(int8_t *full_packet) const
Definition: JackTrip.h:383
void putHeaderInPacket(int8_t *full_packet, int8_t *audio_packet)
Definition: JackTrip.cpp:1030
int serverStart(bool timeout=false, int udpTimeout=gTimeOutMultiThreadedServer)
Starts for the SERVER mode.
Definition: JackTrip.cpp:816
virtual int getPacketSizeInBytes()
Definition: JackTrip.cpp:1044
virtual void setClientName(QString clientName)
Set Client Name to something different that the default (JackTrip)
Definition: JackTrip.h:247
void parseAudioPacket(int8_t *full_packet, int8_t *audio_packet)
Definition: JackTrip.cpp:1055
void setNetIssuesSimulation(double loss, double jitter, double delay_rel)
Definition: JackTrip.h:423
virtual void setPacketHeader(PacketHeader *const PacketHeader)
Definition: JackTrip.h:289
static bool sJackStopped
Definition: JackTrip.h:157
virtual DataProtocol * getDataProtocolSender() const
Definition: JackTrip.h:271
uint8_t getPeerSamplingRate(int8_t *full_packet) const
Definition: JackTrip.h:392
QString getPeerAddress() const
Definition: JackTrip.h:324
virtual void setLoopBack(bool b)
Definition: JackTrip.h:299
virtual void checkIfPortIsBinded(int port)
Check if UDP port is already binded.
Definition: JackTrip.cpp:1072
void signalNoUdpPacketsForSeconds()
Signal emitted when no UDP Packets have been received for a while.
void printTextTest2()
Definition: JackTrip.h:421
uint32_t getDeviceID() const
Definition: JackTrip.h:357
uint32_t getBufferSizeInSamples() const
Definition: JackTrip.h:355
virtual void setUnderRunMode(underrunModeT UnderRunMode)
Sets (override) Underrun Mode.
Definition: JackTrip.h:220
hubConnectionModeT
Enum for Hub Server Audio Connection Mode (connections to hub server are automatically patched in Jac...
Definition: JackTrip.h:113
@ SERVERTOCLIENT
Normal Mode, Sever to All Clients (but not client to any client)
Definition: JackTrip.h:114
@ CLIENTFOFI
Client Fan Out to Clients and Fan In from Clients (but not self-to-self)
Definition: JackTrip.h:116
@ CLIENTECHO
Client Echo (client self-to-self)
Definition: JackTrip.h:115
@ FULLMIX
Client Fan Out to Clients and Fan In from Clients (including self-to-self)
Definition: JackTrip.h:118
@ RESERVEDMATRIX
Reserved for custom patch matrix (for TUB ensemble)
Definition: JackTrip.h:117
@ NOAUTO
No automatic patching.
Definition: JackTrip.h:119
unsigned int getNumOutputChannels() const
Definition: JackTrip.h:369
virtual int clientPingToServerStart()
Stats for the Client to Ping Server.
Definition: JackTrip.cpp:859
virtual void createHeader(const DataProtocol::packetHeaderTypeT headertype)
Definition: JackTrip.cpp:1009
virtual int getReceiverBindPort() const
Definition: JackTrip.h:262
void setPeerPorts(int port)
Sets port numbers for the peer (remote) machine.
Definition: JackTrip.h:241
virtual void setPeerAddress(QString PeerHostOrIP)
Starting point for the thread.
Definition: JackTrip.cpp:367
virtual void appendProcessPluginToNetwork(ProcessPlugin *plugin)
Append a process plugin. Processes will be appended in order.
Definition: JackTrip.cpp:374
virtual RingBuffer * getReceiveRingBuffer() const
Definition: JackTrip.h:282
virtual int getTotalAudioPacketSizeInBytes() const
Definition: JackTrip.h:408
void onStatTimer()
Definition: JackTrip.cpp:537
virtual void setBufferQueueLength(int BufferQueueLength)
Sets (override) Buffer Queue Length Mode after construction.
Definition: JackTrip.h:212
virtual void setConnectDefaultAudioPorts(bool connect)
Set to connect or not default audio ports (only implemented in Jack)
Definition: JackTrip.h:259
connectionModeT
Enum for Connection Mode (in packet header)
Definition: JackTrip.h:106
@ JAMTEST
Karplus Strong.
Definition: JackTrip.h:109
@ NORMAL
Normal Mode.
Definition: JackTrip.h:107
@ KSTRONG
Karplus Strong.
Definition: JackTrip.h:108
uint8_t getAudioBitResolution() const
Definition: JackTrip.h:365
uint8_t getPeerBitResolution(int8_t *full_packet) const
Definition: JackTrip.h:395
virtual void sendNetworkPacket(const int8_t *ptrToSlot)
Definition: JackTrip.h:345
void signalError(const QString &errorMessage)
void signalProcessesStopped()
Signal emitted when all the processes and threads are stopped.
virtual void stop(QString errorMessage="")
Stop the processing threads.
Definition: JackTrip.cpp:754
virtual void setAudiointerfaceMode(JackTrip::audiointerfaceModeT audiointerface_mode)
Definition: JackTrip.h:295
uint8_t getPeerConnectionMode(int8_t *full_packet) const
Definition: JackTrip.h:401
void setUseRtUdpPriority(bool use)
Definition: JackTrip.h:430
int getHeaderSizeInBytes() const
Definition: JackTrip.h:406
virtual void appendProcessPluginFromNetwork(ProcessPlugin *plugin)
Definition: JackTrip.cpp:383
int getSampleRate() const
Definition: JackTrip.h:362
unsigned int getNumChannels() const
Definition: JackTrip.h:371
uint8_t getPeerNumChannels(int8_t *full_packet) const
Definition: JackTrip.h:398
void increaseSequenceNumber()
Definition: JackTrip.h:378
void closeAudio()
Close the JackAudioInteface and disconnects it from JACK.
Definition: JackTrip.cpp:251
virtual void receiveNetworkPacket(int8_t *ptrToReadSlot)
Definition: JackTrip.h:349
void slotUdpWaitingTooLong()
Definition: JackTrip.h:455
virtual void setIOStatTimeout(int timeout)
Definition: JackTrip.h:255
virtual void startProcess()
Start the processing threads.
Definition: JackTrip.cpp:393
virtual void readAudioBuffer(int8_t *ptrToReadSlot)
Definition: JackTrip.h:351
virtual void setAudioInterface(AudioInterface *const AudioInterface)
Definition: JackTrip.h:297
virtual void setNumChannels(int num_chans)
Set the number of audio channels.
Definition: JackTrip.h:252
void printTextTest()
Definition: JackTrip.h:420
int getSequenceNumber() const
Definition: JackTrip.h:380
void clientStart()
Starts for the CLIENT mode.
Definition: JackTrip.cpp:799
virtual void completeConnection()
Definition: JackTrip.cpp:486
virtual RingBuffer * getSendRingBuffer() const
Definition: JackTrip.h:280
JackTrip(jacktripModeT JacktripMode=CLIENT, dataProtocolT DataProtocolType=UDP, int NumChans=gDefaultNumInChannels, int BufferQueueLength=gDefaultQueueLength, unsigned int redundancy=gDefaultRedundancy, AudioInterface::audioBitResolutionT AudioBitResolution=AudioInterface::BIT16, DataProtocol::packetHeaderTypeT PacketHeaderType=DataProtocol::DEFAULT, underrunModeT UnderRunMode=WAVETABLE, int receiver_bind_port=gDefaultPort, int sender_bind_port=gDefaultPort, int receiver_peer_port=gDefaultPort, int sender_peer_port=gDefaultPort, int tcp_peer_port=gDefaultPort)
The class Constructor with Default Parameters.
Definition: JackTrip.cpp:73
virtual void setJackTripMode(jacktripModeT JacktripMode)
Sets (override) JackTrip Mode after construction.
Definition: JackTrip.h:198
virtual void setDataProtocoType(dataProtocolT DataProtocolType)
Sets (override) DataProtocol Type after construction.
Definition: JackTrip.h:201
virtual void waitThreads()
Wait for all the threads to finish. This functions is used when JackTrip is run as a thread.
Definition: JackTrip.cpp:791
underrunModeT
Enum for the JackTrip Underrun Mode, when packets.
Definition: JackTrip.h:94
@ ZEROS
Set new buffers to zero if there are no new ones.
Definition: JackTrip.h:96
@ WAVETABLE
Loops on the last received packet.
Definition: JackTrip.h:95
static bool sSigInt
Definition: JackTrip.h:156
virtual void slotStopProcesses()
Slot to stop all the processes and threads.
Definition: JackTrip.h:434
virtual ~JackTrip()
The class destructor.
Definition: JackTrip.cpp:143
virtual void setAllPorts(int port)
Sets port numbers for the local and peer machine. Receive port is port
Definition: JackTrip.h:227
void setConnectionMode(JackTrip::connectionModeT connection_mode)
Definition: JackTrip.h:313
virtual void setBufferStrategy(int BufferStrategy)
Definition: JackTrip.h:214
virtual void setIOStatStream(QSharedPointer< std::ofstream > statStream)
Definition: JackTrip.h:256
virtual void receiveBroadcastPacket(int8_t *ptrToReadSlot)
Definition: JackTrip.h:347
void slotReceivedConnectionFromPeer()
Definition: JackTrip.h:459
virtual int getRingBuffersSlotSize()
Definition: JackTrip.h:292
JackTrip::connectionModeT getConnectionMode() const
Definition: JackTrip.h:311
virtual void setupAudio()
Set the AudioInteface object.
Definition: JackTrip.cpp:156
void setDeviceID(uint32_t device_id)
Definition: JackTrip.h:305
virtual bool writeAudioBuffer(const int8_t *ptrToSlot, int len, int lostLen)
Definition: JackTrip.h:353
bool receivedConnectionFromPeer()
Definition: JackTrip.h:327
dataProtocolT
Enum for the data Protocol. At this time only UDP is implemented.
Definition: JackTrip.h:79
@ UDP
Use UDP (User Datagram Protocol)
Definition: JackTrip.h:80
@ TCP
NOT IMPLEMENTED: Use TCP (Transmission Control Protocol)
Definition: JackTrip.h:81
@ SCTP
NOT IMPLEMENTED: Use SCTP (Stream Control Transmission Protocol)
Definition: JackTrip.h:82
audiointerfaceModeT
Enum for Audio Interface Mode.
Definition: JackTrip.h:100
@ JACK
Jack Mode.
Definition: JackTrip.h:101
@ RTAUDIO
RtAudio Mode.
Definition: JackTrip.h:102
uint16_t getPeerSequenceNumber(int8_t *full_packet) const
Definition: JackTrip.h:386
void setHubConnectionModeT(JackTrip::hubConnectionModeT connection_mode)
Definition: JackTrip.h:318
virtual int getSenderBindPort() const
Definition: JackTrip.h:266
void slotUdpWaitingTooLongClientGoneProbably(int wait_msec)
This slot emits in turn the signal signalNoUdpPacketsForSeconds when UDP has waited for more than 30 ...
Definition: JackTrip.h:444
AudioInterface::samplingRateT getSampleRateType() const
Definition: JackTrip.h:360
void setSampleRate(uint32_t sample_rate)
Definition: JackTrip.h:303
JackTrip::hubConnectionModeT getHubConnectionModeT() const
Definition: JackTrip.h:316
void signalTcpClientConnected()
virtual void setPacketHeaderType(DataProtocol::packetHeaderTypeT PacketHeaderType)
Sets the Packet header type.
Definition: JackTrip.h:204
virtual void setDataProtocolSender(DataProtocol *const DataProtocolSender)
Definition: JackTrip.h:275
void signalUdpWaitingTooLong()
void setAudioBufferSizeInSamples(uint32_t buf_size)
Definition: JackTrip.h:307
void setupRingBuffers()
Set the RingBuffer objects.
Definition: JackTrip.cpp:310
virtual void setAudioBitResolution(AudioInterface::audioBitResolutionT AudioBitResolution)
Sets (override) Audio Bit Resolution after construction.
Definition: JackTrip.h:217
virtual void setupDataProtocol()
Set the DataProtocol objects.
Definition: JackTrip.cpp:263
JackTrip::jacktripModeT getJackTripMode() const
Definition: JackTrip.h:321
void setBindPorts(int port)
Sets port numbers to bind in RECEIVER and SENDER sockets.
Definition: JackTrip.h:235
void signalReceivedConnectionFromPeer()
void setBroadcast(int broadcast_queue)
Definition: JackTrip.h:429
unsigned int getNumInputChannels() const
Definition: JackTrip.h:367
virtual void setReceiveRingBuffer(RingBuffer *const ReceiveRingBuffer)
Definition: JackTrip.h:286
virtual int getReceiverPeerPort() const
Definition: JackTrip.h:268
virtual void setSendRingBuffer(RingBuffer *const SendRingBuffer)
Definition: JackTrip.h:284
virtual void setAudioTesterP(AudioTester *atp)
Definition: JackTrip.h:301
virtual void slotStopProcessesDueToError(const QString &errorMessage)
Definition: JackTrip.h:436
virtual void checkPeerSettings(int8_t *full_packet)
Definition: JackTrip.cpp:1065
size_t getSizeInBytesPerChannel() const
Definition: JackTrip.h:404
virtual void setStopOnTimeout(bool stopOnTimeout)
Sets whether to quit on timeout.
Definition: JackTrip.h:223
void slotPrintTest()
Definition: JackTrip.h:457
Base class for header type. Subclass this struct to create a new header.
Definition: PacketHeader.h:118
virtual uint16_t getSequenceNumber() const
Returns the current sequence number.
Definition: PacketHeader.h:151
virtual uint8_t getPeerBitResolution(int8_t *full_packet) const =0
virtual uint8_t getPeerConnectionMode(int8_t *full_packet) const =0
virtual void increaseSequenceNumber()
Increase sequence number for counter, a 16bit number.
Definition: PacketHeader.h:147
virtual uint8_t getPeerSamplingRate(int8_t *full_packet) const =0
virtual uint16_t getPeerBufferSize(int8_t *full_packet) const =0
virtual uint8_t getPeerNumChannels(int8_t *full_packet) const =0
virtual uint64_t getPeerTimeStamp(int8_t *full_packet) const =0
virtual uint16_t getPeerSequenceNumber(int8_t *full_packet) const =0
virtual int getHeaderSizeInBytes() const =0
Get the header size in bytes.
Interface for the process plugins to add to the JACK callback process in JackAudioInterface.
Definition: ProcessPlugin.h:53
Provides a ring-buffer (or circular-buffer) that can be written to and read from asynchronously (bloc...
Definition: RingBuffer.h:60
virtual void readBroadcastSlot(int8_t *ptrToReadSlot)
Definition: RingBuffer.cpp:247
virtual void readSlotNonBlocking(int8_t *ptrToReadSlot)
Same as readSlotBlocking but non-blocking (asynchronous)
Definition: RingBuffer.cpp:211
virtual bool insertSlotNonBlocking(const int8_t *ptrToSlot, int len, int lostLen)
Same as insertSlotBlocking but non-blocking (asynchronous)
Definition: RingBuffer.cpp:173
void readSlotBlocking(int8_t *ptrToReadSlot)
Read a slot from the RingBuffer into ptrToReadSlot. This method will block until there's space in the...
Definition: RingBuffer.cpp:145
const int gDefaultRedundancy
Definition: jacktrip_globals.h:92
const int gTimeOutMultiThreadedServer
Definition: jacktrip_globals.h:93
const int gDefaultNumInChannels
Definition: jacktrip_globals.h:52
const int gDefaultPort
Default JackTrip Port.
Definition: jacktrip_globals.h:101
const int gDefaultQueueLength
Definition: jacktrip_globals.h:86
quint8 uint8_t
Typedef for unsigned char. This type is guaranteed to be 8-bit.
Definition: jacktrip_types.h:69
quint16 uint16_t
Typedef for unsigned short. This type is guaranteed to be 16-bit.
Definition: jacktrip_types.h:71
quint32 uint32_t
Typedef for unsigned int. This type is guaranteed to be 32-bit.
Definition: jacktrip_types.h:73
qint8 int8_t
Typedef for unsigned long long int. This type is guaranteed to be 64-bit.
Definition: jacktrip_types.h:78