private int get_prev_page(Page page) throws SoundException {
        long begin = offset; //!!!
        int ret;
        int offst = -1;
        while (offst == -1) {
            begin -= CHUNKSIZE;
            if (begin < 0) {
                begin = 0;
            }
            seek_helper(begin);
            while (offset < begin + CHUNKSIZE) {
                ret = get_next_page(page, begin + CHUNKSIZE - offset);
                if (ret == OV_EREAD) {
                    return OV_EREAD;
                }
                if (ret < 0) {
                    if (offst == -1) {
                        throw new SoundException("");
                    }
                    break;
                } else {
                    offst = ret;
                }
            }
        }
        seek_helper(offst); //!!!
        ret = get_next_page(page, CHUNKSIZE);
        if (ret < 0) {
            return OV_EFAULT;
        }
        return offst;
    }