MMA has a rich set of commands to adjust and vary the timing of your song.
The tempo of a piece is set in Beats per Minute with the ``Tempo'' directive.
Tempo 120 |
sets the tempo to 120 beats/minute. You can also use the tempo command to increase or decrease the current rate by including a leading ``+'', ``-'' or ``*'' in the rate. For example (assuming the current rate is 120):
Tempo + 10 |
will increase the current rate to 130 beats/minute.
The tempo can be changed series of beats, much like a rit. or acc. in real music. Assuming that we are in 4/4, the current tempo is 120, and there are 4 beats in a bar, the command:
Tempo 100 1 |
will cause 4 tempo entries to be placed in the current bar (in the MIDI meta track). The start of the bar will be 115, the 2nd beat will be at 110, the 3rd at 105 and the last at 100.
You can also vary an existing rate using a ``+'', ''-'' or ``*'' in the rate.
You can vary the tempo over more than one bar. For example:
Tempo + 20 5.5 |
tells MMA to increase the tempo by 20 beats per minute and to step the increase over the next five and a half bars. Assuming a start tempo of 100 and 4 beats/bar, the meta track will have a tempo settings of 101, 102, 103 ...120. This will occur over 22 beats (5.5 bars * 4 beats) of music.
Using the multiplier is handy if you are switching to ``double time'':
Tempo * 2 |
and to return:
Temp * .5 |
Note that for ``+'',''-'' or ``*'' the sign must be separated from the tempo value by at least one space. The value for Tempo can be any value, but will be converted to integer for the final setting.
MMA doesn't really understand time signatures. It just cares about the number of beats in a bar. So, if you have a piece in 4/4 time you would use:
Time 4 |
For 3/4 use:
Time 3 |
For 6/8 you'd probably want either ``2'' or ``6''.
Changing the time also cancels all existing sequences. So, after a time directive you'll need to set up your sequences or load a new groove11.1.
Internally, MMA tracks its position in a song according to beats. For example, in a 4/4 piece the beat position is incremented by 4 after each bar is processed. For the most part, this works fine; however, there are some conditions when it would be nice to manually adjust the beat position:
Let us deal with both instances in turn. In example 11.1 we simulate a pause at the end of bar 10. One problem with this logic is that the inserted beat will be silent, but certain notes (percussive things like piano) often will continue to sound (this is related to the decay of the note, not that MMA has not turned off the note). Frankly, we've not been able to get this to work too well ...which is why the fermata () was added.
In example 11.2 we handle the problem of the ``short bar''. In this example, the sheet music has the majority of the song in 4/4 time, but bar 4 is in 2/4. We could handle this by setting the Time setting to 2 and creating some different patterns. Forcing silence on the last 2 beats and backing up the counter is a bit easier.
Note that the adjustment factor can be a partial beat. For example:
BeatAdjust .5 |
will insert half of a beat between the current bars.
A ``fermata'' or ``pause'' in written music tells the musician to hold a note for a longer period than the notation would otherwise indicate. In standard music notation it is represented by a ``
'' above a note.
To indicate all this in MMA we use a command like:
Fermata 1 1 200 |
Note that there are three parts to the command:
For example, if you were in 4/4 time and wanted the quarter note at the end of the next bar to be paused, you would use an offset of 3. The same effect can be achieved by putting the Fermata command after the bar and using an offset of -1.
Example 11.3 shows how you can place a Fermata before or after the effected bar.
The second example, 11.4, shows the first four bars of a popular torch song. The problem with the piece is that we want the first beat of bar four to be paused, and then we want to switch the accompaniment in the middle of the bar. We have split the fourth bar with the first beat on one line and the balance on a second. The ``z!''s are used to ``fill in'' the 4 beats skipped by the BeatAdjust.
|
The following conditions will generate warning messages:
This command works by adjusting the global tempo in the MIDI meta track at the point of the fermata. In most cases you can put more than one Fermata command in the same bar, but they should be in beat order (no checks are done). If the Fermata command has a negative position argument, special code is invoked to remove any note-on events in the duration specified, after the start of the beat.11.2 This means that extra rhythm notes will not be sounded--probably what you expect a held note to sound like.
This command was born of the need to simulate a ``cut'' or, more correctly, a ``caesura''. This is indicated in music by two parallel lines put at the top of a staff indicating the end of a musical thought. The symbol is also referred to as ``railroad tracks''.
The idea is to stop the music on all tracks, pause briefly, and resume.11.3
MMA provides the cut command to help deal with this situation. We have found it to be useful in other situations. But, before we describe the command in detail, a diversion: just how is a note or chord sustained in a MIDI file?
Let us assume that a MMA input file (and the associated library) files dictates that some notes are to be played from beat 2 to beat 4 in an arbitrary bar. What MMA does is:
You may think that a given note starts on beat 2 and ends (using articulate 100) right on beat 3--but you would most likely be wrong. So, if you want the note or chord to be ``cut'', what point do you use to instruct MMA correctly? Unfortunately, the simple answer is ``it depends''. Again, our answers will consist of some examples.
In this first case we wish to stop the track in the middle of the last bar. The simplest answer is:
1 C |
Unfortunately, this will ``almost'' work. But, any chords which are longer than one or two beats may continue to sound. This, often, gives a ``dirty'' sound to the end of the piece. The simple solution is to add to the end of the piece:
Cut -2 |
Depending on the rhythm you might have to fiddle a bit with the cut value. But, the example here puts a ``all notes off'' message in all the active tracks at the start of beat 3. The exact same result can be achieved by placing:
Cut 3 |
before the final bar.
In our second example we want a tiny bit of silence between bars 4 and 5. This might be the end of an introduction. The following bit should work:
1 C |
In this case the ``all notes off'' is placed at the end of bar 4 and two-tenths of a beat is inserted at the same location. Bar 5 continues the track.
Our final example show how you might combine cut with fermata. In this case the sheet music shows a caesura after the first quarter note and fermatas over the quarter notes on beats 2, 3 and 4.
1 C C#dim |
A few tutorial notes on the above:
Fermata 1 3 120 |
applies a slow-down in tempo to the second beat for the following bar (an offset of 1), for 3 beats. These 3 beats will be played 20% slower than the set tempo.
Finally, the proper syntax for the command:
[Voice] Cut [Offset] |
If the voice is omitted, MIDI ``all notes off'' will be inserted into each active track.
If the offset is omitted, the current bar position will be used. This the same as using an offset value of 0.