data is a ubyte array of shape = (size,) 
    (interleaved channels if multichannel)

def _numpy24to32bit(data:np.ndarray, bigendian:bool=False) -> np.ndarray:
    """
    data is a ubyte array of shape = (size,) 
    (interleaved channels if multichannel)
    """
    target = np.zeros((data.shape[0] * 4 / 3,), dtype=np.ubyte)
    if not bigendian:
        target[3::4] = data[2::3]
        target[2::4] = data[1::3]
        target[1::4] = data[0::3]
    else:
        target[1::4] = data[2::3]
        target[2::4] = data[1::3]
        target[3::4] = data[0::3]
    del data
    targetraw = target.tostring()
    del target
    data = np.fromstring(targetraw, dtype=np.int32)
    return data