Mutwo is a flexible, modular, event based framework for composing music or other time-based arts in Python. It aims to help composers to build musical structures in a meaningful way and translate those structures to different third party objects (e.g. midi files, csound scores, musical notation with Lilypond via abjad). The general design philosophy stresses out the independence and freedom of the user with the help of generic data structures and an easily extensible and tweakable software design.
The following example generates a short midi file:
from mutwo import core_events
from mutwo import music_events
from mutwo import midi_converters
simple_melody = core_events.Consecution(
[
music_events.NoteLike(pitch_name, duration=duration, volume="mf")
for pitch_name, duration in (
("c", 0.75),
("a", 0.25),
("g", 1 / 6),
("es", 1 / 12),
)
]
)
event_to_midi_file = midi_converters.EventToMidiFile()
event_to_midi_file.convert(simple_melody, "my_simple_melody.mid")
Making Western notation via abjad of the same melody:
from mutwo import abjad_converters
import abjad
abjad_voice_converter = abjad_converters.ConsecutionToAbjadVoice()
abjad_voice = abjad_voice_converter.convert(simple_melody)
abjad_score = abjad.Score([abjad.Staff([abjad_voice])])
abjad.show(abjad_score)
For more information how to use mutwo read the documentation.
Starting from version 0.43.0 mutwo uses a modular design. Only basic functionality is provided by the mutwo core package.
- mutwo.core: Base package for mutwo ecosystem
- mutwo.music: Add music parameters (pitch, volume, ...) and a
SimpleEvent
based class to represent a Note/Chord/Rest (NoteLike
) - mutwo.common: Algorithmic generation of data to be used for artistic works
- mutwo.timeline: Place events on a time line by start and end times.
- mutwo.midi: Write midi files
- mutwo.abjad: Build Lilypond based Western score notation via Abjad
- mutwo.csound: Create electronic music parts via csound
- mutwo.isis: Use singing synthesis via ISiS
- mutwo.mbrola: Render mutwo events to speaking synthesis signals via mbrola
- mutwo.reaper: Helpful converters for the Reaper DAW
- mutwo.ekmelily: Simplify writing microtonal notation in Lilypond by rendering files for the Lilypond extension Ekmelily
- mutwo.mmml: Write music in plain text files and convert it to mutwo events (experimental)
Writing new plugins is simple, its basic structure can be understood at the mutwo.example repo.
There are a many similar composition frameworks. Maybe one of them fits better to your particular use-case:
Python based composition frameworks:
- scamp: "SCAMP is a computer-assisted composition framework in Python designed to act as a hub, flexibly connecting the composer-programmer to a variety of resources for playback and notation."
- isobar: "isobar is a Python library for creating and manipulating musical patterns, designed for use in algorithmic composition, generative music and sonification."
- JythonMusic: "JythonMusic is an environment for music making and creative programming."
- musisc21: "A Toolkit for Computational Musicology"
- musicpy: "Musicpy is a music programming language in Python designed to write music in very handy syntax through music theory and algorithms."
- musx: "musx (pronounced muse ex) is a package for composing and processing symbolic music information."
Composition frameworks in other languages:
- slippery-chicken: "a Common Lisp and CLOS package for algorithmic composition."
- OpenMusic: "OpenMusic (OM) is a visual programming language for computer-assisted music composition created at IRCAM, inheriting from a long tradition of computer-assisted composition research."
- Euterpea: "Euterpea is a cross-platform, domain-specific language for computer music applications embedded in the Haskell programming language."
- jMusic: "jMusic is a project designed to provide composers and software developers with a library of compositional and audio processing tools."
- MusicKit: A framework for composing and transforming music in Swift
- Opusmodus: “Opusmodus is a comprehensive computer-aided environment for the whole work of music composition a virtual space where a composer can develop ideas and experiments for projects large and small” (commercial, closed-source)
- gm: "R Package for Music Score and Audio Generation"