Commit 85379fed authored by Jonathan Wilkes's avatar Jonathan Wilkes
Browse files

ported: " *added experimental bugfix to the bp~ and hip~ bug reported

 by Gilberto"
from pd-l2ork: 50719c4c455291be3ac679486f7e4d72706bd9e4
parent 365f0014
......@@ -241,7 +241,7 @@ Everything else: (A [x] means we've fixed it)
[ ] port the bug fix from pd-l2ork git repo in commit
6084c8e5f86d1521edde3a899a6d5b5821aa27c6
"*fixed bug reported by Gilberto in..."
[ ] same for 50719c4c455291be3ac679486f7e4d72706bd9e4
[x] same for 50719c4c455291be3ac679486f7e4d72706bd9e4
[ ] same for a620228554d1662bacd0f2f8cfc65259049164ec
[ ] same for "*fixed spaces in old UI objects that were converted to \t..."
262447434c3548c53bc0b52e7f5bb5431b233311
......
......@@ -53,6 +53,37 @@ static void sighip_ft1(t_sighip *x, t_floatarg f)
}
static t_int *sighip_perform(t_int *w)
{
t_sample *in = (t_sample *)(w[1]);
t_sample *out = (t_sample *)(w[2]);
t_hipctl *c = (t_hipctl *)(w[3]);
int n = (t_int)(w[4]);
int i;
t_sample last = c->c_x;
t_sample coef = c->c_coef;
if (coef < 1)
{
t_sample normal = 0.5*(1+coef);
for (i = 0; i < n; i++)
{
t_sample new = *in++ + coef * last;
*out++ = normal * (new - last);
last = new;
}
if (PD_BIGORSMALL(last))
last = 0;
c->c_x = last;
}
else
{
for (i = 0; i < n; i++)
*out++ = *in++;
c->c_x = 0;
}
return (w+5);
}
static t_int *sighip_perform_old(t_int *w)
{
t_sample *in = (t_sample *)(w[1]);
t_sample *out = (t_sample *)(w[2]);
......@@ -86,10 +117,9 @@ static void sighip_dsp(t_sighip *x, t_signal **sp)
{
x->x_sr = sp[0]->s_sr;
sighip_ft1(x, x->x_hz);
dsp_add(sighip_perform, 4,
sp[0]->s_vec, sp[1]->s_vec,
x->x_ctl, sp[0]->s_n);
dsp_add((pd_compatibilitylevel > 43 ?
sighip_perform : sighip_perform_old),
4, sp[0]->s_vec, sp[1]->s_vec, x->x_ctl, sp[0]->s_n);
}
static void sighip_clear(t_sighip *x, t_floatarg q)
......@@ -102,8 +132,8 @@ void sighip_setup(void)
sighip_class = class_new(gensym("hip~"), (t_newmethod)sighip_new, 0,
sizeof(t_sighip), 0, A_DEFFLOAT, 0);
CLASS_MAINSIGNALIN(sighip_class, t_sighip, x_f);
class_addmethod(sighip_class, (t_method)sighip_dsp, gensym("dsp"),
A_CANT, 0);
class_addmethod(sighip_class, (t_method)sighip_dsp,
gensym("dsp"), A_CANT, 0);
class_addmethod(sighip_class, (t_method)sighip_ft1,
gensym("ft1"), A_FLOAT, 0);
class_addmethod(sighip_class, (t_method)sighip_clear, gensym("clear"), 0);
......@@ -193,8 +223,8 @@ void siglop_setup(void)
siglop_class = class_new(gensym("lop~"), (t_newmethod)siglop_new, 0,
sizeof(t_siglop), 0, A_DEFFLOAT, 0);
CLASS_MAINSIGNALIN(siglop_class, t_siglop, x_f);
class_addmethod(siglop_class, (t_method)siglop_dsp, gensym("dsp"),
A_CANT, 0);
class_addmethod(siglop_class, (t_method)siglop_dsp,
gensym("dsp"), A_CANT, 0);
class_addmethod(siglop_class, (t_method)siglop_ft1,
gensym("ft1"), A_FLOAT, 0);
class_addmethod(siglop_class, (t_method)siglop_clear, gensym("clear"), 0);
......@@ -328,8 +358,8 @@ void sigbp_setup(void)
sigbp_class = class_new(gensym("bp~"), (t_newmethod)sigbp_new, 0,
sizeof(t_sigbp), 0, A_DEFFLOAT, A_DEFFLOAT, 0);
CLASS_MAINSIGNALIN(sigbp_class, t_sigbp, x_f);
class_addmethod(sigbp_class, (t_method)sigbp_dsp, gensym("dsp"),
A_CANT, 0);
class_addmethod(sigbp_class, (t_method)sigbp_dsp,
gensym("dsp"), A_CANT, 0);
class_addmethod(sigbp_class, (t_method)sigbp_ft1,
gensym("ft1"), A_FLOAT, 0);
class_addmethod(sigbp_class, (t_method)sigbp_ft2,
......@@ -455,8 +485,8 @@ void sigbiquad_setup(void)
sigbiquad_class = class_new(gensym("biquad~"), (t_newmethod)sigbiquad_new,
0, sizeof(t_sigbiquad), 0, A_GIMME, 0);
CLASS_MAINSIGNALIN(sigbiquad_class, t_sigbiquad, x_f);
class_addmethod(sigbiquad_class, (t_method)sigbiquad_dsp, gensym("dsp"),
A_CANT, 0);
class_addmethod(sigbiquad_class, (t_method)sigbiquad_dsp,
gensym("dsp"), A_CANT, 0);
class_addlist(sigbiquad_class, sigbiquad_list);
class_addmethod(sigbiquad_class, (t_method)sigbiquad_set, gensym("set"),
A_GIMME, 0);
......@@ -497,7 +527,7 @@ static t_int *sigsamphold_perform(t_int *w)
int i;
t_sample lastin = x->x_lastin;
t_sample lastout = x->x_lastout;
for (i = 0; i < n; i++, *in1++)
for (i = 0; i < n; i++, in1++)
{
t_sample next = *in2++;
if (next < lastin) lastout = *in1;
......
......@@ -9,6 +9,7 @@ t_class *glob_pdobject;
static t_class *maxclass;
int sys_perf; /* true if we should query user on close and quit */
int pd_compatibilitylevel = 43; /* e.g., 43 for pd 0.43 compatibility */
/* These "glob" routines, which implement messages to Pd, are from all
over. Some others are prototyped in m_imp.h as well. */
......@@ -38,6 +39,12 @@ void glob_savepreferences(t_pd *dummy);
void alsa_resync( void);
static void glob_compatibility(t_pd *dummy, t_floatarg level)
{
int dspwas = canvas_suspend_dsp();
pd_compatibilitylevel = 0.5 + 100. * level;
canvas_resume_dsp(dspwas);
}
#ifdef MSW
void glob_audio(void *dummy, t_floatarg adc, t_floatarg dac);
......
......@@ -13,8 +13,9 @@ extern "C" {
#define PD_MAJOR_VERSION 0
#define PD_MINOR_VERSION 42
#define PD_BUGFIX_VERSION 7
#define PD_TEST_VERSION "20140903"
#define PD_TEST_VERSION "20150804"
#define PDL2ORK
extern int pd_compatibilitylevel; /* e.g., 43 for pd 0.43 compatibility */
/* old name for "MSW" flag -- we have to take it for the sake of many old
"nmakefiles" for externs, which will define NT and not MSW */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment