Browse Source

Add sources and project for iPhone.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/branches/libjacknet@3339 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.9.8
sletz 16 years ago
parent
commit
07d8c8f32b
14 changed files with 2144 additions and 0 deletions
  1. +1
    -0
      ChangeLog
  2. +15
    -0
      macosx/JackMachThread.cpp
  3. +2
    -0
      macosx/JackMachThread.h
  4. +162
    -0
      macosx/coreaudio/JackAudioQueueAdapter.cpp
  5. +85
    -0
      macosx/coreaudio/JackAudioQueueAdapter.h
  6. +30
    -0
      macosx/iphone/Info.plist
  7. +180
    -0
      macosx/iphone/MainWindow.xib
  8. +730
    -0
      macosx/iphone/freeverb.mm
  9. +705
    -0
      macosx/iphone/iPhoneNet.xcodeproj/project.pbxproj
  10. +23
    -0
      macosx/iphone/iPhoneNetAppDelegate.h
  11. +32
    -0
      macosx/iphone/iPhoneNetAppDelegate.m
  12. +8
    -0
      macosx/iphone/iPhoneNet_Prefix.pch
  13. +105
    -0
      macosx/iphone/main_master.mm
  14. +66
    -0
      macosx/iphone/main_slave.mm

+ 1
- 0
ChangeLog View File

@@ -26,6 +26,7 @@ Michael Voigt
2009-02-24 Stephane Letz <letz@grame.fr>
* 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 <letz@grame.fr>


+ 15
- 0
macosx/JackMachThread.cpp View File

@@ -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 {


+ 2
- 0
macosx/JackMachThread.h View File

@@ -66,7 +66,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

#include <mach/thread_policy.h>
#include <mach/thread_act.h>
#ifndef TARGET_OS_IPHONE
#include <CoreAudio/HostTime.h>
#endif

#define THREAD_SET_PRIORITY 0
#define THREAD_SCHEDULED_PRIORITY 1


+ 162
- 0
macosx/coreaudio/JackAudioQueueAdapter.cpp View File

@@ -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 <CoreServices/CoreServices.h>

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;
}
};

+ 85
- 0
macosx/coreaudio/JackAudioQueueAdapter.h View File

@@ -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 <AudioToolbox/AudioConverter.h>
#include <AudioToolbox/AudioQueue.h>

#include <jack/net.h>

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

+ 30
- 0
macosx/iphone/Info.plist View File

@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDisplayName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>com.yourcompany.${PRODUCT_NAME:identifier}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSMainNibFile</key>
<string>MainWindow</string>
</dict>
</plist>

+ 180
- 0
macosx/iphone/MainWindow.xib View File

@@ -0,0 +1,180 @@
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.02">
<data>
<int key="IBDocument.SystemTarget">528</int>
<string key="IBDocument.SystemVersion">9E17</string>
<string key="IBDocument.InterfaceBuilderVersion">672</string>
<string key="IBDocument.AppKitVersion">949.33</string>
<string key="IBDocument.HIToolboxVersion">352.00</string>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
<integer value="2"/>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</object>
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBProxyObject" id="841351856">
<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
</object>
<object class="IBProxyObject" id="427554174">
<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
</object>
<object class="IBUICustomObject" id="664661524"/>
<object class="IBUIWindow" id="380026005">
<reference key="NSNextResponder"/>
<int key="NSvFlags">1316</int>
<object class="NSPSMatrix" key="NSFrameMatrix"/>
<string key="NSFrameSize">{320, 480}</string>
<reference key="NSSuperview"/>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MSAxIDEAA</bytes>
</object>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
</object>
</object>
<object class="IBObjectContainer" key="IBDocument.Objects">
<object class="NSMutableArray" key="connectionRecords">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="841351856"/>
<reference key="destination" ref="664661524"/>
</object>
<int key="connectionID">4</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">window</string>
<reference key="source" ref="664661524"/>
<reference key="destination" ref="380026005"/>
</object>
<int key="connectionID">5</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBObjectRecord">
<int key="objectID">0</int>
<object class="NSArray" key="object" id="957960031">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<reference key="children" ref="1000"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">2</int>
<reference key="object" ref="380026005"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<reference key="parent" ref="957960031"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-1</int>
<reference key="object" ref="841351856"/>
<reference key="parent" ref="957960031"/>
<string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">3</int>
<reference key="object" ref="664661524"/>
<reference key="parent" ref="957960031"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-2</int>
<reference key="object" ref="427554174"/>
<reference key="parent" ref="957960031"/>
</object>
</object>
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>-1.CustomClassName</string>
<string>-2.CustomClassName</string>
<string>2.IBAttributePlaceholdersKey</string>
<string>2.IBEditorWindowLastContentRect</string>
<string>2.IBPluginDependency</string>
<string>3.CustomClassName</string>
<string>3.IBPluginDependency</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>UIApplication</string>
<string>UIResponder</string>
<object class="NSMutableDictionary">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<string>{{438, 320}, {320, 480}}</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>iPhoneNetAppDelegate</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</object>
</object>
<object class="NSMutableDictionary" key="unlocalizedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<nil key="activeLocalization"/>
<object class="NSMutableDictionary" key="localizations">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<nil key="sourceID"/>
<int key="maxID">9</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBPartialClassDescription">
<string key="className">iPhoneNetAppDelegate</string>
<string key="superclassName">NSObject</string>
<object class="NSMutableDictionary" key="outlets">
<string key="NS.key.0">window</string>
<string key="NS.object.0">UIWindow</string>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">Classes/iPhoneNetAppDelegate.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">iPhoneNetAppDelegate</string>
<string key="superclassName">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBUserSource</string>
<string key="minorKey"/>
</object>
</object>
</object>
</object>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.LastKnownRelativeProjectPath">iPhoneNet.xcodeproj</string>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
</data>
</archive>

+ 730
- 0
macosx/iphone/freeverb.mm View File

@@ -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 <math.h>
/* link with */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <limits.h>
#include <math.h>
#include <errno.h>
#include <time.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <fcntl.h>
#include <pwd.h>
#include <sys/types.h>
#include <assert.h>
#include <pthread.h>
#include <sys/wait.h>
#include <libgen.h>
#include <jack/net.h>

#include <list>
#include <vector>
#include <iostream>
#include <fstream>
#include <stack>
#include <list>
#include <map>

using namespace std;

// On Intel set FZ (Flush to Zero) and DAZ (Denormals Are Zero)
// flags to avoid costly denormals
#ifdef __SSE__
#include <xmmintrin.h>
#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<const char*, const char*>
{
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<<r)<x) r++; return r; }


/******************************************************************************
*******************************************************************************

VECTOR INTRINSICS

*******************************************************************************
*******************************************************************************/


/******************************************************************************
*******************************************************************************

USER INTERFACE

*******************************************************************************
*******************************************************************************/

class UI
{
bool fStopped;
public:
UI() : fStopped(false) {}
virtual ~UI() {}
// -- active widgets
virtual void addButton(const char* label, float* zone) = 0;
virtual void addToggleButton(const char* label, float* zone) = 0;
virtual void addCheckButton(const char* label, float* zone) = 0;
virtual void addVerticalSlider(const char* label, float* zone, float init, float min, float max, float step) = 0;
virtual void addHorizontalSlider(const char* label, float* zone, float init, float min, float max, float step) = 0;
virtual void addNumEntry(const char* label, float* zone, float init, float min, float max, float step) = 0;
// -- passive widgets
virtual void addNumDisplay(const char* label, float* zone, int precision) = 0;
virtual void addTextDisplay(const char* label, float* zone, char* names[], float min, float max) = 0;
virtual void addHorizontalBargraph(const char* label, float* zone, float min, float max) = 0;
virtual void addVerticalBargraph(const char* label, float* zone, float min, float max) = 0;
// -- frames and labels
virtual void openFrameBox(const char* label) = 0;
virtual void openTabBox(const char* label) = 0;
virtual void openHorizontalBox(const char* label) = 0;
virtual void openVerticalBox(const char* label) = 0;
virtual void closeBox() = 0;
virtual void show() = 0;
virtual void run() = 0;
void stop() { fStopped = true; }
bool stopped() { return fStopped; }

virtual void declare(float* zone, const char* key, const char* value) {}
};

struct param {
float* fZone; float fMin; float fMax;
param(float* z, float a, float b) : fZone(z), fMin(a), fMax(b) {}
};
class CMDUI : public UI
{
int fArgc;
char** fArgv;
stack<string> fPrefix;
map<string, param> 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<string, param>::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<string, param>::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<string, param>::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; i<count; i++) {
fRec9[0] = ((fSlow1 * fRec8[1]) + (fSlow0 * fRec9[1]));
float fTemp0 = input1[i];
float fTemp1 = input0[i];
float fTemp2 = (1.500000e-02f * (fTemp1 + fTemp0));
fVec0[IOTA&2047] = (fTemp2 + (fSlow2 * fRec9[0]));
fRec8[0] = fVec0[(IOTA-1617)&2047];
fRec11[0] = ((fSlow1 * fRec10[1]) + (fSlow0 * fRec11[1]));
fVec1[IOTA&2047] = (fTemp2 + (fSlow2 * fRec11[0]));
fRec10[0] = fVec1[(IOTA-1557)&2047];
fRec13[0] = ((fSlow1 * fRec12[1]) + (fSlow0 * fRec13[1]));
fVec2[IOTA&2047] = (fTemp2 + (fSlow2 * fRec13[0]));
fRec12[0] = fVec2[(IOTA-1491)&2047];
fRec15[0] = ((fSlow1 * fRec14[1]) + (fSlow0 * fRec15[1]));
fVec3[IOTA&2047] = (fTemp2 + (fSlow2 * fRec15[0]));
fRec14[0] = fVec3[(IOTA-1422)&2047];
fRec17[0] = ((fSlow1 * fRec16[1]) + (fSlow0 * fRec17[1]));
fVec4[IOTA&2047] = (fTemp2 + (fSlow2 * fRec17[0]));
fRec16[0] = fVec4[(IOTA-1356)&2047];
fRec19[0] = ((fSlow1 * fRec18[1]) + (fSlow0 * fRec19[1]));
fVec5[IOTA&2047] = (fTemp2 + (fSlow2 * fRec19[0]));
fRec18[0] = fVec5[(IOTA-1277)&2047];
fRec21[0] = ((fSlow1 * fRec20[1]) + (fSlow0 * fRec21[1]));
fVec6[IOTA&2047] = (fTemp2 + (fSlow2 * fRec21[0]));
fRec20[0] = fVec6[(IOTA-1188)&2047];
fRec23[0] = ((fSlow1 * fRec22[1]) + (fSlow0 * fRec23[1]));
fVec7[IOTA&2047] = (fTemp2 + (fSlow2 * fRec23[0]));
fRec22[0] = fVec7[(IOTA-1116)&2047];
float fTemp3 = (((((((fRec22[0] + fRec20[0]) + fRec18[0]) + fRec16[0]) + fRec14[0]) + fRec12[0]) + fRec10[0]) + fRec8[0]);
fVec8[IOTA&1023] = (fTemp3 + (0.5f * fRec6[1]));
fRec6[0] = fVec8[(IOTA-556)&1023];
float fRec7 = (0 - (fTemp3 - fRec6[1]));
fVec9[IOTA&511] = (fRec7 + (0.5f * fRec4[1]));
fRec4[0] = fVec9[(IOTA-441)&511];
float fRec5 = (fRec4[1] - fRec7);
fVec10[IOTA&511] = (fRec5 + (0.5f * fRec2[1]));
fRec2[0] = fVec10[(IOTA-341)&511];
float fRec3 = (fRec2[1] - fRec5);
fVec11[IOTA&255] = (fRec3 + (0.5f * fRec0[1]));
fRec0[0] = fVec11[(IOTA-225)&255];
float fRec1 = (fRec0[1] - fRec3);
output0[i] = ((fSlow4 * fTemp1) + (fSlow3 * fRec1));
fRec33[0] = ((fSlow1 * fRec32[1]) + (fSlow0 * fRec33[1]));
fVec12[IOTA&2047] = (fTemp2 + (fSlow2 * fRec33[0]));
fRec32[0] = fVec12[(IOTA-1640)&2047];
fRec35[0] = ((fSlow1 * fRec34[1]) + (fSlow0 * fRec35[1]));
fVec13[IOTA&2047] = (fTemp2 + (fSlow2 * fRec35[0]));
fRec34[0] = fVec13[(IOTA-1580)&2047];
fRec37[0] = ((fSlow1 * fRec36[1]) + (fSlow0 * fRec37[1]));
fVec14[IOTA&2047] = (fTemp2 + (fSlow2 * fRec37[0]));
fRec36[0] = fVec14[(IOTA-1514)&2047];
fRec39[0] = ((fSlow1 * fRec38[1]) + (fSlow0 * fRec39[1]));
fVec15[IOTA&2047] = (fTemp2 + (fSlow2 * fRec39[0]));
fRec38[0] = fVec15[(IOTA-1445)&2047];
fRec41[0] = ((fSlow1 * fRec40[1]) + (fSlow0 * fRec41[1]));
fVec16[IOTA&2047] = (fTemp2 + (fSlow2 * fRec41[0]));
fRec40[0] = fVec16[(IOTA-1379)&2047];
fRec43[0] = ((fSlow1 * fRec42[1]) + (fSlow0 * fRec43[1]));
fVec17[IOTA&2047] = (fTemp2 + (fSlow2 * fRec43[0]));
fRec42[0] = fVec17[(IOTA-1300)&2047];
fRec45[0] = ((fSlow1 * fRec44[1]) + (fSlow0 * fRec45[1]));
fVec18[IOTA&2047] = (fTemp2 + (fSlow2 * fRec45[0]));
fRec44[0] = fVec18[(IOTA-1211)&2047];
fRec47[0] = ((fSlow1 * fRec46[1]) + (fSlow0 * fRec47[1]));
fVec19[IOTA&2047] = (fTemp2 + (fSlow2 * fRec47[0]));
fRec46[0] = fVec19[(IOTA-1139)&2047];
float fTemp4 = (((((((fRec46[0] + fRec44[0]) + fRec42[0]) + fRec40[0]) + fRec38[0]) + fRec36[0]) + fRec34[0]) + fRec32[0]);
fVec20[IOTA&1023] = (fTemp4 + (0.5f * fRec30[1]));
fRec30[0] = fVec20[(IOTA-579)&1023];
float fRec31 = (0 - (fTemp4 - fRec30[1]));
fVec21[IOTA&511] = (fRec31 + (0.5f * fRec28[1]));
fRec28[0] = fVec21[(IOTA-464)&511];
float fRec29 = (fRec28[1] - fRec31);
fVec22[IOTA&511] = (fRec29 + (0.5f * fRec26[1]));
fRec26[0] = fVec22[(IOTA-364)&511];
float fRec27 = (fRec26[1] - fRec29);
fVec23[IOTA&255] = (fRec27 + (0.5f * fRec24[1]));
fRec24[0] = fVec23[(IOTA-248)&255];
float fRec25 = (fRec24[1] - fRec27);
output1[i] = ((fSlow4 * fTemp0) + (fSlow3 * fRec25));
// post processing
fRec24[1] = fRec24[0];
fRec26[1] = fRec26[0];
fRec28[1] = fRec28[0];
fRec30[1] = fRec30[0];
fRec46[1] = fRec46[0];
fRec47[1] = fRec47[0];
fRec44[1] = fRec44[0];
fRec45[1] = fRec45[0];
fRec42[1] = fRec42[0];
fRec43[1] = fRec43[0];
fRec40[1] = fRec40[0];
fRec41[1] = fRec41[0];
fRec38[1] = fRec38[0];
fRec39[1] = fRec39[0];
fRec36[1] = fRec36[0];
fRec37[1] = fRec37[0];
fRec34[1] = fRec34[0];
fRec35[1] = fRec35[0];
fRec32[1] = fRec32[0];
fRec33[1] = fRec33[0];
fRec0[1] = fRec0[0];
fRec2[1] = fRec2[0];
fRec4[1] = fRec4[0];
fRec6[1] = fRec6[0];
fRec22[1] = fRec22[0];
fRec23[1] = fRec23[0];
fRec20[1] = fRec20[0];
fRec21[1] = fRec21[0];
fRec18[1] = fRec18[0];
fRec19[1] = fRec19[0];
fRec16[1] = fRec16[0];
fRec17[1] = fRec17[0];
fRec14[1] = fRec14[0];
fRec15[1] = fRec15[0];
fRec12[1] = fRec12[0];
fRec13[1] = fRec13[0];
fRec10[1] = fRec10[0];
fRec11[1] = fRec11[0];
fRec8[1] = fRec8[0];
IOTA = IOTA+1;
fRec9[1] = fRec9[0];
}
}
};


mydsp DSP;


/******************************************************************************
*******************************************************************************

NETJACK AUDIO INTERFACE

*******************************************************************************
*******************************************************************************/

//----------------------------------------------------------------------------
// number of input and output channels
//----------------------------------------------------------------------------

int gNumInChans;
int gNumOutChans;

//----------------------------------------------------------------------------
// Jack Callbacks
//----------------------------------------------------------------------------

static void net_shutdown(void *)
{
exit(1);
}

#ifdef BENCHMARKMODE
// mesuring jack performances
static __inline__ unsigned long long int rdtsc(void)
{
unsigned long long int x;
__asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
return x;
}

#define KSKIP 10
#define KMESURE 1024
int mesure = 0;
unsigned long long int starts[KMESURE];
unsigned long long int stops [KMESURE];

#define STARTMESURE starts[mesure%KMESURE] = rdtsc();
#define STOPMESURE stops[mesure%KMESURE] = rdtsc(); mesure = mesure+1;

void printstats()
{
unsigned long long int low, hi, tot;
low = hi = tot = (stops[KSKIP] - starts[KSKIP]);

if (mesure < KMESURE) {
for (int i = KSKIP+1; i<mesure; i++) {
unsigned long long int m = stops[i] - starts[i];
if (m<low) low = m;
if (m>hi) hi = m;
tot += m;
}
cout << low << ' ' << tot/(mesure-KSKIP) << ' ' << hi << endl;

} else {
for (int i = KSKIP+1; i<KMESURE; i++) {
unsigned long long int m = stops[i] - starts[i];
if (m<low) low = m;
if (m>hi) 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;
}

+ 705
- 0
macosx/iphone/iPhoneNet.xcodeproj/project.pbxproj View File

@@ -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 = "<group>"; };
32CA4F630368D1EE00C91783 /* iPhoneNet_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iPhoneNet_Prefix.pch; sourceTree = "<group>"; };
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 = "<group>"; };
4B0773850F541EE2000DC657 /* iPhoneNetAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iPhoneNetAppDelegate.m; sourceTree = "<group>"; };
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 = "<absolute>"; };
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 = "<group>"; };
/* 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 = "<group>";
};
29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
isa = PBXGroup;
children = (
29B97315FDCFA39411CA2CEA /* Other Sources */,
29B97317FDCFA39411CA2CEA /* Resources */,
29B97323FDCFA39411CA2CEA /* Frameworks */,
19C28FACFE9D520D11CA2CBB /* Products */,
);
name = CustomTemplate;
sourceTree = "<group>";
};
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 = "<group>";
};
29B97317FDCFA39411CA2CEA /* Resources */ = {
isa = PBXGroup;
children = (
28AD733E0D9D9553002E5188 /* MainWindow.xib */,
8D1107310486CEB800E47090 /* Info.plist */,
);
name = Resources;
sourceTree = "<group>";
};
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
isa = PBXGroup;
children = (
4B1A95750F49CEAB00D3626B /* AudioToolbox.framework */,
1DF5F4DF0D08C38300B7A737 /* UIKit.framework */,
1D30AB110D05D00D00671497 /* Foundation.framework */,
288765FC0DF74451002DB57D /* CoreGraphics.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* 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 */;
}

+ 23
- 0
macosx/iphone/iPhoneNetAppDelegate.h View File

@@ -0,0 +1,23 @@
//
// iPhoneNetAppDelegate.h
// iPhoneNet
//
// Created by Stéphane LETZ on 16/02/09.
// Copyright Grame 2009. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface iPhoneNetAppDelegate : NSObject <UIApplicationDelegate> {
// 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


+ 32
- 0
macosx/iphone/iPhoneNetAppDelegate.m View File

@@ -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

+ 8
- 0
macosx/iphone/iPhoneNet_Prefix.pch View File

@@ -0,0 +1,8 @@
//
// Prefix header for all source files of the 'iPhoneNet' target in the 'iPhoneNet' project
//

#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#endif

+ 105
- 0
macosx/iphone/main_master.mm View File

@@ -0,0 +1,105 @@
//
// main.m
// iPhoneNet
//
// Created by Stéphane LETZ on 16/02/09.
// Copyright Grame 2009. All rights reserved.
//

#import <UIKit/UIKit.h>
#include <jack/net.h>

#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;
}

+ 66
- 0
macosx/iphone/main_slave.mm View File

@@ -0,0 +1,66 @@
//
// main.m
// iPhoneNet
//
// Created by Stéphane LETZ on 16/02/09.
// Copyright Grame 2009. All rights reserved.
//

#import <UIKit/UIKit.h>
#include <jack/net.h>

#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;
}

Loading…
Cancel
Save