Archivo de la categoría: GNU/Linux

Joanillo Arcade Frontend 1.0.5: ya es multi-emulador

Las máquinas de marcianitos que he hecho hasta ahora sólo llevaban el emulador MAME y eran de un solo jugador (con seis botones). Este año llegarán máquinas de dos jugadores (con 7 botones por jugador), y diversos emuladores. La primera será la mini-bartop modelo Metal-Slug, que está bastante acabada. Y después vendrán las bartop de dos jugadores, buscando un compromiso entre el tamaño y la comodidad.

Los emuladores que se implementan, a part del MAME (mame4all), son el Neo-Geo, Genesis/Mega Drive, GBA y SNES. Para ello se ha tenido que mejorar el front-end que utilizo (y que ahora ya tiene un año de vida), por una versión multi-emulador. Se trata de la versión 1.0.5, que también incorpora algunas mejoras que se han hecho necesarias después de observar como se relaciona la gente con el front-end.

En definitiva, una versión que puedes descargar, y que ha sido programada para que corra con fluidez sobre la Raspberry, y que no busca efectos espectaculares com hacen otros front-ends (por ej. Retropie)

Hackear una ROM de Gameboy

He tenido bastantes problemas para emular los juegos de Gameboy en la Raspberry Pi. Finalmente el emulador Fednafen es el que funciona, tal y como se hace en Pimame. El mundo de los emuladores es bastante complicado. Para entender cómo funciona una ROM por dentro y cómo se programa un emulador que trabaje con estas ROMs se tiene que estudiar la arquitectura del Z80, conocer el ensamblador, y técnicas avanzadas de depuración en lenguaje C. Pero aquí vamos a hacer una cosa relativamente sencilla.

Se trata de hacer un pequeño hack de una rom de Gameboy. Se trata de poner un libro dentro de la ROM, concretamente meter diferentes artículos y textos del gran filósofo catalán Francesc Pujols, aquél que dijo que un día Los catalanes iríamos por el mundo y lo tendríamos todo pagado.

Parto de una rom que ya es un libro, un libro en polaco: Ziarno_Prawdy_-_Book_by_Andrzej_Sapkowski_polish.gbc. Aunque no tengo ni puñetera idea de polaco, arranco la rom con el emulador y la idea está clara: con los botones puedes navegar por los diferentes capítulos, puedes ir al principio, y tienes dos modos de lectura: línea a línea, o página a página. La idea es localizar las posiciones de memoria donde está la información relevante, y substituirlo por la información (los bytes) que interesa.

Digo que este proyecto es bastante sencillo porque tenemos 5 capítulos con un tamaño concreto y me tengo que limitar a estas posiciones y bloques de información. Lo chulo sería poder meter más capítulos, de longitud variable, y poder navegar por todos los capítulos. Pero para hacerlo se tendría que desensamblar el código y entender cómo funcionan los jumps a los diferentes capítulos, y esto sí que sería interesante y más difícil.

Bien, manos a la obra. Uso la utilidad xxd como lector de ficheros binarios, que a una salida hexadecimal y en la parte derecha se puede localizar la información textual relevante.

0004040: 0000 0000 0000 0000 0000 0000 0000 0000 …………….
0004050: 2020 2020 2020 2020 2020 2041 6e64 727a Andrz
0004060: 656a 2053 6170 6b6f 7773 6b69 2020 2020 ej Sapkowski
0004070: 2020 2020 2020 2020 2020 2020 2020 2020
0004080: 2020 2020 205a 6961 726e 6f20 5072 6177 Ziarno Praw
0004090: 6479 2020 2020 2020 2020 2020 2020 2020 dy

En este bloque hemos localizado el título y el autor. El llibro se llama Ziarno Prawdy y el autor es Adrzej Sapkowski (un nombre muy polaco). La posición del autor empieza en 405b (hex), que es 16475 bytes en decimal. Y donde acaba Prawdy es la posición 4091 hex = 16529. Por tanto, son 16529-16475=54 bytes, que yo substituiré por «EL PENSAMENT I LA FILOSOFIA DE FRANCESC PUJOLS«. Con esta técnica hemos de substituir el título y el autor, el menú, y los diferentes capítulos (hay 5 capítulos).

Muestro un ejemplo de código en lenguaje C para substituir en un fichero binario unos bytes por otros en una posición determinada. Un ejemplo sencillo sería:

#include
#include
#include

int main()
{
int posicio = 10;
int tamany;

char *str = «En un lugar de la Mancha»;
printf(«%d\», strlen(str));
tamany = strlen(str);

int counter;
FILE *ptr_myfile;

ptr_myfile=fopen(«b.gbc»,»r+b»);
if (!ptr_myfile)
{
printf(«Unable to open file!»);
return 1;

}

fseek(ptr_myfile,sizeof(char)*posicio,SEEK_SET);
fwrite(str, 1, sizeof(char)*tamany, ptr_myfile);

fclose(ptr_myfile);
return 0;
}

Partiendo de este ejemplo que funciona ya podemos hacer toda la substitución de las cadenas.

0004040: 0000 0000 0000 0000 0000 0000 0000 0000 …………….
0004050: 2020 2020 2020 2020 2020 2045 4c20 5045 EL PE
0004060: 4e53 414d 454e 5420 4920 4c41 2046 494c NSAMENT I LA FIL
0004070: 4f53 4f46 4941 2044 4520 4652 414e 4345 OSOFIA DE FRANCE
0004080: 5343 2050 554a 4f4c 5320 2020 2020 2020 SC PUJOLS
0004090: 2000 2020 2020 2020 2020 2020 2020 2020 .
00040a0: 492e 2042 494f 4752 4146 4941 0a0a 4c27 I. BIOGRAFIA..L’
00040b0: 6573 6372 6970 746f 722c 2070 6f65 7461 escriptor, poeta
00040c0: 2069 2066 696c c3b2 736f 6620 6361 7461 i fil..sof cata
00040d0: 6cc3 a02c 2046 7261 6e63 6573 6320 5075 l.., Francesc Pu

I el hack ha funcionado como se puede ver (y leer) en la foto. En cualquier caso, la Gameboy no es la mejor consola para leer libros, y por otra parte como era de esperar los acentos no funcionan. Puedes descargar el código entero en la wiki.

Frozen. Grabación en casa de Maria y sus amigas


El martes pasado vinieron a comer Maria y tres de sus amigas (Laia, Adela y Martina), con el objetivo de grabar un par de temas de Frozen. Realmente estas niñas están poseídas por Frozen, Maria ya ha visto la peli 5 veces. La cuestión es que cob dos horas y media teníamos que hacer mucha faena, a parte de comer. La comida la solucionamos rápido, arroz a la cubana para 5 y rapidito que hay mucho trabajo.

Manos a la obra, un poco de calentamiento. Yo lo tenía todo preparado: dos micros para las cuatro niñas, que entraban en una pista de Ardour. En otras dos pistas ya tenía preparado previamente las canciones Vol Volar (Let it Go) y Per primer cop en la Vida (For the First Time in Forever), en sus versiones catalanas, que son las canciones que habíamos planificado de grabar (bien, en principio sólo era Vol Volar, la segunda era de reserva).

Hicimos varias tomas del Let it Go, pero tan sólo dos tomas del Per Primer Cop… El resultado es bastante satisfactorio teniendo en cuenta que son niñas de 9 años. A mejorar realmente las entradas (que tiene solución si se practica), y la afinación (más difícil de solucionar). Además, el hecho de que estuviesen emocionadas con esta experiencia no ayudaba nada.

Al final escogíuna de les tomas. Para exportar el audio sin matarme mucho he equilibrado la pista instrumental con la pista de las voces, y he aplicado a las voces un poco de compresión, chorus y reverb, todo de forma moderada, i ya tengo el mp3. Todo esto hecho con Ardour como DAW multipista. (Linux, of course).

Para el tema del video cometí un error. Me contenté con grabar un solo video, pensando que lo juntaría con la versión buena del audio, y no. En los dos videos que se muestran se ve clarament una falta de sincronía entre el video y las voces. A parte de la falta de sincronía en las entradas, el resultado es un tanto irreal. Para la próxima vez grabaré en video todas las tomas, y siempre seré a tiempo de borrar los videos descartados.

En estas grabaciones lo ideal es utilizar cascos para todas las participantes. Necesitaría una cosa similar a esto. Como no dispongo de un amplificador de auriculares, se ha utilizado un monitor de campo cercano, intentando que el sonido no entre por los micros. Esto se consigue controlando la distancia, el volumen y que el monitor quede detrás de los micros. La parte de señal que ha entrado por los micros es mínima, aunque no nula.

Así pues, el material que se ha utilizado es:

  • Ordenador Linux Ubuntu 12.04 con JACK y Ardour
  • Tarjeta de sonido externa, Edirol UA25EX
  • Mezclador de 4 entradas (sólo se utilizan dos)
  • 2 micrófonos
  • Monitor de campo cercano

A continuación se muestra el resultado: dos videos que se han colgado en Youtube. A las niñas les ha encantado ver cómo su video se mezclaba con las animaciones de las protagonistas de Frozen: Elsa y Anna.

Máquina de marcianitos. Proyecto Pimame/PiPlay (Arcade bartop cabinet)

Uno de los recuerdos de mi infancia fueron las máquinas de marcianitos que había en los bares. De cuando en cuando conseguíamos 25 pesetas y podíamos jugar una partida. Entonces, cuando tenía 12 años, no sabía ni qué eran los juegos Arcade… para nosotros eran las máquinas de marcianitos, y basta. Con el tiempo, evidentmente, los juegos se fuero sofisticando a todos niveles: gráficos, sonido,… Paralelamente, en casa jugábamos al Spectrum, cargando los juegos desde las cintas de cassette. Y entonces llegó la era del PC doméstico que lo cambió todo.va canviar tot

Para los que somos de mi generación (40 y pico), las máquinas de los bares representan todo un mundo de recuerdos y vivencias asociados a un mundo en que la electrónica de consumo lo estaba cambiando todo (relojes digitales, coches teledirigidos, …).

Han pasado muchos años, el mundo de los videojuegos ha evolucionado muchísimo, es una industria tan potente com el cine. Cada vez la gente ve menos televisión y va menos al cine (cosa impensable hace tiempo), y la sociedad en que vivimos se caracteriza por una gran variedad de dispositivos conectados a Internet, con una gran y diversa oferta de ocio.

Una gente al entorno del proyecto MAME (Multi Arcade Machine Emulator,) ha emulado las ROMs originales de aquellas máquinas Arcade a diversas plataformas, concretamente al PC. Una ROM es el chip donde estaba el software (firmware) que hacía correr el juego. Este software en código máquina se puede traducir a líneas de código a otras plataformas y lenguajes de programación. Esto es lo que hacen los emuladores. Por tanto, ahora todo el mundo puede jugar a los juegos de los as ’70, ’80 y ’90 en su PC. I así lo hice hará unos tres años en una máquina Linux, cuando descubrí el proyecto MAME y ya pensé entonces en construirme una máquina Arcade.

En estos tres años también han pasado muchas cosas, y concretamente la eclosión del hardware libre, representado por dos proyectos paradigmáticos como son el Arduino y la Raspberry Pi (entre otros). I lo bueno del caso es que el proyecto MAME se ha portado y optimizado a la plataforma de la Raspberry Pi, con todas las ventajas que esto supone de cara construirse un mueble Arcade (presupuesto, espacio, consumo,…). Esta tarea se ha hecho gracias a Shea Silverman y al proyecto PiMAME, que ahora se llama PiPlay.

Así pues este curso pasado me puse manos a la obra y para el verano ya tenía a punto mi mueble bartop con más de 1000 juegos clasificados por categorías (plataforma, galería, shooter, puzzle, fighting, …) i jugabilidad (preferidos, muy buenos, buenos, malos). El proyecto ha sido muy variado y divertido, e incluye entre otras:

  • Construcción del mueble (cortar las maderas, pulir, pintar,…)
  • Configuración de la Raspberry Pi y de MAME
  • Programación de un front-end propio (más detalles en este post)
  • Interfície joystick-USB. Aunque funciona correctamente esta solución, se ha de explorar la posibilidad de configurar el joystick i los 6 botons sólo con los pines GPIO de la RPi. El resultado sería más sencillo y rápido de implementar.
  • Fuente de alimentación 12V-5V
  • Metacrilato, adhesivos
  • Matriz de LEDs para la markee
  • Pantalla plana, conversor HDMI-VGA
  • Amplificador de sonido. La salia de sonido en la Raspberry Pi no es muy buena, y esto se nota a la hora de amplificar el sonido. En este aspecto faltan más pruebas a ver si hay posibilidad de obtener un sonido más limpio.

Después de muchas horas de trabajo, calculo que el presupuesto es de unos 250 euros. La bona noticia es que hay margen para automatizar/mejorar todo el proceso, por ejemplo utilizando una máquina CNC per cortar las maderas.

Aquí puedes ver el vídeo del mueble acabado.

Para más información:

Script para automatizar la creación de anaglifos 3D

Creo que no había hecho ningún post en este blog sobre mi colección fotográfica de insectos. Esta colección está disponible online en http://arthropoda.joanillo.org. Hace más de dos años y medio que está pública en la red, y en estos momentos consta de unas 2000 fotos de unos 350 insectos identificados (es decir, casi nada). Entre las diferentes opciones que hay en la página web hay la posibilidad de visualizar algunos ejemplares en 3 dimensiones (3D), mediante dos de los métodos comunes: ojos cruzados con pares estereográficos, y anaglifos.

Cryptocephalus aureolusEl método de los ojos cruzados es de los más populares porque no requiere de ningunas gafas ni aparatos. Consiste en poner una al lado de la otra las dos fotos que forman el par estereográfico. A la izquierda ponemos la foto que se corresponde con el ojo derecho; y a la derecha la foto que se corresponde con el ojo izquierdo. La técnica consiste en visualizar la pantalla a medio metro aproximadamente, mirar al punto medio de las dos fotos, enfocar a un punto como si estuviese detrás de la pantalla, y dejar que las dos imágenes se junten solas. Entonces, de forma mágica, aparece la foto en toda su profundidad. Si es la primera vez que lo pruebas puede ser un poco difícil, pero vale la pena intentarlo. Inténtalo con el par estereográfico que se muestra, que se corresponde con un escarabajo de la família Chrysomelidae, concretamente un Cryptocephalus aureolus.

Cryptocephalus aureolusOtro método popular de visualizar imágenes 3D son los anaglifos, en los que hay que utilizar las gafas cyan-rojo (o verde-rojo). Consiste en separar las dos imágenes en sus capas RGB, y eliminar para la imagen izquierda la capa roja; y para la imagen derecha la capa cyan. Esto se puede hacer de forma manual con los programas más populares de edición de fotos como Gimp o Photoshop. Finalmente, volver a juntar las imágenes en una de sola, y visualizarla con unas gafas de colores. La visualización 3D en este caso es muy fácil, es automática con sólo ponerte las gafas. El inconveniente es que el resultado final ha perdido calidad cromática.

En este post lo que hacemos es presentar y explicar el script que se utiliza para automatizar la creación de los anaglifos, tal como se utiliza en arthropoda.joanillo.org. Has de tener en cuenta que este script está pensado para sistemas Linux y está programado en bash script. No puedo dar soporte a otros sistemas operativos, pero la idea es totalmente trasladable. La herramienta principal que se utiliza es la utilidad convert que se encuentra dentro del paquete imagemagick. convert es una utilidad en línea de comandos para manipular imágenes, y que te permite acceder a las capas RGB. Para instalar esta utilidad:

$ sudo apt-get install imagemagick

Si queremos extraer la capa roja de una foto haremos:

/usr/bin/convert left_pic.jpg -separate -channel r left_pic_separate_R.JPG

y si queremos combinar dos fotos haremos:

/usr/bin/convert pic1.jpg pic2.jpg -combine pic_combine.jpg

Con todo esto ya podemos poner todo el script, que de hecho es muy cortito:

#!/bin/bash
#two arguments: left pic and right pic
# ./anaglyph_creation.sh 130609_091940.JPG 130609_091944.JPG

pics_or=./;
pics_anaglyphs=./anaglyph/;
pics_temp=./temp/;

echo $1;
echo $2;

basename=`basename "$1"`;
file_without_ext=${basename:0:13}
file_anaglyph=${file_without_ext}_ana.JPG

#anaglyph creation 
#1.Separate red channel for the left pic, and cyan for the right pic:
/usr/bin/convert $pics_or$1 -separate -channel r ${pics_temp}separate_R.JPG
/usr/bin/convert $pics_or$2 -separate -delete -3 ${pics_temp}separate_GB_%d.JPG #elimina el vermell
#2. Combine modified left and right pics in a new one:
/usr/bin/convert ${pics_temp}separate_R.JPG ${pics_temp}separate_GB_0.JPG ${pics_temp}separate_GB_1.JPG -set colorspace RGB -combine $pics_anaglyphs$file_anaglyph

rm pics_temp/*

Enlaces:
-Pares estereográficos: http://arthropoda.joanillo.org/stereo.php
-Anaglifos: http://arthropoda.joanillo.org/anagliphs.php
-wikipedia: http://en.wikipedia.org/wiki/Anaglyph_3D

diatonicbaixos v1.0: ayuda para los bajos del acordeón diatónico

Maria está estudiando el acordeón diatónico (y de paso yo también me he enganchado). Una de las cosas que siempre he encontrado difíciles es la coordinación de la mano derecha (con la que tocamos la melodía) y la mano izquierda (los bajos). Igual que pasa con el piano, que siempre me ha parecido difícil tocar con las dos mans al mismo tiempo.

Aquí va un pequeño programa para ayudar a poner la mano izquierda en el acordeón diatónico. Mientras suena la melodía (se necesita el fichero midi de la melodía), por pantalla se muestran las posiciones de los bajos que se han de tocar (en el acordeón diatónico hay 8 botones para los bajos/acordes, que suenan diferente si abres o cierras el fuelle). Cuando se muestra un botón en color verde significa que hay que cerrar el fuelle; en color rojo hay que abrirlo.

Para la interficie gráfica se ha utilizado la librería ncurses, que es la primera vez que programaba en esta llibrería (y estoy muy contento del resultat obtenido). El programa es un cliente de JACK (el servidor de audio para Linux, www.jackaudio.org), y de hecho es el time master, es decir, controla el transporte. Para utilizar la aplicación lo mejor es lanzar el script bash que se proporciona, diatonicbaixos.sh, donde se pone de manifiesto toda la cadena de programas que se utilizan.

Primero de todo se cambia el tempo deseado al fichero midi mediante el script change_tempo_smf (se proporciona el código fuente). Luego se arranca el servidor JACK, y el sintetizador fluidsynth, que es el que hará sonar la melodía. Después arrancamos la utilitat jack-smf-player, que se encargará de hacer sonar la melodía. También arranco el klick, que es un metrónomo cliente de JACK. Finalmente ya puedo lanzar mi aplicación, diatonicbaixos. El resultado, com se ve en el video, es que suena la melodía mientras se van mostrando las posiciones de los bajos. Se puede cambiar el tempo, se puede habilitar o no el metrónomo, y hay otro parámetro que permite mostrar el siguiente bajo que se tendrá que pulsar.

Para hacerse una idea del funcionamiento del programa lo mejor es ver el video:

Descargar diatonicbaixos v1.0

50 ways… #5. Cómo hacer un soundfont para acordeón

Mi hija está aprendiendo a tocar el acordeón diatónico. Se trata de un acordeón de botones de la marca Castagnari, modelo Studio, con dos hileras de botones en la mano derecha (afinadas en Sol y en Do), y los 8 botones de la mano izquierda son los bajos, divididos en 4 bajos y 4 acordes. Este es el tipo de acordeones que sonaban en les fiestas mayores de los pequeños pueblos del Pirineo. Cuando todavía no había carreteras para llegar a estos pueblos, en el siglo XIX y hasta entrado el siglo XX, los músicos habían de subir a los pueblos a pie o en mula. Por tanto era necesario acarrear instrumentos transportables. Muchas veces un acordeón y un violín animaban el baile en la plaza del pueblo.

En esta ocasión, ya que dispongo de un instrumento nuevo para mi, quiero hacer la práctica de crear un soundfont desde cero, y de esta manera podré utilizar el sonido de este instrument en diferents proyectos. Evidentmente, se ha de empezar mostreando todas las notas. Para hacerlo se utilizará un micrófono de una calidad óptima, intentando que no haya ruidos de fondo. Se grabará a un volumen adecuado, notas largas, y sin producir saturación, en un solo canal. Las muestras se van grabando de forma ordenada y utilizando un nombre de fichero adecuado de manera que no hi haya confusión posible. Para grabar las muestras he utilizado un Ubuntu 12.04 32 bits, interfície Edirol UA-25EX y un micrófono Beyerdynamic TG I5d2d. Se ha utilizado el siguiente comando:

arecord -r 44100 -f cd -t wav -D plughw:UA25EX accordion_C4.wav

Deberemos tener cuidado al samplear los bajos y los acordes, que son botones especiales. Una vez tengamos todas las muestras, con el Audacity editamos los ficheros de onda. Cogemos una parte significativa de la muestra sampleada, intentando que la envolvente sea periódica, y evidentmente no coger los extremos del fichero de onda. Nos aseguramos de que la muestra no tenga saturación, y amplificamos la muestra a un nivel razonable, de manera que todas las muestras tengan un volumen similar. El resultado de las muestras es el siguiente:

Samples Accordion Castagnari Studio by joanillo

Samples Accordion Castagnari Studio (Bass and chords) by joanillo

Entonces ya podemos empezar a utilizar el Polyphone, que será el entorno gráfico que utilizaremos para construir el soundfont. Lo primero que haremos es importar todas las muestras, y diremos cuál es la nota raíz de cada nota, de manera que ya le estamos asignando una frecuencia. Entonces creamos un instrument nuevo (por ejemplo Accordion), que será el único instrumento que contendrá este soundfont. Ahora es cuando tenemos que asociar cada muestra a una nota midi del instrumento que estamos editando. Por ejemplo, para la muestra accordion_C4.wav pondremos:

    \t

  • root key = 60
  • \t

  • key range = 60-60
  • \t

  • attack = 0,2s
  • \t

  • release = 0,2 s

Las notas de los bajos que se hacen con la mano izquierda se corresponden con las siguientes notas midi:

    \t

  • Bajo C = 36 (C2)
  • \t

  • Bajo D = 38 (D2)
  • \t

  • Bajo E = 40 (E2)
  • \t

  • Bajo F = 41 (F2)
  • \t

  • Bajo G = 43 (G2)
  • \t

  • Bajo A = 45 (A2)

Y un caso especial son los acordes que se hacen con la mano izquierda, que se asocian por convenio a las siguientes notas midi.

    \t

  • Acorde CM = 24 (C1)
  • \t

  • Acorde DM = 26 (D1)
  • \t

  • Acorde EM = 28 (E1)
  • \t

  • Acorde FM = 29 (F1)
  • \t

  • Acorde GM = 31 (G1)
  • \t

  • Acorde Am = 33 (A1)

Y es importante recalcar que esta asociación es un convenio. Cuando toque la nota midi 24 se disparará el sonido sampleado que corresponde al acorde CM.

Para los bajos y acordes se ha fijado los valores de attack y release a 0,6s.

Para acabar de definir el soundfont hemos de crear un nuevo preset asociado a este instrumento, de manera que el sonido de acordeón lo tendremos en el banco=0 y canal=0 (000:000). Finalmente ya puedo guardar el soundfont, castagnari.sf2, y ya lo puedo testear, en este caso con fluidsynth, haciendo sonar mi canción preferida: Una Plata d’Enciam, tocada a la manera cómo se hace con el diatónico: la melodía con la mano derecha, y alternando los bajos y los acordes con la mano izquierda.

/usr/bin/fluidsynth -s -l -j -a jack -m jack ./accordion_castagnari_studio.sf2 ./una_plata_denciam.midi

Una Plata d’Enciam by joanillo

En el siguiente post explicaremos cómo se ha generado el fichero midi que acabamos de tocar a partir del editor de partituras lilypond. Tenía ganas de hacer un post sobre lilypond, y concretament ahora que mi hija esta aprendiendo el diatónico, cómo se puede utilizar lilypond para la notación de acordeón.

Referencias:

Solución portátil para un saxo electrónico: Raspberry PI + soft o hard sinte

EWI-USB and Raspberry Pi

EWI-USB and Raspberry Pi

Para tocar el controlador de viento EWI-USB normalmente me conecto al portátil. Ejecuto el fluidsynth o cualquier otro soft sinte. Por tanto, la solución para practicar es EWI-USB + portátil + auriculares. Existe una solución más portable y autónoma? Definitivamente sí utilizando la Raspberry Pi, buscando una solución puramente consola y totalment desatendida: enchufar y tocar. En esta ocasión no utilizo JACK, es una solución purament ALSA. Se trata de instalar fluidsynth, algún soundfont que suene bien y que no pese demasiado, configurar el usuario pi con prioridad realtime, desinstalar cualquier servicio que no tenga que utilizar.

Con un script en /etc/udev/rules.d/ewiusb.rules conseguimos que en el momento que conecto el EWI-USB por el puerto USB se ejecuten los comandos que me permitirán tocar automáticamente: ejecutar fluidsynth y conectar la salida midi del EWI-USB a la entrada midi del fluidsynth. He tenido bastantes problemas con la letencia, pero el script que se muestra más abajo a mi em funciona bien sin latencia.

Además, con un poco de electrónica simple y utilizando los pins GPIO se podría cambiar fácilmente el programa midi y poder escoger entre diferentes instrumentos: saxo, midi, flauta,…

Otra posibilidad, como se ve en la fotografía, es utilizar un sinte hardware com el Roland JV-1010. Como la entrada del JV-1010 es puramente midi se necesita un cable conversor USB2MIDI (por ej, http://www.amazon.com/dp/B0017H4EBG), que muestra sus puertos a ALSA. Con esta solución no has de temer por la latencia, es una magnífica experiencia de usuario, y podemos escoger entre centenares de sonidos.

/etc/udev/rules.d/ewiusb.rules

#/etc/udev/rules.d/ewiusb.rules
ACTION==»add», SUBSYSTEMS==»usb», ATTRS{product}==»EWI-USB», RUN+=»/home/pi/ewiscript.sh»

/home/pi/ewiscript.sh

#!/bin/sh
#/home/pi/ewiscript.sh
#script que s’ha d’executar quan connectem el EWI-USB. Dos casos: a) synth hardware (roland); b) synth software (fluidsynth)

#mirem si tenim connectat el cable usb-midi
if [ -z `/usr/bin/aconnect -iol | grep USB2.0-MIDI | awk ‘/client/{print $1}’` ]; then

#no està connectat: b) synth software (fluidsynth)
if [ -z `pidof -s fluidsynth` ]; then
screen -d -m -S fluidsynth -t «fluidsynth» /usr/bin/fluidsynth -a alsa -m alsa_seq -g 1 -c 4 -z 256 -r 48000 /home/pi/Natural_Oboe.sf2
/bin/sleep 3
/usr/bin/amixer set Master 40%+ > /dev/null
/bin/sleep 2
FLUIDSYNTH=$(/usr/bin/aconnect -o -l | awk ‘/FLUID/{print $2.»0″}’)
/bin/sleep 2
#echo $FLUIDSYNTH
EWIUSB=$(/usr/bin/aconnect -o -l | awk ‘/client/’ | awk ‘/EWI-USB/{print $2.»0″}’)
/bin/sleep 2
/usr/bin/aconnect $EWIUSB $FLUIDSYNTH
/bin/sleep 2
fi
else
#a) synth hardware (roland)
USBMIDI=$(/usr/bin/aconnect -o -l | awk ‘/client/’ | awk ‘/USB2.0/{print $2.»0″}’)
/usr/bin/aconnect EWI-USB:0 $USBMIDI
/bin/sleep 2
fi

Más información, aunque en catalán, en la wiki

RPIJERS: Raspberry Pi Internet Jazz European Radio Stations


Quieres escuchar jazz todo el santo día? En Internet tienes bastante para escoger, por ejemplo, http://www.listenlive.eu/jazz.html. En este proyecto hemos indexado todas estas estaciones de radio para escucharlas de una forma simple y con una interfaz mínima. Y esto lo hemos conseguido con la Blackberry Pi. Sólo necesitamos alimentarla, enchufarla a un cable de red, conectarla a un amplificador, y un botón que nos sirve para arrancar el servicio mpd (Music Player Daemon) y para seleccionar hasta 40 canales.

Puedes descargarte de la wiki (http://wiki.joanillo.org/index.php/Raspberry_Pi:_Internet_Ràdio) el bash script i el fichero con la lista de todas las emisoras. Si quieres que el sistema funcione de forma totalmente desatendida tienes que hacer que el script arranque en el inicio del sistema. La electrónica necesaria es mínima, creo que en el video quedan claras las conexiones, y si no en la wiki hay más información (aunque en catalán).

Os deseo un feliz 2013 y mucho jazz! Aquí va el vídeo: