From d6b088044e161a27d49df537bbb6d998a8d0e50d Mon Sep 17 00:00:00 2001 From: musil Date: Sat, 9 Dec 2006 02:00:52 +0000 Subject: // class_sethelpsymbol(); changed help-*.pd to *-help.pd chanded file structure to standard 1st step remove old svn path=/trunk/externals/iemlib/; revision=6756 --- iem_t3_lib/src/iem_t3_lib.c | 42 +++++++ iem_t3_lib/src/iem_t3_lib.dsp | 85 +++++++++++++ iem_t3_lib/src/iem_t3_lib.dsw | 29 +++++ iem_t3_lib/src/iemlib.h | 108 +++++++++++++++++ iem_t3_lib/src/makefile | 4 + iem_t3_lib/src/makefile_linux | 51 ++++++++ iem_t3_lib/src/makefile_win | 36 ++++++ iem_t3_lib/src/t3_bpe.c | 133 +++++++++++++++++++++ iem_t3_lib/src/t3_delay.c | 88 ++++++++++++++ iem_t3_lib/src/t3_line~.c | 272 ++++++++++++++++++++++++++++++++++++++++++ iem_t3_lib/src/t3_metro.c | 113 ++++++++++++++++++ iem_t3_lib/src/t3_sig~.c | 192 +++++++++++++++++++++++++++++ iem_t3_lib/src/t3_timer.c | 48 ++++++++ iem_t3_lib/t3_bpe-help.pd | 105 ++++++++++++++++ iem_t3_lib/t3_delay-help.pd | 79 ++++++++++++ iem_t3_lib/t3_line~-help.pd | 97 +++++++++++++++ iem_t3_lib/t3_metro-help.pd | 103 ++++++++++++++++ iem_t3_lib/t3_sig~-help.pd | 75 ++++++++++++ iem_t3_lib/t3_timer-help.pd | 27 +++++ 19 files changed, 1687 insertions(+) create mode 100644 iem_t3_lib/src/iem_t3_lib.c create mode 100644 iem_t3_lib/src/iem_t3_lib.dsp create mode 100644 iem_t3_lib/src/iem_t3_lib.dsw create mode 100644 iem_t3_lib/src/iemlib.h create mode 100644 iem_t3_lib/src/makefile create mode 100644 iem_t3_lib/src/makefile_linux create mode 100644 iem_t3_lib/src/makefile_win create mode 100644 iem_t3_lib/src/t3_bpe.c create mode 100644 iem_t3_lib/src/t3_delay.c create mode 100644 iem_t3_lib/src/t3_line~.c create mode 100644 iem_t3_lib/src/t3_metro.c create mode 100644 iem_t3_lib/src/t3_sig~.c create mode 100644 iem_t3_lib/src/t3_timer.c create mode 100644 iem_t3_lib/t3_bpe-help.pd create mode 100644 iem_t3_lib/t3_delay-help.pd create mode 100644 iem_t3_lib/t3_line~-help.pd create mode 100644 iem_t3_lib/t3_metro-help.pd create mode 100644 iem_t3_lib/t3_sig~-help.pd create mode 100644 iem_t3_lib/t3_timer-help.pd (limited to 'iem_t3_lib') diff --git a/iem_t3_lib/src/iem_t3_lib.c b/iem_t3_lib/src/iem_t3_lib.c new file mode 100644 index 0000000..464c330 --- /dev/null +++ b/iem_t3_lib/src/iem_t3_lib.c @@ -0,0 +1,42 @@ +/* For information on usage and redistribution, and for a DISCLAIMER OF ALL +* WARRANTIES, see the file, "LICENSE.txt," in this distribution. + +iem_t3_lib written by Gerhard Eckel, Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006 */ + +#include "m_pd.h" +#include "iemlib.h" + + +static t_class *iem_t3_lib_class; + +static void *iem_t3_lib_new(void) +{ + t_object *x = (t_object *)pd_new(iem_t3_lib_class); + + return (x); +} + +void t3_bpe_setup(void); +void t3_delay_setup(void); +void t3_line_tilde_setup(void); +void t3_metro_setup(void); +void t3_sig_tilde_setup(void); +void t3_timer_setup(void); + +/* ------------------------ setup routine ------------------------- */ + +void iem_t3_lib_setup(void) +{ + iem_t3_lib_class = class_new(gensym("iem_t3_lib"), iem_t3_lib_new, 0, + sizeof(t_object), CLASS_NOINLET, 0); + + t3_bpe_setup(); + t3_delay_setup(); + t3_line_tilde_setup(); + t3_metro_setup(); + t3_sig_tilde_setup(); + t3_timer_setup(); + + post("iem_t3_lib (R-1.17) library loaded! (c) Gerhard Eckel, Thomas Musil 11.2006"); + post(" musil%ciem.at iem KUG Graz Austria", '@'); +} diff --git a/iem_t3_lib/src/iem_t3_lib.dsp b/iem_t3_lib/src/iem_t3_lib.dsp new file mode 100644 index 0000000..ab0a094 --- /dev/null +++ b/iem_t3_lib/src/iem_t3_lib.dsp @@ -0,0 +1,85 @@ +# Microsoft Developer Studio Project File - Name="iem_t3_lib" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** NICHT BEARBEITEN ** + +# TARGTYPE "Win32 (x86) External Target" 0x0106 + +CFG=iem_t3_lib - Win32 Debug +!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE +!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl +!MESSAGE +!MESSAGE NMAKE /f "iem_t3_lib.mak". +!MESSAGE +!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben +!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel: +!MESSAGE +!MESSAGE NMAKE /f "iem_t3_lib.mak" CFG="iem_t3_lib - Win32 Debug" +!MESSAGE +!MESSAGE Für die Konfiguration stehen zur Auswahl: +!MESSAGE +!MESSAGE "iem_t3_lib - Win32 Release" (basierend auf "Win32 (x86) External Target") +!MESSAGE "iem_t3_lib - Win32 Debug" (basierend auf "Win32 (x86) External Target") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" + +!IF "$(CFG)" == "iem_t3_lib - Win32 Release" + +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Cmd_Line "NMAKE /f makefile_win" +# PROP BASE Rebuild_Opt "/a" +# PROP BASE Target_File "makefile_win.exe" +# PROP BASE Bsc_Name "makefile_win.bsc" +# PROP BASE Target_Dir "" +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Cmd_Line "NMAKE /f makefile_win" +# PROP Rebuild_Opt "/a" +# PROP Target_File "iem_t3_lib.exe" +# PROP Bsc_Name "iem_t3_lib.bsc" +# PROP Target_Dir "" + +!ELSEIF "$(CFG)" == "iem_t3_lib - Win32 Debug" + +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Cmd_Line "NMAKE /f makefile_win" +# PROP BASE Rebuild_Opt "/a" +# PROP BASE Target_File "makefile_win.exe" +# PROP BASE Bsc_Name "makefile_win.bsc" +# PROP BASE Target_Dir "" +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Cmd_Line "NMAKE /f makefile_win" +# PROP Rebuild_Opt "/a" +# PROP Target_File "iem_t3_lib.exe" +# PROP Bsc_Name "iem_t3_lib.bsc" +# PROP Target_Dir "" + +!ENDIF + +# Begin Target + +# Name "iem_t3_lib - Win32 Release" +# Name "iem_t3_lib - Win32 Debug" + +!IF "$(CFG)" == "iem_t3_lib - Win32 Release" + +!ELSEIF "$(CFG)" == "iem_t3_lib - Win32 Debug" + +!ENDIF + +# Begin Source File + +SOURCE=.\makefile_win +# End Source File +# End Target +# End Project diff --git a/iem_t3_lib/src/iem_t3_lib.dsw b/iem_t3_lib/src/iem_t3_lib.dsw new file mode 100644 index 0000000..6c2a29b --- /dev/null +++ b/iem_t3_lib/src/iem_t3_lib.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELÖSCHT WERDEN! + +############################################################################### + +Project: "iem_t3_lib"=.\iem_t3_lib.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/iem_t3_lib/src/iemlib.h b/iem_t3_lib/src/iemlib.h new file mode 100644 index 0000000..6be2de0 --- /dev/null +++ b/iem_t3_lib/src/iemlib.h @@ -0,0 +1,108 @@ +/* For information on usage and redistribution, and for a DISCLAIMER OF ALL +* WARRANTIES, see the file, "LICENSE.txt," in this distribution. + +iemlib written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */ + +#ifndef __IEMLIB_H__ +#define __IEMLIB_H__ + + +#define IS_A_POINTER(atom,index) ((atom+index)->a_type == A_POINTER) +#define IS_A_FLOAT(atom,index) ((atom+index)->a_type == A_FLOAT) +#define IS_A_SYMBOL(atom,index) ((atom+index)->a_type == A_SYMBOL) +#define IS_A_DOLLAR(atom,index) ((atom+index)->a_type == A_DOLLAR) +#define IS_A_DOLLSYM(atom,index) ((atom+index)->a_type == A_DOLLSYM) +#define IS_A_SEMI(atom,index) ((atom+index)->a_type == A_SEMI) +#define IS_A_COMMA(atom,index) ((atom+index)->a_type == A_COMMA) + + +#ifdef NT +int sys_noloadbang; +//t_symbol *iemgui_key_sym=0; +#include +#else +extern int sys_noloadbang; +//extern t_symbol *iemgui_key_sym; +#include +#endif + +#define DEFDELVS 64 +#define XTRASAMPS 4 +#define SAMPBLK 4 + + +#define UNITBIT32 1572864. /* 3*2^19; bit 32 has place value 1 */ + +/* machine-dependent definitions. These ifdefs really +should have been by CPU type and not by operating system! */ +#ifdef IRIX +/* big-endian. Most significant byte is at low address in memory */ +#define HIOFFSET 0 /* word offset to find MSB */ +#define LOWOFFSET 1 /* word offset to find LSB */ +#define int32 long /* a data type that has 32 bits */ +#else +#ifdef MSW +/* little-endian; most significant byte is at highest address */ +#define HIOFFSET 1 +#define LOWOFFSET 0 +#define int32 long +#else +#ifdef __FreeBSD__ +#include +#if BYTE_ORDER == LITTLE_ENDIAN +#define HIOFFSET 1 +#define LOWOFFSET 0 +#else +#define HIOFFSET 0 /* word offset to find MSB */ +#define LOWOFFSET 1 /* word offset to find LSB */ +#endif /* BYTE_ORDER */ +#include +#define int32 int32_t +#endif +#ifdef __linux__ + +#include + +#if !defined(__BYTE_ORDER) || !defined(__LITTLE_ENDIAN) +#error No byte order defined +#endif + +#if __BYTE_ORDER == __LITTLE_ENDIAN +#define HIOFFSET 1 +#define LOWOFFSET 0 +#else +#define HIOFFSET 0 /* word offset to find MSB */ +#define LOWOFFSET 1 /* word offset to find LSB */ +#endif /* __BYTE_ORDER */ + +#include +#define int32 int32_t + +#else +#ifdef __APPLE__ +#define HIOFFSET 0 /* word offset to find MSB */ +#define LOWOFFSET 1 /* word offset to find LSB */ +#define int32 int /* a data type that has 32 bits */ + +#endif /* __APPLE__ */ +#endif /* __linux__ */ +#endif /* MSW */ +#endif /* SGI */ + +union tabfudge +{ + double tf_d; + int32 tf_i[2]; +}; + +#ifdef __i386__ +#define IEM_DENORMAL(f) ((((*(unsigned int*)&(f))&0x60000000)==0) || \ +(((*(unsigned int*)&(f))&0x60000000)==0x60000000)) +/* more stringent test: anything not between 1e-19 and 1e19 in absolute val */ +#else + +#define IEM_DENORMAL(f) 0 + +#endif + +#endif diff --git a/iem_t3_lib/src/makefile b/iem_t3_lib/src/makefile new file mode 100644 index 0000000..597ccdf --- /dev/null +++ b/iem_t3_lib/src/makefile @@ -0,0 +1,4 @@ +TARGET = iem_t3_lib + +include ../../Make.include + diff --git a/iem_t3_lib/src/makefile_linux b/iem_t3_lib/src/makefile_linux new file mode 100644 index 0000000..3705f69 --- /dev/null +++ b/iem_t3_lib/src/makefile_linux @@ -0,0 +1,51 @@ +current: all + +.SUFFIXES: .pd_linux + +INCLUDE = -I. -I/usr/local/src/pd/src + +LDFLAGS = -export-dynamic -shared +LIB = -ldl -lm -lpthread + +#select either the DBG and OPT compiler flags below: + +CFLAGS = -DPD -DUNIX -W -Werror -Wno-unused \ + -Wno-parentheses -Wno-switch -O6 -funroll-loops -fomit-frame-pointer -fno-strict-aliasing \ + -DDL_OPEN + +SYSTEM = $(shell uname -m) + +# the sources + +SRC = t3_bpe.c \ + t3_delay.c \ + t3_line~.c \ + t3_metro.c \ + t3_sig~.c \ + t3_timer.c \ + iem_t3_lib.c + +TARGET = iem_t3_lib.pd_linux + + +OBJ = $(SRC:.c=.o) + +# +# ------------------ targets ------------------------------------ +# + +clean: + rm $(TARGET) + rm *.o + +all: $(OBJ) + @echo :: $(OBJ) + $(LD) $(LDFLAGS) -o $(TARGET) *.o $(LIB) + strip --strip-unneeded $(TARGET) + +$(OBJ) : %.o : %.c + $(CC) $(CFLAGS) $(INCLUDE) -c -o $*.o $*.c + + + + diff --git a/iem_t3_lib/src/makefile_win b/iem_t3_lib/src/makefile_win new file mode 100644 index 0000000..f8856d9 --- /dev/null +++ b/iem_t3_lib/src/makefile_win @@ -0,0 +1,36 @@ +all: ..\iem_t3_lib.dll + +VIS_CPP_PATH = "C:\Programme\Microsoft Visual Studio\Vc98" +PD_INST_PATH = "C:\Programme\pd-0.39-2" +PD_WIN_INCLUDE_PATH = /I. /I$(PD_INST_PATH)\src /I$(VIS_CPP_PATH)\include +PD_WIN_C_FLAGS = /nologo /W3 /WX /DMSW /DNT /DPD /DWIN32 /DWINDOWS /Ox -DPA_LITTLE_ENDIAN +PD_WIN_L_FLAGS = /nologo + +PD_WIN_LIB = /NODEFAULTLIB:libc /NODEFAULTLIB:oldnames /NODEFAULTLIB:kernel /NODEFAULTLIB:uuid \ + $(VIS_CPP_PATH)\lib\libc.lib \ + $(VIS_CPP_PATH)\lib\oldnames.lib \ + $(VIS_CPP_PATH)\lib\kernel32.lib \ + $(VIS_CPP_PATH)\lib\wsock32.lib \ + $(VIS_CPP_PATH)\lib\winmm.lib \ + $(PD_INST_PATH)\bin\pthreadVC.lib \ + $(PD_INST_PATH)\bin\pd.lib + +SRC = t3_bpe.c \ + t3_delay.c \ + t3_line~.c \ + t3_metro.c \ + t3_sig~.c \ + t3_timer.c \ + iem_t3_lib.c + +OBJ = $(SRC:.c=.obj) + +.c.obj: + cl $(PD_WIN_C_FLAGS) $(PD_WIN_INCLUDE_PATH) /c $*.c + +..\iem_t3_lib.dll: $(OBJ) + link $(PD_WIN_L_FLAGS) /dll /export:iem_t3_lib_setup \ + /out:..\iem_t3_lib.dll $(OBJ) $(PD_WIN_LIB) + +clean: + del *.obj diff --git a/iem_t3_lib/src/t3_bpe.c b/iem_t3_lib/src/t3_bpe.c new file mode 100644 index 0000000..dbd140a --- /dev/null +++ b/iem_t3_lib/src/t3_bpe.c @@ -0,0 +1,133 @@ +/* For information on usage and redistribution, and for a DISCLAIMER OF ALL +* WARRANTIES, see the file, "LICENSE.txt," in this distribution. + +iem_t3_lib written by Gerhard Eckel, Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006 */ + +#include "m_pd.h" +#include "iemlib.h" + +/* ------------------------ t3_bpe ---------------------------- */ +static t_class *t3_bpe_class; + +typedef struct _t3_bpe +{ + t_object x_obj; + t_atom x_at[2]; + t_clock *x_clock; + int x_maxnum; + int x_curnum; + int x_curindex; + t_atom *x_beg; + double x_t3_bang; + double x_ticks2ms; + int x_hit; + void *x_out_val; + void *x_out_time; + void *x_out_finished; +} t_t3_bpe; + +static void t3_bpe_stop(t_t3_bpe *x) +{ + clock_unset(x->x_clock); +} + +static void t3_bpe_tick(t_t3_bpe *x) +{ + t_atom *vec = x->x_beg; + t_float val; + double dticks, time; + int iticks; + + if(x->x_curindex >= x->x_curnum) + { + t3_bpe_stop(x); + outlet_float(x->x_out_finished, x->x_t3_bang); + } + else + { + x->x_hit = 0; + vec += x->x_curindex; + val = atom_getfloat(vec++); + time = (double)atom_getfloat(vec); + outlet_float(x->x_out_time, time); + x->x_at[1].a_w.w_float = val; + x->x_at[0].a_w.w_float = x->x_t3_bang; + outlet_list(x->x_obj.ob_outlet, &s_list, 2, x->x_at); + dticks = (time + x->x_t3_bang)/x->x_ticks2ms; + iticks = (int)dticks; + x->x_t3_bang = (dticks - (double)iticks)*x->x_ticks2ms; + if(!x->x_hit) + clock_delay(x->x_clock, (double)iticks*x->x_ticks2ms); + x->x_curindex += 2; + } +} + +static void t3_bpe_float(t_t3_bpe *x, t_floatarg f) +{ + double dticks; + int iticks; + + if(x->x_curnum) + { + x->x_curindex = 0; + dticks = (double)f/x->x_ticks2ms; + iticks = (int)dticks; + x->x_t3_bang = (dticks - (double)iticks)*x->x_ticks2ms; + clock_delay(x->x_clock, (double)iticks*x->x_ticks2ms); + x->x_hit = 1; + } +} + +static void t3_bpe_list(t_t3_bpe *x, t_symbol *s, int ac, t_atom *av) +{ + int n = ac & 0xfffffffe, i; + t_atom *vec = x->x_beg; + if(n > x->x_maxnum) + { + freebytes(x->x_beg, x->x_maxnum*sizeof(t_atom)); + x->x_maxnum = 2 + n; + x->x_beg = (t_atom *)getbytes(x->x_maxnum*sizeof(t_atom)); + vec = x->x_beg; + } + x->x_curnum = n; + for(i=0; ix_beg, x->x_maxnum*sizeof(t_atom)); + clock_free(x->x_clock); +} + +static void *t3_bpe_new(void) +{ + t_t3_bpe *x = (t_t3_bpe *)pd_new(t3_bpe_class); + + x->x_t3_bang = 0.0; + x->x_ticks2ms = 1000.0*(double)sys_getblksize()/(double)sys_getsr(); + x->x_curindex = 0; + x->x_maxnum = 20; + x->x_curnum = 0; + x->x_hit = 0; + x->x_beg = (t_atom *)getbytes(x->x_maxnum*sizeof(t_atom)); + x->x_clock = clock_new(x, (t_method)t3_bpe_tick); + outlet_new(&x->x_obj, &s_list); + x->x_out_time = outlet_new(&x->x_obj, &s_float); + x->x_out_finished = outlet_new(&x->x_obj, &s_float); + x->x_at[0].a_type = A_FLOAT; + x->x_at[1].a_type = A_FLOAT; + return (x); +} + +void t3_bpe_setup(void) +{ + t3_bpe_class = class_new(gensym("t3_bpe"), (t_newmethod)t3_bpe_new, + (t_method)t3_bpe_free, sizeof(t_t3_bpe), 0, 0); + class_addmethod(t3_bpe_class, (t_method)t3_bpe_stop, gensym("stop"), 0); + class_addfloat(t3_bpe_class, (t_method)t3_bpe_float); + class_addlist(t3_bpe_class, (t_method)t3_bpe_list); +// class_sethelpsymbol(t3_bpe_class, gensym("iemhelp/help-t3_bpe")); +} diff --git a/iem_t3_lib/src/t3_delay.c b/iem_t3_lib/src/t3_delay.c new file mode 100644 index 0000000..b468f74 --- /dev/null +++ b/iem_t3_lib/src/t3_delay.c @@ -0,0 +1,88 @@ +/* For information on usage and redistribution, and for a DISCLAIMER OF ALL +* WARRANTIES, see the file, "LICENSE.txt," in this distribution. + +iem_t3_lib written by Gerhard Eckel, Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006 */ + +#include "m_pd.h" +#include "iemlib.h" + +/* ------------------------ t3_delay ---------------------------- */ +static t_class *t3_delay_class; + +typedef struct _t3_delay +{ + t_object x_obj; + t_clock *x_clock; + double x_deltime; + double x_ticks2ms; + double x_t3_bang; +} t_t3_delay; + +static void t3_delay_tick(t_t3_delay *x) +{ + outlet_float(x->x_obj.ob_outlet, x->x_t3_bang); +} + +static void t3_delay_stop(t_t3_delay *x) +{ + clock_unset(x->x_clock); +} + +static void t3_delay_float(t_t3_delay *x, t_floatarg t3_bang) +{ + double dticks; + int iticks; + + if(t3_bang < 0) + t3_bang = 0; + dticks = (x->x_deltime + (double)t3_bang)/x->x_ticks2ms; + iticks = (int)dticks; + x->x_t3_bang = (dticks - (double)iticks)*x->x_ticks2ms; + clock_delay(x->x_clock, (double)iticks*x->x_ticks2ms); +} + +static void t3_delay_ft1(t_t3_delay *x, t_floatarg f) +{ + if(f < 0) + f = 0; + x->x_deltime = f; +} + +static void t3_delay_list(t_t3_delay *x, t_symbol *s, int ac, t_atom *av) +{ + if((ac == 2)&&IS_A_FLOAT(av,0)&&IS_A_FLOAT(av,1)) + { + t3_delay_ft1(x, atom_getfloatarg(1, ac, av)); + t3_delay_float(x, atom_getfloatarg(0, ac, av)); + } +} + +static void t3_delay_free(t_t3_delay *x) +{ + clock_free(x->x_clock); +} + +static void *t3_delay_new(t_floatarg f) +{ + t_t3_delay *x = (t_t3_delay *)pd_new(t3_delay_class); + + x->x_ticks2ms = 1000.0*(double)sys_getblksize()/(double)sys_getsr(); + t3_delay_ft1(x, f); + x->x_clock = clock_new(x, (t_method)t3_delay_tick); + outlet_new(&x->x_obj, &s_float); + inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym("ft1")); + return (x); +} + +void t3_delay_setup(void) +{ + t3_delay_class = class_new(gensym("t3_delay"), (t_newmethod)t3_delay_new, + (t_method)t3_delay_free, sizeof(t_t3_delay), 0, A_DEFFLOAT, 0); + class_addcreator((t_newmethod)t3_delay_new, gensym("t3_del"), A_DEFFLOAT, 0); + class_addmethod(t3_delay_class, (t_method)t3_delay_stop, gensym("stop"), 0); + class_addmethod(t3_delay_class, (t_method)t3_delay_ft1, + gensym("ft1"), A_FLOAT, 0); + class_addfloat(t3_delay_class, (t_method)t3_delay_float); + class_addlist(t3_delay_class, (t_method)t3_delay_list); +// class_sethelpsymbol(t3_delay_class, gensym("iemhelp/help-t3_delay")); +} diff --git a/iem_t3_lib/src/t3_line~.c b/iem_t3_lib/src/t3_line~.c new file mode 100644 index 0000000..8d386f0 --- /dev/null +++ b/iem_t3_lib/src/t3_line~.c @@ -0,0 +1,272 @@ +/* For information on usage and redistribution, and for a DISCLAIMER OF ALL +* WARRANTIES, see the file, "LICENSE.txt," in this distribution. + +iem_t3_lib written by Gerhard Eckel, Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006 */ + + +#include "m_pd.h" +#include "iemlib.h" + +/* -------------------------- t3_line~ ------------------------------ */ +static t_class *t3_line_tilde_class; + +typedef struct _t3_line_tilde +{ + t_object x_obj; + t_clock *x_clock; + t_float *x_beg; + double x_cur_val; + double x_dst_val; + double x_inlet_val; + double x_inc64; + double x_inc; + double x_ms2samps; + double x_ticks2ms; + double x_inlet_time; + double x_dst_time; + int x_cur_samps; + int x_dur_samps; + int x_n; + int x_t3_bang_samps; + int x_transient; +} t_t3_line_tilde; + +static void t3_line_tilde_nontransient(t_float *vec, t_t3_line_tilde *x, int n) +{ + int cur_samps = x->x_cur_samps, i; + double inc = x->x_inc; + double cur_val = x->x_cur_val; + + if(cur_samps) + { + if(cur_samps > n) + { + x->x_cur_samps -= n; + while(n--) + { + cur_val += inc; + *vec++ = (t_float)cur_val; + } + x->x_cur_val += x->x_inc64; + } + else if(cur_samps == n) + { + x->x_cur_samps = 0; + while(n--) + { + cur_val += inc; + *vec++ = (t_float)cur_val; + } + x->x_cur_val = x->x_dst_val; + } + else + { + for(i=0; ix_cur_val = cur_val = x->x_dst_val; + for(i=cur_samps; ix_cur_samps = 0; + } + } + else + { + while(n--) + *vec++ = (t_float)cur_val; + } +} + +static t_int *t3_line_tilde_perform(t_int *w) +{ + t_float *out = (t_float *)(w[1]); + t_t3_line_tilde *x = (t_t3_line_tilde *)(w[2]); + int n = (int)(w[3]); + + if(x->x_transient) + { + t_float *trans = x->x_beg; + + while(n--) + *out++ = *trans++; + x->x_transient = 0; + } + else + t3_line_tilde_nontransient(out, x, n); + return(w+4); +} + +static void t3_line_tilde_tick(t_t3_line_tilde *x) +{ + t_float *trans = x->x_beg; + int n = x->x_n, t3_bang_samps, cur_samps, i; + double inc, cur_val; + + if(!x->x_transient) + t3_line_tilde_nontransient(trans, x, n); + t3_bang_samps = x->x_t3_bang_samps; + x->x_dst_val = x->x_inlet_val; + if(x->x_inlet_time <= 0.0) + { + x->x_inlet_time = 0.0; + x->x_dst_time = 0.0; + x->x_dur_samps = 0; + x->x_cur_samps = 0; + cur_val = x->x_cur_val = x->x_dst_val; + for(i=t3_bang_samps; ix_dst_time = x->x_inlet_time; + x->x_inlet_time = 0.0; + cur_samps = (int)(x->x_dst_time * x->x_ms2samps); + if(!cur_samps) + cur_samps = 1; + x->x_dur_samps = cur_samps; + x->x_cur_samps = cur_samps; + cur_val = x->x_cur_val = (double)trans[t3_bang_samps]; + inc = x->x_inc = (x->x_dst_val - cur_val)/(double)cur_samps; + x->x_inc64 = (double)x->x_n * inc; + diff = n - t3_bang_samps; + if(cur_samps > diff) + { + for(i=t3_bang_samps; ix_cur_val += (double)diff * inc; + x->x_cur_samps -= diff; + } + else if(cur_samps == diff) + { + for(i=t3_bang_samps; ix_cur_val = x->x_dst_val; + x->x_cur_samps = 0; + } + else + { + end = t3_bang_samps + cur_samps; + for(i=t3_bang_samps; ix_cur_val = x->x_dst_val; + x->x_cur_samps = 0; + for(i=end; ix_transient = 1; +} + +static void t3_line_tilde_list(t_t3_line_tilde *x, t_symbol *s, int ac, t_atom *av) +{ + if((ac >= 2)&&IS_A_FLOAT(av,0)&&IS_A_FLOAT(av,1)) + { + int t3_bang_samps, ticks; + double time; + + x->x_inlet_val = (double)atom_getfloatarg(1, ac, av); + t3_bang_samps = (int)((t_float)atom_getfloatarg(0, ac, av)*x->x_ms2samps); + if(t3_bang_samps < 0) + t3_bang_samps = 0; + ticks = t3_bang_samps / x->x_n; + x->x_t3_bang_samps = t3_bang_samps - x->x_n * ticks; + if((ac >= 3)&&IS_A_FLOAT(av,2)) + { + time = (double)atom_getfloatarg(2, ac, av); + if(time < 0.0) + time = 0.0; + x->x_inlet_time = time; + } + if(ticks < 1) + t3_line_tilde_tick(x); + else + clock_delay(x->x_clock, (double)ticks * x->x_ticks2ms); + } +} + +static void t3_line_tilde_ft1(t_t3_line_tilde *x, t_float time) +{ + if(time < 0.0) + time = 0.0; + x->x_inlet_time = (double)time; +} + +static void t3_line_tilde_stop(t_t3_line_tilde *x) +{ + clock_unset(x->x_clock); + x->x_cur_samps = x->x_dur_samps = x->x_transient = 0; + x->x_inc = x->x_inc64 = x->x_inlet_time = x->x_dst_time = 0.0; +} + +static void t3_line_tilde_dsp(t_t3_line_tilde *x, t_signal **sp) +{ + int i; + t_float val, *trans; + + if(sp[0]->s_n > x->x_n) + { + freebytes(x->x_beg, x->x_n*sizeof(t_float)); + x->x_n = (int)sp[0]->s_n; + x->x_beg = (t_float *)getbytes(x->x_n*sizeof(t_float)); + } + else + x->x_n = (int)sp[0]->s_n; + i = x->x_n; + val = x->x_cur_val; + trans = x->x_beg; + while(i--) + *trans++ = val; + x->x_ms2samps = 0.001*(double)sp[0]->s_sr; + x->x_ticks2ms = (double)x->x_n / x->x_ms2samps; + dsp_add(t3_line_tilde_perform, 3, sp[0]->s_vec, x, sp[0]->s_n); +} + +static void t3_line_tilde_free(t_t3_line_tilde *x) +{ + if(x->x_beg) + freebytes(x->x_beg, x->x_n*sizeof(t_float)); + clock_free(x->x_clock); +} + +static void *t3_line_tilde_new(t_floatarg init_val) +{ + t_t3_line_tilde *x = (t_t3_line_tilde *)pd_new(t3_line_tilde_class); + int i; + + x->x_n = (int)sys_getblksize(); + x->x_beg = (t_float *)getbytes(x->x_n*sizeof(t_float)); + x->x_inlet_val = x->x_cur_val = x->x_dst_val = init_val; + x->x_t3_bang_samps = x->x_cur_samps = x->x_dur_samps = x->x_transient = 0; + x->x_inlet_time = x->x_dst_time = 0.0; + x->x_inc64 = x->x_inc = 0.0; + x->x_ms2samps = 0.001 * (double)sys_getsr(); + x->x_ticks2ms = (double)x->x_n / x->x_ms2samps; + x->x_clock = clock_new(x, (t_method)t3_line_tilde_tick); + outlet_new(&x->x_obj, &s_signal); + inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym("ft1")); + return (x); +} + +void t3_line_tilde_setup(void) +{ + t3_line_tilde_class = class_new(gensym("t3_line~"), (t_newmethod)t3_line_tilde_new, + (t_method)t3_line_tilde_free, sizeof(t_t3_line_tilde), 0, A_DEFFLOAT, 0); + class_addmethod(t3_line_tilde_class, (t_method)t3_line_tilde_dsp, gensym("dsp"), 0); + class_addmethod(t3_line_tilde_class, (t_method)t3_line_tilde_stop, gensym("stop"), 0); + class_addmethod(t3_line_tilde_class, (t_method)t3_line_tilde_ft1, gensym("ft1"), A_FLOAT, 0); + class_addlist(t3_line_tilde_class, (t_method)t3_line_tilde_list); +// class_sethelpsymbol(t3_line_tilde_class, gensym("iemhelp/help-t3_line~")); +} diff --git a/iem_t3_lib/src/t3_metro.c b/iem_t3_lib/src/t3_metro.c new file mode 100644 index 0000000..003d9ef --- /dev/null +++ b/iem_t3_lib/src/t3_metro.c @@ -0,0 +1,113 @@ +/* For information on usage and redistribution, and for a DISCLAIMER OF ALL +* WARRANTIES, see the file, "LICENSE.txt," in this distribution. + +iem_t3_lib written by Gerhard Eckel, Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006 */ + + +#include "m_pd.h" +#include "iemlib.h" + +/* ------------------------ t3_metro ---------------------------- */ +static t_class *t3_metro_class; + +typedef struct _t3_metro +{ + t_object x_obj; + t_clock *x_clock; + double x_metrotime; + double x_ticks2ms; + double x_t3_bang; + int x_hit; + void *x_out_next; +} t_t3_metro; + +static void t3_metro_stop(t_t3_metro *x) +{ + clock_unset(x->x_clock); +} + +static void t3_metro_tick(t_t3_metro *x) +{ + double dticks; + int iticks; + + x->x_hit = 0; + outlet_float(x->x_out_next, x->x_metrotime); + outlet_float(x->x_obj.ob_outlet, x->x_t3_bang); + dticks = (x->x_metrotime + x->x_t3_bang)/x->x_ticks2ms; + iticks = (int)dticks; + x->x_t3_bang = (dticks - (double)iticks)*x->x_ticks2ms; + if(!x->x_hit) + clock_delay(x->x_clock, (double)iticks*x->x_ticks2ms); +} + +static void t3_metro_float(t_t3_metro *x, t_floatarg t3_bang) +{ + double dticks; + int iticks; + + if(t3_bang < 0) + t3_bang = 0; + dticks = (double)t3_bang/x->x_ticks2ms; + iticks = (int)dticks; + x->x_t3_bang = (dticks - (double)iticks)*x->x_ticks2ms; + clock_delay(x->x_clock, (double)iticks*x->x_ticks2ms); + x->x_hit = 1; +} + +static void t3_metro_start(t_t3_metro *x, t_floatarg f) +{ + t3_metro_float(x, f); + x->x_hit = 1; +} + +static void t3_metro_ft1(t_t3_metro *x, t_floatarg f) +{ + if(f < 0.01) f = 0.01; + x->x_metrotime = (double)f; +} + +static void t3_metro_list(t_t3_metro *x, t_symbol *s, int ac, t_atom *av) +{ + if((ac == 2)&&IS_A_FLOAT(av,0)&&IS_A_FLOAT(av,1)) + { + t3_metro_ft1(x, atom_getfloatarg(1, ac, av)); + t3_metro_float(x, atom_getfloatarg(0, ac, av)); + } +} + +static void t3_metro_free(t_t3_metro *x) +{ + clock_free(x->x_clock); +} + +static void *t3_metro_new(t_symbol *s, int ac, t_atom *av) +{ + t_t3_metro *x = (t_t3_metro *)pd_new(t3_metro_class); + + x->x_metrotime = 10.0; + x->x_t3_bang = 0.0; + x->x_hit = 0; + if((ac == 1)&&IS_A_FLOAT(av,0)) + { + t3_metro_ft1(x, atom_getfloatarg(0, ac, av)); + } + x->x_ticks2ms = 1000.0*(double)sys_getblksize()/(double)sys_getsr(); + x->x_clock = clock_new(x, (t_method)t3_metro_tick); + outlet_new(&x->x_obj, &s_float); + x->x_out_next = outlet_new(&x->x_obj, &s_float); + inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym("ft1")); + return (x); +} + +void t3_metro_setup(void) +{ + t3_metro_class = class_new(gensym("t3_metro"), (t_newmethod)t3_metro_new, + (t_method)t3_metro_free, sizeof(t_t3_metro), 0, A_GIMME, 0); + class_addmethod(t3_metro_class, (t_method)t3_metro_stop, gensym("stop"), 0); + class_addmethod(t3_metro_class, (t_method)t3_metro_start, gensym("start"), A_FLOAT, 0); + class_addmethod(t3_metro_class, (t_method)t3_metro_ft1, gensym("ft1"), A_FLOAT, 0); + class_addfloat(t3_metro_class, (t_method)t3_metro_float); + class_addlist(t3_metro_class, (t_method)t3_metro_list); +// class_sethelpsymbol(t3_metro_class, gensym("iemhelp/help-t3_metro")); +} diff --git a/iem_t3_lib/src/t3_sig~.c b/iem_t3_lib/src/t3_sig~.c new file mode 100644 index 0000000..c2f8eea --- /dev/null +++ b/iem_t3_lib/src/t3_sig~.c @@ -0,0 +1,192 @@ +/* For information on usage and redistribution, and for a DISCLAIMER OF ALL +* WARRANTIES, see the file, "LICENSE.txt," in this distribution. + +iem_t3_lib written by Gerhard Eckel, Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006 */ + +#include "m_pd.h" +#include "iemlib.h" + +/* -------------------------- t3_sig_tilde~ ------------------------------ */ +static t_class *t3_sig_tilde_class; + +typedef struct _t3_sig_tilde +{ + t_object x_obj; + t_clock *x_clock; + t_float x_old_val; + t_float x_new_val; + t_float *x_beg; + int x_n; + int x_t3_bang_samps; + int x_transient; + t_float x_ms2samps; + t_float x_ticks2ms; +} t_t3_sig_tilde; + +static void t3_sig_tilde_tick(t_t3_sig_tilde *x) +{ + t_float *trans = x->x_beg, val; + int n = x->x_n, t3_bang_samps, i; + + t3_bang_samps = x->x_t3_bang_samps; + if(!x->x_transient) + { + val = x->x_old_val; + for(i=0; ix_transient = 1; + } + val = x->x_old_val = x->x_new_val; + for(i=t3_bang_samps; ix_clock); + x->x_new_val = x->x_old_val; +} + +static void t3_sig_tilde_list(t_t3_sig_tilde *x, t_symbol *s, int ac, t_atom *av) +{ + if((ac == 2)&&IS_A_FLOAT(av,0)&&IS_A_FLOAT(av,1)) + { + int n = x->x_n, t3_bang_samps, ticks; + + t3_bang_samps = (int)((t_float)atom_getfloatarg(0, ac, av)*x->x_ms2samps); + x->x_new_val = (t_float)atom_getfloatarg(1, ac, av); + if(t3_bang_samps < 0) + t3_bang_samps = 0; + ticks = t3_bang_samps / n; + x->x_t3_bang_samps = t3_bang_samps - n*ticks; + if(ticks < 1) + t3_sig_tilde_tick(x); + else + clock_delay(x->x_clock, (double)ticks * (double)x->x_ticks2ms); + } +} + +static t_int *t3_sig_tilde_perform(t_int *w) +{ + t_float *out = (t_float *)(w[1]); + t_t3_sig_tilde *x = (t_t3_sig_tilde *)(w[2]); + int n = (int)(w[3]); + + if(x->x_transient) + { + t_float *trans = x->x_beg; + + while(n--) + *out++ = *trans++; + x->x_transient = 0; + } + else + { + t_float val = x->x_new_val; + + while(n--) + *out++ = val; + } + return (w+4); +} + +static t_int *t3_sig_tilde_perf8(t_int *w) +{ + t_float *out = (t_float *)(w[1]); + t_t3_sig_tilde *x = (t_t3_sig_tilde *)(w[2]); + int n = (int)(w[3]), i; + + if(x->x_transient) + { + t_float *trans = x->x_beg; + + for(i=0; ix_transient = 0; + } + else + { + t_float val = x->x_new_val; + + for(i=0; is_n > x->x_n) + { + freebytes(x->x_beg, x->x_n*sizeof(t_float)); + x->x_n = sp[0]->s_n; + x->x_beg = (t_float *)getbytes(x->x_n*sizeof(t_float)); + } + else + x->x_n = sp[0]->s_n; + x->x_ms2samps = 0.001*(t_float)sp[0]->s_sr; + x->x_ticks2ms = (t_float)x->x_n / x->x_ms2samps; + i = x->x_n; + val = x->x_new_val; + trans = x->x_beg; + while(i--) + *trans++ = val; + + if((sp[0]->s_n)&7) + dsp_add(t3_sig_tilde_perform, 3, sp[0]->s_vec, x, sp[0]->s_n); + else + dsp_add(t3_sig_tilde_perf8, 3, sp[0]->s_vec, x, sp[0]->s_n); +} + +static void t3_sig_tilde_free(t_t3_sig_tilde *x) +{ + if(x->x_beg) + freebytes(x->x_beg, x->x_n*sizeof(t_float)); + clock_free(x->x_clock); +} + +static void *t3_sig_tilde_new(t_floatarg init_val) +{ + t_t3_sig_tilde *x = (t_t3_sig_tilde *)pd_new(t3_sig_tilde_class); + + x->x_new_val = x->x_old_val = init_val; + x->x_n = (int)sys_getblksize(); + x->x_beg = (t_float *)getbytes(x->x_n*sizeof(t_float)); + x->x_t3_bang_samps = x->x_transient = 0; + x->x_ms2samps = 0.001 * (t_float)sys_getsr(); + x->x_ticks2ms = (t_float)x->x_n / x->x_ms2samps; + x->x_clock = clock_new(x, (t_method)t3_sig_tilde_tick); + outlet_new(&x->x_obj, &s_signal); + return (x); +} + +void t3_sig_tilde_setup(void) +{ + t3_sig_tilde_class = class_new(gensym("t3_sig~"), (t_newmethod)t3_sig_tilde_new, + (t_method)t3_sig_tilde_free, sizeof(t_t3_sig_tilde), 0, A_DEFFLOAT, 0); + class_addmethod(t3_sig_tilde_class, (t_method)t3_sig_tilde_dsp, gensym("dsp"), 0); + class_addmethod(t3_sig_tilde_class, (t_method)t3_sig_tilde_stop, gensym("stop"), 0); + class_addlist(t3_sig_tilde_class, (t_method)t3_sig_tilde_list); +// class_sethelpsymbol(t3_sig_tilde_class, gensym("iemhelp/help-t3_sig~")); +} diff --git a/iem_t3_lib/src/t3_timer.c b/iem_t3_lib/src/t3_timer.c new file mode 100644 index 0000000..c9e9be6 --- /dev/null +++ b/iem_t3_lib/src/t3_timer.c @@ -0,0 +1,48 @@ +/* For information on usage and redistribution, and for a DISCLAIMER OF ALL +* WARRANTIES, see the file, "LICENSE.txt," in this distribution. + +iem_t3_lib written by Gerhard Eckel, Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006 */ + + +#include "m_pd.h" +#include "iemlib.h" + +/* -------------------------- t3_timer ------------------------------ */ +static t_class *t3_timer_class; + +typedef struct _t3_timer +{ + t_object x_obj; + double x_settime; + double x_t3_off; +} t_t3_timer; + +static void t3_timer_float(t_t3_timer *x, t_floatarg t3_bang) +{ + x->x_settime = (double)clock_getsystime(); + x->x_t3_off = (double)t3_bang; +} + +static void t3_timer_ft1(t_t3_timer *x, t_floatarg t3_bang) +{ + outlet_float(x->x_obj.ob_outlet, clock_gettimesince(x->x_settime) + + (double)t3_bang - x->x_t3_off); +} + +static void *t3_timer_new(void) +{ + t_t3_timer *x = (t_t3_timer *)pd_new(t3_timer_class); + t3_timer_float(x, 0.0f); + outlet_new(&x->x_obj, &s_float); + inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1")); + return (x); +} + +void t3_timer_setup(void) +{ + t3_timer_class = class_new(gensym("t3_timer"), (t_newmethod)t3_timer_new, 0, + sizeof(t_t3_timer), 0, 0); + class_addfloat(t3_timer_class, t3_timer_float); + class_addmethod(t3_timer_class, (t_method)t3_timer_ft1, gensym("ft1"), A_FLOAT, 0); +// class_sethelpsymbol(t3_timer_class, gensym("iemhelp/help-t3_timer")); +} diff --git a/iem_t3_lib/t3_bpe-help.pd b/iem_t3_lib/t3_bpe-help.pd new file mode 100644 index 0000000..80596de --- /dev/null +++ b/iem_t3_lib/t3_bpe-help.pd @@ -0,0 +1,105 @@ +#N canvas 100 17 532 586 10; +#N canvas 0 0 450 300 graph1 0; +#X array array99 259 float 0; +#X coords 0 0 258 1 256 140 1; +#X restore 96 43 graph; +#X obj 68 458 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 -1 +-1; +#X msg 35 355 stop; +#X obj 68 527 tabwrite~ array99; +#X obj 7 433 loadbang; +#X obj 14 38 tgl 15 0 empty empty empty 20 8 0 10 -262144 -1 -1 0 1 +; +#X floatatom 14 105 5 0 0 0 - - -; +#X floatatom 30 83 3 0 0 0 - - -; +#X obj 14 60 dsp; +#X obj 91 381 t3_bpe; +#X obj 81 283 bng 25 250 50 0 empty empty empty 8 -8 0 10 -262144 -1 +-1; +#X obj 91 316 t b b; +#X obj 91 418 t3_line~ 0; +#X obj 91 349 f 0.04; +#X floatatom 128 265 5 0 0 0 - - -; +#X obj 128 287 / 44.1; +#X text 171 267 Samples; +#X obj 91 455 fade~ lin; +#X obj 147 363 pack 0 0 1 1.5 1 0.5 0 1.5; +#X text 184 250 pre-delay; +#X floatatom 256 264 5 0 0 0 - - -; +#X obj 256 286 / 44.1; +#X text 299 266 Samples; +#X text 312 249 attack; +#X floatatom 364 263 5 0 0 0 - - -; +#X obj 364 285 / 44.1; +#X text 407 265 Samples; +#X text 420 248 sustain; +#X floatatom 364 344 5 0 0 0 - - -; +#X obj 364 366 / 44.1; +#X text 407 346 Samples; +#X text 420 329 release; +#X obj 256 242 init 34; +#X obj 364 241 init 55; +#X obj 364 322 init 70; +#X obj 128 243 init 70; +#X text 12 10 t3_bpe; +#X text 105 9 time-tagged trigger break point envelope; +#X msg 239 421 set _lin; +#X msg 239 442 set _linsqrt; +#X msg 239 463 set _sqrt; +#X msg 239 483 set _sin; +#X msg 240 504 set _sinhann; +#X msg 240 526 set _hann; +#X msg 381 70 \; array99 resize 259 \; array99 bounds 0 0 258 1 \; +array99 xticks 0 64 2 \; array99 yticks 0 0.1 5 \; array99 xlabel -0.08 +0 64 128 192 256 \; array99 ylabel -9.1 0 0.5 1; +#X obj 381 47 loadbang; +#X obj 91 477 *~ 0.8; +#X obj 91 499 +~ 0.1; +#X text 363 184 Samples; +#X floatatom 156 387 8 0 0 0 - - -; +#X text 213 388 t3_bang if finished; +#X text 405 528 IEM KUG; +#X text 389 516 musil; +#X text 419 516 @; +#X text 425 516 iem.at; +#X text 340 505 (c) Thomas Musil 2000 - 2005; +#X text 388 538 Graz \, Austria; +#X text 340 493 (c) Gerhard Eckel; +#X connect 1 0 3 0; +#X connect 2 0 9 0; +#X connect 4 0 1 0; +#X connect 5 0 8 0; +#X connect 8 0 6 0; +#X connect 8 1 7 0; +#X connect 9 0 12 0; +#X connect 9 1 12 1; +#X connect 9 2 49 0; +#X connect 10 0 1 0; +#X connect 10 0 11 0; +#X connect 11 0 13 0; +#X connect 11 1 18 0; +#X connect 12 0 17 0; +#X connect 13 0 9 0; +#X connect 14 0 15 0; +#X connect 15 0 13 1; +#X connect 17 0 46 0; +#X connect 18 0 9 0; +#X connect 20 0 21 0; +#X connect 21 0 18 3; +#X connect 24 0 25 0; +#X connect 25 0 18 5; +#X connect 28 0 29 0; +#X connect 29 0 18 7; +#X connect 32 0 20 0; +#X connect 33 0 24 0; +#X connect 34 0 28 0; +#X connect 35 0 14 0; +#X connect 38 0 17 0; +#X connect 39 0 17 0; +#X connect 40 0 17 0; +#X connect 41 0 17 0; +#X connect 42 0 17 0; +#X connect 43 0 17 0; +#X connect 45 0 44 0; +#X connect 46 0 47 0; +#X connect 47 0 3 0; diff --git a/iem_t3_lib/t3_delay-help.pd b/iem_t3_lib/t3_delay-help.pd new file mode 100644 index 0000000..7e5b219 --- /dev/null +++ b/iem_t3_lib/t3_delay-help.pd @@ -0,0 +1,79 @@ +#N canvas 100 58 496 565 10; +#N canvas 0 0 450 300 graph1 0; +#X array array99 259 float 0; +#X coords 0 0 258 1 259 140 1; +#X restore 108 48 graph; +#X obj 95 238 bng 25 250 50 0 empty empty empty 8 -8 0 10 -262144 -1 +-1; +#X obj 243 478 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 +-1 -1; +#X obj 95 400 t3_del 0.5; +#X obj 28 454 t3_timer; +#X floatatom 28 502 5 0 0 0 - - -; +#X msg 154 455 \$1 0.9; +#X obj 95 303 f 0.04; +#X floatatom 132 241 5 0 0 0 - - -; +#X msg 95 455 \$1 0.1; +#X obj 133 486 t3_sig~ 0.1; +#X obj 132 263 / 44.1; +#X text 175 255 Samples; +#X floatatom 196 352 5 0 0 0 - - -; +#X obj 196 374 / 44.1; +#X text 237 362 Samples; +#X msg 43 327 stop; +#X obj 243 521 tabwrite~ array99; +#X obj 132 219 init 80; +#X obj 196 330 init 30; +#X obj 401 53 loadbang; +#X obj 14 38 tgl 15 0 empty empty empty 20 8 0 10 -262144 -1 -1 0 1 +; +#X floatatom 14 105 5 0 0 0 - - -; +#X floatatom 30 83 3 0 0 0 - - -; +#X obj 14 60 dsp; +#X obj 95 327 t3_del 0; +#X obj 28 478 * 44.1; +#X text 71 503 Samples; +#X text 12 10 t3_delay; +#X text 106 9 time-tagged trigger delay; +#X obj 95 355 t f f; +#X text 379 189 Samples; +#X msg 401 80 \; array99 resize 259 \; array99 bounds 0 0 258 1 \; +array99 xticks 0 64 2 \; array99 yticks 0 0.1 5 \; array99 xlabel -0.08 +0 64 128 192 256 \; array99 ylabel -9.1 0 0.5 1; +#X obj 243 429 loadbang; +#X text 172 240 pre_delay; +#X text 238 350 duration; +#X text 365 418 IEM KUG; +#X text 349 406 musil; +#X text 379 406 @; +#X text 385 406 iem.at; +#X text 300 395 (c) Thomas Musil 2000 - 2005; +#X text 348 428 Graz \, Austria; +#X text 300 383 (c) Gerhard Eckel; +#X connect 1 0 2 0; +#X connect 1 0 7 0; +#X connect 2 0 17 0; +#X connect 3 0 4 1; +#X connect 3 0 9 0; +#X connect 4 0 26 0; +#X connect 6 0 10 0; +#X connect 7 0 25 0; +#X connect 8 0 11 0; +#X connect 9 0 10 0; +#X connect 10 0 17 0; +#X connect 11 0 7 1; +#X connect 13 0 14 0; +#X connect 14 0 3 1; +#X connect 16 0 3 0; +#X connect 18 0 8 0; +#X connect 19 0 13 0; +#X connect 20 0 32 0; +#X connect 21 0 24 0; +#X connect 24 0 22 0; +#X connect 24 1 23 0; +#X connect 25 0 30 0; +#X connect 26 0 5 0; +#X connect 30 0 3 0; +#X connect 30 0 4 0; +#X connect 30 1 6 0; +#X connect 33 0 2 0; diff --git a/iem_t3_lib/t3_line~-help.pd b/iem_t3_lib/t3_line~-help.pd new file mode 100644 index 0000000..535a90c --- /dev/null +++ b/iem_t3_lib/t3_line~-help.pd @@ -0,0 +1,97 @@ +#N canvas 124 45 505 584 10; +#N canvas 0 0 450 300 graph1 0; +#X array array99 259 float 0; +#X coords 0 0 258 1 256 140 1; +#X restore 97 36 graph; +#X obj 64 239 bng 25 250 50 0 empty empty empty 8 -8 0 10 -262144 -1 +-1; +#X obj 243 478 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 +-1 -1; +#X obj 64 401 t3_del 0.5; +#X obj 64 304 f 0.04; +#X floatatom 101 242 5 0 0 0 - - -; +#X obj 101 264 / 44.1; +#X text 144 244 Samples; +#X floatatom 129 354 5 0 0 0 - - -; +#X obj 129 376 / 44.1; +#X text 172 354 Samples; +#X msg 12 328 stop; +#X obj 243 521 tabwrite~ array99; +#X obj 101 220 init 80; +#X obj 129 332 init 30; +#X obj 243 448 loadbang; +#X obj 14 38 tgl 15 0 empty empty empty 20 8 0 10 -262144 -1 -1 1 1 +; +#X floatatom 14 105 5 0 0 0 - - -; +#X floatatom 30 83 3 0 0 0 - - -; +#X obj 14 60 dsp; +#X obj 64 327 t3_del 0; +#X text 12 10 t3_delay; +#X text 106 9 time-tagged trigger delay; +#X obj 102 487 t3_line~ 0.1; +#X obj 64 353 t f f; +#X obj 17 455 pack 0 0.1 0.2; +#X obj 122 456 pack 0 0.9 0.2; +#X floatatom 233 255 5 0 0 0 - - -; +#X obj 233 277 / 44.1; +#X text 276 255 Samples; +#X floatatom 351 257 5 0 0 0 - - -; +#X obj 351 279 / 44.1; +#X text 394 257 Samples; +#X text 407 238 attack; +#X text 286 237 release; +#X obj 351 235 init 12; +#X text 183 334 sustain + attack; +#X obj 233 233 init 25; +#X text 155 223 pre-delay; +#X obj 314 365 t b f; +#X obj 319 391 - 0; +#X floatatom 319 416 5 0 0 0 - - -; +#X text 365 419 Samples; +#X text 365 396 sustain; +#X msg 386 62 \; array99 resize 259 \; array99 bounds 0 0 258 1 \; +array99 xticks 0 64 2 \; array99 yticks 0 0.1 5 \; array99 xlabel -0.08 +0 64 128 192 256 \; array99 ylabel -9.1 0 0.5 1; +#X obj 386 39 loadbang; +#X text 364 178 Samples; +#X text 375 478 IEM KUG; +#X text 359 466 musil; +#X text 389 466 @; +#X text 395 466 iem.at; +#X text 310 455 (c) Thomas Musil 2000 - 2005; +#X text 358 488 Graz \, Austria; +#X text 310 443 (c) Gerhard Eckel; +#X connect 1 0 2 0; +#X connect 1 0 4 0; +#X connect 2 0 12 0; +#X connect 3 0 25 0; +#X connect 4 0 20 0; +#X connect 5 0 6 0; +#X connect 6 0 4 1; +#X connect 8 0 9 0; +#X connect 8 0 40 0; +#X connect 9 0 3 1; +#X connect 11 0 3 0; +#X connect 13 0 5 0; +#X connect 14 0 8 0; +#X connect 15 0 2 0; +#X connect 16 0 19 0; +#X connect 19 0 17 0; +#X connect 19 1 18 0; +#X connect 20 0 24 0; +#X connect 23 0 12 0; +#X connect 24 0 3 0; +#X connect 24 1 26 0; +#X connect 25 0 23 0; +#X connect 26 0 23 0; +#X connect 27 0 28 0; +#X connect 28 0 25 2; +#X connect 30 0 31 0; +#X connect 30 0 39 0; +#X connect 31 0 26 2; +#X connect 35 0 30 0; +#X connect 37 0 27 0; +#X connect 39 0 40 0; +#X connect 39 1 40 1; +#X connect 40 0 41 0; +#X connect 45 0 44 0; diff --git a/iem_t3_lib/t3_metro-help.pd b/iem_t3_lib/t3_metro-help.pd new file mode 100644 index 0000000..e7f3d55 --- /dev/null +++ b/iem_t3_lib/t3_metro-help.pd @@ -0,0 +1,103 @@ +#N canvas 228 46 467 574 10; +#N canvas 0 0 450 300 graph1 0; +#X array array99 259 float 0; +#X coords 0 0 258 1 256 140 1; +#X restore 89 33 graph; +#X obj 91 427 t f b; +#X obj 91 475 pack 0 0; +#X obj 227 448 bng 15 250 50 0 empty empty empty 8 -8 0 10 -262144 +-1 -1; +#N canvas 161 0 158 259 toggle 0; +#X obj 38 25 inlet; +#X obj 38 178 outlet; +#X obj 38 53 f; +#X obj 38 79 == 0; +#X obj 38 130 * 0.8; +#X obj 38 152 + 0.1; +#X connect 0 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 2 1; +#X connect 3 0 4 0; +#X connect 4 0 5 0; +#X connect 5 0 1 0; +#X restore 121 452 pd toggle; +#X msg 91 331 start \$1; +#X msg 215 517 stop; +#X floatatom 128 234 5 0 0 0 - - -; +#X obj 128 258 / 44.1; +#X text 171 235 Samples; +#X floatatom 240 264 5 0 0 0 - - -; +#X obj 240 288 / 44.1; +#X text 283 264 Samples; +#X obj 91 283 f 0.04; +#X obj 91 234 bng 25 250 50 0 empty empty empty 8 -8 0 10 -262144 -1 +-1; +#X obj 227 473 tabwrite~ array99; +#X obj 91 499 t3_sig~ 0.1; +#X obj 128 208 init 30; +#X obj 227 422 loadbang; +#X obj 11 33 tgl 15 0 empty empty empty 20 8 0 10 -262144 -1 -1 1 1 +; +#X floatatom 11 100 5 0 0 0 - - -; +#X floatatom 27 78 3 0 0 0 - - -; +#X obj 11 55 dsp; +#X obj 91 307 t3_del 0; +#X obj 240 241 init 10; +#X text 8 7 t3_metro; +#X text 108 7 time-tagged trigger variable metronom; +#X obj 91 392 t3_metro 1.46; +#X obj 204 321 +; +#X obj 204 345 change -1; +#X obj 204 368 clip 0.01 1e+006; +#X obj 360 377 t b f; +#X obj 360 310 random 32000; +#X obj 360 332 - 16000; +#X obj 360 354 / 100000; +#X obj 215 496 del 9000; +#X obj 384 40 loadbang; +#X msg 384 67 \; array99 resize 259 \; array99 bounds 0 0 258 1 \; +array99 xticks 0 64 2 \; array99 yticks 0 0.1 5 \; array99 xlabel -0.08 +0 64 128 192 256 \; array99 ylabel -9.1 0 0.5 1; +#X text 356 176 Samples; +#X text 355 438 IEM KUG; +#X text 339 426 musil; +#X text 369 426 @; +#X text 375 426 iem.at; +#X text 290 415 (c) Thomas Musil 2000 - 2005; +#X text 338 448 Graz \, Austria; +#X text 290 403 (c) Gerhard Eckel; +#X connect 1 0 2 0; +#X connect 1 1 4 0; +#X connect 1 1 32 0; +#X connect 2 0 16 0; +#X connect 3 0 15 0; +#X connect 3 0 35 0; +#X connect 4 0 2 1; +#X connect 5 0 27 0; +#X connect 6 0 27 0; +#X connect 7 0 8 0; +#X connect 8 0 13 1; +#X connect 10 0 11 0; +#X connect 11 0 28 0; +#X connect 13 0 23 0; +#X connect 14 0 13 0; +#X connect 14 0 3 0; +#X connect 16 0 15 0; +#X connect 17 0 7 0; +#X connect 18 0 3 0; +#X connect 19 0 22 0; +#X connect 22 0 20 0; +#X connect 22 1 21 0; +#X connect 23 0 5 0; +#X connect 24 0 10 0; +#X connect 27 0 1 0; +#X connect 28 0 29 0; +#X connect 29 0 30 0; +#X connect 30 0 27 1; +#X connect 31 0 28 0; +#X connect 31 1 28 1; +#X connect 32 0 33 0; +#X connect 33 0 34 0; +#X connect 34 0 31 0; +#X connect 35 0 6 0; +#X connect 36 0 37 0; diff --git a/iem_t3_lib/t3_sig~-help.pd b/iem_t3_lib/t3_sig~-help.pd new file mode 100644 index 0000000..46d14ef --- /dev/null +++ b/iem_t3_lib/t3_sig~-help.pd @@ -0,0 +1,75 @@ +#N canvas 174 106 507 414 10; +#X floatatom 62 268 8 0 0 0 - - -; +#X obj 164 371 dac~; +#X obj 164 317 *~ 0.2; +#X obj 164 342 hp1~ 5; +#X floatatom 280 201 8 0 0 0 - - -; +#X obj 164 293 t3_sig~; +#X obj 215 226 t3_del 0.1; +#X msg 164 254 \$1 1; +#X obj 10 63 dsp; +#X floatatom 26 85 3 0 0 0 - - -; +#X floatatom 10 109 5 0 0 0 - - -; +#X obj 10 42 tgl 15 0 empty empty empty 20 8 0 10 -262144 -1 -1 0 1 +; +#X obj 164 182 t3_metro 5; +#X msg 140 115 start 0; +#X msg 176 139 stop; +#X obj 280 153 for++ 1 1000 5; +#X obj 280 177 / 200; +#X obj 280 7 loadbang; +#X obj 280 31 bng 15 250 50 0 empty empty empty 20 8 0 10 -262144 -1 +-1; +#X msg 215 254 \$1 -1; +#X obj 280 54 metro 10010; +#X obj 376 72 del 5005; +#X obj 376 97 t b b; +#X obj 280 94 t b b; +#X msg 292 120 1 1000 5; +#X msg 406 121 1000 1 5; +#X obj 62 245 t3_timer; +#X text 5 6 t3_sig~; +#X text 76 4 time-tagged trigger sig~; +#X msg 397 23 stop; +#X text 315 328 IEM KUG; +#X text 299 316 musil; +#X text 329 316 @; +#X text 335 316 iem.at; +#X text 250 305 (c) Thomas Musil 2000 - 2005; +#X text 298 338 Graz \, Austria; +#X text 250 293 (c) Gerhard Eckel; +#X connect 2 0 3 0; +#X connect 3 0 1 0; +#X connect 3 0 1 1; +#X connect 4 0 6 1; +#X connect 5 0 2 0; +#X connect 6 0 19 0; +#X connect 6 0 26 1; +#X connect 7 0 5 0; +#X connect 8 0 10 0; +#X connect 8 1 9 0; +#X connect 11 0 8 0; +#X connect 12 0 7 0; +#X connect 12 0 6 0; +#X connect 12 0 26 0; +#X connect 13 0 12 0; +#X connect 14 0 12 0; +#X connect 15 0 16 0; +#X connect 16 0 4 0; +#X connect 17 0 18 0; +#X connect 18 0 20 0; +#X connect 18 0 13 0; +#X connect 19 0 5 0; +#X connect 20 0 21 0; +#X connect 20 0 23 0; +#X connect 21 0 22 0; +#X connect 22 0 15 0; +#X connect 22 1 25 0; +#X connect 23 0 15 0; +#X connect 23 1 24 0; +#X connect 24 0 15 0; +#X connect 25 0 15 0; +#X connect 26 0 0 0; +#X connect 29 0 20 0; +#X connect 29 0 15 0; +#X connect 29 0 21 0; diff --git a/iem_t3_lib/t3_timer-help.pd b/iem_t3_lib/t3_timer-help.pd new file mode 100644 index 0000000..0f1595d --- /dev/null +++ b/iem_t3_lib/t3_timer-help.pd @@ -0,0 +1,27 @@ +#N canvas 231 195 316 292 10; +#X obj 73 119 t3_del 11.11; +#X msg 22 79 0.55; +#X obj 22 48 bng 25 250 50 0 empty empty empty 8 -8 0 10 -262144 -1 +-1; +#X obj 22 145 t3_timer; +#X floatatom 22 170 6 0 0 0 - - -; +#X text 88 22 measure time-difference; +#X text 87 37 between 2 t3_bang-events; +#X text 6 4 t3_timer; +#X floatatom 152 93 6 0 0 0 - - -; +#X text 203 93 ms; +#X text 72 170 ms; +#X text 84 5 time-tagged trigger timer; +#X text 125 248 IEM KUG; +#X text 109 236 musil; +#X text 139 236 @; +#X text 145 236 iem.at; +#X text 60 225 (c) Thomas Musil 2000 - 2005; +#X text 108 258 Graz \, Austria; +#X text 60 213 (c) Gerhard Eckel; +#X connect 0 0 3 1; +#X connect 1 0 0 0; +#X connect 1 0 3 0; +#X connect 2 0 1 0; +#X connect 3 0 4 0; +#X connect 8 0 0 1; -- cgit v1.2.1