From b626f9ab578ebd9642162736eb977e0f75253b5e Mon Sep 17 00:00:00 2001 From: Miller Puckette <msp@ucsd.edu> Date: Thu, 25 Oct 2007 12:49:01 -0700 Subject: [PATCH] bug fixes --- doc/5.reference/help-intro.pd | 3 ++- extra/makefile | 2 +- src/configure.in | 1 - src/m_sched.c | 11 ++++++++--- src/notes.txt | 1 - src/s_audio.c | 21 +++++++++++++-------- src/s_audio_pa.c | 11 ++++++----- src/s_print.c | 4 ++-- 8 files changed, 32 insertions(+), 22 deletions(-) diff --git a/doc/5.reference/help-intro.pd b/doc/5.reference/help-intro.pd index 10ae3502f..23952ba86 100644 --- a/doc/5.reference/help-intro.pd +++ b/doc/5.reference/help-intro.pd @@ -243,7 +243,8 @@ to a note-on; #X obj 18 3558 rzero~; #X text 118 3558 - raw real-valued one-zero filter; #X obj 18 3588 rzero_rev~; -#X text 121 3588 - time-reversed; +#X obj 113 3588 rzero~; +#X text 166 3588 - time-reversed; #X obj 18 3618 cpole~; #X obj 77 3618 czero~; #X text 214 3618 - corresponding complex-valued filters; diff --git a/extra/makefile b/extra/makefile index 56e59bed8..bc913aca4 100644 --- a/extra/makefile +++ b/extra/makefile @@ -19,7 +19,7 @@ PDNTLIB = $(PDNTLDIR)\libc.lib \ .c.dll: cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c $*.c - link /dll /export:$(CSYM)_setup $*.obj $(PDNTLIB) + link /nologo /dll /export:$(CSYM)_setup $*.obj $(PDNTLIB) # ----------------------- IRIX 5.x ----------------------- diff --git a/src/configure.in b/src/configure.in index e328f6aac..b13379c79 100644 --- a/src/configure.in +++ b/src/configure.in @@ -251,7 +251,6 @@ dnl This should be fixed so Pd can use ALSA shared libraries where appropriate. LDFLAGS=$LDFLAGS" -lrt -ljack" fi - echo MORECFLAGS --------------- $MORECFLAGS OSNUMBER=0 fi diff --git a/src/m_sched.c b/src/m_sched.c index 035c0b271..549d34708 100644 --- a/src/m_sched.c +++ b/src/m_sched.c @@ -28,6 +28,8 @@ int sys_schedblocksize = DEFDACBLKSIZE; int sys_usecsincelastsleep(void); int sys_sleepgrain; +int sched_reopenmeplease = 0; /* request from s_audio for deferred reopen */ + typedef void (*t_clockmethod)(void *client); struct _clock @@ -342,10 +344,13 @@ void sched_set_using_audio(int flag) sched_referencerealtime = sys_getrealtime(); sched_referencelogicaltime = clock_getlogicaltime(); } - if (flag == SCHED_AUDIO_CALLBACK && sched_useaudio != SCHED_AUDIO_CALLBACK) + if (flag == SCHED_AUDIO_CALLBACK && + sched_useaudio != SCHED_AUDIO_CALLBACK) sys_quit = SYS_QUIT_RESTART; - if (flag != SCHED_AUDIO_CALLBACK && sched_useaudio == SCHED_AUDIO_CALLBACK) - post("sorry, can't turn off callbacks yet; restart Pd"); /* not right yet! */ + if (flag != SCHED_AUDIO_CALLBACK && + sched_useaudio == SCHED_AUDIO_CALLBACK) + post("sorry, can't turn off callbacks yet; restart Pd"); + /* not right yet! */ sys_time_per_dsp_tick = (TIMEUNITPERSEC) * ((double)sys_schedblocksize) / sys_dacsr; diff --git a/src/notes.txt b/src/notes.txt index 945eb7a26..cc7093925 100644 --- a/src/notes.txt +++ b/src/notes.txt @@ -17,7 +17,6 @@ turn on paMacCore_ChangeDeviceParameters for mac (pa_mac_core.h) Gnome: why don't windows pop up when clicked on? problems: -check real-time gaps in writesf~ fix declare to update current patch when changed objects on GOP don't erase if you edit the GOP while they're showing MSTACKSIZE limitation in m_binbuf.c diff --git a/src/s_audio.c b/src/s_audio.c index b00c0dd65..79d56dc94 100644 --- a/src/s_audio.c +++ b/src/s_audio.c @@ -39,7 +39,7 @@ int sys_outchannels; int sys_advance_samples; /* scheduler advance in samples */ int sys_blocksize = 0; /* audio I/O block size in sample frames */ int sys_audioapi = API_DEFAULT; - +int sys_audioapiopened = -1; /* save last API opened for later closing */ static int sys_meters; /* true if we're metering */ static float sys_inmax; /* max input amplitude */ static float sys_outmax; /* max output amplitude */ @@ -68,6 +68,7 @@ static int audio_advance; static int audio_callback; void sched_audio_callbackfn(void); +extern int sched_reopenmeplease; static int audio_isopen(void) { @@ -339,32 +340,33 @@ void sys_close_audio(void) if (!audio_isopen()) return; #ifdef USEAPI_PORTAUDIO - if (sys_audioapi == API_PORTAUDIO) + if (sys_audioapiopened == API_PORTAUDIO) pa_close_audio(); else #endif #ifdef USEAPI_JACK - if (sys_audioapi == API_JACK) + if (sys_audioapiopened == API_JACK) jack_close_audio(); else #endif #ifdef USEAPI_OSS - if (sys_audioapi == API_OSS) + if (sys_audioapiopened == API_OSS) oss_close_audio(); else #endif #ifdef USEAPI_ALSA - if (sys_audioapi == API_ALSA) + if (sys_audioapiopened == API_ALSA) alsa_close_audio(); else #endif #ifdef USEAPI_MMIO - if (sys_audioapi == API_MMIO) + if (sys_audioapiopened == API_MMIO) mmio_close_audio(); else #endif post("sys_close_audio: unknown API %d", sys_audioapi); sys_inchannels = sys_outchannels = 0; + sys_audioapiopened = -1; sched_set_using_audio(SCHED_AUDIO_NONE); } @@ -426,12 +428,14 @@ void sys_reopen_audio( void) { audio_state = 0; sched_set_using_audio(SCHED_AUDIO_NONE); + sys_audioapiopened = -1; } else { audio_state = 1; sched_set_using_audio( (callback ? SCHED_AUDIO_CALLBACK : SCHED_AUDIO_POLL)); + sys_audioapiopened = sys_audioapi; } sys_vgui("set pd_whichapi %d\n", (outcome == 0 ? sys_audioapi : 0)); } @@ -732,13 +736,14 @@ void glob_audio_dialog(t_pd *dummy, t_symbol *s, int argc, t_atom *argv) if (newcallback < 0) newcallback = 0; - if (audio_callback == newcallback) + if (!audio_callback && !newcallback) sys_close_audio(); sys_set_audio_settings(nindev, newaudioindev, nindev, newaudioinchan, noutdev, newaudiooutdev, noutdev, newaudiooutchan, newrate, newadvance, (newcallback >= 0 ? newcallback : 0)); - if (audio_callback == newcallback) + if (!audio_callback && !newcallback) sys_reopen_audio(); + else sched_reopenmeplease = 1; } void sys_listdevs(void ) diff --git a/src/s_audio_pa.c b/src/s_audio_pa.c index f05c41d85..2638597d1 100644 --- a/src/s_audio_pa.c +++ b/src/s_audio_pa.c @@ -36,10 +36,10 @@ static int pa_lowlevel_callback(const void *inputBuffer, int i; unsigned int j; float *fbuf, *fp2, *fp3, *soundiop; - if (framesPerBuffer != DEFDACBLKSIZE) - { - fprintf(stderr, "ignoring buffer size %d\n", framesPerBuffer); - return; + if (framesPerBuffer != DEFDACBLKSIZE) + { + fprintf(stderr, "ignoring buffer size %d\n", framesPerBuffer); + return 0; } if (inputBuffer != NULL) { @@ -51,6 +51,8 @@ static int pa_lowlevel_callback(const void *inputBuffer, } else memset((void *)pa_soundin, 0, framesPerBuffer * pa_inchans * sizeof(float)); + memset((void *)pa_soundout, 0, + framesPerBuffer * pa_outchans * sizeof(float)); (*pa_callback)(); if (outputBuffer != NULL) { @@ -60,7 +62,6 @@ static int pa_lowlevel_callback(const void *inputBuffer, for (j = 0, fp3 = fp2; j < framesPerBuffer; j++, fp3 += pa_outchans) *fp3 = *soundiop++; } - return 0; } diff --git a/src/s_print.c b/src/s_print.c index 1d7695d1e..23bacff27 100644 --- a/src/s_print.c +++ b/src/s_print.c @@ -77,8 +77,8 @@ void postatom(int argc, t_atom *argv) int i; for (i = 0; i < argc; i++) { - char buf[80]; - atom_string(argv+i, buf, 80); + char buf[MAXPDSTRING]; + atom_string(argv+i, buf, MAXPDSTRING); poststring(buf); } } -- GitLab