miércoles, 19 de septiembre de 2012

Código fuente y Memoria

Codigo fuente y memoria finales del proyecto.


Desarrollado sobre:

  • PureData 0.42.5
  • Arduino IDE 1.0


Contenido:
Carpeta board: archivos de diseño Eagle de la placa, así como las salidas CAM empleadas.
Carpeta presentación: presentación tentativa para la exposición final.
Carpeta Código:
  • Pure Data: archivos del software para puredata:
    • ArduinoSynth: programa principal (se abre la aplicación abriendo el archivo archivo ArduinoSynth).
    • Deprecated: patches no utilizados ya por el programa.
    • PreviousReleases: backups antiguas del programa.
    • Resources: recursos utilizados en la creación del sistema.
    • Tests: archivos de pruebas realizadas en el programa
  • Arduino:
    • ArduinoSynth: software para Arduino Mega, imnplementa la interfaz USB y cuatro visualizaciones.
    • Requiere el uso de las librerías MatrixController y ArduinoSynthComms incluidas.
    • Librerías MatrixController, ArduinoSynthComms y Tlc4940Mux modificada.
    • DummySender: sketch simple para enviar notas MIDI con un Arduino Duemilanove.



Última modificación 21 mayo 2012 (Entrega final de la asignatura).

Descarga
Memoria: http://www.mediafire.com/?o4a662cu076p35j
Fuentes: http://www.mediafire.com/?ll9le032yykb7gn

martes, 24 de julio de 2012

Compiling Pd-extended on armhf / armel (Raspberry PI) [builds inside]

This post describes how to build Pd-extended on Raspberry Pi, almost everything is based on the post http://log.liminastudio.com/writing/tutorials/how-to-build-pd-extended-on-the-raspberry-pi. All credits goes there.

The official debian build for Raspberry Pi has changed the arquitecture from armel to armhf, to speed up the system by using the hardware floating point unit, this should help Pd since it works with float variables.
This process has been tested with Raspbian 15-7-12.

To get the sources, check the Puredata official page, but, for some reason, it doesn't work for me in the nights, so you can always get it from sourceforge:
0.42.5 http://sourceforge.net/projects/pure-data/files/pd-extended/0.42.5/Pd-0.42.5-extended.tar.gz/download
If you want to use the latest 0.43.1 source, it will be downloaded using the rsync command in the Liminastudio post.

Compiling takes around 4-5 hours in my Raspberry Pi (overclocked around 900 Mhz).

Pd-extended 0.43.1

When build the 0.43.1 version, the steps are the same as the post by Liminastudio, just add the repository line " deb-src http://archive.raspbian.org/raspbian wheezy main contrib non-free rpi " in the step 2. and add "tcl-dev" in step 4.

Pd-extended 0.42.5

But compiling the previous 0.42.5 may be interesting due to its lighter working compared to the newest 0.43, but it requires some changes to avoid problems compiling.

First of all, I suffered from a gcc compiler bug which triggers assembler errors, with the default gcc-4.6 compiler in debian, I had use gcc-4.7, which was able to compile all the sources without errors.

To compile this version, follows the steps 1 to 4 in the Liminastudio post. Then, download the 0.42.5 sources from the link above, and extract in the current folder.

After that, we'll set the gcc-4.7 as the default:
First, install the gcc-4.7, with g++ and libstdc++6, also, we'll install dssi-dev and liblo-dev, because we'll need them (these package may be installed in the step 4 along with the build dependences).
sudo apt-get install gcc-4.7 g++-4.7 libstdc++6-4.7-dev dssi-dev
fftw2 libgfortran3 libmpich1.0gf tcl-dev tcl8.4-dev tk tk8.4-dev
The default compiler is still gcc-4.6, we'll set the alternatives to use 4.7:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.7 10
Compiling the 0.42.5 version is a little trickier, we have to correct some things in the source. First, the pidip package fails compiling, so we'll replace it with the latest version (don't know it if may break it, haven't tested, just lets pd-extended compile). Just remove the externals/pidip folder, and replace it with the pidip source that we can dowload using

sudo apt-get install cvs
xport CVSROOT=:pserver:anonymous@giss.tv:/home/cvs 
cvs co pidip 

Now we need to correct a file in the source , the file is GEM/src/Pixes/videoV4L.h. We'll replace the file with the one here http://pd-gem.svn.sourceforge.net/viewvc/pd-gem/branches/0.92/Gem/src/Pixes/videoV4L.h?view=markup&pathrev=3937 . If we don't do that, we'll get a file not found error (more info here http://ubuntuforums.org/showthread.php?t=1767292).

The last change is in the pdp external, the ---export-dynamic makes the compiler throw a parameter not recognized error, I've deleted from the affeted files, you should change the following files:
    externals/pdp/Makefile line 29
    externals/pdp/scaf/Makefile line 29
    externals/pdp/opengl/Makefile line 23

The source with all these changes is here: https://docs.google.com/open?id=0B_UT435wUJeTQ2hvNG1WcVhsbGM


Then follow the remaining steps from step 8, you have only to change the name of the package in the dpkg command.
In step 8, a parameter has to be removed from the Makefile, but, if we compille all at once, the makefile hasn't been created before compiling, so we'll modify externals/OSCx/configure (info). There, in line 4429, remove "-lpd", do that also in line 98 of externals/OSCx/configure.ac, this last one don't know if it's necesary, but it's better to be sure in a four hour process .

All these corrections are in the following file if you prefer to skip these changes:

If you prefer to install my builds, just follow the first four steps, download the package using wget and the address and install it with dpkg.

Builds armhf (Raspberry Pi), use with Raspbian or similar:

0.43.1 - 23-7-12: https://docs.google.com/file/d/0B_UT435wUJeTVTh3VEFIODNrOU0
0.42.5: https://docs.google.com/open?id=0B_UT435wUJeTRnp0RFZfR1lfa1k

Direct download - for wget for example

0.43.1 https://dl.dropbox.com/s/0r9muesthz5fghi/Pd-0.43.1-extended-20120723.deb
0.42.5 https://dl.dropbox.com/s/p9xh0ia0xbjrnux/Pd-0.42.5-extended.deb





viernes, 25 de mayo de 2012

Presentacion final: video

Video final presentado en la reunión de prácticas especiales de LSED.

Arduino Synth - Presentación final on Vimeo.

En el vídeo, ha sido complicado grabar bien los resultados de la matriz y los efectos, en vivo presenta mayor gama y brillo de colores, además de funcionar más suave.
Sistema completo Arduino Synth.

martes, 22 de mayo de 2012

Conclusiones y futuro del proyecto


Conclusiones

Al comenzar la asignatura de Sistemas Electrónicos Digitales, creímos conveniente realizar una práctica especial en lugar de la práctica básica de la asignatura para tener la oportunidad de, además de elegir y desarrollar nuestro propio trabajo, realizar las labores ligadas a la gestión de un proyecto como son el establecimiento de objetivos y la planificación temporal y de recursos, conservando la libertad de reorientar el proyecto en torno a los áreas que consideramos de mayor interés.

Uno de los objetivos marcados era la portabilidad del programa para distintos sistemas operativos en la parte del programa en el PC, la cual está prácticamente asegurada, ya que nuestro sistema se basa en el framework del sistema operativo a través de Pure Data, disponible para multitud de sistemas operativos.
Esto permite, además de funcionar en todos los principales sistemas operativos actuales, ser compatible con sistemas de terceros, tanto hardware como software: ya sean sintetizadores (software o hardware), fuentes de sonido y datos MIDI, DAWs, etc., y siempre realizando pocas o ninguna modificación a nuestro sistema. Una configuración tentativa de la parte PC podría ser GNU/Linux + Pure Data + Sintetizador software Timidity++, pero el programa actual puede funcionar perfectamente por ejemplo en MacOS/Windows + Pure Data + Logic/Ableton/Cubase...

Por último, debido a que todas las herramientas empleadas: Pure Data, Arduino, etc. son de licencias abiertas, el sistema puede funcionar completamente sobre software libre, lo cual reduce el coste de la plataforma al coste propio del hardware.

Tras tres meses de trabajo, hemos completado el desarrollo de una plataforma que conjuga tanto hardware como software. Ha requerido, aparte de todas las tareas de programación, la creación de protocolos de comunicación y patrones de comportamiento para asegurar que todas las partes del sistema funcionaran de forma correcta y coherente.

Futuro

Debido a que el proyecto es una elección propia debido a nuestro interés en la materia, hemos identificado algunos aspectos que tendrían interés para una realización más completa:

Apertura de código (opensource) Una de las ideas principales en el desarrollo era el uso de herramientas que permitan que el sistema sea abierto, y por ello, el paso natural tras la finalización del proyecto, es la liberación tanto de código software, como esquemáticos hardware. Aún queda por determinar bajo que licencia será, pero algunas candidatas son GPL o Creative Commons.
Plataforma embebida Tras una de las presentaciones de progreso, recibimos la sugerencia de convertir el sistema en una plataforma embebida, que no dependiera de un PC. Esta estructura fue considerada al principio, pero la desestimamos dada la alta complejidad del desarrollo de la parte de análisis y sonido, realizada aquí en PureData, sobre otra plataforma como puede ser un microcontrolador. Sin embargo, tenemos una idea tentativa a la hora de realizar un sistema embebido similar.

Recientemente ha salido a la luz una plataforma llamada Raspberry Pi, que integra un ordenador completo basado en ARM en una placa del tamaño de una tarjeta de crédito, y es de bajo coste (en torno a 35$). Una plataforma de ese estilo permitiría por ejemplo disponer de builds de Pure Data para plataformas ARM y agrupar el sistema completo en un único dispositivo, con la ventaja del menor coste y de un consumo energético y computacional mucho menor en comparación con el del proyecto realizado. La adaptación del sistema sería simple, ya que emplearía la misma estructura, y además, dado que esta plataforma dispone de pines de entrada/salida que permiten el acceso a una UART del propio procesador, se podría eliminar el túnel USB en las comunicaciones disminuyendo de forma drástica la latencia del sistema, factor crítico en un sistema orientado a música y sonido.

domingo, 20 de mayo de 2012