diff options
Diffstat (limited to 'desiredata')
-rw-r--r-- | desiredata/src/s_midi.c | 78 |
1 files changed, 24 insertions, 54 deletions
diff --git a/desiredata/src/s_midi.c b/desiredata/src/s_midi.c index 4637ccea..ff0b87c1 100644 --- a/desiredata/src/s_midi.c +++ b/desiredata/src/s_midi.c @@ -396,7 +396,6 @@ void sys_get_midi_params(int *pnmidiindev, int *pmidiindev, int *pnmidioutdev, i *pnmidiindev = midi_nmidiindev; for (int i=0; i<MAXMIDIINDEV; i++) pmidiindev [i] = midi_midiindev[i]; *pnmidioutdev = midi_nmidioutdev; for (int i=0; i<MAXMIDIOUTDEV; i++) pmidioutdev[i] = midi_midioutdev[i]; } - static void sys_save_midi_params(int nmidiindev, int *midiindev, int nmidioutdev, int *midioutdev) { midi_nmidiindev = nmidiindev; for (int i=0; i<MAXMIDIINDEV; i++) midi_midiindev [i] = midiindev[i]; midi_nmidioutdev = nmidioutdev; for (int i=0; i<MAXMIDIOUTDEV; i++) midi_midioutdev[i] = midioutdev[i]; @@ -483,49 +482,35 @@ void glob_midi_setapi(t_pd *dummy, t_floatarg f) { extern t_class *glob_pdobject; -/* start an midi settings dialog window */ +/* start a midi settings dialog window */ void glob_midi_properties(t_pd *dummy, t_floatarg flongform) { /* these are the devices you're using: */ int nindev, midiindev[MAXMIDIINDEV]; int noutdev, midioutdev[MAXMIDIOUTDEV]; - char midiinstr[16*4+1],midioutstr[16*4+1],*strptr; + char midiinstr[16*4+1],midioutstr[16*4+1],*s; /* these are all the devices on your system: */ char indevlist[MAXNDEV*DEVDESCSIZE], outdevlist[MAXNDEV*DEVDESCSIZE]; int nindevs = 0, noutdevs = 0; - char indevliststring[MAXNDEV*(DEVDESCSIZE+4)+80]; - char outdevliststring[MAXNDEV*(DEVDESCSIZE+4)+80]; + char indevl[MAXNDEV*(DEVDESCSIZE+4)+80]; + char outdevl[MAXNDEV*(DEVDESCSIZE+4)+80]; midi_getdevs(indevlist, &nindevs, outdevlist, &noutdevs, MAXNDEV, DEVDESCSIZE); - strcpy(indevliststring, "{"); - for (int i=0; i< nindevs; i++) sprintf( indevliststring+strlen( indevliststring), "\"%s\" ", indevlist + i * DEVDESCSIZE); - strcat(indevliststring, "}"); - strcpy(outdevliststring, "{"); - for (int i=0; i<noutdevs; i++) sprintf(outdevliststring+strlen(outdevliststring), "\"%s\" ", outdevlist + i * DEVDESCSIZE); - strcat(outdevliststring, "}"); + *indevl=0; for (int i=0; i< nindevs; i++) sprintf( indevl+strlen( indevl), "\"%s\" ", indevlist + i * DEVDESCSIZE); + *outdevl=0; for (int i=0; i<noutdevs; i++) sprintf(outdevl+strlen(outdevl), "\"%s\" ", outdevlist + i * DEVDESCSIZE); sys_get_midi_params(&nindev, midiindev, &noutdev, midioutdev); if (nindev > 1 || noutdev > 1) flongform = 1; - *(strptr = midiinstr) = 0; - for(int i=0; i<16; ++i) { - sprintf(strptr,"%3d ",nindev > i && midiindev[i]>= 0 ? midiindev[i] : -1); - strptr += strlen(strptr); - } - *(strptr = midioutstr) = 0; - for(int i=0; i<16; ++i) { - sprintf(strptr,"%3d ",noutdev > i && midioutdev[i]>= 0 ? midioutdev[i] : -1); - strptr += strlen(strptr); - } - sys_vgui("pdtk_midi_dialog %%s %s %s %s %s %d\n", indevliststring,midiinstr,outdevliststring,midioutstr,!!flongform); + s=midiinstr ; *s=0; for(int i=0; i<16; ++i) {sprintf(s,"%3d ", nindev>i && midiindev[i] >=0? midiindev[i]:-1); s+=strlen(s);} + s=midioutstr; *s=0; for(int i=0; i<16; ++i) {sprintf(s,"%3d ",noutdev>i && midioutdev[i]>=0?midioutdev[i]:-1); s+=strlen(s);} + sys_vgui("pdtk_midi_dialog %%s {%s} %s {%s} %s %d\n", indevl,midiinstr,outdevl,midioutstr,!!flongform); } /* new values from dialog window */ void glob_midi_dialog(t_pd *dummy, t_symbol *s, int argc, t_atom *argv) { - int i, nindev, noutdev; - int newmidiindev[16], newmidioutdev[16]; - int alsadevin, alsadevout; + int i, nindev, noutdev, newmidiindev[16], newmidioutdev[16], alsadevin, alsadevout; for (int i=0; i<16; i++) { - newmidiindev[i] = atom_getintarg(i, argc, argv); + newmidiindev[i] = atom_getintarg(i , argc, argv); newmidioutdev[i] = atom_getintarg(i+16, argc, argv); } - for (i=0, nindev=0; i<16; i++) {if ( newmidiindev[i] >= 0) { newmidiindev[nindev] = newmidiindev[i]; nindev++;}} + for (i=0, nindev=0; i<16; i++) {if ( newmidiindev[i] >= 0) { newmidiindev[nindev] = newmidiindev[i]; nindev++;}} for (i=0, noutdev=0; i<16; i++) {if (newmidioutdev[i] >= 0) {newmidioutdev[noutdev] = newmidioutdev[i]; noutdev++;}} alsadevin = atom_getintarg(32, argc, argv); alsadevout = atom_getintarg(33, argc, argv); @@ -542,15 +527,10 @@ void glob_midi_dialog(t_pd *dummy, t_symbol *s, int argc, t_atom *argv) { } /* tb { */ - void glob_midi_getindevs(t_pd *dummy, t_symbol *s, int ac, t_atom *av) { - /* these are all the devices on your system: */ char indevlist[MAXNDEV*DEVDESCSIZE], outdevlist[MAXNDEV*DEVDESCSIZE]; - int nindevs = 0, noutdevs = 0; - t_atom argv[MAXNDEV]; - int f = ac ? (int)atom_getfloatarg(0,ac,av) : -1; - t_symbol *selector = gensym("midiindev"); - t_symbol *pd = gensym("pd"); + int nindevs = 0, noutdevs = 0; t_symbol *selector = gensym("midiindev"); t_symbol *pd = gensym("pd"); + t_atom argv[MAXNDEV]; int f = ac ? (int)atom_getfloatarg(0,ac,av) : -1; midi_getdevs(indevlist, &nindevs, outdevlist, &noutdevs, MAXNDEV, DEVDESCSIZE); if (f<0) { for (int i=0; i<nindevs; i++) SETSYMBOL(argv+i, gensym(indevlist + i * DEVDESCSIZE)); @@ -560,17 +540,12 @@ void glob_midi_getindevs(t_pd *dummy, t_symbol *s, int ac, t_atom *av) { typedmess(pd->s_thing, selector, 1, argv); } } - void glob_midi_getoutdevs(t_pd *dummy, t_symbol *s, int ac, t_atom *av) { - /* these are all the devices on your system: */ char indevlist[MAXNDEV*DEVDESCSIZE], outdevlist[MAXNDEV*DEVDESCSIZE]; - int nindevs = 0, noutdevs = 0; - t_atom argv[MAXNDEV]; - int f = ac ? (int)atom_getfloatarg(0,ac,av) : -1; - t_symbol *selector = gensym("midioutdev"); - t_symbol *pd = gensym("pd"); + int nindevs = 0, noutdevs = 0; t_symbol *selector = gensym("midioutdev"); t_symbol *pd = gensym("pd"); + t_atom argv[MAXNDEV]; int f = ac ? (int)atom_getfloatarg(0,ac,av) : -1; midi_getdevs(indevlist, &nindevs, outdevlist, &noutdevs, MAXNDEV, DEVDESCSIZE); - if (f < 0) { + if (f<0) { for (int i=0; i<noutdevs; i++) SETSYMBOL(argv+i, gensym(outdevlist + i*DEVDESCSIZE)); typedmess(pd->s_thing, selector, noutdevs, argv); } else if (f < noutdevs) { @@ -579,15 +554,10 @@ void glob_midi_getoutdevs(t_pd *dummy, t_symbol *s, int ac, t_atom *av) { } } -void glob_midi_getcurrentindevs(t_pd *dummy) { - int nindev, midiindev[MAXMIDIINDEV], noutdev, midioutdev[MAXMIDIOUTDEV]; - t_atom argv[MAXNDEV]; sys_get_midi_params(&nindev, midiindev, &noutdev, midioutdev); - for (int i=0; i<nindev; i++) SETFLOAT(argv+i, midiindev[i]); - typedmess(gensym("pd")->s_thing, gensym("midicurrentindev"), nindev, argv); -} -void glob_midi_getcurrentoutdevs(t_pd *dummy) { - int nindev, midiindev[MAXMIDIINDEV], noutdev, midioutdev[MAXMIDIOUTDEV]; - t_atom argv[MAXNDEV]; sys_get_midi_params(&nindev, midiindev, &noutdev, midioutdev); - for (int i=0; i<noutdev; i++) SETFLOAT(argv+i, midioutdev[i]); - typedmess(gensym("pd")->s_thing, gensym("midicurrentoutdev"), noutdev, argv); -} +#define FOO(N,D,M) \ + int nindev, midiindev[MAXMIDIINDEV], noutdev, midioutdev[MAXMIDIOUTDEV]; \ + t_atom argv[MAXNDEV]; sys_get_midi_params(&nindev, midiindev, &noutdev, midioutdev); \ + for (int i=0; i<N; i++) SETFLOAT(argv+i, D[i]); \ + typedmess(gensym("pd")->s_thing, gensym(M), nindev, argv); +void glob_midi_getcurrentindevs( t_pd *dummy) {FOO( nindev,midiindev ,"midicurrentindev" )} +void glob_midi_getcurrentoutdevs(t_pd *dummy) {FOO(noutdev,midioutdev,"midicurrentoutdev")} |