Skal virksomheder stå stærkere mod angreb og kunne udvikle sig, skal sikkerhed, drift og forretning tænkes sammen. Det er tanken bag Jysk IT’s ambition om at skabe en “sikker fremtid” for kunderne.
Hvordan passer udputtet ellers med indholdet af den mp3-fil du tester på - synes det passer fint her. Prøv at sende headeren fra din fil i HEX, sammen med udputtet af din analyse.
Hvad er der galt med den fine kode der ligger på før-nævnte hjemmeside ??? Jeg har lavet en MP3 fil vha. nero-burn, og den vises al information fra uden problemer ?!?
// due to lack of support of the .mp3 format // no "public" .mp3's should contain information // like this anyway... :) ((getBitrateIndex() & 15)!= 0) && ((getBitrateIndex() & 15)!= 15) && ((getFrequencyIndex() & 3)!= 3) && ((getEmphasisIndex() & 3)!= 2) ); } // isValidHeader
// this returns the MPEG version [1.0-2.5] float getVersion() { float table[4] = { 2.5, 0.0, 2.0, 1.0 };
// return modified value return table[getVersionIndex()]; } // getVersion
// this returns the Layer [1-3] int getLayer() { return ( 4 - getLayerIndex() ); } // getLayer
int getBitrate() { const int table[2][3][16] = { { //MPEG 2 & 2.5 {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96,112,128,144,160,0}, //Layer III {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96,112,128,144,160,0}, //Layer II {0, 32, 48, 56, 64, 80, 96,112,128,144,160,176,192,224,256,0} //Layer I },{ //MPEG 1 {0, 32, 40, 48, 56, 64, 80, 96,112,128,160,192,224,256,320,0}, //Layer III {0, 32, 48, 56, 64, 80, 96,112,128,160,192,224,256,320,384,0}, //Layer II {0, 32, 64, 96,128,160,192,224,256,288,320,352,384,416,448,0} //Layer I } };
// the bitrate is not only dependent of the bitrate index, // the bitrate also varies with the MPEG version and Layer version return table[(getVersionIndex() & 1)][(getLayerIndex() -1)][getBitrateIndex()]; } // getBitrate
unsigned int getFrequency() { unsigned int table[4][3] = { {32000, 16000, 8000}, //MPEG 2.5 { 0, 0, 0}, //reserved {22050, 24000, 16000}, //MPEG 2 {44100, 48000, 32000} //MPEG 1 }; // the frequency is not only dependent of the bitrate index, // the bitrate also varies with the MPEG version return table[getVersionIndex()][getFrequencyIndex()]; } // getFrequency
char *getMode(void) { switch(getModeIndex()) { case 1: return "Joint Stereo"; case 2: return "Dual Channel"; case 3: return "Single Channel"; } return "Stereo"; } // getMode
int main(int argc, char *argv[]) { FILE *mp3File; char mp3Hdr[4];
// Check if valid MP3 file. loadHeader(mp3Hdr); if (!isValidHeader()) { cprintf("Header for %s not valid.\r\n", argv[1]); return -1; }
// Then display all information about the MP3 file. cprintf("MP3 information for \'%s\':\r\n", argv[1]); cprintf("=====================%.*s==\r\n", strlen(argv[1]), "==============================");
Hvad mener du med at du selv skal skrive programmet der finder de fire bytes ??? De tre første statements (fra 'if argc < ...' til 'mp3File) != 1)' læser jo netop de første 4 bytes fra mp3 filen - det første er ikke engang nødvendigt, hvis du har fil-navnet et andet sted. (Jeg har blot ladet fil-navnet være første parameter til programmet.)
Jeg finder ikke et eneste sted hvor der bruges et "if" udtryk i kildekoden!
Jeg har bare gjort som der står på siden:
"The frame header is constituted by the very first four bytes (32bits) in a frame. The first eleven bits of a frame header are always set and they are called "frame sync". Therefore, you can search through the file for the first occurence of frame sync (meaning that you have to find a byte with a value of 255, and followed by a byte with its three most significant bits set). Then you read the whole header (all 32 bits). "
Ok jeg forstår nu. Jeg prøver det! Men hvorfor skriver han at man skal lede efter de 11 bits, hvis de også altid optræder som de 11 første. Med andre ord er du helt sikker på at de fire første bytes, altid er en mp3 header?
Nej, det er jeg ikke sikker på - men det passer på min fil. (Jeg vil tro problemet kun opstår når man har flere melodier i een MP3 fil.)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.