package jass.render; /** Utility class to convert sample types. @author Kees van den Doel (kvdoel@cs.ubc.ca) */ public final class FormatUtils { /** Endianness. */ public static boolean bigEndian = false; /** Convert short array to float array. @param buf User provided float array to return result in. @param sbuf User provided sort array to convert. @param bufsz Sumber of float samples to write. */ static final public void shortToFloat(float [] buf, short[] sbuf,int bufsz) { for(int i=0;i<bufsz;i++) { buf[i] = (float)(sbuf[i]/32768.); } } /** Convert float array (in range [-1 1]) to short array. @param shortSound User provided short array to return result in. @param dbuf User provided float array to convert. */ static final public void floatToShort(short[] shortSound, float [] dbuf) { int bufsz = dbuf.length; for(int i=0;i<bufsz;i++) { shortSound[i] = (short)(32767. * dbuf[i]); } } /** Convert float array to byte array. @param byteSound User provided byte array to return result in. @param dbuf User provided float array to convert. */ static final public void floatToByte(byte[] byteSound, float[] dbuf) { int bufsz = dbuf.length; int ib = 0; if (bigEndian) { for (int i = 0; i < bufsz; i++) { short y = (short) (32767. * Math.min(Math.max(dbuf[i], -1.0f), 1.0f)); byteSound[ib] = (byte) ((y >> 8) & 0xFF); ib++; byteSound[ib] = (byte) (y & 0xFF); ib++; } } else { for (int i = 0; i < bufsz; i++) { short y = (short) (32767. * dbuf[i]); byteSound[ib] = (byte) (y & 0xFF); ib++; byteSound[ib] = (byte) ((y >> 8) & 0xFF); ib++; } } } /* static final public void floatToByte(byte[] byteSound, float [] dbuf) { int bufsz = dbuf.length; int ib=0; if(bigEndian) { for(int i=0;i<bufsz;i++) { short y = (short)(32767. * dbuf[i]); byteSound[ib] = (byte)(y >> 8); ib++; byteSound[ib] = (byte)(y & 0x00ff); ib++; } } else { for(int i=0;i<bufsz;i++) { short y = (short)(32767. * dbuf[i]); byteSound[ib] = (byte)(y & 0x00ff); ib++; byteSound[ib] = (byte)(y >> 8); ib++; } } }*/ /** Convert byte array to float array. @param dbuf User provided float array to return result in. @param dbuf User provided byte array to convert. @param bufsz Sumber of float samples to write. */ static final public void byteToFloat(float[] dbuf, byte[] bbuf, int bufsz) { if (bigEndian) { int ib = 0; for (int i = 0; i < bufsz; i++) { float sample = ((bbuf[ib + 0] << 8) | (bbuf[ib + 1] & 0xFF)) / 32768.0F; ib += 2; dbuf[i] = sample; } } else { int ib = 0; for (int i = 0; i < bufsz; i++) { float sample = ((bbuf[ib] & 0xFF) | (bbuf[ib + 1] << 8)) / 32768.0F; ib += 2; dbuf[i] = sample; } } } } /* static final public void byteToFloat(float [] dbuf, byte[] bbuf,int bufsz) { int ib=0; if(bigEndian) { for(int i=0;i<bufsz;i++) { short y = bbuf[ib]; y = (short)(y<<8); y += bbuf[ib+1]; ib += 2; dbuf[i] = y/32768.f; } } else { for(int i=0;i<bufsz;i++) { short y = (short)bbuf[ib+1]; y = (short)(y<<8); y += bbuf[ib]; ib += 2; dbuf[i] = y/32768.f; } } } } */