Last active
August 29, 2015 14:05
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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