“XFM is a polyphonic, 32-voice, 6-operator FM synthesizer stereo module that you can build yourself.
Essentially, the module receives MIDI messages from a controller/sequencer, produces audio and delivers it via digital (SPDIF) and analog outputs.
The sound range XFM can create and its feature set have a very broad intersection with most pure-FM synthesizers of the past (Yamaha DX series, OPL chip series, TX81Z/802/816 modules, etc.).
32-voice of polyphony
Polyphonic or Monophonic Legato modes
6 operators per voice
Variable modulation algorithm
8 waveforms per operator
A 6-segment Envelope Generator for each operator
6-segment Pitch Envelope Generator
Per-voice LFO with Triangle, Square, Sine, S&H waveform
Per-operator adjustable LFO sensitivity for pitch and volume
Per-operator adjustable velocity tracking, keyboard tracking
Extensive MIDI implementation (pitch bend, mod wheel, aftertouch, sustain, breath ctl, foot ctl, volume, pan, etc.)
256 programs memory
MIDI in, thru
Stereo, 24-bit SPDIF digital out
Stereo, 16-bit analog out
Battery friendly, low power operation
Fully programmable (connecting it to a PC via USB)
Extremely low latency (< 1ms)
XFM is an FPGA-based synthesizer.
The selection of technology for XFM was done in several stages. Needless to say, there’s no single computing device which is industry-driven by audio applications. The audio market is so small that it doesn’t even make enough space in the pie chart to have a title.
The audio trend of virtualizing synthesizers and effects also conspires against manufacturers investing millions of dollars in producing dedicated ASIC chips (like the ones used in all original DX synthesizers). So this project, as most hardware projects nowadays, has to be based on general-purpose computing elements. Fortunately, industry segments such as automobile, automation and IoT make for a such a huge scale that computing power-per-dollar is at a record high.
Coming from the software-based synthesizers and plug-ins, the very first stage was experimenting with the Single-Board Computer (SBC) options (Raspberry Pi, Beaglebone, etc.).
Those boards present enormous advantages against anything else in the option list: superbly inexpensive (Raspberry Pi is $35), easy programming, very stable toolchain. Such a low price is essentially a consequence of the huge production scale (so far over 20M boards have been sold).
However, those also come with notable drawbacks. They run a Linux kernel, so there it goes all hardware determinism and timing reliability. While many real-time oriented improvements to the standard OS distribution exist, allowing for decreased boot times and latency, I couldn’t achieve (as in Raspberry Pi 3+ gen) a level of latency, determinism and reliability remotely comparable with direct silicon.
Additionally, the boards can easily average 2W of power consumption when idling, which makes it unsuitable for battery operation.
Next option in queue is in fact a myriad of sub-options: all micro-controller units (MCU). Covering a vast price/computational power/energy range, there are hundreds to pick from.
Of notable interest are all the devices used in the Arduino platform. Most Arduino boards are based on AVR units from Atmel (now Microchip), yet a few are actually based on microprocessor units (MPU) such as the ATSAM series (ATSAM3X8E in the Arduino Due).
There are other MCU-based platforms such as the Teensy, which have the advantage of featuring a hardware floating-point unit (FPU).
A third computational option is the use of specialized DSP chips, such as the Texas Instruments C6000 series or Freescale MSC81 series.”