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>