Mp3 Tags



  • Moin Leute,

    also mein Prob .
    Ich öffne ein Mp3 file als Binär Datei.
    Jetzt muss ich ein array definieren mit 125 Zeichen jede Zahl entspricht einem Genre z.b
    0=Classic Rock 1=New Wave usw.

    Jedoch hab ich keinen Plan wie ich das Array definieren soll mit char genre funktionierts nicht da die Namen zu lange sind und mit usigned char auch nicht.

    Ich hoffe mir kann jemand helfen denn es ist wirklich wichtig dass ich dieses Programm zu laufen bringe.

    Gruß
    Frank



  • Hi, also ich würde dafür entweder ein struct oder den string benutzen.

    #include <string>
    #include <iostream> 
    using namespace std; 
    
    //Die Struktur für dein Genre
    struct genres{
    	char genre[30];
    };
    
    int main(void) 
    { 
    	//Beispiel mit einem Array der Struktur genres
    	genres structGenre[] = {"Classic Rock","New Wave"};
    	printf("%s, %s",structGenre[0].genre,structGenre[1].genre);
    
    	//Beispiel mit einem String Array
    	string stringGenre[] = {"Classic Rock","New Wave"};	
    	cout<<stringGenre[0]<<" "<<stringGenre[1]<<endl;
    
    }
    

    Solltest da du in C programmierst, eher die struct-Variante benutzen,
    denn string ist eher für C++ gedacht.

    smilingman



  • smilingman schrieb:

    Hi, also ich würde dafür entweder ein struct oder den string benutzen.

    #include <string>
    #include <iostream> 
    using namespace std; 
    
    //Die Struktur für dein Genre
    struct genres{
    	char genre[30];
    };
    
    int main(void) 
    { 
    	//Beispiel mit einem Array der Struktur genres
    	genres structGenre[] = {"Classic Rock","New Wave"};
    	printf("%s, %s",structGenre[0].genre,structGenre[1].genre);
    
    	//Beispiel mit einem String Array
    	string stringGenre[] = {"Classic Rock","New Wave"};	
    	cout<<stringGenre[0]<<" "<<stringGenre[1]<<endl;
    
    }
    

    Solltest da du in C programmierst, eher die struct-Variante benutzen,
    denn string ist eher für C++ gedacht.

    smilingman

    kannst du auch je ein beispiel in assembler, java, C#, Visual Basic, D, Cobol, Perl, Pascal, Delphi posten ?



  • Am Besten führst du dein Problem mal ein bisschen aus, ins Besondere, was du mit den Zahlen und zugeordneten Bezeichnungen noch anstellen willst.
    Eventuell wäre dann nämlich ein Aufzählungstyp geeignet.

    typedef enum genres { Classic_Rock, New_Wave } GENRES;
    GENRES g=New_Wave;
    

    Dabei wird von 0 an hochgezählt, d.h. "Classic_Rock" entspricht 0, "New_Wave" 1.

    @smilingman: Du vermischst hier C und C++. Das ist meiner Meinung nach für den Threadsteller eher verwirrend, da bspw. bei der Initialisierung einer Struktur in C das Schlüsselwort "struct" dabeistehen muss.
    Der Tipp mit einer Struktur ist okay, aber eigentlich wird keine Struktur benötigt. (Allerdings hast du hier lediglich einen einzelnen String der Länge 30 in deiner Struktur.) Geeigneter wäre wohl eine Stringtabelle. Das sähe dann ungefähr so aus:

    char *genre[125];
    genre[0] = "Classic Rock";
    


  • Du vermischst hier C und C++

    Tut mir leid habe schon so lange kein reines C mehr gecodet.
    Wollte einfach zwei Möglichkeiten zeigen wie er sein
    Problem lösen könnte, das mit dem string war nur als alternativ
    Lösung gedacht und das man bei der Initialisierung einer Strucktur
    struct davor schreiben muss, hatte ich total vergessen.

    Denke aber das die Version von dir mit der Enumeration wahrscheinlich
    wirklich die einfachste und geschickteste Lösung sein sollte.
    Je nachdem was er mit den Werte später vor hat.

    smilingman



  • Okay enum kann ich bei diesem Programm verwenden bzw. sollte nur muss ich mich noch erin bisschen schlau machen da ich die Func. noch nicht ganz verstanden habe.

    Aber Danke trotzdem!

    Frank



  • moagnus schrieb:

    Am Besten führst du dein Problem mal ein bisschen aus, ins Besondere, was du mit den Zahlen und zugeordneten Bezeichnungen noch anstellen willst.
    Eventuell wäre dann nämlich ein Aufzählungstyp geeignet.

    typedef enum genres { Classic_Rock, New_Wave } GENRES;
    GENRES g=New_Wave;
    

    Dabei wird von 0 an hochgezählt, d.h. "Classic_Rock" entspricht 0, "New_Wave" 1.

    @smilingman: Du vermischst hier C und C++. Das ist meiner Meinung nach für den Threadsteller eher verwirrend, da bspw. bei der Initialisierung einer Struktur in C das Schlüsselwort "struct" dabeistehen muss.
    Der Tipp mit einer Struktur ist okay, aber eigentlich wird keine Struktur benötigt. (Allerdings hast du hier lediglich einen einzelnen String der Länge 30 in deiner Struktur.) Geeigneter wäre wohl eine Stringtabelle. Das sähe dann ungefähr so aus:

    char *genre[125];
    genre[0] = "Classic Rock";
    

    aber eine Frage habe ich noch warum brauch ich das GENRES g=New_Wave?
    muss ich dass bei allen dazuschreiben den es sind ca 125 Genres?
    oder nur mit enum definieren?

    Frank



  • Hi Bruder !

    Frankii schrieb:

    Okay enum kann ich bei diesem Programm verwenden bzw. sollte nur muss ich mich noch erin bisschen schlau machen da ich die Func. noch nicht ganz verstanden habe.
    Aber Danke trotzdem!
    Frank

    Bist du sicher, das du enum willst? Glaub ich nicht! Du willst doch das Genre bestimmt in lesbarer Form anzeigen oder?
    enums sind bloss Zahlen, du willst doch nicht anzeigen, "Genre: 0" oder?
    😉

    Mach das doch so:

    #define GENRE_COUNT 3
    
    char* Genre [GENRE_COUNT] = 
    {
    		"Blues",
    		"Classic Rock",
    		"Country"
    		// usw.
    };
    
    char* get_genre( unsigned i )
    {
    	if ( i >= GENRE_COUNT )
    		return NULL
    	else
    		return Genre [i]; 
    }
    
    int main ()
    {
    	printf ( "%s", get_genre ( 88 ) );
    	return 0;
    }
    

Log in to reply