Index: soundlib/Dlsbank.cpp =================================================================== --- soundlib/Dlsbank.cpp (revision 23607) +++ soundlib/Dlsbank.cpp (working copy) @@ -1293,6 +1293,7 @@ // Region Default Values int32 regionAttn = 0; + int16 regionPan = 128; // Load Generators sf2info.instBags.Seek(ibagcnt * sizeof(SFInstBag)); SFInstBag bags[2]; @@ -1300,6 +1301,7 @@ sf2info.instGens.Seek(bags[0].wGenNdx * sizeof(SFInstGenList)); uint16 lastOp = SF2_GEN_SAMPLEID; int32 loopStart = 0, loopEnd = 0; + if(!sf2info.instGens.ReadVector(instrGenerators, bags[1].wGenNdx - bags[0].wGenNdx)) break; for(const auto &gen : instrGenerators) @@ -1329,7 +1331,7 @@ { int32 pan = static_cast(value); pan = std::clamp(Util::muldivr(pan + 500, 256, 1000), 0, 256); - rgn.panning = static_cast(pan); + regionPan = static_cast(pan); pDlsEnv->defaultPan = mpt::saturate_cast(pan); } break; @@ -1393,6 +1395,7 @@ int32 linearVol = DLS32BitRelativeGainToLinear(((instrAttenuation + regionAttn) * 65536) / 10) / 256; Limit(linearVol, 16, 256); rgn.usVolume = static_cast(linearVol); + rgn.panning = regionPan; if(lastOp != SF2_GEN_SAMPLEID && nRgn == 0) globalZone = rgn; @@ -1911,6 +1914,7 @@ sample.nGlobalVol = (uint8)(lVolume / 4); // 0-64 } sample.nPan = GetPanning(nIns, nRgn); + if(sample.nPan != 128) sample.uFlags |= CHN_PANNING; sample.Convert(MOD_TYPE_IT, sndFile.GetType()); sample.PrecomputeLoops(sndFile, false);