Skip to main content

mutwo.mmml

Build Status License: GPL v3 PyPI version Code style: black

This package adds parsers and specifications for the 'mutwo music markup language' (short: MMML). With this language it's easy, fast and convenient to write music in a text file. MMML consist of expressions that can be converted to mutwo events. The package also adds reverse parsers, to convert mutwo events back to MMML.

Installation

mutwo.mmml is available on pypi and can be installed via pip:

pip3 install mutwo.mmml

The rules

MMML is a very simple and minimalistic file format with few, but quite strict rules.

1 MMML expression <=> 1 event

  1. A MMML string consist of only one MMML expression.
  2. Each MMML expression consist of exactly 1 event.
  3. But an event can have children events (it can be nested).

An MMML expression = head + block

  1. An MMML expression has two parts: a head and a block.
  2. The head tells what type of event we have with which arguments.
  3. The block defines all children events that our main event has.
$HEAD
    $BLOCK

The head: main event (= container) definition

  1. An MMML expression head is defined across exactly one line in a text.
  2. It consist of different parts that are separated by one or more white spaces.
  3. The first part of a head declares the event type, all other parts are arguments for the event. All arguments are optional.
$EVENT_TYPE $ARG_0 $ARG_1 ... $ARG_N

The block: children events definitions

  1. To start a block after a head, we need to increase the indentation of +4 white spaces compared to the indentation level of the head.
  2. A block is composed of one or more MMML expressions.
  3. In this way we can define on or more events that are part of the main event that's defined in the head.
$HEAD
    $MMML_EXPRESSION_0
    $MMML_EXPRESSION_1
    $MMML_EXPRESSION_2
    ...
    $MMML_EXPRESSION_N

Builtin head / event types

mutwo.mmml provides few builtin events:

cns $tag $tempo

Renders to Consecution.

cnc $tag $tempo

Renders to Concurrence.

n $duration $pitch $volume $playing_indicator_collection $notation_indicator_collection $lyric $instument_list

Renders to NoteLike.

r $duration $volume $playing_indicator_collection $notation_indicator_collection $lyric $instument_list

Renders to NoteLike. Same like n, but without the option to specify pitches.

Extra rules

Besides the basic rules, MMML has a few extra rules to make using the language more convenient. They generally aim to be easily implementable and not making the language too complex.

  1. Empty lines are ignored. Empty means 'only white space or tabs' or 'nothing at all'.
  2. Any line, where the first character (that's not white space) is '#', is also ignored. Such a line is regarded as a comment.
  3. The special head argument _ is always skipped. In this way it's possible to define for instance the fourth argument of an event without necessarily having to declare all three previous arguments.

Example

# We can write comments when starting a line with '#'

        # whitespace at the beggining is ignored for comments

# Let's express one simultaneous event that contains our music.

cnc music


    # It contains two sequences: a violin and a cello voice.

    cns violin

        # 'n' is used to express a note.

        n 1/4 a5 p
        n 1/4 bf5
        n 1/4 a5

        # We can skip arguments with _

        n 1/8 _ _ fermata.type=fermata

        # 'r' is used to express a rest.

        r 1/4

        n 1/4 a5 mf
        n 1/4 bf5 mp
        n 1/4 a5
        r 1/4


    cns cello

        n 1/2 c3 p
        r 1/2

        n 1/2 d3 p
        r 1/2

Extending mutwo.mmml

mutwo.mmml can easily be appended by new event types. Already given event types can also be overridden. For this purpose mutwo.mmml uses a registry as a API. To understand how this can be used simply check the respective source code.

Metadata

Release files for mutwo.mmml 0.12.0

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

Source distribution (sdist)

Source distribution for mutwo.mmml 0.12.0
File Size Uploaded
mutwo_mmml-0.12.0.tar.gz 25.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mutwo.mmml 0.12.0
File Interpreter ABI Platform
mutwo_mmml-0.12.0-py3-none-any.whl Python 3 none any Details

Total release size: 51.5 kB

Release files / mutwo_mmml-0.12.0.tar.gz

Download URL mutwo_mmml-0.12.0.tar.gz
Size 25.5 kB
Tags Source
SHA-256 checksum
How to use checksums
d4f6051c272cc7ab036b587039fabf0abaa2bcd38254dc7d4568c9586e107b5a
BLAKE2b-256 checksum
How to use checksums
4612eb4f49eac594c8dc57973bc4690f8c03e3eb948fa6173007feef64b25b7c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.20

Release files / mutwo_mmml-0.12.0-py3-none-any.whl

Download URL mutwo_mmml-0.12.0-py3-none-any.whl
Size 26.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a0916370ff17a823312c4a7b24ed78ed249bb70b4fd890960a4d6ee389dae9ff
BLAKE2b-256 checksum
How to use checksums
7bdcc68aa96c645e894efca7d7a5dc1029944664bc01a929c2320fedd31af824
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.20

Release history Release notifications | RSS feed

This release

0.12.0 This release

2 release files

0.11.0

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

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