See updated (2012-09-16) Instructions at Antoine's blog: antoine.villeret.free.fr

analog synth emulation with puredata on Raspberry pi

analog synth emulation with puredata on Raspberry pi

La première chose que j’ai faite après avoir déballé ma Raspberry pi a été d’essayer puredata (avec Cyrille Henry), voilà le détail des étapes…

The first thing I did after having unpacked my Raspberry Pi was to try puredata (with Cyrille Henry).  This is the detail of the steps...

1. Installer et configurer Linux

1 Install and configure Linux

On trouve sur la page de téléchargement de Raspberry (http://www.raspberrypi.org/downloads ) quatre images, nous avons choisi Raspbian qui est la version optimisée. Pour transférer l’image sur une carte SD nous avons suivi la procédure décrite ici :
http://elinux.org/RPi_Easy_SD_Card_Setup.

On the download page for Raspberry Pi ( http://www.raspberrypi.org/downloads)
you will find four images,  We chose Raspbian which is the optimized version. To transfer the image to an SD card we followed the procedure described here:
http://elinux.org/RPi_Easy_SD_Card_Setup
.

Au démarrage un utilitaire de configuration se lance proposant pas mal de personnalisations telles que l’extension de la partition à l’ensemble de la carte SD, l’agencement du clavier, la langue… On note l’activation par défaut de l’accès SSH qui peut s’avérer utile pour prendre le contrôle de la carte sans avoir besoin de lui brancher clavier, souris et écran. En ce qui concerne la mémoire (memory split), on a choisit d’allouer le minimum de mémoire pour la vidéo (16 Mo). On peut lancer la mise à jour si la carte est connectée à internet (par défaut, l’interface réseau est configurée en client DHCP). Une fois la configuration terminée, nous avons fait une mise à jour manuelle via la commande :
sudo apt-get update
sudo apt-get upgrade

At startup a configuration utility launches offering a lot of customizations such as the extension of the partition to the whole of the SD, the layout of the keyboard map, setting the language... There is the default activation of SSH access which may be useful to take control of the card without the need to connect keyboard, mouse and screen.  With regard to the memory (memory split), we chose to allocate the minimum memory for video (16 MB). You can launch a software update if the adapter is connected to the internet (by default, the network interface is configured in DHCP client). Once the configuration is complete, we do a manual update via the commands:

sudo apt-get update
sudo apt-get upgrade

Ne pas oublier de redémarrer ensuite pour que tous les changements s’appliquent : sudo reboot.

Do not forget to restart then for all changes to apply: sudo reboot.

2. Installation de Puredata

2 Installation of Puredata

Miller a beaucoup travaillé à l’optimisation de puredata pour Raspberry Pi depuis qu’il en a une et on retrouve ces améliorations dans la version de développement (actuellement 0.44) disponible sur le serveur git. Pour y accéder on a donc besoin de git, on aura également besoin par la suite de tk8.5-dev et libasound2-dev, on les installe tous en même temps :

Miller has done a lot of work with puredata for Raspberry Pi optimization, ever since there was one.  He has placed these improvements in the development version (currently 0.44) available on the git server. To access this you will therefore need git. You will also later need tk8.5-dev and libasound2-dev -- This installs them all at the same time:

sudo apt-get install git tk8.5-dev libasound2-dev

sudo apt - get install git tk8.5 - dev libasound2-dev

Puis on récupère un clone de la version de développement de pure-data

git clone git://pure-data.git.sourceforge.net/gitroot/pure-data/pure-data pure-data

And then we get a clone of the version of development of puredata.

git clone git://pure-data.git.sourceforge.net/gitroot/pure-data/pure-data pure - data

Au moment où j’écris ces lignes, aucun des deux systèmes de compilation ne fonctionne. Il manque le fichier src/configure.
Nous avons récupérer celui de la version 0.43 qui fonctionne.
Pour compiler on utilise donc l’ancien système de Miller :

cd pure-data/src
./configure
make
sudo make install

At the time when I write these lines, neither of the two systems of compilation works. There is a missing file:  src / configure.
We retrieve the 0.43 version that works.
To compile this we therefore used the old system of Miller:

cd pure-data/src
. / configure
make
sudo make install

La compilation dure à peu près une demi heure, soyez patient.

The compilation takes about  half an hour, be patient.

Miller Puckette note Miller Puckette note
As I recall it worked to do:
git clone ...
cd pure-data/src
autoconf
./configure
make

I didn't do sudo make install but one always can. and I probably had to apt-get install autoconf for this work.
BTW... "configure" is not part of the source but I add it to the tarball I release as "Source" to save people the necessity of installing autoconf.

3. Optimisation

3 Optimization

Pour optimiser puredata on peut suivre les recommandations de Miller :
http://puredata.info/community/pdwiki/Optimize

dont voici les plus importants :
- Run PD as sudo or root (or with an LSM-enabled kernel). : n’est plus nécessaire depuis la version 0.44
- run pd with -rt flag : important
On peut également modifier le fichier /etc/security/limits.conf afin de donner plus de priorité à puredata en ajoutant les lignes suivantes :
* – rtprio 99
* – memlock 1000000000.

To optimize puredata can follow Miller’s recommendations:
http://puredata.info/community/pdwiki/Optimize

Here are the most important things:
-Run PD as sudo or root (or with an LSM-enabled kernel). : is no longer needed since version 0.44
-run pd with - rt flag: important
You can also edit the /etc/security/limits.conf file to give more priority to PureData  by adding the following lines:
* -rtprio 99
* -memlock 1000000000

En terme d’éditeur de texte, nano (mode console) et leafpad (mode graphique) sont installés par défaut

As for a text editor, nano (console mode) and leafpad (graphical mode) are installed by default.

Ne pas oublier de les lancer en tant que root (en précédant les commandes de sudo) pour pouvoir modifier les fichiers protégés.

Do not forget to launch as root (before the sudo commands) to be able to edit protected files.

 

 

4. Sortie audio

4 Audio output

La Raspberry pi possède une sortie analogique stéréo de très mauvaise qualité. Il s’agit en fait d’une sortie PWM du processeur qui est filtrée.

The Raspberry Pi has a stereo analog output of very poor quality. In fact it's the PWM output from the CPU that is filtered.

En revanche il est possible de sortir du son à travers la sortie HDMI. D’ailleurs celle-ci s’active par défaut si un écran est connecté.

On the other hand, it is possible to get sound out through the HDMI output. Indeed HDMI is active by default if a screen is connected.

Pour plus d’information sur la configuration audio, voir ici :

 http://elinux.org/R-Pi_Troubleshooting#Sound.

For more information on the audio configuration, see here:
http://elinux.org/R-Pi_Troubleshooting#Sound

.

Certains écrans HDMI possèdent des enceintes intégrées et même une sortie analogique du signal audio converti. Bien que cette sortie souffle pas mal, elle est toujours de meilleure qualité que celle intégrée à la carte…

Some HDMI monitors have built-in speakers and an analog output of the converted audio signal. Although this approach is still a bit defective, it is still better than the integrated card...

Nous avons ensuite branché une carte son USB « driverless » (Edirol UA-1A). La sortie fonctionne (en désactivant l’entrée). Mais lorsque l’entrée est activée, il est difficile d’obtenir un sinus sans clic…

We then connected a soundcard USB "driverless" (Edirol UA-1 A). The output functions (by disabling audio input). But when audio input is enabled, it is difficult to get a sin wave without clicks...

 

 

5. Le synthé analogique

5 Analog synth

Cyrille Henry a développé il y a quelques années déjà une émulation de synthé analogique qui sonne magnifiquement bien. Le patch est disponible ici :

Cyrille Henry has already developed over the last few years an emulation of analog synth that sounds beautiful. The patch is available here:

http://pure-data.svn.sourceforge.net/viewvc/pure-data/trunk/externals/nusmuk/nusmuk-audio/

http://pure-data.svn.sourceforge.net/viewvc/pure-data/trunk/externals/nusmuk/nusmuk-audio/

Pour le récupérer, il faut utiliser svn :

sudo apt-get install subversion pour installer svn
svn checkout https://pure-data.svn.sourceforge.net/svnroot/pure-data/trunk//externals/nusmuk/nusmuk-audio/ ~/nusmuk-audio
cd ~/nusmuk-audio on se place dans le dossier nusmuk-audio
make on compile les quelques objets nécessaires
cd examples
pd analog_synth_emulation.pd        pour lancer le patch
Il vaut mieux le lancer avec l’interface graphique, car par défaut l’audio n’est pas active et le patch ne fait pas de son (il faut cliquer sur le toogle tout en haut).

To retrieve it, it’s necessary to use svn:

sudo apt - get install subversion to install svn
svn checkout https://pure-data.svn.sourceforge.net/svnroot/pure-data/trunk//externals/nusmuk/nusmuk-audio/ ~/nusmuk-audio
cd ~/nusmuk-audio go to the nusmuk-audio folder
make compiles a few necessary objects
cd examples
PD analog_synth_emulation.pd        to launch the patch
It is better to start with the GUI, because by default audio is not active and the patch does not make sound. (You need to click on the toggle at the top).

 

 

6. Conclusion

6 Conclusion

Miller Puckette note Miller Puckette note
- the PWM output is actually buggy -
when it's all fixed it will be much better than it is now.
there's stuff about that here:
http://www.raspberrypi.org/phpBB3//viewtopic.php?f=38&t=10538

En terme de performance, aucun clic audible avec uniquement la sortie stéréo active que ce soit en HDMI ou avec la carte USB Edirol.
En HDMI : latence de 25ms et taille de bloc de 64 samples.
En USB avec Edirol UA-1A : latence de 10ms et taille de bloc de 64 samples.
L’interface graphique ne fait pas énormément baisser les performances, on peut atteindre 20ms de latence avec la sortie HDMI sans interface graphique. En revanche le fait de ne pas avoir la possibilité de bouger des fenêtres évite d’avoir des clics…

Il est assez satisfaisant de voir qu’en quelques heures une carte électronique grande comme une carte de crédit est capable de produire des sons dignes des synthés analogiques gigantesques d’il y a quelques décennies !
   :)

In terms of performance, no audible click with only stereo output active either HDMI or USB Edirol card.
In HDMI: Latency 25ms, and block size of 64 samples.
In USB with Edirol UA-1a: latency 10ms and block size of 64 samples.
The GUI does not greatly lower performance, can reach 20 ms of latency with HDMI without graphical user interface. However the fact of not having the ability to move windows helps avoid to causing clicks...

It is quite satisfying to see that in a few hours a board only as large as a credit card is capable of producing audio comparable to  analog synth sounds from just a few decades ago!    :)

Prochaine étape : se sevir des GPIOs pour piloter le synthé depuis une interface physique.

Next step:  cracking  the GPIOs for a synth from a physical interface.

Cet article a été publié le Jeudi 13 septembre 2012 à 23:04 et est classé dans News. Vous pouvez en suivre les commentaires par le biais du flux RSS 2.0. Les commentaires et pings sont fermés.

This article has been published Thursday, September 13, 2012 23: 04 and ranked in . You can follow comments through the stream span>. The comments and pings are closed.