我有一个包含纯声音数据的字节数组。我想将其转换为整数。每个样本的位数是 16。帧速率是 44100。但是如何将其转换为整数?
问问题
2002 次
3 回答
3
只是为了澄清:你有一个byte[]
包含成对的byte
's来形成一个整数?就像这样:{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;
}
当然,您可以将该循环优化为单行循环,但我更喜欢这种方式以提高可读性。此外,根据数据的字节顺序,您可以切换 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 回答