jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Défi mp3 Jeu 26 Mai 2022 - 14:53 | |
| J'ai une question un peu compliquée pour les grands spécialistes : Comment faire pour obtenir (par un programme en pur panoramic) la durée d'un fichier mp3 en minutes et secondes ? Dans l'idée, je vois plusieurs formules possibles : 1) C'est déjà écrit quelque part dans le fichier mp3, mais où ? 2) Y = (X - a) / b . où Y = durée en secondes . X = longueur du fichier mp3 en octets . a = octets indépendants de la longueur du son . b = nombre d'octets joués en une seconde Peut-être y a-t-il encore une autre formule ???? Parmi nos spécialistes, il y a quelqu'un qui sait répondre à cela ? J'ai un peu tâté de la formule 2 : Ca me donne : Y = (X - 14000) / 16000 mais c'est assez approximatif.... Il y a quelqu'un qui a mieux ? A vos marques... prêt ? partez ! | |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Défi mp3 Jeu 26 Mai 2022 - 16:06 | |
| Salut jjn4,
Désolé, je supprime mon intervention, la solution donnée en script ne marche pas...
Effectivement il faudrait connaître la structure d'un MP3 et aller lire directement dans le fichier. Mais j'ai un peu de mal à trouver la structure. J'ai bien une sub qui fait le boulot en faisant appel à ffmpeg.exe, ce n'est pas du pur panoramic. | |
|
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Défi mp3 Ven 27 Mai 2022 - 10:57 | |
| Le bonjour à tous ! @JJN4 Voici un petit code-source qui permet une analyse très succincte de certains MP3 comme les chants d‘oiseaux de ton programme. Peut-être est-ce suffisant ? En quelques mots : Le programme ne fonctionne qu’avec un MP3 contenant qu’un seul et unique fichier audio de type MPEG version 1 (ISO/IEC 11172-3) layer III. Il recherche l’entête de synchronisation composée de 11 bits à 1 successifs. Cela permet de sauter toutes les métadonnées (ID3) pour calculer la longueur exacte de l'unique trame audio. Puis on recherche le code du débit binaire qui nous donnera la valeur réelle du débit via un tableau de correspondance bitRate%(x). En dernier, on divise la longueur de la trame audio par le débit binaire pour avoir la durée en secondes. - Code:
-
dim bitRate%(16), i% data 0,32,40,48,56,64,80,96,112,128,160,192,224,256,320,0
for i% = 0 to 15 read bitRate%(i%) next i%
open_dialog 1
analyseFichier()
end
sub analyseFichier() dim_local nomFichier$, octet1$, octet2$, octet3$, octet4$, index%, entete$, valeurDecimal%, MPEG%, quartet$, debit%, longueurAudio%, duree% dim_local hr%, mn%, sec%
' ouvrir fichier MP3 filter 1,"Fichier MP3 (*.mp3)|*.mp3" nomFichier$ = file_name$(1)
print " Nom du fichier : " + file_extract_name$(nomFichier$)
' Recherche de l'entête audio. On ignore toutes les métadonnées éventuelles (ID3) filebin_open_read 2,nomfichier$ ' recherche de la séquence de synchronisation composée de 11 bits successifs à 1 while octet1$ <> "FF" filebin_hexa_read 2,1,octet1$ if octet1$ = "FF" :' les huit premiers bits sont à 1 filebin_hexa_read 2,1,octet2$ if left$(octet2$,1) = "E" or left$(octet2$,1) = "F" :' les 3 bits de poids fort sont à 1 filebin_hexa_read 2,1,octet3$ filebin_hexa_read 2,1,octet4$ exit_while end_if end_if octet1$ = "" end_while
index% = filebin_pos(2)
longueurAudio% = filebin_size(2) - index% filebin_close 2 ' recherche code du débit binaire quartet$ = left$(octet3$,1) debit% = bitRate%(hex(quartet$)) * 1000
print " Débit binaire : " + str$(debit%)
duree% = longueurAudio% * 8 / debit%
mn% = int(duree%/60) sec% = ((duree%/60)-mn%) * 60 print "Durée : " + str$(mn%) + "min " + str$(sec%) + "s" end_sub
Je ferai un programme plus exhaustif ultérieurement. | |
|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 27 Mai 2022 - 14:52 | |
| | |
|
jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: Défi mp3 Ven 27 Mai 2022 - 15:09 | |
| Ouhaaaa ! Bravo !!! Ca, c'est du grand art ! Et c'est précis ! J'ai calculé, à partir de 45 fichiers : (en comparant avec la durée calculée par la fenêtre Windows) 25 donnent une durée exactement identique 20 affichent une différence de seulement 1 seconde (et toujours en plus) - Marc a écrit:
- Peut-être est-ce suffisant ?
Largement, oui ! D'autant que rien ne prouve que la durée calculée par la fenêtre Windows soit si fiable que ça ! Merci bien, Marc ! Toujours en grande forme olympique, je vois ! Et merci aussi pour Yannick, ça explique le code de Marc, mais c'est vrai que c'est du pointu ! (Et sans oublier de saluer JL35, que cela fait toujours plaisir de retrouver) Et sans vouloir vous mettre trop tôt la salive à la bouche, je concocte un truc... mais c'est très long et ce sera pour la rentrée... | |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Défi mp3 Ven 27 Mai 2022 - 17:37 | |
| Bonjour à tous,
Effectivement Marc c'est exactement ce qu'il fallait et que je n'ai pas réussi à faire. Bravo et merci. (pour mes besoins personnels j'ai bricolé un peu la sub pour renvoyer le résultat dans le clipboard sous la forme HH:MM:SS) | |
|
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Défi mp3 Ven 27 Mai 2022 - 20:59 | |
| Super ! Merci à tous ! - JJN4 a écrit:
- une différence de seulement 1 seconde (et toujours en plus)
Ah… les arrondis… Remplace la ligne 54 : Ancienne ligne : duree% = longueurAudio% * 8 / debit% Nouvelle ligne : duree% = int(longueurAudio% * 8 / debit%) Par ailleurs, dans le code-source, j’ai omis de supprimer les variables locales devenues inutiles au fil du développement. A supprimer : hr%, MPEG%, valeurDecimal%, entete$. Bonne programmation à tous ! | |
|
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Défi mp3 Ven 27 Mai 2022 - 21:16 | |
| Ah oui intéressant ce lien Yannick. Mais c'est quand même pas simple... - Citation :
- Et sans vouloir vous mettre trop tôt la salive à la bouche,
je concocte un truc... mais c'est très long et ce sera pour la rentrée... Ah ben mince moi qui m'attendais à un nouveau programme pour les vacances... Bon et bien j'attendrai la rentrée alors... | |
|
jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: Défi mp3 Sam 28 Mai 2022 - 11:41 | |
| Ah, super ! Cette fois, plus d'arrondis ! Ca donne la durée exacte dans 100% des cas ! Vraiment, super ! Vive les cracks en informatique ! Petite indice pour Minibug : (C'est pour les gens qui aiment la musique classique) (mais chuttt......... !) | |
|