diff options
Diffstat (limited to 'externals/grill')
23 files changed, 338 insertions, 117 deletions
diff --git a/externals/grill/flext/config-pd-darwin.txt b/externals/grill/flext/config-pd-darwin.txt index 7b1a0fb9..f26bf03a 100644 --- a/externals/grill/flext/config-pd-darwin.txt +++ b/externals/grill/flext/config-pd-darwin.txt @@ -3,10 +3,10 @@ # # your c++ compiler (define only if it's different than g++) -# CXX=g++ +CXX=g++-3.3 # where are the PD header files? (m_pd.h, m_imp.h, g_canvas.h) -PDPATH=/usr/local/pd/src +PDPATH=/Users/thomas/Desktop/pd-0.37-test8/src # where is the SndObj include directory? # (leave blank or comment out to disable SndObj support) @@ -21,7 +21,7 @@ TARGDIR=./pd-darwin # where should flext libraries be installed? # (leave blank to omit installation) -INSTDIR=/usr/local/pd/flext +INSTDIR=/usr/local/lib/pd/flext # additional compiler flags # (check if they fit for your system!) diff --git a/externals/grill/flext/flext.cw b/externals/grill/flext/flext.cw Binary files differindex 5d64cb85..60cdd1eb 100644 --- a/externals/grill/flext/flext.cw +++ b/externals/grill/flext/flext.cw diff --git a/externals/grill/flext/flext.pbproj/project.pbxproj b/externals/grill/flext/flext.pbproj/project.pbxproj index 58f090cd..c936555b 100755 --- a/externals/grill/flext/flext.pbproj/project.pbxproj +++ b/externals/grill/flext/flext.pbproj/project.pbxproj @@ -37,6 +37,7 @@ F5128F2503864E5501A80AC9, F5128F2603864E5501A80AC9, ); + hasScannedForEncodings = 1; isa = PBXProject; mainGroup = 0867D691FE84028FC02AAC07; productRefGroup = 034768DDFF38A45A11DB9C8B; @@ -131,6 +132,7 @@ F5B1FAC8041191190179CFEF, F598D263044CC4A001A80AC9, F598D264044CC4A001A80AC9, + E9BDCC4104F4D7C1008929A0, ); isa = PBXGroup; name = Source; @@ -142,66 +144,153 @@ //082 //083 //084 +//E90 +//E91 +//E92 +//E93 +//E94 + E9BDCC4104F4D7C1008929A0 = { + fileEncoding = 30; + isa = PBXFileReference; + name = flattr_ed.cpp; + path = source/flattr_ed.cpp; + refType = 4; + }; + E9BDCC4204F4D7C1008929A0 = { + fileRef = E9BDCC4104F4D7C1008929A0; + isa = PBXBuildFile; + settings = { + }; + }; + E9BDCC4304F4D7C1008929A0 = { + fileRef = E9BDCC4104F4D7C1008929A0; + isa = PBXBuildFile; + settings = { + }; + }; + E9BDCC4404F4D7C1008929A0 = { + fileRef = E9BDCC4104F4D7C1008929A0; + isa = PBXBuildFile; + settings = { + }; + }; + E9BDCC4504F4D7C1008929A0 = { + fileRef = E9BDCC4104F4D7C1008929A0; + isa = PBXBuildFile; + settings = { + }; + }; + E9BDCC4604F4D7C1008929A0 = { + fileRef = E9BDCC4104F4D7C1008929A0; + isa = PBXBuildFile; + settings = { + }; + }; + E9BDCC4704F4D7C1008929A0 = { + fileRef = E9BDCC4104F4D7C1008929A0; + isa = PBXBuildFile; + settings = { + }; + }; + E9BDCC4804F4D7C1008929A0 = { + fileRef = E9BDCC4104F4D7C1008929A0; + isa = PBXBuildFile; + settings = { + }; + }; + E9BDCC4904F4D7C1008929A0 = { + fileRef = E9BDCC4104F4D7C1008929A0; + isa = PBXBuildFile; + settings = { + }; + }; + E9BDCC4A04F4D7C1008929A0 = { + fileRef = E9BDCC4104F4D7C1008929A0; + isa = PBXBuildFile; + settings = { + }; + }; + E9BDCC4B04F4D7C1008929A0 = { + fileRef = E9BDCC4104F4D7C1008929A0; + isa = PBXBuildFile; + settings = { + }; + }; +//E90 +//E91 +//E92 +//E93 +//E94 //F50 //F51 //F52 //F53 //F54 F504A66B03CE39F501A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flatom_app.cpp; path = source/flatom_app.cpp; refType = 4; }; F504A66C03CE39F501A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flatom_part.cpp; path = source/flatom_part.cpp; refType = 4; }; F504A66D03CE39F501A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flitem.cpp; path = source/flitem.cpp; refType = 4; }; F504A66E03CE39F501A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flmeth.cpp; path = source/flmeth.cpp; refType = 4; }; F504A66F03CE39F501A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flmsg.cpp; path = source/flmsg.cpp; refType = 4; }; F504A67003CE39F501A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flprefix.h; path = source/flprefix.h; refType = 4; }; F504A67103CE39F501A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flproxy.cpp; path = source/flproxy.cpp; refType = 4; }; F504A67203CE39F501A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flqueue.cpp; path = source/flqueue.cpp; refType = 4; }; F504A67303CE39F501A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flstk.cpp; path = source/flstk.cpp; refType = 4; }; F504A67403CE39F501A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flstk.h; path = source/flstk.h; @@ -514,150 +603,175 @@ name = Deployment; }; F55CED7B0383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flatom_pr.cpp; path = source/flatom_pr.cpp; refType = 2; }; F55CED7C0383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flatom.cpp; path = source/flatom.cpp; refType = 2; }; F55CED7D0383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flattr.cpp; path = source/flattr.cpp; refType = 2; }; F55CED7E0383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flbase.cpp; path = source/flbase.cpp; refType = 2; }; F55CED7F0383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flbase.h; path = source/flbase.h; refType = 2; }; F55CED800383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flbuf.cpp; path = source/flbuf.cpp; refType = 2; }; F55CED810383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flclass.h; path = source/flclass.h; refType = 2; }; F55CED860383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = fldefs.h; path = source/fldefs.h; refType = 2; }; F55CED870383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = fldoxygen.h; path = source/fldoxygen.h; refType = 2; }; F55CED880383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = fldsp.cpp; path = source/fldsp.cpp; refType = 2; }; F55CED890383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = fldsp.h; path = source/fldsp.h; refType = 2; }; F55CED8A0383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flext.cpp; path = source/flext.cpp; refType = 2; }; F55CED8B0383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flext.h; path = source/flext.h; refType = 2; }; F55CED8C0383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flinternal.h; path = source/flinternal.h; refType = 2; }; F55CED8D0383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = fllib.cpp; path = source/fllib.cpp; refType = 2; }; F55CED8E0383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flmspbuffer.h; path = source/flmspbuffer.h; refType = 2; }; F55CED8F0383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flout.cpp; path = source/flout.cpp; refType = 2; }; F55CED900383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flsndobj.cpp; path = source/flsndobj.cpp; refType = 2; }; F55CED910383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flsndobj.h; path = source/flsndobj.h; refType = 2; }; F55CED920383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flstdc.h; path = source/flstdc.h; refType = 2; }; F55CED930383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flsupport.cpp; path = source/flsupport.cpp; refType = 2; }; F55CED940383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flsupport.h; path = source/flsupport.h; refType = 2; }; F55CED950383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flthr.cpp; path = source/flthr.cpp; refType = 2; }; F55CED960383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flutil.cpp; path = source/flutil.cpp; refType = 2; }; F55CED970383E50201A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flxlet.cpp; path = source/flxlet.cpp; @@ -738,6 +852,7 @@ F5B1FACE0411935C0179CFEF, F5CBC62004757C1C01A0C81C, F5CBC62104757C1D01A0C81C, + E9BDCC4B04F4D7C1008929A0, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; @@ -786,7 +901,6 @@ name = "PD@OSX single"; productName = "PD@OSX"; productReference = F55CEDC20383E6E401A80AC9; - shouldUseHeadermap = 0; }; F55CEDC20383E6E401A80AC9 = { isa = PBXLibraryReference; @@ -963,7 +1077,6 @@ productInstallPath = /usr/local/pd/flext; productName = "PD@OSX"; productReference = F55CEE120383F55201A80AC9; - shouldUseHeadermap = 0; }; F55CEDF70383F55201A80AC9 = { buildActionMask = 2147483647; @@ -1079,6 +1192,7 @@ F5B1FACF041193680179CFEF, F5CBC62204757C2201A0C81C, F5CBC62304757C2301A0C81C, + E9BDCC4A04F4D7C1008929A0, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; @@ -1211,7 +1325,6 @@ productInstallPath = /usr/local/pd/flext; productName = "PD@OSX"; productReference = F55CEE2F0383F57A01A80AC9; - shouldUseHeadermap = 0; }; F55CEE140383F57A01A80AC9 = { buildActionMask = 2147483647; @@ -1327,6 +1440,7 @@ F5B1FAD0041193740179CFEF, F5CBC62404757C2601A0C81C, F5CBC62504757C2701A0C81C, + E9BDCC4904F4D7C1008929A0, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; @@ -1459,7 +1573,6 @@ productInstallPath = /usr/local/pd/flext; productName = "PD@OSX"; productReference = F55CEE4C0383F59B01A80AC9; - shouldUseHeadermap = 0; }; F55CEE310383F59B01A80AC9 = { buildActionMask = 2147483647; @@ -1575,6 +1688,7 @@ F5B1FACD0411918B0179CFEF, F598D265044CC4A001A80AC9, F598D266044CC4A001A80AC9, + E9BDCC4804F4D7C1008929A0, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; @@ -1696,7 +1810,6 @@ isa = PBXAggregateTarget; name = "all PD@OSX"; productName = "PD@OSX"; - shouldUseHeadermap = 0; }; F55CEE530383F9A301A80AC9 = { isa = PBXTargetDependency; @@ -1715,12 +1828,14 @@ target = F55CEE300383F59B01A80AC9; }; F598D263044CC4A001A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flbind.cpp; path = source/flbind.cpp; refType = 4; }; F598D264044CC4A001A80AC9 = { + fileEncoding = 30; isa = PBXFileReference; name = flsimd.cpp; path = source/flsimd.cpp; @@ -1768,7 +1883,6 @@ name = "Max@OSX threaded"; productName = "PD@OSX"; productReference = F59A5FAD0386DF3201A80AC9; - shouldUseHeadermap = 0; }; F59A5F920386DF3201A80AC9 = { buildActionMask = 2147483647; @@ -1881,6 +1995,7 @@ F504A6A203CE3C2801A80AC9, F504A6A303CE3C2901A80AC9, F504A6A403CE3C2901A80AC9, + E9BDCC4604F4D7C1008929A0, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; @@ -2012,7 +2127,6 @@ name = "Max@OSX single"; productName = "PD@OSX"; productReference = F5AAF632038683E801A80AC9; - shouldUseHeadermap = 0; }; F5AAF617038683E801A80AC9 = { buildActionMask = 2147483647; @@ -2125,6 +2239,7 @@ F504A69A03CE3C1E01A80AC9, F504A69B03CE3C1F01A80AC9, F504A69C03CE3C2001A80AC9, + E9BDCC4704F4D7C1008929A0, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; @@ -2227,6 +2342,7 @@ refType = 3; }; F5B1FAC8041191190179CFEF = { + fileEncoding = 30; isa = PBXFileReference; name = fltimer.cpp; path = source/fltimer.cpp; @@ -2286,7 +2402,6 @@ name = "jMax@OSX single"; productName = "PD@OSX"; productReference = F5C2051103D403B401A80AC9; - shouldUseHeadermap = 0; }; F5C204EE03D403B401A80AC9 = { buildActionMask = 2147483647; @@ -2405,6 +2520,7 @@ F5C2050C03D403B401A80AC9, F5C2050D03D403B401A80AC9, F5C2050E03D403B401A80AC9, + E9BDCC4504F4D7C1008929A0, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; @@ -2578,7 +2694,6 @@ name = "jMax@OSX threaded"; productName = "PD@OSX"; productReference = F5C2062403D470B401A80AC9; - shouldUseHeadermap = 0; }; F5C2060103D470B401A80AC9 = { buildActionMask = 2147483647; @@ -2697,6 +2812,7 @@ F5C2061F03D470B401A80AC9, F5C2062003D470B401A80AC9, F5C2062103D470B401A80AC9, + E9BDCC4404F4D7C1008929A0, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; @@ -2848,14 +2964,17 @@ F5CBC5B604757A5901A0C81C, ); buildSettings = { + CC = "/usr/bin/gcc-3.3"; + CPLUSPLUS = "/usr/bin/g++-3.3"; DEBUGGING_SYMBOLS = NO; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; - HEADER_SEARCH_PATHS = /usr/local/pd/src; + GCC_VERSION = 3.x; + HEADER_SEARCH_PATHS = /Volumes/Daten/Prog/pd/pd/src; INSTALL_PATH = /usr/local/lib; LIBRARY_STYLE = DYNAMIC; OPTIMIZATION_CFLAGS = "-O3"; - OTHER_CFLAGS = "-D FLEXT_SYS_PD -D FLEXT_SHARED -D FLEXT_THREADS -D FLEXT_USE_SIMD -Wno-switch -Wno-long-double"; + OTHER_CFLAGS = "-D FLEXT_SYS_PD -D FLEXT_SHARED -D FLEXT_PDLOCK -D FLEXT_USE_SIMD -Wno-switch -Wno-long-double -faltivec -maltivec -fkeep-inline-functions"; OTHER_LDFLAGS = "-lgcc -lstdc++ -flat_namespace -undefined suppress"; OTHER_LIBTOOL_FLAGS = ""; OTHER_REZFLAGS = ""; @@ -2872,7 +2991,6 @@ productInstallPath = /usr/local/lib; productName = "PD@OSX"; productReference = F5CBC5B704757A5901A0C81C; - shouldUseHeadermap = 0; }; F5CBC59304757A5901A0C81C = { buildActionMask = 2147483647; @@ -2994,6 +3112,7 @@ F5CBC5B404757A5901A0C81C, F5CBC61E04757C1401A0C81C, F5CBC61F04757C1401A0C81C, + E9BDCC4204F4D7C1008929A0, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; @@ -3145,60 +3264,70 @@ refType = 3; }; F5CBC5B804757BC801A0C81C = { + fileEncoding = 30; isa = PBXFileReference; name = fldefs_attradd.h; path = source/fldefs_attradd.h; refType = 4; }; F5CBC5B904757BC801A0C81C = { + fileEncoding = 30; isa = PBXFileReference; name = fldefs_attrcb.h; path = source/fldefs_attrcb.h; refType = 4; }; F5CBC5BA04757BC801A0C81C = { + fileEncoding = 30; isa = PBXFileReference; name = fldefs_attrvar.h; path = source/fldefs_attrvar.h; refType = 4; }; F5CBC5BB04757BC801A0C81C = { + fileEncoding = 30; isa = PBXFileReference; name = fldefs_hdr.h; path = source/fldefs_hdr.h; refType = 4; }; F5CBC5BC04757BC801A0C81C = { + fileEncoding = 30; isa = PBXFileReference; name = fldefs_methadd.h; path = source/fldefs_methadd.h; refType = 4; }; F5CBC5BD04757BC801A0C81C = { + fileEncoding = 30; isa = PBXFileReference; name = fldefs_methbind.h; path = source/fldefs_methbind.h; refType = 4; }; F5CBC5BE04757BC801A0C81C = { + fileEncoding = 30; isa = PBXFileReference; name = fldefs_methcall.h; path = source/fldefs_methcall.h; refType = 4; }; F5CBC5BF04757BC801A0C81C = { + fileEncoding = 30; isa = PBXFileReference; name = fldefs_methcb.h; path = source/fldefs_methcb.h; refType = 4; }; F5CBC5C004757BC801A0C81C = { + fileEncoding = 30; isa = PBXFileReference; name = fldefs_meththr.h; path = source/fldefs_meththr.h; refType = 4; }; F5CBC5C104757BC801A0C81C = { + fileEncoding = 30; isa = PBXFileReference; name = fldefs_setup.h; path = source/fldefs_setup.h; @@ -3826,11 +3955,11 @@ buildSettings = { DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; - HEADER_SEARCH_PATHS = /usr/local/pd/src; + HEADER_SEARCH_PATHS = /Volumes/Daten/Prog/pd/pd/src; INSTALL_PATH = /usr/local/lib; LIBRARY_STYLE = DYNAMIC; OPTIMIZATION_CFLAGS = "-O0"; - OTHER_CFLAGS = "-DFLEXT_SYS_PD -DFLEXT_DEBUG -DFLEXT_SHARED -DFLEXT_THREADS -DFLEXT_USE_SIMD -Wno-switch -Wno-long-double"; + OTHER_CFLAGS = "-DFLEXT_SYS_PD -DFLEXT_DEBUG -DFLEXT_SHARED -DFLEXT_PDLOCK -DFLEXT_USE_SIMD -Wno-switch -Wno-long-double -faltivec -maltivec -fkeep-inline-functions"; OTHER_LDFLAGS = "-lgcc -lstdc++ -flat_namespace -undefined suppress"; OTHER_LIBTOOL_FLAGS = ""; OTHER_REZFLAGS = ""; @@ -3847,7 +3976,6 @@ productInstallPath = /usr/local/lib; productName = "PD@OSX"; productReference = F5CBC69B047584CD01A0C81C; - shouldUseHeadermap = 0; }; F5CBC66A047584CD01A0C81C = { buildActionMask = 2147483647; @@ -4029,6 +4157,7 @@ F5CBC695047584CD01A0C81C, F5CBC696047584CD01A0C81C, F5CBC697047584CD01A0C81C, + E9BDCC4304F4D7C1008929A0, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; diff --git a/externals/grill/flext/flext.vcproj b/externals/grill/flext/flext.vcproj index 303c23ac..121ba62c 100644 --- a/externals/grill/flext/flext.vcproj +++ b/externals/grill/flext/flext.vcproj @@ -174,7 +174,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="c:\programme\audio\pd\src,f:\prog\audio\sndobj\include,f:\prog\audio\stk\include" + AdditionalIncludeDirectories="f:\prog\pd\pd-cvs\src,f:\prog\audio\sndobj\include,f:\prog\audio\stk\include" PreprocessorDefinitions="WIN32;_DEBUG;_LIB;FLEXT_SYS=2;FLEXT_USE_SIMD" BasicRuntimeChecks="3" RuntimeLibrary="5" @@ -275,7 +275,7 @@ Name="VCCLCompilerTool" Optimization="2" InlineFunctionExpansion="1" - AdditionalIncludeDirectories="c:\programme\audio\pd\src,f:\prog\audio\sndobj\include,f:\prog\audio\stk\include" + AdditionalIncludeDirectories="f:\prog\pd\pd-cvs\src,f:\prog\audio\sndobj\include,f:\prog\audio\stk\include" PreprocessorDefinitions="WIN32;NDEBUG;_LIB;FLEXT_SYS=2;FLEXT_USE_SIMD" StringPooling="TRUE" RuntimeLibrary="4" diff --git a/externals/grill/flext/source/flatom_pr.cpp b/externals/grill/flext/source/flatom_pr.cpp index 20ae6cad..a77374b9 100644 --- a/externals/grill/flext/source/flatom_pr.cpp +++ b/externals/grill/flext/source/flatom_pr.cpp @@ -33,7 +33,7 @@ bool flext::PrintAtom(const t_atom &a,char *buf,int bufsz) } else if(IsPointer(a)) { STD::sprintf(buf,"%p",GetPointer(a)); - } + } #if FLEXT_SYS == FLEXT_SYS_PD else if(a.a_type == A_DOLLAR) { STD::sprintf(buf,"$%d",a.a_w.w_index); @@ -41,6 +41,12 @@ bool flext::PrintAtom(const t_atom &a,char *buf,int bufsz) else if(a.a_type == A_DOLLSYM) { STD::sprintf(buf,"$%s",GetString(a)); } +#elif FLEXT_SYS == FLEXT_SYS_MAX + else if(a.a_type == A_DOLLAR) { + STD::sprintf(buf,"$%d",a.a_w.w_long); + } +#else +//#pragma message("Not implemented") #endif else { ERRINTERNAL(); @@ -66,6 +72,12 @@ bool flext::PrintList(int argc,const t_atom *argv,char *buf,int bufsz) return ok; } +bool flext::AtomList::Print(char *buffer,int buflen) const +{ + return flext::PrintList(Count(),Atoms(),buffer,buflen); +} + + bool flext::ScanAtom(t_atom &a,const char *buf) { // skip whitespace diff --git a/externals/grill/flext/source/flattr.cpp b/externals/grill/flext/source/flattr.cpp index 10c46af0..52d46872 100644 --- a/externals/grill/flext/source/flattr.cpp +++ b/externals/grill/flext/source/flattr.cpp @@ -27,8 +27,9 @@ WARRANTIES, see the file, "license.txt," in this distribution. flext_base::AttrItem::AttrItem(const t_symbol *t,metharg tp,methfun f,int fl): Item(t,0,NULL),index(0), - flags(fl|afl_shown),counter(NULL), - argtp(tp),fun(f) + flags(fl|afl_shown), + argtp(tp),fun(f), + counter(NULL) {} flext_base::AttrItem::~AttrItem() diff --git a/externals/grill/flext/source/flattr_ed.cpp b/externals/grill/flext/source/flattr_ed.cpp index fddbb69b..a75e3715 100644 --- a/externals/grill/flext/source/flattr_ed.cpp +++ b/externals/grill/flext/source/flattr_ed.cpp @@ -328,7 +328,6 @@ void flext_base::cb_GfxProperties(t_gobj *c, t_glist *) for(int i = 0; i < cnt; ++i) { const t_symbol *sym = GetSymbol(la[i]); - const char *bcur = b; // get attribute AttrItem *gattr = th->FindAttrib(sym,true); diff --git a/externals/grill/flext/source/flbase.cpp b/externals/grill/flext/source/flbase.cpp index 0619b796..357df17e 100644 --- a/externals/grill/flext/source/flbase.cpp +++ b/externals/grill/flext/source/flbase.cpp @@ -114,7 +114,7 @@ const t_symbol *flext_obj::GetParamSym(const t_symbol *sym,t_canvas *c) } else #else - #pragma warning("Not implemented") + #pragma message("Not implemented") #endif return sym; } diff --git a/externals/grill/flext/source/flqueue.cpp b/externals/grill/flext/source/flqueue.cpp index d47666e3..a75b4a89 100755 --- a/externals/grill/flext/source/flqueue.cpp +++ b/externals/grill/flext/source/flqueue.cpp @@ -22,7 +22,7 @@ WARRANTIES, see the file, "license.txt," in this distribution. class qmsg { public: - qmsg(flext_base *b): th(b),nxt(NULL),tp(tp_none) {} + qmsg(flext_base *b): nxt(NULL),th(b),tp(tp_none) {} ~qmsg(); qmsg *nxt; diff --git a/externals/grill/flext/source/flsupport.h b/externals/grill/flext/source/flsupport.h index bf37c355..c2eaa18f 100644 --- a/externals/grill/flext/source/flsupport.h +++ b/externals/grill/flext/source/flsupport.h @@ -17,7 +17,6 @@ WARRANTIES, see the file, "license.txt," in this distribution. #include "flstdc.h" - class FLEXT_SHARE FLEXT_CLASSDEF(flext); typedef class FLEXT_CLASSDEF(flext) flext; @@ -535,7 +534,7 @@ public: AtomList &Part(int offs,int len) { return (*this = GetPart(offs,len)); } //! Represent as a string - bool Print(char *buffer,int buflen) const { return flext::PrintList(Count(),Atoms(),buffer,buflen); } + bool Print(char *buffer,int buflen) const; protected: int cnt; diff --git a/externals/grill/pool/main.cpp b/externals/grill/pool/main.cpp index 135872b3..0cf73ccd 100644 --- a/externals/grill/pool/main.cpp +++ b/externals/grill/pool/main.cpp @@ -9,6 +9,7 @@ WARRANTIES, see the file, "license.txt," in this distribution. */ #include "pool.h" +#include <string> #define POOL_VERSION "0.2.0pre" @@ -139,6 +140,8 @@ private: static pooldata *GetPool(const S *s); static V RmvPool(pooldata *p); + std::string MakeFilename(const C *fn) const; + FLEXT_CALLVAR_V(mg_pool,ms_pool) FLEXT_ATTRVAR_B(absdir) FLEXT_ATTRVAR_B(echo) @@ -209,7 +212,7 @@ pooldata *pool::head,*pool::tail; V pool::setup(t_classid c) { post(""); - post("pool %s - hierarchical storage object,(C)2002-2003 Thomas Grill",POOL_VERSION); + post("pool %s - hierarchical storage object, (C)2002-2003 Thomas Grill",POOL_VERSION); post(""); head = tail = NULL; @@ -874,8 +877,11 @@ V pool::load(I argc,const A *argv,BL xml) if(!flnm) post("%s - %s: no filename given",thisName(),sym); - else if(!(xml?pl->LoadXML(flnm):pl->Load(flnm))) - post("%s - %s: error loading data",thisName(),sym); + else { + string fl(MakeFilename(flnm)); + if(!(xml?pl->LoadXML(fl.c_str()):pl->Load(fl.c_str()))) + post("%s - %s: error loading data",thisName(),sym); + } echodir(); } @@ -891,8 +897,11 @@ V pool::save(I argc,const A *argv,BL xml) if(!flnm) post("%s - %s: no filename given",thisName(),sym); - else if(!(xml?pl->SaveXML(flnm):pl->Save(flnm))) - post("%s - %s: error saving data",thisName(),sym); + else { + string fl(MakeFilename(flnm)); + if(!(xml?pl->SaveXML(fl.c_str()):pl->Save(fl.c_str()))) + post("%s - %s: error saving data",thisName(),sym); + } echodir(); } @@ -908,8 +917,11 @@ V pool::lddir(I argc,const A *argv,BL xml) if(!flnm) post("%s - %s: invalid filename",thisName(),sym); - else if(!(xml?pl->LdDirXML(curdir,flnm,0):pl->LdDir(curdir,flnm,0))) - post("%s - %s: directory couldn't be loaded",thisName(),sym); + else { + string fl(MakeFilename(flnm)); + if(!(xml?pl->LdDirXML(curdir,fl.c_str(),0):pl->LdDir(curdir,fl.c_str(),0))) + post("%s - %s: directory couldn't be loaded",thisName(),sym); + } echodir(); } @@ -941,7 +953,8 @@ V pool::ldrec(I argc,const A *argv,BL xml) if(!flnm) post("%s - %s: invalid filename",thisName(),sym); else { - if(!(xml?pl->LdDirXML(curdir,flnm,depth,mkdir):pl->LdDir(curdir,flnm,depth,mkdir))) + string fl(MakeFilename(flnm)); + if(!(xml?pl->LdDirXML(curdir,fl.c_str(),depth,mkdir):pl->LdDir(curdir,fl.c_str(),depth,mkdir))) post("%s - %s: directory couldn't be saved",thisName(),sym); } @@ -960,7 +973,8 @@ V pool::svdir(I argc,const A *argv,BL xml) if(!flnm) post("%s - %s: invalid filename",thisName(),sym); else { - if(!(xml?pl->SvDirXML(curdir,flnm,0,absdir):pl->SvDir(curdir,flnm,0,absdir))) + string fl(MakeFilename(flnm)); + if(!(xml?pl->SvDirXML(curdir,fl.c_str(),0,absdir):pl->SvDir(curdir,fl.c_str(),0,absdir))) post("%s - %s: directory couldn't be saved",thisName(),sym); } @@ -979,7 +993,8 @@ V pool::svrec(I argc,const A *argv,BL xml) if(!flnm) post("%s - %s: invalid filename",thisName(),sym); else { - if(!(xml?pl->SvDirXML(curdir,flnm,-1,absdir):pl->SvDir(curdir,flnm,-1,absdir))) + string fl(MakeFilename(flnm)); + if(!(xml?pl->SvDirXML(curdir,fl.c_str(),-1,absdir):pl->SvDir(curdir,fl.c_str(),-1,absdir))) post("%s - %s: directory couldn't be saved",thisName(),sym); } @@ -1051,3 +1066,18 @@ V pool::RmvPool(pooldata *p) } } +std::string pool::MakeFilename(const C *fn) const +{ +#if FLEXT_SYS == FLEXT_SYS_PD + C *sl = strrchr(fn,'/'); + if(!sl) sl = strrchr(fn,'\\'); + if(!sl) { + const C *p = GetString(canvas_getdir(thisCanvas())); + return string(p)+'/'+fn; + } + else + return fn; +#else + return fn; +#endif +} diff --git a/externals/grill/pool/pool.pd b/externals/grill/pool/pool.pd index 3319914b..eab56fc3 100644 --- a/externals/grill/pool/pool.pd +++ b/externals/grill/pool/pool.pd @@ -1,4 +1,4 @@ -#N canvas 12 3 934 690 12;
+#N canvas 12 3 936 692 12;
#X msg 295 108 set 1 2 3;
#X obj 308 619 print K;
#X msg 607 211 getall;
@@ -94,7 +94,7 @@ #X connect 23 0 26 0;
#X restore 718 511 pd dirs;
#X text 715 485 directory operations;
-#N canvas 0 0 819 451 file 0;
+#N canvas 0 0 821 453 file 0;
#X text 117 207 save dir and subdirs;
#X text 117 165 save data in current dir;
#X text 117 253 load data into current dir;
@@ -127,6 +127,8 @@ #X msg 473 228 svxrec pool.xml;
#X msg 472 274 ldxdir pool.xml;
#X msg 472 321 ldxrec pool.xml;
+#X text 26 398 If the file name is given without a path specification
+the folder containing the current patcher will be used.;
#X connect 20 0 9 0;
#X connect 21 0 9 0;
#X connect 22 0 9 0;
@@ -202,6 +204,7 @@ Grill; #X text 332 457 can be given for optimal performance;
#X msg 428 218 get 3;
#X msg 299 227 set 3 -1 1;
+#X msg 41 518 getmethods;
#X connect 0 0 72 0;
#X connect 2 0 72 0;
#X connect 3 0 72 0;
@@ -236,3 +239,4 @@ Grill; #X connect 72 4 64 0;
#X connect 75 0 72 0;
#X connect 76 0 72 0;
+#X connect 77 0 72 0;
diff --git a/externals/grill/pool/pool.vcproj b/externals/grill/pool/pool.vcproj index 3b04751b..6370595d 100644 --- a/externals/grill/pool/pool.vcproj +++ b/externals/grill/pool/pool.vcproj @@ -24,7 +24,7 @@ Name="VCCLCompilerTool" Optimization="2" InlineFunctionExpansion="1" - AdditionalIncludeDirectories="c:\programme\audio\pd\src,f:\prog\max\flext\source" + AdditionalIncludeDirectories="f:\prog\pd\pd-cvs\src,f:\prog\max\flext\source" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;FLEXT_SYS=2" StringPooling="TRUE" RuntimeLibrary="4" @@ -45,7 +45,7 @@ OutputFile="pd-msvc/pool.dll" LinkIncremental="1" SuppressStartupBanner="TRUE" - AdditionalLibraryDirectories="c:\programme\audio\pd\bin,f:\prog\max\flext\pd-msvc" + AdditionalLibraryDirectories="f:\prog\pd\pd-cvs\bin,f:\prog\max\flext\pd-msvc" ProgramDatabaseFile=".\pd-msvc/r/pool.pdb" ImportLibrary=".\pd-msvc/r/pool.lib" TargetMachine="1"/> @@ -89,7 +89,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="c:\programme\audio\pd\src,f:\prog\max\flext\source" + AdditionalIncludeDirectories="f:\prog\pd\pd-cvs\src,f:\prog\max\flext\source" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;FLEXT_SYS=2" BasicRuntimeChecks="3" RuntimeLibrary="5" @@ -111,7 +111,7 @@ OutputFile=".\pd-msvc/d/pool.dll" LinkIncremental="1" SuppressStartupBanner="TRUE" - AdditionalLibraryDirectories="c:\programme\audio\pd\bin,f:\prog\max\flext\pd-msvc" + AdditionalLibraryDirectories="f:\prog\pd\pd-cvs\bin,f:\prog\max\flext\pd-msvc" GenerateDebugInformation="TRUE" ProgramDatabaseFile=".\pd-msvc/d/pool.pdb" ImportLibrary=".\pd-msvc/d/pool.lib" diff --git a/externals/grill/pool/readme.txt b/externals/grill/pool/readme.txt index 4812eb28..2985a3a1 100644 --- a/externals/grill/pool/readme.txt +++ b/externals/grill/pool/readme.txt @@ -46,8 +46,8 @@ pd - darwin (MacOSX): --------------------- o GCC: edit "config-pd-darwin.txt" & run "sh build-pd-darwin.sh" -Max/MSP - MacOS9: ------------------ +Max/MSP - MacOS9/X: +------------------- o CodeWarrior: edit "pool.cw" and build ---------------------------------------------------------------------------- @@ -62,6 +62,7 @@ Version history: - extensive use of hashing for keys and directories - database can be saved/loaded as XML data - fixed bug with stored numbers starting with - or + +- file names without paths will use the folder of the current patcher 0.1.0: - first public release diff --git a/externals/grill/vasp/config-pd-darwin.txt b/externals/grill/vasp/config-pd-darwin.txt index 5ddbb67d..30ad23e2 100755 --- a/externals/grill/vasp/config-pd-darwin.txt +++ b/externals/grill/vasp/config-pd-darwin.txt @@ -3,10 +3,10 @@ # # your c++ compiler (define only if it's different than g++) -# CXX=g++ +CXX=g++-3.3 # where does the PD installation reside? -PD=/usr/local/pd +PD=/usr/local/lib/pd # where are the PD header files? # leave it blank if it is a system directory (like /usr/local/include), @@ -14,7 +14,7 @@ PD=/usr/local/pd PDINC=${PD}/src # where is the PD executable? -PDBIN=${PD}/bin/pd +PDBIN=/usr/local/bin/pd # where do the flext libraries reside? FLEXTPATH=${PD}/flext @@ -34,4 +34,4 @@ HELPDIR=${PD}/doc/5.reference # additional compiler flags # (check if they fit to your system!) -UFLAGS=-malign-power -maltivec +UFLAGS=-malign-power -faltivec -maltivec diff --git a/externals/grill/vasp/makefile.pd-darwin b/externals/grill/vasp/makefile.pd-darwin index 89ee3f47..5b11c0d5 100755 --- a/externals/grill/vasp/makefile.pd-darwin +++ b/externals/grill/vasp/makefile.pd-darwin @@ -22,7 +22,7 @@ CFLAGS=-O6 ${UFLAGS} -fmove-all-movables -frerun-loop-opt -fprefetch-loop-arrays #CFLAGS+=-funroll-loops -freduce-all-givs -fschedule-insns2 -foptimize-register-move LIBS=m LDFLAGS=-bundle -bundle_loader $(PDBIN) -FRAMEWORKS=Carbon +FRAMEWORKS=Carbon veclib # ---------------------------------------------- # the rest can stay untouched diff --git a/externals/grill/xsample/config-pd-darwin.txt b/externals/grill/xsample/config-pd-darwin.txt index 0d4ef217..175a9b4b 100755 --- a/externals/grill/xsample/config-pd-darwin.txt +++ b/externals/grill/xsample/config-pd-darwin.txt @@ -3,10 +3,10 @@ # # your c++ compiler (if not g++) -# CXX=g++ +CXX=g++-3.3 # where does the PD installation reside? -PD=/usr/local/pd +PD=/usr/local/lib/pd # where are the PD header files? # leave it blank if it is a system directory (like /usr/local/include), @@ -14,7 +14,7 @@ PD=/usr/local/pd PDINC=${PD}/src # where is the PD executable? -PDBIN=${PD}/bin/pd +PDBIN=/usr/local/bin/pd # where do the flext libraries reside? FLEXTPATH=${PD}/flext @@ -32,5 +32,5 @@ HELPDIR=${PD}/doc/5.reference # additional compiler flags # (check whether they fit your system!) -UFLAGS=-malign-power -maltivec +UFLAGS=-malign-power -maltivec -faltivec diff --git a/externals/grill/xsample/makefile.pd-darwin b/externals/grill/xsample/makefile.pd-darwin index e0f49793..ac182d27 100755 --- a/externals/grill/xsample/makefile.pd-darwin +++ b/externals/grill/xsample/makefile.pd-darwin @@ -13,15 +13,15 @@ CONFIG=config-pd-darwin.txt include ${CONFIG} -FLEXTLIB=$(FLEXTPATH)/libflext.a +FLEXTLIB=$(FLEXTPATH)/flext.a # compiler stuff INCLUDES=$(PDINC) FLAGS=-DFLEXT_SYS=2 -CFLAGS=${UFLAGS} -dynamic -O6 -Wno-unused -Wno-parentheses -Wno-switch -Wstrict-prototypes -funroll-loops -fmove-all-movables -frerun-loop-opt -fno-rtti -fno-exceptions +CFLAGS=${UFLAGS} -dynamic -O6 -Wno-unused -Wno-parentheses -Wno-switch -Wstrict-prototypes -funroll-loops -fmove-all-movables -frerun-loop-opt -fno-rtti -fno-exceptions LIBS=m gcc LDFLAGS=$(FLEXTLIB) -bundle -bundle_loader $(PDBIN) -FRAMEWORKS=Carbon +FRAMEWORKS=Carbon veclib # ---------------------------------------------- # the rest can stay untouched diff --git a/externals/grill/xsample/maxmsp/xgroove~.help b/externals/grill/xsample/maxmsp/xgroove~.help Binary files differindex ff604245..24b052b8 100644 --- a/externals/grill/xsample/maxmsp/xgroove~.help +++ b/externals/grill/xsample/maxmsp/xgroove~.help diff --git a/externals/grill/xsample/source/groove.cpp b/externals/grill/xsample/source/groove.cpp index 90e9c5f8..accfc0d9 100644 --- a/externals/grill/xsample/source/groove.cpp +++ b/externals/grill/xsample/source/groove.cpp @@ -39,6 +39,7 @@ public: virtual BL m_reset(); virtual V m_pos(F pos); + V m_posmod(F pos); virtual V m_all(); virtual V m_min(F mn); virtual V m_max(F mx); @@ -79,9 +80,16 @@ protected: inline V setpos(F pos) { - if(pos < curmin) pos = curmin; - else if(pos > curmax) pos = curmax; - curpos = pos; + if(pos < znsmin) curpos = znsmin; + else if(pos > znsmax) curpos = znsmax; + else curpos = pos; + } + + inline V setposmod(F pos) + { + F p = pos-znsmin; + if(p >= 0) curpos = znsmin+fmod(p,znsmax-znsmin); + else curpos = znsmax+fmod(p,znsmax-znsmin); } inline V mg_pos(F &v) const { v = curpos*s2u; } @@ -116,6 +124,7 @@ private: } FLEXT_CALLBACK_F(m_pos) + FLEXT_CALLBACK_F(m_posmod) FLEXT_CALLBACK_F(m_min) FLEXT_CALLBACK_F(m_max) FLEXT_CALLBACK(m_all) @@ -150,6 +159,7 @@ V xgroove::setup(t_classid c) FLEXT_CADDATTR_VAR(c,"min",mg_min,m_min); FLEXT_CADDATTR_VAR(c,"max",mg_max,m_max); FLEXT_CADDATTR_VAR(c,"pos",mg_pos,m_pos); + FLEXT_CADDMETHOD_(c,0,"posmod",m_posmod); FLEXT_CADDATTR_VAR_E(c,"loop",loopmode,m_loop); @@ -266,6 +276,12 @@ V xgroove::m_pos(F pos) setpos(pos?pos/s2u:0); } +// motivated by Tim Blechmann +V xgroove::m_posmod(F pos) +{ + setposmod(pos?pos/s2u:0); +} + V xgroove::m_all() { xsample::m_all(); @@ -315,21 +331,30 @@ V xgroove::m_xshape(I argc,const t_atom *argv) if(argc >= 1 && CanbeInt(argv[0])) xshape = GetAInt(argv[0]); if(argc >= 2 && CanbeFloat(argv[1])) { xshparam = GetAFloat(argv[1]); +/* // clip to 0..1 if(xshparam < 0) xshparam = 0; else if(xshparam > 1) xshparam = 1; +*/ } I i; switch(xshape) { case 1: + // sine half wave for(i = 0; i <= XZONE_TABLE; ++i) - znmul[i] = ((sin(i*(pi/XZONE_TABLE)-pi/2.)+1)/2)*xshparam+i*(1./XZONE_TABLE)*(1-xshparam); + znmul[i] = sin(i*pi/(XZONE_TABLE*2))*xshparam+i*(1.f/XZONE_TABLE)*(1.f-xshparam); + break; + case 2: + // sine full wave + for(i = 0; i <= XZONE_TABLE; ++i) + znmul[i] = ((sin(i*(pi/XZONE_TABLE)-pi*0.5f)+1.f)*0.5f)*xshparam+i*(1.f/XZONE_TABLE)*(1.f-xshparam); break; case 0: default: + // linear for(i = 0; i <= XZONE_TABLE; ++i) - znmul[i] = i*(1./XZONE_TABLE); + znmul[i] = i*(1.f/XZONE_TABLE); } } @@ -607,6 +632,8 @@ V xgroove::s_pos_loopzn(I n,S *const *invecs,S *const *outvecs) register D o = curpos; for(I i = 0; i < n; ++i) { + // \TODO: exploit relationships: smin <= lmin, smax >= lmax + // normalize offset if(o >= smax) { o = fmod(o-smin,plen)+smin; @@ -644,27 +671,35 @@ V xgroove::s_pos_loopzn(I n,S *const *invecs,S *const *outvecs) } // normalize and store current playing position + if(o < znsmin) o += plen; setpos(o); + // calculate samples (1st voice) playfun(n,&pos,outvecs); - arrscale(n,pos,pos); - if(inzn) { - // only if we were in cross-fade zone + // only if we are in cross-fade zone + + // calculate samples in loop zone (2nd voice) playfun(n,&znpos,znbuf); - arrscale(n,znidx,znpos,-XZONE_TABLE,-1); + // calculate counterpart in loop fade + arrscale(n,znidx,znpos,XZONE_TABLE,-1); + // calculate fade coefficients zonefun(znmul,0,XZONE_TABLE+1,n,1,1,&znidx,&znidx); zonefun(znmul,0,XZONE_TABLE+1,n,1,1,&znpos,&znpos); + // mix voices for all channels for(I o = 0; o < outchns; ++o) { F *ov = outvecs[o],*ob = znbuf[o]; for(I i = 0; i < n; ++i,ov++,ob++) *ov = (*ov)*znidx[i]+(*ob)*znpos[i]; } } + + // rescale position vector + arrscale(n,pos,pos); } else s_pos_off(n,invecs,outvecs); @@ -791,6 +826,7 @@ V xgroove::m_help() post("\t@max {unit}: set maximum playing point"); post("\tall: select entire buffer length"); post("\tpos {unit}: set playing position (obeying the current scale mode)"); + post("\tposmod {unit}: set playing position (modulo into min/max range)"); post("\tbang/start: start playing"); post("\tstop: stop playing"); post("\trefresh: checks buffer and refreshes outlets"); diff --git a/externals/grill/xsample/source/inter.h b/externals/grill/xsample/source/inter.h index e7f929e8..a87c4ac1 100755 --- a/externals/grill/xsample/source/inter.h +++ b/externals/grill/xsample/source/inter.h @@ -32,19 +32,21 @@ TMPLDEF V xinter::st_play1(const S *bdt,const I smin,const I smax,const I n,cons for(I i = 0; i < n; ++i,++si) { register const I oint = (I)(*(pos++)); register const S *fp; - if(oint < smin) { + + if(oint >= smin) + if(oint < smax) { + // normal + fp = bdt+oint*BCHNS; + } + else { + // position > last sample ... take only last sample + fp = bdt+(smin == smax?smin:smax-1)*BCHNS; + } + else { // position < 0 ... take only 0th sample fp = bdt+smin*BCHNS; } - else if(oint >= smax) { - // position > last sample ... take only last sample - fp = bdt+(smin == smax?smin:smax-1)*BCHNS; - } - else { - // normal - fp = bdt+oint*BCHNS; - } - + for(I ci = 0; ci < OCHNS; ++ci) sig[ci][si] = fp[ci]; } @@ -77,26 +79,27 @@ TMPLDEF V xinter::st_play2(const S *bdt,const I smin,const I smax,const I n,cons const F o = *(pos++); register const I oint = (I)o; - if(oint < smin) { + if(oint >= smin) + if(oint < maxo) { + // normal interpolation + register const F frac = o-oint; + register const S *const fp0 = bdt+oint*BCHNS; + register const S *const fp1 = fp0+BCHNS; + for(I ci = 0; ci < OCHNS; ++ci) + sig[ci][si] = fp0[ci]+frac*(fp1[ci]-fp0[ci]); + } + else { + // position is past last sample -> take the last sample + register const S *const fp = bdt+maxo*BCHNS; + for(I ci = 0; ci < OCHNS; ++ci) + sig[ci][si] = fp[ci]; + } + else { // position is before first sample -> take the first sample register const S *const fp = bdt+smin*BCHNS; for(I ci = 0; ci < OCHNS; ++ci) sig[ci][si] = fp[ci]; } - else if(oint >= maxo) { - // position is past last sample -> take the last sample - register const S *const fp = bdt+maxo*BCHNS; - for(I ci = 0; ci < OCHNS; ++ci) - sig[ci][si] = fp[ci]; - } - else { - // normal interpolation - register const F frac = o-oint; - register const S *const fp0 = bdt+oint*BCHNS; - register const S *const fp1 = fp0+BCHNS; - for(I ci = 0; ci < OCHNS; ++ci) - sig[ci][si] = fp0[ci]+frac*(fp1[ci]-fp0[ci]); - } } // clear rest of output channels (if buffer has less channels) @@ -137,7 +140,35 @@ TMPLDEF V xinter::st_play4(const S *bdt,const I smin,const I smax,const I n,cons register F frac; register const S *fa,*fb,*fc,*fd; - if(oint <= smin) { + if(oint > smin) + if(oint < maxo-2) { + // normal case + + fa = bdt+oint*BCHNS-BCHNS; + frac = o-oint; + fb = fa+BCHNS; + #ifdef __VEC__ + vec_dst(fa,pf,0); + #endif + fc = fb+BCHNS; + fd = fc+BCHNS; + } + else { + // after the end + + if(oint > maxo) oint = maxo,o = (float)smax; + frac = o-oint; + + fb = bdt+oint*BCHNS; + fa = fb-BCHNS; + + // \TODO what about wraparound (in loop/palindrome mode) ? + fc = fb >= maxp?maxp:fb+BCHNS; + fd = fc >= maxp?maxp:fc+BCHNS; + } + else { + // before the beginning + // if oint < first sample set it to first sample // \TODO what about wraparound (in loop/palindrome mode) ? if(oint < smin) oint = smin,o = (float)smin; @@ -150,28 +181,7 @@ TMPLDEF V xinter::st_play4(const S *bdt,const I smin,const I smax,const I n,cons fc = fb+BCHNS; fd = fc+BCHNS; } - else if(oint >= maxo-2) { - if(oint > maxo) oint = maxo,o = (float)smax; - frac = o-oint; - - fb = bdt+oint*BCHNS; - fa = fb-BCHNS; - - // \TODO what about wraparound (in loop/palindrome mode) ? - fc = fb >= maxp?maxp:fb+BCHNS; - fd = fc >= maxp?maxp:fc+BCHNS; - } - else { - fa = bdt+oint*BCHNS-BCHNS; - frac = o-oint; - fb = fa+BCHNS; -#ifdef __VEC__ - vec_dst(fa,pf,0); -#endif - fc = fb+BCHNS; - fd = fc+BCHNS; - } - + register F f1 = 0.5f*(frac-1.0f); register F f3 = frac*3.0f-1.0f; diff --git a/externals/grill/xsample/source/main.h b/externals/grill/xsample/source/main.h index e174915b..367632d6 100644 --- a/externals/grill/xsample/source/main.h +++ b/externals/grill/xsample/source/main.h @@ -12,7 +12,7 @@ WARRANTIES, see the file, "license.txt," in this distribution. #define __XSAMPLE_H -#define XSAMPLE_VERSION "0.3.0pre14" +#define XSAMPLE_VERSION "0.3.0pre15" #define FLEXT_ATTRIBUTES 1 @@ -154,7 +154,7 @@ protected: inline F scale(F smp) const { return (smp-sclmin)*sclmul; } static V arrscale(I n,const S *in,S *out,S add,S mul) { flext::ScaleSamples(out,in,mul,add,n); } - inline V arrscale(I n,const S *in,S *out) const { arrscale(n,in,out,(S)-sclmin,sclmul); } + inline V arrscale(I n,const S *in,S *out) const { arrscale(n,in,out,-sclmin*sclmul,sclmul); } static V arrmul(I n,const S *in,S *out,S mul) { flext::MulSamples(out,in,mul,n); } inline V arrmul(I n,const S *in,S *out) const { arrmul(n,in,out,(S)(1./s2u)); } diff --git a/externals/grill/xsample/xsample.cw b/externals/grill/xsample/xsample.cw Binary files differindex 0a6c5c08..768cf65c 100755 --- a/externals/grill/xsample/xsample.cw +++ b/externals/grill/xsample/xsample.cw |