2014-02-28 3 views
1

AudioInputStream에서 값을 가져 와서 바이트 []에 저장해야합니다. read (byte [])를 호출하면 -1이 리턴됩니다. 값을 정수로 읽을 수 있다면 byte []로 변환 할 수 있습니다. 문제 중 하나를 해결하려면 어떻게합니까?AudioInputStream to array

+0

read (byte [])가 -1을 반환하면 읽는 것이 더 이상 없음을 의미합니다. 사용중인 코드를 표시하면 아마도 입력 스트림을 잘못 구성했을 것입니다. – Kayaman

+1

오디오 파일의 형식을 알려 주실 수 있습니까? 허용 된 형식이 아닐 수도 있습니다 (예 : 16 비트 대신 24 비트 또는 32 비트 인코딩). Java Tutorials에서 파일을 읽는 가장 좋은 예제 코드는 다음 섹션에서 다룹니다. http://docs.oracle.com/javase/tutorial/sound/converters.html "사운드 파일 읽기"섹션에서 –

+0

AudioFormat format = new AudioFormat (44100, 16,1, true, false); 마이크를 사용하여 오디오를 캡쳐하고 값을 바이트로 읽으려고합니다 [] –

답변

2

를 얻을 직접있는 ByteArrayOutputStream에 읽거나 누구 요 수는 가장 좋은 방법은 AudioInputStream를 얻을 수없는 조금도. 대신, 그냥 일반 InputStream을 사용하십시오.

AudioInputStream은 일반적으로 입력 스트림에서 첫 번째 바이트를 스트립하고 (서식 지정 데이터가 포함되어 있으므로) 해당 스트림의 프레임이나 샘플 만 제공합니다. 반면에 InputStream을 사용하면 모든 바이트를 가져올 수 있습니다. 그런 다음 전체 데이터가 바이트 배열에 있으면 바이트 배열 (필요한 경우)에서 AudioInputStream을 형성 할 수 있습니다.

0

업데이트]

사용 아파치 평민 IOUtils은 wav 파일에서 바이트를 읽을 수 있습니다.

 InputStream is = -> your FileInputStream 
     ByteArrayOutputStream os = new ByteArrayOutputStream(); 
     IOUtils.copy(is, os); 
     os.flush(); 
     os.close(); 

     byte[] ba = os.toByteArray(); 

당신은 의도가 byte[]에서 사운드 데이터를 저장하는 경우 거

java.io.IOException: stream length not specified 
at com.sun.media.sound.WaveFileWriter.write(Unknown Source) 
at javax.sound.sampled.AudioSystem.write(Unknown Source) 
+0

IOUtils.copy() 호출은 결코 반환되지 않습니다. 내가 지정한 구문을 사용했습니다. 커먼즈 버전 - 2.4. –

+0

이상합니다. 당신의 audioinputstream을 소모 할 수없는 것 같습니다 – Leo

+0

우리와 더 많은 코드를 공유 하시겠습니까? – Leo

0

데이터가 포함 된 바이트 배열 또는 WAV 파일이 포함 된 바이트 배열을 정확하게 이해하는 것은 어렵습니다. 사운드 데이터 만 포함 된 바이트 배열은 매우 간단한 작업입니다. AudioInputStream에서 ByteArrayOutputStream으로 복사합니다.

두 번째 경우는 더 복잡합니다. 이 경우 AudioInputStream에서 ByteArrayOutputStream으로 읽은 다음 WAVE 헤더를 형성해야합니다. 나는 두 가지 예를 드릴 수 있습니다. 그들이 당신을 도울 수 있기를 바랍니다.

How to record audio to byte array - 웨이브 파일로 바이트 배열에 오디오를 녹음하는 예입니다.

How to detect sound - AudioInputStream 처리 방법을 보여줍니다.