Espai 51.104 (Ed. La Nau, Ca l'Aranyó) || 93 542 2536
mail

----------------------------------------------------------------
----------------------------------------------------------------

PROGRAMACIÓN: CONCEPTOS || MASTER EN ARTES DIGITALES

Midi

 

3.- Parsing

Pero antes de entrar en el tema del midi, vamos a ver una práctica muy útil para la comunicación en serie, que de hecho el Midi utiliza implícitamente: el parsing.

Esta técnica consiste en separar (para luego procesar) mensajes que contienen varias informaciones. Ésto tienen sentido en el contexto de una comunicación en serie, donde nos puede interesar mandar un solo mensaje con varias informaciones, más que mandar todas estas informaciones en mensajes distintos (por ejemplo los estados de una serie de botones y potenciómetros que tenemos conectados a un Arduino.

Veremos quatro ejemplos. El primer ejemplo de parsing realiza lo que podríamos llamar un parsing manual, y servirá para entender qué es exactamente esta técnica.

//declaramos un STRING donde haya UN asterisco  
String testString = "2389*324";//podría ser "20980*3243", slj*e9ed", etc...  
/*declaramos dos strings más que contendrán las 2 partes resultantes 
y los inicializamos vacíos  */
String partU="";  
String  partDos="";  
//y un booleano para saber en todo momento si ya encontramos o no el carácter  
boolean foundAnAsterisc = false;  
//creamos un loop para recorrer uno a uno los carácteres del STRING:  
for(int i=0;i<testString.length();i++){    
//cogemos cada carácter...    
char c = testString.charAt(i);    
//y lo comparamos con el carácter clave    
if(c=='*'){          
  //si lo es, cambiamos el booleano de control      
  foundAnAsterisc = true;    
  } 
  /*si no, colocamos el carácter en el primer o segundo STRING, 
  según hayamos encontrado o no el asterisco*/ 
  else if(!foundAnAsterisc){     
  partU += c;     
  } else {      
   partDos += c;    }  
}  
 //I finalmente visualizamos el resultado en la consola  
 println("String Original: "+testString);  
 println("Primera parte: "+partU);  
 println("Segunda parte: "+partDos);

El segundo ejemplo utiliza ya la función indexOf() que de hecho es própia de Java, pero que se puede utilizar sin problemas en processing.

//declaramos un STRING donde haya UN asterisco
String testString = "2389*324";//podria ser "298*33", "fkj*fw9d", etc...
/*declaramos dos strings más que contendrán las 2 partes resultantes y 
los inicializamos vacíos*/
String partU="";
String  partDos="";
//utilizamos String.indexOf() para saber donde está el asterisco:
int keyChar = testString.indexOf('*');
//y partimos el String inicial con el método String.substring():
//del primer carácter al que está en el índice del asterisco
partU = testString.substring(0,keyChar);
partDos = testString.substring(keyChar+1);
//del índice del asterisco al final
//I finalmente visualizamos el resultado en la consola
println("String Original: "+testString);
println("Primera parte: "+partU);
println("Segunda parte: "+partDos);

 

Finalmente, el tercero y cuarto utilizan una función específica de Processing pensada para esta técnica: split. Veremos primero un ejemplo simple:

//declaramos un STRING con grupos de números separados por UN asterisco
String testString = "2389*324*209800*324423*43321";
//declaramos un array al que le asignaremos directamente todas estas partes
String numeritos[] = split(testString, '*');
//y visualizamos en la consola:
for(int i=0; i " + numeritos[i]);
}

Y para acabar un ejemplo complejo de parsing con Split, que podríamos utilizar junto con un programa que nos manda identificadores de elementos del hardware que tenemos conectado al microcontrolador y sus valores:

/*declaramos un STRING donde haya grupos de números separados por UN 
asterisco, separados a la vez por comas */
String testString = "01*324*54654,02*209,03*324423,04*324423*432*2315"; 
/*declaramos un array al que le asignaremos directamente todas estas partes 
separadas por comas*/
String datos[] = split(testString, ',');
//y por cada parte de este string repetimos el proceso
for(int i=0; i " + numeritos[j]);
  }
}

 

4.- ProMidi

En nuestro caso, y en general, antes de ver ejemplos con código, hay que comprobar que los dispositivos midi están correctamente conectados. Con esta librería, lo podemos hacer con el ejemplo midiSetupBásico, que consta básicamente del código siguiente (comentado):

import promidi.*;

MidiIO midiIO;

void inicializarMidi(){
midiIO = MidiIO.getInstance(this);

println("dispositivos midi disponibles: ");
midiIO.printInputDevices();

 

5.- Ejemplos
velX = velY = potenciometer / 15;
sz = photocell*4;
6.- Práctica