728 |
|
|
729 |
InstrumentBase::~InstrumentBase() { |
InstrumentBase::~InstrumentBase() { |
730 |
if (pGlobalRegion) delete pGlobalRegion; |
if (pGlobalRegion) delete pGlobalRegion; |
731 |
for (int i = regions.size() - 1; i >= 0; i--) { |
for (ssize_t i = regions.size() - 1; i >= 0; i--) { |
732 |
if (regions[i]) delete (regions[i]); |
if (regions[i]) delete (regions[i]); |
733 |
} |
} |
734 |
} |
} |
735 |
|
|
736 |
int InstrumentBase::GetRegionCount() { |
int InstrumentBase::GetRegionCount() { |
737 |
return regions.size(); |
return (int) regions.size(); |
738 |
} |
} |
739 |
|
|
740 |
Region* InstrumentBase::GetRegion(int idx) { |
Region* InstrumentBase::GetRegion(int idx) { |
1012 |
throw Exception("Broken SF2 file (broken phdr)"); |
throw Exception("Broken SF2 file (broken phdr)"); |
1013 |
} |
} |
1014 |
|
|
1015 |
int count = ck->GetSize() / 38; |
int count = (int) ck->GetSize() / 38; |
1016 |
for (int i = 0; i < count; i++) { |
for (int i = 0; i < count; i++) { |
1017 |
Presets.push_back(new Preset(this, ck)); |
Presets.push_back(new Preset(this, ck)); |
1018 |
} |
} |
1022 |
throw Exception("Broken SF2 file (broken pbag)"); |
throw Exception("Broken SF2 file (broken pbag)"); |
1023 |
} |
} |
1024 |
|
|
1025 |
count = ck->GetSize() / 4; |
count = int(ck->GetSize() / 4); |
1026 |
for (int i = 0; i < count; i++) { |
for (int i = 0; i < count; i++) { |
1027 |
PresetBag pb; |
PresetBag pb; |
1028 |
pb.GenNdx = ck->ReadInt16(); |
pb.GenNdx = ck->ReadInt16(); |
1036 |
throw Exception("Broken SF2 file (broken pmod)"); |
throw Exception("Broken SF2 file (broken pmod)"); |
1037 |
} |
} |
1038 |
|
|
1039 |
count = ck->GetSize() / 10; |
count = int(ck->GetSize() / 10); |
1040 |
for (int i = 0; i < count; i++) { |
for (int i = 0; i < count; i++) { |
1041 |
ModList ml; |
ModList ml; |
1042 |
ml.ModSrcOper = ck->ReadInt16(); |
ml.ModSrcOper = ck->ReadInt16(); |
1053 |
throw Exception("Broken SF2 file (broken pgen)"); |
throw Exception("Broken SF2 file (broken pgen)"); |
1054 |
} |
} |
1055 |
|
|
1056 |
count = ck->GetSize() / 4; |
count = int(ck->GetSize() / 4); |
1057 |
for (int i = 0; i < count; i++) { |
for (int i = 0; i < count; i++) { |
1058 |
GenList gl; |
GenList gl; |
1059 |
gl.GenOper = ck->ReadInt16(); |
gl.GenOper = ck->ReadInt16(); |
1066 |
if (ck->GetSize() < (22 * 2) || (ck->GetSize() % 22)) { |
if (ck->GetSize() < (22 * 2) || (ck->GetSize() % 22)) { |
1067 |
throw Exception("Broken SF2 file (broken inst)"); |
throw Exception("Broken SF2 file (broken inst)"); |
1068 |
} |
} |
1069 |
count = ck->GetSize() / 22; |
count = int(ck->GetSize() / 22); |
1070 |
for (int i = 0; i < count; i++) { |
for (int i = 0; i < count; i++) { |
1071 |
Instruments.push_back(new Instrument(this, ck)); |
Instruments.push_back(new Instrument(this, ck)); |
1072 |
} |
} |
1076 |
throw Exception("Broken SF2 file (broken ibag)"); |
throw Exception("Broken SF2 file (broken ibag)"); |
1077 |
} |
} |
1078 |
|
|
1079 |
count = ck->GetSize() / 4; |
count = int(ck->GetSize() / 4); |
1080 |
for (int i = 0; i < count; i++) { |
for (int i = 0; i < count; i++) { |
1081 |
InstBag ib; |
InstBag ib; |
1082 |
ib.InstGenNdx = ck->ReadInt16(); |
ib.InstGenNdx = ck->ReadInt16(); |
1090 |
throw Exception("Broken SF2 file (broken imod)"); |
throw Exception("Broken SF2 file (broken imod)"); |
1091 |
} |
} |
1092 |
|
|
1093 |
count = ck->GetSize() / 10; |
count = int(ck->GetSize() / 10); |
1094 |
for (int i = 0; i < count; i++) { |
for (int i = 0; i < count; i++) { |
1095 |
ModList ml; |
ModList ml; |
1096 |
ml.ModSrcOper = ck->ReadInt16(); |
ml.ModSrcOper = ck->ReadInt16(); |
1107 |
throw Exception("Broken SF2 file (broken igen)"); |
throw Exception("Broken SF2 file (broken igen)"); |
1108 |
} |
} |
1109 |
|
|
1110 |
count = ck->GetSize() / 4; |
count = int(ck->GetSize() / 4); |
1111 |
for (int i = 0; i < count; i++) { |
for (int i = 0; i < count; i++) { |
1112 |
GenList gl; |
GenList gl; |
1113 |
gl.GenOper = ck->ReadInt16(); |
gl.GenOper = ck->ReadInt16(); |
1120 |
if ((ck->GetSize() % 46)) { |
if ((ck->GetSize() % 46)) { |
1121 |
throw Exception("Broken SF2 file (broken shdr)"); |
throw Exception("Broken SF2 file (broken shdr)"); |
1122 |
} |
} |
1123 |
count = ck->GetSize() / 46; |
count = int(ck->GetSize() / 46); |
1124 |
for (int i = 0; i < count; i++) { |
for (int i = 0; i < count; i++) { |
1125 |
Samples.push_back(new Sample(ck, pCkSmpl, pCkSm24)); |
Samples.push_back(new Sample(ck, pCkSmpl, pCkSm24)); |
1126 |
} |
} |
1152 |
|
|
1153 |
File::~File() { |
File::~File() { |
1154 |
delete pInfo; |
delete pInfo; |
1155 |
for (int i = Presets.size() - 1; i >= 0; i--) { |
for (ssize_t i = Presets.size() - 1; i >= 0; i--) { |
1156 |
if (Presets[i]) delete (Presets[i]); |
if (Presets[i]) delete (Presets[i]); |
1157 |
} |
} |
1158 |
for (int i = Instruments.size() - 1; i >= 0; i--) { |
for (ssize_t i = Instruments.size() - 1; i >= 0; i--) { |
1159 |
if (Instruments[i]) delete (Instruments[i]); |
if (Instruments[i]) delete (Instruments[i]); |
1160 |
} |
} |
1161 |
for (int i = Samples.size() - 1; i >= 0; i--) { |
for (ssize_t i = Samples.size() - 1; i >= 0; i--) { |
1162 |
if (Samples[i]) delete (Samples[i]); |
if (Samples[i]) delete (Samples[i]); |
1163 |
} |
} |
1164 |
} |
} |
1165 |
|
|
1166 |
int File::GetPresetCount() { |
int File::GetPresetCount() { |
1167 |
return Presets.size() - 1; // exclude terminal preset (EOP) |
return (int) Presets.size() - 1; // exclude terminal preset (EOP) |
1168 |
} |
} |
1169 |
|
|
1170 |
Preset* File::GetPreset(int idx) { |
Preset* File::GetPreset(int idx) { |
1176 |
} |
} |
1177 |
|
|
1178 |
int File::GetInstrumentCount() { |
int File::GetInstrumentCount() { |
1179 |
return Instruments.size() - 1; // exclude terminal instrument (EOI) |
return (int) Instruments.size() - 1; // exclude terminal instrument (EOI) |
1180 |
} |
} |
1181 |
|
|
1182 |
Instrument* File::GetInstrument(int idx) { |
Instrument* File::GetInstrument(int idx) { |
1207 |
} |
} |
1208 |
|
|
1209 |
int File::GetSampleCount() { |
int File::GetSampleCount() { |
1210 |
return Samples.size() - 1; // exclude terminal sample (EOS) |
return (int) Samples.size() - 1; // exclude terminal sample (EOS) |
1211 |
} |
} |
1212 |
|
|
1213 |
Sample* File::GetSample(int idx) { |
Sample* File::GetSample(int idx) { |
1425 |
if (pSample->SampleType == Sample::MONO_SAMPLE || pSample->SampleType == Sample::ROM_MONO_SAMPLE) { |
if (pSample->SampleType == Sample::MONO_SAMPLE || pSample->SampleType == Sample::ROM_MONO_SAMPLE) { |
1426 |
pSample->pCkSmpl->Read(pTmpBuf, SampleCount, 2); |
pSample->pCkSmpl->Read(pTmpBuf, SampleCount, 2); |
1427 |
pSample->pCkSm24->Read(pTmpBuf + SampleCount * 2, SampleCount, 1); |
pSample->pCkSm24->Read(pTmpBuf + SampleCount * 2, SampleCount, 1); |
1428 |
for (int i = SampleCount - 1; i >= 0; i--) { |
for (long i = SampleCount - 1; i >= 0; i--) { |
1429 |
pBuf[i*3] = pTmpBuf[(SampleCount * 2) + i]; |
pBuf[i*3] = pTmpBuf[(SampleCount * 2) + i]; |
1430 |
pBuf[i*3 + 2] = pTmpBuf[i*2 + 1]; |
pBuf[i*3 + 2] = pTmpBuf[i*2 + 1]; |
1431 |
pBuf[i*3 + 1] = pTmpBuf[i*2]; |
pBuf[i*3 + 1] = pTmpBuf[i*2]; |
1433 |
} else if (pSample->SampleType == Sample::LEFT_SAMPLE || pSample->SampleType == Sample::ROM_LEFT_SAMPLE) { |
} else if (pSample->SampleType == Sample::LEFT_SAMPLE || pSample->SampleType == Sample::ROM_LEFT_SAMPLE) { |
1434 |
pSample->pCkSmpl->Read(pTmpBuf, SampleCount, 2); |
pSample->pCkSmpl->Read(pTmpBuf, SampleCount, 2); |
1435 |
pSample->pCkSm24->Read(pTmpBuf + SampleCount * 2, SampleCount, 1); |
pSample->pCkSm24->Read(pTmpBuf + SampleCount * 2, SampleCount, 1); |
1436 |
for (int i = SampleCount - 1; i >= 0; i--) { |
for (long i = SampleCount - 1; i >= 0; i--) { |
1437 |
pBuf[i*6] = pTmpBuf[(SampleCount * 2) + i]; |
pBuf[i*6] = pTmpBuf[(SampleCount * 2) + i]; |
1438 |
pBuf[i*6 + 2] = pTmpBuf[i*2 + 1]; |
pBuf[i*6 + 2] = pTmpBuf[i*2 + 1]; |
1439 |
pBuf[i*6 + 1] = pTmpBuf[i*2]; |
pBuf[i*6 + 1] = pTmpBuf[i*2]; |
1443 |
} else if (pSample->SampleType == Sample::RIGHT_SAMPLE || pSample->SampleType == Sample::ROM_RIGHT_SAMPLE) { |
} else if (pSample->SampleType == Sample::RIGHT_SAMPLE || pSample->SampleType == Sample::ROM_RIGHT_SAMPLE) { |
1444 |
pSample->pCkSmpl->Read(pTmpBuf, SampleCount, 2); |
pSample->pCkSmpl->Read(pTmpBuf, SampleCount, 2); |
1445 |
pSample->pCkSm24->Read(pTmpBuf + SampleCount * 2, SampleCount, 1); |
pSample->pCkSm24->Read(pTmpBuf + SampleCount * 2, SampleCount, 1); |
1446 |
for (int i = SampleCount - 1; i >= 0; i--) { |
for (long i = SampleCount - 1; i >= 0; i--) { |
1447 |
pBuf[i*6 + 3] = pTmpBuf[(SampleCount * 2) + i]; |
pBuf[i*6 + 3] = pTmpBuf[(SampleCount * 2) + i]; |
1448 |
pBuf[i*6 + 5] = pTmpBuf[i*2 + 1]; |
pBuf[i*6 + 5] = pTmpBuf[i*2 + 1]; |
1449 |
pBuf[i*6 + 4] = pTmpBuf[i*2]; |
pBuf[i*6 + 4] = pTmpBuf[i*2]; |
1460 |
int16_t* const pBuf = (int16_t*) pBuffer; |
int16_t* const pBuf = (int16_t*) pBuffer; |
1461 |
if (pSample->SampleType == Sample::LEFT_SAMPLE || pSample->SampleType == Sample::ROM_LEFT_SAMPLE) { |
if (pSample->SampleType == Sample::LEFT_SAMPLE || pSample->SampleType == Sample::ROM_LEFT_SAMPLE) { |
1462 |
pSample->pCkSmpl->Read(pTmpBuf, SampleCount, 2); |
pSample->pCkSmpl->Read(pTmpBuf, SampleCount, 2); |
1463 |
for (int i = SampleCount - 1; i >= 0; i--) { |
for (long i = SampleCount - 1; i >= 0; i--) { |
1464 |
pBuf[i*2] = pTmpBuf[i]; |
pBuf[i*2] = pTmpBuf[i]; |
1465 |
if (CLEAR) |
if (CLEAR) |
1466 |
pBuf[i*2 + 1] = 0; |
pBuf[i*2 + 1] = 0; |
1467 |
} |
} |
1468 |
} else if (pSample->SampleType == Sample::RIGHT_SAMPLE || pSample->SampleType == Sample::ROM_RIGHT_SAMPLE) { |
} else if (pSample->SampleType == Sample::RIGHT_SAMPLE || pSample->SampleType == Sample::ROM_RIGHT_SAMPLE) { |
1469 |
pSample->pCkSmpl->Read(pTmpBuf, SampleCount, 2); |
pSample->pCkSmpl->Read(pTmpBuf, SampleCount, 2); |
1470 |
for (int i = SampleCount - 1; i >= 0; i--) { |
for (long i = SampleCount - 1; i >= 0; i--) { |
1471 |
if (CLEAR) |
if (CLEAR) |
1472 |
pBuf[i*2] = 0; |
pBuf[i*2] = 0; |
1473 |
pBuf[i*2 + 1] = pTmpBuf[i]; |
pBuf[i*2 + 1] = pTmpBuf[i]; |