Я не могу представить себе обстоятельства на современном компьютере (то есть, на котором используются 2 целых числа дополнения), когда это не получится:
assert -32768 <= signed_16_bit_integer <= 32767
Чтобы сделать то, что вы просили:
if signed_16_bit_integer >= 0:
afloat = signed_16_bit_integer / 32767.0
else:
afloat = signed_16_bit_integer / -32768.0
Прочитав ваш код немного более внимательно: у вас есть sample_width_in_bytes, поэтому просто разделите на 255 или 256, если это B
, и на 32768, если это h