Skip to content

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.