Skip to main content

PyPI version Supported Python versions License

Easily synthesize MIDI to audio or just play it.

It provides a Python and command-line interface to the FluidSynth synthesizer to make it easy to use and suitable for scripting and batch processing. In contrast, most MIDI processing software is GUI-based.

Why?

First, FluidSynth has a CLI which is not so straightforward to use. The goal was to make it easy to use as possible by making some parameters implicit.

fluidsynth -ni sound_font.sf2 input.mid -F output.wav -r 44100

vs.

midiplay input.mid
midi2audio input.mid output.wav

Second, we can have as easy interface scriptable in Python.

FluidSynth().midi_to_audio('input.mid', 'output.wav')

What it is not?

Note that is it not a Python binding to all the FluidSynth commands. If needed check out these packages instead:

Requirements

You need at least one sound font. Normally you’d install them manually or via a package manager. midi2audio looks for its default sound font in ~/.fluidsynth/default_sound_font.sf2. It can be a symlink or an actual file.

Installation

pip

You can install this package via pip.

pip install midi2audio

Or for development (changes in code take effect without reinstalling):

git clone https://github.com/bzamecnik/midi2audio
pip install -e midi2audio

OS X

I’d recommend adding the non-default libsndfile which supports output to FLAC and wide variety of audio formats. Otherwise only WAV, raw and a few other will be supported.

For Mac OS X we provide a script install_fluidsynth_with_soundfonts_osx.sh to automatically install FluidSynth with libsndfile and a basic sound font (Fluid R3 GM) and symlink it so that it’s recognized as a default sound font for this module. Note it it install installed via pip as another entry point.

install_fluidsynth_with_soundfonts_osx.sh

Or install it manually:

brew install fluidsynth --with-libsndfile
mkdir -p ~/.fluidsynth
ln -s /path/to/my/sound_font.sf2 ~/.fluidsynth/default_sound_font.sf2

Check the script how to install a few additional (nice but bigger) sound fonts which are not installed by default.

Other OSs

Check you package manager and link your default sound font as descibed above.

Usage

Basically you can either play a MIDI file or synthesize it to audio. FluidSynth allows non-realtime synthesis which is faster than the playback.

Note that the audio format is determined from the audio file extension. The libsoundfile supports a lot of formats.

Python

from midi2audio import FluidSynth

Play MIDI:

FluidSynth().play_midi('input.mid')

Synthesize MIDI to audio:

# using the default sound font in 44100 Hz sample rate
fs = FluidSynth()
fs.midi_to_audio('input.mid', 'output.wav')

# FLAC, a lossless codec, is supported as well (and recommended to be used)
fs.midi_to_audio('input.mid', 'output.flac')

Change the defaults:

# use a custom sound font
FluidSynth('sound_font.sf2')

# use a custom sample rate
FluidSynth(sample_rate=22050)

Command line interface

A shell sugars midi2audio and midiplay are provided instead of more verbose python -m midi2audio.

# play MIDI
$ midiplay input.mid

# synthesize MIDI to audio
$ midi2audio input.mid output.wav

# also to FLAC
$ midi2audio input.mid output.flac

# custom sound font
$ midi2audio -s sound_font.sf2 input.mid output.flac

# custom sample rate
$ midi2audio -r 22050 input.mid output.flac

About

Shoulders of giants

Thanks to the authors of FluidSynth for a nice command-line MIDI synthesizer!

Support the project

Need some consulting or coding work regarding audio processing, machine learning or big data? Drop me a message via email or LinkedIn. Or just say hello :).

Metadata

Release files for midi2audio 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for midi2audio 0.1.1
File Size Uploaded
midi2audio-0.1.1.tar.gz 5.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for midi2audio 0.1.1
File Interpreter ABI Platform
midi2audio-0.1.1-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 13.7 kB

Release files / midi2audio-0.1.1.tar.gz

Download URL midi2audio-0.1.1.tar.gz
Size 5.0 kB
Tags Source
SHA-256 checksum
How to use checksums
b26590388e1f62753096b075b877e2529ff62faad00c07811ac8111a73e4a78a
BLAKE2b-256 checksum
How to use checksums
a81cb96b5d797cb622753fef9dd5ac2116ee9f3585727d60212f892fb4bd175e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / midi2audio-0.1.1-py2.py3-none-any.whl

Download URL midi2audio-0.1.1-py2.py3-none-any.whl
Size 8.7 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
762a2df3806d373f7f89962f22ecc6d3cb49f82ae4212fab560a479cbb6c9c08
BLAKE2b-256 checksum
How to use checksums
557523618a687fc2391192c9d9ec8906a198a3f318f146388d3b96f779826d43
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page