2

純粋なサウンド データを含むバイト配列があります。整数に変換したい。サンプルあたりのビット数は 16 です。フレーム レートは 44100 です。しかし、それを整数に変換する方法は?

4

3 に答える 3

3

明確にするために:整数を形成するための のbyte[]ペアを含む がありますか?byteこのように: {int1B1, int1B2, int2B1, int2B2, int3B1, int3B2, ...}?

その場合、次のようにそれらを整数に組み立てることができます。

int[] audio = new int[byteArray.length/2];
for (int i = 0; i < byteArray.length/2; i++) { // read in the samples
  int lsb = byteArray[i * 2 + 0] & 0xFF; // "least significant byte"
  int msb = byteArray[i * 2 + 1] & 0xFF; // "most significant byte"
  audio[i] = (msb << 8) + lsb;
}

もちろん、そのループを 1 行のループに最適化することもできますが、読みやすくするためにその方法をお勧めします。また、データのエンディアンによって、ub1 と ub2 を切り替えることができます。

于 2012-08-27T09:59:01.957 に答える
1
long value = 0;
for (int i = 0; i < by.length; i++)
{
   value += ((long) by[i] & 0xffL) << (8 * i);
}

文字列を作成して Integer valueOf または Integer コンストラクターを使用することもできます

于 2012-08-27T09:57:41.600 に答える
1

これを for ループ内で使用してみてください。それは私にとってはうまくいきました(署名付き16ビットサンプル、リトルエンディアン)。

//16 bit, litte endian (the first is the least significant)
int LSB=(int)b[i*2] & 0xff;
int MSB=(int)b[1+i*2] & 0xff;

x[i]=((MSB<<8)+LSB);
if((b[i*2+1)]&0x80)!=0)//Check the sign
       x[i]=-(65536-x[i]);
于 2012-08-27T10:40:15.167 に答える