SynprezFM: un véritable émulateur de Yamaha DX7 pour Android par Jean-Marc Desprez
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.
Quelques exemples:
Cool MP3 music fournie sympathiquement par DJ KoSMiX qui fait la démonstration de plusieurs patches de la version 2.0.1
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é:
le développement d'outils pour injecter dans un vrai DX7 des patches de test
le développement d'outils pour analyser (plus ou moins) automatiquement la sortie audio correspondante
de l'intuition et de la chance pour imaginer les astuces numériques rendant possibles un synthétiseur numérique 16 canaux dans un monde de 1983 où l'horloge moyenne des processeurs ne dépassait pas 10MHz!
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:
d'abord on utilise une table pour les sinus (une moitié de période fait l'affaire, la courbe est très symétrique). En fait, c'est un log(sinus) qui est tabulé, voire ci-dessous
ensuite on remplace la multiplication du sinus et du niveau de sortie par l'addition d'un log(sinus) et d'un log(niveau)
enfin on exponentie le résultat (grâce à une autre table).
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.
v1.0 (2012/07/10):
moteur sonore du DX7
Anglais, Français et Espagnol
banque de 32 sons
import de sysex depuis la mémoire externe
v1.0.1 (2012/07/12):
modifications mineures après les premiers commentaires utilisateurs
v1.1.0 (2012/08/09):
menu pour régler les paramètres de modulation
portamento
after touch
pitch bend et molette de modulation (grands écrans)
second clavier (grands écrans)
léger délai stéréo (Je sais, ce n'est pas dans l'original, mais ça rend le son moins sec)
aide dans chaque menu
ajustement de volume automatique (pas vraiment une bonne idée, mieux vaut utiliser l'astucieuse combinaison du cerveau et de l'oreille de l'utilisateur!)
support pour les processeurs Intel
v2.0.1 (2013/02/05):
éditeur de patches
1024 sons d'usine
caractères LED et LCD style DX7
widgets 100% custom
meilleure ergonomie
plus de contrôles sur la page principale (volume, portamento etc.) + vu-mètre
correction du feedback pour les algorithmes 4, 6 et 31
ajustement de la largeur des touches
touches noires style clavecin
nouveaux effets: taps, écho et chorus
configuration du répertoire de stockage externe
v2.1.1 (2013/03/27):
corrections (volume à 0, curseurs peu réactifs, chorus stéréo etc.)
arpéggiateur:
sensibilité à la dynamique du clavier réglable
meilleur contraste pour les textes
Russe
v2.2.1 (2014/11/03); mise-à-jour importante
drivers audio basse latence à partir d'Android 2.3
export en WAV
experimental: possibilité de brancher un clavier USB MIDI à partir d'Android 3.1
classification des sons (tags)
boucles d'arpéggiateur définies par l'utilisateur
affichage mixte pour utiliser 2 synthés sur un petit écran
astuces ergonomiques
microtonalité et tempéraments
nouveaux effets: phaser, panoramic et reverb (en fait, entre l'écho et la reverb)
Italien, Portugais et Allemand
Cette mise-à-jour n'est pas parfaite, mais elle était nécessaire du au passage à Lollipop (le nouvel Android 5.0) le 3 Novembre, parce que la version 2.1.1 ne marche pas sur le nouvel environnement ART (remplaçant Dalvik)
v2.2.2 (2014/11/30): m.a.j mineure
ergonomie: couleurs plus cohérence pour les surfaces actives, flèches pour indiquer ce qui glisse
détection USB
pédale MIDI avec polarité inverse
support pour log MIDI
bug sur les séquences terninées par un silence (pas de bouclage!)
bug sur la sauvegarde des sons
meilleure ergonomie pour la sauvegarde des sons
clavier squelette quand le clavier est inhibé (mode bouclage)
chiffre justifiés à droite
"point" quand le son est édité
sauvegared proposé pour ne pas perdre un son en cours d'édition
nouveaux langages
v2.2.3 (2014/12/01): correction du bug de packaging de la version v2.2.2
v2.2.4 (2019/04/28): correction d'un bug lié à Android Pie
Cette version n'était pas prévue, elle corrige principalement un problème mis en évidence par Android Pie. Les autres évolutions sont les suivantes:
empilement de sons grace à deux synthés controllés par un seul clavier
conséquence: il est possible de controller la balance, la hauteur et le délai de chaque synthé indépendamment
popup pour controller quelles bandes sont visibles ou non, plus intuitif qu'une série de menus et sous-menus
suppression des langues pour lesquelles je dépendais uniquement de Google translate sans vérification possible
Banques fournies:
Les 1024 patches que j'ai sélectionnés étaient disponibles sous différentes formes sur Internet. Ils représentaient 22000 patches que j'ai filtrés pour conserver uniquement 32 sysex de 32 patches chacun.
Il est très difficile d'identifier précisément l'auteur de chacun d'eux, mais je tiens néanmoins à remercier les gens qui ont créés ou mis à la disposition ces patches:
Dave Benson
Frank Carvalho
Tim Conrardy
Jack Deckard
Chris Dodunski
Tim Garrett
Hitaye
Stephan Ibsen
Christian Jezreel
Narfman
Godric Wilkie
Vous pouvez charger les 32 sysex que j'utilise dans SynprezFM sous forme d'un tar gzip (dont 7zip s'accommode parfaitement sous Windows).
FAQ:
Il est des questions auxquelles j'ai répondu régulièrement: elles sont regroupées ici: FAQ