Saturday, December 10, 2016

Neat sounds using apreggiate and mallet

I needed a somewhat spooky introduction to a song I'm playing. Here are a few lines which might be of interest with (hopefully) useful comments:


Tempo 80
Keysig Ab  /// important here just for the chord choices


// Set up our solo voice
Begin Solo
    Voice OrchestralHarp
    Articulate 190  // very long sustain
    Harmony 3Above+3Below+38below  // lots of notes
    Arpeggiate Direction=Down Rate=16 Decay=-4
    Mallet Rate=64 Decay=-5
    Octave 5
    Begin Riff
        1a+;
        1f+;
        1d+;
        2bn;2c+;
    End
End

Groove NiteJazzIntro   /// our intro groove. Could be anything

Decresc mf mp 4  /// have volume decrease over 4 bars

1         Fm
2         Dm
3         Gmb5

// Change a bit for the final bar
Begin Solo
  Arpeggiate Direction=Down Rate=43 Decay=-4
  Mallet Rate=32 Decay=-2
  Articulate 200
End

4         Fdim / F#dim

And, that's all folks. Cut and paste into an editor and run it though MMA. Now, you can play with some of the rates and get your own ethereal sounds.

Have fun!



Wednesday, November 30, 2016

New videos

The music teachers group I belong to had their annual concert earlier this month and I played two songs with fellow teacher, Monte Anderson, accompanying me on piano. And our good friend Brian Stushnoff was on hand to video the event. Here are my performances:

MIsty: www.youtube.com/watch?v=ZlonbWbM4WE&t=6s

Bluesette: https://www.youtube.com/watch?v=U6vstCTlXmo&t=4s

I'd love to hear what you think of these. Send me a note by email, here in the comments or in a youtube comment!

Thursday, September 15, 2016

I felt great today!

So, here I was ... just minding my own. Doing a bit of email, etc. and I got a phone call. Nice, elderly lady looked up my number and told me that she'd finally decided to give me a call. She'd purchased one of my CDs, mellowood.ca/music/cedars/index.html five or more years ago at an art show and really needed to let me know how much she still enjoyed it. I could hear it playing in the background. During our brief conversation I thought she was going to break down into tears.

The CD was done as a test of MMA! All the backgrounds, 100%, were done with MMA. All I had to do was write the melodies, play the saxophone, record and mix it all. The simple stuff :)

Made me feel pretty darn good knowing that this little test could bring such joy into someone's life!

Saturday, September 10, 2016

New Developer Version 16.06.a

I've posted mma-16.06.a on the download site. A few features I'm sure "someone" will like:

 - The AFTER option parser now permits option pairs in the command to execute properly.

 - DefaultDrum now sets up solo/melody tracks as
      well as drums. I've spent quite of time debugging this apparently simple fix. Please let me know if get it to crash!

 - The plain old #5 for a major chord no longer works (well, it didn't before!). Please use (#5), + or aug.

As always, you can get this at:

 http://mellowood.ca/mma/downloads.html#developer

Have fun!

Wednesday, September 7, 2016

Drum Voice

I've added the following to the docs for setting a voice in a drum track to the manual: 

All DRUM tracks share a common MIDI channel. This, for all practical purposes, means that all DRUM tracks will have the same VOICE or "drum kit''. In most cases, it is recommended that you use the VOICE command only in the generic track "Drum''. At this point, MMA doesn't enforce this recommendation. 

Hopefully this will eliminate some confusion.

Sunday, September 4, 2016

Different Ways to do Things

It always surprises me how different folks use different methods to do the same thing.

I had some discussions the other day with a fellow who was using MELODY tracks to create drum patterns. And, this actually makes perfect sense. He gets to use a sheet music-like notation instead of defining SEQUENCES. Of course, using the notation for Melody/Solo one loses the ease of using different velocities, repetitive patterns, etc.

But, it sure is cool to know that people are doing things completely different from anything I imagined. Let me know if you're breaking or bending the rules.

Tuesday, July 12, 2016

Short example

I was writing a short intro today and needed a background with only a sustained chord track. I was going to write a simple groove ... but then realized that it was simpler than that. Here's what I did:

  /// start off by turning off everything
   Groove None
  /// and now load a single track
   Chord-Sus  Groove RockWaltzSus

Yup, it's that easy.

A problem with #s in chord names

Just working on a song and had a chord "F#5". Looking at the actual song, this was clearly supposed to be an F augmented or F with a sharp 5. But, the way MMA is right now it takes it to be an F# altered 5th (Power chord). Not at all the same.

So, I'm changing things so that  #5 is replaced with (#5).

Want to make the change in your version? Just change '#5' to '(#5)' in line 494 of chordtable.py.

Of course, you can always use "Faug" or, even easier, F+ and get the same results.

Comments? Suggestions? Always appreciated!

Monday, July 4, 2016

Let's share

I got an interesting email today from a fellow who'd just finished a complete song using only MMA to create a background track for a video game he is working on.

So, I listened to it. And was amazed ... it was really good.

He had a few comments and questions which I answered to the best of my abilities. But the email reminded me that there is a spot on our web page:

    http://mellowood.ca/mma/coolstuff.html

for real world examples.

So, what are you creating with MMA? Let me know and I'll add you to the links!

Friday, June 24, 2016

Starting 16.06.a

So, we're into a new beta cycle.

First thing today I incorporated a patch from Ignazio to fix a AFTER problem. The way the options were being parsed, an option in the command being set-up for future evaluation was interpreted as an illegal AFTER option.

Well, that's the first change being put into 16.06.a. Gotta start somewhere!

Tuesday, June 14, 2016

Die bugs, die!

Found yet another bug in the last release. Only when using Python 3.x ... fixed and a new version is up. Sorry about that!

Sunday, June 12, 2016

Will the bugs never die!

Yesterday I posted version 16.06 of our favorite accompaniment creator. Today I got the first bug report :) There was a minor issue with the pluginutil module. It didn't properly handle the new version number. The report was accompanied by a fix which has been applied. I've reposted the distribution files. Same version number!

Saturday, June 11, 2016

Finally ... 16.06 is now on line!

A stable release, version 16.06, of MMA--Musical MIDI Accompaniment is available for downloading. In addition to a number of bug fixes and optimizations, MMA now features:

 - A number of new macros
 - RPITCH command
 - SUBROUTINES
 - FRETNOISE option for Plectrum tracks
 - Enhanced TIME options
 - PLUGINS
 - AFTER command
 - Other minor enhancements

Please read the file text/CHANGES-15 for a complete list of changes.
 
MMA is a accompaniment generator -- it creates midi tracks
for a soloist to perform with. User supplied files contain
pattern selections, chords, and MMA directives. For full details please visit:

   http://www.mellowood.ca/mma/

If you have any questions or comments, please send
them to: bob@mellowood.ca

Friday, June 10, 2016

More docs done

Progress. Got the docs for "After Bar=EOF" done.

Tomorrow I'll start to package the new 16.06 version. If no problems come up it should be posted on Sunday.

Thursday, June 9, 2016

Progress

I finally found time to finish the doc part for the QRiff plugin. Now, I have to write up the After Bar=EOF addition, run a few tests ... and then ... then ... we can release version 16.06. It will be an important day in the history of music :)

Thursday, June 2, 2016

More AFTER

I mentioned the other day that I had written a little quarter tone plugin. Only thing about it was that it left tracks detuned at the end of a song. So ... had to do something about that :)

I added a EOF option to the AFTER command. Now, you can set a bunch of commands to execute at the end of a file. In my case, it's to "retune" the tracks being used for quarter tones.

Hope you'll be able to use it for other tasks.

I'm officially setting a feature freeze! I hope to release a new stable version, 16.06 early next week. Stay tuned!

Monday, May 30, 2016

Quarter tone support

I had a request the other day about quarter tone support. Quarter tones are (mostly) used in middle eastern music and are very interesting.

The problem with them is that the western instruments we are used to just don't really support them. Well, MMA to the rescue ... well, sort of.

I hacked out a little plugin which takes a standard Solo RIFF line and parses it into separate tracks with the quarter tones in their own track. Then, during play, the quarter tone track is adjusted.

Using multiple tracks, with some detuned, permits this to work on the majority of existing synths. Even cooler is that it's yet another example of plugins in action.

This is not a finished project. More a proof of concept than anything else. I'm hoping that the fellow who made the original request will run with the code and make really useful. If one of you want to work on this I can put you in touch.

Sunday, May 22, 2016

New version 15.12.c

Okay testers! I've finally gotten the new test version up for you. This version has the AFTER command which lets you set a command line for future execution. If you use macros to set your melodies you'll find this handy.

The version also introduces new bugs while fixing others :)

Get it at: http://mellowood.ca/mma/downloads.html#developer

Saturday, May 21, 2016

AFTER docs

Wrote some docs for the AFTER command. I think they even make sense!

Having a bit of lunch now and then I'm going into town to do some street playing on my saxophone. Fun.

Will review the docs and example files tomorrow and hopefully get a developer tarball put together then.

Friday, May 20, 2016

Changed AfterBars to just "After"

So nice to have all my stuff running again. The "server is gone" was just one of many tech issues I had to deal with over the last few weeks. Hopefully, that was the end and I can just enjoy the rest of 2016. Yeah ... right.

I got a bit of time today to play with the AFTEBARS command. I've decided to change the name of the command to just AFTER. Not only is it shorter, but it makes more grammatical sense as well. Seemed silly to have statements like "Afterbars Bars...". Plus, I'm thinking that there might be other triggering events we can add at a later date.

I've got to write some docs for this and another example. Then I'll push out a developer version.

Tuesday, May 10, 2016

Server down

My server host is experiencing a DDoS attack. Not just my site, but the entire site's web servers. I have no idea what the issue is ... but my site (and email) as been out of service now for a day or so.

If you have a suggestion for a low-priced web hosting alternative or if you need to contact me please send mail to bobmellowood@gmail.com

Saturday, May 7, 2016

More afterbars

Finally found a bit of time to work on this some more :)

I think we're going to change the command name to "trigger" to keep it consistent with the existing track-trigger stuff. I'm also thinking that keyword options will be:

     Trigger AT=xx   CMD.. /// do at specified bar
     Trigger After=xx  CMD.. /// to after xx bars
     Trigger Repeat=xx  CMD... /// do every xx bars

Multiple trigger lines are permitted, and each can have its own settings.

I don't think that every user will be using this ... but it's a simple addition and should make using melodies set in macros a bit easier.

Thursday, May 5, 2016

New command: AfterBars

I've added a new command: AfterBars.

The idea is that you can set "something" to happen at some point in the future.

For example, you might want to print a message to the terminal every 10 bars (nope, no idea why you'd want to do this). Or, more usefully, you may have set a song (or part) into a macro and want to change the volume of this after a few bars. So, you can now do something like:

   Mset  Melody
       C
       D
       .... more chord lines
   EndMset

And expand this melody a number of times:

    $Melody
    $Melody

and now, for the final loop, we change the volume after 4 more bars:

     AfterBars Count=4 Volume pp

And, now the command becomes cool.

You can even set a specific bar number (Bar=32) or repeat the command every nn bars.

I need to work on this a bit more and debug the line number settings before we get too excited. But, this will find itself into the next developer release. Hopefully, next week.

Standby :)


Sunday, April 24, 2016

Python exceptions

When writing Python code it's import to trap errors :) And MMA does this, fairly well.

But, I just had some fun with the plugin loader. I kept getting a weird error message which didn't make a lot sense. After a bit (well, actually quite a bit!) of head scratching I finally figured it out.

In the regplug.py module I have a bit of code which looked a bit like this:

    try:
        e = importlib.import_module(modName, package=None)
    except ImportError:
         error( ... report error ... )

this was meant to trap/report a problem loading the plugin module. If the module just didn't exist or was unreadable it worked fine.

But, what if the module was there and there was an error in it which caused a problem when loading? If it was something dumb like too many '(' or ')'s python reports the appropriate error as a crash. Okay, that's probably just fine. Writers of plugins should make sure that they work!

But, what if the module being loaded has a "import xxx" line? Well, since we're catching import errors, we catch it. I don't think we can set up a try/except which only works a one level.

The solution is simply to change our code to:

    try:
        e = importlib.import_module(modName, package=None)
    except ImportError, err:
        error("Plugin: Error loading module '%s'. Python is reporting '%s'. "
               "Most likely there is an Import statement in the module which is not working."% (modName, str(err)))

and now MMA reports a more useful message.


Thursday, April 14, 2016

New test version

I finally got a crappy-weather-day here. Ideal to do some needed updating to the plugin routines! Ignazio wrote a nice little module (included in the MMA module directory) with some standard functions which should make writing a plugin easier (well, more consistent). So, that along with his docs, have been added to the official tree.

I really hope some of you are taking advantage of the plugin facility. Possibilities are endless!

So you can enjoy the latest I've put a new developer version up on the website. You can get it at: http://mellowood.ca/mma/downloads.html#developer

Unless we find some serious bugs, this will be the next stable release. Probably version 16.06. But who knows?

Tuesday, March 8, 2016

DupRiff

If you use RIFFs much you should know that you can copy an existing riff to other tracks. Easy.

But, I just added and enhancement to reverse the order :) Now you can copy FROM another track as well.

It's not a big deal, but is very handy to use in Begin/End situations.

Friday, March 4, 2016

Plugin security

I'm wondering if the current checks on the plugin security are not enough or silly and in the won't-ever-prevent-much category?

Right now we check to see if the requested plug has been "authorized" and let the user decide if he/she wants to use it.

One of the things we do is to run a checksum on the main module. This is stored with the authorization. If the checksum changes, we request a new authorization.

But, it's really silly since it's very easy for a "bad person" to sidestep with by calling another module. Leave the main "plugin.py" alone and modify something it calls. And so we go down the rabbit hole.

My proposal is to dump the checksum and just ask if the directory/module is okay.

And what do you folks think. Please let me know.

Sunday, February 21, 2016

New version 12.15.a

At some point we have to release our children into the wild world. Here's the latest! A new test version of mma is now available. Lots of new stuff for you guys to break!

    BUGFIX: lots of minor things.
    ENHANCEMENT: Multiple +/- for chord octaves.
    BUGFIX: string compares were wrong.
    BUGFIX: timing issue with plectrum tracks.
    ENHANCEMENT: error/warning messages pretty print.
    NEW: Plugins! RTFM!!!!
    ENHANCEMENT: added chords 7b5(add13) and 7(add13).
    ENHANCEMENT: ChordAdjust adds RESET and concated names. Also new macro $_ChordAdjust.
    CHANGE: Version numbering now inserts a . before minor.
    CHANGE: the HTML docs now include the chord and plugin references.

I think the biggest thing is the plugin support. Please have fun and see how useful this can be. Let me know!

Get it at: http://mellowood.ca/mma/downloads.html#developer

Saturday, February 20, 2016

Comments

I had a comment the other day from a user who said he couldn't post a comment. Seems to work for me. Here's what I did, after signing in to Google as a different user, but I'm not sure that is needed ....

1. Click on the text <xx comments> or <no comments> at the bottom of every post.

2. Enter you comment.

3. It's that simple.

4. I have to approve each comment. I get a notice in my mail that you have commented, and I get to decide if I want it published. And, unless it's obvious spam/scam I'll approve.

5. Moments later ... the comment should appear.

So, please post your comments! And if you have a problem, sent me an email.

Thanks.

Saturday, February 13, 2016

ChordAdjust

I did a bit of work on ChordAdjust today. Added a <reset> option and you can now concat a bunch of chord names (F,G,F#=-1) instead of doing them one by one.

I've done more work on the plugin module as well and now have better feeling about the security of the thing. Users now need to enable each plugin. Of course, the settings are saved so it only needs to be once.

Stay tuned.

Sunday, February 7, 2016

STICKY bug fixed

So, I was going to work on more docs today ... well, after I did a track for a little song I transcribed from a fake book. And, knowing everything about MMA, I decided to use the Sticky track feature. Only problem was that it just didn't work.

To make the story about a long debugging session short, the SeqClear command was wiping out the settings so carefully set in my track. The fix was simple: just don't clear sticky tracks!

Done.

Saturday, February 6, 2016

We are getting real close to a new developer release. I just finished off the first draft of the plugin API document. Gotta let it simmer for a few days, re-read and edit.

A few more little things and I'll do the release!

Tuesday, February 2, 2016

I've made a minor change to way the html docs are packages. I now have an entry for the yet-to-be-written plugin reference guide and one for the chord reference manual (list of all chords MMA knows about). This is all on the documentation page, so should make it easy to access it all.

Friday, January 29, 2016

Documentation day. I've done the first draft of the manual pages for the plugin stuff and started a developers "how to" as well. And, in between all that word-smithing I managed to go though the existing docs and fix some typographic stuff to do with footnotes at the end of sentences (note to self: the footnote reference number comes after the punctuation!).

Tuesday, January 26, 2016

I have more work done on the plugin mechanism. Plugin names and their associated directories are now totally case-insensitive. They can now reside in three different locations:

      the current directory (.),
      the directory of the current file being processed,
      the plugins directory.

Also added a bunch of debug stuff and sanity tests.

And, while hacking away, I've made the pretty printer for error/warning messages even pretty by using the terminal width for formatting.

All is very cool. Release coming soon.

Friday, January 22, 2016

In addition to my house chores (snow shovelling and getting a room ready to paint) I did manage a bit of MMA work today: Changed the error and warning report to pretty print (line wrap) messages. Wow, only took how many years to get around to this task? Well, it's done. Hurrah.

Thursday, January 21, 2016

I wrote the documentation for the enhanced subroutine code today. Getting it proofread right now. Hopefully that will now be done (I've been stalling way to long on this).

Next, I write the docs for the new plugin stuff. That's actually pretty easy ... the hard part is pushed off to plugin writers :)

So, a new developer release is getting closer and closer! Hopefully within a week.

Tuesday, January 19, 2016

And the name decision has been made. Plugins will reside in a directory with the same name as the plug ... so the "hello" plugin will live in plugins/hello. When the plug is registered it will be called "@hello".

This should make it easy to see plugin commands in mma source files.

Monday, January 18, 2016

I have the plugin business working quite nicely. Yes, soon there will be a beta for you all to try out!

But, first a question: How to name a plugin?

Up to now my test code has been accepting a name (for example "Hello") and adding that to the command tables currently in MMA. This means that you can use "Hello" just like any other command.

It might be just a bit too easy and quite hard to spot in MMA source files. So, I'm suggesting that we convert "Hello" to "*Hello" in the internal tables.

Any comments?


MMA -- Musical MIDI Accompaniment generates background tracks for your songs. Get it at http://www.mellowood.ca/mma .

Friday, January 15, 2016

So, a bit more work. A bit more searching for useful Python code (where would the world be without Google?). A bit more head-scratching. But, worthwhile!

MMA now has the ability to use plugin commands for both its basic and track operations. The process, once the plugin is written, is seamless and invisible to the user.

Cool.


MMA -- Musical MIDI Accompaniment generates background tracks for your songs. Get it at http://www.mellowood.ca/mma .

Wednesday, January 13, 2016

I have just added code to permit plugins. Very cool ... and very beta just now.

The idea is that code can be written to extend mma's current command set in a python module outside of the main distribution.  Once registered, these user supplied modules work just like any other mma command.

Right now one needs to use a PLUGIN keyword preface, but I'm working on eliminating that.

The next developer release is going to be lots of fun!


MMA -- Musical MIDI Accompaniment generates background tracks for your songs. Get it at http://www.mellowood.ca/mma .

Sunday, January 10, 2016

Remember what I said about bugs the other day? Well, squashed another one! There was a timing issue with offsets in the Plectrum code. Thanks Iganzio good eyes it was found and squished. Gone. Out damned bug.



Friday, January 8, 2016

I am always amazed by the feedback my little MMA program gives me and how much I learn from it. Here's a cool little example: The other day I created a short MMA file for the Nat King Cole (and many others ... including Lady Gaga) song "Orange Colored Sky". I used the ModernJazz groove. Pretty simple stuff ... but then I figured it'd be cool to have some brass hits on the "Flash Bang" stuff. So, I programmed in a BrassSection voice for this with the default articulate of 90. Sounds fine, until I played my horn with it. I kept hearing this echo of the brass after my notes. So, I ended up shorting the notes using "articulate 70" and this pretty much duplicated my played notes. Interesting just how much I was cutting the notes!
So Ignazio  sent me a big patch for the function code in MMA. Once this is completely implemented we'll have default values, local variables and full recursion. All I have to do is to figure out how it all works and write the damn docs :) This code is a BIG DEAL and I'm really grateful for the work and effort. It will certainly be part of the next beta!

Tuesday, January 5, 2016

You know, it's amazing how bugs persist.

I just got notified of a bug in the If/Then code which meant that most string comparisons weren't being done correctly. And, I have no idea how long this bug has been around (and, no, I'm not going to look at old versions to see either).

Anyway, it's fixed now and will be in the next beta release. If this bug is bugging you, send me a mail and I'll send a fix.

Friday, January 1, 2016

Chord octave adjustment

I have modified the chord parser octave adjustment. In previous versions of MMA you could only have a single "+" or "-" in front of a chord name to adjust the octave of the chord. You can now have a nearly unlimited number. Great for the occasional beat you might want to punch out.

 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...