diff --git a/src/s_audio_pa.c b/src/s_audio_pa.c index 66618d46dd4bbe84e05e51aaceff70b1b9a62adf..de5fe711b46e8f836a33d710529507b5d6af810f 100644 --- a/src/s_audio_pa.c +++ b/src/s_audio_pa.c @@ -13,9 +13,12 @@ #include <stdlib.h> #include <portaudio.h> #include "s_audio_pablio.h" +#ifdef MSW +#include <malloc.h> +#else +#include <alloca.h> +#endif -#define MAX_PA_CHANS 32 -#define MAX_SAMPLES_PER_FRAME (MAX_PA_CHANS * DEFDACBLKSIZE) /* LATER try to figure out how to handle default devices in portaudio; the way s_audio.c handles them isn't going to work here. */ @@ -196,16 +199,6 @@ int pa_open_audio(int inchans, int outchans, int rate, t_sample *soundin, /* fprintf(stderr, "open callback %d\n", (callbackfn != 0)); */ pa_init(); /* post("in %d out %d rate %d device %d", inchans, outchans, rate, deviceno); */ - if (inchans > MAX_PA_CHANS) - { - post("input channels reduced to maximum %d", MAX_PA_CHANS); - inchans = MAX_PA_CHANS; - } - if (outchans > MAX_PA_CHANS) - { - post("output channels reduced to maximum %d", MAX_PA_CHANS); - outchans = MAX_PA_CHANS; - } if (inchans > 0) { @@ -288,10 +281,15 @@ void pa_close_audio( void) int pa_send_dacs(void) { - float samples[MAX_SAMPLES_PER_FRAME], *fp1, *fp2; + unsigned int framesize = (sizeof(float) * DEFDACBLKSIZE) * + (pa_inchans > pa_outchans ? pa_inchans:pa_outchans); + float *samples, *fp1, *fp2; int i, j; double timebefore; + + samples = alloca(framesize); + timebefore = sys_getrealtime(); if ((pa_inchans && GetAudioStreamReadable(pa_stream) < DEFDACBLKSIZE) || (pa_outchans && GetAudioStreamWriteable(pa_stream) < DEFDACBLKSIZE))