2017-10-24 8 views
0

데이터를 바이트 배열에서 부동 배열로 변환하는 데 문제가 있습니다. 특정 작업 후에 바이트 배열로 다시 이동해야합니다.byte []를 AudioRecord에서 float []로 변환하는 방법?

내 응용 프로그램은 오디오를 기록하고 아무런 문제가 없습니다. 이제 필터도 포함하고 싶습니다. 필터를 위해 나는 모든 사람에게이 클래스를 사용할 발견

https://cardinalpeak.com/blog/a-c-class-to-implement-low-pass-high-pass-and-band-pass-filters/

여기에 자바로의 전환에 유래에 :

Implementing a High Pass filter to an audio signal

내가 필터 값을 부동 원하는 것을 알고있다. 내가 알고있는 방법을 사용하여, 심지어 stackoverflow에서 바이트에서 부동으로 변환에, 그리고 부동에서 바이트로,하지만 아무것도 작동했습니다. 이러한 방법은 내가 알고 있습니다

ByteArrayInputStream bufferIN = new ByteArrayInputStream(audioArray); 
DataInputStream dataIN = new DataInputStream(bufferIN); 
float[] floatAudio = new float[audioArray.length/4]; 
for (int i = 0; i < floatAudio.length; i++) { 
    floatAudio[i] = dataIN.readFloat(); 
} 


ByteArrayOutputStream bufferOUT = new ByteArrayOutputStream(); 
DataOutputStream dataOUT = new DataOutputStream(bufferOUT); 
for (float i : floatAudio) 
    dataOUT.writeFloat(i); 
audioArray = bufferOUT.toByteArray(); 

검색 내가 가지 audiorecord 하나의 바이트가 PCM 데이터이기 때문에 이중 작업을 수행하는이 토론을 찾을 수 있습니다.

How to convert 16-bit PCM audio byte-array to double or float array?

나는 그것을했다하지만 문제는 내가 바이트 부동의 변환, 오디오에, 보통의 방법으로 문제를 제공하기 때문에 계속하는 방법을 모르는 것입니다. 테스트를 위해 float에 바이트 변환을하고 float에 바이트 단위로 직후에 오디오가 왜곡 되었기 때문에 필터 클래스의 잘못이 아니라고 생각합니다. 그래서 내가 무엇을해야하니? AudioRecord 필드의 바이트를 처리 할 수 ​​있도록 올바른 변환은 무엇입니까?

나는 등록이 완료된 곳에서 내 코드의 일부를 남겨 두었다. (나는 선언문을 제거한다.

byte audioArray[] = new byte[dimBufferAR]; 

FileOutputStream audioOUT = null; 

try { 
    audioOUT = new FileOutputStream(pathFile); 

    while (REC) { 

     AR.read(audioArray, 0, dimBufferAR); 

     // Conversion should take place here 

     audioOUT.write(audioArray, 0, dimBufferAR); 
    } 

    audioOUT.close(); 

} 

감사합니다.

답변

0

시도 : .readFloat()에 대해 다음 4 바이트로 건너 뜁니다.

float[] floatAudio = new float[audioArray.length/4]; 
for (int i = 0; i < floatAudio.length; i=i) 
{ 
    floatAudio[i] = dataIN.readFloat(); 
    i += 4; 
} 
+0

안녕하세요. 저에게 답변 해 주셔서 감사합니다. 나는 당신의 아이디어를 구현했지만 불행하게도 효과가 없었습니다. 필터가 있거나없는 필터 모두. 결과는 삐걱 거리는 소리입니다. 나는 질문이있다. float []에서 byte []로, 내가 질문의 포스트에서 보여준 코드를 구현했습니다. 다른 것을 시도해야합니까, 아니면 괜찮습니까? 고맙습니다. – Fantastico

관련 문제