utz82 edited this page May 13, 2017 · 7 revisions


MDAL (The Music Data Abstraction Language) is a veritable, text-based audio programming language specifically tailored for use with sound drivers operating on low-level devices such as sound chips and simple DACs.

While traditional low-level music description languages such as ABC or the Music Macro Language are essentially abstractions of western sheet music notation, MDAL instead has strong roots in tracker music. The MDAL syntax adheres to several key elements of tracker modules:

  • Song structure is broken down into patterns, which are linked via a sequence matrix.
  • Time flow is represented vertically.
  • The concept of measures and note values has no direct representation in MDAL, instead note length is measured in steps and ticks.

MDAL is a language without a pre-defined nomenclature. Aside from a rudimentary set of structural conventions, there a no fixtures - the entire instruction set is customizable. Customization is provided through standardized configuration files, which are parsed and interpreted by an MDAL compiler at runtime. This enables programmers to adapt both user input and data output to the specific needs of their sound drivers/player routines.

Current Status

Both the language specification and the reference compiler are currently at a very early stage. Nevertheless, basic functionality is in place, and the compiler already generates valid data for a few different example configurations.

Getting Started

MDAL documentation is split into two parts - user reference and programmer's reference.

If you're a musician wishing to compose music using MDAL, then the User Reference is the one you want to read.

For authors of low-level sound drivers wishing to add MDAL support, the page on Creating Configurations contains all the necessary information.

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.