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