git-svn-id: http://subversion.jackaudio.org/jack/jack2/branches/libjacknet@3339 0c269be4-1314-0410-8aa9-9f06e86f4224tags/1.9.8
@@ -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> | |||
@@ -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 { | |||
@@ -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 | |||
@@ -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; | |||
} | |||
}; |
@@ -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 |
@@ -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> |
@@ -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> |
@@ -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; | |||
} |
@@ -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 */; | |||
} |
@@ -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 | |||
@@ -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 |
@@ -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 |
@@ -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; | |||
} |
@@ -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; | |||
} |