Browse Source

NetAdapter is now running.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2786 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.90
moret 17 years ago
parent
commit
346471d160
10 changed files with 118 additions and 165 deletions
  1. +2
    -2
      common/JackAudioAdapter.h
  2. +37
    -23
      common/JackAudioAdapterInterface.h
  3. +52
    -101
      common/JackNetAdapter.cpp
  4. +6
    -17
      common/JackNetAdapter.h
  5. +11
    -14
      common/JackNetInterface.cpp
  6. +3
    -3
      common/JackNetInterface.h
  7. +1
    -0
      windows/jack_audioadapter.cbp
  8. +1
    -0
      windows/jack_netadapter.cbp
  9. +2
    -2
      windows/jackdmp.workspace
  10. +3
    -3
      windows/jacknetadapter.rc

+ 2
- 2
common/JackAudioAdapter.h View File

@@ -34,7 +34,7 @@ namespace Jack
class JackAudioAdapter class JackAudioAdapter
{ {
private: private:
static int Process(jack_nframes_t, void* arg); static int Process(jack_nframes_t, void* arg);
static int BufferSize(jack_nframes_t buffer_size, void *arg); static int BufferSize(jack_nframes_t buffer_size, void *arg);
static int SampleRate(jack_nframes_t sample_rate, void *arg); static int SampleRate(jack_nframes_t sample_rate, void *arg);
@@ -55,7 +55,7 @@ class JackAudioAdapter
void Reset(); void Reset();


public: public:
JackAudioAdapter(jack_client_t* jack_client, JackAudioAdapterInterface* audio_io) : JackAudioAdapter(jack_client_t* jack_client, JackAudioAdapterInterface* audio_io) :
fJackClient(jack_client), fAudioAdapter(audio_io) fJackClient(jack_client), fAudioAdapter(audio_io)
{} {}


+ 37
- 23
common/JackAudioAdapterInterface.h View File

@@ -38,7 +38,7 @@ namespace Jack


#define TABLE_MAX 100000 #define TABLE_MAX 100000


struct Measure
struct Measure
{ {
int delta; int delta;
int time1; int time1;
@@ -49,7 +49,7 @@ struct Measure
int pos2; int pos2;
}; };


struct MeasureTable
struct MeasureTable
{ {


Measure fTable[TABLE_MAX]; Measure fTable[TABLE_MAX];
@@ -77,26 +77,26 @@ class JackAudioAdapterInterface
#ifdef JACK_MONITOR #ifdef JACK_MONITOR
MeasureTable fTable; MeasureTable fTable;
#endif #endif
int fCaptureChannels; int fCaptureChannels;
int fPlaybackChannels; int fPlaybackChannels;
jack_nframes_t fBufferSize; jack_nframes_t fBufferSize;
jack_nframes_t fSampleRate; jack_nframes_t fSampleRate;
// DLL // DLL
JackAtomicDelayLockedLoop fProducerDLL; JackAtomicDelayLockedLoop fProducerDLL;
JackAtomicDelayLockedLoop fConsumerDLL; JackAtomicDelayLockedLoop fConsumerDLL;
JackResampler** fCaptureRingBuffer; JackResampler** fCaptureRingBuffer;
JackResampler** fPlaybackRingBuffer; JackResampler** fPlaybackRingBuffer;


bool fRunning; bool fRunning;
public: public:
JackAudioAdapterInterface(jack_nframes_t buffer_size, jack_nframes_t sample_rate) JackAudioAdapterInterface(jack_nframes_t buffer_size, jack_nframes_t sample_rate)
:fBufferSize(buffer_size),
:fBufferSize(buffer_size),
fSampleRate(sample_rate), fSampleRate(sample_rate),
fProducerDLL(buffer_size, sample_rate), fProducerDLL(buffer_size, sample_rate),
fConsumerDLL(buffer_size, sample_rate), fConsumerDLL(buffer_size, sample_rate),
@@ -104,21 +104,21 @@ class JackAudioAdapterInterface
{} {}
virtual ~JackAudioAdapterInterface() virtual ~JackAudioAdapterInterface()
{} {}
void SetRingBuffers(JackResampler** input, JackResampler** output) void SetRingBuffers(JackResampler** input, JackResampler** output)
{ {
fCaptureRingBuffer = input; fCaptureRingBuffer = input;
fPlaybackRingBuffer = output; fPlaybackRingBuffer = output;
} }
bool IsRunning() {return fRunning;} bool IsRunning() {return fRunning;}
virtual void Reset() {fRunning = false;} virtual void Reset() {fRunning = false;}
void ResetRingBuffers(); void ResetRingBuffers();
virtual int Open(); virtual int Open();
virtual int Close(); virtual int Close();
virtual int SetBufferSize(jack_nframes_t buffer_size) virtual int SetBufferSize(jack_nframes_t buffer_size)
{ {
fBufferSize = buffer_size; fBufferSize = buffer_size;
@@ -126,7 +126,7 @@ class JackAudioAdapterInterface
fProducerDLL.Init(fBufferSize, fSampleRate); fProducerDLL.Init(fBufferSize, fSampleRate);
return 0; return 0;
} }
virtual int SetSampleRate(jack_nframes_t sample_rate) virtual int SetSampleRate(jack_nframes_t sample_rate)
{ {
fSampleRate = sample_rate; fSampleRate = sample_rate;
@@ -134,7 +134,7 @@ class JackAudioAdapterInterface
// Producer (Audio) keeps the same SR // Producer (Audio) keeps the same SR
return 0; return 0;
} }
virtual int SetAudioSampleRate(jack_nframes_t sample_rate) virtual int SetAudioSampleRate(jack_nframes_t sample_rate)
{ {
fSampleRate = sample_rate; fSampleRate = sample_rate;
@@ -142,24 +142,38 @@ class JackAudioAdapterInterface
fProducerDLL.Init(fBufferSize, fSampleRate); fProducerDLL.Init(fBufferSize, fSampleRate);
return 0; return 0;
} }
virtual void SetCallbackTime(jack_time_t callback_usec) virtual void SetCallbackTime(jack_time_t callback_usec)
{ {
fConsumerDLL.IncFrame(callback_usec); fConsumerDLL.IncFrame(callback_usec);
} }
void ResampleFactor(jack_nframes_t& frame1, jack_nframes_t& frame2); void ResampleFactor(jack_nframes_t& frame1, jack_nframes_t& frame2);

void SetInputs ( int inputs )
{
jack_log ( "JackAudioAdapterInterface::SetInputs %d", inputs );
fCaptureChannels = inputs;
}

void SetOutputs ( int outputs )
{
jack_log ( "JackAudioAdapterInterface::SetOutputs %d", outputs );
fPlaybackChannels = outputs;
}

int GetInputs() int GetInputs()
{ {
jack_log ( "JackAudioAdapterInterface::GetInputs %d", fCaptureChannels );
return fCaptureChannels; return fCaptureChannels;
}
}
int GetOutputs() int GetOutputs()
{ {
jack_log ( "JackAudioAdapterInterface::GetOutputs %d", fPlaybackChannels );
return fPlaybackChannels; return fPlaybackChannels;
}
}
}; };


} }


+ 52
- 101
common/JackNetAdapter.cpp View File

@@ -24,9 +24,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.


namespace Jack namespace Jack
{ {

JackNetAdapter::JackNetAdapter ( jack_nframes_t buffer_size, jack_nframes_t sample_rate, const JSList* params ) JackNetAdapter::JackNetAdapter ( jack_nframes_t buffer_size, jack_nframes_t sample_rate, const JSList* params )
: JackAudioAdapterInterface ( buffer_size, sample_rate ), fThread ( this )
: JackAudioAdapterInterface ( buffer_size, sample_rate ), JackNetSlaveInterface(), fThread ( this )
{ {
jack_log ( "JackNetAdapter::JackNetAdapter" ); jack_log ( "JackNetAdapter::JackNetAdapter" );


@@ -36,7 +35,7 @@ namespace Jack
//global parametering //global parametering
fMulticastIP = new char[16]; fMulticastIP = new char[16];
strcpy ( fMulticastIP, DEFAULT_MULTICAST_IP ); strcpy ( fMulticastIP, DEFAULT_MULTICAST_IP );
fSocket.SetPort ( DEFAULT_PORT );
uint port = DEFAULT_PORT;
GetHostName ( fParams.fName, JACK_CLIENT_NAME_SIZE ); GetHostName ( fParams.fName, JACK_CLIENT_NAME_SIZE );
fSocket.GetName ( fParams.fSlaveNetName ); fSocket.GetName ( fParams.fSlaveNetName );
fParams.fMtu = 1500; fParams.fMtu = 1500;
@@ -45,8 +44,8 @@ namespace Jack
fParams.fReturnAudioChannels = 2; fParams.fReturnAudioChannels = 2;
fParams.fSendMidiChannels = 0; fParams.fSendMidiChannels = 0;
fParams.fReturnMidiChannels = 0; fParams.fReturnMidiChannels = 0;
fParams.fSampleRate = 48000;
fParams.fPeriodSize = 128;
fParams.fSampleRate = sample_rate;
fParams.fPeriodSize = buffer_size;
fParams.fSlaveSyncMode = 1; fParams.fSlaveSyncMode = 1;
fParams.fNetworkMode = 'n'; fParams.fNetworkMode = 'n';


@@ -59,18 +58,21 @@ namespace Jack
switch ( param->character ) switch ( param->character )
{ {
case 'a' : case 'a' :
fMulticastIP = strdup ( param->value.str );
if ( strlen ( param->value.str ) < 16 )
strcpy ( fMulticastIP, param->value.str );
else
jack_error ( "Can't use multicast address %s, using default %s", param->value.ui, DEFAULT_MULTICAST_IP );
break; break;
case 'p':
case 'p' :
fSocket.SetPort ( param->value.ui ); fSocket.SetPort ( param->value.ui );
break; break;
case 'M':
case 'M' :
fParams.fMtu = param->value.i; fParams.fMtu = param->value.i;
break; break;
case 'C':
case 'C' :
fParams.fSendAudioChannels = param->value.i; fParams.fSendAudioChannels = param->value.i;
break; break;
case 'P':
case 'P' :
fParams.fReturnAudioChannels = param->value.i; fParams.fReturnAudioChannels = param->value.i;
break; break;
case 'n' : case 'n' :
@@ -91,11 +93,20 @@ namespace Jack
break; break;
case 'S' : case 'S' :
fParams.fSlaveSyncMode = 1; fParams.fSlaveSyncMode = 1;
break;
} }
} }


fCaptureChannels = fParams.fSendAudioChannels;
fPlaybackChannels = fParams.fReturnAudioChannels;
fSocket.SetPort ( port );
fSocket.SetAddress ( fMulticastIP, port );

jack_info ( "netadapter : this %x", this );
jack_info ( "netadapter : input %x", &fCaptureChannels );
jack_info ( "netadapter : output %x", &fPlaybackChannels );

SetInputs ( fParams.fSendAudioChannels );
SetOutputs ( fParams.fReturnAudioChannels );

fSoftCaptureBuffer = NULL; fSoftCaptureBuffer = NULL;
fSoftPlaybackBuffer = NULL; fSoftPlaybackBuffer = NULL;
} }
@@ -113,35 +124,11 @@ namespace Jack


int JackNetAdapter::Open() int JackNetAdapter::Open()
{ {
jack_log ( "JackNetAdapter::Open()" );
jack_log ( "JackNetAdapter::Open" );


int port_index;

//display some additional infos
jack_info ( "Net adapter started in %s mode %s Master's transport sync.", jack_info ( "Net adapter started in %s mode %s Master's transport sync.",
( fParams.fSlaveSyncMode ) ? "sync" : "async", ( fParams.fTransportSync ) ? "with" : "without" ); ( fParams.fSlaveSyncMode ) ? "sync" : "async", ( fParams.fTransportSync ) ? "with" : "without" );


//init network connection
if ( !JackNetSlaveInterface::Init() )
return -1;

//then set global parameters
SetParams();

//set buffers
fSoftCaptureBuffer = new sample_t*[fCaptureChannels];
for ( port_index = 0; port_index < fCaptureChannels; port_index++ )
{
fSoftCaptureBuffer[port_index] = new sample_t[fParams.fPeriodSize];
fNetAudioCaptureBuffer->SetBuffer ( port_index, fSoftCaptureBuffer[port_index] );
}
fSoftPlaybackBuffer = new sample_t*[fPlaybackChannels];
for ( port_index = 0; port_index < fCaptureChannels; port_index++ )
{
fSoftPlaybackBuffer[port_index] = new sample_t[fParams.fPeriodSize];
fNetAudioPlaybackBuffer->SetBuffer ( port_index, fSoftPlaybackBuffer[port_index] );
}

fThread.AcquireRealTime ( 85 ); fThread.AcquireRealTime ( 85 );


return fThread.StartSync(); return fThread.StartSync();
@@ -149,6 +136,7 @@ namespace Jack


int JackNetAdapter::Close() int JackNetAdapter::Close()
{ {
fThread.Stop();
fSocket.Close(); fSocket.Close();
return 0; return 0;
} }
@@ -161,25 +149,38 @@ namespace Jack


bool JackNetAdapter::Init() bool JackNetAdapter::Init()
{ {
jack_info ( "Starting NetAdapter." );
return true;
}
jack_log ( "JackNetAdapter::Init" );


bool JackNetAdapter::Execute()
{
//the sync mode is the equivalent of driver sync mode : data are sent back right after being computed
//TODO : verify async mode is appropriate here, because of the ringbuffer usage
switch ( fParams.fSlaveSyncMode )
int port_index;

//init network connection
if ( !JackNetSlaveInterface::Init() )
return false;

//then set global parameters
SetParams();

//set buffers
fSoftCaptureBuffer = new sample_t*[fCaptureChannels];
for ( port_index = 0; port_index < fCaptureChannels; port_index++ )
{ {
case true :
return ProcessSync();
case false :
return ProcessAsync();
fSoftCaptureBuffer[port_index] = new sample_t[fParams.fPeriodSize];
fNetAudioCaptureBuffer->SetBuffer ( port_index, fSoftCaptureBuffer[port_index] );
} }
fSoftPlaybackBuffer = new sample_t*[fPlaybackChannels];
for ( port_index = 0; port_index < fCaptureChannels; port_index++ )
{
fSoftPlaybackBuffer[port_index] = new sample_t[fParams.fPeriodSize];
fNetAudioPlaybackBuffer->SetBuffer ( port_index, fSoftPlaybackBuffer[port_index] );
}

//init done, display parameters
SessionParamsDisplay ( &fParams );

return true; return true;
} }


bool JackNetAdapter::ProcessSync()
bool JackNetAdapter::Execute()
{ {
bool failure = false; bool failure = false;
int port_index; int port_index;
@@ -195,6 +196,7 @@ namespace Jack
jack_nframes_t time1, time2; jack_nframes_t time1, time2;
ResampleFactor ( time1, time2 ); ResampleFactor ( time1, time2 );



for ( port_index = 0; port_index < fCaptureChannels; port_index++ ) for ( port_index = 0; port_index < fCaptureChannels; port_index++ )
{ {
fCaptureRingBuffer[port_index]->SetRatio ( time1, time2 ); fCaptureRingBuffer[port_index]->SetRatio ( time1, time2 );
@@ -224,53 +226,6 @@ namespace Jack


return true; return true;
} }

bool JackNetAdapter::ProcessAsync()
{
bool failure = false;
int port_index;

//receive
if ( SyncRecv() == SOCKET_ERROR )
return true;

if ( DataRecv() == SOCKET_ERROR )
return false;

//send
if ( SyncSend() == SOCKET_ERROR )
return false;

if ( DataSend() == SOCKET_ERROR )
return false;

if ( failure )
{
jack_error ( "JackNetAdapter::Execute ringbuffer failure...reset." );
ResetRingBuffers();
}

//resample
jack_nframes_t time1, time2;
ResampleFactor ( time1, time2 );

for ( port_index = 0; port_index < fCaptureChannels; port_index++ )
{
fCaptureRingBuffer[port_index]->SetRatio ( time1, time2 );
if ( fCaptureRingBuffer[port_index]->WriteResample ( fSoftCaptureBuffer[port_index], fBufferSize ) < fBufferSize )
failure = true;
}

for ( port_index = 0; port_index < fPlaybackChannels; port_index++ )
{
fPlaybackRingBuffer[port_index]->SetRatio ( time2, time1 );
if ( fPlaybackRingBuffer[port_index]->ReadResample ( fSoftPlaybackBuffer[port_index], fBufferSize ) < fBufferSize )
failure = true;
}

return true;
}

} // namespace Jack } // namespace Jack


#ifdef __cplusplus #ifdef __cplusplus
@@ -377,9 +332,7 @@ extern "C"
assert ( adapter ); assert ( adapter );


if ( adapter->Open() == 0 ) if ( adapter->Open() == 0 )
{
return 0; return 0;
}
else else
{ {
delete adapter; delete adapter;
@@ -395,10 +348,8 @@ extern "C"
JackArgParser parser ( load_init ); JackArgParser parser ( load_init );


if ( parser.GetArgc() > 0 ) if ( parser.GetArgc() > 0 )
{
if ( parser.ParseParams ( desc, &params ) != 0 ) if ( parser.ParseParams ( desc, &params ) != 0 )
jack_error ( "Internal client : JackArgParser::ParseParams error." ); jack_error ( "Internal client : JackArgParser::ParseParams error." );
}


return jack_internal_initialize ( jack_client, params ); return jack_internal_initialize ( jack_client, params );
} }


+ 6
- 17
common/JackNetAdapter.h View File

@@ -20,13 +20,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#ifndef __JackNetAdapter__ #ifndef __JackNetAdapter__
#define __JackNetAdapter__ #define __JackNetAdapter__


#include <math.h>
#include <limits.h>
#include <assert.h> #include <assert.h>
#include "JackAudioAdapterInterface.h" #include "JackAudioAdapterInterface.h"
#include "JackPlatformThread.h" #include "JackPlatformThread.h"
#include "jack.h"
#include "jslist.h"
#include "JackNetInterface.h" #include "JackNetInterface.h"


namespace Jack namespace Jack
@@ -38,21 +34,14 @@ namespace Jack


class JackNetAdapter : public JackAudioAdapterInterface, public JackNetSlaveInterface, public JackRunnableInterface class JackNetAdapter : public JackAudioAdapterInterface, public JackNetSlaveInterface, public JackRunnableInterface
{ {

private: private:
//jack data
//jack data
net_transport_data_t fTransportData; net_transport_data_t fTransportData;


//sample buffers //sample buffers
sample_t** fSoftCaptureBuffer; sample_t** fSoftCaptureBuffer;
sample_t** fSoftPlaybackBuffer; sample_t** fSoftPlaybackBuffer;


int SetSyncPacket();
int TransportSync();

bool ProcessSync();
bool ProcessAsync();

JackThread fThread; JackThread fThread;


public: public:
@@ -60,13 +49,13 @@ namespace Jack
JackNetAdapter ( jack_nframes_t buffer_size, jack_nframes_t sample_rate, const JSList* params ); JackNetAdapter ( jack_nframes_t buffer_size, jack_nframes_t sample_rate, const JSList* params );
~JackNetAdapter(); ~JackNetAdapter();


virtual int Open();
virtual int Close();
int Open();
int Close();


virtual int SetBufferSize ( jack_nframes_t buffer_size );
int SetBufferSize ( jack_nframes_t buffer_size );


virtual bool Init();
virtual bool Execute();
bool Init();
bool Execute();
}; };
} }




+ 11
- 14
common/JackNetInterface.cpp View File

@@ -32,7 +32,6 @@ namespace Jack


JackNetInterface::JackNetInterface ( const char* multicast_ip, int port ) : fSocket ( multicast_ip, port ) JackNetInterface::JackNetInterface ( const char* multicast_ip, int port ) : fSocket ( multicast_ip, port )
{ {

fMulticastIP = strdup ( multicast_ip ); fMulticastIP = strdup ( multicast_ip );
} }


@@ -78,8 +77,8 @@ namespace Jack
//midi //midi
midi_size = fParams.fMtu * ( max ( fParams.fSendMidiChannels, fParams.fReturnMidiChannels ) * midi_size = fParams.fMtu * ( max ( fParams.fSendMidiChannels, fParams.fReturnMidiChannels ) *
fParams.fPeriodSize * sizeof ( sample_t ) / ( fParams.fMtu - sizeof ( packet_header_t ) ) ); fParams.fPeriodSize * sizeof ( sample_t ) / ( fParams.fMtu - sizeof ( packet_header_t ) ) );
//size of sync + audio + midi
bufsize = 2 * ( fParams.fMtu + ( int ) audio_size + ( int ) midi_size );
//bufsize = sync + audio + midi
bufsize = fParams.fMtu + ( int ) audio_size + ( int ) midi_size;


//tx buffer //tx buffer
if ( fSocket.SetOption ( SOL_SOCKET, SO_SNDBUF, &bufsize, sizeof ( bufsize ) ) == SOCKET_ERROR ) if ( fSocket.SetOption ( SOL_SOCKET, SO_SNDBUF, &bufsize, sizeof ( bufsize ) ) == SOCKET_ERROR )
@@ -114,10 +113,10 @@ namespace Jack
//same PcktID (cycle), next SubPcktID (subcycle) //same PcktID (cycle), next SubPcktID (subcycle)
if ( ( fRxHeader.fSubCycle < ( fNSubProcess - 1 ) ) && ( rx_head->fCycle == fRxHeader.fCycle ) && ( rx_head->fSubCycle == ( fRxHeader.fSubCycle + 1 ) ) ) if ( ( fRxHeader.fSubCycle < ( fNSubProcess - 1 ) ) && ( rx_head->fCycle == fRxHeader.fCycle ) && ( rx_head->fSubCycle == ( fRxHeader.fSubCycle + 1 ) ) )
return true; return true;
//next PcktID (cycle), SubPcktID reset to 1 (first subcyle)
//next PcktID (cycle), SubPcktID reset to 0 (first subcyle)
if ( ( rx_head->fCycle == ( fRxHeader.fCycle + 1 ) ) && ( fRxHeader.fSubCycle == ( fNSubProcess - 1 ) ) && ( rx_head->fSubCycle == 0 ) ) if ( ( rx_head->fCycle == ( fRxHeader.fCycle + 1 ) ) && ( fRxHeader.fSubCycle == ( fNSubProcess - 1 ) ) && ( rx_head->fSubCycle == 0 ) )
return true; return true;
//else, next is'nt next, return false
//else, packet(s) missing, return false
return false; return false;
} }


@@ -187,8 +186,6 @@ namespace Jack
//set the number of complete audio frames we can put in a packet //set the number of complete audio frames we can put in a packet
SetFramesPerPacket(); SetFramesPerPacket();


jack_log ( "JackNetMasterInterface::Init Frames per packet %u", fParams.fFramesPerPacket );

//send 'SLAVE_SETUP' until 'START_MASTER' received //send 'SLAVE_SETUP' until 'START_MASTER' received
jack_info ( "Sending parameters to %s ...", fParams.fSlaveNetName ); jack_info ( "Sending parameters to %s ...", fParams.fSlaveNetName );
do do
@@ -231,10 +228,10 @@ namespace Jack
float time = 0; float time = 0;
//slow mode, very short timeout on recv //slow mode, very short timeout on recv
if ( fParams.fNetworkMode == 's' ) if ( fParams.fNetworkMode == 's' )
time = 1000000.f * ( static_cast<float> ( fParams.fFramesPerPacket ) / static_cast<float> ( fParams.fSampleRate ) );
time = 2000000.f * ( static_cast<float> ( fParams.fFramesPerPacket ) / static_cast<float> ( fParams.fSampleRate ) );
//normal mode, short timeout on recv //normal mode, short timeout on recv
else if ( fParams.fNetworkMode == 'n' ) else if ( fParams.fNetworkMode == 'n' )
time = 2000000.f * ( static_cast<float> ( fParams.fFramesPerPacket ) / static_cast<float> ( fParams.fSampleRate ) );
time = 4000000.f * ( static_cast<float> ( fParams.fFramesPerPacket ) / static_cast<float> ( fParams.fSampleRate ) );
//fast mode, wait for the entire cycle duration //fast mode, wait for the entire cycle duration
else if ( fParams.fNetworkMode == 'f' ) else if ( fParams.fNetworkMode == 'f' )
time = 750000.f * ( static_cast<float> ( fParams.fPeriodSize ) / static_cast<float> ( fParams.fSampleRate ) ); time = 750000.f * ( static_cast<float> ( fParams.fPeriodSize ) / static_cast<float> ( fParams.fSampleRate ) );
@@ -345,8 +342,8 @@ namespace Jack
{ {
fTxHeader.fSubCycle = subproc; fTxHeader.fSubCycle = subproc;
fTxHeader.fIsLastPckt = ( ( subproc == ( fTxHeader.fNMidiPckt - 1 ) ) && !fParams.fSendAudioChannels ) ? 1 : 0; fTxHeader.fIsLastPckt = ( ( subproc == ( fTxHeader.fNMidiPckt - 1 ) ) && !fParams.fSendAudioChannels ) ? 1 : 0;
fTxHeader.fPacketSize = fNetMidiCaptureBuffer->RenderToNetwork ( subproc, fTxHeader.fMidiDataSize );
fTxHeader.fPacketSize += sizeof ( packet_header_t );
fTxHeader.fPacketSize = sizeof ( packet_header_t );
fTxHeader.fPacketSize += fNetMidiCaptureBuffer->RenderToNetwork ( subproc, fTxHeader.fMidiDataSize );
memcpy ( fTxBuffer, &fTxHeader, sizeof ( packet_header_t ) ); memcpy ( fTxBuffer, &fTxHeader, sizeof ( packet_header_t ) );
if ( Send ( fTxHeader.fPacketSize, 0 ) == SOCKET_ERROR ) if ( Send ( fTxHeader.fPacketSize, 0 ) == SOCKET_ERROR )
return SOCKET_ERROR; return SOCKET_ERROR;
@@ -433,7 +430,7 @@ namespace Jack
rx_bytes = Recv ( fParams.fMtu, MSG_PEEK ); rx_bytes = Recv ( fParams.fMtu, MSG_PEEK );
if ( rx_bytes == SOCKET_ERROR ) if ( rx_bytes == SOCKET_ERROR )
return rx_bytes; return rx_bytes;
//if no data,
//if no data
if ( ( rx_bytes == 0 ) && ( ++jumpcnt == fNSubProcess ) ) if ( ( rx_bytes == 0 ) && ( ++jumpcnt == fNSubProcess ) )
{ {
jack_error ( "No data from %s...", fParams.fName ); jack_error ( "No data from %s...", fParams.fName );
@@ -736,8 +733,8 @@ namespace Jack
{ {
fTxHeader.fSubCycle = subproc; fTxHeader.fSubCycle = subproc;
fTxHeader.fIsLastPckt = ( ( subproc == ( fTxHeader.fNMidiPckt - 1 ) ) && !fParams.fReturnAudioChannels ) ? 1 : 0; fTxHeader.fIsLastPckt = ( ( subproc == ( fTxHeader.fNMidiPckt - 1 ) ) && !fParams.fReturnAudioChannels ) ? 1 : 0;
fTxHeader.fPacketSize = fNetMidiPlaybackBuffer->RenderToNetwork ( subproc, fTxHeader.fMidiDataSize );
fTxHeader.fPacketSize += sizeof ( packet_header_t );
fTxHeader.fPacketSize = sizeof ( packet_header_t );
fTxHeader.fPacketSize += fNetMidiPlaybackBuffer->RenderToNetwork ( subproc, fTxHeader.fMidiDataSize );
memcpy ( fTxBuffer, &fTxHeader, sizeof ( packet_header_t ) ); memcpy ( fTxBuffer, &fTxHeader, sizeof ( packet_header_t ) );
if ( Send ( fTxHeader.fPacketSize, 0 ) == SOCKET_ERROR ) if ( Send ( fTxHeader.fPacketSize, 0 ) == SOCKET_ERROR )
return SOCKET_ERROR; return SOCKET_ERROR;


+ 3
- 3
common/JackNetInterface.h View File

@@ -76,7 +76,7 @@ namespace Jack
virtual int Send ( size_t size, int flags ) = 0; virtual int Send ( size_t size, int flags ) = 0;
virtual int Recv ( size_t size, int flags ) = 0; virtual int Recv ( size_t size, int flags ) = 0;


JackNetInterface()
JackNetInterface() : fSocket()
{} {}
JackNetInterface ( const char* multicast_ip, int port ); JackNetInterface ( const char* multicast_ip, int port );
JackNetInterface ( session_params_t& params, JackNetSocket& socket, const char* multicast_ip ); JackNetInterface ( session_params_t& params, JackNetSocket& socket, const char* multicast_ip );
@@ -107,7 +107,7 @@ namespace Jack
int Recv ( size_t size, int flags ); int Recv ( size_t size, int flags );


public: public:
JackNetMasterInterface() : fRunning ( false )
JackNetMasterInterface() : JackNetInterface(), fRunning ( false )
{} {}
JackNetMasterInterface ( session_params_t& params, JackNetSocket& socket, const char* multicast_ip ) JackNetMasterInterface ( session_params_t& params, JackNetSocket& socket, const char* multicast_ip )
: JackNetInterface ( params, socket, multicast_ip ) : JackNetInterface ( params, socket, multicast_ip )
@@ -136,7 +136,7 @@ namespace Jack
int Send ( size_t size, int flags ); int Send ( size_t size, int flags );


public: public:
JackNetSlaveInterface()
JackNetSlaveInterface() : JackNetInterface()
{} {}
JackNetSlaveInterface ( const char* ip, int port ) : JackNetInterface ( ip, port ) JackNetSlaveInterface ( const char* ip, int port ) : JackNetInterface ( ip, port )
{} {}


+ 1
- 0
windows/jack_audioadapter.cbp View File

@@ -128,6 +128,7 @@
<Add library="libjackservermp" /> <Add library="libjackservermp" />
</Linker> </Linker>
<Unit filename="..\common\JackAudioAdapter.cpp" /> <Unit filename="..\common\JackAudioAdapter.cpp" />
<Unit filename="..\common\JackAudioAdapterFactory.cpp" />
<Unit filename="..\common\JackAudioAdapterInterface.cpp" /> <Unit filename="..\common\JackAudioAdapterInterface.cpp" />
<Unit filename="..\common\JackLibSampleRateResampler.cpp" /> <Unit filename="..\common\JackLibSampleRateResampler.cpp" />
<Unit filename="..\common\JackResampler.cpp" /> <Unit filename="..\common\JackResampler.cpp" />


+ 1
- 0
windows/jack_netadapter.cbp View File

@@ -77,6 +77,7 @@
<Add option="-O2" /> <Add option="-O2" />
<Add option="-Wall" /> <Add option="-Wall" />
<Add option="-DBUILD_DLL" /> <Add option="-DBUILD_DLL" />
<Add option="-DJACK_MONITOR" />
<Add directory="..\common" /> <Add directory="..\common" />
<Add directory="..\common\jack" /> <Add directory="..\common\jack" />
<Add directory="..\windows" /> <Add directory="..\windows" />


+ 2
- 2
windows/jackdmp.workspace View File

@@ -16,7 +16,7 @@
<Project filename="jack_netdriver.cbp"> <Project filename="jack_netdriver.cbp">
<Depends filename="libjackservermp.cbp" /> <Depends filename="libjackservermp.cbp" />
</Project> </Project>
<Project filename="jack_netadapter.cbp">
<Project filename="jack_netadapter.cbp" active="1">
<Depends filename="libjackservermp.cbp" /> <Depends filename="libjackservermp.cbp" />
</Project> </Project>
<Project filename="jack_netmanager.cbp"> <Project filename="jack_netmanager.cbp">
@@ -35,7 +35,7 @@
<Depends filename="libjackmp.cbp" /> <Depends filename="libjackmp.cbp" />
</Project> </Project>
<Project filename="jack_connect.cbp" /> <Project filename="jack_connect.cbp" />
<Project filename="jack_disconnect.cbp" active="1">
<Project filename="jack_disconnect.cbp">
<Depends filename="libjackmp.cbp" /> <Depends filename="libjackmp.cbp" />
</Project> </Project>
</Workspace> </Workspace>


+ 3
- 3
windows/jacknetadapter.rc View File

@@ -24,12 +24,12 @@ BEGIN
VALUE "CompanyName", "Grame\0" VALUE "CompanyName", "Grame\0"
VALUE "FileDescription", "Jackmp Net Adapter for Windows\0" VALUE "FileDescription", "Jackmp Net Adapter for Windows\0"
VALUE "FileVersion", "1, 9, 0, 0\0" VALUE "FileVersion", "1, 9, 0, 0\0"
VALUE "InternalName", "jack_netadapter\0"
VALUE "InternalName", "netadapter\0"
VALUE "LegalCopyright", "Copyright Grame © 2006-2008\0" VALUE "LegalCopyright", "Copyright Grame © 2006-2008\0"
VALUE "LegalTrademarks", "\0" VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "jack_netadapter.dll\0"
VALUE "OriginalFilename", "netadapter.dll\0"
VALUE "PrivateBuild", "\0" VALUE "PrivateBuild", "\0"
VALUE "ProductName", "jack_netadapter\0"
VALUE "ProductName", "netadapter\0"
VALUE "ProductVersion", "1, 9, 0, 0\0" VALUE "ProductVersion", "1, 9, 0, 0\0"
VALUE "SpecialBuild", "\0" VALUE "SpecialBuild", "\0"
END END


Loading…
Cancel
Save