Advertisement

xm format problem

Started by July 23, 2000 12:50 PM
2 comments, last by The_[PI]_ehT 24 years, 4 months ago
Okay, this one is to all you pro''s who use to design players and stuff for the .xm format (or other module formats)... I have a lil'' problem with the format description which was released by mr.t or what''s-his-name. It says that if an instrument has more than one sample, you gotta load the sample header, and then the sample data for each of the samples. This is right if every sample actually contains sample data. But now there are plenty of modules which contain instruments with more than one sample, and the first sample says it contains n bytes sample data. But immediately after it''s header, there comes another sample, and then another, until the last of those samples finally contain the actual sample data. But this one which has the sample data attached to it actually says it doesn''t (samplesize field is zero). So I fixed my reading algo, but now it''s unable to read modules with instruments that contain several samples *with* sample data. So is there any flag or something indicating how I have to handle the instrument''s samples? I''d really appreciate your help!!! pi~
Jan PieczkowskiBrainwave Studios
ah, and by the way is it possible to change the nick in this forum?
Jan PieczkowskiBrainwave Studios
Advertisement
The XM format is quite messy and the description not accurate.

I suggest you take a look at the modplug XM loader (it was ported to Linux some time ago and is open-source)

if XMINSTRUMENTHEADER.size is zero, there is still
sizeof(XMINSTRUMENTHEADER) bytes that are written.

(Search for gmodplay and/or modplug-xmms)

Here is the structures I''m using


typedef struct tagXMINSTRUMENTHEADER
{
DWORD size;
CHAR name[22];
BYTE type;
WORD samples;
} XMINSTRUMENTHEADER;


typedef struct tagXMINSTRUMENT
{
DWORD shsize;
BYTE snum[96];
WORD venv[24];
WORD penv[24];
BYTE vnum, pnum;
BYTE vsustain, vloops, vloope, psustain, ploops, ploope;
BYTE vtype, ptype;
BYTE vibtype, vibsweep, vibdepth, vibrate;
WORD volfade;
WORD res;
BYTE reserved1[20];
} XMINSTRUMENT;

typedef struct tagXMSAMPLESTRUCT
{
DWORD samplen;
DWORD loopstart;
DWORD looplen;
BYTE vol;
signed char finetune;
BYTE type;
BYTE pan;
signed char relnote;
BYTE res;
char name[22];
} XMSAMPLESTRUCT;

Olivier

Thx for your response. I''ll immediately try it out to fix my code, I hope it works.
I can''t understand though why the group who invented this format is unable to build up a fine documentation on it.

pi~
Jan PieczkowskiBrainwave Studios

This topic is closed to new replies.

Advertisement