#ifndef RS12_H
#define RS12_H
/************************************************************************/
/* NAME */
/* rs12.h */
/* DESCRIPTION */
/* Roland 12-bit-sampler disk format for the S-550, S-330, etc.). */
/* V1.0 (4 May 1992*/
/************************************************************************/
#define SamplesPerSegment 12288
typedef unsigned char byte;
typedef struct systemProgram
{ char data[0176000]; /* 0xFC00 == 64512 */
} SystemProgram;
typedef struct patchParameter
{ byte patchName[12];
byte bendRange;
byte dummy1[1];
byte afterTouchSense;
byte keyMode;
byte velocitySwThreshold;
byte toneToKey1[109];
byte toneToKey2[109];
byte copySource;
byte octaveShift;
byte outputLevel;
byte dummy2[1];
byte detune;
byte velocityMixRatio;
byte afterTouchAssign;
byte keyAssign;
byte outputAssign;
byte dummy3[12];
} PatchParameter;
typedef struct functionParameter
{ byte masterTune;
byte dummy1[13];
byte audioTrig;
byte dummy2[1];
byte voiceMode;
byte multiMidiRxCh[8];
byte multiPatchNumber[8];
byte dummy3[9];
byte keyboardDisplay;
byte multiLevel[8];
byte diskLabel[60];
byte dummy4[4];
byte externalController;
byte dummy5[140];
} FunctionParameter;
typedef struct midiParameter
{ byte dummy1[32];
byte rxChannel[8];
byte rxProgramChange[8];
byte rxBender[8];
byte rxModulation[8];
byte rxHold[8];
byte rxAfterTouch[8];
byte rxVolume[8];
byte rxBendRange[8];
byte dummy2[1];
byte systemExclusive;
byte deviceId;
byte dummy3[1];
byte rxProgramChangeNumber[32];
byte dummy4[124];
} MidiParameter;
typedef struct toneParameter
{ byte toneName[8];
byte outputAssign;
byte sourceTone;
byte orgSubTone;
byte samplingFrequency;
byte origKeyNumber;
byte waveBank;
byte waveSegmentTop;
byte waveSegmentLength;
byte startPoint[3];
byte endPoint[3];
byte loopPoint[3];
byte loopMode;
byte tvaLfoDepth;
byte dummy1[1];
byte lfoRate;
byte lfoSync;
byte lfoDelay;
byte dummy2[1];
byte lfoMode;
byte oscLfoDepth;
byte lfoPolarity;
byte lfoOffset;
byte transpose;
byte fineTune;
byte tvfCutOff;
byte tvfResonance;
byte tvfKeyFollow;
byte dummy3[1];
byte tvfLfoDepth;
byte tvfEgDepth;
byte tvfEgPolarity;
byte tvfLevelCurve;
byte tvfKeyRateFollow;
byte tvfVelocityRateFollow;
byte dummy4[1];
byte tvfSwitch;
byte benderSwitch;
byte tvaEnvSustainPoint;
byte tvaEnvEndPoint;
byte tvaEnvLevel1;
byte tvaEnvRate1;
byte tvaEnvLevel2;
byte tvaEnvRate2;
byte tvaEnvLevel3;
byte tvaEnvRate3;
byte tvaEnvLevel4;
byte tvaEnvRate4;
byte tvaEnvLevel5;
byte tvaEnvRate5;
byte tvaEnvLevel6;
byte tvaEnvRate6;
byte tvaEnvLevel7;
byte tvaEnvRate7;
byte tvaEnvLevel8;
byte tvaEnvRate8;
byte dummy5[1];
byte tvaEnvKeyRate;
byte level;
byte envVelRate;
byte recThreshold;
byte recPreTrigger;
byte recSamplingFrequency;
byte recStartPoint[3];
byte recEndPoint[3];
byte recLoopPoint[3];
byte zoomT;
byte zoomL;
byte copySource;
byte loopTune;
byte tvaLevelCurve;
byte dummy6[12];
byte loopLength[3];
byte pitchFollow;
byte envZoom;
byte tvfEnvSustainPoint;
byte tvfEnvEndPoint;
byte tvfEnvLevel1;
byte tvfEnvRate1;
byte tvfEnvLevel2;
byte tvfEnvRate2;
byte tvfEnvLevel3;
byte tvfEnvRate3;
byte tvfEnvLevel4;
byte tvfEnvRate4;
byte tvfEnvLevel5;
byte tvfEnvRate5;
byte tvfEnvLevel6;
byte tvfEnvRate6;
byte tvfEnvLevel7;
byte tvfEnvRate7;
byte tvfEnvLevel8;
byte tvfEnvRate8;
byte afterTouchSwitch;
byte dummy7[2];
} ToneParameter;
typedef struct toneList
{ byte toneName[8];
byte unknown[8];
} ToneList;
typedef struct waveData
{ byte data[SamplesPerSegment*3/2];
} WaveData;
typedef struct disk
{ SystemProgram systemProgram; /* 0000000 */
PatchParameter patchParameter[16]; /* 0176000 */
FunctionParameter functionParameter; /* 0206000 */
MidiParameter midiParameter; /* 0206400 */
ToneParameter toneParameter[32]; /* 0207000 */
ToneList toneList[32]; /* 0217000 */
WaveData waveDataA[18]; /* 0220000 */
WaveData waveDataB[18];
} Disk;
#endif
|