ただ、たまに波形が変になったり、結合(merge)でエラーが出たりするので、コードを見てみた。
https://docs.obspy.org/_modules/obspy/io/win/core.html#_read_win
データサイズが3Byteの時のデータ読み込みの部分が以下のようになっていた。
elif datawide == 3: for i in range((xlen // datawide)): idata2 = output[chanum][-1] +\ from_buffer(sdata[3 * i:3 * (i + 1)] + b' ', native_str('>i'))[0] >> 8
ここで、3Byteのデータに1Byte足して、4Byteを整数(int64)に変換し、それをビットシフトで後ろの1Byte(8bit)を取り除いてから、1つ前の時間のデータに足し合わせている。
ここで、ビットシフト演算子(>>)は、足し算よりも優先度が低いため、前のデータに足し合わせた後でビットシフトしてしまっている。
つまり、
elif datawide == 3: for i in range((xlen // datawide)): idata2 = output[chanum][-1] + (from_buffer(sdata[3 * i:3 * (i + 1)] + b' ', native_str('>i'))[0] >> 8)
のように、足し合わせる部分を括弧で括ればOK。