SynprezFM: a full-fledged Yamaha DX7 emulator for Android
by Jean-Marc Desprez

v2.3 ideal

Expanded look for SynprezFM II, version 2.3

What is SynprezFM?

SynprezFM II is a Yamaha DX7 emulator (or should I say "tribute"?) that was initialy developed under Linux, then optimized for Android. It is freely available on Google Play in English, French and Spanish, with no advertisements
It offers 1024 patches of different types of sounds, and ncludes a patch editor since version 2.0.1. The most interesting part lies within the sound engine, that reproduces with quite a decent accuracy the sound of the original DX7, given the same patches. It is able to generate 16 channels on machines of average power, and supports the 6 operators across the 32 algorithms. On large screens, it can even display 2 independant keyboards.

It is also possible to import 32 patch sysex files to compare the emulation with the original

Unlike sampler readers, the software is very compact because it generates the sound with very few data as input: a sound patch is just 128 bytes! Indeed, the .apk is 850K, but the core (JNI library) is just 150K.

Get it on Google Play

Some sound:

Here, you can find the patch table

Reverse engineering principles

The idea was actually an exercise in style: was it possible to fit a 16 voice synthesizer into a smart phone? The answer is almost yes: on most machines, the 16 voices are played with no problem, but on some small devices, especially on those lacking cache memory, only few voices can be rendered concurrently. Actually, the Android family is very diverse, so it is difficult to test on every platforms. Still, small screen devices often come with a small processor, and in this case the polyphony is limited.

Even if the equation of FM developed by John Chowning in his paper "The Synthesis of Complex Audio Spectra by Means of Frequency Modulation" is quite simple to understand, the relationship between the mathematical equation coefficients and the actual parameters used by the DX7 patches are not documented. So it was very challenging and exciting to follow the footsteps of the designers of Yamaha Corporation. It required:

Some maths...

Regarding optimization for small processors, a quick calculation about the number of operations to generate a second of sound is the following:
- 50000 samples per second on the original machine
- 16 channels
- 6 operators
=> 50000 x 16 x 6 = 4800000 operations/sec
I do not mention here the feedback loop that could also be accounted as a 7th operator in itself, so we have give or take 5 millions operations to produce in the worst case (all voices playing together). To be fair, modern sampling rate is 44100 Hz, so only 4233600 operations are necessary.

Still, since every operation involves in theory 1) a sine computation 2) an addition with the phase of the previous operator 3) a multiplication by the output level, we have 15 million operations/sec to perform. Knowing that in 1983, multiplications were not wired and sines were not sped up by arithmetic co-processors, a trick had to be found to simplify dramatically the formula: So eventually each operation is 1 addition and 2 table accesses. We leave aside the CPU used by low frequency events like envelops, LFO and performance modulations. Piece of cake even for 80's hardware. Not to mention our 21st century high tech devices.

Revisions and roadmap:

SynprezFM is completely free, and does not contain any advertisement (I try to keep all pixels and CPU cycles for the fun!). It just needs access to external storage to manage sysex files.

Builtin banks:

The 1024 patches that I selected were available as bundles on the internet. They represented more than 22000 patches that I filtered to keep just 32 sysex of 32 patches. This is not easy to trace the author for each one but I would like to thank people that created or made some of these patches available:
You can upload the 32 builtins I use in SynprezFM as a tar gzip (that 7zip can cope with under Windows).


There are some recurring questions that I had answered several times directly to users. So I prefer regrouping all these answers in a FAQ


Translation with Google Translate is a risky business, and even if the meaning is more or less understandable, it definitely lacks style. You can help me translate properly my application into your mother tongue by following this link


This application creates different types of information:
None of these information are transmitted anywhere by any mean, only the MIDI traces can be asked by the developper for debugging purpose, and sent by email or messaging, but neither automatically nor without the user's consent and volontary action. They are plain text data, so they can be checked first hand by the user before their transmission

No personal or behaviour data are either collected, stored or transmitted.


Your feedback is important: here you can drop me a line :-)

last update: 2021/04/20