goto section page goto youngmonkey main page make contact, e-mail


Roland S-### Disk Format
Advertising Space Available

#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