From: TAMUKI S. <ta...@li...> - 2004-07-14 15:30:45
|
Hello, On Tue, 13 Jul 2004, at 07:48:46 -1000, Greg Lee wrote: > I don't exactly follow what you're suggesting. If a midi player > knows only about ordinary GUS patches, how can it read extra > information in the sample headers in order to figure out which > samples it needs to load? It won't know about that extra > information, because it knows only about ordinary GUS patches. Yes, a midi player that knows only about ordinary GUS/patches, can't read extra information in the patch header and in the sample headers. > I've arranged things so that the first velocity layer following > the patch header will look just like the single set of keyrange > samples that a naive midi player expects to see and knows how > to deal with. You mean that "number of waveforms" in the patch header indicates the number of the single set of keyrange samples. At this point, The example of extended GUS/patch structure in my previous mail might mislead. Here is the revised one: [Patch header information (first: 5 samples, all: 11 samples)] [Sample for low freq. range, mid vel. range, left] [Sample for low freq. range, mid vel. range, right] [Sample for mid freq. range, high vel. range, left] [Sample for mid freq. range, high vel. range, right] [Sample for high freq. range, mid vel. range, mono] [Sample for low freq. range, low vel. range, left] [Sample for low freq. range, low vel. range, right] [Sample for mid freq. range, low vel. range, left] [Sample for mid freq. range, low vel. range, right] [Sample for low freq. range, high vel. range, left] [Sample for low freq. range, high vel. range, right] # The low frequency set has three velocity ranges of stereo samples; # mid velocity range is the widest. # The mid frequency set has two velocity ranges of stereo samples; # high velocity range is the widest. # The high frequency set has one velocity range of mono sample. In this way, someone might want to create a extended GUS/patch that has different number of velocity or channels among frequency ranges. So, I propose the revised extended GUS/patch format: [Extended GUS/patch format] Byte Order: Little-endian Patch header Offset Bytes Contents 0 22 "GF1PATCH110\0ID#000002\0" or "GF1PATCH100\0ID#000002\0" 22 60 Discription (in ASCII) 82 1 Number of instruments (To some patch makers, 0 means 1) 83 1 Voices (Always 14?) 84 1 Channels 85 2 Conventional waveforms 87 2 Master volume [0..127] 89 4 Data size 93 7 "SF2EXT\0" (magic) (new) 100 29 Reserved 129 2 Instrument ID [0..0xffff] 131 16 Instrument name (in ASCII) 147 4 Instrument size 151 1 Layers 152 1 Extended waveforms (new) 153 39 Reserved 192 1 Layer duplicate 193 1 Layer 194 4 Layer size 198 1 Number of samples 199 40 Reserved :::239 bytes total Sample header Offset Bytes Contents 0 7 Wave name (in ASCII) 7 1 Fractions bit 0..3: Loop offset start fractions [0/16..15/16] bit 4..7: Loop offset end fractions [0/16..15/16] 8 4 Sample data size (s) 12 4 Loop start 16 4 Loop end 20 2 Sample rate 22 4 Low frequency 26 4 High frequency 30 4 Root frequency 34 2 Tune (Always 1, not used anymore) 36 1 Panning [0(left)..15(right)] 37 3 Envelope rates (on) (stage 0,1,2) 40 3 Envelope rates (off) (stage 3,4,5) 43 3 Envelope offsets (on) (stage 0,1,2) 46 3 Envelope offsets (off) (stage 3,4,5) stage 0: Attack 1: Decay 2: Sustain 3,4,5: Release 49 1 Tremolo sweep 50 1 Tremolo rate 51 1 Tremolo depth 52 1 Vibrato sweep 53 1 Vibrato rate 54 1 Vibrato depth 55 1 Sampling modes bit 0: 16-bit (versus 8-bit) bit 1: Unsigned (versus signed) bit 2: Looping bit 3: Pingpong bit 4: Reverse bit 5: Sustain bit 6: Envelope bit 7: Clamped release (6th point of envelope) 56 2 Scale frequency 58 2 Scale factor [0..2048] (1024 is normal) 60 1 Low velocity (new) 61 1 High velocity (new) 62 1 Channel mode (new) 0: Mono 1: Left 2: Right 63 2 Sample volume (new) 65 1 Volume envelope delay (new) 66 1 Exclusive class (new) 67 1 Vibrato delay (new) 68 3 Mod envelope rates (on) (stage 0,1,2) (new) 71 3 Mod envelope rates (off) (stage 3,4,5) (new) 74 3 Mod envelope offsets (on) (stage 0,1,2) (new) 77 3 Mod envelope offsets (off) (stage 3,4,5) (new) stage 0: Attack 1: Decay 2: Sustain 3,4,5: Release 80 1 Mod envelope delay (new) 81 1 Chorus effect send (new) 82 1 Reverb effect send (new) 83 2 Resonance (new) 85 2 Cutoff frequency (new) 87 1 ModEnvToPitch (new) 88 1 ModEnvToFilterFc (new) 89 1 ModLfoToFilterFc (new) 90 1 KeynumToModEnvHold (new) 91 1 KeynumToModEnvDecay (new) 92 1 KeynumToVolEnvHold (new) 93 1 KeynumToVolEnvDecay (new) 94 2 Reserved :::96 bytes total 96 (s) Sample data Regards, TAMUKI Shoichi |