Προς το περιεχόμενο

MP3 reading


eliascm21

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα!

 

Αυτό που θέλω να κάνω, είναι ένα πρόγραμμα στο οποίο θα διαβάζει ένα .mp3 αρχείο και θα επιστρέφει τον τίτλο του τραγουδιού και τον τραγουδιστή. Προσοχή: Δεν θέλω φυσικά να μου επιστρέφει το όνομα του file, αλλά να παίρνει τις πληροφορίες που θέλω από το εσωτερικού του Mp3 (που απότι ξέρω αποθηκεύονται στο τέλος)

 

Έψαξα λίγο στο Internet, αλλά ψιλοχάθηκα κάπως, πιστεύω αυτό που θέλω είναι πιο απλό από αυτά που βρήκα. Η γλώσσα που θέλω να το κάνω είναι κατά σειρά προτιμήσεις οι C, C++, C#.

 

Φαντάζομαι θα υπάρχει κάποια σχετική βιβλιοθήκη που θα πρέπει να κάνω Include.

Γίνεται τόσο απλό όσο το φαντάζομαι? Να κάνεις δηλαδή include κάποιες βιβλιοθήκες, και μετά να χρησιμοποιείς μία συνάρτηση που να σου επιστρέφει πχ το όνομα και μία άλλη για τον τραγουδιστή?

 

Ευχαριστώ εκ τον προτέρων

Δημοσ.

Ρίξε μια ματιά στην id3lib. Είναι project με LGPL άδεια. Με ο,τι αυτό σημαίνει, στην περίπτωση που σκέφτεσαι να διανείμεις το πρόγραμμα που φτιάχνεις...

 

 

edit: Περισσότερες σχετικές βιβλιοθήκες εδώ!

Δημοσ.

Καλησπέρα!

 

Αυτό που θέλω να κάνω, είναι ένα πρόγραμμα στο οποίο θα διαβάζει ένα .mp3 αρχείο και θα επιστρέφει τον τίτλο του τραγουδιού και τον τραγουδιστή. Προσοχή: Δεν θέλω φυσικά να μου επιστρέφει το όνομα του file, αλλά να παίρνει τις πληροφορίες που θέλω από το εσωτερικού του Mp3 (που απότι ξέρω αποθηκεύονται στο τέλος)

 

Έψαξα λίγο στο Internet, αλλά ψιλοχάθηκα κάπως, πιστεύω αυτό που θέλω είναι πιο απλό από αυτά που βρήκα. Η γλώσσα που θέλω να το κάνω είναι κατά σειρά προτιμήσεις οι C, C++, C#.

 

Φαντάζομαι θα υπάρχει κάποια σχετική βιβλιοθήκη που θα πρέπει να κάνω Include.

Γίνεται τόσο απλό όσο το φαντάζομαι? Να κάνεις δηλαδή include κάποιες βιβλιοθήκες, και μετά να χρησιμοποιείς μία συνάρτηση που να σου επιστρέφει πχ το όνομα και μία άλλη για τον τραγουδιστή?

 

Ευχαριστώ εκ τον προτέρων

 

Τόσο απλά όχι. Τα MP3 Tag χωρίζονται σε διάφορες εκδόσεις με την πιο απλή να είναι φυσικά η πρώτη, η ID3 Tag Version 1.0 και ακολούθως η 1.1 (που πρακτικά είναι η πιο παλιά χρησιμοποιούμενη ως σήμερα) καθώς ουσιαστικά πρόκειται για ένα μπλοκ από bytes με μέγεθος 128 (στην πραγματικότητα δίχως το Header, 125) χαρακτήρων πριν το τέλος (EOF) του αρχείου.

 

Αν και προτείνω την χρήση έτοιμων βιβλιοθηκών μπορείς να ρίξεις μια ματιά στην παρακάτω ANSI-C υλοποίηση που διαβάζει το ID3 Tag Version 1.0-1 (και την οποία έραψα από περιέργεια).

 

>
/*-Read MP3 ID3 TAG Version 1.0 + 1.1 (c) directx----------------------------*/

#include <stdio.h>
#include <string.h>
#ifdef __BORLANDC__
#pragma hdrsto[
#endif

/*---------------------------------------------------------------------------*/
struct /* ID3 V1.0(&1) Structure */
{
unsigned char	Title  [30],
				Artist [30],
				Album  [30],
				Year   [4],
				Comment[30],
				Genre  [1];
}Mp3TagV1;

#ifdef __BORLANDC__
#pragma argsused
#endif
int main(int argc, char* argv[])
{
FILE *fStream = NULL;

   /* Open file for binary read */
if((fStream = fopen(argv[1], "rb")) != NULL)
 {
       /* Jump to the last 128 bytes of the file */
	if(fseek(fStream, -128, SEEK_END))
		printf(" Seek Set error!\n");
	else
	 {
		char szTAG[3];

		/* Load ID3 V1 Header */
		if(fread(&szTAG, sizeof(szTAG), 1, fStream) != 1)
			printf(" I/O Error #1!\n");
		else /* Magic Value = TAG */
			if(!strncmp(szTAG, "TAG", 3))
			 {
				/* Read rest of information */
				if(fread(&Mp3TagV1, sizeof(Mp3TagV1), 1, fStream) != 1)
					printf(" I/O Error #2!\n");
				else
				 {
                       /* .30s to limit string because it's not \0 terminated */
					printf("Title  :\t\"%.30s\"\n", Mp3TagV1.Title);
					printf("Artist :\t\"%.30s\"\n", Mp3TagV1.Artist);
					printf("Album  :\t\"%.30s\"\n", Mp3TagV1.Album);
					printf("Year   :\t%.4s\n", Mp3TagV1.Year);
					printf("Comment:\t\"%.30s\"\n", Mp3TagV1.Comment);
                       printf("Genre  :\t%d\n", Mp3TagV1.Genre[0]);

                       /* Check for ID3 v 1.1 [No ID3 V 1.0 to test it!!] */
                       if(!Mp3TagV1.Comment[28])
						printf("Track  :\t%d\n", Mp3TagV1.Comment[29]);
				 }
			 }
			else
				printf(" ID3v1 TAG not found!\n");
	 }

	fclose(fStream);
 }
else
	printf(" File read access denied - %s\n", argv[1]);

   /* End of program */
   printf("\n Press Enter to exit..");
getchar();
return 0;
}
/*---------------------------------------------------------------------------*/

 

Για περισσότερες πληροφορίες σχετικά με το πώς δουλεύει το πρόγραμμα δες εδώ http://www.id3.org/ID3v1 και εδώ http://en.wikipedia.org/wiki/ID3.

 

Φυσικά μπορεί να υπάρχουν bugs ή άλλες αβλεψίες.

 

Με λίγη προσπάθεια μπορείς να κάνεις τον κώδικα μια απλή ρουτίνα.

 

Καλή τύχη!

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...