═══ 1. MidiLab/2 ═══ MidiLab/2 is a sixteen-track MIDI data manager with built-in edit and file management capabilities for use in recording, editing, and playing a musical performance with MIDI compatible equipment. MidiLab/2 features four primary functions: Record, Overdub, Playback, and Track Edit. These, and the other supporting functions, are selected from the main window controls. MidiLab/2 supports the basic functions of the MIDI 1.0 File Specification, with a few exceptions noted in the MIDI File Format section. There are no special hardware nor software requirements other than a Roland MPU-401/IMC/IPF MIDI Processing Unit (or compatible equivalent), and the appropriate MIDI sound equipment. MidiLab/2 runs under OS/2 Version 2.0 or later. While a musician unfamiliar with computers should be able to quite easily use MidiLab/2 as a multi-track recorder, its full capability cannot be realized without a reasonable knowledge of MIDI concepts and terminology, as well as a basic knowledge of general computer operation. The reader is assumed to have some familiarity with MIDI-compatible equipment, and to have made at least a perfunctory scan of the MPU-401 reference information to be aware of its role in a MidiLab/2-based music system. For details of the MidiLab/2 main window, select from the list below: o Track List o Play o FastFwd o Pause o Record o Overdub o Re-Take o Notes-Off o Sys Reset o Beat, Tempo, and Measure windows o Track Editor For basic MIDI concepts select: - MIDI Tutorial ═══ 2. Track List ═══ This main part of the display shows information related to the status of the sixteen tracks. The data represents track size, current content, channel assignment, index value, and name. The File Name is presented in the window title. The file name will remain anonymous (untitled) until you assign one during a Save operation. Size This column shows the size (capacity) of each track. This size is stored in MLABPM.INI and can be changed by double-clicking on the size field you wish to modify. Note that once it is modified, MidiLab/2 must be restarted in order for the change to take effect. Content This column shows the current contents of each track, in bytes. At a minimum, each track will contain the MPU end-of-track mark (252) preceded by a timing byte, so its content will always be at least 2. Double-clicking this field will invoke the Track Edit facility. Ch (Track-to-Channel Assignment) The MIDI channel to which each track is assigned, is displayed in this column. At start-up time, each track is assigned a default channel number of '0'. Double-clicking this field will provide the means to assign a channel. Index This column displays the sixteen track index counters. These counters are used internally to control the positioning within each track, and externally to provide you a real-time view of track activity, to monitor the playback and record activity. This can be especially useful in determining how much track space remains during recording, or, while play is in progress, to assist in locating an area of a track for editing. Keep in mind that this column represents the value of the index counters, and not the contents of the tracks. Double-clicking this field will allow you to completely erase the track. Name This column is used to provide space for assigning your own titles or names to each track. You may enter up to 16 characters per name. When MidiLab/2 is first started, all tracks are set to "anon.", meaning anonymous or unnamed. These fields are also set by MIDI Meta-events 3 and 4 if they are encountered during playback. Double-clicking a field will provide the means to name a track. ═══ 3. Beat, Tempo, and Measure windows ═══ During record and play, the beat count is displayed, with the first beat of a measure highlighted. Additionally, a visual metronome is displayed to help you keep track of the tempo. The measure counter tells you which measure you are in as you record or playback. ═══ 4. Play Pushbutton ═══ Normal playback is initiated by pressing the Play pushbutton. Any combination of the sixteen tracks can be played, whether or not they contain any data. Playback completes normally when all selected tracks reach their end-of-track marker. When MidiLab is first started, all sixteen tracks are automatically selected for playback. All or any combination of the sixteen tracks may be subsequently selected from the main control panel. Your selection will be remembered and indicated, by highlighting, on the main display until you change it again. The tempo is initially set according to the song profile when a song is loaded from disk, and can be subsequently changed during playback from the main control panel. The transposition and velocity adjustments may also be set or reset in the same way. Interrupting and resuming playback Whenever the || Pause pushbutton (or right mouse button) is pressed during playback, a pause function takes place and playback is suspended. If Pause is pressed again, playback will resume from the point of interruption. The duration of playback, in minutes and seconds, including any time spent in 'pause', may be displayed at normal completion in the Monitor window. Starting playback at a selected point in the song You may choose to start the playback process at some point other than the beginning of the song. This is done by specifying the number of the measure at which you wish to begin. The tracks are then positioned to this measure and playback proceeds normally. Specify this number on the main control panel. Note: The Play and Pause buttons are duplicated on the MidiLab/2 main control panel. ═══ 5. FastFwd Push Button ═══ This button is used to rapidly advance through the song file, measure by measure, as long as the button is held down. When the button is released, playback will start (or resume) at the currently positioned measure. The measure indicator is updated as fast-forwarding is in progress. ═══ 6. Pause Pushbutton ═══ Used to interrupt playback. If pressed again, playback will resume at the point of interruption. Note: This button function is duplicated on the MidiLab/2 main control panel. ═══ 7. Re-Take Pushbutton ═══ This button facilitates previous track and option selections. When it is pushed, a short-cut takes place and whatever Record/Overdub setup you used previously, including the track selection, number of measures to record, and times to repeat will be automatically placed in effect. This will provide you with a quick restart capability when re-recording a track. Note: This button function is duplicated on the MidiLab/2 main control panel. ═══ 8. Notes-Off Pushbutton ═══ This button is available if one or more notes or other MIDI events become "stuck" during play or edit operation. The most common example of this is when a Note-On event is issued without a corresponding Note-Off. In addition to issuing the MIDI "ALL NOTES OFF" command, it also issues a sustain-release to all channels in case a sustain-down is inadvertently left active. Note: This button function is duplicated on the MidiLab/2 main control panel. ═══ 9. Sys Reset Pushbutton ═══ This button will cause a general reset to the entire MidiLab/2 system, and return it to the same state as when it was initially loaded. The only settings that are unaffected are the MIDI Format, MIDI-Thru, External Control, and 8th-Note Click. Note: This button function is duplicated on the MidiLab/2 main control panel. ═══ 10. Product Information ═══ This panel shows general information about MidiLab/2. ═══ 11. File Manager ═══ All song files are loaded and saved using the controls on this panel. Select a directory and then a file from within that directory. All files in the selected directory will be displayed, whether or not they contain MIDI data. Double-click on the file to load it. For a detailed description of each control, select from the following list: o Load o Save o Delete o MIDI File Format o Track Text Display ═══ 12. Load song file ═══ Load a file by first selecting one and then pushing this button, or double-click on a file in the file window. ═══ 13. Save song file ═══ Select a file in the file window, then press this button to save it. If the file exists, you will be prompted to overlay it or abandon the task. ═══ 14. Delete song file ═══ Select a file in the file window, then press this button to delete it. You will be prompted to confirm the delete or to abandon the task. ═══ 15. Save as MIDI format 1 ═══ By default, files will be saved in the MidiLab/2 native file format. However, they can also be saved in standard MIDI format by checking this box. MidiLab/2 conforms to the Standard MIDI Files 1.0 Format 1 specification dated July 1988. It will read 1.0 files produced on different systems, but may not necessarily support all defined features which may be present. A file can be loaded from either format, and stored in the opposite format without any loss of function (see File Compatibility below). The native format is more efficient and should be used during development of a song, prior to exporting it as a standard file. The following features of the 1.0 Specification are supported and will be handled as described. o Track format 1 Format 1 supports a maximum of sixteen tracks, plus one containing tempo and time signature data. Additional ones are ignored. o Metrical time division Time bases (ticks per quarter-note) can be 48, 72, 96, 120, 144, 168, or 192. If a time base other than the ones listed is present, it will be adjusted as closely as possible to the above. The tempo may have to be changed in some cases. Note: SMPTE and other time-code based time are not supported. o Supported Meta-events - X'01' - General text - X'03' - Sequence/Track name - X'04' - Instrument name - X'05' - Lyric text - X'06' - Marker text - X'07' - Cue Point - X'20' - MIDI Channel prefix - X'2F' - End-of-Track This event only exists on disk files. It is stripped off when the file is loaded and replaced with the MPU-401 End-of-Track message ($FC); it is added to the end of each of the sixteen tracks when the file is saved. - X'51' - Set Tempo - X'58' - Time Signature (only the numerator portion) - X'7F' - MidiLab/2-Specific The MidiLab/2 track orders are implemented as sequencer-specific meta-events. The first 16 characters of Sequence/Track name and Instrument name will be placed in the associated MidiLab/2 track name window. When a file is loaded, track 1 is pre-scanned for any meta events so as to set tempos, etc. on initial load. Meta-events occurring in other tracks are processed as they are played. MidiLab/2 uses two types of file extensions to indicate how the the file was stored: o filename.ML - Native MidiLab/2 format o filename.MID - MIDI 1.0 format ═══ 16. Display track text during Load ═══ When a song file is loaded, and this box is checked, any text meta-events embedded in the tracks will be displayed as they are encountered, as an aid to understanding the nature of the file. These include such defined Meta-Events as Cue points, Markers, Lryics, etc. These are normally ignored to speed up the loading and playing process. ═══ 17. Main Control Panel ═══ All of the main MidiLab/2 control functions are located on this panel. Select from the following list for a detailed description of each control: o External Control o Velocity Leveling o MIDI-Thru o Metronome o Eighth-note click o Meter o Transpose o Tempo o Sync Source o Filter o Play Tracks o Starting Measure o Measures to play o Loop Sequence o Auxiliary Control Buttons ═══ 18. Velocity Leveling ═══ This command toggles the Velocity Leveling function. Velocity leveling is the "smoothing out" of the note-on velocity in a musical sequence. o During recording: If Velocity Leveling is active, the velocity value for all notes is forced, or leveled, to a uniform value. This leveled value is equal to 64 plus or minus the velocity adjustment setting. For example, if the velocity adjustment is set to -1, the resultant velocity for every note will be 63. o During playback: Velocity Leveling can be used to force a uniform velocity even though the track was recorded with varying velocity. As in recording operations, the velocity adjustment facility can be used to add or subtract from the base value of 64. The original track data is unchanged. If a permanent change is required, the EDIT 'Modify' command can be used. Note that only those tracks that are ENABLED are affected. ═══ 19. External Control ═══ MidiLab/2 can control, or be controlled by, external devices (such as drum machines) which transmit and/or receive the MIDI real-time messages START, STOP, and CONTINUE. The chart below shows the real-time messages generated by the applicable MidiLab/2 functions, while the next chart describes the actions taken by MidiLab/2 in response to receiving them. ┌────────────┬────────────┬────────────┬────────────┐ │ │Start │Stop │Continue │ ├────────────┼────────────┼────────────┼────────────┤ │Start │X │ │ │ │Rcrd/Ovdb │ │ │ │ ├────────────┼────────────┼────────────┼────────────┤ │Stop │ │X │ │ │Rcrd/Ovdb │ │ │ │ ├────────────┼────────────┼────────────┼────────────┤ │Start Play │X │ │ │ ├────────────┼────────────┼────────────┼────────────┤ │Pause Play │ │X │ │ ├────────────┼────────────┼────────────┼────────────┤ │Resume Play │ │ │X │ ├────────────┼────────────┼────────────┼────────────┤ │Play Done │ │X │ │ └────────────┴────────────┴────────────┴────────────┘ ┌───────────────┬───────────────┬───────────────┬───────────────┐ │ │Start │Stop │Continue │ ├───────────────┼───────────────┼───────────────┼───────────────┤ │Standby │Start Rcrd/Odub│ │Start Rcrd/Ovdb│ ├───────────────┼───────────────┼───────────────┼───────────────┤ │Rolling │ │Stop Rcrd/Ovdb │Stop Rcrd/Ovdb │ ├───────────────┼───────────────┼───────────────┼───────────────┤ │Idle │Start Play │ │ │ ├───────────────┼───────────────┼───────────────┼───────────────┤ │Playing │ │Stop Play │ │ ├───────────────┼───────────────┼───────────────┼───────────────┤ │Pause │Start Play │ │Continue Play │ └───────────────┴───────────────┴───────────────┴───────────────┘ The real-time facility is switched on and off by the External Control checkbox. When MidiLab/2 is first started, it is normally off; however, an argument (/X) can be passed to MidiLab/2 at start-up time. The setting of the external control (on/off) is stored in the song profile. MidiLab/2 also provides capability to synchronize itself with an external clock. The Sync Source controls are used for this option. The MIDI Song Position Pointer message is sent when playback is started at a point beyond the beginning of a song, to allow other devices to set themselves to the corresponding point. MidiLab/2 also responds to incoming Song Position Pointers from other sources. ═══ 20. Metronome ═══ The MPU audible metronome is turned on or off by this control. ═══ 21. Eighth-note click ═══ The metronome is toggled between sounding quarter or eighth notes. Internal timing values, including the track data timing bytes, are not affected. ═══ 22. MIDI-THRU ═══ The MPU-401 MIDI-THRU function is enabled, the MIDI message 'OMNI MODE ON' is sent to all 16 channels, and the CLEAR PLAY MAP command is issued. MIDI-THRU allows any data appearing at the MPU-401's MIDI-IN port to be passed to its MIDI-OUT port. MIDI-Thru can also be used to clear "stuck" notes, since it generates an 'ALL NOTES OFF' message. OMNI mode may be useful in allowing you to play several MIDI devices with the same track information without having to re-assign channels. Note: Not all devices respond to OMNI mode messages. Check the owner's manual for your specific equipment. ═══ 23. Meter ═══ This control sets the time signature as number of beats per quarter note. ═══ 24. Transpose ═══ This is a numeric value which in effect transposes the key of the song during playback. As an example, if a song were in the key of C, a transposition value of -2 would take it down two half-steps to the key of B-flat. See the section on recording operations for special use of this facility. ═══ 25. Tempo ═══ The tempo can be changed during playback or recording and will be set according to the song profile if a song is loaded from disk. The transposition and velocity adjustments may also be set or reset in the same way. ═══ 26. Sync Source ═══ These radio buttons are used to select the synchronization source. When MidiLab/2 is first started, the Internal sync mode is in effect. This means the MPU-401 is the master controller for the system. When the Tape button is selected, FSK (Frequency Shifted Key) sync mode is entered, meaning the system will be sync'ed from an external tape machine. Selecting MIDI allows an external MIDI device, such as a drum machine, to provide the sync. (Insure that this device is connected to MIDI-IN of the MPU-401) Refer to the MPU-401 reference manual for additional information on the sync options. Note: The MidiLab/2 metronome adjustment is disabled when an external sync mode is in effect, since the metronome is under control of an external device. ═══ 27. Filter ═══ Permits selective filtering of MIDI control information. There are four settings: the first three (ALL, NONE, and AFTC) apply to continuous controls during recording operations, and the last (PGM) applies to program/voice changes during playback. "Continuous" controls are those MIDI messages such as Pitch-bend, Modulation, and Channel after-touch. When MidiLab/2 is first started, all continuous controls are filtered, or disabled (ALL). Program changes are not filtered in this state. NONE means that nothing is filtered (NONE). AFTC will allow everything to pass except Channel After Touch. PGM will filter program/voice changes, as well as all continuous controls. ALL will return things to their initial state, i.e., everything is filtered except for program changes. Note: ALL, NONE, and AFTC apply only to the track being recorded, while PGM applies to all tracks being played. ═══ 28. Play Tracks ═══ These controls permit switching of the following functions on individual tracks: o Solo Allows one or more tracks to be solo'ed during playback o Activate Track(s) Allows which tracks are selected for Playback. o Enabled Tracks The tracks affected by the Transposition, Velocity, and Quantization adjustments during playback are controlled by the Enable/Disable function. You may allow (Enable) any combination of tracks to be affected by these adjustments, and the combination will be saved in the Song Profile. The ALL buttons for each of the above are used to save time by quickly setting all tracks on or off. ═══ 29. Starting Measure ═══ You may choose to start the playback process at some point other than the beginning of the song. This is done by specifying the number of the measure at which you wish to begin. The tracks are then positioned to this measure and playback proceeds normally. ═══ 30. Measures to play ═══ You may choose the number of measures to play. This number is offset from the Starting Measure value. Playback will be paused when the specified number of measures has been played. The default value is 9999, the highest possible option. ═══ 31. Loop Sequence ═══ The sequence defined by Starting measure and Measures to play will be repeated indefinitely if this box is checked. Note: If an extremely short sequence is looped, it may be necessary to un-check the Loop Sequence control as the only means of stopping Play. The setting of this option is saved in the initialization file. ═══ 32. Auxiliary Control Buttons ═══ These four buttons, along with Sys Reset, are duplicates of the corresponding buttons on the MidiLab main window, and are placed here for convenience. ═══ 33. Utilities - Bulk Dump/Restore ═══ MidiLab/2 provides for saving and restoring system exclusive data from attached MIDI devices. This information is saved as track data; i.e., up to sixteen tracks worth of Sys-ex information can be named, saved, and restored much the same as normal song data. Note: An individual track must contain either Sys-ex data or MIDI music data; however, Sys-ex tracks can co-exist with music tracks in the same file. Normally, if data is to be transmitted from the MIDI device to MidiLab/2, a manual operation must be initiated. Usually this takes the form of a button, on the control panel of the device, which causes a sys-ex transmission to take place. In other words, MidiLab/2 does not automatically solicit sys-ex information; it simply is placed in 'listening' mode, and waits for data to arrive. However, it's possible to solicit sys-ex data if the device matches one of those in the Dump Request window. When Receive is pressed, a pre-defined request is sent to the MIDI device causing a dump to be automatically sent to MidiLab/2. The Dump Request window should be set to None if no matches exist for your personal equipment. A Send, or Restore, function causes the contents of a selected track to be transmitted to MIDI OUT, and will be received by the device from which it was originally sent. It cannot be re-channeled to a different destination. The MidiLab/2 Sys-ex support is intended to provide a convenient means of 'backing up' the information stored in your keyboards, drum machines, etc., and as such no editing facilities are provided. ═══ 34. Secondary Control Panel ═══ This window contains additional controls, normally used less frequently during operation. For details of each control, select from the list below: o Velocity Adjustment o Lead-in Measures o Time Base o Quantize o MPU Command o Disable Measure Timing ═══ 35. Velocity Adjustment ═══ This adjustment provides for varying the velocity factor associated with all notes in a song. During playback, it effectively increases or decreases the force with which a key was originally struck. During recording, if velocity leveling is active, it is used to add or subtract from the base value of 64 to force a uniform velocity for all notes. ═══ 36. Lead-in Measures ═══ Type in the number of 'lead-in' or 'countoff' measures you wish before recording commences. It can be any number from 0 to 8. ═══ 37. Time Base ═══ The MPU time base is set by this function. The number represents PPQ's (pulses per quarter note), and as such determines the resolution of the musical notes and other events. If a song is loaded from another source, which has a time base other than that supported by the MPU-IMC, MidiLab/2 will attempt to approximate it as best it can. ═══ 38. Quantize ═══ The MidiLab/2 quantization function corrects imprecise note timings you may play while recording a track. In other words, if you play a quarter note a small amount ahead of or behind the exact beat, the timing can be adjusted to force the note to fall exactly on the beat. Quantization takes place after a track is recorded. It can be employed during playback; in this case the notes are quantized "on the fly", and the original track data remains unchanged. The Edit 'MODIFY' command provides a means of permanently altering the quantization of a track. You may select several quantize values, each of which represents the fastest note you will be playing. For instance, if quantization is set to 1/8, you can play any notes up to and including eighth notes. If you try to play sixteenth notes, they will not be recorded properly. The available values are 1/4, 1/6, 1/8, 1/12, 1/16, 1/24, and 1/32, with the one selected shown highlighted in the list. Use the metronome and play as accurately as possible. Gross errors in timing can not be corrected, and will produce an error message. Quantization should be used with discretion; certain patterns of music tend to sound "mechanical" if everything is perfectly timed. ═══ 39. MPU Command ═══ This facility provides a means of directly executing MPU-401 commands. It can be used to override MidiLab/2 default settings, as well as allowing access to features of the MPU not used by MidiLab/2. Commands and/or data may be entered in hexadecimal by prefixing a '$' to the value entered. Only one data byte may be entered per command. For those commands which receive a data byte ($A0 - $AF), the byte is displayed in the Data field. This facility is provided as a convenience to the technically oriented user. It is not necessary for normal MidiLab/2 operation. Care must be used when issuing commands; it is possible to "hang up" the MPU-401 if an improper command sequence is issued, necessitating a power off/on at the computer to clear the condition. Refer to the MPU-401 Technical Reference Manual for details of the commands and switch settings that are available. ═══ 40. Disable Measure Timing Check ═══ Each beat of a measure contains a number of clock pulses equal to the current MPU-401 timebase. Therefore, a song with a time signature of 4/4 and a timebase of 120, for example, must contain a total of 480 clock pulses for each measure. This total is verified at the end of each measure during playback for each active track. If an error is detected, a message will appear indicating the erroneous timing total. This check may be disabled by checking this box. ═══ 41. Set up Record/Overdub ═══ Recording consists of selecting the Record or Overdub buttons (or by pressing the 'R' or 'O' keys, respectively) and selecting one of the 16 tracks. The functions are similar except that during Overdub, all other active tracks will play during recording. Enter the number of measures you want to record, which can be any number from 1 to 32000. You may enter 0 (zero) to record in a 'rubato' fashion, with no regard to measures, in which case the metronome will not be started. The tempo window is updated at each measure to provide a dynamic display of tempo variations, if any. Enter the number of times you want the recorded passage to be repeated. Any number from 0 to 254 may be used as a repeat count, and a MidiLab/2 track-transfer order will be automatically appended to the recorded material. After the track has been selected, a "standby" will be presented to give you time to make final preparations for your take. When ready, select Start Recording to begin recording. If the metronome is running at the time recording is started, MPU-401 Measure-End marks will be inserted into the track along with the other musical information, so that subsequent editing can take place on a measure-by-measure basis. The metronome makes a different sound while recording is in progress, as compared with the sound it makes at all other times. The accent pattern of the beats is varied to allow for easier tempo correlation by the performer. Recording will continue until either the Stop Recording function is invoked or the pre-requested number of measures has been recorded. The recording will end, and, if the Monitor is active, the duration in minutes and seconds will be noted. If the metronome was running, recording will stop at the end of the current measure, and the metronome will be silenced. Lead-in/Countoff If the metronome is running at the time recording starts, a countoff takes place before recording actually begins. The number of lead-in measures can be adjusted from 0 to 8, from the secondary control panel. It is set at 1 normally. The metronome will begin a different pattern of accented sounds, to help "feel" the lead-in. Recording begins exactly on the downbeat of the bar following the lead-in. "Pick-up" notes played during the countoff are not recorded. This includes any anticipatory notes which may tie into the first measure. If these notes are desired, it is necessary to use an additional measure, after the countoff, to accommodate them. If the metronome is NOT running at the time the Start Record button is pressed, recording begins immediately. Re-using previous track and option selections Pressing the Re-Take button causes a short-cut to take place and whatever setup you used previously, including the track selection, number of measures to record, and times to repeat will be automatically placed in effect. This will provide you with a quick restart capability when re-recording a track. Creating 'shadow notes' The Transposition adjustment, on the main control panel, has a special function when used during recording. Its use will result in automatically producing a second note for each note that is played. This new note will be displaced from the original by the transposition factor, and the original note will be retained. One useful effect of this feature is being able to record octaves while playing only single notes. In other words, setting the transpose value to +12 will create an extra note one octave higher in addition to the one actually being played. The velocity value of the shadow note will be the same as the original, including any leveling adjustment. When the transpose factor is zero, this function is disabled. Note: The track must be enabled by checking the appropriate box on the Main Control Panel. Input Channel Selection Any or all of the 16 channels may be activated to supply input during recording. Press the desired checkboxes to select or de-select channels. The ALL button may be used to force all channels on or off. ═══ 42. Utilities - Send Program Change ═══ Enter the program or voice number (1 thru 128), select the MIDI channel to which it is intended, and then press Send. Note: There must be at least one inactive track available in order to perform this function. ═══ 43. Channel Assign ═══ The MidiLab/2 track to channel assignment facility, invoked by mousing the Ch column on the main display, can be applied to a variety of recording situations. When MidiLab/2 is started, all channel assignments are set to zero. This means that no 're-mapping' is done during recording and/or playback. As an example, if track 4 is assigned to channel 12, any information recorded on track 4 will be forced (permanently) to channel 12. During Playback, however, regardless on what channel the track was recorded, it can be temporarily re-mapped to any other channel you wish, again using the ASSIGN control. Each of the sixteen tracks can be assigned to any of the 16 MIDI channels that your equipment can be set up to receive. Also, more than one track can be assigned to the same channel for additional merging capability. Note: Meta-event $20 will assign channels automatically if encountered during playback. The assignments are stored in the song profile, and recalled and activated whenever a song file is loaded. ═══ 44. Name Track ═══ This control, invoked by mousing the track name field on the main display, allows you to apply a name of your choice, of up to 16 characters, to each of the sixteen tracks. It performs no internal function, but serves as a helpful aid in identifying the track contents as you are composing or recording. The names are saved along with the song and will remain there until the track is erased. At this time the name will be set back to "anon." (anonymous) as it was originally. The track name fields are also set by MIDI Meta-events 3 and 4 if encountered during playback. ═══ 45. Set MPU Trace options ═══ Data and commands to and from the MPU-401 may be traced during operation. Select one or more of the options to provide a trace of the selected activity in the Monitor window. Certain lines of the trace are preceded by a special symbol to aid in identifying the type of trace. The options and their symbols, where applicable, are: Commands () MPU commands issued by MidiLab/2 are displayed as they are executed. Command ACKs () The acknowledgement of a previously issued command is displayed. Outgoing data () MIDI data going to the MPU is displayed as a series of MIDI events, consisting of the timing byte and channel information. Incoming data This checkbox has three states: 1. Off - No input trace. 2. Checked () - MIDI data arriving from the MPU is displayed as a series of MIDI events, consisting of the timing byte and channel information. 3. Filled - The interface to the device driver is monitored. This shows the the number of MIDI bytes delivered, the return code from the DosRead, and the buffer high water mark (HWM) indicating the largest number of data bytes yet delivered per single call. Command Stacker () If an MPU command cannot be executed immediately because of heavy data traffic, the command is placed on a FIFO stack for sebsequent execution. There is room enough for 30 commands to be stacked. If this is exceeded, an overflow message is issued and MidiLab/2 must be restarted. The high water mark (HWM) of the stack is displayed. A checkmark appears next to your selection when the selection is active. The trace facility may also be invoked when MidiLab/2 is initially started, by specifying a command line argument of /T. ═══ 46. MidiLab/2 Editor ═══ The MidiLab/2 Track Edit facility is invoked by double-clicking on the Content field in the main window. The resultant panel provides all Edit functions for the selected track. One or more tracks may be edited simultaneously. MidiLab/2 provides for extensive manipulation of the recorded track data. These facilities can be used for a variety of reasons, including error correction, rephrasing song passages, changing notes and/or their duration, looping short sequences, and inserting repeat bars. The MidiLab/2 editor allows you to examine the details of a recorded track of MIDI data in real time. Each event is presented on the screen showing its timing data and associated parameters, while, at the same time, it can be heard through an audio playback system. For example, a note-on event shows the timing, note, and the velocity with which it was originally played. Each event is presented, step-by-step. Warning: During edit, it is your responsibility to insure that the MIDI data stream remains intact. It is possible to modify data at any point; however, close attention must be paid to event timing bytes to insure against losing any quantization, particularly when inserting or appending data. For this reason, it is recommended to use the 'measure-end' events as markers for these functions. Use of the metronome during recording will cause the measure-end markers to be inserted into the musical data. Error conditions Incorrect editing of the track data may result in an error message during Playback or Edit. When this occurs, information will be presented to you indicating the track in error, and the index at which the error was detected. If normal Playback was in effect, it will be immediately terminated. The following types of errors are possible: 1. Event Data Error This means an incorrect sequence of MIDI status and/or data has been detected. MidiLab/2 will attempt to analyze the error and send a correct data byte in place of the faulty one in order to complete the event. You should save any song data you had been recording, because, in some rare instances, the error may not be recoverable; that is, the MPU-401 may "hang up", necessitating a power off/on at the computer to clear the condition. 2. Measure Timing Error Each beat of a measure contains a number of clock pulses equal to the current MPU-401 timebase. Therefore, a song with a time signature of 4/4 and a timebase of 120, for example, must contain a total of 480 clock pulses for each measure. This total is verified at the end of each measure during playback for all active tracks. If an error is detected, a message will appear indicating the erroneous timing total. This error check may be disabled by a checkbox in the secondary control panel. For a description of the controls select from the following list: o Event List o Event Spin Buttons o Edit Push Buttons o Edit Clipboard o Play Sequence ═══ 47. Event List ═══ The event list box shows each MIDI event in the track, formatted in such a way as to represent each component of the event. The index of the event, or its displacement into the track, appears as the first column on the left side of the event list. The second column (T') represents the delta time associated with each event. The remaining information is particular to the type of event. One or more events can be selected for processing by the Edit controls. When an event is selected, and the Send Event checkbox is checked, the event is transmitted, via MIDI, to the channel assigned to the track being edited. Refer to Play Sequence for additional information. ═══ 48. Event Spin Buttons ═══ The three spin buttons are used to modify specific components of an event. Their function takes on different meanings depending on what type of event is selected. Headings appropriate for the selected event appear for each button. The values and ranges are set as required. ═══ 49. Event Push Buttons ═══ The pushbuttons are used to perform the edit functions. Most of them are disabled until one or more events have been selected. The function of each button is described below. Copy Copys marked item(s) to MidiLab/2 clipboard. Cut Copys marked item(s) to MidiLab/2 clipboard, and then deletes them from the list. Delete Deletes all marked items. Paste Pastes the contents of the clipboard into the track at the point following the current marked item. Start Block Used to define the start of a block. After a mark has been selected, the next location marked will define a displacement, either prior to, or after, the original mark. Useful for marking large sections of track data, when it is too far to drag the mouse. Mouse button 2 can also be used for this function. Mark to End This button provides a fast way to mark a section of track data from the current marked item to the end of the track. Insert Inserts new track data as selected from the Insert dialog box. See the help information provided there. Modify Modifies the marked block according to the settings of the transpose, velocity, and quantize adjustments. Save Saves the current edit data into the track. Done Exits the editor. All Notes Off Sends the MIDI message ALL_NOTES_OFF and sends a Release-Sustain to all 16 channels. Clear Track Clears the entire track to an empty state. ═══ 50. Edit Clipboard ═══ The MidiLab/2 clipboard is used to hold selected events for subsequent use in a Paste operation. It can be displayed by marking the Show Clipbrd checkbox on the Edit panel. Once displayed, it can be removed from view by either selecting the Hide Clipboard pushbutton on the clipboard panel itself or by re-marking the checkbox on the Edit panel The clipboard can be scrolled if the data exceeds the window size. ═══ 51. Play Sequence ═══ The track being edited can be played by marking a block and then pushing the  button. The block will be played until it ends, or can be stopped by pushing ||. The Move Banner checkbox can be used to display the selection banner as the events in the track progress. The trade-off is one of performance versus the convenience of being able to locate the events as the track is playing. While the sequence is playing, if the Step-play checkbox is selected, the automatic advance will stop, and you must then press the '+' key to advance to the next event. This facilitates listening closely to the resultant audio, and picking up errors in the recorded MIDI data. ═══ 52. Edit Insert Functions ═══ This panel provides several means of inserting new data into the track. Data are inserted at the point following the current mark. For a description of the available types select from the following list: o Track Events o Track Orders ═══ 53. Insert Track Event ═══ Track events are a subset of standard MIDI events which conform to MIDI specifications. Program change Inserts a MIDI Program Change channel event into the track. Meta Text Inserts text for a MIDI 1.0 Text or Cue Point meta event. Generic Event This dialog box may be used to insert any MIDI channel event or MPU Mark, so long as the basic rules of parameter range are not violated. It affords the lowest possible level of control; you are responsible for the exact configuration of each byte in the event. TBA To Be announced ═══ 54. Insert Track Order ═══ Track Orders are MidiLab/2 proprietary events which serve to perform special functions in the track. Transfer Provides a means of looping a section of track data for a desired number of times. The index of the target event is specified, and must precede the location of the Transfer. Rest Inserts a specified number of measures of rest. Initiate This function allows you to start one or more inactive tracks from a point in the current track during play. Command An MPU command, Transpose adjustment, or Velocity adjustment may be inserted into the track for dynamic control during play. ═══ 55. Utilities - Remote Control ═══ Selected MidiLab/2 functions can be controlled from a remote MIDI device. The functions of Play, Pause, Re-take, Start-record, and Stop-record can be invoked by any standard MIDI function such as a key, sustain pedal, program-change button, etc. All of the Remote Control functions are located on this panel. Select from the following list for a detailed description of each item: o Functions and Events o Capture o Disable Remote Control o Done/Cancel ═══ 56. Set Track Size ═══ The track size may be changed to accomodate larger then normal files, or to provide a finer control on storage usage. Enter the number of bytes you want the track to hold. The range of the number must be from 1000 to 999999. After the change is made, MidiLab/2 must be restarted to allow the new value to be placed in effect. ═══ 57. Functions and Events ═══ This group of buttons is used to set up a control event for capturing. Select the one you wish to set up and then select Capture. A description of the associated MIDI event is displayed adjacent to the button. Play and Re-take are identical in function to the push buttons in the MidiLab/2 main window; however, Pause/Start/Stop serves as a multifunction control. If a song is playing, the normal pause function is invoked. If Record/Overdub standby is in effect, the control will cause the record count-down to begin. Finally, during recording, the control will cancel the record function. ═══ 58. Capture ═══ To capture an event to be used as a control event, select the radio button corresponding to the desired function and then Press Capture. Then press the key or control button on the MIDI device you wish to use. A description of the captured event will appear adjacent to the selected button. From this point on, whenever the captured MIDI event is received by MidiLab/2, the corresponding MidiLab/2 function will be invoked. (assuming the remote control function is not disabled) Pressing the button again will cancel the capture operation. Note: The velocity data byte for a NOTE-ON event is not examined, unless it is a velocity of zero, indicating a note_off. In all other cases, the incoming event must identically match the captured event. ═══ 59. Disable Remote Control ═══ The Remote Control function is disabled when this box is checked. If MidiLab/2 is idle, no incoming data will be accepted. ═══ 60. Done/Cancel ═══ Select Done/Cancel to exit Remote Control setup. If a capture is pending, it will be cancelled. ═══ 61. Keys Help ═══ The following keys can be used while the MidiLab/2 main window is in control: o F2 - Toggle MIDI-THRU o F3 - Exit MidiLab/2 o F4 - Toggle Monitor window o F5 - Clear and Reset MidiLab/2 o F6 - Toggle metronome o F7 - Main Control Panel o F8 - Secondary Control Panel o F9 - File Control Panel o G - Send Program Change o J - Display jumbo measure indicator o O - Overdub o P - Play o B - SysEx bulk data utility o R - Record o S - Save current song o Numeric 1 thru 8 - Invoke Track Edit The following keys can be used while the MidiLab/2 Monitor window is active: o Ctrl C - Clear Monitor window o Ctrl T - Display Trace options ═══ 62. Disk File Access ═══ MidiLab/2 provides a service to allow access to song files as they are stored on disk. A scrollable window is presented with a list of all files within a directory which you specify. A file may be selected for loading, or it may also be erased or renamed. The window is also called by pressing Function key 9. ═══ 63. Save new file ═══ This resets the system in preparation for a new song. All controls and heading are set to their initial state. It performs the same funtion as the 'Reset' push button on the main window. ═══ 64. Load or Save song file ═══ Select a file/directory combination first, then double-click on the file you wish to load or save. Or, type in the file name at the top of the box and select the required button. Once a file is selected, it may also be saved or erased by selecting the appropriate push buttons. ═══ 65. Save song on disk ═══ Saves the track data and song profile in a file on disk. The path preceding the search pattern currently in effect is used to determine where a song file will stored. Any valid file name may be used, up to eight characters. The extension will be set to ".MID" for standard MIDI files, and ".ML" for native MidiLab/2 format. If a file by the supplied name already exists, you will receive a confirmation prompt. If you reply affirmative, it is replaced. ═══ 66. Terminate and Exit ═══ This will exit MidiLab/2, first asking you to confirm the request if there is a possibility of losing any unsaved data. ═══ 67. Utilities - Monitor Window ═══ The Monitor Window is used to display technical data during program execution. The MPU-401 operations can be traced to aid in problem analysis, and timing of record/playback sequences can be measured. ═══ 68. Close Monitor Window ═══ The Monitor window is closed. (How about that!) ═══ 69. MidiLab/2 Controls ═══ These are the control panels for all the switches and MIDI controls. ═══ 70. Main Controls ═══ All of the main MidiLab/2 control functions are located on this panel. Select the 'Help' button for more information. ═══ 71. Special control functions ═══ These controls represent specialized functions which are generally used on an exception basis. Use the HELP pushbutton for detailed information. ═══ 72. Utilities ═══ This pull-down contains functions which, generally speaking, are not part of the mainstram MIDI processing, but which have utility value in helping you navigate your way thru some of the more basic functions. ═══ 73. Bulk Dump/Restore ═══ MidiLab System Exclusive data dump and restore functions. Use the HELP pushbutton for more information. ═══ 74. Utilities - Toggle Index Display ═══ This switch allows the automatic display of the track indexes during playback operation. The main reason for having them switchable is because the index display represents a significant processing overhead, and in the case of some note-intensive songs, this could be a detriment to performnce. ═══ 75. Program Change ═══ Used to send a MIDI program change. Use the dialog HELP pushbutton for more information. ═══ 76. Remote Control ═══ This function permits MidiLab to be controlled from a remote MIDI device. ═══ 77. Font selection ═══ Font verbage.... (more to come) ═══ 78. Utiltities - Jumbo Measures ═══ This switch causes a large measure indicator to be displayed for ease of viewing when working away from the computer. ═══ 79. Command Line parameters and switches ═══ The following command line parameters can be used when starting MidiLab/2: /M This switch will cause all files to be saved in MIDI Format 1. /P A default file directory can be specified with this parameter, in case the MIDI files are located in a directory other than the default one. Specify /P=(directory name) /T This switch will permit the MPU trace to be active at start-up time. /X This switch will enable the External Control facility at start-up time. /Z This switch will force MidiLab/2 to operate in an MPU simulation mode. ═══ 80. MIDI Tutorial ═══ This section is provided to give you an understanding of the data stream and MIDI event types you will encounter when working with recorded material. It is presented in a general fashion without particular reference to MidiLab/2. The term 'command', as used below, can be related to the MidiLab/2 'event'. MIDI (Musical Instrument Digital Interface) data is transmitted by the sending and receiving of eight bits of information. These eight bits of data are sent together at one time and make up what is called a byte. Each bit can show one of two possible states, on or off (called 1 or 0). Eight bits (two raised to the eighth power) yield 256 possible combinations in the same way that normal numerical digits can form 1000 combinations by using the numbers 000 to 999 (ten raised to the third power). MIDI commands are usually composed of one, two, or three bytes of data arranged and transmitted one after another. The first byte sent is called a "status byte" (although the MIDI Spec refers to it as a "status command", in this documentation we'll call it status byte to avoid confusion). The next one or two bytes, if used, represent the "which" and "how much" parts of the command. A note-on command, for example, is comprised of three bytes, the first of which is the status byte. This byte tells the synthesizer to play a note and also supplies the channel number. The second byte in the command tells the receiver which note to play, and the third byte carries the velocity value for the note. Note: In most cases the MPU-401 prefixes each command with its own timing byte. This specifies the time quantity associated with the command. This is not, however, a MIDI specified function. Part of the MIDI structure is a protocol that was put in place to facilitate the writing of software designed to handle MIDI data. This protocol specifies that the status command byte's "significant" (leftmost) bit is always a 1. In all following data bytes the most significant bit is 0. By following this protocol, the software always knows, if the most significant bit is a 1, that this is a new command for it to begin processing on. Additionally, by decoding the status byte, the software always knows how many data bytes should follow. Being able to discern the difference between status and data bytes makes it possible to utilize a technique called "running status". Simply stated, once a particular status byte has been received (like "note-on"), the receiving instrument can continue to operate under that command until a different status byte is encountered. As an example, a burst of notes can be played by sending the first note-on with its status byte, and then followed by pairs of data bytes containing note number and note velocity, without the need to send a new status byte until it's necessary to send a new command, like pitch-bend, etc. When there are many notes being sent, utilizing "running status" can improve the overall speed by about a third of a millisecond per note which makes a significant difference. The note-off command has its own status byte as well. But needing to send a note-off command while sending many notes would cause running status to be interrupted. To avoid this, a more efficient way of doing the same thing is to send a special version of the note-off command, a note-on command with a velocity of zero. This zero-velocity note-on command can be used this way only if the sending synthesizer doesn't also send a release velocity, which uses a separate note-off status byte with its own associated velocity data. Today, however, most synthesizers do not send a release velocity. Using the most significant bit of the MIDI byte as a "status or data" flag, seven bits are left to make up 128 different combinations. This provides the ability to send note-on commands specifying any of 128 notes with 127 different velocity values (remember, that the value of 0 is used to simulate a note-off.) Having only seven bits remaining to handle pitch-bend (if you were to bend up and down 1 octave, having 128 divisions would allow for 1/5 semitone) would not be sufficient to do a good job. Thus two data words are used to provide bending control, one for coarse and one for fine control. Just as with data words, each status byte is left with seven "variable" bits, or 128 combinations. This may seem like more commands than we could ever use, but this isn't really true. Most MIDI commands belong to a group called channel messages. These commands are able to direct themselves to any of 16 possible device destinations by using four bits to define a channel number. Using four bits to specify the channel and one bit to define the status of a command, we are left with only three bits to spare, or eight combinations. Listed in numerical order, the possible types are: (1) note-off (128), (2) note-on (144), (3) polyphonic key after-touch (160), (4) controller (176), (5) program change (192), (6) channel after-touch (208), (7) pitch-bend (224), and (8) system. System commands have no channel number attached to them, so there are actually sixteen different non-channel-oriented command combinations to work with. It is beyond the scope of this tutorial to cover these, but the other seven commands will be covered in some detail. NOTE-OFF COMMAND The Note-off command is made up of two data bytes. The first specifies which MIDI note (numbered from 0 to 127) is to be affected. Remember that this number is not a frequency, it just refers to a specific key on the keyboard. For example, the number 60 refers to Middle C on most five-octave boards. The second byte is the release velocity indicating how fast you removed your fingers from the key. This might be used, for instance, to define the decay rate of each note played. Currently, the implementation for this feature is not common, although it may become less rare in the future. NOTE-ON COMMAND The note-on command contains one data byte defining the note number. The second byte, when used, carries the velocity with which each note is struck. As mentioned before, a note-on command with a velocity value of 0 is interpreted as a note-off command. POLYPHONIC KEY AFTER-TOUCH This command is used in keyboards where each key has its own pressure transducer so that you can hold down a chord and adjust the pressure applied to each note, which will generate a different response for each. Two data bytes are necessary for this command. The first defines which key is being pressed. The second defines the current pressure value. In addition to the more sophisticated keyboards having this feature, some of the new tone-generators also support polyphonic key after-touch. CONTROLLER There are two data bytes required for any controller command. The first defines which controller is being used, and the second usually gives a value for the position of that controller. Sixty-four of the possible 128 controller numbers handle the standard control devices like volume pedals, breath controllers, mod wheel, etc. This excludes pitch-bend and polyphonic after-touch as they have their own set of controller codes. Only 32 different controllers are allowed, but each can make use of two commands, a "most significant" data byte (MSB) and a "least significant" data byte (LSB), doubling the quantity of control numbers allotted for the 32 controllers. In most of these commands, the LSB is ignored because the resolution provided by two bytes isn't necessary. The common "continuous controllers" pass their generated value in the MSB. 32 more of the controller numbers are used to indicate on/off functions, like foot-switches or data entry switches. A low number (0) indicates open switch, and a high value (usually 127) shows a closed switch. As of this writing, 26 numbers are not defined. This leaves us with six numbers to send channel mode messages. These are used to change the reception mode of the receiving device, for instance, from mono to omni mode. The defined controller numbers are listed below. o (1) modulation wheel o (2) breath controller o (4) foot controller o (5) portamento time o (6) data entry o (7) main volume o (64) damper pedal (sustain) o (65) portamento on/off o (66) sostenuto o (67) soft pedal o (96) data increment o (97) data increment PROGRAM CHANGE Program Change uses a single data byte to tell the slave device to which program number to change. There is some confusion associated with this command regarding what the numbers really mean. There are many MIDI devices that use octal numbers for programming. (The digits that are used range from 1 to 8.) Most of these devices use program 11 to indicate program change number 1. Octal 11 is commonly associated at the data byte level with numeric value 0. An octal 88 is shown as program change 64 but the numeric value sent is really 63. This provides a glimpse into some of the confusions. With this exception, the command itself is straightforward. There is nothing in the specification covering what to do if the slave device has only 32 patches and receives a program change 50 command. Possibilities include wrapping and starting over, ignoring the command as invalid, or switching to the external cartridge. Some machines use the lower locations for presets and leave the higher program numbers for the user-programmable areas. This makes the user-programmable areas inaccessible to master devices with a limited range of numbers. There are, in addition, programmable outboard signal processing devices with very few MIDI program positions. Determining an efficient way to coordinate all of these inconsistencies is the difficulty. CHANNEL AFTER-TOUCH This is the common type of after-touch command. Using a single data byte, this command specifies one overall value that defines the pressure applied to the keyboard. It is sent out on the channel to which the keyboard is currently assigned and is capable of defining this value at any given time. Precise results to this command are dependent on the synthesizer receiving the command and its capabilities, as well as the current patch. Over-all volume, brightness, modulation level, LFO speed or other parameters may all be controlled by channel after-touch. PITCH-BEND Pitch-bend has its own command because of the frequency with which its used. It is distinct from the controller groups. This command uses two data byes, the first is the LSB and the second is the MSB. This provides 14 bits of resolution for pitch changes. A normal controller command would require six bytes to handle this level of resolution (a most significant byte controller command and a least significant byte controller command, each three bytes long). Using a great deal of pitch wheel motion would take up much of the MIDI cable's transmission ability (the amount of data it is capable of sending each second). Most synthesizers do not take advantage of this level of resolution but instead send the number 0 for the LSB. This then provides for 128 steps of bend. Remember that these increments cover about 1/5 semitone if you bend up or down a full octave. This is not acceptable for very slow pitch transitions, but for most bending is satisfactory. The increments are much smaller if the range is up or down a third. This, however, makes it hard to hear the discrete steps.