2009-05-17 22:34:44 +00:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
2006-11-10 08:07:56 +00:00
2011-07-26 22:49:39 +00:00
<!-- Converted with LaTeX2HTML 2008 (1.71)
2006-11-10 08:07:56 +00:00
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
< HTML >
< HEAD >
2011-07-26 22:49:39 +00:00
< TITLE > Low Level MIDI Commands< / TITLE >
< META NAME = "description" CONTENT = "Low Level MIDI Commands" >
2006-11-10 08:07:56 +00:00
< META NAME = "keywords" CONTENT = "mma" >
< META NAME = "resource-type" CONTENT = "document" >
< META NAME = "distribution" CONTENT = "global" >
2011-07-26 22:49:39 +00:00
< META HTTP-EQUIV = "Content-Type" CONTENT = "text/html; charset=utf-8" >
< META NAME = "Generator" CONTENT = "LaTeX2HTML v2008" >
2006-11-10 08:07:56 +00:00
< META HTTP-EQUIV = "Content-Style-Type" CONTENT = "text/css" >
< LINK REL = "STYLESHEET" HREF = "mma.css" >
< LINK REL = "next" HREF = "node22.html" >
< LINK REL = "previous" HREF = "node20.html" >
< LINK REL = "up" HREF = "mma.html" >
< LINK REL = "next" HREF = "node22.html" >
< / HEAD >
< BODY bgcolor = "#ffffff" >
2009-05-17 22:34:44 +00:00
< DIV CLASS = "navigation" > <!-- Navigation Panel -->
2011-07-26 22:49:39 +00:00
< A NAME = "tex2html725"
2006-11-10 08:07:56 +00:00
HREF="node22.html">
< IMG WIDTH = "37" HEIGHT = "24" ALIGN = "BOTTOM" BORDER = "0" ALT = "next" SRC = "next.png" > < / A >
2011-07-26 22:49:39 +00:00
< A NAME = "tex2html723"
2006-11-10 08:07:56 +00:00
HREF="mma.html">
< IMG WIDTH = "26" HEIGHT = "24" ALIGN = "BOTTOM" BORDER = "0" ALT = "up" SRC = "up.png" > < / A >
2011-07-26 22:49:39 +00:00
< A NAME = "tex2html717"
2006-11-10 08:07:56 +00:00
HREF="node20.html">
< IMG WIDTH = "63" HEIGHT = "24" ALIGN = "BOTTOM" BORDER = "0" ALT = "previous" SRC = "prev.png" > < / A >
< BR >
2011-07-26 22:49:39 +00:00
< B > Next:< / B > < A NAME = "tex2html726"
HREF="node22.html">Patch Management< / A >
< B > Up:< / B > < A NAME = "tex2html724"
2006-11-10 08:07:56 +00:00
HREF="mma.html">Reference Manual< / A >
2011-07-26 22:49:39 +00:00
< B > Previous:< / B > < A NAME = "tex2html718"
HREF="node20.html">Variables, Conditionals and Jumps< / A >
2006-11-10 08:07:56 +00:00
< BR >
2009-05-17 22:34:44 +00:00
< BR > < / DIV >
2006-11-10 08:07:56 +00:00
<!-- End of Navigation Panel -->
<!-- Table of Child - Links -->
< A NAME = "CHILD_LINKS" > < STRONG > Subsections< / STRONG > < / A >
2009-05-17 22:34:44 +00:00
< UL CLASS = "ChildLinks" >
2011-07-26 22:49:39 +00:00
< LI > < A NAME = "tex2html727"
HREF="node21.html#SECTION002110000000000000000">Channel< / A >
< LI > < A NAME = "tex2html728"
HREF="node21.html#SECTION002120000000000000000">ChannelPref< / A >
< LI > < A NAME = "tex2html729"
HREF="node21.html#SECTION002130000000000000000">ChShare< / A >
< LI > < A NAME = "tex2html730"
HREF="node21.html#SECTION002140000000000000000">ForceOut< / A >
< LI > < A NAME = "tex2html731"
HREF="node21.html#SECTION002150000000000000000">MIDI< / A >
< LI > < A NAME = "tex2html732"
HREF="node21.html#SECTION002160000000000000000">MIDIClear< / A >
< LI > < A NAME = "tex2html733"
HREF="node21.html#SECTION002170000000000000000">MIDICue< / A >
< LI > < A NAME = "tex2html734"
HREF="node21.html#SECTION002180000000000000000">MIDICopyright< / A >
< LI > < A NAME = "tex2html735"
HREF="node21.html#SECTION002190000000000000000">MIDIDef< / A >
< LI > < A NAME = "tex2html736"
HREF="node21.html#SECTION0021100000000000000000">MIDICresc and MIDIDecresc< / A >
< LI > < A NAME = "tex2html737"
HREF="node21.html#SECTION0021110000000000000000">MIDIFile< / A >
< LI > < A NAME = "tex2html738"
HREF="node21.html#SECTION0021120000000000000000">MIDIGlis< / A >
< LI > < A NAME = "tex2html739"
HREF="node21.html#SECTION0021130000000000000000">MIDIInc< / A >
< LI > < A NAME = "tex2html740"
HREF="node21.html#SECTION0021140000000000000000">MIDIMark< / A >
< LI > < A NAME = "tex2html741"
HREF="node21.html#SECTION0021150000000000000000">MIDINote< / A >
2006-11-10 08:07:56 +00:00
< UL >
2011-07-26 22:49:39 +00:00
< LI > < A NAME = "tex2html742"
HREF="node21.html#SECTION0021151000000000000000">Setting Options< / A >
< LI > < A NAME = "tex2html743"
HREF="node21.html#SECTION0021152000000000000000">Note Events< / A >
< LI > < A NAME = "tex2html744"
HREF="node21.html#SECTION0021153000000000000000">Controller Events< / A >
< LI > < A NAME = "tex2html745"
HREF="node21.html#SECTION0021154000000000000000">Pitch Bend< / A >
< LI > < A NAME = "tex2html746"
HREF="node21.html#SECTION0021155000000000000000">Pitch Bend Range< / A >
< LI > < A NAME = "tex2html747"
HREF="node21.html#SECTION0021156000000000000000">Channel Aftertouch< / A >
< LI > < A NAME = "tex2html748"
HREF="node21.html#SECTION0021157000000000000000">Channel Aftertouch Range< / A >
< / UL >
< BR >
< LI > < A NAME = "tex2html749"
HREF="node21.html#SECTION0021160000000000000000">MIDIPan< / A >
< LI > < A NAME = "tex2html750"
HREF="node21.html#SECTION0021170000000000000000">MIDISeq< / A >
< LI > < A NAME = "tex2html751"
HREF="node21.html#SECTION0021180000000000000000">MIDISplit< / A >
< LI > < A NAME = "tex2html752"
HREF="node21.html#SECTION0021190000000000000000">MIDIText< / A >
< LI > < A NAME = "tex2html753"
HREF="node21.html#SECTION0021200000000000000000">MIDITname< / A >
< LI > < A NAME = "tex2html754"
HREF="node21.html#SECTION0021210000000000000000">MIDIVoice< / A >
< LI > < A NAME = "tex2html755"
HREF="node21.html#SECTION0021220000000000000000">MIDIVolume< / A >
< / UL >
2006-11-10 08:07:56 +00:00
<!-- End of Table of Child - Links -->
< HR >
< H1 > < A NAME = "SECTION002100000000000000000" > < / A >
2011-07-26 22:49:39 +00:00
< A NAME = "sec-mididirectives" > < / A >
2007-04-29 06:47:40 +00:00
< BR >
2011-07-26 22:49:39 +00:00
Low Level MIDI Commands
2007-04-29 06:47:40 +00:00
< / H1 >
< P >
2011-07-26 22:49:39 +00:00
The commands discussed in this chapter directly effect your MIDI
output devices.
< P >
Not all MIDI devices are equal. Many of the effects in this chapter
may be ignored by your devices. Sorry, but that's just the way MIDI
is.
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
< H1 > < A NAME = "SECTION002110000000000000000" > < / A > < A NAME = "set-channel" > < / A >
2006-11-10 08:07:56 +00:00
< BR >
2011-07-26 22:49:39 +00:00
Channel
< / H1 >
< P >
As noted in < A HREF = "node3.html#sec-tracks" > Tracks and Channels< / A >
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > assigns MIDI channels
dynamically as it creates tracks. In most cases this works fine;
however, you can if you wish force the assignment of a specific MIDI
channel to a track with the C< SMALL > HANNEL< / SMALL > command.
< P >
You cannot assign a channel number to a track if it already defined
(well, see the section C< SMALL > H< / SMALL > S< SMALL > HARE< / SMALL > , below, for the inevitable
exception), nor can you change the channel assignments for any of the
D< SMALL > RUM< / SMALL > tracks.
2006-11-10 08:07:56 +00:00
< P >
2011-07-26 22:49:39 +00:00
Let us assume that you want the < SPAN CLASS = "textit" > Bass< / SPAN > track assigned to MIDI
channel 8. Simply use:
2007-04-29 06:47:40 +00:00
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
2011-07-26 22:49:39 +00:00
< B > Bass Channel 8 < / B >
2007-04-29 06:47:40 +00:00
< / td > < / tr >
< / Table >
< P >
2011-07-26 22:49:39 +00:00
Caution: If the selected channel is already in use an error will be
generated. Due to the way
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > allocates tracks, if you really need
to manually assign track it is recommended that you do this in a
MMA< SMALL > RC< / SMALL > file.
2006-11-10 08:07:56 +00:00
< P >
2011-07-26 22:49:39 +00:00
< A NAME = "channel0" > < / A >
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
You can disable a channel at any time by using a channel number of 0:
2007-04-29 06:47:40 +00:00
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
2011-07-26 22:49:39 +00:00
< B > Arpeggio-1 Channel 0 < / B >
2007-04-29 06:47:40 +00:00
< / td > < / tr >
< / Table >
< P >
2011-07-26 22:49:39 +00:00
will disable the Arpeggio-1 channel, freeing it for use by other
tracks. A warning message is generated. Disabling a track without a
valid channel is fine. When you set a channel to 0 the track is also
disabled. You can restart the track with the O< SMALL > N< / SMALL > command
(< A HREF = "node24.html#set-on" > here< / A > .
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
You don't need to have a valid MIDI channel assigned to a track to do
things like: MIDIP< SMALL > AN< / SMALL > , MIDIG< SMALL > LIS< / SMALL > , MIDIV< SMALL > OLUME< / SMALL > or
even the assignment of any music to a track. MIDI data is created in
tracks and then sent out to the MIDI buffers. Channel assignment is
checked and allocated at this point, and an error will be generated if
no channels are available.
2007-04-29 06:47:40 +00:00
2011-07-26 22:49:39 +00:00
< P >
It's quite acceptable to do channel reassignments in the middle of a
song. Just assign channel 0 to the unneeded track first.
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
MIDI channel settings are < SPAN CLASS = "textit" > not< / SPAN > saved in G< SMALL > ROOVE< / SMALL > s.
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > inserts a MIDI “ track name” meta event when the channel
buffers are first assigned at a MIDI offset of 0. If the MIDI channel
is reassigned, a new “ track name” is inserted at the current song
offset.
2007-04-29 06:47:40 +00:00
2011-07-26 22:49:39 +00:00
< P >
A more general method is to use C< SMALL > HANNEL< / SMALL > P< SMALL > REF< / SMALL > detailed below.
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
You can access the currently assigned channel with the
$_TRACK_C< SMALL > HANNEL< / SMALL > macro.
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
< H1 > < A NAME = "SECTION002120000000000000000" >
ChannelPref< / A >
< / H1 >
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
If you prefer to have certain tracks assigned to certain channels you
can use the C< SMALL > HANNEL< / SMALL > P< SMALL > REF< / SMALL > command to create a custom set of
preferences. By default,
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > assigns channels starting at 16 and
working down to 1 (with the expectation of drum tracks which are all
assigned channel 10). If, for example, you would like the < SPAN CLASS = "textit" > Bass< / SPAN >
track to be on channel 9, sustained bass on channel 3, and
< SPAN CLASS = "textit" > Arpeggio< / SPAN > on channel 5, you can have a command like:
2007-04-29 06:47:40 +00:00
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
2011-07-26 22:49:39 +00:00
< B > ChannelPref Bass=9 Arpeggio=5 Bass-Sus=3 < / B >
2007-04-29 06:47:40 +00:00
< / td > < / tr >
< / Table >
< P >
2011-07-26 22:49:39 +00:00
Most likely this will be in your < SMALL > MMARC< / SMALL > file.
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
You can use multiple command lines, or have multiple assignments on a
single line. Just make sure that each item consists of a trackname, an
“ =” and a channel number in the range 1 to 16.
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
If a channel has already been assigned this command will probably be
ignored. It should be used < SPAN CLASS = "textit" > before< / SPAN > any MIDI data is generated.
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
< H1 > < A NAME = "SECTION002130000000000000000" > < / A > < A NAME = "set-chshare" > < / A >
< BR >
ChShare
< / H1 >
< P >
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > is fairly conservative in its use of MIDI tracks. “ Out of the
box” it demands a separate MIDI channel for each of its tracks, but
only as they are actually used. In most cases, this works just fine.
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
However, there are times when you might need more tracks than the
available MIDI channels or you may want to free up some channels for
other programs.
< P >
If you have different tracks with the same voicing, it's quite simple.
For example, you might have an arpeggio and scale track:
2007-04-29 06:47:40 +00:00
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
2011-07-26 22:49:39 +00:00
< B > Arpeggio Sequence A16 z
< BR >
Arpeggio Voice Piano1
< BR >
Scale Sequence z S8
< BR >
Scale Voice Piano1 < / B >
2006-11-10 08:07:56 +00:00
2007-04-29 06:47:40 +00:00
< / td > < / tr >
< / Table >
< P >
2011-07-26 22:49:39 +00:00
In this example,
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > will use different MIDI channels for the
< SPAN CLASS = "textit" > Arpeggio< / SPAN > and the < SPAN CLASS = "textit" > Scale< / SPAN > . Now, if you force channel
sharing:
2006-11-10 08:07:56 +00:00
< P >
2007-04-29 06:47:40 +00:00
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
2011-07-26 22:49:39 +00:00
< B > Scale ChShare Arpeggio < / B >
2006-11-10 08:07:56 +00:00
2007-04-29 06:47:40 +00:00
< / td > < / tr >
< / Table >
< P >
2011-07-26 22:49:39 +00:00
both tracks will use the same MIDI channel.
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
This is really foolproof in the above example, especially since the
same voice is being used for both. Now, what if you wanted to use a
different voice for the tracks?
2007-04-29 06:47:40 +00:00
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
2011-07-26 22:49:39 +00:00
< B > Arpeggio Sequence A16 z
< BR >
Arpeggio Voice Piano1 Strings
< BR >
Scale Sequence z S8
< BR >
Scale ChShare Arpeggio < / B >
2006-11-10 08:07:56 +00:00
2007-04-29 06:47:40 +00:00
< / td > < / tr >
< / Table >
2006-11-10 08:07:56 +00:00
< P >
2011-07-26 22:49:39 +00:00
You might think that this would work, but it doesn't.
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > ignores
voice changes for bars which don't have a sequence, so it will set
“ Piano1” for the first bar, then “ Strings” for the second (so far,
so good). But, when it does the third bar (an A< SMALL > RPEGGIO< / SMALL > ) it will
not know that the voice has been changed to “ Strings” by the
< SPAN CLASS = "textit" > Scale< / SPAN > track.
< P >
So, the general rule for track channel sharing is to use only one
voice.
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
One more example which doesn't work:
2007-04-29 06:47:40 +00:00
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
2011-07-26 22:49:39 +00:00
< B > Arpeggio Sequence A8
2009-05-17 22:34:44 +00:00
< BR >
2011-07-26 22:49:39 +00:00
Scale Sequence S4
2006-11-10 08:07:56 +00:00
< BR >
2011-07-26 22:49:39 +00:00
Arpeggio Voice Piano1
2007-04-29 06:47:40 +00:00
< BR >
2011-07-26 22:49:39 +00:00
Scale Voice Piano1
2009-05-17 22:34:44 +00:00
< BR >
2011-07-26 22:49:39 +00:00
Scale ChShare Arpeggio < / B >
< / td > < / tr >
< / Table >
< P >
This example has an active scale and arpeggio sequence in each
bar. Since both use the same voice, you may think that it will work
just fine ... but it may not. The problem here is that
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > will
generate MIDI on and off events which may overlap each other. One or
the other will be truncated. If you are using a different octave, it
will work much better. It may sound okay, but you should probably find
a better way to do this.
< P >
When a C< SMALL > H< / SMALL > S< SMALL > HARE< / SMALL > directive is parsed the “ shared” channel is
first checked to ensure that it has been assigned. If not currently
assigned, the assignment is first done. What this means is that you
are subverting
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > 's normal dynamic channel allocation scheme. This
may cause is a depletion of available channels.
< P >
Please note that that the use of the C< SMALL > H< / SMALL > S< SMALL > HARE< / SMALL > command is
probably never really needed, so it might have more problems than
outlined here. If you want to see how much a bother channel sharing
becomes, have a look at the standard library file
< TT > < SPAN CLASS = "textbf" > frenchwaltz.mma< / SPAN > < / TT > . All this so the accordion bass can use one
channel instead of 6. If I were to write it again I'd just let it suck
up the MIDI channels.
< P >
For another, simpler, way of reassigning MIDI tracks and letting
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > do most of the work for you, refer to the
< A HREF = "node24.html#sec-delete" > D< SMALL > ELETE< / SMALL > command< / A > .
< P >
< H1 > < A NAME = "SECTION002140000000000000000" >
ForceOut< / A >
< / H1 >
< P >
Under normal conditions
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > only generates the MIDI tracks it thinks
are valid or relevant. So, if you create a track but insert no note
data into that track it will not be generated. An easy way to verify
this is by creating file and running
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > with the -c command line
option. Lets start off by creating a file you might think will set the
keyboard channel on your synth to a TenorSax voice:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Begin Solo-Keyboard
< BR > Channel 1
< BR > Voice TenorSax
< BR > MIDIVolume 100
2009-05-17 22:34:44 +00:00
< BR >
End < / B >
2006-11-10 08:07:56 +00:00
2007-04-29 06:47:40 +00:00
< / td > < / tr >
< / Table >
< P >
2011-07-26 22:49:39 +00:00
If you test this you should get:
2006-11-10 08:07:56 +00:00
2007-04-29 06:47:40 +00:00
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
2011-07-26 22:49:39 +00:00
< B > $ mma test -c
< BR >
< BR >
File 'test' parsed, but no MIDI file produced!
< BR >
< BR >
Tracks allocated:
< BR > SOLO-KEYBOARD
< BR >
< BR >
Channel assignments:
< BR >
1 SOLO-KEYBOARD
< BR > < / B >
2006-11-10 08:07:56 +00:00
2007-04-29 06:47:40 +00:00
< / td > < / tr >
< / Table >
< P >
2011-07-26 22:49:39 +00:00
So, a
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > track will be created. But if you compile this file and
examine the resulting MIDI file you will find that the voice < SPAN CLASS = "textit" > has
not< / SPAN > been set.< A NAME = "tex2html75"
HREF="#foot10056">< SUP > < SPAN CLASS = "arabic" > 21< / SPAN > .< SPAN CLASS = "arabic" > 1< / SPAN > < / SUP > < / A >
< P >
To overcome this, insert the F< SMALL > ORCE< / SMALL > O< SMALL > UT< / SMALL > command at the end of the
track setup.
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
For example, here is a more complete file which will set the keyboard
track (MIDI channel 1) to TenorSax with a volume of 100, play a bar of
accompaniment, set a Trumpet voice with a louder volume, play another
bar, and finally reset the keyboard to the default Piano voice. A cool
way to program your keyboard for different voicing changes so you can
have more fun doing play-a-longs.
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Groove BossaNova
< BR >
< BR >
Begin Solo
< BR > Channel 1
< BR > Voice TenorSax
< BR > MIDIVolume 100
< BR > ForceOut
< BR >
End
< BR >
< BR >
1 C
< BR >
< BR >
Begin Solo
< BR > Voice Trumpet
< BR > MIDIVolume 120
< BR > ForceOut
< BR >
End
< BR >
< BR >
2 G
< BR >
< BR >
Begin Solo
< BR > Voice Piano1
< BR > MIDIVolume 127
< BR > ForceOut
< BR >
End
< BR > < / B >
< / td > < / tr >
< / Table >
< P >
Note: The same or similar results could be accomplished with the
MIDI command; however, it's a bit harder to use and the
commands would be in the Meta track.
< P >
< H1 > < A NAME = "SECTION002150000000000000000" > < / A >
< A NAME = "sec-midi" > < / A >
< BR >
MIDI
< / H1 >
< P >
The complete set of MIDI commands is not limitless--but from this end
it seems that adding commands to suit every possible configuration is
never-ending. So, in an attempt to satisfy everyone, a command which
will place any arbitrary MIDI stream in your tracks has been
implemented. In most cases this will be a MIDI “ Sysex” or “ Meta”
event.
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
For example, you might want to start a song off with a MIDI reset:
2007-04-29 06:47:40 +00:00
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
2011-07-26 22:49:39 +00:00
< B > MIDI 0xF0 0x05 0x7e 0x7f 0x09 0x01 0xf7 < / B >
2007-04-29 06:47:40 +00:00
< / td > < / tr >
< / Table >
< P >
2011-07-26 22:49:39 +00:00
The values passed to the MIDI command are normal integers; however,
they must all be in the range of 0x00 to 0xff. In most cases it is
easiest to use hexadecimal numbers by using the “ 0x” prefix. But,
you can use plain decimal integers if you prefer.
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
In the above example:
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
< DL COMPACT >
< DT > 0xF0< / DT >
< DD > Designates a SYSEX message
2006-11-10 08:07:56 +00:00
< P >
2011-07-26 22:49:39 +00:00
< / DD >
< DT > 0x05< / DT >
< DD > The length of the message
2006-11-10 08:07:56 +00:00
< P >
2009-05-17 22:34:44 +00:00
< / DD >
2011-07-26 22:49:39 +00:00
< DT > 0x7e< / DT >
< DD > ... The actual message
< P >
2009-05-17 22:34:44 +00:00
< / DD >
< / DL >
2006-11-10 08:07:56 +00:00
< P >
2011-07-26 22:49:39 +00:00
Another example places the key signature of F major (1 flat) in the
meta track:< A NAME = "tex2html76"
HREF="#foot10533">< SUP > < SPAN CLASS = "arabic" > 21< / SPAN > .< SPAN CLASS = "arabic" > 2< / SPAN > < / SUP > < / A >
2007-04-29 06:47:40 +00:00
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
2011-07-26 22:49:39 +00:00
< B > MIDI 0xff 0x59 0x02 0xff 0x00 < / B >
2007-04-29 06:47:40 +00:00
< / td > < / tr >
< / Table >
< P >
2011-07-26 22:49:39 +00:00
Some < SPAN CLASS = "textit" > cautions:< / SPAN >
< UL >
< LI >
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > makes no attempt to verify the validity of the data!
< P >
< / LI >
< LI > The “ Length” field must be manually calculated.
< P >
< / LI >
< LI > Malformed sequences can create non-playable MIDI files. In
extreme situations, these might even damage your synth. You are on
your own with this command ... be careful.
< P >
< / LI >
< LI > The M< SMALL > IDI< / SMALL > directive always places data in the < SPAN CLASS = "textit" > Meta< / SPAN >
track at the current time offset into the file. This should not be a
problem.
< P >
< / LI >
< / UL >
< P >
Cautions aside, < TT > < SPAN CLASS = "textbf" > includes/init.mma< / SPAN > < / TT > has been included in this
distribution. I use this without apparent problems; to use it add the
command line:
2007-04-29 06:47:40 +00:00
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
2011-07-26 22:49:39 +00:00
< B > MMAstart init < / B >
2007-04-29 06:47:40 +00:00
< / td > < / tr >
< / Table >
< P >
2011-07-26 22:49:39 +00:00
in your < SMALL > MMARC< / SMALL > file. The file is pretty well commented and it
sets a synth up to something reasonably sane.
2006-11-10 08:07:56 +00:00
2011-07-26 22:49:39 +00:00
< P >
If you need a brief delay after a raw MIDI command, it is possible to
insert a silent beat with the < A HREF = "node16.html#beatadjust" > B< SMALL > EAT< / SMALL > A< SMALL > DJUST< / SMALL >
command< / A > . See
the file < TT > < SPAN CLASS = "textbf" > includes/reset.mma< / SPAN > < / TT > for an example.
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
< H1 > < A NAME = "SECTION002160000000000000000" > < / A > < A NAME = "sec-midiclear" > < / A >
< BR >
MIDIClear
< / H1 >
< P >
As noted earlier in this manual you should be very careful in
programming MIDI sequences into your song and/or library files. Doing
damage to a synthesizer is probably a remote possibility ... but
leaving it in a unexpected mode is likely. For this reason the
MIDIC< SMALL > LEAR< / SMALL > command has been added as a companion to the
MIDIV< SMALL > OICE< / SMALL > and MIDIS< SMALL > EQ< / SMALL > commands.
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
Each time a MIDI track (not necessary the same as a
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > track) is
ended or a new G< SMALL > ROOVE< / SMALL > is started, a check is done to see if any
MIDI data has been inserted in the track with a MIDIV< SMALL > OICE< / SMALL > or
MIDIS< SMALL > EQ< / SMALL > command. If it has, a further check is done to see if
there is an “ undo” sequence defined via a MIDIC< SMALL > LEAR< / SMALL > command.
That data is then sent; or, if data has not be defined for the track,
a warning message is displayed.
2006-11-10 08:07:56 +00:00
< P >
2011-07-26 22:49:39 +00:00
The MIDIC< SMALL > LEAR< / SMALL > command uses the same syntax as MIDIV< SMALL > OICE< / SMALL >
and MIDIS< SMALL > EQ< / SMALL > ; however, you can not specify different sequence
for different bars in the sequence:
2006-11-10 08:07:56 +00:00
< P >
2007-04-29 06:47:40 +00:00
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
2011-07-26 22:49:39 +00:00
< B > Bass-Funky MIDIClear 1 Modulation 0; 1 ReleaseTime 0 < / B >
2006-11-10 08:07:56 +00:00
2007-04-29 06:47:40 +00:00
< / td > < / tr >
< / Table >
< P >
2011-07-26 22:49:39 +00:00
As in MIDIV< SMALL > OICE< / SMALL > and MIDIS< SMALL > EQ< / SMALL > you can include sequences
defined in a MIDID< SMALL > EF< / SMALL > (see below). The
< beat> offsets are required, but ignored.
< P >
< H1 > < A NAME = "SECTION002170000000000000000" > < / A > < A NAME = "midicue" > < / A >
< BR >
MIDICue
< / H1 >
< P >
MIDI files can contain “ cue points” to be used as pointers to
sections of the file. In
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > you can insert these in the meta-track:
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > MidiCue Begin slow portion of song < / B >
< / td > < / tr >
< / Table >
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
or in a specified track:
2007-04-29 06:47:40 +00:00
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
2011-07-26 22:49:39 +00:00
< B > Chord MidiCue Chords get louder here < / B >
2006-11-10 08:07:56 +00:00
2007-04-29 06:47:40 +00:00
< / td > < / tr >
< / Table >
2006-11-10 08:07:56 +00:00
< P >
2011-07-26 22:49:39 +00:00
Not all MIDI sequencers or editors recognize this event.
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
The text for this command is queued until the track is created. If the
specified track is never created the text is discarded.
< P >
< H1 > < A NAME = "SECTION002180000000000000000" > < / A > < A NAME = "midicopyright" > < / A >
< BR >
MIDICopyright
< / H1 >
< P >
Inserting a copyright message into a MIDI file may be a good
idea, and it's simple enough to do.
2007-04-29 06:47:40 +00:00
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
2011-07-26 22:49:39 +00:00
< B > MidiCopyright (C) Bob van der Poel 2044 < / B >
< / td > < / tr >
< / Table >
< P >
will insert the message “ (C)..” as the first item in the first track
of the generated file.< A NAME = "tex2html77"
HREF="#foot10536">< SUP > < SPAN CLASS = "arabic" > 21< / SPAN > .< SPAN CLASS = "arabic" > 3< / SPAN > < / SUP > < / A > You can have any number of M< SMALL > IDI< / SMALL > C< SMALL > OPYRIGHT< / SMALL > messages in your
file. They will be inserted sequentially at the head of the
file. Command placement in your input file has no effect on the
positioning.
< P >
< H1 > < A NAME = "SECTION002190000000000000000" > < / A > < A NAME = "mididef" > < / A >
2009-05-17 22:34:44 +00:00
< BR >
2011-07-26 22:49:39 +00:00
MIDIDef
< / H1 >
< P >
To make it easier to create long sets of commands for MIDIS< SMALL > EQ< / SMALL >
and MIDIC< SMALL > LEAR< / SMALL > you can create special macros. Each definition
consists of a symbolic name, a beat offset, a controller name and a
value. For example:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > MIDIdef Rel1 1 ReleaseTime 50; 3 ReleaseTime 0 < / B >
< / td > < / tr >
< / Table >
< P >
creates a definition called “ Rel1” with two controller events. The
controller names can be a single value or a permitted symbolic name
< A HREF = "node30.html#sec-controllers" > (here)< / A > .
< P >
You can have multiple controller events. Just list them with “ ;”
delimiters.
< P >
< H1 > < A NAME = "SECTION0021100000000000000000" > < / A > < A NAME = "midicresc" > < / A >
2009-05-17 22:34:44 +00:00
< BR >
2011-07-26 22:49:39 +00:00
MIDICresc and MIDIDecresc
< / H1 >
< P >
Much like the track C< SMALL > RESC< / SMALL > and D< SMALL > ECRESC< / SMALL >
< A HREF = "node18.html#track-cresc" > (here)< / A > commands, these
commands change volume over a set number of bars. However, unlike the
previously mentioned commands, these commands utilize the MIDI Channel
Volume settings < A HREF = "#channelvol" > (here)< / A > .
< P >
The two commands are identical, with the exception that
MIDIC< SMALL > RESC< / SMALL > prints a warning if the second argument is smaller
than the first and MIDID< SMALL > ECRESC< / SMALL > prints a warning if the second
argument is larger than the first.
< P >
The first two arguments are MIDI values in the range 0 to 127. The
third argument is the number of bars to apply the command over.
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > distributes the needed values evenly over the bar range.
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > assumes
that your song will be long enough for the specifed bar count; if the
song is too short you will end up with volume settings past the end of
the song (the MIDI file will be expanded for this).
< P >
To change the MIDI channel volume of the Bass track over three and a
half bars:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Bass MidiCresc 50 100 3.5 < / B >
< / td > < / tr >
< / Table >
< P >
Please read the discussion for MIDIV< SMALL > OLUME< / SMALL >
< A HREF = "#channelvol" > (here)< / A > for more details.
< P >
< H1 > < A NAME = "SECTION0021110000000000000000" > < / A > < A NAME = "midismf" > < / A >
2009-05-17 22:34:44 +00:00
< BR >
2011-07-26 22:49:39 +00:00
MIDIFile
< / H1 >
< P >
This option controls some fine points of the generated MIDI file. The
command is issued with a series of parameters in the form
“ MODE=VALUE” . You can have multiple settings in a single
MIDIF< SMALL > ILE< / SMALL > command.
< P >
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > can generate two types of SMF (Sta
ndard MIDI Files):
< DL COMPACT >
< DT > 0.< / DT >
< DD > This file contains only one track into which the data for
all the different channel tracks has been merged. A number of synths
which accept SMF (Casio, Yamaha and others) only accept type 0
files.
< P >
< / DD >
< DT > 1.< / DT >
< DD > This file has the data for each MIDI channel in its own
track. This is the default file generated by
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > .
< P >
< / DD >
< / DL >
< P >
You can set the filetype in an RC file (or, for that matter, in any
file processed by
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > ) with the command:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > MidiFile SMF=0 < / B >
2007-04-29 06:47:40 +00:00
< / td > < / tr >
< / Table >
< P >
2011-07-26 22:49:39 +00:00
or
2007-04-29 06:47:40 +00:00
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
2011-07-26 22:49:39 +00:00
< B > MidiFile SMF=1 < / B >
2007-04-29 06:47:40 +00:00
< / td > < / tr >
< / Table >
< P >
2011-07-26 22:49:39 +00:00
You can also set it on the command line with the -M option. Using the
command line option will override the M< SMALL > IDI< / SMALL > SMF command if it is
in a RC file.
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
By default
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > uses “ running status” when generating MIDI files.
This can be disabled with the command:
2007-04-29 06:47:40 +00:00
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
2011-07-26 22:49:39 +00:00
< B > MidiFile Running=0 < / B >
2007-04-29 06:47:40 +00:00
< / td > < / tr >
< / Table >
< P >
2011-07-26 22:49:39 +00:00
or enabled (but this is the default) with:
2007-04-29 06:47:40 +00:00
< P >
2011-07-26 22:49:39 +00:00
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > MidiFile Running=1 < / B >
< / td > < / tr >
< / Table >
< P >
Files generated without running status will be about 20 to 30% larger
than their compressed counterparts. They may be useful for use with
brain-dead sequencers and in debugging generated code. There is no
command line equivalent for this option.
< P >
< H1 > < A NAME = "SECTION0021120000000000000000" >
MIDIGlis< / A >
< / H1 >
< P >
This sets the MIDI portamento< A NAME = "tex2html78"
HREF="#foot10165">< SUP > < SPAN CLASS = "arabic" > 21< / SPAN > .< SPAN CLASS = "arabic" > 4< / SPAN > < / SUP > < / A > (in case you're new to all this, portamento is like
glissando between notes--wonderful, if you like trombones! To enable
portamento:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Arpeggio MIDIGlis 30 < / B >
< / td > < / tr >
< / Table >
< P >
The parameter can be any value between 1 and 127. To turn the sliding
off:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Arpeggio MIDIGlis 0 < / B >
< / td > < / tr >
< / Table >
< P >
This command will work with any track (including drum tracks).
However, the results may be somewhat “ interesting” or
“ disappointing” , and many MIDI devices don't support portamento at
all. So, be cautious. The data generated is not sent into the MIDI
stream until musical data is created for the relevant MIDI channel.
< P >
< H1 > < A NAME = "SECTION0021130000000000000000" > < / A >
< A NAME = "midi-inc" > < / A >
< BR >
MIDIInc
< / H1 >
< P >
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > has the ability to include a user supplied MIDI file at any
point of its generated files. These included files can be used to play
a melodic solo over a
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > pattern or to fill a section of a song
with something like a drum solo.
< P >
When the MIDI< SMALL > INC< / SMALL > command is encountered the current line is
parsed for options, the file is inserted into the stored MIDI stream,
and processing continues. The include has no effect on any song
pointers, etc. Optionally, the MIDI data can be pushed into a
S< SMALL > OLO< / SMALL > or M< SMALL > ELODY< / SMALL > track and further processed by that
track's optional settings (see the file < TT > < SPAN CLASS = "textbf" > egs/midi-inc/README-riffs< / SPAN > < / TT >
for a detailed tutorial on this option).
< P >
MIDI< SMALL > INC< / SMALL > has a number of options, all set in the form
OPTION=VALUE. Following are the recognized options:
< P >
< DL >
< DT > < STRONG > FILE< / STRONG > < / DT >
< DD > The filename of the file to be included. This must be
a complete filename. The filename will be expanded by the Python
os.path.expanduser() function for tilde expansion. No prefixes or
extensions are added by
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > . Examples:
F< SMALL > ILE< / SMALL > =< TT > < SPAN CLASS = "textbf" > /home/bob/midi/myfile.mid< / SPAN > < / TT > . or
F< SMALL > ILE< / SMALL > =< TT > < SPAN CLASS = "textbf" > ~/sounds/myfile.mid< / SPAN > < / TT > .
< P >
< / DD >
< DT > < STRONG > VOLUME< / STRONG > < / DT >
< DD > An adjustment for the volume of all the note on events
in the included MIDI file. The adjustment is specified as a
percentage with values under 100 decreasing the volume and over 100
increasing it. If the resultant volume (velocity) is less than 1 a
velocity of 1 will be used; if it is over 127, 127 will be
used. Example: V< SMALL > OLUME=80< / SMALL > .
< P >
< / DD >
< DT > < STRONG > OCTAVE< / STRONG > < / DT >
< DD > Octave adjustment for all notes in the file. Values in
the range -4 to 4 are permitted. Notes in drum tracks (channel 10)
will not be effected. Example: O< SMALL > CTAVE=2< / SMALL > . Note: specifying an
octave does not set the selected track to that octave; it just
adjusts notes by 12 (or 24, etc) pitches up or down.
< P >
< / DD >
< DT > < STRONG > TRANSPOSE< / STRONG > < / DT >
< DD > Transposition adjustment settings in the range -24 to
24 are permitted. If you do not set a value for this, the global
transpose setting will be applied (excepting channel 10, drum,
notes). Example: T< SMALL > RANSPOSE=-2< / SMALL > . Having different values for the
global and import T< SMALL > RANSPOSE< / SMALL > is fine and should work as
expected.
< P >
< / DD >
< DT > < STRONG > LYRIC< / STRONG > < / DT >
< DD > This option will copy any < SPAN CLASS = "textit" > Lyric< / SPAN > events to the
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > meta track. The valid settings are “ On” or “ Off” . By
default this is set to “ Off” . Example: L< SMALL > YRIC=< / SMALL > O< SMALL > N< / SMALL > .
< P >
< / DD >
< DT > < STRONG > TEXT< / STRONG > < / DT >
< DD > This option will copy any < SPAN CLASS = "textit" > Text< / SPAN > events to the
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > meta track. The valid settings are “ On” or “ Off” . By default
this is set to “ Off” . Example: T< SMALL > EXT=< / SMALL > O< SMALL > N< / SMALL > .
< P >
< / DD >
< DT > < STRONG > START< / STRONG > < / DT >
< DD > Specifies the start point < SPAN CLASS = "textit" > of the file to be
included< / SPAN > in beats. For example, S< SMALL > TART=22< / SMALL > would start the
include process 22 beats into the file. The data will be inserted at
the current song position in your MMA file. The value used must
greater or equal to 0 and may be a fractional beat value (18.456 is
fine).
< P >
< / DD >
< DT > < STRONG > END< / STRONG > < / DT >
< DD > Specifies the end point < SPAN CLASS = "textit" > of the file to be included< / SPAN >
in beats. For example, E< SMALL > ND=100< / SMALL > would discard all data after
100 beats in the file. The value used must be greater that the
< SPAN CLASS = "textit" > Start< / SPAN > position and can be fractional.
< P >
< / DD >
< DT > < STRONG > REPORT< / STRONG > < / DT >
< DD > Parse the MIDI file and print a summary report on the
terminal. No MIDI file is created. To enable, include
R< SMALL > EPORT=< / SMALL > O< SMALL > N< / SMALL > ; to duplicate the default use
R< SMALL > EPORT=< / SMALL > O< SMALL > FF< / SMALL > . The most useful information generated are the
note start data which you can use with S< SMALL > TRIP< / SMALL > S< SMALL > ILENCE< / SMALL > .
< P >
< / DD >
< DT > < STRONG > STRIPSILENCE< / STRONG > < / DT >
< DD > By default,
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > will strip off any silence at the
start of an imported MIDI track. You can avoid this behaviour by
setting S< SMALL > TRIP< / SMALL > S< SMALL > ILENCE=< / SMALL > O< SMALL > FF< / SMALL > . To duplicate the default, use
S< SMALL > TRIP< / SMALL > S< SMALL > ILENCE=< / SMALL > O< SMALL > N< / SMALL > .
< P >
A problem with deleting silence is that different tracks in your
file may have different “ start” points. If you are having a
problem with included data not starting where you think it should,
examine the file with the R< SMALL > EPORT< / SMALL > option (above) and set the
S< SMALL > TRIP< / SMALL > S< SMALL > ILENCE< / SMALL > factor manually. Eg:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > MidiInc File=myfile.mid Solo=1 StripSilence=2345 < / B >
< / td > < / tr >
< / Table >
< P >
< / DD >
< DT > < STRONG > IGNOREPC< / STRONG > < / DT >
< DD > A MIDI file being imported may contain Program Change
commands (voice changes). By default
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > will strip these out so
that the voices set in the
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > track are used. However, you can
override this by setting I< SMALL > GNORE< / SMALL > PC=F< SMALL > ALSE< / SMALL > . To duplicate the
default, use I< SMALL > GNORE< / SMALL > PC=T< SMALL > RUE< / SMALL > < A NAME = "tex2html79"
HREF="#foot10205">< SUP > < SPAN CLASS = "arabic" > 21< / SPAN > .< SPAN CLASS = "arabic" > 5< / SPAN > < / SUP > < / A >
< P >
< / DD >
< DT > < STRONG > < SPAN CLASS = "textit" > TRACK< / SPAN > < / STRONG > < / DT >
< DD > A trackname < SPAN CLASS = "textit" > must be set< / SPAN > into which notes
are inserted. You can set more than one track/channel if you
wish. For example, if you have the option DRUM=10 any notes
in the MIDI file with a channel 10 setting would be inserted into
the
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > D< SMALL > RUM< / SMALL > track. Similarity, S< SMALL > OLO-< / SMALL > T< SMALL > ENOR=1< / SMALL > will
copy notes from channel 1 into the S< SMALL > OLO-< / SMALL > T< SMALL > ENOR< / SMALL > track. If the
track doesn't exist, it will be created. Note: this means that the
channel assignment in your included file and the new
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > generated
file will most likely be different.
< P >
To convert the data in the imported track into data that a
S< SMALL > OLO< / SMALL > or M< SMALL > ELODY< / SMALL > track can process append the keyword
R< SMALL > IFF< / SMALL > to the channel number with a comma. The note on/off data will be
converted into R< SMALL > IFF< / SMALL > commands and pushed into the specified
track.
< P >
Further, you can append the key P< SMALL > RINT< / SMALL > as well. The generated
R< SMALL > IFF< / SMALL > s will not be inserted into the track but displayed on
your computer monitor. This can be useful for debugging or to
generate lines which can be edited and inserted into a song file.
< P >
< SPAN CLASS = "textit" > At least one T< SMALL > RACK< / SMALL > option is required to include a MIDI
file. It is up to the user to examine existing MIDI files to
determine the tracks being used and which to include into
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > 's
output.< / SPAN >
< P >
< / DD >
< / DL >
< P >
A short example which you could insert into a
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > file is really
this simple:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > MIDIinc File=test.mid Solo-Piano=1 Drum=10 Volume=70 < / B >
< / td > < / tr >
< / Table >
< P >
This will include the MIDI file “ test.mid” at the current position
and assign all notes in channel 1 to the < SPAN CLASS = "textit" > Solo-Piano< / SPAN > track and
the notes from channel 10 to the < SPAN CLASS = "textit" > Drum< / SPAN > track. The volumes for
all the notes will be adjusted to 70% of that in the original.
< P >
Slighty more complicated (and probably silly):
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > MidiInc File=test.mid Lyric=On Solo-Piano=1,Riff
Solo-harmony=2,riff Drum=10 Solo-Guitar=3 < / B >
< / td > < / tr >
< / Table >
< P >
< P >
< BLOCKQUOTE > Will import the existing file “ test.mid” and:
< BR > < / BLOCKQUOTE >
< P > < DL >
< DT > < STRONG > Lyrics< / STRONG > < / DT >
< DD > will be read and inserted into the meta track,
< / DD >
< DT > < STRONG > Solo-Piano< / STRONG > < / DT >
< DD > Data from channel 1 will be converted and inserted
into the S< SMALL > OLO-< / SMALL > P< SMALL > IANO< / SMALL > track as a series of R< SMALL > IFF< / SMALL > s.
< / DD >
< DT > < STRONG > Solo-Harmony< / STRONG > < / DT >
< DD > Data from channel 1 (again!) will be converted and inserted
into the S< SMALL > OLO-< / SMALL > H< SMALL > ARMONY< / SMALL > track as a series of R< SMALL > IFF< / SMALL > s.
< / DD >
< DT > < STRONG > Drum< / STRONG > < / DT >
< DD > Channel 10 data will be copied into the D< SMALL > RUM< / SMALL >
track.
< / DD >
< DT > < STRONG > Solo-Guitar< / STRONG > < / DT >
< DD > Channel 3 data will be copied into the
S< SMALL > OLO-< / SMALL > G< SMALL > UITAR< / SMALL > track. Track settings (ie, Articulate, Harmony)
will < SPAN CLASS = "textit" > not< / SPAN > be applied.
< P >
< / DD >
< / DL >
< P >
More complete example of usage are shown in the directory
< TT > < SPAN CLASS = "textbf" > egs/midi-inc< / SPAN > < / TT > in the distribution.
< P >
A few notes:
< P >
< UL >
< LI > MIDI files to be included do not have to have the same tempo.
M< SMALL > IDI< / SMALL > I< SMALL > NC< / SMALL > adjusts this automatically during the importation.
However, the internal setting for beat division should be the same.
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > assumes a beat division of 192 (this is set in bytes 12 and 13
of the MIDI file). If the included file differs a warning is printed
and
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > will attempt to adjust the timings, but there may be some
drift due to rounding.
< P >
< / LI >
< LI > The included MIDI file is parsed to find the offset of the first
note-on event. Notes to be included are set with their offsets
compensated by that time. This means that any silence at the start
of the included file is skipped (this may surprise you if you have
used the optional < SPAN CLASS = "textit" > Start< / SPAN > setting). Please note the
S< SMALL > TRIP< / SMALL > S< SMALL > ILENCE< / SMALL > option, above, for one work-a-round.
< P >
< / LI >
< LI > If you want the data from the included MIDI file to start
somewhere besides the start of the current bar you can use a
B< SMALL > EATADJUST< / SMALL > before the M< SMALL > IDI< / SMALL > I< SMALL > NC< / SMALL > --use another to move
the pointer back right after the include to keep the song pointer
correct.
< P >
< / LI >
< LI > Not all events in the included files are transferred: notably,
all system and meta events (other than text and lyric, see above)
are ignored.
< P >
< / LI >
< LI > If you want to apply different V< SMALL > OLUME< / SMALL > or other options to
different tracks, just do multiple includes of the same file (with
each include using a different track and options).
< P >
< / LI >
< LI >
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > assumes that all the option pairs are valid. If an option
pair isn't a real directive, it is assumed that the option is a
valid track name. So, a line like:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > MidiInc Files=test.mid Solo-Piano=1 Drum=10 Volume=70 < / B >
< / td > < / tr >
< / Table >
< P >
will generate an error like:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > MidiInc: FILES is not a valid MMA track. < / B >
< / td > < / tr >
< / Table >
< P >
Sorry, but we're not the best guessers or parsers in the world.
< P >
< / LI >
< / UL >
< P >
For short snippets of MIDI you can insert individual events using the
MIDIN< SMALL > OTE< / SMALL > command < A HREF = "#midi-note" > (here)< / A > .
< P >
< H1 > < A NAME = "SECTION0021140000000000000000" >
MIDIMark< / A >
< / H1 >
< P >
You can insert a MIDI Marker event into the Meta track with this
command. The mark can be useful in debugging your MIDI output with a
sequencer or editor which supports Mark events (most do).
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > MidiMark Label < / B >
< / td > < / tr >
< / Table >
< P >
will insert the text “ Label” at the current position. You can add an
optional negative or positive offset in beats:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > MidiMark 2 Label4 < / B >
< / td > < / tr >
< / Table >
< P >
will insert “ Label4” 2 beats into the next bar.
< P >
Note: the “ mark” inserted can only be a single word. If you need a
longer message see < A HREF = "#midicue" > M< SMALL > IDI< / SMALL > C< SMALL > UE< / SMALL > < / A > or
< A HREF = "#miditext" > M< SMALL > IDI< / SMALL > T< SMALL > EXT< / SMALL > < / A > .
< P >
< H1 > < A NAME = "SECTION0021150000000000000000" > < / A >
< A NAME = "midi-note" > < / A >
< BR >
MIDINote
< / H1 >
< P >
It is relatively easy to insert various melody and harmony notes into
a song with S< SMALL > OLO< / SMALL > and other tracks. However, there are times
when you may wish to insert a set of notes complete with MIDI timing
and velocities. These values can be hand generated or created by an
external program.
< P >
The MIDIN< SMALL > OTE< / SMALL > command is used to insert one or more MIDI note
on/off, controller or pitch bend events directly into a track. If you
have a large segment of MIDI data to insert you will probably want to
generate a MIDI file and insert it into your song with the
MIDII< SMALL > NC< / SMALL > command
< A HREF = "#midi-inc" > (here)< / A > . M< SMALL > IDI< / SMALL > N< SMALL > OTE< / SMALL > is more
suited for short segments.
< P >
< H2 > < A NAME = "SECTION0021151000000000000000" >
Setting Options< / A >
< / H2 >
< P >
M< SMALL > IDI< / SMALL > N< SMALL > OTE< / SMALL > has a number of settings which modify its
behavior. These options can be different for each track and are set on
a track-by-track basis. Options are reset to their defaults with the
S< SMALL > EQ< / SMALL > C< SMALL > LEAR< / SMALL > command (except for S< SMALL > OLO< / SMALL > tracks). They are
< SPAN CLASS = "textit" > not< / SPAN > saved or modified by G< SMALL > ROOVE< / SMALL > commands.
< P >
M< SMALL > IDI< / SMALL > N< SMALL > OTE< / SMALL > takes various options in the OPTION=VALUE
notation. Please note that options can appear on a line by themselves,
or can be mixed into a data/command line. The order is not
important--all option pairs are parsed out of an input line
< SPAN CLASS = "textit" > before< / SPAN > the actual data is read. The following options are
supported:
< P >
< DL >
< DT > < STRONG > Transpose=On/Off< / STRONG > < / DT >
< DD > By default MIDIN< SMALL > OTE< / SMALL > ignores the global
T< SMALL > RANSPOSE< / SMALL > setting. If enabled, each note will be adjusted by
the global setting. Careful with this: T< SMALL > RANSPOSE< / SMALL > is a global
setting which effects < SPAN CLASS = "textit" > all< / SPAN > tracks; M< SMALL > IDI< / SMALL > N< SMALL > OTE < / SMALL > T< SMALL > RANSPOSE< / SMALL >
effects only the specified track.
< P >
< / DD >
< DT > < STRONG > Offsets=Beats/Ticks< / STRONG > < / DT >
< DD > By default a MIDI tick offset into the
current position in the file is used. However, you can change this
to “ Beats” so that conventional
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > beat offset are used (see
example below).
< P >
< / DD >
< DT > < STRONG > Duration=Notes/Ticks< / STRONG > < / DT >
< DD > By default the note duration is specified
using MIDI ticks. Setting the value to “ Notes” enables the use of
conventional
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > note durations (which are converted, internally,
to MIDI ticks.
< P >
< / DD >
< DT > < STRONG > Articulate=On/Off< / STRONG > < / DT >
< DD > This option is OFF by default. If enabled the
current A< SMALL > RTICULATE< / SMALL > < A HREF = "node24.html#articulate" > (details
here)< / A > setting is applied to each event if
the duration is set to < SPAN CLASS = "textit" > Notes< / SPAN > . Setting this option to “ off”
causes each note to have its full value. If using “ ticks” (the
default) for the duration this command is ignored.
< P >
< / DD >
< DT > < STRONG > Octave=Value< / STRONG > < / DT >
< DD > Octave adjustment will increase/decrease by the
set number of octaves for each note entered in a N< SMALL > OTE< / SMALL >
command. Values in the range -4 to 4 are permitted. Notes in drum
tracks (channel 10) will not be effected. This has no effect on the
underlying track's octave. Any generated notes outside of the valid
MIDI range of 0 to 127 will be adjusted to fit the range.
< P >
< / DD >
< DT > < STRONG > Volume=Value< / STRONG > < / DT >
< DD > Use this option to adjust the volume (velocity) of
the notes set with a N< SMALL > OTE< / SMALL > command (useful if you have played
a melody on a keyboard and it is too loud/soft). The value is a
percentage adjustment factor and, by default, is set to 100. Values
greater than 100 will make notes louder and values less than 100
will make them softer. Using very large factors will cause all notes
to have maximum velocity (127); small factors will cause minimum
velocity. Generated values less than 1 are magically set to 1;
values greater than 127 are set to 127. The adjustment factor must
be greater than 0.
< P >
< / DD >
< DT > < STRONG > Adjust=Value< / STRONG > < / DT >
< DD > This option is set to 0 by default. If a value is
set all future < SPAN CLASS = "textit" > Tick Offsets< / SPAN > in M< SMALL > IDI< / SMALL > N< SMALL > OTE< / SMALL > directives
will be adjusted by that value. This can be quite useful if you have
a set of note on/off events parsed from an existing MIDI file. Using
the A< SMALL > DJUST< / SMALL > value can shift the series back and forth in your
song file. The setting has no effect when using Beat offsets.
< P >
< / DD >
< / DL >
< P >
To duplicate the default settings you might use a line like:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Chord-Piano MidiNote Offsets=Ticks Duration=Ticks Articulate=Off
Transpose=Off Adjust=0 Volume=100 Octave=0 < / B >
< / td > < / tr >
< / Table >
< P >
You can insert MIDI events directly into any track with a command line
like:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Solo MidiNote Note 1 c#+ 100 4 < / B >
< / td > < / tr >
< / Table >
< P >
The valid commands are N< SMALL > OTE< / SMALL > (note on/off event), C< SMALL > TRL< / SMALL >
(controller event) and PB (pitch bend event), PBR
(series/range of pitch bend events), C< SMALL > H< / SMALL > AT (a channel aftertouch
event) and C< SMALL > H< / SMALL > ATR (series/range of channel aftertouch
events). Following is a detailed command set for each option:
< P >
< H2 > < A NAME = "SECTION0021152000000000000000" >
Note Events< / A >
< / H2 >
< P >
A M< SMALL > IDI< / SMALL > N< SMALL > OTE< / SMALL > N< SMALL > OTE< / SMALL > event is specified with the “ Note”
keyword; however, the keyword doesn't need to be used. So:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Solo MidiNote 1 65 100 4 < / B >
< / td > < / tr >
< / Table >
< P >
and
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Solo MidiNote Note 1 65 100 4 < / B >
< / td > < / tr >
< / Table >
< P >
are equivalent.
< P >
After the command you need to specify the offset, pitch, velocity and
duration of the desired note.
< P >
< DL >
< DT > < STRONG > Offset< / STRONG > < / DT >
< DD > The offset into the current bar. The exact format
depends of the global setting use (Ticks or Beats). When using Ticks
(the default) the offset is simply inserted into the current bar at
the given offset. To insert an event at the start of the current bar
use “ 0” . If using Beats, you can use any valid offset used in
defining patterns
< A HREF = "node4.html#beat-offset" > (here)< / A > . Values less than 1
will place the event before the current bar. Note: when using Tick
offsets they will be adjusted by the global A< SMALL > DJUST< / SMALL > setting.
< P >
< UL >
< LI > The value for the offset can be negative. This will generate
an event before the start of the current bar and a warning message
will be displayed.
< / LI >
< LI > Offsets can be fractional if using “ beats” . Fractional
values when using “ ticks” will cause an error.
< / LI >
< / UL >
< P >
< / DD >
< DT > < STRONG > Note< / STRONG > < / DT >
< DD > The next field represents the MIDI note or pitch or a set
of notes (a chord). Notes can be specified with their MIDI value (0
to 127) or using standard notation pitch mnemonics.
< P >
A single note is specified with a MIDI value or mnemonic; a chord
(multiple notes) is specified by appending each desired note with a
single comma. For example, to insert a C Major chord you could use
the line:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Solo MidiNote Note 1 c,e,g 90 192 < / B >
< / td > < / tr >
< / Table >
< P >
Pitch names are used just like you would in a S< SMALL > OLO< / SMALL > or
M< SMALL > ELODY< / SMALL > track
< A HREF = "node10.html#solo-pitch" > (here)< / A > . The permitted syntax
is limited to the letters 'a', 'b', 'c', 'd', 'e', 'f' or 'g'
followed by an optional '& ', '#' or 'n' and a number of '-'s or
'+'s. When a note pitch is specified by name the O< SMALL > CTAVE< / SMALL >
setting for the track is honored. The current K< SMALL > EY< / SMALL > S< SMALL > IG< / SMALL > is
applied to < SPAN CLASS = "textit" > each< / SPAN > chord. Accidentals, whether set explicitly or
from a key signature, < SPAN CLASS = "textit" > do not< / SPAN > apply to successive
chords.< A NAME = "tex2html80"
HREF="#foot10544">< SUP > < SPAN CLASS = "arabic" > 21< / SPAN > .< SPAN CLASS = "arabic" > 6< / SPAN > < / SUP > < / A > They < SPAN CLASS = "textit" > do< / SPAN > apply to successive notes in a chord, irrespective of
octave. So, the chord “ a#,a+,a++” would have all three “ a” s
sharp.
< P >
For D< SMALL > RUM< / SMALL > tracks and S< SMALL > OLO< / SMALL > or M< SMALL > ELODY< / SMALL > tracks which
have the “ DrumType” attribute set, you can use drum tone mnemonics
< A HREF = "node30.html#sec-drumnames" > (here)< / A > . The special tone
“ *” can be used to select the tone. In the case of M< SMALL > ELODY< / SMALL >
and S< SMALL > OLO< / SMALL > tracks the current default tone is used
< A HREF = "node10.html#solo-default-tone" > (here)< / A > ; for
D< SMALL > RUM< / SMALL > tracks the currently selected T< SMALL > ONE< / SMALL >
< A HREF = "node4.html#drum-tone" > (here)< / A > . Use of the special
“ *” is useful when you have a series of drum events--changing
only the T< SMALL > ONE< / SMALL > is much easier than changing a number of
M< SMALL > IDI< / SMALL > N< SMALL > OTE< / SMALL > commands.
< P >
< / DD >
< DT > < STRONG > Velocity< / STRONG > < / DT >
< DD > The “ volume” of the note is set with a MIDI velocity
in the range 0 to 127. Notes with the velocity of 0 will, probably,
not sound.
< P >
< / DD >
< DT > < STRONG > Duration< / STRONG > < / DT >
< DD > The length of the note is set in either MIDI ticks for
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > note durations, depending on the global “ Duration”
setting. When using Ticks remember that 192 MIDI ticks equals a
quarter note. If you have enabled the Articulate setting and are
using Note durations the duration will be adjusted.
< / DD >
< / DL >
< P >
< UL >
< LI > When using “ note” for the duration any valid
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > note length
is permitted. For example, using a duration of “ 8+8” would
generate the same duration as “ 4” .
< / LI >
< LI > The MIDIN< SMALL > OTE< / SMALL > directive does not check for overlapping
notes of the same pitch. These are easy to create if long durations
are specified and may not give the desired results.
< / LI >
< LI > The S< SMALL > WING< / SMALL > setting is ignored.
< / LI >
< / UL >
< P >
< H2 > < A NAME = "SECTION0021153000000000000000" >
Controller Events< / A >
< / H2 >
< P >
A MIDI controller event can be directly inserted at any point in our
song using a M< SMALL > IDI< / SMALL > N< SMALL > OTE < / SMALL > C< SMALL > ONTROLLER< / SMALL > command. For example:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Solo MidiNote Ctrl 3 Modulation 90 < / B >
< / td > < / tr >
< / Table >
< P >
will insert a < SPAN CLASS = "textit" > Modulation< / SPAN > control event. The necessary values
are:
< P >
< DL >
< DT > < STRONG > Offset< / STRONG > < / DT >
< DD > Same as for < SPAN CLASS = "textit" > Note< / SPAN > . See above for details.
< P >
< / DD >
< DT > < STRONG > Controller< / STRONG > < / DT >
< DD > This can be a value in the range 0 to 127 specifying
the MIDI controller or a symbolic name. See the appendix
< A HREF = "node30.html#sec-controllers" > , here,< / A > for a list of
defined names.
< P >
< / DD >
< DT > < STRONG > Datum< / STRONG > < / DT >
< DD > The “ parameter” value for the controller. Must be in
the range 0 to 127.
< P >
< / DD >
< / DL >
< P >
< H2 > < A NAME = "SECTION0021154000000000000000" >
Pitch Bend< / A >
< / H2 >
< P >
A MIDI Pitch Bend event can be directly inserted at any point in our
song using a M< SMALL > IDI< / SMALL > N< SMALL > OTE < / SMALL > PB command. For example:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Solo MidiNote PB 3 934 < / B >
< / td > < / tr >
< / Table >
< P >
< DL >
< DT > < STRONG > Offset< / STRONG > < / DT >
< DD > Same as for < SPAN CLASS = "textit" > Note< / SPAN > . See above for details.
< P >
< / DD >
< DT > < STRONG > Value< / STRONG > < / DT >
< DD > The value for a pitch bend event must be in the range
-8191 to +8192.< A NAME = "tex2html81"
HREF="#foot10377">< SUP > < SPAN CLASS = "arabic" > 21< / SPAN > .< SPAN CLASS = "arabic" > 7< / SPAN > < / SUP > < / A > The exact effect of different values is device dependant;
however, -8191 sets the pitch bend to “ as low as possible” , 8192
sets it “ as high as possible” , and 0 resets the pitch to neutral.
< P >
< / DD >
< / DL >
< P >
< H2 > < A NAME = "SECTION0021155000000000000000" >
Pitch Bend Range< / A >
< / H2 >
< P >
This command is just like P< SMALL > ITCH < / SMALL > B< SMALL > END< / SMALL > , described above, with the
added feature of creating a series of events over a period of
time. This makes it easy to create various “ swoops” and “ slides”
in your song. As always, the example:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Solo MidiNote PBR 20 3,4 0,1000 < / B >
< / td > < / tr >
< / Table >
< P >
< DL >
< DT > < STRONG > Count< / STRONG > < / DT >
< DD > This sets the total number of events to insert. Each
event will be distributed over the specifed < SPAN CLASS = "textit" > offset range< / SPAN > .
< P >
< / DD >
< DT > < STRONG > Offset Range< / STRONG > < / DT >
< DD > Two values joined with a single comma. Both values
and the comma must be present. The first value is the first event
offset to use, the second is the last. Events will be evently
distributed over the two offsets. Each offset has the same format as
as for < SPAN CLASS = "textit" > Note< / SPAN > .
< P >
< / DD >
< DT > < STRONG > Value Range< / STRONG > < / DT >
< DD > Two values joined with a single comma. Both values
and the comma must be present. The first value is the initial pitch
bend setting; the second is the final. The values will be
incremented (or decremented) for each event offset according to the
< SPAN CLASS = "textit" > count< / SPAN > value. See P< SMALL > ITCH < / SMALL > B< SMALL > END< / SMALL > , above, for the range
rules.
< P >
< / DD >
< / DL >
< P >
< H2 > < A NAME = "SECTION0021156000000000000000" >
Channel Aftertouch< / A >
< / H2 >
< P >
MIDI channel aftertouch events can be directly inserted in a
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > song using the M< SMALL > IDI< / SMALL > N< SMALL > OTE < / SMALL > C< SMALL > H< / SMALL > AT command. For example:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Solo MidiNote ChAT 3 50 < / B >
< / td > < / tr >
< / Table >
< P >
< DL >
< DT > < STRONG > Offset< / STRONG > < / DT >
< DD > Same as for < SPAN CLASS = "textit" > Note< / SPAN > . See above for details.
< P >
< / DD >
< DT > < STRONG > Value< / STRONG > < / DT >
< DD > The value for a channel aftertouch event must be in the
range 0 to 127. The exact effect of this command is highly specific
to different synths; however, it applies to all currently sounding
note events on the specified channel. On some hardware (or software)
the command is ignored; on others it effects the volume or vibrato.
< P >
< / DD >
< / DL >
< P >
< H2 > < A NAME = "SECTION0021157000000000000000" >
Channel Aftertouch Range< / A >
< / H2 >
< P >
Just like C< SMALL > HANNEL < / SMALL > A< SMALL > FTERTOUCH< / SMALL > , described above, with the added
feature of creating a series of events over a period of time. Example:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Solo MidiNote ChATR 20 3,4 0,100 < / B >
< / td > < / tr >
< / Table >
< P >
< DL >
< DT > < STRONG > Count< / STRONG > < / DT >
< DD > This sets the total number of events to insert. Each
event will be distributed over the specifed < SPAN CLASS = "textit" > offset range< / SPAN > .
< P >
< / DD >
< DT > < STRONG > Offset Range< / STRONG > < / DT >
< DD > Two values joined with a single comma. Both values
and the comma must be present. The first value is the first event
offset to use, the second is the last. Events will be evently
distributed over the two offsets. Each offset has the same format as
as for < SPAN CLASS = "textit" > Note< / SPAN > .
< P >
< / DD >
< DT > < STRONG > Value Range< / STRONG > < / DT >
< DD > Two values joined with a single comma. Both values
and the comma must be present. The first value is the initial pitch
bend setting; the second is the final. The values will be
incremented (or decremented) for each event offset according to the
< SPAN CLASS = "textit" > count< / SPAN > value. See C< SMALL > HANNEL < / SMALL > A< SMALL > FTERTOUCH< / SMALL > , above, for the
range rules.
< P >
< / DD >
< / DL >
< P >
< DIV ALIGN = "CENTER" >
------------
< / DIV >
< P >
< UL >
< LI > Remember that you can use hexadecimal notation for any of the
above commands. A hex value is one preceded by a “ 0x” ... the
decimal value 20 would be 0x14.
< P >
< / LI >
< LI > M< SMALL > IDI< / SMALL > N< SMALL > OTE< / SMALL > is unaffected by G< SMALL > ROOVE< / SMALL > commands.
< P >
< / LI >
< LI > Bar measure pointers are < SPAN CLASS = "textit" > not< / SPAN > updated or affected.
< P >
< / LI >
< LI > For an alternate method of including a complete MIDI file
directly into a track please see the MIDII< SMALL > NC< / SMALL > command
< A HREF = "#midi-inc" > (here)< / A > .
< P >
< / LI >
< LI > Yet an another alternate method to be aware of is MIDI
< A HREF = "#sec-midi" > (here)< / A > which places events
directly into the Meta track.
< P >
< / LI >
< / UL >
< P >
< H1 > < A NAME = "SECTION0021160000000000000000" >
MIDIPan< / A >
< / H1 >
< P >
In MIDI-speak “ pan” is the same as “ balance” on a stereo. By
adjusting the MIDIP< SMALL > AN< / SMALL > for a track you can direct the output to
the left, right or both speakers. Example:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Bass MIDIPan 4 < / B >
< / td > < / tr >
< / Table >
< P >
This command is only available in track mode. The data generated is
not sent into the MIDI stream until musical data is created for the
relevant MIDI channel.
< P >
The value specified must be in the range 0 to 127, and must be an
integer.
< P >
A variation for this command is to have the pan value change over a
range of beats:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Solo MidiPan 10 120 4 < / B >
< / td > < / tr >
< / Table >
< P >
in this case you must give exactly 3 arguments:
< P >
< OL >
< LI > The initial pan value (0 to 127),
< / LI >
< LI > The final pan value (0 to 127),
< / LI >
< LI > The number of beats to apply the pan over.
< / LI >
< / OL >
< P >
Using a beat count you can create interesting effects with different
instruments moving between the left and right channels.
< P >
MIDIP< SMALL > AN< / SMALL > is not saved or restored by G< SMALL > ROOVE< / SMALL > commands, nor
is it effected by S< SMALL > EQ< / SMALL > C< SMALL > LEAR< / SMALL > . A MIDIP< SMALL > AN< / SMALL > is inserted
directly into the MIDI track at the point at which it is encountered
in the music file. This means that the effect of MIDIP< SMALL > AN< / SMALL > will
be in use until another MIDIP< SMALL > AN< / SMALL > is encountered.
< P >
MIDIP< SMALL > AN< / SMALL > can be used in MIDI compositions to emulate the sound
of an orchestra. By assigning different values to different groups of
instruments, you can get the feeling of strings, horns, etc. all
placed in the “ correct” position on the stage.
< P >
MIDIP< SMALL > AN< / SMALL > can be used for much cruder purposes. When creating
accompaniment tracks for a mythical jazz group, you might set all the
bass tracks (Bass, Walk, Bass-1, etc) set to aMIDIP< SMALL > AN< / SMALL > 0. Now,
when practicing at home you have a “ full band” ; and the bass player
can practice without the generated bass lines simply by turning off
the left speaker.
< P >
Because most MIDI keyboard do not reset between tunes, there should be
a MIDIP< SMALL > AN< / SMALL > to undo the effects at the end of the
file. Example:< A NAME = "tex2html82"
HREF="#foot10545">< SUP > < SPAN CLASS = "arabic" > 21< / SPAN > .< SPAN CLASS = "arabic" > 8< / SPAN > < / SUP > < / A >
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Include swing
< BR >
Groove Swing
< BR >
Bass MIDIPan 0
< BR >
Walk MIDIPan 0
< BR >
1 C
< BR >
2 C
< BR > ...
< BR >
123 C
< BR >
Bass MIDIPan 64
< BR >
Walk MIDIPan 64 < / B >
< / td > < / tr >
< / Table >
< P >
< H1 > < A NAME = "SECTION0021170000000000000000" >
MIDISeq< / A >
< / H1 >
< P >
It is possible to associate a set of MIDI controller messages with
certain beats in a sequence. For example, you might want to have the
Modulation Wheel set for the first beats in a bar, but not for the
third. The following example shows how:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Seqsize 4
< BR >
Begin Bass-2
< BR >
Voice NylonGuitar
< BR >
Octave 4
< BR >
Sequence { 1 4 1 90; 2 4 3 90; 3 4 5 90; 4 4 1+ 90}
< BR >
MIDIDef WheelStuff 1 1 0x7f ; 2 1 0x50; 3 1 0
< BR >
MidiSeq WheelStuff
< BR >
Articulate 90
< BR >
End
< BR >
< BR >
C < SPAN CLASS = "MATH" > *< / SPAN > 4 < / B >
< / td > < / tr >
< / Table >
< P >
The M< SMALL > IDI< / SMALL > S< SMALL > EQ< / SMALL > command is specific to a track and is saved as part
of the G< SMALL > ROOVE< / SMALL > definition. This lets style file writers use
enhanced MIDI features to dress up their sounds.
< P >
The command has the following syntax:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > TrackName MidiSeq < Beat> < Controller> < Datum> [ ; ...] < / B >
< / td > < / tr >
< / Table >
< P >
where:
< DL >
< DT > < STRONG > Beat< / STRONG > < / DT >
< DD > is the Beat in the bar. This can be an integer (1,2, etc.)
or a floating point value (1.2, 2.25, etc.). It must be 1 or greater
and less than the end of bar (in < SPAN CLASS = "textbf" > 4/4< / SPAN > it must be less than
5).
< P >
< / DD >
< DT > < STRONG > Controller< / STRONG > < / DT >
< DD > A valid MIDI controller. This can be a value in the
range 0x00 to 0x7f or a symbolic name. See the appendix
< A HREF = "node30.html#sec-controllers" > , here,< / A > for a list of
defined names.
< P >
< / DD >
< DT > < STRONG > Datum< / STRONG > < / DT >
< DD > All controller messages use a single byte “ parameter”
in the range 0x00 to 0x7f.
< P >
< / DD >
< / DL >
< P >
You can enter the values in either standard decimal notation or in
hexadecimal with the prefixed “ 0x” . In most cases, your code will be
clearer if you use values like “ 0x7f” rather than the equivalent
“ 127” .
< P >
The MIDI sequences specified can take several forms:
< P >
< OL >
< LI > A simple series like:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > MIDISeq 1 ReleaseTime 50; 3 ReleaseTime 0 < / B >
< / td > < / tr >
< / Table >
< P >
in this case the commands are applied to beats 1 and 3 in each bar
of the sequence.
< P >
< / LI >
< LI > As a set of names predefined in an MIDID< SMALL > EF< / SMALL > command:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > MIDISeq Rel1 Rel2 < / B >
< / td > < / tr >
< / Table >
< P >
Here, the commands defined in “ Rel1” are applied to the first bar
in the sequence, “ Rel2” to the second. And, if there are more bars
in the sequence than definitions in the line, the series will be
repeated for each bar.
< P >
< / LI >
< LI > A set of series enclosed in { } braces. Each braced series is
applied to a different bar in the sequence. The example above could
have been does as:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > MIDISeq { 1 ReleaseTime 50; 3 ReleaseTime 0 } \
< BR > { 2 ReleaseTime 50; 4 ReleaseTime 0 } < / B >
< / td > < / tr >
< / Table >
< P >
< / LI >
< LI > Finally, you can combine the above into different combinations.
For example:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > MIDIDef Rel1 1 ReleaseTime 50
< BR >
MIDIDef Rel2 2 ReleaseTime 50
< BR >
MIDISeq { Rel1; 3 ReleaseTime 0 } { Rel2; 4 ReleaseTime 0 } < / B >
< / td > < / tr >
< / Table >
< P >
< / LI >
< / OL >
< P >
You can have specify different messages for different beats (or
different messages/controllers for the same beat) by listing them on
the same M< SMALL > IDI< / SMALL > S< SMALL > EQ< / SMALL > line separated by “ ;” s.
< P >
If you need to repeat a sequence for a measure in a sequence you can
use the special notation “ /” to force the use of the previous line.
The special symbol “ z” or ” -” can be used to disable a bar (or
number of bars). For example:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Bass-Dumb MIDISeq 1 ReleaseTime 20 z / FOOBAR < / B >
< / td > < / tr >
< / Table >
< P >
would set the “ ReleaseTime” sequence for the first bar of the
sequence, no MIDISeq events for the second and third, and the contents
of “ FOOBAR” for the fourth.
< P >
To disable the sending of messages just use a single “ -” :
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Bass-2 MidiSeq - // disable controllers < / B >
< / td > < / tr >
< / Table >
< P >
< H1 > < A NAME = "SECTION0021180000000000000000" >
MIDISplit< / A >
< / H1 >
< P >
For certain post-processing effects it is convenient to have each
different drum tone in a separate MIDI track. This makes it easier to
apply an effect to, for example, the snare drum. Just to make this a
bit more fun you can split any track created by
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > .
< P >
To use this feature:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > MIDISplit < list of channels> < / B >
< / td > < / tr >
< / Table >
< P >
So, to split out just the drum channel< A NAME = "tex2html83"
HREF="#foot10469">< SUP > < SPAN CLASS = "arabic" > 21< / SPAN > .< SPAN CLASS = "arabic" > 9< / SPAN > < / SUP > < / A > you would have the command:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > MIDISplit 10 < / B >
< / td > < / tr >
< / Table >
< P >
somewhere in your song file.
< P >
When processing
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > creates an internal list of MIDI note-on events
for each tone or pitch in the track. It then creates a separate MIDI
track for each list. Any other events are written to another track.
< P >
< H1 > < A NAME = "SECTION0021190000000000000000" > < / A >
< A NAME = "miditext" > < / A >
< BR >
MIDIText
< / H1 >
< P >
This command inserts an arbitrary text string into a MIDI track at the
current file position:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Chord-Sus MidiText I just love violins. < / B >
< / td > < / tr >
< / Table >
< P >
will insert the text event< A NAME = "tex2html84"
HREF="#foot10547">< SUP > < SPAN CLASS = "arabic" > 21< / SPAN > .< SPAN CLASS = "arabic" > 10< / SPAN > < / SUP > < / A > “ I just love violins.” into the
C< SMALL > HORD-< / SMALL > S< SMALL > US< / SMALL > track.
< P >
Please note that if the specified track does
not exist the text will be queued. If the track is never created, the
command is ignored.
< P >
You can also insert text into the Meta track:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > MidiText A message in the Meta Track < / B >
< / td > < / tr >
< / Table >
< P >
Since the Meta track always exists, no queueing is done.
< P >
< H1 > < A NAME = "SECTION0021200000000000000000" >
MIDITname< / A >
< / H1 >
< P >
When creating a MIDI track,
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > inserts a MIDI Track Name event at
the start of the track. By default, this name is the same as the
associated
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > track name. You can change this by issuing the
MIDI< SMALL > T< / SMALL > N< SMALL > AME< / SMALL > command. For example, to change the C< SMALL > HORD< / SMALL >
track name you might do something like:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Chord MidiTname Piano < / B >
< / td > < / tr >
< / Table >
< P >
Please note that this < SPAN CLASS = "textit" > only< / SPAN > effects the tracks in the generated
MIDI file. You still refer to the track in your file as C< SMALL > HORD< / SMALL > .
< P >
You can also use this command to rename the automatic name inserted
into the Meta track. When
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > starts it inserts a Track Name event
based on the filename at offset 0 in the Meta Track. For example, if
you have a
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > input file “ dwr.mma” the a “ Meta SeqName” event
“ dwr” will be inserted. A command like:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > MidiTName My version of “ Dancing with Roses” < / B >
< / td > < / tr >
< / Table >
< P >
anywhere in the input file will remove the original text and insert a
new event in its place.< A NAME = "tex2html85"
HREF="#foot10548">< SUP > < SPAN CLASS = "arabic" > 21< / SPAN > .< SPAN CLASS = "arabic" > 11< / SPAN > < / SUP > < / A >
< P >
< H1 > < A NAME = "SECTION0021210000000000000000" >
MIDIVoice< / A >
< / H1 >
< P >
Similar to the MIDIS< SMALL > EQ< / SMALL > command discussed in the previous
section, the MIDIV< SMALL > OICE< / SMALL > command is used to insert MIDI
controller messages into your files. Instead of sending the data for
each bar as MIDIS< SMALL > EQ< / SMALL > does, this command just sends the listed
control events at the start of a track and then, if needed, at the
start of each bar.
< P >
Again, a short example. Let us assume that you want to use the
“ Release Time” controller to sustain notes in a bass line:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Seqsize 4
< BR >
Begin Bass-2
< BR >
Voice NylonGuitar
< BR >
MidiVoice 1 ReleaseTime 50
< BR >
Octave 4
< BR >
Sequence { 1 4 1 90; 2 4 3 90; 3 4 5 90; 4 4 1+ 90}
< BR >
Articulate 60
< BR >
End
< BR >
< BR >
C < SPAN CLASS = "MATH" > *< / SPAN > 4 < / B >
< / td > < / tr >
< / Table >
< P >
should give an interesting effect.
< P >
The syntax for the command is:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Track MIDIVoice < beat> < controller> < Datum> [; ...] < / B >
< / td > < / tr >
< / Table >
< P >
This syntax is identical to that discussed in the section for
MIDIS< SMALL > EQ< / SMALL > , above. The < beat> value is
required for the command--it determines if the data is sent before or
after the V< SMALL > OICE< / SMALL > command is sent. Some controllers are reset by
a voice, others not. My experiments show that B< SMALL > ANK< / SMALL > should be
sent before, most others after. Using a “ beat” of “ 0” forces the
MidiVoice data to be sent before the Voice control; any other “ beat”
value causes the data to be sent after the Voice control. In this
silly example:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Voice Piano1
< BR >
MidiVoice {0 Bank 5; 1 ReleaseTime 100} < / B >
< / td > < / tr >
< / Table >
< P >
the MIDI data is created in an order like:
< P >
< P >
< BLOCKQUOTE > 0 Param Ch=xx Con=00 val=05
< BR >
0 ProgCh Ch=xx Prog=00
< BR >
0 Param Ch=xx Con=72 val=80
< / BLOCKQUOTE >
< P >
All the MIDI events occur at the same offset, but the order is (may
be) important.
< P >
By default
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > assumes that the MIDIVoice data is to be used only
for the first bar in the sequence. But, it's possible to have a
different sequence for each bar in the sequence (just like you can
have a different V< SMALL > OICE< / SMALL > for each bar). In this case, group the
different data groups with {} brackets:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Bass-1 MIDIVoice {1 ReleaseTime 50} {1 ReleaseTime 20} < / B >
< / td > < / tr >
< / Table >
< P >
This list is stored with other G< SMALL > ROOVE< / SMALL > data, so is ideal for
inclusion in a style file.
< P >
If you want to disable this command after it has been issued you can
use the form:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Track MIDIVoice - // disable < / B >
< / td > < / tr >
< / Table >
< P >
Some technical notes:
< P >
< UL >
< LI >
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > tracks the events sent for each bar and will not duplicate
sequences.
< P >
< / LI >
< LI > Be cautious in using this command to switch voice banks. If you
don't switch the voice bank back to a sane value you'll be playing
the wrong instruments!
< P >
< / LI >
< LI > Do use the MIDIC< SMALL > LEAR< / SMALL > command
(< A HREF = "#sec-midiclear" > details)< / A > to
“ undo” anything you've done via a MIDIV< SMALL > OICE< / SMALL > command.
< P >
< / LI >
< / UL >
< P >
< H1 > < A NAME = "SECTION0021220000000000000000" > < / A > < A NAME = "channelvol" > < / A >
< BR >
MIDIVolume
< / H1 >
< P >
MIDI devices equipped with mixer settings can make use of the
“ Channel” or “ Master” volume settings.< A NAME = "tex2html86"
HREF="#foot10517">< SUP > < SPAN CLASS = "arabic" > 21< / SPAN > .< SPAN CLASS = "arabic" > 12< / SPAN > < / SUP > < / A >
< P >
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > doesn't set any channel volumes without your knowledge. If you
want to use a set of reasonable defaults, look at the file
< TT > < SPAN CLASS = "textbf" > includes/init.mma< / SPAN > < / TT > which sets all channels other than “ 1” to
“ 100” . Channel “ 1” is assumed to be a solo/keyboard track and is
set to the maximum volume of “ 127” .
< P >
You can set selected MIDIV< SMALL > OLUME< / SMALL > s:
< P >
< Table Hspace = "40%" CellSpacing = 0 CellPadding = 10 BGColor = "OldLace" Border = 3 >
< tr > < td >
< B > Chord MIDIVolume 55 < / B >
< / td > < / tr >
< / Table >
< P >
will set the Chord track channel. For most users, the use of this
command is < SPAN CLASS = "textit" > not< / SPAN > recommended since it will upset the balance of
the library grooves. If you need a track softer or louder you should
use the V< SMALL > OLUME< / SMALL > setting (which changes the MIDI velocities of
each note) for the track.
< P >
The data generated is not sent into the MIDI stream until musical data
is created for the relevant MIDI channel.
< P >
More sophisticated MIDI programs use MIDI volume changes in
combination with velocity settings. If you are going to do a “ fancy
arrangement” you'll probably be better of using a dedicated
sequencer/editor to make the track-by-track volume changes. On the
other hand, you may find that using MIDIV< SMALL > OLUME< / SMALL > ,
MIDIC< SMALL > RESC< / SMALL > and MIDID< SMALL > ECRESC< / SMALL >
< A HREF = "#midicresc" > (here)< / A > works just fine.
< P >
Caution: If you use the command with A< SMALL > LL< / SMALL > T< SMALL > RACKS< / SMALL > you should note
that only existing
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > tracks will be effected.
< P >
< BR > < HR > < H4 > Footnotes< / H4 >
< DL >
< DT > < A NAME = "foot10056" > ... set.< / A > < A
HREF="node21.html#tex2html75">< SUP > < SPAN CLASS = "arabic" > 21< / SPAN > .< SPAN CLASS = "arabic" > 1< / SPAN > < / SUP > < / A > < / DT >
< DD > Depending on your initialization files,
there may be other information MIDI in the track which is inserted
into the output file.
< / DD >
< DT > < A NAME = "foot10533" > ... track:< / A > < A
HREF="node21.html#tex2html76">< SUP > < SPAN CLASS = "arabic" > 21< / SPAN > .< SPAN CLASS = "arabic" > 2< / SPAN > < / SUP > < / A > < / DT >
< DD > This is much easier to do with the KeySig
command, < A HREF = "node24.html#keysig" > here< / A >
< / DD >
< DT > < A NAME = "foot10536" > ... file.< / A > < A
HREF="node21.html#tex2html77">< SUP > < SPAN CLASS = "arabic" > 21< / SPAN > .< SPAN CLASS = "arabic" > 3< / SPAN > < / SUP > < / A > < / DT >
< DD > A copyright message is set as a
meta-event with the coding < FF 02 Len Text> .
< / DD >
< DT > < A NAME = "foot10165" > ... portamento< / A > < A
HREF="node21.html#tex2html78">< SUP > < SPAN CLASS = "arabic" > 21< / SPAN > .< SPAN CLASS = "arabic" > 4< / SPAN > < / SUP > < / A > < / DT >
< DD > The name “ Glis” is used
because “ MIDIPortamento” gets to be a bit long to type and
“ MIDIPort” might be interpreted as something to do with
“ ports” .
< / DD >
< DT > < A NAME = "foot10205" > ...I< SMALL > GNORE< / SMALL > PC=T< SMALL > RUE< / SMALL > < / A > < A
HREF="node21.html#tex2html79">< SUP > < SPAN CLASS = "arabic" > 21< / SPAN > .< SPAN CLASS = "arabic" > 5< / SPAN > < / SUP > < / A > < / DT >
< DD > “ On” and “ 1” can be
used instead of “ True” ; “ Off” and “ 0” can be used instead of “ False” .
< / DD >
< DT > < A NAME = "foot10544" > ... chords.< / A > < A
HREF="node21.html#tex2html80">< SUP > < SPAN CLASS = "arabic" > 21< / SPAN > .< SPAN CLASS = "arabic" > 6< / SPAN > < / SUP > < / A > < / DT >
< DD > The reason for this is that
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > doesn't really
know when to stop applying an accidental in a set of
M< SMALL > IDI< / SMALL > N< SMALL > OTE< / SMALL > commands since they can easily span the current
bar. It is thought best to honor a key signature, but to reset it
for each chord. Not quite standard musical notation; but then
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > isn't notation.
< / DD >
< DT > < A NAME = "foot10377" > ... +8192.< / A > < A
HREF="node21.html#tex2html81">< SUP > < SPAN CLASS = "arabic" > 21< / SPAN > .< SPAN CLASS = "arabic" > 7< / SPAN > < / SUP > < / A > < / DT >
< DD > The number is a 14 bit value over 2
bytes. Internally
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > converts the argument to a value 0 to
16383.
< / DD >
< DT > < A NAME = "foot10545" > ... Example:< / A > < A
HREF="node21.html#tex2html82">< SUP > < SPAN CLASS = "arabic" > 21< / SPAN > .< SPAN CLASS = "arabic" > 8< / SPAN > < / SUP > < / A > < / DT >
< DD > This is much easier to do with the MMAStart
and MMAEnd options (< A HREF = "node27.html#sec-paths" > details)< / A > .
< / DD >
< DT > < A NAME = "foot10469" > ... channel< / A > < A
HREF="node21.html#tex2html83">< SUP > < SPAN CLASS = "arabic" > 21< / SPAN > .< SPAN CLASS = "arabic" > 9< / SPAN > < / SUP > < / A > < / DT >
< DD > In
< FONT Face = "Serif" Color = "Navy" > < I > MMA< / I > < / FONT > this will
always be channel 10.
< / DD >
< DT > < A NAME = "foot10547" > ... event< / A > < A
HREF="node21.html#tex2html84">< SUP > < SPAN CLASS = "arabic" > 21< / SPAN > .< SPAN CLASS = "arabic" > 10< / SPAN > < / SUP > < / A > < / DT >
< DD > This is a meta-event < FF
01 len msg>
2007-04-29 06:47:40 +00:00
2009-05-17 22:34:44 +00:00
< / DD >
2011-07-26 22:49:39 +00:00
< DT > < A NAME = "foot10548" > ... place.< / A > < A
HREF="node21.html#tex2html85">< SUP > < SPAN CLASS = "arabic" > 21< / SPAN > .< SPAN CLASS = "arabic" > 11< / SPAN > < / SUP > < / A > < / DT >
< DD > A Track Name (SeqName) message is set as a
meta-event with the coding < FF 03 Len Text> .
2007-04-29 06:47:40 +00:00
< / DD >
2011-07-26 22:49:39 +00:00
< DT > < A NAME = "foot10517" > ... settings.< / A > < A
HREF="node21.html#tex2html86">< SUP > < SPAN CLASS = "arabic" > 21< / SPAN > .< SPAN CLASS = "arabic" > 12< / SPAN > < / SUP > < / A > < / DT >
< DD > I discovered this
on my keyboard after many frustrating hours attempting to balance
the volumes in the library. Other programs would change the keyboard
settings, and not being aware of the changes, I'd end up scratching
my head.
2007-04-29 06:47:40 +00:00
< / DD >
2009-05-17 22:34:44 +00:00
< / DL >
< DIV CLASS = "navigation" > < HR >
2006-11-10 08:07:56 +00:00
<!-- Navigation Panel -->
2011-07-26 22:49:39 +00:00
< A NAME = "tex2html725"
2006-11-10 08:07:56 +00:00
HREF="node22.html">
< IMG WIDTH = "37" HEIGHT = "24" ALIGN = "BOTTOM" BORDER = "0" ALT = "next" SRC = "next.png" > < / A >
2011-07-26 22:49:39 +00:00
< A NAME = "tex2html723"
2006-11-10 08:07:56 +00:00
HREF="mma.html">
< IMG WIDTH = "26" HEIGHT = "24" ALIGN = "BOTTOM" BORDER = "0" ALT = "up" SRC = "up.png" > < / A >
2011-07-26 22:49:39 +00:00
< A NAME = "tex2html717"
2006-11-10 08:07:56 +00:00
HREF="node20.html">
< IMG WIDTH = "63" HEIGHT = "24" ALIGN = "BOTTOM" BORDER = "0" ALT = "previous" SRC = "prev.png" > < / A >
< BR >
2011-07-26 22:49:39 +00:00
< B > Next:< / B > < A NAME = "tex2html726"
HREF="node22.html">Patch Management< / A >
< B > Up:< / B > < A NAME = "tex2html724"
2006-11-10 08:07:56 +00:00
HREF="mma.html">Reference Manual< / A >
2011-07-26 22:49:39 +00:00
< B > Previous:< / B > < A NAME = "tex2html718"
HREF="node20.html">Variables, Conditionals and Jumps< / A > < / DIV >
2006-11-10 08:07:56 +00:00
<!-- End of Navigation Panel -->
< ADDRESS >
2007-04-29 06:47:40 +00:00
bob
2011-07-26 22:49:39 +00:00
2010-11-07
2006-11-10 08:07:56 +00:00
< / ADDRESS >
< / BODY >
< / HTML >