38 #ifndef __JACKTRIP_H__
39 #define __JACKTRIP_H__
49 #include <QSharedPointer>
136 int NumNetRevChans = 0,
155 { std::cout << std::endl <<
"Shutting Down..." << std::endl;
sSigInt =
true; }
183 virtual void stop(QString errorMessage =
"");
199 { mJackTripMode = JacktripMode; }
202 { mDataProtocol = DataProtocolType; }
206 mPacketHeaderType = PacketHeaderType;
207 delete mPacketHeader;
208 mPacketHeader = NULL;
213 { mBufferQueueLength = BufferQueueLength; }
215 { mBufferStrategy = BufferStrategy; }
218 { mAudioBitResolution = AudioBitResolution; }
221 { mUnderRunMode = UnderRunMode; }
224 { mStopOnTimeout = stopOnTimeout; }
229 mReceiverBindPort = port;
230 mSenderPeerPort = port;
231 mSenderBindPort = port;
232 mReceiverPeerPort = port;
237 mReceiverBindPort = port;
238 mSenderBindPort = port;
243 mSenderPeerPort = port;
244 mReceiverPeerPort = port;
248 { mJackClientName = clientName; }
250 { mRemoteClientName = remoteClientName; }
253 { mNumChans = num_chans; }
256 virtual void setIOStatStream(QSharedPointer<std::ofstream> statStream) { mIOStatStream = statStream; }
260 {mConnectDefaultAudioPorts = connect;}
263 {
return mReceiverBindPort; }
265 {
return mSenderPeerPort; }
267 {
return mSenderBindPort; }
269 {
return mReceiverPeerPort; }
272 {
return mDataProtocolSender; }
274 {
return mDataProtocolReceiver; }
276 { mDataProtocolSender = DataProtocolSender; }
278 { mDataProtocolReceiver = DataProtocolReceiver; }
281 {
return mSendRingBuffer; }
283 {
return mReceiveRingBuffer; }
285 { mSendRingBuffer = SendRingBuffer; }
287 { mReceiveRingBuffer = ReceiveRingBuffer; }
296 { mAudiointerfaceMode = audiointerface_mode; }
304 { mSampleRate = sample_rate; }
306 { mDeviceID = device_id; }
308 { mAudioBufferSize = buf_size; }
312 {
return mConnectionMode; }
314 { mConnectionMode = connection_mode; }
317 {
return mHubConnectionModeT; }
319 { mHubConnectionModeT = connection_mode; }
322 {
return mJackTripMode; }
325 {
return mPeerAddress; }
328 {
return mReceivedConnection; }
331 {
return mTcpConnectionError; }
356 {
return mAudioBufferSize; }
358 {
return mDeviceID; }
363 {
return mSampleRate; }
366 {
return mAudioBitResolution*8; }
368 {
return mNumChans; }
370 {
return mNumChans; }
425 mSimulatedLossRate = loss;
426 mSimulatedJitterRate = jitter;
427 mSimulatedDelayRel = delay_rel;
429 void setBroadcast(
int broadcast_queue) {mBroadcastQueueLength = broadcast_queue;}
437 { this->
stop(errorMessage); }
446 int wait_time = 10000;
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");
458 { std::cout <<
"=== TESTING ===" << std::endl; }
464 void receivedConnectionTCP();
465 void receivedDataTCP();
466 void receivedDataUDP();
521 int mBufferQueueLength;
523 int mBroadcastQueueLength;
529 QString mPeerAddress;
545 int mReceiverBindPort;
548 int mReceiverPeerPort;
551 unsigned int mRedundancy;
552 QString mJackClientName;
553 QString mRemoteClientName;
558 QVector<ProcessPlugin*> mProcessPluginsFromNetwork;
559 QVector<ProcessPlugin*> mProcessPluginsToNetwork;
561 QTimer mTimeoutTimer;
565 QTcpSocket mTcpClient;
566 QUdpSocket mUdpSockTemp;
568 volatile bool mReceivedConnection;
569 volatile bool mTcpConnectionError;
570 volatile bool mStopped;
571 volatile bool mHasShutdown;
573 bool mConnectDefaultAudioPorts;
574 QSharedPointer<std::ofstream> mIOStatStream;
576 std::ostream mIOStatLogStream;
577 double mSimulatedLossRate;
578 double mSimulatedJitterRate;
579 double mSimulatedDelayRel;
580 bool mUseRtUdpPriority;
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
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