我将DSP效果应用到我的原始音频输入,这是以字节[2]数组格式。要应用DSP我需要将字节数组转换为浮点数组并返回。要将字节数组转换为浮点数组,请使用以下代码:
private byte[] buffer;
/*
*
* Converts a byte[2] to a float, in LITTLE_ENDIAN format
*/
private float getFloat(byte argB1, byte argB2) {
return (float) (argB1 | (argB2 << 8));
}
for (int i = 0; i < N / 2; i++) {
curSample[i] = getFloat(buffer[i * 2],
buffer[i * 2 + 1]);}
我需要将curSample(这是一个浮点数组)转换回byte [2]数组。怎么做?
答案 0 :(得分:2)
要将字节数组转换为float数组,您正在执行的操作不会考虑字节顺序。
int myInt = (byte[0] << 24) |
((byte[1] & 0xff) << 16) |
((byte[2] & 0xff) << 8) |
(byte[3] & 0xff);
或(对于little-endian):
int myInt = (byte[3] << 24) |
((byte[2] & 0xff) << 16) |
((byte[1] & 0xff) << 8) |
(byte[0] & 0xff);
然后你可以使用它转换为浮点数:
float asFloat = Float.intBitsToFloat(asInt);
将其转换回字节数组
int j=0;
byte[] byteArray=new byte[4];
int data=Float.floatToIntBits(asFloat);
byteArray[j++]=(byte)(data>>>24);
byteArray[j++]=(byte)(data>>>16);
byteArray[j++]=(byte)(data>>>8);
byteArray[j++]=(byte)(data>>>0);
我还找到了一些类似的信息here