// // main.m // iPhoneNet // // Created by Stéphane LETZ on 16/02/09. // Copyright Grame 2009. All rights reserved. // #import #include #include "TiPhoneCoreAudioRenderer.h" #define NUM_INPUT 0 #define NUM_OUTPUT 2 jack_net_slave_t* net = NULL; jack_adapter_t* adapter = NULL; int buffer_size; int sample_rate; static int net_process(jack_nframes_t buffer_size, int audio_input, float** audio_input_buffer, int midi_input, void** midi_input_buffer, int audio_output, float** audio_output_buffer, int midi_output, void** midi_output_buffer, void* data) { jack_adapter_pull_and_push(adapter, audio_output_buffer, audio_input_buffer, buffer_size); // Process input, produce output if (audio_input == audio_output) { // Copy net input to net output for (int i = 0; i < audio_input; i++) { memcpy(audio_output_buffer[i], audio_input_buffer[i], buffer_size * sizeof(float)); } } return 0; } static void net_shutdown(void *arg) { if (adapter) jack_flush_adapter(adapter); } static void SlaveAudioCallback(int frames, float** inputs, float** outputs, void* arg) { jack_adapter_push_and_pull(adapter, inputs, outputs, frames); } //http://www.securityfocus.com/infocus/1884 #define WIFI_MTU 1500 int main(int argc, char *argv[]) { NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; jack_slave_t request = { NUM_OUTPUT, NUM_INPUT, 0, 0, WIFI_MTU, -1, JackCeltEncoder, 128, 2 }; jack_master_t result; //if ((net = jack_net_slave_open("169.254.112.119", DEFAULT_PORT, "iPhone", &request, &result)) == 0) { if ((net = jack_net_slave_open(DEFAULT_MULTICAST_IP, DEFAULT_PORT, "iPod", &request, &result)) == 0) { printf("jack_net_slave_open error...\n"); return -1; } if ((adapter = jack_create_adapter(NUM_INPUT, NUM_OUTPUT, result.buffer_size, result.sample_rate, result.buffer_size, result.sample_rate)) == 0) { return -1; } TiPhoneCoreAudioRenderer audio_device(NUM_INPUT, NUM_OUTPUT); jack_set_net_slave_process_callback(net, net_process, NULL); jack_set_net_slave_shutdown_callback(net, net_shutdown, NULL); if (jack_net_slave_activate(net) != 0) { printf("Cannot activate slave client\n"); return -1; } if (audio_device.Open(result.buffer_size, result.sample_rate) < 0) { return -1; } audio_device.SetAudioCallback(SlaveAudioCallback, NULL); if (audio_device.Start() < 0) { return -1; } int retVal = UIApplicationMain(argc, argv, nil, nil); [pool release]; audio_device.Stop(); audio_device.Close(); // Wait for application end jack_net_slave_deactivate(net); jack_net_slave_close(net); jack_destroy_adapter(adapter); return retVal; }