SynprezFM: un véritable émulateur de Yamaha DX7 pour Android
par Jean-Marc Desprez



v2.1.1 ideal

Aspect déployé pour SynprezFM II, version 2.1.1

SynprezFM: c'est quoi au juste?

SynprezFM II est un émulateur de Yamaha DX7 (ou devrais-je dire un «hommage»?) qui a été développé sous Linux, puis optimisé pour Android. Il est disponible gratuitement sur Google Play en Anglais, Français et Espagnol, sans publicité.
Il propose 1024 patches de différents styles de son, et dispose d'un éditeur de patches depuis la version 2.0.1. La partie la plus intéressante réside dans le moteur sonore, qui reproduit avec fidélité le rendu de l'instrument original. Il est capable de générer 16 canaux sur des machines de moyenne puissance, et prend en charge 6 opérateurs sur 32 algorithmes. Sur les grands écrans, il affiche 2 claviers indépendants.

Il est également possible d'importer des fichiers au format sysex de 32 patches pour comparer l'émulation avec l'original.

Contrairement aux lecteurs d'échantillons, le logiciel est très compact car il nécessite peu de données en entrée pour définir un son: un patch tient sur 128 octets! Le fichier de l'application sur le Google Play fait 850K, mais la partie calcul (écrite en C) fait juste 150K.

Get it on Google Play

Quelques exemples:

Ici, vous trouverez la carte des patches

Principes de reverse engineering

L'idée était en fait un exercice de style: était il possible de faire tenir un synthétiseur 16 canaux (avec un son raisonnablement complexe) sur un smart phone? La réponse est oui avec des bémols: sur la plupart des machines, les 16 canaux sont joués sans problème, mais sur des petites machines, spécialement sur celles manquant de mémoire cache, seules quelques canaux peuvent jouer simultanément. En fait, la famille Android est diverse, il est donc difficile de tester sur chaque plateforme. Souvent, les petits écrans s'accompagnent de petits processeurs, et dans ce cas la polyphonie est limitée.

Même si les équations de la FM exposés par John Chowning dans son article "The Synthesis of Complex Audio Spectra by Means of Frequency Modulation" est plutôt simple à comprendre, la correspondance entres les paramètres du DX7 et les coefficients des équation n'est pas documentée. C'était donc très stimulant de suivre les traces des concepteurs de Yamaha Corporation. Cela a nécessité:

Un peu de maths...

Concernant les optimisations pour les petits processeurs, un calcul rapide nous apprend combien d'opérations sont effectuées par seconde dans un DX7:
- 50000 échantillons par seconde
- 16 canaux
- 6 opérateurs
=> 50000 * 16 * 6 = 4800000 opérations/sec
Sans compter le feedback qui peut être assimilé à un 7iéme opérateur supplémentaire, ce qui nous donne un total d'environ 5 millions d'opérations à générer dans le pire des cas (tous les canaux jouant ensembles). Pour être honnête, le sampling moderne est de 44100 Hz, ce qui ramène à 4233600 le nombre d'opérations nécéssaires.

Cependant, puisque chaque opération élémentaire implique 1) un calcul de sinus 2) une addition avec la phase d'un opérateur 3) une multiplication par un niveau de sortie, nous avons 15 millions d'opérations par secondes à effectuer. Sachant qu'en 1983, ni les multiplications ni les calculs de sinus n'étaient pas câblés, les calculs doivent être simplifiés de façon spectaculaire: Total: pas de multiplication, uniquement des lectures de tables et des additions. Nous laisserons de côté la CPU utilisée par les événements basse fréquence telle que les enveloppes, LFO ou les modulations utilisés au cours du jeu. Très facile même pour le matériel des années 80 (avec certes un peu de redondance). Sans compter pour nos appareils high-tech du 21ième siècle.

Versions et feuille de route:

SynprezFM est complètement gratuit, et sans aucune pub (Je m'efforce de garder la CPU et les pixels pour le fun!). Il a juste besoin d'accéder aux répertoires externes (micro SD par exemple) pour importer ou exporter des fichiers sysex.