2013-01-25 2 views
0

메가 바이트 [2] 배열 형식의 원시 오디오 입력에 DSP 효과를 적용하는 방법. DSP를 적용하려면 바이트 배열을 float로 변환해야합니다. I는 [2] 그렇게 array.How 바이트까지이다 (float 배열) curSample 다시 변환해야플로트 배열을 바이트 [2] 배열로 변환하고 자바

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]);} 

: 배열 back.To 난 다음 코드를 사용하여 어레이를 부유 ​​바이트 배열 변환?

+1

플로트는 32 비트 값입니다. 어떻게 2 바이트에서 변환 할 수 있습니까? 아마도 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

그리고 이후에'asFloat'에 몇몇 DSP를 적용 ... 어떻게 Float을 바이트로 변환 할 수 있습니까? –

관련 문제