begin process at 2012 05 28 21:39:30
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Multimédia

 > 

Comment récupérer la durée d'un MP3?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Comment récupérer la durée d'un MP3?

samedi 13 décembre 2003 à 10:29:01 | Comment récupérer la durée d'un MP3?

house_flju

Bonjour!

Voila j'aimerai recuperer la durée desp3 assez simplement pour un petit programme qui me listerai mes MP3 au format HTML

Merci d'avence à ceux qui essayeront de me repondre!
lundi 29 décembre 2003 à 16:37:05 | Re : Comment récupérer la durée d'un MP3?

othland


tu veux dire quoi par recuperer la durée, j'ai pas compris???
tu peux pas l'avoir dans le media-player???
dimanche 4 janvier 2004 à 15:44:39 | Re : Comment récupérer la durée d'un MP3?

gorgonzola

C'est un peu compliqué mais j'ai fini par trouver comment faire (je suis moi aussi en trainn de faire un programme dans le même genre que le tien).

Bon un mp3 est composé de plusieurs frames, et chaque frame à un en-tête de 4 octets. Les 12 premiers bits sont toujours mis à 1 (permet de reconnaitre l'en-tête), ensuite viennent 4 bits qui donnent la version du mp3, ensuite 4 autres bits (on est donc dans le troisième octet) qui donnent le bitrate (comme 128kbps, 192kbps,...).
Alors moi pour récupérer la durée j'ai fait une fonction qui recherche le bitrate du mp3 et ensuite calcule la durée d'après la taille du mp3 (normalement ce n'est pas comme cela qu'on fait, donc il y a souvent quelques secondes de plus ou de moins). J'ai aussi remarqué que parfois il tombait sur un bitrate erroné, dans ce cas-ci je vais seulement à la frame suivante sans me poser de questions.
Voici le code de ma fonction, ça met le bitrate (en kbps) dans b et la durée (en secondes) dans s, name est le nom du fichier :


void mp3Infos(char* name,int* b,int* s)
{
long size;
unsigned char c;
FILE* file;

/* ouvre le mp3 */
file=fopen(name,"rb");

/* boucle pour trouver le bitrate */
do
{
do
{
/* cherche un octet dont tous */
/* les bits sont positifs */
do
{
c=fgetc(file);
} while (c!=0xFF);

/* lit un second octet */
c=fgetc(file);

/* sort de la boucle si les 4 premiers bits sont positifs */
} while ((c&0xF0)!=0xF0);

/* lit les 4 premiers bits de l'octet suivant */
c=(fgetc(file)&0xF0)>>4;

/* regarde a quel bitrate les 4 bits correspondent */
*b=bitrate[c];

/* recommence si on a un bitrate erronee */
} while ((*b==0)||(*b==999));

/* va a la fin du mp3 */
fseek(file,0,SEEK_END);

/* recupere la position (donc la taille du mp3) */
size=ftell(file);

/* ferme le mp3 */
fclose(file);

/* calcule la duree d'apres le bitrate et la taille du fichier */
*s=(size/((*b)<<7));

/* attention la duree obtenue est aproximative ! */
}


Attention ça ne marche que pour les mp3 avec bitrate constant. Pour les mp3 VBR ça donne des valeurs fantaisistes.


Cette discussion est classée dans : récupérer, durée, mp3


Répondre à ce message

Sujets en rapport avec ce message

Durée d'un morceau MP3 [ par Kheo ] Y'a t'il une méthode assez simple et pas trop lourde en opérations ( tache répété sur une grande liste de mp3 ) pour récupérer la durée d'un fichier m Tableau d'une image venant d'une webcam [ par doggyk ] Bonjour!Je cherche à récupérer des images d'une webcam afin de trouver le centre d'un point lumineux. Ceci doit se faire à une vitesse rapide. Mon ob récupérer le résultat d'une commandes DOS [ par Buzu ] Voila, la question est dans le titre...J'ai essayé avec system, mais le résultat de la commande est automatikement affiché dans la console.Merci si vo "mp3 wave drawing" ? [ par muntes ] common peu je tracer le forme d'onde de un mp3 ?Common le programme premiere. gerard récupérer le handle sur la barre de titre [ par leprov ] salu a tous.je voudrais récupérer le handle sur ma barre de titre afin de pouvoir changer le curseur de ma fenetre, et que ce curseur reste sur la bar OPENFILENAME : champ lpstrFile [ par LiBe444 ] Bonjour,La structure openfilename permet comme chacun sait d'ouvrir une fenêtre permettant d'obtenir un nom de fichier à enregistrer ou à charger.Pour MySQL et QT : QSQL [ par goodvampire ] bonjour,j'ai besoin de manipuler des bases de données via mysql sous qt,j'ai trouver le composant QSqlDatabase et je me suis dis que ca allait aller t Récupérer les donées d'un TStringGrid bcb6 dans une form2 [ par almisuifre ] Bonjour,je cherche depuis 5jours comment récupérer les données d'un TStringGrid sous bcb6 afin de les afficher dans une form2 qui permet la modificati Probleme avec les parametres dans shellexecute [ par unam13 ] Salut a tousJe debute completement en C++ et j'essaie de réaliser une petite interface permettant d'ouvrir des fichiers mp3 avec winampj'ai utilisé la Récupérer une data ou mettre à jour une listbox? [ par Frenchy62620 ] Voilà le prob..je suis sous VC++ 6J'ai créé une listbox dans lequel j'ajoute bien des éléments..SendMessage(hdlist,LB_ADDSTRING,0,buff)là pas de prob


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,874 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales