miércoles, 18 de abril de 2012

Patrón de vibración y ecualizador


Los objetivos marcados para esta semana eran los siguientes:
- Aumentar el ecualizador de 8 barras a 16 barras.
- Quitar el ruido ambiente (30dB).
- Eliminar la componente continua.
- Calcular los patrones de vibración, y asociar la actualización de éstos al Timer.
- Mejorar el aspecto del ecualizador añadiéndole colores según la altura de la barra.

Lo primero que hicimos fue aumentar el número de barras del ecualizador. Para ello lo que hicimos fue en vez de incluir en el cálculo de la energía media 16 muestras por cada barra, fue reducirlo a la media de energías de 8 muestras por barra y distribuir de manera diferente las barras en la pantalla, en vez de tener un ancho de 30 pixeles pasa a 20, y además comienza el dibujo más pegado al borde inferior de la pantalla.

                El siguiente objetivo que nos marcamos fue eliminar la continua, que para ello lo único que hicimos fue anular el término que ocupa la posición 0 del array de energías. Esto lo hicimos ya que la continua no aporta nada en nuestro estudio. También eliminamos de la representación del ecualizador el ruido ambiente restándole 30 dB a la energía media de cada barra ya calculada, si la barra tenía una altura menor de 30dB, automáticamente se ponía a 0.

                Para que se diferenciasen más las alturas de cada barra, multiplicamos por un factor mayor que la unidad la energía media de cada barra, en particular, un factor de 2,5. Observamos que para que el ecualizador aportará más información gráfica era necesario restarle más dB de ruido ambiente por lo que al final dejamos que el ruido ambiente era alrededor de 120dB, dada la alta sensibilidad del micrófono. 

                Lo siguiente que hicimos fue calcular el patrón de vibración. Lo hicimos mediante un método sencillo el cual debemos probar más su funcionalidad. El patrón de vibración se va a calcular cada 100ms, por lo que un patrón se repetirá durante 100ms siempre, ya que la modificación de los valores del patrón por ahora va asociado al mismo Timer que el refrescar el ecualizador gráfico. El cálculo se lleva a cabo con la frecuencia  a la que la energía es máxima y con la energía total. Para calcular el tiempo que durará el patrón lo hacemos con la frecuencia de mayor energía, haciendo una relación lineal. Imponemos que la duración mínima sea 10ms y la máxima 100ms, y lo relacionamos con nuestras posibles frecuencias (0-4000Hz) de máxima energía, siendo 10ms cuando la frecuencia sea 4000Hz y 100ms cuando la frecuencia se 0Hz. Para calcular el ciclo de trabajo de dicho patrón lo hacemos mediante la energía total en dB, imponiendo un máximo de 360 dB y un mínimo de 300 dB haciendo una relación lineal. Por ejemplo si la energía total es de 360dB, el ciclo de trabajo será del 100%  y si la energía total es de 300 dB o inferior será un ciclo de trabajo nulo, consiguiendo que el ruido del entorno no se traduzca a vibraciones, solo se traduzca la voz "cercana" al micrófono. 

                Uno de los problemas que nos encontramos en este momento era que cuando dábamos a parar la aplicación, y salíamos de ella, no paraba de vibrar el dispositivo, hasta que no se forzaba el cierre completo de la aplicación. Esto lo solucionamos añadiendo en el botón de salir una igualdad a null del objeto Vibrate.
                Una vez funcionaba todo lo anterior comenzamos a mejorar el aspecto del ecualizador. En un primer momento todas las barras eran del mismo color independientemente de la altura, lo que implementamos fue que las barras se dividiesen en cuadrados de 20 pixeles cada uno de un color que iba cambiando gradualmente con respecto al cuadrado anterior y posterior, así la barra según la altura a la que llegaba tenía unos colores u otros.  Este cambio gradual de cambio de color lo hicimos definiendo un array de constantes en los que poníamos los colores para después configurarlos a través de “Color.rgb(red, green, blue)”, y añadiéndolos a un objeto de la clase Paint. Nos surgieron una serie de problemas a la hora de implementar estas mejoras ya que configurábamos mal alguna variable, y nos dibujaba solo una barra, o incluso una barra en diagonal. Después de arreglar estos pequeños problemas el aspecto final de la aplicación es el siguiente. 


            
   
Hemos añadido un botón para que el usuario pueda seleccionar si lo que quiere “reconocer” es voz, sino será música pero queda implementarlo destacando en cada caso unas frecuencias diferentes del espectro.

Los siguientes objetivos que nos marcamos fueron:
- Mejorar el patrón de vibración.
- Hacer que la resolución del ecualizador no sea lineal, es decir, diferenciar si el sonido captado del entorno es voz o música, ya que habrá que destacar diferentes frecuencias de trabajo.
- Deshabilitar el giro de pantalla.


No hay comentarios:

Publicar un comentario