Hago una interfaz de secuenciador de batería para música electrónica .
Utilizaunmegaarduinocomomicroprocesador,yactualmenteseconectaconunprogramadeprocesamientoqueescribíparalacomunicaciónenserie.Desdeallí,losmensajesOSCseenvíanaunprogramaMax/MSPquemisociocolaboradorescribióparacrearunflujodedatosMIDI.
Entonces:
Mi interfaz física - > Arduino Mega - > E / S en serie - > Procesamiento - > OSC - > Max / MSP - > Midi (- > aplicación de música)
Escogí esta ruta en parte por no ser lo suficientemente inteligente como para eliminar cualquiera de los pasos todavía, pero también para poder actualizar la interfaz física de la manera que queremos, pudiendo hacer que la interfaz física sea multiuso (múltiples modos para los faders, mandos y botones de selección de voz), y ser capaz de garantizar la sincronización crítica de la misión y la modificación del ritmo (también conocido como "swing").
Mis mensajes seriales están configurados de esta manera:
PL,1; // transport control: play
PL,0; // transport control: stop
SW,30; // swing value 30
TM,130; // tempo value 130
SD,1,8,04,0; // Step sequencer data, pattern 1, voice 8 (of 8), step 04 (of 16), off
MU,8,1; // Mute, voice 8 (of 8), on
SO,4,0; // Solo, voice 4 (of 8), off
VL,3,127; // Velocity, voice 3 (of 8), value 127
CC,1,127; // Midi CC, controller 1, value 127
NN,1,36; // Note number, voice 1 (of 8), value 36 (usually a kick drum)
Entonces, puedes ver que, en función del número de comas por punto y coma, puedo determinar cómo analizar los datos en serie del arduino en el programa de procesamiento. Desde Procesamiento, este tipo de mensajes se transforman en OSC como este:
/beatseqr/play 1
/beatseqr/play 0
/beatseqr/swing 30
/beatseqr/tempo 130
/beatseqr/matrix/1/8/04 0
/beatseqr/mute/8 1
/beatseqr/solo/4 0
/beatseqr/velocity/3 127
/beatseqr/midicc/1 127
/beatseqr/midinn/1 36
Y todo funciona bien, pero se siente ineficiente. ¿Realmente necesito la aplicación de procesamiento en el medio?
Ahora,hetratadodecortarelprocesamientoylaspartesOSCdelaecuación,peromefaltaalgodeconocimientoconrespectoaldiseñodelprotocolodedatosenserie.
Soyconscientedequehayunobjetoudpreceive
enMax.Yesofuncionabien,supongo?Talvezloestoyusandomal.
Enunmomentodado,cambiétodomicódigoarduinoparanoenviarnuevaslíneasalfinaldecadamensajeenserie,yaqueesonosignificabanadaespecialparaelobjetoudpreceive
deMax.Dehecho,sirecuerdocorrectamente,soloaceptaríaelprimermensajehastalaprimeralíneaydetendríaelprocesamientodedatos.Asíqueparaevitareso,saquétodosloscaracteresdenuevalíneayluegoseescupiríanenmax/mspcontinuamente.
Luego,elsiguienteproblemaconestemétodoesqueelobjetoudpreceive
soloaceptauncarácteralavez.Asíqueestabaintentandousarunobjetojs
javascriptparaconcatenarloscaracteresentrantesyluegoanalizarlosenpuntoycomaycomas.Elproblemaqueencontréallíeraqueeraimpredecibleeinestable.Loscaracteresseabandonaríanyelmensajenosepodríaprocesar.¿Realmentemehacepreguntarmesidebocambiarmiprotocolodedatosenserieaalgomásrobusto?¿Osiloestoyhaciendomalporcompleto?
¿Deberíasimplementedescartarlotodoyempezardeceroutilizandounfirmwarefirmata?Hevistoalgunos
¿Tienes algún consejo?