Flauta electrónica. Honner flute MODify.




Introducción:

Adaptación de una flauta dulce marca Honner para la síntesis de audio, pulsación ligera a través de botones artesanos magnéticos y sensibilidad de soplido a través de un micrófono piezoeléctrico. La conexión de la flauta al ordenador se hará a través de dos conexiones: una conexión USB gestionará 11 caracteres de teclado y una conexión minijack gestionará el micrófono.
La motivación del proyecto es la de crear un sistema para digitalizar la interpretación de la flauta dulce de un modo económico, sencillo y accesible a cualquiera, ya que los modelos existentes en el mercado son caros. En una segunda fase se creará un software que adaptará el sistema al estandar MIDI.
La flauta dulce tiene 8 agujeros 3 de los cuales son de pulsación doble, pues se puede tapar todo el agujero o sólo medio para obtener las distintas afinaciones; el resto son botones simples con sólo dos posiciones cerrado o abierto.
El proyecto se basa en el uso de teclados de computador ordinarios, por su bajo coste, siendo sus teclas contactos binarios, pulsado-no pulsado. Cinco botones usarán una simple tecla mientras que los tres botones dobles usarán dos teclas cada uno para emular los distintos tipos de pulsación.


Hacking Keyboards:
Estudio sobre el funcionamiento de los teclados y diagramas de su matriz de conexión.









Desmontado el teclado extraigo la electrónica y escaneo las planchas de acetato con la matriz de conexionado.





Los esquemas de conexión varían según el modelo de teclado, utilizando un editor de imagen coloreo las distintas pistas para identificar el esquema.

Por varias cuestiones la mejor opción es usar teclas alfanuméricas, al observar la matriz de conexiones en las planchas de acetato deduzco que este teclado puede manejar hasta 6 teclas simultáneas.
Necesito 11 teclas, así que empleo 2 teclados con una combinación de teclas optimizada.
Mi elección es {Q,S,C,T,H,-} para el primer teclado y {1,W,D,I,O} para el segundo.
Las teclas (Q,T),(S,H) y (I,O) pueden compartir uno de los contactos al compartir una fila de teclas.

Un HUB USB conecta ambos teclados, de este modo el usuario debe conectar un solo cable USB.
De cada teclado salen varios pares de cables de distintos colores(Ethernet), cuando hacemos contacto con dos cables del mismo color pulsamos una tecla de las seleccionadas.
Para facilitar la identificación, el código de colores puede ordenarse de cálido a frío: rojo, naranja, amarillo, verde, cyan, azul, violeta...


Creación de la barra magnética que servirá de soporte a la electrónica:

Una varilla de madera insertada en la flauta sirve de soporte a los contactos de los botones, al cableado y al contenedor de la electrónica, esta contiene imanes incrustados que atraen magnéticamente a los botones como modo de fijación.



















Inserto a fondo una varilla de diámetro 9 mm. por el agujero final de la flauta, lijándola hasta que entre sin forzar, corto la varilla con 4-5 cm. extra, extraigo la varilla y avellano una de las puntas, perforo la otra punta unos 6 cm. haciendo el máximo hueco posible, pues por el pasarán todos los cables.
Realizo un corte perpendicular al cilindro en la punta perforada, a unos 5'5 cm, para tener acceso al agujero desde el interior y vacío un buen trozo de la parte inferior del cilindro para hacer hueco a los cables.
Sueldo la cápsula piezoeléctrica(micro) con 2-3 m. de cable mono, enfundado con buen acabado, cuyo par sea extremadamente fino y flexible.
Hago una cuña en el lado avellanado para que quepan los cables y adhiero el micro con la termoencoladora.
Trazo, con dremmel y disco, unas guías sobre la varilla para insertar los cables y se van fijando con termocola en el hueco sin que sobresalgan.
 Inserto el cable enfundado del micro por el agujero de la varilla y la varilla dentro de la flauta dejando 2 mm. de espacio entre la boquilla y el micro.
Marco los agujeros de la flauta sobre la varilla, extraigo la varilla y avellano en las marcas unos 4 mm. para hacer hueco a los imanes.
Fijo los imanes con termocola.
 Trazo, con Dremmel, guías superficiales para los contactos de los teclados hacia cada uno de los imanes y fijo los cables con termocola.



















Sueldo las superficies de contacto a los cables y las fijo sobre los imanes con termocola con cuidado de que no sobrepasen la dimensión de la varilla, si es necesario las retoco con Dremmel para evitar que sobresalgan.
Instalo la caja de plástico que ocultará la electrónica: taladro el centro una de las piezas a 8mm, corto el cuello de una garrafa por debajo del nervio de tope del tapón, adhiero el cuello a la pieza del tupper con termocola, taladro el centro del tapón a 8mm e inserto el tapón en la varilla enroscándolo al cuello.
Perforo un corcho con forma de cono truncado para fijar la parte interna de la varilla y tras quitar la boquilla de la flauta lo ajusto entre la varilla y el interior de la flauta.
Recoloco la boquilla.







 




















Diseño de los 2 tipos de botón.
Los botones deben favorecer la pulsación rápida, ser atraídos por los imanes y ser desmontables.
  • Botón de 2 contactos:


  • Botón de 3 contactos:
  • Conexionado de contactos y ensamblado.
Diagrama de interacción:

Código de programación:

//Flauta virtual  
import ddf.minim.*;
import ddf.minim.signals.*;
Minim minim;
AudioOutput out;
AudioInput in;
SineWave sine;
PFont font;

boolean[] agujeros= {

//array booleana que se actualiza según estén pulsados o no los agujeros
  false, false, false, false, false, false, false, false, false, false 

, false};
int[] teclas= {

 113,115,99,116,104,45,49,119,100,105,111//Q,S,C,T,H,-,1,W,D,I,O 2teclados
};

float[] notas= {//notas correspondientes a los sonidos de flauta
  /* 
 1174.659,
 1108.731,
 1046.502,
  987.767,
  932.328,
  880,
  830.609,
  783.991,
  739.989,
  698.456,
  659.255,*/
  622.254,
  587.33, 
  554.365, 
  523.251, 
  493.883, 
  466.164,   
  440, 
  415.305, 
  391.995, 
  369.994, 
  349.228, 
  329.628, 
  311.127, 
  293.665, 
  277.183, 
  261.626
};
String[] patrones= { 

//patrones de agujeros que hacen sonar las notas 

 1=tapado, 0=destapado
 /*"10101101100", 
  "10101101111", 
  "10100110000", 
  "10110110000", 
  "10110111100", 
  "10110000000", 
  "10110100000", 
  "10111000000", 
  "10111010000", 
  "10111100000", 
  "10111110000", */
  "00011111000", //RE#
  "00010000000", //RE
  "00110000000", //DO#
  "11010000000", //DO
  "11100000000", //SI
  "11101100000", //LA#
  "11110000000", //LA
  "11110110000", //SOL#
  "11111000000", //SOL
  "11111011100", //FA#
  "11111100000", //FA
  "11111110000", //MI
  "11111111000", //RE#
  "11111111100", //RE
  "11111111110", //DO#
  "11111111111"  //DO
};
ArrayList<String>patronesList=new ArrayList<String>(Arrays.asList(patrones));
float vol=0;
   
void setup()
{
  size(512, 200, P2D);
  minim = new Minim(this);
  minim.debugOn();
  // get a line out from Minim
  out = minim.getLineOut(Minim.STEREO);
  // get a line in from Minim, default bit depth is 16
  in = minim.getLineIn(Minim.STEREO, 1024);
  // create a sine wave Oscillator
  sine = new SineWave(311.127, 0, out.sampleRate());
  // add the oscillator to the line out
  out.addSignal(sine);
  
 
}

void draw() {
  background(0);
if(abs(in.left.level()-vol)<0.02){ 

sine.setAmp(map((in.left.level()-vol)/2,0.02,0.9,0,1)) ;
} else{sine.setAmp(map(in.left.level(),0.02,0.9,0,1)) ;}
text(vol, width/4, 2*height/4);
vol=sine.amplitude();
text(in.left.level(), width/4, height/4);

  String pattern="";
  for (int i=0;i<agujeros.length;i++) {
    if (agujeros[i]) {
      pattern+="1";
    }
    else {
      pattern+="0";
    }
  }
  
  //println(pattern);

int patron=patronesList.indexOf(pattern); 
  if(patron!=-1){
 sine.setFreq(notas[patron]);}else{sine.setFreq(notas[1]);}
}

void keyTyped() {
  int code=int(key); 
//println(code);
  for (int i=0;i<teclas.length;i++) {
    if (code==teclas[i] && !agujeros[i]) {
      agujeros[i]=true;
    }
  }
  
}
void keyReleased() {
  int code=int(key);
  int i=0;
  while (code!=teclas[i] && i<teclas.length-1) {
    i++;
  }
  
  agujeros[i]=false;
}
void stop()
{
  out.close();
  in.close();
  minim.stop();
  super.stop();
}

Referencias:
[1]     Peacock, Craig. “Making sense of the USB standard”. 17-09-2010 < http://www.beyondlogic.org/usbnutshell/usb1.shtml>22-03-2012
[2]     Murray,  Scott. “Processing Reference”. MIT. 17-09-2010 <http://www.procesing.org/reference>22-03-2012
[3]     Di Fede, Damien. “MINIM  Library.” 29-06-2007<http://code.compartmental.net/tools/minim/ >22-03-2012

7 comentarios:

  1. Precioso experimento, y la programación comentada que me parece que la entiendo y todo.
    Tengo curiosidad por escuchar el resultado, cuelga alguna muestra porfaaa.
    Muy chulo el blog!!

    ResponderEliminar
    Respuestas
    1. Hola Pilar, este proyecto está en desarrollo, pero el mes que viene le meto mano y te prometo hacer algún vídeo cn el funcionamiento.
      De momento, si quieres, puedes echar un vistazo a la ocarina, he subido un vídeo mu friki, que me gustan a mi...
      http://lacacharreriadejordiet.blogspot.com.es/p/ocarina-electronica.html
      Un abrazo wapa y recuerdos a Sor Kampana!

      Eliminar
  2. ERES EL MASTER!!Enhorabuena por tus experimentos...

    ResponderEliminar
  3. me puedes ayudar a saber como conectar sensores de dos tiempo en teclado usb solo utilizando teclado numerico en especifico las teclas 2,4, 5, 6 y 8. las cuales controlaran subir, bajar, derecha, izquierda y seleccionar. gracias. att. norlan.amador@gmail.com

    ResponderEliminar
    Respuestas
    1. Buenas, ¿Has hecho fotografías de las planchas de acetato? ¿Porqué necesitas que sean esas teclas específicamente?

      Eliminar
  4. Buenas, me encanta tu proyecto. Intento adaptarlo a una flauta hecha con sensores simples (chinchetas como tu ocarina), que cuando se detecta la pulsación de diferentes combinaciones de chinchetas, envíe unos mensajes MIDI al PC, pues el sintetizador virtual del PC interpretará esos mensajes MIDI y los reproducirán los altavoces del PC. Pero no consigo configurar correctamente el código para ello. ¿Me podrías orientar con él? Un saludo.

    ResponderEliminar

Licencia Creative Commons
Las obras contenidas en este blog, creadas por Jordi Arnal Andrés están bajo licencia:
Creative Commons: Reconocimiento-NoComercial-CompartirIgual 3.0 Unported