STM32 FM Synthesizer#

The goal of this project is to implement a FM (Frequency Modulation) sound synthesizer using the STM32F407 Discovery.

Context#

The foundation of the FM synthesis has been patented by John Chowning at Stanford University in 1974 (see Patent ) One of the most famous synthesizer using this technique is the Yamaha DX7, that was manufactured by the Yamaha Corporation from 1983 to 1989. The DX7 is one of the best-selling synthesizers in history, selling more than 200,000 units.

The DX7 Synthesizer

Some super Kitch presets can be heard here: https://www.youtube.com/watch?v=BCwn26FePAo

Project#

Specifications#

  • Six phase-modulated oscillators :

\[x_p(t) = a_p \sin(2\pi f_p t + \varphi_p + I_p x_q(t) )\]

In musical application, this signal model has the advantage of generating complex sounds. While the addition of two sine waves only contains 4 frequency components (positive and negative frequencies), a FM modulated sine wave can generate many frequency components whose amplitudes are governed by Bessel functions.

../_images/FM_synthesizer-1_00.png
../_images/FM_synthesizer-1_01.png
  • Oscillators can be combined in different ways (32 algorithms). Each algorithm specify is an oscillator acts like a carrier or modulated signal.

The DX7 Algorithms
  • Seven 6-points envelopes (one for each sine and one for the pitch)

../_images/FM_synthesizer-2.png

Functionalities#

  • Communication between a MIDI keyboard and one of the USB port of the STM32F4
    • Extraction of the note ON / note OFF messages

    • Extraction of the Control Change messages.

  • Implementation of the sound synthesizer
    • Generation of a sine wave oscillator, implementation of phase modulation,

    • Generation of the signal enveloppe (see Video ),

    • Implementation of the 32 DX7 algorithms.

  • Implementation of some presets
    • Reverse engineering of some classical DX7 presets (pad sounds, bass sounds, rhodes sounds).

    • Integration of preset selection features (communications ? Midi message ?)

    • (Create a simple app to easily edit the DX7 parameters.)

Hardware / Sofware#

  • The synthesizer will be implemented on the STM32F407 .

../_images/DX7_STM32.jpg
  • MIDI informations will be sent by a MIDI Keyboard.

  • The project will be hosted on Gitlab with internal visibility (Code, Documentation on the Wiki)

References#