< prev index next >

src/java.desktop/share/classes/com/sun/media/sound/AudioFloatConverter.java

Print this page




  72             if (lsb_bits == 0)
  73                 mask = (byte) 0x00;
  74             else if (lsb_bits == 1)
  75                 mask = (byte) 0x80;
  76             else if (lsb_bits == 2)
  77                 mask = (byte) 0xC0;
  78             else if (lsb_bits == 3)
  79                 mask = (byte) 0xE0;
  80             else if (lsb_bits == 4)
  81                 mask = (byte) 0xF0;
  82             else if (lsb_bits == 5)
  83                 mask = (byte) 0xF8;
  84             else if (lsb_bits == 6)
  85                 mask = (byte) 0xFC;
  86             else if (lsb_bits == 7)
  87                 mask = (byte) 0xFE;
  88             else
  89                 mask = (byte) 0xFF;
  90         }
  91 

  92         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
  93                 byte[] out_buff, int out_offset) {
  94             byte[] ret = converter.toByteArray(in_buff, in_offset, in_len,
  95                     out_buff, out_offset);
  96 
  97             int out_offset_end = in_len * stepsize;
  98             for (int i = out_offset + offset; i < out_offset_end; i += stepsize) {
  99                 out_buff[i] = (byte) (out_buff[i] & mask);
 100             }
 101 
 102             return ret;
 103         }
 104 

 105         public float[] toFloatArray(byte[] in_buff, int in_offset,
 106                 float[] out_buff, int out_offset, int out_len) {
 107             if (mask_buffer == null || mask_buffer.length < in_buff.length)
 108                 mask_buffer = new byte[in_buff.length];
 109             System.arraycopy(in_buff, 0, mask_buffer, 0, in_buff.length);
 110             int in_offset_end = out_len * stepsize;
 111             for (int i = in_offset + offset; i < in_offset_end; i += stepsize) {
 112                 mask_buffer[i] = (byte) (mask_buffer[i] & mask);
 113             }
 114             float[] ret = converter.toFloatArray(mask_buffer, in_offset,
 115                     out_buff, out_offset, out_len);
 116             return ret;
 117         }
 118 
 119     }
 120 
 121     /***************************************************************************
 122      *
 123      * 64 bit float, little/big-endian
 124      *
 125      **************************************************************************/
 126 
 127     // PCM 64 bit float, little-endian
 128     private static class AudioFloatConversion64L extends AudioFloatConverter {
 129         ByteBuffer bytebuffer = null;
 130 
 131         DoubleBuffer floatbuffer = null;
 132 
 133         double[] double_buff = null;
 134 

 135         public float[] toFloatArray(byte[] in_buff, int in_offset,
 136                 float[] out_buff, int out_offset, int out_len) {
 137             int in_len = out_len * 8;
 138             if (bytebuffer == null || bytebuffer.capacity() < in_len) {
 139                 bytebuffer = ByteBuffer.allocate(in_len).order(
 140                         ByteOrder.LITTLE_ENDIAN);
 141                 floatbuffer = bytebuffer.asDoubleBuffer();
 142             }
 143             bytebuffer.position(0);
 144             floatbuffer.position(0);
 145             bytebuffer.put(in_buff, in_offset, in_len);
 146             if (double_buff == null
 147                     || double_buff.length < out_len + out_offset)
 148                 double_buff = new double[out_len + out_offset];
 149             floatbuffer.get(double_buff, out_offset, out_len);
 150             int out_offset_end = out_offset + out_len;
 151             for (int i = out_offset; i < out_offset_end; i++) {
 152                 out_buff[i] = (float) double_buff[i];
 153             }
 154             return out_buff;
 155         }
 156 

 157         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 158                 byte[] out_buff, int out_offset) {
 159             int out_len = in_len * 8;
 160             if (bytebuffer == null || bytebuffer.capacity() < out_len) {
 161                 bytebuffer = ByteBuffer.allocate(out_len).order(
 162                         ByteOrder.LITTLE_ENDIAN);
 163                 floatbuffer = bytebuffer.asDoubleBuffer();
 164             }
 165             floatbuffer.position(0);
 166             bytebuffer.position(0);
 167             if (double_buff == null || double_buff.length < in_offset + in_len)
 168                 double_buff = new double[in_offset + in_len];
 169             int in_offset_end = in_offset + in_len;
 170             for (int i = in_offset; i < in_offset_end; i++) {
 171                 double_buff[i] = in_buff[i];
 172             }
 173             floatbuffer.put(double_buff, in_offset, in_len);
 174             bytebuffer.get(out_buff, out_offset, out_len);
 175             return out_buff;
 176         }
 177     }
 178 
 179     // PCM 64 bit float, big-endian
 180     private static class AudioFloatConversion64B extends AudioFloatConverter {
 181         ByteBuffer bytebuffer = null;
 182 
 183         DoubleBuffer floatbuffer = null;
 184 
 185         double[] double_buff = null;
 186 

 187         public float[] toFloatArray(byte[] in_buff, int in_offset,
 188                 float[] out_buff, int out_offset, int out_len) {
 189             int in_len = out_len * 8;
 190             if (bytebuffer == null || bytebuffer.capacity() < in_len) {
 191                 bytebuffer = ByteBuffer.allocate(in_len).order(
 192                         ByteOrder.BIG_ENDIAN);
 193                 floatbuffer = bytebuffer.asDoubleBuffer();
 194             }
 195             bytebuffer.position(0);
 196             floatbuffer.position(0);
 197             bytebuffer.put(in_buff, in_offset, in_len);
 198             if (double_buff == null
 199                     || double_buff.length < out_len + out_offset)
 200                 double_buff = new double[out_len + out_offset];
 201             floatbuffer.get(double_buff, out_offset, out_len);
 202             int out_offset_end = out_offset + out_len;
 203             for (int i = out_offset; i < out_offset_end; i++) {
 204                 out_buff[i] = (float) double_buff[i];
 205             }
 206             return out_buff;
 207         }
 208 

 209         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 210                 byte[] out_buff, int out_offset) {
 211             int out_len = in_len * 8;
 212             if (bytebuffer == null || bytebuffer.capacity() < out_len) {
 213                 bytebuffer = ByteBuffer.allocate(out_len).order(
 214                         ByteOrder.BIG_ENDIAN);
 215                 floatbuffer = bytebuffer.asDoubleBuffer();
 216             }
 217             floatbuffer.position(0);
 218             bytebuffer.position(0);
 219             if (double_buff == null || double_buff.length < in_offset + in_len)
 220                 double_buff = new double[in_offset + in_len];
 221             int in_offset_end = in_offset + in_len;
 222             for (int i = in_offset; i < in_offset_end; i++) {
 223                 double_buff[i] = in_buff[i];
 224             }
 225             floatbuffer.put(double_buff, in_offset, in_len);
 226             bytebuffer.get(out_buff, out_offset, out_len);
 227             return out_buff;
 228         }
 229     }
 230 
 231     /***************************************************************************
 232      *
 233      * 32 bit float, little/big-endian
 234      *
 235      **************************************************************************/
 236 
 237     // PCM 32 bit float, little-endian
 238     private static class AudioFloatConversion32L extends AudioFloatConverter {
 239         ByteBuffer bytebuffer = null;
 240 
 241         FloatBuffer floatbuffer = null;
 242 

 243         public float[] toFloatArray(byte[] in_buff, int in_offset,
 244                 float[] out_buff, int out_offset, int out_len) {
 245             int in_len = out_len * 4;
 246             if (bytebuffer == null || bytebuffer.capacity() < in_len) {
 247                 bytebuffer = ByteBuffer.allocate(in_len).order(
 248                         ByteOrder.LITTLE_ENDIAN);
 249                 floatbuffer = bytebuffer.asFloatBuffer();
 250             }
 251             bytebuffer.position(0);
 252             floatbuffer.position(0);
 253             bytebuffer.put(in_buff, in_offset, in_len);
 254             floatbuffer.get(out_buff, out_offset, out_len);
 255             return out_buff;
 256         }
 257 

 258         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 259                 byte[] out_buff, int out_offset) {
 260             int out_len = in_len * 4;
 261             if (bytebuffer == null || bytebuffer.capacity() < out_len) {
 262                 bytebuffer = ByteBuffer.allocate(out_len).order(
 263                         ByteOrder.LITTLE_ENDIAN);
 264                 floatbuffer = bytebuffer.asFloatBuffer();
 265             }
 266             floatbuffer.position(0);
 267             bytebuffer.position(0);
 268             floatbuffer.put(in_buff, in_offset, in_len);
 269             bytebuffer.get(out_buff, out_offset, out_len);
 270             return out_buff;
 271         }
 272     }
 273 
 274     // PCM 32 bit float, big-endian
 275     private static class AudioFloatConversion32B extends AudioFloatConverter {
 276         ByteBuffer bytebuffer = null;
 277 
 278         FloatBuffer floatbuffer = null;
 279 

 280         public float[] toFloatArray(byte[] in_buff, int in_offset,
 281                 float[] out_buff, int out_offset, int out_len) {
 282             int in_len = out_len * 4;
 283             if (bytebuffer == null || bytebuffer.capacity() < in_len) {
 284                 bytebuffer = ByteBuffer.allocate(in_len).order(
 285                         ByteOrder.BIG_ENDIAN);
 286                 floatbuffer = bytebuffer.asFloatBuffer();
 287             }
 288             bytebuffer.position(0);
 289             floatbuffer.position(0);
 290             bytebuffer.put(in_buff, in_offset, in_len);
 291             floatbuffer.get(out_buff, out_offset, out_len);
 292             return out_buff;
 293         }
 294 

 295         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 296                 byte[] out_buff, int out_offset) {
 297             int out_len = in_len * 4;
 298             if (bytebuffer == null || bytebuffer.capacity() < out_len) {
 299                 bytebuffer = ByteBuffer.allocate(out_len).order(
 300                         ByteOrder.BIG_ENDIAN);
 301                 floatbuffer = bytebuffer.asFloatBuffer();
 302             }
 303             floatbuffer.position(0);
 304             bytebuffer.position(0);
 305             floatbuffer.put(in_buff, in_offset, in_len);
 306             bytebuffer.get(out_buff, out_offset, out_len);
 307             return out_buff;
 308         }
 309     }
 310 
 311     /***************************************************************************
 312      *
 313      * 8 bit signed/unsigned
 314      *
 315      **************************************************************************/
 316 
 317     // PCM 8 bit, signed
 318     private static class AudioFloatConversion8S extends AudioFloatConverter {

 319         public float[] toFloatArray(byte[] in_buff, int in_offset,
 320                 float[] out_buff, int out_offset, int out_len) {
 321             int ix = in_offset;
 322             int ox = out_offset;
 323             for (int i = 0; i < out_len; i++) {
 324                 byte x = in_buff[ix++];
 325                 out_buff[ox++] = x > 0 ? x / 127.0f : x / 128.0f;
 326             }
 327             return out_buff;
 328         }
 329 

 330         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 331                 byte[] out_buff, int out_offset) {
 332             int ix = in_offset;
 333             int ox = out_offset;
 334             for (int i = 0; i < in_len; i++) {
 335                 final float x = in_buff[ix++];
 336                 out_buff[ox++] = (byte) (x > 0 ? x * 127 : x * 128);
 337             }
 338             return out_buff;
 339         }
 340     }
 341 
 342     // PCM 8 bit, unsigned
 343     private static class AudioFloatConversion8U extends AudioFloatConverter {

 344         public float[] toFloatArray(byte[] in_buff, int in_offset,
 345                 float[] out_buff, int out_offset, int out_len) {
 346             int ix = in_offset;
 347             int ox = out_offset;
 348             for (int i = 0; i < out_len; i++) {
 349                 byte x = (byte) (in_buff[ix++] - 128);
 350                 out_buff[ox++] = x > 0 ? x / 127.0f : x / 128.0f;
 351             }
 352             return out_buff;
 353         }
 354 

 355         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 356                 byte[] out_buff, int out_offset) {
 357             int ix = in_offset;
 358             int ox = out_offset;
 359             for (int i = 0; i < in_len; i++) {
 360                 float x = in_buff[ix++];
 361                 out_buff[ox++] = (byte) (128 + (x > 0 ? x * 127 : x * 128));
 362             }
 363             return out_buff;
 364         }
 365     }
 366 
 367     /***************************************************************************
 368      *
 369      * 16 bit signed/unsigned, little/big-endian
 370      *
 371      **************************************************************************/
 372 
 373     // PCM 16 bit, signed, little-endian
 374     private static class AudioFloatConversion16SL extends AudioFloatConverter {

 375         public float[] toFloatArray(byte[] in_buff, int in_offset,
 376                 float[] out_buff, int out_offset, int out_len) {
 377             int ix = in_offset;
 378             int len = out_offset + out_len;
 379             for (int ox = out_offset; ox < len; ox++) {
 380                 short x = (short) (in_buff[ix++] & 0xFF | (in_buff[ix++] << 8));
 381                 out_buff[ox] = x > 0 ? x / 32767.0f : x / 32768.0f;
 382             }
 383             return out_buff;
 384         }
 385 

 386         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 387                 byte[] out_buff, int out_offset) {
 388             int ox = out_offset;
 389             int len = in_offset + in_len;
 390             for (int ix = in_offset; ix < len; ix++) {
 391                 float f = in_buff[ix];
 392                 short x = (short) (f > 0 ? f * 32767 : f * 32768);
 393                 out_buff[ox++] = (byte) x;
 394                 out_buff[ox++] = (byte) (x >>> 8);
 395             }
 396             return out_buff;
 397         }
 398     }
 399 
 400     // PCM 16 bit, signed, big-endian
 401     private static class AudioFloatConversion16SB extends AudioFloatConverter {

 402         public float[] toFloatArray(byte[] in_buff, int in_offset,
 403                 float[] out_buff, int out_offset, int out_len) {
 404             int ix = in_offset;
 405             int ox = out_offset;
 406             for (int i = 0; i < out_len; i++) {
 407                 short x = (short) ((in_buff[ix++] << 8) | (in_buff[ix++] & 0xFF));
 408                 out_buff[ox++] = x > 0 ? x / 32767.0f : x / 32768.0f;
 409             }
 410             return out_buff;
 411         }
 412 

 413         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 414                 byte[] out_buff, int out_offset) {
 415             int ix = in_offset;
 416             int ox = out_offset;
 417             for (int i = 0; i < in_len; i++) {
 418                 float f = in_buff[ix++];
 419                 short x = (short) (f > 0 ? f * 32767.0f : f * 32768.0f);
 420                 out_buff[ox++] = (byte) (x >>> 8);
 421                 out_buff[ox++] = (byte) x;
 422             }
 423             return out_buff;
 424         }
 425     }
 426 
 427     // PCM 16 bit, unsigned, little-endian
 428     private static class AudioFloatConversion16UL extends AudioFloatConverter {

 429         public float[] toFloatArray(byte[] in_buff, int in_offset,
 430                 float[] out_buff, int out_offset, int out_len) {
 431             int ix = in_offset;
 432             int ox = out_offset;
 433             for (int i = 0; i < out_len; i++) {
 434                 int x = (in_buff[ix++] & 0xFF) | ((in_buff[ix++] & 0xFF) << 8);
 435                 x -= 32768;
 436                 out_buff[ox++] = x > 0 ? x / 32767.0f : x / 32768.0f;
 437             }
 438             return out_buff;
 439         }
 440 

 441         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 442                 byte[] out_buff, int out_offset) {
 443             int ix = in_offset;
 444             int ox = out_offset;
 445             for (int i = 0; i < in_len; i++) {
 446                 float f = in_buff[ix++];
 447                 int x = 32768 + (int) (f > 0 ? f * 32767 : f * 32768);
 448                 out_buff[ox++] = (byte) x;
 449                 out_buff[ox++] = (byte) (x >>> 8);
 450             }
 451             return out_buff;
 452         }
 453     }
 454 
 455     // PCM 16 bit, unsigned, big-endian
 456     private static class AudioFloatConversion16UB extends AudioFloatConverter {

 457         public float[] toFloatArray(byte[] in_buff, int in_offset,
 458                 float[] out_buff, int out_offset, int out_len) {
 459             int ix = in_offset;
 460             int ox = out_offset;
 461             for (int i = 0; i < out_len; i++) {
 462                 int x = ((in_buff[ix++] & 0xFF) << 8) | (in_buff[ix++] & 0xFF);
 463                 x -= 32768;
 464                 out_buff[ox++] = x > 0 ? x / 32767.0f : x / 32768.0f;
 465             }
 466             return out_buff;
 467         }
 468 

 469         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 470                 byte[] out_buff, int out_offset) {
 471             int ix = in_offset;
 472             int ox = out_offset;
 473             for (int i = 0; i < in_len; i++) {
 474                 float f = in_buff[ix++];
 475                 int x = 32768 + (int) (f > 0 ? f * 32767 : f * 32768);
 476                 out_buff[ox++] = (byte) (x >>> 8);
 477                 out_buff[ox++] = (byte) x;
 478             }
 479             return out_buff;
 480         }
 481     }
 482 
 483     /***************************************************************************
 484      *
 485      * 24 bit signed/unsigned, little/big-endian
 486      *
 487      **************************************************************************/
 488 
 489     // PCM 24 bit, signed, little-endian
 490     private static class AudioFloatConversion24SL extends AudioFloatConverter {

 491         public float[] toFloatArray(byte[] in_buff, int in_offset,
 492                 float[] out_buff, int out_offset, int out_len) {
 493             int ix = in_offset;
 494             int ox = out_offset;
 495             for (int i = 0; i < out_len; i++) {
 496                 int x = (in_buff[ix++] & 0xFF) | ((in_buff[ix++] & 0xFF) << 8)
 497                         | ((in_buff[ix++] & 0xFF) << 16);
 498                 if (x > 0x7FFFFF)
 499                     x -= 0x1000000;
 500                 out_buff[ox++] = x > 0 ? x / 8388607.0f : x / 8388608.0f;
 501             }
 502             return out_buff;
 503         }
 504 

 505         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 506                 byte[] out_buff, int out_offset) {
 507             int ix = in_offset;
 508             int ox = out_offset;
 509             for (int i = 0; i < in_len; i++) {
 510                 float f = in_buff[ix++];
 511                 int x = (int) (f > 0 ? f * 8388607.0f : f * 8388608.0f);
 512                 if (x < 0)
 513                     x += 0x1000000;
 514                 out_buff[ox++] = (byte) x;
 515                 out_buff[ox++] = (byte) (x >>> 8);
 516                 out_buff[ox++] = (byte) (x >>> 16);
 517             }
 518             return out_buff;
 519         }
 520     }
 521 
 522     // PCM 24 bit, signed, big-endian
 523     private static class AudioFloatConversion24SB extends AudioFloatConverter {

 524         public float[] toFloatArray(byte[] in_buff, int in_offset,
 525                 float[] out_buff, int out_offset, int out_len) {
 526             int ix = in_offset;
 527             int ox = out_offset;
 528             for (int i = 0; i < out_len; i++) {
 529                 int x = ((in_buff[ix++] & 0xFF) << 16)
 530                         | ((in_buff[ix++] & 0xFF) << 8) | (in_buff[ix++] & 0xFF);
 531                 if (x > 0x7FFFFF)
 532                     x -= 0x1000000;
 533                 out_buff[ox++] = x > 0 ? x / 8388607.0f : x / 8388608.0f;
 534             }
 535             return out_buff;
 536         }
 537 

 538         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 539                 byte[] out_buff, int out_offset) {
 540             int ix = in_offset;
 541             int ox = out_offset;
 542             for (int i = 0; i < in_len; i++) {
 543                 float f = in_buff[ix++];
 544                 int x = (int) (f > 0 ? f * 8388607.0f : f * 8388608.0f);
 545                 if (x < 0)
 546                     x += 0x1000000;
 547                 out_buff[ox++] = (byte) (x >>> 16);
 548                 out_buff[ox++] = (byte) (x >>> 8);
 549                 out_buff[ox++] = (byte) x;
 550             }
 551             return out_buff;
 552         }
 553     }
 554 
 555     // PCM 24 bit, unsigned, little-endian
 556     private static class AudioFloatConversion24UL extends AudioFloatConverter {

 557         public float[] toFloatArray(byte[] in_buff, int in_offset,
 558                 float[] out_buff, int out_offset, int out_len) {
 559             int ix = in_offset;
 560             int ox = out_offset;
 561             for (int i = 0; i < out_len; i++) {
 562                 int x = (in_buff[ix++] & 0xFF) | ((in_buff[ix++] & 0xFF) << 8)
 563                         | ((in_buff[ix++] & 0xFF) << 16);
 564                 x -= 0x800000;
 565                 out_buff[ox++] = x > 0 ? x / 8388607.0f : x / 8388608.0f;
 566             }
 567             return out_buff;
 568         }
 569 

 570         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 571                 byte[] out_buff, int out_offset) {
 572             int ix = in_offset;
 573             int ox = out_offset;
 574             for (int i = 0; i < in_len; i++) {
 575                 float f = in_buff[ix++];
 576                 int x = (int) (f > 0 ? f * 8388607.0f : f * 8388608.0f);
 577                 x += 0x800000;
 578                 out_buff[ox++] = (byte) x;
 579                 out_buff[ox++] = (byte) (x >>> 8);
 580                 out_buff[ox++] = (byte) (x >>> 16);
 581             }
 582             return out_buff;
 583         }
 584     }
 585 
 586     // PCM 24 bit, unsigned, big-endian
 587     private static class AudioFloatConversion24UB extends AudioFloatConverter {

 588         public float[] toFloatArray(byte[] in_buff, int in_offset,
 589                 float[] out_buff, int out_offset, int out_len) {
 590             int ix = in_offset;
 591             int ox = out_offset;
 592             for (int i = 0; i < out_len; i++) {
 593                 int x = ((in_buff[ix++] & 0xFF) << 16)
 594                         | ((in_buff[ix++] & 0xFF) << 8) | (in_buff[ix++] & 0xFF);
 595                 x -= 0x800000;
 596                 out_buff[ox++] = x > 0 ? x / 8388607.0f : x / 8388608.0f;
 597             }
 598             return out_buff;
 599         }
 600 

 601         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 602                 byte[] out_buff, int out_offset) {
 603             int ix = in_offset;
 604             int ox = out_offset;
 605             for (int i = 0; i < in_len; i++) {
 606                 float f = in_buff[ix++];
 607                 int x = (int) (f > 0 ? f * 8388607.0f : f * 8388608.0f);
 608                 x += 8388608;
 609                 out_buff[ox++] = (byte) (x >>> 16);
 610                 out_buff[ox++] = (byte) (x >>> 8);
 611                 out_buff[ox++] = (byte) x;
 612             }
 613             return out_buff;
 614         }
 615     }
 616 
 617     /***************************************************************************
 618      *
 619      * 32 bit signed/unsigned, little/big-endian
 620      *
 621      **************************************************************************/
 622 
 623     // PCM 32 bit, signed, little-endian
 624     private static class AudioFloatConversion32SL extends AudioFloatConverter {

 625         public float[] toFloatArray(byte[] in_buff, int in_offset,
 626                 float[] out_buff, int out_offset, int out_len) {
 627             int ix = in_offset;
 628             int ox = out_offset;
 629             for (int i = 0; i < out_len; i++) {
 630                 int x = (in_buff[ix++] & 0xFF) | ((in_buff[ix++] & 0xFF) << 8) |
 631                         ((in_buff[ix++] & 0xFF) << 16) |
 632                         ((in_buff[ix++] & 0xFF) << 24);
 633                 out_buff[ox++] = x * (1.0f / (float)0x7FFFFFFF);
 634             }
 635             return out_buff;
 636         }
 637 

 638         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 639                 byte[] out_buff, int out_offset) {
 640             int ix = in_offset;
 641             int ox = out_offset;
 642             for (int i = 0; i < in_len; i++) {
 643                 int x = (int) (in_buff[ix++] * (float)0x7FFFFFFF);
 644                 out_buff[ox++] = (byte) x;
 645                 out_buff[ox++] = (byte) (x >>> 8);
 646                 out_buff[ox++] = (byte) (x >>> 16);
 647                 out_buff[ox++] = (byte) (x >>> 24);
 648             }
 649             return out_buff;
 650         }
 651     }
 652 
 653     // PCM 32 bit, signed, big-endian
 654     private static class AudioFloatConversion32SB extends AudioFloatConverter {

 655         public float[] toFloatArray(byte[] in_buff, int in_offset,
 656                 float[] out_buff, int out_offset, int out_len) {
 657             int ix = in_offset;
 658             int ox = out_offset;
 659             for (int i = 0; i < out_len; i++) {
 660                 int x = ((in_buff[ix++] & 0xFF) << 24) |
 661                         ((in_buff[ix++] & 0xFF) << 16) |
 662                         ((in_buff[ix++] & 0xFF) << 8) | (in_buff[ix++] & 0xFF);
 663                 out_buff[ox++] = x * (1.0f / (float)0x7FFFFFFF);
 664             }
 665             return out_buff;
 666         }
 667 

 668         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 669                 byte[] out_buff, int out_offset) {
 670             int ix = in_offset;
 671             int ox = out_offset;
 672             for (int i = 0; i < in_len; i++) {
 673                 int x = (int) (in_buff[ix++] * (float)0x7FFFFFFF);
 674                 out_buff[ox++] = (byte) (x >>> 24);
 675                 out_buff[ox++] = (byte) (x >>> 16);
 676                 out_buff[ox++] = (byte) (x >>> 8);
 677                 out_buff[ox++] = (byte) x;
 678             }
 679             return out_buff;
 680         }
 681     }
 682 
 683     // PCM 32 bit, unsigned, little-endian
 684     private static class AudioFloatConversion32UL extends AudioFloatConverter {

 685         public float[] toFloatArray(byte[] in_buff, int in_offset,
 686                 float[] out_buff, int out_offset, int out_len) {
 687             int ix = in_offset;
 688             int ox = out_offset;
 689             for (int i = 0; i < out_len; i++) {
 690                 int x = (in_buff[ix++] & 0xFF) | ((in_buff[ix++] & 0xFF) << 8) |
 691                         ((in_buff[ix++] & 0xFF) << 16) |
 692                         ((in_buff[ix++] & 0xFF) << 24);
 693                 x -= 0x80000000;
 694                 out_buff[ox++] = x * (1.0f / (float)0x7FFFFFFF);
 695             }
 696             return out_buff;
 697         }
 698 

 699         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 700                 byte[] out_buff, int out_offset) {
 701             int ix = in_offset;
 702             int ox = out_offset;
 703             for (int i = 0; i < in_len; i++) {
 704                 int x = (int) (in_buff[ix++] * (float)0x7FFFFFFF);
 705                 x += 0x80000000;
 706                 out_buff[ox++] = (byte) x;
 707                 out_buff[ox++] = (byte) (x >>> 8);
 708                 out_buff[ox++] = (byte) (x >>> 16);
 709                 out_buff[ox++] = (byte) (x >>> 24);
 710             }
 711             return out_buff;
 712         }
 713     }
 714 
 715     // PCM 32 bit, unsigned, big-endian
 716     private static class AudioFloatConversion32UB extends AudioFloatConverter {
 717 

 718         public float[] toFloatArray(byte[] in_buff, int in_offset,
 719                 float[] out_buff, int out_offset, int out_len) {
 720             int ix = in_offset;
 721             int ox = out_offset;
 722             for (int i = 0; i < out_len; i++) {
 723                 int x = ((in_buff[ix++] & 0xFF) << 24) |
 724                         ((in_buff[ix++] & 0xFF) << 16) |
 725                         ((in_buff[ix++] & 0xFF) << 8) | (in_buff[ix++] & 0xFF);
 726                 x -= 0x80000000;
 727                 out_buff[ox++] = x * (1.0f / (float)0x7FFFFFFF);
 728             }
 729             return out_buff;
 730         }
 731 

 732         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 733                 byte[] out_buff, int out_offset) {
 734             int ix = in_offset;
 735             int ox = out_offset;
 736             for (int i = 0; i < in_len; i++) {
 737                 int x = (int) (in_buff[ix++] * (float)0x7FFFFFFF);
 738                 x += 0x80000000;
 739                 out_buff[ox++] = (byte) (x >>> 24);
 740                 out_buff[ox++] = (byte) (x >>> 16);
 741                 out_buff[ox++] = (byte) (x >>> 8);
 742                 out_buff[ox++] = (byte) x;
 743             }
 744             return out_buff;
 745         }
 746     }
 747 
 748     /***************************************************************************
 749      *
 750      * 32+ bit signed/unsigned, little/big-endian
 751      *
 752      **************************************************************************/
 753 
 754     // PCM 32+ bit, signed, little-endian
 755     private static class AudioFloatConversion32xSL extends AudioFloatConverter {
 756 
 757         private final int xbytes;
 758 
 759         AudioFloatConversion32xSL(int xbytes) {
 760             this.xbytes = xbytes;
 761         }
 762 

 763         public float[] toFloatArray(byte[] in_buff, int in_offset,
 764                 float[] out_buff, int out_offset, int out_len) {
 765             int ix = in_offset;
 766             int ox = out_offset;
 767             for (int i = 0; i < out_len; i++) {
 768                 ix += xbytes;
 769                 int x = (in_buff[ix++] & 0xFF) | ((in_buff[ix++] & 0xFF) << 8)
 770                         | ((in_buff[ix++] & 0xFF) << 16)
 771                         | ((in_buff[ix++] & 0xFF) << 24);
 772                 out_buff[ox++] = x * (1.0f / (float)0x7FFFFFFF);
 773             }
 774             return out_buff;
 775         }
 776 

 777         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 778                 byte[] out_buff, int out_offset) {
 779             int ix = in_offset;
 780             int ox = out_offset;
 781             for (int i = 0; i < in_len; i++) {
 782                 int x = (int) (in_buff[ix++] * (float)0x7FFFFFFF);
 783                 for (int j = 0; j < xbytes; j++) {
 784                     out_buff[ox++] = 0;
 785                 }
 786                 out_buff[ox++] = (byte) x;
 787                 out_buff[ox++] = (byte) (x >>> 8);
 788                 out_buff[ox++] = (byte) (x >>> 16);
 789                 out_buff[ox++] = (byte) (x >>> 24);
 790             }
 791             return out_buff;
 792         }
 793     }
 794 
 795     // PCM 32+ bit, signed, big-endian
 796     private static class AudioFloatConversion32xSB extends AudioFloatConverter {
 797 
 798         private final int xbytes;
 799 
 800         AudioFloatConversion32xSB(int xbytes) {
 801             this.xbytes = xbytes;
 802         }
 803 

 804         public float[] toFloatArray(byte[] in_buff, int in_offset,
 805                 float[] out_buff, int out_offset, int out_len) {
 806             int ix = in_offset;
 807             int ox = out_offset;
 808             for (int i = 0; i < out_len; i++) {
 809                 int x = ((in_buff[ix++] & 0xFF) << 24)
 810                         | ((in_buff[ix++] & 0xFF) << 16)
 811                         | ((in_buff[ix++] & 0xFF) << 8)
 812                         | (in_buff[ix++] & 0xFF);
 813                 ix += xbytes;
 814                 out_buff[ox++] = x * (1.0f / (float)0x7FFFFFFF);
 815             }
 816             return out_buff;
 817         }
 818 

 819         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 820                 byte[] out_buff, int out_offset) {
 821             int ix = in_offset;
 822             int ox = out_offset;
 823             for (int i = 0; i < in_len; i++) {
 824                 int x = (int) (in_buff[ix++] * (float)0x7FFFFFFF);
 825                 out_buff[ox++] = (byte) (x >>> 24);
 826                 out_buff[ox++] = (byte) (x >>> 16);
 827                 out_buff[ox++] = (byte) (x >>> 8);
 828                 out_buff[ox++] = (byte) x;
 829                 for (int j = 0; j < xbytes; j++) {
 830                     out_buff[ox++] = 0;
 831                 }
 832             }
 833             return out_buff;
 834         }
 835     }
 836 
 837     // PCM 32+ bit, unsigned, little-endian
 838     private static class AudioFloatConversion32xUL extends AudioFloatConverter {
 839 
 840         private final int xbytes;
 841 
 842         AudioFloatConversion32xUL(int xbytes) {
 843             this.xbytes = xbytes;
 844         }
 845 

 846         public float[] toFloatArray(byte[] in_buff, int in_offset,
 847                 float[] out_buff, int out_offset, int out_len) {
 848             int ix = in_offset;
 849             int ox = out_offset;
 850             for (int i = 0; i < out_len; i++) {
 851                 ix += xbytes;
 852                 int x = (in_buff[ix++] & 0xFF) | ((in_buff[ix++] & 0xFF) << 8)
 853                         | ((in_buff[ix++] & 0xFF) << 16)
 854                         | ((in_buff[ix++] & 0xFF) << 24);
 855                 x -= 0x80000000;
 856                 out_buff[ox++] = x * (1.0f / (float)0x7FFFFFFF);
 857             }
 858             return out_buff;
 859         }
 860 

 861         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 862                 byte[] out_buff, int out_offset) {
 863             int ix = in_offset;
 864             int ox = out_offset;
 865             for (int i = 0; i < in_len; i++) {
 866                 int x = (int) (in_buff[ix++] * (float)0x7FFFFFFF);
 867                 x += 0x80000000;
 868                 for (int j = 0; j < xbytes; j++) {
 869                     out_buff[ox++] = 0;
 870                 }
 871                 out_buff[ox++] = (byte) x;
 872                 out_buff[ox++] = (byte) (x >>> 8);
 873                 out_buff[ox++] = (byte) (x >>> 16);
 874                 out_buff[ox++] = (byte) (x >>> 24);
 875             }
 876             return out_buff;
 877         }
 878     }
 879 
 880     // PCM 32+ bit, unsigned, big-endian
 881     private static class AudioFloatConversion32xUB extends AudioFloatConverter {
 882 
 883         private final int xbytes;
 884 
 885         AudioFloatConversion32xUB(int xbytes) {
 886             this.xbytes = xbytes;
 887         }
 888 

 889         public float[] toFloatArray(byte[] in_buff, int in_offset,
 890                 float[] out_buff, int out_offset, int out_len) {
 891             int ix = in_offset;
 892             int ox = out_offset;
 893             for (int i = 0; i < out_len; i++) {
 894                 int x = ((in_buff[ix++] & 0xFF) << 24) |
 895                         ((in_buff[ix++] & 0xFF) << 16) |
 896                         ((in_buff[ix++] & 0xFF) << 8) | (in_buff[ix++] & 0xFF);
 897                 ix += xbytes;
 898                 x -= 0x80000000;
 899                 out_buff[ox++] = x * (1.0f / 2147483647.0f);
 900             }
 901             return out_buff;
 902         }
 903 

 904         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 905                 byte[] out_buff, int out_offset) {
 906             int ix = in_offset;
 907             int ox = out_offset;
 908             for (int i = 0; i < in_len; i++) {
 909                 int x = (int) (in_buff[ix++] * 2147483647.0f);
 910                 x += 0x80000000;
 911                 out_buff[ox++] = (byte) (x >>> 24);
 912                 out_buff[ox++] = (byte) (x >>> 16);
 913                 out_buff[ox++] = (byte) (x >>> 8);
 914                 out_buff[ox++] = (byte) x;
 915                 for (int j = 0; j < xbytes; j++) {
 916                     out_buff[ox++] = 0;
 917                 }
 918             }
 919             return out_buff;
 920         }
 921     }
 922 
 923     public static AudioFloatConverter getConverter(AudioFormat format) {




  72             if (lsb_bits == 0)
  73                 mask = (byte) 0x00;
  74             else if (lsb_bits == 1)
  75                 mask = (byte) 0x80;
  76             else if (lsb_bits == 2)
  77                 mask = (byte) 0xC0;
  78             else if (lsb_bits == 3)
  79                 mask = (byte) 0xE0;
  80             else if (lsb_bits == 4)
  81                 mask = (byte) 0xF0;
  82             else if (lsb_bits == 5)
  83                 mask = (byte) 0xF8;
  84             else if (lsb_bits == 6)
  85                 mask = (byte) 0xFC;
  86             else if (lsb_bits == 7)
  87                 mask = (byte) 0xFE;
  88             else
  89                 mask = (byte) 0xFF;
  90         }
  91 
  92         @Override
  93         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
  94                                   byte[] out_buff, int out_offset) {
  95             byte[] ret = converter.toByteArray(in_buff, in_offset, in_len,
  96                     out_buff, out_offset);
  97 
  98             int out_offset_end = in_len * stepsize;
  99             for (int i = out_offset + offset; i < out_offset_end; i += stepsize) {
 100                 out_buff[i] = (byte) (out_buff[i] & mask);
 101             }
 102 
 103             return ret;
 104         }
 105 
 106         @Override
 107         public float[] toFloatArray(byte[] in_buff, int in_offset,
 108                                     float[] out_buff, int out_offset, int out_len) {
 109             if (mask_buffer == null || mask_buffer.length < in_buff.length)
 110                 mask_buffer = new byte[in_buff.length];
 111             System.arraycopy(in_buff, 0, mask_buffer, 0, in_buff.length);
 112             int in_offset_end = out_len * stepsize;
 113             for (int i = in_offset + offset; i < in_offset_end; i += stepsize) {
 114                 mask_buffer[i] = (byte) (mask_buffer[i] & mask);
 115             }
 116             float[] ret = converter.toFloatArray(mask_buffer, in_offset,
 117                     out_buff, out_offset, out_len);
 118             return ret;
 119         }
 120 
 121     }
 122 
 123     /***************************************************************************
 124      *
 125      * 64 bit float, little/big-endian
 126      *
 127      **************************************************************************/
 128 
 129     // PCM 64 bit float, little-endian
 130     private static class AudioFloatConversion64L extends AudioFloatConverter {
 131         ByteBuffer bytebuffer = null;
 132 
 133         DoubleBuffer floatbuffer = null;
 134 
 135         double[] double_buff = null;
 136 
 137         @Override
 138         public float[] toFloatArray(byte[] in_buff, int in_offset,
 139                                     float[] out_buff, int out_offset, int out_len) {
 140             int in_len = out_len * 8;
 141             if (bytebuffer == null || bytebuffer.capacity() < in_len) {
 142                 bytebuffer = ByteBuffer.allocate(in_len).order(
 143                         ByteOrder.LITTLE_ENDIAN);
 144                 floatbuffer = bytebuffer.asDoubleBuffer();
 145             }
 146             bytebuffer.position(0);
 147             floatbuffer.position(0);
 148             bytebuffer.put(in_buff, in_offset, in_len);
 149             if (double_buff == null
 150                     || double_buff.length < out_len + out_offset)
 151                 double_buff = new double[out_len + out_offset];
 152             floatbuffer.get(double_buff, out_offset, out_len);
 153             int out_offset_end = out_offset + out_len;
 154             for (int i = out_offset; i < out_offset_end; i++) {
 155                 out_buff[i] = (float) double_buff[i];
 156             }
 157             return out_buff;
 158         }
 159 
 160         @Override
 161         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 162                                   byte[] out_buff, int out_offset) {
 163             int out_len = in_len * 8;
 164             if (bytebuffer == null || bytebuffer.capacity() < out_len) {
 165                 bytebuffer = ByteBuffer.allocate(out_len).order(
 166                         ByteOrder.LITTLE_ENDIAN);
 167                 floatbuffer = bytebuffer.asDoubleBuffer();
 168             }
 169             floatbuffer.position(0);
 170             bytebuffer.position(0);
 171             if (double_buff == null || double_buff.length < in_offset + in_len)
 172                 double_buff = new double[in_offset + in_len];
 173             int in_offset_end = in_offset + in_len;
 174             for (int i = in_offset; i < in_offset_end; i++) {
 175                 double_buff[i] = in_buff[i];
 176             }
 177             floatbuffer.put(double_buff, in_offset, in_len);
 178             bytebuffer.get(out_buff, out_offset, out_len);
 179             return out_buff;
 180         }
 181     }
 182 
 183     // PCM 64 bit float, big-endian
 184     private static class AudioFloatConversion64B extends AudioFloatConverter {
 185         ByteBuffer bytebuffer = null;
 186 
 187         DoubleBuffer floatbuffer = null;
 188 
 189         double[] double_buff = null;
 190 
 191         @Override
 192         public float[] toFloatArray(byte[] in_buff, int in_offset,
 193                                     float[] out_buff, int out_offset, int out_len) {
 194             int in_len = out_len * 8;
 195             if (bytebuffer == null || bytebuffer.capacity() < in_len) {
 196                 bytebuffer = ByteBuffer.allocate(in_len).order(
 197                         ByteOrder.BIG_ENDIAN);
 198                 floatbuffer = bytebuffer.asDoubleBuffer();
 199             }
 200             bytebuffer.position(0);
 201             floatbuffer.position(0);
 202             bytebuffer.put(in_buff, in_offset, in_len);
 203             if (double_buff == null
 204                     || double_buff.length < out_len + out_offset)
 205                 double_buff = new double[out_len + out_offset];
 206             floatbuffer.get(double_buff, out_offset, out_len);
 207             int out_offset_end = out_offset + out_len;
 208             for (int i = out_offset; i < out_offset_end; i++) {
 209                 out_buff[i] = (float) double_buff[i];
 210             }
 211             return out_buff;
 212         }
 213 
 214         @Override
 215         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 216                                   byte[] out_buff, int out_offset) {
 217             int out_len = in_len * 8;
 218             if (bytebuffer == null || bytebuffer.capacity() < out_len) {
 219                 bytebuffer = ByteBuffer.allocate(out_len).order(
 220                         ByteOrder.BIG_ENDIAN);
 221                 floatbuffer = bytebuffer.asDoubleBuffer();
 222             }
 223             floatbuffer.position(0);
 224             bytebuffer.position(0);
 225             if (double_buff == null || double_buff.length < in_offset + in_len)
 226                 double_buff = new double[in_offset + in_len];
 227             int in_offset_end = in_offset + in_len;
 228             for (int i = in_offset; i < in_offset_end; i++) {
 229                 double_buff[i] = in_buff[i];
 230             }
 231             floatbuffer.put(double_buff, in_offset, in_len);
 232             bytebuffer.get(out_buff, out_offset, out_len);
 233             return out_buff;
 234         }
 235     }
 236 
 237     /***************************************************************************
 238      *
 239      * 32 bit float, little/big-endian
 240      *
 241      **************************************************************************/
 242 
 243     // PCM 32 bit float, little-endian
 244     private static class AudioFloatConversion32L extends AudioFloatConverter {
 245         ByteBuffer bytebuffer = null;
 246 
 247         FloatBuffer floatbuffer = null;
 248 
 249         @Override
 250         public float[] toFloatArray(byte[] in_buff, int in_offset,
 251                                     float[] out_buff, int out_offset, int out_len) {
 252             int in_len = out_len * 4;
 253             if (bytebuffer == null || bytebuffer.capacity() < in_len) {
 254                 bytebuffer = ByteBuffer.allocate(in_len).order(
 255                         ByteOrder.LITTLE_ENDIAN);
 256                 floatbuffer = bytebuffer.asFloatBuffer();
 257             }
 258             bytebuffer.position(0);
 259             floatbuffer.position(0);
 260             bytebuffer.put(in_buff, in_offset, in_len);
 261             floatbuffer.get(out_buff, out_offset, out_len);
 262             return out_buff;
 263         }
 264 
 265         @Override
 266         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 267                                   byte[] out_buff, int out_offset) {
 268             int out_len = in_len * 4;
 269             if (bytebuffer == null || bytebuffer.capacity() < out_len) {
 270                 bytebuffer = ByteBuffer.allocate(out_len).order(
 271                         ByteOrder.LITTLE_ENDIAN);
 272                 floatbuffer = bytebuffer.asFloatBuffer();
 273             }
 274             floatbuffer.position(0);
 275             bytebuffer.position(0);
 276             floatbuffer.put(in_buff, in_offset, in_len);
 277             bytebuffer.get(out_buff, out_offset, out_len);
 278             return out_buff;
 279         }
 280     }
 281 
 282     // PCM 32 bit float, big-endian
 283     private static class AudioFloatConversion32B extends AudioFloatConverter {
 284         ByteBuffer bytebuffer = null;
 285 
 286         FloatBuffer floatbuffer = null;
 287 
 288         @Override
 289         public float[] toFloatArray(byte[] in_buff, int in_offset,
 290                                     float[] out_buff, int out_offset, int out_len) {
 291             int in_len = out_len * 4;
 292             if (bytebuffer == null || bytebuffer.capacity() < in_len) {
 293                 bytebuffer = ByteBuffer.allocate(in_len).order(
 294                         ByteOrder.BIG_ENDIAN);
 295                 floatbuffer = bytebuffer.asFloatBuffer();
 296             }
 297             bytebuffer.position(0);
 298             floatbuffer.position(0);
 299             bytebuffer.put(in_buff, in_offset, in_len);
 300             floatbuffer.get(out_buff, out_offset, out_len);
 301             return out_buff;
 302         }
 303 
 304         @Override
 305         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 306                                   byte[] out_buff, int out_offset) {
 307             int out_len = in_len * 4;
 308             if (bytebuffer == null || bytebuffer.capacity() < out_len) {
 309                 bytebuffer = ByteBuffer.allocate(out_len).order(
 310                         ByteOrder.BIG_ENDIAN);
 311                 floatbuffer = bytebuffer.asFloatBuffer();
 312             }
 313             floatbuffer.position(0);
 314             bytebuffer.position(0);
 315             floatbuffer.put(in_buff, in_offset, in_len);
 316             bytebuffer.get(out_buff, out_offset, out_len);
 317             return out_buff;
 318         }
 319     }
 320 
 321     /***************************************************************************
 322      *
 323      * 8 bit signed/unsigned
 324      *
 325      **************************************************************************/
 326 
 327     // PCM 8 bit, signed
 328     private static class AudioFloatConversion8S extends AudioFloatConverter {
 329         @Override
 330         public float[] toFloatArray(byte[] in_buff, int in_offset,
 331                                     float[] out_buff, int out_offset, int out_len) {
 332             int ix = in_offset;
 333             int ox = out_offset;
 334             for (int i = 0; i < out_len; i++) {
 335                 byte x = in_buff[ix++];
 336                 out_buff[ox++] = x > 0 ? x / 127.0f : x / 128.0f;
 337             }
 338             return out_buff;
 339         }
 340 
 341         @Override
 342         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 343                                   byte[] out_buff, int out_offset) {
 344             int ix = in_offset;
 345             int ox = out_offset;
 346             for (int i = 0; i < in_len; i++) {
 347                 final float x = in_buff[ix++];
 348                 out_buff[ox++] = (byte) (x > 0 ? x * 127 : x * 128);
 349             }
 350             return out_buff;
 351         }
 352     }
 353 
 354     // PCM 8 bit, unsigned
 355     private static class AudioFloatConversion8U extends AudioFloatConverter {
 356         @Override
 357         public float[] toFloatArray(byte[] in_buff, int in_offset,
 358                                     float[] out_buff, int out_offset, int out_len) {
 359             int ix = in_offset;
 360             int ox = out_offset;
 361             for (int i = 0; i < out_len; i++) {
 362                 byte x = (byte) (in_buff[ix++] - 128);
 363                 out_buff[ox++] = x > 0 ? x / 127.0f : x / 128.0f;
 364             }
 365             return out_buff;
 366         }
 367 
 368         @Override
 369         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 370                                   byte[] out_buff, int out_offset) {
 371             int ix = in_offset;
 372             int ox = out_offset;
 373             for (int i = 0; i < in_len; i++) {
 374                 float x = in_buff[ix++];
 375                 out_buff[ox++] = (byte) (128 + (x > 0 ? x * 127 : x * 128));
 376             }
 377             return out_buff;
 378         }
 379     }
 380 
 381     /***************************************************************************
 382      *
 383      * 16 bit signed/unsigned, little/big-endian
 384      *
 385      **************************************************************************/
 386 
 387     // PCM 16 bit, signed, little-endian
 388     private static class AudioFloatConversion16SL extends AudioFloatConverter {
 389         @Override
 390         public float[] toFloatArray(byte[] in_buff, int in_offset,
 391                                     float[] out_buff, int out_offset, int out_len) {
 392             int ix = in_offset;
 393             int len = out_offset + out_len;
 394             for (int ox = out_offset; ox < len; ox++) {
 395                 short x = (short) (in_buff[ix++] & 0xFF | (in_buff[ix++] << 8));
 396                 out_buff[ox] = x > 0 ? x / 32767.0f : x / 32768.0f;
 397             }
 398             return out_buff;
 399         }
 400 
 401         @Override
 402         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 403                                   byte[] out_buff, int out_offset) {
 404             int ox = out_offset;
 405             int len = in_offset + in_len;
 406             for (int ix = in_offset; ix < len; ix++) {
 407                 float f = in_buff[ix];
 408                 short x = (short) (f > 0 ? f * 32767 : f * 32768);
 409                 out_buff[ox++] = (byte) x;
 410                 out_buff[ox++] = (byte) (x >>> 8);
 411             }
 412             return out_buff;
 413         }
 414     }
 415 
 416     // PCM 16 bit, signed, big-endian
 417     private static class AudioFloatConversion16SB extends AudioFloatConverter {
 418         @Override
 419         public float[] toFloatArray(byte[] in_buff, int in_offset,
 420                                     float[] out_buff, int out_offset, int out_len) {
 421             int ix = in_offset;
 422             int ox = out_offset;
 423             for (int i = 0; i < out_len; i++) {
 424                 short x = (short) ((in_buff[ix++] << 8) | (in_buff[ix++] & 0xFF));
 425                 out_buff[ox++] = x > 0 ? x / 32767.0f : x / 32768.0f;
 426             }
 427             return out_buff;
 428         }
 429 
 430         @Override
 431         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 432                                   byte[] out_buff, int out_offset) {
 433             int ix = in_offset;
 434             int ox = out_offset;
 435             for (int i = 0; i < in_len; i++) {
 436                 float f = in_buff[ix++];
 437                 short x = (short) (f > 0 ? f * 32767.0f : f * 32768.0f);
 438                 out_buff[ox++] = (byte) (x >>> 8);
 439                 out_buff[ox++] = (byte) x;
 440             }
 441             return out_buff;
 442         }
 443     }
 444 
 445     // PCM 16 bit, unsigned, little-endian
 446     private static class AudioFloatConversion16UL extends AudioFloatConverter {
 447         @Override
 448         public float[] toFloatArray(byte[] in_buff, int in_offset,
 449                                     float[] out_buff, int out_offset, int out_len) {
 450             int ix = in_offset;
 451             int ox = out_offset;
 452             for (int i = 0; i < out_len; i++) {
 453                 int x = (in_buff[ix++] & 0xFF) | ((in_buff[ix++] & 0xFF) << 8);
 454                 x -= 32768;
 455                 out_buff[ox++] = x > 0 ? x / 32767.0f : x / 32768.0f;
 456             }
 457             return out_buff;
 458         }
 459 
 460         @Override
 461         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 462                                   byte[] out_buff, int out_offset) {
 463             int ix = in_offset;
 464             int ox = out_offset;
 465             for (int i = 0; i < in_len; i++) {
 466                 float f = in_buff[ix++];
 467                 int x = 32768 + (int) (f > 0 ? f * 32767 : f * 32768);
 468                 out_buff[ox++] = (byte) x;
 469                 out_buff[ox++] = (byte) (x >>> 8);
 470             }
 471             return out_buff;
 472         }
 473     }
 474 
 475     // PCM 16 bit, unsigned, big-endian
 476     private static class AudioFloatConversion16UB extends AudioFloatConverter {
 477         @Override
 478         public float[] toFloatArray(byte[] in_buff, int in_offset,
 479                                     float[] out_buff, int out_offset, int out_len) {
 480             int ix = in_offset;
 481             int ox = out_offset;
 482             for (int i = 0; i < out_len; i++) {
 483                 int x = ((in_buff[ix++] & 0xFF) << 8) | (in_buff[ix++] & 0xFF);
 484                 x -= 32768;
 485                 out_buff[ox++] = x > 0 ? x / 32767.0f : x / 32768.0f;
 486             }
 487             return out_buff;
 488         }
 489 
 490         @Override
 491         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 492                                   byte[] out_buff, int out_offset) {
 493             int ix = in_offset;
 494             int ox = out_offset;
 495             for (int i = 0; i < in_len; i++) {
 496                 float f = in_buff[ix++];
 497                 int x = 32768 + (int) (f > 0 ? f * 32767 : f * 32768);
 498                 out_buff[ox++] = (byte) (x >>> 8);
 499                 out_buff[ox++] = (byte) x;
 500             }
 501             return out_buff;
 502         }
 503     }
 504 
 505     /***************************************************************************
 506      *
 507      * 24 bit signed/unsigned, little/big-endian
 508      *
 509      **************************************************************************/
 510 
 511     // PCM 24 bit, signed, little-endian
 512     private static class AudioFloatConversion24SL extends AudioFloatConverter {
 513         @Override
 514         public float[] toFloatArray(byte[] in_buff, int in_offset,
 515                                     float[] out_buff, int out_offset, int out_len) {
 516             int ix = in_offset;
 517             int ox = out_offset;
 518             for (int i = 0; i < out_len; i++) {
 519                 int x = (in_buff[ix++] & 0xFF) | ((in_buff[ix++] & 0xFF) << 8)
 520                         | ((in_buff[ix++] & 0xFF) << 16);
 521                 if (x > 0x7FFFFF)
 522                     x -= 0x1000000;
 523                 out_buff[ox++] = x > 0 ? x / 8388607.0f : x / 8388608.0f;
 524             }
 525             return out_buff;
 526         }
 527 
 528         @Override
 529         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 530                                   byte[] out_buff, int out_offset) {
 531             int ix = in_offset;
 532             int ox = out_offset;
 533             for (int i = 0; i < in_len; i++) {
 534                 float f = in_buff[ix++];
 535                 int x = (int) (f > 0 ? f * 8388607.0f : f * 8388608.0f);
 536                 if (x < 0)
 537                     x += 0x1000000;
 538                 out_buff[ox++] = (byte) x;
 539                 out_buff[ox++] = (byte) (x >>> 8);
 540                 out_buff[ox++] = (byte) (x >>> 16);
 541             }
 542             return out_buff;
 543         }
 544     }
 545 
 546     // PCM 24 bit, signed, big-endian
 547     private static class AudioFloatConversion24SB extends AudioFloatConverter {
 548         @Override
 549         public float[] toFloatArray(byte[] in_buff, int in_offset,
 550                                     float[] out_buff, int out_offset, int out_len) {
 551             int ix = in_offset;
 552             int ox = out_offset;
 553             for (int i = 0; i < out_len; i++) {
 554                 int x = ((in_buff[ix++] & 0xFF) << 16)
 555                         | ((in_buff[ix++] & 0xFF) << 8) | (in_buff[ix++] & 0xFF);
 556                 if (x > 0x7FFFFF)
 557                     x -= 0x1000000;
 558                 out_buff[ox++] = x > 0 ? x / 8388607.0f : x / 8388608.0f;
 559             }
 560             return out_buff;
 561         }
 562 
 563         @Override
 564         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 565                                   byte[] out_buff, int out_offset) {
 566             int ix = in_offset;
 567             int ox = out_offset;
 568             for (int i = 0; i < in_len; i++) {
 569                 float f = in_buff[ix++];
 570                 int x = (int) (f > 0 ? f * 8388607.0f : f * 8388608.0f);
 571                 if (x < 0)
 572                     x += 0x1000000;
 573                 out_buff[ox++] = (byte) (x >>> 16);
 574                 out_buff[ox++] = (byte) (x >>> 8);
 575                 out_buff[ox++] = (byte) x;
 576             }
 577             return out_buff;
 578         }
 579     }
 580 
 581     // PCM 24 bit, unsigned, little-endian
 582     private static class AudioFloatConversion24UL extends AudioFloatConverter {
 583         @Override
 584         public float[] toFloatArray(byte[] in_buff, int in_offset,
 585                                     float[] out_buff, int out_offset, int out_len) {
 586             int ix = in_offset;
 587             int ox = out_offset;
 588             for (int i = 0; i < out_len; i++) {
 589                 int x = (in_buff[ix++] & 0xFF) | ((in_buff[ix++] & 0xFF) << 8)
 590                         | ((in_buff[ix++] & 0xFF) << 16);
 591                 x -= 0x800000;
 592                 out_buff[ox++] = x > 0 ? x / 8388607.0f : x / 8388608.0f;
 593             }
 594             return out_buff;
 595         }
 596 
 597         @Override
 598         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 599                                   byte[] out_buff, int out_offset) {
 600             int ix = in_offset;
 601             int ox = out_offset;
 602             for (int i = 0; i < in_len; i++) {
 603                 float f = in_buff[ix++];
 604                 int x = (int) (f > 0 ? f * 8388607.0f : f * 8388608.0f);
 605                 x += 0x800000;
 606                 out_buff[ox++] = (byte) x;
 607                 out_buff[ox++] = (byte) (x >>> 8);
 608                 out_buff[ox++] = (byte) (x >>> 16);
 609             }
 610             return out_buff;
 611         }
 612     }
 613 
 614     // PCM 24 bit, unsigned, big-endian
 615     private static class AudioFloatConversion24UB extends AudioFloatConverter {
 616         @Override
 617         public float[] toFloatArray(byte[] in_buff, int in_offset,
 618                                     float[] out_buff, int out_offset, int out_len) {
 619             int ix = in_offset;
 620             int ox = out_offset;
 621             for (int i = 0; i < out_len; i++) {
 622                 int x = ((in_buff[ix++] & 0xFF) << 16)
 623                         | ((in_buff[ix++] & 0xFF) << 8) | (in_buff[ix++] & 0xFF);
 624                 x -= 0x800000;
 625                 out_buff[ox++] = x > 0 ? x / 8388607.0f : x / 8388608.0f;
 626             }
 627             return out_buff;
 628         }
 629 
 630         @Override
 631         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 632                                   byte[] out_buff, int out_offset) {
 633             int ix = in_offset;
 634             int ox = out_offset;
 635             for (int i = 0; i < in_len; i++) {
 636                 float f = in_buff[ix++];
 637                 int x = (int) (f > 0 ? f * 8388607.0f : f * 8388608.0f);
 638                 x += 8388608;
 639                 out_buff[ox++] = (byte) (x >>> 16);
 640                 out_buff[ox++] = (byte) (x >>> 8);
 641                 out_buff[ox++] = (byte) x;
 642             }
 643             return out_buff;
 644         }
 645     }
 646 
 647     /***************************************************************************
 648      *
 649      * 32 bit signed/unsigned, little/big-endian
 650      *
 651      **************************************************************************/
 652 
 653     // PCM 32 bit, signed, little-endian
 654     private static class AudioFloatConversion32SL extends AudioFloatConverter {
 655         @Override
 656         public float[] toFloatArray(byte[] in_buff, int in_offset,
 657                                     float[] out_buff, int out_offset, int out_len) {
 658             int ix = in_offset;
 659             int ox = out_offset;
 660             for (int i = 0; i < out_len; i++) {
 661                 int x = (in_buff[ix++] & 0xFF) | ((in_buff[ix++] & 0xFF) << 8) |
 662                         ((in_buff[ix++] & 0xFF) << 16) |
 663                         ((in_buff[ix++] & 0xFF) << 24);
 664                 out_buff[ox++] = x * (1.0f / (float)0x7FFFFFFF);
 665             }
 666             return out_buff;
 667         }
 668 
 669         @Override
 670         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 671                                   byte[] out_buff, int out_offset) {
 672             int ix = in_offset;
 673             int ox = out_offset;
 674             for (int i = 0; i < in_len; i++) {
 675                 int x = (int) (in_buff[ix++] * (float)0x7FFFFFFF);
 676                 out_buff[ox++] = (byte) x;
 677                 out_buff[ox++] = (byte) (x >>> 8);
 678                 out_buff[ox++] = (byte) (x >>> 16);
 679                 out_buff[ox++] = (byte) (x >>> 24);
 680             }
 681             return out_buff;
 682         }
 683     }
 684 
 685     // PCM 32 bit, signed, big-endian
 686     private static class AudioFloatConversion32SB extends AudioFloatConverter {
 687         @Override
 688         public float[] toFloatArray(byte[] in_buff, int in_offset,
 689                                     float[] out_buff, int out_offset, int out_len) {
 690             int ix = in_offset;
 691             int ox = out_offset;
 692             for (int i = 0; i < out_len; i++) {
 693                 int x = ((in_buff[ix++] & 0xFF) << 24) |
 694                         ((in_buff[ix++] & 0xFF) << 16) |
 695                         ((in_buff[ix++] & 0xFF) << 8) | (in_buff[ix++] & 0xFF);
 696                 out_buff[ox++] = x * (1.0f / (float)0x7FFFFFFF);
 697             }
 698             return out_buff;
 699         }
 700 
 701         @Override
 702         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 703                                   byte[] out_buff, int out_offset) {
 704             int ix = in_offset;
 705             int ox = out_offset;
 706             for (int i = 0; i < in_len; i++) {
 707                 int x = (int) (in_buff[ix++] * (float)0x7FFFFFFF);
 708                 out_buff[ox++] = (byte) (x >>> 24);
 709                 out_buff[ox++] = (byte) (x >>> 16);
 710                 out_buff[ox++] = (byte) (x >>> 8);
 711                 out_buff[ox++] = (byte) x;
 712             }
 713             return out_buff;
 714         }
 715     }
 716 
 717     // PCM 32 bit, unsigned, little-endian
 718     private static class AudioFloatConversion32UL extends AudioFloatConverter {
 719         @Override
 720         public float[] toFloatArray(byte[] in_buff, int in_offset,
 721                                     float[] out_buff, int out_offset, int out_len) {
 722             int ix = in_offset;
 723             int ox = out_offset;
 724             for (int i = 0; i < out_len; i++) {
 725                 int x = (in_buff[ix++] & 0xFF) | ((in_buff[ix++] & 0xFF) << 8) |
 726                         ((in_buff[ix++] & 0xFF) << 16) |
 727                         ((in_buff[ix++] & 0xFF) << 24);
 728                 x -= 0x80000000;
 729                 out_buff[ox++] = x * (1.0f / (float)0x7FFFFFFF);
 730             }
 731             return out_buff;
 732         }
 733 
 734         @Override
 735         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 736                                   byte[] out_buff, int out_offset) {
 737             int ix = in_offset;
 738             int ox = out_offset;
 739             for (int i = 0; i < in_len; i++) {
 740                 int x = (int) (in_buff[ix++] * (float)0x7FFFFFFF);
 741                 x += 0x80000000;
 742                 out_buff[ox++] = (byte) x;
 743                 out_buff[ox++] = (byte) (x >>> 8);
 744                 out_buff[ox++] = (byte) (x >>> 16);
 745                 out_buff[ox++] = (byte) (x >>> 24);
 746             }
 747             return out_buff;
 748         }
 749     }
 750 
 751     // PCM 32 bit, unsigned, big-endian
 752     private static class AudioFloatConversion32UB extends AudioFloatConverter {
 753 
 754         @Override
 755         public float[] toFloatArray(byte[] in_buff, int in_offset,
 756                                     float[] out_buff, int out_offset, int out_len) {
 757             int ix = in_offset;
 758             int ox = out_offset;
 759             for (int i = 0; i < out_len; i++) {
 760                 int x = ((in_buff[ix++] & 0xFF) << 24) |
 761                         ((in_buff[ix++] & 0xFF) << 16) |
 762                         ((in_buff[ix++] & 0xFF) << 8) | (in_buff[ix++] & 0xFF);
 763                 x -= 0x80000000;
 764                 out_buff[ox++] = x * (1.0f / (float)0x7FFFFFFF);
 765             }
 766             return out_buff;
 767         }
 768 
 769         @Override
 770         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 771                                   byte[] out_buff, int out_offset) {
 772             int ix = in_offset;
 773             int ox = out_offset;
 774             for (int i = 0; i < in_len; i++) {
 775                 int x = (int) (in_buff[ix++] * (float)0x7FFFFFFF);
 776                 x += 0x80000000;
 777                 out_buff[ox++] = (byte) (x >>> 24);
 778                 out_buff[ox++] = (byte) (x >>> 16);
 779                 out_buff[ox++] = (byte) (x >>> 8);
 780                 out_buff[ox++] = (byte) x;
 781             }
 782             return out_buff;
 783         }
 784     }
 785 
 786     /***************************************************************************
 787      *
 788      * 32+ bit signed/unsigned, little/big-endian
 789      *
 790      **************************************************************************/
 791 
 792     // PCM 32+ bit, signed, little-endian
 793     private static class AudioFloatConversion32xSL extends AudioFloatConverter {
 794 
 795         private final int xbytes;
 796 
 797         AudioFloatConversion32xSL(int xbytes) {
 798             this.xbytes = xbytes;
 799         }
 800 
 801         @Override
 802         public float[] toFloatArray(byte[] in_buff, int in_offset,
 803                                     float[] out_buff, int out_offset, int out_len) {
 804             int ix = in_offset;
 805             int ox = out_offset;
 806             for (int i = 0; i < out_len; i++) {
 807                 ix += xbytes;
 808                 int x = (in_buff[ix++] & 0xFF) | ((in_buff[ix++] & 0xFF) << 8)
 809                         | ((in_buff[ix++] & 0xFF) << 16)
 810                         | ((in_buff[ix++] & 0xFF) << 24);
 811                 out_buff[ox++] = x * (1.0f / (float)0x7FFFFFFF);
 812             }
 813             return out_buff;
 814         }
 815 
 816         @Override
 817         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 818                                   byte[] out_buff, int out_offset) {
 819             int ix = in_offset;
 820             int ox = out_offset;
 821             for (int i = 0; i < in_len; i++) {
 822                 int x = (int) (in_buff[ix++] * (float)0x7FFFFFFF);
 823                 for (int j = 0; j < xbytes; j++) {
 824                     out_buff[ox++] = 0;
 825                 }
 826                 out_buff[ox++] = (byte) x;
 827                 out_buff[ox++] = (byte) (x >>> 8);
 828                 out_buff[ox++] = (byte) (x >>> 16);
 829                 out_buff[ox++] = (byte) (x >>> 24);
 830             }
 831             return out_buff;
 832         }
 833     }
 834 
 835     // PCM 32+ bit, signed, big-endian
 836     private static class AudioFloatConversion32xSB extends AudioFloatConverter {
 837 
 838         private final int xbytes;
 839 
 840         AudioFloatConversion32xSB(int xbytes) {
 841             this.xbytes = xbytes;
 842         }
 843 
 844         @Override
 845         public float[] toFloatArray(byte[] in_buff, int in_offset,
 846                                     float[] out_buff, int out_offset, int out_len) {
 847             int ix = in_offset;
 848             int ox = out_offset;
 849             for (int i = 0; i < out_len; i++) {
 850                 int x = ((in_buff[ix++] & 0xFF) << 24)
 851                         | ((in_buff[ix++] & 0xFF) << 16)
 852                         | ((in_buff[ix++] & 0xFF) << 8)
 853                         | (in_buff[ix++] & 0xFF);
 854                 ix += xbytes;
 855                 out_buff[ox++] = x * (1.0f / (float)0x7FFFFFFF);
 856             }
 857             return out_buff;
 858         }
 859 
 860         @Override
 861         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 862                                   byte[] out_buff, int out_offset) {
 863             int ix = in_offset;
 864             int ox = out_offset;
 865             for (int i = 0; i < in_len; i++) {
 866                 int x = (int) (in_buff[ix++] * (float)0x7FFFFFFF);
 867                 out_buff[ox++] = (byte) (x >>> 24);
 868                 out_buff[ox++] = (byte) (x >>> 16);
 869                 out_buff[ox++] = (byte) (x >>> 8);
 870                 out_buff[ox++] = (byte) x;
 871                 for (int j = 0; j < xbytes; j++) {
 872                     out_buff[ox++] = 0;
 873                 }
 874             }
 875             return out_buff;
 876         }
 877     }
 878 
 879     // PCM 32+ bit, unsigned, little-endian
 880     private static class AudioFloatConversion32xUL extends AudioFloatConverter {
 881 
 882         private final int xbytes;
 883 
 884         AudioFloatConversion32xUL(int xbytes) {
 885             this.xbytes = xbytes;
 886         }
 887 
 888         @Override
 889         public float[] toFloatArray(byte[] in_buff, int in_offset,
 890                                     float[] out_buff, int out_offset, int out_len) {
 891             int ix = in_offset;
 892             int ox = out_offset;
 893             for (int i = 0; i < out_len; i++) {
 894                 ix += xbytes;
 895                 int x = (in_buff[ix++] & 0xFF) | ((in_buff[ix++] & 0xFF) << 8)
 896                         | ((in_buff[ix++] & 0xFF) << 16)
 897                         | ((in_buff[ix++] & 0xFF) << 24);
 898                 x -= 0x80000000;
 899                 out_buff[ox++] = x * (1.0f / (float)0x7FFFFFFF);
 900             }
 901             return out_buff;
 902         }
 903 
 904         @Override
 905         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 906                                   byte[] out_buff, int out_offset) {
 907             int ix = in_offset;
 908             int ox = out_offset;
 909             for (int i = 0; i < in_len; i++) {
 910                 int x = (int) (in_buff[ix++] * (float)0x7FFFFFFF);
 911                 x += 0x80000000;
 912                 for (int j = 0; j < xbytes; j++) {
 913                     out_buff[ox++] = 0;
 914                 }
 915                 out_buff[ox++] = (byte) x;
 916                 out_buff[ox++] = (byte) (x >>> 8);
 917                 out_buff[ox++] = (byte) (x >>> 16);
 918                 out_buff[ox++] = (byte) (x >>> 24);
 919             }
 920             return out_buff;
 921         }
 922     }
 923 
 924     // PCM 32+ bit, unsigned, big-endian
 925     private static class AudioFloatConversion32xUB extends AudioFloatConverter {
 926 
 927         private final int xbytes;
 928 
 929         AudioFloatConversion32xUB(int xbytes) {
 930             this.xbytes = xbytes;
 931         }
 932 
 933         @Override
 934         public float[] toFloatArray(byte[] in_buff, int in_offset,
 935                                     float[] out_buff, int out_offset, int out_len) {
 936             int ix = in_offset;
 937             int ox = out_offset;
 938             for (int i = 0; i < out_len; i++) {
 939                 int x = ((in_buff[ix++] & 0xFF) << 24) |
 940                         ((in_buff[ix++] & 0xFF) << 16) |
 941                         ((in_buff[ix++] & 0xFF) << 8) | (in_buff[ix++] & 0xFF);
 942                 ix += xbytes;
 943                 x -= 0x80000000;
 944                 out_buff[ox++] = x * (1.0f / 2147483647.0f);
 945             }
 946             return out_buff;
 947         }
 948 
 949         @Override
 950         public byte[] toByteArray(float[] in_buff, int in_offset, int in_len,
 951                                   byte[] out_buff, int out_offset) {
 952             int ix = in_offset;
 953             int ox = out_offset;
 954             for (int i = 0; i < in_len; i++) {
 955                 int x = (int) (in_buff[ix++] * 2147483647.0f);
 956                 x += 0x80000000;
 957                 out_buff[ox++] = (byte) (x >>> 24);
 958                 out_buff[ox++] = (byte) (x >>> 16);
 959                 out_buff[ox++] = (byte) (x >>> 8);
 960                 out_buff[ox++] = (byte) x;
 961                 for (int j = 0; j < xbytes; j++) {
 962                     out_buff[ox++] = 0;
 963                 }
 964             }
 965             return out_buff;
 966         }
 967     }
 968 
 969     public static AudioFloatConverter getConverter(AudioFormat format) {


< prev index next >