The above excerpt from a sequence EDIT screen shows all event types.
GFmusic Reference 130
Editor Field Values by Event Type Editor Field Values by Event Type
The following table summarizes valid field values by event. The following table summarizes valid field values by event. ___________________________________________________________
TYPE NOTE val DURAT TIME CH VEL TYPE NOTE val DURAT TIME CH VEL _________________________________________________________
External sequences are very rare in sequencers. And yet they are very
valuable. An external sequence is a sequence (track) that exists in a
separate file (song) and which is AUTOMATICALLY brought in when you
load a song. For example, if you define a sequence (track) as
external, then when you load a song, GFmusic will load the sequence
data from the file (song) where the external sequence resides.
Suppose that you have a song that consists of 100 different sequences
and that all of these sequences are drum patterns. Also suppose that
the name of this "song" is ROCKDRUM and that it also contains
sequences named PATTERN1, PATTERN2, PATTERN3...... When you create
new songs that need one of these PATTERNs you can have them
automatically loaded when you load the new song.
It is easier to see what is going on via an example. So, load song
GFDEMO3 and look at the screens while you read the following text.
GFDEMO3 is very much like GFDEMO1 except that the MAIN CONTROL
sequence will start sequence BLUES CHORDS instead of sequence CHORDS
1-12. After loading GFDEMO3, go ahead and edit sequence MAIN CONTROL
and notice the Sequence Start Event for BLUES CHORDS. It looks just
like any other Sequence Start event. Now go and edit the sequence
named BLUES CHORDS. After that, go to the EDIT PROfile screen for
BLUES CHORDS by typing in PRO on the command line and pressing enter.
On the EDIT PROfile screen notice the last 3 fields on the screen.
They are labeled :
EXT FILE NAME
BEGIN EVENT #
END EVENT #
EXT FILE NAME is the name of the song file that contains the sequence
to load and currently contains "GFDEMOEX". GFDEMOEX happens to be a
song that contains only 1 sequence (BLUES CHORDS). It could have
contained more sequences. When GFmusic was loading GFDEMO3, it
noticed that the sequence BLUES CHORDS contained something in EXT FILE
NAME. Specifically, it contained "GFDEMOEX". So GFmusic went to
GFDEMOEX and looked for sequence BLUES CHORDS When it found it, it
loaded that sequence from GFDEMOEX. Also note that EXT FILE NAME only
contains "GFDEMOEX"....i.e. a disk drive and directory is not
GFmusic Reference 140
specified so the current ones are taken. I.e. where the GFmusic
programs are located.
Now notice that you can also specify a beginning and ending event
number. These exist to load part of an external sequence. If you
want only part of an external sequence then you specify a beginning
and ending event number. If you want the entire sequence (the normal
case), then specify zero in these fields, or specify 1 for beginning
and 9999 for the ending event number. If you specify only part of a
sequence then you'll want to make sure that the ending event number is
a NULL EVENT. If not, the sequence will still be loaded but if you go
to play it you may have problems.
Normally you will specify a drive and/or directory as part of EXT FILE
NAME. In other words, you will usually have all of your External
sequences on specific disks and directories. For example, you may
have all of your External sequences on the C drive in subdirectory
\EXTERNAL. If this were the case, then all external references (EXT
FILE NAME) would begin with C:\EXTERNAL. For example:
C:\EXTERNAL\ROCKDRUM
C:\EXTERNAL\BLUEBASS.
Presumably each of these songs would contain multiple sequences
(tracks).
Don't get the idea that external sequences have to
exist in their own songs such as a "song" that
contains nothing but drum patterns. External
sequences are simply sequences (tracks) like any
other. The essence of external sequences is that
one song gets some of its sequence data from some
other song.
When you are creating a song and want to reference an external
sequence, it will initially not exist in your new song. There are two
solutions.
First, you could edit a new sequence and for a sequence name you would
supply the same name as the sequence in some other song (from which
you want to get the sequence events). When you do this, GFmusic will
create the new sequence with 15 NULL events. You would then go to the
Edit PROfile screen for the newly created sequence and supply a song
file name for EXT FILE NAME. The EXT FILE NAME will be the name of the
song from which GFmusic should obtain the sequence data for the newly
created sequence that you are currently editing. Finally, you will
END edit, SAVE the new song, and then immediately LOAD the new song.
When reloading it, GFmusic will bring in the external sequence in
place of the one you created via EDIT.
Or, you can load the sequence from the other song via the SEQUENCE
LOAD feature. Then edit the sequence and on the EDIT PROfile screen
GFmusic Reference 141
specify the EXT FILE NAME (it will be the same one as you used for
SONG NAME on the Load Sequence screen).
Remember, when you load a song that references an external sequence,
GFmusic will obtain and load the events from the EXTERNAL song file.
These events will actually be brought into memory. You can edit these
events just like any other sequence. However, when you save the song,
they are not saved anywhere....not anywhere at all. So don't think
that if you change the sequence that it will be saved to the external
song. On the other hand, one nice thing about external sequences is
that if you change a sequence that is referenced by other songs, then
when those songs are loaded, they will always get the most recent
version. In this way you can create and maintain libraries of drum
patterns, bass lines, chord progressions, program changes, synthesizer
setups, etc. When you change these songs/sequences, all songs that
reference these sequences will also obtain the changes when they are
loaded.
Please note that Default Song Directory rules
apply. For this reason it is probably best that
when you specify the name of the External
Sequence, you fully qualify the file name. For
example, "C:\DRUMS\ROCKPAT1".
Your best bet is to keep it simple and always load the entire sequence
(specify 1 and 9999 in begin and end event).
A final note..... External sequences can only be
used with the Clear memory option of Load song.
GFmusic Reference 142
UNDO UNDO
________________________ ________________________
When you perform various editing operations, you may want to "UNDO"
them. I.e. their effects may be undesirable and you want to get back
to the way things looked before you issued the command. To do this,
just put the cursor on the command line in edit, type in "UNDO", and
press enter. This will "UNDO" the last operation. For UNDO to work,
it needs an UNDO workspace. When GFmusic is first started, it will
allocate memory for this workspace if enough is available. If it is
not available, you will be notified.
UNDO works with the following commands (i.e. can UNDO their effects) :
Insert
DELete
ERASE
CHR (channelround)
LEGATO / SDT
QD/QT/ACD/ACT (Quantize)
Copy
Repeat
THIN
TV, TD, TX (Transposes)
XD, XT, XA (Expand/Compress)
After you issue one of these commands, and UNDO is active, then
issuing the UNDO command will put things back like they were before
the command was issued.
UNDO requires memory for 7000 events. If you
start running short on memory and UNDO is active,
you can turn UNDO off and free up its memory for
your sequences. Option 15 on the Main Menu.
Please note that when you issue one of the above
commands, you can scroll thru the sequence (PgUp
and PgDn, TOP, BOT) and even play from edit.
Then, if you don't like the results, UNDO it.
Also note that merely making changes in the edit
detail area will not be undone by UNDO. UNDO is
for use with the above commands only, not for
UNDOing manual changes to the edit detail area.
GFmusic Reference 143
HIDE AND UNHIDE HIDE AND UNHIDE
________________________ ________________________
When your sequences have controller events in them such as Pitch
Bends, After Touch, or Control Changes, there are often so many of
them that you can't "see" what your sequence looks like when in edit.
To see what I mean, just record a sequence with Pitch Bends, After
Touch, and/or Control Changes (mod wheel is one) in them. Don't
forget to turn off these filters when recording (on the play/record
screen). Then edit the sequence.
The first thing you'll notice is that there are many more controller
events than Note On events. And it's difficult to see whether the
Note On events are lining up on the proper boundaries (see the
Measure/Step columns on the edit screen).
But there is a way around this. You can HIDE controller events. Just
put the cursor on the Command Line (press HOME) and type in "HIDE" and
press enter. See what happens.... Now you see the sequence without
the controller events. Where are the controller events ? They are in
the UNDO workspace in their own "sequence" just as though they were
"unmerged" from the original sequence.
Since HIDE uses the same workspace as UNDO, if you
make any gross changes (e.g. Quantize) you can not
UNDO them. So, if you want make use of UNDO, just
make sure that there are no hidden events. Of
course, if you don't have enough memory for the
UNDO workspace, or if you have UNDO toggled off,
then HIDE will not work.
How do you get the controller events back? Just put the cursor on the
Command Line and type in UNHIDE and press enter. The hidden
controller events will then be merged back.
Remember, UNDO will not work if you have hidden events. Another
thing.... If you HIDE events and then make changes that will affect
the timing (such as a compress/expand command), when you later UNHIDE
the controller events the sequence may not sound as you expect. For
example, suppose your sequence has Pitch Bends and you HIDE them.
Then you compress the sequence by issuing the following command :
XA 1 9999 .5
After you UNHIDE the events, the Pitch Bends may not apply to the
notes they were originally "associated" with. Why? Because XA moved
the event times "earlier" in time but since the Pitch Bends were
hidden, they were not affected. So after you UNHIDE, some Pitch Bends
will come after notes they were previously before. Think about it.
GFmusic Reference 144
You can still use compress/expand, quantize, etc.
Just make sure there are no hidden events when you
do this. Issue the command and then hide the
events to see the impact.
GFmusic Reference 145
THIN THIN
________________________ ________________________
When you record a sequence with controller events (Pitch Bends, After
Touch, or Controller events like the Mod Wheel), the number of events
you get is usually many more than you need. Each of these controller
events takes up memory and also time on the Midi channel when you play
your song. But you can do something about it.... you can THIN these
events.
Record a sequence with controller events (such as Pitch bends). Then
edit the sequence and notice how many events there are (put BOT on the
Command Line and press PgDn). Now type in THIN and press enter.
GFmusic has just eliminated half of the controller events. Now play
the sequence and see how it sounds. It probably doesn't sound much
different. Type in THIN again and GFmusic will eliminate half of the
remaining controller events.
When GFmusic is thinning, and the result of the
THIN would completely eliminate all controller
events BETWEEN notes, then the event is not
eliminated. Also, All Pitch Bends with a value of
8192 are left alone as are After Touch and
Controller events with a value of zero. These are
the "off" positions for these controller events
and we always want to leave them in.
You can UNDO a THIN operation.
For best results, THIN, Play from edit to see if it sounds OK, and if
not, perform an UNDO. If it sounds OK, keep on thinning.
GFmusic Reference 146
PERFECT TIMING PERFECT TIMING
________________________ ________________________
Perfect Timing is a Play/Record Feature that most people will not use
but you should be aware of existence and what it is used for.
First some background. If you have a song that is particularly
complex and/or "dense", and if you are running on one of the older PCs
that run at 4.77MHz, then you may want to use Perfect Time once in a
while. What happens is this. If your song has points in it where a
lot of tracks start at the same time along with a lot of notes
sounding at that same time, then the PC may not have enough horsepower
to perform all of its tasks fast enough. What you may observe in
these circumstances is a small delay. On a "Turbo" PC, or on a
286/386 machine there is enough horsepower so that it is highly
unlikely for this to happen.
At any rate, most songs are "dead time" where nothing is happening.
What Perfect Time does is make use of this "dead time" to pre-process
the events for the Real-time Play/Record part of the code.
To use Perfect Time you do the following...
You go into Play/Record LOAD MODE where you initially have GFmusic
pre-load tracks. After pre-loading a track(s) you would normally
press ENTER and GFmusic would then start playing/recording. I.e. you
go to EXECUTE MODE. When in EXECUTE MODE you can pause, transpose,
mute, change tempo, etc. by pressing the appropriate keys on your
computer keyboard. However, to use Perfect Time, instead of pressing
ENTER to leave LOAD MODE and enter EXECUTE MODE, you press ^ENTER
(i.e. the Ctrl key and the ENTER key simultaneously). When you press
^ENTER you go to Perfect Time mode instead of EXECUTE MODE.
When you first go to Perfect Time mode, GFmusic will start processing
the events for the track(s) you pre-loaded. It interprets the events
and places them into a buffer that the actual Play/Record code will
retrieve them from. This buffer is large enough for 255 events. As
the buffer fills, you will see a counter at the bottom right of your
screen changing. This counter is the number of events placed into the
buffer. When the buffer is full, a message will appear that tells you
to press any key to start play/record. Your song will now start
playing. As the events are taken out of the buffer and sent to the
Midi Out port, another routine adds new events to the end of the
buffer. The object is to buffer events during the "dead time" of the
song (when nothing is happening). Also, in Perfect Time, the real-
time part of the code does not interpret events such as sequence start
events, or transpose notes, etc. All of that logic is performed by
GFmusic Reference 147
the "dead time interpreter." All the real-time code has to do is
send bytes out the Midi Out port at the proper time! Of course, it
has to process incoming data also but that is usually a relatively
trivial task (although you can contrive situations where it's non-
trivial).
In this way, the dead time is utilized by one set of code so that the
Real-Time code has little to do except pump out data at exactly the
right time. But there is a cost to this efficiency.
The cost is this: You can not use most play/record features from your
computer keyboard such as being able to change tempo, mute or solo
sequences, transpose pitch or velocity, etc. The only things you can
do are Process Recorded Data (the right arrow key) and reset the
record buffer to zero (left arrow key). IF YOU PRESS ANY OTHER KEY IF YOU PRESS ANY OTHER KEY __________________________
THEN GFmusic WILL DROP YOU OUT OF PERFECT TIME MODE AND PUT YOU BACK THEN GFmusic WILL DROP YOU OUT OF PERFECT TIME MODE AND PUT YOU BACK ____________________________________________________________________
INTO LOAD MODE. Also, the screen is not updated except for the INTO LOAD MODE. _______________
current measure, echo channel, and number of events in the Record
Buffer (yes, YOU CAN OVERDUB TO YOUR TRACKS THAT ARE RUNNING IN (yes, YOU CAN OVERDUB TO YOUR TRACKS THAT ARE RUNNING IN ________________________________________________________
PERFECT TIME MODE). PERFECT TIME MODE). ___________________
As your song plays in Perfect Time mode, you will see two numbers at
the bottom right of the screen changing. These are which event in the
buffer the real-time routine is currently playing, and slot in the
buffer the "dead time interpreter" is waiting to fill. Note that
during busy passages, even these numbers will not get updated. The
object with Perfect Time is to play in perfect time, not to have a
perfect display or have all features available.
Again... you pre-load the track(s) you want to start in LOAD MODE and
then press ^ENTER to take you to Perfect Time mode where those tracks
are played. Before they are played, the Perfect Time code will pre-
process the first 255 events and place them into a buffer. When the
buffer is full, you get a message, press a key, and the song starts
playing. You can overdub to the song as it plays in Perfect Time.
Note... in reality, you can press any key even before the buffer fills
and play will start... however, the buffer will not be full. If the
dead time interpreter can stay ahead of the real-time play routine
then there's no problem... if not then things will be no better than
if you used the normal play/record method. It only takes a few
seconds to fill the buffer so you are probably better off waiting.
However, it doesn't hurt to experiment.
Even with Perfect Time available to you, it's possible to contrive a
situation where the computer can not keep up with your demands. The
computer has a finite capacity.
Again, in all probability owners of "Turbo"/286/386 machines will not
ever have to use Perfect Time although as an experiment you may want
to test the limits of your machine by contriving extremely dense
sequences and running them the normal way (EXECUTE MODE) and then in
Perfect Time.
GFmusic Reference 148
GFmusic Reference 149
RUNNING STATUS RUNNING STATUS
________________________ ________________________
GFmusic can play your songs with Running Status. This is a very
important feature not found on other sequencers.
When a synth or sequencer sends a Note On or other Midi event, the
message consists of 2 or 3 bytes. The first byte is a status byte and
usually contains the Midi "command" (e.g. Note On, Note Off, etc.) and
the Midi channel. The following 1 or two bytes are the data bytes
associated with the status byte. With running status, if a status
byte is to be the same as the previously sent status byte, then the
device (synth or sequencer) can elect to omit the sending of the
status byte.
By using Running Status, you can effectively reduce outbound traffic
on the Midi connection by 30% (more when you are sending a lot of
controller data such as Pitch Bends and After Touch).
Every synth and/or sequencer should be able to respond to Running
Status correctly if they adhere to the Midi Standard.
GFmusic is initially configured with Running Status set to false (i.e.
Running Status will not be used). However, you can change GFmusic to
send using Running Status. Just run program GFCONFIG. One of the
questions it will ask you is whether you want to change the current
Running Status configuration. If you answer "Y", you can change it.
Also note that when GFmusic is started, it will display a message
stating how running status is currently configured.
To run GFCONFIG, see instructions in section 1 for
Installation - Midi Interface.
GFmusic Reference 150
SYSTEM EXCLUSIVE SYSTEM EXCLUSIVE
________________________ ________________________
With GFmusic you can record and play back System Exclusive data. Very
few Sequencers provide this capability at all. There is currently a
restriction with respect to SysEX data in that when you record it,
you can only record a maximum of 7,000 bytes of data at a time. That
is because the maximum size of a sequence is 7,000 events and for
SysEx data, each byte is recorded as an event type of DATA. This
means that in some cases you may not be able to dump your entire Synth
into a sequence. However, many synths will let you dump individual
patches as sysex data and normally these are relatively small.
Examples are the Korg 707 and the Casio CZ line of synths. This also
appears to be true of many (if not all) Yamaha synths.
In other words, in most cases, you can use GFmusic as a patch
editor... if you know what you are doing. Since each synth is
different, it is impossible to provide a general technique to use.
You will have to determine how to do this yourself. See your
reference for your particular synth.
Again, if you know what your are doing, this feature can be very
useful. On your GFmusic distribution disk, song GFDEMO1 has some
Casio CZ-3000 examples and the file GFDEMO1.NOT has some notes on what
is going on with these sequences. They should at least provide a
starting point for you.
GFmusic Reference 151
THE THE
PROGRAMMER'S PROGRAMMER'S
INTERFACE INTERFACE
________________________ ________________________
Now here is a feature that many of you programmer types will love.
GFmusic provides an interface such that you can run other programs
from GFmusic. These programs can simply be things like DOS utilities
(like copy a file), or, they can be programs that provide new commands
or Edit routines for GFmusic. This is because we provide the
documentation and hooks a programmer needs to write these routines.
You can write your own routines (in any language) or run routines
written by others.
The GFmusic Programmer's guide provides the following :