Changeset 3956

Show
Ignore:
Timestamp:
03/12/10 03:08:33 (5 months ago)
Author:
sletz
Message:

Capture or playback only mode now working in master mode.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • jack2/branches/libjacknet/common/JackNetAdapter.cpp

    r3955 r3956  
    4141        fParams.fMtu = DEFAULT_MTU; 
    4242        fParams.fTransportSync = 0; 
    43         fParams.fSendAudioChannels = 2
    44         fParams.fReturnAudioChannels = 2
     43        int send_audio = -1
     44        int return_audio = -1
    4545        fParams.fSendMidiChannels = 0; 
    4646        fParams.fReturnMidiChannels = 0; 
     
    7272                    break; 
    7373                case 'C' : 
    74                     fParams.fSendAudioChannels = param->value.i; 
     74                    send_audio = param->value.i; 
    7575                    break; 
    7676                case 'P' : 
    77                     fParams.fReturnAudioChannels = param->value.i; 
     77                    return_audio = param->value.i; 
    7878                    break; 
    7979                case 'n' : 
     
    106106        fSocket.SetPort ( port ); 
    107107        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       
    109115        //set the audio adapter interface channel values 
    110116        SetInputs ( fParams.fSendAudioChannels ); 
     
    216222 
    217223        //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            } 
    229240        } 
    230241 
  • jack2/branches/libjacknet/common/JackNetAPI.cpp

    r3955 r3956  
    146146        fRequest.buffer_size = request->buffer_size; 
    147147        fRequest.sample_rate = request->sample_rate; 
     148        fAudioCaptureBuffer = NULL; 
     149        fAudioPlaybackBuffer = NULL; 
     150        fMidiCaptureBuffer = NULL; 
     151        fMidiPlaybackBuffer = NULL; 
    148152    } 
    149153                 
     
    284288      
    285289        // 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            } 
    296304        } 
    297305       
    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            } 
    308320        } 
    309321    } 
     
    345357     { 
    346358        try { 
    347             assert((unsigned int)audio_input == fParams.fSendAudioChannels); 
    348             int port_index; 
     359            assert((unsigned int)audio_input == fParams.fReturnAudioChannels); 
    349360              
    350             for (port_index = 0; port_index < audio_input; port_index++) { 
     361            for (int port_index = 0; port_index < audio_input; port_index++) { 
    351362                fNetAudioPlaybackBuffer->SetBuffer(port_index, audio_input_buffer[port_index]); 
    352363            } 
    353364              
    354             for (port_index = 0; port_index < midi_input; port_index++) { 
     365            for (int port_index = 0; port_index < midi_input; port_index++) { 
    355366                fNetMidiPlaybackBuffer->SetBuffer(port_index, ((JackMidiBuffer**)midi_input_buffer)[port_index]); 
    356367            } 
     
    371382     { 
    372383        try { 
    373              assert((unsigned int)audio_output == fParams.fReturnAudioChannels); 
    374              int port_index; 
     384             assert((unsigned int)audio_output == fParams.fSendAudioChannels); 
    375385            
    376              for (port_index = 0;  port_index < audio_output; port_index++) { 
     386             for (int port_index = 0;  port_index < audio_output; port_index++) { 
    377387                 fNetAudioCaptureBuffer->SetBuffer(port_index, audio_output_buffer[port_index]); 
    378388             } 
    379389              
    380              for (port_index = 0;  port_index < midi_output; port_index++) { 
     390             for (int port_index = 0;  port_index < midi_output; port_index++) { 
    381391                 fNetMidiCaptureBuffer->SetBuffer(port_index, ((JackMidiBuffer**)midi_output_buffer)[port_index]); 
    382392             } 
  • jack2/branches/libjacknet/macosx/coreaudio/JackCoreAudioDriver.cpp

    r3931 r3956  
    19841984        bool playback = false; 
    19851985        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... 
    19871987        bool monitor = false; 
    19881988        const char* capture_driver_uid = ""; 
  • jack2/branches/libjacknet/macosx/coreaudio/TiPhoneCoreAudioRenderer.cpp

    r3932 r3956  
    8181{ 
    8282    TiPhoneCoreAudioRendererPtr renderer = (TiPhoneCoreAudioRendererPtr)inRefCon; 
    83     AudioUnitRender(renderer->fAUHAL, ioActionFlags, inTimeStamp, 1, inNumberFrames, ioData); 
     83    AudioUnitRender(renderer->fAUHAL, ioActionFlags, inTimeStamp, 1, inNumberFrames, renderer->fCAInputData); 
    8484     
    8585    float coef = float(LONG_MAX); 
     
    8888    for (int chan = 0; chan < renderer->fDevNumInChans; chan++) { 
    8989        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; 
    9191        } 
    9292    } 
     
    9696    for (int chan = 0; chan < renderer->fDevNumOutChans; chan++) { 
    9797        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);  
    9999        } 
    100100    } 
     
    327327        } 
    328328    } 
    329  
     329     
    330330    if (fDevNumInChans > 0 && fDevNumOutChans == 0) { 
    331331        AURenderCallbackStruct output; 
     
    349349        } 
    350350    } 
     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    */ 
    351370 
    352371    return NO_ERR; 
  • jack2/branches/libjacknet/macosx/coreaudio/TiPhoneCoreAudioRenderer.h

    r3952 r3956  
    4242        int     fDevNumInChans; 
    4343        int     fDevNumOutChans; 
     44         
     45        AudioBufferList* fCAInputData; 
    4446      
    4547        float* fInChannel[MAX_CHANNELS]; 
     
    5860 
    5961        TiPhoneCoreAudioRenderer(int input, int output) 
    60             :fDevNumInChans(input), fDevNumOutChans(output), fAudioCallback(NULL), fCallbackArg(NULL) 
     62            :fAudioCallback(NULL), fCallbackArg(NULL), fDevNumInChans(input), fDevNumOutChans(output), fCAInputData(NULL) 
    6163        { 
    6264            memset(fInChannel, 0, sizeof(float*) * MAX_CHANNELS); 
     
    7173            } 
    7274        } 
     75         
    7376        virtual ~TiPhoneCoreAudioRenderer() 
    7477        { 
     
    7982            for (int i = 0; i < fDevNumOutChans; i++) { 
    8083                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); 
    8191            } 
    8292        } 
  • jack2/branches/libjacknet/macosx/iphone/iPhoneNet.xcodeproj/project.pbxproj

    r3955 r3956  
    185185                4BCF75F210BC2FD90082C526 /* iPhoneThruNet.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iPhoneThruNet.app; sourceTree = BUILT_PRODUCTS_DIR; }; 
    186186                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>"; }; 
    188187                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>"; }; 
    190188                4BF1360E0F4B0B4C00218A3F /* JackAudioAdapterInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackAudioAdapterInterface.cpp; path = ../../common/JackAudioAdapterInterface.cpp; sourceTree = SOURCE_ROOT; }; 
    191189                4BF136120F4B0B5E00218A3F /* JackAudioAdapterInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackAudioAdapterInterface.h; path = ../../common/JackAudioAdapterInterface.h; sourceTree = SOURCE_ROOT; }; 
     
    355353                                8D1107310486CEB800E47090 /* Info.plist */, 
    356354                                4BC9C1D31135AA1800D22670 /* iPhoneNetMasterAppl-Info.plist */, 
    357                                 4BDFCCD7113DB30500D77992 /* Info copy.plist */, 
    358                                 4BDFCD59113DB6B700D77992 /* Info copy 2.plist */, 
    359355                        ); 
    360356                        name = Resources; 
  • jack2/branches/libjacknet/macosx/iphone/main_master.mm

    r3955 r3956  
    1818jack_adapter_t* adapter; 
    1919 
    20 float** audio_input_buffer
    21 float** audio_output_buffer
     20float** audio_input_buffer = NULL
     21float** audio_output_buffer = NULL
    2222 
    23 int buffer_size = 1024; 
    24 int sample_rate = 44100; 
     23int buffer_size = 512; 
     24int sample_rate = 32000; 
     25//int sample_rate = 32000; 
    2526 
    2627jack_master_t request = { buffer_size, sample_rate, "master" }; 
    2728jack_slave_t result; 
     29 
     30static 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} 
    2838 
    2939static void MasterAudioCallback(int frames, float** inputs, float** outputs, void* arg) 
     
    3141    int i;  
    3242     
     43    /* 
    3344    // Copy from iPod input to network buffers 
    3445    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)); 
    3647    } 
     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); 
    3759     
    3860    // 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) { 
    4062        printf("jack_net_master_send error..\n"); 
    4163    } 
    4264     
    4365    // 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) { 
    4567        printf("jack_net_master_recv error..\n"); 
    4668    } 
     
    4870    // Copy from network buffers to iPod output 
    4971    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)); 
    5173    } 
    5274} 
     
    5981    int wait_usec = (unsigned long)((((float)buffer_size) / ((float)sample_rate)) * 1000000.0f); 
    6082     
    61     TiPhoneCoreAudioRenderer audio_device(NUM_INPUT, NUM_OUTPUT); 
    62   
    6383    if ((net = jack_net_master_open(DEFAULT_MULTICAST_IP, DEFAULT_PORT, "iPhone", &request, &result))  == 0) { 
    6484        printf("jack_net_master_open error..\n"); 
     
    6686    } 
    6787     
     88    TiPhoneCoreAudioRenderer audio_device(result.audio_input, result.audio_output); 
     89      
    6890    // 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        } 
    7296    } 
    7397     
    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        } 
    77103    } 
    78104     
  • jack2/branches/libjacknet/macosx/iphone/main_slave.mm

    r3955 r3956  
    7171    //if ((net = jack_net_slave_open("169.254.112.119", DEFAULT_PORT, "iPhone", &request, &result))  == 0) { 
    7272    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"); 
    7474        return -1; 
    7575    }