2011-09-04 1 views
1

자바에서 잭 오디오를 사용하는 방법을 찾으려고합니다. 나는 자바의 포트에서 자바 애플리케이션으로 오디오를 얻기 위해 jnajack을 기반으로 래퍼를 만들었지 만 (원래의 jnajack은 잭 1.9.8과 작동하지 않습니다), 데이터를 조작 할 방법을 찾을 수 없습니다. 나는 뻥 'List<FloatBuffer>, 그리고 더 많은 데이터 조작을 위해 그것을 byte[]로 변환해야합니다.floatbuffer에서 byte []로 변환

간단하게 말하자면 ... 먼저 파일에 데이터를 저장하고 싶지만 java 사운드 api는 TargetDataLine 및/또는 byte[]의 데이터 만 저장할 수 있습니다. FloatBufferbyte[]으로 변환하려면 어떻게해야합니까? 내가 찾을 수있는 유일한 방법은 floatbuffer.get(float[])이고 어떻게 든 (모르겠다) float[]byte[]으로 변환합니다.

+0

'floatbuffer'클래스의 정확한 이름은 무엇입니까? – bmargulies

답변

1

그래서 jnajack은 표준 java 사운드 API 함수와 다른 오디오 데이터 표현을 사용합니다.

나는 jnajack의 사양에 표시되지 않습니다,하지만 나는 내가 자바 사운드 API 너무 익숙하지 해요 -1 사이의 수레 오디오 및 1

을 대표하는 상상,하지만 난 그것을 상상할 수 사용 바이트 즉

-128 사이의 127, 당신은 내가 byte converted = Float.valueOf(original * 128).byteValue() 될 것이라고이 작업을 수행 할 수있는 깔끔한 방법을 말하고 싶지만 128

곱하여 두 사이의 변환해야 할 것이었다. 필요할 경우 더 빨리 수행해야하는 프리미티브 만 사용하여이 작업을 수행 할 수 있습니다.

+0

jnajack이 아닌 다른 오디오 데이터 표현을 사용합니다! jnajack (jjack도 마찬가지 임)은 Jack Audio Tool의 JNA/JNI입니다. 문제. –

+0

'Float.valueOf (original * 128) .byteValue()'는'(byte) (original * 128)'과 정확히 동일합니다. 그러나 '1.0'값은'-128'으로 바뀝니다. –

4

FloatBufferbyte[]으로 변환하려면 어떻게해야합니까?

FloatBuffer floatbuffer; 

ByteBuffer byteBuffer = ByteBuffer.allocate(floatbuffer.capacity() * 4); 
byteBuffer.asFloatBuffer().put(floatbuffer); 
byte[] bytearray = byteBuffer.array(); 

당신은 byte order 변경해야 할 수도 있습니다.