Synthesize musical notes (with piano sounds) in Python

Pat B picture Pat B · Jun 27, 2011 · Viewed 21.4k times · Source

I would like to have a python implementation of a musical instrument library (for instance, a piano object) that I can use to convert a list of notes and a duration into sound. For instance, something like:

import Piano

pn = Piano()
pn.play([note, note, ..., note], duration)

Does something like this exist for python 2.7? I would like to implement it if it doesn't. I currently have something that uses audiere, but its just sine waves so it sounds horrible. Is there any way to hook into a midi piano or something like that- I am using windows 7? Are there any implementing steps that I might not expect?

Answer

Chris picture Chris · Apr 4, 2013

A student of mine has just started using mingus to do just this so here's quick guide on how to get going on linux (ubuntu):

Install fluidsynth and mingus if you don't have them already:

$ sudo apt-get install fluidsynth

$ sudo easy_install mingus

Now you should be able to open python and type:

>>> from mingus.midi import fluidsynth   
>>> fluidsynth.init('/usr/share/sounds/sf2/FluidR3_GM.sf2',"alsa")

This imports the necessary stuff from mingus and initialises fluidsynth to play through alsa (not jack which is the default). Then:

>>> fluidsynth.play_Note(64,0,100)

...and you should hear a note played on the piano (arguments are: note number, channel number and velocity).

For more information go here:

https://code.google.com/p/mingus/wiki/tutorialFluidsynth