Mp3-Header auslesen (nicht die TAGS!)



  • ich hab noch einen funktionierenden VB-Code der genau diesen Kack macht, das problem is nur, das ich kein bisschen VB kann... der is auch gar nit so lang...soll ich den mal posten ? 🙄



  • CodeFinder schrieb:

    Gut wenn das :

    hätte mir eigentlich sofort auffallen sollen, als ich deine umgedrehten member gesehen hab ^^ das umdrehen allein reicht nicht wegen der blockweisen vertauschung

    'nicht reicht' ^^; was kann ich dann machen um den Schmand aufe Reihe zu bekommen ...irgend wie muss das doch gehen 😡

    indem du auf diesen union krams verzichtest und z.b. nen bitset verwendest.

    #include <bitset>
    // filestream fs öffnen etc. pp
    unsigned char bytes[4];
    fs.read((char*)bytes, 4);
    // char bytes von hand in nen long schieben
    unsigned long longbytes = 0;
    for(int i = 0; i < 3; ++i)
    {
     longbytes += bytes[i];
     longbytes <<= 8;
    }
    longbytes += bytes[3];
    std::bitset<32> bits(longbytes); // erzeugt ein bitset von long
    

    und _der_ header ist dann tatsächlich umgedreht 😉 syncframe is also auf bits 31-21 (bits[31] bis bits[21]).



  • muhaha, ok danke nochmal für deine Antwort, ich bin schon weiter...wenn ich ne Fkt fertig hab werde ich die mal posten 😉



  • Also habs jetzt raus, kannst den Code ja mal ausprobieren, bei mir funzt der einwandfrei, is n bissl anders gelößt; aber er läuft und der Rest is mir wurscht
    (ich weiß n bissl unschön: C und C++ gemixt aber egal 🤡 )

    ⚠ ACHTUNG: das ist nur eine Funktion, kein ganzes Proggy 😉

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    /***************************************************/
    
    // ASC - Audio Sound Channel
    #define ASC_UNKNOWN		(0x00)
    #define ASC_STEREO		(0x01)
    #define ASC_JOINT_STEREO	(0x02)
    #define ASC_DUAL_CHANNEL	(0x03)
    #define ASC_SINGLE_CHANNEL	(0x04)
    
    // EMPHASIS Modes
    #define EMPHASIS_UNKNOWN	(0x00)
    #define EMPHASIS_NONE		(0x01)
    #define EMPHASIS_50_15_MS	(0x02)
    #define EMPHASIS_CCITT_J_17	(0x03)
    
    typedef struct tagMP3COREHEADER // mp3core
    {	
    	long	lFileSize;		/* Bytes    */
    	long	lFirstFrameOffset;	/* Bytes    */
    	long	lTotalFrames;		/* Frames   */
    	long	lTrackLength;		/* Sekunden */
    	long	lBitrate;		/* kBit/s   */
    	long	lFrequence;		/* Hz       */
    	long	lMPEGVersion;
    	long	lMPEGLayer;
    	bool	fCRCProtected;
    	bool	fPadding;
    	bool	fPrivate;
    	bool	fCopyright;
    	bool	fOriginal;
    	bool	fErrorAppeared;
    	UINT	uiEmphasis;
    	UINT	uiSoundMode;
    
    } MP3COREHEADER, *PMP3COREHEADER/*, NEAR *NPMP3COREHEADER, FAR *LPMP3COREHEADER*/;
    
    bool GetMp3HeaderInformation(const PSTR pszFilepath, PMP3COREHEADER pMp3CoreHeader)
    {
    	// => Parameter überprüfen
    	if(pszFilepath == NULL || pMp3CoreHeader == NULL)
    		return (false);
    
    	// => Lokale Variablen
    	FILE	*pfMp3File;
    	int		iCharCode;
    	bool	fStatusFlag = false;
    
    	// => noch keine Fehler aufgetreten
    	pMp3CoreHeader->fErrorAppeared = false;
    
    	// => Datei öffnen
    	pfMp3File = fopen(pszFilepath, TEXT("rb"));
    	if(pfMp3File == NULL)
    	{
    		pMp3CoreHeader->fErrorAppeared = true;
    		return (false);
    	}
    
        // => Dateigröße bestimmen:
    	std::ifstream ifsMp3File(pszFilepath, std::ios::binary);
    	if(!ifsMp3File)
    
    		return (false);
    	ifsMp3File.seekg(0, std::ios::end);
    	pMp3CoreHeader->lFileSize = (long)ifsMp3File.tellg();
    	ifsMp3File.close();
    
    	// => Ersten Frame des MPEG 1 Layer III suchen
        do
    	{
    		iCharCode = fgetc(pfMp3File);
    		if(iCharCode == 255)
    		{
    			iCharCode = fgetc(pfMp3File);
    			if(tolower(iCharCode / 16) == 15)
    				fStatusFlag = true;
    
    		}
    	}
    	while(!fStatusFlag);
    
    	// => Den ersten Frame Header ermitteln
    	fpos_t fpMp3FilePos;
        fgetpos(pfMp3File, &fpMp3FilePos);
    	fpMp3FilePos -= 2;
        pMp3CoreHeader->lFirstFrameByteOffset = fpMp3FilePos;
    
    	// => MPEG Version ermitteln (1/2)
    	int iMPEGVersion = tolower(((iCharCode % 16) / 4) / 2);
    	switch(iMPEGVersion)
    	{
    		case 0:
    			pMp3CoreHeader->lMPEGVersion = 2L; // MPEG-2
    			break;
    		case 1:
    			pMp3CoreHeader->lMPEGVersion = 1L; // MPEG-1
    			break;
    		default:
    			pMp3CoreHeader->fErrorAppeared = true; // Unknown
    			break;
    	}
    
        // => MPEG Layer ermitteln
    	int iMPEGLayer = tolower((((iCharCode % 16) / 4) % 2) * 2 + (((iCharCode % 16) % 4) / 2));
    	switch(iMPEGLayer)
    	{
    		case 0:
    			pMp3CoreHeader->lMPEGLayer = 0; // Reserved
    			break;
    		case 1:
    			pMp3CoreHeader->lMPEGLayer = 3; // Layer III
    			break;
    		case 2:
    			pMp3CoreHeader->lMPEGLayer = 2; // Layer II
    			break;
    		case 3:
    			pMp3CoreHeader->lMPEGLayer = 1; // Layer I
    			break;
    		default:
    			pMp3CoreHeader->fErrorAppeared = true; // Unknown
    			break;
    	}
    
    	if(iMPEGLayer != 1)
    		return (true);
    
        // => CRC-Protection ermitteln
    	int iProtectionBit = tolower(((iCharCode % 16) % 4) % 2);
    	switch(iProtectionBit)
    	{
    		case 1:
    			pMp3CoreHeader->fCRCProtected = false; // CRC-Protection: No
    			break;
    		case 0:
    			pMp3CoreHeader->fCRCProtected = true; // CRC-Protection: Yes
    			break;
    		default:
    			pMp3CoreHeader->fErrorAppeared = true; // Unknown
    			break;
    	}
    
    	// => Das nächste Byte einlesen, um das 3. des Frame-Headers zu analysieren
    	iCharCode = fgetc(pfMp3File);
    
    	// => Bitrate ermitteln
    	int iBitrateTable[2][16] =
    	{
    		0x000,0x008,0x010,0x018,
    		0x020,0x040,0x050,0x038,
    		0x040,0x080,0x0A0,0x070,
    		0x080,0x100,0x140,0x000,
    		0x000,0x020,0x028,0x030,
    		0x038,0x040,0x050,0x060,
    		0x070,0x080,0x0A0,0x0C0,
    		0x0E0,0x100,0x140,0x000
    	};
    	pMp3CoreHeader->lBitrate = iBitrateTable[iMPEGVersion][(tolower(iCharCode / 16))]; // in Kbps
    
    	// => Frequenz ermitteln
    	long lFrequencyTable[2][4] =
    	{
    		0x05622,0x05DC0,0x03E80,0x00000,
    		0x0AC44,0x0BB80,0x07D00,0x00000
    	};
    	pMp3CoreHeader->lFrequence = lFrequencyTable[pMp3CoreHeader->lMPEGVersion][(tolower((iCharCode % 16) / 4))]; // in Hz    
    
    	// => Padding ermitteln
    	int iPaddingBit = tolower(((iCharCode % 16) % 4) / 2);
    	switch(iPaddingBit)
    	{
    		case 0:
    			pMp3CoreHeader->fPadding = false; // Padding: No
    			break;
    		case 1:
    			pMp3CoreHeader->fPadding = true; // Padding: Yes
    			break;
    		default:
    			pMp3CoreHeader->fErrorAppeared = true; // Unknown
    			break;
    	}
    
    	// => Private Bit ermitteln
        int iPrivateBit = tolower(((iCharCode % 16) % 4) % 2);
    	switch(iPrivateBit)
    	{
    		case 0:
    			pMp3CoreHeader->fPrivate = false; // Private: No
    			break;
    		case 1:
    			pMp3CoreHeader->fPrivate = true; // Private: Yes
    			break;
    		default:
    			pMp3CoreHeader->fErrorAppeared = true; // Unknown
    			break;
    	}
    
    	// => Das nächste Byte einlesen, um das 4. des Frame-Headers zu analysieren
        iCharCode = fgetc(pfMp3File);
    
    	// Sound Channel ermitteln
        int iChannelMode = tolower((iCharCode / 16) / 4);
    	switch(iChannelMode)
    	{
    		case 0:
    			pMp3CoreHeader->uiSoundMode = ASC_STEREO; // Stereo
    			break;
    		case 1:
    			pMp3CoreHeader->uiSoundMode = ASC_JOINT_STEREO; // Joint Stereo
    			break;
    		case 2:
    			pMp3CoreHeader->uiSoundMode = ASC_DUAL_CHANNEL; // Dual Channel
    			break;
    		case 3:
    			pMp3CoreHeader->uiSoundMode = ASC_SINGLE_CHANNEL; // Single Channel
    			break;
    		default:
    			pMp3CoreHeader->uiSoundMode = ASC_UNKNOWN; // Unknown
    			pMp3CoreHeader->fErrorAppeared = true;
    			break;
    	}
    
    	// => Copyright ermitteln
    	int iCopyrightBit = tolower(((iCharCode % 16) / 4) / 2);
    	switch(iCopyrightBit)
    	{
    		case 0:
    			pMp3CoreHeader->fCopyright = false; // Copyrighted: No
    			break;
    		case 1:
    			pMp3CoreHeader->fCopyright = true; // Copyrighted: Yes
    			break;
    		default:
    			pMp3CoreHeader->fErrorAppeared = true; // Unknown
    			break;
    	}
    
    	// => Originale Mp3 Datei
    	int iOriginalBit = tolower(((iCharCode % 16) / 4) % 2);
    	switch(iOriginalBit)
    	{
    		case 0:
    			pMp3CoreHeader->fOriginal = false; // Original: No
    			break;
    		case 1:
    			pMp3CoreHeader->fOriginal = true; // Original: Yes
    			break;
    		default:
    			pMp3CoreHeader->fErrorAppeared = true; // Unknown
    			break;
    	}
    
    	// => Emphasis ermitteln
    	int iEmphasis = tolower((iCharCode % 16) % 4);
    	switch(iEmphasis)
    	{
    		case 0:
    			pMp3CoreHeader->uiEmphasis = EMPHASIS_NONE; // Emphasis: None
    			break;
    		case 1:
    			pMp3CoreHeader->uiEmphasis = EMPHASIS_50_15_MS; // Emphasis: 50/15 ms
    			break;
    		case 3:
    			pMp3CoreHeader->uiEmphasis = EMPHASIS_CCITT_J_17; // Emphasis: CCITT J.17
    			break;
    		default:
    			pMp3CoreHeader->uiEmphasis = EMPHASIS_UNKNOWN; // Unknown
    			pMp3CoreHeader->fErrorAppeared = true;
    			break;
    	}
    
    	// => Frame-Size berechnen
    	long lFrameSize = (144000 * pMp3CoreHeader->lBitrate / pMp3CoreHeader->lFrequence) + iPaddingBit;
    
    	// => Anzahl der Frames
    	pMp3CoreHeader->lTotalFrames = (pMp3CoreHeader->lFileSize - pMp3CoreHeader->lFirstFrameByteOffset) / lFrameSize;
    
    	// => Track Länge in Sekunden
    	pMp3CoreHeader->lTrackLength = toupper(pMp3CoreHeader->lTotalFrames * 26 / 1000);
    
    	// => Datei Handle wieder schließen
    	fclose(pfMp3File);
    
    	return (!pMp3CoreHeader->fErrorAppeared);
    }
    
    /***************************************************/
    

    PS: Hab das ganze jetzt mal mit Flags gelößt; Also Emphasis und Sound-Modi, dann is das ganze n bissl universeller 😉

    hmm vll. was für die FAQ ? 😕



  • Hab noch 2 kleine Bugs gefunden:

    Das...

    // => Dateigröße bestimmen:
        std::ifstream ifsMp3File(pszFilepath, std::ios::binary);
        if(!ifsMp3File)
            return (false);
        ifsMp3File.seekg(0, std::ios::end);
        pMp3CoreHeader->lFileSize = (long)ifsMp3File.tellg();
        ifsMp3File.close();
    

    wird zu...

    // => Dateigröße bestimmen:
        std::ifstream ifsMp3File(pszFilepath, std::ios::binary);
        if(!ifsMp3File)
        {
            fclose(pfMp3File);
            return (false);
        }
        ifsMp3File.seekg(0, std::ios::end);
        pMp3CoreHeader->lFileSize = (long)ifsMp3File.tellg();
        ifsMp3File.close();
    

    -------------------------------------

    Das...

    if(iMPEGLayer != 1)
            return (true);
    

    wird zu...

    if(iMPEGLayer != 1)
        {
            fclose(pfMp3File);
            return (true); 
        }
    

    Bitte vielmals um Entschuldigung 🤡



  • öhm kann das sein dass du irgendwelche eigenen typen verwendet hast?

    bekomme ne tonne fehler!

    UINT = unsigned int? (UINT uiEmphasis;)

    PSTR = ? (const PSTR pszFilepath)

    und dann gibts ne tonne weiterer fehler. ein paar davon kommen sicher von dem hier, habe aber nicht alle angeschaut.



  • UINT und PSTR sind afaik WinAPI-typedefs für unsigned int bzw. char*.



  • soweit binich mittlerweile auch gekommen leider bekomm ich n crash wenn ich da stattdessen einfach unsigned int und char * schreibe.

    habe diese typedefs ausserdem in der winnt.h gefunden.

    da drin steht auch wo was von TEXT("rb"), sehe aber den sinn davon nicht.

    das TEXT... habich auch weggelassen und einfach "rb" geschrieben.

    die winnt.h kannich nicht inkludieren weil 1. muss das unter linux und windows funzen und 2. kommt dann noch n neuer fehler.

    schaut bei mir jetzt so aus:

    *.h:

    #pragma once
    #ifndef MP3_HEADER
    #define MP3_HEADER
    
    #include <iostream> 
    #include <fstream> 
    using namespace std; 
    
    /***************************************************/ 
    
    // ASC - Audio Sound Channel 
    #define ASC_UNKNOWN        (0x00) 
    #define ASC_STEREO        (0x01) 
    #define ASC_JOINT_STEREO    (0x02) 
    #define ASC_DUAL_CHANNEL    (0x03) 
    #define ASC_SINGLE_CHANNEL    (0x04) 
    
    // EMPHASIS Modes 
    #define EMPHASIS_UNKNOWN    (0x00) 
    #define EMPHASIS_NONE        (0x01) 
    #define EMPHASIS_50_15_MS    (0x02) 
    #define EMPHASIS_CCITT_J_17    (0x03) 
    
    typedef struct tagMP3COREHEADER // mp3core 
    {    
        long    lFileSize;        /* Bytes    */ 
        long    /*lFirstFrameOffset;*/ lFirstFrameByteOffset;    /* Bytes    */ 
        long    lTotalFrames;        /* Frames   */ 
        long    lTrackLength;        /* Sekunden */ 
        long    lBitrate;        /* kBit/s   */ 
        long    lFrequence;        /* Hz       */ 
        long    lMPEGVersion; 
        long    lMPEGLayer; 
        bool    fCRCProtected; 
        bool    fPadding; 
        bool    fPrivate; 
        bool    fCopyright; 
        bool    fOriginal; 
        bool    fErrorAppeared; 
        unsigned int /* UINT */    uiEmphasis; 
        unsigned int /* UINT */    uiSoundMode; 
    
    } MP3COREHEADER, *PMP3COREHEADER/*, NEAR *NPMP3COREHEADER, FAR *LPMP3COREHEADER*/; 
    
    bool GetMp3HeaderInformation(const char /*PSTR*/ *pszFilepath, PMP3COREHEADER pMp3CoreHeader);
    
    /***************************************************/ 
    #endif
    

    .cpp

    #include "includes.h"
    
    bool GetMp3HeaderInformation(const char /*PSTR*/ *pszFilepath, PMP3COREHEADER pMp3CoreHeader) 
    { 
        // => Parameter überprüfen 
        if(pszFilepath == NULL || pMp3CoreHeader == NULL) 
            return (false); 
    
        // => Lokale Variablen 
        FILE    *pfMp3File; 
        int        iCharCode; 
        bool    fStatusFlag = false; 
    
        // => noch keine Fehler aufgetreten 
        pMp3CoreHeader->fErrorAppeared = false; 
    
        // => Datei öffnen 
        pfMp3File = fopen(pszFilepath, /*TEXT(*/"rb"/*)*/); 
        if(pfMp3File == NULL) 
        { 
            pMp3CoreHeader->fErrorAppeared = true; 
            return (false); 
        } 
    
        // => Dateigröße bestimmen: 
        std::ifstream ifsMp3File(pszFilepath, std::ios::binary); 
        if(!ifsMp3File) 
        { 
            fclose(pfMp3File); 
            return (false); 
        } 
        ifsMp3File.seekg(0, std::ios::end); 
        pMp3CoreHeader->lFileSize = (long)ifsMp3File.tellg(); 
        ifsMp3File.close(); 
    
        // => Ersten Frame des MPEG 1 Layer III suchen 
        do 
        { 
            iCharCode = fgetc(pfMp3File); 
            if(iCharCode == 255) 
            { 
                iCharCode = fgetc(pfMp3File); 
                if(tolower(iCharCode / 16) == 15) 
                    fStatusFlag = true; 
    
            } 
        } 
        while(!fStatusFlag); 
    
        // => Den ersten Frame Header ermitteln 
        fpos_t fpMp3FilePos; 
        fgetpos(pfMp3File, &fpMp3FilePos); 
        fpMp3FilePos -= 2; 
        pMp3CoreHeader->lFirstFrameByteOffset = fpMp3FilePos; 
    
        // => MPEG Version ermitteln (1/2) 
        int iMPEGVersion = tolower(((iCharCode % 16) / 4) / 2); 
        switch(iMPEGVersion) 
        { 
            case 0: 
                pMp3CoreHeader->lMPEGVersion = 2L; // MPEG-2 
                break; 
            case 1: 
                pMp3CoreHeader->lMPEGVersion = 1L; // MPEG-1 
                break; 
            default: 
                pMp3CoreHeader->fErrorAppeared = true; // Unknown 
                break; 
        } 
    
        // => MPEG Layer ermitteln 
        int iMPEGLayer = tolower((((iCharCode % 16) / 4) % 2) * 2 + (((iCharCode % 16) % 4) / 2)); 
        switch(iMPEGLayer) 
        { 
            case 0: 
                pMp3CoreHeader->lMPEGLayer = 0; // Reserved 
                break; 
            case 1: 
                pMp3CoreHeader->lMPEGLayer = 3; // Layer III 
                break; 
            case 2: 
                pMp3CoreHeader->lMPEGLayer = 2; // Layer II 
                break; 
            case 3: 
                pMp3CoreHeader->lMPEGLayer = 1; // Layer I 
                break; 
            default: 
                pMp3CoreHeader->fErrorAppeared = true; // Unknown 
                break; 
        } 
    
        if(iMPEGLayer != 1) 
        { 
            fclose(pfMp3File); 
            return (true); 
        }  
    
        // => CRC-Protection ermitteln 
        int iProtectionBit = tolower(((iCharCode % 16) % 4) % 2); 
        switch(iProtectionBit) 
        { 
            case 1: 
                pMp3CoreHeader->fCRCProtected = false; // CRC-Protection: No 
                break; 
            case 0: 
                pMp3CoreHeader->fCRCProtected = true; // CRC-Protection: Yes 
                break; 
            default: 
                pMp3CoreHeader->fErrorAppeared = true; // Unknown 
                break; 
        } 
    
        // => Das nächste Byte einlesen, um das 3. des Frame-Headers zu analysieren 
        iCharCode = fgetc(pfMp3File); 
    
        // => Bitrate ermitteln 
        int iBitrateTable[2][16] = 
        { 
            0x000,0x008,0x010,0x018, 
            0x020,0x040,0x050,0x038, 
            0x040,0x080,0x0A0,0x070, 
            0x080,0x100,0x140,0x000, 
            0x000,0x020,0x028,0x030, 
            0x038,0x040,0x050,0x060, 
            0x070,0x080,0x0A0,0x0C0, 
            0x0E0,0x100,0x140,0x000 
        }; 
        pMp3CoreHeader->lBitrate = iBitrateTable[iMPEGVersion][(tolower(iCharCode / 16))]; // in Kbps 
    
        // => Frequenz ermitteln 
        long lFrequencyTable[2][4] = 
        { 
            0x05622,0x05DC0,0x03E80,0x00000, 
            0x0AC44,0x0BB80,0x07D00,0x00000 
        }; 
        pMp3CoreHeader->lFrequence = lFrequencyTable[pMp3CoreHeader->lMPEGVersion][(tolower((iCharCode % 16) / 4))]; // in Hz     
    
        // => Padding ermitteln 
        int iPaddingBit = tolower(((iCharCode % 16) % 4) / 2); 
        switch(iPaddingBit) 
        { 
            case 0: 
                pMp3CoreHeader->fPadding = false; // Padding: No 
                break; 
            case 1: 
                pMp3CoreHeader->fPadding = true; // Padding: Yes 
                break; 
            default: 
                pMp3CoreHeader->fErrorAppeared = true; // Unknown 
                break; 
        } 
    
        // => Private Bit ermitteln 
        int iPrivateBit = tolower(((iCharCode % 16) % 4) % 2); 
        switch(iPrivateBit) 
        { 
            case 0: 
                pMp3CoreHeader->fPrivate = false; // Private: No 
                break; 
            case 1: 
                pMp3CoreHeader->fPrivate = true; // Private: Yes 
                break; 
            default: 
                pMp3CoreHeader->fErrorAppeared = true; // Unknown 
                break; 
        } 
    
        // => Das nächste Byte einlesen, um das 4. des Frame-Headers zu analysieren 
        iCharCode = fgetc(pfMp3File); 
    
        // Sound Channel ermitteln 
        int iChannelMode = tolower((iCharCode / 16) / 4); 
        switch(iChannelMode) 
        { 
            case 0: 
                pMp3CoreHeader->uiSoundMode = ASC_STEREO; // Stereo 
                break; 
            case 1: 
                pMp3CoreHeader->uiSoundMode = ASC_JOINT_STEREO; // Joint Stereo 
                break; 
            case 2: 
                pMp3CoreHeader->uiSoundMode = ASC_DUAL_CHANNEL; // Dual Channel 
                break; 
            case 3: 
                pMp3CoreHeader->uiSoundMode = ASC_SINGLE_CHANNEL; // Single Channel 
                break; 
            default: 
                pMp3CoreHeader->uiSoundMode = ASC_UNKNOWN; // Unknown 
                pMp3CoreHeader->fErrorAppeared = true; 
                break; 
        } 
    
        // => Copyright ermitteln 
        int iCopyrightBit = tolower(((iCharCode % 16) / 4) / 2); 
        switch(iCopyrightBit) 
        { 
            case 0: 
                pMp3CoreHeader->fCopyright = false; // Copyrighted: No 
                break; 
            case 1: 
                pMp3CoreHeader->fCopyright = true; // Copyrighted: Yes 
                break; 
            default: 
                pMp3CoreHeader->fErrorAppeared = true; // Unknown 
                break; 
        } 
    
        // => Originale Mp3 Datei 
        int iOriginalBit = tolower(((iCharCode % 16) / 4) % 2); 
        switch(iOriginalBit) 
        { 
            case 0: 
                pMp3CoreHeader->fOriginal = false; // Original: No 
                break; 
            case 1: 
                pMp3CoreHeader->fOriginal = true; // Original: Yes 
                break; 
            default: 
                pMp3CoreHeader->fErrorAppeared = true; // Unknown 
                break; 
        } 
    
        // => Emphasis ermitteln 
        int iEmphasis = tolower((iCharCode % 16) % 4); 
        switch(iEmphasis) 
        { 
            case 0: 
                pMp3CoreHeader->uiEmphasis = EMPHASIS_NONE; // Emphasis: None 
                break; 
            case 1: 
                pMp3CoreHeader->uiEmphasis = EMPHASIS_50_15_MS; // Emphasis: 50/15 ms 
                break; 
            case 3: 
                pMp3CoreHeader->uiEmphasis = EMPHASIS_CCITT_J_17; // Emphasis: CCITT J.17 
                break; 
            default: 
                pMp3CoreHeader->uiEmphasis = EMPHASIS_UNKNOWN; // Unknown 
                pMp3CoreHeader->fErrorAppeared = true; 
                break; 
        } 
    
        // => Frame-Size berechnen 
        long lFrameSize = (144000 * pMp3CoreHeader->lBitrate / pMp3CoreHeader->lFrequence) + iPaddingBit; 
    
        // => Anzahl der Frames 
        pMp3CoreHeader->lTotalFrames = (pMp3CoreHeader->lFileSize - pMp3CoreHeader->lFirstFrameByteOffset) / lFrameSize; 
    
        // => Track Länge in Sekunden 
        pMp3CoreHeader->lTrackLength = toupper(pMp3CoreHeader->lTotalFrames * 26 / 1000); 
    
        // => Datei Handle wieder schließen 
        fclose(pfMp3File); 
    
        return (!pMp3CoreHeader->fErrorAppeared); 
    }
    


  • sry hab meinen Beitrag lange nicht beachtet, dachte das hatte sich erledigt...

    ALSO:
    eigentlich solltest du durch folgenden Code das auch ohne Windows.h compilieren können

    #define UINT unsigned int
    #define PSTR char*
    

    PS: wenn nicht dann mach noch mal n post (mit Fehlermeldungen büdde 😉 )

    MfG CodeFinder



  • hm kompilieren ging schon aber es is gecrasht.
    hat sich eh erledigt habs jetzt so:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-145320-and-postdays-is-0-and-postorder-is-asc-and-start-is-0.html



  • HiHi,

    Hassu ne Funktion geschrieben, kannst die mal posten ?...würd mich mal interessieren^^...wär cool...!!

    MfG CodeFinder



  • 1. habich die net selbst geschrieben sondern nur überarbeitet und 2. habich ja link gepostet wo ich den code gepostet hab 😉


Anmelden zum Antworten