Last update: 11/29/95 The following are known SoundFont Enabler software bugs: 1. SoundFont banks with ROM samples and without an IROM subchunk will load. Such banks are invalid. A fix is the following: sfreader.cpp: line 692: Add the following: pchIROMChunk = GetInfoSubCkVal(Irom); if ((pchIROMChunk == NULL) && (bROMSamples == TRUE)) { SetError(EHC_WRONGWAVETABLE); delete hf; return NULL; } 2. The byOriginalKey and chFineCorrection parameters are swapped in the SoundFont reader (in Big Endian mode). They should not be. A fix is the following: sfreader.cpp: comment out (or delete) lines 675 through 680 (675 reads twoByteUnion temp) (680 reads hf->pSHdr[uiCount].chFineCorrection = temp.byVals.by0) 3. The constants for Preset and Instrument Modulator list size is incorrectly set to 6. It should be 10. A fix is the following: sfreader.h: line 51: Change the constant for PRSTMODLIST_SIZE from 6 to 10 line 54: Change the constant for INSTMODLIST_SIZE from 6 to 10 4. 3, however, may introduce another problem. Preditor is currently WRITING SoundFont 2.0 banks with Preset and Instrument Mod lists of size 6. This is a bug in Preditor. However that fact does not help the fact that this change will cause the enabler to FAIL if it reads a bank which was saved with Preditor. You may find that annoying. A quick fix to THAT problem (which you may want until/unless you get a new version of Preditor with an appropriate change or a new SF2 bank editor) would be the following: NOTE: If you are NOT using the enabler to load Preditor saved banks, (IE only banks produced with the SBK->SF2 converter) this change in the code is not necessary. sfreader.cpp: line 844: Add the following line of code BEFORE the call to 'Alloc': if (hf->awStructSize[iHydraSymbol] == 0) hf->awStructSize[iHydraSymbol] = 1; Explanation: There are no SoundFont banks which have more than one list entry for the MOD structures (yet). Preditor writes banks such that when iHydraSymbol is prstMod or instMod, dwChkSize is 6. However the change in (3) will make the iFileStructSize equal to 10. This will cause the division to be 6/10 == 0. Then the call to Alloc will say that it requires 0 bytes of memory, the return code will be NULL, and an out of memory error will result. The above line guarantees this condition will never happen. This is not a very clean fix, but it will work for the time being. Note that the AWE-32 drivers will not detect the incorrect MOD list size and Preditor cannot create MOD lists anyway. So Preditor banks should load into the AWE-32 just fine.