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>
71class JackTrip : public QObject
72{
73 Q_OBJECT;
74
75public:
76
77 //----------ENUMS------------------------------------------
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
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
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
341 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(); }
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
390 { return mPacketHeader->getPeerBufferSize(full_packet); }
391
393 { return mPacketHeader->getPeerSamplingRate(full_packet); }
394
396 { return mPacketHeader->getPeerBitResolution(full_packet); }
397
399 { return mPacketHeader->getPeerNumChannels(full_packet); }
400
402 { return mPacketHeader->getPeerConnectionMode(full_packet); }
403
405 { return mAudioInterface->getSizeInBytesPerChannel(); }
407 { return mPacketHeader->getHeaderSizeInBytes(); }
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
432public 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
463private slots:
464 void receivedConnectionTCP();
465 void receivedDataTCP();
466 void receivedDataUDP();
467 void udpTimerTick();
468 void tcpTimerTick();
469
470signals:
471 //void signalUdpTimeOut();
477 void signalError(const QString &errorMessage);
480
481public:
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
506private:
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
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
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
virtual DataProtocol * getDataProtocolSender() const
Definition: JackTrip.h:271
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 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 DataProtocol * getDataProtocolReceiver() const
Definition: JackTrip.h:273
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 RingBuffer * getSendRingBuffer() const
Definition: JackTrip.h:280
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