Armonía Práctica

Código binarioPara todos aquellos que estéis estudiando armonía en el conservatorio (o por libre), comentaros que existe un programa con bastante buena pinta que os puede ayudar a hacer los ejercicios:

Harmony Practice

Un programa apropiado para trabajar y corregir tú mismo tus ejercicios de armonía

Por: Fausto Torre (Italia) y Michel Baron (Canadá)

Página Principal

Descargar la versión 2.01 en Castellano (desde la página oficial)

La licencia del programa no es libre, pero al menos es freeware. Por eso lo incluyo aquí, de todas formas. Destacar que el programa está traducido al castellano por Manuel Alberto Vázquez Diz (de Ourense).

Michel Baron es profesor en el Conservatorio de Música de Québec (Canadá), y tiene una página web muy interesante con apuntes online de armonía, contrapunto y fuga. Dichos apuntes están traducidos al castellano y al gallego.

 

2 comentarios

Archivado bajo Información Interesante, Organización, Fuentes y Recursos

Documentación de la Presentación de OpenPipe

Logo GPULComo os había comentado, el proyecto OpenPipe se presentó formalmente dentro de las VII Jornadas sobre Software Libre, organizadas por la asociación de programadores y usuarios de GNU/Linux GPUL de mi facultad.

Hace unos días se ha publicado en la página toda la documentación de las charlas (transparencias, ficheros de ejemplo, un prototipo software en Java, y un video con la presentación). Espero que sirva de complemento a todo lo comentado aquí.

Ha sido mucho tiempo dedicado a la presentación, y me gustaría darle las gracias a todo el GPUL por el apoyo brindado, sobre todo a su presidente Emilio Padrón, y a mi compañera de clase María Casanova por sus ánimos para seguir avanzando en el proyecto, cuando poca gente se interesaba en él.

Muchas gracias a Antonio Armada, gracias al cual la electrónica ha dejado de ser un obstáculo para convertirse en un poderoso aliado. Todo un crack.

Y muchas gracias a toda la gente que me ha escrito mensajes de felicitación, que han sido unos cuantos. Espero haber respondido a todo el mundo, ¡soy muy despistado!

Por último, indicar que si alguien está interesado en presentar el proyecto en alguna otra parte de España (o en otra parte del mundo, who knows?) puede utilizar las transparencias o pedirme material para preparar alguna charla, que podría enmarcarse en alguna de las muchas jornadas sobre Software Libre (y derivados) que se hacen en muchas asociaciones y universidades.

Deja un comentario

Archivado bajo Personal

Introducción a los Microcontroladores (II)

Siguiendo con la descripción de la familia LPC900, hoy hablaremos un poco sobre cómo configurar el puerto serie.

¿Qué es un puerto serie? ¿Y una comunicación serie?

Es muy sencillo. Una comunicación serie es una comunicación en la que la información viaja bit a bit, lo que contrasta con el puerto paralelo en el que es posible transmitir varios bits a la vez. Entonces es sencillo comprender que únicamente es necesaria una línea de datos.

Una UART es un circuito integrado utilizado en las comunicaciones serie. Ahora bien, los conectores a utilizar pueden ser bien diversos. Tenemos el RS-232, el DB-9, por poner un par de ejemplos. Si observáis los esquemas, veréis un montón de líneas más, eso es porque algunos protocolos utilizan señales adicionales. De todas formas, lo más habitual es que se utilice un transmisor (un TxD) y un receptor (un RxD). ¡Y masa (Gnd), por supuesto!

Sin embargo, hay ciertas variables en una comunicación serie que es necesario configurar (en ambos extremos):

  • La velocidad: Medida en baudios o bits por segundo.
  • Bit de paridad: Es un bit adicional que se utiliza para prevenir errores en la transmisión, por lo que por cada byte se envían 9 bits. Normalmente ese noveno bit es configurable, y suele ser función de los otros ocho.
  • Bit de parada: Se refiere a la utilización de un bit adicional como separación entre dos bytes consecutivos (bytes que pueden ser de nueve bits, si es que existe bit de paridad).

Por tanto, antes de iniciar una comunicación serie es preciso establecer los anteriores parámetros. Los dos dispositivos participantes, necesariamente, han de estar igualmente configurados; en caso contrario el resultado es impredecible.

Comunicación serie en la familia LPC900

Existen cuatro modos:

  • Modo 0: La información se transmite y recibe por RxD. Se utilizan 8 bits y la velocidad es fija, a 1/16 de la frecuencia del reloj.
  • Modo 1: La información se transmite por TxD y se recibe por RxD, utilizando un bit de inicio (0 lógico), 8 bits de datos y un bit de parada(1 lógico). La velocidad es configurable utilizando el generador de baudios, o bien por overflow del timer 1.
  • Modo 2: La información se transmite por TxD y se recibe por RxD, utilizando un bit de inicio (0 lógico), 8 bits de datos, un noveno configurable (paridad) y un bit de parada. La velocidad es configurable a 1/16 o a 1/32 de la frecuencia del reloj.
  • Modo 3: Es exactamente igual al modo 2, pero con la velocidad configurable por medio del generador de baudios, o por overflow del timer 1.

En cualquiera de los cuatro modos se transmite siempre en LSB (es decir, primero el bit menos significativo).

¿Qué es eso del generador de baudios? ¿Overflow del timer 1?

Cuando la velocidad es variable, la UART necesita saber cada cuánto tiempo tiene que enviar los bits. Normalmente se utiliza un contador que va sumando uno de cada vez y, cuando se desborda (se produce overflow), indica que hay que enviar el siguiente bit (opción del timer 1) .

Overflow significa sobrepasar, en el sentido que una variable numérica toma un valor más alto del que puede almacenar. Cuando estás programando, las variables numéricas pueden contener un valor de entre un rango limitado. Por ejemplo, el tipo int (entero) suele ser de 4 bytes. Si una variable es de tipo byte, los valores permitidos son los del intervalo [0, 255]. Supongamos que en una variable se inicializa a cero, y que empezamos a sumale uno indefinidamente. 0 + 1 = 1, 1 + 1 = 2, 2 + 1 = 3, etc. Llegamos a 254, 254 + 1 = 255, 255 + 1 = … Overflow (o desbordamiento).

La idea de usar un timer para saber cuando enviar el siguiente dato es bien sencilla. El timer tiene un valor inicial configurable, que es el valor que se cargará en el timer cada vez que se produzca overflow. Según el procedimiento que hemos descrito, cuanto más alto sea el valor cargado menor será el tiempo necesario para desbordarlo (suponiendo que le sumamos uno de forma constante).

Ejemplo a: Cargando 240

contador (instante t) = 240

contador (intante (t + 1)) = 241

contador (instante (t + 2)) = 242

contador (instante (t + 15)) = 255

contador (instante (t + 16)) = ¡Overflow! La UART debe mandar el siguiente bit.

(cargar nuevamente 240 en el contador y repetir el proceso hasta que no haya bits para transmitir).

Ejemplo b: Cargando 180

contador (instante t) = 180

contador (instante (t + 1)) = 181

contador (instante (t + 75)) = 255

contador (insante (t + 76)) = ¡Overflow! La UART debe mandar el siguiente bit.

(cargar nuevamente 180 en el contador y repetir el proceso hasta que no haya bits para transmitir).

Pregunta: ¿En qué caso se envían los datos a mayor velocidad? En el caso (a), puesto que cuanto mayor sea el número cargado en el contador, menos se tardará en llegar al overflow, suponiendo que el resto de condiciones son invariantes.

Normalmente existe una fórmula conocida que relaciona el número a cargar en el contador con la velocidad en baudios. Para el caso del micro que nos ocupa, la fórmula es la siguiente:

Número a cargar = (Velocidad del oscilador / Velocidad en baudios) – 16

En donde “Velocidad en baudios” representa la velocidad a la que queremos transmitir los datos. Por ejemplo, para transmitir a 9600 baudios, suponiendo una velocidad de reloj de 7 373 000 Hz (que es a la que trabaja el micro en cuestión), es decir, unos siete MHz, tenemos que:

(7 373 000 / 9600) – 16 = 752= 0x02F0 (hexadecimal)

Obviamente, sólo podemos configurar la velocidad en los modos 1 y 3.

Para terminar, un generador de baudios no es más que un contador dedicado a gobernar la comunicación serie. Si el micro ya incorpora un generador de baudios, puedes utilizar el contador para otras cosas.

Nota: Contador y timer es lo mismo, por si alguien anda despistado :p

1 comentario

Archivado bajo Información Interesante, Seguimiento del Proyecto

Documentación MIDI

En la página de la MIDI Manufacturers Association (la MMA) se pueden encontrar un pequeño “resumen” de las especificaciones MIDI. En otras páginas se pueden encontrar alguna que otra información interesante, pero que resulta insuficiente para alguien que está diseñando un controlador MIDI.

Es necesario conocer más sobre el MIDI. A un nivel mayor de profundidad.

Una de las opciones es adquirir el libro The Complete MIDI 1.0 Detailed Specification, vendido por la propia MMA. ¿Alguien tiene referencias sobre éste libro? ¿O sobre algún otro que pueda ser útil para un diseñador MIDI?

Editado 12/09/07: Ya he pedido a la biblioteca de mi facultad que encargue la documentación MIDI. Ahora sólo queda esperar a que llegue. Desde aquí, agradecer la amabilidad de nuestra bibliotecaria. ¡¡¡ Gracias Teresa !!!

1 comentario

Archivado bajo Organización, Fuentes y Recursos

Introducción a los Microcontroladores (I)

Hace unos meses me compré la tarjeta MCB900, que me permite programar y trabajar con los micros de la familia P89LPC9XX (en concreto estoy trabajando con el P89LPC935) cuyo fabricante es Phillips:

Partes de la tarjeta MCB900

Os voy a contar un par de cosillas bastante interesantes:

  1. El microcontrolador. Está conectado en el zócalo, listo para ser programado (grabar un programa en su memoria interna) o bien para ejecutar el programa que esté insertado en dicha memoria.
  2. Los jumpers nos permiten configurar la placa para un modo u otro:
    • Por una parte tenemos el jumper AV, que simplemente sirve para indicar que queremos utilizar el potenciómetro que tiene la placa. Si queremos usar el pin 0.3 como entrada / salida, lo más probable es que tengamos que desconectar el jumper.
    • Y por otra parte, tenemos el otro jumper, que nos permite seleccionar entre dos opciones: Reset y Run. Si queremos ejecutar el programa seleccionaremos Run, y si queremos programar el micro seleccionaremos Reset.
  3. La parte inferior de la placa nos permite realizar conectar un circuito digital con cualquiera de los pines del micro: Tenemos tres puertos de 8 bits (Puertos P0, P1 y P2) y un cuarto puerto de 2 bits (Puerto P3). Destacar que, dependiendo del micro, se pueden utilizar varios pines para leer una entrada analógica (en el P89LPC935 se pueden configurar hasta 8 pines como entradas analógicas).
  4. La propia placa incorpora un potenciómetro, que no es más que una resistencia variable que nos permite seleccionar un valor de voltaje entre el rango [0.0, 3.3] voltios. Para utilizar el potenciómetro, es preciso tener configurado el jumper en AV.
  5. La placa también incorpora ocho LED’s que nos permiten conocer en todo momento el estado de cada uno de los pines del puerto 2.
  6. La alimentación de la placa (que ha de ser externa, puesto que el RS232 no incorpora alimentación, al contrario de lo que sucede con el USB) se realiza entre 5 y 9 voltios.
  7. Por último, la placa incorpora un puerto serie (conector DB-9) que cumple varias funcionalidades:
  • Permite conectar la placa a un PC, para descargar un programa en la memoria del micro.
  • Una vez el micro está ejecutando un programa, podemos utilizar el puerto serie para comunicar el micro con otro dispositivo externo (mediante una comunicación serie, por supuesto).

4 comentarios

Archivado bajo Información Interesante, Seguimiento del Proyecto

General MIDI

Como hemos visto anteriormente, el sintetizador nos ofrecía una serie de instrumentos a elegir de los bancos de sonidos. Sin embargo, existía un pequeño problema, bastante sencillo de entender.

Supongamos que creamos un archivo MIDI, una hermosa composición con varios instrumentos, los que vosotros queráis. Cada pista de ese fichero MIDI estaría asociada a un canal, y cada canal estaría asociado en un momento determinado a un instrumento del banco de sonidos. Efectivamente, durante la reproducción de un archivo MIDI, el secuenciador envía un mensaje MIDI especial, que asociaría un instrumento del sintetizador (de toda la gama disponible) a los mensajes que llegasen por un canal concreto.

Siempre que utilizásemos el mismo modelo de sintetizador, no tendríamos el menor problema. Pero como ya habíamos comentado, uno de los puntos interesantes era la modularidad del sistema, por lo que probablemente nos interesaría ejecutar ese fichero con otro secuenciador y con otro sintetizador.

¿Cuál era el inconveniente hasta la llegada de General MIDI? Muy sencillo. Cada fabricante de sintetizadores podían tener los intrumentos en un orden diferente al del resto, lo que provocaba que una composición (en la que nos habíamos esmerado a la hora de escoger los instrumentos) sonase con otros instrumentos completamente distintos. Por ejemplo, el instrumento número cero podía ser un piano en un sintetizador, mientras que en otro podría ser una flauta. O incluso los sonidos de la batería. Nunca se podía saber de antemano cómo sonaría en otros sintetizadores.

General MIDIGeneral MIDI pretendía ser un estándar mínimo en ese aspecto. La idea central era crear una lista de instrumentos que cualquier fabricante podría incluir de forma sencilla en sus sintetizadores (nótese que es un estándar mínimo, lo que deja la posibilidad de incluir instrumentos adicionales).

En otras palabras, el compositor tendría la garantía de que su composición se ejecutaría adecuadamente con los instrumentos deseados, independientemente de la marca del sintetizador usado.

Más información:

http://en.wikipedia.org/wiki/General_MIDI

http://www.midilandia.com/midiland/articulos/art_midiprincipiantes3.htm

4 comentarios

Archivado bajo Información Interesante, Organización, Fuentes y Recursos

Ubuntu Studio 7.04 Feisy Fawn

Estoy siguiendo con especial interés el lanzamiento de la distro “Ubuntu Studio”, que es una Ubuntu orientada a la edición multimedia, tanto para audio como para video. Seguramente podrá instalarse como un paquete desde una Ubuntu normal (o cualquier derivada de Ubuntu), pero todavía no os puedo dar más detalles.

Comentaros a partir de ahora que, además de ser un blog orientado al proyecto OpenPipe, también se incluirán posts relacionados con música y software libre:-)

Deja un comentario

Archivado bajo Información Interesante