Sf2Sample negative `pitch_correction` values are treated as unsigned
Shdr = namedtuple('Shdr',
['sample_name', 'start', 'end', 'start_loop', 'end_loop', 'sample_rate', 'original_pitch',
'pitch_correction', 'sample_link', 'sample_type'])
https://gitlab.com/zeograd/sf2utils/blob/master/sf2utils/sf2parse.py#L264
def parse_shdr_chunk(self, chunk_id):
return self.parse_sized_array(chunk_id, self.Shdr, 46, r'<20sIIIIIbBHH')
You treat original_pitch as signed, and pitch_correction as unsigned. This means negative pitch_correction is decoded incorrectly.
parse_shdr_chunk should be '<20sIIIIIBbHH'
to decode negative pitch_correction properly.