aboutsummaryrefslogtreecommitdiffstats
path: root/ofxMaxim/examples/iOS
diff options
context:
space:
mode:
Diffstat (limited to 'ofxMaxim/examples/iOS')
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/bin/data/Default.pngbin0 -> 5518 bytes
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/bin/data/Icon.pngbin0 -> 1040 bytes
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/bin/data/beat2.wavbin0 -> 211140 bytes
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/bin/data/remoteatmos.wavbin0 -> 2798636 bytes
-rwxr-xr-xofxMaxim/examples/iOS/ofxMaximiPhone0062Example/iPhoneEmptyExample.xcodeproj/project.pbxproj909
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/iPhone_Prefix.pch8
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/install.xml35
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/fft.cpp608
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/fft.h80
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maxiFFT.cpp290
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maxiFFT.h128
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maxiGrains.cpp6
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maxiGrains.h443
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maxiMFCC.cpp78
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maxiMFCC.h204
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maximilian.cpp1028
-rwxr-xr-xofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maximilian.h366
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/src/ofxMaxim.h55
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxiphone-Info.plist36
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/src/main.mm8
-rwxr-xr-xofxMaxim/examples/iOS/ofxMaximiPhone0062Example/src/testApp.h42
-rwxr-xr-xofxMaxim/examples/iOS/ofxMaximiPhone0062Example/src/testApp.mm116
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone007Example/Project.xcconfig14
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone007Example/bin/data/Default.pngbin0 -> 5518 bytes
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone007Example/bin/data/Icon.pngbin0 -> 1040 bytes
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone007Example/bin/data/beat2.wavbin0 -> 211140 bytes
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone007Example/bin/data/remoteatmos.wavbin0 -> 2798636 bytes
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone007Example/emptyExample.xcodeproj/project.pbxproj485
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone007Example/emptyExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata7
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone007Example/emptyExample.xcodeproj/project.xcworkspace/xcuserdata/mick.xcuserdatad/UserInterfaceState.xcuserstatebin0 -> 44431 bytes
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone007Example/emptyExample.xcodeproj/xcuserdata/mick.xcuserdatad/xcschemes/emptyExample.xcscheme84
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone007Example/emptyExample.xcodeproj/xcuserdata/mick.xcuserdatad/xcschemes/xcschememanagement.plist22
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone007Example/iPhone_Prefix.pch8
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone007Example/ofxiphone-Info.plist36
-rw-r--r--ofxMaxim/examples/iOS/ofxMaximiPhone007Example/src/main.mm8
-rwxr-xr-xofxMaxim/examples/iOS/ofxMaximiPhone007Example/src/testApp.h43
-rwxr-xr-xofxMaxim/examples/iOS/ofxMaximiPhone007Example/src/testApp.mm121
37 files changed, 5268 insertions, 0 deletions
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/bin/data/Default.png b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/bin/data/Default.png
new file mode 100644
index 0000000..e782497
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/bin/data/Default.png
Binary files differ
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/bin/data/Icon.png b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/bin/data/Icon.png
new file mode 100644
index 0000000..2d926c8
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/bin/data/Icon.png
Binary files differ
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/bin/data/beat2.wav b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/bin/data/beat2.wav
new file mode 100644
index 0000000..c71cee6
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/bin/data/beat2.wav
Binary files differ
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/bin/data/remoteatmos.wav b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/bin/data/remoteatmos.wav
new file mode 100644
index 0000000..87e3cdf
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/bin/data/remoteatmos.wav
Binary files differ
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/iPhoneEmptyExample.xcodeproj/project.pbxproj b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/iPhoneEmptyExample.xcodeproj/project.pbxproj
new file mode 100755
index 0000000..dd49a5e
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/iPhoneEmptyExample.xcodeproj/project.pbxproj
@@ -0,0 +1,909 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 45;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 00EF442D12BAD6C000FF6AA4 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00EF442C12BAD6C000FF6AA4 /* Accelerate.framework */; };
+ 00FA16C112B98DFC000A9A42 /* install.xml in Resources */ = {isa = PBXBuildFile; fileRef = 00FA16B712B98DFC000A9A42 /* install.xml */; };
+ 00FA16C412B98DFC000A9A42 /* maximilian.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00FA16BD12B98DFC000A9A42 /* maximilian.cpp */; };
+ 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; };
+ 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; };
+ 288765FD0DF74451002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765FC0DF74451002DB57D /* CoreGraphics.framework */; };
+ 5326AEA810A23A0500278DE6 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5326AEA710A23A0500278DE6 /* CoreLocation.framework */; };
+ 53F323EB10A20EDB00E0DAE4 /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53F323EA10A20EDB00E0DAE4 /* OpenAL.framework */; };
+ 5E25689710ED26CC00A9501C /* CppUnit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E25687010ED26CC00A9501C /* CppUnit.a */; };
+ 5E25689810ED26CC00A9501C /* PocoFoundation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E25687110ED26CC00A9501C /* PocoFoundation.a */; };
+ 5E25689910ED26CC00A9501C /* PocoNet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E25687210ED26CC00A9501C /* PocoNet.a */; };
+ 5E25689A10ED26CC00A9501C /* PocoUtil.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E25687310ED26CC00A9501C /* PocoUtil.a */; };
+ 5E25689B10ED26CC00A9501C /* PocoXML.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E25687410ED26CC00A9501C /* PocoXML.a */; };
+ 5E2568A410ED26CD00A9501C /* CppUnit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E25688010ED26CC00A9501C /* CppUnit.a */; };
+ 5E2568A510ED26CD00A9501C /* PocoFoundation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E25688110ED26CC00A9501C /* PocoFoundation.a */; };
+ 5E2568A610ED26CD00A9501C /* PocoNet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E25688210ED26CC00A9501C /* PocoNet.a */; };
+ 5E2568A710ED26CD00A9501C /* PocoUtil.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E25688310ED26CC00A9501C /* PocoUtil.a */; };
+ 5E2568A810ED26CD00A9501C /* PocoXML.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E25688410ED26CC00A9501C /* PocoXML.a */; };
+ BB16EBD20F2B2A9500518274 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB16EBD10F2B2A9500518274 /* OpenGLES.framework */; };
+ BB16EBD90F2B2AB500518274 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB16EBD80F2B2AB500518274 /* QuartzCore.framework */; };
+ BB24DD8F10DA77E000E9C588 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = BB24DD8C10DA77E000E9C588 /* Default.png */; };
+ BB24DD9010DA77E000E9C588 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = BB24DD8D10DA77E000E9C588 /* Icon.png */; };
+ BB24DDCA10DA781C00E9C588 /* ofxiphone-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB24DDC910DA781C00E9C588 /* ofxiphone-Info.plist */; };
+ BBE5EAB80F49AD8400F28951 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBE5EAB70F49AD8400F28951 /* AudioToolbox.framework */; };
+ E434BF6512477ED500452519 /* freeimage-iphone.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E434BF6412477ED500452519 /* freeimage-iphone.a */; };
+ E434BF6812477EDE00452519 /* freeimage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E434BF6712477EDE00452519 /* freeimage.a */; };
+ E434BF7312477FBA00452519 /* freetype-iphone.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E434BF7212477FBA00452519 /* freetype-iphone.a */; };
+ E496D5B11252C8210098A2B3 /* glu-iphone.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E496D5AF1252C8210098A2B3 /* glu-iphone.a */; };
+ E496D5B21252C8210098A2B3 /* glu.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E496D5B01252C8210098A2B3 /* glu.a */; };
+ E49BCC7A12554CD6009F19D0 /* libofxiPhone_macosx_Debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E49BCC5012554B6A009F19D0 /* libofxiPhone_macosx_Debug.a */; };
+ E4A8229F12560AFE002F86A2 /* freetype.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4A8229E12560AFE002F86A2 /* freetype.a */; };
+ E4A823A412561BE3002F86A2 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4A823A312561BE3002F86A2 /* CoreGraphics.framework */; };
+ E4D8936E11527B74007E1F53 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = E4D8936B11527B74007E1F53 /* main.mm */; };
+ E4D8936F11527B74007E1F53 /* testApp.mm in Sources */ = {isa = PBXBuildFile; fileRef = E4D8936D11527B74007E1F53 /* testApp.mm */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ E49BCC4F12554B6A009F19D0 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = E49BCC4812554B69009F19D0 /* iPhone+OF Lib.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = BB24DED610DA7A3F00E9C588;
+ remoteInfo = "iPhone+OF Static Library";
+ };
+ E49BCC6D12554C6C009F19D0 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = E49BCC4812554B69009F19D0 /* iPhone+OF Lib.xcodeproj */;
+ proxyType = 1;
+ remoteGlobalIDString = BB24DE5C10DA7A3F00E9C588;
+ remoteInfo = "iPhone+OF Static Library";
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 00EF442C12BAD6C000FF6AA4 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = /System/Library/Frameworks/Accelerate.framework; sourceTree = "<absolute>"; };
+ 00FA16B712B98DFC000A9A42 /* install.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = install.xml; sourceTree = "<group>"; };
+ 00FA16BD12B98DFC000A9A42 /* maximilian.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = maximilian.cpp; sourceTree = "<group>"; };
+ 00FA16BE12B98DFC000A9A42 /* maximilian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = maximilian.h; sourceTree = "<group>"; };
+ 00FA16C012B98DFC000A9A42 /* ofxMaxim.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxMaxim.h; sourceTree = "<group>"; };
+ 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ 1D6058910D05DD3D006BFB54 /* emptyExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = emptyExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+ 288765FC0DF74451002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+ 32CA4F630368D1EE00C91783 /* iPhone_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iPhone_Prefix.pch; sourceTree = "<group>"; };
+ 5326AEA710A23A0500278DE6 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; };
+ 53F323EA10A20EDB00E0DAE4 /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = System/Library/Frameworks/OpenAL.framework; sourceTree = SDKROOT; };
+ 5E25687010ED26CC00A9501C /* CppUnit.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = CppUnit.a; path = ../../../libs/poco/lib/iphone/CppUnit.a; sourceTree = SOURCE_ROOT; };
+ 5E25687110ED26CC00A9501C /* PocoFoundation.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = PocoFoundation.a; path = ../../../libs/poco/lib/iphone/PocoFoundation.a; sourceTree = SOURCE_ROOT; };
+ 5E25687210ED26CC00A9501C /* PocoNet.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = PocoNet.a; path = ../../../libs/poco/lib/iphone/PocoNet.a; sourceTree = SOURCE_ROOT; };
+ 5E25687310ED26CC00A9501C /* PocoUtil.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = PocoUtil.a; path = ../../../libs/poco/lib/iphone/PocoUtil.a; sourceTree = SOURCE_ROOT; };
+ 5E25687410ED26CC00A9501C /* PocoXML.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = PocoXML.a; path = ../../../libs/poco/lib/iphone/PocoXML.a; sourceTree = SOURCE_ROOT; };
+ 5E25688010ED26CC00A9501C /* CppUnit.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = CppUnit.a; path = ../../../libs/poco/lib/osx/CppUnit.a; sourceTree = SOURCE_ROOT; };
+ 5E25688110ED26CC00A9501C /* PocoFoundation.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = PocoFoundation.a; path = ../../../libs/poco/lib/osx/PocoFoundation.a; sourceTree = SOURCE_ROOT; };
+ 5E25688210ED26CC00A9501C /* PocoNet.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = PocoNet.a; path = ../../../libs/poco/lib/osx/PocoNet.a; sourceTree = SOURCE_ROOT; };
+ 5E25688310ED26CC00A9501C /* PocoUtil.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = PocoUtil.a; path = ../../../libs/poco/lib/osx/PocoUtil.a; sourceTree = SOURCE_ROOT; };
+ 5E25688410ED26CC00A9501C /* PocoXML.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = PocoXML.a; path = ../../../libs/poco/lib/osx/PocoXML.a; sourceTree = SOURCE_ROOT; };
+ BB16EBD10F2B2A9500518274 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; };
+ BB16EBD80F2B2AB500518274 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
+ BB24DD8C10DA77E000E9C588 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = "<group>"; };
+ BB24DD8D10DA77E000E9C588 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon.png; sourceTree = "<group>"; };
+ BB24DDC910DA781C00E9C588 /* ofxiphone-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "ofxiphone-Info.plist"; sourceTree = "<group>"; };
+ BB24DDCF10DA784F00E9C588 /* FreeImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FreeImage.h; sourceTree = "<group>"; };
+ BB24DDE210DA785000E9C588 /* ftconfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftconfig.h; sourceTree = "<group>"; };
+ BB24DDE310DA785000E9C588 /* ftheader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftheader.h; sourceTree = "<group>"; };
+ BB24DDE410DA785000E9C588 /* ftmodule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftmodule.h; sourceTree = "<group>"; };
+ BB24DDE510DA785000E9C588 /* ftoption.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftoption.h; sourceTree = "<group>"; };
+ BB24DDE610DA785000E9C588 /* ftstdlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftstdlib.h; sourceTree = "<group>"; };
+ BB24DDE710DA785000E9C588 /* freetype.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = freetype.h; sourceTree = "<group>"; };
+ BB24DDE810DA785000E9C588 /* ftbbox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftbbox.h; sourceTree = "<group>"; };
+ BB24DDE910DA785000E9C588 /* ftbdf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftbdf.h; sourceTree = "<group>"; };
+ BB24DDEA10DA785000E9C588 /* ftbitmap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftbitmap.h; sourceTree = "<group>"; };
+ BB24DDEB10DA785000E9C588 /* ftcache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftcache.h; sourceTree = "<group>"; };
+ BB24DDEC10DA785000E9C588 /* ftchapters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftchapters.h; sourceTree = "<group>"; };
+ BB24DDED10DA785000E9C588 /* fterrdef.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fterrdef.h; sourceTree = "<group>"; };
+ BB24DDEE10DA785000E9C588 /* fterrors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fterrors.h; sourceTree = "<group>"; };
+ BB24DDEF10DA785000E9C588 /* ftgasp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftgasp.h; sourceTree = "<group>"; };
+ BB24DDF010DA785000E9C588 /* ftglyph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftglyph.h; sourceTree = "<group>"; };
+ BB24DDF110DA785000E9C588 /* ftgxval.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftgxval.h; sourceTree = "<group>"; };
+ BB24DDF210DA785000E9C588 /* ftgzip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftgzip.h; sourceTree = "<group>"; };
+ BB24DDF310DA785000E9C588 /* ftimage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftimage.h; sourceTree = "<group>"; };
+ BB24DDF410DA785000E9C588 /* ftincrem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftincrem.h; sourceTree = "<group>"; };
+ BB24DDF510DA785000E9C588 /* ftlcdfil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftlcdfil.h; sourceTree = "<group>"; };
+ BB24DDF610DA785000E9C588 /* ftlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftlist.h; sourceTree = "<group>"; };
+ BB24DDF710DA785000E9C588 /* ftlzw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftlzw.h; sourceTree = "<group>"; };
+ BB24DDF810DA785000E9C588 /* ftmac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftmac.h; sourceTree = "<group>"; };
+ BB24DDF910DA785000E9C588 /* ftmm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftmm.h; sourceTree = "<group>"; };
+ BB24DDFA10DA785000E9C588 /* ftmodapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftmodapi.h; sourceTree = "<group>"; };
+ BB24DDFB10DA785000E9C588 /* ftmoderr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftmoderr.h; sourceTree = "<group>"; };
+ BB24DDFC10DA785000E9C588 /* ftotval.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftotval.h; sourceTree = "<group>"; };
+ BB24DDFD10DA785000E9C588 /* ftoutln.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftoutln.h; sourceTree = "<group>"; };
+ BB24DDFE10DA785000E9C588 /* ftpfr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftpfr.h; sourceTree = "<group>"; };
+ BB24DDFF10DA785000E9C588 /* ftrender.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftrender.h; sourceTree = "<group>"; };
+ BB24DE0010DA785000E9C588 /* ftsizes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftsizes.h; sourceTree = "<group>"; };
+ BB24DE0110DA785000E9C588 /* ftsnames.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftsnames.h; sourceTree = "<group>"; };
+ BB24DE0210DA785000E9C588 /* ftstroke.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftstroke.h; sourceTree = "<group>"; };
+ BB24DE0310DA785000E9C588 /* ftsynth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftsynth.h; sourceTree = "<group>"; };
+ BB24DE0410DA785000E9C588 /* ftsystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftsystem.h; sourceTree = "<group>"; };
+ BB24DE0510DA785000E9C588 /* fttrigon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fttrigon.h; sourceTree = "<group>"; };
+ BB24DE0610DA785000E9C588 /* fttypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fttypes.h; sourceTree = "<group>"; };
+ BB24DE0710DA785000E9C588 /* ftwinfnt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftwinfnt.h; sourceTree = "<group>"; };
+ BB24DE0810DA785000E9C588 /* ftxf86.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftxf86.h; sourceTree = "<group>"; };
+ BB24DE0910DA785000E9C588 /* t1tables.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = t1tables.h; sourceTree = "<group>"; };
+ BB24DE0A10DA785000E9C588 /* ttnameid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ttnameid.h; sourceTree = "<group>"; };
+ BB24DE0B10DA785000E9C588 /* tttables.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tttables.h; sourceTree = "<group>"; };
+ BB24DE0C10DA785000E9C588 /* tttags.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tttags.h; sourceTree = "<group>"; };
+ BB24DE0D10DA785000E9C588 /* ttunpat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ttunpat.h; sourceTree = "<group>"; };
+ BB24DE0E10DA785000E9C588 /* ft2build.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ft2build.h; sourceTree = "<group>"; };
+ BBE5EAB70F49AD8400F28951 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
+ DA7851271105C039007EFC90 /* glu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = glu.h; sourceTree = "<group>"; };
+ DA7851281105C039007EFC90 /* gluos.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gluos.h; sourceTree = "<group>"; };
+ E434BF6412477ED500452519 /* freeimage-iphone.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "freeimage-iphone.a"; path = "../../../libs/FreeImage/lib/iphone/freeimage-iphone.a"; sourceTree = SOURCE_ROOT; };
+ E434BF6712477EDE00452519 /* freeimage.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = freeimage.a; path = ../../../libs/FreeImage/lib/osx/freeimage.a; sourceTree = SOURCE_ROOT; };
+ E434BF7212477FBA00452519 /* freetype-iphone.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "freetype-iphone.a"; path = "../../../libs/freetype/lib/iphone/freetype-iphone.a"; sourceTree = SOURCE_ROOT; };
+ E496D5AF1252C8210098A2B3 /* glu-iphone.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "glu-iphone.a"; path = "../../../libs/glu/lib/iphone/glu-iphone.a"; sourceTree = SOURCE_ROOT; };
+ E496D5B01252C8210098A2B3 /* glu.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = glu.a; path = ../../../libs/glu/lib/iphone/glu.a; sourceTree = SOURCE_ROOT; };
+ E49BCC4812554B69009F19D0 /* iPhone+OF Lib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "iPhone+OF Lib.xcodeproj"; path = "../../../libs/openFrameworksCompiled/project/iphone/iPhone+OF Lib.xcodeproj"; sourceTree = SOURCE_ROOT; };
+ E4A8229E12560AFE002F86A2 /* freetype.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = freetype.a; path = ../../../libs/freetype/lib/osx/freetype.a; sourceTree = SOURCE_ROOT; };
+ E4A823A312561BE3002F86A2 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+ E4D8936B11527B74007E1F53 /* main.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = main.mm; path = src/main.mm; sourceTree = SOURCE_ROOT; };
+ E4D8936C11527B74007E1F53 /* testApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = testApp.h; path = src/testApp.h; sourceTree = SOURCE_ROOT; };
+ E4D8936D11527B74007E1F53 /* testApp.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = testApp.mm; path = src/testApp.mm; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 1D60588F0D05DD3D006BFB54 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ E49BCC7A12554CD6009F19D0 /* libofxiPhone_macosx_Debug.a in Frameworks */,
+ 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */,
+ 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */,
+ 288765FD0DF74451002DB57D /* CoreGraphics.framework in Frameworks */,
+ BB16EBD20F2B2A9500518274 /* OpenGLES.framework in Frameworks */,
+ BB16EBD90F2B2AB500518274 /* QuartzCore.framework in Frameworks */,
+ BBE5EAB80F49AD8400F28951 /* AudioToolbox.framework in Frameworks */,
+ 53F323EB10A20EDB00E0DAE4 /* OpenAL.framework in Frameworks */,
+ 5326AEA810A23A0500278DE6 /* CoreLocation.framework in Frameworks */,
+ 5E25689710ED26CC00A9501C /* CppUnit.a in Frameworks */,
+ 5E25689810ED26CC00A9501C /* PocoFoundation.a in Frameworks */,
+ 5E25689910ED26CC00A9501C /* PocoNet.a in Frameworks */,
+ 5E25689A10ED26CC00A9501C /* PocoUtil.a in Frameworks */,
+ 5E25689B10ED26CC00A9501C /* PocoXML.a in Frameworks */,
+ 5E2568A410ED26CD00A9501C /* CppUnit.a in Frameworks */,
+ 5E2568A510ED26CD00A9501C /* PocoFoundation.a in Frameworks */,
+ 5E2568A610ED26CD00A9501C /* PocoNet.a in Frameworks */,
+ 5E2568A710ED26CD00A9501C /* PocoUtil.a in Frameworks */,
+ 5E2568A810ED26CD00A9501C /* PocoXML.a in Frameworks */,
+ E434BF6512477ED500452519 /* freeimage-iphone.a in Frameworks */,
+ E434BF6812477EDE00452519 /* freeimage.a in Frameworks */,
+ E434BF7312477FBA00452519 /* freetype-iphone.a in Frameworks */,
+ E496D5B11252C8210098A2B3 /* glu-iphone.a in Frameworks */,
+ E496D5B21252C8210098A2B3 /* glu.a in Frameworks */,
+ E4A8229F12560AFE002F86A2 /* freetype.a in Frameworks */,
+ E4A823A412561BE3002F86A2 /* CoreGraphics.framework in Frameworks */,
+ 00EF442D12BAD6C000FF6AA4 /* Accelerate.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 00FA16B612B98DFC000A9A42 /* ofxMaxim */ = {
+ isa = PBXGroup;
+ children = (
+ 00FA16B712B98DFC000A9A42 /* install.xml */,
+ 00FA16B812B98DFC000A9A42 /* libs */,
+ 00FA16BF12B98DFC000A9A42 /* src */,
+ );
+ path = ofxMaxim;
+ sourceTree = "<group>";
+ };
+ 00FA16B812B98DFC000A9A42 /* libs */ = {
+ isa = PBXGroup;
+ children = (
+ 00FA16BD12B98DFC000A9A42 /* maximilian.cpp */,
+ 00FA16BE12B98DFC000A9A42 /* maximilian.h */,
+ );
+ path = libs;
+ sourceTree = "<group>";
+ };
+ 00FA16BF12B98DFC000A9A42 /* src */ = {
+ isa = PBXGroup;
+ children = (
+ 00FA16C012B98DFC000A9A42 /* ofxMaxim.h */,
+ );
+ path = src;
+ sourceTree = "<group>";
+ };
+ 19C28FACFE9D520D11CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 1D6058910D05DD3D006BFB54 /* emptyExample.app */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
+ isa = PBXGroup;
+ children = (
+ BB24DDC910DA781C00E9C588 /* ofxiphone-Info.plist */,
+ E4D8936A11527B74007E1F53 /* src */,
+ BB24DD8B10DA77E000E9C588 /* data */,
+ BB24E1F710DAA51900E9C588 /* openFrameworks */,
+ BB16F26B0F2B646B00518274 /* addons */,
+ BB16E9930F2B1E5900518274 /* libs */,
+ 19C28FACFE9D520D11CA2CBB /* Products */,
+ );
+ name = CustomTemplate;
+ sourceTree = "<group>";
+ };
+ 29B97315FDCFA39411CA2CEA /* Other Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 32CA4F630368D1EE00C91783 /* iPhone_Prefix.pch */,
+ );
+ name = "Other Sources";
+ sourceTree = "<group>";
+ };
+ 29B97323FDCFA39411CA2CEA /* core frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 53F323EA10A20EDB00E0DAE4 /* OpenAL.framework */,
+ E4A823A312561BE3002F86A2 /* CoreGraphics.framework */,
+ BBE5EAB70F49AD8400F28951 /* AudioToolbox.framework */,
+ BB16EBD80F2B2AB500518274 /* QuartzCore.framework */,
+ BB16EBD10F2B2A9500518274 /* OpenGLES.framework */,
+ 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */,
+ 1D30AB110D05D00D00671497 /* Foundation.framework */,
+ 288765FC0DF74451002DB57D /* CoreGraphics.framework */,
+ 5326AEA710A23A0500278DE6 /* CoreLocation.framework */,
+ 00EF442C12BAD6C000FF6AA4 /* Accelerate.framework */,
+ );
+ name = "core frameworks";
+ sourceTree = "<group>";
+ };
+ 5E25686A10ED26BE00A9501C /* poco */ = {
+ isa = PBXGroup;
+ children = (
+ 5E25686E10ED26CC00A9501C /* lib */,
+ );
+ name = poco;
+ sourceTree = "<group>";
+ };
+ 5E25686E10ED26CC00A9501C /* lib */ = {
+ isa = PBXGroup;
+ children = (
+ 5E25686F10ED26CC00A9501C /* iphone */,
+ 5E25687F10ED26CC00A9501C /* osx */,
+ );
+ name = lib;
+ path = ../../../libs/poco/lib;
+ sourceTree = SOURCE_ROOT;
+ };
+ 5E25686F10ED26CC00A9501C /* iphone */ = {
+ isa = PBXGroup;
+ children = (
+ 5E25687010ED26CC00A9501C /* CppUnit.a */,
+ 5E25687110ED26CC00A9501C /* PocoFoundation.a */,
+ 5E25687210ED26CC00A9501C /* PocoNet.a */,
+ 5E25687310ED26CC00A9501C /* PocoUtil.a */,
+ 5E25687410ED26CC00A9501C /* PocoXML.a */,
+ );
+ name = iphone;
+ path = ../../../libs/poco/lib/iphone;
+ sourceTree = SOURCE_ROOT;
+ };
+ 5E25687F10ED26CC00A9501C /* osx */ = {
+ isa = PBXGroup;
+ children = (
+ 5E25688010ED26CC00A9501C /* CppUnit.a */,
+ 5E25688110ED26CC00A9501C /* PocoFoundation.a */,
+ 5E25688210ED26CC00A9501C /* PocoNet.a */,
+ 5E25688310ED26CC00A9501C /* PocoUtil.a */,
+ 5E25688410ED26CC00A9501C /* PocoXML.a */,
+ );
+ name = osx;
+ path = ../../../libs/poco/lib/osx;
+ sourceTree = SOURCE_ROOT;
+ };
+ BB16E9930F2B1E5900518274 /* libs */ = {
+ isa = PBXGroup;
+ children = (
+ BBE5E94E0F497BD800F28951 /* core */,
+ );
+ name = libs;
+ sourceTree = "<group>";
+ };
+ BB16F26B0F2B646B00518274 /* addons */ = {
+ isa = PBXGroup;
+ children = (
+ 00FA16B612B98DFC000A9A42 /* ofxMaxim */,
+ );
+ name = addons;
+ sourceTree = "<group>";
+ };
+ BB24DD8B10DA77E000E9C588 /* data */ = {
+ isa = PBXGroup;
+ children = (
+ BB24DD8C10DA77E000E9C588 /* Default.png */,
+ BB24DD8D10DA77E000E9C588 /* Icon.png */,
+ );
+ name = data;
+ path = bin/data;
+ sourceTree = "<group>";
+ };
+ BB24DDCD10DA784F00E9C588 /* FreeImage */ = {
+ isa = PBXGroup;
+ children = (
+ BB24DDCE10DA784F00E9C588 /* include */,
+ BB24DDD010DA784F00E9C588 /* lib */,
+ );
+ name = FreeImage;
+ path = ../../../libs/FreeImage;
+ sourceTree = SOURCE_ROOT;
+ };
+ BB24DDCE10DA784F00E9C588 /* include */ = {
+ isa = PBXGroup;
+ children = (
+ BB24DDCF10DA784F00E9C588 /* FreeImage.h */,
+ );
+ path = include;
+ sourceTree = "<group>";
+ };
+ BB24DDD010DA784F00E9C588 /* lib */ = {
+ isa = PBXGroup;
+ children = (
+ E434BF6612477EDE00452519 /* osx */,
+ BB24DDD110DA784F00E9C588 /* iphone */,
+ );
+ path = lib;
+ sourceTree = "<group>";
+ };
+ BB24DDD110DA784F00E9C588 /* iphone */ = {
+ isa = PBXGroup;
+ children = (
+ E434BF6412477ED500452519 /* freeimage-iphone.a */,
+ );
+ path = iphone;
+ sourceTree = "<group>";
+ };
+ BB24DDDD10DA785000E9C588 /* freetype */ = {
+ isa = PBXGroup;
+ children = (
+ BB24DDDE10DA785000E9C588 /* include */,
+ BB24DE1110DA785000E9C588 /* lib */,
+ );
+ name = freetype;
+ path = ../../../libs/freetype;
+ sourceTree = SOURCE_ROOT;
+ };
+ BB24DDDE10DA785000E9C588 /* include */ = {
+ isa = PBXGroup;
+ children = (
+ BB24DDDF10DA785000E9C588 /* freetype2 */,
+ BB24DE0E10DA785000E9C588 /* ft2build.h */,
+ );
+ path = include;
+ sourceTree = "<group>";
+ };
+ BB24DDDF10DA785000E9C588 /* freetype2 */ = {
+ isa = PBXGroup;
+ children = (
+ BB24DDE010DA785000E9C588 /* freetype */,
+ );
+ path = freetype2;
+ sourceTree = "<group>";
+ };
+ BB24DDE010DA785000E9C588 /* freetype */ = {
+ isa = PBXGroup;
+ children = (
+ BB24DDE110DA785000E9C588 /* config */,
+ BB24DDE710DA785000E9C588 /* freetype.h */,
+ BB24DDE810DA785000E9C588 /* ftbbox.h */,
+ BB24DDE910DA785000E9C588 /* ftbdf.h */,
+ BB24DDEA10DA785000E9C588 /* ftbitmap.h */,
+ BB24DDEB10DA785000E9C588 /* ftcache.h */,
+ BB24DDEC10DA785000E9C588 /* ftchapters.h */,
+ BB24DDED10DA785000E9C588 /* fterrdef.h */,
+ BB24DDEE10DA785000E9C588 /* fterrors.h */,
+ BB24DDEF10DA785000E9C588 /* ftgasp.h */,
+ BB24DDF010DA785000E9C588 /* ftglyph.h */,
+ BB24DDF110DA785000E9C588 /* ftgxval.h */,
+ BB24DDF210DA785000E9C588 /* ftgzip.h */,
+ BB24DDF310DA785000E9C588 /* ftimage.h */,
+ BB24DDF410DA785000E9C588 /* ftincrem.h */,
+ BB24DDF510DA785000E9C588 /* ftlcdfil.h */,
+ BB24DDF610DA785000E9C588 /* ftlist.h */,
+ BB24DDF710DA785000E9C588 /* ftlzw.h */,
+ BB24DDF810DA785000E9C588 /* ftmac.h */,
+ BB24DDF910DA785000E9C588 /* ftmm.h */,
+ BB24DDFA10DA785000E9C588 /* ftmodapi.h */,
+ BB24DDFB10DA785000E9C588 /* ftmoderr.h */,
+ BB24DDFC10DA785000E9C588 /* ftotval.h */,
+ BB24DDFD10DA785000E9C588 /* ftoutln.h */,
+ BB24DDFE10DA785000E9C588 /* ftpfr.h */,
+ BB24DDFF10DA785000E9C588 /* ftrender.h */,
+ BB24DE0010DA785000E9C588 /* ftsizes.h */,
+ BB24DE0110DA785000E9C588 /* ftsnames.h */,
+ BB24DE0210DA785000E9C588 /* ftstroke.h */,
+ BB24DE0310DA785000E9C588 /* ftsynth.h */,
+ BB24DE0410DA785000E9C588 /* ftsystem.h */,
+ BB24DE0510DA785000E9C588 /* fttrigon.h */,
+ BB24DE0610DA785000E9C588 /* fttypes.h */,
+ BB24DE0710DA785000E9C588 /* ftwinfnt.h */,
+ BB24DE0810DA785000E9C588 /* ftxf86.h */,
+ BB24DE0910DA785000E9C588 /* t1tables.h */,
+ BB24DE0A10DA785000E9C588 /* ttnameid.h */,
+ BB24DE0B10DA785000E9C588 /* tttables.h */,
+ BB24DE0C10DA785000E9C588 /* tttags.h */,
+ BB24DE0D10DA785000E9C588 /* ttunpat.h */,
+ );
+ path = freetype;
+ sourceTree = "<group>";
+ };
+ BB24DDE110DA785000E9C588 /* config */ = {
+ isa = PBXGroup;
+ children = (
+ BB24DDE210DA785000E9C588 /* ftconfig.h */,
+ BB24DDE310DA785000E9C588 /* ftheader.h */,
+ BB24DDE410DA785000E9C588 /* ftmodule.h */,
+ BB24DDE510DA785000E9C588 /* ftoption.h */,
+ BB24DDE610DA785000E9C588 /* ftstdlib.h */,
+ );
+ path = config;
+ sourceTree = "<group>";
+ };
+ BB24DE1110DA785000E9C588 /* lib */ = {
+ isa = PBXGroup;
+ children = (
+ E4A8229D12560AFE002F86A2 /* osx */,
+ BB24DE1210DA785000E9C588 /* iphone */,
+ );
+ path = lib;
+ sourceTree = "<group>";
+ };
+ BB24DE1210DA785000E9C588 /* iphone */ = {
+ isa = PBXGroup;
+ children = (
+ E434BF7212477FBA00452519 /* freetype-iphone.a */,
+ );
+ path = iphone;
+ sourceTree = "<group>";
+ };
+ BB24DE1F10DA785000E9C588 /* glu */ = {
+ isa = PBXGroup;
+ children = (
+ DA7851261105C039007EFC90 /* include_iphone */,
+ BB24DE2510DA785000E9C588 /* lib */,
+ );
+ name = glu;
+ path = ../../../libs/glu;
+ sourceTree = SOURCE_ROOT;
+ };
+ BB24DE2510DA785000E9C588 /* lib */ = {
+ isa = PBXGroup;
+ children = (
+ BB24DE2610DA785000E9C588 /* iphone */,
+ );
+ path = lib;
+ sourceTree = "<group>";
+ };
+ BB24DE2610DA785000E9C588 /* iphone */ = {
+ isa = PBXGroup;
+ children = (
+ E496D5AF1252C8210098A2B3 /* glu-iphone.a */,
+ E496D5B01252C8210098A2B3 /* glu.a */,
+ );
+ path = iphone;
+ sourceTree = "<group>";
+ };
+ BB24E1F710DAA51900E9C588 /* openFrameworks */ = {
+ isa = PBXGroup;
+ children = (
+ E49BCC4812554B69009F19D0 /* iPhone+OF Lib.xcodeproj */,
+ );
+ name = openFrameworks;
+ sourceTree = "<group>";
+ };
+ BB3F144E0F4C6BF200A33527 /* core libraries */ = {
+ isa = PBXGroup;
+ children = (
+ 5E25686A10ED26BE00A9501C /* poco */,
+ BB24DDCD10DA784F00E9C588 /* FreeImage */,
+ BB24DDDD10DA785000E9C588 /* freetype */,
+ BB24DE1F10DA785000E9C588 /* glu */,
+ 29B97315FDCFA39411CA2CEA /* Other Sources */,
+ );
+ name = "core libraries";
+ sourceTree = "<group>";
+ };
+ BBE5E94E0F497BD800F28951 /* core */ = {
+ isa = PBXGroup;
+ children = (
+ BB3F144E0F4C6BF200A33527 /* core libraries */,
+ 29B97323FDCFA39411CA2CEA /* core frameworks */,
+ );
+ name = core;
+ sourceTree = "<group>";
+ };
+ DA7851261105C039007EFC90 /* include_iphone */ = {
+ isa = PBXGroup;
+ children = (
+ DA7851271105C039007EFC90 /* glu.h */,
+ DA7851281105C039007EFC90 /* gluos.h */,
+ );
+ path = include_iphone;
+ sourceTree = "<group>";
+ };
+ E434BF6612477EDE00452519 /* osx */ = {
+ isa = PBXGroup;
+ children = (
+ E434BF6712477EDE00452519 /* freeimage.a */,
+ );
+ name = osx;
+ path = ../../../libs/FreeImage/lib/osx;
+ sourceTree = SOURCE_ROOT;
+ };
+ E49BCC4912554B69009F19D0 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ E49BCC5012554B6A009F19D0 /* libofxiPhone_macosx_Debug.a */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ E4A8229D12560AFE002F86A2 /* osx */ = {
+ isa = PBXGroup;
+ children = (
+ E4A8229E12560AFE002F86A2 /* freetype.a */,
+ );
+ name = osx;
+ path = ../../../libs/freetype/lib/osx;
+ sourceTree = SOURCE_ROOT;
+ };
+ E4D8936A11527B74007E1F53 /* src */ = {
+ isa = PBXGroup;
+ children = (
+ E4D8936B11527B74007E1F53 /* main.mm */,
+ E4D8936D11527B74007E1F53 /* testApp.mm */,
+ E4D8936C11527B74007E1F53 /* testApp.h */,
+ );
+ path = src;
+ sourceTree = SOURCE_ROOT;
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 1D6058900D05DD3D006BFB54 /* emptyExample */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "emptyExample" */;
+ buildPhases = (
+ 1D60588D0D05DD3D006BFB54 /* Resources */,
+ 1D60588E0D05DD3D006BFB54 /* Sources */,
+ 1D60588F0D05DD3D006BFB54 /* Frameworks */,
+ 9255DD331112741900D6945E /* ShellScript */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ E49BCC6E12554C6C009F19D0 /* PBXTargetDependency */,
+ );
+ name = emptyExample;
+ productName = iPhone;
+ productReference = 1D6058910D05DD3D006BFB54 /* emptyExample.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 29B97313FDCFA39411CA2CEA /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "iPhoneEmptyExample" */;
+ compatibilityVersion = "Xcode 3.1";
+ developmentRegion = English;
+ hasScannedForEncodings = 1;
+ knownRegions = (
+ English,
+ Japanese,
+ French,
+ German,
+ );
+ mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;
+ projectDirPath = "";
+ projectReferences = (
+ {
+ ProductGroup = E49BCC4912554B69009F19D0 /* Products */;
+ ProjectRef = E49BCC4812554B69009F19D0 /* iPhone+OF Lib.xcodeproj */;
+ },
+ );
+ projectRoot = "";
+ targets = (
+ 1D6058900D05DD3D006BFB54 /* emptyExample */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXReferenceProxy section */
+ E49BCC5012554B6A009F19D0 /* libofxiPhone_macosx_Debug.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libofxiPhone_macosx_Debug.a;
+ remoteRef = E49BCC4F12554B6A009F19D0 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+/* End PBXReferenceProxy section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 1D60588D0D05DD3D006BFB54 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BB24DD8F10DA77E000E9C588 /* Default.png in Resources */,
+ BB24DD9010DA77E000E9C588 /* Icon.png in Resources */,
+ BB24DDCA10DA781C00E9C588 /* ofxiphone-Info.plist in Resources */,
+ 00FA16C112B98DFC000A9A42 /* install.xml in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 9255DD331112741900D6945E /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "cp -rf bin/data/ \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app\"\n";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 1D60588E0D05DD3D006BFB54 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ E4D8936E11527B74007E1F53 /* main.mm in Sources */,
+ E4D8936F11527B74007E1F53 /* testApp.mm in Sources */,
+ 00FA16C412B98DFC000A9A42 /* maximilian.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ E49BCC6E12554C6C009F19D0 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = "iPhone+OF Static Library";
+ targetProxy = E49BCC6D12554C6C009F19D0 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 1D6058940D05DD3E006BFB54 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = iPhone_Prefix.pch;
+ GCC_THUMB_SUPPORT = NO;
+ INFOPLIST_FILE = "ofxiphone-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 4.2;
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/../../../libs/freetype/lib/osx\"",
+ );
+ ONLY_ACTIVE_ARCH = YES;
+ PRODUCT_NAME = "${TARGET_NAME}";
+ SDKROOT = iphoneos;
+ };
+ name = Debug;
+ };
+ 1D6058950D05DD3E006BFB54 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = iPhone_Prefix.pch;
+ GCC_THUMB_SUPPORT = NO;
+ INFOPLIST_FILE = "ofxiphone-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 4.2;
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/../../../libs/freetype/lib/osx\"",
+ );
+ ONLY_ACTIVE_ARCH = YES;
+ PRODUCT_NAME = "${TARGET_NAME}";
+ SDKROOT = iphoneos;
+ };
+ name = Release;
+ };
+ C01FCF4F08A954540054247B /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COMPRESS_PNG_FILES = NO;
+ GCC_C_LANGUAGE_STANDARD = c99;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_THUMB_SUPPORT = NO;
+ GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
+ GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
+ GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
+ GCC_WARN_PROTOTYPE_CONVERSION = NO;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = (
+ ../../../libs/poco/include,
+ "../../../addons/ofxAccelerometer/**",
+ "../../../addons/ofxMultitouch/**",
+ "../../../addons/ofxiPhone/**",
+ "../../../libs/openFrameworks/**",
+ "../../../libs/freetype/**",
+ );
+ IPHONEOS_DEPLOYMENT_TARGET = 4.2;
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/../../../libs/freetype/lib\"",
+ "\"$(SRCROOT)/../../../libs/freeimage/lib\"",
+ "\"$(SRCROOT)/../../../libs/FreeImage/lib/iphone\"",
+ "\"$(SRCROOT)/../../../libs/FreeImage/lib/osx\"",
+ "\"$(SRCROOT)/../../../libs/freetype/lib/iphone\"",
+ "\"$(SRCROOT)/../../../libs/freetype/lib/osx\"",
+ "\"$(SRCROOT)/../../../libs/glu/lib/iphone\"",
+ "\"$(SRCROOT)/../../../libs/poco/lib/osx\"",
+ "\"$(SRCROOT)/../../../libs/poco/lib/iphone\"",
+ );
+ MACOSX_DEPLOYMENT_TARGET = 10.5;
+ ONLY_ACTIVE_ARCH = NO;
+ OTHER_LDFLAGS = "-ObjC";
+ PREBINDING = NO;
+ "PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
+ SDKROOT = iphoneos4.2;
+ TARGETED_DEVICE_FAMILY = 1;
+ WARNING_LDFLAGS = "";
+ };
+ name = Debug;
+ };
+ C01FCF5008A954540054247B /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COMPRESS_PNG_FILES = NO;
+ GCC_C_LANGUAGE_STANDARD = c99;
+ GCC_DYNAMIC_NO_PIC = YES;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_THUMB_SUPPORT = NO;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = (
+ ../../../libs/poco/include,
+ "../../../addons/ofxAccelerometer/**",
+ "../../../addons/ofxMultitouch/**",
+ "../../../addons/ofxiPhone/**",
+ "../../../libs/openFrameworks/**",
+ "../../../libs/freetype/**",
+ );
+ IPHONEOS_DEPLOYMENT_TARGET = 4.2;
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/../../../libs/freetype/lib\"",
+ "\"$(SRCROOT)/../../../libs/freeimage/lib\"",
+ "\"$(SRCROOT)/../../../libs/FreeImage/lib/iphone\"",
+ "\"$(SRCROOT)/../../../libs/FreeImage/lib/osx\"",
+ "\"$(SRCROOT)/../../../libs/freetype/lib/iphone\"",
+ "\"$(SRCROOT)/../../../libs/freetype/lib/osx\"",
+ "\"$(SRCROOT)/../../../libs/glu/lib/iphone\"",
+ "\"$(SRCROOT)/../../../libs/poco/lib/osx\"",
+ "\"$(SRCROOT)/../../../libs/poco/lib/iphone\"",
+ );
+ MACOSX_DEPLOYMENT_TARGET = 10.5;
+ ONLY_ACTIVE_ARCH = NO;
+ OTHER_LDFLAGS = "-ObjC";
+ PREBINDING = NO;
+ "PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
+ SDKROOT = iphoneos4.2;
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Release;
+ };
+ E49BCC2F12554938009F19D0 /* ReleaseArmv7 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COMPRESS_PNG_FILES = NO;
+ GCC_C_LANGUAGE_STANDARD = c99;
+ GCC_DYNAMIC_NO_PIC = YES;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_THUMB_SUPPORT = NO;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = (
+ ../../../libs/poco/include,
+ "../../../addons/ofxAccelerometer/**",
+ "../../../addons/ofxMultitouch/**",
+ "../../../addons/ofxiPhone/**",
+ "../../../libs/openFrameworks/**",
+ "../../../libs/freetype/**",
+ );
+ IPHONEOS_DEPLOYMENT_TARGET = 4.2;
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/../../../libs/freetype/lib\"",
+ "\"$(SRCROOT)/../../../libs/freeimage/lib\"",
+ "\"$(SRCROOT)/../../../libs/FreeImage/lib/iphone\"",
+ "\"$(SRCROOT)/../../../libs/FreeImage/lib/osx\"",
+ "\"$(SRCROOT)/../../../libs/freetype/lib/iphone\"",
+ "\"$(SRCROOT)/../../../libs/freetype/lib/osx\"",
+ "\"$(SRCROOT)/../../../libs/glu/lib/iphone\"",
+ "\"$(SRCROOT)/../../../libs/poco/lib/osx\"",
+ "\"$(SRCROOT)/../../../libs/poco/lib/iphone\"",
+ );
+ MACOSX_DEPLOYMENT_TARGET = 10.5;
+ ONLY_ACTIVE_ARCH = NO;
+ OTHER_LDFLAGS = "-ObjC";
+ PREBINDING = NO;
+ "PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
+ SDKROOT = iphoneos4.2;
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = ReleaseArmv7;
+ };
+ E49BCC3012554938009F19D0 /* ReleaseArmv7 */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = iPhone_Prefix.pch;
+ GCC_THUMB_SUPPORT = NO;
+ INFOPLIST_FILE = "ofxiphone-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 4.2;
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/../../../libs/freetype/lib/osx\"",
+ );
+ ONLY_ACTIVE_ARCH = YES;
+ PRODUCT_NAME = "${TARGET_NAME}";
+ SDKROOT = iphoneos;
+ };
+ name = ReleaseArmv7;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "emptyExample" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1D6058940D05DD3E006BFB54 /* Debug */,
+ 1D6058950D05DD3E006BFB54 /* Release */,
+ E49BCC3012554938009F19D0 /* ReleaseArmv7 */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ C01FCF4E08A954540054247B /* Build configuration list for PBXProject "iPhoneEmptyExample" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C01FCF4F08A954540054247B /* Debug */,
+ C01FCF5008A954540054247B /* Release */,
+ E49BCC2F12554938009F19D0 /* ReleaseArmv7 */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
+}
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/iPhone_Prefix.pch b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/iPhone_Prefix.pch
new file mode 100644
index 0000000..fd3401c
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/iPhone_Prefix.pch
@@ -0,0 +1,8 @@
+//
+// Prefix header for all source files of the 'iPhone' target in the 'iPhone' project
+//
+
+#ifdef __OBJC__
+ #import <Foundation/Foundation.h>
+ #import <UIKit/UIKit.h>
+#endif
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/install.xml b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/install.xml
new file mode 100644
index 0000000..58923be
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/install.xml
@@ -0,0 +1,35 @@
+<install>
+ <version>0.1</version>
+ <author>Goldsmiths Creative Computing</author>
+ <url>http://www.maximilian.strangeloop.co.uk/</url>
+ <requires></requires>
+
+
+ <add>
+ <!-- ===================================================================== -->
+ <!-- ========================== add per project using this addon ========= -->
+ <!-- ===================================================================== -->
+
+ <src>
+
+ <folder name="addons/ofxMaxim/src">
+ <file>../../../addons/ofxMaxim/src/ofxMaxim.h</file>
+ </folder>
+
+ <folder name="addons/ofxMaxim/libs">
+ <file>../../../addons/ofxMaxim/libs/fft.h</file>
+ <file>../../../addons/ofxMaxim/libs/fft.cpp</file>
+ <file>../../../addons/ofxMaxim/libs/fftOctaveAnalyzer.h</file>
+ <file>../../../addons/ofxMaxim/libs/fftOctaveAnalyzer.cpp</file>
+ <file>../../../addons/ofxMaxim/libs/maximilian.h</file>
+ <file>../../../addons/ofxMaxim/libs/maximilian.cpp</file>
+ </folder>
+
+ </src>
+
+ <include>
+ <path>../../../addons/ofxMaxim/src</path>
+ <path>../../../addons/ofxMaxim/libs</path>
+ </include>
+ </add>
+</install> \ No newline at end of file
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/fft.cpp b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/fft.cpp
new file mode 100644
index 0000000..3f13bd2
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/fft.cpp
@@ -0,0 +1,608 @@
+/*
+ * maximilian
+ * platform independent synthesis library using portaudio or rtaudio
+ *
+ * Created by Mick Grierson on 29/12/2009.
+ * Copyright 2009 Mick Grierson & Strangeloop Limited. All rights reserved.
+ * Thanks to the Goldsmiths Creative Computing Team.
+ * Special thanks to Arturo Castro for the PortAudio implementation.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+/*
+
+ fft.cpp
+
+ Based on K+R Numerical recipes in C and some other stuff hacked about.
+
+ */
+
+#include "fft.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+
+int **gFFTBitTable = NULL;
+const int MaxFastBits = 16;
+
+int IsPowerOfTwo(int x)
+{
+ if (x < 2)
+ return false;
+
+ if (x & (x - 1))
+ return false;
+
+ return true;
+}
+
+int NumberOfBitsNeeded(int PowerOfTwo)
+{
+ int i;
+
+ if (PowerOfTwo < 2) {
+ fprintf(stderr, "Error: FFT called with size %d\n", PowerOfTwo);
+ exit(1);
+ }
+
+ for (i = 0;; i++)
+ if (PowerOfTwo & (1 << i))
+ return i;
+}
+
+int ReverseBits(int index, int NumBits)
+{
+ int i, rev;
+
+ for (i = rev = 0; i < NumBits; i++) {
+ rev = (rev << 1) | (index & 1);
+ index >>= 1;
+ }
+
+ return rev;
+}
+
+void InitFFT()
+{
+// gFFTBitTable = new int *[MaxFastBits];
+ //use malloc for 16 byte alignment
+ gFFTBitTable = (int**) malloc(MaxFastBits * sizeof(int*));
+
+ int len = 2;
+ for (int b = 1; b <= MaxFastBits; b++) {
+
+// gFFTBitTable[b - 1] = new int[len];
+ gFFTBitTable[b - 1] = (int*) malloc(len * sizeof(int));
+
+ for (int i = 0; i < len; i++)
+ gFFTBitTable[b - 1][i] = ReverseBits(i, b);
+
+ len <<= 1;
+ }
+}
+
+inline int FastReverseBits(int i, int NumBits)
+{
+ if (NumBits <= MaxFastBits)
+ return gFFTBitTable[NumBits - 1][i];
+ else
+ return ReverseBits(i, NumBits);
+}
+
+/*
+ * Complex Fast Fourier Transform
+ */
+
+void FFT(int NumSamples,
+ bool InverseTransform,
+ float *RealIn, float *ImagIn, float *RealOut, float *ImagOut)
+{
+ int NumBits; /* Number of bits needed to store indices */
+ int i, j, k, n;
+ int BlockSize, BlockEnd;
+
+ double angle_numerator = 2.0 * M_PI;
+ float tr, ti; /* temp real, temp imaginary */
+
+ if (!IsPowerOfTwo(NumSamples)) {
+ fprintf(stderr, "%d is not a power of two\n", NumSamples);
+ exit(1);
+ }
+
+ if (!gFFTBitTable)
+ InitFFT();
+
+ if (InverseTransform)
+ angle_numerator = -angle_numerator;
+
+ NumBits = NumberOfBitsNeeded(NumSamples);
+
+ /*
+ ** Do simultaneous data copy and bit-reversal ordering into outputs...
+ */
+
+ for (i = 0; i < NumSamples; i++) {
+ j = FastReverseBits(i, NumBits);
+ RealOut[j] = RealIn[i];
+ ImagOut[j] = (ImagIn == NULL) ? 0.0 : ImagIn[i];
+ }
+
+ /*
+ ** Do the FFT itself...
+ */
+
+ BlockEnd = 1;
+ for (BlockSize = 2; BlockSize <= NumSamples; BlockSize <<= 1) {
+
+ double delta_angle = angle_numerator / (double) BlockSize;
+
+ float sm2 = sin(-2 * delta_angle);
+ float sm1 = sin(-delta_angle);
+ float cm2 = cos(-2 * delta_angle);
+ float cm1 = cos(-delta_angle);
+ float w = 2 * cm1;
+ float ar0, ar1, ar2, ai0, ai1, ai2;
+
+ for (i = 0; i < NumSamples; i += BlockSize) {
+ ar2 = cm2;
+ ar1 = cm1;
+
+ ai2 = sm2;
+ ai1 = sm1;
+
+ for (j = i, n = 0; n < BlockEnd; j++, n++) {
+ ar0 = w * ar1 - ar2;
+ ar2 = ar1;
+ ar1 = ar0;
+
+ ai0 = w * ai1 - ai2;
+ ai2 = ai1;
+ ai1 = ai0;
+
+ k = j + BlockEnd;
+ tr = ar0 * RealOut[k] - ai0 * ImagOut[k];
+ ti = ar0 * ImagOut[k] + ai0 * RealOut[k];
+
+ RealOut[k] = RealOut[j] - tr;
+ ImagOut[k] = ImagOut[j] - ti;
+
+ RealOut[j] += tr;
+ ImagOut[j] += ti;
+ }
+ }
+
+ BlockEnd = BlockSize;
+ }
+
+ /*
+ ** Need to normalize if inverse transform...
+ */
+
+ if (InverseTransform) {
+ float denom = (float) NumSamples;
+
+ for (i = 0; i < NumSamples; i++) {
+ RealOut[i] /= denom;
+ ImagOut[i] /= denom;
+ }
+ }
+}
+
+/*
+ * Real Fast Fourier Transform
+ *
+ * This function was based on the code in Numerical Recipes in C.
+ * In Num. Rec., the inner loop is based on a single 1-based array
+ * of interleaved real and imaginary numbers. Because we have two
+ * separate zero-based arrays, our indices are quite different.
+ * Here is the correspondence between Num. Rec. indices and our indices:
+ *
+ * i1 <-> real[i]
+ * i2 <-> imag[i]
+ * i3 <-> real[n/2-i]
+ * i4 <-> imag[n/2-i]
+ */
+
+void RealFFT(int NumSamples, float *RealIn, float *RealOut, float *ImagOut)
+{
+ int Half = NumSamples / 2;
+ int i;
+
+ float theta = M_PI / Half;
+
+ float *tmpReal = (float*) malloc(Half * sizeof(float));
+ float *tmpImag = (float*) malloc(Half * sizeof(float));
+
+ for (i = 0; i < Half; i++) {
+ tmpReal[i] = RealIn[2 * i];
+ tmpImag[i] = RealIn[2 * i + 1];
+ }
+
+ FFT(Half, 0, tmpReal, tmpImag, RealOut, ImagOut);
+
+ float wtemp = float (sin(0.5 * theta));
+
+ float wpr = -2.0 * wtemp * wtemp;
+ float wpi = float (sin(theta));
+ float wr = 1.0 + wpr;
+ float wi = wpi;
+
+ int i3;
+
+ float h1r, h1i, h2r, h2i;
+
+ for (i = 1; i < Half / 2; i++) {
+
+ i3 = Half - i;
+
+ h1r = 0.5 * (RealOut[i] + RealOut[i3]);
+ h1i = 0.5 * (ImagOut[i] - ImagOut[i3]);
+ h2r = 0.5 * (ImagOut[i] + ImagOut[i3]);
+ h2i = -0.5 * (RealOut[i] - RealOut[i3]);
+
+ RealOut[i] = h1r + wr * h2r - wi * h2i;
+ ImagOut[i] = h1i + wr * h2i + wi * h2r;
+ RealOut[i3] = h1r - wr * h2r + wi * h2i;
+ ImagOut[i3] = -h1i + wr * h2i + wi * h2r;
+
+ wr = (wtemp = wr) * wpr - wi * wpi + wr;
+ wi = wi * wpr + wtemp * wpi + wi;
+ }
+
+ RealOut[0] = (h1r = RealOut[0]) + ImagOut[0];
+ ImagOut[0] = h1r - ImagOut[0];
+
+ delete[]tmpReal;
+ delete[]tmpImag;
+}
+
+/*
+ * PowerSpectrum
+ *
+ * This function computes the same as RealFFT, above, but
+ * adds the squares of the real and imaginary part of each
+ * coefficient, extracting the power and throwing away the
+ * phase.
+ *
+ * For speed, it does not call RealFFT, but duplicates some
+ * of its code.
+ */
+
+void PowerSpectrum(int NumSamples, float *In, float *Out)
+{
+ int Half = NumSamples / 2;
+ int i;
+
+ float theta = M_PI / Half;
+
+ float *tmpReal = new float[Half];
+ float *tmpImag = new float[Half];
+ float *RealOut = new float[Half];
+ float *ImagOut = new float[Half];
+
+ for (i = 0; i < Half; i++) {
+ tmpReal[i] = In[2 * i];
+ tmpImag[i] = In[2 * i + 1];
+ }
+
+ FFT(Half, 0, tmpReal, tmpImag, RealOut, ImagOut);
+
+ float wtemp = float (sin(0.5 * theta));
+
+ float wpr = -2.0 * wtemp * wtemp;
+ float wpi = float (sin(theta));
+ float wr = 1.0 + wpr;
+ float wi = wpi;
+
+ int i3;
+
+ float h1r, h1i, h2r, h2i, rt, it;
+ //float total=0;
+
+ for (i = 1; i < Half / 2; i++) {
+
+ i3 = Half - i;
+
+ h1r = 0.5 * (RealOut[i] + RealOut[i3]);
+ h1i = 0.5 * (ImagOut[i] - ImagOut[i3]);
+ h2r = 0.5 * (ImagOut[i] + ImagOut[i3]);
+ h2i = -0.5 * (RealOut[i] - RealOut[i3]);
+
+ rt = h1r + wr * h2r - wi * h2i; //printf("Realout%i = %f",i,rt);total+=fabs(rt);
+ it = h1i + wr * h2i + wi * h2r; // printf(" Imageout%i = %f\n",i,it);
+
+ Out[i] = rt * rt + it * it;
+
+ rt = h1r - wr * h2r + wi * h2i;
+ it = -h1i + wr * h2i + wi * h2r;
+
+ Out[i3] = rt * rt + it * it;
+
+ wr = (wtemp = wr) * wpr - wi * wpi + wr;
+ wi = wi * wpr + wtemp * wpi + wi;
+ }
+ //printf("total = %f\n",total);
+ rt = (h1r = RealOut[0]) + ImagOut[0];
+ it = h1r - ImagOut[0];
+ Out[0] = rt * rt + it * it;
+
+ rt = RealOut[Half / 2];
+ it = ImagOut[Half / 2];
+ Out[Half / 2] = rt * rt + it * it;
+
+ delete[]tmpReal;
+ delete[]tmpImag;
+ delete[]RealOut;
+ delete[]ImagOut;
+}
+
+/*
+ * Windowing Functions
+ */
+
+int NumWindowFuncs()
+{
+ return 4;
+}
+
+char *WindowFuncName(int whichFunction)
+{
+ switch (whichFunction) {
+ default:
+ case 0:
+ return "Rectangular";
+ case 1:
+ return "Bartlett";
+ case 2:
+ return "Hamming";
+ case 3:
+ return "Hanning";
+ }
+}
+
+void WindowFunc(int whichFunction, int NumSamples, float *in)
+{
+ int i;
+
+ if (whichFunction == 1) {
+ // Bartlett (triangular) window
+ for (i = 0; i < NumSamples / 2; i++) {
+ in[i] *= (i / (float) (NumSamples / 2));
+ in[i + (NumSamples / 2)] *=
+ (1.0 - (i / (float) (NumSamples / 2)));
+ }
+ }
+
+ if (whichFunction == 2) {
+ // Hamming
+ for (i = 0; i < NumSamples; i++)
+ in[i] *= 0.54 - 0.46 * cos(2 * M_PI * i / (NumSamples - 1));
+ }
+
+ if (whichFunction == 3) {
+ // Hanning
+ for (i = 0; i < NumSamples; i++)
+ in[i] *= 0.50 - 0.50 * cos(2 * M_PI * i / (NumSamples - 1));
+ }
+}
+
+void fft::genWindow(int whichFunction, int NumSamples, float *window)
+{
+ int i;
+
+ if (whichFunction == 1) {
+ // Bartlett (triangular) window
+ for (i = 0; i < NumSamples / 2; i++) {
+ window[i] = (i / (float) (NumSamples / 2));
+ window[i + (NumSamples / 2)] =
+ (1.0 - (i / (float) (NumSamples / 2)));
+ }
+ }
+
+ if (whichFunction == 2) {
+ // Hamming
+ for (i = 0; i < NumSamples; i++)
+ window[i] = 0.54 - 0.46 * cos(2 * M_PI * i / (NumSamples - 1));
+ }
+
+ if (whichFunction == 3) {
+ // Hanning
+ for (i = 0; i < NumSamples; i++)
+ window[i] = 0.50 - 0.50 * cos(2 * M_PI * i / (NumSamples - 1));
+ }
+}
+
+/* constructor */
+fft::fft(int fftSize) {
+ n = fftSize;
+ half = fftSize / 2;
+ //use malloc for 16 byte alignment
+ in_real = (float *) malloc(n * sizeof(float));
+ in_img = (float *) malloc(n * sizeof(float));
+ out_real = (float *) malloc(n * sizeof(float));
+ out_img = (float *) malloc(n * sizeof(float));
+
+#ifdef __APPLE_CC__
+ log2n = log2(n);
+ A.realp = (float *) malloc(half * sizeof(float));
+ A.imagp = (float *) malloc(half * sizeof(float));
+ setupReal = vDSP_create_fftsetup(log2n, FFT_RADIX2);
+ if (setupReal == NULL) {
+ printf("\nFFT_Setup failed to allocate enough memory for"
+ "the real FFT.\n");
+ }
+ polar = (float *) malloc(n * sizeof(float));
+#endif
+}
+
+/* destructor */
+fft::~fft() {
+ delete[] in_real, out_real, in_img, out_img;
+#ifdef __APPLE_CC__
+ vDSP_destroy_fftsetup(setupReal);
+ delete[] A.realp;
+ delete[] A.imagp;
+ delete[] polar;
+#endif
+
+}
+
+/* Calculate the power spectrum */
+void fft::powerSpectrum(int start, float *data, float *window, float *magnitude,float *phase) {
+ int i;
+
+ //windowing
+ for (i = 0; i < n; i++) {
+ in_real[i] = data[start + i] * window[i];
+ }
+
+
+ RealFFT(n, in_real, out_real, out_img);
+
+ for (i = 0; i < half; i++) {
+ /* compute power */
+ float power = out_real[i]*out_real[i] + out_img[i]*out_img[i];
+ /* compute magnitude and phase */
+ magnitude[i] = sqrt(power);
+ phase[i] = atan2(out_img[i],out_real[i]);
+
+// if (magnitude[i] < 0.000001){ // less than 0.1 nV
+// magnitude[i] = 0; // out of range
+// } else {
+// magnitude[i] = 20.0*log10(magnitude[i] + 1); // get to to db scale
+// }
+ }
+
+}
+
+void fft::convToDB(float *in, float *out) {
+ for (int i = 0; i < half; i++) {
+ if (in[i] < 0.000001){ // less than 0.1 nV
+ out[i] = 0; // out of range
+ } else {
+ out[i] = 20.0*log10(in[i] + 1); // get to to db scale
+ }
+ }
+}
+
+
+#ifdef __APPLE_CC__
+
+/* Calculate the power spectrum */
+void fft::powerSpectrum_vdsp(int start, float *data, float *window, float *magnitude,float *phase) {
+
+ uint32_t i;
+
+ //multiply by window
+ vDSP_vmul(data, 1, window, 1, in_real, 1, n);
+
+ //convert to split complex format - evens and odds
+ vDSP_ctoz((COMPLEX *) in_real, 2, &A, 1, half);
+
+
+ //calc fft
+ vDSP_fft_zrip(setupReal, &A, 1, log2n, FFT_FORWARD);
+
+ //scale by 2 (see vDSP docs)
+ static float scale=0.5 ;
+ vDSP_vsmul(A.realp, 1, &scale, A.realp, 1, half);
+ vDSP_vsmul(A.imagp, 1, &scale, A.imagp, 1, half);
+
+ //back to split complex format
+ vDSP_ztoc(&A, 1, (COMPLEX*) out_real, 2, half);
+
+ //convert to polar
+ vDSP_polar(out_real, 2, polar, 2, half);
+
+ for (i = 0; i < half; i++) {
+ magnitude[i]=polar[2*i]+1.0;
+ phase[i]=polar[2*i + 1];
+ }
+
+
+
+}
+
+void fft::convToDB_vdsp(float *in, float *out) {
+ float ref = 1.0;
+ vDSP_vdbcon(in, 1, &ref, out, 1, half, 1);
+ //get rid of any -infs
+ float vmin=0.0;
+ float vmax=9999999.0;
+ vDSP_vclip(out, 1, &vmin, &vmax, out, 1, half);
+}
+
+#endif
+
+void fft::inversePowerSpectrum(int start, float *finalOut, float *window, float *magnitude,float *phase) {
+ int i;
+
+ /* get real and imag part */
+ for (i = 0; i < half; i++) {
+// float mag = pow(10.0, magnitude[i] / 20.0) - 1.0;
+// in_real[i] = mag *cos(phase[i]);
+// in_img[i] = mag *sin(phase[i]);
+ in_real[i] = magnitude[i] *cos(phase[i]);
+ in_img[i] = magnitude[i] *sin(phase[i]);
+ }
+
+ /* zero negative frequencies */
+ memset(in_real+half, half, 0.0);
+ memset(in_img+half, half, 0.0);
+
+ FFT(n, 1, in_real, in_img, out_real, out_img); // second parameter indicates inverse transform
+
+ for (i = 0; i < n; i++) {
+ finalOut[start + i] += out_real[i] * window[i]
+ ;
+ }
+
+}
+
+
+#ifdef __APPLE_CC__
+void fft::inversePowerSpectrum_vdsp(int start, float *finalOut, float *window, float *magnitude,float *phase) {
+ uint32_t i;
+
+ for (i = 0; i < half; i++) {
+// polar[2*i] = pow(10.0, magnitude[i] / 20.0) - 1.0;
+ polar[2*i] = magnitude[i] - 1.0;
+ polar[2*i + 1] = phase[i];
+ }
+
+ vDSP_rect(polar, 2, in_real, 2, half);
+
+ vDSP_ctoz((COMPLEX*) in_real, 2, &A, 1, half);
+ vDSP_fft_zrip(setupReal, &A, 1, log2n, FFT_INVERSE);
+ vDSP_ztoc(&A, 1, (COMPLEX*) out_real, 2, half);
+
+ static float scale = 1./n;
+ vDSP_vsmul(out_real, 1, &scale, out_real, 1, n);
+
+ //multiply by window
+ vDSP_vmul(out_real, 1, window, 1, finalOut, 1, n);
+
+}
+
+#endif
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/fft.h b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/fft.h
new file mode 100644
index 0000000..f7e1947
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/fft.h
@@ -0,0 +1,80 @@
+/*
+ * maximilian
+ * platform independent synthesis library using portaudio or rtaudio
+ *
+ * Created by Mick Grierson on 29/12/2009.
+ * Copyright 2009 Mick Grierson & Strangeloop Limited. All rights reserved.
+ * Thanks to the Goldsmiths Creative Computing Team.
+ * Special thanks to Arturo Castro for the PortAudio implementation.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#ifndef _FFT
+#define _FFT
+
+#ifndef M_PI
+#define M_PI 3.14159265358979323846 /* pi */
+#endif
+
+#ifdef __APPLE_CC__
+ #include <Accelerate/Accelerate.h>
+ #warning Please link against the Accelerate framework
+#endif
+
+
+
+class fft {
+
+public:
+
+ fft(int fftSize);
+ ~fft();
+
+ int n; //fftSize
+ int half; //halfFFTSize
+
+ float *in_real, *out_real, *in_img, *out_img;
+
+#ifdef __APPLE_CC__
+ int log2n; //log2(n);
+ FFTSetup setupReal;
+ COMPLEX_SPLIT A;
+ float *polar;
+ void powerSpectrum_vdsp(int start, float *data, float *window, float *magnitude,float *phase);
+ void inversePowerSpectrum_vdsp(int start, float *finalOut, float *window, float *magnitude,float *phase);
+ void convToDB_vdsp(float *in, float *out);
+#endif;
+
+ /* Calculate the power spectrum */
+ void powerSpectrum(int start, float *data, float *window, float *magnitude, float *phase);
+ /* ... the inverse */
+ void inversePowerSpectrum(int start, float *finalOut, float *window, float *magnitude,float *phase);
+ void convToDB(float *in, float *out);
+
+ static void genWindow(int whichFunction, int NumSamples, float *window);
+
+};
+
+
+#endif
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maxiFFT.cpp b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maxiFFT.cpp
new file mode 100644
index 0000000..36034b2
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maxiFFT.cpp
@@ -0,0 +1,290 @@
+/*
+ * maximilian
+ * platform independent synthesis library using portaudio or rtaudio
+ *
+ * Created by Mick Grierson on 29/12/2009.
+ * Copyright 2009 Mick Grierson & Strangeloop Limited. All rights reserved.
+ * Thanks to the Goldsmiths Creative Computing Team.
+ * Special thanks to Arturo Castro for the PortAudio implementation.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#include "maxiFFT.h"
+#include "maximilian.h"
+#include <iostream>
+#include "math.h"
+
+using namespace std;
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//F F T
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+void maxiFFT::setup(int _fftSize, int _windowSize, int _hopSize) {
+ _fft = new fft(_fftSize);
+ fftSize = _fftSize;
+ windowSize = _windowSize;
+ bins = fftSize / 2;
+ hopSize = _hopSize;
+ buffer = (float *) malloc(fftSize * sizeof(float));
+ magnitudes = (float *) malloc(bins * sizeof(float));
+ magnitudesDB = (float *) malloc(bins * sizeof(float));
+ phases = (float *) malloc(bins * sizeof(float));
+ avgPower = new float;
+ memset(buffer, 0, fftSize * sizeof(float));
+ memset(magnitudes, 0, bins * sizeof(float));
+ memset(magnitudesDB, 0, bins * sizeof(float));
+ memset(phases, 0, bins * sizeof(float));
+ *avgPower = 0;
+ pos =windowSize - hopSize;
+ newFFT = 0;
+ window = (float*) malloc(fftSize * sizeof(float));
+ memset(window, 0, fftSize * sizeof(float));
+ fft::genWindow(3, windowSize, window);
+}
+
+bool maxiFFT::process(float value) {
+ //add value to buffer at current pos
+ buffer[pos++] = value;
+ //if buffer full, run fft
+ newFFT = pos == windowSize;
+ if (newFFT) {
+#if defined(__APPLE_CC__) && !defined(_NO_VDSP)
+ _fft->powerSpectrum_vdsp(0, buffer, window, magnitudes, phases);
+#else
+ _fft->powerSpectrum(0, buffer, window, magnitudes, phases);
+#endif
+ //shift buffer back by one hop size
+ memcpy(buffer, buffer + hopSize, (windowSize - hopSize) * sizeof(float));
+ //set the new data to zero (is this necessary?, it will get overwritten)
+ memset(buffer + windowSize - hopSize, 0, hopSize * sizeof(float));
+ //reset pos to start of hop
+ pos= windowSize - hopSize;
+ }
+ return newFFT;
+}
+
+float* maxiFFT::magsToDB() {
+#if defined(__APPLE_CC__) && !defined(_NO_VDSP)
+ _fft->convToDB_vdsp(magnitudes, magnitudesDB);
+#else
+ _fft->convToDB(magnitudes, magnitudesDB);
+#endif
+ return magnitudesDB;
+}
+
+float maxiFFT::spectralFlatness() {
+ float geometricMean=0, arithmaticMean=0;
+ for(int i=0; i < bins; i++) {
+ if (magnitudes[i] != 0)
+ geometricMean += log(magnitudes[i]);
+ arithmaticMean += magnitudes[i];
+ }
+ geometricMean = exp(geometricMean / (float)bins);
+ arithmaticMean /= (float)bins;
+ return arithmaticMean !=0 ? geometricMean / arithmaticMean : 0;
+}
+
+float maxiFFT::spectralCentroid() {
+ float x=0, y=0;
+ for(int i=0; i < bins; i++) {
+ x += fabs(magnitudes[i]) * (i+1);
+ y += fabs(magnitudes[i]);
+ }
+ return y != 0 ? x / y * ((float) maxiSettings::sampleRate / fftSize) : 0;
+}
+
+
+
+maxiFFT::~maxiFFT() {
+ delete _fft;
+ if (buffer)
+ delete[] buffer,magnitudes,phases,window, avgPower;
+}
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//I N V E R S E F F T
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+void maxiIFFT::setup(int _fftSize, int _windowSize, int _hopSize) {
+ _fft = new fft(_fftSize);
+ fftSize = _fftSize;
+ windowSize = _windowSize;
+ bins = fftSize / 2;
+ hopSize = _hopSize;
+ buffer = (float *) malloc(fftSize * sizeof(float));
+ ifftOut = (float *) malloc(fftSize * sizeof(float));
+ memset(buffer, 0, windowSize * sizeof(float));
+ pos =0;
+ window = (float*) malloc(fftSize * sizeof(float));
+ memset(window, 0, fftSize * sizeof(float));
+ fft::genWindow(3, windowSize, window);
+}
+
+float maxiIFFT::process(float *magnitudes, float *phases) {
+ if (0==pos) {
+ //do ifft
+ memset(ifftOut, 0, fftSize * sizeof(float));
+#if defined(__APPLE_CC__) && !defined(_NO_VDSP)
+ _fft->inversePowerSpectrum_vdsp(0, ifftOut, window, magnitudes, phases);
+#else
+ _fft->inversePowerSpectrum(0, ifftOut, window, magnitudes, phases);
+#endif
+ //add to output
+ //shift back by one hop
+ memcpy(buffer, buffer+hopSize, (fftSize - hopSize) * sizeof(float));
+ //clear the end chunk
+ memset(buffer + (fftSize - hopSize), 0, hopSize * sizeof(float));
+ //merge new output
+ for(int i=0; i < fftSize; i++) {
+ buffer[i] += ifftOut[i];
+ }
+ }
+
+ nextValue = buffer[pos];
+ //limit the values, this alg seems to spike occasionally (and break the audio drivers)
+ if (nextValue > 0.99999f) nextValue = 0.99999f;
+ if (nextValue < -0.99999f) nextValue = -0.99999f;
+ if (hopSize == ++pos ) {
+ pos=0;
+ }
+
+ return nextValue;
+}
+
+maxiIFFT::~maxiIFFT() {
+ delete _fft;
+ delete[] ifftOut, buffer, window;
+};
+
+
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//O C T A V E A N A L Y S E R
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+void maxiFFTOctaveAnalyzer::setup(float samplingRate, int nBandsInTheFFT, int nAveragesPerOctave){
+
+ samplingRate = samplingRate;
+ nSpectrum = nBandsInTheFFT;
+ spectrumFrequencySpan = (samplingRate / 2.0f) / (float)(nSpectrum);
+ nAverages = nBandsInTheFFT;
+ // fe: 2f for octave bands, sqrt(2) for half-octave bands, cuberoot(2) for third-octave bands, etc
+ if (nAveragesPerOctave==0) // um, wtf?
+ nAveragesPerOctave = 1;
+ nAveragesPerOctave = nAveragesPerOctave;
+ averageFrequencyIncrement = pow(2.0f, 1.0f/(float)(nAveragesPerOctave));
+ // this isn't currently configurable (used once here then no effect), but here's some reasoning:
+ // 43 is a good value if you want to approximate "computer" octaves: 44100/2/2/2/2/2/2/2/2/2/2
+ // 55 is a good value if you'd rather approximate A-440 octaves: 440/2/2/2
+ // 65 is a good value if you'd rather approximate "middle-C" octaves: ~262/2/2
+ // you could easily double it if you felt the lowest band was just rumble noise (as it probably is)
+ // but don't go much smaller unless you have a huge fft window size (see below for more why)
+ // keep in mind, if you change it, that the number of actual bands may change +/-1, and
+ // for some values, the last averaging band may not be very useful (may extend above nyquist)
+ firstOctaveFrequency = 55.0f;
+ // for each spectrum[] bin, calculate the mapping into the appropriate average[] bin.
+ // this gives us roughly log-sized averaging bins, subject to how "fine" the spectrum bins are.
+ // with more spectrum bins, you can better map into the averaging bins (especially at low
+ // frequencies) or use more averaging bins per octave. with an fft window size of 2048,
+ // sampling rate of 44100, and first octave around 55, that's about enough to do half-octave
+ // analysis. if you don't have enough spectrum bins to map adequately into averaging bins
+ // at the requested number per octave then you'll end up with "empty" averaging bins, where
+ // there is no spectrum available to map into it. (so... if you have "nonreactive" averages,
+ // either increase fft buffer size, or decrease number of averages per octave, etc)
+ spe2avg = new int[nSpectrum];
+ int avgidx = 0;
+ float averageFreq = firstOctaveFrequency; // the "top" of the first averaging bin
+ // we're looking for the "top" of the first spectrum bin, and i'm just sort of
+ // guessing that this is where it is (or possibly spectrumFrequencySpan/2?)
+ // ... either way it's probably close enough for these purposes
+ float spectrumFreq = spectrumFrequencySpan;
+ for (int speidx=0; speidx < nSpectrum; speidx++) {
+ while (spectrumFreq > averageFreq) {
+ avgidx++;
+ averageFreq *= averageFrequencyIncrement;
+ }
+ spe2avg[speidx] = avgidx;
+ spectrumFreq += spectrumFrequencySpan;
+ }
+ nAverages = avgidx;
+ averages = new float[nAverages];
+ peaks = new float[nAverages];
+ peakHoldTimes = new int[nAverages];
+ peakHoldTime = 0; // arbitrary
+ peakDecayRate = 0.9f; // arbitrary
+ linearEQIntercept = 1.0f; // unity -- no eq by default
+ linearEQSlope = 0.0f; // unity -- no eq by default
+}
+
+void maxiFFTOctaveAnalyzer::calculate(float * fftData){
+
+ int last_avgidx = 0; // tracks when we've crossed into a new averaging bin, so store current average
+ float sum = 0.0f; // running total of spectrum data
+ int count = 0; // count of spectrums accumulated (for averaging)
+ for (int speidx=0; speidx < nSpectrum; speidx++) {
+ count++;
+ sum += fftData[speidx] * (linearEQIntercept + (float)(speidx) * linearEQSlope);
+ int avgidx = spe2avg[speidx];
+ if (avgidx != last_avgidx) {
+
+ for (int j = last_avgidx; j < avgidx; j++){
+ averages[j] = sum / (float)(count);
+ }
+ count = 0;
+ sum = 0.0f;
+ }
+ last_avgidx = avgidx;
+ }
+ // the last average was probably not calculated...
+ if ((count > 0) && (last_avgidx < nAverages)){
+ averages[last_avgidx] = sum / (float)(count);
+ }
+
+ // update the peaks separately
+ for (int i=0; i < nAverages; i++) {
+ if (averages[i] >= peaks[i]) {
+ // save new peak level, also reset the hold timer
+ peaks[i] = averages[i];
+ peakHoldTimes[i] = peakHoldTime;
+ } else {
+ // current average does not exceed peak, so hold or decay the peak
+ if (peakHoldTimes[i] > 0) {
+ peakHoldTimes[i]--;
+ } else {
+ peaks[i] *= peakDecayRate;
+ }
+ }
+ }
+}
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maxiFFT.h b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maxiFFT.h
new file mode 100644
index 0000000..d099e84
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maxiFFT.h
@@ -0,0 +1,128 @@
+/*
+ * maximilian
+ * platform independent synthesis library using portaudio or rtaudio
+ *
+ * Created by Mick Grierson on 29/12/2009.
+ * Copyright 2009 Mick Grierson & Strangeloop Limited. All rights reserved.
+ * Thanks to the Goldsmiths Creative Computing Team.
+ * Special thanks to Arturo Castro for the PortAudio implementation.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#ifndef _MAXI_FFT
+#define _MAXI_FFT
+
+//#define _NO_VDSP //set this if you don't want to use apple's vDSP fft functions
+
+
+#include "fft.h"
+#include "stddef.h"
+
+class maxiFFT {
+
+public:
+ maxiFFT(){
+ _fft = NULL;
+ buffer = magnitudes = phases = window = avgPower = NULL;
+ };
+ ~maxiFFT();
+ void setup(int fftSize, int windowSize, int hopSize);
+ bool process(float value);
+ float* magsToDB();
+ float *magnitudes, *phases, *magnitudesDB;
+ float *avgPower;
+ int windowSize;
+ int hopSize;
+ int bins;
+
+ //features
+ float spectralFlatness();
+ float spectralCentroid();
+
+private:
+ float *buffer, *window;
+ int pos;
+ float nextValue;
+ int fftSize;
+ fft *_fft;
+ bool newFFT;
+
+};
+
+class maxiIFFT {
+
+public:
+ maxiIFFT(){
+ _fft=0;
+ };
+ ~maxiIFFT();
+ void setup(int fftSize, int windowSize, int hopSize);
+ float process(float *magnitudes, float *phases);
+
+private:
+ float *ifftOut, *buffer, *window;
+ int windowSize;
+ int bins;
+ int hopSize;
+ int pos;
+ float nextValue;
+ int fftSize;
+ fft *_fft;
+};
+
+
+class maxiFFTOctaveAnalyzer {
+/*based on code by David Bollinger, http://www.davebollinger.com/
+ */
+public:
+
+ float samplingRate; // sampling rate in Hz (needed to calculate frequency spans)
+ int nSpectrum; // number of spectrum bins in the fft
+ int nAverages; // number of averaging bins here
+ int nAveragesPerOctave; // number of averages per octave as requested by user
+ float spectrumFrequencySpan; // the "width" of an fft spectrum bin in Hz
+ float firstOctaveFrequency; // the "top" of the first averaging bin here in Hz
+ float averageFrequencyIncrement; // the root-of-two multiplier between averaging bin frequencies
+ float * averages; // the actual averages
+ float * peaks; // peaks of the averages, aka "maxAverages" in other implementations
+ int * peakHoldTimes; // how long to hold THIS peak meter? decay if == 0
+ int peakHoldTime; // how long do we hold peaks? (in fft frames)
+ float peakDecayRate; // how quickly the peaks decay: 0f=instantly .. 1f=not at all
+ int * spe2avg; // the mapping between spectrum[] indices and averages[] indices
+ // the fft's log equalizer() is no longer of any use (it would be nonsense to log scale
+ // the spectrum values into log-sized average bins) so here's a quick-and-dirty linear
+ // equalizer instead:
+ float linearEQSlope; // the rate of linear eq
+ float linearEQIntercept; // the base linear scaling used at the first averaging bin
+ // the formula is: spectrum[i] * (linearEQIntercept + i * linearEQSlope)
+ // so.. note that clever use of it can also provide a "gain" control of sorts
+ // (fe: set intercept to 2f and slope to 0f to double gain)
+
+ void setup(float samplingRate, int nBandsInTheFFT, int nAveragesPerOctave);
+
+ void calculate(float * fftData);
+
+};
+
+#endif \ No newline at end of file
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maxiGrains.cpp b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maxiGrains.cpp
new file mode 100644
index 0000000..951f3b5
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maxiGrains.cpp
@@ -0,0 +1,6 @@
+#include "maxiGrains.h"
+
+
+
+
+
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maxiGrains.h b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maxiGrains.h
new file mode 100644
index 0000000..d17ffc9
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maxiGrains.h
@@ -0,0 +1,443 @@
+
+
+#ifndef _MAXI_GRAINS_H
+#define _MAXI_GRAINS_H
+#include "maximilian.h"
+
+#if defined(__APPLE_CC__)
+#include "accelerate/accelerate.h";
+//Mac users can uncommment the line below to use Apple's accelerate framework for calculating grains. This gives ~300% speed improvement and better sound quality, but doesn't work well on all machines.
+//#define MAXIGRAINFAST
+#endif
+
+#define PI 3.1415926535897932384626433832795028841968
+
+#include <list>
+
+typedef unsigned long ulong;
+
+//window functions from http://en.wikipedia.org/wiki/Window_function#High-_and_moderate-resolution_windows
+
+struct hannWinFunctor {
+ inline double operator()(ulong windowLength, ulong windowPos) {
+ return 0.5 * (1.0 - cos((2.0 * PI * windowPos) / (windowLength - 1)));
+ }
+};
+
+//this window can produce clicks
+struct hammingWinFunctor {
+ inline double operator()(ulong windowLength, ulong windowPos) {
+ return 0.54 - (0.46 * cos((2.0 * PI * windowPos) / (windowLength - 1)));
+ }
+};
+
+
+struct cosineWinFunctor {
+ inline double operator()(ulong windowLength, ulong windowPos) {
+ return sin((PI * windowPos) / (windowLength - 1));
+ }
+};
+
+struct rectWinFunctor {
+ inline double operator()(ulong windowLength, ulong windowPos) {
+ return 1;
+ }
+};
+
+struct triangleWinFunctor {
+ inline double operator()(ulong windowLength, ulong windowPos) {
+ return (2.0 / (windowLength-1.0)) * (((windowLength-1.0)/2.0) - fabs(windowPos - ((windowLength-1.0)/2.0)));
+ }
+};
+
+struct triangleNZWinFunctor {
+ //non zero end points
+ inline double operator()(ulong windowLength, ulong windowPos) {
+ return (2.0 / windowLength) * ((windowLength/2.0) - fabs(windowPos - ((windowLength-1.0)/2.0)));
+ }
+};
+
+struct blackmanHarrisWinFunctor {
+ inline double operator()(ulong windowLength, ulong windowPos) {
+ return 0.35875 -
+ (0.48829 * cos((2 * PI * windowPos) / (windowLength-1))) +
+ (0.14128 * cos((4 * PI * windowPos) / (windowLength-1))) +
+ (0.01168 * cos((6 * PI * windowPos) / (windowLength-1)));
+ }
+};
+
+struct blackmanNutallWinFunctor {
+ inline double operator()(ulong windowLength, ulong windowPos) {
+ return 0.3635819 -
+ (0.4891775 * cos((2 * PI * windowPos) / (windowLength-1))) +
+ (0.1365995 * cos((4 * PI * windowPos) / (windowLength-1))) +
+ (0.0106411 * cos((6 * PI * windowPos) / (windowLength-1)));
+ }
+};
+
+template<typename F>
+class maxiGrainWindowCache {
+public:
+ unsigned int cacheSize;
+
+ maxiGrainWindowCache() {
+ cacheSize = maxiSettings::sampleRate / 2.0; //allocate mem for up to 500ms grains
+ cache = (double**)malloc(cacheSize * sizeof(double*));
+ for(int i=0; i < cacheSize; i++) {
+ cache[i] = NULL;
+ }
+ }
+
+ ~maxiGrainWindowCache() {
+ for(int i=0; i < cacheSize; i++) {
+ if(NULL != cache[i]) {
+ delete[] cache[i];
+ }
+ }
+ }
+
+ double* getWindow(const unsigned int length) {
+ if (NULL == cache[length]) {
+ cache[length] = (double*)malloc(length * sizeof(double));
+ for(int i=0; i < length; i++) {
+ cache[length][i] = F()(length, i);
+ }
+ }
+ return cache[length];
+ }
+
+private:
+ double** cache;
+
+};
+
+class maxiGrainBase {
+public:
+ virtual double play() = 0;
+ bool finished;
+};
+
+template<typename F>
+class maxiGrain : public maxiGrainBase {
+public:
+ maxiSample *sample;
+ double pos;
+ double dur;
+ ulong sampleStartPos;
+ ulong sampleIdx;
+ ulong sampleDur;
+ ulong sampleEndPos;
+ double freq;
+ double speed;
+ // F winFunc;
+ double inc;
+ double frequency;
+ double* window;
+#if defined(__APPLE_CC__) && defined(MAXIGRAINFAST)
+ double* grainSamples;
+#endif
+ /*
+ position between 0.0 and 1.0
+ duration in seconds
+ */
+ maxiGrain(maxiSample *sample, const double position, const double duration, const double speed, maxiGrainWindowCache<F> *windowCache) :sample(sample), pos(position), dur(duration), speed(speed)
+ {
+ sampleStartPos = sample->length * pos;
+ sampleDur = dur * (double)sample->mySampleRate;
+ sampleDurMinusOne = sampleDur - 1;
+ sampleIdx = 0;
+ finished = 0;
+ freq = 1.0 / dur;
+ sampleEndPos = sampleStartPos + sampleDur;
+ frequency = freq * speed;
+ if (frequency > 0) {
+ pos = sampleStartPos;
+ }else{
+ pos = sampleEndPos;
+ }
+ inc = sampleDur/(maxiSettings::sampleRate/frequency);
+ window = windowCache->getWindow(sampleDur);
+
+#if defined(__APPLE_CC__) && defined(MAXIGRAINFAST)
+ //premake the grain using fast vector functions, and quadratic interpolation
+ double *sourceData = (double*)malloc(sampleDur * sizeof(double));
+ short* buffer = (short *)sample->myData;
+ //convert sample to double data
+ vDSP_vflt16D(buffer + sampleStartPos, 1, sourceData, 1, min(sampleDur, sample->length - sampleStartPos));
+ //todo: wraping code
+
+ grainSamples = (double*)malloc(sampleDur * sizeof(double));
+ //make list of interpolation indexes
+ double* interpIndexes = (double*)malloc(sampleDur * sizeof(double));
+ double interpPos = sampleStartPos;
+ for(int i=0; i < sampleDur; i++) {
+ interpIndexes[i] = interpPos - sampleStartPos;
+ interpPos += fabs(inc);
+ }
+ vDSP_vqintD(sourceData, interpIndexes, 1, grainSamples, 1, sampleDur, sampleDur);
+ if (frequency < 0) {
+ vDSP_vrvrsD(grainSamples,1, sampleDur);
+ }
+ static double divFactor = 32767.0;
+ vDSP_vsdivD(grainSamples, 1, &divFactor, grainSamples, 1, sampleDur);
+ vDSP_vmulD(grainSamples, 1, window, 1, grainSamples, 1, sampleDur);
+ delete sourceData, interpIndexes;
+#endif
+ }
+
+ ~maxiGrain() {
+#if defined(__APPLE_CC__) && defined(MAXIGRAINFAST)
+ delete[] grainSamples;
+#endif
+ }
+
+ double play() {
+ double output = 0.0;
+ if (!finished) {
+#if defined(__APPLE_CC__) && defined(MAXIGRAINFAST)
+ output = grainSamples[sampleIdx];
+#else
+ envValue = window[sampleIdx];
+ double remainder;
+ long a,b;
+ short* buffer = (short *)sample->myData;
+ if (frequency >0.) {
+ pos += inc;
+ long posl = static_cast<long>(pos);
+ remainder = pos - posl;
+ a=posl++;
+ if (a>=sample->length) {
+ a=posl-1;
+ }
+ b = posl+2;
+ if (b>=sample->length) {
+ b=sample->length-1;
+ }
+ output = (double) ((1-remainder) * buffer[a] +
+ remainder * buffer[b])/32767;//linear interpolation
+ } else {
+ frequency=frequency-(frequency+frequency);
+ pos += inc;
+ long posl = static_cast<long>(pos);
+ remainder = pos - posl;
+ if (posl-1>=0) {
+ a=posl-1;
+ }
+ else {
+ a=0;
+ }
+ if (posl-2>=0) {
+ b=posl-2;
+ }
+ else {
+ b=0;
+ }
+ output = (double) ((-1-remainder) * buffer[a] +
+ remainder * buffer[b])/32767;//linear interpolation
+ }
+ output *= envValue;
+#endif
+ }
+ sampleIdx++;
+ if (sampleIdx >= sampleDur) finished = 1;
+ return output;
+ }
+
+private:
+ maxiGrain();
+ double envValue;
+ ulong sampleDurMinusOne;
+};
+
+
+typedef list<maxiGrainBase*> grainList;
+
+class maxiGrainPlayer {
+public:
+ grainList grains;
+ maxiSample *sample;
+
+ maxiGrainPlayer(maxiSample *sample) : sample(sample) {
+ }
+
+ void addGrain(maxiGrainBase *g) {
+ grains.push_back(g);
+ }
+
+ double play() {
+ double total = 0.0;
+ for(grainList::iterator it = grains.begin(); it != grains.end(); ++it) {
+ total += (*it)->play();
+ if ((*it)->finished) {
+ delete(*it);
+ grains.erase(it);
+ }
+ }
+ return total;
+ }
+};
+
+template<typename F>
+class maxiTimestretch {
+public:
+ double position;
+ long cycles;
+ maxiSample *sample;
+ maxiGrainPlayer *grainPlayer;
+ maxiGrainWindowCache<F> windowCache;
+ double randomOffset;
+
+ maxiTimestretch(maxiSample *sample) : sample(sample) {
+ position=0;
+ cycles=0;
+ grainPlayer = new maxiGrainPlayer(sample);
+ randomOffset=0;
+ }
+
+ ~maxiTimestretch() {
+ delete grainPlayer;
+ }
+
+ double play(double speed, double grainLength, int overlaps, double posMod=0.0) {
+ position = position + (1 * speed);
+ cycles++;
+ if (position > sample->length) position=0;
+ if (position < 0) position = sample->length;
+ double cycleLength = grainLength * maxiSettings::sampleRate / overlaps;
+ double cycleMod = fmod(cycles, cycleLength + randomOffset);
+ if (0 == floor(cycleMod)) {
+ // cout << cycleMod << endl;
+ speed = (speed > 0 ? 1 : -1);
+ // speed = speed - ((cycleMod / cycleLength) * 0.1);
+ maxiGrain<F> *g = new maxiGrain<F>(sample, max(min(1.0,(position / sample->length) + posMod),0.0), grainLength, speed, &windowCache);
+ grainPlayer->addGrain(g);
+ // cout << grainPlayer->grains.size() << endl;
+ // randomOffset = rand() % 10;
+ // randomOffset = rand() % 10;
+ }
+ return grainPlayer->play();
+ }
+
+ double play2(double pos, double grainLength, int overlaps) {
+ cycles++;
+ pos *= sample->length;
+ if (0 == floor(fmod(cycles, grainLength * maxiSettings::sampleRate / overlaps))) {
+ maxiGrain<F> *g = new maxiGrain<F>(sample, max(min(1.0,(pos / sample->length)),0.0), grainLength, 1, &windowCache);
+ grainPlayer->addGrain(g);
+ }
+ return grainPlayer->play();
+ }
+};
+
+//in maxiTimeStretch, the speed is either 1 or -1, and the actual speed value only affects the grain position
+//in maxiPitchShift, speed is uncoupled from position and allowed to set it's value incrementally, resulting in pitchshift.
+//with both high speed values and negative speed values there are some terrific artefacts!
+
+template<typename F>
+class maxiPitchShift {
+public:
+ double position;
+ long cycles;
+ maxiSample *sample;
+ maxiGrainPlayer *grainPlayer;
+ maxiGrainWindowCache<F> windowCache;
+ double randomOffset;
+
+ maxiPitchShift(maxiSample *sample) : sample(sample) {
+ position=0;
+ cycles=0;
+ grainPlayer = new maxiGrainPlayer(sample);
+ randomOffset=0;
+ }
+
+ ~maxiPitchShift() {
+ delete grainPlayer;
+ }
+
+ double play(double speed, double grainLength, int overlaps, double posMod=0.0) {
+ position = position + 1;
+ cycles++;
+ if (position > sample->length) position=0;
+ if (position < 0) position = sample->length;
+ double cycleLength = grainLength * maxiSettings::sampleRate / overlaps;
+ double cycleMod = fmod(cycles, cycleLength + randomOffset);
+ if (0 == floor(cycleMod)) {
+ // cout << cycleMod << endl;
+ //speed = (speed > 0 ? 1 : -1);
+ speed = speed - ((cycleMod / cycleLength) * 0.1);
+ maxiGrain<F> *g = new maxiGrain<F>(sample, max(min(1.0,(position / sample->length) + posMod),0.0), grainLength, speed, &windowCache);
+ grainPlayer->addGrain(g);
+ // cout << grainPlayer->grains.size() << endl;
+ // randomOffset = rand() % 10;
+ // randomOffset = rand() % 10;
+ }
+ return grainPlayer->play();
+ }
+
+ double play2(double pos, double grainLength, int overlaps) {
+ cycles++;
+ pos *= sample->length;
+ if (0 == floor(fmod(cycles, grainLength * maxiSettings::sampleRate / overlaps))) {
+ maxiGrain<F> *g = new maxiGrain<F>(sample, max(min(1.0,(pos / sample->length)),0.0), grainLength, 1, &windowCache);
+ grainPlayer->addGrain(g);
+ }
+ return grainPlayer->play();
+ }
+};
+
+//and here's maxiPitchStretch. Args to the play function are basically speed for 'pitch' and rate for playback rate.
+//the rest is the same.
+
+template<typename F>
+class maxiPitchStretch {
+public:
+ double position;
+ long cycles;
+ maxiSample *sample;
+ maxiGrainPlayer *grainPlayer;
+ maxiGrainWindowCache<F> windowCache;
+ double randomOffset;
+
+ maxiPitchStretch(maxiSample *sample) : sample(sample) {
+ position=0;
+ cycles=0;
+ grainPlayer = new maxiGrainPlayer(sample);
+ randomOffset=0;
+ }
+
+ ~maxiPitchStretch() {
+ delete grainPlayer;
+ }
+
+ double play(double speed, double rate, double grainLength, int overlaps, double posMod=0.0) {
+ position = position + (1 * rate);
+ cycles++;
+ if (position > sample->length) position=0;
+ if (position < 0) position = sample->length;
+ double cycleLength = grainLength * maxiSettings::sampleRate / overlaps;
+ double cycleMod = fmod(cycles, cycleLength + randomOffset);
+ if (0 == floor(cycleMod)) {
+ // cout << cycleMod << endl;
+ //speed = (speed > 0 ? 1 : -1);
+ speed = speed - ((cycleMod / cycleLength) * 0.1);
+ maxiGrain<F> *g = new maxiGrain<F>(sample, max(min(1.0,(position / sample->length) + posMod),0.0), grainLength, speed, &windowCache);
+ grainPlayer->addGrain(g);
+ // cout << grainPlayer->grains.size() << endl;
+ // randomOffset = rand() % 10;
+ // randomOffset = rand() % 10;
+ }
+ return grainPlayer->play();
+ }
+
+ double play2(double pos, double grainLength, int overlaps) {
+ cycles++;
+ pos *= sample->length;
+ if (0 == floor(fmod(cycles, grainLength * maxiSettings::sampleRate / overlaps))) {
+ maxiGrain<F> *g = new maxiGrain<F>(sample, max(min(1.0,(pos / sample->length)),0.0), grainLength, 1, &windowCache);
+ grainPlayer->addGrain(g);
+ }
+ return grainPlayer->play();
+ }
+};
+
+#endif \ No newline at end of file
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maxiMFCC.cpp b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maxiMFCC.cpp
new file mode 100644
index 0000000..e72fd75
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maxiMFCC.cpp
@@ -0,0 +1,78 @@
+/*
+ * maxiMFCC.cpp
+ * mfccs
+ *
+ * Created by Chris on 08/03/2011.
+ * Copyright 2011 Goldsmiths Creative Computing. All rights reserved.
+ *
+ */
+
+#include "maxiMFCC.h"
+
+
+
+template <>
+void maxiMFCCAnalyser<double>::dct(double *mfccs) {
+ vDSP_mmulD(melBands, 1, dctMatrix, 1, mfccs, 1, 1, numCoeffs, numFilters);
+ double n = (double) numCoeffs;
+ vDSP_vsdivD(mfccs, 1, &n, mfccs, 1, numCoeffs);
+}
+
+template <>
+void maxiMFCCAnalyser<float>::dct(float *mfccs) {
+ vDSP_mmul(melBands, 1, dctMatrix, 1, mfccs, 1, 1, numCoeffs, numFilters);
+ float n = (float) numCoeffs;
+ vDSP_vsdiv(mfccs, 1, &n, mfccs, 1, numCoeffs);
+}
+
+template <>
+void maxiMFCCAnalyser<double>::melFilterAndLogSquare(float* powerSpectrum) {
+#ifdef __APPLE_CC__
+ //conv to double
+ vDSP_vspdp(powerSpectrum, 1, doubleSpec, 1, numBins);
+ // vDSP_mmulD(doubleSpec, 1, melFilters, 1, melBands, 1, 1, 42, 512);
+ vDSP_mmulD(doubleSpec, 1, melFilters, 1, melBands, 1, 1, numFilters, numBins);
+#endif
+ melFilterAndLogSq_Part2();
+}
+
+
+template <>
+void maxiMFCCAnalyser<float>::melFilterAndLogSquare(float* powerSpectrum) {
+#ifdef __APPLE_CC__
+ vDSP_mmul(powerSpectrum, 1, melFilters, 1, melBands, 1, 1, numFilters, numBins);
+#endif
+ melFilterAndLogSq_Part2();
+}
+
+template <class T>
+void maxiMFCCAnalyser<T>::melFilterAndLogSq_Part2() {
+#ifdef __APPLE_CC__
+#else
+ for (int filter = 0;filter < numFilters;filter++) {
+ melBands[filter] = 0.0;
+ for (int bin=0;bin<numBins;bin++) {
+ // int idx = (numBins * filter) + bin;
+ int idx = filter + (bin * numFilters);
+ // melBands[filter] += (melFilters[filter][bin] * powerSpectrum[bin]);
+ melBands[filter] += (melFilters[idx] * powerSpectrum[bin]);
+ }
+ }
+#endif
+ for(int filter=0; filter < numFilters; filter++) {
+ // log the square
+ melBands[filter] = melBands[filter] > 0.000001 ? log(melBands[filter] * melBands[filter]) : 0.0;
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maxiMFCC.h b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maxiMFCC.h
new file mode 100644
index 0000000..60bfe04
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maxiMFCC.h
@@ -0,0 +1,204 @@
+/*
+ * maxiMFCC.h
+ * mfccs
+ *
+ * Created by Chris on 08/03/2011.
+ * Copyright 2011 Goldsmiths Creative Computing. All rights reserved.
+ *
+
+ Based on Matthew Yee-King's MFCCMYK java class
+ */
+
+#pragma once
+#pragma pack(16)
+
+#include "maxiFFT.h"
+#include <math.h>
+#include <iostream>
+#ifdef __APPLE_CC__
+#include <Accelerate/Accelerate.h>
+#endif
+
+using namespace std;
+
+
+// implements this formula:
+// mel = 2595 log10(Hz/700 + 1)
+inline double hzToMel(double hz){
+ return 2595.0 * (log10(hz/700.0 + 1.0));
+}
+
+// implements this formula
+// Hz = 700 (10^(mel/2595) - 1)
+inline double melToHz(double mel){
+ return 700.0 * (pow(10, mel/2595.0) - 1.0);
+}
+
+template <class T>
+class maxiMFCCAnalyser {
+public:
+ T *melBands;
+ maxiMFCCAnalyser():melFilters(NULL),dctMatrix(NULL), melBands(NULL){};
+ ~maxiMFCCAnalyser() {
+ if (melFilters) {
+ delete[] melFilters;
+ delete[] melBands;
+ delete[] dctMatrix;
+#ifdef __APPLE_CC__
+ delete doubleSpec;
+#endif
+ }
+ }
+
+ void setup(unsigned int numBins, unsigned int numFilters, unsigned int numCoeffs, double minFreq, double maxFreq, unsigned int sampleRate)
+ {
+ this->numFilters = numFilters;
+ this->numCoeffs = numCoeffs;
+ this->minFreq = minFreq;
+ this->maxFreq = maxFreq;
+ this->sampleRate = sampleRate;
+ this->numBins = numBins;
+ melFilters = NULL;
+ melBands = (T*) malloc(sizeof(T) * numFilters);
+#ifdef __APPLE_CC__
+ doubleSpec = (T*)malloc(sizeof(T) * numBins);
+#endif
+ //create new matrix
+ dctMatrix = (T*)malloc(sizeof(T) * numCoeffs * numFilters);
+ calcMelFilterBank(sampleRate, numBins);
+ createDCTCoeffs();
+ }
+ void mfcc(float* powerSpectrum, T *mfccs) {
+ melFilterAndLogSquare(powerSpectrum);
+ dct(mfccs);
+ }
+
+private:
+ unsigned int numFilters, numCoeffs;
+ double minFreq, maxFreq;
+ unsigned int sampleRate;
+ T *melFilters;
+ unsigned int numBins;
+ T *dctMatrix;
+#ifdef __APPLE_CC__
+ T *doubleSpec;
+#endif
+
+#ifdef __APPLE_CC__
+ void dct(T *mfccs); //define later
+#else
+ void dct(T *mfccs) {
+ for(int i=0; i < numCoeffs; i++) {
+ mfccs[i] = 0.0;
+ }
+ for(int i=0; i < numCoeffs; i++ ) {
+ for(int j=0; j < numFilters; j++) {
+ int idx = i + (j * numCoeffs);
+ mfccs[i] += (dctMatrix[idx] * melBands[j]);
+ }
+ }
+ for(int i=0; i < numCoeffs; i++) {
+ mfccs[i] /= numCoeffs;
+ }
+ }
+#endif
+
+ void melFilterAndLogSquare(float* powerSpectrum);
+ void melFilterAndLogSq_Part2();
+
+
+ void calcMelFilterBank(double sampleRate, int numBins) {
+
+ double mel, dMel, maxMel, minMel, nyquist, binFreq, start, end, thisF, nextF, prevF;
+ int numValidBins;
+
+ // ignore bins over nyquist
+ numValidBins = numBins;
+
+ nyquist = sampleRate/2;
+ if (maxFreq > nyquist) {
+ maxFreq = nyquist;
+ }
+
+ maxMel = hzToMel(maxFreq);
+ minMel = hzToMel(minFreq);
+
+ dMel = (maxMel - minMel) / (numFilters + 2 - 1);
+
+ T *filtPos = (T*) malloc(sizeof(double) * (numFilters + 2));
+
+ // first generate an array of start and end freqs for each triangle
+ mel = minMel;
+ for (int i=0;i<numFilters + 2;i++) {
+ // start of the triangle
+ filtPos[i] = melToHz(mel);
+ // std::cout << "[" << i << "] MFCC: centre is at " <<filtPos[i]<<"hz "<<mel<<" mels" << endl;
+ mel += dMel;
+ }
+ // now generate the coefficients for the mag spectrum
+ melFilters = (T*) malloc(sizeof(T) * numFilters * numValidBins);
+
+ for (int filter = 1; filter < numFilters; filter++) {
+ for (int bin=0;bin<numValidBins;bin++) {
+ // frequency this bin represents
+ binFreq = (T) sampleRate / (T) numValidBins * (T) bin;
+ thisF = filtPos[filter];
+ nextF = filtPos[filter+1];
+ prevF = filtPos[filter-1];
+ int idx = filter + (bin * numFilters);
+ if (binFreq > nextF || binFreq < prevF) {
+ // outside this filter
+ melFilters[idx] = 0;
+ //cout << "MFCCMYK: filter at " <<thisF << " bin at " <<binFreq <<" coeff " <<melFilters[filter][bin] << endl;
+ }
+ else {
+ T height = 2.0 / (nextF - prevF);
+
+ if (binFreq < thisF) {
+ // up
+ start = prevF;
+ end = thisF;
+ melFilters[idx] = (binFreq - start) * (height / (thisF - start));
+ }
+ else {
+ // down
+ start = thisF;
+ end = nextF;
+ melFilters[idx] = height + ((binFreq - thisF) * (-height /(nextF - thisF)));
+ }
+ // cout << "MFCCMYK: filter at " <<thisF << " bin at " <<binFreq <<" coeff " <<melFilters[filter][bin] << endl;
+ //cout << "MFCCMYK: filter at " <<thisF << " bin at " <<binFreq <<" coeff " <<melFilters[idx] << endl;
+ }
+ }
+ }
+ }
+ void createDCTCoeffs() {
+ T k = 3.14159265358979323846/numFilters;
+ T w1 = 1.0/(sqrt(numFilters));
+ T w2 = sqrt(2.0/numFilters);
+
+
+ //generate dct matrix
+ for(int i = 0; i < numCoeffs; i++)
+ {
+ for(int j = 0; j < numFilters; j++)
+ {
+ int idx = i + (j * numCoeffs);
+ if(i == 0)
+ dctMatrix[idx]= w1 * cos(k * (i+1) * (j + 0.5));
+ else
+ dctMatrix[idx] = w2 * cos(k * (i+1) * (j + 0.5));
+ }
+ }
+
+
+ }
+
+
+
+};
+
+
+
+typedef maxiMFCCAnalyser<double> maxiMFCC;
+//typedef maxiMFCCAnalyser<float> maxiFloatMFCC;
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maximilian.cpp b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maximilian.cpp
new file mode 100644
index 0000000..63b9a34
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maximilian.cpp
@@ -0,0 +1,1028 @@
+
+/*
+ * maximilian.cpp
+ * platform independent synthesis library using portaudio or rtaudio
+ *
+ * Created by Mick Grierson on 29/12/2009.
+ * Copyright 2009 Mick Grierson & Strangeloop Limited. All rights reserved.
+ * Thanks to the Goldsmiths Creative Computing Team.
+ * Special thanks to Arturo Castro for the PortAudio implementation.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#include "maximilian.h"
+#include "math.h"
+
+
+//int channels=2;
+//int samplerate=44100;
+//int buffersize=1024;
+float chandiv= 1;
+
+int maxiSettings::sampleRate = 44100;
+int maxiSettings::channels = 2;
+int maxiSettings::bufferSize = 1024;
+
+double sineBuffer[514]={0,0.012268,0.024536,0.036804,0.049042,0.06131,0.073547,0.085785,0.097992,0.1102,0.12241,0.13455,0.1467,0.15884,0.17093,0.18301,0.19507,0.20709,0.21909,0.23105,0.24295,0.25485,0.26669,0.2785,0.29025,0.30197,0.31366,0.32529,0.33685,0.34839,0.35986,0.37128,0.38266,0.39395,0.40521,0.41641,0.42752,0.4386,0.44958,0.46051,0.47137,0.48215,0.49286,0.50351,0.51407,0.52457,0.53497,0.54529,0.55554,0.5657,0.57578,0.58575,0.59567,0.60547,0.6152,0.62482,0.63437,0.6438,0.65314,0.66238,0.67151,0.68057,0.68951,0.69833,0.70706,0.7157,0.72421,0.7326,0.74091,0.74908,0.75717,0.76514,0.77298,0.7807,0.7883,0.79581,0.80316,0.81042,0.81754,0.82455,0.83142,0.8382,0.84482,0.85132,0.8577,0.86392,0.87006,0.87604,0.88187,0.8876,0.89319,0.89862,0.90396,0.90912,0.91415,0.91907,0.92383,0.92847,0.93295,0.93729,0.9415,0.94556,0.94949,0.95325,0.95691,0.96039,0.96375,0.96692,0.97,0.9729,0.97565,0.97827,0.98074,0.98306,0.98523,0.98724,0.98914,0.99084,0.99243,0.99387,0.99515,0.99628,0.99725,0.99808,0.99875,0.99927,0.99966,0.99988,0.99997,0.99988,0.99966,0.99927,0.99875,0.99808,0.99725,0.99628,0.99515,0.99387,0.99243,0.99084,0.98914,0.98724,0.98523,0.98306,0.98074,0.97827,0.97565,0.9729,0.97,0.96692,0.96375,0.96039,0.95691,0.95325,0.94949,0.94556,0.9415,0.93729,0.93295,0.92847,0.92383,0.91907,0.91415,0.90912,0.90396,0.89862,0.89319,0.8876,0.88187,0.87604,0.87006,0.86392,0.8577,0.85132,0.84482,0.8382,0.83142,0.82455,0.81754,0.81042,0.80316,0.79581,0.7883,0.7807,0.77298,0.76514,0.75717,0.74908,0.74091,0.7326,0.72421,0.7157,0.70706,0.69833,0.68951,0.68057,0.67151,0.66238,0.65314,0.6438,0.63437,0.62482,0.6152,0.60547,0.59567,0.58575,0.57578,0.5657,0.55554,0.54529,0.53497,0.52457,0.51407,0.50351,0.49286,0.48215,0.47137,0.46051,0.44958,0.4386,0.42752,0.41641,0.40521,0.39395,0.38266,0.37128,0.35986,0.34839,0.33685,0.32529,0.31366,0.30197,0.29025,0.2785,0.26669,0.25485,0.24295,0.23105,0.21909,0.20709,0.19507,0.18301,0.17093,0.15884,0.1467,0.13455,0.12241,0.1102,0.097992,0.085785,0.073547,0.06131,0.049042,0.036804,0.024536,0.012268,0,-0.012268,-0.024536,-0.036804,-0.049042,-0.06131,-0.073547,-0.085785,-0.097992,-0.1102,-0.12241,-0.13455,-0.1467,-0.15884,-0.17093,-0.18301,-0.19507,-0.20709,-0.21909,-0.23105,-0.24295,-0.25485,-0.26669,-0.2785,-0.29025,-0.30197,-0.31366,-0.32529,-0.33685,-0.34839,-0.35986,-0.37128,-0.38266,-0.39395,-0.40521,-0.41641,-0.42752,-0.4386,-0.44958,-0.46051,-0.47137,-0.48215,-0.49286,-0.50351,-0.51407,-0.52457,-0.53497,-0.54529,-0.55554,-0.5657,-0.57578,-0.58575,-0.59567,-0.60547,-0.6152,-0.62482,-0.63437,-0.6438,-0.65314,-0.66238,-0.67151,-0.68057,-0.68951,-0.69833,-0.70706,-0.7157,-0.72421,-0.7326,-0.74091,-0.74908,-0.75717,-0.76514,-0.77298,-0.7807,-0.7883,-0.79581,-0.80316,-0.81042,-0.81754,-0.82455,-0.83142,-0.8382,-0.84482,-0.85132,-0.8577,-0.86392,-0.87006,-0.87604,-0.88187,-0.8876,-0.89319,-0.89862,-0.90396,-0.90912,-0.91415,-0.91907,-0.92383,-0.92847,-0.93295,-0.93729,-0.9415,-0.94556,-0.94949,-0.95325,-0.95691,-0.96039,-0.96375,-0.96692,-0.97,-0.9729,-0.97565,-0.97827,-0.98074,-0.98306,-0.98523,-0.98724,-0.98914,-0.99084,-0.99243,-0.99387,-0.99515,-0.99628,-0.99725,-0.99808,-0.99875,-0.99927,-0.99966,-0.99988,-0.99997,-0.99988,-0.99966,-0.99927,-0.99875,-0.99808,-0.99725,-0.99628,-0.99515,-0.99387,-0.99243,-0.99084,-0.98914,-0.98724,-0.98523,-0.98306,-0.98074,-0.97827,-0.97565,-0.9729,-0.97,-0.96692,-0.96375,-0.96039,-0.95691,-0.95325,-0.94949,-0.94556,-0.9415,-0.93729,-0.93295,-0.92847,-0.92383,-0.91907,-0.91415,-0.90912,-0.90396,-0.89862,-0.89319,-0.8876,-0.88187,-0.87604,-0.87006,-0.86392,-0.8577,-0.85132,-0.84482,-0.8382,-0.83142,-0.82455,-0.81754,-0.81042,-0.80316,-0.79581,-0.7883,-0.7807,-0.77298,-0.76514,-0.75717,-0.74908,-0.74091,-0.7326,-0.72421,-0.7157,-0.70706,-0.69833,-0.68951,-0.68057,-0.67151,-0.66238,-0.65314,-0.6438,-0.63437,-0.62482,-0.6152,-0.60547,-0.59567,-0.58575,-0.57578,-0.5657,-0.55554,-0.54529,-0.53497,-0.52457,-0.51407,-0.50351,-0.49286,-0.48215,-0.47137,-0.46051,-0.44958,-0.4386,-0.42752,-0.41641,-0.40521,-0.39395,-0.38266,-0.37128,-0.35986,-0.34839,-0.33685,-0.32529,-0.31366,-0.30197,-0.29025,-0.2785,-0.26669,-0.25485,-0.24295,-0.23105,-0.21909,-0.20709,-0.19507,-0.18301,-0.17093,-0.15884,-0.1467,-0.13455,-0.12241,-0.1102,-0.097992,-0.085785,-0.073547,-0.06131,-0.049042,-0.036804,-0.024536,-0.012268,0,0.012268
+};
+
+double mtofarray[129]={0, 8.661957, 9.177024, 9.722718, 10.3, 10.913383, 11.562325, 12.25, 12.978271, 13.75, 14.567617, 15.433853, 16.351599, 17.323914, 18.354048, 19.445436, 20.601723, 21.826765, 23.124651, 24.5, 25.956543, 27.5, 29.135235, 30.867706, 32.703197, 34.647827, 36.708096, 38.890873, 41.203445, 43.65353, 46.249302, 49., 51.913086, 55., 58.27047, 61.735413, 65.406395, 69.295654, 73.416191, 77.781746, 82.406891, 87.30706, 92.498604, 97.998856, 103.826172, 110., 116.540939, 123.470825, 130.81279, 138.591309, 146.832382, 155.563492, 164.813782, 174.61412, 184.997208, 195.997711, 207.652344, 220., 233.081879, 246.94165, 261.62558, 277.182617,293.664764, 311.126984, 329.627563, 349.228241, 369.994415, 391.995422, 415.304688, 440., 466.163757, 493.883301, 523.25116, 554.365234, 587.329529, 622.253967, 659.255127, 698.456482, 739.988831, 783.990845, 830.609375, 880., 932.327515, 987.766602, 1046.502319, 1108.730469, 1174.659058, 1244.507935, 1318.510254, 1396.912964, 1479.977661, 1567.981689, 1661.21875, 1760., 1864.655029, 1975.533203, 2093.004639, 2217.460938, 2349.318115, 2489.015869, 2637.020508, 2793.825928, 2959.955322, 3135.963379, 3322.4375, 3520., 3729.31, 3951.066406, 4186.009277, 4434.921875, 4698.63623, 4978.031738, 5274.041016, 5587.651855, 5919.910645, 6271.926758, 6644.875, 7040., 7458.620117, 7902.132812, 8372.018555, 8869.84375, 9397.272461, 9956.063477, 10548.082031, 11175.303711, 11839.821289, 12543.853516, 13289.75};
+
+void setup();//use this to do any initialisation if you want.
+
+void play(double *channels);//run dac!
+
+maxiOsc::maxiOsc(){
+ phase = 0.0;
+ // memset(phases,0,500);
+ // memset(freqs,0,500);
+}
+
+double maxiOsc::noise() {
+ //always the same unless you seed it.
+ float r = rand()/(float)RAND_MAX;
+ output=r*2-1;
+ return(output);
+}
+
+void maxiOsc::phaseReset(double phaseIn) {
+ phase=phaseIn;
+
+}
+
+double maxiOsc::sinewave(double frequency) {
+ output=sin (phase*(TWOPI));
+ if ( phase >= 1.0 ) phase -= 1.0;
+ phase += (1./(maxiSettings::sampleRate/(frequency)));
+ return(output);
+
+}
+
+double maxiOsc::sinebuf4(double frequency) {
+ double remainder;
+ double a,b,c,d,a1,a2,a3;
+ phase += 512./(maxiSettings::sampleRate/(frequency));
+ if ( phase >= 511 ) phase -=512;
+ remainder = phase - floor(phase);
+
+ if (phase==0) {
+ a=sineBuffer[(long) 512];
+ b=sineBuffer[(long) phase];
+ c=sineBuffer[(long) phase+1];
+ d=sineBuffer[(long) phase+2];
+
+ } else {
+ a=sineBuffer[(long) phase-1];
+ b=sineBuffer[(long) phase];
+ c=sineBuffer[(long) phase+1];
+ d=sineBuffer[(long) phase+2];
+
+ }
+
+ a1 = 0.5f * (c - a);
+ a2 = a - 2.5 * b + 2.f * c - 0.5f * d;
+ a3 = 0.5f * (d - a) + 1.5f * (b - c);
+ output = double (((a3 * remainder + a2) * remainder + a1) * remainder + b);
+ return(output);
+}
+
+double maxiOsc::sinebuf(double frequency) {
+ double remainder;
+ phase += 512./(maxiSettings::sampleRate/(frequency*chandiv));
+ if ( phase >= 511 ) phase -=512;
+ remainder = phase - floor(phase);
+ output = (double) ((1-remainder) * sineBuffer[1+ (long) phase] + remainder * sineBuffer[2+(long) phase]);
+ return(output);
+}
+
+double maxiOsc::coswave(double frequency) {
+ output=cos (phase*(TWOPI));
+ if ( phase >= 1.0 ) phase -= 1.0;
+ phase += (1./(maxiSettings::sampleRate/(frequency)));
+ return(output);
+
+}
+
+double maxiOsc::phasor(double frequency) {
+ output=phase;
+ if ( phase >= 1.0 ) phase -= 1.0;
+ phase += (1./(maxiSettings::sampleRate/(frequency)));
+ return(output);
+}
+
+double maxiOsc::square(double frequency) {
+ if (phase<0.5) output=-1;
+ if (phase>0.5) output=1;
+ if ( phase >= 1.0 ) phase -= 1.0;
+ phase += (1./(maxiSettings::sampleRate/(frequency)));
+ return(output);
+}
+
+double maxiOsc::pulse(double frequency, double duty) {
+ if (duty<0.) duty=0;
+ if (duty>1.) duty=1;
+ if ( phase >= 1.0 ) phase -= 1.0;
+ phase += (1./(maxiSettings::sampleRate/(frequency)));
+ if (phase<duty) output=-1.;
+ if (phase>duty) output=1.;
+ return(output);
+}
+
+double maxiOsc::phasor(double frequency, double startphase, double endphase) {
+ output=phase;
+ if (phase<startphase) {
+ phase=startphase;
+ }
+ if ( phase >= endphase ) phase = startphase;
+ phase += ((endphase-startphase)/(maxiSettings::sampleRate/(frequency)));
+ return(output);
+}
+
+
+double maxiOsc::saw(double frequency) {
+
+ output=phase;
+ if ( phase >= 1.0 ) phase -= 2.0;
+ phase += (1./(maxiSettings::sampleRate/(frequency)));
+ return(output);
+
+}
+
+double maxiOsc::triangle(double frequency) {
+ if ( phase >= 1.0 ) phase -= 1.0;
+ phase += (1./(maxiSettings::sampleRate/(frequency)));
+ if (phase <= 0.5 ) {
+ output =((phase)*4)-1;
+ } else {
+ output =((0.5-phase)*4)-1;
+ }
+ return(output);
+
+}
+
+//I like this.
+double maxiEnvelope::line(int numberofsegments,double segments[1000]) {
+ if (isPlaying==1) {//only make a sound once you've been triggered
+
+ period=2./(segments[valindex+1]*0.004);
+ nextval=segments[valindex+2];
+ currentval=segments[valindex];
+ if (currentval-amplitude > 0.0000001 && valindex < numberofsegments) {
+ amplitude += ((currentval-startval)/(maxiSettings::sampleRate/period));
+ } else if (currentval-amplitude < -0.0000001 && valindex < numberofsegments) {
+ amplitude -= (((currentval-startval)*(-1))/(maxiSettings::sampleRate/period));
+ } else if (valindex >numberofsegments-1) {
+ valindex=numberofsegments-2;
+ } else {
+ valindex=valindex+2;
+ startval=currentval;
+ }
+ output=amplitude;
+
+ }
+ else {
+ output=0;
+
+ }
+ return(output);
+}
+
+//and this
+void maxiEnvelope::trigger(int index, double amp) {
+ isPlaying=1;//ok the envelope is being used now.
+ valindex=index;
+ amplitude=amp;
+
+}
+
+//and this
+
+maxiDelayline::maxiDelayline() {
+ memset( memory, 0, 88200*sizeof (double) );
+
+}
+
+
+double maxiDelayline::dl(double input, int size, double feedback) {
+ if ( phase >=size ) {
+ phase = 0;
+ }
+ output=memory[phase];
+ memory[phase]=(memory[phase]*feedback)+(input*feedback)*0.5;
+ phase+=1;
+ return(output);
+
+}
+
+double maxiDelayline::dl(double input, int size, double feedback, int position) {
+ if ( phase >=size ) phase = 0;
+ if ( position >=size ) position = 0;
+ output=memory[position];
+ memory[phase]=(memory[phase]*feedback)+(input*feedback)*chandiv;
+ phase+=1;
+ return(output);
+
+}
+
+
+//I particularly like these. cutoff between 0 and 1
+double maxiFilter::lopass(double input, double cutoff) {
+ output=outputs[0] + cutoff*(input-outputs[0]);
+ outputs[0]=output;
+ return(output);
+}
+//as above
+double maxiFilter::hipass(double input, double cutoff) {
+ output=input-(outputs[0] + cutoff*(input-outputs[0]));
+ outputs[0]=output;
+ return(output);
+}
+//awesome. cuttof is freq in hz. res is between 1 and whatever. Watch out!
+double maxiFilter::lores(double input,double cutoff1, double resonance) {
+ cutoff=cutoff1*0.5;
+ if (cutoff<10) cutoff=10;
+ if (cutoff>(maxiSettings::sampleRate*0.5)) cutoff=(maxiSettings::sampleRate*0.5);
+ if (resonance<1.) resonance = 1.;
+ z=cos(TWOPI*cutoff/maxiSettings::sampleRate);
+ c=2-2*z;
+ double r=(sqrt(2.0)*sqrt(-pow((z-1.0),3.0))+resonance*(z-1))/(resonance*(z-1));
+ x=x+(input-y)*c;
+ y=y+x;
+ x=x*r;
+ output=y;
+ return(output);
+}
+
+//working hires filter
+double maxiFilter::hires(double input,double cutoff1, double resonance) {
+ cutoff=cutoff1*0.5;
+ if (cutoff<10) cutoff=10;
+ if (cutoff>(maxiSettings::sampleRate*0.5)) cutoff=(maxiSettings::sampleRate*0.5);
+ if (resonance<1.) resonance = 1.;
+ z=cos(TWOPI*cutoff/maxiSettings::sampleRate);
+ c=2-2*z;
+ double r=(sqrt(2.0)*sqrt(-pow((z-1.0),3.0))+resonance*(z-1))/(resonance*(z-1));
+ x=x+(input-y)*c;
+ y=y+x;
+ x=x*r;
+ output=input-y;
+ return(output);
+}
+
+//This works a bit. Needs attention.
+double maxiFilter::bandpass(double input,double cutoff1, double resonance) {
+ cutoff=cutoff1;
+ if (cutoff>(maxiSettings::sampleRate*0.5)) cutoff=(maxiSettings::sampleRate*0.5);
+ if (resonance>=1.) resonance=0.999999;
+ z=cos(TWOPI*cutoff/maxiSettings::sampleRate);
+ inputs[0] = (1-resonance)*(sqrt(resonance*(resonance-4.0*pow(z,2.0)+2.0)+1));
+ inputs[1] = 2*z*resonance;
+ inputs[2] = pow((resonance*-1),2);
+
+ output=inputs[0]*input+inputs[1]*outputs[1]+inputs[2]*outputs[2];
+ outputs[2]=outputs[1];
+ outputs[1]=output;
+ return(output);
+}
+
+//stereo bus
+double *maxiMix::stereo(double input,double two[2],double x) {
+ if (x>1) x=1;
+ if (x<0) x=0;
+ two[0]=input*sqrt(1.0-x);
+ two[1]=input*sqrt(x);
+ return(two);
+}
+
+//quad bus
+double *maxiMix::quad(double input,double four[4],double x,double y) {
+ if (x>1) x=1;
+ if (x<0) x=0;
+ if (y>1) y=1;
+ if (y<0) y=0;
+ four[0]=input*sqrt((1.0-x)*y);
+ four[1]=input*sqrt((1.0-x)*(1.0-y));
+ four[2]=input*sqrt(x*y);
+ four[3]=input*sqrt(x*(1.0-y));
+ return(four);
+}
+
+//ambisonic bus
+double *maxiMix::ambisonic(double input,double eight[8],double x,double y,double z) {
+ if (x>1) x=1;
+ if (x<0) x=0;
+ if (y>1) y=1;
+ if (y<0) y=0;
+ if (z>1) y=1;
+ if (z<0) y=0;
+ eight[0]=input*(sqrt((1.0-x)*y)*1.0-z);
+ eight[1]=input*(sqrt((1.0-x)*(1.0-y))*1.0-z);
+ eight[2]=input*(sqrt(x*y)*1.0-z);
+ eight[3]=input*(sqrt(x*(1.0-y))*1.0-z);
+ eight[4]=input*(sqrt((1.0-x)*y)*z);
+ eight[5]=input*(sqrt((1.0-x)*(1.0-y))*z);
+ eight[6]=input*sqrt((x*y)*z);
+ eight[7]=input*sqrt((x*(1.0-y))*z);
+ return(eight);
+}
+
+
+bool maxiSample::load(string fileName, int channel) {
+ myPath = fileName;
+ readChannel=channel;
+ return read();
+}
+
+void maxiSample::trigger() {
+ position = 0;
+}
+
+bool maxiSample::read()
+{
+ bool result;
+ ifstream inFile( myPath.c_str(), ios::in | ios::binary);
+ result = inFile;
+ if (inFile) {
+ bool datafound = false;
+ inFile.seekg(4, ios::beg);
+ inFile.read( (char*) &myChunkSize, 4 ); // read the ChunkSize
+
+ inFile.seekg(16, ios::beg);
+ inFile.read( (char*) &mySubChunk1Size, 4 ); // read the SubChunk1Size
+
+ //inFile.seekg(20, ios::beg);
+ inFile.read( (char*) &myFormat, sizeof(short) ); // read the file format. This should be 1 for PCM
+
+ //inFile.seekg(22, ios::beg);
+ inFile.read( (char*) &myChannels, sizeof(short) ); // read the # of channels (1 or 2)
+
+ //inFile.seekg(24, ios::beg);
+ inFile.read( (char*) &mySampleRate, sizeof(int) ); // read the samplerate
+
+ //inFile.seekg(28, ios::beg);
+ inFile.read( (char*) &myByteRate, sizeof(int) ); // read the byterate
+
+ //inFile.seekg(32, ios::beg);
+ inFile.read( (char*) &myBlockAlign, sizeof(short) ); // read the blockalign
+
+ //inFile.seekg(34, ios::beg);
+ inFile.read( (char*) &myBitsPerSample, sizeof(short) ); // read the bitspersample
+
+ //ignore any extra chunks
+ char chunkID[5]="";
+ chunkID[4] = 0;
+ int filePos = 36;
+ while(!datafound && !inFile.eof()) {
+ inFile.seekg(filePos, ios::beg);
+ inFile.read((char*) &chunkID, sizeof(char) * 4);
+ inFile.seekg(filePos + 4, ios::beg);
+ inFile.read( (char*) &myDataSize, sizeof(int) ); // read the size of the data
+ filePos += 8;
+ if (strcmp(chunkID,"data") == 0) {
+ datafound = true;
+ }else{
+ filePos += myDataSize;
+ }
+ }
+
+ // read the data chunk
+ myData = (char*) malloc(myDataSize * sizeof(char));
+ inFile.seekg(filePos, ios::beg);
+ inFile.read(myData, myDataSize);
+ length=myDataSize*(0.5/myChannels);
+ inFile.close(); // close the input file
+
+ if (myChannels>1) {
+ int position=0;
+ int channel=readChannel*2;
+ for (int i=channel;i<myDataSize+6;i+=(myChannels*2)) {
+ myData[position]=myData[i];
+ myData[position+1]=myData[i+1];
+ position+=2;
+ }
+ }
+
+ }else {
+ cout << "ERROR: Could not load sample: " <<myPath << endl;
+ }
+
+
+ return result; // this should probably be something more descriptive
+}
+
+
+double maxiSample::play() {
+ // long length=myDataSize*(1./myChannels);
+ double remainder;
+ short* buffer = (short *)myData;
+ position=(position+1);
+ remainder = position - (long) position;
+ if ((long) position>length) position=0;
+ output =
+ (double) ((1-remainder) * buffer[1+ (long) position] + remainder * buffer[2+(long) position])/32767;//linear interpolation
+ return(output);
+}
+
+double maxiSample::playOnce() {
+ // long length=myDataSize*(0.5/myChannels);
+ double remainder;
+ short* buffer = (short *)myData;
+ position=(position+1);
+ remainder = position - (long) position;
+ if ((long) position<length)
+ output = (double) ((1-remainder) * buffer[1+ (long) position] + remainder * buffer[2+(long) position])/32767;//linear interpolation
+ else
+ output=0;
+
+ return(output);
+}
+
+double maxiSample::playOnce(double speed) {
+ double remainder;
+ //long a,b;
+ // long length=myDataSize*0.5;
+ short* buffer = (short *)myData;
+ position=position+((speed*chandiv*myChannels)/(maxiSettings::sampleRate/mySampleRate));
+ if ((long) position<length)
+ output = (double) ((1-remainder) * buffer[1+ (long) position] + remainder * buffer[2+(long) position])/32767;//linear interpolation
+ else
+ output=0;
+ return(output);
+}
+
+double maxiSample::play(double speed) {
+ double remainder;
+ long a,b;
+ // long length=myDataSize*0.5;
+ short* buffer = (short *)myData;
+ position=position+((speed*chandiv*myChannels)/(maxiSettings::sampleRate/mySampleRate));
+ if (speed >=0) {
+
+ if ((long) position>=length-1) position=1;
+ remainder = position - floor(position);
+ if (position+1<length) {
+ a=position+1;
+
+ }
+ else {
+ a=length-1;
+ }
+ if (position+2<length)
+ {
+ b=position+2;
+ }
+ else {
+ b=length-1;
+ }
+
+ output = (double) ((1-remainder) * buffer[a] + remainder * buffer[b])/32767;//linear interpolation
+ } else {
+ if ((long) position<0) position=length;
+ remainder = position - floor(position);
+ if (position-1>=0) {
+ a=position-1;
+
+ }
+ else {
+ a=0;
+ }
+ if (position-2>=0) {
+ b=position-2;
+ }
+ else {
+ b=0;
+ }
+ output = (double) ((-1-remainder) * buffer[a] + remainder * buffer[b])/32767;//linear interpolation
+ }
+ return(output);
+}
+
+double maxiSample::play(double frequency, double start, double end) {
+ return play(frequency, start, end, position);
+}
+
+double maxiSample::play(double frequency, double start, double end, double &pos) {
+ double remainder;
+ // long length=myDataSize;
+
+ if (end>=length) end=length-1;
+ long a,b;
+ short* buffer = (short *)myData;
+ if (frequency >0.) {
+ if (pos<start) {
+ pos=start;
+ }
+
+ if ( pos >= end ) pos = start;
+ pos += ((end-start)/(maxiSettings::sampleRate/(frequency*chandiv)));
+ remainder = pos - floor(pos);
+ long posl = floor(pos);
+ if (posl+1<length) {
+ a=posl+1;
+
+ }
+ else {
+ a=posl-1;
+ }
+ if (posl+2<length) {
+ b=posl+2;
+ }
+ else {
+ b=length-1;
+ }
+
+ output = (double) ((1-remainder) * buffer[a] +
+ remainder * buffer[b])/32767;//linear interpolation
+ } else {
+ frequency=frequency-(frequency+frequency);
+ if ( pos <= start ) pos = end;
+ pos -= ((end-start)/(maxiSettings::sampleRate/(frequency*chandiv)));
+ remainder = pos - floor(pos);
+ long posl = floor(pos);
+ if (posl-1>=0) {
+ a=posl-1;
+ }
+ else {
+ a=0;
+ }
+ if (posl-2>=0) {
+ b=posl-2;
+ }
+ else {
+ b=0;
+ }
+ output = (double) ((-1-remainder) * buffer[a] +
+ remainder * buffer[b])/32767;//linear interpolation
+
+ }
+
+ return(output);
+}
+
+
+//better cubic inerpolation. Cobbled together from various (pd externals, yehar, other places).
+double maxiSample::play4(double frequency, double start, double end) {
+ double remainder;
+ double a,b,c,d,a1,a2,a3;
+ short* buffer = (short*)myData;
+ if (frequency >0.) {
+ if (position<start) {
+ position=start;
+ }
+ if ( position >= end ) position = start;
+ position += ((end-start)/(maxiSettings::sampleRate/(frequency*chandiv)));
+ remainder = position - floor(position);
+ if (position>0) {
+ a=buffer[(int)(floor(position))-1];
+
+ } else {
+ a=buffer[0];
+
+ }
+
+ b=buffer[(long) position];
+ if (position<end-2) {
+ c=buffer[(long) position+1];
+
+ } else {
+ c=buffer[0];
+
+ }
+ if (position<end-3) {
+ d=buffer[(long) position+2];
+
+ } else {
+ d=buffer[0];
+ }
+ a1 = 0.5f * (c - a);
+ a2 = a - 2.5 * b + 2.f * c - 0.5f * d;
+ a3 = 0.5f * (d - a) + 1.5f * (b - c);
+ output = (double) (((a3 * remainder + a2) * remainder + a1) * remainder + b) / 32767;
+
+ } else {
+ frequency=frequency-(frequency+frequency);
+ if ( position <= start ) position = end;
+ position -= ((end-start)/(maxiSettings::sampleRate/(frequency*chandiv)));
+ remainder = position - floor(position);
+ if (position>start && position < end-1) {
+ a=buffer[(long) position+1];
+
+ } else {
+ a=buffer[0];
+
+ }
+
+ b=buffer[(long) position];
+ if (position>start) {
+ c=buffer[(long) position-1];
+
+ } else {
+ c=buffer[0];
+
+ }
+ if (position>start+1) {
+ d=buffer[(long) position-2];
+
+ } else {
+ d=buffer[0];
+ }
+ a1 = 0.5f * (c - a);
+ a2 = a - 2.5 * b + 2.f * c - 0.5f * d;
+ a3 = 0.5f * (d - a) + 1.5f * (b - c);
+ output = (double) (((a3 * remainder + a2) * -remainder + a1) * -remainder + b) / 32767;
+
+ }
+
+ return(output);
+}
+
+double maxiSample::bufferPlay(unsigned char &bufferin,long length) {
+ double remainder;
+ short* buffer = (short *)&bufferin;
+ position=(position+1);
+ remainder = position - (long) position;
+ if ((long) position>length) position=0;
+ output = (double) ((1-remainder) * buffer[1+ (long) position] + remainder * buffer[2+(long) position])/32767;//linear interpolation
+ return(output);
+}
+
+double maxiSample::bufferPlay(unsigned char &bufferin,double speed,long length) {
+ double remainder;
+ long a,b;
+ short* buffer = (short *)&bufferin;
+ position=position+((speed*chandiv*myChannels)/(maxiSettings::sampleRate/mySampleRate));
+ if (speed >=0) {
+
+ if ((long) position>=length-1) position=1;
+ remainder = position - floor(position);
+ if (position+1<length) {
+ a=position+1;
+
+ }
+ else {
+ a=length-1;
+ }
+ if (position+2<length)
+ {
+ b=position+2;
+ }
+ else {
+ b=length-1;
+ }
+
+ output = (double) ((1-remainder) * buffer[a] + remainder * buffer[b])/32767;//linear interpolation
+ } else {
+ if ((long) position<0) position=length;
+ remainder = position - floor(position);
+ if (position-1>=0) {
+ a=position-1;
+
+ }
+ else {
+ a=0;
+ }
+ if (position-2>=0) {
+ b=position-2;
+ }
+ else {
+ b=0;
+ }
+ output = (double) ((-1-remainder) * buffer[a] + remainder * buffer[b])/32767;//linear interpolation
+ }
+ return(output);
+}
+
+double maxiSample::bufferPlay(unsigned char &bufferin,double frequency, double start, double end) {
+ double remainder;
+ length=end;
+ long a,b;
+ short* buffer = (short *)&bufferin;
+ if (frequency >0.) {
+ if (position<start) {
+ position=start;
+ }
+
+ if ( position >= end ) position = start;
+ position += ((end-start)/(maxiSettings::sampleRate/(frequency*chandiv)));
+ remainder = position - floor(position);
+ long pos = floor(position);
+ if (pos+1<length) {
+ a=pos+1;
+
+ }
+ else {
+ a=pos-1;
+ }
+ if (pos+2<length) {
+ b=pos+2;
+ }
+ else {
+ b=length-1;
+ }
+
+ output = (double) ((1-remainder) * buffer[a] +
+ remainder * buffer[b])/32767;//linear interpolation
+ } else {
+ frequency=frequency-(frequency+frequency);
+ if ( position <= start ) position = end;
+ position -= ((end-start)/(maxiSettings::sampleRate/(frequency*chandiv)));
+ remainder = position - floor(position);
+ long pos = floor(position);
+ if (pos-1>=0) {
+ a=pos-1;
+ }
+ else {
+ a=0;
+ }
+ if (pos-2>=0) {
+ b=pos-2;
+ }
+ else {
+ b=0;
+ }
+ output = (double) ((-1-remainder) * buffer[a] +
+ remainder * buffer[b])/32767;//linear interpolation
+
+ }
+
+ return(output);
+}
+
+//better cubic inerpolation. Cobbled together from various (pd externals, yehar, other places).
+double maxiSample::bufferPlay4(unsigned char &bufferin,double frequency, double start, double end) {
+ double remainder;
+ double a,b,c,d,a1,a2,a3;
+ short* buffer = (short*)&bufferin;
+ if (frequency >0.) {
+ if (position<start) {
+ position=start;
+ }
+ if ( position >= end ) position = start;
+ position += ((end-start)/(maxiSettings::sampleRate/(frequency*chandiv)));
+ remainder = position - floor(position);
+ if (position>0) {
+ a=buffer[(int)(floor(position))-1];
+
+ } else {
+ a=buffer[0];
+
+ }
+
+ b=buffer[(long) position];
+ if (position<end-2) {
+ c=buffer[(long) position+1];
+
+ } else {
+ c=buffer[0];
+
+ }
+ if (position<end-3) {
+ d=buffer[(long) position+2];
+
+ } else {
+ d=buffer[0];
+ }
+ a1 = 0.5f * (c - a);
+ a2 = a - 2.5 * b + 2.f * c - 0.5f * d;
+ a3 = 0.5f * (d - a) + 1.5f * (b - c);
+ output = (double) (((a3 * remainder + a2) * remainder + a1) * remainder + b) / 32767;
+
+ } else {
+ frequency=frequency-(frequency+frequency);
+ if ( position <= start ) position = end;
+ position -= ((end-start)/(maxiSettings::sampleRate/(frequency*chandiv)));
+ remainder = position - floor(position);
+ if (position>start && position < end-1) {
+ a=buffer[(long) position+1];
+
+ } else {
+ a=buffer[0];
+
+ }
+
+ b=buffer[(long) position];
+ if (position>start) {
+ c=buffer[(long) position-1];
+
+ } else {
+ c=buffer[0];
+
+ }
+ if (position>start+1) {
+ d=buffer[(long) position-2];
+
+ } else {
+ d=buffer[0];
+ }
+ a1 = 0.5f * (c - a);
+ a2 = a - 2.5 * b + 2.f * c - 0.5f * d;
+ a3 = 0.5f * (d - a) + 1.5f * (b - c);
+ output = (double) (((a3 * remainder + a2) * -remainder + a1) * -remainder + b) / 32767;
+
+ }
+
+ return(output);
+}
+
+
+void maxiSample::getLength() {
+ length=myDataSize*0.5;
+}
+
+
+/* OK this compressor and gate are now ready to use. The envelopes, like all the envelopes in this recent update, use stupid algorithms for
+ incrementing - consequently a long attack is something like 0.0001 and a long release is like 0.9999.
+ Annoyingly, a short attack is 0.1, and a short release is 0.99. I'll sort this out laters */
+
+double maxiDyn::gate(double input, double threshold, long holdtime, double attack, double release) {
+
+ if (fabs(input)>threshold && attackphase!=1){
+ holdcount=0;
+ releasephase=0;
+ attackphase=1;
+ if(amplitude==0) amplitude=0.01;
+ }
+
+ if (attackphase==1 && amplitude<1) {
+ amplitude*=(1+attack);
+ output=input*amplitude;
+ }
+
+ if (amplitude>=1) {
+ attackphase=0;
+ holdphase=1;
+ }
+
+ if (holdcount<holdtime && holdphase==1) {
+ output=input;
+ holdcount++;
+ }
+
+ if (holdcount==holdtime) {
+ holdphase=0;
+ releasephase=1;
+ }
+
+ if (releasephase==1 && amplitude>0.) {
+ output=input*(amplitude*=release);
+
+ }
+
+ return output;
+}
+
+
+double maxiDyn::compressor(double input, double ratio, double threshold, double attack, double release) {
+
+ if (fabs(input)>threshold && attackphase!=1){
+ holdcount=0;
+ releasephase=0;
+ attackphase=1;
+ if(currentRatio==0) currentRatio=ratio;
+ }
+
+ if (attackphase==1 && currentRatio<ratio-1) {
+ currentRatio*=(1+attack);
+ }
+
+ if (currentRatio>=ratio-1) {
+ attackphase=0;
+ releasephase=1;
+ }
+
+ if (releasephase==1 && currentRatio>0.) {
+ currentRatio*=release;
+ }
+
+ if (input>0.) {
+ output = input/(1.+currentRatio);
+ } else {
+ output = input/(1.+currentRatio);
+ }
+
+ return output*(1+log(ratio));
+}
+
+
+/* Lots of people struggle with the envelope generators so here's a new easy one.
+ It takes mental numbers for attack and release tho. Basically, they're exponentials.
+ I'll map them out later so that it's a bit more intuitive */
+double maxiEnv::ar(double input, double attack, double release, long holdtime, int trigger) {
+
+ if (trigger==1 && attackphase!=1 && holdphase!=1){
+ holdcount=0;
+ releasephase=0;
+ attackphase=1;
+ }
+
+ if (attackphase==1) {
+ amplitude+=(1*attack);
+ output=input*amplitude;
+ }
+
+ if (amplitude>=1) {
+ amplitude=1;
+ attackphase=0;
+ holdphase=1;
+ }
+
+ if (holdcount<holdtime && holdphase==1) {
+ output=input;
+ holdcount++;
+ }
+
+ if (holdcount==holdtime && trigger==1) {
+ output=input;
+ }
+
+ if (holdcount==holdtime && trigger!=1) {
+ holdphase=0;
+ releasephase=1;
+ }
+
+ if (releasephase==1 && amplitude>0.) {
+ output=input*(amplitude*=release);
+
+ }
+
+ return output;
+}
+
+/* and here's a new adsr. It's not bad, very simple to use*/
+
+double maxiEnv::adsr(double input, double attack, double decay, double sustain, double release, long holdtime, int trigger) {
+
+ if (trigger==1 && attackphase!=1 && holdphase!=1 && decayphase!=1){
+ holdcount=0;
+ decayphase=0;
+ sustainphase=0;
+ releasephase=0;
+ attackphase=1;
+ }
+
+ if (attackphase==1) {
+ amplitude+=(1*attack);
+ output=input*amplitude;
+ }
+
+ if (amplitude>=1) {
+ amplitude=1;
+ attackphase=0;
+ decayphase=1;
+ }
+
+ if (decayphase==1) {
+ output=input*(amplitude*=decay);
+ if (amplitude<=sustain) {
+ decayphase=0;
+ holdphase=1;
+ }
+ }
+
+ if (holdcount<holdtime && holdphase==1) {
+ output=input*amplitude;
+ holdcount++;
+ }
+
+ if (holdcount==holdtime && trigger==1) {
+ output=input*amplitude;
+ }
+
+ if (holdcount==holdtime && trigger!=1) {
+ holdphase=0;
+ releasephase=1;
+ }
+
+ if (releasephase==1 && amplitude>0.) {
+ output=input*(amplitude*=release);
+
+ }
+
+ return output;
+}
+
+double convert::mtof(int midinote) {
+
+ return mtofarray[midinote];
+} \ No newline at end of file
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maximilian.h b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maximilian.h
new file mode 100755
index 0000000..102d552
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/libs/maximilian.h
@@ -0,0 +1,366 @@
+/*
+ * maximilian.h
+ * platform independent synthesis library using portaudio or rtaudio
+ *
+ * Created by Mick Grierson on 29/12/2009.
+ * Copyright 2009 Mick Grierson & Strangeloop Limited. All rights reserved.
+ * Thanks to the Goldsmiths Creative Computing Team.
+ * Special thanks to Arturo Castro for the PortAudio implementation.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#ifndef MAXIMILIAN_H
+#define MAXIMILIAN_H
+
+//#define MAXIMILIAN_PORTAUDIO
+#define MAXIMILIAN_RT_AUDIO
+
+//#include "ofMain.h"
+//#include "ofUtils.h"
+
+
+#include <iostream>
+#include <fstream>
+#include <string>
+#include <cstdlib>
+#include "math.h"
+
+using namespace std;
+#define TWOPI (3.14159*2)
+
+class maxiSettings {
+public:
+ static int sampleRate;
+ static int channels;
+ static int bufferSize;
+ static void setup(int initSampleRate, int initChannels, int initBufferSize) {
+ maxiSettings::sampleRate = initSampleRate;
+ maxiSettings::channels = initChannels;
+ maxiSettings::bufferSize = initBufferSize;
+ }
+};
+
+
+class maxiOsc {
+
+ double frequency;
+ double phase;
+ double startphase;
+ double endphase;
+ double output;
+ double tri;
+
+
+public:
+ maxiOsc();
+ double sinewave(double frequency);
+ double coswave(double frequency);
+ double phasor(double frequency);
+ double phasor(double frequency, double startphase, double endphase);
+ double saw(double frequency);
+ double triangle(double frequency);
+ double square(double frequency);
+ double pulse(double frequency, double duty);
+ double noise();
+ double sinebuf(double frequency);
+ double sinebuf4(double frequency);
+ void phaseReset(double phaseIn);
+
+};
+
+
+class maxiEnvelope {
+
+ double period;
+ double output;
+ double startval;
+ double currentval;
+ double nextval;
+ int isPlaying;
+
+public:
+ double line(int numberofsegments,double segments[100]);
+ void trigger(int index,double amp);
+ int valindex;
+ double amplitude;
+
+};
+
+
+class maxiDelayline {
+ double frequency;
+ int phase;
+ double startphase;
+ double endphase;
+ double output;
+ double memory[88200];
+
+public:
+ maxiDelayline();
+ double dl(double input, int size, double feedback);
+ double dl(double input, int size, double feedback, int position);
+
+
+};
+
+
+class maxiFilter {
+ double gain;
+ double input;
+ double output;
+ double inputs[10];
+ double outputs[10];
+ double cutoff1;
+ double x;//speed
+ double y;//pos
+ double z;//pole
+ double c;//filter coefficient
+public:
+ maxiFilter():x(0.0), y(0.0), z(0.0), c(0.0){};
+ double cutoff;
+ double resonance;
+ double lores(double input,double cutoff1, double resonance);
+ double hires(double input,double cutoff1, double resonance);
+ double bandpass(double input,double cutoff1, double resonance);
+ double lopass(double input,double cutoff);
+ double hipass(double input,double cutoff);
+
+};
+
+class maxiMix {
+ double input;
+ double two[2];
+ double four[4];
+ double eight[8];
+public:
+ double x;
+ double y;
+ double z;
+ double *stereo(double input,double two[2],double x);
+ double *quad(double input,double four[4], double x,double y);
+ double *ambisonic(double input,double eight[8],double x,double y, double z);
+
+};
+
+class maxiSample {
+
+private:
+ string myPath;
+ int myChunkSize;
+ int mySubChunk1Size;
+ int readChannel;
+ short myFormat;
+ int myByteRate;
+ short myBlockAlign;
+ short myBitsPerSample;
+ double position;
+ double speed;
+ double output;
+
+public:
+ int myDataSize;
+ short myChannels;
+ int mySampleRate;
+ long length;
+ void getLength();
+
+
+ char* myData;
+
+ // get/set for the Path property
+
+ ~maxiSample()
+ {
+ if (myData) delete[] myData;
+ myChunkSize = NULL;
+ mySubChunk1Size = NULL;
+ myFormat = NULL;
+ myChannels = NULL;
+ mySampleRate = NULL;
+ myByteRate = NULL;
+ myBlockAlign = NULL;
+ myBitsPerSample = NULL;
+ myDataSize = NULL;
+ }
+
+ maxiSample():myData(NULL){};
+
+ bool load(string fileName, int channel=0);
+
+ void trigger();
+
+ // read a wav file into this class
+ bool read();
+
+ double play();
+
+ double playOnce();
+
+ double playOnce(double speed);
+
+ double play(double speed);
+
+ double play(double frequency, double start, double end, double &pos);
+
+ double play(double frequency, double start, double end);
+
+ double play4(double frequency, double start, double end);
+
+ double bufferPlay(unsigned char &bufferin,long length);
+
+ double bufferPlay(unsigned char &bufferin,double speed,long length);
+
+ double bufferPlay(unsigned char &bufferin,double frequency, double start, double end);
+
+ double bufferPlay4(unsigned char &bufferin,double frequency, double start, double end);
+
+ //int open(char *filename) {
+ // // open the wav file
+ // char *path = new char[50];
+ // strcpy(path, filename);
+ // sample *myWav = new sample(path);
+ // return 0;
+ // }
+ // // print a summary of the wav file
+ // int info() {
+ // char *summary = myWav->getSummary();
+ // printf("Summary:\n%s", summary);
+ // return 0;
+ // }
+ // int savefile() {
+ // // write the summary back out
+ // strcpy(path, "testout.wav");
+ // myWav->setPath(path);
+ // myWav->save();
+ // return 0:
+ // }
+ // int close() {
+ // // collect the garbage
+ // delete summary;
+ // delete path;
+ // delete myWav;
+ //
+ // return 0;
+ // }
+ // write out the wav file
+ bool save()
+ {
+ fstream myFile (myPath.c_str(), ios::out | ios::binary);
+
+ // write the wav file per the wav file format
+ myFile.seekp (0, ios::beg);
+ myFile.write ("RIFF", 4);
+ myFile.write ((char*) &myChunkSize, 4);
+ myFile.write ("WAVE", 4);
+ myFile.write ("fmt ", 4);
+ myFile.write ((char*) &mySubChunk1Size, 4);
+ myFile.write ((char*) &myFormat, 2);
+ myFile.write ((char*) &myChannels, 2);
+ myFile.write ((char*) &mySampleRate, 4);
+ myFile.write ((char*) &myByteRate, 4);
+ myFile.write ((char*) &myBlockAlign, 2);
+ myFile.write ((char*) &myBitsPerSample, 2);
+ myFile.write ("data", 4);
+ myFile.write ((char*) &myDataSize, 4);
+ myFile.write (myData, myDataSize);
+
+ return true;
+ }
+
+ // return a printable summary of the wav file
+ char *getSummary()
+ {
+ char *summary = new char[250];
+ sprintf(summary, " Format: %d\n Channels: %d\n SampleRate: %d\n ByteRate: %d\n BlockAlign: %d\n BitsPerSample: %d\n DataSize: %d\n", myFormat, myChannels, mySampleRate, myByteRate, myBlockAlign, myBitsPerSample, myDataSize);
+ std::cout << myDataSize;
+ return summary;
+ }
+};
+
+
+class maxiMap {
+public:
+ static double inline linlin(double val, double inMin, double inMax, double outMin, double outMax) {
+ return ((val - inMin) / (inMax - inMin) * (outMax - outMin)) + outMin;
+ }
+
+ static double inline linexp(double val, double inMin, double inMax, double outMin, double outMax) {
+ //clipping
+ val = max(min(val, inMax), inMin);
+ return pow((outMax / outMin), (val - inMin) / (inMax - inMin)) * outMin;
+ }
+
+ static double inline explin(double val, double inMin, double inMax, double outMin, double outMax) {
+ //clipping
+ val = max(min(val, inMax), inMin);
+ return (log(val/inMin) / log(inMax/inMin) * (outMax - outMin)) + outMin;
+ }
+
+};
+
+
+class maxiDyn {
+
+
+public:
+ double gate(double input, double threshold=0.9, long holdtime=1, double attack=1, double release=0.9995);
+ double compressor(double input, double ratio, double threshold=0.9, double attack=1, double release=0.9995);
+ double input;
+ double ratio;
+ double currentRatio;
+ double threshold;
+ double output;
+ double attack;
+ double release;
+ double amplitude;
+ long holdtime;
+ long holdcount;
+ int attackphase,holdphase,releasephase;
+};
+
+class maxiEnv {
+
+
+public:
+ double ar(double input, double attack=1, double release=0.9, long holdtime=1, int trigger=0);
+ double adsr(double input, double attack=1, double decay=0.99, double sustain=0.125, double release=0.9, long holdtime=1, int trigger=0);
+ double input;
+ double output;
+ double attack;
+ double decay;
+ double sustain;
+ double release;
+ double amplitude;
+ int trigger;
+ long holdtime;
+ long holdcount;
+ int attackphase,decayphase,sustainphase,holdphase,releasephase;
+};
+
+class convert {
+public:
+ double mtof(int midinote);
+};
+
+#endif
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/src/ofxMaxim.h b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/src/ofxMaxim.h
new file mode 100644
index 0000000..ec8c539
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxMaxim/src/ofxMaxim.h
@@ -0,0 +1,55 @@
+/*
+ * maximilian
+ * platform independent synthesis library using portaudio or rtaudio
+ *
+ * Created by Mick Grierson on 29/12/2009.
+ * Copyright 2009 Mick Grierson & Strangeloop Limited. All rights reserved.
+ * Thanks to the Goldsmiths Creative Computing Team.
+ * Special thanks to Arturo Castro for the PortAudio implementation.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#ifndef _OFMAXIM_H
+#define _OFMAXIM_H
+
+#include "maximilian.h"
+#include "maxiFFT.h"
+#include "maxiGrains.h"
+#include "maxiMFCC.h"
+
+
+typedef maxiMix ofxMaxiMix;
+typedef maxiOsc ofxMaxiOsc;
+typedef maxiEnvelope ofxMaxiEnvelope;
+typedef maxiDelayline ofxMaxiDelayline;
+typedef maxiFilter ofxMaxiFilter;
+typedef maxiSample ofxMaxiSample;
+typedef maxiFFT ofxMaxiFFT;
+typedef maxiIFFT ofxMaxiIFFT;
+typedef maxiFFTOctaveAnalyzer ofxMaxiFFTOctaveAnalyzer;
+typedef maxiSettings ofxMaxiSettings;
+typedef maxiMFCC ofxMaxiMFCC;
+
+
+#endif
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxiphone-Info.plist b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxiphone-Info.plist
new file mode 100644
index 0000000..43db2fa
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/ofxiphone-Info.plist
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleVersion</key>
+ <string>1.0</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0</string>
+ <key>CFBundleIdentifier</key>
+ <string>${PRODUCT_NAME:identifier}</string>
+ <key>UIStatusBarHidden</key>
+ <true/>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleDisplayName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIconFile</key>
+ <string></string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>LSRequiresIPhoneOS</key>
+ <true/>
+ <key>UIApplicationExitsOnSuspend</key>
+ <true/>
+ <key>UIInterfaceOrientation</key>
+ <string>UIInterfaceOrientationPortrait</string>
+</dict>
+</plist>
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/src/main.mm b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/src/main.mm
new file mode 100644
index 0000000..a0b6b4c
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/src/main.mm
@@ -0,0 +1,8 @@
+#include "ofMain.h"
+#include "testApp.h"
+
+int main(){
+ ofSetupOpenGL(1024,768, OF_FULLSCREEN); // <-------- setup the GL context
+
+ ofRunApp(new testApp);
+}
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/src/testApp.h b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/src/testApp.h
new file mode 100755
index 0000000..ac944e5
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/src/testApp.h
@@ -0,0 +1,42 @@
+#pragma once
+
+#include "ofMain.h"
+#include "ofxiPhone.h"
+#include "ofxiPhoneExtras.h"
+#include "ofxMaxim.h"
+
+
+class testApp : public ofxiPhoneApp {
+
+public:
+ ~testApp();
+ void setup();
+ void update();
+ void draw();
+ void exit();
+
+ void touchDown(ofTouchEventArgs &touch);
+ void touchMoved(ofTouchEventArgs &touch);
+ void touchUp(ofTouchEventArgs &touch);
+ void touchDoubleTap(ofTouchEventArgs &touch);
+
+ void lostFocus();
+ void gotFocus();
+ void gotMemoryWarning();
+ void deviceOrientationChanged(int newOrientation);
+
+ void audioReceived( float * input, int bufferSize, int nChannels );
+ void audioRequested( float * output, int bufferSize, int nChannels );
+
+ int initialBufferSize;
+ int sampleRate;
+
+
+ ofxMaxiOsc myOsc1;
+ ofxMaxiSample sample1;
+ double patch1,sample,outputs1[2];
+ ofxMaxiMix channel1;
+
+};
+
+
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/src/testApp.mm b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/src/testApp.mm
new file mode 100755
index 0000000..8dc9e95
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone0062Example/src/testApp.mm
@@ -0,0 +1,116 @@
+#include "testApp.h"
+#include "ofxMaxim.h"
+
+testApp::~testApp() {
+
+ delete sample1.myData;
+
+}
+
+
+//--------------------------------------------------------------
+void testApp::setup(){
+ ofEnableAlphaBlending();
+ // register touch events
+ ofRegisterTouchEvents(this);
+
+ // initialize the accelerometer
+ ofxAccelerometer.setup();
+
+ //iPhoneAlerts will be sent to this.
+ ofxiPhoneAlerts.addListener(this);
+
+ sampleRate = 44100;
+ initialBufferSize = 512;
+
+ sample1.load(ofToDataPath("beat2.wav"));
+
+ ofSoundStreamSetup(2,0,this, sampleRate, initialBufferSize, 4);
+
+ //If you want a landscape oreintation
+ //iPhoneSetOrientation(OFXIPHONE_ORIENTATION_LANDSCAPE_RIGHT);
+
+ ofBackground(255,255,255);
+}
+
+//--------------------------------------------------------------
+void testApp::update(){
+
+}
+
+//--------------------------------------------------------------
+void testApp::draw(){
+
+}
+
+//--------------------------------------------------------------
+void testApp::exit(){
+
+}
+
+
+//--------------------------------------------------------------
+void testApp::audioRequested(float * output, int bufferSize, int nChannels){
+
+ if( initialBufferSize != bufferSize ){
+ ofLog(OF_LOG_ERROR, "your buffer size was set to %i - but the stream needs a buffer size of %i", initialBufferSize, bufferSize);
+ return;
+ }
+
+ for (int i = 0; i < bufferSize; i++){
+
+ sample=sample1.play(1.);
+ channel1.stereo(sample,outputs1,0.5);
+
+ output[i*nChannels ] = outputs1[0];
+ output[i*nChannels + 1] = outputs1[1];
+
+ }
+
+}
+
+//--------------------------------------------------------------
+void testApp::audioReceived(float * input, int bufferSize, int nChannels){
+
+}
+
+//--------------------------------------------------------------
+void testApp::touchDown(ofTouchEventArgs &touch){
+
+}
+
+//--------------------------------------------------------------
+void testApp::touchMoved(ofTouchEventArgs &touch){
+
+}
+
+//--------------------------------------------------------------
+void testApp::touchUp(ofTouchEventArgs &touch){
+
+}
+
+//--------------------------------------------------------------
+void testApp::touchDoubleTap(ofTouchEventArgs &touch){
+
+}
+
+//--------------------------------------------------------------
+void testApp::lostFocus(){
+
+}
+
+//--------------------------------------------------------------
+void testApp::gotFocus(){
+
+}
+
+//--------------------------------------------------------------
+void testApp::gotMemoryWarning(){
+
+}
+
+//--------------------------------------------------------------
+void testApp::deviceOrientationChanged(int newOrientation){
+
+}
+
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/Project.xcconfig b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/Project.xcconfig
new file mode 100644
index 0000000..1a590ae
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/Project.xcconfig
@@ -0,0 +1,14 @@
+//THE PATH TO THE ROOT OF OUR OF PATH RELATIVE TO THIS PROJECT.
+//THIS NEEDS TO BE DEFINED BEFORE CoreOF.xcconfig IS INCLUDED
+OF_PATH = ../../..
+
+//THIS HAS ALL THE HEADER AND LIBS FOR OF CORE
+#include "../../../libs/openFrameworksCompiled/project/iphone/CoreOF.xcconfig"
+
+OTHER_LDFLAGS = $(OF_CORE_LIBS)
+HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS)
+
+COMPRESS_PNG_FILES = NO
+GCC_THUMB_SUPPORT = NO
+IPHONEOS_DEPLOYMENT_TARGET = 3.1
+TARGETED_DEVICE_FAMILY = 1
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/bin/data/Default.png b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/bin/data/Default.png
new file mode 100644
index 0000000..e782497
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/bin/data/Default.png
Binary files differ
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/bin/data/Icon.png b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/bin/data/Icon.png
new file mode 100644
index 0000000..2d926c8
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/bin/data/Icon.png
Binary files differ
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/bin/data/beat2.wav b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/bin/data/beat2.wav
new file mode 100644
index 0000000..c71cee6
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/bin/data/beat2.wav
Binary files differ
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/bin/data/remoteatmos.wav b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/bin/data/remoteatmos.wav
new file mode 100644
index 0000000..87e3cdf
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/bin/data/remoteatmos.wav
Binary files differ
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/emptyExample.xcodeproj/project.pbxproj b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/emptyExample.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..768ee46
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/emptyExample.xcodeproj/project.pbxproj
@@ -0,0 +1,485 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 45;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 00ABBDC7145F0B3900ED7823 /* install.xml in Resources */ = {isa = PBXBuildFile; fileRef = 00ABBDB9145F0B3900ED7823 /* install.xml */; };
+ 00ABBDC8145F0B3900ED7823 /* fft.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00ABBDBB145F0B3900ED7823 /* fft.cpp */; };
+ 00ABBDC9145F0B3900ED7823 /* maxiFFT.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00ABBDBD145F0B3900ED7823 /* maxiFFT.cpp */; };
+ 00ABBDCA145F0B3900ED7823 /* maxiGrains.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00ABBDBF145F0B3900ED7823 /* maxiGrains.cpp */; };
+ 00ABBDCB145F0B3900ED7823 /* maxiMFCC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00ABBDC1145F0B3900ED7823 /* maxiMFCC.cpp */; };
+ 00ABBDCC145F0B3900ED7823 /* maximilian.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00ABBDC3145F0B3900ED7823 /* maximilian.cpp */; };
+ 00ABBE0D145F0C7100ED7823 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00ABBE0C145F0C7100ED7823 /* Accelerate.framework */; };
+ 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; };
+ 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; };
+ 288765FD0DF74451002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765FC0DF74451002DB57D /* CoreGraphics.framework */; };
+ 5326AEA810A23A0500278DE6 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5326AEA710A23A0500278DE6 /* CoreLocation.framework */; };
+ 53F323EB10A20EDB00E0DAE4 /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53F323EA10A20EDB00E0DAE4 /* OpenAL.framework */; };
+ BB16EBD20F2B2A9500518274 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB16EBD10F2B2A9500518274 /* OpenGLES.framework */; };
+ BB16EBD90F2B2AB500518274 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB16EBD80F2B2AB500518274 /* QuartzCore.framework */; };
+ BB24DD8F10DA77E000E9C588 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = BB24DD8C10DA77E000E9C588 /* Default.png */; };
+ BB24DD9010DA77E000E9C588 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = BB24DD8D10DA77E000E9C588 /* Icon.png */; };
+ BB24DDCA10DA781C00E9C588 /* ofxiphone-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB24DDC910DA781C00E9C588 /* ofxiphone-Info.plist */; };
+ BBE5EAB80F49AD8400F28951 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBE5EAB70F49AD8400F28951 /* AudioToolbox.framework */; };
+ E41D3ED713B38FB500A75A5D /* Project.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = E41D3ED613B38FB500A75A5D /* Project.xcconfig */; };
+ E41D3EE613B3906D00A75A5D /* CoreOF.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = E41D3EE513B3906D00A75A5D /* CoreOF.xcconfig */; };
+ E41D400B13B39D2100A75A5D /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E41D400613B39D2100A75A5D /* AVFoundation.framework */; };
+ E41D400C13B39D2100A75A5D /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E41D400713B39D2100A75A5D /* CoreMedia.framework */; };
+ E41D400D13B39D2100A75A5D /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E41D400813B39D2100A75A5D /* CoreVideo.framework */; };
+ E41D400E13B39D2100A75A5D /* MapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E41D400913B39D2100A75A5D /* MapKit.framework */; };
+ E41D421413B3A95300A75A5D /* libofxiPhone_iphoneos_Debug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E41D410213B3A0D800A75A5D /* libofxiPhone_iphoneos_Debug.a */; };
+ E4A823A412561BE3002F86A2 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4A823A312561BE3002F86A2 /* CoreGraphics.framework */; };
+ E4D8936E11527B74007E1F53 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = E4D8936B11527B74007E1F53 /* main.mm */; };
+ E4D8936F11527B74007E1F53 /* testApp.mm in Sources */ = {isa = PBXBuildFile; fileRef = E4D8936D11527B74007E1F53 /* testApp.mm */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ E41D410113B3A0D800A75A5D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = E41D40FD13B3A0D800A75A5D /* iPhone+OF Lib.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = BB24DED610DA7A3F00E9C588;
+ remoteInfo = "iPhone+OF Static Library";
+ };
+ E41D410313B3A11300A75A5D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = E41D40FD13B3A0D800A75A5D /* iPhone+OF Lib.xcodeproj */;
+ proxyType = 1;
+ remoteGlobalIDString = BB24DE5C10DA7A3F00E9C588;
+ remoteInfo = "iPhone+OF Static Library";
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 00ABBDB9145F0B3900ED7823 /* install.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = install.xml; sourceTree = "<group>"; };
+ 00ABBDBB145F0B3900ED7823 /* fft.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fft.cpp; sourceTree = "<group>"; };
+ 00ABBDBC145F0B3900ED7823 /* fft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fft.h; sourceTree = "<group>"; };
+ 00ABBDBD145F0B3900ED7823 /* maxiFFT.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = maxiFFT.cpp; sourceTree = "<group>"; };
+ 00ABBDBE145F0B3900ED7823 /* maxiFFT.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = maxiFFT.h; sourceTree = "<group>"; };
+ 00ABBDBF145F0B3900ED7823 /* maxiGrains.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = maxiGrains.cpp; sourceTree = "<group>"; };
+ 00ABBDC0145F0B3900ED7823 /* maxiGrains.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = maxiGrains.h; sourceTree = "<group>"; };
+ 00ABBDC1145F0B3900ED7823 /* maxiMFCC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = maxiMFCC.cpp; sourceTree = "<group>"; };
+ 00ABBDC2145F0B3900ED7823 /* maxiMFCC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = maxiMFCC.h; sourceTree = "<group>"; };
+ 00ABBDC3145F0B3900ED7823 /* maximilian.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = maximilian.cpp; sourceTree = "<group>"; };
+ 00ABBDC4145F0B3900ED7823 /* maximilian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = maximilian.h; sourceTree = "<group>"; };
+ 00ABBDC6145F0B3900ED7823 /* ofxMaxim.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxMaxim.h; sourceTree = "<group>"; };
+ 00ABBE0C145F0C7100ED7823 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };
+ 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ 1D6058910D05DD3D006BFB54 /* emptyExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = emptyExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+ 288765FC0DF74451002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+ 32CA4F630368D1EE00C91783 /* iPhone_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iPhone_Prefix.pch; sourceTree = "<group>"; };
+ 5326AEA710A23A0500278DE6 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; };
+ 53F323EA10A20EDB00E0DAE4 /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = System/Library/Frameworks/OpenAL.framework; sourceTree = SDKROOT; };
+ BB16EBD10F2B2A9500518274 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; };
+ BB16EBD80F2B2AB500518274 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
+ BB24DD8C10DA77E000E9C588 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = "<group>"; };
+ BB24DD8D10DA77E000E9C588 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon.png; sourceTree = "<group>"; };
+ BB24DDC910DA781C00E9C588 /* ofxiphone-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "ofxiphone-Info.plist"; sourceTree = "<group>"; };
+ BBE5EAB70F49AD8400F28951 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
+ E41D3ED613B38FB500A75A5D /* Project.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Project.xcconfig; sourceTree = "<group>"; };
+ E41D3EE513B3906D00A75A5D /* CoreOF.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CoreOF.xcconfig; path = ../../../libs/openFrameworksCompiled/project/iphone/CoreOF.xcconfig; sourceTree = SOURCE_ROOT; };
+ E41D400613B39D2100A75A5D /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
+ E41D400713B39D2100A75A5D /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; };
+ E41D400813B39D2100A75A5D /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = System/Library/Frameworks/CoreVideo.framework; sourceTree = SDKROOT; };
+ E41D400913B39D2100A75A5D /* MapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MapKit.framework; path = System/Library/Frameworks/MapKit.framework; sourceTree = SDKROOT; };
+ E41D40FD13B3A0D800A75A5D /* iPhone+OF Lib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "iPhone+OF Lib.xcodeproj"; path = "../../../libs/openFrameworksCompiled/project/iphone/iPhone+OF Lib.xcodeproj"; sourceTree = SOURCE_ROOT; };
+ E4A823A312561BE3002F86A2 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+ E4D8936B11527B74007E1F53 /* main.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = main.mm; path = src/main.mm; sourceTree = SOURCE_ROOT; };
+ E4D8936C11527B74007E1F53 /* testApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = testApp.h; path = src/testApp.h; sourceTree = SOURCE_ROOT; };
+ E4D8936D11527B74007E1F53 /* testApp.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = testApp.mm; path = src/testApp.mm; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 1D60588F0D05DD3D006BFB54 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ E41D421413B3A95300A75A5D /* libofxiPhone_iphoneos_Debug.a in Frameworks */,
+ 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */,
+ 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */,
+ 288765FD0DF74451002DB57D /* CoreGraphics.framework in Frameworks */,
+ BB16EBD20F2B2A9500518274 /* OpenGLES.framework in Frameworks */,
+ BB16EBD90F2B2AB500518274 /* QuartzCore.framework in Frameworks */,
+ BBE5EAB80F49AD8400F28951 /* AudioToolbox.framework in Frameworks */,
+ 53F323EB10A20EDB00E0DAE4 /* OpenAL.framework in Frameworks */,
+ 5326AEA810A23A0500278DE6 /* CoreLocation.framework in Frameworks */,
+ E4A823A412561BE3002F86A2 /* CoreGraphics.framework in Frameworks */,
+ E41D400B13B39D2100A75A5D /* AVFoundation.framework in Frameworks */,
+ E41D400C13B39D2100A75A5D /* CoreMedia.framework in Frameworks */,
+ E41D400D13B39D2100A75A5D /* CoreVideo.framework in Frameworks */,
+ E41D400E13B39D2100A75A5D /* MapKit.framework in Frameworks */,
+ 00ABBE0D145F0C7100ED7823 /* Accelerate.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 00ABBDB8145F0B3900ED7823 /* ofxMaxim */ = {
+ isa = PBXGroup;
+ children = (
+ 00ABBDB9145F0B3900ED7823 /* install.xml */,
+ 00ABBDBA145F0B3900ED7823 /* libs */,
+ 00ABBDC5145F0B3900ED7823 /* src */,
+ );
+ name = ofxMaxim;
+ path = ../../../addons/ofxMaxim;
+ sourceTree = SOURCE_ROOT;
+ };
+ 00ABBDBA145F0B3900ED7823 /* libs */ = {
+ isa = PBXGroup;
+ children = (
+ 00ABBDBB145F0B3900ED7823 /* fft.cpp */,
+ 00ABBDBC145F0B3900ED7823 /* fft.h */,
+ 00ABBDBD145F0B3900ED7823 /* maxiFFT.cpp */,
+ 00ABBDBE145F0B3900ED7823 /* maxiFFT.h */,
+ 00ABBDBF145F0B3900ED7823 /* maxiGrains.cpp */,
+ 00ABBDC0145F0B3900ED7823 /* maxiGrains.h */,
+ 00ABBDC1145F0B3900ED7823 /* maxiMFCC.cpp */,
+ 00ABBDC2145F0B3900ED7823 /* maxiMFCC.h */,
+ 00ABBDC3145F0B3900ED7823 /* maximilian.cpp */,
+ 00ABBDC4145F0B3900ED7823 /* maximilian.h */,
+ );
+ path = libs;
+ sourceTree = "<group>";
+ };
+ 00ABBDC5145F0B3900ED7823 /* src */ = {
+ isa = PBXGroup;
+ children = (
+ 00ABBDC6145F0B3900ED7823 /* ofxMaxim.h */,
+ );
+ path = src;
+ sourceTree = "<group>";
+ };
+ 19C28FACFE9D520D11CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 1D6058910D05DD3D006BFB54 /* emptyExample.app */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
+ isa = PBXGroup;
+ children = (
+ E4D8936A11527B74007E1F53 /* src */,
+ BB24DD8B10DA77E000E9C588 /* data */,
+ BB24E1F710DAA51900E9C588 /* openFrameworks */,
+ BB16F26B0F2B646B00518274 /* addons */,
+ BB16E9930F2B1E5900518274 /* libs */,
+ 19C28FACFE9D520D11CA2CBB /* Products */,
+ );
+ name = CustomTemplate;
+ sourceTree = "<group>";
+ };
+ 29B97323FDCFA39411CA2CEA /* core frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ E41D400613B39D2100A75A5D /* AVFoundation.framework */,
+ E41D400713B39D2100A75A5D /* CoreMedia.framework */,
+ E41D400813B39D2100A75A5D /* CoreVideo.framework */,
+ E41D400913B39D2100A75A5D /* MapKit.framework */,
+ 53F323EA10A20EDB00E0DAE4 /* OpenAL.framework */,
+ E4A823A312561BE3002F86A2 /* CoreGraphics.framework */,
+ BBE5EAB70F49AD8400F28951 /* AudioToolbox.framework */,
+ BB16EBD80F2B2AB500518274 /* QuartzCore.framework */,
+ BB16EBD10F2B2A9500518274 /* OpenGLES.framework */,
+ 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */,
+ 1D30AB110D05D00D00671497 /* Foundation.framework */,
+ 288765FC0DF74451002DB57D /* CoreGraphics.framework */,
+ 5326AEA710A23A0500278DE6 /* CoreLocation.framework */,
+ );
+ name = "core frameworks";
+ sourceTree = "<group>";
+ };
+ BB16E9930F2B1E5900518274 /* libs */ = {
+ isa = PBXGroup;
+ children = (
+ BBE5E94E0F497BD800F28951 /* core */,
+ 00ABBE0C145F0C7100ED7823 /* Accelerate.framework */,
+ );
+ name = libs;
+ sourceTree = "<group>";
+ };
+ BB16F26B0F2B646B00518274 /* addons */ = {
+ isa = PBXGroup;
+ children = (
+ 00ABBDB8145F0B3900ED7823 /* ofxMaxim */,
+ );
+ name = addons;
+ sourceTree = "<group>";
+ };
+ BB24DD8B10DA77E000E9C588 /* data */ = {
+ isa = PBXGroup;
+ children = (
+ BB24DD8C10DA77E000E9C588 /* Default.png */,
+ BB24DD8D10DA77E000E9C588 /* Icon.png */,
+ );
+ name = data;
+ path = bin/data;
+ sourceTree = "<group>";
+ };
+ BB24E1F710DAA51900E9C588 /* openFrameworks */ = {
+ isa = PBXGroup;
+ children = (
+ E41D40FD13B3A0D800A75A5D /* iPhone+OF Lib.xcodeproj */,
+ 32CA4F630368D1EE00C91783 /* iPhone_Prefix.pch */,
+ BB24DDC910DA781C00E9C588 /* ofxiphone-Info.plist */,
+ E41D3EE513B3906D00A75A5D /* CoreOF.xcconfig */,
+ E41D3ED613B38FB500A75A5D /* Project.xcconfig */,
+ );
+ name = openFrameworks;
+ sourceTree = "<group>";
+ };
+ BBE5E94E0F497BD800F28951 /* core */ = {
+ isa = PBXGroup;
+ children = (
+ 29B97323FDCFA39411CA2CEA /* core frameworks */,
+ );
+ name = core;
+ sourceTree = "<group>";
+ };
+ E41D40FE13B3A0D800A75A5D /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ E41D410213B3A0D800A75A5D /* libofxiPhone_iphoneos_Debug.a */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ E4D8936A11527B74007E1F53 /* src */ = {
+ isa = PBXGroup;
+ children = (
+ E4D8936B11527B74007E1F53 /* main.mm */,
+ E4D8936D11527B74007E1F53 /* testApp.mm */,
+ E4D8936C11527B74007E1F53 /* testApp.h */,
+ );
+ path = src;
+ sourceTree = SOURCE_ROOT;
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 1D6058900D05DD3D006BFB54 /* emptyExample */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "emptyExample" */;
+ buildPhases = (
+ 1D60588D0D05DD3D006BFB54 /* Resources */,
+ 1D60588E0D05DD3D006BFB54 /* Sources */,
+ 1D60588F0D05DD3D006BFB54 /* Frameworks */,
+ 9255DD331112741900D6945E /* ShellScript */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ E41D410413B3A11300A75A5D /* PBXTargetDependency */,
+ );
+ name = emptyExample;
+ productName = iPhone;
+ productReference = 1D6058910D05DD3D006BFB54 /* emptyExample.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 29B97313FDCFA39411CA2CEA /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "emptyExample" */;
+ compatibilityVersion = "Xcode 3.1";
+ developmentRegion = English;
+ hasScannedForEncodings = 1;
+ knownRegions = (
+ English,
+ Japanese,
+ French,
+ German,
+ );
+ mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;
+ projectDirPath = "";
+ projectReferences = (
+ {
+ ProductGroup = E41D40FE13B3A0D800A75A5D /* Products */;
+ ProjectRef = E41D40FD13B3A0D800A75A5D /* iPhone+OF Lib.xcodeproj */;
+ },
+ );
+ projectRoot = "";
+ targets = (
+ 1D6058900D05DD3D006BFB54 /* emptyExample */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXReferenceProxy section */
+ E41D410213B3A0D800A75A5D /* libofxiPhone_iphoneos_Debug.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libofxiPhone_iphoneos_Debug.a;
+ remoteRef = E41D410113B3A0D800A75A5D /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+/* End PBXReferenceProxy section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 1D60588D0D05DD3D006BFB54 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BB24DD8F10DA77E000E9C588 /* Default.png in Resources */,
+ BB24DD9010DA77E000E9C588 /* Icon.png in Resources */,
+ BB24DDCA10DA781C00E9C588 /* ofxiphone-Info.plist in Resources */,
+ E41D3ED713B38FB500A75A5D /* Project.xcconfig in Resources */,
+ E41D3EE613B3906D00A75A5D /* CoreOF.xcconfig in Resources */,
+ 00ABBDC7145F0B3900ED7823 /* install.xml in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 9255DD331112741900D6945E /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "cp -rf bin/data/ \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app\"";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 1D60588E0D05DD3D006BFB54 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ E4D8936E11527B74007E1F53 /* main.mm in Sources */,
+ E4D8936F11527B74007E1F53 /* testApp.mm in Sources */,
+ 00ABBDC8145F0B3900ED7823 /* fft.cpp in Sources */,
+ 00ABBDC9145F0B3900ED7823 /* maxiFFT.cpp in Sources */,
+ 00ABBDCA145F0B3900ED7823 /* maxiGrains.cpp in Sources */,
+ 00ABBDCB145F0B3900ED7823 /* maxiMFCC.cpp in Sources */,
+ 00ABBDCC145F0B3900ED7823 /* maximilian.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ E41D410413B3A11300A75A5D /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = "iPhone+OF Static Library";
+ targetProxy = E41D410313B3A11300A75A5D /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 1D6058940D05DD3E006BFB54 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = iPhone_Prefix.pch;
+ INFOPLIST_FILE = "ofxiphone-Info.plist";
+ PRODUCT_NAME = "${TARGET_NAME}";
+ };
+ name = Debug;
+ };
+ 1D6058950D05DD3E006BFB54 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = iPhone_Prefix.pch;
+ INFOPLIST_FILE = "ofxiphone-Info.plist";
+ PRODUCT_NAME = "${TARGET_NAME}";
+ };
+ name = Release;
+ };
+ C01FCF4F08A954540054247B /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = E41D3ED613B38FB500A75A5D /* Project.xcconfig */;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = YES;
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ CODE_SIGN_IDENTITY = "";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COMPRESS_PNG_FILES = NO;
+ GCC_C_LANGUAGE_STANDARD = c99;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
+ GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
+ GCC_WARN_ABOUT_POINTER_SIGNEDNESS = NO;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
+ GCC_WARN_PROTOTYPE_CONVERSION = NO;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 3.1;
+ ONLY_ACTIVE_ARCH = NO;
+ PREBINDING = NO;
+ "PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = 1;
+ WARNING_LDFLAGS = "-no_arch_warnings";
+ };
+ name = Debug;
+ };
+ C01FCF5008A954540054247B /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = E41D3ED613B38FB500A75A5D /* Project.xcconfig */;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = YES;
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ CODE_SIGN_IDENTITY = "";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COMPRESS_PNG_FILES = NO;
+ GCC_C_LANGUAGE_STANDARD = c99;
+ GCC_DYNAMIC_NO_PIC = YES;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_OPTIMIZATION_LEVEL = 3;
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_THUMB_SUPPORT = NO;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 3.1;
+ ONLY_ACTIVE_ARCH = NO;
+ PREBINDING = NO;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = 1;
+ WARNING_LDFLAGS = "-no_arch_warnings";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "emptyExample" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1D6058940D05DD3E006BFB54 /* Debug */,
+ 1D6058950D05DD3E006BFB54 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ C01FCF4E08A954540054247B /* Build configuration list for PBXProject "emptyExample" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C01FCF4F08A954540054247B /* Debug */,
+ C01FCF5008A954540054247B /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
+}
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/emptyExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/emptyExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..da00dc2
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/emptyExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+ version = "1.0">
+ <FileRef
+ location = "self:emptyExample.xcodeproj">
+ </FileRef>
+</Workspace>
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/emptyExample.xcodeproj/project.xcworkspace/xcuserdata/mick.xcuserdatad/UserInterfaceState.xcuserstate b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/emptyExample.xcodeproj/project.xcworkspace/xcuserdata/mick.xcuserdatad/UserInterfaceState.xcuserstate
new file mode 100644
index 0000000..3ba6442
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/emptyExample.xcodeproj/project.xcworkspace/xcuserdata/mick.xcuserdatad/UserInterfaceState.xcuserstate
Binary files differ
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/emptyExample.xcodeproj/xcuserdata/mick.xcuserdatad/xcschemes/emptyExample.xcscheme b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/emptyExample.xcodeproj/xcuserdata/mick.xcuserdatad/xcschemes/emptyExample.xcscheme
new file mode 100644
index 0000000..43b68b3
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/emptyExample.xcodeproj/xcuserdata/mick.xcuserdatad/xcschemes/emptyExample.xcscheme
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+ version = "1.3">
+ <BuildAction
+ parallelizeBuildables = "YES"
+ buildImplicitDependencies = "YES">
+ <BuildActionEntries>
+ <BuildActionEntry
+ buildForTesting = "YES"
+ buildForRunning = "YES"
+ buildForProfiling = "YES"
+ buildForArchiving = "YES"
+ buildForAnalyzing = "YES">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "1D6058900D05DD3D006BFB54"
+ BuildableName = "emptyExample.app"
+ BlueprintName = "emptyExample"
+ ReferencedContainer = "container:emptyExample.xcodeproj">
+ </BuildableReference>
+ </BuildActionEntry>
+ </BuildActionEntries>
+ </BuildAction>
+ <TestAction
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ buildConfiguration = "Debug">
+ <Testables>
+ </Testables>
+ <MacroExpansion>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "1D6058900D05DD3D006BFB54"
+ BuildableName = "emptyExample.app"
+ BlueprintName = "emptyExample"
+ ReferencedContainer = "container:emptyExample.xcodeproj">
+ </BuildableReference>
+ </MacroExpansion>
+ </TestAction>
+ <LaunchAction
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
+ launchStyle = "0"
+ useCustomWorkingDirectory = "NO"
+ buildConfiguration = "Debug"
+ debugDocumentVersioning = "YES"
+ allowLocationSimulation = "YES">
+ <BuildableProductRunnable>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "1D6058900D05DD3D006BFB54"
+ BuildableName = "emptyExample.app"
+ BlueprintName = "emptyExample"
+ ReferencedContainer = "container:emptyExample.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </LaunchAction>
+ <ProfileAction
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ savedToolIdentifier = ""
+ useCustomWorkingDirectory = "NO"
+ buildConfiguration = "Release"
+ debugDocumentVersioning = "YES">
+ <BuildableProductRunnable>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "1D6058900D05DD3D006BFB54"
+ BuildableName = "emptyExample.app"
+ BlueprintName = "emptyExample"
+ ReferencedContainer = "container:emptyExample.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ </ProfileAction>
+ <AnalyzeAction
+ buildConfiguration = "Debug">
+ </AnalyzeAction>
+ <ArchiveAction
+ buildConfiguration = "Release"
+ revealArchiveInOrganizer = "YES">
+ </ArchiveAction>
+</Scheme>
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/emptyExample.xcodeproj/xcuserdata/mick.xcuserdatad/xcschemes/xcschememanagement.plist b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/emptyExample.xcodeproj/xcuserdata/mick.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..0ba941f
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/emptyExample.xcodeproj/xcuserdata/mick.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>SchemeUserState</key>
+ <dict>
+ <key>emptyExample.xcscheme</key>
+ <dict>
+ <key>orderHint</key>
+ <integer>1</integer>
+ </dict>
+ </dict>
+ <key>SuppressBuildableAutocreation</key>
+ <dict>
+ <key>1D6058900D05DD3D006BFB54</key>
+ <dict>
+ <key>primary</key>
+ <true/>
+ </dict>
+ </dict>
+</dict>
+</plist>
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/iPhone_Prefix.pch b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/iPhone_Prefix.pch
new file mode 100644
index 0000000..fd3401c
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/iPhone_Prefix.pch
@@ -0,0 +1,8 @@
+//
+// Prefix header for all source files of the 'iPhone' target in the 'iPhone' project
+//
+
+#ifdef __OBJC__
+ #import <Foundation/Foundation.h>
+ #import <UIKit/UIKit.h>
+#endif
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/ofxiphone-Info.plist b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/ofxiphone-Info.plist
new file mode 100644
index 0000000..43db2fa
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/ofxiphone-Info.plist
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleVersion</key>
+ <string>1.0</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0</string>
+ <key>CFBundleIdentifier</key>
+ <string>${PRODUCT_NAME:identifier}</string>
+ <key>UIStatusBarHidden</key>
+ <true/>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleDisplayName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIconFile</key>
+ <string></string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>LSRequiresIPhoneOS</key>
+ <true/>
+ <key>UIApplicationExitsOnSuspend</key>
+ <true/>
+ <key>UIInterfaceOrientation</key>
+ <string>UIInterfaceOrientationPortrait</string>
+</dict>
+</plist>
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/src/main.mm b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/src/main.mm
new file mode 100644
index 0000000..a0b6b4c
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/src/main.mm
@@ -0,0 +1,8 @@
+#include "ofMain.h"
+#include "testApp.h"
+
+int main(){
+ ofSetupOpenGL(1024,768, OF_FULLSCREEN); // <-------- setup the GL context
+
+ ofRunApp(new testApp);
+}
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/src/testApp.h b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/src/testApp.h
new file mode 100755
index 0000000..0bf924f
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/src/testApp.h
@@ -0,0 +1,43 @@
+#pragma once
+
+#include "ofMain.h"
+#include "ofxiPhone.h"
+#include "ofxiPhoneExtras.h"
+#include "ofxMaxim.h"
+
+
+class testApp : public ofxiPhoneApp {
+
+public:
+ ~testApp();
+ void setup();
+ void update();
+ void draw();
+ void exit();
+
+ void touchDown(ofTouchEventArgs &touch);
+ void touchMoved(ofTouchEventArgs &touch);
+ void touchUp(ofTouchEventArgs &touch);
+ void touchDoubleTap(ofTouchEventArgs &touch);
+ void touchCancelled(ofTouchEventArgs &touch);
+
+ void lostFocus();
+ void gotFocus();
+ void gotMemoryWarning();
+ void deviceOrientationChanged(int newOrientation);
+
+ void audioReceived( float * input, int bufferSize, int nChannels );
+ void audioRequested( float * output, int bufferSize, int nChannels );
+
+ int initialBufferSize;
+ int sampleRate;
+
+
+ ofxMaxiOsc myOsc1;
+ ofxMaxiSample sample1;
+ double patch1,sample,outputs1[2];
+ ofxMaxiMix channel1;
+
+};
+
+
diff --git a/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/src/testApp.mm b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/src/testApp.mm
new file mode 100755
index 0000000..ad2a865
--- /dev/null
+++ b/ofxMaxim/examples/iOS/ofxMaximiPhone007Example/src/testApp.mm
@@ -0,0 +1,121 @@
+#include "testApp.h"
+#include "ofxMaxim.h"
+
+testApp::~testApp() {
+
+ delete sample1.myData;
+
+}
+
+
+//--------------------------------------------------------------
+void testApp::setup(){
+ ofEnableAlphaBlending();
+ // register touch events
+ ofRegisterTouchEvents(this);
+
+ // initialize the accelerometer
+ ofxAccelerometer.setup();
+
+ //iPhoneAlerts will be sent to this.
+ ofxiPhoneAlerts.addListener(this);
+
+ sampleRate = 44100;
+ initialBufferSize = 512;
+
+ sample1.load(ofToDataPath("beat2.wav"));
+
+ ofSoundStreamSetup(2,0,this, sampleRate, initialBufferSize, 4);
+
+ //If you want a landscape oreintation
+ //iPhoneSetOrientation(OFXIPHONE_ORIENTATION_LANDSCAPE_RIGHT);
+
+ ofBackground(255,255,255);
+}
+
+//--------------------------------------------------------------
+void testApp::update(){
+
+}
+
+//--------------------------------------------------------------
+void testApp::draw(){
+
+}
+
+//--------------------------------------------------------------
+void testApp::exit(){
+
+}
+
+
+//--------------------------------------------------------------
+void testApp::audioRequested(float * output, int bufferSize, int nChannels){
+
+ if( initialBufferSize != bufferSize ){
+ ofLog(OF_LOG_ERROR, "your buffer size was set to %i - but the stream needs a buffer size of %i", initialBufferSize, bufferSize);
+ return;
+ }
+
+ for (int i = 0; i < bufferSize; i++){
+
+ sample=sample1.play(1.);
+ channel1.stereo(sample,outputs1,0.5);
+
+ output[i*nChannels ] = outputs1[0];
+ output[i*nChannels + 1] = outputs1[1];
+
+ }
+
+}
+
+//--------------------------------------------------------------
+void testApp::audioReceived(float * input, int bufferSize, int nChannels){
+
+}
+
+//--------------------------------------------------------------
+void testApp::touchDown(ofTouchEventArgs &touch){
+
+}
+
+//--------------------------------------------------------------
+void testApp::touchMoved(ofTouchEventArgs &touch){
+
+}
+
+//--------------------------------------------------------------
+void testApp::touchUp(ofTouchEventArgs &touch){
+
+}
+
+//--------------------------------------------------------------
+void testApp::touchDoubleTap(ofTouchEventArgs &touch){
+
+}
+
+//--------------------------------------------------------------
+void testApp::lostFocus(){
+
+}
+
+//--------------------------------------------------------------
+void testApp::gotFocus(){
+
+}
+
+//--------------------------------------------------------------
+void testApp::gotMemoryWarning(){
+
+}
+
+//--------------------------------------------------------------
+void testApp::deviceOrientationChanged(int newOrientation){
+
+}
+
+//--------------------------------------------------------------
+void testApp::touchCancelled(ofTouchEventArgs& args){
+
+}
+