int sys_audiodevnametonumber(int output, const char *name) { char indevlist[MAXNDEV*DEVDESCSIZE], outdevlist[MAXNDEV*DEVDESCSIZE]; int nindevs = 0, noutdevs = 0, i, canmulti, cancallback; sys_get_audio_devs(indevlist, &nindevs, outdevlist, &noutdevs, &canmulti, &cancallback, MAXNDEV, DEVDESCSIZE); if (output) { for (i = 0; i < noutdevs; i++) { unsigned long comp = strlen(name); if (comp > strlen(outdevlist + i * DEVDESCSIZE)) comp = strlen(outdevlist + i * DEVDESCSIZE); if (!strncmp(name, outdevlist + i * DEVDESCSIZE, comp)) return (i); } } else { for (i = 0; i < nindevs; i++) { unsigned long comp = strlen(name); if (comp > strlen(indevlist + i * DEVDESCSIZE)) comp = strlen(indevlist + i * DEVDESCSIZE); if (!strncmp(name, indevlist + i * DEVDESCSIZE, comp)) return (i); } } return (-1); }
static void audiosettings_listdevices(t_audiosettings *x) { int i; char indevlist[MAXNDEV][DEVDESCSIZE], outdevlist[MAXNDEV][DEVDESCSIZE]; int indevs = 0, outdevs = 0, canmulti = 0, cancallback = 0; t_atom atoms[3]; sys_get_audio_devs((char*)indevlist, &indevs, (char*)outdevlist, &outdevs, &canmulti, &cancallback, MAXNDEV, DEVDESCSIZE); SETSYMBOL (atoms+0, gensym("driver")); SETSYMBOL (atoms+1, as_getdrivername(sys_audioapi)); outlet_anything(x->x_info, gensym("device"), 2, atoms); SETSYMBOL (atoms+0, gensym("multi")); SETFLOAT (atoms+1, (t_float)canmulti); outlet_anything(x->x_info, gensym("device"), 2, atoms); SETSYMBOL (atoms+0, gensym("callback")); SETFLOAT (atoms+1, (t_float)cancallback); outlet_anything(x->x_info, gensym("device"), 2, atoms); SETSYMBOL(atoms+0, gensym("in")); SETSYMBOL(atoms+1, gensym("devices")); SETFLOAT (atoms+2, (t_float)indevs); outlet_anything(x->x_info, gensym("device"), 3, atoms); for(i=0; i<indevs; i++) { SETFLOAT (atoms+1, (t_float)i); SETSYMBOL(atoms+2, gensym(indevlist[i])); outlet_anything(x->x_info, gensym("device"), 3, atoms); } SETSYMBOL(atoms+0, gensym("out")); SETSYMBOL(atoms+1, gensym("devices")); SETFLOAT (atoms+2, (t_float)outdevs); outlet_anything(x->x_info, gensym("device"), 3, atoms); for(i=0; i<outdevs; i++) { SETFLOAT (atoms+1, (t_float)i); SETSYMBOL(atoms+2, gensym(outdevlist[i])); outlet_anything(x->x_info, gensym("device"), 3, atoms); } }
void sys_audiodevnumbertoname(int output, int devno, char *name, int namesize) { char indevlist[MAXNDEV*DEVDESCSIZE], outdevlist[MAXNDEV*DEVDESCSIZE]; int nindevs = 0, noutdevs = 0, canmulti, cancallback; if (devno < 0) { *name = 0; return; } sys_get_audio_devs(indevlist, &nindevs, outdevlist, &noutdevs, &canmulti, &cancallback, MAXNDEV, DEVDESCSIZE); if (output && (devno < noutdevs)) strncpy(name, outdevlist + devno * DEVDESCSIZE, namesize); else if (!output && (devno < nindevs)) strncpy(name, indevlist + devno * DEVDESCSIZE, namesize); else *name = 0; name[namesize-1] = 0; }
static void audiosettings_testdevices(t_audiosettings *x) { int i; char indevlist[MAXNDEV][DEVDESCSIZE], outdevlist[MAXNDEV][DEVDESCSIZE]; int indevs = 0, outdevs = 0, canmulti = 0, cancallback = 0; if(0) { pd_error(x, "this should never happen"); } sys_get_audio_devs((char*)indevlist, &indevs, (char*)outdevlist, &outdevs, &canmulti, &cancallback, MAXNDEV, DEVDESCSIZE); post("%d indevs", indevs); for(i=0; i<indevs; i++) post("\t#%02d: %s", i, indevlist[i]); post("%d outdevs", outdevs); for(i=0; i<outdevs; i++) post("\t#%02d: %s", i, outdevlist[i]); post("multi: %d\tcallback: %d", canmulti, cancallback); endpost(); int naudioindev, audioindev[MAXAUDIOINDEV], chindev[MAXAUDIOINDEV]; int naudiooutdev, audiooutdev[MAXAUDIOOUTDEV], choutdev[MAXAUDIOOUTDEV]; int rate, advance, callback, blocksize; as_get_audio_params(&naudioindev, audioindev, chindev, &naudiooutdev, audiooutdev, choutdev, &rate, &advance, &callback, &blocksize); post("%d audioindev (parms)", naudioindev); for(i=0; i<naudioindev; i++) { post("\t#%02d: %d %d", i, audioindev[i], chindev[i]); } post("%d audiooutdev (parms)", naudiooutdev); for(i=0; i<naudiooutdev; i++) { post("\t#%02d: %d %d", i, audiooutdev[i], choutdev[i]); } post("rate=%d\tadvance=%d\tcallback=%d\tblocksize=%d", rate, advance, callback, blocksize); }