public void doubleToBytes(double d, int ch, ByteBuffer ob) {
        int s;
        switch (rCtx.dbps) {
            case 1:
                s = rCtx.dither > 0 ? do_shaping(rCtx, d, ch) : RINT(d);
                ob.put((byte) (s + 128));
                break;
            case 2:
                s = rCtx.dither > 0 ? do_shaping(rCtx, d, ch) : RINT(d);
                ob.putShort((short) s);
                break;
            case 3:
                s = rCtx.dither > 0 ? do_shaping(rCtx, d, ch) : RINT(d);
                if (rCtx.dstFloat) {
                    ob.putFloat((float) ((1 / (double) 0x7fffff) * s));
                } else {
                    ob.putShort((short) s);
                    s >>= 16;
                    ob.put((byte) s);
                }
                break;
        }
    }