@@ -0,0 +1,362 @@ | |||||
/******************************************************************************************************************* | |||||
Copyright (c) 2012 Cycling '74 | |||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software | |||||
and associated documentation files (the "Software"), to deal in the Software without restriction, | |||||
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, | |||||
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, | |||||
subject to the following conditions: | |||||
The above copyright notice and this permission notice shall be included in all copies | |||||
or substantial portions of the Software. | |||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, | |||||
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | |||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | |||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE | |||||
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||||
*******************************************************************************************************************/ | |||||
#include "genlib.h" | |||||
#include "genlib_exportfunctions.h" | |||||
#include "stdlib.h" | |||||
#include "stdio.h" | |||||
#include "string.h" | |||||
#ifndef GEN_WINDOWS | |||||
#include "malloc/malloc.h" | |||||
#endif | |||||
// DATA_MAXIMUM_ELEMENTS * 8 bytes = 256 mb limit | |||||
#define DATA_MAXIMUM_ELEMENTS (33554432) | |||||
//////////// export_genlib.cpp //////////// | |||||
// export version | |||||
void my_memset(void *p, int c, long size); | |||||
void my_memcpy(void *dst, const void *src, long size); | |||||
t_ptr sysmem_newptr(t_ptr_size size) | |||||
{ | |||||
return (t_ptr)malloc(size); | |||||
} | |||||
t_ptr sysmem_newptrclear(t_ptr_size size) | |||||
{ | |||||
t_ptr p = (t_ptr)malloc(size); | |||||
if (p) | |||||
my_memset(p, 0, size); | |||||
return p; | |||||
} | |||||
t_ptr sysmem_resizeptr(void *ptr, t_ptr_size newsize) | |||||
{ | |||||
return (t_ptr)realloc(ptr, newsize); | |||||
} | |||||
t_ptr sysmem_resizeptrclear(void *ptr, t_ptr_size newsize) | |||||
{ | |||||
long oldsize = malloc_size(ptr); | |||||
t_ptr p = (t_ptr)realloc(ptr, newsize); | |||||
if (p) { | |||||
if (newsize > oldsize) | |||||
my_memset((char *)p + oldsize, 0, newsize - oldsize); | |||||
} | |||||
return p; | |||||
} | |||||
t_ptr_size sysmem_ptrsize(void *ptr) | |||||
{ | |||||
return malloc_size(ptr); | |||||
} | |||||
void sysmem_freeptr(void *ptr) | |||||
{ | |||||
free(ptr); | |||||
} | |||||
void sysmem_copyptr(const void *src, void *dst, t_ptr_size bytes) | |||||
{ | |||||
my_memcpy(dst, src, bytes); | |||||
} | |||||
void my_memset(void *p, int c, long size) | |||||
{ | |||||
char *p2 = (char *)p; | |||||
int i; | |||||
for (i = 0; i < size; i++, p2++) | |||||
*p2 = c; | |||||
} | |||||
void my_memcpy(void *dst, const void *src, long size) | |||||
{ | |||||
char *s2 = (char *)src; | |||||
char *d2 = (char *)dst; | |||||
int i; | |||||
for (i = 0; i < size; i++, s2++, d2++) | |||||
*d2 = *s2; | |||||
} | |||||
void set_zero64(double *memory, long size) | |||||
{ | |||||
long i; | |||||
for (i = 0; i < size; i++, memory++) { | |||||
*memory = 0.; | |||||
} | |||||
} | |||||
void genlib_report_error(const char *s) | |||||
{ | |||||
fprintf(stderr, "%s\n", s); | |||||
} | |||||
void genlib_report_message(const char *s) | |||||
{ | |||||
fprintf(stdout, "%s\n", s); | |||||
} | |||||
unsigned long systime_ticks(void) | |||||
{ | |||||
return 0; // Gen code can deal with this | |||||
} | |||||
// NEED THIS FOR WINDOWS: | |||||
void *operator new(size_t size) { return sysmem_newptr(size); } | |||||
void operator delete(void *p) { sysmem_freeptr(p); } | |||||
void *operator new[](size_t size) { return sysmem_newptr(size); } | |||||
void operator delete[](void *p) { sysmem_freeptr(p); } | |||||
void * genlib_obtain_reference_from_string(const char * name) { | |||||
return 0; // to be implemented | |||||
} | |||||
// the rest is stuff to isolate gensym, attrs, atoms, buffers etc. | |||||
t_genlib_buffer * genlib_obtain_buffer_from_reference(void *ref) | |||||
{ | |||||
return 0; // to be implemented | |||||
} | |||||
t_genlib_err genlib_buffer_edit_begin(t_genlib_buffer *b) | |||||
{ | |||||
return 0; // to be implemented | |||||
} | |||||
t_genlib_err genlib_buffer_edit_end(t_genlib_buffer *b, long valid) | |||||
{ | |||||
return 0; // to be implemented | |||||
} | |||||
t_genlib_err genlib_buffer_getinfo(t_genlib_buffer *b, t_genlib_buffer_info *info) | |||||
{ | |||||
return 0; // to be implemented | |||||
} | |||||
char *genlib_reference_getname(void *ref) | |||||
{ | |||||
return 0; // to be implemented | |||||
} | |||||
void genlib_buffer_dirty(t_genlib_buffer *b) | |||||
{ | |||||
// to be implemented | |||||
} | |||||
t_genlib_err genlib_buffer_perform_begin(t_genlib_buffer *b) | |||||
{ | |||||
return 0; // to be implemented | |||||
} | |||||
void genlib_buffer_perform_end(t_genlib_buffer *b) | |||||
{ | |||||
// to be implemented | |||||
} | |||||
#ifdef pow | |||||
#undef pow | |||||
#endif | |||||
#include "math.h" | |||||
double gen_msp_pow(double value, double power) | |||||
{ | |||||
return pow(value, power); | |||||
} | |||||
void genlib_data_setbuffer(t_genlib_data *b, void *ref) { | |||||
genlib_report_error("not supported for export targets\n"); | |||||
} | |||||
typedef struct { | |||||
t_genlib_data_info info; | |||||
double cursor; // used by Delay | |||||
//t_symbol * name; | |||||
} t_dsp_gen_data; | |||||
t_genlib_data * genlib_obtain_data_from_reference(void *ref) | |||||
{ | |||||
t_dsp_gen_data * self = (t_dsp_gen_data *)malloc(sizeof(t_dsp_gen_data)); | |||||
self->info.dim = 0; | |||||
self->info.channels = 0; | |||||
self->info.data = 0; | |||||
self->cursor = 0; | |||||
return (t_genlib_data *)self; | |||||
} | |||||
t_genlib_err genlib_data_getinfo(t_genlib_data *b, t_genlib_data_info *info) { | |||||
t_dsp_gen_data * self = (t_dsp_gen_data *)b; | |||||
info->dim = self->info.dim; | |||||
info->channels = self->info.channels; | |||||
info->data = self->info.data; | |||||
return GENLIB_ERR_NONE; | |||||
} | |||||
void genlib_data_release(t_genlib_data *b) { | |||||
t_dsp_gen_data * self = (t_dsp_gen_data *)b; | |||||
if (self->info.data) { | |||||
genlib_sysmem_freeptr(self->info.data); | |||||
self->info.data = 0; | |||||
} | |||||
} | |||||
long genlib_data_getcursor(t_genlib_data *b) { | |||||
t_dsp_gen_data * self = (t_dsp_gen_data *)b; | |||||
return self->cursor; | |||||
} | |||||
void genlib_data_setcursor(t_genlib_data *b, long cursor) { | |||||
t_dsp_gen_data * self = (t_dsp_gen_data *)b; | |||||
self->cursor = cursor; | |||||
} | |||||
void genlib_data_resize(t_genlib_data *b, long s, long c) { | |||||
t_dsp_gen_data * self = (t_dsp_gen_data *)b; | |||||
size_t sz, oldsz, copysz; | |||||
double * old = 0; | |||||
double * replaced = 0; | |||||
int i, j, copydim, copychannels, olddim, oldchannels; | |||||
//printf("data resize %d %d\n", s, c); | |||||
// cache old for copying: | |||||
old = self->info.data; | |||||
olddim = self->info.dim; | |||||
oldchannels = self->info.channels; | |||||
// limit [data] size: | |||||
if (s * c > DATA_MAXIMUM_ELEMENTS) { | |||||
s = DATA_MAXIMUM_ELEMENTS/c; | |||||
genlib_report_message("warning: constraining [data] to < 256MB"); | |||||
} | |||||
// bytes required: | |||||
sz = sizeof(double) * s * c; | |||||
oldsz = sizeof(double) * olddim * oldchannels; | |||||
if (old && sz == oldsz) { | |||||
// no need to re-allocate, just resize | |||||
// careful, audio thread may still be using it: | |||||
if (s > olddim) { | |||||
self->info.channels = c; | |||||
self->info.dim = s; | |||||
} else { | |||||
self->info.dim = s; | |||||
self->info.channels = c; | |||||
} | |||||
set_zero64(self->info.data, s * c); | |||||
return; | |||||
} else { | |||||
// allocate new: | |||||
replaced = (double *)sysmem_newptr(sz); | |||||
// check allocation: | |||||
if (replaced == 0) { | |||||
genlib_report_error("allocating [data]: out of memory"); | |||||
// try to reallocate with a default/minimal size instead: | |||||
if (s > 512 || c > 1) { | |||||
genlib_data_resize((t_genlib_data *)self, 512, 1); | |||||
} else { | |||||
// if this fails, then Max is kaput anyway... | |||||
genlib_data_resize((t_genlib_data *)self, 4, 1); | |||||
} | |||||
return; | |||||
} | |||||
// fill with zeroes: | |||||
set_zero64(replaced, s * c); | |||||
// copy in old data: | |||||
if (old) { | |||||
// frames to copy: | |||||
// clamped: | |||||
copydim = olddim > s ? s : olddim; | |||||
// use memcpy if channels haven't changed: | |||||
if (c == oldchannels) { | |||||
copysz = sizeof(double) * copydim * c; | |||||
//post("reset resize (same channels) %p %p, %d", self->info.data, old, copysz); | |||||
memcpy(replaced, old, copysz); | |||||
} else { | |||||
// memcpy won't work if channels have changed, | |||||
// because data is interleaved. | |||||
// clamp channels copied: | |||||
copychannels = oldchannels > c ? c : oldchannels; | |||||
//post("reset resize (different channels) %p %p, %d %d", self->info.data, old, copydim, copychannels); | |||||
for (i = 0; i<copydim; i++) { | |||||
for (j = 0; j<copychannels; j++) { | |||||
replaced[j + i*c] = old[j + i*oldchannels]; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
// now update info: | |||||
if (old == 0) { | |||||
self->info.data = replaced; | |||||
self->info.dim = s; | |||||
self->info.channels = c; | |||||
} else { | |||||
// need to be careful; the audio thread may still be using it | |||||
// since dsp_gen_data is preserved through edits | |||||
// the order of resizing has to be carefully done | |||||
// to prevent indexing out of bounds | |||||
// (or maybe I'm being too paranoid here...) | |||||
if (oldsz > sz) { | |||||
// shrink size first | |||||
if (s > olddim) { | |||||
self->info.channels = c; | |||||
self->info.dim = s; | |||||
} else { | |||||
self->info.dim = s; | |||||
self->info.channels = c; | |||||
} | |||||
self->info.data = replaced; | |||||
} else { | |||||
// shrink size after | |||||
self->info.data = replaced; | |||||
if (s > olddim) { | |||||
self->info.channels = c; | |||||
self->info.dim = s; | |||||
} else { | |||||
self->info.dim = s; | |||||
self->info.channels = c; | |||||
} | |||||
} | |||||
// done with old: | |||||
sysmem_freeptr(old); | |||||
} | |||||
} | |||||
} | |||||
void genlib_reset_complete(void *data) {} | |||||
@@ -0,0 +1,152 @@ | |||||
/******************************************************************************************************************* | |||||
Copyright (c) 2012 Cycling '74 | |||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software | |||||
and associated documentation files (the "Software"), to deal in the Software without restriction, | |||||
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, | |||||
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, | |||||
subject to the following conditions: | |||||
The above copyright notice and this permission notice shall be included in all copies | |||||
or substantial portions of the Software. | |||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, | |||||
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | |||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | |||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE | |||||
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||||
*******************************************************************************************************************/ | |||||
#ifndef GENLIB_H | |||||
#define GENLIB_H 1 | |||||
#include "genlib_common.h" | |||||
//////////// genlib.h //////////// | |||||
// genlib.h -- max (gen~) version | |||||
#ifndef GEN_WINDOWS | |||||
#ifndef _SIZE_T | |||||
#define _SIZE_T | |||||
typedef __typeof__(sizeof(int)) size_t; | |||||
#endif | |||||
#endif | |||||
#ifndef __INT32_TYPE__ | |||||
#define __INT32_TYPE__ int | |||||
#endif | |||||
#ifdef MSP_ON_CLANG | |||||
// gen~ hosted: | |||||
typedef unsigned __INT32_TYPE__ uint32_t; | |||||
typedef unsigned __INT64_TYPE__ uint64_t; | |||||
#else | |||||
#ifdef __GNUC__ | |||||
#include <stdint.h> | |||||
#endif | |||||
#endif | |||||
#define inf (__DBL_MAX__) | |||||
#define GEN_UINT_MAX (4294967295) | |||||
#define TWO_TO_32 (4294967296.0) | |||||
#define C74_CONST const | |||||
// max_types.h: | |||||
#ifdef C74_X64 | |||||
typedef unsigned long long t_ptr_uint; | |||||
typedef long long t_ptr_int; | |||||
typedef double t_atom_float; | |||||
typedef t_ptr_uint t_getbytes_size; | |||||
#else | |||||
typedef unsigned long t_ptr_uint; | |||||
typedef long t_ptr_int; | |||||
typedef float t_atom_float; | |||||
typedef short t_getbytes_size; | |||||
#endif | |||||
typedef uint32_t t_uint32; | |||||
typedef t_ptr_int t_atom_long; // the type that is an A_LONG in an atom | |||||
typedef t_ptr_int t_int; ///< an integer @ingroup misc | |||||
typedef t_ptr_uint t_ptr_size; ///< unsigned pointer-sized value for counting (like size_t) @ingroup misc | |||||
typedef t_ptr_int t_atom_long; ///< the type that is an A_LONG in a #t_atom @ingroup misc | |||||
typedef t_atom_long t_max_err; ///< an integer value suitable to be returned as an error code @ingroup misc | |||||
extern "C" { | |||||
// TODO: remove (for debugging only) | |||||
//int printf(const char * fmt, ...); | |||||
// math.h: | |||||
extern double acos( double ); | |||||
extern double asin( double ); | |||||
extern double atan( double ); | |||||
extern double atan2( double, double ); | |||||
extern double cos( double ); | |||||
extern double sin( double ); | |||||
extern double tan( double ); | |||||
extern double acosh( double ); | |||||
extern double asinh( double ); | |||||
extern double atanh( double ); | |||||
extern double cosh( double ); | |||||
extern double sinh( double ); | |||||
extern double tanh( double ); | |||||
extern double exp ( double ); | |||||
extern double log ( double ); | |||||
extern double log10 ( double ); | |||||
extern double fmod ( double, double ); | |||||
extern double modf(double, double *); | |||||
extern double fabs( double ); | |||||
extern double hypot ( double, double ); | |||||
//extern double pow ( double, double ); | |||||
extern double gen_msp_pow ( double, double ); | |||||
#define pow gen_msp_pow | |||||
extern double sqrt( double ); | |||||
extern double ceil ( double ); | |||||
extern double floor ( double ); | |||||
extern double round ( double ); | |||||
extern int abs(int); | |||||
extern char *strcpy(char *, const char *); | |||||
// string reference handling: | |||||
void * genlib_obtain_reference_from_string(const char * name); | |||||
char *genlib_reference_getname(void *ref); | |||||
// buffer handling: | |||||
t_genlib_buffer *genlib_obtain_buffer_from_reference(void *ref); | |||||
t_genlib_err genlib_buffer_edit_begin(t_genlib_buffer *b); | |||||
t_genlib_err genlib_buffer_edit_end(t_genlib_buffer *b, long valid); | |||||
t_genlib_err genlib_buffer_getinfo(t_genlib_buffer *b, t_genlib_buffer_info *info); | |||||
void genlib_buffer_dirty(t_genlib_buffer *b); | |||||
t_genlib_err genlib_buffer_perform_begin(t_genlib_buffer *b); | |||||
void genlib_buffer_perform_end(t_genlib_buffer *b); | |||||
// data handling: | |||||
t_genlib_data *genlib_obtain_data_from_reference(void *ref); | |||||
t_genlib_err genlib_data_getinfo(t_genlib_data *b, t_genlib_data_info *info); | |||||
void genlib_data_resize(t_genlib_data *b, long dim, long channels); | |||||
void genlib_data_setbuffer(t_genlib_data *b, void *ref); | |||||
void genlib_data_release(t_genlib_data *b); | |||||
void genlib_data_setcursor(t_genlib_data *b, long cursor); | |||||
long genlib_data_getcursor(t_genlib_data *b); | |||||
// other notification: | |||||
void genlib_reset_complete(void *data); | |||||
}; // extern "C" | |||||
#define genlib_sysmem_newptr(s) sysmem_newptr(s) | |||||
#define genlib_sysmem_newptrclear(s) sysmem_newptrclear(s) | |||||
#define genlib_sysmem_resizeptr(p, s) sysmem_resizeptr(p, s) | |||||
#define genlib_sysmem_resizeptrclear(p, s) sysmem_resizeptrclear(p, s) | |||||
#define genlib_sysmem_ptrsize(p) sysmem_ptrsize(p) | |||||
#define genlib_sysmem_freeptr(p) sysmem_freeptr(p) | |||||
#define genlib_sysmem_copyptr(s, d, b) sysmem_copyptr(s, d, b) | |||||
#define genlib_set_zero64(d, n) set_zero64(d, n) | |||||
#define genlib_ticks systime_ticks | |||||
#endif // GENLIB_H |
@@ -0,0 +1,104 @@ | |||||
/******************************************************************************************************************* | |||||
Copyright (c) 2012 Cycling '74 | |||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software | |||||
and associated documentation files (the "Software"), to deal in the Software without restriction, | |||||
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, | |||||
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, | |||||
subject to the following conditions: | |||||
The above copyright notice and this permission notice shall be included in all copies | |||||
or substantial portions of the Software. | |||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, | |||||
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | |||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | |||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE | |||||
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||||
*******************************************************************************************************************/ | |||||
#ifndef GENLIB_COMMON_H | |||||
#define GENLIB_COMMON_H 1 | |||||
#include "genlib_common_win.h" | |||||
//////////// genlib_common.h //////////// | |||||
// common data structure header file -- this is the stuff required by the | |||||
// common code and accessed by the export and max code | |||||
#define DSP_GEN_MAX_SIGNALS 16 | |||||
typedef double t_sample; | |||||
typedef char *t_ptr; | |||||
typedef long t_genlib_err; | |||||
typedef enum { | |||||
GENLIB_ERR_NONE = 0, ///< No error | |||||
GENLIB_ERR_GENERIC = -1, ///< Generic error | |||||
GENLIB_ERR_INVALID_PTR = -2, ///< Invalid Pointer | |||||
GENLIB_ERR_DUPLICATE = -3, ///< Duplicate | |||||
GENLIB_ERR_OUT_OF_MEM = -4, ///< Out of memory | |||||
GENLIB_ERR_LOOP_OVERFLOW = 100, // too many iterations of loops in perform() | |||||
GENLIB_ERR_NULL_BUFFER = 101 // missing signal data in perform() | |||||
} e_genlib_errorcodes; | |||||
typedef enum { | |||||
GENLIB_PARAMTYPE_FLOAT = 0, | |||||
GENLIB_PARAMTYPE_SYM = 1 | |||||
} e_genlib_paramtypes; | |||||
struct ParamInfo | |||||
{ | |||||
double defaultvalue; | |||||
void * defaultref; | |||||
char hasinputminmax; | |||||
char hasminmax; | |||||
double inputmin, inputmax; | |||||
double outputmin, outputmax; | |||||
const char *name; | |||||
const char *units; | |||||
int paramtype; // 0 -> float64, 1 -> symbol (table name) | |||||
double exp; // future, for scaling | |||||
}; | |||||
struct CommonState | |||||
{ | |||||
double sr; | |||||
int vs; | |||||
int numins; | |||||
int numouts; | |||||
const char **inputnames; | |||||
const char **outputnames; | |||||
int numparams; | |||||
ParamInfo *params; | |||||
void * parammap; // implementation-dependent | |||||
void * api; // implementation-dependent | |||||
}; | |||||
// opaque interface to float32 buffer: | |||||
typedef struct _genlib_buffer t_genlib_buffer; | |||||
typedef struct { | |||||
char b_name[256]; ///< name of the buffer | |||||
float *b_samples; ///< stored with interleaved channels if multi-channel | |||||
long b_frames; ///< number of sample frames (each one is sizeof(float) * b_nchans bytes) | |||||
long b_nchans; ///< number of channels | |||||
long b_size; ///< size of buffer in floats | |||||
float b_sr; ///< sampling rate of the buffer | |||||
long b_modtime; ///< last modified time ("dirty" method) | |||||
long b_rfu[57]; ///< reserved for future use | |||||
} t_genlib_buffer_info; | |||||
// opaque interface to float64 buffer: | |||||
typedef struct _genlib_data t_genlib_data; | |||||
typedef struct { | |||||
int dim, channels; | |||||
double * data; | |||||
} t_genlib_data_info; | |||||
#endif // GENLIB_COMMON_H | |||||
@@ -0,0 +1,43 @@ | |||||
/******************************************************************************************************************* | |||||
Copyright (c) 2012 Cycling '74 | |||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software | |||||
and associated documentation files (the "Software"), to deal in the Software without restriction, | |||||
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, | |||||
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, | |||||
subject to the following conditions: | |||||
The above copyright notice and this permission notice shall be included in all copies | |||||
or substantial portions of the Software. | |||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, | |||||
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | |||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | |||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE | |||||
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||||
*******************************************************************************************************************/ | |||||
#ifndef GENLIB_COMMON_WIN_H | |||||
#define GENLIB_COMMON_WIN_H | |||||
#ifdef _MSC_VER | |||||
#define GEN_WINDOWS | |||||
#endif | |||||
#ifdef GEN_WINDOWS | |||||
#include <malloc.h> | |||||
#include <limits> | |||||
typedef __int32 int32_t; | |||||
typedef unsigned __int32 uint32_t; | |||||
typedef __int64 int64_t; | |||||
typedef unsigned __int64 uint64_t; | |||||
#define malloc_size _msize | |||||
#define __DBL_EPSILON__ (DBL_EPSILON) | |||||
#endif | |||||
#endif | |||||
@@ -0,0 +1,38 @@ | |||||
/******************************************************************************************************************* | |||||
Copyright (c) 2012 Cycling '74 | |||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software | |||||
and associated documentation files (the "Software"), to deal in the Software without restriction, | |||||
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, | |||||
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, | |||||
subject to the following conditions: | |||||
The above copyright notice and this permission notice shall be included in all copies | |||||
or substantial portions of the Software. | |||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, | |||||
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | |||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | |||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE | |||||
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||||
*******************************************************************************************************************/ | |||||
#ifndef GENLIB_EXPORT_FUNCTIONS_H | |||||
#define GENLIB_EXPORT_FUNCTIONS_H 1 | |||||
typedef char *t_ptr; | |||||
t_ptr sysmem_newptr(t_ptr_size size); | |||||
t_ptr sysmem_newptrclear(t_ptr_size size); | |||||
t_ptr sysmem_resizeptr(void *ptr, t_ptr_size newsize); | |||||
t_ptr sysmem_resizeptrclear(void *ptr, t_ptr_size newsize); | |||||
t_ptr_size sysmem_ptrsize(void *ptr); | |||||
void sysmem_freeptr(void *ptr); | |||||
void sysmem_copyptr(const void *src, void *dst, t_ptr_size bytes); | |||||
unsigned long systime_ticks(void); | |||||
void genlib_report_error(const char *s); | |||||
void genlib_report_message(const char *s); | |||||
void set_zero64(double *mem, long size); | |||||
#endif // GENLIB_EXPORT_FUNCTIONS_H |
@@ -108,7 +108,7 @@ | |||||
"id" : "obj-50", | "id" : "obj-50", | ||||
"maxclass" : "flonum", | "maxclass" : "flonum", | ||||
"maximum" : 0.25, | "maximum" : 0.25, | ||||
"minimum" : 0.0, | |||||
"minimum" : 0.01, | |||||
"numinlets" : 1, | "numinlets" : 1, | ||||
"numoutlets" : 2, | "numoutlets" : 2, | ||||
"outlettype" : [ "float", "bang" ], | "outlettype" : [ "float", "bang" ], | ||||
@@ -116,20 +116,6 @@ | |||||
"patching_rect" : [ 189.0, 188.0, 50.0, 20.0 ] | "patching_rect" : [ 189.0, 188.0, 50.0, 20.0 ] | ||||
} | } | ||||
} | |||||
, { | |||||
"box" : { | |||||
"fontname" : "Arial", | |||||
"fontsize" : 12.0, | |||||
"id" : "obj-48", | |||||
"maxclass" : "message", | |||||
"numinlets" : 2, | |||||
"numoutlets" : 1, | |||||
"outlettype" : [ "" ], | |||||
"patching_rect" : [ 369.0, 218.0, 83.0, 18.0 ], | |||||
"text" : "resonance $1" | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"box" : { | "box" : { | ||||
@@ -151,7 +137,7 @@ | |||||
"fontsize" : 12.0, | "fontsize" : 12.0, | ||||
"id" : "obj-44", | "id" : "obj-44", | ||||
"maxclass" : "flonum", | "maxclass" : "flonum", | ||||
"maximum" : 12000.0, | |||||
"maximum" : 600.0, | |||||
"minimum" : 0.0, | "minimum" : 0.0, | ||||
"numinlets" : 1, | "numinlets" : 1, | ||||
"numoutlets" : 2, | "numoutlets" : 2, | ||||
@@ -160,22 +146,6 @@ | |||||
"patching_rect" : [ 106.0, 188.0, 50.0, 20.0 ] | "patching_rect" : [ 106.0, 188.0, 50.0, 20.0 ] | ||||
} | } | ||||
} | |||||
, { | |||||
"box" : { | |||||
"fontname" : "Arial", | |||||
"fontsize" : 12.0, | |||||
"id" : "obj-42", | |||||
"maxclass" : "flonum", | |||||
"maximum" : 0.5, | |||||
"minimum" : 0.0, | |||||
"numinlets" : 1, | |||||
"numoutlets" : 2, | |||||
"outlettype" : [ "float", "bang" ], | |||||
"parameter_enable" : 0, | |||||
"patching_rect" : [ 369.0, 188.0, 50.0, 20.0 ] | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"box" : { | "box" : { | ||||
@@ -805,8 +775,8 @@ | |||||
"numinlets" : 0, | "numinlets" : 0, | ||||
"numoutlets" : 1, | "numoutlets" : 1, | ||||
"outlettype" : [ "" ], | "outlettype" : [ "" ], | ||||
"patching_rect" : [ 931.0, 768.0, 183.0, 20.0 ], | |||||
"text" : "param shift 1. @min 0. @max 1." | |||||
"patching_rect" : [ 931.0, 768.0, 190.0, 20.0 ], | |||||
"text" : "param shift 0.5 @min 0. @max 1." | |||||
} | } | ||||
} | } | ||||
@@ -931,8 +901,8 @@ | |||||
"numinlets" : 0, | "numinlets" : 0, | ||||
"numoutlets" : 1, | "numoutlets" : 1, | ||||
"outlettype" : [ "" ], | "outlettype" : [ "" ], | ||||
"patching_rect" : [ 1225.0, 91.0, 194.0, 20.0 ], | |||||
"text" : "param blur 0. @min 0. @max 0.25" | |||||
"patching_rect" : [ 1225.0, 91.0, 221.0, 20.0 ], | |||||
"text" : "param blur 0.25 @min 0.01 @max 0.25" | |||||
} | } | ||||
} | } | ||||
@@ -1636,20 +1606,6 @@ | |||||
"text" : "-" | "text" : "-" | ||||
} | } | ||||
} | |||||
, { | |||||
"box" : { | |||||
"fontname" : "Arial", | |||||
"fontsize" : 12.0, | |||||
"id" : "obj-8", | |||||
"maxclass" : "newobj", | |||||
"numinlets" : 2, | |||||
"numoutlets" : 1, | |||||
"outlettype" : [ "" ], | |||||
"patching_rect" : [ 1498.25, 696.0, 32.5, 20.0 ], | |||||
"text" : "*" | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"box" : { | "box" : { | ||||
@@ -1720,20 +1676,6 @@ | |||||
"text" : "+ 1" | "text" : "+ 1" | ||||
} | } | ||||
} | |||||
, { | |||||
"box" : { | |||||
"fontname" : "Arial", | |||||
"fontsize" : 12.0, | |||||
"id" : "obj-21", | |||||
"maxclass" : "newobj", | |||||
"numinlets" : 2, | |||||
"numoutlets" : 1, | |||||
"outlettype" : [ "" ], | |||||
"patching_rect" : [ 1498.25, 596.0, 32.5, 20.0 ], | |||||
"text" : "*" | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"box" : { | "box" : { | ||||
@@ -1748,20 +1690,6 @@ | |||||
"text" : "* -2" | "text" : "* -2" | ||||
} | } | ||||
} | |||||
, { | |||||
"box" : { | |||||
"fontname" : "Arial", | |||||
"fontsize" : 12.0, | |||||
"id" : "obj-19", | |||||
"maxclass" : "newobj", | |||||
"numinlets" : 2, | |||||
"numoutlets" : 1, | |||||
"outlettype" : [ "" ], | |||||
"patching_rect" : [ 1378.25, 566.0, 32.5, 20.0 ], | |||||
"text" : "*" | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"box" : { | "box" : { | ||||
@@ -1776,90 +1704,18 @@ | |||||
"text" : "cos" | "text" : "cos" | ||||
} | } | ||||
} | |||||
, { | |||||
"box" : { | |||||
"fontname" : "Arial", | |||||
"fontsize" : 12.0, | |||||
"id" : "obj-18", | |||||
"maxclass" : "newobj", | |||||
"numinlets" : 1, | |||||
"numoutlets" : 1, | |||||
"outlettype" : [ "" ], | |||||
"patching_rect" : [ 1498.25, 536.0, 70.0, 20.0 ], | |||||
"text" : "* 0.882497" | |||||
} | |||||
} | |||||
, { | |||||
"box" : { | |||||
"fontname" : "Arial", | |||||
"fontsize" : 12.0, | |||||
"id" : "obj-24", | |||||
"maxclass" : "newobj", | |||||
"numinlets" : 1, | |||||
"numoutlets" : 1, | |||||
"outlettype" : [ "" ], | |||||
"patching_rect" : [ 1498.25, 486.0, 50.0, 20.0 ], | |||||
"text" : "* 0.125" | |||||
} | |||||
} | |||||
, { | |||||
"box" : { | |||||
"fontname" : "Arial", | |||||
"fontsize" : 12.0, | |||||
"id" : "obj-29", | |||||
"maxclass" : "newobj", | |||||
"numinlets" : 1, | |||||
"numoutlets" : 1, | |||||
"outlettype" : [ "" ], | |||||
"patching_rect" : [ 1498.25, 511.0, 30.0, 20.0 ], | |||||
"text" : "exp" | |||||
} | |||||
} | |||||
, { | |||||
"box" : { | |||||
"fontname" : "Arial", | |||||
"fontsize" : 12.0, | |||||
"id" : "obj-36", | |||||
"linecount" : 2, | |||||
"maxclass" : "newobj", | |||||
"numinlets" : 0, | |||||
"numoutlets" : 1, | |||||
"outlettype" : [ "" ], | |||||
"patching_rect" : [ 1498.25, 448.0, 127.0, 33.0 ], | |||||
"text" : "param resonance 0. @min 0. @max 0.5" | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"box" : { | "box" : { | ||||
"fontname" : "Arial", | "fontname" : "Arial", | ||||
"fontsize" : 12.0, | "fontsize" : 12.0, | ||||
"id" : "obj-38", | "id" : "obj-38", | ||||
"linecount" : 2, | |||||
"maxclass" : "newobj", | "maxclass" : "newobj", | ||||
"numinlets" : 0, | "numinlets" : 0, | ||||
"numoutlets" : 1, | "numoutlets" : 1, | ||||
"outlettype" : [ "" ], | "outlettype" : [ "" ], | ||||
"patching_rect" : [ 1318.25, 448.0, 137.0, 33.0 ], | |||||
"text" : "param cutoff 8000. @min 0. @max 8000." | |||||
} | |||||
} | |||||
, { | |||||
"box" : { | |||||
"fontname" : "Arial", | |||||
"fontsize" : 12.0, | |||||
"frgb" : 0.0, | |||||
"id" : "obj-307", | |||||
"maxclass" : "comment", | |||||
"numinlets" : 1, | |||||
"numoutlets" : 0, | |||||
"patching_rect" : [ 1171.0, 2068.0, 60.0, 20.0 ], | |||||
"text" : "Dry mix" | |||||
"patching_rect" : [ 1318.25, 448.0, 230.0, 20.0 ], | |||||
"text" : "param cutoff 3000. @min 0. @max 6000." | |||||
} | } | ||||
} | } | ||||
@@ -1886,8 +1742,8 @@ | |||||
"numinlets" : 0, | "numinlets" : 0, | ||||
"numoutlets" : 1, | "numoutlets" : 1, | ||||
"outlettype" : [ "" ], | "outlettype" : [ "" ], | ||||
"patching_rect" : [ 976.0, 2068.0, 180.0, 20.0 ], | |||||
"text" : "param mix 1. @min 0. @max 1." | |||||
"patching_rect" : [ 976.0, 2068.0, 193.0, 20.0 ], | |||||
"text" : "param mix 0.75 @min 0. @max 1." | |||||
} | } | ||||
} | } | ||||
@@ -4016,13 +3872,12 @@ | |||||
"fontname" : "Arial", | "fontname" : "Arial", | ||||
"fontsize" : 12.0, | "fontsize" : 12.0, | ||||
"id" : "obj-6", | "id" : "obj-6", | ||||
"linecount" : 2, | |||||
"maxclass" : "newobj", | "maxclass" : "newobj", | ||||
"numinlets" : 0, | "numinlets" : 0, | ||||
"numoutlets" : 1, | "numoutlets" : 1, | ||||
"outlettype" : [ "" ], | "outlettype" : [ "" ], | ||||
"patching_rect" : [ 856.0, 1693.0, 132.0, 33.0 ], | |||||
"text" : "param spread 23. @min 0. @max 100." | |||||
"patching_rect" : [ 856.0, 1693.0, 218.0, 20.0 ], | |||||
"text" : "param spread 25. @min 0. @max 100." | |||||
} | } | ||||
} | } | ||||
@@ -4031,13 +3886,12 @@ | |||||
"fontname" : "Arial", | "fontname" : "Arial", | ||||
"fontsize" : 12.0, | "fontsize" : 12.0, | ||||
"id" : "obj-5", | "id" : "obj-5", | ||||
"linecount" : 2, | |||||
"maxclass" : "newobj", | "maxclass" : "newobj", | ||||
"numinlets" : 0, | "numinlets" : 0, | ||||
"numoutlets" : 1, | "numoutlets" : 1, | ||||
"outlettype" : [ "" ], | "outlettype" : [ "" ], | ||||
"patching_rect" : [ 511.0, 1258.0, 137.5, 33.0 ], | |||||
"text" : "param damping 0.7 @min 0. @max 1." | |||||
"patching_rect" : [ 511.0, 1258.0, 220.0, 20.0 ], | |||||
"text" : "param damping 0.75 @min 0. @max 1." | |||||
} | } | ||||
} | } | ||||
@@ -4808,7 +4662,7 @@ | |||||
} | } | ||||
, { | , { | ||||
"patchline" : { | "patchline" : { | ||||
"destination" : [ "obj-19", 0 ], | |||||
"destination" : [ "obj-20", 0 ], | |||||
"disabled" : 0, | "disabled" : 0, | ||||
"hidden" : 0, | "hidden" : 0, | ||||
"midpoints" : [ 1327.75, 560.5, 1387.75, 560.5 ], | "midpoints" : [ 1327.75, 560.5, 1387.75, 560.5 ], | ||||
@@ -5236,36 +5090,6 @@ | |||||
"source" : [ "obj-179", 0 ] | "source" : [ "obj-179", 0 ] | ||||
} | } | ||||
} | |||||
, { | |||||
"patchline" : { | |||||
"destination" : [ "obj-19", 1 ], | |||||
"disabled" : 0, | |||||
"hidden" : 0, | |||||
"midpoints" : [ 1507.75, 560.5, 1401.25, 560.5 ], | |||||
"source" : [ "obj-18", 0 ] | |||||
} | |||||
} | |||||
, { | |||||
"patchline" : { | |||||
"destination" : [ "obj-21", 1 ], | |||||
"disabled" : 0, | |||||
"hidden" : 0, | |||||
"midpoints" : [ 1507.75, 575.5, 1521.25, 575.5 ], | |||||
"source" : [ "obj-18", 0 ] | |||||
} | |||||
} | |||||
, { | |||||
"patchline" : { | |||||
"destination" : [ "obj-21", 0 ], | |||||
"disabled" : 0, | |||||
"hidden" : 0, | |||||
"midpoints" : [ 1507.75, 575.5, 1507.75, 575.5 ], | |||||
"source" : [ "obj-18", 0 ] | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"patchline" : { | "patchline" : { | ||||
@@ -5427,15 +5251,6 @@ | |||||
"source" : [ "obj-188", 0 ] | "source" : [ "obj-188", 0 ] | ||||
} | } | ||||
} | |||||
, { | |||||
"patchline" : { | |||||
"destination" : [ "obj-20", 0 ], | |||||
"disabled" : 0, | |||||
"hidden" : 0, | |||||
"source" : [ "obj-19", 0 ] | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"patchline" : { | "patchline" : { | ||||
@@ -5671,25 +5486,6 @@ | |||||
"source" : [ "obj-205", 0 ] | "source" : [ "obj-205", 0 ] | ||||
} | } | ||||
} | |||||
, { | |||||
"patchline" : { | |||||
"destination" : [ "obj-22", 0 ], | |||||
"disabled" : 0, | |||||
"hidden" : 0, | |||||
"midpoints" : [ 1507.75, 624.5, 1207.75, 624.5 ], | |||||
"source" : [ "obj-21", 0 ] | |||||
} | |||||
} | |||||
, { | |||||
"patchline" : { | |||||
"destination" : [ "obj-8", 0 ], | |||||
"disabled" : 0, | |||||
"hidden" : 0, | |||||
"source" : [ "obj-21", 0 ] | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"patchline" : { | "patchline" : { | ||||
@@ -5898,15 +5694,6 @@ | |||||
"source" : [ "obj-239", 0 ] | "source" : [ "obj-239", 0 ] | ||||
} | } | ||||
} | |||||
, { | |||||
"patchline" : { | |||||
"destination" : [ "obj-29", 0 ], | |||||
"disabled" : 0, | |||||
"hidden" : 0, | |||||
"source" : [ "obj-24", 0 ] | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"patchline" : { | "patchline" : { | ||||
@@ -5995,9 +5782,10 @@ | |||||
} | } | ||||
, { | , { | ||||
"patchline" : { | "patchline" : { | ||||
"destination" : [ "obj-8", 1 ], | |||||
"destination" : [ "obj-26", 1 ], | |||||
"disabled" : 0, | "disabled" : 0, | ||||
"hidden" : 0, | "hidden" : 0, | ||||
"midpoints" : [ 1521.75, 732.0, 1191.25, 732.0 ], | |||||
"source" : [ "obj-25", 0 ] | "source" : [ "obj-25", 0 ] | ||||
} | } | ||||
@@ -6370,15 +6158,6 @@ | |||||
"source" : [ "obj-289", 0 ] | "source" : [ "obj-289", 0 ] | ||||
} | } | ||||
} | |||||
, { | |||||
"patchline" : { | |||||
"destination" : [ "obj-18", 0 ], | |||||
"disabled" : 0, | |||||
"hidden" : 0, | |||||
"source" : [ "obj-29", 0 ] | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"patchline" : { | "patchline" : { | ||||
@@ -6633,15 +6412,6 @@ | |||||
"source" : [ "obj-35", 0 ] | "source" : [ "obj-35", 0 ] | ||||
} | } | ||||
} | |||||
, { | |||||
"patchline" : { | |||||
"destination" : [ "obj-24", 0 ], | |||||
"disabled" : 0, | |||||
"hidden" : 0, | |||||
"source" : [ "obj-36", 0 ] | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"patchline" : { | "patchline" : { | ||||
@@ -7257,16 +7027,6 @@ | |||||
"source" : [ "obj-79", 0 ] | "source" : [ "obj-79", 0 ] | ||||
} | } | ||||
} | |||||
, { | |||||
"patchline" : { | |||||
"destination" : [ "obj-26", 1 ], | |||||
"disabled" : 0, | |||||
"hidden" : 0, | |||||
"midpoints" : [ 1507.75, 732.0, 1191.25, 732.0 ], | |||||
"source" : [ "obj-8", 0 ] | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"patchline" : { | "patchline" : { | ||||
@@ -7470,10 +7230,6 @@ | |||||
} | } | ||||
, | , | ||||
"patching_rect" : [ 15.0, 494.0, 150.0, 20.0 ], | "patching_rect" : [ 15.0, 494.0, 150.0, 20.0 ], | ||||
"saved_object_attributes" : { | |||||
"exportfolder" : "Macintosh HD:/Users/Nino/Downloads/untitled folder/untitled folder/" | |||||
} | |||||
, | |||||
"text" : "gen~" | "text" : "gen~" | ||||
} | } | ||||
@@ -7665,15 +7421,6 @@ | |||||
"source" : [ "obj-4", 0 ] | "source" : [ "obj-4", 0 ] | ||||
} | } | ||||
} | |||||
, { | |||||
"patchline" : { | |||||
"destination" : [ "obj-48", 0 ], | |||||
"disabled" : 0, | |||||
"hidden" : 0, | |||||
"source" : [ "obj-42", 0 ] | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"patchline" : { | "patchline" : { | ||||
@@ -7693,16 +7440,6 @@ | |||||
"source" : [ "obj-46", 0 ] | "source" : [ "obj-46", 0 ] | ||||
} | } | ||||
} | |||||
, { | |||||
"patchline" : { | |||||
"destination" : [ "obj-4", 0 ], | |||||
"disabled" : 0, | |||||
"hidden" : 0, | |||||
"midpoints" : [ 378.5, 432.0, 24.5, 432.0 ], | |||||
"source" : [ "obj-48", 0 ] | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"patchline" : { | "patchline" : { | ||||
@@ -7820,35 +7557,35 @@ | |||||
"dependency_cache" : [ { | "dependency_cache" : [ { | ||||
"name" : "demosound.maxpat", | "name" : "demosound.maxpat", | ||||
"bootpath" : "/Applications/Max 6.1/Cycling '74/msp-help", | "bootpath" : "/Applications/Max 6.1/Cycling '74/msp-help", | ||||
"patcherrelativepath" : "../../../../../../Applications/Max 6.1/Cycling '74/msp-help", | |||||
"patcherrelativepath" : "../../../../../../../Applications/Max 6.1/Cycling '74/msp-help", | |||||
"type" : "JSON", | "type" : "JSON", | ||||
"implicit" : 1 | "implicit" : 1 | ||||
} | } | ||||
, { | , { | ||||
"name" : "sine.svg", | "name" : "sine.svg", | ||||
"bootpath" : "/Applications/Max 6.1/patches/picts/m4l-picts", | "bootpath" : "/Applications/Max 6.1/patches/picts/m4l-picts", | ||||
"patcherrelativepath" : "../../../../../../Applications/Max 6.1/patches/picts/m4l-picts", | |||||
"patcherrelativepath" : "../../../../../../../Applications/Max 6.1/patches/picts/m4l-picts", | |||||
"type" : "svg ", | "type" : "svg ", | ||||
"implicit" : 1 | "implicit" : 1 | ||||
} | } | ||||
, { | , { | ||||
"name" : "saw.svg", | "name" : "saw.svg", | ||||
"bootpath" : "/Applications/Max 6.1/patches/picts/m4l-picts", | "bootpath" : "/Applications/Max 6.1/patches/picts/m4l-picts", | ||||
"patcherrelativepath" : "../../../../../../Applications/Max 6.1/patches/picts/m4l-picts", | |||||
"patcherrelativepath" : "../../../../../../../Applications/Max 6.1/patches/picts/m4l-picts", | |||||
"type" : "svg ", | "type" : "svg ", | ||||
"implicit" : 1 | "implicit" : 1 | ||||
} | } | ||||
, { | , { | ||||
"name" : "square.svg", | "name" : "square.svg", | ||||
"bootpath" : "/Applications/Max 6.1/patches/picts/m4l-picts", | "bootpath" : "/Applications/Max 6.1/patches/picts/m4l-picts", | ||||
"patcherrelativepath" : "../../../../../../Applications/Max 6.1/patches/picts/m4l-picts", | |||||
"patcherrelativepath" : "../../../../../../../Applications/Max 6.1/patches/picts/m4l-picts", | |||||
"type" : "svg ", | "type" : "svg ", | ||||
"implicit" : 1 | "implicit" : 1 | ||||
} | } | ||||
, { | , { | ||||
"name" : "random.svg", | "name" : "random.svg", | ||||
"bootpath" : "/Applications/Max 6.1/patches/picts/m4l-picts", | "bootpath" : "/Applications/Max 6.1/patches/picts/m4l-picts", | ||||
"patcherrelativepath" : "../../../../../../Applications/Max 6.1/patches/picts/m4l-picts", | |||||
"patcherrelativepath" : "../../../../../../../Applications/Max 6.1/patches/picts/m4l-picts", | |||||
"type" : "svg ", | "type" : "svg ", | ||||
"implicit" : 1 | "implicit" : 1 | ||||
} | } | ||||
@@ -261,8 +261,8 @@ | |||||
"numinlets" : 0, | "numinlets" : 0, | ||||
"numoutlets" : 1, | "numoutlets" : 1, | ||||
"outlettype" : [ "" ], | "outlettype" : [ "" ], | ||||
"patching_rect" : [ 931.0, 768.0, 183.0, 20.0 ], | |||||
"text" : "param shift 1. @min 0. @max 1." | |||||
"patching_rect" : [ 931.0, 768.0, 190.0, 20.0 ], | |||||
"text" : "param shift 0.5 @min 0. @max 1." | |||||
} | } | ||||
} | } | ||||
@@ -387,8 +387,8 @@ | |||||
"numinlets" : 0, | "numinlets" : 0, | ||||
"numoutlets" : 1, | "numoutlets" : 1, | ||||
"outlettype" : [ "" ], | "outlettype" : [ "" ], | ||||
"patching_rect" : [ 1225.0, 91.0, 194.0, 20.0 ], | |||||
"text" : "param blur 0. @min 0. @max 0.25" | |||||
"patching_rect" : [ 1225.0, 91.0, 221.0, 20.0 ], | |||||
"text" : "param blur 0.25 @min 0.01 @max 0.25" | |||||
} | } | ||||
} | } | ||||
@@ -1092,20 +1092,6 @@ | |||||
"text" : "-" | "text" : "-" | ||||
} | } | ||||
} | |||||
, { | |||||
"box" : { | |||||
"fontname" : "Arial", | |||||
"fontsize" : 12.0, | |||||
"id" : "obj-8", | |||||
"maxclass" : "newobj", | |||||
"numinlets" : 2, | |||||
"numoutlets" : 1, | |||||
"outlettype" : [ "" ], | |||||
"patching_rect" : [ 1498.25, 696.0, 32.5, 20.0 ], | |||||
"text" : "*" | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"box" : { | "box" : { | ||||
@@ -1176,20 +1162,6 @@ | |||||
"text" : "+ 1" | "text" : "+ 1" | ||||
} | } | ||||
} | |||||
, { | |||||
"box" : { | |||||
"fontname" : "Arial", | |||||
"fontsize" : 12.0, | |||||
"id" : "obj-21", | |||||
"maxclass" : "newobj", | |||||
"numinlets" : 2, | |||||
"numoutlets" : 1, | |||||
"outlettype" : [ "" ], | |||||
"patching_rect" : [ 1498.25, 596.0, 32.5, 20.0 ], | |||||
"text" : "*" | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"box" : { | "box" : { | ||||
@@ -1204,20 +1176,6 @@ | |||||
"text" : "* -2" | "text" : "* -2" | ||||
} | } | ||||
} | |||||
, { | |||||
"box" : { | |||||
"fontname" : "Arial", | |||||
"fontsize" : 12.0, | |||||
"id" : "obj-19", | |||||
"maxclass" : "newobj", | |||||
"numinlets" : 2, | |||||
"numoutlets" : 1, | |||||
"outlettype" : [ "" ], | |||||
"patching_rect" : [ 1378.25, 566.0, 32.5, 20.0 ], | |||||
"text" : "*" | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"box" : { | "box" : { | ||||
@@ -1232,90 +1190,18 @@ | |||||
"text" : "cos" | "text" : "cos" | ||||
} | } | ||||
} | |||||
, { | |||||
"box" : { | |||||
"fontname" : "Arial", | |||||
"fontsize" : 12.0, | |||||
"id" : "obj-18", | |||||
"maxclass" : "newobj", | |||||
"numinlets" : 1, | |||||
"numoutlets" : 1, | |||||
"outlettype" : [ "" ], | |||||
"patching_rect" : [ 1498.25, 536.0, 70.0, 20.0 ], | |||||
"text" : "* 0.882497" | |||||
} | |||||
} | |||||
, { | |||||
"box" : { | |||||
"fontname" : "Arial", | |||||
"fontsize" : 12.0, | |||||
"id" : "obj-24", | |||||
"maxclass" : "newobj", | |||||
"numinlets" : 1, | |||||
"numoutlets" : 1, | |||||
"outlettype" : [ "" ], | |||||
"patching_rect" : [ 1498.25, 486.0, 50.0, 20.0 ], | |||||
"text" : "* 0.125" | |||||
} | |||||
} | |||||
, { | |||||
"box" : { | |||||
"fontname" : "Arial", | |||||
"fontsize" : 12.0, | |||||
"id" : "obj-29", | |||||
"maxclass" : "newobj", | |||||
"numinlets" : 1, | |||||
"numoutlets" : 1, | |||||
"outlettype" : [ "" ], | |||||
"patching_rect" : [ 1498.25, 511.0, 30.0, 20.0 ], | |||||
"text" : "exp" | |||||
} | |||||
} | |||||
, { | |||||
"box" : { | |||||
"fontname" : "Arial", | |||||
"fontsize" : 12.0, | |||||
"id" : "obj-36", | |||||
"linecount" : 2, | |||||
"maxclass" : "newobj", | |||||
"numinlets" : 0, | |||||
"numoutlets" : 1, | |||||
"outlettype" : [ "" ], | |||||
"patching_rect" : [ 1498.25, 448.0, 127.0, 33.0 ], | |||||
"text" : "param resonance 0. @min 0. @max 0.5" | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"box" : { | "box" : { | ||||
"fontname" : "Arial", | "fontname" : "Arial", | ||||
"fontsize" : 12.0, | "fontsize" : 12.0, | ||||
"id" : "obj-38", | "id" : "obj-38", | ||||
"linecount" : 2, | |||||
"maxclass" : "newobj", | "maxclass" : "newobj", | ||||
"numinlets" : 0, | "numinlets" : 0, | ||||
"numoutlets" : 1, | "numoutlets" : 1, | ||||
"outlettype" : [ "" ], | "outlettype" : [ "" ], | ||||
"patching_rect" : [ 1318.25, 448.0, 137.0, 33.0 ], | |||||
"text" : "param cutoff 8000. @min 0. @max 8000." | |||||
} | |||||
} | |||||
, { | |||||
"box" : { | |||||
"fontname" : "Arial", | |||||
"fontsize" : 12.0, | |||||
"frgb" : 0.0, | |||||
"id" : "obj-307", | |||||
"maxclass" : "comment", | |||||
"numinlets" : 1, | |||||
"numoutlets" : 0, | |||||
"patching_rect" : [ 1171.0, 2068.0, 60.0, 20.0 ], | |||||
"text" : "Dry mix" | |||||
"patching_rect" : [ 1318.25, 448.0, 230.0, 20.0 ], | |||||
"text" : "param cutoff 3000. @min 0. @max 6000." | |||||
} | } | ||||
} | } | ||||
@@ -1342,8 +1228,8 @@ | |||||
"numinlets" : 0, | "numinlets" : 0, | ||||
"numoutlets" : 1, | "numoutlets" : 1, | ||||
"outlettype" : [ "" ], | "outlettype" : [ "" ], | ||||
"patching_rect" : [ 976.0, 2068.0, 180.0, 20.0 ], | |||||
"text" : "param mix 1. @min 0. @max 1." | |||||
"patching_rect" : [ 976.0, 2068.0, 193.0, 20.0 ], | |||||
"text" : "param mix 0.75 @min 0. @max 1." | |||||
} | } | ||||
} | } | ||||
@@ -3472,13 +3358,12 @@ | |||||
"fontname" : "Arial", | "fontname" : "Arial", | ||||
"fontsize" : 12.0, | "fontsize" : 12.0, | ||||
"id" : "obj-6", | "id" : "obj-6", | ||||
"linecount" : 2, | |||||
"maxclass" : "newobj", | "maxclass" : "newobj", | ||||
"numinlets" : 0, | "numinlets" : 0, | ||||
"numoutlets" : 1, | "numoutlets" : 1, | ||||
"outlettype" : [ "" ], | "outlettype" : [ "" ], | ||||
"patching_rect" : [ 856.0, 1693.0, 132.0, 33.0 ], | |||||
"text" : "param spread 23. @min 0. @max 100." | |||||
"patching_rect" : [ 856.0, 1693.0, 218.0, 20.0 ], | |||||
"text" : "param spread 25. @min 0. @max 100." | |||||
} | } | ||||
} | } | ||||
@@ -3487,13 +3372,12 @@ | |||||
"fontname" : "Arial", | "fontname" : "Arial", | ||||
"fontsize" : 12.0, | "fontsize" : 12.0, | ||||
"id" : "obj-5", | "id" : "obj-5", | ||||
"linecount" : 2, | |||||
"maxclass" : "newobj", | "maxclass" : "newobj", | ||||
"numinlets" : 0, | "numinlets" : 0, | ||||
"numoutlets" : 1, | "numoutlets" : 1, | ||||
"outlettype" : [ "" ], | "outlettype" : [ "" ], | ||||
"patching_rect" : [ 511.0, 1258.0, 137.5, 33.0 ], | |||||
"text" : "param damping 0.7 @min 0. @max 1." | |||||
"patching_rect" : [ 511.0, 1258.0, 220.0, 20.0 ], | |||||
"text" : "param damping 0.75 @min 0. @max 1." | |||||
} | } | ||||
} | } | ||||
@@ -4264,7 +4148,7 @@ | |||||
} | } | ||||
, { | , { | ||||
"patchline" : { | "patchline" : { | ||||
"destination" : [ "obj-19", 0 ], | |||||
"destination" : [ "obj-20", 0 ], | |||||
"disabled" : 0, | "disabled" : 0, | ||||
"hidden" : 0, | "hidden" : 0, | ||||
"midpoints" : [ 1327.75, 560.5, 1387.75, 560.5 ], | "midpoints" : [ 1327.75, 560.5, 1387.75, 560.5 ], | ||||
@@ -4692,36 +4576,6 @@ | |||||
"source" : [ "obj-179", 0 ] | "source" : [ "obj-179", 0 ] | ||||
} | } | ||||
} | |||||
, { | |||||
"patchline" : { | |||||
"destination" : [ "obj-19", 1 ], | |||||
"disabled" : 0, | |||||
"hidden" : 0, | |||||
"midpoints" : [ 1507.75, 560.5, 1401.25, 560.5 ], | |||||
"source" : [ "obj-18", 0 ] | |||||
} | |||||
} | |||||
, { | |||||
"patchline" : { | |||||
"destination" : [ "obj-21", 1 ], | |||||
"disabled" : 0, | |||||
"hidden" : 0, | |||||
"midpoints" : [ 1507.75, 575.5, 1521.25, 575.5 ], | |||||
"source" : [ "obj-18", 0 ] | |||||
} | |||||
} | |||||
, { | |||||
"patchline" : { | |||||
"destination" : [ "obj-21", 0 ], | |||||
"disabled" : 0, | |||||
"hidden" : 0, | |||||
"midpoints" : [ 1507.75, 575.5, 1507.75, 575.5 ], | |||||
"source" : [ "obj-18", 0 ] | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"patchline" : { | "patchline" : { | ||||
@@ -4883,15 +4737,6 @@ | |||||
"source" : [ "obj-188", 0 ] | "source" : [ "obj-188", 0 ] | ||||
} | } | ||||
} | |||||
, { | |||||
"patchline" : { | |||||
"destination" : [ "obj-20", 0 ], | |||||
"disabled" : 0, | |||||
"hidden" : 0, | |||||
"source" : [ "obj-19", 0 ] | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"patchline" : { | "patchline" : { | ||||
@@ -5127,25 +4972,6 @@ | |||||
"source" : [ "obj-205", 0 ] | "source" : [ "obj-205", 0 ] | ||||
} | } | ||||
} | |||||
, { | |||||
"patchline" : { | |||||
"destination" : [ "obj-22", 0 ], | |||||
"disabled" : 0, | |||||
"hidden" : 0, | |||||
"midpoints" : [ 1507.75, 624.5, 1207.75, 624.5 ], | |||||
"source" : [ "obj-21", 0 ] | |||||
} | |||||
} | |||||
, { | |||||
"patchline" : { | |||||
"destination" : [ "obj-8", 0 ], | |||||
"disabled" : 0, | |||||
"hidden" : 0, | |||||
"source" : [ "obj-21", 0 ] | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"patchline" : { | "patchline" : { | ||||
@@ -5354,15 +5180,6 @@ | |||||
"source" : [ "obj-239", 0 ] | "source" : [ "obj-239", 0 ] | ||||
} | } | ||||
} | |||||
, { | |||||
"patchline" : { | |||||
"destination" : [ "obj-29", 0 ], | |||||
"disabled" : 0, | |||||
"hidden" : 0, | |||||
"source" : [ "obj-24", 0 ] | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"patchline" : { | "patchline" : { | ||||
@@ -5451,9 +5268,10 @@ | |||||
} | } | ||||
, { | , { | ||||
"patchline" : { | "patchline" : { | ||||
"destination" : [ "obj-8", 1 ], | |||||
"destination" : [ "obj-26", 1 ], | |||||
"disabled" : 0, | "disabled" : 0, | ||||
"hidden" : 0, | "hidden" : 0, | ||||
"midpoints" : [ 1521.75, 732.0, 1191.25, 732.0 ], | |||||
"source" : [ "obj-25", 0 ] | "source" : [ "obj-25", 0 ] | ||||
} | } | ||||
@@ -5826,15 +5644,6 @@ | |||||
"source" : [ "obj-289", 0 ] | "source" : [ "obj-289", 0 ] | ||||
} | } | ||||
} | |||||
, { | |||||
"patchline" : { | |||||
"destination" : [ "obj-18", 0 ], | |||||
"disabled" : 0, | |||||
"hidden" : 0, | |||||
"source" : [ "obj-29", 0 ] | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"patchline" : { | "patchline" : { | ||||
@@ -6089,15 +5898,6 @@ | |||||
"source" : [ "obj-35", 0 ] | "source" : [ "obj-35", 0 ] | ||||
} | } | ||||
} | |||||
, { | |||||
"patchline" : { | |||||
"destination" : [ "obj-24", 0 ], | |||||
"disabled" : 0, | |||||
"hidden" : 0, | |||||
"source" : [ "obj-36", 0 ] | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"patchline" : { | "patchline" : { | ||||
@@ -6713,16 +6513,6 @@ | |||||
"source" : [ "obj-79", 0 ] | "source" : [ "obj-79", 0 ] | ||||
} | } | ||||
} | |||||
, { | |||||
"patchline" : { | |||||
"destination" : [ "obj-26", 1 ], | |||||
"disabled" : 0, | |||||
"hidden" : 0, | |||||
"midpoints" : [ 1507.75, 732.0, 1191.25, 732.0 ], | |||||
"source" : [ "obj-8", 0 ] | |||||
} | |||||
} | } | ||||
, { | , { | ||||
"patchline" : { | "patchline" : { | ||||