[sdiy] Fwd: real time FM synthesizer

Dale Marvin dmarv at dop.com
Wed Apr 13 03:26:57 CEST 2016

This is a cross post from the python (programming language) list.
Thought some might enjoy it.


-------- Forwarded Message --------
Subject: real time FM synthesizer
Date: Wed, 13 Apr 2016 01:22:15 +0200
From: Irmen de Jong <irmen.NOSPAM at xs4all.nl>
To: python-list at python.org
Newsgroups: comp.lang.python

It seems that Python is fast enough [1] to create a real time FM music 
synthesizer (think Yamaha DX-7). I made one that you can see here:

The synthesizer can create various waveforms (sine, sawtooth, pulse 
etc.) and lets you modify them in various ways. You can apply FM 
(frequency modulation), PWM (pulse-widthmodulation), volume envelopes, 
vibrato, and reverb/echo. It is primarily based around
oscillators that are represented as generator functions in the code.
A GUI is provided that gives access to most of the features 
interactively, and lets you play a tune with your created FM instrument 
on a piano keyboard.

You will need Python 3.x and pyaudio to be able to hear sound, and 
matplotlib if you want to see graphical diagrams of generated waveforms.

I can't create nice music myself but this was a fun project to build and 
to learn how FM synthesizers work internally :)


[1]: meaning it can generate and play fairly complex waveforms based on 
multiple oscillators and filters in real time in one 44.1 kHz audio 
channel. That is on a 3.2 ghz machine.  With enough oscillator/filters 
combined however it starts to stutter and cannot do it anymore in real 
time. However you can still generate those waveforms and save them to a 
.wav on disk to play afterwards.  The code only uses one CPU core though
so maybe there's room for improvement.


More information about the Synth-diy mailing list