[PD-cvs] externals/iemlib/iem_t3_lib/src iem_t3_lib.c, NONE, 1.1 iem_t3_lib.dsp, NONE, 1.1 iem_t3_lib.dsw, NONE, 1.1 iemlib.h, NONE, 1.1 makefile, NONE, 1.1 makefile_linux, NONE, 1.1 makefile_win, NONE, 1.1 t3_bpe.c, NONE, 1.1 t3_delay.c, NONE, 1.1 t3_line~.c, NONE, 1.1 t3_metro.c, NONE, 1.1 t3_sig~.c, NONE, 1.1 t3_timer.c, NONE, 1.1
musil
tmusil at users.sourceforge.net
Sat Dec 9 02:57:27 CET 2006
- Previous message: [PD-cvs] externals/iemlib/iem_t3_lib t3_bpe-help.pd, NONE, 1.1 t3_delay-help.pd, NONE, 1.1 t3_line~-help.pd, NONE, 1.1 t3_metro-help.pd, NONE, 1.1 t3_sig~-help.pd, NONE, 1.1 t3_timer-help.pd, NONE, 1.1
- Next message: [PD-cvs] externals/iemlib/iemlib1 FIR~-help.pd, NONE, 1.1 db2v-help.pd, NONE, 1.1 f2note-help.pd, NONE, 1.1 for++-help.pd, NONE, 1.1 gate-help.pd, NONE, 1.1 hml_shelf~-help.pd, NONE, 1.1 lp1.wav, NONE, 1.1 lp1_t~-help.pd, NONE, 1.1 lp2.wav, NONE, 1.1 lp3.wav, NONE, 1.1 para_bp2~-help.pd, NONE, 1.1 peakenv~-help.pd, NONE, 1.1 prvu~-help.pd, NONE, 1.1 pvu~-help.pd, NONE, 1.1 rvu~-help.pd, NONE, 1.1 sin_phase~-help.pd, NONE, 1.1 soundfile_info-help.pd, NONE, 1.1 split-help.pd, NONE, 1.1 v2db-help.pd, NONE, 1.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/pure-data/externals/iemlib/iem_t3_lib/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16686/iemlib/iem_t3_lib/src
Added Files:
iem_t3_lib.c iem_t3_lib.dsp iem_t3_lib.dsw iemlib.h makefile
makefile_linux makefile_win t3_bpe.c t3_delay.c t3_line~.c
t3_metro.c t3_sig~.c t3_timer.c
Log Message:
// class_sethelpsymbol();
changed help-*.pd to *-help.pd
chanded file structure to standard
1st step remove old
--- NEW FILE: t3_timer.c ---
/* 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"));
}
--- NEW FILE: iem_t3_lib.dsw ---
(This appears to be a binary file; contents omitted.)
--- NEW FILE: iem_t3_lib.dsp ---
# 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
--- NEW FILE: makefile_linux ---
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
--- NEW FILE: makefile ---
TARGET = iem_t3_lib
include ../../Make.include
--- NEW FILE: makefile_win ---
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
--- NEW FILE: t3_bpe.c ---
/* 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; i<n; i++)
{
*vec++ = *av++;
}
}
static void t3_bpe_free(t_t3_bpe *x)
{
freebytes(x->x_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"));
}
--- NEW FILE: t3_sig~.c ---
/* 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; i<t3_bang_samps; i++)
trans[i] = val;
x->x_transient = 1;
}
val = x->x_old_val = x->x_new_val;
for(i=t3_bang_samps; i<n; i++)
trans[i] = val;
}
static void t3_sig_tilde_stop(t_t3_sig_tilde *x)
{
clock_unset(x->x_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; i<n; i+=8, out+=8, trans+=8)
{
out[0] = trans[0];
out[1] = trans[1];
out[2] = trans[2];
out[3] = trans[3];
out[4] = trans[4];
out[5] = trans[5];
out[6] = trans[6];
out[7] = trans[7];
}
x->x_transient = 0;
}
else
{
t_float val = x->x_new_val;
for(i=0; i<n; i+=8, out+=8)
{
out[0] = val;
out[1] = val;
out[2] = val;
out[3] = val;
out[4] = val;
out[5] = val;
out[6] = val;
out[7] = val;
}
}
return (w+4);
}
static void t3_sig_tilde_dsp(t_t3_sig_tilde *x, t_signal **sp)
{
int i;
t_float *trans, val;
if(sp[0]->s_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~"));
}
--- NEW FILE: t3_line~.c ---
/* 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; i<cur_samps; i++)
{
cur_val += inc;
*vec++ = (t_float)cur_val;
}
x->x_cur_val = cur_val = x->x_dst_val;
for(i=cur_samps; i<n; i++)
*vec++ = (t_float)cur_val;
x->x_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; i<n; i++)
trans[i] = (t_float)cur_val;
}
else
{
int diff, end;
x->x_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; i<n; i++)
{
cur_val += inc;
trans[i] = (t_float)cur_val;
}
x->x_cur_val += (double)diff * inc;
x->x_cur_samps -= diff;
}
else if(cur_samps == diff)
{
for(i=t3_bang_samps; i<n; i++)
{
cur_val += inc;
trans[i] = (t_float)cur_val;
}
x->x_cur_val = x->x_dst_val;
x->x_cur_samps = 0;
}
else
{
end = t3_bang_samps + cur_samps;
for(i=t3_bang_samps; i<end; i++)
{
cur_val += inc;
trans[i] = (t_float)cur_val;
}
cur_val = x->x_cur_val = x->x_dst_val;
x->x_cur_samps = 0;
for(i=end; i<n; i++)
trans[i] = (t_float)cur_val;
}
}
x->x_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~"));
}
--- NEW FILE: iemlib.h ---
/* 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 <io.h>
#else
extern int sys_noloadbang;
//extern t_symbol *iemgui_key_sym;
#include <unistd.h>
#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 <machine/endian.h>
#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 <sys/types.h>
#define int32 int32_t
#endif
#ifdef __linux__
#include <endian.h>
#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 <sys/types.h>
#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
--- NEW FILE: iem_t3_lib.c ---
/* 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", '@');
}
--- NEW FILE: t3_delay.c ---
/* 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"));
}
--- NEW FILE: t3_metro.c ---
/* 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"));
}
- Previous message: [PD-cvs] externals/iemlib/iem_t3_lib t3_bpe-help.pd, NONE, 1.1 t3_delay-help.pd, NONE, 1.1 t3_line~-help.pd, NONE, 1.1 t3_metro-help.pd, NONE, 1.1 t3_sig~-help.pd, NONE, 1.1 t3_timer-help.pd, NONE, 1.1
- Next message: [PD-cvs] externals/iemlib/iemlib1 FIR~-help.pd, NONE, 1.1 db2v-help.pd, NONE, 1.1 f2note-help.pd, NONE, 1.1 for++-help.pd, NONE, 1.1 gate-help.pd, NONE, 1.1 hml_shelf~-help.pd, NONE, 1.1 lp1.wav, NONE, 1.1 lp1_t~-help.pd, NONE, 1.1 lp2.wav, NONE, 1.1 lp3.wav, NONE, 1.1 para_bp2~-help.pd, NONE, 1.1 peakenv~-help.pd, NONE, 1.1 prvu~-help.pd, NONE, 1.1 pvu~-help.pd, NONE, 1.1 rvu~-help.pd, NONE, 1.1 sin_phase~-help.pd, NONE, 1.1 soundfile_info-help.pd, NONE, 1.1 split-help.pd, NONE, 1.1 v2db-help.pd, NONE, 1.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Pd-cvs
mailing list