VocalEasel/mma/egs/aria/aria.txt
Matthias Neeracher 35300f3344 merging mma-1.1
2007-04-29 06:47:40 +00:00

203 lines
6.5 KiB
Plaintext

This is the initial doc file for the new ARIA track. The plan is to
incorporate this into the main documentation once the command settles
down. In the meantime I really do want feedback. Thanks.
Purpose:
The new ARIA tracks are designed to let MMA auto generate
something resembling melody. Honest, this will never put real
composers on the unemployment line (well, no more than they are mostly
there already).
You might want to use an ARIA to embellish a section of a song (like
an introduction or an ending). Or you can have MMA generate a complete
melody over the song chords.
Theory:
In a traditional song the melody depends on two parts: patterns
(IE. note lengths, volume, articulation) and pitch (usually determined
by the chords in a song). If you have been using MMA at all you will
know that that chords are the building block of what MMA does
already. So, to generate a melody we just need some kind of
pattern. And, since MMA already uses patterns in most things it
does, it is a short step to use a specialized pattern to generate a
melody.
It might serve to look at the two sample song files enclosed in this
package. Compile them and play them. Not to bad?
Now, let's get into the command set. In addition to the existing
tracks, there is a new ARIA track defined. Just like other tracks, you
can create as many ARIAs as you want. So, you can have the tracks
Aria-1, Aria, and Aria-silly all at the same time.
Most of the commands which you can apply to the other tracks also
apply to ARIAs. This includes things like VOICE, RTIME, VOLUME, HARMONY, etc.
A few things work differently:
PATTERN - the pattern definition for an ARIA is <Offset Length
Volume>. Much like a Scale pattern.
RANGE - Just like scale tracks. A RANGE of 2 would let MMA work on a 2
octave chord, etc.
SCALETYPE: Much like a scale track. By default, the setting for this
is CHORD. But, you can use AUTO, SCALE or CHROMATIC. AUTO and SCALE
are identical and force MMA to select notes from the scale associated
with the current chord; CHROMATIC generates an 11 tone scale starting
at the root note of the chord.
DIRECTION: As MMA processes the song it moves a note-selection pointer
up or down. By default DIRECTION is set to the single value "1" which
tells MMA to add 1 after each note is generated. However, you can set
the value to an integer -4 to 4 or the special value "r". With "r" a
random value -1, 0 or 1 will be used.
To further confuse, you can have a list of values for direction. Note
that this this has nothing to do with the sequence size! So, look at
this:
Aria Direction 0 0 1 2 4 -2 r r 1 -1
Now, if we have a piece with only Cmajor chord the following notes
would be generated:
Event Offset Pointer Note
1 0 c
2 0 c
3 1 e
4 3 -> 0 c
5 4 -> 0 c
6 -2 -> 2 g
7 random c,e,g
8 random c,e,g
9 .... etc.
But, if you were to change the SCALETYPE to SCALE you would get a
completely different series.
Things to try:
- use seqrnd in an ARIA for a less predictable pattern.
- use HARMONYONLY with a 2nd voice.
Other Changes:
The 'z' notation has been expanded with a 'CHORDzR' (like 'zS', etc) to
disable an aria for specific beats.
PROBLEMS and CAVEATS:
1. ARIAs are NOT saved or modified by GROOVE commands. Well, almost
... the sequence size will be adjusted to match the new size from the
groove. This might be unexpected:
- load a groove. Let's say it has a seqsize of 4.
- create a ARIA. Use 4 patterns to match the groove size (if you
don't MMA will expand the sequence size for the ARIA stuff, just
like other tracks).
- Process a few bars of music.
- Load a new groove, but this time with a seqsize of 2. Now, the
ARIA will be truncated. This behaviour is duplicated in other
tracks as well, but it might be unexpected here.
2. DIRECTION can not be changed on a bar per bar basis. It applies to
the entire sequence. Probably not an issue.
3. The timing for the elements in the sequence are hard
coded when you create the pattern. Example:
Aria Pattern {1 1 90 * 4}
will generate 1/4 notes on each beat. What if you want to have some
1/4, some 1/8 and some 1/2? Well, right now you can do this by having
3 different patterns and using a random selection. But, this is not
ideal. Suggestions?
3. The current method of doing all this is quite ugly. I have thought
that it might make some sense to save ARIAs with GROOVEs ... but
probably not. After all, the pattern _I_ think sounds great with a
bossanova might just suit you idea of rock. So, saving ARIAs as part
of a groove will probably not happen. I think it would limit things
too much.
So, how do I see these things being used? One simple way might be to
have a ARIA directory. Easy to have this as a subdir in the existing
"includes" directory. Now, for each aria you create, make a
directory. So, let's assume you create something to sound like Joplin
(Scott, not Janis). And, we'll further assume that the pattern has 4
built in styles. First off, create a directory
"includes/joplin". Next, create 5 files with some example code. First
off the main file which sets the voicing, etc.
FILE: include/joblin/main
--------------
seqsize 4
Begin Aria
Voice Piano3
Volume f
Articulate 120
Harmony Open+8Below / / 8Below
Octave 6
Rskip 10
Rtime 10
Rvolume 20
Direction r 0 0 1 -1 0 0 1 r
ScaleType Chord / / Auto
End
-----------------
Next, the specific stuff for pattern 1:
FILE: includes/joplin/pat1
-----------------------
Include joplin/main /// this will load the aria voicing, etc.
Aria Sequence {1.5 8 90; 2 8 90; 2.5 8 90; 3 8 90; 3.5 8 90; 4 8 90; 4.5 8 90} \
{1 8 90; 1.5 8 90; 2 8 90; 2.5 8 90; 3 8 90; 3.5 8 90; 4 4 90 }
-------------------
Do similar stuff for patterns 2, 3 and 4.
Now, in your song you can do something like:
--------------
Tempo 120
Groove Swing
Include joplin/pat1
.....
include joplin/pat3
....
Comments on this will be accepted!!! Better ideas will be gratefully
accepted!!!!!
NOTE: I thought that it might be handy to be able to copy an
existing sequence/pattern (eg. the CHORD sequence) and use that for
the aria sequence. Matter of fact, I got it running ... but it's quite
useless since it just really duplicates the specified pattern and
notes and doesn't add enough interesting notes to be worthwhile. Just
a dead end. So, the code has been dumped.