diff --git a/ChangeLog b/ChangeLog index 632cec72..eda5a137 100644 --- a/ChangeLog +++ b/ChangeLog @@ -26,6 +26,7 @@ Michael Voigt 2009-02-24 Stephane Letz * New libjacknet library with net.h and JackNetAPI.cpp files. New netmaster.c and netmaster.c examples. + * Add iPhone sources and project. 2009-02-23 Stephane Letz diff --git a/macosx/JackMachThread.cpp b/macosx/JackMachThread.cpp index 2d809c2a..7b45d239 100644 --- a/macosx/JackMachThread.cpp +++ b/macosx/JackMachThread.cpp @@ -18,6 +18,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + #include "JackMachThread.h" #include "JackError.h" @@ -30,9 +31,16 @@ int JackMachThread::SetThreadToPriority(pthread_t thread, UInt32 inPriority, Boo // REAL-TIME / TIME-CONSTRAINT THREAD thread_time_constraint_policy_data_t theTCPolicy; +#ifdef TARGET_OS_IPHONE + theTCPolicy.period = 0; + theTCPolicy.computation = 0; + theTCPolicy.constraint = 0; +#else theTCPolicy.period = AudioConvertNanosToHostTime(period); theTCPolicy.computation = AudioConvertNanosToHostTime(computation); theTCPolicy.constraint = AudioConvertNanosToHostTime(constraint); + +#endif theTCPolicy.preemptible = true; kern_return_t res = thread_policy_set(pthread_mach_thread_np(thread), THREAD_TIME_CONSTRAINT_POLICY, (thread_policy_t) & theTCPolicy, THREAD_TIME_CONSTRAINT_POLICY_COUNT); jack_log("JackMachThread::thread_policy_set res = %ld", res); @@ -130,9 +138,16 @@ int JackMachThread::GetParams(UInt64* period, UInt64* computation, UInt64* const &count, &get_default); if (res == KERN_SUCCESS) { + #ifdef TARGET_OS_IPHONE + *period = 0; + *computation = 0; + *constraint = 0; + #else *period = AudioConvertHostTimeToNanos(theTCPolicy.period); *computation = AudioConvertHostTimeToNanos(theTCPolicy.computation); *constraint = AudioConvertHostTimeToNanos(theTCPolicy.constraint); + #endif + jack_log("JackMachThread::GetParams period = %ld computation = %ld constraint = %ld", long(*period / 1000.0f), long(*computation / 1000.0f), long(*constraint / 1000.0f)); return 0; } else { diff --git a/macosx/JackMachThread.h b/macosx/JackMachThread.h index 4e17959b..4dc8d509 100644 --- a/macosx/JackMachThread.h +++ b/macosx/JackMachThread.h @@ -66,7 +66,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include +#ifndef TARGET_OS_IPHONE #include +#endif #define THREAD_SET_PRIORITY 0 #define THREAD_SCHEDULED_PRIORITY 1 diff --git a/macosx/coreaudio/JackAudioQueueAdapter.cpp b/macosx/coreaudio/JackAudioQueueAdapter.cpp new file mode 100644 index 00000000..3cb9e9af --- /dev/null +++ b/macosx/coreaudio/JackAudioQueueAdapter.cpp @@ -0,0 +1,162 @@ +/* +Copyright (C) 2009 Grame + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include "JackAudioQueueAdapter.h" +#include + +namespace Jack +{ + +// NOT YET WORKING.... + +static void Print4CharCode(char* msg, long c) +{ + UInt32 __4CC_number = (c); + char __4CC_string[5]; + *((SInt32*)__4CC_string) = EndianU32_NtoB(__4CC_number); + __4CC_string[4] = 0; + //printf("%s'%s'\n", (msg), __4CC_string); + snprintf(__4CC_string, 5, "%s'%s'\n", (msg), __4CC_string); +} + +void JackAudioQueueAdapter::CaptureCallback(void * inUserData, + AudioQueueRef inAQ, + AudioQueueBufferRef inBuffer, + const AudioTimeStamp * inStartTime, + UInt32 inNumPackets, + const AudioStreamPacketDescription *inPacketDesc) +{ + JackAudioQueueAdapter* adapter = (JackAudioQueueAdapter*)inUserData; + + printf("JackAudioQueueAdapter::CaptureCallback\n"); + + if (AudioQueueEnqueueBuffer(adapter->fCaptureQueue, inBuffer, 0, NULL) != noErr) { + printf("JackAudioQueueAdapter::CaptureCallback error\n"); + } + + // Use the adapter to communicate with audio callback + // jack_adapter_push_input(adapter, audio_output, audio_output_buffer); +} + +void JackAudioQueueAdapter::PlaybackCallback(void * inUserData, + AudioQueueRef inAQ, + AudioQueueBufferRef inCompleteAQBuffer) +{ + JackAudioQueueAdapter* adapter = (JackAudioQueueAdapter*)inUserData; + + printf("JackAudioQueueAdapter::PlaybackCallback\n"); + + if (AudioQueueEnqueueBuffer(adapter->fPlaybackQueue, inCompleteAQBuffer, 0, &adapter->fPlaybackPacketDescs) != noErr) { + printf("JackAudioQueueAdapter::PlaybackCallback error\n"); + } + + + // Use the adapter to communicate with audio callback + // jack_adapter_pull_output(adapter, audio_input, audio_input_buffer); +} + + +JackAudioQueueAdapter::JackAudioQueueAdapter(int inchan, int outchan, jack_nframes_t buffer_size, jack_nframes_t sample_rate, jack_adapter_t* adapter) + :fCaptureChannels(inchan), fPlaybackChannels(outchan), fBufferSize(buffer_size), fSampleRate(sample_rate), fAdapter(adapter) +{} + +JackAudioQueueAdapter::~JackAudioQueueAdapter() +{} + +int JackAudioQueueAdapter::Open() +{ + OSStatus err; + AudioStreamBasicDescription captureDataFormat; + + /* + captureDataFormat.mSampleRate = fSampleRate; + captureDataFormat.mFormatID = kAudioFormatLinearPCM; + //captureDataFormat.mFormatFlags = kAudioFormatFlagsNativeFloatPacked | kLinearPCMFormatFlagIsNonInterleaved; + captureDataFormat.mFormatFlags = kAudioFormatFlagsNativeFloatPacked; + captureDataFormat.mBytesPerPacket = sizeof(float); + captureDataFormat.mFramesPerPacket = 1; + captureDataFormat.mBytesPerFrame = sizeof(float); + captureDataFormat.mChannelsPerFrame = fCaptureChannels; + captureDataFormat.mBitsPerChannel = 32; + */ + + captureDataFormat.mSampleRate = fSampleRate; + captureDataFormat.mFormatID = kAudioFormatLinearPCM; + captureDataFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked; + captureDataFormat.mBytesPerPacket = 4; + captureDataFormat.mFramesPerPacket = 1; // this means each packet in the AQ has two samples, one for each channel -> 4 bytes/frame/packet + captureDataFormat.mBytesPerFrame = 4; + captureDataFormat.mChannelsPerFrame = 2; + captureDataFormat.mBitsPerChannel = 16; + + if ((err = AudioQueueNewInput(&captureDataFormat, CaptureCallback, this, CFRunLoopGetCurrent(), kCFRunLoopCommonModes, 0, &fCaptureQueue)) != noErr) { + Print4CharCode("error code : unknown", err); + return -1; + } + + //AudioQueueSetProperty(fCaptureQueue, kAudioQueueProperty_MagicCookie, cookie, size) + //AudioQueueSetProperty(fCaptureQueue, kAudioQueueProperty_ChannelLayout, acl, size + + AudioStreamBasicDescription playbackDataFormat; + + playbackDataFormat.mSampleRate = fSampleRate; + playbackDataFormat.mFormatID = kAudioFormatLinearPCM; + playbackDataFormat.mFormatFlags = kAudioFormatFlagsNativeFloatPacked | kLinearPCMFormatFlagIsNonInterleaved; + playbackDataFormat.mBytesPerPacket = sizeof(float); + playbackDataFormat.mFramesPerPacket = 1; + playbackDataFormat.mBytesPerFrame = sizeof(float); + playbackDataFormat.mChannelsPerFrame = fPlaybackChannels; + playbackDataFormat.mBitsPerChannel = 32; + + if ((err = AudioQueueNewOutput(&playbackDataFormat, PlaybackCallback, this, CFRunLoopGetCurrent(), kCFRunLoopCommonModes, 0, &fPlaybackQueue)) != noErr) { + Print4CharCode("error code : unknown", err); + return -1; + } + + + //AudioQueueSetProperty(fPlaybackQueue, kAudioQueueProperty_MagicCookie, cookie, size); + //AudioQueueSetProperty(fPlaybackQueue, kAudioQueueProperty_ChannelLayout, acl, size); + //AudioQueueSetParameter(fPlaybackQueue, kAudioQueueParam_Volume, volume + + //AudioQueueStart(fCaptureQueue, NULL); + AudioQueueStart(fPlaybackQueue, NULL); + + return 0; +} +int JackAudioQueueAdapter::Close() +{ + AudioQueueStop(fCaptureQueue, true); + AudioQueueStop(fPlaybackQueue, true); + + AudioQueueDispose(fCaptureQueue, true); + AudioQueueDispose(fPlaybackQueue, true); + return 0; +} + +int JackAudioQueueAdapter::SetSampleRate(jack_nframes_t sample_rate) +{ + return 0; +} + +int JackAudioQueueAdapter::SetBufferSize(jack_nframes_t buffer_size) +{ + return 0; +} + +}; diff --git a/macosx/coreaudio/JackAudioQueueAdapter.h b/macosx/coreaudio/JackAudioQueueAdapter.h new file mode 100644 index 00000000..1de09959 --- /dev/null +++ b/macosx/coreaudio/JackAudioQueueAdapter.h @@ -0,0 +1,85 @@ +/* +Copyright (C) 2009 Grame + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef __JackAudioQueueAdapter__ +#define __JackAudioQueueAdapter__ + +#include +#include + +#include + +namespace Jack +{ + +/*! +\brief Audio adapter using AudioQueue API. +*/ + +static const int kNumberBuffers = 3; + +class JackAudioQueueAdapter +{ + + private: + + AudioQueueRef fCaptureQueue; + AudioQueueBufferRef fCaptureQueueBuffers[kNumberBuffers]; + + AudioQueueRef fPlaybackQueue; + AudioQueueBufferRef fPlaybackQueueBuffers[kNumberBuffers]; + AudioStreamPacketDescription fPlaybackPacketDescs; + + + jack_nframes_t fBufferSize; + jack_nframes_t fSampleRate; + + int fCaptureChannels; + int fPlaybackChannels; + + jack_adapter_t* fAdapter; + + static void CaptureCallback(void * inUserData, + AudioQueueRef inAQ, + AudioQueueBufferRef inBuffer, + const AudioTimeStamp * inStartTime, + UInt32 inNumPackets, + const AudioStreamPacketDescription *inPacketDesc); + + + static void PlaybackCallback(void * inUserData, + AudioQueueRef inAQ, + AudioQueueBufferRef inCompleteAQBuffer); + + public: + + JackAudioQueueAdapter(int inchan, int outchan, jack_nframes_t buffer_size, jack_nframes_t sample_rate, jack_adapter_t* adapter); + ~JackAudioQueueAdapter(); + + virtual int Open(); + virtual int Close(); + + virtual int SetSampleRate(jack_nframes_t sample_rate); + virtual int SetBufferSize(jack_nframes_t buffer_size); + +}; + +} + +#endif diff --git a/macosx/iphone/Info.plist b/macosx/iphone/Info.plist new file mode 100644 index 00000000..fdf83406 --- /dev/null +++ b/macosx/iphone/Info.plist @@ -0,0 +1,30 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleDisplayName + ${PRODUCT_NAME} + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.yourcompany.${PRODUCT_NAME:identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + LSRequiresIPhoneOS + + NSMainNibFile + MainWindow + + diff --git a/macosx/iphone/MainWindow.xib b/macosx/iphone/MainWindow.xib new file mode 100644 index 00000000..175cb7bd --- /dev/null +++ b/macosx/iphone/MainWindow.xib @@ -0,0 +1,180 @@ + + + + 528 + 9E17 + 672 + 949.33 + 352.00 + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + IBFilesOwner + + + IBFirstResponder + + + + + 1316 + + {320, 480} + + + 1 + MSAxIDEAA + + NO + NO + + + + + + YES + + + delegate + + + + 4 + + + + window + + + + 5 + + + + + YES + + 0 + + YES + + + + + + 2 + + + YES + + + + + -1 + + + RmlsZSdzIE93bmVyA + + + 3 + + + + + -2 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 2.IBAttributePlaceholdersKey + 2.IBEditorWindowLastContentRect + 2.IBPluginDependency + 3.CustomClassName + 3.IBPluginDependency + + + YES + UIApplication + UIResponder + + YES + + YES + + + YES + + + {{438, 320}, {320, 480}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + iPhoneNetAppDelegate + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + YES + + YES + + + YES + + + + + YES + + YES + + + YES + + + + 9 + + + + YES + + iPhoneNetAppDelegate + NSObject + + window + UIWindow + + + IBProjectSource + Classes/iPhoneNetAppDelegate.h + + + + iPhoneNetAppDelegate + NSObject + + IBUserSource + + + + + + 0 + iPhoneNet.xcodeproj + 3 + + diff --git a/macosx/iphone/freeverb.mm b/macosx/iphone/freeverb.mm new file mode 100644 index 00000000..9b7832f7 --- /dev/null +++ b/macosx/iphone/freeverb.mm @@ -0,0 +1,730 @@ +//----------------------------------------------------- +// name: "freeverb" +// version: "1.0" +// author: "Grame" +// license: "BSD" +// copyright: "(c)GRAME 2006" +// +// Code generated with Faust 0.9.9.5b2 (http://faust.grame.fr) +//----------------------------------------------------- +/* link with */ + +/* link with */ +#include +/* link with */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +// On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero) +// flags to avoid costly denormals +#ifdef __SSE__ + #include + #ifdef __SSE2__ + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8040) + #else + #define AVOIDDENORMALS _mm_setcsr(_mm_getcsr() | 0x8000) + #endif +#else + #define AVOIDDENORMALS +#endif + +//#define BENCHMARKMODE + +struct Meta : map +{ + void declare (const char* key, const char* value) { (*this)[key]=value; } +}; + + +#define max(x,y) (((x)>(y)) ? (x) : (y)) +#define min(x,y) (((x)<(y)) ? (x) : (y)) + +inline int lsr (int x, int n) { return int(((unsigned int)x) >> n); } +inline int int2pow2 (int x) { int r=0; while ((1< fPrefix; + map fKeyParam; + + void addOption(const char* label, float* zone, float min, float max) + { + string fullname = fPrefix.top() + label; + fKeyParam.insert(make_pair(fullname, param(zone, min, max))); + } + + void openAnyBox(const char* label) + { + string prefix; + + if (label && label[0]) { + prefix = fPrefix.top() + "-" + label; + } else { + prefix = fPrefix.top(); + } + fPrefix.push(prefix); + } + +public: + + CMDUI(int argc, char *argv[]) : UI(), fArgc(argc), fArgv(argv) { fPrefix.push("--"); } + virtual ~CMDUI() {} + + virtual void addButton(const char* label, float* zone) {}; + virtual void addToggleButton(const char* label, float* zone) {}; + virtual void addCheckButton(const char* label, float* zone) {}; + + virtual void addVerticalSlider(const char* label, float* zone, float init, float min, float max, float step) + { + addOption(label,zone,min,max); + } + + virtual void addHorizontalSlider(const char* label, float* zone, float init, float min, float max, float step) + { + addOption(label,zone,min,max); + } + + virtual void addNumEntry(const char* label, float* zone, float init, float min, float max, float step) + { + addOption(label,zone,min,max); + } + + // -- passive widgets + + virtual void addNumDisplay(const char* label, float* zone, int precision) {} + virtual void addTextDisplay(const char* label, float* zone, char* names[], float min, float max) {} + virtual void addHorizontalBargraph(const char* label, float* zone, float min, float max) {} + virtual void addVerticalBargraph(const char* label, float* zone, float min, float max) {} + + virtual void openFrameBox(const char* label) { openAnyBox(label); } + virtual void openTabBox(const char* label) { openAnyBox(label); } + virtual void openHorizontalBox(const char* label) { openAnyBox(label); } + virtual void openVerticalBox(const char* label) { openAnyBox(label); } + + virtual void closeBox() { fPrefix.pop(); } + + virtual void show() {} + virtual void run() + { + char c; + printf("Type 'q' to quit\n"); + while ((c = getchar()) != 'q') { + sleep(1); + } + } + + void print() + { + map::iterator i; + cout << fArgc << "\n"; + cout << fArgv[0] << " option list : "; + for (i = fKeyParam.begin(); i != fKeyParam.end(); i++) { + cout << "[ " << i->first << " " << i->second.fMin << ".." << i->second.fMax <<" ] "; + } + } + + void process_command() + { + map::iterator p; + for (int i = 1; i < fArgc; i++) { + if (fArgv[i][0] == '-') { + p = fKeyParam.find(fArgv[i]); + if (p == fKeyParam.end()) { + cout << fArgv[0] << " : unrecognized option " << fArgv[i] << "\n"; + print(); + exit(1); + } + char* end; + *(p->second.fZone) = float(strtod(fArgv[i+1], &end)); + i++; + } + } + } + + void process_init() + { + map::iterator p; + for (int i = 1; i < fArgc; i++) { + if (fArgv[i][0] == '-') { + p = fKeyParam.find(fArgv[i]); + if (p == fKeyParam.end()) { + cout << fArgv[0] << " : unrecognized option " << fArgv[i] << "\n"; + exit(1); + } + char* end; + *(p->second.fZone) = float(strtod(fArgv[i+1], &end)); + i++; + } + } + } +}; + + +//---------------------------------------------------------------- +// Signal processor definition +//---------------------------------------------------------------- + +class dsp { + protected: + int fSamplingFreq; + public: + dsp() {} + virtual ~dsp() {} + + virtual int getNumInputs() = 0; + virtual int getNumOutputs() = 0; + virtual void buildUserInterface(UI* interface) = 0; + virtual void init(int samplingRate) = 0; + virtual void compute(int len, float** inputs, float** outputs) = 0; + virtual void conclude() {} +}; + + +//---------------------------------------------------------------------------- +// FAUST generated code +//---------------------------------------------------------------------------- + + +class mydsp : public dsp { + private: + float fslider0; + float fRec9[2]; + float fslider1; + int IOTA; + float fVec0[2048]; + float fRec8[2]; + float fRec11[2]; + float fVec1[2048]; + float fRec10[2]; + float fRec13[2]; + float fVec2[2048]; + float fRec12[2]; + float fRec15[2]; + float fVec3[2048]; + float fRec14[2]; + float fRec17[2]; + float fVec4[2048]; + float fRec16[2]; + float fRec19[2]; + float fVec5[2048]; + float fRec18[2]; + float fRec21[2]; + float fVec6[2048]; + float fRec20[2]; + float fRec23[2]; + float fVec7[2048]; + float fRec22[2]; + float fVec8[1024]; + float fRec6[2]; + float fVec9[512]; + float fRec4[2]; + float fVec10[512]; + float fRec2[2]; + float fVec11[256]; + float fRec0[2]; + float fslider2; + float fRec33[2]; + float fVec12[2048]; + float fRec32[2]; + float fRec35[2]; + float fVec13[2048]; + float fRec34[2]; + float fRec37[2]; + float fVec14[2048]; + float fRec36[2]; + float fRec39[2]; + float fVec15[2048]; + float fRec38[2]; + float fRec41[2]; + float fVec16[2048]; + float fRec40[2]; + float fRec43[2]; + float fVec17[2048]; + float fRec42[2]; + float fRec45[2]; + float fVec18[2048]; + float fRec44[2]; + float fRec47[2]; + float fVec19[2048]; + float fRec46[2]; + float fVec20[1024]; + float fRec30[2]; + float fVec21[512]; + float fRec28[2]; + float fVec22[512]; + float fRec26[2]; + float fVec23[256]; + float fRec24[2]; + public: + static void metadata(Meta* m) { + m->declare("name", "freeverb"); + m->declare("version", "1.0"); + m->declare("author", "Grame"); + m->declare("license", "BSD"); + m->declare("copyright", "(c)GRAME 2006"); + } + + virtual int getNumInputs() { return 2; } + virtual int getNumOutputs() { return 2; } + static void classInit(int samplingFreq) { + } + virtual void instanceInit(int samplingFreq) { + fSamplingFreq = samplingFreq; + fslider0 = 0.5f; + for (int i=0; i<2; i++) fRec9[i] = 0; + fslider1 = 0.8f; + IOTA = 0; + for (int i=0; i<2048; i++) fVec0[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2048; i++) fVec1[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2048; i++) fVec2[i] = 0; + for (int i=0; i<2; i++) fRec12[i] = 0; + for (int i=0; i<2; i++) fRec15[i] = 0; + for (int i=0; i<2048; i++) fVec3[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + for (int i=0; i<2; i++) fRec17[i] = 0; + for (int i=0; i<2048; i++) fVec4[i] = 0; + for (int i=0; i<2; i++) fRec16[i] = 0; + for (int i=0; i<2; i++) fRec19[i] = 0; + for (int i=0; i<2048; i++) fVec5[i] = 0; + for (int i=0; i<2; i++) fRec18[i] = 0; + for (int i=0; i<2; i++) fRec21[i] = 0; + for (int i=0; i<2048; i++) fVec6[i] = 0; + for (int i=0; i<2; i++) fRec20[i] = 0; + for (int i=0; i<2; i++) fRec23[i] = 0; + for (int i=0; i<2048; i++) fVec7[i] = 0; + for (int i=0; i<2; i++) fRec22[i] = 0; + for (int i=0; i<1024; i++) fVec8[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<512; i++) fVec9[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<512; i++) fVec10[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<256; i++) fVec11[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + fslider2 = 0.8f; + for (int i=0; i<2; i++) fRec33[i] = 0; + for (int i=0; i<2048; i++) fVec12[i] = 0; + for (int i=0; i<2; i++) fRec32[i] = 0; + for (int i=0; i<2; i++) fRec35[i] = 0; + for (int i=0; i<2048; i++) fVec13[i] = 0; + for (int i=0; i<2; i++) fRec34[i] = 0; + for (int i=0; i<2; i++) fRec37[i] = 0; + for (int i=0; i<2048; i++) fVec14[i] = 0; + for (int i=0; i<2; i++) fRec36[i] = 0; + for (int i=0; i<2; i++) fRec39[i] = 0; + for (int i=0; i<2048; i++) fVec15[i] = 0; + for (int i=0; i<2; i++) fRec38[i] = 0; + for (int i=0; i<2; i++) fRec41[i] = 0; + for (int i=0; i<2048; i++) fVec16[i] = 0; + for (int i=0; i<2; i++) fRec40[i] = 0; + for (int i=0; i<2; i++) fRec43[i] = 0; + for (int i=0; i<2048; i++) fVec17[i] = 0; + for (int i=0; i<2; i++) fRec42[i] = 0; + for (int i=0; i<2; i++) fRec45[i] = 0; + for (int i=0; i<2048; i++) fVec18[i] = 0; + for (int i=0; i<2; i++) fRec44[i] = 0; + for (int i=0; i<2; i++) fRec47[i] = 0; + for (int i=0; i<2048; i++) fVec19[i] = 0; + for (int i=0; i<2; i++) fRec46[i] = 0; + for (int i=0; i<1024; i++) fVec20[i] = 0; + for (int i=0; i<2; i++) fRec30[i] = 0; + for (int i=0; i<512; i++) fVec21[i] = 0; + for (int i=0; i<2; i++) fRec28[i] = 0; + for (int i=0; i<512; i++) fVec22[i] = 0; + for (int i=0; i<2; i++) fRec26[i] = 0; + for (int i=0; i<256; i++) fVec23[i] = 0; + for (int i=0; i<2; i++) fRec24[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + virtual void buildUserInterface(UI* interface) { + interface->openVerticalBox("Freeverb"); + interface->addHorizontalSlider("Damp", &fslider0, 0.5f, 0.0f, 1.0f, 2.500000e-02f); + interface->addHorizontalSlider("RoomSize", &fslider1, 0.8f, 0.0f, 1.0f, 2.500000e-02f); + interface->addHorizontalSlider("Wet", &fslider2, 0.8f, 0.0f, 1.0f, 2.500000e-02f); + interface->closeBox(); + } + virtual void compute (int count, float** input, float** output) { + float fSlow0 = (0.4f * fslider0); + float fSlow1 = (1 - fSlow0); + float fSlow2 = (0.7f + (0.28f * fslider1)); + float fSlow3 = fslider2; + float fSlow4 = (1 - fSlow3); + float* input0 = input[0]; + float* input1 = input[1]; + float* output0 = output[0]; + float* output1 = output[1]; + for (int i=0; ihi) hi = m; + tot += m; + } + cout << low << ' ' << tot/(mesure-KSKIP) << ' ' << hi << endl; + + } else { + + for (int i = KSKIP+1; ihi) hi = m; + tot += m; + } + cout << low << ' ' << tot/(KMESURE-KSKIP) << ' ' << hi << endl; + + } +} + +#else + +#define STARTMESURE +#define STOPMESURE + +#endif + +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) +{ + AVOIDDENORMALS; + STARTMESURE + DSP.compute(buffer_size, audio_input_buffer, audio_output_buffer); + STOPMESURE + return 0; +} + +/****************************************************************************** +******************************************************************************* + + MAIN PLAY THREAD + +******************************************************************************* +*******************************************************************************/ + +//------------------------------------------------------------------------- +// MAIN +//------------------------------------------------------------------------- + +int main(int argc, char *argv[]) { + + UI* interface = new CMDUI(argc, argv); + jack_net_slave_t* net; + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + + gNumInChans = DSP.getNumInputs(); + gNumOutChans = DSP.getNumOutputs(); + + jack_slave_t request = { gNumInChans, gNumOutChans, 0, 0, DEFAULT_MTU, -1, JackSlowMode }; + jack_master_t result; + + if ((net = jack_net_slave_open(DEFAULT_MULTICAST_IP, DEFAULT_PORT, "iPhone", &request, &result)) == 0) { + fprintf(stderr, "jack remote server not running ?\n"); + return 1; + } + + jack_set_net_slave_process_callback(net, net_process, NULL); + + // We want to restart (that is "wait for available master" again) + //jack_set_net_shutdown_callback(net, net_shutdown, 0); + + DSP.init(result.sample_rate); + DSP.buildUserInterface(interface); + + if (jack_net_slave_activate(net) != 0) { + fprintf(stderr, "cannot activate net"); + return 1; + } + + int retVal = UIApplicationMain(argc, argv, nil, nil); + [pool release]; + + // Wait for application end + jack_net_slave_deactivate(net); + jack_net_slave_close(net); + return retVal; +} diff --git a/macosx/iphone/iPhoneNet.xcodeproj/project.pbxproj b/macosx/iphone/iPhoneNet.xcodeproj/project.pbxproj new file mode 100755 index 00000000..d137323b --- /dev/null +++ b/macosx/iphone/iPhoneNet.xcodeproj/project.pbxproj @@ -0,0 +1,705 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 45; + objects = { + +/* Begin PBXBuildFile section */ + 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; + 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; + 288765FD0DF74451002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765FC0DF74451002DB57D /* CoreGraphics.framework */; }; + 28AD733F0D9D9553002E5188 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 28AD733E0D9D9553002E5188 /* MainWindow.xib */; }; + 4B0772210F54018C000DC657 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 28AD733E0D9D9553002E5188 /* MainWindow.xib */; }; + 4B0772240F54018C000DC657 /* JackMachThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A93550F49ACFC00D3626B /* JackMachThread.cpp */; }; + 4B0772250F54018C000DC657 /* JackMachTime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A93870F49B0E300D3626B /* JackMachTime.c */; }; + 4B0772260F54018C000DC657 /* JackNetAPI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A930D0F49AB2A00D3626B /* JackNetAPI.cpp */; }; + 4B0772270F54018C000DC657 /* JackNetInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A930F0F49AB2F00D3626B /* JackNetInterface.cpp */; }; + 4B0772280F54018C000DC657 /* JackNetTool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A93110F49AB3400D3626B /* JackNetTool.cpp */; }; + 4B0772290F54018C000DC657 /* JackNetUnixSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A93510F49ACF300D3626B /* JackNetUnixSocket.cpp */; }; + 4B07722A0F54018C000DC657 /* JackPosixThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A933B0F49AC4500D3626B /* JackPosixThread.cpp */; }; + 4B07722B0F54018C000DC657 /* JackAudioQueueAdapter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A947D0F49C42300D3626B /* JackAudioQueueAdapter.cpp */; }; + 4B07722C0F54018C000DC657 /* JackAudioAdapterInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF1360E0F4B0B4C00218A3F /* JackAudioAdapterInterface.cpp */; }; + 4B07722D0F54018C000DC657 /* JackResampler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF1364B0F4B0F7700218A3F /* JackResampler.cpp */; }; + 4B07722E0F54018C000DC657 /* ringbuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF136540F4B0F9F00218A3F /* ringbuffer.c */; }; + 4B0772310F54018C000DC657 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; + 4B0772320F54018C000DC657 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; + 4B0772330F54018C000DC657 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765FC0DF74451002DB57D /* CoreGraphics.framework */; }; + 4B0772340F54018C000DC657 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B1A95750F49CEAB00D3626B /* AudioToolbox.framework */; }; + 4B07724A0F54021B000DC657 /* main_slave.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B0772490F54021B000DC657 /* main_slave.mm */; }; + 4B0772510F54022D000DC657 /* main_master.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B0772500F54022D000DC657 /* main_master.mm */; }; + 4B0773860F541EE2000DC657 /* iPhoneNetAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B0773850F541EE2000DC657 /* iPhoneNetAppDelegate.m */; }; + 4B0773870F541EE2000DC657 /* iPhoneNetAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B0773850F541EE2000DC657 /* iPhoneNetAppDelegate.m */; }; + 4B0773880F541EE2000DC657 /* iPhoneNetAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B0773850F541EE2000DC657 /* iPhoneNetAppDelegate.m */; }; + 4B1A94140F49BE2C00D3626B /* iPhoneNet_Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = 32CA4F630368D1EE00C91783 /* iPhoneNet_Prefix.pch */; }; + 4B1A94150F49BE2F00D3626B /* JackMachThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A93550F49ACFC00D3626B /* JackMachThread.cpp */; }; + 4B1A94160F49BE3000D3626B /* JackMachThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B1A93540F49ACFC00D3626B /* JackMachThread.h */; }; + 4B1A94170F49BE3100D3626B /* JackMachTime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A93870F49B0E300D3626B /* JackMachTime.c */; }; + 4B1A94180F49BE3100D3626B /* JackNetAPI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A930D0F49AB2A00D3626B /* JackNetAPI.cpp */; }; + 4B1A94190F49BE3300D3626B /* JackNetInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A930F0F49AB2F00D3626B /* JackNetInterface.cpp */; }; + 4B1A941A0F49BE3300D3626B /* JackNetTool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A93110F49AB3400D3626B /* JackNetTool.cpp */; }; + 4B1A941B0F49BE3400D3626B /* JackNetUnixSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A93510F49ACF300D3626B /* JackNetUnixSocket.cpp */; }; + 4B1A941C0F49BE3500D3626B /* JackNetUnixSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B1A93520F49ACF300D3626B /* JackNetUnixSocket.h */; }; + 4B1A941D0F49BE3500D3626B /* JackPosixThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A933B0F49AC4500D3626B /* JackPosixThread.cpp */; }; + 4B1A941E0F49BE3600D3626B /* JackPosixThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B1A933C0F49AC4500D3626B /* JackPosixThread.h */; }; + 4B1A94540F49C03300D3626B /* JackMachThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A93550F49ACFC00D3626B /* JackMachThread.cpp */; }; + 4B1A94550F49C03300D3626B /* JackMachTime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A93870F49B0E300D3626B /* JackMachTime.c */; }; + 4B1A94560F49C03400D3626B /* JackNetAPI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A930D0F49AB2A00D3626B /* JackNetAPI.cpp */; }; + 4B1A94570F49C03500D3626B /* JackNetInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A930F0F49AB2F00D3626B /* JackNetInterface.cpp */; }; + 4B1A94580F49C03600D3626B /* JackNetTool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A93110F49AB3400D3626B /* JackNetTool.cpp */; }; + 4B1A94590F49C03600D3626B /* JackNetUnixSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A93510F49ACF300D3626B /* JackNetUnixSocket.cpp */; }; + 4B1A945A0F49C03600D3626B /* JackPosixThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A933B0F49AC4500D3626B /* JackPosixThread.cpp */; }; + 4B1A947F0F49C42300D3626B /* JackAudioQueueAdapter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A947D0F49C42300D3626B /* JackAudioQueueAdapter.cpp */; }; + 4B1A95760F49CEAB00D3626B /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B1A95750F49CEAB00D3626B /* AudioToolbox.framework */; }; + 4BBDC8FA0F5420C000465F9C /* freeverb.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4BBDC8F90F5420C000465F9C /* freeverb.mm */; }; + 4BF1360F0F4B0B4C00218A3F /* JackAudioAdapterInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF1360E0F4B0B4C00218A3F /* JackAudioAdapterInterface.cpp */; }; + 4BF136100F4B0B4C00218A3F /* JackAudioAdapterInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF1360E0F4B0B4C00218A3F /* JackAudioAdapterInterface.cpp */; }; + 4BF136130F4B0B5E00218A3F /* JackAudioAdapterInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF136120F4B0B5E00218A3F /* JackAudioAdapterInterface.h */; }; + 4BF1364D0F4B0F7700218A3F /* JackResampler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF1364B0F4B0F7700218A3F /* JackResampler.cpp */; }; + 4BF1364E0F4B0F7700218A3F /* JackResampler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF1364B0F4B0F7700218A3F /* JackResampler.cpp */; }; + 4BF1364F0F4B0F7700218A3F /* JackResampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF1364C0F4B0F7700218A3F /* JackResampler.h */; }; + 4BF136550F4B0F9F00218A3F /* ringbuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF136540F4B0F9F00218A3F /* ringbuffer.c */; }; + 4BF136560F4B0F9F00218A3F /* ringbuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF136540F4B0F9F00218A3F /* ringbuffer.c */; }; + 4BFF45600F4D5D9700106083 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 28AD733E0D9D9553002E5188 /* MainWindow.xib */; }; + 4BFF45630F4D5D9700106083 /* JackMachThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A93550F49ACFC00D3626B /* JackMachThread.cpp */; }; + 4BFF45640F4D5D9700106083 /* JackMachTime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A93870F49B0E300D3626B /* JackMachTime.c */; }; + 4BFF45650F4D5D9700106083 /* JackNetAPI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A930D0F49AB2A00D3626B /* JackNetAPI.cpp */; }; + 4BFF45660F4D5D9700106083 /* JackNetInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A930F0F49AB2F00D3626B /* JackNetInterface.cpp */; }; + 4BFF45670F4D5D9700106083 /* JackNetTool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A93110F49AB3400D3626B /* JackNetTool.cpp */; }; + 4BFF45680F4D5D9700106083 /* JackNetUnixSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A93510F49ACF300D3626B /* JackNetUnixSocket.cpp */; }; + 4BFF45690F4D5D9700106083 /* JackPosixThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A933B0F49AC4500D3626B /* JackPosixThread.cpp */; }; + 4BFF456A0F4D5D9700106083 /* JackAudioQueueAdapter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1A947D0F49C42300D3626B /* JackAudioQueueAdapter.cpp */; }; + 4BFF456B0F4D5D9700106083 /* JackAudioAdapterInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF1360E0F4B0B4C00218A3F /* JackAudioAdapterInterface.cpp */; }; + 4BFF456C0F4D5D9700106083 /* JackResampler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF1364B0F4B0F7700218A3F /* JackResampler.cpp */; }; + 4BFF456D0F4D5D9700106083 /* ringbuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF136540F4B0F9F00218A3F /* ringbuffer.c */; }; + 4BFF45700F4D5D9700106083 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; + 4BFF45710F4D5D9700106083 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; + 4BFF45720F4D5D9700106083 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765FC0DF74451002DB57D /* CoreGraphics.framework */; }; + 4BFF45730F4D5D9700106083 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B1A95750F49CEAB00D3626B /* AudioToolbox.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 1D6058910D05DD3D006BFB54 /* iPhoneNetSlave.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iPhoneNetSlave.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 288765FC0DF74451002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + 28AD733E0D9D9553002E5188 /* MainWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainWindow.xib; sourceTree = ""; }; + 32CA4F630368D1EE00C91783 /* iPhoneNet_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iPhoneNet_Prefix.pch; sourceTree = ""; }; + 4B0772380F54018C000DC657 /* iPhoneNetMaster.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iPhoneNetMaster.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 4B0772490F54021B000DC657 /* main_slave.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = main_slave.mm; sourceTree = SOURCE_ROOT; }; + 4B0772500F54022D000DC657 /* main_master.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = main_master.mm; sourceTree = SOURCE_ROOT; }; + 4B0773840F541EE2000DC657 /* iPhoneNetAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iPhoneNetAppDelegate.h; sourceTree = ""; }; + 4B0773850F541EE2000DC657 /* iPhoneNetAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iPhoneNetAppDelegate.m; sourceTree = ""; }; + 4B1A930D0F49AB2A00D3626B /* JackNetAPI.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackNetAPI.cpp; path = ../../common/JackNetAPI.cpp; sourceTree = SOURCE_ROOT; }; + 4B1A930F0F49AB2F00D3626B /* JackNetInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackNetInterface.cpp; path = ../../common/JackNetInterface.cpp; sourceTree = SOURCE_ROOT; }; + 4B1A93110F49AB3400D3626B /* JackNetTool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackNetTool.cpp; path = ../../common/JackNetTool.cpp; sourceTree = SOURCE_ROOT; }; + 4B1A933B0F49AC4500D3626B /* JackPosixThread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackPosixThread.cpp; path = ../../posix/JackPosixThread.cpp; sourceTree = SOURCE_ROOT; }; + 4B1A933C0F49AC4500D3626B /* JackPosixThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackPosixThread.h; path = ../../posix/JackPosixThread.h; sourceTree = SOURCE_ROOT; }; + 4B1A93510F49ACF300D3626B /* JackNetUnixSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackNetUnixSocket.cpp; path = ../../posix/JackNetUnixSocket.cpp; sourceTree = SOURCE_ROOT; }; + 4B1A93520F49ACF300D3626B /* JackNetUnixSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackNetUnixSocket.h; path = ../../posix/JackNetUnixSocket.h; sourceTree = SOURCE_ROOT; }; + 4B1A93540F49ACFC00D3626B /* JackMachThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackMachThread.h; path = ../JackMachThread.h; sourceTree = SOURCE_ROOT; }; + 4B1A93550F49ACFC00D3626B /* JackMachThread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackMachThread.cpp; path = ../JackMachThread.cpp; sourceTree = SOURCE_ROOT; }; + 4B1A93870F49B0E300D3626B /* JackMachTime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = JackMachTime.c; path = ../JackMachTime.c; sourceTree = SOURCE_ROOT; }; + 4B1A947D0F49C42300D3626B /* JackAudioQueueAdapter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackAudioQueueAdapter.cpp; path = ../coreaudio/JackAudioQueueAdapter.cpp; sourceTree = SOURCE_ROOT; }; + 4B1A947E0F49C42300D3626B /* JackAudioQueueAdapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackAudioQueueAdapter.h; path = ../coreaudio/JackAudioQueueAdapter.h; sourceTree = SOURCE_ROOT; }; + 4B1A95750F49CEAB00D3626B /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.1.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; }; + 4BBDC8F90F5420C000465F9C /* freeverb.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = freeverb.mm; sourceTree = SOURCE_ROOT; }; + 4BF1360E0F4B0B4C00218A3F /* JackAudioAdapterInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackAudioAdapterInterface.cpp; path = ../../common/JackAudioAdapterInterface.cpp; sourceTree = SOURCE_ROOT; }; + 4BF136120F4B0B5E00218A3F /* JackAudioAdapterInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackAudioAdapterInterface.h; path = ../../common/JackAudioAdapterInterface.h; sourceTree = SOURCE_ROOT; }; + 4BF1364B0F4B0F7700218A3F /* JackResampler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackResampler.cpp; path = ../../common/JackResampler.cpp; sourceTree = SOURCE_ROOT; }; + 4BF1364C0F4B0F7700218A3F /* JackResampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackResampler.h; path = ../../common/JackResampler.h; sourceTree = SOURCE_ROOT; }; + 4BF136540F4B0F9F00218A3F /* ringbuffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ringbuffer.c; path = ../../common/ringbuffer.c; sourceTree = SOURCE_ROOT; }; + 4BFF45120F4D59DB00106083 /* libjacknet.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjacknet.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 4BFF45770F4D5D9700106083 /* iPhoneFaustNet.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iPhoneFaustNet.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 1D60588F0D05DD3D006BFB54 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */, + 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */, + 288765FD0DF74451002DB57D /* CoreGraphics.framework in Frameworks */, + 4B1A95760F49CEAB00D3626B /* AudioToolbox.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4B0772300F54018C000DC657 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4B0772310F54018C000DC657 /* Foundation.framework in Frameworks */, + 4B0772320F54018C000DC657 /* UIKit.framework in Frameworks */, + 4B0772330F54018C000DC657 /* CoreGraphics.framework in Frameworks */, + 4B0772340F54018C000DC657 /* AudioToolbox.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4B1A940E0F49BDE000D3626B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4BFF456F0F4D5D9700106083 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4BFF45700F4D5D9700106083 /* Foundation.framework in Frameworks */, + 4BFF45710F4D5D9700106083 /* UIKit.framework in Frameworks */, + 4BFF45720F4D5D9700106083 /* CoreGraphics.framework in Frameworks */, + 4BFF45730F4D5D9700106083 /* AudioToolbox.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 19C28FACFE9D520D11CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 1D6058910D05DD3D006BFB54 /* iPhoneNetSlave.app */, + 4BFF45120F4D59DB00106083 /* libjacknet.a */, + 4BFF45770F4D5D9700106083 /* iPhoneFaustNet.app */, + 4B0772380F54018C000DC657 /* iPhoneNetMaster.app */, + ); + name = Products; + sourceTree = ""; + }; + 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { + isa = PBXGroup; + children = ( + 29B97315FDCFA39411CA2CEA /* Other Sources */, + 29B97317FDCFA39411CA2CEA /* Resources */, + 29B97323FDCFA39411CA2CEA /* Frameworks */, + 19C28FACFE9D520D11CA2CBB /* Products */, + ); + name = CustomTemplate; + sourceTree = ""; + }; + 29B97315FDCFA39411CA2CEA /* Other Sources */ = { + isa = PBXGroup; + children = ( + 4BBDC8F90F5420C000465F9C /* freeverb.mm */, + 4B0773840F541EE2000DC657 /* iPhoneNetAppDelegate.h */, + 4B0773850F541EE2000DC657 /* iPhoneNetAppDelegate.m */, + 4BF136540F4B0F9F00218A3F /* ringbuffer.c */, + 4BF1364B0F4B0F7700218A3F /* JackResampler.cpp */, + 4BF1364C0F4B0F7700218A3F /* JackResampler.h */, + 4BF1360E0F4B0B4C00218A3F /* JackAudioAdapterInterface.cpp */, + 4BF136120F4B0B5E00218A3F /* JackAudioAdapterInterface.h */, + 4B1A947D0F49C42300D3626B /* JackAudioQueueAdapter.cpp */, + 4B1A947E0F49C42300D3626B /* JackAudioQueueAdapter.h */, + 4B1A93870F49B0E300D3626B /* JackMachTime.c */, + 4B1A93540F49ACFC00D3626B /* JackMachThread.h */, + 4B1A93550F49ACFC00D3626B /* JackMachThread.cpp */, + 4B1A93510F49ACF300D3626B /* JackNetUnixSocket.cpp */, + 4B1A93520F49ACF300D3626B /* JackNetUnixSocket.h */, + 4B1A933B0F49AC4500D3626B /* JackPosixThread.cpp */, + 4B1A933C0F49AC4500D3626B /* JackPosixThread.h */, + 4B1A93110F49AB3400D3626B /* JackNetTool.cpp */, + 4B1A930F0F49AB2F00D3626B /* JackNetInterface.cpp */, + 4B1A930D0F49AB2A00D3626B /* JackNetAPI.cpp */, + 32CA4F630368D1EE00C91783 /* iPhoneNet_Prefix.pch */, + 4B0772490F54021B000DC657 /* main_slave.mm */, + 4B0772500F54022D000DC657 /* main_master.mm */, + ); + name = "Other Sources"; + sourceTree = ""; + }; + 29B97317FDCFA39411CA2CEA /* Resources */ = { + isa = PBXGroup; + children = ( + 28AD733E0D9D9553002E5188 /* MainWindow.xib */, + 8D1107310486CEB800E47090 /* Info.plist */, + ); + name = Resources; + sourceTree = ""; + }; + 29B97323FDCFA39411CA2CEA /* Frameworks */ = { + isa = PBXGroup; + children = ( + 4B1A95750F49CEAB00D3626B /* AudioToolbox.framework */, + 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */, + 1D30AB110D05D00D00671497 /* Foundation.framework */, + 288765FC0DF74451002DB57D /* CoreGraphics.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 4B1A940C0F49BDE000D3626B /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 4B1A94140F49BE2C00D3626B /* iPhoneNet_Prefix.pch in Headers */, + 4B1A94160F49BE3000D3626B /* JackMachThread.h in Headers */, + 4B1A941C0F49BE3500D3626B /* JackNetUnixSocket.h in Headers */, + 4B1A941E0F49BE3600D3626B /* JackPosixThread.h in Headers */, + 4BF136130F4B0B5E00218A3F /* JackAudioAdapterInterface.h in Headers */, + 4BF1364F0F4B0F7700218A3F /* JackResampler.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 1D6058900D05DD3D006BFB54 /* iPhoneNetSlave */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "iPhoneNetSlave" */; + buildPhases = ( + 1D60588D0D05DD3D006BFB54 /* Resources */, + 1D60588E0D05DD3D006BFB54 /* Sources */, + 1D60588F0D05DD3D006BFB54 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = iPhoneNetSlave; + productName = iPhoneNet; + productReference = 1D6058910D05DD3D006BFB54 /* iPhoneNetSlave.app */; + productType = "com.apple.product-type.application"; + }; + 4B07721F0F54018C000DC657 /* iPhoneNetMaster */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4B0772350F54018C000DC657 /* Build configuration list for PBXNativeTarget "iPhoneNetMaster" */; + buildPhases = ( + 4B0772200F54018C000DC657 /* Resources */, + 4B0772220F54018C000DC657 /* Sources */, + 4B0772300F54018C000DC657 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = iPhoneNetMaster; + productName = iPhoneNet; + productReference = 4B0772380F54018C000DC657 /* iPhoneNetMaster.app */; + productType = "com.apple.product-type.application"; + }; + 4B1A940F0F49BDE000D3626B /* jacknet */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4B1A94130F49BDFF00D3626B /* Build configuration list for PBXNativeTarget "jacknet" */; + buildPhases = ( + 4B1A940C0F49BDE000D3626B /* Headers */, + 4B1A940D0F49BDE000D3626B /* Sources */, + 4B1A940E0F49BDE000D3626B /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = jacknet; + productName = jacknet; + productReference = 4BFF45120F4D59DB00106083 /* libjacknet.a */; + productType = "com.apple.product-type.library.static"; + }; + 4BFF455E0F4D5D9700106083 /* iPhoneFaustNet */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4BFF45740F4D5D9700106083 /* Build configuration list for PBXNativeTarget "iPhoneFaustNet" */; + buildPhases = ( + 4BFF455F0F4D5D9700106083 /* Resources */, + 4BFF45610F4D5D9700106083 /* Sources */, + 4BFF456F0F4D5D9700106083 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = iPhoneFaustNet; + productName = iPhoneNet; + productReference = 4BFF45770F4D5D9700106083 /* iPhoneFaustNet.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 29B97313FDCFA39411CA2CEA /* Project object */ = { + isa = PBXProject; + buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "iPhoneNet" */; + compatibilityVersion = "Xcode 3.1"; + hasScannedForEncodings = 1; + mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 4B07721F0F54018C000DC657 /* iPhoneNetMaster */, + 1D6058900D05DD3D006BFB54 /* iPhoneNetSlave */, + 4BFF455E0F4D5D9700106083 /* iPhoneFaustNet */, + 4B1A940F0F49BDE000D3626B /* jacknet */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 1D60588D0D05DD3D006BFB54 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 28AD733F0D9D9553002E5188 /* MainWindow.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4B0772200F54018C000DC657 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4B0772210F54018C000DC657 /* MainWindow.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4BFF455F0F4D5D9700106083 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4BFF45600F4D5D9700106083 /* MainWindow.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 1D60588E0D05DD3D006BFB54 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4B1A94540F49C03300D3626B /* JackMachThread.cpp in Sources */, + 4B1A94550F49C03300D3626B /* JackMachTime.c in Sources */, + 4B1A94560F49C03400D3626B /* JackNetAPI.cpp in Sources */, + 4B1A94570F49C03500D3626B /* JackNetInterface.cpp in Sources */, + 4B1A94580F49C03600D3626B /* JackNetTool.cpp in Sources */, + 4B1A94590F49C03600D3626B /* JackNetUnixSocket.cpp in Sources */, + 4B1A945A0F49C03600D3626B /* JackPosixThread.cpp in Sources */, + 4B1A947F0F49C42300D3626B /* JackAudioQueueAdapter.cpp in Sources */, + 4BF1360F0F4B0B4C00218A3F /* JackAudioAdapterInterface.cpp in Sources */, + 4BF1364D0F4B0F7700218A3F /* JackResampler.cpp in Sources */, + 4BF136550F4B0F9F00218A3F /* ringbuffer.c in Sources */, + 4B07724A0F54021B000DC657 /* main_slave.mm in Sources */, + 4B0773870F541EE2000DC657 /* iPhoneNetAppDelegate.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4B0772220F54018C000DC657 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4B0772240F54018C000DC657 /* JackMachThread.cpp in Sources */, + 4B0772250F54018C000DC657 /* JackMachTime.c in Sources */, + 4B0772260F54018C000DC657 /* JackNetAPI.cpp in Sources */, + 4B0772270F54018C000DC657 /* JackNetInterface.cpp in Sources */, + 4B0772280F54018C000DC657 /* JackNetTool.cpp in Sources */, + 4B0772290F54018C000DC657 /* JackNetUnixSocket.cpp in Sources */, + 4B07722A0F54018C000DC657 /* JackPosixThread.cpp in Sources */, + 4B07722B0F54018C000DC657 /* JackAudioQueueAdapter.cpp in Sources */, + 4B07722C0F54018C000DC657 /* JackAudioAdapterInterface.cpp in Sources */, + 4B07722D0F54018C000DC657 /* JackResampler.cpp in Sources */, + 4B07722E0F54018C000DC657 /* ringbuffer.c in Sources */, + 4B0772510F54022D000DC657 /* main_master.mm in Sources */, + 4B0773860F541EE2000DC657 /* iPhoneNetAppDelegate.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4B1A940D0F49BDE000D3626B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4B1A94150F49BE2F00D3626B /* JackMachThread.cpp in Sources */, + 4B1A94170F49BE3100D3626B /* JackMachTime.c in Sources */, + 4B1A94180F49BE3100D3626B /* JackNetAPI.cpp in Sources */, + 4B1A94190F49BE3300D3626B /* JackNetInterface.cpp in Sources */, + 4B1A941A0F49BE3300D3626B /* JackNetTool.cpp in Sources */, + 4B1A941B0F49BE3400D3626B /* JackNetUnixSocket.cpp in Sources */, + 4B1A941D0F49BE3500D3626B /* JackPosixThread.cpp in Sources */, + 4BF136100F4B0B4C00218A3F /* JackAudioAdapterInterface.cpp in Sources */, + 4BF1364E0F4B0F7700218A3F /* JackResampler.cpp in Sources */, + 4BF136560F4B0F9F00218A3F /* ringbuffer.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4BFF45610F4D5D9700106083 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4BFF45630F4D5D9700106083 /* JackMachThread.cpp in Sources */, + 4BFF45640F4D5D9700106083 /* JackMachTime.c in Sources */, + 4BFF45650F4D5D9700106083 /* JackNetAPI.cpp in Sources */, + 4BFF45660F4D5D9700106083 /* JackNetInterface.cpp in Sources */, + 4BFF45670F4D5D9700106083 /* JackNetTool.cpp in Sources */, + 4BFF45680F4D5D9700106083 /* JackNetUnixSocket.cpp in Sources */, + 4BFF45690F4D5D9700106083 /* JackPosixThread.cpp in Sources */, + 4BFF456A0F4D5D9700106083 /* JackAudioQueueAdapter.cpp in Sources */, + 4BFF456B0F4D5D9700106083 /* JackAudioAdapterInterface.cpp in Sources */, + 4BFF456C0F4D5D9700106083 /* JackResampler.cpp in Sources */, + 4BFF456D0F4D5D9700106083 /* ringbuffer.c in Sources */, + 4B0773880F541EE2000DC657 /* iPhoneNetAppDelegate.m in Sources */, + 4BBDC8FA0F5420C000465F9C /* freeverb.mm in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1D6058940D05DD3E006BFB54 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = iPhoneNet_Prefix.pch; + HEADER_SEARCH_PATHS = ( + ../../macosx, + ../../posix, + ../../common/jack, + ../../common, + ); + INFOPLIST_FILE = Info.plist; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/build/Debug-iphonesimulator\"", + ); + OTHER_LDFLAGS = ""; + PRODUCT_NAME = iPhoneNetSlave; + SDKROOT = iphoneos2.2.1; + }; + name = Debug; + }; + 1D6058950D05DD3E006BFB54 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = iPhoneNet_Prefix.pch; + HEADER_SEARCH_PATHS = ( + ../../common/jack, + ../../common, + ../../posix, + ../../macosx, + ); + INFOPLIST_FILE = Info.plist; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/build/Debug-iphonesimulator\"", + ); + PRODUCT_NAME = iPhoneNetSlave; + }; + name = Release; + }; + 4B0772360F54018C000DC657 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = iPhoneNet_Prefix.pch; + HEADER_SEARCH_PATHS = ( + ../../macosx, + ../../posix, + ../../common/jack, + ../../common, + ); + INFOPLIST_FILE = Info.plist; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\\\"$(SRCROOT)/build/Debug-iphonesimulator\\\"", + ); + OTHER_LDFLAGS = ""; + PRODUCT_NAME = iPhoneNetMaster; + SDKROOT = iphoneos2.2.1; + }; + name = Debug; + }; + 4B0772370F54018C000DC657 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = iPhoneNet_Prefix.pch; + HEADER_SEARCH_PATHS = ( + ../../common/jack, + ../../common, + ../../posix, + ../../macosx, + ); + INFOPLIST_FILE = Info.plist; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\\\"$(SRCROOT)/build/Debug-iphonesimulator\\\"", + ); + PRODUCT_NAME = iPhoneNetMaster; + }; + name = Release; + }; + 4B1A94110F49BDE100D3626B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + HEADER_SEARCH_PATHS = ( + ../../common/jack, + ../../common, + ../../posix, + ../../macosx, + ); + MACH_O_TYPE = staticlib; + PREBINDING = NO; + PRODUCT_NAME = jacknet; + STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = static; + }; + name = Debug; + }; + 4B1A94120F49BDE100D3626B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + PREBINDING = NO; + PRODUCT_NAME = jacknet; + ZERO_LINK = NO; + }; + name = Release; + }; + 4BFF45750F4D5D9700106083 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = iPhoneNet_Prefix.pch; + HEADER_SEARCH_PATHS = ( + ../../macosx, + ../../posix, + ../../common/jack, + ../../common, + ); + INFOPLIST_FILE = Info.plist; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\\\"$(SRCROOT)/build/Debug-iphonesimulator\\\"", + ); + OTHER_LDFLAGS = ""; + PRODUCT_NAME = iPhoneFaustNet; + SDKROOT = iphoneos2.2.1; + }; + name = Debug; + }; + 4BFF45760F4D5D9700106083 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = iPhoneNet_Prefix.pch; + HEADER_SEARCH_PATHS = ( + ../../macosx, + ../../common/jack, + ../../common, + ../../posix, + ); + INFOPLIST_FILE = Info.plist; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\\\"$(SRCROOT)/build/Debug-iphonesimulator\\\"", + ); + ONLY_ACTIVE_ARCH = NO; + PRODUCT_NAME = iPhoneFaustNet; + }; + name = Release; + }; + C01FCF4F08A954540054247B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + GCC_C_LANGUAGE_STANDARD = c99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + SDKROOT = iphoneos2.2.1; + }; + name = Debug; + }; + C01FCF5008A954540054247B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + GCC_C_LANGUAGE_STANDARD = c99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = iphoneos2.2.1; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "iPhoneNetSlave" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1D6058940D05DD3E006BFB54 /* Debug */, + 1D6058950D05DD3E006BFB54 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4B0772350F54018C000DC657 /* Build configuration list for PBXNativeTarget "iPhoneNetMaster" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4B0772360F54018C000DC657 /* Debug */, + 4B0772370F54018C000DC657 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4B1A94130F49BDFF00D3626B /* Build configuration list for PBXNativeTarget "jacknet" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4B1A94110F49BDE100D3626B /* Debug */, + 4B1A94120F49BDE100D3626B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4BFF45740F4D5D9700106083 /* Build configuration list for PBXNativeTarget "iPhoneFaustNet" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4BFF45750F4D5D9700106083 /* Debug */, + 4BFF45760F4D5D9700106083 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C01FCF4E08A954540054247B /* Build configuration list for PBXProject "iPhoneNet" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C01FCF4F08A954540054247B /* Debug */, + C01FCF5008A954540054247B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; +} diff --git a/macosx/iphone/iPhoneNetAppDelegate.h b/macosx/iphone/iPhoneNetAppDelegate.h new file mode 100644 index 00000000..9fcda5bb --- /dev/null +++ b/macosx/iphone/iPhoneNetAppDelegate.h @@ -0,0 +1,23 @@ +// +// iPhoneNetAppDelegate.h +// iPhoneNet +// +// Created by Stéphane LETZ on 16/02/09. +// Copyright Grame 2009. All rights reserved. +// + +#import + +@interface iPhoneNetAppDelegate : NSObject { + // UIWindow *window; + + IBOutlet UIWindow *window; + IBOutlet UINavigationController *navigationController; +} + +//@property (nonatomic, retain) IBOutlet UIWindow *window; +@property (nonatomic, retain) UIWindow *window; +@property (nonatomic, retain) UINavigationController *navigationController; + +@end + diff --git a/macosx/iphone/iPhoneNetAppDelegate.m b/macosx/iphone/iPhoneNetAppDelegate.m new file mode 100644 index 00000000..e867730d --- /dev/null +++ b/macosx/iphone/iPhoneNetAppDelegate.m @@ -0,0 +1,32 @@ +// +// iPhoneNetAppDelegate.m +// iPhoneNet +// +// Created by Stéphane LETZ on 16/02/09. +// Copyright Grame 2009. All rights reserved. +// + +#import "iPhoneNetAppDelegate.h" + +@implementation iPhoneNetAppDelegate + +@synthesize window, navigationController; + + +- (void)applicationDidFinishLaunching:(UIApplication *)application { + + // Override point for customization after application launch + // add the navigation controller's view to the window + [window addSubview: navigationController.view]; + [window makeKeyAndVisible]; +} + + +- (void)dealloc { + [navigationController release]; + [window release]; + [super dealloc]; +} + + +@end diff --git a/macosx/iphone/iPhoneNet_Prefix.pch b/macosx/iphone/iPhoneNet_Prefix.pch new file mode 100644 index 00000000..8de611d5 --- /dev/null +++ b/macosx/iphone/iPhoneNet_Prefix.pch @@ -0,0 +1,8 @@ +// +// Prefix header for all source files of the 'iPhoneNet' target in the 'iPhoneNet' project +// + +#ifdef __OBJC__ + #import + #import +#endif diff --git a/macosx/iphone/main_master.mm b/macosx/iphone/main_master.mm new file mode 100644 index 00000000..00bc73a9 --- /dev/null +++ b/macosx/iphone/main_master.mm @@ -0,0 +1,105 @@ +// +// main.m +// iPhoneNet +// +// Created by Stéphane LETZ on 16/02/09. +// Copyright Grame 2009. All rights reserved. +// + +#import +#include + +#include "JackAudioQueueAdapter.h" + +#define NUM_INPUT 2 +#define NUM_OUTPUT 2 + +jack_net_master_t* net; +jack_adapter_t* adapter; + +Jack::JackAudioQueueAdapter* audio; + +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) +{ + // Process input, produce output + if (audio_input == audio_output) { + // Copy input to output + for (int i = 0; i < audio_input; i++) { + memcpy(audio_output_buffer[i], audio_input_buffer[i], buffer_size * sizeof(float)); + } + } + return 0; +} + +int main(int argc, char *argv[]) { + + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + + int i; + int buffer_size = 512; + int sample_rate = 44100; + jack_master_t request = { buffer_size, sample_rate, "master" }; + jack_slave_t result; + float** audio_input_buffer; + float** audio_output_buffer; + int wait_usec = (int) ((((float)buffer_size) * 1000000) / ((float)sample_rate)); + + if ((net = jack_net_master_open(DEFAULT_MULTICAST_IP, DEFAULT_PORT, "iPhone", &request, &result)) == 0) { + return -1; + } + + // Allocate buffers + audio_input_buffer = (float**)calloc(result.audio_input, sizeof(float*)); + for (i = 0; i < result.audio_input; i++) { + audio_input_buffer[i] = (float*)(calloc(buffer_size, sizeof(float))); + } + + audio_output_buffer = (float**)calloc(result.audio_output, sizeof(float*)); + for (i = 0; i < result.audio_output; i++) { + audio_output_buffer[i] = (float*)(calloc(buffer_size, sizeof(float))); + } + + // Quite brutal way, the application actually does not start completely, the netjack audio processing loop is used instead... + + // Run until interrupted + while (1) { + + // Copy input to output + for (i = 0; i < result.audio_input; i++) { + memcpy(audio_output_buffer[i], audio_input_buffer[i], buffer_size * sizeof(float)); + } + + jack_net_master_send(net, result.audio_output, audio_output_buffer, 0, NULL); + jack_net_master_recv(net, result.audio_input, audio_input_buffer, 0, NULL); + usleep(wait_usec); + }; + + // Wait for application end + jack_net_master_close(net); + + for (i = 0; i < result.audio_input; i++) { + free(audio_input_buffer[i]); + } + free(audio_input_buffer); + + for (i = 0; i < result.audio_output; i++) { + free(audio_output_buffer[i]); + } + free(audio_output_buffer); + + + //int retVal = UIApplicationMain(argc, argv, nil, nil); + [pool release]; + + //return retVal; + return 0; +} diff --git a/macosx/iphone/main_slave.mm b/macosx/iphone/main_slave.mm new file mode 100644 index 00000000..f899d823 --- /dev/null +++ b/macosx/iphone/main_slave.mm @@ -0,0 +1,66 @@ +// +// main.m +// iPhoneNet +// +// Created by Stéphane LETZ on 16/02/09. +// Copyright Grame 2009. All rights reserved. +// + +#import +#include + +#include "JackAudioQueueAdapter.h" + +#define NUM_INPUT 2 +#define NUM_OUTPUT 2 + +jack_net_slave_t* net; +jack_adapter_t* adapter; + +Jack::JackAudioQueueAdapter* audio; + +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) +{ + // Process input, produce output + if (audio_input == audio_output) { + // Copy input to output + for (int i = 0; i < audio_input; i++) { + memcpy(audio_output_buffer[i], audio_input_buffer[i], buffer_size * sizeof(float)); + } + } + return 0; +} + +int main(int argc, char *argv[]) { + + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + + jack_slave_t request = { NUM_INPUT, NUM_OUTPUT, 0, 0, DEFAULT_MTU, -1, JackSlowMode }; + jack_master_t result; + + if ((net = jack_net_slave_open(DEFAULT_MULTICAST_IP, DEFAULT_PORT, "iPhone", &request, &result)) == 0) { + return -1; + } + + jack_set_net_slave_process_callback(net, net_process, NULL); + if (jack_net_slave_activate(net) != 0) { + return -1; + } + + int retVal = UIApplicationMain(argc, argv, nil, nil); + [pool release]; + + // Wait for application end + jack_net_slave_deactivate(net); + jack_net_slave_close(net); + return retVal; +}