Lister l'ensemble des fichiers mp3 id3v1 du disque

Description

Ce prog liste l'ensemble des mp3 du c:\ et stoque les infos (id3v1) dans disque.txt
Il permet egalement d'editer et de modifier directement les infos dans les mp3.
Je pense que ce prog est celui qu'il vous faut, il est trop cool.

Source / Exemple :


#include<iostream.h>
#include<windows.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<direct.h>
#include<conio.h>

int i,nb=0,nbtotal,pas=1,plusieurs=0,dernier,j;
WIN32_FIND_DATA wData;
char *nom,nom_complet[MAX_PATH],*trouvepoint,touche;
FILE *f,*fmp3;

typedef struct
{
	char nom_mp3[MAX_PATH];
	char ID[3];
	char Titre_musique[30];
	char Artiste[30];
	char Titre_album[30];
	char Annee[4];
	char Commentaire[30];
	char Genre;	
}MP3;

MP3 liste[5000];
MP3 variable;

void lister(LPCTSTR file,char [MAX_PATH]);
void manipuler_mp3();
void affichage_donnees();

void main()
{
	if((f=fopen("disque.txt","w+"))==NULL)
		printf("Creation impossible.\n");
	else
	{
		lister("C:\\*.*","C:\\");
		fprintf(f,"Il y a %d fichiers mp3 sur %s.",nb,"C:\\");
		fclose(f);
		nbtotal=nb;
		nb=0;
		manipuler_mp3();
	}
}

void lister(LPCTSTR fichier,char chemin[MAX_PATH])
{
	char chemin1[MAX_PATH],chemin2[MAX_PATH],chemin3[MAX_PATH],chemin4[MAX_PATH];

	for(i=0;i<MAX_PATH;i++)
	{
		chemin1[i]='\0';
		chemin2[i]='\0';
	}

	for(i=0;i<(int)strlen(chemin);i++)
		chemin1[i]=chemin[i];

	for(i=0;i<(int)strlen(chemin1);i++)
		chemin2[i]=chemin1[i];
	strcat(chemin2,"*.*");

	HANDLE listing;
	listing=FindFirstFile(fichier,&wData);
    
	while((FindNextFile(listing,&wData)))
	{
		nom=wData.cFileName;

		for(i=0;i<MAX_PATH;i++)
		{
			nom_complet[i]='\0';
		}
		for(i=0;i<(int)strlen(chemin1);i++)
			nom_complet[i]=chemin[i];
		for(i=strlen(chemin1);i<(int)strlen(chemin1)+(int)strlen(nom);i++)
			nom_complet[i]=nom[i-strlen(chemin1)];

		if(_chdir(nom_complet)==-1) trouvepoint="1";
		if((trouvepoint==NULL)&&((nom[0]!='.')||(nom[1]!='.')))
		{

			for(i=0;i<MAX_PATH;i++)
			{
				chemin3[i]='\0';
				chemin4[i]='\0';
			}

			strcpy(chemin3,nom_complet);
			strcpy(chemin4,nom_complet);

			strcat(chemin4,"\\*.*");
			strcat(chemin3,"\\");

			lister(chemin4,chemin3);
		}

		if(((nom[strlen(nom)-3]=='m')||(nom[strlen(nom)-3]=='M'))
			&&((nom[strlen(nom)-2]=='p')||(nom[strlen(nom)-2]=='P'))
			&&(nom[strlen(nom)-1]=='3'))
		{		
			for(i=0;i<MAX_PATH;i++)
			{
				nom_complet[i]='\0';
			}
			for(i=0;i<(int)strlen(chemin1);i++)
				nom_complet[i]=chemin[i];
			for(i=strlen(chemin1);i<(int)strlen(chemin1)+(int)strlen(nom);i++)
				nom_complet[i]=nom[i-strlen(chemin1)];

			if((fmp3=fopen(nom_complet,"rb"))!=NULL)			
			{
				fseek(fmp3,-128,SEEK_END);

				for(i=0;i<(int)strlen(nom_complet);i++)
					liste[nb].nom_mp3[i]=nom_complet[i];

				fscanf(fmp3,"%3c",liste[nb].ID);
				fscanf(fmp3,"%30c",liste[nb].Titre_musique);
				fscanf(fmp3,"%30c",liste[nb].Artiste);
				fscanf(fmp3,"%30c",liste[nb].Titre_album);
				fscanf(fmp3,"%4c",liste[nb].Annee);
				fscanf(fmp3,"%30c",liste[nb].Commentaire);
				fscanf(fmp3,"%1c",&liste[nb].Genre);
				fclose(fmp3);

				fprintf(f,"%s\n",liste[nb].nom_mp3);

				fprintf(f,"ID : ");
				for(i=0;i<3;i++)
					fprintf(f,"%c",liste[nb].ID[i]);

				fprintf(f,"\nTitre de la musique : ");
				for(i=0;i<30;i++)
					fprintf(f,"%c",liste[nb].Titre_musique[i]);

				fprintf(f,"\nNom de l'artiste : ");
				for(i=0;i<30;i++)
					fprintf(f,"%c",liste[nb].Artiste[i]);

				fprintf(f,"\nTitre de l'album : ");
				for(i=0;i<30;i++)
					fprintf(f,"%c",liste[nb].Titre_album[i]);

				fprintf(f,"\nAnnee : ");
				for(i=0;i<4;i++)
					fprintf(f,"%c",liste[nb].Annee[i]);

				fprintf(f,"\nCommentaire : ");
				for(i=0;i<30;i++)
					fprintf(f,"%c",liste[nb].Commentaire[i]);

				fprintf(f,"\nGenre : ");

				fprintf(f,"%c",liste[nb].Genre);
				fprintf(f,"\n\n");
				
				nb+=1;
			}
				
		}

		trouvepoint=NULL;
	 }
}  

void affichage_donnees()
{

	printf("**************************************************************\n");
	printf(" Donnees de la musique :                            \n");
	printf(" Numero : %4d/%4d                                 \n",nb+1,nbtotal);
	printf("                                                    \n");
	printf("%s",liste[nb].nom_mp3);

	printf("\n        ID      : ");
	for(i=0;i<3;i++)
		printf("%c",liste[nb].ID[i]);
			
	printf("\n  Titre_musique : ");
	for(i=0;i<30;i++)
		printf("%c",liste[nb].Titre_musique[i]);

	printf("\n     Artiste    : ");
	for(i=0;i<30;i++)
		printf("%c",liste[nb].Artiste[i]);

	printf("\n   Titre_album  : ");
	for(i=0;i<30;i++)
		printf("%c",liste[nb].Titre_album[i]);

	printf("\n      Annee     : ");
	for(i=0;i<4;i++)
		printf("%c",liste[nb].Annee[i]);

	printf("\n   Commentaire  : ");
	for(i=0;i<30;i++)
		printf("%c",liste[nb].Commentaire[i]);

	printf("\n      Genre     : ");
	printf("%d",liste[nb].Genre);

	printf("\n**************************************************************\n");
}

void manipuler_mp3()
{
	do
	{
		system("cls");
		printf("******************************************\n");
		printf(" 0 : Modifier l'ID.                       \n");
		printf(" 1 : Modifier le titre de la musique.     \n");
		printf(" 2 : Modifier le nom de l'artiste.        \n");
		printf(" 3 : Modifier le titre de l'album.        \n");
		printf(" 4 : Modifier l'annee de l'album.         \n");
		printf(" 5 : Enregistrer un commentaire.          \n");
		printf(" 6 : Genre.                               \n");
		printf(" 7 : Modifier le pas.                     \n");
		if(plusieurs==1) printf(" 8 :Appliquer a plusieurs.                \n");
			else(printf(" 8 :Appliquer a un seul.                  \n"));
		printf(" +/- : Incrementer/decrementer le numero. \n");
		printf(" Esc : Quitter.                           \n");

		affichage_donnees();

		do
		{
			touche=getch();
		}while(touche==NULL);
		
		if(touche==43) nb+=pas;
		if(touche==45) nb-=pas;
		if(touche==56) plusieurs=1-plusieurs;
		if(touche==55)
		{
			system("cls");
			printf("Ancien pas : %d\n",pas);
			printf("Veuillez entrez le nouveau pas.\n");
			scanf("%d",&pas);
			if(pas<1) pas=1;
			if(pas>nbtotal-1) pas=nbtotal-1;
		}
		if(touche==48)
		{
			touche=NULL;
			for(i=0;i<3;i++)
				variable.ID[i]='\0';
			if(plusieurs==1)
			{
				do
				{
				system("cls");
				printf("Du %d au : ",nb+1);
				scanf("%d",&dernier);
				if(dernier>nbtotal) dernier=nbtotal;
				dernier-=1;
				}while(dernier<nb);
			}
			else(dernier=nb);
			system("cls");
			affichage_donnees();
			printf("\n\nEntrer le nouveau ID.\n");

			i=0;
			do
			{
				do
				{
					touche=getche();
				}while(touche==NULL);
				if((touche==13)||(touche==27)) break;
				variable.ID[i]=touche;
				i++;
			}while(touche!=13);
			for(j=nb;j<dernier+1;j++)
			{
				for(i=0;i<3;i++)
					liste[j].ID[i]=variable.ID[i];
				fmp3=fopen(liste[j].nom_mp3,"r+");
				fseek(fmp3,-128,SEEK_END);
				for(i=0;i<3;i++)
					fprintf(fmp3,"%c",liste[j].ID[i]);
				fclose(fmp3);
			}
		}
		if(touche==49)
		{
			touche=NULL;
			affichage_donnees();
			for(i=0;i<30;i++)
				variable.Titre_musique[i]='\0';
			
			if(plusieurs==1)
			{
				do
				{
				system("cls");
				printf("Du %d au : ",nb+1);
				scanf("%d",&dernier);
				if(dernier>nbtotal) dernier=nbtotal;
				dernier-=1;
				}while(dernier<nb);
			}
			else(dernier=nb);
			system("cls");
			affichage_donnees();
			printf("\n\nEntrer le nouveau titre de la musique.\n");
			i=0;
			do
			{
				do
				{
					touche=getche();
				}while(touche==NULL);
				if((touche==13)||(touche==27)) break;
				variable.Titre_musique[i]=touche;
				i++;
			}while(touche!=13);
			for(j=nb;j<dernier+1;j++)
			{
				for(i=0;i<30;i++)
					liste[j].Titre_musique[i]=variable.Titre_musique[i];
				fmp3=fopen(liste[j].nom_mp3,"r+");
				fseek(fmp3,-125,SEEK_END);
				for(i=0;i<30;i++)
					fprintf(fmp3,"%c",liste[j].Titre_musique[i]);
				fclose(fmp3);
			}

		}
		if(touche==50)
		{
			touche=NULL;
			affichage_donnees();
			for(i=0;i<30;i++)
				variable.Artiste[i]='\0';

			if(plusieurs==1)
			{
				do
				{
				system("cls");
				printf("Du %d au : ",nb+1);
				scanf("%d",&dernier);
				if(dernier>nbtotal) dernier=nbtotal;
				dernier-=1;
				}while(dernier<nb);
			}
			else(dernier=nb);
			system("cls");
			affichage_donnees();
			printf("\n\nEntrer le nouveau nom de l'artiste.\n");
			i=0;
			do
			{
				do
				{
					touche=getche();
				}while(touche==NULL);
				if((touche==13)||(touche==27)) break;
				variable.Artiste[i]=touche;
				i++;
			}while(touche!=13);
			for(j=nb;j<dernier+1;j++)
			{
				for(i=0;i<30;i++)
					liste[j].Artiste[i]=variable.Artiste[i];
				fmp3=fopen(liste[j].nom_mp3,"r+");
				fseek(fmp3,-95,SEEK_END);
				for(i=0;i<30;i++)
					fprintf(fmp3,"%c",liste[j].Artiste[i]);
				fclose(fmp3);
			}
		}
		if(touche==51)
		{
			touche=NULL;
			affichage_donnees();
			for(i=0;i<30;i++)
				variable.Titre_album[i]='\0';

			if(plusieurs==1)
			{
				do
				{
				system("cls");
				printf("Du %d au  :",nb+1);
				scanf("%d",&dernier);
				if(dernier>nbtotal) dernier=nbtotal;
				dernier-=1;
				}while(dernier<nb);
			}
			else(dernier=nb);
			system("cls");
			affichage_donnees();
			printf("\n\nEntrer le nouveau titre de l'album.\n");
			i=0;
			do
			{
				do
				{
					touche=getche();
				}while(touche==NULL);
				if((touche==13)||(touche==27)) break;
				variable.Titre_album[i]=touche;
				i++;
			}while(touche!=13);
			for(j=nb;j<dernier+1;j++)
			{
				for(i=0;i<30;i++)
					liste[j].Titre_album[i]=variable.Titre_album[i];
				fmp3=fopen(liste[j].nom_mp3,"r+");
				fseek(fmp3,-65,SEEK_END);
				for(i=0;i<30;i++)
					fprintf(fmp3,"%c",liste[j].Titre_album[i]);
				fclose(fmp3);
			}
		}
		if(touche==52)
		{
			touche=NULL;
			affichage_donnees();
			for(i=0;i<4;i++)
				variable.Annee[i]='\0';

			if(plusieurs==1)
			{
				do
				{
				system("cls");
				printf("Du %d au : ",nb+1);
				scanf("%d",&dernier);
				if(dernier>nbtotal) dernier=nbtotal;
				dernier-=1;
				}while(dernier<nb);
			}
			else(dernier=nb);
			system("cls");
			affichage_donnees();
			printf("\n\nEntrer la nouvelle annee.\n");
			i=0;
			do
			{
				do
				{
					touche=getche();
				}while(touche==NULL);
				if((touche==13)||(touche==27)) break;
				variable.Annee[i]=touche;
				i++;
			}while(touche!=13);
			for(j=nb;j<dernier+1;j++)
			{
				for(i=0;i<4;i++)
					liste[j].Annee[i]=variable.Annee[i];
				fmp3=fopen(liste[j].nom_mp3,"r+");
				fseek(fmp3,-35,SEEK_END);
				for(i=0;i<4;i++)
					fprintf(fmp3,"%c",liste[j].Annee[i]);
				fclose(fmp3);
			}
		}
		if(touche==53)
		{
			touche=NULL;
			affichage_donnees();
			for(i=0;i<30;i++)
				variable.Commentaire[i]='\0';
			i=0;			if(plusieurs==1)
			{
				do
				{
				system("cls");
				printf("Du %d au : ",nb+1);
				scanf("%d",&dernier);
				if(dernier>nbtotal) dernier=nbtotal;
				dernier-=1;
				}while(dernier<nb);
			}
			else(dernier=nb);
			system("cls");
			affichage_donnees();
			printf("\n\nEntrer le nouveau commentaire.\n");
			i=0;
			do
			{
				do
				{
					touche=getche();
				}while(touche==NULL);
				if((touche==13)||(touche==27)) break;
				variable.Commentaire[i]=touche;
				i++;
			}while(touche!=13);
			for(j=nb;j<dernier+1;j++)
			{
				for(i=0;i<30;i++)
					liste[j].Commentaire[i]=variable.Commentaire[i];
				fmp3=fopen(liste[j].nom_mp3,"r+");
				fseek(fmp3,-31,SEEK_END);
				for(i=0;i<30;i++)
					fprintf(fmp3,"%c",liste[j].Commentaire[i]);
				fclose(fmp3);
			}
		}
		if(touche==54)
		{
			touche=NULL;
			affichage_donnees();
			variable.Genre='\0';

			if(plusieurs==1)
			{
				do
				{
				system("cls");
				printf("Du %d au : ",nb+1);
				scanf("%d",&dernier);
				if(dernier>nbtotal) dernier=nbtotal;
				dernier-=1;
				}while(dernier<nb);
			}
			else(dernier=nb);
			system("cls");
			affichage_donnees();
			printf("\n\nEntrer le genre de la musique (0 a 114).\n");
			scanf("%d",&variable.Genre);
			for(j=nb;j<dernier+1;j++)
			{
				liste[j].Genre=variable.Genre;
				fmp3=fopen(liste[j].nom_mp3,"r+");
				fseek(fmp3,-1,SEEK_END);
				fprintf(fmp3,"%c",liste[j].Genre);
				fclose(fmp3);
			}
		}

		if(nb<0) nb=nbtotal-1;
		if(nb>nbtotal-1) nb=0;

 
	}while(touche!=27);

}

Conclusion :


Les infos id3v2 ne sont pas prises encompte.
Le prog bug lorsque vous voulez modifiez une info sur un mp3 en lecture seule.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.