저는 자바의 오디오 프로젝트에서 파일 확장명이 아닌 데이터를 기반으로 오디오 파일 유형을 결정해야하며 MP3로 벽을 치고 있습니다. 내가 이해하는 한, MP3 파일은 각 프레임이 프레임 동기화를위한 11과 다른 데이터의 모음을 포함하는 4 바이트 헤더를 갖는 프레임으로 나뉩니다. 지금은 내 코드가 WAVE 파일을 정확하게 식별 할 수 있지만 테스트 MP3 파일의 바이트를 읽기 시작하면 11111111 바이트 (처음 11 번째 프레임 동기 비트)를 찾을 수 없습니다.MP3 프레임 헤더 바이트를 읽을 수 없습니까?
try {
FileInputStream fis = new FileInputStream(f);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buff = new byte[11];
byte[] byteData;
int bytes = 0;
while ((bytes = fis.read(buff)) != -1) {
baos.write(buff, 0, buff.length);
}
byteData = baos.toByteArray();
fis.close();
baos.close();
if ((int)byteData[0] == 255) {
type = "MP3";
} else if (("" + (char)byteData[8] + (char)byteData[9] +
(char)byteData[10] + (char)byteData[11]) == "WAVE") {
type = "WAVE";
}
}
지금 제가 읽고있는 첫 번째 바이트는 '-1 -5 -78'입니다. 어떻게 든 while 루프를 종료하지 않습니다. 정보를 저장하는 방식에 오류가있을 수 있습니까? – Chris
예, 당신은 잘못하고 있습니다, 나는 내 대답을 편집 할 것입니다 ....하지만 처음에는 처음 11 바이트 만 읽으려는 의도입니까? – rolfl
예, 파일의 전체 내용은 다른 곳에서 읽습니다. 나는 현재 반환 된 바이트가 정확하다는 것을 깨달았습니다.'-1 -5'는 내가 찾고있는 11 비트를 포함하고 있습니다. 그러나 이것이 MP3 검증에 접근하는 가장 좋은 방법인지는 아직 확실하지 않습니다. – Chris