T H E   P R O J E C T

*** BulkDump_proj.vbp
The main objective of this program was to analyse SC-55 bulk
dumps and generate smaller alternatives for those dumps.

A bulkdump containes 7360 nibblized bytes of data. Nibblizing
is often used in midi communication, since midi uses only
7bit (0-127) 'lines'. When you want to transmit a value higher than
127 then there is a problem. Nibblizing is the solution, 
altough it doubles the amount of data. For instance, if you
want to transmit &HD8 (216), you have to split it into
&H0D , &H08 and send those 2 bytes.
After un-nibblizing the dump data the number of bytes is
3680. Since I am not able yet to record a midi dump, I extract
these dump data bytes from a *.mid file. The user has to
record his dumps elsewhere and then load it into the program.
In the code the data are put in the array:
Public dmpB(3680) As Byte.

Whenever the user edites one of the parameter values (mixer forms)
it will alter the current opened dump value. After editing he can
save the new dump values, or generate alternatives.
The 'Alternatives' function looks for non-default values. If only a
few are found, the resulting alternative will be much, much smaller
in size. A saved dumps size is about 8kB or 2 to 4 bars in the
piece of music. The alternative can be less than 1kB, 1 bar.

THE DUMPS
The information in the Sound Canvas manual about dumps is summiere,
to say the least.
Everything is transmitted in packets. The largest possible size
of a packet is 128 bytes. There are 64 patch common bytes,
112 x 16 patch part bytes, 128 x 2 drum map parameters.
	64 + (112 * 16) + 256 = 2112 bytes
This is what they say, but this is much less than 3680. Why?
When I analysed recorded dumps in midi files I found the 
following structure:

   29 full part packets of 141 bytes (128 data bytes + 13 other)
    1 non-full part packet of 29 (16 data bytes + 12 other)
   14 full drum packets
    1 non-full drum packet of 36 (24 data bytes + 12 other)
   14 full drum packets
    1 non-full drum packet of 36 (24 data bytes + 12 other)

   full packet = 1 DeltaTime byte
                 1 BOX byte - &HF0
                 2 following bytes size 137 Big Endian - &H81, &H9
                 3 modelbytes - &H41, &H10, &H42
                 1 DT1 (data set 1) byte - &H12
                 3 address bytes - &H480000 patch all /&H490000 drum map
               128 packet data bytes
                 1 checksum byte
                 1 EOX byte - &HF7
             = 141 bytes

If you look at the data bytes only, you can calculate:
	(29 + 28) * 128 + 16 + 48 = 7360 nibblized
				  = 3680 bytes

 T H E  F O R M S 

*** frmAbout 
Generated by VB5

*** frmAltOpt
This form allows the user to set some options regarding to how
the alternatives for the dump should be generated

*** frmBD
This is the main startup form, with menu's. The menu's are explained
in BulkDump.htm

*** frmBDp
This form is a kind of a WYSYWYG preview to print the dump data.

*** frmDevCap
This form enumerates the midi devices and lets the user choose
one of them, suggesting the MPU-401 ports

*** frmMixA
A form for editing ALL or COMMON parameters, such as reverb and chorus
macro.
This form is independant of the data in sc55par.dat
          is easy to extract from the project

*** frmMixLong
This form mainly offers the possibility to generate *.SYX files for
separate individual system exclusive messages.

*** frmMixP
A form for editing PART parameters.
This form is independant of the data in sc55par.dat
          is easy to extract from the project

*** frmReadMidi
Since reading midi files can take a while, and sometimes the
resulting text is larger then 64kB, this form offers the
possibility of Canceling the action, viewing the progress
and filtering the midi messages.

*** frmSeq
This form generates fade in and outs in the form of *.mid files.

 T H E   M O D U L E S 

*** CD_File.bas
Replaces the CommonDialog control.

*** divers.bas
This module containes general functions.

*** dump.bas
This module containes routines mostly specific to the sound canvas.

*** midi.bas
This module containes all midi API function and my own midi function
non specific to the sound canvas.

 O T H E R   F I L E S
		
*** sc55par.dat

	[MODULEINFO]
	ManuID = 41	Roland
	DeviceID = 10	Device ID
	ModelID = 42	GS standard

	[SHORTMSG] - list of short messages
	01 Bn 00 mm Bn 20 00    bank select    ->No/ShortMsg bytes (mm=value)/name

	[PARTYPES] - list of parameter types
	01  1   28   58    -24    +24 semitones ->No/NumBytes/MinHex/MaxHex/MinDec/MaxDec/name

	[COMMON] - common parameters
	000 MAS TUN   0 400000  9 04 00 Master tune ->No/ShortName/ByteOffs/Address/ParType/Altern.SHORTMSG/name

	[PARTS] ->same as common

Don't change anything in this file unless you know what you are doing.

*** BulkDump.htm
Is a short help file for the user.

*** sysex.htm
My own questions directed to you, the reader.

*** SC.gif
Used in BulkDump.htm

*** midi.gif - anoteoff.gif
Used in the program & BulkDump.htm

*** piano.ico
The program's icon

GSall.mid
A saved dump with default values.

