Copyright: !


Ordering Midilab

The registered version of MidiLab costs only $15, (plus $2 shipping and handling U.S, $5 overseas). You can order Midilab for Windows in one of two ways, (please click one of the options below);

1. Register the program via Compuserve's GO SWREG

2. Print a mail order form on your printer.

                                   .


Registering using SWREG

If you are a Compuserve member, GO SWREG while online. Then;

1.Select the "Register Shareware" option from the menu.

2.  When ther selection menu appears, double click on  Registaration I.D

3. In the text box enter the number 6281

4. Follow the on-screen instructions to register the program.

The cost of the program will be debited from your Compuserve account and your new program disk will follow in a few days. If you would prefer to receive the program disk via e-mail then please contact me, immediately after registering at CIS 72162,454.

Thanks for your interest in MidiLab

Chris Anthony

M.T.S Midi Workshop

                                   .


MidiLab Mail Order Form

To print this form, get your printer ready and then select

"Print Topic" from the File menu.

Name...................................................................................

Address...............................................................................

..............................................................................................

City.........................................State/Country........................

Zip/Postal Code..........................Phone..............................

I got my copy of Midilab from;.............................................

Please mail me ........... copies of MidiLab for Windows

I enclose a check* for U.S$................. ($15 per copy)

*(Please make checks payable to C. ANTHONY)

Mail to:

M.T.S Midi Workshop

10105 E. Via Linda

Suite 103-211

Scottsdale

AZ, 85258

U.S.A

                                   .


MidiLab for Windows

Overview

  How to Order MidiLab

  What Is MidiLab for Windows ?

Tutorial

  Midilab Basics

  Your First Transmission

  Expanding this Example

  More Examples

  Status Bytes and Data Bytes

  Channel and Ch. Independent Messages

Using MidiLab

  Running MidiLab for the first time

  Select Midi Devices

  HEX and DEC buttons.

  Byte1, Byte2 and Byte3 boxes

  Send Midi and Assign button

  Slider and Assign buttons

  Panic Button

Other Topics

  MIDI Status Byte Quick Reference

  MIDI Controllers Quick Reference

  Technical Support

                                   .


What Is MidiLab for Windows
What Is MidiLab for Windows ?

At it's simplest, MidiLab is a programmable button and a programmable slider which are both capable of sending any MIDI message to your MIDI hardware via your computer's MIDI Card.

You may send a simple one byte message such as a sequencer START code or a two or three byte message such as NOTE ON where the second and third bytes indicate the note number and the velocity respectively.

Next Topic - MidiLab Basics

                                   .


MidiLab Basics

(To print this topic select "Print Topic" from the file menu.

To use MidiLab effectively, it helps to know something about the basic language of MIDI. While there are a number of excellent books written on the subject, you should find enough detail in this helpfile to be able to use MidiLab to generate all but the most complex of MIDI messages.

MIDI data is nothing but a stream of numbers passing down a cable. Each of these numbers has a special meaning to a piece of MIDI hardware. For example, the number 144 means "play a note". Obviously the command "play a note" is not sufficient on it's own. The hardware needs to know which note to play and, (if it's a touch sensitive  instrument), how loud to play that note. In this case we would use a "Three Byte MIDI Message", (where the term ":Byte" is simply computer jargon for any number between 0 and 255).

In the above case, we established how to tell the hardware to play a note. When the hardware recieves that information it waits for two more numbers. The first of these numbers will tell the hardware which note to play. Note C2, for example, has a value of 72. The last number will tell the hardware how loud to play the note, (the velocity). The lowest velocity is 0, (usually inaudible), and the loudest is 127.

So now we can construct a "Three Byte MIDI Message" to play a C2 note. Run MidiLab and ensure that the DEC button at the top is selected. Now double click the BYTE1 box and enter the value 144. In the same way, enter the value 72 in the BYTE2 box. Finally enter the value 64, (medium velocity), into the BYTE3 box. Click the "Send Midi" button and your should hear the C2 note played on your MIDI hardware.

Next Topic

See Also

  Status Bytes and Data Bytes

  Byte1, Byte2 and Byte3 Boxes

  MIDI Status Byte Quick Reference

                                   .


Running MidiLab for the first time

The first time you run MidiLab you will need to tell the program about your system's MIDI devices . To do this choose Select Midi Devices from the Options menu

                                   .


Select Midi Devices

This is main selection screen. Click on the Drop-Down List button to display the list of available Midi Out devices. To select a device for MidiLab to use, simply click on it. The list will close and the device you clicked will become the current selection. These settings are memorized when you exit MidiLab so this procedure is only necessary the first tim you run the program. Press OK to return to Midilab.

                                   .


Status Bytes and Data bytes

The most important part of any Midi message is the STATUS BYTE.

This tells the Midi hardware to perform a specific function e.g: NOTE ON, PROGRAM CHANGE, CONTROL CHANGE etc. The STATUS BYTE is then normally followed by one or two DATA BYTES which contain other information necessary to perform that function - which note to play, which program number to select  etc.

In any Midi message, the first byte is always a Status Byte which is then followed by the associated Data Bytes. If a Data Byte is sent alone, without a preceding Status byte, it will be ignored by the Midi hardware. To ensure that there is no confusion, Data bytes can have values from 0 to 127 and Status bytes have values from 128 to 255.

Although we've discussed Midi bytes as decimal numbers in the early stages, Midi protocol favors the use of Hex  values when referring to Status and data byte values. Most Midi reference material uses Hex numbers to show the different Status and Data Byte values. For a list  of all the Status byte values, (in hex of course !), see the Midi Status Byte Quick Reference.

Status bytes come in two forms,Channel and Channel Independent.  NOTE ON would be an example of a Channel message where there are sixteen different values for the NOTE ON status byte corresponding to the sixteen channels of MIDI. The sequencer START message is an example of a Channel independent message. You don't tell the sequencer to start on a certain channel, you just tell it to start !

Next Topic

                                   .


Channel and Ch. Independent Mes
Channel and Channel Independent Mes

Midi Status Bytes are divided into two main families - Channel messages and Channel Independent messages. Messages such asSTART, STOP and CONTINUE are examples of Channel Independent messages. They do not apply to a particular Midi channel but instead to the the receiving hardware as a whole.

Channel messages take a little more understanding. A message such as NOTE ON or PROGRAM CHANGE can have any of sixteen different numbers as its Status Byte. Typically, when you read about Midi Status Bytes, (such as in the Midi Status Byte Quick Reference), you are only ever given the Status byte for Channel 1. You can create the same Status Byte for other channels by simply adding 1 for each subsequent channel.

For example, we learn that the Status Byte for PITCH BEND is E0H, (decimal 224). This means that, sending this value to a piece of Midi hardware would tell it to expect a pitch bend on channel 1. If we wanted to send a pitch bend on channel 2 we would simply add 1 to this value. So the new Status Byte is now E1H, (decimal 225). Channel 3 would be E2H, (decimal 226) and so on.

See also;

  Examples

  Midi Status Byte Quick Reference

                                   .


Volume Slider

Here's the necessary decimal structure to create a Volume slider.

Byte 1	-	176

Byte 2	-	7

Byte 3	-	Assign to Slider

Move the slider to send volume messages. Volume is one of the MIDI controller messages whose Status Byte is B0H, (176 Decimal). The first Data Byte, (Byte 2), identifies which of the 128 functions is to be used.  Controller # 7, which we're using here), is defined as "Volume".

There are 128 such messages including Pan, Modulation, Bank Select and Damper Pedal. Try changing the value of Byte 2 to 10. You've now created a PAN control. Try it.

Click here for a full list of controller numbers.

The above example will send volume on Channel 1. To send on a different channel, simply add the desired channel number, minus 1, to the first byte, (e.g. Channel 6 = 181).

See Also

  Midi Controller Quick Reference

  Midi Status Byte Quick Reference

                                   .


Program Change

Here is the necessary decimal structure to create a Program Change button. Ensure that the Send button is active, (it's round button is selected).

Byte 1	-	192

Byte 2	-	Any number from 0 to 127

Byte 3	-	Empty

Click the button to send this message. Byte 2 determines which of the 128 programs you wish to select. Assigning Byte 2 to a slider will allow you to scroll through all the avaiable programs on your hardware.

This example sends Program Change on channel 1. To send on a different channel, simply add the desired channel number, minus 1, to the first byte, (e.g. Channel 9 = 200).

See Also

  Midi Status Bytes Quick Reference.

                                   .


Pitch Bend

Here's the necessary decimal structure to create a simple Pitch Bend slider.

Byte 1	-	224

Byte 2	-	0

Byte 3	-	Assign to Slider

Move the slider to generate Pitch Bend on Channel 1. The first data byte, (byte 2), is rarely used in many applications. It was originally provided to allow manufacturers to select the "range" of pitch bend via midi. In practice, however, you can normally leave this at zero and adjust the range on your synth or MIDI hardware. Remember to hit Panic after experimenting with this control. Otherwise your MIDI hardware might remain "bent" and out of tune.

As with the other examples, this shows how to send Pitch Bend only on Channel 1. To send on a different channel, simply add the desired channel number, minus 1, to the first byte, (e.g. Channel 16 = 239).

See Also

  Midi Status Bytes Quick Reference.

                                   .


START Message

Here's a good example of a Channel Independent message. At this stage, let's start talking and thinking in Hex , (the way all Midi text books deal with the language). Before proceeding with this example, switch the "format" to HEX. The single Hex Status Byte value for Sequencer start. is;

Byte 1	-	FA

Since many of these Channel Independent messages consist of only one byte, the values of Byte 2 and Byte 3 do not matter. It is good practice, however, to set both of these to zero when sending these types of messages. Assign the send midi button and click it to send the START message.

Now here is the code for  CONTINUE;

Byte 1	-	FB

And STOP;

Byte 1	-	FC

See Also

  Midi Status Bytes Quick Reference.

                                   .


Your First Transmission

For the example in MidiLab Basics, your MidiLab data boxes should contain the following;

Byte 1	-	144

Byte 2	-	72

Byte 3	-	64

Clicking on the Send Midi button will send this information to your selected Midi interface and, if everything is configured correctly, you should hear a note played on Channel 1. So let's analyze this structure;

The first byte, is called the Status Byte. This tells the hardware what to actually do - in this case, "play a note". There are sixteen different numbers which mean "play a note", (or in true Midi language NOTE ON). These correspond to the sixteen channels of Midi. So decimal value 144 means NOTE ON - Channel1, 145 means NOTE ON - Channel 2, 146 means NOTE ON - Channel 3 and so on up to 159 for NOTE ON - Channel 16.

Next Topic - Expanding this example.

                                   .


Expanding this Example

The second and third bytes in our MidiLab Basics example are called the Data Bytes. These suggest the note number and the velocity respectively.

Now let's have some fun with this example. Instead of using a button to send the Midi message, lets introduce the slider.

Click on the little circular button to the right of the Byte 2 box, (called the assign button ). You have now assigned this Byte's value to slider. Moving the slider will vary the value of Byte 2 sending a new message each time it changes. Since Byte 2 was the note number, you should now hear your Midi hardware sweeping through all of the notes in its available range as you move the slider.

Now place the slider towards the middle of its travel and click on the Byte 3 assign button. Since Byte 3 was the velocity value, you should now hear the same note getting louder and softer as you sweep the slider from one end to the other.

NOTE: You may find that your hardware runs out of polyphony  during this example. If this is the case then just click the Panic Button at any time to restore it. This will occurr if your instrument does not have Dynamic Allocation  because we have sent only NOTE ON messages and have not yet send any NOTE OFF messages.

Next Topic - Other Examples

                                   .


Other Examples

Here are some other examples of Midi messages you might want to try sending with Midilab, (click any line);

Volume Slider

Program Change

Pitch Bend

Sequencer Start

                                   .


Midi Status Bytes

The following is a list of the most important MIDI Status Bytes for quick reference. All values are given in Hex . Where a range of value is given, the lower value corresponds to channel 1 and the higher to channel 16.

Channel

NOTE OFF	80H	To	8FH

NOTE ON	90H	To	9FH

POLY PRESS.	A0H	To	AFH

CONTROL CHANGE	B0H	To	BFH

PROGRAM CH.	C0H	To	CFH

CHANNEL PRESS.	D0H	To	DFH

PITCH BEND	E0H	To	EFH

Channel Independent

START OF SYSEX	F0H

MIDI TIME CODE	F1H

SONG POSITION	F2H

SONG SELECT	F3H

TUNING REQUEST	F6H

END OF EXCLUSIVE	F7H

MIDI TIMING CLOCK	F8H

START	FAH

CONTINUE	FBH

STOP	FCH

ACTIVE SENSING	FEH

SYSTEM RESET	FFH

                                   .


Midi Controllers

This list gives all of the popular assigned Midi Controller Numbers in decimal. To use these in MidiLab use the following decimal structure;

Byte 1	-	176, (for Channel 1, 177 for Ch. 2 and so on)

Byte 2	-	Controller Number, (from this list).

Byte 3	-	Value

Don't worry if some of these don't make any sense. Many of them are rarely used in most instruments. Refer to your instrument's Midi Implementation Chart  to see which controllers are supported.

Controller# 0	Bank Select MSB

Controller# 1	Modulation

Controller# 2	Breath Controller

Controller# 4	Foot Volume

Controller# 5	Portamento Time

Controller# 6	Data Entry MSB

Controller# 7	Volume

Controller# 8	Balance

Controller# 10	Pan

Controller# 11         	Expression

Controller# 12	Control 1*

Controller# 13	Control 2*

Controller# 16-19	General Purpose 1 - 4*

Controller# 32	Bank Select LSB

Controller# 33-63	LSB Controllers 1 - 31**

Controller# 64	Damper Pedal

Controller# 65	Portamento Pedal

Controller# 66	Sosteuto Pedal

Controller# 67	Soft Pedal

Controller# 68	Legato Pedal

Controller# 69	Hold 2 Pedal

Controller# 70-79	Sound Controller 1 - 10*

Controller# 80-83	General Purpose 5 - 8*

Controller# 84	Portamento Control

Controller# 91 	Effect 1 Depth

Controller# 92	Effect 2 Depth

Controller# 93 	Effect 3 Depth

Controller# 94	Effect 4 Depth

Controller# 95	Effect 5 Depth

Controller# 96 	Data Increment

Controller# 97	Data Decrement

Controller# 98	NRPN LSB

Controller# 99	NRPN MSB

Controller#100	RPN LSB

Controller#101	RPN MSB

Controller#120 	All Sound Off

Controller#121 	Reset All Controllers

Controller#122 	Local Control On/Off

Controller#123 	All Notes Off

Controller#124 	Omni Mode Off

Controller#125 	Omni Mode On

Controller#126 	Mono Mode On

Controller#127 	Poly Mode On

* = Varies from manufacturer to manufacturer. Please see your instrument's documentation to see if these values are supported and what their function is.

** = Not normally used.

                                   .


Technical Support

If you have any comments or questions about MidiLab, or if you are interested in obtaining information about other M.T.S MIDI Workshop utilities then you can contact us at;

MTS MIDI Workshop

10105 East Via Linda

Suite 103 - 211

Scottsdale

AZ 85258

U.S.A

Or leave a Compuserve or Internet message at;

Compuserve: 72162, 454

Internet: 72162.454@compuserve.com

                                   .


Byte Entry Boxes

Use these three boxes to enter the Byte values for your Midi message. If you are sending a Channel Independent message then you should enter the Status Byte in the first box and enter a zero in the second and third boxes.

                                   .


HEX and DEC Butttons

Use these buttons to select whether you want to enter values in decimal or Hexadecimal . If there are values already enered in the Byte boxes when you selct a new format, these numbers will be converted from hex to decimal or vice-versa.

                                   .


Send Midi and Assign button

Clicking on the Send Midi button will send the Three Byte Midi Message indicated in the Byte Entry Boxes.

The Send Midi Button is only active when the small round button above it, (called the Assign button), is selected. The Send Midi button cannot be active if one of the byte values is assigned to the slider.

                                   .


Slider and Assign buttons

The slider can be used to 'sweep" any of the two Data Byte values such as in the Volume Control example. It has a range of 0 to 127, (0H to 7FH in Hexadecimal ).

To assign the slider to one of these values, simply click the small round button to the right of the Byte 1 or Byte 2 box, (called the Slider Assign button), and the slider will now enter new values into that box as it is moved.

The slider sends a continuous stream of Midi messages as it is moved. for this reason, the Send Midi button is disabled when the slider is in use.

                                   .


MidiLab Tutorial

Contents

  What Is MidiLab for Windows ?

  Midilab Basics

  Your First Transmission

  Expanding this Example

  More Examples

  Status Bytes and Data Bytes

  Channel and Ch. Independent Messages

                                   .


Panic Button

The Panic button is used to effectively "restore order" to your Midi hardware. It will cancel any "hanging notes" and restore volumes, pans,pitch bends etc. to normal conditions.

Here are the actual commands send by the panic button on all 16 channels;

ALL NOTES OFF

RESET ALL CONTROLLERS

PITCH BEND = 64, (neutral)

AFTERTOUCH = 0

                                   .


A

assign button

D

Dynamic Allocation

H

Hex

Hexadecimal

M

MIDI devices

Midi Implementation Chart

P

polyphony

T

Three Byte MIDI Message

touch sensitive


MIDI devices

MidiLab will work with all popular MIDI interfaces including the MPU-401, MM-401 and SoundBlaster compatible cards with a Midi interface unit.


polyphony

The maximum number of notes that a Midi instrument can play at once. If this is exceeded then you may hear no sound at all until some earlier played notes are released. (See Dynamic Allocation ).


Dynamic Allocation

A system whereby a sythesizer or Midi module will free up those notes that were played earlier on to allow more recently played notes to sound.


Midi Implementation Chart

A table, usually included in the Users Manual, which shows the controllers and other Midi messages which your instrument is able to respond to.


Hexadecimal

A base 16 numeric format popular in computing languages. Hex numbers are usually shown in print followed by an H, (e.g. 90H). You should omit this H when entering Hex values however.


Hex

You can convert Hex values to decimal by using the Calculator that comes with windows.


assign button

The little circular button associated with the Send Midi button and also the Byte 2 and Byte 3 boxes.


touch sensitive

Also called "velocity sensitive". This term describes an instrument whose sounds will respond to the Midi velocity event.


Three Byte MIDI Message

The most popular structure for a Midi channel message. The first byte is a Status byte, (such as NOTE ON), and the second and third bytes are Data bytes, (such as note Number and Velocity).