AudioInputStream에서 값을 가져 와서 바이트 []에 저장해야합니다. read (byte [])를 호출하면 -1이 리턴됩니다. 값을 정수로 읽을 수 있다면 byte []로 변환 할 수 있습니다. 문제 중 하나를 해결하려면 어떻게합니까?AudioInputStream to array
답변
를 얻을 직접있는 ByteArrayOutputStream에 읽거나 누구 요 수는 가장 좋은 방법은 AudioInputStream
를 얻을 수없는 조금도. 대신, 그냥 일반 InputStream
을 사용하십시오.
AudioInputStream
은 일반적으로 입력 스트림에서 첫 번째 바이트를 스트립하고 (서식 지정 데이터가 포함되어 있으므로) 해당 스트림의 프레임이나 샘플 만 제공합니다. 반면에 InputStream
을 사용하면 모든 바이트를 가져올 수 있습니다. 그런 다음 전체 데이터가 바이트 배열에 있으면 바이트 배열 (필요한 경우)에서 AudioInputStream
을 형성 할 수 있습니다.
업데이트]
사용 아파치 평민 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)
데이터가 포함 된 바이트 배열 또는 WAV 파일이 포함 된 바이트 배열을 정확하게 이해하는 것은 어렵습니다. 사운드 데이터 만 포함 된 바이트 배열은 매우 간단한 작업입니다. AudioInputStream에서 ByteArrayOutputStream으로 복사합니다.
두 번째 경우는 더 복잡합니다. 이 경우 AudioInputStream에서 ByteArrayOutputStream으로 읽은 다음 WAVE 헤더를 형성해야합니다. 나는 두 가지 예를 드릴 수 있습니다. 그들이 당신을 도울 수 있기를 바랍니다.
How to record audio to byte array - 웨이브 파일로 바이트 배열에 오디오를 녹음하는 예입니다.
How to detect sound - AudioInputStream 처리 방법을 보여줍니다.
read (byte [])가 -1을 반환하면 읽는 것이 더 이상 없음을 의미합니다. 사용중인 코드를 표시하면 아마도 입력 스트림을 잘못 구성했을 것입니다. – Kayaman
오디오 파일의 형식을 알려 주실 수 있습니까? 허용 된 형식이 아닐 수도 있습니다 (예 : 16 비트 대신 24 비트 또는 32 비트 인코딩). Java Tutorials에서 파일을 읽는 가장 좋은 예제 코드는 다음 섹션에서 다룹니다. http://docs.oracle.com/javase/tutorial/sound/converters.html "사운드 파일 읽기"섹션에서 –
AudioFormat format = new AudioFormat (44100, 16,1, true, false); 마이크를 사용하여 오디오를 캡쳐하고 값을 바이트로 읽으려고합니다 [] –