Nitpicky cruft cleanup.

This commit is contained in:
James Alan Nguyen 2022-04-15 11:57:57 +10:00
parent 2dc80e8d8e
commit c3ca175e46

View file

@ -448,7 +448,8 @@ void DivEngine::loadS3I(SafeReader& reader, std::vector<DivInstrument*>& ret, St
// Skip more stuff we don't need // Skip more stuff we don't need
reader.seek(21, SEEK_CUR); reader.seek(21, SEEK_CUR);
} else { } else {
logE("S3I PCM samples currently not supported."); lastError = "S3I PCM samples currently not supported.";
logE("S3I PCM samples currently not supported.\n");
} }
ins->name = reader.readString(28); ins->name = reader.readString(28);
ins->name = (ins->name.length() == 0) ? stripPath : ins->name; ins->name = (ins->name.length() == 0) ? stripPath : ins->name;
@ -456,7 +457,8 @@ void DivEngine::loadS3I(SafeReader& reader, std::vector<DivInstrument*>& ret, St
int s3i_signature = reader.readI(); int s3i_signature = reader.readI();
if (s3i_signature != 0x49524353) { if (s3i_signature != 0x49524353) {
logW("S3I signature invalid."); lastError = "S3I signature invalid.";
logW("S3I signature invalid.\n");
}; };
} catch (EndOfFileException& e) { } catch (EndOfFileException& e) {
lastError = "premature end of file"; lastError = "premature end of file";
@ -622,6 +624,7 @@ void DivEngine::loadBNK(SafeReader& reader, std::vector<DivInstrument*>& ret, St
// First distinguish between GEMS BNK and Adlib BNK // First distinguish between GEMS BNK and Adlib BNK
uint64_t header = reader.readL(); uint64_t header = reader.readL();
bool is_adlib = ((header>>8) == 0x2d42494c444100L); bool is_adlib = ((header>>8) == 0x2d42494c444100L);
int readCount = 0;
if (is_adlib) { if (is_adlib) {
// Caveat: Technically Adlib BNK can hold up to 0xFFFF instruments, // Caveat: Technically Adlib BNK can hold up to 0xFFFF instruments,
@ -644,40 +647,37 @@ void DivEngine::loadBNK(SafeReader& reader, std::vector<DivInstrument*>& ret, St
} bnkop_t; } bnkop_t;
typedef struct { typedef struct {
uint8_t mode, // version uint8_t mode,
percVoice; // perc percVoice;
bnkop_t op[2]; bnkop_t op[2];
uint8_t wave0, // wave op1 uint8_t wave0,
wave1; // wave op2 wave1;
} bnktimbre_t; } bnktimbre_t;
int readCount = 0;
try { try {
// Seek to BNK patch names
reader.seek(0x0c, SEEK_SET); reader.seek(0x0c, SEEK_SET);
uint32_t name_offset = reader.readI(); uint32_t name_offset = reader.readI();
reader.seek(0x10, SEEK_SET); reader.seek(0x10, SEEK_SET);
uint32_t data_offset = reader.readI(); uint32_t data_offset = reader.readI();
// Seek to BNK patch names
reader.seek(name_offset, SEEK_SET); reader.seek(name_offset, SEEK_SET);
while (reader.tell() < data_offset) {
while (readCount < 256 && reader.tell() < data_offset) { if (readCount >= 256) {
lastError = "BNK exceeds 256 presets. Only first 256 will be imported.";
logW("BNK exceeds 256 presets. Only first 256 will be imported.\n");
break;
}
reader.seek(3, SEEK_CUR); reader.seek(3, SEEK_CUR);
instNames[readCount] = reader.readString(9); instNames[readCount] = reader.readString(9);
++readCount; ++readCount;
} }
if (readCount >= 256) {
logW("BNK exceeds 256 presets. Only first 256 will be imported.\n");
}
// Seek to BNK data // Seek to BNK data
reader.seek(data_offset, SEEK_SET); reader.seek(data_offset, SEEK_SET);
// Read until EOF // Read until EOF
for (int i = 0; i < readCount && i < 256; ++i) { for (int i = 0; i < readCount && i < 256; ++i) {
try {
bnktimbre_t timbre; bnktimbre_t timbre;
insList[i] = new DivInstrument; insList[i] = new DivInstrument;
auto& ins = insList[i]; auto& ins = insList[i];
@ -720,14 +720,9 @@ void DivEngine::loadBNK(SafeReader& reader, std::vector<DivInstrument*>& ret, St
ins->fm.op[0].ws = reader.readC(); ins->fm.op[0].ws = reader.readC();
ins->fm.op[1].ws = reader.readC(); ins->fm.op[1].ws = reader.readC();
ins->name = instNames[i].length() > 0 ? instNames[i] : fmt::format("{0}[{1}]", stripPath, i); ins->name = instNames[i].length() > 0 ? instNames[i] : fmt::format("{0}[{1}]", stripPath, i);
}
reader.seek(0, SEEK_END);
ret.push_back(insList[i]);
} catch (EndOfFileException& e) {
// Reached end of BNK data
delete insList[i];
break;
}
}
} catch (EndOfFileException& e) { } catch (EndOfFileException& e) {
lastError = "premature end of file"; lastError = "premature end of file";
logE("premature end of file!\n"); logE("premature end of file!\n");
@ -742,6 +737,10 @@ void DivEngine::loadBNK(SafeReader& reader, std::vector<DivInstrument*>& ret, St
lastError = "GEMS BNK currently not supported.\n"; lastError = "GEMS BNK currently not supported.\n";
logE("GEMS BNK currently not supported.\n"); logE("GEMS BNK currently not supported.\n");
} }
for (int i = 0; i < readCount; ++i) {
ret.push_back(insList[i]);
}
} }