Musical MIDI Accompaniment, MMA ,1.1 generates standard MIDI1.2 files which can be used as backup tracks for a soloist plus much, much more! It was written especially for me—I am an aspiring saxophonist and wanted a program to “play” the piano and drums so I could practice my jazz solos. With MMA I can create a track based on the chords in a song, transpose it to the correct key for my instrument, and play my very bad improvisations until they get a bit better.
I also lead a small combo group which is always missing at least one player. With MMA generated tracks the group can practice and perform even if a rhythm player is missing. This all works much better than I expected when I started to write the program ... so much better that I have used MMA generated tracks for live performances with great success.
Around the world musicians are using MMA for practice, performance and in their studios. Much more than ever imagined when this project was started!
This is a large and complex program! And the documentation is long. The author has tried to not get complex about things, but in many cases that is impossible. At a minimum you should have a good, quick read of this document and the accompanying tutorial before deciding if MMA is (or is not) for you. |
The program MMA was written by and is copyright Robert van der Poel, 2003—2019.
This program, the accompanying documentation, and library files can be freely distributed according to the terms of the GNU General Public License (see the distributed file “COPYING”).
If you enjoy the program, make enhancements, find bugs, etc. send a note to me at Bob van der Poel ; or a postcard (or even money) to 5570 Cory Road, Wynndel, BC, Canada V0B 2N1.
The current version of this package is maintained at: http://www.mellowood.ca/mma/.
This document reflects version 20.12.4 of MMA .
I have done everything I can
to ensure that the program functions as advertised, but I assume
no responsibility for anything it does to your computer
or data.
Sorry for this disclaimer, but we live in paranoid times. This manual most likely has lots of errors. Spelling, grammar, and probably a number of the examples need fixing. Please give me a hand and report anything ... it'll make it much easier for me to generate a really good product for all of us to enjoy. |
This manual was written by the program author—and this is always a very bad idea. But, having no volunteers, the choice is no manual at all or my bad perspectives.1.3
MMA is a large and complex program. It really does need a manual; and users really need to refer to the manual to get the most out of the program. Even the author frequently refers to the manual. Really.
I have tried to present the various commands in a logical and useful order. The table of contents should point you quickly to the relevant sections.
A command from a file |
$ enter this |
The manual has been prepared with the LATEX typesetting system. Currently two versions of the manual are available: the primary version is a PDF file intended for printing or on-screen display (generated with dvipdf); the secondary version is in HTML (transformed with LATEX2HTML) for electronic viewing. If other formats are needed ... please offer to volunteer.
In addition to this document the following other items are recommended reading:
The various snippets of standard music notation in this manual have been prepared with the MUP program. I highly recommend this program and use it for most of my notation tasks. MUP is freely available from Arkkra Enterprises, http://www.Arkkra.com/.
MMA is a Python program developed with version 2.7 of Python. At the very least you will need this version (or later) of Python or any of the Python 3.x versions.
To play the MIDI files you'll need a MIDI player. Aplaymidi, tse3play, and many others are available for Linux systems. For Windows and Mac systems I'm sure there are many, many choices.
You'll need a text editor like vi, emacs, etc. to create input files. Don't use a word processor!
MMA consists of a variety of bits and pieces:
The scripts cp-install or ln-install will install MMA properly on most Linux systems. Both scripts assume that main script is to be installed in /usr/local/bin and the support files in /usr/local/share/mma. If you want an alternate location, you can edit the paths in the script. The only supported alternate to use is /usr/share/mma.
The difference between the two scripts is that ln-install creates symbolic links to the current location; cp-install copies the files. Which to use it up to you, but if you have unpacked the distribution in a stable location it is probably easier to use the link version.
In addition, you can run MMA from the directory created by the untar. This is not recommended, but will show some of MMA 's stuff. In this case you'll have to execute the program file mma.py.
To run either install script, you should be “root” (or at least, you need write permissions in /usr/local/). Use the “su” or “sudo” command for this.
If you want to install MMA on a platform other than Linux, please get the latest updates from our website at www.mellowood.ca/mma.
For details on the command line operations in MMA , see the “running” section.
To create a MIDI file you need to:
$ mma myfile <ENTER> |
will invoke MMA and, assuming no errors are found, create a MIDI file myfile.mid.
An input file consists of the following information:
Items 1 to 3 are detailed later in this manual. Please read them before you get too involved in this program.
Proper indentation, white space and comments are a good thing—and you really should use them. But, in most cases MMA really doesn't care:
Each line is initially parsed for comments. A comment is anything following a “//” (2 forward slashes).1.6
Multi-line or block comments are also supported by MMA . A block comment is started by a “/*” and terminated by a “*/”.1.7 Nesting of block comments is not supported and will generate unexpected results.
Both simple and block comments are stripped from the input stream.
Lines starting with the COMMENT directive are also ignored (but not stripped). See the comment discussion for details.
To understand how MMA works it's easiest to look at the initial development concept. Initially, a program was wanted which would take a file which looked something like:
Tempo 120
Fm C7 ... |
and end up with a MIDI file which played the specified chords over a drum track.
Of course, after starting this “simple” project a lot of complexities developed.
First, the chord/bar specifications. Just having a single chord per bar doesn't work—many songs have more than one chord per bar. Second, what is the rhythm of the chords? What about bass line? Oh, and where is the drummer?
Well, things got more complex after that. At a bare minimum, the program or interface should have the ability to:
From these simple needs MMA was created.
The basic building blocks of MMA are PATTERNs. A pattern is a specification which tells MMA what notes of a chord to play, the start point in a bar for the chord/notes, and the duration and the volume of the notes.
MMA patterns are combined into SEQUENCEs. This lets you create multi-bar rhythms.
A collection of patterns can be saved and recalled as GROOVEs. This makes it easy to pre-define complex rhythms in library files and incorporate them into your song with a simple two word command.
MMA is bar based.1.8 This means that MMA processes your song one bar at a time. The music specification lines all assume that you are specifying a single bar of music. Just like in “real” music the number of beats per bar can be changed at any point, percussion notes can occur at any point and chords can be changed at any point.
To make the input files look more musical, MMA supports REPEATs and REPEATENDINGs. However, complexities like D.S. and Coda are not internally supported (but can be created by using the GOTO command).
The files generated are standard MIDI. A few points of interest:
Just about everything in a MMA file is case insensitive.
This means that the command:
Tempo 120 |
could be entered in your file as:
TEMPO 120 |
or even
TeMpO 120 |
for the exact same results.
Names for patterns, and grooves are also case insensitive.
The only exceptions are the names for chords, notes in SOLOs, and filenames. In keeping with standard chord notation, chord names are in mixed case; this is detailed in Musical Data. Filenames are covered in Paths and Filenames.
A number of the commands available to MMA have builtin options. This section attempts to summarize conventions which may or may not be noted in the relevant sections of the manual. In most cases, this list highlights seldom used items:
In all cases, the text “–” (two minus signs) will terminate the scan for more options.