Saturday, January 21, 2017

MMA in Debian

Got a note earlier today from Anthony Fok the maintainer for MMA in the Debian repositories. He has uploaded version 16.06 and it should be working it's way though in the next short (long?) while.

In the meantime, I checked my repository for Ubuntu 16.10 and, YEAH!!!, MMA 15.12 is there. About a year old, but current enough.

Now, I honestly have no idea how many MMA users there are out there. Looking over my download history from my web site there are more than 200 downloads per month. And via distribution apt's? Who knows. But, all is pretty good as far as I can see.

Now, all you downloaders (and I assume users): Please share what you are doing with the greater community. Send me new grooves. Patches. Ideas.


Tuesday, January 17, 2017

Random chords

One of my friends did a little song in which he created the chord sequence by rolling dice. He then assigned different chords to the bars based on the results. Cool, I thought (even though he is using BiaB and not MMA to create his music). But, dice? Oh, so primitive! I figured a little python program would be much easier!

For the discussion and the song, jump over to the Kara-Moon forum.

So, here is a quick program (this listing was created using pygments, a very useful program).

To use, just create a sequence and then cut/paste the result into a text file. Add some groove names, tempo, etc. and you've got an original song. If only life had been this easy for guys like Bach and Beethoven.

Here's the code (you should be able to cut/paste this to your computer and run it with python):

#!/usr/bin/env python

# This program will generate a mma compatible
# set of chords generated at "random".

# The chords are generated based on a major scale in Ionian mode.
# Using roman numeral results permits easy key changes, but different
# chord tables can be used. 

import sys, os, random


def error(m):
    """ Abort on error with message. """
    print(m)
    sys.exit(1)

def usage():
    """ Print usage message and exit. """

    print("""
Mma-rndchords, (c) Bob van der Poel
USAGE: mma-rndchords  nn
  nn == the number of chords to generate.
""")
    sys.exit(1)



##########################

if len(sys.argv[1:]) != 1:
    print("mma-rndchords: number of requested bars.")
    usage()

bcount = int(sys.argv[1])

# This is the weighted table.
# Using roman numerals
#chords={ "i": 4, "ii7": 2, "iii7": 3, "IV": 3, "V7": 4, "vi7": 2, "viiO": 1 }
# Using traditional chord names. Feel free to roll your own.
chords={ "C": 3, "Dm7":2,  "Em7": 3,  "F":4,   "G":5,   "Am7":2,  "Bdim7": 1}
# Convert to an expanded list. It'll look like ["i", "i", "i", ...]
chords = [k for k in chords for _ in range(chords[k])]

for a in range(bcount):
    print "%s %s" % (a+1, random.choice(chords)) 
 
Simple enough? If you need more options, etc. feel free to add to the program or contact me here via comments and I'll see what I can do.

 I've been pretty neglectful in keeping this blog up-to-date. Lots of excuses ... but, I'll try to do a bit better! There is a new b...