[
  {
    "path": ".gitignore",
    "content": "#### `.gitignore`\n# Xcode noise\n*/build/*\n*.mode1v3\n*.pbxuser\n*.perspective\n*.perspectivev3\n*.mode1v3\n*.mode2v3\nproject.xcworkspace\nxcuserdata\n\n# osx noise\n.DS_Store\nprofile\n\n*.o\n*.pd_darwin\n*.dylib\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"libpd\"]\n\tpath = libpd\n\turl = git://github.com/libpd/libpd.git\n"
  },
  {
    "path": "DispatcherSample/DispatcherSample/DispatcherSample-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIconFile</key>\n\t<string></string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>NSMainNibFile</key>\n\t<string>MainWindow</string>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "DispatcherSample/DispatcherSample/DispatcherSample-Prefix.pch",
    "content": "//\n// Prefix header for all source files of the 'DispatcherSample' target in the 'DispatcherSample' project\n//\n\n#import <Availability.h>\n\n#ifndef __IPHONE_3_0\n#warning \"This project uses features only available in iPhone SDK 3.0 and later.\"\n#endif\n\n#ifdef __OBJC__\n    #import <UIKit/UIKit.h>\n    #import <Foundation/Foundation.h>\n#endif\n"
  },
  {
    "path": "DispatcherSample/DispatcherSample/DispatcherSampleAppDelegate.h",
    "content": "//\n//  DispatcherSampleAppDelegate.h\n//  DispatcherSample\n//\n//  Copyright (c) 2011 Peter Brinkmann (peter.brinkmann@gmail.com)\n//\n//  For information on usage and redistribution, and for a DISCLAIMER OF ALL\n//  WARRANTIES, see the file, \"LICENSE.txt,\" in this distribution.\n//\n\n#import <UIKit/UIKit.h>\n#import \"PdAudioController.h\"\n#import \"PdDispatcher.h\"\n\n@class DispatcherSampleViewController;\n\n@interface DispatcherSampleAppDelegate : NSObject <UIApplicationDelegate> {\n    UIWindow *window;\n    DispatcherSampleViewController *viewController;\n    \n\tPdAudioController *audioController;\n    PdDispatcher *dispatcher;\n}\n\n@property (nonatomic, retain) IBOutlet UIWindow *window;\n@property (nonatomic, retain) IBOutlet DispatcherSampleViewController *viewController;\n\n@end\n\n\n"
  },
  {
    "path": "DispatcherSample/DispatcherSample/DispatcherSampleAppDelegate.m",
    "content": "//\n//  DispatcherSampleAppDelegate.m\n//  DispatcherSample\n//\n//  Copyright (c) 2011 Peter Brinkmann (peter.brinkmann@gmail.com)\n//\n//  For information on usage and redistribution, and for a DISCLAIMER OF ALL\n//  WARRANTIES, see the file, \"LICENSE.txt,\" in this distribution.\n//\n\n#import \"DispatcherSampleAppDelegate.h\"\n#import \"DispatcherSampleViewController.h\"\n#import \"PdBase.h\"\n#import \"PdDispatcher.h\"\n\n@implementation DispatcherSampleAppDelegate\n\n@synthesize window;\n@synthesize viewController;\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n    window.rootViewController = self.viewController;\n    [window makeKeyAndVisible];\n    \n    dispatcher = [[PdDispatcher alloc] init];\n    [PdBase setDelegate:dispatcher];\n    \n\taudioController = [[PdAudioController alloc] init];\n    [audioController configureAmbientWithSampleRate:48000 numberChannels:2 mixingEnabled:YES];\n    [audioController print];\n    \n    [viewController pdSetup];\n    \n    audioController.active = YES;\n    return YES;\n}\n\n- (void)dealloc {\n    [PdBase setDelegate:nil];\n}\n\n- (void)applicationWillEnterForeground:(UIApplication *)application {\n}\n\n- (void)applicationDidBecomeActive:(UIApplication *)application {\n}\n\n- (void)applicationWillResignActive:(UIApplication *)application {\n}\n\n- (void)applicationDidEnterBackground:(UIApplication *)application {\n}\n\n- (void)applicationWillTerminate:(UIApplication *)application {\n}\n\n@end\n"
  },
  {
    "path": "DispatcherSample/DispatcherSample/DispatcherSampleViewController.h",
    "content": "//\n//  DispatcherSampleViewController.h\n//  DispatcherSample\n//\n//  Copyright (c) 2011 Peter Brinkmann (peter.brinkmann@gmail.com)\n//\n//  For information on usage and redistribution, and for a DISCLAIMER OF ALL\n//  WARRANTIES, see the file, \"LICENSE.txt,\" in this distribution.\n//\n\n#import <UIKit/UIKit.h>\n#import \"PdDispatcher.h\"\n\n@interface DispatcherSampleViewController : UIViewController {\n    UILabel *fooLabel;\n    UILabel *barLabel;\n}\n\n@property(nonatomic, retain) IBOutlet UILabel *fooLabel;\n@property(nonatomic, retain) IBOutlet UILabel *barLabel;\n\n-(void)pdSetup;\n\n@end\n"
  },
  {
    "path": "DispatcherSample/DispatcherSample/DispatcherSampleViewController.m",
    "content": "//\n//  DispatcherSampleViewController.m\n//  DispatcherSample\n//\n//  Copyright (c) 2011 Peter Brinkmann (peter.brinkmann@gmail.com)\n//\n//  For information on usage and redistribution, and for a DISCLAIMER OF ALL\n//  WARRANTIES, see the file, \"LICENSE.txt,\" in this distribution.\n//\n\n#import \"DispatcherSampleAppDelegate.h\"\n#import \"DispatcherSampleViewController.h\"\n#import \"SampleListener.h\"\n\n#define APP_DELEGATE ((DispatcherSampleAppDelegate *)[UIApplication sharedApplication].delegate)\n\n@implementation DispatcherSampleViewController\n\n@synthesize fooLabel;\n@synthesize barLabel;\n\n-(void)pdSetup {\n    PdDispatcher *dispatcher = (PdDispatcher *)[PdBase delegate];\n    SampleListener *listener = [[SampleListener alloc] initWithLabel:fooLabel];\n    [dispatcher addListener:listener forSource:@\"foo\"];\n    listener = [[SampleListener alloc] initWithLabel:barLabel];\n    [dispatcher addListener:listener forSource:@\"bar\"];\n    listener = [[SampleListener alloc] initWithLabel:nil];\n    [dispatcher addListener:listener forSource:@\"baz\"];\n    \n\t[PdBase openFile:@\"sample.pd\" path:[[NSBundle mainBundle] resourcePath]];\n}\n\n- (void)didReceiveMemoryWarning {\n    // Releases the view if it doesn't have a superview.\n    [super didReceiveMemoryWarning];\n    \n    // Release any cached data, images, etc that aren't in use.\n}\n\n#pragma mark - View lifecycle\n\n// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.\n- (void)viewDidLoad {\n    [super viewDidLoad];\n}\n\n- (void)viewDidUnload {\n    [super viewDidUnload];\n    // Release any retained subviews of the main view.\n    // e.g. self.myOutlet = nil;\n}\n\n- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {\n    // Return YES for supported orientations\n    return (interfaceOrientation == UIInterfaceOrientationPortrait);\n}\n\n@end\n"
  },
  {
    "path": "DispatcherSample/DispatcherSample/SampleListener.h",
    "content": "//\n//  SampleListener.h\n//  DispatcherSample\n//\n//  Copyright (c) 2011 Peter Brinkmann (peter.brinkmann@gmail.com)\n//\n//  For information on usage and redistribution, and for a DISCLAIMER OF ALL\n//  WARRANTIES, see the file, \"LICENSE.txt,\" in this distribution.\n//\n\n#import <Foundation/Foundation.h>\n#import \"PdBase.h\"\n#import \"PdDispatcher.h\"\n\n@interface SampleListener : NSObject<PdListener> {\n    UILabel *label;\n}\n\n- (id)initWithLabel:(UILabel *)label;\n@end\n"
  },
  {
    "path": "DispatcherSample/DispatcherSample/SampleListener.m",
    "content": "//\n//  SampleListener.m\n//  DispatcherSample\n//\n//  Copyright (c) 2011 Peter Brinkmann (peter.brinkmann@gmail.com)\n//\n//  For information on usage and redistribution, and for a DISCLAIMER OF ALL\n//  WARRANTIES, see the file, \"LICENSE.txt,\" in this distribution.\n//\n\n#import \"SampleListener.h\"\n\n\n@implementation SampleListener\n\n- (id)initWithLabel:(UILabel *)s {\n    self = [super init];\n    if (self) {\n        label = s;\n    }\n    return self;\n}\n\n- (void)receiveBangFromSource:(NSString *)source {\n    NSLog(@\"Listener %@: bang\\n\", label);\n}\n\n- (void)receiveFloat:(float)val fromSource:(NSString *)source {\n    NSLog(@\"Listener %@: float %f\\n\", label, val);\n    NSString *s = [NSString stringWithFormat:@\"%f\", val];\n    [label setText:s];\n}\n\n- (void)receiveSymbol:(NSString *)s fromSource:(NSString *)source {\n    NSLog(@\"Listener %@: symbol %@\\n\", label, s);\n}\n\n- (void)receiveList:(NSArray *)v fromSource:(NSString *)source {\n    NSLog(@\"Listener %@: list %@\\n\", label, v);\n}\n\n- (void)receiveMessage:(NSString *)message withArguments:(NSArray *)arguments fromSource:(NSString *)source {\n    NSLog(@\"Listener %@: message %@,  %@\\n\", label, message, arguments);\n}\n\n@end\n"
  },
  {
    "path": "DispatcherSample/DispatcherSample/en.lproj/DispatcherSampleViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"7.10\">\n\t<data>\n\t\t<int key=\"IBDocument.SystemTarget\">1056</int>\n\t\t<string key=\"IBDocument.SystemVersion\">10K549</string>\n\t\t<string key=\"IBDocument.InterfaceBuilderVersion\">1306</string>\n\t\t<string key=\"IBDocument.AppKitVersion\">1038.36</string>\n\t\t<string key=\"IBDocument.HIToolboxVersion\">461.00</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginVersions\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t<string key=\"NS.object.0\">301</string>\n\t\t</object>\n\t\t<object class=\"NSArray\" key=\"IBDocument.IntegratedClassDependencies\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<string>IBProxyObject</string>\n\t\t\t<string>IBUIView</string>\n\t\t\t<string>IBUILabel</string>\n\t\t</object>\n\t\t<object class=\"NSArray\" key=\"IBDocument.PluginDependencies\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t</object>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.Metadata\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\" id=\"0\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t</object>\n\t\t\t<reference key=\"dict.values\" ref=\"0\"/>\n\t\t</object>\n\t\t<object class=\"NSMutableArray\" key=\"IBDocument.RootObjects\" id=\"1000\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<object class=\"IBProxyObject\" id=\"372490531\">\n\t\t\t\t<string key=\"IBProxiedObjectIdentifier\">IBFilesOwner</string>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBProxyObject\" id=\"843779117\">\n\t\t\t\t<string key=\"IBProxiedObjectIdentifier\">IBFirstResponder</string>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBUIView\" id=\"774585933\">\n\t\t\t\t<reference key=\"NSNextResponder\"/>\n\t\t\t\t<int key=\"NSvFlags\">274</int>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"NSSubviews\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<object class=\"IBUILabel\" id=\"217145765\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"774585933\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{61, 69}, {168, 32}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"774585933\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"197754745\"/>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<bool key=\"IBUIClipsSubviews\">YES</bool>\n\t\t\t\t\t\t<int key=\"IBUIContentMode\">7</int>\n\t\t\t\t\t\t<bool key=\"IBUIUserInteractionEnabled\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<string key=\"IBUIText\">fooLabel</string>\n\t\t\t\t\t\t<object class=\"NSFont\" key=\"IBUIFont\" id=\"410543268\">\n\t\t\t\t\t\t\t<string key=\"NSName\">Helvetica</string>\n\t\t\t\t\t\t\t<double key=\"NSSize\">17</double>\n\t\t\t\t\t\t\t<int key=\"NSfFlags\">16</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUITextColor\" id=\"707737151\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MCAwIDAAA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<nil key=\"IBUIHighlightedColor\"/>\n\t\t\t\t\t\t<int key=\"IBUIBaselineAdjustment\">1</int>\n\t\t\t\t\t\t<float key=\"IBUIMinimumFontSize\">10</float>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUILabel\" id=\"197754745\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"774585933\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{61, 201}, {168, 32}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"774585933\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\"/>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<bool key=\"IBUIClipsSubviews\">YES</bool>\n\t\t\t\t\t\t<int key=\"IBUIContentMode\">7</int>\n\t\t\t\t\t\t<bool key=\"IBUIUserInteractionEnabled\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<string key=\"IBUIText\">barLabel</string>\n\t\t\t\t\t\t<reference key=\"IBUIFont\" ref=\"410543268\"/>\n\t\t\t\t\t\t<reference key=\"IBUITextColor\" ref=\"707737151\"/>\n\t\t\t\t\t\t<nil key=\"IBUIHighlightedColor\"/>\n\t\t\t\t\t\t<int key=\"IBUIBaselineAdjustment\">1</int>\n\t\t\t\t\t\t<float key=\"IBUIMinimumFontSize\">10</float>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<string key=\"NSFrame\">{{0, 20}, {320, 460}}</string>\n\t\t\t\t<reference key=\"NSSuperview\"/>\n\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"217145765\"/>\n\t\t\t\t<object class=\"NSColor\" key=\"IBUIBackgroundColor\">\n\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t<bytes key=\"NSWhite\">MC43NQA</bytes>\n\t\t\t\t\t<object class=\"NSColorSpace\" key=\"NSCustomColorSpace\">\n\t\t\t\t\t\t<int key=\"NSID\">2</int>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<bool key=\"IBUIClearsContextBeforeDrawing\">NO</bool>\n\t\t\t\t<object class=\"IBUISimulatedStatusBarMetrics\" key=\"IBUISimulatedStatusBarMetrics\"/>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t</object>\n\t\t<object class=\"IBObjectContainer\" key=\"IBDocument.Objects\">\n\t\t\t<object class=\"NSMutableArray\" key=\"connectionRecords\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">view</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"774585933\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">7</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">barLabel</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"197754745\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">10</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">fooLabel</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"217145765\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">11</int>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"IBMutableOrderedSet\" key=\"objectRecords\">\n\t\t\t\t<object class=\"NSArray\" key=\"orderedObjects\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">0</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"0\"/>\n\t\t\t\t\t\t<reference key=\"children\" ref=\"1000\"/>\n\t\t\t\t\t\t<nil key=\"parent\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t\t<string key=\"objectName\">File's Owner</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"843779117\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">6</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"774585933\"/>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<reference ref=\"217145765\"/>\n\t\t\t\t\t\t\t<reference ref=\"197754745\"/>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">8</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"217145765\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"774585933\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">9</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"197754745\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"774585933\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"flattenedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>-1.CustomClassName</string>\n\t\t\t\t\t<string>-2.CustomClassName</string>\n\t\t\t\t\t<string>6.IBEditorWindowLastContentRect</string>\n\t\t\t\t\t<string>6.IBPluginDependency</string>\n\t\t\t\t\t<string>8.IBPluginDependency</string>\n\t\t\t\t\t<string>9.IBPluginDependency</string>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>DispatcherSampleViewController</string>\n\t\t\t\t\t<string>UIResponder</string>\n\t\t\t\t\t<string>{{239, 654}, {320, 480}}</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"unlocalizedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"0\"/>\n\t\t\t\t<reference key=\"dict.values\" ref=\"0\"/>\n\t\t\t</object>\n\t\t\t<nil key=\"activeLocalization\"/>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"localizations\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"0\"/>\n\t\t\t\t<reference key=\"dict.values\" ref=\"0\"/>\n\t\t\t</object>\n\t\t\t<nil key=\"sourceID\"/>\n\t\t\t<int key=\"maxID\">11</int>\n\t\t</object>\n\t\t<object class=\"IBClassDescriber\" key=\"IBDocument.Classes\">\n\t\t\t<object class=\"NSMutableArray\" key=\"referencedPartialClassDescriptions\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">DispatcherSampleViewController</string>\n\t\t\t\t\t<string key=\"superclassName\">UIViewController</string>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"outlets\">\n\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<string>barLabel</string>\n\t\t\t\t\t\t\t<string>fooLabel</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<string>UILabel</string>\n\t\t\t\t\t\t\t<string>UILabel</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"toOneOutletInfosByName\">\n\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<string>barLabel</string>\n\t\t\t\t\t\t\t<string>fooLabel</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">barLabel</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">UILabel</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">fooLabel</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">UILabel</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">./Classes/DispatcherSampleViewController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t</object>\n\t\t<int key=\"IBDocument.localizationMode\">0</int>\n\t\t<string key=\"IBDocument.TargetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginDeclaredDevelopmentDependencies\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>\n\t\t\t<integer value=\"3100\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<bool key=\"IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion\">YES</bool>\n\t\t<int key=\"IBDocument.defaultPropertyAccessControl\">3</int>\n\t\t<string key=\"IBCocoaTouchPluginVersion\">301</string>\n\t</data>\n</archive>\n"
  },
  {
    "path": "DispatcherSample/DispatcherSample/en.lproj/InfoPlist.strings",
    "content": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "DispatcherSample/DispatcherSample/en.lproj/MainWindow.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"7.10\">\n\t<data>\n\t\t<int key=\"IBDocument.SystemTarget\">1024</int>\n\t\t<string key=\"IBDocument.SystemVersion\">10D571</string>\n\t\t<string key=\"IBDocument.InterfaceBuilderVersion\">786</string>\n\t\t<string key=\"IBDocument.AppKitVersion\">1038.29</string>\n\t\t<string key=\"IBDocument.HIToolboxVersion\">460.00</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginVersions\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t<string key=\"NS.object.0\">112</string>\n\t\t</object>\n\t\t<object class=\"NSMutableArray\" key=\"IBDocument.EditedObjectIDs\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<integer value=\"10\"/>\n\t\t</object>\n\t\t<object class=\"NSArray\" key=\"IBDocument.PluginDependencies\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t</object>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.Metadata\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\" id=\"0\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t</object>\n\t\t</object>\n\t\t<object class=\"NSMutableArray\" key=\"IBDocument.RootObjects\" id=\"1000\">\n\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t<object class=\"IBProxyObject\" id=\"841351856\">\n\t\t\t\t<string key=\"IBProxiedObjectIdentifier\">IBFilesOwner</string>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBProxyObject\" id=\"427554174\">\n\t\t\t\t<string key=\"IBProxiedObjectIdentifier\">IBFirstResponder</string>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBUICustomObject\" id=\"664661524\">\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBUIViewController\" id=\"943309135\">\n\t\t\t\t<string key=\"IBUINibName\">DispatcherSampleViewController</string>\n\t\t\t\t<object class=\"IBUISimulatedStatusBarMetrics\" key=\"IBUISimulatedStatusBarMetrics\"/>\n\t\t\t\t<object class=\"IBUISimulatedOrientationMetrics\" key=\"IBUISimulatedOrientationMetrics\">\n\t\t\t\t\t<int key=\"interfaceOrientation\">1</int>\n\t\t\t\t</object>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t<bool key=\"IBUIHorizontal\">NO</bool>\n\t\t\t</object>\n\t\t\t<object class=\"IBUIWindow\" id=\"117978783\">\n\t\t\t\t<nil key=\"NSNextResponder\"/>\n\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t<string key=\"NSFrameSize\">{320, 480}</string>\n\t\t\t\t<object class=\"NSColor\" key=\"IBUIBackgroundColor\">\n\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t<bytes key=\"NSRGB\">MSAxIDEAA</bytes>\n\t\t\t\t</object>\n\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t<bool key=\"IBUIClearsContextBeforeDrawing\">NO</bool>\n\t\t\t\t<object class=\"IBUISimulatedStatusBarMetrics\" key=\"IBUISimulatedStatusBarMetrics\"/>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t<bool key=\"IBUIResizesToFullScreen\">YES</bool>\n\t\t\t</object>\n\t\t</object>\n\t\t<object class=\"IBObjectContainer\" key=\"IBDocument.Objects\">\n\t\t\t<object class=\"NSMutableArray\" key=\"connectionRecords\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">delegate</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"841351856\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"664661524\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">4</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">viewController</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"664661524\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"943309135\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">11</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">window</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"664661524\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"117978783\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">14</int>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"IBMutableOrderedSet\" key=\"objectRecords\">\n\t\t\t\t<object class=\"NSArray\" key=\"orderedObjects\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">0</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"0\"/>\n\t\t\t\t\t\t<reference key=\"children\" ref=\"1000\"/>\n\t\t\t\t\t\t<nil key=\"parent\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"841351856\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t\t<string key=\"objectName\">File's Owner</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">3</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"664661524\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t\t<string key=\"objectName\">DispatcherSample App Delegate</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"427554174\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">10</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"943309135\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">12</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"117978783\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"flattenedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>-1.CustomClassName</string>\n\t\t\t\t\t<string>-2.CustomClassName</string>\n\t\t\t\t\t<string>10.CustomClassName</string>\n\t\t\t\t\t<string>10.IBEditorWindowLastContentRect</string>\n\t\t\t\t\t<string>10.IBPluginDependency</string>\n\t\t\t\t\t<string>12.IBEditorWindowLastContentRect</string>\n\t\t\t\t\t<string>12.IBPluginDependency</string>\n\t\t\t\t\t<string>3.CustomClassName</string>\n\t\t\t\t\t<string>3.IBPluginDependency</string>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t<string>UIApplication</string>\n\t\t\t\t\t<string>UIResponder</string>\n\t\t\t\t\t<string>DispatcherSampleViewController</string>\n\t\t\t\t\t<string>{{234, 376}, {320, 480}}</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>{{525, 346}, {320, 480}}</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t\t<string>DispatcherSampleAppDelegate</string>\n\t\t\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"unlocalizedProperties\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"0\"/>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<nil key=\"activeLocalization\"/>\n\t\t\t<object class=\"NSMutableDictionary\" key=\"localizations\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<reference key=\"dict.sortedKeys\" ref=\"0\"/>\n\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<nil key=\"sourceID\"/>\n\t\t\t<int key=\"maxID\">15</int>\n\t\t</object>\n\t\t<object class=\"IBClassDescriber\" key=\"IBDocument.Classes\">\n\t\t\t<object class=\"NSMutableArray\" key=\"referencedPartialClassDescriptions\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">UIWindow</string>\n\t\t\t\t\t<string key=\"superclassName\">UIView</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBUserSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">DispatcherSampleAppDelegate</string>\n\t\t\t\t\t<string key=\"superclassName\">NSObject</string>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"outlets\">\n\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<string>viewController</string>\n\t\t\t\t\t\t\t<string>window</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<string>DispatcherSampleViewController</string>\n\t\t\t\t\t\t\t<string>UIWindow</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"toOneOutletInfosByName\">\n\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t<object class=\"NSArray\" key=\"dict.sortedKeys\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<string>viewController</string>\n\t\t\t\t\t\t\t<string>window</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSMutableArray\" key=\"dict.values\">\n\t\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">viewController</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">DispatcherSampleViewController</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\">\n\t\t\t\t\t\t\t\t<string key=\"name\">window</string>\n\t\t\t\t\t\t\t\t<string key=\"candidateClassName\">UIWindow</string>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">DispatcherSampleAppDelegate.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">DispatcherSampleAppDelegate</string>\n\t\t\t\t\t<string key=\"superclassName\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBUserSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">DispatcherSampleViewController</string>\n\t\t\t\t\t<string key=\"superclassName\">UIViewController</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">DispatcherSampleViewController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t\t<object class=\"NSMutableArray\" key=\"referencedPartialClassDescriptionsV3.2+\">\n\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSError.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSFileManager.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSKeyValueCoding.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSKeyValueObserving.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSKeyedArchiver.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSObject.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSRunLoop.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSThread.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSURL.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">Foundation.framework/Headers/NSURLConnection.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">UIKit.framework/Headers/UIAccessibility.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">UIKit.framework/Headers/UINibLoading.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\" id=\"356479594\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">UIKit.framework/Headers/UIResponder.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">UIApplication</string>\n\t\t\t\t\t<string key=\"superclassName\">UIResponder</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">UIKit.framework/Headers/UIApplication.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">UIResponder</string>\n\t\t\t\t\t<string key=\"superclassName\">NSObject</string>\n\t\t\t\t\t<reference key=\"sourceIdentifier\" ref=\"356479594\"/>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">UISearchBar</string>\n\t\t\t\t\t<string key=\"superclassName\">UIView</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">UIKit.framework/Headers/UISearchBar.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">UISearchDisplayController</string>\n\t\t\t\t\t<string key=\"superclassName\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">UIKit.framework/Headers/UISearchDisplayController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">UIView</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">UIKit.framework/Headers/UITextField.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">UIView</string>\n\t\t\t\t\t<string key=\"superclassName\">UIResponder</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">UIKit.framework/Headers/UIView.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">UIViewController</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">UIKit.framework/Headers/UINavigationController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">UIViewController</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">UIKit.framework/Headers/UIPopoverController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">UIViewController</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">UIKit.framework/Headers/UISplitViewController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">UIViewController</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">UIKit.framework/Headers/UITabBarController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">UIViewController</string>\n\t\t\t\t\t<string key=\"superclassName\">UIResponder</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">UIKit.framework/Headers/UIViewController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">UIWindow</string>\n\t\t\t\t\t<string key=\"superclassName\">UIView</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBFrameworkSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">UIKit.framework/Headers/UIWindow.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</object>\n\t\t</object>\n\t\t<int key=\"IBDocument.localizationMode\">0</int>\n\t\t<string key=\"IBDocument.TargetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginDeclaredDependencyDefaults\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>\n\t\t\t<integer value=\"1024\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginDeclaredDevelopmentDependencies\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>\n\t\t\t<integer value=\"3100\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<bool key=\"IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion\">YES</bool>\n\t\t<string key=\"IBDocument.LastKnownRelativeProjectPath\">DispatcherSample.xcodeproj</string>\n\t\t<int key=\"IBDocument.defaultPropertyAccessControl\">3</int>\n\t\t<string key=\"IBCocoaTouchPluginVersion\">112</string>\n\t</data>\n</archive>\n"
  },
  {
    "path": "DispatcherSample/DispatcherSample/main.m",
    "content": "//\n//  main.m\n//  DispatcherSample\n//\n//  Created by Peter Brinkmann on 8/28/11.\n//  Updated by Dan Wilcox 2018.\n//\n\n#import <UIKit/UIKit.h>\n#import \"DispatcherSampleAppDelegate.h\"\n\nint main(int argc, char *argv[]) {\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, NSStringFromClass(DispatcherSampleAppDelegate.class));\n    }\n}\n"
  },
  {
    "path": "DispatcherSample/DispatcherSample.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t5811EFC21482EB29006867D5 /* libpd-ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5811EFBF1482EA65006867D5 /* libpd-ios.a */; };\n\t\t5811EFC41482EB2F006867D5 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5811EFC31482EB2F006867D5 /* AudioToolbox.framework */; };\n\t\t5811EFC61482EB33006867D5 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5811EFC51482EB33006867D5 /* AVFoundation.framework */; };\n\t\t581A4B7714114A4E00C6AC68 /* sample.pd in Resources */ = {isa = PBXBuildFile; fileRef = 581A4B7514114A4E00C6AC68 /* sample.pd */; };\n\t\t58ABCE3F140ACCEE003C36F3 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58ABCE3E140ACCEE003C36F3 /* UIKit.framework */; };\n\t\t58ABCE41140ACCEE003C36F3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58ABCE40140ACCEE003C36F3 /* Foundation.framework */; };\n\t\t58ABCE43140ACCEE003C36F3 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58ABCE42140ACCEE003C36F3 /* CoreGraphics.framework */; };\n\t\t58ABCE49140ACCEE003C36F3 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 58ABCE47140ACCEE003C36F3 /* InfoPlist.strings */; };\n\t\t58ABCE4C140ACCEF003C36F3 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 58ABCE4B140ACCEF003C36F3 /* main.m */; };\n\t\t58ABCE4F140ACCEF003C36F3 /* DispatcherSampleAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 58ABCE4E140ACCEF003C36F3 /* DispatcherSampleAppDelegate.m */; };\n\t\t58ABCE52140ACCEF003C36F3 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 58ABCE50140ACCEF003C36F3 /* MainWindow.xib */; };\n\t\t58ABCE55140ACCEF003C36F3 /* DispatcherSampleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 58ABCE54140ACCEF003C36F3 /* DispatcherSampleViewController.m */; };\n\t\t58ABCE58140ACCEF003C36F3 /* DispatcherSampleViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 58ABCE56140ACCEF003C36F3 /* DispatcherSampleViewController.xib */; };\n\t\t58ABCE5F140ACCEF003C36F3 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58ABCE3E140ACCEE003C36F3 /* UIKit.framework */; };\n\t\t58ABCE60140ACCEF003C36F3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58ABCE40140ACCEE003C36F3 /* Foundation.framework */; };\n\t\t58ABCE61140ACCEF003C36F3 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58ABCE42140ACCEE003C36F3 /* CoreGraphics.framework */; };\n\t\t58ABCE69140ACCEF003C36F3 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 58ABCE67140ACCEF003C36F3 /* InfoPlist.strings */; };\n\t\t58ABCE6C140ACCEF003C36F3 /* DispatcherSampleTests.h in Resources */ = {isa = PBXBuildFile; fileRef = 58ABCE6B140ACCEF003C36F3 /* DispatcherSampleTests.h */; };\n\t\t58ABCE6E140ACCEF003C36F3 /* DispatcherSampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 58ABCE6D140ACCEF003C36F3 /* DispatcherSampleTests.m */; };\n\t\t58ABCE8E140AD038003C36F3 /* SampleListener.m in Sources */ = {isa = PBXBuildFile; fileRef = 58ABCE8D140AD038003C36F3 /* SampleListener.m */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t11A30E611611509500786A6D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 5811EFB71482EA65006867D5 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 119013AB1486450C00086F19;\n\t\t\tremoteInfo = \"libpd-osx\";\n\t\t};\n\t\t3063EF1D2107F18C00C8A4A2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 5811EFB71482EA65006867D5 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 30C3D36D1FAA200100C67F08;\n\t\t\tremoteInfo = \"libpd-ios-multi\";\n\t\t};\n\t\t3063EF1F2107F18C00C8A4A2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 5811EFB71482EA65006867D5 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 30C3D2FA1FAA1FCC00C67F08;\n\t\t\tremoteInfo = \"libpd-osx-multi\";\n\t\t};\n\t\t5811EFBE1482EA65006867D5 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 5811EFB71482EA65006867D5 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = D2AAC07E0554694100DB518D;\n\t\t\tremoteInfo = \"libpd-ios\";\n\t\t};\n\t\t5811EFC01482EB24006867D5 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 5811EFB71482EA65006867D5 /* libpd.xcodeproj */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D2AAC07D0554694100DB518D;\n\t\t\tremoteInfo = \"libpd-ios\";\n\t\t};\n\t\t58ABCE62140ACCEF003C36F3 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 58ABCE31140ACCEE003C36F3 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 58ABCE39140ACCEE003C36F3;\n\t\t\tremoteInfo = DispatcherSample;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t5811EFB71482EA65006867D5 /* libpd.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = libpd.xcodeproj; path = ../libpd/libpd.xcodeproj; sourceTree = \"<group>\"; };\n\t\t5811EFC31482EB2F006867D5 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };\n\t\t5811EFC51482EB33006867D5 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };\n\t\t581A4B7514114A4E00C6AC68 /* sample.pd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = sample.pd; sourceTree = \"<group>\"; };\n\t\t58ABCE3A140ACCEE003C36F3 /* DispatcherSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DispatcherSample.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t58ABCE3E140ACCEE003C36F3 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };\n\t\t58ABCE40140ACCEE003C36F3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\t58ABCE42140ACCEE003C36F3 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };\n\t\t58ABCE46140ACCEE003C36F3 /* DispatcherSample-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = \"DispatcherSample-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t58ABCE48140ACCEE003C36F3 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\t58ABCE4A140ACCEE003C36F3 /* DispatcherSample-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"DispatcherSample-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t58ABCE4B140ACCEF003C36F3 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t58ABCE4D140ACCEF003C36F3 /* DispatcherSampleAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DispatcherSampleAppDelegate.h; sourceTree = \"<group>\"; };\n\t\t58ABCE4E140ACCEF003C36F3 /* DispatcherSampleAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DispatcherSampleAppDelegate.m; sourceTree = \"<group>\"; };\n\t\t58ABCE51140ACCEF003C36F3 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainWindow.xib; sourceTree = \"<group>\"; };\n\t\t58ABCE53140ACCEF003C36F3 /* DispatcherSampleViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DispatcherSampleViewController.h; sourceTree = \"<group>\"; };\n\t\t58ABCE54140ACCEF003C36F3 /* DispatcherSampleViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DispatcherSampleViewController.m; sourceTree = \"<group>\"; };\n\t\t58ABCE57140ACCEF003C36F3 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/DispatcherSampleViewController.xib; sourceTree = \"<group>\"; };\n\t\t58ABCE5E140ACCEF003C36F3 /* DispatcherSampleTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DispatcherSampleTests.octest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t58ABCE66140ACCEF003C36F3 /* DispatcherSampleTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = \"DispatcherSampleTests-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t58ABCE68140ACCEF003C36F3 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\t58ABCE6A140ACCEF003C36F3 /* DispatcherSampleTests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"DispatcherSampleTests-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t58ABCE6B140ACCEF003C36F3 /* DispatcherSampleTests.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DispatcherSampleTests.h; sourceTree = \"<group>\"; };\n\t\t58ABCE6D140ACCEF003C36F3 /* DispatcherSampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DispatcherSampleTests.m; sourceTree = \"<group>\"; };\n\t\t58ABCE8C140AD038003C36F3 /* SampleListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SampleListener.h; sourceTree = \"<group>\"; };\n\t\t58ABCE8D140AD038003C36F3 /* SampleListener.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SampleListener.m; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t58ABCE37140ACCEE003C36F3 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t5811EFC61482EB33006867D5 /* AVFoundation.framework in Frameworks */,\n\t\t\t\t5811EFC41482EB2F006867D5 /* AudioToolbox.framework in Frameworks */,\n\t\t\t\t5811EFC21482EB29006867D5 /* libpd-ios.a in Frameworks */,\n\t\t\t\t58ABCE3F140ACCEE003C36F3 /* UIKit.framework in Frameworks */,\n\t\t\t\t58ABCE41140ACCEE003C36F3 /* Foundation.framework in Frameworks */,\n\t\t\t\t58ABCE43140ACCEE003C36F3 /* CoreGraphics.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t58ABCE5A140ACCEF003C36F3 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t58ABCE5F140ACCEF003C36F3 /* UIKit.framework in Frameworks */,\n\t\t\t\t58ABCE60140ACCEF003C36F3 /* Foundation.framework in Frameworks */,\n\t\t\t\t58ABCE61140ACCEF003C36F3 /* CoreGraphics.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t5811EFB81482EA65006867D5 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5811EFBF1482EA65006867D5 /* libpd-ios.a */,\n\t\t\t\t11A30E621611509500786A6D /* libpd-osx.a */,\n\t\t\t\t3063EF1E2107F18C00C8A4A2 /* libpd-ios-multi.a */,\n\t\t\t\t3063EF202107F18C00C8A4A2 /* libpd-osx-multi.a */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t581A4B7314114A4E00C6AC68 /* patch */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t581A4B7514114A4E00C6AC68 /* sample.pd */,\n\t\t\t);\n\t\t\tpath = patch;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t58ABCE2F140ACCEE003C36F3 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5811EFB71482EA65006867D5 /* libpd.xcodeproj */,\n\t\t\t\t581A4B7314114A4E00C6AC68 /* patch */,\n\t\t\t\t58ABCE44140ACCEE003C36F3 /* DispatcherSample */,\n\t\t\t\t58ABCE64140ACCEF003C36F3 /* DispatcherSampleTests */,\n\t\t\t\t58ABCE3D140ACCEE003C36F3 /* Frameworks */,\n\t\t\t\t58ABCE3B140ACCEE003C36F3 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t58ABCE3B140ACCEE003C36F3 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t58ABCE3A140ACCEE003C36F3 /* DispatcherSample.app */,\n\t\t\t\t58ABCE5E140ACCEF003C36F3 /* DispatcherSampleTests.octest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t58ABCE3D140ACCEE003C36F3 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5811EFC51482EB33006867D5 /* AVFoundation.framework */,\n\t\t\t\t5811EFC31482EB2F006867D5 /* AudioToolbox.framework */,\n\t\t\t\t58ABCE3E140ACCEE003C36F3 /* UIKit.framework */,\n\t\t\t\t58ABCE40140ACCEE003C36F3 /* Foundation.framework */,\n\t\t\t\t58ABCE42140ACCEE003C36F3 /* CoreGraphics.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t58ABCE44140ACCEE003C36F3 /* DispatcherSample */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t58ABCE4D140ACCEF003C36F3 /* DispatcherSampleAppDelegate.h */,\n\t\t\t\t58ABCE4E140ACCEF003C36F3 /* DispatcherSampleAppDelegate.m */,\n\t\t\t\t58ABCE50140ACCEF003C36F3 /* MainWindow.xib */,\n\t\t\t\t58ABCE53140ACCEF003C36F3 /* DispatcherSampleViewController.h */,\n\t\t\t\t58ABCE54140ACCEF003C36F3 /* DispatcherSampleViewController.m */,\n\t\t\t\t58ABCE56140ACCEF003C36F3 /* DispatcherSampleViewController.xib */,\n\t\t\t\t58ABCE45140ACCEE003C36F3 /* Supporting Files */,\n\t\t\t\t58ABCE8C140AD038003C36F3 /* SampleListener.h */,\n\t\t\t\t58ABCE8D140AD038003C36F3 /* SampleListener.m */,\n\t\t\t);\n\t\t\tpath = DispatcherSample;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t58ABCE45140ACCEE003C36F3 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t58ABCE46140ACCEE003C36F3 /* DispatcherSample-Info.plist */,\n\t\t\t\t58ABCE47140ACCEE003C36F3 /* InfoPlist.strings */,\n\t\t\t\t58ABCE4A140ACCEE003C36F3 /* DispatcherSample-Prefix.pch */,\n\t\t\t\t58ABCE4B140ACCEF003C36F3 /* main.m */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t58ABCE64140ACCEF003C36F3 /* DispatcherSampleTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t58ABCE6B140ACCEF003C36F3 /* DispatcherSampleTests.h */,\n\t\t\t\t58ABCE6D140ACCEF003C36F3 /* DispatcherSampleTests.m */,\n\t\t\t\t58ABCE65140ACCEF003C36F3 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = DispatcherSampleTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t58ABCE65140ACCEF003C36F3 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t58ABCE66140ACCEF003C36F3 /* DispatcherSampleTests-Info.plist */,\n\t\t\t\t58ABCE67140ACCEF003C36F3 /* InfoPlist.strings */,\n\t\t\t\t58ABCE6A140ACCEF003C36F3 /* DispatcherSampleTests-Prefix.pch */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t58ABCE39140ACCEE003C36F3 /* DispatcherSample */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 58ABCE71140ACCEF003C36F3 /* Build configuration list for PBXNativeTarget \"DispatcherSample\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t58ABCE36140ACCEE003C36F3 /* Sources */,\n\t\t\t\t58ABCE37140ACCEE003C36F3 /* Frameworks */,\n\t\t\t\t58ABCE38140ACCEE003C36F3 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t5811EFC11482EB24006867D5 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = DispatcherSample;\n\t\t\tproductName = DispatcherSample;\n\t\t\tproductReference = 58ABCE3A140ACCEE003C36F3 /* DispatcherSample.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t58ABCE5D140ACCEF003C36F3 /* DispatcherSampleTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 58ABCE74140ACCEF003C36F3 /* Build configuration list for PBXNativeTarget \"DispatcherSampleTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t58ABCE59140ACCEF003C36F3 /* Sources */,\n\t\t\t\t58ABCE5A140ACCEF003C36F3 /* Frameworks */,\n\t\t\t\t58ABCE5B140ACCEF003C36F3 /* Resources */,\n\t\t\t\t58ABCE5C140ACCEF003C36F3 /* ShellScript */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t58ABCE63140ACCEF003C36F3 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = DispatcherSampleTests;\n\t\t\tproductName = DispatcherSampleTests;\n\t\t\tproductReference = 58ABCE5E140ACCEF003C36F3 /* DispatcherSampleTests.octest */;\n\t\t\tproductType = \"com.apple.product-type.bundle\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t58ABCE31140ACCEE003C36F3 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0930;\n\t\t\t};\n\t\t\tbuildConfigurationList = 58ABCE34140ACCEE003C36F3 /* Build configuration list for PBXProject \"DispatcherSample\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 58ABCE2F140ACCEE003C36F3;\n\t\t\tproductRefGroup = 58ABCE3B140ACCEE003C36F3 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectReferences = (\n\t\t\t\t{\n\t\t\t\t\tProductGroup = 5811EFB81482EA65006867D5 /* Products */;\n\t\t\t\t\tProjectRef = 5811EFB71482EA65006867D5 /* libpd.xcodeproj */;\n\t\t\t\t},\n\t\t\t);\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t58ABCE39140ACCEE003C36F3 /* DispatcherSample */,\n\t\t\t\t58ABCE5D140ACCEF003C36F3 /* DispatcherSampleTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXReferenceProxy section */\n\t\t11A30E621611509500786A6D /* libpd-osx.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-osx.a\";\n\t\t\tremoteRef = 11A30E611611509500786A6D /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t3063EF1E2107F18C00C8A4A2 /* libpd-ios-multi.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-ios-multi.a\";\n\t\t\tremoteRef = 3063EF1D2107F18C00C8A4A2 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t3063EF202107F18C00C8A4A2 /* libpd-osx-multi.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-osx-multi.a\";\n\t\t\tremoteRef = 3063EF1F2107F18C00C8A4A2 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t5811EFBF1482EA65006867D5 /* libpd-ios.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-ios.a\";\n\t\t\tremoteRef = 5811EFBE1482EA65006867D5 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n/* End PBXReferenceProxy section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t58ABCE38140ACCEE003C36F3 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t58ABCE49140ACCEE003C36F3 /* InfoPlist.strings in Resources */,\n\t\t\t\t58ABCE52140ACCEF003C36F3 /* MainWindow.xib in Resources */,\n\t\t\t\t58ABCE58140ACCEF003C36F3 /* DispatcherSampleViewController.xib in Resources */,\n\t\t\t\t581A4B7714114A4E00C6AC68 /* sample.pd in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t58ABCE5B140ACCEF003C36F3 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t58ABCE69140ACCEF003C36F3 /* InfoPlist.strings in Resources */,\n\t\t\t\t58ABCE6C140ACCEF003C36F3 /* DispatcherSampleTests.h in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t58ABCE5C140ACCEF003C36F3 /* ShellScript */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"# Run the unit tests in this test bundle.\\n\\\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\\\"\\n\";\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t58ABCE36140ACCEE003C36F3 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t58ABCE4C140ACCEF003C36F3 /* main.m in Sources */,\n\t\t\t\t58ABCE4F140ACCEF003C36F3 /* DispatcherSampleAppDelegate.m in Sources */,\n\t\t\t\t58ABCE55140ACCEF003C36F3 /* DispatcherSampleViewController.m in Sources */,\n\t\t\t\t58ABCE8E140AD038003C36F3 /* SampleListener.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t58ABCE59140ACCEF003C36F3 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t58ABCE6E140ACCEF003C36F3 /* DispatcherSampleTests.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t5811EFC11482EB24006867D5 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"libpd-ios\";\n\t\t\ttargetProxy = 5811EFC01482EB24006867D5 /* PBXContainerItemProxy */;\n\t\t};\n\t\t58ABCE63140ACCEF003C36F3 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 58ABCE39140ACCEE003C36F3 /* DispatcherSample */;\n\t\t\ttargetProxy = 58ABCE62140ACCEF003C36F3 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t58ABCE47140ACCEE003C36F3 /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t58ABCE48140ACCEE003C36F3 /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t58ABCE50140ACCEF003C36F3 /* MainWindow.xib */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t58ABCE51140ACCEF003C36F3 /* en */,\n\t\t\t);\n\t\t\tname = MainWindow.xib;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t58ABCE56140ACCEF003C36F3 /* DispatcherSampleViewController.xib */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t58ABCE57140ACCEF003C36F3 /* en */,\n\t\t\t);\n\t\t\tname = DispatcherSampleViewController.xib;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t58ABCE67140ACCEF003C36F3 /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t58ABCE68140ACCEF003C36F3 /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t58ABCE6F140ACCEF003C36F3 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = DEBUG;\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvmgcc42;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t58ABCE70140ACCEF003C36F3 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvmgcc42;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tOTHER_CFLAGS = \"-DNS_BLOCK_ASSERTIONS=1\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t58ABCE72140ACCEF003C36F3 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"DispatcherSample/DispatcherSample-Prefix.pch\";\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = \"\";\n\t\t\t\t\"HEADER_SEARCH_PATHS[arch=*]\" = \"\";\n\t\t\t\tINFOPLIST_FILE = \"DispatcherSample/DispatcherSample-Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"\\\"$(SRCROOT)\\\"\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = cc.libpd.DispatcherSample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"$(SRCROOT)/../libpd/**\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t58ABCE73140ACCEF003C36F3 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"DispatcherSample/DispatcherSample-Prefix.pch\";\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tHEADER_SEARCH_PATHS = \"\";\n\t\t\t\t\"HEADER_SEARCH_PATHS[arch=*]\" = \"\";\n\t\t\t\tINFOPLIST_FILE = \"DispatcherSample/DispatcherSample-Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"\\\"$(SRCROOT)\\\"\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = cc.libpd.DispatcherSample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"$(SRCROOT)/../libpd/**\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t58ABCE75140ACCEF003C36F3 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tBUNDLE_LOADER = \"$(BUILT_PRODUCTS_DIR)/DispatcherSample.app/DispatcherSample\";\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\",\n\t\t\t\t);\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"DispatcherSampleTests/DispatcherSampleTests-Prefix.pch\";\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tINFOPLIST_FILE = \"DispatcherSampleTests/DispatcherSampleTests-Info.plist\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-framework\",\n\t\t\t\t\tSenTestingKit,\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.noisepages.nettoyeur.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUNDLE_LOADER)\";\n\t\t\t\tWRAPPER_EXTENSION = octest;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t58ABCE76140ACCEF003C36F3 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tBUNDLE_LOADER = \"$(BUILT_PRODUCTS_DIR)/DispatcherSample.app/DispatcherSample\";\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\",\n\t\t\t\t);\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"DispatcherSampleTests/DispatcherSampleTests-Prefix.pch\";\n\t\t\t\tGCC_VERSION = com.apple.compilers.llvm.clang.1_0;\n\t\t\t\tINFOPLIST_FILE = \"DispatcherSampleTests/DispatcherSampleTests-Info.plist\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-framework\",\n\t\t\t\t\tSenTestingKit,\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.noisepages.nettoyeur.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUNDLE_LOADER)\";\n\t\t\t\tWRAPPER_EXTENSION = octest;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t58ABCE34140ACCEE003C36F3 /* Build configuration list for PBXProject \"DispatcherSample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t58ABCE6F140ACCEF003C36F3 /* Debug */,\n\t\t\t\t58ABCE70140ACCEF003C36F3 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t58ABCE71140ACCEF003C36F3 /* Build configuration list for PBXNativeTarget \"DispatcherSample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t58ABCE72140ACCEF003C36F3 /* Debug */,\n\t\t\t\t58ABCE73140ACCEF003C36F3 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t58ABCE74140ACCEF003C36F3 /* Build configuration list for PBXNativeTarget \"DispatcherSampleTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t58ABCE75140ACCEF003C36F3 /* Debug */,\n\t\t\t\t58ABCE76140ACCEF003C36F3 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 58ABCE31140ACCEE003C36F3 /* Project object */;\n}\n"
  },
  {
    "path": "DispatcherSample/DispatcherSampleTests/DispatcherSampleTests-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "DispatcherSample/DispatcherSampleTests/DispatcherSampleTests-Prefix.pch",
    "content": "//\n// Prefix header for all source files of the 'DispatcherSampleTests' target in the 'DispatcherSampleTests' project\n//\n\n#ifdef __OBJC__\n    #import <UIKit/UIKit.h>\n#endif\n"
  },
  {
    "path": "DispatcherSample/DispatcherSampleTests/DispatcherSampleTests.h",
    "content": "//\n//  DispatcherSampleTests.h\n//  DispatcherSampleTests\n//\n//  Created by Peter Brinkmann on 8/28/11.\n//  Copyright 2011 __MyCompanyName__. All rights reserved.\n//\n\n#import <SenTestingKit/SenTestingKit.h>\n\n\n@interface DispatcherSampleTests : SenTestCase {\n@private\n    \n}\n\n@end\n"
  },
  {
    "path": "DispatcherSample/DispatcherSampleTests/DispatcherSampleTests.m",
    "content": "//\n//  DispatcherSampleTests.m\n//  DispatcherSampleTests\n//\n//  Created by Peter Brinkmann on 8/28/11.\n//  Copyright 2011 __MyCompanyName__. All rights reserved.\n//\n\n#import \"DispatcherSampleTests.h\"\n\n\n@implementation DispatcherSampleTests\n\n- (void)setUp\n{\n    [super setUp];\n    \n    // Set-up code here.\n}\n\n- (void)tearDown\n{\n    // Tear-down code here.\n    \n    [super tearDown];\n}\n\n- (void)testExample\n{\n    STFail(@\"Unit tests are not implemented yet in DispatcherSampleTests\");\n}\n\n@end\n"
  },
  {
    "path": "DispatcherSample/DispatcherSampleTests/en.lproj/InfoPlist.strings",
    "content": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "DispatcherSample/patch/sample.pd",
    "content": "#N canvas 979 1230 450 300 10;\n#X obj 52 13 loadbang;\n#X obj 235 55 osc~ 220;\n#X obj 233 93 dac~;\n#X obj 34 61 metro 1000;\n#X obj 117 85 timer;\n#X obj 52 36 t b b;\n#X obj 59 84 t b b;\n#X obj 59 108 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1\n1;\n#X obj 42 132 route 0 1;\n#X obj 100 178 f;\n#X obj 142 178 f;\n#X floatatom 17 207 16 0 0 0 - - -;\n#X floatatom 141 207 16 0 0 0 - - -;\n#X obj 19 236 s bar;\n#X obj 140 235 s foo;\n#X obj 289 125 f 0;\n#X obj 326 126 + 1;\n#X msg 331 156 \\$1 10 -0.123;\n#X obj 331 183 s baz;\n#X obj 243 160 print count;\n#X connect 0 0 5 0;\n#X connect 1 0 2 0;\n#X connect 1 0 2 1;\n#X connect 3 0 6 0;\n#X connect 4 0 10 1;\n#X connect 4 0 9 1;\n#X connect 5 0 3 0;\n#X connect 5 1 4 0;\n#X connect 6 0 7 0;\n#X connect 6 1 4 1;\n#X connect 6 1 15 0;\n#X connect 7 0 8 0;\n#X connect 8 0 9 0;\n#X connect 8 1 10 0;\n#X connect 9 0 11 0;\n#X connect 10 0 12 0;\n#X connect 11 0 13 0;\n#X connect 12 0 14 0;\n#X connect 15 0 16 0;\n#X connect 15 0 17 0;\n#X connect 15 0 19 0;\n#X connect 16 0 15 1;\n#X connect 17 0 18 0;\n"
  },
  {
    "path": "LICENSE.txt",
    "content": "This software is copyrighted by Miller Puckette, Reality Jockey, Peter\nBrinkmann, Google Inc, and others.\n\n The following terms (the \"Standard Improved BSD License\") apply to all files\nassociated with the software unless explicitly disclaimed in individual files:\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above  \n   copyright notice, this list of conditions and the following \n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n3. The name of the author may not be used to endorse or promote\n   products derived from this software without specific prior \n   written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\nBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\nIN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\nTHE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "PdLinkSample/PdLinkSample/AppDelegate.h",
    "content": "/*\n *  For information on usage and redistribution, and for a DISCLAIMER OF ALL\n *  WARRANTIES, see the file, \"LICENSE.txt,\" in this distribution.\n *\n */\n\n#import <UIKit/UIKit.h>\n#import \"PdAudioController.h\"\n#include \"ABLLink.h\"\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n@property (strong, nonatomic) PdAudioController *pd;\n\n- (ABLLinkRef)getLinkRef;\n\n@end\n\n"
  },
  {
    "path": "PdLinkSample/PdLinkSample/AppDelegate.m",
    "content": "/*\n *  For information on usage and redistribution, and for a DISCLAIMER OF ALL\n *  WARRANTIES, see the file, \"LICENSE.txt,\" in this distribution.\n *\n */\n\n#import \"AppDelegate.h\"\n#import \"PdLinkAudioUnit.h\"\n\n@interface AppDelegate ()\n\n@end\n\n@implementation AppDelegate {\n    PdLinkAudioUnit *pd_au_;\n    PdAudioController *pd_;\n    ABLLinkRef linkRef_;\n}\n\n@synthesize pd = pd_;\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n    // Override point for customization after application launch.\n    linkRef_ = ABLLinkNew(120);\n    pd_au_ = [[PdLinkAudioUnit alloc] initWithLinkRef:linkRef_];\n    pd_ = [[PdAudioController alloc] initWithAudioUnit:pd_au_];\n    PdAudioStatus status = [pd_ configureAmbientWithSampleRate:44100 numberChannels:2 mixingEnabled:YES];\n    if (status == PdAudioOK) {\n        NSLog(@\"Configured PdAudioController instance.\");\n    } else {\n        NSLog(@\"Failed to configure PdAudioController instance.\");\n    }\n    return YES;\n}\n\n- (void)applicationWillResignActive:(UIApplication *)application {\n    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.\n    pd_.active = NO;\n}\n\n- (void)applicationDidEnterBackground:(UIApplication *)application {\n    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.\n    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n}\n\n- (void)applicationWillEnterForeground:(UIApplication *)application {\n    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.\n}\n\n- (void)applicationDidBecomeActive:(UIApplication *)application {\n    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n    pd_.active = YES;\n}\n\n- (void)applicationWillTerminate:(UIApplication *)application {\n    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n    ABLLinkDelete(linkRef_);\n}\n\n- (ABLLinkRef)getLinkRef {\n    return linkRef_;\n}\n\n@end\n"
  },
  {
    "path": "PdLinkSample/PdLinkSample/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "PdLinkSample/PdLinkSample/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"9531\" systemVersion=\"15D21\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"9529\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Llm-lL-Icb\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xb3-aO-Qok\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "PdLinkSample/PdLinkSample/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"11201\" systemVersion=\"16A323\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"BYZ-38-t0r\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"11161\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"ViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"y3c-jy-aDJ\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"wfy-db-euE\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" fixedFrame=\"YES\" text=\"Tempo\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"58y-3V-cYd\">\n                                <frame key=\"frameInset\" minX=\"20\" minY=\"84\" width=\"282\" height=\"21\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" fixedFrame=\"YES\" text=\"Resolution\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"SDI-JT-j7F\">\n                                <frame key=\"frameInset\" minX=\"20\" minY=\"183\" width=\"282\" height=\"21\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" fixedFrame=\"YES\" text=\"Quantum\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8ok-Bc-SDf\">\n                                <frame key=\"frameInset\" minX=\"20\" minY=\"289\" width=\"282\" height=\"21\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <slider opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" value=\"120\" minValue=\"20\" maxValue=\"360\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"eK0-65-Sz7\">\n                                <frame key=\"frameInset\" minX=\"18\" minY=\"113\" width=\"286\" height=\"31\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <connections>\n                                    <action selector=\"tempoChanged:\" destination=\"BYZ-38-t0r\" eventType=\"valueChanged\" id=\"rNK-WH-Scp\"/>\n                                </connections>\n                            </slider>\n                            <slider opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" value=\"1\" minValue=\"1\" maxValue=\"8\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"YP3-Xy-SaD\">\n                                <frame key=\"frameInset\" minX=\"18\" minY=\"212\" width=\"286\" height=\"31\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <connections>\n                                    <action selector=\"resolutionChanged:\" destination=\"BYZ-38-t0r\" eventType=\"valueChanged\" id=\"cp1-to-dhS\"/>\n                                </connections>\n                            </slider>\n                            <slider opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" value=\"4\" minValue=\"1\" maxValue=\"8\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"HNj-uK-g19\">\n                                <frame key=\"frameInset\" minX=\"18\" minY=\"310\" width=\"286\" height=\"31\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <connections>\n                                    <action selector=\"quantumChanged:\" destination=\"BYZ-38-t0r\" eventType=\"valueChanged\" id=\"h68-dE-Lgx\"/>\n                                </connections>\n                            </slider>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"HY8-tG-OrM\">\n                                <frame key=\"frameInset\" minX=\"20\" minY=\"402\" width=\"30\" height=\"30\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <state key=\"normal\" title=\"Link\"/>\n                                <connections>\n                                    <action selector=\"showLinkSettings:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"Jcv-cT-sgT\"/>\n                                </connections>\n                            </button>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    </view>\n                    <connections>\n                        <outlet property=\"quantumLabel\" destination=\"8ok-Bc-SDf\" id=\"6H0-r6-8Ry\"/>\n                        <outlet property=\"quantumSlider\" destination=\"HNj-uK-g19\" id=\"Bht-TK-461\"/>\n                        <outlet property=\"resolutionLabel\" destination=\"SDI-JT-j7F\" id=\"yAY-9D-jhU\"/>\n                        <outlet property=\"resolutionSlider\" destination=\"YP3-Xy-SaD\" id=\"mYa-BH-Xgk\"/>\n                        <outlet property=\"tempoLabel\" destination=\"58y-3V-cYd\" id=\"hgZ-2O-IrB\"/>\n                        <outlet property=\"tempoSlider\" destination=\"eK0-65-Sz7\" id=\"RCP-v9-5Rq\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"218\" y=\"212\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "PdLinkSample/PdLinkSample/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "PdLinkSample/PdLinkSample/ViewController.h",
    "content": "/*\n *  For information on usage and redistribution, and for a DISCLAIMER OF ALL\n *  WARRANTIES, see the file, \"LICENSE.txt,\" in this distribution.\n *\n */\n\n#import <UIKit/UIKit.h>\n\n@interface ViewController : UIViewController\n\n@property (weak, nonatomic) IBOutlet UILabel *tempoLabel;\n@property (weak, nonatomic) IBOutlet UILabel *resolutionLabel;\n@property (weak, nonatomic) IBOutlet UILabel *quantumLabel;\n@property (weak, nonatomic) IBOutlet UISlider *tempoSlider;\n@property (weak, nonatomic) IBOutlet UISlider *resolutionSlider;\n@property (weak, nonatomic) IBOutlet UISlider *quantumSlider;\n\n@end\n\n"
  },
  {
    "path": "PdLinkSample/PdLinkSample/ViewController.m",
    "content": "/*\n *  For information on usage and redistribution, and for a DISCLAIMER OF ALL\n *  WARRANTIES, see the file, \"LICENSE.txt,\" in this distribution.\n *\n */\n\n#import \"ViewController.h\"\n#import \"AppDelegate.h\"\n#import \"PdAudioUnit.h\"\n#import \"PdBase.h\"\n#import \"PdFile.h\"\n#import \"PdDispatcher.h\"\n#include \"ABLLinkSettingsViewController.h\"\n#include \"ABLLink.h\"\n\n@interface ViewController ()\n- (void)updateTempo:(int)tempo;\n@end\n\n@implementation ViewController {\n    PdDispatcher *dispatcher_;\n    PdFile *patch_;\n    UIViewController *linkSettings_;\n}\n\nvoid sessionTempoCallback(double tempo, void *context) {\n    ViewController *vc = (__bridge ViewController*) context;\n    [vc updateTempo:tempo];\n}\n\n- (void)viewDidLoad {\n    [super viewDidLoad];\n    // Do any additional setup after loading the view, typically from a nib.\n    dispatcher_ = [[PdDispatcher alloc] init];\n    [PdBase setDelegate:dispatcher_];\n    patch_ = [PdFile openFileNamed:@\"ping.pd\" path:[[NSBundle mainBundle] resourcePath]];\n    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];\n    ABLLinkRef linkRef = [appDelegate getLinkRef];\n    linkSettings_ = [ABLLinkSettingsViewController instance:linkRef];\n    ABLLinkSetSessionTempoCallback(linkRef, sessionTempoCallback, (__bridge void *)(self));\n    ABLLinkTimelineRef timeline = ABLLinkCaptureAppTimeline(linkRef);\n    [self updateTempo:ABLLinkGetTempo(timeline)];\n}\n\n- (void)didReceiveMemoryWarning {\n    [super didReceiveMemoryWarning];\n    // Dispose of any resources that can be recreated.\n}\n\n- (IBAction)tempoChanged:(id)sender {\n    UISlider *slider = (UISlider*) sender;\n    int tempo = slider.value;\n    [self updateTempo:tempo];\n    [PdBase sendFloat:tempo toReceiver:@\"tempo\"];\n}\n\n- (IBAction)resolutionChanged:(id)sender {\n    UISlider *slider = (UISlider*) sender;\n    int res = slider.value;\n    self.resolutionLabel.text = [NSString stringWithFormat:@\"Resolution: %d\", res];\n    [PdBase sendFloat:(int)res toReceiver:@\"resolution\"];\n}\n\n- (IBAction)quantumChanged:(id)sender {\n    UISlider *slider = (UISlider*) sender;\n    int quantum = slider.value;\n    self.quantumLabel.text = [NSString stringWithFormat:@\"Quantum: %d\", quantum];\n    [PdBase sendFloat:quantum toReceiver:@\"quantum\"];\n}\n\n-(IBAction)showLinkSettings:(id)sender\n{\n    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:linkSettings_];\n    // this will present a view controller as a popover in iPad and a modal VC on iPhone\n    linkSettings_.navigationItem.rightBarButtonItem =\n    [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone\n                                                  target:self\n                                                  action:@selector(hideLinkSettings:)];\n    \n    navController.modalPresentationStyle = UIModalPresentationPopover;\n    \n    UIPopoverPresentationController *popC = navController.popoverPresentationController;\n    popC.permittedArrowDirections = UIPopoverArrowDirectionAny;\n    popC.sourceRect = [sender frame];\n    \n    // we recommend using a size of 320x400 for the display in a popover\n    linkSettings_.preferredContentSize = CGSizeMake(320.f, 400.f);\n    \n    UIButton *button = (UIButton *)sender;\n    popC.sourceView = button.superview;\n    \n    [self presentViewController:navController animated:YES completion:nil];\n}\n\n- (void)hideLinkSettings:(id)sender\n{\n#pragma unused(sender)\n    [self dismissViewControllerAnimated:YES completion:nil];\n}\n\n- (void)updateTempo:(int)tempo {\n    self.tempoLabel.text = [NSString stringWithFormat:@\"Tempo: %d\", tempo];\n}\n\n@end\n\n"
  },
  {
    "path": "PdLinkSample/PdLinkSample/main.m",
    "content": "//\n//  main.m\n//  PdLinkSample\n//\n//  Created by Peter Brinkmann on 10/17/16.\n//  Copyright © 2016 Peter Brinkmann. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"AppDelegate.h\"\n\nint main(int argc, char * argv[]) {\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, NSStringFromClass(AppDelegate.class));\n    }\n}\n"
  },
  {
    "path": "PdLinkSample/PdLinkSample/ping.pd",
    "content": "#N canvas 612 242 343 426 10;\n#X obj 94 307 osc~ 440;\n#X obj 73 331 *~;\n#X obj 73 375 dac~;\n#X obj 29 289 vline~;\n#X msg 29 268 1 \\, 0 250;\n#X obj 250 197 f;\n#X obj 214 226 f;\n#X obj 214 248 print phase;\n#X obj 73 353 *~ 0.25;\n#X obj 250 219 print beat;\n#X msg 56 64 tempo \\$1;\n#X msg 119 64 resolution \\$1;\n#X msg 216 64 reset 0 \\$1;\n#X floatatom 56 45 5 0 0 2 tempo tempo -, f 5;\n#X floatatom 119 46 5 0 0 2 resolution resolution -, f 5;\n#X floatatom 216 46 5 0 0 2 quantum quantum -, f 5;\n#X obj 135 284 f 440;\n#X obj 123 112 abl_link~ 1 0 4 140;\n#X obj 94 284 f 880;\n#X obj 119 150 t b f b b;\n#X obj 103 211 select 0;\n#X obj 103 234 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144\n-1 -1;\n#X obj 148 233 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144\n-1 -1;\n#X obj 112 258 print downbeat;\n#X obj 234 134 print tempo;\n#X connect 0 0 1 1;\n#X connect 1 0 8 0;\n#X connect 3 0 1 0;\n#X connect 4 0 3 0;\n#X connect 4 0 3 0;\n#X connect 5 0 9 0;\n#X connect 6 0 7 0;\n#X connect 8 0 2 0;\n#X connect 8 0 2 1;\n#X connect 10 0 17 0;\n#X connect 11 0 17 0;\n#X connect 12 0 17 0;\n#X connect 13 0 10 0;\n#X connect 14 0 11 0;\n#X connect 15 0 12 0;\n#X connect 16 0 0 0;\n#X connect 17 0 19 0;\n#X connect 17 1 6 1;\n#X connect 17 2 5 1;\n#X connect 17 3 24 0;\n#X connect 18 0 0 0;\n#X connect 19 0 4 0;\n#X connect 19 1 20 0;\n#X connect 19 2 6 0;\n#X connect 19 3 5 0;\n#X connect 20 0 21 0;\n#X connect 20 1 22 0;\n#X connect 21 0 18 0;\n#X connect 21 0 23 0;\n#X connect 22 0 16 0;\n"
  },
  {
    "path": "PdLinkSample/PdLinkSample.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t583AB1511DB5A8CF001E5913 /* PdLinkAudioUnit.m in Sources */ = {isa = PBXBuildFile; fileRef = 583AB1501DB5A8CF001E5913 /* PdLinkAudioUnit.m */; };\n\t\t583AB1531DB5A905001E5913 /* libABLLink.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 583AB1521DB5A905001E5913 /* libABLLink.a */; };\n\t\t583AB1551DB5AA66001E5913 /* ping.pd in Resources */ = {isa = PBXBuildFile; fileRef = 583AB1541DB5AA66001E5913 /* ping.pd */; };\n\t\t586152721DB5A55800A5C131 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 586152711DB5A55800A5C131 /* main.m */; };\n\t\t586152751DB5A55800A5C131 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 586152741DB5A55800A5C131 /* AppDelegate.m */; };\n\t\t586152781DB5A55800A5C131 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 586152771DB5A55800A5C131 /* ViewController.m */; };\n\t\t5861527B1DB5A55800A5C131 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 586152791DB5A55800A5C131 /* Main.storyboard */; };\n\t\t5861527D1DB5A55800A5C131 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5861527C1DB5A55800A5C131 /* Assets.xcassets */; };\n\t\t586152801DB5A55800A5C131 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5861527E1DB5A55800A5C131 /* LaunchScreen.storyboard */; };\n\t\t586152921DB5A62800A5C131 /* libpd-ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5861528D1DB5A5B500A5C131 /* libpd-ios.a */; };\n\t\t586152951DB5A64C00A5C131 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 586152941DB5A64C00A5C131 /* AudioToolbox.framework */; };\n\t\t586152971DB5A65200A5C131 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 586152961DB5A65200A5C131 /* AVFoundation.framework */; };\n\t\t589A4CEA1DB5DDC3000FC0CC /* Base.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 589A4CE91DB5DDC3000FC0CC /* Base.lproj */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t3063EF7E21091B3100C8A4A2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 586152871DB5A5B400A5C131 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 30C3D36D1FAA200100C67F08;\n\t\t\tremoteInfo = \"libpd-ios-multi\";\n\t\t};\n\t\t3063EF8021091B3100C8A4A2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 586152871DB5A5B400A5C131 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 30C3D2FA1FAA1FCC00C67F08;\n\t\t\tremoteInfo = \"libpd-osx-multi\";\n\t\t};\n\t\t5861528C1DB5A5B500A5C131 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 586152871DB5A5B400A5C131 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = D2AAC07E0554694100DB518D;\n\t\t\tremoteInfo = \"libpd-ios\";\n\t\t};\n\t\t5861528E1DB5A5B500A5C131 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 586152871DB5A5B400A5C131 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 119013AB1486450C00086F19;\n\t\t\tremoteInfo = \"libpd-osx\";\n\t\t};\n\t\t586152901DB5A5F000A5C131 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 586152871DB5A5B400A5C131 /* libpd.xcodeproj */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D2AAC07D0554694100DB518D;\n\t\t\tremoteInfo = \"libpd-ios\";\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t583AB14F1DB5A8CF001E5913 /* PdLinkAudioUnit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PdLinkAudioUnit.h; path = ../../abl_link/ios/PdLinkAudioUnit.h; sourceTree = \"<group>\"; };\n\t\t583AB1501DB5A8CF001E5913 /* PdLinkAudioUnit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PdLinkAudioUnit.m; path = ../../abl_link/ios/PdLinkAudioUnit.m; sourceTree = \"<group>\"; };\n\t\t583AB1521DB5A905001E5913 /* libABLLink.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libABLLink.a; path = ../../LinkKit/lib/libABLLink.a; sourceTree = \"<group>\"; };\n\t\t583AB1541DB5AA66001E5913 /* ping.pd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ping.pd; sourceTree = \"<group>\"; };\n\t\t5861526D1DB5A55800A5C131 /* PdLinkSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PdLinkSample.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t586152711DB5A55800A5C131 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t586152731DB5A55800A5C131 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\t586152741DB5A55800A5C131 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\t586152761DB5A55800A5C131 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = \"<group>\"; };\n\t\t586152771DB5A55800A5C131 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = \"<group>\"; };\n\t\t5861527A1DB5A55800A5C131 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t5861527C1DB5A55800A5C131 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t5861527F1DB5A55800A5C131 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t586152811DB5A55800A5C131 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t586152871DB5A5B400A5C131 /* libpd.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = libpd.xcodeproj; path = ../libpd/libpd.xcodeproj; sourceTree = \"<group>\"; };\n\t\t586152941DB5A64C00A5C131 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };\n\t\t586152961DB5A65200A5C131 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };\n\t\t589A4CE91DB5DDC3000FC0CC /* Base.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Base.lproj; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t5861526A1DB5A55800A5C131 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t586152971DB5A65200A5C131 /* AVFoundation.framework in Frameworks */,\n\t\t\t\t586152951DB5A64C00A5C131 /* AudioToolbox.framework in Frameworks */,\n\t\t\t\t586152921DB5A62800A5C131 /* libpd-ios.a in Frameworks */,\n\t\t\t\t583AB1531DB5A905001E5913 /* libABLLink.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t586152641DB5A55800A5C131 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t583AB1521DB5A905001E5913 /* libABLLink.a */,\n\t\t\t\t586152871DB5A5B400A5C131 /* libpd.xcodeproj */,\n\t\t\t\t5861526F1DB5A55800A5C131 /* PdLinkSample */,\n\t\t\t\t5861526E1DB5A55800A5C131 /* Products */,\n\t\t\t\t586152931DB5A64C00A5C131 /* Frameworks */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5861526E1DB5A55800A5C131 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5861526D1DB5A55800A5C131 /* PdLinkSample.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5861526F1DB5A55800A5C131 /* PdLinkSample */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t589A4CE91DB5DDC3000FC0CC /* Base.lproj */,\n\t\t\t\t583AB1541DB5AA66001E5913 /* ping.pd */,\n\t\t\t\t583AB14F1DB5A8CF001E5913 /* PdLinkAudioUnit.h */,\n\t\t\t\t583AB1501DB5A8CF001E5913 /* PdLinkAudioUnit.m */,\n\t\t\t\t586152731DB5A55800A5C131 /* AppDelegate.h */,\n\t\t\t\t586152741DB5A55800A5C131 /* AppDelegate.m */,\n\t\t\t\t586152761DB5A55800A5C131 /* ViewController.h */,\n\t\t\t\t586152771DB5A55800A5C131 /* ViewController.m */,\n\t\t\t\t586152791DB5A55800A5C131 /* Main.storyboard */,\n\t\t\t\t5861527C1DB5A55800A5C131 /* Assets.xcassets */,\n\t\t\t\t5861527E1DB5A55800A5C131 /* LaunchScreen.storyboard */,\n\t\t\t\t586152811DB5A55800A5C131 /* Info.plist */,\n\t\t\t\t586152701DB5A55800A5C131 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = PdLinkSample;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t586152701DB5A55800A5C131 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t586152711DB5A55800A5C131 /* main.m */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t586152881DB5A5B400A5C131 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5861528D1DB5A5B500A5C131 /* libpd-ios.a */,\n\t\t\t\t5861528F1DB5A5B500A5C131 /* libpd-osx.a */,\n\t\t\t\t3063EF7F21091B3100C8A4A2 /* libpd-ios-multi.a */,\n\t\t\t\t3063EF8121091B3100C8A4A2 /* libpd-osx-multi.a */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t586152931DB5A64C00A5C131 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t586152961DB5A65200A5C131 /* AVFoundation.framework */,\n\t\t\t\t586152941DB5A64C00A5C131 /* AudioToolbox.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t5861526C1DB5A55800A5C131 /* PdLinkSample */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 586152841DB5A55800A5C131 /* Build configuration list for PBXNativeTarget \"PdLinkSample\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t586152691DB5A55800A5C131 /* Sources */,\n\t\t\t\t5861526A1DB5A55800A5C131 /* Frameworks */,\n\t\t\t\t5861526B1DB5A55800A5C131 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t586152911DB5A5F000A5C131 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = PdLinkSample;\n\t\t\tproductName = PdLinkSample;\n\t\t\tproductReference = 5861526D1DB5A55800A5C131 /* PdLinkSample.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t586152651DB5A55800A5C131 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0930;\n\t\t\t\tORGANIZATIONNAME = \"Peter Brinkmann\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t5861526C1DB5A55800A5C131 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 8.0;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 586152681DB5A55800A5C131 /* Build configuration list for PBXProject \"PdLinkSample\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 586152641DB5A55800A5C131;\n\t\t\tproductRefGroup = 5861526E1DB5A55800A5C131 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectReferences = (\n\t\t\t\t{\n\t\t\t\t\tProductGroup = 586152881DB5A5B400A5C131 /* Products */;\n\t\t\t\t\tProjectRef = 586152871DB5A5B400A5C131 /* libpd.xcodeproj */;\n\t\t\t\t},\n\t\t\t);\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t5861526C1DB5A55800A5C131 /* PdLinkSample */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXReferenceProxy section */\n\t\t3063EF7F21091B3100C8A4A2 /* libpd-ios-multi.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-ios-multi.a\";\n\t\t\tremoteRef = 3063EF7E21091B3100C8A4A2 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t3063EF8121091B3100C8A4A2 /* libpd-osx-multi.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-osx-multi.a\";\n\t\t\tremoteRef = 3063EF8021091B3100C8A4A2 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t5861528D1DB5A5B500A5C131 /* libpd-ios.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-ios.a\";\n\t\t\tremoteRef = 5861528C1DB5A5B500A5C131 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t5861528F1DB5A5B500A5C131 /* libpd-osx.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-osx.a\";\n\t\t\tremoteRef = 5861528E1DB5A5B500A5C131 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n/* End PBXReferenceProxy section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t5861526B1DB5A55800A5C131 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t586152801DB5A55800A5C131 /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t5861527D1DB5A55800A5C131 /* Assets.xcassets in Resources */,\n\t\t\t\t589A4CEA1DB5DDC3000FC0CC /* Base.lproj in Resources */,\n\t\t\t\t5861527B1DB5A55800A5C131 /* Main.storyboard in Resources */,\n\t\t\t\t583AB1551DB5AA66001E5913 /* ping.pd in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t586152691DB5A55800A5C131 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t583AB1511DB5A8CF001E5913 /* PdLinkAudioUnit.m in Sources */,\n\t\t\t\t586152781DB5A55800A5C131 /* ViewController.m in Sources */,\n\t\t\t\t586152751DB5A55800A5C131 /* AppDelegate.m in Sources */,\n\t\t\t\t586152721DB5A55800A5C131 /* main.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t586152911DB5A5F000A5C131 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"libpd-ios\";\n\t\t\ttargetProxy = 586152901DB5A5F000A5C131 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t586152791DB5A55800A5C131 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t5861527A1DB5A55800A5C131 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5861527E1DB5A55800A5C131 /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t5861527F1DB5A55800A5C131 /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t586152821DB5A55800A5C131 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVES = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t586152831DB5A55800A5C131 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVES = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t586152851DB5A55800A5C131 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tINFOPLIST_FILE = PdLinkSample/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-L../../LinkKit/lib\",\n\t\t\t\t\t\"-lc++\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = cc.libpd.PdLinkSample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"../libpd/** ../../LinkKit/include\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t586152861DB5A55800A5C131 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tINFOPLIST_FILE = PdLinkSample/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-L../../LinkKit/lib\",\n\t\t\t\t\t\"-lc++\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = cc.libpd.PdLinkSample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"../libpd/** ../../LinkKit/include\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t586152681DB5A55800A5C131 /* Build configuration list for PBXProject \"PdLinkSample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t586152821DB5A55800A5C131 /* Debug */,\n\t\t\t\t586152831DB5A55800A5C131 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t586152841DB5A55800A5C131 /* Build configuration list for PBXNativeTarget \"PdLinkSample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t586152851DB5A55800A5C131 /* Debug */,\n\t\t\t\t586152861DB5A55800A5C131 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 586152651DB5A55800A5C131 /* Project object */;\n}\n"
  },
  {
    "path": "PdSettings/PdSettings/PdSettings-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIconFile</key>\n\t<string></string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.1</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.0</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UIBackgroundModes</key>\n\t<array>\n\t\t<string>audio</string>\n\t</array>\n\t<key>UIRequiresFullScreen</key>\n\t<false/>\n\t<key>UIStatusBarHidden</key>\n\t<false/>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "PdSettings/PdSettings/PdSettings-Prefix.pch",
    "content": "//\n// Prefix header for all source files of the 'PdSettings' target in the 'PdSettings' project\n//\n\n#import <Availability.h>\n\n#ifndef __IPHONE_3_0\n#warning \"This project uses features only available in iPhone SDK 3.0 and later.\"\n#endif\n\n#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#import <Foundation/Foundation.h>\n#import \"RDebug.h\"\n#endif\n"
  },
  {
    "path": "PdSettings/PdSettings/PdSettingsAppDelegate.h",
    "content": "//\n//  PdSettingsAppDelegate.h\n//  PdSettings\n//\n//  Created by Richard Eakin on 18/09/11.\n//  Copyright 2011 Blarg. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface PdSettingsAppDelegate : NSObject <UIApplicationDelegate>\n@property (nonatomic, retain) UIWindow *window;\n@end\n"
  },
  {
    "path": "PdSettings/PdSettings/PdSettingsAppDelegate.m",
    "content": "//\n//  PdSettingsAppDelegate.m\n//  PdSettings\n//\n//  Created by Richard Eakin on 18/09/11.\n//  Copyright 2011 Blarg. All rights reserved.\n//  Updated by Dan Wilcox 2018.\n//\n\n#import \"PdSettingsAppDelegate.h\"\n#import \"PdSettingsViewController.h\"\n\n@implementation PdSettingsAppDelegate\n\n@synthesize window = window_;\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n\tself.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];\n\tself.window.rootViewController = [[PdSettingsViewController alloc] init];\n\t[self.window makeKeyAndVisible];\n    return YES;\n}\n\n- (void)dealloc {\n\tself.window = nil;\n}\n\n@end\n"
  },
  {
    "path": "PdSettings/PdSettings/PdSettingsViewController.h",
    "content": "//\n//  PdSettingsViewController.h\n//  PdSettings\n//\n//  Created by Richard Eakin on 18/09/11.\n//  Copyright 2011 Blarg. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"PdBase.h\"\n\n@interface PdSettingsViewController : UIViewController <PdReceiverDelegate, UIPickerViewDelegate, UIPickerViewDataSource>\n\n@end\n"
  },
  {
    "path": "PdSettings/PdSettings/PdSettingsViewController.m",
    "content": "//\n//  PdSettingsViewController.m\n//  PdSettings\n//\n//  Created by Richard Eakin on 18/09/11.\n//  Copyright 2011 Blarg. All rights reserved.\n//  Updated by Dan Wilcox 2018.\n//\n\n#import \"PdSettingsViewController.h\"\n#import \"PdBase.h\"\n#import \"PdFile.h\"\n#import \"PdAudioController.h\"\n#import <QuartzCore/QuartzCore.h>\n\nstatic const CGFloat kFramePadding = 12.0;\nstatic const CGFloat kButtonFontSize = 12.0;\nstatic const CGFloat kLabelHeight = 20.0;\nstatic const CGFloat kPickerFirstComponentProportion = 0.33333333;\nstatic const CGFloat kPickerOtherComponentsProportion = 0.22222222;\n\ntypedef enum {\n\tSettingsPickerComponentSampleRate,\n\tSettingsPickerComponentNumberInputChannels,\n\tSettingsPickerComponentNumberOutputChannels,\n\tSettingsPickerComponentNumberTicks,\n\tSettingsPickerNumberComponents\n} SettingsPickerComponent;\n\n@interface PdSettingsViewController ()\n\n@property (nonatomic, retain) PdAudioController *audioController;\n@property (nonatomic, retain) PdFile *patch;\n@property (nonatomic, retain) NSArray *settingsArray;\n@property (nonatomic, retain) UIButton *activeButton;\n@property (nonatomic, retain) UIButton *reloadButton;\n@property (nonatomic, retain) UIButton *ambientAudioButton;\n@property (nonatomic, retain) UIButton *allowMixingButton;\n@property (nonatomic, retain) UIPickerView *settingsPicker;\n@property (nonatomic, retain) UISegmentedControl *patchSelector;\n\n- (void)configureAudio; // this is where PdAudioController's configure method is called and audio properties are actually set\n- (void)layoutInterface;\n- (void)layoutLabels;\n- (void)activeButtonWasTapped:(UIButton *)sender;\n- (void)reloadButtonWasTapped:(UIButton *)sender;\n- (void)ambientButtonWasTapped:(UIButton *)sender;\n- (void)allowMixingButtonWasTapped:(UIButton *)sender;\n- (void)patchSelectorChanged:(UISegmentedControl *)sender;\n- (UILabel *)addLabelWithText:(NSString *)text;\n- (UIButton *)addButtonWithText:(NSString *)text selector:(SEL)selector;\n- (void)fillSettingsArray;\n- (void)indicateSettingsChanged;\n- (void)updatePickerSettings;\n- (int)pickerValueForComponent:(SettingsPickerComponent)component;\n- (void)setPickerValue:(int)value component:(SettingsPickerComponent)component animated:(BOOL)animated;\n\n@end\n\n\n@implementation PdSettingsViewController\n\n@synthesize audioController = audioController_,\npatch = patch_,\nsettingsArray = settingsArray_,\nactiveButton = activeButton_,\nreloadButton = reloadButton_,\nsettingsPicker = settingsPicker_,\npatchSelector = patchSelector_,\nambientAudioButton = ambientAudioButton_,\nallowMixingButton = allowMixingButton_;\n\n#pragma mark - Init / Dealloc\n\n- (id)init {\n\tself = [super init];\n\tif (self) {\n\t\t[PdBase setDelegate:self];\n\t\t[PdBase subscribe:@\"test-value\"];\n\t\tself.audioController = [[PdAudioController alloc] init];\n\t\t[self.audioController configurePlaybackWithSampleRate:44100 numberChannels:2 inputEnabled:YES mixingEnabled:NO]; // well known settings\n\t\t[self fillSettingsArray];\n\t}\n\treturn self;\n}\n\n- (void)dealloc {\n\tself.audioController = nil;\n\tself.patch = nil;\n\tself.activeButton = nil;\n\tself.reloadButton = nil;\n\tself.ambientAudioButton = nil;\n    self.allowMixingButton = nil;\n\tself.patchSelector = nil;\n\tself.settingsArray = nil;\n}\n\n#pragma mark - View lifecycle\n\n- (void)loadView {\n\t[super loadView];\n\tself.view.backgroundColor = [UIColor darkGrayColor];\n\t\n\tself.activeButton = [self addButtonWithText:@\"Inactive\" selector:@selector(activeButtonWasTapped:)];\n\t[self.activeButton setTitle:@\"Active\" forState:UIControlStateSelected];\n    \n\tself.reloadButton = [self addButtonWithText:@\"Reload Settings\" selector:@selector(reloadButtonWasTapped:)];\n\tself.reloadButton.enabled = NO;\n\t\n\tself.ambientAudioButton = [self addButtonWithText:@\"Ambient Audio\" selector:@selector(ambientButtonWasTapped:)];\n\tself.allowMixingButton = [self addButtonWithText:@\"Allow Mixing\" selector:@selector(allowMixingButtonWasTapped:)];\n\t\n\tself.settingsPicker = [[UIPickerView alloc] init];\n\tself.settingsPicker.delegate = self;\n\tself.settingsPicker.dataSource = self;\n\tself.settingsPicker.showsSelectionIndicator = YES;\n\t\n\tself.patchSelector = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@\"testoutput.pd\", @\"testinput.pd\", nil]];\n    self.patchSelector.tintColor = [UIColor colorWithRed:54.0/255.0 green:56.0/255.0 blue:96.0/255.0 alpha:1.0];\n    self.patchSelector.selectedSegmentIndex = 0;\n    [self.patchSelector addTarget:self action:@selector(patchSelectorChanged:) forControlEvents:UIControlEventValueChanged];\n\t[self patchSelectorChanged:self.patchSelector];\n    \n\t[self.view addSubview:self.settingsPicker];\n\t[self.view addSubview:self.patchSelector];\n}\n\n-(BOOL)prefersStatusBarHidden{\n    return YES;\n}\n\n- (void)viewDidAppear:(BOOL)animated {\n\t[super viewDidAppear:animated];\n\t[self updatePickerSettings];\n\t[self.audioController print];\n}\n\n- (void)viewDidLayoutSubviews {\n\t[self layoutInterface];\n\t[self layoutLabels];\n}\n\n- (void)viewWillTransitionToSize:(CGSize)size\n\t   withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {\n\tfor (UIView *view in self.view.subviews) {\n\t\tif ([view isKindOfClass:[UILabel class]]) {\n\t\t\t[view removeFromSuperview];\n\t\t}\n\t}\n}\n\n#pragma mark - PdReceiverDelegate\n\n- (void)receivePrint:(NSString *)message {\n\tRLog(@\"%@\", message);\n}\n\n#pragma mark - UIPickerViewDataSource\n\n- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {\n\treturn SettingsPickerNumberComponents;\n}\n\n- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {\n\treturn [[self.settingsArray objectAtIndex:component] count];\n}\n\n#pragma mark - UIPickerViewDelegate\n\n- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {\n\tCGFloat totalWidth = self.settingsPicker.frame.size.width - kFramePadding * 2;\n\tif (component == SettingsPickerComponentSampleRate) {\n\t\treturn floor(totalWidth * kPickerFirstComponentProportion);\n\t}\n\treturn floor(totalWidth * kPickerOtherComponentsProportion);\n}\n\n- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {\n\treturn [[self.settingsArray objectAtIndex:component] objectAtIndex:row];\n}\n\n- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {\n\t// if the user selects inputs > 0, make sure to disable the\n\t// ambient audio button\n\tif (component == SettingsPickerComponentNumberInputChannels && [self pickerValueForComponent:SettingsPickerComponentNumberInputChannels] > 0) {\n\t\tself.ambientAudioButton.selected = NO;\n\t}\n\t\n\t// number of ticks can be changed while the audio unit is running, without it needing to be recreated, so it has a different configure method\n\tif (component == SettingsPickerComponentNumberTicks) {\n\t\tint ticks = [self pickerValueForComponent:SettingsPickerComponentNumberTicks];\n\t\tPdAudioStatus status = [self.audioController configureTicksPerBuffer:ticks];\n\t\tif (status == PdAudioPropertyChanged) {\n\t\t\tRLog(@\"Could not configure ticksPerBuffer = %d, instead got %d\", ticks, self.audioController.ticksPerBuffer);\n\t\t\t[self setPickerValue:self.audioController.ticksPerBuffer component:SettingsPickerComponentNumberTicks animated:YES];\n\t\t}\n\t} else {\n\t\t[self indicateSettingsChanged];\n\t}\n}\n\n\n#pragma mark - Private (UI)\n\n- (void)layoutInterface {\n\tconst CGFloat kButtonHeight = 34.0;\n\tconst CGFloat kPSWidth = 300.0;\n\tconst CGFloat kActiveButtonWidth = 70.0;\n\tconst CGFloat kReloadButtonWidth = 120.0;\n\tconst CGFloat kButtonSpacer = 10.0;\n\tconst CGFloat kPickerHeight = 162.0;\n\tCGSize viewSize = self.view.bounds.size;\n    \n\tself.settingsPicker.frame = CGRectMake(0.0, viewSize.height - kPickerHeight, viewSize.width, kPickerHeight);\n\t\n\tCGFloat psXOffset = (viewSize.width - kPSWidth) * 0.5;\n\tCGFloat psYOffset = self.settingsPicker.frame.origin.y - kButtonHeight - 26.0;\n\tself.patchSelector.frame = CGRectIntegral(CGRectMake(psXOffset, psYOffset, kPSWidth, kButtonHeight));\n\n\tCGFloat bYOffset = 0.0;\n\tself.activeButton.frame = CGRectMake(kFramePadding, kFramePadding, kActiveButtonWidth, kButtonHeight);\n\tCGFloat rButtonXOffset = viewSize.width - kFramePadding - kReloadButtonWidth;\n\tself.reloadButton.frame = CGRectMake(rButtonXOffset, kFramePadding, kReloadButtonWidth, kButtonHeight);\n\tint currentOrientation = [[UIApplication sharedApplication] statusBarOrientation];\n\tif (UIInterfaceOrientationIsPortrait(currentOrientation)) {\n\t\tself.ambientAudioButton.frame = CGRectMake(self.reloadButton.frame.origin.x,\n                                                   self.reloadButton.frame.origin.y + kButtonHeight + kButtonSpacer + bYOffset,\n                                                   kReloadButtonWidth,\n                                                   kButtonHeight);\n\t\tself.allowMixingButton.frame = CGRectMake(self.reloadButton.frame.origin.x,\n                                                  self.reloadButton.frame.origin.y + 2 * (kButtonHeight + kButtonSpacer + bYOffset),\n                                                  kReloadButtonWidth,\n                                                  kButtonHeight);\n\t} else {\n\t\tself.ambientAudioButton.frame = CGRectMake(self.reloadButton.frame.origin.x -\n\t\t                                           self.reloadButton.frame.size.width - kButtonSpacer,\n                                                   self.reloadButton.frame.origin.y + bYOffset,\n                                                   kReloadButtonWidth,\n                                                   kButtonHeight);\n\t\tself.allowMixingButton.frame = CGRectMake(self.reloadButton.frame.origin.x - 2 * (self.reloadButton.frame.size.width + kButtonSpacer),\n                                                  self.reloadButton.frame.origin.y + bYOffset,\n                                                  kReloadButtonWidth,\n                                                  kButtonHeight);\n\t}\n    \n}\n\n- (void)layoutLabels {\n\tCGSize viewSize = self.view.bounds.size;\n\tconst CGFloat kPSLabelWidth = 100.0;\n    \n\tCGFloat pickerLabelsYOffset = viewSize.height - self.settingsPicker.frame.size.height - kLabelHeight;\n\tCGFloat drawingWidth = viewSize.width - kFramePadding * 2;\n\tCGFloat xOffset = kFramePadding + 2;\n\tUILabel *srLabel = [self addLabelWithText:@\"samplerate\"];\n\tsrLabel.frame = CGRectIntegral(CGRectMake(xOffset,\n\t\t\t\t\t\t\t\t\t\t\t  pickerLabelsYOffset,\n\t\t\t\t\t\t\t\t\t\t\t  drawingWidth * kPickerFirstComponentProportion,\n\t\t\t\t\t\t\t\t\t\t\t  kLabelHeight));\n\t\n\tUILabel *insLabel = [self addLabelWithText:@\"ins\"];\n\txOffset += kPickerFirstComponentProportion * drawingWidth + 2;\n\tinsLabel.frame = CGRectIntegral(CGRectMake(xOffset,\n\t\t\t\t\t\t\t\t\t\t\t   pickerLabelsYOffset,\n\t\t\t\t\t\t\t\t\t\t\t   drawingWidth * kPickerOtherComponentsProportion,\n\t\t\t\t\t\t\t\t\t\t\t   kLabelHeight));\n\t\n\tUILabel *outsLabel = [self addLabelWithText:@\"outs\"];\n\txOffset += kPickerOtherComponentsProportion * drawingWidth;\n\toutsLabel.frame = CGRectIntegral(CGRectMake(xOffset,\n\t\t\t\t\t\t\t\t\t\t\t\tpickerLabelsYOffset,\n\t\t\t\t\t\t\t\t\t\t\t\tdrawingWidth * kPickerOtherComponentsProportion,\n\t\t\t\t\t\t\t\t\t\t\t\tkLabelHeight));\n\tUILabel *ticksLabel = [self addLabelWithText:@\"ticks\"];\n\txOffset += kPickerOtherComponentsProportion * drawingWidth;\n\tticksLabel.frame = CGRectIntegral(CGRectMake(xOffset,\n\t\t\t\t\t\t\t\t\t\t\t\t pickerLabelsYOffset,\n\t\t\t\t\t\t\t\t\t\t\t\t drawingWidth * kPickerOtherComponentsProportion,\n\t\t\t\t\t\t\t\t\t\t\t\t kLabelHeight));\n    \n\tUILabel *psLabel = [self addLabelWithText:@\"patch selector\"];\n\tpsLabel.textAlignment = NSTextAlignmentCenter;\n\tCGFloat psLabelYOffset = self.patchSelector.frame.origin.y - kLabelHeight - 2;\n\tpsLabel.frame = CGRectIntegral(CGRectMake((viewSize.width - kPSLabelWidth) * 0.5,\n\t\t\t\t\t\t\t\t\t\t\t  psLabelYOffset,\n\t\t\t\t\t\t\t\t\t\t\t  kPSLabelWidth,\n\t\t\t\t\t\t\t\t\t\t\t  kLabelHeight));\n}\n\n- (UILabel *)addLabelWithText:(NSString *)text {\n\tUILabel *label = [[UILabel alloc] init];\n\t[self.view addSubview:label];\n\tlabel.text = text;\n\tlabel.textColor = [UIColor lightGrayColor];\n\tlabel.backgroundColor = [UIColor clearColor];\n\tlabel.font = [UIFont systemFontOfSize:14];\n\treturn label;\n}\n\n- (UIButton *)addButtonWithText:(NSString *)text selector:(SEL)selector {\n\tUIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];\n\t[button setTitle:text forState:UIControlStateNormal];\n\t[button addTarget:self action:selector forControlEvents:UIControlEventTouchUpInside];\n\t\n\t[button setTitleShadowColor:[UIColor darkGrayColor] forState:UIControlStateNormal];\n\tbutton.titleLabel.shadowOffset = CGSizeMake(0.0, -1.0);\n\tbutton.titleLabel.font = [UIFont boldSystemFontOfSize:kButtonFontSize];\n\t\n\t[button setTitleColor:[UIColor colorWithRed:0.75 green:0.75 blue:0.75 alpha:1.0] forState:UIControlStateNormal];\n\t[button setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];\n\t[button setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];\n    \n\tUIImage *normalImage = [[UIImage imageNamed:@\"button-normal.png\"] stretchableImageWithLeftCapWidth:10 topCapHeight:0];\n\t[button setBackgroundImage:normalImage forState:UIControlStateNormal];\n\tUIImage *pressedImage = [[UIImage imageNamed:@\"button-pressed.png\"] stretchableImageWithLeftCapWidth:10 topCapHeight:0];\n\t[button setBackgroundImage:pressedImage forState:UIControlStateHighlighted];\n\t[button setBackgroundImage:pressedImage forState:UIControlStateSelected];\n\t\n\t[self.view addSubview:button];\n\treturn button;\n}\n\n#pragma mark - Private (Selectors)\n\n- (void)activeButtonWasTapped:(UIButton *)sender {\n\tsender.selected = !sender.selected;\n\t[self.audioController setActive:sender.selected];\n}\n\n// configure PdAudioController, then update the picker with the actual settings\n- (void)reloadButtonWasTapped:(UIButton *)sender {\n\tRLog(@\"reloading audio configuration\");\n\t[self configureAudio];\n    \n\t[self.reloadButton.layer removeAnimationForKey:@\"shadow\"];\n\t[self.audioController print];\n\tself.reloadButton.enabled = NO;\n}\n\n- (void)ambientButtonWasTapped:(UIButton *)sender {\n\tsender.selected = !sender.selected;\n    if (sender.selected) {\n        [self setPickerValue:0 component:SettingsPickerComponentNumberInputChannels animated:YES];\n    }\n\tRLog(@\"selected: %d\", sender.selected);\n\t[self indicateSettingsChanged];\n}\n\n- (void)allowMixingButtonWasTapped:(UIButton *)sender {\n\tsender.selected = !sender.selected;\n\tRLog(@\"selected: %d\", sender.selected);\n\t[self indicateSettingsChanged];\n}\n\n#pragma mark - Private (Audio)\n\n- (void)configureAudio {\n\tPdAudioStatus status;\n\tint sampleRate = [self pickerValueForComponent:SettingsPickerComponentSampleRate];\n\tint numInputs = [self pickerValueForComponent:SettingsPickerComponentNumberInputChannels];\n\tint numOutputs = [self pickerValueForComponent:SettingsPickerComponentNumberOutputChannels];\n\t\n\tif (self.ambientAudioButton.selected) {\n\t\tstatus = [self.audioController configureAmbientWithSampleRate:sampleRate numberChannels:numOutputs mixingEnabled:self.allowMixingButton.selected];\n\t} else {\n        int numChannels = (numInputs > numOutputs) ? numInputs : numOutputs;\n\t\tstatus = [self.audioController configurePlaybackWithSampleRate:sampleRate numberChannels:numChannels\n                                                          inputEnabled:(numInputs > 0) mixingEnabled:self.allowMixingButton.selected];\n\t}\n\tif (status == PdAudioError) {\n\t\tRLog(@\"Error configuring PdAudioController\");\n        [self.reloadButton setTitle:@\"Error!\" forState:UIControlStateNormal];\n\t} else if (status == PdAudioPropertyChanged) {\n\t\tRLog(@\"Could not configure with provided properties (samplerate: %d, numInputs: %d, numOutputs: %d)\", sampleRate, numInputs, numOutputs);\n\t\tRLog(@\"Instead got samplerate: %d, numChannels: %d\", self.audioController.sampleRate, self.audioController.numberChannels);\n        [self.reloadButton setTitle:@\"Property Changed!\" forState:UIControlStateNormal];\n\t} else {\n        [self.reloadButton setTitle:@\"Success!\" forState:UIControlStateNormal];\n    }\n    [self updatePickerSettings];\n}\n\n- (void)patchSelectorChanged:(UISegmentedControl *)sender {\n    NSString *name = [sender titleForSegmentAtIndex:sender.selectedSegmentIndex];\n\tself.patch = [PdFile openFileNamed:name path:[[NSBundle mainBundle] resourcePath]];\n\tif (self.patch) {\n\t\tRLog(@\"opened patch: %@\", name);\n\t} else {\n\t\tRError(@\"couldn't open patch: %@\", name);\n\t}\n\t[PdBase sendFloat:95 toReceiver:@\"mag\"];\n}\n\n// TODO: test with bogus values\n- (void)fillSettingsArray {\n\tconst int kNumTickOptions = 32;\n    \n\tNSArray *sampleratesArray = [NSArray arrayWithObjects: @\"8000\", @\"22050\", @\"24000\", @\"32000\", @\"44100\", @\"48000\", nil];\n\t\n\tNSArray *inputChannelsArray = [NSArray arrayWithObjects:@\"0\", @\"1\", @\"2\", nil];\n\tNSArray *outputChannelsArray = [NSArray arrayWithObjects:@\"0\", @\"1\", @\"2\", nil];\n\t\n\tNSMutableArray *ticksArray = [NSMutableArray arrayWithCapacity:kNumTickOptions];\n\tfor (int i = 1; i <= 64; i++) {\n\t\t[ticksArray addObject:[NSString stringWithFormat:@\"%d\", i]];\n\t}\n\t\n\tself.settingsArray = [NSArray arrayWithObjects:sampleratesArray,\n\t\t\t\t\t\t  inputChannelsArray,\n\t\t\t\t\t\t  outputChannelsArray,\n\t\t\t\t\t\t  ticksArray,\n\t\t\t\t\t\t  nil];\n}\n\n- (void)updatePickerSettings {\n\t[self setPickerValue:self.audioController.sampleRate component:SettingsPickerComponentSampleRate animated:YES];\n\t[self setPickerValue:(self.audioController.inputEnabled ? self.audioController.numberChannels : 0) component:SettingsPickerComponentNumberInputChannels animated:YES];\n\t[self setPickerValue:self.audioController.numberChannels component:SettingsPickerComponentNumberOutputChannels animated:YES];\n\t[self setPickerValue:self.audioController.ticksPerBuffer component:SettingsPickerComponentNumberTicks animated:YES];\n}\n\n- (int)pickerValueForComponent:(SettingsPickerComponent)component {\n\tint row = (int)[self.settingsPicker selectedRowInComponent:component];\n\tNSString *value = [[self.settingsArray objectAtIndex:component] objectAtIndex:row];\n\treturn [value intValue];\n}\n\n- (void)setPickerValue:(int)value component:(SettingsPickerComponent)component animated:(BOOL)animated {\n\tNSString *valueString = [NSString stringWithFormat:@\"%d\", value];\n\tNSArray *componentArray = [self.settingsArray objectAtIndex:component];\n\tint row = 0;\n\tfor (NSString *pickerValue in componentArray) {\n\t\tif ([valueString isEqualToString:pickerValue]) {\n\t\t\t[self.settingsPicker selectRow:row inComponent:component animated:animated];\n\t\t\treturn;\n\t\t}\n\t\trow++;\n\t}\n\t// if we made it here, there was a problem\n\tRLog(@\"* ERROR * could not find a value equal to %d in component %d\", value, component);\n}\n\n- (void)indicateSettingsChanged {\n\tif (!self.reloadButton.enabled) {\n\t\tself.reloadButton.enabled = YES;\n        [self.reloadButton setTitle:@\"Reload Settings\" forState:UIControlStateNormal];\n        \n\t\tself.reloadButton.layer.shadowRadius = 5.0;\n\t\tself.reloadButton.layer.shadowColor = [UIColor cyanColor].CGColor;\n\t\tself.reloadButton.layer.shadowOpacity = 0.0;\n\t\tself.reloadButton.layer.shadowOffset = CGSizeMake(0.0, 0.0);\n\t\tCABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@\"shadowOpacity\"]; \n\t\tanimation.fromValue = [NSNumber numberWithFloat:0.0];\n\t\tanimation.toValue = [NSNumber numberWithFloat:0.4];\n\t\tanimation.autoreverses = YES;\n\t\tanimation.duration = .4;\n\t\tanimation.repeatCount = NSIntegerMax;\n\t\t[self.reloadButton.layer addAnimation:animation forKey:@\"shadow\"];\n\t}\n}\n\n@end\n"
  },
  {
    "path": "PdSettings/PdSettings/RDebug.h",
    "content": "//\n//  WDebug.h\n//  Wombat\n//\n//  Created by Richard Eakin on 1/08/11.\n//  Copyright 2011 Richard Eakin. All rights reserved.\n//\n\n//////////////////////////////////////////////////////////////////////\n#ifdef R_DEBUG\n//////////////////// Debug Mode //////////////////////////////////////\n\n#include <assert.h>\n#include <stdbool.h>\n#include <sys/types.h>\n#include <unistd.h>\n#include <sys/sysctl.h>\n\n// Returns true if the current process is being debugged (either \n// running under the debugger or has a debugger attached post facto).\n// from: Apple's Technical Q&A QA1361 - http://developer.apple.com/library/mac/#qa/qa1361/_index.html\nstatic inline bool AmIBeingDebugged(void) {\n    int                 junk;\n    int                 mib[4];\n    struct kinfo_proc   info;\n    size_t              size;\n    info.kp_proc.p_flag = 0;\n    mib[0] = CTL_KERN;\n    mib[1] = KERN_PROC;\n    mib[2] = KERN_PROC_PID;\n    mib[3] = getpid();\n    size = sizeof(info);\n    junk = sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, NULL, 0);\n    assert(junk == 0);\n    return ( (info.kp_proc.p_flag & P_TRACED) != 0 );\n}\n\n// RBreak () - method to programmatically break at the line where it was called\n// from: http://danwright.info/blog/author/dan/page/3/ and http://cocoawithlove.com/2008/03/break-into-debugger.html\n#if __ppc64__ || __ppc__\n#define RBreak() \\\ndo { \\\n\tif(AmIBeingDebugged()) \\\n\t{ \\\n\t__asm__(\"li r0, 20\\nsc\\nnop\\nli r0, 37\\nli r4, 2\\nsc\\nnop\\n\" \\\n\t: : : \"memory\",\"r0\",\"r3\",\"r4\" ); \\\n\t} \\\n} while (0)\n#elif __i386__ || __x86_64__\n#define RBreak() \\\ndo { \\\n\tif(AmIBeingDebugged()) { \\\n\t__asm__(\"int $3\\n\" : : ); \\\n\t} \\\n} while (0)\n#elif __arm__\n#define RBreak() \\\ndo { \\\n\tif (AmIBeingDebugged()) { \\\n\t\t__asm__(\"mov r0, #20\\nmov ip, r0\\nsvc 128\\nmov r1, #37\\nmov ip, r1\\nmov r1, #2\\nmov r2, #1\\n svc 128\\n\" : : : \"memory\",\"ip\",\"r0\",\"r1\",\"r2\"); \\\n\t} \\\n} while (0)\n#else // unknown architecture\n#define RBreak() \\\ndo { \\\n\tif (AmIBeingDebugged()) { \\\n\t\traise(SIGINT); \\\n\t} \\\n} while (0)\n#endif\n\n\n// RStrackTrace - print the stacktrace back to the specified depth. if depth == 0, the entire stacktrace is printed\n#define RStackTrace(depth) \\\ndo { \\\n\tprintf(\"%s * CALL STACK *\\n\", __PRETTY_FUNCTION__); \\\n\tint currentDepth = 0; \\\n\tfor (NSString* stackElement in [NSThread callStackSymbols]) { \\\n\t\tif (!depth || currentDepth++ < depth) { \\\n\t\t\tprintf (\"%s\\n\", [stackElement UTF8String]); \\\n\t\t} else { \\\n\t\t\tbreak; \\\n\t\t} \\\n\t} \\\n} while (0)\n\n\n#define RLog(nslog_string, ...) \\\ndo { \\\n\tprintf(\"%s\\t\", __PRETTY_FUNCTION__); \\\n\tprintf(\"%s\\n\", [[NSString stringWithFormat:nslog_string, ##__VA_ARGS__] UTF8String]); \\\n} while (0)\n\n#define RAssert(check_value)\t\\\ndo { \\\n\tif (!(check_value)) { \\\n\t\tprintf(\"%s * ASSERT FAILED *\\t\", __PRETTY_FUNCTION__); \\\n\t\tprintf(\"'%s'\\n\", #check_value); \\\n\t\tRBreak(); \\\n\t} \\\n} while (0)\n\n#define RAssertM(check_value, nslog_string, ...) \\\ndo { \\\n\tif (!(check_value)) { \\\n\t\tprintf(\"%s * ASSERT FAILED *\\t\", __PRETTY_FUNCTION__); \\\n\t\tprintf(\"%s\\n\", [[NSString stringWithFormat:nslog_string, ##__VA_ARGS__] UTF8String]); \\\n\t\tRBreak(); \\\n\t} \\\n} while (0)\n\n#define RWarnCheck(check_value, nslog_string, ...) \\\ndo { \\\n\tif (!(check_value)) { \\\n\t\t{ printf(\"%s * WARNING *\\t\", __PRETTY_FUNCTION__); \\\n\t\tprintf(\"%s\\n\", [[NSString stringWithFormat:nslog_string, ##__VA_ARGS__] UTF8String]); \\\n\t} \\\n} while (0)\n\n#define RWarning(nslog_string, ...) \\\ndo { \\\n\tprintf(\"%s * WARNING *\\t\", __PRETTY_FUNCTION__); \\\n\tprintf(\"%s\\n\", [[NSString stringWithFormat:nslog_string, ##__VA_ARGS__] UTF8String]); \\\n} while (0)\n\n#define RError(nslog_string, ...) \\\ndo { \\\n\tprintf(\"%s * ERROR *\\t\", __PRETTY_FUNCTION__); \\\n\tprintf(\"%s\\n\", [[NSString stringWithFormat:nslog_string, ##__VA_ARGS__] UTF8String]); \\\n} while (0)\n\n//////////////////////////////////////////////////////////////////////\n#else\n//////////////////// Release Mode ////////////////////////////////////\n\n#define RLog(...)\n#define RAssert(check_value)\n#define RAssertM(check_value, nslog_string, ...)\n#define RWarnCheck(check_value, nslog_string, ...)\n#define RWarning(nslog_string, ...)\n#define RError(nslog_string, ...)\n#define RBreak()\n\n#define RStackTrace()\n\n#endif\n"
  },
  {
    "path": "PdSettings/PdSettings/en.lproj/InfoPlist.strings",
    "content": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "PdSettings/PdSettings/main.m",
    "content": "//\n//  main.m\n//  PdSettings\n//\n//  Created by Richard Eakin on 18/09/11.\n//  Copyright 2011 Blarg. All rights reserved.\n//  Updated by Dan Wilcox 2018.\n//\n\n#import <UIKit/UIKit.h>\n#import \"PdSettingsAppDelegate.h\"\n\nint main(int argc, char *argv[]) {\n\t@autoreleasepool {\n\t\treturn UIApplicationMain(argc, argv, nil, NSStringFromClass(PdSettingsAppDelegate.class));\n\t}\n}\n"
  },
  {
    "path": "PdSettings/PdSettings.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t114DD8D714344B5700EA5EA7 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 114DD8D614344B5700EA5EA7 /* AVFoundation.framework */; };\n\t\t1151DD0414455C3300E1BAA8 /* button-normal.png in Resources */ = {isa = PBXBuildFile; fileRef = 1151DD0214455C3300E1BAA8 /* button-normal.png */; };\n\t\t1151DD0514455C3300E1BAA8 /* button-pressed.png in Resources */ = {isa = PBXBuildFile; fileRef = 1151DD0314455C3300E1BAA8 /* button-pressed.png */; };\n\t\t1151DD0814455C9900E1BAA8 /* testinput.pd in Resources */ = {isa = PBXBuildFile; fileRef = 1151DD0614455C9900E1BAA8 /* testinput.pd */; };\n\t\t1151DD0914455C9900E1BAA8 /* testoutput.pd in Resources */ = {isa = PBXBuildFile; fileRef = 1151DD0714455C9900E1BAA8 /* testoutput.pd */; };\n\t\t1151DD141445975F00E1BAA8 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1151DD131445975F00E1BAA8 /* QuartzCore.framework */; };\n\t\t11A8BDB41425EC200006B996 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 11A8BDB31425EC200006B996 /* UIKit.framework */; };\n\t\t11A8BDB61425EC200006B996 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 11A8BDB51425EC200006B996 /* Foundation.framework */; };\n\t\t11A8BDB81425EC200006B996 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 11A8BDB71425EC200006B996 /* CoreGraphics.framework */; };\n\t\t11A8BDBE1425EC200006B996 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 11A8BDBC1425EC200006B996 /* InfoPlist.strings */; };\n\t\t11A8BDC01425EC200006B996 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 11A8BDBF1425EC200006B996 /* main.m */; };\n\t\t11A8BDC41425EC200006B996 /* PdSettingsAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 11A8BDC31425EC200006B996 /* PdSettingsAppDelegate.m */; };\n\t\t11A8BDCA1425EC200006B996 /* PdSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11A8BDC91425EC200006B996 /* PdSettingsViewController.m */; };\n\t\t11A8BDE81425F4B10006B996 /* libpd-ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 11A8BDE51425F4930006B996 /* libpd-ios.a */; };\n\t\t11A8BDEA1425F4C10006B996 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 11A8BDE91425F4C10006B996 /* AudioToolbox.framework */; };\n\t\t3063EF2B21087CE200C8A4A2 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3063EF2A21087CE200C8A4A2 /* Default-568h@2x.png */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t1176E14115BB6E510061A139 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 11A8BDDD1425F4920006B996 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 119013AB1486450C00086F19;\n\t\t\tremoteInfo = \"libpd-osx\";\n\t\t};\n\t\t11A8BDE41425F4930006B996 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 11A8BDDD1425F4920006B996 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = D2AAC07E0554694100DB518D;\n\t\t\tremoteInfo = libpd;\n\t\t};\n\t\t11A8BDE61425F4A70006B996 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 11A8BDDD1425F4920006B996 /* libpd.xcodeproj */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D2AAC07D0554694100DB518D;\n\t\t\tremoteInfo = libpd;\n\t\t};\n\t\t3063EF25210867A500C8A4A2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 11A8BDDD1425F4920006B996 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 30C3D36D1FAA200100C67F08;\n\t\t\tremoteInfo = \"libpd-ios-multi\";\n\t\t};\n\t\t3063EF27210867A500C8A4A2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 11A8BDDD1425F4920006B996 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 30C3D2FA1FAA1FCC00C67F08;\n\t\t\tremoteInfo = \"libpd-osx-multi\";\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t114DD8D614344B5700EA5EA7 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };\n\t\t1151DD0214455C3300E1BAA8 /* button-normal.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"button-normal.png\"; path = \"Resources/button-normal.png\"; sourceTree = \"<group>\"; };\n\t\t1151DD0314455C3300E1BAA8 /* button-pressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = \"button-pressed.png\"; path = \"Resources/button-pressed.png\"; sourceTree = \"<group>\"; };\n\t\t1151DD0614455C9900E1BAA8 /* testinput.pd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = testinput.pd; path = Resources/testinput.pd; sourceTree = \"<group>\"; };\n\t\t1151DD0714455C9900E1BAA8 /* testoutput.pd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = testoutput.pd; path = Resources/testoutput.pd; sourceTree = \"<group>\"; };\n\t\t1151DD131445975F00E1BAA8 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };\n\t\t11A8BDAF1425EC200006B996 /* PdSettings.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PdSettings.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t11A8BDB31425EC200006B996 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };\n\t\t11A8BDB51425EC200006B996 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\t11A8BDB71425EC200006B996 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };\n\t\t11A8BDBB1425EC200006B996 /* PdSettings-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = \"PdSettings-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t11A8BDBD1425EC200006B996 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\t11A8BDBF1425EC200006B996 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t11A8BDC11425EC200006B996 /* PdSettings-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"PdSettings-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t11A8BDC21425EC200006B996 /* PdSettingsAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PdSettingsAppDelegate.h; sourceTree = \"<group>\"; };\n\t\t11A8BDC31425EC200006B996 /* PdSettingsAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PdSettingsAppDelegate.m; sourceTree = \"<group>\"; };\n\t\t11A8BDC81425EC200006B996 /* PdSettingsViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PdSettingsViewController.h; sourceTree = \"<group>\"; };\n\t\t11A8BDC91425EC200006B996 /* PdSettingsViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PdSettingsViewController.m; sourceTree = \"<group>\"; };\n\t\t11A8BDDC1425ED810006B996 /* RDebug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RDebug.h; sourceTree = \"<group>\"; };\n\t\t11A8BDDD1425F4920006B996 /* libpd.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = libpd.xcodeproj; path = ../libpd/libpd.xcodeproj; sourceTree = \"<group>\"; };\n\t\t11A8BDE91425F4C10006B996 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };\n\t\t3063EF2A21087CE200C8A4A2 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = \"Default-568h@2x.png\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t11A8BDAC1425EC200006B996 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1151DD141445975F00E1BAA8 /* QuartzCore.framework in Frameworks */,\n\t\t\t\t114DD8D714344B5700EA5EA7 /* AVFoundation.framework in Frameworks */,\n\t\t\t\t11A8BDEA1425F4C10006B996 /* AudioToolbox.framework in Frameworks */,\n\t\t\t\t11A8BDE81425F4B10006B996 /* libpd-ios.a in Frameworks */,\n\t\t\t\t11A8BDB41425EC200006B996 /* UIKit.framework in Frameworks */,\n\t\t\t\t11A8BDB61425EC200006B996 /* Foundation.framework in Frameworks */,\n\t\t\t\t11A8BDB81425EC200006B996 /* CoreGraphics.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t1151DCFE1445468100E1BAA8 /* Images */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1151DD0214455C3300E1BAA8 /* button-normal.png */,\n\t\t\t\t1151DD0314455C3300E1BAA8 /* button-pressed.png */,\n\t\t\t);\n\t\t\tname = Images;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t11A8BDA41425EC200006B996 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3063EF2A21087CE200C8A4A2 /* Default-568h@2x.png */,\n\t\t\t\t11A8BDDD1425F4920006B996 /* libpd.xcodeproj */,\n\t\t\t\t11A8BDB91425EC200006B996 /* Source */,\n\t\t\t\t11A8BDEB1425F7660006B996 /* Pd Patches */,\n\t\t\t\t1151DCFE1445468100E1BAA8 /* Images */,\n\t\t\t\t11A8BDB21425EC200006B996 /* Frameworks */,\n\t\t\t\t11A8BDB01425EC200006B996 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t11A8BDB01425EC200006B996 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t11A8BDAF1425EC200006B996 /* PdSettings.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t11A8BDB21425EC200006B996 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t114DD8D614344B5700EA5EA7 /* AVFoundation.framework */,\n\t\t\t\t11A8BDE91425F4C10006B996 /* AudioToolbox.framework */,\n\t\t\t\t11A8BDB31425EC200006B996 /* UIKit.framework */,\n\t\t\t\t11A8BDB51425EC200006B996 /* Foundation.framework */,\n\t\t\t\t1151DD131445975F00E1BAA8 /* QuartzCore.framework */,\n\t\t\t\t11A8BDB71425EC200006B996 /* CoreGraphics.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t11A8BDB91425EC200006B996 /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t11A8BDDC1425ED810006B996 /* RDebug.h */,\n\t\t\t\t11A8BDC21425EC200006B996 /* PdSettingsAppDelegate.h */,\n\t\t\t\t11A8BDC31425EC200006B996 /* PdSettingsAppDelegate.m */,\n\t\t\t\t11A8BDC81425EC200006B996 /* PdSettingsViewController.h */,\n\t\t\t\t11A8BDC91425EC200006B996 /* PdSettingsViewController.m */,\n\t\t\t\t11A8BDBA1425EC200006B996 /* Supporting Files */,\n\t\t\t);\n\t\t\tname = Source;\n\t\t\tpath = PdSettings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t11A8BDBA1425EC200006B996 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t11A8BDBB1425EC200006B996 /* PdSettings-Info.plist */,\n\t\t\t\t11A8BDBC1425EC200006B996 /* InfoPlist.strings */,\n\t\t\t\t11A8BDBF1425EC200006B996 /* main.m */,\n\t\t\t\t11A8BDC11425EC200006B996 /* PdSettings-Prefix.pch */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t11A8BDDE1425F4920006B996 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t11A8BDE51425F4930006B996 /* libpd-ios.a */,\n\t\t\t\t1176E14215BB6E510061A139 /* libpd-osx.a */,\n\t\t\t\t3063EF26210867A500C8A4A2 /* libpd-ios-multi.a */,\n\t\t\t\t3063EF28210867A500C8A4A2 /* libpd-osx-multi.a */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t11A8BDEB1425F7660006B996 /* Pd Patches */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1151DD0614455C9900E1BAA8 /* testinput.pd */,\n\t\t\t\t1151DD0714455C9900E1BAA8 /* testoutput.pd */,\n\t\t\t);\n\t\t\tname = \"Pd Patches\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t11A8BDAE1425EC200006B996 /* PdSettings */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 11A8BDD01425EC200006B996 /* Build configuration list for PBXNativeTarget \"PdSettings\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t11A8BDAB1425EC200006B996 /* Sources */,\n\t\t\t\t11A8BDAC1425EC200006B996 /* Frameworks */,\n\t\t\t\t11A8BDAD1425EC200006B996 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t11A8BDE71425F4A70006B996 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = PdSettings;\n\t\t\tproductName = PdSettings;\n\t\t\tproductReference = 11A8BDAF1425EC200006B996 /* PdSettings.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t11A8BDA61425EC200006B996 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0930;\n\t\t\t\tORGANIZATIONNAME = Blarg;\n\t\t\t};\n\t\t\tbuildConfigurationList = 11A8BDA91425EC200006B996 /* Build configuration list for PBXProject \"PdSettings\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 11A8BDA41425EC200006B996;\n\t\t\tproductRefGroup = 11A8BDB01425EC200006B996 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectReferences = (\n\t\t\t\t{\n\t\t\t\t\tProductGroup = 11A8BDDE1425F4920006B996 /* Products */;\n\t\t\t\t\tProjectRef = 11A8BDDD1425F4920006B996 /* libpd.xcodeproj */;\n\t\t\t\t},\n\t\t\t);\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t11A8BDAE1425EC200006B996 /* PdSettings */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXReferenceProxy section */\n\t\t1176E14215BB6E510061A139 /* libpd-osx.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-osx.a\";\n\t\t\tremoteRef = 1176E14115BB6E510061A139 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t11A8BDE51425F4930006B996 /* libpd-ios.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-ios.a\";\n\t\t\tremoteRef = 11A8BDE41425F4930006B996 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t3063EF26210867A500C8A4A2 /* libpd-ios-multi.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-ios-multi.a\";\n\t\t\tremoteRef = 3063EF25210867A500C8A4A2 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t3063EF28210867A500C8A4A2 /* libpd-osx-multi.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-osx-multi.a\";\n\t\t\tremoteRef = 3063EF27210867A500C8A4A2 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n/* End PBXReferenceProxy section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t11A8BDAD1425EC200006B996 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t11A8BDBE1425EC200006B996 /* InfoPlist.strings in Resources */,\n\t\t\t\t1151DD0414455C3300E1BAA8 /* button-normal.png in Resources */,\n\t\t\t\t1151DD0514455C3300E1BAA8 /* button-pressed.png in Resources */,\n\t\t\t\t1151DD0814455C9900E1BAA8 /* testinput.pd in Resources */,\n\t\t\t\t1151DD0914455C9900E1BAA8 /* testoutput.pd in Resources */,\n\t\t\t\t3063EF2B21087CE200C8A4A2 /* Default-568h@2x.png in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t11A8BDAB1425EC200006B996 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t11A8BDC01425EC200006B996 /* main.m in Sources */,\n\t\t\t\t11A8BDC41425EC200006B996 /* PdSettingsAppDelegate.m in Sources */,\n\t\t\t\t11A8BDCA1425EC200006B996 /* PdSettingsViewController.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t11A8BDE71425F4A70006B996 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = libpd;\n\t\t\ttargetProxy = 11A8BDE61425F4A70006B996 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t11A8BDBC1425EC200006B996 /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t11A8BDBD1425EC200006B996 /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t11A8BDCE1425EC200006B996 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_THUMB_SUPPORT = NO;\n\t\t\t\tGCC_VERSION = \"\";\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tOTHER_CFLAGS = \"-DR_DEBUG=1\";\n\t\t\t\tOTHER_LDFLAGS = \"-ObjC\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = ../libpd/objc;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t11A8BDCF1425EC200006B996 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_THUMB_SUPPORT = NO;\n\t\t\t\tGCC_VERSION = \"\";\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tOTHER_CFLAGS = \"-DNS_BLOCK_ASSERTIONS=1\";\n\t\t\t\tOTHER_LDFLAGS = \"-ObjC\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = ../libpd/objc;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t11A8BDD11425EC200006B996 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"PdSettings/PdSettings-Prefix.pch\";\n\t\t\t\tGCC_THUMB_SUPPORT = NO;\n\t\t\t\tGCC_VERSION = \"\";\n\t\t\t\tINFOPLIST_FILE = \"PdSettings/PdSettings-Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = cc.libpd.PdSettings;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = 1;\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t11A8BDD21425EC200006B996 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"PdSettings/PdSettings-Prefix.pch\";\n\t\t\t\tGCC_THUMB_SUPPORT = NO;\n\t\t\t\tGCC_VERSION = \"\";\n\t\t\t\tINFOPLIST_FILE = \"PdSettings/PdSettings-Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = cc.libpd.PdSettings;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = 1;\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t11A8BDA91425EC200006B996 /* Build configuration list for PBXProject \"PdSettings\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t11A8BDCE1425EC200006B996 /* Debug */,\n\t\t\t\t11A8BDCF1425EC200006B996 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t11A8BDD01425EC200006B996 /* Build configuration list for PBXNativeTarget \"PdSettings\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t11A8BDD11425EC200006B996 /* Debug */,\n\t\t\t\t11A8BDD21425EC200006B996 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 11A8BDA61425EC200006B996 /* Project object */;\n}\n"
  },
  {
    "path": "PdSettings/ReadMe.txt",
    "content": "PdSettings iOS app (part of pd-for-ios, example apps for libpd in iOS)\nNov 21, 2011\n\nThis sample app demonstrates the various audio settings and how to change\nthem at runtime.  There are two classes in use. PdAudioUnit, a class built\naround an AudioUnit, is the core of the audio processing. It asks PdBase\nto process the audio. PdAudioController is a high level (convenience, if\nyou will) class, which tries to govern PdAudioUnit and the app's Audio\nSession at the same time, deciding whether the settings are OK, need adjustment,\nor if there is an unrecoverable error.\n\n------ Notes on using PdAudioController in your project -------------------\n\nIn order to use PdAudioController, you need to add the AVAudioSession\nframework to your project's \"Link Binary With Libraries\" section under\n\"Build Phases\".  You can also then interact with the shared instance of\nthe AVAudioSession (there is only one per app) to get or set specific properties.\n\n------ Notes on configuring PdAudioController -----------------------------\n\nMany of the settings won't be in effect until you\nreconfigure the Audio Session / Audio Unit, tap on the 'Reload Settings'\nbutton in order to update the audio components, while others are settable\non the fly (an important one is the ticksPerBuffer size).  As such, there\nare multiple configure methods that each return a PdAudioStatus code, each\ndocumented with it's purpose at a high level in PdAudioController.h.\n\n------ Notes on background audio: -----------------------------------------\n\nIn order for the audio callbacks to continue producing audio in the\nbackground, you need to add an array entry to your app's info.plist file\ncalled \"UIBackgroundModes\" and set one of it's values to \"audio\" (Xcode 4\nautomatically show's the human readable name for this, \"Required background\nmodes\" for the key and \"App plays audio\" for the value within the created \narray).  The PdSettings example app will always give provide mixing enabled,\nbut this is setable in PdAudioController's configure method.\n\n------ License ------------------------------------------------------------\n\nThis software is copyrighted by Miller Puckette, Reality Jockey,\nPeter Brinkmann, Richard Eakin and others.  \nThe following terms (the \"Standard Improved BSD License\") apply to all files \nassociated with the software unless explicitly disclaimed in individual files:\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above  \n   copyright notice, this list of conditions and the following \n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n3. The name of the author may not be used to endorse or promote\n   products derived from this software without specific prior \n   written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\nBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\nIN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\nTHE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "PdSettings/Resources/testinput.pd",
    "content": "#N canvas 584 171 580 466 10;\n#X obj 153 70 adc~;\n#X obj 140 217 *~;\n#X obj 179 217 *~;\n#X obj 85 374 dac~;\n#X obj 225 153 osc~;\n#X obj 291 142 sig~;\n#X obj 291 122 dbtorms;\n#X obj 225 182 *~;\n#X obj 225 128 +~ 1000;\n#X obj 225 102 *~ 50;\n#X obj 225 71 osc~ 1;\n#X floatatom 291 102 5 0 0 0 - - -;\n#X obj 288 70 r mag;\n#X obj -93 255 delwrite~ blarg0 500;\n#X obj 36 256 delwrite~ blarg1 500;\n#X obj -107 103 delread~ blarg0 500;\n#X obj 16 103 delread~ blarg1 500;\n#X obj 85 346 +~;\n#X obj 125 347 +~;\n#X obj 16 124 *~ 0.35;\n#X obj -107 125 *~ 0.35;\n#X connect 0 0 1 0;\n#X connect 0 1 2 0;\n#X connect 1 0 17 1;\n#X connect 1 0 13 0;\n#X connect 2 0 18 1;\n#X connect 2 0 14 0;\n#X connect 4 0 7 0;\n#X connect 5 0 7 1;\n#X connect 6 0 5 0;\n#X connect 7 0 1 1;\n#X connect 7 0 2 1;\n#X connect 8 0 4 0;\n#X connect 9 0 8 0;\n#X connect 10 0 9 0;\n#X connect 11 0 6 0;\n#X connect 12 0 11 0;\n#X connect 15 0 20 0;\n#X connect 16 0 19 0;\n#X connect 17 0 3 0;\n#X connect 18 0 3 1;\n#X connect 19 0 14 0;\n#X connect 19 0 18 0;\n#X connect 20 0 13 0;\n#X connect 20 0 17 0;\n"
  },
  {
    "path": "PdSettings/Resources/testoutput.pd",
    "content": "#N canvas 544 67 475 289 10;\n#X obj 94 31 osc~ 440;\n#X obj 104 131 dac~;\n#X obj 104 102 *~;\n#X obj 157 78 sig~;\n#X obj 157 58 dbtorms;\n#X obj 157 31 r mag;\n#X obj 279 207 s test-value;\n#X obj 280 122 metro 1000;\n#X obj 280 96 loadbang;\n#X obj 279 156 f 0;\n#X obj 311 157 + 1;\n#X connect 0 0 2 0;\n#X connect 2 0 1 0;\n#X connect 2 0 1 1;\n#X connect 3 0 2 1;\n#X connect 4 0 3 0;\n#X connect 5 0 4 0;\n#X connect 7 0 9 0;\n#X connect 8 0 7 0;\n#X connect 9 0 6 0;\n#X connect 9 0 10 0;\n#X connect 10 0 9 1;\n"
  },
  {
    "path": "PdTest01/Classes/PdTest01AppDelegate.h",
    "content": "//\n//  PdTest01AppDelegate.h\n//  PdTest01\n//\n//  Created by Richard Lawler on 10/3/10.\n/**\n * This software is copyrighted by Richard Lawler. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import <UIKit/UIKit.h>\n\n@interface PdTest01AppDelegate : NSObject <UIApplicationDelegate>\n@property (nonatomic, retain) UIWindow *window;\n@end\n\n"
  },
  {
    "path": "PdTest01/Classes/PdTest01AppDelegate.m",
    "content": "//\n//  PdTest01AppDelegate.m\n//  PdTest01\n//\n//  Created by Richard Lawler on 10/3/10.\n/**\n * This software is copyrighted by Richard Lawler. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import \"PdTest01AppDelegate.h\"\n#import \"PdTest01ViewController.h\"\n#import \"PdAudioController.h\"\n#import \"PdBase.h\"\n\n@interface PdTest01AppDelegate()\n@property (nonatomic, retain) PdAudioController *audioController;\n@end\n\n@implementation PdTest01AppDelegate\n\n@synthesize window;\n@synthesize audioController = audioController_;\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    \n\tself.audioController = [[PdAudioController alloc] init];\n\t[self.audioController configurePlaybackWithSampleRate:44100 numberChannels:2 inputEnabled:YES mixingEnabled:NO];\n\t[PdBase openFile:@\"test.pd\" path:[[NSBundle mainBundle] resourcePath]];\n\t[self.audioController setActive:YES];\n\t[self.audioController print];\n\t\n\tself.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];\n\tself.window.rootViewController = [[PdTest01ViewController alloc] init];\n    [self.window makeKeyAndVisible];\n\treturn YES;\n}\n\n- (void)dealloc {\n\tself.audioController = nil;\n\tself.window = nil;\n}\n\n@end\n"
  },
  {
    "path": "PdTest01/Classes/PdTest01ViewController.h",
    "content": "//\n//  PdTest01ViewController.h\n//  PdTest01\n//\n//  Created by Richard Lawler on 10/3/10.\n/**\n * This software is copyrighted by Richard Lawler. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import <UIKit/UIKit.h>\n\n@interface PdTest01ViewController : UIViewController {\n\n}\n\n@end\n\n"
  },
  {
    "path": "PdTest01/Classes/PdTest01ViewController.m",
    "content": "//\n//  PdTest01ViewController.m\n//  PdTest01\n//\n//  Created by Richard Lawler on 10/3/10.\n/**\n * This software is copyrighted by Richard Lawler. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import \"PdTest01ViewController.h\"\n\n@implementation PdTest01ViewController\n\n- (void)viewDidLoad {\n\tself.view.backgroundColor = [UIColor blueColor];\n}\n\n@end\n"
  },
  {
    "path": "PdTest01/PdTest01-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>English</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIconFile</key>\n\t<string></string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.1</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.0</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "PdTest01/PdTest01.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t1152A402147E9D6C00DCD675 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1152A401147E9D6C00DCD675 /* AVFoundation.framework */; };\n\t\t1D3623260D0F684500981E51 /* PdTest01AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* PdTest01AppDelegate.m */; };\n\t\t1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };\n\t\t28D7ACF80DDB3853001CB0EB /* PdTest01ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D7ACF70DDB3853001CB0EB /* PdTest01ViewController.m */; };\n\t\t3063EF36210888BE00C8A4A2 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3063EF35210888BE00C8A4A2 /* Default-568h@2x.png */; };\n\t\t30ADB08A1E5412FD00CB0E41 /* libpd-ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 30ADB0871E5412E700CB0E41 /* libpd-ios.a */; };\n\t\tDC0C300E125D15FC008B6389 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC0C300D125D15FC008B6389 /* Foundation.framework */; };\n\t\tDC0C3012125D160B008B6389 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC0C3011125D160B008B6389 /* UIKit.framework */; };\n\t\tDC0C3016125D1614008B6389 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC0C3015125D1614008B6389 /* CoreGraphics.framework */; };\n\t\tDC35155112676B75004825FB /* ReadMe.txt in Resources */ = {isa = PBXBuildFile; fileRef = DC35155012676B75004825FB /* ReadMe.txt */; };\n\t\tDC609326125BBEED00F8509D /* test.pd in Resources */ = {isa = PBXBuildFile; fileRef = DC609325125BBEED00F8509D /* test.pd */; };\n\t\tDCCC7CDF125C3E0F002CF6AC /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCCC7CDE125C3E0F002CF6AC /* AudioToolbox.framework */; };\n\t\tDCD724CF125D1A1E000A4BDE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCD724CE125D1A1E000A4BDE /* Foundation.framework */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t3063EF31210888AF00C8A4A2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 30ADB0811E5412E700CB0E41 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 30C3D36D1FAA200100C67F08;\n\t\t\tremoteInfo = \"libpd-ios-multi\";\n\t\t};\n\t\t3063EF33210888AF00C8A4A2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 30ADB0811E5412E700CB0E41 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 30C3D2FA1FAA1FCC00C67F08;\n\t\t\tremoteInfo = \"libpd-osx-multi\";\n\t\t};\n\t\t30ADB0861E5412E700CB0E41 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 30ADB0811E5412E700CB0E41 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = D2AAC07E0554694100DB518D;\n\t\t\tremoteInfo = \"libpd-ios\";\n\t\t};\n\t\t30ADB0881E5412E700CB0E41 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 30ADB0811E5412E700CB0E41 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 119013AB1486450C00086F19;\n\t\t\tremoteInfo = \"libpd-osx\";\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t1152A401147E9D6C00DCD675 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };\n\t\t1D3623240D0F684500981E51 /* PdTest01AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PdTest01AppDelegate.h; sourceTree = \"<group>\"; };\n\t\t1D3623250D0F684500981E51 /* PdTest01AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PdTest01AppDelegate.m; sourceTree = \"<group>\"; };\n\t\t1D6058910D05DD3D006BFB54 /* PdTest01.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PdTest01.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t28D7ACF60DDB3853001CB0EB /* PdTest01ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PdTest01ViewController.h; sourceTree = \"<group>\"; };\n\t\t28D7ACF70DDB3853001CB0EB /* PdTest01ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PdTest01ViewController.m; sourceTree = \"<group>\"; };\n\t\t29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t3063EF35210888BE00C8A4A2 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = \"Default-568h@2x.png\"; sourceTree = \"<group>\"; };\n\t\t30ADB0811E5412E700CB0E41 /* libpd.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = libpd.xcodeproj; path = ../libpd/libpd.xcodeproj; sourceTree = \"<group>\"; };\n\t\t32CA4F630368D1EE00C91783 /* PdTest01_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PdTest01_Prefix.pch; sourceTree = \"<group>\"; };\n\t\t8D1107310486CEB800E47090 /* PdTest01-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = \"PdTest01-Info.plist\"; plistStructureDefinitionIdentifier = \"com.apple.xcode.plist.structure-definition.iphone.info-plist\"; sourceTree = \"<group>\"; };\n\t\tDC0C300D125D15FC008B6389 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\tDC0C3011125D160B008B6389 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };\n\t\tDC0C3015125D1614008B6389 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };\n\t\tDC35155012676B75004825FB /* ReadMe.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ReadMe.txt; sourceTree = \"<group>\"; };\n\t\tDC609325125BBEED00F8509D /* test.pd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = test.pd; path = Resources/test.pd; sourceTree = \"<group>\"; };\n\t\tDCCC7CDE125C3E0F002CF6AC /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = \"<absolute>\"; };\n\t\tDCD724CE125D1A1E000A4BDE /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = \"<absolute>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t1D60588F0D05DD3D006BFB54 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t30ADB08A1E5412FD00CB0E41 /* libpd-ios.a in Frameworks */,\n\t\t\t\t1152A402147E9D6C00DCD675 /* AVFoundation.framework in Frameworks */,\n\t\t\t\tDCCC7CDF125C3E0F002CF6AC /* AudioToolbox.framework in Frameworks */,\n\t\t\t\tDC0C300E125D15FC008B6389 /* Foundation.framework in Frameworks */,\n\t\t\t\tDC0C3012125D160B008B6389 /* UIKit.framework in Frameworks */,\n\t\t\t\tDC0C3016125D1614008B6389 /* CoreGraphics.framework in Frameworks */,\n\t\t\t\tDCD724CF125D1A1E000A4BDE /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t080E96DDFE201D6D7F000001 /* Classes */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1D3623240D0F684500981E51 /* PdTest01AppDelegate.h */,\n\t\t\t\t1D3623250D0F684500981E51 /* PdTest01AppDelegate.m */,\n\t\t\t\t28D7ACF60DDB3853001CB0EB /* PdTest01ViewController.h */,\n\t\t\t\t28D7ACF70DDB3853001CB0EB /* PdTest01ViewController.m */,\n\t\t\t);\n\t\t\tpath = Classes;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t19C28FACFE9D520D11CA2CBB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1D6058910D05DD3D006BFB54 /* PdTest01.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3063EF35210888BE00C8A4A2 /* Default-568h@2x.png */,\n\t\t\t\tDC35155012676B75004825FB /* ReadMe.txt */,\n\t\t\t\t30ADB0811E5412E700CB0E41 /* libpd.xcodeproj */,\n\t\t\t\t080E96DDFE201D6D7F000001 /* Classes */,\n\t\t\t\t29B97315FDCFA39411CA2CEA /* Other Sources */,\n\t\t\t\t29B97317FDCFA39411CA2CEA /* Resources */,\n\t\t\t\t29B97323FDCFA39411CA2CEA /* Frameworks */,\n\t\t\t\t19C28FACFE9D520D11CA2CBB /* Products */,\n\t\t\t);\n\t\t\tname = CustomTemplate;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t29B97315FDCFA39411CA2CEA /* Other Sources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t32CA4F630368D1EE00C91783 /* PdTest01_Prefix.pch */,\n\t\t\t\t29B97316FDCFA39411CA2CEA /* main.m */,\n\t\t\t);\n\t\t\tname = \"Other Sources\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t29B97317FDCFA39411CA2CEA /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDC609325125BBEED00F8509D /* test.pd */,\n\t\t\t\t8D1107310486CEB800E47090 /* PdTest01-Info.plist */,\n\t\t\t);\n\t\t\tname = Resources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t29B97323FDCFA39411CA2CEA /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDCCC7CDE125C3E0F002CF6AC /* AudioToolbox.framework */,\n\t\t\t\tDC0C300D125D15FC008B6389 /* Foundation.framework */,\n\t\t\t\tDC0C3011125D160B008B6389 /* UIKit.framework */,\n\t\t\t\tDC0C3015125D1614008B6389 /* CoreGraphics.framework */,\n\t\t\t\tDCD724CE125D1A1E000A4BDE /* Foundation.framework */,\n\t\t\t\t1152A401147E9D6C00DCD675 /* AVFoundation.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t30ADB0821E5412E700CB0E41 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t30ADB0871E5412E700CB0E41 /* libpd-ios.a */,\n\t\t\t\t30ADB0891E5412E700CB0E41 /* libpd-osx.a */,\n\t\t\t\t3063EF32210888AF00C8A4A2 /* libpd-ios-multi.a */,\n\t\t\t\t3063EF34210888AF00C8A4A2 /* libpd-osx-multi.a */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t1D6058900D05DD3D006BFB54 /* PdTest01 */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget \"PdTest01\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1D60588D0D05DD3D006BFB54 /* Resources */,\n\t\t\t\t1D60588E0D05DD3D006BFB54 /* Sources */,\n\t\t\t\t1D60588F0D05DD3D006BFB54 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = PdTest01;\n\t\t\tproductName = PdTest01;\n\t\t\tproductReference = 1D6058910D05DD3D006BFB54 /* PdTest01.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t29B97313FDCFA39411CA2CEA /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0930;\n\t\t\t};\n\t\t\tbuildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject \"PdTest01\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 1;\n\t\t\tknownRegions = (\n\t\t\t\tEnglish,\n\t\t\t\tJapanese,\n\t\t\t\tFrench,\n\t\t\t\tGerman,\n\t\t\t);\n\t\t\tmainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectReferences = (\n\t\t\t\t{\n\t\t\t\t\tProductGroup = 30ADB0821E5412E700CB0E41 /* Products */;\n\t\t\t\t\tProjectRef = 30ADB0811E5412E700CB0E41 /* libpd.xcodeproj */;\n\t\t\t\t},\n\t\t\t);\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t1D6058900D05DD3D006BFB54 /* PdTest01 */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXReferenceProxy section */\n\t\t3063EF32210888AF00C8A4A2 /* libpd-ios-multi.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-ios-multi.a\";\n\t\t\tremoteRef = 3063EF31210888AF00C8A4A2 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t3063EF34210888AF00C8A4A2 /* libpd-osx-multi.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-osx-multi.a\";\n\t\t\tremoteRef = 3063EF33210888AF00C8A4A2 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t30ADB0871E5412E700CB0E41 /* libpd-ios.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-ios.a\";\n\t\t\tremoteRef = 30ADB0861E5412E700CB0E41 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t30ADB0891E5412E700CB0E41 /* libpd-osx.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-osx.a\";\n\t\t\tremoteRef = 30ADB0881E5412E700CB0E41 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n/* End PBXReferenceProxy section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t1D60588D0D05DD3D006BFB54 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tDC609326125BBEED00F8509D /* test.pd in Resources */,\n\t\t\t\tDC35155112676B75004825FB /* ReadMe.txt in Resources */,\n\t\t\t\t3063EF36210888BE00C8A4A2 /* Default-568h@2x.png in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t1D60588E0D05DD3D006BFB54 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1D60589B0D05DD56006BFB54 /* main.m in Sources */,\n\t\t\t\t1D3623260D0F684500981E51 /* PdTest01AppDelegate.m in Sources */,\n\t\t\t\t28D7ACF80DDB3853001CB0EB /* PdTest01ViewController.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1D6058940D05DD3E006BFB54 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = PdTest01_Prefix.pch;\n\t\t\t\tHEADER_SEARCH_PATHS = \"../libpd/**\";\n\t\t\t\tINFOPLIST_FILE = \"PdTest01-Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = cc.libpd.PdTest01;\n\t\t\t\tPRODUCT_NAME = PdTest01;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1D6058950D05DD3E006BFB54 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = PdTest01_Prefix.pch;\n\t\t\t\tHEADER_SEARCH_PATHS = \"../libpd/**\";\n\t\t\t\tINFOPLIST_FILE = \"PdTest01-Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = cc.libpd.PdTest01;\n\t\t\t\tPRODUCT_NAME = PdTest01;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tC01FCF4F08A954540054247B /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = c99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_CHECK_SWITCH_STATEMENTS = NO;\n\t\t\t\tGCC_WARN_MISSING_PARENTHESES = NO;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = NO;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"-DPD\",\n\t\t\t\t\t\"-DUSEAPI_DUMMY\",\n\t\t\t\t\t\"-DHAVE_LIBDL\",\n\t\t\t\t\t\"-DHAVE_UNISTD_H\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC01FCF5008A954540054247B /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = c99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_CHECK_SWITCH_STATEMENTS = NO;\n\t\t\t\tGCC_WARN_MISSING_PARENTHESES = NO;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = NO;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"-DPD\",\n\t\t\t\t\t\"-DUSEAPI_DUMMY\",\n\t\t\t\t\t\"-DHAVE_LIBDL\",\n\t\t\t\t\t\"-DHAVE_UNISTD_H\",\n\t\t\t\t);\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget \"PdTest01\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1D6058940D05DD3E006BFB54 /* Debug */,\n\t\t\t\t1D6058950D05DD3E006BFB54 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tC01FCF4E08A954540054247B /* Build configuration list for PBXProject \"PdTest01\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC01FCF4F08A954540054247B /* Debug */,\n\t\t\t\tC01FCF5008A954540054247B /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 29B97313FDCFA39411CA2CEA /* Project object */;\n}\n"
  },
  {
    "path": "PdTest01/PdTest01_Prefix.pch",
    "content": "//\n// Prefix header for all source files of the 'PdTest01' target in the 'PdTest01' project\n//\n\n#ifdef __OBJC__\n    #import <Foundation/Foundation.h>\n    #import <UIKit/UIKit.h>\n#endif\n"
  },
  {
    "path": "PdTest01/ReadMe.txt",
    "content": "\nThis is a simple sample Universal iPad/iPhone app using Libpd to load and run a PD patch file.\n\nThe Libpd source and documentation is available at\nhttps://github.com/libpd/libpd\n\n*** Note: These docs are out of date, from an early version of libpd's obj-c layer.\nPlease visit the following wiki for updated info:\nhttps://github.com/libpd/pd-for-ios/wiki/ios\n\nThe iOS sample project is currently set up to use the latest iOS SDK. \nBut this feature only works automatically with iOS SDK 4.2 and later. \nThe project settings use “Latest iOS” as the “Base SDK” and iOS 3.0 as its “iOS Deployment Target”. \nThat means the app will run on any device with iOS 3.0 or later. \n(These can be changed in the project’s GetInfo panels.)\n\nIf you are having problems with XCode recognizing the project’s base SDK, \nyou can manually select the SDK in the project’s and build target’s GetInfo panels.\nLibpd is currently directly compiled into the app project. (See the libpd folder)\n\nIt may make more sense to compile Libpd as a static library. Then link that into the app project.\n\nOne thing that is very important to get Libpd to compile is setting the correct compiler DEFINES. \nThese can be done in the project build \"Other C Flags\" setting. \n   -DPD\n   -DUSEAPI_DUMMY\n   -DHAVE_LIBDL\n   -DHAVE_UNISTD_H\nALternatively you could just add #define's to the project precompiled header file. e.g. PdTest01_Prefix.pch\n\nThe PdAudio and PdBase classes provide the Objective C glue to Libpd. \n\nPdAudio initializes the iOS Audio Session.\n\nA PdAudio object needs to created by your app. \ne.g.\n   \tpdAudio = [[PdAudio alloc] initWithSampleRate:44100.0 andTicksPerBuffer:64 andNumberOfInputChannels:2 andNumberOfOutputChannels:2];\n\nPdBase provides an interface to Libpd through + class methods. \nThese methods are analogous the Libpd Java API http://gitorious.org/Pdlib/pages/Libpd\n\nPdBase shouldn't be explicitly instantiated as an object. \nJust make sure you add the class to your app project by adding the source files.\nThen call the class methods like C functions.\ne.g.\n\t[PdBase openPatch: documentsPatchFilePath];\n\t[PdBase computeAudio:YES];\n\nYou then you also need to play [pdAudio play];\n\nTested systems:\n- iPad (iOS 4.2.1)\n- iPhone 3GS (iOS 4.0)\n- iPod touch 2nd gen (iOS 4.1) - not working\n- iPod touch 1st gen (iOS 3.0) - audio problems\n- iPhone EDGE (iOS 3.0) - audio problmes.\n\nKnown problems:\n- Audio playback problems with iOS SDK Simulator\n\n- Audio playback problems with iPod touch 1st gen, iPhone EDGE, iPhone 3G.\n- No audio playback on iPod touch 2nd gen.\n\nNote: this sample app uses the CoreAudio PlayAndRecord Audio Session type.\nCurrently Libpd doesn't work properly with older iDevices with armv6 CPUs when using\nthe PlayAndRecord Audio Session type. The PdTest02 app demonstrates an output-only \napplication of Libpd that works on most older iDevices. i.e. PdTest02 does not use \nthe microphone input.\n\n--------------- License ------------\n\nThis software is copyrighted by Miller Puckette, Reality Jockey, Peter Brinkmann \nand others.  \nThe following terms (the \"Standard Improved BSD License\") apply to all files \nassociated with the software unless explicitly disclaimed in individual files:\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above  \n   copyright notice, this list of conditions and the following \n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n3. The name of the author may not be used to endorse or promote\n   products derived from this software without specific prior \n   written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\nBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\nIN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\nTHE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "PdTest01/Resources/test.pd",
    "content": "#N canvas 156 309 250 287 10;\n#X obj 78 116 dac~;\n#X obj 157 81 *~ 1;\n#X obj 158 37 *~ 0.2;\n#X obj 14 83 *~ 1;\n#X obj 15 20 osc~ 440;\n#X obj 15 39 *~ 0.2;\n#X obj 158 18 osc~ 660;\n#X obj 90 19 adc~ 1;\n#X obj 89 65 *~ 1;\n#X obj 35 63 r left;\n#X obj 110 44 r mic;\n#X obj 178 60 r right;\n#X obj 87 152 loadbang;\n#X obj 87 174 metro 1000;\n#X obj 87 195 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1\n1;\n#X obj 87 239 realtime;\n#X obj 87 262 print PD_RUNS;\n#X obj 87 216 sel 0;\n#X obj 132 217 sel 1;\n#X connect 1 0 0 1;\n#X connect 2 0 1 0;\n#X connect 3 0 0 0;\n#X connect 4 0 5 0;\n#X connect 5 0 3 0;\n#X connect 6 0 2 0;\n#X connect 7 0 8 0;\n#X connect 8 0 0 0;\n#X connect 8 0 0 1;\n#X connect 9 0 3 1;\n#X connect 10 0 8 1;\n#X connect 11 0 1 1;\n#X connect 12 0 13 0;\n#X connect 13 0 14 0;\n#X connect 14 0 17 0;\n#X connect 14 0 18 0;\n#X connect 15 0 16 0;\n#X connect 17 0 15 0;\n#X connect 18 0 15 1;\n"
  },
  {
    "path": "PdTest01/main.m",
    "content": "//\n//  main.m\n//  PdTest01\n//\n//  Created by Richard Lawler on 10/3/10.\n/**\n * This software is copyrighted by Richard Lawler. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import <UIKit/UIKit.h>\n#import \"PdTest01AppDelegate.h\"\n\nint main(int argc, char *argv[]) {\n    @autoreleasepool {\n    \treturn UIApplicationMain(argc, argv, nil, NSStringFromClass([PdTest01AppDelegate class]));\n    }\n}\n"
  },
  {
    "path": "PdTest02/Classes/PdTestAppDelegate.h",
    "content": "//\n//  PdTestAppDelegate.h\n//  PdTest02\n//\n//  Created by Richard Lawler on 11/22/10.\n/**\n * This software is copyrighted by Richard Lawler. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import <UIKit/UIKit.h>\n#import \"PdBase.h\"\n\n// note AppDelegate supports PdReceiverDelegate protocol\n@interface PdTestAppDelegate : NSObject <UIApplicationDelegate, PdReceiverDelegate>\n\n@property (nonatomic, strong) UIWindow *window;\n\n- (void)setAudioActive:(BOOL)active;\n\n@end\n\n"
  },
  {
    "path": "PdTest02/Classes/PdTestAppDelegate.m",
    "content": "//\n//  PdTestAppDelegate.m\n//  PdTest02\n//\n//  Created by Richard Lawler on 11/22/10.\n//  Updated by Dan Wilcox 2018.\n/**\n * This software is copyrighted by Richard Lawler. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import \"PdTestAppDelegate.h\"\n#import \"PdTestViewController.h\"\n#import \"PdAudioController.h\"\n\n@interface PdTestAppDelegate()\n\n@property (nonatomic, strong) PdAudioController *audioController;\n\n- (void) openAndRunTestPatch;\n\n@end\n\n@implementation PdTestAppDelegate\n\n#pragma mark -\n#pragma mark Application lifecycle\n\nextern void lrshift_tilde_setup(void);\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    \n\t\n\t// load our audio controller\n\tself.audioController = [[PdAudioController alloc] init];\n\t[self.audioController configureAmbientWithSampleRate:44100 numberChannels:2 mixingEnabled:YES];\n\t\n\t// set AppDelegate as PdRecieverDelegate to recieve messages from Libpd\n\t[PdBase setDelegate:self];\n\t\t\n\t// initialize extern lrshift~ - note this extern must be statically linked with the app; \n\t// externs can not be loaded dynamically on iOS\n\tlrshift_tilde_setup();  \n\t\n\t[self openAndRunTestPatch]; \n\t[self.audioController print];\n\n\treturn YES;\n}\n\n- (void)openAndRunTestPatch {\n\t// open patch located in app bundle\n\tvoid *x = [PdBase openFile:@\"LoopWithExtern.pd\" path:[[NSBundle mainBundle] bundlePath]];\n\t[self.audioController setActive:YES];\n}\n\n// receivePrint delegate method to receive \"print\" messages from Libpd\n// for simplicity we are just sending print messages to the debugging console\n- (void)receivePrint:(NSString *)message {\n\tNSLog(@\"(pd) %@\", message);\n}\n\n- (void)setAudioActive:(BOOL)active {\n\t[self.audioController setActive:active];\n}\n\n@end\n"
  },
  {
    "path": "PdTest02/Classes/PdTestViewController.h",
    "content": "//\n//  PdTestViewController.h\n//  PdTest02\n//\n//  Created by Richard Lawler on 11/22/10.\n/**\n * This software is copyrighted by Richard Lawler. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import <UIKit/UIKit.h>\n\n@interface PdTestViewController : UIViewController {\n\tIBOutlet UISwitch *outputLeftToggle;\n\tIBOutlet UISwitch *outputRightToggle;\n\tIBOutlet UISwitch *playToggle;\n}\n\n@property (nonatomic, retain) IBOutlet UISwitch *outputLeftToggle;\n@property (nonatomic, retain) IBOutlet UISwitch *outputRightToggle;\n@property (nonatomic, retain) IBOutlet UISwitch *playToggle;\n\n- (IBAction) outputLeftChanged;\n- (IBAction) outputRightChanged;\n- (IBAction) playStateChanged;\n\n@end\n\n"
  },
  {
    "path": "PdTest02/Classes/PdTestViewController.m",
    "content": "//\n//  PdTestViewController.m\n//  PdTest02\n//\n//  Created by Richard Lawler on 11/22/10.\n//  Updated by Dan Wilcox 2018.\n/**\n * This software is copyrighted by Richard Lawler. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import \"PdTestViewController.h\"\n#import \"PdTestAppDelegate.h\"\n#import \"PdBase.h\"\n\n@implementation PdTestViewController\n\n// outlets\n@synthesize outputLeftToggle;\n@synthesize outputRightToggle;\n@synthesize playToggle;\n\n\n- (void) viewWillAppear:(BOOL)animated {\n\t[self playStateChanged];\n}\n\n- (IBAction)outputLeftChanged {\n\t[PdBase sendFloat:(outputLeftToggle.on ? 1. : 0.) toReceiver: @\"left\" ];\n}\n\n- (IBAction)outputRightChanged {\n\t[PdBase sendFloat:(outputRightToggle.on ? 1. : 0.) toReceiver: @\"right\" ];\n}\n\n- (IBAction)playStateChanged {\n\tPdTestAppDelegate *appDelegate = (PdTestAppDelegate *) [[UIApplication sharedApplication] delegate];\n\tBOOL active = playToggle.on;\n\t[appDelegate setAudioActive:active];\n}\n\n@end\n"
  },
  {
    "path": "PdTest02/LoopWithExtern.pd",
    "content": "#N canvas 805 300 665 638 10;\n#X obj 113 82 loadbang;\n#X obj 87 512 lrshift~ -1;\n#X obj 316 506 lrshift~ 2;\n#X obj 195 568 dac~;\n#X obj 99 477 *~ 1;\n#X obj 99 430 *~ 0.2;\n#X obj 185 445 r left;\n#X obj 313 468 *~ 1;\n#X obj 282 429 *~ 0.2;\n#X obj 393 441 r right;\n#X obj 114 183 soundfiler;\n#X msg 115 215 bang;\n#X obj 252 296 t b;\n#X obj 115 254 tabplay~ sampleArray;\n#X msg 113 147 read -resize Banjo_B3.wav sampleArray;\n#X obj 340 229 table sampleArray;\n#X obj -35 257 print patch loaded;\n#X obj 137 488 print left output toggled;\n#X obj 388 480 print right output toggled;\n#X connect 0 0 14 0;\n#X connect 1 0 3 0;\n#X connect 2 0 3 1;\n#X connect 4 0 1 0;\n#X connect 5 0 4 0;\n#X connect 6 0 4 1;\n#X connect 6 0 17 0;\n#X connect 7 0 2 0;\n#X connect 8 0 7 0;\n#X connect 9 0 7 1;\n#X connect 9 0 18 0;\n#X connect 10 0 11 0;\n#X connect 11 0 13 0;\n#X connect 11 0 16 0;\n#X connect 12 0 13 0;\n#X connect 13 0 5 0;\n#X connect 13 0 8 0;\n#X connect 13 1 12 0;\n#X connect 14 0 10 0;\n"
  },
  {
    "path": "PdTest02/MainWindow.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB\" version=\"3.0\" toolsVersion=\"14109\" targetRuntime=\"iOS.CocoaTouch.iPad\" propertyAccessControl=\"none\" colorMatched=\"YES\">\n    <device id=\"ipad9_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"14088\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"UIApplication\">\n            <connections>\n                <outlet property=\"delegate\" destination=\"6\" id=\"9\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <window opaque=\"NO\" clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" id=\"2\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"768\" height=\"1024\"/>\n            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <simulatedStatusBarMetrics key=\"simulatedStatusBarMetrics\" statusBarStyle=\"blackOpaque\"/>\n        </window>\n        <customObject id=\"6\" userLabel=\"PdTest App Delegate\" customClass=\"PdTestAppDelegate\">\n            <connections>\n                <outlet property=\"viewController\" destination=\"7\" id=\"11\"/>\n                <outlet property=\"window\" destination=\"2\" id=\"10\"/>\n            </connections>\n        </customObject>\n        <viewController nibName=\"PdTestViewController\" id=\"7\" customClass=\"PdTestViewController\">\n            <extendedEdge key=\"edgesForExtendedLayout\"/>\n            <simulatedStatusBarMetrics key=\"simulatedStatusBarMetrics\" statusBarStyle=\"blackOpaque\"/>\n        </viewController>\n    </objects>\n</document>\n"
  },
  {
    "path": "PdTest02/PdTest02-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>English</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIconFile</key>\n\t<string></string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.1</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.0</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Storyboard</string>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "PdTest02/PdTest02.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t1152A477147F6A0D00DCD675 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1152A476147F6A0D00DCD675 /* AVFoundation.framework */; };\n\t\t1152A478147F6C6600DCD675 /* libpd-ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1152A465147F667400DCD675 /* libpd-ios.a */; };\n\t\t1D3623260D0F684500981E51 /* PdTestAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* PdTestAppDelegate.m */; };\n\t\t1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };\n\t\t28D7ACF80DDB3853001CB0EB /* PdTestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D7ACF70DDB3853001CB0EB /* PdTestViewController.m */; };\n\t\t3063EF4021088A4B00C8A4A2 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3063EF3F21088A4B00C8A4A2 /* Default-568h@2x.png */; };\n\t\t3063EF4421088DA600C8A4A2 /* Storyboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3063EF4321088DA600C8A4A2 /* Storyboard.storyboard */; };\n\t\tDC0C300E125D15FC008B6389 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC0C300D125D15FC008B6389 /* Foundation.framework */; };\n\t\tDC0C3012125D160B008B6389 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC0C3011125D160B008B6389 /* UIKit.framework */; };\n\t\tDC0C3016125D1614008B6389 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC0C3015125D1614008B6389 /* CoreGraphics.framework */; };\n\t\tDC3B19C21294789B001C3597 /* Banjo_B3.wav in Resources */ = {isa = PBXBuildFile; fileRef = DC3B19C11294789B001C3597 /* Banjo_B3.wav */; };\n\t\tDC70C562129B16FB006CC055 /* LoopWithExtern.pd in Resources */ = {isa = PBXBuildFile; fileRef = DC70C561129B16FB006CC055 /* LoopWithExtern.pd */; };\n\t\tDC70C5FC129B28F8006CC055 /* ReadMe.txt in Resources */ = {isa = PBXBuildFile; fileRef = DC70C5FB129B28F8006CC055 /* ReadMe.txt */; };\n\t\tDCCC7CDF125C3E0F002CF6AC /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCCC7CDE125C3E0F002CF6AC /* AudioToolbox.framework */; };\n\t\tDCD6ACC6128B38B100C61BBE /* lrshift~.c in Sources */ = {isa = PBXBuildFile; fileRef = DCD6ACC5128B38B100C61BBE /* lrshift~.c */; };\n\t\tDCD724CF125D1A1E000A4BDE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCD724CE125D1A1E000A4BDE /* Foundation.framework */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t1152A464147F667400DCD675 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 1152A45D147F667300DCD675 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = D2AAC07E0554694100DB518D;\n\t\t\tremoteInfo = \"libpd-ios\";\n\t\t};\n\t\t1152A474147F6A0800DCD675 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 1152A45D147F667300DCD675 /* libpd.xcodeproj */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D2AAC07D0554694100DB518D;\n\t\t\tremoteInfo = \"libpd-ios\";\n\t\t};\n\t\t11A30E551611507F00786A6D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 1152A45D147F667300DCD675 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 119013AB1486450C00086F19;\n\t\t\tremoteInfo = \"libpd-osx\";\n\t\t};\n\t\t3063EF3B21088A4800C8A4A2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 1152A45D147F667300DCD675 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 30C3D36D1FAA200100C67F08;\n\t\t\tremoteInfo = \"libpd-ios-multi\";\n\t\t};\n\t\t3063EF3D21088A4800C8A4A2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 1152A45D147F667300DCD675 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 30C3D2FA1FAA1FCC00C67F08;\n\t\t\tremoteInfo = \"libpd-osx-multi\";\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t1152A45D147F667300DCD675 /* libpd.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = libpd.xcodeproj; path = ../libpd/libpd.xcodeproj; sourceTree = \"<group>\"; };\n\t\t1152A476147F6A0D00DCD675 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };\n\t\t1D3623240D0F684500981E51 /* PdTestAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PdTestAppDelegate.h; sourceTree = \"<group>\"; };\n\t\t1D3623250D0F684500981E51 /* PdTestAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PdTestAppDelegate.m; sourceTree = \"<group>\"; };\n\t\t1D6058910D05DD3D006BFB54 /* PdTest02.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PdTest02.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t28D7ACF60DDB3853001CB0EB /* PdTestViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PdTestViewController.h; sourceTree = \"<group>\"; };\n\t\t28D7ACF70DDB3853001CB0EB /* PdTestViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PdTestViewController.m; sourceTree = \"<group>\"; };\n\t\t29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t3063EF3F21088A4B00C8A4A2 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = \"Default-568h@2x.png\"; sourceTree = \"<group>\"; };\n\t\t3063EF4321088DA600C8A4A2 /* Storyboard.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Storyboard.storyboard; sourceTree = \"<group>\"; };\n\t\t32CA4F630368D1EE00C91783 /* PdTest02_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PdTest02_Prefix.pch; sourceTree = \"<group>\"; };\n\t\t8D1107310486CEB800E47090 /* PdTest02-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = \"PdTest02-Info.plist\"; plistStructureDefinitionIdentifier = \"com.apple.xcode.plist.structure-definition.iphone.info-plist\"; sourceTree = \"<group>\"; };\n\t\tDC0C300D125D15FC008B6389 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\tDC0C3011125D160B008B6389 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };\n\t\tDC0C3015125D1614008B6389 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };\n\t\tDC3B19C11294789B001C3597 /* Banjo_B3.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = Banjo_B3.wav; sourceTree = SOURCE_ROOT; };\n\t\tDC70C561129B16FB006CC055 /* LoopWithExtern.pd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LoopWithExtern.pd; sourceTree = \"<group>\"; };\n\t\tDC70C5FB129B28F8006CC055 /* ReadMe.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ReadMe.txt; sourceTree = \"<group>\"; };\n\t\tDCCC7CDE125C3E0F002CF6AC /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = \"<absolute>\"; };\n\t\tDCD6ACC5128B38B100C61BBE /* lrshift~.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = \"lrshift~.c\"; path = \"../libpd/pure-data/extra/lrshift~/lrshift~.c\"; sourceTree = \"<group>\"; };\n\t\tDCD724CE125D1A1E000A4BDE /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = \"<absolute>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t1D60588F0D05DD3D006BFB54 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1152A478147F6C6600DCD675 /* libpd-ios.a in Frameworks */,\n\t\t\t\t1152A477147F6A0D00DCD675 /* AVFoundation.framework in Frameworks */,\n\t\t\t\tDCCC7CDF125C3E0F002CF6AC /* AudioToolbox.framework in Frameworks */,\n\t\t\t\tDC0C300E125D15FC008B6389 /* Foundation.framework in Frameworks */,\n\t\t\t\tDC0C3012125D160B008B6389 /* UIKit.framework in Frameworks */,\n\t\t\t\tDC0C3016125D1614008B6389 /* CoreGraphics.framework in Frameworks */,\n\t\t\t\tDCD724CF125D1A1E000A4BDE /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t080E96DDFE201D6D7F000001 /* Classes */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1D3623240D0F684500981E51 /* PdTestAppDelegate.h */,\n\t\t\t\t1D3623250D0F684500981E51 /* PdTestAppDelegate.m */,\n\t\t\t\t28D7ACF60DDB3853001CB0EB /* PdTestViewController.h */,\n\t\t\t\t28D7ACF70DDB3853001CB0EB /* PdTestViewController.m */,\n\t\t\t);\n\t\t\tpath = Classes;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1152A45E147F667300DCD675 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1152A465147F667400DCD675 /* libpd-ios.a */,\n\t\t\t\t11A30E561611507F00786A6D /* libpd-osx.a */,\n\t\t\t\t3063EF3C21088A4800C8A4A2 /* libpd-ios-multi.a */,\n\t\t\t\t3063EF3E21088A4800C8A4A2 /* libpd-osx-multi.a */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t19C28FACFE9D520D11CA2CBB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1D6058910D05DD3D006BFB54 /* PdTest02.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDC70C5FB129B28F8006CC055 /* ReadMe.txt */,\n\t\t\t\t1152A45D147F667300DCD675 /* libpd.xcodeproj */,\n\t\t\t\tDCD6ACBC128B37E500C61BBE /* libpd extra externals */,\n\t\t\t\t080E96DDFE201D6D7F000001 /* Classes */,\n\t\t\t\t29B97315FDCFA39411CA2CEA /* Other Sources */,\n\t\t\t\t29B97317FDCFA39411CA2CEA /* Resources */,\n\t\t\t\t29B97323FDCFA39411CA2CEA /* Frameworks */,\n\t\t\t\t19C28FACFE9D520D11CA2CBB /* Products */,\n\t\t\t);\n\t\t\tname = CustomTemplate;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t29B97315FDCFA39411CA2CEA /* Other Sources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t32CA4F630368D1EE00C91783 /* PdTest02_Prefix.pch */,\n\t\t\t\t29B97316FDCFA39411CA2CEA /* main.m */,\n\t\t\t);\n\t\t\tname = \"Other Sources\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t29B97317FDCFA39411CA2CEA /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3063EF3F21088A4B00C8A4A2 /* Default-568h@2x.png */,\n\t\t\t\t3063EF4321088DA600C8A4A2 /* Storyboard.storyboard */,\n\t\t\t\tDC70C561129B16FB006CC055 /* LoopWithExtern.pd */,\n\t\t\t\tDC3B19C11294789B001C3597 /* Banjo_B3.wav */,\n\t\t\t\t8D1107310486CEB800E47090 /* PdTest02-Info.plist */,\n\t\t\t);\n\t\t\tname = Resources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t29B97323FDCFA39411CA2CEA /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1152A476147F6A0D00DCD675 /* AVFoundation.framework */,\n\t\t\t\tDCCC7CDE125C3E0F002CF6AC /* AudioToolbox.framework */,\n\t\t\t\tDC0C300D125D15FC008B6389 /* Foundation.framework */,\n\t\t\t\tDC0C3011125D160B008B6389 /* UIKit.framework */,\n\t\t\t\tDC0C3015125D1614008B6389 /* CoreGraphics.framework */,\n\t\t\t\tDCD724CE125D1A1E000A4BDE /* Foundation.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDCD6ACBC128B37E500C61BBE /* libpd extra externals */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDCD6ACC5128B38B100C61BBE /* lrshift~.c */,\n\t\t\t);\n\t\t\tname = \"libpd extra externals\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t1D6058900D05DD3D006BFB54 /* PdTest02 */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget \"PdTest02\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1D60588D0D05DD3D006BFB54 /* Resources */,\n\t\t\t\t1D60588E0D05DD3D006BFB54 /* Sources */,\n\t\t\t\t1D60588F0D05DD3D006BFB54 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t1152A475147F6A0800DCD675 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = PdTest02;\n\t\t\tproductName = PdTest01;\n\t\t\tproductReference = 1D6058910D05DD3D006BFB54 /* PdTest02.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t29B97313FDCFA39411CA2CEA /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0930;\n\t\t\t};\n\t\t\tbuildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject \"PdTest02\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 1;\n\t\t\tknownRegions = (\n\t\t\t\tEnglish,\n\t\t\t\tJapanese,\n\t\t\t\tFrench,\n\t\t\t\tGerman,\n\t\t\t);\n\t\t\tmainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectReferences = (\n\t\t\t\t{\n\t\t\t\t\tProductGroup = 1152A45E147F667300DCD675 /* Products */;\n\t\t\t\t\tProjectRef = 1152A45D147F667300DCD675 /* libpd.xcodeproj */;\n\t\t\t\t},\n\t\t\t);\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t1D6058900D05DD3D006BFB54 /* PdTest02 */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXReferenceProxy section */\n\t\t1152A465147F667400DCD675 /* libpd-ios.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-ios.a\";\n\t\t\tremoteRef = 1152A464147F667400DCD675 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t11A30E561611507F00786A6D /* libpd-osx.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-osx.a\";\n\t\t\tremoteRef = 11A30E551611507F00786A6D /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t3063EF3C21088A4800C8A4A2 /* libpd-ios-multi.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-ios-multi.a\";\n\t\t\tremoteRef = 3063EF3B21088A4800C8A4A2 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t3063EF3E21088A4800C8A4A2 /* libpd-osx-multi.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-osx-multi.a\";\n\t\t\tremoteRef = 3063EF3D21088A4800C8A4A2 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n/* End PBXReferenceProxy section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t1D60588D0D05DD3D006BFB54 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tDC3B19C21294789B001C3597 /* Banjo_B3.wav in Resources */,\n\t\t\t\tDC70C562129B16FB006CC055 /* LoopWithExtern.pd in Resources */,\n\t\t\t\tDC70C5FC129B28F8006CC055 /* ReadMe.txt in Resources */,\n\t\t\t\t3063EF4421088DA600C8A4A2 /* Storyboard.storyboard in Resources */,\n\t\t\t\t3063EF4021088A4B00C8A4A2 /* Default-568h@2x.png in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t1D60588E0D05DD3D006BFB54 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1D60589B0D05DD56006BFB54 /* main.m in Sources */,\n\t\t\t\t1D3623260D0F684500981E51 /* PdTestAppDelegate.m in Sources */,\n\t\t\t\t28D7ACF80DDB3853001CB0EB /* PdTestViewController.m in Sources */,\n\t\t\t\tDCD6ACC6128B38B100C61BBE /* lrshift~.c in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t1152A475147F6A0800DCD675 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"libpd-ios\";\n\t\t\ttargetProxy = 1152A474147F6A0800DCD675 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1D6058940D05DD3E006BFB54 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = PdTest02_Prefix.pch;\n\t\t\t\tINFOPLIST_FILE = \"PdTest02-Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = cc.libpd.PdTest02;\n\t\t\t\tPRODUCT_NAME = PdTest02;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1D6058950D05DD3E006BFB54 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = PdTest02_Prefix.pch;\n\t\t\t\tINFOPLIST_FILE = \"PdTest02-Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = cc.libpd.PdTest02;\n\t\t\t\tPRODUCT_NAME = PdTest02;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tC01FCF4F08A954540054247B /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = c99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = NO;\n\t\t\t\tHEADER_SEARCH_PATHS = (\n\t\t\t\t\t\"../libpd/pure-data/src\",\n\t\t\t\t\t../libpd/objc,\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tOTHER_CFLAGS = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC01FCF5008A954540054247B /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = c99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = NO;\n\t\t\t\tHEADER_SEARCH_PATHS = (\n\t\t\t\t\t\"../libpd/pure-data/src\",\n\t\t\t\t\t../libpd/objc,\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tOTHER_CFLAGS = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget \"PdTest02\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1D6058940D05DD3E006BFB54 /* Debug */,\n\t\t\t\t1D6058950D05DD3E006BFB54 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tC01FCF4E08A954540054247B /* Build configuration list for PBXProject \"PdTest02\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC01FCF4F08A954540054247B /* Debug */,\n\t\t\t\tC01FCF5008A954540054247B /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 29B97313FDCFA39411CA2CEA /* Project object */;\n}\n"
  },
  {
    "path": "PdTest02/PdTest02_Prefix.pch",
    "content": "//\n// Prefix header for all source files of the 'PdTest02' target in the 'PdTest02' project\n//\n//  PdTest02\n//\n//  Created by Richard Lawler on 11/22/10.\n/**\n * This software is copyrighted by Richard Lawler. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifdef __OBJC__\n    #import <Foundation/Foundation.h>\n    #import <UIKit/UIKit.h>\n#endif\n\n\n"
  },
  {
    "path": "PdTest02/PdTestViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB\" version=\"3.0\" toolsVersion=\"14109\" targetRuntime=\"iOS.CocoaTouch.iPad\" propertyAccessControl=\"none\" useAutolayout=\"YES\" colorMatched=\"YES\">\n    <device id=\"ipad9_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"14088\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"PdTestViewController\">\n            <connections>\n                <outlet property=\"outputLeftToggle\" destination=\"4\" id=\"29\"/>\n                <outlet property=\"outputRightToggle\" destination=\"5\" id=\"30\"/>\n                <outlet property=\"playToggle\" destination=\"24\" id=\"28\"/>\n                <outlet property=\"view\" destination=\"2\" id=\"3\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"2\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"768\" height=\"1024\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <view contentMode=\"scaleToFill\" fixedFrame=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"DLE-78-dsl\">\n                    <rect key=\"frame\" x=\"224\" y=\"382\" width=\"320\" height=\"260\"/>\n                    <autoresizingMask key=\"autoresizingMask\"/>\n                    <subviews>\n                        <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" fixedFrame=\"YES\" text=\"PdTest02 - Libpd testing app\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" minimumFontSize=\"10\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"6\">\n                            <rect key=\"frame\" x=\"35\" y=\"16\" width=\"250\" height=\"22\"/>\n                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                            <fontDescription key=\"fontDescription\" name=\"Helvetica-Bold\" family=\"Helvetica\" pointSize=\"18\"/>\n                            <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                            <color key=\"highlightedColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        </label>\n                        <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" fixedFrame=\"YES\" text=\"https://github.com/libpd\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" minimumFontSize=\"10\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"33\">\n                            <rect key=\"frame\" x=\"35\" y=\"46\" width=\"250\" height=\"22\"/>\n                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                            <fontDescription key=\"fontDescription\" name=\"Helvetica-Bold\" family=\"Helvetica\" pointSize=\"18\"/>\n                            <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                            <color key=\"highlightedColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        </label>\n                        <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" fixedFrame=\"YES\" text=\"Audio active:\" lineBreakMode=\"tailTruncation\" minimumFontSize=\"10\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"25\">\n                            <rect key=\"frame\" x=\"8\" y=\"110\" width=\"133\" height=\"21\"/>\n                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                            <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                            <color key=\"highlightedColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        </label>\n                        <switch opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" on=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"24\">\n                            <rect key=\"frame\" x=\"263\" y=\"105\" width=\"51\" height=\"31\"/>\n                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                            <connections>\n                                <action selector=\"playStateChanged\" destination=\"-1\" eventType=\"valueChanged\" id=\"27\"/>\n                            </connections>\n                        </switch>\n                        <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" fixedFrame=\"YES\" text=\"Output to right:\" lineBreakMode=\"tailTruncation\" minimumFontSize=\"10\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8\">\n                            <rect key=\"frame\" x=\"8\" y=\"208\" width=\"143\" height=\"21\"/>\n                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                            <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                            <color key=\"highlightedColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        </label>\n                        <switch opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" on=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"4\">\n                            <rect key=\"frame\" x=\"263\" y=\"164\" width=\"51\" height=\"31\"/>\n                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                            <connections>\n                                <action selector=\"outputLeftChanged\" destination=\"-1\" eventType=\"valueChanged\" id=\"31\"/>\n                            </connections>\n                        </switch>\n                        <switch opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" on=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"5\">\n                            <rect key=\"frame\" x=\"263\" y=\"203\" width=\"51\" height=\"31\"/>\n                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                            <connections>\n                                <action selector=\"outputRightChanged\" destination=\"-1\" eventType=\"valueChanged\" id=\"32\"/>\n                            </connections>\n                        </switch>\n                        <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" fixedFrame=\"YES\" text=\"Output to left:\" lineBreakMode=\"tailTruncation\" minimumFontSize=\"10\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"7\">\n                            <rect key=\"frame\" x=\"8\" y=\"169\" width=\"133\" height=\"21\"/>\n                            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                            <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                            <color key=\"highlightedColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        </label>\n                    </subviews>\n                    <color key=\"backgroundColor\" cocoaTouchSystemColor=\"tableCellGroupedBackgroundColor\"/>\n                </view>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <simulatedStatusBarMetrics key=\"simulatedStatusBarMetrics\" statusBarStyle=\"blackOpaque\"/>\n        </view>\n    </objects>\n</document>\n"
  },
  {
    "path": "PdTest02/ReadMe.txt",
    "content": "\nPdTest02 demonstrates the use of Libpd in a Universal iPad/iPhone app.\n\n*** Note: These docs are out of date, from an early version of libpd's obj-c layer.\nPlease visit the following wiki for updated info:\nhttps://github.com/libpd/pd-for-ios/wiki/ios\n\n------------------------------------------------------\nVersion 1.0:\n\nPdTest02 demonstrates\n- Loading the Pd patch \"LoopWithExtern.pd\",\n  note LoopWithExtern.pd loads a sample file \"Banjo_B3.wav\",\n- Use of a compiled and linked-in Pd external lrshift~.c,\n- Use of simple iOS user interface elements to communicate with Libpd,\n- Sending messages to Pd objects using the PdBase class.\n\nNote: PdTest02 loads LoopWithExtern.pd directly from the app bundle. The sample file Banjo_B3.wav\nmust also be located in the app bundle. Be aware that on iOS the app bundle is read-only.\n\nThe Libpd source and documentation is available at\nhttps://github.com/libpd/libpd\n\nThe iOS sample project is currently set up to use the latest iOS SDK. \nBut this feature only works automatically with iOS SDK 4.2 and later. \nThe project settings use “Latest iOS” as the “Base SDK” and iOS 3.0 as its “iOS Deployment Target”. \nThat means the app will run on any device with iOS 3.0 or later. \n(These can be changed in the project’s GetInfo panels.)\n\nIf you are having problems with XCode recognizing the project’s base SDK, \nyou can manually select the SDK in the project’s and build target’s GetInfo panels.\n\nLibpd is currently directly compiled into the app project. (See the libpd folder)\n\nIt may make more sense to compile Libpd as a static library. Then link that into the app project.\n\nOne thing that is very important to get Libpd to compile is setting the correct compiler DEFINES. \nThese can be done in the project build \"Other C Flags\" setting. \n   -DPD\n   -DUSEAPI_DUMMY\n   -DHAVE_LIBDL\n   -DHAVE_UNISTD_H\nAlternatively you could just add #define's to the project precompiled header file. e.g. PdTest01_Prefix.pch\n\nThe PdAudio and PdBase classes provide the Objective C glue to Libpd. \n\nPdAudio initializes the iOS Audio Session.\n\nA PdAudio object needs to created by your app. \ne.g.\n\tpdAudio = [[PdAudio alloc] initWithSampleRate:44100.0 andTicksPerBuffer:64 \n\t\tandNumberOfInputChannels:0 andNumberOfOutputChannels:2 \n\t\tandAudioSessionCategory:kAudioSessionCategory_AmbientSound];\n\nPdBase provides an interface to Libpd through + class methods. \nThese methods are analogous the Libpd Java API http://gitorious.org/Pdlib/pages/Libpd\n\nPdBase shouldn't be explicitly instantiated as an object. \nJust make sure you add the class to your app project by adding the source files.\nThen call the class methods like C functions.\ne.g.\n\t[PdBase openPatch: documentsPatchFilePath];\n\t[PdBase computeAudio:YES];\n\nYou then you also need to play [pdAudio play];\n\n-----------------------------------------------\nVersion 1.1:\n\t\nUses new PdAudio init method specifying AmbientAudio Audio Session Category to support older iDevices.\n(Note the use of AmbientAudio will prevent Libpd from recording or using the microphone input, \nbut this sample does not use audio input nor the microphone.)\n\nCurrently Libpd exhibits problems when using the RecordAndPlay Audio Session type on older \niDevices running armv6 processors.\n\t\nPdTestAppDelegate supports PdReceiverDelegate protocol defined in PdBase.h. \nThis allows the AppDelegate to receive messages from Libpd as demonstrated by the -receivePrint method.\n\nCompiles with new Libpd s_libpdmidi.c interface. \nNote: there is not yet support for these MIDI hooks through a delegate protocol as there is for the \nother hooks through PdReceiverDelegate.\n\n-----------------------------------------------\nTested systems:\n- iPad (iOS 4.2.1)\n- iPhone 3GS (iOS 4.0)\n- iPod touch 2nd gen (iOS 4.1)\n- iPod touch 1st gen (iOS 3.0)\n- iPhone EDGE (iOS 3.0)\n\n-----------------------------------------------\nKnown problems:\n- Audio playback problems with iOS SDK Simulator\n- There are reports of audio playback problems with the iPhone 3G running iOS 4.x\n\n--------------- License ------------\n\nThis software is copyrighted by Miller Puckette, Reality Jockey, Peter Brinkmann \nand others.  \nThe following terms (the \"Standard Improved BSD License\") apply to all files \nassociated with the software unless explicitly disclaimed in individual files:\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above  \n   copyright notice, this list of conditions and the following \n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n3. The name of the author may not be used to endorse or promote\n   products derived from this software without specific prior \n   written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\nBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\nIN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\nTHE POSSIBILITY OF SUCH DAMAGE.\n\n----\n\nBanjo_B3.wav by Richard Lawler is licensed under a Creative Commons Attribution 3.0 Unported License.\n\n"
  },
  {
    "path": "PdTest02/Storyboard.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"14109\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"wtR-ko-5sA\">\n    <device id=\"retina3_5\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"14088\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Pd Test View Controller-->\n        <scene sceneID=\"Q0t-2R-e1i\">\n            <objects>\n                <viewController id=\"wtR-ko-5sA\" customClass=\"PdTestViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"kQ2-9R-cOu\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"r6j-yO-AeY\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"bzU-SW-H9l\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"480\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <view contentMode=\"scaleToFill\" fixedFrame=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"125-iI-A1f\">\n                                <rect key=\"frame\" x=\"12\" y=\"112\" width=\"297\" height=\"257\"/>\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <subviews>\n                                    <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" fixedFrame=\"YES\" text=\"Audio active:\" lineBreakMode=\"tailTruncation\" minimumFontSize=\"10\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"0dX-iA-fdF\">\n                                        <rect key=\"frame\" x=\"23\" y=\"110\" width=\"133\" height=\"21\"/>\n                                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                        <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                        <color key=\"highlightedColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </label>\n                                    <switch opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" on=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Od6-oW-hKf\">\n                                        <rect key=\"frame\" x=\"228\" y=\"105\" width=\"51\" height=\"31\"/>\n                                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                        <connections>\n                                            <action selector=\"playStateChanged\" destination=\"wtR-ko-5sA\" eventType=\"valueChanged\" id=\"I5y-6R-Ro2\"/>\n                                        </connections>\n                                    </switch>\n                                    <switch opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" on=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"4bw-US-PEM\">\n                                        <rect key=\"frame\" x=\"228\" y=\"164\" width=\"51\" height=\"31\"/>\n                                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                        <connections>\n                                            <action selector=\"outputLeftChanged\" destination=\"wtR-ko-5sA\" eventType=\"valueChanged\" id=\"oHa-zc-UtB\"/>\n                                        </connections>\n                                    </switch>\n                                    <switch opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" on=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"v6c-ht-pK6\">\n                                        <rect key=\"frame\" x=\"228\" y=\"203\" width=\"51\" height=\"31\"/>\n                                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                        <connections>\n                                            <action selector=\"outputRightChanged\" destination=\"wtR-ko-5sA\" eventType=\"valueChanged\" id=\"4Io-R8-Obu\"/>\n                                        </connections>\n                                    </switch>\n                                    <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" fixedFrame=\"YES\" text=\"Left channel output:\" lineBreakMode=\"tailTruncation\" minimumFontSize=\"10\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"FGr-SG-hXM\">\n                                        <rect key=\"frame\" x=\"23\" y=\"169\" width=\"154\" height=\"21\"/>\n                                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                        <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                        <color key=\"highlightedColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </label>\n                                    <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" fixedFrame=\"YES\" text=\"https://github.com/libpd/pd-for-ios\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" minimumFontSize=\"10\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"UvD-Ay-0v9\">\n                                        <rect key=\"frame\" x=\"1\" y=\"46\" width=\"294\" height=\"22\"/>\n                                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                        <fontDescription key=\"fontDescription\" name=\"Helvetica-Bold\" family=\"Helvetica\" pointSize=\"18\"/>\n                                        <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                        <color key=\"highlightedColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </label>\n                                    <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" fixedFrame=\"YES\" text=\"PdTest02 - Libpd testing app\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" minimumFontSize=\"10\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"PEn-aZ-RIw\">\n                                        <rect key=\"frame\" x=\"23\" y=\"16\" width=\"250\" height=\"22\"/>\n                                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                        <fontDescription key=\"fontDescription\" name=\"Helvetica-Bold\" family=\"Helvetica\" pointSize=\"18\"/>\n                                        <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                        <color key=\"highlightedColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </label>\n                                    <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" fixedFrame=\"YES\" text=\"Right channel output:\" lineBreakMode=\"tailTruncation\" minimumFontSize=\"10\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"4d7-yb-pvQ\">\n                                        <rect key=\"frame\" x=\"23\" y=\"208\" width=\"164\" height=\"21\"/>\n                                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                        <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                        <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                        <color key=\"highlightedColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </label>\n                                </subviews>\n                                <color key=\"backgroundColor\" cocoaTouchSystemColor=\"tableCellGroupedBackgroundColor\"/>\n                            </view>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                    </view>\n                    <connections>\n                        <outlet property=\"outputLeftToggle\" destination=\"4bw-US-PEM\" id=\"ka3-Bo-w16\"/>\n                        <outlet property=\"outputRightToggle\" destination=\"v6c-ht-pK6\" id=\"E8K-dP-o2G\"/>\n                        <outlet property=\"playToggle\" destination=\"Od6-oW-hKf\" id=\"t88-MA-e3J\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"MHg-9U-9fx\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-2820\" y=\"-2583.75\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "PdTest02/main.m",
    "content": "//\n//  main.m\n//  PdTest02\n//\n//  Created by Richard Lawler on 11/22/10.\n//  Updated by Dan Wilcox 2018.\n/**\n * This software is copyrighted by Richard Lawler. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import <UIKit/UIKit.h>\n#import \"PdTestAppDelegate.h\"\n\nint main(int argc, char *argv[]) {\n    @autoreleasepool {\n    \treturn UIApplicationMain(argc, argv, nil, NSStringFromClass(PdTestAppDelegate.class));\n    }\n}\n"
  },
  {
    "path": "PolyPatch/Classes/PatchTableViewCell.h",
    "content": "//\n//  PatchTableViewCell.h\n//  PolyPatch\n//\n/**\n * This software is copyrighted by Richard Eakin. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import <UIKit/UIKit.h>\n\n@interface PatchTableViewCell : UITableViewCell\n\n@property (nonatomic, assign) int dollarZero;\n\n- (id)initWithDollarZeroArg:(int)dollarZero reuseIdentifier:(NSString *)reuseIdentifier;\n\n@end\n"
  },
  {
    "path": "PolyPatch/Classes/PatchTableViewCell.m",
    "content": "//\n//  PatchTableViewCell.m\n//  PolyPatch\n//\n//  Created by Richard Eakin on 21/02/11.\n/**\n * This software is copyrighted by Richard Eakin. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import \"PatchTableViewCell.h\"\n#import \"PdBase.h\"\n\n@interface PatchTableViewCell ()\n\n@property (nonatomic, retain) UISlider *pitchSlider;\n\n- (void)pitchSliderValueChanged:(UISlider *)sender;\n\n@end\n\n@implementation PatchTableViewCell\n\n@synthesize dollarZero = dollarZero_;\n@synthesize pitchSlider = pitchSlider_;\n\n- (id)initWithDollarZeroArg:(int)dollarZero reuseIdentifier:(NSString *)reuseIdentifier {\n    if (self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier]) {\n\t\tself.dollarZero = dollarZero;\n\t\tself.backgroundColor = [UIColor brownColor];\n\t\tself.selectionStyle = UITableViewCellSelectionStyleNone;\n\t\tself.pitchSlider = [[UISlider alloc] init];\n\t\tself.pitchSlider.minimumValue = 0;\n\t\tself.pitchSlider.maximumValue = 30;\n\t\tself.pitchSlider.continuous = YES;\n\t\t[self.pitchSlider addTarget:self action:@selector(pitchSliderValueChanged:) forControlEvents:UIControlEventValueChanged];\n\t\tself.pitchSlider.value = 5;\n\t\t[self pitchSliderValueChanged:self.pitchSlider];\n\t\t[self addSubview:self.pitchSlider];\n    }\n    return self;\n}\n\n- (void) layoutSubviews {\n\t[super layoutSubviews];\n\tself.pitchSlider.frame = CGRectMake(self.bounds.size.width  * 0.6,\n\t\t\t\t\t\t\t\t\t\tself.bounds.size.height * 0.3,\n\t\t\t\t\t\t\t\t\t\tself.bounds.size.width  * 0.3,\n\t\t\t\t\t\t\t\t\t\tself.bounds.size.height * 0.5);\n}\n\n// Here we send the pitch value to only the patch specified by the $0 arg associated with this table cell\n- (void)pitchSliderValueChanged:(UISlider *)sender {\n\t[PdBase sendFloat:sender.value toReceiver:[NSString stringWithFormat:@\"%d-pitch\", self.dollarZero]];\n}\n\n@end\n"
  },
  {
    "path": "PolyPatch/Classes/PolyPatchAppDelegate.h",
    "content": "//\n//  PolyPatchAppDelegate.h\n//  PolyPatch\n//\n//  Created by Richard Eakin on 01/23/11.\n/**\n * This software is copyrighted by Richard Lawler. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import <UIKit/UIKit.h>\n#import \"PdBase.h\"\n\n@class PolyPatchViewController;\n\n@interface PolyPatchAppDelegate : NSObject <UIApplicationDelegate, PdReceiverDelegate>\n\n@property (nonatomic, retain) UIWindow *window;\n\n@end\n\n"
  },
  {
    "path": "PolyPatch/Classes/PolyPatchAppDelegate.m",
    "content": "//\n//  PolyPatchAppDelegate.m\n//  PolyPatch\n//\n//  Created by Richard Eakin on 01/23/11.\n/**\n * This software is copyrighted by Richard Lawler. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import \"PolyPatchAppDelegate.h\"\n#import \"PolyPatchViewController.h\"\n#import \"PdAudioController.h\"\n\n@interface PolyPatchAppDelegate ()\n@property (nonatomic, retain) PdAudioController *audioController;\n\n- (void)initAudio;\n@end\n\n@implementation PolyPatchAppDelegate\n\n@synthesize window = window_;\n@synthesize audioController = audioController_;\n\n#pragma mark -\n#pragma mark Application lifecycle\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    \n\t[PdBase setDelegate:self];\n\n\tself.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];\n\tself.window.rootViewController = [[PolyPatchViewController alloc] init];\n    [self.window makeKeyAndVisible];\n\t\n\t[self initAudio];\n\treturn YES;\n}\n\n- (void)receivePrint:(NSString *)message {\n\tNSLog(@\"%s %@\", __PRETTY_FUNCTION__, message);\n}\n\n#pragma mark - Private\n\n- (void)initAudio {\n\tself.audioController = [[PdAudioController alloc] init];\n\tPdAudioStatus status = [self.audioController configurePlaybackWithSampleRate:44100 numberChannels:2 inputEnabled:YES mixingEnabled:NO];\n\tif (status == PdAudioError) {\n\t\tNSLog(@\"Error in PdAudioController!\");\n\t} else if (status == PdAudioPropertyChanged) {\n\t\tNSLog(@\"Audio properties changed.\");\n\t}\n\t[self.audioController setActive:YES];\n\t[self.audioController print];\n}\n\n\n@end\n"
  },
  {
    "path": "PolyPatch/Classes/PolyPatchViewController.h",
    "content": "//\n//  PolyPatchViewController.h\n//  PolyPatch\n//\n//  Created by Richard Eakin on 01/23/11.\n/**\n * This software is copyrighted by Richard Eakin. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import <UIKit/UIKit.h>\n\n@interface PolyPatchViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>\n@end\n\n"
  },
  {
    "path": "PolyPatch/Classes/PolyPatchViewController.m",
    "content": "//\n//  PolyPatchViewController.m\n//  PolyPatch\n//\n//  Created by Richard Eakin on 01/23/11.\n//\n/**\n * This software is copyrighted by Richard Eakin. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import \"PolyPatchViewController.h\"\n#import \"PatchTableViewCell.h\"\n#import \"PdBase.h\"\n#import \"PdFile.h\"\n#import <QuartzCore/QuartzCore.h>\n\n//NSString *const kTestPatchName = @\"test.pd\"; // each patch will just print out the $0 arg every second\nNSString *const kTestPatchName = @\"test2.pd\"; // audio blurbs with pitch control\n//NSString *const kTestPatchName = @\"synctest.pd\"; // Patch from Brett Park that was crashing libpd because of sync issues\n\n@interface PolyPatchViewController ()\n\n@property (nonatomic, retain) NSMutableArray *patches;\n@property (nonatomic, retain) UIButton *openButton;\n@property (nonatomic, retain) UITableView *tableView;\n\n- (void)openButtonPressed:(id)button;\n- (void)testOpeningMany;\n\n@end\n\n@implementation PolyPatchViewController\n\n@synthesize openButton = openButton_;\n@synthesize tableView = tableView_;\n@synthesize patches = patches_;\n\n#pragma mark -\n#pragma mark View Life Cycle\n\n// Implement loadView to create a view hierarchy programmatically, without using a nib.\n- (void)loadView {\n\t[super loadView];\n\tself.view.backgroundColor = [UIColor blackColor];\n\t\n\tself.patches = [NSMutableArray array];\n\n\tUIButton *openButton = [UIButton buttonWithType:UIButtonTypeCustom];\n\topenButton.backgroundColor = [UIColor blueColor];\n\topenButton.autoresizingMask = UIViewAutoresizingFlexibleWidth;\n\topenButton.layer.cornerRadius = 5.0;\n\topenButton.layer.borderColor = [[UIColor purpleColor] CGColor];\n\topenButton.layer.borderWidth = 1.0;\n\t[openButton setTitle:@\"Open New\" forState:UIControlStateNormal];\n\t[openButton addTarget:self action:@selector(openButtonPressed:) forControlEvents:UIControlEventTouchUpInside];\n\t[self.view addSubview:openButton];\n\tself.openButton = openButton;\n\t\n\tself.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];\n\tself.tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth;\n\tself.tableView.editing = YES;\n\tself.tableView.dataSource = self;\n\tself.tableView.delegate = self;\n\t[self.view addSubview:self.tableView];\n\n\t//[self testOpeningMany]; \t// uncomment to test syncing issues with synctest.pd\n}\n\n- (void)viewWillAppear:(BOOL)animated {\n\t[super viewWillAppear:animated];\n\n\tself.openButton.frame = CGRectMake(00.0, 10.0, self.view.bounds.size.width - 0.0, 40.0);\n\n\tself.tableView.backgroundColor = [UIColor colorWithRed:0.2 green:0.7 blue:0.3 alpha:1.0];\n\tself.tableView.frame = CGRectMake(0.0, 55.0, self.view.bounds.size.width, self.view.bounds.size.height - 60.0);\n}\n\n#pragma mark -\n#pragma mark UITableViewDelegate\n\n- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {\n\treturn UITableViewCellEditingStyleDelete;\n}\n\n- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath {\n\treturn NO;\n}\n\n\n#pragma mark -\n#pragma mark UITableViewDataSource\n\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {\n\tstatic NSString *const kCellID = @\"cell\";\n\tPdFile *patch = [self.patches objectAtIndex:indexPath.row];\n\n\tPatchTableViewCell *cell = (PatchTableViewCell *)[tableView dequeueReusableCellWithIdentifier:kCellID];\n\tif (!cell) {\n\t\tcell = [[PatchTableViewCell alloc] initWithDollarZeroArg:[patch dollarZero] reuseIdentifier:kCellID];\n\t}\n\tcell.textLabel.text = [NSString stringWithFormat:@\"%@ - %d\", kTestPatchName, cell.dollarZero];\n\treturn cell;\n}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {\n\treturn [self.patches count];\n}\n\n- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {\n    if (editingStyle == UITableViewCellEditingStyleDelete) {\n\t\tRLog(@\"closing patch with dollar zero: %d\", [[self.patches objectAtIndex:indexPath.row] dollarZero]);\n\n\t\tPdFile *patch = [self.patches objectAtIndex:indexPath.row];\n\t\t[self.patches removeObjectAtIndex:indexPath.row];\n\t\t[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationBottom];\n\t}\n}\n\n#pragma mark -\n#pragma mark Action Handlers\n\n- (void) openButtonPressed:(id)button {\n\tRLog(@\"opening: %@\", kTestPatchName);\n\t\n\tNSString *bundlePath = [[NSBundle mainBundle] bundlePath];\n\tPdFile *patch = [PdFile openFileNamed:kTestPatchName path:bundlePath];\n\tif (patch) {\n\t\tRLog(@\"opened patch with $0 = %d\", [patch dollarZero]);\n\t\t\n\t\t[self.patches addObject:patch];\n\t\t[self.tableView reloadData];\n\t} else {\n\t\tRLog(@\"error: couldn't open patch\");\n\t}\n}\n\n#pragma mark -\n#pragma mark Testing\n\n// opening many patches on the fly\n- (void)testOpeningMany {\n\tself.patches = [NSMutableArray array];\n\n\tNSString *bundlePath = [[NSBundle mainBundle] bundlePath];\n\tint numPatches = 20;\n\t\n\tfor (int i = 0; i < numPatches; i++) {\n\t\tPdFile *patch = [PdFile openFileNamed:kTestPatchName path:bundlePath];\n\t\tif (patch) {\n\t\t\tRLog(@\"opened patch with $0 = %d, iteration %d\", [patch dollarZero], i);\n\t\t\t\n\t\t\t[self.patches addObject:patch];\n\t\t} else {\n\t\t\tRLog(@\"error: couldn't open patch, iteration %d\", i);\n\t\t}\n\t}\n\tRLog(@\"reloading table\");\n\t[self.tableView reloadData];\n}\n\n@end\n"
  },
  {
    "path": "PolyPatch/PolyPatch-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>English</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIconFile</key>\n\t<string></string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.0</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UIStatusBarHidden</key>\n\t<true/>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "PolyPatch/PolyPatch.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t0E8C8EBB131221E0000B9D7A /* PatchTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E8C8EBA131221E0000B9D7A /* PatchTableViewCell.m */; };\n\t\t0E8C8F191312306E000B9D7A /* test2.pd in Resources */ = {isa = PBXBuildFile; fileRef = 0E8C8F181312306E000B9D7A /* test2.pd */; };\n\t\t0ED51349132BBE6500970D18 /* libpd-ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0ED512FD132BB71700970D18 /* libpd-ios.a */; };\n\t\t1152A396147D362B00DCD675 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1152A395147D362B00DCD675 /* AVFoundation.framework */; };\n\t\t11C6079F137D0A6C006D7F8B /* synctest.pd in Resources */ = {isa = PBXBuildFile; fileRef = 11C6079E137D0A6C006D7F8B /* synctest.pd */; };\n\t\t1D3623260D0F684500981E51 /* PolyPatchAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* PolyPatchAppDelegate.m */; };\n\t\t1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };\n\t\t28D7ACF80DDB3853001CB0EB /* PolyPatchViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D7ACF70DDB3853001CB0EB /* PolyPatchViewController.m */; };\n\t\t3063EF8B21091C8500C8A4A2 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3063EF8A21091C8500C8A4A2 /* Default-568h@2x.png */; };\n\t\tDC0C300E125D15FC008B6389 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC0C300D125D15FC008B6389 /* Foundation.framework */; };\n\t\tDC0C3012125D160B008B6389 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC0C3011125D160B008B6389 /* UIKit.framework */; };\n\t\tDC0C3016125D1614008B6389 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC0C3015125D1614008B6389 /* CoreGraphics.framework */; };\n\t\tDC35155112676B75004825FB /* ReadMe.txt in Resources */ = {isa = PBXBuildFile; fileRef = DC35155012676B75004825FB /* ReadMe.txt */; };\n\t\tDC609326125BBEED00F8509D /* test.pd in Resources */ = {isa = PBXBuildFile; fileRef = DC609325125BBEED00F8509D /* test.pd */; };\n\t\tDCCC7CDF125C3E0F002CF6AC /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCCC7CDE125C3E0F002CF6AC /* AudioToolbox.framework */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t0ED512FC132BB71700970D18 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0E0EE92E12EC26C6004BA33D /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = D2AAC07E0554694100DB518D;\n\t\t\tremoteInfo = libpd;\n\t\t};\n\t\t0ED51321132BBCAF00970D18 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0E0EE92E12EC26C6004BA33D /* libpd.xcodeproj */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D2AAC07D0554694100DB518D;\n\t\t\tremoteInfo = libpd;\n\t\t};\n\t\t11A30E73161153F800786A6D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0E0EE92E12EC26C6004BA33D /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 119013AB1486450C00086F19;\n\t\t\tremoteInfo = \"libpd-osx\";\n\t\t};\n\t\t3063EF8621091B7400C8A4A2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0E0EE92E12EC26C6004BA33D /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 30C3D36D1FAA200100C67F08;\n\t\t\tremoteInfo = \"libpd-ios-multi\";\n\t\t};\n\t\t3063EF8821091B7400C8A4A2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0E0EE92E12EC26C6004BA33D /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 30C3D2FA1FAA1FCC00C67F08;\n\t\t\tremoteInfo = \"libpd-osx-multi\";\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t0E0EE92E12EC26C6004BA33D /* libpd.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = libpd.xcodeproj; path = ../libpd/libpd.xcodeproj; sourceTree = SOURCE_ROOT; };\n\t\t0E334CDB12EEF0BE001C571D /* RCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCommon.h; sourceTree = \"<group>\"; };\n\t\t0E8C8EB9131221E0000B9D7A /* PatchTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PatchTableViewCell.h; sourceTree = \"<group>\"; };\n\t\t0E8C8EBA131221E0000B9D7A /* PatchTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PatchTableViewCell.m; sourceTree = \"<group>\"; };\n\t\t0E8C8F181312306E000B9D7A /* test2.pd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = test2.pd; path = Resources/test2.pd; sourceTree = \"<group>\"; };\n\t\t1152A395147D362B00DCD675 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };\n\t\t11C6079E137D0A6C006D7F8B /* synctest.pd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = synctest.pd; path = Resources/synctest.pd; sourceTree = \"<group>\"; };\n\t\t1D3623240D0F684500981E51 /* PolyPatchAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PolyPatchAppDelegate.h; sourceTree = \"<group>\"; };\n\t\t1D3623250D0F684500981E51 /* PolyPatchAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PolyPatchAppDelegate.m; sourceTree = \"<group>\"; };\n\t\t1D6058910D05DD3D006BFB54 /* PolyPatch.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PolyPatch.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t28D7ACF60DDB3853001CB0EB /* PolyPatchViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PolyPatchViewController.h; sourceTree = \"<group>\"; };\n\t\t28D7ACF70DDB3853001CB0EB /* PolyPatchViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PolyPatchViewController.m; sourceTree = \"<group>\"; };\n\t\t29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t3063EF8A21091C8500C8A4A2 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = \"Default-568h@2x.png\"; sourceTree = \"<group>\"; };\n\t\t32CA4F630368D1EE00C91783 /* PolyPatch_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PolyPatch_Prefix.pch; sourceTree = \"<group>\"; };\n\t\t8D1107310486CEB800E47090 /* PolyPatch-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = \"PolyPatch-Info.plist\"; plistStructureDefinitionIdentifier = \"com.apple.xcode.plist.structure-definition.iphone.info-plist\"; sourceTree = \"<group>\"; };\n\t\tDC0C300D125D15FC008B6389 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\tDC0C3011125D160B008B6389 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };\n\t\tDC0C3015125D1614008B6389 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };\n\t\tDC35155012676B75004825FB /* ReadMe.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ReadMe.txt; sourceTree = \"<group>\"; };\n\t\tDC609325125BBEED00F8509D /* test.pd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = test.pd; path = Resources/test.pd; sourceTree = \"<group>\"; };\n\t\tDCCC7CDE125C3E0F002CF6AC /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = \"<absolute>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t1D60588F0D05DD3D006BFB54 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1152A396147D362B00DCD675 /* AVFoundation.framework in Frameworks */,\n\t\t\t\tDCCC7CDF125C3E0F002CF6AC /* AudioToolbox.framework in Frameworks */,\n\t\t\t\tDC0C300E125D15FC008B6389 /* Foundation.framework in Frameworks */,\n\t\t\t\tDC0C3012125D160B008B6389 /* UIKit.framework in Frameworks */,\n\t\t\t\tDC0C3016125D1614008B6389 /* CoreGraphics.framework in Frameworks */,\n\t\t\t\t0ED51349132BBE6500970D18 /* libpd-ios.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t080E96DDFE201D6D7F000001 /* Classes */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1D3623240D0F684500981E51 /* PolyPatchAppDelegate.h */,\n\t\t\t\t1D3623250D0F684500981E51 /* PolyPatchAppDelegate.m */,\n\t\t\t\t28D7ACF60DDB3853001CB0EB /* PolyPatchViewController.h */,\n\t\t\t\t28D7ACF70DDB3853001CB0EB /* PolyPatchViewController.m */,\n\t\t\t\t0E8C8EB9131221E0000B9D7A /* PatchTableViewCell.h */,\n\t\t\t\t0E8C8EBA131221E0000B9D7A /* PatchTableViewCell.m */,\n\t\t\t);\n\t\t\tpath = Classes;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0ED512F9132BB71700970D18 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t0ED512FD132BB71700970D18 /* libpd-ios.a */,\n\t\t\t\t11A30E74161153F800786A6D /* libpd-osx.a */,\n\t\t\t\t3063EF8721091B7400C8A4A2 /* libpd-ios-multi.a */,\n\t\t\t\t3063EF8921091B7400C8A4A2 /* libpd-osx-multi.a */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t19C28FACFE9D520D11CA2CBB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1D6058910D05DD3D006BFB54 /* PolyPatch.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3063EF8A21091C8500C8A4A2 /* Default-568h@2x.png */,\n\t\t\t\t0E0EE92E12EC26C6004BA33D /* libpd.xcodeproj */,\n\t\t\t\tDC35155012676B75004825FB /* ReadMe.txt */,\n\t\t\t\t080E96DDFE201D6D7F000001 /* Classes */,\n\t\t\t\t29B97315FDCFA39411CA2CEA /* Other Sources */,\n\t\t\t\t29B97317FDCFA39411CA2CEA /* Resources */,\n\t\t\t\t29B97323FDCFA39411CA2CEA /* Frameworks */,\n\t\t\t\t19C28FACFE9D520D11CA2CBB /* Products */,\n\t\t\t);\n\t\t\tname = CustomTemplate;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t29B97315FDCFA39411CA2CEA /* Other Sources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t32CA4F630368D1EE00C91783 /* PolyPatch_Prefix.pch */,\n\t\t\t\t29B97316FDCFA39411CA2CEA /* main.m */,\n\t\t\t\t0E334CDB12EEF0BE001C571D /* RCommon.h */,\n\t\t\t);\n\t\t\tname = \"Other Sources\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t29B97317FDCFA39411CA2CEA /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t11C6079E137D0A6C006D7F8B /* synctest.pd */,\n\t\t\t\t0E8C8F181312306E000B9D7A /* test2.pd */,\n\t\t\t\tDC609325125BBEED00F8509D /* test.pd */,\n\t\t\t\t8D1107310486CEB800E47090 /* PolyPatch-Info.plist */,\n\t\t\t);\n\t\t\tname = Resources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t29B97323FDCFA39411CA2CEA /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1152A395147D362B00DCD675 /* AVFoundation.framework */,\n\t\t\t\tDCCC7CDE125C3E0F002CF6AC /* AudioToolbox.framework */,\n\t\t\t\tDC0C300D125D15FC008B6389 /* Foundation.framework */,\n\t\t\t\tDC0C3011125D160B008B6389 /* UIKit.framework */,\n\t\t\t\tDC0C3015125D1614008B6389 /* CoreGraphics.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t1D6058900D05DD3D006BFB54 /* PolyPatch */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget \"PolyPatch\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1D60588D0D05DD3D006BFB54 /* Resources */,\n\t\t\t\t1D60588E0D05DD3D006BFB54 /* Sources */,\n\t\t\t\t1D60588F0D05DD3D006BFB54 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t0ED51322132BBCAF00970D18 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = PolyPatch;\n\t\t\tproductName = PolyPatch;\n\t\t\tproductReference = 1D6058910D05DD3D006BFB54 /* PolyPatch.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t29B97313FDCFA39411CA2CEA /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0930;\n\t\t\t};\n\t\t\tbuildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject \"PolyPatch\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 1;\n\t\t\tknownRegions = (\n\t\t\t\tEnglish,\n\t\t\t\tJapanese,\n\t\t\t\tFrench,\n\t\t\t\tGerman,\n\t\t\t);\n\t\t\tmainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectReferences = (\n\t\t\t\t{\n\t\t\t\t\tProductGroup = 0ED512F9132BB71700970D18 /* Products */;\n\t\t\t\t\tProjectRef = 0E0EE92E12EC26C6004BA33D /* libpd.xcodeproj */;\n\t\t\t\t},\n\t\t\t);\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t1D6058900D05DD3D006BFB54 /* PolyPatch */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXReferenceProxy section */\n\t\t0ED512FD132BB71700970D18 /* libpd-ios.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-ios.a\";\n\t\t\tremoteRef = 0ED512FC132BB71700970D18 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t11A30E74161153F800786A6D /* libpd-osx.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-osx.a\";\n\t\t\tremoteRef = 11A30E73161153F800786A6D /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t3063EF8721091B7400C8A4A2 /* libpd-ios-multi.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-ios-multi.a\";\n\t\t\tremoteRef = 3063EF8621091B7400C8A4A2 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t3063EF8921091B7400C8A4A2 /* libpd-osx-multi.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-osx-multi.a\";\n\t\t\tremoteRef = 3063EF8821091B7400C8A4A2 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n/* End PBXReferenceProxy section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t1D60588D0D05DD3D006BFB54 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tDC609326125BBEED00F8509D /* test.pd in Resources */,\n\t\t\t\tDC35155112676B75004825FB /* ReadMe.txt in Resources */,\n\t\t\t\t0E8C8F191312306E000B9D7A /* test2.pd in Resources */,\n\t\t\t\t3063EF8B21091C8500C8A4A2 /* Default-568h@2x.png in Resources */,\n\t\t\t\t11C6079F137D0A6C006D7F8B /* synctest.pd in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t1D60588E0D05DD3D006BFB54 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1D60589B0D05DD56006BFB54 /* main.m in Sources */,\n\t\t\t\t1D3623260D0F684500981E51 /* PolyPatchAppDelegate.m in Sources */,\n\t\t\t\t28D7ACF80DDB3853001CB0EB /* PolyPatchViewController.m in Sources */,\n\t\t\t\t0E8C8EBB131221E0000B9D7A /* PatchTableViewCell.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t0ED51322132BBCAF00970D18 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = libpd;\n\t\t\ttargetProxy = 0ED51321132BBCAF00970D18 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1D6058940D05DD3E006BFB54 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = PolyPatch_Prefix.pch;\n\t\t\t\tGCC_THUMB_SUPPORT = NO;\n\t\t\t\tHEADER_SEARCH_PATHS = ../libpd/objc;\n\t\t\t\tINFOPLIST_FILE = \"PolyPatch-Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = cc.libpd.PolyPatch;\n\t\t\t\tPRODUCT_NAME = PolyPatch;\n\t\t\t\t\"PROVISIONING_PROFILE[sdk=iphoneos*]\" = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1D6058950D05DD3E006BFB54 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = PolyPatch_Prefix.pch;\n\t\t\t\tGCC_THUMB_SUPPORT = NO;\n\t\t\t\tHEADER_SEARCH_PATHS = ../libpd/objc;\n\t\t\t\tINFOPLIST_FILE = \"PolyPatch-Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = cc.libpd.PolyPatch;\n\t\t\t\tPRODUCT_NAME = PolyPatch;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tC01FCF4F08A954540054247B /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = c99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = NO;\n\t\t\t\tHEADER_SEARCH_PATHS = ../libpd/objc;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tOTHER_CFLAGS = \"-DR_DEBUG\";\n\t\t\t\t\"PROVISIONING_PROFILE[sdk=iphoneos*]\" = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC01FCF5008A954540054247B /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = c99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = NO;\n\t\t\t\tHEADER_SEARCH_PATHS = ../libpd/objc;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tOTHER_CFLAGS = \"\";\n\t\t\t\t\"PROVISIONING_PROFILE[sdk=iphoneos*]\" = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget \"PolyPatch\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1D6058940D05DD3E006BFB54 /* Debug */,\n\t\t\t\t1D6058950D05DD3E006BFB54 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tC01FCF4E08A954540054247B /* Build configuration list for PBXProject \"PolyPatch\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC01FCF4F08A954540054247B /* Debug */,\n\t\t\t\tC01FCF5008A954540054247B /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 29B97313FDCFA39411CA2CEA /* Project object */;\n}\n"
  },
  {
    "path": "PolyPatch/PolyPatch_Prefix.pch",
    "content": "//\n// Prefix header for all source files of the 'PolyPatch' target in the 'PolyPatch' project\n//\n\n#ifdef __OBJC__\n    #import <Foundation/Foundation.h>\n    #import <UIKit/UIKit.h>\n\t#import \"RCommon.h\"\n#endif\n"
  },
  {
    "path": "PolyPatch/RCommon.h",
    "content": "#if defined(R_DEBUG)\n#define RLog(nslog_string, ...)\tprintf(\"%s\\t\", __PRETTY_FUNCTION__); printf(\"%s\", [[NSString stringWithFormat:nslog_string, ##__VA_ARGS__] UTF8String]); printf(\"\\n\");\n#else\n#define RLog(nslog_string, ...)\t\t\n#endif\n"
  },
  {
    "path": "PolyPatch/ReadMe.txt",
    "content": "PolyPatch iOS app\n\nThis is a sample app that demonstrates opening and maintaining many instances of \nthe same pd patch with the PdFile class.  The main view controller (PolyPatchViewController)\nkeeps a mutable array to hold the PdFile objects, which each directly correspond to\na cell in the tableview.  While the patch is open, each PdFile object contains the '$0' arg\nknown in pd land as a unique identifier - this value is useful for controlling which patches \nreceive a specific message by sending in a form similar to '$0-pitch' (see PatchTableViewCell).\n\nWhen a PdFile object is removed, the patch is automatically closed\nand pd frees the memory information for that patch.\n\nThe Libpd source and documentation is available at\nhttps://github.com/libpd/libpd\n\n--------------- License ------------\n\nThis software is copyrighted by Miller Puckette, Reality Jockey, Peter Brinkmann, \nRichard Eakin and others.  \nThe following terms (the \"Standard Improved BSD License\") apply to all files \nassociated with the software unless explicitly disclaimed in individual files:\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above  \n   copyright notice, this list of conditions and the following \n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n3. The name of the author may not be used to endorse or promote\n   products derived from this software without specific prior \n   written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\nBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\nIN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\nTHE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "PolyPatch/Resources/synctest.pd",
    "content": "#N canvas 325 128 593 583 10;\n#X floatatom 48 226 5 0 0 1 notenumber - -;\n#X obj 48 248 mtof;\n#X text 190 230 first inlet for pitch (in hertz);\n#X text 189 299 |;\n#X text 189 290 |;\n#X text 189 280 |;\n#X text 189 271 |;\n#X text 238 276 control/modulation inputs;\n#X obj 408 278 bng 15 250 50 0 readme-mod reiuweyuiyttytytyty readme-modulation\n17 7 0 14 -261682 -1 -258113;\n#X text 245 307 v;\n#X text 245 304 |;\n#X text 245 294 |;\n#X text 300 307 v;\n#X text 300 304 |;\n#X text 300 294 |;\n#X text 361 307 v;\n#X text 361 304 |;\n#X text 361 294 |;\n#X floatatom 48 273 5 0 0 1 hertz - -;\n#X text 189 262 |;\n#X text 189 252 |;\n#X text 189 243 |;\n#X msg 46 204 40;\n#X obj 46 184 loadbang;\n#X obj 185 534 dac~;\n#X obj 190 480 *~;\n#X msg 47 114 1;\n#X msg 78 113 0;\n#X obj 77 92 delay 200;\n#X obj 48 65 t b b;\n#X obj 45 41 metro 400;\n#X obj 45 20 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1\n;\n#X obj 46 148 s \\$0-note-on-off;\n#X obj 281 437 r \\$0-note-on-off;\n#X text 189 77 Synth waveforms produce basic waveforms which can be\nadded together and shaped with envelopes \\, filters and other effects.\n;\n#X msg 37 475 1;\n#X msg 68 474 0;\n#X obj 36 509 s \\$0-note-on-off;\n#X obj 19 442 bang;\n#X obj 67 439 bang;\n#X obj 186 15 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1\n-1;\n#X obj 284 16 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1\n-1;\n#X obj 28 386 r \\$0-noteOn;\n#X obj 67 415 r \\$0-noteOff;\n#X obj 27 328 r \\$0-midiNote;\n#X obj 194 53 s \\$0-noteOn;\n#X obj 281 52 s \\$0-noteOff;\n#N canvas 0 22 1105 629 eee-adsr~ 0;\n#X obj 44 176 f;\n#X obj 193 619 outlet~;\n#X obj 246 274 pack 0 0;\n#X obj 247 253 f;\n#X obj 178 226 delay;\n#X obj 264 233 r \\$0-sustain;\n#X obj 205 201 r \\$0-attack;\n#X obj 59 145 r \\$0-attack;\n#X obj 303 253 r \\$0-decay;\n#X obj 178 249 t b b;\n#X obj 379 320 pack 0 0;\n#X obj 438 297 r \\$0-release;\n#X msg 169 175 stop;\n#X obj 376 265 t b b b;\n#X msg 379 342 \\$1 \\, 0 \\$2;\n#X obj 83 386 vline~;\n#X obj 376 295 snapshot~;\n#X obj 190 554 lop~ 100;\n#X obj 195 529 line 0 1;\n#X obj 244 449 r \\$0-attack;\n#X obj 193 487 pack 0 0;\n#X obj 188 399 r \\$0-decay;\n#X obj 189 422 expr 1000/$f1;\n#X obj 194 464 f;\n#X obj 401 120 cnv 15 158 30 empty empty empty 20 12 0 14 -157192 -66577\n0;\n#X obj 402 134 nbx 4 14 1 9999 1 0 \\$0-attack \\$0-attack-r A. 0 -8\n0 10 -262144 -1 -262144 20 256;\n#X obj 438 134 nbx 4 14 1 9999 1 0 \\$0-decay \\$0-decay-r D. 0 -8 0\n10 -262144 -1 -262144 75 256;\n#X obj 475 134 nbx 4 14 0.01 1 1 0 \\$0-sustain \\$0-sustain-r S. 0 -8\n0 10 -262144 -1 -262144 0.3 256;\n#X obj 510 134 nbx 4 14 1 9999 1 0 \\$0-release \\$0-release-r R. 0 -8\n0 10 -262144 -1 -262144 200 256;\n#X obj 408 24 loadbang;\n#X obj 408 70 route 1 2 3 4 5;\n#X obj 124 55 sel 1 0;\n#X obj 124 5 inlet;\n#X obj 8 338 t b a;\n#X msg 284 547 1;\n#X obj 665 297 r \\$0-attack;\n#X obj 579 320 808_state \\$1/attack;\n#X obj 579 343 s \\$0-attack-r;\n#X obj 676 364 r \\$0-sustain;\n#X obj 582 410 s \\$0-sustain-r;\n#X obj 582 387 808_state \\$1/sustain;\n#X obj 670 444 r \\$0-decay;\n#X obj 587 491 s \\$0-decay-r;\n#X obj 587 466 808_state \\$1/decay;\n#X obj 590 534 808_state \\$1/release;\n#X obj 685 511 r \\$0-release;\n#X obj 590 558 s \\$0-release-r;\n#X msg 410 48 1 20 \\, 2 75 \\, 3 0.3 \\, 4 200;\n#X obj 337 514 delay;\n#X obj 368 457 r \\$0-release;\n#X msg 339 547 0;\n#X obj 309 588 switch~;\n#X obj 44 93 t b b b b b;\n#X obj 368 479 + 5;\n#X msg 257 397 stop;\n#X msg 43 226 \\$2 \\, 1 \\$1;\n#X obj 42 205 pack 0 0;\n#X obj 34 507 snapshot~;\n#X msg 193 507 50 \\, \\$1 \\$2;\n#X connect 0 0 56 0;\n#X connect 2 0 15 0;\n#X connect 3 0 2 0;\n#X connect 4 0 9 0;\n#X connect 5 0 3 1;\n#X connect 6 0 4 1;\n#X connect 7 0 0 1;\n#X connect 8 0 2 1;\n#X connect 9 0 3 0;\n#X connect 10 0 14 0;\n#X connect 11 0 10 1;\n#X connect 12 0 4 0;\n#X connect 13 0 16 0;\n#X connect 13 1 12 0;\n#X connect 14 0 15 0;\n#X connect 15 0 16 0;\n#X connect 15 0 17 0;\n#X connect 16 0 10 0;\n#X connect 17 0 1 0;\n#X connect 17 0 57 0;\n#X connect 18 0 17 1;\n#X connect 19 0 20 1;\n#X connect 20 0 58 0;\n#X connect 21 0 22 0;\n#X connect 22 0 23 1;\n#X connect 23 0 20 0;\n#X connect 29 0 47 0;\n#X connect 30 0 25 0;\n#X connect 30 1 26 0;\n#X connect 30 2 27 0;\n#X connect 30 3 28 0;\n#X connect 31 0 52 0;\n#X connect 31 1 13 0;\n#X connect 31 1 48 0;\n#X connect 32 0 31 0;\n#X connect 33 0 34 0;\n#X connect 33 1 15 0;\n#X connect 34 0 51 0;\n#X connect 35 0 36 1;\n#X connect 36 0 37 0;\n#X connect 38 0 40 1;\n#X connect 40 0 39 0;\n#X connect 41 0 43 1;\n#X connect 43 0 42 0;\n#X connect 44 0 46 0;\n#X connect 45 0 44 1;\n#X connect 47 0 30 0;\n#X connect 48 0 50 0;\n#X connect 49 0 53 0;\n#X connect 52 0 0 0;\n#X connect 52 1 4 0;\n#X connect 52 2 57 0;\n#X connect 52 3 23 0;\n#X connect 52 4 54 0;\n#X connect 52 4 12 0;\n#X connect 53 0 48 1;\n#X connect 54 0 48 0;\n#X connect 55 0 33 0;\n#X connect 56 0 55 0;\n#X connect 57 0 56 1;\n#X connect 58 0 18 0;\n#X restore 281 464 pd eee-adsr~;\n#N canvas 0 22 497 363 syn-cz10 0;\n#X obj 17 114 outlet~;\n#X obj 602 207 loadbang;\n#X obj 126 131 hsl 60 13 0 1 0 0 \\$0-a \\$0-ra phase -2 -7 0 10 -261278\n-1 -355 1770 1;\n#X obj 126 158 hsl 60 13 0 1 0 0 \\$0-c \\$0-rc wave1 -2 -7 0 10 -261278\n-1 -355 3540 1;\n#X obj 213 131 hsl 60 13 0 1 0 0 \\$0-b \\$0-rb index -2 -7 0 10 -261278\n-1 -355 0 1;\n#X obj 213 158 hsl 60 13 0 1 0 0 \\$0-d \\$0-rd wave2 -2 -7 0 10 -261278\n-1 -355 1180 1;\n#X obj 126 185 hsl 60 13 0 1 0 0 \\$0-e \\$0-re wavemix -2 -7 0 10 -261278\n-1 -355 2944 1;\n#X obj 213 185 hsl 60 13 0 1 0 0 \\$0-f \\$0-rf gain -2 -7 0 10 -261278\n-1 -355 2944 1;\n#X obj 106 131 cnv 12 15 13 empty empty 0 1 6 0 12 -33289 -262144 0\n;\n#X obj 106 158 cnv 12 15 13 empty empty 2 1 6 0 12 -33289 -262144 0\n;\n#X obj 106 185 cnv 12 15 13 empty empty 4 1 6 0 12 -33289 -262144 0\n;\n#X obj 193 131 cnv 12 15 13 empty empty 1 1 6 0 12 -33289 -262144 0\n;\n#X obj 193 158 cnv 12 15 13 empty empty 3 1 6 0 12 -33289 -262144 0\n;\n#X obj 193 185 cnv 12 15 13 empty empty 5 1 6 0 12 -33289 -262144 0\n;\n#N canvas 0 22 778 610 rgb 0;\n#X obj 296 207 * 256;\n#X obj 344 180 * 256;\n#X obj 346 201 * 256;\n#X obj 312 270 +;\n#X obj 298 228 t b f;\n#X obj 312 293 +;\n#X obj 346 223 t b f;\n#X obj 252 186 int;\n#X msg 263 68 0;\n#X obj 252 163 * -1;\n#X obj 296 162 * -1;\n#X obj 343 158 * -1;\n#X obj 103 123 vsl 10 40 1 255 0 0 ertteetyeyterttretretrrtrtrtrtrt\nhhghghghghghghgggggh empty 0 -8 0 10 -4160 -262144 -1 0 0;\n#X obj 115 123 vsl 10 40 1 255 0 0 ertteetyeyterttretretrrtrtrtrtrt\nhhghghghghghghgggggh empty 0 -8 0 10 -4034 -262144 -1 0 0;\n#X obj 127 123 vsl 10 40 1 255 0 0 ertteetyeyterttretretrrtrtrtrtrt\nhhghghghghghghgggggh empty 0 -8 0 10 -258113 -262144 -1 0 0;\n#X obj 252 144 int;\n#X obj 293 142 int;\n#X obj 342 138 int;\n#N canvas 0 22 478 328 list-enumerate 0;\n#X obj 107 63 t a b;\n#N canvas 473 338 454 304 count 0;\n#X obj 131 154 f 0;\n#X obj 156 153 + 1;\n#X msg 147 133 0;\n#X obj 131 183 outlet;\n#X obj 131 59 inlet;\n#X obj 131 96 b;\n#X obj 178 61 inlet;\n#X obj 178 98 b;\n#X connect 0 0 1 0;\n#X connect 0 0 3 0;\n#X connect 1 0 0 1;\n#X connect 2 0 0 1;\n#X connect 4 0 5 0;\n#X connect 5 0 0 0;\n#X connect 6 0 7 0;\n#X connect 7 0 2 0;\n#X restore 186 155 pd count;\n#X obj 107 113 t a b;\n#X obj 107 33 inlet;\n#X obj 107 181 list prepend;\n#X obj 126 264 outlet;\n#X obj 184 264 outlet;\n#N canvas 0 22 537 411 drip 0;\n#X obj 64 206 list split 1;\n#X obj 64 123 until;\n#X obj 64 181 list append;\n#X obj 194 206 bang;\n#X text 146 90 First store list \\, then start the loop;\n#X text 163 118 \"until\" bangs its output until told to stop by a \"bang\"\nto its right inlet.;\n#X text 182 160 Store the remaining list.;\n#X text 239 205 third outlet of \"split\" tells us to stop.;\n#X obj 64 243 outlet;\n#X obj 64 57 inlet;\n#X text 237 44 From list-help.pd;\n#X obj 143 243 outlet;\n#X obj 64 86 t b a;\n#X connect 0 0 8 0;\n#X connect 0 1 2 1;\n#X connect 0 2 3 0;\n#X connect 0 2 11 0;\n#X connect 1 0 2 0;\n#X connect 2 0 0 0;\n#X connect 3 0 1 1;\n#X connect 9 0 12 0;\n#X connect 12 0 1 0;\n#X connect 12 1 2 1;\n#X restore 110 88 pd drip;\n#X obj 68 155 list prepend color;\n#X msg 69 135 \\$1 -1 28;\n#X connect 0 0 7 0;\n#X connect 0 1 1 1;\n#X connect 1 0 4 1;\n#X connect 2 0 9 0;\n#X connect 2 1 1 0;\n#X connect 3 0 0 0;\n#X connect 4 0 5 0;\n#X connect 7 0 2 0;\n#X connect 7 1 6 0;\n#X connect 8 0 4 0;\n#X connect 9 0 8 0;\n#X restore 294 389 pd list-enumerate;\n#X obj 299 419 s \\$0-controls;\n#X msg 306 356 \\$1 \\$1 \\$1 \\$1 \\$1 \\$1 \\$1 \\$1 \\$1 \\$1 \\$1 \\$1 \\$1\n\\$1 \\$1 \\$1;\n#X connect 0 0 4 0;\n#X connect 1 0 2 0;\n#X connect 2 0 6 0;\n#X connect 3 0 5 0;\n#X connect 4 0 3 0;\n#X connect 4 1 3 1;\n#X connect 5 0 20 0;\n#X connect 6 0 3 0;\n#X connect 6 1 5 1;\n#X connect 7 0 3 0;\n#X connect 8 0 12 0;\n#X connect 8 0 13 0;\n#X connect 8 0 14 0;\n#X connect 9 0 7 0;\n#X connect 10 0 0 0;\n#X connect 11 0 1 0;\n#X connect 12 0 15 0;\n#X connect 13 0 16 0;\n#X connect 14 0 17 0;\n#X connect 15 0 9 0;\n#X connect 16 0 10 0;\n#X connect 17 0 11 0;\n#X connect 18 0 19 0;\n#X connect 20 0 18 0;\n#X coords 0 -1 1 1 40 70 1 100 100;\n#X restore 156 228 pd rgb;\n#X obj 658 6 inlet modulation-add;\n#X obj 786 6 inlet modulation-multiply;\n#X obj 480 8 r \\$0-values;\n#X msg 286 158 76;\n#X msg 288 129 50;\n#X msg 288 187 102;\n#X obj 659 26 list prepend add;\n#X obj 787 27 list prepend mul;\n#X text 110 29 outlet audio~;\n#X obj 369 13 inlet controls;\n#X obj 368 47 s \\$0-controls;\n#N canvas 47 74 1068 587 modulate.oOo..oOo..oOo.. 0;\n#X obj 101 271 +;\n#X obj 101 250 t b f;\n#X obj 82 82 route 0 1 2 3 4 5 6 7;\n#X obj 244 216 route 0 1 2 3 4 5 6 7;\n#X obj 138 271 +;\n#X obj 138 250 t b f;\n#X obj 175 271 +;\n#X obj 175 250 t b f;\n#X obj 212 271 +;\n#X obj 212 250 t b f;\n#X obj 248 271 +;\n#X obj 248 250 t b f;\n#X obj 286 271 +;\n#X obj 286 250 t b f;\n#X obj 323 271 +;\n#X obj 323 250 t b f;\n#X obj 360 271 +;\n#X obj 360 250 t b f;\n#X obj 61 8 inlet;\n#X obj 99 490 outlet;\n#X obj 155 486 outlet;\n#X obj 208 489 outlet;\n#X obj 264 489 outlet;\n#X obj 318 486 outlet;\n#X obj 370 486 outlet;\n#X obj 425 485 outlet;\n#X obj 492 484 outlet;\n#X obj 78 409 clip 0 1;\n#X obj 132 411 clip 0 1;\n#X obj 186 412 clip 0 1;\n#X obj 240 414 clip 0 1;\n#X obj 294 416 clip 0 1;\n#X obj 348 418 clip 0 1;\n#X obj 402 419 clip 0 1;\n#X obj 456 421 clip 0 1;\n#X obj 418 177 route add mul;\n#X obj 117 332 t b f;\n#X obj 156 335 t b f;\n#X obj 193 335 t b f;\n#X obj 230 335 t b f;\n#X obj 266 335 t b f;\n#X obj 304 335 t b f;\n#X obj 341 335 t b f;\n#X obj 378 335 t b f;\n#X obj 118 356 * 1;\n#X obj 156 356 * 1;\n#X obj 193 356 * 1;\n#X obj 231 355 * 1;\n#X obj 266 356 * 1;\n#X obj 304 356 * 1;\n#X obj 341 356 * 1;\n#X obj 378 356 * 1;\n#X obj 397 275 route 0 1 2 3 4 5 6 7;\n#X obj 550 262 +;\n#X obj 550 241 t b f;\n#X obj 587 262 +;\n#X obj 587 241 t b f;\n#X obj 624 262 +;\n#X obj 624 241 t b f;\n#X obj 661 262 +;\n#X obj 661 241 t b f;\n#X obj 697 262 +;\n#X obj 697 241 t b f;\n#X obj 735 262 +;\n#X obj 735 241 t b f;\n#X obj 772 262 +;\n#X obj 772 241 t b f;\n#X obj 809 262 +;\n#X obj 809 241 t b f;\n#X obj 548 481 outlet;\n#X obj 604 477 outlet;\n#X obj 657 480 outlet;\n#X obj 713 480 outlet;\n#X obj 767 477 outlet;\n#X obj 819 477 outlet;\n#X obj 874 476 outlet;\n#X obj 941 475 outlet;\n#X obj 527 400 clip 0 1;\n#X obj 581 402 clip 0 1;\n#X obj 635 403 clip 0 1;\n#X obj 689 405 clip 0 1;\n#X obj 743 407 clip 0 1;\n#X obj 797 409 clip 0 1;\n#X obj 851 410 clip 0 1;\n#X obj 905 412 clip 0 1;\n#X obj 867 168 route add mul;\n#X obj 566 323 t b f;\n#X obj 605 326 t b f;\n#X obj 642 326 t b f;\n#X obj 679 326 t b f;\n#X obj 715 326 t b f;\n#X obj 753 326 t b f;\n#X obj 790 326 t b f;\n#X obj 827 326 t b f;\n#X obj 567 347 * 1;\n#X obj 605 347 * 1;\n#X obj 642 347 * 1;\n#X obj 680 346 * 1;\n#X obj 715 347 * 1;\n#X obj 753 347 * 1;\n#X obj 790 347 * 1;\n#X obj 827 347 * 1;\n#X obj 693 206 route 8 9 10 11 12 13 14 5;\n#X obj 846 266 route 8 9 10 11 12 13 14 15;\n#X msg 79 110 \\$1 20;\n#X msg 92 130 \\$1 20;\n#X msg 120 111 \\$1 20;\n#X msg 133 131 \\$1 20;\n#X msg 161 110 \\$1 20;\n#X msg 174 130 \\$1 20;\n#X msg 202 111 \\$1 20;\n#X msg 215 131 \\$1 20;\n#X obj 92 171 line 0 1;\n#X obj 109 194 line 0 1;\n#X obj 149 166 line 0 1;\n#X obj 166 189 line 0 1;\n#X obj 207 163 line 0 1;\n#X obj 224 186 line 0 1;\n#X obj 264 158 line 0 1;\n#X obj 281 181 line 0 1;\n#X msg 501 51 \\$1 20;\n#X msg 514 71 \\$1 20;\n#X msg 542 52 \\$1 20;\n#X msg 555 72 \\$1 20;\n#X msg 583 51 \\$1 20;\n#X msg 596 71 \\$1 20;\n#X msg 624 52 \\$1 20;\n#X msg 637 72 \\$1 20;\n#X obj 512 111 line 0 1;\n#X obj 571 107 line 0 1;\n#X obj 588 130 line 0 1;\n#X obj 629 104 line 0 1;\n#X obj 646 127 line 0 1;\n#X obj 686 99 line 0 1;\n#X obj 703 122 line 0 1;\n#X obj 504 22 route 8 9 10 11 12 13 14 15;\n#X obj 530 132 line 0 1;\n#X obj 845 94 list trim;\n#X obj 849 72 inlet;\n#X connect 0 0 44 0;\n#X connect 1 0 0 0;\n#X connect 1 1 0 1;\n#X connect 2 0 104 0;\n#X connect 2 1 105 0;\n#X connect 2 2 106 0;\n#X connect 2 3 107 0;\n#X connect 2 4 108 0;\n#X connect 2 5 109 0;\n#X connect 2 6 110 0;\n#X connect 2 7 111 0;\n#X connect 3 0 0 0;\n#X connect 3 1 4 0;\n#X connect 3 2 6 0;\n#X connect 3 3 8 0;\n#X connect 3 4 10 0;\n#X connect 3 5 12 0;\n#X connect 3 6 14 0;\n#X connect 3 7 16 0;\n#X connect 4 0 45 0;\n#X connect 5 0 4 0;\n#X connect 5 1 4 1;\n#X connect 6 0 46 0;\n#X connect 7 0 6 0;\n#X connect 7 1 6 1;\n#X connect 8 0 47 0;\n#X connect 9 0 8 0;\n#X connect 9 1 8 1;\n#X connect 10 0 48 0;\n#X connect 11 0 10 0;\n#X connect 11 1 10 1;\n#X connect 12 0 49 0;\n#X connect 13 0 12 0;\n#X connect 13 1 12 1;\n#X connect 14 0 50 0;\n#X connect 15 0 14 0;\n#X connect 15 1 14 1;\n#X connect 16 0 51 0;\n#X connect 17 0 16 0;\n#X connect 17 1 16 1;\n#X connect 18 0 2 0;\n#X connect 18 0 135 0;\n#X connect 27 0 19 0;\n#X connect 28 0 20 0;\n#X connect 29 0 21 0;\n#X connect 30 0 22 0;\n#X connect 31 0 23 0;\n#X connect 32 0 24 0;\n#X connect 33 0 25 0;\n#X connect 34 0 26 0;\n#X connect 35 0 3 0;\n#X connect 35 1 52 0;\n#X connect 36 0 44 0;\n#X connect 36 1 44 1;\n#X connect 37 0 45 0;\n#X connect 37 1 45 1;\n#X connect 38 0 46 0;\n#X connect 38 1 46 1;\n#X connect 39 0 47 0;\n#X connect 39 1 47 1;\n#X connect 40 0 48 0;\n#X connect 40 1 48 1;\n#X connect 41 0 49 0;\n#X connect 41 1 49 1;\n#X connect 42 0 50 0;\n#X connect 42 1 50 1;\n#X connect 43 0 51 0;\n#X connect 43 1 51 1;\n#X connect 44 0 27 0;\n#X connect 45 0 28 0;\n#X connect 46 0 29 0;\n#X connect 47 0 30 0;\n#X connect 48 0 31 0;\n#X connect 49 0 32 0;\n#X connect 50 0 33 0;\n#X connect 51 0 34 0;\n#X connect 52 0 36 0;\n#X connect 52 1 37 0;\n#X connect 52 2 38 0;\n#X connect 52 3 39 0;\n#X connect 52 4 40 0;\n#X connect 52 5 41 0;\n#X connect 52 6 42 0;\n#X connect 52 7 43 0;\n#X connect 53 0 94 0;\n#X connect 54 0 53 0;\n#X connect 54 1 53 1;\n#X connect 55 0 95 0;\n#X connect 56 0 55 0;\n#X connect 56 1 55 1;\n#X connect 57 0 96 0;\n#X connect 58 0 57 0;\n#X connect 58 1 57 1;\n#X connect 59 0 97 0;\n#X connect 60 0 59 0;\n#X connect 60 1 59 1;\n#X connect 61 0 98 0;\n#X connect 62 0 61 0;\n#X connect 62 1 61 1;\n#X connect 63 0 99 0;\n#X connect 64 0 63 0;\n#X connect 64 1 63 1;\n#X connect 65 0 100 0;\n#X connect 66 0 65 0;\n#X connect 66 1 65 1;\n#X connect 67 0 101 0;\n#X connect 68 0 67 0;\n#X connect 68 1 67 1;\n#X connect 77 0 69 0;\n#X connect 78 0 70 0;\n#X connect 79 0 71 0;\n#X connect 80 0 72 0;\n#X connect 81 0 73 0;\n#X connect 82 0 74 0;\n#X connect 83 0 75 0;\n#X connect 84 0 76 0;\n#X connect 85 0 102 0;\n#X connect 85 1 103 0;\n#X connect 86 0 94 0;\n#X connect 86 1 94 1;\n#X connect 87 0 95 0;\n#X connect 87 1 95 1;\n#X connect 88 0 96 0;\n#X connect 88 1 96 1;\n#X connect 89 0 97 0;\n#X connect 89 1 97 1;\n#X connect 90 0 98 0;\n#X connect 90 1 98 1;\n#X connect 91 0 99 0;\n#X connect 91 1 99 1;\n#X connect 92 0 100 0;\n#X connect 92 1 100 1;\n#X connect 93 0 101 0;\n#X connect 93 1 101 1;\n#X connect 94 0 77 0;\n#X connect 95 0 78 0;\n#X connect 96 0 79 0;\n#X connect 97 0 80 0;\n#X connect 98 0 81 0;\n#X connect 99 0 82 0;\n#X connect 100 0 83 0;\n#X connect 101 0 84 0;\n#X connect 102 0 53 0;\n#X connect 102 1 55 0;\n#X connect 102 2 57 0;\n#X connect 102 3 59 0;\n#X connect 102 4 61 0;\n#X connect 102 5 63 0;\n#X connect 102 6 65 0;\n#X connect 102 7 67 0;\n#X connect 103 0 86 0;\n#X connect 103 1 87 0;\n#X connect 103 2 88 0;\n#X connect 103 3 89 0;\n#X connect 103 4 90 0;\n#X connect 103 5 91 0;\n#X connect 103 6 92 0;\n#X connect 103 7 93 0;\n#X connect 104 0 112 0;\n#X connect 105 0 113 0;\n#X connect 106 0 114 0;\n#X connect 107 0 115 0;\n#X connect 108 0 116 0;\n#X connect 109 0 117 0;\n#X connect 110 0 118 0;\n#X connect 111 0 119 0;\n#X connect 112 0 1 0;\n#X connect 113 0 5 0;\n#X connect 114 0 7 0;\n#X connect 115 0 9 0;\n#X connect 116 0 11 0;\n#X connect 117 0 13 0;\n#X connect 118 0 15 0;\n#X connect 119 0 17 0;\n#X connect 120 0 128 0;\n#X connect 121 0 136 0;\n#X connect 122 0 129 0;\n#X connect 123 0 130 0;\n#X connect 124 0 131 0;\n#X connect 125 0 132 0;\n#X connect 126 0 133 0;\n#X connect 127 0 134 0;\n#X connect 128 0 54 0;\n#X connect 129 0 58 0;\n#X connect 130 0 60 0;\n#X connect 131 0 62 0;\n#X connect 132 0 64 0;\n#X connect 133 0 66 0;\n#X connect 134 0 68 0;\n#X connect 135 0 120 0;\n#X connect 135 1 121 0;\n#X connect 135 2 122 0;\n#X connect 135 3 123 0;\n#X connect 135 4 124 0;\n#X connect 135 5 125 0;\n#X connect 135 6 126 0;\n#X connect 135 7 127 0;\n#X connect 136 0 56 0;\n#X connect 137 0 35 0;\n#X connect 137 0 85 0;\n#X connect 138 0 137 0;\n#X restore 482 68 pd modulate.oOo..oOo..oOo..;\n#X text 104 14 inlets pitch \\, control \\, add \\, multiply;\n#X obj 17 29 s \\$0-pitch;\n#X obj 16 6 inlet;\n#X obj 465 154 s \\$0-phase;\n#X obj 535 153 s \\$0-index;\n#X obj 607 153 s \\$0-wave1;\n#X obj 674 152 s \\$0-wave2;\n#X obj 743 150 s \\$0-wavemix;\n#X obj 823 150 s \\$0-gain;\n#X msg 369 208 phase index wave1 wave2 wavemix gain;\n#X msg 603 264 0.3 0 0.6 0.2 0.499 0.499;\n#N canvas 77 22 893 719 cz-1000 0;\n#X obj 386 136 pow 0.15;\n#X obj 387 86 line;\n#X msg 386 66 \\$1 50;\n#X obj 387 44 + 1;\n#X obj 259 207 wrap~;\n#X obj 259 184 *~ 4;\n#X obj 220 538 *~;\n#X obj 284 483 +~ 0.25;\n#X obj 284 505 cos~;\n#X obj 283 463 +~;\n#X obj 371 300 *~;\n#X obj 386 211 expr 0.5 / (1 - $f1);\n#X obj 256 418 *~;\n#X obj 256 334 *~ -1;\n#X obj 256 356 +~ 1;\n#X obj 256 380 *~;\n#X obj 387 108 / 102;\n#X obj 371 325 expr~ (1 - $v1) - 1;\n#X obj 361 373 *~;\n#X obj 436 401 expr 0.5 / $f1;\n#X obj 403 279 -~ 1;\n#X obj 361 393 *~;\n#X obj 361 416 *~ -1;\n#X obj 361 437 expr~ 0.5 - $v1;\n#N canvas 0 22 828 638 waveshaper 0;\n#X obj 434 111 *~ -1;\n#X obj 434 136 +~ 1;\n#X obj 410 197 min~;\n#X obj 409 225 *~ 2;\n#X obj 293 310 outlet~;\n#X obj 300 146 *~ 2;\n#X obj 300 170 min~ 1;\n#X obj 402 -146 inlet;\n#X obj 401 -86 == 1;\n#X obj 222 -8 *~ 1;\n#X obj 282 -14 *~ 0;\n#X obj 337 -14 *~ 0;\n#X obj 197 -182 inlet~;\n#X obj 440 -86 == 2;\n#X obj 362 -88 == 0;\n#X connect 0 0 1 0;\n#X connect 1 0 2 1;\n#X connect 2 0 3 0;\n#X connect 3 0 4 0;\n#X connect 5 0 6 0;\n#X connect 6 0 4 0;\n#X connect 7 0 8 0;\n#X connect 7 0 13 0;\n#X connect 7 0 14 0;\n#X connect 8 0 10 1;\n#X connect 9 0 4 0;\n#X connect 10 0 5 0;\n#X connect 11 0 0 0;\n#X connect 11 0 2 0;\n#X connect 12 0 9 0;\n#X connect 12 0 10 0;\n#X connect 12 0 11 0;\n#X connect 13 0 11 1;\n#X connect 14 0 9 1;\n#X restore 158 417 pd waveshaper;\n#N canvas 186 22 841 618 waveshaper 0;\n#X obj 308 407 outlet~;\n#X obj 549 -52 inlet;\n#X obj 267 -41 inlet~;\n#X obj 549 50 == 4;\n#N canvas 0 22 667 497 sawtooth 0;\n#X text 225 81 sawtooth;\n#X obj 89 113 *~ 1;\n#X obj 86 2 inlet~;\n#X obj 240 279 outlet~;\n#X obj 144 69 inlet;\n#X obj 86 49 *~ -1;\n#X obj 152 123 switch~ 0;\n#X connect 1 0 3 0;\n#X connect 2 0 5 0;\n#X connect 4 0 1 1;\n#X connect 4 0 6 0;\n#X connect 5 0 1 0;\n#X restore 57 81 pd sawtooth;\n#X obj 130 50 == 0;\n#N canvas 0 22 490 316 square 0;\n#X obj 86 2 inlet~;\n#X obj 144 69 inlet;\n#X text 211 111 square;\n#X obj 88 113 *~ 0;\n#X obj 116 239 outlet~;\n#X obj 136 154 switch~ 0;\n#X obj 87 42 expr~ $v1>0.5;\n#X connect 0 0 6 0;\n#X connect 1 0 3 1;\n#X connect 1 0 5 0;\n#X connect 3 0 4 0;\n#X connect 6 0 3 0;\n#X restore 161 82 pd square;\n#X obj 220 50 == 1;\n#N canvas 0 22 603 438 pulse 0;\n#X obj 86 2 inlet~;\n#X obj 209 209 inlet;\n#X text 205 86 pulse;\n#X obj 87 59 *~;\n#X obj 88 81 *~;\n#X obj 155 252 *~ 0;\n#X obj 241 331 outlet~;\n#X obj 195 258 switch~;\n#X connect 0 0 3 1;\n#X connect 0 0 3 0;\n#X connect 1 0 5 1;\n#X connect 1 0 7 0;\n#X connect 3 0 4 0;\n#X connect 3 0 4 1;\n#X connect 4 0 5 0;\n#X connect 5 0 6 0;\n#X restore 269 82 pd pulse;\n#X obj 344 42 == 2;\n#N canvas 0 22 611 446 saw-pulse 0;\n#X obj 86 2 inlet~;\n#X obj 156 301 outlet~;\n#X obj 129 157 inlet;\n#X obj 71 149 cos~;\n#X obj 71 131 +~ 0.75;\n#X obj 68 92 *~ 0.5;\n#X text 127 78 saw-pulse;\n#X obj 73 188 *~ 0;\n#X obj 69 112 expr~ if ($v1 > 0.25 \\, $v1 \\, 0);\n#X obj 145 200 switch~;\n#X connect 0 0 5 0;\n#X connect 2 0 7 1;\n#X connect 2 0 9 0;\n#X connect 3 0 7 0;\n#X connect 4 0 3 0;\n#X connect 5 0 8 0;\n#X connect 7 0 1 0;\n#X connect 8 0 4 0;\n#X restore 470 79 pd saw-pulse;\n#X obj 450 39 == 3;\n#N canvas 0 22 607 442 doublesine 0;\n#X obj 86 2 inlet~;\n#X obj 156 301 outlet~;\n#X obj 209 209 inlet;\n#X obj 155 252 *~ 0;\n#X obj 93 89 cos~;\n#X obj 92 52 expr~ if ($v1 > 0.66666 \\, ((1-$v1) * 1.5) - 0.25 \\, $v1\n* 0.75 + 0.25);\n#X text 229 116 double sine;\n#X obj 226 240 switch~;\n#X connect 0 0 5 0;\n#X connect 2 0 3 1;\n#X connect 2 0 7 0;\n#X connect 3 0 1 0;\n#X connect 4 0 3 0;\n#X connect 5 0 4 0;\n#X restore 358 84 pd doublesine;\n#X connect 1 0 5 0;\n#X connect 1 0 7 0;\n#X connect 1 0 9 0;\n#X connect 1 0 3 0;\n#X connect 1 0 11 0;\n#X connect 2 0 4 0;\n#X connect 2 0 6 0;\n#X connect 2 0 8 0;\n#X connect 2 0 10 0;\n#X connect 2 0 12 0;\n#X connect 3 0 10 1;\n#X connect 4 0 0 0;\n#X connect 5 0 4 1;\n#X connect 6 0 0 0;\n#X connect 7 0 6 1;\n#X connect 8 0 0 0;\n#X connect 9 0 8 1;\n#X connect 10 0 0 0;\n#X connect 11 0 12 1;\n#X connect 12 0 0 0;\n#X restore 46 416 pd waveshaper;\n#X obj 387 3 r \\$0-ctrl-1;\n#X obj 547 112 s \\$0-ctrl-1;\n#X obj 282 137 r \\$0-ctrl-2;\n#X obj 406 343 r \\$0-z-phase;\n#X obj 408 162 s \\$0-z-phase;\n#X obj 550 238 s \\$0-ctrl-2;\n#X obj 387 24 / 1.5;\n#X obj 88 456 *~ 0.5;\n#X text 656 393 sawtooth;\n#X text 656 411 square;\n#X text 657 425 pulse;\n#X text 658 441 double sine;\n#X text 656 455 sawpulse;\n#X obj 554 425 int;\n#X obj 554 404 * 4.99;\n#X obj 547 92 * 127;\n#X obj 547 74 r \\$0-phase;\n#X obj 302 534 r \\$0-gain;\n#N canvas 0 22 466 316 rh_scalelog 0;\n#X obj 20 155 exp;\n#X obj 20 107 *;\n#X obj 20 130 +;\n#X obj 98 87 log;\n#X obj 194 84 log;\n#X obj 123 123 t b f;\n#X obj 123 145 -;\n#X obj 20 183 outlet;\n#X obj 20 19 inlet;\n#X obj 98 23 inlet;\n#X obj 194 24 inlet;\n#X connect 0 0 7 0;\n#X connect 1 0 2 0;\n#X connect 2 0 0 0;\n#X connect 3 0 2 1;\n#X connect 3 0 5 0;\n#X connect 4 0 6 0;\n#X connect 5 0 6 0;\n#X connect 5 1 6 1;\n#X connect 6 0 1 1;\n#X connect 8 0 1 0;\n#X connect 9 0 3 0;\n#X connect 10 0 4 0;\n#X restore 302 604 pd rh_scalelog;\n#X msg 349 580 0.1;\n#X msg 395 580 10;\n#X obj 222 615 *~;\n#X obj 554 382 r \\$0-wave2;\n#X obj 550 294 r \\$0-wave1;\n#X obj 551 334 int;\n#X obj 551 313 * 2.99;\n#X text 660 303 saw;\n#X text 660 318 trapezoid;\n#X text 662 333 triangle;\n#X obj 550 191 int;\n#X obj 550 170 * 15.99;\n#X obj 549 151 r \\$0-index;\n#X obj 134 2 r \\$0-pitch;\n#X obj 222 670 outlet~;\n#X obj 243 307 r \\$0-ctrl-3;\n#X obj 91 342 r \\$0-ctrl-4;\n#X obj 551 354 s \\$0-ctrl-3;\n#X obj 554 446 s \\$0-ctrl-4;\n#X obj 567 511 r \\$0-wavemix;\n#X obj 657 592 - 1;\n#X obj 657 614 abs;\n#X msg 567 536 \\$1 50;\n#X obj 566 556 line;\n#X obj 655 657 s \\$0-w2mix;\n#X obj 566 656 s \\$0-w1mix;\n#X obj 145 477 r \\$0-w1mix;\n#X obj 555 611 min 0.5;\n#X obj 656 636 min 0.5;\n#X obj 257 560 r \\$0-w2mix;\n#X obj 108 502 *~ 0.5;\n#X obj 220 584 *~ 0.5;\n#X obj 550 214 + 2;\n#X obj 225 641 *~ 2;\n#X obj 406 361 sel 0;\n#X msg 407 380 0.005;\n#X obj 349 166 sel 1;\n#X msg 349 187 0.999;\n#X obj 151 106 min~ 0.5;\n#X obj 87 107 max~ 0.5;\n#X obj 87 132 -~ 0.5;\n#X obj 87 156 *~ 2;\n#X obj 151 130 *~ 2;\n#X obj 127 62 phasor~ -100;\n#X obj 151 176 *~;\n#X obj 130 36 * -1;\n#X obj 166 153 expr~ $v1<1;\n#X obj 390 252 expr~ $v1>$f2;\n#X obj 350 554 r \\$0-loadbang;\n#X connect 0 0 30 0;\n#X connect 0 0 81 0;\n#X connect 0 0 92 1;\n#X connect 1 0 16 0;\n#X connect 2 0 1 0;\n#X connect 3 0 2 0;\n#X connect 4 0 13 0;\n#X connect 4 0 10 0;\n#X connect 4 0 92 0;\n#X connect 5 0 4 0;\n#X connect 6 0 76 0;\n#X connect 7 0 8 0;\n#X connect 8 0 6 1;\n#X connect 9 0 7 0;\n#X connect 10 0 17 0;\n#X connect 11 0 15 1;\n#X connect 12 0 9 0;\n#X connect 13 0 14 0;\n#X connect 14 0 15 0;\n#X connect 15 0 12 0;\n#X connect 16 0 0 0;\n#X connect 17 0 18 0;\n#X connect 18 0 21 0;\n#X connect 19 0 18 1;\n#X connect 20 0 10 1;\n#X connect 20 0 21 1;\n#X connect 21 0 22 0;\n#X connect 22 0 23 0;\n#X connect 23 0 9 0;\n#X connect 24 0 6 0;\n#X connect 25 0 33 0;\n#X connect 26 0 32 0;\n#X connect 28 0 5 1;\n#X connect 29 0 79 0;\n#X connect 32 0 3 0;\n#X connect 33 0 75 0;\n#X connect 39 0 63 0;\n#X connect 40 0 39 0;\n#X connect 41 0 27 0;\n#X connect 42 0 41 0;\n#X connect 43 0 44 0;\n#X connect 44 0 47 1;\n#X connect 45 0 44 1;\n#X connect 46 0 44 2;\n#X connect 47 0 78 0;\n#X connect 48 0 40 0;\n#X connect 49 0 51 0;\n#X connect 50 0 62 0;\n#X connect 51 0 50 0;\n#X connect 55 0 77 0;\n#X connect 56 0 55 0;\n#X connect 57 0 56 0;\n#X connect 58 0 90 0;\n#X connect 60 0 24 1;\n#X connect 61 0 25 1;\n#X connect 64 0 67 0;\n#X connect 65 0 66 0;\n#X connect 66 0 73 0;\n#X connect 67 0 68 0;\n#X connect 68 0 65 0;\n#X connect 68 0 72 0;\n#X connect 71 0 75 1;\n#X connect 72 0 70 0;\n#X connect 73 0 69 0;\n#X connect 74 0 76 1;\n#X connect 75 0 47 0;\n#X connect 76 0 47 0;\n#X connect 77 0 31 0;\n#X connect 78 0 59 0;\n#X connect 79 0 80 0;\n#X connect 79 1 19 0;\n#X connect 80 0 19 0;\n#X connect 81 0 82 0;\n#X connect 81 1 11 0;\n#X connect 82 0 11 0;\n#X connect 83 0 87 0;\n#X connect 84 0 85 0;\n#X connect 85 0 86 0;\n#X connect 86 0 25 0;\n#X connect 87 0 89 0;\n#X connect 87 0 91 0;\n#X connect 88 0 83 0;\n#X connect 88 0 84 0;\n#X connect 89 0 24 0;\n#X connect 89 0 5 0;\n#X connect 90 0 88 0;\n#X connect 91 0 89 1;\n#X connect 92 0 12 1;\n#X connect 92 0 20 0;\n#X connect 93 0 45 0;\n#X connect 93 0 46 0;\n#X restore 15 80 pd cz-1000;\n#N canvas 361 43 833 682 list-functions 0;\n#N canvas 0 22 462 312 list-enumerate 0;\n#X obj 107 63 t a b;\n#N canvas 473 338 454 304 count 0;\n#X obj 131 154 f 0;\n#X obj 156 153 + 1;\n#X msg 147 133 0;\n#X obj 131 183 outlet;\n#X obj 131 59 inlet;\n#X obj 131 96 b;\n#X obj 178 61 inlet;\n#X obj 178 98 b;\n#X connect 0 0 1 0;\n#X connect 0 0 3 0;\n#X connect 1 0 0 1;\n#X connect 2 0 0 1;\n#X connect 4 0 5 0;\n#X connect 5 0 0 0;\n#X connect 6 0 7 0;\n#X connect 7 0 2 0;\n#X restore 186 155 pd count;\n#X obj 107 113 t a b;\n#X obj 107 33 inlet;\n#X obj 107 181 list prepend;\n#X obj 107 209 outlet;\n#X obj 165 209 outlet;\n#N canvas 0 22 537 411 drip 0;\n#X obj 64 206 list split 1;\n#X obj 64 123 until;\n#X obj 64 181 list append;\n#X obj 194 206 bang;\n#X text 146 90 First store list \\, then start the loop;\n#X text 163 118 \"until\" bangs its output until told to stop by a \"bang\"\nto its right inlet.;\n#X text 182 160 Store the remaining list.;\n#X text 239 205 third outlet of \"split\" tells us to stop.;\n#X obj 64 243 outlet;\n#X obj 64 57 inlet;\n#X text 237 44 From list-help.pd;\n#X obj 143 243 outlet;\n#X obj 64 86 t b a;\n#X connect 0 0 8 0;\n#X connect 0 1 2 1;\n#X connect 0 2 3 0;\n#X connect 0 2 11 0;\n#X connect 1 0 2 0;\n#X connect 2 0 0 0;\n#X connect 3 0 1 1;\n#X connect 9 0 12 0;\n#X connect 12 0 1 0;\n#X connect 12 1 2 1;\n#X restore 110 88 pd drip;\n#X obj 76 154 list prepend label;\n#X connect 0 0 7 0;\n#X connect 0 1 1 1;\n#X connect 1 0 4 1;\n#X connect 2 0 8 0;\n#X connect 2 1 1 0;\n#X connect 3 0 0 0;\n#X connect 4 0 5 0;\n#X connect 7 0 2 0;\n#X connect 7 1 6 0;\n#X connect 8 0 4 0;\n#X restore 37 184 pd list-enumerate;\n#X obj 37 230 s \\$0-controls;\n#N canvas 0 22 482 332 list-enumerate 0;\n#N canvas 473 338 458 308 count 0;\n#X obj 131 154 f 0;\n#X obj 156 153 + 1;\n#X msg 147 133 0;\n#X obj 131 183 outlet;\n#X obj 131 59 inlet;\n#X obj 131 96 b;\n#X obj 178 61 inlet;\n#X obj 178 98 b;\n#X connect 0 0 1 0;\n#X connect 0 0 3 0;\n#X connect 1 0 0 1;\n#X connect 2 0 0 1;\n#X connect 4 0 5 0;\n#X connect 5 0 0 0;\n#X connect 6 0 7 0;\n#X connect 7 0 2 0;\n#X restore 186 155 pd count;\n#X obj 107 113 t a b;\n#X obj 107 33 inlet;\n#X obj 107 181 list prepend;\n#X obj 112 253 outlet;\n#N canvas 0 22 541 415 drip 0;\n#X obj 64 206 list split 1;\n#X obj 64 123 until;\n#X obj 64 181 list append;\n#X obj 194 206 bang;\n#X text 146 90 First store list \\, then start the loop;\n#X text 163 118 \"until\" bangs its output until told to stop by a \"bang\"\nto its right inlet.;\n#X text 182 160 Store the remaining list.;\n#X text 239 205 third outlet of \"split\" tells us to stop.;\n#X obj 64 243 outlet;\n#X obj 64 57 inlet;\n#X text 237 44 From list-help.pd;\n#X obj 143 243 outlet;\n#X obj 64 86 t b a;\n#X connect 0 0 8 0;\n#X connect 0 1 2 1;\n#X connect 0 2 3 0;\n#X connect 0 2 11 0;\n#X connect 1 0 2 0;\n#X connect 2 0 0 0;\n#X connect 3 0 1 1;\n#X connect 9 0 12 0;\n#X connect 12 0 1 0;\n#X connect 12 1 2 1;\n#X restore 110 88 pd drip;\n#X obj 107 63 t a b;\n#X connect 0 0 3 1;\n#X connect 1 0 3 0;\n#X connect 1 1 0 0;\n#X connect 2 0 6 0;\n#X connect 3 0 4 0;\n#X connect 5 0 1 0;\n#X connect 6 0 5 0;\n#X connect 6 1 0 1;\n#X restore 149 183 pd list-enumerate;\n#X obj 190 231 808_state \\$1/controls;\n#N canvas 0 22 498 348 list-enumerate 0;\n#N canvas 473 338 458 308 count 0;\n#X obj 131 154 f 0;\n#X obj 156 153 + 1;\n#X msg 147 133 0;\n#X obj 131 183 outlet;\n#X obj 131 59 inlet;\n#X obj 131 96 b;\n#X obj 178 61 inlet;\n#X obj 178 98 b;\n#X connect 0 0 1 0;\n#X connect 0 0 3 0;\n#X connect 1 0 0 1;\n#X connect 2 0 0 1;\n#X connect 4 0 5 0;\n#X connect 5 0 0 0;\n#X connect 6 0 7 0;\n#X connect 7 0 2 0;\n#X restore 186 155 pd count;\n#X obj 107 113 t a b;\n#X obj 107 33 inlet;\n#X obj 107 181 list prepend;\n#X obj 112 253 outlet;\n#N canvas 0 22 541 415 drip 0;\n#X obj 64 206 list split 1;\n#X obj 64 123 until;\n#X obj 64 181 list append;\n#X obj 194 206 bang;\n#X text 146 90 First store list \\, then start the loop;\n#X text 163 118 \"until\" bangs its output until told to stop by a \"bang\"\nto its right inlet.;\n#X text 182 160 Store the remaining list.;\n#X text 239 205 third outlet of \"split\" tells us to stop.;\n#X obj 64 243 outlet;\n#X obj 64 57 inlet;\n#X text 237 44 From list-help.pd;\n#X obj 143 243 outlet;\n#X obj 64 86 t b a;\n#X connect 0 0 8 0;\n#X connect 0 1 2 1;\n#X connect 0 2 3 0;\n#X connect 0 2 11 0;\n#X connect 1 0 2 0;\n#X connect 2 0 0 0;\n#X connect 3 0 1 1;\n#X connect 9 0 12 0;\n#X connect 12 0 1 0;\n#X connect 12 1 2 1;\n#X restore 110 88 pd drip;\n#X obj 194 215 t a;\n#X obj 106 209 list prepend;\n#X obj 107 63 t a b b;\n#X connect 0 0 3 1;\n#X connect 1 0 3 0;\n#X connect 1 1 0 0;\n#X connect 2 0 8 0;\n#X connect 3 0 7 0;\n#X connect 5 0 1 0;\n#X connect 6 0 7 1;\n#X connect 7 0 6 0;\n#X connect 7 0 4 0;\n#X connect 8 0 5 0;\n#X connect 8 1 0 1;\n#X connect 8 2 7 1;\n#X restore 411 149 pd list-enumerate;\n#X obj 104 251 r \\$0-controls;\n#X obj 272 98 r \\$0-values;\n#N canvas 283 65 551 703 replacelist 0;\n#X obj 164 224 list;\n#X obj 327 98 inlet;\n#X obj 250 98 inlet;\n#X text 331 72 orig;\n#X text 256 74 pos;\n#X text 77 70 list to insert;\n#X obj 85 94 inlet;\n#X obj 207 281 list split;\n#X obj 85 526 list;\n#X obj 85 598 outlet;\n#X obj 85 317 list prepend;\n#X obj 85 120 t a b a b;\n#X obj 85 430 list prepend 0;\n#X obj 250 125 t f f;\n#X obj 207 524 list prepend;\n#X obj 85 469 route 0 1;\n#X obj 316 347 f;\n#X obj 286 282 t a b;\n#X obj 316 377 > 0;\n#X obj 122 358 r \\$0-init;\n#X obj 122 377 0;\n#X obj 300 524 r \\$0-init;\n#X obj 176 317 r \\$0-init;\n#X obj 118 527 r \\$0-init;\n#X obj 159 131 s \\$0-init;\n#X text 47 25 list-replace: Replace the list starting at position POS\nwith a new list \\, overwriting the old elements.;\n#N canvas 0 22 458 308 length 0;\n#X obj 171 164 + 1;\n#X obj 92 127 b;\n#X obj 126 204 f;\n#X obj 158 138 1;\n#X obj 142 166 f 1;\n#X obj 216 168 0;\n#X obj 136 59 t a b b;\n#N canvas 0 22 537 411 drip 0;\n#X obj 64 206 list split 1;\n#X obj 64 123 until;\n#X obj 64 181 list append;\n#X obj 194 206 bang;\n#X text 146 90 First store list \\, then start the loop;\n#X text 163 118 \"until\" bangs its output until told to stop by a \"bang\"\nto its right inlet.;\n#X text 182 160 Store the remaining list.;\n#X text 239 205 third outlet of \"split\" tells us to stop.;\n#X obj 64 243 outlet;\n#X obj 64 57 inlet;\n#X text 237 44 From list-help.pd;\n#X obj 143 243 outlet;\n#X obj 64 86 t b a;\n#X connect 0 0 8 0;\n#X connect 0 1 2 1;\n#X connect 0 2 3 0;\n#X connect 0 2 11 0;\n#X connect 1 0 2 0;\n#X connect 2 0 0 0;\n#X connect 3 0 1 1;\n#X connect 9 0 12 0;\n#X connect 12 0 1 0;\n#X connect 12 1 2 1;\n#X restore 92 104 pd drip;\n#X obj 137 36 inlet;\n#X obj 125 238 outlet;\n#X connect 0 0 4 1;\n#X connect 1 0 4 0;\n#X connect 2 0 9 0;\n#X connect 3 0 4 1;\n#X connect 4 0 0 0;\n#X connect 4 0 2 1;\n#X connect 5 0 2 1;\n#X connect 6 0 7 0;\n#X connect 6 1 3 0;\n#X connect 6 2 5 0;\n#X connect 7 0 1 0;\n#X connect 7 1 2 0;\n#X connect 8 0 6 0;\n#X restore 268 216 pd length;\n#X obj 162 254 list split;\n#X connect 0 0 27 0;\n#X connect 1 0 0 1;\n#X connect 2 0 13 0;\n#X connect 6 0 11 0;\n#X connect 7 1 8 1;\n#X connect 7 1 14 1;\n#X connect 8 0 9 0;\n#X connect 10 0 12 0;\n#X connect 11 0 10 0;\n#X connect 11 1 0 0;\n#X connect 11 2 26 0;\n#X connect 11 3 24 0;\n#X connect 12 0 15 0;\n#X connect 13 0 27 1;\n#X connect 13 1 16 1;\n#X connect 14 0 9 0;\n#X connect 15 0 8 0;\n#X connect 15 1 14 0;\n#X connect 16 0 18 0;\n#X connect 17 0 14 1;\n#X connect 17 0 8 1;\n#X connect 17 1 16 0;\n#X connect 18 0 12 1;\n#X connect 19 0 20 0;\n#X connect 20 0 12 1;\n#X connect 21 0 14 1;\n#X connect 22 0 10 1;\n#X connect 23 0 8 1;\n#X connect 26 0 7 1;\n#X connect 27 0 10 1;\n#X connect 27 1 7 0;\n#X connect 27 2 17 0;\n#X restore 289 199 pd replacelist;\n#X obj 423 265 t a;\n#X obj 272 130 swap;\n#X obj 50 109 inlet;\n#N canvas 0 22 545 419 drip2 0;\n#X obj 64 123 until;\n#X obj 64 181 list append;\n#X obj 194 206 bang;\n#X text 146 90 First store list \\, then start the loop;\n#X text 163 118 \"until\" bangs its output until told to stop by a \"bang\"\nto its right inlet.;\n#X text 182 160 Store the remaining list.;\n#X text 239 205 third outlet of \"split\" tells us to stop.;\n#X obj 64 243 outlet;\n#X obj 64 57 inlet;\n#X text 237 44 From list-help.pd;\n#X obj 143 243 outlet;\n#X obj 64 86 t b a;\n#X obj 64 206 list split 2;\n#X connect 0 0 1 0;\n#X connect 1 0 12 0;\n#X connect 2 0 0 1;\n#X connect 8 0 11 0;\n#X connect 11 0 0 0;\n#X connect 11 1 1 1;\n#X connect 12 0 7 0;\n#X connect 12 1 1 1;\n#X connect 12 2 2 0;\n#X connect 12 2 10 0;\n#X restore 190 285 pd drip2;\n#X obj 253 24 inlet;\n#X obj 144 355 route 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15;\n#X obj 144 381 s \\$0-ra;\n#X obj 156 401 s \\$0-rb;\n#X obj 167 422 s \\$0-rc;\n#X obj 179 442 s \\$0-rd;\n#X obj 194 381 s \\$0-re;\n#X obj 206 401 s \\$0-rf;\n#X obj 217 422 s \\$0-rg;\n#X obj 229 442 s \\$0-rh;\n#X obj 250 383 s \\$0-ri;\n#X obj 262 403 s \\$0-rj;\n#X obj 273 424 s \\$0-rk;\n#X obj 285 444 s \\$0-rl;\n#X obj 299 383 s \\$0-rm;\n#X obj 312 403 s \\$0-rn;\n#X obj 323 424 s \\$0-ro;\n#X obj 335 444 s \\$0-rp;\n#X obj 35 505 r \\$0-a;\n#X msg 35 530 0 \\$1;\n#X obj 78 505 r \\$0-b;\n#X msg 77 529 1 \\$1;\n#X obj 121 505 r \\$0-c;\n#X obj 164 505 r \\$0-d;\n#X msg 121 530 2 \\$1;\n#X msg 163 529 3 \\$1;\n#X obj 208 503 r \\$0-e;\n#X obj 251 503 r \\$0-f;\n#X obj 294 503 r \\$0-g;\n#X obj 337 503 r \\$0-h;\n#X msg 208 528 4 \\$1;\n#X msg 250 526 5 \\$1;\n#X msg 294 527 6 \\$1;\n#X msg 336 527 7 \\$1;\n#X obj 383 503 r \\$0-i;\n#X obj 426 502 r \\$0-j;\n#X obj 468 503 r \\$0-k;\n#X obj 512 503 r \\$0-l;\n#X obj 556 501 r \\$0-m;\n#X obj 599 501 r \\$0-o;\n#X obj 642 501 r \\$0-p;\n#X obj 685 501 r \\$0-q;\n#X msg 383 528 8 \\$1;\n#X msg 425 527 9 \\$1;\n#X msg 469 528 10 \\$1;\n#X msg 511 527 11 \\$1;\n#X msg 556 526 12 \\$1;\n#X msg 598 524 13 \\$1;\n#X msg 641 525 14 \\$1;\n#X msg 684 525 15 \\$1;\n#X obj 683 559 s \\$0-values;\n#X obj 413 202 t a a;\n#X obj 412 182 list;\n#X obj 257 47 t a b a;\n#X obj 294 150 * 2;\n#X obj 295 170 + 1;\n#X obj 191 253 t a a;\n#X connect 0 0 1 0;\n#X connect 2 0 1 0;\n#X connect 3 0 68 0;\n#X connect 4 0 64 1;\n#X connect 5 0 13 0;\n#X connect 6 0 9 0;\n#X connect 7 0 8 0;\n#X connect 7 0 3 1;\n#X connect 8 0 7 2;\n#X connect 9 0 7 0;\n#X connect 9 1 66 0;\n#X connect 10 0 0 0;\n#X connect 11 0 13 0;\n#X connect 12 0 65 0;\n#X connect 13 0 14 0;\n#X connect 13 1 15 0;\n#X connect 13 2 16 0;\n#X connect 13 3 17 0;\n#X connect 13 4 18 0;\n#X connect 13 5 19 0;\n#X connect 13 6 20 0;\n#X connect 13 7 21 0;\n#X connect 13 8 22 0;\n#X connect 13 9 23 0;\n#X connect 13 10 24 0;\n#X connect 13 11 25 0;\n#X connect 13 12 26 0;\n#X connect 13 13 27 0;\n#X connect 13 14 28 0;\n#X connect 13 15 29 0;\n#X connect 30 0 31 0;\n#X connect 31 0 62 0;\n#X connect 32 0 33 0;\n#X connect 33 0 62 0;\n#X connect 34 0 36 0;\n#X connect 35 0 37 0;\n#X connect 36 0 62 0;\n#X connect 37 0 62 0;\n#X connect 38 0 42 0;\n#X connect 39 0 43 0;\n#X connect 40 0 44 0;\n#X connect 41 0 45 0;\n#X connect 42 0 62 0;\n#X connect 43 0 62 0;\n#X connect 44 0 62 0;\n#X connect 45 0 62 0;\n#X connect 46 0 54 0;\n#X connect 47 0 55 0;\n#X connect 48 0 56 0;\n#X connect 49 0 57 0;\n#X connect 50 0 58 0;\n#X connect 51 0 59 0;\n#X connect 52 0 60 0;\n#X connect 53 0 61 0;\n#X connect 54 0 62 0;\n#X connect 55 0 62 0;\n#X connect 56 0 62 0;\n#X connect 57 0 62 0;\n#X connect 58 0 62 0;\n#X connect 59 0 62 0;\n#X connect 60 0 62 0;\n#X connect 61 0 62 0;\n#X connect 63 0 7 2;\n#X connect 63 1 3 1;\n#X connect 64 0 63 0;\n#X connect 65 0 2 0;\n#X connect 65 1 64 0;\n#X connect 65 2 4 0;\n#X connect 66 0 67 0;\n#X connect 67 0 7 1;\n#X connect 68 0 11 0;\n#X connect 68 1 7 2;\n#X restore 488 309 pd list-functions;\n#X obj 605 230 t b b;\n#X obj 654 240 s \\$0-loadbang;\n#X connect 1 0 40 0;\n#X connect 15 0 21 0;\n#X connect 16 0 22 0;\n#X connect 17 0 26 0;\n#X connect 21 0 26 1;\n#X connect 22 0 26 1;\n#X connect 24 0 25 0;\n#X connect 26 0 30 0;\n#X connect 26 1 31 0;\n#X connect 26 2 32 0;\n#X connect 26 3 33 0;\n#X connect 26 4 34 0;\n#X connect 26 5 35 0;\n#X connect 29 0 28 0;\n#X connect 36 0 39 0;\n#X connect 37 0 39 1;\n#X connect 38 0 0 0;\n#X connect 40 0 37 0;\n#X connect 40 1 41 0;\n#X restore 190 344 pd syn-cz10;\n#X connect 0 0 1 0;\n#X connect 1 0 18 0;\n#X connect 18 0 48 0;\n#X connect 22 0 0 0;\n#X connect 23 0 22 0;\n#X connect 25 0 24 0;\n#X connect 25 0 24 1;\n#X connect 26 0 32 0;\n#X connect 27 0 32 0;\n#X connect 28 0 27 0;\n#X connect 29 0 26 0;\n#X connect 29 1 28 0;\n#X connect 30 0 29 0;\n#X connect 31 0 30 0;\n#X connect 33 0 47 0;\n#X connect 35 0 37 0;\n#X connect 36 0 37 0;\n#X connect 38 0 35 0;\n#X connect 39 0 36 0;\n#X connect 40 0 45 0;\n#X connect 41 0 46 0;\n#X connect 42 0 38 0;\n#X connect 43 0 39 0;\n#X connect 44 0 0 0;\n#X connect 47 0 25 1;\n#X connect 48 0 25 0;\n"
  },
  {
    "path": "PolyPatch/Resources/test.pd",
    "content": "#N canvas 579 276 420 312 10;\n#X obj 87 152 loadbang;\n#X obj 87 202 print \\$0;\n#X obj 87 174 metro 10000;\n#X connect 0 0 2 0;\n#X connect 2 0 1 0;\n"
  },
  {
    "path": "PolyPatch/Resources/test2.pd",
    "content": "#N canvas 1090 250 499 462 10;\n#X obj 145 407 dac~;\n#X obj 279 64 r \\$0-pitch;\n#X obj 49 17 loadbang;\n#X obj 146 293 line~;\n#X obj 146 316 cos~;\n#X msg 147 146 -0.25 \\, 0.25 100;\n#X obj 196 59 loadbang;\n#X msg 196 82 -0.25;\n#X obj 146 362 *~;\n#X floatatom 298 83 0 0 0 0 - - -;\n#X obj 302 189 osc~ 440;\n#X obj 146 339 *~ 0.1;\n#X obj 302 224 *~;\n#X obj 323 255 *~;\n#X obj 286 255 *~;\n#X obj 49 65 metro 2000;\n#X msg 50 43 1;\n#X msg 80 44 0;\n#N canvas 477 131 236 291 hexatonic-scale 0;\n#X obj 27 14 inlet;\n#X obj 25 243 outlet;\n#X obj 26 44 + 40;\n#X obj 25 221 mtof;\n#X obj 27 79 t f f;\n#X obj 25 191 f;\n#X obj 16 121 mod 12;\n#X obj 17 145 select 0 2 4 7 9 11;\n#X connect 0 0 2 0;\n#X connect 2 0 4 0;\n#X connect 3 0 1 0;\n#X connect 4 0 6 0;\n#X connect 4 1 5 1;\n#X connect 5 0 3 0;\n#X connect 6 0 7 0;\n#X connect 7 0 5 0;\n#X connect 7 1 5 0;\n#X connect 7 2 5 0;\n#X connect 7 3 5 0;\n#X connect 7 4 5 0;\n#X connect 7 5 5 0;\n#X restore 284 104 pd hexatonic-scale;\n#N canvas 693 530 450 300 test 0;\n#X obj 143 161 s \\$0-pitch;\n#X obj 146 46 metro 500;\n#X obj 146 21 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1\n1;\n#X obj 145 69 random 30;\n#X connect 1 0 3 0;\n#X connect 2 0 1 0;\n#X connect 3 0 0 0;\n#X restore 272 385 pd test;\n#X floatatom 114 45 5 0 0 0 - - -;\n#X connect 1 0 18 0;\n#X connect 2 0 16 0;\n#X connect 3 0 4 0;\n#X connect 4 0 11 0;\n#X connect 5 0 3 0;\n#X connect 6 0 7 0;\n#X connect 7 0 3 0;\n#X connect 8 0 0 0;\n#X connect 8 0 0 1;\n#X connect 9 0 18 0;\n#X connect 10 0 8 1;\n#X connect 10 0 12 0;\n#X connect 10 0 12 1;\n#X connect 10 0 13 0;\n#X connect 11 0 8 0;\n#X connect 12 0 13 1;\n#X connect 12 0 8 1;\n#X connect 12 0 14 0;\n#X connect 12 0 14 1;\n#X connect 13 0 8 1;\n#X connect 14 0 8 1;\n#X connect 15 0 5 0;\n#X connect 16 0 15 0;\n#X connect 17 0 15 0;\n#X connect 18 0 10 0;\n#X connect 20 0 15 1;\n"
  },
  {
    "path": "PolyPatch/main.m",
    "content": "//\n//  main.m\n//  PolyPatch\n//\n\n#import <UIKit/UIKit.h>\n#import \"PolyPatchAppDelegate.h\"\n\nint main(int argc, char *argv[]) {\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, NSStringFromClass(PolyPatchAppDelegate.class));\n    }\n}\n"
  },
  {
    "path": "README.md",
    "content": "\nAfter cloning the pd-for-ios repository, please make sure to cd into the\npd-for-ios folder and say\n\n    git submodule init\n\tgit submodule update --init --recursive\n\nThese two commands install the dependencies from libpd.  After the initial\nsetup, say\n\n    git pull\n\tgit submodule update --recursive\n\nwhenever you want to sync with the GitHub repositories.\n"
  },
  {
    "path": "SlidePad/Classes/AppDelegate.h",
    "content": "/*\n Copyright (c) 2012, Richard Eakin\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that\n the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and\n the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import <UIKit/UIKit.h>\n#import \"PdBase.h\"\n\n@interface AppDelegate : NSObject <UIApplicationDelegate, PdReceiverDelegate> {\n\tBOOL playing_;\n}\n\n@property (nonatomic, retain) UIWindow *window;\n@property (nonatomic, getter=isPlaying) BOOL playing; // a globally accesible flag to start or stop audio\n\n@end\n\n"
  },
  {
    "path": "SlidePad/Classes/AppDelegate.m",
    "content": "/*\n Copyright (c) 2012, Richard Eakin\n Updated by Dan Wilcox 2018\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that\n the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and\n the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import \"AppDelegate.h\"\n#import \"SlidePadViewController.h\"\n#import \"PdAudioController.h\"\n\n@interface AppDelegate ()\n\n@property (nonatomic, retain) SlidePadViewController *viewController;\n@property (nonatomic, retain) PdAudioController *audioController;\n\n- (void)setupPd;\n\n@end\n\n@implementation AppDelegate\n\n@synthesize window = window_;\n@synthesize viewController = viewController_;\n@synthesize audioController = audioController_;\n\n#pragma mark - Application lifecycle\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    \n    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];\n    self.viewController = [[SlidePadViewController alloc] init];\n\tself.window.rootViewController = self.viewController;\n    \n\t[self setupPd];\n\t\n    [self.window addSubview:self.viewController.view];\n    [self.window makeKeyAndVisible];\n\t\n\treturn YES;\n}\n\n- (void)setupPd {\n\t// Configure a typical audio session with 2 output channels\n\tself.audioController = [[PdAudioController alloc] init];\n\tPdAudioStatus status = [self.audioController configurePlaybackWithSampleRate:44100\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t  numberChannels:2\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinputEnabled:NO\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   mixingEnabled:NO];\n\tif (status == PdAudioError) {\n\t\tRLog(@\"Error! Could not configure PdAudioController\");\n\t} else if (status == PdAudioPropertyChanged) {\n\t\tRLog(@\"Warning: some of the audio parameters were not accceptable.\");\n\t} else {\n\t\tRLog(@\"Audio Configuration successful.\");\n\t}\n\n\t// log actually settings\n\t[self.audioController print];\n\n\t// set AppDelegate as PdRecieverDelegate to recieve messages from pd\n    [PdBase setDelegate:self];\n\n\t// recieve all [send load-meter] messages from pd\n\t[PdBase subscribe:@\"load-meter\"];\n\n\t// open one instance of the load-meter patch and forget about it\n\t[PdBase openFile:@\"load-meter.pd\" path:[[NSBundle mainBundle] bundlePath]];\n}\n\n#pragma mark - PdRecieverDelegate\n\n// uncomment this to get print statements from pd\n- (void)receivePrint:(NSString *)message {\n    NSLog(@\"Pd Console: %@\", message);\n}\n\n// handle subscribed float messages from pd\n- (void)receiveFloat:(float)received fromSource:(NSString *)source {\n\tif ([source isEqualToString:@\"load-meter\"]) {\n\t\tself.viewController.loadPercentage = (int)received;\n\t}\n}\n\n#pragma mark - Accessors\n\n- (BOOL)isPlaying {\n    return playing_;\n}\n\n- (void)setPlaying:(BOOL)newState {\n    if( newState == playing_ )\n\t\treturn;\n\n\tplaying_ = newState;\n\tself.audioController.active = playing_;\n}\n\n#pragma mark - UIApplicationDelegate\n\n- (void)applicationWillResignActive:(UIApplication *)application {\n\tself.playing = NO;\n}\n\n- (void)applicationDidBecomeActive:(UIApplication *)application {\n\tself.playing = YES;\n}\n\n- (void)applicationWillTerminate:(UIApplication *)application {\n\tself.playing = NO;\n}\n\n@end\n"
  },
  {
    "path": "SlidePad/Classes/Controllers/PolyPatchController.h",
    "content": "/*\n Copyright (c) 2012, Richard Eakin\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that\n the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and\n the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import <Foundation/Foundation.h>\n\n//  - controls multiple instances of the same pd patch\n@interface PolyPatchController : NSObject\n\n@property (nonatomic, copy, readonly) NSString *patchName;\n@property (nonatomic, retain, readonly) NSMutableArray *patches;\n\n- (void)closePatches; // close all patches, resets self.patches to an empty array\n- (void)openPatchesNamed:(NSString *)name path:(NSString *)path instances:(int)numInstances; // opens many instances of the same patch and holds them in self.patches\n- (int)dollarZeroForInstance:(int)instance; // returns the unique ID ('$0' in pd) for an instance of the patch\n\n@end\n"
  },
  {
    "path": "SlidePad/Classes/Controllers/PolyPatchController.m",
    "content": "/*\n Copyright (c) 2012, Richard Eakin\n Updated by Dan Wilcox 2018\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that\n the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and\n the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import \"PolyPatchController.h\"\n#import \"PdFile.h\"\n\n@interface PolyPatchController ()\n\n@property (nonatomic, copy) NSString *patchName;\n@property (nonatomic, retain) NSMutableArray *patches;\n\n@end\n\n@implementation PolyPatchController\n\n@synthesize patchName = patchName_;\n@synthesize patches = patches_;\n\n#pragma mark - Init / Dealloc\n\n- (id)init {\n\tself = [super init];\n\tif (self) {\n\t\tself.patches = [NSMutableArray array];\n\t}\n\treturn self;\n}\n\n#pragma mark - Open / Close Patches\n\n- (void)closePatches {\n\tself.patches = [NSMutableArray array]; // they will be closed in PdFile's dealloc\n}\n\n- (void)openPatchesNamed:(NSString *)name path:(NSString *)path instances:(int)numInstances {\n\tself.patchName = name;\n\tfor (int i = 0; i < numInstances; i++) {\n\t\t[self.patches addObject:[PdFile openFileNamed:name path:path]];\n\t}\n}\n\n- (int)dollarZeroForInstance:(int)instance {\n\tif (instance >= [self.patches count]) {\n\t\treturn -1;\n\t} \n\tPdFile *patch = [self.patches objectAtIndex:instance];\n\treturn  [patch dollarZero];\n}\n\n@end\n\n"
  },
  {
    "path": "SlidePad/Classes/Controllers/SlidePadViewController.h",
    "content": "/*\n Copyright (c) 2012, Richard Eakin\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that\n the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and\n the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import <UIKit/UIKit.h>\n\n@interface SlidePadViewController : UIViewController\n\n@property (nonatomic, assign) int loadPercentage;\n\n@end\n\n"
  },
  {
    "path": "SlidePad/Classes/Controllers/SlidePadViewController.m",
    "content": "/*\n Copyright (c) 2012, Richard Eakin\n Updated by Dan Wilcox 2018\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that\n the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and\n the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import \"SlidePadViewController.h\"\n#import \"AppDelegate.h\"\n\n#import \"PolyPatchController.h\"\n#import \"Fingerboard.h\"\n#import \"QSlider.h\"\n#import \"QRadioDial.h\"\n\n#import \"PdBase.h\"\n#import \"PdFile.h\"\n\nstatic const int kSynthNumVoices = 5;\nstatic const float kSynthFreqRamptime = 50.0;\nstatic NSString *const kSynthFreqRamptimeReceiver = @\"synth-freq-ramptime\";\n\n#define TOGGLE_OFF_COLOR [UIColor darkGrayColor]\n#define TOGGLE_ON_COLOR [UIColor colorWithRed:0.0 green:0.5 blue:0.5 alpha:1.0]\n\n@interface SlidePadViewController ()\n\n@property (nonatomic, retain) PolyPatchController *polyPatchController;\n@property (nonatomic, retain) UIButton *playToggle;\n@property (nonatomic, retain) UIButton *quantizeToggle;\n@property (nonatomic, retain) UISegmentedControl *patchSelector;\n@property (nonatomic, retain) QSlider *freqSlider;\n@property (nonatomic, retain) UILabel *loadLabel;\n@property (nonatomic, retain) QRadioDial *transposeDial;\n@property (nonatomic, retain) Fingerboard *fingerboard;\n@property (nonatomic, retain) NSArray *patches; // all the base names of synth patches (all contain [throw~])\n@property (nonatomic, retain) PdFile *mainPatch; // contains the [catch~] and post effects, global tables\n\n- (void)playTogglePressed:(UIButton *)sender;\n- (void)quantizeTogglePressed:(UIButton *)sender;\n- (void)sliderChanged:(QSlider *)sender;\n- (void)patchSelectorChanged:(UISegmentedControl *)sender;\n\n- (void)openPatchVoicesWithPatchNamed:(NSString *)patchName;\n- (UIButton *)newButton;\n- (UILabel *)newLabel;\n- (void)formatLoadLabel;\n\n@end\n\n@implementation SlidePadViewController\n\n@synthesize polyPatchController = polyPatchController_;\n@synthesize playToggle = playToggle_;\n@synthesize quantizeToggle = quantizeToggle_;\n@synthesize patchSelector = patchSelector_;\n@synthesize freqSlider = freqSlider_;\n@synthesize loadLabel = loadLabel_;\n@synthesize loadPercentage = loadPercentage_;\n@synthesize transposeDial = transposeDial_;\n@synthesize fingerboard = fingerboard_;\n@synthesize patches = patches_;\n\n#pragma mark - View management\n\n- (void) loadView {\n    [super loadView];\n\n\t// open the main patch, which contains a [catch~] and other post-effects\n\tself.mainPatch = [PdFile openFileNamed:@\"main.pd\" path:[[NSBundle mainBundle] bundlePath]];\n\n\t// this guy will hold the voice patches\n\tself.polyPatchController = [[PolyPatchController alloc] init];\n\n    // UI Setup:\n    self.view.backgroundColor = [UIColor blackColor];\n    \n    self.playToggle = [self newButton];\n    [self.playToggle addTarget:self action:@selector(playTogglePressed:) forControlEvents:UIControlEventTouchUpInside];\n    [self.playToggle setTitle:@\"DSP Off\" forState:UIControlStateNormal];\n    [self.playToggle setTitle:@\"DSP On\" forState:UIControlStateSelected];\n\n\tself.quantizeToggle = [self newButton];\n    [self.quantizeToggle addTarget:self action:@selector(quantizeTogglePressed:) forControlEvents:UIControlEventTouchUpInside];\n    [self.quantizeToggle setTitle:@\"Quantize Off\" forState:UIControlStateNormal];\n    [self.quantizeToggle setTitle:@\"Quantize On\" forState:UIControlStateSelected];\n\n    self.patches = [NSArray arrayWithObjects:@\"classicsub-voice.pd\", @\"wavetabler-voice.pd\", nil];\n\n    self.patchSelector = [[UISegmentedControl alloc] initWithItems:\n                                          [NSArray arrayWithObjects:@\"Classic Sub\", @\"Wavetabler\", nil]];\n\n    self.patchSelector.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin;\n    self.patchSelector.tintColor = [UIColor darkGrayColor];\n    self.patchSelector.selectedSegmentIndex = 0;\n    [self.patchSelector addTarget:self action:@selector(patchSelectorChanged:) forControlEvents:UIControlEventValueChanged];\n    \n    self.freqSlider = [[QSlider alloc] init];\n    self.freqSlider.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin;\n\n    self.freqSlider.minimumValue = 0.0;\n    self.freqSlider.maximumValue = 100.0;\n    [self.freqSlider setValue:50.0];\n    [self.freqSlider addValueTarget:self action:@selector(sliderChanged:)];\n\n\tself.loadLabel = [self newLabel];\n\tself.loadLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;\n\t[self formatLoadLabel];\n    \n\tself.transposeDial = [[QRadioDial alloc] init];\n\tself.transposeDial.minimumValue = -3.0;\n\tself.transposeDial.maximumValue = 3.0;\n    self.transposeDial.numSections = 7;\n    self.transposeDial.value = 0;\n\t[self.transposeDial addValueTarget:self action:@selector(transposeChanged:)];\n\n    self.fingerboard = [[Fingerboard alloc] init];\n    self.fingerboard.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin;\n\tself.fingerboard.numVoices = kSynthNumVoices;\n\tself.fingerboard.polyPatchController = self.polyPatchController; // currently need a reference to this to send messages\n\n    [self.view addSubview:self.patchSelector];\n    [self.view addSubview:self.freqSlider];\n\t[self.view addSubview:self.loadLabel];\n    [self.view addSubview:self.playToggle];\n    [self.view addSubview:self.quantizeToggle];\n\t[self.view addSubview:self.transposeDial];\n    [self.view addSubview:self.fingerboard];\n}\n\n- (void)viewWillAppear:(BOOL)animated {\n    [super viewDidAppear:animated];\n\n\t[self.playToggle sizeToFit];\n\t[self.quantizeToggle sizeToFit];\n\n    \n    float vh = CGRectGetHeight(self.view.bounds);\n    float vw = CGRectGetWidth(self.view.bounds);\n    \n    float kSpacer = 10.0;\n    float kWidgetHeight = vh * 0.05;\n\n    // top 5% of the view, to the left\n    self.playToggle.frame = CGRectMake(kSpacer,\n                                       kSpacer, \n                                       self.playToggle.frame.size.width,\n                                       kWidgetHeight);\n\n\tfloat quantizeToggleOffset = self.playToggle.frame.origin.x + self.playToggle.frame.size.width + kSpacer;\n\tself.quantizeToggle.frame = CGRectMake(quantizeToggleOffset,\n\t\t\t\t\t\t\t\t\t\t   kSpacer,\n\t\t\t\t\t\t\t\t\t\t   self.quantizeToggle.frame.size.width,\n\t\t\t\t\t\t\t\t\t\t   kWidgetHeight);\n\n    // Patch Selector: top 5% of view, right 1/3\n    self.patchSelector.frame = CGRectMake(vw * 0.666,\n                                          kSpacer,\n                                          vw * 0.333 - kSpacer,\n                                          kWidgetHeight);\n    \n    // Frequency Slider: next 5%, left half of screen\n    self.freqSlider.frame = CGRectMake(kSpacer, \n                                       kWidgetHeight + kSpacer * 2.0,\n                                       vw * 0.5 - kSpacer,\n                                       kWidgetHeight);\n\n\t// Load Label: below Patch Selector (right side)\n    self.loadLabel.frame = CGRectMake(self.patchSelector.frame.origin.x,\n\t\t\t\t\t\t\t\t\t  self.freqSlider.frame.origin.y,\n\t\t\t\t\t\t\t\t\t  self.patchSelector.frame.size.width,\n\t\t\t\t\t\t\t\t\t  kWidgetHeight);\n\n\n\t// Transpose Dial: next 5% - the edge of the the top half, perfect circle\n\tCGFloat transposeDialHeight = vw * 0.5 - kSpacer * 5 - kWidgetHeight * 2;\n\tself.transposeDial.frame = CGRectMake(kSpacer,\n\t\t\t\t\t\t\t\t\t\t  (kWidgetHeight + kSpacer) * 2 + kSpacer,\n\t\t\t\t\t\t\t\t\t\t  transposeDialHeight,\n\t\t\t\t\t\t\t\t\t\t  transposeDialHeight);\n\n    // bottom half of screen\n    self.fingerboard.frame =  CGRectMake(kSpacer,\n                                         vh * 0.5,\n                                         vw - kSpacer * 2, \n                                         vh * 0.5 - kSpacer);\n\n\t// fire initial state after views are loaded and laid out\n\t[self patchSelectorChanged:self.patchSelector];\n\t[self playTogglePressed:self.playToggle];\n\t[self sliderChanged:self.freqSlider];\n\t[self transposeChanged:self.transposeDial];\n}\n#pragma mark - Control Events\n\n- (void)sliderChanged:(QSlider *)sender {\n    [PdBase sendFloat:sender.value toReceiver:@\"vcf-cutoff\"];\n}\n\n- (void)transposeChanged:(QRadioDial *)sender {\n\tFingerboard *fingerboard = self.fingerboard;\n    fingerboard.minPitch = 48 + round(sender.value) * 12;\n    fingerboard.maxPitch = fingerboard.minPitch + fingerboard.numNotes;\n    [fingerboard setNeedsDisplay];\n\t[fingerboard updateAllVoices];\n}\n\n-(void)playTogglePressed:(UIButton *)sender {\n\tAppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];\n\n    if([sender isSelected]){\n\t\tsender.backgroundColor = TOGGLE_OFF_COLOR;\n\t\tsender.selected = NO;\n        [self.fingerboard reset]; // kill all voices\n    } else {\n\t\tsender.backgroundColor = TOGGLE_ON_COLOR;\n\t\tsender.selected = YES;\n    }\n\t[appDelegate setPlaying:sender.selected];\n}\n\n- (void)quantizeTogglePressed:(UIButton *)sender {\n    if([sender isSelected]){\n\t\tsender.backgroundColor = TOGGLE_OFF_COLOR;\n\t\tsender.selected = NO;\n    } else {\n\t\tsender.backgroundColor = TOGGLE_ON_COLOR;\n\t\tsender.selected = YES;\n    }\n\tself.fingerboard.quantizePitch = sender.selected;\n}\n\n- (void)patchSelectorChanged:(UISegmentedControl *)sender {\n    if (sender.selectedSegmentIndex > [self.patches count]) {\n        RLog(@\"Error: patch selector is too large\");\n        return;\n    }\n    NSString *patchName = [self.patches objectAtIndex:sender.selectedSegmentIndex];\n    RLog(@\"patch selected: %@\", patchName); \n\n    if ([patchName isEqualToString:self.polyPatchController.patchName]) {\n        return;\n    }\n\n\t// make sure all voices are silent before switching\n\t[self.fingerboard mute];\n\n\t// begin opening patches only after the current patches have finished being muted\n\t[self performSelector:@selector(openPatchVoicesWithPatchNamed:) withObject:patchName afterDelay:kSynthFreqRamptime / 1000.0];\n}\n\n#pragma mark - Custom Accessors\n\n// whenever loadPercentage is set, update the label\n- (void)setLoadPercentage:(int)loadPercentage {\n\tif (loadPercentage_ != loadPercentage) {\n\t\tloadPercentage_ = loadPercentage;\n\t\t[self formatLoadLabel];\n\t}\n}\n#pragma mark - Private Helpers\n\n- (void)openPatchVoicesWithPatchNamed:(NSString *)patchName {\n    if (self.polyPatchController.patchName) {\n\t\t[self.polyPatchController closePatches];\n    }\n\n\t[self.polyPatchController openPatchesNamed:patchName path:[[NSBundle mainBundle] bundlePath] instances:kSynthNumVoices];\n    [PdBase sendFloat:kSynthFreqRamptime toReceiver:kSynthFreqRamptimeReceiver];\n}\n\n- (UIButton *)newButton {\n\tUIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];\n    button.layer.cornerRadius = 8.0;\n    button.layer.masksToBounds = YES;\n    button.layer.borderWidth = 1.0;\n    button.backgroundColor = TOGGLE_OFF_COLOR;\n    button.showsTouchWhenHighlighted = YES;\n\tbutton.contentEdgeInsets = UIEdgeInsetsMake(0.0, 6.0, 0.0, 6.0);\n\treturn button;\n}\n\n- (UILabel *)newLabel {\n\tUILabel *label = [[UILabel alloc] initWithFrame:CGRectZero];\n\tlabel.backgroundColor = [UIColor clearColor];\n\tlabel.textColor = QCONTROL_DEFAULT_FRAME_COLOR;\n\tlabel.textAlignment = NSTextAlignmentRight;\n\treturn label;\n}\n\n- (void)formatLoadLabel {\n\tself.loadLabel.text = [NSString stringWithFormat:@\"cpu load: %d%%\", self.loadPercentage];\n}\n\n@end\n"
  },
  {
    "path": "SlidePad/Classes/Views/Fingerboard.h",
    "content": "/*\n Copyright (c) 2012, Richard Eakin\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that\n the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and\n the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import <UIKit/UIKit.h>\n\n@class PolyPatchController;\n\n@interface Fingerboard : UIView\n\n@property (nonatomic, assign) float minPitch;\n@property (nonatomic, assign) float maxPitch;\n@property (nonatomic, assign) float numNotes;\n@property (nonatomic, assign) NSInteger numVoices;\n@property (nonatomic, assign) BOOL drawNoteLabels;\n@property (nonatomic, assign) BOOL quantizePitch;\n\n@property (nonatomic, retain) UIColor *sharpNoteColor;\n@property (nonatomic, retain) UIColor *touchColor;\n\n@property (nonatomic, assign) PolyPatchController *polyPatchController; // weak reference to the pd patch controller\n\n- (void)updateAllVoices; // resends audio params to Pd\n- (void)mute; // turn off all voices\n- (void)reset; // last resort reset method\n\n@end\n"
  },
  {
    "path": "SlidePad/Classes/Views/Fingerboard.m",
    "content": "/*\n Copyright (c) 2012, Richard Eakin\n Updated by Dan Wilcox 2018\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that\n the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and\n the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import \"PolyPatchController.h\"\n#import \"PdBase.h\"\n#import \"Fingerboard.h\"\n#import \"TouchDiamond.h\"\n#import \"PdFile.h\"\n\n#define RECEIVER_FREQ @\"synth-freq\"\n#define RECEIVER_MAG @\"synth-mag\"\n\n#define DEFAULT_SHARP_NOTES_COLOR [UIColor colorWithRed:0.0 green:0.5 blue:0.5 alpha:1.0]\n#define DEFAULT_OTHER_NOTES_COLOR [UIColor colorWithRed:0.2 green:0.2 blue:0.2 alpha:1.0]\n\nstatic const CGFloat kThresholdForTouchRelease = 0.0;\n\n@interface Fingerboard ()\n\n@property (nonatomic, retain) NSMutableDictionary *touches;\n@property (nonatomic, retain) NSArray *voiceHighlights; // when quantizePitch == YES, this contains UIView's for highlighting the current touches\n\n- (CGFloat)mapXToPitch:(CGFloat)x; // minPitch mapped to x = 0, maxPitch to x = self.frame.size.width\n- (CGFloat)mapYToMag:(CGFloat)y; // y is flipped so the top of the view (origin) = full magnitude, while bottom = 0\n\n- (void)sendParamsOff;\n- (void)sendParamsOffForVoice:(int)voice;\n- (void)sendParamsWithPoint: (CGPoint)point voice:(int)voice;\n- (BOOL)pointIsWithinBounds:(CGPoint)point;\n- (void)highlightVoices;\n- (float)noteWidth;\n- (NSArray *)highlightsArray;\n\n@end\n\n\n@implementation Fingerboard\n\n@synthesize touches = touches_;\n\n@synthesize minPitch = minPitch_;\n@synthesize maxPitch = maxPitch_;\n@synthesize numNotes = numNotes_;\n@synthesize numVoices = numVoices_;\n@synthesize drawNoteLabels = drawNoteLabels_;\n@synthesize quantizePitch = quantizePitch_;\n\n@synthesize sharpNoteColor = sharpNoteColor_;\n\n@synthesize polyPatchController = polyPatchController_;\n\n#pragma mark - Setup\n\n- (id)initWithFrame:(CGRect)frame {\n    self = [super initWithFrame:frame];\n    if (self) {\n        self.multipleTouchEnabled = YES;\n        \n        self.minPitch = 36.0;\n        self.maxPitch = 60.0;\n        self.numVoices = 2;\n        self.numNotes = self.maxPitch - self.minPitch;\n        \n        self.drawNoteLabels = YES;\n\t\tself.clipsToBounds = YES;\n        self.backgroundColor = DEFAULT_OTHER_NOTES_COLOR;\n        self.sharpNoteColor = DEFAULT_SHARP_NOTES_COLOR;\n\n        self.layer.borderColor = self.sharpNoteColor.CGColor;\n        self.layer.borderWidth = 2.0;\n\n        self.touches = [NSMutableDictionary dictionary];\n    }\n    return self;\n}\n\n#pragma mark - Public\n\n- (void)updateAllVoices {\n    for (TouchDiamond *diamond in [self.touches allValues]) {\n        [self sendParamsWithPoint:diamond.center voice:(int)diamond.touchIndex];\n    }\n}\n\n- (void)mute {\n\t[self sendParamsOff];\n}\n\n- (void)reset {\n\tfor (TouchDiamond *diamond in [self.touches allValues]) {\n\t\t[diamond removeFromSuperview];\n\t}\n\n    [self.touches removeAllObjects];\n    [self sendParamsOff];\n}\n\n#pragma mark - Drawing\n\n- (void)drawRect:(CGRect)rect {\n    \n    CGContextRef context = UIGraphicsGetCurrentContext();\n\n    float nNotes = [self numNotes];\n    float noteWidth = [self noteWidth];\n    \n    // ***** create a layer for sharp notes *****\n    CGRect noteRect = CGRectMake(0.0, 0.0, noteWidth, CGRectGetHeight(self.bounds));\n    CGLayerRef noteLayer = CGLayerCreateWithContext(context, noteRect.size, NULL);\n    CGContextRef noteContext = CGLayerGetContext(noteLayer);\n    CGContextSetFillColorWithColor(noteContext, self.sharpNoteColor.CGColor);\n    CGContextFillRect(noteContext, noteRect);\n    \n    // ***** create a layer for line notes (C's and F's).  *****\n    CGLayerRef lineLayer = CGLayerCreateWithContext(context, noteRect.size, NULL);\n    CGContextRef lineContext = CGLayerGetContext(lineLayer);\n    CGContextSetStrokeColorWithColor(lineContext, self.sharpNoteColor.CGColor);\n    CGContextBeginPath(lineContext);\n    CGContextMoveToPoint(lineContext, 0.0, 0.0);\n    CGContextAddLineToPoint(lineContext, 0.0, noteRect.size.height);\n    CGContextClosePath(lineContext);\n    CGContextStrokePath(lineContext);\n    \n    \n    // ***** set up text for midi number *****\n\n\tconst float kTextColorGrayLevel = 0.75;\n\tUIColor *gray = [UIColor colorWithWhite:kTextColorGrayLevel alpha:1.0];\n\tUIFont *font;\n\tif (self.drawNoteLabels) {\n\t\tfont = [UIFont fontWithName:@\"Helvetica\" size:12];\n\t}\n    CGContextSetStrokeColorWithColor(context, gray.CGColor);\n\n    int nm, ns;\n    CGPoint notePoint = CGPointZero;\n     \n    for (int n = 0; n < nNotes; n++) {\n        ns = n + self.minPitch;\n        nm = ns % 12;\n        if (nm == 1 || nm == 3 || nm == 6 || nm == 8 || nm == 10) {\n            notePoint.x = n * noteWidth;\n            CGContextDrawLayerAtPoint(context, notePoint, noteLayer);\n        }            \n        else if (nm == 0 || nm == 5) {\n            notePoint.x = n * noteWidth;\n            CGContextDrawLayerAtPoint(context, notePoint, lineLayer);\n        }\n        if (self.drawNoteLabels) {\n            NSString *noteLabel = [NSString stringWithFormat:@\"%d\", ns];\n            [noteLabel drawAtPoint:CGPointMake(n * noteWidth + 3.0, self.bounds.size.height - 16.0)\n                    withAttributes:@{NSFontAttributeName:font, NSForegroundColorAttributeName:gray}];\n        }\n    }\n}\n\n#pragma mark - Touches\n\n// create a diamond for every touch down, fire off params for that voice\n// - store the touch ptr / TouchDiamond pair in an our dictionary so we can update it's position and parameters later on\n- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {\n    for (UITouch* touch in touches) {\n        CGPoint point = [touch locationInView:self];\n        TouchDiamond *diamond = [[TouchDiamond alloc] initWithIndex:[self.touches count]];\n        diamond.center = point;\n        \n        // only add touches up to numVoices amount\n\t\tif ([self.touches count] < self.numVoices) {\n\t\t\t[self.touches setObject:diamond forKey:[NSValue valueWithPointer:(__bridge const void * _Nullable)(touch)]];\n            [self addSubview:diamond];\n            [diamond displayAnimated];\n        }\n\t\t[self sendParamsWithPoint:point voice:(int)diamond.touchIndex];\n    }\n\n\tif (self.quantizePitch) {\n\t\t[self highlightVoices];\n\t}\n}\n\n// locate which TouchDiamond needs updating with the touch's memory address as key\n// - send params based on new position\n- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {\n    for (UITouch* touch in touches) {\n        CGPoint point = [touch locationInView:self];\n\t\tif (![self pointIsWithinBounds:point]) {\n\t\t\t// do nothing, will be turned off in touchesCancelled\n\t\t\treturn;\n\t\t}\n\t\tTouchDiamond *diamond = [self.touches objectForKey:[NSValue valueWithPointer:(__bridge const void * _Nullable)(touch)]];\n        if (diamond) {\n            diamond.center = point; // it won't always exist if we are in poly and the touch is being ignored\n        }\n        if ([self.touches count] <= self.numVoices) {\n\t\t\tint dzero = [self.polyPatchController dollarZeroForInstance:(int)diamond.touchIndex];\n\t\t\t[self sendParamsWithPoint:point voice:(int)diamond.touchIndex];\n\t\t}\n    }\n\tif (self.quantizePitch) {\n\t\t[self highlightVoices];\n\t}\n}\n\n// locate the TouchDiamond as above, but this time, ramp it off and remove it from our dictionary\n- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {\n\tfor (UITouch* touch in touches) {\n\t\tTouchDiamond *diamond = [self.touches objectForKey:[NSValue valueWithPointer:(__bridge const void * _Nullable)(touch)]];\n\n\t\t[self sendParamsOffForVoice:(int)diamond.touchIndex];\n\n\t\t[diamond removeFromSuperview];\n\t\t[self.touches removeObjectForKey:[NSValue valueWithPointer:(__bridge const void * _Nullable)(touch)]];\n\t}\n\n\tif (self.quantizePitch) {\n\t\t[self highlightVoices];\n\t}\n}\n\n// forward to touchesEnded\n- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {\n\t[self touchesEnded:touches withEvent:event];\n}\n\n#pragma mark - Mapping functions\n\n\n- (void)sendParamsWithPoint:(CGPoint)point voice:(int)voice {\n\n\t// pitch is related to the x location in view, scaled within min and max Pitch\n    float pitch = self.minPitch + (self.maxPitch - self.minPitch) * point.x / CGRectGetWidth(self.frame);\n\n\tif (self.quantizePitch) {\n\t\t// round pitch down to the nears integral number, which corresponds to a note in the well-tempered tuning system\n\t\tpitch = floorf(pitch);\n\t}\n\n\t// mag is related to the inverted y location in view, so loudest (1.0) is on top\n    float mag = (CGRectGetHeight(self.frame) - point.y) / CGRectGetHeight(self.frame);\n\n\t// create the unique receiver name by prepending the patch's unique ID ('$0' in pd)\n\t// for each voice.\n\tint dzero = [self.polyPatchController dollarZeroForInstance:voice];\n\tNSString *magReceiver = [NSString stringWithFormat:@\"%d-%@\", dzero, RECEIVER_MAG];\n\tNSString *pitchReceiver = [NSString stringWithFormat:@\"%d-%@\", dzero, RECEIVER_FREQ];\n\n    [PdBase sendFloat:mag toReceiver:magReceiver];\n    [PdBase sendFloat:pitch toReceiver:pitchReceiver];\n}\n\n- (void)sendParamsOffForVoice:(int)voice {\n\tint dzero = [self.polyPatchController dollarZeroForInstance:voice];\n\tNSString *magReceiver = [NSString stringWithFormat:@\"%d-%@\", dzero, RECEIVER_MAG];\n\t[PdBase sendFloat:0 toReceiver:magReceiver];\t\n}\n\n- (void)sendParamsOff{\n\tfor (PdFile *pd in [self.polyPatchController patches]) {\n\t\tNSString *magReceiver = [NSString stringWithFormat:@\"%d-%@\", [pd dollarZero], RECEIVER_MAG];\n\t\t[PdBase sendFloat:0 toReceiver:magReceiver];\n\t}\n}\n\n- (CGFloat)mapXToPitch:(CGFloat)x {\n    float w = CGRectGetWidth(self.frame);\n\n    float sx = self.minPitch + (self.maxPitch - self.minPitch) * x / w;\n    return sx;\n}\n\n- (CGFloat)mapYToMag:(CGFloat)y {\n    float h = CGRectGetHeight(self.frame);\n    return (h - y) / h; \n}\n\n#pragma mark - Overridden Accessors\n\n// only create voiceHighlights if quantizePitch is set to YES\n- (void)setQuantizePitch:(BOOL)quantizePitch {\n\tif (quantizePitch_ != quantizePitch) {\n\t\tquantizePitch_  = quantizePitch;\n\t\tif (quantizePitch) {\n\t\t\tself.voiceHighlights = [self highlightsArray];\n\t\t} else {\n\t\t\tfor (UIView *highlight in self.voiceHighlights) {\n\t\t\t\t[highlight removeFromSuperview];\n\t\t\t}\n\t\t\tself.voiceHighlights = nil;\n\t\t}\n\t}\n}\n\n#pragma mark - Private\n\n// for every currently active voice, use one of our views in highlightsArray to display it's current pitch and magnitude\n// - size remains constaint, but origin and alpah change according to voice.center\n- (void)highlightVoices {\n\tint i = 0;\n\tfloat noteWidth = [self noteWidth];\n\tfor (TouchDiamond *voice in [self.touches allValues]) {\n\t\tUIView *highlight = [self.voiceHighlights objectAtIndex:i++];\n\t\tCGRect highlightFrame = highlight.frame;\n\t\tfloat touchX = voice.center.x;\n\t\ttouchX -= fmod(touchX,noteWidth);\n\t\thighlightFrame.origin.x = touchX;\n\t\thighlightFrame.size.width = noteWidth;\n\t\thighlight.frame = highlightFrame;\n\n\t\thighlight.alpha = MAX(0.2, 0.67 - voice.center.y / self.frame.size.height); // alpha range: [0.2:0.67]\n\t\thighlight.hidden = NO;\n\t}\n\twhile (i < self.numVoices) {\n\t\tUIView *highlight = [self.voiceHighlights objectAtIndex:i++];\n\t\thighlight.hidden = YES;\n\t}\n}\n\n- (BOOL)pointIsWithinBounds:(CGPoint)point {\n\tif (point.x < -kThresholdForTouchRelease || point.x > self.bounds.size.width + kThresholdForTouchRelease || \n\t\tpoint.y < -kThresholdForTouchRelease || point.y > self.bounds.size.height + kThresholdForTouchRelease) {\n\t\treturn NO;\n\t} else {\n\t\treturn YES;\n\t}\n}\n\n- (float)noteWidth {\n\treturn self.frame.size.width / [self numNotes];\n}\n\n- (NSArray *)highlightsArray {\n\tNSMutableArray *highlights = [NSMutableArray array];\n\tfloat noteWidth = [self noteWidth];\n\tfloat noteHeight = self.frame.size.height;\n\tfor (int i = 0; i < self.numVoices; i++) {\n\t\tUIView *highlight = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, noteWidth, noteHeight)];\n\t\thighlight.backgroundColor = [UIColor whiteColor];\n\t\thighlight.hidden = YES;\n\t\t[self insertSubview:highlight atIndex:0]; // note: this is not efficient, since it shuffles the subviews many times - would be better to create a container for these highlights that resides below TouchDiamonds\n\t\t[highlights addObject:highlight];\n\t}\n\treturn highlights;\n}\n\n@end\n"
  },
  {
    "path": "SlidePad/Classes/Views/QControl.h",
    "content": "/*\n Copyright (c) 2012, Richard Eakin\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that\n the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and\n the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import <UIKit/UIKit.h>\n\n#define QCONTROL_DEFAULT_FILL_COLOR [UIColor colorWithRed:0.0 green:0.3 blue:0.0 alpha:1.0]\n#define QCONTROL_DEFAULT_FRAME_COLOR [UIColor colorWithRed:0.0 green:0.7 blue:0.3 alpha:1.0]\n\n@interface QControl : UIView\n\n@property (nonatomic, retain) UIColor *fillColor;\n@property (nonatomic, retain) UIColor *frameColor;\n\n@property (nonatomic, assign) float minimumValue;\n@property (nonatomic, assign) float maximumValue;\n@property (nonatomic, assign) float value;\n\n@property (nonatomic, assign) SEL valueAction;\n@property (nonatomic, assign) id valueTarget;\n\n- (void) addValueTarget:(id)target action:(SEL)action;\n\n@end\n"
  },
  {
    "path": "SlidePad/Classes/Views/QControl.m",
    "content": "/*\n Copyright (c) 2012, Richard Eakin\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that\n the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and\n the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import \"QControl.h\"\n\n@interface QControl ()\n\n@end\n\n@implementation QControl\n\n@synthesize valueAction = valueAction_;\n@synthesize valueTarget = valueTarget_;\n@synthesize fillColor = fillColor_;\n@synthesize frameColor = frameColor_;\n@synthesize minimumValue = minimumValue_;\n@synthesize maximumValue = maximumValue_;\n@synthesize value = value_;\n\n- (id)initWithFrame:(CGRect)frame {\n    self = [super initWithFrame:frame];\n    if (self) {\n\t\tself.fillColor = QCONTROL_DEFAULT_FILL_COLOR;\n        self.frameColor = QCONTROL_DEFAULT_FRAME_COLOR;\n\t\tself.backgroundColor = [UIColor clearColor];\n\t\t\n\t\tself.minimumValue = 0.0;\n        self.maximumValue = 1.0;\n\t\t\n    }\n    return self;\n}\n\n#pragma mark - Public \n\n- (void) addValueTarget:(id)target action:(SEL)action {\n\tself.valueTarget = target;\n\tself.valueAction = action;\n}\n\n#pragma mark -\n#pragma mark Overridden getters / setters\n\n- (void)setValue:(float)f {\n    value_ = f;\n    if (self.valueTarget && [self.valueTarget respondsToSelector:self.valueAction]) {\n    \t[self.valueTarget performSelectorOnMainThread:self.valueAction withObject:self waitUntilDone:YES];\n    }\n    [self setNeedsDisplay];\n}\n\n@end\n"
  },
  {
    "path": "SlidePad/Classes/Views/QRadioDial.h",
    "content": "/*\n Copyright (c) 2012, Richard Eakin\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that\n the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and\n the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import \"QControl.h\"\n\n@interface QRadioDial : QControl\n\n@property (nonatomic, assign) int numSections;\n\n@end\n"
  },
  {
    "path": "SlidePad/Classes/Views/QRadioDial.m",
    "content": "/*\n Copyright (c) 2012, Richard Eakin\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that\n the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and\n the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import \"QRadioDial.h\"\n\nstatic const CGFloat kEdgeSpacer = 6.0;\n\nstatic const CGFloat kPiOverTwo = 1.5707963267948966;\nstatic const CGFloat kTwoPi = 6.283185307179586;\n\n@interface QRadioDial ()\n\n@property (nonatomic, retain) UILabel *valueLabel;\n@property (nonatomic, assign) NSInteger section;\n@property (nonatomic, assign) CGFloat outerRadius;\n@property (nonatomic, assign) CGFloat innerRadius;\n\n- (void)mapPointToValue:(CGPoint)point;\n\n@end\n\n@implementation QRadioDial\n\n@synthesize valueLabel = valueLabel_;\n@synthesize numSections = numSections_;\n@synthesize section = section_;\n@synthesize outerRadius = outerRadius_;\n@synthesize innerRadius = innerRadius_;\n\n#pragma mark - Init / Dealloc\n\n- (id)initWithFrame:(CGRect)frame {\n    self = [super initWithFrame:frame];\n    if (self) {\n\t\tself.valueLabel = [[UILabel alloc] init];\n\t\tself.valueLabel.backgroundColor = [UIColor clearColor];\n\t\tself.valueLabel.textColor = self.frameColor;\n        self.valueLabel.textAlignment = NSTextAlignmentCenter;\n        self.valueLabel.text = [NSString stringWithFormat:@\"0\"]; // this is what self.value starts at\n\t\t[self addSubview:self.valueLabel];\n        \n        self.numSections = 4;\n        self.value = NSIntegerMin; // if value == 0 is initially passed in, we still want it to be considered, so set value_ to something else\n\t}\n    return self;\n}\n\n#pragma mark - View Methods\n\n- (void)layoutSubviews {\n\t[super layoutSubviews];\n    CGSize viewSize = self.frame.size;\n    \n    self.outerRadius = (viewSize.width < viewSize.height ? viewSize.width / 2.0 : viewSize.height / 2.0);\n\tself.innerRadius = self.outerRadius / 3.0;\n\n    self.valueLabel.frame = CGRectIntegral(CGRectMake((viewSize.width - self.innerRadius) / 2.0,\n                                                      (viewSize.height - self.innerRadius) / 2.0,\n                                                      self.innerRadius,\n                                                        self.innerRadius));\n    self.valueLabel.font = [UIFont boldSystemFontOfSize:30]; // TODO: size this according to innerRadious size\n}\n\n#pragma mark - Drawing\n\n- (void)drawRect:(CGRect)rect {\n    CGRect frame = self.bounds;\n    CGFloat radius = self.outerRadius;\n    CGFloat innerRadius = self.innerRadius;\n    float pos = ((self.value - self.minimumValue) * frame.size.width) / (self.maximumValue - self.minimumValue);\n\t\n    CGContextRef context = UIGraphicsGetCurrentContext();\n    CGContextSetFillColorWithColor(context, self.fillColor.CGColor);\n    CGContextSetStrokeColorWithColor(context, self.frameColor.CGColor);\n    CGContextSetLineWidth(context, 2.0);\n    \n    // Draw Inner and Outer circle frames\n\tCGContextAddArc(context, radius, radius, innerRadius, 0, kTwoPi, 1);\n    CGContextStrokePath(context);\n\n\tCGContextAddArc(context, radius, radius, radius - 1.0, 0, kTwoPi, 1);\n    CGContextStrokePath(context);\n\t\n\t// Draw the selected section\n    CGFloat sectionRadians = kTwoPi / self.numSections;\n\tCGFloat angleA = self.section * sectionRadians + kPiOverTwo;\n\tCGFloat angleB = angleA + sectionRadians;\n\tCGContextAddArc(context, radius, radius, radius - kEdgeSpacer, angleA, angleB, 0); // outer arc\n\tCGContextAddArc(context, radius, radius, innerRadius + kEdgeSpacer, angleB, angleA, -1); // inner arc\n\tCGContextFillPath(context);\n}\n\n#pragma mark - Touches\n\n- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {\n\t\n    UITouch *touch = [touches anyObject];\n    CGPoint pos = [touch locationInView:self];\n    [self mapPointToValue:pos];\n    [self setNeedsDisplay];\n}\n\n- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {\n    UITouch *touch = [touches anyObject];\n    CGPoint pos = [touch locationInView:self];\n    [self mapPointToValue:pos];\n    [self setNeedsDisplay];\n}\n\n#pragma mark - Mapping\n\n// TODO: check if point is within the middle circle, if yes then don't update\n- (void)mapPointToValue:(CGPoint)point {\n    CGSize viewSize = self.bounds.size;\n\n    // first convert to a point ranging from 1:1 in x and y, where point = (0,0) is the center\n    // Then I switch y and x, and also flip y, so that the 0 quadrant is mapped to the bottom left.\n    float y = 1.0 - (point.x * 2.0 / viewSize.width);\n    float x = (point.y * 2.0 / viewSize.height) - 1.0;\n\n    CGFloat sectionRadians = kTwoPi / self.numSections;\n    float theta = atan2(y, x);\n    if (theta < 0) {\n        theta += kTwoPi; \n    }\n    self.section =  (int)(theta / sectionRadians);\n    \n    CGFloat valuePerSection = (self.maximumValue - self.minimumValue) / (self.numSections - 1);\n    self.value = valuePerSection * self.section + self.minimumValue;\n\n}\n\n#pragma mark - Overridden Getters / Setters\n\n- (void)setValue:(float)f {\n    if (fabs(self.value - f) > 0.0001) {\n\t\t[super setValue:f];\n        self.valueLabel.text = [NSString stringWithFormat:@\"%d\", (int)f];\n        self.section = (int)(f - self.minimumValue) * (self.numSections - 1) / (self.maximumValue - self.minimumValue);\n        \n        [self.valueLabel setNeedsDisplay];\n        [self setNeedsDisplay];\n        \n        if (self.valueTarget && self.valueAction && [self.valueTarget respondsToSelector:self.valueAction]) {\n        \t[self.valueTarget performSelectorOnMainThread:self.valueAction withObject:self waitUntilDone:YES];\n        }\n    }\n}\n\n@end\n"
  },
  {
    "path": "SlidePad/Classes/Views/QSlider.h",
    "content": "/*\n Copyright (c) 2012, Richard Eakin\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that\n the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and\n the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import <UIKit/UIKit.h>\n#import \"QControl.h\"\n\ntypedef enum {\n    RQSliderOrientationHorizontal,\n    RQSliderOrientationVertical,\n} RQSliderOrientation;\n\n@interface QSlider : QControl\n\n@property (nonatomic, assign) RQSliderOrientation orientation;\n\n@end\n"
  },
  {
    "path": "SlidePad/Classes/Views/QSlider.m",
    "content": "/*\n Copyright (c) 2012, Richard Eakin\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that\n the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and\n the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import \"QSlider.h\"\n\nstatic const CGFloat kThresholdForTouchRelease = 50.0;\n\n@interface QSlider ()\n\n- (BOOL)pointIsWithinBounds:(CGPoint)point;\n- (void)mapPointToValue:(CGPoint)point;\n- (void)drawRoundedRectFrame:(CGContextRef)context;\n\n@end\n\n@implementation QSlider\n\n@synthesize orientation = orientation_;\n\n#pragma mark - Init / Dealloc\n\n- (id)initWithFrame:(CGRect)frame {\n    \n    self = [super initWithFrame:frame];\n    if (self) {\n        self.fillColor = QCONTROL_DEFAULT_FILL_COLOR;\n        self.frameColor = QCONTROL_DEFAULT_FRAME_COLOR;\n        self.orientation = RQSliderOrientationHorizontal;\n    }\n    return self;\n}\n\n- (void)drawRect:(CGRect)rect {\n\n    CGContextRef context = UIGraphicsGetCurrentContext();\n    CGContextSetFillColorWithColor(context, self.fillColor.CGColor);\n    CGContextSetStrokeColorWithColor(context, self.frameColor.CGColor);\n    \n    CGRect frame = self.bounds;\n\n    float pos = ((self.value - self.minimumValue) * frame.size.width) / (self.maximumValue - self.minimumValue);\n\n    // Draw filled region\n    CGRect fillRect = CGRectMake(1.0, 1.0, pos, frame.size.height - 1.0);\n    CGContextSetLineWidth(context, 1.0);\n\n    CGContextAddRect(context, fillRect);\n    CGContextFillPath(context);\n    \n    CGContextSetLineWidth(context, 6.0);\n    CGContextSetLineCap(context, kCGLineCapRound);\n    \n    \n    CGContextBeginPath(context);\n    CGContextMoveToPoint(context, pos, frame.origin.y + 4);\n    CGContextAddLineToPoint(context, pos, frame.size.height - 4);\n    CGContextStrokePath(context);\n    \n    CGContextSetLineWidth(context, 2.0);\n    [self drawRoundedRectFrame:context];\n}\n\n- (void)drawRoundedRectFrame:(CGContextRef)context {\n    CGRect rrect = self.bounds; \n    CGFloat radius = 8.0; \n    CGFloat minx = CGRectGetMinX(rrect), midx = CGRectGetMidX(rrect), maxx = CGRectGetMaxX(rrect); \n    CGFloat miny = CGRectGetMinY(rrect), midy = CGRectGetMidY(rrect), maxy = CGRectGetMaxY(rrect); \n    \n    CGContextMoveToPoint(context, minx, midy);\n    CGContextAddArcToPoint(context, minx, miny, midx, miny, radius);\n    CGContextAddArcToPoint(context, maxx, miny, maxx, midy, radius);\n    CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, radius);\n    CGContextAddArcToPoint(context, minx, maxy, minx, midy, radius);\n    CGContextClosePath(context); \n    CGContextStrokePath(context);\n}\n\n#pragma mark - Touches\n\n- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {\n\t\n    UITouch *touch = [touches anyObject];\n    CGPoint pos = [touch locationInView:self];\n\t\n    [self mapPointToValue:pos];\n    [self setNeedsDisplay]; // TODO: the drawing commands in drawRect don't get erased by this command only\n}\n\n- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {\n    UITouch *touch = [touches anyObject];\n    CGPoint pos = [touch locationInView:self];\n\tif ([self pointIsWithinBounds:pos]) {\n\t\t[self mapPointToValue:pos];\n\t}\n}\n\n- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {\n}\n\n- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {\n}\n\n#pragma mark - Mapping\n\n- (void) mapPointToValue: (CGPoint)point {\n\t\n    float length, x, val;\n    if (self.orientation == RQSliderOrientationHorizontal) {\n        if (point.x < 0.0) {\n            val = self.minimumValue;\n        } else if (point.x > self.bounds.size.width) {\n            val = self.maximumValue;\n        } else {\n            val =  self.minimumValue + (point.x * (self.maximumValue - self.minimumValue)) / self.bounds.size.width;\n            self.value = val;\n        }\n    } else {\n        if (point.y < 0.0) {\n            val = self.minimumValue;\n        } else if (point.y > self.bounds.size.height) {\n            val = self.maximumValue;\n        } else {\n            val =  self.minimumValue + (point.y * (self.maximumValue - self.minimumValue)) / self.bounds.size.height;\n        }\n    }\n}\n\n- (BOOL)pointIsWithinBounds:(CGPoint)point {\n\tif (point.x < -kThresholdForTouchRelease || point.x > self.bounds.size.width + kThresholdForTouchRelease || \n\t\tpoint.y < -kThresholdForTouchRelease || point.y > self.bounds.size.height + kThresholdForTouchRelease) {\n\t\treturn NO;\n\t} else {\n\t\treturn YES;\n\t}\n}\n\n@end\n"
  },
  {
    "path": "SlidePad/Classes/Views/TouchDiamond.h",
    "content": "/*\n Copyright (c) 2012, Richard Eakin\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that\n the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and\n the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import <UIKit/UIKit.h>\n\n// simple view that draws a diamond to display the current touch.\n@interface TouchDiamond : UIView\n\n@property (nonatomic, assign) NSInteger touchIndex; // identifier for this touch, which allows us to tie it to a voice in the synthesizer\n\n- (id)initWithIndex:(NSInteger)touchIndex;\n- (void)displayAnimated; // diamond grows to full size\n\n@end\n"
  },
  {
    "path": "SlidePad/Classes/Views/TouchDiamond.m",
    "content": "/*\n Copyright (c) 2012, Richard Eakin\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that\n the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and\n the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import \"TouchDiamond.h\"\n\n#define DIAMOND_WIDTH 40.0\n#define DIAMOND_HEIGHT 100.0\n\n@implementation TouchDiamond\n\n@synthesize touchIndex = touchIndex_;\n\n- (id)initWithIndex:(NSInteger)touchIndex {\n    self = [super init];\n    if(self) {\n    \tself.touchIndex = touchIndex;\n    }\n    return self;\n}\n\n- (id)initWithFrame:(CGRect)frame {\n    self = [super initWithFrame:CGRectMake(0.0, 0.0, DIAMOND_WIDTH * 0.8, DIAMOND_HEIGHT * 0.4)];\n    if (self) {\n        self.backgroundColor = [UIColor clearColor];\n    }\n    return self;\n}\n\n- (void)displayAnimated {\n\t[UIView animateWithDuration:0.2\n\t\t\t\t\t\t  delay:0.0\n\t\t\t\t\t\toptions:UIViewAnimationOptionBeginFromCurrentState\n\t\t\t\t\t animations:^{\n\t\t\t\t\t\t self.bounds = CGRectMake(0.0, 0.0, DIAMOND_WIDTH, DIAMOND_HEIGHT);\n\t\t\t\t\t } completion:nil];\n}\n\n- (void)drawRect:(CGRect)rect {\n    CGContextRef c = UIGraphicsGetCurrentContext();\n    CGContextSetRGBFillColor(c, 1.0, 0.3, 0.0, 0.5);\n    CGContextSetRGBStrokeColor(c, 1.0, 0.0, 0.0, 0.75);\n    CGContextSetLineWidth(c, 1.0);\n    \n    float midx = CGRectGetMidX(self.bounds);\n    float midy = CGRectGetMidY(self.bounds);\n    float maxx = CGRectGetWidth(self.bounds);\n    float maxy = CGRectGetHeight(self.bounds);\n    \n    CGPoint diamond[8] = {\n\t\tCGPointMake(0.0, midy), CGPointMake(midx, maxy ),\n        CGPointMake(midx, maxy), CGPointMake(maxx, midy),\n        CGPointMake(maxx, midy), CGPointMake(midx, 0.0),\n        CGPointMake(midx, 0.0), CGPointMake(0.0, midy)\n\t};\n    \n    CGContextAddLines(c, diamond, 8);\n    CGContextDrawPath(c, kCGPathFillStroke);\n}\n\n\n@end\n"
  },
  {
    "path": "SlidePad/OtherSources/Common.h",
    "content": "\n// debug macros from: http://www.cimgf.com/2010/05/02/my-current-prefix-pch-file/\n#ifdef R_DEBUG\n#define RLog(...) NSLog(@\"%s %@\", __PRETTY_FUNCTION__, [NSString stringWithFormat:__VA_ARGS__])\n#else\n#define RLog(...) do { } while (0)\n#endif\n"
  },
  {
    "path": "SlidePad/OtherSources/Prefix.pch",
    "content": "\n#ifdef __OBJC__\n    #import <Foundation/Foundation.h>\n    #import <UIKit/UIKit.h>\n\t#import <QuartzCore/QuartzCore.h>\n\t#import \"Common.h\"\n#endif\n\n"
  },
  {
    "path": "SlidePad/OtherSources/main.m",
    "content": "\n#import <UIKit/UIKit.h>\n#import \"AppDelegate.h\"\n\nint main(int argc, char *argv[]) {\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, NSStringFromClass(AppDelegate.class));\n    }\n}\n"
  },
  {
    "path": "SlidePad/ReadMe.txt",
    "content": "SlidePad iOS app (part of pd-for-ios, example apps for libpd in iOS)\nNov 21, 2011\n\nThis is a polyphonic synthesizer the contains quite a few techniques and\ntools for building a full-featured, mobile touch synth. There are a few\ncontrols:\n\n- patch selector: controls the patch used for each 'voice', choose between\n'Classic Sub', subtractive synthesis, or 'Wavetabler', additive synthesis\nvia wavetable lookup\n- pitch quantize\n- a signal-rate lowpass filter control\n- octave control\n\n------ License ------------------------------------------------------------\n\nThis software is copyrighted by Miller Puckette, Reality Jockey,\nPeter Brinkmann, Richard Eakin and others.  \nThe following terms (the \"Standard Improved BSD License\") apply to all files \nassociated with the software unless explicitly disclaimed in individual files:\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above  \n   copyright notice, this list of conditions and the following \n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n3. The name of the author may not be used to endorse or promote\n   products derived from this software without specific prior \n   written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\nBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\nIN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\nTHE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "SlidePad/Resources/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>English</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIconFile</key>\n\t<string></string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.0</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "SlidePad/SlidePad.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t0EDD8C21130014F900D99E63 /* PolyPatchController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0EDD8C20130014F900D99E63 /* PolyPatchController.m */; };\n\t\t1106785812BF1F3E00EEF8B0 /* wavetabler-voice.pd in Resources */ = {isa = PBXBuildFile; fileRef = 1106785712BF1F3E00EEF8B0 /* wavetabler-voice.pd */; };\n\t\t111ED9881481A48F00C2FA29 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 111ED9871481A48F00C2FA29 /* AVFoundation.framework */; };\n\t\t1138CF99139B7A0F00E37D70 /* QControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 1138CF96139B7A0F00E37D70 /* QControl.m */; };\n\t\t1138CF9A139B7A0F00E37D70 /* QRadioDial.m in Sources */ = {isa = PBXBuildFile; fileRef = 1138CF98139B7A0F00E37D70 /* QRadioDial.m */; };\n\t\t1138CFAA139C820D00E37D70 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1138CFA9139C820D00E37D70 /* QuartzCore.framework */; };\n\t\t1178378B12C0EC5B00FC9681 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 1178378912C0EC5B00FC9681 /* main.m */; };\n\t\t117837CF12C0EE7F00FC9681 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 117837C612C0EE7F00FC9681 /* AppDelegate.m */; };\n\t\t117837D012C0EE7F00FC9681 /* SlidePadViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 117837C912C0EE7F00FC9681 /* SlidePadViewController.m */; };\n\t\t117837D112C0EE7F00FC9681 /* Fingerboard.m in Sources */ = {isa = PBXBuildFile; fileRef = 117837CC12C0EE7F00FC9681 /* Fingerboard.m */; };\n\t\t117837D212C0EE7F00FC9681 /* QSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = 117837CE12C0EE7F00FC9681 /* QSlider.m */; };\n\t\t11820F6D1613F80000ACDC3E /* load-meter.pd in Resources */ = {isa = PBXBuildFile; fileRef = 11820F6C1613F80000ACDC3E /* load-meter.pd */; };\n\t\t11A30EAF1611575A00786A6D /* libpd-ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 11A30EAA1611571B00786A6D /* libpd-ios.a */; };\n\t\t11A44FE112BC9079000B4443 /* classicsub-voice.pd in Resources */ = {isa = PBXBuildFile; fileRef = 11A44FE012BC9079000B4443 /* classicsub-voice.pd */; };\n\t\t11C91C2C12C203760022693B /* TouchDiamond.m in Sources */ = {isa = PBXBuildFile; fileRef = 11C91C2B12C203760022693B /* TouchDiamond.m */; };\n\t\t11FD016F1617D9E000D54A9C /* main.pd in Resources */ = {isa = PBXBuildFile; fileRef = 11FD016E1617D9E000D54A9C /* main.pd */; };\n\t\t3063EF9521091F0000C8A4A2 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3063EF9421091F0000C8A4A2 /* Default-568h@2x.png */; };\n\t\tDC0C300E125D15FC008B6389 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC0C300D125D15FC008B6389 /* Foundation.framework */; };\n\t\tDC0C3012125D160B008B6389 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC0C3011125D160B008B6389 /* UIKit.framework */; };\n\t\tDC0C3016125D1614008B6389 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC0C3015125D1614008B6389 /* CoreGraphics.framework */; };\n\t\tDCCC7CDF125C3E0F002CF6AC /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCCC7CDE125C3E0F002CF6AC /* AudioToolbox.framework */; };\n\t\tDCD724CF125D1A1E000A4BDE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCD724CE125D1A1E000A4BDE /* Foundation.framework */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t11A30EA91611571B00786A6D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0EE529681330D18D009D0B96 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = D2AAC07E0554694100DB518D;\n\t\t\tremoteInfo = \"libpd-ios\";\n\t\t};\n\t\t11A30EAB1611571B00786A6D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0EE529681330D18D009D0B96 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 119013AB1486450C00086F19;\n\t\t\tremoteInfo = \"libpd-osx\";\n\t\t};\n\t\t11A30EAD1611575200786A6D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0EE529681330D18D009D0B96 /* libpd.xcodeproj */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D2AAC07D0554694100DB518D;\n\t\t\tremoteInfo = \"libpd-ios\";\n\t\t};\n\t\t3063EF9021091E2500C8A4A2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0EE529681330D18D009D0B96 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 30C3D36D1FAA200100C67F08;\n\t\t\tremoteInfo = \"libpd-ios-multi\";\n\t\t};\n\t\t3063EF9221091E2500C8A4A2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0EE529681330D18D009D0B96 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 30C3D2FA1FAA1FCC00C67F08;\n\t\t\tremoteInfo = \"libpd-osx-multi\";\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t0EDD8C1F130014F900D99E63 /* PolyPatchController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PolyPatchController.h; sourceTree = \"<group>\"; };\n\t\t0EDD8C20130014F900D99E63 /* PolyPatchController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PolyPatchController.m; sourceTree = \"<group>\"; };\n\t\t0EE529681330D18D009D0B96 /* libpd.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = libpd.xcodeproj; path = ../libpd/libpd.xcodeproj; sourceTree = \"<group>\"; };\n\t\t1106785712BF1F3E00EEF8B0 /* wavetabler-voice.pd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = \"wavetabler-voice.pd\"; path = \"pd/wavetabler-voice.pd\"; sourceTree = \"<group>\"; };\n\t\t111ED9871481A48F00C2FA29 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };\n\t\t1138CF85139B78B500E37D70 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };\n\t\t1138CF95139B7A0F00E37D70 /* QControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QControl.h; sourceTree = \"<group>\"; };\n\t\t1138CF96139B7A0F00E37D70 /* QControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QControl.m; sourceTree = \"<group>\"; };\n\t\t1138CF97139B7A0F00E37D70 /* QRadioDial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QRadioDial.h; sourceTree = \"<group>\"; };\n\t\t1138CF98139B7A0F00E37D70 /* QRadioDial.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QRadioDial.m; sourceTree = \"<group>\"; };\n\t\t1138CFA9139C820D00E37D70 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };\n\t\t1178378812C0EC5B00FC9681 /* Common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Common.h; path = OtherSources/Common.h; sourceTree = \"<group>\"; };\n\t\t1178378912C0EC5B00FC9681 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = OtherSources/main.m; sourceTree = \"<group>\"; };\n\t\t1178378A12C0EC5B00FC9681 /* Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Prefix.pch; path = OtherSources/Prefix.pch; sourceTree = \"<group>\"; };\n\t\t1178378E12C0ECB200FC9681 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Resources/Info.plist; sourceTree = \"<group>\"; };\n\t\t117837C512C0EE7F00FC9681 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\t117837C612C0EE7F00FC9681 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\t117837C812C0EE7F00FC9681 /* SlidePadViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SlidePadViewController.h; sourceTree = \"<group>\"; };\n\t\t117837C912C0EE7F00FC9681 /* SlidePadViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SlidePadViewController.m; sourceTree = \"<group>\"; };\n\t\t117837CB12C0EE7F00FC9681 /* Fingerboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Fingerboard.h; path = Views/Fingerboard.h; sourceTree = \"<group>\"; };\n\t\t117837CC12C0EE7F00FC9681 /* Fingerboard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Fingerboard.m; path = Views/Fingerboard.m; sourceTree = \"<group>\"; };\n\t\t117837CD12C0EE7F00FC9681 /* QSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QSlider.h; sourceTree = \"<group>\"; };\n\t\t117837CE12C0EE7F00FC9681 /* QSlider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QSlider.m; sourceTree = \"<group>\"; };\n\t\t11820F6C1613F80000ACDC3E /* load-meter.pd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = \"load-meter.pd\"; path = \"pd/load-meter.pd\"; sourceTree = \"<group>\"; };\n\t\t11A44FE012BC9079000B4443 /* classicsub-voice.pd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = \"classicsub-voice.pd\"; path = \"pd/classicsub-voice.pd\"; sourceTree = \"<group>\"; };\n\t\t11C91C2A12C203760022693B /* TouchDiamond.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TouchDiamond.h; path = Views/TouchDiamond.h; sourceTree = \"<group>\"; };\n\t\t11C91C2B12C203760022693B /* TouchDiamond.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TouchDiamond.m; path = Views/TouchDiamond.m; sourceTree = \"<group>\"; };\n\t\t11FD016E1617D9E000D54A9C /* main.pd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = main.pd; path = pd/main.pd; sourceTree = \"<group>\"; };\n\t\t1D6058910D05DD3D006BFB54 /* SlidePad.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SlidePad.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t3063EF9421091F0000C8A4A2 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = \"Default-568h@2x.png\"; sourceTree = \"<group>\"; };\n\t\tDC0C300D125D15FC008B6389 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\tDC0C3011125D160B008B6389 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };\n\t\tDC0C3015125D1614008B6389 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };\n\t\tDCCC7CDE125C3E0F002CF6AC /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = \"<absolute>\"; };\n\t\tDCD724CE125D1A1E000A4BDE /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = \"<absolute>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t1D60588F0D05DD3D006BFB54 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t11A30EAF1611575A00786A6D /* libpd-ios.a in Frameworks */,\n\t\t\t\t111ED9881481A48F00C2FA29 /* AVFoundation.framework in Frameworks */,\n\t\t\t\t1138CFAA139C820D00E37D70 /* QuartzCore.framework in Frameworks */,\n\t\t\t\tDCCC7CDF125C3E0F002CF6AC /* AudioToolbox.framework in Frameworks */,\n\t\t\t\tDC0C300E125D15FC008B6389 /* Foundation.framework in Frameworks */,\n\t\t\t\tDC0C3012125D160B008B6389 /* UIKit.framework in Frameworks */,\n\t\t\t\tDC0C3016125D1614008B6389 /* CoreGraphics.framework in Frameworks */,\n\t\t\t\tDCD724CF125D1A1E000A4BDE /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t117837C412C0EE7F00FC9681 /* Classes */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t117837C512C0EE7F00FC9681 /* AppDelegate.h */,\n\t\t\t\t117837C612C0EE7F00FC9681 /* AppDelegate.m */,\n\t\t\t\t117837C712C0EE7F00FC9681 /* Controllers */,\n\t\t\t\t11DD271E1610028B0054B03D /* Fingerboard */,\n\t\t\t\t117837CA12C0EE7F00FC9681 /* QControls */,\n\t\t\t);\n\t\t\tpath = Classes;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t117837C712C0EE7F00FC9681 /* Controllers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t117837C812C0EE7F00FC9681 /* SlidePadViewController.h */,\n\t\t\t\t117837C912C0EE7F00FC9681 /* SlidePadViewController.m */,\n\t\t\t\t0EDD8C1F130014F900D99E63 /* PolyPatchController.h */,\n\t\t\t\t0EDD8C20130014F900D99E63 /* PolyPatchController.m */,\n\t\t\t);\n\t\t\tpath = Controllers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t117837CA12C0EE7F00FC9681 /* QControls */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1138CF95139B7A0F00E37D70 /* QControl.h */,\n\t\t\t\t1138CF96139B7A0F00E37D70 /* QControl.m */,\n\t\t\t\t1138CF97139B7A0F00E37D70 /* QRadioDial.h */,\n\t\t\t\t1138CF98139B7A0F00E37D70 /* QRadioDial.m */,\n\t\t\t\t117837CD12C0EE7F00FC9681 /* QSlider.h */,\n\t\t\t\t117837CE12C0EE7F00FC9681 /* QSlider.m */,\n\t\t\t);\n\t\t\tname = QControls;\n\t\t\tpath = Views;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t117EAAA312B7754400C00CFC /* pd files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t11FD016E1617D9E000D54A9C /* main.pd */,\n\t\t\t\t1106785712BF1F3E00EEF8B0 /* wavetabler-voice.pd */,\n\t\t\t\t11A44FE012BC9079000B4443 /* classicsub-voice.pd */,\n\t\t\t\t11820F6C1613F80000ACDC3E /* load-meter.pd */,\n\t\t\t);\n\t\t\tname = \"pd files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t11A30EA51611571B00786A6D /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t11A30EAA1611571B00786A6D /* libpd-ios.a */,\n\t\t\t\t11A30EAC1611571B00786A6D /* libpd-osx.a */,\n\t\t\t\t3063EF9121091E2500C8A4A2 /* libpd-ios-multi.a */,\n\t\t\t\t3063EF9321091E2500C8A4A2 /* libpd-osx-multi.a */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t11DD271E1610028B0054B03D /* Fingerboard */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t117837CB12C0EE7F00FC9681 /* Fingerboard.h */,\n\t\t\t\t117837CC12C0EE7F00FC9681 /* Fingerboard.m */,\n\t\t\t\t11C91C2A12C203760022693B /* TouchDiamond.h */,\n\t\t\t\t11C91C2B12C203760022693B /* TouchDiamond.m */,\n\t\t\t);\n\t\t\tname = Fingerboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t19C28FACFE9D520D11CA2CBB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1D6058910D05DD3D006BFB54 /* SlidePad.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3063EF9421091F0000C8A4A2 /* Default-568h@2x.png */,\n\t\t\t\t0EE529681330D18D009D0B96 /* libpd.xcodeproj */,\n\t\t\t\t117837C412C0EE7F00FC9681 /* Classes */,\n\t\t\t\t29B97315FDCFA39411CA2CEA /* Other Sources */,\n\t\t\t\t29B97317FDCFA39411CA2CEA /* Resources */,\n\t\t\t\t117EAAA312B7754400C00CFC /* pd files */,\n\t\t\t\t29B97323FDCFA39411CA2CEA /* Frameworks */,\n\t\t\t\t19C28FACFE9D520D11CA2CBB /* Products */,\n\t\t\t);\n\t\t\tname = CustomTemplate;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t29B97315FDCFA39411CA2CEA /* Other Sources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1178378812C0EC5B00FC9681 /* Common.h */,\n\t\t\t\t1178378912C0EC5B00FC9681 /* main.m */,\n\t\t\t\t1178378A12C0EC5B00FC9681 /* Prefix.pch */,\n\t\t\t);\n\t\t\tname = \"Other Sources\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t29B97317FDCFA39411CA2CEA /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1178378E12C0ECB200FC9681 /* Info.plist */,\n\t\t\t);\n\t\t\tname = Resources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t29B97323FDCFA39411CA2CEA /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t111ED9871481A48F00C2FA29 /* AVFoundation.framework */,\n\t\t\t\t1138CFA9139C820D00E37D70 /* QuartzCore.framework */,\n\t\t\t\t1138CF85139B78B500E37D70 /* SystemConfiguration.framework */,\n\t\t\t\tDCCC7CDE125C3E0F002CF6AC /* AudioToolbox.framework */,\n\t\t\t\tDC0C300D125D15FC008B6389 /* Foundation.framework */,\n\t\t\t\tDC0C3011125D160B008B6389 /* UIKit.framework */,\n\t\t\t\tDC0C3015125D1614008B6389 /* CoreGraphics.framework */,\n\t\t\t\tDCD724CE125D1A1E000A4BDE /* Foundation.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t1D6058900D05DD3D006BFB54 /* SlidePad */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget \"SlidePad\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1D60588D0D05DD3D006BFB54 /* Resources */,\n\t\t\t\t1D60588E0D05DD3D006BFB54 /* Sources */,\n\t\t\t\t1D60588F0D05DD3D006BFB54 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t11A30EAE1611575200786A6D /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = SlidePad;\n\t\t\tproductName = SlidePad01;\n\t\t\tproductReference = 1D6058910D05DD3D006BFB54 /* SlidePad.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t29B97313FDCFA39411CA2CEA /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0930;\n\t\t\t\tORGANIZATIONNAME = Blarg;\n\t\t\t};\n\t\t\tbuildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject \"SlidePad\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 1;\n\t\t\tknownRegions = (\n\t\t\t\tEnglish,\n\t\t\t\tJapanese,\n\t\t\t\tFrench,\n\t\t\t\tGerman,\n\t\t\t);\n\t\t\tmainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectReferences = (\n\t\t\t\t{\n\t\t\t\t\tProductGroup = 11A30EA51611571B00786A6D /* Products */;\n\t\t\t\t\tProjectRef = 0EE529681330D18D009D0B96 /* libpd.xcodeproj */;\n\t\t\t\t},\n\t\t\t);\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t1D6058900D05DD3D006BFB54 /* SlidePad */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXReferenceProxy section */\n\t\t11A30EAA1611571B00786A6D /* libpd-ios.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-ios.a\";\n\t\t\tremoteRef = 11A30EA91611571B00786A6D /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t11A30EAC1611571B00786A6D /* libpd-osx.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-osx.a\";\n\t\t\tremoteRef = 11A30EAB1611571B00786A6D /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t3063EF9121091E2500C8A4A2 /* libpd-ios-multi.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-ios-multi.a\";\n\t\t\tremoteRef = 3063EF9021091E2500C8A4A2 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t3063EF9321091E2500C8A4A2 /* libpd-osx-multi.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-osx-multi.a\";\n\t\t\tremoteRef = 3063EF9221091E2500C8A4A2 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n/* End PBXReferenceProxy section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t1D60588D0D05DD3D006BFB54 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t11A44FE112BC9079000B4443 /* classicsub-voice.pd in Resources */,\n\t\t\t\t1106785812BF1F3E00EEF8B0 /* wavetabler-voice.pd in Resources */,\n\t\t\t\t11820F6D1613F80000ACDC3E /* load-meter.pd in Resources */,\n\t\t\t\t3063EF9521091F0000C8A4A2 /* Default-568h@2x.png in Resources */,\n\t\t\t\t11FD016F1617D9E000D54A9C /* main.pd in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t1D60588E0D05DD3D006BFB54 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1178378B12C0EC5B00FC9681 /* main.m in Sources */,\n\t\t\t\t117837CF12C0EE7F00FC9681 /* AppDelegate.m in Sources */,\n\t\t\t\t117837D012C0EE7F00FC9681 /* SlidePadViewController.m in Sources */,\n\t\t\t\t117837D112C0EE7F00FC9681 /* Fingerboard.m in Sources */,\n\t\t\t\t117837D212C0EE7F00FC9681 /* QSlider.m in Sources */,\n\t\t\t\t11C91C2C12C203760022693B /* TouchDiamond.m in Sources */,\n\t\t\t\t0EDD8C21130014F900D99E63 /* PolyPatchController.m in Sources */,\n\t\t\t\t1138CF99139B7A0F00E37D70 /* QControl.m in Sources */,\n\t\t\t\t1138CF9A139B7A0F00E37D70 /* QRadioDial.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t11A30EAE1611575200786A6D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"libpd-ios\";\n\t\t\ttargetProxy = 11A30EAD1611575200786A6D /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1D6058940D05DD3E006BFB54 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = OtherSources/Prefix.pch;\n\t\t\t\tINFOPLIST_FILE = Resources/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"-DR_DEBUG\",\n\t\t\t\t\t\"-DDEBUG\",\n\t\t\t\t\t\"-DPD\",\n\t\t\t\t\t\"-DUSA_API_DUMMY\",\n\t\t\t\t\t\"-DHAVE_LIBDL\",\n\t\t\t\t\t\"-DHAVE_UNISTD_H\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = cc.libpd.SlidePad;\n\t\t\t\tPRODUCT_NAME = SlidePad;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tVALID_ARCHS = \"$(ARCHS_STANDARD_32_BIT) $(ARCHS_STANDARD_64_BIT)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1D6058950D05DD3E006BFB54 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = OtherSources/Prefix.pch;\n\t\t\t\tINFOPLIST_FILE = Resources/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = cc.libpd.SlidePad;\n\t\t\t\tPRODUCT_NAME = SlidePad;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t\tVALID_ARCHS = \"$(ARCHS_STANDARD_32_BIT) $(ARCHS_STANDARD_64_BIT)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tC01FCF4F08A954540054247B /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = c99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = NO;\n\t\t\t\tHEADER_SEARCH_PATHS = ../libpd/objc/;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"-DPD\",\n\t\t\t\t\t\"-DUSA_API_DUMMY\",\n\t\t\t\t\t\"-DHAVE_LIBDL\",\n\t\t\t\t\t\"-DHAVE_UNISTD_H\",\n\t\t\t\t);\n\t\t\t\tPROVISIONING_PROFILE = \"\";\n\t\t\t\t\"PROVISIONING_PROFILE[sdk=iphoneos*]\" = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALID_ARCHS = \"$(ARCHS_STANDARD_32_BIT)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC01FCF5008A954540054247B /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Distribution\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = c99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = NO;\n\t\t\t\tHEADER_SEARCH_PATHS = ../libpd/objc/;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"-DPD\",\n\t\t\t\t\t\"-DUSA_API_DUMMY\",\n\t\t\t\t\t\"-DHAVE_LIBDL\",\n\t\t\t\t\t\"-DHAVE_UNISTD_H\",\n\t\t\t\t);\n\t\t\t\tPROVISIONING_PROFILE = \"\";\n\t\t\t\t\"PROVISIONING_PROFILE[sdk=iphoneos*]\" = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALID_ARCHS = \"$(ARCHS_STANDARD_32_BIT)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget \"SlidePad\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1D6058940D05DD3E006BFB54 /* Debug */,\n\t\t\t\t1D6058950D05DD3E006BFB54 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tC01FCF4E08A954540054247B /* Build configuration list for PBXProject \"SlidePad\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC01FCF4F08A954540054247B /* Debug */,\n\t\t\t\tC01FCF5008A954540054247B /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 29B97313FDCFA39411CA2CEA /* Project object */;\n}\n"
  },
  {
    "path": "SlidePad/pd/classicsub-voice.pd",
    "content": "#N canvas 762 139 429 483 10;\n#N canvas 58 40 781 654 16x 0;\n#X obj 69 345 *~ 0.064;\n#X obj 69 368 rpole~ 0.93538;\n#X obj 69 391 *~ 0.00431;\n#X obj 69 414 cpole~ 0.96559 0.05592;\n#X obj 69 440 cpole~ 0.96559 -0.05592;\n#X obj 69 463 *~ 0.125;\n#X obj 69 486 rzero~ -1;\n#X obj 69 509 rzero~ -1;\n#X obj 69 532 rzero~ -1;\n#X obj 70 97 phasor~;\n#X obj 69 566 outlet~;\n#X obj 93 151 wrap~;\n#X obj 93 127 -~;\n#X obj 93 175 *~;\n#X obj 70 204 +~;\n#X obj 271 156 phasor~;\n#X obj 294 210 wrap~;\n#X obj 294 186 -~;\n#X obj 294 234 *~;\n#X obj 271 263 +~;\n#X obj 69 311 +~;\n#X obj 250 34 r osc-params;\n#X obj 250 57 unpack 0 0 0 0 0 0;\n#X obj 272 100 *~;\n#X obj 272 128 +~;\n#X msg 341 338 \\; osc-params 0.5 -0.5 0.5 0.5 1 0.5;\n#X obj 341 312 loadbang;\n#X text 433 33 Problem: I had to remove the block~ 1024 for use with\nlibpd;\n#X obj 69 29 inlet~;\n#X connect 0 0 1 0;\n#X connect 1 0 2 0;\n#X connect 2 0 3 0;\n#X connect 3 0 4 0;\n#X connect 3 1 4 1;\n#X connect 4 0 5 0;\n#X connect 5 0 6 0;\n#X connect 6 0 7 0;\n#X connect 7 0 8 0;\n#X connect 8 0 10 0;\n#X connect 9 0 12 0;\n#X connect 9 0 14 0;\n#X connect 11 0 13 0;\n#X connect 12 0 11 0;\n#X connect 13 0 14 1;\n#X connect 14 0 20 0;\n#X connect 15 0 17 0;\n#X connect 15 0 19 0;\n#X connect 16 0 18 0;\n#X connect 17 0 16 0;\n#X connect 18 0 19 1;\n#X connect 19 0 20 1;\n#X connect 20 0 0 0;\n#X connect 21 0 22 0;\n#X connect 22 0 12 1;\n#X connect 22 1 13 1;\n#X connect 22 2 17 1;\n#X connect 22 3 18 1;\n#X connect 22 4 23 1;\n#X connect 22 5 24 1;\n#X connect 23 0 24 0;\n#X connect 24 0 15 0;\n#X connect 26 0 25 0;\n#X connect 28 0 9 0;\n#X connect 28 0 23 0;\n#X restore 66 185 pd 16x;\n#X obj 130 259 line~;\n#X obj 130 230 pack 0 40;\n#X obj 115 289 *~;\n#X obj 65 92 mtof;\n#X obj 66 127 pack f 30;\n#X obj 66 153 line~;\n#X obj 118 92 r synth-freq-ramptime;\n#X obj 66 56 r \\$0-synth-freq;\n#X obj 129 186 r \\$0-synth-mag;\n#X text 18 413 https://github.com/libpd/pd-for-ios;\n#X text 17 436 For information on usage and redistribution \\, see the\nlicense included with Pure Data.;\n#N canvas 736 814 450 300 test 0;\n#X floatatom 22 123 5 0 0 0 - - -;\n#X floatatom 126 122 5 0 0 0 - - -;\n#X floatatom 60 206 5 0 0 0 - - -;\n#X msg 336 30 \\; pd dsp 1;\n#X msg 336 67 \\; pd dsp 0;\n#X msg 126 94 500;\n#X msg 89 92 0.9;\n#X obj 55 181 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144\n-1 -1 0 0;\n#X obj 22 34 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1\n-1;\n#X obj 126 151 s vcf-cutoff;\n#X msg 22 91 40;\n#X msg 53 91 46;\n#X msg 229 94 75;\n#X floatatom 228 121 5 0 0 0 - - -;\n#X obj 234 154 s synth-freq-ramptime;\n#X obj 23 152 s \\$0-synth-freq;\n#X obj 54 224 s \\$0-synth-mag;\n#X text 16 268 note: main.pd must be open for this patch to work;\n#X connect 0 0 15 0;\n#X connect 1 0 9 0;\n#X connect 5 0 1 0;\n#X connect 6 0 7 0;\n#X connect 7 0 2 0;\n#X connect 7 0 16 0;\n#X connect 8 0 10 0;\n#X connect 8 0 6 0;\n#X connect 8 0 5 0;\n#X connect 8 0 12 0;\n#X connect 10 0 0 0;\n#X connect 11 0 0 0;\n#X connect 12 0 13 0;\n#X connect 13 0 14 0;\n#X restore 339 24 pd test;\n#X text 19 367 This pd patch has been adapted from pd's own help file\n'J08.classicsynth.pd' for use with SlidePad \\, an iOS app within the\npd-for-ios collection \\, powered by libpd.;\n#X obj 115 322 throw~ slidepad-audio;\n#X connect 0 0 3 0;\n#X connect 1 0 3 1;\n#X connect 2 0 1 0;\n#X connect 3 0 14 0;\n#X connect 4 0 5 0;\n#X connect 5 0 6 0;\n#X connect 6 0 0 0;\n#X connect 7 0 5 1;\n#X connect 8 0 4 0;\n#X connect 9 0 2 0;\n"
  },
  {
    "path": "SlidePad/pd/load-meter.pd",
    "content": "#N canvas 161 261 299 317 12;\n#X floatatom 79 255 0 0 0 0 - - -;\n#X obj 118 168 cputime;\n#X obj 118 28 loadbang;\n#X obj 118 112 metro 1000;\n#X msg 118 56 1;\n#X floatatom 118 84 0 0 0 0 - - -;\n#X obj 118 140 t b b;\n#X obj 118 228 * 0.1;\n#X obj 118 197 int;\n#X text 163 84 <-- on/off;\n#X text 51 284 CPU load in percent;\n#X obj 118 256 s load-meter;\n#X connect 1 0 8 0;\n#X connect 2 0 4 0;\n#X connect 3 0 6 0;\n#X connect 4 0 5 0;\n#X connect 5 0 3 0;\n#X connect 6 0 1 0;\n#X connect 6 1 1 1;\n#X connect 7 0 0 0;\n#X connect 7 0 11 0;\n#X connect 8 0 7 0;\n"
  },
  {
    "path": "SlidePad/pd/main.pd",
    "content": "#N canvas 1476 761 408 358 10;\n#X obj 239 66 table wavetable 1027;\n#N canvas 0 22 450 300 load-wavetable 0;\n#X obj 53 23 loadbang;\n#X text 168 160 from ocarina.yaml \\, frame 84 \\, .28s;\n#X msg 38 107 cosinesum 1024 0 1 0.00504083 0.0565903 0.0108557 0.00585451\n0.0040287 0.00134951 0.00192504 0.00140905 \\, normalize;\n#X msg 55 56 cosinesum 1024 0 0.7 0.3 0.5 \\, normalize;\n#X obj 47 244 s wavetable;\n#X connect 0 0 2 0;\n#X connect 2 0 4 0;\n#X connect 3 0 4 0;\n#X restore 240 39 pd load-wavetable;\n#X obj 32 36 catch~ slidepad-audio;\n#X obj 32 95 dac~;\n#N canvas 1260 256 281 347 filter 0;\n#X obj 67 12 inlet~;\n#X obj 108 229 line~;\n#X obj 126 119 t b f;\n#X obj 128 11 r vcf-cutoff;\n#X obj 69 303 outlet~;\n#X obj 69 267 vcf~ 3;\n#X obj 109 151 * 50;\n#X obj 153 63 loadbang;\n#X obj 163 89 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1\n-1;\n#X obj 82 41 env~;\n#X obj 83 68 * 0.5;\n#X obj 109 205 pack f 50;\n#X connect 0 0 5 0;\n#X connect 0 0 9 0;\n#X connect 1 0 5 1;\n#X connect 2 0 6 0;\n#X connect 2 1 6 1;\n#X connect 3 0 2 0;\n#X connect 5 0 4 0;\n#X connect 6 0 11 0;\n#X connect 7 0 2 0;\n#X connect 8 0 2 0;\n#X connect 9 0 10 0;\n#X connect 10 0 6 0;\n#X connect 11 0 1 0;\n#X restore 32 66 pd filter;\n#X text 12 281 For information on usage and redistribution \\, and for\na DISCLAIMER OF ALL WARRANTIES \\, see the file \\, \"LICENSE.txt \\, \"\nin this distribution.;\n#X text 15 208 This pd patch was made for SlidePad \\, an iOS app within\nthe pd-for-ios collection \\, powered by libpd.;\n#X text 15 239 https://github.com/libpd/pd-for-ios;\n#X connect 2 0 4 0;\n#X connect 4 0 3 0;\n"
  },
  {
    "path": "SlidePad/pd/wavetabler-voice.pd",
    "content": "#N canvas 840 357 432 571 10;\n#X obj 105 284 line~;\n#X obj 105 255 pack 0 40;\n#X obj 57 325 *~;\n#X obj 58 61 mtof;\n#X obj 58 96 pack f 30;\n#X obj 58 122 line~;\n#X obj 110 61 r synth-freq-ramptime;\n#X obj 58 25 r \\$0-synth-freq;\n#X obj 105 228 r \\$0-synth-mag;\n#X text 12 491 For information on usage and redistribution \\, and for\na DISCLAIMER OF ALL WARRANTIES \\, see the file \\, \"LICENSE.txt \\, \"\nin this distribution.;\n#X text 15 418 This pd patch was made for SlidePad \\, an iOS app within\nthe pd-for-ios collection \\, powered by libpd.;\n#X text 15 449 https://github.com/libpd/pd-for-ios;\n#N canvas 1359 811 450 300 test 0;\n#X floatatom 22 123 5 0 0 0 - - -;\n#X msg 336 30 \\; pd dsp 1;\n#X msg 336 67 \\; pd dsp 0;\n#X obj 22 34 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1\n-1;\n#X msg 22 91 40;\n#X msg 53 91 46;\n#X msg 229 94 75;\n#X floatatom 228 121 5 0 0 0 - - -;\n#X obj 228 149 s synth-freq-ramptime;\n#X obj 23 152 s \\$0-synth-freq;\n#X floatatom 137 206 5 0 0 0 - - -;\n#X msg 129 92 0.9;\n#X obj 132 181 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144\n-1 -1 11430 0;\n#X obj 23 152 s \\$0-synth-freq;\n#X obj 131 224 s \\$0-synth-mag;\n#X text 21 267 note: main.pd must be open for this patch to work;\n#X connect 0 0 9 0;\n#X connect 3 0 4 0;\n#X connect 3 0 11 0;\n#X connect 3 0 6 0;\n#X connect 4 0 0 0;\n#X connect 5 0 0 0;\n#X connect 6 0 7 0;\n#X connect 7 0 8 0;\n#X connect 11 0 12 0;\n#X connect 12 0 10 0;\n#X connect 12 0 14 0;\n#X restore 290 24 pd test;\n#X obj 58 176 tabosc4~ wavetable;\n#X obj 57 358 throw~ slidepad-audio;\n#X connect 0 0 2 1;\n#X connect 1 0 0 0;\n#X connect 2 0 14 0;\n#X connect 3 0 4 0;\n#X connect 4 0 5 0;\n#X connect 5 0 13 0;\n#X connect 6 0 4 1;\n#X connect 7 0 3 0;\n#X connect 8 0 1 0;\n#X connect 13 0 2 0;\n"
  },
  {
    "path": "SlidePadBasic/Classes/AppDelegate.h",
    "content": "/*\n Copyright (c) 2012, Richard Eakin\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that\n the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and\n the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import <UIKit/UIKit.h>\n#import \"PdBase.h\"\n\n@interface AppDelegate : NSObject <UIApplicationDelegate, PdReceiverDelegate> {\n\tBOOL playing_;\n}\n\n@property (nonatomic, retain) UIWindow *window;\n@property (nonatomic, getter=isPlaying) BOOL playing; // a globally accesible flag to start or stop audio\n\n@end\n\n"
  },
  {
    "path": "SlidePadBasic/Classes/AppDelegate.m",
    "content": "/*\n Copyright (c) 2012, Richard Eakin\n Updated by Dan Wilcox 2018\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that\n the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and\n the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import \"AppDelegate.h\"\n#import \"SlidePadBasicViewController.h\"\n#import \"PdAudioController.h\"\n\n@interface AppDelegate ()\n\n@property (nonatomic, retain) SlidePadBasicViewController *viewController;\n@property (nonatomic, retain) PdAudioController *audioController;\n\n- (void)setupPd;\n\n@end\n\n@implementation AppDelegate\n\n@synthesize window = window_;\n@synthesize viewController = viewController_;\n@synthesize audioController = audioController_;\n\n#pragma mark - Application lifecycle\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    \n    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];\n    self.viewController = [[SlidePadBasicViewController alloc] init];\n\tself.window.rootViewController = self.viewController;\n    \n\t[self setupPd];\n\t\n    [self.window addSubview:self.viewController.view];\n    [self.window makeKeyAndVisible];\n\treturn YES;\n}\n\n- (void)setupPd {\n\t// Configure a typical audio session with 2 output channels\n\tself.audioController = [[PdAudioController alloc] init];\n\tPdAudioStatus status = [self.audioController configurePlaybackWithSampleRate:44100\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t  numberChannels:2\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinputEnabled:NO\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   mixingEnabled:NO];\n\tif (status == PdAudioError) {\n\t\tRLog(@\"Error! Could not configure PdAudioController\");\n\t} else if (status == PdAudioPropertyChanged) {\n\t\tRLog(@\"Warning: some of the audio parameters were not accceptable.\");\n\t} else {\n\t\tRLog(@\"Audio Configuration successful.\");\n\t}\n\n\t// log actually settings\n\t[self.audioController print];\n\n\t// set AppDelegate as PdRecieverDelegate to recieve messages from pd\n    [PdBase setDelegate:self];\n\n\t// recieve all [send load-meter] messages from pd\n\t[PdBase subscribe:@\"load-meter\"];\n\n\t// open one instance of the load-meter patch and forget about it\n\t[PdBase openFile:@\"load-meter.pd\" path:[[NSBundle mainBundle] bundlePath]];\n}\n\n#pragma mark - PdRecieverDelegate\n\n// handle [print] messages from pd\n- (void)receivePrint:(NSString *)message {\n    NSLog(@\"Pd Console: %@\", message);\n}\n\n// handle subscribed float messages from pd\n- (void)receiveFloat:(float)received fromSource:(NSString *)source {\n\tif ([source isEqualToString:@\"load-meter\"]) {\n\t\tself.viewController.loadPercentage = (int)received;\n\t}\n}\n\n#pragma mark - Accessors\n\n- (BOOL)isPlaying {\n    return playing_;\n}\n\n- (void)setPlaying:(BOOL)newState {\n    if( newState == playing_ )\n\t\treturn;\n\n\tplaying_ = newState;\n\tself.audioController.active = playing_;\n}\n\n#pragma mark - UIApplicationDelegate\n\n- (void)applicationWillResignActive:(UIApplication *)application {\n\tself.playing = NO;\n}\n\n\n- (void)applicationDidBecomeActive:(UIApplication *)application {\n\tself.playing = YES;\n}\n\n\n- (void)applicationWillTerminate:(UIApplication *)application {\n\tself.playing = NO;\n}\n\n@end\n"
  },
  {
    "path": "SlidePadBasic/Classes/Controllers/SlidePadBasicViewController.h",
    "content": "/*\n Copyright (c) 2012, Richard Eakin\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that\n the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and\n the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import <UIKit/UIKit.h>\n\n@interface SlidePadBasicViewController : UIViewController\n\n@property (nonatomic, assign) int loadPercentage;\n\n@end\n\n"
  },
  {
    "path": "SlidePadBasic/Classes/Controllers/SlidePadBasicViewController.m",
    "content": "/*\n Copyright (c) 2012, Richard Eakin\n Updated by Dan Wilcox 2018\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that\n the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and\n the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import \"SlidePadBasicViewController.h\"\n\n#import \"PdBase.h\"\n#import \"PdFile.h\"\n\n#import \"AppDelegate.h\"\n#import \"Fingerboard.h\"\n\n#define TOGGLE_OFF_COLOR [UIColor darkGrayColor]\n#define TOGGLE_ON_COLOR [UIColor colorWithRed:0.0 green:0.5 blue:0.5 alpha:1.0]\n\n@interface SlidePadBasicViewController ()\n\n@property (nonatomic, retain) UIButton *playToggle;\n@property (nonatomic, retain) UILabel *loadLabel;\n@property (nonatomic, retain) Fingerboard *fingerboard;\n@property (nonatomic, retain) PdFile *patch;\n\n- (void)loadPatch;\n- (void)formatLoadLabel;\n- (void)playTogglePressed:(UIButton *)sender;\n\n- (UIButton *)newButton;\n- (UILabel *)newLabel;\n\n@end\n\n@implementation SlidePadBasicViewController\n\n@synthesize playToggle = playToggle_;\n@synthesize fingerboard = fingerboard_;\n@synthesize loadPercentage = loadPercentage_;\n@synthesize loadLabel = loadLabel_;\n\n#pragma mark - View management\n\n- (void)loadView {\n    [super loadView];\n\n\t[self loadPatch];\n\n    // UI Setup:\n    self.view.backgroundColor = [UIColor blackColor];\n\n\t// add a DSP toggle\n    self.playToggle = [self newButton];\n    [self.playToggle addTarget:self action:@selector(playTogglePressed:) forControlEvents:UIControlEventTouchUpInside];\n    [self.playToggle setTitle:@\"DSP Off\" forState:UIControlStateNormal];\n    [self.playToggle setTitle:@\"DSP On\" forState:UIControlStateSelected];\n\n\t// add a label to display cpu load\n\tself.loadLabel = [self newLabel];\n\tself.loadLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;\n\t[self formatLoadLabel];\n\n\t// add The Fingerboard - the guy who triggers sound\n    self.fingerboard = [[Fingerboard alloc] init];\n    self.fingerboard.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin;\n\n    [self.view addSubview:self.playToggle];\n\t[self.view addSubview:self.loadLabel];\n    [self.view addSubview:self.fingerboard];\n}\n\n- (void)viewWillAppear:(BOOL)animated {\n    [super viewDidAppear:animated];\n\n\t// layout...\n\t\n\t[self.playToggle sizeToFit];\n\n    float vh = CGRectGetHeight(self.view.bounds);\n    float vw = CGRectGetWidth(self.view.bounds);\n    \n\tconst float kSpacer = 10.0;\n\tconst float kLoadWidth = 150.0;\n    float widgetHeight = vh * 0.05;\n\n    // top 5% of the view, to the left\n    self.playToggle.frame = CGRectMake(kSpacer,\n                                       kSpacer, \n                                       self.playToggle.frame.size.width,\n                                       widgetHeight);\n\n\t// top 5% of the view, to the right\n    self.loadLabel.frame = CGRectMake(self.view.frame.size.width - kLoadWidth - kSpacer,\n                                       kSpacer,\n                                       kLoadWidth,\n                                       widgetHeight);\n\n    // rest of screen\n    self.fingerboard.frame =  CGRectMake(kSpacer,\n                                         widgetHeight + kSpacer * 4.0,\n                                         vw - kSpacer * 2.0,\n                                         vh - widgetHeight - kSpacer * 5.0);\n\n\t// load with DSP on:\n\t[self playTogglePressed:self.playToggle];\n}\n\n#pragma mark - Control Events\n\n- (void)playTogglePressed:(UIButton *)sender {\n\tAppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];\n\n    if([sender isSelected]){\n\t\tsender.backgroundColor = TOGGLE_OFF_COLOR;\n\t\tsender.selected = NO;\n        [self.fingerboard reset]; // kill all voices\n    } else {\n\t\tsender.backgroundColor = TOGGLE_ON_COLOR;\n\t\tsender.selected = YES;\n    }\n\t[appDelegate setPlaying:sender.selected];\n}\n\n#pragma mark - Custom Accessors\n\n// whenever loadPercentage is set, update the label\n- (void)setLoadPercentage:(int)loadPercentage {\n\tif (loadPercentage_ != loadPercentage) {\n\t\tloadPercentage_ = loadPercentage;\n\t\t[self formatLoadLabel];\n\t}\n}\n\n#pragma mark - Private Helpers\n\n- (void)loadPatch {\n\tself.patch = [PdFile openFileNamed:@\"wavetabler.pd\" path:[[NSBundle mainBundle] bundlePath]];\n\t[PdBase sendFloat:50.0 toReceiver:@\"synth-freq-ramptime\"]; // the amount of time to interpolate from one pitch value to another\n\t[PdBase sendFloat:0 toReceiver:@\"synth-mag\"]; // initialize as no sound\n}\n\n- (void)formatLoadLabel {\n\tself.loadLabel.text = [NSString stringWithFormat:@\"cpu load: %d%%\", self.loadPercentage];\n}\n\n- (UIButton *)newButton {\n\tUIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];\n    button.layer.cornerRadius = 8.0;\n    button.layer.masksToBounds = YES;\n    button.layer.borderWidth = 1.0;\n    button.backgroundColor = TOGGLE_OFF_COLOR;\n    button.showsTouchWhenHighlighted = YES;\n\tbutton.contentEdgeInsets = UIEdgeInsetsMake(0.0, 6.0, 0.0, 6.0);\n\treturn button;\n}\n\n- (UILabel *)newLabel {\n\tUILabel *label = [[UILabel alloc] initWithFrame:CGRectZero];\n\tlabel.backgroundColor = [UIColor clearColor];\n\tlabel.textColor = [UIColor colorWithRed:0.0 green:0.7 blue:0.3 alpha:1.0];\n\tlabel.textAlignment = NSTextAlignmentRight;\n\treturn label;\n}\n\n@end\n"
  },
  {
    "path": "SlidePadBasic/Classes/Views/Fingerboard.h",
    "content": "/*\n Copyright (c) 2012, Richard Eakin\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that\n the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and\n the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import <UIKit/UIKit.h>\n\n@interface Fingerboard : UIView\n\n@property (nonatomic, assign) float minPitch; // minimum frequency in well-tempered tuning\n@property (nonatomic, assign) float maxPitch; // maximum frequency in well-tempered tuning\n@property (nonatomic, assign) float numNotes; // number of notes is defaulted to maxPitch - minPitch, but it doesn't have to be\n\n@property (nonatomic, assign) BOOL drawNoteLabels; // the little midi numbers at the bottom\n@property (nonatomic, retain) UIColor *sharpNoteColor;\n@property (nonatomic, retain) UIColor *touchColor;\n\n- (void)mute; // turn off audio\n- (void)reset; // last resort reset method\n\n@end\n"
  },
  {
    "path": "SlidePadBasic/Classes/Views/Fingerboard.m",
    "content": "/*\n Copyright (c) 2012, Richard Eakin\n Updated by Dan Wilcox 2018\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that\n the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and\n the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import \"PdBase.h\"\n#import \"Fingerboard.h\"\n#import \"TouchDiamond.h\"\n#import \"PdFile.h\"\n\n#define RECEIVER_FREQ @\"synth-freq\"\n#define RECEIVER_MAG @\"synth-mag\"\n\n#define DEFAULT_SHARP_NOTES_COLOR [UIColor colorWithRed:0.0 green:0.5 blue:0.5 alpha:1.0]\n#define DEFAULT_OTHER_NOTES_COLOR [UIColor colorWithRed:0.2 green:0.2 blue:0.2 alpha:1.0]\n\nstatic const CGFloat kThresholdForTouchRelease = 0.0;\n\n@interface Fingerboard ()\n\n@property (nonatomic, retain) TouchDiamond *monoTouch;\n\n- (CGFloat)mapXToPitch:(CGFloat)x; // minPitch mapped to x = 0, maxPitch to x = self.frame.size.width\n- (CGFloat)mapYToMag:(CGFloat)y; // y is flipped so the top of the view (origin) = full magnitude, while bottom = 0\n\n- (void)sendParamsOff;\n- (void)sendParamsWithPoint:(CGPoint)point;\n- (BOOL)pointIsWithinBounds:(CGPoint)point;\n\n@end\n\n\n@implementation Fingerboard\n\n@synthesize monoTouch = monoTouch_;\n\n@synthesize minPitch = minPitch_;\n@synthesize maxPitch = maxPitch_;\n@synthesize numNotes = numNotes_;\n@synthesize drawNoteLabels = drawNoteLabels_;\n\n@synthesize sharpNoteColor = sharpNoteColor_;\n\n#pragma mark - Setup\n\n- (id)initWithFrame:(CGRect)frame {\n    self = [super initWithFrame:frame];\n    if (self) {\n        self.minPitch = 36.0; \n        self.maxPitch = 60.0;\n        self.numNotes = self.maxPitch - self.minPitch;\n        \n        self.drawNoteLabels = YES;\n\t\tself.clipsToBounds = YES;\n        self.backgroundColor = DEFAULT_OTHER_NOTES_COLOR;\n        self.sharpNoteColor = DEFAULT_SHARP_NOTES_COLOR;\n        \n        self.layer.borderColor = self.sharpNoteColor.CGColor;\n        self.layer.borderWidth = 2.0;\n    }\n    return self;\n}\n\n#pragma mark - Public\n\n- (void)mute {\n\t[self sendParamsOff];\n}\n\n- (void)reset {\n    if (self.monoTouch) {\n        [self.monoTouch removeFromSuperview];\n        self.monoTouch = nil;\n    }\n    [self sendParamsOff];\n}\n\n#pragma mark - Drawing\n\n- (void)drawRect:(CGRect)rect {\n    \n    CGContextRef context = UIGraphicsGetCurrentContext();\n\n    float nNotes = self.numNotes;\n    float noteWidth = self.frame.size.width / self.numNotes;\n    \n    // ***** create a layer for sharp notes *****\n    CGRect noteRect = CGRectMake(0.0, 0.0, noteWidth, CGRectGetHeight(self.bounds));\n    CGLayerRef noteLayer = CGLayerCreateWithContext (context, noteRect.size, NULL);\n    CGContextRef noteContext = CGLayerGetContext (noteLayer);\n    CGContextSetFillColorWithColor(noteContext, self.sharpNoteColor.CGColor);\n    CGContextFillRect(noteContext, noteRect);\n    \n    // ***** create a layer for line notes (C's and F's).  *****\n    CGLayerRef lineLayer = CGLayerCreateWithContext (context, noteRect.size, NULL);\n    CGContextRef lineContext = CGLayerGetContext (lineLayer);\n    CGContextSetStrokeColorWithColor(lineContext, self.sharpNoteColor.CGColor);\n    CGContextBeginPath(lineContext);\n    CGContextMoveToPoint(lineContext, 0.0, 0.0);\n    CGContextAddLineToPoint(lineContext, 0.0, noteRect.size.height);\n    CGContextClosePath(lineContext);\n    CGContextStrokePath(lineContext);\n    \n    \n    // ***** set up text for midi number *****\n\n\tconst float kTextColorGrayLevel = 0.75;\n\tUIColor *gray = [UIColor colorWithWhite:kTextColorGrayLevel alpha:1.0];\n\tUIFont *font;\n\tif (self.drawNoteLabels) {\n\t\tfont = [UIFont fontWithName:@\"Helvetica\" size:12];\n\t}\n    CGContextSetStrokeColorWithColor(context, gray.CGColor);\n    \n    \n    int nm, ns;\n    CGPoint notePoint = CGPointZero;\n\n    for (int n = 0; n < nNotes; n++) {\n        ns = n + self.minPitch;\n        nm = ns % 12;\n        if (nm == 1 || nm == 3 || nm == 6 || nm == 8 || nm == 10) {\n\t\t\t// draw the sharp notes\n            notePoint.x = n * noteWidth;\n            CGContextDrawLayerAtPoint (context, notePoint, noteLayer);\n        }            \n        else if (nm == 0 || nm == 5) {\n\t\t\t// draw the lines in between consecutive 'white' keys\n            notePoint.x = n * noteWidth;\n            CGContextDrawLayerAtPoint (context, notePoint, lineLayer);\n        }\n        if (self.drawNoteLabels) {\n            NSString *noteLabel = [NSString stringWithFormat:@\"%d\", ns];\n            [noteLabel drawAtPoint:CGPointMake(n * noteWidth + 3.0, self.bounds.size.height - 16.0)\n\t\t\t\t\twithAttributes:@{NSFontAttributeName:font, NSForegroundColorAttributeName:gray}];\n        }\n    }\n}\n\n#pragma mark - Touches\n\n// create a new TouchDiamond and update pd with params from this point\n- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {\n\tif (self.monoTouch) {\n\t\t[self.monoTouch removeFromSuperview];\n\t}\n\tCGPoint point = [[touches anyObject] locationInView:self];\n\tself.monoTouch = [[TouchDiamond alloc] init];\n\tself.monoTouch.center = point;\n\t[self addSubview:self.monoTouch];\n\t[self.monoTouch displayAnimated];\n\n\t[self sendParamsWithPoint:point];\n}\n\n// if the point is within this view's bounds, update it's position and pd\n- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {\n\tCGPoint point = [[touches anyObject] locationInView:self];\n\tif (![self pointIsWithinBounds:point]) {\n\t\t// could remove the monoTouch here, but I chose not to,\n\t\t// if it moves far enough out of the view the touchesCancelled\n\t\t// will be called\n\t\treturn;\n\t}\n\n\tself.monoTouch.center = point;\n\t[self sendParamsWithPoint:point];\n}\n\n// remove TouchDiamond and turn off the sound for this voice in pd\n- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {\n\tif (!self.monoTouch) {\n\t\treturn;\n\t}\n\t[self.monoTouch removeFromSuperview];\n\tself.monoTouch = nil;\n\t[self sendParamsOff];\n}\n\n// forward to touchesEnded\n- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {\n    RLog(@\"************ touches cancelled ***************\");\n\t[self touchesEnded:touches withEvent:event];\n}\n\n#pragma mark - Mapping functions\n\n- (void)sendParamsWithPoint:(CGPoint)point {\n\n\t// pitch is related to the x location in view, scaled within min and max Pitch\n    float pitch = self.minPitch + (self.maxPitch - self.minPitch) * point.x / CGRectGetWidth(self.frame);\n\n\t// mag is related to the inverted y location in view, so loudest (1.0) is on top\n    float mag = (CGRectGetHeight(self.frame) - point.y) / CGRectGetHeight(self.frame);\n\t\n    [PdBase sendFloat:mag toReceiver:RECEIVER_MAG];\n    [PdBase sendFloat:pitch toReceiver:RECEIVER_FREQ];\n}\n\n- (void)sendParamsOff{\n\t[PdBase sendFloat:0 toReceiver:RECEIVER_MAG];\n}\n\n- (CGFloat)mapXToPitch:(CGFloat)x {\n    float w = CGRectGetWidth(self.frame);\n\n    float sx = self.minPitch + (self.maxPitch - self.minPitch) * x / w;\n    return sx;\n}\n\n- (CGFloat)mapYToMag:(CGFloat)y {\n    float h = CGRectGetHeight(self.frame);\n    return (h - y) / h; \n}\n\n#pragma mark - Private\n\n- (BOOL)pointIsWithinBounds:(CGPoint)point {\n\tif (point.x < -kThresholdForTouchRelease || point.x > self.bounds.size.width + kThresholdForTouchRelease || \n\t\tpoint.y < -kThresholdForTouchRelease || point.y > self.bounds.size.height + kThresholdForTouchRelease) {\n\t\treturn NO;\n\t} else {\n\t\treturn YES;\n\t}\n}\n\n@end\n"
  },
  {
    "path": "SlidePadBasic/Classes/Views/TouchDiamond.h",
    "content": "/*\n Copyright (c) 2012, Richard Eakin\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that\n the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and\n the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import <UIKit/UIKit.h>\n\n@interface TouchDiamond : UIView\n\n@property (nonatomic, assign) NSInteger touchIndex; // identifier for this touch\n\n- (id)initWithIndex:(NSInteger)touchIndex;\n- (void)displayAnimated; // diamond grows to full size\n\n@end\n"
  },
  {
    "path": "SlidePadBasic/Classes/Views/TouchDiamond.m",
    "content": "/*\n Copyright (c) 2012, Richard Eakin\n Updated by Dan Wilcox 2018\n\n Redistribution and use in source and binary forms, with or without modification, are permitted provided that\n the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this list of conditions and\n the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and\n the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED\n WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import \"TouchDiamond.h\"\n\n#define DIAMOND_WIDTH 40.0\n#define DIAMOND_HEIGHT 100.0\n\n@implementation TouchDiamond\n\n@synthesize touchIndex = touchIndex_;\n\n- (id)initWithIndex:(NSInteger)touchIndex {\n    self = [super init];\n    if(self) {\n    \tself.touchIndex = touchIndex;\n\t}\n    return self;\n}\n\n- (id)initWithFrame:(CGRect)frame {\n    self = [super initWithFrame:CGRectMake(0.0, 0.0, DIAMOND_WIDTH * 0.8, DIAMOND_HEIGHT * 0.4)];\n    if (self) {\n        self.backgroundColor = [UIColor clearColor];\n    }\n    return self;\n}\n\n- (void)displayAnimated {\n\t[UIView animateWithDuration:0.2\n\t\t\t\t\t\t  delay:0.0\n\t\t\t\t\t\toptions:UIViewAnimationOptionBeginFromCurrentState\n\t\t\t\t\t animations:^{\n\t\t\t\t\t\t self.bounds = CGRectMake(0.0, 0.0, DIAMOND_WIDTH, DIAMOND_HEIGHT);\n\t\t\t\t\t } completion:nil];\n}\n\n- (void)drawRect:(CGRect)rect {\n    CGContextRef c = UIGraphicsGetCurrentContext();\n    CGContextSetRGBFillColor(c, 1.0, 0.3, 0.0, 0.5);\n    CGContextSetRGBStrokeColor(c, 1.0, 0.0, 0.0, 0.75);\n    CGContextSetLineWidth(c, 1.0);\n    \n    float midx = CGRectGetMidX(self.bounds);\n    float midy = CGRectGetMidY(self.bounds);\n    float maxx = CGRectGetWidth(self.bounds);\n    float maxy = CGRectGetHeight(self.bounds);\n    \n    CGPoint diamond[8] = {\n\t\tCGPointMake(0.0, midy), CGPointMake(midx, maxy ),\n        CGPointMake(midx, maxy), CGPointMake(maxx, midy),\n        CGPointMake(maxx, midy), CGPointMake(midx, 0.0),\n        CGPointMake(midx, 0.0), CGPointMake(0.0, midy)\n\t};\n    \n    CGContextAddLines(c, diamond, 8);\n    CGContextDrawPath(c, kCGPathFillStroke);\n}\n\n\n@end\n"
  },
  {
    "path": "SlidePadBasic/OtherSources/Common.h",
    "content": "#ifdef R_DEBUG\n\t#define RLog(...) NSLog(@\"%s %@\", __PRETTY_FUNCTION__, [NSString stringWithFormat:__VA_ARGS__])\n#else\n\t#define RLog(...) do { } while (0)\n#endif\n"
  },
  {
    "path": "SlidePadBasic/OtherSources/Prefix.pch",
    "content": "\n#ifdef __OBJC__\n    #import <Foundation/Foundation.h>\n    #import <UIKit/UIKit.h>\n\t#import <QuartzCore/QuartzCore.h>\n\t#import \"Common.h\"\n#endif\n\n\n"
  },
  {
    "path": "SlidePadBasic/OtherSources/main.m",
    "content": "\n#import <UIKit/UIKit.h>\n#import \"AppDelegate.h\"\n\nint main(int argc, char *argv[]) {\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, NSStringFromClass(AppDelegate.class));\n    }\n}\n"
  },
  {
    "path": "SlidePadBasic/ReadMe.txt",
    "content": "SlidePadBasic iOS app (part of pd-for-ios, example apps for libpd in iOS)\nNov 21, 2011\n\nThis is a simpler, monophonic version of the SlidePad sample that demonstrates the\nbasics of real-time synthesis with touches.  The main interface resembles\na midi keyboard layout and you run your finger across it to change the \npitch and magnitude.  There is also a cpu load label, which exemplifies\nhow to register and recieve data from pd (the patch for calculating the\nload is taken from pd's 'Load Meter').\n\n------ License ------------------------------------------------------------\n\nThis software is copyrighted by Miller Puckette, Reality Jockey,\nPeter Brinkmann, Richard Eakin and others.  \nThe following terms (the \"Standard Improved BSD License\") apply to all files \nassociated with the software unless explicitly disclaimed in individual files:\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above  \n   copyright notice, this list of conditions and the following \n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n3. The name of the author may not be used to endorse or promote\n   products derived from this software without specific prior \n   written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\nBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\nIN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\nTHE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "SlidePadBasic/Resources/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>English</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIconFile</key>\n\t<string></string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "SlidePadBasic/SlidePadBasic.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t1106785812BF1F3E00EEF8B0 /* wavetabler.pd in Resources */ = {isa = PBXBuildFile; fileRef = 1106785712BF1F3E00EEF8B0 /* wavetabler.pd */; };\n\t\t111ED9881481A48F00C2FA29 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 111ED9871481A48F00C2FA29 /* AVFoundation.framework */; };\n\t\t1138CFAA139C820D00E37D70 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1138CFA9139C820D00E37D70 /* QuartzCore.framework */; };\n\t\t1178378B12C0EC5B00FC9681 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 1178378912C0EC5B00FC9681 /* main.m */; };\n\t\t117837CF12C0EE7F00FC9681 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 117837C612C0EE7F00FC9681 /* AppDelegate.m */; };\n\t\t117837D012C0EE7F00FC9681 /* SlidePadBasicViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 117837C912C0EE7F00FC9681 /* SlidePadBasicViewController.m */; };\n\t\t117837D112C0EE7F00FC9681 /* Fingerboard.m in Sources */ = {isa = PBXBuildFile; fileRef = 117837CC12C0EE7F00FC9681 /* Fingerboard.m */; };\n\t\t11820F3816126D9000ACDC3E /* load-meter.pd in Resources */ = {isa = PBXBuildFile; fileRef = 11820F3716126D9000ACDC3E /* load-meter.pd */; };\n\t\t11A30EAF1611575A00786A6D /* libpd-ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 11A30EAA1611571B00786A6D /* libpd-ios.a */; };\n\t\t11C91C2C12C203760022693B /* TouchDiamond.m in Sources */ = {isa = PBXBuildFile; fileRef = 11C91C2B12C203760022693B /* TouchDiamond.m */; };\n\t\t3063EFA0210A02F400C8A4A2 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3063EF9F210A02F400C8A4A2 /* Default-568h@2x.png */; };\n\t\tDC0C300E125D15FC008B6389 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC0C300D125D15FC008B6389 /* Foundation.framework */; };\n\t\tDC0C3012125D160B008B6389 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC0C3011125D160B008B6389 /* UIKit.framework */; };\n\t\tDC0C3016125D1614008B6389 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC0C3015125D1614008B6389 /* CoreGraphics.framework */; };\n\t\tDCCC7CDF125C3E0F002CF6AC /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCCC7CDE125C3E0F002CF6AC /* AudioToolbox.framework */; };\n\t\tDCD724CF125D1A1E000A4BDE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCD724CE125D1A1E000A4BDE /* Foundation.framework */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t11A30EA91611571B00786A6D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0EE529681330D18D009D0B96 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = D2AAC07E0554694100DB518D;\n\t\t\tremoteInfo = \"libpd-ios\";\n\t\t};\n\t\t11A30EAB1611571B00786A6D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0EE529681330D18D009D0B96 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 119013AB1486450C00086F19;\n\t\t\tremoteInfo = \"libpd-osx\";\n\t\t};\n\t\t11A30EAD1611575200786A6D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0EE529681330D18D009D0B96 /* libpd.xcodeproj */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D2AAC07D0554694100DB518D;\n\t\t\tremoteInfo = \"libpd-ios\";\n\t\t};\n\t\t3063EF9B210A02F000C8A4A2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0EE529681330D18D009D0B96 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 30C3D36D1FAA200100C67F08;\n\t\t\tremoteInfo = \"libpd-ios-multi\";\n\t\t};\n\t\t3063EF9D210A02F000C8A4A2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0EE529681330D18D009D0B96 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 30C3D2FA1FAA1FCC00C67F08;\n\t\t\tremoteInfo = \"libpd-osx-multi\";\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t0EE529681330D18D009D0B96 /* libpd.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = libpd.xcodeproj; path = ../libpd/libpd.xcodeproj; sourceTree = \"<group>\"; };\n\t\t1106785712BF1F3E00EEF8B0 /* wavetabler.pd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = wavetabler.pd; path = pd/wavetabler.pd; sourceTree = \"<group>\"; };\n\t\t111ED9871481A48F00C2FA29 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };\n\t\t1138CF85139B78B500E37D70 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };\n\t\t1138CFA9139C820D00E37D70 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };\n\t\t1178378812C0EC5B00FC9681 /* Common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Common.h; path = OtherSources/Common.h; sourceTree = \"<group>\"; };\n\t\t1178378912C0EC5B00FC9681 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = OtherSources/main.m; sourceTree = \"<group>\"; };\n\t\t1178378A12C0EC5B00FC9681 /* Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Prefix.pch; path = OtherSources/Prefix.pch; sourceTree = \"<group>\"; };\n\t\t1178378E12C0ECB200FC9681 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Resources/Info.plist; sourceTree = \"<group>\"; };\n\t\t117837C512C0EE7F00FC9681 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\t117837C612C0EE7F00FC9681 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\t117837C812C0EE7F00FC9681 /* SlidePadBasicViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SlidePadBasicViewController.h; sourceTree = \"<group>\"; };\n\t\t117837C912C0EE7F00FC9681 /* SlidePadBasicViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SlidePadBasicViewController.m; sourceTree = \"<group>\"; };\n\t\t117837CB12C0EE7F00FC9681 /* Fingerboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Fingerboard.h; path = Views/Fingerboard.h; sourceTree = \"<group>\"; };\n\t\t117837CC12C0EE7F00FC9681 /* Fingerboard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Fingerboard.m; path = Views/Fingerboard.m; sourceTree = \"<group>\"; };\n\t\t11820F3716126D9000ACDC3E /* load-meter.pd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = \"load-meter.pd\"; path = \"pd/load-meter.pd\"; sourceTree = \"<group>\"; };\n\t\t11C91C2A12C203760022693B /* TouchDiamond.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TouchDiamond.h; path = Views/TouchDiamond.h; sourceTree = \"<group>\"; };\n\t\t11C91C2B12C203760022693B /* TouchDiamond.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TouchDiamond.m; path = Views/TouchDiamond.m; sourceTree = \"<group>\"; };\n\t\t1D6058910D05DD3D006BFB54 /* SlidePadBasic.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SlidePadBasic.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t3063EF9F210A02F400C8A4A2 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = \"Default-568h@2x.png\"; sourceTree = \"<group>\"; };\n\t\tDC0C300D125D15FC008B6389 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\tDC0C3011125D160B008B6389 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };\n\t\tDC0C3015125D1614008B6389 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };\n\t\tDCCC7CDE125C3E0F002CF6AC /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = \"<absolute>\"; };\n\t\tDCD724CE125D1A1E000A4BDE /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = \"<absolute>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t1D60588F0D05DD3D006BFB54 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t11A30EAF1611575A00786A6D /* libpd-ios.a in Frameworks */,\n\t\t\t\t111ED9881481A48F00C2FA29 /* AVFoundation.framework in Frameworks */,\n\t\t\t\t1138CFAA139C820D00E37D70 /* QuartzCore.framework in Frameworks */,\n\t\t\t\tDCCC7CDF125C3E0F002CF6AC /* AudioToolbox.framework in Frameworks */,\n\t\t\t\tDC0C300E125D15FC008B6389 /* Foundation.framework in Frameworks */,\n\t\t\t\tDC0C3012125D160B008B6389 /* UIKit.framework in Frameworks */,\n\t\t\t\tDC0C3016125D1614008B6389 /* CoreGraphics.framework in Frameworks */,\n\t\t\t\tDCD724CF125D1A1E000A4BDE /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t117837C412C0EE7F00FC9681 /* Classes */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t117837C512C0EE7F00FC9681 /* AppDelegate.h */,\n\t\t\t\t117837C612C0EE7F00FC9681 /* AppDelegate.m */,\n\t\t\t\t117837C712C0EE7F00FC9681 /* Controllers */,\n\t\t\t\t11DD271E1610028B0054B03D /* Fingerboard */,\n\t\t\t);\n\t\t\tpath = Classes;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t117837C712C0EE7F00FC9681 /* Controllers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t117837C812C0EE7F00FC9681 /* SlidePadBasicViewController.h */,\n\t\t\t\t117837C912C0EE7F00FC9681 /* SlidePadBasicViewController.m */,\n\t\t\t);\n\t\t\tpath = Controllers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t117EAAA312B7754400C00CFC /* pd files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t11820F3716126D9000ACDC3E /* load-meter.pd */,\n\t\t\t\t1106785712BF1F3E00EEF8B0 /* wavetabler.pd */,\n\t\t\t);\n\t\t\tname = \"pd files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t11A30EA51611571B00786A6D /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t11A30EAA1611571B00786A6D /* libpd-ios.a */,\n\t\t\t\t11A30EAC1611571B00786A6D /* libpd-osx.a */,\n\t\t\t\t3063EF9C210A02F000C8A4A2 /* libpd-ios-multi.a */,\n\t\t\t\t3063EF9E210A02F000C8A4A2 /* libpd-osx-multi.a */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t11DD271E1610028B0054B03D /* Fingerboard */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t117837CB12C0EE7F00FC9681 /* Fingerboard.h */,\n\t\t\t\t117837CC12C0EE7F00FC9681 /* Fingerboard.m */,\n\t\t\t\t11C91C2A12C203760022693B /* TouchDiamond.h */,\n\t\t\t\t11C91C2B12C203760022693B /* TouchDiamond.m */,\n\t\t\t);\n\t\t\tname = Fingerboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t19C28FACFE9D520D11CA2CBB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1D6058910D05DD3D006BFB54 /* SlidePadBasic.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3063EF9F210A02F400C8A4A2 /* Default-568h@2x.png */,\n\t\t\t\t0EE529681330D18D009D0B96 /* libpd.xcodeproj */,\n\t\t\t\t117837C412C0EE7F00FC9681 /* Classes */,\n\t\t\t\t29B97315FDCFA39411CA2CEA /* Other Sources */,\n\t\t\t\t29B97317FDCFA39411CA2CEA /* Resources */,\n\t\t\t\t117EAAA312B7754400C00CFC /* pd files */,\n\t\t\t\t29B97323FDCFA39411CA2CEA /* Frameworks */,\n\t\t\t\t19C28FACFE9D520D11CA2CBB /* Products */,\n\t\t\t);\n\t\t\tname = CustomTemplate;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t29B97315FDCFA39411CA2CEA /* Other Sources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1178378812C0EC5B00FC9681 /* Common.h */,\n\t\t\t\t1178378912C0EC5B00FC9681 /* main.m */,\n\t\t\t\t1178378A12C0EC5B00FC9681 /* Prefix.pch */,\n\t\t\t);\n\t\t\tname = \"Other Sources\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t29B97317FDCFA39411CA2CEA /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1178378E12C0ECB200FC9681 /* Info.plist */,\n\t\t\t);\n\t\t\tname = Resources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t29B97323FDCFA39411CA2CEA /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t111ED9871481A48F00C2FA29 /* AVFoundation.framework */,\n\t\t\t\t1138CFA9139C820D00E37D70 /* QuartzCore.framework */,\n\t\t\t\t1138CF85139B78B500E37D70 /* SystemConfiguration.framework */,\n\t\t\t\tDCCC7CDE125C3E0F002CF6AC /* AudioToolbox.framework */,\n\t\t\t\tDC0C300D125D15FC008B6389 /* Foundation.framework */,\n\t\t\t\tDC0C3011125D160B008B6389 /* UIKit.framework */,\n\t\t\t\tDC0C3015125D1614008B6389 /* CoreGraphics.framework */,\n\t\t\t\tDCD724CE125D1A1E000A4BDE /* Foundation.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t1D6058900D05DD3D006BFB54 /* SlidePadBasic */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget \"SlidePadBasic\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1D60588D0D05DD3D006BFB54 /* Resources */,\n\t\t\t\t1D60588E0D05DD3D006BFB54 /* Sources */,\n\t\t\t\t1D60588F0D05DD3D006BFB54 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t11A30EAE1611575200786A6D /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = SlidePadBasic;\n\t\t\tproductName = SlidePad01;\n\t\t\tproductReference = 1D6058910D05DD3D006BFB54 /* SlidePadBasic.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t29B97313FDCFA39411CA2CEA /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0930;\n\t\t\t\tORGANIZATIONNAME = Blarg;\n\t\t\t};\n\t\t\tbuildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject \"SlidePadBasic\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 1;\n\t\t\tknownRegions = (\n\t\t\t\tEnglish,\n\t\t\t\tJapanese,\n\t\t\t\tFrench,\n\t\t\t\tGerman,\n\t\t\t);\n\t\t\tmainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectReferences = (\n\t\t\t\t{\n\t\t\t\t\tProductGroup = 11A30EA51611571B00786A6D /* Products */;\n\t\t\t\t\tProjectRef = 0EE529681330D18D009D0B96 /* libpd.xcodeproj */;\n\t\t\t\t},\n\t\t\t);\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t1D6058900D05DD3D006BFB54 /* SlidePadBasic */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXReferenceProxy section */\n\t\t11A30EAA1611571B00786A6D /* libpd-ios.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-ios.a\";\n\t\t\tremoteRef = 11A30EA91611571B00786A6D /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t11A30EAC1611571B00786A6D /* libpd-osx.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-osx.a\";\n\t\t\tremoteRef = 11A30EAB1611571B00786A6D /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t3063EF9C210A02F000C8A4A2 /* libpd-ios-multi.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-ios-multi.a\";\n\t\t\tremoteRef = 3063EF9B210A02F000C8A4A2 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t3063EF9E210A02F000C8A4A2 /* libpd-osx-multi.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-osx-multi.a\";\n\t\t\tremoteRef = 3063EF9D210A02F000C8A4A2 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n/* End PBXReferenceProxy section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t1D60588D0D05DD3D006BFB54 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1106785812BF1F3E00EEF8B0 /* wavetabler.pd in Resources */,\n\t\t\t\t11820F3816126D9000ACDC3E /* load-meter.pd in Resources */,\n\t\t\t\t3063EFA0210A02F400C8A4A2 /* Default-568h@2x.png in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t1D60588E0D05DD3D006BFB54 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1178378B12C0EC5B00FC9681 /* main.m in Sources */,\n\t\t\t\t117837CF12C0EE7F00FC9681 /* AppDelegate.m in Sources */,\n\t\t\t\t117837D012C0EE7F00FC9681 /* SlidePadBasicViewController.m in Sources */,\n\t\t\t\t117837D112C0EE7F00FC9681 /* Fingerboard.m in Sources */,\n\t\t\t\t11C91C2C12C203760022693B /* TouchDiamond.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t11A30EAE1611575200786A6D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = \"libpd-ios\";\n\t\t\ttargetProxy = 11A30EAD1611575200786A6D /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1D6058940D05DD3E006BFB54 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = OtherSources/Prefix.pch;\n\t\t\t\tINFOPLIST_FILE = Resources/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"-DR_DEBUG\",\n\t\t\t\t\t\"-DDEBUG\",\n\t\t\t\t\t\"-DPD\",\n\t\t\t\t\t\"-DUSA_API_DUMMY\",\n\t\t\t\t\t\"-DHAVE_LIBDL\",\n\t\t\t\t\t\"-DHAVE_UNISTD_H\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = cc.libpd.SlidePadBasic;\n\t\t\t\tPRODUCT_NAME = SlidePadBasic;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALID_ARCHS = \"$(ARCHS_STANDARD_32_BIT) $(ARCHS_STANDARD_64_BIT)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1D6058950D05DD3E006BFB54 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = OtherSources/Prefix.pch;\n\t\t\t\tINFOPLIST_FILE = Resources/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = cc.libpd.SlidePadBasic;\n\t\t\t\tPRODUCT_NAME = SlidePadBasic;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t\tVALID_ARCHS = \"$(ARCHS_STANDARD_32_BIT) $(ARCHS_STANDARD_64_BIT)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tC01FCF4F08A954540054247B /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = c99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = NO;\n\t\t\t\tHEADER_SEARCH_PATHS = ../libpd/objc/;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"-DPD\",\n\t\t\t\t\t\"-DUSA_API_DUMMY\",\n\t\t\t\t\t\"-DHAVE_LIBDL\",\n\t\t\t\t\t\"-DHAVE_UNISTD_H\",\n\t\t\t\t);\n\t\t\t\tPROVISIONING_PROFILE = \"\";\n\t\t\t\t\"PROVISIONING_PROFILE[sdk=iphoneos*]\" = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALID_ARCHS = \"$(ARCHS_STANDARD_32_BIT)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC01FCF5008A954540054247B /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Distribution\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = c99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = NO;\n\t\t\t\tHEADER_SEARCH_PATHS = ../libpd/objc/;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"-DPD\",\n\t\t\t\t\t\"-DUSA_API_DUMMY\",\n\t\t\t\t\t\"-DHAVE_LIBDL\",\n\t\t\t\t\t\"-DHAVE_UNISTD_H\",\n\t\t\t\t);\n\t\t\t\tPROVISIONING_PROFILE = \"\";\n\t\t\t\t\"PROVISIONING_PROFILE[sdk=iphoneos*]\" = \"\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALID_ARCHS = \"$(ARCHS_STANDARD_32_BIT)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget \"SlidePadBasic\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1D6058940D05DD3E006BFB54 /* Debug */,\n\t\t\t\t1D6058950D05DD3E006BFB54 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tC01FCF4E08A954540054247B /* Build configuration list for PBXProject \"SlidePadBasic\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC01FCF4F08A954540054247B /* Debug */,\n\t\t\t\tC01FCF5008A954540054247B /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 29B97313FDCFA39411CA2CEA /* Project object */;\n}\n"
  },
  {
    "path": "SlidePadBasic/pd/load-meter.pd",
    "content": "#N canvas 161 261 299 317 12;\n#X floatatom 79 255 0 0 0 0 - - -;\n#X obj 118 168 cputime;\n#X obj 118 28 loadbang;\n#X obj 118 112 metro 1000;\n#X msg 118 56 1;\n#X floatatom 118 84 0 0 0 0 - - -;\n#X obj 118 140 t b b;\n#X obj 118 228 * 0.1;\n#X obj 118 197 int;\n#X text 163 84 <-- on/off;\n#X text 51 284 CPU load in percent;\n#X obj 118 256 s load-meter;\n#X connect 1 0 8 0;\n#X connect 2 0 4 0;\n#X connect 3 0 6 0;\n#X connect 4 0 5 0;\n#X connect 5 0 3 0;\n#X connect 6 0 1 0;\n#X connect 6 1 1 1;\n#X connect 7 0 0 0;\n#X connect 7 0 11 0;\n#X connect 8 0 7 0;\n"
  },
  {
    "path": "SlidePadBasic/pd/wavetabler.pd",
    "content": "#N canvas 414 226 652 503 10;\n#X obj 57 398 dac~;\n#X obj 105 324 line~;\n#X obj 105 275 pack 0 40;\n#X obj 57 365 *~;\n#X obj 58 61 mtof;\n#X obj 303 180 loadbang;\n#X obj 58 96 pack f 30;\n#X obj 58 122 line~;\n#X obj 109 61 r synth-freq-ramptime;\n#X obj 58 176 tabosc4~ \\$0-wavetable;\n#X obj 73 198 table \\$0-wavetable 1027;\n#X obj 303 267 s \\$0-wavetable;\n#X text 232 395 For information on usage and redistribution \\, and\nfor a DISCLAIMER OF ALL WARRANTIES \\, see the file \\, \"LICENSE.txt\n\\, \" in this distribution.;\n#X text 233 336 This pd patch was made for SlidePad \\, an iOS app within\nthe pd-for-ios collection \\, powered by libpd.;\n#X text 233 367 https://github.com/libpd/pd-for-ios;\n#X msg 303 207 cosinesum 1024 0 0.7 0.3 0.5 \\, normalize;\n#N canvas 747 506 450 300 test 0;\n#X floatatom 22 123 5 0 0 0 - - -;\n#X msg 336 30 \\; pd dsp 1;\n#X msg 336 67 \\; pd dsp 0;\n#X obj 22 34 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1\n-1;\n#X obj 22 11 loadbang;\n#X msg 22 91 40;\n#X msg 53 91 46;\n#X msg 229 94 75;\n#X floatatom 228 121 5 0 0 0 - - -;\n#X obj 228 149 s synth-freq-ramptime;\n#X floatatom 137 206 5 0 0 0 - - -;\n#X msg 129 92 0.9;\n#X obj 132 181 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144\n-1 -1 11430 0;\n#X obj 22 152 s synth-freq;\n#X obj 129 224 s synth-mag;\n#X connect 0 0 13 0;\n#X connect 3 0 5 0;\n#X connect 3 0 11 0;\n#X connect 4 0 3 0;\n#X connect 4 0 7 0;\n#X connect 5 0 0 0;\n#X connect 6 0 0 0;\n#X connect 7 0 8 0;\n#X connect 8 0 9 0;\n#X connect 11 0 12 0;\n#X connect 12 0 10 0;\n#X connect 12 0 14 0;\n#X restore 490 24 pd test;\n#X obj 58 25 r synth-freq;\n#X obj 105 248 r synth-mag;\n#X msg 331 239 sinesum 1024 1;\n#X connect 1 0 3 1;\n#X connect 2 0 1 0;\n#X connect 3 0 0 0;\n#X connect 3 0 0 1;\n#X connect 4 0 6 0;\n#X connect 5 0 15 0;\n#X connect 6 0 7 0;\n#X connect 7 0 9 0;\n#X connect 8 0 6 1;\n#X connect 9 0 3 0;\n#X connect 15 0 11 0;\n#X connect 17 0 4 0;\n#X connect 18 0 2 0;\n#X connect 19 0 11 0;\n"
  },
  {
    "path": "WaveTables/Classes/PdArray.h",
    "content": "//\n//  PdArray.h\n//  libpd\n//\n//  Created by Rich E on 16/05/11.\n//  Copyright 2011 Richard T. Eakin. All rights reserved.\n//\n\n/**\n * This software is copyrighted by Richard Eakin. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/*  Description:\n *  PdArray is a class to simplify the array read/write API by encapsulating\n *  a local c float array.  One begins by reading the pd array, which mirrors\n *  that array locally and provides methods to write to just the local array,\n *  write to both local and pd's array, and read/write methods for synchronizing\n *  the two arrays.  You get or set floats one at a time and boundaries are checked.\n *  \n *  Writing to only the local array may be useful if you want to update many\n *  elements (i.e. in a for loop) and don't want to incur the synchronization\n *  overhead of PdBase's array accessor methods.\n */\n\n#import <Foundation/Foundation.h>\n\n@interface PdArray : NSObject {\n    float *array_;\n    NSString *name_;\n    int size_;\n}\n\n@property (nonatomic, copy, readonly) NSString *name; // the name of the array in pd\n@property (nonatomic, assign, readonly) int size;     // size of the pd array\n\n// read the entire contents of a pd array given a name, locally storing the array.\n// sets size of local array = maximum length, offset = 0\n+ (id)arrayNamed:(NSString *)arrayName;\n\n// (re)read the entire contents of a pd array, provided it was already set with +arrayNamed:\n- (void)read;\n\n// write the local array to the pd array\n- (void)write;\n\n// retrieve a float from pd's array at the given index.\n// returns 0.0 if beyond the boundaries of the array.\n- (float)floatAtIndex:(int)index;\n\n// retrieve a float from the local array at the given index.\n// returns 0.0 if beyond the boundaries of the array.\n- (float)localFloatAtIndex:(int)index;\n\n// set a single float value in both the local array and pd's array\n- (void)setFloat:(float)value atIndex:(int)index;\n\n// set a single float value only in the local array. returns NO if it could not set because of bad parameters\n- (BOOL)setLocalFloat:(float)value atIndex:(int)index;\n\n@end\n"
  },
  {
    "path": "WaveTables/Classes/PdArray.m",
    "content": "//\n//  PdArray.m\n//  libpd\n//\n//  Created by Rich E on 16/05/11.\n//  Copyright 2011 Richard T. Eakin. All rights reserved.\n//\n\n/**\n * This software is copyrighted by Richard Eakin. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import \"PdArray.h\"\n#import \"PdBase.h\"\n\n@interface PdArray ()\n\n@property (nonatomic, copy) NSString *name;\n@property (nonatomic, assign) float *array;\n@property (nonatomic, assign) int size;\n\n@end\n\n@implementation PdArray\n\n@synthesize array = array_;\n@synthesize name = name_;\n@synthesize size = size_;\n\n#pragma mark -\n#pragma mark - Init / Dealloc\n\n+ (id)arrayNamed:(NSString *)arrayName {\n  PdArray *pdArray = [[self alloc] init];\n  if (pdArray) {\n    pdArray.size = [PdBase arraySizeForArrayNamed:arrayName];\n    if (pdArray.size <= 0) {\n      return nil;\n    }\n    pdArray.array = calloc(pdArray.size, sizeof(float));\n    pdArray.name = arrayName;\n    [pdArray read];\n  }\n  return pdArray;\n}\n\n- (void)dealloc {\n  free(self.array);\n}\n\n#pragma mark -\n#pragma mark Public\n\n- (void)read {\n  if (self.array) {\n\t\t[PdBase copyArrayNamed:self.name withOffset:0 toArray:self.array count:self.size];\n  }\n}\n\n- (void)write {\n  if (self.array) {\n\t\t[PdBase copyArray:self.array toArrayNamed:self.name withOffset:0 count:self.size];\n  }\n}\n\n- (float)floatAtIndex:(int)index {\n  [self read]; // TODO: only grab the specific float and put it in the local array. but, nothing uses this yet..\n  return [self localFloatAtIndex:index];\n}\n\n- (float)localFloatAtIndex:(int)index {\n  if (self.array && index >= 0 && index < self.size) {\n    return self.array[index];\n  } else {\n    return 0; // in the spirit of pd's tabread\n  }\n}\n\n- (void)setFloat:(float)value atIndex:(int)index {\n  if ([self setLocalFloat:value atIndex:index]) {\n\t\t[PdBase copyArray:(self.array+index) toArrayNamed:self.name withOffset:index count:1];\n  }\n}\n\n- (BOOL)setLocalFloat:(float)value atIndex:(int)index {\n  if (self.array && index >= 0 && index < self.size) {\n    self.array[index] = value;\n    return YES;\n  }\n  return NO;\n}\n\n@end\n"
  },
  {
    "path": "WaveTables/Classes/RootViewController.h",
    "content": "//\n//  RootViewController.h\n//  WaveTables\n//\n//  Created by Rich E on 16/05/11.\n//  Copyright 2011 Richard T. Eakin. All rights reserved.\n//\n\n/**\n * This software is copyrighted by Richard Eakin. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import <UIKit/UIKit.h>\n#import \"PdBase.h\"\n\n@class PdFile;\n@class WaveTableView;\n\n@interface RootViewController : UIViewController <PdReceiverDelegate> {\n    PdFile *patch_;\n    WaveTableView *waveTableView_;\n\tUIToolbar *toolBar_;\n}\n\n@end\n\n"
  },
  {
    "path": "WaveTables/Classes/RootViewController.m",
    "content": "//\n//  RootViewController.m\n//  WaveTables\n//\n//  Created by Rich E on 16/05/11.\n//  Copyright 2011 Richard T. Eakin. All rights reserved.\n//\n\n/**\n * This software is copyrighted by Richard Eakin. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import \"RootViewController.h\"\n#import \"WaveTableView.h\"\n#import \"PdFile.h\"\n#import \"PdArray.h\"\n\nstatic NSString *const kWavetablePatchName = @\"wavetable.pd\";\nstatic NSString *const kResynthesisPatchName = @\"resynthesis.pd\";\nstatic NSString *const kPdArrayName = @\"%d-array\"; // decimal parameter is the $0 arg\n@interface RootViewController ()\n\n@property (nonatomic, retain) PdFile *patch;\n@property (nonatomic, retain) WaveTableView *waveTableView;\n@property (nonatomic, retain) UIToolbar *toolBar;\n\n- (void)setupWavetable;\n- (void)setupToolbar;\n- (void)layoutWavetable;\n- (void)openPatch:(NSString *)name;\n- (void)setVolume:(CGFloat)volume; // in db normalized to 100 = 1 rms\n\n- (void)printButtonTapped:(UIBarButtonItem *)sender;\n- (void)resetButtonTapped:(UIBarButtonItem *)sender;\n- (void)patchSelectorChanged:(UISegmentedControl *)sender;\n@end\n\n@implementation RootViewController\n\n@synthesize patch = patch_;\n@synthesize waveTableView = waveTableView_;\n@synthesize toolBar = toolBar_;\n\n#pragma mark -\n#pragma mark Init\n\n- (void)loadView {\n    [super loadView];\n    self.view.backgroundColor = [UIColor whiteColor];\n\n\t[PdBase setDelegate:self];\n\t[self setupToolbar]; // this will also select a patch from the patchSelector, thereby opening the patch\n}\n\n- (void)viewWillAppear:(BOOL)animated {\n    [self layoutWavetable];\n}\n\n#pragma mark -\n#pragma mark Rotation\n\n- (void)viewDidLayoutSubviews {\n    [self layoutWavetable];\n}\n\n#pragma mark -\n#pragma mark PdReceiverDelegate\n\n- (void)receivePrint:(NSString *)message {\n\tDLog(@\"%@\", message);\n}\n\n#pragma mark -\n#pragma mark Private (User Interface)\n\n- (void)setupWavetable {\n    if (!self.patch) {\n        DLog(@\"Error, no patch loaded.\");\n        return;\n    }\n    NSString *arrayName = [NSString stringWithFormat:kPdArrayName, self.patch.dollarZero];\n    int arraySize = [PdBase arraySizeForArrayNamed:arrayName];\n    DLog(@\"--- array name: %@, size: %d ---\", arrayName, arraySize);\n    \n    PdArray *wavetable = [PdArray arrayNamed:arrayName];\n    \n    if (self.waveTableView) {\n        [self.waveTableView removeFromSuperview];\n    }\n    \n    self.waveTableView = [[WaveTableView alloc] initWithWavetable:wavetable];\n    self.waveTableView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth;\n\t\n\t[self.view addSubview:self.waveTableView];\n}\n\n- (void)setupToolbar {\n\tself.toolBar = [[UIToolbar alloc] init];\n\tself.toolBar.autoresizingMask = UIViewAutoresizingFlexibleWidth;\n\tself.toolBar.barStyle = UIBarStyleBlack;\n\t\n\tUIBarButtonItem *printButton = [[UIBarButtonItem alloc] initWithTitle:@\"Print\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t style:UIBarButtonItemStylePlain\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttarget:self\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taction:@selector(printButtonTapped:)];\n\n    UIBarButtonItem *resetButton = [[UIBarButtonItem alloc] initWithTitle:@\"Reset\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyle:UIBarButtonItemStylePlain\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   target:self\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   action:@selector(resetButtonTapped:)];\n    \n    UIBarButtonItem *spaceButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace\n                                                                                  target:nil\n                                                                                  action:nil];\n\n    UISegmentedControl *patchControl = [[UISegmentedControl alloc] initWithItems:\n                                          [NSArray arrayWithObjects:@\"Wavetable\", @\"Resynthesis\", nil]];\n\n    patchControl.tintColor = [UIColor darkGrayColor];\n\tpatchControl.selectedSegmentIndex = 0;\n    [patchControl addTarget:self action:@selector(patchSelectorChanged:) forControlEvents:UIControlEventValueChanged];\n\t[self patchSelectorChanged:patchControl];\n\t\n    UIBarButtonItem *patchControlButtonItem = [[UIBarButtonItem alloc] initWithCustomView:patchControl];\n    \n\t[self.toolBar setItems:[NSArray arrayWithObjects:printButton,\n                            resetButton,\n                            spaceButton,\n                            patchControlButtonItem,\n                            nil]];\n\t\n\t[self.toolBar sizeToFit];\n\t[self.view addSubview:self.toolBar];\n}\n\n// this ratio is a nice number that allows the wavetable to be of maximum size on an ipad in\n// landscape and portrait.\n// It will just try to fit in the screen with the same ratio, but alot smaller\n- (void)layoutWavetable {\n    static const CGFloat kRatioWidthToHeight = 1.375; \n    static const CGFloat kPadding = 10;\n    CGSize viewSize = self.view.bounds.size;\n    CGFloat height, width, padding;\n\n    if (viewSize.width > viewSize.height) {\n        // padding will be around the top and bottom, also need to make room for the toolbar\n\t\tCGFloat toolBarHeight = self.toolBar.frame.size.height;\n        height = viewSize.height - toolBarHeight - 2.0 * kPadding;\n        width = round(height * kRatioWidthToHeight);\n        padding = round((viewSize.width - width) / 2.0);\n        self.waveTableView.frame = CGRectMake(padding, toolBarHeight + kPadding, width, height);\n        \n    } else {\n        // padding will be around left and right\n        width = viewSize.width - 2.0 * kPadding;\n        height = round(width / kRatioWidthToHeight);\n        padding = round((viewSize.height - height) / 2.0);\n        self.waveTableView.frame = CGRectMake(kPadding, padding, width, height);\n    }\n    [self.waveTableView setNeedsDisplay];\n}\n\n#pragma mark -\n#pragma mark Private (Utilities)\n\n// note: if our patch is already set and we assign a new value here, the old\n// PdFile will be deallocated, which causes the patch to be closed.\n- (void)openPatch:(NSString *)name {\n    self.patch = [PdFile openFileNamed:name path:[[NSBundle mainBundle] bundlePath]];\n    \n    [self setupWavetable];\n    [self layoutWavetable];\n\t[self setVolume:90];\n}\n\n- (void)setVolume:(CGFloat)volume {\n    if (volume < 0.0) {\n        volume = 0.0;\n    } else if (volume > 100.0) {\n        volume = 100.0;\n    }\n    [PdBase sendFloat:volume toReceiver:[NSString stringWithFormat:@\"%d-volume\", self.patch.dollarZero]];\n}\n\n#pragma mark -\n#pragma mark Private (Action Handlers)\n\n// this will print out the array contents from within the pd patch,\n// and also print the contents of our PdArray\n- (void)printButtonTapped:(UIBarButtonItem *)sender {\n\t[PdBase sendBangToReceiver:[NSString stringWithFormat:@\"%d-print-table\", self.patch.dollarZero]];\n\t\n\tDLog(@\"wavetable elements:\");\n\tfor (int i = 0; i < self.waveTableView.wavetable.size; i++) {\n\t\tDLog(@\"[%d, %f]\", i, [self.waveTableView.wavetable floatAtIndex:i]);\n\t}\n}\n\n- (void)resetButtonTapped:(UIBarButtonItem *)sender {\n    DLog(@\"sending reset message to the patch\");\n    [PdBase sendBangToReceiver:@\"reset\"];\n\n    [self.waveTableView.wavetable read]; // updates the local array\n    [self.waveTableView setNeedsDisplay];\n}\n\n- (void)patchSelectorChanged:(UISegmentedControl *)sender {\n    NSString *patchName;\n    CGFloat minY, maxY;\n    switch (sender.selectedSegmentIndex) {\n        case 0:\n            patchName = kWavetablePatchName;\n            minY = -1.0;\n            maxY = 1.0;\n            break;\n        case 1:\n            patchName = kResynthesisPatchName;\n            minY = 0.0;\n            maxY = 1.0;\n            break;\n        default:\n            return;\n    }\n\tDLog(@\"selected patch named: %@\", patchName);\n    if ([self.patch.baseName isEqualToString:patchName]) {\n        DLog(@\"%@ already open, returning.\", patchName);\n        return;\n    }\n\tDLog(@\"minY = %2.1f, maxY = %2.1f\", minY, maxY);\n    [self openPatch:patchName];\n    self.waveTableView.minY = minY;\n    self.waveTableView.maxY = maxY;\n}\n\n@end\n"
  },
  {
    "path": "WaveTables/Classes/WaveTableView.h",
    "content": "//\n//  WaveTableView.h\n//  WaveTables\n//\n//  Created by Rich E on 16/05/11.\n//  Copyright 2011 Richard T. Eakin. All rights reserved.\n//\n\n/**\n * This software is copyrighted by Richard Eakin. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import <UIKit/UIKit.h>\n\n@class PdArray;\n\n@interface WaveTableView : UIView {\n    PdArray *wavetable_;\n    UIColor *borderColor_;\n    UIColor *arrayColor_;\n    \n\tCGPoint lastPoint_;\n    BOOL dragging_;\n    \n    CGFloat minY_;\n    CGFloat maxY_;\n}\n\n@property (nonatomic, retain, readonly) PdArray *wavetable;\n@property (nonatomic, assign) CGFloat minY; // minimum magnitude to draw in the wavetable (default: -1.0)\n@property (nonatomic, assign) CGFloat maxY; // minimum magnitude to draw in the wavetable (default: 1.0)\n\n- (id)initWithWavetable:(PdArray *)pdArray;\n\n@end\n"
  },
  {
    "path": "WaveTables/Classes/WaveTableView.m",
    "content": "//\n//  WaveTableView.m\n//  WaveTables\n//\n//  Created by Rich E on 16/05/11.\n//  Copyright 2011 Richard T. Eakin. All rights reserved.\n//\n\n/**\n * This software is copyrighted by Richard Eakin. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import \"WaveTableView.h\"\n#import \"PdArray.h\"\n#import <QuartzCore/QuartzCore.h>\n\n@interface WaveTableView ()\n\n@property (nonatomic, retain) PdArray *wavetable;\n@property (nonatomic, retain) UIColor *borderColor;\n@property (nonatomic, retain) UIColor *arrayColor;\n@property (nonatomic, assign) CGPoint lastPoint; // the last [x,y] set written to the PdArray *wavetable (used for interpolation) note: x is in magnitude (-1:1) while y is in pixels\n@property (nonatomic, assign) BOOL dragging; // indicates whether the user is currently dragging a finder across the device\n\n- (void)updateTableWithPoint:(CGPoint)point;\n\n@end\n\n@implementation WaveTableView\n\n@synthesize wavetable = wavetable_;\n@synthesize borderColor = borderColor_;\n@synthesize arrayColor = arrayColor_;\n@synthesize lastPoint = lastPoint_;\n@synthesize dragging = dragging_;\n@synthesize minY = minY_;\n@synthesize maxY = maxY_;\n\n#pragma mark -\n#pragma mark Init / Dealloc\n\n- (id)initWithWavetable:(PdArray *)pdArray {\n    self = [super initWithFrame:CGRectZero];\n    if (self) {\n        self.backgroundColor = [UIColor clearColor];\n        self.borderColor = [UIColor darkGrayColor];\n        self.layer.borderColor = self.borderColor.CGColor;\n        self.layer.borderWidth = 1.0;\n        self.arrayColor = [UIColor blackColor];\n        \n        self.wavetable = pdArray;\n\t\tself.lastPoint = CGPointMake(-1.0, 0.0); // set so any new point will not be the same as the last\n        self.minY = -1.0;\n        self.maxY = 1.0;\n    }\n    return self;\n}\n\n#pragma mark -\n#pragma mark Inline Conversion functions\n\nstatic inline CGFloat convertMagToY(CGFloat mag, CGFloat minY, CGFloat maxY, CGFloat viewHeight) {\n\treturn (maxY - mag) * viewHeight / (maxY - minY);\n}\n\nstatic inline CGFloat convertYToMag(CGFloat y, CGFloat minY, CGFloat maxY, CGFloat viewHeight) {\n    return  maxY - y * (maxY - minY) / viewHeight;\n}\n\n#pragma mark -\n#pragma mark Drawing\n\n- (void)drawRect:(CGRect)rect {\n    if (self.wavetable) {\n        CGRect bounds = self.bounds;\n        CGContextRef context = UIGraphicsGetCurrentContext();\n\n        CGContextSetLineWidth(context, 2.0);\n        CGContextSetStrokeColorWithColor(context, [self.arrayColor CGColor]);\n        \n        CGFloat scaleX = bounds.size.width / (self.wavetable.size - 1); // the wavetable spans the entire view, 0 to last index\n\t\tint startIndex = (int)floor(rect.origin.x / scaleX);\n\t\tint endIndex = (int)ceil((rect.origin.x + rect.size.width) / scaleX);\n        CGFloat minY = self.minY;\n        CGFloat maxY = self.maxY;\n\t\tCGFloat y = convertMagToY([self.wavetable localFloatAtIndex:startIndex], minY, maxY, bounds.size.height);\n\t\t\n        CGContextMoveToPoint(context, startIndex * scaleX, y);\n        for (int i = startIndex + 1; i <= endIndex; i++) {\n\t\t\ty = convertMagToY([self.wavetable localFloatAtIndex:i], minY, maxY, bounds.size.height);\n            CGContextAddLineToPoint(context, i * scaleX, y);\n        }\n        CGContextStrokePath(context);\n    }\n}\n\n#pragma mark -\n#pragma mark Touches\n\n- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {\n    self.dragging = NO;\n    UITouch *touch = [touches anyObject];\n    CGPoint point = [touch locationInView:self];\n    [self updateTableWithPoint:point];\n}\n\n- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {\n    self.dragging = YES;\n    UITouch *touch = [touches anyObject];\n    CGPoint point = [touch locationInView:self];\n    if([self hitTest:point withEvent:event] == self) {\n        [self updateTableWithPoint:point];\n    }\n}\n\n- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {\n    self.dragging = NO;\n}\n\n- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {\n    self.dragging = NO;\n}\n\n#pragma mark -\n#pragma mark Private\n\n/* This is where all the calculations are done as for what elements of the\n * PdArray should be changed as well as what rect should be invalidated\n * to redraw the new points (we don't want to redraw the unchanged sections).\n * If the new point has skipped a few indeces and we are in the middle of a\n * touchesMoved, it will draw a line from the last point recorded to the new one.\n * When a series of floats are written (in the interpolation), the write to pd\n * is prolonged until after the for loop and only the local array is updated.\n */\n- (void)updateTableWithPoint:(CGPoint)point {\n\tCGSize viewSize = self.bounds.size;\n\tCGFloat\twaveTableToViewXRatio = (float)(self.wavetable.size - 1)/ viewSize.width;\n    CGFloat mag = convertYToMag(point.y, self.minY, self.maxY, viewSize.height);\n\tCGFloat redrawPadding = ceil(1.0 / waveTableToViewXRatio) * 2.0; // minimal amount to invalidate a rect that still keeps a continious line\n    int index = (int)round(point.x * waveTableToViewXRatio);\n\tint lastIndex = (int)round(self.lastPoint.x * waveTableToViewXRatio);\n\tint numPoints = abs(lastIndex - index);\n\tCGFloat redrawX;\n\n\tif (self.dragging && numPoints > 1) {\n\t\t//draw a line from lastPoint.x to point.x and feed it to self.wavetable\n\t\tfloat incr = (self.lastPoint.y - mag) / (float)(lastIndex - index);\n\t\tint currentIndex = lastIndex;\n\t\tfloat currentMag = self.lastPoint.y;\n\n\t\tif (index > lastIndex) { // going forward\n\t\t\tfor (int i = 0; i < numPoints; i++) {\n\t\t\t\tcurrentIndex++;\n\t\t\t\tcurrentMag += incr;\n                [self.wavetable setLocalFloat:currentMag atIndex:currentIndex];\n\t\t\t}\n\t\t\tredrawX = (self.lastPoint.x < redrawPadding ? 0.0 : self.lastPoint.x - redrawPadding);\n\t\t} else {\n\t\t\tfor (int i = 0; i < numPoints; i++) {\n\t\t\t\tcurrentIndex--;\n\t\t\t\tcurrentMag -= incr;\n                [self.wavetable setLocalFloat:currentMag atIndex:currentIndex];\n\t\t\t}\n\t\t\tredrawX = (point.x < redrawPadding ? 0.0 : point.x - redrawPadding);\n\t\t}\n        [self.wavetable write];\n\t\t[self setNeedsDisplayInRect:CGRectMake(redrawX, 0.0, redrawPadding * (numPoints + 1), viewSize.height)];\n\t\t\n\t} else {\n\t\t// no need to interpolate so just draw one point and store the last calculated value\n\t\t[self.wavetable setFloat:mag atIndex:index];\n\t\t\n\t\tredrawX = (point.x < redrawPadding ? 0.0 : point.x - redrawPadding);\n\t\t[self setNeedsDisplayInRect:CGRectMake(redrawX, 0.0, redrawPadding * 2.0, viewSize.height)];\n\t}\n\t\n    self.lastPoint = CGPointMake(point.x, mag); \n}\n\n@end\n"
  },
  {
    "path": "WaveTables/Classes/WaveTablesAppDelegate.h",
    "content": "//\n//  AppDelegate.h\n//  WaveTables\n//\n//  Created by Rich E on 16/05/11.\n//  Copyright 2011 Richard T. Eakin. All rights reserved.\n//\n\n/**\n * This software is copyrighted by Richard Eakin. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import <UIKit/UIKit.h>\n\n@class RootViewController;\n@class PdAudioController;\n\n@interface WaveTablesAppDelegate : NSObject <UIApplicationDelegate> {\n    UIWindow *window_;\n    RootViewController *viewController_;\n    PdAudioController *audioController_;\n}\n\n@property (nonatomic, retain) UIWindow *window;\n@property (nonatomic, retain) RootViewController *viewController;\n\n@end\n\n"
  },
  {
    "path": "WaveTables/Classes/WaveTablesAppDelegate.m",
    "content": "//\n//  AppDelegate.m\n//  WaveTables\n//\n//  Created by Rich E on 16/05/11.\n//  Copyright 2011 Richard T. Eakin. All rights reserved.\n//\n\n/**\n * This software is copyrighted by Richard Eakin. \n * The following terms (the \"Standard Improved BSD License\") apply to \n * all files associated with the software unless explicitly disclaimed \n * in individual files:\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n * \n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above  \n * copyright notice, this list of conditions and the following \n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * 3. The name of the author may not be used to endorse or promote\n * products derived from this software without specific prior \n * written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#import \"WaveTablesAppDelegate.h\"\n#import \"RootViewController.h\"\n#import \"PdAudioController.h\"\n\n@interface WaveTablesAppDelegate ()\n\n@property (nonatomic, retain) PdAudioController *audioController;\n\n@end\n\n@implementation WaveTablesAppDelegate\n\n@synthesize window = window_;\n@synthesize viewController = viewController_;\n@synthesize audioController = audioController_;\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    \n    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];\n    self.viewController = [[RootViewController alloc] init];\n\n\tself.audioController = [[PdAudioController alloc] init];\n\t[self.audioController configureAmbientWithSampleRate:44100 numberChannels:2 mixingEnabled:YES];\n\t[self.audioController setActive:YES];\n\t[self.audioController print];\n\t\n    [self.window setRootViewController:self.viewController];\n    [self.window makeKeyAndVisible];\n\t\n\treturn YES;\n}\n\n@end\n"
  },
  {
    "path": "WaveTables/OtherSources/Common.h",
    "content": "/*\n *  Common.h\n *  SlidePad\n *\n *  Created by Rich E on 22/12/10.\n *  Copyright 2010 Richard T. Eakin. All rights reserved.\n *\n */\n\n// debug macros from: http://www.cimgf.com/2010/05/02/my-current-prefix-pch-file/\n// I modified DLog to use printf instead of NSLog\n\n#ifdef DEBUG\n#define DLog(nslog_string, ...)\tprintf(\"%s\\t\", __PRETTY_FUNCTION__); printf(\"%s\", [[NSString stringWithFormat:nslog_string, ##__VA_ARGS__] UTF8String]); printf(\"\\n\");\n#define ALog(...) [[NSAssertionHandler currentHandler] handleFailureInFunction:[NSString stringWithCString:__PRETTY_FUNCTION__ encoding:NSUTF8StringEncoding] file:[NSString stringWithCString:__FILE__ encoding:NSUTF8StringEncoding] lineNumber:__LINE__ description:__VA_ARGS__]\n#else\n#define DLog(...) do { } while (0)\n#ifndef NS_BLOCK_ASSERTIONS\n#define NS_BLOCK_ASSERTIONS\n#endif\n#define ALog(...) NSLog(@\"%s %@\", __PRETTY_FUNCTION__, [NSString stringWithFormat:__VA_ARGS__])\n#endif\n\n#define ZAssert(condition, ...) do { if (!(condition)) { ALog(__VA_ARGS__); }} while(0)"
  },
  {
    "path": "WaveTables/OtherSources/Prefix.pch",
    "content": "//\n// Prefix header for all source files of the 'WaveTables' target in the 'WaveTables' project\n//\n\n#ifdef __OBJC__\n    #import <Foundation/Foundation.h>\n    #import <UIKit/UIKit.h>\n#endif\n\n#import \"Common.h\"\n"
  },
  {
    "path": "WaveTables/OtherSources/main.m",
    "content": "//\n//  main.m\n//  WaveTables\n//\n//  Created by Rich E on 16/05/11.\n//  Copyright 2011 Richard T. Eakin. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"WaveTablesAppDelegate.h\"\n\nint main(int argc, char *argv[]) {\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, NSStringFromClass(WaveTablesAppDelegate.class));\n    }\n}\n"
  },
  {
    "path": "WaveTables/ReadMe.txt",
    "content": "WaveTables iOS app\nauthor: Rich Eakin (reakinator@gmail.com)\n\nSample app for libpd for iphone/ipad that demonstrates how to interact\nwith arrays in pd.  We lookup the array based on its name in pd (in the\ncase of this example, the name is prepended with the $0 arg), and then\ncreate and maintain a shadowed array from which we can copy back and forth\nto.  For drawing and manipulating by touch, we mainly write to the local\nshadowed array, and then update pd's array via PdBase.  To manage the local\narray and stay synchronized with pd's, we use the PdArray class.\n\nThe example uses two of the example patches included in the pd tutorials:\n- B01.wavetables.pd (or very close to it): wavetable lookup synthesis\n- I03.resynthesis.pd (copy & pasted): fourier resynthesis\n\nIn both examples, you can modify the array by dragging your finger accross\nthe graphical representatio on your iDevice.\n\nHope this gives some people some good ideas for new and neat synthesizers!\n\nNote also that helper patches are in a subfolder, which helps you to keep\nyour abstractions organized.  If you want to do this in your own projects,\nIt is explained in further detail on the pd-for-ios wiki at:\n\nhttps://github.com/libpd/pd-for-ios/wiki/ios\n\nThe Libpd source and documentation is available at\nhttps://github.com/libpd/libpd\n\nDocumentation specific to the array api is at:\nhttps://github.com/libpd/libpd/wiki/libpd\n\nTODO: multi-touch array editing\n\n--------------- License ------------\n\nThis software is copyrighted by Miller Puckette, Reality Jockey, Peter Brinkmann, \nRichard Eakin and others.  \nThe following terms (the \"Standard Improved BSD License\") apply to all files \nassociated with the software unless explicitly disclaimed in individual files:\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above  \n   copyright notice, this list of conditions and the following \n   disclaimer in the documentation and/or other materials provided\n   with the distribution.\n3. The name of the author may not be used to endorse or promote\n   products derived from this software without specific prior \n   written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR\nBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,   \nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\nIN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\nTHE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "WaveTables/Resources/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>English</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIconFile</key>\n\t<string></string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "WaveTables/Resources/resynthesis.pd",
    "content": "#N canvas 743 321 580 406 12;\n#N canvas 265 48 643 640 fft-analysis 0;\n#X obj 15 164 *~;\n#X obj 14 99 inlet~;\n#X obj 15 218 rfft~;\n#X obj 36 140 tabreceive~ \\$0-hann;\n#X obj 14 353 *~;\n#X obj 56 353 *~;\n#X obj 15 8 block~ 512 4;\n#X text 85 88 The inlet~ now re-uses 3/4 of the previous block \\, along\nwith the 128 new samples.;\n#X text 221 141 window function as before.;\n#X obj 77 225 *~;\n#X obj 16 506 *~;\n#X obj 37 481 tabreceive~ \\$0-hann;\n#X obj 77 283 /~ 768;\n#X text 98 301 divide by 3N/2 (factor of N because rfft and rifft aren't\nnormalized \\, and 3/2 is the gain of overlap-4 reconstruction when\nHann window function is applied twice.);\n#X text 120 216 Just to show we're doing something \\, we multiply each\nchannel by a gain controlled by an array in the main window. The control\nis quartic-scaled for easy editing.;\n#X obj 78 251 *~;\n#X text 92 357 Multiply the (complex-valued) spectrum amplitudes by\nthe (real-valued) gain-and-normalization-factor;\n#X obj 15 399 rifft~;\n#X text 89 396 Real-valued inverse Fourier transform. This uses only\nthe first N/@ points of its inputs \\, supplying the rest by symmerty\n(so it's OK that rfft~ obly puts out those N/2 points.) There's only\none outlet because the output is real-valued.;\n#X obj 16 566 outlet~;\n#X text 88 499 Multiply by the Hann window function again \\, necessary\nbecause the operation we performed might result in a signal that doesn't\ngo smoothly to zero at both ends.;\n#X text 89 566 This repackages the output into 64-sample chunks for\nthe parent window. Since we're operating with an overlap \\, the outlet~\nobject performs an overlapped sum of the blocks computed in this window.\n;\n#X text 129 8 block~ object specifies vector size of 512 and overlap\nfour. This window now computes blocks of 512 samples at intervals of\n128 samples computed on the parent patch.;\n#X obj 76 196 tabreceive~ \\$0-array;\n#X connect 0 0 2 0;\n#X connect 1 0 0 0;\n#X connect 2 0 4 0;\n#X connect 2 1 5 0;\n#X connect 3 0 0 1;\n#X connect 4 0 17 0;\n#X connect 5 0 17 1;\n#X connect 9 0 15 0;\n#X connect 9 0 15 1;\n#X connect 10 0 19 0;\n#X connect 11 0 10 1;\n#X connect 12 0 4 1;\n#X connect 12 0 5 1;\n#X connect 15 0 12 0;\n#X connect 17 0 10 0;\n#X connect 23 0 9 0;\n#X connect 23 0 9 1;\n#X restore 26 289 pd fft-analysis;\n#N canvas 35 66 592 433 Hann-window 0;\n#N canvas 0 22 450 300 (subpatch) 0;\n#X array \\$0-hann 512 float 0;\n#X coords 0 1 511 0 200 120 1;\n#X restore 293 249 graph;\n#X msg 171 263 0;\n#X obj 65 312 osc~;\n#X obj 65 264 samplerate~;\n#X obj 65 335 *~ -0.5;\n#X obj 65 358 +~ 0.5;\n#X obj 57 383 tabwrite~ \\$0-hann;\n#X text 279 241 1;\n#X text 272 359 0;\n#X text 288 372 0;\n#X obj 65 288 / 512;\n#X obj 57 241 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1\n-1;\n#X text 336 221 Hann window;\n#X text 113 310 period 512;\n#X text 90 215 recalculate Hann;\n#X text 125 230 window table;\n#X obj 57 146 loadbang;\n#X msg 79 179 \\; pd dsp 1;\n#X text 40 27 The Hann window is now recomputed on 'loadbang' to make\nthe file smaller (it doesn't have to be saved with the array.);\n#X text 474 375 511;\n#X connect 1 0 2 1;\n#X connect 2 0 4 0;\n#X connect 3 0 10 0;\n#X connect 4 0 5 0;\n#X connect 5 0 6 0;\n#X connect 10 0 2 0;\n#X connect 11 0 3 0;\n#X connect 11 0 1 0;\n#X connect 11 0 6 0;\n#X connect 16 0 11 0;\n#X connect 16 0 17 0;\n#X restore 192 318 pd Hann-window;\n#X obj 26 264 noise~;\n#N canvas 0 22 450 300 (subpatch) 0;\n#X array \\$0-array 256 float 2;\n#X coords 0 1 256 -0.01 512 60 1 0 0;\n#X restore 22 168 graph;\n#X msg 192 264 const 0;\n#X text 138 0 FOURIER RESYNTHESIS;\n#X text 6 218 0;\n#X text 6 159 1;\n#X text 19 228 0;\n#X text 516 231 22K;\n#X text 270 261 <- reset gain;\n#X text 224 148 GAIN;\n#X text 21 24 Using Fourier resynthesis you can take an incoming sound\n\\, operate on its spectrum \\, and hear the result. Here we start with\nwhite noise and apply a frequency-dependent gain \\, which works as\na graphic equalizer. There are N/2 = 256 points \\, each spaced SR/512\nHz. apart (although their frequency ranges overlap). Open the \"fft-analysis\"\npatch to see the workings.;\n#X obj 192 293 s \\$0-array;\n#X obj 192 235 r reset;\n#N canvas 0 22 293 258 output~ 0;\n#X obj 35 201 dac~;\n#X obj 35 167 *~;\n#X obj 88 145 line~;\n#X obj 88 113 pack 0 30;\n#X obj 35 117 inlet~;\n#X obj 88 26 r \\$0-volume;\n#X obj 88 83 dbtorms;\n#X msg 174 55 80;\n#X obj 174 26 loadbang;\n#X connect 1 0 0 0;\n#X connect 1 0 0 1;\n#X connect 2 0 1 1;\n#X connect 3 0 2 0;\n#X connect 4 0 1 0;\n#X connect 5 0 6 0;\n#X connect 6 0 3 0;\n#X connect 7 0 6 0;\n#X connect 8 0 7 0;\n#X restore 26 317 pd output~;\n#X text 368 376 - reakinator@gmail.com;\n#X text 24 361 This patch has been modified (was 103.resynthesis.pd)\nto be part of the libpd/pd-for-ios example WaveTables;\n#X obj 393 316 util/print-array \\$1;\n#X connect 0 0 15 0;\n#X connect 2 0 0 0;\n#X connect 4 0 13 0;\n#X connect 14 0 4 0;\n"
  },
  {
    "path": "WaveTables/Resources/util/for.pd",
    "content": "#N canvas 756 360 387 277 10;\n#X obj 53 30 inlet;\n#X obj 52 102 until;\n#X obj 79 176 sel \\$2;\n#X obj 103 103 \\$1;\n#X obj 52 141 int;\n#X obj 53 237 outlet;\n#X obj 53 55 t b b;\n#X obj 112 208 + 1;\n#X text 122 66 \\$2 - number of iterations;\n#X text 122 45 \\$1 - starting number;\n#X text 122 5 simple forward for loop \\, incrementing by 1;\n#X obj 168 134 inlet;\n#X text 205 136 optional number of iterations;\n#X connect 0 0 6 0;\n#X connect 1 0 4 0;\n#X connect 2 0 1 1;\n#X connect 2 1 4 1;\n#X connect 2 1 7 0;\n#X connect 2 1 5 0;\n#X connect 3 0 4 1;\n#X connect 4 0 2 0;\n#X connect 6 0 1 0;\n#X connect 6 1 3 0;\n#X connect 7 0 4 1;\n#X connect 11 0 2 1;\n"
  },
  {
    "path": "WaveTables/Resources/util/print-array.pd",
    "content": "#N canvas 1475 169 308 351 10;\n#X obj 72 136 t f f;\n#X msg 68 217 \\$1 \\$2;\n#X obj 68 195 pack f f;\n#X obj 72 60 r \\$1-print-table;\n#X obj 100 172 tabread \\$1-array;\n#X obj 59 249 print array-contents;\n#X obj 72 88 for 0 256;\n#X connect 0 0 2 0;\n#X connect 0 1 4 0;\n#X connect 1 0 5 0;\n#X connect 2 0 1 0;\n#X connect 3 0 6 0;\n#X connect 4 0 2 1;\n#X connect 6 0 0 0;\n"
  },
  {
    "path": "WaveTables/Resources/wavetable.pd",
    "content": "#N canvas 604 147 436 280 10;\n#X obj 31 53 mtof;\n#X obj 31 82 tabosc4~ \\$0-array;\n#N canvas 0 22 236 256 output~ 0;\n#X obj 35 171 dac~;\n#X obj 35 137 *~;\n#X obj 88 115 line~;\n#X obj 88 83 pack 0 30;\n#X obj 35 87 inlet~;\n#X obj 88 26 r \\$0-volume;\n#X obj 88 53 dbtorms;\n#X connect 1 0 0 0;\n#X connect 1 0 0 1;\n#X connect 2 0 1 1;\n#X connect 3 0 2 0;\n#X connect 4 0 1 0;\n#X connect 5 0 6 0;\n#X connect 6 0 3 0;\n#X restore 31 107 pd output~;\n#N canvas 110 439 450 300 init 0;\n#X obj 85 207 s \\$0-table-size;\n#X obj 85 182 + 3;\n#X text 114 182 interpolation points;\n#X msg 37 150 256;\n#X obj 37 268 s \\$0-array;\n#X msg 37 241 cosinesum \\$1 0.2 -0.2 0.2 -0.2 0.2 -0.2 0.2 \\, normalize\n;\n#X msg 95 93 60;\n#X obj 37 66 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1\n-1;\n#X obj 37 31 loadbang;\n#X obj 97 31 r reset;\n#X obj 95 117 s \\$0-pitch;\n#X obj 190 114 s \\$0-volume;\n#X msg 190 92 85;\n#X connect 1 0 0 0;\n#X connect 3 0 1 0;\n#X connect 3 0 5 0;\n#X connect 5 0 4 0;\n#X connect 6 0 10 0;\n#X connect 7 0 6 0;\n#X connect 7 0 12 0;\n#X connect 7 0 3 0;\n#X connect 8 0 7 0;\n#X connect 9 0 7 0;\n#X connect 12 0 11 0;\n#X restore 332 87 pd init;\n#X obj 31 22 r \\$0-pitch;\n#X text 96 178 - reakinator@gmail.com;\n#X obj 269 22 table \\$0-array 259;\n#X obj 270 53 util/print-array \\$0;\n#X text 28 165 This patch is part of the libpd/pd-for-ios example WaveTables\n;\n#X connect 0 0 1 0;\n#X connect 1 0 2 0;\n#X connect 4 0 0 0;\n"
  },
  {
    "path": "WaveTables/WaveTables.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t111620FF13B0D5E7000971DC /* PdArray.m in Sources */ = {isa = PBXBuildFile; fileRef = 111620FE13B0D5E7000971DC /* PdArray.m */; };\n\t\t113A44C5138142F9004C88F9 /* libpd-ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 113A44C4138142ED004C88F9 /* libpd-ios.a */; };\n\t\t113A450E13814889004C88F9 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 113A450D13814889004C88F9 /* AudioToolbox.framework */; };\n\t\t113A4576138149DB004C88F9 /* wavetable.pd in Resources */ = {isa = PBXBuildFile; fileRef = 113A4575138149DB004C88F9 /* wavetable.pd */; };\n\t\t113A45D61381528E004C88F9 /* WaveTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 113A45D51381528E004C88F9 /* WaveTableView.m */; };\n\t\t1152A3CD147E15C400DCD675 /* RootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1152A3CC147E15C400DCD675 /* RootViewController.m */; };\n\t\t1152A3CF147E172400DCD675 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1152A3CE147E172400DCD675 /* AVFoundation.framework */; };\n\t\t1176E15115BB71580061A139 /* util in Resources */ = {isa = PBXBuildFile; fileRef = 1176E15015BB71580061A139 /* util */; };\n\t\t11C91B1F12C1AEE00022693B /* WaveTablesAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 11C91B1B12C1AEE00022693B /* WaveTablesAppDelegate.m */; };\n\t\t11C91B2612C1AF010022693B /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 11C91B2212C1AF010022693B /* main.m */; };\n\t\t11D47E50138BE56500D2FEEE /* resynthesis.pd in Resources */ = {isa = PBXBuildFile; fileRef = 11D47E4F138BE56500D2FEEE /* resynthesis.pd */; };\n\t\t1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; };\n\t\t1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; };\n\t\t288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765A40DF7441C002DB57D /* CoreGraphics.framework */; };\n\t\t3063EFAA210A07BF00C8A4A2 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3063EFA9210A07BF00C8A4A2 /* Default-568h@2x.png */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t113A44C3138142ED004C88F9 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 113A44BF138142ED004C88F9 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = D2AAC07E0554694100DB518D;\n\t\t\tremoteInfo = libpd;\n\t\t};\n\t\t113A44C613814305004C88F9 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 113A44BF138142ED004C88F9 /* libpd.xcodeproj */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = D2AAC07D0554694100DB518D;\n\t\t\tremoteInfo = libpd;\n\t\t};\n\t\t1176E13015BB6D910061A139 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 113A44BF138142ED004C88F9 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 119013AB1486450C00086F19;\n\t\t\tremoteInfo = \"libpd-osx\";\n\t\t};\n\t\t3063EFA5210A068800C8A4A2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 113A44BF138142ED004C88F9 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 30C3D36D1FAA200100C67F08;\n\t\t\tremoteInfo = \"libpd-ios-multi\";\n\t\t};\n\t\t3063EFA7210A068800C8A4A2 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 113A44BF138142ED004C88F9 /* libpd.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 30C3D2FA1FAA1FCC00C67F08;\n\t\t\tremoteInfo = \"libpd-osx-multi\";\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t111620FD13B0D5E7000971DC /* PdArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PdArray.h; sourceTree = \"<group>\"; };\n\t\t111620FE13B0D5E7000971DC /* PdArray.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PdArray.m; sourceTree = \"<group>\"; };\n\t\t113A44BF138142ED004C88F9 /* libpd.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = libpd.xcodeproj; path = ../libpd/libpd.xcodeproj; sourceTree = SOURCE_ROOT; };\n\t\t113A450D13814889004C88F9 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };\n\t\t113A4575138149DB004C88F9 /* wavetable.pd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = wavetable.pd; sourceTree = \"<group>\"; };\n\t\t113A45D41381528E004C88F9 /* WaveTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WaveTableView.h; sourceTree = \"<group>\"; };\n\t\t113A45D51381528E004C88F9 /* WaveTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WaveTableView.m; sourceTree = \"<group>\"; };\n\t\t1152A3CB147E15C400DCD675 /* RootViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RootViewController.h; path = Classes/RootViewController.h; sourceTree = SOURCE_ROOT; };\n\t\t1152A3CC147E15C400DCD675 /* RootViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RootViewController.m; path = Classes/RootViewController.m; sourceTree = SOURCE_ROOT; };\n\t\t1152A3CE147E172400DCD675 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };\n\t\t1176E15015BB71580061A139 /* util */ = {isa = PBXFileReference; lastKnownFileType = folder; path = util; sourceTree = \"<group>\"; };\n\t\t11C91B1A12C1AEE00022693B /* WaveTablesAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WaveTablesAppDelegate.h; sourceTree = \"<group>\"; };\n\t\t11C91B1B12C1AEE00022693B /* WaveTablesAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WaveTablesAppDelegate.m; sourceTree = \"<group>\"; };\n\t\t11C91B2212C1AF010022693B /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t11C91B2312C1AF010022693B /* Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Prefix.pch; sourceTree = \"<group>\"; };\n\t\t11C91B2512C1AF010022693B /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t11C91B2C12C1AF9F0022693B /* Common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Common.h; sourceTree = \"<group>\"; };\n\t\t11D47E4F138BE56500D2FEEE /* resynthesis.pd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = resynthesis.pd; sourceTree = \"<group>\"; };\n\t\t1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\t1D6058910D05DD3D006BFB54 /* WaveTables.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WaveTables.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };\n\t\t288765A40DF7441C002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };\n\t\t3063EFA9210A07BF00C8A4A2 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = \"Default-568h@2x.png\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t1D60588F0D05DD3D006BFB54 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1152A3CF147E172400DCD675 /* AVFoundation.framework in Frameworks */,\n\t\t\t\t1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */,\n\t\t\t\t1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */,\n\t\t\t\t288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */,\n\t\t\t\t113A44C5138142F9004C88F9 /* libpd-ios.a in Frameworks */,\n\t\t\t\t113A450E13814889004C88F9 /* AudioToolbox.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t111620FC13B0D5C4000971DC /* Helpers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t111620FD13B0D5E7000971DC /* PdArray.h */,\n\t\t\t\t111620FE13B0D5E7000971DC /* PdArray.m */,\n\t\t\t);\n\t\t\tname = Helpers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t113A44C0138142ED004C88F9 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t113A44C4138142ED004C88F9 /* libpd-ios.a */,\n\t\t\t\t1176E13115BB6D910061A139 /* libpd-osx.a */,\n\t\t\t\t3063EFA6210A068800C8A4A2 /* libpd-ios-multi.a */,\n\t\t\t\t3063EFA8210A068800C8A4A2 /* libpd-osx-multi.a */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t113A45D013815251004C88F9 /* Views */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t113A45D41381528E004C88F9 /* WaveTableView.h */,\n\t\t\t\t113A45D51381528E004C88F9 /* WaveTableView.m */,\n\t\t\t);\n\t\t\tname = Views;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t11C91B1912C1AEE00022693B /* Classes */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t111620FC13B0D5C4000971DC /* Helpers */,\n\t\t\t\t113A45D013815251004C88F9 /* Views */,\n\t\t\t\t11C91B1C12C1AEE00022693B /* Controllers */,\n\t\t\t\t11C91B1A12C1AEE00022693B /* WaveTablesAppDelegate.h */,\n\t\t\t\t11C91B1B12C1AEE00022693B /* WaveTablesAppDelegate.m */,\n\t\t\t);\n\t\t\tpath = Classes;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t11C91B1C12C1AEE00022693B /* Controllers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1152A3CB147E15C400DCD675 /* RootViewController.h */,\n\t\t\t\t1152A3CC147E15C400DCD675 /* RootViewController.m */,\n\t\t\t);\n\t\t\tpath = Controllers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t11C91B2112C1AF010022693B /* OtherSources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t11C91B2212C1AF010022693B /* main.m */,\n\t\t\t\t11C91B2312C1AF010022693B /* Prefix.pch */,\n\t\t\t\t11C91B2C12C1AF9F0022693B /* Common.h */,\n\t\t\t);\n\t\t\tpath = OtherSources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t11C91B2412C1AF010022693B /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1176E15015BB71580061A139 /* util */,\n\t\t\t\t11D47E4F138BE56500D2FEEE /* resynthesis.pd */,\n\t\t\t\t113A4575138149DB004C88F9 /* wavetable.pd */,\n\t\t\t\t11C91B2512C1AF010022693B /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Resources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t19C28FACFE9D520D11CA2CBB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1D6058910D05DD3D006BFB54 /* WaveTables.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3063EFA9210A07BF00C8A4A2 /* Default-568h@2x.png */,\n\t\t\t\t113A44BF138142ED004C88F9 /* libpd.xcodeproj */,\n\t\t\t\t11C91B1912C1AEE00022693B /* Classes */,\n\t\t\t\t11C91B2112C1AF010022693B /* OtherSources */,\n\t\t\t\t11C91B2412C1AF010022693B /* Resources */,\n\t\t\t\t29B97323FDCFA39411CA2CEA /* Frameworks */,\n\t\t\t\t19C28FACFE9D520D11CA2CBB /* Products */,\n\t\t\t);\n\t\t\tname = CustomTemplate;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t29B97323FDCFA39411CA2CEA /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1152A3CE147E172400DCD675 /* AVFoundation.framework */,\n\t\t\t\t1DF5F4DF0D08C38300B7A737 /* UIKit.framework */,\n\t\t\t\t1D30AB110D05D00D00671497 /* Foundation.framework */,\n\t\t\t\t288765A40DF7441C002DB57D /* CoreGraphics.framework */,\n\t\t\t\t113A450D13814889004C88F9 /* AudioToolbox.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t1D6058900D05DD3D006BFB54 /* WaveTables */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget \"WaveTables\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1D60588D0D05DD3D006BFB54 /* Resources */,\n\t\t\t\t1D60588E0D05DD3D006BFB54 /* Sources */,\n\t\t\t\t1D60588F0D05DD3D006BFB54 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t113A44C713814305004C88F9 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = WaveTables;\n\t\t\tproductName = WaveTables;\n\t\t\tproductReference = 1D6058910D05DD3D006BFB54 /* WaveTables.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t29B97313FDCFA39411CA2CEA /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0930;\n\t\t\t};\n\t\t\tbuildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject \"WaveTables\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 1;\n\t\t\tknownRegions = (\n\t\t\t\tEnglish,\n\t\t\t\tJapanese,\n\t\t\t\tFrench,\n\t\t\t\tGerman,\n\t\t\t);\n\t\t\tmainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectReferences = (\n\t\t\t\t{\n\t\t\t\t\tProductGroup = 113A44C0138142ED004C88F9 /* Products */;\n\t\t\t\t\tProjectRef = 113A44BF138142ED004C88F9 /* libpd.xcodeproj */;\n\t\t\t\t},\n\t\t\t);\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t1D6058900D05DD3D006BFB54 /* WaveTables */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXReferenceProxy section */\n\t\t113A44C4138142ED004C88F9 /* libpd-ios.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-ios.a\";\n\t\t\tremoteRef = 113A44C3138142ED004C88F9 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t1176E13115BB6D910061A139 /* libpd-osx.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-osx.a\";\n\t\t\tremoteRef = 1176E13015BB6D910061A139 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t3063EFA6210A068800C8A4A2 /* libpd-ios-multi.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-ios-multi.a\";\n\t\t\tremoteRef = 3063EFA5210A068800C8A4A2 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t3063EFA8210A068800C8A4A2 /* libpd-osx-multi.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = \"libpd-osx-multi.a\";\n\t\t\tremoteRef = 3063EFA7210A068800C8A4A2 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n/* End PBXReferenceProxy section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t1D60588D0D05DD3D006BFB54 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t113A4576138149DB004C88F9 /* wavetable.pd in Resources */,\n\t\t\t\t3063EFAA210A07BF00C8A4A2 /* Default-568h@2x.png in Resources */,\n\t\t\t\t11D47E50138BE56500D2FEEE /* resynthesis.pd in Resources */,\n\t\t\t\t1176E15115BB71580061A139 /* util in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t1D60588E0D05DD3D006BFB54 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t11C91B1F12C1AEE00022693B /* WaveTablesAppDelegate.m in Sources */,\n\t\t\t\t11C91B2612C1AF010022693B /* main.m in Sources */,\n\t\t\t\t113A45D61381528E004C88F9 /* WaveTableView.m in Sources */,\n\t\t\t\t111620FF13B0D5E7000971DC /* PdArray.m in Sources */,\n\t\t\t\t1152A3CD147E15C400DCD675 /* RootViewController.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t113A44C713814305004C88F9 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\tname = libpd;\n\t\t\ttargetProxy = 113A44C613814305004C88F9 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1D6058940D05DD3E006BFB54 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = OtherSources/Prefix.pch;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = \"DEBUG=1\";\n\t\t\t\tGCC_THUMB_SUPPORT = NO;\n\t\t\t\tINFOPLIST_FILE = Resources/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = cc.libpd.WaveTables;\n\t\t\t\tPRODUCT_NAME = WaveTables;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALID_ARCHS = \"$(ARCHS_STANDARD)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1D6058950D05DD3E006BFB54 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = OtherSources/Prefix.pch;\n\t\t\t\tGCC_THUMB_SUPPORT = NO;\n\t\t\t\tINFOPLIST_FILE = Resources/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = cc.libpd.WaveTables;\n\t\t\t\tPRODUCT_NAME = WaveTables;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t\tVALID_ARCHS = \"$(ARCHS_STANDARD)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tC01FCF4F08A954540054247B /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = c99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tHEADER_SEARCH_PATHS = ../libpd/objc;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tOTHER_CFLAGS = \"-DDEBUG\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC01FCF5008A954540054247B /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = c99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tHEADER_SEARCH_PATHS = ../libpd/objc;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tOTHER_CFLAGS = \"-DNS_BLOCK_ASSERTIONS=1\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget \"WaveTables\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1D6058940D05DD3E006BFB54 /* Debug */,\n\t\t\t\t1D6058950D05DD3E006BFB54 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tC01FCF4E08A954540054247B /* Build configuration list for PBXProject \"WaveTables\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC01FCF4F08A954540054247B /* Debug */,\n\t\t\t\tC01FCF5008A954540054247B /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 29B97313FDCFA39411CA2CEA /* Project object */;\n}\n"
  },
  {
    "path": "abl_link/README.md",
    "content": "# abl_link~\nAbleton Link integration for Pd.\n\n## Desktop/Android version\n\nThe version of abl_link~ for desktop and Android has moved to https://github.com/libpd/abl_link.\n\n## iOS version\n\n**This version uses Ableton LinkKit 2.0.0.**\n\nTo see the iOS version of abl_link~ in action, try PdLinkSample in this repository.\n\n### Getting started\n\n* Set up a libpd-based Xcode project as usual.\n* Add the Link library and headers to your project setup as described here: http://ableton.github.io/linkkit/#getting-started\n* Add `abl_link/ios` to your header search path.\n* Add `abl_link/ios/PdLinkAudioUnit.{h,m}` to the sources of your project.\n* Add the Link preference pane to your user interface (e.g., by cargo-culting the relevant bits of the LinkHut sample project).\n* Create a Link instance, a PdLinkAudioUnit instance, and a PdAudioController instance:\n\n```\nABLLinkRef linkRef = ABLLinkNew(120);\nPdLinkAudioUnit pdAudioUnit = [[PdLinkAudioUnit alloc] initWithLinkRef:linkRef];\nPdAudioContoller pd = [[PdAudioController alloc] initWithAudioUnit:pdAudioUnit];\n```\n\n* Create a Pd patch using the desktop version of the Link external, `abl_link~`.\n* Add the patch to your Xcode project.\n\n"
  },
  {
    "path": "abl_link/ios/PdLinkAudioUnit.h",
    "content": "/*\n *  For information on usage and redistribution, and for a DISCLAIMER OF ALL\n *  WARRANTIES, see the file, \"LICENSE.txt,\" in this distribution.\n *\n */\n\n#import \"PdAudioUnit.h\"\n\n#include \"ABLLink.h\"\n\n@interface PdLinkAudioUnit : PdAudioUnit\n\n+ (void)initialize;\n- (id)initWithLinkRef:(ABLLinkRef)linkRef;\n\n@end\n"
  },
  {
    "path": "abl_link/ios/PdLinkAudioUnit.m",
    "content": "/*\n *  For information on usage and redistribution, and for a DISCLAIMER OF ALL\n *  WARRANTIES, see the file, \"LICENSE.txt,\" in this distribution.\n *\n */\n\n#import \"PdLinkAudioUnit.h\"\n#import \"PdBase.h\"\n#include <AVFoundation/AVFoundation.h>\n#include <mach/mach_time.h>\n\n#include \"abl_link.c\"  // Yes, we want to include the .c file here.\n\nstatic int kPdBlockSize;\n\n@interface PdLinkAudioUnit () {\n@private\n    Float64 sampleRate_;\n    int numChannels_;\n    BOOL usesInput_;\n    UInt32 outputLatency_;\n    UInt32 tickTime_;\n    ABLLinkRef linkRef_;\n}\n\n- (void)handleRouteChange:(NSNotification *)notification;\n@end\n\n@implementation PdLinkAudioUnit\n\n#pragma mark - Init / Dealloc\n\n+ (void)initialize {\n    // Make sure to initialize PdBase before we do anything else.\n    kPdBlockSize = [PdBase getBlockSize];\n    abl_link_tilde_setup();\n}\n\n- (void)handleRouteChange:(NSNotification *)notification {\n    NSLog(@\"Route changed.\");\n    // Redoing the configuration will update output latency and related parameters.\n    if ([self configureWithSampleRate:sampleRate_ numberChannels:numChannels_ inputEnabled:usesInput_] != 0) {\n        NSLog(@\"Failed to recreate audio unit on audio route change.\");\n    }\n}\n\n- (id)initWithLinkRef:(ABLLinkRef)linkRef {\n    self = [super init];\n    linkRef_ = linkRef;\n    abl_link_set_link_ref(linkRef);\n    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleRouteChange:) name:AVAudioSessionRouteChangeNotification object:[AVAudioSession sharedInstance]];\n    return self;\n}\n\n#pragma mark - Public Methods\n\n- (void)setActive:(BOOL)active {\n    ABLLinkSetActive(linkRef_, active);\n    [super setActive:active];\n}\n\n- (int)configureWithSampleRate:(Float64)sampleRate numberChannels:(int)numChannels inputEnabled:(BOOL)inputEnabled {\n    sampleRate_ = sampleRate;\n    numChannels_ = numChannels;\n    usesInput_ = inputEnabled;\n    mach_timebase_info_data_t timeInfo;\n    mach_timebase_info(&timeInfo);\n    float secondsToHostTime = (1.0e9 * timeInfo.denom) / (Float64)timeInfo.numer;\n    outputLatency_ = (UInt32)(secondsToHostTime * [AVAudioSession sharedInstance].outputLatency);\n    tickTime_ = (UInt32)(secondsToHostTime * kPdBlockSize / sampleRate);\n    return [super configureWithSampleRate:sampleRate numberChannels:numChannels inputEnabled:inputEnabled];\n}\n\n#pragma mark - AURenderCallback\n\nstatic const AudioUnitElement kInputElement = 1;\n\nstatic OSStatus AudioRenderCallback(void *inRefCon,\n                                    AudioUnitRenderActionFlags *ioActionFlags,\n                                    const AudioTimeStamp *inTimeStamp,\n                                    UInt32 inBusNumber,\n                                    UInt32 inNumberFrames,\n                                    AudioBufferList *ioData) {\n    PdLinkAudioUnit *pdAudioUnit = (__bridge PdLinkAudioUnit *)inRefCon;\n    Float32 *auBuffer = (Float32 *)ioData->mBuffers[0].mData;\n    if (pdAudioUnit->usesInput_) {\n        AudioUnitRender([pdAudioUnit audioUnit], ioActionFlags, inTimeStamp, kInputElement, inNumberFrames, ioData);\n    }\n    \n    ABLLinkTimelineRef timeline = ABLLinkCaptureAudioTimeline(pdAudioUnit->linkRef_);\n    abl_link_set_timeline(timeline);\n    int ticks = inNumberFrames / kPdBlockSize;\n    UInt64 hostTimeAfterTick = inTimeStamp->mHostTime + pdAudioUnit->outputLatency_;\n    int bufSizePerTick = kPdBlockSize * pdAudioUnit->numChannels_;\n    for (int i = 0; i < ticks; i++) {\n        hostTimeAfterTick += pdAudioUnit->tickTime_;\n        abl_link_set_time(hostTimeAfterTick);\n        [PdBase processFloatWithInputBuffer:auBuffer outputBuffer:auBuffer ticks:1];\n        auBuffer += bufSizePerTick;\n    }\n    ABLLinkCommitAudioTimeline(pdAudioUnit->linkRef_, timeline);\n\n    return noErr;\n}\n\n- (AURenderCallback)renderCallback {\n    return AudioRenderCallback;\n}\n\n@end\n"
  },
  {
    "path": "abl_link/ios/abl_link.c",
    "content": "/*\n *  For information on usage and redistribution, and for a DISCLAIMER OF ALL\n *  WARRANTIES, see the file, \"LICENSE.txt,\" in this distribution.\n *\n */\n\n#include \"abl_link.h\"\n\n#include \"m_pd.h\"\n#include <math.h>\n#include <stdio.h>\n#include <string.h>\n\nstatic ABLLinkRef libpdLinkRef = NULL;\nstatic ABLLinkTimelineRef libpd_timeline;\nstatic uint64_t libpd_curr_time;\n\nvoid abl_link_set_link_ref(ABLLinkRef ref) {\n    libpdLinkRef = ref;\n}\n\nvoid abl_link_set_timeline(ABLLinkTimelineRef timeline) {\n    libpd_timeline = timeline;\n}\n\nvoid abl_link_set_time(uint64_t curr_time) {\n    libpd_curr_time = curr_time;\n}\n\nstatic t_class *abl_link_tilde_class;\n\ntypedef struct _abl_link_tilde {\n    t_object obj;\n    t_clock *clock;\n    t_outlet *step_out;\n    t_outlet *phase_out;\n    t_outlet *beat_out;\n    t_outlet *tempo_out;\n    double steps_per_beat;\n    double prev_beat_time;\n    double quantum;\n    double tempo;\n    int reset_flag;\n} t_abl_link_tilde;\n\nstatic t_int *abl_link_tilde_perform(t_int *w) {\n    t_abl_link_tilde *x = (t_abl_link_tilde *)(w[1]);\n    clock_delay(x->clock, 0);\n    return (w+2);\n}\n\nstatic void abl_link_tilde_dsp(t_abl_link_tilde *x, t_signal **sp) {\n    dsp_add(abl_link_tilde_perform, 1, x);\n}\n\nstatic void abl_link_tilde_tick(t_abl_link_tilde *x) {\n    if (x->tempo < 0) {\n        ABLLinkSetTempo(libpd_timeline, -x->tempo, libpd_curr_time);\n    }\n    double prev_tempo = x->tempo;\n    x->tempo = ABLLinkGetTempo(libpd_timeline);\n    if (prev_tempo != x->tempo) {\n        outlet_float(x->tempo_out, x->tempo);\n    }\n    double curr_beat_time;\n    if (x->reset_flag) {\n        ABLLinkRequestBeatAtTime(libpd_timeline, x->prev_beat_time, libpd_curr_time, x->quantum);\n        curr_beat_time = ABLLinkBeatAtTime(libpd_timeline, libpd_curr_time, x->quantum);\n        x->prev_beat_time = curr_beat_time - 1e-6;\n        x->reset_flag = 0;\n    } else {\n        curr_beat_time = ABLLinkBeatAtTime(libpd_timeline, libpd_curr_time, x->quantum);\n    }\n    outlet_float(x->beat_out, curr_beat_time);\n    double curr_phase = fmod(curr_beat_time, x->quantum);\n    outlet_float(x->phase_out, curr_phase);\n    if (curr_beat_time > x->prev_beat_time) {\n        double prev_phase = fmod(x->prev_beat_time, x->quantum);\n        double prev_step = floor(prev_phase * x->steps_per_beat);\n        double curr_step = floor(curr_phase * x->steps_per_beat);\n        if (prev_phase - curr_phase > x->quantum / 2 || prev_step != curr_step) {\n            outlet_float(x->step_out, curr_step);\n        }\n    }\n    x->prev_beat_time = curr_beat_time;\n}\n\nstatic void abl_link_tilde_enable(t_abl_link_tilde *x, t_floatarg enabled) {\n    post(\"Warning: The iOS version of abl_link~ does not have a connect method. \"\n         \"Please connect using the Link GUI component.\");\n}\n\nstatic void abl_link_tilde_set_tempo(t_abl_link_tilde *x, t_floatarg bpm) {\n    x->tempo = -bpm;  // Negative values signal tempo changes.\n}\n\nstatic void abl_link_tilde_set_resolution(t_abl_link_tilde *x, t_floatarg steps_per_beat) {\n    x->steps_per_beat = steps_per_beat;\n}\n\nstatic void abl_link_tilde_reset(t_abl_link_tilde *x, t_symbol *s, int argc, t_atom *argv) {\n    x->prev_beat_time = 0;\n    x->reset_flag = 1;\n    switch (argc) {\n        default:\n            post(\"abl_link~ reset: Unexpected number of parameters: %d\", argc);\n        case 2:\n            x->quantum = atom_getfloat(argv + 1);\n        case 1:\n            x->prev_beat_time = atom_getfloat(argv);\n        case 0:\n            break;\n    }\n}\n\nstatic void *abl_link_tilde_new(t_symbol *s, int argc, t_atom *argv) {\n    t_abl_link_tilde *x = (t_abl_link_tilde *)pd_new(abl_link_tilde_class);\n    x->clock = clock_new(x, (t_method)abl_link_tilde_tick);\n    x->step_out = outlet_new(&x->obj, &s_float);\n    x->phase_out = outlet_new(&x->obj, &s_float);\n    x->beat_out = outlet_new(&x->obj, &s_float);\n    x->tempo_out = outlet_new(&x->obj, &s_float);\n    x->steps_per_beat = 1;\n    x->prev_beat_time = 0;\n    x->quantum = 4;\n    x->tempo = 0;\n    x->reset_flag = 1;\n    switch (argc) {\n        default:\n            post(\"abl_link~: Unexpected number of creation args: %d\", argc);\n        case 4:\n            if (ABLLinkIsConnected(libpdLinkRef)) {\n                post(\"abl_link~: Ignoring tempo parameter because Link is connected.\");\n            } else {\n                x->tempo = -atom_getfloat(argv + 3);  // Negative values signal tempo changes.\n            }\n        case 3:\n            x->quantum = atom_getfloat(argv + 2);\n        case 2:\n            x->prev_beat_time = atom_getfloat(argv + 1);\n        case 1:\n            x->steps_per_beat = atom_getfloat(argv);\n        case 0:\n            break;\n    }\n    return x;\n}\n\nstatic void abl_link_tilde_free(t_abl_link_tilde *x) {\n    clock_free(x->clock);\n}\n\nvoid abl_link_tilde_setup(void) {\n    abl_link_tilde_class = class_new(gensym(\"abl_link~\"),\n                                     (t_newmethod)abl_link_tilde_new,\n                                     (t_method)abl_link_tilde_free,\n                                     sizeof(t_abl_link_tilde), CLASS_DEFAULT, A_GIMME, 0);\n    class_addmethod(abl_link_tilde_class, (t_method)abl_link_tilde_dsp,\n                    gensym(\"dsp\"), 0);\n    class_addmethod(abl_link_tilde_class, (t_method)abl_link_tilde_enable,\n                    gensym(\"connect\"), A_DEFFLOAT, 0);\n    class_addmethod(abl_link_tilde_class, (t_method)abl_link_tilde_set_tempo,\n                    gensym(\"tempo\"), A_DEFFLOAT, 0);\n    class_addmethod(abl_link_tilde_class, (t_method)abl_link_tilde_set_resolution,\n                    gensym(\"resolution\"), A_DEFFLOAT, 0);\n    class_addmethod(abl_link_tilde_class, (t_method)abl_link_tilde_reset,\n                    gensym(\"reset\"), A_GIMME, 0);\n}\n\n"
  },
  {
    "path": "abl_link/ios/abl_link.h",
    "content": "/*\n *  For information on usage and redistribution, and for a DISCLAIMER OF ALL\n *  WARRANTIES, see the file, \"LICENSE.txt,\" in this distribution.\n *\n */\n\n#ifndef __ABL_LINK_H__\n#define __ABL_LINK_H__\n\n#include \"ABLLink.h\"\n\nvoid abl_link_tilde_setup(void);\nvoid abl_link_set_link_ref(ABLLinkRef ref);\nvoid abl_link_set_time(uint64_t curr_time);\n\n#endif\n"
  }
]