6
votes

Comment puis-je obtenir la durée d'un fichier MP3 (CBR ou VBR) avec une très petite bibliothèque ou code natif C / C ++?

Je ne peux pas utiliser de code MP3 breveté par Fraunhofer, donc pas de codeurs ou de décodeurs (par exemple FFMPEG, boiteux, fou, etc.), plus c'est trop grand.

Je fais cela sur Windows, mais l'IMEDIADET de DirectShow semble lent bas sur le temps, l'appelant quelques centaines de fois mon système à crawler, même en utilisant le même objet d'interface et juste Mettre le nom du fichier et obtenir la durée!

Alors, y a-t-il du code qui peut lire des fichiers VBR avec C / C ++ et obtenir la durée?

Il y avait un autre message ici pour faire CBR en C ++, mais le code fait une tonne d'hypothèses et ne fonctionnera pas pour VBR bien sûr.


1 commentaires

Je l'ai fait à l'aide de Naudio et de petits fragments de code. La licence Naudio vous permet de faire une partie du code, dans votre cas de classe MP32. Ensuite, je viens de traverser les cadres et ajoutez les durées, comme ici: Stackoverflow.com/Questtions/383164/...


4 Réponses :


1
votes

J'ai trouvé une bibliothèque qui le fait, LGPL V3: http: // www.codeproject.com/kb/audio-video/mpegaudioInfo.aspx


0 commentaires

-1
votes

Comment sur TagLib ou ID3LIB ?

Ce ne sont pas des décodeurs en soi, ils ont plus d'extraire la piste / artiste / album et animatrice d'autres informations qui vous permettront de faire ce que vous devez faire ...


0 commentaires

4
votes

La plupart des fichiers MP3 ont un ID3 Header . Il n'est pas difficile de décoder cela et d'obtenir la durée.

Voici quelques très code de base et laid illustrant la technique. xxx


2 commentaires

Vous ne pouvez pas en dépendre de cela, car ce n'est pas la partie standard des fichiers MPEG1-COUCHE 3.


L'en-tête ID3 n'est pas tenu d'être présent et même s'il est présent, il n'est pas garanti d'avoir une balise TLEN. Cependant, dans mon expérience (limitée), la majorité accablante des MP3 disposent d'un en-tête ID3 et d'une balise TLEN. Le code doit être écrit pour être tolérent d'erreur, mais vous pourriez aussi bien utiliser les informations s'il est là. Vous serez presque toujours ok et sur les rares cas où les informations ne sont pas disponibles, vous pouvez le détecter en toute sécurité et le contourner.



2
votes

Jeff,

Le seul moyen valide est de passer via un fichier MP3 entier, de trouver chaque image MP3 à l'intérieur et de calculer la durée totale pour eux.

Caractéristiques principale du fichier MP3 est que leur densité peut différer, et aussi que les autres données binaires pourraient être incluses à l'intérieur. ID3 Tags Par exemple, que tout décodeur saute en lecture.

Quoi qu'il en soit - regardez ici pour l'en-tête MP3 Cadre Info:

http://www.mp3-converter.com/mp3codec/mp3_anatomy.htm

Essayez de créer du code qui analysera correctement l'en-tête par l'en-tête, calculez leur durée (de la fréquence d'échantillonnage), puis totalez les durées de toutes les cadres.

Vous n'avez pas à décoder les cadres, utilisez simplement des en-têtes d'eux.

Si cela ne vous dérange pas LGPL, essayez http://sourceforge.net/projects/mpg123net/


0 commentaires