Proyecto OpenPipe - GPULstuff.gpul.org/2007_jornadas/doc/2007_JSL_01_OpenPipe.pdf · 2011-03-26 ·...
Transcript of Proyecto OpenPipe - GPULstuff.gpul.org/2007_jornadas/doc/2007_JSL_01_OpenPipe.pdf · 2011-03-26 ·...
Proyecto OpenPipe
VII Jornadas sobre Software Libre (GPUL)
Uniendo música y Software Libre
http://openpipe.wordpress.com/
Santiago J. Barro Torres <[email protected]>
2
“Menú del día”
Proyecto OpenPipe¿Qué?¿Por qué?
El Mundo MIDIIntroducción conceptualDispositivos, mensajes, conexiones
Síntesis de AudioIntroducción a la Tecnología de SintetizadoresPaquete sf2tools
Diseño Conceptual de OpenPipeEventos y sensoresUnidad de procesamiento
3
“Menú del día”
Proyecto OpenPipe¿Qué?¿Por qué?
El Mundo MIDIIntroducción conceptualDispositivos, mensajes, conexiones
Síntesis de AudioIntroducción a la Tecnología de SintetizadoresPaquete sf2tools
Diseño Conceptual de OpenPipeEventos y sensoresUnidad de procesamiento
4
Proyecto OpenPipe
Filosofía OpenSource
Contexto: Informática musical
En realidad, son varios proyectos en uno:
Nivel 0 (kernel): Diseño de un controlador MIDI con apariencia de flauta o gaita. OpenPipeNivel 1: Software relacionado directamente con OpenPipe: Software de configuración y personalización. Paquete sf2toolsNivel 2: Cualquier elemento adicional que pudiera tener relación con OpenPipe. ¿Una live? ¿Web con partituras?
5
¿Qué es OpenPipe?
Informática musical
Interactividad: Comunicación con el PC
Ej.: Composición en un editor de partiturasOpción A: Introducir nota a nota con el ratónOpción B: Utilizar un piano MIDI
¿Qué opción escogeríais vosotros?
6
¿Qué es OpenPipe?
¡Y no sólo eso!
Podemos tocar con nuestro ordenador
Podemos escoger el instrumento
Algoritmos en tiempo real que generen ritmos, armonías básicas, etc
¿Y por qué no?
¡Podría ser nuestro profesor particular!
7
¿Qué es OpenPipe?
¡CREATIVIDAD!Todo un mundo de posibilidades.
¿No os parece fascinante?
Además:
¡El Software Libre no puede permanecer indiferente!
8
¿Por qué OpenPipe?
Estupendo, estupendo. Pero, ¿realmente merece la pena?
En nuestra tierra existe una gran tradición musical
La gaita es uno de los instrumentos más representativos
Existe una gran comunidad “gaiteiril”:Clases de gaitaGrupos y bandasMúsicos profesionales: ¡Carlos Núñez!
9
¿Por qué OpenPipe?
La gaita tiene proyección internacional:AsturiasIrlandaBretañaEscociaBulgariaTurquíaRepública ChecaCroaciaIndiaAlemaniaTúnez...
10
¿Por qué OpenPipe?
PeculiaridadesMaterial de construcción
Madera Metal
Forma del “punteiro” Cónico Cilíndrico
Mecanismo de fuelle Habitualmente, una bolsa de aire: “Fol”
Tipo de “palleta”Tono de afinaciónDigitación
Digitación abierta Digitación cerrada
..
11
¿Por qué OpenPipe?
¿Qué detalles deberíamos tener en cuenta para construír un modelo “electrónico”?
¡La mayoría son innecesarios!
Únicamente necesitamos una estructura cilíndrica (o similar) que detecte las pulsaciones:
¡El resto lo hace el hardware y el software!
Es más, el modelo es extrapolable a cualquier instrumento de viento: Flauta, clarinete, ...
¡Podemos imitar el sonido de cualquier instrumento! (Gracias a la síntesis por software).
12
¿Por qué OpenPipe?
Existen alternativas de calidad:Gaita MIDI (¡La de Hevia!)EPipeVPipeMaster Gaita...
¿Estamos “reinventando” la rueda?
13
¿Por qué OpenPipe?
¡No! OpenPipe es especial en varios sentidos:
Es una de las primeras alternativas basada en una filosofía “Open Source”:
Puede que la primera ¡Es Hardware + Software Libre!
Inconvenientes con las anteriores alternativas Imposibilidad de personalización
Existe cierta insatisfacción al respecto Precio desorbitado
Sobre todo para uso no profesional ¿Hasta qué punto hay compatibilidad con GNU/Linux?
No existe garantía al respecto
14
“Menú del día”
Proyecto OpenPipe¿Qué?¿Por qué?
El Mundo MIDIIntroducción conceptualDispositivos, mensajes, conexiones
Síntesis de AudioIntroducción a la Tecnología de SintetizadoresPaquete sf2tools
Diseño Conceptual de OpenPipeEventos y sensoresUnidad de procesamiento
15
El Mundo MIDI
¡Bienvenidos al Mundo MIDI!MIDI son las siglas de “Interfaz Musical para Instrumentos Digitales”Estandar “de facto” para la comunicación entre dispositivos musicales electrónicos
Los “dispositivos musicales electrónicos” son los “habitantes” del Mundo MIDI :)
MIDI define un FAP Formato de los mensajes Protocolo
Tiempo real Orientado a mensajes No orientado a conexión Realmente sencillo
16
El Mundo MIDI
MIDI representa información musicalIgual que una partitura, pero ¡no son equivalentes!
¿Acaso son equivalentes un diagrama de clases y su implementación? Una partitura tiene infinidad de matices
Tipos de información musical
17
El Mundo MIDI
Representación de la Información Musical:Partitura, representación simbólica
MIDI, representación orientada a mensajes
NOTE_ON(do) ... NOTE_OFF(do)NOTE_ON(mi) ... NOTE_OFF(mi)NOTE_ON(sol) ... NOTE_OFF(sol)NOTE_ON(mi) ... NOTE_OFF(mi)
18
El Mundo MIDI
MIDI define un conjunto de mensajes que permiten describir diversos “fenómenos musicales” a medida que se producen:
Inicio de nota, fin de notaIntensidad
Otros más complejos (en el caso del piano):Pedal derecho:
Fuerte o de ResonanciaPedal izquierdo
Celeste o SordinaPedal central
Tonal o Sostenuto
19
El Mundo MIDI
Habitantes del mundo MIDIControladores
“Capturan” la interpretación del músico y generan los mensajes MIDI correspondientes ¡Aquí estaría OpenPipe!
Sintetizadores Generan sonido como resultado de la recepción de mensajes MIDI
Secuenciadores Tienen la capacidad de “operar” sobre mensajes MIDI:
Almacenarlos en un fichero Editarlos Reproducirlos
¡Necesaria una marca de tiempo (timestamp)!
20
El Mundo MIDI
Esquema de un Sistema MIDI:
21
El Mundo MIDI
Ficheros MIDIEs un contenedor de mensajes MIDI con timestamps
Posiblemente con datos adicionales¿Lyrics?
(Letras de canciones)
Estructurado en pistas Facilitar su edición Puede confundir
¿Diferentes pistas diferentes instrumentos? ¡No! A menos que cada pista esté asociada a un canal distinto.
22
El Mundo MIDI
Conexiones MIDISon conexiones “punto a punto”UnidireccionalesTres conectores, según su funcionalidad:
MIDI IN Entrada de mensajes MIDI. Ej.: Sintetizador.
MIDI OUT Salida de mensajes MIDI Ej.: Controlador
MIDI THRU Repite lo que le llega por MIDI IN. Permite “conexiones en cadena” (daisy chain). Ej.: Sintetizador.
23
El Mundo MIDI
Ejemplos:
24
El Mundo MIDI
Ejemplos:
25
El Mundo MIDI
Ejemplos:
26
El Mundo MIDI
Ejemplos:
27
El Mundo MIDI
Ejemplos:
28
El Mundo MIDI
Ejemplos:
29
El Mundo MIDI
Ejemplos:
30
“Menú del día”
Proyecto OpenPipe¿Qué?¿Por qué?
El Mundo MIDIIntroducción conceptualDispositivos, mensajes, conexiones
Síntesis de AudioIntroducción a la Tecnología de SintetizadoresPaquete sf2tools
Diseño Conceptual de OpenPipeEventos y sensoresUnidad de procesamiento
31
Síntesis de Audio
Pensemos en el siguiente subconjunto de MIDI
¿Cómo distinguimos unas notas de otras? Tenemos que distinguir
Qué nota es de la escala Ej.: Un Do.
Si está alterada (sostenido, bemol o becuadro) Ej.: Un Do#.
La octava a la que pertenece Ej.: Un Do# de la 3ª octava.
32
Síntesis de Audio
Cada nota de la escala tiene un identificador numérico: Identificador MIDI
Ej.: Escala cromática de Do
33
Síntesis de Audio
Modelo de Síntesis de AudioSíntesis por Tabla de Ondas
Existen otros modelos Ej.: Síntesis FM
Se realiza a partir de muestras (samples) grabadas de instrumentos reales
Concepto de “banco de sonidos” Almacena la “definición” de instrumentos Cada instrumento tiene asignado
Preset: Identificador numérico que permite distinguir dos instrumentos de un mismo banco. Bank:Identificador numérico para distinguir dos preset de bancos distintos.
Variantes de un mismo instrumento. La asignación está “estandarizada”
General MIDI.
34
Síntesis de Audio
Modelo de Síntesis de Audio Mensajes MIDI como entrada
De un controlador o un secuenciador Posiblemente configuraremos un instrumento diferente para cada canal en el sintetizador
Sonido audible a la salida Los instrumentos están definidos en el banco
¡Diseño modular!
35
Síntesis de Audio
El banco de sonidos......es una estructura de datos almacenada en un fichero o en una memoria...contiene la definición de uno (o más) instrumentos...es configurable en determinados sintetizadores
Ej.: Sintetizadores Software FluidSynth Synthfont
¡Pero también en Sintetizadores Hardware!En ambos casos, el sintetizador tiene que estar preparado para cargar un banco de sonidos externo.
Tecnologías de bancos de sonidos: GUS Patch: “Gravis Ultra Sound” SoundFont: Especificaciones abiertas de Creative
36
Síntesis de Audio
¡Aprenderemos a definir instrumentos!
La definición de un instrumento consta de dos partes:1. Definición de Samples.2. Definición de Articulación.
Supongamos un escenario típico:Queremos definir un instrumento para utilizar en nuestro sintetizador.
Disponemos de: Un instrumento musical cualquiera. Micrófono. Software para grabar audio.
¡Audacity!
37
Síntesis de Audio
Por ejemplo, supongamos que se hemos grabado las siguientes notas:
Queremos definir un instrumento “gaita”Tenemos que especificar qué sonido se obtendrá según cada petición NOTA_ON
Identificadores 0 – 127 Por sencillez, sólo definiremos para el rango 60 – 72, correspondientes a la escala cromática de Do.
38
Síntesis de Audio
No se conoce, a priori, la correspondencia Nota MIDI – Sample
Tendremos que definirla, de alguna forma
¡No existe un sample para cada nota!Truco: Modificar la frecuencia de una nota que sí tengamos sampleada para obtener las restantes notas
Es preciso conocer la nota asociada a cada sample No es conveniente abusar de ésta técnica
¿Dónde está el equilibro? ¡Depende! ¿Es importante la calidad? ¿Es determinante el tamaño de la tabla de ondas? ¿Puede haber problemas con el procesamiento? ¿Un compromiso entre varios factores?
Utilizaremos éste truco con las notas “cercanas” a la nota sampleada
La “cercanía” es, por supuesto, relativa.
39
Síntesis de Audio
Ejemplo 1:Disponemos de un Do y un Mi sampleadosNos llega un NOTA_ON(Re). ¿Qué sample utilizamos?
Distancia(Do, Re) = 1 Tono Distancia(Re, Mi) = 1 Tono
Respuesta: Es indiferente
Ejemplo 2:Disponemos de un Do y un Mi sampleadosNos llega un NOTA_ON(Do#). ¿Qué sample utilizamos?
Distancia(Do, Do#) = 1 Semitono Distancia(Do#, Mi) = 1 Tono y 1 Semitono
Respuesta: Es mejor utilizar el sample Do La distancia es menor, y por tanto el efecto de la distorsión también es menor
40
Síntesis de Audio
¡Hey! ¡Tenemos un ejemplo pendiente!
Aquí os propongo una posible asignación Como habréis deducido, eso quiere decir que no es la única posible :)
41
Síntesis de Audio
Significado de “Articulación” en música
42
Síntesis de Audio
Paquete sf2toolsEs un conjunto de aplicaciones GPL diseñadas para facilitar la creación de bancos de sonidos en formato SoundFont
Extensión “.sf2” Soportado por FluidSynth y por timidity
Existen versiones para GNU/Linux y para Windows
Forma parte del proyecto OpenPipeEstaría dentro del Nivel 1http://openpipe.wordpress.com/descargas/
Formato “.zip” Formato “.tar.gz” Última versión disponible vía svn
43
Síntesis de Audio
Contenido de sf2tools 1.0.0sf2maker
Pequeño compilador capaz de generar un banco de sonidos SoundFontcompatible
Necesitamos archivos wav con los samples. La descripción estará almacenada en un pequeño script.
También admite modo interactivo.
sf2info Genera una descripción en XML del banco de sonidos
Útil para desarrolladores, usuarios avanzados o incluso terceras aplicaciones. Es capaz de extraer los samples “incrustados” en el banco de sonidos.
stereo2mono Necesitamos trabajar con .wav en formato mono
44
Síntesis de Audio
Contenido de sf2tools 1.0.0Documentación de Usuario
Más de 60 páginasSamples de tres instrumentos distintos
Flauta Alto Flauta Soprano Tin Whistle
Una especie de flauta irlandesa.
Seis scripts de ejemplo para sf2maker Con los que se crean seis bancos de sonidos de ejemplo
Ficheros MIDI para probar Se especifica la configuración de timidity para poder apreciar los cambios
45
Síntesis de Audio
La tecnología Soundfont sigue el modelo aquí descrito:
Definición de Samples Se cargan a partir de archivos “.wav” Identificados por un número
Definición de Articulación Se consigue a partir de la definición de “zonas” Una zona es un concepto abstracto que aglutina:
Un conjunto de notas MIDI. Un sample asociado. Un conjunto de propiedades.
46
Síntesis de Audio
Siguiendo con nuestro ejemplo:
Crearíamos cuatro zonas (de izda. a dcha.) Cada una tiene asociada un conjunto de Notas MIDI
Propiedad keyRange Ejemplo. Zona 1. keyRange(60, 62)
Cada una tiene asociado un sample Propiedad sampleId
Ejemplo. Zona 1. sample 0. Suponiendo que “do.wav” es el sample 0.
47
Síntesis de Audio
PropiedadesEn la tecnología Soundfont se denominan “generators”
Nomenclatura un tanto confusaExisten gran cantidad de “generators”
A nivel básico, los más importantes son sampleID: Identificador 53. keyRange: Identificador 43. pan: Identificador 17. chorusEffectsSend: Identificador 15. reverbEffectsSend: Identificador 16.
Es interesante tener dos tipos de zonasUna zona global
Los “generators” tienen aplicación en todas las zonas del instrumento
Varias zonas locales
48
Síntesis de Audio
Demostración
49
“Menú del día”
Proyecto OpenPipe¿Qué?¿Por qué?
El Mundo MIDIIntroducción conceptualDispositivos, mensajes, conexiones
Síntesis de AudioIntroducción a la Tecnología de SintetizadoresPaquete sf2tools
Diseño Conceptual de OpenPipeEventos y sensoresUnidad de procesamiento
50
Diseño Conceptual de OpenPipe
El objetivo principal del proyecto es proporcionar el diseño e implementación de un controlador MIDI con apariencia de una flauta o una gaita
Nivel 0 (kernel)
51
Diseño Conceptual de OpenPipe
Noción de “evento”Un evento es un hecho cuya ocurrencia tiene un significado especial para nosotros
Normalmente un evento conlleva la ejecución de una determinada acción
Que un hecho sea evento o no depende del contexto Por ej.: Si diseñamos un controlador MIDI con apariencia de piano, posibles eventos serían:
“Pulsar” una tecla. “Dejar de pulsar” una tecla.
En cambio, si diseñamos un controlador MIDI con apariencia de violín, posibles eventos serían:
“Frotar” una cuerda. “Dejar de frotar” una cuerda.
52
Diseño Conceptual de OpenPipe
Noción de “evento”Que un hecho sea evento o no depende del contexto... ¡y también del nivel de detalle!
En el ejemplo del piano:¿Nos interesa conocer con qué intensidad ha sido pulsada la tecla?¿Estamos interesados en “emular” el comportamiento de los pedales?
Lo más normal sería incorporar pedales al controlador MIDI.
En el ejemplo del violín:¿Nos interesa conocer con qué intensidad ha sido frotada una cuerda?¿Nos interesa detectar el “vibratto”?
53
Diseño Conceptual de OpenPipe
Noción de “evento”El concepto de evento es intencionadamente abstracto:
En el caso del piano: Cuando pulsas una tecla, suena una nota.
En el caso del violín: Cuando frotas una cuerda, suena una nota.
Son dos hechos distintos, pero desencadenan la misma acción
Lo complicado es detectar el evento Necesitamos de dispositivos electromecánicos capaces de generar información eléctrica sobre la ocurrencia del evento
Por ej.: Teclas, sensores, etc.
Sin embargo, una vez obtenida la información en forma de señal, el procesamiento es sencillo
La señal puede ser analógica o digital
54
Diseño Conceptual de OpenPipe
Apliquemos lo comentado a OpenPipe¿Qué evento estamos interesados en detectar?
Respuesta: ¡Que un agujero ha sido “tapado” o “destapado”! Denominaremos “postura” a un conjunto de agujeros tapados / destapados.
Cada nota que puede tocar el instrumento tiene asociada, al menos, una postura.
Pueden existir varias notas con posturas alternativas. Denominaremos “digitación” al conjunto de todas las posturas posibles en un determinado instrumento
La digitación debería ser configurable. Ejemplo de digitaciones alternativas:
En el caso de la flauta existe la digitación “barroca” y la digitación alemana.En el caso de la gaita existe la digitación “abierta” y “cerrada” (¡y muchas más!).
55
Diseño Conceptual de OpenPipe
Detección de la posturaOcho “sensores”
Posiblemente se añadirá uno de controlCada “sensor” funciona de forma sensitiva
¡No de forma mecánica! Sería demasiado engorroso.
Cambiaría de estado simplemente con pasar el dedo por encima
Problema ¿Dónde conseguir dicho dispositivo? O alternativamente, ¿cómo construír dicho dispositivo?
56
Diseño Conceptual de OpenPipe
Un posible “sensor”:
57
Diseño Conceptual de OpenPipe
Nuestro cuerpo genera electricidad. Si tocamos con nuestra mano un punto cualquiera del circuito mostrado en la figura anterior, introduciremos una pequeña componente de corriente, de unos pocos miliamperios
La cantidad aproximada habría que estimarla
Si la resistencia es lo suficientemente grande, la corriente que circula por el circuto es pequeña (según la ley de Ohm: V = IR), por lo que llegará un momento en el que la corriente introducida por la persona será significativamente grande como para detectar cuándo el usuario está tocando el circuito, y cuándo no
Sin embargo, el valor de tensión a la salida es impreciso, por lo que habría que pasarlo por un comparador, que generaría finalmente un valor alto o bajo de tensión
58
Diseño Conceptual de OpenPipe
Agrupando ocho o nueve sensores en un cilindro:
59
Diseño Conceptual de OpenPipe
Los cabezales de los “sensores” se incrustarían (literalmente) en el cilindro
El resto de la circuitería del sensor estaría dentro de la unidad de procesamiento El cilindro puede ser de madera, plástico, ...
60
Diseño Conceptual de OpenPipe
Una vez obtenidas las entradas, ¿quién realiza el “procesamiento”?
Un microcontrolador Por ej.: El 8051. Características:
Arquitectura Harvard CPU de 8 bits 2 contadores / temporizadores 4 puertos de entrada / salida de 8 bits Una UART Cinco fuentes de interrupción
2 externas2 para los temporizadores1 para el puerto serie
Oscilador interno ...
61
Diseño Conceptual de OpenPipe
Tarea del microcontroladorSe encarga de realizar la correspondencia “postura” “Nota MIDI”
Se genera un evento NOTE_ON / NOTE_OFF por la interfaz de salida MIDILa correspondencia se realiza mediante una tabla almacenada en memoria
Cada fila de la tabla contiene una postura (en representación vectorial) y una nota MIDI asociadaPara encontrar la nota MIDI tenemos que buscar secuencialmente en toda la tabla
La tabla probablemente no tendrá más de 30 entradas.
62
Diseño Conceptual de OpenPipe
Algoritmo:EstadoAnteriorSensorI = estadoSensorI = detectarEstadoSensorI();
eventoNoteON(estadoSensorI);
while(1 + 1 != 7) {
while(estadoSensorI == estadoAnteriorSensorI) {
estadoSensorI = detectarEstadoSensorI();
}
eventoNoteOFF(estadoAnteriorSensorI);
eventoNoteON(estadoSensorI);
estadoAnteriorSensorI = estadoSensorI;
}
63
Diseño Conceptual de OpenPipe
Notas sobre la implementación:Notación vectorial
La letra I representa una operación sobre un conjunto de 8 valores binarios
Un valor por cada sensor.
Detección del estado de los “sensores”Representado simbólicamente por la pseudofunción detectarEstadoSensorI()
En la práctica, se traduce por consultar un bit de estado en uno de los registros del microcontrolador.
Pseudofunciones eventoNoteOFF y eventoNoteONEnvía un mensaje NOTE_OFF o un mensaje NOTE_ON por la interfaz de salida
Antes se busca la nota MIDI correspondiente en la tabla. La postura se pasa por argumento.
¡Un vector de ocho valores binarios!
64
Diseño Conceptual de OpenPipe
Tabla de Digitación Primera aproximación
65
Diseño Conceptual de OpenPipe
La primera aproximación......es una tabla de digitación correspondiente a una gaita gallega
¡Digitación abierta!Para utilizar otra digitación distinta, basta con definir una nueva tabla
El microcontrolador debe poseer un modo de configuración, en el que se introducirá una nueva tabla
Un programita que se comunica con el microcontrolador por el puerto serie.
¡Sin embargo, se puede mejorar!
66
Diseño Conceptual de OpenPipe
Tabla de DigitaciónSegunda aproximación: NotaBase = 61.
67
Diseño Conceptual de OpenPipe
El funcionamiento es diferenteAntes, la tabla proporcionaba directamente la nota MIDI asociada a una posturaAhora, al valor obtenido en la tabla, se le suma el valor de una variable: NotaBase
Si NotaBase es 61, funciona igual que el caso anterior ¡Pero ahora podemos tocar en cualquier tonalidad!
En la gaita gallega, existen tres variedades principales: Redonda (Do), Grileira (Re) y Tumbal (Sib).
Habitualmente comparten digitación, aunque estén en distintas escalas.Para conseguir el mismo efecto, basta con asignar NotaBase a 59, 61 y 57, respectivamente.
Algo similar sucede con las flautas:Flauta Alto, afinada en Fa.Flauta Soprano, afinada en Do.
68
Diseño Conceptual de OpenPipe
MIDI OUTSe puede obtener la salida MIDI a partir del puerto serie
69
Diseño Conceptual de OpenPipe
MIDI INSe puede obtener la entrada MIDI a partir del puerto serie
70
Diseño Conceptual de OpenPipe
Simulación Software
71
Transparencia Final
¡Gracias por vuestra atención!¡Os habéis portado muy bien!
¡Ahora os toca a vosotros!PreguntasComentariosIdeasDudasInquietudes...
72
Referencias
Blog del proyectoPágina principal
http://openpipe.wordpress.com/Documentación en pdf
Artículo – Introducción al Proyecto OpenPipeArtículo – Introducción a la Tecnología de SintetizadoresDiseño Conceptual de un Controlador MIDI
Software descargablesf2tools
http://www.wikipedia.org/http://www.indiana.edu/~emusic/etext/MIDI/chapter3_MIDI2.shtml
http://www.tigoe.net/pcomp/midi.shtml...