Problem z odczytaniem Bitrate'u w plikach MP3

0

Witam!
Problem opisany w temacie polega dokładniej na tym, że czytając nagłówek pliku wszystko oprócz bitrate'u odczytuje poprawnie. Zwracane wyniki są błędne, czasem nawet zerowe. Kod odpowiedzialny za to:

public int getBitrate(){
byte bitrateX;
if(przeczytane){
bitrateX = (byte) (frameB[1] & (byte) 0xf0);

		switch(mpeg){
		case 1:
			switch(bitrateX){
			case (byte) 0x10: return 32;
			case (byte) 0x20: return 40;
			case (byte) 0x30: return 48;
			case (byte) 0x40: return 56;
			case (byte) 0x50: return 64;
			case (byte) 0x60: return 80;
			case (byte) 0x70: return 96;
			case (byte) 0x80: return 112;
			case (byte) 0x90: return 128;
			case (byte) 0xa0: return 160;
			case (byte) 0xb0: return 192;
			case (byte) 0xc0: return 224;
			case (byte) 0xd0: return 256;
			case (byte) 0xe0: return 320;
			}
		case 2:
			switch(bitrateX){
			case (byte) 0x10: return 8;
			case (byte) 0x20: return 16;
			case (byte) 0x30: return 24;
			case (byte) 0x40: return 32;
			case (byte) 0x50: return 40;
			case (byte) 0x60: return 48;
			case (byte) 0x70: return 56;
			case (byte) 0x80: return 64;
			case (byte) 0x90: return 80;
			case (byte) 0xa0: return 96;
			case (byte) 0xb0: return 112;
			case (byte) 0xc0: return 128;
			case (byte) 0xd0: return 144;
			case (byte) 0xe0: return 160;
			}
		}
	}
	return 0;
}
samo wczytywanie z pliku wygląda tak: char frame[] = new char[4]; strumien.read(frame, 0 , 4); charToByte(frame); przeczytane = true;

stereo = this.getStereo();
mpeg = this.getMPG();
bitrate = this.getBitrate();
padded = this.getPadding();
frequency = this.getFrequency();

konwertowanie char do byte'ów ma postać:

private byte[] charToByte(char[] tab){
for(int i=0; i<4; i++)
frameB[i] = (byte)tab[i];
return frameB;
}
</i>

0

Nie próbujesz aby odczytać plików zakodowanych przy użyciu zmiennego bitrate? (VBR). Wtedy wyniki mają prawo wyjść zerowe lub bezsensowne. Kod powinien uwzględniać nagłówek tak zakodowanego pliku.

0

Wiem o VBR dlatego zrobiłem to w ten sposób (Zwróć uwagę na główną część odczytywania):

char frame[] = new char[4];
strumien.read(frame, 0 , 4);
charToByte(frame);

Nagłówek znajduje się na początku pliku, więc powinno mi odczytać początek pliku... no chyba że się mylę to niech mnie ktoś poprawi.

Jak ktoś ma kawałek kodu - nie musi być w Javie i może go tu wrzucić to niech pomoże

1 użytkowników online, w tym zalogowanych: 0, gości: 1