/* open audio using whatever parameters were last used */ void sys_reopen_audio( void) { int naudioindev, audioindev[MAXAUDIOINDEV], chindev[MAXAUDIOINDEV]; int naudiooutdev, audiooutdev[MAXAUDIOOUTDEV], choutdev[MAXAUDIOOUTDEV]; int rate, advance; sys_get_audio_params(&naudioindev, audioindev, chindev, &naudiooutdev, audiooutdev, choutdev, &rate, &advance); sys_open_audio(naudioindev, audioindev, naudioindev, chindev, naudiooutdev, audiooutdev, naudiooutdev, choutdev, rate, advance, 1); }
static void as_get_audio_params( int *pnaudioindev, int *paudioindev, int *pchindev, int *pnaudiooutdev, int *paudiooutdev, int *pchoutdev, int *prate, int *padvance, int *pcallback, int *pblocksize) { #if (defined PD_MINOR_VERSION) && (PD_MINOR_VERSION >= 43) sys_get_audio_params(pnaudioindev , paudioindev , pchindev, pnaudiooutdev, paudiooutdev, pchoutdev, prate, padvance, pcallback, pblocksize); #else if(pblocksize) *pblocksize=-1; sys_get_audio_params(pnaudioindev , paudioindev , pchindev, pnaudiooutdev, paudiooutdev, pchoutdev, prate, padvance, pcallback); #endif }
/* debugging */ void glob_foo(void *dummy, t_symbol *s, int argc, t_atom *argv) { t_symbol *arg = atom_getsymbolarg(0, argc, argv); #ifdef ROCKBOX (void) dummy; (void) s; #endif if (arg == gensym("restart")) { int naudioindev, audioindev[MAXAUDIOINDEV], chindev[MAXAUDIOINDEV]; int naudiooutdev, audiooutdev[MAXAUDIOOUTDEV], choutdev[MAXAUDIOOUTDEV]; int rate, advance; sys_get_audio_params(&naudioindev, audioindev, chindev, &naudiooutdev, audiooutdev, choutdev, &rate, &advance); sys_close_audio(); sys_open_audio(naudioindev, audioindev, naudioindev, chindev, naudiooutdev, audiooutdev, naudiooutdev, choutdev, rate, advance, 1); } #ifdef USEAPI_ALSA else if (arg == gensym("alsawrite")) { int n = atom_getintarg(1, argc, argv); alsa_putzeros(n); } else if (arg == gensym("alsaread")) { int n = atom_getintarg(1, argc, argv); alsa_getzeros(n); } else if (arg == gensym("print")) { alsa_printstate(); } #endif }
/* start an audio settings dialog window */ void glob_audio_properties(t_pd *dummy, t_floatarg flongform) { char buf[1024 + 2 * MAXNDEV*(DEVDESCSIZE+4)]; /* these are the devices you're using: */ int naudioindev, audioindev[MAXAUDIOINDEV], chindev[MAXAUDIOINDEV]; int naudiooutdev, audiooutdev[MAXAUDIOOUTDEV], choutdev[MAXAUDIOOUTDEV]; int audioindev1, audioindev2, audioindev3, audioindev4, audioinchan1, audioinchan2, audioinchan3, audioinchan4, audiooutdev1, audiooutdev2, audiooutdev3, audiooutdev4, audiooutchan1, audiooutchan2, audiooutchan3, audiooutchan4; int rate, advance, callback, blocksize; /* these are all the devices on your system: */ char indevlist[MAXNDEV*DEVDESCSIZE], outdevlist[MAXNDEV*DEVDESCSIZE]; int nindevs = 0, noutdevs = 0, canmulti = 0, cancallback = 0, i; audio_getdevs(indevlist, &nindevs, outdevlist, &noutdevs, &canmulti, &cancallback, MAXNDEV, DEVDESCSIZE); sys_gui("global audio_indevlist; set audio_indevlist {}\n"); for (i = 0; i < nindevs; i++) sys_vgui("lappend audio_indevlist {%s}\n", indevlist + i * DEVDESCSIZE); sys_gui("global audio_outdevlist; set audio_outdevlist {}\n"); for (i = 0; i < noutdevs; i++) sys_vgui("lappend audio_outdevlist {%s}\n", outdevlist + i * DEVDESCSIZE); sys_get_audio_params(&naudioindev, audioindev, chindev, &naudiooutdev, audiooutdev, choutdev, &rate, &advance, &callback, &blocksize); /* post("naudioindev %d naudiooutdev %d longform %f", naudioindev, naudiooutdev, flongform); */ if (naudioindev > 1 || naudiooutdev > 1) flongform = 1; audioindev1 = (naudioindev > 0 && audioindev[0]>= 0 ? audioindev[0] : 0); audioindev2 = (naudioindev > 1 && audioindev[1]>= 0 ? audioindev[1] : 0); audioindev3 = (naudioindev > 2 && audioindev[2]>= 0 ? audioindev[2] : 0); audioindev4 = (naudioindev > 3 && audioindev[3]>= 0 ? audioindev[3] : 0); audioinchan1 = (naudioindev > 0 ? chindev[0] : 0); audioinchan2 = (naudioindev > 1 ? chindev[1] : 0); audioinchan3 = (naudioindev > 2 ? chindev[2] : 0); audioinchan4 = (naudioindev > 3 ? chindev[3] : 0); audiooutdev1 = (naudiooutdev > 0 && audiooutdev[0]>=0 ? audiooutdev[0] : 0); audiooutdev2 = (naudiooutdev > 1 && audiooutdev[1]>=0 ? audiooutdev[1] : 0); audiooutdev3 = (naudiooutdev > 2 && audiooutdev[2]>=0 ? audiooutdev[2] : 0); audiooutdev4 = (naudiooutdev > 3 && audiooutdev[3]>=0 ? audiooutdev[3] : 0); audiooutchan1 = (naudiooutdev > 0 ? choutdev[0] : 0); audiooutchan2 = (naudiooutdev > 1 ? choutdev[1] : 0); audiooutchan3 = (naudiooutdev > 2 ? choutdev[2] : 0); audiooutchan4 = (naudiooutdev > 3 ? choutdev[3] : 0); sprintf(buf, "pdtk_audio_dialog %%s \ %d %d %d %d %d %d %d %d \ %d %d %d %d %d %d %d %d \ %d %d %d %d %d %d\n", audioindev1, audioindev2, audioindev3, audioindev4, audioinchan1, audioinchan2, audioinchan3, audioinchan4, audiooutdev1, audiooutdev2, audiooutdev3, audiooutdev4, audiooutchan1, audiooutchan2, audiooutchan3, audiooutchan4, rate, advance, canmulti, (cancallback ? callback : -1), (flongform != 0), blocksize); gfxstub_deleteforkey(0); gfxstub_new(&glob_pdobject, (void *)glob_audio_properties, buf); }
/* open audio using whatever parameters were last used */ void sys_reopen_audio( void) { int naudioindev, audioindev[MAXAUDIOINDEV], chindev[MAXAUDIOINDEV]; int naudiooutdev, audiooutdev[MAXAUDIOOUTDEV], choutdev[MAXAUDIOOUTDEV]; int rate, advance, callback, blocksize, outcome = 0; sys_get_audio_params(&naudioindev, audioindev, chindev, &naudiooutdev, audiooutdev, choutdev, &rate, &advance, &callback, &blocksize); sys_setchsr(audio_nextinchans, audio_nextoutchans, rate); if (!naudioindev && !naudiooutdev) { sched_set_using_audio(SCHED_AUDIO_NONE); return; } #ifdef USEAPI_PORTAUDIO if (sys_audioapi == API_PORTAUDIO) { int blksize = (audio_blocksize ? audio_blocksize : 64); if (sys_verbose) fprintf(stderr, "blksize %d, advance %d\n", blksize, sys_advance_samples/blksize); outcome = pa_open_audio((naudioindev > 0 ? chindev[0] : 0), (naudiooutdev > 0 ? choutdev[0] : 0), rate, STUFF->st_soundin, STUFF->st_soundout, blksize, sys_advance_samples/blksize, (naudioindev > 0 ? audioindev[0] : 0), (naudiooutdev > 0 ? audiooutdev[0] : 0), (callback ? sched_audio_callbackfn : 0)); } else #endif #ifdef USEAPI_JACK if (sys_audioapi == API_JACK) outcome = jack_open_audio((naudioindev > 0 ? chindev[0] : 0), (naudiooutdev > 0 ? choutdev[0] : 0), rate, (callback ? sched_audio_callbackfn : 0)); else #endif #ifdef USEAPI_OSS if (sys_audioapi == API_OSS) outcome = oss_open_audio(naudioindev, audioindev, naudioindev, chindev, naudiooutdev, audiooutdev, naudiooutdev, choutdev, rate, audio_blocksize); else #endif #ifdef USEAPI_ALSA /* for alsa, only one device is supported; it may be open for both input and output. */ if (sys_audioapi == API_ALSA) outcome = alsa_open_audio(naudioindev, audioindev, naudioindev, chindev, naudiooutdev, audiooutdev, naudiooutdev, choutdev, rate, audio_blocksize); else #endif #ifdef USEAPI_MMIO if (sys_audioapi == API_MMIO) outcome = mmio_open_audio(naudioindev, audioindev, naudioindev, chindev, naudiooutdev, audiooutdev, naudiooutdev, choutdev, rate, audio_blocksize); else #endif #ifdef USEAPI_AUDIOUNIT if (sys_audioapi == API_AUDIOUNIT) outcome = audiounit_open_audio((naudioindev > 0 ? chindev[0] : 0), (naudioindev > 0 ? choutdev[0] : 0), rate); else #endif #ifdef USEAPI_ESD if (sys_audioapi == API_ALSA) outcome = esd_open_audio(naudioindev, audioindev, naudioindev, chindev, naudiooutdev, audiooutdev, naudiooutdev, choutdev, rate); else #endif #ifdef USEAPI_DUMMY if (sys_audioapi == API_DUMMY) outcome = dummy_open_audio(naudioindev, naudiooutdev, rate); else #endif if (sys_audioapi == API_NONE) ; else post("unknown audio API specified"); if (outcome) /* failed */ { audio_state = 0; sched_set_using_audio(SCHED_AUDIO_NONE); sys_audioapiopened = -1; audio_callback_is_open = 0; } else { /* fprintf(stderr, "started w/callback %d\n", callback); */ audio_state = 1; sched_set_using_audio( (callback ? SCHED_AUDIO_CALLBACK : SCHED_AUDIO_POLL)); sys_audioapiopened = sys_audioapi; audio_callback_is_open = callback; } sys_vgui("set pd_whichapi %d\n", (outcome == 0 ? sys_audioapi : 0)); }
/* stuff to do, once, after calling sys_argparse() -- which may itself be called more than once (first from "settings, second from .pdrc, then from command-line arguments */ static void sys_afterargparse(void) { char sbuf[MAXPDSTRING]; int i; int naudioindev, audioindev[MAXAUDIOINDEV], chindev[MAXAUDIOINDEV]; int naudiooutdev, audiooutdev[MAXAUDIOOUTDEV], choutdev[MAXAUDIOOUTDEV]; int nchindev, nchoutdev, rate, advance, callback, blocksize; int nmidiindev = 0, midiindev[MAXMIDIINDEV]; int nmidioutdev = 0, midioutdev[MAXMIDIOUTDEV]; /* add "extra" library to path */ strncpy(sbuf, sys_libdir->s_name, MAXPDSTRING-30); sbuf[MAXPDSTRING-30] = 0; strcat(sbuf, "/extra"); sys_setextrapath(sbuf); /* add "doc/5.reference" library to helppath */ strncpy(sbuf, sys_libdir->s_name, MAXPDSTRING-30); sbuf[MAXPDSTRING-30] = 0; strcat(sbuf, "/doc/5.reference"); sys_helppath = namelist_append_files(sys_helppath, sbuf); /* correct to make audio and MIDI device lists zero based. On MMIO, however, "1" really means the second device (the first one is "mapper" which is was not included when the command args were set up, so we leave it that way for compatibility. */ if (!sys_mmio) { for (i = 0; i < sys_nsoundin; i++) sys_soundindevlist[i]--; for (i = 0; i < sys_nsoundout; i++) sys_soundoutdevlist[i]--; } for (i = 0; i < sys_nmidiin; i++) sys_midiindevlist[i]--; for (i = 0; i < sys_nmidiout; i++) sys_midioutdevlist[i]--; if (sys_listplease) sys_listdevs(); /* get the current audio parameters. These are set by the preferences mechanism (sys_loadpreferences()) or else are the default. Overwrite them with any results of argument parsing, and store them again. */ sys_get_audio_params(&naudioindev, audioindev, chindev, &naudiooutdev, audiooutdev, choutdev, &rate, &advance, &callback, &blocksize); if (sys_nchin >= 0) { nchindev = sys_nchin; for (i = 0; i < nchindev; i++) chindev[i] = sys_chinlist[i]; } else nchindev = naudioindev; if (sys_nsoundin >= 0) { naudioindev = sys_nsoundin; for (i = 0; i < naudioindev; i++) audioindev[i] = sys_soundindevlist[i]; } if (sys_nchout >= 0) { nchoutdev = sys_nchout; for (i = 0; i < nchoutdev; i++) choutdev[i] = sys_choutlist[i]; } else nchoutdev = naudiooutdev; if (sys_nsoundout >= 0) { naudiooutdev = sys_nsoundout; for (i = 0; i < naudiooutdev; i++) audiooutdev[i] = sys_soundoutdevlist[i]; } sys_get_midi_params(&nmidiindev, midiindev, &nmidioutdev, midioutdev); if (sys_nmidiin >= 0) { post("sys_nmidiin %d, nmidiindev %d", sys_nmidiin, nmidiindev); nmidiindev = sys_nmidiin; for (i = 0; i < nmidiindev; i++) midiindev[i] = sys_midiindevlist[i]; } if (sys_nmidiout >= 0) { nmidioutdev = sys_nmidiout; for (i = 0; i < nmidioutdev; i++) midioutdev[i] = sys_midioutdevlist[i]; } if (sys_main_advance) advance = sys_main_advance; if (sys_main_srate) rate = sys_main_srate; if (sys_main_callback) callback = sys_main_callback; if (sys_main_blocksize) blocksize = sys_main_blocksize; sys_set_audio_settings(naudioindev, audioindev, nchindev, chindev, naudiooutdev, audiooutdev, nchoutdev, choutdev, rate, advance, callback, blocksize); sys_open_midi(nmidiindev, midiindev, nmidioutdev, midioutdev, 0); }
int pd_extern_sched(char *flags) { int naudioindev, audioindev[MAXAUDIOINDEV], chindev[MAXAUDIOINDEV]; int naudiooutdev, audiooutdev[MAXAUDIOOUTDEV], choutdev[MAXAUDIOOUTDEV]; int i, j, rate, advance, callback, chin, chout, fill = 0, c, blocksize; t_binbuf *b = binbuf_new(); sys_get_audio_params(&naudioindev, audioindev, chindev, &naudiooutdev, audiooutdev, choutdev, &rate, &advance, &callback, &blocksize); chin = (naudioindev < 1 ? 0 : chindev[0]); chout = (naudiooutdev < 1 ? 0 : choutdev[0]); /* fprintf(stderr, "Pd plug-in scheduler called, chans %d %d, sr %d\n", chin, chout, (int)rate); */ sys_setchsr(chin, chout, rate); sys_audioapi = API_NONE; while ((c = getchar()) != EOF) { if (c == ';') { int n; t_atom *ap; binbuf_text(b, inbuf, fill); n = binbuf_getnatom(b); ap = binbuf_getvec(b); fill = 0; if (n > 0 && ap[0].a_type == A_FLOAT) { /* a list -- take it as incoming signals. */ int chan, nchan = n/DEFDACBLKSIZE; t_sample *fp; for (i = chan = 0, fp = sys_soundin; chan < nchan; chan++) for (j = 0; j < DEFDACBLKSIZE; j++) *fp++ = atom_getfloat(ap++); for (; chan < chin; chan++) for (j = 0; j < DEFDACBLKSIZE; j++) *fp++ = 0; sched_tick(sys_time+sys_time_per_dsp_tick); sys_pollgui(); #if defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__GNU__) pollwatchdog(); #endif printf(";\n"); for (i = chout*DEFDACBLKSIZE, fp = sys_soundout; i--; fp++) { printf("%g\n", *fp); *fp = 0; } printf(";\n"); fflush(stdout); } else if (n > 1 && ap[0].a_type == A_SYMBOL) { t_pd *whom = ap[0].a_w.w_symbol->s_thing; if (!whom) error("%s: no such object", ap[0].a_w.w_symbol->s_name); else if (ap[1].a_type == A_SYMBOL) typedmess(whom, ap[1].a_w.w_symbol, n-2, ap+2); else pd_list(whom, 0, n-1, ap+1); } } else if (fill < BUFSIZE) inbuf[fill++] = c; else if (fill == BUFSIZE) fprintf(stderr, "pd-extern: input buffer overflow\n"); } return (0); }
int pd_extern_sched(char *flags) { int naudioindev, audioindev[MAXAUDIOINDEV], chindev[MAXAUDIOINDEV]; int naudiooutdev, audiooutdev[MAXAUDIOOUTDEV], choutdev[MAXAUDIOOUTDEV]; int i, j, rate, advance, callback, chin, chout, fill = 0, c, blocksize, useascii = 0; t_binbuf *b = binbuf_new(); sys_get_audio_params(&naudioindev, audioindev, chindev, &naudiooutdev, audiooutdev, choutdev, &rate, &advance, &callback, &blocksize); chin = (naudioindev < 1 ? 0 : chindev[0]); chout = (naudiooutdev < 1 ? 0 : choutdev[0]); if (!flags || flags[0] != 'a') { /* signal to stdout object to do binary by attaching an object to an obscure symbol name */ pd_ambinary_class = class_new(gensym("pd~"), 0, 0, sizeof(t_pd), CLASS_PD, 0); pd_bind(&pd_ambinary_class, gensym("#pd_binary_stdio")); /* On Windows, set stdin and out to "binary" mode */ #ifdef _WIN32 setmode(fileno(stdout),O_BINARY); setmode(fileno(stdin),O_BINARY); #endif } else { if (!(ascii_inbuf = getbytes(BUFSIZE))) return (1); useascii = 1; } /* fprintf(stderr, "Pd plug-in scheduler called, chans %d %d, sr %d\n", chin, chout, (int)rate); */ sys_setchsr(chin, chout, rate); sys_audioapi = API_NONE; while (useascii ? readasciimessage(b) : readbinmessage(b) ) { t_atom *ap = binbuf_getvec(b); int n = binbuf_getnatom(b); if (n > 0 && ap[0].a_type == A_FLOAT) { /* a list -- take it as incoming signals. */ int chan, nchan = n/DEFDACBLKSIZE; t_sample *fp; for (i = chan = 0, fp = STUFF->st_soundin; chan < nchan; chan++) for (j = 0; j < DEFDACBLKSIZE; j++) *fp++ = atom_getfloat(ap++); for (; chan < chin; chan++) for (j = 0; j < DEFDACBLKSIZE; j++) *fp++ = 0; sched_tick(); sys_pollgui(); #if defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)\ || defined(__GNU__) pollwatchdog(); #endif if (useascii) printf(";\n"); else putchar(A_SEMI); for (i = chout*DEFDACBLKSIZE, fp = STUFF->st_soundout; i--; fp++) { if (useascii) printf("%g\n", *fp); else pd_tilde_putfloat(*fp, stdout); *fp = 0; } if (useascii) printf(";\n"); else putchar(A_SEMI); fflush(stdout); } else if (n > 1 && ap[0].a_type == A_SYMBOL) { t_pd *whom = ap[0].a_w.w_symbol->s_thing; if (!whom) error("%s: no such object", ap[0].a_w.w_symbol->s_name); else if (ap[1].a_type == A_SYMBOL) typedmess(whom, ap[1].a_w.w_symbol, n-2, ap+2); else pd_list(whom, 0, n-1, ap+1); } } binbuf_free(b); return (0); }
void glob_savepreferences(t_pd *dummy) { int naudioindev, audioindev[MAXAUDIOINDEV], chindev[MAXAUDIOINDEV]; int naudiooutdev, audiooutdev[MAXAUDIOOUTDEV], choutdev[MAXAUDIOOUTDEV]; int i, rate, advance, callback; char buf1[MAXPDSTRING], buf2[MAXPDSTRING]; int nmidiindev, midiindev[MAXMIDIINDEV]; int nmidioutdev, midioutdev[MAXMIDIOUTDEV]; sys_initsavepreferences(); /* audio settings */ sprintf(buf1, "%d", sys_audioapi); sys_putpreference("audioapi", buf1); sys_get_audio_params(&naudioindev, audioindev, chindev, &naudiooutdev, audiooutdev, choutdev, &rate, &advance, &callback); sys_putpreference("noaudioin", (naudioindev <= 0 ? "True" : "False")); for (i = 0; i < naudioindev; i++) { sprintf(buf1, "audioindev%d", i+1); sprintf(buf2, "%d %d", audioindev[i], chindev[i]); sys_putpreference(buf1, buf2); } sys_putpreference("noaudioout", (naudiooutdev <= 0 ? "True" : "False")); for (i = 0; i < naudiooutdev; i++) { sprintf(buf1, "audiooutdev%d", i+1); sprintf(buf2, "%d %d", audiooutdev[i], choutdev[i]); sys_putpreference(buf1, buf2); } sprintf(buf1, "%d", advance); sys_putpreference("audiobuf", buf1); sprintf(buf1, "%d", rate); sys_putpreference("rate", buf1); sprintf(buf1, "%d", callback); sys_putpreference("callback", buf1); /* MIDI settings */ sys_get_midi_params(&nmidiindev, midiindev, &nmidioutdev, midioutdev); sys_putpreference("nomidiin", (nmidiindev <= 0 ? "True" : "False")); for (i = 0; i < nmidiindev; i++) { sprintf(buf1, "midiindev%d", i+1); sprintf(buf2, "%d", midiindev[i]); sys_putpreference(buf1, buf2); } sys_putpreference("nomidiout", (nmidioutdev <= 0 ? "True" : "False")); for (i = 0; i < nmidioutdev; i++) { sprintf(buf1, "midioutdev%d", i+1); sprintf(buf2, "%d", midioutdev[i]); sys_putpreference(buf1, buf2); } /* file search path */ for (i = 0; 1; i++) { char *pathelem = namelist_get(sys_searchpath, i); if (!pathelem) break; sprintf(buf1, "path%d", i+1); sys_putpreference(buf1, pathelem); } sprintf(buf1, "%d", i); sys_putpreference("npath", buf1); sprintf(buf1, "%d", sys_usestdpath); sys_putpreference("standardpath", buf1); sprintf(buf1, "%d", sys_verbose); sys_putpreference("verbose", buf1); /* startup */ for (i = 0; 1; i++) { char *pathelem = namelist_get(sys_externlist, i); if (!pathelem) break; sprintf(buf1, "loadlib%d", i+1); sys_putpreference(buf1, pathelem); } sprintf(buf1, "%d", i); sys_putpreference("nloadlib", buf1); sprintf(buf1, "%d", sys_defeatrt); sys_putpreference("defeatrt", buf1); sys_putpreference("flags", (sys_flags ? sys_flags->s_name : "")); sys_donesavepreferences(); }
void glob_audio_properties(t_pd *dummy, t_floatarg flongform) { char buf[1024 + 2 * MAXNDEV*(DEVDESCSIZE+4)]; /* these are the devices you're using: */ int naudioindev, audioindev[MAXAUDIOINDEV], chindev[MAXAUDIOINDEV]; int naudiooutdev, audiooutdev[MAXAUDIOOUTDEV], choutdev[MAXAUDIOOUTDEV]; int audioindev1, audioindev2, audioindev3, audioindev4, audioinchan1, audioinchan2, audioinchan3, audioinchan4, audiooutdev1, audiooutdev2, audiooutdev3, audiooutdev4, audiooutchan1, audiooutchan2, audiooutchan3, audiooutchan4; int rate, advance; /* these are all the devices on your system: */ char indevlist[MAXNDEV*DEVDESCSIZE], outdevlist[MAXNDEV*DEVDESCSIZE]; int nindevs = 0, noutdevs = 0, canmulti = 0, i; char indevliststring[MAXNDEV*(DEVDESCSIZE+4)+80], outdevliststring[MAXNDEV*(DEVDESCSIZE+4)+80]; audio_getdevs(indevlist, &nindevs, outdevlist, &noutdevs, &canmulti, MAXNDEV, DEVDESCSIZE); strcpy(indevliststring, "{"); for (i = 0; i < nindevs; i++) { strcat(indevliststring, "\""); strcat(indevliststring, indevlist + i * DEVDESCSIZE); strcat(indevliststring, "\" "); } strcat(indevliststring, "}"); strcpy(outdevliststring, "{"); for (i = 0; i < noutdevs; i++) { strcat(outdevliststring, "\""); strcat(outdevliststring, outdevlist + i * DEVDESCSIZE); strcat(outdevliststring, "\" "); } strcat(outdevliststring, "}"); sys_get_audio_params(&naudioindev, audioindev, chindev, &naudiooutdev, audiooutdev, choutdev, &rate, &advance); /* post("naudioindev %d naudiooutdev %d longform %f", naudioindev, naudiooutdev, flongform); */ if (naudioindev > 1 || naudiooutdev > 1) flongform = 1; audioindev1 = (naudioindev > 0 && audioindev[0]>= 0 ? audioindev[0] : 0); audioindev2 = (naudioindev > 1 && audioindev[1]>= 0 ? audioindev[1] : 0); audioindev3 = (naudioindev > 2 && audioindev[2]>= 0 ? audioindev[2] : 0); audioindev4 = (naudioindev > 3 && audioindev[3]>= 0 ? audioindev[3] : 0); audioinchan1 = (naudioindev > 0 ? chindev[0] : 0); audioinchan2 = (naudioindev > 1 ? chindev[1] : 0); audioinchan3 = (naudioindev > 2 ? chindev[2] : 0); audioinchan4 = (naudioindev > 3 ? chindev[3] : 0); audiooutdev1 = (naudiooutdev > 0 && audiooutdev[0]>=0 ? audiooutdev[0] : 0); audiooutdev2 = (naudiooutdev > 1 && audiooutdev[1]>=0 ? audiooutdev[1] : 0); audiooutdev3 = (naudiooutdev > 2 && audiooutdev[2]>=0 ? audiooutdev[2] : 0); audiooutdev4 = (naudiooutdev > 3 && audiooutdev[3]>=0 ? audiooutdev[3] : 0); audiooutchan1 = (naudiooutdev > 0 ? choutdev[0] : 0); audiooutchan2 = (naudiooutdev > 1 ? choutdev[1] : 0); audiooutchan3 = (naudiooutdev > 2 ? choutdev[2] : 0); audiooutchan4 = (naudiooutdev > 3 ? choutdev[3] : 0); sprintf(buf, "pdtk_audio_dialog %%s \ %s %d %d %d %d %d %d %d %d \ %s %d %d %d %d %d %d %d %d \ %d %d %d %d\n", indevliststring, audioindev1, audioindev2, audioindev3, audioindev4, audioinchan1, audioinchan2, audioinchan3, audioinchan4, outdevliststring, audiooutdev1, audiooutdev2, audiooutdev3, audiooutdev4, audiooutchan1, audiooutchan2, audiooutchan3, audiooutchan4, rate, advance, canmulti, (flongform != 0)); gfxstub_deleteforkey(0); gfxstub_new(&glob_pdobject, glob_audio_properties, buf); }