decodieren schlägt fehl - mpglib



  • Hallo

    ich habe mir die "mpglib" runtergeladen um damit MP3's zu decodieren.
    Schon am ersten Beispiel hackts bei mir 😞

    der beispielcode:

    #include <windows.h>
    #include "mpglibdll.h"
    
    HINSTANCE    hmpglibdll;
    INITMP3      InitMP3;
    EXITMP3      ExitMP3;
    DECODEMP3    decodeMP3;
    
    char buf[16384];
    struct mpstr mp;
    
    int main (void)
    {
    	int size;
    	char out[8192];
    	int len,ret;
    
    	hmpglibdll = LoadLibrary("mpglib.dll");
    
    	if (!hmpglibdll)
    		return (NO_DLL_FOUND);
    
    	InitMP3   = (INITMP3)   GetProcAddress(hmpglibdll, TEXT_INITMP3);
    	ExitMP3   = (EXITMP3)   GetProcAddress(hmpglibdll, TEXT_EXITMP3);
    	decodeMP3 = (DECODEMP3) GetProcAddress(hmpglibdll, TEXT_DECODEMP3);
    
    	InitMP3(&mp);
    
    	while( !eof() )
    	{
    		len = read(0,buf,16384);
    		if(len <= 0)
    			break;
    		ret = decodeMP3(&mp,buf,len,out,8192,&size);
    		while(ret == MP3_OK)
    		{
    			write(1,out,size);
    			ret = decodeMP3(&mp,NULL,0,out,8192,&size);
    		}
    	}
    
    	ExitMP3(&mp);
    	FreeLibrary(hmpglibdll);
    
    	return (0);
    }
    

    das wollte ich so umschreiben, dass es mit dateien statt der ein und ausgabe arbeitet

    #include <windows.h>
    #include "mpglibdll.h"
    #include <stdio.h>
    #include <fstream>
    
    HINSTANCE    hmpglibdll;
    INITMP3      InitMP3;
    EXITMP3      ExitMP3;
    DECODEMP3    decodeMP3;
    
    char buf[16384];
    struct mpstr mp;
    
    int main (void)
    {
    	int size;
    	char out[8192];
    	int ret;
    	DWORD len;
    
    	hmpglibdll = LoadLibrary("mpglib.dll");
    
    	if (!hmpglibdll)
    		return (-1);
    
    	InitMP3   = (INITMP3)   GetProcAddress(hmpglibdll, TEXT_INITMP3);
    	ExitMP3   = (EXITMP3)   GetProcAddress(hmpglibdll, TEXT_EXITMP3);
    	decodeMP3 = (DECODEMP3) GetProcAddress(hmpglibdll, TEXT_DECODEMP3);
    
    	InitMP3(&mp);
    
    	std::fstream infile("E:\\input.mp3", std::ios::binary | std::ios::in);
    	std::fstream outfile("E:\\output.wav", std::ios::binary | std::ios::out);
    
    	while(!infile.eof())
    	{
    		len = 16384;
    		infile.read(buf, 16384);
    
    		ret = decodeMP3(&mp,buf,len,out,8192,&size);
    		while(ret == MP3_OK)
    		{
    			outfile.write(out, size);
    			ret = decodeMP3(&mp,NULL,0,out,8192,&size);
    		}
    	}
    
    	ExitMP3(&mp);
    	FreeLibrary(hmpglibdll);
    
    	return (0);
    }
    

    allerdings bricht die funktion ab und ich habe schrott in der datei...
    was hab ich falsch gemacht?


Anmelden zum Antworten