Skip to content

Instantly share code, notes, and snippets.

@kode54
Last active August 29, 2015 14:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kode54/5a23b1fde40c424fa393 to your computer and use it in GitHub Desktop.
Save kode54/5a23b1fde40c424fa393 to your computer and use it in GitHub Desktop.
Excerpt from Adlmidi for extracting instruments from ESS FM driver. Not a pretty sight, and they don't really work anyway.
// LoadESFM("drivers/es1969.sys", 35904, 64, "esfm");
static void LoadESFM(const char* fn, size_t file_offset, unsigned bank, const char* prefix)
{
FILE* fp = std::fopen(fn, "rb");
std::fseek(fp, file_offset, SEEK_SET);
std::vector<unsigned char> data(28 * 256);
std::fread(&data[0], 1, data.size(), fp);
std::fclose(fp);
for ( unsigned a = 0; a < 256; ++a )
{
unsigned offset = a * 28;
unsigned gmno = a;
int midi_index = gmno < 128 ? gmno : gmno - 128;
insdata tmp, tmp2;
tmp.data[0] = data[offset + 0];
tmp.data[1] = data[offset + 5];
tmp.data[2] = data[offset + 2];
tmp.data[3] = data[offset + 7];
tmp.data[4] = data[offset + 3];
tmp.data[5] = data[offset + 8];
tmp.data[6] = data[offset + 4];
tmp.data[7] = data[offset + 9];
tmp.data[8] = data[offset + 1];
tmp.data[9] = data[offset + 6];
tmp.data[10] = data[offset + 24];
tmp.finetune = 0; //data[offset + 12];
tmp2.data[0] = data[offset + 10];
tmp2.data[1] = data[offset + 15];
tmp2.data[2] = data[offset + 12];
tmp2.data[3] = data[offset + 17];
tmp2.data[4] = data[offset + 13];
tmp2.data[5] = data[offset + 18];
tmp2.data[6] = data[offset + 14];
tmp2.data[7] = data[offset + 19];
tmp2.data[8] = data[offset + 11];
tmp2.data[9] = data[offset + 16];
tmp2.data[10] = data[offset + 25];
tmp2.finetune = 0; //data[offset + 12];
struct ins tmp3;
tmp3.notenum = 0;
tmp3.pseudo4op = false;
std::string name;
if(midi_index >= 0) name = std::string(1,'\377')+MidiInsName[midi_index];
char name2[512]; sprintf(name2, "%s%c%u", prefix,
(gmno<128?'M':'P'), gmno&127);
size_t resno = InsertIns(tmp,tmp2,tmp3, name, name2);
SetBank(bank, gmno, resno);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment