2013-01-25 60 views
0

即時將DSP效果應用於以byte [2]數組格式存儲的原始音頻輸入。要應用DSP,我需要將字節數組轉換爲float陣列和back.To轉換字節數組浮動陣列我使用以下代碼:如何將float數組轉換爲byte [2]數組並返回java

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(這是一個浮陣列)轉換回字節[2] array.How這樣做呢?

+1

浮點數是一個32位的值,它是如何從只有兩個字節轉換成它?可能你應該使用floatToIntBits來將float轉換爲字節數組。 – h22

回答

2

要將字節數組轉換爲浮點數組,您所做的不考慮字節序。

int myInt = (byte[0] << 24) | 
((byte[1] & 0xff) << 16) | 
((byte[2] & 0xff) << 8) | 
(byte[3] & 0xff); 

或(對於小端):

int myInt = (byte[3] << 24) | 
((byte[2] & 0xff) << 16) | 
((byte[1] & 0xff) << 8) | 
(byte[0] & 0xff); 

然後你就可以使用這個轉換爲float:

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

+0

和應用一些DSP後的'asFloat' ...我如何將浮點數轉換回字節? –

相關問題