2
我正在開發一個基於java的音頻項目,它需要我根據它們的數據(而不是文件擴展名)來確定音頻文件類型,而且我已經用MP3播放了一面牆。據我所知,MP3文件被分解成幀,其中每個幀有一個4字節的頭,包含11幀的幀同步和各種其他數據。現在我的代碼可以準確地識別WAVE文件,但是當我開始讀取測試MP3文件的字節時,我無法在任何地方找到11111111字節(11個幀同步位中的前8個)。無法讀取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