├── .gitmodules ├── olaoutput ├── olaoutput.xcodeproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcuserdata │ │ │ └── David.xcuserdatad │ │ │ │ ├── UserInterfaceState.xcuserstate │ │ │ │ └── WorkspaceSettings.xcsettings │ │ └── xcshareddata │ │ │ ├── vidi.xccheckout │ │ │ ├── imp.ltc.xccheckout │ │ │ ├── olaoutput.xccheckout │ │ │ └── vidibuild.xccheckout │ ├── xcuserdata │ │ └── David.xcuserdatad │ │ │ ├── xcdebugger │ │ │ └── Breakpoints_v2.xcbkptlist │ │ │ └── xcschemes │ │ │ ├── xcschememanagement.plist │ │ │ └── olaoutput.xcscheme │ └── project.pbxproj ├── olaoutput.cpp └── olaoutput.maxhelp ├── README.md ├── propertysheets ├── olaoutput_extern_x86.props ├── olaoutput_extern_x64.props └── olaoutput_extern_common.props └── xcodeconfig ├── Info.plist └── maxmspsdk.xcconfig /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "max6-sdk"] 2 | path = max6-sdk 3 | url = git://github.com/Cycling74/max6-sdk 4 | -------------------------------------------------------------------------------- /olaoutput/olaoutput.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /olaoutput/olaoutput.xcodeproj/project.xcworkspace/xcuserdata/David.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenLightingProject/olaoutput/HEAD/olaoutput/olaoutput.xcodeproj/project.xcworkspace/xcuserdata/David.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /olaoutput/olaoutput.xcodeproj/project.xcworkspace/xcuserdata/David.xcuserdatad/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges 6 | 7 | SnapshotAutomaticallyBeforeSignificantChanges 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | olaoutput is an object for Cycling 74's Max visual programming environment which enables the 2 | transmission of data to OLA (Open Lighting Architecture), a service allowing transmission and 3 | receiving of DMX information via a variety of hardware (Entec DMX USB Pro, uDMX, DMX King) and 4 | IP protocols (Art-Net, sACN, ShowNet). 5 | 6 | olaoutput currently works with Max 5 and 6 (32-bit and 64-bit) on OS X. OLA is required at development 7 | and runtime. Cycling 74's Max SDK is required for development only. 8 | 9 | See the https://wiki.openlighting.org/index.php/OlaOutput_Max_External for usage information. 10 | -------------------------------------------------------------------------------- /propertysheets/olaoutput_extern_x86.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <_ProjectFileVersion>10.0.40219.1 5 | .mxe 6 | 7 | 8 | 9 | $(C74SUPPORT)\max-includes;$(C74SUPPORT)\msp-includes;$(C74SUPPORT)\jit-includes;%(AdditionalLibraryDirectories) 10 | 11 | 12 | VER_TARGETEXT=\".mxe\";%(PreprocessorDefinitions) 13 | 14 | 15 | -------------------------------------------------------------------------------- /propertysheets/olaoutput_extern_x64.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <_ProjectFileVersion>10.0.40219.1 5 | .mxe64 6 | 7 | 8 | 9 | $(C74SUPPORT)\max-includes\x64;$(C74SUPPORT)\msp-includes\x64;$(C74SUPPORT)\jit-includes\x64;%(AdditionalLibraryDirectories) 10 | 11 | 12 | VER_TARGETEXT=\".mxe64\";%(PreprocessorDefinitions) 13 | 14 | 15 | -------------------------------------------------------------------------------- /olaoutput/olaoutput.xcodeproj/xcuserdata/David.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 8 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /olaoutput/olaoutput.xcodeproj/xcuserdata/David.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | olaoutput.xcscheme 8 | 9 | orderHint 10 | 4 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 2FBBEAD608F335360078DB84 16 | 17 | primary 18 | 19 | 20 | 63FE36EE1950740D00B07A04 21 | 22 | primary 23 | 24 | 25 | 63FE36F81950740F00B07A04 26 | 27 | primary 28 | 29 | 30 | 63FE37021950741000B07A04 31 | 32 | primary 33 | 34 | 35 | 63FE3711195074A100B07A04 36 | 37 | primary 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /xcodeconfig/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${PRODUCT_NAME} 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | com.cycling74.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | ${PRODUCT_VERSION} 15 | CFBundlePackageType 16 | iLaX 17 | CFBundleSignature 18 | max2 19 | CFBundleVersion 20 | 1.0 21 | 22 | CFBundleVersion 23 | ${PRODUCT_VERSION} 24 | CFBundleShortVersionString 25 | ${PRODUCT_VERSION} 26 | CFBundleLongVersionString 27 | ${PRODUCT_NAME} ${PRODUCT_VERSION}, Copyright 2013 Cycling '74 28 | 29 | CSResourcesFileMapped 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /propertysheets/olaoutput_extern_common.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | $(MSBuildThisFileDirectory)..\max6-sdk\c74support\ 5 | 6 | 7 | <_ProjectFileVersion>10.0.40219.1 8 | $(C74SUPPORT)..\..\..\olaoutput_build\$(Configuration)_$(PlatformName)\$(SolutionName)\ 9 | $(C74SUPPORT)..\..\..\olaoutput_inter\$(Configuration)_$(PlatformName)\$(SolutionName)\$(ProjectName)\ 10 | false 11 | 12 | 13 | 14 | MaxAPI.lib;MaxAudio.lib;jitlib.lib;%(AdditionalDependencies) 15 | 16 | 17 | VER_TARGETNAME=\"$(TargetName)\";%(PreprocessorDefinitions) 18 | 19 | 20 | _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) 21 | 22 | 23 | $(IntDir)$(TargetName).manifest 24 | 25 | 26 | 27 | 28 | $(C74SUPPORT) 29 | 30 | 31 | -------------------------------------------------------------------------------- /olaoutput/olaoutput.xcodeproj/project.xcworkspace/xcshareddata/vidi.xccheckout: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDESourceControlProjectFavoriteDictionaryKey 6 | 7 | IDESourceControlProjectIdentifier 8 | 5B064C09-B00F-4334-BA0C-9CA15A7F6229 9 | IDESourceControlProjectName 10 | vidi 11 | IDESourceControlProjectOriginsDictionary 12 | 13 | BD74B562-5E13-42B8-8D35-BF626209237E 14 | https://github.com/impsnldavid/impmaxobjects.git 15 | 16 | IDESourceControlProjectPath 17 | imp.ltc/vidi.xcodeproj/project.xcworkspace 18 | IDESourceControlProjectRelativeInstallPathDictionary 19 | 20 | BD74B562-5E13-42B8-8D35-BF626209237E 21 | ../../.. 22 | 23 | IDESourceControlProjectURL 24 | https://github.com/impsnldavid/impmaxobjects.git 25 | IDESourceControlProjectVersion 26 | 110 27 | IDESourceControlProjectWCCIdentifier 28 | BD74B562-5E13-42B8-8D35-BF626209237E 29 | IDESourceControlProjectWCConfigurations 30 | 31 | 32 | IDESourceControlRepositoryExtensionIdentifierKey 33 | public.vcs.git 34 | IDESourceControlWCCIdentifierKey 35 | BD74B562-5E13-42B8-8D35-BF626209237E 36 | IDESourceControlWCCName 37 | impmaxobjects 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /olaoutput/olaoutput.xcodeproj/project.xcworkspace/xcshareddata/imp.ltc.xccheckout: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDESourceControlProjectFavoriteDictionaryKey 6 | 7 | IDESourceControlProjectIdentifier 8 | 8BB9D4FF-D4C6-42C7-953F-8CA7AAB1A969 9 | IDESourceControlProjectName 10 | imp.ltc 11 | IDESourceControlProjectOriginsDictionary 12 | 13 | 58089FBD-D60C-47F7-B8AF-CDF499BDFE4A 14 | https://github.com/impsnldavid/impmaxobjects.git 15 | D9379814-0D5F-4732-A7A6-EA627AD11589 16 | https://github.com/Cycling74/max6-sdk 17 | 18 | IDESourceControlProjectPath 19 | imp.msc/imp.ltc.xcodeproj/project.xcworkspace 20 | IDESourceControlProjectRelativeInstallPathDictionary 21 | 22 | 58089FBD-D60C-47F7-B8AF-CDF499BDFE4A 23 | ../../.. 24 | D9379814-0D5F-4732-A7A6-EA627AD11589 25 | ../../../max6-sdk 26 | 27 | IDESourceControlProjectURL 28 | https://github.com/impsnldavid/impmaxobjects.git 29 | IDESourceControlProjectVersion 30 | 110 31 | IDESourceControlProjectWCCIdentifier 32 | 58089FBD-D60C-47F7-B8AF-CDF499BDFE4A 33 | IDESourceControlProjectWCConfigurations 34 | 35 | 36 | IDESourceControlRepositoryExtensionIdentifierKey 37 | public.vcs.git 38 | IDESourceControlWCCIdentifierKey 39 | 58089FBD-D60C-47F7-B8AF-CDF499BDFE4A 40 | IDESourceControlWCCName 41 | impmaxobjects 42 | 43 | 44 | IDESourceControlRepositoryExtensionIdentifierKey 45 | public.vcs.git 46 | IDESourceControlWCCIdentifierKey 47 | D9379814-0D5F-4732-A7A6-EA627AD11589 48 | IDESourceControlWCCName 49 | max6-sdk 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /olaoutput/olaoutput.xcodeproj/project.xcworkspace/xcshareddata/olaoutput.xccheckout: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDESourceControlProjectFavoriteDictionaryKey 6 | 7 | IDESourceControlProjectIdentifier 8 | 8566A0F9-89BD-49BE-A3ED-3391CC275956 9 | IDESourceControlProjectName 10 | olaoutput 11 | IDESourceControlProjectOriginsDictionary 12 | 13 | 432D987CF0E487D0F8961CB5FDD6233842994479 14 | https://github.com/OpenLightingProject/olaoutput.git 15 | 43DDD4A1012A81E5C2F5DA96FCA0DABF5263B8FC 16 | git://github.com/Cycling74/max6-sdk 17 | 18 | IDESourceControlProjectPath 19 | olaoutput/olaoutput.xcodeproj 20 | IDESourceControlProjectRelativeInstallPathDictionary 21 | 22 | 432D987CF0E487D0F8961CB5FDD6233842994479 23 | ../../.. 24 | 43DDD4A1012A81E5C2F5DA96FCA0DABF5263B8FC 25 | ../../..max6-sdk 26 | 27 | IDESourceControlProjectURL 28 | https://github.com/OpenLightingProject/olaoutput.git 29 | IDESourceControlProjectVersion 30 | 111 31 | IDESourceControlProjectWCCIdentifier 32 | 432D987CF0E487D0F8961CB5FDD6233842994479 33 | IDESourceControlProjectWCConfigurations 34 | 35 | 36 | IDESourceControlRepositoryExtensionIdentifierKey 37 | public.vcs.git 38 | IDESourceControlWCCIdentifierKey 39 | 432D987CF0E487D0F8961CB5FDD6233842994479 40 | IDESourceControlWCCName 41 | olaoutput 42 | 43 | 44 | IDESourceControlRepositoryExtensionIdentifierKey 45 | public.vcs.git 46 | IDESourceControlWCCIdentifierKey 47 | 43DDD4A1012A81E5C2F5DA96FCA0DABF5263B8FC 48 | IDESourceControlWCCName 49 | olaoutputmax6-sdk 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /olaoutput/olaoutput.xcodeproj/project.xcworkspace/xcshareddata/vidibuild.xccheckout: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDESourceControlProjectFavoriteDictionaryKey 6 | 7 | IDESourceControlProjectIdentifier 8 | 1D54D857-07A2-40F1-BA3C-BDE0DE940195 9 | IDESourceControlProjectName 10 | vidibuild 11 | IDESourceControlProjectOriginsDictionary 12 | 13 | D8645BCF-D60F-471B-A30E-C1B05A40E6D2 14 | svn+ssh://tech.green-hippo.com/repositories/vidi/trunk 15 | 16 | IDESourceControlProjectPath 17 | Max Objects/vidibuild.xcodeproj/project.xcworkspace 18 | IDESourceControlProjectRelativeInstallPathDictionary 19 | 20 | D8645BCF-D60F-471B-A30E-C1B05A40E6D2 21 | ../../.. 22 | 23 | IDESourceControlProjectRepositoryRootDictionary 24 | 25 | D8645BCF-D60F-471B-A30E-C1B05A40E6D2 26 | svn+ssh://tech.green-hippo.com/repositories/vidi 27 | 28 | IDESourceControlProjectURL 29 | svn+ssh://tech.green-hippo.com/repositories/vidi/trunk/Max%20Objects/vidibuild.xcodeproj 30 | IDESourceControlProjectVersion 31 | 110 32 | IDESourceControlProjectWCCIdentifier 33 | D8645BCF-D60F-471B-A30E-C1B05A40E6D2 34 | IDESourceControlProjectWCConfigurations 35 | 36 | 37 | IDESourceControlRepositoryBranchesRelativeLocationKey 38 | branches 39 | IDESourceControlRepositoryExtensionIdentifierKey 40 | public.vcs.subversion 41 | IDESourceControlRepositoryTagsRelativeLocationKey 42 | tags 43 | IDESourceControlRepositoryTrunkRelativeLocationKey 44 | trunk 45 | IDESourceControlWCCIdentifierKey 46 | D8645BCF-D60F-471B-A30E-C1B05A40E6D2 47 | IDESourceControlWCCName 48 | vidi 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /xcodeconfig/maxmspsdk.xcconfig: -------------------------------------------------------------------------------- 1 | // Xcode target configuration settings for the Max 6 SDK 2 | // Used as the basis for Xcode projects to build Max externals. 3 | // 4 | // Changes to the settings in this file will be applied to all SDK examples 5 | // To change settings for only one of the examples, override the settings using 6 | // Xcode's target inspector. 7 | // 8 | // by Timothy Place 9 | // Copyright © 2012, Cycling '74 10 | 11 | 12 | // Name & Version 13 | PRODUCT_NAME = $(PROJECT_NAME) 14 | PRODUCT_VERSION = 6.1.4 15 | ARCHS = i386 x86_64 16 | 17 | 18 | // Paths 19 | C74SUPPORT = $(SRCROOT)/../max6-sdk/c74support 20 | HEADER_SEARCH_PATHS = "$(C74SUPPORT)/max-includes" "$(C74SUPPORT)/msp-includes" "$(C74SUPPORT)/jit-includes" 21 | FRAMEWORK_SEARCH_PATHS = "$(C74SUPPORT)/max-includes" "$(C74SUPPORT)/msp-includes" "$(C74SUPPORT)/jit-includes" 22 | DSTROOT = $(SRCROOT)/../../olaoutput_build 23 | // (This next path is relative to DSTROOT) 24 | INSTALL_PATH = / 25 | 26 | 27 | // Special Files 28 | GCC_PREFIX_HEADER = $(C74SUPPORT)/max-includes/macho-prefix.pch 29 | INFOPLIST_FILE = $(SRCROOT)/../Info.plist 30 | 31 | 32 | // Architecture and Deployment 33 | ARCHS = i386 x86_64 34 | 35 | // The following section sets the Mac SDK version to be used. 36 | // For most projects this has little to no impact because there are no direct dependencies on OS function calls. 37 | // In those projects with OS function calls, it should be okay to use the most recent SDK version because the 38 | // MACOSX_DEPLOYMENT_TARGET will disable functionality that is unavailable in the older target OS. 39 | // For this reason, the SDKROOT variable is commented out, telling Xcode to use the default (which is the most recent SDK). 40 | // 41 | // If you do need to define the SDKROOT, different versions of Xcode have varying syntax and varying versions of the SDK present. 42 | 43 | // Xcode 3.x 44 | // SDKROOT = $(DEVELOPER_DIR)/SDKs/MacOSX10.5.sdk 45 | 46 | // Xcode 4.0 - Xcode 4.2 47 | // SDKROOT = $(DEVELOPER_DIR)/SDKs/MacOSX10.6.sdk 48 | 49 | // Xcode 4.3+ 50 | // SDKROOT = macosx10.6 51 | 52 | MACOSX_DEPLOYMENT_TARGET = 10.7 53 | 54 | 55 | // Compiler Version -- leave them all commented out to get the default version provided by Xcode 56 | // GCC_VERSION = 4.2 57 | // GCC_VERSION = com.apple.compilers.llvmgcc42 58 | // GCC_VERSION = com.apple.compilers.llvm.clang.1_0 59 | 60 | 61 | // Preprocessor Defines 62 | GCC_PREPROCESSOR_DEFINITIONS = "DENORM_WANT_FIX = 1" "NO_TRANSLATION_SUPPORT = 1" 63 | 64 | 65 | // Static Configuration (don't change these) 66 | WRAPPER_EXTENSION = mxo; 67 | WARNING_CFLAGS = -Wmost -Wno-four-char-constants -Wno-unknown-pragmas 68 | DEPLOYMENT_LOCATION = YES 69 | GENERATE_PKGINFO_FILE = YES 70 | 71 | 72 | // Flags to enforce some build-time checks for the symbols used while not actually performing a hard link 73 | C74_SYM_LINKER_FLAGS = @$(C74SUPPORT)/max-includes/c74_linker_flags.txt 74 | 75 | 76 | // hide all symbols by default 77 | // mark a function to be exported with the C74_EXPORT macro -- most likely this will only apply to the main() function 78 | OTHER_CFLAGS = -fvisibility=hidden 79 | -------------------------------------------------------------------------------- /olaoutput/olaoutput.xcodeproj/xcuserdata/David.xcuserdatad/xcschemes/olaoutput.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 42 | 45 | 46 | 47 | 53 | 54 | 55 | 56 | 57 | 58 | 64 | 65 | 71 | 72 | 73 | 74 | 76 | 77 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /olaoutput/olaoutput.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 63E33AD41AF3BAAF00818335 /* libola.1.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 63E33AD31AF3BAAF00818335 /* libola.1.dylib */; }; 11 | 63E33AD61AF3BAE900818335 /* libolacommon.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 63E33AD51AF3BAE900818335 /* libolacommon.0.dylib */; }; 12 | 63F3D3371AF3B9C50081102E /* olaoutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 63F3D3361AF3B9C50081102E /* olaoutput.cpp */; }; 13 | 63FE3733195078FA00B07A04 /* commonsyms.c in Sources */ = {isa = PBXBuildFile; fileRef = 63FE3732195078FA00B07A04 /* commonsyms.c */; }; 14 | /* End PBXBuildFile section */ 15 | 16 | /* Begin PBXFileReference section */ 17 | 2FBBEAE508F335360078DB84 /* olaoutput.mxo */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = olaoutput.mxo; sourceTree = BUILT_PRODUCTS_DIR; }; 18 | 63E33AD31AF3BAAF00818335 /* libola.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libola.1.dylib; path = ../../../../../opt/local/lib/libola.1.dylib; sourceTree = ""; }; 19 | 63E33AD51AF3BAE900818335 /* libolacommon.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libolacommon.0.dylib; path = ../../../../../opt/local/lib/libolacommon.0.dylib; sourceTree = ""; }; 20 | 63F3D3361AF3B9C50081102E /* olaoutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = olaoutput.cpp; sourceTree = ""; }; 21 | 63FE36D6195073C400B07A04 /* maxmspsdk.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = maxmspsdk.xcconfig; path = ../xcodeconfig/maxmspsdk.xcconfig; sourceTree = ""; }; 22 | 63FE3732195078FA00B07A04 /* commonsyms.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = commonsyms.c; path = "../max6-sdk/c74support/max-includes/common/commonsyms.c"; sourceTree = ""; }; 23 | /* End PBXFileReference section */ 24 | 25 | /* Begin PBXFrameworksBuildPhase section */ 26 | 2FBBEADC08F335360078DB84 /* Frameworks */ = { 27 | isa = PBXFrameworksBuildPhase; 28 | buildActionMask = 2147483647; 29 | files = ( 30 | 63E33AD61AF3BAE900818335 /* libolacommon.0.dylib in Frameworks */, 31 | 63E33AD41AF3BAAF00818335 /* libola.1.dylib in Frameworks */, 32 | ); 33 | runOnlyForDeploymentPostprocessing = 0; 34 | }; 35 | /* End PBXFrameworksBuildPhase section */ 36 | 37 | /* Begin PBXGroup section */ 38 | 089C166AFE841209C02AAC07 /* iterator */ = { 39 | isa = PBXGroup; 40 | children = ( 41 | 63E33AD51AF3BAE900818335 /* libolacommon.0.dylib */, 42 | 63E33AD31AF3BAAF00818335 /* libola.1.dylib */, 43 | 63FE36D6195073C400B07A04 /* maxmspsdk.xcconfig */, 44 | 63FE370D1950748600B07A04 /* Max Objects */, 45 | 63FE3731195078E200B07A04 /* Max SDK */, 46 | 19C28FB4FE9D528D11CA2CBB /* Products */, 47 | ); 48 | name = iterator; 49 | sourceTree = ""; 50 | }; 51 | 19C28FB4FE9D528D11CA2CBB /* Products */ = { 52 | isa = PBXGroup; 53 | children = ( 54 | 2FBBEAE508F335360078DB84 /* olaoutput.mxo */, 55 | ); 56 | name = Products; 57 | sourceTree = ""; 58 | }; 59 | 63FE370D1950748600B07A04 /* Max Objects */ = { 60 | isa = PBXGroup; 61 | children = ( 62 | 63F3D3361AF3B9C50081102E /* olaoutput.cpp */, 63 | ); 64 | name = "Max Objects"; 65 | sourceTree = ""; 66 | }; 67 | 63FE3731195078E200B07A04 /* Max SDK */ = { 68 | isa = PBXGroup; 69 | children = ( 70 | 63FE3732195078FA00B07A04 /* commonsyms.c */, 71 | ); 72 | name = "Max SDK"; 73 | sourceTree = ""; 74 | }; 75 | /* End PBXGroup section */ 76 | 77 | /* Begin PBXHeadersBuildPhase section */ 78 | 2FBBEAD708F335360078DB84 /* Headers */ = { 79 | isa = PBXHeadersBuildPhase; 80 | buildActionMask = 2147483647; 81 | files = ( 82 | ); 83 | runOnlyForDeploymentPostprocessing = 0; 84 | }; 85 | /* End PBXHeadersBuildPhase section */ 86 | 87 | /* Begin PBXNativeTarget section */ 88 | 2FBBEAD608F335360078DB84 /* olaoutput */ = { 89 | isa = PBXNativeTarget; 90 | buildConfigurationList = 2FBBEAE008F335360078DB84 /* Build configuration list for PBXNativeTarget "olaoutput" */; 91 | buildPhases = ( 92 | 2FBBEAD708F335360078DB84 /* Headers */, 93 | 2FBBEAD808F335360078DB84 /* Resources */, 94 | 2FBBEADA08F335360078DB84 /* Sources */, 95 | 2FBBEADC08F335360078DB84 /* Frameworks */, 96 | 2FBBEADF08F335360078DB84 /* Rez */, 97 | ); 98 | buildRules = ( 99 | ); 100 | dependencies = ( 101 | ); 102 | name = olaoutput; 103 | productName = iterator; 104 | productReference = 2FBBEAE508F335360078DB84 /* olaoutput.mxo */; 105 | productType = "com.apple.product-type.bundle"; 106 | }; 107 | /* End PBXNativeTarget section */ 108 | 109 | /* Begin PBXProject section */ 110 | 089C1669FE841209C02AAC07 /* Project object */ = { 111 | isa = PBXProject; 112 | attributes = { 113 | LastUpgradeCheck = 0630; 114 | }; 115 | buildConfigurationList = 2FBBEACF08F335010078DB84 /* Build configuration list for PBXProject "olaoutput" */; 116 | compatibilityVersion = "Xcode 3.2"; 117 | developmentRegion = English; 118 | hasScannedForEncodings = 1; 119 | knownRegions = ( 120 | en, 121 | ); 122 | mainGroup = 089C166AFE841209C02AAC07 /* iterator */; 123 | projectDirPath = ""; 124 | projectRoot = ""; 125 | targets = ( 126 | 2FBBEAD608F335360078DB84 /* olaoutput */, 127 | ); 128 | }; 129 | /* End PBXProject section */ 130 | 131 | /* Begin PBXResourcesBuildPhase section */ 132 | 2FBBEAD808F335360078DB84 /* Resources */ = { 133 | isa = PBXResourcesBuildPhase; 134 | buildActionMask = 2147483647; 135 | files = ( 136 | ); 137 | runOnlyForDeploymentPostprocessing = 0; 138 | }; 139 | /* End PBXResourcesBuildPhase section */ 140 | 141 | /* Begin PBXRezBuildPhase section */ 142 | 2FBBEADF08F335360078DB84 /* Rez */ = { 143 | isa = PBXRezBuildPhase; 144 | buildActionMask = 2147483647; 145 | files = ( 146 | ); 147 | runOnlyForDeploymentPostprocessing = 0; 148 | }; 149 | /* End PBXRezBuildPhase section */ 150 | 151 | /* Begin PBXSourcesBuildPhase section */ 152 | 2FBBEADA08F335360078DB84 /* Sources */ = { 153 | isa = PBXSourcesBuildPhase; 154 | buildActionMask = 2147483647; 155 | files = ( 156 | 63FE3733195078FA00B07A04 /* commonsyms.c in Sources */, 157 | 63F3D3371AF3B9C50081102E /* olaoutput.cpp in Sources */, 158 | ); 159 | runOnlyForDeploymentPostprocessing = 0; 160 | }; 161 | /* End PBXSourcesBuildPhase section */ 162 | 163 | /* Begin XCBuildConfiguration section */ 164 | 2FBBEAD008F335010078DB84 /* Development */ = { 165 | isa = XCBuildConfiguration; 166 | buildSettings = { 167 | MACOSX_DEPLOYMENT_TARGET = 10.7; 168 | }; 169 | name = Development; 170 | }; 171 | 2FBBEAD108F335010078DB84 /* Deployment */ = { 172 | isa = XCBuildConfiguration; 173 | buildSettings = { 174 | MACOSX_DEPLOYMENT_TARGET = 10.7; 175 | }; 176 | name = Deployment; 177 | }; 178 | 2FBBEAE108F335360078DB84 /* Development */ = { 179 | isa = XCBuildConfiguration; 180 | baseConfigurationReference = 63FE36D6195073C400B07A04 /* maxmspsdk.xcconfig */; 181 | buildSettings = { 182 | CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; 183 | CLANG_CXX_LIBRARY = "libc++"; 184 | COMBINE_HIDPI_IMAGES = YES; 185 | COPY_PHASE_STRIP = NO; 186 | FRAMEWORK_SEARCH_PATHS = ( 187 | "$(inherited)", 188 | "/Users/David/LocalDev/impmaxobjects/max6-sdk/c74support/msp-includes", 189 | ); 190 | GCC_OPTIMIZATION_LEVEL = 0; 191 | GCC_SYMBOLS_PRIVATE_EXTERN = YES; 192 | HEADER_SEARCH_PATHS = ( 193 | "\"$(C74SUPPORT)/max-includes\"", 194 | "\"$(C74SUPPORT)/msp-includes\"", 195 | "\"$(C74SUPPORT)/jit-includes\"", 196 | /opt/local/include/, 197 | ); 198 | INFOPLIST_FILE = ../xcodeconfig/Info.plist; 199 | LIBRARY_SEARCH_PATHS = ( 200 | /opt/local/lib/, 201 | /opt/local/lib, 202 | ); 203 | OTHER_LDFLAGS = "$(C74_SYM_LINKER_FLAGS)"; 204 | }; 205 | name = Development; 206 | }; 207 | 2FBBEAE208F335360078DB84 /* Deployment */ = { 208 | isa = XCBuildConfiguration; 209 | baseConfigurationReference = 63FE36D6195073C400B07A04 /* maxmspsdk.xcconfig */; 210 | buildSettings = { 211 | CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; 212 | CLANG_CXX_LIBRARY = "libc++"; 213 | COMBINE_HIDPI_IMAGES = YES; 214 | COPY_PHASE_STRIP = YES; 215 | FRAMEWORK_SEARCH_PATHS = ( 216 | "$(inherited)", 217 | "/Users/David/LocalDev/impmaxobjects/max6-sdk/c74support/msp-includes", 218 | ); 219 | GCC_SYMBOLS_PRIVATE_EXTERN = YES; 220 | HEADER_SEARCH_PATHS = ( 221 | "\"$(C74SUPPORT)/max-includes\"", 222 | "\"$(C74SUPPORT)/msp-includes\"", 223 | "\"$(C74SUPPORT)/jit-includes\"", 224 | /opt/local/include/, 225 | ); 226 | INFOPLIST_FILE = ../xcodeconfig/Info.plist; 227 | LIBRARY_SEARCH_PATHS = ( 228 | /opt/local/lib/, 229 | /opt/local/lib, 230 | ); 231 | OTHER_LDFLAGS = "$(C74_SYM_LINKER_FLAGS)"; 232 | }; 233 | name = Deployment; 234 | }; 235 | /* End XCBuildConfiguration section */ 236 | 237 | /* Begin XCConfigurationList section */ 238 | 2FBBEACF08F335010078DB84 /* Build configuration list for PBXProject "olaoutput" */ = { 239 | isa = XCConfigurationList; 240 | buildConfigurations = ( 241 | 2FBBEAD008F335010078DB84 /* Development */, 242 | 2FBBEAD108F335010078DB84 /* Deployment */, 243 | ); 244 | defaultConfigurationIsVisible = 0; 245 | defaultConfigurationName = Development; 246 | }; 247 | 2FBBEAE008F335360078DB84 /* Build configuration list for PBXNativeTarget "olaoutput" */ = { 248 | isa = XCConfigurationList; 249 | buildConfigurations = ( 250 | 2FBBEAE108F335360078DB84 /* Development */, 251 | 2FBBEAE208F335360078DB84 /* Deployment */, 252 | ); 253 | defaultConfigurationIsVisible = 0; 254 | defaultConfigurationName = Development; 255 | }; 256 | /* End XCConfigurationList section */ 257 | }; 258 | rootObject = 089C1669FE841209C02AAC07 /* Project object */; 259 | } 260 | -------------------------------------------------------------------------------- /olaoutput/olaoutput.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | MAX OLA Output Plugin 3 | OlaOutput.cpp 4 | 5 | Copyright (c) Daniel Edgar, Simon Newton and David Butler 6 | 7 | This program is free software; you can redistribute it and/or 8 | modify it under the terms of the GNU General Public License 9 | Version 2 as published by the Free Software Foundation. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. The license is 15 | in the file "COPYING". 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 20 | */ 21 | 22 | /** 23 | @file 24 | OlaOutput - Sends MAX list data to the OLA Daemon 25 | 26 | @ingroup examples 27 | */ 28 | 29 | #include "ext.h" 30 | #include "ext_obex.h" 31 | 32 | #include 33 | #include 34 | #include 35 | #include 36 | 37 | using ola::StreamingClient; 38 | using ola::DmxBuffer; 39 | 40 | // object structure 41 | typedef struct _olaoutput 42 | { 43 | t_object object; 44 | 45 | void *outletDump; 46 | void *outletConnectionState; 47 | 48 | StreamingClient *client; 49 | DmxBuffer olaBuffer; 50 | 51 | t_uint8 buffer[512]; 52 | 53 | t_atom_long universe; 54 | 55 | t_bool isBlackout; 56 | t_bool isConnected; 57 | 58 | } t_olaoutput; 59 | 60 | 61 | // prototypes 62 | void *olaoutput_new(t_symbol *s, long argc, t_atom *argv); 63 | void olaoutput_free(t_olaoutput* x); 64 | void olaoutput_assist(t_olaoutput *x, void *b, long io, long index, char *s); 65 | 66 | void olaoutput_list(t_olaoutput *x, t_symbol *msg, long argc, t_atom *argv); 67 | void olaoutput_int(t_olaoutput *x, t_atom_long value); 68 | void olaoutput_float(t_olaoutput *x, double dmxValue); 69 | void olaoutput_channel(t_olaoutput *x, t_symbol *msg, long argc, t_atom *argv); 70 | 71 | void olaoutput_connect(t_olaoutput* x); 72 | void olaoutput_send(t_olaoutput *x); 73 | 74 | t_max_err olaoutput_universe_set(t_olaoutput *x, t_object *attr, long argc, t_atom *argv); 75 | t_max_err olaoutput_blackout_set(t_olaoutput *x, t_object *attr, long argc, t_atom *argv); 76 | 77 | // The class structure for this plugin 78 | static t_class *olaoutput_class = NULL; 79 | 80 | 81 | // ****************************************************************************************************************** 82 | 83 | /* 84 | * The entry point to this plugin. This sets up the global s_ola_output_class 85 | * object which tells MAX how to create objects of type Ola Output. 86 | */ 87 | int C74_EXPORT main(void) 88 | { 89 | // turn on OLA logging 90 | ola::InitLogging(ola::OLA_LOG_WARN, ola::OLA_LOG_STDERR); 91 | 92 | common_symbols_init(); 93 | 94 | t_class *c = class_new("olaoutput", 95 | (method) olaoutput_new, 96 | (method) olaoutput_free, 97 | sizeof(t_olaoutput), 98 | (method) NULL, 99 | A_GIMME, 100 | 0); 101 | 102 | class_addmethod(c, (method) olaoutput_list, "list", A_GIMME, 0); 103 | class_addmethod(c, (method) olaoutput_int, "int", A_LONG, 0); 104 | class_addmethod(c, (method) olaoutput_float, "float", A_FLOAT, 0); 105 | class_addmethod(c, (method) olaoutput_channel, "channel", A_GIMME, 0); 106 | class_addmethod(c, (method) olaoutput_connect, "connect", 0); 107 | 108 | class_addmethod(c, (method) olaoutput_assist, "assist", A_CANT, 0); 109 | 110 | CLASS_ATTR_LONG(c, "universe", 0, t_olaoutput, universe); 111 | CLASS_ATTR_ACCESSORS(c, "universe", NULL, olaoutput_universe_set); 112 | CLASS_ATTR_LABEL(c, "universe", 0, "OLA Universe"); 113 | CLASS_ATTR_CATEGORY(c, "universe", 0, "Settings"); 114 | CLASS_ATTR_ORDER(c, "universe", 0, "1"); 115 | CLASS_ATTR_SAVE(c, "universe", 0); 116 | 117 | CLASS_ATTR_CHAR(c, "blackout", 0, t_olaoutput, isBlackout); 118 | CLASS_ATTR_ACCESSORS(c, "blackout", NULL, olaoutput_blackout_set); 119 | CLASS_ATTR_STYLE_LABEL(c, "blackout", 0, "onoff", "Blackout"); 120 | CLASS_ATTR_CATEGORY(c, "blackout", 0, "Settings"); 121 | CLASS_ATTR_ORDER(c, "blackout", 0, "2"); 122 | 123 | class_register(CLASS_BOX, c); 124 | olaoutput_class = c; 125 | 126 | post("olaoutput Version 0.9"); 127 | 128 | return 0; 129 | } 130 | 131 | // ****************************************************************************************************************** 132 | 133 | /* 134 | * Create a new OlaOutput object. 135 | * @param t_symbol 136 | * @param long number of arguments 137 | * @param argv argument atoms 138 | */ 139 | void *olaoutput_new(t_symbol *s, long argc, t_atom *argv) 140 | { 141 | 142 | t_olaoutput *x = (t_olaoutput*) object_alloc(olaoutput_class); 143 | 144 | if (x) { 145 | 146 | x->outletDump = outlet_new((t_object*)x, NULL); 147 | x->outletConnectionState = outlet_new((t_object*)x, NULL); 148 | 149 | x->isConnected = false; 150 | x->isBlackout = false; 151 | 152 | // connect to ola 153 | x->client = new StreamingClient(); 154 | 155 | if (argc > 0 && atom_gettype(argv) == A_LONG) 156 | object_attr_setlong(x, gensym("universe"), atom_getlong(argv)); 157 | else 158 | x->universe = 0; 159 | 160 | attr_args_process(x, argc, argv); 161 | } 162 | 163 | return x; 164 | } 165 | 166 | 167 | 168 | /* 169 | * Cleanup this OlaOutput object 170 | * @param t_olaoutput the object to destroy 171 | */ 172 | void olaoutput_free(t_olaoutput *x) 173 | { 174 | if (x->client) { 175 | delete x->client; 176 | x->client = NULL; 177 | } 178 | } 179 | 180 | 181 | 182 | /* 183 | * To show descriptions of your object’s inlets and outlets while editing a patcher, 184 | * this method can respond to the assist message with a function that copies the text to a string. 185 | * @param t_olaoutput a pointer to a t_olaoutput struct 186 | * @param b 187 | * @param io 188 | * @param index 189 | * @param s 190 | */ 191 | void olaoutput_assist(t_olaoutput *x, void *b, long io, long index, char *s) 192 | { 193 | switch (io) { 194 | case 1: 195 | strncpy_zero(s, "olaoutput", 512); 196 | break; 197 | case 2: 198 | switch (index) { 199 | case 0: 200 | strncpy_zero(s, "connection state", 512); 201 | break; 202 | case 1: 203 | strncpy_zero(s, "dump outlet", 512); 204 | break; 205 | } 206 | break; 207 | } 208 | } 209 | 210 | // ****************************************************************************************************************** 211 | 212 | /* 213 | * Write a list of values to the local buffer 214 | * @param t_olaoutput a pointer to a t_olaoutput struct 215 | * @param msg the name of the message received 216 | * @param argc the number of atoms 217 | * @param argv a pointer to the head of a list of atoms 218 | */ 219 | void olaoutput_list(t_olaoutput *x, t_symbol *msg, long argc, t_atom *argv) 220 | { 221 | t_atom_long dmxValue; 222 | 223 | for (int i = 0; i < argc && i < 512; i++) { 224 | 225 | switch (atom_gettype(argv+i)) { 226 | case A_LONG: 227 | dmxValue = atom_getlong(argv+i); 228 | dmxValue = std::min((t_atom_long)255, dmxValue); 229 | dmxValue = std::max((t_atom_long)0, dmxValue); 230 | x->buffer[i] = dmxValue; 231 | break; 232 | 233 | case A_FLOAT: 234 | dmxValue = (t_atom_long)floor(atom_getfloat(argv+i) + 0.5); 235 | dmxValue = std::min((t_atom_long)255, dmxValue); 236 | dmxValue = std::max((t_atom_long)0, dmxValue); 237 | x->buffer[i] = dmxValue; 238 | break; 239 | 240 | default: 241 | break; 242 | } 243 | } 244 | 245 | olaoutput_send(x); 246 | } 247 | 248 | 249 | /* 250 | * Writes a single int value to the local buffer 251 | * @param t_olaoutput a pointer to a t_olaoutput struct 252 | */ 253 | void olaoutput_int(t_olaoutput *x, t_atom_long dmxValue) 254 | { 255 | dmxValue = std::min((t_atom_long)255, dmxValue); 256 | dmxValue = std::max((t_atom_long)0, dmxValue); 257 | x->buffer[0] = dmxValue; 258 | 259 | olaoutput_send(x); 260 | } 261 | 262 | 263 | /* 264 | * Write a single float value to the local buffer 265 | * @param t_olaoutput a pointer to a t_olaoutput struct 266 | */ 267 | void olaoutput_float(t_olaoutput *x, double dmxValue) 268 | { 269 | olaoutput_int(x, (t_atom_long)floor(dmxValue + 0.5)); 270 | } 271 | 272 | 273 | 274 | /* 275 | * Called to send data starting on a particular channel 276 | * @param t_olaoutput a pointer to a t_olaoutput struct 277 | * @param msg the name of the message received 278 | * @param argc the number of atoms 279 | * @param argv a pointer to the head of a list of atoms 280 | */ 281 | void olaoutput_channel(t_olaoutput *x, t_symbol *msg, long argc, t_atom *argv) 282 | { 283 | if (atom_gettype(argv) == A_LONG) { 284 | 285 | t_atom_long channel = atom_getlong(argv); 286 | 287 | if (channel >= 1 && channel <= 512) { 288 | 289 | t_atom_long dmxValue; 290 | 291 | for (int i = 1; i < argc && i < 513; i++) { 292 | 293 | switch (atom_gettype(argv+i)) { 294 | 295 | case A_LONG: 296 | dmxValue = atom_getlong(argv+i); 297 | dmxValue = std::min((t_atom_long)255, dmxValue); 298 | dmxValue = std::max((t_atom_long)0, dmxValue); 299 | x->buffer[i+(channel-1)] = dmxValue; 300 | break; 301 | 302 | case A_FLOAT: 303 | dmxValue = (t_atom_long)floor(atom_getfloat(argv+i) + 0.5); 304 | dmxValue = std::min((t_atom_long)255, dmxValue); 305 | dmxValue = std::max((t_atom_long)0, dmxValue); 306 | x->buffer[i+(channel-1)] = dmxValue; 307 | break; 308 | 309 | default: 310 | break; 311 | } 312 | } 313 | 314 | olaoutput_send(x); 315 | return; 316 | 317 | } else { 318 | object_error((t_object*)x, "Channel must be between 1 and 512 inclusive"); 319 | return; 320 | } 321 | 322 | } else { 323 | object_error((t_object*)x, "Channel must be an integer"); 324 | return; 325 | } 326 | 327 | } 328 | // ****************************************************************************************************************** 329 | 330 | /* 331 | * Initiates the connection to OLA 332 | * @param t_olaoutput a pointer to a t_olaoutput struct 333 | */ 334 | void olaoutput_connect(t_olaoutput *x) 335 | { 336 | if (x->isConnected == false || x->client == NULL) { 337 | 338 | //initiate the connection to ola 339 | if (x->client->Setup()) { 340 | 341 | x->isConnected = true; 342 | object_post((t_object*)x, "Connected to OLA"); 343 | 344 | } else { 345 | 346 | x->isConnected = false; 347 | object_post((t_object*)x, "OLA connection failed. olad must be running to send data."); 348 | 349 | } 350 | } 351 | 352 | outlet_int(x->outletConnectionState, x->isConnected); 353 | } 354 | 355 | 356 | /* 357 | * Sends data in the local buffer to OLA 358 | * @param t_olaoutput a pointer to a t_olaoutput struct 359 | */ 360 | void olaoutput_send(t_olaoutput *x) 361 | { 362 | if (x->isConnected == false) 363 | olaoutput_connect(x); 364 | 365 | if (x->isBlackout) 366 | x->olaBuffer.Blackout(); 367 | else 368 | x->olaBuffer.Set(x->buffer, 512); 369 | 370 | if (!x->client->SendDmx(x->universe, x->olaBuffer)) { 371 | 372 | if (x->isConnected) { 373 | x->isConnected = false; 374 | outlet_int(x->outletConnectionState, x->isConnected); 375 | object_error((t_object*)x, "Connection to OLA lost"); 376 | } else { 377 | object_error((t_object*)x, "Not connected to OLA"); 378 | } 379 | } 380 | } 381 | 382 | // ****************************************************************************************************************** 383 | 384 | /* 385 | * Sets the value of the universe attribute 386 | * @param t_olaoutput a pointer to a t_olaoutput struct 387 | * @param attr 388 | * @param argc 389 | * @param argv 390 | */ 391 | t_max_err olaoutput_universe_set(t_olaoutput *x, t_object *attr, long argc, t_atom *argv) 392 | { 393 | t_atom_long universe = atom_getlong(argv); 394 | 395 | if (universe >= 0 && universe <= 4294967295) { 396 | x->universe = universe; 397 | olaoutput_send(x); 398 | } 399 | 400 | return MAX_ERR_NONE; 401 | } 402 | 403 | 404 | 405 | /* 406 | * Sets the value of the blackout attribute 407 | * @param t_olaoutput a pointer to a t_olaoutput struct 408 | * @param attr 409 | * @param argc 410 | * @param argv 411 | */ 412 | t_max_err olaoutput_blackout_set(t_olaoutput *x, t_object *attr, long argc, t_atom *argv) 413 | { 414 | t_atom_long blackout = atom_getlong(argv); 415 | 416 | if (blackout > 0) 417 | x->isBlackout = true; 418 | else 419 | x->isBlackout = false; 420 | 421 | olaoutput_send(x); 422 | 423 | return MAX_ERR_NONE; 424 | } 425 | 426 | 427 | 428 | 429 | -------------------------------------------------------------------------------- /olaoutput/olaoutput.maxhelp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 6, 6 | "minor" : 1, 7 | "revision" : 2, 8 | "architecture" : "x86" 9 | } 10 | , 11 | "rect" : [ 447.0, 201.0, 507.0, 551.0 ], 12 | "bglocked" : 0, 13 | "openinpresentation" : 0, 14 | "default_fontsize" : 12.0, 15 | "default_fontface" : 0, 16 | "default_fontname" : "Arial", 17 | "gridonopen" : 0, 18 | "gridsize" : [ 10.0, 10.0 ], 19 | "gridsnaponopen" : 0, 20 | "statusbarvisible" : 2, 21 | "toolbarvisible" : 1, 22 | "boxanimatetime" : 200, 23 | "imprint" : 0, 24 | "enablehscroll" : 1, 25 | "enablevscroll" : 1, 26 | "devicewidth" : 0.0, 27 | "description" : "", 28 | "digest" : "", 29 | "tags" : "", 30 | "boxes" : [ { 31 | "box" : { 32 | "fontname" : "Arial", 33 | "fontsize" : 12.0, 34 | "frgb" : 0.0, 35 | "id" : "obj-31", 36 | "linecount" : 5, 37 | "maxclass" : "comment", 38 | "numinlets" : 1, 39 | "numoutlets" : 0, 40 | "patching_rect" : [ 330.0, 246.0, 171.0, 74.0 ], 41 | "text" : "OlaOutput connects to OLA automatically on loading. If you need to manually reconnect to OLA, send this message." 42 | } 43 | 44 | } 45 | , { 46 | "box" : { 47 | "fontname" : "Arial", 48 | "fontsize" : 12.0, 49 | "frgb" : 0.0, 50 | "id" : "obj-27", 51 | "linecount" : 2, 52 | "maxclass" : "comment", 53 | "numinlets" : 1, 54 | "numoutlets" : 0, 55 | "patching_rect" : [ 252.0, 435.0, 225.0, 33.0 ], 56 | "text" : "outlet for OLA connection state. 1=connected, 0=disconnected." 57 | } 58 | 59 | } 60 | , { 61 | "box" : { 62 | "fontname" : "Arial", 63 | "fontsize" : 12.0, 64 | "frgb" : 0.0, 65 | "id" : "obj-20", 66 | "linecount" : 2, 67 | "maxclass" : "comment", 68 | "numinlets" : 1, 69 | "numoutlets" : 0, 70 | "patching_rect" : [ 319.0, 198.0, 183.0, 33.0 ], 71 | "text" : "Queries for OLA connection state and outputs" 72 | } 73 | 74 | } 75 | , { 76 | "box" : { 77 | "fontname" : "Arial", 78 | "fontsize" : 12.0, 79 | "id" : "obj-12", 80 | "maxclass" : "message", 81 | "numinlets" : 2, 82 | "numoutlets" : 1, 83 | "outlettype" : [ "" ], 84 | "patching_rect" : [ 274.0, 254.0, 53.0, 18.0 ], 85 | "text" : "connect" 86 | } 87 | 88 | } 89 | , { 90 | "box" : { 91 | "fontname" : "Arial", 92 | "fontsize" : 12.0, 93 | "id" : "obj-11", 94 | "maxclass" : "message", 95 | "numinlets" : 2, 96 | "numoutlets" : 1, 97 | "outlettype" : [ "" ], 98 | "patching_rect" : [ 278.0, 201.0, 37.0, 18.0 ], 99 | "text" : "state" 100 | } 101 | 102 | } 103 | , { 104 | "box" : { 105 | "fontname" : "Arial", 106 | "fontsize" : 12.0, 107 | "id" : "obj-9", 108 | "maxclass" : "newobj", 109 | "numinlets" : 1, 110 | "numoutlets" : 0, 111 | "patching_rect" : [ 185.0, 436.0, 63.0, 20.0 ], 112 | "text" : "print state" 113 | } 114 | 115 | } 116 | , { 117 | "box" : { 118 | "fontname" : "Arial", 119 | "fontsize" : 12.0, 120 | "frgb" : 0.0, 121 | "id" : "obj-6", 122 | "maxclass" : "comment", 123 | "numinlets" : 1, 124 | "numoutlets" : 0, 125 | "patching_rect" : [ 310.0, 332.0, 175.0, 20.0 ], 126 | "text" : "2nd inlet sets current universe." 127 | } 128 | 129 | } 130 | , { 131 | "box" : { 132 | "fontname" : "Arial", 133 | "fontsize" : 12.754705, 134 | "frgb" : 0.0, 135 | "id" : "obj-2", 136 | "maxclass" : "comment", 137 | "numinlets" : 1, 138 | "numoutlets" : 0, 139 | "patching_rect" : [ 420.0, 10.0, 80.0, 21.0 ], 140 | "text" : "Version 0.8", 141 | "textcolor" : [ 0.93, 0.93, 0.97, 1.0 ], 142 | "varname" : "autohelp_top_digest[1]" 143 | } 144 | 145 | } 146 | , { 147 | "box" : { 148 | "fontface" : 1, 149 | "fontname" : "Arial", 150 | "fontsize" : 12.0, 151 | "frgb" : 0.0, 152 | "id" : "obj-29", 153 | "linecount" : 6, 154 | "maxclass" : "comment", 155 | "numinlets" : 1, 156 | "numoutlets" : 0, 157 | "patching_rect" : [ 10.0, 100.0, 126.0, 87.0 ], 158 | "text" : "OLAD MUST BE STARTED MANUALLY BEFORE THIS OBJECT WILL FUNCTION." 159 | } 160 | 161 | } 162 | , { 163 | "box" : { 164 | "fontname" : "Arial", 165 | "fontsize" : 12.0, 166 | "frgb" : 0.0, 167 | "id" : "obj-28", 168 | "linecount" : 2, 169 | "maxclass" : "comment", 170 | "numinlets" : 1, 171 | "numoutlets" : 0, 172 | "patching_rect" : [ 20.0, 468.0, 150.0, 33.0 ], 173 | "text" : "Click to launch the OLA HTML configuration page." 174 | } 175 | 176 | } 177 | , { 178 | "box" : { 179 | "fontname" : "Arial", 180 | "fontsize" : 12.0, 181 | "id" : "obj-26", 182 | "linecount" : 2, 183 | "maxclass" : "message", 184 | "numinlets" : 2, 185 | "numoutlets" : 1, 186 | "outlettype" : [ "" ], 187 | "patching_rect" : [ 20.0, 508.0, 240.0, 31.0 ], 188 | "text" : ";\rmax launchbrowser \\\"http://localhost:9090\\\"" 189 | } 190 | 191 | } 192 | , { 193 | "box" : { 194 | "fontface" : 1, 195 | "fontname" : "Arial", 196 | "fontsize" : 14.0, 197 | "frgb" : 0.0, 198 | "id" : "obj-25", 199 | "linecount" : 3, 200 | "maxclass" : "comment", 201 | "numinlets" : 1, 202 | "numoutlets" : 0, 203 | "patching_rect" : [ 370.0, 486.0, 128.0, 53.0 ], 204 | "text" : "Object by Daniel Edgar and Simon Newton.", 205 | "textcolor" : [ 1.0, 1.0, 1.0, 1.0 ] 206 | } 207 | 208 | } 209 | , { 210 | "box" : { 211 | "fontname" : "Arial", 212 | "fontsize" : 12.0, 213 | "frgb" : 0.0, 214 | "id" : "obj-24", 215 | "linecount" : 9, 216 | "maxclass" : "comment", 217 | "numinlets" : 1, 218 | "numoutlets" : 0, 219 | "patching_rect" : [ 10.0, 210.0, 132.0, 127.0 ], 220 | "text" : "1st inlet accepts integer list data.Values outside the range 0 to 255 will be read as 0 or 255 if they are below or above respectively.\nFloat values will be truncated." 221 | } 222 | 223 | } 224 | , { 225 | "box" : { 226 | "fontname" : "Arial", 227 | "fontsize" : 12.0, 228 | "frgb" : 0.0, 229 | "id" : "obj-23", 230 | "maxclass" : "comment", 231 | "numinlets" : 1, 232 | "numoutlets" : 0, 233 | "patching_rect" : [ 190.0, 170.0, 303.0, 20.0 ], 234 | "text" : "Toggle to send random values on the first six channels." 235 | } 236 | 237 | } 238 | , { 239 | "box" : { 240 | "id" : "obj-22", 241 | "maxclass" : "toggle", 242 | "numinlets" : 1, 243 | "numoutlets" : 1, 244 | "outlettype" : [ "int" ], 245 | "parameter_enable" : 0, 246 | "patching_rect" : [ 170.0, 170.0, 20.0, 20.0 ] 247 | } 248 | 249 | } 250 | , { 251 | "box" : { 252 | "fontname" : "Arial", 253 | "fontsize" : 12.0, 254 | "id" : "obj-21", 255 | "maxclass" : "newobj", 256 | "numinlets" : 1, 257 | "numoutlets" : 1, 258 | "outlettype" : [ "" ], 259 | "patcher" : { 260 | "fileversion" : 1, 261 | "appversion" : { 262 | "major" : 6, 263 | "minor" : 1, 264 | "revision" : 2, 265 | "architecture" : "x86" 266 | } 267 | , 268 | "rect" : [ 25.0, 69.0, 492.0, 208.0 ], 269 | "bglocked" : 0, 270 | "openinpresentation" : 0, 271 | "default_fontsize" : 12.0, 272 | "default_fontface" : 0, 273 | "default_fontname" : "Arial", 274 | "gridonopen" : 0, 275 | "gridsize" : [ 10.0, 10.0 ], 276 | "gridsnaponopen" : 0, 277 | "statusbarvisible" : 2, 278 | "toolbarvisible" : 1, 279 | "boxanimatetime" : 200, 280 | "imprint" : 0, 281 | "enablehscroll" : 1, 282 | "enablevscroll" : 1, 283 | "devicewidth" : 0.0, 284 | "description" : "", 285 | "digest" : "", 286 | "tags" : "", 287 | "boxes" : [ { 288 | "box" : { 289 | "fontname" : "Arial", 290 | "fontsize" : 12.0, 291 | "id" : "obj-16", 292 | "maxclass" : "newobj", 293 | "numinlets" : 6, 294 | "numoutlets" : 1, 295 | "outlettype" : [ "" ], 296 | "patching_rect" : [ 10.0, 140.0, 418.5, 20.0 ], 297 | "text" : "pak i i i i i i" 298 | } 299 | 300 | } 301 | , { 302 | "box" : { 303 | "fontname" : "Arial", 304 | "fontsize" : 12.0, 305 | "id" : "obj-15", 306 | "maxclass" : "newobj", 307 | "numinlets" : 3, 308 | "numoutlets" : 2, 309 | "outlettype" : [ "", "" ], 310 | "patching_rect" : [ 410.0, 110.0, 69.0, 20.0 ], 311 | "text" : "line 0 1000" 312 | } 313 | 314 | } 315 | , { 316 | "box" : { 317 | "fontname" : "Arial", 318 | "fontsize" : 12.0, 319 | "id" : "obj-14", 320 | "maxclass" : "newobj", 321 | "numinlets" : 3, 322 | "numoutlets" : 2, 323 | "outlettype" : [ "", "" ], 324 | "patching_rect" : [ 330.0, 110.0, 69.0, 20.0 ], 325 | "text" : "line 0 1000" 326 | } 327 | 328 | } 329 | , { 330 | "box" : { 331 | "fontname" : "Arial", 332 | "fontsize" : 12.0, 333 | "id" : "obj-13", 334 | "maxclass" : "newobj", 335 | "numinlets" : 3, 336 | "numoutlets" : 2, 337 | "outlettype" : [ "", "" ], 338 | "patching_rect" : [ 250.0, 110.0, 69.0, 20.0 ], 339 | "text" : "line 0 1000" 340 | } 341 | 342 | } 343 | , { 344 | "box" : { 345 | "fontname" : "Arial", 346 | "fontsize" : 12.0, 347 | "id" : "obj-12", 348 | "maxclass" : "newobj", 349 | "numinlets" : 3, 350 | "numoutlets" : 2, 351 | "outlettype" : [ "", "" ], 352 | "patching_rect" : [ 170.0, 110.0, 69.0, 20.0 ], 353 | "text" : "line 0 1000" 354 | } 355 | 356 | } 357 | , { 358 | "box" : { 359 | "fontname" : "Arial", 360 | "fontsize" : 12.0, 361 | "id" : "obj-11", 362 | "maxclass" : "newobj", 363 | "numinlets" : 3, 364 | "numoutlets" : 2, 365 | "outlettype" : [ "", "" ], 366 | "patching_rect" : [ 90.0, 110.0, 69.0, 20.0 ], 367 | "text" : "line 0 1000" 368 | } 369 | 370 | } 371 | , { 372 | "box" : { 373 | "fontname" : "Arial", 374 | "fontsize" : 12.0, 375 | "id" : "obj-10", 376 | "maxclass" : "newobj", 377 | "numinlets" : 3, 378 | "numoutlets" : 2, 379 | "outlettype" : [ "", "" ], 380 | "patching_rect" : [ 10.0, 110.0, 69.0, 20.0 ], 381 | "text" : "line 0 1000" 382 | } 383 | 384 | } 385 | , { 386 | "box" : { 387 | "fontname" : "Arial", 388 | "fontsize" : 12.0, 389 | "id" : "obj-9", 390 | "maxclass" : "newobj", 391 | "numinlets" : 2, 392 | "numoutlets" : 1, 393 | "outlettype" : [ "int" ], 394 | "patching_rect" : [ 410.0, 80.0, 75.0, 20.0 ], 395 | "text" : "random 256" 396 | } 397 | 398 | } 399 | , { 400 | "box" : { 401 | "fontname" : "Arial", 402 | "fontsize" : 12.0, 403 | "id" : "obj-8", 404 | "maxclass" : "newobj", 405 | "numinlets" : 2, 406 | "numoutlets" : 1, 407 | "outlettype" : [ "int" ], 408 | "patching_rect" : [ 330.0, 80.0, 75.0, 20.0 ], 409 | "text" : "random 256" 410 | } 411 | 412 | } 413 | , { 414 | "box" : { 415 | "fontname" : "Arial", 416 | "fontsize" : 12.0, 417 | "id" : "obj-7", 418 | "maxclass" : "newobj", 419 | "numinlets" : 2, 420 | "numoutlets" : 1, 421 | "outlettype" : [ "int" ], 422 | "patching_rect" : [ 250.0, 80.0, 75.0, 20.0 ], 423 | "text" : "random 256" 424 | } 425 | 426 | } 427 | , { 428 | "box" : { 429 | "fontname" : "Arial", 430 | "fontsize" : 12.0, 431 | "id" : "obj-6", 432 | "maxclass" : "newobj", 433 | "numinlets" : 2, 434 | "numoutlets" : 1, 435 | "outlettype" : [ "int" ], 436 | "patching_rect" : [ 170.0, 80.0, 75.0, 20.0 ], 437 | "text" : "random 256" 438 | } 439 | 440 | } 441 | , { 442 | "box" : { 443 | "fontname" : "Arial", 444 | "fontsize" : 12.0, 445 | "id" : "obj-5", 446 | "maxclass" : "newobj", 447 | "numinlets" : 2, 448 | "numoutlets" : 1, 449 | "outlettype" : [ "int" ], 450 | "patching_rect" : [ 90.0, 80.0, 75.0, 20.0 ], 451 | "text" : "random 256" 452 | } 453 | 454 | } 455 | , { 456 | "box" : { 457 | "fontname" : "Arial", 458 | "fontsize" : 12.0, 459 | "id" : "obj-4", 460 | "maxclass" : "newobj", 461 | "numinlets" : 2, 462 | "numoutlets" : 1, 463 | "outlettype" : [ "int" ], 464 | "patching_rect" : [ 10.0, 80.0, 75.0, 20.0 ], 465 | "text" : "random 256" 466 | } 467 | 468 | } 469 | , { 470 | "box" : { 471 | "fontname" : "Arial", 472 | "fontsize" : 12.0, 473 | "id" : "obj-3", 474 | "maxclass" : "newobj", 475 | "numinlets" : 2, 476 | "numoutlets" : 1, 477 | "outlettype" : [ "bang" ], 478 | "patching_rect" : [ 220.0, 40.0, 71.0, 20.0 ], 479 | "text" : "metro 1000" 480 | } 481 | 482 | } 483 | , { 484 | "box" : { 485 | "comment" : "", 486 | "id" : "obj-2", 487 | "maxclass" : "outlet", 488 | "numinlets" : 1, 489 | "numoutlets" : 0, 490 | "patching_rect" : [ 10.0, 170.0, 25.0, 25.0 ] 491 | } 492 | 493 | } 494 | , { 495 | "box" : { 496 | "comment" : "", 497 | "id" : "obj-1", 498 | "maxclass" : "inlet", 499 | "numinlets" : 0, 500 | "numoutlets" : 1, 501 | "outlettype" : [ "int" ], 502 | "patching_rect" : [ 220.0, 10.0, 25.0, 25.0 ] 503 | } 504 | 505 | } 506 | ], 507 | "lines" : [ { 508 | "patchline" : { 509 | "destination" : [ "obj-3", 0 ], 510 | "disabled" : 0, 511 | "hidden" : 0, 512 | "source" : [ "obj-1", 0 ] 513 | } 514 | 515 | } 516 | , { 517 | "patchline" : { 518 | "destination" : [ "obj-16", 0 ], 519 | "disabled" : 0, 520 | "hidden" : 0, 521 | "source" : [ "obj-10", 0 ] 522 | } 523 | 524 | } 525 | , { 526 | "patchline" : { 527 | "destination" : [ "obj-16", 1 ], 528 | "disabled" : 0, 529 | "hidden" : 0, 530 | "source" : [ "obj-11", 0 ] 531 | } 532 | 533 | } 534 | , { 535 | "patchline" : { 536 | "destination" : [ "obj-16", 2 ], 537 | "disabled" : 0, 538 | "hidden" : 0, 539 | "source" : [ "obj-12", 0 ] 540 | } 541 | 542 | } 543 | , { 544 | "patchline" : { 545 | "destination" : [ "obj-16", 3 ], 546 | "disabled" : 0, 547 | "hidden" : 0, 548 | "source" : [ "obj-13", 0 ] 549 | } 550 | 551 | } 552 | , { 553 | "patchline" : { 554 | "destination" : [ "obj-16", 4 ], 555 | "disabled" : 0, 556 | "hidden" : 0, 557 | "source" : [ "obj-14", 0 ] 558 | } 559 | 560 | } 561 | , { 562 | "patchline" : { 563 | "destination" : [ "obj-16", 5 ], 564 | "disabled" : 0, 565 | "hidden" : 0, 566 | "source" : [ "obj-15", 0 ] 567 | } 568 | 569 | } 570 | , { 571 | "patchline" : { 572 | "destination" : [ "obj-2", 0 ], 573 | "disabled" : 0, 574 | "hidden" : 0, 575 | "source" : [ "obj-16", 0 ] 576 | } 577 | 578 | } 579 | , { 580 | "patchline" : { 581 | "destination" : [ "obj-4", 0 ], 582 | "disabled" : 0, 583 | "hidden" : 0, 584 | "source" : [ "obj-3", 0 ] 585 | } 586 | 587 | } 588 | , { 589 | "patchline" : { 590 | "destination" : [ "obj-5", 0 ], 591 | "disabled" : 0, 592 | "hidden" : 0, 593 | "source" : [ "obj-3", 0 ] 594 | } 595 | 596 | } 597 | , { 598 | "patchline" : { 599 | "destination" : [ "obj-6", 0 ], 600 | "disabled" : 0, 601 | "hidden" : 0, 602 | "source" : [ "obj-3", 0 ] 603 | } 604 | 605 | } 606 | , { 607 | "patchline" : { 608 | "destination" : [ "obj-7", 0 ], 609 | "disabled" : 0, 610 | "hidden" : 0, 611 | "source" : [ "obj-3", 0 ] 612 | } 613 | 614 | } 615 | , { 616 | "patchline" : { 617 | "destination" : [ "obj-8", 0 ], 618 | "disabled" : 0, 619 | "hidden" : 0, 620 | "source" : [ "obj-3", 0 ] 621 | } 622 | 623 | } 624 | , { 625 | "patchline" : { 626 | "destination" : [ "obj-9", 0 ], 627 | "disabled" : 0, 628 | "hidden" : 0, 629 | "source" : [ "obj-3", 0 ] 630 | } 631 | 632 | } 633 | , { 634 | "patchline" : { 635 | "destination" : [ "obj-10", 0 ], 636 | "disabled" : 0, 637 | "hidden" : 0, 638 | "source" : [ "obj-4", 0 ] 639 | } 640 | 641 | } 642 | , { 643 | "patchline" : { 644 | "destination" : [ "obj-11", 0 ], 645 | "disabled" : 0, 646 | "hidden" : 0, 647 | "source" : [ "obj-5", 0 ] 648 | } 649 | 650 | } 651 | , { 652 | "patchline" : { 653 | "destination" : [ "obj-12", 0 ], 654 | "disabled" : 0, 655 | "hidden" : 0, 656 | "source" : [ "obj-6", 0 ] 657 | } 658 | 659 | } 660 | , { 661 | "patchline" : { 662 | "destination" : [ "obj-13", 0 ], 663 | "disabled" : 0, 664 | "hidden" : 0, 665 | "source" : [ "obj-7", 0 ] 666 | } 667 | 668 | } 669 | , { 670 | "patchline" : { 671 | "destination" : [ "obj-14", 0 ], 672 | "disabled" : 0, 673 | "hidden" : 0, 674 | "source" : [ "obj-8", 0 ] 675 | } 676 | 677 | } 678 | , { 679 | "patchline" : { 680 | "destination" : [ "obj-15", 0 ], 681 | "disabled" : 0, 682 | "hidden" : 0, 683 | "source" : [ "obj-9", 0 ] 684 | } 685 | 686 | } 687 | ] 688 | } 689 | , 690 | "patching_rect" : [ 170.0, 200.0, 85.0, 20.0 ], 691 | "saved_object_attributes" : { 692 | "default_fontface" : 0, 693 | "default_fontname" : "Arial", 694 | "default_fontsize" : 12.0, 695 | "description" : "", 696 | "digest" : "", 697 | "fontface" : 0, 698 | "fontname" : "Arial", 699 | "fontsize" : 12.0, 700 | "globalpatchername" : "", 701 | "tags" : "" 702 | } 703 | , 704 | "text" : "p testmachine" 705 | } 706 | 707 | } 708 | , { 709 | "box" : { 710 | "fontname" : "Arial", 711 | "fontsize" : 12.0, 712 | "id" : "obj-18", 713 | "maxclass" : "number", 714 | "numinlets" : 1, 715 | "numoutlets" : 2, 716 | "outlettype" : [ "int", "bang" ], 717 | "parameter_enable" : 0, 718 | "patching_rect" : [ 440.0, 110.0, 50.0, 20.0 ] 719 | } 720 | 721 | } 722 | , { 723 | "box" : { 724 | "fontname" : "Arial", 725 | "fontsize" : 12.0, 726 | "id" : "obj-19", 727 | "maxclass" : "number", 728 | "numinlets" : 1, 729 | "numoutlets" : 2, 730 | "outlettype" : [ "int", "bang" ], 731 | "parameter_enable" : 0, 732 | "patching_rect" : [ 380.0, 110.0, 50.0, 20.0 ] 733 | } 734 | 735 | } 736 | , { 737 | "box" : { 738 | "fontname" : "Arial", 739 | "fontsize" : 12.0, 740 | "id" : "obj-16", 741 | "maxclass" : "number", 742 | "numinlets" : 1, 743 | "numoutlets" : 2, 744 | "outlettype" : [ "int", "bang" ], 745 | "parameter_enable" : 0, 746 | "patching_rect" : [ 320.0, 110.0, 50.0, 20.0 ] 747 | } 748 | 749 | } 750 | , { 751 | "box" : { 752 | "fontname" : "Arial", 753 | "fontsize" : 12.0, 754 | "id" : "obj-17", 755 | "maxclass" : "number", 756 | "numinlets" : 1, 757 | "numoutlets" : 2, 758 | "outlettype" : [ "int", "bang" ], 759 | "parameter_enable" : 0, 760 | "patching_rect" : [ 260.0, 110.0, 50.0, 20.0 ] 761 | } 762 | 763 | } 764 | , { 765 | "box" : { 766 | "fontname" : "Arial", 767 | "fontsize" : 12.0, 768 | "id" : "obj-15", 769 | "maxclass" : "newobj", 770 | "numinlets" : 6, 771 | "numoutlets" : 1, 772 | "outlettype" : [ "" ], 773 | "patching_rect" : [ 140.0, 140.0, 318.5, 20.0 ], 774 | "text" : "pak i i i i i i" 775 | } 776 | 777 | } 778 | , { 779 | "box" : { 780 | "fontname" : "Arial", 781 | "fontsize" : 12.0, 782 | "id" : "obj-14", 783 | "maxclass" : "number", 784 | "numinlets" : 1, 785 | "numoutlets" : 2, 786 | "outlettype" : [ "int", "bang" ], 787 | "parameter_enable" : 0, 788 | "patching_rect" : [ 200.0, 110.0, 50.0, 20.0 ] 789 | } 790 | 791 | } 792 | , { 793 | "box" : { 794 | "fontname" : "Arial", 795 | "fontsize" : 12.0, 796 | "id" : "obj-13", 797 | "maxclass" : "number", 798 | "numinlets" : 1, 799 | "numoutlets" : 2, 800 | "outlettype" : [ "int", "bang" ], 801 | "parameter_enable" : 0, 802 | "patching_rect" : [ 140.0, 110.0, 50.0, 20.0 ] 803 | } 804 | 805 | } 806 | , { 807 | "box" : { 808 | "fontname" : "Arial", 809 | "fontsize" : 12.0, 810 | "frgb" : 0.0, 811 | "id" : "obj-10", 812 | "maxclass" : "comment", 813 | "numinlets" : 1, 814 | "numoutlets" : 0, 815 | "patching_rect" : [ 230.0, 395.0, 257.0, 20.0 ], 816 | "text" : "Argument sets initial universe (otherwise 1)." 817 | } 818 | 819 | } 820 | , { 821 | "box" : { 822 | "fontname" : "Arial", 823 | "fontsize" : 12.0, 824 | "id" : "obj-8", 825 | "maxclass" : "number", 826 | "numinlets" : 1, 827 | "numoutlets" : 2, 828 | "outlettype" : [ "int", "bang" ], 829 | "parameter_enable" : 0, 830 | "patching_rect" : [ 257.0, 333.0, 50.0, 20.0 ] 831 | } 832 | 833 | } 834 | , { 835 | "box" : { 836 | "fontface" : 3, 837 | "fontname" : "Arial", 838 | "fontsize" : 20.871338, 839 | "frgb" : 0.0, 840 | "id" : "obj-3", 841 | "maxclass" : "comment", 842 | "numinlets" : 1, 843 | "numoutlets" : 0, 844 | "patching_rect" : [ 10.0, 10.0, 130.0, 30.0 ], 845 | "text" : "olaoutput", 846 | "textcolor" : [ 0.93, 0.93, 0.97, 1.0 ], 847 | "varname" : "autohelp_top_title" 848 | } 849 | 850 | } 851 | , { 852 | "box" : { 853 | "fontname" : "Arial", 854 | "fontsize" : 12.754705, 855 | "frgb" : 0.0, 856 | "id" : "obj-4", 857 | "maxclass" : "comment", 858 | "numinlets" : 1, 859 | "numoutlets" : 0, 860 | "patching_rect" : [ 10.0, 38.0, 485.0, 21.0 ], 861 | "text" : "Send DMX data to OLA (Open Lighting Architecture)", 862 | "textcolor" : [ 0.93, 0.93, 0.97, 1.0 ], 863 | "varname" : "autohelp_top_digest" 864 | } 865 | 866 | } 867 | , { 868 | "box" : { 869 | "fontname" : "Arial", 870 | "fontsize" : 11.595187, 871 | "frgb" : 0.0, 872 | "id" : "obj-5", 873 | "linecount" : 2, 874 | "maxclass" : "comment", 875 | "numinlets" : 1, 876 | "numoutlets" : 0, 877 | "patching_rect" : [ 10.0, 60.0, 493.0, 32.0 ], 878 | "text" : "olaoutput sends recieves a list of integers in the range 0-255 and sends them to OLA for transmission via IP or hardware. NOTE: olaoutput .8 requires OLA .8.28 or above", 879 | "varname" : "autohelp_top_description" 880 | } 881 | 882 | } 883 | , { 884 | "box" : { 885 | "color" : [ 0.945098, 0.913725, 0.407843, 1.0 ], 886 | "fontname" : "Arial", 887 | "fontsize" : 12.0, 888 | "id" : "obj-1", 889 | "maxclass" : "newobj", 890 | "numinlets" : 2, 891 | "numoutlets" : 1, 892 | "outlettype" : [ "int" ], 893 | "patching_rect" : [ 140.0, 395.0, 70.0, 20.0 ], 894 | "text" : "olaoutput 0" 895 | } 896 | 897 | } 898 | , { 899 | "box" : { 900 | "background" : 1, 901 | "grad1" : [ 0.27, 0.35, 0.47, 1.0 ], 902 | "grad2" : [ 0.85, 0.85, 0.85, 1.0 ], 903 | "id" : "obj-30", 904 | "maxclass" : "panel", 905 | "mode" : 1, 906 | "numinlets" : 1, 907 | "numoutlets" : 0, 908 | "patching_rect" : [ 370.0, 483.0, 130.0, 60.0 ], 909 | "varname" : "autohelp_top_panel[1]" 910 | } 911 | 912 | } 913 | , { 914 | "box" : { 915 | "background" : 1, 916 | "grad1" : [ 0.27, 0.35, 0.47, 1.0 ], 917 | "grad2" : [ 0.85, 0.85, 0.85, 1.0 ], 918 | "id" : "obj-7", 919 | "maxclass" : "panel", 920 | "mode" : 1, 921 | "numinlets" : 1, 922 | "numoutlets" : 0, 923 | "patching_rect" : [ 5.0, 7.0, 495.0, 52.0 ], 924 | "varname" : "autohelp_top_panel" 925 | } 926 | 927 | } 928 | ], 929 | "lines" : [ { 930 | "patchline" : { 931 | "destination" : [ "obj-9", 0 ], 932 | "disabled" : 0, 933 | "hidden" : 0, 934 | "source" : [ "obj-1", 0 ] 935 | } 936 | 937 | } 938 | , { 939 | "patchline" : { 940 | "destination" : [ "obj-1", 0 ], 941 | "disabled" : 0, 942 | "hidden" : 0, 943 | "source" : [ "obj-11", 0 ] 944 | } 945 | 946 | } 947 | , { 948 | "patchline" : { 949 | "destination" : [ "obj-1", 0 ], 950 | "disabled" : 0, 951 | "hidden" : 0, 952 | "source" : [ "obj-12", 0 ] 953 | } 954 | 955 | } 956 | , { 957 | "patchline" : { 958 | "destination" : [ "obj-15", 0 ], 959 | "disabled" : 0, 960 | "hidden" : 0, 961 | "source" : [ "obj-13", 0 ] 962 | } 963 | 964 | } 965 | , { 966 | "patchline" : { 967 | "destination" : [ "obj-15", 1 ], 968 | "disabled" : 0, 969 | "hidden" : 0, 970 | "source" : [ "obj-14", 0 ] 971 | } 972 | 973 | } 974 | , { 975 | "patchline" : { 976 | "destination" : [ "obj-1", 0 ], 977 | "disabled" : 0, 978 | "hidden" : 0, 979 | "source" : [ "obj-15", 0 ] 980 | } 981 | 982 | } 983 | , { 984 | "patchline" : { 985 | "destination" : [ "obj-15", 3 ], 986 | "disabled" : 0, 987 | "hidden" : 0, 988 | "source" : [ "obj-16", 0 ] 989 | } 990 | 991 | } 992 | , { 993 | "patchline" : { 994 | "destination" : [ "obj-15", 2 ], 995 | "disabled" : 0, 996 | "hidden" : 0, 997 | "source" : [ "obj-17", 0 ] 998 | } 999 | 1000 | } 1001 | , { 1002 | "patchline" : { 1003 | "destination" : [ "obj-15", 5 ], 1004 | "disabled" : 0, 1005 | "hidden" : 0, 1006 | "source" : [ "obj-18", 0 ] 1007 | } 1008 | 1009 | } 1010 | , { 1011 | "patchline" : { 1012 | "destination" : [ "obj-15", 4 ], 1013 | "disabled" : 0, 1014 | "hidden" : 0, 1015 | "source" : [ "obj-19", 0 ] 1016 | } 1017 | 1018 | } 1019 | , { 1020 | "patchline" : { 1021 | "destination" : [ "obj-1", 0 ], 1022 | "disabled" : 0, 1023 | "hidden" : 0, 1024 | "source" : [ "obj-21", 0 ] 1025 | } 1026 | 1027 | } 1028 | , { 1029 | "patchline" : { 1030 | "destination" : [ "obj-21", 0 ], 1031 | "disabled" : 0, 1032 | "hidden" : 0, 1033 | "source" : [ "obj-22", 0 ] 1034 | } 1035 | 1036 | } 1037 | , { 1038 | "patchline" : { 1039 | "destination" : [ "obj-1", 1 ], 1040 | "disabled" : 0, 1041 | "hidden" : 0, 1042 | "source" : [ "obj-8", 0 ] 1043 | } 1044 | 1045 | } 1046 | ], 1047 | "dependency_cache" : [ { 1048 | "name" : "OLAOutput.mxo", 1049 | "type" : "iLaX" 1050 | } 1051 | ] 1052 | } 1053 | 1054 | } 1055 | --------------------------------------------------------------------------------