Dans le WLangage, les fonctions MCI permet de jouer les fichiers musicaux ou vidéos mais donne trop peu d’infos sur le média joué : son état, la position du curseur de lecture, la taille (pour les vidéos) et le nombre de pistes.
Pour ouvrir un peu le champ de la gestion des médias, sans réinventer la roue, Betula vous propose d’utiliser les bibliothèques MediaInfo.dll et AudioGenie3.dll (chacune en 32 ou 64 bits selon votre préférence).
Le tout est utilisable à travers 2 classes : cMedia (de base) et cFichierMP3 spécifique, vous l’avez compris, au format audio populaire mp3 (d’autres formats suivront). Les dll sont détectées automatiquement soit dans le répertoire de l’exécutable, soit dans le répertoire Windows (suffixez le nom des dll avec _32 ou _64 si votre application doit livrer les deux). Il n’est pas nécessaire d’avoir les 2 dll, une suffit, mais cela bridera évidemment les informations disponibles.
MediaInfo (22.6.0.0 testée) est spécialisé dans la lecture des informations des flux audio et vidéo (les formats supportés sont nombreux : mkv/mka/mks, ogg/ogm, avi/wav, mpeg/mpg/vob, mp4, mpgv/mpv/m1v/m2v, mp2/mp3, asf/wma/wmv, qt/mov, rm/rmvb/ra, ifo, ac3, dts, aac, ape/mac, flac, dat, aiff/aifc, au, iff, paf, sd2, irca, w64, mat, pvf, xi, sds, avr). Par contre, la lecture des tags est limitée et il n’est pas possible de les modifier.
C’est pourquoi, AudioGenie3 (2.0.4.0 testée) vient en soutient puisqu’il va plus loin dans la lecture des tags (une centaine pour le mp3 avec nom en angais et en français) et permettra, dans une version future, de les modifier ou de les supprimer. La classe cFichierMP3 contient également une centaine de genre musicaux reconnus par les tags V1.
Comparatif avec Foobar2000 (à gauche), MP3Tag (au centre) et cFichierMP3 (à droite)
Code d’exemple qui a permit la copie d’écran ci-dessus
clAudio est un cFichier_MP3()
SI clAudio.Ouvre("C:\Temp\Tina Brooks - Minor Move.mp3") ALORS
sRes est une chaîne
nIndice est un entier
POUR TOUT sValeur,sCode de clAudio.m_taValeurs
SI sCode="MP3INFO" ALORS CONTINUER //car contient plusieurs infos
nIndice = TableauCherche(cFichier_MP3.mg_tabMP3Tag,tcDichotomique,"sCode",sCode)
SI sValeur>"" _ET_ nIndice>0 ALORS
SI sCode="TXCUSTOM" ALORS
sRes+=[RC]+cFichier_MP3.mg_tabMP3Tag[nIndice].sNom5
POUR TOUTE CHAÎNE sInfo DE sValeur SEPAREE PAR RC
sRes+=[RC]+" "+Remplace(sInfo,TAB," : ")
FIN
SINON
sRes+=[RC]+cFichier_MP3.mg_tabMP3Tag[nIndice].sNom5+" : "+sValeur
FIN
FIN
FIN
sRes+=[RC]+"Tags"+" : "+(clAudio.p_bTagV1Existe ? "V1" SINON "")+[" & "]+(clAudio.p_bTagV2Existe ? "V"+clAudio.p_sVersion2 SINON "")
sRes+=[RC]+"Durée"+" : "+clAudio.p_sDurée
sRes+=[RC]+"MP3 version"+" : "+clAudio.p_sMP3Version
sRes+=[RC]+"MP3 profile"+" : "+clAudio.p_sMP3Profile
sRes+=[RC]+"MP3 setting"+" : "+clAudio.p_sMP3Paramètres
sRes+=[RC]+"MP3 type débit"+" : "+clAudio.p_sMP3TypeDébit
sRes+=[RC]+"MP3 débit"+" : "+clAudio.p_sMP3Débit
sRes+=[RC]+"MP3 canaux"+" : "+clAudio.p_sMP3Canaux
sRes+=[RC]+"MP3 échantillonnage"+" : "+clAudio.p_sMP3Échantillonnage
sRes+=[RC]+"MP3 compression"+" : "+clAudio.p_sMP3Compression
Info(sRes)
SINON
Erreur(clAudio.p_sErreurTout)
FIN