Changeset 3956
- Timestamp:
- 03/12/10 03:08:33 (5 months ago)
- Files:
-
- jack2/branches/libjacknet/common/JackNetAdapter.cpp (modified) (4 diffs)
- jack2/branches/libjacknet/common/JackNetAPI.cpp (modified) (4 diffs)
- jack2/branches/libjacknet/macosx/coreaudio/JackCoreAudioDriver.cpp (modified) (1 diff)
- jack2/branches/libjacknet/macosx/coreaudio/TiPhoneCoreAudioRenderer.cpp (modified) (5 diffs)
- jack2/branches/libjacknet/macosx/coreaudio/TiPhoneCoreAudioRenderer.h (modified) (4 diffs)
- jack2/branches/libjacknet/macosx/iphone/iPhoneNet.xcodeproj/project.pbxproj (modified) (2 diffs)
- jack2/branches/libjacknet/macosx/iphone/main_master.mm (modified) (5 diffs)
- jack2/branches/libjacknet/macosx/iphone/main_slave.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
jack2/branches/libjacknet/common/JackNetAdapter.cpp
r3955 r3956 41 41 fParams.fMtu = DEFAULT_MTU; 42 42 fParams.fTransportSync = 0; 43 fParams.fSendAudioChannels = 2;44 fParams.fReturnAudioChannels = 2;43 int send_audio = -1; 44 int return_audio = -1; 45 45 fParams.fSendMidiChannels = 0; 46 46 fParams.fReturnMidiChannels = 0; … … 72 72 break; 73 73 case 'C' : 74 fParams.fSendAudioChannels= param->value.i;74 send_audio = param->value.i; 75 75 break; 76 76 case 'P' : 77 fParams.fReturnAudioChannels= param->value.i;77 return_audio = param->value.i; 78 78 break; 79 79 case 'n' : … … 106 106 fSocket.SetPort ( port ); 107 107 fSocket.SetAddress ( fMulticastIP, port ); 108 108 109 // If not set, takes deafault 110 fParams.fSendAudioChannels = (send_audio == -1) ? 2 : send_audio; 111 112 // If not set, takes deafault 113 fParams.fReturnAudioChannels = (return_audio == -1) ? 2 : return_audio; 114 109 115 //set the audio adapter interface channel values 110 116 SetInputs ( fParams.fSendAudioChannels ); … … 216 222 217 223 //set buffers 218 fSoftCaptureBuffer = new sample_t*[fCaptureChannels]; 219 for ( port_index = 0; port_index < fCaptureChannels; port_index++ ) 220 { 221 fSoftCaptureBuffer[port_index] = new sample_t[fParams.fPeriodSize]; 222 fNetAudioCaptureBuffer->SetBuffer ( port_index, fSoftCaptureBuffer[port_index] ); 223 } 224 fSoftPlaybackBuffer = new sample_t*[fPlaybackChannels]; 225 for ( port_index = 0; port_index < fCaptureChannels; port_index++ ) 226 { 227 fSoftPlaybackBuffer[port_index] = new sample_t[fParams.fPeriodSize]; 228 fNetAudioPlaybackBuffer->SetBuffer ( port_index, fSoftPlaybackBuffer[port_index] ); 224 if (fCaptureChannels > 0) { 225 fSoftCaptureBuffer = new sample_t*[fCaptureChannels]; 226 for ( port_index = 0; port_index < fCaptureChannels; port_index++ ) 227 { 228 fSoftCaptureBuffer[port_index] = new sample_t[fParams.fPeriodSize]; 229 fNetAudioCaptureBuffer->SetBuffer ( port_index, fSoftCaptureBuffer[port_index] ); 230 } 231 } 232 233 if (fPlaybackChannels > 0) { 234 fSoftPlaybackBuffer = new sample_t*[fPlaybackChannels]; 235 for ( port_index = 0; port_index < fPlaybackChannels; port_index++ ) 236 { 237 fSoftPlaybackBuffer[port_index] = new sample_t[fParams.fPeriodSize]; 238 fNetAudioPlaybackBuffer->SetBuffer ( port_index, fSoftPlaybackBuffer[port_index] ); 239 } 229 240 } 230 241 jack2/branches/libjacknet/common/JackNetAPI.cpp
r3955 r3956 146 146 fRequest.buffer_size = request->buffer_size; 147 147 fRequest.sample_rate = request->sample_rate; 148 fAudioCaptureBuffer = NULL; 149 fAudioPlaybackBuffer = NULL; 150 fMidiCaptureBuffer = NULL; 151 fMidiPlaybackBuffer = NULL; 148 152 } 149 153 … … 284 288 285 289 // Set buffers 286 fAudioPlaybackBuffer = new float*[fParams.fSendAudioChannels]; 287 for (port_index = 0; port_index < fParams.fSendAudioChannels; port_index++) { 288 fAudioPlaybackBuffer[port_index] = new float[fParams.fPeriodSize]; 289 fNetAudioPlaybackBuffer->SetBuffer(port_index, fAudioPlaybackBuffer[port_index]); 290 } 291 292 fMidiPlaybackBuffer = new JackMidiBuffer*[fParams.fSendMidiChannels]; 293 for (port_index = 0; port_index < fParams.fSendMidiChannels; port_index++) { 294 fMidiPlaybackBuffer[port_index] = (JackMidiBuffer*)new float[fParams.fPeriodSize]; 295 fNetMidiPlaybackBuffer->SetBuffer(port_index, fMidiPlaybackBuffer[port_index]); 290 if (fParams.fSendAudioChannels > 0) { 291 fAudioCaptureBuffer = new float*[fParams.fSendAudioChannels]; 292 for (port_index = 0; port_index < fParams.fSendAudioChannels; port_index++) { 293 fAudioCaptureBuffer[port_index] = new float[fParams.fPeriodSize]; 294 fNetAudioCaptureBuffer->SetBuffer(port_index, fAudioCaptureBuffer[port_index]); 295 } 296 } 297 298 if (fParams.fSendMidiChannels > 0) { 299 fMidiCaptureBuffer = new JackMidiBuffer*[fParams.fSendMidiChannels]; 300 for (port_index = 0; port_index < fParams.fSendMidiChannels; port_index++) { 301 fMidiCaptureBuffer[port_index] = (JackMidiBuffer*)new float[fParams.fPeriodSize]; 302 fNetMidiCaptureBuffer->SetBuffer(port_index, fMidiCaptureBuffer[port_index]); 303 } 296 304 } 297 305 298 fAudioCaptureBuffer = new float*[fParams.fReturnAudioChannels]; 299 for (port_index = 0; port_index < fParams.fReturnAudioChannels; port_index++) { 300 fAudioCaptureBuffer[port_index] = new float[fParams.fPeriodSize]; 301 fNetAudioCaptureBuffer->SetBuffer(port_index, fAudioCaptureBuffer[port_index]); 302 } 303 304 fMidiCaptureBuffer = new JackMidiBuffer*[fParams.fReturnMidiChannels]; 305 for (port_index = 0; port_index < fParams.fReturnMidiChannels; port_index++) { 306 fMidiCaptureBuffer[port_index] = (JackMidiBuffer*)new float[fParams.fPeriodSize]; 307 fNetMidiCaptureBuffer->SetBuffer(port_index, fMidiCaptureBuffer[port_index]); 306 if (fParams.fReturnAudioChannels > 0) { 307 fAudioPlaybackBuffer = new float*[fParams.fReturnAudioChannels]; 308 for (port_index = 0; port_index < fParams.fReturnAudioChannels; port_index++) { 309 fAudioPlaybackBuffer[port_index] = new float[fParams.fPeriodSize]; 310 fNetAudioPlaybackBuffer->SetBuffer(port_index, fAudioPlaybackBuffer[port_index]); 311 } 312 } 313 314 if (fParams.fReturnMidiChannels > 0) { 315 fMidiPlaybackBuffer = new JackMidiBuffer*[fParams.fReturnMidiChannels]; 316 for (port_index = 0; port_index < fParams.fReturnMidiChannels; port_index++) { 317 fMidiPlaybackBuffer[port_index] = (JackMidiBuffer*)new float[fParams.fPeriodSize]; 318 fNetMidiPlaybackBuffer->SetBuffer(port_index, fMidiPlaybackBuffer[port_index]); 319 } 308 320 } 309 321 } … … 345 357 { 346 358 try { 347 assert((unsigned int)audio_input == fParams.fSendAudioChannels); 348 int port_index; 359 assert((unsigned int)audio_input == fParams.fReturnAudioChannels); 349 360 350 for ( port_index = 0; port_index < audio_input; port_index++) {361 for (int port_index = 0; port_index < audio_input; port_index++) { 351 362 fNetAudioPlaybackBuffer->SetBuffer(port_index, audio_input_buffer[port_index]); 352 363 } 353 364 354 for ( port_index = 0; port_index < midi_input; port_index++) {365 for (int port_index = 0; port_index < midi_input; port_index++) { 355 366 fNetMidiPlaybackBuffer->SetBuffer(port_index, ((JackMidiBuffer**)midi_input_buffer)[port_index]); 356 367 } … … 371 382 { 372 383 try { 373 assert((unsigned int)audio_output == fParams.fReturnAudioChannels); 374 int port_index; 384 assert((unsigned int)audio_output == fParams.fSendAudioChannels); 375 385 376 for ( port_index = 0; port_index < audio_output; port_index++) {386 for (int port_index = 0; port_index < audio_output; port_index++) { 377 387 fNetAudioCaptureBuffer->SetBuffer(port_index, audio_output_buffer[port_index]); 378 388 } 379 389 380 for ( port_index = 0; port_index < midi_output; port_index++) {390 for (int port_index = 0; port_index < midi_output; port_index++) { 381 391 fNetMidiCaptureBuffer->SetBuffer(port_index, ((JackMidiBuffer**)midi_output_buffer)[port_index]); 382 392 } jack2/branches/libjacknet/macosx/coreaudio/JackCoreAudioDriver.cpp
r3931 r3956 1984 1984 bool playback = false; 1985 1985 int chan_in = -1; // Default: if not explicitely set, then max possible will be used... 1986 int chan_out = -1; // Default: if ànot explicitely set, then max possible will be used...1986 int chan_out = -1; // Default: if not explicitely set, then max possible will be used... 1987 1987 bool monitor = false; 1988 1988 const char* capture_driver_uid = ""; jack2/branches/libjacknet/macosx/coreaudio/TiPhoneCoreAudioRenderer.cpp
r3932 r3956 81 81 { 82 82 TiPhoneCoreAudioRendererPtr renderer = (TiPhoneCoreAudioRendererPtr)inRefCon; 83 AudioUnitRender(renderer->fAUHAL, ioActionFlags, inTimeStamp, 1, inNumberFrames, ioData);83 AudioUnitRender(renderer->fAUHAL, ioActionFlags, inTimeStamp, 1, inNumberFrames, renderer->fCAInputData); 84 84 85 85 float coef = float(LONG_MAX); … … 88 88 for (int chan = 0; chan < renderer->fDevNumInChans; chan++) { 89 89 for (int frame = 0; frame < inNumberFrames; frame++) { 90 renderer->fInChannel[chan][frame] = float((( long*)ioData->mBuffers[chan].mData)[frame]) * inv_coef;90 renderer->fInChannel[chan][frame] = float(((int*)renderer->fCAInputData->mBuffers[chan].mData)[frame]) * inv_coef; 91 91 } 92 92 } … … 96 96 for (int chan = 0; chan < renderer->fDevNumOutChans; chan++) { 97 97 for (int frame = 0; frame < inNumberFrames; frame++) { 98 (( long*)ioData->mBuffers[chan].mData)[frame] = long(renderer->fOutChannel[chan][frame] * coef);98 ((int*)ioData->mBuffers[chan].mData)[frame] = int(renderer->fOutChannel[chan][frame] * coef); 99 99 } 100 100 } … … 327 327 } 328 328 } 329 329 330 330 if (fDevNumInChans > 0 && fDevNumOutChans == 0) { 331 331 AURenderCallbackStruct output; … … 349 349 } 350 350 } 351 352 // Prepare buffers 353 fCAInputData = (AudioBufferList*)malloc(sizeof(UInt32) + fDevNumInChans * sizeof(AudioBuffer)); 354 fCAInputData->mNumberBuffers = fDevNumInChans; 355 for (int i = 0; i < fDevNumInChans; i++) { 356 fCAInputData->mBuffers[i].mNumberChannels = 1; 357 fCAInputData->mBuffers[i].mDataByteSize = bufferSize * sizeof(int); 358 fCAInputData->mBuffers[i].mData = malloc(bufferSize * sizeof(int)); 359 } 360 361 /* 362 // Add listeners 363 err1 = AudioDeviceAddPropertyListener(fDeviceID, 0, true, kAudioDeviceProcessorOverload, DeviceNotificationCallback, this); 364 if (err != noErr) { 365 jack_error("Error calling AudioDeviceAddPropertyListener with kAudioDeviceProcessorOverload"); 366 printError(err); 367 return -1; 368 } 369 */ 351 370 352 371 return NO_ERR; jack2/branches/libjacknet/macosx/coreaudio/TiPhoneCoreAudioRenderer.h
r3952 r3956 42 42 int fDevNumInChans; 43 43 int fDevNumOutChans; 44 45 AudioBufferList* fCAInputData; 44 46 45 47 float* fInChannel[MAX_CHANNELS]; … … 58 60 59 61 TiPhoneCoreAudioRenderer(int input, int output) 60 :f DevNumInChans(input), fDevNumOutChans(output), fAudioCallback(NULL), fCallbackArg(NULL)62 :fAudioCallback(NULL), fCallbackArg(NULL), fDevNumInChans(input), fDevNumOutChans(output), fCAInputData(NULL) 61 63 { 62 64 memset(fInChannel, 0, sizeof(float*) * MAX_CHANNELS); … … 71 73 } 72 74 } 75 73 76 virtual ~TiPhoneCoreAudioRenderer() 74 77 { … … 79 82 for (int i = 0; i < fDevNumOutChans; i++) { 80 83 delete[] fOutChannel[i]; 84 } 85 86 if (fCAInputData) { 87 for (int i = 0; i < fDevNumInChans; i++) { 88 free(fCAInputData->mBuffers[i].mData); 89 } 90 free(fCAInputData); 81 91 } 82 92 } jack2/branches/libjacknet/macosx/iphone/iPhoneNet.xcodeproj/project.pbxproj
r3955 r3956 185 185 4BCF75F210BC2FD90082C526 /* iPhoneThruNet.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iPhoneThruNet.app; sourceTree = BUILT_PRODUCTS_DIR; }; 186 186 4BCF75F610BC30140082C526 /* audio_thru.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = audio_thru.mm; sourceTree = SOURCE_ROOT; }; 187 4BDFCCD7113DB30500D77992 /* Info copy.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info copy.plist"; sourceTree = "<group>"; };188 187 4BDFCD57113DB6B700D77992 /* NetJackSlave.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = NetJackSlave.app; sourceTree = BUILT_PRODUCTS_DIR; }; 189 4BDFCD59113DB6B700D77992 /* Info copy 2.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info copy 2.plist"; sourceTree = "<group>"; };190 188 4BF1360E0F4B0B4C00218A3F /* JackAudioAdapterInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackAudioAdapterInterface.cpp; path = ../../common/JackAudioAdapterInterface.cpp; sourceTree = SOURCE_ROOT; }; 191 189 4BF136120F4B0B5E00218A3F /* JackAudioAdapterInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackAudioAdapterInterface.h; path = ../../common/JackAudioAdapterInterface.h; sourceTree = SOURCE_ROOT; }; … … 355 353 8D1107310486CEB800E47090 /* Info.plist */, 356 354 4BC9C1D31135AA1800D22670 /* iPhoneNetMasterAppl-Info.plist */, 357 4BDFCCD7113DB30500D77992 /* Info copy.plist */,358 4BDFCD59113DB6B700D77992 /* Info copy 2.plist */,359 355 ); 360 356 name = Resources; jack2/branches/libjacknet/macosx/iphone/main_master.mm
r3955 r3956 18 18 jack_adapter_t* adapter; 19 19 20 float** audio_input_buffer ;21 float** audio_output_buffer ;20 float** audio_input_buffer = NULL; 21 float** audio_output_buffer = NULL; 22 22 23 int buffer_size = 1024; 24 int sample_rate = 44100; 23 int buffer_size = 512; 24 int sample_rate = 32000; 25 //int sample_rate = 32000; 25 26 26 27 jack_master_t request = { buffer_size, sample_rate, "master" }; 27 28 jack_slave_t result; 29 30 static void MixAudio(float** dst, float** src1, float** src2, int channels, int buffer_size) 31 { 32 for (int chan = 0; chan < channels; chan++) { 33 for (int frame = 0; frame < buffer_size; frame++) { 34 dst[chan][frame] = src1[chan][frame] + src2[chan][frame]; 35 } 36 } 37 } 28 38 29 39 static void MasterAudioCallback(int frames, float** inputs, float** outputs, void* arg) … … 31 41 int i; 32 42 43 /* 33 44 // Copy from iPod input to network buffers 34 45 for (i = 0; i < result.audio_input; i++) { 35 memcpy(audio_ output_buffer[i], inputs[i], buffer_size * sizeof(float));46 memcpy(audio_input_buffer[i], inputs[i], buffer_size * sizeof(float)); 36 47 } 48 */ 49 50 /* 51 // Copy from network out buffers to network in buffers (audio thru) 52 for (i = 0; i < result.audio_input; i++) { 53 memcpy(audio_input_buffer[i], audio_output_buffer[i], buffer_size * sizeof(float)); 54 } 55 */ 56 57 // Mix iPod input and network in buffers to network out buffers 58 MixAudio(audio_input_buffer, inputs, audio_output_buffer, result.audio_input, buffer_size); 37 59 38 60 // Send network buffers 39 if (jack_net_master_send(net, result.audio_ output, audio_output_buffer, 0, NULL) < 0) {61 if (jack_net_master_send(net, result.audio_input, audio_input_buffer, 0, NULL) < 0) { 40 62 printf("jack_net_master_send error..\n"); 41 63 } 42 64 43 65 // Recv network buffers 44 if (jack_net_master_recv(net, result.audio_ input, audio_input_buffer, 0, NULL) < 0) {66 if (jack_net_master_recv(net, result.audio_output, audio_output_buffer, 0, NULL) < 0) { 45 67 printf("jack_net_master_recv error..\n"); 46 68 } … … 48 70 // Copy from network buffers to iPod output 49 71 for (i = 0; i < result.audio_output; i++) { 50 memcpy(outputs[i], audio_ input_buffer[i], buffer_size * sizeof(float));72 memcpy(outputs[i], audio_output_buffer[i], buffer_size * sizeof(float)); 51 73 } 52 74 } … … 59 81 int wait_usec = (unsigned long)((((float)buffer_size) / ((float)sample_rate)) * 1000000.0f); 60 82 61 TiPhoneCoreAudioRenderer audio_device(NUM_INPUT, NUM_OUTPUT);62 63 83 if ((net = jack_net_master_open(DEFAULT_MULTICAST_IP, DEFAULT_PORT, "iPhone", &request, &result)) == 0) { 64 84 printf("jack_net_master_open error..\n"); … … 66 86 } 67 87 88 TiPhoneCoreAudioRenderer audio_device(result.audio_input, result.audio_output); 89 68 90 // Allocate buffers 69 audio_input_buffer = (float**)calloc(result.audio_input, sizeof(float*)); 70 for (i = 0; i < result.audio_input; i++) { 71 audio_input_buffer[i] = (float*)(calloc(buffer_size, sizeof(float))); 91 if (result.audio_input > 0) { 92 audio_input_buffer = (float**)calloc(result.audio_input, sizeof(float*)); 93 for (i = 0; i < result.audio_input; i++) { 94 audio_input_buffer[i] = (float*)(calloc(buffer_size, sizeof(float))); 95 } 72 96 } 73 97 74 audio_output_buffer = (float**)calloc(result.audio_output, sizeof(float*)); 75 for (i = 0; i < result.audio_output; i++) { 76 audio_output_buffer[i] = (float*)(calloc(buffer_size, sizeof(float))); 98 if (result.audio_output > 0) { 99 audio_output_buffer = (float**)calloc(result.audio_output, sizeof(float*)); 100 for (i = 0; i < result.audio_output; i++) { 101 audio_output_buffer[i] = (float*)(calloc(buffer_size, sizeof(float))); 102 } 77 103 } 78 104 jack2/branches/libjacknet/macosx/iphone/main_slave.mm
r3955 r3956 71 71 //if ((net = jack_net_slave_open("169.254.112.119", DEFAULT_PORT, "iPhone", &request, &result)) == 0) { 72 72 if ((net = jack_net_slave_open(DEFAULT_MULTICAST_IP, DEFAULT_PORT, "iPod", &request, &result)) == 0) { 73 printf("jack_net_ slave_open error..\n");73 printf("jack_net_master_open error..\n"); 74 74 return -1; 75 75 }
