Change log for beta version 0.1 to current beta. This entire file will be deleted when we achieve a 1.0 milestone????? Feburary 16/2003 Released version 0.1 to the world. ================================= May 4/2003 Added new error message to USE. It now checks for a matching filename is a different case. Should help for this common error. I've not done the same for INCLUDE, and it's probably not necessary???? ---------- Added a few more chords. I'm not going to document these here, they are updated in the docs. ----------- Fixed up the read() code so that it returns lists. The BEGIN/END logic has been moved to read() as well, which fixes the earlier problem with repeats not working properly. NOTE for docs: BEGIN/END are local to a file, and an error occurs if you try USE or INCLUDE while a BEGIN is active. ------------ Continuation lines! Multiple lines in a file can be concatenated by ending successive lines with a single '\'. For example: Chord Define G1 1 4 90 0 90 0 ; \ 2.5 8 90 0 90 0; \ 3 4 90 0 90 0; \ 4 4 90 0 90 0 Get translated to the single line: Chord Define G1 1 4 90 0 90 0 ; 2.5 8 90 0 90 0; 3 4 90 0 90 0; 4 4 90 0 90 0 Comments are stripped AFTER lines are appended. So: Chord Define G1 1 4 90 0 90 0 ; // This is a comment \ 2.5 8 90 0 90 0 Becomes: Chord Define G1 1 4 90 0 90 0 ; NOTE: The 2nd line as well as the comment have been deleted! We could change this, but the whole ugliness of continuation lines probably suggests that the way we have it is the right way. Comments? Note that you can use continuation lines at any point in your input. INPUT FILE FORMAT CHANGE!!!!!!!!!!! With this the trailing '@' to indicate the end of a DEFINE has been eliminated. In fact, having a trailing '@' will generate an error. They have been deleted from all my files.... --------------------- The docs have been split into two different files. The reference to the standard library has been taken out of the reference manual and is now a separate file (lib.ps). As well, a tutorial has been started. --------------------- Test for proper python version added. --------------------------- BEGIN/END Blocks can now be nested. This means that you can do something like: Begin Chord Begin Define C1234 4 End Octave 4 Voice Piano1 End This is most useful for Doc blocks. ---------------------------- Documentation blocks. Please see the ref-man for detail, but a new set of commands for embedding documentation in library files has been added. Also, added a -x option to print out (eXtract) the doc strings. The syntax for DefGroove has been expanded to permit a trailing comment. DefGroove Waltz This is a waltz groove Defines the groove, but it also does a: Doc Defines This is a waltz groove This should help in maintaining library docs! ----------------------------------------- Added new comand: Chord | BASS | etc. LIMIT This limits the number of notes of a chord used. Mostly, this will kill off the odd sounding (to some people) of the higher notes in chord, esp. when the chord is an 11th, 13th, etc. --------------------- Added new command: EOF This stops the processing of a file. Useful if you just want to test the first part. Note that the rest of the file is NOT PARSED. May 15, 2003 - released 0.2 ========================================== New command: Duplicate. This duplicates each note for Scale, Chord, Apreggio, and Bass by the specified ocatve. --------------------------- July 19, 2003 Fixed up error reporting to include filename being processed. Added several lib files. August 2, 2003 - released 0.3 =============================================== Aug 28, 2003 Added CUT command. Septebmer 18, 2003 Variable support, conditionals, label and goto have been added. This is a big addition (and probably has bugs!). Read the new chapter in the manual "Varaibles..." for all the details. Changed the input reading routine again. Continuation lines and comments have been changed once again. Comments are now stripped after line joining. October 19, 2003 - released 0.4 Modified InvertChord function. Chords are no longer rotated; just the notes are changed. December 4, 2003 Added new command: Debug [mode=on/off] Modes debug, patterns, sequence, runtime, warnings, expand. This is the same as the commandline options -dpsrwe Changed command line options a bit. All document extractions are now part of -D. Added commands to extract midi inst. and chord info (see -D) Reworked chords into a class. December 5, 2003 The file extenstion .mma has been created. For song files using an extension is optional, but for lib files using automatic groove detection it is mandatory. Simply, when mma opens a file it first checks to see if the filename as given exists. If it does not exist AND the filename does not end with ".mma", the extension is added. The deliberate exception is that when libraries are searched/processed with the -g option only files with a .mma extension are processed. A lot of testing is done to make sure that files can be specified with or without the .mma extension. And tests are done to strip the extension when creating the midi file. If you find a bug here, please shout at me! December 11, 2003 Added LYRIC command. See the docs for details, but the short version is: lyric My lyrics are not so good. This adds the text in the current bar, so it should appear before the chord data. Lyrics are added a MIDI Meta-event data ($FF $05) in the Meta track. December 17, 2003 The LIMIT command has been changed. No longer can you specify different values for each bar in the sequence. Just didn't make musical sense. Shout at me if you think you need it. December 19, 2003 Changed the defaults for searching for the library. We now set up the path depending on what library can be found. December 22, 2003 Added DIRECTION UP/DOWN code to walking bass. Added -o option to display complete filenames as they are opened. Handy to figure what lib files are really being used. Chord voicing: This has been a lot of work (THANKS ALAIN!). I think it is working well enough to set it free in the real world. Please read the new chapter in the reference manual dealing with voicing! This is a big change and makes tracks much more musical. December 26, 2003 Okay--this is a big release! And there are a lot of changes NOT listed above (sorry). I'll try to be more prompt in future releases. And, yes, I think we are approaching 1.0! Released 0.5. ------------------------------------- MAJOR CHANGE: MMA is now modular Python! Install note: the python modules for mma MUST be in one of the following locations: /usr/local/share/mma/modules -- the preferred location /usr/share/mma/modules -- alternate ./modules -- permits running from working dir The library location has been changed. The standard lib is now in on of: /usr/local/share/mma/lib/stdlib /usr/share/mma/lib/stdlib ./lib/stdlib The idea is that other template libs should be put into the lib directory. This does create a problem for people with USE directives calling standard files. You really should get rid of the USE and rely on 'mma -g' and the database it creates, or change the paths in USE to include the subdir. IE, change "use rhumba" to "use stdlib/rhumba". To complete this, we've modifed the -g code (and made it much simpler). It now runs MUCH faster. It also scans subdirectories. And, if there is a special file "MMAIGNORE" in a directory, that dir will be ignored (including subdirs). The SetLibPath command has been modified. It now looks for a '+' as a leading char in any of the args, or by itself. If found, ALL the paths in the command are APPENDED to the current path; otherwise the libpath is set to path(s). Rewritten part of the tutorial. Originally we used "Happy Birthday" as an example song, but that song is under copyright (really!) and we can't legally include the score for it. So, we're using "Fella Bird" instead. Added MIDI command to send arbitrary MIDI data to any track. See docs! Added the IncPath directive. This sets the search path for MMAstart, MMAend and Include paths. MMAstart and MMAend can now have multiple values. February 7, 2004 Again, way too long in releasing this. But, the modularization changes keep biting back. I think it's stable now. Feedback appreciated! Fixed bug in random chord movement which caused chords to float off the keyboard. February 9, 2004 Released 0.6 ----------------------------------- February 10, 2004 The chord table has been changed. Duplicates are now listed in a synonym table. Added code to properly handle this in the doc generator as well. Minor change to FERMATA. If the offset is negative (FERMATA -1 1 150) then all note-on events in the specified beat are cancelled. See docs for detailed explanation. Added RIFF. A riff is a one bar override to an existing pattern. See the new chapter on RIFFs in the docs. Better error detection in main module when loading modules. In specifying note durations the dotted and double dotted notation has be added. So, "2." = "2+4" = "4+4+4"; "2.." == "2+4+8". The notation in patterns '3' was generating a 1/4 note triplet, not a 1/8 as advertised. Fixed (you may have pattern/lib issues). MIDI tracks are now automatically allocated. The -c command now parses the entire file and then reports MIDI channel usage (no file is produced). The MIDI commands for Portamento, Pan, TrackName and ChannelVolume are now stacked in the track buffers. They are sent into the MIDI stream when musical data is created for the track. This saves on creating MIDI tracks with only directives, but no data. Also makes it easier to assign these events to the track, not the channel. Add the MELODY and SOLO tracks. This lets you add any kind of music to your tracks. Added the commands KEYSIG, AUTOSOLOTRACKS and HARMONY. See the new chapter in the docs. I've spent a few days on the docs and have successfully implementing latex2html for all the files. This means that there is now an HTML version of the docs in addition to the ps standard. Added COPY command. This takes a useful subset of parms from one track and copies it to another. Useful in libs when you want a set of tracks with the same articulation, voicing, etc. April 19, 2004 Released 0.7 --------------------------- MAJOR CHANGE IN TRACK ALLOCATION AND NAMES! 1. Valid track names are BASS, CHORD, etc (just the base) and the base plus a '-' and a string. This means that all of the following are valid track names: BASS BASS-1 BASS-Sustaining-String However, the old notation of BASS1, DRUM5, etc. are NO LONGER VALID. 2. Tracks are now allocated dynamically and there is no limit on the number of sub-tracks. To see what's happening run mma with the -c option of a few existing songs to see the track allocation. Sorry if this breaks your existing libs, but I think we need some stable track nameing rules. This new naming scheme should also permit more descriptive names in lib file for the different tracks. The -c command line option has been modified to show the names of the allocated tracks as well as the midi channel info. Rewrote the harmony function. Valid harmony types are 2, 3, OPEN, 2ABOVE, 3ABOVE or OpenAbove. To disable harmony use a '-' or 0. Harmony enabled for scale, arpeggio, walk, bass, solo and melody. Also fixed bug in harmony when used with transpose (you really do need to tranpose both the main and the harmony at the same time!) Fixed some MS-DOS/WINDOWS problems. Added a 'b' to the open/file statement when creating a midi file to force binary. Plus, the midi file is now created in-memory with the possibly problematic tell()/seek() being deleted. Large rewrite of the pattern define code. You can now do things like: Drum Define D1234 1 0 90 * 4 or even Drum Define D1234' 1 0 90 * 4 Shift .5 See the updated docs! When setting a sequence you can use a dynamically allocated pattern. For example: Drum-Ugly Sequence { 1 0 99 * 4 } or Drum-Foo Sequence { D1234; 1.5 0 99 } { D1234 } I've added this option since I find that an awful lot of defines are just used once, and they _really_ should be with the sequence, not in a separate block. Fixed sequence sizing error when restoring volume grooves. Added the ACCENT command. The entire chunk of code dealing with patterns and definitions has been reworked and simplified: - Definitions are now stored in one big dict, they are not - saved or restored in grooves, they must exist when used in a - SEQUENCE, changing the def of a pattern after it is used in - a SEQUENCE has no effect on the seq. Deleted optional notation for specifing a repeated bar. Used to be that 1 Em / / / *2 // NOW ILLEGAL and 2 Em / / / * 2 were the same. (1) is no longer permitted. LibPath and IncPath are NO longer lists. Only one path can be specified for either. The file search stuff has been rewritten as well... searches now follow a simple line for opening all files. See the docs in the paths chapter for details. The auto-groove stuff has been rewritten. The database is now stored in MMADIR as a picked dataset. Added PrintActive command. Use when developing groove files to see what is active at certain points. Debugging tool only! Fixed problem with overlapping ON/OFF events. This eliminates all kinds of RSKIP/ARTICULATE problems. Walking bass routine reworked. Resulting patterns are harmonious (but uninspired). Added DELETE command. This lets you delete an existing track, freeing its midi channel for future use. Changed the TEMPO command ... if you use a '*', '+' or '-' modifier this must be a separate token. Earlier we demanded "*.9", now we want "* .9". Sorry, if this breaks anything, but it makes things more consistent. The DOC suite of commands has been changed/simplified. The old syntax of "DOC AUTHOR" or "Doc Note ..." is no longer recognized. Instead, we have three doc methods or commands: 1. Anything after a DEFGROOVE is passed to docs to be saved as as description. 2. AUTHOR - this saves the "author name", but is not currently used. 3. DOC ... - this saves the data for use in a lib file header. See the docs or just look at some of the included lib files. The '/' is NOT permitted in a groove name. This is now reserved for a future use idea. June 25, 2004 Released 0.8 --------------------------- Running status has been implemented for the generated MIDI files. This is actually pretty simple to do and generates MIDI files which are about 25% smaller. Don't know if there are any other savings, but it seems to be the "right thing" to do. If you DON'T WANT running status generation use the "MidiFile Running=0" directive. You can now generate type 0 MIDI files. Some players only play these, so you have the option. The command "MidiFile SMF=" sets this to 1 (default) or 0. I suggest adding this to your mmarc file. There is a cmdline option for this as well '-M x' where x is 0 or 1. This will override the setting in the RC file, but not in your song/init/groove files. Added RANGE command. This applies to the number of octaves a scale or arpeggio uses. Note: scale used to use COMPRESS for this...COMPRESS does nothing for scale. DUPLICATE was transposing already transposed notes for very interesting effects. I have done a lot of increased modularization. I had a bit of fear that this would slow processing, but I see no such effect. And smaller modules should make code writing easier! When creating a track MMA no longer sets the default channel volume to 100. It is left as is. Either set the volume in an include file (see includes/init.mma for an example), or do a explicit TRACK CHANNELVOLUME command in your groove or song file (or even a mmastart file). This is done the way it now is to avoid having MMA do things behind your back... Opps, I wasn't opening the database file in binary mode...so sorry if you are using an OS from Redmond which requires this. July 5, 2004 Released 0.9 ------------------------------ Fixed up the -g option so that only new/modfied/deleted library files are processed. Greatly speeds up this operation! MAJOR change to the way bass patterns are defined. The note offset MUST be a '1', '3' or '5', referring to the root, third and fifth of the scale. Python version change: Minimum version for Python has been upped to 2.3. Since this version was release in Aug/03 I don't think we're pushed too many envelopes on this. Added internal macros $_Volume and $_LastVolume. I will drop DEFVOLUME/SETVOLUME from the next release unless people really want it left in! I find that the code is ugly and quite useless...it really doesn't do what people expect. Easier, if you need to save a set of volumes for differnt inst. settings, just to do a DefGroove to a private name. In the library docs the grooves are listed in the order in which they are defined. There is probably a reason for having defines in the groove files in a certain order and the reporting should abide by that. The channel assigment code has been tweaked a bit. CHSHARE no long complains about duplicate assignments. Added ChannelPref command (see docs). 2 new variables: $_DEBUG and $_LASTDEBUG reflect the current state of the debug flags and the state before the last "debug xxx=yy" command. This value can be used to reset the debug state after a temp change. Added a MALLET command to reiterate notes in solo/melody tracks. Makes things like marimbas should quite cool. See docs in the SOLO section. See the sample song "Yellow Bird" for an example usage. Added -G command line opt. Same as -g, but forces creation of completely new database. The VoicingMode and friends syntax has been changed :) The command VoicingMode, VoicingCenter and VoicingRange have been deleted. New command is VOICING with the option pairs MODE=XX, RANGE=xx, CENTER=xx, RMOVE=xx, DIR=xx. See docs. Minor changes to install script. July 25, 2004 Released 0.10 -------------------------- The DefVolume/SetVolume code has been deleted from the code and the docs. A "good idea" gone forever :) Added the VoiceTR command. This lets you set up a voice name translation table. Handy if you have a non-GM MIDI synth or want to use difference voicings with library files. The LYRIC command set has been changed, mostly just to get all the lyric stuff into one container. Gone is LYRICVERSE. And the command LYRIC now is used for all LYRIC options. Details in docs. As well, you can specify the beat for a lyric syllable--just enclose it in <>s The set [<3>Pick Up] will start the lyrics on beat 3. Useful in a pickup bar situation. Added the UNIFY command. If you set UNIFY for a track overlapping note ON/OFF events will be combined into one long note. So, if you're doing a sustained background note use: Begin Chord-Sus Sequence {1 1 90 * 4 } Voice Strings Articulate 100 Unify 1 End This should generate more pleasing results than using a half or whole note sequence and will obey chord changes on each note. See docs. All supplied grooves have been fixed to use this. To aid creation of BASS patterns ... you can specify an octave offset in the offset. So, in addition to an offset of '1' you can have '1+' or '1++' or '1-', etc. MIDISeq - New command permits MIDI controller data to be sent at every beat (or partial) in a bar for each track. MIDIVoice - New command permits MIDI controller data to be sent with a VOICE setting for each track/bar. MIDIClear - Recommended command to undo the effects of MIDIVoice/Seq at groove changes and file end. MIDIDEF - definition class for MIDISeq/Voice/Clear. Added docs for midi controller names. Added -Dcm and -Dca opts for doc printing. IMPORTANT NOTATION CHANGE in the MIDI command: Previously the args were to be in hex; this has been changed. You can enter the value '0x7f' as '0x7f' or '127' or even (if you like octal) '0177'. In previous versions of mma we insisted on '7f' ... this will no longer work. Sept 21, 2004 Released 0.11 -------------------------- Timesig is properly set, only when needed. It's also saved as part of the GROOVE. Major change to BASS patterns. First off I've put tables into MMAchords.py which represent scales associated with different chords. I think they are all correct, but proof reading is welcome. These scales are used to select bass notes, instead of taking the notes out of a chord. The result is that you can now specify any of 1 to 7 as the noteoffset to select in a bass pattern. This makes bass much more versatile. BASS pattern note offsets can also have a "+ - # b or &" added to represent an alternate note. The "+ -" are for octaves, and can be concatenated. For example, a note offset "5++" would be the fifth of the scale (a "g" in a C chord) 2 octaves above the normal note. The note offset "6#" would be the 6th raised a semitone (we use this in the boggiewoggie style). To keep chord names and note names similar, you can not use '&' as well as 'b' to designate a flat. The chords 'E&' and 'Eb' are the same. The SCALE track has be revamped to use the new scale tables. The SCALETYPE options are now limited to CHROMATIC and AUTO. I've also attempted to keep the scale running to the next note even when chords change. Also, changing SCALETYPE or DIRECTION will now reset the scale to restart at point 0. The WALK track now uses the scale tables. This should be transparent from older versions, but faster. Fixed minor problem with drum tracks not getting a default voice. Added code to signal current voice set in shared tracks. Added harmony types: 8 or 8BELOW - single note one octave below 8ABOVE - single note one octave up 8BOTH - two notes, one octave below and one above 16BOTH - two notes, 2 octaves below/above AUTOSOLOTRACKS: This list now has a dual purpose. First, it assigns solos to tracks in chord lines (as before). Second, it is parsed before each chord line and any assigned tracks set as HarmonyOnly are filled with Note data from the first line. See docs for details. MIDIVOICE: I've added/duplicated the loops so that data can be sent BEFORE or AFTER the controller voice data. Seems that some controllers are reset by a voice, others not. My experiments show that BANK should be sent before, most others AFTER. So, we use the beat offset: 0 -> before; 1 (or anything not 0) after. Egs: Voice Piano1 MidiVoice {0 Bank 5} results in: 0 Param Ch=xx Con=00 val=05 0 ProgCh Ch=xx Prog=00 Voice Piano1 MidiVoice {1 ReleaseTime 100} results in: 0 ProgCh Ch=xx Prog=00 0 Param Ch=xx Con=72 val=80 Just the order is changed, but a sequencer should send items in the right order. RIFFS: A new command, RIFFS (not RIFF) lets you set multiple riff lines (for solos or sequences) in a stack. See the docs or the sample file egs/riffs.mma. LYRICS: Yes, a new command option "Lyric Set stuff" lets you define lyrics in a command line. See the file egs/lyrics.mma for example. Neat thing is that it works much like RIFFS so you can stack all your lyrics in one place. Your mma files should look neater with this :) REPEATEND: Added optional counter. Now, "REPEAT..REPEATEND 2" will cause a a total of 3 copies to be made. "REPEATEND 1" is the same as the default. A bit of odd behaviour with REPEATENDINGS, but this seems to be a logical way to handle things. Added ~ notation to solo lines. A ~ as last note-event means to not warn about too-long lines. In addition, the extra time is saved for the next line. If a line starts with a ~ and the previous line ends with ~ as well the extra time is squeezed into the new bar. This makes it easy to handle notes which are tied across bar lines. Also, you can have empty events by using just a <>. This is covered in the docs better, but consider this: z {4a;b;c;1+1+4d~;} z {~<>~;} z {~4a;} Added the ability to include arbitary MIDI files into a MMA generated file. See the docs and/or the files in eg/frankie. Fixed bug in the voicing RMOVE code. I think the limits now work properly and we no long have chords walking into the bass domain. Dec 3, 2004 Released 0.12 -------------------------- Added note '6' for 1/16 triplet and '5' for 1/8 note quintuplet. Slash chord (ie. F/C) are now supported. There are 3 possible slash combinations: - C/E - simple inversion D/C - addition of maj7 as bass note - ("in the scale") D/G# - addition of a aug4 as bass note - ("out of scale") The first 2 forms are supported, the final causes an error. Added a longish note on libraries in the paths section of the documenation. Added DEFCHORD. This permits you to define a new chord type in a mma file. Syntax is detailed in the manual, but: DefChord NAME Notes Scale name is case INsensitive Notes are chord offsets. Enclosed in () and comma separated. (eg. Major Chord is ( 0, 3, 5) Scale are scale offsets. Have to be 7. Enclosed in () and comma separated. (eg. Major Chord has (0,2,3,5,7,9,10) Added PrintChord. Prints the notes/scale associated with an existing chord. Useful to cut/paste to create new chords with DEFCHORD. PrintChord maj7 m7 dim will print the existing defs for a "maj7", "m7" and "dim" chord. Added ChShare* command. Exactly the same as ChShare, but no warning printed. This is probably a shortlived addition, so you might NOT want to use it :) Chord patterns can have 'direction both' which causes strumming to alternate directions. The system macros have been completely reworked. They are now all dynamic, so they don's show up in a ShowVars command. In addition, a number have been added, in particular look at the $_TrackName_xx macros ... these are useful in situations like when you do a ChShare. See docs ... quite a bit on this. Added warning if you select a track-groove with no sequence. March 21, 2005 - released 0.13 -------------------------- CHSHARE* is gone. CHSHARE has been changed a bit so that the current voice and octave from the old track are now copied to the new track. In most cases, this is what you will want. I really don't think that doing chshare is a great idea unless it's really needed due to running out of MIDI tracks. Makes for subtle problems and more difficult debugging. VOICE - if you change voice in a track which has been CHSHAREd, a warning will be printed. OUTPATH: This setting can be done in the song file now, not only in a MMAStart. System macros $_AutoLibPath, $_LibPath, $_IncPath and $_Outpath added. Well, a lot more than that ... best to check the docs for the current list of system variables. A major change to the auto groove loading database. Please read the manual in the PATHS/FILES section. Autolib variable and setting added. If you have a MMADIR file in your mma/lib directory please delete it. The database(s) are now stored in files named '.mmaDB' in each subdirectory in mma/lib. Variable can be concatenated in SET. For example, Set a foo bar Print $a > foo bar Set a foo + bar Print $a > foobar A chordname can start with a single "+" or "-". This will move the chord and scale up/down one complete octave. Useful for chromatic chord runs when the octave shifts the wrong way. Also, a secondary octave adjustment has been removed (hopefully this will avoid some awkward shifts). Added new command ALLTRACKS. This loops though all currently defined tracks and applies the given command. Eg: "Alltracks Articulate 90". With ALLTRACKS working the global versions of CHANNELVOLUME, RSKIP, RTIME and RVOLUME have been deleted. Use the track specific versions or use ALLTRACKS. I think that this is more explicit and easier to follow. Increased permittable ARTICULATE values to 200 (which means that notes will sound 2x as long as requested). Values greater than 120 will generate warning (the 200 limit is just something self-imposed). You might find values in the range 100 to 120 handy to force long and tied notes. Fixed DOWN DIRECTION in Scale tracks (it now works). Fixed annoying bug which sometimes put VOICE changes after the first note in a track (RSKIP could put first note before bar start). May 14, 2005 - released 0.14 ---------------------------------- Fixed Voicing so that "Rmove=0" is legal. Validation didn't accept "0" and this created a system macro problem. Fixed MidiClear to take at the start of a groove switch, not the end. If done at the end the data was gone. The (de)cresc code has been modified to take an intial "start volume". So, instead of doing something like: volume pp Cresc mf 8 you can now combine this to: Cresc pp mf 8 The ACCENT code has been tweaked and you can now have a different set of accents for each bar in the seq. To use this you have to set different bars in {}s. The old method still works. Egs: // accent drum on beats 1 and 3 Drum Accent 1 20 3 20 // same as above for bars 1/2/3, on 4 do beat 1 only. Drum Accent {1 20 3 20} / / {1 50} A new command, DrumTR, as been added. This is similar to the existing VoiceTR command, but translated drum tone selections. Added VoiceVolTr and DrumVolTR. Same purpose as DrumTr and VoiceTr ... in both cases the volumes assigned to certain tones are adjusted. Read the docs. The RC FILE logic has been changed a bit. First, the order for checking for RC files now FOLLOWS the order in the docs. Second, the reading of RC files ends when the first one has been found. If you want multiple RC files read, include the others in the top level. Don't know what I was thinking at the time, but most of the minor scales were wrong (the chords were okay). Fixed bug in tilde continuation in solo notation. Added ChordAdjust command. This moves selected chords (by pitch) up/down one octave. See docs. Fixed Solo tracks so that tracks without data are properly converted when HarmonyOnly is set. Whatever code was in previous versions was dumb and wrong. July 22, 2005 - release 0.15 ------------------------------- Added NOTESPAN directive (mostly to duplicate accordion bass). Added Macro $_TRACK_NOTESPAN. When calculating a note length you can subtract as well as add. So, to get a note just a bit shorter than a full bar, you can do something like "1-0" which generates a note 1 midi tick shorter than "1". The code which set the keysig in the MIDI track was broken. Fixed. You can now use names like "F" or "G#" when setting the key signature (as well as 1b, 2#, etc). See docs. ALLTRACKS has been fixed, and now has an optional track type parameter. See docs. For all volume commands you can now specify the volume as a dynamic string (ff, mp, etc) a value (10,30, 100, etc) or an percentage adjustment (-10, +30, etc.) The various volume macros now print numeric values instead of guessing at the closest musical string. Subdirectories in the lib directory were not properly initializing the .mmaDB database file. When defining patterns you can specify a beat from 0 to 4.9 (assuming 4/4) rather than 1 to 4.99. Any chords player in the 0 to .999 range will be played in the previous bar, but with the current bar's chord. Nice for push chords in jazz. A warning will be printed for all patterns with 0 to .99 offsets. Added 81 and 82 notes. 81 is the first of a swingskew 8th, 82 the 2nd. Added SWINGMODE command: args ON/OFF en/disable swingmode. Skew=xx sets the rate for paired 8ths. You need to use the special 81 and 82 notation for this. See docs ... it's way too complicated for this file. Added STACKVALUE command. This puts its args on a stack. You can retrive with $_STACKVALUE. Handy to save/restore settings in a section without needing a 'real' variable. Oct, 2005 - release 0.16 ------------------------------- The SEQNORND command has been removed (use SeqRnd OFF). SeqRnd has been enhanced. You now need to specify ON or OFF, plus in global mode you can specify the tracks to apply rnd to. See docs. Added macros $_SeqRnd and $_TRACK_SeqRnd. Fixed bug in INVERT - thanks to Matti Jokinen. The notes C# and Cb were left as natural in Solo/Melody (a result of the swingmode hacking). Also, the note C below the staff was not generating a harmony note. Sorry ... important enough to force an interm release. Oct 8, 2005 - release 0.17 ------------------------------- AutoSoloTracks: If there was a trailing space in the first solo an error would occur with the auto track. Lines like {1c ; } didn't parse properly for the 2nd track. When a variable set with MSET is epxanded the current state of BEGIN will be honored. Have a look at the song "All of Me" to see how this feature is used to create a solo riff in 2 tracks. The Begin/End code has been rewritten. I think it belongs in the parse code, not the file. Mset macros with only one line now work. TEMPO: Changed again. Sorry. But, to make this consistent I've decided to change the syntax once again. Now, you MUST NOT have a space between the "+-*" and the value. So, to double the tempo use "Tempo *2". Warning messages now display filename as well as line number. The RIFFS command has been deleted. The singular RIFF now handles single and multiple settings. Added the note lengths '23' and '43' for a half note and quarter note triplet. SEQCLEAR no longer deletes/clears info for SOLO tracks in global context. Note, that "Solo Seqclear" still works as before. This change is in keeping with the "gooves etc don't effect solo tracks" concept. DUPLICATE. Gone! This was a command inserted in early development, before we had unlimited tracks, etc. And it never really worked ... if you want to duplicate a voice into a different octave, etc. just create a new track. From the command line it is possible to define a macro: -S foo=bar will set the macro $foo to the value 'bar'. Added CHORDS option to LYRICS. This copies the chord line as a lyric event. So, your karaoke player can display the chords as they go though the song. And while screwing with Lyric I've added a lyric macro ... not that useful, but can be used in debugging. A further enhancement to set volumes: you can set a volume with a string and inc/dec that by a percentage. Example: ff+10 will give the 'ff' setting plus 10%; mf-10 will give the 'mf' setting minus 10%. Adjustvolume: 2 changes ... set the changes as "mf=xx" pairs; the 'xx' can be an existing volume, ie "mf=f+200" sets the volume "mf" to the "f" volume plus 200%. Nov 3, 2005 - release 0.18 --------------------------------- The lyrics->chord option wasn't discarding leading "-+". GOTO has been improved. Now all lines with a leading linenumber are considered to be labeled lines. So, it is now easy to jump to a section without having to set a label. Handy if you want to just test the last few bars of a song. Still doesn't work in repeats :) A new "pattern" has been added to the "Sequence" command. You can now use a single "*" to indicate "use existing pattern". This is useful if you want to create a modification of an exisiting sequence. Example: Drum Sequence D1234 D1 Drum Sequence * D24 The 2nd sequence will really be "D1234 D24" Added default Tone to Solo tracks if they are DRUMTYPE. This is set with a "Trackname Tone xx". It just means that you don't have to set the initial tone in a solo string. Also, you can use the special name "*" in a solo drum line to force the use of the default. The MALLET option has been enhanced so that it now works will all tracks, not just SOLO/MELODY as before. Lyrics now support transposed chord names with the Chords=On option. It DOESN'T look at the global transpose setting, so you can have transposed chord names (perhaps for cappo?) other than the chord names in the mma file. See docs. For some unknown (to me) reason volumes were being applied stupidly. In previous versions the base velocity was muliplied by the track and master percentage ... now, the base is mulitplied by the combinations of the track and master. This gives more consistant and broader volumes. Added volume "m" and use that as default. This is set to 100%. The ratio of the master vrs. track volume can be adjusted with the VolumeRatio command. Default applies 60% of the track volume and 40% of the master. Solo/Melody tracks had a funny initial velocity. They now default all notes to a velocity of 90 ... this is adjusted by the track and master volumes. You can't change the 90. A bit of fiddling with REPEATs now permit using 0 and 1 as the count. See the docs and the example file 'repeats'. This lets you skip entire repeat sections. Handy for debugging and setting up codas. VEXPAND -- somewhere along the way this was broken. Fixed. LYRICS BARSPLIT -- was broken, fixed. Added macros $_VExpand, $_BarNum and $_LineNum. SHOWVARS can now take args (which vars to print). Tweak to (De)Cresc. Previously the first bar after the Cresc was played at an increased volume (or decreased for Decresc). Now the first bar is played at the current volume. This makes sense in the case of commands like "Cresc PP F 4" ... the first bar will now be at PP, the 4th at F and the other 2 something inbetween. Added -Dk command line option. This will print out a summary of the various keywords MMA uses. This is meant to help folks writing editor extentsions for MMA. Dec 24, 2005 - release 0.19 --------------------------------- Bug in Sequence "*" when existing pattern was NULL fixed. Solo tracks were not doing ARTICULATE. In just about all cases where an integer value is expected you can use hex or octal notation. Shout if I missed something. Mainly done to support inc/dec for hex macro values. Some additional harmony modes added. Minor bug fixes. March 8, 2006 - release 0.20 ----------------------------------- Fixed warning report when unknown track is used with "Track Groove". MAJOR change to the modules stuff. I've done a bit better at using Python standard packaging methods. As a plus, the code seems to run a bit faster. From a user perspective, the only real change is that the modules directory has been renamed MMA. Fixed a few mistakes in midiInc ... misspelling of char() instead of chars(). Lyric and Text events can now be copied via a MidiInc command. See docs. April 6, 2006 - release 0.21 ----------------------------------- Added GROOVE list. You can now have a list of grooves (instead of just one) on a GROOVE command directive. This is for alternating time sigs, or if you want a quick & dirty change between alternate bars. ALTERNATELY, you can start a list of grooves with a , and the specified groove will be used. Handy for changing gooves in repeated sections. Minor change: you can't have an integer as the name of a groove. Fixed -c option, now shows channel assignments. Added HarmonyVolume ... default harmony notes are 80% of main note. Changed the harmony settings: the number of modes has been reduced, but you can concatenate them like OPEN+8BELOW, etc. See docs. Harmony now gets its own manual section. Added optional 'cut' and 'common' settings to TIMESIG. Added -i option to specify the RCfile to use. Modified -Dk to be a bit more machine friendly ... no extra formatting. Fixed parse bug. Lines with only a line number were causing an eof. The routines extracting lib info reported tracks which had no sequence set. Added ForceOut command. This forces the output of MIDI Voicing commands to "empty" tracks. Neat to set the keyboard channel with a song. See manual. June 26, 2006 - release 0.22 ----------------------------------------- I just discovered that python 2.4 has sorted() as a builtin :) So, I've gone though the MMA code and changed a bunch of sort() to sorted(). Added RNDSEED command. September 1, 2006 - release 0.23 ----------------------------------------- MidiInc: Added a bunch of warnings, added Start and End options - this permits the inclusion of selected part of a midi file. The filename is now expanded for tildes. Added MIDISPLIT so that each note in a track can be output to a different midi track. Split out the midi.py file into midiC.py, midiM.py and midi.py. Added SeqRndWeight for global and tracks. This is potentially very useful. Read the manual! Added $_TRACK_Channel macro. Returns currently assigned MIDI channel number. Added TRACK MIDITNAME command. This sets the track name (in the midi file) to something other than the MMA track name. Added an inversion option to chord notation. You can specify an inversion with CHORDNAME>N where N is -5 to 5. This indicates the number of rotations to do. Handy if you want to avoid slash chords, but want a special sound. This documented in appendix A.1 of the reference manual. The tutorial now has a "library creation" section. Thanks to Rony Steelandt. Added RndSet. Sets a variable randomly from a list: RndSet A 1 2 3 4 5 Sets $A to one of the values. Added MIDIMARK. Inserts a midi marker at the specified offset. Command name changes: PAN -> MIDIPAN, PORTAMENTO -> MIDIGLIS and CHANNELVOLUME -> MIDIVOLUME. These changes make all the MIDI commands somewhat more consistant. September 25, 2006 - Released 1.0-RC1